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

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
  powerpc: Really fix build without CONFIG_PCI
  powerpc: Fix build without CONFIG_PCI
  powerpc/4xx: Fix build of PCI code on 405
  powerpc/pseries: Simplify vpa deregistration functions
  powerpc/pseries: Cleanup VPA registration and deregistration errors
  powerpc/pseries: Fix kexec on recent firmware versions
  MAINTAINERS: change maintainership of mpc5xxx
  powerpc: Make KVM_GUEST default to n
  powerpc/kvm: Fix build errors with older toolchains
  powerpc: Lack of ibm,io-events not that important!
  powerpc: Move kdump default base address to half RMO size on 64bit
  powerpc/perf: Disable pagefaults during callchain stack read
  ppc: Remove duplicate definition of PV_POWER7
  powerpc: pseries: Fix kexec on machines with more than 4TB of RAM
  powerpc: Jump label misalignment causes oops at boot
  powerpc: Clean up some panic messages in prom_init
  powerpc: Fix device tree claim code
  powerpc: Return the_cpu_ spec from identify_cpu
  powerpc: mtspr/mtmsr should take an unsigned long
This commit is contained in:
Linus Torvalds 2011-08-10 12:36:45 -07:00
commit a0c49b6b67
19 changed files with 99 additions and 77 deletions

View File

@ -3905,9 +3905,9 @@ F: arch/powerpc/platforms/powermac/
F: drivers/macintosh/ F: drivers/macintosh/
LINUX FOR POWERPC EMBEDDED MPC5XXX LINUX FOR POWERPC EMBEDDED MPC5XXX
M: Grant Likely <grant.likely@secretlab.ca> M: Anatolij Gustschin <agust@denx.de>
L: linuxppc-dev@lists.ozlabs.org L: linuxppc-dev@lists.ozlabs.org
T: git git://git.secretlab.ca/git/linux-2.6.git T: git git://git.denx.de/linux-2.6-agust.git
S: Maintained S: Maintained
F: arch/powerpc/platforms/512x/ F: arch/powerpc/platforms/512x/
F: arch/powerpc/platforms/52xx/ F: arch/powerpc/platforms/52xx/

View File

@ -22,7 +22,6 @@ static __always_inline bool arch_static_branch(struct jump_label_key *key)
asm goto("1:\n\t" asm goto("1:\n\t"
"nop\n\t" "nop\n\t"
".pushsection __jump_table, \"aw\"\n\t" ".pushsection __jump_table, \"aw\"\n\t"
".align 4\n\t"
JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t" JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"
".popsection \n\t" ".popsection \n\t"
: : "i" (key) : : l_yes); : : "i" (key) : : l_yes);
@ -41,7 +40,6 @@ struct jump_entry {
jump_label_t code; jump_label_t code;
jump_label_t target; jump_label_t target;
jump_label_t key; jump_label_t key;
jump_label_t pad;
}; };
#endif /* _ASM_POWERPC_JUMP_LABEL_H */ #endif /* _ASM_POWERPC_JUMP_LABEL_H */

View File

