From nobody Sat Jul 25 21:24:06 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 91AD134029E; Mon, 13 Jul 2026 15:04:49 +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=1783955091; cv=none; b=P9jdgpLjCk1+RIpQ1Hs8kJfk6+sh4XRi6cnVDu3NaCL0AlJvsI/Vdf9pVKF9AGJx5DR8K9X3JCUmBJtLuUAHOMWym/3W4en2HUktEk4H50go84mmDHRTQzHj4FUZ+9VW9Zfbl1Zm4iDcqSpfWx/SozTEI0XSag7dlGmpZMhz6kQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783955091; c=relaxed/simple; bh=q7d5KK4Tkj9nN5q6BGakd8ongm8BNq/e1S/qiFgCVDg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ascbdpYmVVQWF5+fLP/ZMQllhpO+y2jrCXcD9NpDwMZYpVbN0t/Scd32TRftHUW+p2IjhJefkLLppy9h/ROpRJo4gMMIwmacSmXpcLa5V9UZBjsgJxQ49RV9fXN2kz/iBMkbq1Bho/3ZSYtzYVD8MbAznLCT8z+BsR1S284uU04= 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=Vyk9s0tH; 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="Vyk9s0tH" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954516; 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=c6iF9XDEbaIplAtmrsCBBxY1vgXUOaIijCD0bkF3jCo=; b=Vyk9s0tHAYfyOa2Kab+MzsLNfE6QrJDFb9FMln3P6l0Zc6yENjya9hATh2402sLf6FdDvo 2ZFAVDAXSpXdtOrjCMI+cFoaHqmwg5SIGksTLanUUWhPGJ6sbhp2G/qcqtMWuDVD/xVvok r0Xdcw1SRslgZooDi1p6BfELyDqtzTXy76M7aQ2vcX2R0Rhk/3q8Wn4ZKsMZF8FiRSCxYK i+JdM68jbWHs7ysu1TytSlLsSc/13vdml8YPu+k0TrD9h26pGjRJCcas45f0da6mp/i5Qs SOUNqLfyK0gwL9JV7s4zCQk9wcfntx3cD/NEtKQF2H+s0sPNrNOrcqQftsPrvg== Date: Mon, 13 Jul 2026 16:53:37 +0200 Subject: [PATCH v2 01/10] 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-1-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=1378; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=Ll3DwEtNXqNyJE9cnd67/HZkEW9Unihh2hJcAMhBqO4=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkT6B68qcTVm9497jpMDmUujy463Xx2Bypy3NNPn1es Mu3f1ZzRykLgxgXg6yYIosUv8VrW7NYH/lj1VEwc1iZQIYwcHEKwETeHmJkWPd7z5ScL24bF3xY +UNx/7zti5Quryy603vR7KPvpOK8+WcY/ultO+i6xNu2xk99bYPwx7cbXtn8sDhcHfVtxeI/CyM F5jIAAA== 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 --- Documentation/devicetree/bindings/nvmem/imx-ocotp.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Documentation/devicetree/bindings/nvmem/imx-ocotp.yaml b/Docum= entation/devicetree/bindings/nvmem/imx-ocotp.yaml index a8076d0e2737..70901218871e 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: + properties: + compatible: + enum: + - fsl,imx93-ocotp + then: + properties: + secure-enclave: + $ref: /schemas/types.yaml#/definitions/phandle + description: A phandle to the secure enclave node =20 properties: compatible: --=20 2.55.0 From nobody Sat Jul 25 21:24:06 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 A6590342538; Mon, 13 Jul 2026 15:04:49 +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=1783955091; cv=none; b=oCW8KfuzDAmwniR4RTJsE1ALtDHCAn6TVPATBHrasVx3+lOO00RNCIv3PeK9o/o2pYJTMx7lwkg5gEaxPNbNHampBy7sBLZf+AWEJTd1CW667PACnhiGSpJc9MeFBby8er+VmGLYt2ni9/WvxrZ28nMMXMtrvRDa4g58UusPlnI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783955091; c=relaxed/simple; bh=jiQwK8y1yhLUjo4j7t5N6iCSymryvu3If63SnojuyR8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WB8mPuHAZaf96HMqz5owm+B15BgQeKarqrSNfluxJR9RaaBARwprEoWrcb2r4pcNwVXPIaLU4ZgsBMCU1/Ye5bCK7QIIV/VyMG1IcNjMwQr9OceLuLu9eYjGQ2xhhnTrUQLuBsZEJ2OoqJhbQcFwVTj7hUkyAbLa5HTt5ZpmUYE= 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=q/sqPrGE; 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="q/sqPrGE" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954516; 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=Z3WRQgH3u5bb1sg/UIkuyiCQpHZzLzXfUoy8toBIe7A=; b=q/sqPrGE22EwiScsb94tifwGXslrOiY09SzqQ+/yTlNlvHB7Y/7sxpxgzeuYRBMAd7GKFb jjykGZetSHE80D7azgr+BNR+Q+Jy0d3K7qUeEVv3luDEFpU7BbBvkg9T6Wrts4U3Kwf3/7 ocXBlpKvShIbEwgVifflaYGp7LiEP7iDbUCH7KxZVKoZ99skQLt2A2NoH5aNgXTQ6oEhd2 JhQabnGoE7O+pa8dX30Qq26Bg9t7+eV4nZmpJqKWsqYh+tzGTdo1e8Qt1N7khhJ6ORKBRi Ng5eePFw9cP+Nn8RnA3oYfysdCHV7gNpxN/rBg5rHijU4+riWuIDsU8BAmmoRg== Date: Mon, 13 Jul 2026 16:53:38 +0200 Subject: [PATCH v2 02/10] 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-2-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=1529; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=64Z8RnfUiT82ClmtKrj06sc+zV8FVPoGFC47Pu8B+Ek=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkT2DjPaXQXRdvHrCKFHi4OkKR111mx98EqVPdAiJHp JqDKiQ6SlkYxLgYZMUUWaT4LV7bmsX6yB+rjoKZw8oEMoSBi1MAJhLdy/DfW2Bt+KuMIH5dbTGn KVce5f7zvVxunV388XbA1HOrxM/9Z/hfcHHH8+MHGffGvnspHi4Yv1/8iZfY7duMR9+HCU7Z/86 dHwA= X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf The file uses mixed indentation characters. Use tabs everywhere. Signed-off-by: Frieder Schrempf Reviewed-by: Frank Li --- 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 75e65e279193..1c5d6791b323 100644 --- a/drivers/firmware/imx/ele_base_msg.h +++ b/drivers/firmware/imx/ele_base_msg.h @@ -27,19 +27,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 Sat Jul 25 21:24:06 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 A057F341077; Mon, 13 Jul 2026 15:04:49 +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=1783955092; cv=none; b=gjxZMJ0mnW7Ek/FFwukbUy6BEFWb5UmSunpfMl0KBg5xPgdoi5WAXXQo9Em8b5miMr9nApmN735CvDK0RUNDj/sQvDnUdpS4h/gRle9Fsj9igUAe/ccDluPsR4ClqlQZleG4LgesU/83+0tAr1/2gIoMI31hXpzNe7Ki5m7YwjI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783955092; c=relaxed/simple; bh=fVlB055JR14n6vS48L1RZLQm+AATuuwoP6ITnDTBiIk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nL2CPSMQB6s3RApq0C8RQjOSGmfm3jLVQEO76grjeiLA5a3bFny1Z7fjGy1eNn1S0MMfvPZ+3Td77Y2tQkoPyHQluFIEdcEVbKDVDmo3kS99w7zpJE/uQhbU6/WuaEQXmssWsRmWlIhyxD8/oxv9mqnmdf43wwEoG75wMr7Ln9Q= 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=HQarINlR; 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="HQarINlR" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954516; 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=OdWbFk5dfgCFrtTumGsxzlaKJCNHfWv89PeF9IkFsqU=; b=HQarINlRbM/Z8ihQ/RvYvIBbV6FtOPF1NPa8mm1lsumIXG9lIIE0aWXfqlqv0xKzoJO+ni yMP082n0fawLy6eU1go98w9iI/s64zF4Qq9L+cMv6x/oOuEc9RblBQ3oim0vSxfzXUBYyM J10WIEdQCRj/3iq0zzHOiItX2r6Oy0wyttJcNElt3lAw/xKW7LfAAWysFTDJ7ut8ZNBtOl vQ7iqcFyy23VeLt4mo+UAhluWgpKhPI4Dw1P4Phkdnt31K6HmIEptIxtdhKqIVIfz7yWOl pL8XrAbQmYvHBQWGY5EgttYqCN78hpJYca+kz2QGIS9leYVvLS0QgkLpYN1cog== Date: Mon, 13 Jul 2026 16:53:39 +0200 Subject: [PATCH v2 03/10] 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-3-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=12738; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=82aWrS74faGdiktevUv+md5sBCcaZfTuW2ECsJQUTOw=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkT+CErJvijkatgWIu61sPzZLk5unP7nps/lH8yBz7C 1KiLy90lLIwiHExyIopskjxW7y2NYv1kT9WHQUzh5UJZAgDF6cATGQuDyPDW/eUwC3flj3OWb2M u/EfC3fqp54lZ39OXZi7QHLuo6VNhxkZDrSxer163TBB8nvdRqt5LkoflzZWFFdyOZ78+T1kNdt kHgA= 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 | 47 +++++++++++----------- drivers/firmware/imx/ele_common.c | 35 ++++++++++++++++- drivers/firmware/imx/ele_common.h | 15 ------- drivers/firmware/imx/se_ctrl.h | 14 +------ include/linux/firmware/imx/se_api.h | 78 +++++++++++++++++++++++++++++++++= ++++ 5 files changed, 136 insertions(+), 53 deletions(-) diff --git a/drivers/firmware/imx/ele_base_msg.c b/drivers/firmware/imx/ele= _base_msg.c index ec718d322abc..69e70fd6a0d3 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" @@ -79,9 +80,9 @@ int ele_get_info(struct se_if_priv *priv, struct ele_dev_= info *s_info) return -ENOMEM; } =20 - ret =3D se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, - ELE_GET_INFO_REQ, ELE_GET_INFO_REQ_MSG_SZ, - true); + ret =3D imx_se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->heade= r, + ELE_GET_INFO_REQ, ELE_GET_INFO_REQ_MSG_SZ, + true); if (ret) goto exit; =20 @@ -93,8 +94,8 @@ int ele_get_info(struct se_if_priv *priv, struct ele_dev_= info *s_info) if (ret < 0) goto exit; =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) goto exit; =20 @@ -132,10 +133,10 @@ int ele_ping(struct se_if_priv *priv) if (!rx_msg) return -ENOMEM; =20 - ret =3D se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, - ELE_PING_REQ, ELE_PING_REQ_SZ, true); + ret =3D imx_se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->heade= r, + ELE_PING_REQ, ELE_PING_REQ_SZ, true); if (ret) { - dev_err(priv->dev, "Error: se_fill_cmd_msg_hdr failed."); + dev_err(priv->dev, "Error: imx_se_fill_cmd_msg_hdr failed."); return ret; } =20 @@ -144,8 +145,8 @@ int ele_ping(struct se_if_priv *priv) 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; } @@ -169,9 +170,9 @@ int ele_service_swap(struct se_if_priv *priv, if (!rx_msg) return -ENOMEM; =20 - ret =3D se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, - ELE_SERVICE_SWAP_REQ, - ELE_SERVICE_SWAP_REQ_MSG_SZ, true); + ret =3D imx_se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->heade= r, + ELE_SERVICE_SWAP_REQ, + ELE_SERVICE_SWAP_REQ_MSG_SZ, true); if (ret) return ret; =20 @@ -189,8 +190,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 @@ -225,8 +226,8 @@ int ele_fw_authenticate(struct se_if_priv *priv, phys_a= ddr_t contnr_addr, if (!rx_msg) return -ENOMEM; =20 - ret =3D se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->header, - ELE_FW_AUTH_REQ, ELE_FW_AUTH_REQ_SZ, true); + ret =3D imx_se_fill_cmd_msg_hdr(priv, (struct se_msg_hdr *)&tx_msg->heade= r, + ELE_FW_AUTH_REQ, ELE_FW_AUTH_REQ_SZ, true); if (ret) return ret; =20 @@ -239,8 +240,8 @@ int ele_fw_authenticate(struct se_if_priv *priv, phys_a= ddr_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; } @@ -265,8 +266,8 @@ int ele_debug_dump(struct se_if_priv *priv) if (!rx_msg) return -ENOMEM; =20 - ret =3D se_fill_cmd_msg_hdr(priv, &tx_msg->header, ELE_DEBUG_DUMP_REQ, - ELE_DEBUG_DUMP_REQ_SZ, true); + ret =3D imx_se_fill_cmd_msg_hdr(priv, &tx_msg->header, ELE_DEBUG_DUMP_REQ, + ELE_DEBUG_DUMP_REQ_SZ, true); if (ret) return ret; =20 @@ -279,8 +280,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 76bd3841acfc..81f3057aa7bf 100644 --- a/drivers/firmware/imx/ele_common.c +++ b/drivers/firmware/imx/ele_common.c @@ -3,9 +3,24 @@ * Copyright 2025 NXP */ =20 +#include + #include "ele_base_msg.h" #include "ele_common.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_priv *priv, struct se_msg_hdr *header) { if (!header->size || header->size > MAX_WORD_SIZE) @@ -155,6 +170,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) { @@ -239,8 +269,8 @@ void se_if_rx_callback(struct mbox_client *mbox_cl, voi= d *msg) complete(&se_clbk_hdl->done); } =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; @@ -285,6 +315,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 bdc13d1b715d..792b0c6d9dae 100644 --- a/drivers/firmware/imx/ele_common.h +++ b/drivers/firmware/imx/ele_common.h @@ -28,21 +28,6 @@ int ele_msg_send_rcv(struct se_if_device_ctx *dev_ctx, v= oid *tx_msg, =20 void se_if_rx_callback(struct mbox_client *mbox_cl, void *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); - -/* Fill a command message header with a given command ID and length in byt= es. */ -static inline int se_fill_cmd_msg_hdr(struct se_if_priv *priv, struct se_m= sg_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; - - return 0; -} - 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.h b/drivers/firmware/imx/se_ctrl.h index 7f9b0d199cfc..70a1ba369a06 100644 --- a/drivers/firmware/imx/se_ctrl.h +++ b/drivers/firmware/imx/se_ctrl.h @@ -7,6 +7,7 @@ #define SE_MU_H =20 #include +#include #include #include #include @@ -73,21 +74,8 @@ struct se_if_device_ctx { struct list_head link; }; =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 =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 Sat Jul 25 21:24:06 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 B8495329C40; Mon, 13 Jul 2026 15:04:49 +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=1783955092; cv=none; b=Ee5YhxE3y+44AkSvHM13twZTLRUtXl1/dX4Jl/CRI3xOsVFmTRHGN7SdBmscXMJeqXLYYVCPDD8JCzdyi9V5xGMl+IluHqGcV0ErQbo0fQ95OTwW9TrNQdwWeKkBScR22mZ4ubYasa1vc3ST0Xe5LcdVS5W4IHNbqpYspJb1NXw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783955092; c=relaxed/simple; bh=BX+Sel3Ae4XusHp2wSzv2dwsS9SdIb3azp5qa3pJZL4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YIY1jBsVSEWu5tDcNEPKnGWYZNr2yUI98I6vfdscXn2S15TmXqdppVtG8hw1XbHwTjnWQDxp9NAVh4pBfeC1zSZOcpqKNVkRDOcShKmK6I980jBWPMJWqDI6suRFDLKj2nWYK1v+hU3Ms5MfmT28vWM9sa5c9CbNp0xIfm9Ky4c= 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=G7c9ahl/; 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="G7c9ahl/" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954517; 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=G7c9ahl/vLqHu4vqSrFbE8izXxayNR1IFQQH1ZqM6dGxNuyiucKn4bpDKL7JqPp2gwZPYk iL4drDrblYmSTZrOTEQ/wLIqDZkMFgoa5xDOwKZAbLX/7QybE7SLMtu9J1UXnvnITbCab4 adKjd++zdegxDI9EXX9mKt6ln7rtq5OYJkF1u6o2KbQ/BKP7lxbM38tYC2S95lS1fH+TMK +RUDqVxNmYVBY90633JXQImAsrB+vFyWez47TdyzfAqC3y9tYp0Uffa9UGL0OlCE52eEcO WvKl+TYseh8t+W4ImBChYa0YFKrElTR4DrlJ/f8G5kB/FNhYicHVLmAEbE4J0g== Date: Mon, 13 Jul 2026 16:53:40 +0200 Subject: [PATCH v2 04/10] 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-4-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, 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=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkT+CycqEz7e2v7S7N5+beclevY/7JGR//Oau83PdSN LulOn5yRykLgxgXg6yYIosUv8VrW7NYH/lj1VEwc1iZQIYwcHEKwEQWzWJkOGH1wnRq3p4UlRcW Srf6BAPFTJutao+XHqzNmFDhvmPWTYZ/Oi8D1GsmJvI2bTH7HpG7u/PKNsu5XBuXMcslzTVfa3q TAwA= 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 Sat Jul 25 21:24:06 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 7BB22439350; Mon, 13 Jul 2026 14:55:25 +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=1783954530; cv=none; b=U0mtjp34lrYk71NsZbLkQbX2X+kDyLiI5/VTnbYvh34XIZM6ssC+0ypPcwMXfxtMHsLAMhqn3Gwn1HbvLQysY0n1MeJmueQhR2M9qO1lbI8u9A/ZvG0YHWCS+vXrA5qDiQk6PY7nOYaT8G5VqMmBUkTVKgIjYg1ZGO8joN13pFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783954530; c=relaxed/simple; bh=lUJYw1aJYNMh+RrYSSVQv8EebyGrdkywdUc5+gHYW1o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jMh/AR6gpqnSNZed1x7s7eXQPrlG93YUkQkRj5oAGqO3Hboe/pIxO4Xfiy+54RaGkfkRVngf0spnJ/ZK8IEp+NdNhJU8r+2tM+480Ex8T7u/tHfGewq+L6SEBPpNvoP5DHZ1xI1yx2FWHqkKleNYdQmyX0NVe97gsxd6G8AtwvM= 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=cy612G6m; 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="cy612G6m" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954517; 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=cy612G6mkIdyCHYsmhkwC5l3iizszjXW3nBfrTL8lKZJiznEZuVc3GN2ODf71dK0upsQCH b+Q/Xh+aH2pjmx5uVFRPLxOxTCaYgsPf5HslxFXSAqoDbNn3zp6nFDHpCC7scPV8Gmx4fv WMlWQnpOD1n88XRqV6RQD366u9viIP6y+7WACDBYZRanCFOG2r6M0/YkabZeXEejHSLGIt lONh4pMm+MsdUvz4GuIXKa7yUru4dYqER18pizFbScCU5/ihLUjOICCIdV5jMHb75GJgn7 dMESIJs9ICaJwQYbon2nTMXOM28h5dkMqeGTOlGt0pQCXG7zRXCgB3G/IYt8lA== Date: Mon, 13 Jul 2026 16:53:41 +0200 Subject: [PATCH v2 05/10] 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-5-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, 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=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkT2D2q6lLN9lMMXtwS4bx5F573sayVX/SlI4GX3p/3 q1Bmvd/RykLgxgXg6yYIosUv8VrW7NYH/lj1VEwc1iZQIYwcHEKwESEzzIydHBPdqzc4Lgw7ti3 Msb5Uv3KLdt3nP4dPS+oMOzWhXi9Jwz/639N9FwUwPqjLFb7YYebg69TVvq5vhNa1jpcF27E3Z/ PCwA= 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 Sat Jul 25 21:24:06 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 7B9F143900D; Mon, 13 Jul 2026 14:55:25 +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=1783954529; cv=none; b=LcozjYk2rfl1Yx8sjqo4dzpdJp/G/W9q3F2WuY6hTWQ5zxTXkOdaZPEVDn/JJ3KcuC3SuQSCObL9JRnitcsrQWw2PTrAQQIQWQDXFS72FU+3gl+m0n3h2tgwJCPFBoJYATARD+noTw50YiI5WYrFCWU8PqfwaXNAFNePdCuJVJU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783954529; c=relaxed/simple; bh=wKij38HGAAt7YISA6FyqC9dlADCJpzJDlZ/LQ1v14os=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ecJuhAkPvb6hktDivViqtPXok4BsrcycZvNaYWDp4azuroeHqqqRYZrN5BeaUlfPe54ymiSXNMBw9bpMA/2aQU/aoRDKOKJpsbv0wUwJ3FyUv2/oby71xNQwNZ6sC0/3sqvO9qWHlmcqHhcjcTW+SAItrntimyMEACDVkUn76pc= 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=skQF9Imu; 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="skQF9Imu" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954517; 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=skQF9ImuH3EaUvyvpt70hO3k391ONHcif/lrEXSUecp1IMKzBL9KNEh7DsTXllTc79a409 qwtLbxlKx+xAV9cdI+fmwRgvOE1bPfg3n9ISPVowyIu8yMrbvlBX+IU3bD1bapG5qdggI+ /V3wNb3eqgdOzZKzVzSaSlExecTsw/qh1OpgLHmNMa8hsEqI8qMUQ8ffbS8CnpfawFi2LW 1u2lB9OKBDOGhyuRLq8tQLJstNHAScxko9T+PDLdiXiAT0uSoNGQYkRXlc/IJVWF31/z9N aCOrNIr9S+99q46WGQqmCE3JX5cY+I/4HeWwnDTW7+/otXhTUkVzEhjuh8ji0w== Date: Mon, 13 Jul 2026 16:53:42 +0200 Subject: [PATCH v2 06/10] 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-6-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, 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=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkTxDz99krF/51zTb/Fn5ixo5NZ4807/iwK+NWbfqxT Ce2iqU6HaUsDGJcDLJiiixS/Bavbc1ifeSPVUfBzGFlAhnCwMUpABNR6GVkOBPRU7P49vM/jnXC HVuWMoedvHvfSznMZKOTfuuv+1Z5Dgz/Aw1CwvaelzvYxxXxWOvOs5WB/CKh8vUif6MvaYcVO4T xAwA= 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 Sat Jul 25 21:24:06 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 89E5543900F; Mon, 13 Jul 2026 14:55:26 +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=1783954530; cv=none; b=b53ctYOIXTT0F/9AR/xZ36xk9R93Q7muI1Cje/m2sZ65+kMNjHZEPccoXI97mckOtzZvqU9gyoylyHzzPamZakPxtyIykBRl731LFi/m+AdwjL5u2kUal0zkq64rURyrqCvXNoKXYPWUVg/ID9RIH7eJ9VC/lCWpRFVuKFG0EYE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783954530; c=relaxed/simple; bh=DvBLMFFMqhjcK/mtSmBXrkd1pVaKzFZPX4BOh+/c7bE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BFENuTgkAt56YOXNMQC95Q4DDm47rKHYP147DHdQ67Tzu88Yxjd9AyCQDjyKbLoCnCYzHBNu8vmVaSbPWONkBP/JI6/DtlgRDoc1WzzIChKF50kgwcY6Hb5q4gNwzttTmupXn1P/PkRrHyDHVZtz9VMIStlMlmKMcRVHTf4FkOY= 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=DoiWiU1C; 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="DoiWiU1C" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954517; 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=DoiWiU1C4U7Jcn/9Y3d4tGZTtFbMttjXYEc9lygJCWCiQjt/d+0ZAmTjxgaxUpN1pDTuZ4 tzD2SsOus/2N+qLdN5emPOX7rYw57W5mVhbI3PRfgGNohYk5sYd5INw0DHvgZsp97LgwBx yGY3l8vSBs/dwFAXvDOM5x2W3TLEbpAvj2DZqcRTvwF883EtEGMVjkA/CIC+67ZPDNT5nv G/NWtjx0xkfCkTnFbpJUb3cqMpbmSR/U6GdDoD4SC1IEUIFmR79VjzOJBJeWpbnFZh/jct ZnZLAEMxpiRmef9Aa1B2QZKOWtZ65tRSeMKqPTrAF+eZGNo4EMphXFt6Y8TWNQ== Date: Mon, 13 Jul 2026 16:53:43 +0200 Subject: [PATCH v2 07/10] 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-7-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, 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=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkT9Dsi+E9tn2bgg/aNRiWCsTwFKQtmbh3I1vXjMzwa IvUPxkdpSwMYlwMsmKKLFL8Fq9tzWJ95I9VR8HMYWUCGcLAxSkAExE8y8iwccGEexq9V184nbDL WW16pGvtL4UyrdslWTsPPbsgsO/bG0aGyXYXvyxmiv6w/VP9HpvT8y8cXmbqYn1kEusPx4uMTyd t5gUA 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 Sat Jul 25 21:24:06 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 19C03437440; Mon, 13 Jul 2026 14:55:26 +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=1783954530; cv=none; b=qA/vPMww8QmUjpauleUa/VY8x+i8JrTW7mRi0uDl3D0vSev8ubtnU3TLch+DtItGUTK5OjHZZSmKvIkW5ZRARwwNSF6WgIDv0cZTcxRToPPEIagSWXMTBkWWcGKNv3er4ZYSvapcL9cRW3fTvzlWDWWlj/3mDRgfd/KPTI+h1hg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783954530; c=relaxed/simple; bh=ezOWvH/osRE6H/cXFkg9H9smMaW9rStaT6bb3eJPa3Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hcNimcUbBNB5cw9ifiVN/0W9qZrnYULioNryFJb9de8cugAq8dZXK5LFIiFMXqFLi/iDI1d5fSTszxTzfjINIKyjmMMmK4KemN32qZqCuYrRL8D7ZIMSyNJeLxowr1cam2ZlhI4qUXemxxWeiOIDi7C0mlmdWI2ZJv9rNEEQXZc= 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=IAF9RlYR; 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="IAF9RlYR" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954517; 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=IAF9RlYRY32TgRdGT9RUVAxp8kZ+ISAA2djU9dBRkpEcG9FaNaKr9whnLDozCgy0seIGa6 U5yICggsp6HBXPFGYOprdnY6FEQxihmgmE9Ti4KsqJpdc29NKTlePtZtUNfRzKACXWgKQ5 M5GyPCZ6N2Q1JWDxYf1zcQRyAzSfLczT97j8wdS1RLQTkLZvfa31oD65V5nC0LofckDhHZ x2qLdC4AB5s5n6Y2oUzy3v8I4DV0re7fnhIoyBsrZ4toumES5fUP+EFGhg0uAPPPUuFNFo QvejdVnIiPIpu8ilBuKBmCvATk7MIubpoeXZGX6jZ2j7ODtkKIs5G3/cLTayGg== Date: Mon, 13 Jul 2026 16:53:44 +0200 Subject: [PATCH v2 08/10] 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-8-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, 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=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkTxCb6Ecx23P9bN8iv/GeaXfd3LRl4au9x4pMfkdJn dnI8+51RykLgxgXg6yYIosUv8VrW7NYH/lj1VEwc1iZQIYwcHEKwESYPzEynLpcPIm37Jje82n8 3BYJGe8vnVrXGmZg/O7I+9MOQRJrjzIy3LvEOKm3duX/KWKmKyd9X+ht4fumNF1noe+/228nuh4 7zgMA 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 Sat Jul 25 21:24:06 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 19C92438036; Mon, 13 Jul 2026 14:55:26 +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=1783954529; cv=none; b=ueFSzR1P+e7fl/2oRBP95Pb0466Cg5Ddd6Eku+WqDLlaCe0Kv+oOJbrDuTg/jlRdgr/8Gx/aBt2MeHRlh7Y6hMhpzK4mYhSwYi0YPTOmf61cMAGC8E1gqmhdDCbnDZPzeS6j1aHmEsQGVZOKo5dGlHI3sjJedBSP97Y2gLjPkTA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783954529; c=relaxed/simple; bh=hguiKqe0Uuyua2AX1GYt1cNVLRmZaSGClWVkNI+fC/I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LuUWX8R8QI+wq3aYNtXxr/Yk7zwCza9XMbTeWzVh6qs4xIDpJ1YMsIpXD2DbwC2Sx+/JlNk3TlwB0+gauGQymoALN1hT2LS2wuPRuLxJc8l9HJ2dYxArstaLvrfpULDbQ7XFRdq/0ODLt1vmRYKYfd+dxurFZOCfiszrD3dq/d8= 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=1r+6GHEa; 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="1r+6GHEa" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954518; 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=1r+6GHEaUzeW7ARL5A1y4cF89AgFbIyWmXz3gysj4C8Lo1wZ5x1/ZcSeakLGgRT1wtQsVV YDiQ6o1s1OY5aAbKQuaYeqgicH2EfUrdZE7x8TQOwYRg5ZVhC4jL0V2Eaydm8C/MJ7E4PO PPBaAw006VKx7z1B92ZErkma0gbnjWJ1IlYMgHjfMwlZKtk3DNvXtbsuf8sZg0s53YYgmw 6X+nK8WAt5RMrWTgz1UVyrXQbXcBhDS59fetYRkkBo9js4hZAushUFtgq3gEj0EVf6ZRfd ddgGL7DCdOi1ICx8Tc3YE9qei0OctQYZ8E+9aqGXuUpdX6jOgOcVARdPjSgkaA== Date: Mon, 13 Jul 2026 16:53:45 +0200 Subject: [PATCH v2 09/10] 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-9-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, 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=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkT1C3w/beB9E9Z2xvtbTFXdtnvVh5WsCH8LwKq4xJE 6eV/37UUcrCIMbFICumyCLFb/Ha1izWR/5YdRTMHFYmkCEMXJwCMBF5TUaGXR+frjmv+OWmI+eT r1tunniavijj7ZYph850/HBYOkuQ4S7DP631XGy3/7w1Sc47IRs8SaN+7VWno1vbOexnstv37u+ dygMA 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 Sat Jul 25 21:24:06 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 D98C3438FE7; Mon, 13 Jul 2026 14:55:26 +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=1783954529; cv=none; b=lAYbjdL4Ms2rAeeKGzAXXvRFOVV7mUIiI6RVBHofiKbqQWgGdXGwLnzaAdCNxJVDtSh2yNBveFD9yESxK9T0e6X/16A6E+kapQn5ia0xaTdFd5648muVkKOKUYTrJ2DKG1FWtuGMgdtReRlI5Xalgyw/J8ZNs5ONw5rpd2u/GsI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783954529; c=relaxed/simple; bh=RMKccsJdmORllu7mAeK9CUY0zo7lNV6Gza5XaIwj5hE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O0Iq0lHuyyLudSbRQ+ygER0E3A8BtIjCH/mAEQT14GwNwmrWcWAHhHBN9d7O/g+fStqHdOydW0GB8BhQjy8OORLviC4NjVSDQ4jbIHvI8gwCOMCASVfdb3aihzVh9kdSViQkDsnHDcBexDOSbvjBalzmF3K/M9ItAvr9sh2/doI= 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=lZfY5KeE; 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="lZfY5KeE" From: Frieder Schrempf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fris.de; s=mail; t=1783954518; 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=XGD1udeeLySjuRpVfJ/v+jq6I8kxIY1T8PFHbdXiRnU=; b=lZfY5KeEKoMKm+cYODOfvY2ifUEkYid7GRvxHJt8VMnmANsd8L27AlIRcLYCa66khtCUkh qoSMi0XjGoclkdRXu5NM58jUAvsd8PNym7gipxzS4QFnlYv8lRWwCB1T1pNvGQBRJHG8Qo VGaTrUNILWoL8Op4Yh6dLChWMPnyOT7G1HRXqnEzYdl5HEIqRB44r2vORB9OQzKzc/Sfyf EagMfr7qJqLnZDytLyeG+Gu4CmwEe6hD7dVOydZKZHteeZ7+VIa7+sgvS1lVEhhp9XdIu4 hnMCfViPxC6TYpY/Iit8QQtjsj3jDCooyGoYsC++ViDBG8N31kAa+zLZnFMRBQ== Date: Mon, 13 Jul 2026 16:53:46 +0200 Subject: [PATCH v2 10/10] arm64: dts: imx93-kontron: Enable ELE firmware 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: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-10-b8266d93514b@kontron.de> References: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@kontron.de> In-Reply-To: <20260713-upstreaming-next-20260609-imx-ocotp-ele-v2-0-b8266d93514b@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, Frieder Schrempf X-Developer-Signature: v=1; a=openpgp-sha256; l=1625; i=frieder.schrempf@kontron.de; h=from:subject:message-id; bh=d5GCeuaUDxb0XmrK6obvF5ioCBnvWAlVOzfPbhm5HFo=; b=owGbwMvMwCWWWSatKlDTJMZ4Wi2JISvkT9Ajp7zzUUenF6/ckPFzrpxm0sacdbNbMha/f+3+N Eus2sOko5SFQYyLQVZMkUWK3+K1rVmsj/yx6iiYOaxMIEMYuDgFYCLxXxj+Ck09FZlUyq+Zry7d fM1s3ku5CgalLo+oSgbdaItflcGXGRm2TGnfcsf8qfqFEOUcK19Tc3fF0J9GG++GN8ulqJ1tsOU DAA== X-Developer-Key: i=frieder.schrempf@kontron.de; a=openpgp; fpr=1A0F38EB3D365D4C1FC67B5A69761B25107C8216 From: Frieder Schrempf Add the ELE firmware API node and pass its handle to the OCOTP driver. This allows us to gain read/write access to the OTP fuses. Signed-off-by: Frieder Schrempf --- .../boot/dts/freescale/imx93-kontron-osm-s.dtsi | 26 ++++++++++++++++++= ++++ 1 file changed, 26 insertions(+) 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..c1da4b52c878 100644 --- a/arch/arm64/boot/dts/freescale/imx93-kontron-osm-s.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93-kontron-osm-s.dtsi @@ -24,6 +24,15 @@ chosen { stdout-path =3D &lpuart1; }; =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>; + memory-region =3D <&ele_memory>; + }; + }; + reg_usdhc2_vcc: regulator-usdhc2-vcc { compatible =3D "regulator-fixed"; pinctrl-names =3D "default"; @@ -57,6 +66,19 @@ regulator-state-disk { regulator-off-in-suspend; }; }; + + 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 0x40000000>; + size =3D <0 0x100000>; + no-map; + }; + }; }; =20 &flexcan1 { /* OSM-S CAN_A */ @@ -253,6 +275,10 @@ &lpuart7 { /* OSM-S UART_A */ pinctrl-0 =3D <&pinctrl_lpuart7>; }; =20 +&ocotp { + secure-enclave =3D <&hsm0>; +}; + &tpm3 { /* OSM-S PWM_0 */ pinctrl-names =3D "default"; pinctrl-0 =3D <&pinctrl_tpm3>; --=20 2.55.0