Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Kelvin Cao and committed by
Bjorn Helgaas
0fb53e64 846691f5

+77 -4
+36
drivers/pci/quirks.c
··· 5867 5867 SWITCHTEC_QUIRK(0x4552); /* PAXA 52XG4 */ 5868 5868 SWITCHTEC_QUIRK(0x4536); /* PAXA 36XG4 */ 5869 5869 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 */ 5870 5906 5871 5907 /* 5872 5908 * The PLX NTB uses devfn proxy IDs to move TLPs between NT endpoints.
+40 -4
drivers/pci/switch/switchtec.c
··· 372 372 if (stdev->gen == SWITCHTEC_GEN3) \ 373 373 return io_string_show(buf, &si->gen3.field, \ 374 374 sizeof(si->gen3.field)); \ 375 - else if (stdev->gen == SWITCHTEC_GEN4) \ 375 + else if (stdev->gen >= SWITCHTEC_GEN4) \ 376 376 return io_string_show(buf, &si->gen4.field, \ 377 377 sizeof(si->gen4.field)); \ 378 378 else \ ··· 663 663 if (stdev->gen == SWITCHTEC_GEN3) { 664 664 info.flash_length = ioread32(&fi->gen3.flash_length); 665 665 info.num_partitions = SWITCHTEC_NUM_PARTITIONS_GEN3; 666 - } else if (stdev->gen == SWITCHTEC_GEN4) { 666 + } else if (stdev->gen >= SWITCHTEC_GEN4) { 667 667 info.flash_length = ioread32(&fi->gen4.flash_length); 668 668 info.num_partitions = SWITCHTEC_NUM_PARTITIONS_GEN4; 669 669 } else { ··· 870 870 ret = flash_part_info_gen3(stdev, &info); 871 871 if (ret) 872 872 return ret; 873 - } else if (stdev->gen == SWITCHTEC_GEN4) { 873 + } else if (stdev->gen >= SWITCHTEC_GEN4) { 874 874 ret = flash_part_info_gen4(stdev, &info); 875 875 if (ret) 876 876 return ret; ··· 1610 1610 1611 1611 if (stdev->gen == SWITCHTEC_GEN3) 1612 1612 part_id = &stdev->mmio_sys_info->gen3.partition_id; 1613 - else if (stdev->gen == SWITCHTEC_GEN4) 1613 + else if (stdev->gen >= SWITCHTEC_GEN4) 1614 1614 part_id = &stdev->mmio_sys_info->gen4.partition_id; 1615 1615 else 1616 1616 return -EOPNOTSUPP; ··· 1784 1784 SWITCHTEC_PCI_DEVICE(0x4552, SWITCHTEC_GEN4), /* PAXA 52XG4 */ 1785 1785 SWITCHTEC_PCI_DEVICE(0x4536, SWITCHTEC_GEN4), /* PAXA 36XG4 */ 1786 1786 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 */ 1787 1823 {0} 1788 1824 }; 1789 1825 MODULE_DEVICE_TABLE(pci, switchtec_pci_tbl);
+1
include/linux/switchtec.h
··· 41 41 enum switchtec_gen { 42 42 SWITCHTEC_GEN3, 43 43 SWITCHTEC_GEN4, 44 + SWITCHTEC_GEN5, 44 45 }; 45 46 46 47 struct mrpc_regs {