Lines Matching defs:drv
112 static inline void spm_register_write(struct spm_driver_data *drv,
115 if (drv->reg_data->reg_offset[reg])
116 writel_relaxed(val, drv->reg_base +
117 drv->reg_data->reg_offset[reg]);
121 static inline void spm_register_write_sync(struct spm_driver_data *drv,
126 if (!drv->reg_data->reg_offset[reg])
130 writel_relaxed(val, drv->reg_base +
131 drv->reg_data->reg_offset[reg]);
132 ret = readl_relaxed(drv->reg_base +
133 drv->reg_data->reg_offset[reg]);
140 static inline u32 spm_register_read(struct spm_driver_data *drv,
143 return readl_relaxed(drv->reg_base + drv->reg_data->reg_offset[reg]);
146 static void spm_set_low_power_mode(struct spm_driver_data *drv,
152 start_index = drv->reg_data->start_index[mode];
154 ctl_val = spm_register_read(drv, SPM_REG_SPM_CTL);
158 spm_register_write_sync(drv, SPM_REG_SPM_CTL, ctl_val);
172 static int qcom_cpu_spc(struct spm_driver_data *drv)
176 spm_set_low_power_mode(drv, PM_SLEEP_MODE_SPC);
184 spm_set_low_power_mode(drv, PM_SLEEP_MODE_STBY);
190 struct cpuidle_driver *drv, int idx)
192 struct spm_driver_data *data = container_of(drv, struct spm_driver_data,
216 static int spm_cpuidle_init(struct cpuidle_driver *drv, int cpu)
220 memcpy(drv, &qcom_spm_idle_driver, sizeof(*drv));
221 drv->cpumask = (struct cpumask *)cpumask_of(cpu);
224 ret = dt_init_idle_driver(drv, qcom_idle_state_match, 1);
229 return qcom_scm_set_warm_boot_addr(cpu_resume_arm, drv->cpumask);
235 struct spm_driver_data *drv = NULL;
253 drv = devm_kzalloc(&pdev->dev, sizeof(*drv), GFP_KERNEL);
254 if (drv)
258 return drv;
273 struct spm_driver_data *drv;
282 drv = spm_get_drv(pdev, &cpu);
283 if (!drv)
285 platform_set_drvdata(pdev, drv);
288 drv->reg_base = devm_ioremap_resource(&pdev->dev, res);
289 if (IS_ERR(drv->reg_base))
290 return PTR_ERR(drv->reg_base);
296 drv->reg_data = match_id->data;
298 ret = spm_cpuidle_init(&drv->cpuidle_driver, cpu);
303 addr = drv->reg_base + drv->reg_data->reg_offset[SPM_REG_SEQ_ENTRY];
304 __iowrite32_copy(addr, drv->reg_data->seq,
305 ARRAY_SIZE(drv->reg_data->seq) / 4);
313 spm_register_write(drv, SPM_REG_CFG, drv->reg_data->spm_cfg);
314 spm_register_write(drv, SPM_REG_DLY, drv->reg_data->spm_dly);
315 spm_register_write(drv, SPM_REG_PMIC_DLY, drv->reg_data->pmic_dly);
316 spm_register_write(drv, SPM_REG_PMIC_DATA_0,
317 drv->reg_data->pmic_data[0]);
318 spm_register_write(drv, SPM_REG_PMIC_DATA_1,
319 drv->reg_data->pmic_data[1]);
322 spm_set_low_power_mode(drv, PM_SLEEP_MODE_STBY);
324 return cpuidle_register(&drv->cpuidle_driver, NULL);
329 struct spm_driver_data *drv = platform_get_drvdata(pdev);
331 cpuidle_unregister(&drv->cpuidle_driver);