diff options
-rw-r--r-- | drivers/net/tg3.c | 37 | ||||
-rw-r--r-- | drivers/net/tg3.h | 1 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 2 |
3 files changed, 27 insertions, 13 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 5514828b7929..16bc05fe531f 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -1062,7 +1062,7 @@ static void tg3_frob_aux_power(struct tg3 *tp) | |||
1062 | { | 1062 | { |
1063 | struct tg3 *tp_peer = tp; | 1063 | struct tg3 *tp_peer = tp; |
1064 | 1064 | ||
1065 | if ((tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) != 0) | 1065 | if ((tp->tg3_flags2 & TG3_FLG2_IS_NIC) == 0) |
1066 | return; | 1066 | return; |
1067 | 1067 | ||
1068 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) || | 1068 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) || |
@@ -1213,8 +1213,8 @@ static int tg3_set_power_state(struct tg3 *tp, pci_power_t state) | |||
1213 | power_control); | 1213 | power_control); |
1214 | udelay(100); /* Delay after power state change */ | 1214 | udelay(100); /* Delay after power state change */ |
1215 | 1215 | ||
1216 | /* Switch out of Vaux if it is not a LOM */ | 1216 | /* Switch out of Vaux if it is a NIC */ |
1217 | if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT)) | 1217 | if (tp->tg3_flags2 & TG3_FLG2_IS_NIC) |
1218 | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100); | 1218 | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100); |
1219 | 1219 | ||
1220 | return 0; | 1220 | return 0; |
@@ -6397,16 +6397,17 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
6397 | udelay(40); | 6397 | udelay(40); |
6398 | 6398 | ||
6399 | /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). | 6399 | /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). |
6400 | * If TG3_FLAG_EEPROM_WRITE_PROT is set, we should read the | 6400 | * If TG3_FLG2_IS_NIC is zero, we should read the |
6401 | * register to preserve the GPIO settings for LOMs. The GPIOs, | 6401 | * register to preserve the GPIO settings for LOMs. The GPIOs, |
6402 | * whether used as inputs or outputs, are set by boot code after | 6402 | * whether used as inputs or outputs, are set by boot code after |
6403 | * reset. | 6403 | * reset. |
6404 | */ | 6404 | */ |
6405 | if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) { | 6405 | if (!(tp->tg3_flags2 & TG3_FLG2_IS_NIC)) { |
6406 | u32 gpio_mask; | 6406 | u32 gpio_mask; |
6407 | 6407 | ||
6408 | gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE2 | | 6408 | gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | |
6409 | GRC_LCLCTRL_GPIO_OUTPUT0 | GRC_LCLCTRL_GPIO_OUTPUT2; | 6409 | GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | |
6410 | GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; | ||
6410 | 6411 | ||
6411 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) | 6412 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) |
6412 | gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | | 6413 | gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | |
@@ -6418,8 +6419,9 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
6418 | tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; | 6419 | tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; |
6419 | 6420 | ||
6420 | /* GPIO1 must be driven high for eeprom write protect */ | 6421 | /* GPIO1 must be driven high for eeprom write protect */ |
6421 | tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | | 6422 | if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) |
6422 | GRC_LCLCTRL_GPIO_OUTPUT1); | 6423 | tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | |
6424 | GRC_LCLCTRL_GPIO_OUTPUT1); | ||
6423 | } | 6425 | } |
6424 | tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); | 6426 | tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); |
6425 | udelay(100); | 6427 | udelay(100); |
@@ -9963,8 +9965,10 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) | |||
9963 | tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT; | 9965 | tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT; |
9964 | 9966 | ||
9965 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { | 9967 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { |
9966 | if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) | 9968 | if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { |
9967 | tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT; | 9969 | tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT; |
9970 | tp->tg3_flags2 |= TG3_FLG2_IS_NIC; | ||
9971 | } | ||
9968 | return; | 9972 | return; |
9969 | } | 9973 | } |
9970 | 9974 | ||
@@ -10064,10 +10068,17 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) | |||
10064 | tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) | 10068 | tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) |
10065 | tp->led_ctrl = LED_CTRL_MODE_PHY_2; | 10069 | tp->led_ctrl = LED_CTRL_MODE_PHY_2; |
10066 | 10070 | ||
10067 | if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) | 10071 | if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { |
10068 | tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT; | 10072 | tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT; |
10069 | else | 10073 | if ((tp->pdev->subsystem_vendor == |
10074 | PCI_VENDOR_ID_ARIMA) && | ||
10075 | (tp->pdev->subsystem_device == 0x205a || | ||
10076 | tp->pdev->subsystem_device == 0x2063)) | ||
10077 | tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT; | ||
10078 | } else { | ||
10070 | tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT; | 10079 | tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT; |
10080 | tp->tg3_flags2 |= TG3_FLG2_IS_NIC; | ||
10081 | } | ||
10071 | 10082 | ||
10072 | if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { | 10083 | if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { |
10073 | tp->tg3_flags |= TG3_FLAG_ENABLE_ASF; | 10084 | tp->tg3_flags |= TG3_FLAG_ENABLE_ASF; |
@@ -10693,7 +10704,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
10693 | tp->tg3_flags |= TG3_FLAG_SRAM_USE_CONFIG; | 10704 | tp->tg3_flags |= TG3_FLAG_SRAM_USE_CONFIG; |
10694 | 10705 | ||
10695 | /* Get eeprom hw config before calling tg3_set_power_state(). | 10706 | /* Get eeprom hw config before calling tg3_set_power_state(). |
10696 | * In particular, the TG3_FLAG_EEPROM_WRITE_PROT flag must be | 10707 | * In particular, the TG3_FLG2_IS_NIC flag must be |
10697 | * determined before calling tg3_set_power_state() so that | 10708 | * determined before calling tg3_set_power_state() so that |
10698 | * we know whether or not to switch out of Vaux power. | 10709 | * we know whether or not to switch out of Vaux power. |
10699 | * When the flag is set, it means that GPIO1 is used for eeprom | 10710 | * When the flag is set, it means that GPIO1 is used for eeprom |
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h index 92f53000bce6..dfaf4ed127bd 100644 --- a/drivers/net/tg3.h +++ b/drivers/net/tg3.h | |||
@@ -2233,6 +2233,7 @@ struct tg3 { | |||
2233 | #define TG3_FLG2_PCI_EXPRESS 0x00000200 | 2233 | #define TG3_FLG2_PCI_EXPRESS 0x00000200 |
2234 | #define TG3_FLG2_ASF_NEW_HANDSHAKE 0x00000400 | 2234 | #define TG3_FLG2_ASF_NEW_HANDSHAKE 0x00000400 |
2235 | #define TG3_FLG2_HW_AUTONEG 0x00000800 | 2235 | #define TG3_FLG2_HW_AUTONEG 0x00000800 |
2236 | #define TG3_FLG2_IS_NIC 0x00001000 | ||
2236 | #define TG3_FLG2_PHY_SERDES 0x00002000 | 2237 | #define TG3_FLG2_PHY_SERDES 0x00002000 |
2237 | #define TG3_FLG2_CAPACITIVE_COUPLING 0x00004000 | 2238 | #define TG3_FLG2_CAPACITIVE_COUPLING 0x00004000 |
2238 | #define TG3_FLG2_FLASH 0x00008000 | 2239 | #define TG3_FLG2_FLASH 0x00008000 |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index edddcce68b94..ebc597d57242 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -2003,6 +2003,8 @@ | |||
2003 | #define PCI_DEVICE_ID_FARSITE_TE1 0x1610 | 2003 | #define PCI_DEVICE_ID_FARSITE_TE1 0x1610 |
2004 | #define PCI_DEVICE_ID_FARSITE_TE1C 0x1612 | 2004 | #define PCI_DEVICE_ID_FARSITE_TE1C 0x1612 |
2005 | 2005 | ||
2006 | #define PCI_VENDOR_ID_ARIMA 0x161f | ||
2007 | |||
2006 | #define PCI_VENDOR_ID_SIBYTE 0x166d | 2008 | #define PCI_VENDOR_ID_SIBYTE 0x166d |
2007 | #define PCI_DEVICE_ID_BCM1250_PCI 0x0001 | 2009 | #define PCI_DEVICE_ID_BCM1250_PCI 0x0001 |
2008 | #define PCI_DEVICE_ID_BCM1250_HT 0x0002 | 2010 | #define PCI_DEVICE_ID_BCM1250_HT 0x0002 |