ARM64 – Odroid C2 – A Better Ethernet Fix..

The old meson Ethernet fix/patch/hack no longer applies cleanly to the latest (December 1) linux-next, but – fortunately – there is a ‘better’ patch available for the meson8b-dwmac driver itself..

Details can be found in this thread:  http://lists.infradead.org/pipermail/linux-amlogic/2016-November/001675.html

I have applied these patches to the December 1 linux-next tree, on the Odroid C2, and the Ethernet link works correctly, again..

......
meson8b-dwmac c9410000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Link is Up - 1000/Full
...
Fedora 25 (Workstation Edition)
Kernel 4.9.0-rc7-next-20161201-c2 on an aarch64 (ttyAML0)

This is still work-in-progress, but should be available soon as part of the mainline linux-next tree..

Robert Gadsdon.   December 1, 2016

NVIDIA – New Driver – OK with Kernel 4.9..

Just tested the latest NVIDIA driver – 375.20 – and it compiles cleanly with Kernel 4.9-rc5:

 ....................................
Building modules, stage 2.
 MODPOST 4 modules
 CC /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-375.20/kernel/nvidia-drm.mod.o
 LD [M] /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-375.20/kernel/nvidia-drm.ko
 CC /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-375.20/kernel/nvidia-modeset.mod.o
 LD [M] /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-375.20/kernel/nvidia-modeset.ko
 CC /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-375.20/kernel/nvidia-uvm.mod.o
 LD [M] /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-375.20/kernel/nvidia-uvm.ko
 CC /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-375.20/kernel/nvidia.mod.o
 LD [M] /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-375.20/kernel/nvidia.ko
make[2]: Leaving directory '/usr/src/linux-4.9-rc5'
make[1]: Leaving directory '/usr/src/linux-4.9-rc5'

Apart from Kernel 4.9 support, the driver is now compatible with the latest Xorg server – 1.19 – which removes the need for the ‘Xorg downgrade workaround‘ with Fedora 25.

More details of the new driver are here:  http://www.nvidia.com/download/driverResults.aspx/111596/en-us

Robert Gadsdon.  November 18, 2016.

ARM64 – Odroid C2 – Boots with Linux-Next..

The ‘linux-next’ kernel branch has included the meson/gxbb mmc driver for some time, but the boot process hung on root disk access.     I tested with the latest (November 17) version, and this time, the boot process completed successfully:

Fedora 25 (Workstation Edition)
Kernel 4.9.0-rc5-next-20161117-c2 on an aarch64 (ttyAML0)

The only patch I applied was the meson_ethernet_tx one (see previous article – http://rglinuxtech.com/?p=1844), as this fix is still work-in-progress..

This time, usb gave a tombstone during the boot process, but lsusb actually showed the root hubs, although no connected devices were recognised:

# lsusb
Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

The development of C2 support on u-boot and the kernel itself has been somewhat spasmodic, as there were supporting patches for u-boot months ago, but for some reason these were never accepted, and the mmc kernel driver was completely re-written..    I would speculate that ‘full’ support – in u-boot and the mainline kernel – will probably be achieved by the time the 4.10 kernel is released..

Robert Gadsdon.   November 17, 2016.

VMware – 12.5.2 Released – Still Broken With Kernel 4.9..

Just updated the test system to VMware Workstation Pro 12.5.2, and it still fails to compile with Kernel 4.9-rc5

I have – so far – been unable to find any other patches for this issue, but fortunately the nasty hack I documented in the article for 4.9-rc4 still works.. http://rglinuxtech.com/?p=1838

The release notes for 12.5.2 are here:  http://pubs.vmware.com/Release_Notes/en/workstation/12pro/workstation-1252-release-notes.html

Robert Gadsdon.   November 14, 2016.

ARM64 – Odroid C2 – Ethernet Fix, at Last..

Thanks to Jerome Brunet, there is now a fix for the long-standing Ethernet hang problem on the C2..   Details are here:   http://lists.infradead.org/pipermail/linux-amlogic/2016-November/001538.html

The patch is an attachment – named ‘attachment.bin‘, and so will need to be renamed to something appropriate..     I applied this to the 4.9-rc3-derived version of the C2 patched kernel, from https://git.kernel.org/cgit/linux/kernel/git/khilman/linux-amlogic.git/log/?h=v4.10/integ..    There is a ‘newer’ branch – ‘for-next‘ – but for some reason this does not include the Meson/GXBB MMC driver, and so is fairly useless..

With this patch, the Ethernet link is staying active at full speed, as it should..

Robert Gadsdon.   November 9, 2016.

Kernel – 4.9-rc3 – NVIDIA Patch still works, and Fix for VMware 12.5.1?

Updated the test system to Kernel 4.9-rc3, and the patch for NVIDIA mentioned in my article for -rc2 still works OK..     I Compiled 370.28 and 375.10 successfully..

As I could not find any patches for VMware – and the latest version 12.5.1 still fails to compile, I created a nasty hack myself..

Warning – This is not an official patch, and I am not an expert in kernel code, but I applied this to vmmon and vmnet, and both compile OK, and load/run, on Kernel 4.9-rc3..

In vmnet-only/userif.c, around line 113, change

#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
    retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
#else
    retval = get_user_pages(current, current->mm, addr,
                1, 1, 0, &page, NULL);
#endif

to

#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
     retval = get_user_pages(addr, 1, 0, &page, NULL);
#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
     retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
#else
     retval = get_user_pages(current, current->mm, addr,
                 1, 1, 0, &page, NULL);
#endif
#endif

– and in vmmon-only/linux/hostif.c, around line 1162, change

#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
   retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);
#else
   retval = get_user_pages(current, current->mm, (unsigned long)uvAddr,
                           numPages, 0, 0, ppages, NULL);
#endif

to

#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
   retval = get_user_pages((unsigned long)uvAddr, numPages, 0, ppages, NULL);
#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
   retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);
#else
   retval = get_user_pages(current, current->mm, (unsigned long)uvAddr,
                           numPages, 0, 0, ppages, NULL);
#endif
#endif

Use at your own risk!

Robert Gadsdon.  October 29, 2016.

Kernel – 4.9-rc2 Breaks VMware and NVIDIA – Patch for NVIDIA..

Updated the test system to Kernel 4.9-rc2, and both VMware (12.5.0) and NVIDIA (370.28 and 375.10) failed to compile..

Fedora 25 (Workstation Edition)
Kernel 4.9.0-rc2 on an x86_64 (ttyS0)
..............
# uname -a
Linux rgtest 4.9.0-rc2 #1 SMP Sun Oct 23 20:33:10 PDT 2016 x86_64 x86_64 x86_64 GNU/Linux

NVIDIA compile fail:

..............
/home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia/os-mlock.c:120:55: error: passing argument 5 of ‘get_user_pages’ from incompatible pointer type [-Werror=incompatible-pointer-types]
 page_count, write, force, user_pages, NULL);
 ^~~~~~~~~~
In file included from /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/common/inc/nv-pgprot.h:17:0,
 from /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/common/inc/nv-linux.h:17,
 from /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia/os-mlock.c:15:
/usr/src/linux-4.9-rc2/include/linux/mm.h:1282:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
 long get_user_pages(unsigned long start, unsigned long nr_pages,
 ^~~~~~~~~~~~~~
In file included from /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/common/inc/nv-linux.h:18:0,
 from /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia/os-mlock.c:15:
/home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/common/inc/nv-mm.h:45:41: error: too many arguments to function ‘get_user_pages’
 #define NV_GET_USER_PAGES get_user_pages
 ^
/home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia/os-mlock.c:119:11: note: in expansion of macro ‘NV_GET_USER_PAGES’
 ret = NV_GET_USER_PAGES((unsigned long)address,
 ^~~~~~~~~~~~~~~~~
In file included from /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/common/inc/nv-pgprot.h:17:0,
 from /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/common/inc/nv-linux.h:17,
 from /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia/os-mlock.c:15:
/usr/src/linux-4.9-rc2/include/linux/mm.h:1282:6: note: declared here
 long get_user_pages(unsigned long start, unsigned long nr_pages,
 ^~~~~~~~~~~~~~
cc1: some warnings being treated as errors
/usr/src/linux-4.9-rc2/scripts/Makefile.build:290: recipe for target '/home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia/os-mlock.o' failed
.......................

Thanks to Flex1911 on the DevTalk forum, there is already a patch for the NVIDIA problem:  https://devtalk.nvidia.com/default/topic/972761/linux/linux-4-9-git-rc1-375-10-build-errors/    This was actually for a later 4.9rc1 git version, but I have applied it to 370.28, and this now compiles successfully on 4.9-rc2..:

 ..........................
Building modules, stage 2.
 MODPOST 4 modules
 CC /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia-drm.mod.o
 LD [M] /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia-drm.ko
 CC /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia-modeset.mod.o
 LD [M] /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia-modeset.ko
 CC /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia-uvm.mod.o
 LD [M] /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia-uvm.ko
 CC /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia.mod.o
 LD [M] /home/rgadsdon/kernel/NVIDIA-Linux-x86_64-370.28/kernel/nvidia.ko
make[2]: Leaving directory '/usr/src/linux-4.9-rc2'
make[1]: Leaving directory '/usr/src/linux-4.9-rc2'

VMware compile fail:

CC [M] /tmp/modconfig-erKppl/vmmon-only/common/cpuid.o
/tmp/modconfig-erKppl/vmmon-only/linux/hostif.c: In function ‘HostIFGetUserPages’:
/tmp/modconfig-erKppl/vmmon-only/linux/hostif.c:1166:67: error: passing argument 5 of ‘get_user_pages’ from incompatible pointer type [-Werror=incompatible-pointer-types]
 retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);
 ^~~~~~
In file included from /tmp/modconfig-erKppl/vmmon-only/./include/compat_page.h:23:0,
 from /tmp/modconfig-erKppl/vmmon-only/linux/hostif.c:32:
./include/linux/mm.h:1282:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
 long get_user_pages(unsigned long start, unsigned long nr_pages,
 ^~~~~~~~~~~~~~
/tmp/modconfig-erKppl/vmmon-only/linux/hostif.c:1166:13: error: too many arguments to function ‘get_user_pages’
 retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);
 ^~~~~~~~~~~~~~
In file included from /tmp/modconfig-erKppl/vmmon-only/./include/compat_page.h:23:0,
 from /tmp/modconfig-erKppl/vmmon-only/linux/hostif.c:32:
./include/linux/mm.h:1282:6: note: declared here
 long get_user_pages(unsigned long start, unsigned long nr_pages,
 ^~~~~~~~~~~~~~
cc1: some warnings being treated as errors
scripts/Makefile.build:290: recipe for target '/tmp/modconfig-erKppl/vmmon-only/linux/hostif.o' failed
make[2]: *** [/tmp/modconfig-erKppl/vmmon-only/linux/hostif.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/tmp/modconfig-erKppl/vmmon-only/linux/driver.c:1283:1: warning: always_inline function might not be inlinable [-Wattributes]
 LinuxDriverSyncReadTSCs(uint64 *delta) // OUT: TSC max - TSC min
 ^~~~~~~~~~~~~~~~~~~~~~~
Makefile:1482: recipe for target '_module_/tmp/modconfig-erKppl/vmmon-only' failed
make[1]: *** [_module_/tmp/modconfig-erKppl/vmmon-only] Error 2
make[1]: Leaving directory '/usr/src/linux-4.9-rc2'
Makefile:120: recipe for target 'vmmon.ko' failed
make: *** [vmmon.ko] Error 2
make: Leaving directory '/tmp/modconfig-erKppl/vmmon-only'
make: Entering directory '/tmp/modconfig-erKppl/vmnet-only'
Using kernel build system.
/usr/bin/make -C /lib/modules/4.9.0-rc2/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
 MODULEBUILDDIR= modules
make[1]: Entering directory '/usr/src/linux-4.9-rc2'
 CC [M] /tmp/modconfig-erKppl/vmnet-only/driver.o
 CC [M] /tmp/modconfig-erKppl/vmnet-only/hub.o
 CC [M] /tmp/modconfig-erKppl/vmnet-only/userif.o
 CC [M] /tmp/modconfig-erKppl/vmnet-only/netif.o
/tmp/modconfig-erKppl/vmnet-only/userif.c: In function ‘UserifLockPage’:
/tmp/modconfig-erKppl/vmnet-only/userif.c:117:43: error: passing argument 5 of ‘get_user_pages’ from incompatible pointer type [-Werror=incompatible-pointer-types]
 retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
 ^
In file included from ./include/linux/highmem.h:7:0,
 from /tmp/modconfig-erKppl/vmnet-only/userif.c:26:
./include/linux/mm.h:1282:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
 long get_user_pages(unsigned long start, unsigned long nr_pages,
 ^~~~~~~~~~~~~~
/tmp/modconfig-erKppl/vmnet-only/userif.c:117:13: error: too many arguments to function ‘get_user_pages’
 retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
 ^~~~~~~~~~~~~~
In file included from ./include/linux/highmem.h:7:0,
 from /tmp/modconfig-erKppl/vmnet-only/userif.c:26:
./include/linux/mm.h:1282:6: note: declared here
 long get_user_pages(unsigned long start, unsigned long nr_pages,
 ^~~~~~~~~~~~~~
cc1: some warnings being treated as errors
scripts/Makefile.build:290: recipe for target '/tmp/modconfig-erKppl/vmnet-only/userif.o' failed
make[2]: *** [/tmp/modconfig-erKppl/vmnet-only/userif.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from ./include/linux/pci.h:35:0,
 from /tmp/modconfig-erKppl/vmnet-only/compat_netdevice.h:27,
 from /tmp/modconfig-erKppl/vmnet-only/netif.c:43:
./include/linux/pci_ids.h:2253:0: warning: "PCI_VENDOR_ID_VMWARE" redefined
 #define PCI_VENDOR_ID_VMWARE 0x15ad
 
In file included from /tmp/modconfig-erKppl/vmnet-only/net.h:38:0,
 from /tmp/modconfig-erKppl/vmnet-only/vnetInt.h:26,
 from /tmp/modconfig-erKppl/vmnet-only/netif.c:42:
/tmp/modconfig-erKppl/vmnet-only/vm_device_version.h:56:0: note: this is the location of the previous definition
 #define PCI_VENDOR_ID_VMWARE 0x15AD
 
Makefile:1482: recipe for target '_module_/tmp/modconfig-erKppl/vmnet-only' failed
make[1]: *** [_module_/tmp/modconfig-erKppl/vmnet-only] Error 2
make[1]: Leaving directory '/usr/src/linux-4.9-rc2'
Makefile:120: recipe for target 'vmnet.ko' failed
make: *** [vmnet.ko] Error 2
make: Leaving directory '/tmp/modconfig-erKppl/vmnet-only'
Unable to install all modules. See log for details.

The ‘get_user_pages’ error sounded very familiar, and appears to be yet another change to that function, as mentioned in the notes for 4.9-rc2:

Lorenzo Stoakes (10):
      mm: remove write/force parameters from __get_user_pages_locked()
      mm: remove write/force parameters from __get_user_pages_unlocked()
      mm: replace get_user_pages_unlocked() write/force parameters
with gup_flags
      mm: replace get_user_pages_locked() write/force parameters with gup_flags
      mm: replace get_vaddr_frames() write/force parameters with gup_flags
      mm: replace get_user_pages() write/force parameters with gup_flags
      mm: replace get_user_pages_remote() write/force parameters with gup_flags

This would appear to be relatively simple to fix, and so I will try to find some more references, and do some more testing…

Robert Gadsdon.   October 23, 2016

 

ARM64 – Odroid C2 – Hack to Fix Ethernet Hangs..

I had been constantly frustrated by the Odroid C2 meson8b-dwmac Ethernet ‘hang’ problem, which has persisted over (at least..) eight different ‘patched kernel’ versions that I have tested..    The network link hung/stopped after a short time at full (1000Mbps) speed, and also – sometimes after a bit longer – at reduced (100Mbps) speed..

The driver does show some issues, when loading:

...................
[ 328.680810] meson8b-dwmac c9410000.ethernet: no reset control found
[ 328.684054] stmmac - user ID: 0x11, Synopsys ID: 0x37
[ 328.687734] Ring mode enabled
[ 328.689457] DMA HW capability register supported
[ 328.692650] Normal descriptors
[ 328.694454] RX Checksum Offload Engine supported
[ 328.697814] COE Type 2
[ 328.698934] TX Checksum insertion supported
[ 328.701866] Wake-Up On Lan supported
[ 328.704196] Enable RX Mitigation via HW Watchdog Timer
...........................
[ 328.718634] libphy: stmmac: probed
[ 328.718657] eth0: PHY ID 001cc916 at 0 IRQ POLL (stmmac-0:00) active
[ 328.720164] eth0: PHY ID 001cc916 at 7 IRQ POLL (stmmac-0:07)
.....................
[ 328.732305] eth0: device MAC address 00:1e:06:33:13:6e
[ 328.801693] meson8b-dwmac c9410000.ethernet eth0: PTP support cannot init.
......................

After more testing (with the latest patched 4.9-rc1 Kernel), I tried turning off the flow control, to see if this made any difference..   At full speed, the network still hung, but at reduced speed the network link stayed up – although at a much reduced throughput, as expected..

After boot, I used   # ethtool -s eth0 speed 100 duplex full autoneg off   to get a working/slow network..

[ 346.559583] Link is Down
[ 347.219302] meson8b-dwmac c9410000.ethernet eth0: Link is Down
[ 350.291179] meson8b-dwmac c9410000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
[ 350.946577] Link is Up - 100/Full

Using this, I have managed to do a complete Fedora 24 – 25 Upgrade on the C2, over the network..

Robert Gadsdon.   October 21, 2016.

ARM64 – Odroid C2 – New MMC Driver, Ethernet / USB Still Broken..

After some of the code for the C2 has been removed from various git repositories, there is a new 4.9-rc1-based tree at https://git.kernel.org/cgit/linux/kernel/git/khilman/linux-amlogic.git/?h=v4.10/integ , which now includes the ‘new’ rewritten MMC driver.

To select this, choose ‘Amlogic S905/GX* SD/MMC Host Controller support (MMC_MESON_GX)‘ in the kernel config..

......
Fedora 24 (Workstation Edition)
Kernel 4.9.0-rc1-c2 on an aarch64 (ttyAML0)
...............
# uname -a
Linux rgc2 4.9.0-rc1-c2 #1 SMP PREEMPT Tue Oct 18 17:26:37 PDT 2016 aarch64 aarch64 aarch64 GNU/Linux

The C2 booted OK, but MMC is now at /dev/mmcblk0 – not /dev/mmcblk1

.....
mmc0: new HS200 MMC card at address 0001
mmcblk0: mmc0:0001 BGND3R 29.1 GiB
mmcblk0boot0: mmc0:0001 BGND3R partition 1 4.00 MiB
mmcblk0boot1: mmc0:0001 BGND3R partition 2 4.00 MiB
 mmcblk0: p1 p2

So, I changed /etc/fstab to

/dev/mmcblk0p1 / ext4 defaults 1 1

– and changed u-boot bootargs to:

setenv bootargs "root=/dev/mmcblk0p1 rootwait rw"

As before, the Ethernet connection works at first, but then hang/stalls.    Dropping the speed to 100Mbps improves things a bit, but the hang/stall still occurs…

The meson8b-dwmac driver does throw an error, when loading:

[ 19.515508] eth0: device MAC address 00:1e:06:33:13:6e
[ 19.584616] meson8b-dwmac c9410000.ethernet eth0: PTP support cannot init.
[ 19.585002] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 19.776363] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.669797] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 23.713185] meson8b-dwmac c9410000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[ 23.715914] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 24.036288] Link is Up - 1000/Full

I tried enabling PTP support where possible in the kernel config, but there was no change..

One workaround would be to use a USB Ethernet device, but USB still does not work, at all..     # lsusb shows nothing..

Robert Gadsdon.   October 20, 2016.

X86_64 – UP Board – Updated to 4.8, With Sound..

Updated the Intel ‘Cherry Trail’ UP Board to Kernel 4.8.2:

Fedora 25 (Workstation Edition)
Kernel 4.8.2-up on an x86_64 (ttyS0)
......
[root@rgup ~]# uname -a
Linux rgup 4.8.2-up #1 SMP Sat Oct 15 13:16:45 PDT 2016 x86_64 x86_64 x86_64 GNU/Linux
.........
[root@rgup ~]# ll /dev/snd
total 0
drwxr-xr-x 2 root root 60 Oct 15 13:23 by-path
crw-rw---- 1 root audio 116, 2 Oct 15 13:23 controlC0
crw-rw---- 1 root audio 116, 3 Oct 15 13:23 pcmC0D0p
crw-rw---- 1 root audio 116, 1 Oct 15 13:23 seq
crw-rw---- 1 root audio 116, 33 Oct 15 13:23 timer

I used the patched 4.8.0 source from here:  https://github.com/plbossart/sound/tree/byt-cht-hdmi-v4.8, and then applied the ‘incremental’ 4.8.0-4.8.1-4.8.2 patches, to bring it up to date..     The kernel code compiles correctly on ‘later’ gcc versions, now..

Robert Gadsdon.  October 16, 2016