msm: camera: isp: CSID Tasklet stop sequence

Handle race for tasklet stop. Changed the sequence of tasklet stop
call to avoid unclocked register accesses on tasklet stop/flush.

CRs-Fixed: 3010894
Change-Id: Ieec9f20db127b2bebec0bb40ec437b4eb3d3d9dd
Signed-off-by: Yash Upadhyay <yupadhya@codeaurora.org>
Tento commit je obsažen v:
Yash Upadhyay
2021-07-08 14:59:28 +05:30
rodič 110420ce29
revize 9140aa520b
2 změnil soubory, kde provedl 3 přidání a 2 odebrání

Zobrazit soubor

@@ -2878,12 +2878,12 @@ static int cam_ife_csid_ver1_disable_hw(
cam_io_w_mb(0, soc_info->reg_map[0].mem_base +
csid_reg->cmn_reg->top_irq_mask_addr);
cam_tasklet_stop(csid_hw->tasklet);
rc = cam_ife_csid_disable_soc_resources(soc_info);
if (rc)
CAM_ERR(CAM_ISP, "CSID:%d Disable CSID SOC failed",
csid_hw->hw_intf->hw_idx);
cam_tasklet_stop(csid_hw->tasklet);
spin_lock_irqsave(&csid_hw->lock_state, flags);
csid_hw->flags.device_enabled = false;
spin_unlock_irqrestore(&csid_hw->lock_state, flags);

Zobrazit soubor

@@ -1230,12 +1230,13 @@ static int cam_tfe_csid_disable_hw(struct cam_tfe_csid_hw *csid_hw)
cam_io_w_mb(0, soc_info->reg_map[0].mem_base +
csid_reg->cmn_reg->csid_top_irq_mask_addr);
cam_tasklet_stop(csid_hw->tasklet);
rc = cam_tfe_csid_disable_soc_resources(soc_info);
if (rc)
CAM_ERR(CAM_ISP, "CSID:%d Disable CSID SOC failed",
csid_hw->hw_intf->hw_idx);
cam_tasklet_stop(csid_hw->tasklet);
spin_lock_irqsave(&csid_hw->spin_lock, flags);
csid_hw->device_enabled = 0;
spin_unlock_irqrestore(&csid_hw->spin_lock, flags);