diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-12-04 20:08:19 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-12-07 04:58:33 -0500 |
commit | c3905bc4b71ab562acf69765e8c4778bd263b9db (patch) | |
tree | 95010fa74bf41e03efa907589d740416838af2b5 /drivers/net | |
parent | 6771290102c4703dae56bc3e121deb63530e206c (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.c | 11 | ||||
-rw-r--r-- | drivers/net/sky2.h | 1 |
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) */ |