提交 701791cc 编写于 作者: L Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu:
  m68knommu: export clk_* symbols in clk.c
  m68knommu: Split the .init section into INIT_TEXT_SECTION and INIT_DATA_SECTION.
  m68knommu: Move __init_end out of the .init section.
  m68knommu: Move __init_begin out of the .init section.
  m68knommu: Use more macros inside the .init section.
  m68knommu: Use INIT_TASK_DATA and CACHELINE_ALIGNED_DATA.
  m68knommu: Make THREAD_SIZE available to assembly files.
  m68knommu: Don't hardcode the value of PAGE_SIZE in the linker script.
  m68knommu: rename BSS define in linker script
  m68knommu: add a task_pt_regs() macro
  m68knommu: define arch_has_single_step() and friends
  m68knommu: add uboot commandline argument passing support
  m68knommu: Coldfire GPIO corrections
  m68knommu: move mcf_remove to .devexit.text

Fixed up (?) conflict in arch/m68k/include/asm/ptrace.h
...@@ -165,6 +165,8 @@ unsigned long get_wchan(struct task_struct *p); ...@@ -165,6 +165,8 @@ unsigned long get_wchan(struct task_struct *p);
eip; }) eip; })
#define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp) #define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp)
#define task_pt_regs(tsk) ((struct pt_regs *) ((tsk)->thread.esp0))
#define cpu_relax() barrier() #define cpu_relax() barrier()
#endif #endif
...@@ -86,7 +86,7 @@ struct switch_stack { ...@@ -86,7 +86,7 @@ struct switch_stack {
extern void show_regs(struct pt_regs *); extern void show_regs(struct pt_regs *);
/* /*
* These are defined as per linux/ptrace.h, which see. * These are defined as per linux/ptrace.h.
*/ */
struct task_struct; struct task_struct;
......
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
#ifdef __KERNEL__ #ifdef __KERNEL__
#ifndef __ASSEMBLY__
/* /*
* Size of kernel stack for each process. This must be a power of 2... * Size of kernel stack for each process. This must be a power of 2...
*/ */
...@@ -28,6 +26,8 @@ ...@@ -28,6 +26,8 @@
*/ */
#define THREAD_SIZE (PAGE_SIZE<<THREAD_SIZE_ORDER) #define THREAD_SIZE (PAGE_SIZE<<THREAD_SIZE_ORDER)
#ifndef __ASSEMBLY__
/* /*
* low level task data. * low level task data.
*/ */
......
...@@ -533,6 +533,13 @@ config AVNET ...@@ -533,6 +533,13 @@ config AVNET
default y default y
depends on (AVNET5282) 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 config 4KSTACKS
bool "Use 4Kb for kernel stacks instead of 8Kb" bool "Use 4Kb for kernel stacks instead of 8Kb"
default y default y
......
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/initrd.h>
#include <linux/root_dev.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/irq.h> #include <asm/irq.h>
...@@ -52,7 +54,6 @@ void (*mach_reset)(void); ...@@ -52,7 +54,6 @@ void (*mach_reset)(void);
void (*mach_halt)(void); void (*mach_halt)(void);
void (*mach_power_off)(void); void (*mach_power_off)(void);
#ifdef CONFIG_M68000 #ifdef CONFIG_M68000
#define CPU "MC68000" #define CPU "MC68000"
#endif #endif
...@@ -111,6 +112,69 @@ void (*mach_power_off)(void); ...@@ -111,6 +112,69 @@ void (*mach_power_off)(void);
extern int _stext, _etext, _sdata, _edata, _sbss, _ebss, _end; extern int _stext, _etext, _sdata, _edata, _sbss, _ebss, _end;
extern int _ramstart, _ramend; 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) void __init setup_arch(char **cmdline_p)
{ {
int bootmap_size; int bootmap_size;
...@@ -128,7 +192,24 @@ void __init setup_arch(char **cmdline_p) ...@@ -128,7 +192,24 @@ void __init setup_arch(char **cmdline_p)
#if defined(CONFIG_BOOTPARAM) #if defined(CONFIG_BOOTPARAM)
strncpy(&command_line[0], CONFIG_BOOTPARAM_STRING, sizeof(command_line)); strncpy(&command_line[0], CONFIG_BOOTPARAM_STRING, sizeof(command_line));
command_line[sizeof(command_line) - 1] = 0; 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"); printk(KERN_INFO "\x0F\r\n\nuClinux/" CPU "\n");
...@@ -204,6 +285,13 @@ void __init setup_arch(char **cmdline_p) ...@@ -204,6 +285,13 @@ void __init setup_arch(char **cmdline_p)
free_bootmem(memory_start, memory_end - memory_start); free_bootmem(memory_start, memory_end - memory_start);
reserve_bootmem(memory_start, bootmap_size, BOOTMEM_DEFAULT); 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. * Get kmalloc into gear.
*/ */
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
*/ */
#include <asm-generic/vmlinux.lds.h> #include <asm-generic/vmlinux.lds.h>
#include <asm/page.h>
#include <asm/thread_info.h>
#if defined(CONFIG_RAMKERNEL) #if defined(CONFIG_RAMKERNEL)
#define RAM_START CONFIG_KERNELBASE #define RAM_START CONFIG_KERNELBASE
...@@ -15,7 +17,7 @@ ...@@ -15,7 +17,7 @@
#define TEXT ram #define TEXT ram
#define DATA ram #define DATA ram
#define INIT ram #define INIT ram
#define BSS ram #define BSSS ram
#endif #endif
#if defined(CONFIG_ROMKERNEL) || defined(CONFIG_HIMEMKERNEL) #if defined(CONFIG_ROMKERNEL) || defined(CONFIG_HIMEMKERNEL)
#define RAM_START CONFIG_RAMBASE #define RAM_START CONFIG_RAMBASE
...@@ -27,7 +29,7 @@ ...@@ -27,7 +29,7 @@
#define TEXT rom #define TEXT rom
#define DATA ram #define DATA ram
#define INIT ram #define INIT ram
#define BSS ram #define BSSS ram
#endif #endif
#ifndef DATA_ADDR #ifndef DATA_ADDR
...@@ -147,40 +149,19 @@ SECTIONS { ...@@ -147,40 +149,19 @@ SECTIONS {
. = ALIGN(4); . = ALIGN(4);
_sdata = . ; _sdata = . ;
DATA_DATA DATA_DATA
. = ALIGN(32); CACHELINE_ALIGNED_DATA(32)
*(.data.cacheline_aligned) INIT_TASK_DATA(THREAD_SIZE)
. = ALIGN(8192) ;
*(.data.init_task)
_edata = . ; _edata = . ;
} > DATA } > DATA
.init : { .init.text : {
. = ALIGN(4096); . = ALIGN(PAGE_SIZE);
__init_begin = .; __init_begin = .;
_sinittext = .; } > INIT
INIT_TEXT INIT_TEXT_SECTION(PAGE_SIZE) > INIT
_einittext = .; INIT_DATA_SECTION(16) > INIT
INIT_DATA .init.data : {
. = ALIGN(16); . = ALIGN(PAGE_SIZE);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
INITCALLS
__initcall_end = .;
__con_initcall_start = .;
*(.con_initcall.init)
__con_initcall_end = .;
__security_initcall_start = .;
*(.security_initcall.init)
__security_initcall_end = .;
#ifdef CONFIG_BLK_DEV_INITRD
. = ALIGN(4);
__initramfs_start = .;
*(.init.ramfs)
__initramfs_end = .;
#endif
. = ALIGN(4096);
__init_end = .; __init_end = .;
} > INIT } > INIT
...@@ -192,7 +173,7 @@ SECTIONS { ...@@ -192,7 +173,7 @@ SECTIONS {
. = ALIGN(4) ; . = ALIGN(4) ;
_ebss = . ; _ebss = . ;
_end = . ; _end = . ;
} > BSS } > BSSS
DISCARDS DISCARDS
} }
......
...@@ -30,7 +30,8 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = { ...@@ -30,7 +30,8 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
.direction_output = mcf_gpio_direction_output, .direction_output = mcf_gpio_direction_output,
.get = mcf_gpio_get_value, .get = mcf_gpio_get_value,
.set = mcf_gpio_set_value, .set = mcf_gpio_set_value,
.ngpio = 8, .base = 1,
.ngpio = 7,
}, },
.pddr = MCFEPORT_EPDDR, .pddr = MCFEPORT_EPDDR,
.podr = MCFEPORT_EPDR, .podr = MCFEPORT_EPDR,
...@@ -244,7 +245,7 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = { ...@@ -244,7 +245,7 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
.get = mcf_gpio_get_value, .get = mcf_gpio_get_value,
.set = mcf_gpio_set_value_fast, .set = mcf_gpio_set_value_fast,
.base = 96, .base = 96,
.ngpio = 4, .ngpio = 8,
}, },
.pddr = MCFGPIO_PDDR_TIMER, .pddr = MCFGPIO_PDDR_TIMER,
.podr = MCFGPIO_PODR_TIMER, .podr = MCFGPIO_PODR_TIMER,
......
...@@ -31,7 +31,8 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = { ...@@ -31,7 +31,8 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
.direction_output = mcf_gpio_direction_output, .direction_output = mcf_gpio_direction_output,
.get = mcf_gpio_get_value, .get = mcf_gpio_get_value,
.set = mcf_gpio_set_value, .set = mcf_gpio_set_value,
.ngpio = 8, .base = 1,
.ngpio = 7,
}, },
.pddr = MCFEPORT_EPDDR, .pddr = MCFEPORT_EPDDR,
.podr = MCFEPORT_EPDR, .podr = MCFEPORT_EPDR,
...@@ -263,7 +264,8 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = { ...@@ -263,7 +264,8 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
.direction_output = mcf_gpio_direction_output, .direction_output = mcf_gpio_direction_output,
.get = mcf_gpio_get_value, .get = mcf_gpio_get_value,
.set = mcf_gpio_set_value, .set = mcf_gpio_set_value,
.ngpio = 8, .base = 1,
.ngpio = 7,
}, },
.pddr = MCFEPORT_EPDDR, .pddr = MCFEPORT_EPDDR,
.podr = MCFEPORT_EPDR, .podr = MCFEPORT_EPDR,
......
...@@ -31,7 +31,7 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = { ...@@ -31,7 +31,7 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
.get = mcf_gpio_get_value, .get = mcf_gpio_get_value,
.set = mcf_gpio_set_value, .set = mcf_gpio_set_value,
.base = 1, .base = 1,
.ngpio = 8, .ngpio = 7,
}, },
.pddr = MCFEPORT_EPDDR, .pddr = MCFEPORT_EPDDR,
.podr = MCFEPORT_EPDR, .podr = MCFEPORT_EPDR,
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
/***************************************************************************/ /***************************************************************************/
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <asm/coldfire.h> #include <asm/coldfire.h>
...@@ -18,23 +19,27 @@ struct clk *clk_get(struct device *dev, const char *id) ...@@ -18,23 +19,27 @@ struct clk *clk_get(struct device *dev, const char *id)
{ {
return NULL; return NULL;
} }
EXPORT_SYMBOL(clk_get);
int clk_enable(struct clk *clk) int clk_enable(struct clk *clk)
{ {
return 0; return 0;
} }
EXPORT_SYMBOL(clk_enable);
void clk_disable(struct clk *clk) void clk_disable(struct clk *clk)
{ {
} }
EXPORT_SYMBOL(clk_disable);
void clk_put(struct clk *clk) void clk_put(struct clk *clk)
{ {
} }
EXPORT_SYMBOL(clk_put);
unsigned long clk_get_rate(struct clk *clk) unsigned long clk_get_rate(struct clk *clk)
{ {
return MCF_CLK; return MCF_CLK;
} }
EXPORT_SYMBOL(clk_get_rate);
/***************************************************************************/ /***************************************************************************/
...@@ -106,6 +106,9 @@ ...@@ -106,6 +106,9 @@
.global _ramvec .global _ramvec
.global _ramstart .global _ramstart
.global _ramend .global _ramend
#if defined(CONFIG_UBOOT)
.global _init_sp
#endif
/*****************************************************************************/ /*****************************************************************************/
...@@ -124,6 +127,10 @@ _ramstart: ...@@ -124,6 +127,10 @@ _ramstart:
.long 0 .long 0
_ramend: _ramend:
.long 0 .long 0
#if defined(CONFIG_UBOOT)
_init_sp:
.long 0
#endif
/*****************************************************************************/ /*****************************************************************************/
...@@ -137,6 +144,9 @@ __HEAD ...@@ -137,6 +144,9 @@ __HEAD
_start: _start:
nop /* filler */ nop /* filler */
movew #0x2700, %sr /* no interrupts */ 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 * Do any platform or board specific setup now. Most boards
......
...@@ -602,7 +602,7 @@ static int __devinit mcf_probe(struct platform_device *pdev) ...@@ -602,7 +602,7 @@ static int __devinit mcf_probe(struct platform_device *pdev)
/****************************************************************************/ /****************************************************************************/
static int mcf_remove(struct platform_device *pdev) static int __devexit mcf_remove(struct platform_device *pdev)
{ {
struct uart_port *port; struct uart_port *port;
int i; int i;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册