Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (22 commits) MIPS: Ignore vmlinux.* MIPS: Move vmlinux.ecoff to arch/mips/boot MIPS: cpumask_of_node() should handle -1 as a node MIPS: Octeon: Use non-overflowing arithmetic in sched_clock MIPS: Malta, PowerTV: Remove unnecessary "Linux started" MIPS: BCM63xx: Remove duplicate CONFIG_CMDLINE. MIPS: AR7: Remove unused prom_getchar() MIPS: PowerTV: Remove extra r4k_clockevent_init() call MIPS: Cobalt use strlcat() for the command line arguments MIPS: Octeon: Add sched_clock() to csrc-octeon.c MIPS: TXx9: Cleanup builtin-cmdline processing MIPS: PowerTV: simplify prom_init_cmdline() and merge into prom_init() MIPS: PowerTV: Remove unused platform_die() MIPS: PowerTV: Remove mips_machine_halt() MIPS: PowerTV: Remove unused ptv_memsize MIPS: PowerTV: Remove unused prom_getcmdline() MIPS: AR7: Remove kgdb_enabled MIPS: Alchemy: Correct code taking the size of a pointer MIPS: BCM63xx: Fix whitespace damaged board_bcm963xx.c MIPS: VR41xx: Use strlcat() for the command line arguments ...
This commit is contained in:
commit
f25bb39f8a
|
@ -613,7 +613,7 @@ u32 _au1xxx_dbdma_put_source(u32 chanid, void *buf, int nbytes, u32 flags)
|
||||||
dma_cache_wback_inv((unsigned long)buf, nbytes);
|
dma_cache_wback_inv((unsigned long)buf, nbytes);
|
||||||
dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */
|
dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */
|
||||||
au_sync();
|
au_sync();
|
||||||
dma_cache_wback_inv((unsigned long)dp, sizeof(dp));
|
dma_cache_wback_inv((unsigned long)dp, sizeof(*dp));
|
||||||
ctp->chan_ptr->ddma_dbell = 0;
|
ctp->chan_ptr->ddma_dbell = 0;
|
||||||
|
|
||||||
/* Get next descriptor pointer. */
|
/* Get next descriptor pointer. */
|
||||||
|
@ -676,7 +676,7 @@ _au1xxx_dbdma_put_dest(u32 chanid, void *buf, int nbytes, u32 flags)
|
||||||
dma_cache_inv((unsigned long)buf, nbytes);
|
dma_cache_inv((unsigned long)buf, nbytes);
|
||||||
dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */
|
dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */
|
||||||
au_sync();
|
au_sync();
|
||||||
dma_cache_wback_inv((unsigned long)dp, sizeof(dp));
|
dma_cache_wback_inv((unsigned long)dp, sizeof(*dp));
|
||||||
ctp->chan_ptr->ddma_dbell = 0;
|
ctp->chan_ptr->ddma_dbell = 0;
|
||||||
|
|
||||||
/* Get next descriptor pointer. */
|
/* Get next descriptor pointer. */
|
||||||
|
|
|
@ -219,14 +219,6 @@ static void __init console_config(void)
|
||||||
if (strstr(prom_getcmdline(), "console="))
|
if (strstr(prom_getcmdline(), "console="))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef CONFIG_KGDB
|
|
||||||
if (!strstr(prom_getcmdline(), "nokgdb")) {
|
|
||||||
strcat(prom_getcmdline(), " console=kgdb");
|
|
||||||
kgdb_enabled = 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
s = prom_getenv("modetty0");
|
s = prom_getenv("modetty0");
|
||||||
if (s) {
|
if (s) {
|
||||||
baud = simple_strtoul(s, &p, 10);
|
baud = simple_strtoul(s, &p, 10);
|
||||||
|
@ -280,13 +272,6 @@ static inline void serial_out(int offset, int value)
|
||||||
writel(value, (void *)PORT(offset));
|
writel(value, (void *)PORT(offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
char prom_getchar(void)
|
|
||||||
{
|
|
||||||
while (!(serial_in(UART_LSR) & UART_LSR_DR))
|
|
||||||
;
|
|
||||||
return serial_in(UART_RX);
|
|
||||||
}
|
|
||||||
|
|
||||||
int prom_putchar(char c)
|
int prom_putchar(char c)
|
||||||
{
|
{
|
||||||
while ((serial_in(UART_LSR) & UART_LSR_TEMT) == 0)
|
while ((serial_in(UART_LSR) & UART_LSR_TEMT) == 0)
|
||||||
|
|
|
@ -346,27 +346,26 @@ static struct board_info __initdata board_96348gw = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct board_info __initdata board_FAST2404 = {
|
static struct board_info __initdata board_FAST2404 = {
|
||||||
.name = "F@ST2404",
|
.name = "F@ST2404",
|
||||||
.expected_cpu_id = 0x6348,
|
.expected_cpu_id = 0x6348,
|
||||||
|
|
||||||
.has_enet0 = 1,
|
.has_enet0 = 1,
|
||||||
.has_enet1 = 1,
|
.has_enet1 = 1,
|
||||||
.has_pci = 1,
|
.has_pci = 1,
|
||||||
|
|
||||||
.enet0 = {
|
.enet0 = {
|
||||||
.has_phy = 1,
|
.has_phy = 1,
|
||||||
.use_internal_phy = 1,
|
.use_internal_phy = 1,
|
||||||
},
|
},
|
||||||
|
|
||||||
.enet1 = {
|
.enet1 = {
|
||||||
.force_speed_100 = 1,
|
.force_speed_100 = 1,
|
||||||
.force_duplex_full = 1,
|
.force_duplex_full = 1,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
.has_ohci0 = 1,
|
||||||
.has_ohci0 = 1,
|
.has_pccard = 1,
|
||||||
.has_pccard = 1,
|
.has_ehci0 = 1,
|
||||||
.has_ehci0 = 1,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct board_info __initdata board_DV201AMR = {
|
static struct board_info __initdata board_DV201AMR = {
|
||||||
|
|
|
@ -40,9 +40,6 @@ void __init prom_init(void)
|
||||||
reg &= ~mask;
|
reg &= ~mask;
|
||||||
bcm_perf_writel(reg, PERF_CKCTL_REG);
|
bcm_perf_writel(reg, PERF_CKCTL_REG);
|
||||||
|
|
||||||
/* assign command line from kernel config */
|
|
||||||
strcpy(arcs_cmdline, CONFIG_CMDLINE);
|
|
||||||
|
|
||||||
/* register gpiochip */
|
/* register gpiochip */
|
||||||
bcm63xx_gpio_init();
|
bcm63xx_gpio_init();
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
mkboot
|
mkboot
|
||||||
elf2ecoff
|
elf2ecoff
|
||||||
|
vmlinux.*
|
||||||
zImage
|
zImage
|
||||||
zImage.tmp
|
zImage.tmp
|
||||||
|
|
|
@ -28,7 +28,7 @@ VMLINUX = vmlinux
|
||||||
all: vmlinux.ecoff vmlinux.srec
|
all: vmlinux.ecoff vmlinux.srec
|
||||||
|
|
||||||
vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX)
|
vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX)
|
||||||
$(obj)/elf2ecoff $(VMLINUX) vmlinux.ecoff $(E2EFLAGS)
|
$(obj)/elf2ecoff $(VMLINUX) $(obj)/vmlinux.ecoff $(E2EFLAGS)
|
||||||
|
|
||||||
$(obj)/elf2ecoff: $(obj)/elf2ecoff.c
|
$(obj)/elf2ecoff: $(obj)/elf2ecoff.c
|
||||||
$(HOSTCC) -o $@ $^
|
$(HOSTCC) -o $@ $^
|
||||||
|
|
|
@ -56,7 +56,7 @@ $(obj)/piggy.o: $(obj)/vmlinux.$(suffix_y) $(obj)/dummy.o
|
||||||
LDFLAGS_vmlinuz := $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T
|
LDFLAGS_vmlinuz := $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T
|
||||||
vmlinuz: $(src)/ld.script $(obj-y) $(obj)/piggy.o
|
vmlinuz: $(src)/ld.script $(obj-y) $(obj)/piggy.o
|
||||||
$(call if_changed,ld)
|
$(call if_changed,ld)
|
||||||
$(Q)$(OBJCOPY) $(OBJCOPYFLAGS) -R .comment -R .stab -R .stabstr -R .initrd -R .sysmap $@
|
$(Q)$(OBJCOPY) $(OBJCOPYFLAGS) $@
|
||||||
|
|
||||||
#
|
#
|
||||||
# Some DECstations need all possible sections of an ECOFF executable
|
# Some DECstations need all possible sections of an ECOFF executable
|
||||||
|
@ -84,14 +84,11 @@ vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ)
|
||||||
$(obj)/../elf2ecoff: $(src)/../elf2ecoff.c
|
$(obj)/../elf2ecoff: $(src)/../elf2ecoff.c
|
||||||
$(Q)$(HOSTCC) -o $@ $^
|
$(Q)$(HOSTCC) -o $@ $^
|
||||||
|
|
||||||
drop-sections = .reginfo .mdebug .comment .note .pdr .options .MIPS.options
|
OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary
|
||||||
strip-flags = $(addprefix --remove-section=,$(drop-sections))
|
|
||||||
|
|
||||||
OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary $(strip-flags)
|
|
||||||
vmlinuz.bin: vmlinuz
|
vmlinuz.bin: vmlinuz
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec $(strip-flags)
|
OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec
|
||||||
vmlinuz.srec: vmlinuz
|
vmlinuz.srec: vmlinuz
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,6 @@ char *zimage_start;
|
||||||
|
|
||||||
/* The linker tells us where the image is. */
|
/* The linker tells us where the image is. */
|
||||||
extern unsigned char __image_begin, __image_end;
|
extern unsigned char __image_begin, __image_end;
|
||||||
extern unsigned char __ramdisk_begin, __ramdisk_end;
|
|
||||||
unsigned long initrd_size;
|
|
||||||
|
|
||||||
/* debug interfaces */
|
/* debug interfaces */
|
||||||
extern void puts(const char *s);
|
extern void puts(const char *s);
|
||||||
|
@ -102,14 +100,6 @@ void decompress_kernel(unsigned long boot_heap_start)
|
||||||
puthex((unsigned long)(zimage_size + zimage_start));
|
puthex((unsigned long)(zimage_size + zimage_start));
|
||||||
puts("\n");
|
puts("\n");
|
||||||
|
|
||||||
if (initrd_size) {
|
|
||||||
puts("initrd at: ");
|
|
||||||
puthex((unsigned long)(&__ramdisk_begin));
|
|
||||||
puts(" ");
|
|
||||||
puthex((unsigned long)(&__ramdisk_end));
|
|
||||||
puts("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* this area are prepared for mallocing when decompressing */
|
/* this area are prepared for mallocing when decompressing */
|
||||||
free_mem_ptr = boot_heap_start;
|
free_mem_ptr = boot_heap_start;
|
||||||
free_mem_end_ptr = boot_heap_start + BOOT_HEAP_SIZE;
|
free_mem_end_ptr = boot_heap_start + BOOT_HEAP_SIZE;
|
||||||
|
|
|
@ -1,150 +1,67 @@
|
||||||
|
/*
|
||||||
|
* ld.script for compressed kernel support of MIPS
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Lemote Inc.
|
||||||
|
* Author: Wu Zhangjin <wuzj@lemote.com>
|
||||||
|
*/
|
||||||
|
|
||||||
OUTPUT_ARCH(mips)
|
OUTPUT_ARCH(mips)
|
||||||
ENTRY(start)
|
ENTRY(start)
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
/* Read-only sections, merged into text segment: */
|
/* . = VMLINUZ_LOAD_ADDRESS */
|
||||||
.init : { *(.init) } =0
|
/* read-only */
|
||||||
.text :
|
_text = .; /* Text and read-only data */
|
||||||
{
|
.text : {
|
||||||
_ftext = . ;
|
_ftext = . ;
|
||||||
*(.text)
|
*(.text)
|
||||||
*(.rodata)
|
*(.rodata)
|
||||||
*(.rodata1)
|
} = 0
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
_etext = .; /* End of text section */
|
||||||
*(.gnu.warning)
|
|
||||||
} =0
|
|
||||||
.kstrtab : { *(.kstrtab) }
|
|
||||||
|
|
||||||
. = ALIGN(16); /* Exception table */
|
/* writable */
|
||||||
__start___ex_table = .;
|
.data : { /* Data */
|
||||||
__ex_table : { *(__ex_table) }
|
_fdata = . ;
|
||||||
__stop___ex_table = .;
|
*(.data)
|
||||||
|
/* Put the compressed image here, so bss is on the end. */
|
||||||
|
__image_begin = .;
|
||||||
|
*(.image)
|
||||||
|
__image_end = .;
|
||||||
|
CONSTRUCTORS
|
||||||
|
}
|
||||||
|
.sdata : { *(.sdata) }
|
||||||
|
. = ALIGN(4);
|
||||||
|
_edata = .; /* End of data section */
|
||||||
|
|
||||||
__start___dbe_table = .; /* Exception table for data bus errors */
|
/* BSS */
|
||||||
__dbe_table : { *(__dbe_table) }
|
__bss_start = .;
|
||||||
__stop___dbe_table = .;
|
_fbss = .;
|
||||||
|
.sbss : { *(.sbss) *(.scommon) }
|
||||||
|
.bss : {
|
||||||
|
*(.dynbss)
|
||||||
|
*(.bss)
|
||||||
|
*(COMMON)
|
||||||
|
}
|
||||||
|
. = ALIGN(4);
|
||||||
|
_end = . ;
|
||||||
|
|
||||||
__start___ksymtab = .; /* Kernel symbol table */
|
/* These are needed for ELF backends which have not yet been converted
|
||||||
__ksymtab : { *(__ksymtab) }
|
* to the new style linker. */
|
||||||
__stop___ksymtab = .;
|
|
||||||
|
|
||||||
_etext = .;
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
|
||||||
. = ALIGN(8192);
|
/* These must appear regardless of . */
|
||||||
.data.init_task : { *(.data.init_task) }
|
.gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
|
||||||
|
.gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
|
||||||
|
|
||||||
/* Startup code */
|
/* Sections to be discarded */
|
||||||
. = ALIGN(4096);
|
/DISCARD/ : {
|
||||||
__init_begin = .;
|
*(.MIPS.options)
|
||||||
.text.init : { *(.text.init) }
|
*(.options)
|
||||||
.data.init : { *(.data.init) }
|
*(.pdr)
|
||||||
. = ALIGN(16);
|
*(.reginfo)
|
||||||
__setup_start = .;
|
*(.comment)
|
||||||
.setup.init : { *(.setup.init) }
|
*(.note)
|
||||||
__setup_end = .;
|
}
|
||||||
__initcall_start = .;
|
|
||||||
.initcall.init : { *(.initcall.init) }
|
|
||||||
__initcall_end = .;
|
|
||||||
. = ALIGN(4096); /* Align double page for init_task_union */
|
|
||||||
__init_end = .;
|
|
||||||
|
|
||||||
. = ALIGN(4096);
|
|
||||||
.data.page_aligned : { *(.data.idt) }
|
|
||||||
|
|
||||||
. = ALIGN(32);
|
|
||||||
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
|
|
||||||
|
|
||||||
.fini : { *(.fini) } =0
|
|
||||||
.reginfo : { *(.reginfo) }
|
|
||||||
/* Adjust the address for the data segment. We want to adjust up to
|
|
||||||
the same address within the page on the next page up. It would
|
|
||||||
be more correct to do this:
|
|
||||||
. = .;
|
|
||||||
The current expression does not correctly handle the case of a
|
|
||||||
text segment ending precisely at the end of a page; it causes the
|
|
||||||
data segment to skip a page. The above expression does not have
|
|
||||||
this problem, but it will currently (2/95) cause BFD to allocate
|
|
||||||
a single segment, combining both text and data, for this case.
|
|
||||||
This will prevent the text segment from being shared among
|
|
||||||
multiple executions of the program; I think that is more
|
|
||||||
important than losing a page of the virtual address space (note
|
|
||||||
that no actual memory is lost; the page which is skipped can not
|
|
||||||
be referenced). */
|
|
||||||
. = .;
|
|
||||||
.data :
|
|
||||||
{
|
|
||||||
_fdata = . ;
|
|
||||||
*(.data)
|
|
||||||
|
|
||||||
/* Put the compressed image here, so bss is on the end. */
|
|
||||||
__image_begin = .;
|
|
||||||
*(.image)
|
|
||||||
__image_end = .;
|
|
||||||
/* Align the initial ramdisk image (INITRD) on page boundaries. */
|
|
||||||
. = ALIGN(4096);
|
|
||||||
__ramdisk_begin = .;
|
|
||||||
*(.initrd)
|
|
||||||
__ramdisk_end = .;
|
|
||||||
. = ALIGN(4096);
|
|
||||||
|
|
||||||
CONSTRUCTORS
|
|
||||||
}
|
|
||||||
.data1 : { *(.data1) }
|
|
||||||
_gp = . + 0x8000;
|
|
||||||
.lit8 : { *(.lit8) }
|
|
||||||
.lit4 : { *(.lit4) }
|
|
||||||
.ctors : { *(.ctors) }
|
|
||||||
.dtors : { *(.dtors) }
|
|
||||||
.got : { *(.got.plt) *(.got) }
|
|
||||||
.dynamic : { *(.dynamic) }
|
|
||||||
/* We want the small data sections together, so single-instruction offsets
|
|
||||||
can access them all, and initialized data all before uninitialized, so
|
|
||||||
we can shorten the on-disk segment size. */
|
|
||||||
.sdata : { *(.sdata) }
|
|
||||||
. = ALIGN(4);
|
|
||||||
_edata = .;
|
|
||||||
PROVIDE (edata = .);
|
|
||||||
|
|
||||||
__bss_start = .;
|
|
||||||
_fbss = .;
|
|
||||||
.sbss : { *(.sbss) *(.scommon) }
|
|
||||||
.bss :
|
|
||||||
{
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(4);
|
|
||||||
_end = . ;
|
|
||||||
PROVIDE (end = .);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sections to be discarded */
|
|
||||||
/DISCARD/ :
|
|
||||||
{
|
|
||||||
*(.text.exit)
|
|
||||||
*(.data.exit)
|
|
||||||
*(.exitcall.exit)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is the MIPS specific mdebug section. */
|
|
||||||
.mdebug : { *(.mdebug) }
|
|
||||||
/* These are needed for ELF backends which have not yet been
|
|
||||||
converted to the new style linker. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the .debug DWARF section are relative to the beginning of the
|
|
||||||
section so we begin .debug at 0. It's not clear yet what needs to happen
|
|
||||||
for the others. */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
/* These must appear regardless of . */
|
|
||||||
.gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
|
|
||||||
.gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
|
|
||||||
.comment : { *(.comment) }
|
|
||||||
.note : { *(.note) }
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,38 @@ static struct clocksource clocksource_mips = {
|
||||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsigned long long notrace sched_clock(void)
|
||||||
|
{
|
||||||
|
/* 64-bit arithmatic can overflow, so use 128-bit. */
|
||||||
|
#if (__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ <= 3))
|
||||||
|
u64 t1, t2, t3;
|
||||||
|
unsigned long long rv;
|
||||||
|
u64 mult = clocksource_mips.mult;
|
||||||
|
u64 shift = clocksource_mips.shift;
|
||||||
|
u64 cnt = read_c0_cvmcount();
|
||||||
|
|
||||||
|
asm (
|
||||||
|
"dmultu\t%[cnt],%[mult]\n\t"
|
||||||
|
"nor\t%[t1],$0,%[shift]\n\t"
|
||||||
|
"mfhi\t%[t2]\n\t"
|
||||||
|
"mflo\t%[t3]\n\t"
|
||||||
|
"dsll\t%[t2],%[t2],1\n\t"
|
||||||
|
"dsrlv\t%[rv],%[t3],%[shift]\n\t"
|
||||||
|
"dsllv\t%[t1],%[t2],%[t1]\n\t"
|
||||||
|
"or\t%[rv],%[t1],%[rv]\n\t"
|
||||||
|
: [rv] "=&r" (rv), [t1] "=&r" (t1), [t2] "=&r" (t2), [t3] "=&r" (t3)
|
||||||
|
: [cnt] "r" (cnt), [mult] "r" (mult), [shift] "r" (shift)
|
||||||
|
: "hi", "lo");
|
||||||
|
return rv;
|
||||||
|
#else
|
||||||
|
/* GCC > 4.3 do it the easy way. */
|
||||||
|
unsigned int __attribute__((mode(TI))) t;
|
||||||
|
t = read_c0_cvmcount();
|
||||||
|
t = t * clocksource_mips.mult;
|
||||||
|
return (unsigned long long)(t >> clocksource_mips.shift);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void __init plat_time_init(void)
|
void __init plat_time_init(void)
|
||||||
{
|
{
|
||||||
clocksource_mips.rating = 300;
|
clocksource_mips.rating = 300;
|
||||||
|
|
|
@ -97,26 +97,18 @@ void __init plat_mem_setup(void)
|
||||||
|
|
||||||
void __init prom_init(void)
|
void __init prom_init(void)
|
||||||
{
|
{
|
||||||
int narg, indx, posn, nchr;
|
|
||||||
unsigned long memsz;
|
unsigned long memsz;
|
||||||
|
int argc, i;
|
||||||
char **argv;
|
char **argv;
|
||||||
|
|
||||||
memsz = fw_arg0 & 0x7fff0000;
|
memsz = fw_arg0 & 0x7fff0000;
|
||||||
narg = fw_arg0 & 0x0000ffff;
|
argc = fw_arg0 & 0x0000ffff;
|
||||||
|
argv = (char **)fw_arg1;
|
||||||
|
|
||||||
if (narg) {
|
for (i = 1; i < argc; i++) {
|
||||||
arcs_cmdline[0] = '\0';
|
strlcat(arcs_cmdline, argv[i], COMMAND_LINE_SIZE);
|
||||||
argv = (char **) fw_arg1;
|
if (i < (argc - 1))
|
||||||
posn = 0;
|
strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE);
|
||||||
for (indx = 1; indx < narg; ++indx) {
|
|
||||||
nchr = strlen(argv[indx]);
|
|
||||||
if (posn + 1 + nchr + 1 > sizeof(arcs_cmdline))
|
|
||||||
break;
|
|
||||||
if (posn)
|
|
||||||
arcs_cmdline[posn++] = ' ';
|
|
||||||
strcpy(arcs_cmdline + posn, argv[indx]);
|
|
||||||
posn += nchr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
add_memory_region(0x0, memsz, BOOT_MEM_RAM);
|
add_memory_region(0x0, memsz, BOOT_MEM_RAM);
|
||||||
|
|
|
@ -24,7 +24,9 @@ extern struct cpuinfo_ip27 sn_cpu_info[NR_CPUS];
|
||||||
|
|
||||||
#define cpu_to_node(cpu) (sn_cpu_info[(cpu)].p_nodeid)
|
#define cpu_to_node(cpu) (sn_cpu_info[(cpu)].p_nodeid)
|
||||||
#define parent_node(node) (node)
|
#define parent_node(node) (node)
|
||||||
#define cpumask_of_node(node) (&hub_data(node)->h_cpus)
|
#define cpumask_of_node(node) ((node) == -1 ? \
|
||||||
|
cpu_all_mask : \
|
||||||
|
&hub_data(node)->h_cpus)
|
||||||
struct pci_bus;
|
struct pci_bus;
|
||||||
extern int pcibus_to_node(struct pci_bus *);
|
extern int pcibus_to_node(struct pci_bus *);
|
||||||
|
|
||||||
|
|
|
@ -49,9 +49,6 @@ void __init plat_mem_setup(void)
|
||||||
set_io_port_base(0xbfd00000);
|
set_io_port_base(0xbfd00000);
|
||||||
|
|
||||||
serial_init();
|
serial_init();
|
||||||
|
|
||||||
pr_info("Linux started...\n");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern struct plat_smp_ops ssmtc_smp_ops;
|
extern struct plat_smp_ops ssmtc_smp_ops;
|
||||||
|
@ -60,7 +57,6 @@ void __init prom_init(void)
|
||||||
{
|
{
|
||||||
set_io_port_base(0xbfd00000);
|
set_io_port_base(0xbfd00000);
|
||||||
|
|
||||||
pr_info("\nLINUX started...\n");
|
|
||||||
prom_meminit();
|
prom_meminit();
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS_MT_SMP
|
#ifdef CONFIG_MIPS_MT_SMP
|
||||||
|
|
|
@ -73,9 +73,6 @@ static int __cpuinit m4kc_tlbp_war(void)
|
||||||
enum label_id {
|
enum label_id {
|
||||||
label_second_part = 1,
|
label_second_part = 1,
|
||||||
label_leave,
|
label_leave,
|
||||||
#ifdef MODULE_START
|
|
||||||
label_module_alloc,
|
|
||||||
#endif
|
|
||||||
label_vmalloc,
|
label_vmalloc,
|
||||||
label_vmalloc_done,
|
label_vmalloc_done,
|
||||||
label_tlbw_hazard,
|
label_tlbw_hazard,
|
||||||
|
@ -92,9 +89,6 @@ enum label_id {
|
||||||
|
|
||||||
UASM_L_LA(_second_part)
|
UASM_L_LA(_second_part)
|
||||||
UASM_L_LA(_leave)
|
UASM_L_LA(_leave)
|
||||||
#ifdef MODULE_START
|
|
||||||
UASM_L_LA(_module_alloc)
|
|
||||||
#endif
|
|
||||||
UASM_L_LA(_vmalloc)
|
UASM_L_LA(_vmalloc)
|
||||||
UASM_L_LA(_vmalloc_done)
|
UASM_L_LA(_vmalloc_done)
|
||||||
UASM_L_LA(_tlbw_hazard)
|
UASM_L_LA(_tlbw_hazard)
|
||||||
|
@ -818,8 +812,6 @@ static void __cpuinit build_r4000_tlb_refill_handler(void)
|
||||||
} else {
|
} else {
|
||||||
#if defined(CONFIG_HUGETLB_PAGE)
|
#if defined(CONFIG_HUGETLB_PAGE)
|
||||||
const enum label_id ls = label_tlb_huge_update;
|
const enum label_id ls = label_tlb_huge_update;
|
||||||
#elif defined(MODULE_START)
|
|
||||||
const enum label_id ls = label_module_alloc;
|
|
||||||
#else
|
#else
|
||||||
const enum label_id ls = label_vmalloc;
|
const enum label_id ls = label_vmalloc;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -355,7 +355,6 @@ void __init prom_init(void)
|
||||||
board_nmi_handler_setup = mips_nmi_setup;
|
board_nmi_handler_setup = mips_nmi_setup;
|
||||||
board_ejtag_handler_setup = mips_ejtag_setup;
|
board_ejtag_handler_setup = mips_ejtag_setup;
|
||||||
|
|
||||||
pr_info("\nLINUX started...\n");
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
prom_meminit();
|
prom_meminit();
|
||||||
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||||
|
|
|
@ -23,6 +23,6 @@
|
||||||
# under Linux.
|
# under Linux.
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y += cmdline.o init.o memory.o reset.o time.o powertv_setup.o asic/ pci/
|
obj-y += init.o memory.o reset.o time.o powertv_setup.o asic/ pci/
|
||||||
|
|
||||||
EXTRA_CFLAGS += -Wall -Werror
|
EXTRA_CFLAGS += -Wall -Werror
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
/*
|
|
||||||
* Carsten Langgaard, carstenl@mips.com
|
|
||||||
* Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.
|
|
||||||
* Portions copyright (C) 2009 Cisco Systems, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can distribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License (Version 2) as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope 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.
|
|
||||||
*
|
|
||||||
* Kernel command line creation using the prom monitor (YAMON) argc/argv.
|
|
||||||
*/
|
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/string.h>
|
|
||||||
|
|
||||||
#include <asm/bootinfo.h>
|
|
||||||
|
|
||||||
#include "init.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* YAMON (32-bit PROM) pass arguments and environment as 32-bit pointer.
|
|
||||||
* This macro take care of sign extension.
|
|
||||||
*/
|
|
||||||
#define prom_argv(index) ((char *)(long)_prom_argv[(index)])
|
|
||||||
|
|
||||||
char * __init prom_getcmdline(void)
|
|
||||||
{
|
|
||||||
return &(arcs_cmdline[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void __init prom_init_cmdline(void)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
|
|
||||||
if (prom_argc != 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
len = strlen(arcs_cmdline);
|
|
||||||
|
|
||||||
arcs_cmdline[len] = ' ';
|
|
||||||
|
|
||||||
strlcpy(arcs_cmdline + len + 1, (char *)_prom_argv,
|
|
||||||
COMMAND_LINE_SIZE - len - 1);
|
|
||||||
}
|
|
|
@ -34,10 +34,7 @@
|
||||||
#include <asm/mips-boards/generic.h>
|
#include <asm/mips-boards/generic.h>
|
||||||
#include <asm/mach-powertv/asic.h>
|
#include <asm/mach-powertv/asic.h>
|
||||||
|
|
||||||
#include "init.h"
|
static int *_prom_envp;
|
||||||
|
|
||||||
int prom_argc;
|
|
||||||
int *_prom_argv, *_prom_envp;
|
|
||||||
unsigned long _prom_memsize;
|
unsigned long _prom_memsize;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -109,16 +106,20 @@ static void __init mips_ejtag_setup(void)
|
||||||
|
|
||||||
void __init prom_init(void)
|
void __init prom_init(void)
|
||||||
{
|
{
|
||||||
|
int prom_argc;
|
||||||
|
char *prom_argv;
|
||||||
|
|
||||||
prom_argc = fw_arg0;
|
prom_argc = fw_arg0;
|
||||||
_prom_argv = (int *) fw_arg1;
|
prom_argv = (char *) fw_arg1;
|
||||||
_prom_envp = (int *) fw_arg2;
|
_prom_envp = (int *) fw_arg2;
|
||||||
_prom_memsize = (unsigned long) fw_arg3;
|
_prom_memsize = (unsigned long) fw_arg3;
|
||||||
|
|
||||||
board_nmi_handler_setup = mips_nmi_setup;
|
board_nmi_handler_setup = mips_nmi_setup;
|
||||||
board_ejtag_handler_setup = mips_ejtag_setup;
|
board_ejtag_handler_setup = mips_ejtag_setup;
|
||||||
|
|
||||||
pr_info("\nLINUX started...\n");
|
if (prom_argc == 1)
|
||||||
prom_init_cmdline();
|
strlcat(arcs_cmdline, prom_argv, COMMAND_LINE_SIZE);
|
||||||
|
|
||||||
configure_platform();
|
configure_platform();
|
||||||
prom_meminit();
|
prom_meminit();
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,5 @@
|
||||||
|
|
||||||
#ifndef _POWERTV_INIT_H
|
#ifndef _POWERTV_INIT_H
|
||||||
#define _POWERTV_INIT_H
|
#define _POWERTV_INIT_H
|
||||||
extern int prom_argc;
|
|
||||||
extern int *_prom_argv;
|
|
||||||
extern unsigned long _prom_memsize;
|
extern unsigned long _prom_memsize;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -42,8 +42,6 @@
|
||||||
#define BOOT_MEM_SIZE KIBIBYTE(256) /* Memory reserved for bldr */
|
#define BOOT_MEM_SIZE KIBIBYTE(256) /* Memory reserved for bldr */
|
||||||
#define PHYS_MEM_START 0x10000000 /* Start of physical memory */
|
#define PHYS_MEM_START 0x10000000 /* Start of physical memory */
|
||||||
|
|
||||||
unsigned long ptv_memsize;
|
|
||||||
|
|
||||||
char __initdata cmdline[COMMAND_LINE_SIZE];
|
char __initdata cmdline[COMMAND_LINE_SIZE];
|
||||||
|
|
||||||
void __init prom_meminit(void)
|
void __init prom_meminit(void)
|
||||||
|
@ -87,9 +85,6 @@ void __init prom_meminit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Store memsize for diagnostic purposes */
|
|
||||||
ptv_memsize = memsize;
|
|
||||||
|
|
||||||
physend = PFN_ALIGN(&_end) - 0x80000000;
|
physend = PFN_ALIGN(&_end) - 0x80000000;
|
||||||
if (memsize > LOW_MEM_MAX) {
|
if (memsize > LOW_MEM_MAX) {
|
||||||
low_mem = LOW_MEM_MAX;
|
low_mem = LOW_MEM_MAX;
|
||||||
|
|
|
@ -64,9 +64,6 @@
|
||||||
#define REG_SIZE "4" /* In bytes */
|
#define REG_SIZE "4" /* In bytes */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct pt_regs die_regs;
|
|
||||||
static bool have_die_regs;
|
|
||||||
|
|
||||||
static void register_panic_notifier(void);
|
static void register_panic_notifier(void);
|
||||||
static int panic_handler(struct notifier_block *notifier_block,
|
static int panic_handler(struct notifier_block *notifier_block,
|
||||||
unsigned long event, void *cause_string);
|
unsigned long event, void *cause_string);
|
||||||
|
@ -218,24 +215,6 @@ static int panic_handler(struct notifier_block *notifier_block,
|
||||||
return NOTIFY_DONE;
|
return NOTIFY_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Platform-specific handling of oops
|
|
||||||
* @str: Pointer to the oops string
|
|
||||||
* @regs: Pointer to the oops registers
|
|
||||||
* All we do here is to save the registers for subsequent printing through
|
|
||||||
* the panic notifier.
|
|
||||||
*/
|
|
||||||
void platform_die(const char *str, const struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
/* If we already have saved registers, don't overwrite them as they
|
|
||||||
* they apply to the initial fault */
|
|
||||||
|
|
||||||
if (!have_die_regs) {
|
|
||||||
have_die_regs = true;
|
|
||||||
die_regs = *regs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Information about the RF MAC address, if one was supplied on the
|
/* Information about the RF MAC address, if one was supplied on the
|
||||||
* command line. */
|
* command line. */
|
||||||
static bool have_rfmac;
|
static bool have_rfmac;
|
||||||
|
|
|
@ -28,9 +28,6 @@
|
||||||
#include <asm/mach-powertv/asic_regs.h>
|
#include <asm/mach-powertv/asic_regs.h>
|
||||||
#include "reset.h"
|
#include "reset.h"
|
||||||
|
|
||||||
static void mips_machine_restart(char *command);
|
|
||||||
static void mips_machine_halt(void);
|
|
||||||
|
|
||||||
static void mips_machine_restart(char *command)
|
static void mips_machine_restart(char *command)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_BOOTLOADER_DRIVER
|
#ifdef CONFIG_BOOTLOADER_DRIVER
|
||||||
|
@ -44,22 +41,7 @@ static void mips_machine_restart(char *command)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mips_machine_halt(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_BOOTLOADER_DRIVER
|
|
||||||
/*
|
|
||||||
* Call the bootloader's reset function to ensure
|
|
||||||
* that persistent data is flushed before hard reset
|
|
||||||
*/
|
|
||||||
kbldr_SetCauseAndReset();
|
|
||||||
#else
|
|
||||||
writel(0x1, asic_reg_addr(watchdog));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void mips_reboot_setup(void)
|
void mips_reboot_setup(void)
|
||||||
{
|
{
|
||||||
_machine_restart = mips_machine_restart;
|
_machine_restart = mips_machine_restart;
|
||||||
_machine_halt = mips_machine_halt;
|
|
||||||
pm_power_off = mips_machine_halt;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,5 +33,4 @@ unsigned int __cpuinit get_c0_compare_int(void)
|
||||||
void __init plat_time_init(void)
|
void __init plat_time_init(void)
|
||||||
{
|
{
|
||||||
powertv_clocksource_init();
|
powertv_clocksource_init();
|
||||||
r4k_clockevent_init();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,7 +160,6 @@ static void __init prom_init_cmdline(void)
|
||||||
int argc;
|
int argc;
|
||||||
int *argv32;
|
int *argv32;
|
||||||
int i; /* Always ignore the "-c" at argv[0] */
|
int i; /* Always ignore the "-c" at argv[0] */
|
||||||
static char builtin[COMMAND_LINE_SIZE] __initdata;
|
|
||||||
|
|
||||||
if (fw_arg0 >= CKSEG0 || fw_arg1 < CKSEG0) {
|
if (fw_arg0 >= CKSEG0 || fw_arg1 < CKSEG0) {
|
||||||
/*
|
/*
|
||||||
|
@ -174,20 +173,6 @@ static void __init prom_init_cmdline(void)
|
||||||
argv32 = (int *)fw_arg1;
|
argv32 = (int *)fw_arg1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ignore all built-in args if any f/w args given */
|
|
||||||
/*
|
|
||||||
* But if built-in strings was started with '+', append them
|
|
||||||
* to command line args. If built-in was started with '-',
|
|
||||||
* ignore all f/w args.
|
|
||||||
*/
|
|
||||||
builtin[0] = '\0';
|
|
||||||
if (arcs_cmdline[0] == '+')
|
|
||||||
strcpy(builtin, arcs_cmdline + 1);
|
|
||||||
else if (arcs_cmdline[0] == '-') {
|
|
||||||
strcpy(builtin, arcs_cmdline + 1);
|
|
||||||
argc = 0;
|
|
||||||
} else if (argc <= 1)
|
|
||||||
strcpy(builtin, arcs_cmdline);
|
|
||||||
arcs_cmdline[0] = '\0';
|
arcs_cmdline[0] = '\0';
|
||||||
|
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
|
@ -201,12 +186,6 @@ static void __init prom_init_cmdline(void)
|
||||||
} else
|
} else
|
||||||
strcat(arcs_cmdline, str);
|
strcat(arcs_cmdline, str);
|
||||||
}
|
}
|
||||||
/* append saved builtin args */
|
|
||||||
if (builtin[0]) {
|
|
||||||
if (arcs_cmdline[0])
|
|
||||||
strcat(arcs_cmdline, " ");
|
|
||||||
strcat(arcs_cmdline, builtin);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int txx9_ic_disable __initdata;
|
static int txx9_ic_disable __initdata;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* init.c, Common initialization routines for NEC VR4100 series.
|
* init.c, Common initialization routines for NEC VR4100 series.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003-2008 Yoichi Yuasa <yuasa@linux-mips.org>
|
* Copyright (C) 2003-2009 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -66,9 +66,9 @@ void __init prom_init(void)
|
||||||
argv = (char **)fw_arg1;
|
argv = (char **)fw_arg1;
|
||||||
|
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
strcat(arcs_cmdline, argv[i]);
|
strlcat(arcs_cmdline, argv[i], COMMAND_LINE_SIZE);
|
||||||
if (i < (argc - 1))
|
if (i < (argc - 1))
|
||||||
strcat(arcs_cmdline, " ");
|
strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue