]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[sfc] Add support for X25xx adapters
authorMartin Habets <mhabets@solarflare.com>
Mon, 18 Jun 2018 10:41:38 +0000 (11:41 +0100)
committerMichael Brown <mcb30@ipxe.org>
Sun, 26 Aug 2018 21:02:23 +0000 (22:02 +0100)
The first adapters in this family are X2522-10, X2522-25, X2541 and
X2542.

These no longer use PCI BAR 0 for I/O, but use that for memory.  In
other words, BAR 2 on SFN8xxx adapters now becomes BAR 0.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/sfc/efx_common.c
src/drivers/net/sfc/sfc_hunt.c

index 79a994355d02b6524db7ce60ab99348796d26b24..40388770789aa014e1b256c7c0136a88814f43ad 100644 (file)
@@ -72,13 +72,19 @@ void efx_probe(struct net_device *netdev, enum efx_revision revision)
        struct efx_nic *efx = netdev_priv(netdev);
        struct pci_device *pci = container_of(netdev->dev,
                                              struct pci_device, dev);
+       unsigned int reg = PCI_BASE_ADDRESS_0;
+       uint32_t bar_low;
 
        efx->netdev = netdev;
        efx->revision = revision;
 
-       /* MMIO bar */
-       efx->mmio_start = pci_bar_start(pci, PCI_BASE_ADDRESS_2);
-       efx->mmio_len = pci_bar_size(pci, PCI_BASE_ADDRESS_2);
+       /* Find the memory bar to use */
+       pci_read_config_dword(pci, reg, &bar_low);
+       if ((bar_low & PCI_BASE_ADDRESS_IO_MASK) == PCI_BASE_ADDRESS_SPACE_IO)
+               reg = PCI_BASE_ADDRESS_2;
+
+       efx->mmio_start = pci_bar_start(pci, reg);
+       efx->mmio_len = pci_bar_size(pci, reg);
        efx->membase = ioremap(efx->mmio_start, efx->mmio_len);
 
        DBGCP(efx, "BAR of %lx bytes at phys %lx mapped at %p\n",
index 25780ffd8e3a0b037e61adb79da4a2234081f391..dd5f7043f1ce4c32cbfcc2bfe58037dd6ccfaf16 100644 (file)
@@ -142,6 +142,7 @@ static void hunt_mcdi_copyin(struct hunt_nic *hunt,
        hdr_len = sizeof(hdr);
 
        memcpy(pdu, &hdr, hdr_len);
+       assert(inlen <= MCDI_CTL_SDU_LEN_MAX_V2);
        memcpy(pdu + hdr_len, inbuf, inlen);
 
        wmb();  /* Sync the data before ringing the doorbell */
@@ -1314,6 +1315,7 @@ const struct efx_nic_type hunt_nic_type = {
 
 static struct pci_device_id hunt_nics[] = {
        PCI_ROM(0x1924, 0x0a03, "SFC9220", "Solarflare SFN8xxx Adapter", 0),
+       PCI_ROM(0x1924, 0x0b03, "SFC9250", "Solarflare X25xx Adapter", 0),
 };
 
 struct pci_driver hunt_driver __pci_driver = {