From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 A00DD3EDE5C; Thu, 23 Jul 2026 07:37:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784792243; cv=none; b=UkVXQ6Mu/1h/AYVj0vkU06wdJUPPT3cKUvGh6EU4q+ZnP5KmHFEEQCfFSoYY14yDj6FUC37yFMKbEdz52HPgnqlE3cEF4p4uBaeXJ3Xx/9bliyELzQAOlNmyOPZTMB4V/AA8jGrLhZJB00+ISOYUCTdhW6uT/iMBIY27Nh+/q5k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784792243; c=relaxed/simple; bh=BpaHoqJWuKtjcZIj/eDmPNfl+mV0bZnc2trJCNqaNbQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gkujipE5ddIF7gf5fnJ2NVxHJVCIXHjAdeF5fi3d7Rt9ExBIqGQV4jJKxf55/zRlIhdtwm4qBSr82orfaVUBiRyeOozpB6goDvW6nYCffp7clDC3zipV1Tv71OE0dI2G33LK0z3fsRs1Y3eAQMswfVHiJzQZ8hi8HYpFL4a/lyQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=piJI+Bde; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="piJI+Bde" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791736; 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=cgiwnRvqXQyohXJgGOI5oYCACH+C1E4pfz9+3bhuLq4=; b=piJI+BdeFoeti+kt/rTcEv166EZoBPGCprtdpfH3wvxZJ+1OfVV6ry10uVvXnlFhZMQuWz cpeRe2mH58+OdpH1VqzHOVbGXt2lqnSGh/ujjAceO+GT0zxMVndnycOCN+9SXsasj2zje0 aXUPEqTtbZucBADUgTtxm0rjCYFCo9I5VDM7fl+zph7E6PwfTmT8QFG539fwdu9OJ/5IyN UBkHRGWjkisYhTNrAK+MNvheyE9GBHKEVl20O7wnHr6La+VdmIsXrQeWvrfMZYNqWNm1pN WWu7bGkMSikL1SVByaZklISfXr09iG7DIKjRFOU7v81S9j5t6EhOYxHMwVSulg== Date: Thu, 23 Jul 2026 09:27:23 +0200 Subject: [PATCH v3 01/11] dt-bindings: nvmem: imx-ocotp: Add support for secure-enclave 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-1-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=1568; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=VFW8MO++U+kECJD4HNHkYMwrSbydVRwF5+pIElZnwEk=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0FaT69bGXAK/c761cQcedwxzflvZt/JP02rGMNkEt lWJX8Q6SlkYxLgYZMUUWaT4LV7bmsX6yB+rjoKZw8oEMoSBi1MAJpIVwsjQWP+nn5/DiCXUJ6sk 5PLSWMXfvKtXJj474HguhW+Phvwjhv9+G+Y6ZdftzROY9F+DN/GGwmWuxZuWyLpwsuy4UTKp6Ak zAA== X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf The driver currently uses the limited MMIO (FSB) interface to access the OTPs. The intention is to support the firmware interface alongside the MMIO interface so the driver can pick the interface that is available (firmware might not be loaded) and fallback to MMIO. Some SoCs like the i.MX9 family allow full access to the fuses only through the secure enclave firmware API. Add a property to reference the secure enclave node and let the driver use the API. Signed-off-by: Frieder Schrempf Reviewed-by: Krzysztof Kozlowski --- Documentation/devicetree/bindings/nvmem/imx-ocotp.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Documentation/devicetree/bindings/nvmem/imx-ocotp.yaml b/Docum= entation/devicetree/bindings/nvmem/imx-ocotp.yaml index a8076d0e2737..38fe451f808f 100644 --- a/Documentation/devicetree/bindings/nvmem/imx-ocotp.yaml +++ b/Documentation/devicetree/bindings/nvmem/imx-ocotp.yaml @@ -20,6 +20,16 @@ description: | allOf: - $ref: nvmem.yaml# - $ref: nvmem-deprecated-cells.yaml# + - if: + not: + properties: + compatible: + contains: + enum: + - fsl,imx93-ocotp + then: + properties: + secure-enclave: false =20 properties: compatible: @@ -56,6 +66,10 @@ properties: clocks: maxItems: 1 =20 + secure-enclave: + $ref: /schemas/types.yaml#/definitions/phandle + description: A phandle to the secure enclave node + required: - "#address-cells" - "#size-cells" --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 B3C033E7172; Thu, 23 Jul 2026 07:37:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784792243; cv=none; b=rcVWANa4dg6FsPYuUGGrvIq7+/rbng5grPXGTLJTzY7hrVCw9/J7rXECbua+uBRW8VJvXPpGoeaOe+rxGV4g7YCNptjj9ILMrZnRXYTxMlx8rFE8xVoK1PRsc3GzqxJ+zXQDP5KuTQCVfAeSQ13tJQ8cf/F2ZhlcJsr9zG49bSw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784792243; c=relaxed/simple; bh=UZnOInwEGoVgpNBqq3Tztf3mf2B9K8wVmmfkFh/0KSY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=F7rfrgUDfAD9cPI2v8EL9e9nBG9GM4YDdTjvOrW99JeXNsKTgmAxmGVUiCe1DykrdOzPtjOY600Ijzj5RKwfNoran6Ygv8CrovFjsqLntc+rmDMxkhukDa54sR1epRuWjkdSszqyc8xwSDBJHXIn8UcAYfWgWHo1/tJelPFnM/o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=2UvurZwE; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="2UvurZwE" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791736; 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=TXqjLQdB/CoMuRR1aOwLEfFv4t1NiYQCsuxpxSLoiQc=; b=2UvurZwEBzoIJOUcJbZATpImBaX2JRoSAuUKGCAFDQn1m+eusP07MLDd1bq2ZbY+bReYaw RC9O8IdxAZAwsa1gBHbB1SLKg2yIhUuD15GRWNMPPMYcCoh92JbfYh76V/pHqGEKdTxNum mT062GKIw6p2v6cUW8x6t4tK2nyNloCrRx737cDkpmbqxL6W/4pX+52WoHg9kzOQo3oBsP VKK6uN6FY66jyf/8LOtQOhRQdbwbLBDA5yjmntAFpfG3z9CCbx5RzCjzemTgScVcjPWBOJ OGky86yO1famtf8JZuqnYXnniuzZZBg3ghHp29KAIZ2Gc33nJo4y9OoNiPqjog== Date: Thu, 23 Jul 2026 09:27:24 +0200 Subject: [PATCH v3 02/11] firmware: imx: ele: Fix indentation in ele_base_msg.h 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-2-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=1571; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=DGqUdZlhyphs8hR0tjgBUY5tl6ldZ12TestuLL1xzXU=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0Nblr/cGTfZxOWTF86uwamVEeUaAwcoVr+qUNr87s eGs3vzfHaUsDGJcDLJiiixS/Bavbc1ifeSPVUfBzGFlAhnCwMUpABN5M5mRYcWj/wISfIXuepK1 rzg6jCdXZLt+SNHatPxv3PGDm4M/MjMyXJOz9f+1bKXaozdMTF/bRJQCs7NNI4qrF16zK18w52s UKwA= X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf The file uses mixed indentation characters. Use tabs everywhere. Reviewed-by: Frank Li Signed-off-by: Frieder Schrempf --- drivers/firmware/imx/ele_base_msg.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/firmware/imx/ele_base_msg.h b/drivers/firmware/imx/ele= _base_msg.h index 475074580dd7..5c128bf56e88 100644 --- a/drivers/firmware/imx/ele_base_msg.h +++ b/drivers/firmware/imx/ele_base_msg.h @@ -28,19 +28,19 @@ #define ELE_GEN_KEY_BLOB_REQ 0xaf #define ELE_GET_FW_STATUS_REQ 0xc5 #define ELE_XIP_DECRYPT_REQ 0xc6 -#define ELE_WRITE_FUSE 0xd6 -#define ELE_DEV_ATTEST_REQ 0xdb -#define ELE_WRITE_SHADOW_FUSE_REQ 0xf2 -#define ELE_READ_SHADOW_FUSE_REQ 0xf3 +#define ELE_WRITE_FUSE 0xd6 +#define ELE_DEV_ATTEST_REQ 0xdb +#define ELE_WRITE_SHADOW_FUSE_REQ 0xf2 +#define ELE_READ_SHADOW_FUSE_REQ 0xf3 =20 #define ELE_GET_INFO_REQ 0xda #define ELE_GET_INFO_REQ_MSG_SZ 0x10 #define ELE_GET_INFO_RSP_MSG_SZ 0x08 =20 -#define MAX_UID_SIZE (16) -#define DEV_GETINFO_ROM_PATCH_SHA_SZ (32) -#define DEV_GETINFO_FW_SHA_SZ (32) -#define DEV_GETINFO_OEM_SRKH_SZ (64) +#define MAX_UID_SIZE (16) +#define DEV_GETINFO_ROM_PATCH_SHA_SZ (32) +#define DEV_GETINFO_FW_SHA_SZ (32) +#define DEV_GETINFO_OEM_SRKH_SZ (64) #define DEV_GETINFO_MIN_VER_MASK 0xff #define DEV_GETINFO_MAJ_VER_MASK 0xff00 #define ELE_DEV_INFO_EXTRA_SZ 0x60 --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 9A6023DDAEB; Thu, 23 Jul 2026 07:37:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784792244; cv=none; b=lBRlCiUyzQWeRMwXIE/mscyDI6Bp8aTVcUVOEE4NrQM0rUX9h0NcYH84PELoCJ6WrFHxFyihZIFoGjfDi1E6NYSkElwZ7wIRHcwKvBfLRryMwH5ouG28qSFzALAEMQC7V8g3IJuf7ybwGnhTP+EaRGa/f4U7Q0eupRJJ4k5BszY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784792244; c=relaxed/simple; bh=pJ09Chr0zTsjTHGyMcYPOOvJN+s9GeC1D7S/zVmSMEA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ND1cfD5uDvaeH7s+ynNEIkQ+i0JmwOvJIVrqOgZhVGJfh46KcZ9c1PjPvNUiL04G+NInEj9h9hlUmdksNoGLW0qd1OIaV7Ocv3JARe7a/+a+g+PTV7gplCAjSJIIQ1CVXnyV2bnzIRifv09lsiBwwEiBbhOFTkGh1gsA7A1QAeY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=PW0ZOTfE; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="PW0ZOTfE" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791737; 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=ovjESz4Mo1zxE81v9gf+AQ4y8FEezz8eXw4C5At3XN0=; b=PW0ZOTfEiOzu+rfViSK48RX9fWikvezFckIoQzZ/AvHWQddJaex5NhyXjW1bablhBRe8Lt lLgoMLsiIvnHNIjqAmx8dfbWRj7YHxLudyAX4fjk38K5dZSpo/OzEOIYVqppUe9hr8XVM6 iVI5F87EmY9pqsk/mO2XXZ7doFo+iKh9Zip/BHx4JGaDUacy5VtbqLVEHEcEcCUHifgKsn 4YvtRsXAZkal8nvogIcu2x4BqXK8J7KMNHSyHITK2Tlr9yPKkwgdfQSDvZTt2I46ulmn1X A7PFlnFzNjgYYZQGR6G/YPR/VZxKPOIywBPVDz3ddnc/PHmh6p81nJKOhbOZqA== Date: Thu, 23 Jul 2026 09:27:25 +0200 Subject: [PATCH v3 03/11] firmware: imx: ele: Export API functions 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-3-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=13631; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=YFsACKIXpkDEbrz5+O+RlLnoul4hwtGYiLybgyAbYFc=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0NbTj+euEfDcrt73dY4Pi++RCXoRN1+tbO26n/Qgh P3p9plTO0pZGMS4GGTFFFmk+C1e25rF+sgfq46CmcPKBDKEgYtTACZybh3DPxW/81sPWT/9c6Zh 1znp1TtY/HIr3/o0b/4oNSVxsmRFGgcjw9kdL5WfC9banlmi+bhqdk5Xx+OfypJuhir7VJkOeZi xMgMA X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf Export generic ELE API functions to send and receive messages. This allows drivers to implement functions based on the ELE API. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Frieder Schrempf Reviewed-by: Frank Li --- drivers/firmware/imx/ele_base_msg.c | 42 ++++++++++---------- drivers/firmware/imx/ele_common.c | 35 ++++++++++++++++- drivers/firmware/imx/ele_common.h | 14 ------- drivers/firmware/imx/se_ctrl.c | 6 +-- drivers/firmware/imx/se_ctrl.h | 14 +------ include/linux/firmware/imx/se_api.h | 78 +++++++++++++++++++++++++++++++++= ++++ 6 files changed, 137 insertions(+), 52 deletions(-) diff --git a/drivers/firmware/imx/ele_base_msg.c b/drivers/firmware/imx/ele= _base_msg.c index 28b835f2880f..a4ab45efdd63 100644 --- a/drivers/firmware/imx/ele_base_msg.c +++ b/drivers/firmware/imx/ele_base_msg.c @@ -8,6 +8,7 @@ #include #include #include +#include #include =20 #include "ele_base_msg.h" @@ -106,8 +107,8 @@ int ele_get_info(struct se_if_priv *priv, struct ele_de= v_info *s_info) } } =20 - se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, - ELE_GET_INFO_REQ, ELE_GET_INFO_REQ_MSG_SZ, true); + imx_se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, + ELE_GET_INFO_REQ, ELE_GET_INFO_REQ_MSG_SZ, true); =20 tx_msg->data[0] =3D upper_32_bits(get_info_addr); tx_msg->data[1] =3D lower_32_bits(get_info_addr); @@ -120,8 +121,8 @@ int ele_get_info(struct se_if_priv *priv, struct ele_de= v_info *s_info) return ret; } =20 - ret =3D se_val_rsp_hdr_n_status(priv, rx_msg, ELE_GET_INFO_REQ, - ELE_GET_INFO_RSP_MSG_SZ, true); + ret =3D imx_se_val_rsp_hdr_n_status(priv, rx_msg, ELE_GET_INFO_REQ, + ELE_GET_INFO_RSP_MSG_SZ, true); if (ret < 0) { ele_get_info_cleanup(priv, get_info_data, get_info_addr, get_info_len); return ret; @@ -156,16 +157,16 @@ int ele_ping(struct se_if_priv *priv) if (!rx_msg) return -ENOMEM; =20 - se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, - ELE_PING_REQ, ELE_PING_REQ_SZ, true); + imx_se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, + ELE_PING_REQ, ELE_PING_REQ_SZ, true); =20 ret =3D ele_msg_send_rcv(priv->priv_dev_ctx, tx_msg, ELE_PING_REQ_SZ, rx_msg, ELE_PING_RSP_SZ); if (ret < 0) return ret; =20 - ret =3D se_val_rsp_hdr_n_status(priv, rx_msg, ELE_PING_REQ, - ELE_PING_RSP_SZ, true); + ret =3D imx_se_val_rsp_hdr_n_status(priv, rx_msg, ELE_PING_REQ, + ELE_PING_RSP_SZ, true); =20 return ret; } @@ -196,8 +197,9 @@ int ele_service_swap(struct se_if_priv *priv, if (!rx_msg) return -ENOMEM; =20 - se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, - ELE_SERVICE_SWAP_REQ, ELE_SERVICE_SWAP_REQ_MSG_SZ, true); + imx_se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, + ELE_SERVICE_SWAP_REQ, ELE_SERVICE_SWAP_REQ_MSG_SZ, + true); =20 tx_msg->data[0] =3D flag; tx_msg->data[1] =3D addr_size; @@ -212,8 +214,8 @@ int ele_service_swap(struct se_if_priv *priv, if (ret < 0) return ret; =20 - ret =3D se_val_rsp_hdr_n_status(priv, rx_msg, ELE_SERVICE_SWAP_REQ, - ELE_SERVICE_SWAP_RSP_MSG_SZ, true); + ret =3D imx_se_val_rsp_hdr_n_status(priv, rx_msg, ELE_SERVICE_SWAP_REQ, + ELE_SERVICE_SWAP_RSP_MSG_SZ, true); if (ret) return ret; =20 @@ -248,8 +250,8 @@ int ele_fw_authenticate(struct se_if_priv *priv, dma_ad= dr_t contnr_addr, if (!rx_msg) return -ENOMEM; =20 - se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, - ELE_FW_AUTH_REQ, ELE_FW_AUTH_REQ_SZ, true); + imx_se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, + ELE_FW_AUTH_REQ, ELE_FW_AUTH_REQ_SZ, true); =20 tx_msg->data[0] =3D lower_32_bits(contnr_addr); tx_msg->data[1] =3D 0; @@ -260,8 +262,8 @@ int ele_fw_authenticate(struct se_if_priv *priv, dma_ad= dr_t contnr_addr, if (ret < 0) return ret; =20 - ret =3D se_val_rsp_hdr_n_status(priv, rx_msg, ELE_FW_AUTH_REQ, - ELE_FW_AUTH_RSP_MSG_SZ, true); + ret =3D imx_se_val_rsp_hdr_n_status(priv, rx_msg, ELE_FW_AUTH_REQ, + ELE_FW_AUTH_RSP_MSG_SZ, true); =20 return ret; } @@ -286,8 +288,8 @@ int ele_debug_dump(struct se_if_priv *priv) if (!rx_msg) return -ENOMEM; =20 - se_fill_cmd_msg_hdr(priv, &tx_msg->header, ELE_DEBUG_DUMP_REQ, - ELE_DEBUG_DUMP_REQ_SZ, true); + imx_se_fill_cmd_msg_hdr(priv, &tx_msg->header, ELE_DEBUG_DUMP_REQ, + ELE_DEBUG_DUMP_REQ_SZ, true); =20 msg_ex_cnt =3D 0; do { @@ -298,8 +300,8 @@ int ele_debug_dump(struct se_if_priv *priv) if (ret < 0) return ret; =20 - ret =3D se_val_rsp_hdr_n_status(priv, rx_msg, ELE_DEBUG_DUMP_REQ, - ELE_DEBUG_DUMP_RSP_SZ, true); + ret =3D imx_se_val_rsp_hdr_n_status(priv, rx_msg, ELE_DEBUG_DUMP_REQ, + ELE_DEBUG_DUMP_RSP_SZ, true); if (ret) { dev_err(priv->dev, "Dump_Debug_Buffer Error: %x.", ret); break; diff --git a/drivers/firmware/imx/ele_common.c b/drivers/firmware/imx/ele_c= ommon.c index fbb6e584341a..f9c56fd42af0 100644 --- a/drivers/firmware/imx/ele_common.c +++ b/drivers/firmware/imx/ele_common.c @@ -3,11 +3,26 @@ * Copyright 2025 NXP */ =20 +#include + #include "ele_base_msg.h" #include "ele_common.h" #include "ele_fw_api.h" #include "se_ctrl.h" =20 +/* Fill a command message header with a given command ID and length in byt= es. */ +int imx_se_fill_cmd_msg_hdr(struct se_if_priv *priv, struct se_msg_hdr *hd= r, + u8 cmd, u32 len, bool is_base_api) +{ + hdr->tag =3D priv->if_defs->cmd_tag; + hdr->ver =3D (is_base_api) ? priv->if_defs->base_api_ver : priv->if_defs-= >fw_api_ver; + hdr->command =3D cmd; + hdr->size =3D len >> 2; + + return 0; +} +EXPORT_SYMBOL_GPL(imx_se_fill_cmd_msg_hdr); + int se_chk_tx_msg_hdr(struct se_if_device_ctx *dev_ctx, struct se_msg_hdr = *header) { struct se_if_priv *priv =3D dev_ctx->priv; @@ -261,6 +276,21 @@ int ele_msg_send_rcv(struct se_if_device_ctx *dev_ctx,= void *tx_msg, return err; } =20 +/* + * Send/receive blocking call for external drivers, operating on the SE + * interface private data (the misc device context is resolved internally). + */ +int imx_se_msg_send_rcv(struct se_if_priv *priv, void *tx_msg, int tx_msg_= sz, + void *rx_msg, int exp_rx_msg_sz) +{ + if (!priv) + return -EINVAL; + + return ele_msg_send_rcv(priv->priv_dev_ctx, tx_msg, tx_msg_sz, + rx_msg, exp_rx_msg_sz); +} +EXPORT_SYMBOL_GPL(imx_se_msg_send_rcv); + static bool check_hdr_exception_for_sz(struct se_if_priv *priv, struct se_msg_hdr *header) { @@ -402,8 +432,8 @@ void se_if_rx_callback(struct mbox_client *mbox_cl, voi= d *msg) } } =20 -int se_val_rsp_hdr_n_status(struct se_if_priv *priv, struct se_api_msg *ms= g, - u8 msg_id, u8 sz, bool is_base_api) +int imx_se_val_rsp_hdr_n_status(struct se_if_priv *priv, struct se_api_msg= *msg, + u8 msg_id, u8 sz, bool is_base_api) { struct se_msg_hdr *header =3D &msg->header; u32 status; @@ -450,6 +480,7 @@ int se_val_rsp_hdr_n_status(struct se_if_priv *priv, st= ruct se_api_msg *msg, =20 return 0; } +EXPORT_SYMBOL_GPL(imx_se_val_rsp_hdr_n_status); =20 int se_save_imem_state(struct se_if_priv *priv, struct se_imem_buf *imem) { diff --git a/drivers/firmware/imx/ele_common.h b/drivers/firmware/imx/ele_c= ommon.h index b63a3fbf087a..8f0739960d4d 100644 --- a/drivers/firmware/imx/ele_common.h +++ b/drivers/firmware/imx/ele_common.h @@ -28,20 +28,6 @@ int ele_msg_send_rcv(struct se_if_device_ctx *dev_ctx, v= oid *tx_msg, int tx_msg_sz, void *rx_msg, int exp_rx_msg_sz); =20 void se_if_rx_callback(struct mbox_client *mbox_cl, void *msg); - -int se_val_rsp_hdr_n_status(struct se_if_priv *priv, struct se_api_msg *ms= g, - u8 msg_id, u8 sz, bool is_base_api); - -/* Fill a command message header with a given command ID and length in byt= es. */ -static inline void se_fill_cmd_msg_hdr(struct se_if_priv *priv, struct se_= msg_hdr *hdr, - u8 cmd, u32 len, bool is_base_api) -{ - hdr->tag =3D priv->if_defs->cmd_tag; - hdr->ver =3D (is_base_api) ? priv->if_defs->base_api_ver : priv->if_defs-= >fw_api_ver; - hdr->command =3D cmd; - hdr->size =3D len >> 2; -} - int se_save_imem_state(struct se_if_priv *priv, struct se_imem_buf *imem); =20 int se_restore_imem_state(struct se_if_priv *priv, struct se_imem_buf *ime= m); diff --git a/drivers/firmware/imx/se_ctrl.c b/drivers/firmware/imx/se_ctrl.c index 3c14964830a6..53f252d2f111 100644 --- a/drivers/firmware/imx/se_ctrl.c +++ b/drivers/firmware/imx/se_ctrl.c @@ -911,9 +911,9 @@ static int se_ioctl_cmd_snd_rcv_rsp_handler(struct se_i= f_device_ctx *dev_ctx, "message received, start transmit to user"); =20 rsp_status_err =3D - se_val_rsp_hdr_n_status(priv, rx_msg, tx_msg->header.command, - cmd_snd_rcv_rsp_info.rx_buf_sz, - tx_msg->header.ver =3D=3D priv->if_defs->base_api_ver); + imx_se_val_rsp_hdr_n_status(priv, rx_msg, tx_msg->header.command, + cmd_snd_rcv_rsp_info.rx_buf_sz, + tx_msg->header.ver =3D=3D priv->if_defs->base_api_ver); =20 if (!rsp_status_err) { err =3D se_dev_ctx_cpy_out_data(dev_ctx); diff --git a/drivers/firmware/imx/se_ctrl.h b/drivers/firmware/imx/se_ctrl.h index af7738ad76cd..76082e8b977c 100644 --- a/drivers/firmware/imx/se_ctrl.h +++ b/drivers/firmware/imx/se_ctrl.h @@ -7,6 +7,7 @@ #define SE_CTRL_H =20 #include +#include #include #include #include @@ -95,22 +96,9 @@ struct se_if_device_ctx { struct kref refcount; }; =20 -/* Header of the messages exchange with the EdgeLock Enclave */ -struct se_msg_hdr { - u8 ver; - u8 size; - u8 command; - u8 tag; -} __packed; - #define SE_MU_HDR_SZ 4 #define SE_MU_HDR_WORD_SZ 1 =20 -struct se_api_msg { - struct se_msg_hdr header; - u32 data[]; -}; - struct se_if_defines { const u8 se_if_type; u8 cmd_tag; diff --git a/include/linux/firmware/imx/se_api.h b/include/linux/firmware/i= mx/se_api.h index b1c4c9115d7b..90104ecaaede 100644 --- a/include/linux/firmware/imx/se_api.h +++ b/include/linux/firmware/imx/se_api.h @@ -11,4 +11,82 @@ #define SOC_ID_OF_IMX8ULP 0x084d #define SOC_ID_OF_IMX93 0x9300 =20 +/** + * struct se_msg_hdr - Header of the messages exchanged with the secure en= clave. + * @ver: API version the message conforms to (base or firmware API version= ). + * @size: Message size in 32-bit words, including the header. + * @command: Command identifier. + * @tag: Message tag identifying it as a command or a response. + */ +struct se_msg_hdr { + u8 ver; + u8 size; + u8 command; + u8 tag; +} __packed; + +/** + * struct se_api_msg - A message exchanged with the secure enclave. + * @header: Message header describing the command and its length. + * @data: Command or response payload, sized per @header.size. + */ +struct se_api_msg { + struct se_msg_hdr header; + u32 data[]; +}; + +/* Opaque handle to a secure-enclave interface instance. */ +struct se_if_priv; + +/** + * imx_se_fill_cmd_msg_hdr() - Populate the header of a command message. + * @priv: Secure-enclave interface instance the command targets. + * @hdr: Message header to be filled in. + * @cmd: Command identifier to place in the header. + * @len: Total message length in bytes, including the header. + * @is_base_api: %true to tag the message with the base API version, %fals= e to + * use the firmware API version. + * + * Fill in the tag, version, command and size fields of @hdr so that the m= essage + * can be sent to the secure enclave. + * + * Return: 0 on success. + */ +int imx_se_fill_cmd_msg_hdr(struct se_if_priv *priv, struct se_msg_hdr *hd= r, + u8 cmd, u32 len, bool is_base_api); + +/** + * imx_se_msg_send_rcv() - Send a command to the secure enclave and wait f= or the + * response. + * @priv: Secure-enclave interface instance to communicate with. + * @tx_msg: Buffer holding the command message to send. + * @tx_msg_sz: Size of the command message in bytes. + * @rx_msg: Buffer receiving the response message. + * @exp_rx_msg_sz: Expected size of the response message in bytes. + * + * Blocking send/receive helper for external drivers. The transaction is + * serialized internally and the misc device context is resolved from @pri= v. + * + * Return: number of bytes received on success, or a negative error code. + */ +int imx_se_msg_send_rcv(struct se_if_priv *priv, void *tx_msg, int tx_msg_= sz, + void *rx_msg, int exp_rx_msg_sz); + +/** + * imx_se_val_rsp_hdr_n_status() - Validate a response header and status c= ode. + * @priv: Secure-enclave interface instance the response came from. + * @msg: Response message to validate. + * @msg_id: Command identifier the response is expected to match. + * @sz: Expected response size in bytes. + * @is_base_api: %true if the command used the base API version, %false if= it + * used the firmware API version. + * + * Check that the response tag, command identifier, size and API version m= atch + * the expectations, and that the enclave reported a successful status. + * + * Return: 0 if the response is valid and successful, or a negative error = code. + */ +int imx_se_val_rsp_hdr_n_status(struct se_if_priv *priv, struct se_api_msg= *msg, + u8 msg_id, u8 sz, bool is_base_api); + #endif /* __SE_API_H__ */ --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 B390E3E6397; Thu, 23 Jul 2026 07:37:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784792243; cv=none; b=LbdAwJRCghoHQP9+IVsq6UpHOsIsgAsTtbicBWcKveE1uxGlDAICak6g3X1O9AaIhEoh+u/AszZhzm8XDH6X2gI5Ly+aN/fhK8B38/5kLTMcXqjuf7JxF7F7FV4vSPsG74NjOGntUiMN4++XeoEqnB0/T9lCgKzyZy7qPmAKtic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784792243; c=relaxed/simple; bh=BX+Sel3Ae4XusHp2wSzv2dwsS9SdIb3azp5qa3pJZL4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=STm/Zz2b5KPNHxsoFgCxfXDNJZW1FmcqiU5r1e5bLymJ9fBxdVWPuFGDbuF6lbErV4c9SboieGVZTQr+eN88PjBvlpKt9BpX2KNgMh4Wxt+LExTfXTth4LHJXrOaaa8dpmUEdKgZYyGOzzy3LkUg6/qBB4hhAO2mV4EN2B8jM6Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=ZPxvfK7q; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="ZPxvfK7q" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791737; 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=6jRO/10N/zvQgQ5YhIHQJf/DZBZyqM7tDf/bFYg+EZU=; b=ZPxvfK7qZCxP4NrsCCoFXhFRbfwafjiGoiAd/GHB3WsEXh9WQEIndemApyWPBsxKkRWBvB 55FpGfmDFGQM18kRRpXY+hNM+Kq5Eh9FoFZRK62CqaIgcP7SdtMW9TnN/W2XJV5BEkam/8 4aXQcFNZhccijeX1SteLHaoOVo20Uaj5rHwl5hoPmhB9iG5IAUvG3oRrG0RFpHUJRkWLMf HzTxcsXvA351CXHzsjvP7798/MByy9fuMBBYD5mNzxtIYJmaa+/yYeSQNi2EDnfmoYs1Y2 2U7leuUy7J8B66oLwZMqH4+37LxlN/9v59YK7eMOKH5MJGHjuFZPeLWNhCweKg== Date: Thu, 23 Jul 2026 09:27:26 +0200 Subject: [PATCH v3 04/11] nvmem: imx-ocotp-ele: Add keepout table for i.MX93 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-4-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=1912; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=uWHeQFtm8hXfW7ZA55vuDeShYnRX7s0r6QBPlDcypKQ=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0FYmgxpXr/RVU84/ld9ma3fdTXH6/jatMwtu7+JcP 0GTw/dXRykLgxgXg6yYIosUv8VrW7NYH/lj1VEwc1iZQIYwcHEKwEQSNBkZLjaubgt9/m9Ck4Pn lZ3XgtdqshyYGsNy9ZXVFJN7h8Pe/GVkuPF722cLPRfP95N3p79Me8qVXVenXsF2wqk0lM3a93M FFwA= X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf Add an overall keepout table to describe which fuse registers are invalid and not accessible. No functional changes intended. Signed-off-by: Frieder Schrempf --- drivers/nvmem/imx-ocotp-ele.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/nvmem/imx-ocotp-ele.c b/drivers/nvmem/imx-ocotp-ele.c index a0d2985c6d03..dadec19ca252 100644 --- a/drivers/nvmem/imx-ocotp-ele.c +++ b/drivers/nvmem/imx-ocotp-ele.c @@ -34,6 +34,8 @@ struct ocotp_devtype_data { u32 num_entry; u32 flag; nvmem_reg_read_t reg_read; + const struct nvmem_keepout *keepout; + unsigned int nkeepout; struct ocotp_map_entry entry[]; }; =20 @@ -163,6 +165,12 @@ static int imx_ele_ocotp_probe(struct platform_device = *pdev) priv->config.read_only =3D true; priv->config.add_legacy_fixed_of_cells =3D true; priv->config.fixup_dt_cell_info =3D imx_ocotp_fixup_dt_cell_info; + + if (priv->data->nkeepout) { + priv->config.keepout =3D priv->data->keepout; + priv->config.nkeepout =3D priv->data->nkeepout; + } + mutex_init(&priv->lock); =20 nvmem =3D devm_nvmem_register(dev, &priv->config); @@ -172,6 +180,14 @@ static int imx_ele_ocotp_probe(struct platform_device = *pdev) return 0; } =20 +static const struct nvmem_keepout imx93_ocotp_keepout[] =3D { + {.start =3D 208, .end =3D 252}, + {.start =3D 256, .end =3D 512}, + {.start =3D 576, .end =3D 728}, + {.start =3D 732, .end =3D 752}, + {.start =3D 756, .end =3D 1248}, +}; + static const struct ocotp_devtype_data imx93_ocotp_data =3D { .reg_off =3D 0x8000, .reg_read =3D imx_ocotp_reg_read, @@ -185,6 +201,8 @@ static const struct ocotp_devtype_data imx93_ocotp_data= =3D { { 188, 1, FUSE_ELE }, { 312, 200, FUSE_FSB } }, + .keepout =3D imx93_ocotp_keepout, + .nkeepout =3D ARRAY_SIZE(imx93_ocotp_keepout), }; =20 static const struct ocotp_devtype_data imx94_ocotp_data =3D { --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 A9AB13E6DF4; Thu, 23 Jul 2026 07:29:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; cv=none; b=snvRjh2ehj+6XwgvbMaJhiydUm5nxp6BQTNuoYYd++KOqoLm9fjDF+0ZnUWW7rXJTsVqQiYGku+YGVhSeACGjtrzYlRBZ1L6Z49nlImaTnTUhsdn6dS5TgKTpsbFcl48p7s0pHmpUgIFN6fKWsdEUHDP6XlmDyhuOfLBK7NXn28= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; c=relaxed/simple; bh=lUJYw1aJYNMh+RrYSSVQv8EebyGrdkywdUc5+gHYW1o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e0Ko3C5LZPMXVYWYBxDu5frWn4oeALjs9Cgnzm0HFVdUMs1edsUy+adqevxzNukpwfGGA3S8IWNMykQWL8EMw6x8kmm43XThfDVo8JoPaeEf15P6Z7CTsiBq0BffFMXHZVyJhDgVGY5/+IiHotYgePMR030ZQ//x7CzJOui6DYk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=lOnt/d6h; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="lOnt/d6h" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791738; 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=YgkBtP6nNzonijjkoBKV0QVOrecMeEewwoCV4e78j/k=; b=lOnt/d6hSJbLA9no6veiCv67FUqnZSXHJDXj+tzm54+7IW3dx9WDAUmVhL31E05IKckNc3 KK4q0tyijNahzvdIceWZSpVy+sMxGpGSpDQpeK2OAihkYlVd6YOYnt8FCGbNCG5UdWFG+Q b4mG6sqryrb9BPfegYVXtzedD2YsArDpQfXzunLmHs4Bg+ByWjLbi2t4yZY4Rt2fdsdonL b2nm51DLd3bu9J86dwOVEYYHh4XV4gSmpZR2Up/awVk6eECGJJQmilzC26wzOUBh0/G9td r/Zqqf0JSIbvaAPvJIYZUM8h/nAFa15qPe4FHvmUGeTYTmNWtB9SaV7WLRKtXQ== Date: Thu, 23 Jul 2026 09:27:27 +0200 Subject: [PATCH v3 05/11] nvmem: imx-ocotp-ele: Remove device-specific reg_read() 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-5-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=1858; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=tzG445aZESnsh+ntaPiN9Hp1gZDznh/2L9SQGlPLcAE=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0LaPLefdBJbzmMSELp3maXqZ2WhN1KzQrQnGKdMeZ l1YJOzZUcrCIMbFICumyCLFb/Ha1izWR/5YdRTMHFYmkCEMXJwCMJHIwwz/a473LXgeV/J2I0/I 5G0xTyL1/PKOBfExH5b89cGMY0HxWob/rld5Pv1nrZByPcynEcE976v33cWV7/otrZPbA5boJGz iAQA= X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf We only have a single implementation of the read hook. There is no need to store it in the device data. Signed-off-by: Frieder Schrempf --- drivers/nvmem/imx-ocotp-ele.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/nvmem/imx-ocotp-ele.c b/drivers/nvmem/imx-ocotp-ele.c index dadec19ca252..9d3f94e35508 100644 --- a/drivers/nvmem/imx-ocotp-ele.c +++ b/drivers/nvmem/imx-ocotp-ele.c @@ -33,7 +33,6 @@ struct ocotp_devtype_data { u32 size; u32 num_entry; u32 flag; - nvmem_reg_read_t reg_read; const struct nvmem_keepout *keepout; unsigned int nkeepout; struct ocotp_map_entry entry[]; @@ -158,7 +157,7 @@ static int imx_ele_ocotp_probe(struct platform_device *= pdev) priv->config.id =3D NVMEM_DEVID_AUTO; priv->config.owner =3D THIS_MODULE; priv->config.size =3D priv->data->size; - priv->config.reg_read =3D priv->data->reg_read; + priv->config.reg_read =3D imx_ocotp_reg_read; priv->config.word_size =3D 1; priv->config.stride =3D 1; priv->config.priv =3D priv; @@ -190,7 +189,6 @@ static const struct nvmem_keepout imx93_ocotp_keepout[]= =3D { =20 static const struct ocotp_devtype_data imx93_ocotp_data =3D { .reg_off =3D 0x8000, - .reg_read =3D imx_ocotp_reg_read, .size =3D 2048, .num_entry =3D 6, .entry =3D { @@ -207,7 +205,6 @@ static const struct ocotp_devtype_data imx93_ocotp_data= =3D { =20 static const struct ocotp_devtype_data imx94_ocotp_data =3D { .reg_off =3D 0x8000, - .reg_read =3D imx_ocotp_reg_read, .size =3D 3296, /* 103 Banks */ .num_entry =3D 10, .entry =3D { @@ -226,7 +223,6 @@ static const struct ocotp_devtype_data imx94_ocotp_data= =3D { =20 static const struct ocotp_devtype_data imx95_ocotp_data =3D { .reg_off =3D 0x8000, - .reg_read =3D imx_ocotp_reg_read, .size =3D 2048, .num_entry =3D 12, .entry =3D { --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 A95DA3E639B; Thu, 23 Jul 2026 07:29:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; cv=none; b=DIWrJnftUY3WClonBJnhVlpmVkm68Jqfbn9CH7lF5kJqvvEqwU8joibfwugU9BQiYf7CS3HuIn6MS7Ny/RJ4EFmJM+pfecmSWOeN97VP55F62KMK+WNqzbZBaynUJQEdZ9zFKfRbKuiayAcDkDVcXgFhBDEcTC13wjT5oOMsbho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; c=relaxed/simple; bh=wKij38HGAAt7YISA6FyqC9dlADCJpzJDlZ/LQ1v14os=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IHGtXGUF/XM81QLxeuc4gNDooUXu8U/FDVGWFchy94Wf0iQqCrTnr719Srvf9BXqqdf24IkP952SqHDzhOnr4MxUE62OTjKBXLHgdOdtGAfNAhsBh4N5chaJWVZ2zcUrrUBd7tmr3WqgQbYdIjxv5kOUytLJ1hwDCTwMGOnU9eU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=Y430jYG2; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="Y430jYG2" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791738; 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=AWfpNOMblUSFgxMlfiBcTi/hJKFn8YKP25mru4Aw2gA=; b=Y430jYG2h399Q9r2dE+wsbvx2A/5Dpi0qqtG1jAYAK1WLYQfgo5iwvXd6CnZeLe5Wku+4B UvLbXTuk3dYQp3b98MqzZzBPXDqyGCiHboSJUEBR1MZ2yNPPTazjCoHjHqGgJx4hPstfUs NF9K08X863Cnz6P7Mp8PQWoW7p44upALP0AQU0u1ux2tWFpDLITF/sHLYWWos1IXILg2dM lVqPN7InHSXlYvaqoSJ3u+XbEF3vyj6EJUktgTkPxZyaKQGQuD7UBwKHO/NiPFkehKGzuy uweftw4c8bYWYlWglg8d7YjeduUWEtInpQFbOdM2YXZE9QpdBvn8wlMr30UmYw== Date: Thu, 23 Jul 2026 09:27:28 +0200 Subject: [PATCH v3 06/11] nvmem: imx-ocotp-ele: Use __free(kfree) in imx_ocotp_reg_read() 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-6-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=1174; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=tw7aokEcvh90MWTeMqjklR+YyN0xvrsJL5lNb7B2Txg=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0Las9roZu+TaT+86HF5013H9tN7LMRmCjjNfP3sft L11m2p1RykLgxgXg6yYIosUv8VrW7NYH/lj1VEwc1iZQIYwcHEKwER+ujP8d5J9cuvqxQrTsAmL z5zQ1K/uFtYsv2F4JvnSrtVLfd1TlzD8M98Rto/Po+Wd1yapebte527yiGW5bN7V9OBm0qGDZz6 vYQAA X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf This is useful to make sure the buffer is always freed when its scope ends and makes the code slightly easier to read. Signed-off-by: Frieder Schrempf --- drivers/nvmem/imx-ocotp-ele.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/nvmem/imx-ocotp-ele.c b/drivers/nvmem/imx-ocotp-ele.c index 9d3f94e35508..47ee6bd176a3 100644 --- a/drivers/nvmem/imx-ocotp-ele.c +++ b/drivers/nvmem/imx-ocotp-ele.c @@ -5,6 +5,7 @@ * Copyright 2023 NXP */ =20 +#include #include #include #include @@ -68,10 +69,10 @@ static int imx_ocotp_reg_read(void *context, unsigned i= nt offset, void *val, siz { struct imx_ocotp_priv *priv =3D context; void __iomem *reg =3D priv->base + priv->data->reg_off; + void *p __free(kfree) =3D NULL; u32 count, index, num_bytes; enum fuse_type type; u32 *buf; - void *p; int i; u8 skipbytes; =20 @@ -108,8 +109,6 @@ static int imx_ocotp_reg_read(void *context, unsigned i= nt offset, void *val, siz =20 mutex_unlock(&priv->lock); =20 - kfree(p); - return 0; }; =20 --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 A9CDA3E717A; Thu, 23 Jul 2026 07:29:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; cv=none; b=A/Kl1qEjpixvQyWOTv+DfmAm0RDrwlLnH8tcjVfLBJsB9uxU8gAc3wKD58e56rQiXP5NLNOihP6VGVPjbWX5XIdrURa/qZ9ds/gYDRzWozyCL3916UJIwPJtpbx4Se2BaEz2sA3RLoj3xzepQNTPCNQoJeOOPuS0JYymtaMLSYw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; c=relaxed/simple; bh=DvBLMFFMqhjcK/mtSmBXrkd1pVaKzFZPX4BOh+/c7bE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=I+o/IOW1XXSW5EquIu8VVo7ELOYSYRmoqO0YaPupguJD1VY4BvzySjPlze2z9urXFQlmi5yIG4Pt/oxCggikRX6/SvBd6a+s4wChr/AKTrqMGvU6M+WxZje0YN0FuVKUbwpUJIZglP4WZr5tFiPIfCMtfDzktdwTrBiVgc1JusI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=LjzTFWvG; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="LjzTFWvG" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791738; 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=xoQzTXuDuiokYI38jvyMnODPwxI+8Eexv4gmNuBhtXI=; b=LjzTFWvGOuzRHTPFYRuFYgr0XqFX2t2IUDZyykula8CQX/8UVSd1ZnukoMLfXSJEABPYZX VPNrWzcZXQNHobQ6ALYzIpedRzvMrV08L9gzuy6FXFEpyo1EbeP4jfrZArfe0Zn7Dz8Fry rnsZCSdaCz2T4kfqST3EmQl6BzVmPAbyip8DCdIHL5Y5wX9CIoLYk4XlP5bZzZuwHAAxpt iO78tdUeXhjPZYFQH63urgA8HSqj2QsVbfgWONUH//g0Gm3ojowP2yrlYhnHpsaZZxfSjG 1NOc5jiQC/kX125iQTxBSt4l2OAxiLYhFNX8tKcB0z8qtouhfZkSxllvAp2Q0A== Date: Thu, 23 Jul 2026 09:27:29 +0200 Subject: [PATCH v3 07/11] nvmem: imx-ocotp-ele: Support the ELE API 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-7-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=8311; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=bexM75HEGaMazdG9kbnGppPaWEavFDTLd0QOTQKGZD0=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0LaueSq854IvM34Ltk882LN9TYPIwY333cUlNl3v3 f9jrYx6RykLgxgXg6yYIosUv8VrW7NYH/lj1VEwc1iZQIYwcHEKwETOuzH84S7/OVN7Uk3il5zL 3ItXnO/UXFTaYX6Ecffqg4Kn1y98O4nhD+eP6bHnhTlWb9JKiNqpGrtzun7bXplXE64sm5p+0Xr mRwYA X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf The fuses inside the Edgelock Secure Enclave are currently not accessed via its API but through the FSB block which provides limited access to some fuses. The ELE API allows us to access all fuses with read/write permissions. Therefore use it as primary method and only fall back to the limited FSB if the ELE API is not available. Signed-off-by: Frieder Schrempf --- drivers/nvmem/imx-ocotp-ele.c | 178 ++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 177 insertions(+), 1 deletion(-) diff --git a/drivers/nvmem/imx-ocotp-ele.c b/drivers/nvmem/imx-ocotp-ele.c index 47ee6bd176a3..6ac7d588c4bd 100644 --- a/drivers/nvmem/imx-ocotp-ele.c +++ b/drivers/nvmem/imx-ocotp-ele.c @@ -7,10 +7,12 @@ =20 #include #include +#include #include #include #include #include +#include #include #include #include /* ETH_ALEN */ @@ -45,8 +47,113 @@ struct imx_ocotp_priv { struct nvmem_config config; struct mutex lock; const struct ocotp_devtype_data *data; + struct se_if_priv *se_data; }; =20 +/* ELE commands and message sizes used for OCOTP fuse access. */ +#define ELE_READ_FUSE_REQ 0x97 +#define ELE_READ_FUSE_REQ_MSG_SZ 0x08 +#define ELE_READ_FUSE_RSP_MSG_SZ 0x0c + +#define ELE_WRITE_FUSE 0xd6 +#define ELE_WRITE_FUSE_REQ_MSG_SZ 0x0c +#define ELE_WRITE_FUSE_RSP_MSG_SZ 0x0c + +/* + * imx_ocotp_se_read_fuse() - Request the secure enclave FW to read a fuse. + * @priv: handle to the secure-enclave interface. + * @fuse_id: fuse identifier to read. + * @value: location to store the read fuse value. + * + * Secure enclaves like the EdgeLock Enclave manage the fuses. This reques= ts + * the FW to read the fuse and returns the value reported by the FW. + * + * Return: 0 on success, a negative error code otherwise. + */ +static int imx_ocotp_se_read_fuse(struct se_if_priv *priv, u16 fuse_id, u3= 2 *value) +{ + struct se_api_msg *tx_msg __free(kfree) =3D NULL; + struct se_api_msg *rx_msg __free(kfree) =3D NULL; + int ret; + + if (!priv) + return -EINVAL; + + tx_msg =3D kzalloc(ELE_READ_FUSE_REQ_MSG_SZ, GFP_KERNEL); + if (!tx_msg) + return -ENOMEM; + + rx_msg =3D kzalloc(ELE_READ_FUSE_RSP_MSG_SZ, GFP_KERNEL); + if (!rx_msg) + return -ENOMEM; + + ret =3D imx_se_fill_cmd_msg_hdr(priv, &tx_msg->header, ELE_READ_FUSE_REQ, + ELE_READ_FUSE_REQ_MSG_SZ, true); + if (ret) + return ret; + + tx_msg->data[0] =3D fuse_id; + + ret =3D imx_se_msg_send_rcv(priv, tx_msg, ELE_READ_FUSE_REQ_MSG_SZ, + rx_msg, ELE_READ_FUSE_RSP_MSG_SZ); + if (ret < 0) + return ret; + + ret =3D imx_se_val_rsp_hdr_n_status(priv, rx_msg, ELE_READ_FUSE_REQ, + ELE_READ_FUSE_RSP_MSG_SZ, true); + if (ret) + return ret; + + *value =3D rx_msg->data[1]; + + return 0; +} + +/* + * imx_ocotp_se_write_fuse() - Request the secure enclave FW to write a fu= se. + * @priv: handle to the secure-enclave interface. + * @fuse_id: fuse identifier to write to. + * @value: value to write to the fuse. + * + * Secure enclaves like the EdgeLock Enclave manage the fuses. This reques= ts + * the FW to program the fuse with the given value. + * + * Return: 0 on success, a negative error code otherwise. + */ +static int imx_ocotp_se_write_fuse(struct se_if_priv *priv, u16 fuse_id, u= 32 value) +{ + struct se_api_msg *tx_msg __free(kfree) =3D NULL; + struct se_api_msg *rx_msg __free(kfree) =3D NULL; + int ret; + + if (!priv) + return -EINVAL; + + tx_msg =3D kzalloc(ELE_WRITE_FUSE_REQ_MSG_SZ, GFP_KERNEL); + if (!tx_msg) + return -ENOMEM; + + rx_msg =3D kzalloc(ELE_WRITE_FUSE_RSP_MSG_SZ, GFP_KERNEL); + if (!rx_msg) + return -ENOMEM; + + ret =3D imx_se_fill_cmd_msg_hdr(priv, &tx_msg->header, ELE_WRITE_FUSE, + ELE_WRITE_FUSE_REQ_MSG_SZ, true); + if (ret) + return ret; + + tx_msg->data[0] =3D (32 << 16) | (fuse_id << 5); + tx_msg->data[1] =3D value; + + ret =3D imx_se_msg_send_rcv(priv, tx_msg, ELE_WRITE_FUSE_REQ_MSG_SZ, + rx_msg, ELE_WRITE_FUSE_RSP_MSG_SZ); + if (ret < 0) + return ret; + + return imx_se_val_rsp_hdr_n_status(priv, rx_msg, ELE_WRITE_FUSE, + ELE_WRITE_FUSE_RSP_MSG_SZ, true); +} + static enum fuse_type imx_ocotp_fuse_type(void *context, u32 index) { struct imx_ocotp_priv *priv =3D context; @@ -73,6 +180,7 @@ static int imx_ocotp_reg_read(void *context, unsigned in= t offset, void *val, siz u32 count, index, num_bytes; enum fuse_type type; u32 *buf; + int ret; int i; u8 skipbytes; =20 @@ -93,6 +201,19 @@ static int imx_ocotp_reg_read(void *context, unsigned i= nt offset, void *val, siz buf =3D p; =20 for (i =3D index; i < (index + count); i++) { + /* + * All fuse registers can be read via ELE. If the SE device is + * available, always prefer it. + */ + if (priv->se_data) { + ret =3D imx_ocotp_se_read_fuse(priv->se_data, i, buf++); + if (ret) { + mutex_unlock(&priv->lock); + return ret; + } + continue; + } + type =3D imx_ocotp_fuse_type(context, i); if (type =3D=3D FUSE_INVALID || type =3D=3D FUSE_ELE) { *buf++ =3D 0; @@ -112,6 +233,32 @@ static int imx_ocotp_reg_read(void *context, unsigned = int offset, void *val, siz return 0; }; =20 +static int imx_ocotp_reg_write(void *context, unsigned int offset, void *v= al, size_t bytes) +{ + struct imx_ocotp_priv *priv =3D context; + u32 word =3D offset >> 2; + u32 *buf =3D val; + int ret; + + /* allow only writing one complete OTP word at a time */ + if ((bytes !=3D 4) || (offset % 4 !=3D 0)) + return -EINVAL; + + /* + * The ELE API returns an error when writing an all-zero value. As + * OTP fuse bits can not be switched from 1 to 0 anyway, skip these + * values. + */ + if (!*buf) + return 0; + + mutex_lock(&priv->lock); + ret =3D imx_ocotp_se_write_fuse(priv->se_data, word, *buf); + mutex_unlock(&priv->lock); + + return ret; +} + static int imx_ocotp_cell_pp(void *context, const char *id, int index, unsigned int offset, void *data, size_t bytes) { @@ -138,8 +285,10 @@ static void imx_ocotp_fixup_dt_cell_info(struct nvmem_= device *nvmem, static int imx_ele_ocotp_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; + struct platform_device *se_pdev; struct imx_ocotp_priv *priv; struct nvmem_device *nvmem; + struct device_node *np; =20 priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) @@ -151,16 +300,40 @@ static int imx_ele_ocotp_probe(struct platform_device= *pdev) if (IS_ERR(priv->base)) return PTR_ERR(priv->base); =20 + np =3D of_parse_phandle(pdev->dev.of_node, "secure-enclave", 0); + if (!np) { + dev_info(dev, "missing or invalid SE handle, using readonly FSB\n"); + } else { + se_pdev =3D of_find_device_by_node(np); + + of_node_put(np); + if (!se_pdev) + return dev_err_probe(dev, -ENODEV, "failed to find SE device\n"); + + priv->se_data =3D platform_get_drvdata(se_pdev); + if (!priv->se_data) { + put_device(&se_pdev->dev); + return dev_err_probe(dev, -EPROBE_DEFER, "SE device not ready\n"); + } + + if (!device_link_add(dev, &se_pdev->dev, DL_FLAG_AUTOREMOVE_CONSUMER)) { + put_device(&se_pdev->dev); + return dev_err_probe(dev, -EINVAL, "failed to link to SE device\n"); + } + + put_device(&se_pdev->dev); + } + priv->config.dev =3D dev; priv->config.name =3D "ELE-OCOTP"; priv->config.id =3D NVMEM_DEVID_AUTO; priv->config.owner =3D THIS_MODULE; priv->config.size =3D priv->data->size; priv->config.reg_read =3D imx_ocotp_reg_read; + priv->config.reg_write =3D imx_ocotp_reg_write; priv->config.word_size =3D 1; priv->config.stride =3D 1; priv->config.priv =3D priv; - priv->config.read_only =3D true; priv->config.add_legacy_fixed_of_cells =3D true; priv->config.fixup_dt_cell_info =3D imx_ocotp_fixup_dt_cell_info; =20 @@ -169,6 +342,9 @@ static int imx_ele_ocotp_probe(struct platform_device *= pdev) priv->config.nkeepout =3D priv->data->nkeepout; } =20 + if (!priv->se_data) + priv->config.read_only =3D true; + mutex_init(&priv->lock); =20 nvmem =3D devm_nvmem_register(dev, &priv->config); --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 A99E13E63B0; Thu, 23 Jul 2026 07:29:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791748; cv=none; b=SYRN0q4qyRT4GiDqoyGu8sQbL/lqD7e1dVnWNFWl5csybYxGcPg8he9RE175Nlb3RC7pX71TK2Qmkxc5wvFbluRFk3+TMoc5zATkfouC1nrtS5QU2uQ8l3wrMlXLAzCHJKQIGxG9oMEJhPFP282HHfNd5mx5rKS4qGH58P6l0p4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791748; c=relaxed/simple; bh=ezOWvH/osRE6H/cXFkg9H9smMaW9rStaT6bb3eJPa3Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WBdSpy8Y+sGT7gNnD0sZXidCqOzOCGNzToyveGPgjnKhaccLM0VDcs92COEHMBH1f6hLVyU/o3l8TtMAofhaQAvs05J9E0ZPq3wD5nAPInk/SEw3VjjkRylDSQckenbeBlirCo3wjDhP87TDEaG/ay0GetAn1sLmSKDwJtiWhiA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=FGecPVHp; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="FGecPVHp" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791739; 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=hg5tW1Rb6Nt7cG6Ff89MFT0HTZsA91xkclD1Vy8H15c=; b=FGecPVHpATjEZnX7XDaq5cdnxFlQeDRSmp7e1SvrSmotHikb1MR0Iynup1vuIb5vB725r3 s+iaAfHyaxYmjiGWtz750pdV16K30gttjYJ19g2K9dmckno34sxOqfyWUKBoEwFHvle7YH aKpf5/2N+u1d6YVi48u14oIJPfOOTJ2pPuTKK1+zI1tgYR3BwarChXzvGbTRZlxQzusXNI ATs6ANElGu40r+s77xkjU/RpccSvX64WN9IykUeTXN8sRkJ9wfaNnoQZnwiLUYy4Yjslgp Bhr5uiT4E+G+NtBBuFlreLYRtXOk5DloGTY3ynMRVO+vqv3wl5gAN5BKiqjIbA== Date: Thu, 23 Jul 2026 09:27:30 +0200 Subject: [PATCH v3 08/11] nvmem: imx-ocotp-ele: Remove the FUSE_ELE type 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-8-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=2820; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=CqKbLWJEprAuY0A/3w0FIvWFGg+83f0jb6ih5HsLxAE=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0DYb97SzdWYnl5fJ/HhX/oq9YyaP1L5/Z+MLfCSfX 47iknXtKGVhEONikBVTZJHit3htaxbrI3+sOgpmDisTyBAGLk4BmMhnO4b/hQ800vmm1jrG/nj3 +gDHJvHTPJ+TkvPzH9xr1E6f/vFpAMNfiTsrXpe6aKXvWBiuyXCpeqVIdcSStVZ+Zp+qJD7Ef2n hAAA= X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf There is no use in tracking the fuses that are only accessible via ELE API and the current lists are incomplete. If the ELE API is available it will be used as primary access method anyway, otherwise the fuses not listed as accessible through the FSB can be considered invalid. No functional changes intended. Signed-off-by: Frieder Schrempf --- drivers/nvmem/imx-ocotp-ele.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/drivers/nvmem/imx-ocotp-ele.c b/drivers/nvmem/imx-ocotp-ele.c index 6ac7d588c4bd..f07565c0a02d 100644 --- a/drivers/nvmem/imx-ocotp-ele.c +++ b/drivers/nvmem/imx-ocotp-ele.c @@ -19,8 +19,7 @@ =20 enum fuse_type { FUSE_FSB =3D BIT(0), - FUSE_ELE =3D BIT(1), - FUSE_ECC =3D BIT(2), + FUSE_ECC =3D BIT(1), FUSE_INVALID =3D -1 }; =20 @@ -215,7 +214,7 @@ static int imx_ocotp_reg_read(void *context, unsigned i= nt offset, void *val, siz } =20 type =3D imx_ocotp_fuse_type(context, i); - if (type =3D=3D FUSE_INVALID || type =3D=3D FUSE_ELE) { + if (type =3D=3D FUSE_INVALID) { *buf++ =3D 0; continue; } @@ -365,13 +364,9 @@ static const struct nvmem_keepout imx93_ocotp_keepout[= ] =3D { static const struct ocotp_devtype_data imx93_ocotp_data =3D { .reg_off =3D 0x8000, .size =3D 2048, - .num_entry =3D 6, + .num_entry =3D 2, .entry =3D { { 0, 52, FUSE_FSB }, - { 63, 1, FUSE_ELE}, - { 128, 16, FUSE_ELE }, - { 182, 1, FUSE_ELE }, - { 188, 1, FUSE_ELE }, { 312, 200, FUSE_FSB } }, .keepout =3D imx93_ocotp_keepout, @@ -381,7 +376,7 @@ static const struct ocotp_devtype_data imx93_ocotp_data= =3D { static const struct ocotp_devtype_data imx94_ocotp_data =3D { .reg_off =3D 0x8000, .size =3D 3296, /* 103 Banks */ - .num_entry =3D 10, + .num_entry =3D 9, .entry =3D { { 0, 1, FUSE_FSB | FUSE_ECC }, { 7, 1, FUSE_FSB | FUSE_ECC }, @@ -389,7 +384,6 @@ static const struct ocotp_devtype_data imx94_ocotp_data= =3D { { 12, 24, FUSE_FSB }, { 36, 2, FUSE_FSB | FUSE_ECC }, { 38, 14, FUSE_FSB }, - { 59, 1, FUSE_ELE }, { 525, 2, FUSE_FSB | FUSE_ECC }, { 528, 7, FUSE_FSB }, { 536, 280, FUSE_FSB }, @@ -399,7 +393,7 @@ static const struct ocotp_devtype_data imx94_ocotp_data= =3D { static const struct ocotp_devtype_data imx95_ocotp_data =3D { .reg_off =3D 0x8000, .size =3D 2048, - .num_entry =3D 12, + .num_entry =3D 9, .entry =3D { { 0, 1, FUSE_FSB | FUSE_ECC }, { 7, 1, FUSE_FSB | FUSE_ECC }, @@ -407,9 +401,6 @@ static const struct ocotp_devtype_data imx95_ocotp_data= =3D { { 12, 24, FUSE_FSB }, { 36, 2, FUSE_FSB | FUSE_ECC }, { 38, 14, FUSE_FSB }, - { 63, 1, FUSE_ELE }, - { 128, 16, FUSE_ELE }, - { 188, 1, FUSE_ELE }, { 317, 2, FUSE_FSB | FUSE_ECC }, { 320, 7, FUSE_FSB }, { 328, 184, FUSE_FSB } --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 747B03E9580; Thu, 23 Jul 2026 07:29:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; cv=none; b=BuQaqixTa4b4sb/B1Ehj/UTJQOliMNHoLk9jQV3GtByj3YZi2O5SE1Om0OdvmwJ0CXRtAPZYI3qV0Ka6PFr1VgLFmA+OV6TepY8f4OdoVKcJ6m1ABi18Eb9qjGOy/UZvaSeP6zOkSUtEJgE6/MP0K6tfh9MHRSygSJEWel3SwoA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; c=relaxed/simple; bh=hguiKqe0Uuyua2AX1GYt1cNVLRmZaSGClWVkNI+fC/I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HvpT7ZmgZm1eQiRrmoGCNDCFMu9323zYYNY+MpO64BJtEw0Bi3KRCZMPHmKQ+/ORs3Ghkg+HoZEHtIfdgwehRJ+7BN6yGQ+Po/dEsfzHSmmtwULbrKiggYyFvv31a5PPVdRv1GG62+T4gnYCDzcF2Era0LncFCXZjiIKJHtMwzo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=tLt2lds2; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="tLt2lds2" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791739; 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=mnjH8bUvLNMs032Y3RxCllB4beQC3Ai/Gw/n6qJweSY=; b=tLt2lds2o+xcOPDJjekdPbcqbQgBJ/mhXEl8qpM8OXYfre9m1JeYyDUqWjPbCWrGVAunun GBHjvigpDqNegs3SRiJET/Y6QDn20w5zFqx+WjbBVEqgZi5+AopdQRItxp8InIcN11sTox OcCetf12vtKyZzHHzRO+l0bWCAVhvUYufViBjKnWNV8cVKtn7uGX3FwY9Ll4/5X1uQOT23 AzxdQjjEOpfHbvxiBS53TocMoYw9iqvipsv8Ipdh1YeQmoykOKt177YnTt9jAYxb9Bke6F LTDjfF6QAQOsYPfpo2S0ZG1Ni79RHKJZpNpKu2nVhFf3wEr2ZGaYrEkZ6B1QOw== Date: Thu, 23 Jul 2026 09:27:31 +0200 Subject: [PATCH v3 09/11] nvmem: imx-ocotp-ele: Rename FSB access map 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-9-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=2464; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=Ui1yqAl2SncRGvJ6Cd8lkM+A+lQmMiIxti+ManRJv8M=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0DYNlxexbPabTNc8fPnIi+HV22hplem7P/HNWs7yd Oe+R3PsOkpZGMS4GGTFFFmk+C1e25rF+sgfq46CmcPKBDKEgYtTACYiNZORYfGdNxcm+i07EZd4 56xv3pPlvhsLLa8/iuQxe/T41RSpb0cZ/ju9fab16sSLF/ZFmnLFrdaeTgeiZXpS959duFPz0bP sIDYA X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf The table is used to declare which fuse registers are accessible through the FSB block. Name it accordingly to make this clearer for the reader. No functional changes intended. Signed-off-by: Frieder Schrempf --- drivers/nvmem/imx-ocotp-ele.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/nvmem/imx-ocotp-ele.c b/drivers/nvmem/imx-ocotp-ele.c index f07565c0a02d..1a125f9c5b1d 100644 --- a/drivers/nvmem/imx-ocotp-ele.c +++ b/drivers/nvmem/imx-ocotp-ele.c @@ -33,11 +33,11 @@ struct ocotp_devtype_data { u32 reg_off; char *name; u32 size; - u32 num_entry; + u32 num_fsb_map; u32 flag; const struct nvmem_keepout *keepout; unsigned int nkeepout; - struct ocotp_map_entry entry[]; + struct ocotp_map_entry fsb_map[]; }; =20 struct imx_ocotp_priv { @@ -160,12 +160,12 @@ static enum fuse_type imx_ocotp_fuse_type(void *conte= xt, u32 index) u32 start, end; int i; =20 - for (i =3D 0; i < data->num_entry; i++) { - start =3D data->entry[i].start; - end =3D data->entry[i].start + data->entry[i].num; + for (i =3D 0; i < data->num_fsb_map; i++) { + start =3D data->fsb_map[i].start; + end =3D data->fsb_map[i].start + data->fsb_map[i].num; =20 if (index >=3D start && index < end) - return data->entry[i].type; + return data->fsb_map[i].type; } =20 return FUSE_INVALID; @@ -364,8 +364,8 @@ static const struct nvmem_keepout imx93_ocotp_keepout[]= =3D { static const struct ocotp_devtype_data imx93_ocotp_data =3D { .reg_off =3D 0x8000, .size =3D 2048, - .num_entry =3D 2, - .entry =3D { + .num_fsb_map =3D 2, + .fsb_map =3D { { 0, 52, FUSE_FSB }, { 312, 200, FUSE_FSB } }, @@ -376,8 +376,8 @@ static const struct ocotp_devtype_data imx93_ocotp_data= =3D { static const struct ocotp_devtype_data imx94_ocotp_data =3D { .reg_off =3D 0x8000, .size =3D 3296, /* 103 Banks */ - .num_entry =3D 9, - .entry =3D { + .num_fsb_map =3D 9, + .fsb_map =3D { { 0, 1, FUSE_FSB | FUSE_ECC }, { 7, 1, FUSE_FSB | FUSE_ECC }, { 9, 3, FUSE_FSB | FUSE_ECC }, @@ -393,8 +393,8 @@ static const struct ocotp_devtype_data imx94_ocotp_data= =3D { static const struct ocotp_devtype_data imx95_ocotp_data =3D { .reg_off =3D 0x8000, .size =3D 2048, - .num_entry =3D 9, - .entry =3D { + .num_fsb_map =3D 9, + .fsb_map =3D { { 0, 1, FUSE_FSB | FUSE_ECC }, { 7, 1, FUSE_FSB | FUSE_ECC }, { 9, 3, FUSE_FSB | FUSE_ECC }, --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 85EFE3E9584; Thu, 23 Jul 2026 07:29:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; cv=none; b=q66VbLx5nfp6NVNg5VIAPUloPsi+Fu66QuY7YLnCBLBqFMuH7U0xJ1O26RO8lie0JEw5VOCSTA/duXK9NAJPuVY24thaJThUTuQ03JqUKGVwM1OeEOrAW5FSkdMAXoBtFExWQxHdg8jKLSUCG3CqKB+riZSspV20eWWZUpV77w0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; c=relaxed/simple; bh=SvlBzssYEQXjoX3pFp3ulUdGkZriJCdrKFdjFL4zeGI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PzqkEecM9aeO2ti0Ug5mIU8UUD0UZbeg170GA3T5zTErx4mTjAivx8t0pONkkb0zhRZpSMvH7Zu3r0qr3uicEwZSAH4oFjry/Qdih+dXw3iHvraEkiiQspb6sQA0aAXKElrGWsOXGxKTO9DqUF44WoQtaeWwImdtcch4AQbBXDE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=D21llxJw; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="D21llxJw" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791740; 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=WyM8MlyD+NPze9KzqJFx0sc15raowUeSYwkhCExYjsw=; b=D21llxJwhytH302JkyH+8bz/6BmPAzDf7rzow8TTmgllpFV2nifwuOzifAZCjX67FqBTF0 S0xSl3hiSXO6MQXjK562Br2yUXxuYYy1oVcF75yv72JaODd6sxDRyjFO5RoQ73iIn2QzCI Sg4KF7D6rikzjDExHOwUvaYdcZW2/3wKPyrL9ViLCNMyKuCxDfU6rCCWcxgcthWPjR81Ns WcvwIxuRHFsLu3/NAGv33vAl1N9JFIwwM0iaGi4uFc7ti3JEF2GwGyxZnJf63PzOiLJMBo ua/3GqXzuoq5ueE9N6fo44b2uKQSSf0dR1Z8flDPgNUXfjqlgc5O0BbCXncc1Q== Date: Thu, 23 Jul 2026 09:27:32 +0200 Subject: [PATCH v3 10/11] arm64: dts: Add common include for i.MX93 ELE 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-10-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=1371; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=M0hVY+f81C54spjSt4uzwzn1ZOcQMZubpkUYUZsOXPE=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0Da1vnhxTx732637Hs1/7Oy98/KjWYu1F/T5502Ke 632puhyRykLgxgXg6yYIosUv8VrW7NYH/lj1VEwc1iZQIYwcHEKwETaTjMyXJ8XukfVc7Nhy2ev qo9eLkcD3u/8xp4ue/rSgni+S7tUoxgZmncbZc9b1CEh+eT3gQXz7zOuk/1XsU18n+AJraIEfXV VZgA= X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf To make it easier for boards to configure the EdgeLock Secure Enclave on i.MX93, add a common include file that contains sane defaults. It specifies the memory node, enables the ELE firmware node and adds a reference to NVMEM OCOTP driver. The 1MB memory area required for the firmware is placed in the first 256MB of the DDR. Boards that require a more specific alignment can override this accordingly. Signed-off-by: Frieder Schrempf --- arch/arm64/boot/dts/freescale/imx93-firmware.dtsi | 28 +++++++++++++++++++= ++++ 1 file changed, 28 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/imx93-firmware.dtsi b/arch/arm64= /boot/dts/freescale/imx93-firmware.dtsi new file mode 100644 index 000000000000..58614158ef90 --- /dev/null +++ b/arch/arm64/boot/dts/freescale/imx93-firmware.dtsi @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (C) 2026 Kontron Electronics GmbH + */ + +/{ + reserved-memory { + #address-cells =3D <2>; + #size-cells =3D <2>; + ranges; + + ele_memory: ele-memory { + compatible =3D "shared-dma-pool"; + alloc-ranges =3D <0 0x80000000 0 0x10000000>; + size =3D <0 0x100000>; + no-map; + }; + }; +}; + +&hsm0 { + status =3D "okay"; + memory-region =3D <&ele_memory>; +}; + +&ocotp { + secure-enclave =3D <&hsm0>; +}; --=20 2.55.0 From nobody Fri Jul 24 21:55:05 2026 Received: from mail.fris.de (mail.fris.de [116.203.77.234]) (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 7468A3E835E; Thu, 23 Jul 2026 07:29:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.77.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; cv=none; b=DSdqw7M8HAftnLD4+hNJR/GyuoXZUqRjJ41X3fkNNWWArdT1raRbbbCd9QS3EI0z8mvdu8c5FBNn5UTQ68GBaXA9XzU0LEV/6FTaQzDw40GV11aua8ES+zLunzMrCL8dZeZMmWMDkDpTtWrP0s8Al6zsNlOkYk6mpohHQ35f5co= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784791749; c=relaxed/simple; bh=0bQtdyFigB+s+doexXkek5DkKQPbH5nhGDIQe+exi5o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ERWBFggKjLSqGCLWBG7DbCCzqRes3ZI93yEJe42skNUzzZZK+Kw+nSpKSLVrGqyuUCvc95LRfft68IgavP0XIxS6d48KA0LKQJtOU68s8lWJiBDOYij6er+jYrG+afILGDfihJvshhHCfgjPJVpzcY4xFOMT3XdiF7khYEDCAU4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de; spf=pass smtp.mailfrom=fris.de; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b=sXjLQ581; arc=none smtp.client-ip=116.203.77.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=fris.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fris.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fris.de header.i=@fris.de header.b="sXjLQ581" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1784791740; 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=91rdVwNiLBWx9A2v0nJpGTlKC7e08pKWDHF8nFaF1Q4=; b=sXjLQ581ufDE/17SSK/0pMXGvCWSzKWq7f+5Mm+GUxG/FhCzZ7uMsEmN8BDaKOBVkK5Os+ g2DtIPqsCM6JZH73rCYWfTQCAB7Zeg+9Vu24tSZPrN1YJH0q2FPTNxAqhV024CL+Roy5gG /m98c2K2GfjnnDxf4TeQ5/FCnmIVKXQNNFUebbmR13IAkSPyQ+bqc1Hiq0Tjl4kxbq6sMt LRjk2snqN7rk4+QLpjfF5Ip+98eGjRd3CsSzjKtFdNbpn5Tb0JkvK2m3MrRs+kU0YmUjxD XtN3bvLrJSE87PpEyEO+DRuPr+mllcwji37JUw1BUasDu+WmhzX2j0JUDbbOPw== Date: Thu, 23 Jul 2026 09:27:33 +0200 Subject: [PATCH v3 11/11] arm64: dts: Enable EdgeLock Secure Enclave on all i.MX91/i.MX93 boards 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: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-11-e26930345b4c@kontron.de> References: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> In-Reply-To: <20260723-upstreaming-next-20260609-imx-ocotp-ele-v3-0-e26930345b4c@kontron.de> To: Srinivas Kandagatla , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Shawn Guo , Pankaj Gupta , "Peng Fan (OSS)" Cc: devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux@ew.tq-group.com, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=10266; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=F7Nhp0IrABRm7B3/5FbrjrOUdSosMPbNZOjWENPZQU0=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvx0DatH27WN7t04jhjnl95HBJ3ur9xz/7VO7an3PfY2 W/tF8jbUcrCIMbFICumyCLFb/Ha1izWR/5YdRTMHFYmkCEMXJwCMBHN+YwMC5jfln06cuYwdxJ/ hcpp/jpFKfcDqn+Pfz7KI+V8/MpxWUaGTuPkPxeOTEo96a60ha3u3Hv7+CUryx7dkmWwypDezJP JCgA= X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf Include the common dtsi to enable the firmware node for all boards based on the i.MX91 or i.MX93 SoC. For the TQ-Systems i.MX91 TQMa91xxCA / TQMa91xxLA SOM that already has a node for the reserved memory, keep the current settings. Signed-off-by: Frieder Schrempf --- arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts | 1 + arch/arm64/boot/dts/freescale/imx91-11x11-frdm-s.dts | 1 + arch/arm64/boot/dts/freescale/imx91-11x11-frdm.dts | 1 + arch/arm64/boot/dts/freescale/imx91-9x9-qsb.dts | 1 + arch/arm64/boot/dts/freescale/imx91-phycore-som.dtsi | 1 + arch/arm64/boot/dts/freescale/imx91-tqma9131.dtsi | 15 ++++++++---= ---- arch/arm64/boot/dts/freescale/imx91-var-dart.dtsi | 1 + arch/arm64/boot/dts/freescale/imx91-var-som.dtsi | 1 + arch/arm64/boot/dts/freescale/imx91_93_common.dtsi | 9 +++++++++ arch/arm64/boot/dts/freescale/imx93-11x11-evk-common.dtsi | 1 + arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts | 1 + arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts | 1 + arch/arm64/boot/dts/freescale/imx93-9x9-qsb.dts | 1 + arch/arm64/boot/dts/freescale/imx93-kontron-osm-s.dtsi | 1 + arch/arm64/boot/dts/freescale/imx93-phycore-som.dtsi | 1 + arch/arm64/boot/dts/freescale/imx93-tqma9352.dtsi | 1 + arch/arm64/boot/dts/freescale/imx93-var-dart.dtsi | 1 + arch/arm64/boot/dts/freescale/imx93-var-som.dtsi | 1 + 18 files changed, 33 insertions(+), 7 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts b/arch/arm64= /boot/dts/freescale/imx91-11x11-evk.dts index 5716febb5a50..7813a3cf215b 100644 --- a/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts +++ b/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts @@ -7,6 +7,7 @@ =20 #include #include "imx91.dtsi" +#include "imx93-firmware.dtsi" =20 / { compatible =3D "fsl,imx91-11x11-evk", "fsl,imx91"; diff --git a/arch/arm64/boot/dts/freescale/imx91-11x11-frdm-s.dts b/arch/ar= m64/boot/dts/freescale/imx91-11x11-frdm-s.dts index 62dc1dedfb0e..b5a042a58b57 100644 --- a/arch/arm64/boot/dts/freescale/imx91-11x11-frdm-s.dts +++ b/arch/arm64/boot/dts/freescale/imx91-11x11-frdm-s.dts @@ -7,6 +7,7 @@ =20 #include #include "imx91.dtsi" +#include "imx93-firmware.dtsi" =20 / { compatible =3D "fsl,imx91-11x11-frdm-s", "fsl,imx91"; diff --git a/arch/arm64/boot/dts/freescale/imx91-11x11-frdm.dts b/arch/arm6= 4/boot/dts/freescale/imx91-11x11-frdm.dts index c25561574d3f..20c7e4989367 100644 --- a/arch/arm64/boot/dts/freescale/imx91-11x11-frdm.dts +++ b/arch/arm64/boot/dts/freescale/imx91-11x11-frdm.dts @@ -7,6 +7,7 @@ =20 #include #include "imx91.dtsi" +#include "imx93-firmware.dtsi" =20 / { compatible =3D "fsl,imx91-11x11-frdm", "fsl,imx91"; diff --git a/arch/arm64/boot/dts/freescale/imx91-9x9-qsb.dts b/arch/arm64/b= oot/dts/freescale/imx91-9x9-qsb.dts index ea8cf14e0bc6..430c0402138b 100644 --- a/arch/arm64/boot/dts/freescale/imx91-9x9-qsb.dts +++ b/arch/arm64/boot/dts/freescale/imx91-9x9-qsb.dts @@ -7,6 +7,7 @@ =20 #include #include "imx91.dtsi" +#include "imx93-firmware.dtsi" =20 / { compatible =3D "fsl,imx91-9x9-qsb", "fsl,imx91"; diff --git a/arch/arm64/boot/dts/freescale/imx91-phycore-som.dtsi b/arch/ar= m64/boot/dts/freescale/imx91-phycore-som.dtsi index 8b8cb3daecbb..509d869a216b 100644 --- a/arch/arm64/boot/dts/freescale/imx91-phycore-som.dtsi +++ b/arch/arm64/boot/dts/freescale/imx91-phycore-som.dtsi @@ -11,6 +11,7 @@ #include =20 #include "imx91.dtsi" +#include "imx93-firmware.dtsi" =20 / { model =3D "PHYTEC phyCORE-i.MX91"; diff --git a/arch/arm64/boot/dts/freescale/imx91-tqma9131.dtsi b/arch/arm64= /boot/dts/freescale/imx91-tqma9131.dtsi index c99d7bc16848..ad66fea4099a 100644 --- a/arch/arm64/boot/dts/freescale/imx91-tqma9131.dtsi +++ b/arch/arm64/boot/dts/freescale/imx91-tqma9131.dtsi @@ -7,6 +7,7 @@ */ =20 #include "imx91.dtsi" +#include "imx93-firmware.dtsi" =20 /{ model =3D "TQ-Systems i.MX91 TQMa91xxCA / TQMa91xxLA SOM"; @@ -31,13 +32,6 @@ linux,cma { size =3D <0 0x10000000>; linux,cma-default; }; - - /* EdgeLock secure enclave */ - ele_reserved: ele-reserved@a4120000 { - compatible =3D "shared-dma-pool"; - reg =3D <0 0xa4120000 0 0x100000>; - no-map; - }; }; =20 /* SD2 RST# via PMIC SW_EN */ @@ -58,6 +52,13 @@ &adc1 { vref-supply =3D <&buck5>; }; =20 +&ele_memory { + /delete-property/alloc-ranges; + /delete-property/size; + reg =3D <0 0xa4120000 0 0x100000>; + no-map; +}; + &flexspi1 { pinctrl-names =3D "default"; pinctrl-0 =3D <&pinctrl_flexspi1>; diff --git a/arch/arm64/boot/dts/freescale/imx91-var-dart.dtsi b/arch/arm64= /boot/dts/freescale/imx91-var-dart.dtsi index a9e44efad13f..2e1830c33012 100644 --- a/arch/arm64/boot/dts/freescale/imx91-var-dart.dtsi +++ b/arch/arm64/boot/dts/freescale/imx91-var-dart.dtsi @@ -13,6 +13,7 @@ #include #include #include "imx91.dtsi" +#include "imx93-firmware.dtsi" =20 / { model =3D "Variscite DART-MX91 Module"; diff --git a/arch/arm64/boot/dts/freescale/imx91-var-som.dtsi b/arch/arm64/= boot/dts/freescale/imx91-var-som.dtsi index b30a0d8a81ba..87db0abb8257 100644 --- a/arch/arm64/boot/dts/freescale/imx91-var-som.dtsi +++ b/arch/arm64/boot/dts/freescale/imx91-var-som.dtsi @@ -11,6 +11,7 @@ /dts-v1/; =20 #include "imx91.dtsi" +#include "imx93-firmware.dtsi" =20 /{ model =3D "Variscite VAR-SOM-MX91 module"; diff --git a/arch/arm64/boot/dts/freescale/imx91_93_common.dtsi b/arch/arm6= 4/boot/dts/freescale/imx91_93_common.dtsi index a1a7e6a0571b..60798b216438 100644 --- a/arch/arm64/boot/dts/freescale/imx91_93_common.dtsi +++ b/arch/arm64/boot/dts/freescale/imx91_93_common.dtsi @@ -46,6 +46,15 @@ A55_0: cpu@0 { }; }; =20 + firmware { + hsm0: secure-enclave { + compatible =3D "fsl,imx93-se-ele-hsm"; + mbox-names =3D "tx", "rx"; + mboxes =3D <&s4muap 0 0>, <&s4muap 1 0>; + status =3D "disabled"; + }; + }; + osc_32k: clock-osc-32k { compatible =3D "fixed-clock"; #clock-cells =3D <0>; diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-evk-common.dtsi b/ar= ch/arm64/boot/dts/freescale/imx93-11x11-evk-common.dtsi index f48e7947cf64..65db986fc7ba 100644 --- a/arch/arm64/boot/dts/freescale/imx93-11x11-evk-common.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93-11x11-evk-common.dtsi @@ -4,6 +4,7 @@ */ =20 #include +#include "imx93-firmware.dtsi" =20 / { aliases { diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts b/arch/arm6= 4/boot/dts/freescale/imx93-11x11-frdm.dts index bd14ba28690c..0bd19988ce9f 100644 --- a/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts +++ b/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts @@ -3,6 +3,7 @@ =20 #include #include "imx93.dtsi" +#include "imx93-firmware.dtsi" =20 / { compatible =3D "fsl,imx93-11x11-frdm", "fsl,imx93"; diff --git a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts b/arch/arm64= /boot/dts/freescale/imx93-14x14-evk.dts index ec78c03f4788..0e5c7d1ed4ee 100644 --- a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts +++ b/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts @@ -7,6 +7,7 @@ =20 #include #include "imx93.dtsi" +#include "imx93-firmware.dtsi" =20 / { model =3D "NXP i.MX93 14X14 EVK board"; diff --git a/arch/arm64/boot/dts/freescale/imx93-9x9-qsb.dts b/arch/arm64/b= oot/dts/freescale/imx93-9x9-qsb.dts index 01c11c517986..694f114aef36 100644 --- a/arch/arm64/boot/dts/freescale/imx93-9x9-qsb.dts +++ b/arch/arm64/boot/dts/freescale/imx93-9x9-qsb.dts @@ -7,6 +7,7 @@ =20 #include #include "imx93.dtsi" +#include "imx93-firmware.dtsi" =20 / { model =3D "NXP i.MX93 9x9 Quick Start Board"; diff --git a/arch/arm64/boot/dts/freescale/imx93-kontron-osm-s.dtsi b/arch/= arm64/boot/dts/freescale/imx93-kontron-osm-s.dtsi index c79b1df339db..c9aa764cc3b8 100644 --- a/arch/arm64/boot/dts/freescale/imx93-kontron-osm-s.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93-kontron-osm-s.dtsi @@ -5,6 +5,7 @@ =20 #include #include "imx93.dtsi" +#include "imx93-firmware.dtsi" =20 / { model =3D "Kontron OSM-S i.MX93"; diff --git a/arch/arm64/boot/dts/freescale/imx93-phycore-som.dtsi b/arch/ar= m64/boot/dts/freescale/imx93-phycore-som.dtsi index 325e465d0056..076716cc2095 100644 --- a/arch/arm64/boot/dts/freescale/imx93-phycore-som.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93-phycore-som.dtsi @@ -12,6 +12,7 @@ #include =20 #include "imx93.dtsi" +#include "imx93-firmware.dtsi" =20 /{ model =3D "PHYTEC phyCORE-i.MX93"; diff --git a/arch/arm64/boot/dts/freescale/imx93-tqma9352.dtsi b/arch/arm64= /boot/dts/freescale/imx93-tqma9352.dtsi index ce34a296495c..159be0d5dfde 100644 --- a/arch/arm64/boot/dts/freescale/imx93-tqma9352.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93-tqma9352.dtsi @@ -6,6 +6,7 @@ */ =20 #include "imx93.dtsi" +#include "imx93-firmware.dtsi" =20 /{ model =3D "TQ-Systems i.MX93 TQMa93xxLA/TQMa93xxCA SOM"; diff --git a/arch/arm64/boot/dts/freescale/imx93-var-dart.dtsi b/arch/arm64= /boot/dts/freescale/imx93-var-dart.dtsi index 69495bb7fc9f..122a8a091c80 100644 --- a/arch/arm64/boot/dts/freescale/imx93-var-dart.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93-var-dart.dtsi @@ -12,6 +12,7 @@ =20 #include #include "imx93.dtsi" +#include "imx93-firmware.dtsi" =20 / { model =3D "Variscite DART-MX93 Module"; diff --git a/arch/arm64/boot/dts/freescale/imx93-var-som.dtsi b/arch/arm64/= boot/dts/freescale/imx93-var-som.dtsi index 24063bf8183d..50aec264f87c 100644 --- a/arch/arm64/boot/dts/freescale/imx93-var-som.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93-var-som.dtsi @@ -7,6 +7,7 @@ /dts-v1/; =20 #include "imx93.dtsi" +#include "imx93-firmware.dtsi" =20 /{ model =3D "Variscite VAR-SOM-MX93 module"; --=20 2.55.0