Probably doesn't work on real malta board but is useful for tests to replace
qemu_mips
---
 configure.ac                      |  10 ++-
 gentpl.py                         |  10 +--
 grub-core/Makefile.am             |  11 +++
 grub-core/Makefile.core.def       |  12 ++++
 grub-core/kern/mips/malta/init.c  | 115 ++++++++++++++++++++++++++++++
 grub-core/kern/mips/malta/pci.c   |  69 ++++++++++++++++++
 grub-core/lib/mips/malta/reboot.c |  36 ++++++++++
 include/grub/kernel.h             |   1 +
 include/grub/mips/malta/cmos.h    |  30 ++++++++
 include/grub/mips/malta/console.h |  22 ++++++
 include/grub/mips/malta/kernel.h  |  24 +++++++
 include/grub/mips/malta/memory.h  |  50 +++++++++++++
 include/grub/mips/malta/pci.h     |  61 ++++++++++++++++
 include/grub/mips/malta/serial.h  |  24 +++++++
 include/grub/mips/malta/time.h    |  25 +++++++
 include/grub/offsets.h            |   8 +++
 include/grub/util/install.h       |   2 +
 tests/ahci_test.in                |   3 +
 tests/cdboot_test.in              |   2 +-
 tests/ehci_test.in                |   3 +
 tests/fddboot_test.in             |   2 +-
 tests/file_filter_test.in         |   2 +-
 tests/hddboot_test.in             |   2 +-
 tests/netboot_test.in             |   2 +-
 tests/ohci_test.in                |   3 +
 tests/partmap_test.in             |   2 +-
 tests/pata_test.in                |   3 +
 tests/uhci_test.in                |   3 +
 tests/util/grub-shell.in          |  27 +++++++
 util/grub-install-common.c        |   2 +
 util/grub-install.c               |  14 ++++
 util/grub-mkrescue.c              |   4 ++
 util/grub-module-verifier.c       |   2 +
 util/mkimage.c                    |  36 ++++++++++
 34 files changed, 608 insertions(+), 14 deletions(-)
 create mode 100644 grub-core/kern/mips/malta/init.c
 create mode 100644 grub-core/kern/mips/malta/pci.c
 create mode 100644 grub-core/lib/mips/malta/reboot.c
 create mode 100644 include/grub/mips/malta/cmos.h
 create mode 100644 include/grub/mips/malta/console.h
 create mode 100644 include/grub/mips/malta/kernel.h
 create mode 100644 include/grub/mips/malta/memory.h
 create mode 100644 include/grub/mips/malta/pci.h
 create mode 100644 include/grub/mips/malta/serial.h
 create mode 100644 include/grub/mips/malta/time.h

diff --git a/configure.ac b/configure.ac
index 34f4f9415..ce338c13f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -187,7 +187,9 @@ case "$target_cpu"-"$platform" in
   mips-qemu_mips) ;;
   mips-qemu-mips) platform=qemu_mips;;
   mips-arc) ;;
+  mips-malta) ;;
   mipsel-arc) ;;
+  mipsel-malta) ;;
   mipsel-qemu_mips) ;;
   mipsel-qemu-mips) platform=qemu_mips;;
   mipsel-yeeloong) platform=loongson ;;
@@ -253,6 +255,7 @@ case "$platform" in
   emu)         machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
   loongson)    machine_CPPFLAGS="$machine_CPPFLAGS 
-DGRUB_MACHINE_MIPS_LOONGSON=1" ;;
   qemu_mips)   machine_CPPFLAGS="$machine_CPPFLAGS 
-DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;;
+  malta)       machine_CPPFLAGS="$machine_CPPFLAGS 
-DGRUB_MACHINE_MIPS_MALTA=1" ;;
   arc)         machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
 esac
 if test x${target_cpu} = xmipsel ; then
@@ -270,7 +273,7 @@ case "${target_cpu}-$platform" in
         TARGET_LINK_ADDR=0x80700000
        TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000
        ;;
-     mips*-qemu_mips | mips*-loongson)
+     mips*-qemu_mips | mips*-loongson | mips*-malta)
         TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000
        ;;
 esac
@@ -1823,7 +1826,7 @@ if test x"$grub_build_mkfont_excuse" = x ; then
 else
   enable_build_grub_mkfont=no
 fi
-if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || 
test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test 
"x$platform" = xcoreboot ); then
+if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || 
test "x$platform" = xloongson || test "x$platform" = xmalta || test 
"x$platform" = xqemu_mips || test "x$platform" = xcoreboot ); then
   if test x"$grub_build_mkfont_excuse" = x ; then
     AC_MSG_ERROR([qemu, coreboot and loongson ports need build-time 
grub-mkfont])
   else
@@ -1908,7 +1911,7 @@ if test x"$enable_build_grub_mkfont" = xno ; then
   FONT_SOURCE=
 fi
 
-if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test 
"x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$platform" 
= xcoreboot ); then
+if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test 
"x$platform" = xloongson || test "x$platform" = xmalta || test "x$platform" = 
xqemu_mips || test "x$platform" = xcoreboot ); then
   if test x"$grub_build_mkfont_excuse" = x ; then
     AC_MSG_ERROR([qemu, coreboot and loongson ports need unifont])
   else
@@ -2182,6 +2185,7 @@ AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o 
x$target_cpu = xmipsel
 AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu 
= xmipsel ")"  -a x$platform = xarc])
 AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a 
x$platform = xloongson])
 AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o 
x$target_cpu = xmipsel ")"  -a x$platform = xqemu_mips])
+AM_CONDITIONAL([COND_mips_malta], [test "(" x$target_cpu = xmips -o 
x$target_cpu = xmipsel ")"  -a x$platform = xmalta])
 AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
 AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
 AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a 
x$platform = xieee1275])
diff --git a/gentpl.py b/gentpl.py
index d8c6965d8..b375911d0 100644
--- a/gentpl.py
+++ b/gentpl.py
@@ -29,7 +29,7 @@ import re
 GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot",
                    "i386_multiboot", "i386_ieee1275", "x86_64_efi",
                    "i386_xen", "x86_64_xen", "i386_xen_pvh",
