Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Ian Campbell
On Wed, 2010-03-10 at 10:55 +, i...@hellion.org.uk wrote:
> 
> arch_init_chip_data cannot be moved into struct irq_chip at this time
> because irq_desc->chip is not known at the time the irq_desc is
> setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
> PowerPC, the only other user, whose usage better matches the new name)
> and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
> call this whenever the IO APIC code allocates a new IRQ.

One idea I had to improve this was to add a struct irq_chip * as a
parameter to irq_to_desc_alloc_node. The new parameter potentially could
be NULL for current behaviour. Does that sound like a reasonable
approach?

Ian.

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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Yinghai Lu
On Wed, Mar 10, 2010 at 2:55 AM,   wrote:
> From: Ian Campbell 
>
> Move arch_init_copy_chip_data and arch_free_chip_data into function
> pointers in struct irq_chip since they operate on irq_desc->chip_data.
>
> arch_init_chip_data cannot be moved into struct irq_chip at this time
> because irq_desc->chip is not known at the time the irq_desc is
> setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
> PowerPC, the only other user, whose usage better matches the new name)
> and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
> call this whenever the IO APIC code allocates a new IRQ.
>
> I've retained the chip_data behaviour for uv_irq although it isn't
> clear to me if these interrupt types support migration or how closely
> related to the APIC modes they really are. If it weren't for this the
> ioapic_{init,copy,free}_chip_data functions could be static to
> io_apic.c.
>
> I've tested by booting on a 64 bit system, but it's not clear to me
> what actions I need to take to actually exercise some of these code
> paths.
>

can you just add another pointer field in irq_desc?

some kind of *irq_info etc.

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


[PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread ijc
From: Ian Campbell 

Move arch_init_copy_chip_data and arch_free_chip_data into function
pointers in struct irq_chip since they operate on irq_desc->chip_data.

arch_init_chip_data cannot be moved into struct irq_chip at this time
because irq_desc->chip is not known at the time the irq_desc is
setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
PowerPC, the only other user, whose usage better matches the new name)
and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
call this whenever the IO APIC code allocates a new IRQ.

I've retained the chip_data behaviour for uv_irq although it isn't
clear to me if these interrupt types support migration or how closely
related to the APIC modes they really are. If it weren't for this the
ioapic_{init,copy,free}_chip_data functions could be static to
io_apic.c.

I've tested by booting on a 64 bit system, but it's not clear to me
what actions I need to take to actually exercise some of these code
paths.

Signed-off-by: Ian Campbell 
Cc: Thomas Gleixner 
Cc: Ingo Molnar 
Cc: H. Peter Anvin 
Cc: Eric W. Biederman 
Cc: Yinghai Lu 
Cc: Jeremy Fitzhardinge 
Cc: Benjamin Herrenschmidt 
Cc: Paul Mackerras 
Cc: x...@kernel.org
Cc: linuxppc-...@ozlabs.org
Cc: linux-ker...@vger.kernel.org
---
 arch/powerpc/kernel/irq.c  |2 +-
 arch/x86/include/asm/hw_irq.h  |   11 +++-
 arch/x86/kernel/apic/io_apic.c |   58 +---
 arch/x86/kernel/uv_irq.c   |5 +++
 include/linux/interrupt.h  |2 +-
 include/linux/irq.h|   12 +---
 kernel/irq/handle.c|2 +-
 kernel/irq/numa_migrate.c  |   12 +++-
 kernel/softirq.c   |3 +-
 9 files changed, 91 insertions(+), 16 deletions(-)

diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 64f6f20..002d87f 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -1088,7 +1088,7 @@ int arch_early_irq_init(void)
return 0;
 }
 
-int arch_init_chip_data(struct irq_desc *desc, int node)
+int arch_init_irq_desc(struct irq_desc *desc, int node)
 {
desc->status |= IRQ_NOREQUEST;
return 0;
diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h
index 0642186..b9d7310 100644
--- a/arch/x86/include/asm/hw_irq.h
+++ b/arch/x86/include/asm/hw_irq.h
@@ -20,9 +20,9 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 
-#include 
 #include 
 
 /* Interrupt handlers registered during init_IRQ */
@@ -61,6 +61,15 @@ extern void init_VISWS_APIC_irqs(void);
 extern void setup_IO_APIC(void);
 extern void disable_IO_APIC(void);
 
+extern int ioapic_init_chip_data(struct irq_desc *desc, int node);
+
+#ifdef CONFIG_SPARSE_IRQ
+extern void ioapic_copy_chip_data(struct irq_desc *old_desc,
+ struct irq_desc *desc, int node);
+extern void ioapic_free_chip_data(struct irq_desc *old_desc,
+ struct irq_desc *desc);
+#endif
+
 struct io_apic_irq_attr {
int ioapic;
int ioapic_pin;
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index a57d974..74d5d96 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -211,7 +211,7 @@ static struct ioapic_irq_cfg *get_one_free_irq_cfg(int node)
return cfg;
 }
 
-int arch_init_chip_data(struct irq_desc *desc, int node)
+int ioapic_init_chip_data(struct irq_desc *desc, int node)
 {
struct ioapic_irq_cfg *cfg;
 
@@ -289,8 +289,8 @@ static void free_irq_2_pin(struct ioapic_irq_cfg *old_cfg,
old_cfg->irq_2_pin = NULL;
 }
 
-void arch_init_copy_chip_data(struct irq_desc *old_desc,
-struct irq_desc *desc, int node)
+void ioapic_copy_chip_data(struct irq_desc *old_desc,
+  struct irq_desc *desc, int node)
 {
struct ioapic_irq_cfg *cfg;
struct ioapic_irq_cfg *old_cfg;
@@ -314,7 +314,7 @@ static void free_irq_cfg(struct ioapic_irq_cfg *old_cfg)
kfree(old_cfg);
 }
 
-void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc)
+void ioapic_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc)
 {
struct ioapic_irq_cfg *old_cfg, *cfg;
 
@@ -338,6 +338,11 @@ struct ioapic_irq_cfg *ioapic_irq_cfg(unsigned int irq)
return irq < nr_irqs ? irq_cfgx + irq : NULL;
 }
 
+int ioapic_init_chip_data(struct irq_desc *desc, int node)
+{
+   return 0;
+}
+
 #endif
 
 struct io_apic {
@@ -1526,6 +1531,7 @@ static void __init setup_IO_APIC_irqs(void)
printk(KERN_INFO "can not get irq_desc for %d\n", irq);
continue;
}
+   ioapic_init_chip_data(desc, node);
cfg = desc->chip_data;
add_pin_to_irq_node(cfg, node, apic_id, pin);
/*
@@ -1576,6 +1582,7 @@ void setup_IO_APIC_irq_extra(u32 gsi)
printk(KERN_INFO "can not get irq_desc for %d\n", irq

[PATCH v2] powerpc: export data from new hcall H_EM_GET_PARMS

2010-03-10 Thread Vaidyanathan Srinivasan
Hi Ben,

I have cleaned up the code from the previous post:
http://lists.ozlabs.org/pipermail/linuxppc-dev/2010-February/080630.html

Changes from v1:
* Removed redundant return statements and rearranged code

Description:

A new hcall H_EM_GET_PARMS as been added to obtain power mode data
from the platform.  This data can be used by user space administrative
tools for better power management.

The following patch add data from this new hcall into the lparcfg
driver and exports to user space along with other existing lpar data
in /proc/powerpc/lparcfg

Please review and include in powerpc -next tree.

Thanks,
Vaidy

---
powerpc: export data from new hcall H_EM_GET_PARMS

Add support for H_EM_GET_PARMS hcall that will return data
related to power modes from the platform.  Export the data
directly to user space for administrative tools to interpret
and use.

cat /proc/powerpc/lparcfg will export power mode data

Signed-off-by: Vaidyanathan Srinivasan 
---
 arch/powerpc/include/asm/hvcall.h |1 +
 arch/powerpc/kernel/lparcfg.c |   12 +++-
 2 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/include/asm/hvcall.h 
b/arch/powerpc/include/asm/hvcall.h
index f027581..ebe7493 100644
--- a/arch/powerpc/include/asm/hvcall.h
+++ b/arch/powerpc/include/asm/hvcall.h
@@ -228,6 +228,7 @@
 #define H_JOIN 0x298
 #define H_VASI_STATE0x2A4
 #define H_ENABLE_CRQ   0x2B0
+#define H_GET_EM_PARMS 0x2B8
 #define H_SET_MPP  0x2D0
 #define H_GET_MPP  0x2D4
 #define MAX_HCALL_OPCODE   H_GET_MPP
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
index d09d1c6..ff698fb 100644
--- a/arch/powerpc/kernel/lparcfg.c
+++ b/arch/powerpc/kernel/lparcfg.c
@@ -37,7 +37,7 @@
 #include 
 #include 
 
-#define MODULE_VERS "1.8"
+#define MODULE_VERS "1.9"
 #define MODULE_NAME "lparcfg"
 
 /* #define LPARCFG_DEBUG */
@@ -486,6 +486,14 @@ static void splpar_dispatch_data(struct seq_file *m)
seq_printf(m, "dispatch_dispersions=%lu\n", dispatch_dispersions);
 }
 
+static void parse_em_data(struct seq_file *m)
+{
+   unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
+
+   if (plpar_hcall(H_GET_EM_PARMS, retbuf) == H_SUCCESS)
+   seq_printf(m, "power_mode_data=%016lx\n", retbuf[0]);
+}
+
 static int pseries_lparcfg_data(struct seq_file *m, void *v)
 {
int partition_potential_processors;
@@ -540,6 +548,8 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v)
 
seq_printf(m, "slb_size=%d\n", mmu_slb_size);
 
+   parse_em_data(m);
+
return 0;
 }
 

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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Ian Campbell
On Wed, 2010-03-10 at 12:06 +, Yinghai Lu wrote:
> On Wed, Mar 10, 2010 at 2:55 AM,   wrote:
> > From: Ian Campbell 
> >
> > Move arch_init_copy_chip_data and arch_free_chip_data into function
> > pointers in struct irq_chip since they operate on irq_desc->chip_data.
> >
> > arch_init_chip_data cannot be moved into struct irq_chip at this time
> > because irq_desc->chip is not known at the time the irq_desc is
> > setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
> > PowerPC, the only other user, whose usage better matches the new name)
> > and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
> > call this whenever the IO APIC code allocates a new IRQ.
> >
> > I've retained the chip_data behaviour for uv_irq although it isn't
> > clear to me if these interrupt types support migration or how closely
> > related to the APIC modes they really are. If it weren't for this the
> > ioapic_{init,copy,free}_chip_data functions could be static to
> > io_apic.c.
> >
> > I've tested by booting on a 64 bit system, but it's not clear to me
> > what actions I need to take to actually exercise some of these code
> > paths.
> >
> 
> can you just add another pointer field in irq_desc?
> 
> some kind of *irq_info etc.

I think I don't understand what you are suggesting.

There is already a pointer for irq_chip specific use i.e.
irq_desc->chip_data. This patchset is just about ensuring that the field
really is available to any chip implementation rather than just assuming
it is always used for the acpi chip types (on x86 at least).

Does adding a second pointer with the same (intended?) semantics as the
existing one buy us anything?

Ian.

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


mv643xx_eth broken again on pegasos2 G4

2010-03-10 Thread acrux
hi,
mv643xx_eth driver seems to be broken (and very often there is a kernel panic 
too).
Last working kernel is 2.6.31.2

here a dmesg from 2.6.32.9:

memory = 1024MB; using 2048kB for hash table (at cfe0)
Linux version 2.6.32.9 (r...@pegasos2) (gcc version 4.3.4 (CRUX PPC) (GCC) ) #1
PREEMPT Wed Mar 10 15:56:51 CET 2010
Found legacy serial port 0 for /p...@8000/i...@c/ser...@i2f8
  port=2f8, taddr=fe0002f8, irq=0, clk=1843200, speed=0
bootconsole [udbg0] enabled
chrp type = 6 [Genesi Pegasos]
Pegasos l2cr : L2 cache was not active, activating
PCI bus 0 controlled by /p...@8000 at 8000
PCI host bridge /p...@8000 (primary) ranges:
  IO 0xfe00..0xfe00 -> 0x
 MEM 0x8000..0xbfff -> 0x8000
PCI bus 0 controlled by /p...@c000 at c000
PCI host bridge /p...@c000  ranges:
  IO 0xf800..0xf800 -> 0x
 MEM 0xc000..0xdfff -> 0xc000
Top of RAM: 0x4000, Total RAM: 0x4000
Memory hole size: 0MB
Zone PFN ranges:
  DMA  0x -> 0x0003
  Normal   0x0003 -> 0x0003
  HighMem  0x0003 -> 0x0004
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0: 0x -> 0x0004
On node 0 totalpages: 262144
free_area_init_node: node 0, pgdat c045b65c, node_mem_map c0baf000
  DMA zone: 1536 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 195072 pages, LIFO batch:31
  HighMem zone: 512 pages used for memmap
  HighMem zone: 65024 pages, LIFO batch:15
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260096
Kernel command line: root=/dev/hda5 video=radeonfb:800x...@60 mv643xx_eth=no
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
High memory: 262080k
Memory: 1031700k/1048576k available (4268k kernel code, 16184k reserved, 236k da
ta, 120k bss, 160k init)
Kernel virtual memory layout:
  * 0xfffef000..0xf000  : fixmap
  * 0xff80..0xffc0  : highmem PTEs
  * 0xff7e..0xff80  : early ioremap
  * 0xf100..0xff7e  : vmalloc & ioremap
SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Hierarchical RCU implementation.
NR_IRQS:512
i8259 legacy interrupt controller initialized
time_init: decrementer frequency = 33.33 MHz
time_init: processor frequency   = 999.90 MHz
clocksource: timebase mult[781] shift[22] registered
clockevent: decrementer mult[887] shift[32] cpu[0]
Console: colour dummy device 80x25
console [tty0] enabled, bootconsole disabled
Mount-cache hash table entries: 512
NET: Registered protocol family 16
PCI: Probing PCI hardware
pci :00:01.0: reg 10 32bit mmio: [0x8000-0x87ff]
pci :00:01.0: reg 14 io port: [0x1080-0x10ff]
pci :00:01.0: supports D2
pci :00:01.0: PME# supported from D2 D3hot D3cold
pci :00:01.0: PME# disabled
pci :00:0c.1: reg 10 io port: [0x1000-0x1007]
pci :00:0c.1: reg 14 io port: [0x100c-0x100f]
pci :00:0c.1: reg 18 io port: [0x1010-0x1017]
pci :00:0c.1: reg 1c io port: [0x101c-0x101f]
pci :00:0c.1: reg 20 io port: [0x1020-0x102f]
pci :00:0c.2: reg 20 io port: [0x1040-0x105f]
pci :00:0c.3: reg 20 io port: [0x1060-0x107f]
pci :00:0c.5: reg 10 io port: [0x1100-0x11ff]
pci :00:0c.5: reg 14 io port: [0x1030-0x1033]
pci :00:0c.5: reg 18 io port: [0x1034-0x1037]
pci :00:0c.6: reg 10 io port: [0x1200-0x12ff]
pci :00:0d.0: reg 10 io port: [0x1300-0x13ff]
pci :00:0d.0: reg 14 32bit mmio: [0x8800-0x88ff]
pci :00:0d.0: PME# supported from D0 D3hot D3cold
pci :00:0d.0: PME# disabled
pci 0001:01:08.0: reg 10 32bit mmio pref: [0xc000-0xc7ff]
pci 0001:01:08.0: reg 14 io port: [0x1000-0x10ff]
pci 0001:01:08.0: reg 18 32bit mmio: [0xc800-0xc800]
pci 0001:01:08.0: reg 30 32bit mmio pref: [0xc802-0xc803]
pci 0001:01:08.0: supports D1 D2
pci 0001:01:08.1: reg 10 32bit mmio pref: [0xd000-0xd7ff]
pci 0001:01:08.1: reg 14 32bit mmio: [0xc801-0xc801]
pci 0001:01:08.1: supports D1 D2
PCI :00 Cannot reserve Legacy IO [0x00-0xfff]
pci_bus :00: resource 0 io:  [0x00-0x]
pci_bus :00: resource 1 mem: [0x8000-0xbfff]
pci_bus 0001:01: resource 0 io:  [0x-0x]
pci_bus 0001:01: resource 1 mem: [0xc000-0xdfff]
bio: create slab  at 0
vgaarb: device added: PCI:0001:01:08.0,decodes=io+mem,owns=io+mem,locks=none
vgaarb: loaded
SCSI subsystem initialized
Switching to clocksource timebase
NET: Registered protocol family 2
IP route cache hash table entries: 32768 (order: 5, 131072 bytes)
TCP established hash table entries: 131072 (order: 8, 1048576 bytes)
TCP bind hash table entries: 65536 (order: 6, 262144 bytes)
TCP: Hash tables configured (established 131072 bind 65536)
TCP reno registered
NET: Registered protoc

Re: mv643xx_eth broken again on pegasos2 G4

2010-03-10 Thread Gabriel Paubert
On Wed, Mar 10, 2010 at 04:14:41PM +0100, acrux wrote:
> hi,
> mv643xx_eth driver seems to be broken (and very often there is a kernel panic 
> too).
> Last working kernel is 2.6.31.2
> 
> here a dmesg from 2.6.32.9:

My Pegasos running a pristine 2.6.32 seems to disagree with you.

[...]
Linux version 2.6.32 (x...@yyy) (gcc version 4.3.2 (Debian 4.3.2-1.1) ) #129 
Mon Jan 18 16:29:40 GMT 2010
Found legacy serial port 0 for /p...@8000/i...@c/ser...@i2f8
  port=2f8, taddr=fe0002f8, irq=0, clk=1843200, speed=0
chrp type = 6 [Genesi Pegasos]
[...]
MV-643xx 10/100/1000 ethernet driver version 1.4
mv643xx_eth smi: probed
net eth1: port 1 with MAC address 00:0b:2f:15:10:ef
net eth1: configured with sram
[...]

This said I cannot go close to it right now to compile and test
something newer. But I can connect to it through the network
and it uses the mv643xx_eth port.

The difference may be that mv643xx_eth is built-in and not modular.

> MV-643xx 10/100/1000 ethernet driver version 1.4
> sysfs: cannot create duplicate filename '/class/mdio_bus/0'
> [ cut here ]
> Badness at fs/sysfs/dir.c:491
> NIP: c00dc568 LR: c00dc568 CTR: c00200ac
> REGS: ef015c70 TRAP: 0700   Not tainted  (2.6.32.9)
> MSR: 00029032   CR: 22422488  XER: 
> TASK = ef082bc0[1011] 'modprobe' THREAD: ef014000
> GPR00: c00dc568 ef015d20 ef082bc0 0042 c04303f0 c04303f0  0001
> GPR08:   01430ee0  81f2ba43 10020a5c  
> GPR16:   100056bc 0003 4801f000   c0430120
> GPR24: 107fb560 107fb57c ef17fc48 0001 ffef ef015d48 ef108030 ef355000
> NIP [c00dc568] sysfs_add_one+0x7c/0xa0
> LR [c00dc568] sysfs_add_one+0x7c/0xa0
> Call Trace:
> [ef015d20] [c00dc568] sysfs_add_one+0x7c/0xa0 (unreliable)
> [ef015d40] [c00dd700] sysfs_do_create_link+0xf4/0x188
> [ef015d70] [c022ffbc] device_add+0x1a8/0x51c
> [ef015db0] [c026be38] mdiobus_register+0xa0/0x1ac
> [ef015de0] [f224d5dc] mv643xx_eth_shared_probe+0x140/0x3f8 [mv643xx_eth]
> [ef015e00] [c0233dd0] platform_drv_probe+0x20/0x30
> [ef015e10] [c0232a4c] driver_probe_device+0xd4/0x1a8
> [ef015e30] [c0232b90] __driver_attach+0x70/0xa4
> [ef015e50] [c02320cc] bus_for_each_dev+0x5c/0xac
> [ef015e80] [c023285c] driver_attach+0x24/0x34
> [ef015e90] [c0231910] bus_add_driver+0xb4/0x248
> [ef015eb0] [c0232f78] driver_register+0xd0/0x174
> [ef015ed0] [c023412c] platform_driver_register+0x6c/0x7c
> [ef015ee0] [f2256024] mv643xx_eth_init_module+0x24/0x80 [mv643xx_eth]
> [ef015f00] [c0003ee0] do_one_initcall+0x64/0x1f8
> [ef015f20] [c0054680] sys_init_module+0xe0/0x224
> [ef015f40] [c0013828] ret_from_syscall+0x0/0x38
> --- Exception: c01 at 0xff69720
> LR = 0x10004150
> Instruction dump:
> 807d 7fe4fb78 4b51 3c80c03a 3884adb0 4bf3ce4d 809e0010 4bf3ce45
> 7c641b78 3c60c03b 38639868 48259099 <0fe0> 7fe3fb78 4bfaac0d 80010024
> mii_bus 0 failed to register
> mv643xx_eth: probe of mv643xx_eth.0 failed with error -12
> Unable to handle kernel paging request for data at address 0x
> Faulting instruction address: 0xf2250908
> Oops: Kernel access of bad area, sig: 11 [#1]
> PREEMPT CHRP
> Modules linked in: mv643xx_eth(+) via_rhine serio_raw parport firewire_core
> NIP: f2250908 LR: f2250900 CTR: c0232574
> REGS: ef015d10 TRAP: 0300   Tainted: GW   (2.6.32.9)
> MSR: 9032   CR: 84422488  XER: 2000
> DAR: , DSISR: 4000
> TASK = ef082bc0[1011] 'modprobe' THREAD: ef014000
> GPR00: f22508f4 ef015dc0 ef082bc0  efb42300 efb42005 efb4214d 
> GPR08:  0001 2bfd0c6b c0232574  10020a5c  
> GPR16:   100056bc 0003 c0430230   
> GPR24: c0430228 107fb57c  efb42000 f22528c0 fff4 c04300d8 efb42300
> NIP [f2250908] mv643xx_eth_probe+0xac/0x620 [mv643xx_eth]
> LR [f2250900] mv643xx_eth_probe+0xa4/0x620 [mv643xx_eth]
> Call Trace:
> [ef015dc0] [f22508f4] mv643xx_eth_probe+0x98/0x620 [mv643xx_eth] (unreliable)
> [ef015e00] [c0233dd0] platform_drv_probe+0x20/0x30
> [ef015e10] [c0232a4c] driver_probe_device+0xd4/0x1a8
> [ef015e30] [c0232b90] __driver_attach+0x70/0xa4
> [ef015e50] [c02320cc] bus_for_each_dev+0x5c/0xac
> [ef015e80] [c023285c] driver_attach+0x24/0x34
> [ef015e90] [c0231910] bus_add_driver+0xb4/0x248
> [ef015eb0] [c0232f78] driver_register+0xd0/0x174
> [ef015ed0] [c023412c] platform_driver_register+0x6c/0x7c
> [ef015ee0] [f2256034] mv643xx_eth_init_module+0x34/0x80 [mv643xx_eth]
> [ef015f00] [c0003ee0] do_one_initcall+0x64/0x1f8
> [ef015f20] [c0054680] sys_init_module+0xe0/0x224
> [ef015f40] [c0013828] ret_from_syscall+0x0/0x38
> --- Exception: c01 at 0xff69720
> LR = 0x10004150
> Instruction dump:
> 7c7b1b79 41820528 3bfb0300 3a980008 7e83a378 7fe4fb78 48000dd1 807e
> 38630008 480011b5 907b0300 813e0004 <8003> 5529502a 39290400 7c004a14
> ---[ end trace 1a9241f24ee15efc ]---

Gabriel
___
Linu

Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Ian Campbell
On Wed, 2010-03-10 at 17:18 +, Eric W. Biederman wrote:
> Ian Campbell  writes:
> 
> > On Wed, 2010-03-10 at 10:55 +, i...@hellion.org.uk wrote:
> >> 
> >> arch_init_chip_data cannot be moved into struct irq_chip at this time
> >> because irq_desc->chip is not known at the time the irq_desc is
> >> setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
> >> PowerPC, the only other user, whose usage better matches the new name)
> >> and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
> >> call this whenever the IO APIC code allocates a new IRQ.
> >
> > One idea I had to improve this was to add a struct irq_chip * as a
> > parameter to irq_to_desc_alloc_node. The new parameter potentially could
> > be NULL for current behaviour. Does that sound like a reasonable
> > approach?
> 
> I don't follow why we have the restriction that irq_to_desc_alloc_node
> must call arch_init_chip_data.  Assuming that requirement to call 
> arch_init_chip_data
> is valid, passing something into init_one_irq_desc seems appropriate.

Yes, I suspect that could also be made to work.

The lifecycle of the irq_desc and chip_data isn't really clear to me --
I guess once allocated an irq_desc never gets freed (at least
currently)? The associated chip_data can be freed on migrate and
replaced with a new one, but is not freed otherwise.

My concern is that if the caller asks for an IRQ which already exists
(is that valid?) then you will get that existing irq_desc back,
including its existing chip_data, which potentially leaks the new one
which was passed in. Or is it the case that the only way this could
happen would be for legacy IRQs? In which case perhaps it is simply
invalid to pass a new chip data in for such an IRQ.

Ian.

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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Eric W. Biederman
Ian Campbell  writes:

> On Wed, 2010-03-10 at 12:06 +, Yinghai Lu wrote:
>> On Wed, Mar 10, 2010 at 2:55 AM,   wrote:
>> > From: Ian Campbell 
>> >
>> > Move arch_init_copy_chip_data and arch_free_chip_data into function
>> > pointers in struct irq_chip since they operate on irq_desc->chip_data.
>> >
>> > arch_init_chip_data cannot be moved into struct irq_chip at this time
>> > because irq_desc->chip is not known at the time the irq_desc is
>> > setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
>> > PowerPC, the only other user, whose usage better matches the new name)
>> > and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
>> > call this whenever the IO APIC code allocates a new IRQ.
>> >
>> > I've retained the chip_data behaviour for uv_irq although it isn't
>> > clear to me if these interrupt types support migration or how closely
>> > related to the APIC modes they really are. If it weren't for this the
>> > ioapic_{init,copy,free}_chip_data functions could be static to
>> > io_apic.c.
>> >
>> > I've tested by booting on a 64 bit system, but it's not clear to me
>> > what actions I need to take to actually exercise some of these code
>> > paths.
>> >
>> 
>> can you just add another pointer field in irq_desc?
>> 
>> some kind of *irq_info etc.
>
> I think I don't understand what you are suggesting.

YH another field doesn't make much sense.  Xen is a bizarre subarch
with an incompatible irq model.  Xen simply needs the ability to
handle the entire lifetime of an irq_chip.

All we need between the Xen and the rest of x86 is a convention
so that we never manage the same irqs.   At least for domU we are
in an either/or situation so I don't see even that being a problem.

