> > > > So the swapped data by HW is neither BE or LE. In this case, we should use > > swab32 to obtain the correct LE data because our driver currently supports LE. > > This is for compensating for bad HW decisions. > > Let us assume that the host is reading data provided by HW. > > If the swab32 approach works on a little endian host > to allow the host to access 32-bit values in host byte order. > Then this is because it outputs a 32-bit little endian values. > > But, given the same input, it will not work on a big endian host. > This is because the same little endian output will be produced, > while the host byte order is big endian. > > I think you need something based on be32_to_cpu()/cpu_to_be32(). > This will effectively be swab32 on little endian hosts (no change!). > And a no-op on big endian hosts (addressing my point above). > > More specifically, I think you should use be32_to_cpu_array() and > cpu_to_be32_array() instead of swab32_array(). Thanks. We'll take your suggestion.