From: Paolo Pisati <p.pisati@gmail.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>,
Damien Le Moal <dlemoal@kernel.org>,
Niklas Cassel <cassel@kernel.org>
Cc: linux-m68k@lists.linux-m68k.org, linux-ide@vger.kernel.org,
linux-kernel@vger.kernel.org, Lee Jones <lee@kernel.org>,
mfd@lists.linux.dev
Subject: [PATCH v1 1/7] zorro: warp mfd: add the CS-Lab Warp multifunction parent
Date: Wed, 11 Nov 2026 17:37:28 +0100 [thread overview]
Message-ID: <20261111163735.227286-2-p.pisati@gmail.com> (raw)
In-Reply-To: <20261111163735.227286-1-p.pisati@gmail.com>
The Warp 1260 is an A1200 trapdoor accelerator whose single Zorro device
fronts several functions: an ARM co-processor reached through a
dual-port RAM window, and an IDE interface and an RTG display controller
that the 68k drives directly.
pata_cswarp claims the whole device for the IDE window alone, which
leaves no way for anything else on the board to get a driver.
Add a parent that owns the Zorro device and describes the functions as
mfd cells, starting with the IDE window as a "warp-pata" cell.
Only the window layout is described here; the dual-port RAM protocol
arrives with its first user.
pata_cswarp is converted in the next patch.
Signed-off-by: Paolo Pisati <p.pisati@gmail.com>
---
MAINTAINERS | 7 ++++
drivers/zorro/Kconfig | 30 ++++++++++++++
drivers/zorro/Makefile | 2 +
drivers/zorro/warp-mfd.c | 89 ++++++++++++++++++++++++++++++++++++++++
drivers/zorro/warp-mfd.h | 19 +++++++++
5 files changed, 147 insertions(+)
create mode 100644 drivers/zorro/warp-mfd.c
create mode 100644 drivers/zorro/warp-mfd.h
diff --git a/MAINTAINERS b/MAINTAINERS
index 222b7fc2c3aa..cfabc4609c9d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -7173,6 +7173,13 @@ L: linux-crypto@vger.kernel.org
S: Maintained
F: tools/crypto/tcrypt/tcrypt_speed_compare.py
+CS-LAB WARP MULTIFUNCTION DRIVER
+M: Paolo Pisati <p.pisati@gmail.com>
+L: linux-m68k@lists.linux-m68k.org
+S: Maintained
+F: drivers/zorro/warp-mfd.c
+F: drivers/zorro/warp-mfd.h
+
CS3308 MEDIA DRIVER
M: Hans Verkuil <hverkuil@kernel.org>
L: linux-media@vger.kernel.org
diff --git a/drivers/zorro/Kconfig b/drivers/zorro/Kconfig
index 41475ad46e45..c9ab9fb4b9ee 100644
--- a/drivers/zorro/Kconfig
+++ b/drivers/zorro/Kconfig
@@ -17,3 +17,33 @@ config ZORRO_NAMES
When in doubt, say Y.
+# Zorro multifunction drivers
+
+config WARP_MFD
+ tristate "CS-Lab Warp multifunction driver"
+ depends on ZORRO
+ select MFD_CORE
+ help
+ The CS-Lab Warp 1260 is an A1200 trapdoor accelerator. Besides the
+ 68060 it carries an FPGA and an ARM co-processor; its control
+ registers, the dual-port RAM and the IDE interface share one Zorro
+ device, which this driver binds to.
+
+ The 68k drives these through the FPGA: the on-board IDE interface and
+ an RTG display controller.
+
+ The co-processor owns the rest, reached over the dual-port RAM: two
+ USB host ports, an SD card slot, an ESP32 WiFi bridge,
+ an audio mixer, the Kickstart slot selection, the CPU clock and turbo
+ levels, thermal regulation of the fan, and the board telemetry.
+
+ This driver hands the IDE window to pata_cswarp - which needs
+ idemode=native set in Warp Configuration to be of any use - and
+ exposes the configuration and telemetry reachable over the dual-port
+ RAM in sysfs: voltages, temperatures, fan, firmware version and
+ Kickstart slot. Nothing else on the list has a driver yet.
+
+ If you have a CS-Lab Warp 1260 board, say Y. Otherwise, say N.
+
+ To compile this driver as a module, choose M here: the module
+ will be called warp-mfd.
diff --git a/drivers/zorro/Makefile b/drivers/zorro/Makefile
index 91ba82e633e7..6fe7cc1822dc 100644
--- a/drivers/zorro/Makefile
+++ b/drivers/zorro/Makefile
@@ -7,6 +7,8 @@ obj-$(CONFIG_ZORRO) += zorro.o zorro-driver.o zorro-sysfs.o
obj-$(CONFIG_PROC_FS) += proc.o
obj-$(CONFIG_ZORRO_NAMES) += names.o
+obj-$(CONFIG_WARP_MFD) += warp-mfd.o
+
hostprogs := gen-devlist
# Files generated that shall be removed upon make clean
diff --git a/drivers/zorro/warp-mfd.c b/drivers/zorro/warp-mfd.c
new file mode 100644
index 000000000000..94af7c9d0ea5
--- /dev/null
+++ b/drivers/zorro/warp-mfd.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * CS-Lab Warp multifunction driver
+ *
+ * Copyright 2026 Paolo Pisati <p.pisati@gmail.com>
+ *
+ * The Warp 1260 is an A1200 trapdoor accelerator made by CS-Lab. Besides the
+ * 68060 it carries an ARM co-processor which owns most of the peripherals,
+ * and the IDE interface and RTG display controller, which the 68k drives
+ * directly.
+ *
+ * This driver claims the Zorro device and hands the IDE window to pata_cswarp
+ * as an mfd cell.
+ */
+
+#include <linux/array_size.h>
+#include <linux/device.h>
+#include <linux/init.h>
+#include <linux/ioport.h>
+#include <linux/module.h>
+
+#include <linux/zorro.h>
+
+#include <linux/mfd/core.h>
+
+#include "warp-mfd.h"
+
+static const struct mfd_cell warp_mfd_cells[] = {
+ {
+ .name = "warp-pata",
+ .num_resources = 1,
+ .resources = (const struct resource []) {
+ DEFINE_RES_MEM_NAMED(WARP_OFFSET_ATA, WARP_ATA_SIZE,
+ "pata"),
+ }
+ }
+};
+
+static int warp_mfd_probe(struct zorro_dev *z,
+ const struct zorro_device_id *ent)
+{
+ int error;
+
+ dev_info(&z->dev, "Warp at %pR\n", &z->resource);
+
+ error = mfd_add_devices(&z->dev, z->dev.id, warp_mfd_cells,
+ ARRAY_SIZE(warp_mfd_cells), &z->resource,
+ 0, NULL);
+ if (error) {
+ dev_err(&z->dev, "mfd_add_devices() failed %d\n", error);
+ return error;
+ }
+ return 0;
+}
+
+static void warp_mfd_remove(struct zorro_dev *z)
+{
+ mfd_remove_devices(&z->dev);
+}
+
+static const struct zorro_device_id warp_mfd_ids[] = {
+ { .id = ZORRO_PROD_CSLAB_WARP_1260 },
+ { }
+};
+MODULE_DEVICE_TABLE(zorro, warp_mfd_ids);
+
+static struct zorro_driver warp_mfd_driver = {
+ .name = "warp-mfd",
+ .id_table = warp_mfd_ids,
+ .probe = warp_mfd_probe,
+ .remove = warp_mfd_remove
+};
+
+static int __init warp_mfd_init(void)
+{
+ return zorro_register_driver(&warp_mfd_driver);
+}
+
+static void __exit warp_mfd_exit(void)
+{
+ zorro_unregister_driver(&warp_mfd_driver);
+}
+
+module_init(warp_mfd_init);
+module_exit(warp_mfd_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Paolo Pisati <p.pisati@gmail.com>");
+MODULE_DESCRIPTION("CS-Lab Warp multifunction driver");
diff --git a/drivers/zorro/warp-mfd.h b/drivers/zorro/warp-mfd.h
new file mode 100644
index 000000000000..3f44f2b57c76
--- /dev/null
+++ b/drivers/zorro/warp-mfd.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * CS-Lab Warp - board window layout
+ *
+ * Copyright 2026 Paolo Pisati <p.pisati@gmail.com>
+ */
+
+#ifndef _WARP_MFD_H
+#define _WARP_MFD_H
+
+/* Offsets from the start of the board's Zorro window. */
+#define WARP_OFFSET_DPREG_CR 0x1000 /* dual-port interrupt control reg */
+#define WARP_OFFSET_DPRAM 0x2000 /* dual-port RAM */
+#define WARP_OFFSET_ATA 0x6000 /* on-board IDE interface */
+
+#define WARP_DPRAM_SIZE 0x2000
+#define WARP_ATA_SIZE 0x1800
+
+#endif /* _WARP_MFD_H */
--
2.43.0
next prev parent reply other threads:[~2026-11-11 16:37 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-11 16:37 [PATCH v1 0/7] zorro: add a CS-Lab Warp 1260 MFD Paolo Pisati
2026-11-11 16:37 ` Paolo Pisati [this message]
2026-11-11 17:03 ` [PATCH v1 1/7] zorro: warp mfd: add the CS-Lab Warp multifunction parent sashiko-bot
2026-11-11 18:04 ` Lee Jones
2026-11-12 15:21 ` Paolo Pisati
2026-11-11 16:37 ` [PATCH v1 2/7] ata: pata_cswarp: bind to the Warp mfd cell instead of the Zorro device Paolo Pisati
2026-11-11 17:12 ` sashiko-bot
2026-11-11 16:37 ` [PATCH v1 3/7] m68k: defconfig: enable WARP_MFD Paolo Pisati
2026-11-11 16:37 ` [PATCH v1 4/7] zorro: warp mfd: add the dual-port RAM command channel and expose the board identity Paolo Pisati
2026-11-11 17:23 ` sashiko-bot
2026-11-11 16:37 ` [PATCH v1 5/7] zorro: warp mfd: expose the voltage and temperature sensors Paolo Pisati
2026-11-11 16:37 ` [PATCH v1 6/7] zorro: warp mfd: expose the fan duty cycle Paolo Pisati
2026-11-11 16:37 ` [PATCH v1 7/7] zorro: warp mfd: expose the Kickstart slot selection Paolo Pisati
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=20261111163735.227286-2-p.pisati@gmail.com \
--to=p.pisati@gmail.com \
--cc=cassel@kernel.org \
--cc=dlemoal@kernel.org \
--cc=geert@linux-m68k.org \
--cc=lee@kernel.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=mfd@lists.linux.dev \
/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.