All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Vladimir 'φ-coder/phcoder' Serbinenko" <phcoder@gmail.com>
To: Leif Lindholm <leif.lindholm@linaro.org>,
	 The development of GRUB 2 <grub-devel@gnu.org>
Subject: Re: [PATCH 4/7] Support for ARM/U-Boot platforms
Date: Tue, 09 Apr 2013 14:45:36 +0200	[thread overview]
Message-ID: <51640D70.7040801@gmail.com> (raw)
In-Reply-To: <20130409113927.GX23069@rocoto.smurfnet.nu>


[-- Attachment #1.1: Type: text/plain, Size: 187 bytes --]

Here is what I have in my local tree (full patch). Contains also an
initial attempt at i386-uboot but given sorry state of uboot on i386,
I'll probably abandon it instead of finishing

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: q.diff --]
[-- Type: text/x-diff; name="q.diff", Size: 36224 bytes --]

=== modified file 'Makefile.util.def'
--- Makefile.util.def	2013-04-07 00:41:07 +0000
+++ Makefile.util.def	2013-04-09 12:14:38 +0000
@@ -150,7 +150,7 @@
   common = util/resolve.c;
   common = grub-core/kern/emu/argp_common.c;
 
-  arm = grub-core/kern/arm/dl.c;
+  common = grub-core/kern/arm/dl.c;
 
   extra_dist = util/grub-mkimagexx.c;
 
@@ -472,7 +472,6 @@
   enable = mips_loongson;
   enable = ia64_efi;
   enable = powerpc_ieee1275;
-  enable = arm_uboot;
 };
 
 script = {

=== modified file 'conf/Makefile.common'
--- conf/Makefile.common	2013-04-07 00:41:07 +0000
+++ conf/Makefile.common	2013-04-07 16:08:07 +0000
@@ -40,8 +40,7 @@
 if COND_arm
 # Image entry point always in ARM (A32) state - ensure proper functionality if
 # the rest is built for the Thumb (T32) state.
-  CFLAGS_PLATFORM += -mthumb-interwork -mno-unaligned-access -mlong-calls
-  CCASFLAGS_PLATFORM = -Wa,-mimplicit-it=thumb
+  CFLAGS_PLATFORM += -mthumb-interwork -march=armv6 -mlong-calls
   LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache
 endif
 

=== modified file 'configure.ac'
--- configure.ac	2013-04-07 00:41:07 +0000
+++ configure.ac	2013-04-08 21:48:08 +0000
@@ -141,6 +141,7 @@
   i386-linuxbios) platform=coreboot ;;
   i386-ieee1275) ;;
   i386-qemu) ;;
+  i386-uboot) ;;
   powerpc-ieee1275) ;;
   sparc64-ieee1275) ;;
   ia64-efi) ;;
@@ -717,7 +718,7 @@
 fi
 
 # Check for libgcc symbols
-AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x __udivsi3 __umoddi3 __udivdi3 __divsi3 __modsi3 __umodsi3 __moddi3 __divdi3 __ctzdi2 __ctzsi2)
+AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x __udivsi3 __umoddi3 __udivdi3 __divsi3 __modsi3 __umodsi3 __moddi3 __divdi3 __ctzdi2 __ctzsi2 __aeabi_ulcmp)
 
 if test "x$TARGET_APPLE_CC" = x1 ; then
 CFLAGS="$TARGET_CFLAGS -nostdlib"
@@ -1149,6 +1150,7 @@
 AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
 AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
 AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
+AM_CONDITIONAL([COND_i386_uboot], [test x$target_cpu = xi386 -a x$platform = xuboot])
 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])

=== modified file 'gentpl.py'
--- gentpl.py	2013-04-07 00:41:07 +0000
+++ gentpl.py	2013-04-08 23:20:22 +0000
@@ -20,7 +20,8 @@
 #
 
 GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot",
-                   "i386_multiboot", "i386_ieee1275", "x86_64_efi",
+                   "i386_multiboot", "i386_ieee1275", "i386_uboot",
+                   "x86_64_efi",
                    "mips_loongson", "sparc64_ieee1275",
                    "powerpc_ieee1275", "mips_arc", "ia64_efi",
                    "mips_qemu_mips", "arm_uboot", "arm_efi" ]
@@ -30,7 +31,7 @@
 GROUPS["common"]   = GRUB_PLATFORMS[:]
 
 # Groups based on CPU
-GROUPS["i386"]     = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275" ]
+GROUPS["i386"]     = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275", "i386_uboot" ]
 GROUPS["x86_64"]   = [ "x86_64_efi" ]
 GROUPS["x86"]      = GROUPS["i386"] + GROUPS["x86_64"]
 GROUPS["mips"]     = [ "mips_loongson", "mips_qemu_mips", "mips_arc" ]
@@ -41,7 +42,7 @@
 # Groups based on firmware
 GROUPS["efi"]  = [ "i386_efi", "x86_64_efi", "ia64_efi", "arm_efi" ]
 GROUPS["ieee1275"]   = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ]
-GROUPS["uboot"] = [ "arm_uboot" ]
+GROUPS["uboot"] = [ "arm_uboot", "i386_uboot" ]
 
 # emu is a special case so many core functionality isn't needed on this platform
 GROUPS["noemu"]   = GRUB_PLATFORMS[:]; GROUPS["noemu"].remove("emu")
@@ -64,7 +65,7 @@
 for i in GROUPS["terminfoinkernel"]: GROUPS["terminfomodule"].remove(i)
 
 # Flattened Device Trees (FDT)
-GROUPS["fdt"] = [ "arm_uboot", "arm_efi" ]
+GROUPS["fdt"] = [ "arm_uboot", "arm_efi", "i386_uboot" ]
 
 # Miscelaneous groups schedulded to disappear in future
 GROUPS["i386_coreboot_multiboot_qemu"] = ["i386_coreboot", "i386_multiboot", "i386_qemu"]

=== modified file 'grub-core/Makefile.am'
--- grub-core/Makefile.am	2013-04-07 00:41:07 +0000
+++ grub-core/Makefile.am	2013-04-08 23:41:09 +0000
@@ -132,6 +132,15 @@
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
 endif
 
+if COND_i386_uboot
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/uboot.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/disk.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
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
+endif
+
 if COND_x86_64_efi
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h

=== modified file 'grub-core/Makefile.core.def'
--- grub-core/Makefile.core.def	2013-04-07 00:41:07 +0000
+++ grub-core/Makefile.core.def	2013-04-09 00:05:56 +0000
@@ -79,6 +79,7 @@
   i386_ieee1275_startup = kern/i386/ieee1275/startup.S;
   i386_coreboot_startup = kern/i386/coreboot/startup.S;
   i386_multiboot_startup = kern/i386/coreboot/startup.S;
+  i386_uboot_startup = kern/i386/uboot/startup.S;
   mips_startup = kern/mips/startup.S;
   sparc64_ieee1275_startup = kern/sparc64/ieee1275/crt0.S;
   powerpc_ieee1275_startup = kern/powerpc/ieee1275/startup.S;
@@ -492,6 +493,7 @@
   enable = i386_ieee1275;
   enable = i386_coreboot;
   enable = i386_multiboot;
