Commit d819c49d authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'linus' into sched/urgent

parents f18f982a 9bedbcb2
...@@ -26,6 +26,7 @@ tags ...@@ -26,6 +26,7 @@ tags
TAGS TAGS
vmlinux* vmlinux*
!vmlinux.lds.S !vmlinux.lds.S
!vmlinux.lds.h
System.map System.map
Module.markers Module.markers
Module.symvers Module.symvers
......
...@@ -57,6 +57,7 @@ core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/ ...@@ -57,6 +57,7 @@ core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/
core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/ core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/
core-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/dig/ core-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/dig/
core-$(CONFIG_IA64_SGI_SN2) += arch/ia64/sn/ core-$(CONFIG_IA64_SGI_SN2) += arch/ia64/sn/
core-$(CONFIG_IA64_SGI_UV) += arch/ia64/uv/
core-$(CONFIG_KVM) += arch/ia64/kvm/ core-$(CONFIG_KVM) += arch/ia64/kvm/
drivers-$(CONFIG_PCI) += arch/ia64/pci/ drivers-$(CONFIG_PCI) += arch/ia64/pci/
......
...@@ -1864,11 +1864,6 @@ pfm_flush(struct file *filp, fl_owner_t id) ...@@ -1864,11 +1864,6 @@ pfm_flush(struct file *filp, fl_owner_t id)
* invoked after, it will find an empty queue and no * invoked after, it will find an empty queue and no
* signal will be sent. In both case, we are safe * signal will be sent. In both case, we are safe
*/ */
if (filp->f_flags & FASYNC) {
DPRINT(("cleaning up async_queue=%p\n", ctx->ctx_async_queue));
pfm_do_fasync (-1, filp, ctx, 0);
}
PROTECT_CTX(ctx, flags); PROTECT_CTX(ctx, flags);
state = ctx->ctx_state; state = ctx->ctx_state;
...@@ -1999,6 +1994,11 @@ pfm_close(struct inode *inode, struct file *filp) ...@@ -1999,6 +1994,11 @@ pfm_close(struct inode *inode, struct file *filp)
return -EBADF; return -EBADF;
} }
if (filp->f_flags & FASYNC) {
DPRINT(("cleaning up async_queue=%p\n", ctx->ctx_async_queue));
pfm_do_fasync(-1, filp, ctx, 0);
}
PROTECT_CTX(ctx, flags); PROTECT_CTX(ctx, flags);
state = ctx->ctx_state; state = ctx->ctx_state;
......
...@@ -252,11 +252,10 @@ check_sal_cache_flush (void) ...@@ -252,11 +252,10 @@ check_sal_cache_flush (void)
local_irq_save(flags); local_irq_save(flags);
/* /*
* Schedule a timer interrupt, wait until it's reported, and see if * Send ourselves a timer interrupt, wait until it's reported, and see
* SAL_CACHE_FLUSH drops it. * if SAL_CACHE_FLUSH drops it.
*/ */
ia64_set_itv(IA64_TIMER_VECTOR); platform_send_ipi(cpu, IA64_TIMER_VECTOR, IA64_IPI_DM_INT, 0);
ia64_set_itm(ia64_get_itc() + 1000);
while (!ia64_get_irr(IA64_TIMER_VECTOR)) while (!ia64_get_irr(IA64_TIMER_VECTOR))
cpu_relax(); cpu_relax();
......
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
DEFINE_PER_CPU(struct uv_hub_info_s, __uv_hub_info); DEFINE_PER_CPU(struct uv_hub_info_s, __uv_hub_info);
EXPORT_PER_CPU_SYMBOL_GPL(__uv_hub_info); EXPORT_PER_CPU_SYMBOL_GPL(__uv_hub_info);
#ifdef CONFIG_IA64_SGI_UV
int sn_prom_type;
#endif
struct redir_addr { struct redir_addr {
unsigned long redirect; unsigned long redirect;
...@@ -64,6 +67,15 @@ void __init uv_setup(char **cmdline_p) ...@@ -64,6 +67,15 @@ void __init uv_setup(char **cmdline_p)
m_n_config.s.m_skt = 37; m_n_config.s.m_skt = 37;
m_n_config.s.n_skt = 0; m_n_config.s.n_skt = 0;
mmr_base = 0; mmr_base = 0;
#if 0
/* Need BIOS calls - TDB */
if (!ia64_sn_is_fake_prom())
sn_prom_type = 1;
else
#endif
sn_prom_type = 2;
printk(KERN_INFO "Running on medusa with %s PROM\n",
(sn_prom_type == 1) ? "real" : "fake");
} else { } else {
get_lowmem_redirect(&lowmem_redir_base, &lowmem_redir_size); get_lowmem_redirect(&lowmem_redir_base, &lowmem_redir_size);
node_id.v = uv_read_local_mmr(UVH_NODE_ID); node_id.v = uv_read_local_mmr(UVH_NODE_ID);
......
...@@ -538,19 +538,19 @@ cflags-$(CONFIG_SIBYTE_BCM1x80) += -Iinclude/asm-mips/mach-sibyte \ ...@@ -538,19 +538,19 @@ cflags-$(CONFIG_SIBYTE_BCM1x80) += -Iinclude/asm-mips/mach-sibyte \
# Sibyte SWARM board # Sibyte SWARM board
# Sibyte BCM91x80 (BigSur) board # Sibyte BCM91x80 (BigSur) board
# #
libs-$(CONFIG_SIBYTE_CARMEL) += arch/mips/sibyte/swarm/ core-$(CONFIG_SIBYTE_CARMEL) += arch/mips/sibyte/swarm/
load-$(CONFIG_SIBYTE_CARMEL) := 0xffffffff80100000 load-$(CONFIG_SIBYTE_CARMEL) := 0xffffffff80100000
libs-$(CONFIG_SIBYTE_CRHINE) += arch/mips/sibyte/swarm/ core-$(CONFIG_SIBYTE_CRHINE) += arch/mips/sibyte/swarm/
load-$(CONFIG_SIBYTE_CRHINE) := 0xffffffff80100000 load-$(CONFIG_SIBYTE_CRHINE) := 0xffffffff80100000
libs-$(CONFIG_SIBYTE_CRHONE) += arch/mips/sibyte/swarm/ core-$(CONFIG_SIBYTE_CRHONE) += arch/mips/sibyte/swarm/
load-$(CONFIG_SIBYTE_CRHONE) := 0xffffffff80100000 load-$(CONFIG_SIBYTE_CRHONE) := 0xffffffff80100000
libs-$(CONFIG_SIBYTE_RHONE) += arch/mips/sibyte/swarm/ core-$(CONFIG_SIBYTE_RHONE) += arch/mips/sibyte/swarm/
load-$(CONFIG_SIBYTE_RHONE) := 0xffffffff80100000 load-$(CONFIG_SIBYTE_RHONE) := 0xffffffff80100000
libs-$(CONFIG_SIBYTE_SENTOSA) += arch/mips/sibyte/swarm/ core-$(CONFIG_SIBYTE_SENTOSA) += arch/mips/sibyte/swarm/
load-$(CONFIG_SIBYTE_SENTOSA) := 0xffffffff80100000 load-$(CONFIG_SIBYTE_SENTOSA) := 0xffffffff80100000
libs-$(CONFIG_SIBYTE_SWARM) += arch/mips/sibyte/swarm/ core-$(CONFIG_SIBYTE_SWARM) += arch/mips/sibyte/swarm/
load-$(CONFIG_SIBYTE_SWARM) := 0xffffffff80100000 load-$(CONFIG_SIBYTE_SWARM) := 0xffffffff80100000
libs-$(CONFIG_SIBYTE_BIGSUR) += arch/mips/sibyte/swarm/ core-$(CONFIG_SIBYTE_BIGSUR) += arch/mips/sibyte/swarm/
load-$(CONFIG_SIBYTE_BIGSUR) := 0xffffffff80100000 load-$(CONFIG_SIBYTE_BIGSUR) := 0xffffffff80100000
# #
...@@ -565,7 +565,11 @@ load-$(CONFIG_BCM47XX) := 0xffffffff80001000 ...@@ -565,7 +565,11 @@ load-$(CONFIG_BCM47XX) := 0xffffffff80001000
# #
core-$(CONFIG_SNI_RM) += arch/mips/sni/ core-$(CONFIG_SNI_RM) += arch/mips/sni/
cflags-$(CONFIG_SNI_RM) += -Iinclude/asm-mips/mach-rm cflags-$(CONFIG_SNI_RM) += -Iinclude/asm-mips/mach-rm
ifdef CONFIG_CPU_LITTLE_ENDIAN
load-$(CONFIG_SNI_RM) += 0xffffffff80600000 load-$(CONFIG_SNI_RM) += 0xffffffff80600000
else
load-$(CONFIG_SNI_RM) += 0xffffffff80030000
endif
all-$(CONFIG_SNI_RM) := vmlinux.ecoff all-$(CONFIG_SNI_RM) := vmlinux.ecoff
# #
......
...@@ -165,12 +165,12 @@ static struct resource au1xxx_usb_gdt_resources[] = { ...@@ -165,12 +165,12 @@ static struct resource au1xxx_usb_gdt_resources[] = {
static struct resource au1xxx_mmc_resources[] = { static struct resource au1xxx_mmc_resources[] = {
[0] = { [0] = {
.start = SD0_PHYS_ADDR, .start = SD0_PHYS_ADDR,
.end = SD0_PHYS_ADDR + 0x40, .end = SD0_PHYS_ADDR + 0x7ffff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
[1] = { [1] = {
.start = SD1_PHYS_ADDR, .start = SD1_PHYS_ADDR,
.end = SD1_PHYS_ADDR + 0x40, .end = SD1_PHYS_ADDR + 0x7ffff,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
[2] = { [2] = {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -67,6 +67,11 @@ static struct smatch mach_table[] = { ...@@ -67,6 +67,11 @@ static struct smatch mach_table[] = {
.liname = "SNI RM200_PCI", .liname = "SNI RM200_PCI",
.type = MACH_SNI_RM200_PCI, .type = MACH_SNI_RM200_PCI,
.flags = PROM_FLAG_DONT_FREE_TEMP, .flags = PROM_FLAG_DONT_FREE_TEMP,
}, {
.arcname = "RM200PCI-R5K",
.liname = "SNI RM200_PCI-R5K",
.type = MACH_SNI_RM200_PCI,
.flags = PROM_FLAG_DONT_FREE_TEMP,
} }
}; };
......
...@@ -216,6 +216,7 @@ int smp_call_function(void (*func) (void *info), void *info, int retry, ...@@ -216,6 +216,7 @@ int smp_call_function(void (*func) (void *info), void *info, int retry,
{ {
return smp_call_function_mask(cpu_online_map, func, info, retry, wait); return smp_call_function_mask(cpu_online_map, func, info, retry, wait);
} }
EXPORT_SYMBOL(smp_call_function);
void smp_call_function_interrupt(void) void smp_call_function_interrupt(void)
{ {
...@@ -271,6 +272,7 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, ...@@ -271,6 +272,7 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
put_cpu(); put_cpu();
return 0; return 0;
} }
EXPORT_SYMBOL(smp_call_function_single);
static void stop_this_cpu(void *dummy) static void stop_this_cpu(void *dummy)
{ {
......
...@@ -34,11 +34,13 @@ static volatile int lasat_int_mask_shift; ...@@ -34,11 +34,13 @@ static volatile int lasat_int_mask_shift;
void disable_lasat_irq(unsigned int irq_nr) void disable_lasat_irq(unsigned int irq_nr)
{ {
irq_nr -= LASAT_IRQ_BASE;
*lasat_int_mask &= ~(1 << irq_nr) << lasat_int_mask_shift; *lasat_int_mask &= ~(1 << irq_nr) << lasat_int_mask_shift;
} }
void enable_lasat_irq(unsigned int irq_nr) void enable_lasat_irq(unsigned int irq_nr)
{ {
irq_nr -= LASAT_IRQ_BASE;
*lasat_int_mask |= (1 << irq_nr) << lasat_int_mask_shift; *lasat_int_mask |= (1 << irq_nr) << lasat_int_mask_shift;
} }
......
...@@ -23,18 +23,19 @@ ...@@ -23,18 +23,19 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/ctype.h> #include <linux/ctype.h>
#include <linux/mutex.h>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
#include <asm/addrspace.h> #include <asm/addrspace.h>
#include "at93c.h" #include "at93c.h"
/* New model description table */ /* New model description table */
#include "lasat_models.h" #include "lasat_models.h"
static DEFINE_MUTEX(lasat_eeprom_mutex);
#define EEPROM_CRC(data, len) (~crc32(~0, data, len)) #define EEPROM_CRC(data, len) (~crc32(~0, data, len))
struct lasat_info lasat_board_info; struct lasat_info lasat_board_info;
void update_bcastaddr(void);
int EEPROMRead(unsigned int pos, unsigned char *data, int len) int EEPROMRead(unsigned int pos, unsigned char *data, int len)
{ {
int i; int i;
...@@ -258,10 +259,6 @@ int lasat_init_board_info(void) ...@@ -258,10 +259,6 @@ int lasat_init_board_info(void)
sprintf(lasat_board_info.li_typestr, "%d", 10 * c); sprintf(lasat_board_info.li_typestr, "%d", 10 * c);
} }
#if defined(CONFIG_INET) && defined(CONFIG_SYSCTL)
update_bcastaddr();
#endif
return 0; return 0;
} }
...@@ -269,6 +266,8 @@ void lasat_write_eeprom_info(void) ...@@ -269,6 +266,8 @@ void lasat_write_eeprom_info(void)
{ {
unsigned long crc; unsigned long crc;
mutex_lock(&lasat_eeprom_mutex);
/* Generate the CRC */ /* Generate the CRC */
crc = EEPROM_CRC((unsigned char *)(&lasat_board_info.li_eeprom_info), crc = EEPROM_CRC((unsigned char *)(&lasat_board_info.li_eeprom_info),
sizeof(struct lasat_eeprom_struct) - 4); sizeof(struct lasat_eeprom_struct) - 4);
...@@ -277,4 +276,6 @@ void lasat_write_eeprom_info(void) ...@@ -277,4 +276,6 @@ void lasat_write_eeprom_info(void)
/* Write the EEPROM info */ /* Write the EEPROM info */
EEPROMWrite(0, (unsigned char *)&lasat_board_info.li_eeprom_info, EEPROMWrite(0, (unsigned char *)&lasat_board_info.li_eeprom_info,
sizeof(struct lasat_eeprom_struct)); sizeof(struct lasat_eeprom_struct));
mutex_unlock(&lasat_eeprom_mutex);
} }
...@@ -29,15 +29,13 @@ ...@@ -29,15 +29,13 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/net.h> #include <linux/net.h>
#include <linux/inet.h> #include <linux/inet.h>
#include <linux/mutex.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <asm/time.h> #include <asm/time.h>
#include "sysctl.h" #ifdef CONFIG_DS1603
#include "ds1603.h" #include "ds1603.h"
#endif
static DEFINE_MUTEX(lasat_info_mutex);
/* Strategy function to write EEPROM after changing string entry */ /* Strategy function to write EEPROM after changing string entry */
int sysctl_lasatstring(ctl_table *table, int *name, int nlen, int sysctl_lasatstring(ctl_table *table, int *name, int nlen,
...@@ -46,18 +44,15 @@ int sysctl_lasatstring(ctl_table *table, int *name, int nlen, ...@@ -46,18 +44,15 @@ int sysctl_lasatstring(ctl_table *table, int *name, int nlen,
{ {
int r; int r;
mutex_lock(&lasat_info_mutex);
r = sysctl_string(table, name, r = sysctl_string(table, name,
nlen, oldval, oldlenp, newval, newlen); nlen, oldval, oldlenp, newval, newlen);
if (r < 0) { if (r < 0)
mutex_unlock(&lasat_info_mutex);
return r; return r;
}
if (newval && newlen) if (newval && newlen)
lasat_write_eeprom_info(); lasat_write_eeprom_info();
mutex_unlock(&lasat_info_mutex);
return 1; return 0;
} }
...@@ -67,14 +62,11 @@ int proc_dolasatstring(ctl_table *table, int write, struct file *filp, ...@@ -67,14 +62,11 @@ int proc_dolasatstring(ctl_table *table, int write, struct file *filp,
{ {
int r; int r;
mutex_lock(&lasat_info_mutex);
r = proc_dostring(table, write, filp, buffer, lenp, ppos); r = proc_dostring(table, write, filp, buffer, lenp, ppos);
if ((!write) || r) { if ((!write) || r)
mutex_unlock(&lasat_info_mutex);
return r; return r;
}
lasat_write_eeprom_info(); lasat_write_eeprom_info();
mutex_unlock(&lasat_info_mutex);
return 0; return 0;
} }
...@@ -85,28 +77,24 @@ int proc_dolasatint(ctl_table *table, int write, struct file *filp, ...@@ -85,28 +77,24 @@ int proc_dolasatint(ctl_table *table, int write, struct file *filp,
{ {
int r; int r;
mutex_lock(&lasat_info_mutex);
r = proc_dointvec(table, write, filp, buffer, lenp, ppos); r = proc_dointvec(table, write, filp, buffer, lenp, ppos);
if ((!write) || r) { if ((!write) || r)
mutex_unlock(&lasat_info_mutex);
return r; return r;
}
lasat_write_eeprom_info(); lasat_write_eeprom_info();
mutex_unlock(&lasat_info_mutex);
return 0; return 0;
} }
#ifdef CONFIG_DS1603
static int rtctmp; static int rtctmp;
#ifdef CONFIG_DS1603
/* proc function to read/write RealTime Clock */ /* proc function to read/write RealTime Clock */
int proc_dolasatrtc(ctl_table *table, int write, struct file *filp, int proc_dolasatrtc(ctl_table *table, int write, struct file *filp,
void *buffer, size_t *lenp, loff_t *ppos) void *buffer, size_t *lenp, loff_t *ppos)
{ {
int r; int r;
mutex_lock(&lasat_info_mutex);
if (!write) { if (!write) {
rtctmp = read_persistent_clock(); rtctmp = read_persistent_clock();
/* check for time < 0 and set to 0 */ /* check for time < 0 and set to 0 */
...@@ -114,12 +102,11 @@ int proc_dolasatrtc(ctl_table *table, int write, struct file *filp, ...@@ -114,12 +102,11 @@ int proc_dolasatrtc(ctl_table *table, int write, struct file *filp,
rtctmp = 0; rtctmp = 0;
} }
r = proc_dointvec(table, write, filp, buffer, lenp, ppos); r = proc_dointvec(table, write, filp, buffer, lenp, ppos);
if ((!write) || r) { if (r)
mutex_unlock(&lasat_info_mutex);
return r; return r;
}
rtc_mips_set_mmss(rtctmp); if (write)
mutex_unlock(&lasat_info_mutex); rtc_mips_set_mmss(rtctmp);
return 0; return 0;
} }
...@@ -132,17 +119,14 @@ int sysctl_lasat_intvec(ctl_table *table, int *name, int nlen, ...@@ -132,17 +119,14 @@ int sysctl_lasat_intvec(ctl_table *table, int *name, int nlen,
{ {
int r; int r;
mutex_lock(&lasat_info_mutex);
r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen); r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
if (r < 0) { if (r < 0)
mutex_unlock(&lasat_info_mutex);
return r; return r;
}
if (newval && newlen) if (newval && newlen)
lasat_write_eeprom_info(); lasat_write_eeprom_info();
mutex_unlock(&lasat_info_mutex);
return 1; return 0;
} }
#ifdef CONFIG_DS1603 #ifdef CONFIG_DS1603
...@@ -153,50 +137,27 @@ int sysctl_lasat_rtc(ctl_table *table, int *name, int nlen, ...@@ -153,50 +137,27 @@ int sysctl_lasat_rtc(ctl_table *table, int *name, int nlen,
{ {
int r; int r;
mutex_lock(&lasat_info_mutex);
rtctmp = read_persistent_clock(); rtctmp = read_persistent_clock();
if (rtctmp < 0) if (rtctmp < 0)
rtctmp = 0; rtctmp = 0;
r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen); r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
if (r < 0) { if (r < 0)
mutex_unlock(&lasat_info_mutex);
return r; return r;
}
if (newval && newlen) if (newval && newlen)
rtc_mips_set_mmss(rtctmp); rtc_mips_set_mmss(rtctmp);
mutex_unlock(&lasat_info_mutex);
return 1; return r;
} }
#endif #endif
#ifdef CONFIG_INET #ifdef CONFIG_INET
static char lasat_bcastaddr[16];
void update_bcastaddr(void)
{
unsigned int ip;
ip = (lasat_board_info.li_eeprom_info.ipaddr &
lasat_board_info.li_eeprom_info.netmask) |
~lasat_board_info.li_eeprom_info.netmask;
sprintf(lasat_bcastaddr, "%d.%d.%d.%d",
(ip) & 0xff,
(ip >> 8) & 0xff,
(ip >> 16) & 0xff,
(ip >> 24) & 0xff);
}
static char proc_lasat_ipbuf[32];
/* Parsing of IP address */
int proc_lasat_ip(ctl_table *table, int write, struct file *filp, int proc_lasat_ip(ctl_table *table, int write, struct file *filp,
void *buffer, size_t *lenp, loff_t *ppos) void *buffer, size_t *lenp, loff_t *ppos)
{ {
unsigned int ip; unsigned int ip;
char *p, c; char *p, c;
int len; int len;
char ipbuf[32];
if (!table->data || !table->maxlen || !*lenp || if (!table->data || !table->maxlen || !*lenp ||
(*ppos && !write)) { (*ppos && !write)) {
...@@ -204,117 +165,88 @@ int proc_lasat_ip(ctl_table *table, int write, struct file *filp, ...@@ -204,117 +165,88 @@ int proc_lasat_ip(ctl_table *table, int write, struct file *filp,
return 0; return 0;
} }
mutex_lock(&lasat_info_mutex);
if (write) { if (write) {
len = 0; len = 0;
p = buffer; p = buffer;
while (len < *lenp) { while (len < *lenp) {
if (get_user(c, p++)) { if (get_user(c, p++))
mutex_unlock(&lasat_info_mutex);
return -EFAULT; return -EFAULT;
}
if (c == 0 || c == '\n') if (c == 0 || c == '\n')
break; break;
len++; len++;
} }
if (len >= sizeof(proc_lasat_ipbuf)-1) if (len >= sizeof(ipbuf)-1)
len = sizeof(proc_lasat_ipbuf) - 1; len = sizeof(ipbuf) - 1;
if (copy_from_user(proc_lasat_ipbuf, buffer, len)) { if (copy_from_user(ipbuf, buffer, len))
mutex_unlock(&lasat_info_mutex);
return -EFAULT; return -EFAULT;
} ipbuf[len] = 0;
proc_lasat_ipbuf[len] = 0;
*ppos += *lenp; *ppos += *lenp;
/* Now see if we can convert it to a valid IP */ /* Now see if we can convert it to a valid IP */
ip = in_aton(proc_lasat_ipbuf); ip = in_aton(ipbuf);
*(unsigned int *)(table->data) = ip; *(unsigned int *)(table->data) = ip;
lasat_write_eeprom_info(); lasat_write_eeprom_info();
} else { } else {
ip = *(unsigned int *)(table->data); ip = *(unsigned int *)(table->data);
sprintf(proc_lasat_ipbuf, "%d.%d.%d.%d", sprintf(ipbuf, "%d.%d.%d.%d",
(ip) & 0xff, (ip) & 0xff,
(ip >> 8) & 0xff, (ip >> 8) & 0xff,
(ip >> 16) & 0xff, (ip >> 16) & 0xff,
(ip >> 24) & 0xff); (ip >> 24) & 0xff);
len = strlen(proc_lasat_ipbuf); len = strlen(ipbuf);
if (len > *lenp) if (len > *lenp)
len = *lenp; len = *lenp;
if (len) if (len)
if (copy_to_user(buffer, proc_lasat_ipbuf, len)) { if (copy_to_user(buffer, ipbuf, len))
mutex_unlock(&lasat_info_mutex);
return -EFAULT; return -EFAULT;
}
if (len < *lenp) { if (len < *lenp) {
if (put_user('\n', ((char *) buffer) + len)) { if (put_user('\n', ((char *) buffer) + len))
mutex_unlock(&lasat_info_mutex);
return -EFAULT; return -EFAULT;
}
len++; len++;
} }
*lenp = len; *lenp = len;
*ppos += len; *ppos += len;
} }
update_bcastaddr();
mutex_unlock(&lasat_info_mutex);
return 0; return 0;
} }
#endif /* defined(CONFIG_INET) */ #endif
static int sysctl_lasat_eeprom_value(ctl_table *table, int *name, int nlen, static int sysctl_lasat_prid(ctl_table *table, int *name, int nlen,
void *oldval, size_t *oldlenp, void *oldval, size_t *oldlenp,
void *newval, size_t newlen) void *newval, size_t newlen)
{ {
int r; int r;
mutex_lock(&lasat_info_mutex);
r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen); r = sysctl_intvec(table, name, nlen, oldval, oldlenp, newval, newlen);
if (r < 0) { if (r < 0)
mutex_unlock(&lasat_info_mutex);
return r; return r;
}
if (newval && newlen) { if (newval && newlen) {
if (name && *name == LASAT_PRID) lasat_board_info.li_eeprom_info.prid = *(int *)newval;
lasat_board_info.li_eeprom_info.prid = *(int *)newval;
lasat_write_eeprom_info(); lasat_write_eeprom_info();
lasat_init_board_info(); lasat_init_board_info();
} }
mutex_unlock(&lasat_info_mutex);
return 0; return 0;
} }
int proc_lasat_eeprom_value(ctl_table *table, int write, struct file *filp, int proc_lasat_prid(ctl_table *table, int write, struct file *filp,
void *buffer, size_t *lenp, loff_t *ppos) void *buffer, size_t *lenp, loff_t *ppos)
{ {
int r; int r;
mutex_lock(&lasat_info_mutex);
r = proc_dointvec(table, write, filp, buffer, lenp, ppos); r = proc_dointvec(table, write, filp, buffer, lenp, ppos);
if ((!write) || r) { if (r < 0)
mutex_unlock(&lasat_info_mutex);
return r; return r;
if (write) {
lasat_board_info.li_eeprom_info.prid =
lasat_board_info.li_prid;
lasat_write_eeprom_info();
lasat_init_board_info();
} }
if (filp && filp->f_path.dentry) {
if (!strcmp(filp->f_path.dentry->d_name.name, "prid"))
lasat_board_info.li_eeprom_info.prid =
lasat_board_info.li_prid;
if (!strcmp(filp->f_path.dentry->d_name.name, "debugaccess"))
lasat_board_info.li_eeprom_info.debugaccess =
lasat_board_info.li_debugaccess;
}
lasat_write_eeprom_info();
mutex_unlock(&lasat_info_mutex);
return 0; return 0;
} }
extern int lasat_boot_to_service; extern int lasat_boot_to_service;
#ifdef CONFIG_SYSCTL
static ctl_table lasat_table[] = { static ctl_table lasat_table[] = {
{ {
.ctl_name = CTL_UNNUMBERED, .ctl_name = CTL_UNNUMBERED,
...@@ -349,8 +281,8 @@ static ctl_table lasat_table[] = { ...@@ -349,8 +281,8 @@ static ctl_table lasat_table[] = {
.data = &lasat_board_info.li_prid, .data = &lasat_board_info.li_prid,
.maxlen = sizeof(int), .maxlen = sizeof(int),
.mode = 0644, .mode = 0644,
.proc_handler = &proc_lasat_eeprom_value, .proc_handler = &proc_lasat_prid,
.strategy = &sysctl_lasat_eeprom_value .strategy = &sysctl_lasat_prid
}, },
#ifdef CONFIG_INET #ifdef CONFIG_INET
{ {
...@@ -363,7 +295,7 @@ static ctl_table lasat_table[] = { ...@@ -363,7 +295,7 @@ static ctl_table lasat_table[] = {
.strategy = &sysctl_lasat_intvec .strategy = &sysctl_lasat_intvec
}, },
{ {
.ctl_name = LASAT_NETMASK, .ctl_name = CTL_UNNUMBERED,
.procname = "netmask", .procname = "netmask",
.data = &lasat_board_info.li_eeprom_info.netmask, .data = &lasat_board_info.li_eeprom_info.netmask,
.maxlen = sizeof(int), .maxlen = sizeof(int),
...@@ -371,15 +303,6 @@ static ctl_table lasat_table[] = { ...@@ -371,15 +303,6 @@ static ctl_table lasat_table[] = {
.proc_handler = &proc_lasat_ip, .proc_handler = &proc_lasat_ip,
.strategy = &sysctl_lasat_intvec .strategy = &sysctl_lasat_intvec
}, },
{
.ctl_name = CTL_UNNUMBERED,
.procname = "bcastaddr",
.data = &lasat_bcastaddr,
.maxlen = sizeof(lasat_bcastaddr),
.mode = 0600,
.proc_handler = &proc_dostring,
.strategy = &sysctl_string
},
#endif #endif
{ {
.ctl_name = CTL_UNNUMBERED, .ctl_name = CTL_UNNUMBERED,
...@@ -417,7 +340,7 @@ static ctl_table lasat_table[] = { ...@@ -417,7 +340,7 @@ static ctl_table lasat_table[] = {
.data = &lasat_board_info.li_namestr, .data = &lasat_board_info.li_namestr,
.maxlen = sizeof(lasat_board_info.li_namestr), .maxlen = sizeof(lasat_board_info.li_namestr),
.mode = 0444, .mode = 0444,
.proc_handler = &proc_dostring, .proc_handler = &proc_dostring,
.strategy = &sysctl_string .strategy = &sysctl_string
}, },
{ {
...@@ -448,9 +371,12 @@ static int __init lasat_register_sysctl(void) ...@@ -448,9 +371,12 @@ static int __init lasat_register_sysctl(void)
lasat_table_header = lasat_table_header =
register_sysctl_table(lasat_root_table); register_sysctl_table(lasat_root_table);
if (!lasat_table_header) {
printk(KERN_ERR "Unable to register LASAT sysctl\n");
return -ENOMEM;
}
return 0; return 0;
} }
__initcall(lasat_register_sysctl); __initcall(lasat_register_sysctl);
#endif /* CONFIG_SYSCTL */
/*
* LASAT sysctl values
*/
#ifndef _LASAT_SYSCTL_H
#define _LASAT_SYSCTL_H
/* /proc/sys/lasat */
enum {
LASAT_CPU_HZ = 1,
LASAT_BUS_HZ,
LASAT_MODEL,
LASAT_PRID,
LASAT_IPADDR,
LASAT_NETMASK,
LASAT_BCAST,
LASAT_PASSWORD,
LASAT_SBOOT,
LASAT_RTC,
LASAT_NAMESTR,
LASAT_TYPESTR,
};
#endif /* _LASAT_SYSCTL_H */
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
int amon_cpu_avail(int cpu) int amon_cpu_avail(int cpu)
{ {
struct cpulaunch *launch = (struct cpulaunch *)KSEG0ADDR(CPULAUNCH); struct cpulaunch *launch = (struct cpulaunch *)CKSEG0ADDR(CPULAUNCH);
if (cpu < 0 || cpu >= NCPULAUNCH) { if (cpu < 0 || cpu >= NCPULAUNCH) {
pr_debug("avail: cpu%d is out of range\n", cpu); pr_debug("avail: cpu%d is out of range\n", cpu);
...@@ -53,7 +53,7 @@ void amon_cpu_start(int cpu, ...@@ -53,7 +53,7 @@ void amon_cpu_start(int cpu,
unsigned long gp, unsigned long a0) unsigned long gp, unsigned long a0)
{ {
volatile struct cpulaunch *launch = volatile struct cpulaunch *launch =
(struct cpulaunch *)KSEG0ADDR(CPULAUNCH); (struct cpulaunch *)CKSEG0ADDR(CPULAUNCH);
if (!amon_cpu_avail(cpu)) if (!amon_cpu_avail(cpu))
return; return;
......
...@@ -19,9 +19,8 @@ ...@@ -19,9 +19,8 @@
# under Linux. # under Linux.
# #
obj-y := malta_int.o malta_platform.o malta_setup.o obj-y := malta_int.o malta_mtd.o malta_platform.o malta_setup.o
obj-$(CONFIG_MTD) += malta_mtd.o
# FIXME FIXME FIXME # FIXME FIXME FIXME
obj-$(CONFIG_MIPS_MT_SMTC) += malta_smtc.o obj-$(CONFIG_MIPS_MT_SMTC) += malta_smtc.o
......
...@@ -446,6 +446,7 @@ static inline void local_r4k_flush_cache_page(void *args) ...@@ -446,6 +446,7 @@ static inline void local_r4k_flush_cache_page(void *args)
struct page *page = pfn_to_page(fcp_args->pfn); struct page *page = pfn_to_page(fcp_args->pfn);
int exec = vma->vm_flags & VM_EXEC; int exec = vma->vm_flags & VM_EXEC;
struct mm_struct *mm = vma->vm_mm; struct mm_struct *mm = vma->vm_mm;
int map_coherent = 0;
pgd_t *pgdp; pgd_t *pgdp;
pud_t *pudp; pud_t *pudp;
pmd_t *pmdp; pmd_t *pmdp;
...@@ -479,7 +480,9 @@ static inline void local_r4k_flush_cache_page(void *args) ...@@ -479,7 +480,9 @@ static inline void local_r4k_flush_cache_page(void *args)
* Use kmap_coherent or kmap_atomic to do flushes for * Use kmap_coherent or kmap_atomic to do flushes for
* another ASID than the current one. * another ASID than the current one.
*/ */
if (cpu_has_dc_aliases) map_coherent = (cpu_has_dc_aliases &&
page_mapped(page) && !Page_dcache_dirty(page));
if (map_coherent)
vaddr = kmap_coherent(page, addr); vaddr = kmap_coherent(page, addr);
else else
vaddr = kmap_atomic(page, KM_USER0); vaddr = kmap_atomic(page, KM_USER0);
...@@ -502,7 +505,7 @@ static inline void local_r4k_flush_cache_page(void *args) ...@@ -502,7 +505,7 @@ static inline void local_r4k_flush_cache_page(void *args)
} }
if (vaddr) { if (vaddr) {
if (cpu_has_dc_aliases) if (map_coherent)
kunmap_coherent(); kunmap_coherent();
else else
kunmap_atomic(vaddr, KM_USER0); kunmap_atomic(vaddr, KM_USER0);
...@@ -1226,6 +1229,28 @@ void au1x00_fixup_config_od(void) ...@@ -1226,6 +1229,28 @@ void au1x00_fixup_config_od(void)
} }
} }
/* CP0 hazard avoidance. */
#define NXP_BARRIER() \
__asm__ __volatile__( \
".set noreorder\n\t" \
"nop; nop; nop; nop; nop; nop;\n\t" \
".set reorder\n\t")
static void nxp_pr4450_fixup_config(void)
{
unsigned long config0;
config0 = read_c0_config();
/* clear all three cache coherency fields */
config0 &= ~(0x7 | (7 << 25) | (7 << 28));
config0 |= (((_page_cachable_default >> _CACHE_SHIFT) << 0) |
((_page_cachable_default >> _CACHE_SHIFT) << 25) |
((_page_cachable_default >> _CACHE_SHIFT) << 28));
write_c0_config(config0);
NXP_BARRIER();
}
static int __cpuinitdata cca = -1; static int __cpuinitdata cca = -1;
static int __init cca_setup(char *str) static int __init cca_setup(char *str)
...@@ -1271,6 +1296,10 @@ static void __cpuinit coherency_setup(void) ...@@ -1271,6 +1296,10 @@ static void __cpuinit coherency_setup(void)
case CPU_AU1500: /* rev. AB */ case CPU_AU1500: /* rev. AB */
au1x00_fixup_config_od(); au1x00_fixup_config_od();
break; break;
case PRID_IMP_PR4450:
nxp_pr4450_fixup_config();
break;
} }
} }
......
...@@ -71,6 +71,7 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); ...@@ -71,6 +71,7 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
* don't have to care about aliases on other CPUs. * don't have to care about aliases on other CPUs.
*/ */
unsigned long empty_zero_page, zero_page_mask; unsigned long empty_zero_page, zero_page_mask;
EXPORT_SYMBOL_GPL(empty_zero_page);
/* /*
* Not static inline because used by IP27 special magic initialization code * Not static inline because used by IP27 special magic initialization code
......
...@@ -460,7 +460,7 @@ void __cpuinit build_copy_page(void) ...@@ -460,7 +460,7 @@ void __cpuinit build_copy_page(void)
build_copy_load_pref(&buf, -off); build_copy_load_pref(&buf, -off);
off -= cache_line_size; off -= cache_line_size;
} }
off = cache_line_size ? min(8, pref_bias_copy_load / cache_line_size) * off = cache_line_size ? min(8, pref_bias_copy_store / cache_line_size) *
cache_line_size : 0; cache_line_size : 0;
while (off) { while (off) {
build_copy_store_pref(&buf, -off); build_copy_store_pref(&buf, -off);
......
...@@ -47,16 +47,7 @@ ...@@ -47,16 +47,7 @@
void __init board_setup(void) void __init board_setup(void)
{ {
unsigned long config0, configpr; unsigned long configpr;
config0 = read_c0_config();
/* clear all three cache coherency fields */
config0 &= ~(0x7 | (7<<25) | (7<<28));
config0 |= (CONF_CM_DEFAULT | (CONF_CM_DEFAULT<<25) |
(CONF_CM_DEFAULT<<28));
write_c0_config(config0);
BARRIER;
configpr = read_c0_config7(); configpr = read_c0_config7();
configpr |= (1<<19); /* enable tlb */ configpr |= (1<<19); /* enable tlb */
......
...@@ -33,15 +33,7 @@ ...@@ -33,15 +33,7 @@
void __init board_setup(void) void __init board_setup(void)
{ {
unsigned long config0, configpr; unsigned long configpr;
config0 = read_c0_config();
/* clear all three cache coherency fields */
config0 &= ~(0x7 | (7<<25) | (7<<28));
config0 |= (CONF_CM_DEFAULT | (CONF_CM_DEFAULT<<25) |
(CONF_CM_DEFAULT<<28));
write_c0_config(config0);
configpr = read_c0_config7(); configpr = read_c0_config7();
configpr |= (1<<19); /* enable tlb */ configpr |= (1<<19); /* enable tlb */
......
...@@ -207,6 +207,7 @@ struct pci_controller sb1250_controller = { ...@@ -207,6 +207,7 @@ struct pci_controller sb1250_controller = {
static int __init sb1250_pcibios_init(void) static int __init sb1250_pcibios_init(void)
{ {
void __iomem *io_map_base;
uint32_t cmdreg; uint32_t cmdreg;
uint64_t reg; uint64_t reg;
extern int pci_probe_only; extern int pci_probe_only;
...@@ -253,12 +254,13 @@ static int __init sb1250_pcibios_init(void) ...@@ -253,12 +254,13 @@ static int __init sb1250_pcibios_init(void)
* works correctly with most of Linux's drivers. * works correctly with most of Linux's drivers.
* XXX ehs: Should this happen in PCI Device mode? * XXX ehs: Should this happen in PCI Device mode?
*/ */
set_io_port_base((unsigned long)
ioremap(A_PHYS_LDTPCI_IO_MATCH_BYTES, 65536));
isa_slot_offset = (unsigned long) isa_slot_offset = (unsigned long)
ioremap(A_PHYS_LDTPCI_IO_MATCH_BYTES_32, 1024 * 1024); ioremap(A_PHYS_LDTPCI_IO_MATCH_BYTES_32, 1024 * 1024);
io_map_base = ioremap(A_PHYS_LDTPCI_IO_MATCH_BYTES, 1024 * 1024);
sb1250_controller.io_map_base = io_map_base;
set_io_port_base((unsigned long)io_map_base);
#ifdef CONFIG_SIBYTE_HAS_LDT #ifdef CONFIG_SIBYTE_HAS_LDT
/* /*
* Also check the LDT bridge's enable, just in case we didn't * Also check the LDT bridge's enable, just in case we didn't
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Copyright (C) 2001-2003 MontaVista Software Inc. * Copyright (C) 2001-2003 MontaVista Software Inc.
* Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com> * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com>
* Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> * Copyright (C) 2004-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
* Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org) * Copyright (C) 2004 by Ralf Baechle (ralf@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
...@@ -300,6 +300,18 @@ static int __init vr41xx_pciu_init(void) ...@@ -300,6 +300,18 @@ static int __init vr41xx_pciu_init(void)
ioport_resource.end = IO_PORT_RESOURCE_END; ioport_resource.end = IO_PORT_RESOURCE_END;
} }
if (setup->master_io) {
void __iomem *io_map_base;
struct resource *res = vr41xx_pci_controller.io_resource;
master = setup->master_io;
io_map_base = ioremap(master->bus_base_address,
res->end - res->start + 1);
if (!io_map_base)
return -EBUSY;
vr41xx_pci_controller.io_map_base = (unsigned long)io_map_base;
}
register_pci_controller(&vr41xx_pci_controller); register_pci_controller(&vr41xx_pci_controller);
return 0; return 0;
......
lib-y = setup.o rtc_xicor1241.o rtc_m41t81.o obj-y := setup.o rtc_xicor1241.o rtc_m41t81.o
lib-$(CONFIG_KGDB) += dbg_io.o obj-$(CONFIG_KGDB) += dbg_io.o
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/user.h> #include <linux/user.h>
#include <linux/a.out.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/reboot.h> #include <linux/reboot.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/user.h> #include <linux/user.h>
#include <linux/a.out.h>
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/delay.h> #include <linux/delay.h>
......
...@@ -96,6 +96,8 @@ endif ...@@ -96,6 +96,8 @@ endif
else else
KBUILD_CFLAGS += $(call cc-option,-mtune=power4) KBUILD_CFLAGS += $(call cc-option,-mtune=power4)
endif endif
else
LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
endif endif
ifeq ($(CONFIG_TUNE_CELL),y) ifeq ($(CONFIG_TUNE_CELL),y)
...@@ -154,7 +156,7 @@ all: zImage ...@@ -154,7 +156,7 @@ all: zImage
CPPFLAGS_vmlinux.lds := -Upowerpc CPPFLAGS_vmlinux.lds := -Upowerpc
BOOT_TARGETS = zImage zImage.initrd uImage zImage% dtbImage% treeImage.% cuImage.% BOOT_TARGETS = zImage zImage.initrd uImage zImage% dtbImage% treeImage.% cuImage.% simpleImage.%
PHONY += $(BOOT_TARGETS) PHONY += $(BOOT_TARGETS)
......
...@@ -51,7 +51,7 @@ $(addprefix $(obj)/,$(zlib) gunzip_util.o main.o): \ ...@@ -51,7 +51,7 @@ $(addprefix $(obj)/,$(zlib) gunzip_util.o main.o): \
$(addprefix $(obj)/,$(zliblinuxheader)) $(addprefix $(obj)/,$(zlibheader)) $(addprefix $(obj)/,$(zliblinuxheader)) $(addprefix $(obj)/,$(zlibheader))
src-libfdt := fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c src-libfdt := fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
src-wlib := string.S crt0.S stdio.c main.c \ src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
$(addprefix libfdt/,$(src-libfdt)) libfdt-wrapper.c \ $(addprefix libfdt/,$(src-libfdt)) libfdt-wrapper.c \
ns16550.c serial.c simple_alloc.c div64.S util.S \ ns16550.c serial.c simple_alloc.c div64.S util.S \
gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \ gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \
......
/*
* Special support for eabi and SVR4
*
* Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
* Copyright 2008 Freescale Semiconductor, Inc.
* Written By Michael Meissner
*
* Based on gcc/config/rs6000/crtsavres.asm from gcc
*
* This file is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* In addition to the permissions in the GNU General Public License, the
* Free Software Foundation gives you unlimited permission to link the
* compiled version of this file with other programs, and to distribute
* those programs without any restriction coming from the use of this
* file. (The General Public License restrictions do apply in other
* respects; for example, they cover modification of the file, and
* distribution when not linked into another program.)
*
* This file is distributed in the hope that 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; see the file COPYING. If not, write to
* the Free Software Foundation, 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* As a special exception, if you link this library with files
* compiled with GCC to produce an executable, this does not cause
* the resulting executable to be covered by the GNU General Public License.
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*/
.file "crtsavres.S"
.section ".text"
/* On PowerPC64 Linux, these functions are provided by the linker. */
#ifndef __powerpc64__
#define _GLOBAL(name) \
.type name,@function; \
.globl name; \
name:
/* Routines for saving integer registers, called by the compiler. */
/* Called with r11 pointing to the stack header word of the caller of the */
/* function, just beyond the end of the integer save area. */
_GLOBAL(_savegpr_14)
_GLOBAL(_save32gpr_14)
stw 14,-72(11) /* save gp registers */
_GLOBAL(_savegpr_15)
_GLOBAL(_save32gpr_15)
stw 15,-68(11)
_GLOBAL(_savegpr_16)
_GLOBAL(_save32gpr_16)
stw 16,-64(11)
_GLOBAL(_savegpr_17)
_GLOBAL(_save32gpr_17)
stw 17,-60(11)
_GLOBAL(_savegpr_18)
_GLOBAL(_save32gpr_18)
stw 18,-56(11)
_GLOBAL(_savegpr_19)
_GLOBAL(_save32gpr_19)
stw 19,-52(11)
_GLOBAL(_savegpr_20)
_GLOBAL(_save32gpr_20)
stw 20,-48(11)
_GLOBAL(_savegpr_21)
_GLOBAL(_save32gpr_21)
stw 21,-44(11)
_GLOBAL(_savegpr_22)
_GLOBAL(_save32gpr_22)
stw 22,-40(11)
_GLOBAL(_savegpr_23)
_GLOBAL(_save32gpr_23)
stw 23,-36(11)
_GLOBAL(_savegpr_24)
_GLOBAL(_save32gpr_24)
stw 24,-32(11)
_GLOBAL(_savegpr_25)
_GLOBAL(_save32gpr_25)
stw 25,-28(11)
_GLOBAL(_savegpr_26)
_GLOBAL(_save32gpr_26)
stw 26,-24(11)
_GLOBAL(_savegpr_27)
_GLOBAL(_save32gpr_27)
stw 27,-20(11)
_GLOBAL(_savegpr_28)
_GLOBAL(_save32gpr_28)
stw 28,-16(11)
_GLOBAL(_savegpr_29)
_GLOBAL(_save32gpr_29)
stw 29,-12(11)
_GLOBAL(_savegpr_30)
_GLOBAL(_save32gpr_30)
stw 30,-8(11)
_GLOBAL(_savegpr_31)
_GLOBAL(_save32gpr_31)
stw 31,-4(11)
blr
/* Routines for restoring integer registers, called by the compiler. */
/* Called with r11 pointing to the stack header word of the caller of the */
/* function, just beyond the end of the integer restore area. */
_GLOBAL(_restgpr_14)
_GLOBAL(_rest32gpr_14)
lwz 14,-72(11) /* restore gp registers */
_GLOBAL(_restgpr_15)
_GLOBAL(_rest32gpr_15)
lwz 15,-68(11)
_GLOBAL(_restgpr_16)
_GLOBAL(_rest32gpr_16)
lwz 16,-64(11)
_GLOBAL(_restgpr_17)
_GLOBAL(_rest32gpr_17)
lwz 17,-60(11)
_GLOBAL(_restgpr_18)
_GLOBAL(_rest32gpr_18)
lwz 18,-56(11)
_GLOBAL(_restgpr_19)
_GLOBAL(_rest32gpr_19)
lwz 19,-52(11)
_GLOBAL(_restgpr_20)
_GLOBAL(_rest32gpr_20)
lwz 20,-48(11)
_GLOBAL(_restgpr_21)
_GLOBAL(_rest32gpr_21)
lwz 21,-44(11)
_GLOBAL(_restgpr_22)
_GLOBAL(_rest32gpr_22)
lwz 22,-40(11)
_GLOBAL(_restgpr_23)
_GLOBAL(_rest32gpr_23)
lwz 23,-36(11)
_GLOBAL(_restgpr_24)
_GLOBAL(_rest32gpr_24)
lwz 24,-32(11)
_GLOBAL(_restgpr_25)
_GLOBAL(_rest32gpr_25)
lwz 25,-28(11)
_GLOBAL(_restgpr_26)
_GLOBAL(_rest32gpr_26)
lwz 26,-24(11)
_GLOBAL(_restgpr_27)
_GLOBAL(_rest32gpr_27)
lwz 27,-20(11)
_GLOBAL(_restgpr_28)
_GLOBAL(_rest32gpr_28)
lwz 28,-16(11)
_GLOBAL(_restgpr_29)
_GLOBAL(_rest32gpr_29)
lwz 29,-12(11)
_GLOBAL(_restgpr_30)
_GLOBAL(_rest32gpr_30)
lwz 30,-8(11)
_GLOBAL(_restgpr_31)
_GLOBAL(_rest32gpr_31)
lwz 31,-4(11)
blr
/* Routines for restoring integer registers, called by the compiler. */
/* Called with r11 pointing to the stack header word of the caller of the */
/* function, just beyond the end of the integer restore area. */
_GLOBAL(_restgpr_14_x)
_GLOBAL(_rest32gpr_14_x)
lwz 14,-72(11) /* restore gp registers */
_GLOBAL(_restgpr_15_x)
_GLOBAL(_rest32gpr_15_x)
lwz 15,-68(11)
_GLOBAL(_restgpr_16_x)
_GLOBAL(_rest32gpr_16_x)
lwz 16,-64(11)
_GLOBAL(_restgpr_17_x)
_GLOBAL(_rest32gpr_17_x)
lwz 17,-60(11)
_GLOBAL(_restgpr_18_x)
_GLOBAL(_rest32gpr_18_x)
lwz 18,-56(11)
_GLOBAL(_restgpr_19_x)
_GLOBAL(_rest32gpr_19_x)
lwz 19,-52(11)
_GLOBAL(_restgpr_20_x)
_GLOBAL(_rest32gpr_20_x)
lwz 20,-48(11)
_GLOBAL(_restgpr_21_x)
_GLOBAL(_rest32gpr_21_x)
lwz 21,-44(11)
_GLOBAL(_restgpr_22_x)
_GLOBAL(_rest32gpr_22_x)
lwz 22,-40(11)
_GLOBAL(_restgpr_23_x)
_GLOBAL(_rest32gpr_23_x)
lwz 23,-36(11)
_GLOBAL(_restgpr_24_x)
_GLOBAL(_rest32gpr_24_x)
lwz 24,-32(11)
_GLOBAL(_restgpr_25_x)
_GLOBAL(_rest32gpr_25_x)
lwz 25,-28(11)
_GLOBAL(_restgpr_26_x)
_GLOBAL(_rest32gpr_26_x)
lwz 26,-24(11)
_GLOBAL(_restgpr_27_x)
_GLOBAL(_rest32gpr_27_x)
lwz 27,-20(11)
_GLOBAL(_restgpr_28_x)
_GLOBAL(_rest32gpr_28_x)
lwz 28,-16(11)
_GLOBAL(_restgpr_29_x)
_GLOBAL(_rest32gpr_29_x)
lwz 29,-12(11)
_GLOBAL(_restgpr_30_x)
_GLOBAL(_rest32gpr_30_x)
lwz 30,-8(11)
_GLOBAL(_restgpr_31_x)
_GLOBAL(_rest32gpr_31_x)
lwz 0,4(11)
lwz 31,-4(11)
mtlr 0
mr 1,11
blr
#endif
...@@ -164,12 +164,6 @@ phy2: ethernet-phy@2 { ...@@ -164,12 +164,6 @@ phy2: ethernet-phy@2 {
reg = <0x2>; reg = <0x2>;
device_type = "ethernet-phy"; device_type = "ethernet-phy";
}; };
phy3: ethernet-phy@3 {
interrupt-parent = <&ipic>;
interrupts = <18 0x8>;
reg = <0x3>;
device_type = "ethernet-phy";
};
}; };
enet0: ethernet@24000 { enet0: ethernet@24000 {
...@@ -195,7 +189,7 @@ enet1: ethernet@25000 { ...@@ -195,7 +189,7 @@ enet1: ethernet@25000 {
interrupts = <35 0x8 36 0x8 37 0x8>; interrupts = <35 0x8 36 0x8 37 0x8>;
phy-connection-type = "mii"; phy-connection-type = "mii";
interrupt-parent = <&ipic>; interrupt-parent = <&ipic>;
phy-handle = <&phy3>; fixed-link = <1 1 1000 0 0>;
}; };
serial0: serial@4500 { serial0: serial@4500 {
......
...@@ -164,12 +164,6 @@ phy2: ethernet-phy@2 { ...@@ -164,12 +164,6 @@ phy2: ethernet-phy@2 {
reg = <0x2>; reg = <0x2>;
device_type = "ethernet-phy"; device_type = "ethernet-phy";
}; };
phy3: ethernet-phy@3 {
interrupt-parent = <&ipic>;
interrupts = <18 0x8>;
reg = <0x3>;
device_type = "ethernet-phy";
};
}; };
enet0: ethernet@24000 { enet0: ethernet@24000 {
...@@ -195,7 +189,7 @@ enet1: ethernet@25000 { ...@@ -195,7 +189,7 @@ enet1: ethernet@25000 {
interrupts = <35 0x8 36 0x8 37 0x8>; interrupts = <35 0x8 36 0x8 37 0x8>;
phy-connection-type = "mii"; phy-connection-type = "mii";
interrupt-parent = <&ipic>; interrupt-parent = <&ipic>;
phy-handle = <&phy3>; fixed-link = <1 1 1000 0 0>;
}; };
serial0: serial@4500 { serial0: serial@4500 {
......
...@@ -164,12 +164,6 @@ phy2: ethernet-phy@2 { ...@@ -164,12 +164,6 @@ phy2: ethernet-phy@2 {
reg = <0x2>; reg = <0x2>;
device_type = "ethernet-phy"; device_type = "ethernet-phy";
}; };
phy3: ethernet-phy@3 {
interrupt-parent = <&ipic>;
interrupts = <18 0x8>;
reg = <0x3>;
device_type = "ethernet-phy";
};
}; };
enet0: ethernet@24000 { enet0: ethernet@24000 {
...@@ -195,7 +189,7 @@ enet1: ethernet@25000 { ...@@ -195,7 +189,7 @@ enet1: ethernet@25000 {
interrupts = <35 0x8 36 0x8 37 0x8>; interrupts = <35 0x8 36 0x8 37 0x8>;
phy-connection-type = "mii"; phy-connection-type = "mii";
interrupt-parent = <&ipic>; interrupt-parent = <&ipic>;
phy-handle = <&phy3>; fixed-link = <1 1 1000 0 0>;
}; };
serial0: serial@4500 { serial0: serial@4500 {
......
...@@ -409,7 +409,7 @@ pci2: pcie@e000a000 { ...@@ -409,7 +409,7 @@ pci2: pcie@e000a000 {
interrupts = <26 2>; interrupts = <26 2>;
bus-range = <0 255>; bus-range = <0 255>;
ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000 ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
0x1000000 0x0 0x0 0xe3000000 0x0 0x8000000>; 0x1000000 0x0 0x0 0xe3000000 0x0 0x100000>;
clock-frequency = <33333333>; clock-frequency = <33333333>;
#interrupt-cells = <1>; #interrupt-cells = <1>;
#size-cells = <2>; #size-cells = <2>;
...@@ -428,7 +428,7 @@ pcie@0 { ...@@ -428,7 +428,7 @@ pcie@0 {
0x1000000 0x0 0x0 0x1000000 0x0 0x0
0x1000000 0x0 0x0 0x1000000 0x0 0x0
0x0 0x8000000>; 0x0 0x100000>;
}; };
}; };
}; };
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -368,7 +368,12 @@ interrupt_base: ...@@ -368,7 +368,12 @@ interrupt_base:
rlwimi r11,r13,0,26,31 /* Insert static perms */ rlwimi r11,r13,0,26,31 /* Insert static perms */
rlwinm r11,r11,0,20,15 /* Clear U0-U3 */ /*
* Clear U0-U3 and WL1 IL1I IL1D IL2I IL2D bits which are added
* on newer 440 cores like the 440x6 used on AMCC 460EX/460GT (see
* include/asm-powerpc/pgtable-ppc32.h for details).
*/
rlwinm r11,r11,0,20,10
/* find the TLB index that caused the fault. It has to be here. */ /* find the TLB index that caused the fault. It has to be here. */
tlbsx r10, 0, r10 tlbsx r10, 0, r10
......
...@@ -1073,7 +1073,7 @@ static const struct file_operations virq_debug_fops = { ...@@ -1073,7 +1073,7 @@ static const struct file_operations virq_debug_fops = {
static int __init irq_debugfs_init(void) static int __init irq_debugfs_init(void)
{ {
if (debugfs_create_file("virq_mapping", S_IRUGO, powerpc_debugfs_root, if (debugfs_create_file("virq_mapping", S_IRUGO, powerpc_debugfs_root,
NULL, &virq_debug_fops)) NULL, &virq_debug_fops) == NULL)
return -ENOMEM; return -ENOMEM;
return 0; return 0;
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <linux/screen_info.h> #include <linux/screen_info.h>
#include <linux/vt_kern.h> #include <linux/vt_kern.h>
#include <linux/nvram.h> #include <linux/nvram.h>
#include <linux/console.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/delay.h> #include <linux/delay.h>
...@@ -160,7 +159,6 @@ EXPORT_SYMBOL(screen_info); ...@@ -160,7 +159,6 @@ EXPORT_SYMBOL(screen_info);
EXPORT_SYMBOL(timer_interrupt); EXPORT_SYMBOL(timer_interrupt);
EXPORT_SYMBOL(irq_desc); EXPORT_SYMBOL(irq_desc);
EXPORT_SYMBOL(tb_ticks_per_jiffy); EXPORT_SYMBOL(tb_ticks_per_jiffy);
EXPORT_SYMBOL(console_drivers);
EXPORT_SYMBOL(cacheable_memcpy); EXPORT_SYMBOL(cacheable_memcpy);
#endif #endif
......
...@@ -48,6 +48,20 @@ do ...@@ -48,6 +48,20 @@ do
fi fi
done done
# ignore register save/restore funcitons
if [ "${UNDEF:0:9}" = "_restgpr_" ]; then
OK=1
fi
if [ "${UNDEF:0:11}" = "_rest32gpr_" ]; then
OK=1
fi
if [ "${UNDEF:0:9}" = "_savegpr_" ]; then
OK=1
fi
if [ "${UNDEF:0:11}" = "_save32gpr_" ]; then
OK=1
fi
if [ $OK -eq 0 ]; then if [ $OK -eq 0 ]; then
ERROR=1 ERROR=1
echo "Error: External symbol '$UNDEF' referenced" \ echo "Error: External symbol '$UNDEF' referenced" \
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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