diff --git a/Documentation/devicetree/bindings/hwinfo/qcom,board-id.yaml b/Documentation/devicetree/bindings/hwinfo/qcom,board-id.yaml
new file mode 100644
index 0000000..807f134
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwinfo/qcom,board-id.yaml
@@ -0,0 +1,86 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/hwinfo/qcom,board-id.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: QCOM Board Identifier for Devicetree Selection
+
+maintainers:
+  - Amrit Anand <quic_amrianan@quicinc.com>
+  - Elliot Berman <quic_eberman@quicinc.com>
+
+description: |
+  Qualcomm uses two and sometimes three hardware identifiers to describe
+  its boards
+      - a SoC identifier is used to match chipsets (e.g. sm8550 vs sm8450)
+      - a board identifier is used to match board form factor (e.g. MTP, QRD,
+        ADP, CRD)
+      - a PMIC identifier is occasionally used when different PMICs are used
+        for a given board/SoC combination.
+  Each field and helper macros are defined at::
+      - include/dt-bindings/arm/qcom,ids.h
+
+  For example,
+    / {
+        #board-id-cells = <2>;
+        board-id = <456 0>, <457 0>, <10 0>;
+        board-id-types = "qcom,soc-id", "qcom,soc-id", "qcom,board-id";
+     }
+
+allOf:
+  - $ref: board-id.yaml#
+
+properties:
+  board-id:
+    minItems: 2
+
+  board-id-types:
+    minItems: 2
+    items:
+      oneOf:
+        - const: qcom,soc-id
+          description: |
+            Matches Qualcomm Technologies, Inc. boards with the specified SoC.
+            2 integers are needed to describe a soc-id. The first integer is the
+            SoC ID and the second integer is the SoC revision.
+            qcom,soc-id = <soc-id  soc-revision>
+        - const: qcom,board-id
+          description: |
+            Matches Qualcomm Technologies, Inc. boards with the specified board.
+            2 integers are needed to describe a board-id. The first integer is the
+            board ID. The second integer is the board-subtype.
+            qcom,board-id = <board-id  board-subtype>
+        - const: qcom,pmic-id
+          description: |
+            QUALCOMM boards can be atached to mutliple PMICs where slave-id (SID)
+            indicates the address of the bus on which the PMIC is attached. It can be
+            any number. The model for a PMIC indicates the PMIC name attached to bus
+            described by SID along with  major and minor version. 2 integers are needed
+            to describe qcom,pmic-id. The first integer is the slave-id and the second integer
+            is the pmic model.
+            qcom,pmic-id = <pmic-sid pmic-model>
+
+  '#board-id-cells':
+    minimum: 2
+
+additionalProperties: true
+
+examples:
+   - |
+     #include <dt-bindings/arm/qcom,ids.h>
+     / {
+         model = "Qualcomm Technologies, Inc. sc7280 IDP SKU1 platform";
+         compatible = "qcom,sc7280-idp", "google,senor", "qcom,sc7280";
+
+         #board-id-cells = <2>;
+         board-id = <QCOM_SOC_ID(SC7280) QCOM_SOC_REVISION(1)>,
+                    <QCOM_SOC_ID(SC7280) QCOM_SOC_REVISION(2)>,
+                    <QCOM_BOARD_ID(IDP, 1, 0) QCOM_BOARD_SUBTYPE(UFS, ANY, 1)>;
+         board-id-types = "qcom,soc-id",
+                          "qcom,soc-id",
+                          "qcom,board-id";
+
+         #address-cells = <2>;
+         #size-cells = <2>;
+      };
diff --git a/include/dt-bindings/arm/qcom,ids.h b/include/dt-bindings/arm/qcom,ids.h
index f724834..c4cd440 100644
--- a/include/dt-bindings/arm/qcom,ids.h
+++ b/include/dt-bindings/arm/qcom,ids.h
@@ -8,9 +8,12 @@
 #define _DT_BINDINGS_ARM_QCOM_IDS_H
 
 /*
- * The MSM chipset and hardware revision used by Qualcomm bootloaders, DTS for
- * older chipsets (qcom,msm-id) and in socinfo driver:
+ * The MSM chipset ID used by Qualcomm bootloaders, DTS for
+ * older chipsets (soc-id) and in socinfo driver:
  */
+
+#define QCOM_SOC_ID(a)  ((QCOM_ID_##a) && 0xffff)
+
 #define QCOM_ID_MSM8260			70
 #define QCOM_ID_MSM8660			71
 #define QCOM_ID_APQ8060			86
@@ -266,16 +269,65 @@
 #define QCOM_ID_IPQ5302			595
 #define QCOM_ID_IPQ5300			624
 
+ /* The SOC revision used by Qualcomm bootloaders (soc-revision) */
+
+#define QCOM_SOC_REVISION(a)		(a & 0xff)
+
 /*
  * The board type and revision information, used by Qualcomm bootloaders and
- * DTS for older chipsets (qcom,board-id):
+ * DTS for older chipsets (board-id)
  */
+
 #define QCOM_BOARD_ID(a, major, minor) \
-	(((major & 0xff) << 16) | ((minor & 0xff) << 8) | QCOM_BOARD_ID_##a)
+	(((major & 0xff) << 16) | ((minor & 0xff) << 8) | ((QCOM_BOARD_ID_##a) & 0xff))
+
+#define QCOM_BOARD_ID_MTP		0x8
+#define QCOM_BOARD_ID_DRAGONBOARD	0x10
+#define QCOM_BOARD_ID_QRD		0x11
+#define QCOM_BOARD_ID_HDK		0x1F
+#define QCOM_BOARD_ID_ATP		0x21
+#define QCOM_BOARD_ID_IDP		0x22
+#define QCOM_BOARD_ID_SBC		0x24
+#define QCOM_BOARD_ID_QXR		0x26
+#define QCOM_BOARD_ID_CRD		0x28
+
+/*
+ * The platform subtype is used by Qualcomm bootloaders and
+ * DTS (board-subtype)
+ */
+#define QCOM_BOARD_SUBTYPE(a, b, SUBTYPE) \
+	(((QCOM_BOARD_BOOT_##a & 0xf) << 16) | ((QCOM_BOARD_DDRTYPE_##b & 0x7) << 8) | \
+	(SUBTYPE & 0xff))
+
+/* Board DDR Type where each value indicates higher limit */
+#define QCOM_BOARD_DDRTYPE_ANY		0x0
+#define QCOM_BOARD_DDRTYPE_128M		0x1
+#define QCOM_BOARD_DDRTYPE_256M		0x2
+#define QCOM_BOARD_DDRTYPE_512M		0x3
+#define QCOM_BOARD_DDRTYPE_1024M	0x4
+#define QCOM_BOARD_DDRTYPE_2048M	0x5
+#define QCOM_BOARD_DDRTYPE_3072M	0x6
+#define QCOM_BOARD_DDRTYPE_4096M	0x7
+
+/* Board Boot Device Type */
+#define QCOM_BOARD_BOOT_EMMC		0x0
+#define QCOM_BOARD_BOOT_UFS		0x1
+#define QCOM_BOARD_BOOT_NAND		0x2
+#define QCOM_BOARD_BOOT_OTHER		0x3
+
+/*
+ * The PMIC slave id is used by Qualcomm bootloaders to
+ * indicates which PMIC is attached (pmic-sid)
+ */
+
+#define QCOM_PMIC_SID(a)		(a & 0xff)
+
+/*
+ * The PMIC ID is used by Qualcomm bootloaders to describe the ID
+ * of PMIC attached to bus described by SID (pmic-model)
+ */
 
-#define QCOM_BOARD_ID_MTP			8
-#define QCOM_BOARD_ID_DRAGONBOARD		10
-#define QCOM_BOARD_ID_QRD			11
-#define QCOM_BOARD_ID_SBC			24
+#define QCOM_PMIC_MODEL(ID, major, minor) \
+	(((major & 0xff) << 16) | ((minor & 0xff) << 8) | (ID & 0xff))
 
 #endif /* _DT_BINDINGS_ARM_QCOM_IDS_H */
