]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
i3c: master: cdns: Use i3c_writel_fifo() and i3c_readl_fifo()
authorJorge Marques <jorge.marques@analog.com>
Tue, 24 Jun 2025 09:06:05 +0000 (11:06 +0200)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Wed, 30 Jul 2025 23:21:10 +0000 (01:21 +0200)
Use common inline i3c_writel_fifo()/i3c_readl_fifo() methods to
simplify code since the FIFO of controller is a 32bit width.

Signed-off-by: Jorge Marques <jorge.marques@analog.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20250624-i3c-writesl-readsl-v3-2-63ccf0870f01@analog.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/i3c/master/i3c-master-cdns.c

index 449e85d7ba87e3547617c041ec50c6ba829ea504..63135e75868d8ae2cbafb0c94dde58626bd9733b 100644 (file)
@@ -23,6 +23,8 @@
 #include <linux/spinlock.h>
 #include <linux/workqueue.h>
 
+#include "../internals.h"
+
 #define DEV_ID                         0x0
 #define DEV_ID_I3C_MASTER              0x5034
 
@@ -427,25 +429,13 @@ to_cdns_i3c_master(struct i3c_master_controller *master)
 static void cdns_i3c_master_wr_to_tx_fifo(struct cdns_i3c_master *master,
                                          const u8 *bytes, int nbytes)
 {
-       writesl(master->regs + TX_FIFO, bytes, nbytes / 4);
-       if (nbytes & 3) {
-               u32 tmp = 0;
-
-               memcpy(&tmp, bytes + (nbytes & ~3), nbytes & 3);
-               writesl(master->regs + TX_FIFO, &tmp, 1);
-       }
+       i3c_writel_fifo(master->regs + TX_FIFO, bytes, nbytes);
 }
 
 static void cdns_i3c_master_rd_from_rx_fifo(struct cdns_i3c_master *master,
                                            u8 *bytes, int nbytes)
 {
-       readsl(master->regs + RX_FIFO, bytes, nbytes / 4);
-       if (nbytes & 3) {
-               u32 tmp;
-
-               readsl(master->regs + RX_FIFO, &tmp, 1);
-               memcpy(bytes + (nbytes & ~3), &tmp, nbytes & 3);
-       }
+       i3c_readl_fifo(master->regs + RX_FIFO, bytes, nbytes);
 }
 
 static bool cdns_i3c_master_supports_ccc_cmd(struct i3c_master_controller *m,
@@ -1330,12 +1320,7 @@ static void cdns_i3c_master_handle_ibi(struct cdns_i3c_master *master,
        buf = slot->data;
 
        nbytes = IBIR_XFER_BYTES(ibir);
-       readsl(master->regs + IBI_DATA_FIFO, buf, nbytes / 4);
-       if (nbytes % 3) {
-               u32 tmp = __raw_readl(master->regs + IBI_DATA_FIFO);
-
-               memcpy(buf + (nbytes & ~3), &tmp, nbytes & 3);
-       }
+       i3c_readl_fifo(master->regs + IBI_DATA_FIFO, buf, nbytes);
 
        slot->len = min_t(unsigned int, IBIR_XFER_BYTES(ibir),
                          dev->ibi->max_payload_len);