• Xiubo Li's avatar
    regmap: mmio: Fix the bug of 'offset' value parsing. · 88cb32c6
    Xiubo Li authored
    'offset = *(u32 *)reg;'
    This will be okey for 32/64-bits register device, but for 8/16-bits
    register ones, the 'offset' value will overflow, for example:
    
    The IMX2 Watchdog, whose registers and values are all 16-bits:
    
    If the IO base virtual address is ctx->regs = 0x888c0000, and the now
    doing the 0x00 register accessing:
    Using 'offset = *(u32 *)reg' the offset value will possiblly be 0x77310000,
    Using 'offset = *(u16 *)reg' the offset value will be 0x0000.
    
    In the regmap_mmio_gather_write(), ctx->regs + 0x7731000 will be 0xffbd0000,
    but actually it should be ctx->regs + 0x0000 = 0x888c0000.
    Signed-off-by: default avatarXiubo Li <Li.Xiubo@freescale.com>
    Signed-off-by: default avatarMark Brown <broonie@linaro.org>
    88cb32c6
regmap-mmio.c 7.26 KB