Diff for /wikisrc/ports/evbarm/allwinner.mdwn between versions 1.37 and 1.96

version 1.37, 2014/12/07 14:28:37 version 1.96, 2018/11/20 12:05:00
Line 1 Line 1
 [[!meta title="NetBSD/evbarm on Allwinner Technology SoCs"]]  [[!meta title="NetBSD/evbarm on Allwinner Technology SoCs"]]
   
 [[!toc levels=2]]  NetBSD supports many boards based on Allwinner SoCs. Starting with NetBSD 8.0, FDT is used to configure devices. As a result, a large number of boards and configurations can be supported with a single kernel.
   
 # Supported boards  <img src="https://pbs.twimg.com/media/DIRGmsOXcAEJu-j.jpg" width="300">
  - [Banana Pi](http://www.bananapi.org/p/product.html) (BPI)  <img src="https://pbs.twimg.com/media/DJYA7SCXUAEvEQk.jpg" width="300">
  - Cubieboard 2 (CUBIEBOARD)  
  - Cubieboard 4 (ALLWINNER_A80) *NetBSD-current*  
  - Cubietruck (CUBIETRUCK)  
  - [Merrii Hummingbird A31](http://www.merrii.com/en/pla_d.asp?id=172) (HUMMINGBIRD_A31)  
   
 # Supported hardware  [[!toc levels=2]]
  - SoCs  
    - Cortex-A7: A20 (2-core), A31 (4-core), A80  
    - Cortex-A7/A15: A80 (4-core A7 + 4-core A15)  
  - SD/MMC controller (DMA)  
  - DMA controller  
  - GPIO  
    - Configuration using FEX scripts is supported  
  - UART  
  - I2C  
  - P2WI (A31) / RSB (A80)  
  - PMU  
    - AXP209 (A20)  
    - AXP221 (A31)  
    - AXP806 (A80)  
    - AXP809 (A80)  
  - Watchdog timer  
  - RTC  
    - A20/A31: integrated RTC, PCF8563  
    - A80: AC100  
  - Audio codec (A20/A31)  
  - USB host  
    - OHCI  
    - EHCI  
    - OTG (A20)  
  - SATA (A10/A20)  
  - Gigabit Ethernet (GMAC)  
  - HDMI (A20/A31)  
    - DDC / EDID mode detection  
    - Audio support  
  - Framebuffer (A20/A31)  
  - IR receiver (A20/A31)  
   
 # TODO  
  - SoCs  
    - Cortex-A8: A10  
    - Cortex-A7/A15: A80 SMP  
  - OTG (A31)  
  - USB device mode  
  - Bluetooth / WiFi (Cubietruck, Hummingbird A31)  
  - 3G (Hummingbird A31)  
  - SD/MMC UHS-I support (needs sdmmc(4) changes)  
  - TV input (Hummingbird A31)  
  - NAND  
  - Fast Ethernet (EMAC)  
  - IR transmitter (A20)  
   
 # Installation  # Supported SoCs
   
 ## A10 / A20 / A31 based boards  <table>
     <thead>
       <tr>
         <th>Family</th>
         <th>SoC</th>
         <th>NetBSD version</th>
         <th>Example boards</th>
         <th>Notes</th>
       </tr>
     </thead>
     <tbody>
       <tr><td>sun4i</td><td>A10</td><td>8.99.3 and later</td><td><a href="https://www.olimex.com/Products/OLinuXino/A10/A10-OLinuXino-LIME/open-source-hardware">Olimex A10-OLinuXino-LIME</a><td></td></tr>
       <tr><td>sun5i</td><td>A10s</td><td>-</td><td></td></tr>
       <tr><td>sun5i</td><td>A13</td><td>8.99.2 and later</td><td><a href="https://www.olimex.com/Products/OLinuXino/A13/A13-OLinuXino/open-source-hardware">Olimex A13-OLinuXino</a>, <a href="https://www.olimex.com/Products/OLinuXino/A13/A13-OLinuXino-MICRO/open-source-hardware">Olimex A13-OLinuXino-MICRO</a></td></tr>
       <tr><td>sun5i</td><td>GR8</td><td>8.99.5</td><td><a href="https://getchip.com/pages/chippro">C.H.I.P. Pro</a></td><td></td></tr>
       <tr><td>sun5i</td><td>R8</td><td>8.99.2 and later</td><td><a href="https://getchip.com/pages/chip">C.H.I.P.</a>, <a href="https://getchip.com/pages/pocketchip">Pocket C.H.I.P.</a></td><td></td></tr>
       <tr><td>sun6i</td><td>A31</td><td>7.0 and later</td><td><a href="http://linux-sunxi.org/Merrii_Hummingbird_A31">Merrii Hummingbird A31</a></td><td></td></tr>
       <tr><td>sun6i</td><td>A31s</td><td>-</td><td></td><td></td></tr>
       <tr><td>sun7i</td><td>A20</td><td>7.0 and later</td><td><a href="https://linux-sunxi.org/Cubietech_Cubieboard2">Cubietech Cubieboard 2</a>, <a href="https://linux-sunxi.org/Cubietruck">Cubietech Cubietruck</a>, <a href="http://linux-sunxi.org/LeMaker_Banana_Pi">LeMaker Banana Pi</a></td><td></td></tr>
       <tr><td>sun8i</td><td>A23</td><td>-</td><td></td></tr>
       <tr><td>sun8i</td><td>A33</td><td>-</td><td><a href="https://www.olimex.com/Products/OLinuXino/A33/A33-OLinuXino/open-source-hardware">Olimex A33-OLinuXino</a></td></tr>
       <tr><td>sun8i</td><td>R40</td><td>-</td><td><a href="http://www.banana-pi.org/m2u.html">Sinovoip Banana Pi BPI-M2U</a></td></tr>
       <tr><td>sun8i</td><td>A83T</td><td>8.0 and later</td><td><a href="http://www.banana-pi.org/m3.html">Sinovoip Banana Pi BPI-M3</a></td><td></td></tr>
       <tr><td>sun8i</td><td>H2+</td><td>8.0 and later</td><td><a href="http://www.orangepi.org/orangepizero/">Xunlong Orange Pi Zero</a></td><td></td></tr>
       <tr><td>sun8i</td><td>H3</td><td>8.0 and later</td><td><a href="http://nanopi.io/nanopi-neo.html">FriendlyARM NanoPi NEO</a>, <a href="http://www.orangepi.org/orangepiplus2e/">Xunlong Orange Pi Plus 2E</a></td><td></td></tr>
       <tr><td>sun8i</td><td>V3s</td><td>-</td><td><a href="https://www.indiegogo.com/projects/licheepi-zero-6-extensible-linux-module-on-finger-wifi-diy#/">Lichee Pi Zero</a></td><td></td></tr>
       <tr><td>sun9i</td><td>A80</td><td>8.0 and later</td><td><a href="http://linux-sunxi.org/Cubietech_Cubieboard4">Cubietech Cubieboard 4</a></td><td></td></tr>
       <tr><td>sun50i</td><td>A64</td><td>8.99.2 and later</td><td><a href="https://www.pine64.org/?page_id=1194">Pine64</a>, <a href="https://www.pine64.org/?page_id=3707">Pinebook</a></td><td></td></tr>
       <tr><td>sun50i</td><td>H5</td><td>8.99.4 and later</td><td><a href="http://www.friendlyarm.com/index.php?route=product/product&path=69&product_id=180">FriendlyARM NanoPi NEO2, <a href="http://www.friendlyarm.com/index.php?route=product/product&path=69&product_id=196">FriendlyARM NanoPi NEO Plus2</a></td><td></td></tr>
       <tr><td>sun50i</td><td>H6</td><td>8.99.14 and later</td><td><a href="http://www.orangepi.org/OrangePiOneplus/">Orange Pi One Plus</a>, <a href="https://www.pine64.org/?product_cat=pine-h64-boards">Pine H64</a></td></tr>
     </tbody>
   </table>
   
 * Start with an ARMv7 image from *evbarm-earmv7hf/binary/gzimg/* such as *beagleboard.img*  
 * Download a U-Boot build for your board  
   * A10/A20: Download from the linux-sunxi web site <http://dl.linux-sunxi.org/nightly/u-boot-sunxi/u-boot-sunxi/u-boot-sunxi-latest/>  
   * A31: The standard u-boot-sunxi tree doesn't support A31 yet. Until sun6i support is merged, a build is available at <http://dis.invisible.ca/allwinner/a31/  
 * Write the *u-boot-sunxi-with-spl.bin* loader to the base image:  
 [[!template  id=programlisting text="""  
 # dd if=u-boot-sunxi-with-spl.bin of=beagleboard.img bs=1k seek=8 conv=notrunc  
 """]]  
 * Write the image to an SD card.  
 * Copy the kernel (netbsd.ub) for your board to the root of the MS-DOS partition.  
 * Create or edit uEnv.txt on the MS-DOS partition:  
 [[!template  id=programlisting text="""  
 bootargs=root=ld0a  
 uenvcmd=mmc dev 0; mmc rescan; fatload mmc 0:1 82000000 netbsd.ub; bootm 82000000  
 """]]  
   
 ## A80 based boards  # Supported hardware
   
 * Cubieboard 4 SDK (lubuntu) U-Boot env:  Please refer to the [32-bit](https://nxr.netbsd.org/xref/src/sys/arch/evbarm/conf/SUNXI) or [64-bit](https://nxr.netbsd.org/xref/src/sys/arch/evbarm/conf/GENERIC64) kernel configs for the most up-to-date list of supported hardware.
 [[!template  id=programlisting text="""  
 baudrate=115200  
 boot_normal=fatload mmc 0:1 20007800 uimage;bootm 20007800  
 bootcmd=run setargs_cubie boot_normal  
 bootdelay=3  
 console=ttyS0,115200  
 console1=tty1  
 init=/init  
 loglevel=8  
 mmc_root=/dev/mmcblk0p2  
 setargs_cubie=setenv bootargs console=${console1} console=${console} root=${mmc_root} loglevel=${loglevel}  
 stderr=serial  
 stdin=serial  
 stdout=serial  
 """]]  
   
 # Big (endian) fun  <table>
     <thead>
       <tr>
         <th>Device</th>
         <th>Supported</th>
         <th>Notes</th>
       </tr>
     </thead>
     <tbody>
       <tr><td>Audio codec</td><td>Yes</td><td>Supported on sun4i, sun5i, sun6i, sun7i, sun8i-h2+, sun8i-h3, sun50i-h5, sun50i-a64</td></tr>
       <tr><td>CAN controller</td><td>Yes</td><td></td></tr>
       <tr><td>Crypto engine</td><td>-</td><td></td></tr>
       <tr><td>CSI</td><td>-</td><td></td></tr>
       <tr><td>DMA</td><td>Yes</td><td></td></tr>
       <tr><td>Fast Ethernet (sun4i/sun5i/sun7i)</td><td>Yes</td><td></td></tr>
       <tr><td>Framebuffer</td><td>Yes</td><td>Uses simplefb configured by bootloader</td></tr>
       <tr><td>Gigabit Ethernet (sun6i/sun7i/sun9i)</td><td>Yes</td><td></td></tr>
       <tr><td>Gigabit Ethernet (sun8i/sun50i)</td><td>Yes</td><td></td></tr>
       <tr><td>GPIO</td><td>Yes</td><td></td></tr>
       <tr><td>GPU</td><td>-</td><td></td></tr>
       <tr><td>I2C</td><td>Yes</td><td></td></tr>
       <tr><td>I2S/PCM</td><td>Experimental</td><td></td></tr>
       <tr><td>IR transceiver</td><td>-</td><td></td></tr>
       <tr><td>NAND</td><td>Yes</td><td></td></tr>
       <tr><td>P2WI/RSB</td><td>Yes</td><td></td></tr>
       <tr><td>PCIe</td><td>-</td><td>H6</td></tr>
       <tr><td>PWM</td><td>Yes</td><td></td></tr>
       <tr><td>RTC</td><td>Yes</td><td></td></tr>
       <tr><td>SATA</td><td>Yes</td><td></td></tr>
       <tr><td>SD/MMC</td><td>Yes</td><td></td></tr>
       <tr><td>SMP</td><td>Yes</td><td>PSCI</td></tr>
       <tr><td>SPDIF</td><td>-</td><td></td></tr>
       <tr><td>SPI</td><td>Yes</td><td></td></tr>
       <tr><td>Thermal sensors</td><td>Yes</td><td></td></tr>
       <tr><td>Touch screen</td><td>Yes</td><td></td></tr>
       <tr><td>UART</td><td>Yes</td><td></td></tr>
       <tr><td>USB 2.0</td><td>Yes</td><td></td></tr>
       <tr><td>USB 3.0</td><td>Yes</td><td></td></tr>
       <tr><td>USB OTG</td><td>Experimental</td><td></td></tr>
       <tr><td>Watchdog timer</td><td>Yes</td><td></td></tr>
     </tbody>
   </table>
   
 You can run this boards with a little endian (this is the default and implied by above install instructions)  # Installation
 or with a big endian kernel and userland. However, kernel and userland endianness needs to match.  
   
 To build a big endian release (or sets) use   - Download or build **armv7.img** (32-bit) or **arm64.img** (64-bit) from NetBSD -current
 [[!template  id=programlisting text="""  - Write the image to disk: **dd if=armv7.img of=/dev/rld0d bs=1m conv=sync**
 ./build.sh -m evbearmv7hf-eb   - Install a board-specific U-Boot (2017.07 or later) from pkgsrc to the SD card
 """]]    (the `u-boot-sunxi-with-spl.bin`-s are provided by `sysutils/u-boot-<boardname>` packages):
 where -eb means endianness big, hf is hardware floating point support, and earm is the modern "extended" ABI for ARM CPUs, and finally v7 is version 7 of the supported instruction set.    **dd if=/usr/pkg/share/u-boot/&lt;boardname&gt;/u-boot-sunxi-with-spl.bin of=/dev/rld0d bs=1k seek=8 conv=sync**
   
 # FEX scripts  If your SoC has a SATA controller and you would like to install on
   an hard disk and use a SD card only for u-boot please give a look
   to
   [[NetBSD/evbarm install via sysinst(8) on a SATA hard disk, USB stick or (u)SD card|ports/evbarm/install_using_sysinst]].
   
 Board configuration scripts can be found here: <https://github.com/linux-sunxi/sunxi-boards/blob/master/sys_config>. You can compile them with the "fex2bin" tool found here: <https://github.com/linux-sunxi/sunxi-tools>.  # Tips and tricks
   
 To use, copy the compiled FEX to your MS-DOS partition, load it with U-Boot, and then tell the kernel where to find it with the "sysconfig=" boot option. For example, uEnv.txt on a Cubieboard2 might look like this:  ## Video overscan compensation
   
 [[!template  id=programlisting text="""  On some television models, the borders of the screen may be cut off. If your television doesn't have an option to disable overscan, you can enable overscan compensation by entering the following commands at the U-Boot prompt:
 bootargs=root=ld0a sysconfig=0x43000000  
 uenvcmd=mmc dev 0; mmc rescan; fatload mmc 0:1 43000000 cubieboard2.bin; fatload mmc 0:1 82000000 netbsd.ub; bootm 82000000  
 """]]  
   
 Some pre-compiled .bin files can be found here: <http://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/allwinner/fex/>      setenv video-mode sunxi:1280x720-24,overscan_x=32,overscan_y=20
       saveenv
       reset
   
 # Framebuffer console  ## Pinebook function keys
   
 To use HDMI for the console device, add *console=fb* to bootargs in uEnv.txt.  The sleep (Fn+Esc), home (Fn+F1), volume down (Fn+F3), volume up (Fn+F4), and mute (Fn+F5) keys on the keyboard are mapped to uhid(4) devices.
   
 If the connected display does not let you disable overscan, you can add a margin to the framebuffer by with the *fb.margin* bootargs option. For example, to set a 25-pixel margin around the screen, add *fb.margin=25* to uEnv.txt  Create the following config file:
   
 # HDMI audio  [[!template  id=filecontent name="/etc/usbhidaction.conf" text="""
   Consumer:Consumer_Control.Consumer:Volume_Up                    1
           mixerctl -n -w outputs.master++
   Consumer:Consumer_Control.Consumer:Volume_Down                  1
           mixerctl -n -w outputs.master--
   Consumer:Consumer_Control.Consumer:Mute                         1
           mixerctl -n -w outputs.mute++
   Consumer:Consumer_Control.Consumer:AC_Home                      1
           /etc/powerd/scripts/hotkey_button AC_Home pressed
   Generic_Desktop:System_Control.Generic_Desktop:System_Sleep     1
           /etc/powerd/scripts/sleep_button System_Sleep pressed
   """]]
   
 The default audio device is the analog audio codec. To change the default device, use the *audiocfg* command:  Then start two copies of usbhidaction:
   
 [[!template  id=programlisting text="""  [[!template  id=programlisting text="""
 a31# audiocfg list  # /usr/bin/usbhidaction -c /etc/usbhidaction.conf -f /dev/uhid0 -i -p /var/run/usbhidaction-uhid0.pid 
 0: [*] audio0 @ awinac0: Allwinner CODEC A31, 2 playback channels  # /usr/bin/usbhidaction -c /etc/usbhidaction.conf -f /dev/uhid1 -i -p /var/run/usbhidaction-uhid1.pid 
 1: [ ] audio1 @ awinhdmiaudio0: Allwinner HDMI 1.4, 2 playback channels  
 a31# audiocfg default 1  
 setting default audio device to audio1  
 a31# audiocfg list  
 0: [ ] audio0 @ awinac0: Allwinner CODEC A31, 2 playback channels  
 1: [*] audio1 @ awinhdmiaudio0: Allwinner HDMI 1.4, 2 playback channels  
 """]]  """]]
   
 # Board specific notes  
   
 ## Merrii Hummingbird A31  
   
 There doesn't appear to be a meaningful way to generate a MAC address on these boards. U-Boot from the A31 SDK and from the u-boot-sunxi tree both lack GMAC support, and the Security ID registers (at 0x01c23800) appear to be empty.  # Links
   
 To overcome this, you can specify your own MAC address in *uEnv.txt*:  - [[NetBSD/evbarm install via sysinst(8) on a SATA hard disk, USB stick or (u)SD card|ports/evbarm/install_using_sysinst]]
 [[!template  id=programlisting text="""  
 bootargs=root=ld0a awge0.mac-address=02:a0:3d:88:1a:1e  
 """]]  

Removed from v.1.37  
changed lines
  Added in v.1.96


CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb