7.6.2. 参数配置

7.6.2.1. 内核配置

参考快速入门 - 编译概述 - Kernel配置,进入kernel的功能配置,按如下选择:

Linux
    Device Drivers
        Misc devices
            [*] PBUS driver for ZX 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]

地址有效信号的延迟时间

备注

  1. 表中为了更加简洁,参数名称都省略了前缀“aic,”

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

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

7.6.2.2.2. M4 配置

common/m4.dtsi中的参数配置:

pbus: pbus@107F0000 {
    compatible = "zx,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";
};