diff options
author | Stephen Hemminger <shemminger@vyatta.com> | 2008-06-17 12:04:27 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-06-17 23:59:39 -0400 |
commit | 0ce8b98d55861d5d86ef9bd8df69282b8c5f0b70 (patch) | |
tree | 786a0ff08dccc129f24b472d4a9684ad8e2194cd /drivers | |
parent | e6cac9badd45439c9a29b289153c39993b471b4c (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.c | 20 | ||||
-rw-r--r-- | drivers/net/sky2.h | 1 |
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 | }; |
445 | enum yukon_ec_rev { | 446 | enum 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 */ |