Commit 5e1705dd authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Jeff Garzik

[PATCH] skge: fibre vs copper detection cleanup

Cleanup the code that handles fibre vs copper detection.
Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>

 drivers/net/skge.c |   26 ++++++++++++--------------
 drivers/net/skge.h |   11 ++---------
 2 files changed, 14 insertions(+), 23 deletions(-)
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent 050ec18a
...@@ -189,7 +189,7 @@ static u32 skge_supported_modes(const struct skge_hw *hw) ...@@ -189,7 +189,7 @@ static u32 skge_supported_modes(const struct skge_hw *hw)
{ {
u32 supported; u32 supported;
if (iscopper(hw)) { if (hw->copper) {
supported = SUPPORTED_10baseT_Half supported = SUPPORTED_10baseT_Half
| SUPPORTED_10baseT_Full | SUPPORTED_10baseT_Full
| SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Half
...@@ -222,7 +222,7 @@ static int skge_get_settings(struct net_device *dev, ...@@ -222,7 +222,7 @@ static int skge_get_settings(struct net_device *dev,
ecmd->transceiver = XCVR_INTERNAL; ecmd->transceiver = XCVR_INTERNAL;
ecmd->supported = skge_supported_modes(hw); ecmd->supported = skge_supported_modes(hw);
if (iscopper(hw)) { if (hw->copper) {
ecmd->port = PORT_TP; ecmd->port = PORT_TP;
ecmd->phy_address = hw->phy_addr; ecmd->phy_address = hw->phy_addr;
} else } else
...@@ -1599,7 +1599,7 @@ static void yukon_init(struct skge_hw *hw, int port) ...@@ -1599,7 +1599,7 @@ static void yukon_init(struct skge_hw *hw, int port)
adv = PHY_AN_CSMA; adv = PHY_AN_CSMA;
if (skge->autoneg == AUTONEG_ENABLE) { if (skge->autoneg == AUTONEG_ENABLE) {
if (iscopper(hw)) { if (hw->copper) {
if (skge->advertising & ADVERTISED_1000baseT_Full) if (skge->advertising & ADVERTISED_1000baseT_Full)
ct1000 |= PHY_M_1000C_AFD; ct1000 |= PHY_M_1000C_AFD;
if (skge->advertising & ADVERTISED_1000baseT_Half) if (skge->advertising & ADVERTISED_1000baseT_Half)
...@@ -1691,7 +1691,7 @@ static void yukon_mac_init(struct skge_hw *hw, int port) ...@@ -1691,7 +1691,7 @@ static void yukon_mac_init(struct skge_hw *hw, int port)
/* Set hardware config mode */ /* Set hardware config mode */
reg = GPC_INT_POL_HI | GPC_DIS_FC | GPC_DIS_SLEEP | reg = GPC_INT_POL_HI | GPC_DIS_FC | GPC_DIS_SLEEP |
GPC_ENA_XC | GPC_ANEG_ADV_ALL_M | GPC_ENA_PAUSE; GPC_ENA_XC | GPC_ANEG_ADV_ALL_M | GPC_ENA_PAUSE;
reg |= iscopper(hw) ? GPC_HWCFG_GMII_COP : GPC_HWCFG_GMII_FIB; reg |= hw->copper ? GPC_HWCFG_GMII_COP : GPC_HWCFG_GMII_FIB;
/* Clear GMC reset */ /* Clear GMC reset */
skge_write32(hw, SK_REG(port, GPHY_CTRL), reg | GPC_RST_SET); skge_write32(hw, SK_REG(port, GPHY_CTRL), reg | GPC_RST_SET);
...@@ -2865,7 +2865,7 @@ static const char *skge_board_name(const struct skge_hw *hw) ...@@ -2865,7 +2865,7 @@ static const char *skge_board_name(const struct skge_hw *hw)
static int skge_reset(struct skge_hw *hw) static int skge_reset(struct skge_hw *hw)
{ {
u16 ctst; u16 ctst;
u8 t8, mac_cfg; u8 t8, mac_cfg, pmd_type, phy_type;
int i; int i;
ctst = skge_read16(hw, B0_CTST); ctst = skge_read16(hw, B0_CTST);
...@@ -2884,18 +2884,19 @@ static int skge_reset(struct skge_hw *hw) ...@@ -2884,18 +2884,19 @@ static int skge_reset(struct skge_hw *hw)
ctst & (CS_CLK_RUN_HOT|CS_CLK_RUN_RST|CS_CLK_RUN_ENA)); ctst & (CS_CLK_RUN_HOT|CS_CLK_RUN_RST|CS_CLK_RUN_ENA));
hw->chip_id = skge_read8(hw, B2_CHIP_ID); hw->chip_id = skge_read8(hw, B2_CHIP_ID);
hw->phy_type = skge_read8(hw, B2_E_1) & 0xf; phy_type = skge_read8(hw, B2_E_1) & 0xf;
hw->pmd_type = skge_read8(hw, B2_PMD_TYP); pmd_type = skge_read8(hw, B2_PMD_TYP);
hw->copper = (pmd_type == 'T' || pmd_type == '1');
switch (hw->chip_id) { switch (hw->chip_id) {
case CHIP_ID_GENESIS: case CHIP_ID_GENESIS:
switch (hw->phy_type) { switch (phy_type) {
case SK_PHY_BCOM: case SK_PHY_BCOM:
hw->phy_addr = PHY_ADDR_BCOM; hw->phy_addr = PHY_ADDR_BCOM;
break; break;
default: default:
printk(KERN_ERR PFX "%s: unsupported phy type 0x%x\n", printk(KERN_ERR PFX "%s: unsupported phy type 0x%x\n",
pci_name(hw->pdev), hw->phy_type); pci_name(hw->pdev), phy_type);
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
break; break;
...@@ -2903,13 +2904,10 @@ static int skge_reset(struct skge_hw *hw) ...@@ -2903,13 +2904,10 @@ static int skge_reset(struct skge_hw *hw)
case CHIP_ID_YUKON: case CHIP_ID_YUKON:
case CHIP_ID_YUKON_LITE: case CHIP_ID_YUKON_LITE:
case CHIP_ID_YUKON_LP: case CHIP_ID_YUKON_LP:
if (hw->phy_type < SK_PHY_MARV_COPPER && hw->pmd_type != 'S') if (phy_type < SK_PHY_MARV_COPPER && pmd_type != 'S')
hw->phy_type = SK_PHY_MARV_COPPER; hw->copper = 1;
hw->phy_addr = PHY_ADDR_MARV; hw->phy_addr = PHY_ADDR_MARV;
if (!iscopper(hw))
hw->phy_type = SK_PHY_MARV_FIBER;
break; break;
default: default:
......
...@@ -2460,24 +2460,17 @@ struct skge_hw { ...@@ -2460,24 +2460,17 @@ struct skge_hw {
u8 chip_id; u8 chip_id;
u8 chip_rev; u8 chip_rev;
u8 phy_type; u8 copper;
u8 pmd_type;
u16 phy_addr;
u8 ports; u8 ports;
u32 ram_size; u32 ram_size;
u32 ram_offset; u32 ram_offset;
u16 phy_addr;
struct tasklet_struct ext_tasklet; struct tasklet_struct ext_tasklet;
spinlock_t phy_lock; spinlock_t phy_lock;
}; };
static inline int iscopper(const struct skge_hw *hw)
{
return (hw->pmd_type == 'T');
}
enum { enum {
FLOW_MODE_NONE = 0, /* No Flow-Control */ FLOW_MODE_NONE = 0, /* No Flow-Control */
FLOW_MODE_LOC_SEND = 1, /* Local station sends PAUSE */ FLOW_MODE_LOC_SEND = 1, /* Local station sends PAUSE */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment