• Alexey Kardashevskiy's avatar
    powerpc/iommu/ddw: Fix endianness · 9410e018
    Alexey Kardashevskiy authored
    rtas_call() accepts and returns values in CPU endianness.
    The ddw_query_response and ddw_create_response structs members are
    defined and treated as BE but as they are passed to rtas_call() as
    (u32 *) and they get byteswapped automatically, the data is CPU-endian.
    This fixes ddw_query_response and ddw_create_response definitions and use.
    
    of_read_number() is designed to work with device tree cells - it assumes
    the input is big-endian and returns data in CPU-endian. However due
    to the ddw_create_response struct fix, create.addr_hi/lo are already
    CPU-endian so do not byteswap them.
    
    ddw_avail is a pointer to the "ibm,ddw-applicable" property which contains
    3 cells which are big-endian as it is a device tree. rtas_call() accepts
    a RTAS token in CPU-endian. This makes use of of_property_read_u32_array
    to byte swap and avoid the need for a number of be32_to_cpu calls.
    
    Cc: stable@vger.kernel.org # v3.13+
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    [aik: folded Anton's patch with of_property_read_u32_array]
    Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Acked-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    9410e018
iommu.c 35.9 KB