Files
linux/include/linux
Lukas Wunner fbaa38214c cxl/pci: Fix CDAT retrieval on big endian
The CDAT exposed in sysfs differs between little endian and big endian
arches:  On big endian, every 4 bytes are byte-swapped.

PCI Configuration Space is little endian (PCI r3.0 sec 6.1).  Accessors
such as pci_read_config_dword() implicitly swap bytes on big endian.
That way, the macros in include/uapi/linux/pci_regs.h work regardless of
the arch's endianness.  For an example of implicit byte-swapping, see
ppc4xx_pciex_read_config(), which calls in_le32(), which uses lwbrx
(Load Word Byte-Reverse Indexed).

DOE Read/Write Data Mailbox Registers are unlike other registers in
Configuration Space in that they contain or receive a 4 byte portion of
an opaque byte stream (a "Data Object" per PCIe r6.0 sec 7.9.24.5f).
They need to be copied to or from the request/response buffer verbatim.
So amend pci_doe_send_req() and pci_doe_recv_resp() to undo the implicit
byte-swapping.

The CXL_DOE_TABLE_ACCESS_* and PCI_DOE_DATA_OBJECT_DISC_* macros assume
implicit byte-swapping.  Byte-swap requests after constructing them with
those macros and byte-swap responses before parsing them.

Change the request and response type to __le32 to avoid sparse warnings.
Per a request from Jonathan, replace sizeof(u32) with sizeof(__le32) for
consistency.

Fixes: c97006046c ("cxl/port: Read CDAT table")
Tested-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Cc: stable@vger.kernel.org # v6.0+
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/3051114102f41d19df3debbee123129118fc5e6d.1678543498.git.lukas@wunner.de
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2023-03-21 12:27:08 -07:00
..
2023-01-16 09:26:05 +01:00
2022-11-04 12:59:25 +02:00
2023-02-16 13:42:22 +01:00
2023-02-20 09:20:55 -05:00
2022-07-05 20:25:39 +02:00
2023-02-15 19:38:50 +01:00
2023-01-19 14:46:25 +01:00
2022-09-26 12:19:12 -07:00
2022-12-07 09:43:12 -07:00
2023-02-03 08:20:55 -07:00
2022-09-26 19:46:29 -07:00
2022-09-26 10:13:13 -07:00
2022-09-26 10:13:13 -07:00
2022-09-15 09:32:06 -07:00
2023-01-13 11:48:15 +01:00
2023-03-05 10:49:37 -08:00
2023-01-19 16:07:40 +01:00
2022-06-28 10:37:25 -03:00
2023-01-29 15:18:33 -07:00
2023-01-29 15:18:33 -07:00
2023-02-06 19:06:58 +01:00
2023-01-19 09:24:28 +01:00
2023-03-13 10:14:05 +01:00
2023-01-11 06:52:43 -05:00
2023-02-02 22:33:13 -08:00
2023-03-07 01:50:53 -05:00
2022-06-09 21:53:09 -07:00
2022-06-09 21:53:12 -07:00
2022-11-11 18:18:05 -08:00
2022-09-01 18:04:43 +02:00
2022-06-27 06:29:12 -06:00
2022-09-08 12:59:00 -06:00
2022-09-26 13:31:20 +02:00
2022-11-15 00:42:02 -08:00
2022-12-11 19:30:20 -08:00
2022-09-01 18:08:44 +02:00
2023-02-13 10:11:20 +02:00
2022-07-17 17:31:38 -07:00
2022-10-03 14:03:19 -07:00
2023-01-19 09:24:28 +01:00
2023-01-19 09:24:28 +01:00
2022-06-19 10:38:26 +01:00
2022-07-27 14:04:52 +02:00
2023-01-19 09:24:30 +01:00
2022-08-02 12:34:04 -04:00
2023-03-15 14:58:52 +01:00
2022-10-03 17:34:32 -07:00
2022-09-26 19:46:27 -07:00
2023-02-02 22:33:34 -08:00
2023-01-16 09:26:06 +01:00
2023-02-23 13:43:23 +01:00
2023-01-04 14:44:13 -07:00
2023-01-19 09:24:28 +01:00
2022-12-20 03:13:45 +01:00
2022-10-23 18:06:54 -04:00
2023-01-19 09:24:28 +01:00
2023-01-19 15:01:19 +01:00
2023-01-03 17:49:22 -08:00
2023-01-18 17:12:47 -08:00
2022-09-07 12:42:25 +01:00
2023-02-16 18:10:18 +01:00
2022-09-29 15:20:29 +02:00
2022-09-22 16:12:34 +02:00
2022-08-28 16:52:28 +01:00
2023-01-23 15:38:08 +01:00
2023-02-20 19:26:58 -05:00
2022-09-26 19:46:18 -07:00
2023-01-19 09:24:28 +01:00
2022-10-24 12:12:32 -07:00