rk3288 grf和io_domain
grf 通用寄存器,io_domain配置
目录
一,GRF介绍
通用寄存器文件(GRF)用于软件静态配置,该文件包含多个系统控制寄存器。
GRF分为两部分:非安全系统GRF和安全系统SGRF。
7.2功能说明 通用寄存器文件的功能包括:
IOMUX 控制
控制 GPIO 在关机模式下的状态
GPIO PAD下拉与上拉控制
用于常规系统控制
用于记录系统状态
工艺、电压和温度(PVT)等参数进行监测和控制等等
寄存器比较多,uart,pvt以及USB OTG没有贴出来,uart有专门的介绍,USB OTG和PVT太高端没有研究欲望



二,kernel的grf使用
uboot中grf使用很少,都使用的默认值,所以使用kernel研究grf
kernel关于grf的dts配置如下
grf: syscon@ff770000 {
compatible = "rockchip,rk3288-grf", "syscon", "simple-mfd";
reg = <0x0 0xff770000 0x0 0x1000>;
io_domains: io-domains {
compatible = "rockchip,rk3288-io-voltage-domain";
bb-supply = <&vcc_io>;APIO5_VDD
gpio30-supply = <&vcc_io>;APIO1_VDD
gpio1830-supply = <&vcc_io>;APIO2_VDD
sdcard-supply = <&vccio_sd>;
};
};
跟踪rockchip,rk3288-grf的probe实现,主要修改这几个寄存器
#define RK3288_GRF_SOC_CON0 0x244
#define RK3288_GRF_SOC_CON2 0x24c
static const struct rockchip_grf_value rk3288_defaults[] __initconst = {
{ "jtag switching", RK3288_GRF_SOC_CON0, HIWORD_UPDATE(0, 1, 12) },
{ "pwm select", RK3288_GRF_SOC_CON2, HIWORD_UPDATE(1, 1, 0) },
};

soc_con0 bit(12)控制jtag选择开关,此处设置成0,关闭jtag

soc_con2 bit(0)控制pwm的选择,配置成1为使用rk的pwm
三,kernel的io_domain配置
dts中io_domain是grf的子节点,具体内容如下:
io_domains: io-domains {
compatible = "rockchip,rk3288-io-voltage-domain";
bb-supply = <&vcc_io>;APIO5_VDD
gpio30-supply = <&vcc_io>;APIO1_VDD
gpio1830-supply = <&vcc_io>;APIO2_VDD
sdcard-supply = <&vccio_sd>;
};
跟踪rockchip,rk3288-io-voltage-domain的probe实现,
static const struct rockchip_iodomain_soc_data soc_data_rk3288 = {
.grf_offset = 0x380,
.supply_names = {
"flash0", /* FLASH0_VDD (emmc) */
"flash1", /* FLASH1_VDD (sdio1) */
"wifi", /* APIO3_VDD (sdio0) */
"bb", /* APIO5_VDD */
"sdcard", /* SDMMC0_VDD (sdmmc) */
"gpio30", /* APIO1_VDD */
"gpio1830", /* APIO2_VDD */},
.init = rk3288_iodomain_init,flash专用初始化
};


比如要使用GPIO5,需要配置APIO5_VDD,配置bb-supply = <&vcc_io>;从而影响GRF_IO_VSEL(offset=0x380)的bit(5)告知gpio使用1.8V还是3.3V。
grf功能本章介绍的比较少,主要是了解下grf做了哪些事情,通过kernel的dts观察grf的配置。因为dts是我裁剪最小化了的,所以内容不多。grf的功能是很丰富的,温度监测,电压状态都有专门的status寄存器跟踪,后面深入了解下再更新内容。
更多推荐


所有评论(0)