131 def reset(self, soft, forcepllcfg):
132 '''
133 Perform a hard reset on the timing master, including
134
135 \b
136 - ipbus registers
137 - i2c buses
138 - pll and pll configuration
139
140 \b
141 Fanout mode:
142 0 = local master
143 1 = sfp
144 '''
145
146 lDevice = self.device
147 lBoardType = self.info.boardType
148 lCarrierType = self.info.carrierType
149 lDesignType = self.info.designType
150
151 echo('Resetting ' + click.style(lDevice.id(), fg='blue'))
152
153 lIO = lDevice.getNode('io')
154
155
156 self.soft_reset()
157
158 if not (soft or lBoardType == kBoardSim):
159
160 time.sleep(0.1)
161
162
163 self.resetI2CnPll()
164
165
166 self.enableI2CSwitch()
167
168 lUniqueID = self.readUID()
169
170 try:
171 lRevision = self.kUIDRevisionMap[lUniqueID]
172 except KeyError:
173 raise click.ClickException("No revision associated to UID "+hex(lUniqueID))
174
175
176 lI2CBusNode = lDevice.getNode("io.i2c")
177 lSIChip = SI534xSlave(lI2CBusNode, lI2CBusNode.get_slave('SI5345').get_i2c_address())
178 lSIVersion = lSIChip.read_device_version()
179 echo("PLL version : "+style(hex(lSIVersion), fg='blue'))
180
181
182 if forcepllcfg is not None:
183 lFullClockConfigPath = forcepllcfg
184 echo("Using PLL Clock configuration file: "+style(basename(lFullClockConfigPath), fg='green') )
185 else:
186 try:
187 lClockConfigPath = self.kClockConfigMap[lRevision]
188 except KeyError:
189 raise ClickException("Board revision " << lRevision << " has no associated clock configuration")
190
191 echo("PLL Clock configuration file: "+style(lClockConfigPath, fg='green') )
192
193
194 lFullClockConfigPath = expandvars(join('${TIMING_SHARE}/config/etc/clock', lClockConfigPath))
195
196 lSIChip.configure(lFullClockConfigPath)
197 echo("SI3545 configuration id: {}".format(style(lSIChip.read_config_id(), fg='green')))
198
199 self.configureExpanders()
200
201
202 lI2CBusNode = lDevice.getNode("io.i2c")
203 self.configure_pllSwing()
204
205 self.configure_dacs()
206
207 self.resetLockMon()
208
209