What is DSMC
什么是DSMC? DSMC是基于DDR的并行告诉接口,DSMC一共有两个模式
- PSRAM
- LocalBus
How to use DSMC
通过设备树来控制DLL训练初值,Slave的模式选择,传输速率,传输协议,等等。
DLL训练初值
&dsmc{
...
slave {
rockchip,dqs-dll = <0x20 0x20
0x20 0x20
0x20 0x20
0x20 0x20>;
rockchip,ranges = <0x0 0xc0000000 0x0 0x2000000>;
};
};
传输速率
&dsmc{
...
clock-frequency = <100000000>;
...
};
Slave模式选择
选择slave设备设置为PSRAM或者Localbus
&dsmc_slave {
...
psram {
dsmc_psram0:psaram0 {
...
status = "okay"/"disable";
...
}
...
};
lb-slave {
...
dsmc_lb_slave0:lb-slave0 {
status = "okay"/"disbale";
};
....
};
};
LocalBus传输协议
&dsmc_slave{
lb-slave{
dsmc_lb0_slave0{
...
dsmc_p0_region:region0{
...
rockchip,attribute = "Merged FIFO";
stuatus = "okay/disable";
...
};
dsmc_p1_region:region1{
...
rockchip,attribute = "No-Merged FIFO";
stuatus = "okay/disable";
...
};
dsmc_p0_region:region0{
...
rockchip,attribute = "DPRA";
stuatus = "okay/disable";
...
};
dsmc_p0_region:region0{
...
rockchip,attribute = "Register";
stuatus = "okay/disable";
...
};
};
};
};
中断线
&dsmc_slave {
...
lb-slave {
dsmc_lb_slave2: lb-slave2 {
rockchip,int-en = <0x2>;
...
};
};
};
example
&dsmc {
clock-frequency = <50000000>;
status = "okay";
slave {
rockchip,dqs-dll = <0x40 0x40
0x40 0x40
0x40 0x40
0x40 0x40>;
rockchip,ranges = <0x0 0xc0000000 0x0 0x2000000>;
};
};
&dsmc_slave {
status = "okay";
lb-slave {
dsmc_lb_slave2: lb-slave2 {
rockchip,int-en = <0x2>;
status = "okay";
dsmc_p2_region: region {
dsmc_p2_region0: region0 {
status = "okay";
};
dsmc_p2_region3: region3 {
status = "okay";
};
};
};
};
};
DSMC数据链路
CPU-IO

DMA

Debug
LocalBus最常用,作为例子 RK3506_EVB1
DSMC驱动加载成功
ls -l /sys/bus/platform/devices/ff8b0000.dsmc/driver

DSMC PLC_TEST DMA测试
cat /sys/kernel/rk_dsmc_test/plc_test

DSMC CPU-IO 压力测试
cat /sys/kernel/rk_dsmc_test/memtester

DSMC传输速率
cat /sys/kernel/rk_dsmc_test/dsmc_speed_t