ソースを参照

msm: camera: isp: Fix crash if PPI hw is not present

Fix crash during CSID init/deinit sequence due to accessing
invalid ppi hw interface pointer incase if PPI hw is not
present in device.

CRs-Fixed: 3478317
Change-Id: I4a97105800d07407ecddd6611c10f4e481c133d7
Signed-off-by: Alok Chauhan <[email protected]>
Alok Chauhan 2 年 前
コミット
3c3897ff1a

+ 6 - 4
drivers/cam_isp/isp_hw_mgr/isp_hw/tfe_csid_hw/cam_tfe_csid_core.c

@@ -821,9 +821,11 @@ static int cam_tfe_csid_cid_reserve(struct cam_tfe_csid_hw *csid_hw,
 	}
 
 	csid_hw->csi2_reserve_cnt++;
-	CAM_DBG(CAM_ISP, "CSID:%d CID:%d acquired reserv cnt:%d",
+	CAM_DBG(CAM_ISP, "CSID:%d CID:%d acquired reserv cnt:%d phy_sel: %d res_id: %d",
 		csid_hw->hw_intf->hw_idx, *cid_value,
-		csid_hw->csi2_reserve_cnt);
+		csid_hw->csi2_reserve_cnt,
+		csid_hw->csi2_rx_cfg.phy_sel,
+		cid_reserv->in_port->res_id);
 
 end:
 	return rc;
@@ -1134,7 +1136,7 @@ static int cam_tfe_csid_enable_csi2(
 	 */
 	ppi_index = csid_hw->csi2_rx_cfg.phy_sel - csid_reg->csi2_reg->phy_sel_base;
 
-	if (csid_hw->ppi_hw_intf[ppi_index] && csid_hw->ppi_enable) {
+	if (csid_hw->ppi_enable && csid_hw->ppi_hw_intf[ppi_index]) {
 		ppi_lane_cfg.lane_type = csid_hw->csi2_rx_cfg.lane_type;
 		ppi_lane_cfg.lane_num  = csid_hw->csi2_rx_cfg.lane_num;
 		ppi_lane_cfg.lane_cfg  = csid_hw->csi2_rx_cfg.lane_cfg;
@@ -1178,7 +1180,7 @@ static int cam_tfe_csid_disable_csi2(
 		csid_reg->csi2_reg->csid_csi2_rx_cfg1_addr);
 
 	ppi_index = csid_hw->csi2_rx_cfg.phy_sel - csid_reg->csi2_reg->phy_sel_base;
-	if (csid_hw->ppi_hw_intf[ppi_index] && csid_hw->ppi_enable) {
+	if (csid_hw->ppi_enable && csid_hw->ppi_hw_intf[ppi_index]) {
 		/* De-Initialize the PPI bridge */
 		CAM_DBG(CAM_ISP, "ppi_index to de-init %d\n", ppi_index);
 		rc = csid_hw->ppi_hw_intf[ppi_index]->hw_ops.deinit(