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);
 }