From patchwork Mon Jan 28 10:39:59 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivek Gautam X-Patchwork-Id: 216155 X-Patchwork-Delegate: promsoft@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 81DCF2C008E for ; Mon, 28 Jan 2013 21:33:19 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 7A2C94A092; Mon, 28 Jan 2013 11:33:11 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id GC5EjKjYaffN; Mon, 28 Jan 2013 11:33:11 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 648384A094; Mon, 28 Jan 2013 11:33:09 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 7816F4A094 for ; Mon, 28 Jan 2013 11:33:06 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rGQeMUaA34DY for ; Mon, 28 Jan 2013 11:33:02 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by theia.denx.de (Postfix) with ESMTP id 55CA74A092 for ; Mon, 28 Jan 2013 11:32:58 +0100 (CET) Received: from epcpsbgm2.samsung.com (epcpsbgm2 [203.254.230.27]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MHB00AHBZYTQUA0@mailout3.samsung.com> for u-boot@lists.denx.de; Mon, 28 Jan 2013 19:32:53 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.126]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 07.80.03880.5D356015; Mon, 28 Jan 2013 19:32:53 +0900 (KST) X-AuditID: cbfee61b-b7fb06d000000f28-da-510653d5ab6a Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 96.80.03880.4D356015; Mon, 28 Jan 2013 19:32:52 +0900 (KST) Received: from vivekkumarg-linuxpc.sisodomain.com ([107.108.73.134]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MHB00LBKZYMBP20@mmp2.samsung.com> for u-boot@lists.denx.de; Mon, 28 Jan 2013 19:32:52 +0900 (KST) From: Vivek Gautam To: u-boot@lists.denx.de Date: Mon, 28 Jan 2013 16:09:59 +0530 Message-id: <1359369599-30404-1-git-send-email-gautam.vivek@samsung.com> X-Mailer: git-send-email 1.7.6.5 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrFLMWRmVeSWpSXmKPExsWyRsSkTvdqMFugwbfb7BZv93ayOzB6nL2z gzGAMYrLJiU1J7MstUjfLoEr49rabqaCJRIVN3dOYm5g/CXcxcjJISFgIvHkxHlmCFtM4sK9 9WxdjFwcQgJLGSX6N81nhCnad+YcG4gtJDCdUWLSaxaIojVMEmcWrWMCSbAJ6Eo0vd0F1iAi ICHxq/8qmM0s0M4ocW22UxcjB4ewgIPE3y8eIGEWAVWJY1ffgM3kFfCQmPT5BjvELgWJN7ef MYPMlxDYwybR8HoPC0SDgMS3yYdYQOZICMhKbDoAdbSkxMEVN1gmMAouYGRYxSiaWpBcUJyU nmukV5yYW1yal66XnJ+7iREYUqf/PZPewbiqweIQowAHoxIP7480lkAh1sSy4srcQ4wSHMxK IrwxZ1gDhXhTEiurUovy44tKc1KLDzEmAy2fyCwlmpwPDPe8knhDYxNzU2NTSyMjM1NT0oSV xHkZTz0JEBJITyxJzU5NLUgtgtnCxMEp1cBomN0bb/7PfEKwl8qWufnJNRafzT/wHDbojrO/ lvgoOiV0ccmORycNZ3IKlaSd1ShlWf5K2MqfPem/9/nEvpMZlyR0vnj/ev9GYeoTXY+eV8pd bL/kU/b95bbKu3vNqNPw/JRPpie3VX+uzox/L1J47KSYZfPmriWJXvPrJW0dshkDVYJfmSux FGckGmoxFxUnAgCBckANbQIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupkkeLIzCtJLcpLzFFi42I5/e+xoO6VYLZAg12XjC3e7u1kd2D0OHtn B2MAY1QDo01GamJKapFCal5yfkpmXrqtkndwvHO8qZmBoa6hpYW5kkJeYm6qrZKLT4CuW2YO 0FglhbLEnFKgUEBicbGSvh2mCaEhbroWMI0Rur4hQXA9RgZoIGENY8a1td1MBUskKm7unMTc wPhLuIuRk0NCwERi35lzbBC2mMSFe+vBbCGB6YwSk16zdDFyAdlrmCTOLFrHBJJgE9CVaHq7 ixHEFhGQkPjVfxXMZhZoZ5S4Ntupi5GDQ1jAQeLvFw+QMIuAqsSxq2/AZvIKeEhM+nyDHWKX gsSb28+YJzByL2BkWMUomlqQXFCclJ5rpFecmFtcmpeul5yfu4kRHLDPpHcwrmqwOMQowMGo xMP7I40lUIg1say4MvcQowQHs5IIb8wZ1kAh3pTEyqrUovz4otKc1OJDjMlA2ycyS4km5wOj Ka8k3tDYxNzU2NTSxMLEzJI0YSVxXsZTTwKEBNITS1KzU1MLUotgtjBxcEo1MM4WYHzjPCNy Vzynl5mnzYPsvm9aa1yudwbMmPfxrvKFbSuPfyz44q9wadrnG/cCq5erMK4q+NfJfNE0/KnI zQbr5LONzbY+lzszX/mufbxscfS2XXlL2/i/zFf6xfJqYtiSmlcbFeukNdZ2hKy4O7Vm+9MT KeF3jklN+K3LxPPJw4ynvDVKmUOJpTgj0VCLuag4EQDOxnHsnAIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: kmpark@infradead.org, patches@linaro.org, rajeshwari.s@samsung.com, ch.naveen@samsung.com Subject: [U-Boot] [PATCH] Exynos5: Add support for USB download boot mode X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de 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 Signed-off-by: Simon Glass Signed-off-by: Vivek Gautam Acked-by: Simon Glass --- 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 + /* MMC SPL */ #define CONFIG_SPL #define COPY_BL2_FNPTR_ADDR 0x02020030