Dear All,
We set CCM_CGPR [ efuse_prog_supply_gate ] bit, in order to blow OTP.
However, It seems that even unset can blow OTP.
We can see it set in SDK for i.MX6.
But, we cannot find that it is set in u-boot and linux-kernel source code.
Possibly, is this bit unnecessary in order to blow efuse on i.MX6?
Please let me know the detailed function for this bit in i.MX6.
Best Regards,
George
P.S. If the eFUSE values are reload to shadow registers, with this bit set, we will get an incorrect value in some areas.
Original Attachment has been moved to: incorrect_shadow_register.txt.zip
Original Attachment has been moved to: can_blow_also_with_unset_supply_gate.txt.zip
You may use U-boot to work with the fuses, assuming VDD_FUSE is
proper for writing. Below is IIM command help of U-boot.
U-Boot > help iim
iim - IIM sub system
Usage:
iim Warning: all numbers in parameter are in hex format!
iim read <bank> <row> - Read some fuses
iim read fecmac - Read FEC Mac address
iim blow <bank> <row> <value> - Blow some fuses
iim blow fecmac <0x##:0x##:0x##:0x##:0x##:0x##>- Blow FEC Mac address MX53-LOCO
U-Boot >
Dear James,
SDK differs from u-boot and linux why.
We need to get to know which is correct.
That is because it is probably related to product quality.
Is it necessary to set efuse_prog_supply_gate bit in order to blow eFUSE?
Best Regards,
George
AS I mention in my first intervention, you need to have the efuse_prog_supply_gate, since this enables the internal voltage of 2.8v required to burn the fuses so this are the steps to follow:
1- Make sure that VDD_FUSE is at 3-3.3V
2 - Enable fuse programming by setting the EFUSE_PROG_SUPPLY_GATE bit.
3 - Make sure that the clock to the IIM is enabled, CCM_CCGR0[31:30).
4 - For reading follow the reading instructions in the IIM chapter.
5 - For writing follow the writing instructions in the IIM chapter.
Dear James,
Thank you for the reply.
Possibly my description was not enough.
We are using i.MX6.
I checked the iim command which you say.
It is in the newest yocto environment.
u-boot-imx/2014.04-r0/git/drivers/misc/fsl_iim.c :
98
99 #if !defined(CONFIG_MX51) && !defined(CONFIG_MX53)
100 #define enable_efuse_prog_supply(enable)
101 #endif
102
:
236
237 int fuse_prog(u32 bank, u32 word, u32 val)
238 {
239 struct fsl_iim *regs;
240 u32 bit;
241 int ret;
242
243 ret = prepare_write(®s, bank, word, val, __func__);
244 if (ret)
245 return ret;
246
247 enable_efuse_prog_supply(1);
248 for (bit = 0; val; bit++, val >>= 1)
249 if (val & 0x01) {
250 ret = prog_bit(regs, bank, word, bit);
251 if (ret) {
252 enable_efuse_prog_supply(0);
253 return ret;
254 }
255 }
256 enable_efuse_prog_supply(0);
257
258 return 0;
259 }
260
According to this description, in i.MX6, it seems that efuse_prog_supply_gate bit is not changed.
*By #define in line 100, enable_efuse_prog_supply(x) replaces the NULL character.
In i.MX51 or i.MX53, The enable_efuse_prog_supply(x) is declared in u-boot-imx/2014.04-r0/git/arch/arm/cpu/armv7/mx5/clock.c.
In i.MX6, The enable_efuse_prog_supply(x) seems not to declare it other than above #define.
Because we have much inconsistency (the answer from you is included), we wish to know which is correct.
Please help us for a while more.
Best Regards,
George
Dear jamesbone,
I was waiting for someone to post here.
Thank you for the reply.
We know that u-boot has a command for burning eFUSEs.
However, my customer's bootloader and OS are their original.
Also in a manufacturing process, they have to use it, in order to burn eFUSEs.
We wrote the program at first based on SDK.
However, because the behavior was doubtful, we referred to u-boot next.
It seems that however, both are different.
Therefore, we do not see the rightness of using set efuse_prog_supply_gate bit.
Can you investigate about this?
Best Regards,
George