Commit 1079cac0 authored by Ingo Molnar's avatar Ingo Molnar

Merge commit 'v2.6.30-rc6' into tracing/core

Merge reason: we were on an -rc4 base, sync up to -rc6
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parents 5872144f 1406de8e
...@@ -281,7 +281,7 @@ ...@@ -281,7 +281,7 @@
seriously wrong while debugging, it will most often be the case seriously wrong while debugging, it will most often be the case
that you want to enable gdb to be verbose about its target that you want to enable gdb to be verbose about its target
communications. You do this prior to issuing the <constant>target communications. You do this prior to issuing the <constant>target
remote</constant> command by typing in: <constant>set remote debug 1</constant> remote</constant> command by typing in: <constant>set debug remote 1</constant>
</para> </para>
</chapter> </chapter>
<chapter id="KGDBTestSuite"> <chapter id="KGDBTestSuite">
......
...@@ -17,6 +17,12 @@ are specified on the kernel command line with the module name plus ...@@ -17,6 +17,12 @@ are specified on the kernel command line with the module name plus
usbcore.blinkenlights=1 usbcore.blinkenlights=1
Hyphens (dashes) and underscores are equivalent in parameter names, so
log_buf_len=1M print-fatal-signals=1
can also be entered as
log-buf-len=1M print_fatal_signals=1
This document may not be entirely up to date and comprehensive. The command This document may not be entirely up to date and comprehensive. The command
"modinfo -p ${modulename}" shows a current list of all parameters of a loadable "modinfo -p ${modulename}" shows a current list of all parameters of a loadable
module. Loadable modules, after being loaded into the running kernel, also module. Loadable modules, after being loaded into the running kernel, also
...@@ -345,7 +351,7 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -345,7 +351,7 @@ and is between 256 and 4096 characters. It is defined in the file
not play well with APC CPU idle - disable it if you have not play well with APC CPU idle - disable it if you have
APC and your system crashes randomly. APC and your system crashes randomly.
apic= [APIC,i386] Advanced Programmable Interrupt Controller apic= [APIC,X86-32] Advanced Programmable Interrupt Controller
Change the output verbosity whilst booting Change the output verbosity whilst booting
Format: { quiet (default) | verbose | debug } Format: { quiet (default) | verbose | debug }
Change the amount of debugging information output Change the amount of debugging information output
...@@ -702,7 +708,7 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -702,7 +708,7 @@ and is between 256 and 4096 characters. It is defined in the file
to discrete, to make X server driver able to add WB to discrete, to make X server driver able to add WB
entry later. This parameter enables that. entry later. This parameter enables that.
enable_timer_pin_1 [i386,x86-64] enable_timer_pin_1 [X86]
Enable PIN 1 of APIC timer Enable PIN 1 of APIC timer
Can be useful to work around chipset bugs Can be useful to work around chipset bugs
(in particular on some ATI chipsets). (in particular on some ATI chipsets).
...@@ -775,7 +781,7 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -775,7 +781,7 @@ and is between 256 and 4096 characters. It is defined in the file
hashdist= [KNL,NUMA] Large hashes allocated during boot hashdist= [KNL,NUMA] Large hashes allocated during boot
are distributed across NUMA nodes. Defaults on are distributed across NUMA nodes. Defaults on
for IA-64, off otherwise. for 64bit NUMA, off otherwise.
Format: 0 | 1 (for off | on) Format: 0 | 1 (for off | on)
hcl= [IA-64] SGI's Hardware Graph compatibility layer hcl= [IA-64] SGI's Hardware Graph compatibility layer
......
...@@ -39,8 +39,6 @@ Currently, these files are in /proc/sys/vm: ...@@ -39,8 +39,6 @@ Currently, these files are in /proc/sys/vm:
- nr_hugepages - nr_hugepages
- nr_overcommit_hugepages - nr_overcommit_hugepages
- nr_pdflush_threads - nr_pdflush_threads
- nr_pdflush_threads_min
- nr_pdflush_threads_max
- nr_trim_pages (only if CONFIG_MMU=n) - nr_trim_pages (only if CONFIG_MMU=n)
- numa_zonelist_order - numa_zonelist_order
- oom_dump_tasks - oom_dump_tasks
...@@ -469,32 +467,6 @@ The default value is 0. ...@@ -469,32 +467,6 @@ The default value is 0.
============================================================== ==============================================================
nr_pdflush_threads_min
This value controls the minimum number of pdflush threads.
At boot time, the kernel will create and maintain 'nr_pdflush_threads_min'
threads for the kernel's lifetime.
The default value is 2. The minimum value you can specify is 1, and
the maximum value is the current setting of 'nr_pdflush_threads_max'.
See 'nr_pdflush_threads_max' below for more information.
==============================================================
nr_pdflush_threads_max
This value controls the maximum number of pdflush threads that can be
created. The pdflush algorithm will create a new pdflush thread (up to
this maximum) if no pdflush threads have been available for >= 1 second.
The default value is 8. The minimum value you can specify is the
current value of 'nr_pdflush_threads_min' and the
maximum is 1000.
==============================================================
overcommit_memory: overcommit_memory:
This value contains a flag that enables memory overcommitment. This value contains a flag that enables memory overcommitment.
......
...@@ -113,7 +113,7 @@ versions of the sysfs interface. ...@@ -113,7 +113,7 @@ versions of the sysfs interface.
"devices" directory at /sys/subsystem/<name>/devices. "devices" directory at /sys/subsystem/<name>/devices.
If /sys/subsystem exists, /sys/bus, /sys/class and /sys/block can be If /sys/subsystem exists, /sys/bus, /sys/class and /sys/block can be
ignored. If it does not exist, you have always to scan all three ignored. If it does not exist, you always have to scan all three
places, as the kernel is free to move a subsystem from one place to places, as the kernel is free to move a subsystem from one place to
the other, as long as the devices are still reachable by the same the other, as long as the devices are still reachable by the same
subsystem name. subsystem name.
......
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 30 SUBLEVEL = 30
EXTRAVERSION = -rc4 EXTRAVERSION = -rc6
NAME = Vindictive Armadillo NAME = Vindictive Armadillo
# *DOCUMENTATION* # *DOCUMENTATION*
......
#ifndef __ALPHA_PERCPU_H #ifndef __ALPHA_PERCPU_H
#define __ALPHA_PERCPU_H #define __ALPHA_PERCPU_H
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/threads.h> #include <linux/threads.h>
#include <linux/percpu-defs.h>
/* /*
* Determine the real variable name from the name visible in the * Determine the real variable name from the name visible in the
...@@ -73,6 +75,28 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; ...@@ -73,6 +75,28 @@ extern unsigned long __per_cpu_offset[NR_CPUS];
#endif /* SMP */ #endif /* SMP */
#include <asm-generic/percpu.h> #ifdef CONFIG_SMP
#define PER_CPU_BASE_SECTION ".data.percpu"
#else
#define PER_CPU_BASE_SECTION ".data"
#endif
#ifdef CONFIG_SMP
#ifdef MODULE
#define PER_CPU_SHARED_ALIGNED_SECTION ""
#else
#define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned"
#endif
#define PER_CPU_FIRST_SECTION ".first"
#else
#define PER_CPU_SHARED_ALIGNED_SECTION ""
#define PER_CPU_FIRST_SECTION ""
#endif
#define PER_CPU_ATTRIBUTES
#endif /* __ALPHA_PERCPU_H */ #endif /* __ALPHA_PERCPU_H */
...@@ -454,6 +454,7 @@ config ARCH_MXC ...@@ -454,6 +454,7 @@ config ARCH_MXC
select ARCH_MTD_XIP select ARCH_MTD_XIP
select GENERIC_GPIO select GENERIC_GPIO
select ARCH_REQUIRE_GPIOLIB select ARCH_REQUIRE_GPIOLIB
select HAVE_CLK
help help
Support for Freescale MXC/iMX-based family of processors Support for Freescale MXC/iMX-based family of processors
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -197,7 +197,7 @@ CONFIG_MXC_PWM=y ...@@ -197,7 +197,7 @@ CONFIG_MXC_PWM=y
# #
CONFIG_CPU_32=y CONFIG_CPU_32=y
CONFIG_CPU_V6=y CONFIG_CPU_V6=y
CONFIG_CPU_32v6K=y # CONFIG_CPU_32v6K is not set
CONFIG_CPU_32v6=y CONFIG_CPU_32v6=y
CONFIG_CPU_ABRT_EV6=y CONFIG_CPU_ABRT_EV6=y
CONFIG_CPU_PABRT_NOIFAR=y CONFIG_CPU_PABRT_NOIFAR=y
......
This diff is collapsed.
...@@ -45,13 +45,15 @@ typedef struct user_fp elf_fpregset_t; ...@@ -45,13 +45,15 @@ typedef struct user_fp elf_fpregset_t;
#define EF_ARM_HASENTRY 0x00000002 /* All */ #define EF_ARM_HASENTRY 0x00000002 /* All */
#define EF_ARM_RELEXEC 0x00000001 /* All */ #define EF_ARM_RELEXEC 0x00000001 /* All */
#define R_ARM_NONE 0 #define R_ARM_NONE 0
#define R_ARM_PC24 1 #define R_ARM_PC24 1
#define R_ARM_ABS32 2 #define R_ARM_ABS32 2
#define R_ARM_CALL 28 #define R_ARM_CALL 28
#define R_ARM_JUMP24 29 #define R_ARM_JUMP24 29
#define R_ARM_V4BX 40 #define R_ARM_V4BX 40
#define R_ARM_PREL31 42 #define R_ARM_PREL31 42
#define R_ARM_MOVW_ABS_NC 43
#define R_ARM_MOVT_ABS 44
/* /*
* These are used to set parameters in the core dumps. * These are used to set parameters in the core dumps.
......
...@@ -169,6 +169,21 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex, ...@@ -169,6 +169,21 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
*(u32 *)loc = offset & 0x7fffffff; *(u32 *)loc = offset & 0x7fffffff;
break; break;
case R_ARM_MOVW_ABS_NC:
case R_ARM_MOVT_ABS:
offset = *(u32 *)loc;
offset = ((offset & 0xf0000) >> 4) | (offset & 0xfff);
offset = (offset ^ 0x8000) - 0x8000;
offset += sym->st_value;
if (ELF32_R_TYPE(rel->r_info) == R_ARM_MOVT_ABS)
offset >>= 16;
*(u32 *)loc &= 0xfff0f000;
*(u32 *)loc |= ((offset & 0xf000) << 4) |
(offset & 0x0fff);
break;
default: default:
printk(KERN_ERR "%s: unknown relocation: %u\n", printk(KERN_ERR "%s: unknown relocation: %u\n",
module->name, ELF32_R_TYPE(rel->r_info)); module->name, ELF32_R_TYPE(rel->r_info));
......
...@@ -211,7 +211,7 @@ static struct resource ide_resources[] = { ...@@ -211,7 +211,7 @@ static struct resource ide_resources[] = {
}, },
}; };
static u64 ide_dma_mask = DMA_32BIT_MASK; static u64 ide_dma_mask = DMA_BIT_MASK(32);
static struct platform_device ide_dev = { static struct platform_device ide_dev = {
.name = "palm_bk3710", .name = "palm_bk3710",
...@@ -220,7 +220,7 @@ static struct platform_device ide_dev = { ...@@ -220,7 +220,7 @@ static struct platform_device ide_dev = {
.num_resources = ARRAY_SIZE(ide_resources), .num_resources = ARRAY_SIZE(ide_resources),
.dev = { .dev = {
.dma_mask = &ide_dma_mask, .dma_mask = &ide_dma_mask,
.coherent_dma_mask = DMA_32BIT_MASK, .coherent_dma_mask = DMA_BIT_MASK(32),
}, },
}; };
......
/*
* <mach/asp.h> - DaVinci Audio Serial Port support
*/
#ifndef __ASM_ARCH_DAVINCI_ASP_H
#define __ASM_ARCH_DAVINCI_ASP_H
#include <mach/irqs.h>
/* Bases of register banks */
#define DAVINCI_ASP0_BASE 0x01E02000
#define DAVINCI_ASP1_BASE 0x01E04000
/* EDMA channels */
#define DAVINCI_DMA_ASP0_TX 2
#define DAVINCI_DMA_ASP0_RX 3
#define DAVINCI_DMA_ASP1_TX 8
#define DAVINCI_DMA_ASP1_RX 9
/* Interrupts */
#define DAVINCI_ASP0_RX_INT IRQ_MBRINT
#define DAVINCI_ASP0_TX_INT IRQ_MBXINT
#define DAVINCI_ASP1_RX_INT IRQ_MBRINT
#define DAVINCI_ASP1_TX_INT IRQ_MBXINT
#endif /* __ASM_ARCH_DAVINCI_ASP_H */
...@@ -714,7 +714,7 @@ static int __init npe_init_module(void) ...@@ -714,7 +714,7 @@ static int __init npe_init_module(void)
} }
if (!found) if (!found)
return -ENOSYS; return -ENODEV;
return 0; return 0;
} }
......
...@@ -289,12 +289,12 @@ config MACH_LITTLETON ...@@ -289,12 +289,12 @@ config MACH_LITTLETON
config MACH_TAVOREVB config MACH_TAVOREVB
bool "PXA930 Evaluation Board (aka TavorEVB)" bool "PXA930 Evaluation Board (aka TavorEVB)"
select PXA3xx select PXA3xx
select PXA930 select CPU_PXA930
config MACH_SAAR config MACH_SAAR
bool "PXA930 Handheld Platform (aka SAAR)" bool "PXA930 Handheld Platform (aka SAAR)"
select PXA3xx select PXA3xx
select PXA930 select CPU_PXA930
config MACH_ARMCORE config MACH_ARMCORE
bool "CompuLab CM-X255/CM-X270 modules" bool "CompuLab CM-X255/CM-X270 modules"
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/cacheflush.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <mach/regs-power.h> #include <mach/regs-power.h>
...@@ -39,6 +40,8 @@ static void s3c2412_cpu_suspend(void) ...@@ -39,6 +40,8 @@ static void s3c2412_cpu_suspend(void)
{ {
unsigned long tmp; unsigned long tmp;
flush_cache_all();
/* set our standby method to sleep */ /* set our standby method to sleep */
tmp = __raw_readl(S3C2412_PWRCFG); tmp = __raw_readl(S3C2412_PWRCFG);
......
...@@ -40,6 +40,8 @@ ...@@ -40,6 +40,8 @@
#define S3C64XX_PA_FB (0x77100000) #define S3C64XX_PA_FB (0x77100000)
#define S3C64XX_PA_SYSCON (0x7E00F000) #define S3C64XX_PA_SYSCON (0x7E00F000)
#define S3C64XX_PA_IIS0 (0x7F002000)
#define S3C64XX_PA_IIS1 (0x7F003000)
#define S3C64XX_PA_TIMER (0x7F006000) #define S3C64XX_PA_TIMER (0x7F006000)
#define S3C64XX_PA_IIC0 (0x7F004000) #define S3C64XX_PA_IIC0 (0x7F004000)
#define S3C64XX_PA_IIC1 (0x7F00F000) #define S3C64XX_PA_IIC1 (0x7F00F000)
......
...@@ -693,12 +693,15 @@ int imx_dma_request(int channel, const char *name) ...@@ -693,12 +693,15 @@ int imx_dma_request(int channel, const char *name)
local_irq_restore(flags); local_irq_restore(flags);
return -EBUSY; return -EBUSY;
} }
memset(imxdma, 0, sizeof(imxdma));
imxdma->name = name;
local_irq_restore(flags); /* request_irq() can block */
#ifdef CONFIG_ARCH_MX2 #ifdef CONFIG_ARCH_MX2
ret = request_irq(MXC_INT_DMACH0 + channel, dma_irq_handler, 0, "DMA", ret = request_irq(MXC_INT_DMACH0 + channel, dma_irq_handler, 0, "DMA",
NULL); NULL);
if (ret) { if (ret) {
local_irq_restore(flags); imxdma->name = NULL;
printk(KERN_CRIT "Can't register IRQ %d for DMA channel %d\n", printk(KERN_CRIT "Can't register IRQ %d for DMA channel %d\n",
MXC_INT_DMACH0 + channel, channel); MXC_INT_DMACH0 + channel, channel);
return ret; return ret;
...@@ -708,13 +711,6 @@ int imx_dma_request(int channel, const char *name) ...@@ -708,13 +711,6 @@ int imx_dma_request(int channel, const char *name)
imxdma->watchdog.data = channel; imxdma->watchdog.data = channel;
#endif #endif
imxdma->name = name;
imxdma->irq_handler = NULL;
imxdma->err_handler = NULL;
imxdma->data = NULL;
imxdma->sg = NULL;
local_irq_restore(flags);
return ret; return ret;
} }
EXPORT_SYMBOL(imx_dma_request); EXPORT_SYMBOL(imx_dma_request);
...@@ -737,10 +733,7 @@ void imx_dma_free(int channel) ...@@ -737,10 +733,7 @@ void imx_dma_free(int channel)
local_irq_save(flags); local_irq_save(flags);
/* Disable interrupts */ /* Disable interrupts */
__raw_writel(__raw_readl(DMA_BASE + DMA_DIMR) | (1 << channel), imx_dma_disable(channel);
DMA_BASE + DMA_DIMR);
__raw_writel(__raw_readl(DMA_BASE + DMA_CCR(channel)) & ~CCR_CEN,
DMA_BASE + DMA_CCR(channel));
imxdma->name = NULL; imxdma->name = NULL;
#ifdef CONFIG_ARCH_MX2 #ifdef CONFIG_ARCH_MX2
......
...@@ -124,7 +124,7 @@ static void mx3_gpio_irq_handler(u32 irq, struct irq_desc *desc) ...@@ -124,7 +124,7 @@ static void mx3_gpio_irq_handler(u32 irq, struct irq_desc *desc)
irq_stat = __raw_readl(port->base + GPIO_ISR) & irq_stat = __raw_readl(port->base + GPIO_ISR) &
__raw_readl(port->base + GPIO_IMR); __raw_readl(port->base + GPIO_IMR);
BUG_ON(!irq_stat);
mxc_gpio_irq_handler(port, irq_stat); mxc_gpio_irq_handler(port, irq_stat);
} }
#endif #endif
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
/* /*
* Base address of PBC controller, CS4 * Base address of PBC controller, CS4
*/ */
#define PBC_BASE_ADDRESS 0xEB000000 #define PBC_BASE_ADDRESS 0xf4300000
#define PBC_REG_ADDR(offset) (void __force __iomem *) \ #define PBC_REG_ADDR(offset) (void __force __iomem *) \
(PBC_BASE_ADDRESS + (offset)) (PBC_BASE_ADDRESS + (offset))
......
...@@ -70,7 +70,7 @@ SRC_ARCH = $(srctree)/arch/cris ...@@ -70,7 +70,7 @@ SRC_ARCH = $(srctree)/arch/cris
# cris object files path # cris object files path
OBJ_ARCH = $(objtree)/arch/cris OBJ_ARCH = $(objtree)/arch/cris
boot := arch/cris/$(SARCH)/boot boot := arch/cris/boot
MACHINE := arch/cris/$(SARCH) MACHINE := arch/cris/$(SARCH)
all: zImage all: zImage
...@@ -81,15 +81,15 @@ zImage Image: vmlinux ...@@ -81,15 +81,15 @@ zImage Image: vmlinux
archprepare: archprepare:
archclean: archclean:
$(Q)if [ -e arch/cris/$(SARCH)/boot ]; then \ $(Q)if [ -e arch/cris/boot ]; then \
$(MAKE) $(clean)=arch/cris/$(SARCH)/boot; \ $(MAKE) $(clean)=arch/cris/boot; \
fi fi
CLEAN_FILES += \ CLEAN_FILES += \
$(MACHINE)/boot/zImage \ $(boot)/zImage \
$(MACHINE)/boot/compressed/decompress.bin \ $(boot)/compressed/decompress.bin \
$(MACHINE)/boot/compressed/piggy.gz \ $(boot)/compressed/piggy.gz \
$(MACHINE)/boot/rescue/rescue.bin $(boot)/rescue/rescue.bin
# MRPROPER_FILES += # MRPROPER_FILES +=
......
#
# arch/cris/arch-v10/boot/Makefile
#
OBJCOPYFLAGS = -O binary --remove-section=.bss
subdir- := compressed rescue
targets := Image
$(obj)/Image: vmlinux FORCE
$(call if_changed,objcopy)
@echo ' Kernel: $@ is ready'
$(obj)/compressed/vmlinux: $(obj)/Image FORCE
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
$(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin
$(obj)/zImage: $(obj)/compressed/vmlinux
@cp $< $@
@echo ' Kernel: $@ is ready'
Creation of the self-extracting compressed kernel image (vmlinuz)
-----------------------------------------------------------------
$Id: README,v 1.1 2001/12/17 13:59:27 bjornw Exp $
This can be slightly confusing because it's a process with many steps.
The kernel object built by the arch/etrax100/Makefile, vmlinux, is split
by that makefile into text and data binary files, vmlinux.text and
vmlinux.data.
Those files together with a ROM filesystem can be catted together and
burned into a flash or executed directly at the DRAM origin.
They can also be catted together and compressed with gzip, which is what
happens in this makefile. Together they make up piggy.img.
The decompressor is built into the file decompress.o. It is turned into
the binary file decompress.bin, which is catted together with piggy.img
into the file vmlinuz. It can be executed in an arbitrary place in flash.
Be careful - it assumes some things about free locations in DRAM. It
assumes the DRAM starts at 0x40000000 and that it is at least 8 MB,
so it puts its code at 0x40700000, and initial stack at 0x40800000.
-Bjorn
/*
* misc.c
*
* This is a collection of several routines from gzip-1.0.3
* adapted for Linux.
*
* malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
* puts by Nick Holloway 1993, better puts by Martin Mares 1995
* adaptation for Linux/CRIS Axis Communications AB, 1999
*
*/
/* where the piggybacked kernel image expects itself to live.
* it is the same address we use when we network load an uncompressed
* image into DRAM, and it is the address the kernel is linked to live
* at by vmlinux.lds.S
*/
#define KERNEL_LOAD_ADR 0x40004000
#include <linux/types.h>
#include <arch/svinto.h>
/*
* gzip declarations
*/
#define OF(args) args
#define STATIC static
void *memset(void *s, int c, size_t n);
void *memcpy(void *__dest, __const void *__src, size_t __n);
#define memzero(s, n) memset((s), 0, (n))
typedef unsigned char uch;
typedef unsigned short ush;
typedef unsigned long ulg;
#define WSIZE 0x8000 /* Window size must be at least 32k, */
/* and a power of two */
static uch *inbuf; /* input buffer */
static uch window[WSIZE]; /* Sliding window buffer */
unsigned inptr = 0; /* index of next byte to be processed in inbuf
* After decompression it will contain the
* compressed size, and head.S will read it.
*/
static unsigned outcnt = 0; /* bytes in output buffer */
/* gzip flag byte */
#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
#define COMMENT 0x10 /* bit 4 set: file comment present */
#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
#define RESERVED 0xC0 /* bit 6,7: reserved */
#define get_byte() (inbuf[inptr++])
/* Diagnostic functions */
#ifdef DEBUG
# define Assert(cond, msg) do { \
if (!(cond)) \
error(msg); \
} while (0)
# define Trace(x) fprintf x
# define Tracev(x) do { \
if (verbose) \
fprintf x; \
} while (0)
# define Tracevv(x) do { \
if (verbose > 1) \
fprintf x; \
} while (0)
# define Tracec(c, x) do { \
if (verbose && (c)) \
fprintf x; \
} while (0)
# define Tracecv(c, x) do { \
if (verbose > 1 && (c)) \
fprintf x; \
} while (0)
#else
# define Assert(cond, msg)
# define Trace(x)
# define Tracev(x)
# define Tracevv(x)
# define Tracec(c, x)
# define Tracecv(c, x)
#endif
static void flush_window(void);
static void error(char *m);
extern char *input_data; /* lives in head.S */
static long bytes_out = 0;
static uch *output_data;
static unsigned long output_ptr = 0;
static void puts(const char *);
/* the "heap" is put directly after the BSS ends, at end */
extern int _end;
static long free_mem_ptr = (long)&_end;
static long free_mem_end_ptr;
#include "../../../../../lib/inflate.c"
/* decompressor info and error messages to serial console */
static void
puts(const char *s)
{
#ifndef CONFIG_ETRAX_DEBUG_PORT_NULL
while (*s) {
#ifdef CONFIG_ETRAX_DEBUG_PORT0
while (!(*R_SERIAL0_STATUS & (1 << 5))) ;
*R_SERIAL0_TR_DATA = *s++;
#endif
#ifdef CONFIG_ETRAX_DEBUG_PORT1
while (!(*R_SERIAL1_STATUS & (1 << 5))) ;
*R_SERIAL1_TR_DATA = *s++;
#endif
#ifdef CONFIG_ETRAX_DEBUG_PORT2
while (!(*R_SERIAL2_STATUS & (1 << 5))) ;
*R_SERIAL2_TR_DATA = *s++;
#endif
#ifdef CONFIG_ETRAX_DEBUG_PORT3
while (!(*R_SERIAL3_STATUS & (1 << 5))) ;
*R_SERIAL3_TR_DATA = *s++;
#endif
}
#endif
}
void *memset(void *s, int c, size_t n)
{
int i;
char *ss = (char *)s;
for (i = 0; i < n; i++)
ss[i] = c;
return s;
}
void *memcpy(void *__dest, __const void *__src, size_t __n)
{
int i;
char *d = (char *)__dest, *s = (char *)__src;
for (i = 0; i < __n; i++)
d[i] = s[i];
return __dest;
}
/* ===========================================================================
* Write the output window window[0..outcnt-1] and update crc and bytes_out.
* (Used for the decompressed data only.)
*/
static void flush_window(void)
{
ulg c = crc; /* temporary variable */
unsigned n;
uch *in, *out, ch;
in = window;
out = &output_data[output_ptr];
for (n = 0; n < outcnt; n++) {
ch = *out = *in;
out++;
in++;
c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
}
crc = c;
bytes_out += (ulg)outcnt;
output_ptr += (ulg)outcnt;
outcnt = 0;
}
static void error(char *x)
{
puts("\n\n");
puts(x);
puts("\n\n -- System halted\n");
while (1); /* Halt */
}
void setup_normal_output_buffer(void)
{
output_data = (char *)KERNEL_LOAD_ADR;
}
void decompress_kernel(void)
{
char revision;
/* input_data is set in head.S */
inbuf = input_data;
#ifdef CONFIG_ETRAX_DEBUG_PORT0
*R_SERIAL0_XOFF = 0;
*R_SERIAL0_BAUD = 0x99;
*R_SERIAL0_TR_CTRL = 0x40;
#endif
#ifdef CONFIG_ETRAX_DEBUG_PORT1
*R_SERIAL1_XOFF = 0;
*R_SERIAL1_BAUD = 0x99;
*R_SERIAL1_TR_CTRL = 0x40;
#endif
#ifdef CONFIG_ETRAX_DEBUG_PORT2
*R_GEN_CONFIG = 0x08;
*R_SERIAL2_XOFF = 0;
*R_SERIAL2_BAUD = 0x99;
*R_SERIAL2_TR_CTRL = 0x40;
#endif
#ifdef CONFIG_ETRAX_DEBUG_PORT3
*R_GEN_CONFIG = 0x100;
*R_SERIAL3_XOFF = 0;
*R_SERIAL3_BAUD = 0x99;
*R_SERIAL3_TR_CTRL = 0x40;
#endif
setup_normal_output_buffer();
makecrc();
__asm__ volatile ("move $vr,%0" : "=rm" (revision));
if (revision < 10) {
puts("You need an ETRAX 100LX to run linux 2.6\n");
while (1);
}
puts("Uncompressing Linux...\n");
gunzip();
puts("Done. Now booting the kernel.\n");
}
...@@ -536,10 +536,10 @@ multiple_interrupt: ...@@ -536,10 +536,10 @@ multiple_interrupt:
movem $r13, [$sp] movem $r13, [$sp]
push $r10 ; push orig_r10 push $r10 ; push orig_r10
clear.d [$sp=$sp-4] ; frametype == 0, normal frame clear.d [$sp=$sp-4] ; frametype == 0, normal frame
move.d $sp, $r10 move.d $sp, $r10
jsr do_multiple_IRQ jsr do_multiple_IRQ
jump ret_from_intr jump ret_from_intr
do_sigtrap: do_sigtrap:
...@@ -585,7 +585,7 @@ _ugdb_handle_breakpoint: ...@@ -585,7 +585,7 @@ _ugdb_handle_breakpoint:
pop $r0 ; Restore r0. pop $r0 ; Restore r0.
ba do_sigtrap ; SIGTRAP the offending process. ba do_sigtrap ; SIGTRAP the offending process.
pop $dccr ; Restore dccr in delay slot. pop $dccr ; Restore dccr in delay slot.
.global kernel_execve .global kernel_execve
kernel_execve: kernel_execve:
move.d __NR_execve, $r9 move.d __NR_execve, $r9
...@@ -929,6 +929,14 @@ sys_call_table: ...@@ -929,6 +929,14 @@ sys_call_table:
.long sys_fallocate .long sys_fallocate
.long sys_timerfd_settime /* 325 */ .long sys_timerfd_settime /* 325 */
.long sys_timerfd_gettime .long sys_timerfd_gettime
.long sys_signalfd4
.long sys_eventfd2
.long sys_epoll_create1
.long sys_dup3 /* 330 */
.long sys_pipe2
.long sys_inotify_init1
.long sys_preadv
.long sys_pwritev
/* /*
* NOTE!! This doesn't have to be exact - we just have * NOTE!! This doesn't have to be exact - we just have
......
#
# arch/cris/arch-v32/boot/compressed/Makefile
#
asflags-y += -I$(srctree)/include/asm/mach/ -I$(srctree)/include/asm/arch
ccflags-y += -O2 -I$(srctree)/include/asm/mach/ -I$(srctree)/include/asm/arch
ldflags-y += -T$(srctree)/$(src)/decompress.lds
OBJECTS = $(obj)/head.o $(obj)/misc.o
OBJCOPYFLAGS = -O binary --remove-section=.bss
quiet_cmd_image = BUILD $@
cmd_image = cat $(obj)/decompress.bin $(obj)/piggy.gz > $@
targets := vmlinux piggy.gz decompress.o decompress.bin
$(obj)/decompress.o: $(OBJECTS) FORCE
$(call if_changed,ld)
$(obj)/decompress.bin: $(obj)/decompress.o FORCE
$(call if_changed,objcopy)
$(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE
$(call if_changed,image)
$(obj)/piggy.gz: $(obj)/../Image FORCE
$(call if_changed,gzip)
#
# Makefile for rescue (bootstrap) code
#
CC = gcc-cris -mlinux -march=v32 $(LINUXINCLUDE)
ccflags-y += -O2 -I $(srctree)/include/asm/arch/mach/ \
-I $(srctree)/include/asm/arch
asflags-y += -I $(srctree)/include/asm/arch/mach/ -I $(srctree)/include/asm/arch
LD = gcc-cris -mlinux -march=v32 -nostdlib
ldflags-y += -T $(srctree)/$(src)/rescue.lds
LDPOSTFLAGS = -lgcc
OBJCOPYFLAGS = -O binary --remove-section=.bss
obj-$(CONFIG_ETRAX_AXISFLASHMAP) = head.o
OBJECT := $(obj)/head.o
targets := rescue.o rescue.bin
quiet_cmd_ldlibgcc = LD $@
cmd_ldlibgcc = $(LD) $(LDFLAGS) $(filter-out FORCE,$^) $(LDPOSTFLAGS) -o $@
$(obj)/rescue.o: $(OBJECTS) FORCE
$(call if_changed,ldlibgcc)
$(obj)/rescue.bin: $(obj)/rescue.o FORCE
$(call if_changed,objcopy)
cp -p $(obj)/rescue.bin $(objtree)
...@@ -681,7 +681,7 @@ static int virtual_gpio_ioctl(struct file *file, unsigned int cmd, ...@@ -681,7 +681,7 @@ static int virtual_gpio_ioctl(struct file *file, unsigned int cmd,
shadow |= ~readl(dir_oe[priv->minor]) | shadow |= ~readl(dir_oe[priv->minor]) |
(arg & changeable_bits[priv->minor]); (arg & changeable_bits[priv->minor]);
i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow)); i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow));
spin_lock_irqrestore(&gpio_lock, flags); spin_unlock_irqrestore(&gpio_lock, flags);
break; break;
case IO_CLRBITS: case IO_CLRBITS:
spin_lock_irqsave(&gpio_lock, flags); spin_lock_irqsave(&gpio_lock, flags);
...@@ -690,7 +690,7 @@ static int virtual_gpio_ioctl(struct file *file, unsigned int cmd, ...@@ -690,7 +690,7 @@ static int virtual_gpio_ioctl(struct file *file, unsigned int cmd,
shadow |= ~readl(dir_oe[priv->minor]) & shadow |= ~readl(dir_oe[priv->minor]) &
~(arg & changeable_bits[priv->minor]); ~(arg & changeable_bits[priv->minor]);
i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow)); i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow));
spin_lock_irqrestore(&gpio_lock, flags); spin_unlock_irqrestore(&gpio_lock, flags);
break; break;
case IO_HIGHALARM: case IO_HIGHALARM:
/* Set alarm when bits with 1 in arg go high. */ /* Set alarm when bits with 1 in arg go high. */
......
...@@ -9,8 +9,6 @@ obj-y := entry.o traps.o irq.o debugport.o \ ...@@ -9,8 +9,6 @@ obj-y := entry.o traps.o irq.o debugport.o \
process.o ptrace.o setup.o signal.o traps.o time.o \ process.o ptrace.o setup.o signal.o traps.o time.o \
cache.o cacheflush.o cache.o cacheflush.o
obj-$(CONFIG_ETRAXFS_SIM) += vcs_hook.o
obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_ETRAX_KGDB) += kgdb.o kgdb_asm.o obj-$(CONFIG_ETRAX_KGDB) += kgdb.o kgdb_asm.o
obj-$(CONFIG_ETRAX_FAST_TIMER) += fasttimer.o obj-$(CONFIG_ETRAX_FAST_TIMER) += fasttimer.o
......
...@@ -852,6 +852,14 @@ sys_call_table: ...@@ -852,6 +852,14 @@ sys_call_table:
.long sys_fallocate .long sys_fallocate
.long sys_timerfd_settime /* 325 */ .long sys_timerfd_settime /* 325 */
.long sys_timerfd_gettime .long sys_timerfd_gettime
.long sys_signalfd4
.long sys_eventfd2
.long sys_epoll_create1
.long sys_dup3 /* 330 */
.long sys_pipe2
.long sys_inotify_init1
.long sys_preadv
.long sys_pwritev
/* /*
* NOTE!! This doesn't have to be exact - we just have * NOTE!! This doesn't have to be exact - we just have
......
# #
# arch/cris/arch-v32/boot/Makefile # arch/cris/boot/Makefile
# #
OBJCOPYFLAGS = -O binary -R .note -R .comment objcopyflags-$(CONFIG_ETRAX_ARCH_V10) += -R .note -R .comment
objcopyflags-$(CONFIG_ETRAX_ARCH_V32) += --remove-section=.bss
OBJCOPYFLAGS = -O binary $(objcopyflags-y)
subdir- := compressed rescue subdir- := compressed rescue
targets := Image targets := Image
......
# #
# arch/cris/arch-v10/boot/compressed/Makefile # arch/cris/boot/compressed/Makefile
# #
asflags-y += $(LINUXINCLUDE) asflags-y += $(LINUXINCLUDE)
ccflags-y += -O2 $(LINUXINCLUDE) ccflags-y += -O2 $(LINUXINCLUDE)
ldflags-y += -T $(srctree)/$(src)/decompress.lds
OBJECTS = $(obj)/head.o $(obj)/misc.o # asflags-$(CONFIG_ETRAX_ARCH_V32) += -I$(srctree)/include/asm/mach \
# -I$(srctree)/include/asm/arch
# ccflags-$(CONFIG_ETRAX_ARCH_V32) += -O2 -I$(srctree)/include/asm/mach
# -I$(srctree)/include/asm/arch
arch-$(CONFIG_ETRAX_ARCH_V10) = v10
arch-$(CONFIG_ETRAX_ARCH_V32) = v32
ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
OBJECTS-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o
OBJECTS-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o
OBJECTS= $(OBJECTS-y) $(obj)/misc.o
OBJCOPYFLAGS = -O binary --remove-section=.bss OBJCOPYFLAGS = -O binary --remove-section=.bss
quiet_cmd_image = BUILD $@ quiet_cmd_image = BUILD $@
...@@ -24,4 +36,3 @@ $(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE ...@@ -24,4 +36,3 @@ $(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE
$(obj)/piggy.gz: $(obj)/../Image FORCE $(obj)/piggy.gz: $(obj)/../Image FORCE
$(call if_changed,gzip) $(call if_changed,gzip)
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
beq dram_init_finished beq dram_init_finished
nop nop
#include "../../lib/dram_init.S" #include "../../arch-v10/lib/dram_init.S"
dram_init_finished: dram_init_finished:
...@@ -123,4 +123,4 @@ _cmd_line_magic: ...@@ -123,4 +123,4 @@ _cmd_line_magic:
.dword 0 .dword 0
_cmd_line_addr: _cmd_line_addr:
.dword 0 .dword 0
#include "../../lib/hw_settings.S" #include "../../arch-v10/lib/hw_settings.S"
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
.globl input_data .globl input_data
.text .text
_start: start:
di di
;; Start clocks for used blocks. ;; Start clocks for used blocks.
...@@ -29,9 +29,9 @@ _start: ...@@ -29,9 +29,9 @@ _start:
nop nop
#if defined CONFIG_ETRAXFS #if defined CONFIG_ETRAXFS
#include "../../mach-fs/dram_init.S" #include "../../arch-v32/mach-fs/dram_init.S"
#elif defined CONFIG_CRIS_MACH_ARTPEC3 #elif defined CONFIG_CRIS_MACH_ARTPEC3
#include "../../mach-a3/dram_init.S" #include "../../arch-v32/mach-a3/dram_init.S"
#else #else
#error Only ETRAXFS and ARTPEC-3 supported! #error Only ETRAXFS and ARTPEC-3 supported!
#endif #endif
...@@ -137,9 +137,9 @@ _boot_source: ...@@ -137,9 +137,9 @@ _boot_source:
.dword 0 .dword 0
#if defined CONFIG_ETRAXFS #if defined CONFIG_ETRAXFS
#include "../../mach-fs/hw_settings.S" #include "../../arch-v32/mach-fs/hw_settings.S"
#elif defined CONFIG_CRIS_MACH_ARTPEC3 #elif defined CONFIG_CRIS_MACH_ARTPEC3
#include "../../mach-a3/hw_settings.S" #include "../../arch-v32/mach-a3/hw_settings.S"
#else #else
#error Only ETRAXFS and ARTPEC-3 supported! #error Only ETRAXFS and ARTPEC-3 supported!
#endif #endif
...@@ -18,8 +18,9 @@ ...@@ -18,8 +18,9 @@
#define KERNEL_LOAD_ADR 0x40004000 #define KERNEL_LOAD_ADR 0x40004000
#include <linux/types.h> #include <linux/types.h>
#ifdef CONFIG_ETRAX_ARCH_V32
#include <hwregs/reg_rdwr.h> #include <hwregs/reg_rdwr.h>
#include <hwregs/reg_map.h> #include <hwregs/reg_map.h>
#include <hwregs/ser_defs.h> #include <hwregs/ser_defs.h>
...@@ -27,6 +28,9 @@ ...@@ -27,6 +28,9 @@
#ifdef CONFIG_CRIS_MACH_ARTPEC3 #ifdef CONFIG_CRIS_MACH_ARTPEC3
#include <hwregs/clkgen_defs.h> #include <hwregs/clkgen_defs.h>
#endif #endif
#else
#include <arch/svinto.h>
#endif
/* /*
* gzip declarations * gzip declarations
...@@ -35,12 +39,10 @@ ...@@ -35,12 +39,10 @@
#define OF(args) args #define OF(args) args
#define STATIC static #define STATIC static
void* memset(void* s, int c, size_t n); void *memset(void *s, int c, size_t n);
void* memcpy(void* __dest, __const void* __src, void *memcpy(void *__dest, __const void *__src, size_t __n);
size_t __n);
#define memzero(s, n) memset ((s), 0, (n))
#define memzero(s, n) memset((s), 0, (n))
typedef unsigned char uch; typedef unsigned char uch;
typedef unsigned short ush; typedef unsigned short ush;
...@@ -68,27 +70,43 @@ static unsigned outcnt = 0; /* bytes in output buffer */ ...@@ -68,27 +70,43 @@ static unsigned outcnt = 0; /* bytes in output buffer */
#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
#define RESERVED 0xC0 /* bit 6,7: reserved */ #define RESERVED 0xC0 /* bit 6,7: reserved */
#define get_byte() inbuf[inptr++] #define get_byte() (inbuf[inptr++])
/* Diagnostic functions */ /* Diagnostic functions */
#ifdef DEBUG #ifdef DEBUG
# define Assert(cond,msg) {if(!(cond)) error(msg);} # define Assert(cond, msg) do { \
if (!(cond)) \
error(msg); \
} while (0)
# define Trace(x) fprintf x # define Trace(x) fprintf x
# define Tracev(x) {if (verbose) fprintf x ;} # define Tracev(x) do { \
# define Tracevv(x) {if (verbose>1) fprintf x ;} if (verbose) \
# define Tracec(c,x) {if (verbose && (c)) fprintf x ;} fprintf x; \
# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} } while (0)
# define Tracevv(x) do { \
if (verbose > 1) \
fprintf x; \
} while (0)
# define Tracec(c, x) do { \
if (verbose && (c)) \
fprintf x; \
} while (0)
# define Tracecv(c, x) do { \
if (verbose > 1 && (c)) \
fprintf x; \
} while (0)
#else #else
# define Assert(cond,msg) # define Assert(cond, msg)
# define Trace(x) # define Trace(x)
# define Tracev(x) # define Tracev(x)
# define Tracevv(x) # define Tracevv(x)
# define Tracec(c,x) # define Tracec(c, x)
# define Tracecv(c,x) # define Tracecv(c, x)
#endif #endif
static void flush_window(void); static void flush_window(void);
static void error(char *m); static void error(char *m);
static void puts(const char *);
extern char *input_data; /* lives in head.S */ extern char *input_data; /* lives in head.S */
...@@ -96,10 +114,6 @@ static long bytes_out; ...@@ -96,10 +114,6 @@ static long bytes_out;
static uch *output_data; static uch *output_data;
static unsigned long output_ptr; static unsigned long output_ptr;
static void error(char *m);
static void puts(const char *);
/* the "heap" is put directly after the BSS ends, at end */ /* the "heap" is put directly after the BSS ends, at end */
extern int _end; extern int _end;
...@@ -110,8 +124,8 @@ static long free_mem_end_ptr; ...@@ -110,8 +124,8 @@ static long free_mem_end_ptr;
/* decompressor info and error messages to serial console */ /* decompressor info and error messages to serial console */
static inline void #ifdef CONFIG_ETRAX_ARCH_V32
serout(const char *s, reg_scope_instances regi_ser) static inline void serout(const char *s, reg_scope_instances regi_ser)
{ {
reg_ser_rs_stat_din rs; reg_ser_rs_stat_din rs;
reg_ser_rw_dout dout = {.data = *s}; reg_ser_rw_dout dout = {.data = *s};
...@@ -123,23 +137,47 @@ serout(const char *s, reg_scope_instances regi_ser) ...@@ -123,23 +137,47 @@ serout(const char *s, reg_scope_instances regi_ser)
REG_WR(ser, regi_ser, rw_dout, dout); REG_WR(ser, regi_ser, rw_dout, dout);
} }
#endif
static void static void puts(const char *s)
puts(const char *s)
{ {
#ifndef CONFIG_ETRAX_DEBUG_PORT_NULL #ifndef CONFIG_ETRAX_DEBUG_PORT_NULL
while (*s) { while (*s) {
#ifdef CONFIG_ETRAX_DEBUG_PORT0 #ifdef CONFIG_ETRAX_DEBUG_PORT0
#ifdef CONFIG_ETRAX_ARCH_V32
serout(s, regi_ser0); serout(s, regi_ser0);
#else
while (!(*R_SERIAL0_STATUS & (1 << 5)))
;
*R_SERIAL0_TR_DATA = *s++;
#endif
#endif #endif
#ifdef CONFIG_ETRAX_DEBUG_PORT1 #ifdef CONFIG_ETRAX_DEBUG_PORT1
#ifdef CONFIG_ETRAX_ARCH_V32
serout(s, regi_ser1); serout(s, regi_ser1);
#else
while (!(*R_SERIAL1_STATUS & (1 << 5)))
;
*R_SERIAL1_TR_DATA = *s++;
#endif
#endif #endif
#ifdef CONFIG_ETRAX_DEBUG_PORT2 #ifdef CONFIG_ETRAX_DEBUG_PORT2
#ifdef CONFIG_ETRAX_ARCH_V32
serout(s, regi_ser2); serout(s, regi_ser2);
#else
while (!(*R_SERIAL2_STATUS & (1 << 5)))
;
*R_SERIAL2_TR_DATA = *s++;
#endif
#endif #endif
#ifdef CONFIG_ETRAX_DEBUG_PORT3 #ifdef CONFIG_ETRAX_DEBUG_PORT3
#ifdef CONFIG_ETRAX_ARCH_V32
serout(s, regi_ser3); serout(s, regi_ser3);
#else
while (!(*R_SERIAL3_STATUS & (1 << 5)))
;
*R_SERIAL3_TR_DATA = *s++;
#endif
#endif #endif
*s++; *s++;
} }
...@@ -147,8 +185,7 @@ puts(const char *s) ...@@ -147,8 +185,7 @@ puts(const char *s)
#endif #endif
} }
void* void *memset(void *s, int c, size_t n)
memset(void* s, int c, size_t n)
{ {
int i; int i;
char *ss = (char*)s; char *ss = (char*)s;
...@@ -158,14 +195,13 @@ memset(void* s, int c, size_t n) ...@@ -158,14 +195,13 @@ memset(void* s, int c, size_t n)
return s; return s;
} }
void* void *memcpy(void *__dest, __const void *__src, size_t __n)
memcpy(void* __dest, __const void* __src,
size_t __n)
{ {
int i; int i;
char *d = (char *)__dest, *s = (char *)__src; char *d = (char *)__dest, *s = (char *)__src;
for (i=0;i<__n;i++) d[i] = s[i]; for (i = 0; i < __n; i++)
d[i] = s[i];
return __dest; return __dest;
} }
...@@ -175,43 +211,42 @@ memcpy(void* __dest, __const void* __src, ...@@ -175,43 +211,42 @@ memcpy(void* __dest, __const void* __src,
* (Used for the decompressed data only.) * (Used for the decompressed data only.)
*/ */
static void static void flush_window(void)
flush_window()
{ {
ulg c = crc; /* temporary variable */ ulg c = crc; /* temporary variable */
unsigned n; unsigned n;
uch *in, *out, ch; uch *in, *out, ch;
in = window; in = window;
out = &output_data[output_ptr]; out = &output_data[output_ptr];
for (n = 0; n < outcnt; n++) { for (n = 0; n < outcnt; n++) {
ch = *out++ = *in++; ch = *out = *in;
c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8); out++;
} in++;
crc = c; c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
bytes_out += (ulg)outcnt; }
output_ptr += (ulg)outcnt; crc = c;
outcnt = 0; bytes_out += (ulg)outcnt;
output_ptr += (ulg)outcnt;
outcnt = 0;
} }
static void static void error(char *x)
error(char *x)
{ {
puts("\r\n\n"); puts("\n\n");
puts(x); puts(x);
puts("\r\n\n -- System halted\n"); puts("\n\n -- System halted\n");
while(1); /* Halt */ while(1); /* Halt */
} }
void void setup_normal_output_buffer(void)
setup_normal_output_buffer(void)
{ {
output_data = (char *)KERNEL_LOAD_ADR; output_data = (char *)KERNEL_LOAD_ADR;
} }
static inline void #ifdef CONFIG_ETRAX_ARCH_V32
serial_setup(reg_scope_instances regi_ser) static inline void serial_setup(reg_scope_instances regi_ser)
{ {
reg_ser_rw_xoff xoff; reg_ser_rw_xoff xoff;
reg_ser_rw_tr_ctrl tr_ctrl; reg_ser_rw_tr_ctrl tr_ctrl;
...@@ -252,12 +287,16 @@ serial_setup(reg_scope_instances regi_ser) ...@@ -252,12 +287,16 @@ serial_setup(reg_scope_instances regi_ser)
REG_WR(ser, regi_ser, rw_rec_ctrl, rec_ctrl); REG_WR(ser, regi_ser, rw_rec_ctrl, rec_ctrl);
REG_WR(ser, regi_ser, rw_rec_baud_div, rec_baud); REG_WR(ser, regi_ser, rw_rec_baud_div, rec_baud);
} }
#endif
void void decompress_kernel(void)
decompress_kernel(void)
{ {
char revision; char revision;
char compile_rev;
#ifdef CONFIG_ETRAX_ARCH_V32
/* Need at least a CRISv32 to run. */
compile_rev = 32;
#if defined(CONFIG_ETRAX_DEBUG_PORT1) || \ #if defined(CONFIG_ETRAX_DEBUG_PORT1) || \
defined(CONFIG_ETRAX_DEBUG_PORT2) || \ defined(CONFIG_ETRAX_DEBUG_PORT2) || \
defined(CONFIG_ETRAX_DEBUG_PORT3) defined(CONFIG_ETRAX_DEBUG_PORT3)
...@@ -277,6 +316,7 @@ decompress_kernel(void) ...@@ -277,6 +316,7 @@ decompress_kernel(void)
hwprot = REG_RD(pinmux, regi_pinmux, rw_hwprot); hwprot = REG_RD(pinmux, regi_pinmux, rw_hwprot);
#endif #endif
#ifdef CONFIG_ETRAX_DEBUG_PORT0 #ifdef CONFIG_ETRAX_DEBUG_PORT0
serial_setup(regi_ser0); serial_setup(regi_ser0);
#endif #endif
...@@ -300,19 +340,52 @@ decompress_kernel(void) ...@@ -300,19 +340,52 @@ decompress_kernel(void)
/* input_data is set in head.S */ /* input_data is set in head.S */
inbuf = input_data; inbuf = input_data;
#else /* CRISv10 */
/* Need at least a crisv10 to run. */
compile_rev = 10;
/* input_data is set in head.S */
inbuf = input_data;
#ifdef CONFIG_ETRAX_DEBUG_PORT0
*R_SERIAL0_XOFF = 0;
*R_SERIAL0_BAUD = 0x99;
*R_SERIAL0_TR_CTRL = 0x40;
#endif
#ifdef CONFIG_ETRAX_DEBUG_PORT1
*R_SERIAL1_XOFF = 0;
*R_SERIAL1_BAUD = 0x99;
*R_SERIAL1_TR_CTRL = 0x40;
#endif
#ifdef CONFIG_ETRAX_DEBUG_PORT2
*R_GEN_CONFIG = 0x08;
*R_SERIAL2_XOFF = 0;
*R_SERIAL2_BAUD = 0x99;
*R_SERIAL2_TR_CTRL = 0x40;
#endif
#ifdef CONFIG_ETRAX_DEBUG_PORT3
*R_GEN_CONFIG = 0x100;
*R_SERIAL3_XOFF = 0;
*R_SERIAL3_BAUD = 0x99;
*R_SERIAL3_TR_CTRL = 0x40;
#endif
#endif
setup_normal_output_buffer(); setup_normal_output_buffer();
makecrc(); makecrc();
__asm__ volatile ("move $vr,%0" : "=rm" (revision)); __asm__ volatile ("move $vr,%0" : "=rm" (revision));
if (revision < 32) if (revision < compile_rev) {
{ #ifdef CONFIG_ETRAX_ARCH_V32
puts("You need an ETRAX FS to run Linux 2.6/crisv32.\r\n"); puts("You need an ETRAX FS to run Linux 2.6/crisv32\n");
#else
puts("You need an ETRAX 100LX to run linux 2.6\n");
#endif
while(1); while(1);
} }
puts("Uncompressing Linux...\r\n"); puts("Uncompressing Linux...\n");
gunzip(); gunzip();
puts("Done. Now booting the kernel.\r\n"); puts("Done. Now booting the kernel\n");
} }
...@@ -2,16 +2,26 @@ ...@@ -2,16 +2,26 @@
# Makefile for rescue (bootstrap) code # Makefile for rescue (bootstrap) code
# #
ccflags-y += -O2 $(LINUXINCLUDE) # CC = gcc-cris -mlinux -march=v32 $(LINUXINCLUDE)
# ccflags-$(CONFIG_ETRAX_ARCH_V32) += -I$(srctree)/include/asm/arch/mach/ \
# -I$(srctree)/include/asm/arch
# asflags-y += -I $(srctree)/include/asm/arch/mach/ -I $(srctree)/include/asm/arch
# LD = gcc-cris -mlinux -march=v32 -nostdlib
asflags-y += $(LINUXINCLUDE) asflags-y += $(LINUXINCLUDE)
ldflags-y += -T $(srctree)/$(src)/rescue.lds ccflags-y += -O2 $(LINUXINCLUDE)
arch-$(CONFIG_ETRAX_ARCH_V10) = v10
arch-$(CONFIG_ETRAX_ARCH_V32) = v32
ldflags-y += -T $(srctree)/$(src)/rescue_$(arch-y).lds
OBJCOPYFLAGS = -O binary --remove-section=.bss OBJCOPYFLAGS = -O binary --remove-section=.bss
obj-$(CONFIG_ETRAX_AXISFLASHMAP) = head.o obj-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o
OBJECT := $(obj)/head.o obj-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o
OBJECTS := $(obj-y)
targets := rescue.o rescue.bin targets := rescue.o rescue.bin
$(obj)/rescue.o: $(OBJECT) FORCE $(obj)/rescue.o: $(OBJECTS) FORCE
$(call if_changed,ld) $(call if_changed,ld)
$(obj)/rescue.bin: $(obj)/rescue.o FORCE $(obj)/rescue.bin: $(obj)/rescue.o FORCE
...@@ -26,6 +36,7 @@ $(obj)/testrescue.bin: $(obj)/testrescue.o ...@@ -26,6 +36,7 @@ $(obj)/testrescue.bin: $(obj)/testrescue.o
dd if=testrescue_tmp.bin of=$(obj)/testrescue.bin bs=1 count=784 dd if=testrescue_tmp.bin of=$(obj)/testrescue.bin bs=1 count=784
rm tr.bin tmp2423 testrescue_tmp.bin rm tr.bin tmp2423 testrescue_tmp.bin
$(obj)/kimagerescue.bin: $(obj)/kimagerescue.o $(obj)/kimagerescue.bin: $(obj)/kimagerescue.o
$(OBJCOPY) $(OBJCOPYFLAGS) $(obj)/kimagerescue.o ktr.bin $(OBJCOPY) $(OBJCOPYFLAGS) $(obj)/kimagerescue.o ktr.bin
# Pad it to 784 bytes, that's what the rescue loader expects # Pad it to 784 bytes, that's what the rescue loader expects
...@@ -33,3 +44,4 @@ $(obj)/kimagerescue.bin: $(obj)/kimagerescue.o ...@@ -33,3 +44,4 @@ $(obj)/kimagerescue.bin: $(obj)/kimagerescue.o
cat ktr.bin tmp2423 >kimagerescue_tmp.bin cat ktr.bin tmp2423 >kimagerescue_tmp.bin
dd if=kimagerescue_tmp.bin of=$(obj)/kimagerescue.bin bs=1 count=784 dd if=kimagerescue_tmp.bin of=$(obj)/kimagerescue.bin bs=1 count=784
rm ktr.bin tmp2423 kimagerescue_tmp.bin rm ktr.bin tmp2423 kimagerescue_tmp.bin
...@@ -155,7 +155,7 @@ no_newjump: ...@@ -155,7 +155,7 @@ no_newjump:
#endif #endif
;; We need to setup the bus registers before we start using the DRAM ;; We need to setup the bus registers before we start using the DRAM
#include "../../lib/dram_init.S" #include "../../../arch-v10/lib/dram_init.S"
;; we now should go through the checksum-table and check the listed ;; we now should go through the checksum-table and check the listed
;; partitions for errors. ;; partitions for errors.
......
...@@ -281,7 +281,7 @@ ...@@ -281,7 +281,7 @@
#define __NR_mbind 274 #define __NR_mbind 274
#define __NR_get_mempolicy 275 #define __NR_get_mempolicy 275
#define __NR_set_mempolicy 276 #define __NR_set_mempolicy 276
#define __NR_mq_open 277 #define __NR_mq_open 277
#define __NR_mq_unlink (__NR_mq_open+1) #define __NR_mq_unlink (__NR_mq_open+1)
#define __NR_mq_timedsend (__NR_mq_open+2) #define __NR_mq_timedsend (__NR_mq_open+2)
#define __NR_mq_timedreceive (__NR_mq_open+3) #define __NR_mq_timedreceive (__NR_mq_open+3)
...@@ -331,10 +331,18 @@ ...@@ -331,10 +331,18 @@
#define __NR_fallocate 324 #define __NR_fallocate 324
#define __NR_timerfd_settime 325 #define __NR_timerfd_settime 325
#define __NR_timerfd_gettime 326 #define __NR_timerfd_gettime 326
#define __NR_signalfd4 327
#define __NR_eventfd2 328
#define __NR_epoll_create1 329
#define __NR_dup3 330
#define __NR_pipe2 331
#define __NR_inotify_init1 332
#define __NR_preadv 333
#define __NR_pwritev 334
#ifdef __KERNEL__ #ifdef __KERNEL__
#define NR_syscalls 327 #define NR_syscalls 335
#include <arch/unistd.h> #include <arch/unistd.h>
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
#include <asm/cpuinfo.h> #include <asm/cpuinfo.h>
#include <asm/pvr.h> #include <asm/pvr.h>
const static char family_string[] = CONFIG_XILINX_MICROBLAZE0_FAMILY; static const char family_string[] = CONFIG_XILINX_MICROBLAZE0_FAMILY;
const static char cpu_ver_string[] = CONFIG_XILINX_MICROBLAZE0_HW_VER; static const char cpu_ver_string[] = CONFIG_XILINX_MICROBLAZE0_HW_VER;
#define err_printk(x) \ #define err_printk(x) \
early_printk("ERROR: Microblaze " x "- different for kernel and DTS\n"); early_printk("ERROR: Microblaze " x "- different for kernel and DTS\n");
......
...@@ -131,7 +131,7 @@ sys_ipc(uint call, int first, int second, int third, void *ptr, long fifth) ...@@ -131,7 +131,7 @@ sys_ipc(uint call, int first, int second, int third, void *ptr, long fifth)
ret = sys_shmctl(first, second, (struct shmid_ds *) ptr); ret = sys_shmctl(first, second, (struct shmid_ds *) ptr);
break; break;
} }
return -EINVAL; return ret;
} }
asmlinkage int sys_vfork(struct pt_regs *regs) asmlinkage int sys_vfork(struct pt_regs *regs)
......
...@@ -1411,13 +1411,12 @@ config PAGE_SIZE_4KB ...@@ -1411,13 +1411,12 @@ config PAGE_SIZE_4KB
config PAGE_SIZE_8KB config PAGE_SIZE_8KB
bool "8kB" bool "8kB"
depends on EXPERIMENTAL && CPU_R8000 depends on (EXPERIMENTAL && CPU_R8000) || CPU_CAVIUM_OCTEON
help help
Using 8kB page size will result in higher performance kernel at Using 8kB page size will result in higher performance kernel at
the price of higher memory consumption. This option is available the price of higher memory consumption. This option is available
only on the R8000 processor. Not that at the time of this writing only on R8000 and cnMIPS processors. Note that you will need a
this option is still high experimental; there are also issues with suitable Linux distribution to support this.
compatibility of user applications.
config PAGE_SIZE_16KB config PAGE_SIZE_16KB
bool "16kB" bool "16kB"
...@@ -1428,6 +1427,15 @@ config PAGE_SIZE_16KB ...@@ -1428,6 +1427,15 @@ config PAGE_SIZE_16KB
all non-R3000 family processors. Note that you will need a suitable all non-R3000 family processors. Note that you will need a suitable
Linux distribution to support this. Linux distribution to support this.
config PAGE_SIZE_32KB
bool "32kB"
depends on CPU_CAVIUM_OCTEON
help
Using 32kB page size will result in higher performance kernel at
the price of higher memory consumption. This option is available
only on cnMIPS cores. Note that you will need a suitable Linux
distribution to support this.
config PAGE_SIZE_64KB config PAGE_SIZE_64KB
bool "64kB" bool "64kB"
depends on EXPERIMENTAL && !CPU_R3000 && !CPU_TX39XX depends on EXPERIMENTAL && !CPU_R3000 && !CPU_TX39XX
...@@ -1958,10 +1966,6 @@ config SECCOMP ...@@ -1958,10 +1966,6 @@ config SECCOMP
endmenu endmenu
config RWSEM_GENERIC_SPINLOCK
bool
default y
config LOCKDEP_SUPPORT config LOCKDEP_SUPPORT
bool bool
default y default y
......
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
KBUILD_DEFCONFIG := ip22_defconfig KBUILD_DEFCONFIG := ip22_defconfig
cflags-y := -ffunction-sections
# #
# Select the object file format to substitute into the linker script. # Select the object file format to substitute into the linker script.
# #
...@@ -50,6 +48,9 @@ ifneq ($(SUBARCH),$(ARCH)) ...@@ -50,6 +48,9 @@ ifneq ($(SUBARCH),$(ARCH))
endif endif
endif endif
cflags-y := -ffunction-sections
cflags-y += $(call cc-option, -mno-check-zero-division)
ifdef CONFIG_32BIT ifdef CONFIG_32BIT
ld-emul = $(32bit-emul) ld-emul = $(32bit-emul)
vmlinux-32 = vmlinux vmlinux-32 = vmlinux
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
extern int allow_au1k_wait; /* default off for CP0 Counter */ extern int allow_au1k_wait; /* default off for CP0 Counter */
static cycle_t au1x_counter1_read(void) static cycle_t au1x_counter1_read(struct clocksource *cs)
{ {
return au_readl(SYS_RTCREAD); return au_readl(SYS_RTCREAD);
} }
......
...@@ -38,7 +38,7 @@ void octeon_init_cvmcount(void) ...@@ -38,7 +38,7 @@ void octeon_init_cvmcount(void)
local_irq_restore(flags); local_irq_restore(flags);
} }
static cycle_t octeon_cvmcount_read(void) static cycle_t octeon_cvmcount_read(struct clocksource *cs)
{ {
return read_c0_cvmcount(); return read_c0_cvmcount();
} }
......
...@@ -567,7 +567,7 @@ static inline unsigned long __fls(unsigned long word) ...@@ -567,7 +567,7 @@ static inline unsigned long __fls(unsigned long word)
int num; int num;
if (BITS_PER_LONG == 32 && if (BITS_PER_LONG == 32 &&
__builtin_constant_p(cpu_has_mips_r) && cpu_has_mips_r) { __builtin_constant_p(cpu_has_clo_clz) && cpu_has_clo_clz) {
__asm__( __asm__(
" .set push \n" " .set push \n"
" .set mips32 \n" " .set mips32 \n"
...@@ -644,7 +644,7 @@ static inline int fls(int x) ...@@ -644,7 +644,7 @@ static inline int fls(int x)
{ {
int r; int r;
if (__builtin_constant_p(cpu_has_mips_r) && cpu_has_mips_r) { if (__builtin_constant_p(cpu_has_clo_clz) && cpu_has_clo_clz) {
__asm__("clz %0, %1" : "=r" (x) : "r" (x)); __asm__("clz %0, %1" : "=r" (x) : "r" (x));
return 32 - x; return 32 - x;
......
...@@ -40,7 +40,7 @@ static inline ...@@ -40,7 +40,7 @@ static inline
__wsum csum_partial_copy_from_user(const void __user *src, void *dst, int len, __wsum csum_partial_copy_from_user(const void __user *src, void *dst, int len,
__wsum sum, int *err_ptr) __wsum sum, int *err_ptr)
{ {
might_sleep(); might_fault();
return __csum_partial_copy_user((__force void *)src, dst, return __csum_partial_copy_user((__force void *)src, dst,
len, sum, err_ptr); len, sum, err_ptr);
} }
...@@ -53,7 +53,7 @@ static inline ...@@ -53,7 +53,7 @@ static inline
__wsum csum_and_copy_to_user(const void *src, void __user *dst, int len, __wsum csum_and_copy_to_user(const void *src, void __user *dst, int len,
__wsum sum, int *err_ptr) __wsum sum, int *err_ptr)
{ {
might_sleep(); might_fault();
if (access_ok(VERIFY_WRITE, dst, len)) if (access_ok(VERIFY_WRITE, dst, len))
return __csum_partial_copy_user(src, (__force void *)dst, return __csum_partial_copy_user(src, (__force void *)dst,
len, sum, err_ptr); len, sum, err_ptr);
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
/* /*
* Architecture specific compatibility types * Architecture specific compatibility types
*/ */
#include <linux/seccomp.h>
#include <linux/thread_info.h> #include <linux/thread_info.h>
#include <linux/types.h> #include <linux/types.h>
#include <asm/page.h> #include <asm/page.h>
......
...@@ -147,6 +147,15 @@ ...@@ -147,6 +147,15 @@
#define cpu_has_mips_r (cpu_has_mips32r1 | cpu_has_mips32r2 | \ #define cpu_has_mips_r (cpu_has_mips32r1 | cpu_has_mips32r2 | \
cpu_has_mips64r1 | cpu_has_mips64r2) cpu_has_mips64r1 | cpu_has_mips64r2)
/*
* MIPS32, MIPS64, VR5500, IDT32332, IDT32334 and maybe a few other
* pre-MIPS32/MIPS53 processors have CLO, CLZ. For 64-bit kernels
* cpu_has_clo_clz also indicates the availability of DCLO and DCLZ.
*/
# ifndef cpu_has_clo_clz
# define cpu_has_clo_clz cpu_has_mips_r
# endif
#ifndef cpu_has_dsp #ifndef cpu_has_dsp
#define cpu_has_dsp (cpu_data[0].ases & MIPS_ASE_DSP) #define cpu_has_dsp (cpu_data[0].ases & MIPS_ASE_DSP)
#endif #endif
......
...@@ -6,105 +6,63 @@ ...@@ -6,105 +6,63 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
*/ */
#ifndef _ASM_DIV64_H #ifndef __ASM_DIV64_H
#define _ASM_DIV64_H #define __ASM_DIV64_H
#include <linux/types.h> #include <asm-generic/div64.h>
#if (_MIPS_SZLONG == 32) #if BITS_PER_LONG == 64
#include <asm/compiler.h> #include <linux/types.h>
/* /*
* No traps on overflows for any of these... * No traps on overflows for any of these...
*/ */
#define do_div64_32(res, high, low, base) ({ \ #define __div64_32(n, base) \
unsigned long __quot32, __mod32; \ ({ \
unsigned long __cf, __tmp, __tmp2, __i; \ unsigned long __cf, __tmp, __tmp2, __i; \
\ unsigned long __quot32, __mod32; \
__asm__(".set push\n\t" \ unsigned long __high, __low; \
".set noat\n\t" \ unsigned long long __n; \
".set noreorder\n\t" \ \
"move %2, $0\n\t" \ __high = *__n >> 32; \
"move %3, $0\n\t" \ __low = __n; \
"b 1f\n\t" \ __asm__( \
" li %4, 0x21\n" \ " .set push \n" \
"0:\n\t" \ " .set noat \n" \
"sll $1, %0, 0x1\n\t" \ " .set noreorder \n" \
"srl %3, %0, 0x1f\n\t" \ " move %2, $0 \n" \
"or %0, $1, %5\n\t" \ " move %3, $0 \n" \
"sll %1, %1, 0x1\n\t" \ " b 1f \n" \
"sll %2, %2, 0x1\n" \ " li %4, 0x21 \n" \
"1:\n\t" \ "0: \n" \
"bnez %3, 2f\n\t" \ " sll $1, %0, 0x1 \n" \
" sltu %5, %0, %z6\n\t" \ " srl %3, %0, 0x1f \n" \
"bnez %5, 3f\n" \ " or %0, $1, %5 \n" \
"2:\n\t" \ " sll %1, %1, 0x1 \n" \
" addiu %4, %4, -1\n\t" \ " sll %2, %2, 0x1 \n" \
"subu %0, %0, %z6\n\t" \ "1: \n" \
"addiu %2, %2, 1\n" \ " bnez %3, 2f \n" \
"3:\n\t" \ " sltu %5, %0, %z6 \n" \
"bnez %4, 0b\n\t" \ " bnez %5, 3f \n" \
" srl %5, %1, 0x1f\n\t" \ "2: \n" \
".set pop" \ " addiu %4, %4, -1 \n" \
: "=&r" (__mod32), "=&r" (__tmp), \ " subu %0, %0, %z6 \n" \
"=&r" (__quot32), "=&r" (__cf), \ " addiu %2, %2, 1 \n" \
"=&r" (__i), "=&r" (__tmp2) \ "3: \n" \
: "Jr" (base), "0" (high), "1" (low)); \ " bnez %4, 0b\n\t" \
\ " srl %5, %1, 0x1f\n\t" \
(res) = __quot32; \ " .set pop" \
__mod32; }) : "=&r" (__mod32), "=&r" (__tmp), \
"=&r" (__quot32), "=&r" (__cf), \
#define do_div(n, base) ({ \ "=&r" (__i), "=&r" (__tmp2) \
unsigned long long __quot; \ : "Jr" (base), "0" (__high), "1" (__low)); \
unsigned long __mod; \ \
unsigned long long __div; \ (__n) = __quot32; \
unsigned long __upper, __low, __high, __base; \ __mod32; \
\ })
__div = (n); \
__base = (base); \
\
__high = __div >> 32; \
__low = __div; \
__upper = __high; \
\
if (__high) \
__asm__("divu $0, %z2, %z3" \
: "=h" (__upper), "=l" (__high) \
: "Jr" (__high), "Jr" (__base) \
: GCC_REG_ACCUM); \
\
__mod = do_div64_32(__low, __upper, __low, __base); \
\
__quot = __high; \
__quot = __quot << 32 | __low; \
(n) = __quot; \
__mod; })
#endif /* (_MIPS_SZLONG == 32) */
#if (_MIPS_SZLONG == 64)
/*
* Hey, we're already 64-bit, no
* need to play games..
*/
#define do_div(n, base) ({ \
unsigned long __quot; \
unsigned int __mod; \
unsigned long __div; \
unsigned int __base; \
\
__div = (n); \
__base = (base); \
\
__mod = __div % __base; \
__quot = __div / __base; \
\
(n) = __quot; \
__mod; })
#endif /* (_MIPS_SZLONG == 64) */ #endif /* BITS_PER_LONG == 64 */
#endif /* _ASM_DIV64_H */ #endif /* __ASM_DIV64_H */
...@@ -24,8 +24,13 @@ extern int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, ...@@ -24,8 +24,13 @@ extern int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
enum dma_data_direction direction); enum dma_data_direction direction);
extern dma_addr_t dma_map_page(struct device *dev, struct page *page, extern dma_addr_t dma_map_page(struct device *dev, struct page *page,
unsigned long offset, size_t size, enum dma_data_direction direction); unsigned long offset, size_t size, enum dma_data_direction direction);
extern void dma_unmap_page(struct device *dev, dma_addr_t dma_address,
size_t size, enum dma_data_direction direction); static inline void dma_unmap_page(struct device *dev, dma_addr_t dma_address,
size_t size, enum dma_data_direction direction)
{
dma_unmap_single(dev, dma_address, size, direction);
}
extern void dma_unmap_sg(struct device *dev, struct scatterlist *sg, extern void dma_unmap_sg(struct device *dev, struct scatterlist *sg,
int nhwentries, enum dma_data_direction direction); int nhwentries, enum dma_data_direction direction);
extern void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, extern void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle,
......
...@@ -108,6 +108,9 @@ static inline unsigned long virt_to_fix(const unsigned long vaddr) ...@@ -108,6 +108,9 @@ static inline unsigned long virt_to_fix(const unsigned long vaddr)
return __virt_to_fix(vaddr); return __virt_to_fix(vaddr);
} }
#define kmap_get_fixmap_pte(vaddr) \
pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr)), (vaddr))
/* /*
* Called from pgtable_init() * Called from pgtable_init()
*/ */
......
...@@ -138,8 +138,9 @@ do { \ ...@@ -138,8 +138,9 @@ do { \
__instruction_hazard(); \ __instruction_hazard(); \
} while (0) } while (0)
#elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_CAVIUM_OCTEON) || \ #elif defined(CONFIG_MACH_ALCHEMY) || defined(CONFIG_CPU_CAVIUM_OCTEON) || \
defined(CONFIG_CPU_R5500) || defined(CONFIG_MACH_ALCHEMY) defined(CONFIG_CPU_LOONGSON2) || defined(CONFIG_CPU_R10000) || \
defined(CONFIG_CPU_R5500)
/* /*
* R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer. * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer.
......
...@@ -30,8 +30,6 @@ ...@@ -30,8 +30,6 @@
/* declarations for highmem.c */ /* declarations for highmem.c */
extern unsigned long highstart_pfn, highend_pfn; extern unsigned long highstart_pfn, highend_pfn;
extern pte_t *kmap_pte;
extern pgprot_t kmap_prot;
extern pte_t *pkmap_page_table; extern pte_t *pkmap_page_table;
/* /*
...@@ -62,6 +60,10 @@ extern struct page *__kmap_atomic_to_page(void *ptr); ...@@ -62,6 +60,10 @@ extern struct page *__kmap_atomic_to_page(void *ptr);
#define flush_cache_kmaps() flush_cache_all() #define flush_cache_kmaps() flush_cache_all()
extern void kmap_init(void);
#define kmap_prot PAGE_KERNEL
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* _ASM_HIGHMEM_H */ #endif /* _ASM_HIGHMEM_H */
...@@ -715,7 +715,7 @@ enum soc_au1500_ints { ...@@ -715,7 +715,7 @@ enum soc_au1500_ints {
#ifdef CONFIG_SOC_AU1100 #ifdef CONFIG_SOC_AU1100
enum soc_au1100_ints { enum soc_au1100_ints {
AU1100_FIRST_INT = MIPS_CPU_IRQ_BASE + 8, AU1100_FIRST_INT = MIPS_CPU_IRQ_BASE + 8,
AU1100_UART0_INT, AU1100_UART0_INT = AU1100_FIRST_INT,
AU1100_UART1_INT, AU1100_UART1_INT,
AU1100_SD_INT, AU1100_SD_INT,
AU1100_UART3_INT, AU1100_UART3_INT,
...@@ -902,8 +902,8 @@ enum soc_au1200_ints { ...@@ -902,8 +902,8 @@ enum soc_au1200_ints {
AU1000_RTC_MATCH0_INT, AU1000_RTC_MATCH0_INT,
AU1000_RTC_MATCH1_INT, AU1000_RTC_MATCH1_INT,
AU1000_RTC_MATCH2_INT, AU1000_RTC_MATCH2_INT,
AU1200_GPIO_203,
AU1200_NAND_INT = AU1200_FIRST_INT + 23, AU1200_NAND_INT,
AU1200_GPIO_204, AU1200_GPIO_204,
AU1200_GPIO_205, AU1200_GPIO_205,
AU1200_GPIO_206, AU1200_GPIO_206,
......
...@@ -46,20 +46,6 @@ ...@@ -46,20 +46,6 @@
#define CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON 0 #define CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON 0
#endif #endif
#ifdef CONFIG_PM
/*
* This will enable the device to be powered up when write() or read()
* is called. If this is not defined, the driver will return -EBUSY.
*/
#define WAKE_ON_ACCESS 1
typedef struct {
spinlock_t lock; /* Used to block on state transitions */
au1xxx_power_dev_t *dev; /* Power Managers device structure */
unsigned stopped; /* Used to signal device is stopped */
} pm_state;
#endif
typedef struct { typedef struct {
u32 tx_dev_id, rx_dev_id, target_dev_id; u32 tx_dev_id, rx_dev_id, target_dev_id;
u32 tx_chan, rx_chan; u32 tx_chan, rx_chan;
...@@ -72,9 +58,6 @@ typedef struct { ...@@ -72,9 +58,6 @@ typedef struct {
#endif #endif
int irq; int irq;
u32 regbase; u32 regbase;
#ifdef CONFIG_PM
pm_state pm;
#endif
} _auide_hwif; } _auide_hwif;
/******************************************************************************/ /******************************************************************************/
......
/*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 2009 Wu Zhangjin <wuzj@lemote.com>
* Copyright (C) 2009 Philippe Vachon <philippe@cowpig.ca>
* Copyright (C) 2009 Zhang Le <r0bertz@gentoo.org>
*
* reference: /proc/cpuinfo,
* arch/mips/kernel/cpu-probe.c(cpu_probe_legacy),
* arch/mips/kernel/proc.c(show_cpuinfo),
* loongson2f user manual.
*/
#ifndef __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H
#define __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H
#define cpu_dcache_line_size() 32
#define cpu_icache_line_size() 32
#define cpu_scache_line_size() 32
#define cpu_has_32fpr 1
#define cpu_has_3k_cache 0
#define cpu_has_4k_cache 1
#define cpu_has_4kex 1
#define cpu_has_64bits 1
#define cpu_has_cache_cdex_p 0
#define cpu_has_cache_cdex_s 0
#define cpu_has_counter 1
#define cpu_has_dc_aliases 1
#define cpu_has_divec 0
#define cpu_has_dsp 0
#define cpu_has_ejtag 0
#define cpu_has_fpu 1
#define cpu_has_ic_fills_f_dc 0
#define cpu_has_inclusive_pcaches 1
#define cpu_has_llsc 1
#define cpu_has_mcheck 0
#define cpu_has_mdmx 0
#define cpu_has_mips16 0
#define cpu_has_mips32r1 0
#define cpu_has_mips32r2 0
#define cpu_has_mips3d 0
#define cpu_has_mips64r1 0
#define cpu_has_mips64r2 0
#define cpu_has_mipsmt 0
#define cpu_has_prefetch 0
#define cpu_has_smartmips 0
#define cpu_has_tlb 1
#define cpu_has_tx39_cache 0
#define cpu_has_userlocal 0
#define cpu_has_vce 0
#define cpu_has_vtag_icache 0
#define cpu_has_watch 1
#define cpu_icache_snoops_remote_store 1
#endif /* __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H */
This diff is collapsed.
...@@ -23,6 +23,9 @@ ...@@ -23,6 +23,9 @@
#ifdef CONFIG_PAGE_SIZE_16KB #ifdef CONFIG_PAGE_SIZE_16KB
#define PAGE_SHIFT 14 #define PAGE_SHIFT 14
#endif #endif
#ifdef CONFIG_PAGE_SIZE_32KB
#define PAGE_SHIFT 15
#endif
#ifdef CONFIG_PAGE_SIZE_64KB #ifdef CONFIG_PAGE_SIZE_64KB
#define PAGE_SHIFT 16 #define PAGE_SHIFT 16
#endif #endif
......
...@@ -83,6 +83,12 @@ ...@@ -83,6 +83,12 @@
#define PMD_ORDER 0 #define PMD_ORDER 0
#define PTE_ORDER 0 #define PTE_ORDER 0
#endif #endif
#ifdef CONFIG_PAGE_SIZE_32KB
#define PGD_ORDER 0
#define PUD_ORDER aieeee_attempt_to_allocate_pud
#define PMD_ORDER 0
#define PTE_ORDER 0
#endif
#ifdef CONFIG_PAGE_SIZE_64KB #ifdef CONFIG_PAGE_SIZE_64KB
#define PGD_ORDER 0 #define PGD_ORDER 0
#define PUD_ORDER aieeee_attempt_to_allocate_pud #define PUD_ORDER aieeee_attempt_to_allocate_pud
......
...@@ -359,11 +359,11 @@ ...@@ -359,11 +359,11 @@
TO_NODE_UNCAC((nasid), LAUNCH_OFFSET(nasid, slice)) TO_NODE_UNCAC((nasid), LAUNCH_OFFSET(nasid, slice))
#define LAUNCH_SIZE(nasid) KLD_LAUNCH(nasid)->size #define LAUNCH_SIZE(nasid) KLD_LAUNCH(nasid)->size
#define NMI_OFFSET(nasid, slice) \ #define SN_NMI_OFFSET(nasid, slice) \
(KLD_NMI(nasid)->offset + \ (KLD_NMI(nasid)->offset + \
KLD_NMI(nasid)->stride * (slice)) KLD_NMI(nasid)->stride * (slice))
#define NMI_ADDR(nasid, slice) \ #define NMI_ADDR(nasid, slice) \
TO_NODE_UNCAC((nasid), NMI_OFFSET(nasid, slice)) TO_NODE_UNCAC((nasid), SN_NMI_OFFSET(nasid, slice))
#define NMI_SIZE(nasid) KLD_NMI(nasid)->size #define NMI_SIZE(nasid) KLD_NMI(nasid)->size
#define KLCONFIG_OFFSET(nasid) KLD_KLCONFIG(nasid)->offset #define KLCONFIG_OFFSET(nasid) KLD_KLCONFIG(nasid)->offset
......
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
* *
* Derived from IRIX <sys/SN/nmi.h>, Revision 1.5.
*
* Copyright (C) 1992 - 1997 Silicon Graphics, Inc. * Copyright (C) 1992 - 1997 Silicon Graphics, Inc.
*/ */
#ifndef __ASM_SN_NMI_H #ifndef __ASM_SN_NMI_H
#define __ASM_SN_NMI_H #define __ASM_SN_NMI_H
#ident "$Revision: 1.5 $"
#include <asm/sn/addrs.h> #include <asm/sn/addrs.h>
/* /*
......
...@@ -75,6 +75,9 @@ register struct thread_info *__current_thread_info __asm__("$28"); ...@@ -75,6 +75,9 @@ register struct thread_info *__current_thread_info __asm__("$28");
#ifdef CONFIG_PAGE_SIZE_16KB #ifdef CONFIG_PAGE_SIZE_16KB
#define THREAD_SIZE_ORDER (0) #define THREAD_SIZE_ORDER (0)
#endif #endif
#ifdef CONFIG_PAGE_SIZE_32KB
#define THREAD_SIZE_ORDER (0)
#endif
#ifdef CONFIG_PAGE_SIZE_64KB #ifdef CONFIG_PAGE_SIZE_64KB
#define THREAD_SIZE_ORDER (0) #define THREAD_SIZE_ORDER (0)
#endif #endif
......
This diff is collapsed.
This diff is collapsed.
...@@ -245,7 +245,7 @@ irqreturn_t c0_compare_interrupt(int irq, void *dev_id) ...@@ -245,7 +245,7 @@ irqreturn_t c0_compare_interrupt(int irq, void *dev_id)
} }
int __cpuinit mips_clockevent_init(void) int __cpuinit smtc_clockevent_init(void)
{ {
uint64_t mips_freq = mips_hpt_frequency; uint64_t mips_freq = mips_hpt_frequency;
unsigned int cpu = smp_processor_id(); unsigned int cpu = smp_processor_id();
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment