Lines Matching refs:data

64 	struct qcom_cpufreq_data *data;
115 struct qcom_cpufreq_data *data = policy->driver_data;
120 writel_relaxed(index, data->base + soc_data->reg_perf_state);
122 if (data->per_core_dcvs)
124 writel_relaxed(index, data->base + soc_data->reg_perf_state + i * 4);
132 static unsigned long qcom_lmh_get_throttle_freq(struct qcom_cpufreq_data *data)
137 lval = readl_relaxed(data->base + qcom_cpufreq.soc_data->reg_current_vote) & 0x3ff;
139 lval = readl_relaxed(data->base + qcom_cpufreq.soc_data->reg_domain_state) & 0xff;
147 struct qcom_cpufreq_data *data;
156 data = policy->driver_data;
159 index = readl_relaxed(data->base + soc_data->reg_perf_state);
167 struct qcom_cpufreq_data *data;
174 data = policy->driver_data;
176 if (data->throttle_irq >= 0)
177 return qcom_lmh_get_throttle_freq(data) / HZ_PER_KHZ;
185 struct qcom_cpufreq_data *data = policy->driver_data;
191 writel_relaxed(index, data->base + soc_data->reg_perf_state);
193 if (data->per_core_dcvs)
195 writel_relaxed(index, data->base + soc_data->reg_perf_state + i * 4);
203 u32 data, src, lval, i, core_count, prev_freq = 0, freq;
238 data = readl_relaxed(drv_data->base + soc_data->reg_freq_lut +
240 src = FIELD_GET(LUT_SRC, data);
241 lval = FIELD_GET(LUT_L_VAL, data);
242 core_count = FIELD_GET(LUT_CORE_COUNT, data);
244 data = readl_relaxed(drv_data->base + soc_data->reg_volt_lut +
246 volt = FIELD_GET(LUT_VOLT, data) * 1000;
324 static void qcom_lmh_dcvs_notify(struct qcom_cpufreq_data *data)
326 struct cpufreq_policy *policy = data->policy;
336 freq_hz = qcom_lmh_get_throttle_freq(data);
357 mutex_lock(&data->throttle_lock);
358 if (data->cancel_throttle)
366 enable_irq(data->throttle_irq);
368 mod_delayed_work(system_highpri_wq, &data->throttle_work,
372 mutex_unlock(&data->throttle_lock);
377 struct qcom_cpufreq_data *data;
379 data = container_of(work, struct qcom_cpufreq_data, throttle_work.work);
380 qcom_lmh_dcvs_notify(data);
383 static irqreturn_t qcom_lmh_dcvs_handle_irq(int irq, void *data)
385 struct qcom_cpufreq_data *c_data = data;
420 { .compatible = "qcom,cpufreq-hw", .data = &qcom_soc_data },
421 { .compatible = "qcom,cpufreq-epss", .data = &epss_soc_data },
428 struct qcom_cpufreq_data *data = policy->driver_data;
436 data->throttle_irq = platform_get_irq_optional(pdev, index);
437 if (data->throttle_irq == -ENXIO)
439 if (data->throttle_irq < 0)
440 return data->throttle_irq;
442 data->cancel_throttle = false;
443 data->policy = policy;
445 mutex_init(&data->throttle_lock);
446 INIT_DEFERRABLE_WORK(&data->throttle_work, qcom_lmh_dcvs_poll);
448 snprintf(data->irq_name, sizeof(data->irq_name), "dcvsh-irq-%u", policy->cpu);
449 ret = request_threaded_irq(data->throttle_irq, NULL, qcom_lmh_dcvs_handle_irq,
450 IRQF_ONESHOT | IRQF_NO_AUTOEN, data->irq_name, data);
452 dev_err(&pdev->dev, "Error registering %s: %d\n", data->irq_name, ret);
456 ret = irq_set_affinity_and_hint(data->throttle_irq, policy->cpus);
459 data->irq_name, data->throttle_irq);
466 struct qcom_cpufreq_data *data = policy->driver_data;
470 if (data->throttle_irq <= 0)
473 mutex_lock(&data->throttle_lock);
474 data->cancel_throttle = false;
475 mutex_unlock(&data->throttle_lock);
477 ret = irq_set_affinity_and_hint(data->throttle_irq, policy->cpus);
480 data->irq_name, data->throttle_irq);
487 struct qcom_cpufreq_data *data = policy->driver_data;
489 if (data->throttle_irq <= 0)
492 mutex_lock(&data->throttle_lock);
493 data->cancel_throttle = true;
494 mutex_unlock(&data->throttle_lock);
496 cancel_delayed_work_sync(&data->throttle_work);
497 irq_set_affinity_and_hint(data->throttle_irq, NULL);
498 disable_irq_nosync(data->throttle_irq);
503 static void qcom_cpufreq_hw_lmh_exit(struct qcom_cpufreq_data *data)
505 if (data->throttle_irq <= 0)
508 free_irq(data->throttle_irq, data);
518 struct qcom_cpufreq_data *data;
539 data = &qcom_cpufreq.data[index];
542 if (!(readl_relaxed(data->base + qcom_cpufreq.soc_data->reg_enable) & 0x1)) {
547 if (readl_relaxed(data->base + qcom_cpufreq.soc_data->reg_dcvs_ctrl) & 0x1)
548 data->per_core_dcvs = true;
552 policy->driver_data = data;
579 struct qcom_cpufreq_data *data = policy->driver_data;
583 qcom_cpufreq_hw_lmh_exit(data);
585 kfree(data);
592 struct qcom_cpufreq_data *data = policy->driver_data;
594 if (data->throttle_irq >= 0)
595 enable_irq(data->throttle_irq);
624 struct qcom_cpufreq_data *data = container_of(hw, struct qcom_cpufreq_data, cpu_clk);
626 return qcom_lmh_get_throttle_freq(data);
670 qcom_cpufreq.data = devm_kzalloc(dev, sizeof(struct qcom_cpufreq_data) * num_domains,
672 if (!qcom_cpufreq.data)
686 struct qcom_cpufreq_data *data = &qcom_cpufreq.data[i];
696 data->base = base;
705 data->cpu_clk.init = &clk_init;
707 ret = devm_clk_hw_register(dev, &data->cpu_clk);
714 clk_data->hws[i] = &data->cpu_clk;