* [PATCH v2 0/5] hw/i2c/bitbang_i2c: Housekeeping
@ 2023-01-10 8:29 Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 1/5] hw/i2c/bitbang_i2c: Define TYPE_GPIO_I2C in public header Philippe Mathieu-Daudé
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-10 8:29 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Jan Kiszka, qemu-trivial, qemu-arm, Peter Maydell,
Philippe Mathieu-Daudé
Series fully reviewed.
Since v1:
- Fixed overwritten RECEIVING_BIT7 entry (Richard)
- Picked R-b tags
- Remove unused dummy MemoryRegion
- Convert DPRINTF() to using trace events
(series used as base for follow-up, better if merged via ARM tree)
Philippe Mathieu-Daudé (5):
hw/i2c/bitbang_i2c: Define TYPE_GPIO_I2C in public header
hw/i2c/bitbang_i2c: Remove unused dummy MemoryRegion
hw/i2c/bitbang_i2c: Change state calling bitbang_i2c_set_state()
helper
hw/i2c/bitbang_i2c: Trace state changes
hw/i2c/bitbang_i2c: Convert DPRINTF() to trace events
hw/arm/musicpal.c | 3 +-
hw/i2c/bitbang_i2c.c | 80 ++++++++++++++++++++++--------------
hw/i2c/trace-events | 7 ++++
include/hw/i2c/bitbang_i2c.h | 2 +
4 files changed, 61 insertions(+), 31 deletions(-)
--
2.38.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/5] hw/i2c/bitbang_i2c: Define TYPE_GPIO_I2C in public header
2023-01-10 8:29 [PATCH v2 0/5] hw/i2c/bitbang_i2c: Housekeeping Philippe Mathieu-Daudé
@ 2023-01-10 8:29 ` Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 2/5] hw/i2c/bitbang_i2c: Remove unused dummy MemoryRegion Philippe Mathieu-Daudé
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-10 8:29 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Jan Kiszka, qemu-trivial, qemu-arm, Peter Maydell,
Philippe Mathieu-Daudé,
Richard Henderson
Define TYPE_GPIO_I2C in the public "hw/i2c/bitbang_i2c.h"
header and use it in hw/arm/musicpal.c.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
hw/arm/musicpal.c | 3 ++-
hw/i2c/bitbang_i2c.c | 1 -
include/hw/i2c/bitbang_i2c.h | 2 ++
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
index b65c020115..813232682f 100644
--- a/hw/arm/musicpal.c
+++ b/hw/arm/musicpal.c
@@ -25,6 +25,7 @@
#include "hw/block/flash.h"
#include "ui/console.h"
#include "hw/i2c/i2c.h"
+#include "hw/i2c/bitbang_i2c.h"
#include "hw/irq.h"
#include "hw/or-irq.h"
#include "hw/audio/wm8750.h"
@@ -1300,7 +1301,7 @@ static void musicpal_init(MachineState *machine)
dev = sysbus_create_simple(TYPE_MUSICPAL_GPIO, MP_GPIO_BASE,
qdev_get_gpio_in(pic, MP_GPIO_IRQ));
- i2c_dev = sysbus_create_simple("gpio_i2c", -1, NULL);
+ i2c_dev = sysbus_create_simple(TYPE_GPIO_I2C, -1, NULL);
i2c = (I2CBus *)qdev_get_child_bus(i2c_dev, "i2c");
lcd_dev = sysbus_create_simple(TYPE_MUSICPAL_LCD, MP_LCD_BASE, NULL);
diff --git a/hw/i2c/bitbang_i2c.c b/hw/i2c/bitbang_i2c.c
index e9a0612a04..ac84bf0262 100644
--- a/hw/i2c/bitbang_i2c.c
+++ b/hw/i2c/bitbang_i2c.c
@@ -162,7 +162,6 @@ void bitbang_i2c_init(bitbang_i2c_interface *s, I2CBus *bus)
/* GPIO interface. */
-#define TYPE_GPIO_I2C "gpio_i2c"
OBJECT_DECLARE_SIMPLE_TYPE(GPIOI2CState, GPIO_I2C)
struct GPIOI2CState {
diff --git a/include/hw/i2c/bitbang_i2c.h b/include/hw/i2c/bitbang_i2c.h
index 92334e9016..a079e6d70f 100644
--- a/include/hw/i2c/bitbang_i2c.h
+++ b/include/hw/i2c/bitbang_i2c.h
@@ -3,6 +3,8 @@
#include "hw/i2c/i2c.h"
+#define TYPE_GPIO_I2C "gpio_i2c"
+
typedef struct bitbang_i2c_interface bitbang_i2c_interface;
#define BITBANG_I2C_SDA 0
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/5] hw/i2c/bitbang_i2c: Remove unused dummy MemoryRegion
2023-01-10 8:29 [PATCH v2 0/5] hw/i2c/bitbang_i2c: Housekeeping Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 1/5] hw/i2c/bitbang_i2c: Define TYPE_GPIO_I2C in public header Philippe Mathieu-Daudé
@ 2023-01-10 8:29 ` Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 3/5] hw/i2c/bitbang_i2c: Change state calling bitbang_i2c_set_state() helper Philippe Mathieu-Daudé
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-10 8:29 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Jan Kiszka, qemu-trivial, qemu-arm, Peter Maydell,
Philippe Mathieu-Daudé,
Richard Henderson
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
hw/i2c/bitbang_i2c.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/hw/i2c/bitbang_i2c.c b/hw/i2c/bitbang_i2c.c
index ac84bf0262..e41cb63daa 100644
--- a/hw/i2c/bitbang_i2c.c
+++ b/hw/i2c/bitbang_i2c.c
@@ -165,9 +165,10 @@ void bitbang_i2c_init(bitbang_i2c_interface *s, I2CBus *bus)
OBJECT_DECLARE_SIMPLE_TYPE(GPIOI2CState, GPIO_I2C)
struct GPIOI2CState {
+ /*< private >*/
SysBusDevice parent_obj;
+ /*< public >*/
- MemoryRegion dummy_iomem;
bitbang_i2c_interface bitbang;
int last_level;
qemu_irq out;
@@ -188,12 +189,8 @@ static void gpio_i2c_init(Object *obj)
{
DeviceState *dev = DEVICE(obj);
GPIOI2CState *s = GPIO_I2C(obj);
- SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
I2CBus *bus;
- memory_region_init(&s->dummy_iomem, obj, "gpio_i2c", 0);
- sysbus_init_mmio(sbd, &s->dummy_iomem);
-
bus = i2c_init_bus(dev, "i2c");
bitbang_i2c_init(&s->bitbang, bus);
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/5] hw/i2c/bitbang_i2c: Change state calling bitbang_i2c_set_state() helper
2023-01-10 8:29 [PATCH v2 0/5] hw/i2c/bitbang_i2c: Housekeeping Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 1/5] hw/i2c/bitbang_i2c: Define TYPE_GPIO_I2C in public header Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 2/5] hw/i2c/bitbang_i2c: Remove unused dummy MemoryRegion Philippe Mathieu-Daudé
@ 2023-01-10 8:29 ` Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 4/5] hw/i2c/bitbang_i2c: Trace state changes Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 5/5] hw/i2c/bitbang_i2c: Convert DPRINTF() to trace events Philippe Mathieu-Daudé
4 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-10 8:29 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Jan Kiszka, qemu-trivial, qemu-arm, Peter Maydell,
Philippe Mathieu-Daudé,
Richard Henderson
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
hw/i2c/bitbang_i2c.c | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/hw/i2c/bitbang_i2c.c b/hw/i2c/bitbang_i2c.c
index e41cb63daa..bf4b781393 100644
--- a/hw/i2c/bitbang_i2c.c
+++ b/hw/i2c/bitbang_i2c.c
@@ -26,13 +26,19 @@ do { printf("bitbang_i2c: " fmt , ## __VA_ARGS__); } while (0)
#define DPRINTF(fmt, ...) do {} while(0)
#endif
+static void bitbang_i2c_set_state(bitbang_i2c_interface *i2c,
+ bitbang_i2c_state state)
+{
+ i2c->state = state;
+}
+
static void bitbang_i2c_enter_stop(bitbang_i2c_interface *i2c)
{
DPRINTF("STOP\n");
if (i2c->current_addr >= 0)
i2c_end_transfer(i2c->bus);
i2c->current_addr = -1;
- i2c->state = STOPPED;
+ bitbang_i2c_set_state(i2c, STOPPED);
}
/* Set device data pin. */
@@ -69,7 +75,7 @@ int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level)
if (level == 0) {
DPRINTF("START\n");
/* START condition. */
- i2c->state = SENDING_BIT7;
+ bitbang_i2c_set_state(i2c, SENDING_BIT7);
i2c->current_addr = -1;
} else {
/* STOP condition. */
@@ -96,7 +102,7 @@ int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level)
case SENDING_BIT7 ... SENDING_BIT0:
i2c->buffer = (i2c->buffer << 1) | data;
/* will end up in WAITING_FOR_ACK */
- i2c->state++;
+ bitbang_i2c_set_state(i2c, i2c->state + 1);
return bitbang_i2c_ret(i2c, 1);
case WAITING_FOR_ACK:
@@ -117,13 +123,14 @@ int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level)
* device we were sending to decided to NACK us).
*/
DPRINTF("Got NACK\n");
+ bitbang_i2c_set_state(i2c, SENT_NACK);
bitbang_i2c_enter_stop(i2c);
return bitbang_i2c_ret(i2c, 1);
}
if (i2c->current_addr & 1) {
- i2c->state = RECEIVING_BIT7;
+ bitbang_i2c_set_state(i2c, RECEIVING_BIT7);
} else {
- i2c->state = SENDING_BIT7;
+ bitbang_i2c_set_state(i2c, SENDING_BIT7);
}
return bitbang_i2c_ret(i2c, 0);
}
@@ -134,18 +141,18 @@ int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level)
case RECEIVING_BIT6 ... RECEIVING_BIT0:
data = i2c->buffer >> 7;
/* will end up in SENDING_ACK */
- i2c->state++;
+ bitbang_i2c_set_state(i2c, i2c->state + 1);
i2c->buffer <<= 1;
return bitbang_i2c_ret(i2c, data);
case SENDING_ACK:
- i2c->state = RECEIVING_BIT7;
if (data != 0) {
DPRINTF("NACKED\n");
- i2c->state = SENT_NACK;
+ bitbang_i2c_set_state(i2c, SENT_NACK);
i2c_nack(i2c->bus);
} else {
DPRINTF("ACKED\n");
+ bitbang_i2c_set_state(i2c, RECEIVING_BIT7);
}
return bitbang_i2c_ret(i2c, 1);
}
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 4/5] hw/i2c/bitbang_i2c: Trace state changes
2023-01-10 8:29 [PATCH v2 0/5] hw/i2c/bitbang_i2c: Housekeeping Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2023-01-10 8:29 ` [PATCH v2 3/5] hw/i2c/bitbang_i2c: Change state calling bitbang_i2c_set_state() helper Philippe Mathieu-Daudé
@ 2023-01-10 8:29 ` Philippe Mathieu-Daudé
2023-01-11 2:57 ` Richard Henderson
2023-01-10 8:29 ` [PATCH v2 5/5] hw/i2c/bitbang_i2c: Convert DPRINTF() to trace events Philippe Mathieu-Daudé
4 siblings, 1 reply; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-10 8:29 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Jan Kiszka, qemu-trivial, qemu-arm, Peter Maydell,
Philippe Mathieu-Daudé,
Richard Henderson
Trace bitbang state machine changes with trace events.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/i2c/bitbang_i2c.c | 33 ++++++++++++++++++++++++++++-----
hw/i2c/trace-events | 3 +++
2 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/hw/i2c/bitbang_i2c.c b/hw/i2c/bitbang_i2c.c
index bf4b781393..8a67ff6fae 100644
--- a/hw/i2c/bitbang_i2c.c
+++ b/hw/i2c/bitbang_i2c.c
@@ -16,6 +16,7 @@
#include "hw/sysbus.h"
#include "qemu/module.h"
#include "qom/object.h"
+#include "trace.h"
//#define DEBUG_BITBANG_I2C
@@ -26,15 +27,41 @@ do { printf("bitbang_i2c: " fmt , ## __VA_ARGS__); } while (0)
#define DPRINTF(fmt, ...) do {} while(0)
#endif
+/* bitbang_i2c_state enum to name */
+static const char *sname[] = {
+#define NAME(e) [e] = stringify(e)
+ NAME(STOPPED),
+ [SENDING_BIT7] = "SENDING_BIT7 (START)",
+ NAME(SENDING_BIT6),
+ NAME(SENDING_BIT5),
+ NAME(SENDING_BIT4),
+ NAME(SENDING_BIT3),
+ NAME(SENDING_BIT2),
+ NAME(SENDING_BIT1),
+ NAME(SENDING_BIT0),
+ NAME(WAITING_FOR_ACK),
+ [RECEIVING_BIT7] = "RECEIVING_BIT7 (ACK)",
+ NAME(RECEIVING_BIT6),
+ NAME(RECEIVING_BIT5),
+ NAME(RECEIVING_BIT4),
+ NAME(RECEIVING_BIT3),
+ NAME(RECEIVING_BIT2),
+ NAME(RECEIVING_BIT1),
+ NAME(RECEIVING_BIT0),
+ NAME(SENDING_ACK),
+ NAME(SENT_NACK)
+#undef NAME
+};
+
static void bitbang_i2c_set_state(bitbang_i2c_interface *i2c,
bitbang_i2c_state state)
{
+ trace_bitbang_i2c_state(sname[i2c->state], sname[state]);
i2c->state = state;
}
static void bitbang_i2c_enter_stop(bitbang_i2c_interface *i2c)
{
- DPRINTF("STOP\n");
if (i2c->current_addr >= 0)
i2c_end_transfer(i2c->bus);
i2c->current_addr = -1;
@@ -73,7 +100,6 @@ int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level)
return bitbang_i2c_nop(i2c);
}
if (level == 0) {
- DPRINTF("START\n");
/* START condition. */
bitbang_i2c_set_state(i2c, SENDING_BIT7);
i2c->current_addr = -1;
@@ -122,7 +148,6 @@ int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level)
/* NACK (either addressing a nonexistent device, or the
* device we were sending to decided to NACK us).
*/
- DPRINTF("Got NACK\n");
bitbang_i2c_set_state(i2c, SENT_NACK);
bitbang_i2c_enter_stop(i2c);
return bitbang_i2c_ret(i2c, 1);
@@ -147,11 +172,9 @@ int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level)
case SENDING_ACK:
if (data != 0) {
- DPRINTF("NACKED\n");
bitbang_i2c_set_state(i2c, SENT_NACK);
i2c_nack(i2c->bus);
} else {
- DPRINTF("ACKED\n");
bitbang_i2c_set_state(i2c, RECEIVING_BIT7);
}
return bitbang_i2c_ret(i2c, 1);
diff --git a/hw/i2c/trace-events b/hw/i2c/trace-events
index af181d43ee..2a479c1c12 100644
--- a/hw/i2c/trace-events
+++ b/hw/i2c/trace-events
@@ -1,5 +1,8 @@
# See docs/devel/tracing.rst for syntax documentation.
+# bitbang_i2c.c
+bitbang_i2c_state(const char *old_state, const char *new_state) "state %s -> %s"
+
# core.c
i2c_event(const char *event, uint8_t address) "%s(addr:0x%02x)"
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 5/5] hw/i2c/bitbang_i2c: Convert DPRINTF() to trace events
2023-01-10 8:29 [PATCH v2 0/5] hw/i2c/bitbang_i2c: Housekeeping Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2023-01-10 8:29 ` [PATCH v2 4/5] hw/i2c/bitbang_i2c: Trace state changes Philippe Mathieu-Daudé
@ 2023-01-10 8:29 ` Philippe Mathieu-Daudé
4 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-01-10 8:29 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Jan Kiszka, qemu-trivial, qemu-arm, Peter Maydell,
Philippe Mathieu-Daudé,
Richard Henderson
Convert the remaining DPRINTF debug macro uses to tracepoints.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
hw/i2c/bitbang_i2c.c | 18 ++++++------------
hw/i2c/trace-events | 4 ++++
2 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/hw/i2c/bitbang_i2c.c b/hw/i2c/bitbang_i2c.c
index 8a67ff6fae..d6589f0d4a 100644
--- a/hw/i2c/bitbang_i2c.c
+++ b/hw/i2c/bitbang_i2c.c
@@ -18,14 +18,6 @@
#include "qom/object.h"
#include "trace.h"
-//#define DEBUG_BITBANG_I2C
-
-#ifdef DEBUG_BITBANG_I2C
-#define DPRINTF(fmt, ...) \
-do { printf("bitbang_i2c: " fmt , ## __VA_ARGS__); } while (0)
-#else
-#define DPRINTF(fmt, ...) do {} while(0)
-#endif
/* bitbang_i2c_state enum to name */
static const char *sname[] = {
@@ -71,8 +63,10 @@ static void bitbang_i2c_enter_stop(bitbang_i2c_interface *i2c)
/* Set device data pin. */
static int bitbang_i2c_ret(bitbang_i2c_interface *i2c, int level)
{
+ trace_bitbang_i2c_data(i2c->last_clock, i2c->last_data,
+ i2c->device_out, level);
i2c->device_out = level;
- //DPRINTF("%d %d %d\n", i2c->last_clock, i2c->last_data, i2c->device_out);
+
return level & i2c->last_data;
}
@@ -137,11 +131,11 @@ int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level)
if (i2c->current_addr < 0) {
i2c->current_addr = i2c->buffer;
- DPRINTF("Address 0x%02x\n", i2c->current_addr);
+ trace_bitbang_i2c_addr(i2c->current_addr);
ret = i2c_start_transfer(i2c->bus, i2c->current_addr >> 1,
i2c->current_addr & 1);
} else {
- DPRINTF("Sent 0x%02x\n", i2c->buffer);
+ trace_bitbang_i2c_send(i2c->buffer);
ret = i2c_send(i2c->bus, i2c->buffer);
}
if (ret) {
@@ -161,7 +155,7 @@ int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level)
}
case RECEIVING_BIT7:
i2c->buffer = i2c_recv(i2c->bus);
- DPRINTF("RX byte 0x%02x\n", i2c->buffer);
+ trace_bitbang_i2c_recv(i2c->buffer);
/* Fall through... */
case RECEIVING_BIT6 ... RECEIVING_BIT0:
data = i2c->buffer >> 7;
diff --git a/hw/i2c/trace-events b/hw/i2c/trace-events
index 2a479c1c12..b0ab237b0f 100644
--- a/hw/i2c/trace-events
+++ b/hw/i2c/trace-events
@@ -2,6 +2,10 @@
# bitbang_i2c.c
bitbang_i2c_state(const char *old_state, const char *new_state) "state %s -> %s"
+bitbang_i2c_addr(uint8_t addr) "Address 0x%02x"
+bitbang_i2c_send(uint8_t byte) "TX byte 0x%02x"
+bitbang_i2c_recv(uint8_t byte) "RX byte 0x%02x"
+bitbang_i2c_data(unsigned dat, unsigned clk, unsigned old_out, unsigned new_out) "dat %u clk %u out %u -> %u"
# core.c
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 4/5] hw/i2c/bitbang_i2c: Trace state changes
2023-01-10 8:29 ` [PATCH v2 4/5] hw/i2c/bitbang_i2c: Trace state changes Philippe Mathieu-Daudé
@ 2023-01-11 2:57 ` Richard Henderson
0 siblings, 0 replies; 7+ messages in thread
From: Richard Henderson @ 2023-01-11 2:57 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Thomas Huth, Jan Kiszka, qemu-trivial, qemu-arm, Peter Maydell
On 1/10/23 00:29, Philippe Mathieu-Daudé wrote:
> +static const char *sname[] = {
Oh,
const char * const sname[]
should have caught that the first time.
r~
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-01-11 2:58 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-10 8:29 [PATCH v2 0/5] hw/i2c/bitbang_i2c: Housekeeping Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 1/5] hw/i2c/bitbang_i2c: Define TYPE_GPIO_I2C in public header Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 2/5] hw/i2c/bitbang_i2c: Remove unused dummy MemoryRegion Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 3/5] hw/i2c/bitbang_i2c: Change state calling bitbang_i2c_set_state() helper Philippe Mathieu-Daudé
2023-01-10 8:29 ` [PATCH v2 4/5] hw/i2c/bitbang_i2c: Trace state changes Philippe Mathieu-Daudé
2023-01-11 2:57 ` Richard Henderson
2023-01-10 8:29 ` [PATCH v2 5/5] hw/i2c/bitbang_i2c: Convert DPRINTF() to trace events Philippe Mathieu-Daudé
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.