LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* Re: Freescale MPC5554 device tree (was: cross-compiling Linux for PowerPC e200 core?)
From: Németh Márton @ 2010-03-13 11:59 UTC (permalink / raw)
  To: Grant Likely; +Cc: linuxppc-dev Development, David Gibson
In-Reply-To: <fa686aa41003120414j48825e7cr952336703fe03b04@mail.gmail.com>

Hi,

here is a version with modified cpu node, xbar ranges and added interrupt sources.
Please send comments.

Regards,

	Márton Németh

---
From: Márton Németh <nm127@freemail.hu>

Add device tree for Freescale MPC5554.

Signed-off-by: Márton Németh <nm127@freemail.hu>
---
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.000000000 +0100
+++ linux/arch/powerpc/boot/dts/mpc5554.dts	2010-03-13 12:52:32.000000000 +0100
@@ -0,0 +1,473 @@
+/*
+ * 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
+ *  - Block Diagram: page 1-3, Figure 1-1
+ *  - Memory Map: page 1-21, Table 1-2
+ *  - Interrupt Request Sources: page 10-16, Table 10-9
+ *
+ * Copyright 2010 Márton Németh
+ * Márton Németh <nm127@freemail.hu>
+ *
+ * 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>;
+	interrupt-parent = <&intc>;
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu@0 {
+			device_type = "cpu";
+			compatible = "PowerPC,5554", "fsl,mpc5554-e200z6", "fsl,powerpc-e200z6";
+			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
+		};
+	};
+
+	memory@40000000 {
+		device_type = "memory";
+		reg = <0x40000000 0x10000>;	// 32KiB internal SRAM
+	};
+
+	xbar@fff04000 {		// System Bus Crossbar Switch (XBAR)
+		compatible = "fsl,mpc5554-xbar";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		// The full memory range is covered by XBAR
+		ranges;
+		reg = <0xfff04000 0x4000>;
+
+		flash@0 {	// read-only FLASH
+			compatible = "fsl,mpc5554-flash";
+			reg = <0x00000000 0x200000>;	// 2MiB internal FLASH
+		};
+
+		bridge@c3f00000 {
+			compatible = "fsl,mpc5554-pbridge-a";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0 0xc0000000 0x20000000>;
+			reg = <0xc3f00000 0x4000>;
+
+			fmpll@3f80000 {		// Frequency Modulated PLL
+				compatible = "fsl,mpc5554-fmpll";
+				reg = <0x03f80000 0x4000>;
+				interrupts = <43 1	// Loss of Clock
+					      44 1>;	// Loss of Lock
+			};
+
+			flashconfig@3f88000 {	// Flash Configuration
+				compatible = "fsl,mpc5554-flashconfig";
+				reg = <0x03f88000 0x4000>;
+			};
+
+			siu@3f89000 {		// System Integration Unit
+				compatible = "fsl,mpc5554-siu";
+				reg = <0x03f90000 0x4000>;
+				interrupts = <45 1	// External Interrupt Overrun 0-15
+					      46 1	// External Interrupt 0
+					      47 1	// External Interrupt 1
+					      48 1	// External Interrupt 2
+					      49 1	// External Interrupt 3
+					      50 1>;	// External Interrupt 4-15
+			};
+
+			emios@3fa0000 {		// Modular Timer System
+				compatible = "fsl,mpc5554-emios";
+				reg = <0x03fa0000 0x4000>;
+				interrupts = <51 1	// Channel 0
+					      52 1	// Channel 1
+					      53 1	// Channel 2
+					      54 1	// Channel 3
+					      55 1	// Channel 4
+					      56 1	// Channel 5
+					      57 1	// Channel 6
+					      58 1	// Channel 7
+					      59 1	// Channel 8
+					      60 1	// Channel 9
+					      61 1	// Channel 10
+					      62 1	// Channel 11
+					      63 1	// Channel 12
+					      64 1	// Channel 13
+					      65 1	// Channel 14
+					      66 1	// Channel 15
+					      202 1	// Channel 16
+					      203 1	// Channel 17
+					      204 1	// Channel 18
+					      205 1	// Channel 19
+					      206 1	// Channel 20
+					      207 1	// Channel 21
+					      208 1	// Channel 22
+					      209 1>;	// Channel 23
+			};
+
+			etpu@3fc0000 {		// Enhanced Time Processing Unit
+				compatible = "fsl,mpc5554-etpu";
+				reg = <0x03fc0000 0x4000>;
+				interrupts = <67 1	// Global Exception
+					      68 1	// A Channel 0
+					      69 1	// A Channel 1
+					      70 1	// A Channel 2
+					      71 1	// A Channel 3
+					      72 1	// A Channel 4
+					      73 1	// A Channel 5
+					      74 1	// A Channel 6
+					      75 1	// A Channel 7
+					      76 1	// A Channel 8
+					      77 1	// A Channel 9
+					      78 1	// A Channel 10
+					      79 1	// A Channel 11
+					      80 1	// A Channel 12
+					      81 1	// A Channel 13
+					      82 1	// A Channel 14
+					      83 1	// A Channel 15
+					      84 1	// A Channel 16
+					      85 1	// A Channel 17
+					      86 1	// A Channel 18
+					      87 1	// A Channel 19
+					      88 1	// A Channel 20
+					      89 1	// A Channel 21
+					      90 1	// A Channel 22
+					      91 1	// A Channel 23
+					      92 1	// A Channel 24
+					      93 1	// A Channel 25
+					      94 1	// A Channel 26
+					      95 1	// A Channel 27
+					      96 1	// A Channel 28
+					      97 1	// A Channel 29
+					      98 1	// A Channel 30
+					      99 1	// A Channel 31
+					      243 1	// B Channel 0
+					      244 1	// B Channel 1
+					      245 1	// B Channel 2
+					      246 1	// B Channel 3
+					      247 1	// B Channel 4
+					      248 1	// B Channel 5
+					      249 1	// B Channel 6
+					      250 1	// B Channel 7
+					      251 1	// B Channel 8
+					      252 1	// B Channel 9
+					      253 1	// B Channel 10
+					      254 1	// B Channel 11
+					      255 1	// B Channel 12
+					      256 1	// B Channel 13
+					      257 1	// B Channel 14
+					      258 1	// B Channel 15
+					      259 1	// B Channel 16
+					      260 1	// B Channel 17
+					      261 1	// B Channel 18
+					      262 1	// B Channel 19
+					      263 1	// B Channel 20
+					      264 1	// B Channel 21
+					      265 1	// B Channel 22
+					      266 1	// B Channel 23
+					      267 1	// B Channel 24
+					      268 1	// B Channel 25
+					      269 1	// B Channel 26
+					      270 1	// B Channel 27
+					      271 1	// B Channel 28
+					      272 1	// B Channel 29
+					      273 1	// B Channel 30
+					      274 1>;	// B Channel 31
+			};
+
+			etpudata@3fc8000 {	// eTPU Shared Data Memory (Parameter RAM)
+				compatible = "fsl,mpc5554-etpudata";
+				reg = <0x03fc8000 0x4000>;
+			};
+
+			etpudata@3fcc000 {	// eTPU Shared Data Memory (Parameter RAM) mirror
+				compatible = "fsl,mpc5554-etpudata";
+				reg = <0x03fcc000 0x4000>;
+			};
+
+			etpucode@3fd0000 {		// eTPU Shared Code RAM
+				compatible = "fsl,mpc5554-etpucode";
+				reg = <0x03fd0000 0x4000>;
+			};
+		};
+
+		bridge@fff00000 {
+			compatible = "fsl,mpc5554-pbridge-b";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0 0xe0000000 0x20000000>;
+			reg = <0xfff00000 0x4000>;
+
+			ecsm@fff40000 {		// Error Correction Status Module (ECSM)
+				compatible = "fsl,mpc5554-ecsm";
+				reg = <0xfff40000 0x4000>;
+				interrupts = <8 1	// Software Watchdog Interrupt
+					      9 1>;	// Combined: Internal SRAM Non-Correctable Error, Flash Non-Correctable Error
+			};
+
+			edma@fff44000 {		// Enhanced DMA Controller (eDMA)
+				compatible = "fsl,mpc5554-edma";
+				reg = <0xfff44000 0x4000>;
+				interrupts = <10 1	// Channel Error 0-31
+					      11 1	// Channel 0
+					      12 1	// Channel 1
+					      13 1	// Channel 2
+					      14 1	// Channel 3
+					      15 1	// Channel 4
+					      16 1	// Channel 5
+					      17 1	// Channel 6
+					      18 1	// Channel 7
+					      19 1	// Channel 8
+					      20 1	// Channel 9
+					      21 1	// Channel 10
+					      22 1	// Channel 11
+					      23 1	// Channel 12
+					      24 1	// Channel 13
+					      25 1	// Channel 14
+					      26 1	// Channel 15
+					      27 1	// Channel 16
+					      28 1	// Channel 17
+					      29 1	// Channel 18
+					      30 1	// Channel 19
+					      31 1	// Channel 20
+					      32 1	// Channel 21
+					      33 1	// Channel 22
+					      34 1	// Channel 23
+					      35 1	// Channel 24
+					      36 1	// Channel 25
+					      37 1	// Channel 26
+					      38 1	// Channel 27
+					      39 1	// Channel 28
+					      40 1	// Channel 29
+					      41 1	// Channel 30
+					      42 1	// Channel 31
+					      210 1	// Channel Error 32-63
+					      211 1	// Channel 32
+					      212 1	// Channel 33
+					      213 1	// Channel 34
+					      214 1	// Channel 35
+					      215 1	// Channel 36
+					      216 1	// Channel 37
+					      217 1	// Channel 38
+					      218 1	// Channel 39
+					      219 1	// Channel 40
+					      220 1	// Channel 41
+					      221 1	// Channel 42
+					      222 1	// Channel 43
+					      223 1	// Channel 44
+					      224 1	// Channel 45
+					      225 1	// Channel 46
+					      226 1	// Channel 47
+					      227 1	// Channel 48
+					      228 1	// Channel 49
+					      229 1	// Channel 50
+					      230 1	// Channel 51
+					      231 1	// Channel 52
+					      232 1	// Channel 53
+					      233 1	// Channel 54
+					      234 1	// Channel 55
+					      235 1	// Channel 56
+					      236 1	// Channel 57
+					      237 1	// Channel 58
+					      238 1	// Channel 59
+					      239 1	// Channel 60
+					      240 1	// Channel 61
+					      241 1	// Channel 62
+					      242 1>;	// Channel 63
+			};
+
+			intc: intc@fff48000 {		// Interrupt Controller (INTC)
+				compatible = "fsl,mpc5554-intc";
+				interrupt-controller;
+				#interrupt-cells = <2>;
+				reg = <0xfff48000 0x4000>;
+			};
+
+			eqadc@fff80000 {	// Enhanced Queued Analog-to-Digital Converter (eQADC)
+				compatible = "fsl,mpc5554-eqacd";
+				reg = <0xfff80000 0x4000>;
+				interrupts = <100 1	// Combined: Trigger Overrun, Receive FIFO Overflow, Command FIFO Underflow
+					      101 1	// Command FIFO 0 Non-Coherency
+					      102 1	// Command FIFO 0 Pause
+					      103 1	// Command FIFO 0 End of Queue
+					      104 1	// Command FIFO 0 Fill
+					      105 1	// Command FIFO 0 Drain
+					      106 1	// Command FIFO 1 Non-Coherency
+					      107 1	// Command FIFO 1 Pause
+					      108 1	// Command FIFO 1 End of Queue
+					      109 1	// Command FIFO 1 Fill
+					      111 1	// Command FIFO 1 Drain
+					      111 1	// Command FIFO 2 Non-Coherency
+					      112 1	// Command FIFO 2 Pause
+					      113 1	// Command FIFO 2 End of Queue
+					      114 1	// Command FIFO 2 Fill
+					      115 1	// Command FIFO 2 Drain
+					      116 1	// Command FIFO 3 Non-Coherency
+					      117 1	// Command FIFO 3 Pause
+					      118 1	// Command FIFO 3 End of Queue
+					      119 1	// Command FIFO 3 Fill
+					      120 1	// Command FIFO 3 Drain
+					      121 1	// Command FIFO 4 Non-Coherency
+					      122 1	// Command FIFO 4 Pause
+					      123 1	// Command FIFO 4 End of Queue
+					      124 1	// Command FIFO 4 Fill
+					      125 1	// Command FIFO 4 Drain
+					      126 1	// Command FIFO 5 Non-Coherency
+					      127 1	// Command FIFO 5 Pause
+					      128 1	// Command FIFO 5 End of Queue
+					      129 1	// Command FIFO 5 Fill
+					      130 1>;	// Command FIFO 5 Drain
+			};
+
+			dspi@fff90000 {		// Deserial Serial Peripheral Interface (DSPI_A)
+				compatible = "fsl,mpc5554-dspi";
+				reg = <0xfff90000 0x4000>;
+				interrupts = <275 1	// Combined: Transmit FIFO Underflow, Receive FIFO Overflow
+					      276 1	// Transmit FIFO End of Queue
+					      277 1	// Transmit FIFO Fill Flag
+					      278 1	// Transfer Complete
+					      279 1>;	// Receive FIFO Drain
+			};
+
+			dspi@fff94000 {		// Deserial Serial Peripheral Interface (DSPI_B)
+				compatible = "fsl,mpc5554-dspi";
+				reg = <0xfff94000 0x4000>;
+				interrupts = <131 1	// Combined: Transmit FIFO Underflow, Receive FIFO Overflow
+					      132 1	// Transmit FIFO End of Queue
+					      133 1	// Transmit FIFO Fill Flag
+					      134 1	// Transfer Complete
+					      135 1>;	// Receive FIFO Drain
+			};
+
+			dspi@fff98000 {		// Deserial Serial Peripheral Interface (DSPI_C)
+				compatible = "fsl,mpc5554-dspi";
+				reg = <0xfff98000 0x4000>;
+				interrupts = <136 1	// Combined: Transmit FIFO Underflow, Receive FIFO Overflow
+					      137 1	// Transmit FIFO End of Queue
+					      138 1	// Transmit FIFO Fill Flag
+					      139 1	// Transfer Complete
+					      140 1>;	// Receive FIFO Drain
+			};
+
+			dspi@fff9c000 {		// Deserial Serial Peripheral Interface (DSPI_D)
+				compatible = "fsl,mpc5554-dspi";
+				reg = <0xfff9c000 0x4000>;
+				interrupts = <141 1	// Combined: Transmit FIFO Underflow, Receive FIFO Overflow
+					      142 1	// Transmit FIFO End of Queue
+					      143 1	// Transmit FIFO Fill Flag
+					      144 1	// Transfer Complete
+					      145 1>;	// Receive FIFO Drain
+			};
+
+			esci@fffb0000 {		// Serial Communications Interface (SCI_A)
+				compatible = "fsl,mpc5554-esci";
+				reg = <0xfffb0000 0x4000>;
+				interrupts = <146 1>;	// Combined request for all SCI_A interrupts
+			};
+
+			esci@fffb4000 {		// Serial Communications Interface (SCI_B)
+				compatible = "fsl,mpc5554-esci";
+				reg = <0xfffb4000 0x4000>;
+				interrupts = <149 1>;	// Combined request for all SCI_A interrupts
+			};
+
+			can@fffc0000 {		// Controller Area Network (FlexCAN_A)
+				compatible = "fsl,mpc5554-flexcan";
+				reg = <0xfffc0000 0x4000>;
+				interrupts = <152 1	// Bus off
+					      153 1	// Error
+					      155 1	// Buffer 0
+					      156 1	// Buffer 1
+					      157 1	// Buffer 2
+					      158 1	// Buffer 3
+					      159 1	// Buffer 4
+					      160 1	// Buffer 5
+					      161 1	// Buffer 6
+					      162 1	// Buffer 7
+					      163 1	// Buffer 8
+					      164 1	// Buffer 9
+					      165 1	// Buffer 10
+					      166 1	// Buffer 11
+					      167 1	// Buffer 12
+					      168 1	// Buffer 13
+					      169 1	// Buffer 14
+					      170 1	// Buffer 15
+					      171 1	// Buffers 16-31
+					      172 1>;	// Buffers 32-63
+			};
+
+			can@fffc4000 {		// Controller Area Network (FlexCAN_B)
+				compatible = "fsl,mpc5554-flexcan";
+				reg = <0xfffc4000 0x4000>;
+				interrupts = <280 1	// Bus off
+					      281 1	// Error
+					      283 1	// Buffer 0
+					      284 1	// Buffer 1
+					      285 1	// Buffer 2
+					      286 1	// Buffer 3
+					      287 1	// Buffer 4
+					      288 1	// Buffer 5
+					      289 1	// Buffer 6
+					      290 1	// Buffer 7
+					      291 1	// Buffer 8
+					      292 1	// Buffer 9
+					      293 1	// Buffer 10
+					      294 1	// Buffer 11
+					      295 1	// Buffer 12
+					      296 1	// Buffer 13
+					      297 1	// Buffer 14
+					      298 1	// Buffer 15
+					      299 1	// Buffers 16-31
+					      300 1>;	// Buffers 32-63
+			};
+
+			can@fffc8000 {		// Controller Area Network (FlexCAN_C)
+				compatible = "fsl,mpc5554-flexcan";
+				reg = <0xfffc8000 0x4000>;
+				interrupts = <173 1	// Bus off
+					      174 1	// Error
+					      176 1	// Buffer 0
+					      177 1	// Buffer 1
+					      178 1	// Buffer 2
+					      179 1	// Buffer 3
+					      180 1	// Buffer 4
+					      181 1	// Buffer 5
+					      182 1	// Buffer 6
+					      183 1	// Buffer 7
+					      184 1	// Buffer 8
+					      185 1	// Buffer 9
+					      186 1	// Buffer 10
+					      187 1	// Buffer 11
+					      188 1	// Buffer 12
+					      189 1	// Buffer 13
+					      190 1	// Buffer 14
+					      191 1	// Buffer 15
+					      192 1	// Buffers 16-31
+					      193 1>;	// Buffers 32-63
+			};
+
+			bam@ffffc000 {		// Boot Assist Module (BAM)
+				compatible = "fsl,mpc5554-bam";
+				reg = <0xffffc000 0x4000>;
+			};
+
+		};
+
+	};
+
+};

^ permalink raw reply

* Re: [PATCH] powerpc/85xx: Make sure lwarx hint isn't set on ppc32
From: Anton Blanchard @ 2010-03-13 22:49 UTC (permalink / raw)
  To: Kumar Gala; +Cc: linuxppc-dev
In-Reply-To: <1268285947-6114-1-git-send-email-galak@kernel.crashing.org>


Hi,

> 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.

Nasty bug! I promise never to touch the opcode map again :)

Acked-by: Anton Blanchard <anton@samba.org>

Anton

> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
> ---
>  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			0x7c0000a8
>  #define PPC_INST_LSWI			0x7c0004aa
>  #define PPC_INST_LSWX			0x7c00042a
> -#define PPC_INST_LWARX			0x7c000029
> +#define PPC_INST_LWARX			0x7c000028
>  #define PPC_INST_LWSYNC			0x7c2004ac
>  #define PPC_INST_LXVD2X			0x7c000698
>  #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

^ permalink raw reply

* 2.6.34-rc1: Badness at fs/proc/generic.c:316
From: Christian Kujau @ 2010-03-13 23:53 UTC (permalink / raw)
  To: LKML; +Cc: linuxppc-dev

Hi,

after upgrading from 2.6.33 to today's latest mainline (daf9fe2...), I'm 
getting this during bootup on a powerpc machine (Powerbook G4):

[    0.002187] ------------[ cut here ]------------
[    0.002197] Badness at fs/proc/generic.c:316
[    0.002207] NIP: c00e1130 LR: c00e1130 CTR: c01fb970
[    0.002219] REGS: c044bdc0 TRAP: 0700   Not tainted  (2.6.34-rc1)
[    0.002230] MSR: 00029032 <EE,ME,CE,IR,DR>  CR: 22000022  XER: 20000000
[    0.002255] TASK = c042c410[0] 'swapper' THREAD: c044a000
[    0.002266] GPR00: c00e1130 c044be70 c042c410 00000024 000012ff ffffffff ffffffff 00000000 
[    0.002291] GPR08: ef808320 c04492d0 00000000 000012ff 42000028 00000000 00ca59bc 00ca56a8 
[    0.002315] GPR16: 00cc8420 00ca5998 00ca55b8 00ca569c 00240e18 00240e20 00ca5644 00240e24 
[    0.002340] GPR24: 00000000 0048b000 c044be98 c044bec8 c0d90a42 c0d90a42 00000006 00000000 
[    0.002376] NIP [c00e1130] __xlate_proc_name+0xd0/0xf8
[    0.002389] LR [c00e1130] __xlate_proc_name+0xd0/0xf8
[    0.002399] Call Trace:
[    0.002408] [c044be70] [c00e1130] __xlate_proc_name+0xd0/0xf8 (unreliable)
[    0.002426] [c044be90] [c00e16a4] __proc_create+0x60/0xf0
[    0.002441] [c044bec0] [c00e1e0c] proc_create_data+0x54/0xc4
[    0.002465] [c044bee0] [c00e5f8c] __proc_device_tree_add_prop+0x64/0xd4
[    0.002486] [c044bf00] [c00e6130] proc_device_tree_add_node+0x134/0x164
[    0.002506] [c044bf20] [c00e60b0] proc_device_tree_add_node+0xb4/0x164
[    0.002527] [c044bf40] [c00e60b0] proc_device_tree_add_node+0xb4/0x164
[    0.002548] [c044bf60] [c00e60b0] proc_device_tree_add_node+0xb4/0x164
[    0.002568] [c044bf80] [c00e60b0] proc_device_tree_add_node+0xb4/0x164
[    0.002592] [c044bfa0] [c0412c8c] proc_device_tree_init+0x4c/0x78
[    0.002612] [c044bfb0] [c04126f4] proc_root_init+0xcc/0xf0
[    0.002632] [c044bfc0] [c03ff798] start_kernel+0x230/0x284
[    0.002649] [c044bff0] [00003444] 0x3444
[    0.002662] Instruction dump:
[    0.002675] 93ba0000 38600000 93fb0000 80010024 bb410008 38210020 7c0803a6 4e800020 
[    0.002707] 3c60c03b 7f84e378 38631d54 48267a3d <0fe00000> 80010024 3860fffe bb410008 


Is this something to worry about? The machine seems to run fine so far...

Full dmesg and .config: 
http://nerdbynature.de/bits/2.6.34-rc1/xlate_proc_name/

Thanks,
Christian.
-- 
BOFH excuse #37:

heavy gravity fluctuation, move computer to floor rapidly

^ permalink raw reply

* Re: 2.6.34-rc1: Badness at fs/proc/generic.c:316
From: Alexey Dobriyan @ 2010-03-14  6:55 UTC (permalink / raw)
  To: Christian Kujau; +Cc: linuxppc-dev, LKML
In-Reply-To: <alpine.DEB.2.01.1003131544340.5493@bogon.housecafe.de>

On Sat, Mar 13, 2010 at 03:53:28PM -0800, Christian Kujau wrote:
> after upgrading from 2.6.33 to today's latest mainline (daf9fe2...), I'm 
> getting this during bootup on a powerpc machine (Powerbook G4):
> 
> [    0.002187] ------------[ cut here ]------------
> [    0.002197] Badness at fs/proc/generic.c:316

> device-tree: Duplicate name in /cpus/PowerPC,G4@0, renamed to "l2-cache#1"
> name 'pulses/rev'

Uh-oh.

> Is this something to worry about? The machine seems to run fine so far...

Runtime behaviour remains the same, it's just new warning message.

^ permalink raw reply

* Re: 2.6.34-rc1: Badness at fs/proc/generic.c:316
From: Christian Kujau @ 2010-03-14 10:39 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: linuxppc-dev, LKML
In-Reply-To: <20100314065526.GA5353@x200>

On Sun, 14 Mar 2010 at 08:55, Alexey Dobriyan wrote:
> > device-tree: Duplicate name in /cpus/PowerPC,G4@0, renamed to "l2-cache#1"
> > name 'pulses/rev'
> 
> Uh-oh.

Uh-oh? :-)

>> Is this something to worry about? The machine seems to run fine so far...
> 
> Runtime behaviour remains the same, it's just new warning message.

So...the laptop probably won't blow up before -rc2 is out? :-)

Christian.
-- 
BOFH excuse #298:

Not enough interrupts

^ permalink raw reply

* 34-rc1-git3 build failure with CGROUP_MEM_RES_CTLR_SWAP=y
From: Sachin Sant @ 2010-03-14 10:48 UTC (permalink / raw)
  To: Linux/PPC Development; +Cc: lizf, nishimura, linux-kernel, Balbir Singh

On a PowerPC box, latest 34-rc1 git(d89b218b8...) fails to build
with CGROUPS_MEM_RES_CTRL_SWAP=y. 

LD      init/built-in.o
LD      .tmp_vmlinux1
mm/built-in.o: In function __xchg:
arch/powerpc/include/asm/system.h:331: undefined reference to .__xchg_called_with_bad_pointer
mm/built-in.o: In function __cmpxchg:
arch/powerpc/include/asm/system.h:474: undefined reference to .__cmpxchg_called_with_bad_pointer
make: *** [.tmp_vmlinux1] Error 1

The code in question was added via commit 024914477e...

memcg: move charges of anonymous swap

Thanks
-Sachin


-- 

---------------------------------
Sachin Sant
IBM Linux Technology Center
India Systems and Technology Labs
Bangalore, India
---------------------------------

^ permalink raw reply

* Re: 2.6.34-rc1: Badness at fs/proc/generic.c:316
From: Alexey Dobriyan @ 2010-03-14 11:24 UTC (permalink / raw)
  To: Christian Kujau; +Cc: linuxppc-dev, LKML
In-Reply-To: <alpine.DEB.2.01.1003140336280.5493@bogon.housecafe.de>

On Sun, Mar 14, 2010 at 03:39:39AM -0700, Christian Kujau wrote:
> On Sun, 14 Mar 2010 at 08:55, Alexey Dobriyan wrote:
> > > device-tree: Duplicate name in /cpus/PowerPC,G4@0, renamed to "l2-cache#1"
> > > name 'pulses/rev'
> > 
> > Uh-oh.
> 
> Uh-oh? :-)
> 
> >> Is this something to worry about? The machine seems to run fine so far...
> > 
> > Runtime behaviour remains the same, it's just new warning message.
> 
> So...the laptop probably won't blow up before -rc2 is out? :-)

Defitely not.

Post "find /proc/device-tree" output.

^ permalink raw reply

* Re: 2.6.34-rc1: Badness at fs/proc/generic.c:316
From: Christian Kujau @ 2010-03-14 11:46 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: linuxppc-dev, LKML
In-Reply-To: <20100314112428.GA4142@x200>

On Sun, 14 Mar 2010 at 13:24, Alexey Dobriyan wrote:
> Post "find /proc/device-tree" output.

I did upload[0] a tarball of /proc/device-tree, please see below the 
"find" output.

Indeed, there's a /cpus/PowerPC,G4@0/l2-cache and 
/cpus/PowerPC,G4@0/l2-cache#1 in the device-tree. However, from looking at 
the logfiles, the

   device-tree: Duplicate name in /cpus/PowerPC,G4@0, renamed to "l2-cache#1"

message appeared since at least August 2009, when I was running a 
Debian 2.6.26 kernel. The "Badness" however is new.

Christian.

$ find /proc/device-tree/
/proc/device-tree/
/proc/device-tree/name
/proc/device-tree/linux,phandle
/proc/device-tree/graphic-options
/proc/device-tree/AAPL,add-fcode-file
/proc/device-tree/clock-frequency
/proc/device-tree/#size-cells
/proc/device-tree/#address-cells
/proc/device-tree/system-id
/proc/device-tree/device_type
/proc/device-tree/copyright
/proc/device-tree/display-config-info
/proc/device-tree/scb#
/proc/device-tree/pid#
/proc/device-tree/customer-sw-config
/proc/device-tree/serial-number
/proc/device-tree/compatible
/proc/device-tree/model
/proc/device-tree/vsp@f9000000
/proc/device-tree/vsp@f9000000/name
/proc/device-tree/vsp@f9000000/linux,phandle
/proc/device-tree/vsp@f9000000/interrupt-parent
/proc/device-tree/vsp@f9000000/interrupts
/proc/device-tree/vsp@f9000000/#size-cells
/proc/device-tree/vsp@f9000000/#address-cells
/proc/device-tree/vsp@f9000000/ranges
/proc/device-tree/vsp@f9000000/reg
/proc/device-tree/vsp@f9000000/compatible
/proc/device-tree/vsp@f9000000/model
/proc/device-tree/vsp@f9000000/device_type
/proc/device-tree/vsp@f9000000/veo@f9180000
/proc/device-tree/vsp@f9000000/veo@f9180000/name
/proc/device-tree/vsp@f9000000/veo@f9180000/linux,phandle
/proc/device-tree/vsp@f9000000/veo@f9180000/reg
/proc/device-tree/vsp@f9000000/veo@f9180000/device_type
/proc/device-tree/vsp@f9000000/veo@f9080000
/proc/device-tree/vsp@f9000000/veo@f9080000/name
/proc/device-tree/vsp@f9000000/veo@f9080000/linux,phandle
/proc/device-tree/vsp@f9000000/veo@f9080000/reg
/proc/device-tree/vsp@f9000000/veo@f9080000/device_type
/proc/device-tree/pci@f4000000
/proc/device-tree/pci@f4000000/name
/proc/device-tree/pci@f4000000/linux,phandle
/proc/device-tree/pci@f4000000/interrupt-map-mask
/proc/device-tree/pci@f4000000/interrupt-map
/proc/device-tree/pci@f4000000/interrupt-parent
/proc/device-tree/pci@f4000000/interrupts
/proc/device-tree/pci@f4000000/bus-range
/proc/device-tree/pci@f4000000/ranges
/proc/device-tree/pci@f4000000/write-combining
/proc/device-tree/pci@f4000000/built-in-names
/proc/device-tree/pci@f4000000/clock-frequency
/proc/device-tree/pci@f4000000/#interrupt-cells
/proc/device-tree/pci@f4000000/#size-cells
/proc/device-tree/pci@f4000000/#address-cells
/proc/device-tree/pci@f4000000/reg
/proc/device-tree/pci@f4000000/compatible
/proc/device-tree/pci@f4000000/model
/proc/device-tree/pci@f4000000/device_type
/proc/device-tree/pci@f4000000/ethernet@f
/proc/device-tree/pci@f4000000/ethernet@f/name
/proc/device-tree/pci@f4000000/ethernet@f/linux,phandle
/proc/device-tree/pci@f4000000/ethernet@f/assigned-addresses
/proc/device-tree/pci@f4000000/ethernet@f/local-mac-address
/proc/device-tree/pci@f4000000/ethernet@f/stats
/proc/device-tree/pci@f4000000/ethernet@f/reg
/proc/device-tree/pci@f4000000/ethernet@f/cache-line-size
/proc/device-tree/pci@f4000000/ethernet@f/max-frame-size
/proc/device-tree/pci@f4000000/ethernet@f/address-bits
/proc/device-tree/pci@f4000000/ethernet@f/built-in
/proc/device-tree/pci@f4000000/ethernet@f/compatible
/proc/device-tree/pci@f4000000/ethernet@f/category
/proc/device-tree/pci@f4000000/ethernet@f/removable
/proc/device-tree/pci@f4000000/ethernet@f/network-type
/proc/device-tree/pci@f4000000/ethernet@f/device_type
/proc/device-tree/pci@f4000000/ethernet@f/fast-back-to-back
/proc/device-tree/pci@f4000000/ethernet@f/devsel-speed
/proc/device-tree/pci@f4000000/ethernet@f/max-latency
/proc/device-tree/pci@f4000000/ethernet@f/min-grant
/proc/device-tree/pci@f4000000/ethernet@f/interrupts
/proc/device-tree/pci@f4000000/ethernet@f/class-code
/proc/device-tree/pci@f4000000/ethernet@f/revision-id
/proc/device-tree/pci@f4000000/ethernet@f/device-id
/proc/device-tree/pci@f4000000/ethernet@f/vendor-id
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/name
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/linux,phandle
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/gpio-parent
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/gpio-value
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/gpio-mask
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/gpio-reg
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/interrupt-parent
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/interrupts
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/compatible
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/phy-id
/proc/device-tree/pci@f4000000/ethernet@f/ethernet-phy/device_type
/proc/device-tree/pci@f4000000/firewire@e
/proc/device-tree/pci@f4000000/firewire@e/name
/proc/device-tree/pci@f4000000/firewire@e/linux,phandle
/proc/device-tree/pci@f4000000/firewire@e/firewire-pci-clock
/proc/device-tree/pci@f4000000/firewire@e/platform-fw-linkon-disable
/proc/device-tree/pci@f4000000/firewire@e/platform-fw-linkon-enable
/proc/device-tree/pci@f4000000/firewire@e/platform-phy-pd
/proc/device-tree/pci@f4000000/firewire@e/assigned-addresses
/proc/device-tree/pci@f4000000/firewire@e/local-guid
/proc/device-tree/pci@f4000000/firewire@e/#size-cells
/proc/device-tree/pci@f4000000/firewire@e/#address-cells
/proc/device-tree/pci@f4000000/firewire@e/compatible
/proc/device-tree/pci@f4000000/firewire@e/reg
/proc/device-tree/pci@f4000000/firewire@e/device_type
/proc/device-tree/pci@f4000000/firewire@e/fast-back-to-back
/proc/device-tree/pci@f4000000/firewire@e/devsel-speed
/proc/device-tree/pci@f4000000/firewire@e/subsystem-id
/proc/device-tree/pci@f4000000/firewire@e/subsystem-vendor-id
/proc/device-tree/pci@f4000000/firewire@e/max-latency
/proc/device-tree/pci@f4000000/firewire@e/min-grant
/proc/device-tree/pci@f4000000/firewire@e/interrupts
/proc/device-tree/pci@f4000000/firewire@e/class-code
/proc/device-tree/pci@f4000000/firewire@e/revision-id
/proc/device-tree/pci@f4000000/firewire@e/device-id
/proc/device-tree/pci@f4000000/firewire@e/vendor-id
/proc/device-tree/pci@f4000000/ata-6@d
/proc/device-tree/pci@f4000000/ata-6@d/name
/proc/device-tree/pci@f4000000/ata-6@d/linux,phandle
/proc/device-tree/pci@f4000000/ata-6@d/assigned-addresses
/proc/device-tree/pci@f4000000/ata-6@d/reg
/proc/device-tree/pci@f4000000/ata-6@d/compatible
/proc/device-tree/pci@f4000000/ata-6@d/AAPL,requested-priorities
/proc/device-tree/pci@f4000000/ata-6@d/interrupts
/proc/device-tree/pci@f4000000/ata-6@d/lba-48
/proc/device-tree/pci@f4000000/ata-6@d/AAPL,pio-timing
/proc/device-tree/pci@f4000000/ata-6@d/#size-cells
/proc/device-tree/pci@f4000000/ata-6@d/#address-cells
/proc/device-tree/pci@f4000000/ata-6@d/cable-type
/proc/device-tree/pci@f4000000/ata-6@d/AAPL,bus-id
/proc/device-tree/pci@f4000000/ata-6@d/AAPL,connector
/proc/device-tree/pci@f4000000/ata-6@d/device_type
/proc/device-tree/pci@f4000000/ata-6@d/model
/proc/device-tree/pci@f4000000/ata-6@d/devsel-speed
/proc/device-tree/pci@f4000000/ata-6@d/max-latency
/proc/device-tree/pci@f4000000/ata-6@d/min-grant
/proc/device-tree/pci@f4000000/ata-6@d/class-code
/proc/device-tree/pci@f4000000/ata-6@d/revision-id
/proc/device-tree/pci@f4000000/ata-6@d/device-id
/proc/device-tree/pci@f4000000/ata-6@d/vendor-id
/proc/device-tree/pci@f4000000/ata-6@d/disk
/proc/device-tree/pci@f4000000/ata-6@d/disk/name
/proc/device-tree/pci@f4000000/ata-6@d/disk/linux,phandle
/proc/device-tree/pci@f4000000/ata-6@d/disk/category
/proc/device-tree/pci@f4000000/ata-6@d/disk/device_type
/proc/device-tree/pci@f2000000
/proc/device-tree/pci@f2000000/name
/proc/device-tree/pci@f2000000/linux,phandle
/proc/device-tree/pci@f2000000/interrupt-map-mask
/proc/device-tree/pci@f2000000/interrupt-map
/proc/device-tree/pci@f2000000/interrupt-parent
/proc/device-tree/pci@f2000000/interrupts
/proc/device-tree/pci@f2000000/bus-range
/proc/device-tree/pci@f2000000/ranges
/proc/device-tree/pci@f2000000/write-combining
/proc/device-tree/pci@f2000000/slot-names
/proc/device-tree/pci@f2000000/built-in-names
/proc/device-tree/pci@f2000000/clock-frequency
/proc/device-tree/pci@f2000000/#interrupt-cells
/proc/device-tree/pci@f2000000/#size-cells
/proc/device-tree/pci@f2000000/#address-cells
/proc/device-tree/pci@f2000000/reg
/proc/device-tree/pci@f2000000/compatible
/proc/device-tree/pci@f2000000/model
/proc/device-tree/pci@f2000000/device_type
/proc/device-tree/pci@f2000000/usb@1b,2
/proc/device-tree/pci@f2000000/usb@1b,2/name
/proc/device-tree/pci@f2000000/usb@1b,2/linux,phandle
/proc/device-tree/pci@f2000000/usb@1b,2/device_type
/proc/device-tree/pci@f2000000/usb@1b,2/sleep-power-state
/proc/device-tree/pci@f2000000/usb@1b,2/assigned-addresses
/proc/device-tree/pci@f2000000/usb@1b,2/reg
/proc/device-tree/pci@f2000000/usb@1b,2/compatible
/proc/device-tree/pci@f2000000/usb@1b,2/devsel-speed
/proc/device-tree/pci@f2000000/usb@1b,2/subsystem-id
/proc/device-tree/pci@f2000000/usb@1b,2/subsystem-vendor-id
/proc/device-tree/pci@f2000000/usb@1b,2/max-latency
/proc/device-tree/pci@f2000000/usb@1b,2/min-grant
/proc/device-tree/pci@f2000000/usb@1b,2/interrupts
/proc/device-tree/pci@f2000000/usb@1b,2/class-code
/proc/device-tree/pci@f2000000/usb@1b,2/revision-id
/proc/device-tree/pci@f2000000/usb@1b,2/device-id
/proc/device-tree/pci@f2000000/usb@1b,2/vendor-id
/proc/device-tree/pci@f2000000/usb@1b,1
/proc/device-tree/pci@f2000000/usb@1b,1/name
/proc/device-tree/pci@f2000000/usb@1b,1/linux,phandle
/proc/device-tree/pci@f2000000/usb@1b,1/sleep-power-state
/proc/device-tree/pci@f2000000/usb@1b,1/assigned-addresses
/proc/device-tree/pci@f2000000/usb@1b,1/compatible
/proc/device-tree/pci@f2000000/usb@1b,1/#size-cells
/proc/device-tree/pci@f2000000/usb@1b,1/#address-cells
/proc/device-tree/pci@f2000000/usb@1b,1/reg
/proc/device-tree/pci@f2000000/usb@1b,1/built-in
/proc/device-tree/pci@f2000000/usb@1b,1/device_type
/proc/device-tree/pci@f2000000/usb@1b,1/devsel-speed
/proc/device-tree/pci@f2000000/usb@1b,1/subsystem-id
/proc/device-tree/pci@f2000000/usb@1b,1/subsystem-vendor-id
/proc/device-tree/pci@f2000000/usb@1b,1/max-latency
/proc/device-tree/pci@f2000000/usb@1b,1/min-grant
/proc/device-tree/pci@f2000000/usb@1b,1/interrupts
/proc/device-tree/pci@f2000000/usb@1b,1/class-code
/proc/device-tree/pci@f2000000/usb@1b,1/revision-id
/proc/device-tree/pci@f2000000/usb@1b,1/device-id
/proc/device-tree/pci@f2000000/usb@1b,1/vendor-id
/proc/device-tree/pci@f2000000/usb@1b
/proc/device-tree/pci@f2000000/usb@1b/name
/proc/device-tree/pci@f2000000/usb@1b/linux,phandle
/proc/device-tree/pci@f2000000/usb@1b/sleep-power-state
/proc/device-tree/pci@f2000000/usb@1b/assigned-addresses
/proc/device-tree/pci@f2000000/usb@1b/compatible
/proc/device-tree/pci@f2000000/usb@1b/#size-cells
/proc/device-tree/pci@f2000000/usb@1b/#address-cells
/proc/device-tree/pci@f2000000/usb@1b/reg
/proc/device-tree/pci@f2000000/usb@1b/built-in
/proc/device-tree/pci@f2000000/usb@1b/device_type
/proc/device-tree/pci@f2000000/usb@1b/devsel-speed
/proc/device-tree/pci@f2000000/usb@1b/subsystem-id
/proc/device-tree/pci@f2000000/usb@1b/subsystem-vendor-id
/proc/device-tree/pci@f2000000/usb@1b/max-latency
/proc/device-tree/pci@f2000000/usb@1b/min-grant
/proc/device-tree/pci@f2000000/usb@1b/interrupts
/proc/device-tree/pci@f2000000/usb@1b/class-code
/proc/device-tree/pci@f2000000/usb@1b/revision-id
/proc/device-tree/pci@f2000000/usb@1b/device-id
/proc/device-tree/pci@f2000000/usb@1b/vendor-id
/proc/device-tree/pci@f2000000/usb@1b/disk@1
/proc/device-tree/pci@f2000000/usb@1b/disk@1/name
/proc/device-tree/pci@f2000000/usb@1b/disk@1/linux,phandle
/proc/device-tree/pci@f2000000/usb@1b/disk@1/endpoints
/proc/device-tree/pci@f2000000/usb@1b/disk@1/device_type
/proc/device-tree/pci@f2000000/usb@1b/disk@1/assigned-address
/proc/device-tree/pci@f2000000/usb@1b/disk@1/reg
/proc/device-tree/pci@f2000000/usb@1b/disk@1/product-id
/proc/device-tree/pci@f2000000/usb@1b/disk@1/vendor-id
/proc/device-tree/pci@f2000000/usb@1a
/proc/device-tree/pci@f2000000/usb@1a/name
/proc/device-tree/pci@f2000000/usb@1a/linux,phandle
/proc/device-tree/pci@f2000000/usb@1a/AAPL,bus-id
/proc/device-tree/pci@f2000000/usb@1a/AAPL,clock-aux-data
/proc/device-tree/pci@f2000000/usb@1a/AAPL,clock-data
/proc/device-tree/pci@f2000000/usb@1a/AAPL,clock-id
/proc/device-tree/pci@f2000000/usb@1a/assigned-addresses
/proc/device-tree/pci@f2000000/usb@1a/compatible
/proc/device-tree/pci@f2000000/usb@1a/#size-cells
/proc/device-tree/pci@f2000000/usb@1a/#address-cells
/proc/device-tree/pci@f2000000/usb@1a/reg
/proc/device-tree/pci@f2000000/usb@1a/built-in
/proc/device-tree/pci@f2000000/usb@1a/device_type
/proc/device-tree/pci@f2000000/usb@1a/devsel-speed
/proc/device-tree/pci@f2000000/usb@1a/max-latency
/proc/device-tree/pci@f2000000/usb@1a/min-grant
/proc/device-tree/pci@f2000000/usb@1a/interrupts
/proc/device-tree/pci@f2000000/usb@1a/class-code
/proc/device-tree/pci@f2000000/usb@1a/revision-id
/proc/device-tree/pci@f2000000/usb@1a/device-id
/proc/device-tree/pci@f2000000/usb@1a/vendor-id
/proc/device-tree/pci@f2000000/usb@1a/mouse@2
/proc/device-tree/pci@f2000000/usb@1a/mouse@2/name
/proc/device-tree/pci@f2000000/usb@1a/mouse@2/linux,phandle
/proc/device-tree/pci@f2000000/usb@1a/mouse@2/endpoints
/proc/device-tree/pci@f2000000/usb@1a/mouse@2/#buttons
/proc/device-tree/pci@f2000000/usb@1a/mouse@2/device_type
/proc/device-tree/pci@f2000000/usb@1a/mouse@2/assigned-address
/proc/device-tree/pci@f2000000/usb@1a/mouse@2/reg
/proc/device-tree/pci@f2000000/usb@1a/mouse@2/product-id
/proc/device-tree/pci@f2000000/usb@1a/mouse@2/vendor-id
/proc/device-tree/pci@f2000000/usb@1a/device@1
/proc/device-tree/pci@f2000000/usb@1a/device@1/name
/proc/device-tree/pci@f2000000/usb@1a/device@1/linux,phandle
/proc/device-tree/pci@f2000000/usb@1a/device@1/#size-cells
/proc/device-tree/pci@f2000000/usb@1a/device@1/#address-cells
/proc/device-tree/pci@f2000000/usb@1a/device@1/device_type
/proc/device-tree/pci@f2000000/usb@1a/device@1/assigned-address
/proc/device-tree/pci@f2000000/usb@1a/device@1/reg
/proc/device-tree/pci@f2000000/usb@1a/device@1/product-id
/proc/device-tree/pci@f2000000/usb@1a/device@1/vendor-id
/proc/device-tree/pci@f2000000/usb@1a/device@1/mouse@1
/proc/device-tree/pci@f2000000/usb@1a/device@1/mouse@1/name
/proc/device-tree/pci@f2000000/usb@1a/device@1/mouse@1/linux,phandle
/proc/device-tree/pci@f2000000/usb@1a/device@1/mouse@1/endpoints
/proc/device-tree/pci@f2000000/usb@1a/device@1/mouse@1/#buttons
/proc/device-tree/pci@f2000000/usb@1a/device@1/mouse@1/device_type
/proc/device-tree/pci@f2000000/usb@1a/device@1/mouse@1/reg
/proc/device-tree/pci@f2000000/usb@1a/device@1/keyboard@0
/proc/device-tree/pci@f2000000/usb@1a/device@1/keyboard@0/name
/proc/device-tree/pci@f2000000/usb@1a/device@1/keyboard@0/linux,phandle
/proc/device-tree/pci@f2000000/usb@1a/device@1/keyboard@0/endpoints
/proc/device-tree/pci@f2000000/usb@1a/device@1/keyboard@0/device_type
/proc/device-tree/pci@f2000000/usb@1a/device@1/keyboard@0/reg
/proc/device-tree/pci@f2000000/pci80211@12
/proc/device-tree/pci@f2000000/pci80211@12/name
/proc/device-tree/pci@f2000000/pci80211@12/linux,phandle
/proc/device-tree/pci@f2000000/pci80211@12/assigned-addresses
/proc/device-tree/pci@f2000000/pci80211@12/local-mac-address
/proc/device-tree/pci@f2000000/pci80211@12/antenna-tx
/proc/device-tree/pci@f2000000/pci80211@12/antenna-rx-diversity
/proc/device-tree/pci@f2000000/pci80211@12/reg
/proc/device-tree/pci@f2000000/pci80211@12/category
/proc/device-tree/pci@f2000000/pci80211@12/removable
/proc/device-tree/pci@f2000000/pci80211@12/network-type
/proc/device-tree/pci@f2000000/pci80211@12/compatible
/proc/device-tree/pci@f2000000/pci80211@12/devsel-speed
/proc/device-tree/pci@f2000000/pci80211@12/subsystem-id
/proc/device-tree/pci@f2000000/pci80211@12/subsystem-vendor-id
/proc/device-tree/pci@f2000000/pci80211@12/max-latency
/proc/device-tree/pci@f2000000/pci80211@12/min-grant
/proc/device-tree/pci@f2000000/pci80211@12/interrupts
/proc/device-tree/pci@f2000000/pci80211@12/class-code
/proc/device-tree/pci@f2000000/pci80211@12/revision-id
/proc/device-tree/pci@f2000000/pci80211@12/device-id
/proc/device-tree/pci@f2000000/pci80211@12/vendor-id
/proc/device-tree/pci@f2000000/mac-io@17
/proc/device-tree/pci@f2000000/mac-io@17/name
/proc/device-tree/pci@f2000000/mac-io@17/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/include-k2-support
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-cell-disable
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-cell-enable
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-get-cell-enable
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-sw-reset
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-clear-sw-reset
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-get-sw-reset
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-clock-disable
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-clock-enable
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-get-clock-enable
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-disable
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-enable
/proc/device-tree/pci@f2000000/mac-io@17/platform-do-get-enable
/proc/device-tree/pci@f2000000/mac-io@17/platform-modem-power
/proc/device-tree/pci@f2000000/mac-io@17/platform-modem-reset
/proc/device-tree/pci@f2000000/mac-io@17/ranges
/proc/device-tree/pci@f2000000/mac-io@17/#interrupt-cells
/proc/device-tree/pci@f2000000/mac-io@17/#size-cells
/proc/device-tree/pci@f2000000/mac-io@17/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/assigned-addresses
/proc/device-tree/pci@f2000000/mac-io@17/devsel-speed
/proc/device-tree/pci@f2000000/mac-io@17/max-latency
/proc/device-tree/pci@f2000000/mac-io@17/min-grant
/proc/device-tree/pci@f2000000/mac-io@17/class-code
/proc/device-tree/pci@f2000000/mac-io@17/revision-id
/proc/device-tree/pci@f2000000/mac-io@17/device-id
/proc/device-tree/pci@f2000000/mac-io@17/vendor-id
/proc/device-tree/pci@f2000000/mac-io@17/reg
/proc/device-tree/pci@f2000000/mac-io@17/compatible
/proc/device-tree/pci@f2000000/mac-io@17/model
/proc/device-tree/pci@f2000000/mac-io@17/device_type
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/name
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/AAPL,clock-aux-data
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/AAPL,clock-data
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/AAPL,clock-id
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/model
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/lba-48
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/AAPL,pio-timing
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/#size-cells
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/reg
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/AAPL,bus-id
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/AAPL,connector
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/disk
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/disk/name
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/disk/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/ata-3@20000/disk/device_type
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/name
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/AAPL,driver-name
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/AAPL,i2c-rate
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/AAPL,address-step
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/AAPL,address
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/#size-cells
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/reg
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/name
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/built-in
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/#size-cells
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/compatible
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/reg
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/device_type
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/codec@6a
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/codec@6a/name
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/codec@6a/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/codec@6a/platform-do-tas-codec-ref
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/codec@6a/built-in
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/codec@6a/reg
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/codec@6a/compatible
/proc/device-tree/pci@f2000000/mac-io@17/i2c@18000/i2c-bus@0/codec@6a/device_type
/proc/device-tree/pci@f2000000/mac-io@17/backlight@f300
/proc/device-tree/pci@f2000000/mac-io@17/backlight@f300/name
/proc/device-tree/pci@f2000000/mac-io@17/backlight@f300/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/backlight@f300/panel-family
/proc/device-tree/pci@f2000000/mac-io@17/backlight@f300/backlight-control
/proc/device-tree/pci@f2000000/mac-io@17/backlight@f300/reg
/proc/device-tree/pci@f2000000/mac-io@17/backlight@f300/device_type
/proc/device-tree/pci@f2000000/mac-io@17/battery@0
/proc/device-tree/pci@f2000000/mac-io@17/battery@0/name
/proc/device-tree/pci@f2000000/mac-io@17/battery@0/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/battery@0/reg
/proc/device-tree/pci@f2000000/mac-io@17/battery@0/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/hwsensor-polling-period
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/hwsensor-location
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/hwsensor-type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/hwsensor-zone
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/hwsensor-id
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/hwsensor-params-version
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/pmu-version
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/#size-cells
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/pmu-info
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/AAPL,clock-data
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/AAPL,clock-id
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/reg
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/thermal-info
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/prim-info
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/registry-name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/max-aux-power
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/compatible
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/usb-power-mgt
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/usb-power-mgt/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/usb-power-mgt/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/usb-power-mgt/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/usb-power-mgt/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/usb-power-mgt/compatible
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/power-mgt/usb-power-mgt/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/#size-cells
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/compatible
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/eject-key
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/eject-key/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/eject-key/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/eject-key/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/mouse@3
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/mouse@3/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/mouse@3/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/mouse@3/compatible
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/mouse@3/#buttons
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/mouse@3/reg
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/mouse@3/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/keyboard-id-extension
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/keyboard-id
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/F7
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/F6
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/F5
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/F4
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/F3
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/F2
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/F1
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/AAPL,has-embedded-fn-keys
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/reg
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/adb/keyboard@2/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/rtc
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/rtc/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/rtc/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/rtc/compatible
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/rtc/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/pmu-i2c
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/pmu-i2c/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/pmu-i2c/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/pmu-i2c/#size-cells
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/pmu-i2c/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/pmu-i2c/compatible
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/pmu-i2c/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/name
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/compatible
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/built-in
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/device_type
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/location
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/zone
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/polling-period
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/version
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/sensor-id
/proc/device-tree/pci@f2000000/mac-io@17/via-pmu@16000/battery@0,0/reg
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000/name
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000/clock-frequency
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000/reg
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/timer@15000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/name
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/AAPL,address
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/ranges
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/reg
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/built-in
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/device_type
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000/name
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000/sw-reset-enable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000/reg
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-b@11000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/name
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-cell-disable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-cell-enable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-get-cell-enable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-sw-reset
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-clear-sw-reset
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-get-sw-reset
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-clock-disable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-clock-enable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-get-clock-enable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-disable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-enable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-get-enable
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-headphone-detect
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-linein-detect
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-hw-reset
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-amp-mute
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/platform-headphone-mute
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/reg
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound/name
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound/platform-tas-codec-ref
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound/vendor-id
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound/object-model-version
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound/layout-id
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound/built-in
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound/compatible
/proc/device-tree/pci@f2000000/mac-io@17/i2s@0/i2s-a@10000/sound/device_type
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/name
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ranges
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/reg
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000/name
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000/slot-names
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000/reg
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-b@13000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/name
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/AAPL,clock-data
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/AAPL,clock-id
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/reg
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/built-in
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/compatible
/proc/device-tree/pci@f2000000/mac-io@17/escc@13000/ch-a@13020/device_type
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/name
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ranges
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/reg
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-b@12000
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-b@12000/name
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-b@12000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-b@12000/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-b@12000/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-b@12000/reg
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-b@12000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-b@12000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-b@12000/device_type
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-a@12004
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-a@12004/name
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-a@12004/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-a@12004/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-a@12004/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-a@12004/reg
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-a@12004/built-in
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-a@12004/compatible
/proc/device-tree/pci@f2000000/mac-io@17/escc-legacy@12000/ch-a@12004/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/#size-cells
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/gpio4@1e
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/gpio4@1e/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/gpio4@1e/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/gpio4@1e/platform-do-phy-pd
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/gpio4@1e/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/gpio4@1e/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/gpio4@1e/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/gpio4@1e/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/cpu-vcore-select@6b
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/cpu-vcore-select@6b/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/cpu-vcore-select@6b/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/cpu-vcore-select@6b/active-state
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/cpu-vcore-select@6b/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/cpu-vcore-select@6b/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/cpu-vcore-select@6b/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/programmer-switch@11
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/programmer-switch@11/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/programmer-switch@11/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/programmer-switch@11/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/programmer-switch@11/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/programmer-switch@11/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/programmer-switch@11/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/programmer-switch@11/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/programmer-switch@11/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9/AAPL,interrupt-priorities
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/extint-gpio1@9/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17/platform-do-headphone-detect
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-detect@17/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c/platform-do-linein-detect
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/linein-detect@c/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/hw-reset@25
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/hw-reset@25/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/hw-reset@25/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/hw-reset@25/platform-do-hw-reset
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/hw-reset@25/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/hw-reset@25/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/hw-reset@25/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/hw-reset@25/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/amp-mute@20
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/amp-mute@20/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/amp-mute@20/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/amp-mute@20/platform-do-amp-mute
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/amp-mute@20/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/amp-mute@20/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/amp-mute@20/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/amp-mute@20/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-mute@1f
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-mute@1f/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-mute@1f/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-mute@1f/platform-do-headphone-mute
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-mute@1f/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-mute@1f/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-mute@1f/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/headphone-mute@1f/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14/platform-do-accel-int-2
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-2@14/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13/platform-do-accel-int-1
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13/interrupt-parent
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13/interrupts
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/accelerometer-1@13/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-power@1c
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-power@1c/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-power@1c/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-power@1c/platform-do-modem-power
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-power@1c/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-power@1c/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-power@1c/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-power@1c/device_type
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-reset@1d
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-reset@1d/name
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-reset@1d/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-reset@1d/platform-do-modem-reset
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-reset@1d/compatible
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-reset@1d/built-in
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-reset@1d/reg
/proc/device-tree/pci@f2000000/mac-io@17/gpio@50/modem-reset@1d/device_type
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/name
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/linux,phandle
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/clock-frequency
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/interrupt-controller
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/#address-cells
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/#interrupt-cells
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/reg
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/built-in
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/compatible
/proc/device-tree/pci@f2000000/mac-io@17/interrupt-controller@40000/device_type
/proc/device-tree/pci@f0000000
/proc/device-tree/pci@f0000000/name
/proc/device-tree/pci@f0000000/linux,phandle
/proc/device-tree/pci@f0000000/interrupt-map-mask
/proc/device-tree/pci@f0000000/interrupt-map
/proc/device-tree/pci@f0000000/interrupt-parent
/proc/device-tree/pci@f0000000/interrupts
/proc/device-tree/pci@f0000000/bus-range
/proc/device-tree/pci@f0000000/ranges
/proc/device-tree/pci@f0000000/write-combining
/proc/device-tree/pci@f0000000/built-in-names
/proc/device-tree/pci@f0000000/clock-frequency
/proc/device-tree/pci@f0000000/#interrupt-cells
/proc/device-tree/pci@f0000000/#size-cells
/proc/device-tree/pci@f0000000/#address-cells
/proc/device-tree/pci@f0000000/reg
/proc/device-tree/pci@f0000000/compatible
/proc/device-tree/pci@f0000000/model
/proc/device-tree/pci@f0000000/device_type
/proc/device-tree/pci@f0000000/NVDA,Parent@10
/proc/device-tree/pci@f0000000/NVDA,Parent@10/name
/proc/device-tree/pci@f0000000/NVDA,Parent@10/linux,phandle
/proc/device-tree/pci@f0000000/NVDA,Parent@10/AGP_AllowOverlap
/proc/device-tree/pci@f0000000/NVDA,Parent@10/AGP_Alignment
/proc/device-tree/pci@f0000000/NVDA,Parent@10/AGP_Address_Block
/proc/device-tree/pci@f0000000/NVDA,Parent@10/AGP_Address_Range
/proc/device-tree/pci@f0000000/NVDA,Parent@10/AGP_Master
/proc/device-tree/pci@f0000000/NVDA,Parent@10/assigned-addresses
/proc/device-tree/pci@f0000000/NVDA,Parent@10/VRAM,memsize
/proc/device-tree/pci@f0000000/NVDA,Parent@10/reg
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Level
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Features
/proc/device-tree/pci@f0000000/NVDA,Parent@10/rom-revision
/proc/device-tree/pci@f0000000/NVDA,Parent@10/#size-cells
/proc/device-tree/pci@f0000000/NVDA,Parent@10/#address-cells
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVCAP
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVPM
/proc/device-tree/pci@f0000000/NVDA,Parent@10/max-temp-limit
/proc/device-tree/pci@f0000000/NVDA,Parent@10/device_type
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,BMP
/proc/device-tree/pci@f0000000/NVDA,Parent@10/model
/proc/device-tree/pci@f0000000/NVDA,Parent@10/subsystem-id
/proc/device-tree/pci@f0000000/NVDA,Parent@10/subsystem-vendor-id
/proc/device-tree/pci@f0000000/NVDA,Parent@10/fast-back-to-back
/proc/device-tree/pci@f0000000/NVDA,Parent@10/devsel-speed
/proc/device-tree/pci@f0000000/NVDA,Parent@10/max-latency
/proc/device-tree/pci@f0000000/NVDA,Parent@10/min-grant
/proc/device-tree/pci@f0000000/NVDA,Parent@10/interrupts
/proc/device-tree/pci@f0000000/NVDA,Parent@10/class-code
/proc/device-tree/pci@f0000000/NVDA,Parent@10/revision-id
/proc/device-tree/pci@f0000000/NVDA,Parent@10/device-id
/proc/device-tree/pci@f0000000/NVDA,Parent@10/vendor-id
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/name
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/linux,phandle
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/linux,opened
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/fboffset
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/refresh
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/address
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/depth
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/linebytes
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/height
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/width
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/NVMT
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/VRAM,memsize
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/NVDA,memsize
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/i2c-mapping
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/can-hot-plug
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/display-cfg
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/display-type
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/connector-type
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/compatible
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/reg
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-B@1/device_type
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/name
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/linux,phandle
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/linux,opened
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/linux,boot-display
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/iso6429-1983-colors
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/AAPL,gray-page
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/NVMT
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/fboffset
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/address
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/VRAM,memsize
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/NVDA,memsize
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/i2c-mapping
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/use-backlight-blanking
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/panelinfo
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/NVPR
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-power-sequence
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-dither-support
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-inverter-default-cycle
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-inverter
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-pixel-component-bits
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-link-component-bits
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-data-justification
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-link-type
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/built-in
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/backlight-control
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/backlight-pwm-freq
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/inverter-current
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-cfg
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/display-type
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/EDID
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/refresh
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/linebytes
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/depth
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/height
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/width
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/character-set
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/connector-type
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/compatible
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/reg
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/device_type
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/i2c
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/i2c/name
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/i2c/linux,phandle
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/i2c/compatible
/proc/device-tree/pci@f0000000/NVDA,Parent@10/NVDA,Display-A@0/i2c/device_type
/proc/device-tree/pci@f0000000/uni-north-agp@b
/proc/device-tree/pci@f0000000/uni-north-agp@b/name
/proc/device-tree/pci@f0000000/uni-north-agp@b/linux,phandle
/proc/device-tree/pci@f0000000/uni-north-agp@b/assigned-addresses
/proc/device-tree/pci@f0000000/uni-north-agp@b/reg
/proc/device-tree/pci@f0000000/uni-north-agp@b/AGP_Target
/proc/device-tree/pci@f0000000/uni-north-agp@b/compatible
/proc/device-tree/pci@f0000000/uni-north-agp@b/device_type
/proc/device-tree/pci@f0000000/uni-north-agp@b/fast-back-to-back
/proc/device-tree/pci@f0000000/uni-north-agp@b/devsel-speed
/proc/device-tree/pci@f0000000/uni-north-agp@b/max-latency
/proc/device-tree/pci@f0000000/uni-north-agp@b/min-grant
/proc/device-tree/pci@f0000000/uni-north-agp@b/class-code
/proc/device-tree/pci@f0000000/uni-north-agp@b/revision-id
/proc/device-tree/pci@f0000000/uni-north-agp@b/device-id
/proc/device-tree/pci@f0000000/uni-north-agp@b/vendor-id
/proc/device-tree/uni-n@f8000000
/proc/device-tree/uni-n@f8000000/name
/proc/device-tree/uni-n@f8000000/linux,phandle
/proc/device-tree/uni-n@f8000000/platform-do-fw-linkon-disable
/proc/device-tree/uni-n@f8000000/platform-do-fw-linkon-enable
/proc/device-tree/uni-n@f8000000/device-rev
/proc/device-tree/uni-n@f8000000/#size-cells
/proc/device-tree/uni-n@f8000000/#address-cells
/proc/device-tree/uni-n@f8000000/reg
/proc/device-tree/uni-n@f8000000/compatible
/proc/device-tree/uni-n@f8000000/device_type
/proc/device-tree/uni-n@f8000000/model
/proc/device-tree/uni-n@f8000000/i2c@f8001000
/proc/device-tree/uni-n@f8000000/i2c@f8001000/name
/proc/device-tree/uni-n@f8000000/i2c@f8001000/linux,phandle
/proc/device-tree/uni-n@f8000000/i2c@f8001000/interrupt-parent
/proc/device-tree/uni-n@f8000000/i2c@f8001000/interrupts
/proc/device-tree/uni-n@f8000000/i2c@f8001000/AAPL,driver-name
/proc/device-tree/uni-n@f8000000/i2c@f8001000/AAPL,i2c-rate
/proc/device-tree/uni-n@f8000000/i2c@f8001000/AAPL,address-step
/proc/device-tree/uni-n@f8000000/i2c@f8001000/AAPL,address
/proc/device-tree/uni-n@f8000000/i2c@f8001000/built-in
/proc/device-tree/uni-n@f8000000/i2c@f8001000/#address-cells
/proc/device-tree/uni-n@f8000000/i2c@f8001000/#size-cells
/proc/device-tree/uni-n@f8000000/i2c@f8001000/compatible
/proc/device-tree/uni-n@f8000000/i2c@f8001000/reg
/proc/device-tree/uni-n@f8000000/i2c@f8001000/device_type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/name
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/linux,phandle
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/built-in
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/#address-cells
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/#size-cells
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/compatible
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/device_type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/reg
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/name
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/linux,phandle
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/orientation
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/platform-accel-int-2
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/platform-accel-int-1
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/#size-cells
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/#address-cells
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/reg
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/built-in
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/compatible
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/accelerometer@b0/device_type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/pwm3-config
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/pwm2-config
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/pwm1-config
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/config-5
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-high-lim
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-low-lim
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-high-lim
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-low-lim
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-high-lim
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-low-lim
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwctrl-location
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwctrl-type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwctrl-zone
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwctrl-id
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwctrl-params-version
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwsensor-polling-period
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwsensor-location
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwsensor-type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwsensor-zone
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwsensor-id
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/hwsensor-params-version
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/notify-temp-sensor
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/device-id
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/#size-cells
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/#address-cells
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/reg
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/built-in
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/compatible
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/device_type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/name
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/linux,phandle
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/compatible
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/built-in
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/device_type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/location
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/zone
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/polling-period
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/version
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/sensor-id
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/fan1@28/reg
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/name
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/linux,phandle
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/compatible
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/built-in
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/device_type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/location
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/zone
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/polling-period
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/version
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/sensor-id
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote2-temp@27/reg
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/name
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/linux,phandle
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/compatible
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/built-in
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/device_type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/location
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/zone
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/polling-period
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/version
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/sensor-id
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/local-temp@26/reg
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/name
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/linux,phandle
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/compatible
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/built-in
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/device_type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/location
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/zone
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/polling-period
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/version
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/sensor-id
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/remote1-temp@25/reg
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/name
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/linux,phandle
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/compatible
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/built-in
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/device_type
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/location
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/zone
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/polling-period
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/version
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/sensor-id
/proc/device-tree/uni-n@f8000000/i2c@f8001000/i2c-bus@1/fan@5c/vcc@22/reg
/proc/device-tree/uni-n@f8000000/hw-clock
/proc/device-tree/uni-n@f8000000/hw-clock/name
/proc/device-tree/uni-n@f8000000/hw-clock/linux,phandle
/proc/device-tree/uni-n@f8000000/hw-clock/compatible
/proc/device-tree/uni-n@f8000000/hw-clock/device_type
/proc/device-tree/nvram@fff04000
/proc/device-tree/nvram@fff04000/name
/proc/device-tree/nvram@fff04000/linux,phandle
/proc/device-tree/nvram@fff04000/compatible
/proc/device-tree/nvram@fff04000/#bytes
/proc/device-tree/nvram@fff04000/reg
/proc/device-tree/nvram@fff04000/device_type
/proc/device-tree/xmodem
/proc/device-tree/xmodem/name
/proc/device-tree/xmodem/linux,phandle
/proc/device-tree/diagnostics
/proc/device-tree/diagnostics/name
/proc/device-tree/diagnostics/linux,phandle
/proc/device-tree/diagnostics/post-results
/proc/device-tree/diagnostics/post
/proc/device-tree/multiboot
/proc/device-tree/multiboot/name
/proc/device-tree/multiboot/linux,phandle
/proc/device-tree/pseudo-sound
/proc/device-tree/pseudo-sound/name
/proc/device-tree/pseudo-sound/linux,phandle
/proc/device-tree/pseudo-hid
/proc/device-tree/pseudo-hid/name
/proc/device-tree/pseudo-hid/linux,phandle
/proc/device-tree/pseudo-hid/eject-key
/proc/device-tree/pseudo-hid/eject-key/name
/proc/device-tree/pseudo-hid/eject-key/linux,phandle
/proc/device-tree/pseudo-hid/eject-key/device_type
/proc/device-tree/pseudo-hid/mouse
/proc/device-tree/pseudo-hid/mouse/name
/proc/device-tree/pseudo-hid/mouse/linux,phandle
/proc/device-tree/pseudo-hid/mouse/device_type
/proc/device-tree/pseudo-hid/keyboard
/proc/device-tree/pseudo-hid/keyboard/name
/proc/device-tree/pseudo-hid/keyboard/linux,phandle
/proc/device-tree/pseudo-hid/keyboard/device_type
/proc/device-tree/firewire-disk-mode
/proc/device-tree/firewire-disk-mode/name
/proc/device-tree/firewire-disk-mode/linux,phandle
/proc/device-tree/packages
/proc/device-tree/packages/name
/proc/device-tree/packages/linux,phandle
/proc/device-tree/packages/terminal-emulator
/proc/device-tree/packages/terminal-emulator/name
/proc/device-tree/packages/terminal-emulator/linux,phandle
/proc/device-tree/packages/terminal-emulator/iso6429-1983-colors
/proc/device-tree/packages/bootpath-search
/proc/device-tree/packages/bootpath-search/name
/proc/device-tree/packages/bootpath-search/linux,phandle
/proc/device-tree/packages/atapi-disk
/proc/device-tree/packages/atapi-disk/name
/proc/device-tree/packages/atapi-disk/linux,phandle
/proc/device-tree/packages/ata-disk
/proc/device-tree/packages/ata-disk/name
/proc/device-tree/packages/ata-disk/linux,phandle
/proc/device-tree/packages/sbp2-disk
/proc/device-tree/packages/sbp2-disk/name
/proc/device-tree/packages/sbp2-disk/linux,phandle
/proc/device-tree/packages/usb-audio-class
/proc/device-tree/packages/usb-audio-class/name
/proc/device-tree/packages/usb-audio-class/linux,phandle
/proc/device-tree/packages/usb-ms-class
/proc/device-tree/packages/usb-ms-class/name
/proc/device-tree/packages/usb-ms-class/linux,phandle
/proc/device-tree/packages/usb-hid-class
/proc/device-tree/packages/usb-hid-class/name
/proc/device-tree/packages/usb-hid-class/linux,phandle
/proc/device-tree/packages/elf-loader
/proc/device-tree/packages/elf-loader/name
/proc/device-tree/packages/elf-loader/linux,phandle
/proc/device-tree/packages/pe-loader
/proc/device-tree/packages/pe-loader/name
/proc/device-tree/packages/pe-loader/linux,phandle
/proc/device-tree/packages/macho-loader
/proc/device-tree/packages/macho-loader/name
/proc/device-tree/packages/macho-loader/linux,phandle
/proc/device-tree/packages/xcoff-loader
/proc/device-tree/packages/xcoff-loader/name
/proc/device-tree/packages/xcoff-loader/linux,phandle
/proc/device-tree/packages/bootinfo-loader
/proc/device-tree/packages/bootinfo-loader/name
/proc/device-tree/packages/bootinfo-loader/linux,phandle
/proc/device-tree/packages/iso-9660-files
/proc/device-tree/packages/iso-9660-files/name
/proc/device-tree/packages/iso-9660-files/linux,phandle
/proc/device-tree/packages/fat-files
/proc/device-tree/packages/fat-files/name
/proc/device-tree/packages/fat-files/linux,phandle
/proc/device-tree/packages/hfs-plus-files
/proc/device-tree/packages/hfs-plus-files/name
/proc/device-tree/packages/hfs-plus-files/linux,phandle
/proc/device-tree/packages/mac-files
/proc/device-tree/packages/mac-files/name
/proc/device-tree/packages/mac-files/linux,phandle
/proc/device-tree/packages/mac-parts
/proc/device-tree/packages/mac-parts/name
/proc/device-tree/packages/mac-parts/linux,phandle
/proc/device-tree/packages/telnet
/proc/device-tree/packages/telnet/name
/proc/device-tree/packages/telnet/linux,phandle
/proc/device-tree/packages/obp-tftp
/proc/device-tree/packages/obp-tftp/name
/proc/device-tree/packages/obp-tftp/linux,phandle
/proc/device-tree/packages/obp-tftp/log
/proc/device-tree/packages/obp-tftp/stats
/proc/device-tree/packages/disk-label
/proc/device-tree/packages/disk-label/name
/proc/device-tree/packages/disk-label/linux,phandle
/proc/device-tree/packages/deblocker
/proc/device-tree/packages/deblocker/name
/proc/device-tree/packages/deblocker/linux,phandle
/proc/device-tree/aliases
/proc/device-tree/aliases/name
/proc/device-tree/aliases/linux,phandle
/proc/device-tree/aliases/screen
/proc/device-tree/aliases/last-boot
/proc/device-tree/aliases/second-boot
/proc/device-tree/aliases/first-boot
/proc/device-tree/aliases/veo1
/proc/device-tree/aliases/veo0
/proc/device-tree/aliases/fan
/proc/device-tree/aliases/usb2
/proc/device-tree/aliases/adb-eject-key
/proc/device-tree/aliases/adb-mouse
/proc/device-tree/aliases/adb-keyboard
/proc/device-tree/aliases/adb
/proc/device-tree/aliases/wireless
/proc/device-tree/aliases/pi2c
/proc/device-tree/aliases/rtc
/proc/device-tree/aliases/via-pmu
/proc/device-tree/aliases/ki2c-serial
/proc/device-tree/aliases/ki2c
/proc/device-tree/aliases/sccb
/proc/device-tree/aliases/scca
/proc/device-tree/aliases/ultra1
/proc/device-tree/aliases/ultra0
/proc/device-tree/aliases/ide1
/proc/device-tree/aliases/ide0
/proc/device-tree/aliases/cd
/proc/device-tree/aliases/hd
/proc/device-tree/aliases/mpic
/proc/device-tree/aliases/mac-io
/proc/device-tree/aliases/usb-2c
/proc/device-tree/aliases/usb-2b
/proc/device-tree/aliases/usb-2a
/proc/device-tree/aliases/usb-1c
/proc/device-tree/aliases/usb-1b
/proc/device-tree/aliases/usb-1a
/proc/device-tree/aliases/usb1
/proc/device-tree/aliases/usb0
/proc/device-tree/aliases/pci
/proc/device-tree/aliases/cpu1
/proc/device-tree/aliases/cpu0
/proc/device-tree/aliases/fw
/proc/device-tree/aliases/enet
/proc/device-tree/aliases/nvram
/proc/device-tree/aliases/eject-key
/proc/device-tree/aliases/sound
/proc/device-tree/aliases/mouse
/proc/device-tree/aliases/keyboard
/proc/device-tree/aliases/ui2c-serial
/proc/device-tree/aliases/ui2c
/proc/device-tree/aliases/uni-n
/proc/device-tree/aliases/pci2
/proc/device-tree/aliases/pci1
/proc/device-tree/aliases/agp
/proc/device-tree/aliases/pci0
/proc/device-tree/options
/proc/device-tree/options/name
/proc/device-tree/options/linux,phandle
/proc/device-tree/options/prev-lang:kbd
/proc/device-tree/options/aapl,tdm-units
/proc/device-tree/options/boot-args
/proc/device-tree/options/ram-size
/proc/device-tree/options/aapl,pci
/proc/device-tree/options/boot-script
/proc/device-tree/options/default-router-ip
/proc/device-tree/options/default-subnet-mask
/proc/device-tree/options/default-gateway-ip
/proc/device-tree/options/default-server-ip
/proc/device-tree/options/default-client-ip
/proc/device-tree/options/boot-command
/proc/device-tree/options/nvramrc
/proc/device-tree/options/oem-logo
/proc/device-tree/options/oem-banner
/proc/device-tree/options/mouse-device
/proc/device-tree/options/output-device-1
/proc/device-tree/options/input-device-1
/proc/device-tree/options/output-device
/proc/device-tree/options/input-device
/proc/device-tree/options/diag-file
/proc/device-tree/options/diag-device
/proc/device-tree/options/console-screen
/proc/device-tree/options/boot-screen
/proc/device-tree/options/boot-file
/proc/device-tree/options/boot-device
/proc/device-tree/options/gmt-offset
/proc/device-tree/options/boot-volume
/proc/device-tree/options/selftest-#megs
/proc/device-tree/options/screen-#rows
/proc/device-tree/options/screen-#columns
/proc/device-tree/options/pci-probe-mask
/proc/device-tree/options/logger-size
/proc/device-tree/options/logger-base
/proc/device-tree/options/virt-size
/proc/device-tree/options/virt-base
/proc/device-tree/options/load-base
/proc/device-tree/options/real-size
/proc/device-tree/options/real-base
/proc/device-tree/options/skip-netboot?
/proc/device-tree/options/scroll-lock
/proc/device-tree/options/default-mac-address?
/proc/device-tree/options/use-generic?
/proc/device-tree/options/use-nvramrc?
/proc/device-tree/options/oem-logo?
/proc/device-tree/options/oem-banner?
/proc/device-tree/options/fcode-debug?
/proc/device-tree/options/diag-switch?
/proc/device-tree/options/auto-boot?
/proc/device-tree/options/real-mode?
/proc/device-tree/options/little-endian?
/proc/device-tree/rom@ff800000
/proc/device-tree/rom@ff800000/name
/proc/device-tree/rom@ff800000/linux,phandle
/proc/device-tree/rom@ff800000/#address-cells
/proc/device-tree/rom@ff800000/ranges
/proc/device-tree/rom@ff800000/reg
/proc/device-tree/rom@ff800000/macos
/proc/device-tree/rom@ff800000/macos/name
/proc/device-tree/rom@ff800000/macos/linux,phandle
/proc/device-tree/rom@ff800000/boot-rom@fff00000
/proc/device-tree/rom@ff800000/boot-rom@fff00000/name
/proc/device-tree/rom@ff800000/boot-rom@fff00000/linux,phandle
/proc/device-tree/rom@ff800000/boot-rom@fff00000/image
/proc/device-tree/rom@ff800000/boot-rom@fff00000/hwi-flags
/proc/device-tree/rom@ff800000/boot-rom@fff00000/has-config-block
/proc/device-tree/rom@ff800000/boot-rom@fff00000/info
/proc/device-tree/rom@ff800000/boot-rom@fff00000/security-modes
/proc/device-tree/rom@ff800000/boot-rom@fff00000/BootROM-build-date
/proc/device-tree/rom@ff800000/boot-rom@fff00000/BootROM-version
/proc/device-tree/rom@ff800000/boot-rom@fff00000/model
/proc/device-tree/rom@ff800000/boot-rom@fff00000/write-characteristic
/proc/device-tree/rom@ff800000/boot-rom@fff00000/reg
/proc/device-tree/openprom
/proc/device-tree/openprom/name
/proc/device-tree/openprom/linux,phandle
/proc/device-tree/openprom/boot-syntax
/proc/device-tree/openprom/supports-bootinfo
/proc/device-tree/openprom/relative-addressing
/proc/device-tree/openprom/model
/proc/device-tree/openprom/device_type
/proc/device-tree/openprom/client-services
/proc/device-tree/openprom/client-services/name
/proc/device-tree/openprom/client-services/linux,phandle
/proc/device-tree/memory@0
/proc/device-tree/memory@0/name
/proc/device-tree/memory@0/linux,phandle
/proc/device-tree/memory@0/ram-layout-architecture
/proc/device-tree/memory@0/dimm-speeds
/proc/device-tree/memory@0/dimm-types
/proc/device-tree/memory@0/dimm-info
/proc/device-tree/memory@0/available
/proc/device-tree/memory@0/slot-names
/proc/device-tree/memory@0/reg
/proc/device-tree/memory@0/device_type
/proc/device-tree/chosen
/proc/device-tree/chosen/linux,kernel-end
/proc/device-tree/chosen/name
/proc/device-tree/chosen/linux,phandle
/proc/device-tree/chosen/linux,stdout-path
/proc/device-tree/chosen/linux,stdout-package
/proc/device-tree/chosen/cpu
/proc/device-tree/chosen/bootargs
/proc/device-tree/chosen/bootpath
/proc/device-tree/chosen/pmu
/proc/device-tree/chosen/nvram
/proc/device-tree/chosen/mmu
/proc/device-tree/chosen/memory
/proc/device-tree/chosen/stdout
/proc/device-tree/chosen/stdin
/proc/device-tree/cpus
/proc/device-tree/cpus/name
/proc/device-tree/cpus/linux,phandle
/proc/device-tree/cpus/#interrupt-cells
/proc/device-tree/cpus/#size-cells
/proc/device-tree/cpus/#address-cells
/proc/device-tree/cpus/PowerPC,G4@0
/proc/device-tree/cpus/PowerPC,G4@0/name
/proc/device-tree/cpus/PowerPC,G4@0/linux,phandle
/proc/device-tree/cpus/PowerPC,G4@0/cpu-info
/proc/device-tree/cpus/PowerPC,G4@0/translations
/proc/device-tree/cpus/PowerPC,G4@0/available
/proc/device-tree/cpus/PowerPC,G4@0/existing
/proc/device-tree/cpus/PowerPC,G4@0/dynamic-power-step
/proc/device-tree/cpus/PowerPC,G4@0/recalced-clock-frequency
/proc/device-tree/cpus/PowerPC,G4@0/rounded-clock-frequency
/proc/device-tree/cpus/PowerPC,G4@0/processor-to-bus-ratio*2
/proc/device-tree/cpus/PowerPC,G4@0/needs-delayAACK
/proc/device-tree/cpus/PowerPC,G4@0/l2cr
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache#1
/proc/device-tree/cpus/PowerPC,G4@0/dcbz
/proc/device-tree/cpus/PowerPC,G4@0/dcba
/proc/device-tree/cpus/PowerPC,G4@0/data-streams
/proc/device-tree/cpus/PowerPC,G4@0/altivec
/proc/device-tree/cpus/PowerPC,G4@0/performance-monitor
/proc/device-tree/cpus/PowerPC,G4@0/graphics
/proc/device-tree/cpus/PowerPC,G4@0/d-cache-block-size
/proc/device-tree/cpus/PowerPC,G4@0/i-cache-block-size
/proc/device-tree/cpus/PowerPC,G4@0/i-cache-sets
/proc/device-tree/cpus/PowerPC,G4@0/d-cache-sets
/proc/device-tree/cpus/PowerPC,G4@0/i-cache-size
/proc/device-tree/cpus/PowerPC,G4@0/d-cache-size
/proc/device-tree/cpus/PowerPC,G4@0/tlb-size
/proc/device-tree/cpus/PowerPC,G4@0/tlb-sets
/proc/device-tree/cpus/PowerPC,G4@0/reservation-granule-size
/proc/device-tree/cpus/PowerPC,G4@0/timebase-frequency
/proc/device-tree/cpus/PowerPC,G4@0/config-bus-frequency
/proc/device-tree/cpus/PowerPC,G4@0/bus-frequency
/proc/device-tree/cpus/PowerPC,G4@0/clock-frequency
/proc/device-tree/cpus/PowerPC,G4@0/state
/proc/device-tree/cpus/PowerPC,G4@0/cpu-version
/proc/device-tree/cpus/PowerPC,G4@0/soft-reset
/proc/device-tree/cpus/PowerPC,G4@0/cpu#
/proc/device-tree/cpus/PowerPC,G4@0/reg
/proc/device-tree/cpus/PowerPC,G4@0/device_type
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/name
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/linux,phandle
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/clock-frequency
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/cache-unified
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/d-cache-line-size
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/i-cache-line-size
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/d-cache-sets
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/i-cache-sets
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/d-cache-size
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/i-cache-size
/proc/device-tree/cpus/PowerPC,G4@0/l2-cache/device_type

[0] http://nerdbynature.de/bits/2.6.34-rc1/xlate_proc_name/
-- 
BOFH excuse #310:

asynchronous inode failure

^ permalink raw reply

* Re: 2.6.34-rc1: Badness at fs/proc/generic.c:316
From: Andreas Schwab @ 2010-03-14 11:51 UTC (permalink / raw)
  To: Christian Kujau; +Cc: linuxppc-dev, Alexey Dobriyan, LKML
In-Reply-To: <alpine.DEB.2.01.1003140431040.5493@bogon.housecafe.de>

Christian Kujau <lists@nerdbynature.de> writes:

> On Sun, 14 Mar 2010 at 13:24, Alexey Dobriyan wrote:
>> Post "find /proc/device-tree" output.
>
> I did upload[0] a tarball of /proc/device-tree, please see below the 
> "find" output.
>
> Indeed, there's a /cpus/PowerPC,G4@0/l2-cache and 
> /cpus/PowerPC,G4@0/l2-cache#1 in the device-tree. However, from looking at 
> the logfiles, the
>
>    device-tree: Duplicate name in /cpus/PowerPC,G4@0, renamed to "l2-cache#1"

That's a red herring, the real problem is this:

name 'pulses/rev'

Of course, this name cannot be found in /proc/device-tree, because it
wasn't created.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply

* Re: 34-rc1-git3 build failure with CGROUP_MEM_RES_CTLR_SWAP=y
From: Michael Ellerman @ 2010-03-15  1:04 UTC (permalink / raw)
  To: Sachin Sant
  Cc: Linux/PPC Development, nishimura, lizf, linux-kernel,
	Balbir Singh
In-Reply-To: <4B9CBEE6.1090509@in.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 1055 bytes --]

On Sun, 2010-03-14 at 16:18 +0530, Sachin Sant wrote:
> On a PowerPC box, latest 34-rc1 git(d89b218b8...) fails to build
> with CGROUPS_MEM_RES_CTRL_SWAP=y. 
> 
> LD      init/built-in.o
> LD      .tmp_vmlinux1
> mm/built-in.o: In function __xchg:
> arch/powerpc/include/asm/system.h:331: undefined reference to .__xchg_called_with_bad_pointer
> mm/built-in.o: In function __cmpxchg:
> arch/powerpc/include/asm/system.h:474: undefined reference to .__cmpxchg_called_with_bad_pointer
> make: *** [.tmp_vmlinux1] Error 1
> 
> The code in question was added via commit 024914477e...
> 
> memcg: move charges of anonymous swap

struct swap_cgroup
{                                                        
	unsigned short          id;
};

+unsigned short swap_cgroup_cmpxchg(swp_entry_t ent,
+                                       unsigned short old, unsigned short new)
+{
...
+       struct swap_cgroup *sc;
...
+       if (cmpxchg(&sc->id, old, new) == old)


On powerpc cmpxchg() currently only handles u32 & u64.

cheers

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply

* [BUGFIX][PATCH] memcg: avoid use cmpxchg in swap cgroup maintainance (Was Re: 34-rc1-git3 build failure with CGROUP_MEM_RES_CTLR_SWAP=y
From: KAMEZAWA Hiroyuki @ 2010-03-15  1:02 UTC (permalink / raw)
  To: Sachin Sant
  Cc: nishimura, lizf, linux-kernel, Linux/PPC Development,
	akpm@linux-foundation.org, Balbir Singh
In-Reply-To: <4B9CBEE6.1090509@in.ibm.com>

On Sun, 14 Mar 2010 16:18:06 +0530
Sachin Sant <sachinp@in.ibm.com> wrote:

> On a PowerPC box, latest 34-rc1 git(d89b218b8...) fails to build
> with CGROUPS_MEM_RES_CTRL_SWAP=y. 
> 
> LD      init/built-in.o
> LD      .tmp_vmlinux1
> mm/built-in.o: In function __xchg:
> arch/powerpc/include/asm/system.h:331: undefined reference to .__xchg_called_with_bad_pointer
> mm/built-in.o: In function __cmpxchg:
> arch/powerpc/include/asm/system.h:474: undefined reference to .__cmpxchg_called_with_bad_pointer
> make: *** [.tmp_vmlinux1] Error 1
> 
> The code in question was added via commit 024914477e...
> 
> memcg: move charges of anonymous swap
> 
Oh..ok, powerpc (and other archs?) can't do 2byte cmpxchg and xchg.
Then, we should use spinlock rather than that.

How about this ? Nishimura-san, could you consider something better ?
We need a quick fix.

==
swap_cgroup uses 2bytes data and uses cmpxchg in a new operation.
2byte cmpxchg/xchg is not available on some archs. This patch replaces
cmpxchg/xchg with operations under lock.

Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
---
 mm/page_cgroup.c |   20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

Index: mmotm-2.6.34-Mar11/mm/page_cgroup.c
===================================================================
--- mmotm-2.6.34-Mar11.orig/mm/page_cgroup.c
+++ mmotm-2.6.34-Mar11/mm/page_cgroup.c
@@ -284,6 +284,7 @@ static DEFINE_MUTEX(swap_cgroup_mutex);
 struct swap_cgroup_ctrl {
 	struct page **map;
 	unsigned long length;
+	spinlock_t	lock;
 };
 
 struct swap_cgroup_ctrl swap_cgroup_ctrl[MAX_SWAPFILES];
@@ -353,16 +354,22 @@ unsigned short swap_cgroup_cmpxchg(swp_e
 	struct swap_cgroup_ctrl *ctrl;
 	struct page *mappage;
 	struct swap_cgroup *sc;
+	unsigned long flags;
+	unsigned short retval;
 
 	ctrl = &swap_cgroup_ctrl[type];
 
 	mappage = ctrl->map[idx];
 	sc = page_address(mappage);
 	sc += pos;
-	if (cmpxchg(&sc->id, old, new) == old)
-		return old;
+	spin_lock_irqsave(&ctrl->lock, flags);
+	retval = sc->id;
+	if (retval == old)
+		sc->id = new;
 	else
-		return 0;
+		retval = 0;
+	spin_unlock_irqrestore(&ctrl->lock, flags);
+	return retval;
 }
 
 /**
@@ -383,13 +390,17 @@ unsigned short swap_cgroup_record(swp_en
 	struct page *mappage;
 	struct swap_cgroup *sc;
 	unsigned short old;
+	unsigned long flags;
 
 	ctrl = &swap_cgroup_ctrl[type];
 
 	mappage = ctrl->map[idx];
 	sc = page_address(mappage);
 	sc += pos;
-	old = xchg(&sc->id, id);
+	spin_lock_irqsave(&ctrl->lock, flags);
+	old = sc->id;
+	sc->id = id;
+	spin_unlock_irqrestore(&ctrl->lock, flags);
 
 	return old;
 }
@@ -441,6 +452,7 @@ int swap_cgroup_swapon(int type, unsigne
 	mutex_lock(&swap_cgroup_mutex);
 	ctrl->length = length;
 	ctrl->map = array;
+	spin_lock_init(&ctrl->lock);
 	if (swap_cgroup_prepare(type)) {
 		/* memory shortage */
 		ctrl->map = NULL;

^ permalink raw reply

* Re: [BUGFIX][PATCH] memcg: avoid use cmpxchg in swap cgroup maintainance (Was Re: 34-rc1-git3 build failure with CGROUP_MEM_RES_CTLR_SWAP=y
From: Balbir Singh @ 2010-03-15  2:14 UTC (permalink / raw)
  To: KAMEZAWA Hiroyuki
  Cc: nishimura, lizf, linux-kernel, Linux/PPC Development,
	akpm@linux-foundation.org
In-Reply-To: <20100315100202.eb735f59.kamezawa.hiroyu@jp.fujitsu.com>

* KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> [2010-03-15 10:02:02]:

> On Sun, 14 Mar 2010 16:18:06 +0530
> Sachin Sant <sachinp@in.ibm.com> wrote:
> 
> > On a PowerPC box, latest 34-rc1 git(d89b218b8...) fails to build
> > with CGROUPS_MEM_RES_CTRL_SWAP=y. 
> > 
> > LD      init/built-in.o
> > LD      .tmp_vmlinux1
> > mm/built-in.o: In function __xchg:
> > arch/powerpc/include/asm/system.h:331: undefined reference to .__xchg_called_with_bad_pointer
> > mm/built-in.o: In function __cmpxchg:
> > arch/powerpc/include/asm/system.h:474: undefined reference to .__cmpxchg_called_with_bad_pointer
> > make: *** [.tmp_vmlinux1] Error 1
> > 
> > The code in question was added via commit 024914477e...
> > 
> > memcg: move charges of anonymous swap
> > 
> Oh..ok, powerpc (and other archs?) can't do 2byte cmpxchg and xchg.
> Then, we should use spinlock rather than that.
> 
> How about this ? Nishimura-san, could you consider something better ?
> We need a quick fix.
>

Looks good to me

 
Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com>
 

-- 
	Three Cheers,
	Balbir

^ permalink raw reply

* Re: [BUGFIX][PATCH] memcg: avoid use cmpxchg in swap cgroup maintainance (Was Re: 34-rc1-git3 build failure with CGROUP_MEM_RES_CTLR_SWAP=y
From: Benjamin Herrenschmidt @ 2010-03-15  3:21 UTC (permalink / raw)
  To: KAMEZAWA Hiroyuki
  Cc: nishimura, lizf, linux-kernel, Linux/PPC Development,
	akpm@linux-foundation.org, Balbir Singh
In-Reply-To: <20100315100202.eb735f59.kamezawa.hiroyu@jp.fujitsu.com>


> Oh..ok, powerpc (and other archs?) can't do 2byte cmpxchg and xchg.
> Then, we should use spinlock rather than that.
> 
> How about this ? Nishimura-san, could you consider something better ?
> We need a quick fix.

sparc64 is the same as powerpc in that regard, maybe others. 

Cheers,
Ben.

> ==
> swap_cgroup uses 2bytes data and uses cmpxchg in a new operation.
> 2byte cmpxchg/xchg is not available on some archs. This patch replaces
> cmpxchg/xchg with operations under lock.
> 
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
> ---
>  mm/page_cgroup.c |   20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
> 
> Index: mmotm-2.6.34-Mar11/mm/page_cgroup.c
> ===================================================================
> --- mmotm-2.6.34-Mar11.orig/mm/page_cgroup.c
> +++ mmotm-2.6.34-Mar11/mm/page_cgroup.c
> @@ -284,6 +284,7 @@ static DEFINE_MUTEX(swap_cgroup_mutex);
>  struct swap_cgroup_ctrl {
>  	struct page **map;
>  	unsigned long length;
> +	spinlock_t	lock;
>  };
>  
>  struct swap_cgroup_ctrl swap_cgroup_ctrl[MAX_SWAPFILES];
> @@ -353,16 +354,22 @@ unsigned short swap_cgroup_cmpxchg(swp_e
>  	struct swap_cgroup_ctrl *ctrl;
>  	struct page *mappage;
>  	struct swap_cgroup *sc;
> +	unsigned long flags;
> +	unsigned short retval;
>  
>  	ctrl = &swap_cgroup_ctrl[type];
>  
>  	mappage = ctrl->map[idx];
>  	sc = page_address(mappage);
>  	sc += pos;
> -	if (cmpxchg(&sc->id, old, new) == old)
> -		return old;
> +	spin_lock_irqsave(&ctrl->lock, flags);
> +	retval = sc->id;
> +	if (retval == old)
> +		sc->id = new;
>  	else
> -		return 0;
> +		retval = 0;
> +	spin_unlock_irqrestore(&ctrl->lock, flags);
> +	return retval;
>  }
>  
>  /**
> @@ -383,13 +390,17 @@ unsigned short swap_cgroup_record(swp_en
>  	struct page *mappage;
>  	struct swap_cgroup *sc;
>  	unsigned short old;
> +	unsigned long flags;
>  
>  	ctrl = &swap_cgroup_ctrl[type];
>  
>  	mappage = ctrl->map[idx];
>  	sc = page_address(mappage);
>  	sc += pos;
> -	old = xchg(&sc->id, id);
> +	spin_lock_irqsave(&ctrl->lock, flags);
> +	old = sc->id;
> +	sc->id = id;
> +	spin_unlock_irqrestore(&ctrl->lock, flags);
>  
>  	return old;
>  }
> @@ -441,6 +452,7 @@ int swap_cgroup_swapon(int type, unsigne
>  	mutex_lock(&swap_cgroup_mutex);
>  	ctrl->length = length;
>  	ctrl->map = array;
> +	spin_lock_init(&ctrl->lock);
>  	if (swap_cgroup_prepare(type)) {
>  		/* memory shortage */
>  		ctrl->map = NULL;
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev

^ permalink raw reply

* Re: [BUGFIX][PATCH] memcg: avoid use cmpxchg in swap cgroup maintainance (Was Re: 34-rc1-git3 build failure with CGROUP_MEM_RES_CTLR_SWAP=y
From: Daisuke Nishimura @ 2010-03-15  3:16 UTC (permalink / raw)
  To: KAMEZAWA Hiroyuki
  Cc: d-nishimura, Daisuke Nishimura, lizf, linux-kernel,
	Linux/PPC Development, akpm@linux-foundation.org, Balbir Singh
In-Reply-To: <20100315100202.eb735f59.kamezawa.hiroyu@jp.fujitsu.com>

On Mon, 15 Mar 2010 10:02:02 +0900
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote:

> On Sun, 14 Mar 2010 16:18:06 +0530
> Sachin Sant <sachinp@in.ibm.com> wrote:
> 
> > On a PowerPC box, latest 34-rc1 git(d89b218b8...) fails to build
> > with CGROUPS_MEM_RES_CTRL_SWAP=y. 
> > 
> > LD      init/built-in.o
> > LD      .tmp_vmlinux1
> > mm/built-in.o: In function __xchg:
> > arch/powerpc/include/asm/system.h:331: undefined reference to .__xchg_called_with_bad_pointer
> > mm/built-in.o: In function __cmpxchg:
> > arch/powerpc/include/asm/system.h:474: undefined reference to .__cmpxchg_called_with_bad_pointer
> > make: *** [.tmp_vmlinux1] Error 1
> > 
> > The code in question was added via commit 024914477e...
> > 
> > memcg: move charges of anonymous swap
> > 
> Oh..ok, powerpc (and other archs?) can't do 2byte cmpxchg and xchg.
> Then, we should use spinlock rather than that.
> 
> How about this ? Nishimura-san, could you consider something better ?
> We need a quick fix.
> 
Thank you for fixing this issue.
I think it increases the size of swap_cgroup_ctrl a bit,
but I think it's a good fix.

> ==
> swap_cgroup uses 2bytes data and uses cmpxchg in a new operation.
> 2byte cmpxchg/xchg is not available on some archs. This patch replaces
> cmpxchg/xchg with operations under lock.
> 
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>

Thanks,
Daisuke Nishimura.
> ---
>  mm/page_cgroup.c |   20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
> 
> Index: mmotm-2.6.34-Mar11/mm/page_cgroup.c
> ===================================================================
> --- mmotm-2.6.34-Mar11.orig/mm/page_cgroup.c
> +++ mmotm-2.6.34-Mar11/mm/page_cgroup.c
> @@ -284,6 +284,7 @@ static DEFINE_MUTEX(swap_cgroup_mutex);
>  struct swap_cgroup_ctrl {
>  	struct page **map;
>  	unsigned long length;
> +	spinlock_t	lock;
>  };
>  
>  struct swap_cgroup_ctrl swap_cgroup_ctrl[MAX_SWAPFILES];
> @@ -353,16 +354,22 @@ unsigned short swap_cgroup_cmpxchg(swp_e
>  	struct swap_cgroup_ctrl *ctrl;
>  	struct page *mappage;
>  	struct swap_cgroup *sc;
> +	unsigned long flags;
> +	unsigned short retval;
>  
>  	ctrl = &swap_cgroup_ctrl[type];
>  
>  	mappage = ctrl->map[idx];
>  	sc = page_address(mappage);
>  	sc += pos;
> -	if (cmpxchg(&sc->id, old, new) == old)
> -		return old;
> +	spin_lock_irqsave(&ctrl->lock, flags);
> +	retval = sc->id;
> +	if (retval == old)
> +		sc->id = new;
>  	else
> -		return 0;
> +		retval = 0;
> +	spin_unlock_irqrestore(&ctrl->lock, flags);
> +	return retval;
>  }
>  
>  /**
> @@ -383,13 +390,17 @@ unsigned short swap_cgroup_record(swp_en
>  	struct page *mappage;
>  	struct swap_cgroup *sc;
>  	unsigned short old;
> +	unsigned long flags;
>  
>  	ctrl = &swap_cgroup_ctrl[type];
>  
>  	mappage = ctrl->map[idx];
>  	sc = page_address(mappage);
>  	sc += pos;
> -	old = xchg(&sc->id, id);
> +	spin_lock_irqsave(&ctrl->lock, flags);
> +	old = sc->id;
> +	sc->id = id;
> +	spin_unlock_irqrestore(&ctrl->lock, flags);
>  
>  	return old;
>  }
> @@ -441,6 +452,7 @@ int swap_cgroup_swapon(int type, unsigne
>  	mutex_lock(&swap_cgroup_mutex);
>  	ctrl->length = length;
>  	ctrl->map = array;
> +	spin_lock_init(&ctrl->lock);
>  	if (swap_cgroup_prepare(type)) {
>  		/* memory shortage */
>  		ctrl->map = NULL;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

^ permalink raw reply

* Re: 2.6.34-rc1: Badness at fs/proc/generic.c:316
From: Benjamin Herrenschmidt @ 2010-03-15  3:23 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Christian Kujau, linuxppc-dev, Alexey Dobriyan, LKML
In-Reply-To: <m2tysjw27p.fsf@whitebox.home>

On Sun, 2010-03-14 at 12:51 +0100, Andreas Schwab wrote:
> Christian Kujau <lists@nerdbynature.de> writes:
> 
> > On Sun, 14 Mar 2010 at 13:24, Alexey Dobriyan wrote:
> >> Post "find /proc/device-tree" output.
> >
> > I did upload[0] a tarball of /proc/device-tree, please see below the 
> > "find" output.
> >
> > Indeed, there's a /cpus/PowerPC,G4@0/l2-cache and 
> > /cpus/PowerPC,G4@0/l2-cache#1 in the device-tree. However, from looking at 
> > the logfiles, the
> >
> >    device-tree: Duplicate name in /cpus/PowerPC,G4@0, renamed to "l2-cache#1"
> 
> That's a red herring, the real problem is this:
> 
> name 'pulses/rev'
> 
> Of course, this name cannot be found in /proc/device-tree, because it
> wasn't created.

You mean apple stuck a bloody "/" in a name property ? ARGH !

We should just add code to detect that and replace it with a "_" or
something...

Cheers,
Ben.

^ permalink raw reply

* Re: Problem with PCI bus rescan on 460EX
From: Kenji Kaneshige @ 2010-03-15  5:39 UTC (permalink / raw)
  To: Felix Radensky; +Cc: linux-pci, Alex Chiang, linuxppc-dev@ozlabs.org
In-Reply-To: <4B9AC885.3010107@embedded-sol.com>

Felix Radensky wrote:
> Hello Kenji-san,
> 
> Kenji Kaneshige wrote:
>> I'm not sure, but I guess pci_setup_bridge() didn't update IO base/limit
>> and Mem base/limit of the bridge (0000:00:02.0) because of the following
>> lines.
>>
>> static void pci_setup_bridge(struct pci_bus *bus)
>> {
>>        struct pci_dev *bridge = bus->self;
>>        struct resource *res;
>>        struct pci_bus_region region;
>>        u32 l, bu, lu, io_upper16;
>>
>>        if (pci_is_enabled(bridge))    
>> <===============================                              
>> return;            <===============================
>>
>>        dev_info(&bridge->dev, "PCI bridge to [bus %02x-%02x]\n",
>>                 bus->secondary, bus->subordinate);
>>     ...
>>
>> It seems the bridge was already enabled by 
>> pci_assign_unassigned_resources()
>> at boot time. Does removing those lines make any change?
>>
> 
> Yes, with these lines removed bridge memory window is properly allocated.

These lines are to prevent updating IO or memory windows when there are
some devices working behind the bridge. So please note that removing
these lines is just for debugging.


> For some reason bridge memory is disabled, but if I enable it via 
> setpci, and
> also enable device memory, then everything works fine. If the system is 
> booted
> when device behind the bridge is plugged in, bridge memory is enabled.
> 

Maybe because of the following lines, I guess.

void pci_enable_bridges(struct pci_bus *bus)
{
        struct pci_dev *dev;
        int retval;

        list_for_each_entry(dev, &bus->devices, bus_list) {
                if (dev->subordinate) {
                        if (!pci_is_enabled(dev)) {		<=======
                                retval = pci_enable_device(dev);<=======
                                pci_set_master(dev);		<=======
                        }
		...


One possible cause is that pcibios_enable_device() for the bridge didn't
return any error even though it didn't work properly (ex. cannot access
to the command register, and so on) on your platform when there is no
device behind the bridge. But it is just my guess.

Thanks,
Kenji Kaneshige




> Thanks a lot for your help.
> 
> Felix.
> -- 
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 

^ permalink raw reply

* [PATCH] powerpc/perf_events: Implement perf_arch_fetch_caller_regs for powerpc
From: Paul Mackerras @ 2010-03-15  5:46 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra, Frederic Weisbecker, benh
  Cc: linuxppc-dev, linux-kernel, anton

This implements a powerpc version of perf_arch_fetch_caller_regs.
It's implemented in assembly because that way we can be sure there
isn't a stack frame for perf_arch_fetch_caller_regs.  If it was in
C, gcc might or might not create a stack frame for it, which would
affect the number of levels we have to skip.  It's not ifdef'd
because it is only 14 instructions long.

With this, we see results from perf record -e lock:lock_acquire like
this:

# Samples: 24878
#
# Overhead         Command      Shared Object  Symbol
# ........  ..............  .................  ......
#
    14.99%            perf  [kernel.kallsyms]  [k] ._raw_spin_lock
                      |
                      --- ._raw_spin_lock
                         |          
                         |--25.00%-- .alloc_fd
                         |          (nil)
                         |          |          
                         |          |--50.00%-- .anon_inode_getfd
                         |          |          .sys_perf_event_open
                         |          |          syscall_exit
                         |          |          syscall
                         |          |          create_counter
                         |          |          __cmd_record
                         |          |          run_builtin
                         |          |          main
                         |          |          0xfd2e704
                         |          |          0xfd2e8c0
                         |          |          (nil)

... etc.

Signed-off-by: Paul Mackerras <paulus@samba.org>
---
 arch/powerpc/include/asm/asm-compat.h |    2 ++
 arch/powerpc/kernel/misc.S            |   20 ++++++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/arch/powerpc/include/asm/asm-compat.h b/arch/powerpc/include/asm/asm-compat.h
index c1b475a..a9b91ed 100644
--- a/arch/powerpc/include/asm/asm-compat.h
+++ b/arch/powerpc/include/asm/asm-compat.h
@@ -28,6 +28,7 @@
 #define PPC_LLARX(t, a, b, eh)	PPC_LDARX(t, a, b, eh)
 #define PPC_STLCX	stringify_in_c(stdcx.)
 #define PPC_CNTLZL	stringify_in_c(cntlzd)
+#define PPC_LR_STKOFF	16
 
 /* Move to CR, single-entry optimized version. Only available
  * on POWER4 and later.
@@ -51,6 +52,7 @@
 #define PPC_STLCX	stringify_in_c(stwcx.)
 #define PPC_CNTLZL	stringify_in_c(cntlzw)
 #define PPC_MTOCRF	stringify_in_c(mtcrf)
+#define PPC_LR_STKOFF	4
 
 #endif
 
diff --git a/arch/powerpc/kernel/misc.S b/arch/powerpc/kernel/misc.S
index 2d29752..4459500 100644
--- a/arch/powerpc/kernel/misc.S
+++ b/arch/powerpc/kernel/misc.S
@@ -127,3 +127,23 @@ _GLOBAL(__setup_cpu_power7)
 _GLOBAL(__restore_cpu_power7)
 	/* place holder */
 	blr
+
+/*
+ * Get a minimal set of registers for our caller's nth caller.
+ * r3 = regs pointer, r5 = n.
+ */
+_GLOBAL(perf_arch_fetch_caller_regs)
+	mr	r6,r1
+	cmpwi	r5,0
+	mflr	r4
+	ble	2f
+	mtctr	r5
+1:	PPC_LL	r6,0(r6)
+	bdnz	1b
+	PPC_LL	r4,PPC_LR_STKOFF(r6)
+2:	PPC_LL	r7,0(r6)
+	PPC_LL	r7,PPC_LR_STKOFF(r7)
+	PPC_STL	r6,GPR1-STACK_FRAME_OVERHEAD(r3)
+	PPC_STL	r4,_NIP-STACK_FRAME_OVERHEAD(r3)
+	PPC_STL	r7,_LINK-STACK_FRAME_OVERHEAD(r3)
+	blr

^ permalink raw reply related

* Re: Problem with PCI bus rescan on 460EX
From: Benjamin Herrenschmidt @ 2010-03-15  5:46 UTC (permalink / raw)
  To: Kenji Kaneshige
  Cc: linux-pci, Felix Radensky, Alex Chiang, linuxppc-dev@ozlabs.org
In-Reply-To: <4B9DC820.2060100@jp.fujitsu.com>

On Mon, 2010-03-15 at 14:39 +0900, Kenji Kaneshige wrote:
> 
> > Yes, with these lines removed bridge memory window is properly
> allocated.
> 
> These lines are to prevent updating IO or memory windows when there
> are
> some devices working behind the bridge. So please note that removing
> these lines is just for debugging.

This is not a very good way to do so though. Many firmwares will leave
those enabled even when the bridges -do- have to be reconfigured.

Worse... the code means that the kernel -will- have updated its resource
tree, probably assigned new resources, etc... to those bridges, and thus
to devices underneath them, but will silently fail to actually update
the bridge BARs to match.

This seems like a major bug to me in fact.

Cheers,
Ben.

^ permalink raw reply

* Re: Problem with PCI bus rescan on 460EX
From: Benjamin Herrenschmidt @ 2010-03-15  5:54 UTC (permalink / raw)
  To: Kenji Kaneshige
  Cc: linux-pci, Felix Radensky, Alex Chiang, linuxppc-dev@ozlabs.org
In-Reply-To: <1268632006.2335.10.camel@pasglop>

On Mon, 2010-03-15 at 16:46 +1100, Benjamin Herrenschmidt wrote:
> On Mon, 2010-03-15 at 14:39 +0900, Kenji Kaneshige wrote:
> > 
> > > Yes, with these lines removed bridge memory window is properly
> > allocated.
> > 
> > These lines are to prevent updating IO or memory windows when there
> > are
> > some devices working behind the bridge. So please note that removing
> > these lines is just for debugging.
> 
> This is not a very good way to do so though. Many firmwares will leave
> those enabled even when the bridges -do- have to be reconfigured.

Bah, my bad ... pci_is_enabled() is confusing... At first sight I would
have thought it would return whether the device command register MEM or
IO enable are set. Instead, it returns whether pci_enable_device() has
been called.

In any case, Felix bridge looks a tad weird. It should really be handled
by a specific hotplug driver imho.

Cheers,
Ben.

^ permalink raw reply

* Re: Problem with PCI bus rescan on 460EX
From: Felix Radensky @ 2010-03-15  6:09 UTC (permalink / raw)
  To: Kenji Kaneshige; +Cc: linux-pci, Alex Chiang, linuxppc-dev@ozlabs.org
In-Reply-To: <4B9DC820.2060100@jp.fujitsu.com>

Hello Kenji-san,

Kenji Kaneshige wrote:
> Felix Radensky wrote:
>> Hello Kenji-san,
>>
>> Kenji Kaneshige wrote:
>>> I'm not sure, but I guess pci_setup_bridge() didn't update IO 
>>> base/limit
>>> and Mem base/limit of the bridge (0000:00:02.0) because of the 
>>> following
>>> lines.
>>>
>>> static void pci_setup_bridge(struct pci_bus *bus)
>>> {
>>>        struct pci_dev *bridge = bus->self;
>>>        struct resource *res;
>>>        struct pci_bus_region region;
>>>        u32 l, bu, lu, io_upper16;
>>>
>>>        if (pci_is_enabled(bridge))    
>>> <===============================                              
>>> return;            <===============================
>>>
>>>        dev_info(&bridge->dev, "PCI bridge to [bus %02x-%02x]\n",
>>>                 bus->secondary, bus->subordinate);
>>>     ...
>>>
>>> It seems the bridge was already enabled by 
>>> pci_assign_unassigned_resources()
>>> at boot time. Does removing those lines make any change?
>>>
>>
>> Yes, with these lines removed bridge memory window is properly 
>> allocated.
>
> These lines are to prevent updating IO or memory windows when there are
> some devices working behind the bridge. So please note that removing
> these lines is just for debugging.
>
>
>> For some reason bridge memory is disabled, but if I enable it via 
>> setpci, and
>> also enable device memory, then everything works fine. If the system 
>> is booted
>> when device behind the bridge is plugged in, bridge memory is enabled.
>>
>
> Maybe because of the following lines, I guess.
>
> void pci_enable_bridges(struct pci_bus *bus)
> {
>        struct pci_dev *dev;
>        int retval;
>
>        list_for_each_entry(dev, &bus->devices, bus_list) {
>                if (dev->subordinate) {
>                        if (!pci_is_enabled(dev)) {        <=======
>                                retval = pci_enable_device(dev);<=======
>                                pci_set_master(dev);        <=======
>                        }
>         ...
>
>

Yes, but removing this check is not enough. The bridge is enabled after 
first scan, but it's
memory is disabled. So simply calling  pci_enable_device() will not 
help, it will return without
enabling memory. I had to call  pci_disable_device() before 
pci_enable_device() to make things
work.
> One possible cause is that pcibios_enable_device() for the bridge didn't
> return any error even though it didn't work properly (ex. cannot access
> to the command register, and so on) on your platform when there is no
> device behind the bridge. But it is just my guess.
Should pcibios_enable_device() return an error if it fails to enable 
bridge memory ?

Thanks.

Felix.

^ permalink raw reply

* Re: [Patch 1/1] PPC64-HWBKPT: Implement hw-breakpoints for PPC64
From: K.Prasad @ 2010-03-15  6:29 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: Michael Neuling, shaggy, Frederic Weisbecker, David Gibson,
	linuxppc-dev, paulus, Alan Stern, Roland McGrath
In-Reply-To: <1268374776.2209.74.camel@pasglop>

On Fri, Mar 12, 2010 at 05:19:36PM +1100, Benjamin Herrenschmidt wrote:
> 
> > Index: linux-2.6.ppc64_test/arch/powerpc/include/asm/hw_breakpoint.h
> > ===================================================================
> > --- /dev/null
> > +++ linux-2.6.ppc64_test/arch/powerpc/include/asm/hw_breakpoint.h
> > @@ -0,0 +1,54 @@
> > +#ifndef	_PPC64_HW_BREAKPOINT_H
> > +#define	_PPC64_HW_BREAKPOINT_H
> > +
> > +#ifdef	__KERNEL__
> > +#define	__ARCH_HW_BREAKPOINT_H
> > +#ifdef CONFIG_PPC64
> > +
> > +struct arch_hw_breakpoint {
> > +	u8		len; /* length of the target symbol */
> 
> I don't understand the usage of the word "symbol" above, can you
> explain ?
>

The word "symbol", here, carries a meaning similar to what is derived from
its usage in the word "kernel data symbols" - although it is
used to store lengths for both kernel and user-space breakpoints.

Since the desired length of the breakpoint is typically determined by the
size of the "symbol" (variable) being monitored (not exceeding 8-Bytes),
the comment was such. I shall change it to a more descriptive one, such as
"length of the target kernel/user data symbol" if you prefer that.
 
> > +	int		type;
> > +	unsigned long	address;
> > +};
> > +
> > +#include <linux/kdebug.h>
> > +#include <asm/reg.h>
> > +#include <asm/system.h>
> > +
> > +/* Total number of available HW breakpoint registers */
> > +#define HBP_NUM 1
> > +
> > +struct perf_event;
> > +struct pmu;
> > +struct perf_sample_data;
> > +
> > +#define HW_BREAKPOINT_ALIGN 0x7
> > +/* Maximum permissible length of any HW Breakpoint */
> > +#define HW_BREAKPOINT_LEN 0x8
> 
> That's a lot of server-only hard wired assumptions... I suppose the
> DABR emulation of BookE will catch but do you intend to provide
> proper BookE support at some stage ?
> 

Yes, I intend to extend support for Book-E sometime soon during which
the above code would have to be either a) enclosed inside #ifdef PPC64
or b) a new header file for BookE debug register definitions are used
(guess Shaggy's code would have many of them done already).

> > +static inline void hw_breakpoint_disable(void)
> > +{
> > +	set_dabr(0);
> > +}
> 
> How much of these set_dabr() I see here are going to interact with
> ptrace ? Is there some exclusion going on between ptrace and perf
> event use of the DABR or none at all ? Or are you replacing the ptrace
> bits ?
> 

This set_dabr() in hw_breakpoint_disable() is to be called only once during
machine_kexec() [which I realise is missing in the patch...will add that]
and will not conflict with ptrace.

The other set_dabr() in arch_<un>install_hw_breakpoint() will perform the
actual debug register write, while the ptrace_<get><set>_debugreg() requests
are routed through them (via the hw-breakpoint interfaces for arbitration as
shown below) and are designed to not conflict with each other.

ptrace_set_debugreg()-->register_user_hw_breakpoint()
...
(sched)-->perf_event_task_sched_<in><out>()--->arch_<un>install_hw_breakpoint()

In short, an existing ptrace request will not be overwritten/replaced to
accommodate a  new kernel/user-space request (which will fail because of DABR
unavailability).

> > +/*
> > + * Install a perf counter breakpoint.
> > + *
> > + * We seek a free debug address register and use it for this
> > + * breakpoint.
> > + *
> > + * Atomic: we hold the counter->ctx->lock and we only handle variables
> > + * and registers local to this cpu.
> > + */
> > +int arch_install_hw_breakpoint(struct perf_event *bp)
> > +{
> > +	struct arch_hw_breakpoint *info = counter_arch_bp(bp);
> > +	struct perf_event **slot = &__get_cpu_var(bp_per_reg);
> > +
> > +	if (!*slot)
> > +		*slot = bp;
> > +	else {
> > +		WARN_ONCE(1, "Can't find any breakpoint slot");
> > +		return -EBUSY;
> > +	}
> > +
> > +	set_dabr(info->address | info->type | DABR_TRANSLATION);
> > +	return 0;
> > +}
> 
> Under which circumstances will the upper layer call that more than
> once ? If it's a legit thing to do, then the WARN_ONCE() is a heavy
> hammer here. I wouldn't even printk.... or only pr_debug() if it's
> really worth it.
> 
> Or is that something that should just not happen ?
> 

I don't really see when this can happen in PPC64 with one DABR. The slot
reservation mechanism wouldn't allow this to happen and the code is here
since it got inherited from x86.

I shall remove the check and hence the WARN_ONCE.

> I would also use this coding style which is more compact and avoids
> the horrible (!*slot) :
> 
> 	/* Check if the slot is busy */
> 	if (*slot)
> 		return -EBUSY;
> 	set_dabr(...);
> 
> > +/*
> > + * Uninstall the breakpoint contained in the given counter.
> > + *
> > + * First we search the debug address register it uses and then we disable
> > + * it.
> > + *
> > + * Atomic: we hold the counter->ctx->lock and we only handle variables
> > + * and registers local to this cpu.
> > + */
> > +void arch_uninstall_hw_breakpoint(struct perf_event *bp)
> > +{
> > +	struct perf_event **slot = &__get_cpu_var(bp_per_reg);
> > +
> > +	if (*slot == bp)
> > +		*slot = NULL;
> > +	else {
> > +		WARN_ONCE(1, "Can't find the breakpoint slot");
> > +		return;
> > +	}
> > +	set_dabr(0);
> > +}
> 
> Similar coding style issues... That one might be worth the warning
> as I suppose the core should -really- not try to uninstall a bp that
> hasn't been installed in the first place.
>

Okay..will change the code style.
 
> > +/*
> > + * Validate the arch-specific HW Breakpoint register settings
> > + */
> > +int arch_validate_hwbkpt_settings(struct perf_event *bp,
> > +						struct task_struct *tsk)
> > +{
> > +	int is_kernel, ret = -EINVAL;
> > +	struct arch_hw_breakpoint *info = counter_arch_bp(bp);
> > +
> > +	if (!bp)
> > +		return ret;
> > +
> > +	switch (bp->attr.bp_type) {
> > +	case HW_BREAKPOINT_R:
> > +		info->type = DABR_DATA_READ;
> > +		break;
> > +	case HW_BREAKPOINT_W:
> > +		info->type = DABR_DATA_WRITE;
> > +		break;
> > +	case HW_BREAKPOINT_R | HW_BREAKPOINT_W:
> > +		info->type = (DABR_DATA_READ | DABR_DATA_WRITE);
> > +		break;
> > +	default:
> > +		return ret;
> > +	}
> 
> I'm not -too- fan of the above, I suppose I would have written it a bit
> differently using if's but that's not a big deal... however:
> 
> > +	/* TODO: Check for a valid triggered function */
> > +	/* if (!bp->triggered)
> > +		return -EINVAL; */
> 
> What is that ? Is the patch incomplete ? Don't leave commented out code
> in there. If you think there's a worthwhile improvement, then add a
> comment with maybe a bit more explanations, and make it clear that the
> patch is still useful without the code, but don't just leave commented
> out code like that without a good reason. A good reason would be some
> optional debug stuff for example, but then an ifdef is preferrable to
> comments.
> 

Thanks for pointing that out....the TODO label here is obsolete..it will
be removed.

> > +	is_kernel = is_kernel_addr(bp->attr.bp_addr);
> > +	if ((tsk && is_kernel) || (!tsk && !is_kernel))
> > +		return -EINVAL;
> > +
> > +	info->address = bp->attr.bp_addr;
> > +	info->len = bp->attr.bp_len;
> > +
> > +	/*
> > +	 * Since breakpoint length can be a maximum of HW_BREAKPOINT_LEN(8)
> > +	 * and breakpoint addresses are aligned to nearest double-word
> > +	 * HW_BREAKPOINT_ALIGN by rounding off to the lower address, the
> > +	 * 'symbolsize' should satisfy the check below.
> > +	 */
> > +	if (info->len >
> > +	    (HW_BREAKPOINT_LEN - (info->address & HW_BREAKPOINT_ALIGN)))
> > +		return -EINVAL;
> > +	return 0;
> > +}
> > +
> > +/*
> > + * Handle debug exception notifications.
> > + */
> > +int __kprobes hw_breakpoint_handler(struct die_args *args)
> > +{
> > +	int rc = NOTIFY_STOP;
> > +	struct perf_event *bp;
> > +	struct pt_regs *regs = args->regs;
> > +	unsigned long dar = regs->dar;
> > +	int cpu, is_kernel, stepped = 1;
> > +	struct arch_hw_breakpoint *info;
> > +
> > +	/* Disable breakpoints during exception handling */
> > +	set_dabr(0);
> > +	cpu = get_cpu();
> 
> So there's something a bit weird here. set_dabr() will clear the DABR on
> the local CPU, and you do that before you disable preempt. So you may
> have preempted and be on another CPU, is that allright ? IE. Are you
> dealing with that original CPU still having the DABR active and you now
> clearing a different one ?
>

First, the code here is written with the assumption that pre-emption is
disabled during do_page_fault() and hence hw-breakpoint exception handling.
If it is not the case (as you've pointed out below) the exception handling
is bound to go wrong. I will fix it by patching do_hash_page in
exceptions-64s.S as suggested by you.

Since the comment here (and some of those below) point out the problems that
may arise when pre-emption occurs (which is not supposed to happen),
they are all valid but will disappear when do_hash_page is fixed.
 
> > +	/*
> > +	 * The counter may be concurrently released but that can only
> > +	 * occur from a call_rcu() path. We can then safely fetch
> > +	 * the breakpoint, use its callback, touch its counter
> > +	 * while we are in an rcu_read_lock() path.
> > +	 */
> > +	rcu_read_lock();
> > +
> > +	bp = per_cpu(bp_per_reg, cpu);
> > +	if (!bp)
> > +		goto out;
> 
> So this is the bp_per_reg of a different CPU if you had migrated
> earlier. So you -did- hit the BP on, let's say CPU 0, but since you are
> now on CPU 1 you won't handle it ? Weird...
> 

Correct...I will fix as stated above.

> > +	info = counter_arch_bp(bp);
> > +	is_kernel = is_kernel_addr(bp->attr.bp_addr);
> > +
> > +	/*
> > +	 * Verify if dar lies within the address range occupied by the symbol
> > +	 * being watched to filter extraneous exceptions.
> > +	 */
> > +	if (!((bp->attr.bp_addr <= dar) &&
> > +	    (dar <= (bp->attr.bp_addr + bp->attr.bp_len))))
> > +		/*
> > +		 * This exception is triggered not because of a memory access on
> > +		 * the monitored variable but in the double-word address range
> > +		 * in which it is contained. We will consume this exception,
> > +		 * considering it as 'noise'.
> > +		 */
> > +		goto restore_bp;
> > +
> > +	/*
> > +	 * Return early after invoking user-callback function without restoring
> > +	 * DABR if the breakpoint is from ptrace which always operates in
> > +	 * one-shot mode
> > +	 */
> > +	if (bp->overflow_handler == ptrace_triggered) {
> > +		perf_bp_event(bp, regs);
> > +		rc = NOTIFY_DONE;
> > +		goto out;
> > +	}
> > +
> > +	/*
> > +	 * Do not emulate user-space instructions from kernel-space,
> > +	 * instead single-step them.
> > +	 */
> > +	if (!is_kernel) {
> > +		current->thread.last_hit_ubp = bp;
> > +		regs->msr |= MSR_SE;
> > +		goto out;
> > +	}
> 
> So what is this ? When you hit a bp, you switch to single step ? Out of
> curiosity, why ?
> 

For a user-space breakpoint request (which is not from ptrace syscall),
the behaviour is thus:
- It operates in 'continuous-trigger' mode (unlike ptrace requests
  which are 'one-shot'.
- The causative instruction is not emulated in kernel-space using
  emulate_step() but is rather executed in user-space.
- The SIGTRAP signal is sent to user-space 'after' execution of the
  causative instruction.

Since breakpoint exceptions in ppc64 operate in 'trigger-before-execute'
fashion, they have to be disabled upon occurrence and then re-enabled
after single-stepping the causative instruction (inside the single-step
handler) to avoid being hit by the breakpoint infinitely. I'm not sure
if I'm missing something obviously wrong that you're trying to point me
to (in the comment above).

> > +	stepped = emulate_step(regs, regs->nip);
> > +	/* emulate_step() could not execute it, single-step them */
> > +	if (stepped == 0) {
> > +		regs->msr |= MSR_SE;
> > +		per_cpu(last_hit_bp, cpu) = bp;
> > +		goto out;
> > +	}
> > +	/*
> > +	 * As a policy, the callback is invoked in a 'trigger-after-execute'
> > +	 * fashion
> > +	 */
> > +	perf_bp_event(bp, regs);
> > +
> > +restore_bp:
> > +	set_dabr(info->address | info->type | DABR_TRANSLATION);
> 
> So in my preempt case, you hit the DABR on CPU 0, migrated to CPU 1
> before you get into this function, and now you are modifying CPU 1
> DABR... 
> 
> I think we need to change the asm so that you are called with interrupts
> off from handle_page_fault() or so.
> 
> Basicallym in do_hash_page, make the andis 0xa450 go out of line, check
> for DSISR_DABRMATCH specifically, and in this case go to an entirely
> different function than handle_page_fault->do_page_fault(), something
> like handle_dabr_fault->do_dabr() which uses DISABLE_INTS instead
> of ENABLE_INTS :-)
> 

Sure, will fix this (and other comments) in the subsequent patch that I send.


> We also need the same fix in 32-bit I suppose.
> 
> Note while looking at it that it looks like we have a similar issue with
> program checks. We fixed it on 32-bit but not on 64-bit. We should keep
> interrupts masked basically when going progranm_check_exception(). It
> will unmask them if/when needed.
> 
> > +out:
> > +	rcu_read_unlock();
> > +	put_cpu();
> > +	return rc;
> > +}
> > +
> > +/*
> > + * Handle single-step exceptions following a DABR hit.
> > + */
> > +int __kprobes single_step_dabr_instruction(struct die_args *args)
> > +{
> > +	struct pt_regs *regs = args->regs;
> > +	int cpu = get_cpu();
> > +	int ret = NOTIFY_DONE;
> > +	siginfo_t info;
> > +	struct perf_event *bp = NULL, *kernel_bp, *user_bp;
> > +	struct arch_hw_breakpoint *bp_info;
> > +
> > +	/*
> > +	 * Identify the cause of single-stepping and find the corresponding
> > +	 * breakpoint structure
> > +	 */
> > +	user_bp = current->thread.last_hit_ubp;
> > +	kernel_bp = per_cpu(last_hit_bp, cpu);
> > +	if (user_bp) {
> > +		bp = user_bp;
> > +		current->thread.last_hit_ubp = NULL;
> > +	} else if (kernel_bp) {
> > +		bp = kernel_bp;
> > +		per_cpu(last_hit_bp, cpu) = NULL;
> > +	}
> 
> Hopefully you don't have this problem here, so you probably don't need
> get/put_cpu() but that won't hurt, since single_step should hopefully
> always have interrupts off.
> 

Sure, I could have used smp_processor_id() instead....will use that.

> > +	/*
> > +	 * Check if we are single-stepping as a result of a
> > +	 * previous HW Breakpoint exception
> > +	 */
> > +	if (!bp)
> > +		goto out;
> > +
> > +	bp_info = counter_arch_bp(bp);
> > +
> > +	/*
> > +	 * We shall invoke the user-defined callback function in the single
> > +	 * stepping handler to confirm to 'trigger-after-execute' semantics
> > +	 */
> > +	perf_bp_event(bp, regs);
> > +
> > +	/*
> > +	 * Do not disable MSR_SE if the process was already in
> > +	 * single-stepping mode. We cannot reliable detect single-step mode
> > +	 * for kernel-space breakpoints, so this cannot work along with other
> > +	 * debuggers (like KGDB, xmon) which may be single-stepping kernel code.
> > +	 */
> > +	if (!(user_bp && test_thread_flag(TIF_SINGLESTEP)))
> > +		regs->msr &= ~MSR_SE;
> > +
> > +	/* Deliver signal to user-space */
> > +	if (user_bp) {
> > +		info.si_signo = SIGTRAP;
> > +		info.si_errno = 0;
> > +		info.si_code = TRAP_HWBKPT;
> > +		info.si_addr = (void __user *)bp_info->address;
> > +		force_sig_info(SIGTRAP, &info, current);
> > +	}
> > +
> > +	set_dabr(bp_info->address | bp_info->type | DABR_TRANSLATION);
> > +	ret = NOTIFY_STOP;
> > +out:
> > +	put_cpu();
> > +	return ret;
> > +}
> > +
> > +/*
> > + * Handle debug exception notifications.
> > + */
> > +int __kprobes hw_breakpoint_exceptions_notify(
> > +		struct notifier_block *unused, unsigned long val, void *data)
> > +{
> > +	int ret = NOTIFY_DONE;
> > +
> > +	switch (val) {
> > +	case DIE_DABR_MATCH:
> > +		ret = hw_breakpoint_handler(data);
> > +		break;
> > +	case DIE_SSTEP:
> > +		ret = single_step_dabr_instruction(data);
> > +		break;
> > +	}
> > +
> > +	return ret;
> > +}
> > +
> > +/*
> > + * Release the user breakpoints used by ptrace
> > + */
> > +void flush_ptrace_hw_breakpoint(struct task_struct *tsk)
> > +{
> > +	struct thread_struct *t = &tsk->thread;
> > +
> > +	unregister_hw_breakpoint(t->ptrace_bps[0]);
> > +	t->ptrace_bps[0] = NULL;
> > +}
> 
> Ok, so I see that you call that on context switch. But where do you
> re-install the breakpoint for the "new" process ?
> 
> See below...
> 

This is being unconditionally invoked inside __switch_to() which is
wrong. In addition, it also leads to a lockdep warning which I will fix
in my subsequent patch.

> > +void hw_breakpoint_pmu_read(struct perf_event *bp)
> > +{
> > +	/* TODO */
> > +}
> > +
> > +void hw_breakpoint_pmu_unthrottle(struct perf_event *bp)
> > +{
> > +	/* TODO */
> > +}
> > +
> > +
> > Index: linux-2.6.ppc64_test/arch/powerpc/Kconfig
> > ===================================================================
> > --- linux-2.6.ppc64_test.orig/arch/powerpc/Kconfig
> > +++ linux-2.6.ppc64_test/arch/powerpc/Kconfig
> > @@ -140,6 +140,7 @@ config PPC
> >  	select HAVE_SYSCALL_WRAPPERS if PPC64
> >  	select GENERIC_ATOMIC64 if PPC32
> >  	select HAVE_PERF_EVENTS
> > +	select HAVE_HW_BREAKPOINT if PPC64
> 
> Why 64-bit only ? ppc32 has DABR too. In fact BookE also provides DABR
> emulation.
>

HAVE_HW_BREAKPOINT would be too generic, so I guess this can be changed
to HAVE_HW_BREAKPOINT_DABR (or something similar?). I think you're
referring to BookE's ability to individually use DAC registers are two
debug registers - which cannot be handled by this patch and can be done
during BookE implementation.

> Also, all your PPC64 stuff are going to show up on BookE 64-bit which
> might not be what you wanted...
>

True...I thought PPC64 would refer to the server class of processors
(which has just one DABR)...is there a config flag to refer to such
processors? Or should this patch create one?
 
> >  config EARLY_PRINTK
> >  	bool
> > Index: linux-2.6.ppc64_test/arch/powerpc/kernel/Makefile
> > ===================================================================
> > --- linux-2.6.ppc64_test.orig/arch/powerpc/kernel/Makefile
> > +++ linux-2.6.ppc64_test/arch/powerpc/kernel/Makefile
> > @@ -33,7 +33,7 @@ obj-y				:= cputable.o ptrace.o syscalls
> >  obj-y				+= vdso32/
> >  obj-$(CONFIG_PPC64)		+= setup_64.o sys_ppc32.o \
> >  				   signal_64.o ptrace32.o \
> > -				   paca.o nvram_64.o firmware.o
> > +				   paca.o nvram_64.o firmware.o hw_breakpoint.o
> >  obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_ppc970.o cpu_setup_pa6t.o
> >  obj64-$(CONFIG_RELOCATABLE)	+= reloc_64.o
> >  obj-$(CONFIG_PPC_BOOK3E_64)	+= exceptions-64e.o
> > Index: linux-2.6.ppc64_test/arch/powerpc/include/asm/reg.h
> > ===================================================================
> > --- linux-2.6.ppc64_test.orig/arch/powerpc/include/asm/reg.h
> > +++ linux-2.6.ppc64_test/arch/powerpc/include/asm/reg.h
> > @@ -180,6 +180,7 @@
> >  #define   CTRL_TE	0x00c00000	/* thread enable */
> >  #define   CTRL_RUNLATCH	0x1
> >  #define SPRN_DABR	0x3F5	/* Data Address Breakpoint Register */
> > +#define   HBP_NUM	1	/* Number of physical HW breakpoint registers */
> 
> The above is not quite right. First you already define that in
> hw_breakpoint.h. Then, this is too short an identifier for such a
> generic file. Finally, it should not be in reg.h since it can vary
> from processor to processor. If you want to do things properly, then
> add some kind of info about the debug capabilities to cputable.
> 
> Please sync with Shaggy so it makes sense on BookE as well.
> 

I think cputable.h would be a fine place to define this...I will move
HBP_NUM there. However, renaming it would be difficult since the generic
code in kernel/hw_breakpoint.c (and references in x86) uses this
constant.

> >  #define   DABR_TRANSLATION	(1UL << 2)
> >  #define   DABR_DATA_WRITE	(1UL << 1)
> >  #define   DABR_DATA_READ	(1UL << 0)
> > Index: linux-2.6.ppc64_test/arch/powerpc/mm/fault.c
> > ===================================================================
> > --- linux-2.6.ppc64_test.orig/arch/powerpc/mm/fault.c
> > +++ linux-2.6.ppc64_test/arch/powerpc/mm/fault.c
> > @@ -137,6 +137,12 @@ int __kprobes do_page_fault(struct pt_re
> >  		error_code &= 0x48200000;
> >  	else
> >  		is_write = error_code & DSISR_ISSTORE;
> > +
> > +	if (error_code & DSISR_DABRMATCH) {
> > +		/* DABR match */
> > +		do_dabr(regs, address, error_code);
> > +		return 0;
> > +	}
> 
> Now that's interesting. I have the feeling that the moving up of this
> might actually be a bug fix :-) But it's still wrong due to interrupts
> being enabled as I explained earlier. We probably want to make it a
> different path out of head_*.S
> 

Agreed, this change would not be required after patching do_hash_page in
exceptions-64s.S.

> >  #else
> >  	is_write = error_code & ESR_DST;
> >  #endif /* CONFIG_4xx || CONFIG_BOOKE */
> > @@ -151,14 +157,6 @@ int __kprobes do_page_fault(struct pt_re
> >  	if (!user_mode(regs) && (address >= TASK_SIZE))
> >  		return SIGSEGV;
> >  
> > -#if !(defined(CONFIG_4xx) || defined(CONFIG_BOOKE))
> > -  	if (error_code & DSISR_DABRMATCH) {
> > -		/* DABR match */
> > -		do_dabr(regs, address, error_code);
> > -		return 0;
> > -	}
> > -#endif /* !(CONFIG_4xx || CONFIG_BOOKE)*/
> > -
> >  	if (in_atomic() || mm == NULL) {
> >  		if (!user_mode(regs))
> >  			return SIGSEGV;
> > Index: linux-2.6.ppc64_test/arch/powerpc/include/asm/processor.h
> > ===================================================================
> > --- linux-2.6.ppc64_test.orig/arch/powerpc/include/asm/processor.h
> > +++ linux-2.6.ppc64_test/arch/powerpc/include/asm/processor.h
> > @@ -209,6 +209,12 @@ struct thread_struct {
> >  #ifdef CONFIG_PPC64
> >  	unsigned long	start_tb;	/* Start purr when proc switched in */
> >  	unsigned long	accum_tb;	/* Total accumilated purr for process */
> > +	struct perf_event *ptrace_bps[HBP_NUM];
> 
> So you should probably call that MAX_HW_BREAKPOINTS and reflect the fact
> that it can be bigger. Or you have a pointer to some optional ptrace
> BP structure that handle what is needed, and can be allocated lazily
> by ptrace only when needed rather than always carrying this around in
> the thread_struct.
> 

Since ptrace's request for debug registers are thread-specific, they are
stored in 'struct thread_struct' (and is analogous to its implementation
in x86). In fact previous attempts to store such values outside
thread_struct were discouraged by the LKML community (refer Ingo's mail
on LKML here: 20090310143543.GE3850@elte.hu) citing potential locking
issues when stored outside.

> > +	/*
> > +	 * Point to the hw-breakpoint last. Helps safe pre-emption and
> > +	 * hw-breakpoint re-enablement.
> > +	 */
> > +	struct perf_event *last_hit_ubp;
> 
> The comment doesn't make much sense. Preemption doesn't seem quite right
> to me unless I missed something and the comment is either too much or
> not enough to understand what this is for.
>

The single-step exception may arise due to two reasons - (a) a legitimate
user (like kgdb in kernel-, or ptrace in user-space) decides to
single-step for debugging purposes or (b) single-stepping enabled by
hw_breakpoint_handler() to restore the debug register values.

'last_hit_ubp' along with 'per_cpu(last_hit_bp)' are used to distinguish
single-step exceptions that are triggered because of (b).

These data structures will not be required if pre-emption between
hw_breakpoint_handler() and single-step exception is disabled, since it
will be straight-forward to distinguish the source of exception i.e. (a)
from (b). In such a case, with pre-emption disabled on the CPU that hit
the breakpoint, single-step exceptions following a hw_breakpoint_handler()
will always be the result of (b) and vice-versa.

I will make the comment more descriptive as below:

/*
 * Helps identify source of single-step exception and subsequent
 * hw-breakpoint enablement
 */

Thank you for the detailed review - they have helped unearth certain
important issues with the patch.

As stated before, I will send a subsequent version of the patch with the
fixes as agreed above.

Thanks,
K.Prasad

^ permalink raw reply

* Re: [PATCH] [V2] Add non-Virtex5 support for LL TEMAC driver
From: Michal Simek @ 2010-03-15  8:39 UTC (permalink / raw)
  To: John Linn; +Cc: netdev, John Tyner, linuxppc-dev, john.williams
In-Reply-To: <bda26c8d-00b2-411d-b4b7-ad6954b9049e@SG2EHSMHS005.ehs.local>

John Linn wrote:
> This patch adds support for using the LL TEMAC Ethernet driver on
> non-Virtex 5 platforms by adding support for accessing the Soft DMA
> registers as if they were memory mapped instead of solely through the
> DCR's (available on the Virtex 5).
> 
> The patch also updates the driver so that it runs on the MicroBlaze.
> The changes were tested on the PowerPC 440, PowerPC 405, and the
> MicroBlaze platforms.

Which git-tree have you tested on? (Of course microblaze)

Michal

> 
> Signed-off-by: John Tyner <jtyner@cs.ucr.edu>
> Signed-off-by: John Linn <john.linn@xilinx.com>
> ---
> 
> V2 - Incorporated comments from Grant and added more logic to allow the driver
> to work on MicroBlaze.
> 
>  drivers/net/Kconfig         |    1 -
>  drivers/net/ll_temac.h      |   17 +++++-
>  drivers/net/ll_temac_main.c |  124 ++++++++++++++++++++++++++++++++++---------
>  3 files changed, 113 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index 9b6efe1..5402105 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -2443,7 +2443,6 @@ config MV643XX_ETH
>  config XILINX_LL_TEMAC
>  	tristate "Xilinx LL TEMAC (LocalLink Tri-mode Ethernet MAC) driver"
>  	select PHYLIB
> -	depends on PPC_DCR_NATIVE
>  	help
>  	  This driver supports the Xilinx 10/100/1000 LocalLink TEMAC
>  	  core used in Xilinx Spartan and Virtex FPGAs
> diff --git a/drivers/net/ll_temac.h b/drivers/net/ll_temac.h
> index 1af66a1..915aa34 100644
> --- a/drivers/net/ll_temac.h
> +++ b/drivers/net/ll_temac.h
> @@ -5,8 +5,11 @@
>  #include <linux/netdevice.h>
>  #include <linux/of.h>
>  #include <linux/spinlock.h>
> +
> +#ifdef CONFIG_PPC_DCR
>  #include <asm/dcr.h>
>  #include <asm/dcr-regs.h>
> +#endif
>  
>  /* packet size info */
>  #define XTE_HDR_SIZE			14      /* size of Ethernet header */
> @@ -290,8 +293,12 @@ This option defaults to enabled (set) */
>  
>  #define TX_CONTROL_CALC_CSUM_MASK   1
>  
> +/* Align the IP data in the packet on word boundaries as MicroBlaze
> + * needs it.
> + */
> +
>  #define XTE_ALIGN       32
> -#define BUFFER_ALIGN(adr) ((XTE_ALIGN - ((u32) adr)) % XTE_ALIGN)
> +#define BUFFER_ALIGN(adr) ((34 - ((u32) adr)) % XTE_ALIGN)
>  
>  #define MULTICAST_CAM_TABLE_NUM 4
>  
> @@ -335,9 +342,15 @@ struct temac_local {
>  	struct mii_bus *mii_bus;	/* MII bus reference */
>  	int mdio_irqs[PHY_MAX_ADDR];	/* IRQs table for MDIO bus */
>  
> -	/* IO registers and IRQs */
> +	/* IO registers, dma functions and IRQs */
>  	void __iomem *regs;
> +	void __iomem *sdma_regs;
> +#ifdef CONFIG_PPC_DCR
>  	dcr_host_t sdma_dcrs;
> +#endif
> +	u32 (*dma_in)(struct temac_local *, int);
> +	void (*dma_out)(struct temac_local *, int, u32);
> +
>  	int tx_irq;
>  	int rx_irq;
>  	int emac_num;
> diff --git a/drivers/net/ll_temac_main.c b/drivers/net/ll_temac_main.c
> index a18e348..9aedf9b 100644
> --- a/drivers/net/ll_temac_main.c
> +++ b/drivers/net/ll_temac_main.c
> @@ -20,9 +20,6 @@
>   *   or rx, so this should be okay.
>   *
>   * TODO:
> - * - Fix driver to work on more than just Virtex5.  Right now the driver
> - *   assumes that the locallink DMA registers are accessed via DCR
> - *   instructions.
>   * - Factor out locallink DMA code into separate driver
>   * - Fix multicast assignment.
>   * - Fix support for hardware checksumming.
> @@ -115,17 +112,86 @@ void temac_indirect_out32(struct temac_local *lp, int reg, u32 value)
>  	temac_iow(lp, XTE_CTL0_OFFSET, CNTLREG_WRITE_ENABLE_MASK | reg);
>  }
>  
> +/**
> + * temac_dma_in32 - Memory mapped DMA read, this function expects a
> + * register input that is based on DCR word addresses which
> + * are then converted to memory mapped byte addresses
> + */
>  static u32 temac_dma_in32(struct temac_local *lp, int reg)
>  {
> -	return dcr_read(lp->sdma_dcrs, reg);
> +	return in_be32((u32 *)(lp->sdma_regs + (reg << 2)));
>  }
>  
> +/**
> + * temac_dma_out32 - Memory mapped DMA read, this function expects a
> + * register input that is based on DCR word addresses which
> + * are then converted to memory mapped byte addresses
> + */
>  static void temac_dma_out32(struct temac_local *lp, int reg, u32 value)
>  {
> +	out_be32((u32 *)(lp->sdma_regs + (reg << 2)), value);
> +}
> +
> +/* DMA register access functions can be DCR based or memory mapped.
> + * The PowerPC 440 is DCR based, the PowerPC 405 and MicroBlaze are both
> + * memory mapped.
> + */
> +#ifdef CONFIG_PPC_DCR
> +
> +/**
> + * temac_dma_dcr_in32 - DCR based DMA read
> + */
> +static u32 temac_dma_dcr_in(struct temac_local *lp, int reg)
> +{
> +	return dcr_read(lp->sdma_dcrs, reg);
> +}
> +
> +/**
> + * temac_dma_dcr_out32 - DCR based DMA write
> + */
> +static void temac_dma_dcr_out(struct temac_local *lp, int reg, u32 value)
> +{
>  	dcr_write(lp->sdma_dcrs, reg, value);
>  }
>  
>  /**
> + * temac_dcr_setup - If the DMA is DCR based, then setup the address and
> + * I/O  functions
> + */
> +static int temac_dcr_setup(struct temac_local *lp, struct of_device *op,
> +				struct device_node *np)
> +{
> +	unsigned int dcrs;
> +
> +	/* setup the dcr address mapping if it's in the device tree */
> +
> +	dcrs = dcr_resource_start(np, 0);
> +	if (dcrs != 0) {
> +		lp->sdma_dcrs = dcr_map(np, dcrs, dcr_resource_len(np, 0));
> +		lp->dma_in = temac_dma_dcr_in;
> +		lp->dma_out = temac_dma_dcr_out;
> +		dev_dbg(&op->dev, "DCR base: %x\n", dcrs);
> +		return 0;
> +	}
> +	/* no DCR in the device tree, indicate a failure */
> +	return -1;
> +}
> +
> +#else
> +
> +/*
> + * temac_dcr_setup - This is a stub for when DCR is not supported,
> + * such as with MicroBlaze
> + */
> +static int temac_dcr_setup(struct temac_local *lp, struct of_device *op,
> +				struct device_node *np)
> +{
> +	return -1;
> +}
> +
> +#endif
> +
> +/**
>   * temac_dma_bd_init - Setup buffer descriptor rings
>   */
>  static int temac_dma_bd_init(struct net_device *ndev)
> @@ -172,23 +238,23 @@ static int temac_dma_bd_init(struct net_device *ndev)
>  		lp->rx_bd_v[i].app0 = STS_CTRL_APP0_IRQONEND;
>  	}
>  
> -	temac_dma_out32(lp, TX_CHNL_CTRL, 0x10220400 |
> +	lp->dma_out(lp, TX_CHNL_CTRL, 0x10220400 |
>  					  CHNL_CTRL_IRQ_EN |
>  					  CHNL_CTRL_IRQ_DLY_EN |
>  					  CHNL_CTRL_IRQ_COAL_EN);
>  	/* 0x10220483 */
>  	/* 0x00100483 */
> -	temac_dma_out32(lp, RX_CHNL_CTRL, 0xff010000 |
> +	lp->dma_out(lp, RX_CHNL_CTRL, 0xff010000 |
>  					  CHNL_CTRL_IRQ_EN |
>  					  CHNL_CTRL_IRQ_DLY_EN |
>  					  CHNL_CTRL_IRQ_COAL_EN |
>  					  CHNL_CTRL_IRQ_IOE);
>  	/* 0xff010283 */
>  
> -	temac_dma_out32(lp, RX_CURDESC_PTR,  lp->rx_bd_p);
> -	temac_dma_out32(lp, RX_TAILDESC_PTR,
> +	lp->dma_out(lp, RX_CURDESC_PTR,  lp->rx_bd_p);
> +	lp->dma_out(lp, RX_TAILDESC_PTR,
>  		       lp->rx_bd_p + (sizeof(*lp->rx_bd_v) * (RX_BD_NUM - 1)));
> -	temac_dma_out32(lp, TX_CURDESC_PTR, lp->tx_bd_p);
> +	lp->dma_out(lp, TX_CURDESC_PTR, lp->tx_bd_p);
>  
>  	return 0;
>  }
> @@ -426,9 +492,9 @@ static void temac_device_reset(struct net_device *ndev)
>  	temac_indirect_out32(lp, XTE_RXC1_OFFSET, val & ~XTE_RXC1_RXEN_MASK);
>  
>  	/* Reset Local Link (DMA) */
> -	temac_dma_out32(lp, DMA_CONTROL_REG, DMA_CONTROL_RST);
> +	lp->dma_out(lp, DMA_CONTROL_REG, DMA_CONTROL_RST);
>  	timeout = 1000;
> -	while (temac_dma_in32(lp, DMA_CONTROL_REG) & DMA_CONTROL_RST) {
> +	while (lp->dma_in(lp, DMA_CONTROL_REG) & DMA_CONTROL_RST) {
>  		udelay(1);
>  		if (--timeout == 0) {
>  			dev_err(&ndev->dev,
> @@ -436,7 +502,7 @@ static void temac_device_reset(struct net_device *ndev)
>  			break;
>  		}
>  	}
> -	temac_dma_out32(lp, DMA_CONTROL_REG, DMA_TAIL_ENABLE);
> +	lp->dma_out(lp, DMA_CONTROL_REG, DMA_TAIL_ENABLE);
>  
>  	temac_dma_bd_init(ndev);
>  
> @@ -597,7 +663,7 @@ static int temac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
>  		lp->tx_bd_tail = 0;
>  
>  	/* Kick off the transfer */
> -	temac_dma_out32(lp, TX_TAILDESC_PTR, tail_p); /* DMA start */
> +	lp->dma_out(lp, TX_TAILDESC_PTR, tail_p); /* DMA start */
>  
>  	return NETDEV_TX_OK;
>  }
> @@ -663,7 +729,7 @@ static void ll_temac_recv(struct net_device *ndev)
>  		cur_p = &lp->rx_bd_v[lp->rx_bd_ci];
>  		bdstat = cur_p->app0;
>  	}
> -	temac_dma_out32(lp, RX_TAILDESC_PTR, tail_p);
> +	lp->dma_out(lp, RX_TAILDESC_PTR, tail_p);
>  
>  	spin_unlock_irqrestore(&lp->rx_lock, flags);
>  }
> @@ -674,8 +740,8 @@ static irqreturn_t ll_temac_tx_irq(int irq, void *_ndev)
>  	struct temac_local *lp = netdev_priv(ndev);
>  	unsigned int status;
>  
> -	status = temac_dma_in32(lp, TX_IRQ_REG);
> -	temac_dma_out32(lp, TX_IRQ_REG, status);
> +	status = lp->dma_in(lp, TX_IRQ_REG);
> +	lp->dma_out(lp, TX_IRQ_REG, status);
>  
>  	if (status & (IRQ_COAL | IRQ_DLY))
>  		temac_start_xmit_done(lp->ndev);
> @@ -692,8 +758,8 @@ static irqreturn_t ll_temac_rx_irq(int irq, void *_ndev)
>  	unsigned int status;
>  
>  	/* Read and clear the status registers */
> -	status = temac_dma_in32(lp, RX_IRQ_REG);
> -	temac_dma_out32(lp, RX_IRQ_REG, status);
> +	status = lp->dma_in(lp, RX_IRQ_REG);
> +	lp->dma_out(lp, RX_IRQ_REG, status);
>  
>  	if (status & (IRQ_COAL | IRQ_DLY))
>  		ll_temac_recv(lp->ndev);
> @@ -794,7 +860,7 @@ static ssize_t temac_show_llink_regs(struct device *dev,
>  	int i, len = 0;
>  
>  	for (i = 0; i < 0x11; i++)
> -		len += sprintf(buf + len, "%.8x%s", temac_dma_in32(lp, i),
> +		len += sprintf(buf + len, "%.8x%s", lp->dma_in(lp, i),
>  			       (i % 8) == 7 ? "\n" : " ");
>  	len += sprintf(buf + len, "\n");
>  
> @@ -820,7 +886,6 @@ temac_of_probe(struct of_device *op, const struct of_device_id *match)
>  	struct net_device *ndev;
>  	const void *addr;
>  	int size, rc = 0;
> -	unsigned int dcrs;
>  
>  	/* Init network device structure */
>  	ndev = alloc_etherdev(sizeof(*lp));
> @@ -870,13 +935,20 @@ temac_of_probe(struct of_device *op, const struct of_device_id *match)
>  		goto nodev;
>  	}
>  
> -	dcrs = dcr_resource_start(np, 0);
> -	if (dcrs == 0) {
> -		dev_err(&op->dev, "could not get DMA register address\n");
> -		goto nodev;
> +	/* Setup the DMA register accesses, could be DCR or memory mapped */
> +	if (temac_dcr_setup(lp, op, np)) {
> +
> +		/* no DCR in the device tree, try non-DCR */
> +		lp->sdma_regs = of_iomap(np, 0);
> +		if (lp->sdma_regs) {
> +			lp->dma_in = temac_dma_in32;
> +			lp->dma_out = temac_dma_out32;
> +			dev_dbg(&op->dev, "MEM base: %p\n", lp->sdma_regs);
> +		} else {
> +			dev_err(&op->dev, "unable to map DMA registers\n");
> +			goto nodev;
> +		}
>  	}
> -	lp->sdma_dcrs = dcr_map(np, dcrs, dcr_resource_len(np, 0));
> -	dev_dbg(&op->dev, "DCR base: %x\n", dcrs);
>  
>  	lp->rx_irq = irq_of_parse_and_map(np, 0);
>  	lp->tx_irq = irq_of_parse_and_map(np, 1);


-- 
Michal Simek, Ing. (M.Eng)
PetaLogix - Linux Solutions for a Reconfigurable World
w: www.petalogix.com p: +61-7-30090663,+42-0-721842854 f: +61-7-30090663

^ permalink raw reply

* Re: Problem with PCI bus rescan on 460EX
From: Kenji Kaneshige @ 2010-03-15  9:00 UTC (permalink / raw)
  To: Felix Radensky; +Cc: linux-pci, Alex Chiang, linuxppc-dev@ozlabs.org
In-Reply-To: <4B9DCF01.4050709@embedded-sol.com>

Felix Radensky wrote:
> Hello Kenji-san,
> 
> Kenji Kaneshige wrote:
>> Felix Radensky wrote:
>>> Hello Kenji-san,
>>>
>>> Kenji Kaneshige wrote:
>>>> I'm not sure, but I guess pci_setup_bridge() didn't update IO 
>>>> base/limit
>>>> and Mem base/limit of the bridge (0000:00:02.0) because of the 
>>>> following
>>>> lines.
>>>>
>>>> static void pci_setup_bridge(struct pci_bus *bus)
>>>> {
>>>>        struct pci_dev *bridge = bus->self;
>>>>        struct resource *res;
>>>>        struct pci_bus_region region;
>>>>        u32 l, bu, lu, io_upper16;
>>>>
>>>>        if (pci_is_enabled(bridge))    
>>>> <===============================                              
>>>> return;            <===============================
>>>>
>>>>        dev_info(&bridge->dev, "PCI bridge to [bus %02x-%02x]\n",
>>>>                 bus->secondary, bus->subordinate);
>>>>     ...
>>>>
>>>> It seems the bridge was already enabled by 
>>>> pci_assign_unassigned_resources()
>>>> at boot time. Does removing those lines make any change?
>>>>
>>>
>>> Yes, with these lines removed bridge memory window is properly 
>>> allocated.
>>
>> These lines are to prevent updating IO or memory windows when there are
>> some devices working behind the bridge. So please note that removing
>> these lines is just for debugging.
>>
>>
>>> For some reason bridge memory is disabled, but if I enable it via 
>>> setpci, and
>>> also enable device memory, then everything works fine. If the system 
>>> is booted
>>> when device behind the bridge is plugged in, bridge memory is enabled.
>>>
>>
>> Maybe because of the following lines, I guess.
>>
>> void pci_enable_bridges(struct pci_bus *bus)
>> {
>>        struct pci_dev *dev;
>>        int retval;
>>
>>        list_for_each_entry(dev, &bus->devices, bus_list) {
>>                if (dev->subordinate) {
>>                        if (!pci_is_enabled(dev)) {        <=======
>>                                retval = pci_enable_device(dev);<=======
>>                                pci_set_master(dev);        <=======
>>                        }
>>         ...
>>
>>
> 
> Yes, but removing this check is not enough. The bridge is enabled after 
> first scan, but it's
> memory is disabled. So simply calling  pci_enable_device() will not 
> help, it will return without
> enabling memory. I had to call  pci_disable_device() before 
> pci_enable_device() to make things
> work.
>> One possible cause is that pcibios_enable_device() for the bridge didn't
>> return any error even though it didn't work properly (ex. cannot access
>> to the command register, and so on) on your platform when there is no
>> device behind the bridge. But it is just my guess.
> Should pcibios_enable_device() return an error if it fails to enable 
> bridge memory ?
> 

I think the device is expected to be ready to work if pci_enable_device()
returns without error. So I think pci_enable_device() should return an
error if it fails to enable the device (device is not ready to work). In
this case, detecting your bridge's failure seems PPC specific to me. So I
thought pcibios_enable_device() was the right to return an error. If
pcibios_enable_device() returned an error, pci_dev->enable_cnt would
decremented by pci_enable_device() (like pci_disable_device() does) and
this problem would not happen.

On the other hand, as Ben suggested, handling this by specific hot-plug
driver would be one of the other candidate to fix the problem.

Thanks,
Kenji Kaneshige

^ permalink raw reply

* Re: Problem with PCI bus rescan on 460EX
From: Felix Radensky @ 2010-03-15 11:23 UTC (permalink / raw)
  To: Kenji Kaneshige; +Cc: linux-pci, Alex Chiang, linuxppc-dev@ozlabs.org
In-Reply-To: <4B9DF72F.3040105@jp.fujitsu.com>

Hello, Kenji-san
>
> I think the device is expected to be ready to work if pci_enable_device()
> returns without error. So I think pci_enable_device() should return an
> error if it fails to enable the device (device is not ready to work). In
> this case, detecting your bridge's failure seems PPC specific to me. So I
> thought pcibios_enable_device() was the right to return an error. If
> pcibios_enable_device() returned an error, pci_dev->enable_cnt would
> decremented by pci_enable_device() (like pci_disable_device() does) and
> this problem would not happen.
>   

As far as I can see on 460EX pcibios_enable_device() just calls 
pci_enable_resources()
which does not return any error for my bridge, although it doesn't find 
any memory or
I/O resource it can enable. Do you think it is correct behavior ?

Another question is whether by bridge behaves correctly when no device 
is connected
to it. As you can see in dmesg output I've sent earlier

pci 0000:00:02.0:   bridge window [mem 0x00000000-0x000fffff]
pci 0000:00:02.0:   bridge window [mem 0x00000000-0x000fffff 64bit pref]

and later PCI code disables these memory windows

pci 0000:00:02.0: disabling bridge window [mem 0xd00000000-0xd000fffff 
pref] to [bus 01-01] (unused)
pci 0000:00:02.0: disabling bridge window [mem 0xd00000000-0xd000fffff] 
to [bus 01-01] (unused)

BTW, there's no problem accessing PCI_COMMAND register, as bus mastering 
is enabled in the bridge.

>
> On the other hand, as Ben suggested, handling this by specific hot-plug
> driver would be one of the other candidate to fix the problem.
>
>

I'm not opposed to this idea, it's just that this bridge worked in an older
system based on linux-2.6.22 and patched fakephp driver was used for 
hotplug.
There's existing userspace software that I don't really want to modify 
heavily.
But I'll do that if generic PCI rescan cannot be fixed.

Thanks a lot for your help.

Felix.

^ permalink raw reply

* RE: [PATCH] [V2] Add non-Virtex5 support for LL TEMAC driver
From: John Linn @ 2010-03-15 13:40 UTC (permalink / raw)
  To: michal.simek; +Cc: netdev, John Tyner, linuxppc-dev, john.williams
In-Reply-To: <4B9DF254.2030402@petalogix.com>

> -----Original Message-----
> From: Michal Simek [mailto:michal.simek@petalogix.com]
> Sent: Monday, March 15, 2010 2:40 AM
> To: John Linn
> Cc: netdev@vger.kernel.org; linuxppc-dev@ozlabs.org;
grant.likely@secretlab.ca;
> jwboyer@linux.vnet.ibm.com; john.williams@petalogix.com; John Tyner
> Subject: Re: [PATCH] [V2] Add non-Virtex5 support for LL TEMAC driver
> =

> John Linn wrote:
> > This patch adds support for using the LL TEMAC Ethernet driver on
> > non-Virtex 5 platforms by adding support for accessing the Soft DMA
> > registers as if they were memory mapped instead of solely through
the
> > DCR's (available on the Virtex 5).
> >
> > The patch also updates the driver so that it runs on the MicroBlaze.
> > The changes were tested on the PowerPC 440, PowerPC 405, and the
> > MicroBlaze platforms.
> =

> Which git-tree have you tested on? (Of course microblaze)

It was tested on the Xilinx tree for MicroBlaze which is based on the
mainline and the Petalogix tree as DMA was needed. I tried to build
against the mainline head but got errors with the DMA routines. I guess
it's possible that it was a configuration issue there as I didn't dig
real deep.

I tested the PowerPC against the head of mainline.

Thanks,
John

> =

> Michal
> =

> >
> > Signed-off-by: John Tyner <jtyner@cs.ucr.edu>
> > Signed-off-by: John Linn <john.linn@xilinx.com>
> > ---
> >
> > V2 - Incorporated comments from Grant and added more logic to allow
the driver
> > to work on MicroBlaze.
> >
> >  drivers/net/Kconfig         |    1 -
> >  drivers/net/ll_temac.h      |   17 +++++-
> >  drivers/net/ll_temac_main.c |  124
++++++++++++++++++++++++++++++++++---------
> >  3 files changed, 113 insertions(+), 29 deletions(-)
> >
> > diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> > index 9b6efe1..5402105 100644
> > --- a/drivers/net/Kconfig
> > +++ b/drivers/net/Kconfig
> > @@ -2443,7 +2443,6 @@ config MV643XX_ETH
> >  config XILINX_LL_TEMAC
> >  	tristate "Xilinx LL TEMAC (LocalLink Tri-mode Ethernet MAC)
driver"
> >  	select PHYLIB
> > -	depends on PPC_DCR_NATIVE
> >  	help
> >  	  This driver supports the Xilinx 10/100/1000 LocalLink TEMAC
> >  	  core used in Xilinx Spartan and Virtex FPGAs
> > diff --git a/drivers/net/ll_temac.h b/drivers/net/ll_temac.h
> > index 1af66a1..915aa34 100644
> > --- a/drivers/net/ll_temac.h
> > +++ b/drivers/net/ll_temac.h
> > @@ -5,8 +5,11 @@
> >  #include <linux/netdevice.h>
> >  #include <linux/of.h>
> >  #include <linux/spinlock.h>
> > +
> > +#ifdef CONFIG_PPC_DCR
> >  #include <asm/dcr.h>
> >  #include <asm/dcr-regs.h>
> > +#endif
> >
> >  /* packet size info */
> >  #define XTE_HDR_SIZE			14      /* size of
Ethernet header */
> > @@ -290,8 +293,12 @@ This option defaults to enabled (set) */
> >
> >  #define TX_CONTROL_CALC_CSUM_MASK   1
> >
> > +/* Align the IP data in the packet on word boundaries as MicroBlaze
> > + * needs it.
> > + */
> > +
> >  #define XTE_ALIGN       32
> > -#define BUFFER_ALIGN(adr) ((XTE_ALIGN - ((u32) adr)) % XTE_ALIGN)
> > +#define BUFFER_ALIGN(adr) ((34 - ((u32) adr)) % XTE_ALIGN)
> >
> >  #define MULTICAST_CAM_TABLE_NUM 4
> >
> > @@ -335,9 +342,15 @@ struct temac_local {
> >  	struct mii_bus *mii_bus;	/* MII bus reference */
> >  	int mdio_irqs[PHY_MAX_ADDR];	/* IRQs table for MDIO bus */
> >
> > -	/* IO registers and IRQs */
> > +	/* IO registers, dma functions and IRQs */
> >  	void __iomem *regs;
> > +	void __iomem *sdma_regs;
> > +#ifdef CONFIG_PPC_DCR
> >  	dcr_host_t sdma_dcrs;
> > +#endif
> > +	u32 (*dma_in)(struct temac_local *, int);
> > +	void (*dma_out)(struct temac_local *, int, u32);
> > +
> >  	int tx_irq;
> >  	int rx_irq;
> >  	int emac_num;
> > diff --git a/drivers/net/ll_temac_main.c
b/drivers/net/ll_temac_main.c
> > index a18e348..9aedf9b 100644
> > --- a/drivers/net/ll_temac_main.c
> > +++ b/drivers/net/ll_temac_main.c
> > @@ -20,9 +20,6 @@
> >   *   or rx, so this should be okay.
> >   *
> >   * TODO:
> > - * - Fix driver to work on more than just Virtex5.  Right now the
driver
> > - *   assumes that the locallink DMA registers are accessed via DCR
> > - *   instructions.
> >   * - Factor out locallink DMA code into separate driver
> >   * - Fix multicast assignment.
> >   * - Fix support for hardware checksumming.
> > @@ -115,17 +112,86 @@ void temac_indirect_out32(struct temac_local
*lp, int reg, u32 value)
> >  	temac_iow(lp, XTE_CTL0_OFFSET, CNTLREG_WRITE_ENABLE_MASK | reg);
> >  }
> >
> > +/**
> > + * temac_dma_in32 - Memory mapped DMA read, this function expects a
> > + * register input that is based on DCR word addresses which
> > + * are then converted to memory mapped byte addresses
> > + */
> >  static u32 temac_dma_in32(struct temac_local *lp, int reg)
> >  {
> > -	return dcr_read(lp->sdma_dcrs, reg);
> > +	return in_be32((u32 *)(lp->sdma_regs + (reg << 2)));
> >  }
> >
> > +/**
> > + * temac_dma_out32 - Memory mapped DMA read, this function expects
a
> > + * register input that is based on DCR word addresses which
> > + * are then converted to memory mapped byte addresses
> > + */
> >  static void temac_dma_out32(struct temac_local *lp, int reg, u32
value)
> >  {
> > +	out_be32((u32 *)(lp->sdma_regs + (reg << 2)), value);
> > +}
> > +
> > +/* DMA register access functions can be DCR based or memory mapped.
> > + * The PowerPC 440 is DCR based, the PowerPC 405 and MicroBlaze are
both
> > + * memory mapped.
> > + */
> > +#ifdef CONFIG_PPC_DCR
> > +
> > +/**
> > + * temac_dma_dcr_in32 - DCR based DMA read
> > + */
> > +static u32 temac_dma_dcr_in(struct temac_local *lp, int reg)
> > +{
> > +	return dcr_read(lp->sdma_dcrs, reg);
> > +}
> > +
> > +/**
> > + * temac_dma_dcr_out32 - DCR based DMA write
> > + */
> > +static void temac_dma_dcr_out(struct temac_local *lp, int reg, u32
value)
> > +{
> >  	dcr_write(lp->sdma_dcrs, reg, value);
> >  }
> >
> >  /**
> > + * temac_dcr_setup - If the DMA is DCR based, then setup the
address and
> > + * I/O  functions
> > + */
> > +static int temac_dcr_setup(struct temac_local *lp, struct of_device
*op,
> > +				struct device_node *np)
> > +{
> > +	unsigned int dcrs;
> > +
> > +	/* setup the dcr address mapping if it's in the device tree */
> > +
> > +	dcrs =3D dcr_resource_start(np, 0);
> > +	if (dcrs !=3D 0) {
> > +		lp->sdma_dcrs =3D dcr_map(np, dcrs, dcr_resource_len(np,
0));
> > +		lp->dma_in =3D temac_dma_dcr_in;
> > +		lp->dma_out =3D temac_dma_dcr_out;
> > +		dev_dbg(&op->dev, "DCR base: %x\n", dcrs);
> > +		return 0;
> > +	}
> > +	/* no DCR in the device tree, indicate a failure */
> > +	return -1;
> > +}
> > +
> > +#else
> > +
> > +/*
> > + * temac_dcr_setup - This is a stub for when DCR is not supported,
> > + * such as with MicroBlaze
> > + */
> > +static int temac_dcr_setup(struct temac_local *lp, struct of_device
*op,
> > +				struct device_node *np)
> > +{
> > +	return -1;
> > +}
> > +
> > +#endif
> > +
> > +/**
> >   * temac_dma_bd_init - Setup buffer descriptor rings
> >   */
> >  static int temac_dma_bd_init(struct net_device *ndev)
> > @@ -172,23 +238,23 @@ static int temac_dma_bd_init(struct net_device
*ndev)
> >  		lp->rx_bd_v[i].app0 =3D STS_CTRL_APP0_IRQONEND;
> >  	}
> >
> > -	temac_dma_out32(lp, TX_CHNL_CTRL, 0x10220400 |
> > +	lp->dma_out(lp, TX_CHNL_CTRL, 0x10220400 |
> >  					  CHNL_CTRL_IRQ_EN |
> >  					  CHNL_CTRL_IRQ_DLY_EN |
> >  					  CHNL_CTRL_IRQ_COAL_EN);
> >  	/* 0x10220483 */
> >  	/* 0x00100483 */
> > -	temac_dma_out32(lp, RX_CHNL_CTRL, 0xff010000 |
> > +	lp->dma_out(lp, RX_CHNL_CTRL, 0xff010000 |
> >  					  CHNL_CTRL_IRQ_EN |
> >  					  CHNL_CTRL_IRQ_DLY_EN |
> >  					  CHNL_CTRL_IRQ_COAL_EN |
> >  					  CHNL_CTRL_IRQ_IOE);
> >  	/* 0xff010283 */
> >
> > -	temac_dma_out32(lp, RX_CURDESC_PTR,  lp->rx_bd_p);
> > -	temac_dma_out32(lp, RX_TAILDESC_PTR,
> > +	lp->dma_out(lp, RX_CURDESC_PTR,  lp->rx_bd_p);
> > +	lp->dma_out(lp, RX_TAILDESC_PTR,
> >  		       lp->rx_bd_p + (sizeof(*lp->rx_bd_v) * (RX_BD_NUM
- 1)));
> > -	temac_dma_out32(lp, TX_CURDESC_PTR, lp->tx_bd_p);
> > +	lp->dma_out(lp, TX_CURDESC_PTR, lp->tx_bd_p);
> >
> >  	return 0;
> >  }
> > @@ -426,9 +492,9 @@ static void temac_device_reset(struct net_device
*ndev)
> >  	temac_indirect_out32(lp, XTE_RXC1_OFFSET, val &
~XTE_RXC1_RXEN_MASK);
> >
> >  	/* Reset Local Link (DMA) */
> > -	temac_dma_out32(lp, DMA_CONTROL_REG, DMA_CONTROL_RST);
> > +	lp->dma_out(lp, DMA_CONTROL_REG, DMA_CONTROL_RST);
> >  	timeout =3D 1000;
> > -	while (temac_dma_in32(lp, DMA_CONTROL_REG) & DMA_CONTROL_RST) {
> > +	while (lp->dma_in(lp, DMA_CONTROL_REG) & DMA_CONTROL_RST) {
> >  		udelay(1);
> >  		if (--timeout =3D=3D 0) {
> >  			dev_err(&ndev->dev,
> > @@ -436,7 +502,7 @@ static void temac_device_reset(struct net_device
*ndev)
> >  			break;
> >  		}
> >  	}
> > -	temac_dma_out32(lp, DMA_CONTROL_REG, DMA_TAIL_ENABLE);
> > +	lp->dma_out(lp, DMA_CONTROL_REG, DMA_TAIL_ENABLE);
> >
> >  	temac_dma_bd_init(ndev);
> >
> > @@ -597,7 +663,7 @@ static int temac_start_xmit(struct sk_buff *skb,
struct net_device *ndev)
> >  		lp->tx_bd_tail =3D 0;
> >
> >  	/* Kick off the transfer */
> > -	temac_dma_out32(lp, TX_TAILDESC_PTR, tail_p); /* DMA start */
> > +	lp->dma_out(lp, TX_TAILDESC_PTR, tail_p); /* DMA start */
> >
> >  	return NETDEV_TX_OK;
> >  }
> > @@ -663,7 +729,7 @@ static void ll_temac_recv(struct net_device
*ndev)
> >  		cur_p =3D &lp->rx_bd_v[lp->rx_bd_ci];
> >  		bdstat =3D cur_p->app0;
> >  	}
> > -	temac_dma_out32(lp, RX_TAILDESC_PTR, tail_p);
> > +	lp->dma_out(lp, RX_TAILDESC_PTR, tail_p);
> >
> >  	spin_unlock_irqrestore(&lp->rx_lock, flags);
> >  }
> > @@ -674,8 +740,8 @@ static irqreturn_t ll_temac_tx_irq(int irq, void
*_ndev)
> >  	struct temac_local *lp =3D netdev_priv(ndev);
> >  	unsigned int status;
> >
> > -	status =3D temac_dma_in32(lp, TX_IRQ_REG);
> > -	temac_dma_out32(lp, TX_IRQ_REG, status);
> > +	status =3D lp->dma_in(lp, TX_IRQ_REG);
> > +	lp->dma_out(lp, TX_IRQ_REG, status);
> >
> >  	if (status & (IRQ_COAL | IRQ_DLY))
> >  		temac_start_xmit_done(lp->ndev);
> > @@ -692,8 +758,8 @@ static irqreturn_t ll_temac_rx_irq(int irq, void
*_ndev)
> >  	unsigned int status;
> >
> >  	/* Read and clear the status registers */
> > -	status =3D temac_dma_in32(lp, RX_IRQ_REG);
> > -	temac_dma_out32(lp, RX_IRQ_REG, status);
> > +	status =3D lp->dma_in(lp, RX_IRQ_REG);
> > +	lp->dma_out(lp, RX_IRQ_REG, status);
> >
> >  	if (status & (IRQ_COAL | IRQ_DLY))
> >  		ll_temac_recv(lp->ndev);
> > @@ -794,7 +860,7 @@ static ssize_t temac_show_llink_regs(struct
device *dev,
> >  	int i, len =3D 0;
> >
> >  	for (i =3D 0; i < 0x11; i++)
> > -		len +=3D sprintf(buf + len, "%.8x%s", temac_dma_in32(lp,
i),
> > +		len +=3D sprintf(buf + len, "%.8x%s", lp->dma_in(lp, i),
> >  			       (i % 8) =3D=3D 7 ? "\n" : " ");
> >  	len +=3D sprintf(buf + len, "\n");
> >
> > @@ -820,7 +886,6 @@ temac_of_probe(struct of_device *op, const
struct of_device_id *match)
> >  	struct net_device *ndev;
> >  	const void *addr;
> >  	int size, rc =3D 0;
> > -	unsigned int dcrs;
> >
> >  	/* Init network device structure */
> >  	ndev =3D alloc_etherdev(sizeof(*lp));
> > @@ -870,13 +935,20 @@ temac_of_probe(struct of_device *op, const
struct of_device_id *match)
> >  		goto nodev;
> >  	}
> >
> > -	dcrs =3D dcr_resource_start(np, 0);
> > -	if (dcrs =3D=3D 0) {
> > -		dev_err(&op->dev, "could not get DMA register
address\n");
> > -		goto nodev;
> > +	/* Setup the DMA register accesses, could be DCR or memory
mapped */
> > +	if (temac_dcr_setup(lp, op, np)) {
> > +
> > +		/* no DCR in the device tree, try non-DCR */
> > +		lp->sdma_regs =3D of_iomap(np, 0);
> > +		if (lp->sdma_regs) {
> > +			lp->dma_in =3D temac_dma_in32;
> > +			lp->dma_out =3D temac_dma_out32;
> > +			dev_dbg(&op->dev, "MEM base: %p\n",
lp->sdma_regs);
> > +		} else {
> > +			dev_err(&op->dev, "unable to map DMA
registers\n");
> > +			goto nodev;
> > +		}
> >  	}
> > -	lp->sdma_dcrs =3D dcr_map(np, dcrs, dcr_resource_len(np, 0));
> > -	dev_dbg(&op->dev, "DCR base: %x\n", dcrs);
> >
> >  	lp->rx_irq =3D irq_of_parse_and_map(np, 0);
> >  	lp->tx_irq =3D irq_of_parse_and_map(np, 1);
> =

> =

> --
> Michal Simek, Ing. (M.Eng)
> PetaLogix - Linux Solutions for a Reconfigurable World
> w: www.petalogix.com p: +61-7-30090663,+42-0-721842854 f:
+61-7-30090663


This email and any attachments are intended for the sole use of the named r=
ecipient(s) and contain(s) confidential information that may be proprietary=
, privileged or copyrighted under applicable law. If you are not the intend=
ed recipient, do not read, copy, or forward this email message or any attac=
hments. Delete this email message and any attachments immediately.

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox