Commit 3c3f42d6 authored by Paul Mackerras's avatar Paul Mackerras

powerpc: Start merging 64-bit support into powermac files

Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent e574d238
This diff is collapsed.
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/sysdev.h> #include <linux/sysdev.h>
#include <linux/adb.h> #include <linux/adb.h>
#include <linux/pmu.h> #include <linux/pmu.h>
#include <linux/module.h>
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -32,12 +33,11 @@ ...@@ -32,12 +33,11 @@
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/pci-bridge.h> #include <asm/pci-bridge.h>
#include <asm/time.h> #include <asm/time.h>
#include <asm/open_pic.h>
#include <asm/xmon.h> #include <asm/xmon.h>
#include <asm/pmac_feature.h> #include <asm/pmac_feature.h>
#include <asm/mpic.h> #include <asm/mpic.h>
#include "pmac_pic.h" #include "pmac.h"
/* /*
* XXX this should be in xmon.h, but putting it there means xmon.h * XXX this should be in xmon.h, but putting it there means xmon.h
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
*/ */
extern irqreturn_t xmon_irq(int, void *, struct pt_regs *); extern irqreturn_t xmon_irq(int, void *, struct pt_regs *);
#ifdef CONFIG_PPC32
struct pmac_irq_hw { struct pmac_irq_hw {
unsigned int event; unsigned int event;
unsigned int enable; unsigned int enable;
...@@ -71,6 +72,9 @@ static u32 level_mask[4]; ...@@ -71,6 +72,9 @@ static u32 level_mask[4];
static DEFINE_SPINLOCK(pmac_pic_lock); static DEFINE_SPINLOCK(pmac_pic_lock);
/* XXX here for now, should move to arch/powerpc/kernel/irq.c */
int ppc_do_canonicalize_irqs;
EXPORT_SYMBOL(ppc_do_canonicalize_irqs);
#define GATWICK_IRQ_POOL_SIZE 10 #define GATWICK_IRQ_POOL_SIZE 10
static struct interrupt_info gatwick_int_pool[GATWICK_IRQ_POOL_SIZE]; static struct interrupt_info gatwick_int_pool[GATWICK_IRQ_POOL_SIZE];
...@@ -377,11 +381,6 @@ static int __init enable_second_ohare(void) ...@@ -377,11 +381,6 @@ static int __init enable_second_ohare(void)
return irqctrler->intrs[0].line; return irqctrler->intrs[0].line;
} }
static int pmac_u3_cascade(struct pt_regs *regs, void *data)
{
return mpic_get_one_irq((struct mpic *)data, regs);
}
#ifdef CONFIG_XMON #ifdef CONFIG_XMON
static struct irqaction xmon_action = { static struct irqaction xmon_action = {
.handler = xmon_irq, .handler = xmon_irq,
...@@ -397,15 +396,23 @@ static struct irqaction gatwick_cascade_action = { ...@@ -397,15 +396,23 @@ static struct irqaction gatwick_cascade_action = {
.mask = CPU_MASK_NONE, .mask = CPU_MASK_NONE,
.name = "cascade", .name = "cascade",
}; };
#endif /* CONFIG_PPC32 */
static int pmac_u3_cascade(struct pt_regs *regs, void *data)
{
return mpic_get_one_irq((struct mpic *)data, regs);
}
void __init pmac_pic_init(void) void __init pmac_pic_init(void)
{ {
int i;
struct device_node *irqctrler = NULL; struct device_node *irqctrler = NULL;
struct device_node *irqctrler2 = NULL; struct device_node *irqctrler2 = NULL;
struct device_node *np; struct device_node *np;
#ifdef CONFIG_PPC32
int i;
unsigned long addr; unsigned long addr;
int irq_cascade = -1; int irq_cascade = -1;
#endif
struct mpic *mpic1, *mpic2; struct mpic *mpic1, *mpic2;
/* We first try to detect Apple's new Core99 chipset, since mac-io /* We first try to detect Apple's new Core99 chipset, since mac-io
...@@ -455,7 +462,7 @@ void __init pmac_pic_init(void) ...@@ -455,7 +462,7 @@ void __init pmac_pic_init(void)
mpic_setup_cascade(irqctrler2->intrs[0].line, mpic_setup_cascade(irqctrler2->intrs[0].line,
pmac_u3_cascade, mpic2); pmac_u3_cascade, mpic2);
} }
#ifdef CONFIG_XMON #if defined(CONFIG_XMON) && defined(CONFIG_PPC32)
{ {
struct device_node* pswitch; struct device_node* pswitch;
int nmi_irq; int nmi_irq;
...@@ -463,7 +470,7 @@ void __init pmac_pic_init(void) ...@@ -463,7 +470,7 @@ void __init pmac_pic_init(void)
pswitch = find_devices("programmer-switch"); pswitch = find_devices("programmer-switch");
if (pswitch && pswitch->n_intrs) { if (pswitch && pswitch->n_intrs) {
nmi_irq = pswitch->intrs[0].line; nmi_irq = pswitch->intrs[0].line;
openpic_init_nmi_irq(nmi_irq); mpic_irq_set_priority(nmi_irq, 9);
setup_irq(nmi_irq, &xmon_action); setup_irq(nmi_irq, &xmon_action);
} }
} }
...@@ -472,6 +479,7 @@ void __init pmac_pic_init(void) ...@@ -472,6 +479,7 @@ void __init pmac_pic_init(void)
} }
irqctrler = NULL; irqctrler = NULL;
#ifdef CONFIG_PPC32
/* Get the level/edge settings, assume if it's not /* Get the level/edge settings, assume if it's not
* a Grand Central nor an OHare, then it's an Heathrow * a Grand Central nor an OHare, then it's an Heathrow
* (or Paddington). * (or Paddington).
...@@ -570,6 +578,7 @@ void __init pmac_pic_init(void) ...@@ -570,6 +578,7 @@ void __init pmac_pic_init(void)
#ifdef CONFIG_XMON #ifdef CONFIG_XMON
setup_irq(20, &xmon_action); setup_irq(20, &xmon_action);
#endif /* CONFIG_XMON */ #endif /* CONFIG_XMON */
#endif /* CONFIG_PPC32 */
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
...@@ -659,9 +668,10 @@ static struct sysdev_driver driver_pmacpic = { ...@@ -659,9 +668,10 @@ static struct sysdev_driver driver_pmacpic = {
static int __init init_pmacpic_sysfs(void) static int __init init_pmacpic_sysfs(void)
{ {
#ifdef CONFIG_PPC32
if (max_irqs == 0) if (max_irqs == 0)
return -ENODEV; return -ENODEV;
#endif
printk(KERN_DEBUG "Registering pmac pic with sysfs...\n"); printk(KERN_DEBUG "Registering pmac pic with sysfs...\n");
sysdev_class_register(&pmacpic_sysclass); sysdev_class_register(&pmacpic_sysclass);
sysdev_register(&device_pmacpic); sysdev_register(&device_pmacpic);
......
...@@ -3,19 +3,31 @@ ...@@ -3,19 +3,31 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/ide.h> #include <linux/ide.h>
#include <linux/irq.h>
/* /*
* Declaration for the various functions exported by the * Declaration for the various functions exported by the
* pmac_* files. Mostly for use by pmac_setup * pmac_* files. Mostly for use by pmac_setup
*/ */
extern void pmac_get_boot_time(struct rtc_time *tm); extern long pmac_time_init(void);
extern void pmac_get_rtc_time(struct rtc_time *tm); extern unsigned long pmac_get_rtc_time(void);
extern int pmac_set_rtc_time(struct rtc_time *tm); extern int pmac_set_rtc_time(unsigned long nowtime);
extern void pmac_read_rtc_time(void); extern void pmac_read_rtc_time(void);
extern void pmac_calibrate_decr(void); extern void pmac_calibrate_decr(void);
extern void pmac_pcibios_fixup(void); extern void pmac_pcibios_fixup(void);
extern void pmac_find_bridges(void);
extern unsigned long pmac_ide_get_base(int index);
extern void pmac_ide_init_hwif_ports(hw_regs_t *hw,
unsigned long data_port, unsigned long ctrl_port, int *irq);
extern void pmac_nvram_update(void);
extern unsigned char pmac_nvram_read_byte(int addr);
extern void pmac_nvram_write_byte(int addr, unsigned char val);
extern int pmac_pci_enable_device_hook(struct pci_dev *dev, int initial);
extern void pmac_pcibios_after_init(void);
extern int of_show_percpuinfo(struct seq_file *m, int i);
extern void pmac_pci_init(void); extern void pmac_pci_init(void);
extern void pmac_setup_pci_dma(void); extern void pmac_setup_pci_dma(void);
extern void pmac_check_ht_link(void); extern void pmac_check_ht_link(void);
...@@ -28,4 +40,9 @@ extern void pmac_ide_init_hwif_ports(hw_regs_t *hw, ...@@ -28,4 +40,9 @@ extern void pmac_ide_init_hwif_ports(hw_regs_t *hw,
extern void pmac_nvram_init(void); extern void pmac_nvram_init(void);
extern struct hw_interrupt_type pmac_pic;
void pmac_pic_init(void);
int pmac_get_irq(struct pt_regs *regs);
#endif /* __PMAC_H__ */ #endif /* __PMAC_H__ */
...@@ -73,28 +73,10 @@ ...@@ -73,28 +73,10 @@
#include <asm/of_device.h> #include <asm/of_device.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include "pmac_pic.h" #include "pmac.h"
#undef SHOW_GATWICK_IRQS #undef SHOW_GATWICK_IRQS
extern long pmac_time_init(void);
extern unsigned long pmac_get_rtc_time(void);
extern int pmac_set_rtc_time(unsigned long nowtime);
extern void pmac_read_rtc_time(void);
extern void pmac_calibrate_decr(void);
extern void pmac_pcibios_fixup(void);
extern void pmac_find_bridges(void);
extern unsigned long pmac_ide_get_base(int index);
extern void pmac_ide_init_hwif_ports(hw_regs_t *hw,
unsigned long data_port, unsigned long ctrl_port, int *irq);
extern void pmac_nvram_update(void);
extern unsigned char pmac_nvram_read_byte(int addr);
extern void pmac_nvram_write_byte(int addr, unsigned char val);
extern int pmac_pci_enable_device_hook(struct pci_dev *dev, int initial);
extern void pmac_pcibios_after_init(void);
extern int of_show_percpuinfo(struct seq_file *m, int i);
unsigned char drive_info; unsigned char drive_info;
int ppc_override_l2cr = 0; int ppc_override_l2cr = 0;
......
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