Black screen video output

Continuing the discussion from Step by step, how to compile DTS with include files:

I had time to get back to this a few months ago, and was able to manage to build a DTB for the 2nd gen Cube that partially boots CoreElec. From the dmesg, the OS appears to be loading fairly far in, and may even be semi-functional. But I’m not able to get any video output, other that an active black screen.

I’ve been bouncing back and forth between CE v19.5 and EE v4.6, and I’m encountering the same problem with video output in both ROMs. I got a s905x4 to use as a reference unit, to get a rough idea about how the system should be loading.

I have a couple general questions. Does the device bootloader matter at all if I’m able to get the CE kernel loaded into memory and started? I have seen some comments saying that devices that use older Android firmware may not have bootloaders that work with CE/EE? But I don’t understand why the bootloader version would matter once the kernel has taken over? For reference the Cube uses FireOS7 (Android Pie).

The Cube doesn’t have an ENV partition (#define env nowhere), again I don’t think this should matter as long as I can get the kernel loaded? Are there any env variables from uboot that are vital to the kernel boot process?

I’ve been trying to trouble shoot the broken video output for sometime now, and I have a question about the amhdmitx node in the DTB. The supported s922x devices node looks like the following:

	amhdmitx {
		compatible = "amlogic, amhdmitx";
		dev_name = "amhdmitx";
		status = "okay";
		vend-data = <0x2f>;
		pinctrl-names = "default\0hdmitx_i2c";
		pinctrl-0 = <0x30 0x31>;
		pinctrl-1 = <0x32 0x33>;
		clocks = <0x02 0x56 0x02 0x4f 0x02 0x50 0x02 0x96 0x02 0x8d>;
		clock-names = "venci_top_gate\0venci_0_gate\0venci_1_gate\0hdmi_vapb_clk\0hdmi_vpu_clk";
		interrupts = <0x00 0x39 0x04 0x00 0x03 0x01>;
		interrupt-names = "hdmitx_hpd\0viu1_vsync";
		ic_type = <0x0b>;
		phandle = <0xd7>;

		vend_data {
			vendor_name = "Amlogic";
			product_desc = "MBox Meson Ref";
			vendor_id = <0x00>;
			phandle = <0x2f>;

and the native Cube version is:

	amhdmitx {
		compatible = "amlogic, amhdmitx";
		dev_name = "amhdmitx";
		status = "okay";
		vend-data = <0x3b>;
		pinctrl-names = "default\0hdmitx_i2c";
		pinctrl-0 = <0x3c 0x3d>;
		pinctrl-1 = <0x3e 0x3f>;
		clocks = <0x0d 0x55 0x0d 0x4e 0x0d 0x4f 0x0d 0x95 0x0d 0x8c>;
		clock-names = "venci_top_gate\0venci_0_gate\0venci_1_gate\0hdmi_vapb_clk\0hdmi_vpu_clk";
		interrupts = <0x00 0x39 0x01>;
		interrupt-names = "hdmitx_hpd";
		ic_type = <0x0b>;
		hdmiocp-gpio = <0x26 0x3d 0x00>;
		phandle = <0xf7>;

		vend_data {
			vendor_name = "Amlogic";
			vendor_id = <0x00>;
			phandle = <0x3b>;

Initially I had tried sticking with the default node from Amazon that doesn’t include 0viu1_vsync interrupt. Then I tried going with the version used by the supported device DTBs, but neither produced any video output other than a black screen. I’m not sure if this different configuration is related to a possible video out configuration incompatibility?

Unplugging/plugging the HDMI connector triggers the hdp, and I can see the display information in the uart output.

Do you have any suggestions on what nodes I should be paying attention? Or maybe my problem isn’t the DTB?

I’m attaching my dmseg, and current dts. I do still have a couple audio hardware issues i need to fix including an issue with the snd-usb-audio driver that’s causing a 40sec SCPI timeout. I am working on fixing these too, but I want to make sure that it’s possible to get video output from this device.

Share your source dts file, otherwise we can’t help.
What SoC is assembled? rev.a or rev.b or rev.c?

And share the dumped Android dtb, not decompiled to.

1 Like

Hi, It’s an s922x rev.b

I’m including the source dts, I’m using to compile for CE/EE. I’m sorry it’s a bit of a work in progress at the moment, so it’s messy. I’ve included the Android DTB, g12brevb-raven-2g is the DTB used by the device.

It’s way to much modified. And why you use coreelec_g12b_a.dtsi for rev.a when you have rev.b?

Start with this and add other items step by step:

#include "coreelec_g12b.dtsi"

	model = "Amazon Raven";
	coreelec-dt-id = "g12b_s922x_amazon_raven_revb_2g";

	memory@00000000 {
		linux,usable-memory = <0x0 0x100000 0x0 0x7ff00000>;

	/delete-node/ t9015;
	/delete-node/ rtc;

&ethmac {
	status = "disabled";
1 Like

That was an early mistake, before I realized there were different dtsi files for rev.a and rev.b. That’s a fair point, the amount of changes have gotten a little out of hand. Now that I have a better idea what I’m doing, I should spend some time starting from the beginning again.

I started over with the minimal source dts you recommended. That’s enough to get the device to boot to the audio hardware initiation. On my s905x4 reference device, there is video output ~1.5sec into the loading of the kernel, after HDMITX finishes initiating.

On the Cube the Cube I still get an active black screen ~2sec into the boot. I wanted to check if there is anything I should work on or look at first related to video output before I start making too many dts modifications?

I have tried so many changes to try to get any HDMI output, can i ask a couple very basic questions to save me a lot of time from looking where I don’t need to.

  1. As long as the device is able to hand off bootup from u-boot to the kernel, does the u-boot env matter at all for booting CoreElec? I’ll add that this device doesn’t have an env partition and uses the default bootloader env.

  2. Does getting video output, even on screen log output, depend at all on security monitor (bl31)? I’m working with an Amazon device that has been heavily modified from the standard Amlogic device, and I’m trying to figure out if there are any bootloader differences that may be causing a video out problem.

Before I said my device uses an s922x, I should have more accurately said that it uses an s922z-2 SOC. This is a variant of the s922x only used by Amazon in the 2nd gen Cube. There’s no public information on how it’s different from the s922x. I assumed that it was a variant of the rev B line, based on Amazon using rev B in the naming of the dts file. And really I don’t know if it’s rev A or rev B. The native dts file more closely resembles the rev A reference dts.

  1. Maybe. We modify some items for our needs but don’t know about unknown items.
  2. u-boot print the vendor logo on screen, so hdmi init is done there first time. a second time on kernel boot at CE

You need to get a UART log when booting CE to see what is missing.

This device doesn’t have an env partition, but I’m assuming an env partition isn’t required? CoreElec has been successfully used on at least one device without an env partition?

Part of the native pre-boot process is to run init_display which initializes hdmitx, loads the vendor logo into the framebuffer etc. But the vendor logo only shows when the native kernel loads. I have never gotten the vendor logo to display over HDMI in u-boot. I have tried displaying the vendor logo in u-boot manually on the homatics r plus, and was not able to get it to display either. Maybe I’m missing a step?

Yes, I’m working almost exclusively off of UART with logging set to ‘debugging ignore_loglevel=1’. Currently I can access the CE shell from UART, successfully connect to WiFi, and enable SSH. I’m able to take screenshots from the shell, and they show that the CE GUI has loaded.

But I only get a black blank screen for video output. I’ve tried changing resolutions eg echo 720p60hz > /sys/class/display/mode, setting the framebuffer eg fbset -fb /dev/fb0 -g 1280 720 1280 1440 32, and I see the monitor cycle on and off back to a blank black screen. HPD appears to be working, when I unplug/plug the monitor I can see the display information in UART.

I don’t see any obvious errors relating to the display in the UART during bootup. (22.9 KB)

Probably unrelated but I get this message in the init.log

Unique identifier for this client: 34543350
Framebuffer vertical res: 1080
Framebuffer splash image: /splash/splash-1080.png
WARNING: Your device-tree is out-of-date!

Please update it to resume normal startup.

Normal startup in 30s... NOW

I’m guessing this is because I’m using a custom dtb that is not in CE’s database, it assumes it’s out of date? Is there a way to disable this time penalty, or should i just reuse one of the dts ID’s of the supported devices?

Why not use one CE dtb/dts as start and adjust to your needs? This way you will start from something that works for others and also you will not see this warning above.

I have tried that, video output has never given anything more than a blank black screen, no matter which s922x/A311D dts I have tried. Amazon diverged a bit from the standard Amlogic reference board I guess.

You have another screen for tests?

[    1.152107@0]- hdmitx: system: get current mode: 1080p60hz
[    1.152108@0]- hdmitx: system: update physical size: 410 260
[    1.152123@0]- hdmitx: hdmitx: display colourdepth is auto set to 8 bits (VIC: 16)
[    1.152142@0]- hdmitx: video: already init VIC = 0  Now VIC = 16
[    1.152144@0]- hdmitx: video: rx edid only support RGB format

Maybe this is your issue? Also sound looks like a problem.

1 Like

Thank you, I seem to be having a problem with particular displays. I get working video output on my newer 4k TV (2021), but only a black screen on an older 1080P TV, and 1080P monitor with DVI input.

I have been using the Homatics R Plus during testing, and that is able to output video to all 3 displays.

I’ve tried changing refresh rates, resolutions, and the colorspace on the non-working displays with the Amazon Cube, but only ever see a black screen.