qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@redhat.com>
To: qemu-arm@nongnu.org, qemu-devel@nongnu.org
Cc: "Felix Wu" <flwu@google.com>,
	"Andrew Jeffery" <andrew@codeconstruct.com.au>,
	"Cédric Le Goater" <clg@redhat.com>
Subject: [PULL 13/16] hw/gpio: Add property for ASPEED GPIO in 32 bits basis
Date: Wed, 22 Oct 2025 14:29:50 +0200	[thread overview]
Message-ID: <20251022122953.877335-14-clg@redhat.com> (raw)
In-Reply-To: <20251022122953.877335-1-clg@redhat.com>

From: Felix Wu <flwu@google.com>

Added 32 bits property for ASPEED GPIO. Previously it can only be
access in bitwise manner.

The changes to qobject is to index gpios with array indices on top of
accessing with registers.  This allows for easier gpio access,
especially in tests with complex behaviors that requires large number
of gpios at a time, like fault injection and networking behaviors.

Indexing multiple gpios at once allows qmp/side band client to no
longer hardcode and populate register names and manipulate them
faster.

Signed-off-by: Felix Wu <flwu@google.com>
Reviewed-by: Andrew Jeffery <andrew@codeconstruct.com.au>
Link: https://lore.kernel.org/qemu-devel/20251015011830.1688468-2-lixiaoyan@google.com
[ clg: wrapped commit log lines ]
Signed-off-by: Cédric Le Goater <clg@redhat.com>
---
 hw/gpio/aspeed_gpio.c | 57 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/hw/gpio/aspeed_gpio.c b/hw/gpio/aspeed_gpio.c
index 609a556908f9..2d78bf9515c4 100644
--- a/hw/gpio/aspeed_gpio.c
+++ b/hw/gpio/aspeed_gpio.c
@@ -1308,6 +1308,57 @@ static void aspeed_gpio_2700_write(void *opaque, hwaddr offset,
 }
 
 /* Setup functions */
+static void aspeed_gpio_set_set(Object *obj, Visitor *v,
+                                        const char *name, void *opaque,
+                                        Error **errp)
+{
+    uint32_t set_val = 0;
+    AspeedGPIOState *s = ASPEED_GPIO(obj);
+    AspeedGPIOClass *agc = ASPEED_GPIO_GET_CLASS(s);
+    int set_idx = 0;
+
+    if (!visit_type_uint32(v, name, &set_val, errp)) {
+        return;
+    }
+
+    if (sscanf(name, "gpio-set[%d]", &set_idx) != 1) {
+        error_setg(errp, "%s: error reading %s", __func__, name);
+        return;
+    }
+
+    if (set_idx >= agc->nr_gpio_sets || set_idx < 0) {
+        error_setg(errp, "%s: invalid set_idx %s", __func__, name);
+        return;
+    }
+
+    aspeed_gpio_update(s, &s->sets[set_idx], set_val,
+                       ~s->sets[set_idx].direction);
+}
+
+static void aspeed_gpio_get_set(Object *obj, Visitor *v,
+                                        const char *name, void *opaque,
+                                        Error **errp)
+{
+    uint32_t set_val = 0;
+    AspeedGPIOState *s = ASPEED_GPIO(obj);
+    AspeedGPIOClass *agc = ASPEED_GPIO_GET_CLASS(s);
+    int set_idx = 0;
+
+    if (sscanf(name, "gpio-set[%d]", &set_idx) != 1) {
+        error_setg(errp, "%s: error reading %s", __func__, name);
+        return;
+    }
+
+    if (set_idx >= agc->nr_gpio_sets || set_idx < 0) {
+        error_setg(errp, "%s: invalid set_idx %s", __func__, name);
+        return;
+    }
+
+    set_val = s->sets[set_idx].data_value;
+    visit_type_uint32(v, name, &set_val, errp);
+}
+
+/****************** Setup functions ******************/
 static const GPIOSetProperties ast2400_set_props[ASPEED_GPIO_MAX_NR_SETS] = {
     [0] = {0xffffffff,  0xffffffff,  {"A", "B", "C", "D"} },
     [1] = {0xffffffff,  0xffffffff,  {"E", "F", "G", "H"} },
@@ -1435,6 +1486,12 @@ static void aspeed_gpio_init(Object *obj)
             g_free(name);
         }
     }
+
+    for (int i = 0; i < agc->nr_gpio_sets; i++) {
+        char *name = g_strdup_printf("gpio-set[%d]", i);
+        object_property_add(obj, name, "uint32", aspeed_gpio_get_set,
+        aspeed_gpio_set_set, NULL, NULL);
+    }
 }
 
 static const VMStateDescription vmstate_gpio_regs = {
-- 
2.51.0



  parent reply	other threads:[~2025-10-22 12:34 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-22 12:29 [PULL 00/16] aspeed queue Cédric Le Goater
2025-10-22 12:29 ` [PULL 01/16] hw/arm/aspeed_ast27x0-ssp: Add SDRAM region and fix naming and size to 512MB Cédric Le Goater
2025-10-22 12:29 ` [PULL 02/16] hw/arm/aspeed_ast27x0-tsp: " Cédric Le Goater
2025-10-22 12:29 ` [PULL 03/16] hw/arm/ast27x0: Add SRAM link and alias mapping for SSP coprocessor Cédric Le Goater
2025-10-22 12:29 ` [PULL 04/16] hw/arm/ast27x0: Add SRAM link and alias mapping for TSP coprocessor Cédric Le Goater
2025-10-22 12:29 ` [PULL 05/16] hw/arm/ast27x0: Share single SCU instance across PSP, SSP, and TSP Cédric Le Goater
2025-10-22 12:29 ` [PULL 06/16] hw/arm/ast27x0: Share single UART set " Cédric Le Goater
2025-10-22 12:29 ` [PULL 07/16] hw/arm/aspeed_ast27x0-fc: Map FMC0 flash contents into CA35 boot ROM Cédric Le Goater
2025-10-22 12:29 ` [PULL 08/16] hw/arm/aspeed_ast27x0-fc: Add VBOOTROM support Cédric Le Goater
2025-10-22 12:29 ` [PULL 09/16] tests/functional/aarch64/ast2700fc: Update test ASPEED SDK v09.08 Cédric Le Goater
2025-10-22 12:29 ` [PULL 10/16] tests/functional/aarch64/ast2700fc: Add eth2 network interface check in PCIe test Cédric Le Goater
2025-10-22 12:29 ` [PULL 11/16] tests/functional/aarch64/ast2700fc: Move coprocessor image loading to common function Cédric Le Goater
2025-10-22 12:29 ` [PULL 12/16] tests/functional/aarch64/ast2700fc: Add vbootrom test Cédric Le Goater
2025-10-22 12:29 ` Cédric Le Goater [this message]
2025-10-22 12:29 ` [PULL 14/16] tests/qtest: Add qtest for for ASPEED GPIO gpio-set property Cédric Le Goater
2025-10-22 12:29 ` [PULL 15/16] hw/arm/aspeed: ast2600-evb: Use w25q512jv flash model Cédric Le Goater
2025-10-22 12:29 ` [PULL 16/16] hw/arm/aspeed: Remove ast2700fc self-aliasing Cédric Le Goater
2025-10-22 14:31 ` [PULL 00/16] aspeed queue Richard Henderson

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=20251022122953.877335-14-clg@redhat.com \
    --to=clg@redhat.com \
    --cc=andrew@codeconstruct.com.au \
    --cc=flwu@google.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).