> There is already a pointer for irq_chip specific use i.e.
> irq_desc->chip_data. This patchset is just about ensuring that the field
> really is available to any chip implementation rather than just assuming
> it is always used for the acpi chip types (on x86 at least).

Ian Xen in this sense is simply not x86.  irq_cfg is not acpi or ioapic
or anything but x86 specific.  It has everything to do with having a per
cpu vector table of 256 entries and architecturally receiving a vector
number when an interrupt is fired.

It totally makes sense for Xen to do something different because
architecturally it has a completely different irq subsystem.

At the same time let's not pretend that the reason for this is anything
except that Xen has a completely different notion of interrupt delivery
than the rest of x86 and so it is it's own bizarre subarch.

This is not a case where you simply need a driver because something is
a bit different but fits into the existing model.

So the best solution here seems to be a parameter that we pass into
irq_to_desc_alloc_node that does what is needed.  The second best
would be to have arch_init_chip_data to call something like
platfrom_init_chip_data().But I think we can avoid that in
this case.

Eric

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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Ian Campbell
On Wed, 2010-03-10 at 17:42 +, Eric W. Biederman wrote:
> 
> 
> Ian Xen in this sense is simply not x86.  irq_cfg is not acpi or
> ioapic or anything but x86 specific.  It has everything to do with
> having a per cpu vector table of 256 entries and architecturally
> receiving a vector number when an interrupt is fired.
> 
> It totally makes sense for Xen to do something different because
> architecturally it has a completely different irq subsystem.

OK, so that sounds like you would like the same patchset but without the
irq_cfg renaming? or potentially with renaming to x86_blah instead (I'll
rework to your preference).

Ian.


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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Eric W. Biederman
Ian Campbell  writes:

> On Wed, 2010-03-10 at 17:18 +, Eric W. Biederman wrote:
>> Ian Campbell  writes:
>> 
>> > On Wed, 2010-03-10 at 10:55 +, i...@hellion.org.uk wrote:
>> >> 
>> >> arch_init_chip_data cannot be moved into struct irq_chip at this time
>> >> because irq_desc->chip is not known at the time the irq_desc is
>> >> setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
>> >> PowerPC, the only other user, whose usage better matches the new name)
>> >> and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
>> >> call this whenever the IO APIC code allocates a new IRQ.
>> >
>> > One idea I had to improve this was to add a struct irq_chip * as a
>> > parameter to irq_to_desc_alloc_node. The new parameter potentially could
>> > be NULL for current behaviour. Does that sound like a reasonable
>> > approach?
>> 
>> I don't follow why we have the restriction that irq_to_desc_alloc_node
>> must call arch_init_chip_data.  Assuming that requirement to call 
>> arch_init_chip_data
>> is valid, passing something into init_one_irq_desc seems appropriate.
>
> Yes, I suspect that could also be made to work.
>
> The lifecycle of the irq_desc and chip_data isn't really clear to me --
> I guess once allocated an irq_desc never gets freed (at least
> currently)? The associated chip_data can be freed on migrate and
> replaced with a new one, but is not freed otherwise.

Yes.  That actually looks like a bug.

> My concern is that if the caller asks for an IRQ which already exists
> (is that valid?) then you will get that existing irq_desc back,
> including its existing chip_data, which potentially leaks the new one
> which was passed in. Or is it the case that the only way this could
> happen would be for legacy IRQs? In which case perhaps it is simply
> invalid to pass a new chip data in for such an IRQ.

The only irqs that should be allocated/freed are probably the msi
irqs as those are the only ones that dynamically come and go in the
system.

Unfortunately there appears to be a bigger mess here than first appeared.

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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Eric W. Biederman
Ian Campbell  writes:

> On Wed, 2010-03-10 at 17:42 +, Eric W. Biederman wrote:
>> 
>> 
>> Ian Xen in this sense is simply not x86.  irq_cfg is not acpi or
>> ioapic or anything but x86 specific.  It has everything to do with
>> having a per cpu vector table of 256 entries and architecturally
>> receiving a vector number when an interrupt is fired.
>> 
>> It totally makes sense for Xen to do something different because
>> architecturally it has a completely different irq subsystem.
>
> OK, so that sounds like you would like the same patchset but without the
> irq_cfg renaming? or potentially with renaming to x86_blah instead (I'll
> rework to your preference).

Currently the renaming really makes it unclear what you are doing and for
some reason the description of the renaming rubbed me the wrong way.

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


5200B: BUG in 2.6.34-rc1-dirty while loading at24 driver

2010-03-10 Thread Albrecht Dreß

Hi all,

not sure if this is the right place to ask:  When I boot a custom 5200B (more 
or less Lite-based) board with Linus' git tree (2.6.34-rc1-dirty), I always get 
the following bug:

[1.110693] i2c /dev entries driver
[1.117285] mpc-i2c f0003d00.i2c: clock 375000 Hz (fdr=137)
[1.123156] mpc-i2c f0003d00.i2c: timeout 100 us
[1.146528] mpc-i2c f0003d40.i2c: clock 375000 Hz (fdr=137)
[1.152637] mpc-i2c f0003d40.i2c: timeout 100 us
[1.170628] rtc-ds1307 1-0068: rtc core: registered ds1337 as rtc0
[1.181003] BUG: key cf9ea5ac not in .data!
[1.185510] [ cut here ]
[1.190257] Badness at kernel/lockdep.c:2706
[1.194627] NIP: c004d2b4 LR: c004d29c CTR: c01aeb30
[1.199714] REGS: cf82db70 TRAP: 0700   Not tainted  (2.6.34-rc1-dirty)
[1.206483] MSR: 00029032   CR: 22084022  XER: 2000
[1.213305] TASK = cf83[1] 'swapper' THREAD: cf82c000
[1.218651] GPR00:  cf82dc20 cf83 0001 0001 c0023fb4 
 0001
[1.227243] GPR08:  c03f c03c 0001 42084024 100958e4 
0ffef000 0ffe41a4
[1.235834] GPR16: 0ffbf298 0ffe4180 0ff72db4 0ff72cb4 c03d685c c03d6830 
 
[1.244423] GPR24: fff4 0001 c03f 0080 cfa1c2d8 cf9ea5ac 
 cfa1c4d8
[1.253225] NIP [c004d2b4] lockdep_init_map+0xc4/0x4e4
[1.258489] LR [c004d29c] lockdep_init_map+0xac/0x4e4
[1.263657] Call Trace:
[1.266165] [cf82dc20] [c004d28c] lockdep_init_map+0x9c/0x4e4 (unreliable)
[1.273236] [cf82dc50] [c00de478] sysfs_add_file_mode+0x5c/0xe0
[1.279308] [cf82dc80] [c00e0bbc] sysfs_create_bin_file+0x34/0x50
[1.285575] [cf82dc90] [c01b8764] at24_probe+0x314/0x460
[1.291034] [cf82dcd0] [c0215768] i2c_device_probe+0xac/0xc0
[1.296840] [cf82dcf0] [c01b334c] driver_probe_device+0xa4/0x190
[1.303000] [cf82dd10] [c01b23c0] bus_for_each_drv+0x70/0xac
[1.308806] [cf82dd40] [c01b3620] device_attach+0x84/0xa8
[1.314343] [cf82dd60] [c01b1fd8] bus_probe_device+0x3c/0x54
[1.320166] [cf82dd70] [c01b0588] device_add+0x374/0x5f4
[1.325619] [cf82ddc0] [c0216ac4] i2c_new_device+0xf0/0x144
[1.331344] [cf82dde0] [c021b078] of_register_i2c_devices+0x12c/0x158
[1.337966] [cf82de60] [c02c1280] fsl_i2c_probe+0x190/0x324
[1.343687] [cf82de90] [c021abe8] of_platform_device_probe+0x5c/0x84
[1.350208] [cf82deb0] [c01b334c] driver_probe_device+0xa4/0x190
[1.356371] [cf82ded0] [c01b36e8] __driver_attach+0xa4/0xa8
[1.362087] [cf82def0] [c01b259c] bus_for_each_dev+0x60/0x9c
[1.367890] [cf82df20] [c01b3164] driver_attach+0x24/0x34
[1.373429] [cf82df30] [c01b2ef4] bus_add_driver+0x1a8/0x264
[1.379235] [cf82df60] [c01b3964] driver_register+0x6c/0x160
[1.385043] [cf82df80] [c021aac0] of_register_driver+0x54/0x70
[1.391040] [cf82df90] [c03ae9fc] fsl_i2c_init+0x24/0x54
[1.396497] [cf82dfa0] [c00038a0] do_one_initcall+0x40/0x1d4
[1.402305] [cf82dfd0] [c039a1e0] kernel_init+0xc4/0x16c
[1.407771] [cf82dff0] [c00110d8] kernel_thread+0x4c/0x68
[1.413300] Instruction dump:
[1.416341] 3863256c 4bfd758d 801ac11c 2f80 40beffd4 48140b11 2f83 
41beffc8
[1.424309] 3d20c03f 8009c2a0 2f80 40beffb8 <0fe0> 80010034 bac10008 
38210030
[1.432600] at24 1-0050: 65536 byte 24c512 EEPROM (writable)

