Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 173527
b: refs/heads/master
c: 588baea
h: refs/heads/master
i:
  173525: 7e0641c
  173523: 67158d3
  173519: 1d4705c
v: v3
  • Loading branch information
Lennart Sorensen authored and Greg Ungerer committed Dec 4, 2009
1 parent 3a987e7 commit 7597c1a
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b0d22d66fd485316653b8db4c16139eeae5a0266
refs/heads/master: 588baeac38829304390b690142376d2c71ac5c9f
7 changes: 7 additions & 0 deletions trunk/arch/m68knommu/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,13 @@ config AVNET
default y
depends on (AVNET5282)

config UBOOT
bool "Support for U-Boot command line parameters"
help
If you say Y here kernel will try to collect command
line parameters from the initial u-boot stack.
default n

config 4KSTACKS
bool "Use 4Kb for kernel stacks instead of 8Kb"
default y
Expand Down
92 changes: 90 additions & 2 deletions trunk/arch/m68knommu/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
#include <linux/bootmem.h>
#include <linux/seq_file.h>
#include <linux/init.h>
#include <linux/initrd.h>
#include <linux/root_dev.h>

#include <asm/setup.h>
#include <asm/irq.h>
Expand All @@ -52,7 +54,6 @@ void (*mach_reset)(void);
void (*mach_halt)(void);
void (*mach_power_off)(void);


#ifdef CONFIG_M68000
#define CPU "MC68000"
#endif
Expand Down Expand Up @@ -111,6 +112,69 @@ void (*mach_power_off)(void);
extern int _stext, _etext, _sdata, _edata, _sbss, _ebss, _end;
extern int _ramstart, _ramend;

#if defined(CONFIG_UBOOT)
/*
* parse_uboot_commandline
*
* Copies u-boot commandline arguments and store them in the proper linux
* variables.
*
* Assumes:
* _init_sp global contains the address in the stack pointer when the
* kernel starts (see head.S::_start)
*
* U-Boot calling convention:
* (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);
*
* _init_sp can be parsed as such
*
* _init_sp+00 = u-boot cmd after jsr into kernel (skip)
* _init_sp+04 = &kernel board_info (residual data)
* _init_sp+08 = &initrd_start
* _init_sp+12 = &initrd_end
* _init_sp+16 = &cmd_start
* _init_sp+20 = &cmd_end
*
* This also assumes that the memory locations pointed to are still
* unmodified. U-boot places them near the end of external SDRAM.
*
* Argument(s):
* commandp = the linux commandline arg container to fill.
* size = the sizeof commandp.
*
* Returns:
*/
void parse_uboot_commandline(char *commandp, int size)
{
extern unsigned long _init_sp;
unsigned long *sp;
unsigned long uboot_kbd;
unsigned long uboot_initrd_start, uboot_initrd_end;
unsigned long uboot_cmd_start, uboot_cmd_end;


sp = (unsigned long *)_init_sp;
uboot_kbd = sp[1];
uboot_initrd_start = sp[2];
uboot_initrd_end = sp[3];
uboot_cmd_start = sp[4];
uboot_cmd_end = sp[5];

if (uboot_cmd_start && uboot_cmd_end)
strncpy(commandp, (const char *)uboot_cmd_start, size);
#if defined(CONFIG_BLK_DEV_INITRD)
if (uboot_initrd_start && uboot_initrd_end &&
(uboot_initrd_end > uboot_initrd_start)) {
initrd_start = uboot_initrd_start;
initrd_end = uboot_initrd_end;
ROOT_DEV = Root_RAM0;
printk(KERN_INFO "initrd at 0x%lx:0x%lx\n",
initrd_start, initrd_end);
}
#endif /* if defined(CONFIG_BLK_DEV_INITRD) */
}
#endif /* #if defined(CONFIG_UBOOT) */

void __init setup_arch(char **cmdline_p)
{
int bootmap_size;
Expand All @@ -128,7 +192,24 @@ void __init setup_arch(char **cmdline_p)
#if defined(CONFIG_BOOTPARAM)
strncpy(&command_line[0], CONFIG_BOOTPARAM_STRING, sizeof(command_line));
command_line[sizeof(command_line) - 1] = 0;
#endif
#endif /* CONFIG_BOOTPARAM */

#if defined(CONFIG_UBOOT)
/* CONFIG_UBOOT and CONFIG_BOOTPARAM defined, concatenate cmdline */
#if defined(CONFIG_BOOTPARAM)
/* Add the whitespace separator */
command_line[strlen(CONFIG_BOOTPARAM_STRING)] = ' ';
/* Parse uboot command line into the rest of the buffer */
parse_uboot_commandline(
&command_line[(strlen(CONFIG_BOOTPARAM_STRING)+1)],
(sizeof(command_line) -
(strlen(CONFIG_BOOTPARAM_STRING)+1)));
/* Only CONFIG_UBOOT defined, create cmdline */
#else
parse_uboot_commandline(&command_line[0], sizeof(command_line));
#endif /* CONFIG_BOOTPARAM */
command_line[sizeof(command_line) - 1] = 0;
#endif /* CONFIG_UBOOT */

printk(KERN_INFO "\x0F\r\n\nuClinux/" CPU "\n");

Expand Down Expand Up @@ -204,6 +285,13 @@ void __init setup_arch(char **cmdline_p)
free_bootmem(memory_start, memory_end - memory_start);
reserve_bootmem(memory_start, bootmap_size, BOOTMEM_DEFAULT);

#if defined(CONFIG_UBOOT) && defined(CONFIG_BLK_DEV_INITRD)
if ((initrd_start > 0) && (initrd_start < initrd_end) &&
(initrd_end < memory_end))
reserve_bootmem(initrd_start, initrd_end - initrd_start,
BOOTMEM_DEFAULT);
#endif /* if defined(CONFIG_BLK_DEV_INITRD) */

/*
* Get kmalloc into gear.
*/
Expand Down
10 changes: 10 additions & 0 deletions trunk/arch/m68knommu/platform/coldfire/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@
.global _ramvec
.global _ramstart
.global _ramend
#if defined(CONFIG_UBOOT)
.global _init_sp
#endif

/*****************************************************************************/

Expand All @@ -124,6 +127,10 @@ _ramstart:
.long 0
_ramend:
.long 0
#if defined(CONFIG_UBOOT)
_init_sp:
.long 0
#endif

/*****************************************************************************/

Expand All @@ -137,6 +144,9 @@ __HEAD
_start:
nop /* filler */
movew #0x2700, %sr /* no interrupts */
#if defined(CONFIG_UBOOT)
movel %sp,_init_sp /* save initial stack pointer */
#endif

/*
* Do any platform or board specific setup now. Most boards
Expand Down

0 comments on commit 7597c1a

Please sign in to comment.