-                   "mips_loongson", "sparc64_ieee1275",
+                   "mips_loongson", "mips_malta", "sparc64_ieee1275",
                    "powerpc_ieee1275", "mips_arc", "ia64_efi",
                    "mips_qemu_mips", "arm_uboot", "arm_efi", "arm64_efi",
                    "arm_coreboot", "loongarch64_efi", "riscv32_efi", 
"riscv64_efi" ]
@@ -42,7 +42,7 @@ GROUPS["common"]   = GRUB_PLATFORMS[:]
 GROUPS["i386"]        = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", 
"i386_multiboot", "i386_ieee1275" ]
 GROUPS["x86_64"]      = [ "x86_64_efi" ]
 GROUPS["x86"]         = GROUPS["i386"] + GROUPS["x86_64"]
-GROUPS["mips"]        = [ "mips_loongson", "mips_qemu_mips", "mips_arc" ]
+GROUPS["mips"]        = [ "mips_loongson", "mips_qemu_mips", "mips_arc", 
"mips_malta" ]
 GROUPS["sparc64"]     = [ "sparc64_ieee1275" ]
 GROUPS["powerpc"]     = [ "powerpc_ieee1275" ]
 GROUPS["arm"]         = [ "arm_uboot", "arm_efi", "arm_coreboot" ]
@@ -63,10 +63,10 @@ GROUPS["coreboot"]  = [ "i386_coreboot", "arm_coreboot" ]
 GROUPS["noemu"]   = GRUB_PLATFORMS[:]; GROUPS["noemu"].remove("emu")
 
 # Groups based on hardware features
-GROUPS["cmos"] = GROUPS["x86"][:] + ["mips_loongson", "mips_qemu_mips",
+GROUPS["cmos"] = GROUPS["x86"][:] + ["mips_loongson", "mips_qemu_mips", 
"mips_malta",
                                      "sparc64_ieee1275", "powerpc_ieee1275"]
 GROUPS["cmos"].remove("i386_efi"); GROUPS["cmos"].remove("x86_64_efi");
-GROUPS["pci"]      = GROUPS["x86"] + ["mips_loongson"]
+GROUPS["pci"]      = GROUPS["x86"] + ["mips_loongson", "mips_malta"]
 GROUPS["usb"]      = GROUPS["pci"] + ["arm_coreboot"]
 
 # If gfxterm is main output console integrate it into kernel
@@ -75,7 +75,7 @@ GROUPS["videomodules"]   = GRUB_PLATFORMS[:];
 for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i)
 
 # Similar for terminfo
-GROUPS["terminfoinkernel"] = [ "emu", "mips_loongson", "mips_arc", 
"mips_qemu_mips", "i386_xen_pvh" ] + GROUPS["xen"] + GROUPS["ieee1275"] + 
GROUPS["uboot"];
+GROUPS["terminfoinkernel"] = [ "emu", "mips_loongson", "mips_arc", 
"mips_qemu_mips", "i386_xen_pvh", "mips_malta" ] + GROUPS["xen"] + 
GROUPS["ieee1275"] + GROUPS["uboot"];
 GROUPS["terminfomodule"]   = GRUB_PLATFORMS[:];
 for i in GROUPS["terminfoinkernel"]: GROUPS["terminfomodule"].remove(i)
 
diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
index e50db8106..db386af5c 100644
--- a/grub-core/Makefile.am
+++ b/grub-core/Makefile.am
@@ -216,6 +216,17 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
 endif
 
+if COND_mips_malta
+#KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
+KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
+KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pci.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/serial.h
+#KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
+endif
+
 if COND_mips_loongson
 KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
 KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index f70e02e69..482ed4d7b 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -103,6 +103,7 @@ kernel = {
   sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400';
   mips_arc_ldflags    = '-Wl,-Ttext,$(TARGET_LINK_ADDR)';
   mips_qemu_mips_ldflags    = '-Wl,-Ttext,0x80200000';
+  mips_malta_ldflags    = '-Wl,-Ttext,0x80200000';
 
   mips_arc_cppflags = 
'-DGRUB_DECOMPRESSOR_LINK_ADDR=$(TARGET_DECOMPRESSOR_LINK_ADDR)';
   i386_qemu_cppflags     = 
'-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
@@ -297,6 +298,12 @@ kernel = {
   mips = kern/mips/dl.c;
   mips = kern/mips/init.c;
 
+  mips_malta = kern/mips/malta/init.c;
+  mips_malta = term/ns8250.c;
+  mips_malta = term/serial.c;
+  mips_malta = kern/mips/malta/pci.c;
+  mips_malta = bus/pci.c;
+
   mips_qemu_mips = kern/mips/qemu_mips/init.c;
   mips_qemu_mips = term/ns8250.c;
   mips_qemu_mips = term/serial.c;
@@ -605,7 +612,9 @@ module = {
 module = {
   name = cs5536;
   x86 = bus/cs5536.c;
+  mips_malta = bus/cs5536.c;
   enable = x86;
+  enable = mips_malta;
 };
 
 module = {
@@ -854,6 +863,7 @@ module = {
   enable = sparc64_ieee1275;
   enable = powerpc_ieee1275;
   enable = mips_arc;
+  enable = mips_malta;
   enable = ia64_efi;
   enable = arm_efi;
   enable = arm64_efi;
@@ -960,6 +970,7 @@ module = {
   mips_arc = lib/mips/arc/reboot.c;
   mips_loongson = lib/mips/loongson/reboot.c;
   mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
+  mips_malta = lib/mips/malta/reboot.c;
   xen = lib/xen/reboot.c;
   i386_xen_pvh = lib/xen/reboot.c;
   uboot = lib/uboot/reboot.c;
@@ -2476,6 +2487,7 @@ module = {
   name = keylayouts;
   common = commands/keylayouts.c;
   enable = x86;
+  enable = mips_malta;
 };
 
 module = {
diff --git a/grub-core/kern/mips/malta/init.c b/grub-core/kern/mips/malta/init.c
new file mode 100644
index 000000000..b1944a042
--- /dev/null
+++ b/grub-core/kern/mips/malta/init.c
@@ -0,0 +1,115 @@
+#include <grub/kernel.h>
+#include <grub/misc.h>
+#include <grub/env.h>
+#include <grub/time.h>
+#include <grub/types.h>
+#include <grub/misc.h>
+#include <grub/mm.h>
+#include <grub/time.h>
+#include <grub/machine/memory.h>
+#include <grub/machine/kernel.h>
+#include <grub/machine/console.h>
+#include <grub/machine/pci.h>
+#include <grub/cpu/memory.h>
+#include <grub/memory.h>
+#include <grub/video.h>
+#include <grub/terminfo.h>
+#include <grub/keyboard_layouts.h>
+#include <grub/serial.h>
+#include <grub/loader.h>
+#include <grub/at_keyboard.h>
+
+static inline int
+probe_mem (grub_addr_t addr)
+{
+  volatile grub_uint8_t *ptr = (grub_uint8_t *) (0xa0000000 | addr);
+  grub_uint8_t c = *ptr;
+  *ptr = 0xAA;
+  if (*ptr != 0xAA)
+    return 0;
+  *ptr = 0x55;
+  if (*ptr != 0x55)
+    return 0;
+  *ptr = c;
+  return 1;
+}
+
+void
+grub_machine_init (void)
+{
+  grub_addr_t modend;
+
+  grub_arch_memsize = 128 * 0x100000;
+
+  /* FIXME: measure this.  */
+  grub_arch_cpuclock = 300000000;
+
+  modend = grub_modules_get_end ();
+  grub_mm_init_region ((void *) modend, grub_arch_memsize
+                      - (modend - GRUB_ARCH_LOWMEMVSTART));
+
+  grub_install_get_time_ms (grub_rtc_get_time_ms);
+
+  /* grub_keylayouts_init ();
+  grub_at_keyboard_init ();
+
+  grub_qemu_init_cirrus ();
+  grub_vga_text_init ();*/
+
+  grub_terminfo_init ();
+  grub_serial_init ();
+
+  //  grub_boot_init ();
+}
+
+void
+grub_machine_fini (int flags __attribute__ ((unused)))
+{
+}
+
+void
+grub_exit (void)
+{
+  grub_halt ();
+}
+
+static int
+grub_shutdown_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
+                       void *data __attribute__ ((unused)))
+{
+  /* QEMU.  */
+  if (pciid == 0x71138086)
+    {
+      grub_pci_address_t addr;
+      addr = grub_pci_make_address (dev, 0x40);
+      grub_pci_write (addr, 0x7001);
+      addr = grub_pci_make_address (dev, 0x80);
+      grub_pci_write (addr, grub_pci_read (addr) | 1);
+      grub_outw (0x2000, GRUB_MACHINE_PCI_IO_BASE + 0x7004);
+    }
+  return 0;
+}
+
+void
+grub_halt (void)
+{
+  grub_pci_iterate (grub_shutdown_pci_iter, NULL);
+  while (1);
+}
+
+grub_err_t
+grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
+{
+  hook (0, grub_arch_memsize, GRUB_MEMORY_AVAILABLE, hook_data);
+  return GRUB_ERR_NONE;
+}
+
+void
+grub_machine_get_bootlocation (char **device __attribute__ ((unused)),
+                              char **path __attribute__ ((unused)))
+{
+}
+
+extern char _end[];
+grub_addr_t grub_modbase = (grub_addr_t) _end;
+
diff --git a/grub-core/kern/mips/malta/pci.c b/grub-core/kern/mips/malta/pci.c
new file mode 100644
index 000000000..299be26b7
--- /dev/null
+++ b/grub-core/kern/mips/malta/pci.c
@@ -0,0 +1,69 @@
+#include <grub/pci.h>
+#include <grub/machine/pci.h>
+
+static volatile grub_uint32_t *cfg_addr = (volatile grub_uint32_t *) 
0xbbe00cf8;
+static volatile grub_uint32_t *cfg_data = (volatile grub_uint32_t *) 
0xbbe00cfc;
+
+grub_uint32_t
+grub_pci_read (grub_pci_address_t addr)
+{
+  *cfg_addr = addr & ~3;
+  return *cfg_data;
+}
+
+grub_uint16_t
+grub_pci_read_word (grub_pci_address_t addr)
+{
+  *cfg_addr = addr & ~3;
+  return *((volatile grub_uint16_t *) cfg_data  + ((addr & 2) >> 1));
+}
+
+grub_uint8_t
+grub_pci_read_byte (grub_pci_address_t addr)
+{
+  *cfg_addr = addr & ~3;
+  return *((volatile grub_uint8_t *) cfg_data  + (addr & 3));
+}
+
+void
+grub_pci_write (grub_pci_address_t addr, grub_uint32_t data)
+{
+  *cfg_addr = addr & ~3;
+  *cfg_data = data;
+}
+
+void
+grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data)
+{
+  *cfg_addr = addr & ~3;
+  *((volatile grub_uint16_t *) cfg_data  + ((addr & 2) >> 1)) = data;
+}
+
+void
+grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data)
+{
+  *cfg_addr = addr & ~3;
+  *((volatile grub_uint8_t *) cfg_data  + (addr & 3)) = data;
+}
+
+volatile void *
+grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
+                          grub_addr_t base, grub_size_t size __attribute__ 
((unused)))
+{
+  return (volatile void *)(0xa0000000 | base);
+}
+
+void *
+grub_pci_device_map_range_cached (grub_pci_device_t dev,
+                                 grub_addr_t base, grub_size_t size)
+{
+  return (void *) (((grub_addr_t) grub_pci_device_map_range (dev, base, size))
+                  & ~0x20000000);
+}
+
+void
+grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
+                            volatile void *mem __attribute__ ((unused)),
+                            grub_size_t size __attribute__ ((unused)))
+{
+}
diff --git a/grub-core/lib/mips/malta/reboot.c 
b/grub-core/lib/mips/malta/reboot.c
new file mode 100644
index 000000000..4b4af3298
--- /dev/null
+++ b/grub-core/lib/mips/malta/reboot.c
@@ -0,0 +1,36 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2011  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/machine/kernel.h>
+#include <grub/machine/memory.h>
+#include <grub/machine/pci.h>
+#include <grub/misc.h>
+#include <grub/time.h>
+#include <grub/term.h>
+#include <grub/i18n.h>
+
+void
+grub_reboot (void)
+{
+  grub_outl (0x42, 0xbf000500);
+  grub_millisleep (1500);
+
+  grub_puts_ (N_("Reboot failed"));
+  grub_refresh ();
+  while (1);
+}
diff --git a/include/grub/kernel.h b/include/grub/kernel.h
index 6121c1e66..bd1a9ebd5 100644
--- a/include/grub/kernel.h
+++ b/include/grub/kernel.h
@@ -80,6 +80,7 @@ struct grub_module_info64
 
 #if defined (GRUB_MACHINE_PCBIOS) || defined (GRUB_MACHINE_COREBOOT) \
   || defined (GRUB_MACHINE_MULTIBOOT) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) 
\
+  || defined (GRUB_MACHINE_MIPS_MALTA) \
   || defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_ARC) \
   || (defined (__sparc__) && defined (GRUB_MACHINE_IEEE1275)) \
   || defined (GRUB_MACHINE_UBOOT) || defined (GRUB_MACHINE_XEN) \
diff --git a/include/grub/mips/malta/cmos.h b/include/grub/mips/malta/cmos.h
new file mode 100644
index 000000000..90e51af5e
--- /dev/null
+++ b/include/grub/mips/malta/cmos.h
@@ -0,0 +1,30 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2008  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef        GRUB_CPU_CMOS_H
+#define        GRUB_CPU_CMOS_H 1
+
+#include <grub/types.h>
+#include <grub/cpu/io.h>
+
+#define GRUB_CMOS_ADDR_REG     0xb8000070
+#define GRUB_CMOS_DATA_REG     0xb8000071
+#define GRUB_CMOS_ADDR_REG_HI  0xb8000072
+#define GRUB_CMOS_DATA_REG_HI  0xb8000073
+
+#endif /* GRUB_CPU_CMOS_H */
diff --git a/include/grub/mips/malta/console.h 
b/include/grub/mips/malta/console.h
new file mode 100644
index 000000000..eb1a5781b
--- /dev/null
+++ b/include/grub/mips/malta/console.h
@@ -0,0 +1,22 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2009  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_MACHINE_CONSOLE_HEADER
+#define GRUB_MACHINE_CONSOLE_HEADER    1
+
+#endif /* ! GRUB_MACHINE_CONSOLE_HEADER */
diff --git a/include/grub/mips/malta/kernel.h b/include/grub/mips/malta/kernel.h
new file mode 100644
index 000000000..bddc80416
--- /dev/null
+++ b/include/grub/mips/malta/kernel.h
@@ -0,0 +1,24 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2005,2006,2007,2008,2009  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_KERNEL_MACHINE_HEADER
+#define GRUB_KERNEL_MACHINE_HEADER     1
+
+#include <grub/symbol.h>
+
+#endif
diff --git a/include/grub/mips/malta/memory.h b/include/grub/mips/malta/memory.h
new file mode 100644
index 000000000..29b04a5ad
--- /dev/null
+++ b/include/grub/mips/malta/memory.h
@@ -0,0 +1,50 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2009 Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_MEMORY_MACHINE_HEADER
+#define GRUB_MEMORY_MACHINE_HEADER     1
+
+#ifndef ASM_FILE
+#include <grub/symbol.h>
+#include <grub/err.h>
+#include <grub/types.h>
+#endif
+
+#define GRUB_MACHINE_MEMORY_STACK_HIGH       0x80f00000
+#define GRUB_MACHINE_MEMORY_USABLE       0x81000000
+
+#ifndef ASM_FILE
+
+extern grub_uint32_t grub_arch_memsize __attribute__ ((section(".text")));
+
+static inline grub_err_t
+grub_machine_mmap_register (grub_uint64_t start __attribute__ ((unused)),
+                           grub_uint64_t size __attribute__ ((unused)),
+                           int type __attribute__ ((unused)),
+                           int handle __attribute__ ((unused)))
+{
+  return GRUB_ERR_NONE;
+}
+static inline grub_err_t
+grub_machine_mmap_unregister (int handle  __attribute__ ((unused)))
+{
+  return GRUB_ERR_NONE;
+}
+#endif
+
+#endif
diff --git a/include/grub/mips/malta/pci.h b/include/grub/mips/malta/pci.h
new file mode 100644
index 000000000..ca85279d9
--- /dev/null
+++ b/include/grub/mips/malta/pci.h
@@ -0,0 +1,61 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2008  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef        GRUB_MACHINE_PCI_H
+#define        GRUB_MACHINE_PCI_H      1
+
+#include <grub/types.h>
+#include <grub/cpu/io.h>
+#include <grub/pci.h>
+
+#define GRUB_MACHINE_PCI_IO_BASE 0xb8000000
+
+grub_uint32_t
+EXPORT_FUNC (grub_pci_read) (grub_pci_address_t addr);
+
+grub_uint16_t
+EXPORT_FUNC (grub_pci_read_word) (grub_pci_address_t addr);
+
+grub_uint8_t
+EXPORT_FUNC (grub_pci_read_byte) (grub_pci_address_t addr);
+
+void
+EXPORT_FUNC (grub_pci_write) (grub_pci_address_t addr, grub_uint32_t data);
+
+void
+EXPORT_FUNC (grub_pci_write_word) (grub_pci_address_t addr, grub_uint16_t 
data);
+
+void
+EXPORT_FUNC (grub_pci_write_byte) (grub_pci_address_t addr, grub_uint8_t data);
+
+volatile void *
+EXPORT_FUNC (grub_pci_device_map_range) (grub_pci_device_t dev,
+                                        grub_addr_t base, grub_size_t size);
+void *
+EXPORT_FUNC (grub_pci_device_map_range_cached) (grub_pci_device_t dev,
+                                               grub_addr_t base,
+                                               grub_size_t size);
+void
+EXPORT_FUNC (grub_pci_device_unmap_range) (grub_pci_device_t dev,
+                                          volatile void *mem,
+                                          grub_size_t size);
+
+#define GRUB_PCI_NUM_DEVICES    32
+#define GRUB_PCI_NUM_BUS        256
+
+#endif
diff --git a/include/grub/mips/malta/serial.h b/include/grub/mips/malta/serial.h
new file mode 100644
index 000000000..bee041d53
--- /dev/null
+++ b/include/grub/mips/malta/serial.h
@@ -0,0 +1,24 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2009  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_MACHINE_SERIAL_HEADER
+#define GRUB_MACHINE_SERIAL_HEADER     1
+
+#define GRUB_MACHINE_SERIAL_PORTS { 0xb80003f8 }
+
+#endif
diff --git a/include/grub/mips/malta/time.h b/include/grub/mips/malta/time.h
new file mode 100644
index 000000000..164b61ef8
--- /dev/null
+++ b/include/grub/mips/malta/time.h
@@ -0,0 +1,25 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2003,2004,2005,2007  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef KERNEL_MACHINE_TIME_HEADER
+#define KERNEL_MACHINE_TIME_HEADER     1
+
+#include <grub/symbol.h>
+#include <grub/cpu/time.h>
+
+#endif /* ! KERNEL_MACHINE_TIME_HEADER */
diff --git a/include/grub/offsets.h b/include/grub/offsets.h
index 442dc31de..a77be45ea 100644
--- a/include/grub/offsets.h
+++ b/include/grub/offsets.h
@@ -82,6 +82,13 @@
 #define GRUB_DECOMPRESSOR_MIPS_QEMU_MIPS_UNCOMPRESSED_ADDR        0x10
 #define GRUB_KERNEL_MIPS_QEMU_MIPS_TOTAL_MODULE_SIZE   0x08
 
+#define GRUB_KERNEL_MIPS_MALTA_LINK_ADDR         0x80200000
+#define GRUB_KERNEL_MIPS_MALTA_LINK_ALIGN  32
+#define GRUB_DECOMPRESSOR_MIPS_MALTA_COMPRESSED_SIZE          0x8
+#define GRUB_DECOMPRESSOR_MIPS_MALTA_UNCOMPRESSED_SIZE        0xc
+#define GRUB_DECOMPRESSOR_MIPS_MALTA_UNCOMPRESSED_ADDR        0x10
+#define GRUB_KERNEL_MIPS_MALTA_TOTAL_MODULE_SIZE       0x08
+
 #define GRUB_KERNEL_MIPS_ARC_LINK_ADDR         0x88200000
 #define GRUB_KERNEL_MIPSEL_ARC_LINK_ADDR         0x80700000
 #define GRUB_KERNEL_MIPS_ARC_LINK_ALIGN  32
@@ -121,6 +128,7 @@
 #define GRUB_KERNEL_MIPS_LOONGSON_MOD_ALIGN 0x4
 #define GRUB_KERNEL_MIPS_ARC_MOD_ALIGN 0x4
 #define GRUB_KERNEL_MIPS_QEMU_MIPS_MOD_ALIGN 0x4
+#define GRUB_KERNEL_MIPS_MALTA_MOD_ALIGN 0x4
 
 #define GRUB_KERNEL_ARM_UBOOT_MOD_ALIGN        0x8
 #define GRUB_KERNEL_ARM_UBOOT_TOTAL_MODULE_SIZE        0x4
diff --git a/include/grub/util/install.h b/include/grub/util/install.h
index 5c0a52ca2..f59a19780 100644
--- a/include/grub/util/install.h
+++ b/include/grub/util/install.h
@@ -112,6 +112,8 @@ enum grub_install_plat
     GRUB_INSTALL_PLATFORM_LOONGARCH64_EFI,
     GRUB_INSTALL_PLATFORM_RISCV32_EFI,
     GRUB_INSTALL_PLATFORM_RISCV64_EFI,
+    GRUB_INSTALL_PLATFORM_MIPSEL_MALTA,
+    GRUB_INSTALL_PLATFORM_MIPS_MALTA,
     GRUB_INSTALL_PLATFORM_MAX
   };
 
diff --git a/tests/ahci_test.in b/tests/ahci_test.in
index 70646a24e..e65bef89a 100644
--- a/tests/ahci_test.in
+++ b/tests/ahci_test.in
@@ -29,6 +29,9 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     # PLATFORM: no AHCI on ARC and qemu-mips platforms
     mips*-arc | mips*-qemu_mips)
        exit 77;;
+    # Not supported yet
+    mips*-malta)
+       exit 77;;
     # FIXME: No native drivers are available for those
     powerpc-ieee1275 | sparc64-ieee1275 | arm*-efi | loongarch64-efi)
        exit 77;;
diff --git a/tests/cdboot_test.in b/tests/cdboot_test.in
index f00cdec58..46dcc3acd 100644
--- a/tests/cdboot_test.in
+++ b/tests/cdboot_test.in
@@ -24,7 +24,7 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     *-emu)
        exit 77;;
     # PLATFORM: Flash targets
-    i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips)
+    mips-malta | mipsel-malta | i386-qemu | i386-coreboot | mips-qemu_mips | 
mipsel-qemu_mips)
        exit 77;;
     # FIXME: currently grub-shell uses only -kernel for loongson
     mipsel-loongson)
diff --git a/tests/ehci_test.in b/tests/ehci_test.in
index bf823a5de..037eaf499 100644
--- a/tests/ehci_test.in
+++ b/tests/ehci_test.in
@@ -29,6 +29,9 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     # PLATFORM: no USB on ARC and qemu-mips platforms
     mips*-arc | mips*-qemu_mips)
        exit 77;;
+    # Not supported yet
+    mips*-malta)
+       exit 77;;    
     # FIXME: No native drivers are available for those
     powerpc-ieee1275 | sparc64-ieee1275 | arm*-efi | loongarch64-efi)
        exit 77;;
diff --git a/tests/fddboot_test.in b/tests/fddboot_test.in
index 6ef49efcb..c6ea2883e 100644
--- a/tests/fddboot_test.in
+++ b/tests/fddboot_test.in
@@ -24,7 +24,7 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     *-emu)
        exit 77;;
     # PLATFORM: Flash targets
-    i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips)
+    mips-malta | mipsel-malta | i386-qemu | i386-coreboot | mips-qemu_mips | 
mipsel-qemu_mips)
        exit 77;;
     # FIXME: currently grub-shell uses only -kernel for loongson
     mipsel-loongson)
diff --git a/tests/file_filter_test.in b/tests/file_filter_test.in
index ed6abcb5a..826b45699 100644
--- a/tests/file_filter_test.in
+++ b/tests/file_filter_test.in
@@ -50,7 +50,7 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     *-emu)
        exit 0;;
     # PLATFORM: Flash targets
-    i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips)
+    i386-qemu | i386-coreboot | mips-malta | mipsel-malta | mips-qemu_mips | 
mipsel-qemu_mips)
        exit 0;;
     # FIXME: currently grub-shell uses only -kernel for loongson
     mipsel-loongson)
diff --git a/tests/hddboot_test.in b/tests/hddboot_test.in
index 764e0da1c..430390acd 100644
--- a/tests/hddboot_test.in
+++ b/tests/hddboot_test.in
@@ -24,7 +24,7 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     *-emu)
        exit 77;;
     # PLATFORM: Flash targets
-    i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips)
+    mips-malta | mipsel-malta | i386-qemu | i386-coreboot | mips-qemu_mips | 
mipsel-qemu_mips)
        exit 77;;
     # FIXME: currently grub-shell uses only -kernel for loongson
     mipsel-loongson)
diff --git a/tests/netboot_test.in b/tests/netboot_test.in
index 510c9c34b..9b87adfa4 100644
--- a/tests/netboot_test.in
+++ b/tests/netboot_test.in
@@ -24,7 +24,7 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     *-emu)
        exit 77;;
     # PLATFORM: Flash targets
-    i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips)
+    mips-malta | mipsel-malta | i386-qemu | i386-coreboot | mips-qemu_mips | 
mipsel-qemu_mips)
        exit 77;;
     # FIXME: currently grub-shell uses only -kernel for loongson
     mipsel-loongson)
diff --git a/tests/ohci_test.in b/tests/ohci_test.in
index a40d3bc0a..9be52d482 100644
--- a/tests/ohci_test.in
+++ b/tests/ohci_test.in
@@ -29,6 +29,9 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     # PLATFORM: no USB on ARC and qemu-mips platforms
     mips*-arc | mips*-qemu_mips)
        exit 77;;
+    # Not supported yet
+    mips*-malta)
+       exit 77;;
     # FIXME: No native drivers are available for those
     powerpc-ieee1275 | sparc64-ieee1275 | arm*-efi | loongarch64-efi)
        exit 77;;
diff --git a/tests/partmap_test.in b/tests/partmap_test.in
index 4138e88fe..f71cdaabe 100644
--- a/tests/partmap_test.in
+++ b/tests/partmap_test.in
@@ -66,7 +66,7 @@ list_parts () {
 }
 
 case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
-    mips-qemu_mips | mipsel-qemu_mips | i386-qemu | i386-multiboot | 
i386-coreboot | mipsel-loongson)
+    mips-malta | mipsel-malta | mips-qemu_mips | mipsel-qemu_mips | i386-qemu 
| i386-multiboot | i386-coreboot | mipsel-loongson)
        disk=ata0
        ;;
     powerpc-ieee1275)
diff --git a/tests/pata_test.in b/tests/pata_test.in
index 4d0e7d573..253a82d60 100644
--- a/tests/pata_test.in
+++ b/tests/pata_test.in
@@ -39,6 +39,9 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
        disk=hdb
        indisk=ata1
        ;;
+    # Test fails even though ata works. Disable for now
+    mips*-malta)
+       exit 77;;
 esac
 
 imgfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 99
diff --git a/tests/uhci_test.in b/tests/uhci_test.in
index de199a281..a8295a3cf 100644
--- a/tests/uhci_test.in
+++ b/tests/uhci_test.in
@@ -29,6 +29,9 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     # PLATFORM: no USB on ARC and qemu-mips platforms
     mips*-arc | mips*-qemu_mips)
        exit 77;;
+    # Not supported yet
+    mips*-malta)
+       exit 77;;
     # FIXME: No native drivers are available for those
     powerpc-ieee1275 | sparc64-ieee1275 | arm*-efi | loongarch64-efi)
        exit 77;;
diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in
index 15c5f45a5..369af2894 100644
--- a/tests/util/grub-shell.in
+++ b/tests/util/grub-shell.in
@@ -118,6 +118,14 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" 
in
        qemuopts="-M mips $qemuopts"
        console=vga_text
        ;;
+
+    mips-malta)
+       boot=malta
+       qemu=qemu-system-mips
+       qemuopts="-M malta $qemuopts"
+       console=
+       trim=1
+       ;;
     mips-arc)
        boot=cd
        qemu=qemu-system-mips64
@@ -141,6 +149,13 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" 
in
        qemuopts="-M mips $qemuopts"
        console=vga_text
        ;;
+    mipsel-malta)
+       boot=mipsel_malta
+       qemu=qemu-system-mipsel
+       qemuopts="-M malta $qemuopts"
+       console=
+       trim=1
+       ;;
     mipsel-loongson)
        boot=mipsel_fulong2e
        qemu=qemu-system-mips64el
@@ -421,7 +436,9 @@ for option in "$@"; do
        elif [ "$dev" = "qemu" ] ; then boot=qemu;
        elif [ "$dev" = "coreboot" ] ; then boot=coreboot;
        elif [ "$dev" = "mips_qemu" ] ; then boot=mips_qemu;
+       elif [ "$dev" = "mips_malta" ] ; then boot=mips_malta;
        elif [ "$dev" = "mipsel_qemu" ] ; then boot=mipsel_qemu;
+       elif [ "$dev" = "mipsel_malta" ] ; then boot=mipsel_malta;
        elif [ "$dev" = "mipsel_fulong2e" ] ; then boot=mipsel_fulong2e;
        else
            echo "Unrecognized boot method \`$dev'" 1>&2
@@ -585,6 +602,11 @@ if [ x$boot = xmipsel_qemu ]; then
     device="cdrom "
 fi
 
+if [ x$boot = xmipsel_malta ]; then
+    bootdev="-kernel ${rom_directory}/mipsel-malta.elf"
+    device="cdrom "
+fi
+
 if [ x$boot = xmipsel_fulong2e ]; then
     bootdev="-kernel ${rom_directory}/mipsel-loongson.elf -append 
machtype=lemote-fuloong-2e"
     device="cdrom "
@@ -595,6 +617,11 @@ if [ x$boot = xmips_qemu ]; then
     device="cdrom "
 fi
 
+if [ x$boot = xmips_malta ]; then
+    bootdev="-kernel ${rom_directory}/mips-malta.elf"
+    device="cdrom "
+fi
+
 if [ x$boot = xcoreboot ]; then
     imgfile="$work_directory/coreboot.img"
     cp "${GRUB_COREBOOT_ROM}" "${imgfile}"
diff --git a/util/grub-install-common.c b/util/grub-install-common.c
index 22bccb6a3..48d9d652d 100644
--- a/util/grub-install-common.c
+++ b/util/grub-install-common.c
@@ -916,6 +916,8 @@ static struct
     [GRUB_INSTALL_PLATFORM_I386_XEN_PVH] =     { "i386",        "xen_pvh"   },
     [GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON] =  { "mipsel",      "loongson"  },
     [GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS] = { "mipsel",      "qemu_mips" },
+    [GRUB_INSTALL_PLATFORM_MIPSEL_MALTA] = { "mipsel",      "malta" },
+    [GRUB_INSTALL_PLATFORM_MIPS_MALTA] =   { "mips",        "malta" },
     [GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS] =   { "mips",        "qemu_mips" },
     [GRUB_INSTALL_PLATFORM_MIPSEL_ARC] =       { "mipsel",      "arc"       },
     [GRUB_INSTALL_PLATFORM_MIPS_ARC] =         { "mips",        "arc"       },
diff --git a/util/grub-install.c b/util/grub-install.c
index 7dc5657bb..bf3caa60b 100644
--- a/util/grub-install.c
+++ b/util/grub-install.c
@@ -503,6 +503,8 @@ have_bootdev (enum grub_install_plat pl)
     case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
     case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
+    case GRUB_INSTALL_PLATFORM_MIPSEL_MALTA:
+    case GRUB_INSTALL_PLATFORM_MIPS_MALTA:
 
     case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
     case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
@@ -948,6 +950,8 @@ main (int argc, char *argv[])
     case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
     case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
+    case GRUB_INSTALL_PLATFORM_MIPSEL_MALTA:
+    case GRUB_INSTALL_PLATFORM_MIPS_MALTA:
       disk_module = xstrdup ("native");
       break;
 
@@ -987,6 +991,8 @@ main (int argc, char *argv[])
     case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
     case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
+    case GRUB_INSTALL_PLATFORM_MIPSEL_MALTA:
+    case GRUB_INSTALL_PLATFORM_MIPS_MALTA:
     case GRUB_INSTALL_PLATFORM_I386_XEN:
     case GRUB_INSTALL_PLATFORM_X86_64_XEN:
     case GRUB_INSTALL_PLATFORM_I386_XEN_PVH:
@@ -1535,6 +1541,8 @@ main (int argc, char *argv[])
                  case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
                  case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
                  case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
+                 case GRUB_INSTALL_PLATFORM_MIPSEL_MALTA:
+                 case GRUB_INSTALL_PLATFORM_MIPS_MALTA:
                    g = grub_util_guess_baremetal_drive (*curdev);
                    break;
                  case GRUB_INSTALL_PLATFORM_MIPS_ARC:
@@ -1623,6 +1631,8 @@ main (int argc, char *argv[])
     case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
     case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
+    case GRUB_INSTALL_PLATFORM_MIPSEL_MALTA:
+    case GRUB_INSTALL_PLATFORM_MIPS_MALTA:
       core_name = "core.elf";
       snprintf (mkimage_target, sizeof (mkimage_target),
                "%s-%s-elf",
@@ -1734,6 +1744,8 @@ main (int argc, char *argv[])
     case GRUB_INSTALL_PLATFORM_I386_XEN:
     case GRUB_INSTALL_PLATFORM_X86_64_XEN:
     case GRUB_INSTALL_PLATFORM_I386_XEN_PVH:
+    case GRUB_INSTALL_PLATFORM_MIPSEL_MALTA:
+    case GRUB_INSTALL_PLATFORM_MIPS_MALTA:
       break;
       /* pacify warning.  */
     case GRUB_INSTALL_PLATFORM_MAX:
@@ -2025,6 +2037,8 @@ main (int argc, char *argv[])
     case GRUB_INSTALL_PLATFORM_I386_XEN:
     case GRUB_INSTALL_PLATFORM_X86_64_XEN:
     case GRUB_INSTALL_PLATFORM_I386_XEN_PVH:
+    case GRUB_INSTALL_PLATFORM_MIPSEL_MALTA:
+    case GRUB_INSTALL_PLATFORM_MIPS_MALTA:
       grub_util_warn ("%s",
                      _("WARNING: no platform-specific install was performed"));
       break;
diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c
index 6dc71a8a1..82b9c247e 100644
--- a/util/grub-mkrescue.c
+++ b/util/grub-mkrescue.c
@@ -967,6 +967,7 @@ main (int argc, char *argv[])
 
   grub_install_push_module ("pata");
   make_image (GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS, "mipsel-qemu_mips-elf", 
"roms/mipsel-qemu_mips.elf");
+  make_image (GRUB_INSTALL_PLATFORM_MIPSEL_MALTA, "mipsel-malta-elf", 
"roms/mipsel-malta.elf");
 
   make_image (GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON, "mipsel-loongson-elf", 
"loongson.elf");
 
@@ -974,6 +975,7 @@ main (int argc, char *argv[])
   make_image (GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON, "mipsel-fuloong2f-flash", 
"mipsel-fuloong2f.bin");
 
   make_image (GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS, "mips-qemu_mips-elf", 
"roms/mips-qemu_mips.elf");
+  make_image (GRUB_INSTALL_PLATFORM_MIPS_MALTA, "mips-malta-elf", 
"roms/mips-malta.elf");
 
   grub_install_push_module ("at_keyboard");
 
@@ -1001,6 +1003,8 @@ main (int argc, char *argv[])
            {GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS, "roms/mips-qemu_mips.elf", 
"mips-qemu_mips.elf"},
            {GRUB_INSTALL_PLATFORM_I386_QEMU, "roms/qemu.img", "qemu.img"},
            {GRUB_INSTALL_PLATFORM_I386_COREBOOT, "roms/coreboot.elf", 
"coreboot.elf"},
+           {GRUB_INSTALL_PLATFORM_MIPS_MALTA, "roms/mips-malta.elf", 
"mips-malta.elf"},
+           {GRUB_INSTALL_PLATFORM_MIPSEL_MALTA, "roms/mipsel-malta.elf", 
"mipsel-malta.elf"},
          };
       grub_size_t i;
       for (i = 0; i < ARRAY_SIZE (roms); i++)
diff --git a/util/grub-module-verifier.c b/util/grub-module-verifier.c
index 91d9e8f88..6ac7f9b80 100644
--- a/util/grub-module-verifier.c
+++ b/util/grub-module-verifier.c
@@ -226,8 +226,10 @@ static struct platform_whitelist whitelists[] = {
   /* video is compiled-in on MIPS.  */
   {"mipsel", "loongson", (const char *[]) {"all_video", 0}},
   {"mipsel", "qemu_mips", (const char *[]) {"all_video", 0}},
+  {"mipsel", "malta", (const char *[]) {"all_video", 0}},
   {"mipsel", "arc", (const char *[]) {"all_video", 0}},
   {"mips", "qemu_mips", (const char *[]) {"all_video", 0}},
+  {"mips", "malta", (const char *[]) {"all_video", 0}},
   {"mips", "arc", (const char *[]) {"all_video", 0}},
 };
 
diff --git a/util/mkimage.c b/util/mkimage.c
index b46df2909..b72c25814 100644
--- a/util/mkimage.c
+++ b/util/mkimage.c
@@ -461,6 +461,24 @@ static const struct grub_install_image_target_desc 
image_targets[] =
       .link_align = GRUB_KERNEL_MIPS_ARC_LINK_ALIGN,
       .default_compression = GRUB_COMPRESSION_NONE
     },
+    {
+      .dirname = "mipsel-malta",
+      .names = { "mipsel-malta-elf", NULL },
+      .voidp_sizeof = 4,
+      .bigendian = 0,
+      .id = IMAGE_LOONGSON_ELF,
+      .flags = PLATFORM_FLAGS_DECOMPRESSORS,
+      .total_module_size = GRUB_KERNEL_MIPS_MALTA_TOTAL_MODULE_SIZE,
+      .decompressor_compressed_size = 
GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE,
+      .decompressor_uncompressed_size = 
GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE,
+      .decompressor_uncompressed_addr = 
GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR,
+      .section_align = 1,
+      .vaddr_offset = 0,
+      .link_addr = GRUB_KERNEL_MIPS_MALTA_LINK_ADDR,
+      .elf_target = EM_MIPS,
+      .link_align = GRUB_KERNEL_MIPS_MALTA_LINK_ALIGN,
+      .default_compression = GRUB_COMPRESSION_NONE
+    },
     {
       .dirname = "mipsel-qemu_mips",
       .names = { "mipsel-qemu_mips-elf", NULL },
@@ -533,6 +551,24 @@ static const struct grub_install_image_target_desc 
image_targets[] =
       .link_align = GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ALIGN,
       .default_compression = GRUB_COMPRESSION_NONE
     },
+    {
+      .dirname = "mips-malta",
+      .names = { "mips-malta-elf", NULL },
+      .voidp_sizeof = 4,
+      .bigendian = 1,
+      .id = IMAGE_LOONGSON_ELF,
+      .flags = PLATFORM_FLAGS_DECOMPRESSORS,
+      .total_module_size = GRUB_KERNEL_MIPS_MALTA_TOTAL_MODULE_SIZE,
+      .decompressor_compressed_size = 
GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE,
+      .decompressor_uncompressed_size = 
GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE,
+      .decompressor_uncompressed_addr = 
GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR,
+      .section_align = 1,
+      .vaddr_offset = 0,
+      .link_addr = GRUB_KERNEL_MIPS_MALTA_LINK_ADDR,
+      .elf_target = EM_MIPS,
+      .link_align = GRUB_KERNEL_MIPS_MALTA_LINK_ALIGN,
+      .default_compression = GRUB_COMPRESSION_NONE
+    },
     {
       .dirname = "arm-uboot",
       .names = { "arm-uboot", NULL },
-- 
2.49.0


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to