Edit online

PBUS 配置

5 Dec 2024
Read time: 2 minute(s)

内核配置

在 Luban 根目录下执行 make kernel-menuconfig,进入 kernel 的功能配置,按如下选择:

Linux
    Device Drivers
        Misc devices
            [*] PBUS driver for ArtInChip SoC

DTS 参数配置

  • 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] 地址有效信号的延迟时间
    注:
    1. 表中为了更加简洁,参数名称都省略了前缀“aic,”

    2. 前面 6 个参数,取值范围是 [0, 1],在 DTS 中是 boolean 类型,其他参数都是正整数类型

    3. “保持时间”和“延迟时间” 的单位,都是 PBus clk 的周期值

  • 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>;
    };
  • 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";
    };