Manjaro arm on Amlogic Tv box?

5.10 kernel?
With dual boot?

Yes

Not yet.

Update: We have found the audio fix for Mainline kernel so for those who want to give it a try can download the latest kernel pushed to unstable linu-5.9.12-2 this one have AMlogic G12 audio fix and also some vdec config enabled. This will help users test panfrost support for their device.

1 Like

Great work. So now we can boot up on 5.10 kernel on TV Box using Android BSP uboot? Will give linux-5.9.12-2 when it reach Testing Branch.

Looking forwad to Beelink kernel panic solution.

Yes, great work. Amazing how manjaro arm is improving for SBC and TV boxes.

Do you think it’s viable to use such an Arm based TV box like the X96 Air P3 (S905X3) as a full fledged replacement to a more common x86 SBC (for example like the ODROID-H2+ which I have been considering as well) for a small home server with low requirements?

I mean such a TV box is really cheap compared to a regular SBC and I could think of a couple of such TV boxes for different tasks instead of one regular SBC which still comes a lot cheaper.

Yes I have been using a small ARM based device for nas drive, jellyfin server and now etherpad server and it’s working just fine.
If you want high resolution video playback then you cannot compare it with x86 against ArM on linux but on Android you can.

Depends on what task you want to fulfill with it.
The performance will almost be the same as long as the tv box have good heat dissipation. Linux still lack video processing support as vpu drivers are still not available but video processing upto 1080p on cpu load works quite well but it depends on the tv screen as it does look choppy at times in a big screen while 720p works just fine.

Yes, I just did a market search for S905X3 tv boxes and they’re dirty cheap like $30 for 4Gb Ram with 32b storage. If you plan to run it as a server for applications then it will work perfectly

1 Like

Tried linux-5.9.12-2 on my X96 air S905X3, booted with meson-g12a-x96-max.dtb. Ethernet works, sound is showed but I didn’t get any sound. I couldn’t play any video without hardware acceleration or with it.
Video is fixed with software acceleration if I press in any part of it the frame is showed but video doesn’t run.

did you do this ?

  • sudo systemctl enable sound --now
  • sudo reboot now
    Try this and let me know else we need to find the alsa card conf for this device.

No luck, sound still not working

Ok what’s your device name again please.
I will share an alsa card conf you can try.

Can you share
inxi -Fzxi

aplay -l

[pedro@sala ~]$ inxi -Fzxi
System:
Kernel: 5.9.12-2-MANJARO-ARM aarch64 bits: 64 compiler: gcc v: 10.2.0
Console: tty 0 Distro: Manjaro ARM
Machine:
Type: ARM Device System: Shenzhen Amediatech Technology Co., Ltd X96 Max
details: N/A
CPU:
Info: Quad Core model: N/A variant: cortex-a53 bits: 64 type: MCP
arch: ARMv8
features: Use -f option to see features bogomips: 0
Speed: 100 MHz min/max: 100/1800 MHz Core speeds (MHz): 1: 1512 2: 1512
3: 1512 4: 1512
Graphics:
Device-1: meson-g12a-mali driver: panfrost v: kernel bus ID: N/A
Device-2: meson-g12a-dw-hdmi driver: meson_dw_hdmi v: kernel bus ID: N/A
Display: server: X.org 1.20.10 driver: modesetting tty: 80x24
Message: Unable to show advanced data. Required tool glxinfo missing.
Audio:
Device-1: meson-g12a-dw-hdmi driver: meson_dw_hdmi v: kernel bus ID: N/A
Device-2: axg-sound-card driver: axg_sound_card bus ID: N/A
Sound Server: ALSA v: k5.9.12-2-MANJARO-ARM
Network:
Device-1: meson-g12a-dwmac driver: meson8b_dwmac v: N/A port: N/A
bus ID: N/A
IF: eth0 state: up speed: 100 Mbps duplex: full mac:
IP v4: type: dynamic noprefixroute scope: global
IP v6: type: dynamic noprefixroute scope: global
IP v6: type: noprefixroute scope: link
Device-2: pwm-clock driver: pwm_clock v: N/A port: N/A bus ID: N/A
Device-3: pwm-clock driver: pwm_clock v: N/A port: N/A bus ID: N/A
WAN IP:
Drives:
Local Storage: total: 117.72 GiB used: 6.63 GiB (5.6%)
ID-1: /dev/mmcblk0 model: SC64G size: 59.48 GiB
ID-2: /dev/mmcblk1 vendor: HP model: DF4064 size: 58.24 GiB
Partition:
ID-1: / size: 58.26 GiB used: 6.58 GiB (11.3%) fs: ext4
dev: /dev/mmcblk0p2
ID-2: /boot size: 213.4 MiB used: 53.1 MiB (24.9%) fs: vfat
dev: /dev/mmcblk0p1
Swap:
ID-1: swap-1 type: zram size: 5.31 GiB used: 0 KiB (0.0%) dev: /dev/zram0
Sensors:
Message: No sensors data was found. Is sensors configured?
Info:
Processes: 165 Uptime: 5m Memory: 3.54 GiB used: 893.7 MiB (24.6%)
Init: systemd Compilers: gcc: N/A Packages: 792 Shell: Bash v: 5.0.18
inxi: 3.1.08

[pedro@sala ~]$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: G12AX96MAX [G12A-X96-MAX], device 0: fe.dai-link-0 () []
Subdevices: 0/1
Subdevice #0: subdevice #0
card 0: G12AX96MAX [G12A-X96-MAX], device 1: fe.dai-link-1 (
) []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: G12AX96MAX [G12A-X96-MAX], device 2: fe.dai-link-2 (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0

1 Like

Create a new conf file called G12A-X96-MAX.conf in /usr/share/alsa/cards/
Copy this content in G12A-X96-MAX.conf`

# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv)

<confdir:pcm/hdmi.conf>

AMLOGIC-HDMI.pcm.hdmi.0 {
	@args [ CARD AES0 AES1 AES2 AES3 ]
	@args.CARD {
		type string
	}
	@args.AES0 {
		type integer
	}
	@args.AES1 {
		type integer
	}
	@args.AES2 {
		type integer
	}
	@args.AES3 {
		type integer
		default 0x01	# IEC958_AES3_CON_FS_NOTID
	}
	type iec958
	slave {
		format IEC958_SUBFRAME_LE
		pcm {
			type hooks
			slave.pcm {
				type hw
				card $CARD
				device 0
			}
			hooks.0 {
				type ctl_elems
				hook_args [
				{
					name "IEC958 Playback Default"
					optional true
					lock true
					preserve true
					value [ $AES0 $AES1 $AES2 $AES3 ]
				}
				]
			}
		}
	}
	status [ $AES0 $AES1 $AES2 $AES3 ]
	hdmi_mode true
}# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv)

<confdir:pcm/hdmi.conf>

AMLOGIC-HDMI.pcm.hdmi.0 {
	@args [ CARD AES0 AES1 AES2 AES3 ]
	@args.CARD {
		type string
	}
	@args.AES0 {
		type integer
	}
	@args.AES1 {
		type integer
	}
	@args.AES2 {
		type integer
	}
	@args.AES3 {
		type integer
		default 0x01	# IEC958_AES3_CON_FS_NOTID
	}
	type iec958
	slave {
		format IEC958_SUBFRAME_LE
		pcm {
			type hooks
			slave.pcm {
				type hw
				card $CARD
				device 0
			}
			hooks.0 {
				type ctl_elems
				hook_args [
				{
					name "IEC958 Playback Default"
					optional true
					lock true
					preserve true
					value [ $AES0 $AES1 $AES2 $AES3 ]
				}
				]
			}
		}
	}
	status [ $AES0 $AES1 $AES2 $AES3 ]
	hdmi_mode true
}

Restart. Make sure sound service is enabled.

Good Luck.

May I ask why G12A?

The S905X3 is SM1.

Why do other DTBs even work and why would one use a different DTB than for SM1 if it’s a SM1 unit?

I’m sorry if this should be obvious, but I’m not quite sure what’s up with the different DTB files and their implication.

Depending on the kernel I get different dtb working. On the latest kernels the meson-g12a-x96-max.dtb and the @TheMojoMan custom made dtbs (for vim images) are the ones that work for me

For now, no luck. Trying with other dtb

Sorry if I may be intruding, but given that you are trying to use this dtb

it might match with the following G12A-X96-MAX.conf sound card from Armbian/LibreElec

Summary
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)

<confdir:pcm/hdmi.conf>

G12A-X96-MAX.pcm.hdmi.0 {
        @args [ CARD AES0 AES1 AES2 AES3 ]
        @args.CARD { type string }
        @args.AES0 { type integer }
        @args.AES1 { type integer }
        @args.AES2 { type integer }
        @args.AES3 { type integer }
        type hooks
        slave.pcm {
                type hw
                card $CARD
                device 0
                subdevice 0
        }
        hooks.0 {
                type ctl_elems
                hook_args [
                        {
                                interface MIXER
                                name "IEC958 Playback Default"
                                lock true
                                preserve true
                                optional true
                                value [ $AES0 $AES1 $AES2 $AES3 ]
                        }
                ]
        }
        hint.device 0
}

<confdir:pcm/iec958.conf>

G12A-X96-MAX.pcm.iec958.0 {
        @args [ CARD AES0 AES1 AES2 AES3 ]
        @args.CARD { type string }
        @args.AES0 { type integer }
        @args.AES1 { type integer }
        @args.AES2 { type integer }
        @args.AES3 { type integer }
        type hooks
        slave.pcm {
                type hw
                card $CARD
                device 1
                subdevice 0
        }
        hooks.0 {
                type ctl_elems
                hook_args [
                        {
                                interface MIXER
                                name "IEC958 Playback Default"
                                lock true
                                preserve true
                                optional true
                                value [ $AES0 $AES1 $AES2 $AES3 ]
                        }
                ]
        }
        hint.device 0
}

Or, it might not…

1 Like

That is the beauty with this cheap Chinese box :grinning:The method is trying!

1 Like

Yes this should work.

I think the issue is with the meson-g12a-x96-max.dtb, because I downgraded to 5.9.8-1 linux-vim with this dtb shows the same symptoms, every works except sound. For this kernel the custom made dtb by @TheMojoMan gives me sound

1 Like