soc: qcom: rpmh-rsc: read_tcs_reg()/write_tcs_reg() are not for IRQ
authorDouglas Anderson <dianders@chromium.org>
Mon, 13 Apr 2020 17:04:15 +0000 (10:04 -0700)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Tue, 14 Apr 2020 05:09:45 +0000 (22:09 -0700)
The RSC_DRV_IRQ_ENABLE, RSC_DRV_IRQ_STATUS, and RSC_DRV_IRQ_CLEAR
registers are not part of TCS 0.  Let's not pretend that they are by
using read_tcs_reg() and write_tcs_reg() and passing a bogus tcs_id of
0.  We could introduce a new wrapper for these registers but it
wouldn't buy us much.  Let's just read/write directly.

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Maulik Shah <mkshah@codeaurora.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Tested-by: Maulik Shah <mkshah@codeaurora.org>
Link: https://lore.kernel.org/r/20200413100321.v4.10.I2adf93809c692d0b673e1a86ea97c45644aa8d97@changeid
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
drivers/soc/qcom/rpmh-rsc.c

index 5303837..732316b 100644 (file)
@@ -364,12 +364,12 @@ static void enable_tcs_irq(struct rsc_drv *drv, int tcs_id, bool enable)
 {
        u32 data;
 
-       data = read_tcs_reg(drv, RSC_DRV_IRQ_ENABLE, 0);
+       data = readl_relaxed(drv->tcs_base + RSC_DRV_IRQ_ENABLE);
        if (enable)
                data |= BIT(tcs_id);
        else
                data &= ~BIT(tcs_id);
-       write_tcs_reg(drv, RSC_DRV_IRQ_ENABLE, 0, data);
+       writel_relaxed(data, drv->tcs_base + RSC_DRV_IRQ_ENABLE);
 }
 
 /**
@@ -390,7 +390,7 @@ static irqreturn_t tcs_tx_done(int irq, void *p)
        const struct tcs_request *req;
        struct tcs_cmd *cmd;
 
-       irq_status = read_tcs_reg(drv, RSC_DRV_IRQ_STATUS, 0);
+       irq_status = readl_relaxed(drv->tcs_base + RSC_DRV_IRQ_STATUS);
 
        for_each_set_bit(i, &irq_status, BITS_PER_LONG) {
                req = get_req_from_tcs(drv, i);
@@ -427,7 +427,7 @@ skip:
                /* Reclaim the TCS */
                write_tcs_reg(drv, RSC_DRV_CMD_ENABLE, i, 0);
                write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, i, 0);
-               write_tcs_reg(drv, RSC_DRV_IRQ_CLEAR, 0, BIT(i));
+               writel_relaxed(BIT(i), drv->tcs_base + RSC_DRV_IRQ_CLEAR);
                spin_lock(&drv->lock);
                clear_bit(i, drv->tcs_in_use);
                /*
@@ -969,7 +969,8 @@ static int rpmh_rsc_probe(struct platform_device *pdev)
        }
 
        /* Enable the active TCS to send requests immediately */
-       write_tcs_reg(drv, RSC_DRV_IRQ_ENABLE, 0, drv->tcs[ACTIVE_TCS].mask);
+       writel_relaxed(drv->tcs[ACTIVE_TCS].mask,
+                      drv->tcs_base + RSC_DRV_IRQ_ENABLE);
 
        spin_lock_init(&drv->client.cache_lock);
        INIT_LIST_HEAD(&drv->client.cache);