i.MX6ULL General Purpose Fuses - What CAN I use?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX6ULL General Purpose Fuses - What CAN I use?

348 Views
Abram
Contributor I

I must admit, I'm losing my mind trying to navigate your confusing, outdated, and outright wrong documentation regarding the OCOTP on the i.MX6ULL. We are looking to store a 9 byte vendor specific serial number in the OTP memory, and we were originally planning to put it in the GP3 general purpose region.

When we first tried writing these fuses today, it failed giving an access error. There was no locking bit set, so I assumed that the documentation had mislabeled the address the registers were put it. GP3_0 for example is listed at three different addresses/indexes. On page 2386, it's listed at 0x48. On page 2430, it's listed at 0x38 AND 0x40. Not to mention every single GP3 or GP4 registers is listed under bank 7 in the title, and bank 8 in the field description, with the exception of GP4_0 which is listed under bank 8 in the title. 

Then I discovered that the most recent version of linux-imx expanded the number of registers from 64 to 80. (See https://github.com/nxp-imx/linux-imx/blob/lf-6.12.y/drivers/nvmem/imx-ocotp.c line 527) So I patched our kernel, and tried writing to these higher addresses assuming the that the higher addresses listed in the documentation were correct. (Namely, byte offset 0x120 , to match the 0x48 on page 2386. Not only did it not work, it just silently wrapped around to 0x020 and wrote that fuse instead. Thankfully, it didn't brick or damage my device, but I'm wildly confused about why this change was made if it only exposes even more dangerous behavior? https://github.com/nxp-imx/linux-imx/commit/2382c1b044231fd49eaf9aa82bc7113fc55487b8

But moreover, since the reference manual was never updated, I only discovered today that there is an errata stating that GP3 and GP4 simply aren't useable at all. Could you PLEASE update the reference manual with this mission critical info?!?!

 

So, now that you know how I got here, I need to know what options our team has. We are too far into development to switch to a chip with more explicitly available general purpose fuse that work. What can I use? The Analog words? (ANA0-2) The SW_GP words? (SW_GP0-4) What would they be used for otherwise? GP1 and GP2 are obviously available, but we need just a little more space, and a contiguous, separately lockable region would be ideal.

Labels (2)
0 Kudos
Reply
0 Replies