7.6.2. 参数配置¶
7.6.2.1. 内核配置¶
在luban根目录下执行 make kernel-menuconfig,进入kernel的功能配置,按如下选择:
Linux
    Device Drivers
        Misc devices
            [*] PBUS driver for Artinchip SoC
7.6.2.2. DTS 参数配置¶
7.6.2.2.1. PBus 自定义参数¶
PBus 驱动支持从DTS中配置的参数定义,基本和Spec中CFG寄存器的字段分布保持一致。如下表:
| 寄存器 | 参数名称 | 取值范围 | 功能说明 | 
|---|---|---|---|
| CFG0 | outenable-pol-highactive | [0, 1] | 外设输出使能的极性,是否高电平有效 | 
| wrenable-pol-highactive | [0, 1] | 读写指示信号的极性,是否高电平有效 | |
| addrvalid-pol-highactive | [0, 1] | 地址有效信号的极性,是否高电平有效 | |
| cs-pol-highactive | [0, 1] | 外设片选信号的极性,是否高电平有效 | |
| busclk-pol-riseedge | [0, 1] | 地址/数据是否在总线时钟信号上升沿跳变 | |
| busclk-outenable | [0, 1] | 总线时钟输出的使能 | |
| busclk-div | [0, 3] | 总线时钟分频,0 - 未定义, 1 - HCLK/2, 2 - HCLK/4, 3 - HCLK/8 | |
| CFG1 | wrdata-holdtime | [0, 15] | 写数据输出的保持时间 | 
| wrdata-delaytime | [0, 15] | 写数据输出的延迟时间 | |
| addr-holdtime | [0, 15] | 地址输出的保持时间 | |
| addr-delaytime | [0, 15] | 地址输出的延迟时间 | |
| cs-holdtime | [0, 15] | 外设片选信号的有效保持时间 | |
| cs-delaytime | [0, 15] | 外设片选信号的有效最小间隔 | |
| CFG2 | outenable-holdtime | [0, 15] | 外设输出使能的保持时间 | 
| outenable-delaytime | [0, 15] | 外设输出使能的延迟时间 | |
| wrrd-holdtime | [0, 15] | 读写控制信号的保持时间 | |
| wrrd-delaytime | [0, 15] | 读写控制信号的延迟时间 | |
| addrvalid-holdtime | [0, 15] | 地址有效信号的保持时间 | |
| addrvalid-delaytime | [0, 15] | 地址有效信号的延迟时间 | 
注解
- 表中为了更加简洁,参数名称都省略了前缀“aic,” 
- 前面6个参数,取值范围是 [0, 1],在DTS中是boolean类型,其他参数都是正整数类型 
- “保持时间”和“延迟时间” 的单位,都是 PBus clk 的周期值 
7.6.2.2.2. D211 配置¶
common/d211.dtsi中的参数配置:
pbus: pbus@107F0000 {
    compatible = "artinchip,aic-pbus-v1.0";
    reg = <0x0 0x107F0000 0x0 0x1000>;
    clocks = <&cmu CLK_PBUS>;
    resets = <&rst RESET_PBUS>;
};
7.6.2.2.3. Board 配置¶
xxx/board.dts中的参数配置:
&pbus {
    aic,busclk-div = <2>;
    aic,busclk-outenable;
    aic,busclk-pol-riseedge;
    aic,cs-pol-highactive;
    aic,addrvalid-pol-highactive;
    aic,wrenable-pol-highactive;
    aic,outenable-pol-highactive;
    aic,wrdata-holdtime = <1>;
    aic,wrdata-delaytime = <2>;
    aic,addr-holdtime = <3>;
    aic,addr-delaytime = <4>;
    aic,cs-holdtime = <5>;
    aic,cs-delaytime = <6>;
    aic,outenable-holdtime = <7>;
    aic,outenable-delaytime = <8>;
    aic,wrrd-holdtime = <9>;
    aic,wrrd-delaytime = <10>;
    aic,addrvalid-holdtime = <11>;
    aic,addrvalid-delaytime = <12>;
    status = "okay";
};