@ -3,17 +3,7 @@
#include <asm/page.h> #include <asm/page.h>
/*
* If CONFIG_RELOCATABLE is enabled we can place the kdump kernel anywhere.
* To keep enough space in the RMO for the first stage kernel on 64bit, we
* place it at 64MB. If CONFIG_RELOCATABLE is not enabled we must place
* the second stage at 32MB.
*/
#if defined(CONFIG_RELOCATABLE) && defined(CONFIG_PPC64)
#define KDUMP_KERNELBASE 0x4000000
#else
#define KDUMP_KERNELBASE 0x2000000 #define KDUMP_KERNELBASE 0x2000000
#endif
/* How many bytes to reserve at zero for kdump. The reserve limit should /* How many bytes to reserve at zero for kdump. The reserve limit should
* be greater or equal to the trampoline's end address. * be greater or equal to the trampoline's end address.

View File

@ -1003,7 +1003,6 @@
#define PV_970 0x0039 #define PV_970 0x0039
#define PV_POWER5 0x003A #define PV_POWER5 0x003A
#define PV_POWER5p 0x003B #define PV_POWER5p 0x003B
#define PV_POWER7 0x003F
#define PV_970FX 0x003C #define PV_970FX 0x003C
#define PV_POWER6 0x003E #define PV_POWER6 0x003E
#define PV_POWER7 0x003F #define PV_POWER7 0x003F
@ -1024,13 +1023,16 @@
#define mtmsrd(v) __mtmsrd((v), 0) #define mtmsrd(v) __mtmsrd((v), 0)
#define mtmsr(v) mtmsrd(v) #define mtmsr(v) mtmsrd(v)
#else #else
#define mtmsr(v) asm volatile("mtmsr %0" : : "r" (v) : "memory") #define mtmsr(v) asm volatile("mtmsr %0" : \
: "r" ((unsigned long)(v)) \
: "memory")
#endif #endif
#define mfspr(rn) ({unsigned long rval; \ #define mfspr(rn) ({unsigned long rval; \
asm volatile("mfspr %0," __stringify(rn) \ asm volatile("mfspr %0," __stringify(rn) \
: "=r" (rval)); rval;}) : "=r" (rval)); rval;})
#define mtspr(rn, v) asm volatile("mtspr " __stringify(rn) ",%0" : : "r" (v)\ #define mtspr(rn, v) asm volatile("mtspr " __stringify(rn) ",%0" : \
: "r" ((unsigned long)(v)) \
: "memory") : "memory")
#ifdef __powerpc64__ #ifdef __powerpc64__

View File

@ -2051,7 +2051,8 @@ static struct cpu_spec __initdata cpu_specs[] = {
static struct cpu_spec the_cpu_spec; static struct cpu_spec the_cpu_spec;
static void __init setup_cpu_spec(unsigned long offset, struct cpu_spec *s) static struct cpu_spec * __init setup_cpu_spec(unsigned long offset,
struct cpu_spec *s)
{ {
struct cpu_spec *t = &the_cpu_spec; struct cpu_spec *t = &the_cpu_spec;
struct cpu_spec old; struct cpu_spec old;
@ -2114,6 +2115,8 @@ static void __init setup_cpu_spec(unsigned long offset, struct cpu_spec *s)
t->cpu_setup(offset, t); t->cpu_setup(offset, t);
} }
#endif /* CONFIG_PPC64 || CONFIG_BOOKE */ #endif /* CONFIG_PPC64 || CONFIG_BOOKE */
return t;
} }
struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr) struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
@ -2124,10 +2127,8 @@ struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
s = PTRRELOC(s); s = PTRRELOC(s);
for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) { for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) {
if ((pvr & s->pvr_mask) == s->pvr_value) { if ((pvr & s->pvr_mask) == s->pvr_value)
setup_cpu_spec(offset, s); return setup_cpu_spec(offset, s);
return s;
}
} }
BUG(); BUG();

View File

