├── README.md ├── dts ├── opi3-h6.dtb ├── opi3-h6.dts └── sun50i-h6.dtsi └── img ├── hdmi_1920x1080.png ├── htop-1.png ├── htop.png └── lxde.png /README.md: -------------------------------------------------------------------------------- 1 | # orangepi-h6-ubuntu-base-minimal 2 | 3 | Ubuntu 18.04 base minimal image tested on the Orange Pi One Plus 4 | 5 | This is a follow up on the mainline kernel 5.1 / 5.2 / 5.3 / 5.4 for the H6 SBC: 6 | 7 | * Mainline Kernel 5.0/5.1/5.2/5.3/5.4 8 | * HDMI 9 | * DVFS 10 | * Gbps and fast ethernet 11 | 12 | **kernel 5.0.y** 13 | OS Img is available here (use 7z to unzip and burn to SD card with Win32DiskImager or Etcher): 14 | https://mega.nz/#!NPoSkIyT!Ul1n_1WVklPXlR2nHQxEE356_2iM8WAWWm9AWNR08hg 15 | 16 | **kernel 5.1.y** 17 | https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.9 18 | 19 | User: ubuntu 20 | Pasw: ubuntu 21 | 22 | 23 | | SBC Dev Board sample | Orange Pi One Plus | Orange Pi One Plus | Orange Pi One Plus | Orange Pi One Plus | 24 | |------------------------|-----------------------|-----------------------|-----------------------|-----------------------| 25 | | kernel version | 5.1.3 | 5.3.1 (*) | 5.4.6 (*) | 5.1.2 | 26 | | gcc version | 8.3.0 | 7.4.0 | 7.3.0 | 7.3.0 | 27 | | display | hdmi | hdmi | hdmi | hdmi (1920x100) | 28 | | graphical interface | CLI | CLI | CLI | CLI | 29 | | pmic | axp805/6 | axp805/6 | axp805/6 | axp805/6 | 30 | | idle Temp ºC / freq | 40 ºC / ~480 Mhz * | 42 ºC / ~480 Mhz | 44 ºC / 720 Mhz | 42 ºC / ~480 Mhz | 31 | | full Temp ºC / freq | 80 ºC / 1.8 GHz * | 78 ºC / 1.8 GHz | 70 ºC / 1.8 GHz | 80 ºC / 1.8 GHz | 32 | | RAM memory usage (avg) | 75 Mbytes | 80 Mbytes | 60 Mbytes | 65 Mbytes | 33 | | i2c | yes | yes | yes | yes | 34 | | spi | spidev0.0 | spidev0.0 | spidev0.0 | spidev0.0 | 35 | | Camera | none | none | none | none | 36 | | Wifi | ath9k usb drivers | ath9k usb drivers | none | ath9k usb drivers | 37 | | BT | none | none | none | none | 38 | | ethernet | Gbps / 100Mbps | 100 MBit / 1 GBit | Gbps | Gbps | 39 | | sound | hdmi-sound / SPDIF** | hdmi-sound / SPDIF**| hdmi-sound | hdmi-sound / SPDIF** | 40 | | ir | yes | yes | yes | yes | 41 | | linux-cedrus | yes | yes | yes | yes | 42 | | mali-midgard | yes/no | | panfrost | yes/no | 43 | | issues | reboot works | reboot = ok ? | reboot = ? | reboot fixed | 44 | | | | | | | 45 | 46 | ** Enabled for other OPI models 47 | * rc2 needs to be tested / rc3 / rc4 requires aditional tests 48 | 49 | # Mainline Kernel 5.4.6 (Experimental) 50 | 51 | Deb: https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.26 52 | 53 | # Mainline Kernel 5.4.3 (Experimental) 54 | 55 | deb package: https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.25 56 | 57 | There is a fix on linux-image-5.4.3_1.0-26.deb , install seems to be correct now, hopefully. 58 | 59 | * Panfrost 60 | 61 | Testing panfrost with kmscube: 62 | 63 | sudo ./kmscube 64 | Using display 0xaaaaedbb2670 with EGL version 1.4 65 | =================================== 66 | EGL information: 67 | version: "1.4" 68 | vendor: "Mesa Project" 69 | client extensions: "EGL_EXT_client_extensions EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_KHR_debug EGL_EXT_platform_wayland EGL_EXT_platform_x11 EGL_MESA_platform_gbm EGL_MESA_platform_surfaceless EGL_EXT_platform_device" 70 | display extensions: "EGL_ANDROID_blob_cache EGL_EXT_buffer_age EGL_EXT_image_dma_buf_import EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_partial_update EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display " 71 | =================================== 72 | OpenGL ES 2.x information: 73 | version: "OpenGL ES 2.0 Mesa 20.0.0-devel (git-ce52b49348)" 74 | shading language version: "OpenGL ES GLSL ES 1.0.16" 75 | vendor: "Panfrost" 76 | renderer: "Mali T720 (Panfrost)" 77 | extensions: "GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_OES_EGL_image GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_EXT_occlusion_query_boolean GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_texture_compression_astc_ldr GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_separate_shader_objects GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_draw_elements_base_vertex GL_EXT_texture_border_clamp GL_KHR_context_flush_control GL_OES_draw_elements_base_vertex GL_OES_texture_border_clamp GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_KHR_parallel_shader_compile " 78 | =================================== 79 | Using modifier ffffffffffffff 80 | Using modifier ffffffffffffff 81 | 82 | # Mainline Kernel 5.4.2 (Experimental) 83 | 84 | The kernel thermal DVFS is a very conservative maximum frequency: 1488 MHz 85 | 86 | Boot log: https://gist.github.com/avafinger/6d55d02f9e5c0b0a79b8b2ada8c181ca 87 | 88 | * Kernel Health 89 | 90 | CPU1 freq : 816 MHz 91 | CPU2 freq : 1320 MHz 92 | CPU3 freq : 1320 MHz 93 | CPU4 freq : 1488 MHz 94 | CPU count : 4 95 | Governor : ondemand 96 | Core voltage : 1.00 V 97 | SOC Temp : 44.28 C 98 | 99 | 100 | ubuntu@opi-h6:~$ 7z b 101 | 102 | 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 103 | p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs LE) 104 | 105 | LE 106 | CPU Freq: 1442 1484 1482 1484 1484 1483 1484 1484 1484 107 | 108 | RAM size: 991 MB, # CPU hardware threads: 4 109 | RAM usage: 882 MB, # Benchmark threads: 4 110 | 111 | Compressing | Decompressing 112 | Dict Speed Usage R/U Rating | Speed Usage R/U Rating 113 | KiB/s % MIPS MIPS | KiB/s % MIPS MIPS 114 | 115 | 22: 2381 324 714 2317 | 64297 398 1377 5486 116 | 23: 2334 323 737 2379 | 63262 399 1371 5474 117 | 24: 2320 326 766 2495 | 61695 398 1361 5416 118 | 25: 2262 324 798 2583 | 59487 392 1351 5294 119 | ---------------------------------- | ------------------------------ 120 | Avr: 324 754 2443 | 397 1365 5417 121 | Tot: 361 1059 3930 122 | 123 | 124 | 125 | 126 | # Mainline Kernel 5.3.1 (Experimental) 127 | 128 | Pre-release: https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/1.23 129 | 130 | * Kernel Health 131 | 132 | 133 | Every 2.0s: ./h6-monitor.sh opi-h6: Sun Sep 22 00:59:44 2019 134 | 135 | CPU1 freq : 1008 MHz 136 | CPU2 freq : 1008 MHz 137 | CPU3 freq : 1320 MHz 138 | CPU4 freq : 1320 MHz 139 | CPU count : 4 140 | Governor : ondemand 141 | Core voltage : 1.16 V 142 | SOC Temp : 39.11 C 143 | 144 | 145 | # Mainline Kernel 5.2.0-rc4 (Experimental) 146 | 147 | Release: https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.22 148 | 149 | Bootlog: https://gist.github.com/avafinger/1c8c0d4423610c671f7bb9a3761913af 150 | 151 | **IR Test** 152 | 153 | 154 | root@opi-h6:/home/ubuntu# echo nec > /sys/class/rc/rc0/protocols 155 | root@opi-h6:/home/ubuntu# cat /dev/input/event5 | hexdump 156 | 0000000 5ba1 5cfe 0000 0000 0e87 000d 0000 0000 157 | 0000010 0004 0004 0400 0000 5ba1 5cfe 0000 0000 158 | 0000020 0e87 000d 0000 0000 0000 0000 0000 0000 159 | 0000030 5ba1 5cfe 0000 0000 da36 000d 0000 0000 160 | 0000040 0004 0004 0400 0000 5ba1 5cfe 0000 0000 161 | 0000050 da36 000d 0000 0000 0000 0000 0000 0000 162 | 0000060 5ba2 5cfe 0000 0000 959c 0009 0000 0000 163 | 0000070 0004 0004 0401 0000 5ba2 5cfe 0000 0000 164 | 0000080 959c 0009 0000 0000 0000 0000 0000 0000 165 | 0000090 5ba2 5cfe 0000 0000 6147 000a 0000 0000 166 | 00000a0 0004 0004 0401 0000 5ba2 5cfe 0000 0000 167 | 00000b0 6147 000a 0000 0000 0000 0000 0000 0000 168 | 169 | 170 | # Mainline stable Kernel 5.2.0-rc3 (Experimental) 171 | 172 | Mainline kernel 5.2.0-rc3 compiled with **gcc 7.3** with some modules enabled: Cedrus, hdmi, ir, spdi0.0, i2c, ath9k wifi but has not been fully tested. 173 | 174 | deb package: https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.21 175 | 176 | Bootlog: https://gist.github.com/avafinger/77a9fd58c1d33387dc7edd59d03ce071 177 | 178 | # Mainline stable Kernel 5.2.0-rc2 (Experimental) 179 | 180 | Mainline kernel 5.2.0-rc2 compiled with **gcc 7.3** with some modules enabled: Cedrus, hdmi, mali, ir, spdi0.0, i2c, ath9k wifi but has not been fully tested. 181 | 182 | deb package: https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.16 183 | 184 | Bootlog: https://gist.github.com/avafinger/3354a8e55e7de5c043ad55e0a3cbe607 185 | 186 | 187 | 188 | # Mainline stable Kernel 5.2.0-rc1 (Experimental) 189 | 190 | Mainline kernel 5.2.0-rc1 compiled with **gcc 7.3** with some modules enabled: Cedrus, hdmi, mali, ir, spdi0.0, i2c, ath9k wifi but not tested. 191 | 192 | deb package: https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.15 193 | 194 | Bootlog: https://gist.github.com/avafinger/a6b43c140b52e7d48419294d88e8d311 195 | 196 | 197 | # Mainline stable Kernel 5.1.3 (Experimental) 198 | 199 | Mainline kernel 5.1.3 compiled with **gcc 8.3** with some modules enabled: Cedrus, hdmi, mali, ir, spdi0.0, i2c, ath9k wifi. 200 | 201 | deb package: https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.14 202 | 203 | Bootlog: https://gist.github.com/avafinger/3e3843c709c28fa104a2881202d25d80 204 | 205 | # Mainline stable Kernel 5.1.2 (Experimental) 206 | 207 | Mainline kernel 5.1.2 with some modules enabled: Cedrus, hdmi, mali, ir, spdi0.0, i2c, ath9k wifi. Ignoring Mali due to blob availability in 32 bits only. Waiting for some panfrost build samples. 208 | 209 | Mainline Kernel 5.1.2-h6 : https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.13 210 | 211 | Fix: reboot issue (need aditional tests) 212 | 213 | # Mainline stable Kernel 5.1.1 (Experimental) 214 | 215 | Mainline kernel 5.1.1 based on work done by Bootlin (Cedrus), Jernej (hdmi), Clement (mali, spdif, ir), LibreElec and linux-sunxi. This is at an early stage and needs proper testing and verification, but it is working. :) 216 | 217 | ![htop](https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/raw/master/img/lxde.png) 218 | 219 | # Mainline Kernel 5.1.0 220 | 221 | 8 GB sd card IMG and upgrade 222 | https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.9 223 | 224 | or 225 | 226 | Install from Linux and upgrade: 227 | 228 | https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.10 229 | 230 | Upgrade: 231 | 232 | https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.11 233 | 234 | # HDMI Desktop (fix up) 235 | 236 | Mainline Kernel 5.1-rc7 has a fix for the HDMI issue, it seems gcc 8.2 optimizations breaks the HDMI on Desktop. 237 | 238 | If you want to use Desktop LXDE, burn SD CARD with this: 239 | https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.9 240 | 241 | and issue in shell: 242 | 243 | sudo apt-get update 244 | sudo apt-get dist-upgrade 245 | sudo apt-get install lxde 246 | wait until finished... 247 | sudo shutdown -h now 248 | 249 | Reboot, choose OpenBox instead of LXDE on first login with ubuntu/ubuntu , logout or shutdown in the OpenBox way, or 250 | CTRL+F1 to enter the **login prompt**, type the credentials and issue a **shutdown -h now** , on next login choose LXDE and type te credentials. That's it, enjoy LXDE and HDMI 1920x1080. 251 | 252 | 253 | # Installing 254 | You need *wget* and *curl* installed to grab the files in a Linux distro or use the **img** above. 255 | 256 | Get the latest files by running (or seee below to fetch specific Release version files): 257 | 258 | 259 | wget $(curl -s https://api.github.com/repos/avafinger/orangepi-h6-ubuntu-base-minimal/releases/latest | grep -oP '"browser_download_url": "\K(.*)(?=")') 260 | 261 | 262 | then 263 | 264 | Unzip the file and flash it to SD card (8GB) using 265 | 266 | 267 | # Install ALSA 268 | 269 | In order to get a clear hdmi-soun output you must update u-boot to version 2019 and install ALSA. 270 | 271 | * Update u-boot (v1.7) 272 | 273 | sudo dd if=./u-boot-hdmi-sound.bin of=/dev/sdc bs=8k seek=1 274 | 275 | * Install ALSA 276 | 277 | sudo apt-get install alsa-utils alsa-tools libasound2 alsa-base 278 | 279 | * Test hdmi-sound: 280 | 281 | sudo aplay /usr/share/sounds/alsa/Front_Left.wav 282 | Playing WAVE '/usr/share/sounds/alsa/Front_Left.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono 283 | 284 | * Kernel 5.1.0 has hdmi-sound / SPDIF 285 | 286 | sudo aplay -l 287 | [sudo] password for ubuntu: 288 | **** List of PLAYBACK Hardware Devices **** 289 | Home directory not accessible: Permission denied 290 | card 0: SPDIF [On-board SPDIF], device 0: spdif-dit-hifi dit-hifi-0 [] 291 | Subdevices: 1/1 292 | Subdevice #0: subdevice #0 293 | card 1: allwinnerhdmi [allwinner-hdmi], device 0: 5091000.i2s-i2s-hifi i2s-hifi-0 [] 294 | Subdevices: 1/1 295 | Subdevice #0: subdevice #0 296 | 297 | * Kernel 5.1.1 hdmi-sound / SPDIF configuration file 298 | 299 | Edit and save the file: /etc/asound.conf 300 | 301 | pcm.!default { 302 | type plug 303 | slave { 304 | pcm "hw:1,0" 305 | } 306 | } 307 | 308 | ctl.!default { 309 | type hw 310 | card 1 311 | } 312 | 313 | cat /proc/asound/cards 314 | 315 | 0 [SPDIF ]: On-board_SPDIF - On-board SPDIF 316 | On-board SPDIF 317 | 1 [allwinnerhdmi ]: allwinner-hdmi - allwinner-hdmi 318 | allwinner-hdmi 319 | 320 | 321 | # Release v1.0 322 | 323 | * minor fixes and optimizations (journaling , heart-beat) 324 | * DHCP enabled (default) 325 | 326 | user: ubuntu 327 | password: ubuntu 328 | 329 | 330 | Get v1.0 files: 331 | 332 | wget $(curl -s https://api.github.com/repos/avafinger/orangepi-h6-ubuntu-base-minimal/releases | grep -oP '"browser_download_url": "\K(.*)(?=")' | grep v1.0) 333 | 334 | 335 | Boot takes about 5 seconds or less depending on SD card in use. 336 | **Tip**: If you can't see anything on screen, type enter twice! 337 | 338 | 339 | On first login: 340 | 341 | sudo apt-get update 342 | sudo apt-get dist-upgrade 343 | 344 | 345 | # Release v1.1 346 | 347 | 348 | * HDMI 349 | * DVFS (1.8 GHz) 350 | * i2c1 (enabled) 351 | * spidev0.0 (enabled) 352 | 353 | Get v1.1 files: 354 | 355 | wget $(curl -s https://api.github.com/repos/avafinger/orangepi-h6-ubuntu-base-minimal/releases | grep -oP '"browser_download_url": "\K(.*)(?=")' | grep v1.1) 356 | 357 | 358 | 359 | Install: 360 | 361 | 362 | sudo dpkg -i linux-image-5.0.1-h6_1.0-1.deb 363 | sync 364 | sudo shutdown -h now 365 | 366 | 367 | 368 | Wait a few seconds e push the Power button (ON/OFF) for 2 ~ 5 seconds to power on the board. 369 | 370 | 371 | # Release v1.2 372 | 373 | Mainline Kernel 5.0.2 374 | 375 | * HDMI 376 | * DVFS ( 1.8 Ghz ~ **throttle at 80º C** ) 377 | * Gbps 378 | * i2c 379 | * spidev 380 | 381 | **The DT has been changed for best performance so CPU will throttle only at 80º C, get a Heatsink** 382 | The test showed the board is still stable for a high load > 1 hr, no files got corrupted. 383 | 384 | Get v1.2 files: 385 | 386 | wget $(curl -s https://api.github.com/repos/avafinger/orangepi-h6-ubuntu-base-minimal/releases | grep -oP '"browser_download_url": "\K(.*)(?=")' | grep v1.2) 387 | 388 | 389 | Install new Image: 390 | 391 | sudo dpkg -i linux-image-5.0.2-h6_1.0-2.deb 392 | sync 393 | sudo shutdown -h now 394 | 395 | 396 | # Release v1.3 397 | 398 | Mainline Kernel 5.0.2 - LXDE 399 | 400 | * HDMI ( 1920x1080 ) 401 | * DVFS ( 1.8 Ghz ~ **throttle at 80º C** ) 402 | * Gbps 403 | * i2c 404 | * spidev 405 | 406 | **The DT has been changed for best performance so CPU will throttle only at 80º C, get a Heatsink** 407 | 408 | 409 | Get v1.3 files: 410 | 411 | 412 | wget $(curl -s https://api.github.com/repos/avafinger/orangepi-h6-ubuntu-base-minimal/releases | grep -oP '"browser_download_url": "\K(.*)(?=")' | grep v1.3) 413 | 414 | 415 | 416 | Flash Image to SD CARD: 417 | 418 | 419 | Unzip orangepi-one-plus-lxde-8GB-sd.img.7z and flash with win32diskimager or etcher 420 | 421 | 422 | 423 | **Tip**: You may need to update the file **resolver.conf** to reflect your network (DNS) 424 | 425 | 426 | # Release v1.4 427 | 428 | Mainline Kernel 5.1.0.rc2 (Experimental) 429 | 430 | * HDMI ( enabled - some issues ) 431 | * DVFS ( 1.8 Ghz ~ **throttle at 80º C** ) 432 | * Gbps 433 | * i2c 434 | * spidev 435 | 436 | **The DT has been changed for best performance so CPU will throttle only at 80º C, get a Heatsink** 437 | 438 | 439 | Get v1.4 files: 440 | 441 | 442 | wget $(curl -s https://api.github.com/repos/avafinger/orangepi-h6-ubuntu-base-minimal/releases | grep -oP '"browser_download_url": "\K(.*)(?=")' | grep v1.4) 443 | 444 | 445 | # Release v1.5 446 | 447 | Mainline Kernel 5.1.0.rc3 (Experimental) 448 | 449 | * HDMI ( enabled - some issues ) 450 | * DVFS ( 1.8 Ghz ~ **throttle at 80º C** ) 451 | * Gbps / 100Mbps 452 | * i2c 453 | 454 | 455 | **The DT has been changed for best performance so CPU will throttle only at 80º C, get a Heatsink** 456 | 457 | 458 | Get v1.5 files: 459 | 460 | 461 | wget $(curl -s https://api.github.com/repos/avafinger/orangepi-h6-ubuntu-base-minimal/releases | grep -oP '"browser_download_url": "\K(.*)(?=")' | grep v1.5) 462 | 463 | 464 | # Release v1.7 465 | 466 | Mainline Kernel 5.1.0.rc4 (Experimental) 467 | 468 | https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.7 469 | 470 | **A fix for hdmi-sound:** 471 | * update to u-boot 2019 472 | 473 | 474 | # Release v1.8 475 | 476 | Mainline Kernel 5.1.0.rc6 (Experimental) 477 | 478 | https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/releases/tag/v1.8 479 | 480 | **A fix for hdmi-sound:** 481 | * update to u-boot 2019 482 | 483 | 484 | [![htop](https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/raw/master/img/htop.png)] 485 | 486 | [![htop](https://github.com/avafinger/orangepi-h6-ubuntu-base-minimal/raw/master/img/hdmi_1920x1080.png)] 487 | 488 | 489 | Mainline kernel 5.1.1 bootlog 490 | 491 | [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034] 492 | [ 0.000000] Linux version 5.0.0-h6 (ubuntu@opi-h6) (gcc version 8.2.0 (Ubuntu 8.2.0-1ubuntu2~18.04)) #1 SMP PREEMPT Mon Mar 4 22:56:40 UTC 2019 493 | [ 0.000000] Machine model: Opi H6 494 | [ 0.000000] cma: Reserved 128 MiB at 0x0000000078000000 495 | [ 0.000000] NUMA: No NUMA configuration found 496 | [ 0.000000] NUMA: Faking a node at [mem 0x0000000040000000-0x000000007fffffff] 497 | [ 0.000000] NUMA: NODE_DATA [mem 0x77de2840-0x77de3fff] 498 | [ 0.000000] Zone ranges: 499 | [ 0.000000] DMA32 [mem 0x0000000040000000-0x000000007fffffff] 500 | [ 0.000000] Normal empty 501 | [ 0.000000] Movable zone start for each node 502 | [ 0.000000] Early memory node ranges 503 | [ 0.000000] node 0: [mem 0x0000000040000000-0x000000007fffffff] 504 | [ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x000000007fffffff] 505 | [ 0.000000] On node 0 totalpages: 262144 506 | [ 0.000000] DMA32 zone: 4096 pages used for memmap 507 | [ 0.000000] DMA32 zone: 0 pages reserved 508 | [ 0.000000] DMA32 zone: 262144 pages, LIFO batch:63 509 | [ 0.000000] psci: probing for conduit method from DT. 510 | [ 0.000000] psci: PSCIv1.1 detected in firmware. 511 | [ 0.000000] psci: Using standard PSCI v0.2 function IDs 512 | [ 0.000000] psci: MIGRATE_INFO_TYPE not supported. 513 | [ 0.000000] psci: SMC Calling Convention v1.1 514 | [ 0.000000] random: get_random_bytes called from start_kernel+0x94/0x3e4 with crng_init=0 515 | [ 0.000000] percpu: Embedded 22 pages/cpu @(____ptrval____) s52760 r8192 d29160 u90112 516 | [ 0.000000] pcpu-alloc: s52760 r8192 d29160 u90112 alloc=22*4096 517 | [ 0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 518 | [ 0.000000] Detected VIPT I-cache on CPU0 519 | [ 0.000000] CPU features: detected: ARM erratum 845719 520 | [ 0.000000] Speculative Store Bypass Disable mitigation not required 521 | [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 258048 522 | [ 0.000000] Policy zone: DMA32 523 | [ 0.000000] Kernel command line: console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait fsck.repair=yes panic=10 524 | [ 0.000000] printk: log_buf_len individual max cpu contribution: 4096 bytes 525 | [ 0.000000] printk: log_buf_len total cpu_extra contributions: 12288 bytes 526 | [ 0.000000] printk: log_buf_len min size: 16384 bytes 527 | [ 0.000000] printk: log_buf_len: 32768 bytes 528 | [ 0.000000] printk: early log buf free: 14040(85%) 529 | [ 0.000000] Memory: 885240K/1048576K available (8254K kernel code, 642K rwdata, 2348K rodata, 512K init, 222K bss, 32264K reserved, 131072K cma-reserved) 530 | [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 531 | [ 0.000000] rcu: Preemptible hierarchical RCU implementation. 532 | [ 0.000000] Tasks RCU enabled. 533 | [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies. 534 | [ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0 535 | [ 0.000000] GIC: Using split EOI/Deactivate mode 536 | [ 0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys). 537 | [ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns 538 | [ 0.000004] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns 539 | [ 0.000242] Console: colour dummy device 80x25 540 | [ 0.000311] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=96000) 541 | [ 0.000319] pid_max: default: 32768 minimum: 301 542 | [ 0.000402] LSM: Security Framework initializing 543 | [ 0.000831] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes) 544 | [ 0.001039] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes) 545 | [ 0.001070] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes) 546 | [ 0.001082] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes) 547 | [ 0.024036] ASID allocator initialised with 32768 entries 548 | [ 0.032031] rcu: Hierarchical SRCU implementation. 549 | [ 0.048061] smp: Bringing up secondary CPUs ... 550 | [ 0.080495] Detected VIPT I-cache on CPU1 551 | [ 0.080546] CPU1: Booted secondary processor 0x0000000001 [0x410fd034] 552 | [ 0.112430] Detected VIPT I-cache on CPU2 553 | [ 0.112462] CPU2: Booted secondary processor 0x0000000002 [0x410fd034] 554 | [ 0.144485] Detected VIPT I-cache on CPU3 555 | [ 0.144512] CPU3: Booted secondary processor 0x0000000003 [0x410fd034] 556 | [ 0.144578] smp: Brought up 1 node, 4 CPUs 557 | [ 0.144582] SMP: Total of 4 processors activated. 558 | [ 0.144588] CPU features: detected: 32-bit EL0 Support 559 | [ 0.144592] CPU features: detected: CRC32 instructions 560 | [ 0.144843] CPU: All CPU(s) started at EL2 561 | [ 0.144858] alternatives: patching kernel code 562 | [ 0.145847] devtmpfs: initialized 563 | [ 0.149768] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns 564 | [ 0.149822] futex hash table entries: 1024 (order: 4, 65536 bytes) 565 | [ 0.154101] pinctrl core: initialized pinctrl subsystem 566 | [ 0.155202] NET: Registered protocol family 16 567 | [ 0.155611] audit: initializing netlink subsys (disabled) 568 | [ 0.155745] audit: type=2000 audit(0.152:1): state=initialized audit_enabled=0 res=1 569 | [ 0.156643] cpuidle: using governor menu 570 | [ 0.156935] vdso: 2 pages (1 code @ (____ptrval____), 1 data @ (____ptrval____)) 571 | [ 0.156943] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers. 572 | [ 0.161325] DMA: preallocated 256 KiB pool for atomic allocations 573 | [ 0.161882] Serial: AMBA PL011 UART driver 574 | [ 0.175871] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages 575 | [ 0.175880] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages 576 | [ 0.175884] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages 577 | [ 0.175889] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages 578 | [ 0.176335] cryptd: max_cpu_qlen set to 1000 579 | [ 0.177592] SCSI subsystem initialized 580 | [ 0.177779] libata version 3.00 loaded. 581 | [ 0.178036] usbcore: registered new interface driver usbfs 582 | [ 0.178087] usbcore: registered new interface driver hub 583 | [ 0.178162] usbcore: registered new device driver usb 584 | [ 0.178488] pps_core: LinuxPPS API ver. 1 registered 585 | [ 0.178492] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti 586 | [ 0.178511] PTP clock support registered 587 | [ 0.178642] EDAC MC: Ver: 3.0.0 588 | [ 0.179332] Advanced Linux Sound Architecture Driver Initialized. 589 | [ 0.180095] clocksource: Switched to clocksource arch_sys_counter 590 | [ 0.180260] VFS: Disk quotas dquot_6.6.0 591 | [ 0.180318] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes) 592 | [ 0.187798] NET: Registered protocol family 2 593 | [ 0.188392] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes) 594 | [ 0.188495] TCP established hash table entries: 8192 (order: 4, 65536 bytes) 595 | [ 0.188584] TCP bind hash table entries: 8192 (order: 5, 131072 bytes) 596 | [ 0.188731] TCP: Hash tables configured (established 8192 bind 8192) 597 | [ 0.188858] UDP hash table entries: 512 (order: 2, 16384 bytes) 598 | [ 0.188890] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) 599 | [ 0.189043] NET: Registered protocol family 1 600 | [ 0.189501] RPC: Registered named UNIX socket transport module. 601 | [ 0.189505] RPC: Registered udp transport module. 602 | [ 0.189508] RPC: Registered tcp transport module. 603 | [ 0.189511] RPC: Registered tcp NFSv4.1 backchannel transport module. 604 | [ 0.189684] Unpacking initramfs... 605 | [ 0.239329] Freeing initrd memory: 1076K 606 | [ 0.245226] Initialise system trusted keyrings 607 | [ 0.245356] workingset: timestamp_bits=44 max_order=18 bucket_order=0 608 | [ 0.252515] squashfs: version 4.0 (2009/01/31) Phillip Lougher 609 | [ 0.253259] NFS: Registering the id_resolver key type 610 | [ 0.253281] Key type id_resolver registered 611 | [ 0.253284] Key type id_legacy registered 612 | [ 0.253294] nfs4filelayout_init: NFSv4 File Layout Driver Registering... 613 | [ 0.253463] 9p: Installing v9fs 9p2000 file system support 614 | [ 0.259029] NET: Registered protocol family 38 615 | [ 0.259044] Key type asymmetric registered 616 | [ 0.259049] Asymmetric key parser 'x509' registered 617 | [ 0.259116] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247) 618 | [ 0.259247] io scheduler mq-deadline registered 619 | [ 0.259252] io scheduler kyber registered 620 | [ 0.259627] sun50i-de2-bus 1000000.display-engine: Error couldn't map SRAM to device 621 | [ 0.260308] sun4i-usb-phy 5100400.phy: Couldn't get regulator usb0_vbus... Deferring probe 622 | [ 0.264434] sun50i-h6-r-pinctrl 7022000.pinctrl: initialized sunXi PIO driver 623 | [ 0.270834] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled 624 | [ 0.272730] cacheinfo: Unable to detect cache hierarchy for CPU 0 625 | [ 0.277518] loop: module loaded 626 | [ 0.279407] libphy: Fixed MDIO Bus: probed 627 | [ 0.279648] tun: Universal TUN/TAP device driver, 1.6 628 | [ 0.280860] PPP generic driver version 2.4.2 629 | [ 0.281173] VFIO - User Level meta-driver version: 0.3 630 | [ 0.281892] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver 631 | [ 0.281897] ehci-platform: EHCI generic platform driver 632 | [ 0.282090] ehci-platform 5101000.usb: EHCI Host Controller 633 | [ 0.282112] ehci-platform 5101000.usb: new USB bus registered, assigned bus number 1 634 | [ 0.282813] ehci-platform 5101000.usb: irq 15, io mem 0x05101000 635 | [ 0.296106] ehci-platform 5101000.usb: USB 2.0 started, EHCI 1.00 636 | [ 0.296742] hub 1-0:1.0: USB hub found 637 | [ 0.296771] hub 1-0:1.0: 1 port detected 638 | [ 0.297361] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver 639 | [ 0.297385] ohci-platform: OHCI generic platform driver 640 | [ 0.297548] ohci-platform 5101400.usb: Generic Platform OHCI controller 641 | [ 0.297566] ohci-platform 5101400.usb: new USB bus registered, assigned bus number 2 642 | [ 0.297856] ohci-platform 5101400.usb: irq 16, io mem 0x05101400 643 | [ 0.360827] hub 2-0:1.0: USB hub found 644 | [ 0.360865] hub 2-0:1.0: 1 port detected 645 | [ 0.361722] usbcore: registered new interface driver usb-storage 646 | [ 0.363062] mousedev: PS/2 mouse device common for all mice 647 | [ 0.363740] sun6i-rtc 7000000.rtc: registered as rtc0 648 | [ 0.363747] sun6i-rtc 7000000.rtc: RTC enabled 649 | [ 0.363826] i2c /dev entries driver 650 | [ 0.364016] sun50i-h6-r-pinctrl 7022000.pinctrl: 7022000.pinctrl supply vcc-pl not found, using dummy regulator 651 | [ 0.364077] sun50i-h6-r-pinctrl 7022000.pinctrl: Linked as a consumer to regulator.0 652 | [ 0.364667] axp20x-i2c 0-0036: AXP20x variant AXP806 found 653 | [ 0.368963] dcdca: supplied by regulator-dummy 654 | [ 0.370026] dcdcc: supplied by regulator-dummy 655 | [ 0.370628] dcdcd: supplied by regulator-dummy 656 | [ 0.371075] vdd-sys: Bringing 900000uV into 960000-960000uV 657 | [ 0.371569] dcdce: supplied by regulator-dummy 658 | [ 0.372167] aldo1: supplied by regulator-dummy 659 | [ 0.372757] aldo2: supplied by regulator-dummy 660 | [ 0.373205] vcc-ac200: Bringing 700000uV into 3300000-3300000uV 661 | [ 0.373680] aldo3: supplied by regulator-dummy 662 | [ 0.374124] vcc-3v3-1: Bringing 700000uV into 3300000-3300000uV 663 | [ 0.374885] bldo1: supplied by regulator-dummy 664 | [ 0.375887] bldo2: supplied by regulator-dummy 665 | [ 0.376331] vcc-efuse-pcie-hdmi-io: Bringing 800000uV into 1800000-1800000uV 666 | [ 0.376494] bldo3: supplied by regulator-dummy 667 | [ 0.376963] vcc-dcxoio: Bringing 700000uV into 1800000-1800000uV 668 | [ 0.377727] bldo4: supplied by regulator-dummy 669 | [ 0.378319] cldo1: supplied by regulator-dummy 670 | [ 0.378916] cldo2: supplied by regulator-dummy 671 | [ 0.379383] vcc-wifi-1: Bringing 700000uV into 3300000-3300000uV 672 | [ 0.379838] cldo3: supplied by regulator-dummy 673 | [ 0.380292] vcc-wifi-2: Bringing 700000uV into 3300000-3300000uV 674 | [ 0.380753] sw: supplied by regulator-dummy 675 | [ 0.380942] axp20x-i2c 0-0036: AXP20X driver loaded 676 | [ 0.382492] cpu cpu0: Linked as a consumer to regulator.1 677 | [ 0.382538] cpu cpu0: Dropping the link to regulator.1 678 | [ 0.382670] cpu cpu0: Linked as a consumer to regulator.1 679 | [ 0.384323] sdhci: Secure Digital Host Controller Interface driver 680 | [ 0.384329] sdhci: Copyright(c) Pierre Ossman 681 | [ 0.384399] Synopsys Designware Multimedia Card Interface Driver 682 | [ 0.384702] sdhci-pltfm: SDHCI platform and OF driver helper 683 | [ 0.385362] ledtrig-cpu: registered to indicate activity on CPUs 684 | [ 0.385520] hidraw: raw HID events driver (C) Jiri Kosina 685 | [ 0.385715] usbcore: registered new interface driver usbhid 686 | [ 0.385717] usbhid: USB HID core driver 687 | [ 0.387020] NET: Registered protocol family 17 688 | [ 0.387140] 9pnet: Installing 9P2000 support 689 | [ 0.387183] Key type dns_resolver registered 690 | [ 0.387575] registered taskstats version 1 691 | [ 0.387577] Loading compiled-in X.509 certificates 692 | [ 0.394383] sun4i-usb-phy 5100400.phy: Linked as a consumer to regulator.16 693 | [ 0.397049] sun50i-h6-pinctrl 300b000.pinctrl: initialized sunXi PIO driver 694 | [ 0.397287] sun50i-h6-pinctrl 300b000.pinctrl: 300b000.pinctrl supply vcc-ph not found, using dummy regulator 695 | [ 0.397353] sun50i-h6-pinctrl 300b000.pinctrl: Linked as a consumer to regulator.0 696 | [ 0.397647] printk: console [ttyS0] disabled 697 | [ 0.418479] 5000000.serial: ttyS0 at MMIO 0x5000000 (irq = 13, base_baud = 1500000) is a 16550A 698 | [ 0.418521] printk: console [ttyS0] enabled 699 | [ 0.419067] sun50i-h6-pinctrl 300b000.pinctrl: 300b000.pinctrl supply vcc-pd not found, using dummy regulator 700 | [ 0.419227] dwmac-sun8i 5020000.ethernet: PTP uses main clock 701 | [ 0.524145] ehci-platform 5311000.usb: EHCI Host Controller 702 | [ 0.524188] ehci-platform 5311000.usb: new USB bus registered, assigned bus number 3 703 | [ 0.525185] ehci-platform 5311000.usb: irq 17, io mem 0x05311000 704 | [ 0.540140] ehci-platform 5311000.usb: USB 2.0 started, EHCI 1.00 705 | [ 0.541046] hub 3-0:1.0: USB hub found 706 | [ 0.541086] hub 3-0:1.0: 1 port detected 707 | [ 0.541955] ohci-platform 5311400.usb: Generic Platform OHCI controller 708 | [ 0.541979] ohci-platform 5311400.usb: new USB bus registered, assigned bus number 4 709 | [ 0.542313] ohci-platform 5311400.usb: irq 18, io mem 0x05311400 710 | [ 0.605057] hub 4-0:1.0: USB hub found 711 | [ 0.605085] hub 4-0:1.0: 1 port detected 712 | [ 0.605864] usb_phy_generic usb_phy_generic.0.auto: usb_phy_generic.0.auto supply vcc not found, using dummy regulator 713 | [ 0.605923] usb_phy_generic usb_phy_generic.0.auto: Linked as a consumer to regulator.0 714 | [ 0.606242] musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver 715 | [ 0.606251] musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 5 716 | [ 0.606759] hub 5-0:1.0: USB hub found 717 | [ 0.606785] hub 5-0:1.0: 1 port detected 718 | [ 0.607817] thermal thermal_zone0: failed to read out thermal zone (-16) 719 | [ 0.607872] thermal thermal_zone1: failed to read out thermal zone (-16) 720 | [ 0.608436] sun50i-h6-pinctrl 300b000.pinctrl: 300b000.pinctrl supply vcc-pf not found, using dummy regulator 721 | [ 0.608636] sunxi-mmc 4020000.mmc: Linked as a consumer to regulator.12 722 | [ 0.609264] sunxi-mmc 4020000.mmc: Got CD GPIO 723 | [ 0.634771] sunxi-mmc 4020000.mmc: initialized, max. request size: 16384 KB, uses new timings mode 724 | [ 0.635100] sun50i-h6-pinctrl 300b000.pinctrl: 300b000.pinctrl supply vcc-pd not found, using dummy regulator 725 | [ 0.635262] vcc-gmac-3v3: supplied by vcc-ac200 726 | [ 0.636683] dwmac-sun8i 5020000.ethernet: PTP uses main clock 727 | [ 0.636804] dwmac-sun8i 5020000.ethernet: Linked as a consumer to regulator.17 728 | [ 0.671783] mmc0: host does not support reading read-only switch, assuming write-enable 729 | [ 0.673766] mmc0: new high speed SDHC card at address 59b4 730 | [ 0.675512] mmcblk0: mmc0:59b4 SDU1 7.52 GiB 731 | [ 0.677227] mmcblk0: p1 p2 732 | [ 0.744333] dwmac-sun8i 5020000.ethernet: Current syscon value is not the default 58000 (expect 0) 733 | [ 0.744359] dwmac-sun8i 5020000.ethernet: No HW DMA feature register supported 734 | [ 0.744365] dwmac-sun8i 5020000.ethernet: RX Checksum Offload Engine supported 735 | [ 0.744371] dwmac-sun8i 5020000.ethernet: COE Type 2 736 | [ 0.744376] dwmac-sun8i 5020000.ethernet: TX Checksum insertion supported 737 | [ 0.744382] dwmac-sun8i 5020000.ethernet: Normal descriptors 738 | [ 0.744387] dwmac-sun8i 5020000.ethernet: Chain mode enabled 739 | [ 0.744529] libphy: stmmac: probed 740 | [ 0.745994] sun6i-rtc 7000000.rtc: setting system clock to 1970-01-01T00:00:05 UTC (5) 741 | [ 0.746312] vdd-gpu: disabling 742 | [ 0.746652] ALSA device list: 743 | [ 0.746655] No soundcards found. 744 | [ 0.747186] Freeing unused kernel memory: 512K 745 | [ 0.764212] Run /init as init process 746 | [ 0.786439] random: fast init done 747 | [ 0.876143] usb 3-1: new high-speed USB device number 2 using ehci-platform 748 | [ 0.994502] EXT4-fs (mmcblk0p2): mounted filesystem without journal. Opts: (null) 749 | [ 1.034877] hub 3-1:1.0: USB hub found 750 | [ 1.035220] hub 3-1:1.0: 4 ports detected 751 | [ 1.324137] usb 3-1.1: new low-speed USB device number 3 using ehci-platform 752 | [ 1.443660] input: USB Optical Mouse as /devices/platform/soc/5311000.usb/usb3/3-1/3-1.1/3-1.1:1.0/0003:1BCF:0007.0001/input/input0 753 | [ 1.444189] input: USB Optical Mouse as /devices/platform/soc/5311000.usb/usb3/3-1/3-1.1/3-1.1:1.0/0003:1BCF:0007.0001/input/input1 754 | [ 1.444485] hid-generic 0003:1BCF:0007.0001: input,hidraw0: USB HID v1.10 Mouse [USB Optical Mouse] on usb-5311000.usb-1.1/input0 755 | [ 1.524147] usb 3-1.4: new low-speed USB device number 4 using ehci-platform 756 | [ 1.560061] systemd[1]: System time before build time, advancing clock. 757 | [ 1.642360] input: SIGMACHIP USB Keyboard as /devices/platform/soc/5311000.usb/usb3/3-1/3-1.4/3-1.4:1.0/0003:1C4F:0002.0002/input/input2 758 | [ 1.669298] NET: Registered protocol family 10 759 | [ 1.669783] Segment Routing with IPv6 760 | [ 1.704809] hid-generic 0003:1C4F:0002.0002: input,hidraw1: USB HID v1.10 Keyboard [SIGMACHIP USB Keyboard] on usb-5311000.usb-1.4/input0 761 | [ 1.708627] input: SIGMACHIP USB Keyboard Consumer Control as /devices/platform/soc/5311000.usb/usb3/3-1/3-1.4/3-1.4:1.1/0003:1C4F:0002.0003/input/input3 762 | [ 1.728823] systemd[1]: systemd 237 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid) 763 | [ 1.729246] systemd[1]: Detected architecture arm64. 764 | [ 1.749125] systemd[1]: Set hostname to . 765 | [ 1.768384] input: SIGMACHIP USB Keyboard System Control as /devices/platform/soc/5311000.usb/usb3/3-1/3-1.4/3-1.4:1.1/0003:1C4F:0002.0003/input/input4 766 | [ 1.768622] hid-generic 0003:1C4F:0002.0003: input,hidraw2: USB HID v1.10 Device [SIGMACHIP USB Keyboard] on usb-5311000.usb-1.4/input1 767 | [ 2.051663] systemd[1]: File /lib/systemd/system/systemd-journald.service:36 configures an IP firewall (IPAddressDeny=any), but the local system does not support BPF/cgroup based firewalling. 768 | [ 2.051676] systemd[1]: Proceeding WITHOUT firewalling in effect! (This warning is only shown for the first loaded unit using IP firewalling.) 769 | [ 2.217988] random: systemd: uninitialized urandom read (16 bytes read) 770 | [ 2.218044] systemd[1]: Reached target Swap. 771 | [ 2.232455] random: systemd: uninitialized urandom read (16 bytes read) 772 | [ 2.232965] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point. 773 | [ 2.248240] random: systemd: uninitialized urandom read (16 bytes read) 774 | [ 2.248505] systemd[1]: Started Forward Password Requests to Wall Directory Watch. 775 | [ 2.264365] systemd[1]: Reached target Remote File Systems. 776 | [ 2.281518] systemd[1]: Created slice System Slice. 777 | [ 2.444490] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) 778 | [ 2.983328] systemd-journald[1247]: Received request to flush runtime journal from PID 1 779 | [ 3.310129] sun4i-drm display-engine: bound 1100000.mixer (ops sun8i_mixer_platform_driver_exit [sun8i_mixer]) 780 | [ 3.310346] sun4i-drm display-engine: bound 6510000.tcon-top (ops sun8i_tcon_top_platform_driver_exit [sun8i_tcon_top]) 781 | [ 3.310559] sun4i-drm display-engine: bound 6515000.lcd-controller (ops sun4i_tcon_platform_driver_exit [sun4i_tcon]) 782 | [ 3.310632] sun8i-dw-hdmi 6000000.hdmi: 6000000.hdmi supply hvcc not found, using dummy regulator 783 | [ 3.310678] sun8i-dw-hdmi 6000000.hdmi: Linked as a consumer to regulator.0 784 | [ 3.310830] sun8i-dw-hdmi 6000000.hdmi: Detected HDMI TX controller v2.12a with HDCP (DWC HDMI 2.0 TX PHY) 785 | [ 3.311996] sun8i-dw-hdmi 6000000.hdmi: registered DesignWare HDMI I2C bus driver 786 | [ 3.312462] sun4i-drm display-engine: bound 6000000.hdmi (ops sun8i_dw_hdmi_ops [sun8i_drm_hdmi]) 787 | [ 3.312471] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013). 788 | [ 3.312473] [drm] No driver support for vblank timestamp query. 789 | [ 3.312941] [drm] Initialized sun4i-drm 1.0.0 20150629 for display-engine on minor 0 790 | [ 3.829016] Console: switching to colour frame buffer device 240x67 791 | [ 3.857834] sun4i-drm display-engine: fb0: DRM emulated frame buffer device 792 | [ 3.907254] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null) 793 | [ 4.356496] dwmac-sun8i 5020000.ethernet eth0: device MAC address ca:2e:21:a0:aa:d4 794 | [ 4.356805] RTL8211E Gigabit Ethernet stmmac-0:00: attached PHY driver [RTL8211E Gigabit Ethernet] (mii_bus:phy_addr=stmmac-0:00, irq=POLL) 795 | [ 4.358485] dwmac-sun8i 5020000.ethernet eth0: No Safety Features support found 796 | [ 4.358498] dwmac-sun8i 5020000.ethernet eth0: No MAC Management Counters available 797 | [ 4.358502] dwmac-sun8i 5020000.ethernet eth0: PTP not supported by HW 798 | [ 4.591370] zram: Added device: zram0 799 | [ 4.592482] zram: Added device: zram1 800 | [ 4.593320] zram: Added device: zram2 801 | [ 4.594309] zram: Added device: zram3 802 | [ 4.662513] zram0: detected capacity change from 0 to 130293760 803 | [ 5.710523] Adding 127236k swap on /dev/zram0. Priority:5 extents:1 across:127236k SS 804 | [ 5.711811] zram1: detected capacity change from 0 to 130293760 805 | [ 6.710603] random: crng init done 806 | [ 6.710615] random: 7 urandom warning(s) missed due to ratelimiting 807 | [ 6.723641] Adding 127236k swap on /dev/zram1. Priority:5 extents:1 across:127236k SS 808 | [ 6.724900] zram2: detected capacity change from 0 to 130293760 809 | [ 6.735277] Adding 127236k swap on /dev/zram2. Priority:5 extents:1 across:127236k SS 810 | [ 6.736442] zram3: detected capacity change from 0 to 130293760 811 | [ 6.747334] Adding 127236k swap on /dev/zram3. Priority:5 extents:1 across:127236k SS 812 | [ 7.432790] dwmac-sun8i 5020000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx 813 | [ 7.432822] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready 814 | 815 | # Acknowledgments 816 | 817 | * Icenowy Zheng and Jernej Skrabec (linux-sunxi) for their work on H6 818 | * Armbian 819 | -------------------------------------------------------------------------------- /dts/opi3-h6.dtb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avafinger/orangepi-h6-ubuntu-base-minimal/1c4bff8b59d6758c4badb2f23df598c2f950412e/dts/opi3-h6.dtb -------------------------------------------------------------------------------- /dts/opi3-h6.dts: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: (GPL-2.0+ or MIT) 2 | /* 3 | * Copyright (c) 2017 Icenowy Zheng 4 | * Copyright (c) 2019 Alexander Finger 5 | */ 6 | 7 | /dts-v1/; 8 | 9 | #include "sun50i-h6.dtsi" 10 | 11 | #include 12 | 13 | / { 14 | model = "Opi H6"; 15 | compatible = "OrangePi H6,opi3-h6", "allwinner,sun50i-h6"; 16 | 17 | aliases { 18 | ethernet0 = &emac; 19 | serial0 = &uart0; 20 | }; 21 | 22 | chosen { 23 | stdout-path = "serial0:115200n8"; 24 | }; 25 | 26 | connector { 27 | compatible = "hdmi-connector"; 28 | type = "a"; 29 | 30 | port { 31 | hdmi_con_in: endpoint { 32 | remote-endpoint = <&hdmi_out_con>; 33 | }; 34 | }; 35 | }; 36 | 37 | 38 | leds { 39 | compatible = "gpio-leds"; 40 | 41 | status { 42 | label = "opi-h6:red:status"; 43 | gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */ 44 | linux,default-trigger = "heartbeat"; 45 | }; 46 | 47 | heartbeat { 48 | label = "opi-h6:green:heartbeat"; 49 | gpios = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */ 50 | default-state = "on"; 51 | }; 52 | }; 53 | 54 | reg_gmac_3v3: gmac-3v3 { 55 | compatible = "regulator-fixed"; 56 | regulator-name = "vcc-gmac-3v3"; 57 | regulator-min-microvolt = <3300000>; 58 | regulator-max-microvolt = <3300000>; 59 | startup-delay-us = <100000>; 60 | gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>; /* PD6 */ 61 | vin-supply = <®_aldo2>; 62 | enable-active-high; 63 | }; 64 | 65 | reg_usb_vbus: vbus { 66 | compatible = "regulator-fixed"; 67 | regulator-name = "usb-vbus"; 68 | regulator-min-microvolt = <5000000>; 69 | regulator-max-microvolt = <5000000>; 70 | startup-delay-us = <100000>; 71 | gpio = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; 72 | enable-active-high; 73 | }; 74 | 75 | wifi_pwrseq: wifi_pwrseq { 76 | compatible = "mmc-pwrseq-simple"; 77 | clocks = <&rtc 1>; 78 | clock-names = "ext_clock"; 79 | reset-gpios = <&r_pio 1 3 GPIO_ACTIVE_LOW>; /* PM3 */ 80 | post-power-on-delay-ms = <200>; 81 | }; 82 | }; 83 | 84 | &cpu0 { 85 | cpu-supply = <®_dcdca>; 86 | }; 87 | 88 | &emac { 89 | pinctrl-names = "default"; 90 | pinctrl-0 = <&ext_rgmii_pins>; 91 | phy-mode = "rgmii"; 92 | phy-handle = <&ext_rgmii_phy>; 93 | phy-supply = <®_gmac_3v3>; 94 | allwinner,rx-delay-ps = <0>; 95 | allwinner,tx-delay-ps = <0>; 96 | allwinner,leds-active-low; 97 | status = "okay"; 98 | local-mac-address = [ 00 00 00 00 00 00 ]; 99 | }; 100 | 101 | 102 | &mdio { 103 | ext_rgmii_phy: ethernet-phy@1 { 104 | compatible = "ethernet-phy-ieee802.3-c22"; 105 | reg = <0>; 106 | }; 107 | }; 108 | 109 | 110 | &mmc0 { 111 | pinctrl-names = "default"; 112 | pinctrl-0 = <&mmc0_pins>; 113 | vmmc-supply = <®_cldo1>; 114 | bus-width = <4>; 115 | cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; 116 | status = "okay"; 117 | }; 118 | 119 | &mmc1 { 120 | pinctrl-names = "default"; 121 | pinctrl-0 = <&mmc1_pins>; 122 | vmmc-supply = <®_cldo2>; 123 | vqmmc-supply = <®_bldo3>; 124 | mmc-pwrseq = <&wifi_pwrseq>; 125 | non-removable; 126 | status = "okay"; 127 | 128 | ap6255: sdio_wifi@1 { 129 | reg = <1>; 130 | compatible = "brcm,bcm4329-fmac"; 131 | interrupt-parent = <&r_pio>; 132 | interrupts = <1 0 IRQ_TYPE_LEVEL_LOW>; /* PM0 */ 133 | interrupt-names = "host-wake"; 134 | }; 135 | }; 136 | 137 | &mmc2 { 138 | pinctrl-names = "default"; 139 | pinctrl-0 = <&mmc2_pins>; 140 | vmmc-supply = <®_cldo1>; 141 | vqmmc-supply = <®_bldo2>; 142 | non-removable; 143 | cap-mmc-hw-reset; 144 | bus-width = <8>; 145 | status = "okay"; 146 | }; 147 | 148 | 149 | &ohci0 { 150 | status = "okay"; 151 | }; 152 | 153 | &ehci0 { 154 | status = "okay"; 155 | }; 156 | 157 | &ehci3 { 158 | status = "okay"; 159 | }; 160 | 161 | &ohci3 { 162 | status = "okay"; 163 | }; 164 | 165 | &r_i2c { 166 | status = "okay"; 167 | 168 | axp805: pmic@36 { 169 | compatible = "x-powers,axp805", "x-powers,axp806"; 170 | reg = <0x36>; 171 | interrupt-parent = <&r_intc>; 172 | interrupts = <0 IRQ_TYPE_LEVEL_LOW>; 173 | interrupt-controller; 174 | #interrupt-cells = <1>; 175 | x-powers,self-working-mode; 176 | 177 | regulators { 178 | reg_aldo1: aldo1 { 179 | regulator-always-on; 180 | regulator-min-microvolt = <3300000>; 181 | regulator-max-microvolt = <3300000>; 182 | regulator-name = "vcc-pl"; 183 | }; 184 | 185 | reg_aldo2: aldo2 { 186 | regulator-min-microvolt = <3300000>; 187 | regulator-max-microvolt = <3300000>; 188 | regulator-name = "vcc-ac200"; 189 | }; 190 | 191 | reg_aldo3: aldo3 { 192 | /* This regulator is connected with CLDO1 */ 193 | regulator-always-on; 194 | regulator-min-microvolt = <3300000>; 195 | regulator-max-microvolt = <3300000>; 196 | regulator-name = "vcc-3v3-1"; 197 | }; 198 | 199 | reg_bldo1: bldo1 { 200 | regulator-always-on; 201 | regulator-min-microvolt = <1800000>; 202 | regulator-max-microvolt = <1800000>; 203 | regulator-name = "vcc-bias-pll"; 204 | }; 205 | 206 | reg_bldo2: bldo2 { 207 | regulator-always-on; 208 | regulator-min-microvolt = <1800000>; 209 | regulator-max-microvolt = <1800000>; 210 | regulator-name = "vcc-efuse-pcie-hdmi-io"; 211 | }; 212 | 213 | reg_bldo3: bldo3 { 214 | regulator-always-on; 215 | regulator-min-microvolt = <1800000>; 216 | regulator-max-microvolt = <1800000>; 217 | regulator-name = "vcc-dcxoio"; 218 | }; 219 | 220 | bldo4 { 221 | /* unused */ 222 | }; 223 | 224 | reg_cldo1: cldo1 { 225 | /* This regulator is connected with ALDO3 */ 226 | regulator-always-on; 227 | regulator-min-microvolt = <3300000>; 228 | regulator-max-microvolt = <3300000>; 229 | regulator-name = "vcc-3v3-2"; 230 | }; 231 | 232 | reg_cldo2: cldo2 { 233 | regulator-min-microvolt = <3300000>; 234 | regulator-max-microvolt = <3300000>; 235 | regulator-name = "vcc-wifi-1"; 236 | }; 237 | 238 | reg_cldo3: cldo3 { 239 | regulator-min-microvolt = <3300000>; 240 | regulator-max-microvolt = <3300000>; 241 | regulator-name = "vcc-wifi-2"; 242 | }; 243 | 244 | reg_dcdca: dcdca { 245 | regulator-always-on; 246 | regulator-min-microvolt = <810000>; 247 | regulator-max-microvolt = <1160000>; 248 | regulator-name = "vdd-cpu"; 249 | }; 250 | 251 | reg_dcdcc: dcdcc { 252 | regulator-min-microvolt = <810000>; 253 | regulator-max-microvolt = <1080000>; 254 | regulator-name = "vdd-gpu"; 255 | }; 256 | 257 | reg_dcdcd: dcdcd { 258 | regulator-always-on; 259 | regulator-min-microvolt = <960000>; 260 | regulator-max-microvolt = <960000>; 261 | regulator-name = "vdd-sys"; 262 | }; 263 | 264 | reg_dcdce: dcdce { 265 | regulator-always-on; 266 | regulator-min-microvolt = <1200000>; 267 | regulator-max-microvolt = <1200000>; 268 | regulator-name = "vcc-dram"; 269 | }; 270 | 271 | sw { 272 | /* unused */ 273 | }; 274 | }; 275 | }; 276 | 277 | pcf8563: rtc@51 { 278 | compatible = "nxp,pcf8563"; 279 | reg = <0x51>; 280 | #clock-cells = <0>; 281 | status = "disabled"; 282 | }; 283 | }; 284 | 285 | &uart0 { 286 | pinctrl-names = "default"; 287 | pinctrl-0 = <&uart0_ph_pins>; 288 | status = "okay"; 289 | }; 290 | 291 | &usb2otg { 292 | dr_mode = "host"; 293 | status = "okay"; 294 | }; 295 | 296 | &usb2phy { 297 | usb0_vbus-supply = <®_usb_vbus>; 298 | usb3_vbus-supply = <®_usb_vbus>; 299 | status = "okay"; 300 | }; 301 | 302 | &usb3phy { 303 | phy-supply = <®_usb_vbus>; 304 | status = "okay"; 305 | }; 306 | 307 | &de { 308 | status = "okay"; 309 | }; 310 | 311 | &hdmi { 312 | status = "okay"; 313 | }; 314 | 315 | &hdmi_out { 316 | hdmi_out_con: endpoint { 317 | remote-endpoint = <&hdmi_con_in>; 318 | }; 319 | }; 320 | 321 | -------------------------------------------------------------------------------- /dts/sun50i-h6.dtsi: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: (GPL-2.0+ or MIT) 2 | /* 3 | * Copyright (C) 2017 Icenowy Zheng 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | / { 17 | interrupt-parent = <&gic>; 18 | #address-cells = <1>; 19 | #size-cells = <1>; 20 | 21 | 22 | cpu0_opp_table: opp_table0 { 23 | compatible = "operating-points-v2"; 24 | opp-shared; 25 | 26 | opp-480000000 { 27 | opp-hz = /bits/ 64 <480000000>; 28 | opp-microvolt = <880000>; 29 | clock-latency-ns = <244144>; /* 8 32k periods */ 30 | }; 31 | 32 | opp-648000000 { 33 | opp-hz = /bits/ 64 <648000000>; 34 | opp-microvolt = <880000>; 35 | clock-latency-ns = <244144>; /* 8 32k periods */ 36 | }; 37 | 38 | opp-720000000 { 39 | opp-hz = /bits/ 64 <720000000>; 40 | opp-microvolt = <880000>; 41 | clock-latency-ns = <244144>; /* 8 32k periods */ 42 | }; 43 | 44 | opp-816000000 { 45 | opp-hz = /bits/ 64 <816000000>; 46 | opp-microvolt = <880000>; 47 | clock-latency-ns = <244144>; /* 8 32k periods */ 48 | }; 49 | 50 | opp-888000000 { 51 | opp-hz = /bits/ 64 <888000000>; 52 | opp-microvolt = <880000>; 53 | clock-latency-ns = <244144>; /* 8 32k periods */ 54 | }; 55 | 56 | opp-912000000 { 57 | opp-hz = /bits/ 64 <912000000>; 58 | opp-microvolt = <940000>; 59 | clock-latency-ns = <244144>; /* 8 32k periods */ 60 | }; 61 | 62 | opp-1008000000 { 63 | opp-hz = /bits/ 64 <1008000000>; 64 | opp-microvolt = <940000>; 65 | clock-latency-ns = <244144>; /* 8 32k periods */ 66 | }; 67 | 68 | opp-1320000000 { 69 | opp-hz = /bits/ 64 <1320000000>; 70 | opp-microvolt = <1000000>; 71 | clock-latency-ns = <244144>; /* 8 32k periods */ 72 | }; 73 | 74 | opp-1488000000 { 75 | opp-hz = /bits/ 64 <1488000000>; 76 | opp-microvolt = <1060000>; 77 | clock-latency-ns = <244144>; /* 8 32k periods */ 78 | }; 79 | 80 | opp-1800000000 { 81 | opp-hz = /bits/ 64 <1800000000>; 82 | opp-microvolt = <1160000>; 83 | clock-latency-ns = <244144>; /* 8 32k periods */ 84 | }; 85 | }; 86 | 87 | cpus { 88 | #address-cells = <1>; 89 | #size-cells = <0>; 90 | 91 | cpu0: cpu@0 { 92 | compatible = "arm,cortex-a53", "arm,armv8"; 93 | device_type = "cpu"; 94 | reg = <0>; 95 | enable-method = "psci"; 96 | 97 | clocks = <&ccu CLK_CPUX>; 98 | clock-names = "cpu"; 99 | operating-points-v2 = <&cpu0_opp_table>; 100 | #cooling-cells = <2>; 101 | }; 102 | 103 | cpu1: cpu@1 { 104 | compatible = "arm,cortex-a53", "arm,armv8"; 105 | device_type = "cpu"; 106 | reg = <1>; 107 | enable-method = "psci"; 108 | operating-points-v2 = <&cpu0_opp_table>; 109 | }; 110 | 111 | cpu2: cpu@2 { 112 | compatible = "arm,cortex-a53", "arm,armv8"; 113 | device_type = "cpu"; 114 | reg = <2>; 115 | enable-method = "psci"; 116 | operating-points-v2 = <&cpu0_opp_table>; 117 | }; 118 | 119 | cpu3: cpu@3 { 120 | compatible = "arm,cortex-a53", "arm,armv8"; 121 | device_type = "cpu"; 122 | reg = <3>; 123 | enable-method = "psci"; 124 | operating-points-v2 = <&cpu0_opp_table>; 125 | }; 126 | }; 127 | 128 | de: display-engine { 129 | compatible = "allwinner,sun50i-h6-display-engine"; 130 | allwinner,pipelines = <&mixer0>; 131 | status = "disabled"; 132 | }; 133 | 134 | iosc: internal-osc-clk { 135 | #clock-cells = <0>; 136 | compatible = "fixed-clock"; 137 | clock-frequency = <16000000>; 138 | clock-accuracy = <300000000>; 139 | clock-output-names = "iosc"; 140 | }; 141 | 142 | osc24M: osc24M_clk { 143 | #clock-cells = <0>; 144 | compatible = "fixed-clock"; 145 | clock-frequency = <24000000>; 146 | clock-output-names = "osc24M"; 147 | }; 148 | 149 | osc32k: osc32k_clk { 150 | #clock-cells = <0>; 151 | compatible = "fixed-clock"; 152 | clock-frequency = <32768>; 153 | clock-output-names = "osc32k"; 154 | }; 155 | 156 | ext_osc32k: ext_osc32k_clk { 157 | #clock-cells = <0>; 158 | compatible = "fixed-clock"; 159 | clock-frequency = <32768>; 160 | clock-output-names = "ext_osc32k"; 161 | }; 162 | 163 | 164 | psci { 165 | compatible = "arm,psci-0.2"; 166 | method = "smc"; 167 | }; 168 | 169 | timer { 170 | compatible = "arm,armv8-timer"; 171 | interrupts = , 173 | , 175 | , 177 | ; 179 | }; 180 | 181 | soc { 182 | compatible = "simple-bus"; 183 | #address-cells = <1>; 184 | #size-cells = <1>; 185 | ranges; 186 | 187 | display-engine@1000000 { 188 | compatible = "allwinner,sun50i-h6-de3", 189 | "allwinner,sun50i-a64-de2"; 190 | reg = <0x1000000 0x400000>; 191 | allwinner,sram = <&de2_sram 1>; 192 | #address-cells = <1>; 193 | #size-cells = <1>; 194 | ranges = <0 0x1000000 0x400000>; 195 | 196 | display_clocks: clock@0 { 197 | compatible = "allwinner,sun50i-h6-de3-clk"; 198 | reg = <0x0 0x10000>; 199 | clocks = <&ccu CLK_DE>, 200 | <&ccu CLK_BUS_DE>; 201 | clock-names = "mod", 202 | "bus"; 203 | resets = <&ccu RST_BUS_DE>; 204 | #clock-cells = <1>; 205 | #reset-cells = <1>; 206 | }; 207 | 208 | mixer0: mixer@100000 { 209 | compatible = "allwinner,sun50i-h6-de3-mixer-0"; 210 | reg = <0x100000 0x100000>; 211 | clocks = <&display_clocks CLK_BUS_MIXER0>, 212 | <&display_clocks CLK_MIXER0>; 213 | clock-names = "bus", 214 | "mod"; 215 | resets = <&display_clocks RST_MIXER0>; 216 | 217 | ports { 218 | #address-cells = <1>; 219 | #size-cells = <0>; 220 | 221 | mixer0_out: port@1 { 222 | reg = <1>; 223 | 224 | mixer0_out_tcon_top_mixer0: endpoint { 225 | remote-endpoint = <&tcon_top_mixer0_in_mixer0>; 226 | }; 227 | }; 228 | }; 229 | }; 230 | }; 231 | 232 | syscon: syscon@3000000 { 233 | compatible = "allwinner,sun50i-h6-system-control", 234 | "allwinner,sun50i-a64-system-control"; 235 | reg = <0x03000000 0x1000>; 236 | #address-cells = <1>; 237 | #size-cells = <1>; 238 | ranges; 239 | 240 | sram_c: sram@28000 { 241 | compatible = "mmio-sram"; 242 | reg = <0x00028000 0x1e000>; 243 | #address-cells = <1>; 244 | #size-cells = <1>; 245 | ranges = <0 0x00028000 0x1e000>; 246 | 247 | de2_sram: sram-section@0 { 248 | compatible = "allwinner,sun50i-h6-sram-c", 249 | "allwinner,sun50i-a64-sram-c"; 250 | reg = <0x0000 0x1e000>; 251 | }; 252 | }; 253 | }; 254 | 255 | dma: dma-controller@3002000 { 256 | compatible = "allwinner,sun50i-a64-dma"; 257 | reg = <0x03002000 0x1000>; 258 | interrupts = ; 259 | clocks = <&ccu CLK_BUS_DMA>; 260 | dma-channels = <8>; 261 | dma-requests = <27>; 262 | resets = <&ccu RST_BUS_DMA>; 263 | #dma-cells = <1>; 264 | }; 265 | 266 | 267 | ccu: clock@3001000 { 268 | compatible = "allwinner,sun50i-h6-ccu"; 269 | reg = <0x03001000 0x1000>; 270 | clocks = <&osc24M>, <&osc32k>, <&iosc>; 271 | clock-names = "hosc", "losc", "iosc"; 272 | #clock-cells = <1>; 273 | #reset-cells = <1>; 274 | }; 275 | 276 | gic: interrupt-controller@3021000 { 277 | compatible = "arm,gic-400"; 278 | reg = <0x03021000 0x1000>, 279 | <0x03022000 0x2000>, 280 | <0x03024000 0x2000>, 281 | <0x03026000 0x2000>; 282 | interrupts = ; 283 | interrupt-controller; 284 | #interrupt-cells = <3>; 285 | }; 286 | 287 | sid: efuse@3006000 { 288 | compatible = "allwinner,sun50i-h6-sid"; 289 | reg = <0x03006000 0x1000>; 290 | #address-cells = <1>; 291 | #size-cells = <1>; 292 | 293 | ths_calib: thermal-sensor-calibration@14 { 294 | reg = <0x14 0x6>; 295 | }; 296 | }; 297 | 298 | pio: pinctrl@300b000 { 299 | compatible = "allwinner,sun50i-h6-pinctrl"; 300 | reg = <0x0300b000 0x400>; 301 | interrupts = , 302 | , 303 | , 304 | ; 305 | clocks = <&ccu CLK_APB1>, <&osc24M>, <&osc32k>; 306 | clock-names = "apb", "hosc", "losc"; 307 | gpio-controller; 308 | #gpio-cells = <3>; 309 | interrupt-controller; 310 | #interrupt-cells = <3>; 311 | 312 | ext_rgmii_pins: rgmii_pins { 313 | pins = "PD0", "PD1", "PD2", "PD3", "PD4", 314 | "PD5", "PD7", "PD8", "PD9", "PD10", 315 | "PD11", "PD12", "PD13", "PD19", "PD20"; 316 | function = "emac"; 317 | drive-strength = <40>; 318 | }; 319 | 320 | hdmi_pins: hdmi-pins { 321 | pins = "PH8", "PH9", "PH10"; 322 | function = "hdmi"; 323 | }; 324 | 325 | mmc0_pins: mmc0-pins { 326 | pins = "PF0", "PF1", "PF2", "PF3", 327 | "PF4", "PF5"; 328 | function = "mmc0"; 329 | drive-strength = <30>; 330 | bias-pull-up; 331 | }; 332 | 333 | mmc0_cd_pin: mmc0_cd_pin { 334 | pins = "PF6"; 335 | function = "gpio_in"; 336 | bias-pull-up; 337 | }; 338 | 339 | mmc1_pins: mmc1-pins { 340 | pins = "PG0", "PG1", "PG2", "PG3", 341 | "PG4", "PG5"; 342 | function = "mmc1"; 343 | drive-strength = <30>; 344 | bias-pull-up; 345 | }; 346 | 347 | mmc2_pins: mmc2-pins { 348 | pins = "PC1", "PC4", "PC5", "PC6", 349 | "PC7", "PC8", "PC9", "PC10", 350 | "PC11", "PC12", "PC13", "PC14"; 351 | function = "mmc2"; 352 | drive-strength = <30>; 353 | bias-pull-up; 354 | }; 355 | 356 | uart0_ph_pins: uart0-ph { 357 | pins = "PH0", "PH1"; 358 | function = "uart0"; 359 | }; 360 | }; 361 | 362 | mmc0: mmc@4020000 { 363 | compatible = "allwinner,sun50i-h6-mmc", 364 | "allwinner,sun50i-a64-mmc"; 365 | reg = <0x04020000 0x1000>; 366 | clocks = <&ccu CLK_BUS_MMC0>, <&ccu CLK_MMC0>; 367 | clock-names = "ahb", "mmc"; 368 | resets = <&ccu RST_BUS_MMC0>; 369 | reset-names = "ahb"; 370 | interrupts = ; 371 | status = "disabled"; 372 | #address-cells = <1>; 373 | #size-cells = <0>; 374 | }; 375 | 376 | mmc1: mmc@4021000 { 377 | compatible = "allwinner,sun50i-h6-mmc", 378 | "allwinner,sun50i-a64-mmc"; 379 | reg = <0x04021000 0x1000>; 380 | clocks = <&ccu CLK_BUS_MMC1>, <&ccu CLK_MMC1>; 381 | clock-names = "ahb", "mmc"; 382 | resets = <&ccu RST_BUS_MMC1>; 383 | reset-names = "ahb"; 384 | interrupts = ; 385 | status = "disabled"; 386 | #address-cells = <1>; 387 | #size-cells = <0>; 388 | }; 389 | 390 | mmc2: mmc@4022000 { 391 | compatible = "allwinner,sun50i-h6-emmc", 392 | "allwinner,sun50i-a64-emmc"; 393 | reg = <0x04022000 0x1000>; 394 | clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>; 395 | clock-names = "ahb", "mmc"; 396 | resets = <&ccu RST_BUS_MMC2>; 397 | reset-names = "ahb"; 398 | interrupts = ; 399 | status = "disabled"; 400 | #address-cells = <1>; 401 | #size-cells = <0>; 402 | }; 403 | 404 | uart0: serial@5000000 { 405 | compatible = "snps,dw-apb-uart"; 406 | reg = <0x05000000 0x400>; 407 | interrupts = ; 408 | reg-shift = <2>; 409 | reg-io-width = <4>; 410 | clocks = <&ccu CLK_BUS_UART0>; 411 | resets = <&ccu RST_BUS_UART0>; 412 | status = "disabled"; 413 | }; 414 | 415 | uart1: serial@5000400 { 416 | compatible = "snps,dw-apb-uart"; 417 | reg = <0x05000400 0x400>; 418 | interrupts = ; 419 | reg-shift = <2>; 420 | reg-io-width = <4>; 421 | clocks = <&ccu CLK_BUS_UART1>; 422 | resets = <&ccu RST_BUS_UART1>; 423 | status = "disabled"; 424 | }; 425 | 426 | uart2: serial@5000800 { 427 | compatible = "snps,dw-apb-uart"; 428 | reg = <0x05000800 0x400>; 429 | interrupts = ; 430 | reg-shift = <2>; 431 | reg-io-width = <4>; 432 | clocks = <&ccu CLK_BUS_UART2>; 433 | resets = <&ccu RST_BUS_UART2>; 434 | status = "disabled"; 435 | }; 436 | 437 | uart3: serial@5000c00 { 438 | compatible = "snps,dw-apb-uart"; 439 | reg = <0x05000c00 0x400>; 440 | interrupts = ; 441 | reg-shift = <2>; 442 | reg-io-width = <4>; 443 | clocks = <&ccu CLK_BUS_UART3>; 444 | resets = <&ccu RST_BUS_UART3>; 445 | status = "disabled"; 446 | }; 447 | 448 | usb2otg: usb@5100000 { 449 | compatible = "allwinner,sun50i-h6-musb", 450 | "allwinner,sun8i-a33-musb"; 451 | reg = <0x05100000 0x0400>; 452 | clocks = <&ccu CLK_BUS_OTG>; 453 | resets = <&ccu RST_BUS_OTG>; 454 | interrupts = ; 455 | interrupt-names = "mc"; 456 | phys = <&usb2phy 0>; 457 | phy-names = "usb"; 458 | extcon = <&usb2phy 0>; 459 | status = "disabled"; 460 | }; 461 | 462 | usb2phy: phy@5100400 { 463 | compatible = "allwinner,sun50i-h6-usb-phy"; 464 | reg = <0x05100400 0x24>, 465 | <0x05101800 0x4>, 466 | <0x05311800 0x4>; 467 | reg-names = "phy_ctrl", 468 | "pmu0", 469 | "pmu3"; 470 | clocks = <&ccu CLK_USB_PHY0>, 471 | <&ccu CLK_USB_PHY3>; 472 | clock-names = "usb0_phy", 473 | "usb3_phy"; 474 | resets = <&ccu RST_USB_PHY0>, 475 | <&ccu RST_USB_PHY3>; 476 | reset-names = "usb0_reset", 477 | "usb3_reset"; 478 | status = "disabled"; 479 | #phy-cells = <1>; 480 | }; 481 | 482 | ehci0: usb@5101000 { 483 | compatible = "allwinner,sun50i-h6-ehci", "generic-ehci"; 484 | reg = <0x05101000 0x100>; 485 | interrupts = ; 486 | clocks = <&ccu CLK_BUS_OHCI0>, 487 | <&ccu CLK_BUS_EHCI0>, 488 | <&ccu CLK_USB_OHCI0>; 489 | resets = <&ccu RST_BUS_OHCI0>, 490 | <&ccu RST_BUS_EHCI0>; 491 | status = "disabled"; 492 | }; 493 | 494 | ohci0: usb@5101400 { 495 | compatible = "allwinner,sun50i-h6-ohci", "generic-ohci"; 496 | reg = <0x05101400 0x100>; 497 | interrupts = ; 498 | clocks = <&ccu CLK_BUS_OHCI0>, 499 | <&ccu CLK_USB_OHCI0>; 500 | resets = <&ccu RST_BUS_OHCI0>; 501 | status = "disabled"; 502 | }; 503 | 504 | dwc3: dwc3@5200000 { 505 | compatible = "snps,dwc3"; 506 | reg = <0x05200000 0x10000>; 507 | interrupts = ; 508 | clocks = <&ccu CLK_BUS_XHCI>, 509 | <&ccu CLK_BUS_XHCI>, 510 | <&osc32k>; 511 | clock-names = "ref", "bus_early", "suspend"; 512 | resets = <&ccu RST_BUS_XHCI>; 513 | /* 514 | * The datasheet of the chip doesn't declare the 515 | * peripheral function, and there's no boards known 516 | * to have a USB Type-B port routed to the port. 517 | * In addition, no one has tested the peripheral 518 | * function yet. 519 | * So set the dr_mode to "host" in the DTSI file. 520 | */ 521 | dr_mode = "host"; 522 | phys = <&usb3phy>; 523 | phy-names = "usb3-phy"; 524 | status = "disabled"; 525 | }; 526 | 527 | usb3phy: phy@5210000 { 528 | compatible = "allwinner,sun50i-h6-usb3-phy"; 529 | reg = <0x5210000 0x10000>; 530 | clocks = <&ccu CLK_USB_PHY1>; 531 | resets = <&ccu RST_USB_PHY1>; 532 | #phy-cells = <0>; 533 | status = "disabled"; 534 | }; 535 | 536 | ehci3: usb@5311000 { 537 | compatible = "allwinner,sun50i-h6-ehci", "generic-ehci"; 538 | reg = <0x05311000 0x100>; 539 | interrupts = ; 540 | clocks = <&ccu CLK_BUS_OHCI3>, 541 | <&ccu CLK_BUS_EHCI3>, 542 | <&ccu CLK_USB_OHCI3>; 543 | resets = <&ccu RST_BUS_OHCI3>, 544 | <&ccu RST_BUS_EHCI3>; 545 | phys = <&usb2phy 3>; 546 | phy-names = "usb"; 547 | status = "disabled"; 548 | }; 549 | 550 | ohci3: usb@5311400 { 551 | compatible = "allwinner,sun50i-h6-ohci", "generic-ohci"; 552 | reg = <0x05311400 0x100>; 553 | interrupts = ; 554 | clocks = <&ccu CLK_BUS_OHCI3>, 555 | <&ccu CLK_USB_OHCI3>; 556 | resets = <&ccu RST_BUS_OHCI3>; 557 | phys = <&usb2phy 3>; 558 | phy-names = "usb"; 559 | status = "disabled"; 560 | }; 561 | 562 | hdmi: hdmi@6000000 { 563 | compatible = "allwinner,sun50i-h6-dw-hdmi"; 564 | reg = <0x06000000 0x10000>; 565 | reg-io-width = <1>; 566 | interrupts = ; 567 | clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>, 568 | <&ccu CLK_HDMI>, <&ccu CLK_HDMI_CEC>, 569 | <&ccu CLK_HDCP>, <&ccu CLK_BUS_HDCP>; 570 | clock-names = "iahb", "isfr", "tmds", "cec", "hdcp", 571 | "hdcp-bus"; 572 | resets = <&ccu RST_BUS_HDMI_SUB>, <&ccu RST_BUS_HDCP>; 573 | reset-names = "ctrl", "hdcp"; 574 | phys = <&hdmi_phy>; 575 | phy-names = "hdmi-phy"; 576 | pinctrl-names = "default"; 577 | pinctrl-0 = <&hdmi_pins>; 578 | status = "disabled"; 579 | 580 | ports { 581 | #address-cells = <1>; 582 | #size-cells = <0>; 583 | 584 | hdmi_in: port@0 { 585 | reg = <0>; 586 | 587 | hdmi_in_tcon_top: endpoint { 588 | remote-endpoint = <&tcon_top_hdmi_out_hdmi>; 589 | }; 590 | }; 591 | 592 | hdmi_out: port@1 { 593 | reg = <1>; 594 | }; 595 | }; 596 | }; 597 | 598 | emac: ethernet@5020000 { 599 | compatible = "allwinner,sun50i-h6-emac", 600 | "allwinner,sun50i-a64-emac"; 601 | syscon = <&syscon>; 602 | reg = <0x05020000 0x10000>; 603 | interrupts = ; 604 | interrupt-names = "macirq"; 605 | resets = <&ccu RST_BUS_EMAC>; 606 | reset-names = "stmmaceth"; 607 | clocks = <&ccu CLK_BUS_EMAC>; 608 | clock-names = "stmmaceth"; 609 | status = "disabled"; 610 | #address-cells = <1>; 611 | #size-cells = <0>; 612 | 613 | mdio: mdio { 614 | compatible = "snps,dwmac-mdio"; 615 | #address-cells = <1>; 616 | #size-cells = <0>; 617 | }; 618 | }; 619 | 620 | 621 | hdmi_phy: hdmi-phy@6010000 { 622 | compatible = "allwinner,sun50i-h6-hdmi-phy"; 623 | reg = <0x06010000 0x10000>; 624 | clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>; 625 | clock-names = "bus", "mod"; 626 | resets = <&ccu RST_BUS_HDMI>; 627 | reset-names = "phy"; 628 | #phy-cells = <0>; 629 | }; 630 | 631 | tcon_top: tcon-top@6510000 { 632 | compatible = "allwinner,sun50i-h6-tcon-top"; 633 | reg = <0x06510000 0x1000>; 634 | clocks = <&ccu CLK_BUS_TCON_TOP>, 635 | <&ccu CLK_TCON_TV0>; 636 | clock-names = "bus", 637 | "tcon-tv0"; 638 | clock-output-names = "tcon-top-tv0"; 639 | resets = <&ccu RST_BUS_TCON_TOP>; 640 | reset-names = "rst"; 641 | #clock-cells = <1>; 642 | 643 | ports { 644 | #address-cells = <1>; 645 | #size-cells = <0>; 646 | 647 | tcon_top_mixer0_in: port@0 { 648 | #address-cells = <1>; 649 | #size-cells = <0>; 650 | reg = <0>; 651 | 652 | tcon_top_mixer0_in_mixer0: endpoint@0 { 653 | reg = <0>; 654 | remote-endpoint = <&mixer0_out_tcon_top_mixer0>; 655 | }; 656 | }; 657 | 658 | tcon_top_mixer0_out: port@1 { 659 | #address-cells = <1>; 660 | #size-cells = <0>; 661 | reg = <1>; 662 | 663 | tcon_top_mixer0_out_tcon_tv: endpoint@2 { 664 | reg = <2>; 665 | remote-endpoint = <&tcon_tv_in_tcon_top_mixer0>; 666 | }; 667 | }; 668 | 669 | tcon_top_hdmi_in: port@4 { 670 | #address-cells = <1>; 671 | #size-cells = <0>; 672 | reg = <4>; 673 | 674 | tcon_top_hdmi_in_tcon_tv: endpoint@0 { 675 | reg = <0>; 676 | remote-endpoint = <&tcon_tv_out_tcon_top>; 677 | }; 678 | }; 679 | 680 | tcon_top_hdmi_out: port@5 { 681 | reg = <5>; 682 | 683 | tcon_top_hdmi_out_hdmi: endpoint { 684 | remote-endpoint = <&hdmi_in_tcon_top>; 685 | }; 686 | }; 687 | }; 688 | }; 689 | 690 | tcon_tv: lcd-controller@6515000 { 691 | compatible = "allwinner,sun50i-h6-tcon-tv", 692 | "allwinner,sun8i-r40-tcon-tv"; 693 | reg = <0x06515000 0x1000>; 694 | interrupts = ; 695 | clocks = <&ccu CLK_BUS_TCON_TV0>, 696 | <&tcon_top CLK_TCON_TOP_TV0>; 697 | clock-names = "ahb", 698 | "tcon-ch1"; 699 | resets = <&ccu RST_BUS_TCON_TV0>; 700 | reset-names = "lcd"; 701 | 702 | ports { 703 | #address-cells = <1>; 704 | #size-cells = <0>; 705 | 706 | tcon_tv_in: port@0 { 707 | reg = <0>; 708 | 709 | tcon_tv_in_tcon_top_mixer0: endpoint { 710 | remote-endpoint = <&tcon_top_mixer0_out_tcon_tv>; 711 | }; 712 | }; 713 | 714 | tcon_tv_out: port@1 { 715 | #address-cells = <1>; 716 | #size-cells = <0>; 717 | reg = <1>; 718 | 719 | tcon_tv_out_tcon_top: endpoint@1 { 720 | reg = <1>; 721 | remote-endpoint = <&tcon_top_hdmi_in_tcon_tv>; 722 | }; 723 | }; 724 | }; 725 | }; 726 | 727 | ths: ths@5070400 { 728 | compatible = "allwinner,sun50i-h6-ths"; 729 | reg = <0x05070400 0x100>; 730 | interrupts = ; 731 | clocks = <&ccu CLK_BUS_THS>; 732 | clock-names = "bus"; 733 | resets = <&ccu RST_BUS_THS>; 734 | nvmem-cells = <&ths_calib>; 735 | nvmem-cell-names = "calibration"; 736 | #thermal-sensor-cells = <1>; 737 | }; 738 | 739 | r_ccu: clock@7010000 { 740 | compatible = "allwinner,sun50i-h6-r-ccu"; 741 | reg = <0x07010000 0x400>; 742 | clocks = <&osc24M>, <&osc32k>, <&iosc>, 743 | <&ccu CLK_PLL_PERIPH0>; 744 | clock-names = "hosc", "losc", "iosc", "pll-periph"; 745 | #clock-cells = <1>; 746 | #reset-cells = <1>; 747 | }; 748 | 749 | rtc: rtc@7000000 { 750 | compatible = "allwinner,sun6i-a31-rtc"; 751 | reg = <0x07000000 0x54>; 752 | interrupts = , 753 | ; 754 | clock-output-names = "rtc-osc32k", "rtc-osc32k-out"; 755 | clocks = <&ext_osc32k>; 756 | #clock-cells = <1>; 757 | }; 758 | 759 | 760 | r_intc: interrupt-controller@7021000 { 761 | compatible = "allwinner,sun50i-h6-r-intc", 762 | "allwinner,sun6i-a31-r-intc"; 763 | interrupt-controller; 764 | #interrupt-cells = <2>; 765 | reg = <0x07021000 0x400>; 766 | interrupts = ; 767 | }; 768 | 769 | r_pio: pinctrl@7022000 { 770 | compatible = "allwinner,sun50i-h6-r-pinctrl"; 771 | reg = <0x07022000 0x400>; 772 | interrupts = , 773 | ; 774 | clocks = <&r_ccu CLK_R_APB1>, <&osc24M>, <&osc32k>; 775 | clock-names = "apb", "hosc", "losc"; 776 | gpio-controller; 777 | #gpio-cells = <3>; 778 | interrupt-controller; 779 | #interrupt-cells = <3>; 780 | 781 | r_i2c_pins: r-i2c { 782 | pins = "PL0", "PL1"; 783 | function = "s_i2c"; 784 | }; 785 | }; 786 | 787 | r_i2c: i2c@7081400 { 788 | compatible = "allwinner,sun6i-a31-i2c"; 789 | reg = <0x07081400 0x400>; 790 | interrupts = ; 791 | clocks = <&r_ccu CLK_R_APB2_I2C>; 792 | resets = <&r_ccu RST_R_APB2_I2C>; 793 | pinctrl-names = "default"; 794 | pinctrl-0 = <&r_i2c_pins>; 795 | status = "disabled"; 796 | #address-cells = <1>; 797 | #size-cells = <0>; 798 | }; 799 | }; 800 | 801 | thermal-zones { 802 | cpu_thermal { 803 | /* milliseconds */ 804 | polling-delay-passive = <250>; 805 | polling-delay = <1000>; 806 | thermal-sensors = <&ths 0>; 807 | 808 | cooling-maps { 809 | map0 { 810 | trip = <&cpu_alert0>; 811 | cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; 812 | }; 813 | 814 | map1 { 815 | trip = <&cpu_alert1>; 816 | cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; 817 | }; 818 | }; 819 | 820 | trips { 821 | cpu_alert0: cpu_alert0 { 822 | /* milliCelsius */ 823 | temperature = <80000>; 824 | hysteresis = <2000>; 825 | type = "passive"; 826 | }; 827 | 828 | cpu_alert1: cpu_alert1 { 829 | /* milliCelsius */ 830 | temperature = <90000>; 831 | hysteresis = <2000>; 832 | type = "hot"; 833 | }; 834 | 835 | cpu_crit: cpu_crit { 836 | /* milliCelsius */ 837 | temperature = <1000000>; 838 | hysteresis = <2000>; 839 | type = "critical"; 840 | }; 841 | }; 842 | }; 843 | 844 | gpu_thermal { 845 | /* milliseconds */ 846 | polling-delay-passive = <250>; 847 | polling-delay = <1000>; 848 | thermal-sensors = <&ths 1>; 849 | }; 850 | }; 851 | }; 852 | -------------------------------------------------------------------------------- /img/hdmi_1920x1080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avafinger/orangepi-h6-ubuntu-base-minimal/1c4bff8b59d6758c4badb2f23df598c2f950412e/img/hdmi_1920x1080.png -------------------------------------------------------------------------------- /img/htop-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avafinger/orangepi-h6-ubuntu-base-minimal/1c4bff8b59d6758c4badb2f23df598c2f950412e/img/htop-1.png -------------------------------------------------------------------------------- /img/htop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avafinger/orangepi-h6-ubuntu-base-minimal/1c4bff8b59d6758c4badb2f23df598c2f950412e/img/htop.png -------------------------------------------------------------------------------- /img/lxde.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avafinger/orangepi-h6-ubuntu-base-minimal/1c4bff8b59d6758c4badb2f23df598c2f950412e/img/lxde.png --------------------------------------------------------------------------------