Lines Matching refs:rpm
58 #define RPM_STATUS_REG(rpm, i) ((rpm)->status_regs + (i) * 4) argument
59 #define RPM_CTRL_REG(rpm, i) ((rpm)->ctrl_regs + (i) * 4) argument
60 #define RPM_REQ_REG(rpm, i) ((rpm)->req_regs + (i) * 4) argument
376 int qcom_rpm_write(struct qcom_rpm *rpm, in qcom_rpm_write() argument
382 const struct qcom_rpm_data *data = rpm->data; in qcom_rpm_write()
395 mutex_lock(&rpm->lock); in qcom_rpm_write()
398 writel_relaxed(buf[i], RPM_REQ_REG(rpm, res->target_id + i)); in qcom_rpm_write()
403 RPM_CTRL_REG(rpm, RPM_REQ_SELECT + i)); in qcom_rpm_write()
406 writel_relaxed(BIT(state), RPM_CTRL_REG(rpm, RPM_REQUEST_CONTEXT)); in qcom_rpm_write()
408 reinit_completion(&rpm->ack); in qcom_rpm_write()
409 regmap_write(rpm->ipc_regmap, rpm->ipc_offset, BIT(rpm->ipc_bit)); in qcom_rpm_write()
411 left = wait_for_completion_timeout(&rpm->ack, RPM_REQUEST_TIMEOUT); in qcom_rpm_write()
414 else if (rpm->ack_status & RPM_REJECTED) in qcom_rpm_write()
417 mutex_unlock(&rpm->lock); in qcom_rpm_write()
425 struct qcom_rpm *rpm = dev; in qcom_rpm_ack_interrupt() local
429 ack = readl_relaxed(RPM_CTRL_REG(rpm, RPM_ACK_CONTEXT)); in qcom_rpm_ack_interrupt()
431 writel_relaxed(0, RPM_CTRL_REG(rpm, RPM_ACK_SELECTOR + i)); in qcom_rpm_ack_interrupt()
432 writel(0, RPM_CTRL_REG(rpm, RPM_ACK_CONTEXT)); in qcom_rpm_ack_interrupt()
435 dev_warn(rpm->dev, "ignoring notification!\n"); in qcom_rpm_ack_interrupt()
437 rpm->ack_status = ack; in qcom_rpm_ack_interrupt()
438 complete(&rpm->ack); in qcom_rpm_ack_interrupt()
446 struct qcom_rpm *rpm = dev; in qcom_rpm_err_interrupt() local
448 regmap_write(rpm->ipc_regmap, rpm->ipc_offset, BIT(rpm->ipc_bit)); in qcom_rpm_err_interrupt()
449 dev_err(rpm->dev, "RPM triggered fatal error\n"); in qcom_rpm_err_interrupt()
464 struct qcom_rpm *rpm; in qcom_rpm_probe() local
471 rpm = devm_kzalloc(&pdev->dev, sizeof(*rpm), GFP_KERNEL); in qcom_rpm_probe()
472 if (!rpm) in qcom_rpm_probe()
475 rpm->dev = &pdev->dev; in qcom_rpm_probe()
476 mutex_init(&rpm->lock); in qcom_rpm_probe()
477 init_completion(&rpm->ack); in qcom_rpm_probe()
498 rpm->data = match->data; in qcom_rpm_probe()
501 rpm->status_regs = devm_ioremap_resource(&pdev->dev, res); in qcom_rpm_probe()
502 if (IS_ERR(rpm->status_regs)) in qcom_rpm_probe()
503 return PTR_ERR(rpm->status_regs); in qcom_rpm_probe()
504 rpm->ctrl_regs = rpm->status_regs + 0x400; in qcom_rpm_probe()
505 rpm->req_regs = rpm->status_regs + 0x600; in qcom_rpm_probe()
513 rpm->ipc_regmap = syscon_node_to_regmap(syscon_np); in qcom_rpm_probe()
514 if (IS_ERR(rpm->ipc_regmap)) in qcom_rpm_probe()
515 return PTR_ERR(rpm->ipc_regmap); in qcom_rpm_probe()
518 &rpm->ipc_offset); in qcom_rpm_probe()
525 &rpm->ipc_bit); in qcom_rpm_probe()
531 dev_set_drvdata(&pdev->dev, rpm); in qcom_rpm_probe()
533 fw_version[0] = readl(RPM_STATUS_REG(rpm, 0)); in qcom_rpm_probe()
534 fw_version[1] = readl(RPM_STATUS_REG(rpm, 1)); in qcom_rpm_probe()
535 fw_version[2] = readl(RPM_STATUS_REG(rpm, 2)); in qcom_rpm_probe()
536 if (fw_version[0] != rpm->data->version) { in qcom_rpm_probe()
542 rpm->data->version); in qcom_rpm_probe()
555 rpm); in qcom_rpm_probe()
570 rpm); in qcom_rpm_probe()
581 rpm); in qcom_rpm_probe()