* [U-Boot] pxa: Passing ATAGs to kernel don't work
@ 2011-08-09 13:14 Stefan Herbrechtsmeier
2011-08-09 19:46 ` Marek Vasut
0 siblings, 1 reply; 5+ messages in thread
From: Stefan Herbrechtsmeier @ 2011-08-09 13:14 UTC (permalink / raw)
To: u-boot
Hi,
after porting my board support from u-boot 2009.11 to 2011.06
together with adding the relocation support
the ATAGs passing don't work any more.
I have add icache_disable() and dcache_disable()
to my board_init() like on other pxa boards.
It looks like the mapping of the Dcache as RAM is not cleared
and will be re-enabled by the kernel.
If I change the initial RAM mapping from first SDRAM partition start address
to second unused SDRAM partition start address the ATAGs passing works.
Can somebody confirm that the ATAGs passing works on u-boot 2011.06 for
a pxa board.
Is there any reason, that the initial RAM is mapped to SDRAM start
address range?
Addition there is a bug in pxa_dram_init as it is called before relocation
and want to trigger some refresh cycles by write some values to the SDRAM
start address range but instead writes to the mapped initial RAM.
Regards,
Stefan
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] pxa: Passing ATAGs to kernel don't work
2011-08-09 13:14 [U-Boot] pxa: Passing ATAGs to kernel don't work Stefan Herbrechtsmeier
@ 2011-08-09 19:46 ` Marek Vasut
2011-08-10 10:47 ` Stefan Herbrechtsmeier
0 siblings, 1 reply; 5+ messages in thread
From: Marek Vasut @ 2011-08-09 19:46 UTC (permalink / raw)
To: u-boot
On Tuesday, August 09, 2011 03:14:38 PM Stefan Herbrechtsmeier wrote:
> Hi,
>
> after porting my board support from u-boot 2009.11 to 2011.06
> together with adding the relocation support
> the ATAGs passing don't work any more.
>
> I have add icache_disable() and dcache_disable()
> to my board_init() like on other pxa boards.
>
> It looks like the mapping of the Dcache as RAM is not cleared
> and will be re-enabled by the kernel.
Thanks for tracing this, can you submit a patch ?
>
> If I change the initial RAM mapping from first SDRAM partition start
> address to second unused SDRAM partition start address the ATAGs passing
> works.
>
> Can somebody confirm that the ATAGs passing works on u-boot 2011.06 for
> a pxa board.
>
> Is there any reason, that the initial RAM is mapped to SDRAM start
> address range?
I think now it can be changed. Maybe there was something about OneNAND IPL, I'm
not really sure anymore.
>
> Addition there is a bug in pxa_dram_init as it is called before relocation
> and want to trigger some refresh cycles by write some values to the SDRAM
> start address range but instead writes to the mapped initial RAM.
Patch is welcome please.
>
> Regards,
> Stefan
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] pxa: Passing ATAGs to kernel don't work
2011-08-09 19:46 ` Marek Vasut
@ 2011-08-10 10:47 ` Stefan Herbrechtsmeier
2011-08-17 10:01 ` Stefan Herbrechtsmeier
0 siblings, 1 reply; 5+ messages in thread
From: Stefan Herbrechtsmeier @ 2011-08-10 10:47 UTC (permalink / raw)
To: u-boot
Am 09.08.2011 21:46, schrieb Marek Vasut:
> On Tuesday, August 09, 2011 03:14:38 PM Stefan Herbrechtsmeier wrote:
>> Hi,
>>
>> after porting my board support from u-boot 2009.11 to 2011.06
>> together with adding the relocation support
>> the ATAGs passing don't work any more.
>>
>> I have add icache_disable() and dcache_disable()
>> to my board_init() like on other pxa boards.
>>
>> It looks like the mapping of the Dcache as RAM is not cleared
>> and will be re-enabled by the kernel.
> Thanks for tracing this, can you submit a patch ?
I have only avoid the problem and don't really fix the problem,
as I am not familiar with the MMU configuration and the relocation.
I think the right solution will be to clean up the MMU at the end of the
relocation
and maybe disable it, instead of doing this at board_init().
Should it be functional to add the following MMU initialisation from an
other start.S
after the clear_bss in start.S or should it be enough to flush the TLB
and disable the D-cache?
clear_mmu:
/*
* flush v4 I/D caches
*/
mov r0, #0
mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
/*
* disable MMU stuff and caches
*/
mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
orr r0, r0, #0x00000002 @ set bit 2 (A) Align
orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
mcr p15, 0, r0, c1, c0, 0
If I understand the code correct, the command is wrong, as the I-Cache
is enabled.
>> If I change the initial RAM mapping from first SDRAM partition start
>> address to second unused SDRAM partition start address the ATAGs passing
>> works.
>>
>> Can somebody confirm that the ATAGs passing works on u-boot 2011.06 for
>> a pxa board.
>>
>> Is there any reason, that the initial RAM is mapped to SDRAM start
>> address range?
> I think now it can be changed. Maybe there was something about OneNAND IPL, I'm
> not really sure anymore.
What is the best value to use for the initial RAM address mapping?
>> Addition there is a bug in pxa_dram_init as it is called before relocation
>> and want to trigger some refresh cycles by write some values to the SDRAM
>> start address range but instead writes to the mapped initial RAM.
> Patch is welcome please.
Or should I keep the initial RAM mapping to SDRAM start address
and move the SDRAM refresh cycles trigger address behind the mapped area.
Regards,
Stefan
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] pxa: Passing ATAGs to kernel don't work
2011-08-10 10:47 ` Stefan Herbrechtsmeier
@ 2011-08-17 10:01 ` Stefan Herbrechtsmeier
2011-08-17 10:07 ` Marek Vasut
0 siblings, 1 reply; 5+ messages in thread
From: Stefan Herbrechtsmeier @ 2011-08-17 10:01 UTC (permalink / raw)
To: u-boot
Am 10.08.2011 12:47, schrieb Stefan Herbrechtsmeier:
> Am 09.08.2011 21:46, schrieb Marek Vasut:
>> On Tuesday, August 09, 2011 03:14:38 PM Stefan Herbrechtsmeier wrote:
>>> Hi,
>>>
>>> after porting my board support from u-boot 2009.11 to 2011.06
>>> together with adding the relocation support
>>> the ATAGs passing don't work any more.
>>>
>>> I have add icache_disable() and dcache_disable()
>>> to my board_init() like on other pxa boards.
>>>
>>> It looks like the mapping of the Dcache as RAM is not cleared
>>> and will be re-enabled by the kernel.
>> Thanks for tracing this, can you submit a patch ?
> I have only avoid the problem and don't really fix the problem,
> as I am not familiar with the MMU configuration and the relocation.
>
> I think the right solution will be to clean up the MMU at the end of the
> relocation
> and maybe disable it, instead of doing this at board_init().
>
> Should it be functional to add the following MMU initialisation from an
> other start.S
> after the clear_bss in start.S or should it be enough to flush the TLB
> and disable the D-cache?
>
> clear_mmu:
> /*
> * flush v4 I/D caches
> */
> mov r0, #0
> mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
> mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
>
> /*
> * disable MMU stuff and caches
> */
> mrc p15, 0, r0, c1, c0, 0
> bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
> bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
> orr r0, r0, #0x00000002 @ set bit 2 (A) Align
> orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
> mcr p15, 0, r0, c1, c0, 0
>
> If I understand the code correct, the command is wrong, as the I-Cache
> is enabled.
I looks like the main fault was the missing flush during cache disable
because
flush_cache() is empty for the pxa architecture.
I have add a define CONFIG_SYS_INIT_RAM_ADDR for the initial RAM in cache.
Additional I have fix the define of CONFIG_SYS_INIT_SP_ADDR.
I have move the dcache und mmu disable to the start.S at the end of the
relocation
and add a flush. This prevent people to enable the dcache by removing the
dcache_disable() without setup the MMU correct.
>>> If I change the initial RAM mapping from first SDRAM partition start
>>> address to second unused SDRAM partition start address the ATAGs passing
>>> works.
>>>
>>> Can somebody confirm that the ATAGs passing works on u-boot 2011.06 for
>>> a pxa board.
>>>
>>> Is there any reason, that the initial RAM is mapped to SDRAM start
>>> address range?
>> I think now it can be changed. Maybe there was something about OneNAND IPL, I'm
>> not really sure anymore.
> What is the best value to use for the initial RAM address mapping?
I am now using 0xc0000000 as it is above the SDRAM range,
but 0xa0000000 now works as well.
>>> Addition there is a bug in pxa_dram_init as it is called before relocation
>>> and want to trigger some refresh cycles by write some values to the SDRAM
>>> start address range but instead writes to the mapped initial RAM.
>> Patch is welcome please.
> Or should I keep the initial RAM mapping to SDRAM start address
> and move the SDRAM refresh cycles trigger address behind the mapped area.
I leave it as it is, because I move the initial RAM address.
I will commit patches for this and some USB host and device fixes,
when I have some time to port my change to the git HEAD and
change all pxa boards accordingly.
Regards,
Stefan
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] pxa: Passing ATAGs to kernel don't work
2011-08-17 10:01 ` Stefan Herbrechtsmeier
@ 2011-08-17 10:07 ` Marek Vasut
0 siblings, 0 replies; 5+ messages in thread
From: Marek Vasut @ 2011-08-17 10:07 UTC (permalink / raw)
To: u-boot
On Wednesday, August 17, 2011 12:01:02 PM Stefan Herbrechtsmeier wrote:
> Am 10.08.2011 12:47, schrieb Stefan Herbrechtsmeier:
> > Am 09.08.2011 21:46, schrieb Marek Vasut:
> >> On Tuesday, August 09, 2011 03:14:38 PM Stefan Herbrechtsmeier wrote:
> >>> Hi,
> >>>
> >>> after porting my board support from u-boot 2009.11 to 2011.06
> >>> together with adding the relocation support
> >>> the ATAGs passing don't work any more.
> >>>
> >>> I have add icache_disable() and dcache_disable()
> >>> to my board_init() like on other pxa boards.
> >>>
> >>> It looks like the mapping of the Dcache as RAM is not cleared
> >>> and will be re-enabled by the kernel.
> >>
> >> Thanks for tracing this, can you submit a patch ?
> >
> > I have only avoid the problem and don't really fix the problem,
> > as I am not familiar with the MMU configuration and the relocation.
> >
> > I think the right solution will be to clean up the MMU at the end of the
> > relocation
> > and maybe disable it, instead of doing this at board_init().
> >
> > Should it be functional to add the following MMU initialisation from an
> > other start.S
> > after the clear_bss in start.S or should it be enough to flush the TLB
> > and disable the D-cache?
> >
> > clear_mmu:
> > /*
> >
> > * flush v4 I/D caches
> > */
> >
> > mov r0, #0
> > mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
> > mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
> >
> > /*
> >
> > * disable MMU stuff and caches
> > */
> >
> > mrc p15, 0, r0, c1, c0, 0
> > bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
> > bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
> > orr r0, r0, #0x00000002 @ set bit 2 (A) Align
> > orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
> > mcr p15, 0, r0, c1, c0, 0
> >
> > If I understand the code correct, the command is wrong, as the I-Cache
> > is enabled.
>
> I looks like the main fault was the missing flush during cache disable
> because
> flush_cache() is empty for the pxa architecture.
Check Hong Xu's efforts on ARM926EJS caches ... maybe you can implement the
flushing for pxa :)
>
> I have add a define CONFIG_SYS_INIT_RAM_ADDR for the initial RAM in cache.
> Additional I have fix the define of CONFIG_SYS_INIT_SP_ADDR.
> I have move the dcache und mmu disable to the start.S at the end of the
> relocation
> and add a flush. This prevent people to enable the dcache by removing the
> dcache_disable() without setup the MMU correct.
>
> >>> If I change the initial RAM mapping from first SDRAM partition start
> >>> address to second unused SDRAM partition start address the ATAGs
> >>> passing works.
> >>>
> >>> Can somebody confirm that the ATAGs passing works on u-boot 2011.06 for
> >>> a pxa board.
> >>>
> >>> Is there any reason, that the initial RAM is mapped to SDRAM start
> >>> address range?
> >>
> >> I think now it can be changed. Maybe there was something about OneNAND
> >> IPL, I'm not really sure anymore.
> >
> > What is the best value to use for the initial RAM address mapping?
>
> I am now using 0xc0000000 as it is above the SDRAM range,
> but 0xa0000000 now works as well.
Ack
>
> >>> Addition there is a bug in pxa_dram_init as it is called before
> >>> relocation and want to trigger some refresh cycles by write some
> >>> values to the SDRAM start address range but instead writes to the
> >>> mapped initial RAM.
> >>
> >> Patch is welcome please.
> >
> > Or should I keep the initial RAM mapping to SDRAM start address
> > and move the SDRAM refresh cycles trigger address behind the mapped area.
>
> I leave it as it is, because I move the initial RAM address.
>
> I will commit patches for this and some USB host and device fixes,
> when I have some time to port my change to the git HEAD and
> change all pxa boards accordingly.
Thanks!
>
> Regards,
> Stefan
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-08-17 10:07 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-09 13:14 [U-Boot] pxa: Passing ATAGs to kernel don't work Stefan Herbrechtsmeier
2011-08-09 19:46 ` Marek Vasut
2011-08-10 10:47 ` Stefan Herbrechtsmeier
2011-08-17 10:01 ` Stefan Herbrechtsmeier
2011-08-17 10:07 ` Marek Vasut
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox