diff mbox

[U-Boot] Odroid XU3 - exynos5422 - SPL - iRAM/sRAM address

Message ID CANoR_OABDwqLLvsC_R1OV_JepfRVm7GJC+ChC4_tHKU27QDd5Q@mail.gmail.com
State Not Applicable
Delegated to: Minkyu Kang
Headers show

Commit Message

Suriyan Ramasami Jan. 20, 2015, 11:38 p.m. UTC
Hello Kevin,

On Tue, Jan 20, 2015 at 3:29 PM, Suriyan Ramasami <suriyan.r@gmail.com> wrote:
> Hello Kevin,
>
> On Tue, Jan 20, 2015 at 2:43 PM, Kevin Hilman <khilman@kernel.org> wrote:
>> Suriyan Ramasami <suriyan.r@gmail.com> writes:
>>
>>> Hello Kevin,
>>>    These are the changes that would be necessary in uboot mainline for SPL:
>>>
>>> arch/arm/cpu/armv7/exynos/Kconfig
>>> -       select OF_CONTROL
>>> +       select SUPPORT_SPL
>>> +       select OF_CONTROL if !SPL_BUILD
>>>
>>> configs/odroid-xu3_defconfig
>>> +CONFIG_SPL=y
>>>
>>> include/configs/odroid_xu3.h
>>> #undef CONFIG_SPL_TEXT_BASE
>>> #define CONFIG_SPL_TEXT_BASE           0x02027000
>>>
>>> #undef CONFIG_SEC_FW_SIZE
>>> #define CONFIG_SEC_FW_SIZE (15 << 10) /* 15 KB */
>>
>> Thanks.  With those changes, a build gives me:
>>
>> ./include/common.h:355:73: fatal error: asm/u-boot-sandbox.h: No such file or directory
>>
>> Sorry for the dumb questions, but I'm not very familiar with u-boot.
>> I'm more comofortable in the kernel.
>>
>
> The above used to work (a month ago). I shall check with current
> mainline uboot and report back.
>

Sorry for the snafu. I t was my mistake. The correct diff for the
configs is as below:



>>>  FWICT, mainline uboot does not have code to handle secure firmware.
>>> For instance when secure firmware is present the address to poke a
>>> jump address for the CPU is different (nsram +1c etc). This stems from
>>> lowlevel_init.S being moved over to the NS area. This is also missing
>>> in uboot mainline or so I think.
>>
>> Hmm, it seems the XU3 has secure firmware so I guess this wont' be useful
>> for me yet?
>>
>
> It should be relevant to you, as mainline uboot does not overlay the
> NS area with a bootstrap code from lowlevel_init.S. At least I have
> seen mainline linux src code using this address for waking up the CPUs
> (so does XEN).
>
>> Curious what platforms you're testing this on?  And are any of them
>> using secure firmware?
>>
>
> I am currently working only on the XU3 (I thought there was no
> interest, so I let it slide). I probably should say that the Exynos
> secure firmware support needs to be tweaked in U-Boot. Maybe other
> SoCs are supported? I am not sure.
>
>> Also, I'm still a bit unsure where the switch from secure to NS world
>> happens.  Is that in BL1? or somewhere in BL2?  If it's in BL2, have you
>> tried switching secure mode off?
>>
>
> I know for sure that the signed BL2 does switch from Hyp to NS. This
> BL2 that I am referring to is HK's nomenclature, which translates to
> BL1 (SPL) in UBoot lingo. Hence, this adds some confusion in the
> discussions!
>
> The blobs are as follows: (possibly listed in the HK web pages)
> BL0 (signed encrypted blob from Samsung).
> This loads HK's signed BL2 (this is U-Boot SPL)
> This loads U-Boot (U-Boot BL2) and the Trustzone
>
> Also, no matter what mode the odroid xu3 is in, the linux kernel from
> what I can tell depending on the secure-firmware dts entry (which is
> present) will use the NS + 1c area when powering on the CPU. Hence,
> its mandatory to have code there.
>
>
>>> I hope this helps you out.
>>
>> Well, it's certainly a step in the right direction, but not sure yet if
>> I can use it on the odroid-xu3 as I'm still trying to understand the
>> boot sequence.
>>
>> Kevin
>>
>>> The ddr init functions seem to be not correct for the 5422 (or so I
>>> think). I do not have access to any of the Samsung docs, hence, one
>>> solution was to copy over HKs ddr init function, and then the mainline
>>> SPL runs.
>>>
>>> Regards
>>> - Suriyan
>>>
>>>
>>> On Tue, Jan 20, 2015 at 1:30 PM, Kevin Hilman <khilman@kernel.org> wrote:
>>>> Hello Suriyan,
>>>>
>>>> Suriyan Ramasami <suriyan.r@gmail.com> writes:
>>>>
>>>>> Hello Sjoerd Simons,
>>>>>    A signed BL2 which allows unsigned BL2 chain load is already
>>>>> available for experimentation. Refer this link:
>>>>> http://forum.odroid.com/viewtopic.php?f=98&t=6147#p58984
>>>>> The suriyan.bl2-hkxu3.1212.5422.zip blob contains a signed BL2 which
>>>>> allows the same.
>>>>> The layout of SD card is as follows:
>>>>>
>>>>> BL1 (1 to 30) 15K
>>>>> BL2 (31 to 62) 16K
>>>>> indicator block (63 to 64) 1K
>>>>> uboot (65 to 2112) 1M
>>>>> tzsw (2113 to 2624) 256K
>>>>> unsigned BL2 (2625 to 2656) 16K
>>>>>
>>>>> A non zero in the first byte of the indicator block instructs the
>>>>> signed BL2 to load the unsigned BL2 @ offset 2625.
>>>>
>>>> I'm currently running mainline u-boot, and hoping to test the series
>>>> that powers down secondary cores on the odroid-xu3.  That series applies
>>>> and builds with mainline u-boot (v2015.01-rc3), but for it to work
>>>> correctly, IIUC, I'll also need to build an SPL from mainline.
>>>>
>>>> Can you share your changes to mainline u-boot that enable the building
>>>> of SPL?
>>>>
>>>> I'd like to try that using your BL2 that will load an unsigned BL2.
>>>>
>>>> Thanks,
>>>>
>>>> Kevin

Comments

Suriyan Ramasami Jan. 21, 2015, 12:19 a.m. UTC | #1
Hello Kevin,

On Tue, Jan 20, 2015 at 3:38 PM, Suriyan Ramasami <suriyan.r@gmail.com> wrote:
> Hello Kevin,
>
> On Tue, Jan 20, 2015 at 3:29 PM, Suriyan Ramasami <suriyan.r@gmail.com> wrote:
>> Hello Kevin,
>>
>> On Tue, Jan 20, 2015 at 2:43 PM, Kevin Hilman <khilman@kernel.org> wrote:
>>> Suriyan Ramasami <suriyan.r@gmail.com> writes:
>>>
>>>> Hello Kevin,
>>>>    These are the changes that would be necessary in uboot mainline for SPL:
>>>>
>>>> arch/arm/cpu/armv7/exynos/Kconfig
>>>> -       select OF_CONTROL
>>>> +       select SUPPORT_SPL
>>>> +       select OF_CONTROL if !SPL_BUILD
>>>>
>>>> configs/odroid-xu3_defconfig
>>>> +CONFIG_SPL=y
>>>>
>>>> include/configs/odroid_xu3.h
>>>> #undef CONFIG_SPL_TEXT_BASE
>>>> #define CONFIG_SPL_TEXT_BASE           0x02027000
>>>>
>>>> #undef CONFIG_SEC_FW_SIZE
>>>> #define CONFIG_SEC_FW_SIZE (15 << 10) /* 15 KB */
>>>
>>> Thanks.  With those changes, a build gives me:
>>>
>>> ./include/common.h:355:73: fatal error: asm/u-boot-sandbox.h: No such file or directory
>>>
>>> Sorry for the dumb questions, but I'm not very familiar with u-boot.
>>> I'm more comofortable in the kernel.
>>>
>>
>> The above used to work (a month ago). I shall check with current
>> mainline uboot and report back.
>>
>
> Sorry for the snafu. I t was my mistake. The correct diff for the
> configs is as below:
>
> diff --git a/arch/arm/cpu/armv7/exynos/Kconfig
> b/arch/arm/cpu/armv7/exynos/Kconfig
> index 7fcb5d2..39953e4 100644
> --- a/arch/arm/cpu/armv7/exynos/Kconfig
> +++ b/arch/arm/cpu/armv7/exynos/Kconfig
> @@ -26,7 +26,8 @@ config TARGET_ODROID
>
>  config TARGET_ODROID_XU3
>         bool "Exynos5422 Odroid board"
> -       select OF_CONTROL
> +       select SUPPORT_SPL
> +       select OF_CONTROL if !SPL_BUILD
>
>  config TARGET_ARNDALE
>         bool "Exynos5250 Arndale board"
> diff --git a/configs/odroid-xu3_defconfig b/configs/odroid-xu3_defconfig
> index 74aa0cf..6000ec1 100644
> --- a/configs/odroid-xu3_defconfig
> +++ b/configs/odroid-xu3_defconfig
> @@ -1,4 +1,5 @@
> -CONFIG_ARM=y
> -CONFIG_ARCH_EXYNOS=y
> -CONFIG_TARGET_ODROID_XU3=y
> +CONFIG_SPL=y
> ++S:CONFIG_ARM=y
> ++S:CONFIG_ARCH_EXYNOS=y
> ++S:CONFIG_TARGET_ODROID_XU3=y
>  CONFIG_DEFAULT_DEVICE_TREE="exynos5422-odroidxu3"
>
>
>>>>  FWICT, mainline uboot does not have code to handle secure firmware.
>>>> For instance when secure firmware is present the address to poke a
>>>> jump address for the CPU is different (nsram +1c etc). This stems from
>>>> lowlevel_init.S being moved over to the NS area. This is also missing
>>>> in uboot mainline or so I think.
>>>
>>> Hmm, it seems the XU3 has secure firmware so I guess this wont' be useful
>>> for me yet?
>>>
>>
>> It should be relevant to you, as mainline uboot does not overlay the
>> NS area with a bootstrap code from lowlevel_init.S. At least I have
>> seen mainline linux src code using this address for waking up the CPUs
>> (so does XEN).
>>

I just checked the patch you were referring to, and Akshay has indeed
pulled in the the .S file I was referring to.
 https://patchwork.ozlabs.org/patch/429425/
(sec_boot.s)

Hence, things should be more doable

- Suriyan

>>> Curious what platforms you're testing this on?  And are any of them
>>> using secure firmware?
>>>
>>
>> I am currently working only on the XU3 (I thought there was no
>> interest, so I let it slide). I probably should say that the Exynos
>> secure firmware support needs to be tweaked in U-Boot. Maybe other
>> SoCs are supported? I am not sure.
>>
>>> Also, I'm still a bit unsure where the switch from secure to NS world
>>> happens.  Is that in BL1? or somewhere in BL2?  If it's in BL2, have you
>>> tried switching secure mode off?
>>>
>>
>> I know for sure that the signed BL2 does switch from Hyp to NS. This
>> BL2 that I am referring to is HK's nomenclature, which translates to
>> BL1 (SPL) in UBoot lingo. Hence, this adds some confusion in the
>> discussions!
>>
>> The blobs are as follows: (possibly listed in the HK web pages)
>> BL0 (signed encrypted blob from Samsung).
>> This loads HK's signed BL2 (this is U-Boot SPL)
>> This loads U-Boot (U-Boot BL2) and the Trustzone
>>
>> Also, no matter what mode the odroid xu3 is in, the linux kernel from
>> what I can tell depending on the secure-firmware dts entry (which is
>> present) will use the NS + 1c area when powering on the CPU. Hence,
>> its mandatory to have code there.
>>
>>
>>>> I hope this helps you out.
>>>
>>> Well, it's certainly a step in the right direction, but not sure yet if
>>> I can use it on the odroid-xu3 as I'm still trying to understand the
>>> boot sequence.
>>>
>>> Kevin
>>>
>>>> The ddr init functions seem to be not correct for the 5422 (or so I
>>>> think). I do not have access to any of the Samsung docs, hence, one
>>>> solution was to copy over HKs ddr init function, and then the mainline
>>>> SPL runs.
>>>>
>>>> Regards
>>>> - Suriyan
>>>>
>>>>
>>>> On Tue, Jan 20, 2015 at 1:30 PM, Kevin Hilman <khilman@kernel.org> wrote:
>>>>> Hello Suriyan,
>>>>>
>>>>> Suriyan Ramasami <suriyan.r@gmail.com> writes:
>>>>>
>>>>>> Hello Sjoerd Simons,
>>>>>>    A signed BL2 which allows unsigned BL2 chain load is already
>>>>>> available for experimentation. Refer this link:
>>>>>> http://forum.odroid.com/viewtopic.php?f=98&t=6147#p58984
>>>>>> The suriyan.bl2-hkxu3.1212.5422.zip blob contains a signed BL2 which
>>>>>> allows the same.
>>>>>> The layout of SD card is as follows:
>>>>>>
>>>>>> BL1 (1 to 30) 15K
>>>>>> BL2 (31 to 62) 16K
>>>>>> indicator block (63 to 64) 1K
>>>>>> uboot (65 to 2112) 1M
>>>>>> tzsw (2113 to 2624) 256K
>>>>>> unsigned BL2 (2625 to 2656) 16K
>>>>>>
>>>>>> A non zero in the first byte of the indicator block instructs the
>>>>>> signed BL2 to load the unsigned BL2 @ offset 2625.
>>>>>
>>>>> I'm currently running mainline u-boot, and hoping to test the series
>>>>> that powers down secondary cores on the odroid-xu3.  That series applies
>>>>> and builds with mainline u-boot (v2015.01-rc3), but for it to work
>>>>> correctly, IIUC, I'll also need to build an SPL from mainline.
>>>>>
>>>>> Can you share your changes to mainline u-boot that enable the building
>>>>> of SPL?
>>>>>
>>>>> I'd like to try that using your BL2 that will load an unsigned BL2.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Kevin
Kevin Hilman Jan. 21, 2015, 7:01 p.m. UTC | #2
Suriyan Ramasami <suriyan.r@gmail.com> writes:

> Hello Kevin,
>
> On Tue, Jan 20, 2015 at 3:29 PM, Suriyan Ramasami <suriyan.r@gmail.com> wrote:
>> Hello Kevin,
>>
>> On Tue, Jan 20, 2015 at 2:43 PM, Kevin Hilman <khilman@kernel.org> wrote:
>>> Suriyan Ramasami <suriyan.r@gmail.com> writes:
>>>
>>>> Hello Kevin,
>>>>    These are the changes that would be necessary in uboot mainline for SPL:
>>>>
>>>> arch/arm/cpu/armv7/exynos/Kconfig
>>>> -       select OF_CONTROL
>>>> +       select SUPPORT_SPL
>>>> +       select OF_CONTROL if !SPL_BUILD
>>>>
>>>> configs/odroid-xu3_defconfig
>>>> +CONFIG_SPL=y
>>>>
>>>> include/configs/odroid_xu3.h
>>>> #undef CONFIG_SPL_TEXT_BASE
>>>> #define CONFIG_SPL_TEXT_BASE           0x02027000
>>>>
>>>> #undef CONFIG_SEC_FW_SIZE
>>>> #define CONFIG_SEC_FW_SIZE (15 << 10) /* 15 KB */
>>>
>>> Thanks.  With those changes, a build gives me:
>>>
>>> ./include/common.h:355:73: fatal error: asm/u-boot-sandbox.h: No such file or directory
>>>
>>> Sorry for the dumb questions, but I'm not very familiar with u-boot.
>>> I'm more comofortable in the kernel.
>>>
>>
>> The above used to work (a month ago). I shall check with current
>> mainline uboot and report back.
>>
>
> Sorry for the snafu. I t was my mistake. The correct diff for the
> configs is as below:
>
> diff --git a/arch/arm/cpu/armv7/exynos/Kconfig
> b/arch/arm/cpu/armv7/exynos/Kconfig
> index 7fcb5d2..39953e4 100644
> --- a/arch/arm/cpu/armv7/exynos/Kconfig
> +++ b/arch/arm/cpu/armv7/exynos/Kconfig
> @@ -26,7 +26,8 @@ config TARGET_ODROID
>
>  config TARGET_ODROID_XU3
>         bool "Exynos5422 Odroid board"
> -       select OF_CONTROL
> +       select SUPPORT_SPL
> +       select OF_CONTROL if !SPL_BUILD
>
>  config TARGET_ARNDALE
>         bool "Exynos5250 Arndale board"
> diff --git a/configs/odroid-xu3_defconfig b/configs/odroid-xu3_defconfig
> index 74aa0cf..6000ec1 100644
> --- a/configs/odroid-xu3_defconfig
> +++ b/configs/odroid-xu3_defconfig
> @@ -1,4 +1,5 @@
> -CONFIG_ARM=y
> -CONFIG_ARCH_EXYNOS=y
> -CONFIG_TARGET_ODROID_XU3=y
> +CONFIG_SPL=y
> ++S:CONFIG_ARM=y
> ++S:CONFIG_ARCH_EXYNOS=y
> ++S:CONFIG_TARGET_ODROID_XU3=y
>  CONFIG_DEFAULT_DEVICE_TREE="exynos5422-odroidxu3"

Thanks, that gets things building.  Just to double-check, no additional
changes to include/configs/odroid_xu3.h?

Also, which image are you using as your unsigned BL2? spl/u-boot-spl.bin
or spl/smdk5420-spl.bin?  

The later seems to be generated from the former using tools/mkexynosspl,
but not sure exactly what it's doing, or if its needed on all boards or
just the smdk5420 (as the name implies).

Thanks,

Kevin
diff mbox

Patch

diff --git a/arch/arm/cpu/armv7/exynos/Kconfig
b/arch/arm/cpu/armv7/exynos/Kconfig
index 7fcb5d2..39953e4 100644
--- a/arch/arm/cpu/armv7/exynos/Kconfig
+++ b/arch/arm/cpu/armv7/exynos/Kconfig
@@ -26,7 +26,8 @@  config TARGET_ODROID

 config TARGET_ODROID_XU3
        bool "Exynos5422 Odroid board"
-       select OF_CONTROL
+       select SUPPORT_SPL
+       select OF_CONTROL if !SPL_BUILD

 config TARGET_ARNDALE
        bool "Exynos5250 Arndale board"
diff --git a/configs/odroid-xu3_defconfig b/configs/odroid-xu3_defconfig
index 74aa0cf..6000ec1 100644
--- a/configs/odroid-xu3_defconfig
+++ b/configs/odroid-xu3_defconfig
@@ -1,4 +1,5 @@ 
-CONFIG_ARM=y
-CONFIG_ARCH_EXYNOS=y
-CONFIG_TARGET_ODROID_XU3=y
+CONFIG_SPL=y
++S:CONFIG_ARM=y
++S:CONFIG_ARCH_EXYNOS=y
++S:CONFIG_TARGET_ODROID_XU3=y
 CONFIG_DEFAULT_DEVICE_TREE="exynos5422-odroidxu3"