[PATCH 3/5] dt-bindings: nvmem: Add nodes for ZynqMP efuses

From: Praveen Teja Kundanala
Date: Fri Oct 13 2023 - 06:15:42 EST


Added nodes for ZynqMP specific purpose and PUF user efuses

Signed-off-by: Praveen Teja Kundanala <praveen.teja.kundanala@xxxxxxx>
---
.../bindings/nvmem/xlnx,zynqmp-nvmem.yaml | 213 +++++++++++++++++-
1 file changed, 212 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/nvmem/xlnx,zynqmp-nvmem.yaml b/Documentation/devicetree/bindings/nvmem/xlnx,zynqmp-nvmem.yaml
index e03ed8c32537..d2a036a80cda 100644
--- a/Documentation/devicetree/bindings/nvmem/xlnx,zynqmp-nvmem.yaml
+++ b/Documentation/devicetree/bindings/nvmem/xlnx,zynqmp-nvmem.yaml
@@ -8,7 +8,7 @@ title: Zynq UltraScale+ MPSoC Non Volatile Memory interface

description: |
The ZynqMP MPSoC provides access to the hardware related data
- like SOC revision, IDCODE.
+ like SOC revision, IDCODE and specific purpose efuses.

maintainers:
- Kalyani Akula <kalyani.akula@xxxxxxx>
@@ -43,6 +43,140 @@ patternProperties:
required:
- reg

+ "^efuse_dna@c$":
+ type: object
+ description:
+ This node is used to read DNA of ZynqMP SOC. Read-only.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_usr(0@20|1@24|2@28|3@2c|4@30|5@34|6@38|7@3c)$":
+ type: object
+ description:
+ Eight 32-bit user efuses. Read and Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_miscusr@40$":
+ type: object
+ description:
+ 32-bit MISC user efuse space. Read and Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_chash@50$":
+ type: object
+ description:
+ 32-bit PUF chash space. Read and Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_pufmisc@54$":
+ type: object
+ description:
+ 32-bit PUF MISC control space. Read and Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_sec@58$":
+ type: object
+ description:
+ 32-bit secure control space. Read and Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_spkid@5c$":
+ type: object
+ description:
+ 32-bit SPK ID. Read and Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_aeskey@60$":
+ type: object
+ description:
+ 256-bit aes key. Only Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_ppk0hash@a0$":
+ type: object
+ description:
+ 384-bit PPK0 hash. Read and Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_ppk1hash@d0$":
+ type: object
+ description:
+ 384-bit PPK1 hash. Read and Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
+ "^efuse_pufuser@100$":
+ type: object
+ description:
+ This node represents the 127(0x7F) 32-bit PUF(Physical Unclonable Function)
+ helper data efuses which are repurposed as user fuses.
+ Read and Write is supported.
+
+ properties:
+ reg:
+ maxItems: 1
+
+ required:
+ - reg
+
additionalProperties: false

examples:
@@ -56,4 +190,81 @@ examples:
soc_revision: soc_revision@0 {
reg = <0x0 0x4>;
};
+ /*
+ * efuse memory access:
+ * all the efuse fields need to be read
+ * with the exact size specified in the node
+ */
+ /* DNA */
+ efuse_dna: efuse_dna@c {
+ reg = <0xc 0xc>;
+ };
+ /* User 0 */
+ efuse_usr0: efuse_usr0@20 {
+ reg = <0x20 0x4>;
+ };
+ /* User 1 */
+ efuse_usr1: efuse_usr1@24 {
+ reg = <0x24 0x4>;
+ };
+ /* User 2 */
+ efuse_usr2: efuse_usr2@28 {
+ reg = <0x28 0x4>;
+ };
+ /* User 3 */
+ efuse_usr3: efuse_usr3@2c {
+ reg = <0x2c 0x4>;
+ };
+ /* User 4 */
+ efuse_usr4: efuse_usr4@30 {
+ reg = <0x30 0x4>;
+ };
+ /* User 5 */
+ efuse_usr5: efuse_usr5@34 {
+ reg = <0x34 0x4>;
+ };
+ /* User 6 */
+ efuse_usr6: efuse_usr6@38 {
+ reg = <0x38 0x4>;
+ };
+ /* User 7 */
+ efuse_usr7: efuse_usr7@3c {
+ reg = <0x3c 0x4>;
+ };
+ /* Misc user control bits */
+ efuse_miscusr: efuse_miscusr@40 {
+ reg = <0x40 0x4>;
+ };
+ /* PUF chash */
+ efuse_chash: efuse_chash@50 {
+ reg = <0x50 0x4>;
+ };
+ /* PUF misc */
+ efuse_pufmisc: efuse_pufmisc@54 {
+ reg = <0x54 0x4>;
+ };
+ /* SEC_CTRL */
+ efuse_sec: efuse_sec@58 {
+ reg = <0x58 0x4>;
+ };
+ /* SPK ID */
+ efuse_spkid: efuse_spkid@5c {
+ reg = <0x5c 0x4>;
+ };
+ /* AES Key */
+ efuse_aeskey: efuse_aeskey@60 {
+ reg = <0x60 0x20>;
+ };
+ /* PPK0 hash */
+ efuse_ppk0hash: efuse_ppk0hash@a0 {
+ reg = <0xa0 0x30>;
+ };
+ /* PPK1 hash */
+ efuse_ppk1hash: efuse_ppk1hash@d0 {
+ reg = <0xd0 0x30>;
+ };
+ /* PUF user fuses */
+ efuse_pufuser: efuse_pufuser@100 {
+ reg = <0x100 0x7F>;
+ };
};
--
2.36.1