@ -117,6 +117,7 @@ void ioport_unmap(void __iomem *addr)
EXPORT_SYMBOL(ioport_map); EXPORT_SYMBOL(ioport_map);
EXPORT_SYMBOL(ioport_unmap); EXPORT_SYMBOL(ioport_unmap);
#ifdef CONFIG_PCI
void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max) void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
{ {
resource_size_t start = pci_resource_start(dev, bar); resource_size_t start = pci_resource_start(dev, bar);
@ -146,3 +147,4 @@ void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
EXPORT_SYMBOL(pci_iomap); EXPORT_SYMBOL(pci_iomap);
EXPORT_SYMBOL(pci_iounmap); EXPORT_SYMBOL(pci_iounmap);
#endif /* CONFIG_PCI */

View File

@ -136,12 +136,16 @@ void __init reserve_crashkernel(void)
crashk_res.start = KDUMP_KERNELBASE; crashk_res.start = KDUMP_KERNELBASE;
#else #else
if (!crashk_res.start) { if (!crashk_res.start) {
#ifdef CONFIG_PPC64
/* /*
* unspecified address, choose a region of specified size * On 64bit we split the RMO in half but cap it at half of
* can overlap with initrd (ignoring corruption when retained) * a small SLB (128MB) since the crash kernel needs to place
* ppc64 requires kernel and some stacks to be in first segemnt * itself and some stacks to be in the first segment.
*/ */
crashk_res.start = min(0x80000000ULL, (ppc64_rma_size / 2));
#else
crashk_res.start = KDUMP_KERNELBASE; crashk_res.start = KDUMP_KERNELBASE;
#endif
} }
crash_base = PAGE_ALIGN(crashk_res.start); crash_base = PAGE_ALIGN(crashk_res.start);

View File

@ -154,8 +154,12 @@ static int read_user_stack_64(unsigned long __user *ptr, unsigned long *ret)
((unsigned long)ptr & 7)) ((unsigned long)ptr & 7))
return -EFAULT; return -EFAULT;
if (!__get_user_inatomic(*ret, ptr)) pagefault_disable();
if (!__get_user_inatomic(*ret, ptr)) {
pagefault_enable();
return 0; return 0;
}
pagefault_enable();
return read_user_stack_slow(ptr, ret, 8); return read_user_stack_slow(ptr, ret, 8);
} }
@ -166,8 +170,12 @@ static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
((unsigned long)ptr & 3)) ((unsigned long)ptr & 3))
return -EFAULT; return -EFAULT;
if (!__get_user_inatomic(*ret, ptr)) pagefault_disable();
if (!__get_user_inatomic(*ret, ptr)) {
pagefault_enable();
return 0; return 0;
}
pagefault_enable();
return read_user_stack_slow(ptr, ret, 4); return read_user_stack_slow(ptr, ret, 4);
} }
@ -294,11 +302,17 @@ static inline int current_is_64bit(void)
*/ */
static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret) static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
{ {
int rc;
if ((unsigned long)ptr > TASK_SIZE - sizeof(unsigned int) || if ((unsigned long)ptr > TASK_SIZE - sizeof(unsigned int) ||
((unsigned long)ptr & 3)) ((unsigned long)ptr & 3))
return -EFAULT; return -EFAULT;
return __get_user_inatomic(*ret, ptr); pagefault_disable();
rc = __get_user_inatomic(*ret, ptr);
pagefault_enable();
return rc;
} }
static inline void perf_callchain_user_64(struct perf_callchain_entry *entry, static inline void perf_callchain_user_64(struct perf_callchain_entry *entry,

View File

@ -1020,7 +1020,7 @@ static unsigned long __init alloc_up(unsigned long size, unsigned long align)
} }
if (addr == 0) if (addr == 0)
return 0; return 0;
RELOC(alloc_bottom) = addr; RELOC(alloc_bottom) = addr + size;
prom_debug(" -> %x\n", addr); prom_debug(" -> %x\n", addr);
prom_debug(" alloc_bottom : %x\n", RELOC(alloc_bottom)); prom_debug(" alloc_bottom : %x\n", RELOC(alloc_bottom));
@ -1830,11 +1830,13 @@ static void __init *make_room(unsigned long *mem_start, unsigned long *mem_end,
if (room > DEVTREE_CHUNK_SIZE) if (room > DEVTREE_CHUNK_SIZE)
room = DEVTREE_CHUNK_SIZE; room = DEVTREE_CHUNK_SIZE;
if (room < PAGE_SIZE) if (room < PAGE_SIZE)
prom_panic("No memory for flatten_device_tree (no room)"); prom_panic("No memory for flatten_device_tree "
"(no room)\n");
chunk = alloc_up(room, 0); chunk = alloc_up(room, 0);
if (chunk == 0) if (chunk == 0)
prom_panic("No memory for flatten_device_tree (claim failed)"); prom_panic("No memory for flatten_device_tree "
*mem_end = RELOC(alloc_top); "(claim failed)\n");
*mem_end = chunk + room;
} }
ret = (void *)*mem_start; ret = (void *)*mem_start;
@ -2042,7 +2044,7 @@ static void __init flatten_device_tree(void)
/* /*
* Check how much room we have between alloc top & bottom (+/- a * Check how much room we have between alloc top & bottom (+/- a
* few pages), crop to 4Mb, as this is our "chuck" size * few pages), crop to 1MB, as this is our "chunk" size
*/ */
room = RELOC(alloc_top) - RELOC(alloc_bottom) - 0x4000; room = RELOC(alloc_top) - RELOC(alloc_bottom) - 0x4000;
if (room > DEVTREE_CHUNK_SIZE) if (room > DEVTREE_CHUNK_SIZE)
@ -2053,7 +2055,7 @@ static void __init flatten_device_tree(void)
mem_start = (unsigned long)alloc_up(room, PAGE_SIZE); mem_start = (unsigned long)alloc_up(room, PAGE_SIZE);
if (mem_start == 0) if (mem_start == 0)
prom_panic("Can't allocate initial device-tree chunk\n"); prom_panic("Can't allocate initial device-tree chunk\n");
mem_end = RELOC(alloc_top); mem_end = mem_start + room;
/* Get root of tree */ /* Get root of tree */
root = call_prom("peer", 1, 1, (phandle)0); root = call_prom("peer", 1, 1, (phandle)0);

View File

@ -1251,7 +1251,7 @@ BEGIN_FTR_SECTION
reg = 0 reg = 0
.rept 32 .rept 32
li r6,reg*16+VCPU_VSRS li r6,reg*16+VCPU_VSRS
stxvd2x reg,r6,r3 STXVD2X(reg,r6,r3)
reg = reg + 1 reg = reg + 1
.endr .endr
FTR_SECTION_ELSE FTR_SECTION_ELSE
@ -1313,7 +1313,7 @@ BEGIN_FTR_SECTION
reg = 0 reg = 0
.rept 32 .rept 32
li r7,reg*16+VCPU_VSRS li r7,reg*16+VCPU_VSRS
lxvd2x reg,r7,r4 LXVD2X(reg,r7,r4)
reg = reg + 1 reg = reg + 1
.endr .endr
FTR_SECTION_ELSE FTR_SECTION_ELSE

View File

@ -24,7 +24,7 @@ source "arch/powerpc/platforms/wsp/Kconfig"
config KVM_GUEST config KVM_GUEST
bool "KVM Guest support" bool "KVM Guest support"
default y default n
---help--- ---help---
This option enables various optimizations for running under the KVM This option enables various optimizations for running under the KVM
hypervisor. Overhead for the kernel when not running inside KVM should hypervisor. Overhead for the kernel when not running inside KVM should

View File

@ -181,7 +181,7 @@ static void dtl_stop(struct dtl *dtl)
lppaca_of(dtl->cpu).dtl_enable_mask = 0x0; lppaca_of(dtl->cpu).dtl_enable_mask = 0x0;
unregister_dtl(hwcpu, __pa(dtl->buf)); unregister_dtl(hwcpu);
} }
static u64 dtl_current_index(struct dtl *dtl) static u64 dtl_current_index(struct dtl *dtl)

View File

@ -135,7 +135,7 @@ static void pseries_mach_cpu_die(void)
get_lppaca()->idle = 0; get_lppaca()->idle = 0;
if (get_preferred_offline_state(cpu) == CPU_STATE_ONLINE) { if (get_preferred_offline_state(cpu) == CPU_STATE_ONLINE) {
unregister_slb_shadow(hwcpu, __pa(get_slb_shadow())); unregister_slb_shadow(hwcpu);
/* /*
* Call to start_secondary_resume() will not return. * Call to start_secondary_resume() will not return.
@ -150,7 +150,7 @@ static void pseries_mach_cpu_die(void)
WARN_ON(get_preferred_offline_state(cpu) != CPU_STATE_OFFLINE); WARN_ON(get_preferred_offline_state(cpu) != CPU_STATE_OFFLINE);
set_cpu_current_state(cpu, CPU_STATE_OFFLINE); set_cpu_current_state(cpu, CPU_STATE_OFFLINE);
unregister_slb_shadow(hwcpu, __pa(get_slb_shadow())); unregister_slb_shadow(hwcpu);
rtas_stop_self(); rtas_stop_self();
/* Should never get here... */ /* Should never get here... */

View File

@ -212,17 +212,15 @@ static int __init ioei_init(void)
struct device_node *np; struct device_node *np;
ioei_check_exception_token = rtas_token("check-exception"); ioei_check_exception_token = rtas_token("check-exception");
if (ioei_check_exception_token == RTAS_UNKNOWN_SERVICE) { if (ioei_check_exception_token == RTAS_UNKNOWN_SERVICE)
pr_warning("IO Event IRQ not supported on this system !\n");
return -ENODEV; return -ENODEV;
}
np = of_find_node_by_path("/event-sources/ibm,io-events"); np = of_find_node_by_path("/event-sources/ibm,io-events");
if (np) { if (np) {
request_event_sources_irqs(np, ioei_interrupt, "IO_EVENT"); request_event_sources_irqs(np, ioei_interrupt, "IO_EVENT");
pr_info("IBM I/O event interrupts enabled\n");
of_node_put(np); of_node_put(np);
} else { } else {
pr_err("io_event_irq: No ibm,io-events on system! "
"IO Event interrupt disabled.\n");
return -ENODEV; return -ENODEV;
} }
return 0; return 0;

View File

@ -25,20 +25,30 @@ static void pseries_kexec_cpu_down(int crash_shutdown, int secondary)
{ {
/* Don't risk a hypervisor call if we're crashing */ /* Don't risk a hypervisor call if we're crashing */
if (firmware_has_feature(FW_FEATURE_SPLPAR) && !crash_shutdown) { if (firmware_has_feature(FW_FEATURE_SPLPAR) && !crash_shutdown) {
unsigned long addr; int ret;
int cpu = smp_processor_id();
int hwcpu = hard_smp_processor_id();
addr = __pa(get_slb_shadow()); if (get_lppaca()->dtl_enable_mask) {
if (unregister_slb_shadow(hard_smp_processor_id(), addr)) ret = unregister_dtl(hwcpu);
printk("SLB shadow buffer deregistration of " if (ret) {
"cpu %u (hw_cpu_id %d) failed\n", pr_err("WARNING: DTL deregistration for cpu "
smp_processor_id(), "%d (hw %d) failed with %d\n",
hard_smp_processor_id()); cpu, hwcpu, ret);
}
}
addr = __pa(get_lppaca()); ret = unregister_slb_shadow(hwcpu);
if (unregister_vpa(hard_smp_processor_id(), addr)) { if (ret) {
printk("VPA deregistration of cpu %u (hw_cpu_id %d) " pr_err("WARNING: SLB shadow buffer deregistration "
"failed\n", smp_processor_id(), "for cpu %d (hw %d) failed with %d\n",
hard_smp_processor_id()); cpu, hwcpu, ret);
}
ret = unregister_vpa(hwcpu);
if (ret) {
pr_err("WARNING: VPA deregistration for cpu %d "
"(hw %d) failed with %d\n", cpu, hwcpu, ret);
} }
} }
} }

View File

@ -67,9 +67,8 @@ void vpa_init(int cpu)
ret = register_vpa(hwcpu, addr); ret = register_vpa(hwcpu, addr);
if (ret) { if (ret) {
printk(KERN_ERR "WARNING: vpa_init: VPA registration for " pr_err("WARNING: VPA registration for cpu %d (hw %d) of area "
"cpu %d (hw %d) of area %lx returns %ld\n", "%lx failed with %ld\n", cpu, hwcpu, addr, ret);
cpu, hwcpu, addr, ret);
return; return;
} }
/* /*
@ -80,10 +79,9 @@ void vpa_init(int cpu)
if (firmware_has_feature(FW_FEATURE_SPLPAR)) { if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
ret = register_slb_shadow(hwcpu, addr); ret = register_slb_shadow(hwcpu, addr);
if (ret) if (ret)
printk(KERN_ERR pr_err("WARNING: SLB shadow buffer registration for "
"WARNING: vpa_init: SLB shadow buffer " "cpu %d (hw %d) of area %lx failed with %ld\n",
"registration for cpu %d (hw %d) of area %lx " cpu, hwcpu, addr, ret);
"returns %ld\n", cpu, hwcpu, addr, ret);
} }
/* /*
@ -100,8 +98,9 @@ void vpa_init(int cpu)
dtl->enqueue_to_dispatch_time = DISPATCH_LOG_BYTES; dtl->enqueue_to_dispatch_time = DISPATCH_LOG_BYTES;
ret = register_dtl(hwcpu, __pa(dtl)); ret = register_dtl(hwcpu, __pa(dtl));
if (ret) if (ret)
pr_warn("DTL registration failed for cpu %d (%ld)\n", pr_err("WARNING: DTL registration of cpu %d (hw %d) "
cpu, ret); "failed with %ld\n", smp_processor_id(),
hwcpu, ret);
lppaca_of(cpu).dtl_enable_mask = 2; lppaca_of(cpu).dtl_enable_mask = 2;
} }
} }
@ -204,7 +203,7 @@ static void pSeries_lpar_hptab_clear(void)
unsigned long ptel; unsigned long ptel;
} ptes[4]; } ptes[4];
long lpar_rc; long lpar_rc;
int i, j; unsigned long i, j;
/* Read in batches of 4, /* Read in batches of 4,
* invalidate only valid entries not in the VRMA * invalidate only valid entries not in the VRMA

View File

@ -53,9 +53,9 @@ static inline long vpa_call(unsigned long flags, unsigned long cpu,
return plpar_hcall_norets(H_REGISTER_VPA, flags, cpu, vpa); return plpar_hcall_norets(H_REGISTER_VPA, flags, cpu, vpa);
} }
static inline long unregister_vpa(unsigned long cpu, unsigned long vpa) static inline long unregister_vpa(unsigned long cpu)
{ {
return vpa_call(0x5, cpu, vpa); return vpa_call(0x5, cpu, 0);
} }
static inline long register_vpa(unsigned long cpu, unsigned long vpa) static inline long register_vpa(unsigned long cpu, unsigned long vpa)
@ -63,9 +63,9 @@ static inline long register_vpa(unsigned long cpu, unsigned long vpa)
return vpa_call(0x1, cpu, vpa); return vpa_call(0x1, cpu, vpa);
} }
static inline long unregister_slb_shadow(unsigned long cpu, unsigned long vpa) static inline long unregister_slb_shadow(unsigned long cpu)
{ {
return vpa_call(0x7, cpu, vpa); return vpa_call(0x7, cpu, 0);
} }
static inline long register_slb_shadow(unsigned long cpu, unsigned long vpa) static inline long register_slb_shadow(unsigned long cpu, unsigned long vpa)
@ -73,9 +73,9 @@ static inline long register_slb_shadow(unsigned long cpu, unsigned long vpa)
return vpa_call(0x3, cpu, vpa); return vpa_call(0x3, cpu, vpa);
} }
static inline long unregister_dtl(unsigned long cpu, unsigned long vpa) static inline long unregister_dtl(unsigned long cpu)
{ {
return vpa_call(0x6, cpu, vpa); return vpa_call(0x6, cpu, 0);
} }
static inline long register_dtl(unsigned long cpu, unsigned long vpa) static inline long register_dtl(unsigned long cpu, unsigned long vpa)

View File

@ -324,8 +324,9 @@ static int alloc_dispatch_logs(void)
dtl->enqueue_to_dispatch_time = DISPATCH_LOG_BYTES; dtl->enqueue_to_dispatch_time = DISPATCH_LOG_BYTES;
ret = register_dtl(hard_smp_processor_id(), __pa(dtl)); ret = register_dtl(hard_smp_processor_id(), __pa(dtl));
if (ret) if (ret)
pr_warn("DTL registration failed for boot cpu %d (%d)\n", pr_err("WARNING: DTL registration of cpu %d (hw %d) failed "
smp_processor_id(), ret); "with %d\n", smp_processor_id(),
hard_smp_processor_id(), ret);
get_paca()->lppaca_ptr->dtl_enable_mask = 2; get_paca()->lppaca_ptr->dtl_enable_mask = 2;
return 0; return 0;

View File

@ -655,8 +655,6 @@ struct ppc4xx_pciex_hwops
static struct ppc4xx_pciex_hwops *ppc4xx_pciex_hwops; static struct ppc4xx_pciex_hwops *ppc4xx_pciex_hwops;
#ifdef CONFIG_44x
static int __init ppc4xx_pciex_wait_on_sdr(struct ppc4xx_pciex_port *port, static int __init ppc4xx_pciex_wait_on_sdr(struct ppc4xx_pciex_port *port,
unsigned int sdr_offset, unsigned int sdr_offset,
unsigned int mask, unsigned int mask,
@ -688,6 +686,7 @@ static int __init ppc4xx_pciex_port_reset_sdr(struct ppc4xx_pciex_port *port)
return 0; return 0;
} }
static void __init ppc4xx_pciex_check_link_sdr(struct ppc4xx_pciex_port *port) static void __init ppc4xx_pciex_check_link_sdr(struct ppc4xx_pciex_port *port)
{ {
printk(KERN_INFO "PCIE%d: Checking link...\n", port->index); printk(KERN_INFO "PCIE%d: Checking link...\n", port->index);
@ -718,6 +717,8 @@ static void __init ppc4xx_pciex_check_link_sdr(struct ppc4xx_pciex_port *port)
printk(KERN_INFO "PCIE%d: No device detected.\n", port->index); printk(KERN_INFO "PCIE%d: No device detected.\n", port->index);
} }
#ifdef CONFIG_44x
/* Check various reset bits of the 440SPe PCIe core */ /* Check various reset bits of the 440SPe PCIe core */
static int __init ppc440spe_pciex_check_reset(struct device_node *np) static int __init ppc440spe_pciex_check_reset(struct device_node *np)
{ {