All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCHv2 1/5] mtd: nand: add initialization flag
@ 2017-03-08  6:24 Zhiqiang Hou
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 2/5] mtd: nand: remove nand size print from nand_init function Zhiqiang Hou
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Zhiqiang Hou @ 2017-03-08  6:24 UTC (permalink / raw)
  To: u-boot

From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

Add initialization flag to avoid initializing NAND Flash multiple
times, otherwise it will calculate a wrong total size.

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
---
V2:
 - no change

 drivers/mtd/nand/nand.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/mtd/nand/nand.c b/drivers/mtd/nand/nand.c
index 0551241..3ea2dcf 100644
--- a/drivers/mtd/nand/nand.c
+++ b/drivers/mtd/nand/nand.c
@@ -133,6 +133,16 @@ static void create_mtd_concat(void)
 
 void nand_init(void)
 {
+	static int initialized;
+
+	/*
+	 * Avoid initializing NAND Flash multiple times,
+	 * otherwise it will calculate a wrong total size.
+	 */
+	if (initialized)
+		return;
+	initialized = 1;
+
 #ifdef CONFIG_SYS_NAND_SELF_INIT
 	board_nand_init();
 #else
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCHv2 2/5] mtd: nand: remove nand size print from nand_init function
  2017-03-08  6:24 [U-Boot] [PATCHv2 1/5] mtd: nand: add initialization flag Zhiqiang Hou
