msk(4): Add Yukon Extreme support
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 1 Aug 2011 11:45:56 +0000 (19:45 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 1 Aug 2011 13:44:23 +0000 (21:44 +0800)
Obtained-from: FreeBSD 193293 193294 193298 193299

sys/dev/netif/msk/if_msk.c
sys/dev/netif/msk/if_mskreg.h

index c526a6b..3bdcac6 100644 (file)
@@ -180,8 +180,6 @@ static const struct msk_product {
            "Marvell Yukon 88E8040T Fast Ethernet" },
        { VENDORID_MARVELL, DEVICEID_MRVL_8048,
            "Marvell Yukon 88E8048 Fast Ethernet" },
-       { VENDORID_MARVELL, DEVICEID_MRVL_8070,
-           "Marvell Yukon 88E8070 Fast Ethernet" },
        { VENDORID_MARVELL, DEVICEID_MRVL_4361,
            "Marvell Yukon 88E8050 Gigabit Ethernet" },
        { VENDORID_MARVELL, DEVICEID_MRVL_4360,
@@ -192,8 +190,14 @@ static const struct msk_product {
            "Marvell Yukon 88E8055 Gigabit Ethernet" },
        { VENDORID_MARVELL, DEVICEID_MRVL_4364,
            "Marvell Yukon 88E8056 Gigabit Ethernet" },
+       { VENDORID_MARVELL, DEVICEID_MRVL_4365,
+           "Marvell Yukon 88E8070 Gigabit Ethernet" },
        { VENDORID_MARVELL, DEVICEID_MRVL_436A,
            "Marvell Yukon 88E8058 Gigabit Ethernet" },
+       { VENDORID_MARVELL, DEVICEID_MRVL_436B,
+           "Marvell Yukon 88E8071 Gigabit Ethernet" },
+       { VENDORID_MARVELL, DEVICEID_MRVL_436C,
+           "Marvell Yukon 88E8072 Gigabit Ethernet" },
        { VENDORID_DLINK, DEVICEID_DLINK_DGE550SX,
            "D-Link 550SX Gigabit Ethernet" },
        { VENDORID_DLINK, DEVICEID_DLINK_DGE560T,
@@ -204,7 +208,7 @@ static const struct msk_product {
 static const char *model_name[] = {
        "Yukon XL",
        "Yukon EC Ultra",
-       "Yukon Unknown",
+       "Yukon EX",
        "Yukon EC",
        "Yukon FE",
        "Yukon FE+"
@@ -279,6 +283,7 @@ static int  msk_phy_writereg(struct msk_if_softc *, int, int, int);
 
 static void    msk_rxfilter(struct msk_if_softc *);
 static void    msk_setvlan(struct msk_if_softc *, struct ifnet *);
+static void    msk_set_tx_stfwd(struct msk_if_softc *);
 
 static int     msk_dmamem_create(device_t, bus_size_t, bus_dma_tag_t *,
                                  void **, bus_addr_t *, bus_dmamap_t *);
@@ -1026,16 +1031,19 @@ mskc_phy_power(struct msk_softc *sc, int mode)
 
                val = pci_read_config(sc->msk_dev, PCI_OUR_REG_1, 4);
                val &= ~(PCI_Y2_PHY1_POWD | PCI_Y2_PHY2_POWD);
-               switch (sc->msk_hw_id) {
-               case CHIP_ID_YUKON_XL:
+               if (sc->msk_hw_id == CHIP_ID_YUKON_XL) {
                        if (sc->msk_hw_rev > CHIP_REV_YU_XL_A1) {
                                /* Deassert Low Power for 1st PHY. */
                                val |= PCI_Y2_PHY1_COMA;
                                if (sc->msk_num_port > 1)
                                        val |= PCI_Y2_PHY2_COMA;
                        }
-                       break;
+               }
+               /* Release PHY from PowerDown/COMA mode. */
+               pci_write_config(sc->msk_dev, PCI_OUR_REG_1, val, 4);
+               switch (sc->msk_hw_id) {
                case CHIP_ID_YUKON_EC_U:
+               case CHIP_ID_YUKON_EX:
                case CHIP_ID_YUKON_FE_P:
                        CSR_WRITE_2(sc, B0_CTST, Y2_HW_WOL_OFF);
 
@@ -1046,12 +1054,20 @@ mskc_phy_power(struct msk_softc *sc, int mode)
                            PCI_ASPM_INT_FIFO_EMPTY|PCI_ASPM_CLKRUN_REQUEST);
                        /* Set all bits to 0 except bits 15..12. */
                        pci_write_config(sc->msk_dev, PCI_OUR_REG_4, our, 4);
-                       /* Set to default value. */
-                       pci_write_config(sc->msk_dev, PCI_OUR_REG_5, 0, 4);
+                       our = pci_read_config(sc->msk_dev, PCI_OUR_REG_5, 4);
+                       our &= PCI_CTL_TIM_VMAIN_AV_MSK;
+                       pci_write_config(sc->msk_dev, PCI_OUR_REG_5, our, 4);
+                       pci_write_config(sc->msk_dev, PCI_CFG_REG_1, 0, 4);
+                       /*
+                        * Disable status race, workaround for
+                        * Yukon EC Ultra & Yukon EX.
+                        */
+                       val = CSR_READ_4(sc, B2_GP_IO);
+                       val |= GLB_GPIO_STAT_RACE_DIS;
+                       CSR_WRITE_4(sc, B2_GP_IO, val);
+                       CSR_READ_4(sc, B2_GP_IO);
                        break;
                }
-               /* Release PHY from PowerDown/COMA mode. */
-               pci_write_config(sc->msk_dev, PCI_OUR_REG_1, val, 4);
                for (i = 0; i < sc->msk_num_port; i++) {
                        CSR_WRITE_2(sc, MR_ADDR(i, GMAC_LINK_CTRL),
                            GMLC_RST_SET);
@@ -1102,10 +1118,19 @@ mskc_reset(struct msk_softc *sc)
        CSR_WRITE_2(sc, B0_CTST, CS_RST_CLR);
 
        /* Disable ASF. */
-       if (sc->msk_hw_id < CHIP_ID_YUKON_XL) {
-               CSR_WRITE_4(sc, B28_Y2_ASF_STAT_CMD, Y2_ASF_RESET);
-               CSR_WRITE_2(sc, B0_CTST, Y2_ASF_DISABLE);
+       if (sc->msk_hw_id == CHIP_ID_YUKON_EX) {
+               status = CSR_READ_2(sc, B28_Y2_ASF_HCU_CCSR);
+               /* Clear AHB bridge & microcontroller reset. */
+               status &= ~(Y2_ASF_HCU_CCSR_AHB_RST |
+                   Y2_ASF_HCU_CCSR_CPU_RST_MODE);
+               /* Clear ASF microcontroller state. */
+               status &= ~ Y2_ASF_HCU_CCSR_UC_STATE_MSK;
+               CSR_WRITE_2(sc, B28_Y2_ASF_HCU_CCSR, status);
+       } else {
+               CSR_WRITE_1(sc, B28_Y2_ASF_STAT_CMD, Y2_ASF_RESET);
        }
+       CSR_WRITE_2(sc, B0_CTST, Y2_ASF_DISABLE);
+
        /*
         * Since we disabled ASF, S/W reset is required for Power Management.
         */
@@ -1157,6 +1182,11 @@ mskc_reset(struct msk_softc *sc)
                CSR_WRITE_4(sc, MR_ADDR(i, GMAC_CTRL), GMC_RST_SET);
                CSR_WRITE_4(sc, MR_ADDR(i, GMAC_CTRL), GMC_RST_CLR);
                CSR_WRITE_4(sc, MR_ADDR(i, GMAC_CTRL), GMC_F_LOOPB_OFF);
+               if (sc->msk_hw_id == CHIP_ID_YUKON_EX) {
+                       CSR_WRITE_4(sc, MR_ADDR(i, GMAC_CTRL),
+                           GMC_BYP_MACSECRX_ON | GMC_BYP_MACSECTX_ON |
+                           GMC_BYP_RETR_ON);
+               }
        }
        CSR_WRITE_1(sc, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
 
@@ -1599,6 +1629,9 @@ mskc_attach(device_t dev)
        case CHIP_ID_YUKON_EC_U:
                sc->msk_clock = 125;    /* 125 Mhz */
                break;
+       case CHIP_ID_YUKON_EX:
+               sc->msk_clock = 125;    /* 125 Mhz */
+               break;
        case CHIP_ID_YUKON_FE:
                sc->msk_clock = 100;    /* 100 Mhz */
                sc->msk_pflags |= MSK_FLAG_FASTETHER;
@@ -3269,6 +3302,47 @@ mskc_intr(void *xsc)
 }
 
 static void
+msk_set_tx_stfwd(struct msk_if_softc *sc_if)
+{
+       struct msk_softc *sc = sc_if->msk_softc;
+       struct ifnet *ifp = sc_if->msk_ifp;
+
+       switch (sc->msk_hw_id) {
+       case CHIP_ID_YUKON_EX:
+               if (sc->msk_hw_rev == CHIP_REV_YU_EX_A0)
+                       goto yukon_ex_workaround;
+               if (ifp->if_mtu > ETHERMTU) {
+                       CSR_WRITE_4(sc,
+                           MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
+                           TX_JUMBO_ENA | TX_STFW_ENA);
+               } else {
+                       CSR_WRITE_4(sc,
+                           MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
+                           TX_JUMBO_DIS | TX_STFW_ENA);
+               }
+               break;
+       default:
+yukon_ex_workaround:
+               if (ifp->if_mtu > ETHERMTU) {
+                       /* Set Tx GMAC FIFO Almost Empty Threshold. */
+                       CSR_WRITE_4(sc,
+                           MR_ADDR(sc_if->msk_port, TX_GMF_AE_THR),
+                           MSK_ECU_JUMBO_WM << 16 | MSK_ECU_AE_THR);
+                       /* Disable Store & Forward mode for Tx. */
+                       CSR_WRITE_4(sc,
+                           MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
+                           TX_JUMBO_ENA | TX_STFW_DIS);
+               } else {
+                       /* Enable Store & Forward mode for Tx. */
+                       CSR_WRITE_4(sc,
+                           MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
+                           TX_JUMBO_DIS | TX_STFW_ENA);
+               }
+               break;
+       }
+}
+
+static void
 msk_init(void *xsc)
 {
        struct msk_if_softc *sc_if = xsc;
@@ -3303,6 +3377,11 @@ msk_init(void *xsc)
        CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), GMC_RST_SET);
        CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), GMC_RST_CLR);
        CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), GMC_F_LOOPB_OFF);
+       if (sc->msk_hw_id == CHIP_ID_YUKON_EX) {
+               CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL),
+                   GMC_BYP_MACSECRX_ON | GMC_BYP_MACSECTX_ON |
+                   GMC_BYP_RETR_ON);
+       }
 
        /*
         * Initialize GMAC first such that speed/duplex/flow-control
@@ -3362,7 +3441,8 @@ msk_init(void *xsc)
        CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), GMF_RST_SET);
        CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), GMF_RST_CLR);
        reg = GMF_OPER_ON | GMF_RX_F_FL_ON;
-       if (sc->msk_hw_id == CHIP_ID_YUKON_FE_P)
+       if (sc->msk_hw_id == CHIP_ID_YUKON_FE_P ||
+           sc->msk_hw_id == CHIP_ID_YUKON_EX)
                reg |= GMF_RX_OVER_ON;
        CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), reg);
 
@@ -3399,20 +3479,8 @@ msk_init(void *xsc)
                    MSK_ECU_LLPP);
                CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, RX_GMF_UP_THR),
                    MSK_ECU_ULPP);
-               if (sc_if->msk_framesize > MSK_MAX_FRAMELEN) {
-                       /*
-                        * Set Tx GMAC FIFO Almost Empty Threshold.
-                        */
-                       CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_AE_THR),
-                           MSK_ECU_JUMBO_WM << 16 | MSK_ECU_AE_THR);
-                       /* Disable Store & Forward mode for Tx. */
-                       CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
-                           TX_JUMBO_ENA | TX_STFW_DIS);
-               } else {
-                       /* Enable Store & Forward mode for Tx. */
-                       CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
-                           TX_JUMBO_DIS | TX_STFW_ENA);
-               }
+               /* Configure store-and-forward for Tx. */
+               msk_set_tx_stfwd(sc_if);
        }
 
        if (sc->msk_hw_id == CHIP_ID_YUKON_FE_P &&
@@ -3443,11 +3511,25 @@ msk_init(void *xsc)
        CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), BMU_OPER_INIT);
        CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), BMU_FIFO_OP_ON);
        CSR_WRITE_2(sc, Q_ADDR(sc_if->msk_txq, Q_WM), MSK_BMU_TX_WM);
-       if (sc->msk_hw_id == CHIP_ID_YUKON_EC_U &&
-           sc->msk_hw_rev == CHIP_REV_YU_EC_U_A0) {
-               /* Fix for Yukon-EC Ultra: set BMU FIFO level */
-               CSR_WRITE_2(sc, Q_ADDR(sc_if->msk_txq, Q_AL), MSK_ECU_TXFF_LEV);
-       }
+       switch (sc->msk_hw_id) {
+       case CHIP_ID_YUKON_EC_U:
+               if (sc->msk_hw_rev == CHIP_REV_YU_EC_U_A0) {
+                       /* Fix for Yukon-EC Ultra: set BMU FIFO level */
+                       CSR_WRITE_2(sc, Q_ADDR(sc_if->msk_txq, Q_AL),
+                           MSK_ECU_TXFF_LEV);
+               }
+               break;
+       case CHIP_ID_YUKON_EX:
+               /*
+                * Yukon Extreme seems to have silicon bug for
+                * automatic Tx checksum calculation capability.
+                */
+               if (sc->msk_hw_rev == CHIP_REV_YU_EX_B0) {
+                       CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_F),
+                           F_TX_CHK_AUTO_OFF);
+               }
+               break;
+       }
 
        /* Setup Rx Queue Bus Memory Interface. */
        CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_rxq, Q_CSR), BMU_CLR_RESET);
index 6ae877d..b32732f 100644 (file)
 #define DEVICEID_MRVL_4362     0x4362
 #define DEVICEID_MRVL_4363     0x4363
 #define DEVICEID_MRVL_4364     0x4364
-#define DEVICEID_MRVL_8070     0x4365
+#define DEVICEID_MRVL_4365     0x4365
 #define DEVICEID_MRVL_436A     0x436A
+#define DEVICEID_MRVL_436B     0x436B
+#define DEVICEID_MRVL_436C     0x436C
 
 /*
  * D-Link gigabit ethernet device ID
 #define PCI_OUR_REG_3  0x80    /* 32 bit Our Register 3 */
 #define PCI_OUR_REG_4  0x84    /* 32 bit Our Register 4 */
 #define PCI_OUR_REG_5  0x88    /* 32 bit Our Register 5 */
+#define PCI_CFG_REG_0  0x90    /* 32 bit Config Register 0 */
+#define PCI_CFG_REG_1  0x94    /* 32 bit Config Register 1 */
 
 /* PCI Express Capability */
 #define PEX_CAP_ID     0xe0    /*  8 bit PEX Capability ID */
 #define        PCI_CLK_GATE_PEX_UNIT_ENA       BIT_1   /* Enable Gate PEX Unit Clock */
 #define        PCI_CLK_GATE_ROOT_COR_ENA       BIT_0   /* Enable Gate Root Core Clock */
 
+/* PCI_OUR_REG_5       32 bit  Our Register 5 (Yukon-ECU only) */
+                                               /* Bit 31..27: for A3 & later */
+#define        PCI_CTL_DIV_CORE_CLK_ENA        BIT_31  /* Divide Core Clock Enable */
+#define        PCI_CTL_SRESET_VMAIN_AV         BIT_30  /* Soft Reset for Vmain_av De-Glitch */
+#define        PCI_CTL_BYPASS_VMAIN_AV         BIT_29  /* Bypass En. for Vmain_av De-Glitch */
+#define        PCI_CTL_TIM_VMAIN_AV1           BIT_28  /* Bit 28..27: Timer Vmain_av Mask */
+#define        PCI_CTL_TIM_VMAIN_AV0           BIT_27  /* Bit 28..27: Timer Vmain_av Mask */
+#define        PCI_CTL_TIM_VMAIN_AV_MSK        (BIT_28 | BIT_27)
+                                       /* Bit 26..16: Release Clock on Event */
+#define        PCI_REL_PCIE_RST_DE_ASS         BIT_26  /* PCIe Reset De-Asserted */
+#define        PCI_REL_GPHY_REC_PACKET         BIT_25  /* GPHY Received Packet */
+#define        PCI_REL_INT_FIFO_N_EMPTY        BIT_24  /* Internal FIFO Not Empty */
+#define        PCI_REL_MAIN_PWR_AVAIL          BIT_23  /* Main Power Available */
+#define        PCI_REL_CLKRUN_REQ_REL          BIT_22  /* CLKRUN Request Release */
+#define        PCI_REL_PCIE_RESET_ASS          BIT_21  /* PCIe Reset Asserted */
+#define        PCI_REL_PME_ASSERTED            BIT_20  /* PME Asserted */
+#define        PCI_REL_PCIE_EXIT_L1_ST         BIT_19  /* PCIe Exit L1 State */
+#define        PCI_REL_LOADER_NOT_FIN          BIT_18  /* EPROM Loader Not Finished */
+#define        PCI_REL_PCIE_RX_EX_IDLE         BIT_17  /* PCIe Rx Exit Electrical Idle State */
+#define        PCI_REL_GPHY_LINK_UP            BIT_16  /* GPHY Link Up */
+                                       /* Bit 10.. 0: Mask for Gate Clock */
+#define        PCI_GAT_PCIE_RST_ASSERTED       BIT_10  /* PCIe Reset Asserted */
+#define        PCI_GAT_GPHY_N_REC_PACKET       BIT_9   /* GPHY Not Received Packet */
+#define        PCI_GAT_INT_FIFO_EMPTY          BIT_8   /* Internal FIFO Empty */
+#define        PCI_GAT_MAIN_PWR_N_AVAIL        BIT_7   /* Main Power Not Available */
+#define        PCI_GAT_CLKRUN_REQ_REL          BIT_6   /* CLKRUN Not Requested */
+#define        PCI_GAT_PCIE_RESET_ASS          BIT_5   /* PCIe Reset Asserted */
+#define        PCI_GAT_PME_DE_ASSERTED         BIT_4   /* PME De-Asserted */
+#define        PCI_GAT_PCIE_ENTER_L1_ST        BIT_3   /* PCIe Enter L1 State */
+#define        PCI_GAT_LOADER_FINISHED         BIT_2   /* EPROM Loader Finished */
+#define        PCI_GAT_PCIE_RX_EL_IDLE         BIT_1   /* PCIe Rx Electrical Idle State */
+#define        PCI_GAT_GPHY_LINK_DOWN          BIT_0   /* GPHY Link Down */
+
+/* PCI_CFG_REG_1       32 bit  Config Register 1 */
+#define        PCI_CF1_DIS_REL_EVT_RST         BIT_24  /* Dis. Rel. Event during PCIE reset */
+                                               /* Bit 23..21: Release Clock on Event */
+#define        PCI_CF1_REL_LDR_NOT_FIN         BIT_23  /* EEPROM Loader Not Finished */
+#define        PCI_CF1_REL_VMAIN_AVLBL         BIT_22  /* Vmain available */
+#define        PCI_CF1_REL_PCIE_RESET          BIT_21  /* PCI-E reset */
+                                               /* Bit 20..18: Gate Clock on Event */
+#define        PCI_CF1_GAT_LDR_NOT_FIN         BIT_20  /* EEPROM Loader Finished */
+#define        PCI_CF1_GAT_PCIE_RX_IDLE        BIT_19  /* PCI-E Rx Electrical idle */
+#define        PCI_CF1_GAT_PCIE_RESET          BIT_18  /* PCI-E Reset */
+#define        PCI_CF1_PRST_PHY_CLKREQ         BIT_17  /* Enable PCI-E rst & PM2PHY gen. CLKREQ */
+#define        PCI_CF1_PCIE_RST_CLKREQ         BIT_16  /* Enable PCI-E rst generate CLKREQ */
+
+#define        PCI_CF1_ENA_CFG_LDR_DONE        BIT_8   /* Enable core level Config loader done */
+#define        PCI_CF1_ENA_TXBMU_RD_IDLE       BIT_1   /* Enable TX BMU Read  IDLE for ASPM */
+#define        PCI_CF1_ENA_TXBMU_WR_IDLE       BIT_0   /* Enable TX BMU Write IDLE for ASPM */
+
 /* PEX_DEV_CTRL        16 bit  PEX Device Control (Yukon-2) */
 #define PEX_DC_MAX_RRS_MSK     (7<<12) /* Bit 14..12:  Max. Read Request Size */
 #define PEX_DC_EN_NO_SNOOP     BIT_11  /* Enable No Snoop */
 #define B28_Y2_SMB_CSD_REG     0x0e44  /* 32 bit ASF SMB Control/Status/Data */
 #define B28_Y2_ASF_IRQ_V_BASE  0x0e60  /* 32 bit ASF IRQ Vector Base */
 #define B28_Y2_ASF_STAT_CMD    0x0e68  /* 32 bit ASF Status and Command Reg */
+#define B28_Y2_ASF_HCU_CCSR    0x0e68  /* 32 bit ASF HCU CCSR (Yukon EX) */
 #define B28_Y2_ASF_HOST_COM    0x0e6c  /* 32 bit ASF Host Communication Reg */
 #define B28_Y2_DATA_REG_1      0x0e70  /* 32 bit ASF/Host Data Register 1 */
 #define B28_Y2_DATA_REG_2      0x0e74  /* 32 bit ASF/Host Data Register 2 */
 #define CHIP_ID_YUKON_LP       0xb2 /* Chip ID for YUKON-LP */
 #define CHIP_ID_YUKON_XL       0xb3 /* Chip ID for YUKON-2 XL */
 #define CHIP_ID_YUKON_EC_U     0xb4 /* Chip ID for YUKON-2 EC Ultra */
+#define CHIP_ID_YUKON_EX       0xb5 /* Chip ID for YUKON-2 Extreme */
 #define CHIP_ID_YUKON_EC       0xb6 /* Chip ID for YUKON-2 EC */
 #define CHIP_ID_YUKON_FE       0xb7 /* Chip ID for YUKON-2 FE */
 #define CHIP_ID_YUKON_FE_P     0xb8 /* Chip ID for YUKON-2 FE+ */
 
 #define CHIP_REV_YU_FE_P_A0    0 /* Chip Rev. for Yukon-2 FE+ A0 */
 
+#define        CHIP_REV_YU_EX_A0       1 /* Chip Rev. for Yukon-2 EX A0 */
+#define        CHIP_REV_YU_EX_B0       2 /* Chip Rev. for Yukon-2 EX B0 */
+
 /*     B2_Y2_CLK_GATE   8 bit  Clock Gating (Yukon-2 only) */
 #define Y2_STATUS_LNK2_INAC    BIT_7   /* Status Link 2 inactiv (0 = activ) */
 #define Y2_CLK_GAT_LNK2_DIS    BIT_6   /* Disable clock gating Link 2 */
 #define TST_CFG_WRITE_ON       BIT_1   /* Enable  Config Reg WR */
 #define TST_CFG_WRITE_OFF      BIT_0   /* Disable Config Reg WR */
 
+/*     B2_GP_IO */
+#define        GLB_GPIO_CLK_DEB_ENA    BIT_31  /* Clock Debug Enable */
+#define        GLB_GPIO_CLK_DBG_MSK    0x3c000000      /* Clock Debug */
+
+#define        GLB_GPIO_INT_RST_D3_DIS BIT_15  /* Disable Internal Reset After D3 to D0 */
+#define        GLB_GPIO_LED_PAD_SPEED_UP       BIT_14  /* LED PAD Speed Up */
+#define        GLB_GPIO_STAT_RACE_DIS  BIT_13  /* Status Race Disable */
+#define        GLB_GPIO_TEST_SEL_MSK   0x00001800      /* Testmode Select */
+#define        GLB_GPIO_TEST_SEL_BASE  BIT_11
+#define        GLB_GPIO_RAND_ENA       BIT_10  /* Random Enable */
+#define        GLB_GPIO_RAND_BIT_1     BIT_9   /* Random Bit 1 */
+
 /*     B2_I2C_CTRL     32 bit  I2C HW Control Register */
 #define I2C_FLAG       BIT_31          /* Start read/write if WR */
 #define I2C_ADDR       (0x7fff<<16)    /* Bit 30..16:  Addr to be RD/WR */
                                        /* Bit 10..0: same as for Rx */
 
 /*     Q_F             32 bit  Flag Register */
-#define F_ALM_FULL     BIT_27  /* Rx FIFO: almost full */
-#define F_EMPTY                BIT_27  /* Tx FIFO: empty flag */
-#define F_FIFO_EOF     BIT_26  /* Tag (EOF Flag) bit in FIFO */
-#define F_WM_REACHED   BIT_25  /* Watermark reached */
-#define F_M_RX_RAM_DIS BIT_24  /* MAC Rx RAM Read Port disable */
-#define F_FIFO_LEVEL   (0x1f<<16)      /* Bit 23..16:  # of Qwords in FIFO */
-#define F_WATER_MARK   0x0007ff        /* Bit 10.. 0:  Watermark */
+#define F_TX_CHK_AUTO_OFF      BIT_31  /* Tx checksum auto-calc Off(Yukon EX)*/
+#define F_TX_CHK_AUTO_ON       BIT_30  /* Tx checksum auto-calc On(Yukon EX)*/
+#define F_ALM_FULL             BIT_28  /* Rx FIFO: almost full */
+#define F_EMPTY                        BIT_27  /* Tx FIFO: empty flag */
+#define F_FIFO_EOF             BIT_26  /* Tag (EOF Flag) bit in FIFO */
+#define F_WM_REACHED           BIT_25  /* Watermark reached */
+#define F_M_RX_RAM_DIS         BIT_24  /* MAC Rx RAM Read Port disable */
+#define F_FIFO_LEVEL           (0x1f<<16)
+                                       /* Bit 23..16:  # of Qwords in FIFO */
+#define F_WATER_MARK           0x0007ff/* Bit 10.. 0:  Watermark */
 
 /* Queue Prefetch Unit Offsets, use Y2_PREF_Q_ADDR() to address (Yukon-2 only)*/
 /* PREF_UNIT_CTRL_REG  32 bit  Prefetch Control register */
 #define Y2_ASF_UC_STATE        (3<<2)  /* ASF uC State */
 #define Y2_ASF_CLK_HALT        0       /* ASF system clock stopped */
 
