diff options
author | Rouven Czerwinski <r.czerwinski@pengutronix.de> | 2019-08-06 07:10:56 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-08-07 09:42:09 +0200 |
commit | f5fb1262857619dd3c15dfa4266a4534dd85f736 (patch) | |
tree | 4c9e342b1a7c80ab9987ed801b3027e1adf7d987 /drivers/mci | |
parent | 390ee3ebcd25570ac44d4e4fcfc00e120422f057 (diff) | |
download | barebox-f5fb1262857619dd3c15dfa4266a4534dd85f736.tar.gz barebox-f5fb1262857619dd3c15dfa4266a4534dd85f736.tar.xz |
esdhc-pbl: add piggy load function
Add a function to load and copy the piggy data to the correct offset
expected by barebox in the RAM. This way the PBL can later verify the
piggydata before uncompressing and loading the main barebox.
Signed-off-by: Rouven Czerwinski <r.czerwinski@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/mci')
-rw-r--r-- | drivers/mci/imx-esdhc-pbl.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/drivers/mci/imx-esdhc-pbl.c b/drivers/mci/imx-esdhc-pbl.c index 49514fc538..fb27c84163 100644 --- a/drivers/mci/imx-esdhc-pbl.c +++ b/drivers/mci/imx-esdhc-pbl.c @@ -425,6 +425,52 @@ int imx8_esdhc_start_image(int instance) return esdhc_start_image(&esdhc, MX8MQ_DDR_CSD1_BASE_ADDR, MX8MQ_ATF_BL33_BASE_ADDR, SZ_32K); } + +int imx8_esdhc_load_piggy(int instance) +{ + void *buf = (void *)MX8MQ_ATF_BL33_BASE_ADDR; + struct imx_flash_header_v2 *hdr = NULL; + void *bb = 0; + struct esdhc esdhc; + int ret, len; + int offset = SZ_32K; + + + switch (instance) { + case 0: + esdhc.regs = IOMEM(MX8MQ_USDHC1_BASE_ADDR); + break; + case 1: + esdhc.regs = IOMEM(MX8MQ_USDHC2_BASE_ADDR); + break; + default: + return -EINVAL; + } + + esdhc.is_be = 0; + esdhc.is_mx6 = 1; + + ret = esdhc_search_header(&esdhc, &hdr, buf, &offset); + if (ret) + return ret; + + len = offset + hdr->boot_data.size + piggydata_size(); + len = ALIGN(len, SECTOR_SIZE); + + ret = esdhc_read_blocks(&esdhc, buf, len); + + /* + * Calculate location of the piggydata at the offset loaded into RAM + */ + buf = buf + offset + hdr->boot_data.size; + /* + * Barebox expects the piggydata right behind the PBL in the beginning + * of RAM. + */ + bb = (void *) MX8MQ_DDR_CSD1_BASE_ADDR + barebox_pbl_size; + memcpy(bb, buf, piggydata_size()); + return ret; +} #endif #ifdef CONFIG_ARCH_LS1046 |