Lines Matching refs:power

26  * interconnects (buses) it depends on are enabled.  Runtime power
38 * enum ipa_power_flag - IPA power flags
43 * @IPA_POWER_FLAG_COUNT: Number of defined power flags
54 * struct ipa_power - IPA power management information
67 spinlock_t spinlock; /* used with STOPPED/STARTED power flags */
74 static int ipa_interconnect_init(struct ipa_power *power,
82 interconnect = &power->interconnect[0];
83 for (i = 0; i < power->interconnect_count; i++) {
92 ret = of_icc_bulk_get(power->dev, power->interconnect_count,
93 power->interconnect);
98 icc_bulk_disable(power->interconnect_count, power->interconnect);
101 ret = icc_bulk_set_bw(power->interconnect_count, power->interconnect);
103 icc_bulk_put(power->interconnect_count, power->interconnect);
109 static void ipa_interconnect_exit(struct ipa_power *power)
111 icc_bulk_put(power->interconnect_count, power->interconnect);
114 /* Enable IPA power, enabling interconnects and the core clock */
117 struct ipa_power *power = ipa->power;
120 ret = icc_bulk_enable(power->interconnect_count, power->interconnect);
124 ret = clk_prepare_enable(power->core);
126 dev_err(power->dev, "error %d enabling core clock\n", ret);
127 icc_bulk_disable(power->interconnect_count,
128 power->interconnect);
137 struct ipa_power *power = ipa->power;
139 clk_disable_unprepare(power->core);
141 icc_bulk_disable(power->interconnect_count, power->interconnect);
150 __clear_bit(IPA_POWER_FLAG_RESUMED, ipa->power->flags);
182 __set_bit(IPA_POWER_FLAG_SYSTEM, ipa->power->flags);
205 __clear_bit(IPA_POWER_FLAG_SYSTEM, ipa->power->flags);
219 return ipa->power ? (u32)clk_get_rate(ipa->power->core) : 0;
228 if (!__test_and_set_bit(IPA_POWER_FLAG_RESUMED, ipa->power->flags))
229 if (test_bit(IPA_POWER_FLAG_SYSTEM, ipa->power->flags))
239 * Transmit can be running concurrent with power resume, and there's a
247 * power flag is set. And if the queue is started, the STARTED flag is set.
257 * from the power ->runtime_resume operation.
261 struct ipa_power *power = ipa->power;
264 spin_lock_irqsave(&power->spinlock, flags);
266 if (!__test_and_clear_bit(IPA_POWER_FLAG_STARTED, power->flags)) {
268 __set_bit(IPA_POWER_FLAG_STOPPED, power->flags);
271 spin_unlock_irqrestore(&power->spinlock, flags);
281 struct ipa_power *power = ipa->power;
284 spin_lock_irqsave(&power->spinlock, flags);
286 if (__test_and_clear_bit(IPA_POWER_FLAG_STOPPED, power->flags)) {
287 __set_bit(IPA_POWER_FLAG_STARTED, power->flags);
291 spin_unlock_irqrestore(&power->spinlock, flags);
297 clear_bit(IPA_POWER_FLAG_STARTED, ipa->power->flags);
300 static int ipa_power_retention_init(struct ipa_power *power)
302 struct qmp *qmp = qmp_get(power->dev);
311 power->qmp = qmp;
316 static void ipa_power_retention_exit(struct ipa_power *power)
318 qmp_put(power->qmp);
319 power->qmp = NULL;
322 /* Control register retention on power collapse */
326 struct ipa_power *power = ipa->power;
329 if (!power->qmp)
332 ret = qmp_send(power->qmp, fmt, enable ? '1' : '0');
334 dev_err(power->dev, "error %d sending QMP %sable request\n",
357 /* Initialize IPA power management */
361 struct ipa_power *power;
380 size = struct_size(power, interconnect, data->interconnect_count);
381 power = kzalloc(size, GFP_KERNEL);
382 if (!power) {
386 power->dev = dev;
387 power->core = clk;
388 spin_lock_init(&power->spinlock);
389 power->interconnect_count = data->interconnect_count;
391 ret = ipa_interconnect_init(power, data->interconnect_data);
395 ret = ipa_power_retention_init(power);
403 return power;
406 ipa_interconnect_exit(power);
408 kfree(power);
416 void ipa_power_exit(struct ipa_power *power)
418 struct device *dev = power->dev;
419 struct clk *clk = power->core;
423 ipa_power_retention_exit(power);
424 ipa_interconnect_exit(power);
425 kfree(power);