Commit 8ed57590 authored by Linus Torvalds's avatar Linus Torvalds
parents 27d1097d 210cc679
...@@ -2247,6 +2247,12 @@ S: 249 Nichols Avenue ...@@ -2247,6 +2247,12 @@ S: 249 Nichols Avenue
S: Syracuse, New York 13206 S: Syracuse, New York 13206
S: USA S: USA
N: Kyle McMartin
E: kyle@parisc-linux.org
D: Linux/PARISC hacker
D: AD1889 sound driver
S: Ottawa, Canada
N: Dirk Melchers N: Dirk Melchers
E: dirk@merlin.nbg.sub.org E: dirk@merlin.nbg.sub.org
D: 8 bit XT hard disk driver for OMTI5520 D: 8 bit XT hard disk driver for OMTI5520
......
...@@ -197,6 +197,15 @@ M: Thorsten Knabe <linux@thorsten-knabe.de> ...@@ -197,6 +197,15 @@ M: Thorsten Knabe <linux@thorsten-knabe.de>
W: http://linux.thorsten-knabe.de W: http://linux.thorsten-knabe.de
S: Maintained S: Maintained
AD1889 SOUND DRIVER
P: Kyle McMartin
M: kyle@parisc-linux.org
P: Thibaut Varene
M: T-Bone@parisc-linux.org
W: http://wiki.parisc-linux.org/AD1889
L: parisc-linux@lists.parisc-linux.org
S: Maintained
ADM1025 HARDWARE MONITOR DRIVER ADM1025 HARDWARE MONITOR DRIVER
P: Jean Delvare P: Jean Delvare
M: khali@linux-fr.org M: khali@linux-fr.org
......
...@@ -47,10 +47,10 @@ config PM ...@@ -47,10 +47,10 @@ config PM
config ISA_DMA_API config ISA_DMA_API
bool bool
default y
config ARCH_MAY_HAVE_PC_FDC config ARCH_MAY_HAVE_PC_FDC
bool bool
depends on BROKEN
default y default y
source "init/Kconfig" source "init/Kconfig"
...@@ -154,13 +154,14 @@ config HOTPLUG_CPU ...@@ -154,13 +154,14 @@ config HOTPLUG_CPU
config ARCH_DISCONTIGMEM_ENABLE config ARCH_DISCONTIGMEM_ENABLE
bool "Discontiguous memory support (EXPERIMENTAL)" bool "Discontiguous memory support (EXPERIMENTAL)"
depends on EXPERIMENTAL depends on 64BIT && EXPERIMENTAL
help help
Say Y to support efficient handling of discontiguous physical memory, Say Y to support efficient handling of discontiguous physical memory,
for architectures which are either NUMA (Non-Uniform Memory Access) for architectures which are either NUMA (Non-Uniform Memory Access)
or have huge holes in the physical address space for other reasons. or have huge holes in the physical address space for other reasons.
See <file:Documentation/vm/numa> for more. See <file:Documentation/vm/numa> for more.
source "kernel/Kconfig.hz"
source "mm/Kconfig" source "mm/Kconfig"
config PREEMPT config PREEMPT
......
...@@ -20,7 +20,8 @@ NM = sh $(srctree)/arch/parisc/nm ...@@ -20,7 +20,8 @@ NM = sh $(srctree)/arch/parisc/nm
CHECKFLAGS += -D__hppa__=1 CHECKFLAGS += -D__hppa__=1
ifdef CONFIG_64BIT ifdef CONFIG_64BIT
CROSS_COMPILE := hppa64-linux- CROSS_COMPILE := $(shell if [ -x /usr/bin/hppa64-linux-gnu-gcc ]; then \
echo hppa64-linux-gnu-; else echo hppa64-linux-; fi)
UTS_MACHINE := parisc64 UTS_MACHINE := parisc64
CHECKFLAGS += -D__LP64__=1 -m64 CHECKFLAGS += -D__LP64__=1 -m64
else else
...@@ -34,6 +35,14 @@ FINAL_LD=$(CROSS_COMPILE)ld --warn-common --warn-section-align ...@@ -34,6 +35,14 @@ FINAL_LD=$(CROSS_COMPILE)ld --warn-common --warn-section-align
OBJCOPY_FLAGS =-O binary -R .note -R .comment -S OBJCOPY_FLAGS =-O binary -R .note -R .comment -S
GCC_VERSION := $(call cc-version)
ifneq ($(shell if [ -z $(GCC_VERSION) ] ; then echo "bad"; fi ;),)
$(error Sorry, couldn't find ($(cc-version)).)
endif
ifneq ($(shell if [ $(GCC_VERSION) -lt 0303 ] ; then echo "bad"; fi ;),)
$(error Sorry, your compiler is too old ($(GCC_VERSION)). GCC v3.3 or above is required.)
endif
cflags-y := -pipe cflags-y := -pipe
# These flags should be implied by an hppa-linux configuration, but they # These flags should be implied by an hppa-linux configuration, but they
...@@ -43,7 +52,7 @@ cflags-y += -mno-space-regs -mfast-indirect-calls ...@@ -43,7 +52,7 @@ cflags-y += -mno-space-regs -mfast-indirect-calls
# Currently we save and restore fpregs on all kernel entry/interruption paths. # Currently we save and restore fpregs on all kernel entry/interruption paths.
# If that gets optimized, we might need to disable the use of fpregs in the # If that gets optimized, we might need to disable the use of fpregs in the
# kernel. # kernel.
#cflags-y += -mdisable-fpregs cflags-y += -mdisable-fpregs
# Without this, "ld -r" results in .text sections that are too big # Without this, "ld -r" results in .text sections that are too big
# (> 0x40000) for branches to reach stubs. # (> 0x40000) for branches to reach stubs.
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/sections.h>
int split_tlb; int split_tlb;
int dcache_stride; int dcache_stride;
...@@ -207,6 +208,9 @@ parisc_cache_init(void) ...@@ -207,6 +208,9 @@ parisc_cache_init(void)
/* "New and Improved" version from Jim Hull /* "New and Improved" version from Jim Hull
* (1 << (cc_block-1)) * (cc_line << (4 + cnf.cc_shift)) * (1 << (cc_block-1)) * (cc_line << (4 + cnf.cc_shift))
* The following CAFL_STRIDE is an optimized version, see
* http://lists.parisc-linux.org/pipermail/parisc-linux/2004-June/023625.html
* http://lists.parisc-linux.org/pipermail/parisc-linux/2004-June/023671.html
*/ */
#define CAFL_STRIDE(cnf) (cnf.cc_line << (3 + cnf.cc_block + cnf.cc_shift)) #define CAFL_STRIDE(cnf) (cnf.cc_line << (3 + cnf.cc_block + cnf.cc_shift))
dcache_stride = CAFL_STRIDE(cache_info.dc_conf); dcache_stride = CAFL_STRIDE(cache_info.dc_conf);
...@@ -339,17 +343,15 @@ int parisc_cache_flush_threshold = FLUSH_THRESHOLD; ...@@ -339,17 +343,15 @@ int parisc_cache_flush_threshold = FLUSH_THRESHOLD;
void parisc_setup_cache_timing(void) void parisc_setup_cache_timing(void)
{ {
unsigned long rangetime, alltime; unsigned long rangetime, alltime;
extern char _text; /* start of kernel code, defined by linker */
extern char _end; /* end of BSS, defined by linker */
unsigned long size; unsigned long size;
alltime = mfctl(16); alltime = mfctl(16);
flush_data_cache(); flush_data_cache();
alltime = mfctl(16) - alltime; alltime = mfctl(16) - alltime;
size = (unsigned long)(&_end - _text); size = (unsigned long)(_end - _text);
rangetime = mfctl(16); rangetime = mfctl(16);
flush_kernel_dcache_range((unsigned long)&_text, size); flush_kernel_dcache_range((unsigned long)_text, size);
rangetime = mfctl(16) - rangetime; rangetime = mfctl(16) - rangetime;
printk(KERN_DEBUG "Whole cache flush %lu cycles, flushing %lu bytes %lu cycles\n", printk(KERN_DEBUG "Whole cache flush %lu cycles, flushing %lu bytes %lu cycles\n",
......
This diff is collapsed.
This diff is collapsed.
...@@ -83,15 +83,15 @@ static unsigned long pdc_result2[32] __attribute__ ((aligned (8))); ...@@ -83,15 +83,15 @@ static unsigned long pdc_result2[32] __attribute__ ((aligned (8)));
int parisc_narrow_firmware = 1; int parisc_narrow_firmware = 1;
#endif #endif
/* on all currently-supported platforms, IODC I/O calls are always /* On most currently-supported platforms, IODC I/O calls are 32-bit calls
* 32-bit calls, and MEM_PDC calls are always the same width as the OS. * and MEM_PDC calls are always the same width as the OS.
* This means Cxxx boxes can't run wide kernels right now. -PB * Some PAT boxes may have 64-bit IODC I/O.
* *
* CONFIG_PDC_NARROW has been added to allow 64-bit kernels to run on * Ryan Bradetich added the now obsolete CONFIG_PDC_NARROW to allow
* systems with 32-bit MEM_PDC calls. This will allow wide kernels to * 64-bit kernels to run on systems with 32-bit MEM_PDC calls.
* run on Cxxx boxes now. -RB * This allowed wide kernels to run on Cxxx boxes.
* * We now detect 32-bit-only PDC and dynamically switch to 32-bit mode
* Note that some PAT boxes may have 64-bit IODC I/O... * when running a 64-bit kernel on such boxes (e.g. C200 or C360).
*/ */
#ifdef __LP64__ #ifdef __LP64__
......
This diff is collapsed.
...@@ -104,12 +104,9 @@ static int drm32_version(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -104,12 +104,9 @@ static int drm32_version(unsigned int fd, unsigned int cmd, unsigned long arg)
} }
out: out:
if (kversion.name) kfree(kversion.name);
kfree(kversion.name); kfree(kversion.date);
if (kversion.date) kfree(kversion.desc);
kfree(kversion.date);
if (kversion.desc)
kfree(kversion.desc);
return ret; return ret;
} }
...@@ -166,9 +163,7 @@ static int drm32_getsetunique(unsigned int fd, unsigned int cmd, unsigned long a ...@@ -166,9 +163,7 @@ static int drm32_getsetunique(unsigned int fd, unsigned int cmd, unsigned long a
ret = -EFAULT; ret = -EFAULT;
} }
if (karg.unique != NULL) kfree(karg.unique);
kfree(karg.unique);
return ret; return ret;
} }
...@@ -265,7 +260,6 @@ static int drm32_info_bufs(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -265,7 +260,6 @@ static int drm32_info_bufs(unsigned int fd, unsigned int cmd, unsigned long arg)
} }
kfree(karg.list); kfree(karg.list);
return ret; return ret;
} }
...@@ -305,7 +299,6 @@ static int drm32_free_bufs(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -305,7 +299,6 @@ static int drm32_free_bufs(unsigned int fd, unsigned int cmd, unsigned long arg)
out: out:
kfree(karg.list); kfree(karg.list);
return ret; return ret;
} }
...@@ -494,15 +487,10 @@ static int drm32_dma(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -494,15 +487,10 @@ static int drm32_dma(unsigned int fd, unsigned int cmd, unsigned long arg)
} }
out: out:
if (karg.send_indices) kfree(karg.send_indices);
kfree(karg.send_indices); kfree(karg.send_sizes);
if (karg.send_sizes) kfree(karg.request_indices);
kfree(karg.send_sizes); kfree(karg.request_sizes);
if (karg.request_indices)
kfree(karg.request_indices);
if (karg.request_sizes)
kfree(karg.request_sizes);
return ret; return ret;
} }
...@@ -555,9 +543,7 @@ static int drm32_res_ctx(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -555,9 +543,7 @@ static int drm32_res_ctx(unsigned int fd, unsigned int cmd, unsigned long arg)
ret = -EFAULT; ret = -EFAULT;
} }
if (karg.contexts) kfree(karg.contexts);
kfree(karg.contexts);
return ret; return ret;
} }
......
This diff is collapsed.
This diff is collapsed.
...@@ -202,7 +202,8 @@ static void ...@@ -202,7 +202,8 @@ static void
pcibios_link_hba_resources( struct resource *hba_res, struct resource *r) pcibios_link_hba_resources( struct resource *hba_res, struct resource *r)
{ {
if (!r->parent) { if (!r->parent) {
printk(KERN_EMERG "PCI: Tell willy he's wrong\n"); printk(KERN_EMERG "PCI: resource not parented! [%lx-%lx]\n",
r->start, r->end);
r->parent = hba_res; r->parent = hba_res;
/* reverse link is harder *sigh* */ /* reverse link is harder *sigh* */
......
This diff is collapsed.
...@@ -746,7 +746,8 @@ static int perf_write_image(uint64_t *memaddr) ...@@ -746,7 +746,8 @@ static int perf_write_image(uint64_t *memaddr)
uint64_t *bptr; uint64_t *bptr;
uint32_t dwords; uint32_t dwords;
uint32_t *intrigue_rdr; uint32_t *intrigue_rdr;
uint64_t *intrigue_bitmask, tmp64, proc_hpa; uint64_t *intrigue_bitmask, tmp64;
void __iomem *runway;
struct rdr_tbl_ent *tentry; struct rdr_tbl_ent *tentry;
int i; int i;
...@@ -798,15 +799,16 @@ static int perf_write_image(uint64_t *memaddr) ...@@ -798,15 +799,16 @@ static int perf_write_image(uint64_t *memaddr)
return -1; return -1;
} }
proc_hpa = cpu_device->hpa; runway = ioremap(cpu_device->hpa.start, 4096);
/* Merge intrigue bits into Runway STATUS 0 */ /* Merge intrigue bits into Runway STATUS 0 */
tmp64 = __raw_readq(proc_hpa + RUNWAY_STATUS) & 0xffecfffffffffffful; tmp64 = __raw_readq(runway + RUNWAY_STATUS) & 0xffecfffffffffffful;
__raw_writeq(tmp64 | (*memaddr++ & 0x0013000000000000ul), proc_hpa + RUNWAY_STATUS); __raw_writeq(tmp64 | (*memaddr++ & 0x0013000000000000ul),
runway + RUNWAY_STATUS);
/* Write RUNWAY DEBUG registers */ /* Write RUNWAY DEBUG registers */
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
__raw_writeq(*memaddr++, proc_hpa + RUNWAY_DEBUG + i); __raw_writeq(*memaddr++, runway + RUNWAY_DEBUG);
} }
return 0; return 0;
......
This diff is collapsed.
...@@ -92,7 +92,7 @@ static int __init processor_probe(struct parisc_device *dev) ...@@ -92,7 +92,7 @@ static int __init processor_probe(struct parisc_device *dev)
* May get overwritten by PAT code. * May get overwritten by PAT code.
*/ */
cpuid = boot_cpu_data.cpu_count; cpuid = boot_cpu_data.cpu_count;
txn_addr = dev->hpa; /* for legacy PDC */ txn_addr = dev->hpa.start; /* for legacy PDC */
#ifdef __LP64__ #ifdef __LP64__
if (is_pdc_pat()) { if (is_pdc_pat()) {
...@@ -122,7 +122,7 @@ static int __init processor_probe(struct parisc_device *dev) ...@@ -122,7 +122,7 @@ static int __init processor_probe(struct parisc_device *dev)
* boot time (ie shutdown a CPU from an OS perspective). * boot time (ie shutdown a CPU from an OS perspective).
*/ */
/* get the cpu number */ /* get the cpu number */
status = pdc_pat_cpu_get_number(&cpu_info, dev->hpa); status = pdc_pat_cpu_get_number(&cpu_info, dev->hpa.start);
BUG_ON(PDC_OK != status); BUG_ON(PDC_OK != status);
...@@ -130,7 +130,7 @@ static int __init processor_probe(struct parisc_device *dev) ...@@ -130,7 +130,7 @@ static int __init processor_probe(struct parisc_device *dev)
printk(KERN_WARNING "IGNORING CPU at 0x%x," printk(KERN_WARNING "IGNORING CPU at 0x%x,"
" cpu_slot_id > NR_CPUS" " cpu_slot_id > NR_CPUS"
" (%ld > %d)\n", " (%ld > %d)\n",
dev->hpa, cpu_info.cpu_num, NR_CPUS); dev->hpa.start, cpu_info.cpu_num, NR_CPUS);
/* Ignore CPU since it will only crash */ /* Ignore CPU since it will only crash */
boot_cpu_data.cpu_count--; boot_cpu_data.cpu_count--;
return 1; return 1;
...@@ -149,7 +149,7 @@ static int __init processor_probe(struct parisc_device *dev) ...@@ -149,7 +149,7 @@ static int __init processor_probe(struct parisc_device *dev)
p->loops_per_jiffy = loops_per_jiffy; p->loops_per_jiffy = loops_per_jiffy;
p->dev = dev; /* Save IODC data in case we need it */ p->dev = dev; /* Save IODC data in case we need it */
p->hpa = dev->hpa; /* save CPU hpa */ p->hpa = dev->hpa.start; /* save CPU hpa */
p->cpuid = cpuid; /* save CPU id */ p->cpuid = cpuid; /* save CPU id */
p->txn_addr = txn_addr; /* save CPU IRQ address */ p->txn_addr = txn_addr; /* save CPU IRQ address */
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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