From de4881244e42fc100e697357a30f43454fd665d0 Mon Sep 17 00:00:00 2001 From: Lephe Date: Sat, 20 Jun 2020 09:46:39 +0200 Subject: [PATCH] core: remove bootlog An unused logging mechanism that was never really fit for its task of diagnosing boot issues. Disappears with cleanup... --- configure | 3 - include/core/bootlog.h | 40 --------- include/gint/drivers.h | 35 ++------ src/core/bootlog.c | 195 ----------------------------------------- src/core/start.c | 9 -- src/cpg/cpg.c | 19 ---- src/keysc/keysc.c | 15 +--- src/r61524/r61524.c | 22 ----- src/t6k11/t6k11.c | 19 +--- src/tmu/tmu.c | 43 --------- 10 files changed, 10 insertions(+), 390 deletions(-) delete mode 100644 include/core/bootlog.h delete mode 100644 src/core/bootlog.c diff --git a/configure b/configure index f331bff..e800ebb 100755 --- a/configure +++ b/configure @@ -53,8 +53,6 @@ Build options: --cflags=FLAGS Additional compiler flags at end of command Library options (disabled by default): - --boot-log Display a boot debug log at startup if a key is pressed - Used to investigate unstabilities. --no-syscalls Cut off all syscalls (this will break things) Only use this option if you have a good idea of which. --static-gray Allocate gray VRAMs in static RAM instead of the heap @@ -190,7 +188,6 @@ output_config() echo -n "CONFIG.MACROS =" echo -n " -D$(echo $target | tr 'a-z' 'A-Z')" - [[ "$boot_log" ]] && echo -n " -DGINT_BOOT_LOG" [[ "$no_syscalls" ]] && echo -n " -DGINT_NO_SYSCALLS" [[ "$static_gray" ]] && echo -n " -DGINT_STATIC_GRAY" [[ "$atexit_max" ]] && echo -n " -DATEXIT_MAX=$atexit_max" diff --git a/include/core/bootlog.h b/include/core/bootlog.h deleted file mode 100644 index d84124c..0000000 --- a/include/core/bootlog.h +++ /dev/null @@ -1,40 +0,0 @@ -//--- -// core:bootlog - Boot-time on-screen log for extreme debugging -//--- - -#ifndef GINT_CORE_BOOTLOG -#define GINT_CORE_BOOTLOG - -#include - -/* bootlog_loaded() - section loading stage - Called when RAM sections have been wiped and copied */ -void bootlog_loaded(void); - -/* bootlog_mapped() - ROM mapping stage - Called after all ROM pages have been traversed. All of them may not have - been mapped. - @rom Amount of mapped ROM, in bytes - @ram Amount of mapped RAM, in bytes */ -void bootlog_mapped(uint32_t rom, uint32_t ram); - -/* bootlog_kernel() - gint loading stage - Called when gint has been installed, the VBR switched and the interrupt - handlers set up. */ -void bootlog_kernel(void); - -/* bootlog_driver() - driver load - Called for very loaded driver. */ -void bootlog_driver(const char *driver_name, const char *status); -void bootlog_driver_summary(void); - -/* All these functions are enabled only if GINT_BOOT_LOG is defined */ -#ifndef GINT_BOOT_LOG - #define bootlog_loaded(...) - #define bootlog_mapped(...) - #define bootlog_kernel(...) - #define bootlog_driver(...) - #define bootlog_driver_summary(...) -#endif - -#endif /* GINT_CORE_BOOTLOG */ diff --git a/include/gint/drivers.h b/include/gint/drivers.h index fdb4676..7ae9eb9 100644 --- a/include/gint/drivers.h +++ b/include/gint/drivers.h @@ -21,23 +21,19 @@ // 2. ctx_save(sys_ctx) // 3. init() // -// Then, if the on-screen boot log is enabled, the status() function is -// called and the returned string is displayed (21 characters max). -// 4. status() [only if GINT_BOOT_LOG is defined] -// // If the gint_switch() function is called to temporarily give back // control to the operating system, the state of each driver is saved to // the stack, then restored from there. -// 5. wait() -// 6. ctx_save(gint_ctx) -// 7. ctx_restore(sys_ctx) +// 4. wait() +// 5. ctx_save(gint_ctx) +// 6. ctx_restore(sys_ctx) // (stuff happening outside of gint) -// 8. ctx_save(sys_ctx) -// 9. ctx_restore(gint_ctx) +// 7. ctx_save(sys_ctx) +// 8. ctx_restore(gint_ctx) // // When finally the driver is unloaded, the system context is restored. -// 10. wait() -// 11. ctx_restore(sys_ctx) +// 9. wait() +// 10. ctx_restore(sys_ctx) //--- /* gint_driver_t - driver meta-information used by gint */ @@ -79,12 +75,6 @@ typedef struct /* Must restore the state of the driver as saved by ctx_save(). */ void (*ctx_restore)(void *ctx); - /* This function may generate a status string to display on the boot - log for debugging purposes. It should be a short (max 21 bytes) - string because all drivers' strings must fit on a few lines. May - return a pointer to a static buffer. May be NULL. */ - char const * (*status)(void); - } GPACKED(4) gint_driver_t; /* GINT_DECLARE_DRIVER() - make a driver visible to gint @@ -110,15 +100,4 @@ typedef struct #define GINT_DRIVER_SH3(name) name #endif -/* GINT_DRIVER_STATUS() - declare a function for status string generation - This macro makes its argument NULL when GINT_BOOT_LOG is undefined, this way - the named function can be defined under #ifdef GINT_BOOT_LOG while keeping - the structure clean. */ - -#ifdef GINT_BOOT_LOG -#define GINT_DRIVER_STATUS(name) name -#else -#define GINT_DRIVER_STATUS(name) NULL -#endif - #endif /* GINT_DRIVERS */ diff --git a/src/core/bootlog.c b/src/core/bootlog.c deleted file mode 100644 index 5339f34..0000000 --- a/src/core/bootlog.c +++ /dev/null @@ -1,195 +0,0 @@ -//--- -// gint:core:bootlog - Boot-time on-screen log for extreme debugging -//--- - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#ifdef GINT_BOOT_LOG - -#ifdef FXCG50 -void Bdisp_AllClr_VRAM(void); -void Bdisp_PutDisp_DD(void); -void PrintXY(int x, int y, const char *str, int fg, int bg); -#define dclear(c) Bdisp_AllClr_VRAM() -#define dupdate() Bdisp_PutDisp_DD() -#endif - -/* A copy of the bootlog */ -GDATA char gint_bootlog[22*8] = { 0 }; - -/* Linker script symbols - see core/start.c for details */ -extern char - brom, srom, - sgdata, sgbss, sdata, sbss, - btors, mtors, etors; - -/* print() - formatted printing shorthand */ -static void print(int x, int y, const char *format, ...) -{ - char str[45]; - va_list args; - va_start(args, format); - - vsnprintf(str + 2, 43, format, args); - - #ifdef FX9860G - dtext(6 * (x-1) + 1, 8 * (y-1), str + 2, C_BLACK, C_WHITE); - #endif - - #ifdef FXCG50 - PrintXY(x, y, str, 0, 0); - #endif - - memcpy(gint_bootlog + 22 * (y-1) + (x-1), str + 2, strlen(str + 2)); - - va_end(args); -} - -/* bootlog_loaded() - section loading stage */ -GSECTION(".pretext") -void bootlog_loaded(void) -{ - memset(gint_bootlog, 0x20, 22*8); - for(int i = 0; i < 8; i++) gint_bootlog[22 * i + 21] = 0; - - /* Size of memory sections */ - uint32_t rom_size = (uint32_t)&srom; - uint32_t ram_size = (uint32_t)&sdata + (uint32_t)&sbss; - uint32_t gint_size = (uint32_t)&sgdata + (uint32_t)&sgbss; - - /* MPU type */ - int mpu = gint[HWMPU]; - const char *names = "SH7337\0 SH7305\0 SH7355\0 SH7724"; - - /* TODO: Use a solid API for boot-time printing */ - dclear(C_WHITE); - print(1, 1, "gint @%7x SLmkd", GINT_VERSION); - - if(mpu >= 1 && mpu <= 4) print(1, 2, names + 8 * (mpu - 1)); - else print(1, 2, "%6d", mpu); - - #ifdef FX9860G - print(8, 2, "%c?-", gint[HWRAM] >= (512 << 10) ? 'R' : 'r'); - #endif - - #ifdef FXCG50 - print(8, 2, "---"); - #endif - - #ifdef FX9860G - char const *osversion = (void *)0x80010020; - char os[11] = { 0 }; - for(int i = 0; i < 10; i++) os[i] = osversion[i]; - print(12, 2, "OS%2s%2s%4s", os, os+3, os+6); - #endif - - print(1, 3, "ROM%4dk RAM%3d+%1dk ??", - (rom_size + 0x3ff) >> 10, - (ram_size + 0x3ff) >> 10, - (gint_size + 0x3ff) >> 10); - - dupdate(); -} - -/* bootlog_mapped() - ROM mapping stage */ -GSECTION(".pretext") -void bootlog_mapped(int rom, GUNUSED int ram) -{ - /* Check whether all ROM is mapped */ - uint32_t rom_size = (uint32_t)&srom; - - print(20, 3, "%c%c", (rom >= (int)rom_size) ? 'F' : 'f', - isSH3() ? 'u' : 'U'); - print(19, 1, "M"); - - #ifdef FX9860G - print(9, 2, (ram > 8192) ? "E" : "e"); - #endif - - dupdate(); -} - -/* bootlog_kernel() - gint loading stage */ -void bootlog_kernel(void) -{ - print(20, 1, "K"); - dupdate(); -} - -/* bootlog_driver() - driver load - Called for very loaded driver. */ -void bootlog_driver(const char *drv, const char *status) -{ - /* Positioning for the driver name */ - - static int x = 1, y = 4; - if(y > 5) - { - print(21, 4, "+"); - return; - } - - print(x, y, "%3s", drv); - x += 4; - - if(x + y >= 22) x=1, y++; - - /* Positioning for the driver message */ - - if(!status) return; - - int len = strlen(status); - - static int mx = 1, my = 6; - if(mx + len > 22) mx = 1, my++; - if(my > 8) return; - - print(mx, my, "%s", status); - mx += len + 1; - - dupdate(); -} - -/* bootlog_driver_summary() - all drivers loaded */ -void bootlog_driver_summary(void) -{ - int interrupts = 0; - uint16_t ipr; - print(21, 1, "D"); - - /* Count number of enabled interrupts */ - if(isSH3()) for(int i = 0; i < 8; i++) - { - ipr = *SH7705_INTC.IPRS[i]; - while(ipr > 0) - { - interrupts += (ipr & 0xf) != 0; - ipr >>= 4; - } - } - else for(int i = 0; i < 12; i++) - { - ipr = SH7305_INTC.IPRS[2 * i]; - while(ipr > 0) - { - interrupts += (ipr & 0xf) != 0; - ipr >>= 4; - } - } - - print(19, 5, "#%2d", interrupts); - - dupdate(); -} - -#endif /* GINT_BOOT_LOG */ diff --git a/src/core/start.c b/src/core/start.c index e1ce3d8..3da81e4 100644 --- a/src/core/start.c +++ b/src/core/start.c @@ -4,7 +4,6 @@ #include #include -#include #include #include #include @@ -110,11 +109,9 @@ int start(int isappli, int optnum) regcpy(lxram, sxram, rxram); regcpy(lyram, syram, ryram); regclr(rbss, sbss); - bootlog_loaded(); /* Install gint and switch VBR */ gint_install(); - bootlog_kernel(); /* We are now running on our own in kernel mode. Since we have taken control of interrupts, pretty much any interaction with the system @@ -134,13 +131,7 @@ int start(int isappli, int optnum) if(drv->ctx_save) drv->ctx_save(drv->sys_ctx); if(drv->init) drv->init(); - - #ifdef GINT_BOOT_LOG - char const *status = drv->status ? drv->status() : NULL; - bootlog_driver(drv->name, status); - #endif } - bootlog_driver_summary(); /* With gint fully initialized, we are ready to start the hosted user application. We have already loaded the RAM sections earlier; all diff --git a/src/cpg/cpg.c b/src/cpg/cpg.c index 1d4cf9b..f5895ee 100644 --- a/src/cpg/cpg.c +++ b/src/cpg/cpg.c @@ -120,24 +120,6 @@ static void sh7305_probe(void) // Other driver stuff //--- -#ifdef GINT_BOOT_LOG - -#include - -static const char *cpg_status(void) -{ - static char status[18]; - sprintf(status, "I%03d B%03d P%03d C%c", - freq.Iphi_f / 1000000, - freq.Bphi_f / 1000000, - freq.Pphi_f / 1000000, - isSH3() ? 'e' : 'E' - ); - return status; -} - -#endif /* GINT_BOOT_LOG */ - static void init(void) { gint[HWCPG] = HW_LOADED; @@ -153,7 +135,6 @@ static void init(void) gint_driver_t drv_cpg = { .name = "CPG", .init = init, - .status = GINT_DRIVER_STATUS(cpg_status), }; GINT_DECLARE_DRIVER(1, drv_cpg); diff --git a/src/keysc/keysc.c b/src/keysc/keysc.c index 4117463..5031843 100644 --- a/src/keysc/keysc.c +++ b/src/keysc/keysc.c @@ -245,7 +245,7 @@ int keydown_any(int key, ...) } //--- -// Driver initialization and status +// Driver initialization //--- GMAPPED static int callback(GUNUSED volatile void *arg) @@ -277,18 +277,6 @@ static void init(void) gint[HWKBDSF] = KEYBOARD_SCAN_FREQUENCY; } -#ifdef GINT_BOOT_LOG - -/* keysc_status() - status string of the driver */ -static const char *keysc_status(void) -{ - static char str[3] = "Sw"; - if(isSH3()) str[0] = 's'; - return str; -} - -#endif /* GINT_BOOT_LOG */ - //--- // Driver structure definition //--- @@ -296,7 +284,6 @@ static const char *keysc_status(void) gint_driver_t drv_keysc = { .name = "KEYSC", .init = init, - .status = GINT_DRIVER_STATUS(keysc_status), }; GINT_DECLARE_DRIVER(4, drv_keysc); diff --git a/src/r61524/r61524.c b/src/r61524/r61524.c index e92718b..89019ad 100644 --- a/src/r61524/r61524.c +++ b/src/r61524/r61524.c @@ -272,27 +272,6 @@ static void init(void) if(devname == 0x1524) gint[HWDD] |= HWDD_KNOWN; } -//--- -// Driver status string -//--- - -#ifdef GINT_BOOT_LOG - -#include - -/* r6524_status() - status string */ -static const char *r61524_status(void) -{ - select(device_code_read); - uint16_t dev = read(); - - static char str[8]; - sprintf(str, "%04xF-b", dev); - return str; -} - -#endif - //--- // Driver structure definition //--- @@ -300,7 +279,6 @@ static const char *r61524_status(void) gint_driver_t drv_r61524 = { .name = "R61524", .init = init, - .status = GINT_DRIVER_STATUS(r61524_status), .sys_ctx = &sys_ctx, .gint_ctx = &gint_ctx, .ctx_save = ctx_save, diff --git a/src/t6k11/t6k11.c b/src/t6k11/t6k11.c index aa95868..dbc909a 100644 --- a/src/t6k11/t6k11.c +++ b/src/t6k11/t6k11.c @@ -163,7 +163,8 @@ void t6k11_backlight(int setting) /* This setting is mapped to an I/O port: - On SH3, bit 7 of port G - - On SH4, bit 4 of port N */ + - On SH4, bit 4 of port N + TODO: Document the PFC to remove these addresses */ if(isSH3()) { port = (void *)0xa400012c; @@ -231,21 +232,6 @@ static void init(void) if(gint[HWCALC] == HWCALC_G35PE2) t6k11_version = 2; } -//--- -// Driver status string -//--- - -#ifdef GINT_BOOT_LOG - -/* t6k11_status() - status string of the driver */ -static const char *t6k11_status(void) -{ - /* TODO: t6k11: Detect backlight existence */ - return "6K11-cB"; -} - -#endif /* GINT_BOOT_LOG */ - //--- // Driver structure definition //--- @@ -253,7 +239,6 @@ static const char *t6k11_status(void) gint_driver_t drv_t6k11 = { .name = "T6K11", .init = init, - .status = GINT_DRIVER_STATUS(t6k11_status), .sys_ctx = &sys_ctx, .gint_ctx = &gint_ctx, .ctx_save = ctx_save, diff --git a/src/tmu/tmu.c b/src/tmu/tmu.c index 129dc6f..32622d5 100644 --- a/src/tmu/tmu.c +++ b/src/tmu/tmu.c @@ -325,48 +325,6 @@ static void init(void) } } -//--- -// Status function -//--- - -#ifdef GINT_BOOT_LOG -/* tmu_status() - status string of extra TMUs for the boot log - The status string has a two-character code for each of the extra timers. - - The first character is a digit character describing a value between 0 and 7. - * Bit 0 is set if TCOR=0xffffffff - * Bit 1 is set if TCNT=0xffffffff - * Bit 2 is set if TSTR=0 - - The second character indicates the status of interrupts. - * "D" (Disabled) if UNIE=0, UNF=0 - * "L" (Low) if UNIE=1, UNF=0 - * "H" (High) if UNIE=1, UNF=1 - * "!" (Error) if UNIE=0, UNF=1 - - So the normal status string would be made of "7D"'s. */ -static const char *tmu_status(void) -{ - static char status[18] = "ETMU "; - - int j = 5; - for(int i = 0; i < timer_count()-3; i++) - { - etmu_t *T = &ETMU[i]; - int v1 = (!(T->TCOR + 1)) - | (!(T->TCNT + 1) << 1) - | (!(T->TSTR) << 2); - int v2 = (T->TCR.UNF << 1) | (T->TCR.UNIE); - - status[j++] = '0' + v1; - status[j++] = "DLH!"[v2]; - } - status[j] = 0; - - return status; -} -#endif /* GINT_BOOT_LOG */ - //--- // Context system for this driver //--- @@ -444,7 +402,6 @@ gint_driver_t drv_tmu = { .name = "TMU", .driver_sh3 = GINT_DRIVER_SH3(driver_sh3), .init = init, - .status = GINT_DRIVER_STATUS(tmu_status), .sys_ctx = &sys_ctx, .gint_ctx = &gint_ctx, .ctx_save = ctx_save,