RE: [EXT] [RESEND][PATCH] EINJ, CXL: Fix CXL device SBDF calculation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Micron Confidential



Micron Confidential
>-----Original Message-----
>From: Ben Cheatham <Benjamin.Cheatham@xxxxxxx>
>Sent: Friday, September 27, 2024 10:04 PM
>To: rafael@xxxxxxxxxx; lenb@xxxxxxxxxx; james.morse@xxxxxxx;
>tony.luck@xxxxxxxxx; bp@xxxxxxxxx
>Cc: linux-acpi@xxxxxxxxxxxxxxx; linux-cxl@xxxxxxxxxxxxxxx;
>dan.j.williams@xxxxxxxxx; jonathan.cameron@xxxxxxxxxx; Srinivasulu Thanneeru
><sthanneeru@xxxxxxxxxx>; Ben Cheatham <Benjamin.Cheatham@xxxxxxx>
>Subject: [EXT] [RESEND][PATCH] EINJ, CXL: Fix CXL device SBDF calculation
>
>CAUTION: EXTERNAL EMAIL. Do not click links or open attachments unless you
>recognize the sender and were expecting this message.
>
>
>The SBDF of the target CXL 2.0 compliant root port is required to inject a CXL
>protocol error as per ACPI 6.5. The SBDF given has to be in the
>following format:
>
>31     24 23    16 15    11 10      8  7        0
>+-------------------------------------------------+
>| segment |   bus  | device | function | reserved |
>+-------------------------------------------------+
>
>The SBDF calculated in cxl_dport_get_sbdf() doesn't account for
>the reserved bits currently, causing the wrong SBDF to be used.
>Fix said calculation to properly shift the SBDF.
>
>Without this fix, error injection into CXL 2.0 root ports through the
>CXL debugfs interface (<debugfs>/cxl) is broken. Injection
>through the legacy interface (<debugfs>/apei/einj/) will still work
>because the SBDF is manually provided by the user.
>
>Fixes: 12fb28ea6b1cf ("EINJ: Add CXL error type support")
>Signed-off-by: Ben Cheatham <Benjamin.Cheatham@xxxxxxx>

Tried this patch, working fine.

Tested-by: Srinivasulu Thanneeru <sthanneeru.opensrc@xxxxxxxxxx>
Reviewed-by: Srinivasulu Thanneeru <sthanneeru.opensrc@xxxxxxxxxx>

>---
>
>Resent to add linux-cxl list and Srinivasulu to CC
>
>---
> drivers/acpi/apei/einj-cxl.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/drivers/acpi/apei/einj-cxl.c b/drivers/acpi/apei/einj-cxl.c
>index 8b8be0c90709..d64e2713aae4 100644
>--- a/drivers/acpi/apei/einj-cxl.c
>+++ b/drivers/acpi/apei/einj-cxl.c
>@@ -63,7 +63,7 @@ static int cxl_dport_get_sbdf(struct pci_dev *dport_dev, u64
>*sbdf)
>                seg = bridge->domain_nr;
>
>        bus = pbus->number;
>-       *sbdf = (seg << 24) | (bus << 16) | dport_dev->devfn;
>+       *sbdf = (seg << 24) | (bus << 16) | (dport_dev->devfn << 8);
>
>        return 0;
> }
>--
>2.34.1
>






[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux