From nobody Mon Apr 6 16:28:11 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2D603F23A1 for ; Wed, 18 Mar 2026 19:36:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773862605; cv=none; b=Bgvx490mf1SYBXGk9AGf73Nqgmq+TdM/VHNHffn2idyM+Ozw4ChQD1MWF50FSjPUb8KSgg5FJZh/FCkKUwKqm4BRl+4q1H7ru/RnzJfxie2PMYx2TdGJWHsXc7CpjSCkPxqU6Zm8VQf+N98RKmgskIoRr6qAwa8XatTOAOUctJE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773862605; c=relaxed/simple; bh=7+ZcBYjBKH1KNVjotBv5PHlvugP3RNddvC4qDfJSPmA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cnCWF16D564xG4J7n4S7gAjr3yKMi6rdhsLY4bORZPNkYKogRzSEutinewCYh07IrA4Ku9CiOA0Cfiq9TFvauCTegIkb2l6SwSYHIrt4P7I15BP+vkPAhYMKygzGjrpC8iqdOBkQRyU1dgNJXaRdBT7XHmXAOkV3vDfiWC7Aktc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=iGL9RlFc; arc=none smtp.client-ip=209.85.216.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iGL9RlFc" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-35b97ed057cso189587a91.1 for ; Wed, 18 Mar 2026 12:36:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773862603; x=1774467403; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Jo0ZToIHOtReIqQmFtNomh9r/Dahbu+dh8b0PXJD3YI=; b=iGL9RlFc5EuWyzjpoDerPkVe3SFKVgFISiggNyUsSKUZeDi5WVM18KrO9VqxLuVJQw aHUyAwQNa7VR/3RGb+9euqBYb+h48FdZJNijPNIPlE6kLgCCtSmd1WAF84xVx1Ukd6dt CVAbarbKu6jqdRCZ03YGYf1jN0EZLBRSz7in5zcXvgoNbIUZ0/H1Keo7FE7PmK7WlXPY yvGzDnUaS2LCwGBVGuPWQAEEdx63aN7mmdH9LRTW+R3fXfKqjqtjEyhoifw0GWv4CmUE lMhwHjvySrqrbaPuRxfRh5t0coecRA+POCGoUzLN8Y0nFCxqSqjVIeJhfyzyOoy3B2kR KQFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773862603; x=1774467403; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Jo0ZToIHOtReIqQmFtNomh9r/Dahbu+dh8b0PXJD3YI=; b=O3inVIZL/GgbmLYj8a8HRq40bqsdQ/dzqGJcJRZSZIPkCMKE9qfpFP5lzg/Cv1gJ8D 0bZnpi8W6rOCk+7H1+4KfEfxrX1Lelk27Y6RNTafqHnZ5gBnni3D2Fpo407Bu7dwq8mb mXie0skmMyMW0Owwg6jM+4DCRwmq5wHh+J2ElAxVhzlRBT8MAhptPvebk4epy7zsyfvm kCm1KXVqvRJK2frVRtm3fT7dv/S/HRT04CxqCKucpKPuBdVv91qSQbQhf7MthjWhjyiK CK+5TWM9kmTtMkglpbFf4Z5/5tJOYt7aFmfI3qTGUUjVrFDfb35Bs/vBZ6F08rvDOJco fmkw== X-Forwarded-Encrypted: i=1; AJvYcCWfdv9PwdECoOT2qew7Imv+RzLfLVwXMo9Ejk6A8dn958neoii8nZql7rHjKDT+xijUe9LYPrIGIDZ57NM=@vger.kernel.org X-Gm-Message-State: AOJu0YyElj/1gHQGeyP339ETcErykrTNKV6lGbF1vWlBcDDiQiame3ai r/PwC0mhnKEzJyXsufsAsJsBHUiyPqo2UDie+ECoHRyoIrO4tDCren5Z X-Gm-Gg: ATEYQzw8F7sfaoyIHnYy3b0O5vgNcqvbb3twB8q84HvSv2CPAZBeOvqxJ7G4W0lrKgo np7OXcAxbCL//QafU7EEcCRicOAdVr4AZLctGlISF2HFg8c4Qe/Nra0CrwLl0mEer+JiucB653H EomK2a0ha+mzsCRaoFMUxbv6FAiltVufOATE9rObTtoRc5gc9KVmBrlJP5Zl8PCvFukMo/LeMFt uTsfIv13RtTEDH5A80W9jnJcshxa6RoL2JxFbC0XCpcdsBYTQ3M9OyteRhCea84Cvoqu9SjAY1T LC6fUkvJ5jIArh3udzc1vldAsirNr7/mivZ0f8zimR8djmo1Q+ITv/PEdnWvUsBlJpqFKuekBsB DLhsEPM+MW0fzeEi/s1+9yHpc7RFElq4AWn4cFus+uRAF0aCa5tQuqN2m15s8zmV7sIw+LpmM99 hgqMe2FqX3Focyb1ksGM4xoAdAWlBIxQ0NjI8J0LEFo85PgJeRdjRpwQEAM/lhiZ9XT6pbVkRyS eLjaO2JQ8y5szfEmqCgAKMgny7lBYAfnIkiWOM= X-Received: by 2002:a17:90b:288c:b0:33b:b078:d6d3 with SMTP id 98e67ed59e1d1-35bb9f11b2cmr3546557a91.23.1773862603302; Wed, 18 Mar 2026 12:36:43 -0700 (PDT) Received: from visitorckw-work01.c.googlers.com.com (100.130.194.35.bc.googleusercontent.com. [35.194.130.100]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35bb9ff59a4sm1521664a91.2.2026.03.18.12.36.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 12:36:42 -0700 (PDT) From: Kuan-Wei Chiu To: andrew@codeconstruct.com.au, avifishman70@gmail.com, tmaimon77@gmail.com, tali.perry1@gmail.com, srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: venture@google.com, yuenn@google.com, benjaminfair@google.com, jserv@ccns.ncku.edu.tw, eleanor15x@gmail.com, linux-arm-kernel@lists.infradead.org, openbmc@lists.ozlabs.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Kuan-Wei Chiu Subject: [PATCH 1/3] dt-bindings: nvmem: add nuvoton,npcm750-otp Date: Wed, 18 Mar 2026 19:35:36 +0000 Message-ID: <20260318193538.246853-2-visitorckw@gmail.com> X-Mailer: git-send-email 2.53.0.851.ga537e3e6e9-goog In-Reply-To: <20260318193538.246853-1-visitorckw@gmail.com> References: <20260318193538.246853-1-visitorckw@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add device tree bindings for the OTP memory controllers found on Nuvoton NPCM7xx SoCs. The NPCM7xx SoCs contain two independent OTP memory arrays: - Key Storage (OTP1): used for cryptographic keys. - Fuse Array (OTP2): used for hardware strapping, calibration data, and derivative definitions. Each controller provides up to 1024 bytes of read-only storage. Signed-off-by: Kuan-Wei Chiu --- .../bindings/nvmem/nuvoton,npcm750-otp.yaml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Documentation/devicetree/bindings/nvmem/nuvoton,npcm750= -otp.yaml diff --git a/Documentation/devicetree/bindings/nvmem/nuvoton,npcm750-otp.ya= ml b/Documentation/devicetree/bindings/nvmem/nuvoton,npcm750-otp.yaml new file mode 100644 index 000000000000..45bcf72d7c78 --- /dev/null +++ b/Documentation/devicetree/bindings/nvmem/nuvoton,npcm750-otp.yaml @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/nvmem/nuvoton,npcm750-otp.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Nuvoton NPCM7xx OTP (One-Time Programmable) Memory + +maintainers: + - Kuan-Wei Chiu + +allOf: + - $ref: nvmem.yaml# + +properties: + compatible: + enum: + - nuvoton,npcm750-key-storage + - nuvoton,npcm750-fuse-array + + reg: + maxItems: 1 + +required: + - compatible + - reg + +unevaluatedProperties: false + +examples: + - | + otp@f0189000 { + compatible =3D "nuvoton,npcm750-key-storage"; + reg =3D <0xf0189000 0x1000>; + }; --=20 2.53.0.851.ga537e3e6e9-goog From nobody Mon Apr 6 16:28:11 2026 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 85D683F23A1 for ; Wed, 18 Mar 2026 19:36:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773862609; cv=none; b=YYZuoMnbq77uElovZoRfDKp52w07xaHPJly192VmbfyxTdKni8tBLtJSpJE7VF/XSI0aZ54wtRUu6qIVndONyh6qRSWoTSseKfg56z3NV0Wfav+6pEhxIVUZZyN9udWnGgWmvyORFejJBJXW8AZnIPjODtte9jVBjxFcEoNsNNs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773862609; c=relaxed/simple; bh=NMHtYKysW+TqQN55GibvMc9/e7iQHP4Z0ItDqPkBPWc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tH60bYLto1UkC/6ClkXSrX/eu/cswLkQ2+lce6e/h83GHtk7JE5c8W15fdasyJiMF8FA7aw5K2UvbyrjwzoSebg1mIm4+/6FhBPPLqozwyE0ZrSxcbnEHgQR4CsLfn643MORDR9BBN2Hu+XAuoPVdlBKrF/HYYJ2KiD5UeZyE8M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AyRt0A0d; arc=none smtp.client-ip=209.85.216.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AyRt0A0d" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-35bb7afdc38so258512a91.1 for ; Wed, 18 Mar 2026 12:36:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773862608; x=1774467408; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2iY4og2qGh/roH7GFoTs23bu6QUHnKE8+1qN6pUKQh8=; b=AyRt0A0dW4wTVwhhekhMpj+mvf8CbSMCP/EVubljt/J7jiT88ljSuhXlCoFYWORCnG x0+Xgm6RqxZNVwi5GRA7hd1VY2//6S/vCOI1QCfXzmA6AKeMtZ4yjjjlTxGCC3bP9D+V jR6YjTbul5qZ/PIBwsH0G80mrVEhmC6uAOHbieNdcvWjOBp5n0vVLGX8orTZ85lw9xpQ TH0oiam/baBkn/oLEhtOy22sFqEZhZbGRuBJvXzMqgGDV1ID/onzdTzt/6jqAFe7N1xw zs1K44QlQqd21zDEB/uSzIkedtoxOtawBsLbPWw7y/NYt+KRNprXKN3xyb0ORS/9+6Us hDZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773862608; x=1774467408; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2iY4og2qGh/roH7GFoTs23bu6QUHnKE8+1qN6pUKQh8=; b=NYZv/9xP1n0JU7/2ZR7HXAdhRX0JotmH6OEIEbvOoYSYnVtIA+AD1+hENAyBKuANaQ VezraVw2AY0tH4o5uwXMBwwyN0jGdOf+actrH4H2/lds0VzwuUbMlOycS2mjqZE/tctj y6XbTv4sHTwCpZEyJXeKvn6B/kUoaabsyqpPNHShQX14gsKLnKwN2OrfeDpk9DOIg6XL Fsmk3Chp1Q73UW5VP/zBk3eJgzMGvNYzWJ6W70+Z3ZUH5/dMYBBzPQ/kQF8UrhXJhVRo a8v8GtH2eQaSWYhOxbpAOXkx61WC18rli+TRq4Pj5hRQeIR2rqnW8xDTEzUUq6XW+VDS T7wQ== X-Forwarded-Encrypted: i=1; AJvYcCWdo+REA4gK6l7mBDQT8p6T4QroAOhJ9B6LUZ916KIVtjpubO+4WWRhhsq0Cl1bQ/fWn5GNvWU2pkwtJbQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yz+mULen5vWHehhoOle4k3XqUdcZMqL7MzbAAWJPhP03xxJGXdM 3eLNFJESNstuYIusnWF5pdOOc6jYaFJ6g4puC3NWEbaIT9j1ZJSHvaZ4 X-Gm-Gg: ATEYQzyw4POOLxMyrk9u91rrA0XwvYc61MHw6w+CdMbUkv+5PW1kWYRDcsyoybXpTEp XzQgQUi+s3cGjJnKDX0r463uHhH4BIKJ27QPNYj31aCp2hOwcsUO2QQ1vbt7avpawoLYDGp09rw y2W4GnLV/scTCsp4iPwbgWENCJv7zQmWo9xTd8tf/yGCH6jA054XwYjIGu6pbjMZzciYd90B0RR K+lvQPnNpJCHKxD0ZUh0pZ9oJNa53Z4TBSIKUdelvoXrNNNgqcNUDeqkWx0kj9wBRCm7wqdGXKj Lno77k+KT+GTcgWx+1oEUsmej5zzq5UXBBNU3atpH3vJr/uifkoCFBg+/BqkE6xwDngR0DAV3hP sf2YJ64m4rgMpbNSk6Ls1OldkUAaBAEYaaqyl77pI8VVWgHvTJ4Fz9leMJfupIxtY0ucdJGUlsP CqZFNjUEN63g3azZOGqg9vJZ7jxgwGFRYS/2mJuchl3EuzpsFMCf2fozleB+JoRzKpCDI4BybXw qrCqEXum52MScExV/HqYPYlhrbGGjPkOZp360k= X-Received: by 2002:a17:90b:2e04:b0:35b:982a:28d9 with SMTP id 98e67ed59e1d1-35bb9e3b705mr4266431a91.4.1773862607823; Wed, 18 Mar 2026 12:36:47 -0700 (PDT) Received: from visitorckw-work01.c.googlers.com.com (100.130.194.35.bc.googleusercontent.com. [35.194.130.100]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35bb9ff59a4sm1521664a91.2.2026.03.18.12.36.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 12:36:47 -0700 (PDT) From: Kuan-Wei Chiu To: andrew@codeconstruct.com.au, avifishman70@gmail.com, tmaimon77@gmail.com, tali.perry1@gmail.com, srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: venture@google.com, yuenn@google.com, benjaminfair@google.com, jserv@ccns.ncku.edu.tw, eleanor15x@gmail.com, linux-arm-kernel@lists.infradead.org, openbmc@lists.ozlabs.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Kuan-Wei Chiu Subject: [PATCH 2/3] nvmem: npcm-otp: Add Nuvoton NPCM OTP driver Date: Wed, 18 Mar 2026 19:35:37 +0000 Message-ID: <20260318193538.246853-3-visitorckw@gmail.com> X-Mailer: git-send-email 2.53.0.851.ga537e3e6e9-goog In-Reply-To: <20260318193538.246853-1-visitorckw@gmail.com> References: <20260318193538.246853-1-visitorckw@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a new NVMEM driver for the OTP memory controllers found on Nuvoton NPCM SoCs. This OTP is read-only and manages two independent arrays: Key Storage and Fuse Array, which contain cryptographic keys, hardware strapping, and calibration data. Each array provides 1024 bytes of storage. It can be accessed by writing the target address and a read command to the control registers, and then polling a status register until the data is ready. Concurrent accesses are protected by a mutex. Signed-off-by: Kuan-Wei Chiu --- MAINTAINERS | 7 +++ drivers/nvmem/Kconfig | 10 +++ drivers/nvmem/Makefile | 2 + drivers/nvmem/npcm-otp.c | 129 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 148 insertions(+) create mode 100644 drivers/nvmem/npcm-otp.c diff --git a/MAINTAINERS b/MAINTAINERS index 61bf550fd37c..e391e2bcb5f6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -18894,6 +18894,13 @@ F: drivers/nubus/ F: include/linux/nubus.h F: include/uapi/linux/nubus.h =20 +NUVOTON NPCM OTP NVMEM DRIVER +M: Kuan-Wei Chiu +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/nvmem/nuvoton,npcm750-otp.yaml +F: drivers/nvmem/npcm-otp.c + NUVOTON NCT6694 MFD DRIVER M: Ming Yu S: Supported diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig index 74ddbd0f79b0..5d065b7448ff 100644 --- a/drivers/nvmem/Kconfig +++ b/drivers/nvmem/Kconfig @@ -483,4 +483,14 @@ config NVMEM_QORIQ_EFUSE This driver can also be built as a module. If so, the module will be called nvmem_qoriq_efuse. =20 +config NVMEM_NPCM_OTP + tristate "Nuvoton NPCM7xx OTP Controller" + depends on ARCH_NPCM || COMPILE_TEST + help + This option enables support for the OTP (One-Time Programmable) + controller found on Nuvoton NPCM7xx BMCs. + + This driver can also be built as a module. If so, the module + will be called npcm-otp. + endif diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile index 7252b8ec88d4..63c23b304d64 100644 --- a/drivers/nvmem/Makefile +++ b/drivers/nvmem/Makefile @@ -95,3 +95,5 @@ obj-$(CONFIG_NVMEM_ZYNQMP) +=3D nvmem_zynqmp_nvmem.o nvmem_zynqmp_nvmem-y :=3D zynqmp_nvmem.o obj-$(CONFIG_NVMEM_QORIQ_EFUSE) +=3D nvmem-qoriq-efuse.o nvmem-qoriq-efuse-y :=3D qoriq-efuse.o +obj-$(CONFIG_NVMEM_NPCM_OTP) +=3D nvmem-npcm-otp.o +nvmem-npcm-otp-y :=3D npcm-otp.o diff --git a/drivers/nvmem/npcm-otp.c b/drivers/nvmem/npcm-otp.c new file mode 100644 index 000000000000..abe4bab66c06 --- /dev/null +++ b/drivers/nvmem/npcm-otp.c @@ -0,0 +1,129 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Nuvoton NPCM7xx OTP (One-Time Programmable) NVMEM driver + * + * Copyright (C) 2026 Kuan-Wei Chiu + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Register offsets and bitmasks */ +#define NPCM_OTP_FST 0x00 +#define NPCM_OTP_FADDR 0x04 +#define NPCM_OTP_FDATA 0x08 +#define NPCM_OTP_FCTL 0x14 + +#define FST_RDY BIT(0) +#define FST_RDST BIT(1) +#define FCTL_READ_CMD 0x02 + +/* OTP total capacity is 8192 bits (1024 Bytes) */ +#define NPCM_OTP_SIZE 1024 + +struct npcm_otp { + void __iomem *base; + struct mutex lock; /* protects concurrent OTP accesses */ +}; + +static int npcm_otp_read_byte(struct npcm_otp *otp, unsigned int offset, u= 8 *val) +{ + u32 fst; + int ret; + + writel(offset, otp->base + NPCM_OTP_FADDR); + writel(FCTL_READ_CMD, otp->base + NPCM_OTP_FCTL); + + ret =3D readl_poll_timeout(otp->base + NPCM_OTP_FST, fst, + (fst & FST_RDY), 10, 10000); + if (ret) + return ret; + + *val =3D (u8)(readl(otp->base + NPCM_OTP_FDATA) & 0xFF); + + /* Clear the status bit to prepare for the next read */ + writel(FST_RDST, otp->base + NPCM_OTP_FST); + + return 0; +} + +static int npcm_otp_read(void *context, unsigned int offset, + void *val, size_t bytes) +{ + struct npcm_otp *otp =3D context; + u8 *buf =3D val; + int ret =3D 0; + size_t i; + + mutex_lock(&otp->lock); + + for (i =3D 0; i < bytes; i++) { + ret =3D npcm_otp_read_byte(otp, offset + i, &buf[i]); + if (ret) + break; + } + + mutex_unlock(&otp->lock); + + return ret; +} + +static int npcm_otp_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct npcm_otp *otp; + struct nvmem_config config =3D { 0 }; + struct nvmem_device *nvmem; + + otp =3D devm_kzalloc(dev, sizeof(*otp), GFP_KERNEL); + if (!otp) + return -ENOMEM; + + otp->base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(otp->base)) + return PTR_ERR(otp->base); + + mutex_init(&otp->lock); + + config.dev =3D dev; + config.name =3D dev_name(dev); + config.read_only =3D true; + config.word_size =3D 1; + config.stride =3D 1; + config.reg_read =3D npcm_otp_read; + config.priv =3D otp; + config.size =3D NPCM_OTP_SIZE; + + nvmem =3D devm_nvmem_register(dev, &config); + if (IS_ERR(nvmem)) + return dev_err_probe(dev, PTR_ERR(nvmem), "Failed to register nvmem\n"); + + return 0; +} + +static const struct of_device_id npcm_otp_dt_ids[] =3D { + { .compatible =3D "nuvoton,npcm750-key-storage" }, + { .compatible =3D "nuvoton,npcm750-fuse-array" }, + { } +}; +MODULE_DEVICE_TABLE(of, npcm_otp_dt_ids); + +static struct platform_driver npcm_otp_driver =3D { + .probe =3D npcm_otp_probe, + .driver =3D { + .name =3D "npcm-otp", + .of_match_table =3D npcm_otp_dt_ids, + }, +}; +module_platform_driver(npcm_otp_driver); + +MODULE_AUTHOR("Kuan-Wei Chiu "); +MODULE_DESCRIPTION("Nuvoton NPCM7xx OTP NVMEM driver"); +MODULE_LICENSE("GPL"); --=20 2.53.0.851.ga537e3e6e9-goog From nobody Mon Apr 6 16:28:11 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 305333F23B6 for ; Wed, 18 Mar 2026 19:36:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773862614; cv=none; b=Uhr/QnT4VusuX1Gm18uOnHTlPjajlfPvnD+jKkeg7LOEvY4l6Qw3O9RsSTDcliDEAj6dv6hio5uv0yteO3ypW6QPB6P5BLCAnGdqzBd+4nrbL42WfKixvNGdd/QiwSyZ70av/uSEyjIgK2SpK96gPCivK5rMzuKM7Mylx5qEWpw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773862614; c=relaxed/simple; bh=14OCwvI5iMT/DGrJ9TlMu+tDbn7a5N5d2vl4HFMg7Xc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z9zPQrqPQwmxrlQA+V/cg4MVeZjM8V2/HdhVx9QeRFtQ3SQ1+xTmULQAYkr34wsJs0+33MmgFPHzClCKQwgVBbrfNKV4Htodb6gWx8rkpDlZfFi+R8lVA7azouYNHhrcMlInsiLdUi20NExrceAuYxMaYmzQrmXwpKnd0XWvTnc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=i552jQ5D; arc=none smtp.client-ip=209.85.216.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i552jQ5D" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-356337f058aso245822a91.2 for ; Wed, 18 Mar 2026 12:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773862612; x=1774467412; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qhe6Bw5swAXowEnRvu3RMufWPhEQIrULXXpRHTNF+tE=; b=i552jQ5DwL1KawhQp2EKWtBSlHdCshtFbqtNO1VupYV6oB5VGwnom9xG2ytkl9SFNV CNIktD5FshSx1qFFeBxwnUAriQRMIfaaBu3pUU5NRhcOyB9NaJjAPQIOiYsSrNwbrgjh MWLL/OmrRHuiZdH2rrUY72o4AgV8jgG3kJOMbYjpceE4VVtSZUfhu0gP4eR3GkL6Emis MMKD1Ig8ZnIbluZRBudbKh/+a1REiIadYEz2xqFN0KGnqJiQOdNpoU3+A7/9W5VMl4FN MLJ/9C2TNIhea6AHn4sf6NqZtBlUTPlw0TYNhTpTR/ryto8XfCpToZ5CKB2fTwiQyEIb ycKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773862612; x=1774467412; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=qhe6Bw5swAXowEnRvu3RMufWPhEQIrULXXpRHTNF+tE=; b=aNF9L9w6eO/QFwihdz+Q5TL1onm5YrGikYzSw6quTn4L0tCjuhx/9ZD0hM1QLNhVTl dDf3RqwT9SFuO2yhy0kYfIreNdaZBiMxGsvEt77okPOMRU0XR2rOzl+EQjcAKNlxBt1k aZVeKDsOfWujp+usZYIoSpPkKswGM8BqGMHpmfPXwfWI8gd+OyqvBsJfsCXL1zZ8lDcE qhxAV/XiCYWpUr+qOyDUxUv5/rWxteL2vNut0c0bsCY7ijaUssrUfqCWCwHutWSTZP+F YgswiT/azo5/8fmJIu6iSI5VZLR93OOnbFMQsc7Tyzzvnql5t8aEIiCePK1S86Q2BwTj t7Ng== X-Forwarded-Encrypted: i=1; AJvYcCU5vz1/f+4Aj3JxJRt9RLhnpuhj4IOynhBhh26GNJSJF2gZ4oDcKUCHWGKKXxMylM/skBn2dG7l8zLM+5E=@vger.kernel.org X-Gm-Message-State: AOJu0Yy53qScvLOAsn4T/bmFDDd/5DyD23HYOxlcTqf3K59O2qghPihz bztVgLs980st0/otU4TKXJvfc6k3OT+KciE+Q0pvf0Cf9ZuB0HHfl+vS X-Gm-Gg: ATEYQzygJTiZbQ8+hssGrhKUihcPU9VJmzI0jkyN6kKgj1C4V2VncNGjIewwe3Hwpkw ZgqEWmzOhCKm0jjvLI2yAq/Bhmc765/P0QL3zNu4a6GsUMTHRtszFQgPmp8O0+tuZKnkjKoMs0r OzCj+E6V7woPY/99Jt8D7RAMTMNMU57iaALIA6ElCqY84vNckKJHdRj4+uUuHhk3snBl4EkYoIs 9GRkAdPiVcwgS1/yYr5blVSX8hs/oXpdbEjt//iBtvkpS/cO1iKqQtmZD8LTVKQ7IDZNa8qHm3Z +JSi4cQMG9P1yEfbhIBm8TgnA/yuQEd/VQqe5HHV1fv+N9/bgYZ1HTYmjGZmtuYngMrLF1+aJny ZXLR2nEBkyzjk2Sgt8lzNRQGMzWolOIn45QVqwcS2Pt0eBltOxo4tIcBYO+kvJ6VAh0Mi8NQQGI ZGV76ZVIM08t1Ve0dxzt0CQz3ElcfkitOeVz6xYl3Uk2PGSn/BNjYRzVjSZje38+ma6Zr8i+yHx TxiGyRqBQcSRiSmGYa5xSVL2tI2rb5wyEQuDc0= X-Received: by 2002:a17:90b:184e:b0:354:c593:b1a8 with SMTP id 98e67ed59e1d1-35bb9e7d24dmr4153966a91.13.1773862612414; Wed, 18 Mar 2026 12:36:52 -0700 (PDT) Received: from visitorckw-work01.c.googlers.com.com (100.130.194.35.bc.googleusercontent.com. [35.194.130.100]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35bb9ff59a4sm1521664a91.2.2026.03.18.12.36.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 12:36:52 -0700 (PDT) From: Kuan-Wei Chiu To: andrew@codeconstruct.com.au, avifishman70@gmail.com, tmaimon77@gmail.com, tali.perry1@gmail.com, srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org Cc: venture@google.com, yuenn@google.com, benjaminfair@google.com, jserv@ccns.ncku.edu.tw, eleanor15x@gmail.com, linux-arm-kernel@lists.infradead.org, openbmc@lists.ozlabs.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Kuan-Wei Chiu Subject: [PATCH 3/3] ARM: dts: nuvoton: Add OTP nodes for NPCM7xx Date: Wed, 18 Mar 2026 19:35:38 +0000 Message-ID: <20260318193538.246853-4-visitorckw@gmail.com> X-Mailer: git-send-email 2.53.0.851.ga537e3e6e9-goog In-Reply-To: <20260318193538.246853-1-visitorckw@gmail.com> References: <20260318193538.246853-1-visitorckw@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add device tree nodes for the OTP memory controllers found on Nuvoton NPCM7xx SoCs. The controllers (Key Storage and Fuse Array) are attached to the APB bus. Since they are internal SoC components with no board-level dependencies, they are enabled by default. Signed-off-by: Kuan-Wei Chiu --- arch/arm/boot/dts/nuvoton/nuvoton-common-npcm7xx.dtsi | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/arm/boot/dts/nuvoton/nuvoton-common-npcm7xx.dtsi b/arch/a= rm/boot/dts/nuvoton/nuvoton-common-npcm7xx.dtsi index ab3c3c5713ae..8a28b1f8a4fd 100644 --- a/arch/arm/boot/dts/nuvoton/nuvoton-common-npcm7xx.dtsi +++ b/arch/arm/boot/dts/nuvoton/nuvoton-common-npcm7xx.dtsi @@ -480,6 +480,16 @@ &fanin12_pins &fanin13_pins status =3D "disabled"; }; =20 + otp1: otp@189000 { + compatible =3D "nuvoton,npcm750-key-storage"; + reg =3D <0x189000 0x1000>; + }; + + otp2: otp@18a000 { + compatible =3D "nuvoton,npcm750-fuse-array"; + reg =3D <0x18a000 0x1000>; + }; + i2c0: i2c@80000 { reg =3D <0x80000 0x1000>; compatible =3D "nuvoton,npcm750-i2c"; --=20 2.53.0.851.ga537e3e6e9-goog