WIP: made i2c-aspeed use kunit_{readl|writel} instead of readl/writel
diff --git a/arch/um/include/asm/io-mock-shared.h b/arch/um/include/asm/io-mock-shared.h
index 2e189e0..a0c19f2 100644
--- a/arch/um/include/asm/io-mock-shared.h
+++ b/arch/um/include/asm/io-mock-shared.h
@@ -60,4 +60,32 @@
void writeq_relaxed(u64, const volatile void __iomem *);
#endif /* CONFIG_64BIT */
+#define kunit_readb kunit_readb
+u8 kunit_readb(const volatile void __iomem *);
+
+#define kunit_readw kunit_readw
+u16 kunit_readw(const volatile void __iomem *);
+
+#define kunit_readl kunit_readl
+u32 kunit_readl(const volatile void __iomem *);
+
+#ifdef CONFIG_64BIT
+#define kunit_readq kunit_readq
+u64 kunit_readq(const volatile void __iomem *);
+#endif /* CONFIG_64BIT */
+
+#define kunit_writeb kunit_writeb
+void kunit_writeb(u8, const volatile void __iomem *);
+
+#define kunit_writew kunit_writew
+void kunit_writew(u16, const volatile void __iomem *);
+
+#define kunit_writel kunit_writel
+void kunit_writel(u32, const volatile void __iomem *);
+
+#ifdef CONFIG_64BIT
+#define kunit_writeq kunit_writeq
+void kunit_writeq(u64, const volatile void __iomem *);
+#endif /* CONFIG_64BIT */
+
#endif /* _ASM_UM_IO_MOCK_SHARED_H */
diff --git a/arch/um/kernel/io-mock.c b/arch/um/kernel/io-mock.c
index 420c6f1..babe511 100644
--- a/arch/um/kernel/io-mock.c
+++ b/arch/um/kernel/io-mock.c
@@ -38,3 +38,31 @@
DEFINE_FUNCTION_MOCK_VOID_RETURN(writeq,
PARAMS(u64, const volatile void __iomem *));
#endif /* CONFIG_64BIT */
+
+DEFINE_FUNCTION_MOCK(kunit_readb,
+ RETURNS(u8), PARAMS(const volatile void __iomem *));
+
+DEFINE_FUNCTION_MOCK(kunit_readw,
+ RETURNS(u16), PARAMS(const volatile void __iomem *));
+
+DEFINE_FUNCTION_MOCK(kunit_readl,
+ RETURNS(u32), PARAMS(const volatile void __iomem *));
+
+#ifdef CONFIG_64BIT
+DEFINE_FUNCTION_MOCK(kunit_readq,
+ RETURNS(u64), PARAMS(const volatile void __iomem *));
+#endif /* CONFIG_64BIT */
+
+DEFINE_FUNCTION_MOCK_VOID_RETURN(kunit_writeb,
+ PARAMS(u8, const volatile void __iomem *));
+
+DEFINE_FUNCTION_MOCK_VOID_RETURN(kunit_writew,
+ PARAMS(u16, const volatile void __iomem *));
+
+DEFINE_FUNCTION_MOCK_VOID_RETURN(kunit_writel,
+ PARAMS(u32, const volatile void __iomem *));
+
+#ifdef CONFIG_64BIT
+DEFINE_FUNCTION_MOCK_VOID_RETURN(kunit_writeq,
+ PARAMS(u64, const volatile void __iomem *));
+#endif /* CONFIG_64BIT */
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
index 41fc416..b16c1cb 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -87,7 +87,7 @@
u32 command;
spin_lock_irqsave(&bus->lock, flags);
- command = readl(bus->base + ASPEED_I2C_CMD_REG);
+ command = kunit_readl(bus->base + ASPEED_I2C_CMD_REG);
if (command & ASPEED_I2CD_SDA_LINE_STS) {
/* Bus is idle: no recovery needed. */
@@ -97,7 +97,7 @@
command);
reinit_completion(&bus->cmd_complete);
- writel(ASPEED_I2CD_M_STOP_CMD, bus->base + ASPEED_I2C_CMD_REG);
+ kunit_writel(ASPEED_I2CD_M_STOP_CMD, bus->base + ASPEED_I2C_CMD_REG);
spin_unlock_irqrestore(&bus->lock, flags);
time_left = wait_for_completion_timeout(
@@ -109,7 +109,7 @@
else if (bus->cmd_err)
goto reset_out;
/* Recovery failed. */
- else if (!(readl(bus->base + ASPEED_I2C_CMD_REG) &
+ else if (!(kunit_readl(bus->base + ASPEED_I2C_CMD_REG) &
ASPEED_I2CD_SCL_LINE_STS))
goto reset_out;
/* Bus error. */
@@ -119,7 +119,7 @@
reinit_completion(&bus->cmd_complete);
/* Writes 1 to 8 SCL clock cycles until SDA is released. */
- writel(ASPEED_I2CD_BUS_RECOVER_CMD,
+ kunit_writel(ASPEED_I2CD_BUS_RECOVER_CMD,
bus->base + ASPEED_I2C_CMD_REG);
spin_unlock_irqrestore(&bus->lock, flags);
@@ -132,7 +132,7 @@
else if (bus->cmd_err)
goto reset_out;
/* Recovery failed. */
- else if (!(readl(bus->base + ASPEED_I2C_CMD_REG) &
+ else if (!(kunit_readl(bus->base + ASPEED_I2C_CMD_REG) &
ASPEED_I2CD_SDA_LINE_STS))
goto reset_out;
}
@@ -161,8 +161,8 @@
goto out;
}
- command = readl(bus->base + ASPEED_I2C_CMD_REG);
- irq_status = readl(bus->base + ASPEED_I2C_INTR_STS_REG);
+ command = kunit_readl(bus->base + ASPEED_I2C_CMD_REG);
+ irq_status = kunit_readl(bus->base + ASPEED_I2C_INTR_STS_REG);
/* Slave was requested, restart state machine. */
if (irq_status & ASPEED_I2CD_INTR_SLAVE_MATCH) {
@@ -181,7 +181,7 @@
/* Slave was sent something. */
if (irq_status & ASPEED_I2CD_INTR_RX_DONE) {
- value = readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8;
+ value = kunit_readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8;
/* Handle address frame. */
if (bus->slave_state == ASPEED_I2C_SLAVE_START) {
if (value & 0x1)
@@ -211,8 +211,8 @@
bus->slave_state = ASPEED_I2C_SLAVE_READ_PROCESSED;
i2c_slave_event(slave, I2C_SLAVE_READ_REQUESTED, &value);
- writel(value, bus->base + ASPEED_I2C_BYTE_BUF_REG);
- writel(ASPEED_I2CD_S_TX_CMD, bus->base + ASPEED_I2C_CMD_REG);
+ kunit_writel(value, bus->base + ASPEED_I2C_BYTE_BUF_REG);
+ kunit_writel(ASPEED_I2CD_S_TX_CMD, bus->base + ASPEED_I2C_CMD_REG);
break;
case ASPEED_I2C_SLAVE_READ_PROCESSED:
status_ack |= ASPEED_I2CD_INTR_TX_ACK;
@@ -220,8 +220,8 @@
dev_err(bus->dev,
"Expected ACK after processed read.\n");
i2c_slave_event(slave, I2C_SLAVE_READ_PROCESSED, &value);
- writel(value, bus->base + ASPEED_I2C_BYTE_BUF_REG);
- writel(ASPEED_I2CD_S_TX_CMD, bus->base + ASPEED_I2C_CMD_REG);
+ kunit_writel(value, bus->base + ASPEED_I2C_BYTE_BUF_REG);
+ kunit_writel(ASPEED_I2CD_S_TX_CMD, bus->base + ASPEED_I2C_CMD_REG);
break;
case ASPEED_I2C_SLAVE_WRITE_REQUESTED:
bus->slave_state = ASPEED_I2C_SLAVE_WRITE_RECEIVED;
@@ -243,7 +243,7 @@
dev_err(bus->dev,
"irq handled != irq. expected %x, but was %x\n",
irq_status, status_ack);
- writel(status_ack, bus->base + ASPEED_I2C_INTR_STS_REG);
+ kunit_writel(status_ack, bus->base + ASPEED_I2C_INTR_STS_REG);
out:
return irq_handled;
@@ -267,15 +267,15 @@
command |= ASPEED_I2CD_M_S_RX_CMD_LAST;
}
- writel(slave_addr, bus->base + ASPEED_I2C_BYTE_BUF_REG);
- writel(command, bus->base + ASPEED_I2C_CMD_REG);
+ kunit_writel(slave_addr, bus->base + ASPEED_I2C_BYTE_BUF_REG);
+ kunit_writel(command, bus->base + ASPEED_I2C_CMD_REG);
}
/* precondition: bus.lock has been acquired. */
static void aspeed_i2c_do_stop(struct aspeed_i2c_bus *bus)
{
bus->master_state = ASPEED_I2C_MASTER_STOP;
- writel(ASPEED_I2CD_M_STOP_CMD, bus->base + ASPEED_I2C_CMD_REG);
+ kunit_writel(ASPEED_I2CD_M_STOP_CMD, bus->base + ASPEED_I2C_CMD_REG);
}
/* precondition: bus.lock has been acquired. */
@@ -309,9 +309,9 @@
u8 recv_byte;
int ret;
- irq_status = readl(bus->base + ASPEED_I2C_INTR_STS_REG);
+ irq_status = kunit_readl(bus->base + ASPEED_I2C_INTR_STS_REG);
/* Ack all interrupt bits. */
- writel(irq_status, bus->base + ASPEED_I2C_INTR_STS_REG);
+ kunit_writel(irq_status, bus->base + ASPEED_I2C_INTR_STS_REG);
if (irq_status & ASPEED_I2CD_INTR_BUS_RECOVER_DONE) {
bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
@@ -382,9 +382,9 @@
case ASPEED_I2C_MASTER_TX_FIRST:
if (bus->buf_index < msg->len) {
bus->master_state = ASPEED_I2C_MASTER_TX;
- writel(msg->buf[bus->buf_index++],
+ kunit_writel(msg->buf[bus->buf_index++],
bus->base + ASPEED_I2C_BYTE_BUF_REG);
- writel(ASPEED_I2CD_M_TX_CMD,
+ kunit_writel(ASPEED_I2CD_M_TX_CMD,
bus->base + ASPEED_I2C_CMD_REG);
} else {
aspeed_i2c_next_msg_or_stop(bus);
@@ -402,7 +402,7 @@
}
status_ack |= ASPEED_I2CD_INTR_RX_DONE;
- recv_byte = readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8;
+ recv_byte = kunit_readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8;
msg->buf[bus->buf_index++] = recv_byte;
if (msg->flags & I2C_M_RECV_LEN) {
@@ -421,7 +421,7 @@
command = ASPEED_I2CD_M_RX_CMD;
if (bus->buf_index + 1 == msg->len)
command |= ASPEED_I2CD_M_S_RX_CMD_LAST;
- writel(command, bus->base + ASPEED_I2C_CMD_REG);
+ kunit_writel(command, bus->base + ASPEED_I2C_CMD_REG);
} else {
aspeed_i2c_next_msg_or_stop(bus);
}
@@ -504,7 +504,7 @@
/* If bus is busy, attempt recovery. We assume a single master
* environment.
*/
- if (readl(bus->base + ASPEED_I2C_CMD_REG) & ASPEED_I2CD_BUS_BUSY_STS) {
+ if (kunit_readl(bus->base + ASPEED_I2C_CMD_REG) & ASPEED_I2CD_BUS_BUSY_STS) {
spin_unlock_irqrestore(&bus->lock, flags);
ret = aspeed_i2c_recover_bus(bus);
if (ret)
@@ -542,15 +542,15 @@
u32 addr_reg_val, func_ctrl_reg_val;
/* Set slave addr. */
- addr_reg_val = readl(bus->base + ASPEED_I2C_DEV_ADDR_REG);
+ addr_reg_val = kunit_readl(bus->base + ASPEED_I2C_DEV_ADDR_REG);
addr_reg_val &= ~ASPEED_I2CD_DEV_ADDR_MASK;
addr_reg_val |= slave_addr & ASPEED_I2CD_DEV_ADDR_MASK;
- writel(addr_reg_val, bus->base + ASPEED_I2C_DEV_ADDR_REG);
+ kunit_writel(addr_reg_val, bus->base + ASPEED_I2C_DEV_ADDR_REG);
/* Turn on slave mode. */
- func_ctrl_reg_val = readl(bus->base + ASPEED_I2C_FUN_CTRL_REG);
+ func_ctrl_reg_val = kunit_readl(bus->base + ASPEED_I2C_FUN_CTRL_REG);
func_ctrl_reg_val |= ASPEED_I2CD_SLAVE_EN;
- writel(func_ctrl_reg_val, bus->base + ASPEED_I2C_FUN_CTRL_REG);
+ kunit_writel(func_ctrl_reg_val, bus->base + ASPEED_I2C_FUN_CTRL_REG);
}
static int aspeed_i2c_reg_slave(struct i2c_client *client)
@@ -586,9 +586,9 @@
}
/* Turn off slave mode. */
- func_ctrl_reg_val = readl(bus->base + ASPEED_I2C_FUN_CTRL_REG);
+ func_ctrl_reg_val = kunit_readl(bus->base + ASPEED_I2C_FUN_CTRL_REG);
func_ctrl_reg_val &= ~ASPEED_I2CD_SLAVE_EN;
- writel(func_ctrl_reg_val, bus->base + ASPEED_I2C_FUN_CTRL_REG);
+ kunit_writel(func_ctrl_reg_val, bus->base + ASPEED_I2C_FUN_CTRL_REG);
bus->slave = NULL;
spin_unlock_irqrestore(&bus->lock, flags);
@@ -690,13 +690,13 @@
u32 divisor, clk_reg_val;
divisor = DIV_ROUND_UP(bus->parent_clk_frequency, bus->bus_frequency);
- clk_reg_val = readl(bus->base + ASPEED_I2C_AC_TIMING_REG1);
+ clk_reg_val = kunit_readl(bus->base + ASPEED_I2C_AC_TIMING_REG1);
clk_reg_val &= (ASPEED_I2CD_TIME_TBUF_MASK |
ASPEED_I2CD_TIME_THDSTA_MASK |
ASPEED_I2CD_TIME_TACST_MASK);
clk_reg_val |= bus->get_clk_reg_val(divisor);
- writel(clk_reg_val, bus->base + ASPEED_I2C_AC_TIMING_REG1);
- writel(ASPEED_NO_TIMEOUT_CTRL, bus->base + ASPEED_I2C_AC_TIMING_REG2);
+ kunit_writel(clk_reg_val, bus->base + ASPEED_I2C_AC_TIMING_REG1);
+ kunit_writel(ASPEED_NO_TIMEOUT_CTRL, bus->base + ASPEED_I2C_AC_TIMING_REG2);
return 0;
}
@@ -709,7 +709,7 @@
int ret;
/* Disable everything. */
- writel(0, bus->base + ASPEED_I2C_FUN_CTRL_REG);
+ kunit_writel(0, bus->base + ASPEED_I2C_FUN_CTRL_REG);
ret = aspeed_i2c_init_clk(bus);
if (ret < 0)
@@ -719,7 +719,7 @@
fun_ctrl_reg |= ASPEED_I2CD_MULTI_MASTER_DIS;
/* Enable Master Mode */
- writel(readl(bus->base + ASPEED_I2C_FUN_CTRL_REG) | fun_ctrl_reg,
+ kunit_writel(kunit_readl(bus->base + ASPEED_I2C_FUN_CTRL_REG) | fun_ctrl_reg,
bus->base + ASPEED_I2C_FUN_CTRL_REG);
#if IS_ENABLED(CONFIG_I2C_SLAVE)
@@ -729,7 +729,7 @@
#endif /* CONFIG_I2C_SLAVE */
/* Set interrupt generation of I2C controller */
- writel(ASPEED_I2CD_INTR_ALL, bus->base + ASPEED_I2C_INTR_CTRL_REG);
+ kunit_writel(ASPEED_I2CD_INTR_ALL, bus->base + ASPEED_I2C_INTR_CTRL_REG);
return 0;
}
@@ -743,8 +743,8 @@
spin_lock_irqsave(&bus->lock, flags);
/* Disable and ack all interrupts. */
- writel(0, bus->base + ASPEED_I2C_INTR_CTRL_REG);
- writel(0xffffffff, bus->base + ASPEED_I2C_INTR_STS_REG);
+ kunit_writel(0, bus->base + ASPEED_I2C_INTR_CTRL_REG);
+ kunit_writel(0xffffffff, bus->base + ASPEED_I2C_INTR_STS_REG);
ret = aspeed_i2c_init(bus, pdev);
@@ -827,8 +827,8 @@
bus->dev = &pdev->dev;
/* Clean up any left over interrupt state. */
- writel(0, bus->base + ASPEED_I2C_INTR_CTRL_REG);
- writel(0xffffffff, bus->base + ASPEED_I2C_INTR_STS_REG);
+ kunit_writel(0, bus->base + ASPEED_I2C_INTR_CTRL_REG);
+ kunit_writel(0xffffffff, bus->base + ASPEED_I2C_INTR_STS_REG);
/*
* bus.lock does not need to be held because the interrupt handler has
* not been enabled yet.
@@ -863,8 +863,8 @@
spin_lock_irqsave(&bus->lock, flags);
/* Disable everything. */
- writel(0, bus->base + ASPEED_I2C_FUN_CTRL_REG);
- writel(0, bus->base + ASPEED_I2C_INTR_CTRL_REG);
+ kunit_writel(0, bus->base + ASPEED_I2C_FUN_CTRL_REG);
+ kunit_writel(0, bus->base + ASPEED_I2C_INTR_CTRL_REG);
spin_unlock_irqrestore(&bus->lock, flags);
diff --git a/test/fake.c b/test/fake.c
index ffce16a..120b54c 100644
--- a/test/fake.c
+++ b/test/fake.c
@@ -97,11 +97,11 @@
fd->writel_action.do_action = fake_writel_action;
mock_set_default_action(mock_get_global_mock(),
- "readl",
- readl,
+ "kunit_readl",
+ kunit_readl,
&fd->readl_action);
mock_set_default_action(mock_get_global_mock(),
- "writel",
- writel,
+ "kunit_writel",
+ kunit_writel,
&fd->writel_action);
}