diff mbox series

ARM: keystone2: enable initrd fixup for LPAE addressing

Message ID 20200211035552.5686-1-lokeshvutla@ti.com
State Accepted
Commit e8d0d530404e5d0546c37992cfeb9d3d3187dd94
Headers show
Series ARM: keystone2: enable initrd fixup for LPAE addressing | expand

Commit Message

Lokesh Vutla Feb. 11, 2020, 3:55 a.m. UTC
From: Tero Kristo <t-kristo at ti.com>

Keystone2 u-boot loads the initrd image into non-LPAE addressed memory
but linux kernel is running in LPAE. This causes a conflict as kernel
detects that non-memory address is passed and kernel ignores initrd.
There is an existing fixup logic to modify the address in the proper
configuration, but this is disabled at the moment. Enable the fixup
by setting the env variable for this so that initrd can be used
properly.

Signed-off-by: Tero Kristo <t-kristo at ti.com>
Signed-off-by: Lokesh Vutla <lokeshvutla at ti.com>
---
- This fixes boot on k2g platforms.

 include/configs/ti_armv7_keystone2.h | 1 +
 1 file changed, 1 insertion(+)

Comments

Tom Rini Feb. 11, 2020, 3:01 p.m. UTC | #1
On Tue, Feb 11, 2020 at 09:25:52AM +0530, Lokesh Vutla wrote:

> From: Tero Kristo <t-kristo at ti.com>
> 
> Keystone2 u-boot loads the initrd image into non-LPAE addressed memory
> but linux kernel is running in LPAE. This causes a conflict as kernel
> detects that non-memory address is passed and kernel ignores initrd.
> There is an existing fixup logic to modify the address in the proper
> configuration, but this is disabled at the moment. Enable the fixup
> by setting the env variable for this so that initrd can be used
> properly.
> 
> Signed-off-by: Tero Kristo <t-kristo at ti.com>
> Signed-off-by: Lokesh Vutla <lokeshvutla at ti.com>
> ---
> - This fixes boot on k2g platforms.
> 
>  include/configs/ti_armv7_keystone2.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/configs/ti_armv7_keystone2.h b/include/configs/ti_armv7_keystone2.h
> index ba12428dbe..1b014c1022 100644
> --- a/include/configs/ti_armv7_keystone2.h
> +++ b/include/configs/ti_armv7_keystone2.h
> @@ -213,6 +213,7 @@
>  	"tftp_root=/\0"							\
>  	"nfs_root=/export\0"						\
>  	"mem_lpae=1\0"							\
> +	"uinitrd_fixup=1\0"						\
>  	"addr_ubi=0x82000000\0"						\
>  	"addr_secdb_key=0xc000000\0"					\
>  	"name_kern=zImage\0"						\

OK, hold up.  Why is any of this code needed and can't the normal
bootm_size / bootm_low / etc as documented in the README enforce these
constraints?  Thanks!
Lokesh Vutla Feb. 12, 2020, 4:07 a.m. UTC | #2
Hi Tom,

On 11/02/20 8:31 PM, Tom Rini wrote:
> On Tue, Feb 11, 2020 at 09:25:52AM +0530, Lokesh Vutla wrote:
> 
>> From: Tero Kristo <t-kristo at ti.com>
>>
>> Keystone2 u-boot loads the initrd image into non-LPAE addressed memory
>> but linux kernel is running in LPAE. This causes a conflict as kernel
>> detects that non-memory address is passed and kernel ignores initrd.
>> There is an existing fixup logic to modify the address in the proper
>> configuration, but this is disabled at the moment. Enable the fixup
>> by setting the env variable for this so that initrd can be used
>> properly.
>>
>> Signed-off-by: Tero Kristo <t-kristo at ti.com>
>> Signed-off-by: Lokesh Vutla <lokeshvutla at ti.com>
>> ---
>> - This fixes boot on k2g platforms.
>>
>>  include/configs/ti_armv7_keystone2.h | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/include/configs/ti_armv7_keystone2.h b/include/configs/ti_armv7_keystone2.h
>> index ba12428dbe..1b014c1022 100644
>> --- a/include/configs/ti_armv7_keystone2.h
>> +++ b/include/configs/ti_armv7_keystone2.h
>> @@ -213,6 +213,7 @@
>>  	"tftp_root=/\0"							\
>>  	"nfs_root=/export\0"						\
>>  	"mem_lpae=1\0"							\
>> +	"uinitrd_fixup=1\0"						\
>>  	"addr_ubi=0x82000000\0"						\
>>  	"addr_secdb_key=0xc000000\0"					\
>>  	"name_kern=zImage\0"						\
> 
> OK, hold up.  Why is any of this code needed and can't the normal
> bootm_size / bootm_low / etc as documented in the README enforce these
> constraints?  Thanks!
> 

