aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@vyatta.com>2008-06-17 12:04:27 -0400
committerJeff Garzik <jgarzik@redhat.com>2008-06-17 23:59:39 -0400
commit0ce8b98d55861d5d86ef9bd8df69282b8c5f0b70 (patch)
tree786a0ff08dccc129f24b472d4a9684ad8e2194cd /drivers
parente6cac9badd45439c9a29b289153c39993b471b4c (diff)
sky2: 88E8057 chip support
Add support for Yukon 2 Ultra 2 chip set (88E8057) based on code in latest version of vendor driver (sk98lin 10.60.2.3). Untested on real hardware. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/sky2.c20
-rw-r--r--drivers/net/sky2.h1
2 files changed, 16 insertions, 5 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 3ebc1b433464..c331c01943b7 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -136,6 +136,7 @@ static DEFINE_PCI_DEVICE_TABLE(sky2_id_table) = {
136 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436C) }, /* 88E8072 */ 136 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436C) }, /* 88E8072 */
137 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436D) }, /* 88E8055 */ 137 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436D) }, /* 88E8055 */
138 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4370) }, /* 88E8075 */ 138 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4370) }, /* 88E8075 */
139 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4380) }, /* 88E8057 */
139 { 0 } 140 { 0 }
140}; 141};
141 142
@@ -647,7 +648,7 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
647 ledover |= PHY_M_LED_MO_RX(MO_LED_OFF); 648 ledover |= PHY_M_LED_MO_RX(MO_LED_OFF);
648 } 649 }
649 650
650 if (hw->chip_id == CHIP_ID_YUKON_EC_U) { 651 if (hw->chip_id == CHIP_ID_YUKON_EC_U || hw->chip_id == CHIP_ID_YUKON_UL_2) {
651 /* apply fixes in PHY AFE */ 652 /* apply fixes in PHY AFE */
652 gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 255); 653 gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 255);
653 654
@@ -655,9 +656,11 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
655 gm_phy_write(hw, port, 0x18, 0xaa99); 656 gm_phy_write(hw, port, 0x18, 0xaa99);
656 gm_phy_write(hw, port, 0x17, 0x2011); 657 gm_phy_write(hw, port, 0x17, 0x2011);
657 658
658 /* fix for IEEE A/B Symmetry failure in 1000BASE-T */ 659 if (hw->chip_id == CHIP_ID_YUKON_EC_U) {
659 gm_phy_write(hw, port, 0x18, 0xa204); 660 /* fix for IEEE A/B Symmetry failure in 1000BASE-T */
660 gm_phy_write(hw, port, 0x17, 0x2002); 661 gm_phy_write(hw, port, 0x18, 0xa204);
662 gm_phy_write(hw, port, 0x17, 0x2002);
663 }
661 664
662 /* set page register to 0 */ 665 /* set page register to 0 */
663 gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 0); 666 gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 0);
@@ -2807,6 +2810,7 @@ static u32 sky2_mhz(const struct sky2_hw *hw)
2807 case CHIP_ID_YUKON_EC_U: 2810 case CHIP_ID_YUKON_EC_U:
2808 case CHIP_ID_YUKON_EX: 2811 case CHIP_ID_YUKON_EX:
2809 case CHIP_ID_YUKON_SUPR: 2812 case CHIP_ID_YUKON_SUPR:
2813 case CHIP_ID_YUKON_UL_2:
2810 return 125; 2814 return 125;
2811 2815
2812 case CHIP_ID_YUKON_FE: 2816 case CHIP_ID_YUKON_FE:
@@ -2899,6 +2903,11 @@ static int __devinit sky2_init(struct sky2_hw *hw)
2899 | SKY2_HW_ADV_POWER_CTL; 2903 | SKY2_HW_ADV_POWER_CTL;
2900 break; 2904 break;
2901 2905
2906 case CHIP_ID_YUKON_UL_2:
2907 hw->flags = SKY2_HW_GIGABIT
2908 | SKY2_HW_ADV_POWER_CTL;
2909 break;
2910
2902 default: 2911 default:
2903 dev_err(&hw->pdev->dev, "unsupported chip type 0x%x\n", 2912 dev_err(&hw->pdev->dev, "unsupported chip type 0x%x\n",
2904 hw->chip_id); 2913 hw->chip_id);
@@ -4265,9 +4274,10 @@ static const char *sky2_name(u8 chipid, char *buf, int sz)
4265 "FE", /* 0xb7 */ 4274 "FE", /* 0xb7 */
4266 "FE+", /* 0xb8 */ 4275 "FE+", /* 0xb8 */
4267 "Supreme", /* 0xb9 */ 4276 "Supreme", /* 0xb9 */
4277 "UL 2", /* 0xba */
4268 }; 4278 };
4269 4279
4270 if (chipid >= CHIP_ID_YUKON_XL && chipid < CHIP_ID_YUKON_SUPR) 4280 if (chipid >= CHIP_ID_YUKON_XL && chipid < CHIP_ID_YUKON_UL_2)
4271 strncpy(buf, name[chipid - CHIP_ID_YUKON_XL], sz); 4281 strncpy(buf, name[chipid - CHIP_ID_YUKON_XL], sz);
4272 else 4282 else
4273 snprintf(buf, sz, "(chip %#x)", chipid); 4283 snprintf(buf, sz, "(chip %#x)", chipid);
diff --git a/drivers/net/sky2.h b/drivers/net/sky2.h
index 1fa82bf029d9..4d9c4a19bb85 100644
--- a/drivers/net/sky2.h
+++ b/drivers/net/sky2.h
@@ -441,6 +441,7 @@ enum {
441 CHIP_ID_YUKON_FE = 0xb7, /* YUKON-2 FE */ 441 CHIP_ID_YUKON_FE = 0xb7, /* YUKON-2 FE */
442 CHIP_ID_YUKON_FE_P = 0xb8, /* YUKON-2 FE+ */ 442 CHIP_ID_YUKON_FE_P = 0xb8, /* YUKON-2 FE+ */
443 CHIP_ID_YUKON_SUPR = 0xb9, /* YUKON-2 Supreme */ 443 CHIP_ID_YUKON_SUPR = 0xb9, /* YUKON-2 Supreme */
444 CHIP_ID_YUKON_UL_2 = 0xba, /* YUKON-2 Ultra 2 */
444}; 445};
445enum yukon_ec_rev { 446enum yukon_ec_rev {
446 CHIP_REV_YU_EC_A1 = 0, /* Chip Rev. for Yukon-EC A1/A0 */ 447 CHIP_REV_YU_EC_A1 = 0, /* Chip Rev. for Yukon-EC A1/A0 */