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
375 int qcom_rpm_write(struct qcom_rpm *rpm, in qcom_rpm_write() argument
381 const struct qcom_rpm_data *data = rpm->data; in qcom_rpm_write()
394 mutex_lock(&rpm->lock); in qcom_rpm_write()
397 writel_relaxed(buf[i], RPM_REQ_REG(rpm, res->target_id + i)); in qcom_rpm_write()
402 RPM_CTRL_REG(rpm, RPM_REQ_SELECT + i)); in qcom_rpm_write()
405 writel_relaxed(BIT(state), RPM_CTRL_REG(rpm, RPM_REQUEST_CONTEXT)); in qcom_rpm_write()
407 reinit_completion(&rpm->ack); in qcom_rpm_write()
408 regmap_write(rpm->ipc_regmap, rpm->ipc_offset, BIT(rpm->ipc_bit)); in qcom_rpm_write()
410 left = wait_for_completion_timeout(&rpm->ack, RPM_REQUEST_TIMEOUT); in qcom_rpm_write()
413 else if (rpm->ack_status & RPM_REJECTED) in qcom_rpm_write()
416 mutex_unlock(&rpm->lock); in qcom_rpm_write()
424 struct qcom_rpm *rpm = dev; in qcom_rpm_ack_interrupt() local
428 ack = readl_relaxed(RPM_CTRL_REG(rpm, RPM_ACK_CONTEXT)); in qcom_rpm_ack_interrupt()
430 writel_relaxed(0, RPM_CTRL_REG(rpm, RPM_ACK_SELECTOR + i)); in qcom_rpm_ack_interrupt()
431 writel(0, RPM_CTRL_REG(rpm, RPM_ACK_CONTEXT)); in qcom_rpm_ack_interrupt()
434 dev_warn(rpm->dev, "ignoring notification!\n"); in qcom_rpm_ack_interrupt()
436 rpm->ack_status = ack; in qcom_rpm_ack_interrupt()
437 complete(&rpm->ack); in qcom_rpm_ack_interrupt()
445 struct qcom_rpm *rpm = dev; in qcom_rpm_err_interrupt() local
447 regmap_write(rpm->ipc_regmap, rpm->ipc_offset, BIT(rpm->ipc_bit)); in qcom_rpm_err_interrupt()
448 dev_err(rpm->dev, "RPM triggered fatal error\n"); in qcom_rpm_err_interrupt()
463 struct qcom_rpm *rpm; in qcom_rpm_probe() local
470 rpm = devm_kzalloc(&pdev->dev, sizeof(*rpm), GFP_KERNEL); in qcom_rpm_probe()
471 if (!rpm) in qcom_rpm_probe()
474 rpm->dev = &pdev->dev; in qcom_rpm_probe()
475 mutex_init(&rpm->lock); in qcom_rpm_probe()
476 init_completion(&rpm->ack); in qcom_rpm_probe()
497 rpm->data = match->data; in qcom_rpm_probe()
500 rpm->status_regs = devm_ioremap_resource(&pdev->dev, res); in qcom_rpm_probe()
501 if (IS_ERR(rpm->status_regs)) in qcom_rpm_probe()
502 return PTR_ERR(rpm->status_regs); in qcom_rpm_probe()
503 rpm->ctrl_regs = rpm->status_regs + 0x400; in qcom_rpm_probe()
504 rpm->req_regs = rpm->status_regs + 0x600; in qcom_rpm_probe()
512 rpm->ipc_regmap = syscon_node_to_regmap(syscon_np); in qcom_rpm_probe()
513 if (IS_ERR(rpm->ipc_regmap)) in qcom_rpm_probe()
514 return PTR_ERR(rpm->ipc_regmap); in qcom_rpm_probe()
517 &rpm->ipc_offset); in qcom_rpm_probe()
524 &rpm->ipc_bit); in qcom_rpm_probe()
530 dev_set_drvdata(&pdev->dev, rpm); in qcom_rpm_probe()
532 fw_version[0] = readl(RPM_STATUS_REG(rpm, 0)); in qcom_rpm_probe()
533 fw_version[1] = readl(RPM_STATUS_REG(rpm, 1)); in qcom_rpm_probe()
534 fw_version[2] = readl(RPM_STATUS_REG(rpm, 2)); in qcom_rpm_probe()
535 if (fw_version[0] != rpm->data->version) { in qcom_rpm_probe()
541 rpm->data->version); in qcom_rpm_probe()
554 rpm); in qcom_rpm_probe()
569 rpm); in qcom_rpm_probe()
580 rpm); in qcom_rpm_probe()