mirror of
https://src.fedoraproject.org/rpms/grub2.git
synced 2024-11-24 22:35:28 +00:00
328 lines
13 KiB
Diff
328 lines
13 KiB
Diff
|
From 4e07feae1975db4c63edc00734287d53d3a5fc72 Mon Sep 17 00:00:00 2001
|
||
|
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
|
||
|
Date: Thu, 25 Apr 2013 22:42:35 +0200
|
||
|
Subject: [PATCH 352/471] Enable mipsel-arc.
|
||
|
|
||
|
---
|
||
|
ChangeLog | 4 ++++
|
||
|
configure.ac | 20 +++++++++++++++++++-
|
||
|
grub-core/Makefile.core.def | 10 +++-------
|
||
|
grub-core/disk/arc/arcdisk.c | 4 ++++
|
||
|
include/grub/mips/arc/memory.h | 4 ++++
|
||
|
include/grub/offsets.h | 6 +++++-
|
||
|
tests/grub_cmd_date.in | 3 ++-
|
||
|
tests/partmap_test.in | 4 ++++
|
||
|
tests/util/grub-shell.in | 9 +++++++++
|
||
|
util/grub-mkimage.c | 30 ++++++++++++++++++++++++++++--
|
||
|
util/grub-mkrescue.in | 8 ++++++++
|
||
|
11 files changed, 90 insertions(+), 12 deletions(-)
|
||
|
|
||
|
diff --git a/ChangeLog b/ChangeLog
|
||
|
index 7f2c4dd..0bc5cc4 100644
|
||
|
--- a/ChangeLog
|
||
|
+++ b/ChangeLog
|
||
|
@@ -1,5 +1,9 @@
|
||
|
2013-04-25 Vladimir Serbinenko <phcoder@gmail.com>
|
||
|
|
||
|
+ Enable mipsel-arc.
|
||
|
+
|
||
|
+2013-04-25 Vladimir Serbinenko <phcoder@gmail.com>
|
||
|
+
|
||
|
Add serial on ARC platform.
|
||
|
|
||
|
2013-04-25 Vladimir Serbinenko <phcoder@gmail.com>
|
||
|
diff --git a/configure.ac b/configure.ac
|
||
|
index ca180c6..4af1a03 100644
|
||
|
--- a/configure.ac
|
||
|
+++ b/configure.ac
|
||
|
@@ -145,6 +145,7 @@ case "$target_cpu"-"$platform" in
|
||
|
mips-qemu_mips) ;;
|
||
|
mips-qemu-mips) platform=qemu_mips;;
|
||
|
mips-arc) ;;
|
||
|
+ mipsel-arc) ;;
|
||
|
mipsel-qemu_mips) ;;
|
||
|
mipsel-qemu-mips) platform=qemu_mips;;
|
||
|
mipsel-yeeloong) platform=loongson ;;
|
||
|
@@ -198,6 +199,23 @@ else
|
||
|
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,` -DGRUB_TARGET_CPU_`echo ${target_cpu} | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`=1"
|
||
|
fi
|
||
|
|
||
|
+case "${target_cpu}-$platform" in
|
||
|
+ mips-arc)
|
||
|
+ TARGET_LINK_ADDR=0x88200000
|
||
|
+ TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000
|
||
|
+ ;;
|
||
|
+ mipsel-arc)
|
||
|
+ TARGET_LINK_ADDR=0x80700000
|
||
|
+ TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000
|
||
|
+ ;;
|
||
|
+ mips*-qemu_mips | mips-loongson)
|
||
|
+ TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000
|
||
|
+ ;;
|
||
|
+esac
|
||
|
+
|
||
|
+AC_SUBST(TARGET_LINK_ADDR)
|
||
|
+AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR)
|
||
|
+
|
||
|
TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS"
|
||
|
|
||
|
AC_SUBST(host_cpu)
|
||
|
@@ -1146,7 +1164,7 @@ AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform =
|
||
|
AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
|
||
|
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_arc], [test x$target_cpu = xmips -a x$platform = xarc])
|
||
|
+AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc])
|
||
|
AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
|
||
|
AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
|
||
|
AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
|
||
|
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
|
||
|
index cdef5b4..ad912a6 100644
|
||
|
--- a/grub-core/Makefile.core.def
|
||
|
+++ b/grub-core/Makefile.core.def
|
||
|
@@ -73,7 +73,7 @@ kernel = {
|
||
|
mips_loongson_ldflags = '-Wl,-Ttext,0x80200000';
|
||
|
powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
|
||
|
sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400';
|
||
|
- mips_arc_ldflags = '-Wl,-Ttext,0x88200000';
|
||
|
+ mips_arc_ldflags = '-Wl,-Ttext,$(TARGET_LINK_ADDR)';
|
||
|
mips_qemu_mips_ldflags = '-Wl,-Ttext,0x80200000';
|
||
|
|
||
|
mips_loongson_cppflags = '-DUSE_ASCII_FAILBACK';
|
||
|
@@ -370,9 +370,7 @@ image = {
|
||
|
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1';
|
||
|
|
||
|
objcopyflags = '-O binary';
|
||
|
- mips_loongson_ldflags = '-static-libgcc -Wl,-Ttext,0x80100000';
|
||
|
- mips_qemu_mips_ldflags = '-static-libgcc -Wl,-Ttext,0x80100000';
|
||
|
- mips_arc_ldflags = '-static-libgcc -Wl,-Ttext,0x88100000';
|
||
|
+ mips_ldflags = '-static-libgcc -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
||
|
ldadd = '-lgcc';
|
||
|
cflags = '-Wno-unreachable-code -static-libgcc';
|
||
|
enable = mips;
|
||
|
@@ -386,9 +384,7 @@ image = {
|
||
|
cppflags = '-DGRUB_EMBED_DECOMPRESSOR=1';
|
||
|
|
||
|
objcopyflags = '-O binary';
|
||
|
- mips_loongson_ldflags = '-static-libgcc -Wl,-Ttext,0x80100000';
|
||
|
- mips_qemu_mips_ldflags = '-static-libgcc -Wl,-Ttext,0x80100000';
|
||
|
- mips_arc_ldflags = '-static-libgcc -Wl,-Ttext,0x88100000';
|
||
|
+ mips_ldflags = '-static-libgcc -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
||
|
ldadd = '-lgcc';
|
||
|
cflags = '-static-libgcc';
|
||
|
enable = mips;
|
||
|
diff --git a/grub-core/disk/arc/arcdisk.c b/grub-core/disk/arc/arcdisk.c
|
||
|
index 9aefb7c..0cc1993 100644
|
||
|
--- a/grub-core/disk/arc/arcdisk.c
|
||
|
+++ b/grub-core/disk/arc/arcdisk.c
|
||
|
@@ -113,7 +113,11 @@ grub_arcdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
||
|
return grub_arc_iterate_devs (grub_arcdisk_iterate_iter, &ctx, 1);
|
||
|
}
|
||
|
|
||
|
+#ifdef GRUB_CPU_MIPSEL
|
||
|
+#define RAW_SUFFIX "partition(0)"
|
||
|
+#else
|
||
|
#define RAW_SUFFIX "partition(10)"
|
||
|
+#endif
|
||
|
|
||
|
static grub_err_t
|
||
|
reopen (const char *name, int writable)
|
||
|
diff --git a/include/grub/mips/arc/memory.h b/include/grub/mips/arc/memory.h
|
||
|
index 68b425f..77bb03d 100644
|
||
|
--- a/include/grub/mips/arc/memory.h
|
||
|
+++ b/include/grub/mips/arc/memory.h
|
||
|
@@ -19,7 +19,11 @@
|
||
|
#ifndef GRUB_MEMORY_MACHINE_HEADER
|
||
|
#define GRUB_MEMORY_MACHINE_HEADER 1
|
||
|
|
||
|
+#ifdef GRUB_CPU_MIPSEL
|
||
|
+#define GRUB_MACHINE_MEMORY_STACK_HIGH 0x806ffff0
|
||
|
+#else
|
||
|
#define GRUB_MACHINE_MEMORY_STACK_HIGH 0x881ffff0
|
||
|
+#endif
|
||
|
|
||
|
#ifndef ASM_FILE
|
||
|
|
||
|
diff --git a/include/grub/offsets.h b/include/grub/offsets.h
|
||
|
index 1e673d5..c5ef79f 100644
|
||
|
--- a/include/grub/offsets.h
|
||
|
+++ b/include/grub/offsets.h
|
||
|
@@ -81,7 +81,7 @@
|
||
|
#define GRUB_KERNEL_MIPS_QEMU_MIPS_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
|
||
|
|
||
|
#define GRUB_DECOMPRESSOR_MIPS_ARC_COMPRESSED_SIZE 0x8
|
||
|
@@ -125,7 +125,11 @@
|
||
|
|
||
|
#define GRUB_BOOT_MACHINE_KERNEL_SEG GRUB_OFFSETS_CONCAT (GRUB_BOOT_, GRUB_MACHINE, _KERNEL_SEG)
|
||
|
#define GRUB_MEMORY_MACHINE_UPPER GRUB_OFFSETS_CONCAT (GRUB_MEMORY_, GRUB_MACHINE, _UPPER)
|
||
|
+#if defined (GRUB_MACHINE_ARC) && defined (GRUB_CPU_MIPSEL)
|
||
|
+#define GRUB_MACHINE_LINK_ADDR GRUB_KERNEL_MIPSEL_ARC_LINK_ADDR
|
||
|
+#else
|
||
|
#define GRUB_MACHINE_LINK_ADDR GRUB_OFFSETS_CONCAT (GRUB_KERNEL_, GRUB_MACHINE, _LINK_ADDR)
|
||
|
+#endif
|
||
|
|
||
|
#define GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE GRUB_OFFSETS_CONCAT (GRUB_DECOMPRESSOR_, GRUB_MACHINE, _COMPRESSED_SIZE)
|
||
|
#define GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE GRUB_OFFSETS_CONCAT (GRUB_DECOMPRESSOR_, GRUB_MACHINE, _UNCOMPRESSED_SIZE)
|
||
|
diff --git a/tests/grub_cmd_date.in b/tests/grub_cmd_date.in
|
||
|
index 76436a0..effc82a 100644
|
||
|
--- a/tests/grub_cmd_date.in
|
||
|
+++ b/tests/grub_cmd_date.in
|
||
|
@@ -4,7 +4,8 @@ set -e
|
||
|
. "@builddir@/grub-core/modinfo.sh"
|
||
|
|
||
|
# OpenBIOS on sparc64 doesn't implement RTC
|
||
|
-if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = sparc64-ieee1275 ]; then
|
||
|
+# mipsel-arc QEMU emulated RTC doesn't play well with firmware
|
||
|
+if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = sparc64-ieee1275 ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = mipsel-arc ]; then
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
diff --git a/tests/partmap_test.in b/tests/partmap_test.in
|
||
|
index 0dea98a..ee23f7f 100644
|
||
|
--- a/tests/partmap_test.in
|
||
|
+++ b/tests/partmap_test.in
|
||
|
@@ -81,6 +81,10 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
|
||
|
mips-arc)
|
||
|
# ARC firmware has bugs which prevent it from accessing hard disk w/o dvh disklabel.
|
||
|
exit 0 ;;
|
||
|
+ mipsel-arc)
|
||
|
+ disk=arc/scsi0/disk0/rdisk0
|
||
|
+ qemudisk=hda
|
||
|
+ ;;
|
||
|
*)
|
||
|
disk=hd0
|
||
|
qemudisk=hda
|
||
|
diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in
|
||
|
index b051669..ccea332 100644
|
||
|
--- a/tests/util/grub-shell.in
|
||
|
+++ b/tests/util/grub-shell.in
|
||
|
@@ -92,6 +92,15 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
|
||
|
console=console
|
||
|
trim=1
|
||
|
;;
|
||
|
+ mipsel-arc)
|
||
|
+ boot=cd
|
||
|
+ qemu=qemu-system-mips64el
|
||
|
+ qemuopts="$qemuopts -M magnum -no-reboot"
|
||
|
+ serial_port=arc/multi0/serial0
|
||
|
+ console=console
|
||
|
+ halt_cmd=reboot
|
||
|
+ trim=1
|
||
|
+ ;;
|
||
|
mipsel-qemu_mips)
|
||
|
boot=mipsel_qemu
|
||
|
qemu=qemu-system-mipsel
|
||
|
diff --git a/util/grub-mkimage.c b/util/grub-mkimage.c
|
||
|
index 41f795a..7edf77a 100644
|
||
|
--- a/util/grub-mkimage.c
|
||
|
+++ b/util/grub-mkimage.c
|
||
|
@@ -400,6 +400,24 @@ struct image_target_desc image_targets[] =
|
||
|
.default_compression = COMPRESSION_NONE
|
||
|
},
|
||
|
{
|
||
|
+ .dirname = "mipsel-arc",
|
||
|
+ .names = {"mipsel-arc", NULL},
|
||
|
+ .voidp_sizeof = 4,
|
||
|
+ .bigendian = 0,
|
||
|
+ .id = IMAGE_MIPS_ARC,
|
||
|
+ .flags = PLATFORM_FLAGS_DECOMPRESSORS,
|
||
|
+ .total_module_size = GRUB_KERNEL_MIPS_ARC_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_MIPSEL_ARC_LINK_ADDR,
|
||
|
+ .elf_target = EM_MIPS,
|
||
|
+ .link_align = GRUB_KERNEL_MIPS_ARC_LINK_ALIGN,
|
||
|
+ .default_compression = COMPRESSION_NONE
|
||
|
+ },
|
||
|
+ {
|
||
|
.dirname = "mipsel-qemu_mips",
|
||
|
.names = { "mipsel-qemu_mips-elf", NULL },
|
||
|
.voidp_sizeof = 4,
|
||
|
@@ -1530,11 +1548,14 @@ generate_image (const char *dir, const char *prefix,
|
||
|
grub_memset (ecoff_img, 0, program_size + sizeof (*head) + sizeof (*section));
|
||
|
head = (void *) ecoff_img;
|
||
|
section = (void *) (head + 1);
|
||
|
- head->magic = grub_host_to_target16 (0x160);
|
||
|
+ head->magic = image_target->bigendian ? grub_host_to_target16 (0x160)
|
||
|
+ : grub_host_to_target16 (0x166);
|
||
|
head->nsec = grub_host_to_target16 (1);
|
||
|
head->time = grub_host_to_target32 (0);
|
||
|
head->opt = grub_host_to_target16 (0x38);
|
||
|
- head->flags = grub_host_to_target16 (0x207);
|
||
|
+ head->flags = image_target->bigendian
|
||
|
+ ? grub_host_to_target16 (0x207)
|
||
|
+ : grub_host_to_target16 (0x103);
|
||
|
head->magic2 = grub_host_to_target16 (0x107);
|
||
|
head->textsize = grub_host_to_target32 (program_size);
|
||
|
head->entry = grub_host_to_target32 (target_addr);
|
||
|
@@ -1544,6 +1565,11 @@ generate_image (const char *dir, const char *prefix,
|
||
|
section->vaddr = grub_host_to_target32 (target_addr);
|
||
|
section->size = grub_host_to_target32 (program_size);
|
||
|
section->file_offset = grub_host_to_target32 (sizeof (*head) + sizeof (*section));
|
||
|
+ if (!image_target->bigendian)
|
||
|
+ {
|
||
|
+ section->paddr = grub_host_to_target32 (0xaa60);
|
||
|
+ section->flags = grub_host_to_target32 (0x20);
|
||
|
+ }
|
||
|
memcpy (section + 1, core_img, core_size);
|
||
|
free (core_img);
|
||
|
core_img = ecoff_img;
|
||
|
diff --git a/util/grub-mkrescue.in b/util/grub-mkrescue.in
|
||
|
index 78d4bec..51e75e8 100644
|
||
|
--- a/util/grub-mkrescue.in
|
||
|
+++ b/util/grub-mkrescue.in
|
||
|
@@ -46,6 +46,7 @@ efi64_dir="${libdir}/@PACKAGE@/x86_64-efi"
|
||
|
ia64_dir="${libdir}/@PACKAGE@/ia64-efi"
|
||
|
sparc64_dir="${libdir}/@PACKAGE@/sparc64-ieee1275"
|
||
|
arcs_dir="${libdir}/@PACKAGE@/mips-arc"
|
||
|
+arc_dir="${libdir}/@PACKAGE@/mipsel-arc"
|
||
|
ppc_dir="${libdir}/@PACKAGE@/powerpc-ieee1275"
|
||
|
rom_directory=
|
||
|
override_dir=
|
||
|
@@ -325,6 +326,9 @@ if [ "${override_dir}" = "" ] ; then
|
||
|
if test -e "${arcs_dir}" ; then
|
||
|
process_input_dir "${arcs_dir}" mips-arc
|
||
|
fi
|
||
|
+ if test -e "${arc_dir}" ; then
|
||
|
+ process_input_dir "${arc_dir}" mipsel-arc
|
||
|
+ fi
|
||
|
else
|
||
|
. "${override_dir}"/modinfo.sh
|
||
|
process_input_dir "${override_dir}" ${grub_modinfo_target_cpu}-${grub_modinfo_platform}
|
||
|
@@ -342,6 +346,7 @@ else
|
||
|
i386_ieee1275_dir=
|
||
|
sparc64_dir=
|
||
|
arcs_dir=
|
||
|
+ arc_dir=
|
||
|
case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
|
||
|
i386-multiboot) multiboot_dir="${override_dir}" ;;
|
||
|
i386-coreboot) coreboot_dir="${override_dir}" ;;
|
||
|
@@ -356,6 +361,7 @@ else
|
||
|
powerpc-ieee1275) ppc_dir="${override_dir}"; system_area=common ;;
|
||
|
sparc64-ieee1275) sparc64_dir="${override_dir}"; system_area=sparc64 ;;
|
||
|
mips-arc) arcs_dir="${override_dir}"; system_area=arcs ;;
|
||
|
+ mipsel-arc) arc_dir="${override_dir}" ;;
|
||
|
i386-ieee1275) i386_ieee1275_dir="${override_dir}" ;;
|
||
|
esac
|
||
|
fi
|
||
|
@@ -491,6 +497,8 @@ if [ -e "${iso9660_dir}/boot/grub/mips-arc/core.img" ] && [ "$system_area" = arc
|
||
|
grub_mkisofs_arguments="${grub_mkisofs_arguments} -mips-boot /boot/grub/mips-arc/sashARCS -mips-boot /boot/grub/mips-arc/sash -mips-boot /boot/grub/mips-arc/grub"
|
||
|
fi
|
||
|
|
||
|
+make_image "${arc_dir}" mipsel-arc "${iso9660_dir}/boot/grub/arc.exe" ""
|
||
|
+
|
||
|
make_image "${mipsel_qemu_dir}" mipsel-qemu_mips-elf "${iso9660_dir}/boot/grub/roms/mipsel-qemu_mips.elf" "pata"
|
||
|
if [ -e "${iso9660_dir}/boot/grub/roms/mipsel-qemu_mips.elf" ] && [ -d "${rom_directory}" ]; then
|
||
|
cp "${iso9660_dir}/boot/grub/roms/mipsel-qemu_mips.elf" "${rom_directory}/mipsel-qemu_mips.elf"
|
||
|
--
|
||
|
1.8.2.1
|
||
|
|