[CFT] alc(4) QAC AR816x/AR817x ethernet controller support
Dariusz Wierzbicki
dwierzbickijc at gmail.com
Fri Oct 3 19:29:53 UTC 2014
Dnia 2014-10-02, o godz. 14:07:30
Yonghyeon PYUN <pyunyh at gmail.com> napisał(a):
> On Wed, Oct 01, 2014 at 10:36:37AM +0900, Yonghyeon PYUN wrote:
> > On Tue, Sep 30, 2014 at 10:57:41AM +0900, Yonghyeon PYUN wrote:
> > > Hi,
> > > I've added support for QAC AR816x/AR817x ethernet controllers. It
> > > passed my limited testing and I need more testers. You can find
> > > patches from the following URLs.
> > >
> > > http://people.freebsd.org/~yongari/alc/pci.quirk.diff
> > > and
> > > http://people.freebsd.org/~yongari/alc/alc.diff.20140930
> > >
> > > pci.qurik.diff is to workaround silicon bug of AR816x. Without it
> > > MSI/MSIX interrupt wouldn't work. If you just want to use
> > > legacy INTx interrupt you don't have to apply it but you have to
> > > tell alc(4) not to use MSI/MSIX interrupt with tunables(
> > > hw.alc.msi.disable and hw.alc.msix_disable).
> > >
> > > alc.diff.20140930 will add support for AR8161/AR8162/AR8171/AR8172
> > > and E2200 controllers. It supports all hardware features except
> > > RSS. If you have any QAC AR816x/AR817x or old AR813x/AR815x
> > > controllers please test and report how the diff works for you.
> > > Thanks.
> >
> > http://people.freebsd.org/~yongari/alc/pci.quirk.diff
> > http://people.freebsd.org/~yongari/alc/alc.diff.20141001
> >
> > Patch updated to address link establishment issue.
>
> http://people.freebsd.org/~yongari/alc/alc.diff.20141002
> Patch updated again to correct wrong lock assertion.
Hi !
Thanks for your work !
Are your patches only for current ? I tried on 10 stable.
My system:
dw at dw:~ % uname -a
FreeBSD dw 10.1-RC1 FreeBSD 10.1-RC1 #1 r272477M: Fri Oct 3 20:48:05
CEST 2014 dw at dw:/usr/obj/usr/src/sys/DW amd64
I applied your patches (pci.quirk.diff & alc.diff.20141002).
There was a minor problem with alc.diff.20141002 - hunk 1 failed:
@@ -111,17 +111,31 @@
"Atheros AR8152 v1.1 PCIe Fast Ethernet" },
{ VENDORID_ATHEROS, DEVICEID_ATHEROS_AR8152_B2, 6 * 1024,
"Atheros AR8152 v2.0 PCIe Fast Ethernet" },
+ { VENDORID_ATHEROS, DEVICEID_ATHEROS_AR8161, 9 * 1024,
+ "Atheros AR8161 PCIe Gigabit Ethernet" },
+ { VENDORID_ATHEROS, DEVICEID_ATHEROS_AR8162, 9 * 1024,
+ "Atheros AR8161 PCIe Fast Ethernet" },
+ { VENDORID_ATHEROS, DEVICEID_ATHEROS_AR8171, 9 * 1024,
+ "Atheros AR8161 PCIe Gigabit Ethernet" },
+ { VENDORID_ATHEROS, DEVICEID_ATHEROS_AR8172, 9 * 1024,
+ "Atheros AR8161 PCIe Fast Ethernet" },
+ { VENDORID_ATHEROS, DEVICEID_ATHEROS_E2200, 9 * 1024,
+ "Atheros AR8161 PCIe Killer E2200 Gigabit Ethernet" },
{ 0, 0, 0, NULL}
};
-static void alc_aspm(struct alc_softc *, int);
+static void alc_aspm(struct alc_softc *, int, int);
+static void alc_aspm_813x(struct alc_softc *, int);
+static void alc_aspm_816x(struct alc_softc *, int);
static int alc_attach(device_t);
static int alc_check_boundary(struct alc_softc *);
+static void alc_config_msi(struct alc_softc *);
static int alc_detach(device_t);
static void alc_disable_l0s_l1(struct alc_softc *);
static int alc_dma_alloc(struct alc_softc *);
static void alc_dma_free(struct alc_softc *);
static void alc_dmamap_cb(void *, bus_dma_segment_t *, int,
int); +static void alc_dsp_fixup(struct alc_softc *, int);
static int alc_encap(struct alc_softc *, struct mbuf **);
static struct alc_ident *
alc_find_ident(device_t);
I applied that part manually. Compiled and rebooted system.
dmesg | grep alc :
alc0: could not disable Rx/Tx MAC(0x4000cb20)!
alc0: reset timeout(0x4000cb20)!
alc0: could not disable Rx/Tx MAC(0x4000cb20)!
alc0: link state changed to UP
alc0: could not disable Rx/Tx MAC(0x4000cb20)!
alc0: <Qualcomm Atheros AR8161 Gigabit Ethernet> port 0xd000-0xd07f mem
0xf7200000-0xf723ffff irq 18 at device 0.0 on pci3
alc0: reset timeout(0x4000cd00)!
alc0: 11776 Tx FIFO, 12032 Rx FIFO
miibus0: <MII bus> on alc0
alc0: Ethernet address: 74:d4:35:91:32:04
alc0: could not disable Rx/Tx MAC(0x4000cd00)!
alc0: reset timeout(0x4000cd00)!
alc0: <Qualcomm Atheros AR8161 Gigabit Ethernet> port 0xd000-0xd07f mem
0xf7200000-0xf723ffff irq 18 at device 0.0 on pci3
alc0: reset timeout(0x4000ca00)!
alc0: 11776 Tx FIFO, 12032 Rx FIFO
miibus0: <MII bus> on alc0
alc0: Ethernet address: 74:d4:35:91:32:04
alc0: <Qualcomm Atheros AR8161 Gigabit Ethernet> port 0xd000-0xd07f mem
0xf7200000-0xf723ffff irq 18 at device 0.0 on pci3
alc0: PCI device revision : 0x0010
alc0: Chip id/revision : 0xc002
alc0: AR816x revision : 0x2
alc0: 11776 Tx FIFO, 12032 Rx FIFO
alc0: Read request size : 512 bytes.
alc0: TLP payload size : 128 bytes.
alc0: MSIX count : 16
alc0: MSI count : 16
alc0: attempting to allocate 1 MSI-X vectors (16 supported)
alc0: using IRQ 268 for MSI-X
alc0: Using 1 MSIX message(s).
miibus0: <MII bus> on alc0
alc0: bpf attached
alc0: Ethernet address: 74:d4:35:91:32:04
alc0: link state changed to UP
pciconf -vlc :
alc0 at pci0:3:0:0: class=0x020000 card=0xe0001458 chip=0x10911969
rev=0x10 hdr=0x00 vendor = 'Atheros Communications Inc.'
device = 'AR8161 Gigabit Ethernet'
class = network
subclass = ethernet
cap 01[40] = powerspec 3 supports D0 D3 current D0
cap 10[58] = PCI-Express 1 endpoint max data 128(4096) link x1(x1)
speed 2.5(2.5) ASPM disabled(L0s/L1)
cap 05[c0] = MSI supports 16 messages, 64 bit, vector masks
cap 11[d8] = MSI-X supports 16 messages, enabled
Table in map 0x10[0x2000], PBA in map 0x10[0x3000]
ecap 0001[100] = AER 1 0 fatal 0 non-fatal 0 corrected
ecap 0003[180] = Serial 1 ff91320474d435ff
ifconfig :
alc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu
1500
options=c319a<TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MCAST,WOL_MAGIC,VLAN_HWTSO,LINKSTATE>
ether 74:d4:35:91:32:04 inet 192.168.1.3 netmask 0xffffff00 broadcast
192.168.1.255 media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
If you need other data or more testing, let me know.
Kind regards,
Darek
More information about the freebsd-current
mailing list