+/* B28_Y2_ASF_HCU_CCSR 32bit CPU Control and Status Register (Yukon EX) */
+#define        Y2_ASF_HCU_CCSR_SMBALERT_MONITOR        BIT_27  /* SMBALERT pin monitor */
+#define        Y2_ASF_HCU_CCSR_CPU_SLEEP       BIT_26  /* CPU sleep status */
+#define        Y2_ASF_HCU_CCSR_CS_TO           BIT_25  /* Clock Stretching Timeout */
+#define        Y2_ASF_HCU_CCSR_WDOG            BIT_24  /* Watchdog Reset */
+#define        Y2_ASF_HCU_CCSR_CLR_IRQ_HOST    BIT_17  /* Clear IRQ_HOST */
+#define        Y2_ASF_HCU_CCSR_SET_IRQ_HCU     BIT_16  /* Set IRQ_HCU */
+#define        Y2_ASF_HCU_CCSR_AHB_RST         BIT_9   /* Reset AHB bridge */
+#define        Y2_ASF_HCU_CCSR_CPU_RST_MODE    BIT_8   /* CPU Reset Mode */
+#define        Y2_ASF_HCU_CCSR_SET_SYNC_CPU    BIT_5
+#define        Y2_ASF_HCU_CCSR_CPU_CLK_DIVIDE1 BIT_4
+#define        Y2_ASF_HCU_CCSR_CPU_CLK_DIVIDE0 BIT_3
+#define        Y2_ASF_HCU_CCSR_CPU_CLK_DIVIDE_MSK      (BIT_4 | BIT_3) /* CPU Clock Divide */
+#define        Y2_ASF_HCU_CCSR_CPU_CLK_DIVIDE_BASE     BIT_3
+#define        Y2_ASF_HCU_CCSR_OS_PRSNT        BIT_2   /* ASF OS Present */
+       /* Microcontroller State */
+#define        Y2_ASF_HCU_CCSR_UC_STATE_MSK    3
+#define        Y2_ASF_HCU_CCSR_UC_STATE_BASE   BIT_0
+#define        Y2_ASF_HCU_CCSR_ASF_RESET       0
+#define        Y2_ASF_HCU_CCSR_ASF_HALTED      BIT_1
+#define        Y2_ASF_HCU_CCSR_ASF_RUNNING     BIT_0
+
 /* B28_Y2_ASF_HOST_COM 32 bit  ASF Host Communication Reg */
 /* This register is used by the ASF firmware */
 #define Y2_ASF_CLR_ASFI        BIT_1   /* Clear host IRQ */
 #define SC_STAT_RST_SET        BIT_0   /* Set   Status Unit Reset */
 
 /*     GMAC_CTRL       32 bit  GMAC Control Reg (YUKON only) */
+#define GMC_SEC_RST    BIT_15  /* MAC SEC RST */
+#define GMC_SEC_RST_OFF        BIT_14  /* MAC SEC RST Off */
+#define GMC_BYP_MACSECRX_ON    BIT_13  /* Bypass MAC SEC RX */
+#define GMC_BYP_MACSECRX_OFF   BIT_12  /* Bypass MAC SEC RX Off */
+#define GMC_BYP_MACSECTX_ON    BIT_11  /* Bypass MAC SEC TX */
+#define GMC_BYP_MACSECTX_OFF   BIT_10  /* Bypass MAC SEC TX Off */
+#define GMC_BYP_RETR_ON        BIT_9   /* Bypass MAC retransmit FIFO On */
+#define GMC_BYP_RETR_OFF       BIT_8   /* Bypass MAC retransmit FIFO Off */
 #define GMC_H_BURST_ON BIT_7   /* Half Duplex Burst Mode On */
 #define GMC_H_BURST_OFF        BIT_6   /* Half Duplex Burst Mode Off */
 #define GMC_F_LOOPB_ON BIT_5   /* FIFO Loopback On */
@@ -2146,8 +2250,19 @@ struct msk_stat_desc {
 #define OP_PUTIDX      0x70000000
 
 #define        STLE_OP_MASK    0xff000000
+#define STLE_CSS_MASK   0x00ff0000
 #define        STLE_LEN_MASK   0x0000ffff
 
+/* CSS defined in status LE(valid for descriptor V2 format). */
+#define        CSS_TCPUDP_CSUM_OK      0x00800000
+#define        CSS_UDP                 0x00400000
+#define        CSS_TCP                 0x00200000
+#define        CSS_IPFRAG              0x00100000
+#define        CSS_IPV6                0x00080000
+#define        CSS_IPV4_CSUM_OK        0x00040000
+#define        CSS_IPV4                0x00020000
+#define        CSS_PORT                0x00010000
+
 /* Descriptor Bit Definition */
 /*     TxCtrl          Transmit Buffer Control Field */
 /*     RxCtrl          Receive  Buffer Control Field */