Lines Matching refs:swrm

248 static int swrm_wait_for_rd_fifo_avail(struct qcom_swrm_ctrl *swrm)  in swrm_wait_for_rd_fifo_avail()  argument
255 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in swrm_wait_for_rd_fifo_avail()
266 dev_err_ratelimited(swrm->dev, "%s err read underflow\n", __func__); in swrm_wait_for_rd_fifo_avail()
273 static int swrm_wait_for_wr_fifo_avail(struct qcom_swrm_ctrl *swrm) in swrm_wait_for_wr_fifo_avail() argument
280 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in swrm_wait_for_wr_fifo_avail()
284 if (fifo_outstanding_cmds < swrm->wr_fifo_depth) in swrm_wait_for_wr_fifo_avail()
290 if (fifo_outstanding_cmds == swrm->wr_fifo_depth) { in swrm_wait_for_wr_fifo_avail()
291 dev_err_ratelimited(swrm->dev, "%s err write overflow\n", __func__); in swrm_wait_for_wr_fifo_avail()
298 static int qcom_swrm_cmd_fifo_wr_cmd(struct qcom_swrm_ctrl *swrm, u8 cmd_data, in qcom_swrm_cmd_fifo_wr_cmd() argument
311 val = swrm_get_packed_reg_val(&swrm->wcmd_id, cmd_data, in qcom_swrm_cmd_fifo_wr_cmd()
315 if (swrm_wait_for_wr_fifo_avail(swrm)) in qcom_swrm_cmd_fifo_wr_cmd()
319 swrm->reg_write(swrm, SWRM_CMD_FIFO_WR_CMD, val); in qcom_swrm_cmd_fifo_wr_cmd()
322 if (swrm->version <= 0x01030000) in qcom_swrm_cmd_fifo_wr_cmd()
330 ret = wait_for_completion_timeout(&swrm->broadcast, in qcom_swrm_cmd_fifo_wr_cmd()
343 static int qcom_swrm_cmd_fifo_rd_cmd(struct qcom_swrm_ctrl *swrm, in qcom_swrm_cmd_fifo_rd_cmd() argument
349 val = swrm_get_packed_reg_val(&swrm->rcmd_id, len, dev_addr, reg_addr); in qcom_swrm_cmd_fifo_rd_cmd()
353 swrm->reg_write(swrm, SWRM_CMD_FIFO_RD_CMD, val); in qcom_swrm_cmd_fifo_rd_cmd()
357 if (swrm_wait_for_rd_fifo_avail(swrm)) in qcom_swrm_cmd_fifo_rd_cmd()
361 swrm->reg_read(swrm, SWRM_CMD_FIFO_RD_FIFO_ADDR, &cmd_data); in qcom_swrm_cmd_fifo_rd_cmd()
365 if (cmd_id != swrm->rcmd_id) { in qcom_swrm_cmd_fifo_rd_cmd()
369 swrm->reg_write(swrm, SWRM_CMD_FIFO_CMD, in qcom_swrm_cmd_fifo_rd_cmd()
371 swrm->reg_write(swrm, SWRM_CMD_FIFO_RD_CMD, val); in qcom_swrm_cmd_fifo_rd_cmd()
380 dev_err(swrm->dev, "failed to read fifo: reg: 0x%x, rcmd_id: 0x%x,\ in qcom_swrm_cmd_fifo_rd_cmd()
382 reg_addr, swrm->rcmd_id, dev_addr, cmd_data); in qcom_swrm_cmd_fifo_rd_cmd()
490 struct qcom_swrm_ctrl *swrm = dev_id; in qcom_swrm_irq_handler() local
496 swrm->reg_read(swrm, SWRM_INTERRUPT_STATUS, &intr_sts); in qcom_swrm_irq_handler()
497 intr_sts_masked = intr_sts & swrm->intr_mask; in qcom_swrm_irq_handler()
507 devnum = qcom_swrm_get_alert_slave_dev_num(swrm); in qcom_swrm_irq_handler()
509 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
512 sdw_handle_slave_status(&swrm->bus, swrm->status); in qcom_swrm_irq_handler()
518 dev_err_ratelimited(swrm->dev, "%s: SWR new slave attached\n", in qcom_swrm_irq_handler()
520 swrm->reg_read(swrm, SWRM_MCP_SLV_STATUS, &slave_status); in qcom_swrm_irq_handler()
521 if (swrm->slave_status == slave_status) { in qcom_swrm_irq_handler()
522 dev_err(swrm->dev, "Slave status not changed %x\n", in qcom_swrm_irq_handler()
525 qcom_swrm_get_device_status(swrm); in qcom_swrm_irq_handler()
526 qcom_swrm_enumerate(&swrm->bus); in qcom_swrm_irq_handler()
527 sdw_handle_slave_status(&swrm->bus, swrm->status); in qcom_swrm_irq_handler()
531 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
534 swrm->intr_mask &= ~SWRM_INTERRUPT_STATUS_MASTER_CLASH_DET; in qcom_swrm_irq_handler()
535 swrm->reg_write(swrm, SWRM_INTERRUPT_CPU_EN, swrm->intr_mask); in qcom_swrm_irq_handler()
538 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in qcom_swrm_irq_handler()
539 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
544 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in qcom_swrm_irq_handler()
545 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
550 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in qcom_swrm_irq_handler()
551 dev_err(swrm->dev, in qcom_swrm_irq_handler()
554 swrm->reg_write(swrm, SWRM_CMD_FIFO_CMD, 0x1); in qcom_swrm_irq_handler()
557 swrm->reg_read(swrm, SWRM_CMD_FIFO_STATUS, &value); in qcom_swrm_irq_handler()
558 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
561 swrm->reg_write(swrm, SWRM_CMD_FIFO_CMD, 0x1); in qcom_swrm_irq_handler()
564 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
567 swrm->intr_mask &= ~SWRM_INTERRUPT_STATUS_DOUT_PORT_COLLISION; in qcom_swrm_irq_handler()
568 swrm->reg_write(swrm, in qcom_swrm_irq_handler()
569 SWRM_INTERRUPT_CPU_EN, swrm->intr_mask); in qcom_swrm_irq_handler()
572 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
575 swrm->intr_mask &= in qcom_swrm_irq_handler()
577 swrm->reg_write(swrm, in qcom_swrm_irq_handler()
578 SWRM_INTERRUPT_CPU_EN, swrm->intr_mask); in qcom_swrm_irq_handler()
581 complete(&swrm->broadcast); in qcom_swrm_irq_handler()
590 dev_err_ratelimited(swrm->dev, in qcom_swrm_irq_handler()
597 swrm->reg_write(swrm, SWRM_INTERRUPT_CLEAR, intr_sts); in qcom_swrm_irq_handler()
598 swrm->reg_read(swrm, SWRM_INTERRUPT_STATUS, &intr_sts); in qcom_swrm_irq_handler()
599 intr_sts_masked = intr_sts & swrm->intr_mask; in qcom_swrm_irq_handler()