On 15/04/13 14:36, Vivek Gautam wrote: > Hi, > > > On Sat, Apr 13, 2013 at 7:50 PM, Simon Glass <s...@chromium.org> wrote: >> Hi, >> >> On Tue, Feb 5, 2013 at 9:04 PM, Vivek Gautam <gautamvivek1...@gmail.com> >> wrote: >>> Hi Simon, >>> >>> >>> On Tue, Feb 5, 2013 at 2:56 AM, Simon Glass <s...@chromium.org> wrote: >>>> Hi, >>>> >>>> On Mon, Jan 28, 2013 at 2:39 AM, Vivek Gautam <gautam.vi...@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.nav...@samsung.com> >>>>> Signed-off-by: Simon Glass <s...@chromium.org> >>>>> Signed-off-by: Vivek Gautam <gautam.vi...@samsung.com> >>>> >>>> Acked-by: Simon Glass <s...@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. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot