qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Ninad Palsule <ninad@linux.ibm.com>
To: qemu-devel@nongnu.org, clg@kaod.org, peter.maydell@linaro.org,
	andrew@codeconstruct.com.au, joel@jms.id.au, pbonzini@redhat.com,
	marcandre.lureau@redhat.com, berrange@redhat.com,
	thuth@redhat.com, philmd@linaro.org, lvivier@redhat.com
Cc: Ninad Palsule <ninad@linux.ibm.com>,
	qemu-arm@nongnu.org, Andrew Jeffery <andrew@aj.id.au>
Subject: [PATCH v11 02/11] hw/fsi: Introduce IBM's scratchpad device
Date: Thu, 25 Jan 2024 21:40:17 -0600	[thread overview]
Message-ID: <20240126034026.31068-3-ninad@linux.ibm.com> (raw)
In-Reply-To: <20240126034026.31068-1-ninad@linux.ibm.com>

This is a part of patchset where IBM's Flexible Service Interface is
introduced.

The scratchpad provides a set of non-functional registers. The firmware
is free to use them, hardware does not support any special management
support. The scratchpad registers can be read or written from LBUS
slave. The scratch pad is managed under FSI CFAM state.

Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
[ clg: - moved object FSIScratchPad under FSICFAMState
       - moved FSIScratchPad code under cfam.c ]
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Ninad Palsule <ninad@linux.ibm.com>
---
 include/hw/fsi/lbus.h | 11 +++++++
 hw/fsi/lbus.c         | 69 +++++++++++++++++++++++++++++++++++++++++++
 hw/fsi/trace-events   |  2 ++
 3 files changed, 82 insertions(+)

diff --git a/include/hw/fsi/lbus.h b/include/hw/fsi/lbus.h
index e8a22e22a8..558268c013 100644
--- a/include/hw/fsi/lbus.h
+++ b/include/hw/fsi/lbus.h
@@ -29,4 +29,15 @@ typedef struct FSILBus {
     MemoryRegion mr;
 } FSILBus;
 
+#define TYPE_FSI_SCRATCHPAD "fsi.scratchpad"
+#define SCRATCHPAD(obj) OBJECT_CHECK(FSIScratchPad, (obj), TYPE_FSI_SCRATCHPAD)
+
+#define FSI_SCRATCHPAD_NR_REGS 4
+
+typedef struct FSIScratchPad {
+        FSILBusDevice parent;
+
+        uint32_t regs[FSI_SCRATCHPAD_NR_REGS];
+} FSIScratchPad;
+
 #endif /* FSI_LBUS_H */
diff --git a/hw/fsi/lbus.c b/hw/fsi/lbus.c
index 44d2319087..5ab7d0a741 100644
--- a/hw/fsi/lbus.c
+++ b/hw/fsi/lbus.c
@@ -13,6 +13,8 @@
 
 #include "trace.h"
 
+#define TO_REG(offset) ((offset) >> 2)
+
 static void fsi_lbus_init(Object *o)
 {
     FSILBus *lbus = FSI_LBUS(o);
@@ -34,10 +36,77 @@ static const TypeInfo fsi_lbus_device_type_info = {
     .abstract = true,
 };
 
+static uint64_t fsi_scratchpad_read(void *opaque, hwaddr addr, unsigned size)
+{
+    FSIScratchPad *s = SCRATCHPAD(opaque);
+    int reg = TO_REG(addr);
+
+    trace_fsi_scratchpad_read(addr, size);
+
+    if (reg >= FSI_SCRATCHPAD_NR_REGS) {
+        return 0;
+    }
+
+    return s->regs[reg];
+}
+
+static void fsi_scratchpad_write(void *opaque, hwaddr addr, uint64_t data,
+                                 unsigned size)
+{
+    FSIScratchPad *s = SCRATCHPAD(opaque);
+
+    trace_fsi_scratchpad_write(addr, size, data);
+    int reg = TO_REG(addr);
+
+    if (reg >= FSI_SCRATCHPAD_NR_REGS) {
+        return;
+    }
+
+    s->regs[reg] = data;
+}
+
+static const struct MemoryRegionOps scratchpad_ops = {
+    .read = fsi_scratchpad_read,
+    .write = fsi_scratchpad_write,
+    .endianness = DEVICE_BIG_ENDIAN,
+};
+
+static void fsi_scratchpad_realize(DeviceState *dev, Error **errp)
+{
+    FSILBusDevice *ldev = FSI_LBUS_DEVICE(dev);
+
+    memory_region_init_io(&ldev->iomem, OBJECT(ldev), &scratchpad_ops,
+                          ldev, TYPE_FSI_SCRATCHPAD, 0x400);
+}
+
+static void fsi_scratchpad_reset(DeviceState *dev)
+{
+    FSIScratchPad *s = SCRATCHPAD(dev);
+
+    memset(s->regs, 0, sizeof(s->regs));
+}
+
+static void fsi_scratchpad_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+
+    dc->bus_type = TYPE_FSI_LBUS;
+    dc->realize = fsi_scratchpad_realize;
+    dc->reset = fsi_scratchpad_reset;
+}
+
+static const TypeInfo fsi_scratchpad_info = {
+    .name = TYPE_FSI_SCRATCHPAD,
+    .parent = TYPE_FSI_LBUS_DEVICE,
+    .instance_size = sizeof(FSIScratchPad),
+    .class_init = fsi_scratchpad_class_init,
+};
+
 static void fsi_lbus_register_types(void)
 {
     type_register_static(&fsi_lbus_info);
     type_register_static(&fsi_lbus_device_type_info);
+    type_register_static(&fsi_scratchpad_info);
 }
 
 type_init(fsi_lbus_register_types);
diff --git a/hw/fsi/trace-events b/hw/fsi/trace-events
index e69de29bb2..c5753e2791 100644
--- a/hw/fsi/trace-events
+++ b/hw/fsi/trace-events
@@ -0,0 +1,2 @@
+fsi_scratchpad_read(uint64_t addr, uint32_t size) "@0x%" PRIx64 " size=%d"
+fsi_scratchpad_write(uint64_t addr, uint32_t size, uint64_t data) "@0x%" PRIx64 " size=%d value=0x%"PRIx64
-- 
2.39.2



  parent reply	other threads:[~2024-01-26  3:43 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-26  3:40 [PATCH v11 00/11] Introduce model for IBM's FSI Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 01/11] hw/fsi: Introduce IBM's Local bus Ninad Palsule
2024-01-26  8:31   ` Cédric Le Goater
2024-01-26  9:48     ` Ninad Palsule
2024-01-26  3:40 ` Ninad Palsule [this message]
2024-01-26  8:33   ` [PATCH v11 02/11] hw/fsi: Introduce IBM's scratchpad device Cédric Le Goater
2024-01-26  9:54     ` Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 03/11] hw/fsi: Introduce IBM's FSI Bus Ninad Palsule
2024-01-26  8:33   ` Cédric Le Goater
2024-01-26  9:56     ` Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 04/11] hw/fsi: Introduce IBM's fsi-slave model Ninad Palsule
2024-01-26  8:35   ` Cédric Le Goater
2024-01-26 10:00     ` Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 05/11] hw/fsi: Introduce IBM's cfam Ninad Palsule
2024-01-26  8:39   ` Cédric Le Goater
2024-01-26 10:08     ` Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 06/11] hw/fsi: Introduce IBM's FSI master Ninad Palsule
2024-01-26  8:42   ` Cédric Le Goater
2024-01-26 10:10     ` Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 07/11] hw/fsi: Aspeed APB2OPB & On-chip peripheral bus Ninad Palsule
2024-01-26  8:50   ` Cédric Le Goater
2024-01-26 10:14     ` Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 08/11] hw/arm: Hook up FSI module in AST2600 Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 09/11] hw/fsi: Added qtest Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 10/11] hw/fsi: Added FSI documentation Ninad Palsule
2024-01-26  8:57   ` Cédric Le Goater
2024-01-26 10:29     ` Ninad Palsule
2024-01-26  3:40 ` [PATCH v11 11/11] hw/fsi: Update MAINTAINER list Ninad Palsule
2024-01-26  8:57   ` Cédric Le Goater
2024-01-26 10:30     ` Ninad Palsule
2024-01-26  9:00 ` [PATCH v11 00/11] Introduce model for IBM's FSI Cédric Le Goater
2024-01-26 10:30   ` Ninad Palsule

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=20240126034026.31068-3-ninad@linux.ibm.com \
    --to=ninad@linux.ibm.com \
    --cc=andrew@aj.id.au \
    --cc=andrew@codeconstruct.com.au \
    --cc=berrange@redhat.com \
    --cc=clg@kaod.org \
    --cc=joel@jms.id.au \
    --cc=lvivier@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@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 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).