【问题标题】:Incorrect values for #address-cells and #size-cells in Device Tree设备树中#address-cells 和#size-cells 的值不正确
【发布时间】:2022-12-09 10:52:23
【问题描述】:

我正在尝试将 tlv320aic3110 编解码器添加到我的项目中,并且建议我将这些端点添加到 i2s 和 i2c 属性中:

&i2s1 {
    ...
    i2s1_port: port {
        i2s1_endpoint: endpoint {
            remote-endpoint = <&tlv320aic3110_tx_endpoint>;
            format = "i2s";
            mclk-fs = <256>;
        };
    };
};

&i2c1 {
    ...
    codec: codec@18 {
        ...
        ports {
            port@0 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <0>;
                tlv320aic3110_tx_endpoint: endpoint {
                    remote-endpoint = <&i2s1_endpoint>;
                };
            };
        };
    };
};

我遇到的问题是,当我将此设备树构建到 dtb 文件中时,我收到了很多警告:

arch/arm/boot/dts/stm32mp135-evt0.dts:334.5-15: Warning (reg_format): /soc/i2c@40012000/codec@18/ports/port@0:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
arch/arm/boot/dts/stm32mp135-evt0.dtb: Warning (pci_device_reg): Failed prerequisite 'reg_format'
arch/arm/boot/dts/stm32mp135-evt0.dtb: Warning (pci_device_bus_num): Failed prerequisite 'reg_format'
arch/arm/boot/dts/stm32mp135-evt0.dtb: Warning (i2c_bus_reg): Failed prerequisite 'reg_format'
arch/arm/boot/dts/stm32mp135-evt0.dtb: Warning (spi_bus_reg): Failed prerequisite 'reg_format'
arch/arm/boot/dts/stm32mp135-evt0.dts:331.11-338.6: Warning (avoid_default_addr_size): /soc/i2c@40012000/codec@18/ports/port@0: Relying on default #address-cells value
arch/arm/boot/dts/stm32mp135-evt0.dts:331.11-338.6: Warning (avoid_default_addr_size): /soc/i2c@40012000/codec@18/ports/port@0: Relying on default #size-cells value
arch/arm/boot/dts/stm32mp135-evt0.dts:332.5-26: Warning (graph_port): /soc/i2c@40012000/codec@18/ports/port@0:#address-cells: graph node '#address-cells' is -1, must be 1
arch/arm/boot/dts/stm32mp135-evt0.dts:333.5-23: Warning (graph_port): /soc/i2c@40012000/codec@18/ports/port@0:#size-cells: graph node '#size-cells' is -1, must be 0

警告说#address-cells的值既是2又是-1#size-cells的值是1-1。但是我已经将它们的值分别设置为10,它仍然给我警告。我错过了什么吗?

我还尝试将 #address-cells#size-cells 添加到 i2s 中的端点,但警告仍然存在。

将它们设置为警告中提到的值也没有任何作用。

显然,我对设备树很陌生。

【问题讨论】:

  • 这两个属性在其子节点的父节点中指定。因此,如果您在没有子节点的节点中声明这些属性,那就很可疑了。 IOW 节点继承这两个属性,因此您需要在树中更高的位置为该节点的自定义/非默认值指定这两个属性。
  • @sawdust,这就是所谓的节点图,要求与节点子树的父子形式略有不同。

标签: linux linux-kernel embedded-linux device-tree


【解决方案1】:

但我已将它们的值分别设置为 1 和 0,它仍然给我警告。我错过了什么吗?

您正在尝试为错误节点中的节点分配两个特殊属性。设备树规范 (v04-rc1) 明确指出:

#地址单元格#size-细胞properties 可用于在设备树层次结构中具有子节点的任何设备节点,并描述应如何寻址子设备节点。

您在没有子节点的节点中使用这两个属性。所以这显然是不正确的。

父节点是需要为其子节点指定这些属性的地方。
port@0 节点的父节点是 port 节点。所以你的 DT 的那部分应该看起来像:

&i2c1 {
    ...
    codec: codec@18 {
        ...
        ports {
            #address-cells = <1>;
            #size-cells = <0>;
    
            port@0 {
                reg = <0>;
                tlv320aic3110_tx_endpoint: endpoint {
                    remote-endpoint = <&i2s1_endpoint>;
                };
            };
        };
    };
};

对于主线内核中的一个非常相似的示例,请查看中的&amp;i2c5节点stm32mp15xx-dhcom-pdk2.dtsi:

&i2c5 { /* Header X21 */
        ...

        sgtl5000: codec@a {
                compatible = "fsl,sgtl5000";
                reg = <0x0a>;
                ...

                sgtl5000_port: port {
                        #address-cells = <1>;
                        #size-cells = <0>;

                        sgtl5000_tx_endpoint: endpoint@0 {
                                reg = <0>;
                                ...
                        };

                        sgtl5000_rx_endpoint: endpoint@1 {
                                reg = <1>;
                                ...
                        };
                };

        };

        ...
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2019-01-09
    相关资源
    最近更新 更多