[U-Boot] [PATCH] Exynos5: Add support for USB download boot mode
Minkyu Kang
mk7.kang at samsung.com
Wed Apr 17 04:09:39 CEST 2013
On 15/04/13 14:36, Vivek Gautam wrote:
> Hi,
>
>
> On Sat, Apr 13, 2013 at 7:50 PM, Simon Glass <sjg at chromium.org> wrote:
>> Hi,
>>
>> On Tue, Feb 5, 2013 at 9:04 PM, Vivek Gautam <gautamvivek1987 at gmail.com> wrote:
>>> Hi Simon,
>>>
>>>
>>> On Tue, Feb 5, 2013 at 2:56 AM, Simon Glass <sjg at chromium.org> wrote:
>>>> Hi,
>>>>
>>>> On Mon, Jan 28, 2013 at 2:39 AM, Vivek Gautam <gautam.vivek at samsung.com> wrote:
>>>>> Exynos5250 supports secondary USB device boot mode. If the iROM fails
>>>>> to download u-boot from the primary boot device (such as SD or eMMC),
>>>>> it will try to retrieve from the secondary boot device (such as USB).
>>>>>
>>>>> Signed-off-by: Naveen Krishna Ch <ch.naveen at samsung.com>
>>>>> Signed-off-by: Simon Glass <sjg at chromium.org>
>>>>> Signed-off-by: Vivek Gautam <gautam.vivek at samsung.com>
>>>>
>>>> Acked-by: Simon Glass <sjg at chromium.org>
>>>>
>>>
>>> Thanks for reviewing.
>>>
>>>> But please see comment below.
>>>>
>>>>> ---
>>>>>
>>>>> NOTE:
>>>>> - Based on 'master' branch of u-boot-samsung.
>>>>> - Tested with smdk5250 for usb download mode.
>>>>>
>>>>> board/samsung/smdk5250/spl_boot.c | 40 +++++++++++++++++++++++++++++++++++-
>>>>> include/configs/exynos5250-dt.h | 5 ++++
>>>>> 2 files changed, 43 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/board/samsung/smdk5250/spl_boot.c b/board/samsung/smdk5250/spl_boot.c
>>>>> index d8f3c1e..c0bcf46 100644
>>>>> --- a/board/samsung/smdk5250/spl_boot.c
>>>>> +++ b/board/samsung/smdk5250/spl_boot.c
>>>>> @@ -32,6 +32,21 @@ enum boot_mode {
>>>>> };
>>>>>
>>>>> typedef u32 (*spi_copy_func_t)(u32 offset, u32 nblock, u32 dst);
>>>>> + typedef u32 (*usb_copy_func_t)(void);
>>>>> +
>>>>> +/*
>>>>> + * Set/clear program flow prediction and return the previous state.
>>>>> + */
>>>>> +static int config_branch_prediction(int set_cr_z)
>>>>> +{
>>>>> + unsigned int cr;
>>>>> +
>>>>> + /* System Control Register: 11th bit Z Branch prediction enable */
>>>>> + cr = get_cr();
>>>>> + set_cr(set_cr_z ? cr | CR_Z : cr & ~CR_Z);
>>>>> +
>>>>> + return cr & CR_Z;
>>>>> +}
>>>>>
>>>>> /*
>>>>> * Copy U-boot from mmc to RAM:
>>>>> @@ -41,10 +56,20 @@ enum boot_mode {
>>>>> void copy_uboot_to_ram(void)
>>>>> {
>>>>> spi_copy_func_t spi_copy;
>>>>> - enum boot_mode bootmode;
>>>>> + usb_copy_func_t usb_copy;
>>>>> +
>>>>> + int is_cr_z_set;
>>>>> + unsigned int sec_boot_check;
>>>>> + enum boot_mode bootmode = BOOT_MODE_OM;
>>>>> u32 (*copy_bl2)(u32, u32, u32);
>>>>>
>>>>> - bootmode = readl(EXYNOS5_POWER_BASE) & OM_STAT;
>>>>> + /* Read iRAM location to check for secondary USB boot mode */
>>>>> + sec_boot_check = readl(EXYNOS_IRAM_SECONDARY_BASE);
>>>>> + if (sec_boot_check == EXYNOS_USB_SECONDARY_BOOT)
>>>>> + bootmode = BOOT_MODE_USB;
>>>>> +
>>>>> + if (bootmode == BOOT_MODE_OM)
>>>>> + bootmode = readl(EXYNOS5_POWER_BASE) & OM_STAT;
>>>>>
>>>>> switch (bootmode) {
>>>>> case BOOT_MODE_SERIAL:
>>>>> @@ -57,6 +82,17 @@ void copy_uboot_to_ram(void)
>>>>> copy_bl2(BL2_START_OFFSET, BL2_SIZE_BLOC_COUNT,
>>>>> CONFIG_SYS_TEXT_BASE);
>>>>> break;
>>>>> + case BOOT_MODE_USB:
>>>>> + /*
>>>>> + * iROM needs program flow prediction to be disabled
>>>>> + * before copy from USB device to RAM
>>>>> + */
>>>>> + is_cr_z_set = config_branch_prediction(0);
>>>>> + usb_copy = *(usb_copy_func_t *)
>>>>> + EXYNOS_COPY_USB_FNPTR_ADDR;
>>>>> + usb_copy();
>>>>> + config_branch_prediction(is_cr_z_set);
>>>>> + break;
>>>>> default:
>>>>> break;
>>>>> }
>>>>> diff --git a/include/configs/exynos5250-dt.h b/include/configs/exynos5250-dt.h
>>>>> index cabd2f2..6728b0e 100644
>>>>> --- a/include/configs/exynos5250-dt.h
>>>>> +++ b/include/configs/exynos5250-dt.h
>>>>> @@ -123,6 +123,11 @@
>>>>> #define CONFIG_USB_EHCI_EXYNOS
>>>>> #define CONFIG_USB_STORAGE
>>>>>
>>>>> +/* USB boot mode */
>>>>> +#define EXYNOS_COPY_USB_FNPTR_ADDR 0x02020070
>>>>> +#define EXYNOS_USB_SECONDARY_BOOT 0xfeed0002
>>>>> +#define EXYNOS_IRAM_SECONDARY_BASE 0x02020018
>>>>
>>>>
>>>> What happened to the function pointer table patch?
>>>>
>>> I think i missed that patch from Amar, :-(
>>> will remove these #defines and use the function pointer table instead.
>>
>> I notice that this patch has not made it to mainline. It really should
>> be there since without it it is not possible to USB boot on snow,
>> which makes development awkward.
>>
>> Can we get this applied in time for the release? The comment made
>> above can be dealt with later perhaps.
>
> Sorry for not responding to this patch for long, but was still waiting
> for Amar's emmc booting patch
> to get merged (which carries the funtion pointer table).
>
> Hi Minkyu,
> Is it fine with you if we pull this in for now, and post a patch later
> to make things aligned
> with funtion-pointer table ?
>
> This patch cleanly applies on u-boot-samsung/master.
>
>
applied to u-boot-samsung
Thanks,
Minkyu Kang.
More information about the U-Boot
mailing list