Stock 2.6.33 runs flawlessly.  Maybe I should add here that there is no eeprom 
connected to the I2C bus (just a placeholder in the dts file, for a chip on a 
separate board).  Any idea what goes wrong here?

Thanks, Albrecht.


pgpEVjOjQreEN.pgp
Description: PGP signature
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Ian Campbell
On Wed, 2010-03-10 at 18:15 +, Eric W. Biederman wrote: 
> Ian Campbell  writes:
> 
> > On Wed, 2010-03-10 at 17:42 +, Eric W. Biederman wrote:
> >> 
> >> 
> >> Ian Xen in this sense is simply not x86.  irq_cfg is not acpi or
> >> ioapic or anything but x86 specific.  It has everything to do with
> >> having a per cpu vector table of 256 entries and architecturally
> >> receiving a vector number when an interrupt is fired.
> >> 
> >> It totally makes sense for Xen to do something different because
> >> architecturally it has a completely different irq subsystem.
> >
> > OK, so that sounds like you would like the same patchset but without the
> > irq_cfg renaming? or potentially with renaming to x86_blah instead (I'll
> > rework to your preference).
> 
> Currently the renaming really makes it unclear what you are doing and for
> some reason the description of the renaming rubbed me the wrong way.

Sorry, I started off a bit confused and then totally misunderstood what
related to what and I think that came through in the description.

I'll respin without the first patch.

Ian.

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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Jeremy Fitzhardinge

On 03/10/2010 09:42 AM, Eric W. Biederman wrote:

All we need between the Xen and the rest of x86 is a convention
so that we never manage the same irqs.   At least for domU we are
in an either/or situation so I don't see even that being a problem.
   


Dom0 too.  This is part of the work implementing what we discussed a 
while back - Xen now completely owns the local and IO apics, so dom0 
only deals with Xen, not the hardware.  Xen has a completely different 
interrupt setup path, but at least it isn't a mishmash of Xen stuff and 
native APIC stuff.


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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Yinghai Lu
On 03/10/2010 04:51 AM, Ian Campbell wrote:
> On Wed, 2010-03-10 at 12:06 +, Yinghai Lu wrote:
>> On Wed, Mar 10, 2010 at 2:55 AM,   wrote:
>>> From: Ian Campbell 
>>>
>>> Move arch_init_copy_chip_data and arch_free_chip_data into function
>>> pointers in struct irq_chip since they operate on irq_desc->chip_data.
>>>
>>> arch_init_chip_data cannot be moved into struct irq_chip at this time
>>> because irq_desc->chip is not known at the time the irq_desc is
>>> setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
>>> PowerPC, the only other user, whose usage better matches the new name)
>>> and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
>>> call this whenever the IO APIC code allocates a new IRQ.
>>>
>>> I've retained the chip_data behaviour for uv_irq although it isn't
>>> clear to me if these interrupt types support migration or how closely
>>> related to the APIC modes they really are. If it weren't for this the
>>> ioapic_{init,copy,free}_chip_data functions could be static to
>>> io_apic.c.
>>>
>>> I've tested by booting on a 64 bit system, but it's not clear to me
>>> what actions I need to take to actually exercise some of these code
>>> paths.
>>>
>>
>> can you just add another pointer field in irq_desc?
>>
>> some kind of *irq_info etc.
> 
> I think I don't understand what you are suggesting.
> 
> There is already a pointer for irq_chip specific use i.e.
> irq_desc->chip_data. This patchset is just about ensuring that the field
> really is available to any chip implementation rather than just assuming
> it is always used for the acpi chip types (on x86 at least).
> 
> Does adding a second pointer with the same (intended?) semantics as the
> existing one buy us anything?


#ifdef CONFIG_INTR_REMAP
struct irq_2_iommu  *irq_2_iommu;
#endif
struct irq_chip *chip;
struct msi_desc *msi_desc;

we already have that for irq_2_iommu and msi_desc

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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Eric W. Biederman
Ian Campbell  writes:

> On Wed, 2010-03-10 at 10:55 +, i...@hellion.org.uk wrote:
>> 
>> arch_init_chip_data cannot be moved into struct irq_chip at this time
>> because irq_desc->chip is not known at the time the irq_desc is
>> setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
>> PowerPC, the only other user, whose usage better matches the new name)
>> and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
>> call this whenever the IO APIC code allocates a new IRQ.
>
> One idea I had to improve this was to add a struct irq_chip * as a
> parameter to irq_to_desc_alloc_node. The new parameter potentially could
> be NULL for current behaviour. Does that sound like a reasonable
> approach?

I don't follow why we have the restriction that irq_to_desc_alloc_node
must call arch_init_chip_data.  Assuming that requirement to call 
arch_init_chip_data
is valid, passing something into init_one_irq_desc seems appropriate.

Eric

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


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Eric W. Biederman
Yinghai Lu  writes:

> On 03/10/2010 04:51 AM, Ian Campbell wrote:
>> On Wed, 2010-03-10 at 12:06 +, Yinghai Lu wrote:
>>> On Wed, Mar 10, 2010 at 2:55 AM,   wrote:
 From: Ian Campbell 

 Move arch_init_copy_chip_data and arch_free_chip_data into function
 pointers in struct irq_chip since they operate on irq_desc->chip_data.

 arch_init_chip_data cannot be moved into struct irq_chip at this time
 because irq_desc->chip is not known at the time the irq_desc is
 setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
 PowerPC, the only other user, whose usage better matches the new name)
 and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
 call this whenever the IO APIC code allocates a new IRQ.

 I've retained the chip_data behaviour for uv_irq although it isn't
 clear to me if these interrupt types support migration or how closely
 related to the APIC modes they really are. If it weren't for this the
 ioapic_{init,copy,free}_chip_data functions could be static to
 io_apic.c.

 I've tested by booting on a 64 bit system, but it's not clear to me
 what actions I need to take to actually exercise some of these code
 paths.

>>>
>>> can you just add another pointer field in irq_desc?
>>>
>>> some kind of *irq_info etc.
>> 
>> I think I don't understand what you are suggesting.
>> 
>> There is already a pointer for irq_chip specific use i.e.
>> irq_desc->chip_data. This patchset is just about ensuring that the field
>> really is available to any chip implementation rather than just assuming
>> it is always used for the acpi chip types (on x86 at least).
>> 
>> Does adding a second pointer with the same (intended?) semantics as the
>> existing one buy us anything?
>
>
> #ifdef CONFIG_INTR_REMAP
> struct irq_2_iommu  *irq_2_iommu;
> #endif
> struct irq_chip *chip;
> struct msi_desc *msi_desc;
>
> we already have that for irq_2_iommu and msi_desc

Those are at different levels of the hierarchy.  Adding another pointer
for Xen is like having a different iommu and so adding another pointer
to handle that kind of iommu.

Eric

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


[PATCH] powerpc: Build fix for mpc52xx

2010-03-10 Thread Jeff Mahoney
mpc52xx_gpt_wdt_setup is defined as 0, which causes the following build
failure with gcc 4.5, since it's built with -Werror.

arch/powerpc/platforms/52xx/mpc52xx_gpt.c:761:3: error: statement with no effect

Defining it as do { } while(0) fixes the problem.

Signed-off-by: Jeff Mahoney 
---
 arch/powerpc/platforms/52xx/mpc52xx_gpt.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/powerpc/platforms/52xx/mpc52xx_gpt.c
+++ b/arch/powerpc/platforms/52xx/mpc52xx_gpt.c
@@ -711,7 +711,7 @@ static int __devinit mpc52xx_gpt_wdt_ini
return 0;
 }
 
-#define mpc52xx_gpt_wdt_setup(x, y)(0)
+#define mpc52xx_gpt_wdt_setup(x, y)do { } while(0)
 
 #endif /*  CONFIG_MPC5200_WDT  */
 
-- 
Jeff Mahoney
SUSE Labs
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH 05/13] powerpc/476: Add isync after loading mmu and debug spr's

2010-03-10 Thread Dave Kleikamp
On Sun, 2010-03-07 at 15:08 -0800, Hollis Blanchard wrote:
> On Fri, Mar 5, 2010 at 12:43 PM, Dave Kleikamp
>  wrote:
> >
> > powerpc/476: Add isync after loading mmu and debug spr's
> >
> > From: Dave Kleikamp 
> >
> > 476 requires an isync after loading MMU and debug related SPR's.  Some of
> > these are in performance-critical paths and may need to be optimized, but
> > initially, we're playing it safe.
> 
> Why is there sometimes #ifdef CONFIG_PPC_47x, sometimes not, and never
> the cputable infrastructure which was intended for this sort of thing?

The places without an ifdef are either in cpu initialization code, where
the cost of an isync is insignificant or, in one case, in 47x-specific
code.

I was having problems trying to get the cputable infrastructure
compiling in inline assembly in the *.c files, but I could have used
that in some places.  Currently, one can't build with CONFIG_PPC_47x for
a non-47x cpu, and we want to re-evaluate whether we can get by without
these isyncs.  So basically, I plan to clean this up somehow by the time
we have a working unified 44x/47x binary kernel.

Thanks,
Shaggy
-- 
David Kleikamp
IBM Linux Technology Center

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


[PATCH 1/6] arch/powerpc/platforms/pseries: Use kasprintf

2010-03-10 Thread Julia Lawall
From: Julia Lawall 

kasprintf combines kmalloc and sprintf, and takes care of the size
calculation itself.

The semantic patch that makes this change is as follows:
(http://coccinelle.lip6.fr/)

// 
@@
expression a,flag;
expression list args;
statement S;
@@

  a =
-  \(kmalloc\|kzalloc\)(...,flag)
+  kasprintf(flag,args)
  <... when != a
  if (a == NULL || ...) S
  ...>
- sprintf(a,args);
// 

Signed-off-by: Julia Lawall 

---
 arch/powerpc/platforms/pseries/dlpar.c |7 ++-
 1 file changed, 2 insertions(+), 5 deletions(-)

diff -u -p a/arch/powerpc/platforms/pseries/dlpar.c 
b/arch/powerpc/platforms/pseries/dlpar.c
--- a/arch/powerpc/platforms/pseries/dlpar.c
+++ b/arch/powerpc/platforms/pseries/dlpar.c
@@ -78,13 +78,12 @@ static struct device_node *dlpar_parse_c
 * prepend this to the full_name.
 */
name = (char *)ccwa + ccwa->name_offset;
-   dn->full_name = kmalloc(strlen(name) + 2, GFP_KERNEL);
+   dn->full_name = kasprintf(GFP_KERNEL, "/%s", name);
if (!dn->full_name) {
kfree(dn);
return NULL;
}
 
-   sprintf(dn->full_name, "/%s", name);
return dn;
 }
 
@@ -409,15 +408,13 @@ static ssize_t dlpar_cpu_probe(const cha
 * directory of the device tree.  CPUs actually live in the
 * cpus directory so we need to fixup the full_name.
 */
-   cpu_name = kzalloc(strlen(dn->full_name) + strlen("/cpus") + 1,
-  GFP_KERNEL);
+   cpu_name = kasprintf(GFP_KERNEL, "/cpus%s", dn->full_name);
if (!cpu_name) {
dlpar_free_cc_nodes(dn);
rc = -ENOMEM;
goto out;
}
 
-   sprintf(cpu_name, "/cpus%s", dn->full_name);
kfree(dn->full_name);
dn->full_name = cpu_name;
 
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] irq: move some interrupt arch_* functions into struct irq_chip.

2010-03-10 Thread Michael Ellerman
On Wed, 2010-03-10 at 10:55 +, i...@hellion.org.uk wrote:
> From: Ian Campbell 
> 
> Move arch_init_copy_chip_data and arch_free_chip_data into function
> pointers in struct irq_chip since they operate on irq_desc->chip_data.
> 
> arch_init_chip_data cannot be moved into struct irq_chip at this time
> because irq_desc->chip is not known at the time the irq_desc is
> setup. For now rename arch_init_chip_data to arch_init_irq_desc (for
> PowerPC, the only other user, whose usage better matches the new name)
> and on x86 convert arch_init_chip_data to ioapic_init_chip_data and
> call this whenever the IO APIC code allocates a new IRQ.

Ack on the name change, it should be called arch_init_irq_desc(), the
existing name clearly comes from the fact that sparse IRQ was
implemented first on x86, and on x86 that routine init's the chip data
for a new irq_desc.

But semantically arch_init_irq_desc() is the right name, I was just too
lazy to change it when I enabled sparse IRQ for powerpc.

Can't comment on the rest of the patch.

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

Re: 5200B: BUG in 2.6.34-rc1-dirty while loading at24 driver

2010-03-10 Thread Wolfram Sang
Hi Albrecht,

> not sure if this is the right place to ask:  When I boot a custom 5200B (more

Check MAINTAINERS for AT24 ;)

> or less Lite-based) board with Linus' git tree (2.6.34-rc1-dirty), I always
> get the following bug:

Will send a patch in some minutes...

Regards,

   Wolfram

-- 
Pengutronix e.K.   | Wolfram Sang|
Industrial Linux Solutions | http://www.pengutronix.de/  |


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

Need help with using the BDI2K to debug exception handlers

2010-03-10 Thread Bruce_Leonard
Hi all,

Okay, I'm putting on my asbestos underwear and hoping I don't sound too 
stupid.  Here's my sitch: we're seeing an illegal instruction exception, 
but the tracks our diagnostic code we put into the kernel 
program_check_exception() function claims the instruction is perfectly 
good.  So I want to use the BDI to set a BP in the program exception and 
poke around at a HW level rather than a SW level that has gone through an 
unknown number of context switches.

Now I know that using the BDI in exceptions is hard to do for lots of 
reasons, first and foremost among them being the fact that the BDI uses 
SRR0/1 for it's own purposes.  I've been down this path before and know 
there's problems.  But what I'm seeing is even stranger than usual. 

I've replaced the program exception code in arch/powerpc/kernel/head_32.S 
with the following:

. = 0x700
ProgramCheck:
mtspr   SPRN_SPRG1,r9
mtspr   SPRN_SPRG2,r10
mtspr   SPRN_SPRG7,r3
mfspr   r9,SPRN_SRR0
mfspr   r10,SPRN_SRR1
andis.  r3,r10,0x0008   /* is it an illegal instruction? 
*/
beq 1f  /* no so continue */
2:  xor r3,r3,r3/* dummy instruction */
b   2b  /* loop forever */
1:  mfspr   r10,SPRN_SPRG2
mfspr   r9,SPRN_SPRG1
EXCEPTION_PROLOG;
addir3,r1,STACK_FRAME_OVERHEAD;
EXC_XFER_STD(0x700, program_check_exception);

(Before everyone flames me, yes I know there's a bug, I didn't restore r3 
before continuing to the program_check_exception; it's immaterial to the 
problem at hand because I don't really care if I ever successfully get 
into program_check_exception.)  The purpose of all this is to save SRR0/1 
into GPRs so the BDI doesn't whack them, check to see if the exception is 
being call because of an illegal instruction, continue on if not, and 
provide a place to hang a breakpoint if it is an illegal instruction.  So 
I load up this code, connect to the BDI, set a HW BP on the branch 
instruction following the line labeled '2', tell it to go and sit back to 
wait.

Eventually our problem occurs and the BDI says "TARGET: stopped" or some 
such, indicating it's hit the breakpoint.  This is where things get 
strange and I need help.  At this point the BDI output from the telnet 
session says the debug entry cause is  and the current PC is 
0x6fc, one instruction before the program exception.  When I dump the 
registers r9 and r10 contain nothing the even remotely resemble SRR0/1. 
The link register contains a valid _physical_ address (though I would 
expect it to contain a virtual address from the last 'bl' instruction) but 
when I dump the memory pointed to by LR it contains all zeros, not PPC 
machine code.  It looks like my code isn't even running even though it 
seems I've hit the breakpoint.  It's almost as if the BDI recognizes I'm 
entering an exception that I've set a BP in and halts just before 
executing the exception code.  I'm not sure I believe it, but that's how 
it appears.

Has anyone seen this or have any suggestion on how I can get the BDI to 
quit 'helping' me and just stop where I tell it to in an exception 
handler?

Thanks

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

PowerPC 85xx board are caused die by Commit: 864b9e6fd76489aab422bac62162f57c52e06ed8(powerpc: Use lwarx/ldarx hint in bit locks)

2010-03-10 Thread Andrew Liu
Hi Guys:
I have done several experiments on  fsl_8548cds and fsl_p2020rdb, pinpointed
the commit: 864b9e6fd76489aab422bac62162f57c52e06ed8(powerpc: Use
lwarx/ldarx hint in bit locks)  cause the bootup stalledd.

"
Filename 'fsl_8548cds/uImage'.
Load address: 0x100
Loading: #
 ###
done
Bytes transferred = 1526546 (174b12 hex)
Speed: 100, full duplex
Using eTSEC0 device
Filename 'sliu/fsl_8548cds/mpc8548cds.dtb'.
Load address: 0xc0
Loading: #
done
Bytes transferred = 9993 (2709 hex)
## Booting image at 0100 ...
   Image Name:   Linux-2.6.34-rc1-5-g522dba7
   Image Type:   PowerPC Linux Kernel Image (gzip compressed)
   Data Size:1526482 Bytes =  1.5 MB
   Load Address: 
   Entry Point:  
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
   Booting using the fdt at 0xc0
   Loading Device Tree to 007fb000, end 007fd708 ... OK
"

I guess all 85xx or booke board has this issue.

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

Re: PowerPC 85xx board are caused die by Commit: 864b9e6fd76489aab422bac62162f57c52e06ed8(powerpc: Use lwarx/ldarx hint in bit locks)

2010-03-10 Thread Kumar Gala

On Mar 10, 2010, at 9:20 PM, Andrew Liu wrote:

> Hi Guys:
> I have done several experiments on  fsl_8548cds and fsl_p2020rdb, pinpointed 
> the commit: 864b9e6fd76489aab422bac62162f57c52e06ed8(powerpc: Use lwarx/ldarx 
> hint in bit locks)  cause the bootup stalledd.
> 
> "
> Filename 'fsl_8548cds/uImage'.
> Load address: 0x100
> Loading: #
>  ###
> done
> Bytes transferred = 1526546 (174b12 hex)
> Speed: 100, full duplex
> Using eTSEC0 device
> Filename 'sliu/fsl_8548cds/mpc8548cds.dtb'.
> Load address: 0xc0
> Loading: #
> done
> Bytes transferred = 9993 (2709 hex)
> ## Booting image at 0100 ...
>Image Name:   Linux-2.6.34-rc1-5-g522dba7
>Image Type:   PowerPC Linux Kernel Image (gzip compressed)
>Data Size:1526482 Bytes =  1.5 MB
>Load Address: 
>Entry Point:  
>Verifying Checksum ... OK
>Uncompressing Kernel Image ... OK
>Booting using the fdt at 0xc0
>Loading Device Tree to 007fb000, end 007fd708 ... OK
> "
>  
> I guess all 85xx or booke board has this issue.

that's very odd since __PPC_EH should be ignored on PPC32 and thus 85xx.

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


[PATCH] powerpc/85xx: Make sure lwarx hint isn't set on ppc32

2010-03-10 Thread Kumar Gala
e500v1/v2 based chips will treat any reserved field being set in an
opcode as illegal.  Thus always setting the hint in the opcode is
a bad idea.

Anton should be kept away from the powerpc opcode map.

Signed-off-by: Kumar Gala 
---
 arch/powerpc/include/asm/ppc-opcode.h |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/include/asm/ppc-opcode.h 
b/arch/powerpc/include/asm/ppc-opcode.h
index aea7147..d553bbe 100644
--- a/arch/powerpc/include/asm/ppc-opcode.h
+++ b/arch/powerpc/include/asm/ppc-opcode.h
@@ -25,7 +25,7 @@
 #define PPC_INST_LDARX 0x7ca8
 #define PPC_INST_LSWI  0x7c0004aa
 #define PPC_INST_LSWX  0x7c00042a
-#define PPC_INST_LWARX 0x7c29
+#define PPC_INST_LWARX 0x7c28
 #define PPC_INST_LWSYNC0x7c2004ac
 #define PPC_INST_LXVD2X0x7c000698
 #define PPC_INST_MCRXR 0x7c000400
@@ -62,8 +62,8 @@
 #define __PPC_T_TLB(t) (((t) & 0x3) << 21)
 #define __PPC_WC(w)(((w) & 0x3) << 21)
 /*
- * Only use the larx hint bit on 64bit CPUs. Once we verify it doesn't have
- * any side effects on all 32bit processors, we can do this all the time.
+ * Only use the larx hint bit on 64bit CPUs. e500v1/v2 based CPUs will treat a
+ * larx with EH set as an illegal instruction.
  */
 #ifdef CONFIG_PPC64
 #define __PPC_EH(eh)   (((eh) & 0x1) << 0)
-- 
1.6.0.6

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


Re: PowerPC 85xx board are caused die by Commit: 864b9e6fd76489aab422bac62162f57c52e06ed8(powerpc: Use lwarx/ldarx hint in bit locks)

2010-03-10 Thread Kumar Gala

On Mar 10, 2010, at 11:20 PM, Kumar Gala wrote:

> 
> On Mar 10, 2010, at 9:20 PM, Andrew Liu wrote:
> 
>> Hi Guys:
>> I have done several experiments on  fsl_8548cds and fsl_p2020rdb, pinpointed 
>> the commit: 864b9e6fd76489aab422bac62162f57c52e06ed8(powerpc: Use 
>> lwarx/ldarx hint in bit locks)  cause the bootup stalledd.
>> 
>> "
>> Filename 'fsl_8548cds/uImage'.
>> Load address: 0x100
>> Loading: #
>> ###
>> done
>> Bytes transferred = 1526546 (174b12 hex)
>> Speed: 100, full duplex
>> Using eTSEC0 device
>> Filename 'sliu/fsl_8548cds/mpc8548cds.dtb'.
>> Load address: 0xc0
>> Loading: #
>> done
>> Bytes transferred = 9993 (2709 hex)
>> ## Booting image at 0100 ...
>>   Image Name:   Linux-2.6.34-rc1-5-g522dba7
>>   Image Type:   PowerPC Linux Kernel Image (gzip compressed)
>>   Data Size:1526482 Bytes =  1.5 MB
>>   Load Address: 
>>   Entry Point:  
>>   Verifying Checksum ... OK
>>   Uncompressing Kernel Image ... OK
>>   Booting using the fdt at 0xc0
>>   Loading Device Tree to 007fb000, end 007fd708 ... OK
>> "
>> 
>> I guess all 85xx or booke board has this issue.
> 
> that's very odd since __PPC_EH should be ignored on PPC32 and thus 85xx.

Found the issue and posted a fix.

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


Re: Freescale MPC5554 device tree (was: cross-compiling Linux for PowerPC e200 core?)

2010-03-10 Thread Németh Márton
Grant Likely wrote:
> 2010/3/9 Németh Márton :
>> Hi,
>> Grant Likely wrote:
>>> 2010/3/8 Németh Márton :
[snip]
 As far as I could find out I'll need to create a device tree as documented 
 in
 the linux/Documentation/powerpc/booting-without-of.txt file.
>>> Yes, you'll need to create a device tree file for the board.  Again,
>>> start from an existing 5200 .dts file.  You won't need very much in it
>>> to get started.  I'd be happy to help you get the structure right.
>> I tried to create a first draft of the deveice tree for MPC5554. It is
>> compilable with dtc. I based this .dts file on Figure 1-1 on page 1-3 and
>> Table 1-2 on page 1-21 of 
>> http://www.freescale.com/files/32bit/doc/ref_manual/MPC5553_MPC5554_RM.pdf .
>>
>> I'm not sure about the following points:
>> 1. Where should be the on-chip FLASH described? This memory is read-only from
>>   view of software and can be used to store read-only data or execute code 
>> directly
>>   from there.
> 
> Hang it off the xbar node.  Name it flash@, and use
> 'compatible = "fsl,mpc5554-flash";'
> 
>> 2. Should the co-processor (eTPU in this case) also listed in section "cpus"
>>   or not? This co-processor is not able to run code like the e200z6.
> 
> No, this is a device.  Hang it off the peripheral bridge a node.
> 
>> 3. There are three on-chip buses on MPC5554:
>>   - Crossbar Switch (XBAR)
>>   - Peripheral Bridge A (PBRIDGE_A)
>>   - Peripheral Bridge B (PBRIDGE_B)
>>   I used PBRIDGE_A and PRIDGE_B to create two /soc entries. Is this 
>> possible?
> 
> the soc5200 naming was poorly chosen when the 5200 device tree was
> written.  Use something like this:
> 
> xbar@ {
> compatible = "fsl,mpc5554-xbar";
> #address-cells = <1>;
> #size-cells = <1>;
> ranges = <[put the translation ranges in here]>;
> reg = ;
> 
> bridge@ {
> compatible = "fsl,mpc5554-pbridge-a";
> #address-cells = <1>;
> #size-cells = <1>;
> ranges = <[put the translation ranges in here]>;
> reg = ;
> [... child device nodes ...]
> };
> bridge@ {
> compatible = "fsl,mpc5554-pbridge-b";
> #address-cells = <1>;
> #size-cells = <1>;
> ranges = <[put the translation ranges in here]>;
> reg = ;
> [... child device nodes ...]
> };
> };
> 
> The idea is to use generic names for the node names, and identify
> exactly what the device is by using the "compatible" property.  Also,
> the aim is to build up a tree describing the interconnection of device
> from the perspective of the OS on the CPU.  ie.  the full physical
> address space is represented by the root node of the tree, and
> everything else hangs off that.
> 
>> 4. There are modules which have multiple instances at different base 
>> addresses. These
>>   are DSPI, SCI and FlexCAN. I used the same name for them but with 
>> different addresses.
>>   Is this correct?
> 
> yes.
[snip]

Here is the next draft version of the Freescale MPC5554 device tree.

I'm not quite sure whether the mem...@4000 should go under xbar or stay
directly under the root node.

The second problem I faced with was that XBAR covers the whole address range.
However, if I specify "ranges = <0 0x 0x1>;" then I get an
error message because of the too big length value:

| DTC: dts->dts  on file "/usr/src/linux/arch/powerpc/boot/dts/mpc5554.dts"
| /usr/src/linux/arch/powerpc/boot/dts/mpc5554.dts:51 literal out of range
| FATAL ERROR: Syntax error parsing input tree

I tried to solve this problem by assuming that leaving out the "ranges = ..."
means the whole range. Is this correct?

Regards,

Márton Németh
---
From: Márton Németh 

Add device tree for Freescale MPC5554.

