summaryrefslogtreecommitdiff
path: root/arch/mips/kernel/smtc.c
diff options
context:
space:
mode:
authorDaniel Schaeffer <daniel@dschaeffer.localdomain>2008-01-30 15:42:41 -0500
committerDaniel Schaeffer <daniel@dschaeffer.localdomain>2008-01-30 15:42:41 -0500
commit648b932d8cf61f38d08a84e6388036b22766c2df (patch)
tree3c48859a194482b645b93c1bead3bcc323327fb7 /arch/mips/kernel/smtc.c
parent2506ae0663e660d8dc7624fcdae1814c8ee3d10a (diff)
parentbbf25010f1a6b761914430f5fca081ec8c7accd1 (diff)
Merge branch '2.6.23' into 2.6.22.6-imx27
Conflicts: Documentation/kernel-parameters.txt Makefile arch/arm/Kconfig arch/arm/Makefile arch/arm/mach-mx3/Kconfig arch/arm/mach-mx3/Makefile arch/arm/mach-mx3/mm.c arch/arm/mach-mx3/mx31ads.c arch/arm/mm/Kconfig arch/arm/plat-mxc/Kconfig arch/arm/plat-mxc/Makefile arch/arm/plat-mxc/irq.c block/cfq-iosched.c drivers/ata/ahci.c drivers/ata/libata-core.c drivers/char/watchdog/Kconfig drivers/firewire/fw-sbp2.c drivers/md/dm-crypt.c drivers/media/video/pwc/pwc-if.c drivers/mmc/card/Kconfig drivers/mmc/card/queue.c drivers/mmc/core/Makefile drivers/mmc/core/bus.c drivers/mmc/core/core.c drivers/mmc/core/host.c drivers/mmc/core/mmc.c drivers/mmc/core/sd.c drivers/mmc/core/sd_ops.c drivers/mmc/host/at91_mci.c drivers/mmc/host/sdhci.c drivers/net/bonding/bond_main.c drivers/net/fec.c drivers/net/forcedeth.c drivers/net/r8169.c drivers/net/sky2.c drivers/rtc/Kconfig drivers/rtc/Makefile drivers/spi/Kconfig drivers/spi/Makefile drivers/usb/gadget/Makefile drivers/usb/gadget/gadget_chips.h drivers/usb/host/ehci.h drivers/video/logo/logo.c drivers/w1/slaves/Makefile fs/9p/conv.c fs/direct-io.c fs/exec.c fs/ocfs2/file.c fs/signalfd.c fs/sysfs/file.c include/asm-arm/arch-mxc/dma.h include/asm-arm/arch-mxc/entry-macro.S include/asm-arm/arch-mxc/hardware.h include/asm-arm/arch-mxc/io.h include/asm-arm/arch-mxc/irqs.h include/asm-arm/arch-mxc/memory.h include/asm-arm/arch-mxc/mx31.h include/asm-arm/arch-mxc/mxc.h include/asm-arm/arch-mxc/system.h include/asm-arm/arch-mxc/timex.h include/asm-arm/arch-mxc/uncompress.h include/asm-arm/arch-mxc/vmalloc.h include/linux/fsl_devices.h include/linux/ioprio.h kernel/lockdep_proc.c kernel/signal.c mm/hugetlb.c mm/readahead.c net/bluetooth/rfcomm/tty.c net/bridge/br_device.c net/core/dev.c net/ieee80211/softmac/ieee80211softmac_assoc.c net/ieee80211/softmac/ieee80211softmac_wx.c net/ipv4/netfilter/nf_conntrack_proto_icmp.c net/ipv4/tcp_input.c net/netfilter/nf_conntrack_proto_sctp.c
Diffstat (limited to 'arch/mips/kernel/smtc.c')
-rw-r--r--arch/mips/kernel/smtc.c45
1 files changed, 15 insertions, 30 deletions
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c
index 046b03b1705a..f09404377ef1 100644
--- a/arch/mips/kernel/smtc.c
+++ b/arch/mips/kernel/smtc.c
@@ -25,10 +25,11 @@
#include <asm/smtc_proc.h>
/*
- * This file should be built into the kernel only if CONFIG_MIPS_MT_SMTC is set.
+ * SMTC Kernel needs to manipulate low-level CPU interrupt mask
+ * in do_IRQ. These are passed in setup_irq_smtc() and stored
+ * in this table.
*/
-
-#define MIPS_CPU_IPI_IRQ 1
+unsigned long irq_hwmask[NR_IRQS];
#define LOCK_MT_PRA() \
local_irq_save(flags); \
@@ -86,25 +87,11 @@ unsigned int smtc_status = 0;
/* Boot command line configuration overrides */
-static int vpelimit = 0;
-static int tclimit = 0;
static int ipibuffers = 0;
static int nostlb = 0;
static int asidmask = 0;
unsigned long smtc_asid_mask = 0xff;
-static int __init maxvpes(char *str)
-{
- get_option(&str, &vpelimit);
- return 1;
-}
-
-static int __init maxtcs(char *str)
-{
- get_option(&str, &tclimit);
- return 1;
-}
-
static int __init ipibufs(char *str)
{
get_option(&str, &ipibuffers);
@@ -137,8 +124,6 @@ static int __init asidmask_set(char *str)
return 1;
}
-__setup("maxvpes=", maxvpes);
-__setup("maxtcs=", maxtcs);
__setup("ipibufs=", ipibufs);
__setup("nostlb", stlb_disable);
__setup("asidmask=", asidmask_set);
@@ -168,9 +153,9 @@ static int __init tintq(char *str)
__setup("tintq=", tintq);
-int imstuckcount[2][8];
+static int imstuckcount[2][8];
/* vpemask represents IM/IE bits of per-VPE Status registers, low-to-high */
-int vpemask[2][8] = {
+static int vpemask[2][8] = {
{0, 0, 1, 0, 0, 0, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 1}
};
@@ -540,7 +525,7 @@ void mipsmt_prepare_cpus(void)
* (unsigned long)idle->thread_info the gp
*
*/
-void smtc_boot_secondary(int cpu, struct task_struct *idle)
+void __cpuinit smtc_boot_secondary(int cpu, struct task_struct *idle)
{
extern u32 kernelsp[NR_CPUS];
long flags;
@@ -876,7 +861,7 @@ void deferred_smtc_ipi(void)
* Send clock tick to all TCs except the one executing the funtion
*/
-void smtc_timer_broadcast(int vpe)
+void smtc_timer_broadcast(void)
{
int cpu;
int myTC = cpu_data[smp_processor_id()].tc_id;
@@ -975,7 +960,12 @@ static void ipi_irq_dispatch(void)
do_IRQ(cpu_ipi_irq);
}
-static struct irqaction irq_ipi;
+static struct irqaction irq_ipi = {
+ .handler = ipi_interrupt,
+ .flags = IRQF_DISABLED,
+ .name = "SMTC_IPI",
+ .flags = IRQF_PERCPU
+};
static void setup_cross_vpe_interrupts(unsigned int nvpe)
{
@@ -987,13 +977,8 @@ static void setup_cross_vpe_interrupts(unsigned int nvpe)
set_vi_handler(MIPS_CPU_IPI_IRQ, ipi_irq_dispatch);
- irq_ipi.handler = ipi_interrupt;
- irq_ipi.flags = IRQF_DISABLED;
- irq_ipi.name = "SMTC_IPI";
-
setup_irq_smtc(cpu_ipi_irq, &irq_ipi, (0x100 << MIPS_CPU_IPI_IRQ));
- irq_desc[cpu_ipi_irq].status |= IRQ_PER_CPU;
set_irq_handler(cpu_ipi_irq, handle_percpu_irq);
}
@@ -1104,7 +1089,7 @@ void smtc_idle_loop_hook(void)
mtflags = dmt();
pdb_msg = &id_ho_db_msg[0];
im = read_c0_status();
- vpe = cpu_data[smp_processor_id()].vpe_id;
+ vpe = current_cpu_data.vpe_id;
for (bit = 0; bit < 8; bit++) {
/*
* In current prototype, I/O interrupts