|
@@ -1281,11 +1281,19 @@ static int cam_vfe_bus_start_wm(
|
|
(struct
|
|
(struct
|
|
cam_vfe_bus_ver2_reg_offset_ubwc_client *)
|
|
cam_vfe_bus_ver2_reg_offset_ubwc_client *)
|
|
rsrc_data->hw_regs->ubwc_regs;
|
|
rsrc_data->hw_regs->ubwc_regs;
|
|
|
|
+ if (!ubwc_regs) {
|
|
|
|
+ CAM_ERR(CAM_ISP, "ubwc_regs is NULL");
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
val = cam_io_r_mb(common_data->mem_base +
|
|
val = cam_io_r_mb(common_data->mem_base +
|
|
ubwc_regs->mode_cfg_0);
|
|
ubwc_regs->mode_cfg_0);
|
|
val |= 0x1;
|
|
val |= 0x1;
|
|
- if (disable_ubwc_comp)
|
|
|
|
- val &= ~CAM_IFE_UBWC_COMP_EN;
|
|
|
|
|
|
+ if (disable_ubwc_comp) {
|
|
|
|
+ val &= ~ubwc_regs->ubwc_comp_en_bit;
|
|
|
|
+ CAM_DBG(CAM_ISP,
|
|
|
|
+ "Force disable UBWC compression, ubwc_mode_cfg: 0x%x",
|
|
|
|
+ val);
|
|
|
|
+ }
|
|
cam_io_w_mb(val, common_data->mem_base +
|
|
cam_io_w_mb(val, common_data->mem_base +
|
|
ubwc_regs->mode_cfg_0);
|
|
ubwc_regs->mode_cfg_0);
|
|
} else if ((camera_hw_version == CAM_CPAS_TITAN_175_V100) ||
|
|
} else if ((camera_hw_version == CAM_CPAS_TITAN_175_V100) ||
|
|
@@ -1300,11 +1308,19 @@ static int cam_vfe_bus_start_wm(
|
|
(struct
|
|
(struct
|
|
cam_vfe_bus_ver2_reg_offset_ubwc_3_client *)
|
|
cam_vfe_bus_ver2_reg_offset_ubwc_3_client *)
|
|
rsrc_data->hw_regs->ubwc_regs;
|
|
rsrc_data->hw_regs->ubwc_regs;
|
|
|
|
+ if (!ubwc_regs) {
|
|
|
|
+ CAM_ERR(CAM_ISP, "ubwc_regs is NULL");
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
val = cam_io_r_mb(common_data->mem_base +
|
|
val = cam_io_r_mb(common_data->mem_base +
|
|
ubwc_regs->mode_cfg_0);
|
|
ubwc_regs->mode_cfg_0);
|
|
val |= 0x1;
|
|
val |= 0x1;
|
|
- if (disable_ubwc_comp)
|
|
|
|
- val &= ~CAM_IFE_UBWC_COMP_EN;
|
|
|
|
|
|
+ if (disable_ubwc_comp) {
|
|
|
|
+ val &= ~ubwc_regs->ubwc_comp_en_bit;
|
|
|
|
+ CAM_DBG(CAM_ISP,
|
|
|
|
+ "Force disable UBWC compression, ubwc_mode_cfg: 0x%x",
|
|
|
|
+ val);
|
|
|
|
+ }
|
|
cam_io_w_mb(val, common_data->mem_base +
|
|
cam_io_w_mb(val, common_data->mem_base +
|
|
ubwc_regs->mode_cfg_0);
|
|
ubwc_regs->mode_cfg_0);
|
|
} else {
|
|
} else {
|
|
@@ -2091,6 +2107,8 @@ static int cam_vfe_bus_acquire_vfe_out(void *bus_priv, void *acquire_args,
|
|
|
|
|
|
rsrc_data = rsrc_node->res_priv;
|
|
rsrc_data = rsrc_node->res_priv;
|
|
rsrc_data->common_data->event_cb = acq_args->event_cb;
|
|
rsrc_data->common_data->event_cb = acq_args->event_cb;
|
|
|
|
+ rsrc_data->common_data->disable_ubwc_comp =
|
|
|
|
+ out_acquire_args->disable_ubwc_comp;
|
|
rsrc_data->priv = acq_args->priv;
|
|
rsrc_data->priv = acq_args->priv;
|
|
|
|
|
|
secure_caps = cam_vfe_bus_can_be_secure(rsrc_data->out_type);
|
|
secure_caps = cam_vfe_bus_can_be_secure(rsrc_data->out_type);
|
|
@@ -2709,6 +2727,13 @@ static int cam_vfe_bus_update_ubwc_3_regs(
|
|
CAM_DBG(CAM_ISP, "WM %d meta stride 0x%x",
|
|
CAM_DBG(CAM_ISP, "WM %d meta stride 0x%x",
|
|
wm_data->index, reg_val_pair[*j-1]);
|
|
wm_data->index, reg_val_pair[*j-1]);
|
|
|
|
|
|
|
|
+ if (wm_data->common_data->disable_ubwc_comp) {
|
|
|
|
+ wm_data->ubwc_mode_cfg_0 &= ~ubwc_regs->ubwc_comp_en_bit;
|
|
|
|
+ CAM_DBG(CAM_ISP,
|
|
|
|
+ "Force disable UBWC compression on VFE:%d WM:%d",
|
|
|
|
+ wm_data->common_data->core_index, wm_data->index);
|
|
|
|
+ }
|
|
|
|
+
|
|
CAM_VFE_ADD_REG_VAL_PAIR(reg_val_pair, *j,
|
|
CAM_VFE_ADD_REG_VAL_PAIR(reg_val_pair, *j,
|
|
ubwc_regs->mode_cfg_0, wm_data->ubwc_mode_cfg_0);
|
|
ubwc_regs->mode_cfg_0, wm_data->ubwc_mode_cfg_0);
|
|
CAM_DBG(CAM_ISP, "WM %d ubwc_mode_cfg_0 0x%x",
|
|
CAM_DBG(CAM_ISP, "WM %d ubwc_mode_cfg_0 0x%x",
|
|
@@ -2788,6 +2813,12 @@ static int cam_vfe_bus_update_ubwc_legacy_regs(
|
|
CAM_DBG(CAM_ISP, "WM %d meta stride 0x%x",
|
|
CAM_DBG(CAM_ISP, "WM %d meta stride 0x%x",
|
|
wm_data->index, reg_val_pair[*j-1]);
|
|
wm_data->index, reg_val_pair[*j-1]);
|
|
|
|
|
|
|
|
+ if (wm_data->common_data->disable_ubwc_comp) {
|
|
|
|
+ wm_data->ubwc_mode_cfg_0 &= ~ubwc_regs->ubwc_comp_en_bit;
|
|
|
|
+ CAM_DBG(CAM_ISP,
|
|
|
|
+ "Force disable UBWC compression on VFE:%d WM:%d",
|
|
|
|
+ wm_data->common_data->core_index, wm_data->index);
|
|
|
|
+ }
|
|
CAM_VFE_ADD_REG_VAL_PAIR(reg_val_pair, *j,
|
|
CAM_VFE_ADD_REG_VAL_PAIR(reg_val_pair, *j,
|
|
ubwc_regs->mode_cfg_0, wm_data->ubwc_mode_cfg_0);
|
|
ubwc_regs->mode_cfg_0, wm_data->ubwc_mode_cfg_0);
|
|
CAM_DBG(CAM_ISP, "WM %d ubwc_mode_cfg_0 0x%x",
|
|
CAM_DBG(CAM_ISP, "WM %d ubwc_mode_cfg_0 0x%x",
|
|
@@ -3715,10 +3746,6 @@ static int cam_vfe_bus_process_cmd(
|
|
bus_priv = (struct cam_vfe_bus_ver2_priv *) priv;
|
|
bus_priv = (struct cam_vfe_bus_ver2_priv *) priv;
|
|
rc = cam_vfe_bus_get_res_for_mid(bus_priv, cmd_args, arg_size);
|
|
rc = cam_vfe_bus_get_res_for_mid(bus_priv, cmd_args, arg_size);
|
|
break;
|
|
break;
|
|
- case CAM_ISP_HW_CMD_DISABLE_UBWC_COMP:
|
|
|
|
- bus_priv = (struct cam_vfe_bus_ver2_priv *) priv;
|
|
|
|
- bus_priv->common_data.disable_ubwc_comp = true;
|
|
|
|
- break;
|
|
|
|
case CAM_ISP_HW_CMD_QUERY_BUS_CAP:
|
|
case CAM_ISP_HW_CMD_QUERY_BUS_CAP:
|
|
bus_priv = (struct cam_vfe_bus_ver2_priv *) priv;
|
|
bus_priv = (struct cam_vfe_bus_ver2_priv *) priv;
|
|
vfe_bus_cap = (struct cam_isp_hw_bus_cap *) cmd_args;
|
|
vfe_bus_cap = (struct cam_isp_hw_bus_cap *) cmd_args;
|