Signed-off-by: Márton Németh 
---
diff -uprN linux-2.6.33.orig/arch/powerpc/boot/dts/mpc5554.dts 
linux/arch/powerpc/boot/dts/mpc5554.dts
--- linux-2.6.33.orig/arch/powerpc/boot/dts/mpc5554.dts 1970-01-01 
01:00:00.0 +0100
+++ linux/arch/powerpc/boot/dts/mpc5554.dts 2010-03-11 07:01:29.0 
+0100
@@ -0,0 +1,188 @@
+/*
+ * Freescale MPC5554 Device Tree Source
+ *
+ * Based on MPC5553/5554 Microcontroller Reference Manual, Rev. 4.0, 04/2007
+ * http://www.freescale.com/files/32bit/doc/ref_manual/MPC5553_MPC5554_RM.pdf
+ *
+ * Copyright 2010 Márton Németh
+ * Márton Németh 
+ *
+ * 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.
+ */
+
+/dts-v1/;
+
+/ {
+   model = "MPC5554";
+   compatible = "fsl,MPC5554EVB";  // Freescale MPC5554 Evaluation 
Board
+   #address-cells = <1>;
+   #size-cells = <1>;
+
+   cpus {
+   #address-cells = <1>;
+

Re: Freescale MPC5554 device tree (was: cross-compiling Linux for PowerPC e200 core?)

2010-03-10 Thread David Gibson
On Thu, Mar 11, 2010 at 07:11:56AM +0100, Németh Márton wrote:
[snip]
> +/dts-v1/;
> +
> +/ {
> + model = "MPC5554";
> + compatible = "fsl,MPC5554EVB";  // Freescale MPC5554 Evaluation 
> Board
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + cpus {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + PowerPC,5...@0 {

Modern best practice is to have the cpu nodes named just "c...@xxx",
and put the PowerPC, into the compatible property.

> + device_type = "cpu";
> + reg = <0>;
> + d-cache-line-size = <32>;
> + i-cache-line-size = <32>;
> + d-cache-size = <0x8000>;// L1, 32KiB
> + i-cache-size = <0x8000>;// L1, 32KiB
> + timebase-frequency = <0>;   // from bootloader
> + bus-frequency = <0>;// from bootloader
> + clock-frequency = <0>;  // from bootloader
> + };
> + };
> +
> + mem...@4000 {
> + device_type = "memory";
> + reg = <0x4000 0x1>; // 32KiB internal SRAM
> + };
> +
> + x...@1ff04000 { // System Bus Crossbar Switch (XBAR)
> + compatible = "fsl,mpc5554-xbar";
> + #address-cells = <1>;
> + #size-cells = <1>;
> + // The full memory range is covered by XBAR
> +//   ranges = <0 0x 0x1>;

If you want all addresses to be translated by the bus you need an
empty ranges property, not *no* ranges property.  No ranges property
indicates that addresses cannot be directly translated across the
bridge, which is not, I think, what you intend.

> + reg = <0xfff04000 0x4000>;

The unit address '@1ff04000' does not match your reg property 0xfff04000.

> +
> + fl...@ {// read-only FLASH

Unit addresses are not 0 padded, so this should be just 'fl...@0'.

> + compatible = "fsl,mpc5554-flash";
> + reg = <0x 0x20>;// 2MiB internal FLASH
> + };
> +
> + bri...@c000 {
> + compatible = "fsl,mpc5554-pbridge-a";
> + #address-cells = <1>;
> + #size-cells = <1>;
> + ranges = <0 0xc000 0x2000>;
> + reg = <0xc3f0 0x4000>;

The unit address is based on 'reg' (if present) not ranges, so it
should be bri...@c3f0.  Likewise for the other bridge below.

-- 
David Gibson| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: Problem with PCI bus rescan on 460EX

2010-03-10 Thread Felix Radensky

Hi Alex,

Resending, previous attempt was erroneously send as HTML.

Thanks a lot for replying.

Alex Chiang wrote:

* Felix Radensky :
  

The problem arises when device is plugged in after boot. After doing
echo 1 > /sys/bus/pci/rescan
the device is identified, but bridge memory window is not allocated,
and reads from device memory regions return 0x. Below is
relevant output:



Do you need firmware support on your platform for hotplug?
  

I don't think so, but I've added powerpc guys to CC to make sure.

Can you please send full dmesg during successful boot, full dmesg
log during unsuccessful rescan, and contents of /proc/iomem and
/proc/ioports during success and failure cases?

Be sure you have PCI_CONFIG_DEBUG turned on.
  

Attached. I really appreciate your help. Thanks a lot.

Felix.
Linux version 2.6.33 (fe...@felix-laptop.lan) (gcc version 4.2.2) #5 Thu Mar 11 
09:35:52 IST 2010
Found legacy serial port 0 for /plb/opb/ser...@ef600300
  mem=4ef600300, taddr=4ef600300, irq=0, clk=7407407, speed=0
Found legacy serial port 1 for /plb/opb/ser...@ef600400
  mem=4ef600400, taddr=4ef600400, irq=0, clk=7407407, speed=0
Found legacy serial port 2 for /plb/opb/ser...@ef600500
  mem=4ef600500, taddr=4ef600500, irq=0, clk=7407407, speed=0
Found legacy serial port 3 for /plb/opb/ser...@ef600600
  mem=4ef600600, taddr=4ef600600, irq=0, clk=7407407, speed=0
Top of RAM: 0x3000, Total RAM: 0x3000
Memory hole size: 0MB
Zone PFN ranges:
  DMA  0x -> 0x0003
  Normal   0x0003 -> 0x0003
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0: 0x -> 0x0003
On node 0 totalpages: 196608
free_area_init_node: node 0, pgdat c035e76c, node_mem_map c0388000
  DMA zone: 1536 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 195072 pages, LIFO batch:31
MMU: Allocated 1088 bytes of context maps for 255 contexts
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 195072
Kernel command line: root=/dev/nfs rw nfsroot=10.0.0.10:/opt/eldk/ppc_4xxFP 
ip=10.0.0.30:10.0.0.10:10.0.0.138:255.0.0.0:smbe460:eth0:off panic=1 
console=ttyS0,115200
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 775552k/786432k available (3364k kernel code, 10604k reserved, 116k 
data, 128k bss, 144k init)
Kernel virtual memory layout:
  * 0xfffdf000..0xf000  : fixmap
  * 0xfde0..0xfe00  : consistent mem
  * 0xfde0..0xfde0  : early ioremap
  * 0xf100..0xfde0  : vmalloc & ioremap
SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Hierarchical RCU implementation.
NR_IRQS:512 nr_irqs:512
UIC0 (32 IRQ sources) at DCR 0xc0
UIC1 (32 IRQ sources) at DCR 0xd0
  alloc irq_desc for 30 on node 0
  alloc kstat_irqs on node 0
irq: irq 30 on host /interrupt-controller0 mapped to virtual irq 30
UIC2 (32 IRQ sources) at DCR 0xe0
  alloc irq_desc for 16 on node 0
  alloc kstat_irqs on node 0
irq: irq 10 on host /interrupt-controller0 mapped to virtual irq 16
UIC3 (32 IRQ sources) at DCR 0xf0
  alloc irq_desc for 17 on node 0
  alloc kstat_irqs on node 0
irq: irq 16 on host /interrupt-controller0 mapped to virtual irq 17
time_init: decrementer frequency = 1000.12 MHz
time_init: processor frequency   = 1000.12 MHz
clocksource: timebase mult[40] shift[22] registered
clockevent: decrementer mult[8019] shift[31] cpu[0]
Mount-cache hash table entries: 512
NET: Registered protocol family 16
  alloc irq_desc for 18 on node 0
  alloc kstat_irqs on node 0
irq: irq 11 on host /interrupt-controller1 mapped to virtual irq 18
256k L2-cache enabled
PCI host bridge /plb/p...@c0ec0 (primary) ranges:
 MEM 0x000d8000..0x000d -> 0x8000 
 MEM 0x000c0ee0..0x000c0eef -> 0x 
  IO 0x000c0800..0x000c0800 -> 0x
 Removing ISA hole at 0x000c0ee0
4xx PCI DMA offset set to 0x
/plb/p...@c0ec0: Legacy ISA memory support enabled
PCI: Probing PCI hardware
pci_bus :00: scanning bus
pci :00:02.0: found [3388:0020] class 000604 header type 01
pci :00:02.0: calling pcibios_fixup_resources+0x0/0xf4
pci :00:02.0: calling fixup_ppc4xx_pci_bridge+0x0/0x154
pci :00:02.0: calling quirk_resource_alignment+0x0/0x200
pci :00:02.0: supports D1 D2
pci :00:02.0: PME# supported from D0 D1 D2 D3hot
pci :00:02.0: PME# disabled
pci_bus :00: fixups for bus
pci :00:02.0: scanning behind bridge, config 00, pass 0
pci :00:02.0: bus configuration invalid, reconfiguring
pci :00:02.0: scanning behind bridge, config 00, pass 1
pci_bus :01: scanning bus
pci_bus :01: fixups for bus
pci :00:02.0: PCI bridge to [bus 01-ff]
pci :00:02.0:   bridge window [io  0x-0x0fff]
pci :00:02.0:   bridge window [mem 0x-0x000f]
pci :0