lkml.org 
[lkml]   [2020]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 36/41] media: atomisp: print firmware data during load
    Date
    While there's a way to list the firmware binaries in runtime,
    it is worth to also print it during firmware load.

    One advantage is that this code also introduces additional
    checks with regards to invalid firmware types, which can be
    useful to identify problems.

    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    ---
    .../media/atomisp/pci/sh_css_firmware.c | 48 ++++++++++++++++++-
    1 file changed, 47 insertions(+), 1 deletion(-)

    diff --git a/drivers/staging/media/atomisp/pci/sh_css_firmware.c b/drivers/staging/media/atomisp/pci/sh_css_firmware.c
    index 63415356c36d..7cd27707a35f 100644
    --- a/drivers/staging/media/atomisp/pci/sh_css_firmware.c
    +++ b/drivers/staging/media/atomisp/pci/sh_css_firmware.c
    @@ -206,6 +206,20 @@ sh_css_check_firmware_version(struct device *dev, const char *fw_data)
    return 0;
    }

    +static const char *fw_type_name[] = {
    + [ia_css_sp_firmware] = "SP",
    + [ia_css_isp_firmware] = "ISP",
    + [ia_css_bootloader_firmware] = "BootLoader",
    + [ia_css_acc_firmware] = "accel",
    +};
    +
    +static const char *fw_acc_type_name[] = {
    + [IA_CSS_ACC_NONE] = "Normal",
    + [IA_CSS_ACC_OUTPUT] = "Accel for output",
    + [IA_CSS_ACC_VIEWFINDER] = "Accel for viewfinder",
    + [IA_CSS_ACC_STANDALONE] = "Stand-alone accel",
    +};
    +
    int
    sh_css_load_firmware(struct device *dev, const char *fw_data,
    unsigned int fw_size) {
    @@ -276,13 +290,45 @@ sh_css_load_firmware(struct device *dev, const char *fw_data,
    if (bi->blob.offset + bi->blob.size > fw_size)
    return -EINVAL;

    + switch (bd.header.type) {
    + case ia_css_isp_firmware:
    + if (bd.header.info.isp.type > IA_CSS_ACC_STANDALONE) {
    + dev_err(dev, "binary #%2d: invalid SP type\n",
    + i);
    + return -EINVAL;
    + }
    +
    + dev_dbg(dev,
    + "binary #%-2d type %s (%s), binary id is %2d: %s\n",
    + i,
    + fw_type_name[bd.header.type],
    + fw_acc_type_name[bd.header.info.isp.type],
    + bd.header.info.isp.sp.id,
    + bd.name);
    + break;
    + case ia_css_sp_firmware:
    + case ia_css_bootloader_firmware:
    + case ia_css_acc_firmware:
    + dev_dbg(dev,
    + "binary #%-2d type %s: %s\n",
    + i, fw_type_name[bd.header.type],
    + bd.name);
    + default:
    + if (bd.header.info.isp.type > IA_CSS_ACC_STANDALONE) {
    + dev_err(dev,
    + "binary #%2d: invalid firmware type\n",
    + i);
    + return -EINVAL;
    + }
    + break;
    + }
    +
    if (bi->type == ia_css_sp_firmware) {
    if (i != SP_FIRMWARE)
    return -EINVAL;
    err = setup_binary(bi, fw_data, &sh_css_sp_fw, i);
    if (err)
    return err;
    - dev_dbg(dev, "firmware #%d (SP), name %s\n", i, bd.name);

    } else {
    /* All subsequent binaries (including bootloaders) (i>NUM_OF_SPS) are ISP firmware */
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-05-30 08:59    [W:3.206 / U:0.248 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site