Replaces the old vendored BDK with the one from hekate v6.5.5 (CTCaer's 2025/2026 refactors: sdmmc, SE, minerva v1.6, display, heap, return value homogenisation). OmniNX additions re-applied on top: bq24193_charger_connected() and jc_clear_input(); s_vprintf now ships with the BDK. Ported to the new API: - sd_mount(), sdmmc_storage_* and ini_parse() now return 0 on success. The installer checked ini_parse() != 1, which would have made it miss manifest.ini and run every install as a clean install. - SD helpers come from bdk/storage/sd.c (source/nx_sd.* removed), ffsystem.c from the BDK, diskio.c/ffconf.h from hekate (ffconf keeps the sd:/ volume prefix). - minerva_init() needs the minerva storage; the installer still drops to 800 MHz afterwards. - Payload launch follows hekate (sd_file_read, hw_deinit); coreboot path removed upstream. - Stack moved to 0x96000000: the old 0x83100000 is inside the new heap. - GUI/USB/compression parts of the BDK are not built.
72 lines
1.9 KiB
C
72 lines
1.9 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 <soc/timer.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(0x96000000); // same DRAM stack as the installer (see main.c)
|
|
heap_init((void *)IPL_HEAP_START);
|
|
|
|
if (!minerva_init((minerva_str_t *)&((nyx_storage_t *)NYX_STORAGE_ADDR)->minerva))
|
|
minerva_change_freq(FREQ_800);
|
|
|
|
display_init();
|
|
u32 *fb = display_init_window_a_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);
|
|
}
|