On 4/19/22 4:58 PM, Sean Anderson wrote: > This adds a driver for the Security Fuse Processor (SFP) present on > LS1012A, LS1021A, LS1043A, and LS1046A processors. It holds the > Super-Root Key (SRK), One-Time-Programmable Master Key (OTPMK), and > other "security" related fuses. Similar devices (sharing the same name) > are present on other processors, but for the moment this just supports > the LS2 variants. > > The mirror registers are loaded during power-on reset. All mirror > registers must be programmed or read at once. Because of this, `fuse > prog` will program all fuses, even though only one might be specified. > To prevent accidentally burning through all your fuse programming cycles > with something like `fuse prog 0 0 A B C D`, we limit ourselves to one > programming cycle per reset. Fuses are numbered based on their address. > The fuse at 0x1e80200 is 0, the fuse at 0x1e80204 is 1, etc. > > The TA_PROG_SFP supply must be enabled when programming fuses, but must > be disabled when reading them. Typically this supply is enabled by > inserting a jumper or by setting a register in the board's FPGA. I've > also added support for using a regulator. This could be helpful for > automatically issuing the FPGA write, or for toggling a GPIO controlling > the supply. > > I suggest using the following procedure for programming: > > 1. Override the fuses you wish to program > => fuse override 0 2 A B C D > 2. Inspect the values and ensure that they are what you expect > => fuse sense 0 2 4 > 3. Enable TA_PROG_SFP > 4. Issue a program command using OSPR0 as a dummy. Since it contains the > write-protect bit you will usually want to write it last anyway. > => fuse prog 0 0 0 > 5. Disable TA_PROG_SFP > 6. Read back the fuses and ensure they are correct > => fuse read 0 2 4 > > Signed-off-by: Sean Anderson <sean.ander...@seco.com> > ---
I forgot to mention this, but this patch depends on https://lore.kernel.org/u-boot/20220419191245.3749739-1-sean.ander...@seco.com/T/#u