aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@osdl.org>2006-12-04 20:08:19 -0500
committerJeff Garzik <jeff@garzik.org>2006-12-07 04:58:33 -0500
commitc3905bc4b71ab562acf69765e8c4778bd263b9db (patch)
tree95010fa74bf41e03efa907589d740416838af2b5 /drivers/net
parent6771290102c4703dae56bc3e121deb63530e206c (diff)
[PATCH] sky2: receive queue watermark tweak
This patch makes the receive performance on some systems go from 714MB/s to 941MB/s. It adjusts the watermark of the receive queue to be lower, thereby avoiding excess hardware flow control. This is most important on the systems which have little/no additional buffering. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/sky2.c11
-rw-r--r--drivers/net/sky2.h1
2 files changed, 9 insertions, 3 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index b9f7eb5453f1..a8e096393a41 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -1062,11 +1062,16 @@ static int sky2_rx_start(struct sky2_port *sky2)
1062 sky2->rx_put = sky2->rx_next = 0; 1062 sky2->rx_put = sky2->rx_next = 0;
1063 sky2_qset(hw, rxq); 1063 sky2_qset(hw, rxq);
1064 1064
1065 /* On PCI express lowering the watermark gives better performance */
1066 if (pci_find_capability(hw->pdev, PCI_CAP_ID_EXP))
1067 sky2_write32(hw, Q_ADDR(rxq, Q_WM), BMU_WM_PEX);
1068
1069 /* These chips have no ram buffer?
1070 * MAC Rx RAM Read is controlled by hardware */
1065 if (hw->chip_id == CHIP_ID_YUKON_EC_U && 1071 if (hw->chip_id == CHIP_ID_YUKON_EC_U &&
1066 (hw->chip_rev == CHIP_REV_YU_EC_U_A1 || hw->chip_rev == CHIP_REV_YU_EC_U_B0)) { 1072 (hw->chip_rev == CHIP_REV_YU_EC_U_A1
1067 /* MAC Rx RAM Read is controlled by hardware */ 1073 || hw->chip_rev == CHIP_REV_YU_EC_U_B0))
1068 sky2_write32(hw, Q_ADDR(rxq, Q_F), F_M_RX_RAM_DIS); 1074 sky2_write32(hw, Q_ADDR(rxq, Q_F), F_M_RX_RAM_DIS);
1069 }
1070 1075
1071 sky2_prefetch_init(hw, rxq, sky2->rx_le_map, RX_LE_SIZE - 1); 1076 sky2_prefetch_init(hw, rxq, sky2->rx_le_map, RX_LE_SIZE - 1);
1072 1077
diff --git a/drivers/net/sky2.h b/drivers/net/sky2.h
index 7760545edbf2..a63f6057b2ea 100644
--- a/drivers/net/sky2.h
+++ b/drivers/net/sky2.h
@@ -680,6 +680,7 @@ enum {
680 BMU_FIFO_ENA | BMU_OP_ON, 680 BMU_FIFO_ENA | BMU_OP_ON,
681 681
682 BMU_WM_DEFAULT = 0x600, 682 BMU_WM_DEFAULT = 0x600,
683 BMU_WM_PEX = 0x80,
683}; 684};
684 685
685/* Tx BMU Control / Status Registers (Yukon-2) */ 686/* Tx BMU Control / Status Registers (Yukon-2) */