目录

一,GRF介绍

二,kernel的grf使用

三,kernel的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寄存器跟踪,后面深入了解下再更新内容。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