All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joel Stanley <joel@jms.id.au>
To: "Cédric Le Goater" <clg@kaod.org>
Cc: qemu-arm <qemu-arm@nongnu.org>,
	"QEMU Developers" <qemu-devel@nongnu.org>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Joe Komlodi" <komlodi@google.com>,
	"Troy Lee" <troy_lee@aspeedtech.com>,
	"Jamin Lin" <jamin_lin@aspeedtech.com>,
	"Steven Lee" <steven_lee@aspeedtech.com>,
	"Klaus Jensen" <k.jensen@samsung.com>,
	"Peter Delevoryas" <pdel@fb.com>,
	"Corey Minyard" <cminyard@mvista.com>,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>,
	"Damien Hedde" <damien.hedde@greensocs.com>,
	"Andrew Jeffery" <andrew@aj.id.au>,
	"Cleber Rosa" <crosa@redhat.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
	"Beraldo Leal" <bleal@redhat.com>
Subject: Re: [PATCH 03/21] aspeed: i2c: Migrate to registerfields API
Date: Mon, 6 Jun 2022 23:29:58 +0000	[thread overview]
Message-ID: <CACPK8XdQ5pqn3DjPgoVgXiA8Pk7=7Oqm0sPKbEN-wPdZEwyHzQ@mail.gmail.com> (raw)
In-Reply-To: <20220606150732.2282041-4-clg@kaod.org>

On Mon, 6 Jun 2022 at 15:08, Cédric Le Goater <clg@kaod.org> wrote:
>
> From: Joe Komlodi <komlodi@google.com>
>
> This cleans up some of the field accessing, setting, and clearing
> bitwise operations, and wraps them in macros instead.

I don't really like this change, as it adds more project-specific
"jargon" to the models.

It's clumsy in that we can no longer take a case from our switch
statements and grep for it:

 git grep A_I2CD_FUN_CTRL

Don't consider this a nak, but I felt it was worth explaining.

>
> Signed-off-by: Joe Komlodi <komlodi@google.com>
> Change-Id: I33018d6325fa04376e7c29dc4a49ab389a8e333a
> Message-Id: <20220331043248.2237838-4-komlodi@google.com>
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
> ---
>  hw/i2c/aspeed_i2c.c | 393 ++++++++++++++++++++++----------------------
>  1 file changed, 196 insertions(+), 197 deletions(-)
>
> diff --git a/hw/i2c/aspeed_i2c.c b/hw/i2c/aspeed_i2c.c
> index 97eb9d57929c..be81a798cc35 100644
> --- a/hw/i2c/aspeed_i2c.c
> +++ b/hw/i2c/aspeed_i2c.c
> @@ -28,70 +28,61 @@
>  #include "hw/i2c/aspeed_i2c.h"
>  #include "hw/irq.h"
>  #include "hw/qdev-properties.h"
> +#include "hw/registerfields.h"
>  #include "trace.h"
>
>  /* I2C Global Register */
> -
> -#define I2C_CTRL_STATUS         0x00        /* Device Interrupt Status */
> -#define I2C_CTRL_ASSIGN         0x08        /* Device Interrupt Target
> -                                               Assignment */
> -#define I2C_CTRL_GLOBAL         0x0C        /* Global Control Register */
> -#define   I2C_CTRL_SRAM_EN                 BIT(0)
> +REG32(I2C_CTRL_STATUS, 0x0) /* Device Interrupt Status */
> +REG32(I2C_CTRL_ASSIGN, 0x8) /* Device Interrupt Target Assignment */
> +REG32(I2C_CTRL_GLOBAL, 0xC) /* Global Control Register */
> +    FIELD(I2C_CTRL_GLOBAL, SRAM_EN, 0, 1)
>
>  /* I2C Device (Bus) Register */
> -
> -#define I2CD_FUN_CTRL_REG       0x00       /* I2CD Function Control  */
> -#define   I2CD_POOL_PAGE_SEL(x)            (((x) >> 20) & 0x7)  /* AST2400 */
> -#define   I2CD_M_SDA_LOCK_EN               (0x1 << 16)
> -#define   I2CD_MULTI_MASTER_DIS            (0x1 << 15)
> -#define   I2CD_M_SCL_DRIVE_EN              (0x1 << 14)
> -#define   I2CD_MSB_STS                     (0x1 << 9)
> -#define   I2CD_SDA_DRIVE_1T_EN             (0x1 << 8)
> -#define   I2CD_M_SDA_DRIVE_1T_EN           (0x1 << 7)
> -#define   I2CD_M_HIGH_SPEED_EN             (0x1 << 6)
> -#define   I2CD_DEF_ADDR_EN                 (0x1 << 5)
> -#define   I2CD_DEF_ALERT_EN                (0x1 << 4)
> -#define   I2CD_DEF_ARP_EN                  (0x1 << 3)
> -#define   I2CD_DEF_GCALL_EN                (0x1 << 2)
> -#define   I2CD_SLAVE_EN                    (0x1 << 1)
> -#define   I2CD_MASTER_EN                   (0x1)
> -
> -#define I2CD_AC_TIMING_REG1     0x04       /* Clock and AC Timing Control #1 */
> -#define I2CD_AC_TIMING_REG2     0x08       /* Clock and AC Timing Control #1 */
> -#define I2CD_INTR_CTRL_REG      0x0c       /* I2CD Interrupt Control */
> -#define I2CD_INTR_STS_REG       0x10       /* I2CD Interrupt Status */
> -
> -#define   I2CD_INTR_SLAVE_ADDR_MATCH       (0x1 << 31) /* 0: addr1 1: addr2 */
> -#define   I2CD_INTR_SLAVE_ADDR_RX_PENDING  (0x1 << 30)
> -/* bits[19-16] Reserved */
> -
> -/* All bits below are cleared by writing 1 */
> -#define   I2CD_INTR_SLAVE_INACTIVE_TIMEOUT (0x1 << 15)
> -#define   I2CD_INTR_SDA_DL_TIMEOUT         (0x1 << 14)
> -#define   I2CD_INTR_BUS_RECOVER_DONE       (0x1 << 13)
> -#define   I2CD_INTR_SMBUS_ALERT            (0x1 << 12) /* Bus [0-3] only */
> -#define   I2CD_INTR_SMBUS_ARP_ADDR         (0x1 << 11) /* Removed */
> -#define   I2CD_INTR_SMBUS_DEV_ALERT_ADDR   (0x1 << 10) /* Removed */
> -#define   I2CD_INTR_SMBUS_DEF_ADDR         (0x1 << 9)  /* Removed */
> -#define   I2CD_INTR_GCALL_ADDR             (0x1 << 8)  /* Removed */
> -#define   I2CD_INTR_SLAVE_ADDR_RX_MATCH    (0x1 << 7)  /* use RX_DONE */
> -#define   I2CD_INTR_SCL_TIMEOUT            (0x1 << 6)
> -#define   I2CD_INTR_ABNORMAL               (0x1 << 5)
> -#define   I2CD_INTR_NORMAL_STOP            (0x1 << 4)
> -#define   I2CD_INTR_ARBIT_LOSS             (0x1 << 3)
> -#define   I2CD_INTR_RX_DONE                (0x1 << 2)
> -#define   I2CD_INTR_TX_NAK                 (0x1 << 1)
> -#define   I2CD_INTR_TX_ACK                 (0x1 << 0)
> -
> -#define I2CD_CMD_REG            0x14       /* I2CD Command/Status */
> -#define   I2CD_SDA_OE                      (0x1 << 28)
> -#define   I2CD_SDA_O                       (0x1 << 27)
> -#define   I2CD_SCL_OE                      (0x1 << 26)
> -#define   I2CD_SCL_O                       (0x1 << 25)
> -#define   I2CD_TX_TIMING                   (0x1 << 24)
> -#define   I2CD_TX_STATUS                   (0x1 << 23)
> -
> -#define   I2CD_TX_STATE_SHIFT              19 /* Tx State Machine */
> +REG32(I2CD_FUN_CTRL, 0x0) /* I2CD Function Control  */
> +    FIELD(I2CD_FUN_CTRL, POOL_PAGE_SEL, 20, 3) /* AST2400 */
> +    FIELD(I2CD_FUN_CTRL, M_SDA_LOCK_EN, 16, 1)
> +    FIELD(I2CD_FUN_CTRL, MULTI_MASTER_DIS, 15, 1)
> +    FIELD(I2CD_FUN_CTRL, M_SCL_DRIVE_EN, 14, 1)
> +    FIELD(I2CD_FUN_CTRL, MSB_STS, 9, 1)
> +    FIELD(I2CD_FUN_CTRL, SDA_DRIVE_IT_EN, 8, 1)
> +    FIELD(I2CD_FUN_CTRL, M_SDA_DRIVE_IT_EN, 7, 1)
> +    FIELD(I2CD_FUN_CTRL, M_HIGH_SPEED_EN, 6, 1)
> +    FIELD(I2CD_FUN_CTRL, DEF_ADDR_EN, 5, 1)
> +    FIELD(I2CD_FUN_CTRL, DEF_ALERT_EN, 4, 1)
> +    FIELD(I2CD_FUN_CTRL, DEF_ARP_EN, 3, 1)
> +    FIELD(I2CD_FUN_CTRL, DEF_GCALL_EN, 2, 1)
> +    FIELD(I2CD_FUN_CTRL, SLAVE_EN, 1, 1)
> +    FIELD(I2CD_FUN_CTRL, MASTER_EN, 0, 1)
> +REG32(I2CD_AC_TIMING1, 0x04) /* Clock and AC Timing Control #1 */
> +REG32(I2CD_AC_TIMING2, 0x08) /* Clock and AC Timing Control #2 */
> +REG32(I2CD_INTR_CTRL, 0x0C)  /* I2CD Interrupt Control */
> +REG32(I2CD_INTR_STS, 0x10)   /* I2CD Interrupt Status */
> +    FIELD(I2CD_INTR_STS, SLAVE_ADDR_MATCH, 31, 1)    /* 0: addr1 1: addr2 */
> +    FIELD(I2CD_INTR_STS, SLAVE_ADDR_RX_PENDING, 29, 1)
> +    FIELD(I2CD_INTR_STS, SLAVE_INACTIVE_TIMEOUT, 15, 1)
> +    FIELD(I2CD_INTR_STS, SDA_DL_TIMEOUT, 14, 1)
> +    FIELD(I2CD_INTR_STS, BUS_RECOVER_DONE, 13, 1)
> +    FIELD(I2CD_INTR_STS, SMBUS_ALERT, 12, 1)            /* Bus [0-3] only */
> +    FIELD(I2CD_INTR_STS, SMBUS_ARP_ADDR, 11, 1)         /* Removed */
> +    FIELD(I2CD_INTR_STS, SMBUS_DEV_ALERT_ADDR, 10, 1)   /* Removed */
> +    FIELD(I2CD_INTR_STS, SMBUS_DEF_ADDR, 9, 1)          /* Removed */
> +    FIELD(I2CD_INTR_STS, GCALL_ADDR, 8, 1)              /* Removed */
> +    FIELD(I2CD_INTR_STS, SLAVE_ADDR_RX_MATCH, 7, 1)     /* use RX_DONE */
> +    FIELD(I2CD_INTR_STS, SCL_TIMEOUT, 6, 1)
> +    FIELD(I2CD_INTR_STS, ABNORMAL, 5, 1)
> +    FIELD(I2CD_INTR_STS, NORMAL_STOP, 4, 1)
> +    FIELD(I2CD_INTR_STS, ARBIT_LOSS, 3, 1)
> +    FIELD(I2CD_INTR_STS, RX_DONE, 2, 1)
> +    FIELD(I2CD_INTR_STS, TX_NAK, 1, 1)
> +    FIELD(I2CD_INTR_STS, TX_ACK, 0, 1)
> +REG32(I2CD_CMD, 0x14) /* I2CD Command/Status */
> +    FIELD(I2CD_CMD, SDA_OE, 28, 1)
> +    FIELD(I2CD_CMD, SDA_O, 27, 1)
> +    FIELD(I2CD_CMD, SCL_OE, 26, 1)
> +    FIELD(I2CD_CMD, SCL_O, 25, 1)
> +    FIELD(I2CD_CMD, TX_TIMING, 23, 2)
> +    FIELD(I2CD_CMD, TX_STATE, 19, 4)
> +/* Tx State Machine */
>  #define   I2CD_TX_STATE_MASK                  0xf
>  #define     I2CD_IDLE                         0x0
>  #define     I2CD_MACTIVE                      0x8
> @@ -108,51 +99,47 @@
>  #define     I2CD_STXD                         0x6
>  #define     I2CD_SRXACK                       0x7
>  #define     I2CD_RECOVER                      0x3
> -
> -#define   I2CD_SCL_LINE_STS                (0x1 << 18)
> -#define   I2CD_SDA_LINE_STS                (0x1 << 17)
> -#define   I2CD_BUS_BUSY_STS                (0x1 << 16)
> -#define   I2CD_SDA_OE_OUT_DIR              (0x1 << 15)
> -#define   I2CD_SDA_O_OUT_DIR               (0x1 << 14)
> -#define   I2CD_SCL_OE_OUT_DIR              (0x1 << 13)
> -#define   I2CD_SCL_O_OUT_DIR               (0x1 << 12)
> -#define   I2CD_BUS_RECOVER_CMD_EN          (0x1 << 11)
> -#define   I2CD_S_ALT_EN                    (0x1 << 10)
> -
> -/* Command Bit */
> -#define   I2CD_RX_DMA_ENABLE               (0x1 << 9)
> -#define   I2CD_TX_DMA_ENABLE               (0x1 << 8)
> -#define   I2CD_RX_BUFF_ENABLE              (0x1 << 7)
> -#define   I2CD_TX_BUFF_ENABLE              (0x1 << 6)
> -#define   I2CD_M_STOP_CMD                  (0x1 << 5)
> -#define   I2CD_M_S_RX_CMD_LAST             (0x1 << 4)
> -#define   I2CD_M_RX_CMD                    (0x1 << 3)
> -#define   I2CD_S_TX_CMD                    (0x1 << 2)
> -#define   I2CD_M_TX_CMD                    (0x1 << 1)
> -#define   I2CD_M_START_CMD                 (0x1)
> -
> -#define I2CD_DEV_ADDR_REG       0x18       /* Slave Device Address */
> -#define I2CD_POOL_CTRL_REG      0x1c       /* Pool Buffer Control */
> -#define   I2CD_POOL_RX_COUNT(x)            (((x) >> 24) & 0xff)
> -#define   I2CD_POOL_RX_SIZE(x)             ((((x) >> 16) & 0xff) + 1)
> -#define   I2CD_POOL_TX_COUNT(x)            ((((x) >> 8) & 0xff) + 1)
> -#define   I2CD_POOL_OFFSET(x)              (((x) & 0x3f) << 2)  /* AST2400 */
> -#define I2CD_BYTE_BUF_REG       0x20       /* Transmit/Receive Byte Buffer */
> -#define   I2CD_BYTE_BUF_TX_SHIFT           0
> -#define   I2CD_BYTE_BUF_TX_MASK            0xff
> -#define   I2CD_BYTE_BUF_RX_SHIFT           8
> -#define   I2CD_BYTE_BUF_RX_MASK            0xff
> -#define I2CD_DMA_ADDR           0x24       /* DMA Buffer Address */
> -#define I2CD_DMA_LEN            0x28       /* DMA Transfer Length < 4KB */
> +    FIELD(I2CD_CMD, SCL_LINE_STS, 18, 1)
> +    FIELD(I2CD_CMD, SDA_LINE_STS, 17, 1)
> +    FIELD(I2CD_CMD, BUS_BUSY_STS, 16, 1)
> +    FIELD(I2CD_CMD, SDA_OE_OUT_DIR, 15, 1)
> +    FIELD(I2CD_CMD, SDA_O_OUT_DIR, 14, 1)
> +    FIELD(I2CD_CMD, SCL_OE_OUT_DIR, 13, 1)
> +    FIELD(I2CD_CMD, SCL_O_OUT_DIR, 12, 1)
> +    FIELD(I2CD_CMD, BUS_RECOVER_CMD_EN, 11, 1)
> +    FIELD(I2CD_CMD, S_ALT_EN, 10, 1)
> +    /* Command Bits */
> +    FIELD(I2CD_CMD, RX_DMA_EN, 9, 1)
> +    FIELD(I2CD_CMD, TX_DMA_EN, 8, 1)
> +    FIELD(I2CD_CMD, RX_BUFF_EN, 7, 1)
> +    FIELD(I2CD_CMD, TX_BUFF_EN, 6, 1)
> +    FIELD(I2CD_CMD, M_STOP_CMD, 5, 1)
> +    FIELD(I2CD_CMD, M_S_RX_CMD_LAST, 4, 1)
> +    FIELD(I2CD_CMD, M_RX_CMD, 3, 1)
> +    FIELD(I2CD_CMD, S_TX_CMD, 2, 1)
> +    FIELD(I2CD_CMD, M_TX_CMD, 1, 1)
> +    FIELD(I2CD_CMD, M_START_CMD, 0, 1)
> +REG32(I2CD_DEV_ADDR, 0x18) /* Slave Device Address */
> +REG32(I2CD_POOL_CTRL, 0x1C) /* Pool Buffer Control */
> +    FIELD(I2CD_POOL_CTRL, RX_COUNT, 24, 5)
> +    FIELD(I2CD_POOL_CTRL, RX_SIZE, 16, 5)
> +    FIELD(I2CD_POOL_CTRL, TX_COUNT, 9, 5)
> +    FIELD(I2CD_POOL_CTRL, OFFSET, 2, 6) /* AST2400 */
> +REG32(I2CD_BYTE_BUF, 0x20) /* Transmit/Receive Byte Buffer */
> +    FIELD(I2CD_BYTE_BUF, RX_BUF, 8, 8)
> +    FIELD(I2CD_BYTE_BUF, TX_BUF, 0, 8)
> +REG32(I2CD_DMA_ADDR, 0x24) /* DMA Buffer Address */
> +REG32(I2CD_DMA_LEN, 0x28) /* DMA Transfer Length < 4KB */
>
>  static inline bool aspeed_i2c_bus_is_master(AspeedI2CBus *bus)
>  {
> -    return bus->ctrl & I2CD_MASTER_EN;
> +    return FIELD_EX32(bus->ctrl, I2CD_FUN_CTRL, MASTER_EN);
>  }
>
>  static inline bool aspeed_i2c_bus_is_enabled(AspeedI2CBus *bus)
>  {
> -    return bus->ctrl & (I2CD_MASTER_EN | I2CD_SLAVE_EN);
> +    return FIELD_EX32(bus->ctrl, I2CD_FUN_CTRL, MASTER_EN) ||
> +           FIELD_EX32(bus->ctrl, I2CD_FUN_CTRL, SLAVE_EN);
>  }
>
>  static inline void aspeed_i2c_bus_raise_interrupt(AspeedI2CBus *bus)
> @@ -160,11 +147,13 @@ static inline void aspeed_i2c_bus_raise_interrupt(AspeedI2CBus *bus)
>      AspeedI2CClass *aic = ASPEED_I2C_GET_CLASS(bus->controller);
>
>      trace_aspeed_i2c_bus_raise_interrupt(bus->intr_status,
> -          bus->intr_status & I2CD_INTR_TX_NAK ? "nak|" : "",
> -          bus->intr_status & I2CD_INTR_TX_ACK ? "ack|" : "",
> -          bus->intr_status & I2CD_INTR_RX_DONE ? "done|" : "",
> -          bus->intr_status & I2CD_INTR_NORMAL_STOP ? "normal|" : "",
> -          bus->intr_status & I2CD_INTR_ABNORMAL ? "abnormal" : "");
> +        FIELD_EX32(bus->intr_status, I2CD_INTR_STS, TX_NAK) ? "nak|" : "",
> +        FIELD_EX32(bus->intr_status, I2CD_INTR_STS, TX_ACK) ? "ack|" : "",
> +        FIELD_EX32(bus->intr_status, I2CD_INTR_STS, RX_DONE) ? "done|" : "",
> +        FIELD_EX32(bus->intr_status, I2CD_INTR_STS, NORMAL_STOP) ? "normal|"
> +                                                                 : "",
> +        FIELD_EX32(bus->intr_status, I2CD_INTR_STS, ABNORMAL) ? "abnormal"
> +                                                              : "");
>
>      bus->intr_status &= bus->intr_ctrl;
>      if (bus->intr_status) {
> @@ -181,38 +170,38 @@ static uint64_t aspeed_i2c_bus_read(void *opaque, hwaddr offset,
>      uint64_t value = -1;
>
>      switch (offset) {
> -    case I2CD_FUN_CTRL_REG:
> +    case A_I2CD_FUN_CTRL:
>          value = bus->ctrl;
>          break;
> -    case I2CD_AC_TIMING_REG1:
> +    case A_I2CD_AC_TIMING1:
>          value = bus->timing[0];
>          break;
> -    case I2CD_AC_TIMING_REG2:
> +    case A_I2CD_AC_TIMING2:
>          value = bus->timing[1];
>          break;
> -    case I2CD_INTR_CTRL_REG:
> +    case A_I2CD_INTR_CTRL:
>          value = bus->intr_ctrl;
>          break;
> -    case I2CD_INTR_STS_REG:
> +    case A_I2CD_INTR_STS:
>          value = bus->intr_status;
>          break;
> -    case I2CD_POOL_CTRL_REG:
> +    case A_I2CD_POOL_CTRL:
>          value = bus->pool_ctrl;
>          break;
> -    case I2CD_BYTE_BUF_REG:
> +    case A_I2CD_BYTE_BUF:
>          value = bus->buf;
>          break;
> -    case I2CD_CMD_REG:
> +    case A_I2CD_CMD:
>          value = bus->cmd | (i2c_bus_busy(bus->bus) << 16);
>          break;
> -    case I2CD_DMA_ADDR:
> +    case A_I2CD_DMA_ADDR:
>          if (!aic->has_dma) {
>              qemu_log_mask(LOG_GUEST_ERROR, "%s: No DMA support\n",  __func__);
>              break;
>          }
>          value = bus->dma_addr;
>          break;
> -    case I2CD_DMA_LEN:
> +    case A_I2CD_DMA_LEN:
>          if (!aic->has_dma) {
>              qemu_log_mask(LOG_GUEST_ERROR, "%s: No DMA support\n",  __func__);
>              break;
> @@ -233,13 +222,12 @@ static uint64_t aspeed_i2c_bus_read(void *opaque, hwaddr offset,
>
>  static void aspeed_i2c_set_state(AspeedI2CBus *bus, uint8_t state)
>  {
> -    bus->cmd &= ~(I2CD_TX_STATE_MASK << I2CD_TX_STATE_SHIFT);
> -    bus->cmd |= (state & I2CD_TX_STATE_MASK) << I2CD_TX_STATE_SHIFT;
> +    bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, TX_STATE, state);
>  }
>
>  static uint8_t aspeed_i2c_get_state(AspeedI2CBus *bus)
>  {
> -    return (bus->cmd >> I2CD_TX_STATE_SHIFT) & I2CD_TX_STATE_MASK;
> +    return FIELD_EX32(bus->cmd, I2CD_CMD, TX_STATE);
>  }
>
>  static int aspeed_i2c_dma_read(AspeedI2CBus *bus, uint8_t *data)
> @@ -265,21 +253,21 @@ static int aspeed_i2c_bus_send(AspeedI2CBus *bus, uint8_t pool_start)
>      AspeedI2CClass *aic = ASPEED_I2C_GET_CLASS(bus->controller);
>      int ret = -1;
>      int i;
> +    int pool_tx_count = FIELD_EX32(bus->pool_ctrl, I2CD_POOL_CTRL, TX_COUNT);
>
> -    if (bus->cmd & I2CD_TX_BUFF_ENABLE) {
> -        for (i = pool_start; i < I2CD_POOL_TX_COUNT(bus->pool_ctrl); i++) {
> +    if (FIELD_EX32(bus->cmd, I2CD_CMD, TX_BUFF_EN)) {
> +        for (i = pool_start; i < pool_tx_count; i++) {
>              uint8_t *pool_base = aic->bus_pool_base(bus);
>
> -            trace_aspeed_i2c_bus_send("BUF", i + 1,
> -                                      I2CD_POOL_TX_COUNT(bus->pool_ctrl),
> +            trace_aspeed_i2c_bus_send("BUF", i + 1, pool_tx_count,
>                                        pool_base[i]);
>              ret = i2c_send(bus->bus, pool_base[i]);
>              if (ret) {
>                  break;
>              }
>          }
> -        bus->cmd &= ~I2CD_TX_BUFF_ENABLE;
> -    } else if (bus->cmd & I2CD_TX_DMA_ENABLE) {
> +        bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, TX_BUFF_EN, 0);
> +    } else if (FIELD_EX32(bus->cmd, I2CD_CMD, TX_DMA_EN)) {
>          while (bus->dma_len) {
>              uint8_t data;
>              aspeed_i2c_dma_read(bus, &data);
> @@ -289,7 +277,7 @@ static int aspeed_i2c_bus_send(AspeedI2CBus *bus, uint8_t pool_start)
>                  break;
>              }
>          }
> -        bus->cmd &= ~I2CD_TX_DMA_ENABLE;
> +        bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, TX_DMA_EN, 0);
>      } else {
>          trace_aspeed_i2c_bus_send("BYTE", pool_start, 1, bus->buf);
>          ret = i2c_send(bus->bus, bus->buf);
> @@ -304,22 +292,22 @@ static void aspeed_i2c_bus_recv(AspeedI2CBus *bus)
>      AspeedI2CClass *aic = ASPEED_I2C_GET_CLASS(s);
>      uint8_t data;
>      int i;
> +    int pool_rx_count = FIELD_EX32(bus->pool_ctrl, I2CD_POOL_CTRL, RX_COUNT);
>
> -    if (bus->cmd & I2CD_RX_BUFF_ENABLE) {
> +    if (FIELD_EX32(bus->cmd, I2CD_CMD, RX_BUFF_EN)) {
>          uint8_t *pool_base = aic->bus_pool_base(bus);
>
> -        for (i = 0; i < I2CD_POOL_RX_SIZE(bus->pool_ctrl); i++) {
> +        for (i = 0; i < pool_rx_count; i++) {
>              pool_base[i] = i2c_recv(bus->bus);
> -            trace_aspeed_i2c_bus_recv("BUF", i + 1,
> -                                      I2CD_POOL_RX_SIZE(bus->pool_ctrl),
> +            trace_aspeed_i2c_bus_recv("BUF", i + 1, pool_rx_count,
>                                        pool_base[i]);
>          }
>
>          /* Update RX count */
> -        bus->pool_ctrl &= ~(0xff << 24);
> -        bus->pool_ctrl |= (i & 0xff) << 24;
> -        bus->cmd &= ~I2CD_RX_BUFF_ENABLE;
> -    } else if (bus->cmd & I2CD_RX_DMA_ENABLE) {
> +        bus->pool_ctrl = FIELD_DP32(bus->pool_ctrl, I2CD_POOL_CTRL, RX_COUNT,
> +                                    i & 0xff);
> +        bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, RX_BUFF_EN, 0);
> +    } else if (FIELD_EX32(bus->cmd, I2CD_CMD, RX_DMA_EN)) {
>          uint8_t data;
>
>          while (bus->dma_len) {
> @@ -337,11 +325,11 @@ static void aspeed_i2c_bus_recv(AspeedI2CBus *bus)
>              bus->dma_addr++;
>              bus->dma_len--;
>          }
> -        bus->cmd &= ~I2CD_RX_DMA_ENABLE;
> +        bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, RX_DMA_EN, 0);
>      } else {
>          data = i2c_recv(bus->bus);
>          trace_aspeed_i2c_bus_recv("BYTE", 1, 1, bus->buf);
> -        bus->buf = (data & I2CD_BYTE_BUF_RX_MASK) << I2CD_BYTE_BUF_RX_SHIFT;
> +        bus->buf = FIELD_DP32(bus->buf, I2CD_BYTE_BUF, RX_BUF, data);
>      }
>  }
>
> @@ -349,11 +337,12 @@ static void aspeed_i2c_handle_rx_cmd(AspeedI2CBus *bus)
>  {
>      aspeed_i2c_set_state(bus, I2CD_MRXD);
>      aspeed_i2c_bus_recv(bus);
> -    bus->intr_status |= I2CD_INTR_RX_DONE;
> -    if (bus->cmd & I2CD_M_S_RX_CMD_LAST) {
> +    bus->intr_status = FIELD_DP32(bus->intr_status, I2CD_INTR_STS, RX_DONE, 1);
> +    if (FIELD_EX32(bus->cmd, I2CD_CMD, M_S_RX_CMD_LAST)) {
>          i2c_nack(bus->bus);
>      }
> -    bus->cmd &= ~(I2CD_M_RX_CMD | I2CD_M_S_RX_CMD_LAST);
> +    bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, M_RX_CMD, 0);
> +    bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, M_S_RX_CMD_LAST, 0);
>      aspeed_i2c_set_state(bus, I2CD_MACTIVE);
>  }
>
> @@ -361,11 +350,11 @@ static uint8_t aspeed_i2c_get_addr(AspeedI2CBus *bus)
>  {
>      AspeedI2CClass *aic = ASPEED_I2C_GET_CLASS(bus->controller);
>
> -    if (bus->cmd & I2CD_TX_BUFF_ENABLE) {
> +    if (FIELD_EX32(bus->cmd, I2CD_CMD, TX_BUFF_EN)) {
>          uint8_t *pool_base = aic->bus_pool_base(bus);
>
>          return pool_base[0];
> -    } else if (bus->cmd & I2CD_TX_DMA_ENABLE) {
> +    } else if (FIELD_EX32(bus->cmd, I2CD_CMD, TX_DMA_EN)) {
>          uint8_t data;
>
>          aspeed_i2c_dma_read(bus, &data);
> @@ -379,7 +368,10 @@ static bool aspeed_i2c_check_sram(AspeedI2CBus *bus)
>  {
>      AspeedI2CState *s = bus->controller;
>      AspeedI2CClass *aic = ASPEED_I2C_GET_CLASS(s);
> -
> +    bool dma_en = FIELD_EX32(bus->cmd, I2CD_CMD, RX_DMA_EN)  ||
> +                  FIELD_EX32(bus->cmd, I2CD_CMD, TX_DMA_EN)  ||
> +                  FIELD_EX32(bus->cmd, I2CD_CMD, RX_BUFF_EN) ||
> +                  FIELD_EX32(bus->cmd, I2CD_CMD, TX_BUFF_EN);
>      if (!aic->check_sram) {
>          return true;
>      }
> @@ -388,9 +380,7 @@ static bool aspeed_i2c_check_sram(AspeedI2CBus *bus)
>       * AST2500: SRAM must be enabled before using the Buffer Pool or
>       * DMA mode.
>       */
> -    if (!(s->ctrl_global & I2C_CTRL_SRAM_EN) &&
> -        (bus->cmd & (I2CD_RX_DMA_ENABLE | I2CD_TX_DMA_ENABLE |
> -                     I2CD_RX_BUFF_ENABLE | I2CD_TX_BUFF_ENABLE))) {
> +    if (!FIELD_EX32(s->ctrl_global, I2C_CTRL_GLOBAL, SRAM_EN) && dma_en) {
>          qemu_log_mask(LOG_GUEST_ERROR, "%s: SRAM is not enabled\n", __func__);
>          return false;
>      }
> @@ -402,25 +392,24 @@ static void aspeed_i2c_bus_cmd_dump(AspeedI2CBus *bus)
>  {
>      g_autofree char *cmd_flags = NULL;
>      uint32_t count;
> -
> -    if (bus->cmd & (I2CD_RX_BUFF_ENABLE | I2CD_RX_BUFF_ENABLE)) {
> -        count = I2CD_POOL_TX_COUNT(bus->pool_ctrl);
> -    } else if (bus->cmd & (I2CD_RX_DMA_ENABLE | I2CD_RX_DMA_ENABLE)) {
> +    if (FIELD_EX32(bus->cmd, I2CD_CMD, RX_BUFF_EN)) {
> +        count = FIELD_EX32(bus->pool_ctrl, I2CD_POOL_CTRL, TX_COUNT);
> +    } else if (FIELD_EX32(bus->cmd, I2CD_CMD, RX_DMA_EN)) {
>          count = bus->dma_len;
>      } else { /* BYTE mode */
>          count = 1;
>      }
>
>      cmd_flags = g_strdup_printf("%s%s%s%s%s%s%s%s%s",
> -                                bus->cmd & I2CD_M_START_CMD ? "start|" : "",
> -                                bus->cmd & I2CD_RX_DMA_ENABLE ? "rxdma|" : "",
> -                                bus->cmd & I2CD_TX_DMA_ENABLE ? "txdma|" : "",
> -                                bus->cmd & I2CD_RX_BUFF_ENABLE ? "rxbuf|" : "",
> -                                bus->cmd & I2CD_TX_BUFF_ENABLE ? "txbuf|" : "",
> -                                bus->cmd & I2CD_M_TX_CMD ? "tx|" : "",
> -                                bus->cmd & I2CD_M_RX_CMD ? "rx|" : "",
> -                                bus->cmd & I2CD_M_S_RX_CMD_LAST ? "last|" : "",
> -                                bus->cmd & I2CD_M_STOP_CMD ? "stop" : "");
> +             FIELD_EX32(bus->cmd, I2CD_CMD, M_START_CMD) ? "start|" : "",
> +             FIELD_EX32(bus->cmd, I2CD_CMD, RX_DMA_EN) ? "rxdma|" : "",
> +             FIELD_EX32(bus->cmd, I2CD_CMD, TX_DMA_EN) ? "txdma|" : "",
> +             FIELD_EX32(bus->cmd, I2CD_CMD, RX_BUFF_EN) ? "rxbuf|" : "",
> +             FIELD_EX32(bus->cmd, I2CD_CMD, TX_BUFF_EN) ? "txbuf|" : "",
> +             FIELD_EX32(bus->cmd, I2CD_CMD, M_TX_CMD) ? "tx|" : "",
> +             FIELD_EX32(bus->cmd, I2CD_CMD, M_RX_CMD) ? "rx|" : "",
> +             FIELD_EX32(bus->cmd, I2CD_CMD, M_S_RX_CMD_LAST) ? "last|" : "",
> +             FIELD_EX32(bus->cmd, I2CD_CMD, M_STOP_CMD) ? "stop" : "");
>
>      trace_aspeed_i2c_bus_cmd(bus->cmd, cmd_flags, count, bus->intr_status);
>  }
> @@ -444,7 +433,7 @@ static void aspeed_i2c_bus_handle_cmd(AspeedI2CBus *bus, uint64_t value)
>          aspeed_i2c_bus_cmd_dump(bus);
>      }
>
> -    if (bus->cmd & I2CD_M_START_CMD) {
> +    if (FIELD_EX32(bus->cmd, I2CD_CMD, M_START_CMD)) {
>          uint8_t state = aspeed_i2c_get_state(bus) & I2CD_MACTIVE ?
>              I2CD_MSTARTR : I2CD_MSTART;
>          uint8_t addr;
> @@ -455,21 +444,23 @@ static void aspeed_i2c_bus_handle_cmd(AspeedI2CBus *bus, uint64_t value)
>
>          if (i2c_start_transfer(bus->bus, extract32(addr, 1, 7),
>                                 extract32(addr, 0, 1))) {
> -            bus->intr_status |= I2CD_INTR_TX_NAK;
> +            bus->intr_status = FIELD_DP32(bus->intr_status, I2CD_INTR_STS,
> +                                          TX_NAK, 1);
>          } else {
> -            bus->intr_status |= I2CD_INTR_TX_ACK;
> +            bus->intr_status = FIELD_DP32(bus->intr_status, I2CD_INTR_STS,
> +                                          TX_ACK, 1);
>          }
>
> -        bus->cmd &= ~I2CD_M_START_CMD;
> +        bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, M_START_CMD, 0);
>
>          /*
>           * The START command is also a TX command, as the slave
>           * address is sent on the bus. Drop the TX flag if nothing
>           * else needs to be sent in this sequence.
>           */
> -        if (bus->cmd & I2CD_TX_BUFF_ENABLE) {
> -            if (I2CD_POOL_TX_COUNT(bus->pool_ctrl) == 1) {
> -                bus->cmd &= ~I2CD_M_TX_CMD;
> +        if (FIELD_EX32(bus->cmd, I2CD_CMD, TX_BUFF_EN)) {
> +            if (FIELD_EX32(bus->pool_ctrl, I2CD_POOL_CTRL, TX_COUNT) == 1) {
> +                bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, M_TX_CMD, 0);
>              } else {
>                  /*
>                   * Increase the start index in the TX pool buffer to
> @@ -477,12 +468,12 @@ static void aspeed_i2c_bus_handle_cmd(AspeedI2CBus *bus, uint64_t value)
>                   */
>                  pool_start++;
>              }
> -        } else if (bus->cmd & I2CD_TX_DMA_ENABLE) {
> +        } else if (FIELD_EX32(bus->cmd, I2CD_CMD, TX_DMA_EN)) {
>              if (bus->dma_len == 0) {
> -                bus->cmd &= ~I2CD_M_TX_CMD;
> +                bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, M_TX_CMD, 0);
>              }
>          } else {
> -            bus->cmd &= ~I2CD_M_TX_CMD;
> +            bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, M_TX_CMD, 0);
>          }
>
>          /* No slave found */
> @@ -492,33 +483,38 @@ static void aspeed_i2c_bus_handle_cmd(AspeedI2CBus *bus, uint64_t value)
>          aspeed_i2c_set_state(bus, I2CD_MACTIVE);
>      }
>
> -    if (bus->cmd & I2CD_M_TX_CMD) {
> +    if (FIELD_EX32(bus->cmd, I2CD_CMD, M_TX_CMD)) {
>          aspeed_i2c_set_state(bus, I2CD_MTXD);
>          if (aspeed_i2c_bus_send(bus, pool_start)) {
> -            bus->intr_status |= (I2CD_INTR_TX_NAK);
> +            bus->intr_status = FIELD_DP32(bus->intr_status, I2CD_INTR_STS,
> +                                          TX_NAK, 1);
>              i2c_end_transfer(bus->bus);
>          } else {
> -            bus->intr_status |= I2CD_INTR_TX_ACK;
> +            bus->intr_status = FIELD_DP32(bus->intr_status, I2CD_INTR_STS,
> +                                          TX_ACK, 1);
>          }
> -        bus->cmd &= ~I2CD_M_TX_CMD;
> +        bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, M_TX_CMD, 0);
>          aspeed_i2c_set_state(bus, I2CD_MACTIVE);
>      }
>
> -    if ((bus->cmd & (I2CD_M_RX_CMD | I2CD_M_S_RX_CMD_LAST)) &&
> -        !(bus->intr_status & I2CD_INTR_RX_DONE)) {
> +    if ((FIELD_EX32(bus->cmd, I2CD_CMD, M_RX_CMD) ||
> +         FIELD_EX32(bus->cmd, I2CD_CMD, M_S_RX_CMD_LAST)) &&
> +        !FIELD_EX32(bus->intr_status, I2CD_INTR_STS, RX_DONE)) {
>          aspeed_i2c_handle_rx_cmd(bus);
>      }
>
> -    if (bus->cmd & I2CD_M_STOP_CMD) {
> +    if (FIELD_EX32(bus->cmd, I2CD_CMD, M_STOP_CMD)) {
>          if (!(aspeed_i2c_get_state(bus) & I2CD_MACTIVE)) {
>              qemu_log_mask(LOG_GUEST_ERROR, "%s: abnormal stop\n", __func__);
> -            bus->intr_status |= I2CD_INTR_ABNORMAL;
> +            bus->intr_status = FIELD_DP32(bus->intr_status, I2CD_INTR_STS,
> +                                          ABNORMAL, 1);
>          } else {
>              aspeed_i2c_set_state(bus, I2CD_MSTOP);
>              i2c_end_transfer(bus->bus);
> -            bus->intr_status |= I2CD_INTR_NORMAL_STOP;
> +            bus->intr_status = FIELD_DP32(bus->intr_status, I2CD_INTR_STS,
> +                                          NORMAL_STOP, 1);
>          }
> -        bus->cmd &= ~I2CD_M_STOP_CMD;
> +        bus->cmd = FIELD_DP32(bus->cmd, I2CD_CMD, M_STOP_CMD, 0);
>          aspeed_i2c_set_state(bus, I2CD_IDLE);
>      }
>  }
> @@ -533,49 +529,50 @@ static void aspeed_i2c_bus_write(void *opaque, hwaddr offset,
>      trace_aspeed_i2c_bus_write(bus->id, offset, size, value);
>
>      switch (offset) {
> -    case I2CD_FUN_CTRL_REG:
> -        if (value & I2CD_SLAVE_EN) {
> +    case A_I2CD_FUN_CTRL:
> +        if (FIELD_EX32(value, I2CD_FUN_CTRL, SLAVE_EN)) {
>              qemu_log_mask(LOG_UNIMP, "%s: slave mode not implemented\n",
>                            __func__);
>              break;
>          }
>          bus->ctrl = value & 0x0071C3FF;
>          break;
> -    case I2CD_AC_TIMING_REG1:
> +    case A_I2CD_AC_TIMING1:
>          bus->timing[0] = value & 0xFFFFF0F;
>          break;
> -    case I2CD_AC_TIMING_REG2:
> +    case A_I2CD_AC_TIMING2:
>          bus->timing[1] = value & 0x7;
>          break;
> -    case I2CD_INTR_CTRL_REG:
> +    case A_I2CD_INTR_CTRL:
>          bus->intr_ctrl = value & 0x7FFF;
>          break;
> -    case I2CD_INTR_STS_REG:
> -        handle_rx = (bus->intr_status & I2CD_INTR_RX_DONE) &&
> -                (value & I2CD_INTR_RX_DONE);
> +    case A_I2CD_INTR_STS:
> +        handle_rx = FIELD_EX32(bus->intr_status, I2CD_INTR_STS, RX_DONE) &&
> +                    FIELD_EX32(value, I2CD_INTR_STS, RX_DONE);
>          bus->intr_status &= ~(value & 0x7FFF);
>          if (!bus->intr_status) {
>              bus->controller->intr_status &= ~(1 << bus->id);
>              qemu_irq_lower(aic->bus_get_irq(bus));
>          }
> -        if (handle_rx && (bus->cmd & (I2CD_M_RX_CMD | I2CD_M_S_RX_CMD_LAST))) {
> +        if (handle_rx && (FIELD_EX32(bus->cmd, I2CD_CMD, M_RX_CMD) ||
> +                         FIELD_EX32(bus->cmd, I2CD_CMD, M_S_RX_CMD_LAST))) {
>              aspeed_i2c_handle_rx_cmd(bus);
>              aspeed_i2c_bus_raise_interrupt(bus);
>          }
>          break;
> -    case I2CD_DEV_ADDR_REG:
> +    case A_I2CD_DEV_ADDR:
>          qemu_log_mask(LOG_UNIMP, "%s: slave mode not implemented\n",
>                        __func__);
>          break;
> -    case I2CD_POOL_CTRL_REG:
> +    case A_I2CD_POOL_CTRL:
>          bus->pool_ctrl &= ~0xffffff;
>          bus->pool_ctrl |= (value & 0xffffff);
>          break;
>
> -    case I2CD_BYTE_BUF_REG:
> -        bus->buf = (value & I2CD_BYTE_BUF_TX_MASK) << I2CD_BYTE_BUF_TX_SHIFT;
> +    case A_I2CD_BYTE_BUF:
> +        bus->buf = FIELD_DP32(bus->buf, I2CD_BYTE_BUF, TX_BUF, value);
>          break;
> -    case I2CD_CMD_REG:
> +    case A_I2CD_CMD:
>          if (!aspeed_i2c_bus_is_enabled(bus)) {
>              break;
>          }
> @@ -587,7 +584,8 @@ static void aspeed_i2c_bus_write(void *opaque, hwaddr offset,
>          }
>
>          if (!aic->has_dma &&
> -            value & (I2CD_RX_DMA_ENABLE | I2CD_TX_DMA_ENABLE)) {
> +            (FIELD_EX32(value, I2CD_CMD, RX_DMA_EN) ||
> +             FIELD_EX32(value, I2CD_CMD, TX_DMA_EN))) {
>              qemu_log_mask(LOG_GUEST_ERROR, "%s: No DMA support\n",  __func__);
>              break;
>          }
> @@ -595,7 +593,7 @@ static void aspeed_i2c_bus_write(void *opaque, hwaddr offset,
>          aspeed_i2c_bus_handle_cmd(bus, value);
>          aspeed_i2c_bus_raise_interrupt(bus);
>          break;
> -    case I2CD_DMA_ADDR:
> +    case A_I2CD_DMA_ADDR:
>          if (!aic->has_dma) {
>              qemu_log_mask(LOG_GUEST_ERROR, "%s: No DMA support\n",  __func__);
>              break;
> @@ -604,7 +602,7 @@ static void aspeed_i2c_bus_write(void *opaque, hwaddr offset,
>          bus->dma_addr = value & 0x3ffffffc;
>          break;
>
> -    case I2CD_DMA_LEN:
> +    case A_I2CD_DMA_LEN:
>          if (!aic->has_dma) {
>              qemu_log_mask(LOG_GUEST_ERROR, "%s: No DMA support\n",  __func__);
>              break;
> @@ -628,9 +626,9 @@ static uint64_t aspeed_i2c_ctrl_read(void *opaque, hwaddr offset,
>      AspeedI2CState *s = opaque;
>
>      switch (offset) {
> -    case I2C_CTRL_STATUS:
> +    case A_I2C_CTRL_STATUS:
>          return s->intr_status;
> -    case I2C_CTRL_GLOBAL:
> +    case A_I2C_CTRL_GLOBAL:
>          return s->ctrl_global;
>      default:
>          qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIx "\n",
> @@ -647,11 +645,11 @@ static void aspeed_i2c_ctrl_write(void *opaque, hwaddr offset,
>      AspeedI2CState *s = opaque;
>
>      switch (offset) {
> -    case I2C_CTRL_GLOBAL:
> +    case A_I2C_CTRL_GLOBAL:
>          value &= ~s->ctrl_global_rsvd;
>          s->ctrl_global = value;
>          break;
> -    case I2C_CTRL_STATUS:
> +    case A_I2C_CTRL_STATUS:
>      default:
>          qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIx "\n",
>                        __func__, offset);
> @@ -923,9 +921,10 @@ static qemu_irq aspeed_2400_i2c_bus_get_irq(AspeedI2CBus *bus)
>  static uint8_t *aspeed_2400_i2c_bus_pool_base(AspeedI2CBus *bus)
>  {
>      uint8_t *pool_page =
> -        &bus->controller->pool[I2CD_POOL_PAGE_SEL(bus->ctrl) * 0x100];
> +        &bus->controller->pool[FIELD_EX32(bus->ctrl, I2CD_FUN_CTRL,
> +                                          POOL_PAGE_SEL) * 0x100];
>
> -    return &pool_page[I2CD_POOL_OFFSET(bus->pool_ctrl)];
> +    return &pool_page[FIELD_EX32(bus->pool_ctrl, I2CD_POOL_CTRL, OFFSET)];
>  }
>
>  static void aspeed_2400_i2c_class_init(ObjectClass *klass, void *data)
> --
> 2.35.3
>


  reply	other threads:[~2022-06-06 23:59 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-06 15:07 [PATCH 00/21] aspeed: Extend ast2600 I2C model with new mode Cédric Le Goater
2022-06-06 15:07 ` [PATCH 01/21] hw/registerfields: Add shared fields macros Cédric Le Goater
2022-06-06 15:07 ` [PATCH 02/21] aspeed: i2c: Add ctrl_global_rsvd property Cédric Le Goater
2022-06-07  0:05   ` Joel Stanley
2022-06-07 17:32     ` Cédric Le Goater
2022-06-06 15:07 ` [PATCH 03/21] aspeed: i2c: Migrate to registerfields API Cédric Le Goater
2022-06-06 23:29   ` Joel Stanley [this message]
2022-06-06 15:07 ` [PATCH 04/21] aspeed: i2c: Use reg array instead of individual vars Cédric Le Goater
2022-06-06 23:49   ` Joel Stanley
2022-06-07  9:57     ` Cédric Le Goater
2022-06-07 10:50     ` Cédric Le Goater
2022-06-06 15:07 ` [PATCH 05/21] aspeed: i2c: Add new mode support Cédric Le Goater
2022-06-06 15:07 ` [PATCH 06/21] aspeed: i2c: Add PKT_DONE IRQ to trace Cédric Le Goater
2022-06-06 15:07 ` [PATCH 07/21] aspeed: i2c: Move regs and helpers to header file Cédric Le Goater
2022-06-06 15:07 ` [PATCH 08/21] test/avocado/machine_aspeed.py: Move OpenBMC tests Cédric Le Goater
2022-06-06 15:07 ` [PATCH 09/21] test/avocado/machine_aspeed.py: Add tests using buildroot images Cédric Le Goater
2022-06-06 15:07 ` [PATCH 10/21] test/avocado/machine_aspeed.py: Add I2C tests to ast2600-evb Cédric Le Goater
2022-06-06 15:07 ` [PATCH 11/21] test/avocado/machine_aspeed.py: Add an I2C RTC test Cédric Le Goater
2022-06-06 23:16   ` Joel Stanley
2022-06-07 10:17     ` Cédric Le Goater
2022-06-06 15:07 ` [PATCH 12/21] aspeed/i2c: Add ast1030 controller models Cédric Le Goater
2022-06-06 23:22   ` Joel Stanley
2022-06-06 15:07 ` [PATCH 13/21] aspeed: Add I2C buses to AST1030 model Cédric Le Goater
2022-06-06 23:18   ` Joel Stanley
2022-06-07 10:43     ` Cédric Le Goater
2022-06-06 15:07 ` [PATCH 14/21] hw/i2c/aspeed: rework raise interrupt trace event Cédric Le Goater
2022-06-06 15:07 ` [PATCH 15/21] hw/i2c/aspeed: add DEV_ADDR in old register mode Cédric Le Goater
2022-06-06 15:07 ` [PATCH 16/21] hw/i2c: support multiple masters Cédric Le Goater
2022-06-06 15:07 ` [PATCH 17/21] hw/i2c: add asynchronous send Cédric Le Goater
2022-06-06 15:07 ` [PATCH 18/21] hw/i2c/aspeed: add slave device in old register mode Cédric Le Goater
2022-06-06 15:07 ` [PATCH 19/21] aspeed/i2c: Enable SLAVE_ADDR_RX_MATCH always Cédric Le Goater
2022-06-06 15:07 ` [PATCH 20/21] hw/misc: add a toy i2c echo device [DO NOT PULL] Cédric Le Goater
2022-06-06 15:07 ` [PATCH 21/21] test/avocado/machine_aspeed.py: Add I2C slave tests Cédric Le Goater
2022-06-19 14:50 ` [PATCH 00/21] aspeed: Extend ast2600 I2C model with new mode Cédric Le Goater

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CACPK8XdQ5pqn3DjPgoVgXiA8Pk7=7Oqm0sPKbEN-wPdZEwyHzQ@mail.gmail.com' \
    --to=joel@jms.id.au \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=andrew@aj.id.au \
    --cc=bleal@redhat.com \
    --cc=clg@kaod.org \
    --cc=cminyard@mvista.com \
    --cc=crosa@redhat.com \
    --cc=damien.hedde@greensocs.com \
    --cc=f4bug@amsat.org \
    --cc=jamin_lin@aspeedtech.com \
    --cc=k.jensen@samsung.com \
    --cc=komlodi@google.com \
    --cc=pdel@fb.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=steven_lee@aspeedtech.com \
    --cc=troy_lee@aspeedtech.com \
    --cc=wainersm@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.