Commit 9ac3e85a authored by Ben Dooks's avatar Ben Dooks Committed by Jassi Brar

mailbox: pl320: remove __raw IO

The use of __raw IO accesors is not endian safe and should be used
sparingly. The relaxed variants should be as lightweight and also
are endian safe.

Note, this has not been run-time tested.
Signed-off-by: default avatarBen Dooks <ben.dooks@codethink.co.uk>
Acked-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarJassi Brar <jaswinder.singh@linaro.org>
parent 9ef3c511
...@@ -58,29 +58,29 @@ static ATOMIC_NOTIFIER_HEAD(ipc_notifier); ...@@ -58,29 +58,29 @@ static ATOMIC_NOTIFIER_HEAD(ipc_notifier);
static inline void set_destination(int source, int mbox) static inline void set_destination(int source, int mbox)
{ {
__raw_writel(CHAN_MASK(source), ipc_base + IPCMxDSET(mbox)); writel_relaxed(CHAN_MASK(source), ipc_base + IPCMxDSET(mbox));
__raw_writel(CHAN_MASK(source), ipc_base + IPCMxMSET(mbox)); writel_relaxed(CHAN_MASK(source), ipc_base + IPCMxMSET(mbox));
} }
static inline void clear_destination(int source, int mbox) static inline void clear_destination(int source, int mbox)
{ {
__raw_writel(CHAN_MASK(source), ipc_base + IPCMxDCLEAR(mbox)); writel_relaxed(CHAN_MASK(source), ipc_base + IPCMxDCLEAR(mbox));
__raw_writel(CHAN_MASK(source), ipc_base + IPCMxMCLEAR(mbox)); writel_relaxed(CHAN_MASK(source), ipc_base + IPCMxMCLEAR(mbox));
} }
static void __ipc_send(int mbox, u32 *data) static void __ipc_send(int mbox, u32 *data)
{ {
int i; int i;
for (i = 0; i < 7; i++) for (i = 0; i < 7; i++)
__raw_writel(data[i], ipc_base + IPCMxDR(mbox, i)); writel_relaxed(data[i], ipc_base + IPCMxDR(mbox, i));
__raw_writel(0x1, ipc_base + IPCMxSEND(mbox)); writel_relaxed(0x1, ipc_base + IPCMxSEND(mbox));
} }
static u32 __ipc_rcv(int mbox, u32 *data) static u32 __ipc_rcv(int mbox, u32 *data)
{ {
int i; int i;
for (i = 0; i < 7; i++) for (i = 0; i < 7; i++)
data[i] = __raw_readl(ipc_base + IPCMxDR(mbox, i)); data[i] = readl_relaxed(ipc_base + IPCMxDR(mbox, i));
return data[1]; return data[1];
} }
...@@ -112,15 +112,15 @@ static irqreturn_t ipc_handler(int irq, void *dev) ...@@ -112,15 +112,15 @@ static irqreturn_t ipc_handler(int irq, void *dev)
u32 irq_stat; u32 irq_stat;
u32 data[7]; u32 data[7];
irq_stat = __raw_readl(ipc_base + IPCMMIS(1)); irq_stat = readl_relaxed(ipc_base + IPCMMIS(1));
if (irq_stat & MBOX_MASK(IPC_TX_MBOX)) { if (irq_stat & MBOX_MASK(IPC_TX_MBOX)) {
__raw_writel(0, ipc_base + IPCMxSEND(IPC_TX_MBOX)); writel_relaxed(0, ipc_base + IPCMxSEND(IPC_TX_MBOX));
complete(&ipc_completion); complete(&ipc_completion);
} }
if (irq_stat & MBOX_MASK(IPC_RX_MBOX)) { if (irq_stat & MBOX_MASK(IPC_RX_MBOX)) {
__ipc_rcv(IPC_RX_MBOX, data); __ipc_rcv(IPC_RX_MBOX, data);
atomic_notifier_call_chain(&ipc_notifier, data[0], data + 1); atomic_notifier_call_chain(&ipc_notifier, data[0], data + 1);
__raw_writel(2, ipc_base + IPCMxSEND(IPC_RX_MBOX)); writel_relaxed(2, ipc_base + IPCMxSEND(IPC_RX_MBOX));
} }
return IRQ_HANDLED; return IRQ_HANDLED;
...@@ -146,7 +146,7 @@ static int pl320_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -146,7 +146,7 @@ static int pl320_probe(struct amba_device *adev, const struct amba_id *id)
if (ipc_base == NULL) if (ipc_base == NULL)
return -ENOMEM; return -ENOMEM;
__raw_writel(0, ipc_base + IPCMxSEND(IPC_TX_MBOX)); writel_relaxed(0, ipc_base + IPCMxSEND(IPC_TX_MBOX));
ipc_irq = adev->irq[0]; ipc_irq = adev->irq[0];
ret = request_irq(ipc_irq, ipc_handler, 0, dev_name(&adev->dev), NULL); ret = request_irq(ipc_irq, ipc_handler, 0, dev_name(&adev->dev), NULL);
...@@ -154,19 +154,19 @@ static int pl320_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -154,19 +154,19 @@ static int pl320_probe(struct amba_device *adev, const struct amba_id *id)
goto err; goto err;
/* Init slow mailbox */ /* Init slow mailbox */
__raw_writel(CHAN_MASK(A9_SOURCE), writel_relaxed(CHAN_MASK(A9_SOURCE),
ipc_base + IPCMxSOURCE(IPC_TX_MBOX)); ipc_base + IPCMxSOURCE(IPC_TX_MBOX));
__raw_writel(CHAN_MASK(M3_SOURCE), writel_relaxed(CHAN_MASK(M3_SOURCE),
ipc_base + IPCMxDSET(IPC_TX_MBOX)); ipc_base + IPCMxDSET(IPC_TX_MBOX));
__raw_writel(CHAN_MASK(M3_SOURCE) | CHAN_MASK(A9_SOURCE), writel_relaxed(CHAN_MASK(M3_SOURCE) | CHAN_MASK(A9_SOURCE),
ipc_base + IPCMxMSET(IPC_TX_MBOX)); ipc_base + IPCMxMSET(IPC_TX_MBOX));
/* Init receive mailbox */ /* Init receive mailbox */
__raw_writel(CHAN_MASK(M3_SOURCE), writel_relaxed(CHAN_MASK(M3_SOURCE),
ipc_base + IPCMxSOURCE(IPC_RX_MBOX)); ipc_base + IPCMxSOURCE(IPC_RX_MBOX));
__raw_writel(CHAN_MASK(A9_SOURCE), writel_relaxed(CHAN_MASK(A9_SOURCE),
ipc_base + IPCMxDSET(IPC_RX_MBOX)); ipc_base + IPCMxDSET(IPC_RX_MBOX));
__raw_writel(CHAN_MASK(M3_SOURCE) | CHAN_MASK(A9_SOURCE), writel_relaxed(CHAN_MASK(M3_SOURCE) | CHAN_MASK(A9_SOURCE),
ipc_base + IPCMxMSET(IPC_RX_MBOX)); ipc_base + IPCMxMSET(IPC_RX_MBOX));
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment