Skip to content

Commit 0fb53e6

Browse files
kelvin-caobjorn-helgaas
authored andcommitted
PCI: switchtec: Add support for PCIe Gen5 devices
Advertise support of Gen5 devices in the driver's device ID table and add the same IDs for the switchtec quirks. Also update driver code to accommodate them. Link: https://lore.kernel.org/r/20230624000003.2315364-3-kelvin.cao@microchip.com Signed-off-by: Kelvin Cao <kelvin.cao@microchip.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
1 parent 846691f commit 0fb53e6

File tree

3 files changed

+77
-4
lines changed

3 files changed

+77
-4
lines changed

drivers/pci/quirks.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5867,6 +5867,42 @@ SWITCHTEC_QUIRK(0x4428); /* PSXA 28XG4 */
58675867
SWITCHTEC_QUIRK(0x4552); /* PAXA 52XG4 */
58685868
SWITCHTEC_QUIRK(0x4536); /* PAXA 36XG4 */
58695869
SWITCHTEC_QUIRK(0x4528); /* PAXA 28XG4 */
5870+
SWITCHTEC_QUIRK(0x5000); /* PFX 100XG5 */
5871+
SWITCHTEC_QUIRK(0x5084); /* PFX 84XG5 */
5872+
SWITCHTEC_QUIRK(0x5068); /* PFX 68XG5 */
5873+
SWITCHTEC_QUIRK(0x5052); /* PFX 52XG5 */
5874+
SWITCHTEC_QUIRK(0x5036); /* PFX 36XG5 */
5875+
SWITCHTEC_QUIRK(0x5028); /* PFX 28XG5 */
5876+
SWITCHTEC_QUIRK(0x5100); /* PSX 100XG5 */
5877+
SWITCHTEC_QUIRK(0x5184); /* PSX 84XG5 */
5878+
SWITCHTEC_QUIRK(0x5168); /* PSX 68XG5 */
5879+
SWITCHTEC_QUIRK(0x5152); /* PSX 52XG5 */
5880+
SWITCHTEC_QUIRK(0x5136); /* PSX 36XG5 */
5881+
SWITCHTEC_QUIRK(0x5128); /* PSX 28XG5 */
5882+
SWITCHTEC_QUIRK(0x5200); /* PAX 100XG5 */
5883+
SWITCHTEC_QUIRK(0x5284); /* PAX 84XG5 */
5884+
SWITCHTEC_QUIRK(0x5268); /* PAX 68XG5 */
5885+
SWITCHTEC_QUIRK(0x5252); /* PAX 52XG5 */
5886+
SWITCHTEC_QUIRK(0x5236); /* PAX 36XG5 */
5887+
SWITCHTEC_QUIRK(0x5228); /* PAX 28XG5 */
5888+
SWITCHTEC_QUIRK(0x5300); /* PFXA 100XG5 */
5889+
SWITCHTEC_QUIRK(0x5384); /* PFXA 84XG5 */
5890+
SWITCHTEC_QUIRK(0x5368); /* PFXA 68XG5 */
5891+
SWITCHTEC_QUIRK(0x5352); /* PFXA 52XG5 */
5892+
SWITCHTEC_QUIRK(0x5336); /* PFXA 36XG5 */
5893+
SWITCHTEC_QUIRK(0x5328); /* PFXA 28XG5 */
5894+
SWITCHTEC_QUIRK(0x5400); /* PSXA 100XG5 */
5895+
SWITCHTEC_QUIRK(0x5484); /* PSXA 84XG5 */
5896+
SWITCHTEC_QUIRK(0x5468); /* PSXA 68XG5 */
5897+
SWITCHTEC_QUIRK(0x5452); /* PSXA 52XG5 */
5898+
SWITCHTEC_QUIRK(0x5436); /* PSXA 36XG5 */
5899+
SWITCHTEC_QUIRK(0x5428); /* PSXA 28XG5 */
5900+
SWITCHTEC_QUIRK(0x5500); /* PAXA 100XG5 */
5901+
SWITCHTEC_QUIRK(0x5584); /* PAXA 84XG5 */
5902+
SWITCHTEC_QUIRK(0x5568); /* PAXA 68XG5 */
5903+
SWITCHTEC_QUIRK(0x5552); /* PAXA 52XG5 */
5904+
SWITCHTEC_QUIRK(0x5536); /* PAXA 36XG5 */
5905+
SWITCHTEC_QUIRK(0x5528); /* PAXA 28XG5 */
58705906

58715907
/*
58725908
* The PLX NTB uses devfn proxy IDs to move TLPs between NT endpoints.

drivers/pci/switch/switchtec.c

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ static ssize_t field ## _show(struct device *dev, \
372372
if (stdev->gen == SWITCHTEC_GEN3) \
373373
return io_string_show(buf, &si->gen3.field, \
374374
sizeof(si->gen3.field)); \
375-
else if (stdev->gen == SWITCHTEC_GEN4) \
375+
else if (stdev->gen >= SWITCHTEC_GEN4) \
376376
return io_string_show(buf, &si->gen4.field, \
377377
sizeof(si->gen4.field)); \
378378
else \
@@ -663,7 +663,7 @@ static int ioctl_flash_info(struct switchtec_dev *stdev,
663663
if (stdev->gen == SWITCHTEC_GEN3) {
664664
info.flash_length = ioread32(&fi->gen3.flash_length);
665665
info.num_partitions = SWITCHTEC_NUM_PARTITIONS_GEN3;
666-
} else if (stdev->gen == SWITCHTEC_GEN4) {
666+
} else if (stdev->gen >= SWITCHTEC_GEN4) {
667667
info.flash_length = ioread32(&fi->gen4.flash_length);
668668
info.num_partitions = SWITCHTEC_NUM_PARTITIONS_GEN4;
669669
} else {
@@ -870,7 +870,7 @@ static int ioctl_flash_part_info(struct switchtec_dev *stdev,
870870
ret = flash_part_info_gen3(stdev, &info);
871871
if (ret)
872872
return ret;
873-
} else if (stdev->gen == SWITCHTEC_GEN4) {
873+
} else if (stdev->gen >= SWITCHTEC_GEN4) {
874874
ret = flash_part_info_gen4(stdev, &info);
875875
if (ret)
876876
return ret;
@@ -1610,7 +1610,7 @@ static int switchtec_init_pci(struct switchtec_dev *stdev,
16101610

16111611
if (stdev->gen == SWITCHTEC_GEN3)
16121612
part_id = &stdev->mmio_sys_info->gen3.partition_id;
1613-
else if (stdev->gen == SWITCHTEC_GEN4)
1613+
else if (stdev->gen >= SWITCHTEC_GEN4)
16141614
part_id = &stdev->mmio_sys_info->gen4.partition_id;
16151615
else
16161616
return -EOPNOTSUPP;
@@ -1784,6 +1784,42 @@ static const struct pci_device_id switchtec_pci_tbl[] = {
17841784
SWITCHTEC_PCI_DEVICE(0x4552, SWITCHTEC_GEN4), /* PAXA 52XG4 */
17851785
SWITCHTEC_PCI_DEVICE(0x4536, SWITCHTEC_GEN4), /* PAXA 36XG4 */
17861786
SWITCHTEC_PCI_DEVICE(0x4528, SWITCHTEC_GEN4), /* PAXA 28XG4 */
1787+
SWITCHTEC_PCI_DEVICE(0x5000, SWITCHTEC_GEN5), /* PFX 100XG5 */
1788+
SWITCHTEC_PCI_DEVICE(0x5084, SWITCHTEC_GEN5), /* PFX 84XG5 */
1789+
SWITCHTEC_PCI_DEVICE(0x5068, SWITCHTEC_GEN5), /* PFX 68XG5 */
1790+
SWITCHTEC_PCI_DEVICE(0x5052, SWITCHTEC_GEN5), /* PFX 52XG5 */
1791+
SWITCHTEC_PCI_DEVICE(0x5036, SWITCHTEC_GEN5), /* PFX 36XG5 */
1792+
SWITCHTEC_PCI_DEVICE(0x5028, SWITCHTEC_GEN5), /* PFX 28XG5 */
1793+
SWITCHTEC_PCI_DEVICE(0x5100, SWITCHTEC_GEN5), /* PSX 100XG5 */
1794+
SWITCHTEC_PCI_DEVICE(0x5184, SWITCHTEC_GEN5), /* PSX 84XG5 */
1795+
SWITCHTEC_PCI_DEVICE(0x5168, SWITCHTEC_GEN5), /* PSX 68XG5 */
1796+
SWITCHTEC_PCI_DEVICE(0x5152, SWITCHTEC_GEN5), /* PSX 52XG5 */
1797+
SWITCHTEC_PCI_DEVICE(0x5136, SWITCHTEC_GEN5), /* PSX 36XG5 */
1798+
SWITCHTEC_PCI_DEVICE(0x5128, SWITCHTEC_GEN5), /* PSX 28XG5 */
1799+
SWITCHTEC_PCI_DEVICE(0x5200, SWITCHTEC_GEN5), /* PAX 100XG5 */
1800+
SWITCHTEC_PCI_DEVICE(0x5284, SWITCHTEC_GEN5), /* PAX 84XG5 */
1801+
SWITCHTEC_PCI_DEVICE(0x5268, SWITCHTEC_GEN5), /* PAX 68XG5 */
1802+
SWITCHTEC_PCI_DEVICE(0x5252, SWITCHTEC_GEN5), /* PAX 52XG5 */
1803+
SWITCHTEC_PCI_DEVICE(0x5236, SWITCHTEC_GEN5), /* PAX 36XG5 */
1804+
SWITCHTEC_PCI_DEVICE(0x5228, SWITCHTEC_GEN5), /* PAX 28XG5 */
1805+
SWITCHTEC_PCI_DEVICE(0x5300, SWITCHTEC_GEN5), /* PFXA 100XG5 */
1806+
SWITCHTEC_PCI_DEVICE(0x5384, SWITCHTEC_GEN5), /* PFXA 84XG5 */
1807+
SWITCHTEC_PCI_DEVICE(0x5368, SWITCHTEC_GEN5), /* PFXA 68XG5 */
1808+
SWITCHTEC_PCI_DEVICE(0x5352, SWITCHTEC_GEN5), /* PFXA 52XG5 */
1809+
SWITCHTEC_PCI_DEVICE(0x5336, SWITCHTEC_GEN5), /* PFXA 36XG5 */
1810+
SWITCHTEC_PCI_DEVICE(0x5328, SWITCHTEC_GEN5), /* PFXA 28XG5 */
1811+
SWITCHTEC_PCI_DEVICE(0x5400, SWITCHTEC_GEN5), /* PSXA 100XG5 */
1812+
SWITCHTEC_PCI_DEVICE(0x5484, SWITCHTEC_GEN5), /* PSXA 84XG5 */
1813+
SWITCHTEC_PCI_DEVICE(0x5468, SWITCHTEC_GEN5), /* PSXA 68XG5 */
1814+
SWITCHTEC_PCI_DEVICE(0x5452, SWITCHTEC_GEN5), /* PSXA 52XG5 */
1815+
SWITCHTEC_PCI_DEVICE(0x5436, SWITCHTEC_GEN5), /* PSXA 36XG5 */
1816+
SWITCHTEC_PCI_DEVICE(0x5428, SWITCHTEC_GEN5), /* PSXA 28XG5 */
1817+
SWITCHTEC_PCI_DEVICE(0x5500, SWITCHTEC_GEN5), /* PAXA 100XG5 */
1818+
SWITCHTEC_PCI_DEVICE(0x5584, SWITCHTEC_GEN5), /* PAXA 84XG5 */
1819+
SWITCHTEC_PCI_DEVICE(0x5568, SWITCHTEC_GEN5), /* PAXA 68XG5 */
1820+
SWITCHTEC_PCI_DEVICE(0x5552, SWITCHTEC_GEN5), /* PAXA 52XG5 */
1821+
SWITCHTEC_PCI_DEVICE(0x5536, SWITCHTEC_GEN5), /* PAXA 36XG5 */
1822+
SWITCHTEC_PCI_DEVICE(0x5528, SWITCHTEC_GEN5), /* PAXA 28XG5 */
17871823
{0}
17881824
};
17891825
MODULE_DEVICE_TABLE(pci, switchtec_pci_tbl);

include/linux/switchtec.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ enum {
4141
enum switchtec_gen {
4242
SWITCHTEC_GEN3,
4343
SWITCHTEC_GEN4,
44+
SWITCHTEC_GEN5,
4445
};
4546

4647
struct mrpc_regs {

0 commit comments

Comments
 (0)