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: 14297 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 06F8E23E92 for ; Mon, 28 Jan 2013 10:32:57 +0000 (UTC) Received: from mail-vb0-f50.google.com (mail-vb0-f50.google.com [209.85.212.50]) by fiordland.canonical.com (Postfix) with ESMTP id 84839A18B2F for ; Mon, 28 Jan 2013 10:32:56 +0000 (UTC) Received: by mail-vb0-f50.google.com with SMTP id ft2so1735812vbb.9 for ; Mon, 28 Jan 2013 02:32:56 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:x-forwarded-to:x-forwarded-for:delivered-to:x-received :received-spf:x-auditid:from:to:cc:subject:date:message-id:x-mailer :x-brightmail-tracker:x-brightmail-tracker:dlp-filter:x-mtr :x-cfilter-loop:x-gm-message-state; bh=2xvBEeW1KRZLtI5j+0znHh7/fX0gLYYK23+VuG9y744=; b=prRHJF250sHt8lVQrUTf4LdMUR7f0c08Zltxk9fL/V1KIZk5upuJ8P2w2QuLVV5Gpg 7v4iix271DsAy8LI0U86t8eNP5ETdL9pCq47lKD0h7UPrDWQwK6x6SoxxiubA1YmDHP7 fO2LCMNH//I9JHIoWuNkr+xKJve835JBjp0ovbVg3Hkn6uhl10o062z7RdPK5THp3Ep8 NQl4IqlpcLXp8VOtqoCkJzvM01K5cz1mDPf/n3wfupr5SE0YePS6yXls5vuXydbewDxX W9Q9zsOVowxsmkt6SUFl1FFHW12FHiV8/kWq9AqqP1iAEutOHCutvbu6uc1x41w9Mp1Z BTEw== X-Received: by 10.52.97.7 with SMTP id dw7mr12591868vdb.38.1359369176012; Mon, 28 Jan 2013 02:32:56 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.58.145.101 with SMTP id st5csp78442veb; Mon, 28 Jan 2013 02:32:55 -0800 (PST) X-Received: by 10.68.223.230 with SMTP id qx6mr36700532pbc.159.1359369174871; Mon, 28 Jan 2013 02:32:54 -0800 (PST) Received: from mailout3.samsung.com (mailout3.samsung.com. [203.254.224.33]) by mx.google.com with ESMTP id t5si980773pay.105.2013.01.28.02.32.54; Mon, 28 Jan 2013 02:32:54 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of gautam.vivek@samsung.com designates 203.254.224.33 as permitted sender) client-ip=203.254.224.33; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of gautam.vivek@samsung.com designates 203.254.224.33 as permitted sender) smtp.mail=gautam.vivek@samsung.com Received: from epcpsbgm1.samsung.com (epcpsbgm1 [203.254.230.26]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MHB004CXZYTZ3T0@mailout3.samsung.com> for patches@linaro.org; Mon, 28 Jan 2013 19:32:53 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.122]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 33.63.03918.5D356015; Mon, 28 Jan 2013 19:32:53 +0900 (KST) X-AuditID: cbfee61a-b7f7d6d000000f4e-99-510653d5153f Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 92.63.03918.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 patches@linaro.org; Mon, 28 Jan 2013 19:32:52 +0900 (KST) From: Vivek Gautam To: u-boot@lists.denx.de Cc: patches@linaro.org, mk7.kang@samsung.com, sjg@chromium.org, kmpark@infradead.org, rajeshwari.s@samsung.com, ch.naveen@samsung.com Subject: [PATCH] Exynos5: Add support for USB download boot mode 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+NgFrrJLMWRmVeSWpSXmKPExsWyRsSkSvdqMFugwfTfHBZTDn9hcWD0uHNt D1sAYxSXTUpqTmZZapG+XQJXxrW13UwFSyQqbu6cxNzA+Eu4i5GDQ0LARGLjFq4uRk4gU0zi wr31bF2MXBxCAksZJc7P7WGCSJhInNpygxUiMZ1R4tT/XWwgCSGBVUwSDe/jQWw2AV2Jpre7 GEFsEQEJiV/9V8FsZoF2Rolrs51AlgkLOEj8/eIBEmYRUJU4dvUN2BheAQ+JSZ9vsEPsUpB4 c/sZM8guCYEDbBIfHzQyQjQISHybfIgF4mhZiU0HmCHqJSUOrrjBMoFRcAEjwypG0dSC5ILi pPRcQ73ixNzi0rx0veT83E2MwIA6/e+Z1A7GlQ0WhxgFOBiVeHh/pLEECrEmlhVX5h5ilOBg VhLhjTnDGijEm5JYWZValB9fVJqTWnyIMRlo+URmKdHkfGCw55XEGxqbmJsam1oaGZmZmpIm rCTOy3jqSYCQQHpiSWp2ampBahHMFiYOTqkGxvzvc1UOq/HPsBXfwz3H0KX4ltpHgUUFsnk8 /i6brV9Jze8r5FwbtvjgrqyMnRZz3h51qT8Q6PcjSeKMSPK9aT6sobtKX2Zpsn3980n6zjx2 lYm7lz9VNXNilVBf/Sf+wNE/S4qEZV6WzMuL4bYrqvA9zq3MMkd2QZnhryNvPs6T3L05aINv mhJLcUaioRZzUXEiAIIzKEJsAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupkkeLIzCtJLcpLzFFi42I5/e+xoO6VYLZAg8fvDC2mHP7C4sDocefa HrYAxqgGRpuM1MSU1CKF1Lzk/JTMvHRbJe/geOd4UzMDQ11DSwtzJYW8xNxUWyUXnwBdt8wc oLFKCmWJOaVAoYDE4mIlfTtME0JD3HQtYBojdH1DguB6jAzQQMIaxoxra7uZCpZIVNzcOYm5 gfGXcBcjJ4eEgInEqS03WCFsMYkL99azdTFycQgJTGeUOPV/FxtIQkhgFZNEw/t4EJtNQFei 6e0uRhBbREBC4lf/VTCbWaCdUeLabKcuRg4OYQEHib9fPEDCLAKqEseuvgEbwyvgITHp8w12 iF0KEm9uP2OewMi9gJFhFaNoakFyQXFSeq6hXnFibnFpXrpecn7uJkZwwD6T2sG4ssHiEKMA B6MSD++PNJZAIdbEsuLK3EOMEhzMSiK8MWdYA4V4UxIrq1KL8uOLSnNSiw8xJgNtn8gsJZqc D4ymvJJ4Q2MTc1NjU0sTCxMzS9KElcR5GU89CRASSE8sSc1OTS1ILYLZwsTBKdXAaB9y1ilk rp/a6sV7Nl8579zMLF0v0h6g9jrPPiXPN9P/ncKqx/vv2l049Vd/0Z/1fMf/XYlf7PhgR2Hl 40/T/i9d6HL5yp5DNxQ+eG3887d9zcZ5/6ZWev22mPKi90GL2by+3w72f0MOWTKca17L3Wlz /dj8LfvmtW681btG9xh/r7OUtbfgJR4lluKMREMt5qLiRAD14Dg/nAIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected X-Gm-Message-State: ALoCoQkVitKBiduq769FHXTRp4C2cxmaaeZWkKvpRa56xBiO9Cc2mFtvba4r2POnkvyjiX1qOpML 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