define.
* grub-core/kern/mips/loongson/init.c (grub_machine_init): Check
that PRID matches the detected subplatform and reset the subplatform
if it doesn't.
+2011-08-19 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * include/grub/mips/loongson.h (GRUB_CPU_LOONGSON_COP0_PRID): New
+ define.
+ * grub-core/kern/mips/loongson/init.c (grub_machine_init): Check
+ that PRID matches the detected subplatform and reset the subplatform
+ if it doesn't.
+
2011-08-19 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/misc.c (grub_vprintf): Fix a bug on malloc failure.
grub_machine_init (void)
{
grub_addr_t modend;
+ grub_uint32_t prid;
+
+ asm volatile ("mfc0 %0, " GRUB_CPU_LOONGSON_COP0_PRID : "=r" (prid));
+
+ switch (prid)
+ {
+ /* Loongson 2E. */
+ case 0x6302:
+ grub_arch_machine = GRUB_ARCH_MACHINE_FULOONG2E;
+ break;
+ /* Loongson 2F. */
+ case 0x6303:
+ if (grub_arch_machine != GRUB_ARCH_MACHINE_FULOONG2F
+ && grub_arch_machine != GRUB_ARCH_MACHINE_YEELOONG)
+ grub_arch_machine = GRUB_ARCH_MACHINE_YEELOONG;
+ break;
+ }
/* FIXME: measure this. */
if (grub_arch_busclock == 0)
#define GRUB_CPU_LOONGSON_COP0_BADVADDR GRUB_CPU_REGISTER_WRAP($8)
#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_PRID GRUB_CPU_REGISTER_WRAP($15)
#define GRUB_CPU_LOONGSON_COP0_CACHE_TAGLO GRUB_CPU_REGISTER_WRAP($28)
#define GRUB_CPU_LOONGSON_COP0_CACHE_TAGHI GRUB_CPU_REGISTER_WRAP($29)