[PATCH v2 2/2] dt-bindings: qcom: Update DT bindings for multiple DT

From: Amrit Anand
Date: Thu Mar 14 2024 - 08:13:43 EST


Qualcomm produces a lot of "unique" boards with slight differences in
SoC's and board's configuration. For eg, there can be SM8150v1 on MTPv1,
SM8150v1 on MTPv2, SM8150v2 on MTPv2, SM8150v2 on MTPv2 with a different
PMIC, SM8150v2 with no modem support and so on. For instance, suppose we
have 3 SoC, each with 4 boards supported, along with 2 PMIC support for
each case which would lead to total of 24 DTB files. Along with these
configurations, OEMs may also add certain additional board variants. Thus
a mechanism is required to pick the correct DTB for the corresponding board.

Introduce mechanism to select required DTB using newly introduced device
tree properties "board-id" and "board-id-type". "board-id" will contain
the list of values of "qcom,soc-id", "qcom,board-id", "qcom,pmic-id" or
"qcom,oem-id". "board-id-types" contains the type of parameter which is
entered. It can be either "qcom,soc-id", "qcom,board-id", "qcom,pmic-id"
or "qcom,oem-id".

Qualcomm based bootloader will use these properties to pick the best
matched DTB to boot the device with.

Signed-off-by: Amrit Anand <quic_amrianan@xxxxxxxxxxx>
---
Documentation/devicetree/bindings/arm/qcom.yaml | 90 +++++++++++++++++++++++++
1 file changed, 90 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml
index 7f80f48..dc66ae9 100644
--- a/Documentation/devicetree/bindings/arm/qcom.yaml
+++ b/Documentation/devicetree/bindings/arm/qcom.yaml
@@ -1100,6 +1100,76 @@ properties:
kernel
The property is deprecated.

+ board-id:
+ $ref: /schemas/types.yaml#/definitions/uint32-matrix
+ minItems: 2
+ description: |
+ Qualcomm specific bootloader uses multiple different identifiers
+ (qcom,soc-id, qcom,board-id, qcom,pmic-id, qcom,oem-id) to select
+ single Devicetree among list of Devicetrees. For different identifiers,
+ the selection can be done either based on exact match (where the
+ identifiers information coming from firmware should exactly match
+ the ones described in devicetree) or best match (firmware provided
+ identifier information closely matches with the one of the Devicetree).
+ Below table describes matching criteria for each identifier::
+ |----------------------------------------------------------------------|
+ | DT property | Individual fields | Exact | Best | Default |
+ |----------------------------------------------------------------------|
+ | qcom,soc-id | |
+ | | Chipset Id | Y | N | - |
+ | | SoC Revision | N | Y | - |
+ | qcom,board-id | |
+ | | Board Id | Y | N | - |
+ | | Board Major | N | Y | - |
+ | | Board Minor | N | Y | - |
+ | | Subtype | Y | N | 0 |
+ | | DDRtype | Y | N | 0 |
+ | | BootDevice Type | Y | N | 0 |
+ | qcom,pmic-id | |
+ | | Slave Id | Y | N | 0 |
+ | | PMIC Id | Y | N | 0 |
+ | | PMIC Major | N | Y | 0 |
+ | | PMIC Minor | N | Y | 0 |
+ | qcom,oem-id | |
+ | | OEM Id | Y | N | 0 |
+ |----------------------------------------------------------------------|
+ For best match, identifiers are matched based on following priority order::
+ SoC Revision > Board Major > Board Minor > PMIC Major > PMIC Minor
+
+ board-id-types:
+ $ref: /schemas/types.yaml#/definitions/non-unique-string-array
+ description:
+ Each field and helper macros are defined at include/dt-bindings/arm/qcom,ids.
+ 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 attached to multiple 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>
+ - const: qcom,oem-id
+ description: |
+ Matches Qualcomm Technologies, Inc. boards with the specified OEM ID.
+ 1 integer is needed to describe the oem-id.
+ qcom,oem-id = <oem-id>
+
allOf:
# Explicit allow-list for older SoCs. The legacy properties are not allowed
# on newer SoCs.
@@ -1167,4 +1237,24 @@ allOf:

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>;
+ };
+
+
...
--
2.7.4