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 >