From 38b986754be86dd92088f883dab9a80d98e3574e Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Thu, 2 Feb 2023 14:24:30 +0100 Subject: [PATCH] gint/tlb: investigate ITLB and running code from RAM --- .gitignore | 1 + assets-fx/img/opt_gint_tlb.png | Bin 3069 -> 7558 bytes src/gint/tlb.c | 75 +++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+) diff --git a/.gitignore b/.gitignore index 1ded0c2..42c53c1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Build directories build-fx/ build-cg/ +build-cg-push/ # Targets gintctl.g1a diff --git a/assets-fx/img/opt_gint_tlb.png b/assets-fx/img/opt_gint_tlb.png index b65f971678a44c28697775abf3001b891ee2de9c..c972b6100cd3893aacca975aec44ed547cb2c0f5 100644 GIT binary patch literal 7558 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 LjI~QN9mD<$;!TH| delta 3038 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 g=-hnrUiA$905*d #include #include +#include #include #include @@ -154,6 +155,47 @@ void show_utlb(int row, int E) dprint_opt(334, y, fg_, "%s", (addr.D || data.D ? "D" : "-")); dprint_opt(350, y, fg_, "%s", (addr.V && data.V ? "V" : "-")); } + +void show_itlb(int row, int E) +{ + if(E == -1) + { + row_print(row, 2, "ID"); + row_print(row, 5, "Virtual"); + row_print(row, 14, "Physical"); + row_print(row, 23, "Size"); + row_print(row, 28, "Mode"); + row_print(row, 34, "SH"); + row_print(row, 40, "C"); + row_print(row, 44, "V"); + return; + } + + itlb_addr_t addr = *itlb_addr(E); + itlb_data_t data = *itlb_data(E); + + uint32_t src = addr.VPN << 10; + uint32_t dst = data.PPN << 10; + + int valid = (addr.V != 0) && (data.V != 0); + int size = (data.SZ1 << 1) | data.SZ0; + char const *size_str[] = { "1k", "4k", "64k", "1M" }; + char const *access_str[] = { "K", "U" }; + + uint16_t fg = valid ? C_BLACK : C_RGB(24,24,24); + #define fg_ fg, C_NONE, DTEXT_LEFT, DTEXT_TOP + + int y = row_y(row) + 2 * (row > 1); + + dprint_opt( 14, y, fg_, "%d", E); + dprint_opt( 38, y, fg_, "%08X", src); + dprint_opt(110, y, fg_, "%08X", dst); + dprint_opt(182, y, fg_, "%s", size_str[size]); + dprint_opt(222, y, fg_, "%s", access_str[data.PR]); + dprint_opt(270, y, fg_, "%s", (data.SH ? "SH" : "-")); + dprint_opt(318, y, fg_, "%s", (data.C ? "C" : "-")); + dprint_opt(350, y, fg_, "%s", (addr.V && data.V ? "V" : "-")); +} #endif #ifdef FX9860G @@ -349,6 +391,21 @@ static void draw(int tab, uint8_t *pages, uint32_t next_miss, int tlb_scroll) /* visible */ tlb_scroll, TLB_VIEW); } + else if(tab == 3) + { + show_itlb(1, -1); + for(int E = 0; E < 4; E++) + show_itlb(E+2, E); + + #ifdef FX9860G + dhline(6, C_BLACK); + #endif + + #ifdef FXCG50 + dline(12, 34, 363, 34, C_BLACK); + #endif + } + #ifdef FX9860G dfont(old_font); @@ -360,6 +417,7 @@ static void draw(int tab, uint8_t *pages, uint32_t next_miss, int tlb_scroll) fkey_menu(1, "ROM"); fkey_menu(2, "INFO"); fkey_menu(3, "TLB"); + fkey_menu(4, "ITLB"); fkey_action(5, "LOAD"); fkey_action(6, "TIMER"); #endif @@ -372,6 +430,14 @@ static int generate_tlb_miss(volatile void *arg) return TIMER_STOP; } +static int test_function(int x, int y) +{ + return 0; +} + +GALIGNED(4) char test_storage[256]; +int (*test)(int x, int y) = (void *)test_storage; + /* gintctl_gint_tlb(): TLB miss handler and TLB management */ void gintctl_gint_tlb(void) { @@ -382,6 +448,9 @@ void gintctl_gint_tlb(void) uint32_t next_miss = 0xffffffff; int tlb_scroll = 0; + memcpy(test_storage, test_function, sizeof test_storage); + __asm__("ocbp @%0":: "r"(test_storage)); + while(key != KEY_EXIT) { dclear(C_WHITE); @@ -396,6 +465,12 @@ void gintctl_gint_tlb(void) if(key == KEY_F1) tab = 0; if(key == KEY_F2) tab = 1; if(key == KEY_F3) tab = 2; + if(key == KEY_F4) tab = 3; + + if(tab == 3 && key == KEY_TAN) + { + (*test)(0, 0); + } if(tab == 2 && key == KEY_UP) {