Skip to content

Commit ed4d416

Browse files
Stephen Hemmingerdavem330
Stephen Hemminger
authored andcommitted
sky2: support for Yukon Supreme
Add support from sk98lin vendor driver 10.50.1.3 for 88E8055 and 88E8075 chips. I don't have this hardware to test, so this changes are untested. Signed-off-by: Stephen Hemminger <[email protected]> Signed-off-by: Jeff Garzik <[email protected]>
1 parent 804d854 commit ed4d416

File tree

2 files changed

+46
-21
lines changed

2 files changed

+46
-21
lines changed

drivers/net/sky2.c

+39-15
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ static const struct pci_device_id sky2_id_table[] = {
134134
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436A) }, /* 88E8058 */
135135
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436B) }, /* 88E8071 */
136136
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436C) }, /* 88E8072 */
137+
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436D) }, /* 88E8055 */
138+
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4370) }, /* 88E8075 */
137139
{ 0 }
138140
};
139141

@@ -547,6 +549,7 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
547549

548550
case CHIP_ID_YUKON_EC_U:
549551
case CHIP_ID_YUKON_EX:
552+
case CHIP_ID_YUKON_SUPR:
550553
pg = gm_phy_read(hw, port, PHY_MARV_EXT_ADR);
551554

552555
/* select page 3 to access LED control register */
@@ -713,23 +716,33 @@ static void sky2_set_tx_stfwd(struct sky2_hw *hw, unsigned port)
713716
{
714717
struct net_device *dev = hw->dev[port];
715718

716-
if (dev->mtu <= ETH_DATA_LEN)
717-
sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T),
718-
TX_JUMBO_DIS | TX_STFW_ENA);
719+
if ( (hw->chip_id == CHIP_ID_YUKON_EX &&
720+
hw->chip_rev != CHIP_REV_YU_EX_A0) ||
721+
hw->chip_id == CHIP_ID_YUKON_FE_P ||
722+
hw->chip_id == CHIP_ID_YUKON_SUPR) {
723+
/* Yukon-Extreme B0 and further Extreme devices */
724+
/* enable Store & Forward mode for TX */
719725

720-
else if (hw->chip_id != CHIP_ID_YUKON_EC_U)
721-
sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T),
722-
TX_STFW_ENA | TX_JUMBO_ENA);
723-
else {
724-
/* set Tx GMAC FIFO Almost Empty Threshold */
725-
sky2_write32(hw, SK_REG(port, TX_GMF_AE_THR),
726-
(ECU_JUMBO_WM << 16) | ECU_AE_THR);
726+
if (dev->mtu <= ETH_DATA_LEN)
727+
sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T),
728+
TX_JUMBO_DIS | TX_STFW_ENA);
727729

728-
sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T),
729-
TX_JUMBO_ENA | TX_STFW_DIS);
730+
else
731+
sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T),
732+
TX_JUMBO_ENA| TX_STFW_ENA);
733+
} else {
734+
if (dev->mtu <= ETH_DATA_LEN)
735+
sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), TX_STFW_ENA);
736+
else {
737+
/* set Tx GMAC FIFO Almost Empty Threshold */
738+
sky2_write32(hw, SK_REG(port, TX_GMF_AE_THR),
739+
(ECU_JUMBO_WM << 16) | ECU_AE_THR);
730740

731-
/* Can't do offload because of lack of store/forward */
732-
dev->features &= ~(NETIF_F_TSO | NETIF_F_SG | NETIF_F_ALL_CSUM);
741+
sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), TX_STFW_DIS);
742+
743+
/* Can't do offload because of lack of store/forward */
744+
dev->features &= ~(NETIF_F_TSO | NETIF_F_SG | NETIF_F_ALL_CSUM);
745+
}
733746
}
734747
}
735748

@@ -2660,6 +2673,7 @@ static u32 sky2_mhz(const struct sky2_hw *hw)
26602673
case CHIP_ID_YUKON_EC:
26612674
case CHIP_ID_YUKON_EC_U:
26622675
case CHIP_ID_YUKON_EX:
2676+
case CHIP_ID_YUKON_SUPR:
26632677
return 125;
26642678

26652679
case CHIP_ID_YUKON_FE:
@@ -2743,6 +2757,15 @@ static int __devinit sky2_init(struct sky2_hw *hw)
27432757
| SKY2_HW_AUTO_TX_SUM
27442758
| SKY2_HW_ADV_POWER_CTL;
27452759
break;
2760+
2761+
case CHIP_ID_YUKON_SUPR:
2762+
hw->flags = SKY2_HW_GIGABIT
2763+
| SKY2_HW_NEWER_PHY
2764+
| SKY2_HW_NEW_LE
2765+
| SKY2_HW_AUTO_TX_SUM
2766+
| SKY2_HW_ADV_POWER_CTL;
2767+
break;
2768+
27462769
default:
27472770
dev_err(&hw->pdev->dev, "unsupported chip type 0x%x\n",
27482771
hw->chip_id);
@@ -2813,7 +2836,8 @@ static void sky2_reset(struct sky2_hw *hw)
28132836
sky2_write8(hw, SK_REG(i, GMAC_LINK_CTRL), GMLC_RST_SET);
28142837
sky2_write8(hw, SK_REG(i, GMAC_LINK_CTRL), GMLC_RST_CLR);
28152838

2816-
if (hw->chip_id == CHIP_ID_YUKON_EX)
2839+
if (hw->chip_id == CHIP_ID_YUKON_EX ||
2840+
hw->chip_id == CHIP_ID_YUKON_SUPR)
28172841
sky2_write16(hw, SK_REG(i, GMAC_CTRL),
28182842
GMC_BYP_MACSECRX_ON | GMC_BYP_MACSECTX_ON
28192843
| GMC_BYP_RETR_ON);

drivers/net/sky2.h

+7-6
Original file line numberDiff line numberDiff line change
@@ -425,12 +425,13 @@ enum {
425425

426426
/* B2_CHIP_ID 8 bit Chip Identification Number */
427427
enum {
428-
CHIP_ID_YUKON_XL = 0xb3, /* Chip ID for YUKON-2 XL */
429-
CHIP_ID_YUKON_EC_U = 0xb4, /* Chip ID for YUKON-2 EC Ultra */
430-
CHIP_ID_YUKON_EX = 0xb5, /* Chip ID for YUKON-2 Extreme */
431-
CHIP_ID_YUKON_EC = 0xb6, /* Chip ID for YUKON-2 EC */
432-
CHIP_ID_YUKON_FE = 0xb7, /* Chip ID for YUKON-2 FE */
433-
CHIP_ID_YUKON_FE_P = 0xb8, /* Chip ID for YUKON-2 FE+ */
428+
CHIP_ID_YUKON_XL = 0xb3, /* YUKON-2 XL */
429+
CHIP_ID_YUKON_EC_U = 0xb4, /* YUKON-2 EC Ultra */
430+
CHIP_ID_YUKON_EX = 0xb5, /* YUKON-2 Extreme */
431+
CHIP_ID_YUKON_EC = 0xb6, /* YUKON-2 EC */
432+
CHIP_ID_YUKON_FE = 0xb7, /* YUKON-2 FE */
433+
CHIP_ID_YUKON_FE_P = 0xb8, /* YUKON-2 FE+ */
434+
CHIP_ID_YUKON_SUPR = 0xb9, /* YUKON-2 Supreme */
434435
};
435436
enum yukon_ec_rev {
436437
CHIP_REV_YU_EC_A1 = 0, /* Chip Rev. for Yukon-EC A1/A0 */

0 commit comments

Comments
 (0)