Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3af6808d authored by Karthik Parsha's avatar Karthik Parsha
Browse files

msm: spm: Ascertain and use the correct number of saw pmic data registers



Different SAW hardware can have a different number of pmic data registers.
Obtain the number of pmic data registers from the saw_id register. Use this
number to limit access to the available pmic data registers only, during
spm driver initialization.

Change-Id: I6b6f1928dea27057efa2d1efbb876249e6aca935
Signed-off-by: default avatarKarthik Parsha <kparsha@codeaurora.org>
parent 1cd71605
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -109,6 +109,8 @@ static struct saw2_data saw2_info[] = {
	},
};

static uint32_t num_pmic_data;

static inline uint32_t msm_spm_drv_get_num_spm_entry(
		struct msm_spm_driver_data *dev)
{
@@ -176,6 +178,14 @@ static inline void msm_spm_drv_set_vctl2(struct msm_spm_driver_data *dev,
	msm_spm_drv_flush_shadow(dev, MSM_SPM_REG_SAW2_PMIC_DATA_3);
}

static inline uint32_t msm_spm_drv_get_num_pmic_data(
		struct msm_spm_driver_data *dev)
{
	msm_spm_drv_load_shadow(dev, MSM_SPM_REG_SAW2_ID);
	mb();
	return (dev->reg_shadow[MSM_SPM_REG_SAW2_ID] >> 4) & 0x7;
}

static inline uint32_t msm_spm_drv_get_sts_pmic_state(
		struct msm_spm_driver_data *dev)
{
@@ -473,7 +483,7 @@ void msm_spm_drv_reinit(struct msm_spm_driver_data *dev)
{
	int i;

	for (i = 0; i < MSM_SPM_REG_NR_INITIALIZE; i++)
	for (i = 0; i < MSM_SPM_REG_SAW2_PMIC_DATA_0 + num_pmic_data; i++)
		msm_spm_drv_flush_shadow(dev, i);

	msm_spm_drv_flush_seq_entry(dev);
@@ -515,14 +525,18 @@ int msm_spm_drv_init(struct msm_spm_driver_data *dev,
		BUG_ON(!found);
	}

	for (i = 0; i < MSM_SPM_REG_NR_INITIALIZE; i++)
	if (!num_pmic_data)
		num_pmic_data = msm_spm_drv_get_num_pmic_data(dev);

	for (i = 0; i < MSM_SPM_REG_SAW2_PMIC_DATA_0 + num_pmic_data; i++)
		msm_spm_drv_flush_shadow(dev, i);

	/* barrier to ensure write completes before we update shadow
	 * registers
	 */
	mb();

	for (i = 0; i < MSM_SPM_REG_NR_INITIALIZE; i++)
	for (i = 0; i < MSM_SPM_REG_SAW2_PMIC_DATA_0 + num_pmic_data; i++)
		msm_spm_drv_load_shadow(dev, i);

	/* barrier to ensure read completes before we proceed further*/