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 | |
| 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>
| -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) */ |
