• Mark Brown's avatar
    regmap: mmio: Convert to regmap_bus and fix accessor usage · 922a9f93
    Mark Brown authored
    Currently regmap-mmio uses the __raw accessors to read and write from
    memory.  This is not safe as these interact poorly with spinlocks and
    are not guaranteed to generate emulated instructions on at least ARM
    where regmap is commonly used.  The APIs that are provided all provide
    some byte swapping so this is difficult to do with the current
    regmap-mmio implementation which attempts to use the regmap core byte
    swapping.
    
    We can fix this by modernising the MMIO implementation to use
    reg_read() and reg_write() operations which were added after the API was
    implemented and pass simple unsigned integers through to the bus, making
    use of the formatting provided by the I/O accessors using a similar
    pattern to that used by the core.  This will be less efficient for block
    I/O operations since we now enable and disable any required clocks per
    register but it is not clear that any users of regmap-mmio actually use
    block I/O and there is room to optimise later.
    
    This removes support for big endian I/O on 64 bit registers since no I/O
    accessors are provided, no current users were found and support can be
    added easily once they are available.
    
    In addition make the default endianness little endian.  This was the
    behaviour prior to 29bb45f2 (regmap-mmio: Use native endianness
    for read/write) and is the behaviour desired by most existing users, the
    users have been audited and those that need native endianness converted
    to request it explicitly.  Previously native was documented as the
    default but due to the byte swapping in the accessors this was not
    correctly implemented.
    
    Fixes: 29bb45f2 (regmap-mmio: Use native endianness for read/write)
    Reported-by: default avatarJohannes Berg <johannes@sipsolutions.net>
    Tested-by: default avatarJohannes Berg <johannes@sipsolutions.net>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    922a9f93
regmap-mmio.c 7.6 KB