[PATCH 1/2] x86: apl: fsp_bindings: Add support for u64 parameters

Bernhard Messerklinger bernhard.messerklinger at br-automation.com
Wed Jul 22 09:29:38 CEST 2020


Add FSP_UINT64 read support as preparation for FSP-M and FSP-S parameter
update.

Signed-off-by: Bernhard Messerklinger <bernhard.messerklinger at br-automation.com>
---

 arch/x86/cpu/apollolake/fsp_bindings.c        | 28 +++++++++++++++++++
 .../asm/arch-apollolake/fsp_bindings.h        |  1 +
 2 files changed, 29 insertions(+)

diff --git a/arch/x86/cpu/apollolake/fsp_bindings.c b/arch/x86/cpu/apollolake/fsp_bindings.c
index 9130af9ce0..130366b403 100644
--- a/arch/x86/cpu/apollolake/fsp_bindings.c
+++ b/arch/x86/cpu/apollolake/fsp_bindings.c
@@ -89,6 +89,28 @@ static void read_u32_prop(ofnode node, char *name, size_t count, u32 *dst)
 		ofnode_read_u32_array(node, name, dst, count);
 }
 
+/**
+ * read_u64_prop() - Read an u64 property from devicetree (scalar or array)
+ * @node:  Valid node reference to read property from
+ * @name:  Name of the property to read from
+ * @count: If the property is expected to be an array, this is the
+ *         number of expected elements
+ *         set to 0 if the property is expected to be a scalar
+ * @dst:   Pointer to destination of where to save the value(s) read
+ *         from devicetree
+ */
+static int read_u64_prop(ofnode node, char *name, size_t count, u64 *dst)
+{
+	if (count == 0) {
+		ofnode_read_u64(node, name, dst);
+	} else {
+		debug("ERROR: %s u64 arrays not supported!\n", __func__);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 /**
  * read_string_prop() - Read a string property from devicetree
  * @node:  Valid node reference to read property from
@@ -206,6 +228,12 @@ static int fsp_update_config_from_dtb(ofnode node, u8 *cfg,
 			read_u32_prop(node, fspb->propname, fspb->count,
 				      (u32 *)&cfg[fspb->offset]);
 		break;
+		case FSP_UINT64:
+			ret = read_u64_prop(node, fspb->propname, fspb->count,
+				      (u64 *)&cfg[fspb->offset]);
+			if (ret)
+				return ret;
+		break;
 		case FSP_STRING:
 			read_string_prop(node, fspb->propname, fspb->count,
 					 (char *)&cfg[fspb->offset]);
diff --git a/arch/x86/include/asm/arch-apollolake/fsp_bindings.h b/arch/x86/include/asm/arch-apollolake/fsp_bindings.h
index b4939519ce..a80e66bbfa 100644
--- a/arch/x86/include/asm/arch-apollolake/fsp_bindings.h
+++ b/arch/x86/include/asm/arch-apollolake/fsp_bindings.h
@@ -17,6 +17,7 @@ enum conf_type {
 	FSP_UINT8,
 	FSP_UINT16,
 	FSP_UINT32,
+	FSP_UINT64,
 	FSP_STRING,
 	FSP_LPDDR4_SWIZZLE,
 };
-- 
2.27.0




More information about the U-Boot mailing list