MediaTek Helio P23 (MT6763)

MT6763 (or Helio P23) is a mid-range ARMv8.0-A (64-bit) MediaTek SoC released in 2017.

Mainline fork
There is a mainline kernel fork on GitLab @ mtk-mainline/mt6763/linux where development is currently (2022-11-14 / ) active.

Booting
Currently this SoC can only boot with  present in kernel cmdline; enabling SMP causes kernel panic and a huge amount of log spam.

Early bringup
At the very start of MediaTek SoC mainline bringup to minimize variables you should boot with a minimal .config with either UART or simplefb earlycon setup and use a downstream DTB + DTBO combo, and yes you heard me right. This way we can find exactly what nodes the bootloader looks for (or needs to display things / have working buttons for fastboot etc. navigation before kernel loads) by the process of elimination by chunks of device tree nodes at a time from the known working downstream DTBs.

DTBO
If your device has a  partition like the Volla Phone (volla-yggdrasil) you'll have to figure out the bare minimum DTBO contents required to boot mainline with minimal DTS changes which typically consists of grabbing at least the   from the decompiled downstream   flattened DTB and making a minimal DTBO for usage with mainline.

To figure out the bare minimum DTBO contents follow a similar process to the early bringup steps but instead with the DTB that eventually gets used for  to create the flashable.

Reserved memory
All  entries in downstream FDT   are automagically added by the bootloader and SHOULD NOT be reserved again in mainline DTS to avoid conflicting with the bootloader adding them.

As an example  @   is ready to use for simplefb earlycon already!

UART
UART output from the kernel can be enabled by setting CONFIG_SERIAL_8250_MT6577=y in your config and including  on the cmdline.

Minimal .config
A minimal kernel config you should get some output over UART with starts with a  and setting the following (via e.g.  ):

CONFIG_ARCH_MEDIATEK=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_MT6577=y CONFIG_SERIAL_OF_PLATFORM=y

simplefb earlycon
No UART? No problem (probably)! With a currently (2022-07-24) out-of-tree driver from Nergzd723 you can get very early logging from the kernel directly on the display framebuffer!

One change to the driver is required however, that patch sets the  alpha to 0 essentially making the text invisible:

--- a/drivers/video/fbdev/earlycon.c +++ b/drivers/video/fbdev/earlycon.c @@ -107,7 +107,7 @@ static void simplefb_earlycon_scroll_up(void) static void simplefb_earlycon_write_char(u32 *dst, unsigned char c, unsigned int h) { const u32 color_black = 0x00000000; -	const u32 color_white = 0x00ffffff; // a8r8g8b8 +	const u32 color_white = 0xffffffff; // a8r8g8b8 const u8 *src; int m, n, bytes; u8 x;

Next simply enable the driver in your .config (along with the ones from MediaTek_Helio_P23_(MT6763) section just above):

CONFIG_FB_EARLY=y

Then just add  to your cmdline where   and   match your display resolution width and height respectively.

In case of Volla Phone (with display resolution of 1080x2340) this still resulted in garbled output on the display, try adding or subtracting from the width if this happens. The final  value that worked was , so simply adding 8 to the width made it work as expected.

Minimal DTS
Minimal "booting" devicetree (excluding potential DTBO requirements) should look something like this:

/dts-v1/; / { 	/* NOTE: if /model is defined the bootloader replaces it with "MT6763*" forcefully */ chosen { /* /chosen/bootargs has to exist even if unused or bootloader will be unhappy */ bootargs = ""; }; 	/* /reserved-memory has to exist even if practically empty or bootloader will be unhappy */ reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; }; };

Mainline workflow
With UART hooked up simply plugging in USB as well powers on the device automatically. By pairing this with flashing using mtkclient you easily at any point after flashing power off the device by just unplugging the USB cable, and reboot it by plugging it in again.

To power off without flashing anything you can run e.g.  and unplug the device after successful execution of the command.

Letting the ATF (ARM Trusted Firmware) watchdog still strategically reboot the device automatically ~10 seconds after booting can also be helpful with the quick flash, test and repeat cycle while getting all the logs you'd want over UART; you can add   or    to cmdline to prevent loading the watchdog driver.

Pending patches

 * 1) MediaTek Helio P23 (MT6763) SoC uses the MT6370 PMIC which there is a pending patch series for on the linux-mediatek mailing list that seems to include plenty of great functionality (yet to be tested on MT6763),   available in v6.1-rc1
 * 2) CPUXGPT timer patch, now in linux-next (might not actually be relevant? needs further confirmation)

Relevant downstream sources
MT6356 PMIC dtsi for regulators

MT6356 PMIC battery fuel gauge driver

Who's working on it

 * User:Deathmist
 * User:Cvbnm90i
 * User:eriki73