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:
Коммит
a0c49b6b67
|
@ -3905,9 +3905,9 @@ F: arch/powerpc/platforms/powermac/
|
|||
F: drivers/macintosh/
|
||||
|
||||
LINUX FOR POWERPC EMBEDDED MPC5XXX
|
||||
M: Grant Likely <grant.likely@secretlab.ca>
|
||||
M: Anatolij Gustschin <agust@denx.de>
|
||||
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
|
||||
F: arch/powerpc/platforms/512x/
|
||||
F: arch/powerpc/platforms/52xx/
|
||||
|
|
|
@ -22,7 +22,6 @@ static __always_inline bool arch_static_branch(struct jump_label_key *key)
|
|||
asm goto("1:\n\t"
|
||||
"nop\n\t"
|
||||
".pushsection __jump_table, \"aw\"\n\t"
|
||||
".align 4\n\t"
|
||||
JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"
|
||||
".popsection \n\t"
|
||||
: : "i" (key) : : l_yes);
|
||||
|
@ -41,7 +40,6 @@ struct jump_entry {
|
|||
jump_label_t code;
|
||||
jump_label_t target;
|
||||
jump_label_t key;
|
||||
jump_label_t pad;
|
||||
};
|
||||
|
||||
#endif /* _ASM_POWERPC_JUMP_LABEL_H */
|
||||
|
|
|
@ -3,17 +3,7 @@
|
|||
|
||||
#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
|
||||
#endif
|
||||
|
||||
/* How many bytes to reserve at zero for kdump. The reserve limit should
|
||||
* be greater or equal to the trampoline's end address.
|
||||
|
|
|
@ -1003,7 +1003,6 @@
|
|||
#define PV_970 0x0039
|
||||
#define PV_POWER5 0x003A
|
||||
#define PV_POWER5p 0x003B
|
||||
#define PV_POWER7 0x003F
|
||||
#define PV_970FX 0x003C
|
||||
#define PV_POWER6 0x003E
|
||||
#define PV_POWER7 0x003F
|
||||
|
@ -1024,13 +1023,16 @@
|
|||
#define mtmsrd(v) __mtmsrd((v), 0)
|
||||
#define mtmsr(v) mtmsrd(v)
|
||||
#else
|
||||
#define mtmsr(v) asm volatile("mtmsr %0" : : "r" (v) : "memory")
|
||||
#define mtmsr(v) asm volatile("mtmsr %0" : \
|
||||
: "r" ((unsigned long)(v)) \
|
||||
: "memory")
|
||||
#endif
|
||||
|
||||
#define mfspr(rn) ({unsigned long rval; \
|
||||
asm volatile("mfspr %0," __stringify(rn) \
|
||||
: "=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")
|
||||
|
||||
#ifdef __powerpc64__
|
||||
|
|
|
@ -2051,7 +2051,8 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
|||
|
||||
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 old;
|
||||
|
@ -2114,6 +2115,8 @@ static void __init setup_cpu_spec(unsigned long offset, struct cpu_spec *s)
|
|||
t->cpu_setup(offset, t);
|
||||
}
|
||||
#endif /* CONFIG_PPC64 || CONFIG_BOOKE */
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) {
|
||||
if ((pvr & s->pvr_mask) == s->pvr_value) {
|
||||
setup_cpu_spec(offset, s);
|
||||
return s;
|
||||
}
|
||||
if ((pvr & s->pvr_mask) == s->pvr_value)
|
||||
return setup_cpu_spec(offset, s);
|
||||
}
|
||||
|
||||
BUG();
|
||||
|
|
|
@ -117,6 +117,7 @@ void ioport_unmap(void __iomem *addr)
|
|||
EXPORT_SYMBOL(ioport_map);
|
||||
EXPORT_SYMBOL(ioport_unmap);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
|
||||
{
|
||||
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_iounmap);
|
||||
#endif /* CONFIG_PCI */
|
||||
|
|
|
@ -136,12 +136,16 @@ void __init reserve_crashkernel(void)
|
|||
crashk_res.start = KDUMP_KERNELBASE;
|
||||
#else
|
||||
if (!crashk_res.start) {
|
||||
#ifdef CONFIG_PPC64
|
||||
/*
|
||||
* unspecified address, choose a region of specified size
|
||||
* can overlap with initrd (ignoring corruption when retained)
|
||||
* ppc64 requires kernel and some stacks to be in first segemnt
|
||||
* On 64bit we split the RMO in half but cap it at half of
|
||||
* a small SLB (128MB) since the crash kernel needs to place
|
||||
* 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;
|
||||
#endif
|
||||
}
|
||||
|
||||
crash_base = PAGE_ALIGN(crashk_res.start);
|
||||
|
|
|
@ -154,8 +154,12 @@ static int read_user_stack_64(unsigned long __user *ptr, unsigned long *ret)
|
|||
((unsigned long)ptr & 7))
|
||||
return -EFAULT;
|
||||
|
||||
if (!__get_user_inatomic(*ret, ptr))
|
||||
pagefault_disable();
|
||||
if (!__get_user_inatomic(*ret, ptr)) {
|
||||
pagefault_enable();
|
||||
return 0;
|
||||
}
|
||||
pagefault_enable();
|
||||
|
||||
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))
|
||||
return -EFAULT;
|
||||
|
||||
if (!__get_user_inatomic(*ret, ptr))
|
||||
pagefault_disable();
|
||||
if (!__get_user_inatomic(*ret, ptr)) {
|
||||
pagefault_enable();
|
||||
return 0;
|
||||
}
|
||||
pagefault_enable();
|
||||
|
||||
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)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if ((unsigned long)ptr > TASK_SIZE - sizeof(unsigned int) ||
|
||||
((unsigned long)ptr & 3))
|
||||
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,
|
||||
|
|
|
@ -1020,7 +1020,7 @@ static unsigned long __init alloc_up(unsigned long size, unsigned long align)
|
|||
}
|
||||
if (addr == 0)
|
||||
return 0;
|
||||
RELOC(alloc_bottom) = addr;
|
||||
RELOC(alloc_bottom) = addr + size;
|
||||
|
||||
prom_debug(" -> %x\n", addr);
|
||||
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)
|
||||
room = DEVTREE_CHUNK_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);
|
||||
if (chunk == 0)
|
||||
prom_panic("No memory for flatten_device_tree (claim failed)");
|
||||
*mem_end = RELOC(alloc_top);
|
||||
prom_panic("No memory for flatten_device_tree "
|
||||
"(claim failed)\n");
|
||||
*mem_end = chunk + room;
|
||||
}
|
||||
|
||||
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
|
||||
* 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;
|
||||
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);
|
||||
if (mem_start == 0)
|
||||
prom_panic("Can't allocate initial device-tree chunk\n");
|
||||
mem_end = RELOC(alloc_top);
|
||||
mem_end = mem_start + room;
|
||||
|
||||
/* Get root of tree */
|
||||
root = call_prom("peer", 1, 1, (phandle)0);
|
||||
|
|
|
@ -1251,7 +1251,7 @@ BEGIN_FTR_SECTION
|
|||
reg = 0
|
||||
.rept 32
|
||||
li r6,reg*16+VCPU_VSRS
|
||||
stxvd2x reg,r6,r3
|
||||
STXVD2X(reg,r6,r3)
|
||||
reg = reg + 1
|
||||
.endr
|
||||
FTR_SECTION_ELSE
|
||||
|
@ -1313,7 +1313,7 @@ BEGIN_FTR_SECTION
|
|||
reg = 0
|
||||
.rept 32
|
||||
li r7,reg*16+VCPU_VSRS
|
||||
lxvd2x reg,r7,r4
|
||||
LXVD2X(reg,r7,r4)
|
||||
reg = reg + 1
|
||||
.endr
|
||||
FTR_SECTION_ELSE
|
||||
|
|
|
@ -24,7 +24,7 @@ source "arch/powerpc/platforms/wsp/Kconfig"
|
|||
|
||||
config KVM_GUEST
|
||||
bool "KVM Guest support"
|
||||
default y
|
||||
default n
|
||||
---help---
|
||||
This option enables various optimizations for running under the KVM
|
||||
hypervisor. Overhead for the kernel when not running inside KVM should
|
||||
|
|
|
@ -181,7 +181,7 @@ static void dtl_stop(struct dtl *dtl)
|
|||
|
||||
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)
|
||||
|
|
|
@ -135,7 +135,7 @@ static void pseries_mach_cpu_die(void)
|
|||
get_lppaca()->idle = 0;
|
||||
|
||||
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.
|
||||
|
@ -150,7 +150,7 @@ static void pseries_mach_cpu_die(void)
|
|||
WARN_ON(get_preferred_offline_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();
|
||||
|
||||
/* Should never get here... */
|
||||
|
|
|
@ -212,17 +212,15 @@ static int __init ioei_init(void)
|
|||
struct device_node *np;
|
||||
|
||||
ioei_check_exception_token = rtas_token("check-exception");
|
||||
if (ioei_check_exception_token == RTAS_UNKNOWN_SERVICE) {
|
||||
pr_warning("IO Event IRQ not supported on this system !\n");
|
||||
if (ioei_check_exception_token == RTAS_UNKNOWN_SERVICE)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
np = of_find_node_by_path("/event-sources/ibm,io-events");
|
||||
if (np) {
|
||||
request_event_sources_irqs(np, ioei_interrupt, "IO_EVENT");
|
||||
pr_info("IBM I/O event interrupts enabled\n");
|
||||
of_node_put(np);
|
||||
} else {
|
||||
pr_err("io_event_irq: No ibm,io-events on system! "
|
||||
"IO Event interrupt disabled.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -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 */
|
||||
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 (unregister_slb_shadow(hard_smp_processor_id(), addr))
|
||||
printk("SLB shadow buffer deregistration of "
|
||||
"cpu %u (hw_cpu_id %d) failed\n",
|
||||
smp_processor_id(),
|
||||
hard_smp_processor_id());
|
||||
if (get_lppaca()->dtl_enable_mask) {
|
||||
ret = unregister_dtl(hwcpu);
|
||||
if (ret) {
|
||||
pr_err("WARNING: DTL deregistration for cpu "
|
||||
"%d (hw %d) failed with %d\n",
|
||||
cpu, hwcpu, ret);
|
||||
}
|
||||
}
|
||||
|
||||
addr = __pa(get_lppaca());
|
||||
if (unregister_vpa(hard_smp_processor_id(), addr)) {
|
||||
printk("VPA deregistration of cpu %u (hw_cpu_id %d) "
|
||||
"failed\n", smp_processor_id(),
|
||||
hard_smp_processor_id());
|
||||
ret = unregister_slb_shadow(hwcpu);
|
||||
if (ret) {
|
||||
pr_err("WARNING: SLB shadow buffer deregistration "
|
||||
"for cpu %d (hw %d) failed with %d\n",
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,9 +67,8 @@ void vpa_init(int cpu)
|
|||
ret = register_vpa(hwcpu, addr);
|
||||
|
||||
if (ret) {
|
||||
printk(KERN_ERR "WARNING: vpa_init: VPA registration for "
|
||||
"cpu %d (hw %d) of area %lx returns %ld\n",
|
||||
cpu, hwcpu, addr, ret);
|
||||
pr_err("WARNING: VPA registration for cpu %d (hw %d) of area "
|
||||
"%lx failed with %ld\n", cpu, hwcpu, addr, ret);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
|
@ -80,10 +79,9 @@ void vpa_init(int cpu)
|
|||
if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
|
||||
ret = register_slb_shadow(hwcpu, addr);
|
||||
if (ret)
|
||||
printk(KERN_ERR
|
||||
"WARNING: vpa_init: SLB shadow buffer "
|
||||
"registration for cpu %d (hw %d) of area %lx "
|
||||
"returns %ld\n", cpu, hwcpu, addr, ret);
|
||||
pr_err("WARNING: SLB shadow buffer registration for "
|
||||
"cpu %d (hw %d) of area %lx failed with %ld\n",
|
||||
cpu, hwcpu, addr, ret);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -100,8 +98,9 @@ void vpa_init(int cpu)
|
|||
dtl->enqueue_to_dispatch_time = DISPATCH_LOG_BYTES;
|
||||
ret = register_dtl(hwcpu, __pa(dtl));
|
||||
if (ret)
|
||||
pr_warn("DTL registration failed for cpu %d (%ld)\n",
|
||||
cpu, ret);
|
||||
pr_err("WARNING: DTL registration of cpu %d (hw %d) "
|
||||
"failed with %ld\n", smp_processor_id(),
|
||||
hwcpu, ret);
|
||||
lppaca_of(cpu).dtl_enable_mask = 2;
|
||||
}
|
||||
}
|
||||
|
@ -204,7 +203,7 @@ static void pSeries_lpar_hptab_clear(void)
|
|||
unsigned long ptel;
|
||||
} ptes[4];
|
||||
long lpar_rc;
|
||||
int i, j;
|
||||
unsigned long i, j;
|
||||
|
||||
/* Read in batches of 4,
|
||||
* invalidate only valid entries not in the VRMA
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
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)
|
||||
|
@ -63,9 +63,9 @@ static inline long register_vpa(unsigned long cpu, unsigned long 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)
|
||||
|
@ -73,9 +73,9 @@ static inline long register_slb_shadow(unsigned long cpu, unsigned long 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)
|
||||
|
|
|
@ -324,8 +324,9 @@ static int alloc_dispatch_logs(void)
|
|||
dtl->enqueue_to_dispatch_time = DISPATCH_LOG_BYTES;
|
||||
ret = register_dtl(hard_smp_processor_id(), __pa(dtl));
|
||||
if (ret)
|
||||
pr_warn("DTL registration failed for boot cpu %d (%d)\n",
|
||||
smp_processor_id(), ret);
|
||||
pr_err("WARNING: DTL registration of cpu %d (hw %d) failed "
|
||||
"with %d\n", smp_processor_id(),
|
||||
hard_smp_processor_id(), ret);
|
||||
get_paca()->lppaca_ptr->dtl_enable_mask = 2;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -655,8 +655,6 @@ struct 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,
|
||||
unsigned int sdr_offset,
|
||||
unsigned int mask,
|
||||
|
@ -688,6 +686,7 @@ static int __init ppc4xx_pciex_port_reset_sdr(struct ppc4xx_pciex_port *port)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void __init ppc4xx_pciex_check_link_sdr(struct ppc4xx_pciex_port *port)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_44x
|
||||
|
||||
/* Check various reset bits of the 440SPe PCIe core */
|
||||
static int __init ppc440spe_pciex_check_reset(struct device_node *np)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче