
On Tue, Jul 9, 2019 at 3:33 PM Joe Hershberger joe.hershberger@gmail.com wrote:
On Wed, May 15, 2019 at 4:10 AM Florinel Iordache florinel.iordache@nxp.com wrote:
Add support for DPSPARSER object (create/destroy, open/close, apply spb) required to configure Soft Parser by using MC. Also add uboot command to apply a Soft Parser Blob by using a command like: fsl_mc apply spb
<spb_load_addr>
Signed-off-by: Florinel Iordache florinel.iordache@nxp.com
drivers/net/fsl-mc/Kconfig | 12 ++ drivers/net/fsl-mc/Makefile | 4 +- drivers/net/fsl-mc/dpsparser.c | 138 ++++++++++++++++++++ drivers/net/fsl-mc/mc.c | 272 +++++++++++++++++++++++++++++++++++++--- include/fsl-mc/fsl_dpsparser.h | 208 ++++++++++++++++++++++++++++++ include/fsl-mc/fsl_mc_private.h | 17 ++- 6 files changed, 629 insertions(+), 22 deletions(-) create mode 100644 drivers/net/fsl-mc/dpsparser.c create mode 100644 include/fsl-mc/fsl_dpsparser.h
[ ... ]
+int mc_apply_spb(u64 mc_spb_addr) +{
int err = 0;
u16 error, err_arr_size;
u64 mc_spb_offset;
u32 spb_size;
struct sp_blob_header *sp_blob;
u64 mc_ram_addr = mc_get_dram_addr();
if (!is_dpsparser_supported())
return 0;
if (!mc_spb_addr) {
printf("fsl-mc: Invalid Blob address\n");
return -1;
}
+#ifdef CONFIG_MC_DRAM_SPB_OFFSET
mc_spb_offset = CONFIG_MC_DRAM_SPB_OFFSET;
+#else +#error "CONFIG_MC_DRAM_SPB_OFFSET not defined" +#endif
// Read blob header and get size of SPB blob
sp_blob = (struct sp_blob_header *)mc_spb_addr;
spb_size = le32_to_cpu(sp_blob->length);
if (spb_size > CONFIG_MC_SPB_MAX_SIZE) {
printf("\nfsl-mc: ERROR: Bad SPB image (too large: %d)\n",
spb_size);
return -EINVAL;
}
mc_copy_image("MC SP Blob", mc_spb_addr, spb_size,
mc_ram_addr + mc_spb_offset);
This function is only available #ifndef CONFIG_SYS_LS_MC_FW_IN_DDR
This is breaking the ls2080a_emu build.
Any update or should I drop this series from the release?
Thanks, -Joe
//Invoke MC command to apply SPB blob
printf("fsl-mc: Applying soft parser blob... ");
err = dpsparser_apply_spb(dflt_mc_io, MC_CMD_NO_FLAGS, dpsparser_handle,
mc_spb_offset, &error);
if (err)
return err;
if (error == 0) {
printf("SUCCESS\n");
} else {
printf("FAILED with error code = %d:\n", error);
err_arr_size = (u16)ARRAY_SIZE(mc_err_msg_apply_spb);
if (error > 0 && error < err_arr_size)
printf(mc_err_msg_apply_spb[error]);
else
printf(MC_ERROR_MSG_SPB_UNKNOWN);
}
return err;
+}
[ ... ]