[U-Boot] [PATCH] Exynos5: Add support for USB download boot mode

Vivek Gautam gautamvivek1987 at gmail.com
Mon Apr 15 07:36:30 CEST 2013


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.


-- 
Thanks & Regards
Vivek


More information about the U-Boot mailing list