Commit dc797470 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc:
  [POWERPC] Clean up duplicate includes in drivers/macintosh/
  [POWERPC] Quiet section mismatch warning on pcibios_setup
  [POWERPC] init and exit markings for hvc_iseries
  [POWERPC] Quiet section mismatch in hvc_rtas.c
  [POWERPC] Constify of_platform_driver match_table
  [POWERPC] hvcs: Make some things static and const
  [POWERPC] Constify of_platform_driver name
  [POWERPC] MPIC protected sources
  [POWERPC] of_detach_node()'s device node argument cannot be const
  [POWERPC] Fix ARCH=ppc builds
  [POWERPC] mv64x60: Use mutex instead of semaphore
  [POWERPC] Allow smp_call_function_single() to current cpu
  [POWERPC] Allow exec faults on readable areas on classic 32-bit PowerPC
  [POWERPC] Fix future firmware feature fixups function failure
  [POWERPC] fix showing xmon help
  [POWERPC] Make xmon_write accept a const buffer
  [POWERPC] Fix misspelled "CONFIG_CHECK_CACHE_COHERENCY" Kconfig option.
  [POWERPC] cell: CONFIG_SPE_BASE is a typo
parents 0f760f13 7bd02a20
...@@ -48,7 +48,7 @@ CONFIG_PPC_STD_MMU_32=y ...@@ -48,7 +48,7 @@ CONFIG_PPC_STD_MMU_32=y
# CONFIG_PPC_MM_SLICES is not set # CONFIG_PPC_MM_SLICES is not set
# CONFIG_SMP is not set # CONFIG_SMP is not set
CONFIG_NOT_COHERENT_CACHE=y CONFIG_NOT_COHERENT_CACHE=y
CONFIG_CONFIG_CHECK_CACHE_COHERENCY=y CONFIG_CHECK_CACHE_COHERENCY=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
# #
......
...@@ -166,7 +166,7 @@ int pcibios_add_platform_entries(struct pci_dev *pdev) ...@@ -166,7 +166,7 @@ int pcibios_add_platform_entries(struct pci_dev *pdev)
} }
char __init *pcibios_setup(char *str) char __devinit *pcibios_setup(char *str)
{ {
return str; return str;
} }
......
...@@ -1218,7 +1218,7 @@ void of_attach_node(struct device_node *np) ...@@ -1218,7 +1218,7 @@ void of_attach_node(struct device_node *np)
* a reference to the node. The memory associated with the node * a reference to the node. The memory associated with the node
* is not freed until its refcount goes to zero. * is not freed until its refcount goes to zero.
*/ */
void of_detach_node(const struct device_node *np) void of_detach_node(struct device_node *np)
{ {
struct device_node *parent; struct device_node *parent;
......
...@@ -284,7 +284,7 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int ...@@ -284,7 +284,7 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int
int wait) int wait)
{ {
cpumask_t map = CPU_MASK_NONE; cpumask_t map = CPU_MASK_NONE;
int ret = -EBUSY; int ret = 0;
if (!cpu_online(cpu)) if (!cpu_online(cpu))
return -EINVAL; return -EINVAL;
...@@ -292,6 +292,11 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int ...@@ -292,6 +292,11 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int
cpu_set(cpu, map); cpu_set(cpu, map);
if (cpu != get_cpu()) if (cpu != get_cpu())
ret = smp_call_function_map(func,info,nonatomic,wait,map); ret = smp_call_function_map(func,info,nonatomic,wait,map);
else {
local_irq_disable();
func(info);
local_irq_enable();
}
put_cpu(); put_cpu();
return ret; return ret;
} }
......
...@@ -283,7 +283,13 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address, ...@@ -283,7 +283,13 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
/* protection fault */ /* protection fault */
if (error_code & DSISR_PROTFAULT) if (error_code & DSISR_PROTFAULT)
goto bad_area; goto bad_area;
if (!(vma->vm_flags & VM_EXEC)) /*
* Allow execution from readable areas if the MMU does not
* provide separate controls over reading and executing.
*/
if (!(vma->vm_flags & VM_EXEC) &&
(cpu_has_feature(CPU_FTR_NOEXECUTE) ||
!(vma->vm_flags & (VM_READ | VM_WRITE))))
goto bad_area; goto bad_area;
#else #else
pte_t *ptep; pte_t *ptep;
......
...@@ -609,7 +609,7 @@ static void demote_segment_4k(struct mm_struct *mm, unsigned long addr) ...@@ -609,7 +609,7 @@ static void demote_segment_4k(struct mm_struct *mm, unsigned long addr)
mm->context.sllp = SLB_VSID_USER | mmu_psize_defs[MMU_PAGE_4K].sllp; mm->context.sllp = SLB_VSID_USER | mmu_psize_defs[MMU_PAGE_4K].sllp;
#endif /* CONFIG_PPC_MM_SLICES */ #endif /* CONFIG_PPC_MM_SLICES */
#ifdef CONFIG_SPE_BASE #ifdef CONFIG_SPU_BASE
spu_flush_all_slbs(mm); spu_flush_all_slbs(mm);
#endif #endif
} }
...@@ -744,7 +744,7 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap) ...@@ -744,7 +744,7 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap)
"to 4kB pages because of " "to 4kB pages because of "
"non-cacheable mapping\n"); "non-cacheable mapping\n");
psize = mmu_vmalloc_psize = MMU_PAGE_4K; psize = mmu_vmalloc_psize = MMU_PAGE_4K;
#ifdef CONFIG_SPE_BASE #ifdef CONFIG_SPU_BASE
spu_flush_all_slbs(mm); spu_flush_all_slbs(mm);
#endif #endif
} }
......
...@@ -215,7 +215,7 @@ config NOT_COHERENT_CACHE ...@@ -215,7 +215,7 @@ config NOT_COHERENT_CACHE
depends on 4xx || 8xx || E200 depends on 4xx || 8xx || E200
default y default y
config CONFIG_CHECK_CACHE_COHERENCY config CHECK_CACHE_COHERENCY
bool bool
endmenu endmenu
...@@ -59,7 +59,7 @@ config MPC10X_BRIDGE ...@@ -59,7 +59,7 @@ config MPC10X_BRIDGE
config MV64X60 config MV64X60
bool bool
select PPC_INDIRECT_PCI select PPC_INDIRECT_PCI
select CONFIG_CHECK_CACHE_COHERENCY select CHECK_CACHE_COHERENCY
config MPC10X_OPENPIC config MPC10X_OPENPIC
bool bool
......
...@@ -66,24 +66,13 @@ firmware_features_table[FIRMWARE_MAX_FEATURES] = { ...@@ -66,24 +66,13 @@ firmware_features_table[FIRMWARE_MAX_FEATURES] = {
* device-tree/ibm,hypertas-functions. Ultimately this functionality may * device-tree/ibm,hypertas-functions. Ultimately this functionality may
* be moved into prom.c prom_init(). * be moved into prom.c prom_init().
*/ */
void __init fw_feature_init(void) void __init fw_feature_init(const char *hypertas, unsigned long len)
{ {
struct device_node *dn; const char *s;
const char *hypertas, *s; int i;
int len, i;
DBG(" -> fw_feature_init()\n"); DBG(" -> fw_feature_init()\n");
dn = of_find_node_by_path("/rtas");
if (dn == NULL) {
printk(KERN_ERR "WARNING! Cannot find RTAS in device-tree!\n");
goto out;
}
hypertas = of_get_property(dn, "ibm,hypertas-functions", &len);
if (hypertas == NULL)
goto out;
for (s = hypertas; s < hypertas + len; s += strlen(s) + 1) { for (s = hypertas; s < hypertas + len; s += strlen(s) + 1) {
for (i = 0; i < FIRMWARE_MAX_FEATURES; i++) { for (i = 0; i < FIRMWARE_MAX_FEATURES; i++) {
/* check value against table of strings */ /* check value against table of strings */
...@@ -98,7 +87,5 @@ void __init fw_feature_init(void) ...@@ -98,7 +87,5 @@ void __init fw_feature_init(void)
} }
} }
out:
of_node_put(dn);
DBG(" <- fw_feature_init()\n"); DBG(" <- fw_feature_init()\n");
} }
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#ifndef _PSERIES_PSERIES_H #ifndef _PSERIES_PSERIES_H
#define _PSERIES_PSERIES_H #define _PSERIES_PSERIES_H
extern void __init fw_feature_init(void); extern void __init fw_feature_init(const char *hypertas, unsigned long len);
struct pt_regs; struct pt_regs;
......
...@@ -320,8 +320,6 @@ static void __init pSeries_init_early(void) ...@@ -320,8 +320,6 @@ static void __init pSeries_init_early(void)
{ {
DBG(" -> pSeries_init_early()\n"); DBG(" -> pSeries_init_early()\n");
fw_feature_init();
if (firmware_has_feature(FW_FEATURE_LPAR)) if (firmware_has_feature(FW_FEATURE_LPAR))
find_udbg_vterm(); find_udbg_vterm();
...@@ -343,14 +341,21 @@ static int __init pSeries_probe_hypertas(unsigned long node, ...@@ -343,14 +341,21 @@ static int __init pSeries_probe_hypertas(unsigned long node,
const char *uname, int depth, const char *uname, int depth,
void *data) void *data)
{ {
const char *hypertas;
unsigned long len;
if (depth != 1 || if (depth != 1 ||
(strcmp(uname, "rtas") != 0 && strcmp(uname, "rtas@0") != 0)) (strcmp(uname, "rtas") != 0 && strcmp(uname, "rtas@0") != 0))
return 0; return 0;
hypertas = of_get_flat_dt_prop(node, "ibm,hypertas-functions", &len);
if (!hypertas)
return 1;
if (of_get_flat_dt_prop(node, "ibm,hypertas-functions", NULL) != NULL) powerpc_firmware_features |= FW_FEATURE_LPAR;
powerpc_firmware_features |= FW_FEATURE_LPAR; fw_feature_init(hypertas, len);
return 1; return 1;
} }
static int __init pSeries_probe(void) static int __init pSeries_probe(void)
......
...@@ -877,6 +877,8 @@ static int mpic_host_map(struct irq_host *h, unsigned int virq, ...@@ -877,6 +877,8 @@ static int mpic_host_map(struct irq_host *h, unsigned int virq,
if (hw == mpic->spurious_vec) if (hw == mpic->spurious_vec)
return -EINVAL; return -EINVAL;
if (mpic->protected && test_bit(hw, mpic->protected))
return -EINVAL;
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
else if (hw >= mpic->ipi_vecs[0]) { else if (hw >= mpic->ipi_vecs[0]) {
...@@ -1034,6 +1036,25 @@ struct mpic * __init mpic_alloc(struct device_node *node, ...@@ -1034,6 +1036,25 @@ struct mpic * __init mpic_alloc(struct device_node *node,
if (node && of_get_property(node, "big-endian", NULL) != NULL) if (node && of_get_property(node, "big-endian", NULL) != NULL)
mpic->flags |= MPIC_BIG_ENDIAN; mpic->flags |= MPIC_BIG_ENDIAN;
/* Look for protected sources */
if (node) {
unsigned int psize, bits, mapsize;
const u32 *psrc =
of_get_property(node, "protected-sources", &psize);
if (psrc) {
psize /= 4;
bits = intvec_top + 1;
mapsize = BITS_TO_LONGS(bits) * sizeof(unsigned long);
mpic->protected = alloc_bootmem(mapsize);
BUG_ON(mpic->protected == NULL);
memset(mpic->protected, 0, mapsize);
for (i = 0; i < psize; i++) {
if (psrc[i] > intvec_top)
continue;
__set_bit(psrc[i], mpic->protected);
}
}
}
#ifdef CONFIG_MPIC_WEIRD #ifdef CONFIG_MPIC_WEIRD
mpic->hw_set = mpic_infos[MPIC_GET_REGSET(flags)]; mpic->hw_set = mpic_infos[MPIC_GET_REGSET(flags)];
...@@ -1213,6 +1234,9 @@ void __init mpic_init(struct mpic *mpic) ...@@ -1213,6 +1234,9 @@ void __init mpic_init(struct mpic *mpic)
u32 vecpri = MPIC_VECPRI_MASK | i | u32 vecpri = MPIC_VECPRI_MASK | i |
(8 << MPIC_VECPRI_PRIORITY_SHIFT); (8 << MPIC_VECPRI_PRIORITY_SHIFT);
/* check if protected */
if (mpic->protected && test_bit(i, mpic->protected))
continue;
/* init hw */ /* init hw */
mpic_irq_write(i, MPIC_INFO(IRQ_VECTOR_PRI), vecpri); mpic_irq_write(i, MPIC_INFO(IRQ_VECTOR_PRI), vecpri);
mpic_irq_write(i, MPIC_INFO(IRQ_DESTINATION), mpic_irq_write(i, MPIC_INFO(IRQ_DESTINATION),
...@@ -1407,6 +1431,14 @@ unsigned int mpic_get_one_irq(struct mpic *mpic) ...@@ -1407,6 +1431,14 @@ unsigned int mpic_get_one_irq(struct mpic *mpic)
mpic_eoi(mpic); mpic_eoi(mpic);
return NO_IRQ; return NO_IRQ;
} }
if (unlikely(mpic->protected && test_bit(src, mpic->protected))) {
if (printk_ratelimit())
printk(KERN_WARNING "%s: Got protected source %d !\n",
mpic->name, (int)src);
mpic_eoi(mpic);
return NO_IRQ;
}
return irq_linear_revmap(mpic->irqhost, src); return irq_linear_revmap(mpic->irqhost, src);
} }
......
...@@ -132,3 +132,8 @@ void xmon_printf(const char *format, ...) ...@@ -132,3 +132,8 @@ void xmon_printf(const char *format, ...)
va_end(args); va_end(args);
xmon_write(xmon_outbuf, n); xmon_write(xmon_outbuf, n);
} }
void xmon_puts(const char *str)
{
xmon_write(str, strlen(str));
}
...@@ -5,10 +5,11 @@ ...@@ -5,10 +5,11 @@
extern int xmon_putchar(int c); extern int xmon_putchar(int c);
extern int xmon_getchar(void); extern int xmon_getchar(void);
extern void xmon_puts(const char *);
extern char *xmon_gets(char *, int); extern char *xmon_gets(char *, int);
extern void xmon_printf(const char *, ...); extern void xmon_printf(const char *, ...);
extern void xmon_map_scc(void); extern void xmon_map_scc(void);
extern int xmon_expect(const char *str, unsigned long timeout); extern int xmon_expect(const char *str, unsigned long timeout);
extern int xmon_write(void *ptr, int nb); extern int xmon_write(const void *ptr, int nb);
extern int xmon_readchar(void); extern int xmon_readchar(void);
extern int xmon_read_poll(void); extern int xmon_read_poll(void);
...@@ -14,7 +14,7 @@ void xmon_map_scc(void) ...@@ -14,7 +14,7 @@ void xmon_map_scc(void)
{ {
} }
int xmon_write(void *ptr, int nb) int xmon_write(const void *ptr, int nb)
{ {
return udbg_write(ptr, nb); return udbg_write(ptr, nb);
} }
......
...@@ -833,7 +833,7 @@ cmds(struct pt_regs *excp) ...@@ -833,7 +833,7 @@ cmds(struct pt_regs *excp)
mdelay(2000); mdelay(2000);
return cmd; return cmd;
case '?': case '?':
printf(help_string); xmon_puts(help_string);
break; break;
case 'b': case 'b':
bpt_cmds(); bpt_cmds();
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/mutex.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/mv643xx.h> #include <linux/mv643xx.h>
...@@ -2359,7 +2360,7 @@ mv64460_chip_specific_init(struct mv64x60_handle *bh, ...@@ -2359,7 +2360,7 @@ mv64460_chip_specific_init(struct mv64x60_handle *bh,
/* Export the hotswap register via sysfs for enum event monitoring */ /* Export the hotswap register via sysfs for enum event monitoring */
#define VAL_LEN_MAX 11 /* 32-bit hex or dec stringified number + '\n' */ #define VAL_LEN_MAX 11 /* 32-bit hex or dec stringified number + '\n' */
DECLARE_MUTEX(mv64xxx_hs_lock); static DEFINE_MUTEX(mv64xxx_hs_lock);
static ssize_t static ssize_t
mv64xxx_hs_reg_read(struct kobject *kobj, char *buf, loff_t off, size_t count) mv64xxx_hs_reg_read(struct kobject *kobj, char *buf, loff_t off, size_t count)
...@@ -2372,14 +2373,14 @@ mv64xxx_hs_reg_read(struct kobject *kobj, char *buf, loff_t off, size_t count) ...@@ -2372,14 +2373,14 @@ mv64xxx_hs_reg_read(struct kobject *kobj, char *buf, loff_t off, size_t count)
if (count < VAL_LEN_MAX) if (count < VAL_LEN_MAX)
return -EINVAL; return -EINVAL;
if (down_interruptible(&mv64xxx_hs_lock)) if (mutex_lock_interruptible(&mv64xxx_hs_lock))
return -ERESTARTSYS; return -ERESTARTSYS;
save_exclude = mv64x60_pci_exclude_bridge; save_exclude = mv64x60_pci_exclude_bridge;
mv64x60_pci_exclude_bridge = 0; mv64x60_pci_exclude_bridge = 0;
early_read_config_dword(&sysfs_hose_a, 0, PCI_DEVFN(0, 0), early_read_config_dword(&sysfs_hose_a, 0, PCI_DEVFN(0, 0),
MV64360_PCICFG_CPCI_HOTSWAP, &v); MV64360_PCICFG_CPCI_HOTSWAP, &v);
mv64x60_pci_exclude_bridge = save_exclude; mv64x60_pci_exclude_bridge = save_exclude;
up(&mv64xxx_hs_lock); mutex_unlock(&mv64xxx_hs_lock);
return sprintf(buf, "0x%08x\n", v); return sprintf(buf, "0x%08x\n", v);
} }
...@@ -2396,14 +2397,14 @@ mv64xxx_hs_reg_write(struct kobject *kobj, char *buf, loff_t off, size_t count) ...@@ -2396,14 +2397,14 @@ mv64xxx_hs_reg_write(struct kobject *kobj, char *buf, loff_t off, size_t count)
return -EINVAL; return -EINVAL;
if (sscanf(buf, "%i", &v) == 1) { if (sscanf(buf, "%i", &v) == 1) {
if (down_interruptible(&mv64xxx_hs_lock)) if (mutex_lock_interruptible(&mv64xxx_hs_lock))
return -ERESTARTSYS; return -ERESTARTSYS;
save_exclude = mv64x60_pci_exclude_bridge; save_exclude = mv64x60_pci_exclude_bridge;
mv64x60_pci_exclude_bridge = 0; mv64x60_pci_exclude_bridge = 0;
early_write_config_dword(&sysfs_hose_a, 0, PCI_DEVFN(0, 0), early_write_config_dword(&sysfs_hose_a, 0, PCI_DEVFN(0, 0),
MV64360_PCICFG_CPCI_HOTSWAP, v); MV64360_PCICFG_CPCI_HOTSWAP, v);
mv64x60_pci_exclude_bridge = save_exclude; mv64x60_pci_exclude_bridge = save_exclude;
up(&mv64xxx_hs_lock); mutex_unlock(&mv64xxx_hs_lock);
} }
else else
count = -EINVAL; count = -EINVAL;
...@@ -2433,10 +2434,10 @@ mv64xxx_hs_reg_valid_show(struct device *dev, struct device_attribute *attr, ...@@ -2433,10 +2434,10 @@ mv64xxx_hs_reg_valid_show(struct device *dev, struct device_attribute *attr,
pdev = container_of(dev, struct platform_device, dev); pdev = container_of(dev, struct platform_device, dev);
pdp = (struct mv64xxx_pdata *)pdev->dev.platform_data; pdp = (struct mv64xxx_pdata *)pdev->dev.platform_data;
if (down_interruptible(&mv64xxx_hs_lock)) if (mutex_lock_interruptible(&mv64xxx_hs_lock))
return -ERESTARTSYS; return -ERESTARTSYS;
v = pdp->hs_reg_valid; v = pdp->hs_reg_valid;
up(&mv64xxx_hs_lock); mutex_unlock(&mv64xxx_hs_lock);
return sprintf(buf, "%i\n", v); return sprintf(buf, "%i\n", v);
} }
......
...@@ -472,7 +472,7 @@ static void hvc_handle_event(struct HvLpEvent *event) ...@@ -472,7 +472,7 @@ static void hvc_handle_event(struct HvLpEvent *event)
} }
} }
static int send_open(HvLpIndex remoteLp, void *sem) static int __init send_open(HvLpIndex remoteLp, void *sem)
{ {
return HvCallEvent_signalLpEventFast(remoteLp, return HvCallEvent_signalLpEventFast(remoteLp,
HvLpEvent_Type_VirtualIo, HvLpEvent_Type_VirtualIo,
...@@ -484,7 +484,7 @@ static int send_open(HvLpIndex remoteLp, void *sem) ...@@ -484,7 +484,7 @@ static int send_open(HvLpIndex remoteLp, void *sem)
0, 0, 0, 0); 0, 0, 0, 0);
} }
static int hvc_vio_init(void) static int __init hvc_vio_init(void)
{ {
atomic_t wait_flag; atomic_t wait_flag;
int rc; int rc;
...@@ -552,14 +552,14 @@ static int hvc_vio_init(void) ...@@ -552,14 +552,14 @@ static int hvc_vio_init(void)
} }
module_init(hvc_vio_init); /* after drivers/char/hvc_console.c */ module_init(hvc_vio_init); /* after drivers/char/hvc_console.c */
static void hvc_vio_exit(void) static void __exit hvc_vio_exit(void)
{ {
vio_unregister_driver(&hvc_vio_driver); vio_unregister_driver(&hvc_vio_driver);
} }
module_exit(hvc_vio_exit); module_exit(hvc_vio_exit);
/* the device tree order defines our numbering */ /* the device tree order defines our numbering */
static int hvc_find_vtys(void) static int __init hvc_find_vtys(void)
{ {
struct device_node *vty; struct device_node *vty;
int num_found = 0; int num_found = 0;
......
...@@ -115,7 +115,7 @@ static void __exit hvc_rtas_exit(void) ...@@ -115,7 +115,7 @@ static void __exit hvc_rtas_exit(void)
module_exit(hvc_rtas_exit); module_exit(hvc_rtas_exit);
/* This will happen prior to module init. There is no tty at this time? */ /* This will happen prior to module init. There is no tty at this time? */
static int hvc_rtas_console_init(void) static int __init hvc_rtas_console_init(void)
{ {
rtascons_put_char_token = rtas_token("put-term-char"); rtascons_put_char_token = rtas_token("put-term-char");
if (rtascons_put_char_token == RTAS_UNKNOWN_SERVICE) if (rtascons_put_char_token == RTAS_UNKNOWN_SERVICE)
......
...@@ -210,9 +210,9 @@ static struct ktermios hvcs_tty_termios = { ...@@ -210,9 +210,9 @@ static struct ktermios hvcs_tty_termios = {
static int hvcs_parm_num_devs = -1; static int hvcs_parm_num_devs = -1;
module_param(hvcs_parm_num_devs, int, 0); module_param(hvcs_parm_num_devs, int, 0);
char hvcs_driver_name[] = "hvcs"; static const char hvcs_driver_name[] = "hvcs";
char hvcs_device_node[] = "hvcs"; static const char hvcs_device_node[] = "hvcs";
char hvcs_driver_string[] static const char hvcs_driver_string[]
= "IBM hvcs (Hypervisor Virtual Console Server) Driver"; = "IBM hvcs (Hypervisor Virtual Console Server) Driver";
/* Status of partner info rescan triggered via sysfs. */ /* Status of partner info rescan triggered via sysfs. */
...@@ -1092,7 +1092,7 @@ static int hvcs_enable_device(struct hvcs_struct *hvcsd, uint32_t unit_address, ...@@ -1092,7 +1092,7 @@ static int hvcs_enable_device(struct hvcs_struct *hvcsd, uint32_t unit_address,
* NOTICE: Do NOT hold either the hvcs_struct.lock or hvcs_structs_lock when * NOTICE: Do NOT hold either the hvcs_struct.lock or hvcs_structs_lock when
* calling this function or you will get deadlock. * calling this function or you will get deadlock.
*/ */
struct hvcs_struct *hvcs_get_by_index(int index) static struct hvcs_struct *hvcs_get_by_index(int index)
{ {
struct hvcs_struct *hvcsd = NULL; struct hvcs_struct *hvcsd = NULL;
unsigned long flags; unsigned long flags;
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/pmac_feature.h> #include <asm/pmac_feature.h>
#include <asm/dbdma.h> #include <asm/dbdma.h>
#include <asm/dbdma.h>
#include <asm/macio.h> #include <asm/macio.h>
#include <asm/keylargo.h> #include <asm/keylargo.h>
......
...@@ -1316,7 +1316,7 @@ static struct of_device_id m8xx_pcmcia_match[] = { ...@@ -1316,7 +1316,7 @@ static struct of_device_id m8xx_pcmcia_match[] = {
MODULE_DEVICE_TABLE(of, m8xx_pcmcia_match); MODULE_DEVICE_TABLE(of, m8xx_pcmcia_match);
static struct of_platform_driver m8xx_pcmcia_driver = { static struct of_platform_driver m8xx_pcmcia_driver = {
.name = (char *)driver_name, .name = driver_name,
.match_table = m8xx_pcmcia_match, .match_table = m8xx_pcmcia_match,
.probe = m8xx_probe, .probe = m8xx_probe,
.remove = m8xx_remove, .remove = m8xx_remove,
......
...@@ -296,6 +296,9 @@ struct mpic ...@@ -296,6 +296,9 @@ struct mpic
unsigned int dcr_base; unsigned int dcr_base;
#endif #endif
/* Protected sources */
unsigned long *protected;
#ifdef CONFIG_MPIC_WEIRD #ifdef CONFIG_MPIC_WEIRD
/* Pointer to HW info array */ /* Pointer to HW info array */
u32 *hw_set; u32 *hw_set;
......
...@@ -139,7 +139,7 @@ extern unsigned long __init of_get_flat_dt_root(void); ...@@ -139,7 +139,7 @@ extern unsigned long __init of_get_flat_dt_root(void);
/* For updating the device tree at runtime */ /* For updating the device tree at runtime */
extern void of_attach_node(struct device_node *); extern void of_attach_node(struct device_node *);
extern void of_detach_node(const struct device_node *); extern void of_detach_node(struct device_node *);
/* Other Prototypes */ /* Other Prototypes */
extern void finish_device_tree(void); extern void finish_device_tree(void);
......
...@@ -54,6 +54,7 @@ extern void show_regs(struct pt_regs * regs); ...@@ -54,6 +54,7 @@ extern void show_regs(struct pt_regs * regs);
extern void flush_instruction_cache(void); extern void flush_instruction_cache(void);
extern void hard_reset_now(void); extern void hard_reset_now(void);
extern void poweroff_now(void); extern void poweroff_now(void);
extern int set_dabr(unsigned long dabr);
#ifdef CONFIG_6xx #ifdef CONFIG_6xx
extern long _get_L2CR(void); extern long _get_L2CR(void);
extern long _get_L3CR(void); extern long _get_L3CR(void);
......
...@@ -31,8 +31,8 @@ extern struct bus_type of_platform_bus_type; ...@@ -31,8 +31,8 @@ extern struct bus_type of_platform_bus_type;
*/ */
struct of_platform_driver struct of_platform_driver
{ {
char *name; const char *name;
struct of_device_id *match_table; const struct of_device_id *match_table;
struct module *owner; struct module *owner;
int (*probe)(struct of_device* dev, int (*probe)(struct of_device* dev,
......
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