media: atomisp: get rid of an iomem abstraction layer
[sfrench/cifs-2.6.git] / drivers / staging / media / atomisp / pci / atomisp_compat_css20.c
index 28f291982f41369d521084ab1d76067fed479f5c..c1e282a974d03fba568346677afd6c17a6b49cec 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Support for Clovertrail PNW Camera Imaging ISP subsystem.
  *
@@ -68,60 +69,66 @@ struct bayer_ds_factor {
 
 static void atomisp_css2_hw_store_8(hrt_address addr, uint8_t data)
 {
+       s8 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
        unsigned long flags;
 
        spin_lock_irqsave(&mmio_lock, flags);
-       _hrt_master_port_store_8(addr, data);
+       *io_virt_addr = data;
        spin_unlock_irqrestore(&mmio_lock, flags);
 }
 
 static void atomisp_css2_hw_store_16(hrt_address addr, uint16_t data)
 {
+       s16 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
        unsigned long flags;
 
        spin_lock_irqsave(&mmio_lock, flags);
-       _hrt_master_port_store_16(addr, data);
+       *io_virt_addr = data;
        spin_unlock_irqrestore(&mmio_lock, flags);
 }
 
 void atomisp_css2_hw_store_32(hrt_address addr, uint32_t data)
 {
+       s32 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
        unsigned long flags;
 
        spin_lock_irqsave(&mmio_lock, flags);
-       _hrt_master_port_store_32(addr, data);
+       *io_virt_addr = data;
        spin_unlock_irqrestore(&mmio_lock, flags);
 }
 
 static uint8_t atomisp_css2_hw_load_8(hrt_address addr)
 {
+       s8 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
        unsigned long flags;
        u8 ret;
 
        spin_lock_irqsave(&mmio_lock, flags);
-       ret = _hrt_master_port_load_8(addr);
+       ret = *io_virt_addr;
        spin_unlock_irqrestore(&mmio_lock, flags);
        return ret;
 }
 
 static uint16_t atomisp_css2_hw_load_16(hrt_address addr)
 {
+       s16 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
        unsigned long flags;
        u16 ret;
 
        spin_lock_irqsave(&mmio_lock, flags);
-       ret = _hrt_master_port_load_16(addr);
+       ret = *io_virt_addr;
        spin_unlock_irqrestore(&mmio_lock, flags);
        return ret;
 }
 
 static uint32_t atomisp_css2_hw_load_32(hrt_address addr)
 {
+       s32 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
        unsigned long flags;
        u32 ret;
 
        spin_lock_irqsave(&mmio_lock, flags);
-       ret = _hrt_master_port_load_32(addr);
+       ret = *io_virt_addr;
        spin_unlock_irqrestore(&mmio_lock, flags);
        return ret;
 }
@@ -129,27 +136,25 @@ static uint32_t atomisp_css2_hw_load_32(hrt_address addr)
 static void atomisp_css2_hw_store(hrt_address addr,
                                  const void *from, uint32_t n)
 {
+       s8 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
        unsigned long flags;
        unsigned int i;
-       unsigned int _to = (unsigned int)addr;
-       const char *_from = (const char *)from;
 
        spin_lock_irqsave(&mmio_lock, flags);
-       for (i = 0; i < n; i++, _to++, _from++)
-               _hrt_master_port_store_8(_to, *_from);
+       for (i = 0; i < n; i++, io_virt_addr++, from++)
+               *io_virt_addr = *(s8 *)from;
        spin_unlock_irqrestore(&mmio_lock, flags);
 }
 
 static void atomisp_css2_hw_load(hrt_address addr, void *to, uint32_t n)
 {
+       s8 __iomem *io_virt_addr = atomisp_io_base + (addr & 0x003FFFFF);
        unsigned long flags;
        unsigned int i;
-       char *_to = (char *)to;
-       unsigned int _from = (unsigned int)addr;
 
        spin_lock_irqsave(&mmio_lock, flags);
-       for (i = 0; i < n; i++, _to++, _from++)
-               *_to = _hrt_master_port_load_8(_from);
+       for (i = 0; i < n; i++, to++, io_virt_addr++)
+               *(s8 *)to = *io_virt_addr;
        spin_unlock_irqrestore(&mmio_lock, flags);
 }
 
@@ -611,7 +616,7 @@ static void __apply_additional_pipe_config(
                    default_capture_config.mode == IA_CSS_CAPTURE_MODE_RAW)
                        stream_env->pipe_configs[pipe_id].enable_dz = false;
 
-               if (atomisp_hw_is_isp2401) {
+               if (IS_ISP2401) {
                        /* the isp default to use ISP2.2 and the camera hal will
                        * control whether use isp2.7 */
                        if (asd->select_isp_version->val == ATOMISP_CSS_ISP_PIPE_VERSION_2_7)
@@ -689,22 +694,23 @@ static bool is_pipe_valid_to_current_run_mode(struct atomisp_sub_device *asd,
        case ATOMISP_RUN_MODE_STILL_CAPTURE:
                if (pipe_id == IA_CSS_PIPE_ID_CAPTURE)
                        return true;
-               else
-                       return false;
+
+               return false;
        case ATOMISP_RUN_MODE_PREVIEW:
                if (!asd->continuous_mode->val) {
                        if (pipe_id == IA_CSS_PIPE_ID_PREVIEW)
                                return true;
-                       else
-                               return false;
+
+                       return false;
                }
-       /* fall through to ATOMISP_RUN_MODE_CONTINUOUS_CAPTURE */
+       /* fall-through */
        case ATOMISP_RUN_MODE_CONTINUOUS_CAPTURE:
                if (pipe_id == IA_CSS_PIPE_ID_CAPTURE ||
                    pipe_id == IA_CSS_PIPE_ID_PREVIEW)
                        return true;
-               else
-                       return false;
+
+               return false;
+       /* fall-through */
        case ATOMISP_RUN_MODE_VIDEO:
                if (!asd->continuous_mode->val) {
                        if (pipe_id == IA_CSS_PIPE_ID_VIDEO ||
@@ -713,13 +719,13 @@ static bool is_pipe_valid_to_current_run_mode(struct atomisp_sub_device *asd,
                        else
                                return false;
                }
-       /* fall through to ATOMISP_RUN_MODE_SDV */
+       /* fall through  */
        case ATOMISP_RUN_MODE_SDV:
                if (pipe_id == IA_CSS_PIPE_ID_CAPTURE ||
                    pipe_id == IA_CSS_PIPE_ID_VIDEO)
                        return true;
-               else
-                       return false;
+
+               return false;
        }
 
        return false;
@@ -990,9 +996,9 @@ void atomisp_css_rx_clear_irq_info(enum mipi_port_id port,
 int atomisp_css_irq_enable(struct atomisp_device *isp,
                           enum ia_css_irq_info info, bool enable)
 {
-       dev_dbg(isp->dev, "%s: css irq info 0x%08x: %s.\n",
+       dev_dbg(isp->dev, "%s: css irq info 0x%08x: %s (%d).\n",
                __func__, info,
-               enable ? "enable" : "disable");
+               enable ? "enable" : "disable", enable);
        if (ia_css_irq_enable(info, enable)) {
                dev_warn(isp->dev, "%s:Invalid irq info: 0x%08x when %s.\n",
                         __func__, info,
@@ -2099,72 +2105,6 @@ int atomisp_css_input_configure_port(
        return 0;
 }
 
-int atomisp_css_frame_allocate(struct ia_css_frame **frame,
-                              unsigned int width, unsigned int height,
-                              enum ia_css_frame_format format,
-                              unsigned int padded_width,
-                              unsigned int raw_bit_depth)
-{
-       if (ia_css_frame_allocate(frame, width, height, format,
-                                 padded_width, raw_bit_depth) != 0)
-               return -ENOMEM;
-
-       return 0;
-}
-
-int atomisp_css_frame_allocate_from_info(struct ia_css_frame **frame,
-       const struct ia_css_frame_info *info)
-{
-       if (ia_css_frame_allocate_from_info(frame, info))
-               return -ENOMEM;
-
-       return 0;
-}
-
-void atomisp_css_frame_free(struct ia_css_frame *frame)
-{
-       ia_css_frame_free(frame);
-}
-
-int atomisp_css_frame_map(struct ia_css_frame **frame,
-                         const struct ia_css_frame_info *info,
-                         const void __user *data, uint16_t attribute,
-                         unsigned int pgnr)
-{
-       if (ia_css_frame_map(frame, info, data, attribute, pgnr)
-           != 0)
-               return -ENOMEM;
-
-       return 0;
-}
-
-int atomisp_css_set_black_frame(struct atomisp_sub_device *asd,
-                               const struct ia_css_frame *raw_black_frame)
-{
-       if (sh_css_set_black_frame(
-               asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].stream,
-               raw_black_frame) != 0)
-               return -ENOMEM;
-
-       return 0;
-}
-
-int atomisp_css_allocate_continuous_frames(bool init_time,
-       struct atomisp_sub_device *asd)
-{
-       if (ia_css_alloc_continuous_frame_remain(
-               asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].stream)
-           != 0)
-               return -EINVAL;
-       return 0;
-}
-
-void atomisp_css_update_continuous_frames(struct atomisp_sub_device *asd)
-{
-       ia_css_update_continuous_frames(
-           asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].stream);
-}
-
 int atomisp_css_stop(struct atomisp_sub_device *asd,
                     enum ia_css_pipe_id pipe_id, bool in_reset)
 {
@@ -2287,16 +2227,6 @@ int atomisp_css_continuous_set_num_raw_frames(
        return 0;
 }
 
-void atomisp_css_disable_vf_pp(struct atomisp_sub_device *asd,
-                              bool disable)
-{
-       int i;
-
-       for (i = 0; i < IA_CSS_PIPE_ID_NUM; i++)
-               asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL]
-               .pipe_extra_configs[i].disable_vf_pp = !!disable;
-}
-
 static enum ia_css_pipe_mode __pipe_id_to_pipe_mode(
     struct atomisp_sub_device *asd,
     enum ia_css_pipe_id pipe_id)
@@ -2824,16 +2754,18 @@ static unsigned int atomisp_get_pipe_index(struct atomisp_sub_device *asd,
                if (asd->run_mode->val == ATOMISP_RUN_MODE_VIDEO
                    || asd->vfpp->val == ATOMISP_VFPP_DISABLE_SCALER)
                        return IA_CSS_PIPE_ID_VIDEO;
-               else
-                       return IA_CSS_PIPE_ID_CAPTURE;
+
+               return IA_CSS_PIPE_ID_CAPTURE;
        case ATOMISP_SUBDEV_PAD_SOURCE_CAPTURE:
                if (asd->copy_mode)
                        return IA_CSS_PIPE_ID_COPY;
+
                return IA_CSS_PIPE_ID_CAPTURE;
        case ATOMISP_SUBDEV_PAD_SOURCE_VF:
-               if (!atomisp_is_mbuscode_raw(
-                       asd->fmt[asd->capture_pad].fmt.code))
+               if (!atomisp_is_mbuscode_raw(asd->fmt[asd->capture_pad].fmt.code)) {
                        return IA_CSS_PIPE_ID_CAPTURE;
+               }
+               /* fall through */
        case ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW:
                if (asd->yuvpp_mode)
                        return IA_CSS_PIPE_ID_YUVPP;
@@ -2841,8 +2773,8 @@ static unsigned int atomisp_get_pipe_index(struct atomisp_sub_device *asd,
                        return IA_CSS_PIPE_ID_COPY;
                if (asd->run_mode->val == ATOMISP_RUN_MODE_VIDEO)
                        return IA_CSS_PIPE_ID_VIDEO;
-               else
-                       return IA_CSS_PIPE_ID_PREVIEW;
+
+               return IA_CSS_PIPE_ID_PREVIEW;
        }
        dev_warn(isp->dev,
                 "invalid source pad:%d, return default preview pipe index.\n",
@@ -3298,199 +3230,6 @@ int atomisp_css_capture_enable_xnr(struct atomisp_sub_device *asd,
        return 0;
 }
 
-void atomisp_css_send_input_frame(struct atomisp_sub_device *asd,
-                                 unsigned short *data, unsigned int width,
-                                 unsigned int height)
-{
-       ia_css_stream_send_input_frame(
-           asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].stream,
-           data, width, height);
-}
-
-bool atomisp_css_isp_has_started(void)
-{
-       return ia_css_isp_has_started();
-}
-
-void atomisp_css_request_flash(struct atomisp_sub_device *asd)
-{
-       ia_css_stream_request_flash(
-           asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].stream);
-}
-
-void atomisp_css_set_wb_config(struct atomisp_sub_device *asd,
-                              struct ia_css_wb_config *wb_config)
-{
-       asd->params.config.wb_config = wb_config;
-}
-
-void atomisp_css_set_ob_config(struct atomisp_sub_device *asd,
-                              struct ia_css_ob_config *ob_config)
-{
-       asd->params.config.ob_config = ob_config;
-}
-
-void atomisp_css_set_dp_config(struct atomisp_sub_device *asd,
-                              struct ia_css_dp_config *dp_config)
-{
-       asd->params.config.dp_config = dp_config;
-}
-
-void atomisp_css_set_de_config(struct atomisp_sub_device *asd,
-                              struct ia_css_de_config *de_config)
-{
-       asd->params.config.de_config = de_config;
-}
-
-void atomisp_css_set_dz_config(struct atomisp_sub_device *asd,
-                              struct ia_css_dz_config *dz_config)
-{
-       asd->params.config.dz_config = dz_config;
-}
-
-void atomisp_css_set_default_de_config(struct atomisp_sub_device *asd)
-{
-       asd->params.config.de_config = NULL;
-}
-
-void atomisp_css_set_ce_config(struct atomisp_sub_device *asd,
-                              struct ia_css_ce_config *ce_config)
-{
-       asd->params.config.ce_config = ce_config;
-}
-
-void atomisp_css_set_nr_config(struct atomisp_sub_device *asd,
-                              struct ia_css_nr_config *nr_config)
-{
-       asd->params.config.nr_config = nr_config;
-}
-
-void atomisp_css_set_ee_config(struct atomisp_sub_device *asd,
-                              struct ia_css_ee_config *ee_config)
-{
-       asd->params.config.ee_config = ee_config;
-}
-
-void atomisp_css_set_tnr_config(struct atomisp_sub_device *asd,
-                               struct ia_css_tnr_config *tnr_config)
-{
-       asd->params.config.tnr_config = tnr_config;
-}
-
-void atomisp_css_set_cc_config(struct atomisp_sub_device *asd,
-                              struct ia_css_cc_config *cc_config)
-{
-       asd->params.config.cc_config = cc_config;
-}
-
-void atomisp_css_set_macc_table(struct atomisp_sub_device *asd,
-                               struct ia_css_macc_table *macc_table)
-{
-       asd->params.config.macc_table = macc_table;
-}
-
-void atomisp_css_set_macc_config(struct atomisp_sub_device *asd,
-                                struct ia_css_macc_config *macc_config)
-{
-       asd->params.config.macc_config = macc_config;
-}
-
-void atomisp_css_set_ecd_config(struct atomisp_sub_device *asd,
-                               struct ia_css_ecd_config *ecd_config)
-{
-       asd->params.config.ecd_config = ecd_config;
-}
-
-void atomisp_css_set_ynr_config(struct atomisp_sub_device *asd,
-                               struct ia_css_ynr_config *ynr_config)
-{
-       asd->params.config.ynr_config = ynr_config;
-}
-
-void atomisp_css_set_fc_config(struct atomisp_sub_device *asd,
-                              struct ia_css_fc_config *fc_config)
-{
-       asd->params.config.fc_config = fc_config;
-}
-
-void atomisp_css_set_ctc_config(struct atomisp_sub_device *asd,
-                               struct ia_css_ctc_config *ctc_config)
-{
-       asd->params.config.ctc_config = ctc_config;
-}
-
-void atomisp_css_set_cnr_config(struct atomisp_sub_device *asd,
-                               struct ia_css_cnr_config *cnr_config)
-{
-       asd->params.config.cnr_config = cnr_config;
-}
-
-void atomisp_css_set_aa_config(struct atomisp_sub_device *asd,
-                              struct ia_css_aa_config *aa_config)
-{
-       asd->params.config.aa_config = aa_config;
-}
-
-void atomisp_css_set_baa_config(struct atomisp_sub_device *asd,
-                               struct ia_css_aa_config *baa_config)
-{
-       asd->params.config.baa_config = baa_config;
-}
-
-void atomisp_css_set_anr_config(struct atomisp_sub_device *asd,
-                               struct ia_css_anr_config *anr_config)
-{
-       asd->params.config.anr_config = anr_config;
-}
-
-void atomisp_css_set_xnr_config(struct atomisp_sub_device *asd,
-                               struct ia_css_xnr_config *xnr_config)
-{
-       asd->params.config.xnr_config = xnr_config;
-}
-
-void atomisp_css_set_yuv2rgb_cc_config(struct atomisp_sub_device *asd,
-                                      struct ia_css_cc_config *yuv2rgb_cc_config)
-{
-       asd->params.config.yuv2rgb_cc_config = yuv2rgb_cc_config;
-}
-
-void atomisp_css_set_rgb2yuv_cc_config(struct atomisp_sub_device *asd,
-                                      struct ia_css_cc_config *rgb2yuv_cc_config)
-{
-       asd->params.config.rgb2yuv_cc_config = rgb2yuv_cc_config;
-}
-
-void atomisp_css_set_xnr_table(struct atomisp_sub_device *asd,
-                              struct ia_css_xnr_table *xnr_table)
-{
-       asd->params.config.xnr_table = xnr_table;
-}
-
-void atomisp_css_set_r_gamma_table(struct atomisp_sub_device *asd,
-                                  struct ia_css_rgb_gamma_table *r_gamma_table)
-{
-       asd->params.config.r_gamma_table = r_gamma_table;
-}
-
-void atomisp_css_set_g_gamma_table(struct atomisp_sub_device *asd,
-                                  struct ia_css_rgb_gamma_table *g_gamma_table)
-{
-       asd->params.config.g_gamma_table = g_gamma_table;
-}
-
-void atomisp_css_set_b_gamma_table(struct atomisp_sub_device *asd,
-                                  struct ia_css_rgb_gamma_table *b_gamma_table)
-{
-       asd->params.config.b_gamma_table = b_gamma_table;
-}
-
-void atomisp_css_set_gamma_table(struct atomisp_sub_device *asd,
-                                struct ia_css_gamma_table *gamma_table)
-{
-       asd->params.config.gamma_table = gamma_table;
-}
-
 void atomisp_css_set_ctc_table(struct atomisp_sub_device *asd,
                               struct ia_css_ctc_table *ctc_table)
 {
@@ -3530,18 +3269,6 @@ void atomisp_css_set_dvs_6axis(struct atomisp_sub_device *asd,
        asd->params.config.dvs_6axis_config = dvs_6axis;
 }
 
-void atomisp_css_set_gc_config(struct atomisp_sub_device *asd,
-                              struct ia_css_gc_config *gc_config)
-{
-       asd->params.config.gc_config = gc_config;
-}
-
-void atomisp_css_set_3a_config(struct atomisp_sub_device *asd,
-                              struct ia_css_3a_config *s3a_config)
-{
-       asd->params.config.s3a_config = s3a_config;
-}
-
 void atomisp_css_video_set_dis_vector(struct atomisp_sub_device *asd,
                                      struct atomisp_dis_vector *vector)
 {
@@ -3638,8 +3365,8 @@ int atomisp_css_set_dis_coefs(struct atomisp_sub_device *asd,
                return -EFAULT;
 
        asd->params.css_param.update_flag.dvs2_coefs =
-           (struct atomisp_dvs2_coefficients *)
-           asd->params.css_param.dvs2_coeff;
+               (struct atomisp_dis_coefficients *)
+               asd->params.css_param.dvs2_coeff;
        /* FIXME! */
        /*      asd->params.dis_proj_data_valid = false; */
        asd->params.css_update_params_needed = true;
@@ -4436,7 +4163,7 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
                        for (i = 0; i < isp->num_of_streams; i++)
                                atomisp_wdt_stop(&isp->asd[i], 0);
 
-                       if (!atomisp_hw_is_isp2401)
+                       if (!IS_ISP2401)
                                atomisp_wdt(&isp->asd[0].wdt);
                        else
                                queue_work(isp->wdt_work_queue, &isp->wdt_work);
@@ -4470,7 +4197,7 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
                        atomisp_buf_done(asd, 0, IA_CSS_BUFFER_TYPE_OUTPUT_FRAME,
                                         current_event.pipe, true, stream_id);
 
-                       if (!atomisp_hw_is_isp2401)
+                       if (!IS_ISP2401)
                                reset_wdt_timer[asd->index] = true; /* ISP running */
 
                        break;
@@ -4480,7 +4207,7 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
                        atomisp_buf_done(asd, 0, IA_CSS_BUFFER_TYPE_SEC_OUTPUT_FRAME,
                                         current_event.pipe, true, stream_id);
 
-                       if (!atomisp_hw_is_isp2401)
+                       if (!IS_ISP2401)
                                reset_wdt_timer[asd->index] = true; /* ISP running */
 
                        break;
@@ -4504,7 +4231,7 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
                                         IA_CSS_BUFFER_TYPE_VF_OUTPUT_FRAME,
                                         current_event.pipe, true, stream_id);
 
-                       if (!atomisp_hw_is_isp2401)
+                       if (!IS_ISP2401)
                                reset_wdt_timer[asd->index] = true; /* ISP running */
 
                        break;
@@ -4513,7 +4240,7 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
                        atomisp_buf_done(asd, 0,
                                         IA_CSS_BUFFER_TYPE_SEC_VF_OUTPUT_FRAME,
                                         current_event.pipe, true, stream_id);
-                       if (!atomisp_hw_is_isp2401)
+                       if (!IS_ISP2401)
                                reset_wdt_timer[asd->index] = true; /* ISP running */
 
                        break;
@@ -4539,7 +4266,7 @@ int atomisp_css_isr_thread(struct atomisp_device *isp,
                }
        }
 
-       if (atomisp_hw_is_isp2401)
+       if (IS_ISP2401)
                return 0;
 
        /* ISP2400: If there are no buffers queued then delete wdt timer. */
@@ -4569,8 +4296,13 @@ bool atomisp_css_valid_sof(struct atomisp_device *isp)
                struct atomisp_sub_device *asd = &isp->asd[i];
                /* Loop for each css vc stream */
                for (j = 0; j < ATOMISP_INPUT_STREAM_NUM; j++) {
-                       if (asd->stream_env[j].stream &&
-                           asd->stream_env[j].stream_config.mode ==
+                       if (!asd->stream_env[j].stream)
+                               continue;
+
+                       dev_dbg(isp->dev,
+                               "stream #%d: mode: %d\n", j,
+                               asd->stream_env[j].stream_config.mode);
+                       if (asd->stream_env[j].stream_config.mode ==
                            IA_CSS_INPUT_MODE_BUFFERED_SENSOR)
                                return false;
                }
@@ -4591,6 +4323,20 @@ int atomisp_css_dump_sp_raw_copy_linecount(bool reduced)
        return 0;
 }
 
+static const char * const 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 * const fw_acc_type_name[] = {
+       [IA_CSS_ACC_NONE] =             "Normal",
+       [IA_CSS_ACC_OUTPUT] =           "Accel stage on output",
+       [IA_CSS_ACC_VIEWFINDER] =       "Accel stage on viewfinder",
+       [IA_CSS_ACC_STANDALONE] =       "Stand-alone acceleration",
+};
+
 int atomisp_css_dump_blob_infor(void)
 {
        struct ia_css_blob_descr *bd = sh_css_blob_info;
@@ -4601,9 +4347,28 @@ int atomisp_css_dump_blob_infor(void)
        if (!bd)
                return -EPERM;
 
-       for (i = 1; i < sh_css_num_binaries; i++)
-               dev_dbg(atomisp_dev, "Num%d binary id is %d, name is %s\n", i,
-                       bd[i - 1].header.info.isp.sp.id, bd[i - 1].name);
+       /*
+        * The sh_css_load_firmware function discard the initial
+        * "SPS" binaries
+        */
+       for (i = 0; i < sh_css_num_binaries - NUM_OF_SPS; i++) {
+               switch (bd[i].header.type) {
+               case ia_css_isp_firmware:
+                       dev_dbg(atomisp_dev,
+                               "Num%2d type %s (%s), binary id is %2d, name is %s\n",
+                               i + NUM_OF_SPS,
+                               fw_type_name[bd[i].header.type],
+                               fw_acc_type_name[bd[i].header.info.isp.type],
+                               bd[i].header.info.isp.sp.id,
+                               bd[i].name);
+                       break;
+               default:
+                       dev_dbg(atomisp_dev,
+                               "Num%2d type %s, name is %s\n",
+                               i + NUM_OF_SPS, fw_type_name[bd[i].header.type],
+                               bd[i].name);
+               }
+       }
 
        return 0;
 }