Marvell Technology Group Ltd. Yukon EC Ultra
Pyun YongHyeon
pyunyh at gmail.com
Thu Mar 27 23:53:52 PDT 2008
On Thu, Mar 27, 2008 at 01:52:41PM +0200, Danny Braniss wrote:
> > On Thu, Mar 27, 2008 at 01:32:46PM +0200, Danny Braniss wrote:
> > > > On Thu, Mar 27, 2008 at 12:57:31PM +0200, Danny Braniss wrote:
> > > > > Hi,
> > > > > Under load, the msk has problems, with hw.msk.legacy_intr=1 and 0.
> > > > > with = 1, i get
> > > > > TCP segementation error
> > > > > watchdog timeout
> > > > > with = 0,
> > > > > Tx MAC parity error
> > > > > watchdog timeout
> > > > >
> > > >
> > > > Would you show me verbosed boot messages related with msk(4)/e1000phy(4)?
> > > >
> > > mskc0: <Marvell Yukon 88E8056 Gigabit Ethernet> port 0xc800-0xc8ff mem
> > > 0xfeafc000-0xfeafffff irq 17 at device 0.0 on pci1
> > > mskc0: Reserved 0x4000 bytes for rid 0x10 type 3 at 0xfeafc000
> > > mskc0: MSI count : 1
> > > mskc0: attempting to allocate 1 MSI vectors (1 supported)
> > > msi: routing MSI IRQ 256 to vector 52
> > > mskc0: using IRQ 256 for MSI
> > > mskc0: RAM buffer size : 128KB
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Hmm, I don't think EC Ultra have that much of RAM buffer.
> > > mskc0: Port 0 : Rx Queue 85KB(0x00000000:0x000153ff)
> > > mskc0: Port 0 : Tx Queue 43KB(0x00015400:0x0001ffff)
> > > msk0: <Marvell Technology Group Ltd. Yukon EC Ultra Id 0xb4 Rev 0x03> on mskc0
> > > msk0: bpf attached
> > > msk0: Ethernet address: 00:1e:8c:6d:5c:fe
> > > miibus0: <MII bus> on msk0
> > > e1000phy0: <Marvell 88E1149 Gigabit PHY> PHY 0 on miibus0
> > > e1000phy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseTX-FDX,
> > > auto
> > > mskc0: [MPSAFE]
> > > mskc0: [FILTER]
> > >
> > > is this enough?
> >
> > Yes, it seems that 88E8056/88E1149 PHY has several issues. I recall
> > that there had been several reports for this issue. Since nfe(4)
> > with 88E1149 also have some stability issues, e1000phy(4) has lack
> > of required code for 88E1149 PHY. Up to date, I couldn't find a
> > clue, sorry. I'll let you know if I have a code to give it spin.
>
> great and thanks,
>
Please try attached patch and let me know how it goes.
--
Regards,
Pyun YongHyeon
-------------- next part --------------
--- sys/dev/msk/if_msk.c.orig 2008-03-27 13:43:51.000000000 +0900
+++ sys/dev/msk/if_msk.c 2008-03-28 15:17:44.000000000 +0900
@@ -1041,14 +1041,15 @@
{
int next;
int i;
- uint8_t val;
/* Get adapter SRAM size. */
- val = CSR_READ_1(sc, B2_E_0);
- sc->msk_ramsize = (val == 0) ? 128 : val * 4;
+ sc->msk_ramsize = CSR_READ_1(sc, B2_E_0) * 4;
if (bootverbose)
device_printf(sc->msk_dev,
"RAM buffer size : %dKB\n", sc->msk_ramsize);
+
+ if (sc->msk_ramsize == 0)
+ return (0);
/*
* Give receiver 2/3 of memory and round down to the multiple
* of 1024. Tx/Rx RAM buffer size of Yukon II shoud be multiple
@@ -1116,8 +1117,6 @@
} else if (sc->msk_hw_id == CHIP_ID_YUKON_EC_U) {
uint32_t our;
- CSR_WRITE_2(sc, B0_CTST, Y2_HW_WOL_ON);
-
/* Enable all clocks. */
pci_write_config(sc->msk_dev, PCI_OUR_REG_3, 0, 4);
our = pci_read_config(sc->msk_dev, PCI_OUR_REG_4, 4);
@@ -1125,8 +1124,14 @@
PCI_ASPM_INT_FIFO_EMPTY|PCI_ASPM_CLKRUN_REQUEST);
/* Set all bits to 0 except bits 15..12. */
pci_write_config(sc->msk_dev, PCI_OUR_REG_4, our, 4);
- /* Set to default value. */
- pci_write_config(sc->msk_dev, PCI_OUR_REG_5, 0, 4);
+ /* Clear all bits to 0 except bits 28 & 27. */
+ our = pci_read_config(sc->msk_dev, PCI_OUR_REG_5, 4);
+ our &= ~(3 << 27);
+ pci_write_config(sc->msk_dev, PCI_OUR_REG_5, our, 4);
+ /* Workaround for status LE race. */
+ val = CSR_READ_4(sc, B2_GP_IO);
+ val |= 1 << 13;
+ CSR_WRITE_4(sc, B2_GP_IO, val);
}
/* Release PHY from PowerDown/COMA mode. */
pci_write_config(sc->msk_dev, PCI_OUR_REG_1, val, 4);
@@ -3677,21 +3682,28 @@
/* Configure hardware VLAN tag insertion/stripping. */
msk_setvlan(sc_if, ifp);
- if (sc->msk_hw_id == CHIP_ID_YUKON_EC_U) {
- /* Set Rx Pause threshould. */
+ if (sc->msk_ramsize == 0) {
+ /* Set Rx Pause threshold. */
CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, RX_GMF_LP_THR),
MSK_ECU_LLPP);
CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, RX_GMF_UP_THR),
MSK_ECU_ULPP);
if (sc_if->msk_framesize > MSK_MAX_FRAMELEN) {
- /*
- * Set Tx GMAC FIFO Almost Empty Threshold.
- */
- CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_AE_THR),
- MSK_ECU_JUMBO_WM << 16 | MSK_ECU_AE_THR);
- /* Disable Store & Forward mode for Tx. */
- CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
- TX_JUMBO_ENA | TX_STFW_DIS);
+ if (sc->msk_hw_id == CHIP_ID_YUKON_EC_U) {
+ /*
+ * Set Tx GMAC FIFO Almost Empty Threshold.
+ */
+ CSR_WRITE_4(sc,
+ MR_ADDR(sc_if->msk_port,TX_GMF_AE_THR),
+ MSK_ECU_JUMBO_WM << 16 | MSK_ECU_AE_THR);
+ /* Disable Store & Forward mode for Tx. */
+ CSR_WRITE_4(sc,
+ MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
+ TX_JUMBO_ENA | TX_STFW_DIS);
+ } else
+ CSR_WRITE_4(sc,
+ MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
+ TX_JUMBO_ENA | TX_STFW_ENA);
} else {
/* Enable Store & Forward mode for Tx. */
CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T),
@@ -3790,6 +3802,8 @@
int ltpp, utpp;
sc = sc_if->msk_softc;
+ if (sc->msk_ramsize == 0)
+ return;
/* Setup Rx Queue. */
CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_rxq, RB_CTRL), RB_RST_CLR);
More information about the freebsd-stable
mailing list