From edf717f5cb173c215c48dce454264637b048de3e Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Thu, 11 Mar 2010 13:59:56 +0100 Subject: [PATCH] Macroify CP0 registers --- include/grub/mips/loongson.h | 16 +++++++++++++--- kern/mips/yeeloong/fwstart.S | 10 +++++----- kern/mips/yeeloong/init.c | 3 ++- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/include/grub/mips/loongson.h b/include/grub/mips/loongson.h index 8441b6c0f..2c69e6c3d 100644 --- a/include/grub/mips/loongson.h +++ b/include/grub/mips/loongson.h @@ -19,7 +19,13 @@ #ifndef GRUB_LOONGSON_CPU_HEADER #define GRUB_LOONGSON_CPU_HEADER 1 -#define GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG $16 +#ifdef ASM_FILE +#define GRUB_CPU_REGISTER_WRAP(x) x +#else +#define GRUB_CPU_REGISTER_WRAP(x) #x +#endif + +#define GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG GRUB_CPU_REGISTER_WRAP($16) #define GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG_ILINESIZE 0x10 #define GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG_DLINESIZE 0x8 #define GRUB_CPU_LOONGSON_COP0_CACHE_DSIZE_SHIFT 6 @@ -51,8 +57,12 @@ /* Fixme: determine dynamically. */ #define GRUB_CPU_LOONGSON_SECONDARY_CACHE_LOG_SIZE 19 -#define GRUB_CPU_LOONGSON_COP0_CACHE_TAGLO $28 -#define GRUB_CPU_LOONGSON_COP0_CACHE_TAGHI $29 +#define GRUB_CPU_LOONGSON_COP0_BADVADDR GRUB_CPU_REGISTER_WRAP($8) +#define GRUB_CPU_LOONGSON_COP0_TIMER_COUNT GRUB_CPU_REGISTER_WRAP($9) +#define GRUB_CPU_LOONGSON_COP0_CAUSE GRUB_CPU_REGISTER_WRAP($13) +#define GRUB_CPU_LOONGSON_COP0_EPC GRUB_CPU_REGISTER_WRAP($14) +#define GRUB_CPU_LOONGSON_COP0_CACHE_TAGLO GRUB_CPU_REGISTER_WRAP($28) +#define GRUB_CPU_LOONGSON_COP0_CACHE_TAGHI GRUB_CPU_REGISTER_WRAP($29) #define GRUB_CPU_LOONGSON_LIOCFG 0xbfe00108 #define GRUB_CPU_LOONGSON_ROM_DELAY_OFFSET 2 diff --git a/kern/mips/yeeloong/fwstart.S b/kern/mips/yeeloong/fwstart.S index d48acabc8..e00da8933 100644 --- a/kern/mips/yeeloong/fwstart.S +++ b/kern/mips/yeeloong/fwstart.S @@ -130,8 +130,8 @@ __start: . = start + GRUB_MACHINE_FLASH_TLB_REFILL - GRUB_MACHINE_FLASH_START tlb_refill: - mfc0 $s1, $14 - mfc0 $s2, $8 + mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC + mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR move $s3, $ra lui $a0, %hi(epc) bal message @@ -170,9 +170,9 @@ cache_error: . = start + GRUB_MACHINE_FLASH_OTHER_EXCEPTION - GRUB_MACHINE_FLASH_START other_exception: - mfc0 $s0, $13 - mfc0 $s1, $14 - mfc0 $s2, $8 + mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE + mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC + mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR lui $a0, %hi(cause) bal message addiu $a0, $a0, %lo(cause) diff --git a/kern/mips/yeeloong/init.c b/kern/mips/yeeloong/init.c index f35605f63..f931cdb57 100644 --- a/kern/mips/yeeloong/init.c +++ b/kern/mips/yeeloong/init.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -44,7 +45,7 @@ grub_get_rtc (void) static grub_uint32_t last = 0; grub_uint32_t low; - asm volatile ("mfc0 %0, $9": "=r" (low)); + asm volatile ("mfc0 %0, " GRUB_CPU_LOONGSON_COP0_TIMER_COUNT : "=r" (low)); if (low < last) high++; last = low;