This is a cache of https://discuss.96boards.org/t/is-there-a-place-to-get-official-support-for-mthe-hikey970/6745. It is a snapshot of the page at 2024-09-19T12:10:16.397+0000.
Is there a place to get official support for mthe Hikey970 - HiKey970 - 96Boards Forum

Is there a place to get official support for mthe Hikey970

Is there a place to get official support for this board? I’m willing to pay. It looks like we’re just spinning our wheels, and while public forums are awesome at times, I can’t seem to get any response.

Any ideas anyone? Please.

Hi Alaw,

We can support Hi Key 970 and 960 .

Please check Dm for details .

What are the challenges you are facing ?

Regards
Nik

Well, the HiKey 970 is pretty rough on all edges. I could not get any linux kernel to work properly - I found one and have now a complete ubuntu Xfce4 desktop running on it. But I can’t really find any dedicated information about that board. Maybe the price is a blocker? Its such a great device, though, with a couple of quirks. Like the linux video driver is really messed up. Its really a pity that it only outputs 1080p an the mouse is a softpointer (flickering). The USB is there for KB and mouse - and unstable if you plug a highspeed and a low speed device (I read the doc, so I explains that’s how it was designed), it pretty much hangs itself. The 3670 can drive 2 displays, one over DP yet this is not wired - despite 2 USB-C plugs on the board.
However, it is still my favorite. It has 2 PCIe slots - where I actually found adapter (cables) for, to my surprise even a 3 slot extender for the MiniPCI. Its the fastest Arm board one can buy and 6GB is great if you want to run this with a desktop OS. I got at least kernel sources but I am unclear what the current status is. The last commit is from a year or so ago. My PCIe’s don’t really work - even though LSPCI detects them. Oh well, time for some kernel hacking.
What’s that latest stable kernel tree (and what branch? LeMaker at HiKey970-4.9?). I am typing this on the HiKey ubuntu 18.04LTS in Chromium. So that’s fun. But it could have more support.

jurgen@workstation-02:~$ uname -a
Linux workstation-02 4.9.78debian-ge7a73440-dirty #74 SMP PREEMPT Sun Apr 7 20:55:02 CEST 2019 aarch64 aarch64 aarch64 GNU/Linux
:wink:

Hi @jusho,

Here are the kernel options available for Hikey970:

  1. Vendor kernel by Hisilicon - https://github.com/96boards-hikey/linux.git Branch: hikey970-v4.9
  2. My custom kernel - manivannan.sadhasivam/96b-common.git - [no description] Branch - hikey970_pcie
  3. Mainline kernel - kernel/git/torvalds/linux.git - Linux kernel source tree

The first one has almost all features enabled but it is not maintained anymore and is based on 4.9 version. The second one is maintained by me (not actively) and I use this for my upstreaming activities. My kernel tree only has PCI-E enabled apart from mainline kernel. The mainline kernel has only uSD, Wifi and UFS support enabled. So basically, you can boot a distro with network support.

For building and flashing the kernel onto hikey970, you can use something like below:

$ make Image dtbs
$ wget http://releases.linaro.org/96boards/dragonboard410c/linaro/debian/18.01/initrd.img-4.14.0-qcomlt-arm64 -O initrd.img
$ cat arch/arm64/boot/Image arch/arm64/boot/dts/hisilicon/hi3670-hikey970.dtb > Image-dtb
$ mkbootimg --kernel Image-dtb --ramdisk initrd.img --cmdline "earlycon=pl011,0xfff32000 console=ttyS0,115200n8 root=/dev/disk/by-partlabel/rootfs rw rootwait" --base 0x0 --tags_offset 0x07A00000 --kernel_offset 0x00080000 --ramdisk_offset 0x07c00000 --output boot.img
# Prepare the board in fastboot mode
$ sudo fastboot flash boot boot.img

PS: While building the kernel, make sure you have enabled all required drivers.

