Re: [U-Boot] [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD
> -Original Message- > From: York Sun [mailto:york@nxp.com] > Sent: Tuesday, April 11, 2017 9:09 PM > To: Sumit Garg; u-boot@lists.denx.de > Cc: Ruchika Gupta ; Prabhakar Kushwaha > ; Vini Pillai ; Udit > Agarwal > Subject: Re: [PATCH 1/3] fsl: PPA: add support PPA image validation from > NAND and SD > > On 04/11/2017 04:59 AM, Sumit Garg wrote: > >> -Original Message- > >> From: York Sun [mailto:york@nxp.com] > >> Sent: Tuesday, April 11, 2017 11:44 AM > >> To: Sumit Garg ; u-boot@lists.denx.de > >> Cc: Ruchika Gupta ; Prabhakar Kushwaha > >> ; Vini Pillai ; > >> Udit Agarwal > >> Subject: Re: [PATCH 1/3] fsl: PPA: add support PPA image validation > >> from NAND and SD > >> > >> On 04/10/2017 10:54 PM, Sumit Garg wrote: > -Original Message- > From: York Sun [mailto:york@nxp.com] > Sent: Monday, April 10, 2017 10:39 PM > To: Sumit Garg ; u-boot@lists.denx.de > Cc: Ruchika Gupta ; Prabhakar Kushwaha > ; Vini Pillai ; > Udit Agarwal > Subject: Re: [PATCH 1/3] fsl: PPA: add support PPA image validation > from NAND and SD > > On 04/07/2017 04:41 AM, Sumit Garg wrote: > > Signed-off-by: Sumit Garg > > Signed-off-by: Udit Agarwal > > Tested-by: Vinitha Pillai > > --- > > arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 67 > > - > > 1 file changed, 66 insertions(+), 1 deletion(-) > > > > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > > b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > > index 7f87bb8..d8f1d36 100644 > > --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > > +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > > @@ -39,6 +39,10 @@ int ppa_init(void) #ifdef > CONFIG_CHAIN_OF_TRUST > > uintptr_t ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR; > > For MMC and NAND, this CONFIG_SYS_LS_PPA_ESBC_ADDR is actually > not > used. > Shall we move the assignment down to XIP section? The Kconfig > should also be updated. > > York > >>> > >>> As per PPA verification patch for eMMC/SD and NAND: > >>> > >>> --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig > >>> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig > >>> @@ -179,12 +179,22 @@ config SYS_LS_PPA_ESBC_ADDR > >>> default 0x4074 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1046A > >>> default 0x4048 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1012A > >>> default 0x580c4 if SYS_LS_PPA_FW_IN_XIP && FSL_LSCH3 > >>> + default 0x70 if SYS_LS_PPA_FW_IN_MMC > >>> + default 0x70 if SYS_LS_PPA_FW_IN_NAND > >>> help > >>> If the PPA header firmware locate at XIP flash, such as NOR or > >>> QSPI flash, this address is a directly memory-mapped. > >>> If it is in a serial accessed flash, such as NAND and SD > >>> card, it is a byte offset. > >>> > >>> CONFIG_SYS_LS_PPA_ESBC_ADDR is used to provide offset on eMMC/SD > >> and NAND. > >>> > >> > >> That's exactly what I was referring to. You are _NOT_ using > >> CONFIG_SYS_LS_PPA_ESBC_ADDR value for eMMC/SD or NAND. Instead, > you > >> use malloc to get a new memory for the header, which I agree it is right to > do. > >> So the macro CONFIG_SYS_LS_PPA_ESBC_ADDR is not used for either MMC > >> or NAND. > >> > >> York > > > > Actually I am using CONFIG_SYS_LS_PPA_ESBC_ADDR in case of eMMC/SD or > NAND as follows: > > > > For eMMC/SD: > > + blk = CONFIG_SYS_LS_PPA_ESBC_ADDR >> 9; > > + cnt = DIV_ROUND_UP(CONFIG_LS_PPA_ESBC_HDR_SIZE, 512); > > + ret = mmc->block_dev.block_read(>block_dev, blk, cnt, > ppa_hdr_ddr); > > + if (ret != cnt) { > > + free(ppa_hdr_ddr); > > + printf("MMC/SD read of PPA header failed\n"); > > + return -EIO; > > + } > > > > For NAND: > > + ret = nand_read(nand_info[0], > (loff_t)CONFIG_SYS_LS_PPA_ESBC_ADDR, > > + _length, (u_char *)ppa_hdr_ddr); > > + if (ret == -EUCLEAN) { > > + free(ppa_hdr_ddr); > > + printf("NAND read of PPA firmware at offset 0x%x failed\n", > > + CONFIG_SYS_LS_PPA_FW_ADDR); > > + return -EIO; > > + } > > > > So you are using this macro, but not using it directly as the way for XIP. It > is > confusing to see the assignment > > ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR; > > I was suggesting to move this assignment down to the XIP section. > > York Yes you are correct, I will move this assignment to XIP section in next version of this patch-set. Sumit ___ U-Boot mailing list
Re: [U-Boot] [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD
On 04/11/2017 04:59 AM, Sumit Garg wrote: -Original Message- From: York Sun [mailto:york@nxp.com] Sent: Tuesday, April 11, 2017 11:44 AM To: Sumit Garg; u-boot@lists.denx.de Cc: Ruchika Gupta ; Prabhakar Kushwaha ; Vini Pillai ; Udit Agarwal Subject: Re: [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD On 04/10/2017 10:54 PM, Sumit Garg wrote: -Original Message- From: York Sun [mailto:york@nxp.com] Sent: Monday, April 10, 2017 10:39 PM To: Sumit Garg ; u-boot@lists.denx.de Cc: Ruchika Gupta ; Prabhakar Kushwaha ; Vini Pillai ; Udit Agarwal Subject: Re: [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD On 04/07/2017 04:41 AM, Sumit Garg wrote: Signed-off-by: Sumit Garg Signed-off-by: Udit Agarwal Tested-by: Vinitha Pillai --- arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 67 - 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c index 7f87bb8..d8f1d36 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c @@ -39,6 +39,10 @@ int ppa_init(void) #ifdef CONFIG_CHAIN_OF_TRUST uintptr_t ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR; For MMC and NAND, this CONFIG_SYS_LS_PPA_ESBC_ADDR is actually not used. Shall we move the assignment down to XIP section? The Kconfig should also be updated. York As per PPA verification patch for eMMC/SD and NAND: --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig @@ -179,12 +179,22 @@ config SYS_LS_PPA_ESBC_ADDR default 0x4074 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1046A default 0x4048 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1012A default 0x580c4 if SYS_LS_PPA_FW_IN_XIP && FSL_LSCH3 + default 0x70 if SYS_LS_PPA_FW_IN_MMC + default 0x70 if SYS_LS_PPA_FW_IN_NAND help If the PPA header firmware locate at XIP flash, such as NOR or QSPI flash, this address is a directly memory-mapped. If it is in a serial accessed flash, such as NAND and SD card, it is a byte offset. CONFIG_SYS_LS_PPA_ESBC_ADDR is used to provide offset on eMMC/SD and NAND. That's exactly what I was referring to. You are _NOT_ using CONFIG_SYS_LS_PPA_ESBC_ADDR value for eMMC/SD or NAND. Instead, you use malloc to get a new memory for the header, which I agree it is right to do. So the macro CONFIG_SYS_LS_PPA_ESBC_ADDR is not used for either MMC or NAND. York Actually I am using CONFIG_SYS_LS_PPA_ESBC_ADDR in case of eMMC/SD or NAND as follows: For eMMC/SD: + blk = CONFIG_SYS_LS_PPA_ESBC_ADDR >> 9; + cnt = DIV_ROUND_UP(CONFIG_LS_PPA_ESBC_HDR_SIZE, 512); + ret = mmc->block_dev.block_read(>block_dev, blk, cnt, ppa_hdr_ddr); + if (ret != cnt) { + free(ppa_hdr_ddr); + printf("MMC/SD read of PPA header failed\n"); + return -EIO; + } For NAND: + ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_ESBC_ADDR, + _length, (u_char *)ppa_hdr_ddr); + if (ret == -EUCLEAN) { + free(ppa_hdr_ddr); + printf("NAND read of PPA firmware at offset 0x%x failed\n", + CONFIG_SYS_LS_PPA_FW_ADDR); + return -EIO; + } So you are using this macro, but not using it directly as the way for XIP. It is confusing to see the assignment ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR; I was suggesting to move this assignment down to the XIP section. York ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD
> -Original Message- > From: York Sun [mailto:york@nxp.com] > Sent: Tuesday, April 11, 2017 11:44 AM > To: Sumit Garg; u-boot@lists.denx.de > Cc: Ruchika Gupta ; Prabhakar Kushwaha > ; Vini Pillai ; Udit > Agarwal > Subject: Re: [PATCH 1/3] fsl: PPA: add support PPA image validation from > NAND and SD > > On 04/10/2017 10:54 PM, Sumit Garg wrote: > >> -Original Message- > >> From: York Sun [mailto:york@nxp.com] > >> Sent: Monday, April 10, 2017 10:39 PM > >> To: Sumit Garg ; u-boot@lists.denx.de > >> Cc: Ruchika Gupta ; Prabhakar Kushwaha > >> ; Vini Pillai ; > >> Udit Agarwal > >> Subject: Re: [PATCH 1/3] fsl: PPA: add support PPA image validation > >> from NAND and SD > >> > >> On 04/07/2017 04:41 AM, Sumit Garg wrote: > >>> Signed-off-by: Sumit Garg > >>> Signed-off-by: Udit Agarwal > >>> Tested-by: Vinitha Pillai > >>> --- > >>> arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 67 > >>> - > >>> 1 file changed, 66 insertions(+), 1 deletion(-) > >>> > >>> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > >>> b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > >>> index 7f87bb8..d8f1d36 100644 > >>> --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > >>> +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > >>> @@ -39,6 +39,10 @@ int ppa_init(void) #ifdef CONFIG_CHAIN_OF_TRUST > >>> uintptr_t ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR; > >> > >> For MMC and NAND, this CONFIG_SYS_LS_PPA_ESBC_ADDR is actually not > >> used. > >> Shall we move the assignment down to XIP section? The Kconfig should > >> also be updated. > >> > >> York > > > > As per PPA verification patch for eMMC/SD and NAND: > > > > --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig > > +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig > > @@ -179,12 +179,22 @@ config SYS_LS_PPA_ESBC_ADDR > > default 0x4074 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1046A > > default 0x4048 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1012A > > default 0x580c4 if SYS_LS_PPA_FW_IN_XIP && FSL_LSCH3 > > + default 0x70 if SYS_LS_PPA_FW_IN_MMC > > + default 0x70 if SYS_LS_PPA_FW_IN_NAND > > help > > If the PPA header firmware locate at XIP flash, such as NOR or > > QSPI flash, this address is a directly memory-mapped. > > If it is in a serial accessed flash, such as NAND and SD > > card, it is a byte offset. > > > > CONFIG_SYS_LS_PPA_ESBC_ADDR is used to provide offset on eMMC/SD > and NAND. > > > > That's exactly what I was referring to. You are _NOT_ using > CONFIG_SYS_LS_PPA_ESBC_ADDR value for eMMC/SD or NAND. Instead, you > use malloc to get a new memory for the header, which I agree it is right to > do. > So the macro CONFIG_SYS_LS_PPA_ESBC_ADDR is not used for either MMC or > NAND. > > York Actually I am using CONFIG_SYS_LS_PPA_ESBC_ADDR in case of eMMC/SD or NAND as follows: For eMMC/SD: + blk = CONFIG_SYS_LS_PPA_ESBC_ADDR >> 9; + cnt = DIV_ROUND_UP(CONFIG_LS_PPA_ESBC_HDR_SIZE, 512); + ret = mmc->block_dev.block_read(>block_dev, blk, cnt, ppa_hdr_ddr); + if (ret != cnt) { + free(ppa_hdr_ddr); + printf("MMC/SD read of PPA header failed\n"); + return -EIO; + } For NAND: + ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_ESBC_ADDR, + _length, (u_char *)ppa_hdr_ddr); + if (ret == -EUCLEAN) { + free(ppa_hdr_ddr); + printf("NAND read of PPA firmware at offset 0x%x failed\n", + CONFIG_SYS_LS_PPA_FW_ADDR); + return -EIO; + } Sumit ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD
On 04/10/2017 10:54 PM, Sumit Garg wrote: -Original Message- From: York Sun [mailto:york@nxp.com] Sent: Monday, April 10, 2017 10:39 PM To: Sumit Garg; u-boot@lists.denx.de Cc: Ruchika Gupta ; Prabhakar Kushwaha ; Vini Pillai ; Udit Agarwal Subject: Re: [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD On 04/07/2017 04:41 AM, Sumit Garg wrote: Signed-off-by: Sumit Garg Signed-off-by: Udit Agarwal Tested-by: Vinitha Pillai --- arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 67 - 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c index 7f87bb8..d8f1d36 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c @@ -39,6 +39,10 @@ int ppa_init(void) #ifdef CONFIG_CHAIN_OF_TRUST uintptr_t ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR; For MMC and NAND, this CONFIG_SYS_LS_PPA_ESBC_ADDR is actually not used. Shall we move the assignment down to XIP section? The Kconfig should also be updated. York As per PPA verification patch for eMMC/SD and NAND: --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig @@ -179,12 +179,22 @@ config SYS_LS_PPA_ESBC_ADDR default 0x4074 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1046A default 0x4048 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1012A default 0x580c4 if SYS_LS_PPA_FW_IN_XIP && FSL_LSCH3 + default 0x70 if SYS_LS_PPA_FW_IN_MMC + default 0x70 if SYS_LS_PPA_FW_IN_NAND help If the PPA header firmware locate at XIP flash, such as NOR or QSPI flash, this address is a directly memory-mapped. If it is in a serial accessed flash, such as NAND and SD card, it is a byte offset. CONFIG_SYS_LS_PPA_ESBC_ADDR is used to provide offset on eMMC/SD and NAND. That's exactly what I was referring to. You are _NOT_ using CONFIG_SYS_LS_PPA_ESBC_ADDR value for eMMC/SD or NAND. Instead, you use malloc to get a new memory for the header, which I agree it is right to do. So the macro CONFIG_SYS_LS_PPA_ESBC_ADDR is not used for either MMC or NAND. York ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD
> -Original Message- > From: York Sun [mailto:york@nxp.com] > Sent: Monday, April 10, 2017 10:39 PM > To: Sumit Garg; u-boot@lists.denx.de > Cc: Ruchika Gupta ; Prabhakar Kushwaha > ; Vini Pillai ; Udit > Agarwal > Subject: Re: [PATCH 1/3] fsl: PPA: add support PPA image validation from > NAND and SD > > On 04/07/2017 04:41 AM, Sumit Garg wrote: > > Signed-off-by: Sumit Garg > > Signed-off-by: Udit Agarwal > > Tested-by: Vinitha Pillai > > --- > > arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 67 > > - > > 1 file changed, 66 insertions(+), 1 deletion(-) > > > > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > > b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > > index 7f87bb8..d8f1d36 100644 > > --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > > +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c > > @@ -39,6 +39,10 @@ int ppa_init(void) > > #ifdef CONFIG_CHAIN_OF_TRUST > > uintptr_t ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR; > > For MMC and NAND, this CONFIG_SYS_LS_PPA_ESBC_ADDR is actually not > used. > Shall we move the assignment down to XIP section? The Kconfig should also be > updated. > > York As per PPA verification patch for eMMC/SD and NAND: --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig @@ -179,12 +179,22 @@ config SYS_LS_PPA_ESBC_ADDR default 0x4074 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1046A default 0x4048 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1012A default 0x580c4 if SYS_LS_PPA_FW_IN_XIP && FSL_LSCH3 + default 0x70 if SYS_LS_PPA_FW_IN_MMC + default 0x70 if SYS_LS_PPA_FW_IN_NAND help If the PPA header firmware locate at XIP flash, such as NOR or QSPI flash, this address is a directly memory-mapped. If it is in a serial accessed flash, such as NAND and SD card, it is a byte offset. CONFIG_SYS_LS_PPA_ESBC_ADDR is used to provide offset on eMMC/SD and NAND. Sumit ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD
On 04/07/2017 04:41 AM, Sumit Garg wrote: Signed-off-by: Sumit GargSigned-off-by: Udit Agarwal Tested-by: Vinitha Pillai --- arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 67 - 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c index 7f87bb8..d8f1d36 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c @@ -39,6 +39,10 @@ int ppa_init(void) #ifdef CONFIG_CHAIN_OF_TRUST uintptr_t ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR; For MMC and NAND, this CONFIG_SYS_LS_PPA_ESBC_ADDR is actually not used. Shall we move the assignment down to XIP section? The Kconfig should also be updated. York ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
[U-Boot] [PATCH 1/3] fsl: PPA: add support PPA image validation from NAND and SD
Signed-off-by: Sumit GargSigned-off-by: Udit Agarwal Tested-by: Vinitha Pillai --- arch/arm/cpu/armv8/fsl-layerscape/ppa.c | 67 - 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c index 7f87bb8..d8f1d36 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/ppa.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/ppa.c @@ -39,6 +39,10 @@ int ppa_init(void) #ifdef CONFIG_CHAIN_OF_TRUST uintptr_t ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR; uintptr_t ppa_img_addr = 0; +#if defined(CONFIG_SYS_LS_PPA_FW_IN_MMC) || \ + defined(CONFIG_SYS_LS_PPA_FW_IN_NAND) + void *ppa_hdr_ddr; +#endif #endif #ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP @@ -53,7 +57,7 @@ int ppa_init(void) int dev = CONFIG_SYS_MMC_ENV_DEV; struct fdt_header *fitp; u32 cnt; - u32 blk = CONFIG_SYS_LS_PPA_FW_ADDR / 512; + u32 blk; debug("%s: PPA image load from eMMC/SD\n", __func__); @@ -81,6 +85,7 @@ int ppa_init(void) return -ENOMEM; } + blk = CONFIG_SYS_LS_PPA_FW_ADDR / 512; 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); @@ -102,6 +107,29 @@ int ppa_init(void) return ret; } +#ifdef CONFIG_CHAIN_OF_TRUST + ppa_hdr_ddr = malloc(CONFIG_LS_PPA_ESBC_HDR_SIZE); + if (!ppa_hdr_ddr) { + printf("PPA: malloc failed for PPA header\n"); + return -ENOMEM; + } + + blk = CONFIG_SYS_LS_PPA_ESBC_ADDR >> 9; + cnt = DIV_ROUND_UP(CONFIG_LS_PPA_ESBC_HDR_SIZE, 512); + ret = mmc->block_dev.block_read(>block_dev, blk, cnt, ppa_hdr_ddr); + if (ret != cnt) { + free(ppa_hdr_ddr); + printf("MMC/SD read of PPA header failed\n"); + return -EIO; + } + debug("Read PPA header to 0x%p\n", ppa_hdr_ddr); + + /* flush cache after read */ + flush_cache((ulong)ppa_hdr_ddr, cnt * 512); + + ppa_esbc_hdr = (uintptr_t)ppa_hdr_ddr; +#endif + fw_length = fdt_totalsize(fitp); free(fitp); @@ -113,6 +141,7 @@ int ppa_init(void) return -ENOMEM; } + blk = CONFIG_SYS_LS_PPA_FW_ADDR / 512; 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); @@ -148,6 +177,31 @@ int ppa_init(void) return ret; } +#ifdef CONFIG_CHAIN_OF_TRUST + ppa_hdr_ddr = malloc(CONFIG_LS_PPA_ESBC_HDR_SIZE); + if (!ppa_hdr_ddr) { + printf("PPA: malloc failed for PPA header\n"); + return -ENOMEM; + } + + fw_length = CONFIG_LS_PPA_ESBC_HDR_SIZE; + + ret = nand_read(nand_info[0], (loff_t)CONFIG_SYS_LS_PPA_ESBC_ADDR, + _length, (u_char *)ppa_hdr_ddr); + if (ret == -EUCLEAN) { + free(ppa_hdr_ddr); + printf("NAND read of PPA firmware at offset 0x%x failed\n", + CONFIG_SYS_LS_PPA_FW_ADDR); + return -EIO; + } + debug("Read PPA header to 0x%p\n", ppa_hdr_ddr); + + /* flush cache after read */ + flush_cache((ulong)ppa_hdr_ddr, fw_length); + + ppa_esbc_hdr = (uintptr_t)ppa_hdr_ddr; +#endif + fw_length = fdt_totalsize(); ppa_fit_addr = malloc(fw_length); @@ -177,6 +231,13 @@ int ppa_init(void) #ifdef CONFIG_CHAIN_OF_TRUST ppa_img_addr = (uintptr_t)ppa_fit_addr; if (fsl_check_boot_mode_secure() != 0) { + /* +* In case of failure in validation, fsl_secboot_validate +* would not return back in case of Production environment +* with ITS=1. In Development environment (ITS=0 and +* SB_EN=1), the function may return back in case of +* non-fatal failures. +*/ ret = fsl_secboot_validate(ppa_esbc_hdr, PPA_KEY_HASH, _img_addr); @@ -185,6 +246,10 @@ int ppa_init(void) else printf("PPA validation Successful\n"); } +#if defined(CONFIG_SYS_LS_PPA_FW_IN_MMC) || \ + defined(CONFIG_SYS_LS_PPA_FW_IN_NAND) + free(ppa_hdr_ddr); +#endif #endif #ifdef CONFIG_FSL_LSCH3 -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot