Commit 7f45e5cd authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
  sparc32, leon: bugfix in LEON SMP interrupt init
  sparc32, sun4m: bugfix in SMP IPI traphandler
  sparc: Remove unnecessary semicolons
  Add support for allocating irqs for bootbus devices
  Do not skip interrupt sources in sun4d interrupt handler and acknowledge interrupts correctly
  Restructure sun4d_build_device_irq so that timer interrupts can be allocated
  sparc: PCIC_PCI needs SPARC32 dependency
  sparc: Do not select GENERIC_HARDIRQS_NO_DEPRECATED
  sparc32,leon: add GRPCI2 PCI Host driver
  sparc32,leon: added LEON-common low-level PCI routines
  sparc32: added CONFIG_PCIC_PCI Kconfig setting
parents 6aeccecc 10f0d07c
...@@ -26,7 +26,6 @@ config SPARC ...@@ -26,7 +26,6 @@ config SPARC
select HAVE_DMA_API_DEBUG select HAVE_DMA_API_DEBUG
select HAVE_ARCH_JUMP_LABEL select HAVE_ARCH_JUMP_LABEL
select HAVE_GENERIC_HARDIRQS select HAVE_GENERIC_HARDIRQS
select GENERIC_HARDIRQS_NO_DEPRECATED
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select USE_GENERIC_SMP_HELPERS if SMP select USE_GENERIC_SMP_HELPERS if SMP
...@@ -528,6 +527,23 @@ config PCI_DOMAINS ...@@ -528,6 +527,23 @@ config PCI_DOMAINS
config PCI_SYSCALL config PCI_SYSCALL
def_bool PCI def_bool PCI
config PCIC_PCI
bool
depends on PCI && SPARC32 && !SPARC_LEON
default y
config LEON_PCI
bool
depends on PCI && SPARC_LEON
default y
config GRPCI2
bool "GRPCI2 Host Bridge Support"
depends on LEON_PCI
default y
help
Say Y here to include the GRPCI2 Host Bridge Driver.
source "drivers/pci/Kconfig" source "drivers/pci/Kconfig"
source "drivers/pcmcia/Kconfig" source "drivers/pcmcia/Kconfig"
......
...@@ -138,7 +138,7 @@ static unsigned char sun_82072_fd_inb(int port) ...@@ -138,7 +138,7 @@ static unsigned char sun_82072_fd_inb(int port)
return sun_fdc->data_82072; return sun_fdc->data_82072;
case 7: /* FD_DIR */ case 7: /* FD_DIR */
return sun_read_dir(); return sun_read_dir();
}; }
panic("sun_82072_fd_inb: How did I get here?"); panic("sun_82072_fd_inb: How did I get here?");
} }
...@@ -161,7 +161,7 @@ static void sun_82072_fd_outb(unsigned char value, int port) ...@@ -161,7 +161,7 @@ static void sun_82072_fd_outb(unsigned char value, int port)
case 4: /* FD_STATUS */ case 4: /* FD_STATUS */
sun_fdc->status_82072 = value; sun_fdc->status_82072 = value;
break; break;
}; }
return; return;
} }
...@@ -186,7 +186,7 @@ static unsigned char sun_82077_fd_inb(int port) ...@@ -186,7 +186,7 @@ static unsigned char sun_82077_fd_inb(int port)
return sun_fdc->data_82077; return sun_fdc->data_82077;
case 7: /* FD_DIR */ case 7: /* FD_DIR */
return sun_read_dir(); return sun_read_dir();
}; }
panic("sun_82077_fd_inb: How did I get here?"); panic("sun_82077_fd_inb: How did I get here?");
} }
...@@ -212,7 +212,7 @@ static void sun_82077_fd_outb(unsigned char value, int port) ...@@ -212,7 +212,7 @@ static void sun_82077_fd_outb(unsigned char value, int port)
case 3: /* FD_TDR */ case 3: /* FD_TDR */
sun_fdc->tapectl_82077 = value; sun_fdc->tapectl_82077 = value;
break; break;
}; }
return; return;
} }
......
...@@ -111,7 +111,7 @@ static unsigned char sun_82077_fd_inb(unsigned long port) ...@@ -111,7 +111,7 @@ static unsigned char sun_82077_fd_inb(unsigned long port)
case 7: /* FD_DIR */ case 7: /* FD_DIR */
/* XXX: Is DCL on 0x80 in sun4m? */ /* XXX: Is DCL on 0x80 in sun4m? */
return sbus_readb(&sun_fdc->dir_82077); return sbus_readb(&sun_fdc->dir_82077);
}; }
panic("sun_82072_fd_inb: How did I get here?"); panic("sun_82072_fd_inb: How did I get here?");
} }
...@@ -135,7 +135,7 @@ static void sun_82077_fd_outb(unsigned char value, unsigned long port) ...@@ -135,7 +135,7 @@ static void sun_82077_fd_outb(unsigned char value, unsigned long port)
case 4: /* FD_STATUS */ case 4: /* FD_STATUS */
sbus_writeb(value, &sun_fdc->status_82077); sbus_writeb(value, &sun_fdc->status_82077);
break; break;
}; }
return; return;
} }
......
...@@ -318,6 +318,9 @@ struct device_node; ...@@ -318,6 +318,9 @@ struct device_node;
extern unsigned int leon_build_device_irq(unsigned int real_irq, extern unsigned int leon_build_device_irq(unsigned int real_irq,
irq_flow_handler_t flow_handler, irq_flow_handler_t flow_handler,
const char *name, int do_ack); const char *name, int do_ack);
extern void leon_update_virq_handling(unsigned int virq,
irq_flow_handler_t flow_handler,
const char *name, int do_ack);
extern void leon_clear_clock_irq(void); extern void leon_clear_clock_irq(void);
extern void leon_load_profile_irq(int cpu, unsigned int limit); extern void leon_load_profile_irq(int cpu, unsigned int limit);
extern void leon_init_timers(irq_handler_t counter_fn); extern void leon_init_timers(irq_handler_t counter_fn);
......
/*
* asm/leon_pci.h
*
* Copyright (C) 2011 Aeroflex Gaisler AB, Daniel Hellstrom
*/
#ifndef _ASM_LEON_PCI_H_
#define _ASM_LEON_PCI_H_
/* PCI related definitions */
struct leon_pci_info {
struct pci_ops *ops;
struct resource io_space;
struct resource mem_space;
int (*map_irq)(struct pci_dev *dev, u8 slot, u8 pin);
};
extern void leon_pci_init(struct platform_device *ofdev,
struct leon_pci_info *info);
#endif /* _ASM_LEON_PCI_H_ */
...@@ -47,7 +47,31 @@ extern struct device_node *pci_device_to_OF_node(struct pci_dev *pdev); ...@@ -47,7 +47,31 @@ extern struct device_node *pci_device_to_OF_node(struct pci_dev *pdev);
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#ifndef CONFIG_LEON_PCI
/* generic pci stuff */ /* generic pci stuff */
#include <asm-generic/pci.h> #include <asm-generic/pci.h>
#else
/*
* On LEON PCI Memory space is mapped 1:1 with physical address space.
*
* I/O space is located at low 64Kbytes in PCI I/O space. The I/O addresses
* are converted into CPU addresses to virtual addresses that are mapped with
* MMU to the PCI Host PCI I/O space window which are translated to the low
* 64Kbytes by the Host controller.
*/
extern void
pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
struct resource *res);
extern void
pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
struct pci_bus_region *region);
static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
{
return PCI_IRQ_NONE;
}
#endif
#endif /* __SPARC_PCI_H */ #endif /* __SPARC_PCI_H */
...@@ -29,7 +29,7 @@ struct linux_pcic { ...@@ -29,7 +29,7 @@ struct linux_pcic {
int pcic_imdim; int pcic_imdim;
}; };
#ifdef CONFIG_PCI #ifdef CONFIG_PCIC_PCI
extern int pcic_present(void); extern int pcic_present(void);
extern int pcic_probe(void); extern int pcic_probe(void);
extern void pci_time_init(void); extern void pci_time_init(void);
......
...@@ -220,7 +220,7 @@ static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, int ...@@ -220,7 +220,7 @@ static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, int
switch (size) { switch (size) {
case 4: case 4:
return xchg_u32(ptr, x); return xchg_u32(ptr, x);
}; }
__xchg_called_with_bad_pointer(); __xchg_called_with_bad_pointer();
return x; return x;
} }
......
...@@ -234,7 +234,7 @@ static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, ...@@ -234,7 +234,7 @@ static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr,
return xchg32(ptr, x); return xchg32(ptr, x);
case 8: case 8:
return xchg64(ptr, x); return xchg64(ptr, x);
}; }
__xchg_called_with_bad_pointer(); __xchg_called_with_bad_pointer();
return x; return x;
} }
......
...@@ -73,7 +73,9 @@ obj-$(CONFIG_SPARC64_SMP) += cpumap.o ...@@ -73,7 +73,9 @@ obj-$(CONFIG_SPARC64_SMP) += cpumap.o
obj-y += dma.o obj-y += dma.o
obj-$(CONFIG_SPARC32_PCI) += pcic.o obj-$(CONFIG_PCIC_PCI) += pcic.o
obj-$(CONFIG_LEON_PCI) += leon_pci.o
obj-$(CONFIG_GRPCI2) += leon_pci_grpci2.o
obj-$(CONFIG_SMP) += trampoline_$(BITS).o smp_$(BITS).o obj-$(CONFIG_SMP) += trampoline_$(BITS).o smp_$(BITS).o
obj-$(CONFIG_SPARC32_SMP) += sun4m_smp.o sun4d_smp.o leon_smp.o obj-$(CONFIG_SPARC32_SMP) += sun4m_smp.o sun4d_smp.o leon_smp.o
......
...@@ -123,7 +123,7 @@ static long apc_ioctl(struct file *f, unsigned int cmd, unsigned long __arg) ...@@ -123,7 +123,7 @@ static long apc_ioctl(struct file *f, unsigned int cmd, unsigned long __arg)
default: default:
return -EINVAL; return -EINVAL;
}; }
return 0; return 0;
} }
......
...@@ -101,7 +101,7 @@ void set_auxio(unsigned char bits_on, unsigned char bits_off) ...@@ -101,7 +101,7 @@ void set_auxio(unsigned char bits_on, unsigned char bits_off)
break; break;
default: default:
panic("Can't set AUXIO register on this machine."); panic("Can't set AUXIO register on this machine.");
}; }
spin_unlock_irqrestore(&auxio_lock, flags); spin_unlock_irqrestore(&auxio_lock, flags);
} }
EXPORT_SYMBOL(set_auxio); EXPORT_SYMBOL(set_auxio);
......
...@@ -664,7 +664,7 @@ static void chmc_interpret_one_decode_reg(struct chmc *p, int which_bank, u64 va ...@@ -664,7 +664,7 @@ static void chmc_interpret_one_decode_reg(struct chmc *p, int which_bank, u64 va
case 0x0: case 0x0:
bp->interleave = 16; bp->interleave = 16;
break; break;
}; }
/* UK[10] is reserved, and UK[11] is not set for the SDRAM /* UK[10] is reserved, and UK[11] is not set for the SDRAM
* bank size definition. * bank size definition.
......
...@@ -229,7 +229,7 @@ real_irq_entry: ...@@ -229,7 +229,7 @@ real_irq_entry:
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
.globl patchme_maybe_smp_msg .globl patchme_maybe_smp_msg
cmp %l7, 12 cmp %l7, 11
patchme_maybe_smp_msg: patchme_maybe_smp_msg:
bgu maybe_smp4m_msg bgu maybe_smp4m_msg
nop nop
...@@ -293,7 +293,7 @@ maybe_smp4m_msg: ...@@ -293,7 +293,7 @@ maybe_smp4m_msg:
WRITE_PAUSE WRITE_PAUSE
wr %l4, PSR_ET, %psr wr %l4, PSR_ET, %psr
WRITE_PAUSE WRITE_PAUSE
sll %o2, 28, %o2 ! shift for simpler checks below sll %o3, 28, %o2 ! shift for simpler checks below
maybe_smp4m_msg_check_single: maybe_smp4m_msg_check_single:
andcc %o2, 0x1, %g0 andcc %o2, 0x1, %g0
beq,a maybe_smp4m_msg_check_mask beq,a maybe_smp4m_msg_check_mask
...@@ -1604,7 +1604,7 @@ restore_current: ...@@ -1604,7 +1604,7 @@ restore_current:
retl retl
nop nop
#ifdef CONFIG_PCI #ifdef CONFIG_PCIC_PCI
#include <asm/pcic.h> #include <asm/pcic.h>
.align 4 .align 4
...@@ -1650,7 +1650,7 @@ pcic_nmi_trap_patch: ...@@ -1650,7 +1650,7 @@ pcic_nmi_trap_patch:
rd %psr, %l0 rd %psr, %l0
.word 0 .word 0
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCIC_PCI */
.globl flushw_all .globl flushw_all
flushw_all: flushw_all:
......
...@@ -236,6 +236,21 @@ static unsigned int _leon_build_device_irq(struct platform_device *op, ...@@ -236,6 +236,21 @@ static unsigned int _leon_build_device_irq(struct platform_device *op,
return leon_build_device_irq(real_irq, handle_simple_irq, "edge", 0); return leon_build_device_irq(real_irq, handle_simple_irq, "edge", 0);
} }
void leon_update_virq_handling(unsigned int virq,
irq_flow_handler_t flow_handler,
const char *name, int do_ack)
{
unsigned long mask = (unsigned long)irq_get_chip_data(virq);
mask &= ~LEON_DO_ACK_HW;
if (do_ack)
mask |= LEON_DO_ACK_HW;
irq_set_chip_and_handler_name(virq, &leon_irq,
flow_handler, name);
irq_set_chip_data(virq, (void *)mask);
}
void __init leon_init_timers(irq_handler_t counter_fn) void __init leon_init_timers(irq_handler_t counter_fn)
{ {
int irq, eirq; int irq, eirq;
...@@ -361,6 +376,22 @@ void __init leon_init_timers(irq_handler_t counter_fn) ...@@ -361,6 +376,22 @@ void __init leon_init_timers(irq_handler_t counter_fn)
prom_halt(); prom_halt();
} }
#ifdef CONFIG_SMP
{
unsigned long flags;
/*
* In SMP, sun4m adds a IPI handler to IRQ trap handler that
* LEON never must take, sun4d and LEON overwrites the branch
* with a NOP.
*/
local_irq_save(flags);
patchme_maybe_smp_msg[0] = 0x01000000; /* NOP out the branch */
local_flush_cache_all();
local_irq_restore(flags);
}
#endif
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[leon3_gptimer_idx].ctrl, LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[leon3_gptimer_idx].ctrl,
LEON3_GPTIMER_EN | LEON3_GPTIMER_EN |
LEON3_GPTIMER_RL | LEON3_GPTIMER_RL |
......
/*
* leon_pci.c: LEON Host PCI support
*
* Copyright (C) 2011 Aeroflex Gaisler AB, Daniel Hellstrom
*
* Code is partially derived from pcic.c
*/
#include <linux/of_device.h>
#include <linux/kernel.h>
#include <linux/pci.h>
#include <asm/leon.h>
#include <asm/leon_pci.h>
/* The LEON architecture does not rely on a BIOS or bootloader to setup
* PCI for us. The Linux generic routines are used to setup resources,
* reset values of confuration-space registers settings ae preseved.
*/
void leon_pci_init(struct platform_device *ofdev, struct leon_pci_info *info)
{
struct pci_bus *root_bus;
root_bus = pci_scan_bus_parented(&ofdev->dev, 0, info->ops, info);
if (root_bus) {
root_bus->resource[0] = &info->io_space;
root_bus->resource[1] = &info->mem_space;
root_bus->resource[2] = NULL;
/* Init all PCI devices into PCI tree */
pci_bus_add_devices(root_bus);
/* Setup IRQs of all devices using custom routines */
pci_fixup_irqs(pci_common_swizzle, info->map_irq);
/* Assign devices with resources */
pci_assign_unassigned_resources();
}
}
/* PCI Memory and Prefetchable Memory is direct-mapped. However I/O Space is
* accessed through a Window which is translated to low 64KB in PCI space, the
* first 4KB is not used so 60KB is available.
*
* This function is used by generic code to translate resource addresses into
* PCI addresses.
*/
void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
struct resource *res)
{
struct leon_pci_info *info = dev->bus->sysdata;
region->start = res->start;
region->end = res->end;
if (res->flags & IORESOURCE_IO) {
region->start -= (info->io_space.start - 0x1000);
region->end -= (info->io_space.start - 0x1000);
}
}
EXPORT_SYMBOL(pcibios_resource_to_bus);
/* see pcibios_resource_to_bus() comment */
void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
struct pci_bus_region *region)
{
struct leon_pci_info *info = dev->bus->sysdata;
res->start = region->start;
res->end = region->end;
if (res->flags & IORESOURCE_IO) {
res->start += (info->io_space.start - 0x1000);
res->end += (info->io_space.start - 0x1000);
}
}
EXPORT_SYMBOL(pcibios_bus_to_resource);
void __devinit pcibios_fixup_bus(struct pci_bus *pbus)
{
struct leon_pci_info *info = pbus->sysdata;
struct pci_dev *dev;
int i, has_io, has_mem;
u16 cmd;
/* Generic PCI bus probing sets these to point at
* &io{port,mem}_resouce which is wrong for us.
*/
if (pbus->self == NULL) {
pbus->resource[0] = &info->io_space;
pbus->resource[1] = &info->mem_space;
pbus->resource[2] = NULL;
}
list_for_each_entry(dev, &pbus->devices, bus_list) {
/*
* We can not rely on that the bootloader has enabled I/O
* or memory access to PCI devices. Instead we enable it here
* if the device has BARs of respective type.
*/
has_io = has_mem = 0;
for (i = 0; i < PCI_ROM_RESOURCE; i++) {
unsigned long f = dev->resource[i].flags;
if (f & IORESOURCE_IO)
has_io = 1;
else if (f & IORESOURCE_MEM)
has_mem = 1;
}
/* ROM BARs are mapped into 32-bit memory space */
if (dev->resource[PCI_ROM_RESOURCE].end != 0) {
dev->resource[PCI_ROM_RESOURCE].flags |=
IORESOURCE_ROM_ENABLE;
has_mem = 1;
}
pci_bus_read_config_word(pbus, dev->devfn, PCI_COMMAND, &cmd);
if (has_io && !(cmd & PCI_COMMAND_IO)) {
#ifdef CONFIG_PCI_DEBUG
printk(KERN_INFO "LEONPCI: Enabling I/O for dev %s\n",
pci_name(dev));
#endif
cmd |= PCI_COMMAND_IO;
pci_bus_write_config_word(pbus, dev->devfn, PCI_COMMAND,
cmd);
}
if (has_mem && !(cmd & PCI_COMMAND_MEMORY)) {
#ifdef CONFIG_PCI_DEBUG
printk(KERN_INFO "LEONPCI: Enabling MEMORY for dev"
"%s\n", pci_name(dev));
#endif
cmd |= PCI_COMMAND_MEMORY;
pci_bus_write_config_word(pbus, dev->devfn, PCI_COMMAND,
cmd);
}
}
}
/*
* Other archs parse arguments here.
*/
char * __devinit pcibios_setup(char *str)
{
return str;
}
resource_size_t pcibios_align_resource(void *data, const struct resource *res,
resource_size_t size, resource_size_t align)
{
return res->start;
}
int pcibios_enable_device(struct pci_dev *dev, int mask)
{
return pci_enable_resources(dev, mask);
}
struct device_node *pci_device_to_OF_node(struct pci_dev *pdev)
{
/*
* Currently the OpenBoot nodes are not connected with the PCI device,
* this is because the LEON PROM does not create PCI nodes. Eventually
* this will change and the same approach as pcic.c can be used to
* match PROM nodes with pci devices.
*/
return NULL;
}
EXPORT_SYMBOL(pci_device_to_OF_node);
void __devinit pcibios_update_irq(struct pci_dev *dev, int irq)
{
#ifdef CONFIG_PCI_DEBUG
printk(KERN_DEBUG "LEONPCI: Assigning IRQ %02d to %s\n", irq,
pci_name(dev));
#endif
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq);
}
/* in/out routines taken from pcic.c
*
* This probably belongs here rather than ioport.c because
* we do not want this crud linked into SBus kernels.
* Also, think for a moment about likes of floppy.c that
* include architecture specific parts. They may want to redefine ins/outs.
*
* We do not use horrible macros here because we want to
* advance pointer by sizeof(size).
*/
void outsb(unsigned long addr, const void *src, unsigned long count)
{
while (count) {
count -= 1;
outb(*(const char *)src, addr);
src += 1;
/* addr += 1; */
}
}
EXPORT_SYMBOL(outsb);
void outsw(unsigned long addr, const void *src, unsigned long count)
{
while (count) {
count -= 2;
outw(*(const short *)src, addr);
src += 2;
/* addr += 2; */
}
}
EXPORT_SYMBOL(outsw);
void outsl(unsigned long addr, const void *src, unsigned long count)
{
while (count) {
count -= 4;
outl(*(const long *)src, addr);
src += 4;
/* addr += 4; */
}
}
EXPORT_SYMBOL(outsl);
void insb(unsigned long addr, void *dst, unsigned long count)
{
while (count) {
count -= 1;
*(unsigned char *)dst = inb(addr);
dst += 1;
/* addr += 1; */
}
}
EXPORT_SYMBOL(insb);
void insw(unsigned long addr, void *dst, unsigned long count)
{
while (count) {
count -= 2;
*(unsigned short *)dst = inw(addr);
dst += 2;
/* addr += 2; */
}
}
EXPORT_SYMBOL(insw);
void insl(unsigned long addr, void *dst, unsigned long count)
{
while (count) {
count -= 4;
/*
* XXX I am sure we are in for an unaligned trap here.
*/
*(unsigned long *)dst = inl(addr);
dst += 4;
/* addr += 4; */
}
}
EXPORT_SYMBOL(insl);
This diff is collapsed.
...@@ -214,7 +214,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, ...@@ -214,7 +214,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs,
me->name, me->name,
(int) (ELF_R_TYPE(rel[i].r_info) & 0xff)); (int) (ELF_R_TYPE(rel[i].r_info) & 0xff));
return -ENOEXEC; return -ENOEXEC;
}; }
} }
return 0; return 0;
} }
......
...@@ -281,7 +281,7 @@ static int sun4v_read_pci_cfg(struct pci_bus *bus_dev, unsigned int devfn, ...@@ -281,7 +281,7 @@ static int sun4v_read_pci_cfg(struct pci_bus *bus_dev, unsigned int devfn,
case 4: case 4:
*value = ret & 0xffffffff; *value = ret & 0xffffffff;
break; break;
}; }
return PCIBIOS_SUCCESSFUL; return PCIBIOS_SUCCESSFUL;
...@@ -456,7 +456,7 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm) ...@@ -456,7 +456,7 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
default: default:
break; break;
}; }
} }
if (!saw_io || !saw_mem) { if (!saw_io || !saw_mem) {
......
...@@ -264,7 +264,7 @@ static void schizo_check_iommu_error_pbm(struct pci_pbm_info *pbm, ...@@ -264,7 +264,7 @@ static void schizo_check_iommu_error_pbm(struct pci_pbm_info *pbm,
default: default:
type_string = "ECC Error"; type_string = "ECC Error";
break; break;
}; }
printk("%s: IOMMU Error, type[%s]\n", printk("%s: IOMMU Error, type[%s]\n",
pbm->name, type_string); pbm->name, type_string);
...@@ -319,7 +319,7 @@ static void schizo_check_iommu_error_pbm(struct pci_pbm_info *pbm, ...@@ -319,7 +319,7 @@ static void schizo_check_iommu_error_pbm(struct pci_pbm_info *pbm,
default: default:
type_string = "ECC Error"; type_string = "ECC Error";
break; break;
}; }
printk("%s: IOMMU TAG(%d)[error(%s) ctx(%x) wr(%d) str(%d) " printk("%s: IOMMU TAG(%d)[error(%s) ctx(%x) wr(%d) str(%d) "
"sz(%dK) vpg(%08lx)]\n", "sz(%dK) vpg(%08lx)]\n",
pbm->name, i, type_string, pbm->name, i, type_string,
...@@ -1328,7 +1328,7 @@ static int __devinit schizo_pbm_init(struct pci_pbm_info *pbm, ...@@ -1328,7 +1328,7 @@ static int __devinit schizo_pbm_init(struct pci_pbm_info *pbm,
default: default:
chipset_name = "SCHIZO"; chipset_name = "SCHIZO";
break; break;
}; }
/* For SCHIZO, three OBP regs: /* For SCHIZO, three OBP regs:
* 1) PBM controller regs * 1) PBM controller regs
......
...@@ -694,7 +694,7 @@ static unsigned int sbus_of_build_irq(struct device_node *dp, ...@@ -694,7 +694,7 @@ static unsigned int sbus_of_build_irq(struct device_node *dp,
case 3: case 3:
iclr = reg_base + SYSIO_ICLR_SLOT3; iclr = reg_base + SYSIO_ICLR_SLOT3;
break; break;
}; }
iclr += ((unsigned long)sbus_level - 1UL) * 8UL; iclr += ((unsigned long)sbus_level - 1UL) * 8UL;
} }
......
...@@ -228,7 +228,7 @@ void psycho_check_iommu_error(struct pci_pbm_info *pbm, ...@@ -228,7 +228,7 @@ void psycho_check_iommu_error(struct pci_pbm_info *pbm,
default: default:
type_str = "ECC Error"; type_str = "ECC Error";
break; break;
}; }
printk(KERN_ERR "%s: IOMMU Error, type[%s]\n", printk(KERN_ERR "%s: IOMMU Error, type[%s]\n",
pbm->name, type_str); pbm->name, type_str);
......
...@@ -97,7 +97,7 @@ void sbus_set_sbus64(struct device *dev, int bursts) ...@@ -97,7 +97,7 @@ void sbus_set_sbus64(struct device *dev, int bursts)
default: default:
return; return;
}; }
val = upa_readq(cfg_reg); val = upa_readq(cfg_reg);
if (val & (1UL << 14UL)) { if (val & (1UL << 14UL)) {
...@@ -244,7 +244,7 @@ static unsigned int sbus_build_irq(struct platform_device *op, unsigned int ino) ...@@ -244,7 +244,7 @@ static unsigned int sbus_build_irq(struct platform_device *op, unsigned int ino)
case 3: case 3:
iclr = reg_base + SYSIO_ICLR_SLOT3; iclr = reg_base + SYSIO_ICLR_SLOT3;
break; break;
}; }
iclr += ((unsigned long)sbus_level - 1UL) * 8UL; iclr += ((unsigned long)sbus_level - 1UL) * 8UL;
} }
......
...@@ -267,7 +267,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -267,7 +267,7 @@ void __init setup_arch(char **cmdline_p)
default: default:
printk("UNKNOWN!\n"); printk("UNKNOWN!\n");
break; break;
}; }
#ifdef CONFIG_DUMMY_CONSOLE #ifdef CONFIG_DUMMY_CONSOLE
conswitchp = &dummy_con; conswitchp = &dummy_con;
......
...@@ -209,7 +209,7 @@ void __init per_cpu_patch(void) ...@@ -209,7 +209,7 @@ void __init per_cpu_patch(void)
default: default:
prom_printf("Unknown cpu type, halting.\n"); prom_printf("Unknown cpu type, halting.\n");
prom_halt(); prom_halt();
}; }
*(unsigned int *) (addr + 0) = insns[0]; *(unsigned int *) (addr + 0) = insns[0];
wmb(); wmb();
......
...@@ -114,7 +114,7 @@ void __init smp_cpus_done(unsigned int max_cpus) ...@@ -114,7 +114,7 @@ void __init smp_cpus_done(unsigned int max_cpus)
printk("UNKNOWN!\n"); printk("UNKNOWN!\n");
BUG(); BUG();
break; break;
}; }
} }
void cpu_panic(void) void cpu_panic(void)
...@@ -374,7 +374,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) ...@@ -374,7 +374,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
printk("UNKNOWN!\n"); printk("UNKNOWN!\n");
BUG(); BUG();
break; break;
}; }
} }
/* Set this up early so that things like the scheduler can init /* Set this up early so that things like the scheduler can init
...@@ -447,7 +447,7 @@ int __cpuinit __cpu_up(unsigned int cpu) ...@@ -447,7 +447,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
printk("UNKNOWN!\n"); printk("UNKNOWN!\n");
BUG(); BUG();
break; break;
}; }
if (!ret) { if (!ret) {
cpumask_set_cpu(cpu, &smp_commenced_mask); cpumask_set_cpu(cpu, &smp_commenced_mask);
......
...@@ -103,10 +103,9 @@ static void sun4d_sbus_handler_irq(int sbusl) ...@@ -103,10 +103,9 @@ static void sun4d_sbus_handler_irq(int sbusl)
sbil = (sbusl << 2); sbil = (sbusl << 2);
/* Loop for each pending SBI */ /* Loop for each pending SBI */
for (sbino = 0; bus_mask; sbino++) { for (sbino = 0; bus_mask; sbino++, bus_mask >>= 1) {
unsigned int idx, mask; unsigned int idx, mask;
bus_mask >>= 1;
if (!(bus_mask & 1)) if (!(bus_mask & 1))
continue; continue;
/* XXX This seems to ACK the irq twice. acquire_sbi() /* XXX This seems to ACK the irq twice. acquire_sbi()
...@@ -118,19 +117,16 @@ static void sun4d_sbus_handler_irq(int sbusl) ...@@ -118,19 +117,16 @@ static void sun4d_sbus_handler_irq(int sbusl)
mask &= (0xf << sbil); mask &= (0xf << sbil);
/* Loop for each pending SBI slot */ /* Loop for each pending SBI slot */
idx = 0;
slot = (1 << sbil); slot = (1 << sbil);
while (mask != 0) { for (idx = 0; mask != 0; idx++, slot <<= 1) {
unsigned int pil; unsigned int pil;
struct irq_bucket *p; struct irq_bucket *p;
idx++;
slot <<= 1;
if (!(mask & slot)) if (!(mask & slot))
continue; continue;
mask &= ~slot; mask &= ~slot;
pil = sun4d_encode_irq(sbino, sbil, idx); pil = sun4d_encode_irq(sbino, sbusl, idx);
p = irq_map[pil]; p = irq_map[pil];
while (p) { while (p) {
...@@ -218,10 +214,10 @@ static void sun4d_unmask_irq(struct irq_data *data) ...@@ -218,10 +214,10 @@ static void sun4d_unmask_irq(struct irq_data *data)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
spin_lock_irqsave(&sun4d_imsk_lock, flags); spin_lock_irqsave(&sun4d_imsk_lock, flags);
cc_set_imsk_other(cpuid, cc_get_imsk_other(cpuid) | ~(1 << real_irq)); cc_set_imsk_other(cpuid, cc_get_imsk_other(cpuid) & ~(1 << real_irq));
spin_unlock_irqrestore(&sun4d_imsk_lock, flags); spin_unlock_irqrestore(&sun4d_imsk_lock, flags);
#else #else
cc_set_imsk(cc_get_imsk() | ~(1 << real_irq)); cc_set_imsk(cc_get_imsk() & ~(1 << real_irq));
#endif #endif
} }
...@@ -299,26 +295,68 @@ static void __init sun4d_load_profile_irqs(void) ...@@ -299,26 +295,68 @@ static void __init sun4d_load_profile_irqs(void)
} }
} }
unsigned int _sun4d_build_device_irq(unsigned int real_irq,
unsigned int pil,
unsigned int board)
{
struct sun4d_handler_data *handler_data;
unsigned int irq;
irq = irq_alloc(real_irq, pil);
if (irq == 0) {
prom_printf("IRQ: allocate for %d %d %d failed\n",
real_irq, pil, board);
goto err_out;
}
handler_data = irq_get_handler_data(irq);
if (unlikely(handler_data))
goto err_out;
handler_data = kzalloc(sizeof(struct sun4d_handler_data), GFP_ATOMIC);
if (unlikely(!handler_data)) {
prom_printf("IRQ: kzalloc(sun4d_handler_data) failed.\n");
prom_halt();
}
handler_data->cpuid = board_to_cpu[board];
handler_data->real_irq = real_irq;
irq_set_chip_and_handler_name(irq, &sun4d_irq,
handle_level_irq, "level");
irq_set_handler_data(irq, handler_data);
err_out:
return irq;
}
unsigned int sun4d_build_device_irq(struct platform_device *op, unsigned int sun4d_build_device_irq(struct platform_device *op,
unsigned int real_irq) unsigned int real_irq)
{ {
struct device_node *dp = op->dev.of_node; struct device_node *dp = op->dev.of_node;
struct device_node *io_unit, *sbi = dp->parent; struct device_node *board_parent, *bus = dp->parent;
char *bus_connection;
const struct linux_prom_registers *regs; const struct linux_prom_registers *regs;
struct sun4d_handler_data *handler_data;
unsigned int pil; unsigned int pil;
unsigned int irq; unsigned int irq;
int board, slot; int board, slot;
int sbusl; int sbusl;
irq = 0; irq = real_irq;
while (sbi) { while (bus) {
if (!strcmp(sbi->name, "sbi")) if (!strcmp(bus->name, "sbi")) {
bus_connection = "io-unit";
break;
}
if (!strcmp(bus->name, "bootbus")) {
bus_connection = "cpu-unit";
break; break;
}
sbi = sbi->parent; bus = bus->parent;
} }
if (!sbi) if (!bus)
goto err_out; goto err_out;
regs = of_get_property(dp, "reg", NULL); regs = of_get_property(dp, "reg", NULL);
...@@ -328,17 +366,19 @@ unsigned int sun4d_build_device_irq(struct platform_device *op, ...@@ -328,17 +366,19 @@ unsigned int sun4d_build_device_irq(struct platform_device *op,
slot = regs->which_io; slot = regs->which_io;
/* /*
* If SBI's parent is not io-unit or the io-unit lacks * If Bus nodes parent is not io-unit/cpu-unit or the io-unit/cpu-unit
* a "board#" property, something is very wrong. * lacks a "board#" property, something is very wrong.
*/ */
if (!sbi->parent || strcmp(sbi->parent->name, "io-unit")) { if (!bus->parent || strcmp(bus->parent->name, bus_connection)) {
printk("%s: Error, parent is not io-unit.\n", sbi->full_name); printk(KERN_ERR "%s: Error, parent is not %s.\n",
bus->full_name, bus_connection);
goto err_out; goto err_out;
} }
io_unit = sbi->parent; board_parent = bus->parent;
board = of_getintprop_default(io_unit, "board#", -1); board = of_getintprop_default(board_parent, "board#", -1);
if (board == -1) { if (board == -1) {
printk("%s: Error, lacks board# property.\n", io_unit->full_name); printk(KERN_ERR "%s: Error, lacks board# property.\n",
board_parent->full_name);
goto err_out; goto err_out;
} }
...@@ -348,29 +388,17 @@ unsigned int sun4d_build_device_irq(struct platform_device *op, ...@@ -348,29 +388,17 @@ unsigned int sun4d_build_device_irq(struct platform_device *op,
else else
pil = real_irq; pil = real_irq;
irq = irq_alloc(real_irq, pil); irq = _sun4d_build_device_irq(real_irq, pil, board);
if (irq == 0)
goto err_out;
handler_data = irq_get_handler_data(irq);
if (unlikely(handler_data))
goto err_out;
handler_data = kzalloc(sizeof(struct sun4d_handler_data), GFP_ATOMIC);
if (unlikely(!handler_data)) {
prom_printf("IRQ: kzalloc(sun4d_handler_data) failed.\n");
prom_halt();
}
handler_data->cpuid = board_to_cpu[board];
handler_data->real_irq = real_irq;
irq_set_chip_and_handler_name(irq, &sun4d_irq,
handle_level_irq, "level");
irq_set_handler_data(irq, handler_data);
err_out: err_out:
return real_irq; return irq;
} }
unsigned int sun4d_build_timer_irq(unsigned int board, unsigned int real_irq)
{
return _sun4d_build_device_irq(real_irq, real_irq, board);
}
static void __init sun4d_fixup_trap_table(void) static void __init sun4d_fixup_trap_table(void)
{ {
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
...@@ -402,6 +430,7 @@ static void __init sun4d_init_timers(irq_handler_t counter_fn) ...@@ -402,6 +430,7 @@ static void __init sun4d_init_timers(irq_handler_t counter_fn)
unsigned int irq; unsigned int irq;
const u32 *reg; const u32 *reg;
int err; int err;
int board;
dp = of_find_node_by_name(NULL, "cpu-unit"); dp = of_find_node_by_name(NULL, "cpu-unit");
if (!dp) { if (!dp) {
...@@ -414,12 +443,19 @@ static void __init sun4d_init_timers(irq_handler_t counter_fn) ...@@ -414,12 +443,19 @@ static void __init sun4d_init_timers(irq_handler_t counter_fn)
* bootbus. * bootbus.
*/ */
reg = of_get_property(dp, "reg", NULL); reg = of_get_property(dp, "reg", NULL);
of_node_put(dp);
if (!reg) { if (!reg) {
prom_printf("sun4d_init_timers: No reg property\n"); prom_printf("sun4d_init_timers: No reg property\n");
prom_halt(); prom_halt();
} }
board = of_getintprop_default(dp, "board#", -1);
if (board == -1) {
prom_printf("sun4d_init_timers: No board# property on cpu-unit\n");
prom_halt();
}
of_node_put(dp);
res.start = reg[1]; res.start = reg[1];
res.end = reg[2] - 1; res.end = reg[2] - 1;
res.flags = reg[0] & 0xff; res.flags = reg[0] & 0xff;
...@@ -434,7 +470,7 @@ static void __init sun4d_init_timers(irq_handler_t counter_fn) ...@@ -434,7 +470,7 @@ static void __init sun4d_init_timers(irq_handler_t counter_fn)
master_l10_counter = &sun4d_timers->l10_cur_count; master_l10_counter = &sun4d_timers->l10_cur_count;
irq = sun4d_build_device_irq(NULL, SUN4D_TIMER_IRQ); irq = sun4d_build_timer_irq(board, SUN4D_TIMER_IRQ);
err = request_irq(irq, counter_fn, IRQF_TIMER, "timer", NULL); err = request_irq(irq, counter_fn, IRQF_TIMER, "timer", NULL);
if (err) { if (err) {
prom_printf("sun4d_init_timers: request_irq() failed with %d\n", prom_printf("sun4d_init_timers: request_irq() failed with %d\n",
......
...@@ -109,7 +109,7 @@ asmlinkage long compat_sys_ipc(u32 call, u32 first, u32 second, u32 third, compa ...@@ -109,7 +109,7 @@ asmlinkage long compat_sys_ipc(u32 call, u32 first, u32 second, u32 third, compa
default: default:
return -ENOSYS; return -ENOSYS;
}; }
return -ENOSYS; return -ENOSYS;
} }
......
...@@ -460,7 +460,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second ...@@ -460,7 +460,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second
default: default:
err = -ENOSYS; err = -ENOSYS;
goto out; goto out;
}; }
} }
if (call <= MSGCTL) { if (call <= MSGCTL) {
switch (call) { switch (call) {
...@@ -481,7 +481,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second ...@@ -481,7 +481,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second
default: default:
err = -ENOSYS; err = -ENOSYS;
goto out; goto out;
}; }
} }
if (call <= SHMCTL) { if (call <= SHMCTL) {
switch (call) { switch (call) {
...@@ -507,7 +507,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second ...@@ -507,7 +507,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second
default: default:
err = -ENOSYS; err = -ENOSYS;
goto out; goto out;
}; }
} else { } else {
err = -ENOSYS; err = -ENOSYS;
} }
......
...@@ -708,7 +708,7 @@ static void sparc64_timer_setup(enum clock_event_mode mode, ...@@ -708,7 +708,7 @@ static void sparc64_timer_setup(enum clock_event_mode mode,
case CLOCK_EVT_MODE_UNUSED: case CLOCK_EVT_MODE_UNUSED:
WARN_ON(1); WARN_ON(1);
break; break;
}; }
} }
static struct clock_event_device sparc64_clockevent = { static struct clock_event_device sparc64_clockevent = {
......
...@@ -1804,7 +1804,7 @@ static const char *sun4v_err_type_to_str(u32 type) ...@@ -1804,7 +1804,7 @@ static const char *sun4v_err_type_to_str(u32 type)
return "warning resumable"; return "warning resumable";
default: default:
return "unknown"; return "unknown";
}; }
} }
static void sun4v_log_error(struct pt_regs *regs, struct sun4v_error_entry *ent, int cpu, const char *pfx, atomic_t *ocnt) static void sun4v_log_error(struct pt_regs *regs, struct sun4v_error_entry *ent, int cpu, const char *pfx, atomic_t *ocnt)
......
...@@ -211,7 +211,7 @@ static inline int do_int_store(int reg_num, int size, unsigned long *dst_addr, ...@@ -211,7 +211,7 @@ static inline int do_int_store(int reg_num, int size, unsigned long *dst_addr,
default: default:
BUG(); BUG();
break; break;
}; }
} }
return __do_int_store(dst_addr, size, src_val, asi); return __do_int_store(dst_addr, size, src_val, asi);
} }
...@@ -328,7 +328,7 @@ asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn) ...@@ -328,7 +328,7 @@ asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn)
case ASI_SNFL: case ASI_SNFL:
asi &= ~0x08; asi &= ~0x08;
break; break;
}; }
switch (dir) { switch (dir) {
case load: case load:
reg_addr = fetch_reg_addr(((insn>>25)&0x1f), regs); reg_addr = fetch_reg_addr(((insn>>25)&0x1f), regs);
...@@ -351,7 +351,7 @@ asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn) ...@@ -351,7 +351,7 @@ asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn)
default: default:
BUG(); BUG();
break; break;
}; }
*reg_addr = val_in; *reg_addr = val_in;
} }
break; break;
......
...@@ -176,7 +176,7 @@ static unsigned long index_to_estar_mode(unsigned int index) ...@@ -176,7 +176,7 @@ static unsigned long index_to_estar_mode(unsigned int index)
default: default:
BUG(); BUG();
}; }
} }
static unsigned long index_to_divisor(unsigned int index) static unsigned long index_to_divisor(unsigned int index)
...@@ -199,7 +199,7 @@ static unsigned long index_to_divisor(unsigned int index) ...@@ -199,7 +199,7 @@ static unsigned long index_to_divisor(unsigned int index)
default: default:
BUG(); BUG();
}; }
} }
static unsigned long estar_to_divisor(unsigned long estar) static unsigned long estar_to_divisor(unsigned long estar)
...@@ -224,7 +224,7 @@ static unsigned long estar_to_divisor(unsigned long estar) ...@@ -224,7 +224,7 @@ static unsigned long estar_to_divisor(unsigned long estar)
break; break;
default: default:
BUG(); BUG();
}; }
return ret; return ret;
} }
......
...@@ -71,7 +71,7 @@ static unsigned long get_current_freq(unsigned int cpu, unsigned long safari_cfg ...@@ -71,7 +71,7 @@ static unsigned long get_current_freq(unsigned int cpu, unsigned long safari_cfg
break; break;
default: default:
BUG(); BUG();
}; }
return ret; return ret;
} }
...@@ -125,7 +125,7 @@ static void us3_set_cpu_divider_index(unsigned int cpu, unsigned int index) ...@@ -125,7 +125,7 @@ static void us3_set_cpu_divider_index(unsigned int cpu, unsigned int index)
default: default:
BUG(); BUG();
}; }
reg = read_safari_cfg(); reg = read_safari_cfg();
......
...@@ -363,7 +363,7 @@ static int process_ver(struct vio_driver_state *vio, struct vio_ver_info *pkt) ...@@ -363,7 +363,7 @@ static int process_ver(struct vio_driver_state *vio, struct vio_ver_info *pkt)
default: default:
return handshake_failure(vio); return handshake_failure(vio);
}; }
} }
static int process_attr(struct vio_driver_state *vio, void *pkt) static int process_attr(struct vio_driver_state *vio, void *pkt)
......
...@@ -334,7 +334,7 @@ static void edge(struct pt_regs *regs, unsigned int insn, unsigned int opf) ...@@ -334,7 +334,7 @@ static void edge(struct pt_regs *regs, unsigned int insn, unsigned int opf)
left = edge32_tab_l[(rs1 >> 2) & 0x1].left; left = edge32_tab_l[(rs1 >> 2) & 0x1].left;
right = edge32_tab_l[(rs2 >> 2) & 0x1].right; right = edge32_tab_l[(rs2 >> 2) & 0x1].right;
break; break;
}; }
if ((rs1 & ~0x7UL) == (rs2 & ~0x7UL)) if ((rs1 & ~0x7UL) == (rs2 & ~0x7UL))
rd_val = right & left; rd_val = right & left;
...@@ -360,7 +360,7 @@ static void edge(struct pt_regs *regs, unsigned int insn, unsigned int opf) ...@@ -360,7 +360,7 @@ static void edge(struct pt_regs *regs, unsigned int insn, unsigned int opf)
tstate = regs->tstate & ~(TSTATE_XCC | TSTATE_ICC); tstate = regs->tstate & ~(TSTATE_XCC | TSTATE_ICC);
regs->tstate = tstate | (ccr << 32UL); regs->tstate = tstate | (ccr << 32UL);
} }
}; }
} }
static void array(struct pt_regs *regs, unsigned int insn, unsigned int opf) static void array(struct pt_regs *regs, unsigned int insn, unsigned int opf)
...@@ -392,7 +392,7 @@ static void array(struct pt_regs *regs, unsigned int insn, unsigned int opf) ...@@ -392,7 +392,7 @@ static void array(struct pt_regs *regs, unsigned int insn, unsigned int opf)
case ARRAY32_OPF: case ARRAY32_OPF:
rd_val <<= 2; rd_val <<= 2;
}; }
store_reg(regs, rd_val, RD(insn)); store_reg(regs, rd_val, RD(insn));
} }
...@@ -577,7 +577,7 @@ static void pformat(struct pt_regs *regs, unsigned int insn, unsigned int opf) ...@@ -577,7 +577,7 @@ static void pformat(struct pt_regs *regs, unsigned int insn, unsigned int opf)
*fpd_regaddr(f, RD(insn)) = rd_val; *fpd_regaddr(f, RD(insn)) = rd_val;
break; break;
} }
}; }
} }
static void pmul(struct pt_regs *regs, unsigned int insn, unsigned int opf) static void pmul(struct pt_regs *regs, unsigned int insn, unsigned int opf)
...@@ -693,7 +693,7 @@ static void pmul(struct pt_regs *regs, unsigned int insn, unsigned int opf) ...@@ -693,7 +693,7 @@ static void pmul(struct pt_regs *regs, unsigned int insn, unsigned int opf)
*fpd_regaddr(f, RD(insn)) = rd_val; *fpd_regaddr(f, RD(insn)) = rd_val;
break; break;
} }
}; }
} }
static void pcmp(struct pt_regs *regs, unsigned int insn, unsigned int opf) static void pcmp(struct pt_regs *regs, unsigned int insn, unsigned int opf)
...@@ -786,7 +786,7 @@ static void pcmp(struct pt_regs *regs, unsigned int insn, unsigned int opf) ...@@ -786,7 +786,7 @@ static void pcmp(struct pt_regs *regs, unsigned int insn, unsigned int opf)
rd_val |= 1 << i; rd_val |= 1 << i;
} }
break; break;
}; }
maybe_flush_windows(0, 0, RD(insn), 0); maybe_flush_windows(0, 0, RD(insn), 0);
store_reg(regs, rd_val, RD(insn)); store_reg(regs, rd_val, RD(insn));
...@@ -885,7 +885,7 @@ int vis_emul(struct pt_regs *regs, unsigned int insn) ...@@ -885,7 +885,7 @@ int vis_emul(struct pt_regs *regs, unsigned int insn)
case BSHUFFLE_OPF: case BSHUFFLE_OPF:
bshuffle(regs, insn); bshuffle(regs, insn);
break; break;
}; }
regs->tpc = regs->tnpc; regs->tpc = regs->tnpc;
regs->tnpc += 4; regs->tnpc += 4;
......
...@@ -135,7 +135,7 @@ asmlinkage int lookup_fault(unsigned long pc, unsigned long ret_pc, ...@@ -135,7 +135,7 @@ asmlinkage int lookup_fault(unsigned long pc, unsigned long ret_pc,
default: default:
break; break;
}; }
memset(&regs, 0, sizeof (regs)); memset(&regs, 0, sizeof (regs));
regs.pc = pc; regs.pc = pc;
......
...@@ -340,7 +340,7 @@ void __init paging_init(void) ...@@ -340,7 +340,7 @@ void __init paging_init(void)
prom_printf("paging_init: sparc_cpu_model = %d\n", sparc_cpu_model); prom_printf("paging_init: sparc_cpu_model = %d\n", sparc_cpu_model);
prom_printf("paging_init: Halting...\n"); prom_printf("paging_init: Halting...\n");
prom_halt(); prom_halt();
}; }
/* Initialize the protection map with non-constant, MMU dependent values. */ /* Initialize the protection map with non-constant, MMU dependent values. */
protection_map[0] = PAGE_NONE; protection_map[0] = PAGE_NONE;
......
...@@ -1625,7 +1625,7 @@ static void __init sun4v_ktsb_init(void) ...@@ -1625,7 +1625,7 @@ static void __init sun4v_ktsb_init(void)
ktsb_descr[0].pgsz_idx = HV_PGSZ_IDX_4MB; ktsb_descr[0].pgsz_idx = HV_PGSZ_IDX_4MB;
ktsb_descr[0].pgsz_mask = HV_PGSZ_MASK_4MB; ktsb_descr[0].pgsz_mask = HV_PGSZ_MASK_4MB;
break; break;
}; }
ktsb_descr[0].assoc = 1; ktsb_descr[0].assoc = 1;
ktsb_descr[0].num_ttes = KERNEL_TSB_NENTRIES; ktsb_descr[0].num_ttes = KERNEL_TSB_NENTRIES;
...@@ -2266,7 +2266,7 @@ unsigned long pte_sz_bits(unsigned long sz) ...@@ -2266,7 +2266,7 @@ unsigned long pte_sz_bits(unsigned long sz)
return _PAGE_SZ512K_4V; return _PAGE_SZ512K_4V;
case 4 * 1024 * 1024: case 4 * 1024 * 1024:
return _PAGE_SZ4MB_4V; return _PAGE_SZ4MB_4V;
}; }
} else { } else {
switch (sz) { switch (sz) {
case 8 * 1024: case 8 * 1024:
...@@ -2278,7 +2278,7 @@ unsigned long pte_sz_bits(unsigned long sz) ...@@ -2278,7 +2278,7 @@ unsigned long pte_sz_bits(unsigned long sz)
return _PAGE_SZ512K_4U; return _PAGE_SZ512K_4U;
case 4 * 1024 * 1024: case 4 * 1024 * 1024:
return _PAGE_SZ4MB_4U; return _PAGE_SZ4MB_4U;
}; }
} }
} }
......
...@@ -1665,7 +1665,7 @@ static void __init init_swift(void) ...@@ -1665,7 +1665,7 @@ static void __init init_swift(void)
default: default:
srmmu_modtype = Swift_ok; srmmu_modtype = Swift_ok;
break; break;
}; }
BTFIXUPSET_CALL(flush_cache_all, swift_flush_cache_all, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(flush_cache_all, swift_flush_cache_all, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(flush_cache_mm, swift_flush_cache_mm, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(flush_cache_mm, swift_flush_cache_mm, BTFIXUPCALL_NORM);
...@@ -2069,7 +2069,7 @@ static void __init get_srmmu_type(void) ...@@ -2069,7 +2069,7 @@ static void __init get_srmmu_type(void)
/* Some other Cypress revision, assume a 605. */ /* Some other Cypress revision, assume a 605. */
init_cypress_605(mod_rev); init_cypress_605(mod_rev);
break; break;
}; }
return; return;
} }
......
...@@ -318,7 +318,7 @@ void __init sun4c_probe_vac(void) ...@@ -318,7 +318,7 @@ void __init sun4c_probe_vac(void)
prom_printf("probe_vac: Didn't expect vac-linesize of %d, halting\n", prom_printf("probe_vac: Didn't expect vac-linesize of %d, halting\n",
sun4c_vacinfo.linesize); sun4c_vacinfo.linesize);
prom_halt(); prom_halt();
}; }
sun4c_flush_all(); sun4c_flush_all();
sun4c_enable_vac(); sun4c_enable_vac();
...@@ -364,7 +364,7 @@ static void __init patch_kernel_fault_handler(void) ...@@ -364,7 +364,7 @@ static void __init patch_kernel_fault_handler(void)
prom_printf("Unhandled number of segmaps: %d\n", prom_printf("Unhandled number of segmaps: %d\n",
num_segmaps); num_segmaps);
prom_halt(); prom_halt();
}; }
switch (num_contexts) { switch (num_contexts) {
case 8: case 8:
/* Default, nothing to do. */ /* Default, nothing to do. */
...@@ -377,7 +377,7 @@ static void __init patch_kernel_fault_handler(void) ...@@ -377,7 +377,7 @@ static void __init patch_kernel_fault_handler(void)
prom_printf("Unhandled number of contexts: %d\n", prom_printf("Unhandled number of contexts: %d\n",
num_contexts); num_contexts);
prom_halt(); prom_halt();
}; }
if (sun4c_vacinfo.do_hwflushes != 0) { if (sun4c_vacinfo.do_hwflushes != 0) {
PATCH_INSN(vac_hwflush_patch1_on, vac_hwflush_patch1); PATCH_INSN(vac_hwflush_patch1_on, vac_hwflush_patch1);
...@@ -394,7 +394,7 @@ static void __init patch_kernel_fault_handler(void) ...@@ -394,7 +394,7 @@ static void __init patch_kernel_fault_handler(void)
prom_printf("Impossible VAC linesize %d, halting...\n", prom_printf("Impossible VAC linesize %d, halting...\n",
sun4c_vacinfo.linesize); sun4c_vacinfo.linesize);
prom_halt(); prom_halt();
}; }
} }
} }
......
...@@ -180,7 +180,7 @@ static void setup_tsb_params(struct mm_struct *mm, unsigned long tsb_idx, unsign ...@@ -180,7 +180,7 @@ static void setup_tsb_params(struct mm_struct *mm, unsigned long tsb_idx, unsign
printk(KERN_ERR "TSB[%s:%d]: Impossible TSB size %lu, killing process.\n", printk(KERN_ERR "TSB[%s:%d]: Impossible TSB size %lu, killing process.\n",
current->comm, current->pid, tsb_bytes); current->comm, current->pid, tsb_bytes);
do_exit(SIGSEGV); do_exit(SIGSEGV);
}; }
tte |= pte_sz_bits(page_sz); tte |= pte_sz_bits(page_sz);
if (tlb_type == cheetah_plus || tlb_type == hypervisor) { if (tlb_type == cheetah_plus || tlb_type == hypervisor) {
...@@ -215,7 +215,7 @@ static void setup_tsb_params(struct mm_struct *mm, unsigned long tsb_idx, unsign ...@@ -215,7 +215,7 @@ static void setup_tsb_params(struct mm_struct *mm, unsigned long tsb_idx, unsign
#endif #endif
default: default:
BUG(); BUG();
}; }
hp->assoc = 1; hp->assoc = 1;
hp->num_ttes = tsb_bytes / 16; hp->num_ttes = tsb_bytes / 16;
hp->ctx_idx = 0; hp->ctx_idx = 0;
...@@ -230,7 +230,7 @@ static void setup_tsb_params(struct mm_struct *mm, unsigned long tsb_idx, unsign ...@@ -230,7 +230,7 @@ static void setup_tsb_params(struct mm_struct *mm, unsigned long tsb_idx, unsign
#endif #endif
default: default:
BUG(); BUG();
}; }
hp->tsb_base = tsb_paddr; hp->tsb_base = tsb_paddr;
hp->resv = 0; hp->resv = 0;
} }
......
...@@ -38,7 +38,7 @@ static int prom_nbputchar(const char *buf) ...@@ -38,7 +38,7 @@ static int prom_nbputchar(const char *buf)
break; break;
default: default:
break; break;
}; }
restore_current(); restore_current();
spin_unlock_irqrestore(&prom_lock, flags); spin_unlock_irqrestore(&prom_lock, flags);
return i; /* Ugh, we could spin forever on unsupported proms ;( */ return i; /* Ugh, we could spin forever on unsupported proms ;( */
......
...@@ -53,7 +53,7 @@ void __init prom_init(struct linux_romvec *rp) ...@@ -53,7 +53,7 @@ void __init prom_init(struct linux_romvec *rp)
romvec->pv_romvers); romvec->pv_romvers);
prom_halt(); prom_halt();
break; break;
}; }
prom_rev = romvec->pv_plugin_revision; prom_rev = romvec->pv_plugin_revision;
prom_prev = romvec->pv_printrev; prom_prev = romvec->pv_printrev;
......
...@@ -35,7 +35,7 @@ prom_startcpu(int cpunode, struct linux_prom_registers *ctable_reg, int ctx, cha ...@@ -35,7 +35,7 @@ prom_startcpu(int cpunode, struct linux_prom_registers *ctable_reg, int ctx, cha
case PROM_V3: case PROM_V3:
ret = (*(romvec->v3_cpustart))(cpunode, (int) ctable_reg, ctx, pc); ret = (*(romvec->v3_cpustart))(cpunode, (int) ctable_reg, ctx, pc);
break; break;
}; }
restore_current(); restore_current();
spin_unlock_irqrestore(&prom_lock, flags); spin_unlock_irqrestore(&prom_lock, flags);
......
...@@ -51,6 +51,7 @@ obj-$(CONFIG_X86_VISWS) += setup-irq.o ...@@ -51,6 +51,7 @@ obj-$(CONFIG_X86_VISWS) += setup-irq.o
obj-$(CONFIG_MN10300) += setup-bus.o obj-$(CONFIG_MN10300) += setup-bus.o
obj-$(CONFIG_MICROBLAZE) += setup-bus.o obj-$(CONFIG_MICROBLAZE) += setup-bus.o
obj-$(CONFIG_TILE) += setup-bus.o setup-irq.o obj-$(CONFIG_TILE) += setup-bus.o setup-irq.o
obj-$(CONFIG_SPARC_LEON) += setup-bus.o setup-irq.o
# #
# ACPI Related PCI FW Functions # ACPI Related PCI FW Functions
......
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