I have it running stable on ubuntu 18LTS for a while now. I have a mini PCIe and NVMe adapter attached to it. I want to do custom kernel builds to full support PCIe (with the adapter) and NVMe drives. I actually have 4 PCIe x1 slots now. I still want uSD, but I don’t need Wifi. I’ll have a look at your kernel. The one I have doesn’t seem to work with both, MiniPCI and NVMe on at the same time (e.g. recognizes MiniPCI but than the nvme disappears). Since the GPU seems to have resolution limits, I want to see if I can get a external GPU working (GT710 with nouveau drivers - did anyone try that, yet)? There were some patches made to the GPU code outside the official Linaro mainline. Have those ever been integrated? I could not get any official distro working properly on my monitor(s). The one I have and which works has a flickering mouse cursor (soft cursor?).

I compiled your hikey970_pcie branch (that’s a 5.1 kernel?) but didn’t get very far.

[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 5.1.0-rc1-g4917380ad023 (jurgen@workstation-02) (gcc version 7.4.0 (ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)) #1 SMP PREEMPT Sat Oct 12 11:34:01 MST 2019
[ 0.000000] Machine model: HiKey970
[ 0.000000] earlycon: pl11 at MMIO 0x00000000fff32000 (options ‘115200’)
[ 0.000000] printk: bootconsole [pl11] enabled
[ 0.040070] interrupt-controller@f4000000: unable to locate ITS domain
[ 0.046704] interrupt-controller@f4000000: Unable to locate ITS domain
[ 1.437051] kirin-pcie f4000000.pcie: Link Fail
[ 1.471364] dwmmc_k3 ff37f000.dwmmc1: Regulator set error -22
[ 2.073570] dwmmc_k3 ff37f000.dwmmc1: Busy; trying anyway
[ 2.578977] mmc_host mmc0: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
[ 2.589858] dwmmc_k3 ff37f000.dwmmc1: Regulator set error -22
[ 2.628873] mmc0: error -110 whilst initialising SD card
[ 3.135013] dwmmc_k3 ff37f000.dwmmc1: Busy; trying anyway
[ 3.640412] mmc_host mmc0: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
[ 3.650027] dwmmc_k3 ff37f000.dwmmc1: Regulator set error -22
[ 3.668305] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 2400000Hz
[ 3.690661] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 2400000Hz
[ 3.699668] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 2400000Hz
[ 3.721476] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 2400000Hz
[ 4.229262] dwmmc_k3 ff37f000.dwmmc1: Busy; trying anyway

This is with the defconfig. Haven’t looked any further. There’s other older patches (IO and DMA on your older branches). Doesn’t look like those ever made it into the 5.1. Are those required?

@jusho You need to make UFS Kconfig options in menuconfig builtin(=y).

Some success here:

[ OK ] Started Flush Journal to Persistent Storage.
[ 3.685363] mmc_host mmc0: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
[ 3.695015] dwmmc_k3 ff37f000.dwmmc1: Regulator set error -22
[ 3.713302] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 2400000Hz
[ 3.735666] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 2400000Hz
[ 3.744673] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 2400000Hz
[ 3.766492] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 2400000Hz
Starting Load/Save RF Kill Switch Status…
[ OK ] Started Load/Save RF Kill Switch Status.
[ 4.274288] dwmmc_k3 ff37f000.dwmmc1: Busy; trying anyway
[ 4.779707] mmc_host mmc0: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
[ 4.789367] dwmmc_k3 ff37f000.dwmmc1: Regulator set error -22
[ 4.807663] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 1600000Hz
[ 4.830046] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 1600000Hz
[ 4.839051] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 1600000Hz
[ 4.860880] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 1600000Hz
[ 5.368672] dwmmc_k3 ff37f000.dwmmc1: Busy; trying anyway
[ 5.874073] mmc_host mmc0: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
[ 5.883692] dwmmc_k3 ff37f000.dwmmc1: Regulator set error -22
[ 5.901960] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 800000Hz
[ 5.927783] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 800000Hz
[ 5.936978] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 800000Hz
[ 5.972873] dwmmc_k3 ff37f000.dwmmc1: failed to set rate 800000Hz
[ 6.482147] dwmmc_k3 ff37f000.dwmmc1: Busy; trying anyway
[ 6.987549] mmc_host mmc0: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
[ TIME ] Timed out waiting for device dev-disk-by\x2dlabel-Data.device.
[DEPEND] Dependency failed for File System Check on /dev/disk/by-label/Data.
[DEPEND] Dependency failed for /storage.
[DEPEND] Dependency failed for Local File Systems.
Starting Enable support for additional executable binary formats…
Starting Set console font and keymap…
[ OK ] Reached target Timers.
[ OK ] Reached target Login Prompts.
Starting Set console scheme…
[ OK ] Reached target Paths.
Starting Create Volatile Files and Directories…
Starting Tell Plymouth To Write Out Runtime Data…
[ OK ] Closed Syslog Socket.
[ OK ] Reached target Sockets.
[ OK ] Started Emergency Shell.
[ OK ] Reached target Emergency Mode.
[ OK ] Started Enable support for additional executable binary formats.
[ OK ] Started Set console font and keymap.
[ OK ] Started Set console scheme.
[ OK ] Started Create Volatile Files and Directories.
[ OK ] Started Tell Plymouth To Write Out Runtime Data.
Starting Network Time Synchronization…
Starting Update UTMP about System Boot/Shutdown…
Starting Network Name Resolution…
[ OK ] Created slice system-getty.slice.
[ OK ] Started Update UTMP about System Boot/Shutdown.
[ OK ] Started Network Name Resolution.
[ OK ] Reached target Network.
[ OK ] Reached target Network is Online.
[ OK ] Reached target Host and Network Name Lookups.
Starting Update UTMP about System Runlevel Changes…
[ OK ] Started Network Time Synchronization.
[ OK ] Reached target System Time Synchronized.
[ OK ] Started Update UTMP about System Runlevel Changes.
You are in emergency mode. After logging in, type “journalctl -xb” to view
system logs, "systemcPress Enter for maintenance
(or press Control-D to continue):
root@workstation-02:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 4M 0 disk
sdb 8:16 0 4M 0 disk
sdc 8:32 0 8M 0 disk
sdd 8:48 0 59.6G 0 disk
├─sdd1 8:49 0 1M 0 part
├─sdd2 8:50 0 12M 0 part
├─sdd3 8:51 0 6M 0 part
├─sdd4 8:52 0 12M 0 part
├─sdd5 8:53 0 256M 0 part
├─sdd6 8:54 0 1M 0 part
├─sdd7 8:55 0 80M 0 part
├─sdd8 8:56 0 16M 0 part
├─sdd9 8:57 0 16M 0 part
├─sdd10 8:58 0 16M 0 part
├─sdd11 8:59 0 2M 0 part
├─sdd12 8:60 0 7.7G 0 part /
├─sdd13 8:61 0 3.1G 0 part
├─sdd14 8:62 0 40.4G 0 part /data
└─sdd15 8:63 0 8G 0 part [SWAP]
root@workstation-02:~#

Booted. Going to review my config again. Thx

I should add, system is workable on UART but not on console. No screen. root partition is from my working ubuntu 18.04 4.9 kernel (which works with screen/Xfce4).

Not sure how I can set this "–base 0x0 --tags_offset 0x07A00000 --kernel_offset 0x00080000 --ramdisk_offset 0x07c00000 " in the grub.cfg - I don’t flash with fastboot. I just run is as an optional kernel from /boot.
I didn’t build the initrd. - the one you referenced in the other post is a snapdragon/dragon board initrd. Would that work? What’s the hikey970 one if it isn’t?

I’m not familar, but just want to express my opinion.

I was wanting to choose a great/powerful SoC to do my experimental project.

HiKey 970 and snapdragon 845c are my final candidates. Just before I order one HiKey970, I found many of its components, such as NPU can only be accessed by android version, not vanilla linux version. In contrast, qualcomm provides better linux support.

And for sdm845c, you can finally access that chip for production, but for 970, it is not supposed to be purchased unless HiKey 970 board.