From nobody Mon Jun 15 05:21:14 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 26EC434EEE3; Wed, 8 Apr 2026 08:00:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775635232; cv=none; b=jqVTM88sVWNETZalkec4rs1rA9voPFDN6usH/7ddelqQ16kEt1g4LTNl0WMahhF7efwXYMAaonYTtXiQXQjc9DhWxJ58T/S9sFyZqccPgCpygLyjGEkKIuxTeCp4GXWlJlSuvb3YSp64lKOZrlhITCw9PmnkjaYXv6xeRu0GZdw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775635232; c=relaxed/simple; bh=/3j3lZdv+iRGHGGZlhKUgCrFKI+nuGpuzrD3xSLmtOY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nmB5k8CvBBO95yp9nJgrIWgOKwurYczj4ihl5eGEzhctha2Tm571p6jCcPPSrKxYi+h053Quel3/aooR953jNlFEgVCdc+bkPTKD6a+DylfsIJ3G9k5S43TjBHgynyBo+h1K2jznOHt3Nrv/ydOvr+Sd64dZvkPlUJtvOvV8M7U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=B4OegvsI; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=VPL9iZr6; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="B4OegvsI"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="VPL9iZr6" From: Gregor Herburger DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1775635222; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=i9F28QPoElHFXjSecKpbA7nEHozVWxdHvwW0NuOzOy0=; b=B4OegvsIn9uOpZWI2iZsbq++71UYPOhxkm1VqvN5Z1Kr9HVf9MK5rweAB6QQwt5yqPl3RK dtv5m3pIl+pp6Z82XzXbwcoY7jcObmJG+HpVlCLF9SAXd5YyaoscLcgWsOdss67bkRNO+Q Kyc7GeVN2KfJT9yd7MW7+nVBt+aGtGFQT6aPIskM92+vc3xuZUS3DXQ2LzP5OpAym5w1iQ SF2dcpf2Dvfw2XEtJPsLI+9yKu4el809nV+1ECsx6a+Kmx6xzVnsJYG3GPe3ZxcjymIdO4 Fosuuy9IzQ0yLufobCK1L2g6ln/hTyiqA4g61xmWP0OfOyXeVHpuNGxLpw9zmg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1775635222; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=i9F28QPoElHFXjSecKpbA7nEHozVWxdHvwW0NuOzOy0=; b=VPL9iZr6OSfiSBq1WUYd7QNmX8q6lrj8nbsbTvi+nxAFXcHTfK9jZo/4snnI5BA5u/iSrQ pLgVuLO9M1cmSSAw== Date: Wed, 08 Apr 2026 10:00:15 +0200 Subject: [PATCH 1/3] dt-bindings: nvmem: Add a binding for the RPi Firmware OTP register Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260408-rpi-otp-driver-v1-1-e02d1dbe6008@linutronix.de> References: <20260408-rpi-otp-driver-v1-0-e02d1dbe6008@linutronix.de> In-Reply-To: <20260408-rpi-otp-driver-v1-0-e02d1dbe6008@linutronix.de> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Eric Anholt , Stefan Wahren , Srinivas Kandagatla Cc: devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Gregor Herburger X-Developer-Signature: v=1; a=ed25519-sha256; t=1775635221; l=1463; i=gregor.herburger@linutronix.de; s=20260226; h=from:subject:message-id; bh=/3j3lZdv+iRGHGGZlhKUgCrFKI+nuGpuzrD3xSLmtOY=; b=JDccdOhsks2lYIuuKHjN7S+63sLl0WfsaVwTYbaeowBEVFTMfxKs1Ej/O6+30XkrntO+qeMCy Pa8Gj1m4xYmAY0G28P9SZHGe/aalyhZT+xn91KXMfW2rtSEdpIb8wk8 X-Developer-Key: i=gregor.herburger@linutronix.de; a=ed25519; pk=u72Lv7+/lS5CC1hmSrb17lv/6CK7HBh4Lvz77PHA5LM= The firmware running on the Raspberry Pi VideoCore can be used to access OTP registers. There are two OTP regions (private and customer). Add a binding for these. Signed-off-by: Gregor Herburger --- .../bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml | 18 ++++++++++++++= ++++ 1 file changed, 18 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-= firmware.yaml b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm28= 35-firmware.yaml index 983ea80eaec9..975c8927d75b 100644 --- a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmwar= e.yaml +++ b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmwar= e.yaml @@ -137,6 +137,20 @@ required: - compatible - mboxes =20 +patternProperties: + "^otp-(customer|private)$": + type: object + additionalProperties: false + + properties: + compatible: + enum: + - raspberrypi,firmware-otp-customer + - raspberrypi,firmware-otp-private + + required: + - compatible + additionalProperties: false =20 examples: @@ -156,6 +170,10 @@ examples: #gpio-cells =3D <2>; }; =20 + otp: otp-private { + compatible =3D "raspberrypi,firmware-otp-private"; + }; + reset: reset { compatible =3D "raspberrypi,firmware-reset"; #reset-cells =3D <1>; --=20 2.47.3 From nobody Mon Jun 15 05:21:14 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 26F7837F749; Wed, 8 Apr 2026 08:00:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775635232; cv=none; b=M+uQO/sZ3Bf+Hz7+kvAprZQtEnIfmeR1zOSSfgI1UuQ9m7V3Fixwgxabkpn9ugx00Iwt5AZQ4pvgXed0/ZzaEl+pvxrFgNfd8ztpNPhIWo5qjX2uGmfZRf9TEXExEmNWzpFh1omXVZzXntc4+8WVzTWy3Zpu114WDUZetsVHQTk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775635232; c=relaxed/simple; bh=5Gb2Eanpx7XkulkXCm+RTCsTcN0EES8SSGSQojOG/Uc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EPGlwqYIbuoheI1uAvBMindH3AQqwXgJj4P75le7HmNg71zl/hRFbiI9xszx+wx98ZIK+bjB+LJH8qSGpU/oVT6Z4crqEsvINqKgBECBAcvERygIaBHdSfJDhTkr80A/8V7Rd4K5QvUK5juw1uFPaXt+DIhCtDM9o5sua85aynI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=AE7H4D6K; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=JiBHrrqG; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="AE7H4D6K"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="JiBHrrqG" From: Gregor Herburger DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1775635222; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FHlzd5CvUO2+I2VRLlo+/O6Bf4yCL5cx4cCvx5Vp9oE=; b=AE7H4D6K9V3yP1maNxD4jXnCz5hWuNdOevOgzNfADM+PXVyMWF8KnC4s+KqtLs8M7y1WYC i1TtEeqhCcaGgfaU0ChDsnJfVgisWziXE9Q+YFS+/0Dq06i8ucS14oUrc+8BayNun7kUgc ZKsBlxJo7cm4z1GsDkf6Scwxmb82ox4WT5+ta2bEfR4AsoYRZBAbc052eMGIqedSHubzhg 9xVctrwsfy+2EyiiF+XDfjtvEJiejGUGHpWsmPe3guFF1+UqR5UEpcUGZOkOooZFnP7jA5 TSpD3o6KkbankCfkgBBGhqXitWOF4WnItbP7PQABZ/gJl8DMgjTjpAgCxC9mXg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1775635222; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FHlzd5CvUO2+I2VRLlo+/O6Bf4yCL5cx4cCvx5Vp9oE=; b=JiBHrrqGS6UCAMzZi58QG4bRjW2RjdJ+e83KuQBQVXtQwKIOWA0m66+peGlzrVs+Hzk4Ue HfX6h8m/8xtUsSAg== Date: Wed, 08 Apr 2026 10:00:16 +0200 Subject: [PATCH 2/3] nvmem: Add the Raspberry Pi OTP driver Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260408-rpi-otp-driver-v1-2-e02d1dbe6008@linutronix.de> References: <20260408-rpi-otp-driver-v1-0-e02d1dbe6008@linutronix.de> In-Reply-To: <20260408-rpi-otp-driver-v1-0-e02d1dbe6008@linutronix.de> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Eric Anholt , Stefan Wahren , Srinivas Kandagatla Cc: devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Gregor Herburger X-Developer-Signature: v=1; a=ed25519-sha256; t=1775635221; l=6674; i=gregor.herburger@linutronix.de; s=20260226; h=from:subject:message-id; bh=5Gb2Eanpx7XkulkXCm+RTCsTcN0EES8SSGSQojOG/Uc=; b=zXz1tZx0f/gWHma8Nei2S3X1zuf+Xsv9NZ53fkTpQIo+9i/1QRjdXDRI1SpvCBoki9HU2i6nr 8mZnT0IX2IIB+5Ezdoddm/tJzZTbnDspEkeZEzBMbgBL31sFCpJdo6B X-Developer-Key: i=gregor.herburger@linutronix.de; a=ed25519; pk=u72Lv7+/lS5CC1hmSrb17lv/6CK7HBh4Lvz77PHA5LM= Raspberry Pis have OTP registers which can be accessed through the videocore firmware. Add a nvmem driver to support these OTP registers. Signed-off-by: Gregor Herburger --- drivers/nvmem/Kconfig | 12 +++ drivers/nvmem/Makefile | 1 + drivers/nvmem/raspberrypi-otp.c | 159 +++++++++++++++++++++++++= ++++ include/soc/bcm2835/raspberrypi-firmware.h | 2 + 4 files changed, 174 insertions(+) diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig index 74ddbd0f79b0..892d05fe67be 100644 --- a/drivers/nvmem/Kconfig +++ b/drivers/nvmem/Kconfig @@ -483,4 +483,16 @@ config NVMEM_QORIQ_EFUSE This driver can also be built as a module. If so, the module will be called nvmem_qoriq_efuse. =20 +config NVMEM_RASPBERRYPI_OTP + tristate "Raspberry Pi OTP support" + # Make sure not 'y' when RASPBERRYPI_FIRMWARE is 'm'. This can only + # happen when COMPILE_TEST=3Dy, hence the added !RASPBERRYPI_FIRMWARE. + depends on RASPBERRYPI_FIRMWARE || (COMPILE_TEST && !RASPBERRYPI_FIRMWARE) + help + This driver provides access to the Raspberry Pi OTP memory via the + nvmem subsystem. The driver supports the customer otp as well as the + device specific private key OTP. + + This driver can also be built as a module. If so, the module + will be called raspberrypi-otp. endif diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile index 7252b8ec88d4..8ca2095e068f 100644 --- a/drivers/nvmem/Makefile +++ b/drivers/nvmem/Makefile @@ -95,3 +95,4 @@ obj-$(CONFIG_NVMEM_ZYNQMP) +=3D nvmem_zynqmp_nvmem.o nvmem_zynqmp_nvmem-y :=3D zynqmp_nvmem.o obj-$(CONFIG_NVMEM_QORIQ_EFUSE) +=3D nvmem-qoriq-efuse.o nvmem-qoriq-efuse-y :=3D qoriq-efuse.o +obj-$(CONFIG_NVMEM_RASPBERRYPI_OTP) +=3D raspberrypi-otp.o diff --git a/drivers/nvmem/raspberrypi-otp.c b/drivers/nvmem/raspberrypi-ot= p.c new file mode 100644 index 000000000000..13ee3784b137 --- /dev/null +++ b/drivers/nvmem/raspberrypi-otp.c @@ -0,0 +1,159 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include +#include +#include +#include + +struct rpi_otp_priv { + struct rpi_firmware *fw; + struct device *dev; + u32 read_tag; + u32 write_tag; +}; + +struct rpi_otp_driver_data { + const char *name; + u32 read_tag; + u32 write_tag; +}; + +struct rpi_otp_header { + u32 start; + u32 count; + u32 data[]; +}; + +static int rpi_otp_read(void *context, unsigned int offset, void *buf, siz= e_t bytes) +{ + struct rpi_otp_priv *priv =3D context; + struct rpi_otp_header *fwbuf; + int ret; + + fwbuf =3D kmalloc(sizeof(struct rpi_otp_header) + bytes, GFP_KERNEL); + if (!fwbuf) + return -ENOMEM; + + fwbuf->start =3D offset / 4; + fwbuf->count =3D bytes / 4; + + ret =3D rpi_firmware_property(priv->fw, priv->read_tag, fwbuf, + sizeof(struct rpi_otp_header) + bytes); + if (ret) + goto out; + + memcpy(buf, fwbuf->data, bytes); + +out: + kfree(fwbuf); + return ret; +} + +static int rpi_otp_write(void *context, unsigned int offset, void *val, si= ze_t bytes) +{ + struct rpi_otp_priv *priv =3D context; + struct rpi_otp_header *fwbuf; + int ret; + + fwbuf =3D kmalloc(sizeof(struct rpi_otp_header) + bytes, GFP_KERNEL); + if (!fwbuf) + return -ENOMEM; + + fwbuf->start =3D offset / 4; + fwbuf->count =3D bytes / 4; + memcpy(fwbuf->data, val, bytes); + + ret =3D rpi_firmware_property(priv->fw, priv->write_tag, fwbuf, + sizeof(struct rpi_otp_header) + bytes); + + kfree(fwbuf); + return ret; +} + +static const struct rpi_otp_driver_data rpi_otp_customer =3D { + .name =3D "rpi-otp-customer", + .read_tag =3D RPI_FIRMWARE_GET_CUSTOMER_OTP, + .write_tag =3D RPI_FIRMWARE_SET_CUSTOMER_OTP, +}; + +static const struct rpi_otp_driver_data rpi_otp_private =3D { + .name =3D "rpi-otp-private", + .read_tag =3D RPI_FIRMWARE_GET_PRIVATE_OTP, + .write_tag =3D RPI_FIRMWARE_SET_PRIVATE_OTP, +}; + +static int rpi_otp_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct nvmem_device *nvmem; + struct rpi_otp_priv *priv; + struct device_node *np; + const struct rpi_otp_driver_data *data; + struct nvmem_config config =3D { + .read_only =3D false, + .word_size =3D 4, + .stride =3D 4, + .reg_read =3D rpi_otp_read, + .reg_write =3D rpi_otp_write, + .size =3D 32, + }; + + priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + data =3D device_get_match_data(dev); + if (!data) + return -ENODEV; + + np =3D of_get_parent(dev->of_node); + if (!np) { + dev_err(dev, "Missing firmware node\n"); + return -ENOENT; + } + + priv->fw =3D devm_rpi_firmware_get(&pdev->dev, np); + of_node_put(np); + if (!priv->fw) + return -EPROBE_DEFER; + + priv->dev =3D dev; + priv->read_tag =3D data->read_tag; + priv->write_tag =3D data->write_tag; + config.dev =3D dev; + config.priv =3D priv; + config.name =3D data->name; + + nvmem =3D devm_nvmem_register(dev, &config); + if (IS_ERR(nvmem)) + return dev_err_probe(dev, PTR_ERR(nvmem), "error registering nvmem confi= g\n"); + + return 0; +} + +static const struct of_device_id rpi_otp_of_match[] =3D { + { + .compatible =3D "raspberrypi,firmware-otp-customer", + .data =3D &rpi_otp_customer + }, + { + .compatible =3D "raspberrypi,firmware-otp-private", + .data =3D &rpi_otp_private, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, rpi_otp_of_match); + +static struct platform_driver raspberry_otp_driver =3D { + .probe =3D rpi_otp_probe, + .driver =3D { + .name =3D "rpi-otp", + .of_match_table =3D rpi_otp_of_match, + }, +}; +module_platform_driver(raspberry_otp_driver); + +MODULE_AUTHOR("Gregor Herburger "); +MODULE_DESCRIPTION("Raspberry OTP driver"); +MODULE_LICENSE("GPL"); diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm28= 35/raspberrypi-firmware.h index e1f87fbfe554..6e94ccf34f47 100644 --- a/include/soc/bcm2835/raspberrypi-firmware.h +++ b/include/soc/bcm2835/raspberrypi-firmware.h @@ -92,6 +92,8 @@ enum rpi_firmware_property_tag { RPI_FIRMWARE_SET_POE_HAT_VAL =3D 0x00030050, RPI_FIRMWARE_NOTIFY_XHCI_RESET =3D 0x00030058, RPI_FIRMWARE_NOTIFY_DISPLAY_DONE =3D 0x00030066, + RPI_FIRMWARE_GET_PRIVATE_OTP =3D 0x00030081, + RPI_FIRMWARE_SET_PRIVATE_OTP =3D 0x00038081, =20 /* Dispmanx TAGS */ RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE =3D 0x00040001, --=20 2.47.3 From nobody Mon Jun 15 05:21:14 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC56339B495; Wed, 8 Apr 2026 08:00:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775635231; cv=none; b=AaZl14iFOiiAktW5nDSfXneLVflo+mZSBZbaQK558zPXkLSSiKNwvLx05zjrHJWzCghoLooEaH3nGsB8iXnXJYm2zmGPkNIxciDopKaWK9WUaV7npCNaL+cyU256K4FLe7FvyiL/2AGf9DM2CbNjtpX007ZcN7+loHzvuIDlN54= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775635231; c=relaxed/simple; bh=zdocJ1O8/ww8z4gyHQWB27Qew7fUhNz1qLp8EhG/90U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jJVMtVzRKeCqfFI59u3Kgkr1MTaPAAr8O2f8eq+/g2GES0FIpwJWAqWaHvqQAvQ1iFX6oVe1rlpb5zdqCz78AlsROPe4uIcMb+X8p/0uQpdZ3WnroPIuVsetdgvqf0idFDhrJ1tzfbNWYaet9lk57CViMQq7yNkruMMpDh+3oSI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=WjJJOZDM; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=TLWFPRl/; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="WjJJOZDM"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="TLWFPRl/" From: Gregor Herburger DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1775635222; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8EN/IuRnokUf0WAqH0XL7x6/V8kym8QNk6F6GN9+GJw=; b=WjJJOZDM5sKi3dUQXK8OOgeYkErhvvqsk0UwV/MuyNF+6RAZWI/QkPlu2Lwm1I7oSWlKi+ v8diDnq2itLvqMqcDVJMDgAQggeZfgLSVxl6aEkgxOKdRYmSioiQp6x2SfCOlG59ARFHnU OCnR2EssIRQuvYyvg6UYY5M6LiRuEdtWgP8I/UywvtLyaUJl0vOEAf05DquWf35/lwSDyd 9UhzNrpW3NL3+XAd1fWksZNGLzzK7IXJQlwAlW1Ykkca+CvazUt8e/x1gLO8KW3ioZI5PS e3Wnlh/jyhJdBmB8m5BSVZ06ehtvNyWW3Nluso2j+FZPAR5zVBXqnobF2B8gaA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1775635222; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8EN/IuRnokUf0WAqH0XL7x6/V8kym8QNk6F6GN9+GJw=; b=TLWFPRl/SnwkO0gCLEyIrz9L6HG9iBlO7DGq/EZH1afdpXKPji5EPIyR7NzoQIJZ5Es7Xr Nv4W1nxhcNFkp7Dg== Date: Wed, 08 Apr 2026 10:00:17 +0200 Subject: [PATCH 3/3] arm64: dts: broadcom: bcm2712: Add the otp nodes to firmware Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260408-rpi-otp-driver-v1-3-e02d1dbe6008@linutronix.de> References: <20260408-rpi-otp-driver-v1-0-e02d1dbe6008@linutronix.de> In-Reply-To: <20260408-rpi-otp-driver-v1-0-e02d1dbe6008@linutronix.de> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Eric Anholt , Stefan Wahren , Srinivas Kandagatla Cc: devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Gregor Herburger X-Developer-Signature: v=1; a=ed25519-sha256; t=1775635221; l=950; i=gregor.herburger@linutronix.de; s=20260226; h=from:subject:message-id; bh=zdocJ1O8/ww8z4gyHQWB27Qew7fUhNz1qLp8EhG/90U=; b=ojdxNXtZpCybmlkPxFdwFuc1YG0Sw7WdqhtphjO5I9psLadULu3k6LQGUq+ExG7lwbGdM4D8w xqsoz16FUxhDeYj7vORstXtVUMH+MvlJU/aRaS/ydLi4uDb8/Hff+Fp X-Developer-Key: i=gregor.herburger@linutronix.de; a=ed25519; pk=u72Lv7+/lS5CC1hmSrb17lv/6CK7HBh4Lvz77PHA5LM= The Raspberry Pi 5 has two OTP registers (private and customer), add these to the devicetree. Signed-off-by: Gregor Herburger --- arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi b/arch/= arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi index b7a6bc34ae1a..676081198213 100644 --- a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi +++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi @@ -60,6 +60,14 @@ reset: reset { #reset-cells =3D <1>; }; =20 + otp_customer: otp-customer { + compatible =3D "raspberrypi,firmware-otp-customer"; + }; + + otp_private: otp-private { + compatible =3D "raspberrypi,firmware-otp-private"; + }; + power: power { compatible =3D "raspberrypi,bcm2835-power"; firmware =3D <&firmware>; --=20 2.47.3