Writing lpgpr via U-Boot

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

Writing lpgpr via U-Boot

1,998 Views
sguy
Contributor III

When I try to write the LPGPR of imx6ul via U-Boot, nothing happens:

=> md.l 020cc090 4
020cc090: 00000000 00000000 00000000 00000000    ................
=> mw.l 020cc090 12345678
=> md.l 020cc090 4       
020cc090: 00000000 00000000 00000000 00000000    ................

After the first time the Linux kernel is booted on on a system, the issue disappears:

=> mw.l 020cc090 12345678
=> md.l 020cc090 4
020cc090: 12345678 00000000 00000000 00000000    xV4.............

If the VDD_SNVS_IN power is removed, the issue returns on the next power on.

Probably some kind of initialization must happen on the snvs before the register can be written.

What am I doing wrong?

Labels (1)
0 Kudos
Reply
8 Replies

1,652 Views
steveschefterti
Contributor III

I'm rather late to the party, but in case anyone else run into this issue:

The problem seems to be that the processor won't let you write to the SNVS GPR register when there is a power glitch detected.  That's shown in SNVS_LPSR.  You need to change the SNVS_LP Power Glitch Detector register (LPPGDR) and then clear the bit in SNVS_LPSR. That is done by Linux's SNVS RTC driver, which is why writing to GPR works after running Linux.  LPPGDR isn't described in the RM; the value I used is from the RTC driver.

Hit any key to stop autoboot:  0
=> mm.l 0x20cc064
020cc064: 00000000 ? 41736166
020cc068: 00000000 ? ^C

=> mm.l 0x20cc04c
020cc04c: 40000008 ? 8
020cc050: 00000000 ? ^C

=> mm.l 0x20cc068
020cc068: 00000000 ? 2
020cc06c: 00000000 ? ^C

=> md.l 0x20cc068 1
020cc068: 00000002

Regards,

   Steve

0 Kudos
Reply

1,652 Views
sguy
Contributor III

Although those bits aren’t set, the issue exist:

=> md.l 020cc034 1
020cc034: 00000000                               ....
=> md.l 020cc000 1
020cc000: 00000000                               ....
=> md.l 020cc090 4
020cc090: 00000000 00000000 00000000 00000000    ................
=> mw.l 020cc090 12345678
=> md.l 020cc090 4
020cc090: 00000000 00000000 00000000 00000000    ................

(Line 2 shows that the LPLR, including the GPR_HL reads as zeros; line 4 shows that the HPLR, including the GPR_SL reads as zeros; lines 7-9 shows that writing to the LPGPR its content doesn't change)

What else can it be?

0 Kudos
Reply

1,652 Views
igorpadykov
NXP Employee
NXP Employee

please check if CCM_CCGR5 snvs_lp clock, snvs_hp clock clocks are enabled.

Best regards
igor

0 Kudos
Reply

1,652 Views
sguy
Contributor III

I believe that those clocks are enabled:

The register on 020c407c (CCM_CCGR5) content is 0xfffffffff.

Is there other thing I should check?

(I don't have access to JTAG probe)

0 Kudos
Reply

1,652 Views
igorpadykov
NXP Employee
NXP Employee

what uboot version used in the case, please try

uboot-imx.git - Freescale i.MX u-boot Tree 

0 Kudos
Reply

1,652 Views
igorpadykov
NXP Employee
NXP Employee

Hi Guy

when GPR_SL or GPR_HL bits are set, that register cannot be programmed.

So one can check them, description can be found in Chapter 46
Secure Non-Volatile Storage (SNVS) i.MX6UL Reference Manual

http://www.nxp.com/docs/en/reference-manual/IMX6ULRM.pdf

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos
Reply

1,652 Views
sguy
Contributor III

Hi Igor.

I'm yet to overcome this issue.

Igor, are you able to reproduce the problem on your devices?

Are there any mechanisms that I am not aware of and might prevent writing the register?

0 Kudos
Reply

1,652 Views
igorpadykov
NXP Employee
NXP Employee

Hi Guy

had you tried to write it using jtag.

Best regards
igor

0 Kudos
Reply