全志平台SUNXI device tree和sys_config.fex配置规范

sys_config 强制性规范 主键命名方式统一采用[设备+编号] 例如:
只有一个设备: [uart0]

存在多个设备:  [uart0]
                              [
uart1]
                              [
uart2]
子键用来表示设备是否使用,采用主键名称_used"字段 例如:
[s_uart0]
s_uart0_used=1
子键值是十进制数值类型 例如:
[csi0]
csi0_mode=
1
子键值是十六进制数值类型 例如:
[dram0]
dram0_zq=
0x77bb
主键之间如果存在从属关系,采用[父主键名/子主键名] 例如:
[spi0]
spi0_used=1

[
spi0/spi0_board0]
...
子键值如果是数值类型,不允许出现负值  
建议性 子键用来表示其他配置,采用"主键名称_xxxx"字段 例如:
[s_uart0]
s_uart0_tx=port:PL02<2><default><default><default>
s_uart0_rx=port:PL03<2><default><default><default>
device tree 强制性规范 节点名称前边的lable要跟sys_config 主键名匹配 device tree配置:
/{ 
        soc@01c20000{
                
s_rsb0s_rsb@1f03400 {
                          compatible = "allwinner,s_rsb";
                          reg = <0x0 0x01f03400 0x0 0x400>;
                          interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
                          pinctrl-names = "default";
                          pinctrl-0 = <&s_rsb0_pins_a>;
                          status = "okay";
                };
         };
};

sys_config
配置:
[s_rsb0]
s_rsb_used        = 1
s_rsb_sck         = port:PL00<2><1><2><default>
s_rsb_sda         = port:PL01<2><1><2><default>
属性值如果为十进制整形数据 /{ 
        soc@01c20000{
                vdevice0: vdevice0{
                          compatible = "allwinner,vdevice0";
                           vdevice0_prop_1=<10>;
                          status = "okay";
                };
         };
};
属性值如果为十六进制整形数据 /{ 
        soc@01c20000{
                vdevice0: vdevice0{
                          compatible = "allwinner,vdevice0";
                           vdevice0_prop_1=<0x10>;
                          status = "okay";
                };
         };
};
一个sys_config主键映射到一个device tree节点,
不允许出现多对多映射、一对多映射、多对一映射
/
节点属性不允许出现label /
同时在device tree&&sys_config都存在配置的节点,
需要在device tree设备节点中添加device_type属性,
属性值为sys_config的主键名
device tree配置:
/{ 
        soc@01c20000{
                s_rsb0: s_rsb@1f03400 {
                          compatible = "allwinner,s_rsb";
                  
        device_type = "s_rsb0";
                          reg = <0x0 0x01f03400 0x0 0x400>;
                          interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
                          pinctrl-names = "default";
                          pinctrl-0 = <&s_rsb0_pins_a>;
                          status = "okay";
                };
         };
};

sys_config
配置:
[s_rsb0]
s_rsb_used        = 1
s_rsb_sck         = port:PL00<2><1><2><default>
s_rsb_sda         = port:PL01<2><1><2><default>
GPIO dts配置规范(强制性规范) 通用GPIO/中断脚配置 /{
        soc@01c20000{
                vdevice: vdevice@0{
                       device_type = "vdevice";
                       compatible = "allwinner,sun50i-vdevice";
                       pinctrl-names = "default";
                       pinctrl-0 = <&vdevice_pins_a>;
                       vdevice_gpio_1 = <&r_pio PL 0 1 1 1 1>;
                       status = "okay";
                };
        };
};

例子中GPIO配置参数说明:(例子配置仅说明参数意义,不具备实际配置参考)
参数1:指向哪个PIO控制器,CPU域的GPIO使用&pio, CPUS域的GPIO使用&r_pio
参数2:指明哪个bank,(PA/PB/PC/...
参数3:指明bank内索引号.
参数4:指明复用功能(0-GPIO IN; 1-GPIO_OUT 6-INTERRUPT
参数5:指明上下拉配置
参数6:指明驱动力配置
参数7:指明电平配置
PIN配置 dts配置:
/{
    soc@01c20000{
        pinctrl@01c20800{

            vdevice_pins_a: vdevice@0 {
                    allwinner,pins = "PB0", "PB1";
                    allwinner,pname= "vdevice_pin_0", "vdevice_pin_1";
                    allwinner,function = "vdevice";
                    allwinner,drive = <2>;
                    allwinner,pull = <1>;
                    allwinner,data = <0>;
            };

        };
        vdevice: vdevice@0{
             device_type = "vdevice";
             compatible = "allwinner,sun50i-vdevice";

             pinctrl-names = "vdevice-default";
             pinctrl-0 = <&vdevice_pins_a>;

             vdevice-gpios_1 = <&r_pio PL 0 1 2 3 4>;
             status = "okay";
        };
    };
};
sys_config
配置:
[vdevice]
vdevice_used        = 1
vdevice_pin_0         = port:PB01<4><1><2><default>
vdevice_pin_1         = port:PB02<4><1><2><default>
vdevice_gpios_1     = port:PL00<1><1><1><1>
vdevice_prop_1      = 0x1234
vdevice_prop_3      = "device-string"
dts 规范 (1)同个文件下,一个节点中是否存在重复子节点?
2)板级配置会覆盖soc配置,需要确认板级配置是否合乎需求.
3)属性值为value时默认采用16进制,需要注意是否与十进制混淆.
 
资源 (1)设备节点clock配置信息是否正确
(2)设备节点memory配置信息是否正确(起始地址、大小、是否存在多片不连续)
(3)设备节点interrupt配置信息是否正确
(4)设备节点compatible配置信息是否跟驱动保持一致
(5)设备节点pin配置信息是否正确(用了哪些pin、设备名、属性配置)
(6)设备节点其它属性配置是否正确.

(6)设备节点需要划分好哪些资源与soc相关,哪些与板级相关。

sys_config 规范 (1)字符串表示可以有两种形式,subkey="xxx" 或者 subkey=string: xxx; 不支持subkey="xxx", "xxx";
 
 
资源  
 
 
SCRIPT_TO_DTS 规范 (1)sys_config.fex主键名字定义是否合乎规范, 是否与dts节点label名字保存一致.
(2)sys_config.fex子键名字定义是否合乎规范, 是否与dts中节点属性名称保存一致。
(3)sys_config.fex子键如果为value时,是否存在属性值为负数的情况。
(4)sys_config.fex主键与dts节点一一配对,确保不要出现sys_config几个主键糅合成dts一个节点
(4)sys_config.fex子键used字段使用是否合乎规范
 
资源 (1)客户可以修改的配置,需要配置在sys_config.fex
(2)客户可以删除的配置,只能配置在sys_config.fex
(3)模块需要仔细检查sys_config.fex配置,它优先级最高,会覆盖dts定义的配置.

猜你喜欢

转载自blog.csdn.net/weixin_43094346/article/details/82746695