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
This commit is contained in:
Коммит
701791cc3c
|
@ -165,6 +165,8 @@ unsigned long get_wchan(struct task_struct *p);
|
|||
eip; })
|
||||
#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()
|
||||
|
||||
#endif
|
||||
|
|
|
@ -86,7 +86,7 @@ struct switch_stack {
|
|||
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;
|
||||
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/*
|
||||
* Size of kernel stack for each process. This must be a power of 2...
|
||||
*/
|
||||
|
@ -28,6 +26,8 @@
|
|||
*/
|
||||
#define THREAD_SIZE (PAGE_SIZE<<THREAD_SIZE_ORDER)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/*
|
||||
* low level task data.
|
||||
*/
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
@ -52,7 +54,6 @@ void (*mach_reset)(void);
|
|||
void (*mach_halt)(void);
|
||||
void (*mach_power_off)(void);
|
||||
|
||||
|
||||
#ifdef CONFIG_M68000
|
||||
#define CPU "MC68000"
|
||||
#endif
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
*/
|
||||
|
||||
#include <asm-generic/vmlinux.lds.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/thread_info.h>
|
||||
|
||||
#if defined(CONFIG_RAMKERNEL)
|
||||
#define RAM_START CONFIG_KERNELBASE
|
||||
|
@ -15,7 +17,7 @@
|
|||
#define TEXT ram
|
||||
#define DATA ram
|
||||
#define INIT ram
|
||||
#define BSS ram
|
||||
#define BSSS ram
|
||||
#endif
|
||||
#if defined(CONFIG_ROMKERNEL) || defined(CONFIG_HIMEMKERNEL)
|
||||
#define RAM_START CONFIG_RAMBASE
|
||||
|
@ -27,7 +29,7 @@
|
|||
#define TEXT rom
|
||||
#define DATA ram
|
||||
#define INIT ram
|
||||
#define BSS ram
|
||||
#define BSSS ram
|
||||
#endif
|
||||
|
||||
#ifndef DATA_ADDR
|
||||
|
@ -147,40 +149,19 @@ SECTIONS {
|
|||
. = ALIGN(4);
|
||||
_sdata = . ;
|
||||
DATA_DATA
|
||||
. = ALIGN(32);
|
||||
*(.data.cacheline_aligned)
|
||||
. = ALIGN(8192) ;
|
||||
*(.data.init_task)
|
||||
CACHELINE_ALIGNED_DATA(32)
|
||||
INIT_TASK_DATA(THREAD_SIZE)
|
||||
_edata = . ;
|
||||
} > DATA
|
||||
|
||||
.init : {
|
||||
. = ALIGN(4096);
|
||||
.init.text : {
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__init_begin = .;
|
||||
_sinittext = .;
|
||||
INIT_TEXT
|
||||
_einittext = .;
|
||||
INIT_DATA
|
||||
. = ALIGN(16);
|
||||
__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
|
||||
INIT_TEXT_SECTION(PAGE_SIZE) > INIT
|
||||
INIT_DATA_SECTION(16) > INIT
|
||||
.init.data : {
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__init_end = .;
|
||||
} > INIT
|
||||
|
||||
|
@ -192,7 +173,7 @@ SECTIONS {
|
|||
. = ALIGN(4) ;
|
||||
_ebss = . ;
|
||||
_end = . ;
|
||||
} > BSS
|
||||
} > BSSS
|
||||
|
||||
DISCARDS
|
||||
}
|
||||
|
|
|
@ -30,7 +30,8 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
|
|||
.direction_output = mcf_gpio_direction_output,
|
||||
.get = mcf_gpio_get_value,
|
||||
.set = mcf_gpio_set_value,
|
||||
.ngpio = 8,
|
||||
.base = 1,
|
||||
.ngpio = 7,
|
||||
},
|
||||
.pddr = MCFEPORT_EPDDR,
|
||||
.podr = MCFEPORT_EPDR,
|
||||
|
@ -244,7 +245,7 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
|
|||
.get = mcf_gpio_get_value,
|
||||
.set = mcf_gpio_set_value_fast,
|
||||
.base = 96,
|
||||
.ngpio = 4,
|
||||
.ngpio = 8,
|
||||
},
|
||||
.pddr = MCFGPIO_PDDR_TIMER,
|
||||
.podr = MCFGPIO_PODR_TIMER,
|
||||
|
|
|
@ -31,7 +31,8 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
|
|||
.direction_output = mcf_gpio_direction_output,
|
||||
.get = mcf_gpio_get_value,
|
||||
.set = mcf_gpio_set_value,
|
||||
.ngpio = 8,
|
||||
.base = 1,
|
||||
.ngpio = 7,
|
||||
},
|
||||
.pddr = MCFEPORT_EPDDR,
|
||||
.podr = MCFEPORT_EPDR,
|
||||
|
@ -263,7 +264,8 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
|
|||
.direction_output = mcf_gpio_direction_output,
|
||||
.get = mcf_gpio_get_value,
|
||||
.set = mcf_gpio_set_value,
|
||||
.ngpio = 8,
|
||||
.base = 1,
|
||||
.ngpio = 7,
|
||||
},
|
||||
.pddr = MCFEPORT_EPDDR,
|
||||
.podr = MCFEPORT_EPDR,
|
||||
|
|
|
@ -31,7 +31,7 @@ static struct mcf_gpio_chip mcf_gpio_chips[] = {
|
|||
.get = mcf_gpio_get_value,
|
||||
.set = mcf_gpio_set_value,
|
||||
.base = 1,
|
||||
.ngpio = 8,
|
||||
.ngpio = 7,
|
||||
},
|
||||
.pddr = MCFEPORT_EPDDR,
|
||||
.podr = MCFEPORT_EPDR,
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
/***************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/clk.h>
|
||||
#include <asm/coldfire.h>
|
||||
|
||||
|
@ -18,23 +19,27 @@ struct clk *clk_get(struct device *dev, const char *id)
|
|||
{
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get);
|
||||
|
||||
int clk_enable(struct clk *clk)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_enable);
|
||||
|
||||
void clk_disable(struct clk *clk)
|
||||
{
|
||||
}
|
||||
EXPORT_SYMBOL(clk_disable);
|
||||
|
||||
void clk_put(struct clk *clk)
|
||||
{
|
||||
}
|
||||
EXPORT_SYMBOL(clk_put);
|
||||
|
||||
unsigned long clk_get_rate(struct clk *clk)
|
||||
{
|
||||
return MCF_CLK;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(clk_get_rate);
|
||||
/***************************************************************************/
|
||||
|
|
|
@ -106,6 +106,9 @@
|
|||
.global _ramvec
|
||||
.global _ramstart
|
||||
.global _ramend
|
||||
#if defined(CONFIG_UBOOT)
|
||||
.global _init_sp
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
@ -124,6 +127,10 @@ _ramstart:
|
|||
.long 0
|
||||
_ramend:
|
||||
.long 0
|
||||
#if defined(CONFIG_UBOOT)
|
||||
_init_sp:
|
||||
.long 0
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
int i;
|
||||
|
|
Загрузка…
Ссылка в новой задаче