2020–10–05:
Reboot to FEL, skipping SD card boot, external display fixes
I've noticed that A64 BROM (Boot ROM) contains a special code path for
booting via a specially formatted image that can be stored in SRAM, if some
registers in CPUCFG range contain a magic value and an address to
the image.
I prepared the image that would toggle Pinephone LEDs and hang, and a loader
program that would load the image to SRAM A1, setup the magic registers, and
reset the SoC.
Well it didn't work. :)
What probably happens is that the magic registers are reset when SoC
is reset.
I did all this with hope that this could be used to reboot to FEL
from Linux.
Alternative options to achieve reboot to FEL from Linux require cooperation
from the bootloader. For example Linux can set some value to one of the RTC data
registers, and bootloader will detect it early on and jump back to BROM FEL
(allowing to use USB to boot the kernel/initramfs).
One other fun thing that can be tried would be to jump into the middle of the
BROM code, right after the SD card boot code, in effect skipping the SD card
boot and making BROM boot from eMMC. Let's say p-boot would boot into GUI menu,
and if user would choose to boot from eMMC, p-boot would write a magic value to
RTC data register and reboot. p-boot would get loaded again by BROM from SD
card, and it would check the flag in RTC data registers, and based on it it
would jump to eMMC boot code in BROM, forcing BROM to try booting
from eMMC.
This would be a fairly cheap implementation of skipping boot from SD card,
while having SD card inserted.
External display fixes
With help from ollieparanoid, I noticed that whether external display works
in my kernel or not depends on whether the user uses p-boot display mode or not
(p-boot without display support, or without splash screen, or u-boot).
I fixed this issue. It related to what parent the MIPI-DSI
clock had on boot.
There's still one issue where external display only works if the phone is
booted with dock connected but not when the dock is first connected after boot.
That one still remains to be investigated.
The symptoms are that TCON1 clock is not enabled when the dock is connected
only after boot, for some reason.
After this is fixed, the use of external display should become much more
reliable.
Hopefully, I'll manage to figure out the fix prior to 5.9 release
next week.