]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[intelxl] Read MAC address from PRTPM_SA[HL] instead of PRTGL_SA[HL]
authorMichael Brown <mcb30@ipxe.org>
Fri, 20 Nov 2020 19:12:24 +0000 (19:12 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 20 Nov 2020 19:15:30 +0000 (19:15 +0000)
The datasheet is fairly incomprehensible in terms of identifying the
appropriate MAC address for use by the physical function driver.
Choose to read the MAC address from PRTPM_SAH and PRTPM_SAL, which at
least matches the MAC address as selected by the Linux i40e driver.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/intelxl.c
src/drivers/net/intelxl.h

index d16b759e74172f3b8805465def68905a4f3a5abe..fda8effbd0dff4490338da2a65d41b2f976783fe 100644 (file)
@@ -87,15 +87,16 @@ static int intelxl_reset ( struct intelxl_nic *intelxl ) {
 static int intelxl_fetch_mac ( struct intelxl_nic *intelxl,
                               struct net_device *netdev ) {
        union intelxl_receive_address mac;
-       uint32_t prtgl_sal;
+       uint32_t prtpm_sal;
+       uint32_t prtpm_sah;
        uint32_t prtgl_sah;
        size_t mfs;
 
        /* Read NVM-loaded address */
-       prtgl_sal = readl ( intelxl->regs + INTELXL_PRTGL_SAL );
-       prtgl_sah = readl ( intelxl->regs + INTELXL_PRTGL_SAH );
-       mac.reg.low = cpu_to_le32 ( prtgl_sal );
-       mac.reg.high = cpu_to_le32 ( prtgl_sah );
+       prtpm_sal = readl ( intelxl->regs + INTELXL_PRTPM_SAL );
+       prtpm_sah = readl ( intelxl->regs + INTELXL_PRTPM_SAH );
+       mac.reg.low = cpu_to_le32 ( prtpm_sal );
+       mac.reg.high = cpu_to_le32 ( prtpm_sah );
 
        /* Check that address is valid */
        if ( ! is_valid_ether_addr ( mac.raw ) ) {
@@ -110,6 +111,7 @@ static int intelxl_fetch_mac ( struct intelxl_nic *intelxl,
        memcpy ( netdev->hw_addr, mac.raw, ETH_ALEN );
 
        /* Get maximum frame size */
+       prtgl_sah = readl ( intelxl->regs + INTELXL_PRTGL_SAH );
        mfs = INTELXL_PRTGL_SAH_MFS_GET ( prtgl_sah );
        netdev->max_pkt_len = ( mfs - 4 /* CRC */ );
 
index 80586cef05f576033d49b7ba9a5df1def348fc96..2d33ed8e9d6cac2c9f41473ddf08d2e439f93342 100644 (file)
@@ -1005,6 +1005,12 @@ intelxl_init_ring ( struct intelxl_ring *ring, unsigned int count, size_t len,
 #define INTELXL_PRTGL_SAH_MFS_GET(x)   ( (x) >> 16 )   /**< Max frame size */
 #define INTELXL_PRTGL_SAH_MFS_SET(x)   ( (x) << 16 )   /**< Max frame size */
 
+/** Physical Function MAC Address Low Register */
+#define INTELXL_PRTPM_SAL 0x1e4440
+
+/** Physical Function MAC Address High Register */
+#define INTELXL_PRTPM_SAH 0x1e44c0
+
 /** Receive address */
 union intelxl_receive_address {
        struct {