[[!meta title="NetBSD/evbarm on NVIDIA Tegra"]] 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](https://developer.nvidia.com/jetson-tk1) is a board based on the Tegra K1 SoC. The [NVIDIA Jetson TX1 development kit](https://developer.nvidia.com/jetson-tx1) is a board based on the Tegra X1 SoC. [[!toc levels=2]] # Supported hardware - CPU: Cortex-A15: NVIDIA Tegra K1 (T124) (4-core) - VFP / NEON - CPU frequency scaling - CPU: Cortex-A57: NVIDIA Tegra X1 (T210) (4-core) - VFP / NEON - GIC - ARM generic timer - Clock and reset controller - GPIO controller - MPIO / pinmux controller - Memory controller - Power management controller - I2C controller - UART [[!template id=man name="com" section="4"]] serial console - RTC - Watchdog timer - SDMMC [[!template id=man name="sdhc" section="4"]] controller - USB 2.0 [[!template id=man name="ehci" section="4"]] controller - USB 3.0 [[!template id=man name="xhci" section="4"]] controller - Requires the [[!template id=pkg category="sysutils" name="tegra-firmware"]] package to be installed. - PCI express - SATA [[!template id=man name="ahcisata" section="4"]] controller - HDMI - Framebuffer console - HDMI Audio [[!template id=man name="hdaudio" section="4"]] controller - HDMI CEC - Jetson TK1 - On-board Realtek 8111G [[!template id=man name="re" section="4"]] gigabit ethernet - EEPROM [[!template id=man name="seeprom" section="4"]] (on I2C) - TMP451 [[!template id=man name="titemp" section="4"]] temperature sensor (on I2C) - RF kill switch - Power button - Jetson TX1 - On-board Realtek RTL8153 [[!template id=man name="cdce" section="4"]] gigabit ethernet - AS3722 power management unit - eFUSE - SoC thermal sensors # TODO - Memory controller SMMU support - APB DMA - Audio Hub (AHUB) - GPU (nouveau) - SPI controller - PWM controller - PCIe MSI support - CL-DVFS - LVDS/eDP display output - [[Chromebook|tegra-chromebook]] support # 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](http://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/tegra/tegra124-jetson-tk1.dtb) [[!template id=programlisting text=""" $ 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](http://developer.download.nvidia.com/embedded/L4T/r21_Release_v4.0/l4t_quick_start_guide.txt). U-Boot for Jetson TX1 is available in pkgsrc: [[!template id=pkg category="sysutils" name="u-boot-jetson-tx1"]]. # Modesetting ## Console To override the default video mode (auto-detected from display EDID), use the *video* kernel command-line parameter: [[!template id=programlisting text=""" 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: [[!template id=programlisting text=""" 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: [[!template id=programlisting text=""" fdt set /gpu@0,57000000 status okay """]] For the nouveau driver to load successfully, firmware is required: * Install the [[!template id=pkg category="sysutils" name="tegra-firmware"]] package from pkgsrc. * Extract the contents of [tegra-nouveau-firmware.tar.gz](http://cdn.netbsd.org/pub/NetBSD/misc/jmcneill/tegra/tegra-nouveau-firmware.tar.gz) to ''/libdata/firmware/nouveau''. You should see the following messages at boot: [[!template id=programlisting text=""" 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 [[!template id=programlisting text=""" 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 - [NVIDIA Jetson TK1 development kit](https://developer.nvidia.com/jetson-tk1) - [Hardware documentation](https://developer.nvidia.com/hardware-design-and-development) - [Linux For Tegra](https://developer.nvidia.com/linux-tegra) - [Device Tree](http://www.devicetree.org) .