Files
guix-router/packages/patches/linux-mt6000/804-nvmem-core-support-mac-base-fixed-layout-cells.patch
ssmithxandClaude Opus 5.5 5de6046e8d MT6000: kernel, system, root image and FIT boot image
linux-mt6000: Nonguix linux 6.17 with ARCH_MEDIATEK and the MT7986
drivers, OpenWrt's block NVMEM provider and mac-base patches (WiFi
calibration and MACs from the eMMC factory partition), bootargs-append,
and OpenWrt's GL-MT6000 device tree.

mt6000.scm: the Pi's OpenWrt userland on the MT6000 (lan1-5 + WiFi in
br-lan, eth1 WAN).  Shared pieces move to packages/router-base.scm;
the Pi's system is unchanged.

build-mt6000-root.sh builds the ext4 root for the rootfs partition and,
with scripts/mt6000-fit.sh, the FIT that GL's U-Boot boots from the
kernel partition -- for the system inside the image, whose root is the
partition's UUID.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 19:37:33 -04:00

127 lines
3.3 KiB
Diff

From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
Date: Thu, 13 Jul 2023 18:29:19 +0200
Subject: [PATCH] nvmem: core: support "mac-base" fixed layout cells
Fixed layout binding allows specifying "mac-base" NVMEM cells. It's used
for base MAC address (that can be used for calculating relative
addresses). It can be stored in a raw binary format or as an ASCII
string.
---
[Rebased on 6.17.12 for guix-router: nvmem_add_cells_from_dt is still static there.]
--- a/drivers/nvmem/core.c 2026-10-15 18:07:19.245619352 -0400
+++ b/drivers/nvmem/core.c 2026-10-15 18:07:19.245619352 -0400
@@ -7,9 +7,12 @@
*/
#include <linux/device.h>
+#include <linux/ctype.h>
+#include <linux/etherdevice.h>
#include <linux/export.h>
#include <linux/fs.h>
#include <linux/idr.h>
+#include <linux/if_ether.h>
#include <linux/init.h>
#include <linux/kref.h>
#include <linux/module.h>
@@ -786,6 +789,62 @@
return 0;
}
+static int nvmem_mac_base_raw_read(void *context, const char *id, int index, unsigned int offset,
+ void *buf, size_t bytes)
+{
+ if (WARN_ON(bytes != ETH_ALEN))
+ return -EINVAL;
+
+ if (index)
+ eth_addr_add(buf, index);
+
+ return 0;
+}
+
+static int nvmem_mac_base_ascii_read(void *context, const char *id, int index, unsigned int offset,
+ void *buf, size_t bytes)
+{
+ u8 mac[ETH_ALEN];
+
+ if (WARN_ON(bytes != 3 * ETH_ALEN - 1))
+ return -EINVAL;
+
+ if (!mac_pton(buf, mac))
+ return -EINVAL;
+
+ if (index)
+ eth_addr_add(mac, index);
+
+ ether_addr_copy(buf, mac);
+
+ return 0;
+}
+
+static int nvmem_mac_base_hex_read(void *context, const char *id, int index, unsigned int offset,
+ void *buf, size_t bytes)
+{
+ u8 mac[ETH_ALEN], *hexstr;
+ int i;
+
+ if (WARN_ON(bytes != 2 * ETH_ALEN))
+ return -EINVAL;
+
+ hexstr = (u8 *)buf;
+ for (i = 0; i < ETH_ALEN; i++) {
+ if (!isxdigit(hexstr[i * 2]) || !isxdigit(hexstr[i * 2 + 1]))
+ return -EINVAL;
+
+ mac[i] = (hex_to_bin(hexstr[i * 2]) << 4) | hex_to_bin(hexstr[i * 2 + 1]);
+ }
+
+ if (index)
+ eth_addr_add(mac, index);
+
+ ether_addr_copy(buf, mac);
+
+ return 0;
+}
+
static int nvmem_add_cells_from_dt(struct nvmem_device *nvmem, struct device_node *np)
{
struct device *dev = &nvmem->dev;
@@ -827,6 +886,25 @@
if (nvmem->fixup_dt_cell_info)
nvmem->fixup_dt_cell_info(nvmem, &info);
+ if (of_device_is_compatible(np, "fixed-layout")) {
+ if (of_device_is_compatible(child, "mac-base")) {
+ if (info.bytes == ETH_ALEN) {
+ info.raw_len = info.bytes;
+ info.bytes = ETH_ALEN;
+ info.read_post_process = nvmem_mac_base_raw_read;
+ } else if (info.bytes == 2 * ETH_ALEN) {
+ info.raw_len = info.bytes;
+ info.bytes = ETH_ALEN;
+ info.read_post_process = nvmem_mac_base_hex_read;
+ } else if (info.bytes == 3 * ETH_ALEN - 1) {
+ info.raw_len = info.bytes;
+ info.bytes = ETH_ALEN;
+ info.read_post_process = nvmem_mac_base_ascii_read;
+ }
+
+ }
+ }
+
ret = nvmem_add_one_cell(nvmem, &info);
kfree(info.name);
if (ret) {
Only in b/drivers/nvmem: core.c.orig
--- a/drivers/nvmem/Kconfig 2026-10-15 18:07:19.245619352 -0400
+++ b/drivers/nvmem/Kconfig 2026-10-15 18:07:19.245619352 -0400
@@ -2,6 +2,7 @@
menuconfig NVMEM
bool "NVMEM Support"
imply NVMEM_LAYOUTS
+ select GENERIC_NET_UTILS
help
Support for NVMEM(Non Volatile Memory) devices like EEPROM, EFUSES...