David Laight | 25 May 15:29
Favicon

pread() and pwrite() system calls

We have a system with linux 2.6.32 and the somewhat archaic
uClibc 0.9.27 (but I'm not sure the current version is
any better, and I think there are binary compatibility
if we update).

I've just discovered that pread() is 'implemented'
by using 3 lseek() system calls and read().
(the same is true for the 64bit versions).

I thought that pread() was supposed to be atomic
(so usable concurrently by multiple threads) which
means that this implementation is completely broken.

I've not looked to see what glibc does.

I can see that part of the problem is the alignment
of the 64bit value on the argument list of syscall()
(when the register save area is cast to a sycall
argument structure).
But it also looks as though the uClibc syscall()
stub can only pass 5 arguments in registers, and
pread() (with an aligned 64bit offset) requires 6.

The ucLibc source seems to be predicated by __NR_pread,
but if that were defined it would try to call
__syscall_pread() and I can't find that anywhere.

A special pread/pwrite asm stub that just copies
r7 to r0 could be used.

(Continue reading)

Wrobel Heinz-R39252 | 24 May 22:05
Favicon

module loading issue/flaw in busy memory situation?

Hi,

 

let’s assume a module gets loaded into an already busy system, and the “.init.text” section with the __init function gets loaded into one memory region, and the normal “.text” section gets loaded into a totally different memory region.

Now assume that both regions are >32MB apart in addressing, so that a call from the __init .init.text function to any function in .text requires a trampoline as set up by the do_plt_call() function in arch/kernel/module*.c

So far so good for user code.

 

Now assume that the __init function is not trivial and will require register save/restore functions in prologue/epilogue with such calls generated by gcc, e.g., the __init function calls _rest32gpr_28_x() in the epilogue. This restore functions however is in the .text section due to the static link of the normal libs.

 

Now we have the __init function calling the trampoline, which is destroying r11. The trampoline is then jumping to the register restore function which relies on r11 still being intact, which it now isn’t anymore.

Net result is a crash because the trampoline ABI conflicts with the register restore ABI and you get a case of garbage in leading to garbage out.

 

This situation has apparently occurred based on the debug results I have here.

 

In the general case of module development it seems unpredictable if gcc will actually call a register restore function from the __init function, or if the sections get loaded to require a trampoline, so for any non-trivial function in non-trivial memory setups, a crash would have to be expected, depending on the time of day and moon phase when the module gets loaded.

 

Is this a fundamental flaw in the interaction of the module section use specification and the module load mechanism with the ABI definition?

 

Or am I missing some incorrect setup or requirement for __init functions that I should deal with?

 

Thanks,

 

Heinz

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev <at> lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev
b29983 | 24 May 11:08
Favicon

[PATCH 1/2] powerpc/85xx: Add P1024rdb dts support

From: Tang Yuantian <Yuantian.Tang <at> freescale.com>

Signed-off-by: Jin Qing <b24347 <at> freescale.com>
Signed-off-by: Li Yang <leoli <at> freescale.com>
Signed-off-by: Tang Yuantian <Yuantian.Tang <at> freescale.com>
---
 arch/powerpc/boot/dts/p1024rdb.dtsi    |  228 ++++++++++++++++++++++++++++++++
 arch/powerpc/boot/dts/p1024rdb_32b.dts |   87 ++++++++++++
 arch/powerpc/boot/dts/p1024rdb_36b.dts |   87 ++++++++++++
 3 files changed, 402 insertions(+), 0 deletions(-)
 create mode 100644 arch/powerpc/boot/dts/p1024rdb.dtsi
 create mode 100644 arch/powerpc/boot/dts/p1024rdb_32b.dts
 create mode 100644 arch/powerpc/boot/dts/p1024rdb_36b.dts

diff --git a/arch/powerpc/boot/dts/p1024rdb.dtsi b/arch/powerpc/boot/dts/p1024rdb.dtsi
new file mode 100644
index 0000000..b05dcb4
--- /dev/null
+++ b/arch/powerpc/boot/dts/p1024rdb.dtsi
@@ -0,0 +1,228 @@
+/*
+ * P1024 RDB Device Tree Source stub (no addresses or top-level ranges)
+ *
+ * Copyright 2012 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+&lbc {
+	nor <at> 0,0 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "cfi-flash";
+		reg = <0x0 0x0 0x1000000>;
+		bank-width = <2>;
+		device-width = <1>;
+
+		partition <at> 0 {
+			/* This location must not be altered  */
+			/* 256KB for Vitesse 7385 Switch firmware */
+			reg = <0x0 0x00040000>;
+			label = "NOR Vitesse-7385 Firmware";
+			read-only;
+		};
+
+		partition <at> 40000 {
+			/* 256KB for DTB Image */
+			reg = <0x00040000 0x00040000>;
+			label = "NOR DTB Image";
+		};
+
+		partition <at> 80000 {
+			/* 3.5 MB for Linux Kernel Image */
+			reg = <0x00080000 0x00380000>;
+			label = "NOR Linux Kernel Image";
+		};
+
+		partition <at> 400000 {
+			/* 11MB for JFFS2 based Root file System */
+			reg = <0x00400000 0x00b00000>;
+			label = "NOR JFFS2 Root File System";
+		};
+
+		partition <at> f00000 {
+			/* This location must not be altered  */
+			/* 512KB for u-boot Bootloader Image */
+			/* 512KB for u-boot Environment Variables */
+			reg = <0x00f00000 0x00100000>;
+			label = "NOR U-Boot Image";
+			read-only;
+		};
+	};
+
+	nand <at> 1,0 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "fsl,p1020-fcm-nand",
+				 "fsl,elbc-fcm-nand";
+		reg = <0x1 0x0 0x40000>;
+
+		partition <at> 0 {
+			/* This location must not be altered  */
+			/* 1MB for u-boot Bootloader Image */
+			reg = <0x0 0x00100000>;
+			label = "NAND U-Boot Image";
+			read-only;
+		};
+
+		partition <at> 100000 {
+			/* 1MB for DTB Image */
+			reg = <0x00100000 0x00100000>;
+			label = "NAND DTB Image";
+		};
+
+		partition <at> 200000 {
+			/* 4MB for Linux Kernel Image */
+			reg = <0x00200000 0x00400000>;
+			label = "NAND Linux Kernel Image";
+		};
+
+		partition <at> 600000 {
+			/* 4MB for Compressed Root file System Image */
+			reg = <0x00600000 0x00400000>;
+			label = "NAND Compressed RFS Image";
+		};
+
+		partition <at> a00000 {
+			/* 15MB for JFFS2 based Root file System */
+			reg = <0x00a00000 0x00f00000>;
+			label = "NAND JFFS2 Root File System";
+		};
+
+		partition <at> 1900000 {
+			/* 7MB for User Writable Area */
+			reg = <0x01900000 0x00700000>;
+			label = "NAND Writable User area";
+		};
+	};
+};
+
+&soc {
+	spi <at> 7000 {
+		flash <at> 0 {
+			#address-cells = <1>;
+			#size-cells = <1>;
+			compatible = "spansion,m25p80";
+			reg = <0>;
+			spi-max-frequency = <40000000>;
+
+			partition <at> 0 {
+				/* 512KB for u-boot Bootloader Image */
+				reg = <0x0 0x00080000>;
+				label = "SPI U-Boot Image";
+				read-only;
+			};
+
+			partition <at> 80000 {
+				/* 512KB for DTB Image */
+				reg = <0x00080000 0x00080000>;
+				label = "SPI DTB Image";
+			};
+
+			partition <at> 100000 {
+				/* 4MB for Linux Kernel Image */
+				reg = <0x00100000 0x00400000>;
+				label = "SPI Linux Kernel Image";
+			};
+
+			partition <at> 500000 {
+				/* 4MB for Compressed RFS Image */
+				reg = <0x00500000 0x00400000>;
+				label = "SPI Compressed RFS Image";
+			};
+
+			partition <at> 900000 {
+				/* 7MB for JFFS2 based RFS */
+				reg = <0x00900000 0x00700000>;
+				label = "SPI JFFS2 RFS";
+			};
+		};
+	};
+
+	i2c <at> 3000 {
+		rtc <at> 68 {
+			compatible = "dallas,ds1339";
+			reg = <0x68>;
+		};
+	};
+
+	usb <at> 22000 {
+		phy_type = "ulpi";
+	};
+
+	usb <at> 23000 {
+		status = "disabled";
+	};
+
+	mdio <at> 24000 {
+		phy0: ethernet-phy <at> 0 {
+			interrupts = <3 1 0 0>;
+			reg = <0x0>;
+		};
+		phy1: ethernet-phy <at> 1 {
+			interrupts = <2 1 0 0>;
+			reg = <0x1>;
+		};
+		phy2: ethernet-phy <at> 2 {
+			interrupts = <1 1 0 0>;
+			reg = <0x2>;
+		};
+	};
+
+	mdio <at> 25000 {
+		tbi0: tbi-phy <at> 11 {
+			reg = <0x11>;
+			device_type = "tbi-phy";
+		};
+	};
+
+	mdio <at> 26000 {
+		tbi1: tbi-phy <at> 11 {
+			reg = <0x11>;
+			device_type = "tbi-phy";
+		};
+	};
+
+	ethernet <at> b0000 {
+		phy-handle = <&phy2>;
+		phy-connection-type = "rgmii-id";
+	};
+
+	ethernet <at> b1000 {
+		phy-handle = <&phy0>;
+		tbi-handle = <&tbi0>;
+		phy-connection-type = "sgmii";
+	};
+
+	ethernet <at> b2000 {
+		phy-handle = <&phy1>;
+		phy-connection-type = "rgmii-id";
+	};
+};
diff --git a/arch/powerpc/boot/dts/p1024rdb_32b.dts b/arch/powerpc/boot/dts/p1024rdb_32b.dts
new file mode 100644
index 0000000..90e803e
--- /dev/null
+++ b/arch/powerpc/boot/dts/p1024rdb_32b.dts
@@ -0,0 +1,87 @@
+/*
+ * P1024 RDB 32Bit Physical Address Map Device Tree Source
+ *
+ * Copyright 2012 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/include/ "fsl/p1020si-pre.dtsi"
+/ {
+	model = "fsl,P1024RDB";
+	compatible = "fsl,P1024RDB";
+
+	memory {
+		device_type = "memory";
+	};
+
+	lbc: localbus <at> ffe05000 {
+		reg = <0x0 0xffe05000 0 0x1000>;
+		ranges = <0x0 0x0 0x0 0xef000000 0x01000000
+			  0x1 0x0 0x0 0xff800000 0x00040000>;
+	};
+
+	soc: soc <at> ffe00000 {
+		ranges = <0x0 0x0 0xffe00000 0x100000>;
+	};
+
+	pci0: pcie <at> ffe09000 {
+		reg = <0x0 0xffe09000 0 0x1000>;
+		ranges = <0x2000000 0x0 0xe0000000 0x0 0xa0000000 0x0 0x20000000
+			  0x1000000 0x0 0x00000000 0x0 0xffc10000 0x0 0x10000>;
+		pcie <at> 0 {
+			ranges = <0x2000000 0x0 0xe0000000
+				  0x2000000 0x0 0xe0000000
+				  0x0 0x20000000
+
+				  0x1000000 0x0 0x0
+				  0x1000000 0x0 0x0
+				  0x0 0x100000>;
+		};
+	};
+
+	pci1: pcie <at> ffe0a000 {
+		reg = <0x0 0xffe0a000 0 0x1000>;
+		ranges = <0x2000000 0x0 0xe0000000 0x0 0x80000000 0x0 0x20000000
+			  0x1000000 0x0 0x00000000 0x0 0xffc00000 0x0 0x10000>;
+		pcie <at> 0 {
+			reg = <0x0 0x0 0x0 0x0 0x0>;
+			ranges = <0x2000000 0x0 0xe0000000
+				  0x2000000 0x0 0xe0000000
+				  0x0 0x20000000
+
+				  0x1000000 0x0 0x0
+				  0x1000000 0x0 0x0
+				  0x0 0x100000>;
+		};
+	};
+};
+
+/include/ "p1024rdb.dtsi"
+/include/ "fsl/p1020si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/p1024rdb_36b.dts b/arch/powerpc/boot/dts/p1024rdb_36b.dts
new file mode 100644
index 0000000..3656825
--- /dev/null
+++ b/arch/powerpc/boot/dts/p1024rdb_36b.dts
@@ -0,0 +1,87 @@
+/*
+ * P1024 RDB 36Bit Physical Address Map Device Tree Source
+ *
+ * Copyright 2012 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/include/ "fsl/p1020si-pre.dtsi"
+/ {
+	model = "fsl,P1024RDB";
+	compatible = "fsl,P1024RDB";
+
+	memory {
+		device_type = "memory";
+	};
+
+	lbc: localbus <at> fffe05000 {
+		reg = <0xf 0xffe05000 0 0x1000>;
+		ranges = <0x0 0x0 0xf 0xef000000 0x01000000
+			  0x1 0x0 0xf 0xff800000 0x00040000>;
+	};
+
+	soc: soc <at> fffe00000 {
+		ranges = <0x0 0xf 0xffe00000 0x100000>;
+	};
+
+	pci0: pcie <at> fffe09000 {
+		reg = <0xf 0xffe09000 0 0x1000>;
+		ranges = <0x2000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000
+			  0x1000000 0x0 0x00000000 0xf 0xffc10000 0x0 0x10000>;
+		pcie <at> 0 {
+			ranges = <0x2000000 0x0 0xe0000000
+				  0x2000000 0x0 0xe0000000
+				  0x0 0x20000000
+
+				  0x1000000 0x0 0x0
+				  0x1000000 0x0 0x0
+				  0x0 0x100000>;
+		};
+	};
+
+	pci1: pcie <at> fffe0a000 {
+		reg = <0xf 0xffe0a000 0 0x1000>;
+		ranges = <0x2000000 0x0 0xe0000000 0xc 0x00000000 0x0 0x20000000
+			  0x1000000 0x0 0x00000000 0xf 0xffc00000 0x0 0x10000>;
+		pcie <at> 0 {
+			reg = <0x0 0x0 0x0 0x0 0x0>;
+			ranges = <0x2000000 0x0 0xe0000000
+				  0x2000000 0x0 0xe0000000
+				  0x0 0x20000000
+
+				  0x1000000 0x0 0x0
+				  0x1000000 0x0 0x0
+				  0x0 0x100000>;
+		};
+	};
+};
+
+/include/ "p1024rdb.dtsi"
+/include/ "fsl/p1020si-post.dtsi"
--

-- 
1.6.4
Favicon
Gravatar

Oops with Radeon/Uninorth on Maple

Hello, colleagues,

I'm trying to enable an AGP slot (again) on my Maple board (dual 
PPC970FX board, with CPC925 (U3H) north bridge).

  For now I'm stuck with a problem: I use radeon card, drm-radeon driver 
with KMS.

If I force drm-radeon to think about a card as about PCI card (by 
commenting corresponding lines in drm_radeon_kms.c), everything works, I 
get framebuffer, working X11, etc. If I enable agpgart-uninorth driver
and RADEON_IS_AGP flag in drm driver, I get an Oops early during the 
bootstrap. Relevant part of the log (I can send full dmesg of normal 
bootstrap or this oops on request, if that would help).

[    2.820647] Linux agpgart interface v0.103
[    2.824909] agpgart-uninorth 0000:f0:0b.0: Apple U3H chipset
[    2.830668] agpgart-uninorth 0000:f0:0b.0: Found device u3, rev 35
[    2.843611] agpgart-uninorth 0000:f0:0b.0: configuring for size idx: 64
[    2.850638] agpgart-uninorth 0000:f0:0b.0: AGP aperture is 256M @ 0x0
[    2.857646] [drm] Initialized drm 1.1.0 20060810
[    2.862567] [drm] radeon defaulting to kernel modesetting.
[    2.868091] [drm] radeon kernel modesetting enabled.
[    2.873222] radeon 0000:f0:10.0: enabling device (0000 -> 0003)
[    2.880311] radeon 0000:f0:10.0: enabling bus mastering
[    2.885591] [drm] initializing kernel modesetting (RV350 
0x1002:0x4152 0x18BC:0x0416).
[    2.893629] [drm] register mmio base: 0xD0020000
[    2.898260] [drm] register mmio size: 65536
[    2.947112] [drm] GPU not posted. posting now...
[    3.051033] agpgart-uninorth 0000:f0:0b.0: putting AGP V3 device into 
8x mode
[    3.058197] radeon 0000:f0:10.0: putting AGP V3 device into 8x mode
[    3.064666] radeon 0000:f0:10.0: GTT: 256M 0x00000000 - 0x0FFFFFFF
[    3.070864] [drm] Generation 2 PCI interface, using max accessible memory
[    3.077672] radeon 0000:f0:10.0: VRAM: 128M 0x00000000C0000000 - 
0x00000000C7FFFFFF (128M used)
[    3.086487] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
[    3.093126] [drm] Driver supports precise vblank timestamp query.
[    3.099291] [drm] radeon: irq initialized.
[    3.103404] [drm] Detected VRAM RAM=128M, BAR=128M
[    3.108214] [drm] RAM width 128bits DDR
[    3.112263] [TTM] Zone  kernel: Available graphics memory: 496682 kiB
[    3.118732] [TTM] Initializing pool allocator
[    3.123346] [drm] radeon: 128M of VRAM memory ready
[    3.128256] [drm] radeon: 256M of GTT memory ready.
[    3.133295] [drm] radeon: ib pool ready.
[    3.137708] [drm] radeon: 1 quad pipes, 1 Z pipes initialized.
[    3.144018] radeon 0000:f0:10.0: WB disabled
[    3.148326] [drm] fence driver on ring 0 use gpu addr 0x00000000 and 
cpu addr 0xd000000000066000
[    3.157474] [drm] Loading R300 Microcode
[    3.162480] [drm] radeon: ring at 0x0000000000001000
[    3.167569] [drm] ring test succeeded in 0 usecs
cpu 0x0: Vector: 200 (Machine Check) at [c000000000d63aa0]
     pc: c0000000000cc07c: .trace_hardirqs_on_caller+0x6c/0x190
     lr: c0000000000152f4: .cpu_idle+0x1a4/0x220
     sp: c000000000d63d20
    msr: 9000000000009032
   current = 0xc000000000c4db30
   paca    = 0xc00000000ffff000   softe: 0        irq_happened: 0x01
     pid   = 0, comm = swapper/0
enter ? for help
[c000000000d63db0] c0000000000152f4 .cpu_idle+0x1a4/0x220
[c000000000d63e50] c000000000008fb8 .rest_init+0xe8/0x110
[c000000000d63ee0] c000000000ba2998 .start_kernel+0x3e4/0x408
[c000000000d63f90] c000000000007558 .start_here_common+0x20/0x48
0:mon> x
[  843.783295] Oops: Machine check, sig: 7 [#1]
[  843.787589] SMP NR_CPUS=4 Maple
[  843.790768] Modules linked in:
[  843.793855] NIP: c0000000000cc07c LR: c0000000000152f4 CTR: 
c000000000023eac
[  843.800920] REGS: c000000000d63aa0 TRAP: 0200   Not tainted  (3.4.0+)
[  843.807376] MSR: 9000000000009032 <SF,HV,EE,ME,IR,DR,RI>  CR: 
24222222  XER: 00000006
[  843.815412] SOFTE: 0
[  843.817607] TASK = c000000000c4db30[0] 'swapper/0' THREAD: 
c000000000d60000 CPU: 0
[  843.825035] GPR00: 0000000000000000 c000000000d63d20 c000000000d63280 
c0000000000152f4
[  843.833169] GPR04: 0000000000000000 c000000000099d10 0000000000000001 
0000000000000002
[  843.841302] GPR08: 0100000000000000 c000000000e828e8 0140000000000000 
0000000000000000
[  843.849436] GPR12: 0000000044222282 c00000000ffff000 0000000000000000 
0000000000000000
[  843.857570] GPR16: 0000000000ff8750 0000000000cdc890 00000000010001e0 
0000000000000000
[  843.865702] GPR20: 0000000000000000 0000000000000000 000000001dcd6500 
0000000000000000
[  843.873835] GPR24: 0000000000000000 0000000000ec7b00 9000000000009032 
c000000000d7b178
[  843.881979] GPR28: c000000000d7b278 0000000000000008 c000000000c970f8 
c0000000000152f4
[  843.890314] NIP [c0000000000cc07c] .trace_hardirqs_on_caller+0x6c/0x190
[  843.896942] LR [c0000000000152f4] .cpu_idle+0x1a4/0x220
[  843.902181] Call Trace:
[  843.904640] [c000000000d63d20] [c000000000d63db0] 
init_thread_union+0x3db0/0x4000 (unreliable)
[  843.913317] [c000000000d63db0] [c0000000000152f4] .cpu_idle+0x1a4/0x220
[  843.919964] [c000000000d63e50] [c000000000008fb8] .rest_init+0xe8/0x110
[  843.926615] [c000000000d63ee0] [c000000000ba2998] 
.start_kernel+0x3e4/0x408
[  843.933611] [c000000000d63f90] [c000000000007558] 
.start_here_common+0x20/0x48
[  843.940866] Instruction dump:
[  843.943868] 40de00a4 e92d01c8 800908e8 2f800000 40de0094 e93e8098 
80090000 2f800000
[  843.951829] 409e0030 880d01f2 2fa00000 40de00b0 <e93e84e8> 88090000 
2f800000 40de00c8

Looking for any suggestions on this.

--

-- 
With best wishes
Dmitry
Bjorn Helgaas | 24 May 00:36
Picon
Favicon

[PATCH v3 0/2] archdata init in device_add() notifier

Here's what I put in my "for-3.6" branch for now.  We can still change
it, so let me know if you see any problems.

I reworked the changelogs, changed the notification function name per
Jesse, folded the one-line pcibios_setup_bus_notifier() into the only
caller (on microblaze), and changed it from __devinit to __init (on
powerpc) since it now has nothing to do with hotplug.

Thank you very much for doing this work, Matsumoto-san.  I hope to
eventually get rid of pcibios_fixup_bus() altogether, and this is a
significant step in that direction.

Bjorn
---

Hiroo Matsumoto (2):
      powerpc/PCI: move DMA & IRQ init to device_add() notification path
      microblaze/PCI: move DMA & IRQ init to device_add() notification path

 arch/microblaze/include/asm/pci.h          |    1 
 arch/microblaze/pci/pci-common.c           |   62 +++++++++++---------
 arch/powerpc/include/asm/pci.h             |    2 -
 arch/powerpc/kernel/pci-common.c           |   87 ++++++++++++++--------------
 arch/powerpc/kernel/pci_32.c               |    2 +
 arch/powerpc/kernel/pci_64.c               |    2 +
 arch/powerpc/kernel/pci_of_scan.c          |    1 
 arch/powerpc/platforms/pseries/pci_dlpar.c |    1 
 drivers/pci/pci.c                          |    5 --
 drivers/pcmcia/cardbus.c                   |    3 -
 include/linux/pci.h                        |    3 -
 11 files changed, 83 insertions(+), 86 deletions(-)
Gustavo Zacarias | 23 May 16:35
Picon

[PATCH] powerpc/p1010rdb: add EEPROMs to device tree

Add EEPROM to the P1010RDB device tree.
The 24c01 acts as a memory SPD so it shouldn't be overwritten without
care.
The 24c256 is a general purpose memory.

Signed-off-by: Gustavo Zacarias <gustavo <at> zacarias.com.ar>
---
 arch/powerpc/boot/dts/p1010rdb.dtsi |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/boot/dts/p1010rdb.dtsi b/arch/powerpc/boot/dts/p1010rdb.dtsi
index 4977614..ec7c27a 100644
--- a/arch/powerpc/boot/dts/p1010rdb.dtsi
+++ b/arch/powerpc/boot/dts/p1010rdb.dtsi
@@ -126,12 +126,24 @@

 &board_soc {
 	i2c <at> 3000 {
+		eeprom <at> 50 {
+			compatible = "st,24c256";
+			reg = <0x50>;
+		};
+
 		rtc <at> 68 {
 			compatible = "pericom,pt7c4338";
 			reg = <0x68>;
 		};
 	};

+	i2c <at> 3100 {
+		eeprom <at> 52 {
+			compatible = "atmel,24c01";
+			reg = <0x52>;
+		};
+	};
+
 	spi <at> 7000 {
 		flash <at> 0 {
 			#address-cells = <1>;
--

-- 
1.7.3.4
Anton Blanchard | 23 May 06:47
Picon
Favicon

[PATCH] powerpc: tracing: Avoid tracepoint duplication with DECLARE_EVENT_CLASS


irq_entry, irq_exit, timer_interrupt_entry and timer_interrupt_exit
all do the same thing so use DECLARE_EVENT_CLASS to avoid duplicating
everything 4 times.

This saves quite a lot of space in both instruction text and data:

   text    data     bss     dec     hex filename
   9265   19622      16   28903    70e7 arch/powerpc/kernel/irq.o
   6817   19019      16   25852    64fc arch/powerpc/kernel/irq.o

Signed-off-by: Anton Blanchard <anton <at> samba.org>
---

Index: linux-build/arch/powerpc/include/asm/trace.h
===================================================================
--- linux-build.orig/arch/powerpc/include/asm/trace.h	2012-05-23 13:30:51.235534219 +1000
+++ linux-build/arch/powerpc/include/asm/trace.h	2012-05-23 14:10:44.406639628 +1000
@@ -8,7 +8,7 @@

 struct pt_regs;

-TRACE_EVENT(irq_entry,
+DECLARE_EVENT_CLASS(ppc64_interrupt_class,

 	TP_PROTO(struct pt_regs *regs),

@@ -25,55 +25,32 @@ TRACE_EVENT(irq_entry,
 	TP_printk("pt_regs=%p", __entry->regs)
 );

-TRACE_EVENT(irq_exit,
+DEFINE_EVENT(ppc64_interrupt_class, irq_entry,

 	TP_PROTO(struct pt_regs *regs),

-	TP_ARGS(regs),
-
-	TP_STRUCT__entry(
-		__field(struct pt_regs *, regs)
-	),
-
-	TP_fast_assign(
-		__entry->regs = regs;
-	),
-
-	TP_printk("pt_regs=%p", __entry->regs)
+	TP_ARGS(regs)
 );

-TRACE_EVENT(timer_interrupt_entry,
+DEFINE_EVENT(ppc64_interrupt_class, irq_exit,

 	TP_PROTO(struct pt_regs *regs),

-	TP_ARGS(regs),
-
-	TP_STRUCT__entry(
-		__field(struct pt_regs *, regs)
-	),
-
-	TP_fast_assign(
-		__entry->regs = regs;
-	),
-
-	TP_printk("pt_regs=%p", __entry->regs)
+	TP_ARGS(regs)
 );

-TRACE_EVENT(timer_interrupt_exit,
+DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_entry,

 	TP_PROTO(struct pt_regs *regs),

-	TP_ARGS(regs),
+	TP_ARGS(regs)
+);

-	TP_STRUCT__entry(
-		__field(struct pt_regs *, regs)
-	),
+DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_exit,

-	TP_fast_assign(
-		__entry->regs = regs;
-	),
+	TP_PROTO(struct pt_regs *regs),

-	TP_printk("pt_regs=%p", __entry->regs)
+	TP_ARGS(regs)
 );

 #ifdef CONFIG_PPC_PSERIES
Anton Blanchard | 23 May 05:58
Picon
Favicon

[PATCH] powerpc: Enable jump label support


When looking through some instruction traces I noticed our tracepoint
checks were inline. It turns out we don't have CONFIG_JUMP_LABEL
enabled.

By enabling CONFIG_JUMP_LABEL we replace a load/compare/branch with
a nop at every tracepoint call. For example in do_IRQ:

CONFIG_JUMP_LABEL disabled:
        stdx 3,11,9
        lwz 0,8(29)
        cmpwi 7,0,0
        bne- 7,.L124
        bl .irq_enter

CONFIG_JUMP_LABEL enabled:
        stdx 3,11,9     
        nop
        bl .irq_enter  

Signed-off-by: Anton Blanchard <anton <at> samba.org>
---

Index: linux-build/arch/powerpc/configs/ppc64_defconfig
===================================================================
--- linux-build.orig/arch/powerpc/configs/ppc64_defconfig	2012-04-05 13:47:45.691857096 +1000
+++ linux-build/arch/powerpc/configs/ppc64_defconfig	2012-05-23 13:14:04.254270594 +1000
@@ -16,6 +16,7 @@ CONFIG_BLK_DEV_INITRD=y
 CONFIG_PROFILING=y
 CONFIG_OPROFILE=y
 CONFIG_KPROBES=y
+CONFIG_JUMP_LABEL=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODVERSIONS=y
Index: linux-build/arch/powerpc/configs/pseries_defconfig
===================================================================
--- linux-build.orig/arch/powerpc/configs/pseries_defconfig	2012-04-05 13:47:45.691857096 +1000
+++ linux-build/arch/powerpc/configs/pseries_defconfig	2012-05-23 13:14:59.783222304 +1000
@@ -24,6 +24,7 @@ CONFIG_BLK_DEV_INITRD=y
 CONFIG_PROFILING=y
 CONFIG_OPROFILE=y
 CONFIG_KPROBES=y
+CONFIG_JUMP_LABEL=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODVERSIONS=y
Favicon

powerc tree maintainership status

Hi Folks !

I'm going to be getting some surgery next week. In the good case, I
should be officially back to work 2 weeks later, but I might end
up being unavailable for longer.

So while I'm away, Michael Ellerman and Paul Mackerras are going to take
care of the powerpc tree. I'll make sure Paul and I sign Michael's PGP
key before I leave.

Cheers,
Ben.
Favicon

[git pull] Please pull powerpc.git next branch

Hi Linus !

Here are the powerpc goodies for 3.5. Main highlights are:

 - Support for the NX crypto engine in Power7+
 - A bunch of Anton goodness, including some micro optimization
   of our syscall entry on Power7
 - I converted a pile of our thermal control drivers to the
   new i2c APIs (essentially turning the old therm_pm72 into
   a proper set of windfarm drivers). That's one more step
   toward removing the deprecated i2c APIs, there's still a
   few drivers to fix, but we are getting close
 - kexec/kdump support for 47x embedded cores

The big missing thing here is no updates from Freescale. Not sure
what's up here, but with Kumar not working for them anymore things
are a bit in a state of flux in that area.

[Sent from my ozlabs address because gate.crashing.org appears to
have temporarily fallen off the face of the internet]

Cheers,
Ben.

The following changes since commit 7c0482e3d055e5de056d3c693b821e39205b99ae:

  powerpc/irq: Fix another case of lazy IRQ state getting out of sync (2012-05-12 09:40:41 +1000)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git next

for you to fetch changes up to 2074b1d9d53ae696dd3f49482bad43254f40f01d:

  powerpc: Fix irq distribution (2012-05-22 14:38:26 +1000)

----------------------------------------------------------------
Andre Heider (3):
      powerpc/ps3: Add highmem repository read routines
      powerpc/ps3: Use highmem region from repository
      powerpc/ps3: Remove MEMORY_HOTPLUG requirement

Anshuman Khandual (1):
      powerpc: Fixing a cputhread code documentation

Anton Blanchard (15):
      powerpc: Hide some system call labels from profile tools
      powerpc: No need to save XER in a system call
      powerpc: No need to preserve count register across system call
      powerpc: Better scheduling of CR save code in system call path
      powerpc: Clean up lppaca->cede_latency_hint
      powerpc: Remove iseries specific fields in lppaca
      powerpc: Reformat lppaca.h
      powerpc: Remove empty giveup_altivec function on book3e CPUs
      powerpc: Optimise enable_kernel_altivec
      powerpc: Remove CONFIG_POWER4_ONLY
      powerpc: Require gcc 4.0 on 64-bit
      powerpc: Remove altivec fix for gcc versions before 4.0
      powerpc: Add 64-bit CPU targets for gcc
      powerpc: Use WARN instead of dump_stack when printing EEH error backtrace
      powerpc: Remove old powerpc specific ptrace getregs/setregs calls

Benjamin Herrenschmidt (20):
      Merge remote-tracking branch 'geoff/for-powerpc' into next
      i2c/powermac: Register i2c devices from device-tree
      powerpc/pmac: Convert therm_adt746x to new i2c probing
      powerpc/pmac: Convert windfarm_lm75 to new i2c probing
      powerpc/pmac: Convert windfarm_max6690 to new i2c probing
      powerpc/pmac: Convert windfarm_smu_sat to new i2c probing
      powerpc/windfarm: const'ify and add "priv" field to controls & sensors
      powerpc/windfarm: Remove spurrious sysfs_attr_init()
      powerpc/windfarm: Improve display of fan speeds in sysfs
      powerpc/windfarm: Add useful accessors
      powerpc/windfarm: Add ad7417 sensor
      powerpc/windfarm: Add lm87 sensor
      powerpc/windfarm: Updates to lm75 and max6690 sensors
      powerpc/windfarm: Add Fan Control Unit controls for G5s
      powerpc/powermac: New windfarm driver for PowerMac G5 (AGP) and Xserve G5
      Merge branch 'merge' into next
      powerpc/windfarm: Fix crash on SMU based machine after i2c conversion
      Merge remote-tracking branch 'jwb/next' into next
      Merge branch 'merge' into next
      Revert "powerpc/hw-breakpoint: Use generic hw-breakpoint interfaces for new PPC ptrace flags"

Geoff Levand (5):
      powerpc/ps3: Correct lv1 repository routine names
      powerpc/ps3: Add PS3 repository write support
      powerpc/ps3: Add highmem repository write routines
      powerpc/ps3: Minor Kconfig cleanup
      powerpc/ps3: Refresh ps3_defconfig

Hector Martin (1):
      powerpc/ps3: Add highmem region memory early

Josh Boyer (1):
      powerpc/40x: Use {upper,lower}_32_bits for msi_phys

K.Prasad (1):
      powerpc/hw-breakpoint: Use generic hw-breakpoint interfaces for new PPC ptrace flags

Kent Yoder (17):
      powerpc/pseries: Add new hvcall constants to support PFO
      powerpc/pseries: Add pseries update notifier for OFDT prop changes
      powerpc/pseries: Add PFO support to the VIO bus
      powerpc/pseries/hwrng: PFO-based hwrng driver
      powerpc/pseries: Enable the PFO-based RNG accelerator
      powerpc/crypto: nx driver code supporting nx encryption
      powerpc/crypto: AES-CBC mode routines for nx encryption
      powerpc/crypto: AES-CCM mode routines for nx encryption
      powerpc/crypto: AES-CTR mode routines for nx encryption
      powerpc/crypto: AES-ECB mode routines for nx encryption
      powerpc/crypto: AES-GCM mode routines for nx encryption
      powerpc/crypto: AES-XCBC mode routines for nx encryption
      powerpc/crypto: SHA256 hash routines for nx encryption
      powerpc/crypto: SHA512 hash routines for nx encryption
      powerpc/crypto: debugfs routines and docs for the nx device driver
      powerpc/crypto: Build files for the nx device driver
      powerpc/crypto: Enable the PFO-based encryption device

Kim Phillips (1):
      powerpc: Fix irq distribution

Mai La (2):
      powerpc/44x: Fix PCI MSI support for Maui APM821xx SoC and Bluestone board
      powerpc/44x: Add PCI MSI node for Maui APM821xx SoC and Bluestone board in DTS

Robert Jennings (1):
      powerpc/pseries: Support lower minimum entitlement for virtual processors

Stephen Rothwell (2):
      powerpc/windfarm: fix compiler warning
      powerpc/windfarm: don't pass const strings to snprintf

Suzuki Poulose (3):
      powerpc/44x: Fix/Initialize PID to kernel PID before the TLB search
      powerpc/47x: Kernel support for KEXEC
      powerpc/47x: Enable CRASH_DUMP

Tiejun Chen (1):
      powerpc: Remove now unused _TIF_RUNLATCH

Valentin Ilie (1):
      drivers/ps3: Fix checkpatch warnings in ps3av.c

 Documentation/ABI/testing/debugfs-pfo-nx-crypto |   45 ++
 arch/powerpc/Kconfig                            |    4 +-
 arch/powerpc/Makefile                           |   49 +-
 arch/powerpc/boot/dts/bluestone.dts             |   25 +
 arch/powerpc/configs/g5_defconfig               |    1 -
 arch/powerpc/configs/maple_defconfig            |    1 -
 arch/powerpc/configs/pasemi_defconfig           |    1 -
 arch/powerpc/configs/ps3_defconfig              |    6 -
 arch/powerpc/include/asm/asm-compat.h           |   11 +-
 arch/powerpc/include/asm/cputhreads.h           |    2 +-
 arch/powerpc/include/asm/hvcall.h               |   25 +-
 arch/powerpc/include/asm/lppaca.h               |  196 ++----
 arch/powerpc/include/asm/lv1call.h              |    4 +-
 arch/powerpc/include/asm/pSeries_reconfig.h     |   12 +
 arch/powerpc/include/asm/ppc_asm.h              |   10 +-
 arch/powerpc/include/asm/ptrace.h               |    6 -
 arch/powerpc/include/asm/switch_to.h            |    6 +-
 arch/powerpc/include/asm/thread_info.h          |    1 -
 arch/powerpc/include/asm/vio.h                  |   46 ++
 arch/powerpc/kernel/asm-offsets.c               |    4 -
 arch/powerpc/kernel/entry_64.S                  |   30 +-
 arch/powerpc/kernel/exceptions-64s.S            |    4 -
 arch/powerpc/kernel/head_44x.S                  |    8 -
 arch/powerpc/kernel/head_fsl_booke.S            |    8 -
 arch/powerpc/kernel/irq.c                       |    2 +-
 arch/powerpc/kernel/misc_32.S                   |  203 +++++-
 arch/powerpc/kernel/paca.c                      |    3 -
 arch/powerpc/kernel/process.c                   |    2 +-
 arch/powerpc/kernel/prom_init.c                 |   17 +-
 arch/powerpc/kernel/ptrace.c                    |   42 --
 arch/powerpc/kernel/ptrace32.c                  |   32 -
 arch/powerpc/kernel/vector.S                    |   10 +
 arch/powerpc/kernel/vio.c                       |  273 ++++++--
 arch/powerpc/lib/copyuser_64.S                  |    6 +-
 arch/powerpc/lib/mem_64.S                       |    6 +-
 arch/powerpc/lib/memcpy_64.S                    |    6 +-
 arch/powerpc/platforms/44x/Kconfig              |    2 +
 arch/powerpc/platforms/Kconfig.cputype          |   39 +-
 arch/powerpc/platforms/powermac/low_i2c.c       |    1 +
 arch/powerpc/platforms/ps3/Kconfig              |   22 +-
 arch/powerpc/platforms/ps3/mm.c                 |   77 ++-
 arch/powerpc/platforms/ps3/platform.h           |   16 +
 arch/powerpc/platforms/ps3/repository.c         |  198 ++++++
 arch/powerpc/platforms/pseries/eeh.c            |    2 +-
 arch/powerpc/platforms/pseries/plpar_wrappers.h |    4 +-
 arch/powerpc/platforms/pseries/reconfig.c       |    7 +
 arch/powerpc/sysdev/ppc4xx_msi.c                |   42 +-
 drivers/char/hw_random/Kconfig                  |   13 +
 drivers/char/hw_random/Makefile                 |    1 +
 drivers/char/hw_random/pseries-rng.c            |   96 +++
 drivers/crypto/Kconfig                          |   17 +
 drivers/crypto/nx/Makefile                      |   11 +
 drivers/crypto/nx/nx-aes-cbc.c                  |  141 ++++
 drivers/crypto/nx/nx-aes-ccm.c                  |  468 +++++++++++++
 drivers/crypto/nx/nx-aes-ctr.c                  |  178 +++++
 drivers/crypto/nx/nx-aes-ecb.c                  |  139 ++++
 drivers/crypto/nx/nx-aes-gcm.c                  |  353 ++++++++++
 drivers/crypto/nx/nx-aes-xcbc.c                 |  236 +++++++
 drivers/crypto/nx/nx-sha256.c                   |  246 +++++++
 drivers/crypto/nx/nx-sha512.c                   |  265 +++++++
 drivers/crypto/nx/nx.c                          |  716 +++++++++++++++++++
 drivers/crypto/nx/nx.h                          |  193 ++++++
 drivers/crypto/nx/nx_csbcpb.h                   |  205 ++++++
 drivers/crypto/nx/nx_debugfs.c                  |  103 +++
 drivers/i2c/busses/i2c-powermac.c               |   98 ++-
 drivers/macintosh/Kconfig                       |   23 +-
 drivers/macintosh/Makefile                      |   14 +
 drivers/macintosh/ams/ams-i2c.c                 |    2 +-
 drivers/macintosh/therm_adt746x.c               |  480 ++++++-------
 drivers/macintosh/windfarm.h                    |   51 +-
 drivers/macintosh/windfarm_ad7417_sensor.c      |  347 ++++++++++
 drivers/macintosh/windfarm_core.c               |   23 +-
 drivers/macintosh/windfarm_cpufreq_clamp.c      |    6 -
 drivers/macintosh/windfarm_fcu_controls.c       |  613 ++++++++++++++++
 drivers/macintosh/windfarm_lm75_sensor.c        |  135 +---
 drivers/macintosh/windfarm_lm87_sensor.c        |  201 ++++++
 drivers/macintosh/windfarm_max6690_sensor.c     |  109 +--
 drivers/macintosh/windfarm_mpu.h                |  105 +++
 drivers/macintosh/windfarm_pm72.c               |  847 +++++++++++++++++++++++
 drivers/macintosh/windfarm_pm81.c               |   25 +-
 drivers/macintosh/windfarm_pm91.c               |   33 +-
 drivers/macintosh/windfarm_rm31.c               |  740 ++++++++++++++++++++
 drivers/macintosh/windfarm_smu_controls.c       |    1 -
 drivers/macintosh/windfarm_smu_sat.c            |  132 ++--
 drivers/ps3/ps3av.c                             |   24 +-
 85 files changed, 7827 insertions(+), 1080 deletions(-)
 create mode 100644 Documentation/ABI/testing/debugfs-pfo-nx-crypto
 create mode 100644 drivers/char/hw_random/pseries-rng.c
 create mode 100644 drivers/crypto/nx/Makefile
 create mode 100644 drivers/crypto/nx/nx-aes-cbc.c
 create mode 100644 drivers/crypto/nx/nx-aes-ccm.c
 create mode 100644 drivers/crypto/nx/nx-aes-ctr.c
 create mode 100644 drivers/crypto/nx/nx-aes-ecb.c
 create mode 100644 drivers/crypto/nx/nx-aes-gcm.c
 create mode 100644 drivers/crypto/nx/nx-aes-xcbc.c
 create mode 100644 drivers/crypto/nx/nx-sha256.c
 create mode 100644 drivers/crypto/nx/nx-sha512.c
 create mode 100644 drivers/crypto/nx/nx.c
 create mode 100644 drivers/crypto/nx/nx.h
 create mode 100644 drivers/crypto/nx/nx_csbcpb.h
 create mode 100644 drivers/crypto/nx/nx_debugfs.c
 create mode 100644 drivers/macintosh/windfarm_ad7417_sensor.c
 create mode 100644 drivers/macintosh/windfarm_fcu_controls.c
 create mode 100644 drivers/macintosh/windfarm_lm87_sensor.c
 create mode 100644 drivers/macintosh/windfarm_mpu.h
 create mode 100644 drivers/macintosh/windfarm_pm72.c
 create mode 100644 drivers/macintosh/windfarm_rm31.c
Hiroo Matsumoto | 23 May 04:34
Favicon

[PATCH v2 2/2] microblaze/PCI: Add pcibios_device_change_notifier for microblaze

pcibios_setup_bus_devices which sets DMA and IRQs of PCI device is called
only when boot, so DMA and IRQs of PCI device will not set when hotplug.
This patch adds pcibios_device_change_notifier which sets DMA and IRQs of
PCI device when PCI device adds, so DMA and IRQs of PCI device will be set
when boot and hotplug.

Signed-off-by: Hiroo MATSUMOTO <matsumoto.hiroo <at> jp.fujitsu.com>
---
 arch/microblaze/include/asm/pci.h |    2 +-
 arch/microblaze/pci/pci-common.c  |   67 +++++++++++++++++++++---------------
 2 files changed, 40 insertions(+), 29 deletions(-)

diff --git a/arch/microblaze/include/asm/pci.h b/arch/microblaze/include/asm/pci.h
index 0331376..8d11277 100644
--- a/arch/microblaze/include/asm/pci.h
+++ b/arch/microblaze/include/asm/pci.h
@@ -149,8 +149,8 @@ extern void pci_resource_to_user(const struct pci_dev *dev, int bar,
 				 const struct resource *rsrc,
 				 resource_size_t *start, resource_size_t *end);

-extern void pcibios_setup_bus_devices(struct pci_bus *bus);
 extern void pcibios_setup_bus_self(struct pci_bus *bus);
+extern void pcibios_setup_bus_notifier(void);

 /* This part of code was originally in xilinx-pci.h */
 #ifdef CONFIG_PCI_XILINX
diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c
index 85f2ac1..bb28ede 100644
--- a/arch/microblaze/pci/pci-common.c
+++ b/arch/microblaze/pci/pci-common.c
@@ -1063,31 +1063,6 @@ void __devinit pcibios_setup_bus_self(struct pci_bus *bus)
 		pcibios_fixup_bridge(bus);
 }

-void __devinit pcibios_setup_bus_devices(struct pci_bus *bus)
-{
-	struct pci_dev *dev;
-
-	pr_debug("PCI: Fixup bus devices %d (%s)\n",
-		 bus->number, bus->self ? pci_name(bus->self) : "PHB");
-
-	list_for_each_entry(dev, &bus->devices, bus_list) {
-		/* Setup OF node pointer in archdata */
-		dev->dev.of_node = pci_device_to_OF_node(dev);
-
-		/* Fixup NUMA node as it may not be setup yet by the generic
-		 * code and is needed by the DMA init
-		 */
-		set_dev_node(&dev->dev, pcibus_to_node(dev->bus));
-
-		/* Hook up default DMA ops */
-		set_dma_ops(&dev->dev, pci_dma_ops);
-		dev->dev.archdata.dma_data = (void *)PCI_DRAM_OFFSET;
-
-		/* Read default IRQs and fixup if necessary */
-		pci_read_irq_line(dev);
-	}
-}
-
 void __devinit pcibios_fixup_bus(struct pci_bus *bus)
 {
 	/* When called from the generic PCI probe, read PCI<->PCI bridge
@@ -1099,9 +1074,6 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)

 	/* Now fixup the bus bus */
 	pcibios_setup_bus_self(bus);
-
-	/* Now fixup devices on that bus */
-	pcibios_setup_bus_devices(bus);
 }
 EXPORT_SYMBOL(pcibios_fixup_bus);

@@ -1604,6 +1576,43 @@ static void __devinit pcibios_scan_phb(struct pci_controller *hose)
 	hose->last_busno = bus->subordinate;
 }

+static int pcibios_device_change_notifier(struct notifier_block *nb,
+					  unsigned long action, void *data)
+{
+	struct pci_dev *dev = to_pci_dev(data);
+
+	switch (action) {
+	case BUS_NOTIFY_ADD_DEVICE:
+		/* Setup OF node pointer in archdata */
+		dev->dev.of_node = pci_device_to_OF_node(dev);
+
+		/* Fixup NUMA node as it may not be setup yet by the generic
+		 * code and is needed by the DMA init
+		 */
+		set_dev_node(&dev->dev, pcibus_to_node(dev->bus));
+
+		/* Hook up default DMA ops */
+		set_dma_ops(&dev->dev, pci_dma_ops);
+		dev->dev.archdata.dma_data = (void *)PCI_DRAM_OFFSET;
+
+		/* Read default IRQs and fixup if necessary */
+		pci_read_irq_line(dev);
+
+		break;
+	}
+
+	return 0;
+}
+
+static struct notifier_block device_nb = {
+	.notifier_call = pcibios_device_change_notifier,
+};
+
+void __devinit pcibios_setup_bus_notifier(void)
+{
+	bus_register_notifier(&pci_bus_type, &device_nb);
+}
+
 static int __init pcibios_init(void)
 {
 	struct pci_controller *hose, *tmp;
@@ -1611,6 +1620,8 @@ static int __init pcibios_init(void)

 	printk(KERN_INFO "PCI: Probing PCI hardware\n");

+	pcibios_setup_bus_notifier();
+
 	/* Scan all of the recorded PCI controllers.  */
 	list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
 		hose->last_busno = 0xff;
--

-- 
1.7.3.4

Gmane