Lines Matching refs:swrm
277 static int swrm_wait_for_rd_fifo_avail(struct qcom_swrm_ctrl *swrm) in swrm_wait_for_rd_fifo_avail() argument
284 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in swrm_wait_for_rd_fifo_avail()
295 dev_err_ratelimited(swrm->dev, "%s err read underflow\n", __func__); in swrm_wait_for_rd_fifo_avail()
302 static int swrm_wait_for_wr_fifo_avail(struct qcom_swrm_ctrl *swrm) in swrm_wait_for_wr_fifo_avail() argument
309 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in swrm_wait_for_wr_fifo_avail()
313 if (fifo_outstanding_cmds < swrm->wr_fifo_depth) in swrm_wait_for_wr_fifo_avail()
319 if (fifo_outstanding_cmds == swrm->wr_fifo_depth) { in swrm_wait_for_wr_fifo_avail()
320 dev_err_ratelimited(swrm->dev, "%s err write overflow\n", __func__); in swrm_wait_for_wr_fifo_avail()
327 static int qcom_swrm_cmd_fifo_wr_cmd(struct qcom_swrm_ctrl *swrm, u8 cmd_data, in qcom_swrm_cmd_fifo_wr_cmd() argument
340 val = swrm_get_packed_reg_val(&swrm->wcmd_id, cmd_data, in qcom_swrm_cmd_fifo_wr_cmd()
344 if (swrm_wait_for_wr_fifo_avail(swrm)) in qcom_swrm_cmd_fifo_wr_cmd()
348 reinit_completion(&swrm->broadcast); in qcom_swrm_cmd_fifo_wr_cmd()
351 swrm->reg_write(swrm, SWRM_CMD_FIFO_WR_CMD, val); in qcom_swrm_cmd_fifo_wr_cmd()
354 if (swrm->version <= 0x01030000) in qcom_swrm_cmd_fifo_wr_cmd()
362 ret = wait_for_completion_timeout(&swrm->broadcast, in qcom_swrm_cmd_fifo_wr_cmd()
375 static int qcom_swrm_cmd_fifo_rd_cmd(struct qcom_swrm_ctrl *swrm, in qcom_swrm_cmd_fifo_rd_cmd() argument
381 val = swrm_get_packed_reg_val(&swrm->rcmd_id, len, dev_addr, reg_addr); in qcom_swrm_cmd_fifo_rd_cmd()
387 swrm_wait_for_wr_fifo_avail(swrm); in qcom_swrm_cmd_fifo_rd_cmd()
391 swrm->reg_write(swrm, SWRM_CMD_FIFO_RD_CMD, val); in qcom_swrm_cmd_fifo_rd_cmd()
395 if (swrm_wait_for_rd_fifo_avail(swrm)) in qcom_swrm_cmd_fifo_rd_cmd()
399 swrm->reg_read(swrm, SWRM_CMD_FIFO_RD_FIFO_ADDR, &cmd_data); in qcom_swrm_cmd_fifo_rd_cmd()
403 if (cmd_id != swrm->rcmd_id) { in qcom_swrm_cmd_fifo_rd_cmd()
407 swrm->reg_write(swrm, SWRM_CMD_FIFO_CMD, in qcom_swrm_cmd_fifo_rd_cmd()
409 swrm->reg_write(swrm, SWRM_CMD_FIFO_RD_CMD, val); in qcom_swrm_cmd_fifo_rd_cmd()
418 dev_err(swrm->dev, "failed to read fifo: reg: 0x%x, rcmd_id: 0x%x,\ in qcom_swrm_cmd_fifo_rd_cmd()
420 reg_addr, swrm->rcmd_id, dev_addr, cmd_data); in qcom_swrm_cmd_fifo_rd_cmd()
532 struct qcom_swrm_ctrl *swrm = dev_id; in qcom_swrm_wake_irq_handler() local
535 ret = pm_runtime_resume_and_get(swrm->dev); in qcom_swrm_wake_irq_handler()
537 dev_err_ratelimited(swrm->dev, in qcom_swrm_wake_irq_handler()
543 if (swrm->wake_irq > 0) { in qcom_swrm_wake_irq_handler()
544 if (!irqd_irq_disabled(irq_get_irq_data(swrm->wake_irq))) in qcom_swrm_wake_irq_handler()
545 disable_irq_nosync(swrm->wake_irq); in qcom_swrm_wake_irq_handler()
548 pm_runtime_mark_last_busy(swrm->dev); in qcom_swrm_wake_irq_handler()
549 pm_runtime_put_autosuspend(swrm->dev); in qcom_swrm_wake_irq_handler()
556 struct qcom_swrm_ctrl *swrm = dev_id; in qcom_swrm_irq_handler() local
561 clk_prepare_enable(swrm->hclk); in qcom_swrm_irq_handler()
563 swrm->reg_read(swrm, SWRM_INTERRUPT_STATUS, &intr_sts); in qcom_swrm_irq_handler()
564 intr_sts_masked = intr_sts & swrm->intr_mask; in qcom_swrm_irq_handler()
574 devnum = qcom_swrm_get_alert_slave_dev_num(swrm); in qcom_swrm_irq_handler()
576 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
579 sdw_handle_slave_status(&swrm->bus, swrm->status); in qcom_swrm_irq_handler()
585 dev_dbg_ratelimited(swrm->dev, "SWR new slave attached\n"); in qcom_swrm_irq_handler()
586 swrm->reg_read(swrm, SWRM_MCP_SLV_STATUS, &slave_status); in qcom_swrm_irq_handler()
587 if (swrm->slave_status == slave_status) { in qcom_swrm_irq_handler()
588 dev_dbg(swrm->dev, "Slave status not changed %x\n", in qcom_swrm_irq_handler()
591 qcom_swrm_get_device_status(swrm); in qcom_swrm_irq_handler()
592 qcom_swrm_enumerate(&swrm->bus); in qcom_swrm_irq_handler()
593 sdw_handle_slave_status(&swrm->bus, swrm->status); in qcom_swrm_irq_handler()
597 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
600 swrm->intr_mask &= ~SWRM_INTERRUPT_STATUS_MASTER_CLASH_DET; in qcom_swrm_irq_handler()
601 swrm->reg_write(swrm, SWRM_INTERRUPT_CPU_EN, swrm->intr_mask); in qcom_swrm_irq_handler()
604 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in qcom_swrm_irq_handler()
605 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
610 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in qcom_swrm_irq_handler()
611 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
616 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in qcom_swrm_irq_handler()
617 dev_err(swrm->dev, in qcom_swrm_irq_handler()
620 swrm->reg_write(swrm, SWRM_CMD_FIFO_CMD, 0x1); in qcom_swrm_irq_handler()
623 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in qcom_swrm_irq_handler()
624 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
627 swrm->reg_write(swrm, SWRM_CMD_FIFO_CMD, 0x1); in qcom_swrm_irq_handler()
630 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
633 swrm->intr_mask &= ~SWRM_INTERRUPT_STATUS_DOUT_PORT_COLLISION; in qcom_swrm_irq_handler()
634 swrm->reg_write(swrm, in qcom_swrm_irq_handler()
635 SWRM_INTERRUPT_CPU_EN, swrm->intr_mask); in qcom_swrm_irq_handler()
638 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
641 swrm->intr_mask &= in qcom_swrm_irq_handler()
643 swrm->reg_write(swrm, in qcom_swrm_irq_handler()
644 SWRM_INTERRUPT_CPU_EN, swrm->intr_mask); in qcom_swrm_irq_handler()
647 complete(&swrm->broadcast); in qcom_swrm_irq_handler()
656 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
663 swrm->reg_write(swrm, SWRM_INTERRUPT_CLEAR, intr_sts); in qcom_swrm_irq_handler()
664 swrm->reg_read(swrm, SWRM_INTERRUPT_STATUS, &intr_sts); in qcom_swrm_irq_handler()
665 intr_sts_masked = intr_sts & swrm->intr_mask; in qcom_swrm_irq_handler()
668 clk_disable_unprepare(swrm->hclk); in qcom_swrm_irq_handler()
1274 struct qcom_swrm_ctrl *swrm = s_file->private; in swrm_reg_show() local
1277 ret = pm_runtime_resume_and_get(swrm->dev); in swrm_reg_show()
1279 dev_err_ratelimited(swrm->dev, in swrm_reg_show()
1286 swrm->reg_read(swrm, reg, ®_val); in swrm_reg_show()
1289 pm_runtime_mark_last_busy(swrm->dev); in swrm_reg_show()
1290 pm_runtime_put_autosuspend(swrm->dev); in swrm_reg_show()
1471 static bool swrm_wait_for_frame_gen_enabled(struct qcom_swrm_ctrl *swrm) argument
1477 swrm->reg_read(swrm, SWRM_COMP_STATUS, &comp_sts);
1485 dev_err(swrm->dev, "%s: link status not %s\n", __func__,