WIP: firmware: guard I2C transactions with timeout...
by whitequark 6 years 5 months
WIP: firmware: guard I2C transactions with timeouts.

If we don't add timeouts on I2C transactions, then the USB request
that caused it (for reads) or the next USB control request (for
writes) will silently hang forever until the device is power cycled.

This is clearly undesirable. However, this does not happen at all
during normal operation, and although it hardens the device, the FX2
firmware size comes at a premium, and blindly spraying these guard
conditions adds a nontrivial increase.

Therefore this code, although tested, is not currently used.
0744b81e
applet.i2c_master: require revC+.
by whitequark 6 years 5 months
applet.i2c_master: require revC+.

The I2CPadsWrapper hack was horrible to use even when it worked.
I can't in good conscience recommenda anyone with a revA/B do that,
so let's get rid of it.
a8ac6bad
device.hardware: add pull set support.
by whitequark 6 years 5 months
f20df846
firmware: add pull get/set support.
by whitequark 6 years 5 months
677ae121
firmware: persist voltage limit on writes, not rea...
by whitequark 6 years 5 months
firmware: persist voltage limit on writes, not reads.

Oops... this would have written the EEPROM on each `glasgow voltage`
invocation.
4069c6aa
applet: add required_revision field.
by whitequark 6 years 5 months
d86e42c4
applet.jtag: enumerate-ir: make more robust to mis...
by whitequark 6 years 5 months
applet.jtag: enumerate-ir: make more robust to missing DRs.

A missing DR is a DR that leaves TDO unconnected when it is selected.
730ccd6f
applet.jtag_mips: update the lists of tested confi...
by whitequark 6 years 5 months
applet.jtag_mips: update the lists of tested configurations.
5411dec7
applet.jtag: enumerate-ir: handle incorrect TAP se...
by whitequark 6 years 5 months
applet.jtag: enumerate-ir: handle incorrect TAP selection.
9cc3d9a4
applet.jtag: reset TAP chain before selecting a TA...
by whitequark 6 years 5 months
applet.jtag: reset TAP chain before selecting a TAP.

Selecting a TAP requires reading IDCODE/BYPASS from DR, which means
that a TAP chain reset was a precondition for select_tap(), but this
wasn't intended or documented. The current design requires a reset,
so just add that.

Since all derived applets want to select a TAP, remove the TAP reset
via TMS from run(); however, keep TAP reset via TRST#, because that
enables the TRST# driver.
fef9fff0
Report a bug