Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 100258 | Differences between
and this patch

Collapse All | Expand All

(-)skge-2.6.13/drivers/net/skge.c (-20 / +45 lines)
Lines 1342-1347 static void genesis_stop(struct skge_por Link Here
1342
	int port = skge->port;
1342
	int port = skge->port;
1343
	u32 reg;
1343
	u32 reg;
1344
1344
1345
	genesis_reset(hw, port);
1346
1345
	/* Clear Tx packet arbiter timeout IRQ */
1347
	/* Clear Tx packet arbiter timeout IRQ */
1346
	skge_write16(hw, B3_PA_CTRL,
1348
	skge_write16(hw, B3_PA_CTRL,
1347
		     port == 0 ? PA_CLR_TO_TX1 : PA_CLR_TO_TX2);
1349
		     port == 0 ? PA_CLR_TO_TX1 : PA_CLR_TO_TX2);
Lines 1679-1687 static void yukon_mac_init(struct skge_h Link Here
1679
1681
1680
	/* WA code for COMA mode -- set PHY reset */
1682
	/* WA code for COMA mode -- set PHY reset */
1681
	if (hw->chip_id == CHIP_ID_YUKON_LITE &&
1683
	if (hw->chip_id == CHIP_ID_YUKON_LITE &&
1682
	    hw->chip_rev >= CHIP_REV_YU_LITE_A3)
1684
	    hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
1683
		skge_write32(hw, B2_GP_IO,
1685
		reg = skge_read32(hw, B2_GP_IO);
1684
			     (skge_read32(hw, B2_GP_IO) | GP_DIR_9 | GP_IO_9));
1686
		reg |= GP_DIR_9 | GP_IO_9;
1687
		skge_write32(hw, B2_GP_IO, reg);
1688
	}
1685
1689
1686
	/* hard reset */
1690
	/* hard reset */
1687
	skge_write32(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
1691
	skge_write32(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
Lines 1689-1698 static void yukon_mac_init(struct skge_h Link Here
1689
1693
1690
	/* WA code for COMA mode -- clear PHY reset */
1694
	/* WA code for COMA mode -- clear PHY reset */
1691
	if (hw->chip_id == CHIP_ID_YUKON_LITE &&
1695
	if (hw->chip_id == CHIP_ID_YUKON_LITE &&
1692
	    hw->chip_rev >= CHIP_REV_YU_LITE_A3)
1696
	    hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
1693
		skge_write32(hw, B2_GP_IO,
1697
		reg = skge_read32(hw, B2_GP_IO);
1694
			     (skge_read32(hw, B2_GP_IO) | GP_DIR_9)
1698
		reg |= GP_DIR_9;
1695
			     & ~GP_IO_9);
1699
		reg &= ~GP_IO_9;
1700
		skge_write32(hw, B2_GP_IO, reg);
1701
	}
1696
1702
1697
	/* Set hardware config mode */
1703
	/* Set hardware config mode */
1698
	reg = GPC_INT_POL_HI | GPC_DIS_FC | GPC_DIS_SLEEP |
1704
	reg = GPC_INT_POL_HI | GPC_DIS_FC | GPC_DIS_SLEEP |
Lines 1803-1822 static void yukon_stop(struct skge_port Link Here
1803
	struct skge_hw *hw = skge->hw;
1809
	struct skge_hw *hw = skge->hw;
1804
	int port = skge->port;
1810
	int port = skge->port;
1805
1811
1806
	if (hw->chip_id == CHIP_ID_YUKON_LITE &&
1812
	skge_write8(hw, SK_REG(port, GMAC_IRQ_MSK), 0);
1807
	    hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
1813
	yukon_reset(hw, port);
1808
		skge_write32(hw, B2_GP_IO,
1809
			     skge_read32(hw, B2_GP_IO) | GP_DIR_9 | GP_IO_9);
1810
	}
1811
1814
1812
	gma_write16(hw, port, GM_GP_CTRL,
1815
	gma_write16(hw, port, GM_GP_CTRL,
1813
			 gma_read16(hw, port, GM_GP_CTRL)
1816
			 gma_read16(hw, port, GM_GP_CTRL)
1814
			 & ~(GM_GPCR_TX_ENA|GM_GPCR_RX_ENA));
1817
			 & ~(GM_GPCR_TX_ENA|GM_GPCR_RX_ENA));
1815
	gma_read16(hw, port, GM_GP_CTRL);
1818
	gma_read16(hw, port, GM_GP_CTRL);
1816
1819
1820
	if (hw->chip_id == CHIP_ID_YUKON_LITE &&
1821
	    hw->chip_rev >= CHIP_REV_YU_LITE_A3) {
1822
		u32 io = skge_read32(hw, B2_GP_IO);
1823
1824
		io |= GP_DIR_9 | GP_IO_9;
1825
		skge_write32(hw, B2_GP_IO, io);
1826
		skge_read32(hw, B2_GP_IO);
1827
	}
1828
1817
	/* set GPHY Control reset */
1829
	/* set GPHY Control reset */
1818
	skge_write32(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
1830
	skge_write8(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
1819
	skge_write32(hw, SK_REG(port, GMAC_CTRL), GMC_RST_SET);
1831
	skge_write8(hw, SK_REG(port, GMAC_CTRL), GMC_RST_SET);
1820
}
1832
}
1821
1833
1822
static void yukon_get_stats(struct skge_port *skge, u64 *data)
1834
static void yukon_get_stats(struct skge_port *skge, u64 *data)
Lines 2137-2151 static int skge_down(struct net_device * Link Here
2137
2149
2138
	netif_stop_queue(dev);
2150
	netif_stop_queue(dev);
2139
2151
2152
	skge_write8(skge->hw, SK_REG(skge->port, LNK_LED_REG), LED_OFF);
2153
	if (hw->chip_id == CHIP_ID_GENESIS)
2154
		genesis_stop(skge);
2155
	else
2156
		yukon_stop(skge);
2157
2158
	hw->intr_mask &= ~portirqmask[skge->port];
2159
	skge_write32(hw, B0_IMSK, hw->intr_mask);
2160
2140
	/* Stop transmitter */
2161
	/* Stop transmitter */
2141
	skge_write8(hw, Q_ADDR(txqaddr[port], Q_CSR), CSR_STOP);
2162
	skge_write8(hw, Q_ADDR(txqaddr[port], Q_CSR), CSR_STOP);
2142
	skge_write32(hw, RB_ADDR(txqaddr[port], RB_CTRL),
2163
	skge_write32(hw, RB_ADDR(txqaddr[port], RB_CTRL),
2143
		     RB_RST_SET|RB_DIS_OP_MD);
2164
		     RB_RST_SET|RB_DIS_OP_MD);
2144
2165
2145
	if (hw->chip_id == CHIP_ID_GENESIS)
2146
		genesis_stop(skge);
2147
	else
2148
		yukon_stop(skge);
2149
2166
2150
	/* Disable Force Sync bit and Enable Alloc bit */
2167
	/* Disable Force Sync bit and Enable Alloc bit */
2151
	skge_write8(hw, SK_REG(port, TXA_CTRL),
2168
	skge_write8(hw, SK_REG(port, TXA_CTRL),
Lines 3229-3234 static void __devexit skge_remove(struct Link Here
3229
	dev0 = hw->dev[0];
3246
	dev0 = hw->dev[0];
3230
	unregister_netdev(dev0);
3247
	unregister_netdev(dev0);
3231
3248
3249
	skge_write32(hw, B0_IMSK, 0);
3250
	skge_write16(hw, B0_LED, LED_STAT_OFF);
3251
	skge_pci_clear(hw);
3252
	skge_write8(hw, B0_CTST, CS_RST_SET);
3253
3232
	tasklet_kill(&hw->ext_tasklet);
3254
	tasklet_kill(&hw->ext_tasklet);
3233
3255
3234
	free_irq(pdev->irq, hw);
3256
	free_irq(pdev->irq, hw);
Lines 3237-3243 static void __devexit skge_remove(struct Link Here
3237
	if (dev1)
3259
	if (dev1)
3238
		free_netdev(dev1);
3260
		free_netdev(dev1);
3239
	free_netdev(dev0);
3261
	free_netdev(dev0);
3240
	skge_write16(hw, B0_LED, LED_STAT_OFF);
3262
3241
	iounmap(hw->regs);
3263
	iounmap(hw->regs);
3242
	kfree(hw);
3264
	kfree(hw);
3243
	pci_set_drvdata(pdev, NULL);
3265
	pci_set_drvdata(pdev, NULL);
Lines 3256-3262 static int skge_suspend(struct pci_dev * Link Here
3256
			struct skge_port *skge = netdev_priv(dev);
3278
			struct skge_port *skge = netdev_priv(dev);
3257
			if (netif_running(dev)) {
3279
			if (netif_running(dev)) {
3258
				netif_carrier_off(dev);
3280
				netif_carrier_off(dev);
3259
				skge_down(dev);
3281
				if (skge->wol)
3282
					netif_stop_queue(dev);
3283
				else
3284
					skge_down(dev);
3260
			}
3285
			}
3261
			netif_device_detach(dev);
3286
			netif_device_detach(dev);
3262
			wol |= skge->wol;
3287
			wol |= skge->wol;

Return to bug 100258