[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 15/21] hw/i2c/aspeed: add DEV_ADDR in old register mode
From: |
Cédric Le Goater |
Subject: |
[PATCH 15/21] hw/i2c/aspeed: add DEV_ADDR in old register mode |
Date: |
Mon, 6 Jun 2022 17:07:26 +0200 |
From: Klaus Jensen <k.jensen@samsung.com>
Add support for writing and reading the device address register in old
register mode.
On the AST2400 (only 1 slave address)
* no upper bits
On the AST2500 (2 possible slave addresses),
* bit[31] : Slave Address match indicator
* bit[30] : Slave Address Receiving pending
On the AST2600 (3 possible slave addresses),
* bit[31-30] : Slave Address match indicator
* bit[29] : Slave Address Receiving pending
The model could be more precise to take into account all fields but
since the Linux driver is masking the register value being set, it
should be fine. See commit 3fb2e2aeafb2 ("i2c: aspeed: disable
additional device addresses on ast2[56]xx") from Zeiv. This can be
addressed later.
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
[ clg: add details to commit log ]
Message-Id: <20220601210831.67259-3-its@irrelevant.dk>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
include/hw/i2c/aspeed_i2c.h | 8 ++++++++
hw/i2c/aspeed_i2c.c | 5 +++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/include/hw/i2c/aspeed_i2c.h b/include/hw/i2c/aspeed_i2c.h
index 79c6779c6c1e..03fe829a3a57 100644
--- a/include/hw/i2c/aspeed_i2c.h
+++ b/include/hw/i2c/aspeed_i2c.h
@@ -297,6 +297,14 @@ static inline uint32_t
aspeed_i2c_bus_cmd_offset(AspeedI2CBus *bus)
return R_I2CD_CMD;
}
+static inline uint32_t aspeed_i2c_bus_dev_addr_offset(AspeedI2CBus *bus)
+{
+ if (aspeed_i2c_is_new_mode(bus->controller)) {
+ return R_I2CS_DEV_ADDR;
+ }
+ return R_I2CD_DEV_ADDR;
+}
+
static inline uint32_t aspeed_i2c_bus_intr_ctrl_offset(AspeedI2CBus *bus)
{
if (aspeed_i2c_is_new_mode(bus->controller)) {
diff --git a/hw/i2c/aspeed_i2c.c b/hw/i2c/aspeed_i2c.c
index b70276a87360..379dbc1379cb 100644
--- a/hw/i2c/aspeed_i2c.c
+++ b/hw/i2c/aspeed_i2c.c
@@ -83,6 +83,7 @@ static uint64_t aspeed_i2c_bus_old_read(AspeedI2CBus *bus,
hwaddr offset,
case A_I2CD_AC_TIMING2:
case A_I2CD_INTR_CTRL:
case A_I2CD_INTR_STS:
+ case A_I2CD_DEV_ADDR:
case A_I2CD_POOL_CTRL:
case A_I2CD_BYTE_BUF:
/* Value is already set, don't do anything. */
@@ -720,8 +721,7 @@ static void aspeed_i2c_bus_old_write(AspeedI2CBus *bus,
hwaddr offset,
}
break;
case A_I2CD_DEV_ADDR:
- qemu_log_mask(LOG_UNIMP, "%s: slave mode not implemented\n",
- __func__);
+ bus->regs[R_I2CD_DEV_ADDR] = value;
break;
case A_I2CD_POOL_CTRL:
bus->regs[R_I2CD_POOL_CTRL] &= ~0xffffff;
@@ -1039,6 +1039,7 @@ static void aspeed_i2c_bus_reset(DeviceState *dev)
s->regs[R_I2CD_INTR_CTRL] = 0;
s->regs[R_I2CD_INTR_STS] = 0;
+ s->regs[R_I2CD_DEV_ADDR] = 0;
s->regs[R_I2CD_CMD] = 0;
s->regs[R_I2CD_BYTE_BUF] = 0;
s->regs[R_I2CD_DMA_ADDR] = 0;
--
2.35.3
- [PATCH 10/21] test/avocado/machine_aspeed.py: Add I2C tests to ast2600-evb, (continued)
- [PATCH 10/21] test/avocado/machine_aspeed.py: Add I2C tests to ast2600-evb, Cédric Le Goater, 2022/06/06
- [PATCH 11/21] test/avocado/machine_aspeed.py: Add an I2C RTC test, Cédric Le Goater, 2022/06/06
- [PATCH 12/21] aspeed/i2c: Add ast1030 controller models, Cédric Le Goater, 2022/06/06
- [PATCH 13/21] aspeed: Add I2C buses to AST1030 model, Cédric Le Goater, 2022/06/06
- [PATCH 14/21] hw/i2c/aspeed: rework raise interrupt trace event, Cédric Le Goater, 2022/06/06
- [PATCH 15/21] hw/i2c/aspeed: add DEV_ADDR in old register mode,
Cédric Le Goater <=
- [PATCH 16/21] hw/i2c: support multiple masters, Cédric Le Goater, 2022/06/06
- [PATCH 17/21] hw/i2c: add asynchronous send, Cédric Le Goater, 2022/06/06
- [PATCH 18/21] hw/i2c/aspeed: add slave device in old register mode, Cédric Le Goater, 2022/06/06
- [PATCH 19/21] aspeed/i2c: Enable SLAVE_ADDR_RX_MATCH always, Cédric Le Goater, 2022/06/06
- [PATCH 20/21] hw/misc: add a toy i2c echo device [DO NOT PULL], Cédric Le Goater, 2022/06/06
- [PATCH 21/21] test/avocado/machine_aspeed.py: Add I2C slave tests, Cédric Le Goater, 2022/06/06
- Re: [PATCH 00/21] aspeed: Extend ast2600 I2C model with new mode, Cédric Le Goater, 2022/06/19