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] |
地址有效信号的延迟时间 |
备注
表中为了更加简洁,参数名称都省略了前缀“aic,”
前面6个参数,取值范围是 [0, 1],在DTS中是boolean类型,其他参数都是正整数类型
“保持时间”和“延迟时间” 的单位,都是 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";
};