Message ID | 20220529202629.47588-2-krzysztof.kozlowski@linaro.org |
---|---|
State | New |
Headers | show |
Series | dt-bindings: arm: qcom: qcom,board-id and qcom,msm-id | expand |
On 05/06/2022 17:07, Rob Herring wrote: > On Sun, May 29, 2022 at 10:26:26PM +0200, Krzysztof Kozlowski wrote: >> The top level qcom,msm-id and qcom,board-id properties are utilized by >> bootloaders on Qualcomm MSM platforms to determine which device tree >> should be used and passed to the kernel. >> >> The commit b32e592d3c28 ("devicetree: bindings: Document qcom board >> compatible format") from 2015 was a consensus during discussion about >> upstreaming qcom,msm-id and qcom,board-id fields. There are however still >> problems with that consensus: >> 1. It was reached 7 years ago but it turned out its implementation did >> not reach all possible products. >> >> 2. Initially additional tool (dtbTool) was needed for parsing these >> fields to create a QCDT image consisting of multiple DTBs, later the >> bootloaders were improved and they use these qcom,msm-id and >> qcom,board-id properties directly. >> >> 3. Extracting relevant information from the board compatible requires >> this additional tool (dtbTool), which makes the build process more >> complicated and not easily reproducible (DTBs are modified after the >> kernel build). >> >> 4. Some versions of Qualcomm bootloaders expect these properties even >> when booting with a single DTB. The community is stuck with these >> bootloaders thus they require properties in the DTBs. >> >> Since several upstreamed Qualcomm SoC-based boards require these >> properties to properly boot and the properties are reportedly used by >> bootloaders, document them. > > My primary issue here is accepting this will be an endorsement for > other vendors doing something similar. I'm not against an ID > property(ies) in the root node, but would rather see something common > if we do anything. Hi Rob, A more common approach was merged back in 2015 - encoding this ID information in the board compatibles. If I understood previous discussion correctly, this common method was later used by Qualcomm DTB post-processing tool. At least for some of the cases. Other cases (several Qualcomm boards from different vendors) still use these ID properties. It even turns out they use it differently between vendors (e.g. Xiaomi vs OnePlus). Important arguments for documenting these properties: 1. These ID properties are already on released boards where changing bootloader is non-trivial or even not possible. It will not be possible to remove these properties, without seriously affecting the community working with them. 2. According to Konrad [1] (second paragraph), newer chipsets (starting with sm8350 released in 2021) do not use these properties. These newer DTS do not have them. Considering 1+2 above, maybe let's document these properties as compatible? Would that solve your point of "endorsement for other vendors"? [1] https://lore.kernel.org/all/20220522195138.35943-1-konrad.dybcio@somainline.org/ Best regards, Krzysztof
On 10/06/2022 18:33, Rob Herring wrote: > On Tue, Jun 07, 2022 at 01:15:51PM +0200, Krzysztof Kozlowski wrote: >> On 05/06/2022 17:07, Rob Herring wrote: >>> On Sun, May 29, 2022 at 10:26:26PM +0200, Krzysztof Kozlowski wrote: >>>> The top level qcom,msm-id and qcom,board-id properties are utilized by >>>> bootloaders on Qualcomm MSM platforms to determine which device tree >>>> should be used and passed to the kernel. >>>> >>>> The commit b32e592d3c28 ("devicetree: bindings: Document qcom board >>>> compatible format") from 2015 was a consensus during discussion about >>>> upstreaming qcom,msm-id and qcom,board-id fields. There are however still >>>> problems with that consensus: >>>> 1. It was reached 7 years ago but it turned out its implementation did >>>> not reach all possible products. >>>> >>>> 2. Initially additional tool (dtbTool) was needed for parsing these >>>> fields to create a QCDT image consisting of multiple DTBs, later the >>>> bootloaders were improved and they use these qcom,msm-id and >>>> qcom,board-id properties directly. >>>> >>>> 3. Extracting relevant information from the board compatible requires >>>> this additional tool (dtbTool), which makes the build process more >>>> complicated and not easily reproducible (DTBs are modified after the >>>> kernel build). >>>> >>>> 4. Some versions of Qualcomm bootloaders expect these properties even >>>> when booting with a single DTB. The community is stuck with these >>>> bootloaders thus they require properties in the DTBs. >>>> >>>> Since several upstreamed Qualcomm SoC-based boards require these >>>> properties to properly boot and the properties are reportedly used by >>>> bootloaders, document them. >>> >>> My primary issue here is accepting this will be an endorsement for >>> other vendors doing something similar. I'm not against an ID >>> property(ies) in the root node, but would rather see something common >>> if we do anything. >> >> Hi Rob, >> >> A more common approach was merged back in 2015 - encoding this ID >> information in the board compatibles. If I understood previous >> discussion correctly, this common method was later used by Qualcomm DTB >> post-processing tool. At least for some of the cases. >> >> Other cases (several Qualcomm boards from different vendors) still use >> these ID properties. It even turns out they use it differently between >> vendors (e.g. Xiaomi vs OnePlus). >> >> Important arguments for documenting these properties: >> 1. These ID properties are already on released boards where changing >> bootloader is non-trivial or even not possible. It will not be possible >> to remove these properties, without seriously affecting the community >> working with them. > > Accepting things because they are already in use is also not a path we > want to go down. If it's the color of the bike shed, then fine. > >> 2. According to Konrad [1] (second paragraph), newer chipsets (starting >> with sm8350 released in 2021) do not use these properties. These newer >> DTS do not have them. >> >> Considering 1+2 above, maybe let's document these properties as >> compatible? Would that solve your point of "endorsement for other vendors"? > > What do you mean? Only allow them for certain root compatible strings? I > suppose that would be okay by me. It would also be useful documentation > of where they are needed. Bah, I wrote something else than I had in mind. So one more try: Considering 1+2 above, maybe let's document these properties as *deprecated*? Would that solve your point of "endorsement for other vendors"? However the idea to restrict them per-compatible, is also nice. Although I cannot guarantee the list will not grow for older SoCs. Best regards, Krzysztof
diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml index 6c38c1387afd..b7fa85c1e478 100644 --- a/Documentation/devicetree/bindings/arm/qcom.yaml +++ b/Documentation/devicetree/bindings/arm/qcom.yaml @@ -403,6 +403,64 @@ properties: - qcom,sm8450-qrd - const: qcom,sm8450 + # Board compatibles go above + + qcom,msm-id: + $ref: /schemas/types.yaml#/definitions/uint32-matrix + minItems: 1 + maxItems: 8 + items: + items: + - description: | + MSM chipset ID - an exact match value consisting of three bitfields:: + - bits 0-15 - The unique MSM chipset ID + - bits 16-31 - Reserved; should be 0 + - description: | + Hardware revision ID - a chipset specific 32-bit ID representing + the version of the chipset. It is best a match value - the + bootloader will look for the closest possible match. + description: + The MSM chipset and hardware revision use by Qualcomm bootloaders. It + can optionally be an array of these to indicate multiple hardware that + use the same device tree. It is expected that the bootloader will use + this information at boot-up to decide which device tree to use when given + multiple device trees, some of which may not be compatible with the + actual hardware. It is the bootloader's responsibility to pass the + correct device tree to the kernel. + This is a legacy property - it is not expected on newer boards (starting + with SM8350). + + qcom,board-id: + $ref: /schemas/types.yaml#/definitions/uint32-matrix + minItems: 1 + maxItems: 8 + items: + items: + - description: | + Board ID consisting of three bitfields:: + - bits 31-24 - Unusued + - bits 23-16 - Platform Version Major + - bits 15-8 - Platform Version Minor + - bits 7-0 - Platform Type + Platform Type field is an exact match value. The + Platform Major/Minor field is a best match. The bootloader will + look for the closest possible match. + - description: | + Subtype ID unique to a Platform Type/Chipset ID. For a given + Platform Type, there will typically only be a single board and the + subtype_id will be 0. However in some cases board variants may + need to be distinguished by different subtype_id values. + description: + The board type and revision information. It can optionally be an array + of these to indicate multiple boards that use the same device tree. It + is expected that the bootloader will use this information at boot-up to + decide which device tree to use when given multiple device trees, some of + which may not be compatible with the actual hardware. It is the + bootloader's responsibility to pass the correct device tree to the + kernel + This is a legacy property - it is not expected on newer boards (starting + with SM8350). + additionalProperties: true ... diff --git a/include/dt-bindings/arm/qcom,ids.h b/include/dt-bindings/arm/qcom,ids.h new file mode 100644 index 000000000000..eaf86c18650f --- /dev/null +++ b/include/dt-bindings/arm/qcom,ids.h @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2015, The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Linaro Ltd + * Author: Krzysztof Kozlowski <krzk@kernel.org> based on previous work of Kumar Gala. + */ +#ifndef _DT_BINDINGS_ARM_QCOM_IDS_H +#define _DT_BINDINGS_ARM_QCOM_IDS_H + +/* qcom,msm-id */ +#define QCOM_ID_APQ8026 199 +#define QCOM_ID_MSM8916 206 +#define QCOM_ID_MSM8994 207 +#define QCOM_ID_MSM8996_3_0 246 +#define QCOM_ID_APQ8016 247 +#define QCOM_ID_MSM8216 248 +#define QCOM_ID_MSM8116 249 +#define QCOM_ID_MSM8616 250 +#define QCOM_ID_MSM8998 292 +#define QCOM_ID_SDM845 321 + +/* qcom,board-id */ +#define QCOM_BOARD_ID(a, major, minor) \ + (((major & 0xff) << 16) | ((minor & 0xff) << 8) | QCOM_BOARD_ID_##a) + +#define QCOM_BOARD_ID_MTP 8 +#define QCOM_BOARD_ID_DRAGONBOARD 10 +#define QCOM_BOARD_ID_SBC 24 + +#endif /* _DT_BINDINGS_ARM_QCOM_IDS_H */