[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 20/35] hw/arm/stellaris: Convert I2C controller to Resettable inte
From: |
Peter Maydell |
Subject: |
[PULL 20/35] hw/arm/stellaris: Convert I2C controller to Resettable interface |
Date: |
Thu, 15 Feb 2024 17:35:23 +0000 |
From: Philippe Mathieu-Daudé <philmd@linaro.org>
Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-id: 20240213155214.13619-3-philmd@linaro.org
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/arm/stellaris.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
index 4fa857970b4..d3a12fe51c5 100644
--- a/hw/arm/stellaris.c
+++ b/hw/arm/stellaris.c
@@ -462,7 +462,10 @@ static void stellaris_sys_instance_init(Object *obj)
s->sysclk = qdev_init_clock_out(DEVICE(s), "SYSCLK");
}
-/* I2C controller. */
+/*
+ * I2C controller.
+ * ??? For now we only implement the master interface.
+ */
#define TYPE_STELLARIS_I2C "stellaris-i2c"
OBJECT_DECLARE_SIMPLE_TYPE(stellaris_i2c_state, STELLARIS_I2C)
@@ -607,10 +610,17 @@ static void stellaris_i2c_write(void *opaque, hwaddr
offset,
stellaris_i2c_update(s);
}
-static void stellaris_i2c_reset(stellaris_i2c_state *s)
+static void stellaris_i2c_reset_enter(Object *obj, ResetType type)
{
+ stellaris_i2c_state *s = STELLARIS_I2C(obj);
+
if (s->mcs & STELLARIS_I2C_MCS_BUSBSY)
i2c_end_transfer(s->bus);
+}
+
+static void stellaris_i2c_reset_hold(Object *obj)
+{
+ stellaris_i2c_state *s = STELLARIS_I2C(obj);
s->msa = 0;
s->mcs = 0;
@@ -619,6 +629,12 @@ static void stellaris_i2c_reset(stellaris_i2c_state *s)
s->mimr = 0;
s->mris = 0;
s->mcr = 0;
+}
+
+static void stellaris_i2c_reset_exit(Object *obj)
+{
+ stellaris_i2c_state *s = STELLARIS_I2C(obj);
+
stellaris_i2c_update(s);
}
@@ -658,8 +674,6 @@ static void stellaris_i2c_init(Object *obj)
memory_region_init_io(&s->iomem, obj, &stellaris_i2c_ops, s,
"i2c", 0x1000);
sysbus_init_mmio(sbd, &s->iomem);
- /* ??? For now we only implement the master interface. */
- stellaris_i2c_reset(s);
}
/* Analogue to Digital Converter. This is only partially implemented,
@@ -1396,7 +1410,11 @@ type_init(stellaris_machine_init)
static void stellaris_i2c_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
+ ResettableClass *rc = RESETTABLE_CLASS(klass);
+ rc->phases.enter = stellaris_i2c_reset_enter;
+ rc->phases.hold = stellaris_i2c_reset_hold;
+ rc->phases.exit = stellaris_i2c_reset_exit;
dc->vmsd = &vmstate_stellaris_i2c;
}
--
2.34.1
- [PULL 07/35] target/arm: Fix SVE/SME gross MTE suppression checks, (continued)
- [PULL 07/35] target/arm: Fix SVE/SME gross MTE suppression checks, Peter Maydell, 2024/02/15
- [PULL 26/35] target/arm: Allow access to SPSR_hyp from hyp mode, Peter Maydell, 2024/02/15
- [PULL 28/35] hw/misc/mps2-scc: Factor out which-board conditionals, Peter Maydell, 2024/02/15
- [PULL 25/35] target/arm: Add Cortex-R52 IMPDEF sysregs, Peter Maydell, 2024/02/15
- [PULL 34/35] hw/arm/mps3r: Add remaining devices, Peter Maydell, 2024/02/15
- [PULL 30/35] hw/arm/mps3r: Initial skeleton for mps3-an536 board, Peter Maydell, 2024/02/15
- [PULL 03/35] target/arm: Fix nregs computation in do_{ld,st}_zpa, Peter Maydell, 2024/02/15
- [PULL 06/35] target/arm: Handle mte in do_ldrq, do_ldro, Peter Maydell, 2024/02/15
- [PULL 31/35] hw/arm/mps3r: Add CPUs, GIC, and per-CPU RAM, Peter Maydell, 2024/02/15
- [PULL 35/35] docs: Add documentation for the mps3-an536 board, Peter Maydell, 2024/02/15
- [PULL 20/35] hw/arm/stellaris: Convert I2C controller to Resettable interface,
Peter Maydell <=
- [PULL 32/35] hw/arm/mps3r: Add UARTs, Peter Maydell, 2024/02/15
- [PULL 33/35] hw/arm/mps3r: Add GPIO, watchdog, dual-timer, I2C devices, Peter Maydell, 2024/02/15
- [PULL 27/35] hw/misc/mps2-scc: Fix condition for CFG3 register, Peter Maydell, 2024/02/15
- Re: [PULL 00/35] target-arm queue, Peter Maydell, 2024/02/16