Dear zhou, iomux tool generated code is based on physical address register base. But in linux iMX6 MMU enabled that means we must use virtual address for register access.
in /arch/arm/mach-mx6/mm.c
void __init mx6_map_io(void)
{
iotable_init(mx6_io_desc, ARRAY_SIZE(mx6_io_desc));
mxc_iomux_v3_init(IO_ADDRESS(MX6Q_IOMUXC_BASE_ADDR));
mxc_arch_reset_init(IO_ADDRESS(MX6Q_WDOG1_BASE_ADDR));
mx6_set_cpu_type();
mxc_cpu_lp_set(WAIT_CLOCKED);
}
Bolded address is virtual address for iomux base. So if you want to use IOMUX tool generated code,please replace the REGS_IOMUXC_BASE with new IO_ADDRESS(MX6Q_IOMUXC_BASE_ADDR).
If I guess without error, you should add this before including "registers/regsiomuxc.h"
#define REGS_IOMUXC_BASE IO_ADDRESS(MX6Q_IOMUXC_BASE_ADDR)
Good luck!