NetBSD on ZotacNano - hpaluch/hpaluch.github.io GitHub Wiki

NetBSD on Zotac Nano PC

Testing NetBSD 11.0_BETA on Zotac Nano CI327 with Intel HD Graphics 500.

Please see ZotacNano for other HW/OS details.

PCI looks like:

nbsd-zotac# pcictl pci0 list -N

000:00:0: Intel Apollo Lake Host Bridge (host bridge, revision 0x0b) [pchb0]
000:02:0: Intel Apollo Lake Graphics (12EU) (VGA display, revision 0x0b) [i915drmkms0]
000:13:2: Intel Apollo Lake Fast SPI (miscellaneous serial bus, revision 0x0b)
000:14:0: Intel Apollo Lake HD Audio (mixed mode multimedia, HD Audio 1.0, revision 0x0b) [hdaudio0]
000:15:0: Intel Apollo Lake TXE HECI1 (miscellaneous communications, revision 0x0b)
000:18:0: Intel Apollo Lake SATA (SATA mass storage, AHCI 1.0, revision 0x0b) [ahcisata0]
000:19:0: Intel Apollo Lake PCIe A0 (PCI bridge, revision 0xfb) [ppb0]
000:19:2: Intel Apollo Lake PCIe A2 (PCI bridge, revision 0xfb) [ppb1]
000:20:0: Intel Apollo Lake PCIe B1 (PCI bridge, revision 0xfb) [ppb2]
000:21:0: Intel Apollo Lake USB Host (xHCI) (USB serial bus, xHCI, revision 0x0b) [xhci0]
000:26:0: Intel product 5ac8 (miscellaneous serial bus, revision 0x0b)
000:28:0: Intel Apollo Lake eMMC (SD Host Controller system, interface 0x01, revision 0x0b) [sdhc0]
000:30:0: Intel product 5ad0 (SD Host Controller system, interface 0x01, revision 0x0b) [sdhc1]
000:31:0: Intel Apollo Lake LPC (ISA bridge, revision 0x0b) [pcib0]
000:31:1: Intel Apollo Lake SMBus (SMBus serial bus, revision 0x0b) [ichsmb0]
001:00:0: Intel Dual Band Wireless AC 3165 (miscellaneous network, revision 0x81) [iwm0]
002:00:0: Realtek Semiconductor 8168/8111 10/100/1000 Ethernet (ethernet network, revision 0x0c) [re0]
003:00:0: Realtek Semiconductor 8168/8111 10/100/1000 Ethernet (ethernet network, revision 0x0c) [re1]

Note: according to https://wiki.gentoo.org/wiki/Intel my Zotac Nano is actually known as "Broxton" ("Goldmont" Celeron CPU), platform "Apollo Lake". So firmware has prefix bxt.

WARNING! NetBSD 11 Beta crashes on i915 DRM driver. Affected image:

Found 2 ways to boot:

  1. append -x (Debug output) to boot command
  2. or disable module entirely with userconf disable i915drmkms

WARNING! Even in case of option 1. there is still problem that it does not work properly (X-Server freezes or reports):

{drm:netbsd:gen8_de_irq_handler.isra.0+0xcac} hotplug event received, stat 0x00000020, dig 0x10001a18, pins 0x00000040, long 0x00000040
{drm:netbsd:intel_hpd_irq_handler+0xea} digital hpd on [ENCODER:119:DDI C] - long
{drm:netbsd:intel_set_cdclk+0x62} Changing CDCLK to 144000 kHz, VCO 1152000 kHz, ref 19200 kHz, bypass 19200 kHz, voltage level 6
{drm:netbsd:gen8_de_irq_handler.isra.0+0xcac} hotplug event received, stat 0x00000020, dig 0x10001a18, pins 0x00000040, long 0x00000040
{drm:netbsd:intel_hpd_irq_handler+0xea} digital hpd on [ENCODER:119:DDI C] - long
{drm:netbsd:intel_reference_shared_dpll+0x86} using PORT PLL C for pipe A
{drm:netbsd:intel_set_cdclk+0x62} Changing CDCLK to 288000 kHz, VCO 1152000 kHz, ref 19200 kHz, bypass 19200 kHz, voltage level 12
{drm:netbsd:intel_audio_codec_enable+0x76} ELD on [CONNECTOR:120:DP-2], [ENCODER:119:DDI C]
Asynchronous wait on fence i915drmkms0:X[552]:2 timed out (hint:0xffffffff807816ec)

But Some interesting pointers:

{drm:netbsd:gen8_de_irq_handler.isra.0+0x2c7} *ERROR* Fault errors on pipe A: 0x00000080
{drm:netbsd:gen8_de_irq_handler.isra.0+0x2c7} *ERROR* Fault errors on pipe A: 0x00000080
{drm:netbsd:gen8_de_irq_handler.isra.0+0x2c7} *ERROR* Fault errors on pipe A: 0x00000080
Asynchronous wait on fence i915drmkms0:X[2268]:132 timed out (hint:0xffffffff807816ec)

However following hint helped:

# /etc/X11/xorg.conf.d/modesetting.conf - fix for: Mesa DRI Intel(R) HD Graphics 500 (APL 2) (0x5a85)
# https://mail-index.netbsd.org/netbsd-users/2022/12/12/msg029351.html
# Copyright RVP
# Depends on kernel DRM
#
Section "Device"
    Identifier  "Card0"
    Driver      "modesetting"
    # Option      "SWcursor" "on"
    # Option      "ShadowFB" "off"
    # Option      "AccelMethod" "none"
EndSection

Which is interesting because it just selects driver (modesetting instead of intel) - which is actually same resolution as on Linux (LEAP 15).

Here is diff for comparison:

$ fgrep LoadModule /var/log/Xorg.0.log | awk '{print $4,$5}' > ~/lm-Xorg.0.log
$ fgrep LoadModule /var/log/Xorg.0.log.old  | awk '{print $4,$5}' > ~/lm-Xorg.0.log.old
$ diff -y lm-Xorg.0.log.old lm-Xorg.0.log

LoadModule: "glx"                                               LoadModule: "glx"
LoadModule: "intel"                                           <
LoadModule: "modesetting"                                       LoadModule: "modesetting"
LoadModule: "vesa"                                            | LoadModule: "glamoregl"
LoadModule: "wsfb"                                            | LoadModule: "fb"
LoadModule: "dri2"                                            <
LoadModule: "kbd"                                               LoadModule: "kbd"
LoadModule: "ws"                                                LoadModule: "ws"

So we can see that wrong configuration (on the left) loads intel and dri2 module.

Now you should be able to proceed with install

Generally I'm not alone, more affected users in the past:

Summary

To get working Intel graphics under NetBSD on Zotac Nano you need to:

  1. Boot with boot -x - to enable tracing messages that avoid early hard crash of kernel
  2. Use provided /etc/X11/xorg.conf.d/modesetting.conf from RVP on mailing list

As special bonus: this Intel driver is not affected by SIGSEGV bug on exit - see thread on https://mail-index.netbsd.org/netbsd-users/2025/12/18/msg033661.html