K2 platforms has a special scenario. DDR view for U-Boot is starting from
0x8000_0000 - 0xFFFF_FFFF. Wheres as for kernel, the DDR view gets shifted to
0x8_0000_0000 - 0x8_7FFF_FFFF. This is a hardware limitation to ensure coherency
among different master in the SoC. In kernel all the page tables are fixed up by
the Kconfig CONFIG_ARM_PV_FIXUP. But the expectation is to pass the right
information in DTB. U-Boot already fixes up the memory address nodes in
ft_board_setup() but missed updating the linux-initrd. This patch enables the
fixup for initrd.

Thanks and regards,
Lokesh
Tom Rini Feb. 12, 2020, 1:04 p.m. UTC | #3
On Wed, Feb 12, 2020 at 09:37:46AM +0530, Lokesh Vutla wrote:
> Hi Tom,
> 
> On 11/02/20 8:31 PM, Tom Rini wrote:
> > On Tue, Feb 11, 2020 at 09:25:52AM +0530, Lokesh Vutla wrote:
> > 
> >> From: Tero Kristo <t-kristo at ti.com>
> >>
> >> Keystone2 u-boot loads the initrd image into non-LPAE addressed memory
> >> but linux kernel is running in LPAE. This causes a conflict as kernel
> >> detects that non-memory address is passed and kernel ignores initrd.
> >> There is an existing fixup logic to modify the address in the proper
> >> configuration, but this is disabled at the moment. Enable the fixup
> >> by setting the env variable for this so that initrd can be used
> >> properly.
> >>
> >> Signed-off-by: Tero Kristo <t-kristo at ti.com>
> >> Signed-off-by: Lokesh Vutla <lokeshvutla at ti.com>
> >> ---
> >> - This fixes boot on k2g platforms.
> >>
> >>  include/configs/ti_armv7_keystone2.h | 1 +
> >>  1 file changed, 1 insertion(+)
> >>
> >> diff --git a/include/configs/ti_armv7_keystone2.h b/include/configs/ti_armv7_keystone2.h
> >> index ba12428dbe..1b014c1022 100644
> >> --- a/include/configs/ti_armv7_keystone2.h
> >> +++ b/include/configs/ti_armv7_keystone2.h
> >> @@ -213,6 +213,7 @@
> >>  	"tftp_root=/\0"							\
> >>  	"nfs_root=/export\0"						\
> >>  	"mem_lpae=1\0"							\
> >> +	"uinitrd_fixup=1\0"						\
> >>  	"addr_ubi=0x82000000\0"						\
> >>  	"addr_secdb_key=0xc000000\0"					\
> >>  	"name_kern=zImage\0"						\
> > 
> > OK, hold up.  Why is any of this code needed and can't the normal
> > bootm_size / bootm_low / etc as documented in the README enforce these
> > constraints?  Thanks!
> > 
> 
> K2 platforms has a special scenario. DDR view for U-Boot is starting from
> 0x8000_0000 - 0xFFFF_FFFF. Wheres as for kernel, the DDR view gets shifted to
> 0x8_0000_0000 - 0x8_7FFF_FFFF. This is a hardware limitation to ensure coherency
> among different master in the SoC. In kernel all the page tables are fixed up by
> the Kconfig CONFIG_ARM_PV_FIXUP. But the expectation is to pass the right
> information in DTB. U-Boot already fixes up the memory address nodes in
> ft_board_setup() but missed updating the linux-initrd. This patch enables the
> fixup for initrd.

OK, thanks.
Lokesh Vutla Feb. 14, 2020, 9:52 a.m. UTC | #4
On 11/02/20 9:25 AM, Lokesh Vutla wrote:
> From: Tero Kristo <t-kristo at ti.com>
> 
> Keystone2 u-boot loads the initrd image into non-LPAE addressed memory
> but linux kernel is running in LPAE. This causes a conflict as kernel
> detects that non-memory address is passed and kernel ignores initrd.
> There is an existing fixup logic to modify the address in the proper
> configuration, but this is disabled at the moment. Enable the fixup
> by setting the env variable for this so that initrd can be used
> properly.
> 
> Signed-off-by: Tero Kristo <t-kristo at ti.com>
> Signed-off-by: Lokesh Vutla <lokeshvutla at ti.com>

Merged into u-boot-ti.

Thanks and regards,
Lokesh
diff mbox series

Patch

diff --git a/include/configs/ti_armv7_keystone2.h b/include/configs/ti_armv7_keystone2.h
index ba12428dbe..1b014c1022 100644
--- a/include/configs/ti_armv7_keystone2.h
+++ b/include/configs/ti_armv7_keystone2.h
@@ -213,6 +213,7 @@ 
 	"tftp_root=/\0"							\
 	"nfs_root=/export\0"						\
 	"mem_lpae=1\0"							\
+	"uinitrd_fixup=1\0"						\
 	"addr_ubi=0x82000000\0"						\
 	"addr_secdb_key=0xc000000\0"					\
 	"name_kern=zImage\0"						\