NetBSD 8.0 supports the NVIDIA Tegra K1 (32-bit) system-on-a-chip.
NetBSD 9.0 adds support for the NVIDIA Tegra X1 system-on-a-chip.

The NVIDIA Jetson TK1 development kit is a board based on the Tegra K1 SoC.
The NVIDIA Jetson TX1 development kit is a board based on the Tegra X1 SoC.

  1. Supported hardware
  2. TODO
  3. Generating a boot script
  4. Getting U-Boot
  5. Modesetting
    1. Console
    2. Xorg
  6. GPU (nouveau)
  7. dmesg
  8. Links

Supported hardware

TODO

Generating a boot script

The Tegra kernels need a .dtb for your board to boot. The dtb here was updated on 2017-04-13 and is generated from a Linux 4.10.10 source tree. NVIDIA Jetson TK1 .dtb

$ cat boot.txt
setenv bootargs root=ld0a
fatload mmc 1:1 0x90000000 netbsd.ub
fatload mmc 1:1 ${fdt_addr_r} tegra124-jetson-tk1.dtb
fdt addr ${fdt_addr_r}
bootm 0x90000000 - ${fdt_addr_r}
$ mkubootimage -A arm -C none -O netbsd -T script -a 0 -n "NetBSD/tegra boot" boot.txt boot.scr

Getting U-Boot

Jetson TK1 boards come with Linux4Tegra R19.x installed, which doesn't use U-Boot. The easiest way to get U-Boot is to upgrade to Linux4Tegra R21.x (Linux PC or VM required) following the quick start guide.

U-Boot for Jetson TX1 is available in pkgsrc: sysutils/u-boot-jetson-tx1.

Modesetting

Console

To override the default video mode (auto-detected from display EDID), use the video kernel command-line parameter:

video=<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]

Xorg

To be able to use the mode setting features of the Tegra DRM driver, you must use the xf86-video-modesetting driver. Put this in xorg.conf:

Section "Device"
    Identifier "DRM Modesetting"
    Driver "modesetting"
EndSection

GPU (nouveau)

To enable the GPU, add the following before the bootm command in the boot script:

fdt set /gpu@0,57000000 status okay

For the nouveau driver to load successfully, firmware is required:

You should see the following messages at boot:

nouveau0 at fdt0: GPU
drm kern info: nouveau  [  DEVICE][nouveau0] BOOT0  : 0x0ea000a1
drm kern info: nouveau  [  DEVICE][nouveau0] Chipset: GK20A (NVEA)
drm kern info: nouveau  [  DEVICE][nouveau0] Family : NVE0
drm kern info: nouveau  [     PFB][nouveau0] RAM type: stolen system memory
drm kern info: nouveau  [     PFB][nouveau0] RAM size: 2019 MiB
drm kern info: nouveau  [     PFB][nouveau0]    ZCOMP: 0 tags
drm kern info: nouveau  [  PGRAPH][nouveau0] using external firmware
drm kern info: nouveau  [     DRM] VRAM: 2019 MiB
drm kern info: nouveau  [     DRM] GART: 1048576 MiB
drm kern error: nouveau E[   PFIFO][nouveau0] unsupported engines 0x00000030
drm kern error: nouveau E[     DRM] failed to create ce channel, -22
drm kern info: nouveau  [     DRM] MM: using GRCE for buffer copies
nouveau0: initialized nouveau 1.1.1 20120801 on minor 1

dmesg

Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 7.99.23 (JETSONTK1) #657: Sun Dec 13 12:33:17 AST 2015
    jmcneill@megatron.local:/Users/jmcneill/netbsd/src/sys/arch/evbarm/compile/obj/JETSONTK1
total memory = 2047 MB
avail memory = 2020 MB
sysctl_createv: sysctl_create(machine_arch) returned 17
timecounter: Timecounters tick every 10.000 msec
mainbus0 (root)
cpu0 at mainbus0 core 0: 2316 MHz Cortex-A15 r3p3 (Cortex V7A core)
cpu0: DC enabled IC enabled WB disabled EABT branch prediction enabled
cpu0: 32KB/64B 2-way L1 PIPT Instruction cache
cpu0: 32KB/64B 2-way write-back-locking-C L1 PIPT Data cache
cpu0: 2048KB/64B 16-way write-through L2 PIPT Unified cache
vfp0 at cpu0: NEON MPE (VFP 3.0+), rounding, NaN propagation, denormals
cpu1 at mainbus0 core 1
cpu2 at mainbus0 core 2
cpu3 at mainbus0 core 3
armperiph0 at mainbus0
armgic0 at armperiph0: Generic Interrupt Controller, 192 sources (183 valid)
armgic0: 32 Priorities, 160 SPIs, 7 PPIs, 16 SGIs
armgtmr0 at armperiph0: ARMv7 Generic 64-bit Timer (12000 kHz)
armgtmr0: interrupting on irq 27
timecounter: Timecounter "armgtmr0" frequency 12000000 Hz quality 500
tegrafdt0 at mainbus0
fdt0 at tegrafdt0: NVIDIA Tegra124 Jetson TK1
gic0 at fdt0: GIC
tegralic0 at fdt0: LIC
tegracar0 at fdt0: CAR
clock at fdt0 not configured
tegrampio0 at fdt0: MPIO
tegragpio0 at fdt0: GPIO
gpio0 at tegragpio0 (A): 8 pins
gpio1 at tegragpio0 (B): 8 pins
gpio2 at tegragpio0 (C): 8 pins
gpio3 at tegragpio0 (D): 8 pins
gpio4 at tegragpio0 (E): 8 pins
gpio5 at tegragpio0 (F): 8 pins
gpio6 at tegragpio0 (G): 8 pins
gpio7 at tegragpio0 (H): 8 pins
gpio8 at tegragpio0 (I): 8 pins
gpio9 at tegragpio0 (J): 8 pins
gpio10 at tegragpio0 (K): 8 pins
gpio11 at tegragpio0 (L): 8 pins
gpio12 at tegragpio0 (M): 8 pins
gpio13 at tegragpio0 (N): 8 pins
gpio14 at tegragpio0 (O): 8 pins
gpio15 at tegragpio0 (P): 8 pins
gpio16 at tegragpio0 (Q): 8 pins
gpio17 at tegragpio0 (R): 8 pins
gpio18 at tegragpio0 (S): 8 pins
gpio19 at tegragpio0 (T): 8 pins
gpio20 at tegragpio0 (U): 8 pins
gpio21 at tegragpio0 (V): 8 pins
gpio22 at tegragpio0 (W): 8 pins
gpio23 at tegragpio0 (X): 8 pins
gpio24 at tegragpio0 (Y): 8 pins
gpio25 at tegragpio0 (Z): 8 pins
gpio26 at tegragpio0 (AA): 8 pins
gpio27 at tegragpio0 (BB): 8 pins
gpio28 at tegragpio0 (CC): 8 pins
gpio29 at tegragpio0 (DD): 8 pins
gpio30 at tegragpio0 (EE): 8 pins
simplebus0 at fdt0: regulators
fdt1 at simplebus0
fregulator0 at fdt1: +VDD_MUX
fregulator1 at fdt1: +5V_SYS
fregulator2 at fdt1: +3.3V_SYS
fregulator3 at fdt1: +3.3V_RUN
fregulator4 at fdt1: +3.3V_AVDD_HDMI_AP_GATED
fregulator5 at fdt1: +USB0_VBUS_SW
fregulator6 at fdt1: +5V_USB_HS
fregulator7 at fdt1: +3.3V_LP0
fregulator8 at fdt1: +1.05V_RUN_AVDD_HDMI_PLL
fregulator9 at fdt1: +5V_HDMI_CON
fregulator10 at fdt1: +5V_SATA
fregulator11 at fdt1: +12V_SATA
dma at fdt0 not configured
tegrapmc0 at fdt0: PMC
tegramc0 at fdt0: MC
tegramc0: interrupting on LIC irq 109
tegrai2c0 at fdt0: I2C1
tegrai2c0: interrupting on LIC irq 70
iic0 at tegrai2c0: I2C bus
audio-codec at iic0 addr 0x1c not configured
titemp0 at iic0 addr 0x4c: TMP451
seeprom0 at iic0 addr 0x56: eeprom: size 256
tegrai2c1 at fdt0: I2C2
tegrai2c1: interrupting on LIC irq 116
iic1 at tegrai2c1: I2C bus
tegrai2c2 at fdt0: I2C3
tegrai2c2: interrupting on LIC irq 124
iic2 at tegrai2c2: I2C bus
tegrai2c3 at fdt0: I2C4
tegrai2c3: interrupting on LIC irq 152
iic3 at tegrai2c3: I2C bus
tegrai2c4 at fdt0: I2C5
tegrai2c4: interrupting on LIC irq 85
iic4 at tegrai2c4: I2C bus
as3722pmic0 at iic4 addr 0x40: AMS AS3822
as3722pmic0: default watchdog period is 10 seconds
tegrausbphy0 at fdt0: USB PHY2
tegrausbphy1 at fdt0: USB PHY3
tegrapcie0 at fdt0: PCIE
tegrapcie0: interrupting on LIC irq 130
pci0 at tegrapcie0 bus 0
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
ppb0 at pci0 dev 0 function 0: vendor 10de product 0e12 (rev. 0xa1)
ppb0: PCI Express capability version 2 <Root Port of PCI-E Root Complex> x2 @ 5.0GT/s
ppb0: link is x1 @ 2.5GT/s
pci1 at ppb0 bus 1
pci1: i/o space, memory space enabled, rd/line, wr/inv ok
athn0 at pci1 dev 0 function 0: Atheros AR9285
athn0: rev 2 (1T1R), ROM rev 13, address 00:17:c4:d7:d0:58
athn0: interrupting at LIC irq 130
athn0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
athn0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
ppb1 at pci0 dev 1 function 0: vendor 10de product 0e13 (rev. 0xa1)
ppb1: PCI Express capability version 2 <Root Port of PCI-E Root Complex> x1 @ 5.0GT/s
ppb1: link is x1 @ 2.5GT/s
pci2 at ppb1 bus 2
pci2: i/o space, memory space enabled, rd/line, wr/inv ok
re0 at pci2 dev 0 function 0: RealTek 8168/8111 PCIe Gigabit Ethernet (rev. 0x0c)
re0: interrupting at LIC irq 130
re0: Ethernet address 00:04:4b:2f:51:a2
re0: using 512 tx descriptors
rgephy0 at re0 phy 7: RTL8251 1000BASE-T media interface, rev. 0
rgephy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT-FDX, auto
tegradrm0 at fdt0
drm: Supports vblank timestamp caching Rev 2 (21.10.2013).
drm: No driver support for vblank timestamp query.
tegrafb0 at tegradrm0
tegrafb0: framebuffer at 0x9bc00000, size 1920x1080, depth 32, stride 7680
wsdisplay0 at tegrafb0 kbdmux 1
wsmux1: connecting to wsdisplay0
wsdisplay0: screen 0-3 added (default, vt100 emulation)
tegradrm0: info: registered panic notifier
tegradrm0: initialized tegra 0.1.0 20151108 on minor 0
tegratimer0 at fdt0: Timers
tegratimer0: default watchdog period is 10 seconds
flow-controller at fdt0 not configured
actmon at fdt0 not configured
apbmisc at fdt0 not configured
com0 at fdt0: ns16550a, working fifo
com0: console
com0: interrupting on LIC irq 122
spi at fdt0 not configured
spi at fdt0 not configured
tegrartc0 at fdt0: RTC
tegrafuse0 at fdt0: FUSE
emc at fdt0 not configured
ahcisata0 at fdt0: SATA
ahcisata0: couldn't acquire vddio-supply
ahcisata0: couldn't acquire avdd-supply
ahcisata0: interrupting on LIC irq 55
ahcisata0: AHCI revision 1.31, 2 ports, 32 slots, CAP 0xe620ff01<PSC,SSC,PMD,ISS=0x2=Gen2,SAL,SALP,SSNTF,SNCQ,S64A>
atabus0 at ahcisata0 channel 0
hdaudio0 at fdt0: HDA
hdaudio0: interrupting on LIC irq 113
hdafg0 at hdaudio0: NVIDIA Tegra124 HDMI
hdafg0: HDMI00 8ch: Digital Out [Jack]
hdafg0: 8ch/0ch 44100Hz PCM16*
audio0 at hdafg0: full duplex, playback, capture, mmap, independent
tegraxusbpad0 at fdt0: XUSB PADCTL
sdhc0 at fdt0: SDMMC3
sdhc0: interrupting on LIC irq 51
sdhc0: SDHC 4.0, rev 3, 32-bit ADMA2, 204000 kHz, HS SDR50 SDR104 HS200 1.8V 3.0V 3.3V, re-tuning mode 1, 4096 byte blocks
sdmmc0 at sdhc0 slot 0
sdhc1 at fdt0: SDMMC4
sdhc1: interrupting on LIC irq 63
sdhc1: SDHC 4.0, rev 3, 32-bit ADMA2, 204000 kHz, HS SDR50 SDR104 HS200 1.8V 3.0V 3.3V, re-tuning mode 1, 4096 byte blocks
sdmmc1 at sdhc1 slot 0
tegrasoctherm0 at fdt0: SOC_THERM
ahub at fdt0 not configured
ehci0 at fdt0: USB2
ehci0: interrupting on LIC irq 53
ehci0: EHCI version 1.10
ehci0: switching to host mode
usb0 at ehci0: USB revision 2.0
ehci1 at fdt0: USB3
ehci1: interrupting on LIC irq 129
ehci1: EHCI version 1.10
ehci1: switching to host mode
usb1 at ehci1: USB revision 2.0
pmu at fdt0 not configured
timer at fdt0 not configured
simplebus1 at fdt0: clocks
fdt2 at simplebus1
clock at fdt2 not configured
gpio-keys at fdt0 not configured
sound at fdt0 not configured
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
cpu3: 2316 MHz Cortex-A15 r3p3 (Cortex V7A core)
cpu3: DC enabled IC enabled WB disabled EABT branch prediction enabled
cpu3: 32KB/64B 2-way L1 PIPT Instruction cache
cpu3: 32KB/64B 2-way write-back-locking-C L1 PIPT Data cache
cpu3: 2048KB/64B 16-way write-through L2 PIPT Unified cache
vfp3 at cpu3: NEON MPE (VFP 3.0+), rounding, NaN propagation, denormals
cpu1: 2316 MHz Cortex-A15 r3p3 (Cortex V7A core)
cpu1: DC enabled IC enabled WB disabled EABT branch prediction enabled
cpu1: 32KB/64B 2-way L1 PIPT Instruction cache
cpu1: 32KB/64B 2-way write-back-locking-C L1 PIPT Data cache
cpu1: 2048KB/64B 16-way write-through L2 PIPT Unified cache
vfp1 at cpu1: NEON MPE (VFP 3.0+), rounding, NaN propagation, denormals
cpu2: 2316 MHz Cortex-A15 r3p3 (Cortex V7A core)
cpu2: DC enabled IC enabled WB disabled EABT branch prediction enabled
cpu2: 32KB/64B 2-way L1 PIPT Instruction cache
cpu2: 32KB/64B 2-way write-back-locking-C L1 PIPT Data cache
cpu2: 2048KB/64B 16-way write-through L2 PIPT Unified cache
vfp2 at cpu2: NEON MPE (VFP 3.0+), rounding, NaN propagation, denormals
uhub0 at usb0: Tegra EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
uhub0: 1 port with 1 removable, self powered
ahcisata0 port 0: device present, speed: 3.0Gb/s
uhub1 at usb1: Tegra EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
uhub1: 1 port with 1 removable, self powered
sdhc1: cmd timeout error
IPsec: Initialized Security Association Processing.
ld0 at sdmmc1: <0x45:0x0100:SEM16G:0x00:0x0301ff34:0x000>
ld0: 15028 MB, 7633 cyl, 64 head, 63 sec, 512 bytes/sect x 30777344 sectors
ld0: GPT GUID: a81e231f-7b1c-c564-1473-5ac55e4b7963
dk0 at ld0: "APP", 29360128 blocks at 94208, type: <unknown>
dk1 at ld0: "DTB", 8192 blocks at 29454336, type: <unknown>
ld1 at sdmmc0dk2 at ld0: "EFI", 131072 blocks at 29462528, type: <unknown>
: <0x27:0x5048:SD64G:0x30:0x01ce4def:0x0dc>
dk3 at ld0: "USP", 8192 blocks at 29593600, type: <unknown>
dk4 at ld0: "TP1", 8192 blocks at 29601792, type: <unknown>
dk5 at ld0: "TP2", 8192 blocks at 29609984, type: <unknown>
dk6 at ld0: "TP3", 8192 blocks at 29618176, type: <unknown>
dk7 at ld0: "WB0", 4096 blocks at 29626368, type: <unknown>
dk8 at ld0: "UDA", 1142784 blocks at 29630464, type: <unknown>
ld0: 8-bit width, HS200, 200.000 MHz
ld1: 59504 MB, 7585 cyl, 255 head, 63 sec, 512 bytes/sect x 121864192 sectors
ld1: 4-bit width, SDR104, 204.000 MHz
wd0 at atabus0 drive 0
wd0: <OCZ-AGILITY3>
wd0: drive supports 16-sector PIO transfers, LBA48 addressing
wd0: 111 GB, 232581 cyl, 16 head, 63 sec, 512 bytes/sect x 234441648 sectors
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 6 (Ultra/133)
wd0(ahcisata0:0:0): using PIO mode 4, DMA mode 2, Ultra-DMA mode 6 (Ultra/133) (using DMA)
uhidev0 at uhub1 port 1 configuration 1 interface 0
uhidev0: Logitech USB Receiver, rev 2.00/29.00, addr 2, iclass 3/1
ukbd0 at uhidev0: 8 modifier keys, 6 key codes
wskbd0 at ukbd0 mux 1
wskbd0: connecting to wsdisplay0
uhidev1 at uhub1 port 1 configuration 1 interface 1
uhidev1: Logitech USB Receiver, rev 2.00/29.00, addr 2, iclass 3/1
uhidev1: 17 report ids
ums0 at uhidev1 reportid 2: 16 buttons, W and Z dirs
wsmouse0 at ums0 mux 0
uhid0 at uhidev1 reportid 3: input=4, output=0, feature=0
uhid1 at uhidev1 reportid 4: input=1, output=0, feature=0
uhid2 at uhidev1 reportid 16: input=6, output=6, feature=0
uhid3 at uhidev1 reportid 17: input=19, output=19, feature=0
boot device: wd0
root on wd0a dumps on wd0b
root file system type: ffs
kern.module.path=/stand/evbarm/7.99.23/modules
WARNING: preposterous TOD clock time
WARNING: using filesystem time
WARNING: CHECK AND RESET THE DATE!

Links

.