I am having major issues accessing IPU2 registers from user-space, and I don't really know why - hopefully someone could help.
I am using mmap() - something like:
#define IPU1_REG_BASE 0x2600000
#define IPU2_REG_BASE 0x2A00000
#define IPU_MAP_SIZE 0x68020
#define IPU_CONF_OFFSET 0
_fdmem = open( memDevice, O_RDWR | O_SYNC );
map_ipu1 = (int *)(mmap(0, IPU_MAP_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, _fdmem, IPU1_REG_BASE));
map_ipu2 = (int *)(mmap(0, IPU_MAP_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, _fdmem, IPU2_REG_BASE));
int ipu_conf1 = *(map_ipu1+IPU_CONF_OFFSET/4)
int ipu_conf2 = *(map_ipu2+IPU_CONF_OFFSET/4)
If I comment out the last line (ipu_conf2), everything works (IPU1 registers are being read normally always), but if I use *(map_ipu2) anywhere, the application locks-up and I have to reboot. Also funny is output of "cat /proc/iomem ":
02400000-027fffff : imx-ipuv3.0
02800000-02bfffff : imx-ipuv3.1
I am not sure if this is correct? I have also tried with these addresses and it still locks.
Anyone knows? Or has similar issues? I have silicon rev1.0 and using kernel 3.0.35-4.0.0.