Hello Guillermo, On 08/11/15(Sun) 17:06, Guillermo Bernaldo de Quiros Maraver wrote: > Hi, good afternoon. > > I don't know if this is the correct list to post the next email so, I'm > sorry if this isn't the correct place. > > My laptop computer wich is an MSI GE70 2QE has a network interface which > currently it seems to be not supported by -current so I tried to port the > device driver to OpenBSD based on the driver from FreeBSD which is similar > and now the network interface is working correctly. Next I paste some > information about the hardware and the device driver: > > 1º Dmesg: > alc0 at pci4 dev 0 function 0 "Attansic Technology E2200" rev 0x13: msi, > address d8:cb:8a:84:db:cc > atphy0 at alc0 phy 0: F1 10/100/1000 PHY, rev. 9 > > 2º Output of ifconfig alc0 > alc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > lladdr d8:cb:8a:84:db:cc > priority: 0 > groups: egress > media: Ethernet autoselect (1000baseT full-duplex,rxpause,txpause) > status: active > inet 192.168.1.7 netmask 0xffffff00 broadcast 192.168.1.255 > 3º full dmesg in the attachment > 4º cvs diff if_alc.c and cvs diff in the attachments. > > I don't know if you're interested to apply the diff's into base but I think > that could be a good idea.
Some comments inline. > alc0: could not disable Rx/Tx MAC(0x40009e00)! Did you investigate what does that mean? > Index: if_alc.c > =================================================================== > RCS file: /cvs/src/sys/dev/pci/if_alc.c,v > retrieving revision 1.35 > diff -u -p -r1.35 if_alc.c > --- if_alc.c 25 Oct 2015 13:04:28 -0000 1.35 > +++ if_alc.c 8 Nov 2015 16:02:09 -0000 > @@ -120,7 +120,8 @@ const struct pci_matchid alc_devices[] = > { PCI_VENDOR_ATTANSIC, PCI_PRODUCT_ATTANSIC_L1D }, > { PCI_VENDOR_ATTANSIC, PCI_PRODUCT_ATTANSIC_L1D_1 }, > { PCI_VENDOR_ATTANSIC, PCI_PRODUCT_ATTANSIC_L2C_1 }, > - { PCI_VENDOR_ATTANSIC, PCI_PRODUCT_ATTANSIC_L2C_2 } > + { PCI_VENDOR_ATTANSIC, PCI_PRODUCT_ATTANSIC_L2C_2 }, > + { PCI_VENDOR_ATTANSIC, PCI_PRODUCT_ATTANSIC_E2200 } > }; > > struct cfattach alc_ca = { > @@ -525,6 +526,7 @@ alc_phy_down(struct alc_softc *sc) > switch (sc->sc_product) { > case PCI_PRODUCT_ATTANSIC_L1D: > case PCI_PRODUCT_ATTANSIC_L1D_1: > + case PCI_PRODUCT_ATTANSIC_E2200: > /* > * GPHY power down caused more problems on AR8151 v2.0. > * When driver is reloaded after GPHY power down, > @@ -783,10 +785,14 @@ alc_attach(struct device *parent, struct > case PCI_PRODUCT_ATTANSIC_L1D_1: > sc->alc_flags |= ALC_FLAG_APS; > /* FALLTHROUGH */ > + case PCI_PRODUCT_ATTANSIC_E2200: > + sc->alc_flags |= ALC_FLAG_AR816X_FAMILY; > + break; > default: > break; > } > - sc->alc_flags |= ALC_FLAG_ASPM_MON | ALC_FLAG_JUMBO; > + //sc->alc_flags |= ALC_FLAG_ASPM_MON | ALC_FLAG_JUMBO; > + sc->alc_flags |= ALC_FLAG_JUMBO; Why did you change this flag? This cannot be committed as-is if this is really needed then you could add a conditional statement based on the product ID. > @@ -797,6 +803,7 @@ alc_attach(struct device *parent, struct > case PCI_PRODUCT_ATTANSIC_L1D_1: > case PCI_PRODUCT_ATTANSIC_L2C_1: > case PCI_PRODUCT_ATTANSIC_L2C_2: > + case PCI_PRODUCT_ATTANSIC_E2200: > sc->alc_max_framelen = 6 * 1024; > break; > } > @@ -2035,7 +2042,9 @@ alc_reset(struct alc_softc *sc) > printf("%s: master reset timeout!\n", sc->sc_dev.dv_xname); > > for (i = ALC_RESET_TIMEOUT; i > 0; i--) { > - if ((reg = CSR_READ_4(sc, ALC_IDLE_STATUS)) == 0) > + reg = CSR_READ_4(sc,ALC_IDLE_STATUS); > + if ((reg & (IDLE_STATUS_RXMAC | IDLE_STATUS_TXMAC | > + IDLE_STATUS_RXQ | IDLE_STATUS_TXQ)) == 0) Isn't this related to the message in your dmesg? > break; > DELAY(10); > } > @@ -2485,6 +2494,7 @@ alc_stop_queue(struct alc_softc *sc) > reg &= ~TXQ_CFG_ENB; > CSR_WRITE_4(sc, ALC_TXQ_CFG, reg); > } > + DELAY(40); > for (i = ALC_TIMEOUT; i > 0; i--) { > reg = CSR_READ_4(sc, ALC_IDLE_STATUS); > if ((reg & (IDLE_STATUS_RXQ | IDLE_STATUS_TXQ)) == 0) > Index: if_alcreg.h > =================================================================== > RCS file: /cvs/src/sys/dev/pci/if_alcreg.h,v > retrieving revision 1.5 > diff -u -p -r1.5 if_alcreg.h > --- if_alcreg.h 27 Nov 2014 14:52:04 -0000 1.5 > +++ if_alcreg.h 8 Nov 2015 16:05:42 -0000 > @@ -1164,6 +1164,7 @@ struct alc_softc { > #define ALC_FLAG_L0S 0x0400 > #define ALC_FLAG_L1S 0x0800 > #define ALC_FLAG_APS 0x1000 > +#define ALC_FLAG_AR816X_FAMILY 0x2000 Please use a tab here, to be coherent with the rest of the defines. > #define ALC_FLAG_DETACH 0x4000 > #define ALC_FLAG_LINK 0x8000 >