
On 1/24/12, Matthias Fuchs matthias.fuchs@esd.eu wrote:
- One patch that touches the HW_DIGCTRL_SCRATCH register (this part is
what fixed the RAM size retrievel after a "reboot" in the kernel
And what is this part? I was not aware of this issue. What exactly part of my patch fixes this issue?
I started removing all the pieces of your patch and then I noticed that the part below was responsible for making the "reboot" command in Linux to work:
void mx28_common_spl_init(const iomux_cfg_t *iomux_setup, const unsigned int iomux_size) { + uint32_t bm = readl(0x80018910) & 0xf; + writel(bm, HW_DIGCTRL_SCRATCH0); + writel(bm, HW_DIGCTRL_SCRATCH1); + mxs_iomux_setup_multiple_pads(iomux_setup, iomux_size); mx28_power_init(); mx28_mem_init();
I also noticed that even if I replace these lines with a early_delay(1) it also makes "reboot" to work fine.
It looks like we need something to be executed before the mxs_iomux_setup_multiple_pads
The patch below works fine:
--- a/arch/arm/cpu/arm926ejs/mx28/spl_boot.c +++ b/arch/arm/cpu/arm926ejs/mx28/spl_boot.c @@ -49,8 +49,8 @@ void early_delay(int delay) void mx28_common_spl_init(const iomux_cfg_t *iomux_setup, const unsigned int iomux_size) { - mxs_iomux_setup_multiple_pads(iomux_setup, iomux_size); mx28_power_init(); + mxs_iomux_setup_multiple_pads(iomux_setup, iomux_size); mx28_mem_init(); mx28_power_wait_pswitch(); }
,though I don't have a good explanation for it right now.