[PATCH 2/2] powerpc: Add an ePAPR compliant boot wrapper

2011-04-12 Thread Michael Ellerman
This is a first cut at making bootwrapper code which will
produce a zImage compliant with the requirements set down
by ePAPR.

This is a very simple bootwrapper, taking the device tree
blob supplied by the ePAPR boot program and passing it on
to the kernel. It builds on the earlier patch to build a
relocatable ET_DYN zImage to meet the other ePAPR image
requirements.

For good measure we have some paranoid checks which will
generate warnings if some of the ePAPR entry condition
guarantees are not met.

Signed-off-by: David Gibson 
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/Kconfig   |6 
 arch/powerpc/boot/Makefile |4 ++-
 arch/powerpc/boot/epapr.c  |   69 
 arch/powerpc/boot/wrapper  |4 ++
 4 files changed, 82 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index b6ff882..2629c21 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -193,6 +193,12 @@ config SYS_SUPPORTS_APM_EMULATION
default y if PMAC_APM_EMU
bool
 
+config EPAPR_BOOT
+   bool
+   help
+ Used to allow a board to specify it wants an ePAPR compliant wrapper.
+   default n
+
 config DEFAULT_UIMAGE
bool
help
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 8917816..0e2a152 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -69,7 +69,8 @@ src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \
fsl-soc.c mpc8xx.c pq2.c ugecon.c
 src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c 
holly.c \
-   cuboot-ebony.c cuboot-hotfoot.c treeboot-ebony.c prpmc2800.c \
+   cuboot-ebony.c cuboot-hotfoot.c epapr.c treeboot-ebony.c \
+   prpmc2800.c \
ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c \
cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \
@@ -182,6 +183,7 @@ image-$(CONFIG_PPC_HOLLY)   += dtbImage.holly
 image-$(CONFIG_PPC_PRPMC2800)  += dtbImage.prpmc2800
 image-$(CONFIG_PPC_ISERIES)+= zImage.iseries
 image-$(CONFIG_DEFAULT_UIMAGE) += uImage
+image-$(CONFIG_EPAPR_BOOT) += zImage.epapr
 
 #
 # Targets which embed a device tree blob
diff --git a/arch/powerpc/boot/epapr.c b/arch/powerpc/boot/epapr.c
new file mode 100644
index 000..8642c34
--- /dev/null
+++ b/arch/powerpc/boot/epapr.c
@@ -0,0 +1,69 @@
+/*
+ * Bootwrapper for ePAPR compliant firmwares
+ *
+ * Copyright 2010 David Gibson , IBM Corporation.
+ *
+ * Based on earlier bootwrappers by:
+ * (c) Benjamin Herrenschmidt , IBM Corp,\
+ *   and
+ * Scott Wood 
+ * Copyright (c) 2007 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include "ops.h"
+#include "stdio.h"
+#include "planetcore.h"
+#include "dcr.h"
+#include "4xx.h"
+#include "io.h"
+#include 
+
+BSS_STACK(4096);
+
+#define EPAPR_SMAGIC   0x65504150
+#define EPAPR_EMAGIC   0x45504150
+
+static unsigned epapr_magic;
+static unsigned long ima_size;
+static unsigned long fdt_addr;
+
+static void platform_fixups(void)
+{
+   if ((epapr_magic != EPAPR_EMAGIC)
+   && (epapr_magic != EPAPR_SMAGIC))
+   fatal("r6 contained 0x%08x instead of ePAPR magic number\n",
+ epapr_magic);
+
+   if (ima_size < (unsigned long)_end)
+   printf("WARNING: Image loaded outside IMA!"
+  " (_end=%p, ima_size=0x%lx)\n", _end, ima_size);
+   if (ima_size < fdt_addr)
+   printf("WARNING: Device tree address is outside IMA!"
+  "(fdt_addr=0x%lx, ima_size=0x%lx)\n", fdt_addr,
+  ima_size);
+   if (ima_size < fdt_addr + fdt_totalsize((void *)fdt_addr))
+   printf("WARNING: Device tree extends outside IMA!"
+  " (fdt_addr=0x%lx, size=0x%x, ima_size=0x%lx\n",
+  fdt_addr, fdt_totalsize((void *)fdt_addr), ima_size);
+}
+
+void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
+  unsigned long r6, unsigned long r7)
+{
+   epapr_magic = r6;
+   ima_size = r7;
+   fdt_addr = r3;
+
+   /* FIXME: we should process reserve entries */
+
+   simple_alloc_init(_end, ima_size - (unsigned long)_end, 32, 64);
+
+   fdt_init((void *)fdt_addr);
+
+   serial_console_init();
+   platform_ops.fixups = platform_fixups;
+}
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper
index fef5278..dfa29cb 100755
--- a/arch/powerpc/boot/wrapper
+++ b/arch/powerpc/boot/wrapper
@@ -247,6 +247,10 @@ gamecube|wii)
 treeboo

[PATCH 1/2] powerpc: Allow building the zImage wrapper as a relocatable ET_DYN

2011-04-12 Thread Michael Ellerman
This patch adds code, linker script and makefile support to allow
building the zImage wrapper around the kernel as a position independent
executable.  This results in an ET_DYN instead of an ET_EXEC ELF output
file, which can be loaded at any location by the firmware and will
process its own relocations to work correctly at the loaded address.

This is of interest particularly since the standard ePAPR image format
must be an ET_DYN (although this patch alone is not sufficient to
produce a fully ePAPR compliant boot image).

Note for now we don't enable building with -pie for anything.

Signed-off-by: Paul Mackerras 
Signed-off-by: David Gibson 
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/boot/crt0.S|  116 ++-
 arch/powerpc/boot/wrapper   |9 ++-
 arch/powerpc/boot/zImage.coff.lds.S |6 +-
 arch/powerpc/boot/zImage.lds.S  |   57 +++--
 4 files changed, 118 insertions(+), 70 deletions(-)

diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
index f1c4dfc..0f7428a 100644
--- a/arch/powerpc/boot/crt0.S
+++ b/arch/powerpc/boot/crt0.S
@@ -6,16 +6,28 @@
  * as published by the Free Software Foundation; either version
  * 2 of the License, or (at your option) any later version.
  *
- * NOTE: this code runs in 32 bit mode and is packaged as ELF32.
+ * NOTE: this code runs in 32 bit mode, is position-independent,
+ * and is packaged as ELF32.
  */
 
 #include "ppc_asm.h"
 
.text
-   /* a procedure descriptor used when booting this as a COFF file */
+   /* A procedure descriptor used when booting this as a COFF file.
+* When making COFF, this comes first in the link and we're
+* linked at 0x50.
+*/
.globl  _zimage_start_opd
 _zimage_start_opd:
-   .long   _zimage_start, 0, 0, 0
+   .long   0x50, 0, 0, 0
+
+p_start:   .long   _start
+p_etext:   .long   _etext
+p_bss_start:   .long   __bss_start
+p_end: .long   _end
+
+   .weak   _platform_stack_top
+p_pstack:  .long   _platform_stack_top
 
.weak   _zimage_start
.globl  _zimage_start
@@ -24,37 +36,65 @@ _zimage_start:
 _zimage_start_lib:
/* Work out the offset between the address we were linked at
   and the address where we're running. */
-   bl  1f
-1: mflrr0
-   lis r9,1b@ha
-   addir9,r9,1b@l
-   subf.   r0,r9,r0
-   beq 3f  /* if running at same address as linked */
+   bl  .+4
+p_base:mflrr10 /* r10 now points to runtime addr of 
p_base */
+   /* grab the link address of the dynamic section in r11 */
+   addis   r11,r10,(_GLOBAL_OFFSET_TABLE_-p_base)@ha
+   lwz r11,(_GLOBAL_OFFSET_TABLE_-p_base)@l(r11)
+   cmpwi   r11,0
+   beq 3f  /* if not linked -pie */
+   /* get the runtime address of the dynamic section in r12 */
+   .weak   __dynamic_start
+   addis   r12,r10,(__dynamic_start-p_base)@ha
+   addir12,r12,(__dynamic_start-p_base)@l
+   subfr11,r11,r12 /* runtime - linktime offset */
+
+   /* The dynamic section contains a series of tagged entries.
+* We need the RELA and RELACOUNT entries. */
+RELA = 7
+RELACOUNT = 0x6ff9
+   li  r9,0
+   li  r0,0
+9: lwz r8,0(r12)   /* get tag */
+   cmpwi   r8,0
+   beq 10f /* end of list */
+   cmpwi   r8,RELA
+   bne 11f
+   lwz r9,4(r12)   /* get RELA pointer in r9 */
+   b   12f
+11:addis   r8,r8,(-RELACOUNT)@ha
+   cmpwi   r8,RELACOUNT@l
+   bne 12f
+   lwz r0,4(r12)   /* get RELACOUNT value in r0 */
+12:addir12,r12,8
+   b   9b
 
-   /* The .got2 section contains a list of addresses, so add
-  the address offset onto each entry. */
-   lis r9,__got2_start@ha
-   addir9,r9,__got2_start@l
-   lis r8,__got2_end@ha
-   addir8,r8,__got2_end@l
-   subf.   r8,r9,r8
+   /* The relocation section contains a list of relocations.
+* We now do the R_PPC_RELATIVE ones, which point to words
+* which need to be initialized with addend + offset.
+* The R_PPC_RELATIVE ones come first and there are RELACOUNT
+* of them. */
+10:/* skip relocation if we don't have both */
+   cmpwi   r0,0
beq 3f
-   srwi.   r8,r8,2
-   mtctr   r8
-   add r9,r0,r9
-2: lwz r8,0(r9)
-   add r8,r8,r0
-   stw r8,0(r9)
-   addir9,r9,4
+   cmpwi   r9,0
+   beq 3f
+
+   add r9,r9,r11   /* Relocate RELA pointer */
+   mtctr   r0
+2: lbz r0,4+3(r9)  /* ELF32_R_INFO(reloc->r_info) */
+   cmpwi   r0,22   /* R_PPC_RELATIVE */
+   bne 3f
+   lwz r12,0(r9)   /* reloc->r_offset */
+   lwz r0,8(r9)/* reloc->r_addend */
+   a

[PATCH 2/2] powerpc: Fix slice state initialization for Book3E

2011-04-12 Thread Michael Ellerman
On Book3E, MMU_NO_CONTEXT != 0, but the slice_mm_new_context()
macro assumes that it is.  This means that the map of the
page sizes for each slice is always initialized to zeroes
(which happens to be 4k pages), rather than to the correct
default base page size value - which might be 64k.

This patch corrects the problem.

Signed-off-by: David Gibson 
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/include/asm/page_64.h |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/include/asm/page_64.h 
b/arch/powerpc/include/asm/page_64.h
index 932f88d..1cc558c 100644
--- a/arch/powerpc/include/asm/page_64.h
+++ b/arch/powerpc/include/asm/page_64.h
@@ -130,7 +130,7 @@ extern void slice_set_user_psize(struct mm_struct *mm, 
unsigned int psize);
 extern void slice_set_range_psize(struct mm_struct *mm, unsigned long start,
  unsigned long len, unsigned int psize);
 
-#define slice_mm_new_context(mm)   ((mm)->context.id == 0)
+#define slice_mm_new_context(mm)   ((mm)->context.id == MMU_NO_CONTEXT)
 
 #endif /* __ASSEMBLY__ */
 #else
-- 
1.7.1

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH 1/2] powerpc: Standardise on MMU_NO_CONTEXT

2011-04-12 Thread Michael Ellerman
Use MMU_NO_CONTEXT as the initialiser for mm_context.id on
nohash and hash64.

Signed-off-by: Michael Ellerman 
---
 arch/powerpc/include/asm/tlbflush.h  |2 ++
 arch/powerpc/mm/mmu_context_hash64.c |3 +--
 2 files changed, 3 insertions(+), 2 deletions(-)

v2: Updated to not break 40x.

diff --git a/arch/powerpc/include/asm/tlbflush.h 
b/arch/powerpc/include/asm/tlbflush.h
index d50a380..81143fc 100644
--- a/arch/powerpc/include/asm/tlbflush.h
+++ b/arch/powerpc/include/asm/tlbflush.h
@@ -79,6 +79,8 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm)
 
 #elif defined(CONFIG_PPC_STD_MMU_64)
 
+#define MMU_NO_CONTEXT 0
+
 /*
  * TLB flushing for 64-bit hash-MMU CPUs
  */
diff --git a/arch/powerpc/mm/mmu_context_hash64.c 
b/arch/powerpc/mm/mmu_context_hash64.c
index 2535828..c585944 100644
--- a/arch/powerpc/mm/mmu_context_hash64.c
+++ b/arch/powerpc/mm/mmu_context_hash64.c
@@ -31,7 +31,6 @@ static DEFINE_IDA(mmu_context_ida);
  * Each segment contains 2^28 bytes.  Each context maps 2^44 bytes,
  * so we can support 2^19-1 contexts (19 == 35 + 28 - 44).
  */
-#define NO_CONTEXT 0
 #define MAX_CONTEXT((1UL << 19) - 1)
 
 int __init_new_context(void)
@@ -95,5 +94,5 @@ void destroy_context(struct mm_struct *mm)
 {
__destroy_context(mm->context.id);
subpage_prot_free(mm);
-   mm->context.id = NO_CONTEXT;
+   mm->context.id = MMU_NO_CONTEXT;
 }
-- 
1.7.1

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


RE: Problem with mini-PCI-E slot on P2020RDB

2011-04-12 Thread Kushwaha Prabhakar-B32579
Hi Felix,

> -Original Message-
> From: linuxppc-dev-bounces+priyanka.jain=freescale@lists.ozlabs.org
> [mailto:linuxppc-dev-
> bounces+priyanka.jain=freescale@lists.ozlabs.org] On Behalf Of Felix
> Radensky
> Sent: Tuesday, April 12, 2011 10:24 AM
> To: Aggrwal Poonam-B10812
> Cc: linuxppc-...@ozlabs.org; Gupta Maneesh-B18878; Kushwaha Prabhakar-
> B32579
> Subject: Re: Problem with mini-PCI-E slot on P2020RDB
> 
> Hi Poonam
> 
> On 04/12/2011 07:05 AM, Aggrwal Poonam-B10812 wrote:
> > Hello Felix
> >
> > Please find some comments inline.
> >
> > Regards
> > Poonam
> >
> >> -Original Message-
> >> From: Kushwaha Prabhakar-B32579
> >> Sent: Tuesday, April 12, 2011 9:26 AM
> >> To: Aggrwal Poonam-B10812
> >> Subject: FW: Problem with mini-PCI-E slot on P2020RDB
> >>
> >>
> >>
> >> -Original Message-
> >> From: Felix Radensky [mailto:fe...@embedded-sol.com]
> >> Sent: Monday, April 11, 2011 7:16 PM
> >> To: Kushwaha Prabhakar-B32579
> >> Cc: Fabian Bertholm; Leon Woestenberg; linuxppc-...@ozlabs.org;
> >> Mahajan Vivek-B08308; Aggrwal Poonam-B10812; Gupta Maneesh-B18878
> >> Subject: Re: Problem with mini-PCI-E slot on P2020RDB
> >>
> >> Hi Prabhakar,
> >>
> >> On 04/11/2011 02:09 PM, Kushwaha Prabhakar-B32579 wrote:
> >>> Hi,
> >>>
> >>> Yes. It wil be applicable for all revisions.
> >>>
> >>> Regards,
> >>> Prabhakar
> >>>
> >> I'm sure this is applicable to all revisions, but it doesn't
> >> necessarily makes things work. The problem I've reported back in 2009
> >> still exists on P2020RDB revC, even if I use the latest u-boot and
> >> kernel and make device tree changes that you've suggested.
> >> I've attached the boot log.
> > As such there is no hardware fix related to this issue between RevC to
> RevD. The solution was a software patch to resolve the issue related to
> IRQ0.
> 
> Are you sure ? Please take a look at Freescale document titled
> "P1020E/P2020E RDB System Errata".
> There's errata CE10, IRQ0 held low. It is fixed in Rev D. Vivek Mahajan,
> who looked at the issue back in 2009, estimated that problem can be
> related to missing pull-up on IRQ0. This is exactly what is fixed in Rev
> D.
> 

We are looking into it and are in discussion with design team.

We will keep you posted for the same..

--Prabhakar



___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] powerpc: Standardise on MMU_NO_CONTEXT

2011-04-12 Thread Michael Ellerman
On Mon, 2011-04-11 at 16:35 +1000, Michael Ellerman wrote:
> Use MMU_NO_CONTEXT as the initialiser for mm_context.id on book3e
> and hash64.

This breaks 40x, new patch coming.

cheers



signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

[git pull] Please pull powerpc.git merge branch

2011-04-12 Thread Kumar Gala
The following changes since commit c60e65d7863620945d498a8ac60181077879599c:

  powerpc/pseries: Fix build without CONFIG_HOTPLUG_CPU (2011-04-05 16:22:11 
+1000)

are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc.git merge

Kumar Gala (2):
  powerpc/book3e: Fix CPU feature handling on 64-bit e5500
  powerpc/85xx: disable Suspend support if SMP enabled

Prabhakar Kushwaha (2):
  powerpc/85xx: Don't add disabled PCIe devices
  powerpc: Check device status before adding serial device

Scott Wood (1):
  powerpc/e500mc: Remove CPU_FTR_MAYBE_CAN_NAP/CPU_FTR_MAYBE_CAN_DOZE

 arch/powerpc/Kconfig|2 +-
 arch/powerpc/include/asm/cputable.h |   16 ++--
 arch/powerpc/kernel/cputable.c  |2 +-
 arch/powerpc/kernel/legacy_serial.c |8 +---
 arch/powerpc/sysdev/fsl_pci.c   |5 +
 5 files changed, 26 insertions(+), 7 deletions(-)
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


RE: [PATCH 0/1] ppc4xx: Fix PCIe scanning for the 460SX

2011-04-12 Thread Tirumala Marri
You originally submitted the support for 460ex. Can you chime in (and
review Ayman patch) please ?

[Marri] Ben sure I will review it and send you my feedback in couple of
days.
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [regression] 2.6.39-rc[1-3] fail to boot on G5 PowerMac

2011-04-12 Thread Benjamin Herrenschmidt

> > Finally I tried using g5_defconfig with 2.6.39-rc3.  First boot
> > it did get to /sbin/init, but udev init took much longer than
> > normal and threw errors.  After a warm reboot the same kernel
> > hung as usual, this time before framebuffer init.
> > 
> > 2.6.38 works just fine.
> 
> Hrm, that must be new, I remember testing something around -rc1 on a
> similar machine and it worked fine. I'll see if I can find something
> out.

Ok so on a PowerMac7,3 here (dual 2.5Ghz and mostly same HW or at least
very similar) I can't reproduce your problem with a g5_defconfig.

Your config doesn't work well for me (I don't do modules, I netboot),
but after adding a few things to it, it seems to work fine as well. I
added radeonfb and the radeon DRM (not KMS) and I added eventfd, timerfd
and input events.

So I'm afraid I'm going to need you to bisect that one to find out what
exact change caused the breakage for you.

Cheers,
Ben.

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [regression] 2.6.39-rc[1-3] fail to boot on G5 PowerMac

2011-04-12 Thread Benjamin Herrenschmidt
On Tue, 2011-04-12 at 19:30 +0200, Mikael Pettersson wrote:
> I'm unable to boot any post-2.6.38 kernel on my G5 (PowerMac7,2
> with dual 1.8GHz processors).  Basically the kernel hangs at varying
> points before /sbin/init is started, sometimes before and sometimes
> after the framebuffer has taken over the console.  There are no visible
> errors on the console, only a hang.  Sorry, got no serial console
> set up yet.  My 2.6.39-rc3 .config is attached below.
> 
> Finally I tried using g5_defconfig with 2.6.39-rc3.  First boot
> it did get to /sbin/init, but udev init took much longer than
> normal and threw errors.  After a warm reboot the same kernel
> hung as usual, this time before framebuffer init.
> 
> 2.6.38 works just fine.

Hrm, that must be new, I remember testing something around -rc1 on a
similar machine and it worked fine. I'll see if I can find something
out.

Thanks !

Cheers,
Ben.

> /Mikael
> 
> #
> # Automatically generated make config: don't edit
> #
> CONFIG_PPC64=y
> 
> #
> # Processor support
> #
> CONFIG_PPC_BOOK3S_64=y
> # CONFIG_PPC_BOOK3E_64 is not set
> CONFIG_PPC_BOOK3S=y
> CONFIG_POWER4_ONLY=y
> CONFIG_POWER4=y
> # CONFIG_TUNE_CELL is not set
> CONFIG_PPC_FPU=y
> CONFIG_ALTIVEC=y
> # CONFIG_VSX is not set
> CONFIG_PPC_STD_MMU=y
> CONFIG_PPC_STD_MMU_64=y
> CONFIG_PPC_MM_SLICES=y
> CONFIG_VIRT_CPU_ACCOUNTING=y
> CONFIG_PPC_HAVE_PMU_SUPPORT=y
> CONFIG_SMP=y
> CONFIG_NR_CPUS=2
> CONFIG_64BIT=y
> CONFIG_WORD_SIZE=64
> CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
> CONFIG_ARCH_DMA_ADDR_T_64BIT=y
> CONFIG_MMU=y
> CONFIG_GENERIC_CMOS_UPDATE=y
> CONFIG_GENERIC_TIME_VSYSCALL=y
> CONFIG_GENERIC_CLOCKEVENTS=y
> CONFIG_HAVE_SETUP_PER_CPU_AREA=y
> CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
> CONFIG_NR_IRQS=256
> CONFIG_STACKTRACE_SUPPORT=y
> CONFIG_HAVE_LATENCYTOP_SUPPORT=y
> CONFIG_TRACE_IRQFLAGS_SUPPORT=y
> CONFIG_LOCKDEP_SUPPORT=y
> CONFIG_RWSEM_XCHGADD_ALGORITHM=y
> CONFIG_ARCH_HAS_ILOG2_U32=y
> CONFIG_ARCH_HAS_ILOG2_U64=y
> CONFIG_GENERIC_HWEIGHT=y
> CONFIG_GENERIC_FIND_NEXT_BIT=y
> CONFIG_GENERIC_FIND_BIT_LE=y
> CONFIG_ARCH_NO_VIRT_TO_BUS=y
> CONFIG_PPC=y
> CONFIG_EARLY_PRINTK=y
> CONFIG_COMPAT=y
> CONFIG_SYSVIPC_COMPAT=y
> CONFIG_SCHED_OMIT_FRAME_POINTER=y
> CONFIG_ARCH_MAY_HAVE_PC_FDC=y
> CONFIG_PPC_OF=y
> # CONFIG_PPC_UDBG_16550 is not set
> CONFIG_GENERIC_TBSYNC=y
> CONFIG_AUDIT_ARCH=y
> CONFIG_GENERIC_BUG=y
> # CONFIG_DEFAULT_UIMAGE is not set
> CONFIG_ARCH_HIBERNATION_POSSIBLE=y
> CONFIG_ARCH_SUSPEND_POSSIBLE=y
> # CONFIG_PPC_DCR_NATIVE is not set
> # CONFIG_PPC_DCR_MMIO is not set
> # CONFIG_PPC_OF_PLATFORM_PCI is not set
> CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
> CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
> CONFIG_CONSTRUCTORS=y
> CONFIG_HAVE_IRQ_WORK=y
> 
> #
> # General setup
> #
> CONFIG_EXPERIMENTAL=y
> CONFIG_INIT_ENV_ARG_LIMIT=32
> CONFIG_CROSS_COMPILE=""
> CONFIG_LOCALVERSION=""
> # CONFIG_LOCALVERSION_AUTO is not set
> CONFIG_SWAP=y
> CONFIG_SYSVIPC=y
> CONFIG_SYSVIPC_SYSCTL=y
> # CONFIG_POSIX_MQUEUE is not set
> # CONFIG_BSD_PROCESS_ACCT is not set
> # CONFIG_FHANDLE is not set
> # CONFIG_TASKSTATS is not set
> # CONFIG_AUDIT is not set
> CONFIG_HAVE_GENERIC_HARDIRQS=y
> 
> #
> # IRQ subsystem
> #
> CONFIG_GENERIC_HARDIRQS=y
> CONFIG_HAVE_SPARSE_IRQ=y
> CONFIG_GENERIC_IRQ_SHOW=y
> CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
> # CONFIG_SPARSE_IRQ is not set
> 
> #
> # RCU Subsystem
> #
> CONFIG_TREE_RCU=y
> # CONFIG_PREEMPT_RCU is not set
> # CONFIG_RCU_TRACE is not set
> CONFIG_RCU_FANOUT=64
> # CONFIG_RCU_FANOUT_EXACT is not set
> # CONFIG_RCU_FAST_NO_HZ is not set
> # CONFIG_TREE_RCU_TRACE is not set
> # CONFIG_IKCONFIG is not set
> CONFIG_LOG_BUF_SHIFT=17
> # CONFIG_NAMESPACES is not set
> # CONFIG_SCHED_AUTOGROUP is not set
> # CONFIG_SYSFS_DEPRECATED is not set
> # CONFIG_RELAY is not set
> CONFIG_BLK_DEV_INITRD=y
> CONFIG_INITRAMFS_SOURCE=""
> CONFIG_RD_GZIP=y
> # CONFIG_RD_BZIP2 is not set
> # CONFIG_RD_LZMA is not set
> # CONFIG_RD_XZ is not set
> # CONFIG_RD_LZO is not set
> CONFIG_CC_OPTIMIZE_FOR_SIZE=y
> CONFIG_SYSCTL=y
> CONFIG_ANON_INODES=y
> CONFIG_EXPERT=y
> CONFIG_EMBEDDED=y
> CONFIG_SYSCTL_SYSCALL=y
> CONFIG_KALLSYMS=y
> # CONFIG_KALLSYMS_ALL is not set
> # CONFIG_KALLSYMS_EXTRA_PASS is not set
> CONFIG_HOTPLUG=y
> CONFIG_PRINTK=y
> CONFIG_BUG=y
> CONFIG_ELF_CORE=y
> CONFIG_BASE_FULL=y
> CONFIG_FUTEX=y
> CONFIG_EPOLL=y
> CONFIG_SIGNALFD=y
> # CONFIG_TIMERFD is not set
> # CONFIG_EVENTFD is not set
> CONFIG_SHMEM=y
> # CONFIG_AIO is not set
> CONFIG_HAVE_PERF_EVENTS=y
> 
> #
> # Kernel Performance Events And Counters
> #
> # CONFIG_PERF_EVENTS is not set
> # CONFIG_PERF_COUNTERS is not set
> # CONFIG_VM_EVENT_COUNTERS is not set
> CONFIG_PCI_QUIRKS=y
> CONFIG_SLUB_DEBUG=y
> # CONFIG_COMPAT_BRK is not set
> # CONFIG_SLAB is not set
> CONFIG_SLUB=y
> # CONFIG_SLOB is not set
> # CONFIG_PROFILING is not set
> CONFIG_HAVE_OPROFILE=y
> # CONFIG_KPROBES is not set
> CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
> CONFIG_HAVE_SYSCALL_WRAPPERS=y
> CONFIG_HAVE_IOREMAP_PROT=y
>

Re: [PATCH RESENT] net: ps3_gelic: convert to hw_features

2011-04-12 Thread David Miller
From: Michał Mirosław 
Date: Sun, 10 Apr 2011 16:49:55 +0200 (CEST)

> Signed-off-by: Michał Mirosław 

Applied.
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [E1000-devel] [PATCH] driver/e1000e: Fix default interrupt mode select

2011-04-12 Thread Jeff Kirsher
On Mon, 2011-04-11 at 21:56 -0700, Prabhakar Kushwaha wrote:
> From: Prabhakar 
> 
> The Intel e1000 device driver defaults to MSI interrupt mode, even if
> MSI
> support is not enabled
> 
> Signed-off-by: Jin Qing 
> Signed-off-by: Prabhakar Kushwaha 
> ---
>  Based upon
> git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git(branch 
> master)
> 
>  added  netdev mail-list and e1000 mail-list & maintainer
> 
>  drivers/net/e1000e/param.c |4 
>  1 files changed, 4 insertions(+), 0 deletions(-) 

Thanks for the patch, I have added it to my queue of e1000e patches.


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [PATCH] driver/e1000e: Fix default interrupt mode select

2011-04-12 Thread Jeff Kirsher
On Tue, 2011-04-12 at 14:27 -0700, David Miller wrote:
> From: Prabhakar Kushwaha 
> Date: Tue, 12 Apr 2011 10:26:03 +0530
> 
> > From: Prabhakar 
> > 
> > The Intel e1000 device driver defaults to MSI interrupt mode, even if MSI
> > support is not enabled
> > 
> > Signed-off-by: Jin Qing 
> > Signed-off-by: Prabhakar Kushwaha 
> > ---
> >  Based upon 
> > git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git(branch 
> > master)
> > 
> >  added  netdev mail-list and e1000 mail-list & maintainer
> 
> Intel folks, you got this?

Yes.  Thanks Dave.


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [PATCH] driver/e1000e: Fix default interrupt mode select

2011-04-12 Thread David Miller
From: Prabhakar Kushwaha 
Date: Tue, 12 Apr 2011 10:26:03 +0530

> From: Prabhakar 
> 
> The Intel e1000 device driver defaults to MSI interrupt mode, even if MSI
> support is not enabled
> 
> Signed-off-by: Jin Qing 
> Signed-off-by: Prabhakar Kushwaha 
> ---
>  Based upon 
> git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git(branch 
> master)
> 
>  added  netdev mail-list and e1000 mail-list & maintainer

Intel folks, you got this?
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [regression] 2.6.39-rc[1-3] fail to boot on G5 PowerMac

2011-04-12 Thread kevin diggs
Hi,

Uh Oh. Are we gettin' booted (no pun intended)?

kevin
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[regression] 2.6.39-rc[1-3] fail to boot on G5 PowerMac

2011-04-12 Thread Mikael Pettersson
I'm unable to boot any post-2.6.38 kernel on my G5 (PowerMac7,2
with dual 1.8GHz processors).  Basically the kernel hangs at varying
points before /sbin/init is started, sometimes before and sometimes
after the framebuffer has taken over the console.  There are no visible
errors on the console, only a hang.  Sorry, got no serial console
set up yet.  My 2.6.39-rc3 .config is attached below.

Finally I tried using g5_defconfig with 2.6.39-rc3.  First boot
it did get to /sbin/init, but udev init took much longer than
normal and threw errors.  After a warm reboot the same kernel
hung as usual, this time before framebuffer init.

2.6.38 works just fine.

/Mikael

#
# Automatically generated make config: don't edit
#
CONFIG_PPC64=y

#
# Processor support
#
CONFIG_PPC_BOOK3S_64=y
# CONFIG_PPC_BOOK3E_64 is not set
CONFIG_PPC_BOOK3S=y
CONFIG_POWER4_ONLY=y
CONFIG_POWER4=y
# CONFIG_TUNE_CELL is not set
CONFIG_PPC_FPU=y
CONFIG_ALTIVEC=y
# CONFIG_VSX is not set
CONFIG_PPC_STD_MMU=y
CONFIG_PPC_STD_MMU_64=y
CONFIG_PPC_MM_SLICES=y
CONFIG_VIRT_CPU_ACCOUNTING=y
CONFIG_PPC_HAVE_PMU_SUPPORT=y
CONFIG_SMP=y
CONFIG_NR_CPUS=2
CONFIG_64BIT=y
CONFIG_WORD_SIZE=64
CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_MMU=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NR_IRQS=256
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_ARCH_HAS_ILOG2_U32=y
CONFIG_ARCH_HAS_ILOG2_U64=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
CONFIG_GENERIC_FIND_BIT_LE=y
CONFIG_ARCH_NO_VIRT_TO_BUS=y
CONFIG_PPC=y
CONFIG_EARLY_PRINTK=y
CONFIG_COMPAT=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_PPC_OF=y
# CONFIG_PPC_UDBG_16550 is not set
CONFIG_GENERIC_TBSYNC=y
CONFIG_AUDIT_ARCH=y
CONFIG_GENERIC_BUG=y
# CONFIG_DEFAULT_UIMAGE is not set
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
# CONFIG_PPC_DCR_NATIVE is not set
# CONFIG_PPC_DCR_MMIO is not set
# CONFIG_PPC_OF_PLATFORM_PCI is not set
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_CONSTRUCTORS=y
CONFIG_HAVE_IRQ_WORK=y

#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_FHANDLE is not set
# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set
CONFIG_HAVE_GENERIC_HARDIRQS=y

#
# IRQ subsystem
#
CONFIG_GENERIC_HARDIRQS=y
CONFIG_HAVE_SPARSE_IRQ=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
# CONFIG_SPARSE_IRQ is not set

#
# RCU Subsystem
#
CONFIG_TREE_RCU=y
# CONFIG_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=64
# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_RCU_FAST_NO_HZ is not set
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=17
# CONFIG_NAMESPACES is not set
# CONFIG_SCHED_AUTOGROUP is not set
# CONFIG_SYSFS_DEPRECATED is not set
# CONFIG_RELAY is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
# CONFIG_RD_BZIP2 is not set
# CONFIG_RD_LZMA is not set
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_EXPERT=y
CONFIG_EMBEDDED=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
# CONFIG_TIMERFD is not set
# CONFIG_EVENTFD is not set
CONFIG_SHMEM=y
# CONFIG_AIO is not set
CONFIG_HAVE_PERF_EVENTS=y

#
# Kernel Performance Events And Counters
#
# CONFIG_PERF_EVENTS is not set
# CONFIG_PERF_COUNTERS is not set
# CONFIG_VM_EVENT_COUNTERS is not set
CONFIG_PCI_QUIRKS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
# CONFIG_PROFILING is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_HAVE_SYSCALL_WRAPPERS=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_ATTRS=y
CONFIG_USE_GENERIC_SMP_HELPERS=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_DMA_API_DEBUG=y

#
# GCOV-based kernel profiling
#
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
# CONFIG_BLK_DEV_BS

Re: Revert 737a3bb9416ce2a7c7a4170852473a4fcc9c67e8 ?

2011-04-12 Thread Michel Dänzer
On Die, 2011-04-12 at 14:00 +0200, Gabriel Paubert wrote:
> On Tue, Apr 12, 2011 at 01:46:10PM +0200, Michel Dänzer wrote:
> > > 
> > > With no_wb=1 the driver goes a bit further but the X server ends
> > > up in an infinite ioctl loop and the logs are: 
> > 
> > Which ioctl does it loop on? Please provide the Xorg.0.log file as well.
> 
> From memory, the code was 0x64, which is DRM_RADEON_GEM_WAIT_IDLE.

Note that it's normal for this ioctl to be called every time before the
GPU accessible pixmap memory is accessed by the CPU. Unless the ioctl
always returns an error, this may not indicate a problem on its own. 


> The Xorg.0.log from the previous boot is attached.

I don't see any obvious problems in it. Can you describe the symptoms of
the problem you're having with X a bit more?

One thing I notice is that the X server/driver are rather oldish. Maybe
you can try newer versions from testing, sid or even experimental to see
if that makes any difference. 


-- 
Earthling Michel Dänzer   |http://www.vmware.com
Libre software enthusiast |  Debian, X and DRI developer
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: Where is CONFIG_BOOT_LOAD ?

2011-04-12 Thread Joachim Förster

On 04/08/2011 02:58 PM, Guillaume Dargaud wrote:

Isn't that blackfin specific?


So how do you change the loading address of the PowerPC kernel from its default 
0x40 address ?


Note that the default 0x400... is the link address of the zImage wrapper 
rather than the one of THE kernel.


Currently the link address seems to be hard-coded into
arch/powerpc/boot/wrapper
(a shell script). Since long ago I'm wondering why the maintainers did 
that. But I guess there is a reason, because it wasn't that way in the 
old arch/ppc days ;-) ...


Is configuring the zImage-piggy-back-loader through menuconfig & co evil?

  Joachim
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: Revert 737a3bb9416ce2a7c7a4170852473a4fcc9c67e8 ?

2011-04-12 Thread Gabriel Paubert
On Tue, Apr 12, 2011 at 01:46:10PM +0200, Michel Dänzer wrote:
> > 
> > With no_wb=1 the driver goes a bit further but the X server ends
> > up in an infinite ioctl loop and the logs are: 
> 
> Which ioctl does it loop on? Please provide the Xorg.0.log file as well.

>From memory, the code was 0x64, which is DRM_RADEON_GEM_WAIT_IDLE.

The Xorg.0.log from the previous boot is attached.

Gabriel


Xorg.0.log.old
Description: application/trash
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: Revert 737a3bb9416ce2a7c7a4170852473a4fcc9c67e8 ?

2011-04-12 Thread Michel Dänzer
On Die, 2011-04-12 at 13:30 +0200, Gabriel Paubert wrote: 
> 
> On Mon, Apr 11, 2011 at 05:32:43PM +0200, Michel Dänzer wrote:
> > 
> > Have you ruled out any MSI related problems? I think the IRQ not working
> > could explain the symptoms...
> 
> Booting with MSI disabled does not change anything. Actually on this
> machine the Ethernet (tigon3) uses MSI and everything is fine. OTOH,
> on my home PC (dual code Athlon64 4 1/2 years old), MSI has never worked.

Okay, the fact no_wb helps probably rules out an IRQ problem anyway.


> > Make sure this line changes to 'WB disabled' with no_wb=1. There's a
> > writeback endianness bug with modeset=1, see
> > http://lists.freedesktop.org/archives/dri-devel/2011-April/009960.html .
> > 
> 
> With no_wb=1 the driver goes a bit further but the X server ends
> up in an infinite ioctl loop and the logs are: 

Which ioctl does it loop on? Please provide the Xorg.0.log file as well.


> kernel: [drm] radeon kernel modesetting enabled.
> kernel: checking generic (c000 14) vs hw (c000 1000)
> kernel: fb: conflicting fb hw usage radeondrmfb vs OFfb vga,Displa - removing 
> generic driver
> kernel: [drm] initializing kernel modesetting (RV530 0x1002:0x71C7).
> kernel: radeon :f1:00.0: Using 64-bit DMA iommu bypass
> kernel: [drm] register mmio base: 0xE800
> kernel: [drm] register mmio size: 65536
> kernel: radeon :f1:00.0: Invalid ROM contents
> kernel: ATOM BIOS: X1650PRO
> kernel: [drm] Generation 2 PCI interface, using max accessible memory
> kernel: radeon :f1:00.0: VRAM: 512M 0x - 
> 0x1FFF (512M used)
> kernel: radeon :f1:00.0: GTT: 512M 0x2000 - 0x3FFF
> kernel: [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
> kernel: [drm] Driver supports precise vblank timestamp query.
> kernel: [drm] radeon: irq initialized.
> kernel: [drm] Detected VRAM RAM=512M, BAR=256M
> kernel: [drm] RAM width 128bits DDR
> kernel: [TTM] Zone  kernel: Available graphics memory: 1003018 kiB.
> kernel: [TTM] Initializing pool allocator.
> kernel: [drm] radeon: 512M of VRAM memory ready
> kernel: [drm] radeon: 512M of GTT memory ready.
> kernel: [drm] GART: num cpu pages 131072, num gpu pages 131072
> kernel: [drm] radeon: 1 quad pipes, 2 z pipes initialized.
> kernel: [drm] PCIE GART of 512M enabled (table at 0x0004).
> kernel: radeon :f1:00.0: WB disabled
> kernel: [drm] Loading R500 Microcode
> kernel: [drm] radeon: ring at 0x20001000
> kernel: [drm] ring test succeeded in 6 usecs
> kernel: [drm] radeon: ib pool ready.
> kernel: [drm] ib test succeeded in 0 usecs
> kernel: [drm] Radeon Display Connectors
> kernel: [drm] Connector 0:
> kernel: [drm]   DVI-I
> kernel: [drm]   HPD1
> kernel: [drm]   DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c
> kernel: [drm]   Encoders:
> kernel: [drm] CRT1: INTERNAL_KLDSCP_DAC1
> kernel: [drm] DFP1: INTERNAL_KLDSCP_TMDS1
> kernel: [drm] Connector 1:
> kernel: [drm]   S-video
> kernel: [drm]   Encoders:
> kernel: [drm] TV1: INTERNAL_KLDSCP_DAC2
> kernel: [drm] Connector 2:
> kernel: [drm]   DVI-I
> kernel: [drm]   HPD2
> kernel: [drm]   DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58 0x7e5c 0x7e5c
> kernel: [drm]   Encoders:
> kernel: [drm] CRT2: INTERNAL_KLDSCP_DAC2
> kernel: [drm] DFP3: INTERNAL_LVTM1
> kernel: [drm] Possible lm63 thermal controller at 0x4c
> kernel: [drm] fb mappable at 0xC00C
> kernel: [drm] vram apper at 0xC000
> kernel: [drm] size 9216000
> kernel: [drm] fb depth is 24
> kernel: [drm]pitch is 7680
> kernel: checking generic (c000 14) vs hw (c000 1000)
> kernel: fb: conflicting fb hw usage radeondrmfb vs OFfb vga,Displa - removing 
> generic driver
> kernel: fb1: radeondrmfb frame buffer device

Hmm, I think this should say fb0, but that should only matter for
console, not X.

> kernel: drm: registered panic notifier
> kernel: [drm] Initialized radeon 2.8.0 20080528 for :f1:00.0 on minor 0
> kernel: [drm:drm_mode_getfb] *ERROR* invalid framebuffer id

BTW, if your kernel contains commit
69a07f0b117a40fcc1a479358d8e1f41793617f2, can you try if reverting that
helps?


-- 
Earthling Michel Dänzer   |http://www.vmware.com
Libre software enthusiast |  Debian, X and DRI developer
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: Revert 737a3bb9416ce2a7c7a4170852473a4fcc9c67e8 ?

2011-04-12 Thread Gabriel Paubert
Hi Micel,

On Mon, Apr 11, 2011 at 05:32:43PM +0200, Michel Dänzer wrote:
> [ Adding the dri-devel list ]
> 
> Have you ruled out any MSI related problems? I think the IRQ not working
> could explain the symptoms...

Booting with MSI disabled does not change anything. Actually on this
machine the Ethernet (tigon3) uses MSI and everything is fine. OTOH,
on my home PC (dual code Athlon64 4 1/2 years old), MSI has never worked.

> Make sure this line changes to 'WB disabled' with no_wb=1. There's a
> writeback endianness bug with modeset=1, see
> http://lists.freedesktop.org/archives/dri-devel/2011-April/009960.html .
> 

With no_wb=1 the driver goes a bit further but the X server ends
up in an infinite ioctl loop and the logs are: 

kernel: [drm] radeon kernel modesetting enabled.
kernel: checking generic (c000 14) vs hw (c000 1000)
kernel: fb: conflicting fb hw usage radeondrmfb vs OFfb vga,Displa - removing 
generic driver
kernel: [drm] initializing kernel modesetting (RV530 0x1002:0x71C7).
kernel: radeon :f1:00.0: Using 64-bit DMA iommu bypass
kernel: [drm] register mmio base: 0xE800
kernel: [drm] register mmio size: 65536
kernel: radeon :f1:00.0: Invalid ROM contents
kernel: ATOM BIOS: X1650PRO
kernel: [drm] Generation 2 PCI interface, using max accessible memory
kernel: radeon :f1:00.0: VRAM: 512M 0x - 0x1FFF 
(512M used)
kernel: radeon :f1:00.0: GTT: 512M 0x2000 - 0x3FFF
kernel: [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
kernel: [drm] Driver supports precise vblank timestamp query.
kernel: [drm] radeon: irq initialized.
kernel: [drm] Detected VRAM RAM=512M, BAR=256M
kernel: [drm] RAM width 128bits DDR
kernel: [TTM] Zone  kernel: Available graphics memory: 1003018 kiB.
kernel: [TTM] Initializing pool allocator.
kernel: [drm] radeon: 512M of VRAM memory ready
kernel: [drm] radeon: 512M of GTT memory ready.
kernel: [drm] GART: num cpu pages 131072, num gpu pages 131072
kernel: [drm] radeon: 1 quad pipes, 2 z pipes initialized.
kernel: [drm] PCIE GART of 512M enabled (table at 0x0004).
kernel: radeon :f1:00.0: WB disabled
kernel: [drm] Loading R500 Microcode
kernel: [drm] radeon: ring at 0x20001000
kernel: [drm] ring test succeeded in 6 usecs
kernel: [drm] radeon: ib pool ready.
kernel: [drm] ib test succeeded in 0 usecs
kernel: [drm] Radeon Display Connectors
kernel: [drm] Connector 0:
kernel: [drm]   DVI-I
kernel: [drm]   HPD1
kernel: [drm]   DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c
kernel: [drm]   Encoders:
kernel: [drm] CRT1: INTERNAL_KLDSCP_DAC1
kernel: [drm] DFP1: INTERNAL_KLDSCP_TMDS1
kernel: [drm] Connector 1:
kernel: [drm]   S-video
kernel: [drm]   Encoders:
kernel: [drm] TV1: INTERNAL_KLDSCP_DAC2
kernel: [drm] Connector 2:
kernel: [drm]   DVI-I
kernel: [drm]   HPD2
kernel: [drm]   DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58 0x7e5c 0x7e5c
kernel: [drm]   Encoders:
kernel: [drm] CRT2: INTERNAL_KLDSCP_DAC2
kernel: [drm] DFP3: INTERNAL_LVTM1
kernel: [drm] Possible lm63 thermal controller at 0x4c
kernel: [drm] fb mappable at 0xC00C
kernel: [drm] vram apper at 0xC000
kernel: [drm] size 9216000
kernel: [drm] fb depth is 24
kernel: [drm]pitch is 7680
kernel: checking generic (c000 14) vs hw (c000 1000)
kernel: fb: conflicting fb hw usage radeondrmfb vs OFfb vga,Displa - removing 
generic driver
kernel: fb1: radeondrmfb frame buffer device
kernel: drm: registered panic notifier
kernel: [drm] Initialized radeon 2.8.0 20080528 for :f1:00.0 on minor 0
kernel: [drm:drm_mode_getfb] *ERROR* invalid framebuffer id

There is only one display connected and it is to the first DVI connector, BTW.

Regards,
Gabriel
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH] powerpc/85xx: disable Suspend support if SMP enabled

2011-04-12 Thread Kumar Gala
We currently dont have CPU Hotplug support working on 85xx so we need to
disable Suspsend support as it will force enabling of CPU Hotplug.

arch/powerpc/kernel/built-in.o: In function `cpu_die': 
arch/powerpc/kernel/smp.c:702: undefined reference to `start_secondary_resume'
make: *** [.tmp_vmlinux1] Error 1

Signed-off-by: Kumar Gala 
---
 arch/powerpc/Kconfig |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index b6ff882..8f4d50b 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -209,7 +209,7 @@ config ARCH_HIBERNATION_POSSIBLE
 config ARCH_SUSPEND_POSSIBLE
def_bool y
depends on ADB_PMU || PPC_EFIKA || PPC_LITE5200 || PPC_83xx || \
-  PPC_85xx || PPC_86xx || PPC_PSERIES || 44x || 40x
+  (PPC_85xx && !SMP) || PPC_86xx || PPC_PSERIES || 44x || 40x
 
 config PPC_DCR_NATIVE
bool
-- 
1.7.3.4

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH] powerpc: smp_ops->kick_cpu() should be able to fail

2011-04-12 Thread Michael Ellerman
When we start a cpu we use smp_ops->kick_cpu(), which currently
returns void, it should be able to fail. Convert it to return
int, and update all uses.

Convert all the current error cases to return -ENOENT, which is
what would eventually be returned by __cpu_up() currently when
it doesn't detect the cpu as coming up in time.

Signed-off-by: Michael Ellerman 
---
 arch/powerpc/include/asm/machdep.h|2 +-
 arch/powerpc/include/asm/smp.h|2 +-
 arch/powerpc/kernel/smp.c |   10 --
 arch/powerpc/platforms/44x/iss4xx.c   |6 --
 arch/powerpc/platforms/85xx/smp.c |6 --
 arch/powerpc/platforms/86xx/mpc86xx_smp.c |6 --
 arch/powerpc/platforms/cell/beat_smp.c|5 ++---
 arch/powerpc/platforms/cell/smp.c |6 --
 arch/powerpc/platforms/chrp/smp.c |4 +++-
 arch/powerpc/platforms/iseries/smp.c  |6 --
 arch/powerpc/platforms/powermac/smp.c |   10 +++---
 arch/powerpc/platforms/pseries/smp.c  |6 --
 12 files changed, 46 insertions(+), 23 deletions(-)

diff --git a/arch/powerpc/include/asm/machdep.h 
b/arch/powerpc/include/asm/machdep.h
index 493dbb3..c6345ac 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -33,7 +33,7 @@ struct kimage;
 struct smp_ops_t {
void  (*message_pass)(int target, int msg);
int   (*probe)(void);
-   void  (*kick_cpu)(int nr);
+   int   (*kick_cpu)(int nr);
void  (*setup_cpu)(int nr);
void  (*bringup_done)(void);
void  (*take_timebase)(void);
diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h
index bb4c033..5087349 100644
--- a/arch/powerpc/include/asm/smp.h
+++ b/arch/powerpc/include/asm/smp.h
@@ -150,7 +150,7 @@ extern int smt_enabled_at_boot;
 
 extern int smp_mpic_probe(void);
 extern void smp_mpic_setup_cpu(int cpu);
-extern void smp_generic_kick_cpu(int nr);
+extern int smp_generic_kick_cpu(int nr);
 
 extern void smp_generic_give_timebase(void);
 extern void smp_generic_take_timebase(void);
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index cbdbb14..b6083f4 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -95,7 +95,7 @@ int smt_enabled_at_boot = 1;
 static void (*crash_ipi_function_ptr)(struct pt_regs *) = NULL;
 
 #ifdef CONFIG_PPC64
-void __devinit smp_generic_kick_cpu(int nr)
+int __devinit smp_generic_kick_cpu(int nr)
 {
BUG_ON(nr < 0 || nr >= NR_CPUS);
 
@@ -106,6 +106,8 @@ void __devinit smp_generic_kick_cpu(int nr)
 */
paca[nr].cpu_start = 1;
smp_mb();
+
+   return 0;
 }
 #endif
 
@@ -434,7 +436,11 @@ int __cpuinit __cpu_up(unsigned int cpu)
 
/* wake up cpus */
DBG("smp: kicking cpu %d\n", cpu);
-   smp_ops->kick_cpu(cpu);
+   rc = smp_ops->kick_cpu(cpu);
+   if (rc) {
+   pr_err("smp: failed starting cpu %d (rc %d)\n", cpu, rc);
+   return rc;
+   }
 
/*
 * wait to see if the cpu made a callin (is actually up).
diff --git a/arch/powerpc/platforms/44x/iss4xx.c 
b/arch/powerpc/platforms/44x/iss4xx.c
index aa46e9d..19395f1 100644
--- a/arch/powerpc/platforms/44x/iss4xx.c
+++ b/arch/powerpc/platforms/44x/iss4xx.c
@@ -87,7 +87,7 @@ static void __cpuinit smp_iss4xx_setup_cpu(int cpu)
mpic_setup_this_cpu();
 }
 
-static void __cpuinit smp_iss4xx_kick_cpu(int cpu)
+static int __cpuinit smp_iss4xx_kick_cpu(int cpu)
 {
struct device_node *cpunode = of_get_cpu_node(cpu, NULL);
const u64 *spin_table_addr_prop;
@@ -104,7 +104,7 @@ static void __cpuinit smp_iss4xx_kick_cpu(int cpu)
   NULL);
if (spin_table_addr_prop == NULL) {
pr_err("CPU%d: Can't start, missing cpu-release-addr !\n", cpu);
-   return;
+   return -ENOENT;
}
 
/* Assume it's mapped as part of the linear mapping. This is a bit
@@ -117,6 +117,8 @@ static void __cpuinit smp_iss4xx_kick_cpu(int cpu)
smp_wmb();
spin_table[1] = __pa(start_secondary_47x);
mb();
+
+   return 0;
 }
 
 static struct smp_ops_t iss_smp_ops = {
diff --git a/arch/powerpc/platforms/85xx/smp.c 
b/arch/powerpc/platforms/85xx/smp.c
index 0d00ff9..fe3f6a3 100644
--- a/arch/powerpc/platforms/85xx/smp.c
+++ b/arch/powerpc/platforms/85xx/smp.c
@@ -41,7 +41,7 @@ extern void __early_start(void);
 #define NUM_BOOT_ENTRY 8
 #define SIZE_BOOT_ENTRY(NUM_BOOT_ENTRY * sizeof(u32))
 
-static void __init
+static int __init
 smp_85xx_kick_cpu(int nr)
 {
unsigned long flags;
@@ -60,7 +60,7 @@ smp_85xx_kick_cpu(int nr)
 
if (cpu_rel_addr == NULL) {
printk(KERN_ERR "No cpu-release-addr for cpu %d\n", nr);
-   return;
+   return -ENOENT;
}
 
/*
@@ -107,6 +107,8 @@ smp_85xx_kick_cpu(int nr)
iounmap(bptr

[PATCH 4/4] powerpc/pci: Properly initialize IO workaround "private"

2011-04-12 Thread Michael Ellerman
Even when no initfunc is provided.

Signed-off-by: Benjamin Herrenschmidt 
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/kernel/io-workarounds.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/kernel/io-workarounds.c 
b/arch/powerpc/kernel/io-workarounds.c
index d36515e..ffafaea 100644
--- a/arch/powerpc/kernel/io-workarounds.c
+++ b/arch/powerpc/kernel/io-workarounds.c
@@ -175,6 +175,7 @@ void __devinit iowa_register_bus(struct pci_controller *phb,
bus = &iowa_busses[iowa_bus_count];
bus->phb = phb;
bus->ops = ops;
+   bus->private = data;
 
if (initfunc)
if ((*initfunc)(bus, data))
-- 
1.7.1

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH 3/4] powerpc/pci: Make IO workarounds init implicit when first bus is registered

2011-04-12 Thread Michael Ellerman
Signed-off-by: Benjamin Herrenschmidt 
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/include/asm/io-workarounds.h |1 -
 arch/powerpc/kernel/io-workarounds.c  |   27 +++
 arch/powerpc/platforms/cell/celleb_pci.c  |   18 +-
 arch/powerpc/platforms/cell/setup.c   |2 --
 4 files changed, 20 insertions(+), 28 deletions(-)

diff --git a/arch/powerpc/include/asm/io-workarounds.h 
b/arch/powerpc/include/asm/io-workarounds.h
index 6efc778..fbae492 100644
--- a/arch/powerpc/include/asm/io-workarounds.h
+++ b/arch/powerpc/include/asm/io-workarounds.h
@@ -31,7 +31,6 @@ struct iowa_bus {
void   *private;
 };
 
-void __devinit io_workaround_init(void);
 void __devinit iowa_register_bus(struct pci_controller *, struct ppc_pci_io *,
 int (*)(struct iowa_bus *, void *), void *);
 struct iowa_bus *iowa_mem_find_bus(const PCI_IO_ADDR);
diff --git a/arch/powerpc/kernel/io-workarounds.c 
b/arch/powerpc/kernel/io-workarounds.c
index 7e58457..d36515e 100644
--- a/arch/powerpc/kernel/io-workarounds.c
+++ b/arch/powerpc/kernel/io-workarounds.c
@@ -144,7 +144,19 @@ static void __iomem *iowa_ioremap(phys_addr_t addr, 
unsigned long size,
return res;
 }
 
-/* Regist new bus to support workaround */
+/* Enable IO workaround */
+static void __devinit io_workaround_init(void)
+{
+   static int io_workaround_inited;
+
+   if (io_workaround_inited)
+   return;
+   ppc_pci_io = iowa_pci_io;
+   ppc_md.ioremap = iowa_ioremap;
+   io_workaround_inited = 1;
+}
+
+/* Register new bus to support workaround */
 void __devinit iowa_register_bus(struct pci_controller *phb,
struct ppc_pci_io *ops,
int (*initfunc)(struct iowa_bus *, void *), void *data)
@@ -152,6 +164,8 @@ void __devinit iowa_register_bus(struct pci_controller *phb,
struct iowa_bus *bus;
struct device_node *np = phb->dn;
 
+   io_workaround_init();
+
if (iowa_bus_count >= IOWA_MAX_BUS) {
pr_err("IOWA:Too many pci bridges, "
   "workarounds disabled for %s\n", np->full_name);
@@ -171,14 +185,3 @@ void __devinit iowa_register_bus(struct pci_controller 
*phb,
pr_debug("IOWA:[%d]Add bus, %s.\n", iowa_bus_count-1, np->full_name);
 }
 
-/* enable IO workaround */
-void __devinit io_workaround_init(void)
-{
-   static int io_workaround_inited;
-
-   if (io_workaround_inited)
-   return;
-   ppc_pci_io = iowa_pci_io;
-   ppc_md.ioremap = iowa_ioremap;
-   io_workaround_inited = 1;
-}
diff --git a/arch/powerpc/platforms/cell/celleb_pci.c 
b/arch/powerpc/platforms/cell/celleb_pci.c
index c19b783..2904b0a 100644
--- a/arch/powerpc/platforms/cell/celleb_pci.c
+++ b/arch/powerpc/platforms/cell/celleb_pci.c
@@ -468,18 +468,6 @@ static struct of_device_id celleb_phb_match[] __initdata = 
{
},
 };
 
-static int __init celleb_io_workaround_init(struct pci_controller *phb,
-   struct celleb_phb_spec *phb_spec)
-{
-   if (phb_spec->ops) {
-   iowa_register_bus(phb, phb_spec->ops, phb_spec->iowa_init,
- phb_spec->iowa_data);
-   io_workaround_init();
-   }
-
-   return 0;
-}
-
 int __init celleb_setup_phb(struct pci_controller *phb)
 {
struct device_node *dev = phb->dn;
@@ -499,7 +487,11 @@ int __init celleb_setup_phb(struct pci_controller *phb)
if (rc)
return 1;
 
-   return celleb_io_workaround_init(phb, phb_spec);
+   if (phb_spec->ops)
+   iowa_register_bus(phb, phb_spec->ops,
+ phb_spec->iowa_init,
+ phb_spec->iowa_data);
+   return 0;
 }
 
 int celleb_pci_probe_mode(struct pci_bus *bus)
diff --git a/arch/powerpc/platforms/cell/setup.c 
b/arch/powerpc/platforms/cell/setup.c
index af7b13c..c73cf4c 100644
--- a/arch/powerpc/platforms/cell/setup.c
+++ b/arch/powerpc/platforms/cell/setup.c
@@ -136,8 +136,6 @@ static int __devinit cell_setup_phb(struct pci_controller 
*phb)
 
iowa_register_bus(phb, &spiderpci_ops, &spiderpci_iowa_init,
  (void *)SPIDER_PCI_REG_BASE);
-   io_workaround_init();
-
return 0;
 }
 
-- 
1.7.1

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH 2/4] powerpc/pci: Move IO workarounds to the common kernel dir

2011-04-12 Thread Michael Ellerman
Signed-off-by: Benjamin Herrenschmidt 
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/include/asm/io-workarounds.h|   49 +++
 arch/powerpc/kernel/Makefile |2 +
 arch/powerpc/kernel/io-workarounds.c |  184 +
 arch/powerpc/platforms/Kconfig   |3 +
 arch/powerpc/platforms/cell/Kconfig  |1 +
 arch/powerpc/platforms/cell/Makefile |8 +-
 arch/powerpc/platforms/cell/celleb_pci.c |1 -
 arch/powerpc/platforms/cell/celleb_pci.h |3 +-
 arch/powerpc/platforms/cell/io-workarounds.c |  185 --
 arch/powerpc/platforms/cell/io-workarounds.h |   49 ---
 arch/powerpc/platforms/cell/qpace_setup.c|1 -
 arch/powerpc/platforms/cell/setup.c  |2 +-
 arch/powerpc/platforms/cell/spider-pci.c |3 +-
 13 files changed, 247 insertions(+), 244 deletions(-)

diff --git a/arch/powerpc/include/asm/io-workarounds.h 
b/arch/powerpc/include/asm/io-workarounds.h
new file mode 100644
index 000..6efc778
--- /dev/null
+++ b/arch/powerpc/include/asm/io-workarounds.h
@@ -0,0 +1,49 @@
+/*
+ * Support PCI IO workaround
+ *
+ * (C) Copyright 2007-2008 TOSHIBA CORPORATION
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef _IO_WORKAROUNDS_H
+#define _IO_WORKAROUNDS_H
+
+#include 
+#include 
+
+/* Bus info */
+struct iowa_bus {
+   struct pci_controller *phb;
+   struct ppc_pci_io *ops;
+   void   *private;
+};
+
+void __devinit io_workaround_init(void);
+void __devinit iowa_register_bus(struct pci_controller *, struct ppc_pci_io *,
+int (*)(struct iowa_bus *, void *), void *);
+struct iowa_bus *iowa_mem_find_bus(const PCI_IO_ADDR);
+struct iowa_bus *iowa_pio_find_bus(unsigned long);
+
+extern struct ppc_pci_io spiderpci_ops;
+extern int spiderpci_iowa_init(struct iowa_bus *, void *);
+
+#define SPIDER_PCI_REG_BASE0xd000
+#define SPIDER_PCI_REG_SIZE0x1000
+#define SPIDER_PCI_VCI_CNTL_STAT   0x0110
+#define SPIDER_PCI_DUMMY_READ  0x0810
+#define SPIDER_PCI_DUMMY_READ_BASE 0x0814
+
+#endif /* _IO_WORKAROUNDS_H */
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index 0fd6273..b0ba78f 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -105,6 +105,8 @@ obj-$(CONFIG_KEXEC) += machine_kexec.o crash.o \
 obj-$(CONFIG_AUDIT)+= audit.o
 obj64-$(CONFIG_AUDIT)  += compat_audit.o
 
+obj-$(CONFIG_PPC_IO_WORKAROUNDS)   += io-workarounds.o
+
 obj-$(CONFIG_DYNAMIC_FTRACE)   += ftrace.o
 obj-$(CONFIG_FUNCTION_GRAPH_TRACER)+= ftrace.o
 obj-$(CONFIG_PERF_EVENTS)  += perf_callchain.o
diff --git a/arch/powerpc/kernel/io-workarounds.c 
b/arch/powerpc/kernel/io-workarounds.c
new file mode 100644
index 000..7e58457
--- /dev/null
+++ b/arch/powerpc/kernel/io-workarounds.c
@@ -0,0 +1,184 @@
+/*
+ * Support PCI IO workaround
+ *
+ *  Copyright (C) 2006 Benjamin Herrenschmidt 
+ *IBM, Corp.
+ *  (C) Copyright 2007-2008 TOSHIBA CORPORATION
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#undef DEBUG
+
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define IOWA_MAX_BUS   8
+
+static struct iowa_bus iowa_busses[IOWA_MAX_BUS];
+static unsigned int iowa_bus_count;
+
+static struct iowa_bus *iowa_pci_find(unsigned long vaddr, unsigned long paddr)
+{
+   int i, j;
+   struct resource *res;
+   unsigned long vstart, vend;
+
+   for (i = 0; i < iowa_bus_count; i++) {
+   struct iowa_bus *bus = &iowa_busses[i];
+   struct pci_controller *phb = bus->phb;
+
+   if (vaddr) {
+   vstart = (unsigned long)phb->io_base_virt;
+   vend = vstart + phb->pci_io_size - 1;
+   if ((vaddr >= vstart) && (vaddr <= vend))
+   return bus;
+   }
+
+   if (paddr)
+   for (j = 0; j < 3; j++) {
+   res = &phb->mem_resources[j];
+   if (paddr >= res

[PATCH 1/4] powerpc/pci: Split IO vs MMIO indirect access hooks

2011-04-12 Thread Michael Ellerman
The goal is to avoid adding overhead to MMIO when only PIO is needed

Signed-off-by: Benjamin Herrenschmidt 
Signed-off-by: Michael Ellerman 
---
 arch/powerpc/include/asm/io.h  |   16 +++-
 arch/powerpc/platforms/Kconfig |   10 --
 arch/powerpc/platforms/cell/Kconfig|3 ++-
 arch/powerpc/platforms/iseries/Kconfig |3 ++-
 4 files changed, 23 insertions(+), 9 deletions(-)


v2: Updated based on sfr's comments RE the Kconfig.

diff --git a/arch/powerpc/include/asm/io.h b/arch/powerpc/include/asm/io.h
index 001f2f1..2f365f5 100644
--- a/arch/powerpc/include/asm/io.h
+++ b/arch/powerpc/include/asm/io.h
@@ -481,10 +481,16 @@ __do_out_asm(_rec_outl, "stwbrx")
_memcpy_fromio(dst,PCI_FIX_ADDR(src),n)
 #endif /* !CONFIG_EEH */
 
-#ifdef CONFIG_PPC_INDIRECT_IO
-#define DEF_PCI_HOOK(x)x
+#ifdef CONFIG_PPC_INDIRECT_PIO
+#define DEF_PCI_HOOK_pio(x)x
+#else
+#define DEF_PCI_HOOK_pio(x)NULL
+#endif
+
+#ifdef CONFIG_PPC_INDIRECT_MMIO
+#define DEF_PCI_HOOK_mem(x)x
 #else
-#define DEF_PCI_HOOK(x)NULL
+#define DEF_PCI_HOOK_mem(x)NULL
 #endif
 
 /* Structure containing all the hooks */
@@ -504,7 +510,7 @@ extern struct ppc_pci_io {
 #define DEF_PCI_AC_RET(name, ret, at, al, space, aa)   \
 static inline ret name at  \
 {  \
-   if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL)  \
+   if (DEF_PCI_HOOK_##space(ppc_pci_io.name) != NULL)  \
return ppc_pci_io.name al;  \
return __do_##name al;  \
 }
@@ -512,7 +518,7 @@ static inline ret name at   
\
 #define DEF_PCI_AC_NORET(name, at, al, space, aa)  \
 static inline void name at \
 {  \
-   if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL)  \
+   if (DEF_PCI_HOOK_##space(ppc_pci_io.name) != NULL)  \
ppc_pci_io.name al; \
else\
__do_##name al; \
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 59eeb77..34e34ba 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -154,11 +154,17 @@ config PPC_P7_NAP
 config PPC_INDIRECT_IO
bool
select GENERIC_IOMAP
-   default n
+
+config PPC_INDIRECT_PIO
+   bool
+   select PPC_INDIRECT_IO
+
+config PPC_INDIRECT_MMIO
+   bool
+   select PPC_INDIRECT_IO
 
 config GENERIC_IOMAP
bool
-   default n
 
 source "drivers/cpufreq/Kconfig"
 
diff --git a/arch/powerpc/platforms/cell/Kconfig 
b/arch/powerpc/platforms/cell/Kconfig
index 81239eb..3c7f1de 100644
--- a/arch/powerpc/platforms/cell/Kconfig
+++ b/arch/powerpc/platforms/cell/Kconfig
@@ -6,7 +6,8 @@ config PPC_CELL_COMMON
bool
select PPC_CELL
select PPC_DCR_MMIO
-   select PPC_INDIRECT_IO
+   select PPC_INDIRECT_PIO
+   select PPC_INDIRECT_MMIO
select PPC_NATIVE
select PPC_RTAS
select IRQ_EDGE_EOI_HANDLER
diff --git a/arch/powerpc/platforms/iseries/Kconfig 
b/arch/powerpc/platforms/iseries/Kconfig
index e5bc9f7..ea1d362 100644
--- a/arch/powerpc/platforms/iseries/Kconfig
+++ b/arch/powerpc/platforms/iseries/Kconfig
@@ -1,7 +1,8 @@
 config PPC_ISERIES
bool "IBM Legacy iSeries"
depends on PPC64 && PPC_BOOK3S
-   select PPC_INDIRECT_IO
+   select PPC_INDIRECT_PIO
+   select PPC_INDIRECT_MMIO
select PPC_PCI_CHOICE if EXPERT
 
 menu "iSeries device drivers"
-- 
1.7.1

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev