* [PATCH v4 0/2] qnap-mcu: add nvmem subdevice to read the eeprom
@ 2025-11-03 23:29 Heiko Stuebner
2025-11-03 23:29 ` [PATCH v4 1/2] nvmem: Add driver for the eeprom in qnap-mcu controllers Heiko Stuebner
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Heiko Stuebner @ 2025-11-03 23:29 UTC (permalink / raw)
To: lee, srini; +Cc: heiko, linux-kernel
The qnap-mcu is firmware running on a Weltrend WT61P803 MCU and there is
an eeprom connected to it, that can be read via the serial interface.
The eeprom is somewhat important, as it contains for example the
assigned mac address for the rk3568's gmac interface on TSx33 devices.
So add a nvmem driver for it and hook it into the mfd.
This needs to be applied on top of
commit a141f0ff2548 ("mfd: qnap-mcu: Include linux/types.h in qnap-mcu.h
shared header") to not cause build failures.
changes in v4:
- add missing linux/slab.h include for kzalloc and kfree prototypes
changes in v3:
- rebase on top of 6.18-rc3
- the compile error the kernel-test-robot reported in v2 should've
fixed itself with the patch applied before 6.18-rc1 .
changes in v2:
- drop binding patch, already applied
- split up nvmem driver and qnap-mcu-mfd subdevice addition (Lee)
- add Srinivas' Ack for the nvmem driver
Heiko Stuebner (2):
nvmem: Add driver for the eeprom in qnap-mcu controllers
mfd: qnap-mcu: Hook up the eeprom sub-device
drivers/mfd/qnap-mcu.c | 1 +
drivers/nvmem/Kconfig | 9 +++
drivers/nvmem/Makefile | 2 +
drivers/nvmem/qnap-mcu-eeprom.c | 111 ++++++++++++++++++++++++++++++++
4 files changed, 123 insertions(+)
create mode 100644 drivers/nvmem/qnap-mcu-eeprom.c
--
2.47.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 1/2] nvmem: Add driver for the eeprom in qnap-mcu controllers
2025-11-03 23:29 [PATCH v4 0/2] qnap-mcu: add nvmem subdevice to read the eeprom Heiko Stuebner
@ 2025-11-03 23:29 ` Heiko Stuebner
2025-11-03 23:29 ` [PATCH v4 2/2] mfd: qnap-mcu: Hook up the eeprom sub-device Heiko Stuebner
2025-11-05 17:02 ` (subset) [PATCH v4 0/2] qnap-mcu: add nvmem subdevice to read the eeprom Srinivas Kandagatla
2 siblings, 0 replies; 8+ messages in thread
From: Heiko Stuebner @ 2025-11-03 23:29 UTC (permalink / raw)
To: lee, srini; +Cc: heiko, linux-kernel
The qnap-mcu also has an eeprom connected to it, that contains some
specific product-information like the mac addresses for the network
interfaces.
Add a nvmem driver for it.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Acked-by: Srinivas Kandagatla <srini@kernel.org>
---
drivers/nvmem/Kconfig | 9 +++
drivers/nvmem/Makefile | 2 +
drivers/nvmem/qnap-mcu-eeprom.c | 111 ++++++++++++++++++++++++++++++++
3 files changed, 122 insertions(+)
create mode 100644 drivers/nvmem/qnap-mcu-eeprom.c
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index e0d88d3199c1..bf47a982cf62 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -285,6 +285,15 @@ config NVMEM_QCOM_SEC_QFPROM
This driver can also be built as a module. If so, the module will be called
nvmem_sec_qfprom.
+config NVMEM_QNAP_MCU_EEPROM
+ tristate "QNAP MCU EEPROM Support"
+ depends on MFD_QNAP_MCU
+ help
+ Say y here to enable support for accessing the EEPROM attached to
+ QNAP MCU devices. This EEPROM contains additional runtime device
+ information, like MAC addresses for ethernet devices that do not
+ contain their own mac storage.
+
config NVMEM_RAVE_SP_EEPROM
tristate "Rave SP EEPROM Support"
depends on RAVE_SP_CORE
diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
index 70a4464dcb1e..7252b8ec88d4 100644
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
@@ -56,6 +56,8 @@ obj-$(CONFIG_NVMEM_QCOM_QFPROM) += nvmem_qfprom.o
nvmem_qfprom-y := qfprom.o
obj-$(CONFIG_NVMEM_QCOM_SEC_QFPROM) += nvmem_sec_qfprom.o
nvmem_sec_qfprom-y := sec-qfprom.o
+obj-$(CONFIG_NVMEM_QNAP_MCU_EEPROM) += nvmem-qnap-mcu-eeprom.o
+nvmem-qnap-mcu-eeprom-y := qnap-mcu-eeprom.o
obj-$(CONFIG_NVMEM_RAVE_SP_EEPROM) += nvmem-rave-sp-eeprom.o
nvmem-rave-sp-eeprom-y := rave-sp-eeprom.o
obj-$(CONFIG_NVMEM_RCAR_EFUSE) += nvmem-rcar-efuse.o
diff --git a/drivers/nvmem/qnap-mcu-eeprom.c b/drivers/nvmem/qnap-mcu-eeprom.c
new file mode 100644
index 000000000000..0b919895b3b2
--- /dev/null
+++ b/drivers/nvmem/qnap-mcu-eeprom.c
@@ -0,0 +1,111 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * ee1004 - driver for DDR4 SPD EEPROMs
+ *
+ * Copyright (C) 2017-2019 Jean Delvare
+ *
+ * Based on the at24 driver:
+ * Copyright (C) 2005-2007 David Brownell
+ * Copyright (C) 2008 Wolfram Sang, Pengutronix
+ */
+
+#include <linux/mfd/qnap-mcu.h>
+#include <linux/module.h>
+#include <linux/nvmem-provider.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+
+/* Determined by trial and error until read anomalies appeared */
+#define QNAP_MCU_EEPROM_SIZE 256
+#define QNAP_MCU_EEPROM_BLOCK_SIZE 32
+
+static int qnap_mcu_eeprom_read_block(struct qnap_mcu *mcu, unsigned int offset,
+ void *val, size_t bytes)
+{
+ const u8 cmd[] = { 0xf7, 0xa1, offset, bytes };
+ u8 *reply;
+ int ret = 0;
+
+ reply = kzalloc(bytes + sizeof(cmd), GFP_KERNEL);
+ if (!reply)
+ return -ENOMEM;
+
+ ret = qnap_mcu_exec(mcu, cmd, sizeof(cmd), reply, bytes + sizeof(cmd));
+ if (ret)
+ goto out;
+
+ /* First bytes must mirror the sent command */
+ if (memcmp(cmd, reply, sizeof(cmd))) {
+ ret = -EIO;
+ goto out;
+ }
+
+ memcpy(val, reply + sizeof(cmd), bytes);
+
+out:
+ kfree(reply);
+ return ret;
+}
+
+static int qnap_mcu_eeprom_read(void *priv, unsigned int offset, void *val, size_t bytes)
+{
+ struct qnap_mcu *mcu = priv;
+ int pos = 0, ret;
+ u8 *buf = val;
+
+ if (unlikely(!bytes))
+ return 0;
+
+ while (bytes > 0) {
+ size_t to_read = (bytes > QNAP_MCU_EEPROM_BLOCK_SIZE) ?
+ QNAP_MCU_EEPROM_BLOCK_SIZE : bytes;
+
+ ret = qnap_mcu_eeprom_read_block(mcu, offset + pos, &buf[pos], to_read);
+ if (ret < 0)
+ return ret;
+
+ pos += to_read;
+ bytes -= to_read;
+ }
+
+ return 0;
+}
+
+static int qnap_mcu_eeprom_probe(struct platform_device *pdev)
+{
+ struct qnap_mcu *mcu = dev_get_drvdata(pdev->dev.parent);
+ struct nvmem_config nvcfg = {};
+ struct nvmem_device *ndev;
+
+ nvcfg.dev = &pdev->dev;
+ nvcfg.of_node = pdev->dev.parent->of_node;
+ nvcfg.name = dev_name(&pdev->dev);
+ nvcfg.id = NVMEM_DEVID_NONE;
+ nvcfg.owner = THIS_MODULE;
+ nvcfg.type = NVMEM_TYPE_EEPROM;
+ nvcfg.read_only = true;
+ nvcfg.root_only = false;
+ nvcfg.reg_read = qnap_mcu_eeprom_read;
+ nvcfg.size = QNAP_MCU_EEPROM_SIZE,
+ nvcfg.word_size = 1,
+ nvcfg.stride = 1,
+ nvcfg.priv = mcu,
+
+ ndev = devm_nvmem_register(&pdev->dev, &nvcfg);
+ if (IS_ERR(ndev))
+ return PTR_ERR(ndev);
+
+ return 0;
+}
+
+static struct platform_driver qnap_mcu_eeprom_driver = {
+ .probe = qnap_mcu_eeprom_probe,
+ .driver = {
+ .name = "qnap-mcu-eeprom",
+ },
+};
+module_platform_driver(qnap_mcu_eeprom_driver);
+
+MODULE_AUTHOR("Heiko Stuebner <heiko@sntech.de>");
+MODULE_DESCRIPTION("QNAP MCU EEPROM driver");
+MODULE_LICENSE("GPL");
--
2.47.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 2/2] mfd: qnap-mcu: Hook up the eeprom sub-device
2025-11-03 23:29 [PATCH v4 0/2] qnap-mcu: add nvmem subdevice to read the eeprom Heiko Stuebner
2025-11-03 23:29 ` [PATCH v4 1/2] nvmem: Add driver for the eeprom in qnap-mcu controllers Heiko Stuebner
@ 2025-11-03 23:29 ` Heiko Stuebner
2025-11-13 15:58 ` (subset) " Lee Jones
2025-11-05 17:02 ` (subset) [PATCH v4 0/2] qnap-mcu: add nvmem subdevice to read the eeprom Srinivas Kandagatla
2 siblings, 1 reply; 8+ messages in thread
From: Heiko Stuebner @ 2025-11-03 23:29 UTC (permalink / raw)
To: lee, srini; +Cc: heiko, linux-kernel
Add the qnap-mcu-eeprom platform-driver as sub-device for the MCU.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/mfd/qnap-mcu.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/mfd/qnap-mcu.c b/drivers/mfd/qnap-mcu.c
index 4ec1f4cf902f..2be429a50611 100644
--- a/drivers/mfd/qnap-mcu.c
+++ b/drivers/mfd/qnap-mcu.c
@@ -264,6 +264,7 @@ static const struct qnap_mcu_variant qnap_ts433_mcu = {
};
static struct mfd_cell qnap_mcu_cells[] = {
+ { .name = "qnap-mcu-eeprom", },
{ .name = "qnap-mcu-input", },
{ .name = "qnap-mcu-leds", },
{ .name = "qnap-mcu-hwmon", }
--
2.47.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: (subset) [PATCH v4 0/2] qnap-mcu: add nvmem subdevice to read the eeprom
2025-11-03 23:29 [PATCH v4 0/2] qnap-mcu: add nvmem subdevice to read the eeprom Heiko Stuebner
2025-11-03 23:29 ` [PATCH v4 1/2] nvmem: Add driver for the eeprom in qnap-mcu controllers Heiko Stuebner
2025-11-03 23:29 ` [PATCH v4 2/2] mfd: qnap-mcu: Hook up the eeprom sub-device Heiko Stuebner
@ 2025-11-05 17:02 ` Srinivas Kandagatla
2 siblings, 0 replies; 8+ messages in thread
From: Srinivas Kandagatla @ 2025-11-05 17:02 UTC (permalink / raw)
To: lee, Heiko Stuebner; +Cc: linux-kernel
On Tue, 04 Nov 2025 00:29:40 +0100, Heiko Stuebner wrote:
> The qnap-mcu is firmware running on a Weltrend WT61P803 MCU and there is
> an eeprom connected to it, that can be read via the serial interface.
>
> The eeprom is somewhat important, as it contains for example the
> assigned mac address for the rk3568's gmac interface on TSx33 devices.
>
> So add a nvmem driver for it and hook it into the mfd.
>
> [...]
Applied, thanks!
[1/2] nvmem: Add driver for the eeprom in qnap-mcu controllers
commit: 0cf064be87a6ae0708f171c6b863b26ba9453054
Best regards,
--
Srinivas Kandagatla <srini@kernel.org>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: (subset) [PATCH v4 2/2] mfd: qnap-mcu: Hook up the eeprom sub-device
2025-11-03 23:29 ` [PATCH v4 2/2] mfd: qnap-mcu: Hook up the eeprom sub-device Heiko Stuebner
@ 2025-11-13 15:58 ` Lee Jones
2025-11-20 19:36 ` Heiko Stuebner
0 siblings, 1 reply; 8+ messages in thread
From: Lee Jones @ 2025-11-13 15:58 UTC (permalink / raw)
To: lee, srini, Heiko Stuebner; +Cc: linux-kernel
On Tue, 04 Nov 2025 00:29:42 +0100, Heiko Stuebner wrote:
> Add the qnap-mcu-eeprom platform-driver as sub-device for the MCU.
>
>
Applied, thanks!
[2/2] mfd: qnap-mcu: Hook up the eeprom sub-device
commit: 4e2236230b3d6dda4a60111605e25bf482ef7492
--
Lee Jones [李琼斯]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: (subset) [PATCH v4 2/2] mfd: qnap-mcu: Hook up the eeprom sub-device
2025-11-13 15:58 ` (subset) " Lee Jones
@ 2025-11-20 19:36 ` Heiko Stuebner
2025-11-21 12:09 ` Lee Jones
0 siblings, 1 reply; 8+ messages in thread
From: Heiko Stuebner @ 2025-11-20 19:36 UTC (permalink / raw)
To: lee, srini, Lee Jones; +Cc: linux-kernel
Hi Lee,
Am Donnerstag, 13. November 2025, 16:58:25 Mitteleuropäische Normalzeit schrieb Lee Jones:
> On Tue, 04 Nov 2025 00:29:42 +0100, Heiko Stuebner wrote:
> > Add the qnap-mcu-eeprom platform-driver as sub-device for the MCU.
> >
> >
>
> Applied, thanks!
>
> [2/2] mfd: qnap-mcu: Hook up the eeprom sub-device
> commit: 4e2236230b3d6dda4a60111605e25bf482ef7492
>
Somehow I can see the error handling series in your for-mfd-next branch
but not the patch above.
Did it get lost somewhere or am I simply too blind?
Thanks
Heiko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: (subset) [PATCH v4 2/2] mfd: qnap-mcu: Hook up the eeprom sub-device
2025-11-20 19:36 ` Heiko Stuebner
@ 2025-11-21 12:09 ` Lee Jones
2025-11-21 15:49 ` Heiko Stuebner
0 siblings, 1 reply; 8+ messages in thread
From: Lee Jones @ 2025-11-21 12:09 UTC (permalink / raw)
To: Heiko Stuebner; +Cc: srini, linux-kernel
On Thu, 20 Nov 2025, Heiko Stuebner wrote:
> Hi Lee,
>
> Am Donnerstag, 13. November 2025, 16:58:25 Mitteleuropäische Normalzeit schrieb Lee Jones:
> > On Tue, 04 Nov 2025 00:29:42 +0100, Heiko Stuebner wrote:
> > > Add the qnap-mcu-eeprom platform-driver as sub-device for the MCU.
> > >
> > >
> >
> > Applied, thanks!
> >
> > [2/2] mfd: qnap-mcu: Hook up the eeprom sub-device
> > commit: 4e2236230b3d6dda4a60111605e25bf482ef7492
> >
>
> Somehow I can see the error handling series in your for-mfd-next branch
> but not the patch above.
>
> Did it get lost somewhere or am I simply too blind?
That's odd. It was applied, but was then removed.
I cherry-picked it back in. It should be in -next by tomorrow.
Apologies for the error.
--
Lee Jones [李琼斯]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: (subset) [PATCH v4 2/2] mfd: qnap-mcu: Hook up the eeprom sub-device
2025-11-21 12:09 ` Lee Jones
@ 2025-11-21 15:49 ` Heiko Stuebner
0 siblings, 0 replies; 8+ messages in thread
From: Heiko Stuebner @ 2025-11-21 15:49 UTC (permalink / raw)
To: Lee Jones; +Cc: srini, linux-kernel
Hi Lee,
Am Freitag, 21. November 2025, 13:09:14 Mitteleuropäische Normalzeit schrieb Lee Jones:
> On Thu, 20 Nov 2025, Heiko Stuebner wrote:
> > Am Donnerstag, 13. November 2025, 16:58:25 Mitteleuropäische Normalzeit schrieb Lee Jones:
> > > On Tue, 04 Nov 2025 00:29:42 +0100, Heiko Stuebner wrote:
> > > > Add the qnap-mcu-eeprom platform-driver as sub-device for the MCU.
> > > >
> > > >
> > >
> > > Applied, thanks!
> > >
> > > [2/2] mfd: qnap-mcu: Hook up the eeprom sub-device
> > > commit: 4e2236230b3d6dda4a60111605e25bf482ef7492
> > >
> >
> > Somehow I can see the error handling series in your for-mfd-next branch
> > but not the patch above.
> >
> > Did it get lost somewhere or am I simply too blind?
>
> That's odd. It was applied, but was then removed.
>
> I cherry-picked it back in. It should be in -next by tomorrow.
>
> Apologies for the error.
No worries and thanks for re-adding the patch.
Heiko
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-11-21 15:49 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-03 23:29 [PATCH v4 0/2] qnap-mcu: add nvmem subdevice to read the eeprom Heiko Stuebner
2025-11-03 23:29 ` [PATCH v4 1/2] nvmem: Add driver for the eeprom in qnap-mcu controllers Heiko Stuebner
2025-11-03 23:29 ` [PATCH v4 2/2] mfd: qnap-mcu: Hook up the eeprom sub-device Heiko Stuebner
2025-11-13 15:58 ` (subset) " Lee Jones
2025-11-20 19:36 ` Heiko Stuebner
2025-11-21 12:09 ` Lee Jones
2025-11-21 15:49 ` Heiko Stuebner
2025-11-05 17:02 ` (subset) [PATCH v4 0/2] qnap-mcu: add nvmem subdevice to read the eeprom Srinivas Kandagatla
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox