All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Serbinenko <phcoder@gmail.com>
To: grub-devel@gnu.org
Cc: Vladimir Serbinenko <phcoder@gmail.com>
Subject: [PATCH 1/2] Add support for qemu emulation of malta board
Date: Sat, 29 Mar 2025 03:05:54 +0300	[thread overview]
Message-ID: <20250329000604.287217-1-phcoder@gmail.com> (raw)

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	other threads:[~2025-03-29  0:07 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-29  0:05 Vladimir Serbinenko [this message]
2025-03-29  0:05 ` [PATCH 2/2] Remove qemu_mips port Vladimir Serbinenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250329000604.287217-1-phcoder@gmail.com \
    --to=phcoder@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.