]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2010-11-05 Robert Millan <rmh@gnu.org>
authorRobert Millan <rmh@gnu.org>
Fri, 5 Nov 2010 18:48:55 +0000 (19:48 +0100)
committerRobert Millan <rmh@gnu.org>
Fri, 5 Nov 2010 18:48:55 +0000 (19:48 +0100)
On Yeeloong, pass machine type information to Linux.

* grub-core/loader/mips/linux.c [GRUB_MACHINE_MIPS_YEELOONG]
(LOONGSON_MACHTYPE): New macro, set to
"machtype=lemote-yeeloong-2f-8.9inches".
[LOONGSON_MACHTYPE] (grub_cmd_linux): Pass LOONGSON_MACHTYPE as
additional argument to Linux.

ChangeLog
grub-core/loader/mips/linux.c

index 42100ed78bb6aa19ad7216925e4c7c680bef9c01..d9d2ebbe5851b480a7d5de415801fa6eb68505be 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2010-11-05  Robert Millan  <rmh@gnu.org>
+
+       On Yeeloong, pass machine type information to Linux.
+
+       * grub-core/loader/mips/linux.c [GRUB_MACHINE_MIPS_YEELOONG]
+       (LOONGSON_MACHTYPE): New macro, set to
+       "machtype=lemote-yeeloong-2f-8.9inches".
+       [LOONGSON_MACHTYPE] (grub_cmd_linux): Pass LOONGSON_MACHTYPE as
+       additional argument to Linux.
+
 2010-11-04  Robert Millan  <rmh@gnu.org>
 
        * util/deviceiter.c (grub_util_iterate_devices): Increase SCSI
index 44ab64eb58614c5bb40adfa82a0a5ddad3a55efb..7b1836982ccbf0f76fbd7a1b54d5955ebb98bcfa 100644 (file)
 #include <grub/pci.h>
 #include <grub/machine/time.h>
 
+#ifdef GRUB_MACHINE_MIPS_YEELOONG
+/* This can be detected on runtime from PMON, but:
+     a) it wouldn't work when GRUB is the firmware
+   and
+     b) for now we only support Yeeloong anyway.  */
+#define LOONGSON_MACHTYPE "machtype=lemote-yeeloong-2f-8.9inches"
+#endif
+
 static grub_dl_t my_mod;
 
 static int loaded;
@@ -214,6 +222,9 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
 
   /* For arguments.  */
   linux_argc = argc;
+#ifdef LOONGSON_MACHTYPE
+  linux_argc++;
+#endif
   /* Main arguments.  */
   size = (linux_argc) * sizeof (grub_uint32_t); 
   /* Initrd address and size.  */
@@ -226,7 +237,10 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
   /* Normal arguments.  */
   for (i = 1; i < argc; i++)
     size += ALIGN_UP (grub_strlen (argv[i]) + 1, 4);
-  
+#ifdef LOONGSON_MACHTYPE
+  size += ALIGN_UP (sizeof (LOONGSON_MACHTYPE), 4);
+#endif
+
   /* rd arguments.  */
   size += ALIGN_UP (sizeof ("rd_start=0xXXXXXXXXXXXXXXXX"), 4);
   size += ALIGN_UP (sizeof ("rd_size=0xXXXXXXXXXXXXXXXX"), 4);
@@ -263,6 +277,16 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
   linux_argv++;
   linux_args += ALIGN_UP (sizeof ("a0"), 4);
 
+#ifdef LOONGSON_MACHTYPE
+  /* In Loongson platform, it is the responsibility of the bootloader/firmware
+     to supply the OS kernel with machine type information.  */
+  grub_memcpy (linux_args, LOONGSON_MACHTYPE, sizeof (LOONGSON_MACHTYPE));
+  *linux_argv = (grub_uint8_t *) linux_args - (grub_uint8_t *) playground
+    + target_addr;
+  linux_argv++;
+  linux_args += ALIGN_UP (sizeof (LOONGSON_MACHTYPE), 4);
+#endif
+
   for (i = 1; i < argc; i++)
     {
       grub_memcpy (linux_args, argv[i], grub_strlen (argv[i]) + 1);