uzbek-plus/b10/b10b3/rbl/reboot-bootloader.c
q 58dcb3d121 B10: battery charging — PM8916 LBC supervisor v4 (CHARGE/HOLD, FAULT safe clamp to 4.00 V) and persistent B10B-5 cache
- LBC supervisor v1..v4 (linux/patches/b10b3-lbc-supervisor-v3.patch + b10/b10b3/lbc-v3-to-v4-fault-clamp.diff):
  CHARGING 4.20 V/450 mA -> HOLD 4.05 V after 60 min CV -> battery -> new cycle on USB insert; FAULT = VDD_MAX 4.00 V clamp
- RAM tests C/B/D/D2/D3/D4 (safety timer only ends fast charge), B10B-4 actuator audit (VDD_MAX works, USB_SUSP does not),
  B10B-5 FAULT clamp regression, production run, warm reboot via PON reboot reason
- cache = B10B-5 c3732515 (HW EDL write, readback + full partition verify), class-A persistent validation
- test-only hooks/images are not part of the production kernel; images with the AP PSK are not published
2026-10-04 19:00:27 +03:00

15 lines
783 B
C

/* Aurora B10B3: sync + reboot(LINUX_REBOOT_CMD_RESTART2, "bootloader") -> kernel reboot-mode (qcom-pon, mode-bootloader=2)
* writes PON_SOFT_RB_SPARE[7:2]=2; lk1st (USE_PON_REBOOT_REG) then enters fastboot without RESET. Freestanding aarch64, no libc. */
static long sc(long n, long a, long b, long c, long d)
{
register long x8 asm("x8") = n, x0 asm("x0") = a, x1 asm("x1") = b, x2 asm("x2") = c, x3 asm("x3") = d;
asm volatile("svc #0" : "+r"(x0) : "r"(x8), "r"(x1), "r"(x2), "r"(x3) : "memory");
return x0;
}
void _start(void)
{
static const char arg[] = "bootloader";
sc(81, 0, 0, 0, 0); /* sync */
sc(142, 0xfee1dead, 672274793, 0xA1B2C3D4, (long)arg); /* reboot(MAGIC1, MAGIC2, RESTART2, "bootloader") */
sc(93, 1, 0, 0, 0); /* exit(1) if reboot returned */
}