|
@@ -1643,6 +1643,22 @@ static void yukon_reset(struct skge_hw *hw, int port)
|
|
|
| GM_RXCR_UCF_ENA | GM_RXCR_MCF_ENA);
|
|
|
}
|
|
|
|
|
|
+/* Apparently, early versions of Yukon-Lite had wrong chip_id? */
|
|
|
+static int is_yukon_lite_a0(struct skge_hw *hw)
|
|
|
+{
|
|
|
+ u32 reg;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (hw->chip_id != CHIP_ID_YUKON)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ reg = skge_read32(hw, B2_FAR);
|
|
|
+ skge_write8(hw, B2_FAR + 3, 0xff);
|
|
|
+ ret = (skge_read8(hw, B2_FAR + 3) != 0);
|
|
|
+ skge_write32(hw, B2_FAR, reg);
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
static void yukon_mac_init(struct skge_hw *hw, int port)
|
|
|
{
|
|
|
struct skge_port *skge = netdev_priv(hw->dev[port]);
|
|
@@ -1758,9 +1774,11 @@ static void yukon_mac_init(struct skge_hw *hw, int port)
|
|
|
/* Configure Rx MAC FIFO */
|
|
|
skge_write16(hw, SK_REG(port, RX_GMF_FL_MSK), RX_FF_FL_DEF_MSK);
|
|
|
reg = GMF_OPER_ON | GMF_RX_F_FL_ON;
|
|
|
- if (hw->chip_id == CHIP_ID_YUKON_LITE &&
|
|
|
- hw->chip_rev >= CHIP_REV_YU_LITE_A3)
|
|
|
+
|
|
|
+ /* disable Rx GMAC FIFO Flush for YUKON-Lite Rev. A0 only */
|
|
|
+ if (is_yukon_lite_a0(hw))
|
|
|
reg &= ~GMF_RX_F_FL_ON;
|
|
|
+
|
|
|
skge_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RST_CLR);
|
|
|
skge_write16(hw, SK_REG(port, RX_GMF_CTRL_T), reg);
|
|
|
/*
|