@ 2017-03-08  6:24 ` Zhiqiang Hou
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 3/5] fsl PPA: add support PPA image loading from NAND and SD Zhiqiang Hou
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Zhiqiang Hou @ 2017-03-08  6:24 UTC (permalink / raw)
  To: u-boot

From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

Add nand_size() function to move the nand size print into initr_nand().
Remove nand size print from nand_init() to allow other function to call
nand_init() without printing nand size.

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
---
V2:
 - no change

 common/board_r.c        | 1 +
 drivers/mtd/nand/nand.c | 7 +++++--
 include/nand.h          | 1 +
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/common/board_r.c b/common/board_r.c
index 48fa4ee..c39afe8 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -426,6 +426,7 @@ static int initr_nand(void)
 {
 	puts("NAND:  ");
 	nand_init();
+	printf("%lu MiB\n", nand_size() / 1024);
 	return 0;
 }
 #endif
diff --git a/drivers/mtd/nand/nand.c b/drivers/mtd/nand/nand.c
index 3ea2dcf..168bac6 100644
--- a/drivers/mtd/nand/nand.c
+++ b/drivers/mtd/nand/nand.c
@@ -131,6 +131,11 @@ static void create_mtd_concat(void)
 }
 #endif
 
+unsigned long nand_size(void)
+{
+	return total_nand_size;
+}
+
 void nand_init(void)
 {
 	static int initialized;
@@ -152,8 +157,6 @@ void nand_init(void)
 		nand_init_chip(i);
 #endif
 
-	printf("%lu MiB\n", total_nand_size / 1024);
-
 #ifdef CONFIG_SYS_NAND_SELECT_DEVICE
 	/*
 	 * Select the chip in the board/cpu specific driver
diff --git a/include/nand.h b/include/nand.h
index b6eb223..a1f6632 100644
--- a/include/nand.h
+++ b/include/nand.h
@@ -28,6 +28,7 @@
 #endif
 
 extern void nand_init(void);
+extern unsigned long nand_size(void);
 
 #include <linux/compat.h>
 #include <linux/mtd/mtd.h>
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCHv2 3/5] fsl PPA: add support PPA image loading from NAND and SD
  2017-03-08  6:24 [U-Boot] [PATCHv2 1/5] mtd: nand: add initialization flag Zhiqiang Hou
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 2/5] mtd: nand: remove nand size print from nand_init function Zhiqiang Hou
@ 2017-03-08  6:24 ` Zhiqiang Hou
  2017-03-08 11:06   ` Jaehoon Chung
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 4/5] Kconfig: fsl-ppa: support load PPA from eMMC/SD and NAND Flash Zhiqiang Hou
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 5/5] fsl-layerscape/ls104xardb: enable PPA support for eMMC/SD and NAND boot Zhiqiang Hou
  3 siblings, 1 reply; 7+ messages in thread
From: Zhiqiang Hou @ 2017-03-08  6:24 UTC (permalink / raw)
  To: u-boot

From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
---
V2:
 - added flush cache operation after nand read

 arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 122 +++++++++++++++++++++++++++++++-
 1 file changed, 121 insertions(+), 1 deletion(-)

diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
index b68e87d..4df70aa 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
@@ -4,6 +4,7 @@
  * SPDX-License-Identifier:	GPL-2.0+
  */
 #include <common.h>
+#include <malloc.h>
 #include <config.h>
 #include <errno.h>
 #include <asm/system.h>
@@ -21,9 +22,17 @@
 #include <fsl_validate.h>
 #endif
 
+#ifdef CONFIG_SYS_LS_PPA_FW_IN_NAND
+#include <nand.h>
+#elif defined(CONFIG_SYS_LS_PPA_FW_IN_MMC)
+#include <mmc.h>
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
 int ppa_init(void)
 {
-	const void *ppa_fit_addr;
+	void *ppa_fit_addr;
 	u32 *boot_loc_ptr_l, *boot_loc_ptr_h;
 	int ret;
 
@@ -34,10 +43,116 @@ int ppa_init(void)
 
 #ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP
 	ppa_fit_addr = (void *)CONFIG_SYS_LS_PPA_FW_ADDR;
+	debug("%s: PPA image load from XIP\n", __func__);
+#else /* !CONFIG_SYS_LS_PPA_FW_IN_XIP */
+	size_t fw_length, fdt_header_len = sizeof(struct fdt_header);
+
+	/* Copy PPA image from MMC/SD/NAND to allocated memory */
+#ifdef CONFIG_SYS_LS_PPA_FW_IN_MMC
+	struct mmc *mmc;
+	int dev = CONFIG_SYS_MMC_ENV_DEV;
+	struct fdt_header *fitp;
+	u32 cnt;
+	u32 blk = CONFIG_SYS_LS_PPA_FW_ADDR / 512;
+
+	debug("%s: PPA image load from eMMC/SD\n", __func__);
+
+	mmc_initialize(gd->bd);
+	mmc = find_mmc_device(dev);
+	if (!mmc) {
+		printf("PPA: MMC cannot find device for PPA firmware\n");
+		return -ENODEV;
+	}
+
+	mmc_init(mmc);
+
+	fitp = malloc(roundup(fdt_header_len, 512));
+	if (!fitp) {
+		printf("PPA: malloc failed for FIT header(size 0x%zx)\n",
+		       roundup(fdt_header_len, 512));
+		return -ENOMEM;
+	}
+
+	cnt = DIV_ROUND_UP(fdt_header_len, 512);
+	debug("%s: MMC read PPA FIT header: dev # %u, block # %u, count %u\n",
+	      __func__, dev, blk, cnt);
+	ret = mmc->block_dev.block_read(&mmc->block_dev, blk, cnt, fitp);
+	if (ret != cnt) {
+		free(fitp);
+		printf("MMC/SD read of PPA FIT header at offset 0x%x failed\n",
+		       CONFIG_SYS_LS_PPA_FW_ADDR);
+		return -EIO;
+	}
+
+	/* flush cache after read */
+	flush_cache((ulong)fitp, cnt * 512);
+
+	fw_length = fdt_totalsize(fitp);
+	free(fitp);
+
+	fw_length = roundup(fw_length, 512);
+	ppa_fit_addr = malloc(fw_length);
+	if (!ppa_fit_addr) {
+		printf("PPA: malloc failed for PPA image(size 0x%zx)\n",
+		       fw_length);
+		return -ENOMEM;
+	}
+
+	cnt = DIV_ROUND_UP(fw_length, 512);
+	debug("%s: MMC read PPA FIT image: dev # %u, block # %u, count %u\n",
+	      __func__, dev, blk, cnt);
+	ret = mmc->block_dev.block_read(&mmc->block_dev,
+					blk, cnt, ppa_fit_addr);
+	if (ret != cnt) {
+		free(ppa_fit_addr);
+		printf("MMC/SD read of PPA FIT header at offset 0x%x failed\n",
+		       CONFIG_SYS_LS_PPA_FW_ADDR);
+		return -EIO;
+	}
+
+	/* flush cache after read */
+	flush_cache((ulong)ppa_fit_addr, cnt * 512);
+
+#elif defined(CONFIG_SYS_LS_PPA_FW_IN_NAND)
+	struct fdt_header fit;
+
+	debug("%s: PPA image load from NAND\n", __func__);
+
+	nand_init();
+	ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_FW_ADDR,
+		       &fdt_header_len, (u_char *)&fit);
+	if (ret == -EUCLEAN) {
+		printf("NAND read of PPA FIT header at offset 0x%x failed\n",
+		       CONFIG_SYS_LS_PPA_FW_ADDR);
+		return -EIO;
+	}
+
+	fw_length = fdt_totalsize(&fit);
+
+	ppa_fit_addr = malloc(fw_length);
+	if (!ppa_fit_addr) {
+		printf("PPA: malloc failed for PPA image(size 0x%zx)\n",
+		       fw_length);
+		return -ENOMEM;
+	}
+
+	ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_FW_ADDR,
+		       &fw_length, (u_char *)ppa_fit_addr);
+	if (ret == -EUCLEAN) {
+		free(ppa_fit_addr);
+		printf("NAND read of PPA firmware at offset 0x%x failed\n",
+		       CONFIG_SYS_LS_PPA_FW_ADDR);
+		return -EIO;
+	}
+
+	/* flush cache after read */
+	flush_cache((ulong)ppa_fit_addr, fw_length);
 #else
 #error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined"
 #endif
 
+#endif
+
 #ifdef CONFIG_CHAIN_OF_TRUST
 	ppa_img_addr = (uintptr_t)ppa_fit_addr;
 	if (fsl_check_boot_mode_secure() != 0) {
@@ -65,5 +180,10 @@ int ppa_init(void)
 	      boot_loc_ptr_l, boot_loc_ptr_h);
 	ret = sec_firmware_init(ppa_fit_addr, boot_loc_ptr_l, boot_loc_ptr_h);
 
+#if defined(CONFIG_SYS_LS_PPA_FW_IN_MMC) || \
+	defined(CONFIG_SYS_LS_PPA_FW_IN_NAND)
+	free(ppa_fit_addr);
+#endif
+
 	return ret;
 }
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCHv2 4/5] Kconfig: fsl-ppa: support load PPA from eMMC/SD and NAND Flash
  2017-03-08  6:24 [U-Boot] [PATCHv2 1/5] mtd: nand: add initialization flag Zhiqiang Hou
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 2/5] mtd: nand: remove nand size print from nand_init function Zhiqiang Hou
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 3/5] fsl PPA: add support PPA image loading from NAND and SD Zhiqiang Hou
@ 2017-03-08  6:24 ` Zhiqiang Hou
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 5/5] fsl-layerscape/ls104xardb: enable PPA support for eMMC/SD and NAND boot Zhiqiang Hou
  3 siblings, 0 replies; 7+ messages in thread
