Re: [PATCH] PCI: switchtec: Include PCI100X devices support

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

 



On Tue, Jan 21, 2025 at 01:16:05PM +0000, Saladi.Rakeshbabu@xxxxxxxxxxxxx wrote:
> On Mon, 2025-01-20 at 16:56 -0600, Bjorn Helgaas wrote:
> > [Some people who received this message don't often get email from
> > helgaas@xxxxxxxxxx. Learn why this is important at
> > https://aka.ms/LearnAboutSenderIdentification ;]
> > 
> > EXTERNAL EMAIL: Do not click links or open attachments unless you
> > know the content is safe
> > 
> > On Mon, Jan 20, 2025 at 03:25:24PM +0530, Rakesh Babu Saladi wrote:
> > > Add the Microchip Parts to the existing device ID
> > > table so that the driver supports PCI100x devices too.
> > > 
> > > Add a new macro to quirk the Microchip switchtec PCI100x parts
> > > to allow DMA access via NTB to work when the IOMMU is turned on.
> > > 
> > > PCI100x family has 6 variants, each variant is designed for
> > > different
> > > application usages, different port counts and lane counts.
> > > 
> > > PCI1001 has 1 x4 upstream port and 3 x4 downstream ports.
> > > PCI1002 has 1 x4 upstream port and 4 x2 downstream ports.
> > > PCI1003 has 2 x4 upstream ports, 2 x2 upstream ports and 2 x2
> > > downstream ports.
> > > PCI1004 has 4 x4 upstream ports.
> > > PCI1005 has 1 x4 upstream port and 6 x2 downstream ports.
> > > PCI1006 has 6 x2 upstream ports and 2 x2 downstream ports.
> > > 
> > > Signed-off-by: Rakesh Babu Saladi <Saladi.Rakeshbabu@xxxxxxxxxxxxx>
> > > ---
> > >  drivers/pci/quirks.c           | 11 +++++++++++
> > >  drivers/pci/switch/switchtec.c | 26 ++++++++++++++++++++++++++
> > >  2 files changed, 37 insertions(+)
> > > 
> > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> > > index eeec1d6f9023..266ab5f8c6e1 100644
> > > --- a/drivers/pci/quirks.c
> > > +++ b/drivers/pci/quirks.c
> > > @@ -5906,6 +5906,17 @@ SWITCHTEC_QUIRK(0x5552);  /* PAXA 52XG5 */
> > >  SWITCHTEC_QUIRK(0x5536);  /* PAXA 36XG5 */
> > >  SWITCHTEC_QUIRK(0x5528);  /* PAXA 28XG5 */
> > > 
> > > +#define SWITCHTEC_PCI100X_QUIRK(vid) \
> > > +     DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_EFAR, vid, \
> > > +             PCI_CLASS_BRIDGE_OTHER, 8,
> > > quirk_switchtec_ntb_dma_alias)
> > > +SWITCHTEC_PCI100X_QUIRK(0x1001);  /* PCI1001XG4 */
> > > +SWITCHTEC_PCI100X_QUIRK(0x1002);  /* PCI1002XG4 */
> > > +SWITCHTEC_PCI100X_QUIRK(0x1003);  /* PCI1003XG4 */
> > > +SWITCHTEC_PCI100X_QUIRK(0x1004);  /* PCI1004XG4 */
> > > +SWITCHTEC_PCI100X_QUIRK(0x1005);  /* PCI1005XG4 */
> > > +SWITCHTEC_PCI100X_QUIRK(0x1006);  /* PCI1006XG4 */
> > > +
> > > +
> > >  /*
> > >   * The PLX NTB uses devfn proxy IDs to move TLPs between NT
> > > endpoints.
> > >   * These IDs are used to forward responses to the originator on
> > > the other
> > > diff --git a/drivers/pci/switch/switchtec.c
> > > b/drivers/pci/switch/switchtec.c
> > > index 5b921387eca6..faaca76407c8 100644
> > > --- a/drivers/pci/switch/switchtec.c
> > > +++ b/drivers/pci/switch/switchtec.c
> > > @@ -1726,6 +1726,26 @@ static void switchtec_pci_remove(struct
> > > pci_dev *pdev)
> > >               .driver_data = gen, \
> > >       }
> > > 
> > > +#define SWITCHTEC_PCI100X_DEVICE(device_id, gen) \
> > > +     { \
> > > +             .vendor     = PCI_VENDOR_ID_EFAR, \
> > > +             .device     = device_id, \
> > > +             .subvendor  = PCI_ANY_ID, \
> > > +             .subdevice  = PCI_ANY_ID, \
> > > +             .class      = (PCI_CLASS_MEMORY_OTHER << 8), \
> > > +             .class_mask = 0xFFFFFFFF, \
> > > +             .driver_data = gen, \
> > > +     }, \
> > > +     { \
> > > +             .vendor     = PCI_VENDOR_ID_EFAR, \
> > > +             .device     = device_id, \
> > > +             .subvendor  = PCI_ANY_ID, \
> > > +             .subdevice  = PCI_ANY_ID, \
> > > +             .class      = (PCI_CLASS_BRIDGE_OTHER << 8), \
> > > +             .class_mask = 0xFFFFFFFF, \
> > > +             .driver_data = gen, \
> > 
> > We have this:
> > 
> >   #define PCI_VENDOR_ID_EFAR              0x1055
> > 
> > but searching the PCI-SIG Vendor ID database for 0x1055 doesn't find
> > anything:
> > 
> >   https://pcisig.com/membership/member-companies
> > 
> > You mention "Microchip", and it looks like Microchip is assigned
> > Vendor ID 0x11f8:
> > 
> >   https://pcisig.com/membership/member-companies?combine=microchip
> > 
> > which we also have defined:
> > 
> >   #define PCI_VENDOR_ID_PMC_Sierra        0x11f8
> >   #define PCI_VENDOR_ID_MICROSEMI         0x11f8
> > 
> > Can you clarify what's going on here?  I assume these parts actually
> > do have Vendor ID 0x1055.  But the PCI-SIG really should know about
> > the usage of this ID.  There's an email contact address on that web
> > page; can you straighten this out?
> 
> PMC, Microsemi are now part of Microchip. The switchtec products are
> from Microsemi and so the vendor ID is 0x11f8. EFAR is also part of
> Microchip. For PCI100x product parts we intended to use the VID 0x1055
> which is of EFAR's VID. PMC, Microsemi and EFAR product parts all are
> now part of Microchip.
> 
> The reason why EFAR VID (0x1055) is not listed in the website is
> becuase the site can list only one VID per company.
> 
> For further information, please refer to Steen's reply of
> https://lore.kernel.org/linux-pci/f695618054232c5f43c2148c5e6551f3ab318792.camel@xxxxxxxxxxxxx/to
> https://lore.kernel.org/linux-pci/20240621184923.GA1398370@bhelgaas/

Thanks.  What an annoyance that the PCI-SIG can't expose Vendor IDs
that are allocated but no longer correspond to the original vendor.
I'll complain to the SIG again.

Bjorn




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux