/* * Minimal RAM info test payload (fuse DRAM ID + SK table -> MiB). * Build: make ram-test -> output/RAM-Test.bin */ #include #include #include #include #include #include #include #include #include #include "dram_fuse.h" #include "gfx.h" #undef COLOR_CYAN #undef COLOR_WHITE #define COLOR_CYAN 0xFF00FFFF #define COLOR_WHITE 0xFFFFFFFF /* Required by BDK */ boot_cfg_t __attribute__((section("._boot_cfg"))) b_cfg; volatile nyx_storage_t *nyx_str = (nyx_storage_t *)NYX_STORAGE_ADDR; extern void pivot_stack(u32 stack_top); void ipl_main(void) { hw_init(); pivot_stack(IPL_STACK_TOP); heap_init(IPL_HEAP_START); minerva_init(); minerva_change_freq(FREQ_800); display_init(); u32 *fb = display_init_framebuffer_pitch(); gfx_init_ctxt(fb, 720, 1280, 720); gfx_con_init(); display_backlight_pwm_init(); display_backlight_brightness(100, 1000); bpmp_clk_rate_set(BPMP_CLK_DEFAULT_BOOST); gfx_clear_grey(0x1B); gfx_con_setpos(0, 0); gfx_con_setcol(COLOR_CYAN, gfx_con.fillbg, gfx_con.bgcol); gfx_printf("RAM test payload\n\n"); gfx_con_setcol(COLOR_WHITE, gfx_con.fillbg, gfx_con.bgcol); u32 raw = fuse_read_dramid(true); u32 nid = fuse_read_dramid(false); u32 chip = hw_get_chip_id(); int mib = dram_capacity_mib_from_fuse(); gfx_printf("SoC: %s\n", chip == GP_HIDREV_MAJOR_T210B01 ? "Mariko (T210B01)" : "Erista (T210)"); gfx_printf("DRAM fuse: raw %d norm %d\n", raw, nid); if (mib > 0) gfx_printf("Table MiB: %d (fuse SKU, not probe)\n", mib); else gfx_printf("Table MiB: (unknown id for this SoC)\n"); gfx_printf("\nHang — power off or inject payload.\n"); while (1) msleep(500); }