Diff for /wikisrc/ports/evbarm/allwinner.mdwn between versions 1.56 and 1.87

version 1.56, 2015/12/10 08:07:54 version 1.87, 2018/05/06 11:29:50
Line 1 Line 1
 [[!meta title="NetBSD/evbarm on Allwinner Technology SoCs"]]  [[!meta title="NetBSD/evbarm on Allwinner Technology SoCs"]]
   
 NetBSD 7.0 has support for A20 and A31 SoCs. NetBSD -current adds support for A80 SoCs.  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.
   
   <img src="https://pbs.twimg.com/media/DIRGmsOXcAEJu-j.jpg" width="300">
   <img src="https://pbs.twimg.com/media/DJYA7SCXUAEvEQk.jpg" width="300">
   
 [[!toc levels=2]]  [[!toc levels=2]]
   
 # Supported boards  # Supported SoCs
  - [Banana Pi](http://www.bananapi.org/p/product.html) (BPI)  
  - Cubieboard 2 (CUBIEBOARD)  <table>
  - [Cubieboard 4](http://cubieboard.org/model/cb4/) (ALLWINNER_A80) *NetBSD-current*    <thead>
  - Cubietruck (CUBIETRUCK)      <tr>
  - [Merrii Hummingbird A31](http://www.merrii.com/en/pla_d.asp?id=172) (HUMMINGBIRD_A31)        <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>
   
   
 # Supported hardware  # Supported hardware
  - SoCs  
    - Cortex-A7: A20 (2-core), A31 (4-core), A80  Please refer to the [SUNXI kernel config](https://nxr.netbsd.org/xref/src/sys/arch/evbarm/conf/SUNXI) for the most up-to-date list of supported hardware.
    - Cortex-A7/A15: A80 (4-core A7 + 4-core A15)  
  - SD/MMC controller (DMA)  <table>
  - DMA controller    <thead>
  - GPIO      <tr>
    - Configuration using FEX scripts is supported        <th>Device</th>
  - UART        <th>Supported</th>
  - I2C        <th>Notes</th>
  - P2WI (A31) / RSB (A80)      </tr>
  - PMU    </thead>
    - AXP209 (A20)    <tbody>
    - AXP221 (A31)      <tr><td>Audio codec</td><td>Yes</td><td>Supported on sun4i, sun5i, sun6i, sun7i, sun8i-h2+, sun8i-h3, sun50i-h5</td></tr>
    - AXP806 (A80)      <tr><td>Crypto engine</td><td>-</td><td></td></tr>
    - AXP809 (A80)      <tr><td>CSI</td><td>-</td><td></td></tr>
  - Watchdog timer      <tr><td>DMA</td><td>Yes</td><td></td></tr>
  - RTC      <tr><td>Fast Ethernet (sun4i/sun5i/sun7i)</td><td>Yes</td><td></td></tr>
    - A20/A31: integrated RTC, PCF8563      <tr><td>Framebuffer</td><td>Yes</td><td>Uses simplefb configured by bootloader</td></tr>
    - A80: AC100      <tr><td>Gigabit Ethernet (sun6i/sun7i/sun9i)</td><td>Yes</td><td></td></tr>
  - Audio codec (A20/A31)      <tr><td>Gigabit Ethernet (sun8i/sun50i)</td><td>Yes</td><td></td></tr>
  - USB host      <tr><td>GPIO</td><td>Yes</td><td></td></tr>
    - OHCI      <tr><td>GPU</td><td>-</td><td></td></tr>
    - EHCI      <tr><td>I2C</td><td>Yes</td><td></td></tr>
    - OTG (A20)      <tr><td>I2S/PCM</td><td>-</td><td></td></tr>
  - SATA (A10/A20)      <tr><td>IR transceiver</td><td>-</td><td></td></tr>
  - Gigabit Ethernet (GMAC)      <tr><td>NAND</td><td>Yes</td><td></td></tr>
  - HDMI      <tr><td>P2WI/RSB</td><td>Yes</td><td></td></tr>
    - DDC / EDID mode detection (A20/A31)      <tr><td>PCIe</td><td>-</td><td>H6</td></tr>
    - Audio support (A20/A31)      <tr><td>PWM</td><td>Yes</td><td></td></tr>
  - Framebuffer (A20/A31/A80)      <tr><td>RTC</td><td>Yes</td><td></td></tr>
  - IR receiver (A20/A31/A80)      <tr><td>SATA</td><td>Yes</td><td></td></tr>
       <tr><td>SD/MMC</td><td>Yes</td><td></td></tr>
 # TODO      <tr><td>SMP</td><td>Yes</td><td>32-bit only. Uses PSCI support in firmware</td></tr>
  - A10      <tr><td>SPDIF</td><td>-</td><td></td></tr>
    - Interrupt controller      <tr><td>SPI</td><td>-</td><td></td></tr>
    - EMAC      <tr><td>Thermal sensors</td><td>Yes</td><td></td></tr>
  - A31      <tr><td>Touch screen</td><td>Yes</td><td></td></tr>
    - OTG      <tr><td>UART</td><td>Yes</td><td></td></tr>
    - IR transmitter      <tr><td>USB 2.0</td><td>Yes</td><td></td></tr>
    - 3G module      <tr><td>USB 3.0</td><td>Yes</td><td></td></tr>
    - TV input      <tr><td>USB OTG</td><td>Experimental</td><td></td></tr>
  - A80      <tr><td>Watchdog timer</td><td>Yes</td><td></td></tr>
    - MP    </tbody>
    - big.LITTLE support  </table>
    - USB3 (OTG and XHCI)  
    - IR transmitter  
    - HDMI (DDC and mode setting; currently relies on U-Boot for setup)  
    - Audio codec  
  - All  
    - USB device mode  
    - SDIO (Bluetooth / WiFi)  
    - NAND  
    - VGA (Cubietruck, Hummingbird A31, Cubieboard4)  
   
 # Installation  # Installation
   
 ## A20 / A31 based boards  - Download or build **armv7.img** (32-bit) or **arm64.img** (64-bit) from NetBSD -current
   - Write the image to disk: **dd if=armv7.img of=/dev/rld0d bs=1m conv=sync**
   - Install a board-specific U-Boot (2017.07 or later) from pkgsrc to the SD card: **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**
   
   # Tips and tricks
   
   ## Video overscan compensation
   
   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:
   
 * Start with an ARMv7 image from *evbarm-earmv7hf/binary/gzimg/armv7.img.gz* from      setenv video-mode sunxi:1280x720-24,overscan_x=32,overscan_y=20
 NetBSD 7.0      saveenv
 * Download a U-Boot build for your board      reset
   * Download the correct build from the linux-sunxi web site <http://dl.linux-sunxi.org/nightly/u-boot-sunxi/u-boot-sunxi-mainline/u-boot-sunxi-mainline-latest/>.  
 * Decompress the image via [[!template id=man name="gunzip" section="1"]]:  
 [[!template  id=programlisting text="""  
 # gunzip armv7.img.gz  
 """]]  
 * Write the *u-boot-sunxi-with-spl.bin* loader to the empty space at the start of the base image:  
 [[!template  id=programlisting text="""  
 # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1k seek=8 conv=notrunc  
 """]]  
 * Write the image to an SD card (e.g.: if the SD card is recognised as *sd0* -  
 please check the [[!template id=man name="dmesg" section="8"]] output to be  
 sure!):  
 [[!template  id=programlisting text="""  
 # dd if=armv7.img of=/dev/rsd0d bs=1m  
 """]]  
 * Copy the kernel (*netbsd.ub*) for your board to the root of the MS-DOS  
 partition on the SD card  
 * Prepare a *boot.cmd* file for U-Boot boot loader containing the needed  
 instructions regarding how to boot the kernel (basically the *bootargs* that are  
 passed to the kernel and how to load the kernel from a device to the RAM and  
 then boot it from the memory address):  
 [[!template  id=programlisting text="""  
 setenv kernel_addr      82000000  
 setenv kernel           netbsd.ub  
 setenv bootargs         "root=ld0a"  
   
 fatload mmc 0:1 ${kernel_addr} ${kernel}  
 bootm ${kernel_addr}  
 """]]  
 * The *boot.cmd* text file should be converted in a script image - *boot.scr*  
 for U-Boot via [[!template id=man name="mkubootimage" section="1"]]:  
 [[!template  id=programlisting text="""  
 # mkubootimage -A arm -n armv7 -T script boot.cmd boot.scr  
 """]]  
 * Copy the *boot.scr* to the MS-DOS partition of the SD card  
   
 ## A80 based boards  
   
 * Cubieboard 4 U-Boot for SD card: <http://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/allwinner/a80/cubieboard4-uboot.tgz>  
 [[!template  id=programlisting text="""  
 # dd if=u-boot-spl.bin of=/dev/sdd bs=1k seek=8  
 # dd if=u-boot-sun9iw1p1.bin of=/dev/sdd bs=1k seek=19096  
 """]]  
 * First partition needs to be at +20MB offset. Format it as MSDOS, copy 'netbsd.ub' to it as 'uImage'.  
   
 # Big (endian) fun  
   
 You can run this boards with a little endian (this is the default and implied by above install instructions)  
 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   
 [[!template  id=programlisting text="""  
 ./build.sh -m evbearmv7hf-eb   
 """]]  
 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.  
   
 # FEX scripts  
   
 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>.  
   
 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:  
   
 [[!template  id=programlisting text="""  
 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/>  
   
 # Framebuffer console  
   
 To use HDMI for the console device, add *console=fb* to bootargs in uEnv.txt.  
   
 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  
   
 # HDMI audio  
   
 The default audio device is the analog audio codec. To change the default device, use the *audiocfg* command:  
   
 [[!template  id=programlisting text="""  
 a31# audiocfg list  
 0: [*] audio0 @ awinac0: Allwinner CODEC A31, 2 playback channels  
 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  
 """]]  
   
 # MAC address  
   
 On boards where the ethernet MAC address cannot be determmined, a random MAC address will be generated every boot. You can override this behaviour by specifying a MAC address in *uEnv.txt*:  
 [[!template  id=programlisting text="""  
 bootargs=root=ld0a awge0.mac-address=02:a0:3d:88:1a:1e  
 """]]  

Removed from v.1.56  
changed lines
  Added in v.1.87


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