./kernel/arch/arm/mach-sc8810/include/mach/regs_global.h
./u-boot/arch/arm/include/asm/arch-sc8810/regs_global.h
./mach-sc8810/board-sp8810/gpio_cfg.c gpio配置规划
kernel/arch/arm/mach-sc8810/include/mach/regs_gpio.h:
#define GPIO_BASE SPRD_GPIO_BASE
#define GPIO_PG_BASE GPIO_BASE
#define GPI_PG0_BASE GPIO_BASE
kernel/arch/arm/mach-sc8810/include/mach/hardware.h:
#define SPRD_GPIO_BASE 0xE0031000
kernel/arch/arm/mach-sc8810/include/mach/adi_hal_internal.h 定义了GPIO的物理地址和虚拟地址之间的转换函数
#define ADI_PHYS SPRD_MISC_PHYS//0x82000000
#define __adi_virt_to_phys(x) ((x) - SPRD_ADI_BASE + ADI_PHYS)
#define __adi_phy_to_virt(x) ((x)-ADI_PHYS + SPRD_ADI_BASE) // x-0x82000000+0xE0037000; 就是x+0x5E037000,也就是 虚拟地址到物理地址的偏移是 0x5E037000, 与 函数中的不符!!!SC8810 Device Spec.pdf 的p102页 表5-1 SC8810重启之后的内存地址映射表 中 指明了
0x80000000~0x8fffffff 为外设地址空间,其中0x82000480为GPIO(模拟控制功能段)的基地址(在0x820005ff结束); 0x8A000000为剩下的一段 GPIO的基地址。GPIO所有的基地址请参考:6.8.4节P507页内容
kernel/arch/arm/mach-sc8810/include/mach/regs_adi.h
./mach-sc8810/include/mach/hardware.h 中定义了硬件物理地址和虚拟地址的映射关系,及硬件地址相关的宏
特别重要的一个宏是 #define SPRD_MISC_BASE 0xE0037000,其他很多宏都是在这个宏的基础上进行偏移的。
/* GPIO */
#define SPRD_GPIO_BASE 0xE0031000 //虚拟地址
#define SPRD_GPIO_PHYS 0x8a000000 //物理地址
#define SPRD_GPIO_SIZE SZ_4K
/* registers for watchdog ,RTC, touch panel, aux adc, analog die... */
#define S