+  enable = i386_uboot;
 };
 
 module = {
@@ -569,11 +571,13 @@
   i386_pc = commands/i386/pc/acpi.c;
   i386_coreboot = commands/i386/pc/acpi.c;
   i386_multiboot = commands/i386/pc/acpi.c;
+  i386_uboot = commands/i386/pc/acpi.c;
 
   enable = efi;
   enable = i386_pc;
   enable = i386_coreboot;
   enable = i386_multiboot;
+  enable = i386_uboot;
 };
 
 module = {
@@ -1057,6 +1061,8 @@
   i386_multiboot = efiemu/i386/pc/cfgtables.c;
   i386_ieee1275 = efiemu/i386/nocfgtables.c;
   i386_qemu = efiemu/i386/nocfgtables.c;
+  i386_uboot = efiemu/i386/pc/cfgtables.c;
+
   common = efiemu/mm.c;
   common = efiemu/loadcore_common.c;
   common = efiemu/symbols.c;
@@ -1077,6 +1083,7 @@
   enable = i386_ieee1275;
   enable = i386_multiboot;
   enable = i386_qemu;
+  enable = i386_uboot;
 };
 
 module = {
@@ -1656,6 +1663,7 @@
 
   enable = terminfomodule;
   enable = ieee1275;
+  enable = i386_uboot;
 };
 
 module = {

=== modified file 'grub-core/disk/uboot/ubootdisk.c'
--- grub-core/disk/uboot/ubootdisk.c	2013-04-07 00:41:07 +0000
+++ grub-core/disk/uboot/ubootdisk.c	2013-04-08 08:34:08 +0000
@@ -246,7 +246,7 @@
   grub_dprintf ("ubootdisk", "(%s) blocksize=%d, log_sector_size=%d\n",
 		disk->name, d->block_size, disk->log_sector_size);
 
-  disk->total_sectors = GRUB_DISK_SIZE_UNKNOWN;
+  disk->total_sectors = devinfo->di_stor.block_count;
   disk->data = d;
 
   return GRUB_ERR_NONE;

=== modified file 'grub-core/kern/arm/dl.c'
--- grub-core/kern/arm/dl.c	2013-04-07 00:41:07 +0000
+++ grub-core/kern/arm/dl.c	2013-04-09 11:44:28 +0000
@@ -23,17 +23,11 @@
 #include <grub/err.h>
 #include <grub/mm.h>
 #include <grub/i18n.h>
+#include <grub/arm/reloc.h>
 
 #ifdef GRUB_UTIL
 # include <grub/util/misc.h>
 #else
-# if !defined(__thumb2__)
-#  error "Relocations not implemented for A32 ("ARM") instruction set yet!"
-# endif
-
-grub_err_t reloc_jump24 (grub_uint32_t *addr, Elf32_Addr sym_addr);
-grub_err_t reloc_thm_call (grub_uint16_t *addr, Elf32_Addr sym_addr);
-grub_err_t reloc_thm_jump19 (grub_uint16_t *addr, Elf32_Addr sym_addr);
 
 #ifdef DL_DEBUG
 static const char *symstrtab;
@@ -104,7 +98,7 @@
  *   B.W, BL and BLX
  */
 grub_err_t
-reloc_thm_call (grub_uint16_t *target, Elf32_Addr sym_addr)
+grub_arm_reloc_thm_call (grub_uint16_t *target, Elf32_Addr sym_addr)
 {
   grub_int32_t offset, offset_low, offset_high;
   grub_uint32_t sign, j1, j2, is_blx;
@@ -122,14 +116,8 @@
 
   /* If BLX, target symbol must be ARM (target address LSB == 0) */
   if (is_blx && (sym_addr & 1))
-    {
-#ifndef GRUB_UTIL
-      return grub_error
-	(GRUB_ERR_BUG, N_("Relocation targeting wrong execution state"));
-#else
-      grub_util_error ("Relocation targeting wrong execution state");
-#endif
-    }
+    return grub_error (GRUB_ERR_BUG,
+		       N_("Relocation targeting wrong execution state"));
 
   offset_low = -16777216;
   offset_high = is_blx ? 16777212 : 16777214;
@@ -159,18 +147,12 @@
 #endif
 
   if ((offset < offset_low) || (offset > offset_high))
-    {
-#ifdef GRUB_UTIL
-      grub_util_error ("Relocation out of range");
-#else
-      return grub_error
-	(GRUB_ERR_OUT_OF_RANGE, N_("THM_CALL Relocation out of range."));
-#endif
-    }
+    return grub_error (GRUB_ERR_OUT_OF_RANGE,
+		       N_("THM_CALL Relocation out of range."));
 
 #ifdef GRUB_UTIL
-  grub_util_info ("    relative destination = 0x%08x",
-		  (unsigned int)target + offset);
+  grub_util_info ("    relative destination = 0x%08lx",
+		  (unsigned long)target + offset);
 #endif
 
   /* Reassemble instruction word */
@@ -200,7 +182,7 @@
  * Relocate conditional Thumb (T32) B<c>.W
  */
 grub_err_t
-reloc_thm_jump19 (grub_uint16_t *addr, Elf32_Addr sym_addr)
+grub_arm_reloc_thm_jump19 (grub_uint16_t *addr, Elf32_Addr sym_addr)
 {
   grub_int32_t offset;
   grub_uint32_t insword, insmask;
@@ -260,7 +242,7 @@
  * Relocate ARM (A32) B
  */
 grub_err_t
-reloc_jump24 (grub_uint32_t *addr, Elf32_Addr sym_addr)
+grub_arm_reloc_jump24 (grub_uint32_t *addr, Elf32_Addr sym_addr)
 {
   grub_uint32_t insword;
   grub_int32_t offset;
@@ -358,9 +340,10 @@
 	      return retval;
 	  }
 	  break;
+	case R_ARM_CALL:
 	case R_ARM_JUMP24:
 	  {
-	    retval = reloc_jump24 (target, sym_addr);
+	    retval = grub_arm_reloc_jump24 (target, sym_addr);
 	    if (retval != GRUB_ERR_NONE)
 	      return retval;
 	  }
@@ -369,7 +352,7 @@
 	case R_ARM_THM_JUMP24:
 	  {
 	    /* Thumb instructions can be 16-bit aligned */
-	    retval = reloc_thm_call ((grub_uint16_t *) target, sym_addr);
+	    retval = grub_arm_reloc_thm_call ((grub_uint16_t *) target, sym_addr);
 	    if (retval != GRUB_ERR_NONE)
 	      return retval;
 	  }
@@ -377,7 +360,7 @@
 	case R_ARM_THM_JUMP19:
 	  {
 	    /* Thumb instructions can be 16-bit aligned */
-	    retval = reloc_thm_jump19 ((grub_uint16_t *) target, sym_addr);
+	    retval = grub_arm_reloc_thm_jump19 ((grub_uint16_t *) target, sym_addr);
 	    if (retval != GRUB_ERR_NONE)
 	      return retval;
 	  }

=== modified file 'grub-core/kern/arm/uboot/startup.S'
--- grub-core/kern/arm/uboot/startup.S	2013-04-07 00:41:07 +0000
+++ grub-core/kern/arm/uboot/startup.S	2013-04-09 12:36:48 +0000
@@ -65,20 +65,29 @@
 	ldr	sp, =entry_state
 	push	{r4-r12,lr}	@ store U-Boot context (sp in r12)
 
-	@ Put kernel parameters aside until we can store them (further down)
-	mov	r4, r1		@ machine type
-	mov	r5, r2		@ boot data
+	ldr     r12, =EXT_C(uboot_machine_type)
+	str     r1, [r12]
+	ldr     r12, =EXT_C(uboot_boot_data)
+	str     r2, [r12]
+
 
 	@ Modules have been stored as a blob in BSS,
 	@ they need to be manually relocated to _end or
 	@ (__bss_start + grub_total_module_size), whichever greater.
-	bl	uboot_get_real_bss_start	@ r0 = src
+	ldr	r0, =EXT_C(__bss_start)		@ src
+	add	r0, r0, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
+	mvn	r1, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
+	and	r0, r0, r1
+
 	ldr	r1, =EXT_C(_end)		@ dst = End of BSS
 	ldr	r2, grub_total_module_size	@ blob size
 	add	r3, r0, r2			@ blob end
 	cmp	r1, r3				@ _end < blob end?
 	movlt	r1, r3				@ dst = blob end + blob size
-	
+
+	ldr     r12, =EXT_C(grub_modbase)
+	str     r1, [r12]
+
 1:	ldr	r3, [r0], #4 			@ r3 = *src++ 
 	str	r3, [r1], #4			@ *dst++ = r3 
 	subs	r2, #4				@ remaining -= 4
@@ -91,35 +100,16 @@
 
 	@ Since we _are_ the C run-time, we need to manually zero the BSS
 	@ region before continuing
-	bl	uboot_get_real_bss_start	@ zero from here
+	ldr	r0, =EXT_C(__bss_start)	@ zero from here
 	ldr	r1, =EXT_C(_end)		@ to here
 	mov	r2, #0
 1:	str	r2, [r0], #4
 	cmp	r0, r1
 	bne	1b
-
-	@ Global variables now accessible - store kernel parameters in memory
-	ldr     r12, =EXT_C(uboot_machine_type)
-	str     r4, [r12]
-	ldr     r12, =EXT_C(uboot_boot_data)
-	str     r5, [r12]
 	
 	b	EXT_C(grub_main)
 
 	/*
-	 * __bss_start does not actually point to the start of the runtime
-	 * BSS, but rather to the next byte following the preceding data.
-	 */
-FUNCTION (uboot_get_real_bss_start)
-	ldr	r0, =EXT_C(__bss_start)		@ src
-	tst	r0, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
-	beq	1f
-	mvn	r1, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
-	and	r0, r0, r1
-	add	r0, r0, #(GRUB_KERNEL_MACHINE_MOD_ALIGN)
-1:	bx	lr
-
-	/*
 	 * uboot_syscall():
 	 *   This function is effectively a veneer, so it cannot
 	 *   modify the stack or corrupt any registers other than

=== modified file 'grub-core/kern/dl.c'
--- grub-core/kern/dl.c	2013-03-19 19:25:09 +0000
+++ grub-core/kern/dl.c	2013-04-07 16:08:07 +0000
@@ -588,7 +588,7 @@
 {
   grub_dprintf ("modules", "flushing 0x%lx bytes at %p\n",
 		(unsigned long) mod->sz, mod->base);
-  grub_arch_sync_caches (mod->base, mod->sz);
+  //  grub_arch_sync_caches (mod->base, mod->sz);
 }
 
 /* Load a module from core memory.  */

=== added directory 'grub-core/kern/i386/uboot'
=== added file 'grub-core/kern/i386/uboot/startup.S'
--- grub-core/kern/i386/uboot/startup.S	1970-01-01 00:00:00 +0000
+++ grub-core/kern/i386/uboot/startup.S	2013-04-08 23:47:50 +0000
@@ -0,0 +1,61 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,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/>.
+ */
+
+#include <grub/symbol.h>
+/* For stack parameters.  */
+#include <grub/i386/pc/memory.h>
+#include <grub/machine/memory.h>
+#include <grub/offsets.h>
+
+/*
+ * Note: GRUB is compiled with the options -mrtd and -mregparm=3.
+ *       So the first three arguments are passed in %eax, %edx, and %ecx,
+ *       respectively, and if a function has a fixed number of arguments
+ *       and the number if greater than three, the function must return
+ *       with "ret $N" where N is ((the number of arguments) - 3) * 4.
+ */
+
+	.file	"startup.S"
+	.text
+	.globl	start, _start
+start:
+_start:
+
+	/* clean out the bss */
+	movl	$BSS_START_SYMBOL, %edi
+
+	/* compute the bss length */
+	movl	$END_SYMBOL, %ecx
+	subl	%edi, %ecx
+		
+	/* clean out */
+	xorl	%eax, %eax
+	cld
+	rep
+	stosb
+
+	/*
+	 *  Call the start of main body of C code.
+	 */
+	call	EXT_C(grub_main)
+
+	/* This should never happen.  */
+	cli
+1:	
+	hlt
+	jmp 1b

=== modified file 'grub-core/kern/uboot/init.c'
--- grub-core/kern/uboot/init.c	2013-04-07 00:41:07 +0000
+++ grub-core/kern/uboot/init.c	2013-04-09 12:23:57 +0000
@@ -35,10 +35,10 @@
 extern grub_size_t grub_total_module_size;
 extern int (*uboot_syscall_ptr) (int, int *, ...);
 
-grub_addr_t grub_modbase;
-
-grub_uint32_t uboot_machine_type;
-grub_addr_t uboot_boot_data;
+/* Set to anything other than zero so it lands in .data and not .bss.  */
+grub_addr_t grub_modbase = 0x55aa55aa;
+grub_uint32_t uboot_machine_type = 0x55aa55aa;
+grub_addr_t uboot_boot_data = 0x55aa55aa;
 
 static unsigned long timer_start;
 
@@ -69,7 +69,6 @@
 void
 grub_machine_init (void)
 {
-  grub_addr_t end, real_bss_start;
   int ver;
 
   /* First of all - establish connection with U-Boot */
@@ -85,26 +84,14 @@
       uboot_puts ("invalid U-Boot API version\n");
     }
 
-  /*
-   * Modules were relocated to _end, or __bss_start + grub_total_module_size,
-   * whichever greater. (And __bss_start may not point to actual BSS start...)
-   */
-  real_bss_start = uboot_get_real_bss_start ();
-  end = real_bss_start + grub_total_module_size;
-  if (end < (grub_addr_t) _end)
-    end = (grub_addr_t) _end;
-  grub_modbase = end;
-
   /* Initialize the console so that GRUB can display messages.  */
   grub_console_init_early ();
 
   /* Enumerate memory and initialize the memory management system. */
   grub_uboot_mm_init ();
 
-  grub_dprintf ("init", "__bss_start: 0x%08x, real_bss_start: 0x%08x\n",
-		(grub_addr_t) __bss_start, real_bss_start);
-  grub_dprintf ("init", "end: 0x%08x, _end: 0x%08x\n",
-		(grub_addr_t) end, (grub_addr_t) _end);
+  grub_dprintf ("init", "__bss_start: %p\n", __bss_start);
+  grub_dprintf ("init", "_end: %p\n", _end);
   grub_dprintf ("init", "grub_modbase: %p\n", (void *) grub_modbase);
   grub_dprintf ("init", "grub_modules_get_end(): %p\n",
 		(void *) grub_modules_get_end ());

=== modified file 'grub-core/lib/uboot/datetime.c'
--- grub-core/lib/uboot/datetime.c	2013-04-07 00:41:07 +0000
+++ grub-core/lib/uboot/datetime.c	2013-04-08 23:31:38 +0000
@@ -25,6 +25,7 @@
 GRUB_MOD_LICENSE ("GPLv3+");
 
 /* No simple platform-independent RTC access exists in U-Boot. */
+#ifndef __i386__
 
 grub_err_t
 grub_get_datetime (struct grub_datetime *datetime __attribute__ ((unused)))
@@ -39,3 +40,5 @@
   return grub_error (GRUB_ERR_INVALID_COMMAND,
 		     "can\'t set datetime using U-Boot");
 }
+
+#endif

=== modified file 'grub-core/lib/uboot/reboot.c'
--- grub-core/lib/uboot/reboot.c	2013-04-07 00:41:07 +0000
+++ grub-core/lib/uboot/reboot.c	2013-04-08 23:32:06 +0000
@@ -20,6 +20,8 @@
 #include <grub/misc.h>
 #include <grub/uboot/uboot.h>
 
+#ifndef __i386__
+
 void
 grub_reboot (void)
 {
@@ -28,3 +30,5 @@
   uboot_reset ();
   while (1);
 }
+
+#endif

=== added file 'include/grub/arm/reloc.h'
--- include/grub/arm/reloc.h	1970-01-01 00:00:00 +0000
+++ include/grub/arm/reloc.h	2013-04-09 11:38:30 +0000
@@ -0,0 +1,26 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2013  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_ARM_RELOC_H
+#define GRUB_ARM_RELOC_H 1
+
+grub_err_t grub_arm_reloc_jump24 (grub_uint32_t *addr, Elf32_Addr sym_addr);
+grub_err_t grub_arm_reloc_thm_call (grub_uint16_t *addr, Elf32_Addr sym_addr);
+grub_err_t grub_arm_reloc_thm_jump19 (grub_uint16_t *addr, Elf32_Addr sym_addr);
+
+#endif

=== added directory 'include/grub/i386/uboot'
=== added file 'include/grub/i386/uboot/kernel.h'
--- include/grub/i386/uboot/kernel.h	1970-01-01 00:00:00 +0000
+++ include/grub/i386/uboot/kernel.h	2013-04-08 23:34:00 +0000
@@ -0,0 +1,32 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2013 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
+
+#ifndef ASM_FILE
+
+#include <grub/symbol.h>
+#include <grub/types.h>
+
+#endif /* ! ASM_FILE */
+
+#define GRUB_KERNEL_MACHINE_STACK_SIZE 0x40000
+#define GRUB_KERNEL_MACHINE_HEAP_SIZE  (grub_size_t) (2 * 1024 * 1024)
+
+#endif /* ! GRUB_KERNEL_MACHINE_HEADER */

=== added file 'include/grub/i386/uboot/memory.h'
--- include/grub/i386/uboot/memory.h	1970-01-01 00:00:00 +0000
+++ include/grub/i386/uboot/memory.h	2013-04-08 23:33:14 +0000
@@ -0,0 +1,1 @@
+#include <grub/i386/coreboot/memory.h>

=== added file 'include/grub/i386/uboot/serial.h'
--- include/grub/i386/uboot/serial.h	1970-01-01 00:00:00 +0000
+++ include/grub/i386/uboot/serial.h	2013-04-08 23:52:51 +0000
@@ -0,0 +1,1 @@
+#include <grub/i386/coreboot/serial.h>

=== modified file 'include/grub/libgcc.h'
--- include/grub/libgcc.h	2013-04-07 00:41:07 +0000
+++ include/grub/libgcc.h	2013-04-07 16:08:07 +0000
@@ -122,4 +122,5 @@
 void EXPORT_FUNC (__aeabi_uidiv) (void);
 void EXPORT_FUNC (__aeabi_uidivmod) (void);
 void EXPORT_FUNC (__wrap___clear_cache) (void *, void *);
+void EXPORT_FUNC (__aeabi_ulcmp) (void);
 #endif

=== modified file 'include/grub/uboot/api_public.h'
--- include/grub/uboot/api_public.h	2013-04-07 00:41:07 +0000
+++ include/grub/uboot/api_public.h	2013-04-07 16:08:07 +0000
@@ -61,9 +61,6 @@
 
 typedef int (*scp_t) (int, int *, ...);
 
-typedef grub_uint16_t uint16_t;
-typedef grub_uint32_t uint32_t;
-
 #define API_SIG_VERSION	1
 #define API_SIG_MAGIC	"UBootAPI"
 #define API_SIG_MAGLEN	8
@@ -71,8 +68,8 @@
 struct api_signature
 {
   char magic[API_SIG_MAGLEN];	/* magic string */
-  uint16_t version;		/* API version */
-  uint32_t checksum;		/* checksum of this sig struct */
+  grub_uint16_t version;	/* API version */
+  grub_uint32_t checksum;	/* checksum of this sig struct */
   scp_t syscall;		/* entry point to the API */
 };
 

=== added file 'include/grub/uboot/image.h'
--- include/grub/uboot/image.h	1970-01-01 00:00:00 +0000
+++ include/grub/uboot/image.h	2013-04-08 09:20:19 +0000
@@ -0,0 +1,175 @@
+/*
+ * (C) Copyright 2008 Semihalf
+ *
+ * (C) Copyright 2000-2005
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program 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 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
+ */
+
+#ifndef __GRUB_UBOOT_IMAGE_H__
+#define __GRUB_UBOOT_IMAGE_H__
+
+/*
+ * Operating System Codes
+ */
+#define GRUB_UBOOT_IH_OS_INVALID		0	/* Invalid OS	*/
+#define GRUB_UBOOT_IH_OS_OPENBSD		1	/* OpenBSD	*/
+#define GRUB_UBOOT_IH_OS_NETBSD		2	/* NetBSD	*/
+#define GRUB_UBOOT_IH_OS_FREEBSD		3	/* FreeBSD	*/
+#define GRUB_UBOOT_IH_OS_4_4BSD		4	/* 4.4BSD	*/
+#define GRUB_UBOOT_IH_OS_LINUX		5	/* Linux	*/
+#define GRUB_UBOOT_IH_OS_SVR4		6	/* SVR4		*/
+#define GRUB_UBOOT_IH_OS_ESIX		7	/* Esix		*/
+#define GRUB_UBOOT_IH_OS_SOLARIS		8	/* Solaris	*/
+#define GRUB_UBOOT_IH_OS_IRIX		9	/* Irix		*/
+#define GRUB_UBOOT_IH_OS_SCO		10	/* SCO		*/
+#define GRUB_UBOOT_IH_OS_DELL		11	/* Dell		*/
+#define GRUB_UBOOT_IH_OS_NCR		12	/* NCR		*/
+#define GRUB_UBOOT_IH_OS_LYNXOS		13	/* LynxOS	*/
+#define GRUB_UBOOT_IH_OS_VXWORKS		14	/* VxWorks	*/
+#define GRUB_UBOOT_IH_OS_PSOS		15	/* pSOS		*/
+#define GRUB_UBOOT_IH_OS_QNX		16	/* QNX		*/
+#define GRUB_UBOOT_IH_OS_U_BOOT		17	/* Firmware	*/
+#define GRUB_UBOOT_IH_OS_RTEMS		18	/* RTEMS	*/
+#define GRUB_UBOOT_IH_OS_ARTOS		19	/* ARTOS	*/
+#define GRUB_UBOOT_IH_OS_UNITY		20	/* Unity OS	*/
+#define GRUB_UBOOT_IH_OS_INTEGRITY		21	/* INTEGRITY	*/
+#define GRUB_UBOOT_IH_OS_OSE		22	/* OSE		*/
+
+/*
+ * CPU Architecture Codes (supported by Linux)
+ */
+#define GRUB_UBOOT_IH_ARCH_INVALID		0	/* Invalid CPU	*/
+#define GRUB_UBOOT_IH_ARCH_ALPHA		1	/* Alpha	*/
+#define GRUB_UBOOT_IH_ARCH_ARM		2	/* ARM		*/
+#define GRUB_UBOOT_IH_ARCH_I386		3	/* Intel x86	*/
+#define GRUB_UBOOT_IH_ARCH_IA64		4	/* IA64		*/
+#define GRUB_UBOOT_IH_ARCH_MIPS		5	/* MIPS		*/
+#define GRUB_UBOOT_IH_ARCH_MIPS64		6	/* MIPS	 64 Bit */
+#define GRUB_UBOOT_IH_ARCH_PPC		7	/* PowerPC	*/
+#define GRUB_UBOOT_IH_ARCH_S390		8	/* IBM S390	*/
+#define GRUB_UBOOT_IH_ARCH_SH		9	/* SuperH	*/
+#define GRUB_UBOOT_IH_ARCH_SPARC		10	/* Sparc	*/
+#define GRUB_UBOOT_IH_ARCH_SPARC64		11	/* Sparc 64 Bit */
+#define GRUB_UBOOT_IH_ARCH_M68K		12	/* M68K		*/
+#define GRUB_UBOOT_IH_ARCH_MICROBLAZE	14	/* MicroBlaze   */
+#define GRUB_UBOOT_IH_ARCH_NIOS2		15	/* Nios-II	*/
+#define GRUB_UBOOT_IH_ARCH_BLACKFIN	16	/* Blackfin	*/
+#define GRUB_UBOOT_IH_ARCH_AVR32		17	/* AVR32	*/
+#define GRUB_UBOOT_IH_ARCH_ST200	        18	/* STMicroelectronics ST200  */
+#define GRUB_UBOOT_IH_ARCH_SANDBOX		19	/* Sandbox architecture (test only) */
+#define GRUB_UBOOT_IH_ARCH_NDS32	        20	/* ANDES Technology - NDS32  */
+#define GRUB_UBOOT_IH_ARCH_OPENRISC        21	/* OpenRISC 1000  */
+
+/*
+ * Image Types
+ *
+ * "Standalone Programs" are directly runnable in the environment
+ *	provided by U-Boot; it is expected that (if they behave
+ *	well) you can continue to work in U-Boot after return from
+ *	the Standalone Program.
+ * "OS Kernel Images" are usually images of some Embedded OS which
+ *	will take over control completely. Usually these programs
+ *	will install their own set of exception handlers, device
+ *	drivers, set up the MMU, etc. - this means, that you cannot
+ *	expect to re-enter U-Boot except by resetting the CPU.
+ * "RAMDisk Images" are more or less just data blocks, and their
+ *	parameters (address, size) are passed to an OS kernel that is
+ *	being started.
+ * "Multi-File Images" contain several images, typically an OS
+ *	(Linux) kernel image and one or more data images like
+ *	RAMDisks. This construct is useful for instance when you want
+ *	to boot over the network using BOOTP etc., where the boot
+ *	server provides just a single image file, but you want to get
+ *	for instance an OS kernel and a RAMDisk image.
+ *
+ *	"Multi-File Images" start with a list of image sizes, each
+ *	image size (in bytes) specified by an "uint32_t" in network
+ *	byte order. This list is terminated by an "(uint32_t)0".
+ *	Immediately after the terminating 0 follow the images, one by
+ *	one, all aligned on "uint32_t" boundaries (size rounded up to
+ *	a multiple of 4 bytes - except for the last file).
+ *
+ * "Firmware Images" are binary images containing firmware (like
+ *	U-Boot or FPGA images) which usually will be programmed to
+ *	flash memory.
+ *
+ * "Script files" are command sequences that will be executed by
+ *	U-Boot's command interpreter; this feature is especially
+ *	useful when you configure U-Boot to use a real shell (hush)
+ *	as command interpreter (=> Shell Scripts).
+ */
+
+#define GRUB_UBOOT_IH_TYPE_INVALID		0	/* Invalid Image		*/
+#define GRUB_UBOOT_IH_TYPE_STANDALONE	1	/* Standalone Program		*/
+#define GRUB_UBOOT_IH_TYPE_KERNEL		2	/* OS Kernel Image		*/
+#define GRUB_UBOOT_IH_TYPE_RAMDISK		3	/* RAMDisk Image		*/
+#define GRUB_UBOOT_IH_TYPE_MULTI		4	/* Multi-File Image		*/
+#define GRUB_UBOOT_IH_TYPE_FIRMWARE	5	/* Firmware Image		*/
+#define GRUB_UBOOT_IH_TYPE_SCRIPT		6	/* Script file			*/
+#define GRUB_UBOOT_IH_TYPE_FILESYSTEM	7	/* Filesystem Image (any type)	*/
+#define GRUB_UBOOT_IH_TYPE_FLATDT		8	/* Binary Flat Device Tree Blob	*/
+#define GRUB_UBOOT_IH_TYPE_KWBIMAGE	9	/* Kirkwood Boot Image		*/
+#define GRUB_UBOOT_IH_TYPE_IMXIMAGE	10	/* Freescale IMXBoot Image	*/
+#define GRUB_UBOOT_IH_TYPE_UBLIMAGE	11	/* Davinci UBL Image		*/
+#define GRUB_UBOOT_IH_TYPE_OMAPIMAGE	12	/* TI OMAP Config Header Image	*/
+#define GRUB_UBOOT_IH_TYPE_AISIMAGE	13	/* TI Davinci AIS Image		*/
+#define GRUB_UBOOT_IH_TYPE_KERNEL_NOLOAD	14	/* OS Kernel Image, can run from any load address */
+#define GRUB_UBOOT_IH_TYPE_PBLIMAGE	15	/* Freescale PBL Boot Image	*/
+
+/*
+ * Compression Types
+ */
+#define GRUB_UBOOT_IH_COMP_NONE		0	/*  No	 Compression Used	*/
+#define GRUB_UBOOT_IH_COMP_GZIP		1	/* gzip	 Compression Used	*/
+#define GRUB_UBOOT_IH_COMP_BZIP2		2	/* bzip2 Compression Used	*/
+#define GRUB_UBOOT_IH_COMP_LZMA		3	/* lzma  Compression Used	*/
+#define GRUB_UBOOT_IH_COMP_LZO		4	/* lzo   Compression Used	*/
+
+#define GRUB_UBOOT_IH_MAGIC	0x27051956	/* Image Magic Number		*/
+#define GRUB_UBOOT_IH_NMLEN		32	/* Image Name Length		*/
+
+/*
+ * Legacy format image header,
+ * all data in network byte order (aka natural aka bigendian).
+ */
+struct grub_uboot_image_header {
+	grub_uint32_t	ih_magic;	/* Image Header Magic Number	*/
+	grub_uint32_t	ih_hcrc;	/* Image Header CRC Checksum	*/
+	grub_uint32_t	ih_time;	/* Image Creation Timestamp	*/
+	grub_uint32_t	ih_size;	/* Image Data Size		*/
+	grub_uint32_t	ih_load;	/* Data	 Load  Address		*/
+	grub_uint32_t	ih_ep;		/* Entry Point Address		*/
+	grub_uint32_t	ih_dcrc;	/* Image Data CRC Checksum	*/
+	grub_uint8_t	ih_os;		/* Operating System		*/
+	grub_uint8_t	ih_arch;	/* CPU architecture		*/
+	grub_uint8_t	ih_type;	/* Image Type			*/
+	grub_uint8_t	ih_comp;	/* Compression Type		*/
+	grub_uint8_t	ih_name[GRUB_UBOOT_IH_NMLEN];	/* Image Name		*/
+};
+
+#endif	/* __IMAGE_H__ */

=== modified file 'util/grub-install.in'
--- util/grub-install.in	2013-04-07 00:41:07 +0000
+++ util/grub-install.in	2013-04-08 10:42:46 +0000
@@ -833,14 +833,6 @@
 		-L "$bootloader_id" -l "\\EFI\\$efi_distributor\\$efi_file"
 	fi
     fi
-elif [ x"${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = xarm-uboot ]; then
-    grub_imgname="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}"
-    raw_imgname="${uboot_imgname}.raw"
-    mv "$grub_imgname" "$raw_imgname"
-    mkimage -T kernel -A ARM -O Linux -a 0x08000000 -e 0x08000000 -C none -d "$raw_imgname" "$grub_imgname"
-    if [ $? -eq 0 ]; then
-	rm -f "$raw_imgname"
-    fi
 else
     gettext "WARNING: no platform-specific install was performed" 1>&2
     echo 1>&2

=== modified file 'util/grub-mkimage.c'
--- util/grub-mkimage.c	2013-04-07 00:41:07 +0000
+++ util/grub-mkimage.c	2013-04-09 11:45:10 +0000
@@ -40,6 +40,8 @@
 #include <stdlib.h>
 #include <assert.h>
 #include <grub/efi/pe32.h>
+#include <grub/uboot/image.h>
+#include <grub/arm/reloc.h>
 
 #define _GNU_SOURCE	1
 #include <argp.h>
@@ -1499,6 +1501,42 @@
       core_size = rom_size;
     }
     break;
+
+    case IMAGE_UBOOT:
+    {
+      struct grub_uboot_image_header *hdr;
+      GRUB_PROPERLY_ALIGNED_ARRAY (crc32_context, GRUB_MD_CRC32->contextsize);
+
+      hdr = xmalloc (core_size + sizeof (struct grub_uboot_image_header));
+      memcpy (hdr + 1, core_img, core_size);
+
+      memset (hdr, 0, sizeof (*hdr));
+      hdr->ih_magic = grub_cpu_to_be32_compile_time (GRUB_UBOOT_IH_MAGIC);
+      hdr->ih_time = grub_cpu_to_be32 (time (0));
+      hdr->ih_size = grub_cpu_to_be32 (core_size);
+      hdr->ih_load = grub_cpu_to_be32 (image_target->link_addr);
+      hdr->ih_ep = grub_cpu_to_be32 (image_target->link_addr);
+      hdr->ih_os = GRUB_UBOOT_IH_OS_LINUX;
+      hdr->ih_arch = GRUB_UBOOT_IH_ARCH_ARM;
+      hdr->ih_type = GRUB_UBOOT_IH_TYPE_KERNEL;
+      hdr->ih_comp = GRUB_UBOOT_IH_COMP_NONE;
+
+      GRUB_MD_CRC32->init(crc32_context);
+      GRUB_MD_CRC32->write(crc32_context, hdr + 1, core_size);
+      GRUB_MD_CRC32->final(crc32_context);
+      hdr->ih_dcrc = grub_get_unaligned32 (GRUB_MD_CRC32->read (crc32_context));
+
+      GRUB_MD_CRC32->init(crc32_context);
+      GRUB_MD_CRC32->write(crc32_context, hdr, sizeof (*hdr));
+      GRUB_MD_CRC32->final(crc32_context);
+      hdr->ih_hcrc = grub_get_unaligned32 (GRUB_MD_CRC32->read (crc32_context));
+
+      free (core_img);
+      core_img = (char *) hdr;
+      core_size += sizeof (struct grub_uboot_image_header);
+    }
+    break;
+
     case IMAGE_MIPS_ARC:
       {
 	char *ecoff_img;
@@ -1725,9 +1763,6 @@
 	core_size = program_size + header_size + footer_size;
       }
       break;
-    case IMAGE_UBOOT:
-      /* Raw image, header added by grub-install */
-      break;
     }
 
   grub_util_write_image (core_img, core_size, out, outname);

=== modified file 'util/grub-mkimagexx.c'
--- util/grub-mkimagexx.c	2013-04-07 00:41:07 +0000
+++ util/grub-mkimagexx.c	2013-04-09 12:21:25 +0000
@@ -60,9 +60,6 @@
 
 static Elf_Addr SUFFIX (entry_point);
 
-grub_err_t reloc_thm_call (grub_uint16_t *addr, Elf32_Addr sym_addr);
-grub_err_t reloc_thm_jump19 (grub_uint16_t *addr, Elf32_Addr sym_addr);
-
 /* Relocate symbols; note that this function overwrites the symbol table.
    Return the address of a start symbol.  */
 static Elf_Addr
@@ -553,19 +550,27 @@
 		   case R_ARM_THM_CALL:
 		   case R_ARM_THM_JUMP24:
 		     {
-		       grub_util_info ("  THM_JUMP24:\ttarget=0x%08x\toffset=(0x%08x)",	(unsigned int) target, sym_addr);
+		       grub_err_t err;
+		       grub_util_info ("  THM_JUMP24:\ttarget=0x%08lx\toffset=(0x%08x)",	(unsigned long) target, sym_addr);
 		       sym_addr -= offset;
 		       /* Thumb instructions can be 16-bit aligned */
-		       reloc_thm_call ((grub_uint16_t *) target, sym_addr);
+		       err = grub_arm_reloc_thm_call ((grub_uint16_t *) target,
+						      sym_addr);
+		       if (err)
+			 grub_util_error ("%s", grub_errmsg);
 		     }
 		     break;
 		   case R_ARM_THM_JUMP19:
 		     {
+		       grub_err_t err;
 		       grub_util_info ("  THM_JUMP19:\toffset=%d\t(0x%08x)",
 				       sym_addr, sym_addr);
 		       sym_addr -= offset;
 		       /* Thumb instructions can be 16-bit aligned */
-		       reloc_thm_jump19 ((grub_uint16_t *) target, sym_addr);
+		       err = grub_arm_reloc_thm_jump19 ((grub_uint16_t *) target,
+							sym_addr);
+		       if (err)
+			 grub_util_error ("%s", grub_errmsg);
 		     }
 		     break;
 		   default:


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 294 bytes --]

      parent reply	other threads:[~2013-04-09 12:45 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-24 17:01 [PATCH 4/7] Support for ARM/U-Boot platforms Leif Lindholm
2013-04-01  2:15 ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-04-01  9:53   ` Francesco Lavra
2013-04-01 11:24     ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-04-01 14:29       ` Francesco Lavra
2013-04-03 10:29         ` Leif Lindholm
2013-04-03 16:32   ` Leif Lindholm
2013-04-08 10:47     ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-04-09 10:26       ` Leif Lindholm
2013-04-09 17:26         ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-04-09  0:15 ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-04-09 11:39   ` Leif Lindholm
2013-04-09 11:55     ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-04-09 12:45     ` Vladimir 'φ-coder/phcoder' Serbinenko [this message]

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=51640D70.7040801@gmail.com \
    --to=phcoder@gmail.com \
    --cc=grub-devel@gnu.org \
    --cc=leif.lindholm@linaro.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.