All checks were successful
Build / Build (push) Successful in 14s
- Add dram_fuse.c/h for shared fuse-to-MiB mapping - After successful update/clean install copy: if hekate_8gb.bin exists and fuse reports more than 4 GiB, copy to sd:/payload.bin and sd:/bootloader/update.bin, then remove source; otherwise remove helper only - Makefile: make ram-test builds output/RAM-Test.bin (tools/ram_test_main.c) Made-with: Cursor
71 lines
1.7 KiB
C
71 lines
1.7 KiB
C
/*
|
|
* Minimal RAM info test payload (fuse DRAM ID + SK table -> MiB).
|
|
* Build: make ram-test -> output/RAM-Test.bin
|
|
*/
|
|
|
|
#include <display/di.h>
|
|
#include <mem/heap.h>
|
|
#include <mem/minerva.h>
|
|
#include <memory_map.h>
|
|
#include <soc/bpmp.h>
|
|
#include <soc/fuse.h>
|
|
#include <soc/hw_init.h>
|
|
#include <soc/t210.h>
|
|
#include <utils/util.h>
|
|
|
|
#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);
|
|
}
|