Loading Makefile +1 −1 Original line number Diff line number Diff line VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 12 EXTRAVERSION =-rc4 EXTRAVERSION =-rc5 NAME=Woozy Numbat # *DOCUMENTATION* Loading arch/i386/mach-voyager/voyager_smp.c +8 −9 Original line number Diff line number Diff line Loading @@ -97,7 +97,6 @@ static void ack_vic_irq(unsigned int irq); static void vic_enable_cpi(void); static void do_boot_cpu(__u8 cpuid); static void do_quad_bootstrap(void); static inline void wrapper_smp_local_timer_interrupt(struct pt_regs *); int hard_smp_processor_id(void); Loading Loading @@ -125,6 +124,14 @@ send_QIC_CPI(__u32 cpuset, __u8 cpi) } } static inline void wrapper_smp_local_timer_interrupt(struct pt_regs *regs) { irq_enter(); smp_local_timer_interrupt(regs); irq_exit(); } static inline void send_one_CPI(__u8 cpu, __u8 cpi) { Loading Loading @@ -1249,14 +1256,6 @@ smp_vic_timer_interrupt(struct pt_regs *regs) smp_local_timer_interrupt(regs); } static inline void wrapper_smp_local_timer_interrupt(struct pt_regs *regs) { irq_enter(); smp_local_timer_interrupt(regs); irq_exit(); } /* local (per CPU) timer interrupt. It does both profiling and * process statistics/rescheduling. * Loading arch/ppc/syslib/ipic.c +1 −1 Original line number Diff line number Diff line Loading @@ -479,7 +479,7 @@ void __init ipic_init(phys_addr_t phys_addr, temp = 0; for (i = 0 ; i < senses_count ; i++) { if ((senses[i] & IRQ_SENSE_MASK) == IRQ_SENSE_EDGE) { temp |= 1 << (16 - i); temp |= 1 << (15 - i); if (i != 0) irq_desc[i + irq_offset + MPC83xx_IRQ_EXT1 - 1].status = 0; else Loading arch/ppc64/kernel/pmac_smp.c +21 −7 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ extern struct smp_ops_t *smp_ops; static void (*pmac_tb_freeze)(int freeze); static struct device_node *pmac_tb_clock_chip_host; static u8 pmac_tb_pulsar_addr; static DEFINE_SPINLOCK(timebase_lock); static unsigned long timebase; Loading Loading @@ -106,12 +107,9 @@ static void smp_core99_pulsar_tb_freeze(int freeze) u8 data; int rc; /* Strangely, the device-tree says address is 0xd2, but darwin * accesses 0xd0 ... */ pmac_low_i2c_setmode(pmac_tb_clock_chip_host, pmac_low_i2c_mode_combined); rc = pmac_low_i2c_xfer(pmac_tb_clock_chip_host, 0xd4 | pmac_low_i2c_read, pmac_tb_pulsar_addr | pmac_low_i2c_read, 0x2e, &data, 1); if (rc != 0) goto bail; Loading @@ -120,7 +118,7 @@ static void smp_core99_pulsar_tb_freeze(int freeze) pmac_low_i2c_setmode(pmac_tb_clock_chip_host, pmac_low_i2c_mode_stdsub); rc = pmac_low_i2c_xfer(pmac_tb_clock_chip_host, 0xd4 | pmac_low_i2c_write, pmac_tb_pulsar_addr | pmac_low_i2c_write, 0x2e, &data, 1); bail: if (rc != 0) { Loading Loading @@ -185,6 +183,12 @@ static int __init smp_core99_probe(void) if (ncpus <= 1) return 1; /* HW sync only on these platforms */ if (!machine_is_compatible("PowerMac7,2") && !machine_is_compatible("PowerMac7,3") && !machine_is_compatible("RackMac3,1")) goto nohwsync; /* Look for the clock chip */ for (cc = NULL; (cc = of_find_node_by_name(cc, "i2c-hwclock")) != NULL;) { struct device_node *p = of_get_parent(cc); Loading @@ -198,11 +202,18 @@ static int __init smp_core99_probe(void) goto next; switch (*reg) { case 0xd2: if (device_is_compatible(cc, "pulsar-legacy-slewing")) { pmac_tb_freeze = smp_core99_pulsar_tb_freeze; pmac_tb_pulsar_addr = 0xd2; printk(KERN_INFO "Timebase clock is Pulsar chip\n"); } else if (device_is_compatible(cc, "cy28508")) { pmac_tb_freeze = smp_core99_cypress_tb_freeze; printk(KERN_INFO "Timebase clock is Cypress chip\n"); } break; case 0xd4: pmac_tb_freeze = smp_core99_pulsar_tb_freeze; pmac_tb_pulsar_addr = 0xd4; printk(KERN_INFO "Timebase clock is Pulsar chip\n"); break; } Loading @@ -210,12 +221,15 @@ static int __init smp_core99_probe(void) pmac_tb_clock_chip_host = p; smp_ops->give_timebase = smp_core99_give_timebase; smp_ops->take_timebase = smp_core99_take_timebase; of_node_put(cc); of_node_put(p); break; } next: of_node_put(p); } nohwsync: mpic_request_ipis(); return ncpus; Loading arch/ppc64/kernel/prom_init.c +43 −1 Original line number Diff line number Diff line Loading @@ -1752,6 +1752,43 @@ static void __init flatten_device_tree(void) } static void __init fixup_device_tree(void) { unsigned long offset = reloc_offset(); phandle u3, i2c, mpic; u32 u3_rev; u32 interrupts[2]; u32 parent; /* Some G5s have a missing interrupt definition, fix it up here */ u3 = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000")); if ((long)u3 <= 0) return; i2c = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/i2c@f8001000")); if ((long)i2c <= 0) return; mpic = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/mpic@f8040000")); if ((long)mpic <= 0) return; /* check if proper rev of u3 */ if (prom_getprop(u3, "device-rev", &u3_rev, sizeof(u3_rev)) <= 0) return; if (u3_rev != 0x35) return; /* does it need fixup ? */ if (prom_getproplen(i2c, "interrupts") > 0) return; /* interrupt on this revision of u3 is number 0 and level */ interrupts[0] = 0; interrupts[1] = 1; prom_setprop(i2c, "interrupts", &interrupts, sizeof(interrupts)); parent = (u32)mpic; prom_setprop(i2c, "interrupt-parent", &parent, sizeof(parent)); } static void __init prom_find_boot_cpu(void) { unsigned long offset = reloc_offset(); Loading Loading @@ -1919,6 +1956,11 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, unsigned long PTRRELOC(&prom_tce_alloc_end), sizeof(RELOC(prom_tce_alloc_end))); } /* * Fixup any known bugs in the device-tree */ fixup_device_tree(); /* * Now finally create the flattened device-tree */ Loading Loading
Makefile +1 −1 Original line number Diff line number Diff line VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 12 EXTRAVERSION =-rc4 EXTRAVERSION =-rc5 NAME=Woozy Numbat # *DOCUMENTATION* Loading
arch/i386/mach-voyager/voyager_smp.c +8 −9 Original line number Diff line number Diff line Loading @@ -97,7 +97,6 @@ static void ack_vic_irq(unsigned int irq); static void vic_enable_cpi(void); static void do_boot_cpu(__u8 cpuid); static void do_quad_bootstrap(void); static inline void wrapper_smp_local_timer_interrupt(struct pt_regs *); int hard_smp_processor_id(void); Loading Loading @@ -125,6 +124,14 @@ send_QIC_CPI(__u32 cpuset, __u8 cpi) } } static inline void wrapper_smp_local_timer_interrupt(struct pt_regs *regs) { irq_enter(); smp_local_timer_interrupt(regs); irq_exit(); } static inline void send_one_CPI(__u8 cpu, __u8 cpi) { Loading Loading @@ -1249,14 +1256,6 @@ smp_vic_timer_interrupt(struct pt_regs *regs) smp_local_timer_interrupt(regs); } static inline void wrapper_smp_local_timer_interrupt(struct pt_regs *regs) { irq_enter(); smp_local_timer_interrupt(regs); irq_exit(); } /* local (per CPU) timer interrupt. It does both profiling and * process statistics/rescheduling. * Loading
arch/ppc/syslib/ipic.c +1 −1 Original line number Diff line number Diff line Loading @@ -479,7 +479,7 @@ void __init ipic_init(phys_addr_t phys_addr, temp = 0; for (i = 0 ; i < senses_count ; i++) { if ((senses[i] & IRQ_SENSE_MASK) == IRQ_SENSE_EDGE) { temp |= 1 << (16 - i); temp |= 1 << (15 - i); if (i != 0) irq_desc[i + irq_offset + MPC83xx_IRQ_EXT1 - 1].status = 0; else Loading
arch/ppc64/kernel/pmac_smp.c +21 −7 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ extern struct smp_ops_t *smp_ops; static void (*pmac_tb_freeze)(int freeze); static struct device_node *pmac_tb_clock_chip_host; static u8 pmac_tb_pulsar_addr; static DEFINE_SPINLOCK(timebase_lock); static unsigned long timebase; Loading Loading @@ -106,12 +107,9 @@ static void smp_core99_pulsar_tb_freeze(int freeze) u8 data; int rc; /* Strangely, the device-tree says address is 0xd2, but darwin * accesses 0xd0 ... */ pmac_low_i2c_setmode(pmac_tb_clock_chip_host, pmac_low_i2c_mode_combined); rc = pmac_low_i2c_xfer(pmac_tb_clock_chip_host, 0xd4 | pmac_low_i2c_read, pmac_tb_pulsar_addr | pmac_low_i2c_read, 0x2e, &data, 1); if (rc != 0) goto bail; Loading @@ -120,7 +118,7 @@ static void smp_core99_pulsar_tb_freeze(int freeze) pmac_low_i2c_setmode(pmac_tb_clock_chip_host, pmac_low_i2c_mode_stdsub); rc = pmac_low_i2c_xfer(pmac_tb_clock_chip_host, 0xd4 | pmac_low_i2c_write, pmac_tb_pulsar_addr | pmac_low_i2c_write, 0x2e, &data, 1); bail: if (rc != 0) { Loading Loading @@ -185,6 +183,12 @@ static int __init smp_core99_probe(void) if (ncpus <= 1) return 1; /* HW sync only on these platforms */ if (!machine_is_compatible("PowerMac7,2") && !machine_is_compatible("PowerMac7,3") && !machine_is_compatible("RackMac3,1")) goto nohwsync; /* Look for the clock chip */ for (cc = NULL; (cc = of_find_node_by_name(cc, "i2c-hwclock")) != NULL;) { struct device_node *p = of_get_parent(cc); Loading @@ -198,11 +202,18 @@ static int __init smp_core99_probe(void) goto next; switch (*reg) { case 0xd2: if (device_is_compatible(cc, "pulsar-legacy-slewing")) { pmac_tb_freeze = smp_core99_pulsar_tb_freeze; pmac_tb_pulsar_addr = 0xd2; printk(KERN_INFO "Timebase clock is Pulsar chip\n"); } else if (device_is_compatible(cc, "cy28508")) { pmac_tb_freeze = smp_core99_cypress_tb_freeze; printk(KERN_INFO "Timebase clock is Cypress chip\n"); } break; case 0xd4: pmac_tb_freeze = smp_core99_pulsar_tb_freeze; pmac_tb_pulsar_addr = 0xd4; printk(KERN_INFO "Timebase clock is Pulsar chip\n"); break; } Loading @@ -210,12 +221,15 @@ static int __init smp_core99_probe(void) pmac_tb_clock_chip_host = p; smp_ops->give_timebase = smp_core99_give_timebase; smp_ops->take_timebase = smp_core99_take_timebase; of_node_put(cc); of_node_put(p); break; } next: of_node_put(p); } nohwsync: mpic_request_ipis(); return ncpus; Loading
arch/ppc64/kernel/prom_init.c +43 −1 Original line number Diff line number Diff line Loading @@ -1752,6 +1752,43 @@ static void __init flatten_device_tree(void) } static void __init fixup_device_tree(void) { unsigned long offset = reloc_offset(); phandle u3, i2c, mpic; u32 u3_rev; u32 interrupts[2]; u32 parent; /* Some G5s have a missing interrupt definition, fix it up here */ u3 = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000")); if ((long)u3 <= 0) return; i2c = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/i2c@f8001000")); if ((long)i2c <= 0) return; mpic = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/mpic@f8040000")); if ((long)mpic <= 0) return; /* check if proper rev of u3 */ if (prom_getprop(u3, "device-rev", &u3_rev, sizeof(u3_rev)) <= 0) return; if (u3_rev != 0x35) return; /* does it need fixup ? */ if (prom_getproplen(i2c, "interrupts") > 0) return; /* interrupt on this revision of u3 is number 0 and level */ interrupts[0] = 0; interrupts[1] = 1; prom_setprop(i2c, "interrupts", &interrupts, sizeof(interrupts)); parent = (u32)mpic; prom_setprop(i2c, "interrupt-parent", &parent, sizeof(parent)); } static void __init prom_find_boot_cpu(void) { unsigned long offset = reloc_offset(); Loading Loading @@ -1919,6 +1956,11 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, unsigned long PTRRELOC(&prom_tce_alloc_end), sizeof(RELOC(prom_tce_alloc_end))); } /* * Fixup any known bugs in the device-tree */ fixup_device_tree(); /* * Now finally create the flattened device-tree */ Loading