This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM62L: Programming MAC ID into eOTP on AM62L

Part Number: AM62L

Hello TI team,

We are exploring programming inique Ethernet MAC addresses permanently to each of our AM62L-based units during manufacturing. As I understand from https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1235880/faq-how-to-update-ids-usb-pcie-pid-vid-mac-id-by-programming-extended-otp-on-am6x, if this data is written in a specifc format, the ROM will copy this address to the memory mapped registers at boot time.

For ease of manufacturing, we would be looking to do a two-stage approach:

1) Write the secure boot keys, along with our OUI prefix for the MAC address into the device's OTP area. We would want to store this as a keywriter blob to be shared among all manufactured units.

2) At runtime in the U-Boot shell, burn the device ID, along with other device unique information into the OTP.

Could you please clarify if the process above would be supported?

Specifically:

Is the boot time ROM copy of the MAC address from the extended OTP area into the MACID0/MACID1 supported with the AM62L?

How would we need to layout the information in extended OTP to accomplish this?:

- For the keywriter lite utility, I suspect we would need to program the fields as follows:
 
image.png
Where AA:BB:CC represents our OUI, and DD:EE:FF represents the device ID (written as 0 to be programmed later in U-Boot).
 
- To write into U-Boot at runtime, use the `fuse prog 0 30 0xEEFFCCDD` shell command after enabling VPP.
 
What rows would we need to write-protect from the keywriter-lite utility, and what rows would be protected after using the u-boot fuse command?

If you have any other examples or scripts that would also be greatly appreciated.

Thank you,
 
Aidan
  • Hi Aidan,
    I'm currently on PTO, and will get back to you sometime next week.
    Best,
    -Hong

  • Hi Aidan,

    I have an example of programming USB VID/PID with the Keywriter-lite on AM62L SR1.1 HS-FS for your reference.

    1/. use the key_configurator tool to create two *.c/*.bin files for the extended OTP efuse row #31 & row #32
    I'm attaching the two *.c files for your reference.
    - keywrlite_otp_31.c: row#31
    - keywrlite_otp_32_1.c: row#32

    2/. I'm attaching two log files for programming the two generated bin files @u-boot prompt
    - am62l_sr1.1_mmr_id_otp_31.log: program row#31
    - am62l_sr1.1_mmr_id_otp_32_1.log: program row#32

    3/. I'm attaching a log reading the extended OTP efuse & CM MMR WKUP_CTRL_MMR_CFG0_USB_DEVICE_ID0 after programming
    - am62l_sr1.1_mmr_id_post.log

    Best,
    -Hong

    // Uncomment and modify the following definitions as per the compiler used
    // typedef char uint8_t;
    // typedef unsigned short uint16_t;
    // typedef unsigned int uint32_t;
    // typedef unsigned long uint64_t;
    
    struct uboot_header {
        uint32_t version_info;
        uint32_t fuse_mode;
    } __attribute__((packed));
            
    struct keywriter_lite_header {
        uint16_t magic;
        uint16_t size;
        uint8_t abi_major;
        uint8_t abi_minor;
        uint16_t reserved0;
        uint32_t cmd_id;
        uint32_t reserved1[2];
    } __attribute__((packed));
            
    struct ext_otp {
        uint32_t field_header;
        uint32_t action_flags;
        uint16_t ext_otp_size;
        uint16_t ext_otp_index;
        uint8_t ext_otp_rpwp[16];
        uint8_t ext_otp[128];
        uint32_t reserved[4];
    } __attribute__((packed));
            
    struct checksum {
        uint8_t hash[64];
    } __attribute__((packed));
            
    struct keywrlite_blob {
        struct uboot_header ubheader;
        struct keywriter_lite_header header;
        struct ext_otp extotp;
        struct checksum chksum;
    }__attribute__((packed));
    
    struct keywrlite_blob blob = {
        .ubheader =
            {
                .version_info = 0x1,
                .fuse_mode = 0x9045,
            }
            ,
        .header =
            {
                .magic = 0x9012,
                .size = 172,
                .abi_major = 0,
                .abi_minor = 1,
                .reserved0 = 0,
                .cmd_id = 12,
                .reserved1 = {0x0, 0x0},
            }
            ,
        .extotp =
            {
                .field_header = 0xd0e5,
                .action_flags = 0xa5a5a55a,
                .ext_otp_size = 32,
                .ext_otp_index = 960,
                .ext_otp_rpwp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
                .ext_otp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x47, 0xe0, 0xa0, 0x45, 0x0, 0x0, 0x0, 0x0},
                .reserved = {0x0, 0x0, 0x0, 0x0},
            }
            ,
        .chksum =
            {
                .hash = {0xe9, 0xbf, 0x93, 0x5f, 0xde, 0x78, 0x28, 0x54, 0x20, 0xd4, 0x47, 0x13, 0x74, 0xb1, 0x4b, 0x2e, 0xd1, 0xcd, 0x67, 0x93, 0xb6, 0x6e, 0x74, 0xbb, 0x72, 0xa5, 0xca, 0xc9, 0xd0, 0x93, 0xf2, 0xb3, 0x90, 0x5a, 0xa4, 0xd5, 0x9a, 0x2d, 0x4, 0xc0, 0xc4, 0xcf, 0xfc, 0x4d, 0xd9, 0x99, 0x12, 0x11, 0xc1, 0x97, 0x84, 0xb6, 0x14, 0x3, 0xe, 0xe6, 0x6f, 0x44, 0x77, 0x8, 0xd5, 0x60, 0x64, 0x8a},
            }
            ,
    
    };

    // Uncomment and modify the following definitions as per the compiler used
    // typedef char uint8_t;
    // typedef unsigned short uint16_t;
    // typedef unsigned int uint32_t;
    // typedef unsigned long uint64_t;
    
    struct uboot_header {
        uint32_t version_info;
        uint32_t fuse_mode;
    } __attribute__((packed));
            
    struct keywriter_lite_header {
        uint16_t magic;
        uint16_t size;
        uint8_t abi_major;
        uint8_t abi_minor;
        uint16_t reserved0;
        uint32_t cmd_id;
        uint32_t reserved1[2];
    } __attribute__((packed));
            
    struct ext_otp {
        uint32_t field_header;
        uint32_t action_flags;
        uint16_t ext_otp_size;
        uint16_t ext_otp_index;
        uint8_t ext_otp_rpwp[16];
        uint8_t ext_otp[128];
        uint32_t reserved[4];
    } __attribute__((packed));
            
    struct checksum {
        uint8_t hash[64];
    } __attribute__((packed));
            
    struct keywrlite_blob {
        struct uboot_header ubheader;
        struct keywriter_lite_header header;
        struct ext_otp extotp;
        struct checksum chksum;
    }__attribute__((packed));
    
    struct keywrlite_blob blob = {
        .ubheader =
            {
                .version_info = 0x1,
                .fuse_mode = 0x9045,
            }
            ,
        .header =
            {
                .magic = 0x9012,
                .size = 172,
                .abi_major = 0,
                .abi_minor = 1,
                .reserved0 = 0,
                .cmd_id = 12,
                .reserved1 = {0x0, 0x0},
            }
            ,
        .extotp =
            {
                .field_header = 0xd0e5,
                .action_flags = 0xa5a5a55a,
                .ext_otp_size = 32,
                .ext_otp_index = 992,
                .ext_otp_rpwp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
                .ext_otp = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0, 0xc8, 0xeb},
                .reserved = {0x0, 0x0, 0x0, 0x0},
            }
            ,
        .chksum =
            {
                .hash = {0x9d, 0x7d, 0x22, 0x67, 0xe9, 0xc4, 0x67, 0xbf, 0x6b, 0x7f, 0xc6, 0xa4, 0xb7, 0xda, 0x60, 0xda, 0x6e, 0x24, 0xf, 0x94, 0x3a, 0xbd, 0x84, 0x7b, 0xa6, 0x64, 0x51, 0x7b, 0x74, 0xe8, 0xde, 0x80, 0xf9, 0x33, 0xd1, 0x49, 0x9, 0xa, 0x22, 0xf9, 0xda, 0x3d, 0x9b, 0x95, 0xc7, 0x6d, 0x8d, 0xd4, 0x64, 0xb2, 0x9d, 0xdd, 0xf2, 0x4c, 0x73, 0x1, 0x61, 0x0, 0xef, 0x3, 0x48, 0x35, 0x49, 0xbf},
            }
            ,
    
    };

    NOTICE:  Booting Trusted Firmware
    NOTICE:  BL1: v2.14.0(release):d203b8453
    NOTICE:  BL1: Built : 15:35:41, Jul 10 2026
    NOTICE:  BL1: dram_class: 11
    NOTICE:  DDR init done
    NOTICE:  ENTERING WFI - end of bl1
    NOTICE:  BL31: v2.14.0(release):d203b8453
    NOTICE:  BL31: Built : 15:35:42, Jul 10 2026
    NOTICE:  SYSFW ABI: 4.0 (firmware rev 0x000c '12.0.2--v12.00.02 (Clever Cat)')
    ERROR:   Agent 0 Protocol 0x10 Message 0x7: not supported
    
    U-Boot SPL 2026.01-g2549829cc194-dirty (Jul 10 2026 - 10:42:45 -0500)
    SPL initial stack usage: 1936 bytes
    Trying to boot from MMC2
    ## Checking hash(es) for config conf-0 ... sha512,rsa4096:custMpk+ OK
    ## Checking hash(es) for Image uboot ... sha512+ OK
    ## Checking hash(es) for Image fdt-0 ... sha512+ OK
    ERROR:   Agent 0 Protocol 0x10 Message 0x7: not supported
    
    
    U-Boot 2026.01-g2549829cc194-dirty (Jul 10 2026 - 10:42:45 -0500)
    
    SoC:   AM62LX SR1.1 HS-FS
    Model: Texas Instruments AM62L3 Evaluation Module
    DRAM:  2 GiB
    ERROR:   Agent 0 Protocol 0x10 Message 0x7: not supported
    Core:  80 devices, 34 uclasses, devicetree: separate
    MMC:   mmc@fa10000: 0, mmc@fa00000: 1
    Loading Environment from nowhere... OK
    In:    serial@2800000
    Out:   serial@2800000
    Err:   serial@2800000
    Net:   eth0: ethernet@8000000port@1
    Warning: ethernet@8000000port@2 (eth1) using random MAC address - be:65:cd:95:51:b5
    , eth1: ethernet@8000000port@2
    Hit any key to stop autoboot:  2 
    Hit any key to stop autoboot: 0
    => mw 0x82000000 0 0x400
    => fatload mmc 1:1 0x82000000 keywrlite_otp_31.bin
    264 bytes read in 1 ms (257.8 KiB/s)
    => dcache flush
    => md.b 0x82000000 0x300
    82000000: 01 00 00 00 45 90 00 00 12 90 ac 00 00 01 00 00  ....E...........
    82000010: 0c 00 00 00 00 00 00 00 00 00 00 00 e5 d0 00 00  ................
    82000020: 5a a5 a5 a5 20 00 c0 03 00 00 00 00 00 00 00 00  Z... ...........
    82000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820000b0: 47 e0 a0 45 00 00 00 00 00 00 00 00 00 00 00 00  G..E............
    820000c0: 00 00 00 00 00 00 00 00 e9 bf 93 5f de 78 28 54  ..........._.x(T
    820000d0: 20 d4 47 13 74 b1 4b 2e d1 cd 67 93 b6 6e 74 bb   .G.t.K...g..nt.
    820000e0: 72 a5 ca c9 d0 93 f2 b3 90 5a a4 d5 9a 2d 04 c0  r........Z...-..
    820000f0: c4 cf fc 4d d9 99 12 11 c1 97 84 b6 14 03 0e e6  ...M............
    82000100: 6f 44 77 08 d5 60 64 8a 00 00 00 00 00 00 00 00  oDw..`d.........
    82000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    => i2c dev 1
    Setting bus to 1
    => i2c probe 22
    Valid chip addresses: 22
    => i2c mw 0x22 0x04 0x00
    => i2c mw 0x22 0xC 0xEF
    => i2c mw 0x22 0x04 0x10
    => fuse writebuff -y 0x82000000
    Programming fuses using a structured buffer in memory starting at addr 0x82000000
    NOTICE:  Writebuff version info: 0x1
    => 

    NOTICE:  Booting Trusted Firmware
    NOTICE:  BL1: v2.14.0(release):d203b8453
    NOTICE:  BL1: Built : 15:35:41, Jul 10 2026
    NOTICE:  BL1: dram_class: 11
    NOTICE:  DDR init done
    NOTICE:  ENTERING WFI - end of bl1
    NOTICE:  BL31: v2.14.0(release):d203b8453
    NOTICE:  BL31: Built : 15:35:42, Jul 10 2026
    NOTICE:  SYSFW ABI: 4.0 (firmware rev 0x000c '12.0.2--v12.00.02 (Clever Cat)')
    ERROR:   Agent 0 Protocol 0x10 Message 0x7: not supported
    
    U-Boot SPL 2026.01-g2549829cc194-dirty (Jul 10 2026 - 10:42:45 -0500)
    SPL initial stack usage: 1936 bytes
    Trying to boot from MMC2
    ## Checking hash(es) for config conf-0 ... sha512,rsa4096:custMpk+ OK
    ## Checking hash(es) for Image uboot ... sha512+ OK
    ## Checking hash(es) for Image fdt-0 ... sha512+ OK
    ERROR:   Agent 0 Protocol 0x10 Message 0x7: not supported
    
    
    U-Boot 2026.01-g2549829cc194-dirty (Jul 10 2026 - 10:42:45 -0500)
    
    SoC:   AM62LX SR1.1 HS-FS
    Model: Texas Instruments AM62L3 Evaluation Module
    DRAM:  2 GiB
    ERROR:   Agent 0 Protocol 0x10 Message 0x7: not supported
    Core:  80 devices, 34 uclasses, devicetree: separate
    MMC:   mmc@fa10000: 0, mmc@fa00000: 1
    Loading Environment from nowhere... OK
    In:    serial@2800000
    Out:   serial@2800000
    Err:   serial@2800000
    Net:   eth0: ethernet@8000000port@1
    Warning: ethernet@8000000port@2 (eth1) using random MAC address - be:4d:6d:a2:93:71
    , eth1: ethernet@8000000port@2
    Hit any key to stop autoboot:  2 
    Hit any key to stop autoboot: 0
    => mw 0x82000000 0 0x400
    => fatload mmc 1:1 0x82000000 keywrlite_otp_32_1.bin
    264 bytes read in 2 ms (128.9 KiB/s)
    => dcache flush
    => md.b 0x82000000 0x300
    82000000: 01 00 00 00 45 90 00 00 12 90 ac 00 00 01 00 00  ....E...........
    82000010: 0c 00 00 00 00 00 00 00 00 00 00 00 e5 d0 00 00  ................
    82000020: 5a a5 a5 a5 20 00 e0 03 00 00 00 00 00 00 00 00  Z... ...........
    82000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820000b0: 00 00 00 00 21 00 c8 eb 00 00 00 00 00 00 00 00  ....!...........
    820000c0: 00 00 00 00 00 00 00 00 9d 7d 22 67 e9 c4 67 bf  .........}"g..g.
    820000d0: 6b 7f c6 a4 b7 da 60 da 6e 24 0f 94 3a bd 84 7b  k.....`.n$..:..{
    820000e0: a6 64 51 7b 74 e8 de 80 f9 33 d1 49 09 0a 22 f9  .dQ{t....3.I..".
    820000f0: da 3d 9b 95 c7 6d 8d d4 64 b2 9d dd f2 4c 73 01  .=...m..d....Ls.
    82000100: 61 00 ef 03 48 35 49 bf 00 00 00 00 00 00 00 00  a...H5I.........
    82000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820001f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    82000290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    820002f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    => i2c dev 1
    Setting bus to 1
    => i2c probe 22
    Valid chip addresses: 22
    => i2c mw 0x22 0x04 0x00
    => i2c mw 0x22 0xC 0xEF
    => i2c mw 0x22 0x04 0x10
    => fuse writebuff -y 0x82000000
    Programming fuses using a structured buffer in memory starting at addr 0x82000000
    NOTICE:  Writebuff version info: 0x1
    => 

    NOTICE:  Booting Trusted Firmware
    NOTICE:  BL1: v2.14.0(release):d203b8453
    NOTICE:  BL1: Built : 15:35:41, Jul 10 2026
    NOTICE:  BL1: dram_class: 11
    NOTICE:  DDR init done
    NOTICE:  ENTERING WFI - end of bl1
    NOTICE:  BL31: v2.14.0(release):d203b8453
    NOTICE:  BL31: Built : 15:35:42, Jul 10 2026
    NOTICE:  SYSFW ABI: 4.0 (firmware rev 0x000c '12.0.2--v12.00.02 (Clever Cat)')
    ERROR:   Agent 0 Protocol 0x10 Message 0x7: not supported
    
    U-Boot SPL 2026.01-g2549829cc194-dirty (Jul 10 2026 - 10:42:45 -0500)
    SPL initial stack usage: 1936 bytes
    Trying to boot from MMC2
    ## Checking hash(es) for config conf-0 ... sha512,rsa4096:custMpk+ OK
    ## Checking hash(es) for Image uboot ... sha512+ OK
    ## Checking hash(es) for Image fdt-0 ... sha512+ OK
    ERROR:   Agent 0 Protocol 0x10 Message 0x7: not supported
    
    
    U-Boot 2026.01-g2549829cc194-dirty (Jul 10 2026 - 10:42:45 -0500)
    
    SoC:   AM62LX SR1.1 HS-FS
    Model: Texas Instruments AM62L3 Evaluation Module
    DRAM:  2 GiB
    ERROR:   Agent 0 Protocol 0x10 Message 0x7: not supported
    Core:  80 devices, 34 uclasses, devicetree: separate
    MMC:   mmc@fa10000: 0, mmc@fa00000: 1
    Loading Environment from nowhere... OK
    In:    serial@2800000
    Out:   serial@2800000
    Err:   serial@2800000
    Net:   eth0: ethernet@8000000port@1
    Warning: ethernet@8000000port@2 (eth1) using random MAC address - ba:70:1b:96:8d:11
    , eth1: ethernet@8000000port@2
    Hit any key to stop autoboot:  2 
    Hit any key to stop autoboot: 0
    => fuse read 0 30
    Reading bank 0:
    
    Word 0x0000001e: 45a0e047
    => fuse read 0 31
    Reading bank 0:
    
    Word 0x0000001f: ebc80021
    => md.l 0x43004000 2
    43004000: e04745a0 61650451                    .EG.Q.ea
    =>