From: Zhiqiang Hou @ 2017-03-08  6:24 UTC (permalink / raw)
  To: u-boot

From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
---
V2:
 - no change

 arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
index adccdf1..6d2dd15 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
+++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
@@ -122,6 +122,8 @@ config FSL_LS_PPA
 choice
 	prompt "FSL Layerscape PPA firmware loading-media select"
 	depends on FSL_LS_PPA
+	default SYS_LS_PPA_FW_IN_MMC if SD_BOOT
+	default SYS_LS_PPA_FW_IN_NAND if NAND_BOOT
 	default SYS_LS_PPA_FW_IN_XIP
 
 config SYS_LS_PPA_FW_IN_XIP
@@ -130,12 +132,24 @@ config SYS_LS_PPA_FW_IN_XIP
 	  Say Y here if the PPA firmware locate at XIP flash, such
 	  as NOR or QSPI flash.
 
+config SYS_LS_PPA_FW_IN_MMC
+	bool "eMMC or SD Card"
+	help
+	  Say Y here if the PPA firmware locate at eMMC/SD card.
+
+config SYS_LS_PPA_FW_IN_NAND
+	bool "NAND"
+	help
+	  Say Y here if the PPA firmware locate at NAND flash.
+
 endchoice
 
 config SYS_LS_PPA_FW_ADDR
 	hex "Address of PPA firmware loading from"
 	depends on FSL_LS_PPA
 	default 0x40500000 if SYS_LS_PPA_FW_IN_XIP && QSPI_BOOT
