Ketika saya menekan dan menahan tombol Power di HP Xiaomi bertenaga Snapdragon, apa yang sebenarnya pertama kali terjadi secara hardware dan software? Mengapa kadang HP hanya bergetar namun layarnya gelap (brick)?
Saat tombol power ditekan, IC Power (PMIC) mendistribusikan tegangan ke CPU. Begitu CPU mendapat daya, dia langsung mencari instruksi pertama di lokasi memori yang sifatnya read-only yang sudah ditanam dari pabrik (Mask ROM). Ini disebut PBL (Primary Bootloader).
Tugas PBL sangat sederhana: inisialisasi hardware super dasar, mendeteksi jenis memori (eMMC/UFS), dan mencari bootloader tahap kedua di partisi tersebut. Jika PBL gagal mendeteksi eMMC/UFS atau datanya korup (hardbrick), CPU akan masuk ke mode darurat yang disebut EDL (Emergency Download Mode) - yang biasa kamu lihat sebagai Qualcomm HS-USB QDLoader 9008 di Device Manager komputermu.
> Executing PBL from BootROM
> Checking eMMC/UFS presence... [OK]
> Loading next stage from /xbl partition
Oh, pantesan HP matot sering kedetek 9008 di PC. Terus, kalau eMMC/UFS-nya normal, setelah PBL jalan dia akan memanggil siapa? HP lawas biasanya panggil SBL (Secondary Bootloader), bagaimana dengan Snapdragon modern?
Tepat sekali. Di Snapdragon modern, SBL sudah digantikan oleh XBL (eXtensible Bootloader). XBL ini lebih canggih karena berjalan di atas standar UEFI (mirip BIOS komputer modern).
Tugas utama XBL adalah menyalakan RAM (DDR Init), mengatur clock CPU, layar awal, dan menyiapkan lingkungan keamanan TrustZone (TEE) yang sangat penting bagi Xiaomi untuk fitur Find Device, Fingerprint, dan enkripsi. Setelah RAM aktif, ruang gerak sistem jadi lebih lega, lalu XBL akan menyerahkan tongkat estafet ke ABL (Android Bootloader).
Halo, mulai dari ABL (Android Bootloader) ini adalah wilayah perbatasanku. ABL inilah yang menampilkan logo "MI / POCO" di layar untuk pertama kalinya. ABL juga yang bertugas membaca status tombol fisik saat boot.
Jika kamu menahan tombol Volume Bawah, ABL akan menghentikan proses boot normal dan masuk ke mode Fastboot. ABL juga menjalankan AVB (Android Verified Boot) untuk mengecek apakah partisi boot dan system tidak dimodifikasi (kecuali UBL/Unlock Bootloader). Jika aman, ABL memuat Linux Kernel ke dalam RAM dan menjalankannya.
> Initializing DDR RAM... [OK]
> Executing ABL
> Displaying Splash Screen Logo
> Checking AVB (Verified Boot) Status: LOCKED
> Extracting and jumping to Linux Kernel...
Berarti kalau HP nyangkut di logo MI terus mati lagi (bootloop ringan), itu kemungkinan gagal di tahap ABL saat mengecek partisi, atau Linux Kernel gagal berjalan karena korup sistemnya ya? Lalu setelah Linux Kernel jalan, bagaimana proses memuat UI Androidnya?
Betul. Setelah Kernel mengambil alih, ia akan menghidupkan driver-driver tingkat rendah (touchscreen, baterai, display, dll) dan melakukan mounting partisi root. Setelah selesai, Kernel mengeksekusi file sakti bernama init.
Proses init adalah induk dari segala proses (PID=1). Dia akan menjalankan animasi bootloader MIUI/HyperOS (titik-titik muter). Sementara animasi itu berjalan, di latar belakang init menetaskan sebuah proses raksasa bernama Zygote.
Zygote bertugas memuat core libraries Java (ART/Dalvik). Melalui Zygote inilah System Server dihidupkan, yang kemudian membangunkan Activity Manager, Package Manager, dan berbagai service Android lainnya, hingga akhirnya Launcher (Homescreen) ditampilkan ke layar dan HP siap kamu gunakan!
Menarik! Saya kebetulan baru saja menarik data log kabel UART dari HP Xiaomi Mi 10T (Kodenama: Apollo / Snapdragon 865) yang kasusnya sering restart acak saat sedang booting. Di baris awal saya melihat QC_IMAGE_VERSION_STRING=BOOT.XF.3.2-00278-SM8250-2 dan proses SBL1 berjalan, namun di pertengahan ada pesan peringatan. Apa artinya?
B - 821517 - PM: POWER ON by CBLPWR, POWER OFF due to FAULT UVLO
B - 834083 - PM: PMA_2 PON:KPD WR:RES ON:WARM POFF:RES OFF:FLT
B - 966484 - Product name is apollo
B - 1013362 - PM: Vbatt: 0; Ibatt: 0
B - 1017205 - PM: Charger SRC: SDP
Ah, log itu adalah bukti otentik dari kegagalan Hardware tingkat daya! Pesan POWER OFF due to FAULT UVLO adalah kunci utamanya.
UVLO (Under Voltage Lock Out) adalah mekanisme proteksi otomatis di IC Power (PMIC). Ketika CPU atau komponen lain mulai menarik arus besar (biasanya saat CPU clock mulai naik dari SBL ke Kernel), tegangan baterai tiba-tiba drop terlalu rendah dari ambang batas aman. PMIC langsung memutus arus untuk mencegah kerusakan, sehingga HP akan mati/restart.
Jika kamu perhatikan baris Vbatt: 0; Ibatt: 0, itu mengkonfirmasi bahwa PMIC sama sekali tidak mendeteksi tegangan (Vbatt) dari baterai, dan sumber daya murni mengandalkan suplai lemah dari kabel USB (Charger SRC: SDP). Kesimpulannya: Baterai rusak/soak parah, konektor baterai kendor, atau ada jalur BATT_ID/THERM yang putus!
Wah, sangat masuk akal! Bagaimana dengan kasus software? Saya punya log lain dari Honor Magic 6 Pro (Snapdragon 8 Gen 3 / SM_LANAI). Keluhannya HP tiba-tiba masuk ke menu Fastboot setiap kali dinyalakan. Ini log bagian akhir sebelum dia masuk Fastboot:
...
> LoadAndApplyPatch boot begin
> apply boot patch failed
> BoardVariant = 2255, DtVariant = E0, DtVariantMajor = 0, DtVariantMinor = 2100
> Unable to find the Board Dtb
> Error: Board Dtbo blob not found
> Launching fastboot
> Fastboot: Initializing...
Ini adalah contoh klasik kegagalan di tahap Android Bootloader (ABL)! Masalahnya ada di Device Tree Blob (DTB/DTBO).
File DTBO berisi peta instruksi tentang perangkat keras (kamera,
layar, sensor) yang khusus untuk tipe papan (board) tersebut. Pada
log tertulis
Unable to find the Board Dtb. ABL mencoba mencari file DTB yang cocok dengan
BoardVariant = 2255 di dalam
partisi dtbo, namun tidak menemukannya.
Karena peta *hardware*-nya hilang, Kernel Linux menolak untuk di-load
(bisa berbahaya jika dipaksakan). Sebagai mekanisme pertahanan
(fallback), ABL langsung membelokkan rute proses ke
Fastboot Mode (Launching fastboot) agar teknisi bisa melakukan flashing ulang. Solusinya?
Lakukan flash pada partisi boot dan
dtbo, atau full flash firmware bawaan karena
kemungkinan partisi tersebut korup (mungkin akibat gagal UBL, gagal
root Magisk, atau update OTA terputus).
Lalu bagaimana jika chipsetnya bukan Qualcomm? Saya baru merekam log dari HP Infinix Note 30 yang keadaannya 100% normal. Kelihatannya alurnya sangat berbeda dari Qualcomm ya?
> [PMIC] CHIP Code = 0x6610
...
> ====> GZ (0)[ 2.375112]Version of MTEE: mTEE_SDK: 2.2.2.004
> Say Hello from EL2!
...
> welcome to lk/MP
> boot args 0x48600000 0x48600000 0x5920 0x11002000
> calling constructors
> initializing heap
Sangat tajam! Infinix Note 30 menggunakan chipset MediaTek (MTK) Helio G99. Arsitektur bootloader MediaTek menggunakan istilah yang berbeda dari Qualcomm, meskipun fungsinya mirip.
Pada MediaTek, CPU pertama kali memuat BROM (Boot ROM) yang kemudian memanggil [PMIC]Preloader Start. Preloader ini setara dengan gabungan tugas PBL & XBL di Qualcomm. Ia bertugas mengecek PMIC (tegangan aman), inisialisasi RAM DDR, dan memuat lingkungan keamanan TrustZone yang disebut MTEE (MediaTek Trusted Execution Environment).
Setelah keamanan siap (Say Hello from EL2!), Preloader tidak menyerahkan tugas ke ABL, melainkan ke LK (Little Kernel). Tulisan welcome to lk/MP adalah pertanda bahwa proses hardware init telah berhasil dan HP siap untuk memuat OS Android utama! Log ini adalah contoh "Buku Teks" dari proses booting yang sehat dan sempurna.
Kembali ke platform Qualcomm, saya mendapat pasien Poco F3 (Alioth / Snapdragon 870). Gejalanya HP hanya mentok logo Poco sebentar lalu mati lagi. Saya tarik log UART-nya, dan melihat kejanggalan di area PMIC. Bisakah dibantu analisanya?
B - 467900 - PM: PMA_2 PON:KPD ON:PON OFF:XVDD
B - 566995 - PM: Device Init # SPMI Transn: 4724
B - 576938 - PM: OCP Occured: PMIC: 0; SMPS: 7
B - 576999 - PM: OCP Occured: PMIC: 0; SMPS: 8
B - 581635 - PM: OCP Occured: PMIC: 0; SMPS: 9
B - 598684 - Product name is alioth
Itu adalah masalah hardware tingkat akut! Kata kuncinya ada pada peringatan OCP Occured di jalur SMPS 7, 8, dan 9.
OCP (Over Current Protection) adalah sistem pengamanan pada IC Power (PMIC) ketika mendeteksi adanya penarikan arus yang terlalu besar dan tidak wajar pada suatu jalur suplai, yang hampir selalu berarti ada jalur yang Korslet (Short) ke *Ground*.
Pada Snapdragon seri 800 (seperti 870 di Poco F3), jalur SMPS 7, 8, dan 9 biasanya menyuplai tegangan inti sangat rendah namun berarus besar langsung ke dalam *die* CPU (VCC_CORE / VCC_MODEM). Ketika IC Power mencoba mengalirkan listrik ke CPU saat memunculkan logo, listrik tersebut bocor (korslet), memicu proteksi OCP, yang kemudian memicu FAULT GP_FAULT0 sehingga HP mematikan dirinya sendiri secara instan untuk mencegah komponen terbakar.
Solusi Teknisi: Jangan me-reball IC Power terlebih dahulu! Periksa kapasitor-kapasitor *decoupling* berukuran besar yang berada di sekitar area CPU/RAM. Seringkali, masalah restart pada seri Poco F3 / Poco X3 disebabkan oleh korsletnya salah satu kapasitor filter pada jalur suplai *core* CPU ini.
Sangat logis! Terakhir, saya ada bahan log dari Infinix Note 30 (MediaTek) lagi. Gejalanya aneh, HP bisa nyala normal sampai ke menu utama, tetapi sama sekali tidak bisa dicas padahal konektor USB dan baterai sudah diganti. Log-nya menunjukkan rentetan error I2C di awal boot:
> [I2C] 339: id=5,addr: 54, transfer error
> pl_chgpump_reset check info failed(add = 84)!
> [I2C] 339: id=5,addr: 55, transfer error
...
> welcome to lk/MP
Ini adalah contoh sempurna dari Kegagalan Hardware Non-Fatal! Perhatikan bahwa meskipun ada banyak pesan error merah, log tetap berujung pada welcome to lk/MP, yang artinya proses booting OS tidak terganggu dan HP tetap bisa masuk menu utama.
Permasalahan utamanya ada di I2C transfer error pada addr: 54 dan addr: 55. I2C (Inter-Integrated Circuit) adalah jalur komunikasi data antara CPU dan IC pendukung (seperti IC Charger, IC Kamera, Sensor, dll).
Pada Infinix Note 30, alamat I2C 54/55 pada bus ID 5 secara spesifik
adalah alamat untuk IC Fast Charging Pump (umumnya menggunakan seri
SC8548). Karena CPU gagal berkomunikasi dengan IC
tersebut, CPU menganggap IC Fast Charging tidak ada (no chg chip [sc8548]).
Kesimpulan: IC Charge SC8548 Anda rusak mati total,
terlepas dari kakinya, atau jalur I2C SDA/SCL di sekitar IC tersebut
putus. Ganti IC SC8548-nya, dan fitur pengecasan akan kembali
normal!
Menarik sekali! Berbicara soal log UART, saya pernah membaca log dari perangkat pintar lain seperti IP Camera yang menggunakan chipset HiSilicon Hi3520. Di sana saya melihat bootloader-nya bernama U-Boot. Apakah urutan booting-nya sama dengan Android? Kenapa seringkali log-nya berhenti di tulisan "Starting kernel..."?
Ya, secara prinsip sangat mirip! Perangkat IoT seperti Smart Camera (Hi3520) menggunakan sistem operasi berbasis Linux yang lebih ramping. Proses boot-nya terbagi menjadi 3 tahap utama:
- 1. U-Boot Stage: Ini mirip dengan PBL/XBL di Android. U-Boot (contohnya versi 2010.06) menginisialisasi hardware dasar seperti CPU, DRAM, dan SPI Flash. Pada tahap ini, U-Boot sering memberikan countdown (misal 1 detik) di mana kamu bisa menekan tombol (Autoboot interrupt) untuk masuk ke command line U-Boot.
- 2. Kernel Loading Stage: U-Boot membaca Linux Kernel Image (misalnya Linux-3.0.8) dari SPI Flash dan memuatnya ke dalam RAM (contoh di alamat
0x82000000). U-Boot kemudian melakukan verifikasi checksum. - 3. Kernel Launch: U-Boot menyerahkan kontrol sepenuhnya ke Kernel dengan mencetak pesan "Starting kernel ...". Mulai dari titik ini, Kernel Linux mengambil alih dan menjalankan proses
init.
Mengapa log terhenti di "Starting kernel..."?
Ini adalah jebakan klasik bagi teknisi! Jika log UART hilang setelah tulisan itu, bukan berarti HP atau kamera mati/bootloop. Kemungkinan besar, parameter bootargs dari kernel mengarahkan output console ke port UART yang berbeda (misalnya dari ttyS0 dialihkan ke ttyS1), atau baud rate-nya diubah.
Solusi Debugging: Hentikan proses boot saat countdown U-Boot berjalan untuk masuk ke mode shell. Ketik perintah printenv untuk melihat ke mana parameter console=tty... diarahkan.
> DRAM: 256 MiB
> SPI Flash: 8 MiB
> Hit any key to stop autoboot: 0
> Loading Kernel Image ... OK
> Starting kernel ...
(Terminal blank / pindah jalur UART)
Wah, pantas saja banyak teknisi terkecoh dan mengira IC-nya mati. Omong-omong soal SoC, bagaimana dengan arsitektur bootloader buatan Huawei, yaitu HiSilicon Kirin? Apakah prosesnya mirip dengan Qualcomm (PBL -> XBL) atau MediaTek (BootROM -> Preloader)?
Keluarga HiSilicon Kirin (contohnya Kirin 960 pada board HiKey960) memiliki identitas booting yang unik dan berbeda dari Qualcomm maupun MediaTek! Prosesnya diurutkan seperti ini:
- 1. xloader: Ini adalah bootloader tingkat pertama. Tugasnya mendeteksi memori penyimpanan (biasanya UFS) dan menginisialisasi jalur LPDDR4 (RAM). Jika kamu melihat log xloader chipid is: 0x36600110, berarti CPU dan RAM sudah saling "berjabat tangan".
- 2. Fastboot for Kirin: Kirin menggunakan implementasinya sendiri yang disebut Fastboot for Kirin (berbeda dari LK MediaTek). Di tahap ini, SoC menyalakan semua jalur listrik (PMIC regulator) dan menginisialisasi clock (PLL).
- 3. LPM3 & ATF (BL31): Selanjutnya, Low Power MCU (LPM3) dimuat. Setelah beres, SoC akan menyerahkan kendali kepada ARM Trusted Firmware (BL31) untuk menjamin keamanan level hardware sebelum menjalankan OS utama.
- 4. Linux Kernel: BL31 memberikan instruksi untuk mengeksekusi kernel Android (Booting Linux on physical CPU 0x0).
Jadi, bila kamu men-debug HP berbasis Kirin yang brick, perhatikan log UART-nya. Jika mati sebelum muncul pesan `xloader`, kemungkinan ada masalah tegangan dasar ke CPU atau RAM rusak.
> storage type is UFS
> ddr ft:0xf20332a3,mode:1 target:4
> ******** Fastboot for Kirin *****************
> [regulator_power_all_enable] all IP regulator is power on!
> load_lpm3: LPM3 load success 0x89c80000
> boot_from_bl31: boot to trusted firmware. addr=0x00000000
> Booting Linux on physical CPU 0x0
Berikut adalah potongan log UART MediaTek yang kami temukan pada perangkat Infinix/Note dengan PMIC MT6357. Yang menarik adalah struktur boot sequencenya sangat jelas: mulai dari pengecekan PMIC, preloader, memori, hingga TrustZone dan ATF.
Glosarium singkat:
- MT6357 = PMIC MediaTek, melakukan pengukuran voltase dan memantau rail daya internal.
- PLFM = Platform loader yang memberikan arahan boot ke
LKvia ATAG. - mblock / mblock_reserve = peta memori fisik dan area cadangan untuk partisi kernel, tee, log, dan platform.
- TZ_INIT / ATF = inisialisasi TrustZone dan AArch32 Trusted Firmware sebelum OS Android dijalankan.
Dari log ini kita dapat membaca 4 fase penting:
- Inisialisasi Daya - PMIC MT6357 mengukur tegangan VCORE / VSYS / VSRT, memastikan rail aman sebelum memulai DDR dan boot.
- Preloader ke LK - baris [PLFM] boot to LK by ATAG menunjukkan serah terima dari preloader ke Little Kernel.
- Konfigurasi Memori - entri mblock dan mblock_reserve mengungkapkan layout memori fisik dan blok yang dicadangkan untuk
tee,log_store,kernel_addr_mb, dan partisi penting lain. - TrustZone / ATF - [TZ_INIT] dan jump to ATF mengonfirmasi bahwa platform memasuki mode aman sebelum Android di-boot.
Kesimpulannya: log boot MediaTek ini adalah contoh yang sangat baik untuk memahami bagaimana SOC modern membentuk pipa eksekusi dari power-on hingga kernel. Bila log berhenti di tahap mblock atau TEE, biasanya masalahnya terkait RAM/PMIC atau proteksi keamanan TrustZone, bukan hanya kesalahan partisi Android.