Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 26 Mar 2016 17:20:12 +0300
From:      Guy Yur <guyyur@gmail.com>
To:        freebsd-arm <freebsd-arm@freebsd.org>
Subject:   ODROID C1+ dwc doesn't pass rx multicast ipv6 packets unless in promiscuous mode
Message-ID:  <CAC67Hz8GJK6roWdQ80LssDAxOmv0fD4xzm0PZsn89V6dLmWu5Q@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi,

I am running rtadvd on my ODROID C1+ and router solicitation messages
sent from other hosts are not seen in tcpdump unless I put the NIC in
promiscuous mode.

I was able to pass the multicast packets by switching to the NetBSD
dwc_gmac driver registers AWIN_GMAC_MAC_HTHIGH, AWIN_GMAC_MAC_HTLOW
instead of HASH_TABLE_REG(n) and using only the upper 6 bits instead
of the upper 8 bits.

http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/dev/ic/dwc_gmac.c?only_with_tag=MAIN

The linux driver stmmac only uses HASH_TABLE_REG(n) (0x500 + (0x4 * n))
if the hash table size is 128 or 256.
If the hash table size is 64 it uses AWIN_GMAC_MAC_HTHIGH (0x8)
and AWIN_GMAC_MAC_HTLOW (0xc).
The hash table size defaults to 64 and can be overridden from
dts snps,multicast-filter-bins.
socfpga.dtsi defines it as 256 on linux so the Altera Cyclone
has 8 bits and if_dwc works for it but not for the ODROID C1+
which only has 6 bits.

Guy



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAC67Hz8GJK6roWdQ80LssDAxOmv0fD4xzm0PZsn89V6dLmWu5Q>