+	default 0x500000 if SYS_LS_PPA_FW_IN_MMC
+	default 0x500000 if SYS_LS_PPA_FW_IN_NAND
 	default 0x60500000 if SYS_LS_PPA_FW_IN_XIP
 	help
 	  If the PPA firmware locate at XIP flash, such as NOR or
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCHv2 5/5] fsl-layerscape/ls104xardb: enable PPA support for eMMC/SD and NAND boot
  2017-03-08  6:24 [U-Boot] [PATCHv2 1/5] mtd: nand: add initialization flag Zhiqiang Hou
                   ` (2 preceding siblings ...)
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 4/5] Kconfig: fsl-ppa: support load PPA from eMMC/SD and NAND Flash Zhiqiang Hou
@ 2017-03-08  6:24 ` Zhiqiang Hou
  3 siblings, 0 replies; 7+ messages in thread
From: Zhiqiang Hou @ 2017-03-08  6:24 UTC (permalink / raw)
  To: u-boot

From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
---
V2:
 - no change

 configs/ls1043ardb_nand_defconfig   | 1 +
 configs/ls1043ardb_sdcard_defconfig | 1 +
 configs/ls1046ardb_emmc_defconfig   | 1 +
 configs/ls1046ardb_sdcard_defconfig | 1 +
 4 files changed, 4 insertions(+)

diff --git a/configs/ls1043ardb_nand_defconfig b/configs/ls1043ardb_nand_defconfig
index b4aaaa1..1dfbb34 100644
--- a/configs/ls1043ardb_nand_defconfig
+++ b/configs/ls1043ardb_nand_defconfig
@@ -11,6 +11,7 @@ CONFIG_SPL_WATCHDOG_SUPPORT=y
 CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1043a-rdb"
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
+CONFIG_FSL_LS_PPA=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL,NAND_BOOT"
 CONFIG_NAND_BOOT=y
diff --git a/configs/ls1043ardb_sdcard_defconfig b/configs/ls1043ardb_sdcard_defconfig
index 5587860..ee83530 100644
--- a/configs/ls1043ardb_sdcard_defconfig
+++ b/configs/ls1043ardb_sdcard_defconfig
@@ -11,6 +11,7 @@ CONFIG_SPL_WATCHDOG_SUPPORT=y
 CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1043a-rdb"
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
+CONFIG_FSL_LS_PPA=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL,SD_BOOT"
 CONFIG_SD_BOOT=y
diff --git a/configs/ls1046ardb_emmc_defconfig b/configs/ls1046ardb_emmc_defconfig
index 7b50fc7..1fead97 100644
--- a/configs/ls1046ardb_emmc_defconfig
+++ b/configs/ls1046ardb_emmc_defconfig
@@ -3,6 +3,7 @@ CONFIG_TARGET_LS1046ARDB=y
 CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
+CONFIG_FSL_LS_PPA=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL,EMMC_BOOT"
 CONFIG_SD_BOOT=y
diff --git a/configs/ls1046ardb_sdcard_defconfig b/configs/ls1046ardb_sdcard_defconfig
index 9e6d23b..d0d2860 100644
--- a/configs/ls1046ardb_sdcard_defconfig
+++ b/configs/ls1046ardb_sdcard_defconfig
@@ -3,6 +3,7 @@ CONFIG_TARGET_LS1046ARDB=y
 CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
+CONFIG_FSL_LS_PPA=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL"
 CONFIG_SD_BOOT=y
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCHv2 3/5] fsl PPA: add support PPA image loading from NAND and SD
  2017-03-08  6:24 ` [U-Boot] [PATCHv2 3/5] fsl PPA: add support PPA image loading from NAND and SD Zhiqiang Hou
@ 2017-03-08 11:06   ` Jaehoon Chung
  2017-03-09 11:14     ` Z.Q. Hou
  0 siblings, 1 reply; 7+ messages in thread
From: Jaehoon Chung @ 2017-03-08 11:06 UTC (permalink / raw)
  To: u-boot

Hi,

On 03/08/2017 03:24 PM, Zhiqiang Hou wrote:
> From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> 
> Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> ---
> V2:
>  - added flush cache operation after nand read
> 
>  arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 122 +++++++++++++++++++++++++++++++-
>  1 file changed, 121 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
> index b68e87d..4df70aa 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
> @@ -4,6 +4,7 @@
>   * SPDX-License-Identifier:	GPL-2.0+
>   */
>  #include <common.h>
> +#include <malloc.h>
>  #include <config.h>
>  #include <errno.h>
>  #include <asm/system.h>
> @@ -21,9 +22,17 @@
>  #include <fsl_validate.h>
>  #endif
>  
> +#ifdef CONFIG_SYS_LS_PPA_FW_IN_NAND
> +#include <nand.h>
> +#elif defined(CONFIG_SYS_LS_PPA_FW_IN_MMC)
> +#include <mmc.h>
> +#endif
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
>  int ppa_init(void)
>  {
> -	const void *ppa_fit_addr;
> +	void *ppa_fit_addr;
>  	u32 *boot_loc_ptr_l, *boot_loc_ptr_h;
>  	int ret;
>  
> @@ -34,10 +43,116 @@ int ppa_init(void)
>  
>  #ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP
>  	ppa_fit_addr = (void *)CONFIG_SYS_LS_PPA_FW_ADDR;
> +	debug("%s: PPA image load from XIP\n", __func__);
> +#else /* !CONFIG_SYS_LS_PPA_FW_IN_XIP */
> +	size_t fw_length, fdt_header_len = sizeof(struct fdt_header);
> +
> +	/* Copy PPA image from MMC/SD/NAND to allocated memory */
> +#ifdef CONFIG_SYS_LS_PPA_FW_IN_MMC
> +	struct mmc *mmc;
> +	int dev = CONFIG_SYS_MMC_ENV_DEV;
> +	struct fdt_header *fitp;
> +	u32 cnt;
> +	u32 blk = CONFIG_SYS_LS_PPA_FW_ADDR / 512;
> +
> +	debug("%s: PPA image load from eMMC/SD\n", __func__);
> +
> +	mmc_initialize(gd->bd);

It should be failed. need to check the return value.

> +	mmc = find_mmc_device(dev);
> +	if (!mmc) {
> +		printf("PPA: MMC cannot find device for PPA firmware\n");
> +		return -ENODEV;
> +	}
> +
> +	mmc_init(mmc);

ditto.

> +
> +	fitp = malloc(roundup(fdt_header_len, 512));
> +	if (!fitp) {
> +		printf("PPA: malloc failed for FIT header(size 0x%zx)\n",
> +		       roundup(fdt_header_len, 512));
> +		return -ENOMEM;
> +	}
> +
> +	cnt = DIV_ROUND_UP(fdt_header_len, 512);
> +	debug("%s: MMC read PPA FIT header: dev # %u, block # %u, count %u\n",
> +	      __func__, dev, blk, cnt);
> +	ret = mmc->block_dev.block_read(&mmc->block_dev, blk, cnt, fitp);
> +	if (ret != cnt) {
> +		free(fitp);
> +		printf("MMC/SD read of PPA FIT header at offset 0x%x failed\n",
> +		       CONFIG_SYS_LS_PPA_FW_ADDR);
> +		return -EIO;
> +	}
> +
> +	/* flush cache after read */
> +	flush_cache((ulong)fitp, cnt * 512);
> +
> +	fw_length = fdt_totalsize(fitp);
> +	free(fitp);
> +
> +	fw_length = roundup(fw_length, 512);
> +	ppa_fit_addr = malloc(fw_length);
> +	if (!ppa_fit_addr) {
> +		printf("PPA: malloc failed for PPA image(size 0x%zx)\n",
> +		       fw_length);
> +		return -ENOMEM;
> +	}
> +
> +	cnt = DIV_ROUND_UP(fw_length, 512);
> +	debug("%s: MMC read PPA FIT image: dev # %u, block # %u, count %u\n",
> +	      __func__, dev, blk, cnt);
> +	ret = mmc->block_dev.block_read(&mmc->block_dev,
> +					blk, cnt, ppa_fit_addr);
> +	if (ret != cnt) {
> +		free(ppa_fit_addr);
> +		printf("MMC/SD read of PPA FIT header at offset 0x%x failed\n",
> +		       CONFIG_SYS_LS_PPA_FW_ADDR);
> +		return -EIO;
> +	}
> +
> +	/* flush cache after read */
> +	flush_cache((ulong)ppa_fit_addr, cnt * 512);
> +
> +#elif defined(CONFIG_SYS_LS_PPA_FW_IN_NAND)
> +	struct fdt_header fit;
> +
> +	debug("%s: PPA image load from NAND\n", __func__);
> +
> +	nand_init();
> +	ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_FW_ADDR,
> +		       &fdt_header_len, (u_char *)&fit);
> +	if (ret == -EUCLEAN) {
> +		printf("NAND read of PPA FIT header at offset 0x%x failed\n",
> +		       CONFIG_SYS_LS_PPA_FW_ADDR);
> +		return -EIO;
> +	}
> +
> +	fw_length = fdt_totalsize(&fit);
> +
> +	ppa_fit_addr = malloc(fw_length);
> +	if (!ppa_fit_addr) {
> +		printf("PPA: malloc failed for PPA image(size 0x%zx)\n",
> +		       fw_length);
> +		return -ENOMEM;
> +	}
> +
> +	ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_FW_ADDR,
> +		       &fw_length, (u_char *)ppa_fit_addr);
> +	if (ret == -EUCLEAN) {
> +		free(ppa_fit_addr);
> +		printf("NAND read of PPA firmware at offset 0x%x failed\n",
> +		       CONFIG_SYS_LS_PPA_FW_ADDR);
> +		return -EIO;
> +	}
> +
> +	/* flush cache after read */
> +	flush_cache((ulong)ppa_fit_addr, fw_length);
>  #else
>  #error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined"
>  #endif
>  
> +#endif
> +
>  #ifdef CONFIG_CHAIN_OF_TRUST
>  	ppa_img_addr = (uintptr_t)ppa_fit_addr;
>  	if (fsl_check_boot_mode_secure() != 0) {
> @@ -65,5 +180,10 @@ int ppa_init(void)
>  	      boot_loc_ptr_l, boot_loc_ptr_h);
>  	ret = sec_firmware_init(ppa_fit_addr, boot_loc_ptr_l, boot_loc_ptr_h);
>  
> +#if defined(CONFIG_SYS_LS_PPA_FW_IN_MMC) || \
> +	defined(CONFIG_SYS_LS_PPA_FW_IN_NAND)
> +	free(ppa_fit_addr);
> +#endif
> +
>  	return ret;
>  }
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCHv2 3/5] fsl PPA: add support PPA image loading from NAND and SD
  2017-03-08 11:06   ` Jaehoon Chung
@ 2017-03-09 11:14     ` Z.Q. Hou
  0 siblings, 0 replies; 7+ messages in thread
From: Z.Q. Hou @ 2017-03-09 11:14 UTC (permalink / raw)
  To: u-boot

Hi Jaehoon,

Thanks a lot for your comments!

> -----Original Message-----
> From: Jaehoon Chung [mailto:jh80.chung at samsung.com]
> Sent: 2017年3月8日 19:06
> To: Z.Q. Hou <zhiqiang.hou@nxp.com>; u-boot at lists.denx.de;
> oss at buserror.net; york sun <york.sun@nxp.com>; Mingkai.hu at freescale.com;
> sjg at chromium.org; Xiaobo Xie <xiaobo.xie@nxp.com>
> Subject: Re: [U-Boot] [PATCHv2 3/5] fsl PPA: add support PPA image loading
> from NAND and SD
> 
> Hi,
> 
> On 03/08/2017 03:24 PM, Zhiqiang Hou wrote:
> > From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> >
> > Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> > ---
> > V2:
> >  - added flush cache operation after nand read
> >
> >  arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 122
> > +++++++++++++++++++++++++++++++-
> >  1 file changed, 121 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
> > b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
> > index b68e87d..4df70aa 100644
> > --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
> > +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
> > @@ -4,6 +4,7 @@
> >   * SPDX-License-Identifier:	GPL-2.0+
> >   */
> >  #include <common.h>
> > +#include <malloc.h>
> >  #include <config.h>
> >  #include <errno.h>
> >  #include <asm/system.h>
> > @@ -21,9 +22,17 @@
> >  #include <fsl_validate.h>
> >  #endif
> >
> > +#ifdef CONFIG_SYS_LS_PPA_FW_IN_NAND
> > +#include <nand.h>
> > +#elif defined(CONFIG_SYS_LS_PPA_FW_IN_MMC)
> > +#include <mmc.h>
> > +#endif
> > +
> > +DECLARE_GLOBAL_DATA_PTR;
> > +
> >  int ppa_init(void)
> >  {
> > -	const void *ppa_fit_addr;
> > +	void *ppa_fit_addr;
> >  	u32 *boot_loc_ptr_l, *boot_loc_ptr_h;
> >  	int ret;
> >
> > @@ -34,10 +43,116 @@ int ppa_init(void)
> >
> >  #ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP
> >  	ppa_fit_addr = (void *)CONFIG_SYS_LS_PPA_FW_ADDR;
> > +	debug("%s: PPA image load from XIP\n", __func__); #else /*
> > +!CONFIG_SYS_LS_PPA_FW_IN_XIP */
> > +	size_t fw_length, fdt_header_len = sizeof(struct fdt_header);
> > +
> > +	/* Copy PPA image from MMC/SD/NAND to allocated memory */ #ifdef
> > +CONFIG_SYS_LS_PPA_FW_IN_MMC
> > +	struct mmc *mmc;
> > +	int dev = CONFIG_SYS_MMC_ENV_DEV;
> > +	struct fdt_header *fitp;
> > +	u32 cnt;
> > +	u32 blk = CONFIG_SYS_LS_PPA_FW_ADDR / 512;
> > +
> > +	debug("%s: PPA image load from eMMC/SD\n", __func__);
> > +
> > +	mmc_initialize(gd->bd);
> 
> It should be failed. need to check the return value.

Yes, will add the return value check next version.

> > +	mmc = find_mmc_device(dev);
> > +	if (!mmc) {
> > +		printf("PPA: MMC cannot find device for PPA firmware\n");
> > +		return -ENODEV;
> > +	}
> > +
> > +	mmc_init(mmc);
> 
> ditto.

Yes, will add.

> > +
> > +	fitp = malloc(roundup(fdt_header_len, 512));
> > +	if (!fitp) {
> > +		printf("PPA: malloc failed for FIT header(size 0x%zx)\n",
> > +		       roundup(fdt_header_len, 512));
> > +		return -ENOMEM;
> > +	}
> > +
> > +	cnt = DIV_ROUND_UP(fdt_header_len, 512);
> > +	debug("%s: MMC read PPA FIT header: dev # %u, block # %u,
> count %u\n",
> > +	      __func__, dev, blk, cnt);
> > +	ret = mmc->block_dev.block_read(&mmc->block_dev, blk, cnt, fitp);
> > +	if (ret != cnt) {
> > +		free(fitp);
> > +		printf("MMC/SD read of PPA FIT header at offset 0x%x failed\n",
> > +		       CONFIG_SYS_LS_PPA_FW_ADDR);
> > +		return -EIO;
> > +	}
> > +
> > +	/* flush cache after read */
> > +	flush_cache((ulong)fitp, cnt * 512);
> > +
> > +	fw_length = fdt_totalsize(fitp);
> > +	free(fitp);
> > +
> > +	fw_length = roundup(fw_length, 512);
> > +	ppa_fit_addr = malloc(fw_length);
> > +	if (!ppa_fit_addr) {
> > +		printf("PPA: malloc failed for PPA image(size 0x%zx)\n",
> > +		       fw_length);
> > +		return -ENOMEM;
> > +	}
> > +
> > +	cnt = DIV_ROUND_UP(fw_length, 512);
> > +	debug("%s: MMC read PPA FIT image: dev # %u, block # %u, count %u\n",
> > +	      __func__, dev, blk, cnt);
> > +	ret = mmc->block_dev.block_read(&mmc->block_dev,
> > +					blk, cnt, ppa_fit_addr);
> > +	if (ret != cnt) {
> > +		free(ppa_fit_addr);
> > +		printf("MMC/SD read of PPA FIT header at offset 0x%x failed\n",
> > +		       CONFIG_SYS_LS_PPA_FW_ADDR);
> > +		return -EIO;
> > +	}
> > +
> > +	/* flush cache after read */
> > +	flush_cache((ulong)ppa_fit_addr, cnt * 512);
> > +
> > +#elif defined(CONFIG_SYS_LS_PPA_FW_IN_NAND)
> > +	struct fdt_header fit;
> > +
> > +	debug("%s: PPA image load from NAND\n", __func__);
> > +
> > +	nand_init();
> > +	ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_FW_ADDR,
> > +		       &fdt_header_len, (u_char *)&fit);
> > +	if (ret == -EUCLEAN) {
> > +		printf("NAND read of PPA FIT header at offset 0x%x failed\n",
> > +		       CONFIG_SYS_LS_PPA_FW_ADDR);
> > +		return -EIO;
> > +	}
> > +
> > +	fw_length = fdt_totalsize(&fit);
> > +
> > +	ppa_fit_addr = malloc(fw_length);
> > +	if (!ppa_fit_addr) {
> > +		printf("PPA: malloc failed for PPA image(size 0x%zx)\n",
> > +		       fw_length);
> > +		return -ENOMEM;
> > +	}
> > +
> > +	ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_FW_ADDR,
> > +		       &fw_length, (u_char *)ppa_fit_addr);
> > +	if (ret == -EUCLEAN) {
> > +		free(ppa_fit_addr);
> > +		printf("NAND read of PPA firmware at offset 0x%x failed\n",
> > +		       CONFIG_SYS_LS_PPA_FW_ADDR);
> > +		return -EIO;
> > +	}
> > +
> > +	/* flush cache after read */
> > +	flush_cache((ulong)ppa_fit_addr, fw_length);
> >  #else
> >  #error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined"
> >  #endif
> >
> > +#endif
> > +
> >  #ifdef CONFIG_CHAIN_OF_TRUST
> >  	ppa_img_addr = (uintptr_t)ppa_fit_addr;
> >  	if (fsl_check_boot_mode_secure() != 0) { @@ -65,5 +180,10 @@ int
> > ppa_init(void)
> >  	      boot_loc_ptr_l, boot_loc_ptr_h);
> >  	ret = sec_firmware_init(ppa_fit_addr, boot_loc_ptr_l,
> > boot_loc_ptr_h);
> >
> > +#if defined(CONFIG_SYS_LS_PPA_FW_IN_MMC) || \
> > +	defined(CONFIG_SYS_LS_PPA_FW_IN_NAND)
> > +	free(ppa_fit_addr);
> > +#endif
> > +
> >  	return ret;
> >  }
> >

Thanks,
Zhiqiang

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-03-09 11:14 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-08  6:24 [U-Boot] [PATCHv2 1/5] mtd: nand: add initialization flag Zhiqiang Hou
2017-03-08  6:24 ` [U-Boot] [PATCHv2 2/5] mtd: nand: remove nand size print from nand_init function Zhiqiang Hou
2017-03-08  6:24 ` [U-Boot] [PATCHv2 3/5] fsl PPA: add support PPA image loading from NAND and SD Zhiqiang Hou
2017-03-08 11:06   ` Jaehoon Chung
2017-03-09 11:14     ` Z.Q. Hou
2017-03-08  6:24 ` [U-Boot] [PATCHv2 4/5] Kconfig: fsl-ppa: support load PPA from eMMC/SD and NAND Flash Zhiqiang Hou
2017-03-08  6:24 ` [U-Boot] [PATCHv2 5/5] fsl-layerscape/ls104xardb: enable PPA support for eMMC/SD and NAND boot Zhiqiang Hou

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.