Hi Alexey, > 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@xxxxxxxxxxxxxxx # v3.13 > Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> > Reviewed-by: Anton Blanchard <anton@xxxxxxxxx> > [aik: folded Anton's patch with of_property_read_u32_array] > Signed-off-by: Alexey Kardashevskiy <aik@xxxxxxxxx> Thanks for updating, looks good. Could we make it clear the bug is present in 3.13-3.17 with: Cc: stable@xxxxxxxxxxxxxxx # v3.13+ Acked-by: Anton Blanchard <anton@xxxxxxxxx> Anton -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html