ARM: soc: general cleanups
This is a large branch that contains a handful of different cleanups:
 
 - Fixing up the I/O space remapping on PCI on ARM. This is a series
   from Rob Herring that restructures how all pci devices allocate I/O
   space, and it's part of the work to allow multiplatform kernels.
 - A number of cleanup series for OMAP, moving and removing some
   headers, sparse irq rework and in general preparation for
   multiplatform.
 - Final removal of all non-DT boards for Tegra, it is now
   device-tree-only!
 - Removal of a stale platform, nxp4008. It's an old mobile chipset
   that is no longer in use, and was very likely never really used with
   a mainline kernel. We have not been able to find anyone interested
   in keeping it around in the kernel.
 - Removal of the legacy dmaengine driver on tegra
 
 + A handful of other things that I haven't described above.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.11 (GNU/Linux)
 
 iQIcBAABAgAGBQJQaO1fAAoJEIwa5zzehBx3IPgP/jxoO1flVGNVf0reqqyDro/w
 prZmp8cNVH9uv8xG9n9vawObrMQ8M6jCJ449fEWuAZ58EXrpIPd0kkm/MOmxp8K1
 LNs+q2aXxWpD488+b3RK55g3fksqZutTbn3y6HNuCoLG9l8yT/95KX4IIzfEP2Ch
 1TCNHdkTbf37nTBOmKN0x1kahGpWDrOkf9ysHQq+DXAGF4uwNwtR194dqz3HbDND
 hZqRq7qCLn9OwGRGNicPFoB6UcxwZ/+/+u5sX7nqPGoiPofg977mhWk1DFO15EM3
 S+A6g0dZ+XLsL+fFtOl4snSmrG5Et6qTOP0/ItQJgTG+5YdCS09ohCWJwRCBHbgj
 M5arOkyGFdVAlvX7cUux374sMe0AcqUsEmt79mYuBpIE+pBJaRUoCgDcs9FDZeUB
 U6WcE4AkxMtW7DtmVW+mF4ls9/K6cRXgWMuHCUmt1o3m3Ly9ITT7j+ntXnD9nuYk
 ndoVLR6Vxk2BzlkD0JEtg7FRAS9Wgo2DBix05qM1Qkut2iIZRhFQlqJQpNbeNdii
 /3Lg/hqpAVTZKGCd+paegHez61meyFz2PB2IiE0JKANhKHRCWTWRGgKIXkGyCiXk
 wJ2iRCOlMEpmpJgCBzfI32ER/hnW4s64iDjgksEwz6pEt7xCbhwgmwrpf0H0KsSF
 rLroHOMqyISd/Ha52Vin
 =ck1u
 -----END PGP SIGNATURE-----
Merge tag 'cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM soc general cleanups from Olof Johansson:
 "This is a large branch that contains a handful of different cleanups:
   - Fixing up the I/O space remapping on PCI on ARM.  This is a series
     from Rob Herring that restructures how all pci devices allocate I/O
     space, and it's part of the work to allow multiplatform kernels.
   - A number of cleanup series for OMAP, moving and removing some
     headers, sparse irq rework and in general preparation for
     multiplatform.
   - Final removal of all non-DT boards for Tegra, it is now
     device-tree-only!
   - Removal of a stale platform, nxp4008.  It's an old mobile chipset
     that is no longer in use, and was very likely never really used
     with a mainline kernel.  We have not been able to find anyone
     interested in keeping it around in the kernel.
   - Removal of the legacy dmaengine driver on tegra
  + A handful of other things that I haven't described above."
Fix up some conflicts with the staging tree (and because nxp4008 was
removed)
* tag 'cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (184 commits)
  ARM: OMAP2+: serial: Change MAX_HSUART_PORTS to 6
  ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus
  ARM: mmp: using for_each_set_bit to simplify the code
  ARM: tegra: harmony: fix ldo7 regulator-name
  ARM: OMAP2+: Make omap4-keypad.h local
  ARM: OMAP2+: Make l4_3xxx.h local
  ARM: OMAP2+: Make l4_2xxx.h local
  ARM: OMAP2+: Make l3_3xxx.h local
  ARM: OMAP2+: Make l3_2xxx.h local
  ARM: OMAP1: Move irda.h from plat to mach
  ARM: OMAP2+: Make hdq1w.h local
  ARM: OMAP2+: Make gpmc-smsc911x.h local
  ARM: OMAP2+: Make gpmc-smc91x.h local
  ARM: OMAP1: Move flash.h from plat to mach
  ARM: OMAP2+: Make debug-devices.h local
  ARM: OMAP1: Move board-voiceblue.h from plat to mach
  ARM: OMAP1: Move board-sx1.h from plat to mach
  ARM: OMAP2+: Make omap-wakeupgen.h local
  ARM: OMAP2+: Make omap-secure.h local
  ARM: OMAP2+: Make ctrl_module_wkup_44xx.h local
  ...
	
	
This commit is contained in:
		
				commit
				
					
						61464c8357
					
				
			
		
					 623 changed files with 4617 additions and 15489 deletions
				
			
		| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
			S3C2410 GPIO Control
 | 
								S3C24XX GPIO Control
 | 
				
			||||||
			====================
 | 
								====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Introduction
 | 
					Introduction
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ Introduction
 | 
				
			||||||
  of the s3c2410 GPIO system, please read the Samsung provided
 | 
					  of the s3c2410 GPIO system, please read the Samsung provided
 | 
				
			||||||
  data-sheet/users manual to find out the complete list.
 | 
					  data-sheet/users manual to find out the complete list.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  See Documentation/arm/Samsung/GPIO.txt for the core implemetation.
 | 
					  See Documentation/arm/Samsung/GPIO.txt for the core implementation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GPIOLIB
 | 
					GPIOLIB
 | 
				
			||||||
| 
						 | 
					@ -41,8 +41,8 @@ GPIOLIB
 | 
				
			||||||
GPIOLIB conversion
 | 
					GPIOLIB conversion
 | 
				
			||||||
------------------
 | 
					------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you need to convert your board or driver to use gpiolib from the exiting
 | 
					If you need to convert your board or driver to use gpiolib from the phased
 | 
				
			||||||
s3c2410 api, then here are some notes on the process.
 | 
					out s3c2410 API, then here are some notes on the process.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1) If your board is exclusively using an GPIO, say to control peripheral
 | 
					1) If your board is exclusively using an GPIO, say to control peripheral
 | 
				
			||||||
   power, then it will require to claim the gpio with gpio_request() before
 | 
					   power, then it will require to claim the gpio with gpio_request() before
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ s3c2410 api, then here are some notes on the process.
 | 
				
			||||||
   as they have the same arguments, and can either take the pin specific
 | 
					   as they have the same arguments, and can either take the pin specific
 | 
				
			||||||
   values, or the more generic special-function-number arguments.
 | 
					   values, or the more generic special-function-number arguments.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
3) s3c2410_gpio_pullup() changs have the problem that whilst the 
 | 
					3) s3c2410_gpio_pullup() changes have the problem that whilst the
 | 
				
			||||||
   s3c2410_gpio_pullup(x, 1) can be easily translated to the
 | 
					   s3c2410_gpio_pullup(x, 1) can be easily translated to the
 | 
				
			||||||
   s3c_gpio_setpull(x, S3C_GPIO_PULL_NONE), the s3c2410_gpio_pullup(x, 0)
 | 
					   s3c_gpio_setpull(x, S3C_GPIO_PULL_NONE), the s3c2410_gpio_pullup(x, 0)
 | 
				
			||||||
   are not so easy.
 | 
					   are not so easy.
 | 
				
			||||||
| 
						 | 
					@ -74,7 +74,7 @@ s3c2410 api, then here are some notes on the process.
 | 
				
			||||||
   when using gpio_get_value() on an output pin (s3c2410_gpio_getpin
 | 
					   when using gpio_get_value() on an output pin (s3c2410_gpio_getpin
 | 
				
			||||||
   would return the value the pin is supposed to be outputting).
 | 
					   would return the value the pin is supposed to be outputting).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
6) s3c2410_gpio_getirq() should be directly replacable with the
 | 
					6) s3c2410_gpio_getirq() should be directly replaceable with the
 | 
				
			||||||
   gpio_to_irq() call.
 | 
					   gpio_to_irq() call.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The s3c2410_gpio and gpio_ calls have always operated on the same gpio
 | 
					The s3c2410_gpio and gpio_ calls have always operated on the same gpio
 | 
				
			||||||
| 
						 | 
					@ -105,7 +105,7 @@ PIN Numbers
 | 
				
			||||||
-----------
 | 
					-----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Each pin has an unique number associated with it in regs-gpio.h,
 | 
					  Each pin has an unique number associated with it in regs-gpio.h,
 | 
				
			||||||
  eg S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell
 | 
					  e.g. S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell
 | 
				
			||||||
  the GPIO functions which pin is to be used.
 | 
					  the GPIO functions which pin is to be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  With the conversion to gpiolib, there is no longer a direct conversion
 | 
					  With the conversion to gpiolib, there is no longer a direct conversion
 | 
				
			||||||
| 
						 | 
					@ -120,31 +120,27 @@ Configuring a pin
 | 
				
			||||||
  The following function allows the configuration of a given pin to
 | 
					  The following function allows the configuration of a given pin to
 | 
				
			||||||
  be changed.
 | 
					  be changed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);
 | 
					    void s3c_gpio_cfgpin(unsigned int pin, unsigned int function);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Eg:
 | 
					  e.g.:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     s3c2410_gpio_cfgpin(S3C2410_GPA(0), S3C2410_GPA0_ADDR0);
 | 
					     s3c_gpio_cfgpin(S3C2410_GPA(0), S3C_GPIO_SFN(1));
 | 
				
			||||||
     s3c2410_gpio_cfgpin(S3C2410_GPE(8), S3C2410_GPE8_SDDAT1);
 | 
					     s3c_gpio_cfgpin(S3C2410_GPE(8), S3C_GPIO_SFN(2));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   which would turn GPA(0) into the lowest Address line A0, and set
 | 
					   which would turn GPA(0) into the lowest Address line A0, and set
 | 
				
			||||||
   GPE(8) to be connected to the SDIO/MMC controller's SDDAT1 line.
 | 
					   GPE(8) to be connected to the SDIO/MMC controller's SDDAT1 line.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   The s3c_gpio_cfgpin() call is a functional replacement for this call.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Reading the current configuration
 | 
					Reading the current configuration
 | 
				
			||||||
---------------------------------
 | 
					---------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  The current configuration of a pin can be read by using:
 | 
					  The current configuration of a pin can be read by using standard
 | 
				
			||||||
 | 
					  gpiolib function:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  s3c2410_gpio_getcfg(unsigned int pin);
 | 
					  s3c_gpio_getcfg(unsigned int pin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  The return value will be from the same set of values which can be
 | 
					  The return value will be from the same set of values which can be
 | 
				
			||||||
  passed to s3c2410_gpio_cfgpin().
 | 
					  passed to s3c_gpio_cfgpin().
 | 
				
			||||||
 | 
					 | 
				
			||||||
  The s3c_gpio_getcfg() call should be a functional replacement for
 | 
					 | 
				
			||||||
  this call.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Configuring a pull-up resistor
 | 
					Configuring a pull-up resistor
 | 
				
			||||||
| 
						 | 
					@ -154,61 +150,33 @@ Configuring a pull-up resistor
 | 
				
			||||||
  pull-up resistors enabled. This can be configured by the following
 | 
					  pull-up resistors enabled. This can be configured by the following
 | 
				
			||||||
  function:
 | 
					  function:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);
 | 
					    void s3c_gpio_setpull(unsigned int pin, unsigned int to);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Where the to value is zero to set the pull-up off, and 1 to enable
 | 
					  Where the to value is S3C_GPIO_PULL_NONE to set the pull-up off,
 | 
				
			||||||
  the specified pull-up. Any other values are currently undefined.
 | 
					  and S3C_GPIO_PULL_UP to enable the specified pull-up. Any other
 | 
				
			||||||
 | 
					  values are currently undefined.
 | 
				
			||||||
  The s3c_gpio_setpull() offers similar functionality, but with the
 | 
					 | 
				
			||||||
  ability to encode whether the pull is up or down. Currently there
 | 
					 | 
				
			||||||
  is no 'just on' state, so up or down must be selected.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Getting the state of a PIN
 | 
					Getting and setting the state of a PIN
 | 
				
			||||||
--------------------------
 | 
					--------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  The state of a pin can be read by using the function:
 | 
					  These calls are now implemented by the relevant gpiolib calls, convert
 | 
				
			||||||
 | 
					 | 
				
			||||||
    unsigned int s3c2410_gpio_getpin(unsigned int pin);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  This will return either zero or non-zero. Do not count on this
 | 
					 | 
				
			||||||
  function returning 1 if the pin is set.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  This call is now implemented by the relevant gpiolib calls, convert
 | 
					 | 
				
			||||||
  your board or driver to use gpiolib.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Setting the state of a PIN
 | 
					 | 
				
			||||||
--------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The value an pin is outputing can be modified by using the following:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Which sets the given pin to the value. Use 0 to write 0, and 1 to
 | 
					 | 
				
			||||||
  set the output to 1.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  This call is now implemented by the relevant gpiolib calls, convert
 | 
					 | 
				
			||||||
  your board or driver to use gpiolib.
 | 
					  your board or driver to use gpiolib.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Getting the IRQ number associated with a PIN
 | 
					Getting the IRQ number associated with a PIN
 | 
				
			||||||
--------------------------------------------
 | 
					--------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  The following function can map the given pin number to an IRQ
 | 
					  A standard gpiolib function can map the given pin number to an IRQ
 | 
				
			||||||
  number to pass to the IRQ system.
 | 
					  number to pass to the IRQ system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   int s3c2410_gpio_getirq(unsigned int pin);
 | 
					   int gpio_to_irq(unsigned int pin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Note, not all pins have an IRQ.
 | 
					  Note, not all pins have an IRQ.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  This call is now implemented by the relevant gpiolib calls, convert
 | 
					 | 
				
			||||||
  your board or driver to use gpiolib.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Author
 | 
				
			||||||
Authour
 | 
					 | 
				
			||||||
-------
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
Ben Dooks, 03 October 2004
 | 
					Ben Dooks, 03 October 2004
 | 
				
			||||||
Copyright 2004 Ben Dooks, Simtec Electronics
 | 
					Copyright 2004 Ben Dooks, Simtec Electronics
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,14 +5,14 @@ Introduction
 | 
				
			||||||
------------
 | 
					------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This outlines the Samsung GPIO implementation and the architecture
 | 
					This outlines the Samsung GPIO implementation and the architecture
 | 
				
			||||||
specific calls provided alongisde the drivers/gpio core.
 | 
					specific calls provided alongside the drivers/gpio core.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
S3C24XX (Legacy)
 | 
					S3C24XX (Legacy)
 | 
				
			||||||
----------------
 | 
					----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See Documentation/arm/Samsung-S3C24XX/GPIO.txt for more information
 | 
					See Documentation/arm/Samsung-S3C24XX/GPIO.txt for more information
 | 
				
			||||||
about these devices. Their implementation is being brought into line
 | 
					about these devices. Their implementation has been brought into line
 | 
				
			||||||
with the core samsung implementation described in this document.
 | 
					with the core samsung implementation described in this document.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@ GPIO numbering is synchronised between the Samsung and gpiolib system.
 | 
				
			||||||
PIN configuration
 | 
					PIN configuration
 | 
				
			||||||
-----------------
 | 
					-----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Pin configuration is specific to the Samsung architecutre, with each SoC
 | 
					Pin configuration is specific to the Samsung architecture, with each SoC
 | 
				
			||||||
registering the necessary information for the core gpio configuration
 | 
					registering the necessary information for the core gpio configuration
 | 
				
			||||||
implementation to configure pins as necessary.
 | 
					implementation to configure pins as necessary.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,5 +38,3 @@ driver or machine to change gpio configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See arch/arm/plat-samsung/include/plat/gpio-cfg.h for more information
 | 
					See arch/arm/plat-samsung/include/plat/gpio-cfg.h for more information
 | 
				
			||||||
on these functions.
 | 
					on these functions.
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,6 +51,9 @@ ffc00000	ffefffff	DMA memory mapping region.  Memory returned
 | 
				
			||||||
ff000000	ffbfffff	Reserved for future expansion of DMA
 | 
					ff000000	ffbfffff	Reserved for future expansion of DMA
 | 
				
			||||||
				mapping region.
 | 
									mapping region.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fee00000	feffffff	Mapping of PCI I/O space. This is a static
 | 
				
			||||||
 | 
									mapping within the vmalloc space.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VMALLOC_START	VMALLOC_END-1	vmalloc() / ioremap() space.
 | 
					VMALLOC_START	VMALLOC_END-1	vmalloc() / ioremap() space.
 | 
				
			||||||
				Memory returned by vmalloc/ioremap will
 | 
									Memory returned by vmalloc/ioremap will
 | 
				
			||||||
				be dynamically placed in this region.
 | 
									be dynamically placed in this region.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,8 +7,12 @@ representation in the device tree should be done as under:-
 | 
				
			||||||
Required properties:
 | 
					Required properties:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- compatible : should be one of
 | 
					- compatible : should be one of
 | 
				
			||||||
 | 
						"arm,cortex-a15-pmu"
 | 
				
			||||||
	"arm,cortex-a9-pmu"
 | 
						"arm,cortex-a9-pmu"
 | 
				
			||||||
	"arm,cortex-a8-pmu"
 | 
						"arm,cortex-a8-pmu"
 | 
				
			||||||
 | 
						"arm,cortex-a7-pmu"
 | 
				
			||||||
 | 
						"arm,cortex-a5-pmu"
 | 
				
			||||||
 | 
						"arm,arm11mpcore-pmu"
 | 
				
			||||||
	"arm,arm1176-pmu"
 | 
						"arm,arm1176-pmu"
 | 
				
			||||||
	"arm,arm1136-pmu"
 | 
						"arm,arm1136-pmu"
 | 
				
			||||||
- interrupts : 1 combined interrupt or 1 per core.
 | 
					- interrupts : 1 combined interrupt or 1 per core.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -595,7 +595,6 @@ M:	Will Deacon <will.deacon@arm.com>
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
F:	arch/arm/kernel/perf_event*
 | 
					F:	arch/arm/kernel/perf_event*
 | 
				
			||||||
F:	arch/arm/oprofile/common.c
 | 
					F:	arch/arm/oprofile/common.c
 | 
				
			||||||
F:	arch/arm/kernel/pmu.c
 | 
					 | 
				
			||||||
F:	arch/arm/include/asm/pmu.h
 | 
					F:	arch/arm/include/asm/pmu.h
 | 
				
			||||||
F:	arch/arm/kernel/hw_breakpoint.c
 | 
					F:	arch/arm/kernel/hw_breakpoint.c
 | 
				
			||||||
F:	arch/arm/include/asm/hw_breakpoint.h
 | 
					F:	arch/arm/include/asm/hw_breakpoint.h
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -279,7 +279,6 @@ config ARCH_INTEGRATOR
 | 
				
			||||||
	select GENERIC_CLOCKEVENTS
 | 
						select GENERIC_CLOCKEVENTS
 | 
				
			||||||
	select PLAT_VERSATILE
 | 
						select PLAT_VERSATILE
 | 
				
			||||||
	select PLAT_VERSATILE_FPGA_IRQ
 | 
						select PLAT_VERSATILE_FPGA_IRQ
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
					 | 
				
			||||||
	select NEED_MACH_MEMORY_H
 | 
						select NEED_MACH_MEMORY_H
 | 
				
			||||||
	select SPARSE_IRQ
 | 
						select SPARSE_IRQ
 | 
				
			||||||
	select MULTI_IRQ_HANDLER
 | 
						select MULTI_IRQ_HANDLER
 | 
				
			||||||
| 
						 | 
					@ -311,7 +310,6 @@ config ARCH_VERSATILE
 | 
				
			||||||
	select ICST
 | 
						select ICST
 | 
				
			||||||
	select GENERIC_CLOCKEVENTS
 | 
						select GENERIC_CLOCKEVENTS
 | 
				
			||||||
	select ARCH_WANT_OPTIONAL_GPIOLIB
 | 
						select ARCH_WANT_OPTIONAL_GPIOLIB
 | 
				
			||||||
	select NEED_MACH_IO_H if PCI
 | 
					 | 
				
			||||||
	select PLAT_VERSATILE
 | 
						select PLAT_VERSATILE
 | 
				
			||||||
	select PLAT_VERSATILE_CLOCK
 | 
						select PLAT_VERSATILE_CLOCK
 | 
				
			||||||
	select PLAT_VERSATILE_CLCD
 | 
						select PLAT_VERSATILE_CLCD
 | 
				
			||||||
| 
						 | 
					@ -406,9 +404,8 @@ config ARCH_GEMINI
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for the Cortina Systems Gemini family SoCs
 | 
						  Support for the Cortina Systems Gemini family SoCs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config ARCH_PRIMA2
 | 
					config ARCH_SIRF
 | 
				
			||||||
	bool "CSR SiRFSoC PRIMA2 ARM Cortex A9 Platform"
 | 
						bool "CSR SiRF"
 | 
				
			||||||
	select CPU_V7
 | 
					 | 
				
			||||||
	select NO_IOPORT
 | 
						select NO_IOPORT
 | 
				
			||||||
	select ARCH_REQUIRE_GPIOLIB
 | 
						select ARCH_REQUIRE_GPIOLIB
 | 
				
			||||||
	select GENERIC_CLOCKEVENTS
 | 
						select GENERIC_CLOCKEVENTS
 | 
				
			||||||
| 
						 | 
					@ -418,9 +415,8 @@ config ARCH_PRIMA2
 | 
				
			||||||
	select PINCTRL
 | 
						select PINCTRL
 | 
				
			||||||
	select PINCTRL_SIRF
 | 
						select PINCTRL_SIRF
 | 
				
			||||||
	select USE_OF
 | 
						select USE_OF
 | 
				
			||||||
	select ZONE_DMA
 | 
					 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
          Support for CSR SiRFSoC ARM Cortex A9 Platform
 | 
						  Support for CSR SiRFprimaII/Marco/Polo platforms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config ARCH_EBSA110
 | 
					config ARCH_EBSA110
 | 
				
			||||||
	bool "EBSA-110"
 | 
						bool "EBSA-110"
 | 
				
			||||||
| 
						 | 
					@ -455,7 +451,7 @@ config ARCH_FOOTBRIDGE
 | 
				
			||||||
	select FOOTBRIDGE
 | 
						select FOOTBRIDGE
 | 
				
			||||||
	select GENERIC_CLOCKEVENTS
 | 
						select GENERIC_CLOCKEVENTS
 | 
				
			||||||
	select HAVE_IDE
 | 
						select HAVE_IDE
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
						select NEED_MACH_IO_H if !MMU
 | 
				
			||||||
	select NEED_MACH_MEMORY_H
 | 
						select NEED_MACH_MEMORY_H
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for systems based on the DC21285 companion chip
 | 
						  Support for systems based on the DC21285 companion chip
 | 
				
			||||||
| 
						 | 
					@ -512,7 +508,6 @@ config ARCH_IOP13XX
 | 
				
			||||||
	select PCI
 | 
						select PCI
 | 
				
			||||||
	select ARCH_SUPPORTS_MSI
 | 
						select ARCH_SUPPORTS_MSI
 | 
				
			||||||
	select VMSPLIT_1G
 | 
						select VMSPLIT_1G
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
					 | 
				
			||||||
	select NEED_MACH_MEMORY_H
 | 
						select NEED_MACH_MEMORY_H
 | 
				
			||||||
	select NEED_RET_TO_USER
 | 
						select NEED_RET_TO_USER
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
| 
						 | 
					@ -522,7 +517,6 @@ config ARCH_IOP32X
 | 
				
			||||||
	bool "IOP32x-based"
 | 
						bool "IOP32x-based"
 | 
				
			||||||
	depends on MMU
 | 
						depends on MMU
 | 
				
			||||||
	select CPU_XSCALE
 | 
						select CPU_XSCALE
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
					 | 
				
			||||||
	select NEED_RET_TO_USER
 | 
						select NEED_RET_TO_USER
 | 
				
			||||||
	select PLAT_IOP
 | 
						select PLAT_IOP
 | 
				
			||||||
	select PCI
 | 
						select PCI
 | 
				
			||||||
| 
						 | 
					@ -535,7 +529,6 @@ config ARCH_IOP33X
 | 
				
			||||||
	bool "IOP33x-based"
 | 
						bool "IOP33x-based"
 | 
				
			||||||
	depends on MMU
 | 
						depends on MMU
 | 
				
			||||||
	select CPU_XSCALE
 | 
						select CPU_XSCALE
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
					 | 
				
			||||||
	select NEED_RET_TO_USER
 | 
						select NEED_RET_TO_USER
 | 
				
			||||||
	select PLAT_IOP
 | 
						select PLAT_IOP
 | 
				
			||||||
	select PCI
 | 
						select PCI
 | 
				
			||||||
| 
						 | 
					@ -575,7 +568,6 @@ config ARCH_DOVE
 | 
				
			||||||
	select PCI
 | 
						select PCI
 | 
				
			||||||
	select ARCH_REQUIRE_GPIOLIB
 | 
						select ARCH_REQUIRE_GPIOLIB
 | 
				
			||||||
	select GENERIC_CLOCKEVENTS
 | 
						select GENERIC_CLOCKEVENTS
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
					 | 
				
			||||||
	select PLAT_ORION
 | 
						select PLAT_ORION
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for the Marvell Dove SoC 88AP510
 | 
						  Support for the Marvell Dove SoC 88AP510
 | 
				
			||||||
| 
						 | 
					@ -586,7 +578,6 @@ config ARCH_KIRKWOOD
 | 
				
			||||||
	select PCI
 | 
						select PCI
 | 
				
			||||||
	select ARCH_REQUIRE_GPIOLIB
 | 
						select ARCH_REQUIRE_GPIOLIB
 | 
				
			||||||
	select GENERIC_CLOCKEVENTS
 | 
						select GENERIC_CLOCKEVENTS
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
					 | 
				
			||||||
	select PLAT_ORION
 | 
						select PLAT_ORION
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for the following Marvell Kirkwood series SoCs:
 | 
						  Support for the following Marvell Kirkwood series SoCs:
 | 
				
			||||||
| 
						 | 
					@ -613,7 +604,6 @@ config ARCH_MV78XX0
 | 
				
			||||||
	select PCI
 | 
						select PCI
 | 
				
			||||||
	select ARCH_REQUIRE_GPIOLIB
 | 
						select ARCH_REQUIRE_GPIOLIB
 | 
				
			||||||
	select GENERIC_CLOCKEVENTS
 | 
						select GENERIC_CLOCKEVENTS
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
					 | 
				
			||||||
	select PLAT_ORION
 | 
						select PLAT_ORION
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for the following Marvell MV78xx0 series SoCs:
 | 
						  Support for the following Marvell MV78xx0 series SoCs:
 | 
				
			||||||
| 
						 | 
					@ -626,7 +616,6 @@ config ARCH_ORION5X
 | 
				
			||||||
	select PCI
 | 
						select PCI
 | 
				
			||||||
	select ARCH_REQUIRE_GPIOLIB
 | 
						select ARCH_REQUIRE_GPIOLIB
 | 
				
			||||||
	select GENERIC_CLOCKEVENTS
 | 
						select GENERIC_CLOCKEVENTS
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
					 | 
				
			||||||
	select PLAT_ORION
 | 
						select PLAT_ORION
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for the following Marvell Orion 5x series SoCs:
 | 
						  Support for the following Marvell Orion 5x series SoCs:
 | 
				
			||||||
| 
						 | 
					@ -651,8 +640,9 @@ config ARCH_KS8695
 | 
				
			||||||
	bool "Micrel/Kendin KS8695"
 | 
						bool "Micrel/Kendin KS8695"
 | 
				
			||||||
	select CPU_ARM922T
 | 
						select CPU_ARM922T
 | 
				
			||||||
	select ARCH_REQUIRE_GPIOLIB
 | 
						select ARCH_REQUIRE_GPIOLIB
 | 
				
			||||||
	select ARCH_USES_GETTIMEOFFSET
 | 
					 | 
				
			||||||
	select NEED_MACH_MEMORY_H
 | 
						select NEED_MACH_MEMORY_H
 | 
				
			||||||
 | 
						select CLKSRC_MMIO
 | 
				
			||||||
 | 
						select GENERIC_CLOCKEVENTS
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based
 | 
						  Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based
 | 
				
			||||||
	  System-on-Chip devices.
 | 
						  System-on-Chip devices.
 | 
				
			||||||
| 
						 | 
					@ -682,7 +672,6 @@ config ARCH_TEGRA
 | 
				
			||||||
	select HAVE_CLK
 | 
						select HAVE_CLK
 | 
				
			||||||
	select HAVE_SMP
 | 
						select HAVE_SMP
 | 
				
			||||||
	select MIGHT_HAVE_CACHE_L2X0
 | 
						select MIGHT_HAVE_CACHE_L2X0
 | 
				
			||||||
	select NEED_MACH_IO_H if PCI
 | 
					 | 
				
			||||||
	select ARCH_HAS_CPUFREQ
 | 
						select ARCH_HAS_CPUFREQ
 | 
				
			||||||
	select USE_OF
 | 
						select USE_OF
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
| 
						 | 
					@ -708,14 +697,6 @@ config ARCH_PICOXCELL
 | 
				
			||||||
	  family of Femtocell devices.  The picoxcell support requires device tree
 | 
						  family of Femtocell devices.  The picoxcell support requires device tree
 | 
				
			||||||
	  for all boards.
 | 
						  for all boards.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config ARCH_PNX4008
 | 
					 | 
				
			||||||
	bool "Philips Nexperia PNX4008 Mobile"
 | 
					 | 
				
			||||||
	select CPU_ARM926T
 | 
					 | 
				
			||||||
	select CLKDEV_LOOKUP
 | 
					 | 
				
			||||||
	select ARCH_USES_GETTIMEOFFSET
 | 
					 | 
				
			||||||
	help
 | 
					 | 
				
			||||||
	  This enables support for Philips PNX4008 mobile platform.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config ARCH_PXA
 | 
					config ARCH_PXA
 | 
				
			||||||
	bool "PXA2xx/PXA3xx-based"
 | 
						bool "PXA2xx/PXA3xx-based"
 | 
				
			||||||
	depends on MMU
 | 
						depends on MMU
 | 
				
			||||||
| 
						 | 
					@ -911,7 +892,6 @@ config ARCH_SHARK
 | 
				
			||||||
	select PCI
 | 
						select PCI
 | 
				
			||||||
	select ARCH_USES_GETTIMEOFFSET
 | 
						select ARCH_USES_GETTIMEOFFSET
 | 
				
			||||||
	select NEED_MACH_MEMORY_H
 | 
						select NEED_MACH_MEMORY_H
 | 
				
			||||||
	select NEED_MACH_IO_H
 | 
					 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for the StrongARM based Digital DNARD machine, also known
 | 
						  Support for the StrongARM based Digital DNARD machine, also known
 | 
				
			||||||
	  as "Shark" (<http://www.shark-linux.de/shark.html>).
 | 
						  as "Shark" (<http://www.shark-linux.de/shark.html>).
 | 
				
			||||||
| 
						 | 
					@ -930,6 +910,7 @@ config ARCH_U300
 | 
				
			||||||
	select COMMON_CLK
 | 
						select COMMON_CLK
 | 
				
			||||||
	select GENERIC_GPIO
 | 
						select GENERIC_GPIO
 | 
				
			||||||
	select ARCH_REQUIRE_GPIOLIB
 | 
						select ARCH_REQUIRE_GPIOLIB
 | 
				
			||||||
 | 
						select SPARSE_IRQ
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for ST-Ericsson U300 series mobile platforms.
 | 
						  Support for ST-Ericsson U300 series mobile platforms.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1117,6 +1098,8 @@ source "arch/arm/mach-exynos/Kconfig"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source "arch/arm/mach-shmobile/Kconfig"
 | 
					source "arch/arm/mach-shmobile/Kconfig"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					source "arch/arm/mach-prima2/Kconfig"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source "arch/arm/mach-tegra/Kconfig"
 | 
					source "arch/arm/mach-tegra/Kconfig"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source "arch/arm/mach-u300/Kconfig"
 | 
					source "arch/arm/mach-u300/Kconfig"
 | 
				
			||||||
| 
						 | 
					@ -1178,12 +1161,6 @@ config XSCALE_PMU
 | 
				
			||||||
	depends on CPU_XSCALE
 | 
						depends on CPU_XSCALE
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CPU_HAS_PMU
 | 
					 | 
				
			||||||
	depends on (CPU_V6 || CPU_V6K || CPU_V7 || XSCALE_PMU) && \
 | 
					 | 
				
			||||||
		   (!ARCH_OMAP3 || OMAP3_EMU)
 | 
					 | 
				
			||||||
	default y
 | 
					 | 
				
			||||||
	bool
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config MULTI_IRQ_HANDLER
 | 
					config MULTI_IRQ_HANDLER
 | 
				
			||||||
	bool
 | 
						bool
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
| 
						 | 
					@ -1756,7 +1733,7 @@ config HIGHPTE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config HW_PERF_EVENTS
 | 
					config HW_PERF_EVENTS
 | 
				
			||||||
	bool "Enable hardware performance counter support for perf events"
 | 
						bool "Enable hardware performance counter support for perf events"
 | 
				
			||||||
	depends on PERF_EVENTS && CPU_HAS_PMU
 | 
						depends on PERF_EVENTS
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Enable hardware performance counter support for perf events. If
 | 
						  Enable hardware performance counter support for perf events. If
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -167,7 +167,6 @@ machine-$(CONFIG_ARCH_OMAP1)		:= omap1
 | 
				
			||||||
machine-$(CONFIG_ARCH_OMAP2PLUS)	:= omap2
 | 
					machine-$(CONFIG_ARCH_OMAP2PLUS)	:= omap2
 | 
				
			||||||
machine-$(CONFIG_ARCH_ORION5X)		:= orion5x
 | 
					machine-$(CONFIG_ARCH_ORION5X)		:= orion5x
 | 
				
			||||||
machine-$(CONFIG_ARCH_PICOXCELL)	:= picoxcell
 | 
					machine-$(CONFIG_ARCH_PICOXCELL)	:= picoxcell
 | 
				
			||||||
machine-$(CONFIG_ARCH_PNX4008)		:= pnx4008
 | 
					 | 
				
			||||||
machine-$(CONFIG_ARCH_PRIMA2)		:= prima2
 | 
					machine-$(CONFIG_ARCH_PRIMA2)		:= prima2
 | 
				
			||||||
machine-$(CONFIG_ARCH_PXA)		:= pxa
 | 
					machine-$(CONFIG_ARCH_PXA)		:= pxa
 | 
				
			||||||
machine-$(CONFIG_ARCH_REALVIEW)		:= realview
 | 
					machine-$(CONFIG_ARCH_REALVIEW)		:= realview
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@
 | 
				
			||||||
			i2c@1001d000 {
 | 
								i2c@1001d000 {
 | 
				
			||||||
				clock-frequency = <400000>;
 | 
									clock-frequency = <400000>;
 | 
				
			||||||
				status = "okay";
 | 
									status = "okay";
 | 
				
			||||||
				at24@4c {
 | 
									at24@52 {
 | 
				
			||||||
					compatible = "at,24c32";
 | 
										compatible = "at,24c32";
 | 
				
			||||||
					pagesize = <32>;
 | 
										pagesize = <32>;
 | 
				
			||||||
					reg = <0x52>;
 | 
										reg = <0x52>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -275,6 +275,160 @@
 | 
				
			||||||
	i2c@7000d000 {
 | 
						i2c@7000d000 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
		clock-frequency = <400000>;
 | 
							clock-frequency = <400000>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							pmic: tps6586x@34 {
 | 
				
			||||||
 | 
								compatible = "ti,tps6586x";
 | 
				
			||||||
 | 
								reg = <0x34>;
 | 
				
			||||||
 | 
								interrupts = <0 86 0x4>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								ti,system-power-controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								#gpio-cells = <2>;
 | 
				
			||||||
 | 
								gpio-controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sys-supply = <&vdd_5v0_reg>;
 | 
				
			||||||
 | 
								vin-sm0-supply = <&sys_reg>;
 | 
				
			||||||
 | 
								vin-sm1-supply = <&sys_reg>;
 | 
				
			||||||
 | 
								vin-sm2-supply = <&sys_reg>;
 | 
				
			||||||
 | 
								vinldo01-supply = <&sm2_reg>;
 | 
				
			||||||
 | 
								vinldo23-supply = <&sm2_reg>;
 | 
				
			||||||
 | 
								vinldo4-supply = <&sm2_reg>;
 | 
				
			||||||
 | 
								vinldo678-supply = <&sm2_reg>;
 | 
				
			||||||
 | 
								vinldo9-supply = <&sm2_reg>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								regulators {
 | 
				
			||||||
 | 
									#address-cells = <1>;
 | 
				
			||||||
 | 
									#size-cells = <0>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									sys_reg: regulator@0 {
 | 
				
			||||||
 | 
										reg = <0>;
 | 
				
			||||||
 | 
										regulator-compatible = "sys";
 | 
				
			||||||
 | 
										regulator-name = "vdd_sys";
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@1 {
 | 
				
			||||||
 | 
										reg = <1>;
 | 
				
			||||||
 | 
										regulator-compatible = "sm0";
 | 
				
			||||||
 | 
										regulator-name = "vdd_sm0,vdd_core";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <1200000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <1200000>;
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@2 {
 | 
				
			||||||
 | 
										reg = <2>;
 | 
				
			||||||
 | 
										regulator-compatible = "sm1";
 | 
				
			||||||
 | 
										regulator-name = "vdd_sm1,vdd_cpu";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <1000000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <1000000>;
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									sm2_reg: regulator@3 {
 | 
				
			||||||
 | 
										reg = <3>;
 | 
				
			||||||
 | 
										regulator-compatible = "sm2";
 | 
				
			||||||
 | 
										regulator-name = "vdd_sm2,vin_ldo*";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <3700000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <3700000>;
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@4 {
 | 
				
			||||||
 | 
										reg = <4>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo0";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo0,vddio_pex_clk";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <3300000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <3300000>;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@5 {
 | 
				
			||||||
 | 
										reg = <5>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo1";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo1,avdd_pll*";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <1100000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <1100000>;
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@6 {
 | 
				
			||||||
 | 
										reg = <6>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo2";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo2,vdd_rtc";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <1200000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <1200000>;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@7 {
 | 
				
			||||||
 | 
										reg = <7>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo3";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo3,avdd_usb*";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <3300000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <3300000>;
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@8 {
 | 
				
			||||||
 | 
										reg = <8>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo4";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <1800000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <1800000>;
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@9 {
 | 
				
			||||||
 | 
										reg = <9>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo5";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo5,vcore_mmc";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <2850000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <2850000>;
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@10 {
 | 
				
			||||||
 | 
										reg = <10>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo6";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo6,avdd_vdac";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <1800000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <1800000>;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@11 {
 | 
				
			||||||
 | 
										reg = <11>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo7";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo7,avdd_hdmi";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <3300000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <3300000>;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@12 {
 | 
				
			||||||
 | 
										reg = <12>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo8";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo8,avdd_hdmi_pll";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <1800000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <1800000>;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@13 {
 | 
				
			||||||
 | 
										reg = <13>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo9";
 | 
				
			||||||
 | 
										regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <2850000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <2850000>;
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									regulator@14 {
 | 
				
			||||||
 | 
										reg = <14>;
 | 
				
			||||||
 | 
										regulator-compatible = "ldo_rtc";
 | 
				
			||||||
 | 
										regulator-name = "vdd_rtc_out,vdd_cell";
 | 
				
			||||||
 | 
										regulator-min-microvolt = <3300000>;
 | 
				
			||||||
 | 
										regulator-max-microvolt = <3300000>;
 | 
				
			||||||
 | 
										regulator-always-on;
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pmc {
 | 
						pmc {
 | 
				
			||||||
| 
						 | 
					@ -310,6 +464,72 @@
 | 
				
			||||||
		bus-width = <8>;
 | 
							bus-width = <8>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						regulators {
 | 
				
			||||||
 | 
							compatible = "simple-bus";
 | 
				
			||||||
 | 
							#address-cells = <1>;
 | 
				
			||||||
 | 
							#size-cells = <0>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							vdd_5v0_reg: regulator@0 {
 | 
				
			||||||
 | 
								compatible = "regulator-fixed";
 | 
				
			||||||
 | 
								reg = <0>;
 | 
				
			||||||
 | 
								regulator-name = "vdd_5v0";
 | 
				
			||||||
 | 
								regulator-min-microvolt = <5000000>;
 | 
				
			||||||
 | 
								regulator-max-microvolt = <5000000>;
 | 
				
			||||||
 | 
								regulator-always-on;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							regulator@1 {
 | 
				
			||||||
 | 
								compatible = "regulator-fixed";
 | 
				
			||||||
 | 
								reg = <1>;
 | 
				
			||||||
 | 
								regulator-name = "vdd_1v5";
 | 
				
			||||||
 | 
								regulator-min-microvolt = <1500000>;
 | 
				
			||||||
 | 
								regulator-max-microvolt = <1500000>;
 | 
				
			||||||
 | 
								gpio = <&pmic 0 0>;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							regulator@2 {
 | 
				
			||||||
 | 
								compatible = "regulator-fixed";
 | 
				
			||||||
 | 
								reg = <2>;
 | 
				
			||||||
 | 
								regulator-name = "vdd_1v2";
 | 
				
			||||||
 | 
								regulator-min-microvolt = <1200000>;
 | 
				
			||||||
 | 
								regulator-max-microvolt = <1200000>;
 | 
				
			||||||
 | 
								gpio = <&pmic 1 0>;
 | 
				
			||||||
 | 
								enable-active-high;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							regulator@3 {
 | 
				
			||||||
 | 
								compatible = "regulator-fixed";
 | 
				
			||||||
 | 
								reg = <3>;
 | 
				
			||||||
 | 
								regulator-name = "vdd_1v05";
 | 
				
			||||||
 | 
								regulator-min-microvolt = <1050000>;
 | 
				
			||||||
 | 
								regulator-max-microvolt = <1050000>;
 | 
				
			||||||
 | 
								gpio = <&pmic 2 0>;
 | 
				
			||||||
 | 
								enable-active-high;
 | 
				
			||||||
 | 
								/* Hack until board-harmony-pcie.c is removed */
 | 
				
			||||||
 | 
								status = "disabled";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							regulator@4 {
 | 
				
			||||||
 | 
								compatible = "regulator-fixed";
 | 
				
			||||||
 | 
								reg = <4>;
 | 
				
			||||||
 | 
								regulator-name = "vdd_pnl";
 | 
				
			||||||
 | 
								regulator-min-microvolt = <2800000>;
 | 
				
			||||||
 | 
								regulator-max-microvolt = <2800000>;
 | 
				
			||||||
 | 
								gpio = <&gpio 22 0>; /* gpio PC6 */
 | 
				
			||||||
 | 
								enable-active-high;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							regulator@5 {
 | 
				
			||||||
 | 
								compatible = "regulator-fixed";
 | 
				
			||||||
 | 
								reg = <5>;
 | 
				
			||||||
 | 
								regulator-name = "vdd_bl";
 | 
				
			||||||
 | 
								regulator-min-microvolt = <2800000>;
 | 
				
			||||||
 | 
								regulator-max-microvolt = <2800000>;
 | 
				
			||||||
 | 
								gpio = <&gpio 176 0>; /* gpio PW0 */
 | 
				
			||||||
 | 
								enable-active-high;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sound {
 | 
						sound {
 | 
				
			||||||
		compatible = "nvidia,tegra-audio-wm8903-harmony",
 | 
							compatible = "nvidia,tegra-audio-wm8903-harmony",
 | 
				
			||||||
			     "nvidia,tegra-audio-wm8903";
 | 
								     "nvidia,tegra-audio-wm8903";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,472 +0,0 @@
 | 
				
			||||||
CONFIG_EXPERIMENTAL=y
 | 
					 | 
				
			||||||
CONFIG_SYSVIPC=y
 | 
					 | 
				
			||||||
CONFIG_POSIX_MQUEUE=y
 | 
					 | 
				
			||||||
CONFIG_BSD_PROCESS_ACCT=y
 | 
					 | 
				
			||||||
CONFIG_AUDIT=y
 | 
					 | 
				
			||||||
CONFIG_LOG_BUF_SHIFT=14
 | 
					 | 
				
			||||||
CONFIG_BLK_DEV_INITRD=y
 | 
					 | 
				
			||||||
CONFIG_EXPERT=y
 | 
					 | 
				
			||||||
CONFIG_SLAB=y
 | 
					 | 
				
			||||||
CONFIG_MODULES=y
 | 
					 | 
				
			||||||
CONFIG_MODULE_UNLOAD=y
 | 
					 | 
				
			||||||
CONFIG_MODULE_FORCE_UNLOAD=y
 | 
					 | 
				
			||||||
CONFIG_MODVERSIONS=y
 | 
					 | 
				
			||||||
CONFIG_MODULE_SRCVERSION_ALL=y
 | 
					 | 
				
			||||||
CONFIG_ARCH_PNX4008=y
 | 
					 | 
				
			||||||
CONFIG_PREEMPT=y
 | 
					 | 
				
			||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
 | 
					 | 
				
			||||||
CONFIG_ZBOOT_ROM_BSS=0x0
 | 
					 | 
				
			||||||
CONFIG_CMDLINE="mem=64M console=ttyS0,115200"
 | 
					 | 
				
			||||||
CONFIG_FPE_NWFPE=y
 | 
					 | 
				
			||||||
CONFIG_BINFMT_AOUT=m
 | 
					 | 
				
			||||||
CONFIG_BINFMT_MISC=m
 | 
					 | 
				
			||||||
CONFIG_PM=y
 | 
					 | 
				
			||||||
CONFIG_PACKET=y
 | 
					 | 
				
			||||||
CONFIG_UNIX=y
 | 
					 | 
				
			||||||
CONFIG_INET=y
 | 
					 | 
				
			||||||
CONFIG_IP_MULTICAST=y
 | 
					 | 
				
			||||||
CONFIG_IP_ADVANCED_ROUTER=y
 | 
					 | 
				
			||||||
CONFIG_IP_MULTIPLE_TABLES=y
 | 
					 | 
				
			||||||
CONFIG_IP_ROUTE_MULTIPATH=y
 | 
					 | 
				
			||||||
CONFIG_IP_ROUTE_VERBOSE=y
 | 
					 | 
				
			||||||
CONFIG_IP_PNP=y
 | 
					 | 
				
			||||||
CONFIG_IP_PNP_DHCP=y
 | 
					 | 
				
			||||||
CONFIG_IP_PNP_BOOTP=y
 | 
					 | 
				
			||||||
CONFIG_IP_MROUTE=y
 | 
					 | 
				
			||||||
CONFIG_IP_PIMSM_V1=y
 | 
					 | 
				
			||||||
CONFIG_IP_PIMSM_V2=y
 | 
					 | 
				
			||||||
CONFIG_SYN_COOKIES=y
 | 
					 | 
				
			||||||
CONFIG_INET_AH=m
 | 
					 | 
				
			||||||
CONFIG_INET_ESP=m
 | 
					 | 
				
			||||||
CONFIG_INET_IPCOMP=m
 | 
					 | 
				
			||||||
CONFIG_IPV6_PRIVACY=y
 | 
					 | 
				
			||||||
CONFIG_INET6_AH=m
 | 
					 | 
				
			||||||
CONFIG_INET6_ESP=m
 | 
					 | 
				
			||||||
CONFIG_INET6_IPCOMP=m
 | 
					 | 
				
			||||||
CONFIG_IPV6_TUNNEL=m
 | 
					 | 
				
			||||||
CONFIG_NETFILTER=y
 | 
					 | 
				
			||||||
CONFIG_IP_VS=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_PROTO_TCP=y
 | 
					 | 
				
			||||||
CONFIG_IP_VS_PROTO_UDP=y
 | 
					 | 
				
			||||||
CONFIG_IP_VS_PROTO_ESP=y
 | 
					 | 
				
			||||||
CONFIG_IP_VS_PROTO_AH=y
 | 
					 | 
				
			||||||
CONFIG_IP_VS_RR=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_WRR=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_LC=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_WLC=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_LBLC=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_LBLCR=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_DH=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_SH=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_SED=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_NQ=m
 | 
					 | 
				
			||||||
CONFIG_IP_VS_FTP=m
 | 
					 | 
				
			||||||
CONFIG_IP_NF_QUEUE=m
 | 
					 | 
				
			||||||
CONFIG_IP6_NF_QUEUE=m
 | 
					 | 
				
			||||||
CONFIG_DECNET_NF_GRABULATOR=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_NF_EBTABLES=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_BROUTE=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_T_FILTER=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_T_NAT=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_802_3=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_AMONG=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_ARP=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_IP=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_LIMIT=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_MARK=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_PKTTYPE=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_STP=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_VLAN=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_ARPREPLY=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_DNAT=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_MARK_T=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_REDIRECT=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_SNAT=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE_EBT_LOG=m
 | 
					 | 
				
			||||||
CONFIG_IP_SCTP=m
 | 
					 | 
				
			||||||
CONFIG_ATM=y
 | 
					 | 
				
			||||||
CONFIG_ATM_CLIP=y
 | 
					 | 
				
			||||||
CONFIG_ATM_LANE=m
 | 
					 | 
				
			||||||
CONFIG_ATM_MPOA=m
 | 
					 | 
				
			||||||
CONFIG_ATM_BR2684=m
 | 
					 | 
				
			||||||
CONFIG_BRIDGE=m
 | 
					 | 
				
			||||||
CONFIG_VLAN_8021Q=m
 | 
					 | 
				
			||||||
CONFIG_DECNET=m
 | 
					 | 
				
			||||||
CONFIG_LLC2=m
 | 
					 | 
				
			||||||
CONFIG_IPX=m
 | 
					 | 
				
			||||||
CONFIG_ATALK=m
 | 
					 | 
				
			||||||
CONFIG_DEV_APPLETALK=m
 | 
					 | 
				
			||||||
CONFIG_IPDDP=m
 | 
					 | 
				
			||||||
CONFIG_IPDDP_ENCAP=y
 | 
					 | 
				
			||||||
CONFIG_IPDDP_DECAP=y
 | 
					 | 
				
			||||||
CONFIG_X25=m
 | 
					 | 
				
			||||||
CONFIG_LAPB=m
 | 
					 | 
				
			||||||
CONFIG_ECONET=m
 | 
					 | 
				
			||||||
CONFIG_ECONET_AUNUDP=y
 | 
					 | 
				
			||||||
CONFIG_ECONET_NATIVE=y
 | 
					 | 
				
			||||||
CONFIG_WAN_ROUTER=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCHED=y
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_CBQ=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_HTB=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_HFSC=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_ATM=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_PRIO=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_RED=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_SFQ=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_TEQL=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_TBF=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_GRED=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_DSMARK=m
 | 
					 | 
				
			||||||
CONFIG_NET_SCH_NETEM=m
 | 
					 | 
				
			||||||
CONFIG_NET_CLS_TCINDEX=m
 | 
					 | 
				
			||||||
CONFIG_NET_CLS_ROUTE4=m
 | 
					 | 
				
			||||||
CONFIG_NET_CLS_FW=m
 | 
					 | 
				
			||||||
CONFIG_NET_CLS_U32=m
 | 
					 | 
				
			||||||
CONFIG_NET_CLS_RSVP=m
 | 
					 | 
				
			||||||
CONFIG_NET_CLS_RSVP6=m
 | 
					 | 
				
			||||||
CONFIG_NET_PKTGEN=m
 | 
					 | 
				
			||||||
CONFIG_MTD=y
 | 
					 | 
				
			||||||
CONFIG_MTD_CONCAT=y
 | 
					 | 
				
			||||||
CONFIG_MTD_PARTITIONS=y
 | 
					 | 
				
			||||||
CONFIG_MTD_REDBOOT_PARTS=y
 | 
					 | 
				
			||||||
CONFIG_MTD_CHAR=y
 | 
					 | 
				
			||||||
CONFIG_MTD_BLOCK=y
 | 
					 | 
				
			||||||
CONFIG_MTD_SLRAM=m
 | 
					 | 
				
			||||||
CONFIG_MTD_PHRAM=m
 | 
					 | 
				
			||||||
CONFIG_MTD_MTDRAM=m
 | 
					 | 
				
			||||||
CONFIG_MTD_DOC2000=m
 | 
					 | 
				
			||||||
CONFIG_MTD_DOC2001=m
 | 
					 | 
				
			||||||
CONFIG_MTD_DOC2001PLUS=m
 | 
					 | 
				
			||||||
CONFIG_MTD_NAND=y
 | 
					 | 
				
			||||||
CONFIG_MTD_NAND_NANDSIM=m
 | 
					 | 
				
			||||||
CONFIG_BLK_DEV_LOOP=y
 | 
					 | 
				
			||||||
CONFIG_BLK_DEV_CRYPTOLOOP=y
 | 
					 | 
				
			||||||
CONFIG_BLK_DEV_NBD=y
 | 
					 | 
				
			||||||
CONFIG_BLK_DEV_RAM=y
 | 
					 | 
				
			||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
 | 
					 | 
				
			||||||
CONFIG_CDROM_PKTCDVD=m
 | 
					 | 
				
			||||||
CONFIG_EEPROM_LEGACY=m
 | 
					 | 
				
			||||||
CONFIG_SCSI=m
 | 
					 | 
				
			||||||
CONFIG_BLK_DEV_SD=m
 | 
					 | 
				
			||||||
CONFIG_CHR_DEV_ST=m
 | 
					 | 
				
			||||||
CONFIG_CHR_DEV_OSST=m
 | 
					 | 
				
			||||||
CONFIG_BLK_DEV_SR=m
 | 
					 | 
				
			||||||
CONFIG_CHR_DEV_SG=m
 | 
					 | 
				
			||||||
CONFIG_CHR_DEV_SCH=m
 | 
					 | 
				
			||||||
CONFIG_SCSI_MULTI_LUN=y
 | 
					 | 
				
			||||||
CONFIG_SCSI_CONSTANTS=y
 | 
					 | 
				
			||||||
CONFIG_SCSI_LOGGING=y
 | 
					 | 
				
			||||||
CONFIG_SCSI_SPI_ATTRS=m
 | 
					 | 
				
			||||||
CONFIG_SCSI_FC_ATTRS=m
 | 
					 | 
				
			||||||
CONFIG_SCSI_DEBUG=m
 | 
					 | 
				
			||||||
CONFIG_NETDEVICES=y
 | 
					 | 
				
			||||||
CONFIG_DUMMY=m
 | 
					 | 
				
			||||||
CONFIG_BONDING=m
 | 
					 | 
				
			||||||
CONFIG_EQUALIZER=m
 | 
					 | 
				
			||||||
CONFIG_TUN=m
 | 
					 | 
				
			||||||
CONFIG_NET_ETHERNET=y
 | 
					 | 
				
			||||||
CONFIG_USB_CATC=m
 | 
					 | 
				
			||||||
CONFIG_USB_KAWETH=m
 | 
					 | 
				
			||||||
CONFIG_USB_PEGASUS=m
 | 
					 | 
				
			||||||
CONFIG_USB_RTL8150=m
 | 
					 | 
				
			||||||
CONFIG_USB_USBNET=m
 | 
					 | 
				
			||||||
# CONFIG_USB_NET_CDC_SUBSET is not set
 | 
					 | 
				
			||||||
CONFIG_WAN=y
 | 
					 | 
				
			||||||
CONFIG_HDLC=m
 | 
					 | 
				
			||||||
CONFIG_HDLC_RAW=m
 | 
					 | 
				
			||||||
CONFIG_HDLC_RAW_ETH=m
 | 
					 | 
				
			||||||
CONFIG_HDLC_CISCO=m
 | 
					 | 
				
			||||||
CONFIG_HDLC_FR=m
 | 
					 | 
				
			||||||
CONFIG_HDLC_PPP=m
 | 
					 | 
				
			||||||
CONFIG_HDLC_X25=m
 | 
					 | 
				
			||||||
CONFIG_DLCI=m
 | 
					 | 
				
			||||||
CONFIG_WAN_ROUTER_DRIVERS=m
 | 
					 | 
				
			||||||
CONFIG_LAPBETHER=m
 | 
					 | 
				
			||||||
CONFIG_X25_ASY=m
 | 
					 | 
				
			||||||
CONFIG_ATM_TCP=m
 | 
					 | 
				
			||||||
CONFIG_PPP=m
 | 
					 | 
				
			||||||
CONFIG_PPP_MULTILINK=y
 | 
					 | 
				
			||||||
CONFIG_PPP_FILTER=y
 | 
					 | 
				
			||||||
CONFIG_PPP_ASYNC=m
 | 
					 | 
				
			||||||
CONFIG_PPP_SYNC_TTY=m
 | 
					 | 
				
			||||||
CONFIG_PPP_DEFLATE=m
 | 
					 | 
				
			||||||
CONFIG_PPP_BSDCOMP=m
 | 
					 | 
				
			||||||
CONFIG_PPP_MPPE=m
 | 
					 | 
				
			||||||
CONFIG_PPPOE=m
 | 
					 | 
				
			||||||
CONFIG_PPPOATM=m
 | 
					 | 
				
			||||||
CONFIG_SLIP=m
 | 
					 | 
				
			||||||
CONFIG_SLIP_COMPRESSED=y
 | 
					 | 
				
			||||||
CONFIG_SLIP_SMART=y
 | 
					 | 
				
			||||||
CONFIG_SLIP_MODE_SLIP6=y
 | 
					 | 
				
			||||||
CONFIG_NETCONSOLE=m
 | 
					 | 
				
			||||||
# CONFIG_INPUT_MOUSEDEV is not set
 | 
					 | 
				
			||||||
CONFIG_INPUT_JOYDEV=m
 | 
					 | 
				
			||||||
CONFIG_INPUT_EVDEV=m
 | 
					 | 
				
			||||||
CONFIG_INPUT_EVBUG=m
 | 
					 | 
				
			||||||
CONFIG_KEYBOARD_LKKBD=m
 | 
					 | 
				
			||||||
CONFIG_KEYBOARD_NEWTON=m
 | 
					 | 
				
			||||||
CONFIG_KEYBOARD_SUNKBD=m
 | 
					 | 
				
			||||||
CONFIG_KEYBOARD_XTKBD=m
 | 
					 | 
				
			||||||
CONFIG_MOUSE_PS2=m
 | 
					 | 
				
			||||||
CONFIG_MOUSE_SERIAL=m
 | 
					 | 
				
			||||||
CONFIG_MOUSE_VSXXXAA=m
 | 
					 | 
				
			||||||
CONFIG_INPUT_JOYSTICK=y
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_ANALOG=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_A3D=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_ADI=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_COBRA=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_GF2K=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_GRIP=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_GRIP_MP=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_GUILLEMOT=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_INTERACT=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_SIDEWINDER=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_TMDC=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_IFORCE=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_IFORCE_USB=y
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_IFORCE_232=y
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_WARRIOR=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_MAGELLAN=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_SPACEORB=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_SPACEBALL=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_STINGER=m
 | 
					 | 
				
			||||||
CONFIG_JOYSTICK_JOYDUMP=m
 | 
					 | 
				
			||||||
CONFIG_INPUT_TOUCHSCREEN=y
 | 
					 | 
				
			||||||
CONFIG_TOUCHSCREEN_GUNZE=m
 | 
					 | 
				
			||||||
CONFIG_INPUT_MISC=y
 | 
					 | 
				
			||||||
CONFIG_INPUT_UINPUT=m
 | 
					 | 
				
			||||||
CONFIG_SERIO_SERPORT=m
 | 
					 | 
				
			||||||
CONFIG_SERIO_RAW=m
 | 
					 | 
				
			||||||
CONFIG_GAMEPORT_NS558=m
 | 
					 | 
				
			||||||
CONFIG_GAMEPORT_L4=m
 | 
					 | 
				
			||||||
CONFIG_SERIAL_8250=y
 | 
					 | 
				
			||||||
CONFIG_SERIAL_8250_CONSOLE=y
 | 
					 | 
				
			||||||
CONFIG_SERIAL_8250_EXTENDED=y
 | 
					 | 
				
			||||||
CONFIG_SERIAL_8250_MANY_PORTS=y
 | 
					 | 
				
			||||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
 | 
					 | 
				
			||||||
CONFIG_SERIAL_8250_RSA=y
 | 
					 | 
				
			||||||
CONFIG_HW_RANDOM=y
 | 
					 | 
				
			||||||
CONFIG_I2C=y
 | 
					 | 
				
			||||||
CONFIG_I2C_CHARDEV=y
 | 
					 | 
				
			||||||
CONFIG_SPI=y
 | 
					 | 
				
			||||||
CONFIG_SPI_BITBANG=y
 | 
					 | 
				
			||||||
# CONFIG_HWMON is not set
 | 
					 | 
				
			||||||
CONFIG_WATCHDOG=y
 | 
					 | 
				
			||||||
CONFIG_SOFT_WATCHDOG=m
 | 
					 | 
				
			||||||
CONFIG_USBPCWATCHDOG=m
 | 
					 | 
				
			||||||
# CONFIG_VGA_CONSOLE is not set
 | 
					 | 
				
			||||||
CONFIG_SOUND=m
 | 
					 | 
				
			||||||
CONFIG_SND=m
 | 
					 | 
				
			||||||
CONFIG_SND_SEQUENCER=m
 | 
					 | 
				
			||||||
CONFIG_SND_SEQ_DUMMY=m
 | 
					 | 
				
			||||||
CONFIG_SND_MIXER_OSS=m
 | 
					 | 
				
			||||||
CONFIG_SND_PCM_OSS=m
 | 
					 | 
				
			||||||
CONFIG_SND_SEQUENCER_OSS=y
 | 
					 | 
				
			||||||
CONFIG_SND_DUMMY=m
 | 
					 | 
				
			||||||
CONFIG_SND_VIRMIDI=m
 | 
					 | 
				
			||||||
CONFIG_SND_MTPAV=m
 | 
					 | 
				
			||||||
CONFIG_SND_SERIAL_U16550=m
 | 
					 | 
				
			||||||
CONFIG_SND_MPU401=m
 | 
					 | 
				
			||||||
CONFIG_SND_USB_AUDIO=m
 | 
					 | 
				
			||||||
CONFIG_SOUND_PRIME=m
 | 
					 | 
				
			||||||
CONFIG_USB_HID=m
 | 
					 | 
				
			||||||
CONFIG_USB_HIDDEV=y
 | 
					 | 
				
			||||||
CONFIG_USB_KBD=m
 | 
					 | 
				
			||||||
CONFIG_USB_MOUSE=m
 | 
					 | 
				
			||||||
CONFIG_USB=y
 | 
					 | 
				
			||||||
CONFIG_USB_DEVICEFS=y
 | 
					 | 
				
			||||||
CONFIG_USB_MON=y
 | 
					 | 
				
			||||||
CONFIG_USB_SL811_HCD=m
 | 
					 | 
				
			||||||
CONFIG_USB_ACM=m
 | 
					 | 
				
			||||||
CONFIG_USB_PRINTER=m
 | 
					 | 
				
			||||||
CONFIG_USB_STORAGE=m
 | 
					 | 
				
			||||||
CONFIG_USB_STORAGE_DATAFAB=m
 | 
					 | 
				
			||||||
CONFIG_USB_STORAGE_FREECOM=m
 | 
					 | 
				
			||||||
CONFIG_USB_STORAGE_USBAT=m
 | 
					 | 
				
			||||||
CONFIG_USB_STORAGE_SDDR09=m
 | 
					 | 
				
			||||||
CONFIG_USB_STORAGE_SDDR55=m
 | 
					 | 
				
			||||||
CONFIG_USB_STORAGE_JUMPSHOT=m
 | 
					 | 
				
			||||||
CONFIG_USB_MDC800=m
 | 
					 | 
				
			||||||
CONFIG_USB_MICROTEK=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_GENERIC=y
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_BELKIN=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_WHITEHEAT=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_CYPRESS_M8=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_EMPEG=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_FTDI_SIO=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_VISOR=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_IPAQ=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_IR=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_EDGEPORT=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_EDGEPORT_TI=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_IPW=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_KEYSPAN=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_KLSI=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_KOBIL_SCT=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_MCT_U232=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_PL2303=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_SAFE=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_CYBERJACK=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_XIRCOM=m
 | 
					 | 
				
			||||||
CONFIG_USB_SERIAL_OMNINET=m
 | 
					 | 
				
			||||||
CONFIG_USB_RIO500=m
 | 
					 | 
				
			||||||
CONFIG_USB_LEGOTOWER=m
 | 
					 | 
				
			||||||
CONFIG_USB_LCD=m
 | 
					 | 
				
			||||||
CONFIG_USB_LED=m
 | 
					 | 
				
			||||||
CONFIG_USB_CYTHERM=m
 | 
					 | 
				
			||||||
CONFIG_USB_TEST=m
 | 
					 | 
				
			||||||
CONFIG_USB_ATM=m
 | 
					 | 
				
			||||||
CONFIG_USB_SPEEDTOUCH=m
 | 
					 | 
				
			||||||
CONFIG_USB_GADGET=m
 | 
					 | 
				
			||||||
CONFIG_USB_GADGET_DUMMY_HCD=y
 | 
					 | 
				
			||||||
CONFIG_USB_ZERO=m
 | 
					 | 
				
			||||||
CONFIG_USB_ETH=m
 | 
					 | 
				
			||||||
CONFIG_USB_GADGETFS=m
 | 
					 | 
				
			||||||
CONFIG_USB_FILE_STORAGE=m
 | 
					 | 
				
			||||||
CONFIG_USB_G_SERIAL=m
 | 
					 | 
				
			||||||
CONFIG_MMC=m
 | 
					 | 
				
			||||||
CONFIG_EXT2_FS=y
 | 
					 | 
				
			||||||
CONFIG_EXT2_FS_XATTR=y
 | 
					 | 
				
			||||||
CONFIG_EXT2_FS_POSIX_ACL=y
 | 
					 | 
				
			||||||
CONFIG_EXT2_FS_SECURITY=y
 | 
					 | 
				
			||||||
CONFIG_EXT3_FS=m
 | 
					 | 
				
			||||||
CONFIG_EXT3_FS_POSIX_ACL=y
 | 
					 | 
				
			||||||
CONFIG_EXT3_FS_SECURITY=y
 | 
					 | 
				
			||||||
CONFIG_REISERFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_REISERFS_FS_XATTR=y
 | 
					 | 
				
			||||||
CONFIG_REISERFS_FS_POSIX_ACL=y
 | 
					 | 
				
			||||||
CONFIG_REISERFS_FS_SECURITY=y
 | 
					 | 
				
			||||||
CONFIG_JFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_JFS_POSIX_ACL=y
 | 
					 | 
				
			||||||
CONFIG_JFS_STATISTICS=y
 | 
					 | 
				
			||||||
CONFIG_XFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_XFS_QUOTA=y
 | 
					 | 
				
			||||||
CONFIG_XFS_POSIX_ACL=y
 | 
					 | 
				
			||||||
CONFIG_XFS_RT=y
 | 
					 | 
				
			||||||
CONFIG_INOTIFY=y
 | 
					 | 
				
			||||||
CONFIG_QUOTA=y
 | 
					 | 
				
			||||||
CONFIG_QFMT_V1=m
 | 
					 | 
				
			||||||
CONFIG_QFMT_V2=m
 | 
					 | 
				
			||||||
CONFIG_AUTOFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_AUTOFS4_FS=m
 | 
					 | 
				
			||||||
CONFIG_ISO9660_FS=m
 | 
					 | 
				
			||||||
CONFIG_JOLIET=y
 | 
					 | 
				
			||||||
CONFIG_ZISOFS=y
 | 
					 | 
				
			||||||
CONFIG_UDF_FS=m
 | 
					 | 
				
			||||||
CONFIG_MSDOS_FS=m
 | 
					 | 
				
			||||||
CONFIG_VFAT_FS=m
 | 
					 | 
				
			||||||
CONFIG_NTFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_TMPFS=y
 | 
					 | 
				
			||||||
CONFIG_ADFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_AFFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_HFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_HFSPLUS_FS=m
 | 
					 | 
				
			||||||
CONFIG_BEFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_BFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_EFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_JFFS2_FS=m
 | 
					 | 
				
			||||||
CONFIG_CRAMFS=y
 | 
					 | 
				
			||||||
CONFIG_VXFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_MINIX_FS=m
 | 
					 | 
				
			||||||
CONFIG_HPFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_QNX4FS_FS=m
 | 
					 | 
				
			||||||
CONFIG_ROMFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_SYSV_FS=m
 | 
					 | 
				
			||||||
CONFIG_UFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_NFS_FS=y
 | 
					 | 
				
			||||||
CONFIG_NFS_V3=y
 | 
					 | 
				
			||||||
CONFIG_NFS_V4=y
 | 
					 | 
				
			||||||
CONFIG_ROOT_NFS=y
 | 
					 | 
				
			||||||
CONFIG_NFSD=m
 | 
					 | 
				
			||||||
CONFIG_NFSD_V4=y
 | 
					 | 
				
			||||||
CONFIG_RPCSEC_GSS_SPKM3=m
 | 
					 | 
				
			||||||
CONFIG_SMB_FS=m
 | 
					 | 
				
			||||||
CONFIG_CIFS=m
 | 
					 | 
				
			||||||
CONFIG_NCP_FS=m
 | 
					 | 
				
			||||||
CONFIG_NCPFS_PACKET_SIGNING=y
 | 
					 | 
				
			||||||
CONFIG_NCPFS_IOCTL_LOCKING=y
 | 
					 | 
				
			||||||
CONFIG_NCPFS_STRONG=y
 | 
					 | 
				
			||||||
CONFIG_NCPFS_NFS_NS=y
 | 
					 | 
				
			||||||
CONFIG_NCPFS_OS2_NS=y
 | 
					 | 
				
			||||||
CONFIG_NCPFS_NLS=y
 | 
					 | 
				
			||||||
CONFIG_NCPFS_EXTRAS=y
 | 
					 | 
				
			||||||
CONFIG_CODA_FS=m
 | 
					 | 
				
			||||||
CONFIG_AFS_FS=m
 | 
					 | 
				
			||||||
CONFIG_PARTITION_ADVANCED=y
 | 
					 | 
				
			||||||
CONFIG_ACORN_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_ACORN_PARTITION_ICS=y
 | 
					 | 
				
			||||||
CONFIG_ACORN_PARTITION_RISCIX=y
 | 
					 | 
				
			||||||
CONFIG_OSF_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_AMIGA_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_ATARI_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_MAC_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_BSD_DISKLABEL=y
 | 
					 | 
				
			||||||
CONFIG_MINIX_SUBPARTITION=y
 | 
					 | 
				
			||||||
CONFIG_SOLARIS_X86_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_UNIXWARE_DISKLABEL=y
 | 
					 | 
				
			||||||
CONFIG_LDM_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_SGI_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_ULTRIX_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_SUN_PARTITION=y
 | 
					 | 
				
			||||||
CONFIG_NLS_DEFAULT="cp437"
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_437=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_737=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_775=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_850=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_852=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_855=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_857=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_860=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_861=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_862=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_863=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_864=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_865=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_866=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_869=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_936=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_950=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_932=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_949=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_874=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_8=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_1250=m
 | 
					 | 
				
			||||||
CONFIG_NLS_CODEPAGE_1251=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ASCII=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_1=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_2=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_3=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_4=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_5=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_6=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_7=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_9=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_13=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_14=m
 | 
					 | 
				
			||||||
CONFIG_NLS_ISO8859_15=m
 | 
					 | 
				
			||||||
CONFIG_NLS_KOI8_R=m
 | 
					 | 
				
			||||||
CONFIG_NLS_KOI8_U=m
 | 
					 | 
				
			||||||
CONFIG_MAGIC_SYSRQ=y
 | 
					 | 
				
			||||||
CONFIG_DEBUG_KERNEL=y
 | 
					 | 
				
			||||||
CONFIG_DEBUG_MUTEXES=y
 | 
					 | 
				
			||||||
# CONFIG_DEBUG_BUGVERBOSE is not set
 | 
					 | 
				
			||||||
CONFIG_SECURITY=y
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_NULL=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_TEST=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_HMAC=y
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_MD4=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_MICHAEL_MIC=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_SHA256=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_SHA512=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_WP512=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_ANUBIS=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_BLOWFISH=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_CAST6=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_KHAZAD=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_SERPENT=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_TEA=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_TWOFISH=m
 | 
					 | 
				
			||||||
CONFIG_CRC16=m
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,6 @@
 | 
				
			||||||
CONFIG_EXPERIMENTAL=y
 | 
					CONFIG_EXPERIMENTAL=y
 | 
				
			||||||
 | 
					CONFIG_NO_HZ=y
 | 
				
			||||||
 | 
					CONFIG_HIGH_RES_TIMERS=y
 | 
				
			||||||
CONFIG_RELAY=y
 | 
					CONFIG_RELAY=y
 | 
				
			||||||
CONFIG_BLK_DEV_INITRD=y
 | 
					CONFIG_BLK_DEV_INITRD=y
 | 
				
			||||||
CONFIG_KALLSYMS_ALL=y
 | 
					CONFIG_KALLSYMS_ALL=y
 | 
				
			||||||
| 
						 | 
					@ -8,9 +10,7 @@ CONFIG_MODULE_UNLOAD=y
 | 
				
			||||||
CONFIG_PARTITION_ADVANCED=y
 | 
					CONFIG_PARTITION_ADVANCED=y
 | 
				
			||||||
CONFIG_BSD_DISKLABEL=y
 | 
					CONFIG_BSD_DISKLABEL=y
 | 
				
			||||||
CONFIG_SOLARIS_X86_PARTITION=y
 | 
					CONFIG_SOLARIS_X86_PARTITION=y
 | 
				
			||||||
CONFIG_ARCH_PRIMA2=y
 | 
					CONFIG_ARCH_SIRF=y
 | 
				
			||||||
CONFIG_NO_HZ=y
 | 
					 | 
				
			||||||
CONFIG_HIGH_RES_TIMERS=y
 | 
					 | 
				
			||||||
CONFIG_PREEMPT=y
 | 
					CONFIG_PREEMPT=y
 | 
				
			||||||
CONFIG_AEABI=y
 | 
					CONFIG_AEABI=y
 | 
				
			||||||
CONFIG_KEXEC=y
 | 
					CONFIG_KEXEC=y
 | 
				
			||||||
| 
						 | 
					@ -36,7 +36,6 @@ CONFIG_SPI=y
 | 
				
			||||||
CONFIG_SPI_SIRF=y
 | 
					CONFIG_SPI_SIRF=y
 | 
				
			||||||
CONFIG_SPI_SPIDEV=y
 | 
					CONFIG_SPI_SPIDEV=y
 | 
				
			||||||
# CONFIG_HWMON is not set
 | 
					# CONFIG_HWMON is not set
 | 
				
			||||||
# CONFIG_HID_SUPPORT is not set
 | 
					 | 
				
			||||||
CONFIG_USB_GADGET=y
 | 
					CONFIG_USB_GADGET=y
 | 
				
			||||||
CONFIG_USB_FILE_STORAGE=m
 | 
					CONFIG_USB_FILE_STORAGE=m
 | 
				
			||||||
CONFIG_USB_MASS_STORAGE=m
 | 
					CONFIG_USB_MASS_STORAGE=m
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -145,6 +145,8 @@ CONFIG_MMC_SDHCI_TEGRA=y
 | 
				
			||||||
CONFIG_RTC_CLASS=y
 | 
					CONFIG_RTC_CLASS=y
 | 
				
			||||||
CONFIG_RTC_DRV_EM3027=y
 | 
					CONFIG_RTC_DRV_EM3027=y
 | 
				
			||||||
CONFIG_RTC_DRV_TEGRA=y
 | 
					CONFIG_RTC_DRV_TEGRA=y
 | 
				
			||||||
 | 
					CONFIG_DMADEVICES=y
 | 
				
			||||||
 | 
					CONFIG_TEGRA20_APB_DMA=y
 | 
				
			||||||
CONFIG_STAGING=y
 | 
					CONFIG_STAGING=y
 | 
				
			||||||
CONFIG_SENSORS_ISL29018=y
 | 
					CONFIG_SENSORS_ISL29018=y
 | 
				
			||||||
CONFIG_SENSORS_ISL29028=y
 | 
					CONFIG_SENSORS_ISL29028=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -217,18 +217,8 @@ extern int iop3xx_get_init_atu(void);
 | 
				
			||||||
#define IOP3XX_PCI_LOWER_MEM_PA	0x80000000
 | 
					#define IOP3XX_PCI_LOWER_MEM_PA	0x80000000
 | 
				
			||||||
#define IOP3XX_PCI_MEM_WINDOW_SIZE	0x08000000
 | 
					#define IOP3XX_PCI_MEM_WINDOW_SIZE	0x08000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IOP3XX_PCI_IO_WINDOW_SIZE	0x00010000
 | 
					 | 
				
			||||||
#define IOP3XX_PCI_LOWER_IO_PA		0x90000000
 | 
					#define IOP3XX_PCI_LOWER_IO_PA		0x90000000
 | 
				
			||||||
#define IOP3XX_PCI_LOWER_IO_VA		0xfe000000
 | 
					#define IOP3XX_PCI_LOWER_IO_BA		0x00000000
 | 
				
			||||||
#define IOP3XX_PCI_LOWER_IO_BA		0x90000000
 | 
					 | 
				
			||||||
#define IOP3XX_PCI_UPPER_IO_PA		(IOP3XX_PCI_LOWER_IO_PA +\
 | 
					 | 
				
			||||||
					IOP3XX_PCI_IO_WINDOW_SIZE - 1)
 | 
					 | 
				
			||||||
#define IOP3XX_PCI_UPPER_IO_VA		(IOP3XX_PCI_LOWER_IO_VA +\
 | 
					 | 
				
			||||||
					IOP3XX_PCI_IO_WINDOW_SIZE - 1)
 | 
					 | 
				
			||||||
#define IOP3XX_PCI_IO_PHYS_TO_VIRT(addr) (((u32) (addr) -\
 | 
					 | 
				
			||||||
					IOP3XX_PCI_LOWER_IO_PA) +\
 | 
					 | 
				
			||||||
					IOP3XX_PCI_LOWER_IO_VA)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __ASSEMBLY__
 | 
					#ifndef __ASSEMBLY__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,11 +113,19 @@ static inline void __iomem *__typesafe_io(unsigned long addr)
 | 
				
			||||||
#define __iowmb()		do { } while (0)
 | 
					#define __iowmb()		do { } while (0)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* PCI fixed i/o mapping */
 | 
				
			||||||
 | 
					#define PCI_IO_VIRT_BASE	0xfee00000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int pci_ioremap_io(unsigned int offset, phys_addr_t phys_addr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Now, pick up the machine-defined IO definitions
 | 
					 * Now, pick up the machine-defined IO definitions
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#ifdef CONFIG_NEED_MACH_IO_H
 | 
					#ifdef CONFIG_NEED_MACH_IO_H
 | 
				
			||||||
#include <mach/io.h>
 | 
					#include <mach/io.h>
 | 
				
			||||||
 | 
					#elif defined(CONFIG_PCI)
 | 
				
			||||||
 | 
					#define IO_SPACE_LIMIT	((resource_size_t)0xfffff)
 | 
				
			||||||
 | 
					#define __io(a)		__typesafe_io(PCI_IO_VIRT_BASE + ((a) & IO_SPACE_LIMIT))
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define __io(a)		__typesafe_io((a) & IO_SPACE_LIMIT)
 | 
					#define __io(a)		__typesafe_io((a) & IO_SPACE_LIMIT)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,9 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *  Page table mapping constructs and function prototypes
 | 
					 *  Page table mapping constructs and function prototypes
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#ifndef __ASM_MACH_MAP_H
 | 
				
			||||||
 | 
					#define __ASM_MACH_MAP_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/io.h>
 | 
					#include <asm/io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct map_desc {
 | 
					struct map_desc {
 | 
				
			||||||
| 
						 | 
					@ -34,6 +37,8 @@ struct map_desc {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_MMU
 | 
					#ifdef CONFIG_MMU
 | 
				
			||||||
extern void iotable_init(struct map_desc *, int);
 | 
					extern void iotable_init(struct map_desc *, int);
 | 
				
			||||||
 | 
					extern void vm_reserve_area_early(unsigned long addr, unsigned long size,
 | 
				
			||||||
 | 
									  void *caller);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct mem_type;
 | 
					struct mem_type;
 | 
				
			||||||
extern const struct mem_type *get_mem_type(unsigned int type);
 | 
					extern const struct mem_type *get_mem_type(unsigned int type);
 | 
				
			||||||
| 
						 | 
					@ -44,4 +49,7 @@ extern int ioremap_page(unsigned long virt, unsigned long phys,
 | 
				
			||||||
			const struct mem_type *mtype);
 | 
								const struct mem_type *mtype);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define iotable_init(map,num)	do { } while (0)
 | 
					#define iotable_init(map,num)	do { } while (0)
 | 
				
			||||||
 | 
					#define vm_reserve_area_early(a,s,c)	do { } while (0)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,8 @@
 | 
				
			||||||
#ifndef __ASM_MACH_PCI_H
 | 
					#ifndef __ASM_MACH_PCI_H
 | 
				
			||||||
#define __ASM_MACH_PCI_H
 | 
					#define __ASM_MACH_PCI_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <linux/ioport.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct pci_sys_data;
 | 
					struct pci_sys_data;
 | 
				
			||||||
struct pci_ops;
 | 
					struct pci_ops;
 | 
				
			||||||
struct pci_bus;
 | 
					struct pci_bus;
 | 
				
			||||||
| 
						 | 
					@ -42,6 +44,8 @@ struct pci_sys_data {
 | 
				
			||||||
	unsigned long	io_offset;	/* bus->cpu IO mapping offset		*/
 | 
						unsigned long	io_offset;	/* bus->cpu IO mapping offset		*/
 | 
				
			||||||
	struct pci_bus	*bus;		/* PCI bus				*/
 | 
						struct pci_bus	*bus;		/* PCI bus				*/
 | 
				
			||||||
	struct list_head resources;	/* root bus resources (apertures)       */
 | 
						struct list_head resources;	/* root bus resources (apertures)       */
 | 
				
			||||||
 | 
						struct resource io_res;
 | 
				
			||||||
 | 
						char		io_res_name[12];
 | 
				
			||||||
					/* Bridge swizzling			*/
 | 
										/* Bridge swizzling			*/
 | 
				
			||||||
	u8		(*swizzle)(struct pci_dev *, u8 *);
 | 
						u8		(*swizzle)(struct pci_dev *, u8 *);
 | 
				
			||||||
					/* IRQ mapping				*/
 | 
										/* IRQ mapping				*/
 | 
				
			||||||
| 
						 | 
					@ -54,6 +58,15 @@ struct pci_sys_data {
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void pci_common_init(struct hw_pci *);
 | 
					void pci_common_init(struct hw_pci *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Setup early fixed I/O mapping.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#if defined(CONFIG_PCI)
 | 
				
			||||||
 | 
					extern void pci_map_io_early(unsigned long pfn);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					static inline void pci_map_io_early(unsigned long pfn) {}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * PCI controllers
 | 
					 * PCI controllers
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +12,13 @@
 | 
				
			||||||
#ifndef __ARM_PERF_EVENT_H__
 | 
					#ifndef __ARM_PERF_EVENT_H__
 | 
				
			||||||
#define __ARM_PERF_EVENT_H__
 | 
					#define __ARM_PERF_EVENT_H__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Nothing to see here... */
 | 
					/*
 | 
				
			||||||
 | 
					 * The ARMv7 CPU PMU supports up to 32 event counters.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define ARMPMU_MAX_HWEVENTS		32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define HW_OP_UNSUPPORTED		0xFFFF
 | 
				
			||||||
 | 
					#define C(_x)				PERF_COUNT_HW_CACHE_##_x
 | 
				
			||||||
 | 
					#define CACHE_OP_UNSUPPORTED		0xFFFF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __ARM_PERF_EVENT_H__ */
 | 
					#endif /* __ARM_PERF_EVENT_H__ */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,15 +15,6 @@
 | 
				
			||||||
#include <linux/interrupt.h>
 | 
					#include <linux/interrupt.h>
 | 
				
			||||||
#include <linux/perf_event.h>
 | 
					#include <linux/perf_event.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Types of PMUs that can be accessed directly and require mutual
 | 
					 | 
				
			||||||
 * exclusion between profiling tools.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
enum arm_pmu_type {
 | 
					 | 
				
			||||||
	ARM_PMU_DEVICE_CPU	= 0,
 | 
					 | 
				
			||||||
	ARM_NUM_PMU_DEVICES,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * struct arm_pmu_platdata - ARM PMU platform data
 | 
					 * struct arm_pmu_platdata - ARM PMU platform data
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -31,54 +22,24 @@ enum arm_pmu_type {
 | 
				
			||||||
 *	interrupt and passed the address of the low level handler,
 | 
					 *	interrupt and passed the address of the low level handler,
 | 
				
			||||||
 *	and can be used to implement any platform specific handling
 | 
					 *	and can be used to implement any platform specific handling
 | 
				
			||||||
 *	before or after calling it.
 | 
					 *	before or after calling it.
 | 
				
			||||||
 * @enable_irq: an optional handler which will be called after
 | 
					 * @runtime_resume: an optional handler which will be called by the
 | 
				
			||||||
 *	request_irq and be used to handle some platform specific
 | 
					 *	runtime PM framework following a call to pm_runtime_get().
 | 
				
			||||||
 *	irq enablement
 | 
					 *	Note that if pm_runtime_get() is called more than once in
 | 
				
			||||||
 * @disable_irq: an optional handler which will be called before
 | 
					 *	succession this handler will only be called once.
 | 
				
			||||||
 *	free_irq and be used to handle some platform specific
 | 
					 * @runtime_suspend: an optional handler which will be called by the
 | 
				
			||||||
 *	irq disablement
 | 
					 *	runtime PM framework following a call to pm_runtime_put().
 | 
				
			||||||
 | 
					 *	Note that if pm_runtime_get() is called more than once in
 | 
				
			||||||
 | 
					 *	succession this handler will only be called following the
 | 
				
			||||||
 | 
					 *	final call to pm_runtime_put() that actually disables the
 | 
				
			||||||
 | 
					 *	hardware.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
struct arm_pmu_platdata {
 | 
					struct arm_pmu_platdata {
 | 
				
			||||||
	irqreturn_t (*handle_irq)(int irq, void *dev,
 | 
						irqreturn_t (*handle_irq)(int irq, void *dev,
 | 
				
			||||||
				  irq_handler_t pmu_handler);
 | 
									  irq_handler_t pmu_handler);
 | 
				
			||||||
	void (*enable_irq)(int irq);
 | 
						int (*runtime_resume)(struct device *dev);
 | 
				
			||||||
	void (*disable_irq)(int irq);
 | 
						int (*runtime_suspend)(struct device *dev);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_CPU_HAS_PMU
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * reserve_pmu() - reserve the hardware performance counters
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Reserve the hardware performance counters in the system for exclusive use.
 | 
					 | 
				
			||||||
 * Returns 0 on success or -EBUSY if the lock is already held.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
extern int
 | 
					 | 
				
			||||||
reserve_pmu(enum arm_pmu_type type);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * release_pmu() - Relinquish control of the performance counters
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Release the performance counters and allow someone else to use them.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
extern void
 | 
					 | 
				
			||||||
release_pmu(enum arm_pmu_type type);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#else /* CONFIG_CPU_HAS_PMU */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <linux/err.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline int
 | 
					 | 
				
			||||||
reserve_pmu(enum arm_pmu_type type)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return -ENODEV;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline void
 | 
					 | 
				
			||||||
release_pmu(enum arm_pmu_type type)	{ }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* CONFIG_CPU_HAS_PMU */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef CONFIG_HW_PERF_EVENTS
 | 
					#ifdef CONFIG_HW_PERF_EVENTS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* The events for a given PMU register set. */
 | 
					/* The events for a given PMU register set. */
 | 
				
			||||||
| 
						 | 
					@ -103,7 +64,6 @@ struct pmu_hw_events {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct arm_pmu {
 | 
					struct arm_pmu {
 | 
				
			||||||
	struct pmu	pmu;
 | 
						struct pmu	pmu;
 | 
				
			||||||
	enum arm_pmu_type type;
 | 
					 | 
				
			||||||
	cpumask_t	active_irqs;
 | 
						cpumask_t	active_irqs;
 | 
				
			||||||
	char		*name;
 | 
						char		*name;
 | 
				
			||||||
	irqreturn_t	(*handle_irq)(int irq_num, void *dev);
 | 
						irqreturn_t	(*handle_irq)(int irq_num, void *dev);
 | 
				
			||||||
| 
						 | 
					@ -118,6 +78,8 @@ struct arm_pmu {
 | 
				
			||||||
	void		(*start)(void);
 | 
						void		(*start)(void);
 | 
				
			||||||
	void		(*stop)(void);
 | 
						void		(*stop)(void);
 | 
				
			||||||
	void		(*reset)(void *);
 | 
						void		(*reset)(void *);
 | 
				
			||||||
 | 
						int		(*request_irq)(irq_handler_t handler);
 | 
				
			||||||
 | 
						void		(*free_irq)(void);
 | 
				
			||||||
	int		(*map_event)(struct perf_event *event);
 | 
						int		(*map_event)(struct perf_event *event);
 | 
				
			||||||
	int		num_events;
 | 
						int		num_events;
 | 
				
			||||||
	atomic_t	active_events;
 | 
						atomic_t	active_events;
 | 
				
			||||||
| 
						 | 
					@ -129,7 +91,9 @@ struct arm_pmu {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define to_arm_pmu(p) (container_of(p, struct arm_pmu, pmu))
 | 
					#define to_arm_pmu(p) (container_of(p, struct arm_pmu, pmu))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int __init armpmu_register(struct arm_pmu *armpmu, char *name, int type);
 | 
					extern const struct dev_pm_ops armpmu_dev_pm_ops;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int armpmu_register(struct arm_pmu *armpmu, char *name, int type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
u64 armpmu_event_update(struct perf_event *event,
 | 
					u64 armpmu_event_update(struct perf_event *event,
 | 
				
			||||||
			struct hw_perf_event *hwc,
 | 
								struct hw_perf_event *hwc,
 | 
				
			||||||
| 
						 | 
					@ -139,6 +103,13 @@ int armpmu_event_set_period(struct perf_event *event,
 | 
				
			||||||
			    struct hw_perf_event *hwc,
 | 
								    struct hw_perf_event *hwc,
 | 
				
			||||||
			    int idx);
 | 
								    int idx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int armpmu_map_event(struct perf_event *event,
 | 
				
			||||||
 | 
							     const unsigned (*event_map)[PERF_COUNT_HW_MAX],
 | 
				
			||||||
 | 
							     const unsigned (*cache_map)[PERF_COUNT_HW_CACHE_MAX]
 | 
				
			||||||
 | 
											[PERF_COUNT_HW_CACHE_OP_MAX]
 | 
				
			||||||
 | 
											[PERF_COUNT_HW_CACHE_RESULT_MAX],
 | 
				
			||||||
 | 
							     u32 raw_event_mask);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* CONFIG_HW_PERF_EVENTS */
 | 
					#endif /* CONFIG_HW_PERF_EVENTS */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __ARM_PMU_H__ */
 | 
					#endif /* __ARM_PMU_H__ */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,8 +69,7 @@ obj-$(CONFIG_CPU_XSC3)		+= xscale-cp0.o
 | 
				
			||||||
obj-$(CONFIG_CPU_MOHAWK)	+= xscale-cp0.o
 | 
					obj-$(CONFIG_CPU_MOHAWK)	+= xscale-cp0.o
 | 
				
			||||||
obj-$(CONFIG_CPU_PJ4)		+= pj4-cp0.o
 | 
					obj-$(CONFIG_CPU_PJ4)		+= pj4-cp0.o
 | 
				
			||||||
obj-$(CONFIG_IWMMXT)		+= iwmmxt.o
 | 
					obj-$(CONFIG_IWMMXT)		+= iwmmxt.o
 | 
				
			||||||
obj-$(CONFIG_CPU_HAS_PMU)	+= pmu.o
 | 
					obj-$(CONFIG_HW_PERF_EVENTS)	+= perf_event.o perf_event_cpu.o
 | 
				
			||||||
obj-$(CONFIG_HW_PERF_EVENTS)	+= perf_event.o
 | 
					 | 
				
			||||||
AFLAGS_iwmmxt.o			:= -Wa,-mcpu=iwmmxt
 | 
					AFLAGS_iwmmxt.o			:= -Wa,-mcpu=iwmmxt
 | 
				
			||||||
obj-$(CONFIG_ARM_CPU_TOPOLOGY)  += topology.o
 | 
					obj-$(CONFIG_ARM_CPU_TOPOLOGY)  += topology.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,7 @@
 | 
				
			||||||
#include <linux/io.h>
 | 
					#include <linux/io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/mach-types.h>
 | 
					#include <asm/mach-types.h>
 | 
				
			||||||
 | 
					#include <asm/mach/map.h>
 | 
				
			||||||
#include <asm/mach/pci.h>
 | 
					#include <asm/mach/pci.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int debug_pci;
 | 
					static int debug_pci;
 | 
				
			||||||
| 
						 | 
					@ -414,6 +415,38 @@ static int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 | 
				
			||||||
	return irq;
 | 
						return irq;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int __init pcibios_init_resources(int busnr, struct pci_sys_data *sys)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int ret;
 | 
				
			||||||
 | 
						struct pci_host_bridge_window *window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (list_empty(&sys->resources)) {
 | 
				
			||||||
 | 
							pci_add_resource_offset(&sys->resources,
 | 
				
			||||||
 | 
								 &iomem_resource, sys->mem_offset);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						list_for_each_entry(window, &sys->resources, list) {
 | 
				
			||||||
 | 
							if (resource_type(window->res) == IORESOURCE_IO)
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sys->io_res.start = (busnr * SZ_64K) ?  : pcibios_min_io;
 | 
				
			||||||
 | 
						sys->io_res.end = (busnr + 1) * SZ_64K - 1;
 | 
				
			||||||
 | 
						sys->io_res.flags = IORESOURCE_IO;
 | 
				
			||||||
 | 
						sys->io_res.name = sys->io_res_name;
 | 
				
			||||||
 | 
						sprintf(sys->io_res_name, "PCI%d I/O", busnr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = request_resource(&ioport_resource, &sys->io_res);
 | 
				
			||||||
 | 
						if (ret) {
 | 
				
			||||||
 | 
							pr_err("PCI: unable to allocate I/O port region (%d)\n", ret);
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						pci_add_resource_offset(&sys->resources, &sys->io_res,
 | 
				
			||||||
 | 
									sys->io_offset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __init pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
 | 
					static void __init pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct pci_sys_data *sys = NULL;
 | 
						struct pci_sys_data *sys = NULL;
 | 
				
			||||||
| 
						 | 
					@ -436,11 +469,10 @@ static void __init pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
 | 
				
			||||||
		ret = hw->setup(nr, sys);
 | 
							ret = hw->setup(nr, sys);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (ret > 0) {
 | 
							if (ret > 0) {
 | 
				
			||||||
			if (list_empty(&sys->resources)) {
 | 
								ret = pcibios_init_resources(nr, sys);
 | 
				
			||||||
				pci_add_resource_offset(&sys->resources,
 | 
								if (ret)  {
 | 
				
			||||||
					 &ioport_resource, sys->io_offset);
 | 
									kfree(sys);
 | 
				
			||||||
				pci_add_resource_offset(&sys->resources,
 | 
									break;
 | 
				
			||||||
					 &iomem_resource, sys->mem_offset);
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (hw->scan)
 | 
								if (hw->scan)
 | 
				
			||||||
| 
						 | 
					@ -618,3 +650,15 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void __init pci_map_io_early(unsigned long pfn)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct map_desc pci_io_desc = {
 | 
				
			||||||
 | 
							.virtual	= PCI_IO_VIRT_BASE,
 | 
				
			||||||
 | 
							.type		= MT_DEVICE,
 | 
				
			||||||
 | 
							.length		= SZ_64K,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pci_io_desc.pfn = pfn;
 | 
				
			||||||
 | 
						iotable_init(&pci_io_desc, 1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,68 +12,15 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define pr_fmt(fmt) "hw perfevents: " fmt
 | 
					#define pr_fmt(fmt) "hw perfevents: " fmt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/bitmap.h>
 | 
					 | 
				
			||||||
#include <linux/interrupt.h>
 | 
					 | 
				
			||||||
#include <linux/kernel.h>
 | 
					#include <linux/kernel.h>
 | 
				
			||||||
#include <linux/export.h>
 | 
					 | 
				
			||||||
#include <linux/perf_event.h>
 | 
					 | 
				
			||||||
#include <linux/platform_device.h>
 | 
					#include <linux/platform_device.h>
 | 
				
			||||||
#include <linux/spinlock.h>
 | 
					#include <linux/pm_runtime.h>
 | 
				
			||||||
#include <linux/uaccess.h>
 | 
					#include <linux/uaccess.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/cputype.h>
 | 
					 | 
				
			||||||
#include <asm/irq.h>
 | 
					 | 
				
			||||||
#include <asm/irq_regs.h>
 | 
					#include <asm/irq_regs.h>
 | 
				
			||||||
#include <asm/pmu.h>
 | 
					#include <asm/pmu.h>
 | 
				
			||||||
#include <asm/stacktrace.h>
 | 
					#include <asm/stacktrace.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * ARMv6 supports a maximum of 3 events, starting from index 0. If we add
 | 
					 | 
				
			||||||
 * another platform that supports more, we need to increase this to be the
 | 
					 | 
				
			||||||
 * largest of all platforms.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * ARMv7 supports up to 32 events:
 | 
					 | 
				
			||||||
 *  cycle counter CCNT + 31 events counters CNT0..30.
 | 
					 | 
				
			||||||
 *  Cortex-A8 has 1+4 counters, Cortex-A9 has 1+6 counters.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define ARMPMU_MAX_HWEVENTS		32
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static DEFINE_PER_CPU(struct perf_event * [ARMPMU_MAX_HWEVENTS], hw_events);
 | 
					 | 
				
			||||||
static DEFINE_PER_CPU(unsigned long [BITS_TO_LONGS(ARMPMU_MAX_HWEVENTS)], used_mask);
 | 
					 | 
				
			||||||
static DEFINE_PER_CPU(struct pmu_hw_events, cpu_hw_events);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define to_arm_pmu(p) (container_of(p, struct arm_pmu, pmu))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Set at runtime when we know what CPU type we are. */
 | 
					 | 
				
			||||||
static struct arm_pmu *cpu_pmu;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const char *perf_pmu_name(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!cpu_pmu)
 | 
					 | 
				
			||||||
		return NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return cpu_pmu->pmu.name;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
EXPORT_SYMBOL_GPL(perf_pmu_name);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int perf_num_counters(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int max_events = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (cpu_pmu != NULL)
 | 
					 | 
				
			||||||
		max_events = cpu_pmu->num_events;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return max_events;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
EXPORT_SYMBOL_GPL(perf_num_counters);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define HW_OP_UNSUPPORTED		0xFFFF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define C(_x) \
 | 
					 | 
				
			||||||
	PERF_COUNT_HW_CACHE_##_x
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define CACHE_OP_UNSUPPORTED		0xFFFF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
armpmu_map_cache_event(const unsigned (*cache_map)
 | 
					armpmu_map_cache_event(const unsigned (*cache_map)
 | 
				
			||||||
				      [PERF_COUNT_HW_CACHE_MAX]
 | 
									      [PERF_COUNT_HW_CACHE_MAX]
 | 
				
			||||||
| 
						 | 
					@ -104,7 +51,7 @@ armpmu_map_cache_event(const unsigned (*cache_map)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
armpmu_map_event(const unsigned (*event_map)[PERF_COUNT_HW_MAX], u64 config)
 | 
					armpmu_map_hw_event(const unsigned (*event_map)[PERF_COUNT_HW_MAX], u64 config)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int mapping = (*event_map)[config];
 | 
						int mapping = (*event_map)[config];
 | 
				
			||||||
	return mapping == HW_OP_UNSUPPORTED ? -ENOENT : mapping;
 | 
						return mapping == HW_OP_UNSUPPORTED ? -ENOENT : mapping;
 | 
				
			||||||
| 
						 | 
					@ -116,7 +63,8 @@ armpmu_map_raw_event(u32 raw_event_mask, u64 config)
 | 
				
			||||||
	return (int)(config & raw_event_mask);
 | 
						return (int)(config & raw_event_mask);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int map_cpu_event(struct perf_event *event,
 | 
					int
 | 
				
			||||||
 | 
					armpmu_map_event(struct perf_event *event,
 | 
				
			||||||
		 const unsigned (*event_map)[PERF_COUNT_HW_MAX],
 | 
							 const unsigned (*event_map)[PERF_COUNT_HW_MAX],
 | 
				
			||||||
		 const unsigned (*cache_map)
 | 
							 const unsigned (*cache_map)
 | 
				
			||||||
				[PERF_COUNT_HW_CACHE_MAX]
 | 
									[PERF_COUNT_HW_CACHE_MAX]
 | 
				
			||||||
| 
						 | 
					@ -128,7 +76,7 @@ static int map_cpu_event(struct perf_event *event,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (event->attr.type) {
 | 
						switch (event->attr.type) {
 | 
				
			||||||
	case PERF_TYPE_HARDWARE:
 | 
						case PERF_TYPE_HARDWARE:
 | 
				
			||||||
		return armpmu_map_event(event_map, config);
 | 
							return armpmu_map_hw_event(event_map, config);
 | 
				
			||||||
	case PERF_TYPE_HW_CACHE:
 | 
						case PERF_TYPE_HW_CACHE:
 | 
				
			||||||
		return armpmu_map_cache_event(cache_map, config);
 | 
							return armpmu_map_cache_event(cache_map, config);
 | 
				
			||||||
	case PERF_TYPE_RAW:
 | 
						case PERF_TYPE_RAW:
 | 
				
			||||||
| 
						 | 
					@ -222,7 +170,6 @@ armpmu_stop(struct perf_event *event, int flags)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (!(hwc->state & PERF_HES_STOPPED)) {
 | 
						if (!(hwc->state & PERF_HES_STOPPED)) {
 | 
				
			||||||
		armpmu->disable(hwc, hwc->idx);
 | 
							armpmu->disable(hwc, hwc->idx);
 | 
				
			||||||
		barrier(); /* why? */
 | 
					 | 
				
			||||||
		armpmu_event_update(event, hwc, hwc->idx);
 | 
							armpmu_event_update(event, hwc, hwc->idx);
 | 
				
			||||||
		hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE;
 | 
							hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -350,97 +297,39 @@ validate_group(struct perf_event *event)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static irqreturn_t armpmu_platform_irq(int irq, void *dev)
 | 
					static irqreturn_t armpmu_dispatch_irq(int irq, void *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct arm_pmu *armpmu = (struct arm_pmu *) dev;
 | 
						struct arm_pmu *armpmu = (struct arm_pmu *) dev;
 | 
				
			||||||
	struct platform_device *plat_device = armpmu->plat_device;
 | 
						struct platform_device *plat_device = armpmu->plat_device;
 | 
				
			||||||
	struct arm_pmu_platdata *plat = dev_get_platdata(&plat_device->dev);
 | 
						struct arm_pmu_platdata *plat = dev_get_platdata(&plat_device->dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (plat && plat->handle_irq)
 | 
				
			||||||
		return plat->handle_irq(irq, dev, armpmu->handle_irq);
 | 
							return plat->handle_irq(irq, dev, armpmu->handle_irq);
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							return armpmu->handle_irq(irq, dev);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
armpmu_release_hardware(struct arm_pmu *armpmu)
 | 
					armpmu_release_hardware(struct arm_pmu *armpmu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i, irq, irqs;
 | 
						armpmu->free_irq();
 | 
				
			||||||
	struct platform_device *pmu_device = armpmu->plat_device;
 | 
						pm_runtime_put_sync(&armpmu->plat_device->dev);
 | 
				
			||||||
	struct arm_pmu_platdata *plat =
 | 
					 | 
				
			||||||
		dev_get_platdata(&pmu_device->dev);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	irqs = min(pmu_device->num_resources, num_possible_cpus());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for (i = 0; i < irqs; ++i) {
 | 
					 | 
				
			||||||
		if (!cpumask_test_and_clear_cpu(i, &armpmu->active_irqs))
 | 
					 | 
				
			||||||
			continue;
 | 
					 | 
				
			||||||
		irq = platform_get_irq(pmu_device, i);
 | 
					 | 
				
			||||||
		if (irq >= 0) {
 | 
					 | 
				
			||||||
			if (plat && plat->disable_irq)
 | 
					 | 
				
			||||||
				plat->disable_irq(irq);
 | 
					 | 
				
			||||||
			free_irq(irq, armpmu);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	release_pmu(armpmu->type);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
armpmu_reserve_hardware(struct arm_pmu *armpmu)
 | 
					armpmu_reserve_hardware(struct arm_pmu *armpmu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct arm_pmu_platdata *plat;
 | 
						int err;
 | 
				
			||||||
	irq_handler_t handle_irq;
 | 
					 | 
				
			||||||
	int i, err, irq, irqs;
 | 
					 | 
				
			||||||
	struct platform_device *pmu_device = armpmu->plat_device;
 | 
						struct platform_device *pmu_device = armpmu->plat_device;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!pmu_device)
 | 
						if (!pmu_device)
 | 
				
			||||||
		return -ENODEV;
 | 
							return -ENODEV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = reserve_pmu(armpmu->type);
 | 
						pm_runtime_get_sync(&pmu_device->dev);
 | 
				
			||||||
 | 
						err = armpmu->request_irq(armpmu_dispatch_irq);
 | 
				
			||||||
	if (err) {
 | 
						if (err) {
 | 
				
			||||||
		pr_warning("unable to reserve pmu\n");
 | 
					 | 
				
			||||||
		return err;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	plat = dev_get_platdata(&pmu_device->dev);
 | 
					 | 
				
			||||||
	if (plat && plat->handle_irq)
 | 
					 | 
				
			||||||
		handle_irq = armpmu_platform_irq;
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		handle_irq = armpmu->handle_irq;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	irqs = min(pmu_device->num_resources, num_possible_cpus());
 | 
					 | 
				
			||||||
	if (irqs < 1) {
 | 
					 | 
				
			||||||
		pr_err("no irqs for PMUs defined\n");
 | 
					 | 
				
			||||||
		return -ENODEV;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for (i = 0; i < irqs; ++i) {
 | 
					 | 
				
			||||||
		err = 0;
 | 
					 | 
				
			||||||
		irq = platform_get_irq(pmu_device, i);
 | 
					 | 
				
			||||||
		if (irq < 0)
 | 
					 | 
				
			||||||
			continue;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/*
 | 
					 | 
				
			||||||
		 * If we have a single PMU interrupt that we can't shift,
 | 
					 | 
				
			||||||
		 * assume that we're running on a uniprocessor machine and
 | 
					 | 
				
			||||||
		 * continue. Otherwise, continue without this interrupt.
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		if (irq_set_affinity(irq, cpumask_of(i)) && irqs > 1) {
 | 
					 | 
				
			||||||
			pr_warning("unable to set irq affinity (irq=%d, cpu=%u)\n",
 | 
					 | 
				
			||||||
				    irq, i);
 | 
					 | 
				
			||||||
			continue;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		err = request_irq(irq, handle_irq,
 | 
					 | 
				
			||||||
				  IRQF_DISABLED | IRQF_NOBALANCING,
 | 
					 | 
				
			||||||
				  "arm-pmu", armpmu);
 | 
					 | 
				
			||||||
		if (err) {
 | 
					 | 
				
			||||||
			pr_err("unable to request IRQ%d for ARM PMU counters\n",
 | 
					 | 
				
			||||||
				irq);
 | 
					 | 
				
			||||||
		armpmu_release_hardware(armpmu);
 | 
							armpmu_release_hardware(armpmu);
 | 
				
			||||||
		return err;
 | 
							return err;
 | 
				
			||||||
		} else if (plat && plat->enable_irq)
 | 
					 | 
				
			||||||
			plat->enable_irq(irq);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		cpumask_set_cpu(i, &armpmu->active_irqs);
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -581,6 +470,32 @@ static void armpmu_disable(struct pmu *pmu)
 | 
				
			||||||
	armpmu->stop();
 | 
						armpmu->stop();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_PM_RUNTIME
 | 
				
			||||||
 | 
					static int armpmu_runtime_resume(struct device *dev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct arm_pmu_platdata *plat = dev_get_platdata(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (plat && plat->runtime_resume)
 | 
				
			||||||
 | 
							return plat->runtime_resume(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int armpmu_runtime_suspend(struct device *dev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct arm_pmu_platdata *plat = dev_get_platdata(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (plat && plat->runtime_suspend)
 | 
				
			||||||
 | 
							return plat->runtime_suspend(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const struct dev_pm_ops armpmu_dev_pm_ops = {
 | 
				
			||||||
 | 
						SET_RUNTIME_PM_OPS(armpmu_runtime_suspend, armpmu_runtime_resume, NULL)
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __init armpmu_init(struct arm_pmu *armpmu)
 | 
					static void __init armpmu_init(struct arm_pmu *armpmu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	atomic_set(&armpmu->active_events, 0);
 | 
						atomic_set(&armpmu->active_events, 0);
 | 
				
			||||||
| 
						 | 
					@ -598,174 +513,14 @@ static void __init armpmu_init(struct arm_pmu *armpmu)
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int __init armpmu_register(struct arm_pmu *armpmu, char *name, int type)
 | 
					int armpmu_register(struct arm_pmu *armpmu, char *name, int type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	armpmu_init(armpmu);
 | 
						armpmu_init(armpmu);
 | 
				
			||||||
 | 
						pr_info("enabled with %s PMU driver, %d counters available\n",
 | 
				
			||||||
 | 
								armpmu->name, armpmu->num_events);
 | 
				
			||||||
	return perf_pmu_register(&armpmu->pmu, name, type);
 | 
						return perf_pmu_register(&armpmu->pmu, name, type);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Include the PMU-specific implementations. */
 | 
					 | 
				
			||||||
#include "perf_event_xscale.c"
 | 
					 | 
				
			||||||
#include "perf_event_v6.c"
 | 
					 | 
				
			||||||
#include "perf_event_v7.c"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Ensure the PMU has sane values out of reset.
 | 
					 | 
				
			||||||
 * This requires SMP to be available, so exists as a separate initcall.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static int __init
 | 
					 | 
				
			||||||
cpu_pmu_reset(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (cpu_pmu && cpu_pmu->reset)
 | 
					 | 
				
			||||||
		return on_each_cpu(cpu_pmu->reset, NULL, 1);
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
arch_initcall(cpu_pmu_reset);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * PMU platform driver and devicetree bindings.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static struct of_device_id armpmu_of_device_ids[] = {
 | 
					 | 
				
			||||||
	{.compatible = "arm,cortex-a9-pmu"},
 | 
					 | 
				
			||||||
	{.compatible = "arm,cortex-a8-pmu"},
 | 
					 | 
				
			||||||
	{.compatible = "arm,arm1136-pmu"},
 | 
					 | 
				
			||||||
	{.compatible = "arm,arm1176-pmu"},
 | 
					 | 
				
			||||||
	{},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct platform_device_id armpmu_plat_device_ids[] = {
 | 
					 | 
				
			||||||
	{.name = "arm-pmu"},
 | 
					 | 
				
			||||||
	{},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int __devinit armpmu_device_probe(struct platform_device *pdev)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!cpu_pmu)
 | 
					 | 
				
			||||||
		return -ENODEV;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cpu_pmu->plat_device = pdev;
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct platform_driver armpmu_driver = {
 | 
					 | 
				
			||||||
	.driver		= {
 | 
					 | 
				
			||||||
		.name	= "arm-pmu",
 | 
					 | 
				
			||||||
		.of_match_table = armpmu_of_device_ids,
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	.probe		= armpmu_device_probe,
 | 
					 | 
				
			||||||
	.id_table	= armpmu_plat_device_ids,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int __init register_pmu_driver(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return platform_driver_register(&armpmu_driver);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
device_initcall(register_pmu_driver);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct pmu_hw_events *armpmu_get_cpu_events(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return &__get_cpu_var(cpu_hw_events);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void __init cpu_pmu_init(struct arm_pmu *armpmu)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int cpu;
 | 
					 | 
				
			||||||
	for_each_possible_cpu(cpu) {
 | 
					 | 
				
			||||||
		struct pmu_hw_events *events = &per_cpu(cpu_hw_events, cpu);
 | 
					 | 
				
			||||||
		events->events = per_cpu(hw_events, cpu);
 | 
					 | 
				
			||||||
		events->used_mask = per_cpu(used_mask, cpu);
 | 
					 | 
				
			||||||
		raw_spin_lock_init(&events->pmu_lock);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	armpmu->get_hw_events = armpmu_get_cpu_events;
 | 
					 | 
				
			||||||
	armpmu->type = ARM_PMU_DEVICE_CPU;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * PMU hardware loses all context when a CPU goes offline.
 | 
					 | 
				
			||||||
 * When a CPU is hotplugged back in, since some hardware registers are
 | 
					 | 
				
			||||||
 * UNKNOWN at reset, the PMU must be explicitly reset to avoid reading
 | 
					 | 
				
			||||||
 * junk values out of them.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static int __cpuinit pmu_cpu_notify(struct notifier_block *b,
 | 
					 | 
				
			||||||
					unsigned long action, void *hcpu)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if ((action & ~CPU_TASKS_FROZEN) != CPU_STARTING)
 | 
					 | 
				
			||||||
		return NOTIFY_DONE;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (cpu_pmu && cpu_pmu->reset)
 | 
					 | 
				
			||||||
		cpu_pmu->reset(NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return NOTIFY_OK;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct notifier_block __cpuinitdata pmu_cpu_notifier = {
 | 
					 | 
				
			||||||
	.notifier_call = pmu_cpu_notify,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * CPU PMU identification and registration.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static int __init
 | 
					 | 
				
			||||||
init_hw_perf_events(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	unsigned long cpuid = read_cpuid_id();
 | 
					 | 
				
			||||||
	unsigned long implementor = (cpuid & 0xFF000000) >> 24;
 | 
					 | 
				
			||||||
	unsigned long part_number = (cpuid & 0xFFF0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* ARM Ltd CPUs. */
 | 
					 | 
				
			||||||
	if (0x41 == implementor) {
 | 
					 | 
				
			||||||
		switch (part_number) {
 | 
					 | 
				
			||||||
		case 0xB360:	/* ARM1136 */
 | 
					 | 
				
			||||||
		case 0xB560:	/* ARM1156 */
 | 
					 | 
				
			||||||
		case 0xB760:	/* ARM1176 */
 | 
					 | 
				
			||||||
			cpu_pmu = armv6pmu_init();
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 0xB020:	/* ARM11mpcore */
 | 
					 | 
				
			||||||
			cpu_pmu = armv6mpcore_pmu_init();
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 0xC080:	/* Cortex-A8 */
 | 
					 | 
				
			||||||
			cpu_pmu = armv7_a8_pmu_init();
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 0xC090:	/* Cortex-A9 */
 | 
					 | 
				
			||||||
			cpu_pmu = armv7_a9_pmu_init();
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 0xC050:	/* Cortex-A5 */
 | 
					 | 
				
			||||||
			cpu_pmu = armv7_a5_pmu_init();
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 0xC0F0:	/* Cortex-A15 */
 | 
					 | 
				
			||||||
			cpu_pmu = armv7_a15_pmu_init();
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 0xC070:	/* Cortex-A7 */
 | 
					 | 
				
			||||||
			cpu_pmu = armv7_a7_pmu_init();
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	/* Intel CPUs [xscale]. */
 | 
					 | 
				
			||||||
	} else if (0x69 == implementor) {
 | 
					 | 
				
			||||||
		part_number = (cpuid >> 13) & 0x7;
 | 
					 | 
				
			||||||
		switch (part_number) {
 | 
					 | 
				
			||||||
		case 1:
 | 
					 | 
				
			||||||
			cpu_pmu = xscale1pmu_init();
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case 2:
 | 
					 | 
				
			||||||
			cpu_pmu = xscale2pmu_init();
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (cpu_pmu) {
 | 
					 | 
				
			||||||
		pr_info("enabled with %s PMU driver, %d counters available\n",
 | 
					 | 
				
			||||||
			cpu_pmu->name, cpu_pmu->num_events);
 | 
					 | 
				
			||||||
		cpu_pmu_init(cpu_pmu);
 | 
					 | 
				
			||||||
		register_cpu_notifier(&pmu_cpu_notifier);
 | 
					 | 
				
			||||||
		armpmu_register(cpu_pmu, cpu_pmu->name, PERF_TYPE_RAW);
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		pr_info("no hardware support available\n");
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
early_initcall(init_hw_perf_events);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Callchain handling code.
 | 
					 * Callchain handling code.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										295
									
								
								arch/arm/kernel/perf_event_cpu.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										295
									
								
								arch/arm/kernel/perf_event_cpu.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,295 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License version 2 as
 | 
				
			||||||
 | 
					 * published by the Free Software Foundation.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2012 ARM Limited
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Author: Will Deacon <will.deacon@arm.com>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define pr_fmt(fmt) "CPU PMU: " fmt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <linux/bitmap.h>
 | 
				
			||||||
 | 
					#include <linux/export.h>
 | 
				
			||||||
 | 
					#include <linux/kernel.h>
 | 
				
			||||||
 | 
					#include <linux/of.h>
 | 
				
			||||||
 | 
					#include <linux/platform_device.h>
 | 
				
			||||||
 | 
					#include <linux/spinlock.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <asm/cputype.h>
 | 
				
			||||||
 | 
					#include <asm/irq_regs.h>
 | 
				
			||||||
 | 
					#include <asm/pmu.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Set at runtime when we know what CPU type we are. */
 | 
				
			||||||
 | 
					static struct arm_pmu *cpu_pmu;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static DEFINE_PER_CPU(struct perf_event * [ARMPMU_MAX_HWEVENTS], hw_events);
 | 
				
			||||||
 | 
					static DEFINE_PER_CPU(unsigned long [BITS_TO_LONGS(ARMPMU_MAX_HWEVENTS)], used_mask);
 | 
				
			||||||
 | 
					static DEFINE_PER_CPU(struct pmu_hw_events, cpu_hw_events);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Despite the names, these two functions are CPU-specific and are used
 | 
				
			||||||
 | 
					 * by the OProfile/perf code.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					const char *perf_pmu_name(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (!cpu_pmu)
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return cpu_pmu->pmu.name;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					EXPORT_SYMBOL_GPL(perf_pmu_name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int perf_num_counters(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int max_events = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (cpu_pmu != NULL)
 | 
				
			||||||
 | 
							max_events = cpu_pmu->num_events;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return max_events;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					EXPORT_SYMBOL_GPL(perf_num_counters);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Include the PMU-specific implementations. */
 | 
				
			||||||
 | 
					#include "perf_event_xscale.c"
 | 
				
			||||||
 | 
					#include "perf_event_v6.c"
 | 
				
			||||||
 | 
					#include "perf_event_v7.c"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct pmu_hw_events *cpu_pmu_get_cpu_events(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return &__get_cpu_var(cpu_hw_events);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void cpu_pmu_free_irq(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int i, irq, irqs;
 | 
				
			||||||
 | 
						struct platform_device *pmu_device = cpu_pmu->plat_device;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						irqs = min(pmu_device->num_resources, num_possible_cpus());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 0; i < irqs; ++i) {
 | 
				
			||||||
 | 
							if (!cpumask_test_and_clear_cpu(i, &cpu_pmu->active_irqs))
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
							irq = platform_get_irq(pmu_device, i);
 | 
				
			||||||
 | 
							if (irq >= 0)
 | 
				
			||||||
 | 
								free_irq(irq, cpu_pmu);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int cpu_pmu_request_irq(irq_handler_t handler)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int i, err, irq, irqs;
 | 
				
			||||||
 | 
						struct platform_device *pmu_device = cpu_pmu->plat_device;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!pmu_device)
 | 
				
			||||||
 | 
							return -ENODEV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						irqs = min(pmu_device->num_resources, num_possible_cpus());
 | 
				
			||||||
 | 
						if (irqs < 1) {
 | 
				
			||||||
 | 
							pr_err("no irqs for PMUs defined\n");
 | 
				
			||||||
 | 
							return -ENODEV;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 0; i < irqs; ++i) {
 | 
				
			||||||
 | 
							err = 0;
 | 
				
			||||||
 | 
							irq = platform_get_irq(pmu_device, i);
 | 
				
			||||||
 | 
							if (irq < 0)
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * If we have a single PMU interrupt that we can't shift,
 | 
				
			||||||
 | 
							 * assume that we're running on a uniprocessor machine and
 | 
				
			||||||
 | 
							 * continue. Otherwise, continue without this interrupt.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							if (irq_set_affinity(irq, cpumask_of(i)) && irqs > 1) {
 | 
				
			||||||
 | 
								pr_warning("unable to set irq affinity (irq=%d, cpu=%u)\n",
 | 
				
			||||||
 | 
									    irq, i);
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							err = request_irq(irq, handler, IRQF_NOBALANCING, "arm-pmu",
 | 
				
			||||||
 | 
									  cpu_pmu);
 | 
				
			||||||
 | 
							if (err) {
 | 
				
			||||||
 | 
								pr_err("unable to request IRQ%d for ARM PMU counters\n",
 | 
				
			||||||
 | 
									irq);
 | 
				
			||||||
 | 
								return err;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							cpumask_set_cpu(i, &cpu_pmu->active_irqs);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __devinit cpu_pmu_init(struct arm_pmu *cpu_pmu)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int cpu;
 | 
				
			||||||
 | 
						for_each_possible_cpu(cpu) {
 | 
				
			||||||
 | 
							struct pmu_hw_events *events = &per_cpu(cpu_hw_events, cpu);
 | 
				
			||||||
 | 
							events->events = per_cpu(hw_events, cpu);
 | 
				
			||||||
 | 
							events->used_mask = per_cpu(used_mask, cpu);
 | 
				
			||||||
 | 
							raw_spin_lock_init(&events->pmu_lock);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cpu_pmu->get_hw_events	= cpu_pmu_get_cpu_events;
 | 
				
			||||||
 | 
						cpu_pmu->request_irq	= cpu_pmu_request_irq;
 | 
				
			||||||
 | 
						cpu_pmu->free_irq	= cpu_pmu_free_irq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Ensure the PMU has sane values out of reset. */
 | 
				
			||||||
 | 
						if (cpu_pmu && cpu_pmu->reset)
 | 
				
			||||||
 | 
							on_each_cpu(cpu_pmu->reset, NULL, 1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * PMU hardware loses all context when a CPU goes offline.
 | 
				
			||||||
 | 
					 * When a CPU is hotplugged back in, since some hardware registers are
 | 
				
			||||||
 | 
					 * UNKNOWN at reset, the PMU must be explicitly reset to avoid reading
 | 
				
			||||||
 | 
					 * junk values out of them.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static int __cpuinit cpu_pmu_notify(struct notifier_block *b,
 | 
				
			||||||
 | 
									    unsigned long action, void *hcpu)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if ((action & ~CPU_TASKS_FROZEN) != CPU_STARTING)
 | 
				
			||||||
 | 
							return NOTIFY_DONE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (cpu_pmu && cpu_pmu->reset)
 | 
				
			||||||
 | 
							cpu_pmu->reset(NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return NOTIFY_OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct notifier_block __cpuinitdata cpu_pmu_hotplug_notifier = {
 | 
				
			||||||
 | 
						.notifier_call = cpu_pmu_notify,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * PMU platform driver and devicetree bindings.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static struct of_device_id __devinitdata cpu_pmu_of_device_ids[] = {
 | 
				
			||||||
 | 
						{.compatible = "arm,cortex-a15-pmu",	.data = armv7_a15_pmu_init},
 | 
				
			||||||
 | 
						{.compatible = "arm,cortex-a9-pmu",	.data = armv7_a9_pmu_init},
 | 
				
			||||||
 | 
						{.compatible = "arm,cortex-a8-pmu",	.data = armv7_a8_pmu_init},
 | 
				
			||||||
 | 
						{.compatible = "arm,cortex-a7-pmu",	.data = armv7_a7_pmu_init},
 | 
				
			||||||
 | 
						{.compatible = "arm,cortex-a5-pmu",	.data = armv7_a5_pmu_init},
 | 
				
			||||||
 | 
						{.compatible = "arm,arm11mpcore-pmu",	.data = armv6mpcore_pmu_init},
 | 
				
			||||||
 | 
						{.compatible = "arm,arm1176-pmu",	.data = armv6pmu_init},
 | 
				
			||||||
 | 
						{.compatible = "arm,arm1136-pmu",	.data = armv6pmu_init},
 | 
				
			||||||
 | 
						{},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct platform_device_id __devinitdata cpu_pmu_plat_device_ids[] = {
 | 
				
			||||||
 | 
						{.name = "arm-pmu"},
 | 
				
			||||||
 | 
						{},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * CPU PMU identification and probing.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static struct arm_pmu *__devinit probe_current_pmu(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct arm_pmu *pmu = NULL;
 | 
				
			||||||
 | 
						int cpu = get_cpu();
 | 
				
			||||||
 | 
						unsigned long cpuid = read_cpuid_id();
 | 
				
			||||||
 | 
						unsigned long implementor = (cpuid & 0xFF000000) >> 24;
 | 
				
			||||||
 | 
						unsigned long part_number = (cpuid & 0xFFF0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pr_info("probing PMU on CPU %d\n", cpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* ARM Ltd CPUs. */
 | 
				
			||||||
 | 
						if (0x41 == implementor) {
 | 
				
			||||||
 | 
							switch (part_number) {
 | 
				
			||||||
 | 
							case 0xB360:	/* ARM1136 */
 | 
				
			||||||
 | 
							case 0xB560:	/* ARM1156 */
 | 
				
			||||||
 | 
							case 0xB760:	/* ARM1176 */
 | 
				
			||||||
 | 
								pmu = armv6pmu_init();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 0xB020:	/* ARM11mpcore */
 | 
				
			||||||
 | 
								pmu = armv6mpcore_pmu_init();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 0xC080:	/* Cortex-A8 */
 | 
				
			||||||
 | 
								pmu = armv7_a8_pmu_init();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 0xC090:	/* Cortex-A9 */
 | 
				
			||||||
 | 
								pmu = armv7_a9_pmu_init();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 0xC050:	/* Cortex-A5 */
 | 
				
			||||||
 | 
								pmu = armv7_a5_pmu_init();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 0xC0F0:	/* Cortex-A15 */
 | 
				
			||||||
 | 
								pmu = armv7_a15_pmu_init();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 0xC070:	/* Cortex-A7 */
 | 
				
			||||||
 | 
								pmu = armv7_a7_pmu_init();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						/* Intel CPUs [xscale]. */
 | 
				
			||||||
 | 
						} else if (0x69 == implementor) {
 | 
				
			||||||
 | 
							part_number = (cpuid >> 13) & 0x7;
 | 
				
			||||||
 | 
							switch (part_number) {
 | 
				
			||||||
 | 
							case 1:
 | 
				
			||||||
 | 
								pmu = xscale1pmu_init();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 2:
 | 
				
			||||||
 | 
								pmu = xscale2pmu_init();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						put_cpu();
 | 
				
			||||||
 | 
						return pmu;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int __devinit cpu_pmu_device_probe(struct platform_device *pdev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const struct of_device_id *of_id;
 | 
				
			||||||
 | 
						struct arm_pmu *(*init_fn)(void);
 | 
				
			||||||
 | 
						struct device_node *node = pdev->dev.of_node;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (cpu_pmu) {
 | 
				
			||||||
 | 
							pr_info("attempt to register multiple PMU devices!");
 | 
				
			||||||
 | 
							return -ENOSPC;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (node && (of_id = of_match_node(cpu_pmu_of_device_ids, pdev->dev.of_node))) {
 | 
				
			||||||
 | 
							init_fn = of_id->data;
 | 
				
			||||||
 | 
							cpu_pmu = init_fn();
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							cpu_pmu = probe_current_pmu();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!cpu_pmu)
 | 
				
			||||||
 | 
							return -ENODEV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cpu_pmu->plat_device = pdev;
 | 
				
			||||||
 | 
						cpu_pmu_init(cpu_pmu);
 | 
				
			||||||
 | 
						register_cpu_notifier(&cpu_pmu_hotplug_notifier);
 | 
				
			||||||
 | 
						armpmu_register(cpu_pmu, cpu_pmu->name, PERF_TYPE_RAW);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct platform_driver cpu_pmu_driver = {
 | 
				
			||||||
 | 
						.driver		= {
 | 
				
			||||||
 | 
							.name	= "arm-pmu",
 | 
				
			||||||
 | 
							.pm	= &armpmu_dev_pm_ops,
 | 
				
			||||||
 | 
							.of_match_table = cpu_pmu_of_device_ids,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						.probe		= cpu_pmu_device_probe,
 | 
				
			||||||
 | 
						.id_table	= cpu_pmu_plat_device_ids,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int __init register_pmu_driver(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return platform_driver_register(&cpu_pmu_driver);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					device_initcall(register_pmu_driver);
 | 
				
			||||||
| 
						 | 
					@ -645,7 +645,7 @@ armv6mpcore_pmu_disable_event(struct hw_perf_event *hwc,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int armv6_map_event(struct perf_event *event)
 | 
					static int armv6_map_event(struct perf_event *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return map_cpu_event(event, &armv6_perf_map,
 | 
						return armpmu_map_event(event, &armv6_perf_map,
 | 
				
			||||||
				&armv6_perf_cache_map, 0xFF);
 | 
									&armv6_perf_cache_map, 0xFF);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -664,7 +664,7 @@ static struct arm_pmu armv6pmu = {
 | 
				
			||||||
	.max_period		= (1LLU << 32) - 1,
 | 
						.max_period		= (1LLU << 32) - 1,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv6pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv6pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return &armv6pmu;
 | 
						return &armv6pmu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -679,7 +679,7 @@ static struct arm_pmu *__init armv6pmu_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int armv6mpcore_map_event(struct perf_event *event)
 | 
					static int armv6mpcore_map_event(struct perf_event *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return map_cpu_event(event, &armv6mpcore_perf_map,
 | 
						return armpmu_map_event(event, &armv6mpcore_perf_map,
 | 
				
			||||||
				&armv6mpcore_perf_cache_map, 0xFF);
 | 
									&armv6mpcore_perf_cache_map, 0xFF);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -698,17 +698,17 @@ static struct arm_pmu armv6mpcore_pmu = {
 | 
				
			||||||
	.max_period		= (1LLU << 32) - 1,
 | 
						.max_period		= (1LLU << 32) - 1,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv6mpcore_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv6mpcore_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return &armv6mpcore_pmu;
 | 
						return &armv6mpcore_pmu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
static struct arm_pmu *__init armv6pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv6pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv6mpcore_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv6mpcore_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1204,31 +1204,31 @@ static void armv7pmu_reset(void *info)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int armv7_a8_map_event(struct perf_event *event)
 | 
					static int armv7_a8_map_event(struct perf_event *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return map_cpu_event(event, &armv7_a8_perf_map,
 | 
						return armpmu_map_event(event, &armv7_a8_perf_map,
 | 
				
			||||||
				&armv7_a8_perf_cache_map, 0xFF);
 | 
									&armv7_a8_perf_cache_map, 0xFF);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int armv7_a9_map_event(struct perf_event *event)
 | 
					static int armv7_a9_map_event(struct perf_event *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return map_cpu_event(event, &armv7_a9_perf_map,
 | 
						return armpmu_map_event(event, &armv7_a9_perf_map,
 | 
				
			||||||
				&armv7_a9_perf_cache_map, 0xFF);
 | 
									&armv7_a9_perf_cache_map, 0xFF);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int armv7_a5_map_event(struct perf_event *event)
 | 
					static int armv7_a5_map_event(struct perf_event *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return map_cpu_event(event, &armv7_a5_perf_map,
 | 
						return armpmu_map_event(event, &armv7_a5_perf_map,
 | 
				
			||||||
				&armv7_a5_perf_cache_map, 0xFF);
 | 
									&armv7_a5_perf_cache_map, 0xFF);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int armv7_a15_map_event(struct perf_event *event)
 | 
					static int armv7_a15_map_event(struct perf_event *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return map_cpu_event(event, &armv7_a15_perf_map,
 | 
						return armpmu_map_event(event, &armv7_a15_perf_map,
 | 
				
			||||||
				&armv7_a15_perf_cache_map, 0xFF);
 | 
									&armv7_a15_perf_cache_map, 0xFF);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int armv7_a7_map_event(struct perf_event *event)
 | 
					static int armv7_a7_map_event(struct perf_event *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return map_cpu_event(event, &armv7_a7_perf_map,
 | 
						return armpmu_map_event(event, &armv7_a7_perf_map,
 | 
				
			||||||
				&armv7_a7_perf_cache_map, 0xFF);
 | 
									&armv7_a7_perf_cache_map, 0xFF);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1245,7 +1245,7 @@ static struct arm_pmu armv7pmu = {
 | 
				
			||||||
	.max_period		= (1LLU << 32) - 1,
 | 
						.max_period		= (1LLU << 32) - 1,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static u32 __init armv7_read_num_pmnc_events(void)
 | 
					static u32 __devinit armv7_read_num_pmnc_events(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 nb_cnt;
 | 
						u32 nb_cnt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1256,7 +1256,7 @@ static u32 __init armv7_read_num_pmnc_events(void)
 | 
				
			||||||
	return nb_cnt + 1;
 | 
						return nb_cnt + 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv7_a8_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a8_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	armv7pmu.name		= "ARMv7 Cortex-A8";
 | 
						armv7pmu.name		= "ARMv7 Cortex-A8";
 | 
				
			||||||
	armv7pmu.map_event	= armv7_a8_map_event;
 | 
						armv7pmu.map_event	= armv7_a8_map_event;
 | 
				
			||||||
| 
						 | 
					@ -1264,7 +1264,7 @@ static struct arm_pmu *__init armv7_a8_pmu_init(void)
 | 
				
			||||||
	return &armv7pmu;
 | 
						return &armv7pmu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv7_a9_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a9_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	armv7pmu.name		= "ARMv7 Cortex-A9";
 | 
						armv7pmu.name		= "ARMv7 Cortex-A9";
 | 
				
			||||||
	armv7pmu.map_event	= armv7_a9_map_event;
 | 
						armv7pmu.map_event	= armv7_a9_map_event;
 | 
				
			||||||
| 
						 | 
					@ -1272,7 +1272,7 @@ static struct arm_pmu *__init armv7_a9_pmu_init(void)
 | 
				
			||||||
	return &armv7pmu;
 | 
						return &armv7pmu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv7_a5_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a5_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	armv7pmu.name		= "ARMv7 Cortex-A5";
 | 
						armv7pmu.name		= "ARMv7 Cortex-A5";
 | 
				
			||||||
	armv7pmu.map_event	= armv7_a5_map_event;
 | 
						armv7pmu.map_event	= armv7_a5_map_event;
 | 
				
			||||||
| 
						 | 
					@ -1280,7 +1280,7 @@ static struct arm_pmu *__init armv7_a5_pmu_init(void)
 | 
				
			||||||
	return &armv7pmu;
 | 
						return &armv7pmu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv7_a15_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a15_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	armv7pmu.name		= "ARMv7 Cortex-A15";
 | 
						armv7pmu.name		= "ARMv7 Cortex-A15";
 | 
				
			||||||
	armv7pmu.map_event	= armv7_a15_map_event;
 | 
						armv7pmu.map_event	= armv7_a15_map_event;
 | 
				
			||||||
| 
						 | 
					@ -1289,7 +1289,7 @@ static struct arm_pmu *__init armv7_a15_pmu_init(void)
 | 
				
			||||||
	return &armv7pmu;
 | 
						return &armv7pmu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv7_a7_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a7_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	armv7pmu.name		= "ARMv7 Cortex-A7";
 | 
						armv7pmu.name		= "ARMv7 Cortex-A7";
 | 
				
			||||||
	armv7pmu.map_event	= armv7_a7_map_event;
 | 
						armv7pmu.map_event	= armv7_a7_map_event;
 | 
				
			||||||
| 
						 | 
					@ -1298,27 +1298,27 @@ static struct arm_pmu *__init armv7_a7_pmu_init(void)
 | 
				
			||||||
	return &armv7pmu;
 | 
						return &armv7pmu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
static struct arm_pmu *__init armv7_a8_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a8_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv7_a9_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a9_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv7_a5_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a5_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv7_a15_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a15_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init armv7_a7_pmu_init(void)
 | 
					static struct arm_pmu *__devinit armv7_a7_pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -430,7 +430,7 @@ xscale1pmu_write_counter(int counter, u32 val)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int xscale_map_event(struct perf_event *event)
 | 
					static int xscale_map_event(struct perf_event *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return map_cpu_event(event, &xscale_perf_map,
 | 
						return armpmu_map_event(event, &xscale_perf_map,
 | 
				
			||||||
				&xscale_perf_cache_map, 0xFF);
 | 
									&xscale_perf_cache_map, 0xFF);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -449,7 +449,7 @@ static struct arm_pmu xscale1pmu = {
 | 
				
			||||||
	.max_period	= (1LLU << 32) - 1,
 | 
						.max_period	= (1LLU << 32) - 1,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init xscale1pmu_init(void)
 | 
					static struct arm_pmu *__devinit xscale1pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return &xscale1pmu;
 | 
						return &xscale1pmu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -816,17 +816,17 @@ static struct arm_pmu xscale2pmu = {
 | 
				
			||||||
	.max_period	= (1LLU << 32) - 1,
 | 
						.max_period	= (1LLU << 32) - 1,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init xscale2pmu_init(void)
 | 
					static struct arm_pmu *__devinit xscale2pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return &xscale2pmu;
 | 
						return &xscale2pmu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
static struct arm_pmu *__init xscale1pmu_init(void)
 | 
					static struct arm_pmu *__devinit xscale1pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct arm_pmu *__init xscale2pmu_init(void)
 | 
					static struct arm_pmu *__devinit xscale2pmu_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,36 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 *  linux/arch/arm/kernel/pmu.c
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *  Copyright (C) 2009 picoChip Designs Ltd, Jamie Iles
 | 
					 | 
				
			||||||
 *  Copyright (C) 2010 ARM Ltd, Will Deacon
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This program is free software; you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU General Public License version 2 as
 | 
					 | 
				
			||||||
 * published by the Free Software Foundation.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <linux/err.h>
 | 
					 | 
				
			||||||
#include <linux/kernel.h>
 | 
					 | 
				
			||||||
#include <linux/module.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <asm/pmu.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * PMU locking to ensure mutual exclusion between different subsystems.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static unsigned long pmu_lock[BITS_TO_LONGS(ARM_NUM_PMU_DEVICES)];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
reserve_pmu(enum arm_pmu_type type)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return test_and_set_bit_lock(type, pmu_lock) ? -EBUSY : 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
EXPORT_SYMBOL_GPL(reserve_pmu);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
release_pmu(enum arm_pmu_type type)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	clear_bit_unlock(type, pmu_lock);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
EXPORT_SYMBOL_GPL(release_pmu);
 | 
					 | 
				
			||||||
| 
						 | 
					@ -47,7 +47,7 @@ static void at91x40_idle(void)
 | 
				
			||||||
	 * Disable the processor clock.  The processor will be automatically
 | 
						 * Disable the processor clock.  The processor will be automatically
 | 
				
			||||||
	 * re-enabled by an interrupt or by a reset.
 | 
						 * re-enabled by an interrupt or by a reset.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	__raw_writel(AT91_PS_CR_CPU, AT91_PS_CR);
 | 
						__raw_writel(AT91_PS_CR_CPU, AT91_IO_P2V(AT91_PS_CR));
 | 
				
			||||||
	cpu_do_idle();
 | 
						cpu_do_idle();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,10 +29,10 @@
 | 
				
			||||||
#include <mach/at91_tc.h>
 | 
					#include <mach/at91_tc.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define at91_tc_read(field) \
 | 
					#define at91_tc_read(field) \
 | 
				
			||||||
	__raw_readl(AT91_TC + field)
 | 
						__raw_readl(AT91_IO_P2V(AT91_TC) + field)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define at91_tc_write(field, value) \
 | 
					#define at91_tc_write(field, value) \
 | 
				
			||||||
	__raw_writel(value, AT91_TC + field);
 | 
						__raw_writel(value, AT91_IO_P2V(AT91_TC) + field);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 *	3 counter/timer units present.
 | 
					 *	3 counter/timer units present.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,13 +67,13 @@
 | 
				
			||||||
 * to 0xFEF78000 .. 0xFF000000.  (544Kb)
 | 
					 * to 0xFEF78000 .. 0xFF000000.  (544Kb)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define AT91_IO_PHYS_BASE	0xFFF78000
 | 
					#define AT91_IO_PHYS_BASE	0xFFF78000
 | 
				
			||||||
#define AT91_IO_VIRT_BASE	(0xFF000000 - AT91_IO_SIZE)
 | 
					#define AT91_IO_VIRT_BASE	IOMEM(0xFF000000 - AT91_IO_SIZE)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Identity mapping for the non MMU case.
 | 
					 * Identity mapping for the non MMU case.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define AT91_IO_PHYS_BASE	AT91_BASE_SYS
 | 
					#define AT91_IO_PHYS_BASE	AT91_BASE_SYS
 | 
				
			||||||
#define AT91_IO_VIRT_BASE	AT91_IO_PHYS_BASE
 | 
					#define AT91_IO_VIRT_BASE	IOMEM(AT91_IO_PHYS_BASE)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define AT91_IO_SIZE		(0xFFFFFFFF - AT91_IO_PHYS_BASE + 1)
 | 
					#define AT91_IO_SIZE		(0xFFFFFFFF - AT91_IO_PHYS_BASE + 1)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,7 +94,7 @@ static const u32 uarts_sam9x5[] = {
 | 
				
			||||||
	0,
 | 
						0,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline const u32* decomp_soc_detect(u32 dbgu_base)
 | 
					static inline const u32* decomp_soc_detect(void __iomem *dbgu_base)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 cidr, socid;
 | 
						u32 cidr, socid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -142,10 +142,10 @@ static inline void arch_decomp_setup(void)
 | 
				
			||||||
	int i = 0;
 | 
						int i = 0;
 | 
				
			||||||
	const u32* usarts;
 | 
						const u32* usarts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	usarts = decomp_soc_detect(AT91_BASE_DBGU0);
 | 
						usarts = decomp_soc_detect((void __iomem *)AT91_BASE_DBGU0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!usarts)
 | 
						if (!usarts)
 | 
				
			||||||
		usarts = decomp_soc_detect(AT91_BASE_DBGU1);
 | 
							usarts = decomp_soc_detect((void __iomem *)AT91_BASE_DBGU1);
 | 
				
			||||||
	if (!usarts) {
 | 
						if (!usarts) {
 | 
				
			||||||
		at91_uart = NULL;
 | 
							at91_uart = NULL;
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,7 +73,7 @@ void __init at91_init_sram(int bank, unsigned long base, unsigned int length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct map_desc *desc = &sram_desc[bank];
 | 
						struct map_desc *desc = &sram_desc[bank];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	desc->virtual = AT91_IO_VIRT_BASE - length;
 | 
						desc->virtual = (unsigned long)AT91_IO_VIRT_BASE - length;
 | 
				
			||||||
	if (bank > 0)
 | 
						if (bank > 0)
 | 
				
			||||||
		desc->virtual -= sram_desc[bank - 1].length;
 | 
							desc->virtual -= sram_desc[bank - 1].length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,7 @@ void __init at91_init_sram(int bank, unsigned long base, unsigned int length)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct map_desc at91_io_desc __initdata = {
 | 
					static struct map_desc at91_io_desc __initdata = {
 | 
				
			||||||
	.virtual	= AT91_VA_BASE_SYS,
 | 
						.virtual	= (unsigned long)AT91_VA_BASE_SYS,
 | 
				
			||||||
	.pfn		= __phys_to_pfn(AT91_BASE_SYS),
 | 
						.pfn		= __phys_to_pfn(AT91_BASE_SYS),
 | 
				
			||||||
	.length		= SZ_16K,
 | 
						.length		= SZ_16K,
 | 
				
			||||||
	.type		= MT_DEVICE,
 | 
						.type		= MT_DEVICE,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,6 @@
 | 
				
			||||||
#include <asm/setup.h>
 | 
					#include <asm/setup.h>
 | 
				
			||||||
#include <asm/mach-types.h>
 | 
					#include <asm/mach-types.h>
 | 
				
			||||||
#include <asm/mach/time.h>
 | 
					#include <asm/mach/time.h>
 | 
				
			||||||
#include <asm/pmu.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/mach/arch.h>
 | 
					#include <asm/mach/arch.h>
 | 
				
			||||||
#include <mach/dma.h>
 | 
					#include <mach/dma.h>
 | 
				
			||||||
| 
						 | 
					@ -38,7 +37,7 @@
 | 
				
			||||||
#include <mach/csp/chipcHw_def.h>
 | 
					#include <mach/csp/chipcHw_def.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_inline.h>
 | 
					#include <mach/csp/chipcHw_inline.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <cfg_global.h>
 | 
					#include <mach/cfg_global.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "core.h"
 | 
					#include "core.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,7 +115,7 @@ static struct resource pmu_resource = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct platform_device pmu_device = {
 | 
					static struct platform_device pmu_device = {
 | 
				
			||||||
	.name		= "arm-pmu",
 | 
						.name		= "arm-pmu",
 | 
				
			||||||
	.id		= ARM_PMU_DEVICE_CPU,
 | 
						.id		= -1,
 | 
				
			||||||
	.resource	= &pmu_resource,
 | 
						.resource	= &pmu_resource,
 | 
				
			||||||
	.num_resources	= 1,
 | 
						.num_resources	= 1,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,11 +43,10 @@
 | 
				
			||||||
#include <asm/mach/time.h>
 | 
					#include <asm/mach/time.h>
 | 
				
			||||||
#include <asm/mach/map.h>
 | 
					#include <asm/mach/map.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <cfg_global.h>
 | 
					#include <mach/cfg_global.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "clock.h"
 | 
					#include "clock.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/secHw.h>
 | 
					 | 
				
			||||||
#include <mach/csp/secHw_def.h>
 | 
					#include <mach/csp/secHw_def.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_inline.h>
 | 
					#include <mach/csp/chipcHw_inline.h>
 | 
				
			||||||
#include <mach/csp/tmrHw_reg.h>
 | 
					#include <mach/csp/tmrHw_reg.h>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,15 +26,15 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/errno.h>
 | 
					#include <linux/errno.h>
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <csp/module.h>
 | 
					#include <linux/export.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mach/csp/chipcHw_def.h>
 | 
					#include <mach/csp/chipcHw_def.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_inline.h>
 | 
					#include <mach/csp/chipcHw_inline.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/reg.h>
 | 
					#include <mach/csp/reg.h>
 | 
				
			||||||
#include <csp/delay.h>
 | 
					#include <linux/delay.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Private Constants and Types --------------------------------------- */
 | 
					/* ---- Private Constants and Types --------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,21 +61,21 @@ static int chipcHw_divide(int num, int denom)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock	/*  [ IN ] Configurable clock */
 | 
					chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock	/*  [ IN ] Configurable clock */
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
	volatile uint32_t *pPLLReg = (uint32_t *) 0x0;
 | 
						uint32_t __iomem *pPLLReg = NULL;
 | 
				
			||||||
	volatile uint32_t *pClockCtrl = (uint32_t *) 0x0;
 | 
						uint32_t __iomem *pClockCtrl = NULL;
 | 
				
			||||||
	volatile uint32_t *pDependentClock = (uint32_t *) 0x0;
 | 
						uint32_t __iomem *pDependentClock = NULL;
 | 
				
			||||||
	uint32_t vcoFreqPll1Hz = 0;	/* Effective VCO frequency for PLL1 in Hz */
 | 
						uint32_t vcoFreqPll1Hz = 0;	/* Effective VCO frequency for PLL1 in Hz */
 | 
				
			||||||
	uint32_t vcoFreqPll2Hz = 0;	/* Effective VCO frequency for PLL2 in Hz */
 | 
						uint32_t vcoFreqPll2Hz = 0;	/* Effective VCO frequency for PLL2 in Hz */
 | 
				
			||||||
	uint32_t dependentClockType = 0;
 | 
						uint32_t dependentClockType = 0;
 | 
				
			||||||
	uint32_t vcoHz = 0;
 | 
						uint32_t vcoHz = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Get VCO frequencies */
 | 
						/* Get VCO frequencies */
 | 
				
			||||||
	if ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) != chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) {
 | 
						if ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) != chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) {
 | 
				
			||||||
		uint64_t adjustFreq = 0;
 | 
							uint64_t adjustFreq = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
							vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
				
			||||||
		    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
							    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
				
			||||||
		    ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
							    ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
				
			||||||
		     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
							     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Adjusted frequency due to chipcHw_REG_PLL_DIVIDER_NDIV_f_SS */
 | 
							/* Adjusted frequency due to chipcHw_REG_PLL_DIVIDER_NDIV_f_SS */
 | 
				
			||||||
| 
						 | 
					@ -86,13 +86,13 @@ chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock	/*  [ IN ] Configur
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
							vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
				
			||||||
		    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
							    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
				
			||||||
		    ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
							    ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
				
			||||||
		     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
							     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	vcoFreqPll2Hz =
 | 
						vcoFreqPll2Hz =
 | 
				
			||||||
	    chipcHw_XTAL_FREQ_Hz *
 | 
						    chipcHw_XTAL_FREQ_Hz *
 | 
				
			||||||
		 chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
							 chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
				
			||||||
	    ((pChipcHw->PLLPreDivider2 & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
						    ((readl(&pChipcHw->PLLPreDivider2) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
				
			||||||
	     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
						     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (clock) {
 | 
						switch (clock) {
 | 
				
			||||||
| 
						 | 
					@ -187,51 +187,51 @@ chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock	/*  [ IN ] Configur
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (pPLLReg) {
 | 
						if (pPLLReg) {
 | 
				
			||||||
		/* Obtain PLL clock frequency */
 | 
							/* Obtain PLL clock frequency */
 | 
				
			||||||
		if (*pPLLReg & chipcHw_REG_PLL_CLOCK_BYPASS_SELECT) {
 | 
							if (readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_BYPASS_SELECT) {
 | 
				
			||||||
			/* Return crystal clock frequency when bypassed */
 | 
								/* Return crystal clock frequency when bypassed */
 | 
				
			||||||
			return chipcHw_XTAL_FREQ_Hz;
 | 
								return chipcHw_XTAL_FREQ_Hz;
 | 
				
			||||||
		} else if (clock == chipcHw_CLOCK_DDR) {
 | 
							} else if (clock == chipcHw_CLOCK_DDR) {
 | 
				
			||||||
			/* DDR frequency is configured in PLLDivider register */
 | 
								/* DDR frequency is configured in PLLDivider register */
 | 
				
			||||||
			return chipcHw_divide (vcoHz, (((pChipcHw->PLLDivider & 0xFF000000) >> 24) ? ((pChipcHw->PLLDivider & 0xFF000000) >> 24) : 256));
 | 
								return chipcHw_divide (vcoHz, (((readl(&pChipcHw->PLLDivider) & 0xFF000000) >> 24) ? ((readl(&pChipcHw->PLLDivider) & 0xFF000000) >> 24) : 256));
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			/* From chip revision number B0, LCD clock is internally divided by 2 */
 | 
								/* From chip revision number B0, LCD clock is internally divided by 2 */
 | 
				
			||||||
			if ((pPLLReg == &pChipcHw->LCDClock) && (chipcHw_getChipRevisionNumber() != chipcHw_REV_NUMBER_A0)) {
 | 
								if ((pPLLReg == &pChipcHw->LCDClock) && (chipcHw_getChipRevisionNumber() != chipcHw_REV_NUMBER_A0)) {
 | 
				
			||||||
				vcoHz >>= 1;
 | 
									vcoHz >>= 1;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			/* Obtain PLL clock frequency using VCO dividers */
 | 
								/* Obtain PLL clock frequency using VCO dividers */
 | 
				
			||||||
			return chipcHw_divide(vcoHz, ((*pPLLReg & chipcHw_REG_PLL_CLOCK_MDIV_MASK) ? (*pPLLReg & chipcHw_REG_PLL_CLOCK_MDIV_MASK) : 256));
 | 
								return chipcHw_divide(vcoHz, ((readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) ?  (readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) : 256));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else if (pClockCtrl) {
 | 
						} else if (pClockCtrl) {
 | 
				
			||||||
		/* Obtain divider clock frequency */
 | 
							/* Obtain divider clock frequency */
 | 
				
			||||||
		uint32_t div;
 | 
							uint32_t div;
 | 
				
			||||||
		uint32_t freq = 0;
 | 
							uint32_t freq = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (*pClockCtrl & chipcHw_REG_DIV_CLOCK_BYPASS_SELECT) {
 | 
							if (readl(pClockCtrl) & chipcHw_REG_DIV_CLOCK_BYPASS_SELECT) {
 | 
				
			||||||
			/* Return crystal clock frequency when bypassed */
 | 
								/* Return crystal clock frequency when bypassed */
 | 
				
			||||||
			return chipcHw_XTAL_FREQ_Hz;
 | 
								return chipcHw_XTAL_FREQ_Hz;
 | 
				
			||||||
		} else if (pDependentClock) {
 | 
							} else if (pDependentClock) {
 | 
				
			||||||
			/* Identify the dependent clock frequency */
 | 
								/* Identify the dependent clock frequency */
 | 
				
			||||||
			switch (dependentClockType) {
 | 
								switch (dependentClockType) {
 | 
				
			||||||
			case PLL_CLOCK:
 | 
								case PLL_CLOCK:
 | 
				
			||||||
				if (*pDependentClock & chipcHw_REG_PLL_CLOCK_BYPASS_SELECT) {
 | 
									if (readl(pDependentClock) & chipcHw_REG_PLL_CLOCK_BYPASS_SELECT) {
 | 
				
			||||||
					/* Use crystal clock frequency when dependent PLL clock is bypassed */
 | 
										/* Use crystal clock frequency when dependent PLL clock is bypassed */
 | 
				
			||||||
					freq = chipcHw_XTAL_FREQ_Hz;
 | 
										freq = chipcHw_XTAL_FREQ_Hz;
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					/* Obtain PLL clock frequency using VCO dividers */
 | 
										/* Obtain PLL clock frequency using VCO dividers */
 | 
				
			||||||
					div = *pDependentClock & chipcHw_REG_PLL_CLOCK_MDIV_MASK;
 | 
										div = readl(pDependentClock) & chipcHw_REG_PLL_CLOCK_MDIV_MASK;
 | 
				
			||||||
					freq = div ? chipcHw_divide(vcoHz, div) : 0;
 | 
										freq = div ? chipcHw_divide(vcoHz, div) : 0;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case NON_PLL_CLOCK:
 | 
								case NON_PLL_CLOCK:
 | 
				
			||||||
				if (pDependentClock == (uint32_t *) &pChipcHw->ACLKClock) {
 | 
									if (pDependentClock == &pChipcHw->ACLKClock) {
 | 
				
			||||||
					freq = chipcHw_getClockFrequency (chipcHw_CLOCK_BUS);
 | 
										freq = chipcHw_getClockFrequency (chipcHw_CLOCK_BUS);
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					if (*pDependentClock & chipcHw_REG_DIV_CLOCK_BYPASS_SELECT) {
 | 
										if (readl(pDependentClock) & chipcHw_REG_DIV_CLOCK_BYPASS_SELECT) {
 | 
				
			||||||
						/* Use crystal clock frequency when dependent divider clock is bypassed */
 | 
											/* Use crystal clock frequency when dependent divider clock is bypassed */
 | 
				
			||||||
						freq = chipcHw_XTAL_FREQ_Hz;
 | 
											freq = chipcHw_XTAL_FREQ_Hz;
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
						/* Obtain divider clock frequency using XTAL dividers */
 | 
											/* Obtain divider clock frequency using XTAL dividers */
 | 
				
			||||||
						div = *pDependentClock & chipcHw_REG_DIV_CLOCK_DIV_MASK;
 | 
											div = readl(pDependentClock) & chipcHw_REG_DIV_CLOCK_DIV_MASK;
 | 
				
			||||||
						freq = chipcHw_divide (chipcHw_XTAL_FREQ_Hz, (div ? div : 256));
 | 
											freq = chipcHw_divide (chipcHw_XTAL_FREQ_Hz, (div ? div : 256));
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					@ -242,7 +242,7 @@ chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock	/*  [ IN ] Configur
 | 
				
			||||||
			freq = chipcHw_XTAL_FREQ_Hz;
 | 
								freq = chipcHw_XTAL_FREQ_Hz;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		div = *pClockCtrl & chipcHw_REG_DIV_CLOCK_DIV_MASK;
 | 
							div = readl(pClockCtrl) & chipcHw_REG_DIV_CLOCK_DIV_MASK;
 | 
				
			||||||
		return chipcHw_divide(freq, (div ? div : 256));
 | 
							return chipcHw_divide(freq, (div ? div : 256));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -261,9 +261,9 @@ chipcHw_freq chipcHw_getClockFrequency(chipcHw_CLOCK_e clock	/*  [ IN ] Configur
 | 
				
			||||||
chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configurable clock */
 | 
					chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configurable clock */
 | 
				
			||||||
				       uint32_t freq	/*  [ IN ] Clock frequency in Hz */
 | 
									       uint32_t freq	/*  [ IN ] Clock frequency in Hz */
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
	volatile uint32_t *pPLLReg = (uint32_t *) 0x0;
 | 
						uint32_t __iomem *pPLLReg = NULL;
 | 
				
			||||||
	volatile uint32_t *pClockCtrl = (uint32_t *) 0x0;
 | 
						uint32_t __iomem *pClockCtrl = NULL;
 | 
				
			||||||
	volatile uint32_t *pDependentClock = (uint32_t *) 0x0;
 | 
						uint32_t __iomem *pDependentClock = NULL;
 | 
				
			||||||
	uint32_t vcoFreqPll1Hz = 0;	/* Effective VCO frequency for PLL1 in Hz */
 | 
						uint32_t vcoFreqPll1Hz = 0;	/* Effective VCO frequency for PLL1 in Hz */
 | 
				
			||||||
	uint32_t desVcoFreqPll1Hz = 0;	/* Desired VCO frequency for PLL1 in Hz */
 | 
						uint32_t desVcoFreqPll1Hz = 0;	/* Desired VCO frequency for PLL1 in Hz */
 | 
				
			||||||
	uint32_t vcoFreqPll2Hz = 0;	/* Effective VCO frequency for PLL2 in Hz */
 | 
						uint32_t vcoFreqPll2Hz = 0;	/* Effective VCO frequency for PLL2 in Hz */
 | 
				
			||||||
| 
						 | 
					@ -272,12 +272,12 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configu
 | 
				
			||||||
	uint32_t desVcoHz = 0;
 | 
						uint32_t desVcoHz = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Get VCO frequencies */
 | 
						/* Get VCO frequencies */
 | 
				
			||||||
	if ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) != chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) {
 | 
						if ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) != chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) {
 | 
				
			||||||
		uint64_t adjustFreq = 0;
 | 
							uint64_t adjustFreq = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
							vcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
				
			||||||
		    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
							    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
				
			||||||
		    ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
							    ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
				
			||||||
		     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
							     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Adjusted frequency due to chipcHw_REG_PLL_DIVIDER_NDIV_f_SS */
 | 
							/* Adjusted frequency due to chipcHw_REG_PLL_DIVIDER_NDIV_f_SS */
 | 
				
			||||||
| 
						 | 
					@ -289,16 +289,16 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configu
 | 
				
			||||||
		/* Desired VCO frequency */
 | 
							/* Desired VCO frequency */
 | 
				
			||||||
		desVcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
							desVcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
				
			||||||
		    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
							    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
				
			||||||
		    (((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
							    (((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
				
			||||||
		      chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT) + 1);
 | 
							      chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT) + 1);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		vcoFreqPll1Hz = desVcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
							vcoFreqPll1Hz = desVcoFreqPll1Hz = chipcHw_XTAL_FREQ_Hz *
 | 
				
			||||||
		    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
							    chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
				
			||||||
		    ((pChipcHw->PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
							    ((readl(&pChipcHw->PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
				
			||||||
		     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
							     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	vcoFreqPll2Hz = chipcHw_XTAL_FREQ_Hz * chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
						vcoFreqPll2Hz = chipcHw_XTAL_FREQ_Hz * chipcHw_divide(chipcHw_REG_PLL_PREDIVIDER_P1, chipcHw_REG_PLL_PREDIVIDER_P2) *
 | 
				
			||||||
	    ((pChipcHw->PLLPreDivider2 & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
						    ((readl(&pChipcHw->PLLPreDivider2) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MASK) >>
 | 
				
			||||||
	     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
						     chipcHw_REG_PLL_PREDIVIDER_NDIV_SHIFT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (clock) {
 | 
						switch (clock) {
 | 
				
			||||||
| 
						 | 
					@ -307,8 +307,7 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configu
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			REG_LOCAL_IRQ_SAVE;
 | 
								REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
			/* Dvide DDR_phy by two to obtain DDR_ctrl clock */
 | 
								/* Dvide DDR_phy by two to obtain DDR_ctrl clock */
 | 
				
			||||||
			pChipcHw->DDRClock = (pChipcHw->DDRClock & ~chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_MASK) | ((((freq / 2) / chipcHw_getClockFrequency(chipcHw_CLOCK_BUS)) - 1)
 | 
								writel((readl(&pChipcHw->DDRClock) & ~chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_MASK) | ((((freq / 2) / chipcHw_getClockFrequency(chipcHw_CLOCK_BUS)) - 1) << chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_SHIFT), &pChipcHw->DDRClock);
 | 
				
			||||||
				<< chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_SHIFT);
 | 
					 | 
				
			||||||
			REG_LOCAL_IRQ_RESTORE;
 | 
								REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		pPLLReg = &pChipcHw->DDRClock;
 | 
							pPLLReg = &pChipcHw->DDRClock;
 | 
				
			||||||
| 
						 | 
					@ -329,8 +328,7 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configu
 | 
				
			||||||
		/* Configure the VPM:BUS ratio settings */
 | 
							/* Configure the VPM:BUS ratio settings */
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			REG_LOCAL_IRQ_SAVE;
 | 
								REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
			pChipcHw->VPMClock = (pChipcHw->VPMClock & ~chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_MASK) | ((chipcHw_divide (freq, chipcHw_getClockFrequency(chipcHw_CLOCK_BUS)) - 1)
 | 
								writel((readl(&pChipcHw->VPMClock) & ~chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_MASK) | ((chipcHw_divide (freq, chipcHw_getClockFrequency(chipcHw_CLOCK_BUS)) - 1) << chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_SHIFT), &pChipcHw->VPMClock);
 | 
				
			||||||
				<< chipcHw_REG_PLL_CLOCK_TO_BUS_RATIO_SHIFT);
 | 
					 | 
				
			||||||
			REG_LOCAL_IRQ_RESTORE;
 | 
								REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		pPLLReg = &pChipcHw->VPMClock;
 | 
							pPLLReg = &pChipcHw->VPMClock;
 | 
				
			||||||
| 
						 | 
					@ -428,9 +426,9 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configu
 | 
				
			||||||
		/* For DDR settings use only the PLL divider clock */
 | 
							/* For DDR settings use only the PLL divider clock */
 | 
				
			||||||
		if (pPLLReg == &pChipcHw->DDRClock) {
 | 
							if (pPLLReg == &pChipcHw->DDRClock) {
 | 
				
			||||||
			/* Set M1DIV for PLL1, which controls the DDR clock */
 | 
								/* Set M1DIV for PLL1, which controls the DDR clock */
 | 
				
			||||||
			reg32_write(&pChipcHw->PLLDivider, (pChipcHw->PLLDivider & 0x00FFFFFF) | ((chipcHw_REG_PLL_DIVIDER_MDIV (desVcoHz, freq)) << 24));
 | 
								reg32_write(&pChipcHw->PLLDivider, (readl(&pChipcHw->PLLDivider) & 0x00FFFFFF) | ((chipcHw_REG_PLL_DIVIDER_MDIV (desVcoHz, freq)) << 24));
 | 
				
			||||||
			/* Calculate expected frequency */
 | 
								/* Calculate expected frequency */
 | 
				
			||||||
			freq = chipcHw_divide(vcoHz, (((pChipcHw->PLLDivider & 0xFF000000) >> 24) ? ((pChipcHw->PLLDivider & 0xFF000000) >> 24) : 256));
 | 
								freq = chipcHw_divide(vcoHz, (((readl(&pChipcHw->PLLDivider) & 0xFF000000) >> 24) ? ((readl(&pChipcHw->PLLDivider) & 0xFF000000) >> 24) : 256));
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			/* From chip revision number B0, LCD clock is internally divided by 2 */
 | 
								/* From chip revision number B0, LCD clock is internally divided by 2 */
 | 
				
			||||||
			if ((pPLLReg == &pChipcHw->LCDClock) && (chipcHw_getChipRevisionNumber() != chipcHw_REV_NUMBER_A0)) {
 | 
								if ((pPLLReg == &pChipcHw->LCDClock) && (chipcHw_getChipRevisionNumber() != chipcHw_REV_NUMBER_A0)) {
 | 
				
			||||||
| 
						 | 
					@ -441,7 +439,7 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configu
 | 
				
			||||||
			reg32_modify_and(pPLLReg, ~(chipcHw_REG_PLL_CLOCK_MDIV_MASK));
 | 
								reg32_modify_and(pPLLReg, ~(chipcHw_REG_PLL_CLOCK_MDIV_MASK));
 | 
				
			||||||
			reg32_modify_or(pPLLReg, chipcHw_REG_PLL_DIVIDER_MDIV(desVcoHz, freq));
 | 
								reg32_modify_or(pPLLReg, chipcHw_REG_PLL_DIVIDER_MDIV(desVcoHz, freq));
 | 
				
			||||||
			/* Calculate expected frequency */
 | 
								/* Calculate expected frequency */
 | 
				
			||||||
			freq = chipcHw_divide(vcoHz, ((*(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) ? (*(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) : 256));
 | 
								freq = chipcHw_divide(vcoHz, ((readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) ? (readl(pPLLReg) & chipcHw_REG_PLL_CLOCK_MDIV_MASK) : 256));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		/* Wait for for atleast 200ns as per the protocol to change frequency */
 | 
							/* Wait for for atleast 200ns as per the protocol to change frequency */
 | 
				
			||||||
		udelay(1);
 | 
							udelay(1);
 | 
				
			||||||
| 
						 | 
					@ -460,16 +458,16 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configu
 | 
				
			||||||
		if (pDependentClock) {
 | 
							if (pDependentClock) {
 | 
				
			||||||
			switch (dependentClockType) {
 | 
								switch (dependentClockType) {
 | 
				
			||||||
			case PLL_CLOCK:
 | 
								case PLL_CLOCK:
 | 
				
			||||||
				divider = chipcHw_divide(chipcHw_divide (desVcoHz, (*pDependentClock & chipcHw_REG_PLL_CLOCK_MDIV_MASK)), freq);
 | 
									divider = chipcHw_divide(chipcHw_divide (desVcoHz, (readl(pDependentClock) & chipcHw_REG_PLL_CLOCK_MDIV_MASK)), freq);
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case NON_PLL_CLOCK:
 | 
								case NON_PLL_CLOCK:
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					uint32_t sourceClock = 0;
 | 
										uint32_t sourceClock = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if (pDependentClock == (uint32_t *) &pChipcHw->ACLKClock) {
 | 
										if (pDependentClock == &pChipcHw->ACLKClock) {
 | 
				
			||||||
						sourceClock = chipcHw_getClockFrequency (chipcHw_CLOCK_BUS);
 | 
											sourceClock = chipcHw_getClockFrequency (chipcHw_CLOCK_BUS);
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
						uint32_t div = *pDependentClock & chipcHw_REG_DIV_CLOCK_DIV_MASK;
 | 
											uint32_t div = readl(pDependentClock) & chipcHw_REG_DIV_CLOCK_DIV_MASK;
 | 
				
			||||||
						sourceClock = chipcHw_divide (chipcHw_XTAL_FREQ_Hz, ((div) ? div : 256));
 | 
											sourceClock = chipcHw_divide (chipcHw_XTAL_FREQ_Hz, ((div) ? div : 256));
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					divider = chipcHw_divide(sourceClock, freq);
 | 
										divider = chipcHw_divide(sourceClock, freq);
 | 
				
			||||||
| 
						 | 
					@ -483,7 +481,7 @@ chipcHw_freq chipcHw_setClockFrequency(chipcHw_CLOCK_e clock,	/*  [ IN ] Configu
 | 
				
			||||||
		if (divider) {
 | 
							if (divider) {
 | 
				
			||||||
			REG_LOCAL_IRQ_SAVE;
 | 
								REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
			/* Set the divider to obtain the required frequency */
 | 
								/* Set the divider to obtain the required frequency */
 | 
				
			||||||
			*pClockCtrl = (*pClockCtrl & (~chipcHw_REG_DIV_CLOCK_DIV_MASK)) | (((divider > 256) ? chipcHw_REG_DIV_CLOCK_DIV_256 : divider) & chipcHw_REG_DIV_CLOCK_DIV_MASK);
 | 
								writel((readl(pClockCtrl) & (~chipcHw_REG_DIV_CLOCK_DIV_MASK)) | (((divider > 256) ? chipcHw_REG_DIV_CLOCK_DIV_256 : divider) & chipcHw_REG_DIV_CLOCK_DIV_MASK), pClockCtrl);
 | 
				
			||||||
			REG_LOCAL_IRQ_RESTORE;
 | 
								REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
			return freq;
 | 
								return freq;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -515,25 +513,26 @@ static int vpmPhaseAlignA0(void)
 | 
				
			||||||
	int count = 0;
 | 
						int count = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (iter = 0; (iter < MAX_PHASE_ALIGN_ATTEMPTS) && (adjustCount < MAX_PHASE_ADJUST_COUNT); iter++) {
 | 
						for (iter = 0; (iter < MAX_PHASE_ALIGN_ATTEMPTS) && (adjustCount < MAX_PHASE_ADJUST_COUNT); iter++) {
 | 
				
			||||||
		phaseControl = (pChipcHw->VPMClock & chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK) >> chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT;
 | 
							phaseControl = (readl(&pChipcHw->VPMClock) & chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK) >> chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT;
 | 
				
			||||||
		phaseValue = 0;
 | 
							phaseValue = 0;
 | 
				
			||||||
		prevPhaseComp = 0;
 | 
							prevPhaseComp = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Step 1: Look for falling PH_COMP transition */
 | 
							/* Step 1: Look for falling PH_COMP transition */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Read the contents of VPM Clock resgister */
 | 
							/* Read the contents of VPM Clock resgister */
 | 
				
			||||||
		phaseValue = pChipcHw->VPMClock;
 | 
							phaseValue = readl(&pChipcHw->VPMClock);
 | 
				
			||||||
		do {
 | 
							do {
 | 
				
			||||||
			/* Store previous value of phase comparator */
 | 
								/* Store previous value of phase comparator */
 | 
				
			||||||
			prevPhaseComp = phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP;
 | 
								prevPhaseComp = phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP;
 | 
				
			||||||
			/* Change the value of PH_CTRL. */
 | 
								/* Change the value of PH_CTRL. */
 | 
				
			||||||
			reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
								reg32_write(&pChipcHw->VPMClock,
 | 
				
			||||||
 | 
								(readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
				
			||||||
			/* Wait atleast 20 ns */
 | 
								/* Wait atleast 20 ns */
 | 
				
			||||||
			udelay(1);
 | 
								udelay(1);
 | 
				
			||||||
			/* Toggle the LOAD_CH after phase control is written. */
 | 
								/* Toggle the LOAD_CH after phase control is written. */
 | 
				
			||||||
			pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE;
 | 
								writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock);
 | 
				
			||||||
			/* Read the contents of  VPM Clock resgister. */
 | 
								/* Read the contents of  VPM Clock resgister. */
 | 
				
			||||||
			phaseValue = pChipcHw->VPMClock;
 | 
								phaseValue = readl(&pChipcHw->VPMClock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0x0) {
 | 
								if ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0x0) {
 | 
				
			||||||
				phaseControl = (0x3F & (phaseControl - 1));
 | 
									phaseControl = (0x3F & (phaseControl - 1));
 | 
				
			||||||
| 
						 | 
					@ -557,12 +556,13 @@ static int vpmPhaseAlignA0(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (count = 0; (count < 5) && ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0); count++) {
 | 
							for (count = 0; (count < 5) && ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0); count++) {
 | 
				
			||||||
			phaseControl = (0x3F & (phaseControl + 1));
 | 
								phaseControl = (0x3F & (phaseControl + 1));
 | 
				
			||||||
			reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
								reg32_write(&pChipcHw->VPMClock,
 | 
				
			||||||
 | 
								(readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
				
			||||||
			/* Wait atleast 20 ns */
 | 
								/* Wait atleast 20 ns */
 | 
				
			||||||
			udelay(1);
 | 
								udelay(1);
 | 
				
			||||||
			/* Toggle the LOAD_CH after phase control is written. */
 | 
								/* Toggle the LOAD_CH after phase control is written. */
 | 
				
			||||||
			pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE;
 | 
								writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock);
 | 
				
			||||||
			phaseValue = pChipcHw->VPMClock;
 | 
								phaseValue = readl(&pChipcHw->VPMClock);
 | 
				
			||||||
			/* Count number of adjustment made */
 | 
								/* Count number of adjustment made */
 | 
				
			||||||
			adjustCount++;
 | 
								adjustCount++;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -581,12 +581,13 @@ static int vpmPhaseAlignA0(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (count = 0; (count < 3) && ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0); count++) {
 | 
							for (count = 0; (count < 3) && ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0); count++) {
 | 
				
			||||||
			phaseControl = (0x3F & (phaseControl - 1));
 | 
								phaseControl = (0x3F & (phaseControl - 1));
 | 
				
			||||||
			reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
								reg32_write(&pChipcHw->VPMClock,
 | 
				
			||||||
 | 
								(readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
				
			||||||
			/* Wait atleast 20 ns */
 | 
								/* Wait atleast 20 ns */
 | 
				
			||||||
			udelay(1);
 | 
								udelay(1);
 | 
				
			||||||
			/* Toggle the LOAD_CH after phase control is written. */
 | 
								/* Toggle the LOAD_CH after phase control is written. */
 | 
				
			||||||
			pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE;
 | 
								writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock);
 | 
				
			||||||
			phaseValue = pChipcHw->VPMClock;
 | 
								phaseValue = readl(&pChipcHw->VPMClock);
 | 
				
			||||||
			/* Count number of adjustment made */
 | 
								/* Count number of adjustment made */
 | 
				
			||||||
			adjustCount++;
 | 
								adjustCount++;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -605,12 +606,13 @@ static int vpmPhaseAlignA0(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (count = 0; (count < 5); count++) {
 | 
							for (count = 0; (count < 5); count++) {
 | 
				
			||||||
			phaseControl = (0x3F & (phaseControl - 1));
 | 
								phaseControl = (0x3F & (phaseControl - 1));
 | 
				
			||||||
			reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
								reg32_write(&pChipcHw->VPMClock,
 | 
				
			||||||
 | 
								(readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
				
			||||||
			/* Wait atleast 20 ns */
 | 
								/* Wait atleast 20 ns */
 | 
				
			||||||
			udelay(1);
 | 
								udelay(1);
 | 
				
			||||||
			/* Toggle the LOAD_CH after phase control is written. */
 | 
								/* Toggle the LOAD_CH after phase control is written. */
 | 
				
			||||||
			pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE;
 | 
								writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock);
 | 
				
			||||||
			phaseValue = pChipcHw->VPMClock;
 | 
								phaseValue = readl(&pChipcHw->VPMClock);
 | 
				
			||||||
			/* Count number of adjustment made */
 | 
								/* Count number of adjustment made */
 | 
				
			||||||
			adjustCount++;
 | 
								adjustCount++;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -631,14 +633,14 @@ static int vpmPhaseAlignA0(void)
 | 
				
			||||||
			/* Store previous value of phase comparator */
 | 
								/* Store previous value of phase comparator */
 | 
				
			||||||
			prevPhaseComp = phaseValue;
 | 
								prevPhaseComp = phaseValue;
 | 
				
			||||||
			/* Change the value of PH_CTRL. */
 | 
								/* Change the value of PH_CTRL. */
 | 
				
			||||||
			reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
								reg32_write(&pChipcHw->VPMClock,
 | 
				
			||||||
 | 
								(readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
				
			||||||
			/* Wait atleast 20 ns */
 | 
								/* Wait atleast 20 ns */
 | 
				
			||||||
			udelay(1);
 | 
								udelay(1);
 | 
				
			||||||
			/* Toggle the LOAD_CH after phase control is written. */
 | 
								/* Toggle the LOAD_CH after phase control is written. */
 | 
				
			||||||
			pChipcHw->VPMClock ^=
 | 
								writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock);
 | 
				
			||||||
			    chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE;
 | 
					 | 
				
			||||||
			/* Read the contents of  VPM Clock resgister. */
 | 
								/* Read the contents of  VPM Clock resgister. */
 | 
				
			||||||
			phaseValue = pChipcHw->VPMClock;
 | 
								phaseValue = readl(&pChipcHw->VPMClock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0x0) {
 | 
								if ((phaseValue & chipcHw_REG_PLL_CLOCK_PHASE_COMP) == 0x0) {
 | 
				
			||||||
				phaseControl = (0x3F & (phaseControl - 1));
 | 
									phaseControl = (0x3F & (phaseControl - 1));
 | 
				
			||||||
| 
						 | 
					@ -661,13 +663,13 @@ static int vpmPhaseAlignA0(void)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* For VPM Phase should be perfectly aligned. */
 | 
						/* For VPM Phase should be perfectly aligned. */
 | 
				
			||||||
	phaseControl = (((pChipcHw->VPMClock >> chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT) - 1) & 0x3F);
 | 
						phaseControl = (((readl(&pChipcHw->VPMClock) >> chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT) - 1) & 0x3F);
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		REG_LOCAL_IRQ_SAVE;
 | 
							REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pChipcHw->VPMClock = (pChipcHw->VPMClock & ~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT);
 | 
							writel((readl(&pChipcHw->VPMClock) & ~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT), &pChipcHw->VPMClock);
 | 
				
			||||||
		/* Load new phase value */
 | 
							/* Load new phase value */
 | 
				
			||||||
		pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE;
 | 
							writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		REG_LOCAL_IRQ_RESTORE;
 | 
							REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -697,7 +699,7 @@ int chipcHw_vpmPhaseAlign(void)
 | 
				
			||||||
		int adjustCount = 0;
 | 
							int adjustCount = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Disable VPM access */
 | 
							/* Disable VPM access */
 | 
				
			||||||
		pChipcHw->Spare1 &= ~chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE;
 | 
							writel(readl(&pChipcHw->Spare1) & ~chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE, &pChipcHw->Spare1);
 | 
				
			||||||
		/* Disable HW VPM phase alignment  */
 | 
							/* Disable HW VPM phase alignment  */
 | 
				
			||||||
		chipcHw_vpmHwPhaseAlignDisable();
 | 
							chipcHw_vpmHwPhaseAlignDisable();
 | 
				
			||||||
		/* Enable SW VPM phase alignment  */
 | 
							/* Enable SW VPM phase alignment  */
 | 
				
			||||||
| 
						 | 
					@ -715,23 +717,24 @@ int chipcHw_vpmPhaseAlign(void)
 | 
				
			||||||
				phaseControl--;
 | 
									phaseControl--;
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				/* Enable VPM access */
 | 
									/* Enable VPM access */
 | 
				
			||||||
				pChipcHw->Spare1 |= chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE;
 | 
									writel(readl(&pChipcHw->Spare1) | chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE, &pChipcHw->Spare1);
 | 
				
			||||||
				/* Return adjust count */
 | 
									/* Return adjust count */
 | 
				
			||||||
				return adjustCount;
 | 
									return adjustCount;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			/* Change the value of PH_CTRL. */
 | 
								/* Change the value of PH_CTRL. */
 | 
				
			||||||
			reg32_write(&pChipcHw->VPMClock, (pChipcHw->VPMClock & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
								reg32_write(&pChipcHw->VPMClock,
 | 
				
			||||||
 | 
								(readl(&pChipcHw->VPMClock) & (~chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_MASK)) | (phaseControl << chipcHw_REG_PLL_CLOCK_PHASE_CONTROL_SHIFT));
 | 
				
			||||||
			/* Wait atleast 20 ns */
 | 
								/* Wait atleast 20 ns */
 | 
				
			||||||
			udelay(1);
 | 
								udelay(1);
 | 
				
			||||||
			/* Toggle the LOAD_CH after phase control is written. */
 | 
								/* Toggle the LOAD_CH after phase control is written. */
 | 
				
			||||||
			pChipcHw->VPMClock ^= chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE;
 | 
								writel(readl(&pChipcHw->VPMClock) ^ chipcHw_REG_PLL_CLOCK_PHASE_UPDATE_ENABLE, &pChipcHw->VPMClock);
 | 
				
			||||||
			/* Count adjustment */
 | 
								/* Count adjustment */
 | 
				
			||||||
			adjustCount++;
 | 
								adjustCount++;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Disable VPM access */
 | 
						/* Disable VPM access */
 | 
				
			||||||
	pChipcHw->Spare1 &= ~chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE;
 | 
						writel(readl(&pChipcHw->Spare1) & ~chipcHw_REG_SPARE1_VPM_BUS_ACCESS_ENABLE, &pChipcHw->Spare1);
 | 
				
			||||||
	return -1;
 | 
						return -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,15 +26,15 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/errno.h>
 | 
					#include <linux/errno.h>
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <csp/module.h>
 | 
					#include <linux/export.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mach/csp/chipcHw_def.h>
 | 
					#include <mach/csp/chipcHw_def.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_inline.h>
 | 
					#include <mach/csp/chipcHw_inline.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/reg.h>
 | 
					#include <mach/csp/reg.h>
 | 
				
			||||||
#include <csp/delay.h>
 | 
					#include <linux/delay.h>
 | 
				
			||||||
/* ---- Private Constants and Types --------------------------------------- */
 | 
					/* ---- Private Constants and Types --------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -73,9 +73,9 @@ void chipcHw_pll2Enable(uint32_t vcoFreqHz)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		REG_LOCAL_IRQ_SAVE;
 | 
							REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
		pChipcHw->PLLConfig2 =
 | 
							writel(chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
				
			||||||
		    chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
							       chipcHw_REG_PLL_CONFIG_A_RESET,
 | 
				
			||||||
		    chipcHw_REG_PLL_CONFIG_A_RESET;
 | 
								&pChipcHw->PLLConfig2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pllPreDivider2 = chipcHw_REG_PLL_PREDIVIDER_POWER_DOWN |
 | 
							pllPreDivider2 = chipcHw_REG_PLL_PREDIVIDER_POWER_DOWN |
 | 
				
			||||||
		    chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER |
 | 
							    chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER |
 | 
				
			||||||
| 
						 | 
					@ -87,28 +87,30 @@ void chipcHw_pll2Enable(uint32_t vcoFreqHz)
 | 
				
			||||||
		     chipcHw_REG_PLL_PREDIVIDER_P2_SHIFT);
 | 
							     chipcHw_REG_PLL_PREDIVIDER_P2_SHIFT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Enable CHIPC registers to control the PLL */
 | 
							/* Enable CHIPC registers to control the PLL */
 | 
				
			||||||
		pChipcHw->PLLStatus |= chipcHw_REG_PLL_STATUS_CONTROL_ENABLE;
 | 
							writel(readl(&pChipcHw->PLLStatus) | chipcHw_REG_PLL_STATUS_CONTROL_ENABLE, &pChipcHw->PLLStatus);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Set pre divider to get desired VCO frequency */
 | 
							/* Set pre divider to get desired VCO frequency */
 | 
				
			||||||
		pChipcHw->PLLPreDivider2 = pllPreDivider2;
 | 
							writel(pllPreDivider2, &pChipcHw->PLLPreDivider2);
 | 
				
			||||||
		/* Set NDIV Frac */
 | 
							/* Set NDIV Frac */
 | 
				
			||||||
		pChipcHw->PLLDivider2 = chipcHw_REG_PLL_DIVIDER_NDIV_f;
 | 
							writel(chipcHw_REG_PLL_DIVIDER_NDIV_f, &pChipcHw->PLLDivider2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* This has to be removed once the default values are fixed for PLL2. */
 | 
							/* This has to be removed once the default values are fixed for PLL2. */
 | 
				
			||||||
		pChipcHw->PLLControl12 = 0x38000700;
 | 
							writel(0x38000700, &pChipcHw->PLLControl12);
 | 
				
			||||||
		pChipcHw->PLLControl22 = 0x00000015;
 | 
							writel(0x00000015, &pChipcHw->PLLControl22);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Reset PLL2 */
 | 
							/* Reset PLL2 */
 | 
				
			||||||
		if (vcoFreqHz > chipcHw_REG_PLL_CONFIG_VCO_SPLIT_FREQ) {
 | 
							if (vcoFreqHz > chipcHw_REG_PLL_CONFIG_VCO_SPLIT_FREQ) {
 | 
				
			||||||
			pChipcHw->PLLConfig2 = chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
								writel(chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_A_RESET |
 | 
								    chipcHw_REG_PLL_CONFIG_A_RESET |
 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_VCO_1601_3200 |
 | 
								    chipcHw_REG_PLL_CONFIG_VCO_1601_3200 |
 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_POWER_DOWN;
 | 
								    chipcHw_REG_PLL_CONFIG_POWER_DOWN,
 | 
				
			||||||
 | 
								    &pChipcHw->PLLConfig2);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			pChipcHw->PLLConfig2 = chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
								writel(chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_A_RESET |
 | 
								    chipcHw_REG_PLL_CONFIG_A_RESET |
 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_VCO_800_1600 |
 | 
								    chipcHw_REG_PLL_CONFIG_VCO_800_1600 |
 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_POWER_DOWN;
 | 
								    chipcHw_REG_PLL_CONFIG_POWER_DOWN,
 | 
				
			||||||
 | 
								    &pChipcHw->PLLConfig2);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		REG_LOCAL_IRQ_RESTORE;
 | 
							REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -119,22 +121,25 @@ void chipcHw_pll2Enable(uint32_t vcoFreqHz)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		REG_LOCAL_IRQ_SAVE;
 | 
							REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
		/* Remove analog reset and Power on the PLL */
 | 
							/* Remove analog reset and Power on the PLL */
 | 
				
			||||||
		pChipcHw->PLLConfig2 &=
 | 
							writel(readl(&pChipcHw->PLLConfig2) &
 | 
				
			||||||
		    ~(chipcHw_REG_PLL_CONFIG_A_RESET |
 | 
							    ~(chipcHw_REG_PLL_CONFIG_A_RESET |
 | 
				
			||||||
		      chipcHw_REG_PLL_CONFIG_POWER_DOWN);
 | 
							      chipcHw_REG_PLL_CONFIG_POWER_DOWN),
 | 
				
			||||||
 | 
							      &pChipcHw->PLLConfig2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		REG_LOCAL_IRQ_RESTORE;
 | 
							REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Wait until PLL is locked */
 | 
						/* Wait until PLL is locked */
 | 
				
			||||||
	while (!(pChipcHw->PLLStatus2 & chipcHw_REG_PLL_STATUS_LOCKED))
 | 
						while (!(readl(&pChipcHw->PLLStatus2) & chipcHw_REG_PLL_STATUS_LOCKED))
 | 
				
			||||||
		;
 | 
							;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		REG_LOCAL_IRQ_SAVE;
 | 
							REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
		/* Remove digital reset */
 | 
							/* Remove digital reset */
 | 
				
			||||||
		pChipcHw->PLLConfig2 &= ~chipcHw_REG_PLL_CONFIG_D_RESET;
 | 
							writel(readl(&pChipcHw->PLLConfig2) &
 | 
				
			||||||
 | 
								~chipcHw_REG_PLL_CONFIG_D_RESET,
 | 
				
			||||||
 | 
								&pChipcHw->PLLConfig2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		REG_LOCAL_IRQ_RESTORE;
 | 
							REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -157,9 +162,9 @@ void chipcHw_pll1Enable(uint32_t vcoFreqHz, chipcHw_SPREAD_SPECTRUM_e ssSupport)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		REG_LOCAL_IRQ_SAVE;
 | 
							REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pChipcHw->PLLConfig =
 | 
							writel(chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
				
			||||||
		    chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
							    chipcHw_REG_PLL_CONFIG_A_RESET,
 | 
				
			||||||
		    chipcHw_REG_PLL_CONFIG_A_RESET;
 | 
							    &pChipcHw->PLLConfig);
 | 
				
			||||||
		/* Setting VCO frequency */
 | 
							/* Setting VCO frequency */
 | 
				
			||||||
		if (ssSupport == chipcHw_SPREAD_SPECTRUM_ALLOW) {
 | 
							if (ssSupport == chipcHw_SPREAD_SPECTRUM_ALLOW) {
 | 
				
			||||||
			pllPreDivider =
 | 
								pllPreDivider =
 | 
				
			||||||
| 
						 | 
					@ -182,30 +187,22 @@ void chipcHw_pll1Enable(uint32_t vcoFreqHz, chipcHw_SPREAD_SPECTRUM_e ssSupport)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Enable CHIPC registers to control the PLL */
 | 
							/* Enable CHIPC registers to control the PLL */
 | 
				
			||||||
		pChipcHw->PLLStatus |= chipcHw_REG_PLL_STATUS_CONTROL_ENABLE;
 | 
							writel(readl(&pChipcHw->PLLStatus) | chipcHw_REG_PLL_STATUS_CONTROL_ENABLE, &pChipcHw->PLLStatus);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Set pre divider to get desired VCO frequency */
 | 
							/* Set pre divider to get desired VCO frequency */
 | 
				
			||||||
		pChipcHw->PLLPreDivider = pllPreDivider;
 | 
							writel(pllPreDivider, &pChipcHw->PLLPreDivider);
 | 
				
			||||||
		/* Set NDIV Frac */
 | 
							/* Set NDIV Frac */
 | 
				
			||||||
		if (ssSupport == chipcHw_SPREAD_SPECTRUM_ALLOW) {
 | 
							if (ssSupport == chipcHw_SPREAD_SPECTRUM_ALLOW) {
 | 
				
			||||||
			pChipcHw->PLLDivider = chipcHw_REG_PLL_DIVIDER_M1DIV |
 | 
								writel(chipcHw_REG_PLL_DIVIDER_M1DIV | chipcHw_REG_PLL_DIVIDER_NDIV_f_SS, &pChipcHw->PLLDivider);
 | 
				
			||||||
			    chipcHw_REG_PLL_DIVIDER_NDIV_f_SS;
 | 
					 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			pChipcHw->PLLDivider = chipcHw_REG_PLL_DIVIDER_M1DIV |
 | 
								writel(chipcHw_REG_PLL_DIVIDER_M1DIV | chipcHw_REG_PLL_DIVIDER_NDIV_f, &pChipcHw->PLLDivider);
 | 
				
			||||||
			    chipcHw_REG_PLL_DIVIDER_NDIV_f;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Reset PLL1 */
 | 
							/* Reset PLL1 */
 | 
				
			||||||
		if (vcoFreqHz > chipcHw_REG_PLL_CONFIG_VCO_SPLIT_FREQ) {
 | 
							if (vcoFreqHz > chipcHw_REG_PLL_CONFIG_VCO_SPLIT_FREQ) {
 | 
				
			||||||
			pChipcHw->PLLConfig = chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
								writel(chipcHw_REG_PLL_CONFIG_D_RESET | chipcHw_REG_PLL_CONFIG_A_RESET | chipcHw_REG_PLL_CONFIG_VCO_1601_3200 | chipcHw_REG_PLL_CONFIG_POWER_DOWN, &pChipcHw->PLLConfig);
 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_A_RESET |
 | 
					 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_VCO_1601_3200 |
 | 
					 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_POWER_DOWN;
 | 
					 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			pChipcHw->PLLConfig = chipcHw_REG_PLL_CONFIG_D_RESET |
 | 
								writel(chipcHw_REG_PLL_CONFIG_D_RESET | chipcHw_REG_PLL_CONFIG_A_RESET | chipcHw_REG_PLL_CONFIG_VCO_800_1600 | chipcHw_REG_PLL_CONFIG_POWER_DOWN, &pChipcHw->PLLConfig);
 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_A_RESET |
 | 
					 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_VCO_800_1600 |
 | 
					 | 
				
			||||||
			    chipcHw_REG_PLL_CONFIG_POWER_DOWN;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		REG_LOCAL_IRQ_RESTORE;
 | 
							REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
| 
						 | 
					@ -216,22 +213,19 @@ void chipcHw_pll1Enable(uint32_t vcoFreqHz, chipcHw_SPREAD_SPECTRUM_e ssSupport)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			REG_LOCAL_IRQ_SAVE;
 | 
								REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
			/* Remove analog reset and Power on the PLL */
 | 
								/* Remove analog reset and Power on the PLL */
 | 
				
			||||||
			pChipcHw->PLLConfig &=
 | 
								writel(readl(&pChipcHw->PLLConfig) & ~(chipcHw_REG_PLL_CONFIG_A_RESET | chipcHw_REG_PLL_CONFIG_POWER_DOWN), &pChipcHw->PLLConfig);
 | 
				
			||||||
			    ~(chipcHw_REG_PLL_CONFIG_A_RESET |
 | 
					 | 
				
			||||||
			      chipcHw_REG_PLL_CONFIG_POWER_DOWN);
 | 
					 | 
				
			||||||
			REG_LOCAL_IRQ_RESTORE;
 | 
								REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Wait until PLL is locked */
 | 
							/* Wait until PLL is locked */
 | 
				
			||||||
		while (!(pChipcHw->PLLStatus & chipcHw_REG_PLL_STATUS_LOCKED)
 | 
							while (!(readl(&pChipcHw->PLLStatus) & chipcHw_REG_PLL_STATUS_LOCKED)
 | 
				
			||||||
		       || !(pChipcHw->
 | 
							       || !(readl(&pChipcHw->PLLStatus2) & chipcHw_REG_PLL_STATUS_LOCKED))
 | 
				
			||||||
			    PLLStatus2 & chipcHw_REG_PLL_STATUS_LOCKED))
 | 
					 | 
				
			||||||
			;
 | 
								;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Remove digital reset */
 | 
							/* Remove digital reset */
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			REG_LOCAL_IRQ_SAVE;
 | 
								REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
			pChipcHw->PLLConfig &= ~chipcHw_REG_PLL_CONFIG_D_RESET;
 | 
								writel(readl(&pChipcHw->PLLConfig) & ~chipcHw_REG_PLL_CONFIG_D_RESET, &pChipcHw->PLLConfig);
 | 
				
			||||||
			REG_LOCAL_IRQ_RESTORE;
 | 
								REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -267,11 +261,7 @@ void chipcHw_Init(chipcHw_INIT_PARAM_t *initParam	/*  [ IN ] Misc chip initializ
 | 
				
			||||||
	chipcHw_clearStickyBits(chipcHw_REG_STICKY_CHIP_SOFT_RESET);
 | 
						chipcHw_clearStickyBits(chipcHw_REG_STICKY_CHIP_SOFT_RESET);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Before configuring the ARM clock, atleast we need to make sure BUS clock maintains the proper ratio with ARM clock */
 | 
						/* Before configuring the ARM clock, atleast we need to make sure BUS clock maintains the proper ratio with ARM clock */
 | 
				
			||||||
	pChipcHw->ACLKClock =
 | 
						writel((readl(&pChipcHw->ACLKClock) & ~chipcHw_REG_ACLKClock_CLK_DIV_MASK) | (initParam-> armBusRatio & chipcHw_REG_ACLKClock_CLK_DIV_MASK), &pChipcHw->ACLKClock);
 | 
				
			||||||
	    (pChipcHw->
 | 
					 | 
				
			||||||
	     ACLKClock & ~chipcHw_REG_ACLKClock_CLK_DIV_MASK) | (initParam->
 | 
					 | 
				
			||||||
								 armBusRatio &
 | 
					 | 
				
			||||||
								 chipcHw_REG_ACLKClock_CLK_DIV_MASK);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Set various core component frequencies. The order in which this is done is important for some. */
 | 
						/* Set various core component frequencies. The order in which this is done is important for some. */
 | 
				
			||||||
	/* The RTBUS (DDR PHY) is derived from the BUS, and the BUS from the ARM, and VPM needs to know BUS */
 | 
						/* The RTBUS (DDR PHY) is derived from the BUS, and the BUS from the ARM, and VPM needs to know BUS */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,11 +13,11 @@
 | 
				
			||||||
*****************************************************************************/
 | 
					*****************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_def.h>
 | 
					#include <mach/csp/chipcHw_def.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_inline.h>
 | 
					#include <mach/csp/chipcHw_inline.h>
 | 
				
			||||||
#include <csp/intcHw.h>
 | 
					#include <mach/csp/intcHw_reg.h>
 | 
				
			||||||
#include <csp/cache.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Private Constants and Types --------------------------------------- */
 | 
					/* ---- Private Constants and Types --------------------------------------- */
 | 
				
			||||||
/* ---- Private Variables ------------------------------------------------- */
 | 
					/* ---- Private Variables ------------------------------------------------- */
 | 
				
			||||||
| 
						 | 
					@ -50,17 +50,18 @@ void chipcHw_reset(uint32_t mask)
 | 
				
			||||||
			chipcHw_softReset(chipcHw_REG_SOFT_RESET_CHIP_SOFT);
 | 
								chipcHw_softReset(chipcHw_REG_SOFT_RESET_CHIP_SOFT);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		/* Bypass the PLL clocks before reboot */
 | 
							/* Bypass the PLL clocks before reboot */
 | 
				
			||||||
		pChipcHw->UARTClock |= chipcHw_REG_PLL_CLOCK_BYPASS_SELECT;
 | 
							writel(readl(&pChipcHw->UARTClock) | chipcHw_REG_PLL_CLOCK_BYPASS_SELECT,
 | 
				
			||||||
		pChipcHw->SPIClock |= chipcHw_REG_PLL_CLOCK_BYPASS_SELECT;
 | 
								&pChipcHw->UARTClock);
 | 
				
			||||||
 | 
							writel(readl(&pChipcHw->SPIClock) | chipcHw_REG_PLL_CLOCK_BYPASS_SELECT,
 | 
				
			||||||
 | 
								&pChipcHw->SPIClock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Copy the chipcHw_warmReset_run_from_aram function into ARAM */
 | 
							/* Copy the chipcHw_warmReset_run_from_aram function into ARAM */
 | 
				
			||||||
		do {
 | 
							do {
 | 
				
			||||||
			((uint32_t *) MM_IO_BASE_ARAM)[i] =
 | 
								writel(((uint32_t *) &chipcHw_reset_run_from_aram)[i], ((uint32_t __iomem *) MM_IO_BASE_ARAM) + i);
 | 
				
			||||||
			    ((uint32_t *) &chipcHw_reset_run_from_aram)[i];
 | 
					 | 
				
			||||||
			i++;
 | 
								i++;
 | 
				
			||||||
		} while (((uint32_t *) MM_IO_BASE_ARAM)[i - 1] != 0xe1a0f00f);	/* 0xe1a0f00f == asm ("mov r15, r15"); */
 | 
							} while (readl(((uint32_t __iomem*) MM_IO_BASE_ARAM) + i - 1) != 0xe1a0f00f);	/* 0xe1a0f00f == asm ("mov r15, r15"); */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CSP_CACHE_FLUSH_ALL;
 | 
							flush_cache_all();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* run the function from ARAM */
 | 
							/* run the function from ARAM */
 | 
				
			||||||
		runFunc();
 | 
							runFunc();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,11 +25,11 @@
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <csp/string.h>
 | 
					#include <linux/string.h>
 | 
				
			||||||
#include <stddef.h>
 | 
					#include <linux/stddef.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/dmacHw.h>
 | 
					#include <mach/csp/dmacHw.h>
 | 
				
			||||||
#include <mach/csp/dmacHw_reg.h>
 | 
					#include <mach/csp/dmacHw_reg.h>
 | 
				
			||||||
#include <mach/csp/dmacHw_priv.h>
 | 
					#include <mach/csp/dmacHw_priv.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_inline.h>
 | 
					#include <mach/csp/chipcHw_inline.h>
 | 
				
			||||||
| 
						 | 
					@ -55,33 +55,32 @@ static uint32_t GetFifoSize(dmacHw_HANDLE_t handle	/*   [ IN ] DMA Channel handl
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
	uint32_t val = 0;
 | 
						uint32_t val = 0;
 | 
				
			||||||
	dmacHw_CBLK_t *pCblk = dmacHw_HANDLE_TO_CBLK(handle);
 | 
						dmacHw_CBLK_t *pCblk = dmacHw_HANDLE_TO_CBLK(handle);
 | 
				
			||||||
	dmacHw_MISC_t *pMiscReg =
 | 
						dmacHw_MISC_t __iomem *pMiscReg = (void __iomem *)dmacHw_REG_MISC_BASE(pCblk->module);
 | 
				
			||||||
	    (dmacHw_MISC_t *) dmacHw_REG_MISC_BASE(pCblk->module);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (pCblk->channel) {
 | 
						switch (pCblk->channel) {
 | 
				
			||||||
	case 0:
 | 
						case 0:
 | 
				
			||||||
		val = (pMiscReg->CompParm2.lo & 0x70000000) >> 28;
 | 
							val = (readl(&pMiscReg->CompParm2.lo) & 0x70000000) >> 28;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 1:
 | 
						case 1:
 | 
				
			||||||
		val = (pMiscReg->CompParm3.hi & 0x70000000) >> 28;
 | 
							val = (readl(&pMiscReg->CompParm3.hi) & 0x70000000) >> 28;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 2:
 | 
						case 2:
 | 
				
			||||||
		val = (pMiscReg->CompParm3.lo & 0x70000000) >> 28;
 | 
							val = (readl(&pMiscReg->CompParm3.lo) & 0x70000000) >> 28;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 3:
 | 
						case 3:
 | 
				
			||||||
		val = (pMiscReg->CompParm4.hi & 0x70000000) >> 28;
 | 
							val = (readl(&pMiscReg->CompParm4.hi) & 0x70000000) >> 28;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 4:
 | 
						case 4:
 | 
				
			||||||
		val = (pMiscReg->CompParm4.lo & 0x70000000) >> 28;
 | 
							val = (readl(&pMiscReg->CompParm4.lo) & 0x70000000) >> 28;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 5:
 | 
						case 5:
 | 
				
			||||||
		val = (pMiscReg->CompParm5.hi & 0x70000000) >> 28;
 | 
							val = (readl(&pMiscReg->CompParm5.hi) & 0x70000000) >> 28;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 6:
 | 
						case 6:
 | 
				
			||||||
		val = (pMiscReg->CompParm5.lo & 0x70000000) >> 28;
 | 
							val = (readl(&pMiscReg->CompParm5.lo) & 0x70000000) >> 28;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 7:
 | 
						case 7:
 | 
				
			||||||
		val = (pMiscReg->CompParm6.hi & 0x70000000) >> 28;
 | 
							val = (readl(&pMiscReg->CompParm6.hi) & 0x70000000) >> 28;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,10 +26,10 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <stddef.h>
 | 
					#include <linux/stddef.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/dmacHw.h>
 | 
					#include <mach/csp/dmacHw.h>
 | 
				
			||||||
#include <mach/csp/dmacHw_reg.h>
 | 
					#include <mach/csp/dmacHw_reg.h>
 | 
				
			||||||
#include <mach/csp/dmacHw_priv.h>
 | 
					#include <mach/csp/dmacHw_priv.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,10 +26,10 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/errno.h>
 | 
					#include <linux/errno.h>
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/tmrHw.h>
 | 
					#include <mach/csp/tmrHw.h>
 | 
				
			||||||
#include <mach/csp/tmrHw_reg.h>
 | 
					#include <mach/csp/tmrHw_reg.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define tmrHw_ASSERT(a)                     if (!(a)) *(char *)0 = 0
 | 
					#define tmrHw_ASSERT(a)                     if (!(a)) *(char *)0 = 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +0,0 @@
 | 
				
			||||||
#ifndef _CFG_GLOBAL_H_
 | 
					 | 
				
			||||||
#define _CFG_GLOBAL_H_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <cfg_global_defines.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define CFG_GLOBAL_CHIP                         BCM11107
 | 
					 | 
				
			||||||
#define CFG_GLOBAL_CHIP_FAMILY                  CFG_GLOBAL_CHIP_FAMILY_BCMRING
 | 
					 | 
				
			||||||
#define CFG_GLOBAL_CHIP_REV                     0xB0
 | 
					 | 
				
			||||||
#define CFG_GLOBAL_RAM_SIZE                     0x10000000
 | 
					 | 
				
			||||||
#define CFG_GLOBAL_RAM_BASE                     0x00000000
 | 
					 | 
				
			||||||
#define CFG_GLOBAL_RAM_RESERVED_SIZE            0x000000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _CFG_GLOBAL_H_ */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,35 +0,0 @@
 | 
				
			||||||
/*****************************************************************************
 | 
					 | 
				
			||||||
* Copyright 2003 - 2008 Broadcom Corporation.  All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Unless you and Broadcom execute a separate written software license
 | 
					 | 
				
			||||||
* agreement governing use of this software, this software is licensed to you
 | 
					 | 
				
			||||||
* under the terms of the GNU General Public License version 2, available at
 | 
					 | 
				
			||||||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Notwithstanding the above, under no circumstances may you combine this
 | 
					 | 
				
			||||||
* software in any way with any other Broadcom software provided under a
 | 
					 | 
				
			||||||
* license other than the GPL, without Broadcom's express prior written
 | 
					 | 
				
			||||||
* consent.
 | 
					 | 
				
			||||||
*****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CSP_CACHE_H
 | 
					 | 
				
			||||||
#define CSP_CACHE_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <csp/stdint.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(__KERNEL__) && !defined(STANDALONE)
 | 
					 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define CSP_CACHE_FLUSH_ALL      flush_cache_all()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define CSP_CACHE_FLUSH_ALL
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* CSP_CACHE_H */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,36 +0,0 @@
 | 
				
			||||||
/*****************************************************************************
 | 
					 | 
				
			||||||
* Copyright 2003 - 2008 Broadcom Corporation.  All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Unless you and Broadcom execute a separate written software license
 | 
					 | 
				
			||||||
* agreement governing use of this software, this software is licensed to you
 | 
					 | 
				
			||||||
* under the terms of the GNU General Public License version 2, available at
 | 
					 | 
				
			||||||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Notwithstanding the above, under no circumstances may you combine this
 | 
					 | 
				
			||||||
* software in any way with any other Broadcom software provided under a
 | 
					 | 
				
			||||||
* license other than the GPL, without Broadcom's express prior written
 | 
					 | 
				
			||||||
* consent.
 | 
					 | 
				
			||||||
*****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CSP_DELAY_H
 | 
					 | 
				
			||||||
#define CSP_DELAY_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Some CSP routines require use of the following delay routines. Use the OS */
 | 
					 | 
				
			||||||
/* version if available, otherwise use a CSP specific definition. */
 | 
					 | 
				
			||||||
/* void udelay(unsigned long usecs); */
 | 
					 | 
				
			||||||
/* void mdelay(unsigned long msecs); */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(__KERNEL__) && !defined(STANDALONE)
 | 
					 | 
				
			||||||
   #include <linux/delay.h>
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
   #include <mach/csp/delay.h>
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					 | 
				
			||||||
/* ---- Public Variable Externs ------------------------------------------ */
 | 
					 | 
				
			||||||
/* ---- Public Function Prototypes --------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /*  CSP_DELAY_H */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,32 +0,0 @@
 | 
				
			||||||
/*****************************************************************************
 | 
					 | 
				
			||||||
* Copyright 2003 - 2008 Broadcom Corporation.  All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Unless you and Broadcom execute a separate written software license
 | 
					 | 
				
			||||||
* agreement governing use of this software, this software is licensed to you
 | 
					 | 
				
			||||||
* under the terms of the GNU General Public License version 2, available at
 | 
					 | 
				
			||||||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Notwithstanding the above, under no circumstances may you combine this
 | 
					 | 
				
			||||||
* software in any way with any other Broadcom software provided under a
 | 
					 | 
				
			||||||
* license other than the GPL, without Broadcom's express prior written
 | 
					 | 
				
			||||||
* consent.
 | 
					 | 
				
			||||||
*****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CSP_ERRNO_H
 | 
					 | 
				
			||||||
#define CSP_ERRNO_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if   defined(__KERNEL__)
 | 
					 | 
				
			||||||
#include <linux/errno.h>
 | 
					 | 
				
			||||||
#elif defined(CSP_SIMULATION)
 | 
					 | 
				
			||||||
#include <asm-generic/errno.h>
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#include <errno.h>
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					 | 
				
			||||||
/* ---- Public Variable Externs ------------------------------------------ */
 | 
					 | 
				
			||||||
/* ---- Public Function Prototypes --------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* CSP_ERRNO_H */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,40 +0,0 @@
 | 
				
			||||||
/*****************************************************************************
 | 
					 | 
				
			||||||
* Copyright 2003 - 2008 Broadcom Corporation.  All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Unless you and Broadcom execute a separate written software license
 | 
					 | 
				
			||||||
* agreement governing use of this software, this software is licensed to you
 | 
					 | 
				
			||||||
* under the terms of the GNU General Public License version 2, available at
 | 
					 | 
				
			||||||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Notwithstanding the above, under no circumstances may you combine this
 | 
					 | 
				
			||||||
* software in any way with any other Broadcom software provided under a
 | 
					 | 
				
			||||||
* license other than the GPL, without Broadcom's express prior written
 | 
					 | 
				
			||||||
* consent.
 | 
					 | 
				
			||||||
*****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
*  @file    intcHw.h
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  @brief   generic interrupt controller API
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  @note
 | 
					 | 
				
			||||||
*     None
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef _INTCHW_H
 | 
					 | 
				
			||||||
#define _INTCHW_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					 | 
				
			||||||
#include <mach/csp/intcHw_reg.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					 | 
				
			||||||
/* ---- Public Variable Externs ------------------------------------------ */
 | 
					 | 
				
			||||||
/* ---- Public Function Prototypes --------------------------------------- */
 | 
					 | 
				
			||||||
static inline void intcHw_irq_disable(void *basep, uint32_t mask);
 | 
					 | 
				
			||||||
static inline void intcHw_irq_enable(void *basep, uint32_t mask);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* _INTCHW_H */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,32 +0,0 @@
 | 
				
			||||||
/*****************************************************************************
 | 
					 | 
				
			||||||
* Copyright 2003 - 2008 Broadcom Corporation.  All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Unless you and Broadcom execute a separate written software license
 | 
					 | 
				
			||||||
* agreement governing use of this software, this software is licensed to you
 | 
					 | 
				
			||||||
* under the terms of the GNU General Public License version 2, available at
 | 
					 | 
				
			||||||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Notwithstanding the above, under no circumstances may you combine this
 | 
					 | 
				
			||||||
* software in any way with any other Broadcom software provided under a
 | 
					 | 
				
			||||||
* license other than the GPL, without Broadcom's express prior written
 | 
					 | 
				
			||||||
* consent.
 | 
					 | 
				
			||||||
*****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CSP_MODULE_H
 | 
					 | 
				
			||||||
#define CSP_MODULE_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __KERNEL__
 | 
					 | 
				
			||||||
    #include <linux/module.h>
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
    #define EXPORT_SYMBOL(symbol)
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					 | 
				
			||||||
/* ---- Public Variable Externs ------------------------------------------ */
 | 
					 | 
				
			||||||
/* ---- Public Function Prototypes --------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* CSP_MODULE_H */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,65 +0,0 @@
 | 
				
			||||||
/*****************************************************************************
 | 
					 | 
				
			||||||
* Copyright 2004 - 2008 Broadcom Corporation.  All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Unless you and Broadcom execute a separate written software license
 | 
					 | 
				
			||||||
* agreement governing use of this software, this software is licensed to you
 | 
					 | 
				
			||||||
* under the terms of the GNU General Public License version 2, available at
 | 
					 | 
				
			||||||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Notwithstanding the above, under no circumstances may you combine this
 | 
					 | 
				
			||||||
* software in any way with any other Broadcom software provided under a
 | 
					 | 
				
			||||||
* license other than the GPL, without Broadcom's express prior written
 | 
					 | 
				
			||||||
* consent.
 | 
					 | 
				
			||||||
*****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
*  @file    secHw.h
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  @brief   Definitions for accessing low level security features
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
#ifndef SECHW_H
 | 
					 | 
				
			||||||
#define SECHW_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef void (*secHw_FUNC_t) (void);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef enum {
 | 
					 | 
				
			||||||
	secHw_MODE_SECURE = 0x0,	/* Switches processor into secure mode */
 | 
					 | 
				
			||||||
	secHw_MODE_NONSECURE = 0x1	/* Switches processor into non-secure mode */
 | 
					 | 
				
			||||||
} secHw_MODE;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
*  @brief   Requesting to execute the function in secure mode
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  This function requests the given function to run in secure mode
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
void secHw_RunSecure(secHw_FUNC_t	/* Function to run in secure mode */
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
*  @brief   Sets the  mode
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  his function sets the processor mode (secure/non-secure)
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
void secHw_SetMode(secHw_MODE	/* Processor mode */
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
*  @brief   Get the current mode
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*  This function retieves the processor mode (secure/non-secure)
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
/****************************************************************************/
 | 
					 | 
				
			||||||
void secHw_GetMode(secHw_MODE *);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* SECHW_H */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,30 +0,0 @@
 | 
				
			||||||
/*****************************************************************************
 | 
					 | 
				
			||||||
* Copyright 2003 - 2008 Broadcom Corporation.  All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Unless you and Broadcom execute a separate written software license
 | 
					 | 
				
			||||||
* agreement governing use of this software, this software is licensed to you
 | 
					 | 
				
			||||||
* under the terms of the GNU General Public License version 2, available at
 | 
					 | 
				
			||||||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Notwithstanding the above, under no circumstances may you combine this
 | 
					 | 
				
			||||||
* software in any way with any other Broadcom software provided under a
 | 
					 | 
				
			||||||
* license other than the GPL, without Broadcom's express prior written
 | 
					 | 
				
			||||||
* consent.
 | 
					 | 
				
			||||||
*****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CSP_STDINT_H
 | 
					 | 
				
			||||||
#define CSP_STDINT_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __KERNEL__
 | 
					 | 
				
			||||||
#include <linux/types.h>
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#include <stdint.h>
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					 | 
				
			||||||
/* ---- Public Variable Externs ------------------------------------------ */
 | 
					 | 
				
			||||||
/* ---- Public Function Prototypes --------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* CSP_STDINT_H */
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,34 +0,0 @@
 | 
				
			||||||
/*****************************************************************************
 | 
					 | 
				
			||||||
* Copyright 2003 - 2008 Broadcom Corporation.  All rights reserved.
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Unless you and Broadcom execute a separate written software license
 | 
					 | 
				
			||||||
* agreement governing use of this software, this software is licensed to you
 | 
					 | 
				
			||||||
* under the terms of the GNU General Public License version 2, available at
 | 
					 | 
				
			||||||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | 
					 | 
				
			||||||
*
 | 
					 | 
				
			||||||
* Notwithstanding the above, under no circumstances may you combine this
 | 
					 | 
				
			||||||
* software in any way with any other Broadcom software provided under a
 | 
					 | 
				
			||||||
* license other than the GPL, without Broadcom's express prior written
 | 
					 | 
				
			||||||
* consent.
 | 
					 | 
				
			||||||
*****************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CSP_STRING_H
 | 
					 | 
				
			||||||
#define CSP_STRING_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __KERNEL__
 | 
					 | 
				
			||||||
   #include <linux/string.h>
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
   #include <string.h>
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					 | 
				
			||||||
/* ---- Public Variable Externs ------------------------------------------ */
 | 
					 | 
				
			||||||
/* ---- Public Function Prototypes --------------------------------------- */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* CSP_STRING_H */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					@ -38,3 +38,14 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IMAGE_HEADER_SIZE_CHECKSUM    4
 | 
					#define IMAGE_HEADER_SIZE_CHECKSUM    4
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef _CFG_GLOBAL_H_
 | 
				
			||||||
 | 
					#define _CFG_GLOBAL_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CFG_GLOBAL_CHIP                         BCM11107
 | 
				
			||||||
 | 
					#define CFG_GLOBAL_CHIP_FAMILY                  CFG_GLOBAL_CHIP_FAMILY_BCMRING
 | 
				
			||||||
 | 
					#define CFG_GLOBAL_CHIP_REV                     0xB0
 | 
				
			||||||
 | 
					#define CFG_GLOBAL_RAM_SIZE                     0x10000000
 | 
				
			||||||
 | 
					#define CFG_GLOBAL_RAM_BASE                     0x00000000
 | 
				
			||||||
 | 
					#define CFG_GLOBAL_RAM_RESERVED_SIZE            0x000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* _CFG_GLOBAL_H_ */
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
#include <mach/csp/cap.h>
 | 
					#include <mach/csp/cap.h>
 | 
				
			||||||
#include <cfg_global.h>
 | 
					#include <mach/cfg_global.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					/* ---- Public Constants and Types --------------------------------------- */
 | 
				
			||||||
#define CAP_CONFIG0_VPM_DIS          0x00000001
 | 
					#define CAP_CONFIG0_VPM_DIS          0x00000001
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,9 +17,9 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ----------------------------------------------------- */
 | 
					/* ---- Include Files ----------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <csp/errno.h>
 | 
					#include <linux/errno.h>
 | 
				
			||||||
#include <csp/reg.h>
 | 
					#include <mach/csp/reg.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_reg.h>
 | 
					#include <mach/csp/chipcHw_reg.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Public Constants and Types ---------------------------------------- */
 | 
					/* ---- Public Constants and Types ---------------------------------------- */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,8 +17,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ----------------------------------------------------- */
 | 
					/* ---- Include Files ----------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/errno.h>
 | 
					#include <linux/errno.h>
 | 
				
			||||||
#include <csp/reg.h>
 | 
					#include <mach/csp/reg.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_reg.h>
 | 
					#include <mach/csp/chipcHw_reg.h>
 | 
				
			||||||
#include <mach/csp/chipcHw_def.h>
 | 
					#include <mach/csp/chipcHw_def.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,7 +47,7 @@ static inline void chipcHw_setClock(chipcHw_CLOCK_e clock,
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getChipId(void)
 | 
					static inline uint32_t chipcHw_getChipId(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return pChipcHw->ChipId;
 | 
						return readl(&pChipcHw->ChipId);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -59,15 +59,16 @@ static inline uint32_t chipcHw_getChipId(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline void chipcHw_enableSpreadSpectrum(void)
 | 
					static inline void chipcHw_enableSpreadSpectrum(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if ((pChipcHw->
 | 
						if ((readl(&pChipcHw->
 | 
				
			||||||
	     PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) !=
 | 
						     PLLPreDivider) & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) !=
 | 
				
			||||||
	    chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) {
 | 
						    chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) {
 | 
				
			||||||
		ddrcReg_PHY_ADDR_CTL_REGP->ssCfg =
 | 
							writel((0xFFFF << ddrcReg_PHY_ADDR_SS_CFG_NDIV_AMPLITUDE_SHIFT) |
 | 
				
			||||||
		    (0xFFFF << ddrcReg_PHY_ADDR_SS_CFG_NDIV_AMPLITUDE_SHIFT) |
 | 
					 | 
				
			||||||
		    (ddrcReg_PHY_ADDR_SS_CFG_MIN_CYCLE_PER_TICK <<
 | 
							    (ddrcReg_PHY_ADDR_SS_CFG_MIN_CYCLE_PER_TICK <<
 | 
				
			||||||
		     ddrcReg_PHY_ADDR_SS_CFG_CYCLE_PER_TICK_SHIFT);
 | 
							     ddrcReg_PHY_ADDR_SS_CFG_CYCLE_PER_TICK_SHIFT),
 | 
				
			||||||
		ddrcReg_PHY_ADDR_CTL_REGP->ssCtl |=
 | 
							     &ddrcReg_PHY_ADDR_CTL_REGP->ssCfg);
 | 
				
			||||||
		    ddrcReg_PHY_ADDR_SS_CTRL_ENABLE;
 | 
							writel(readl(&ddrcReg_PHY_ADDR_CTL_REGP->ssCtl) |
 | 
				
			||||||
 | 
							    ddrcReg_PHY_ADDR_SS_CTRL_ENABLE,
 | 
				
			||||||
 | 
							    &ddrcReg_PHY_ADDR_CTL_REGP->ssCtl);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,8 +94,8 @@ static inline void chipcHw_disableSpreadSpectrum(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getChipProductId(void)
 | 
					static inline uint32_t chipcHw_getChipProductId(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (pChipcHw->
 | 
						return (readl(&pChipcHw->
 | 
				
			||||||
		 ChipId & chipcHw_REG_CHIPID_BASE_MASK) >>
 | 
							 ChipId) & chipcHw_REG_CHIPID_BASE_MASK) >>
 | 
				
			||||||
		chipcHw_REG_CHIPID_BASE_SHIFT;
 | 
							chipcHw_REG_CHIPID_BASE_SHIFT;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -109,7 +110,7 @@ static inline uint32_t chipcHw_getChipProductId(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline chipcHw_REV_NUMBER_e chipcHw_getChipRevisionNumber(void)
 | 
					static inline chipcHw_REV_NUMBER_e chipcHw_getChipRevisionNumber(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return pChipcHw->ChipId & chipcHw_REG_CHIPID_REV_MASK;
 | 
						return readl(&pChipcHw->ChipId) & chipcHw_REG_CHIPID_REV_MASK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -156,7 +157,7 @@ static inline void chipcHw_busInterfaceClockDisable(uint32_t mask)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getBusInterfaceClockStatus(void)
 | 
					static inline uint32_t chipcHw_getBusInterfaceClockStatus(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return pChipcHw->BusIntfClock;
 | 
						return readl(&pChipcHw->BusIntfClock);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -215,8 +216,9 @@ static inline void chipcHw_softResetDisable(uint64_t mask)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Deassert module soft reset */
 | 
						/* Deassert module soft reset */
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	pChipcHw->SoftReset1 ^= ctrl1;
 | 
						writel(readl(&pChipcHw->SoftReset1) ^ ctrl1, &pChipcHw->SoftReset1);
 | 
				
			||||||
	pChipcHw->SoftReset2 ^= (ctrl2 & (~chipcHw_REG_SOFT_RESET_UNHOLD_MASK));
 | 
						writel(readl(&pChipcHw->SoftReset2) ^ (ctrl2 &
 | 
				
			||||||
 | 
							(~chipcHw_REG_SOFT_RESET_UNHOLD_MASK)), &pChipcHw->SoftReset2);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -227,9 +229,10 @@ static inline void chipcHw_softResetEnable(uint64_t mask)
 | 
				
			||||||
	uint32_t unhold = 0;
 | 
						uint32_t unhold = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	pChipcHw->SoftReset1 |= ctrl1;
 | 
						writel(readl(&pChipcHw->SoftReset1) | ctrl1, &pChipcHw->SoftReset1);
 | 
				
			||||||
	/* Mask out unhold request bits */
 | 
						/* Mask out unhold request bits */
 | 
				
			||||||
	pChipcHw->SoftReset2 |= (ctrl2 & (~chipcHw_REG_SOFT_RESET_UNHOLD_MASK));
 | 
						writel(readl(&pChipcHw->SoftReset2) | (ctrl2 &
 | 
				
			||||||
 | 
							(~chipcHw_REG_SOFT_RESET_UNHOLD_MASK)), &pChipcHw->SoftReset2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Process unhold requests */
 | 
						/* Process unhold requests */
 | 
				
			||||||
	if (ctrl2 & chipcHw_REG_SOFT_RESET_VPM_GLOBAL_UNHOLD) {
 | 
						if (ctrl2 & chipcHw_REG_SOFT_RESET_VPM_GLOBAL_UNHOLD) {
 | 
				
			||||||
| 
						 | 
					@ -246,7 +249,7 @@ static inline void chipcHw_softResetEnable(uint64_t mask)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (unhold) {
 | 
						if (unhold) {
 | 
				
			||||||
		/* Make sure unhold request is effective */
 | 
							/* Make sure unhold request is effective */
 | 
				
			||||||
		pChipcHw->SoftReset1 &= ~unhold;
 | 
							writel(readl(&pChipcHw->SoftReset1) & ~unhold, &pChipcHw->SoftReset1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -307,7 +310,7 @@ static inline void chipcHw_setOTPOption(uint64_t mask)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getStickyBits(void)
 | 
					static inline uint32_t chipcHw_getStickyBits(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return pChipcHw->Sticky;
 | 
						return readl(&pChipcHw->Sticky);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -328,7 +331,7 @@ static inline void chipcHw_setStickyBits(uint32_t mask)
 | 
				
			||||||
		bits |= chipcHw_REG_STICKY_POR_BROM;
 | 
							bits |= chipcHw_REG_STICKY_POR_BROM;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		uint32_t sticky;
 | 
							uint32_t sticky;
 | 
				
			||||||
		sticky = pChipcHw->Sticky;
 | 
							sticky = readl(pChipcHw->Sticky);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((mask & chipcHw_REG_STICKY_BOOT_DONE)
 | 
							if ((mask & chipcHw_REG_STICKY_BOOT_DONE)
 | 
				
			||||||
		    && (sticky & chipcHw_REG_STICKY_BOOT_DONE) == 0) {
 | 
							    && (sticky & chipcHw_REG_STICKY_BOOT_DONE) == 0) {
 | 
				
			||||||
| 
						 | 
					@ -355,7 +358,7 @@ static inline void chipcHw_setStickyBits(uint32_t mask)
 | 
				
			||||||
			bits |= chipcHw_REG_STICKY_GENERAL_5;
 | 
								bits |= chipcHw_REG_STICKY_GENERAL_5;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	pChipcHw->Sticky = bits;
 | 
						writel(bits, pChipcHw->Sticky);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -377,7 +380,7 @@ static inline void chipcHw_clearStickyBits(uint32_t mask)
 | 
				
			||||||
	    (chipcHw_REG_STICKY_BOOT_DONE | chipcHw_REG_STICKY_GENERAL_1 |
 | 
						    (chipcHw_REG_STICKY_BOOT_DONE | chipcHw_REG_STICKY_GENERAL_1 |
 | 
				
			||||||
	     chipcHw_REG_STICKY_GENERAL_2 | chipcHw_REG_STICKY_GENERAL_3 |
 | 
						     chipcHw_REG_STICKY_GENERAL_2 | chipcHw_REG_STICKY_GENERAL_3 |
 | 
				
			||||||
	     chipcHw_REG_STICKY_GENERAL_4 | chipcHw_REG_STICKY_GENERAL_5)) {
 | 
						     chipcHw_REG_STICKY_GENERAL_4 | chipcHw_REG_STICKY_GENERAL_5)) {
 | 
				
			||||||
		uint32_t sticky = pChipcHw->Sticky;
 | 
							uint32_t sticky = readl(&pChipcHw->Sticky);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((mask & chipcHw_REG_STICKY_BOOT_DONE)
 | 
							if ((mask & chipcHw_REG_STICKY_BOOT_DONE)
 | 
				
			||||||
		    && (sticky & chipcHw_REG_STICKY_BOOT_DONE)) {
 | 
							    && (sticky & chipcHw_REG_STICKY_BOOT_DONE)) {
 | 
				
			||||||
| 
						 | 
					@ -410,7 +413,7 @@ static inline void chipcHw_clearStickyBits(uint32_t mask)
 | 
				
			||||||
			mask &= ~chipcHw_REG_STICKY_GENERAL_5;
 | 
								mask &= ~chipcHw_REG_STICKY_GENERAL_5;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	pChipcHw->Sticky = bits | mask;
 | 
						writel(bits | mask, &pChipcHw->Sticky);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -426,7 +429,7 @@ static inline void chipcHw_clearStickyBits(uint32_t mask)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getSoftStraps(void)
 | 
					static inline uint32_t chipcHw_getSoftStraps(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return pChipcHw->SoftStraps;
 | 
						return readl(&pChipcHw->SoftStraps);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -456,7 +459,7 @@ static inline void chipcHw_setSoftStraps(uint32_t strapOptions)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getPinStraps(void)
 | 
					static inline uint32_t chipcHw_getPinStraps(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return pChipcHw->PinStraps;
 | 
						return readl(&pChipcHw->PinStraps);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -671,9 +674,9 @@ static inline void chipcHw_selectGE3(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline chipcHw_GPIO_FUNCTION_e chipcHw_getGpioPinFunction(int pin)
 | 
					static inline chipcHw_GPIO_FUNCTION_e chipcHw_getGpioPinFunction(int pin)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (*((uint32_t *) chipcHw_REG_GPIO_MUX(pin)) &
 | 
						return (readl(chipcHw_REG_GPIO_MUX(pin))) &
 | 
				
			||||||
		(chipcHw_REG_GPIO_MUX_MASK <<
 | 
							(chipcHw_REG_GPIO_MUX_MASK <<
 | 
				
			||||||
		 chipcHw_REG_GPIO_MUX_POSITION(pin))) >>
 | 
							 chipcHw_REG_GPIO_MUX_POSITION(pin)) >>
 | 
				
			||||||
	    chipcHw_REG_GPIO_MUX_POSITION(pin);
 | 
						    chipcHw_REG_GPIO_MUX_POSITION(pin);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -841,8 +844,8 @@ static inline void chipcHw_setUsbDevice(void)
 | 
				
			||||||
static inline void chipcHw_setClock(chipcHw_CLOCK_e clock,
 | 
					static inline void chipcHw_setClock(chipcHw_CLOCK_e clock,
 | 
				
			||||||
				    chipcHw_OPTYPE_e type, int mode)
 | 
									    chipcHw_OPTYPE_e type, int mode)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	volatile uint32_t *pPLLReg = (uint32_t *) 0x0;
 | 
						uint32_t __iomem *pPLLReg = NULL;
 | 
				
			||||||
	volatile uint32_t *pClockCtrl = (uint32_t *) 0x0;
 | 
						uint32_t __iomem *pClockCtrl = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (clock) {
 | 
						switch (clock) {
 | 
				
			||||||
	case chipcHw_CLOCK_DDR:
 | 
						case chipcHw_CLOCK_DDR:
 | 
				
			||||||
| 
						 | 
					@ -1071,7 +1074,7 @@ static inline void chipcHw_bypassClockDisable(chipcHw_CLOCK_e clock)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline int chipcHw_isSoftwareStrapsEnable(void)
 | 
					static inline int chipcHw_isSoftwareStrapsEnable(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return pChipcHw->SoftStraps & 0x00000001;
 | 
						return readl(&pChipcHw->SoftStraps) & 0x00000001;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -1138,7 +1141,7 @@ static inline void chipcHw_pll2TestDisable(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline int chipcHw_isPllTestEnable(void)
 | 
					static inline int chipcHw_isPllTestEnable(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return pChipcHw->PLLConfig & chipcHw_REG_PLL_CONFIG_TEST_ENABLE;
 | 
						return readl(&pChipcHw->PLLConfig) & chipcHw_REG_PLL_CONFIG_TEST_ENABLE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -1147,7 +1150,7 @@ static inline int chipcHw_isPllTestEnable(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline int chipcHw_isPll2TestEnable(void)
 | 
					static inline int chipcHw_isPll2TestEnable(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return pChipcHw->PLLConfig2 & chipcHw_REG_PLL_CONFIG_TEST_ENABLE;
 | 
						return readl(&pChipcHw->PLLConfig2) & chipcHw_REG_PLL_CONFIG_TEST_ENABLE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -1183,8 +1186,8 @@ static inline void chipcHw_pll2TestSelect(uint32_t val)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint8_t chipcHw_getPllTestSelected(void)
 | 
					static inline uint8_t chipcHw_getPllTestSelected(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (uint8_t) ((pChipcHw->
 | 
						return (uint8_t) ((readl(&pChipcHw->
 | 
				
			||||||
			   PLLConfig & chipcHw_REG_PLL_CONFIG_TEST_SELECT_MASK)
 | 
								   PLLConfig) & chipcHw_REG_PLL_CONFIG_TEST_SELECT_MASK)
 | 
				
			||||||
			  >> chipcHw_REG_PLL_CONFIG_TEST_SELECT_SHIFT);
 | 
								  >> chipcHw_REG_PLL_CONFIG_TEST_SELECT_SHIFT);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1194,8 +1197,8 @@ static inline uint8_t chipcHw_getPllTestSelected(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint8_t chipcHw_getPll2TestSelected(void)
 | 
					static inline uint8_t chipcHw_getPll2TestSelected(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (uint8_t) ((pChipcHw->
 | 
						return (uint8_t) ((readl(&pChipcHw->
 | 
				
			||||||
			   PLLConfig2 & chipcHw_REG_PLL_CONFIG_TEST_SELECT_MASK)
 | 
								   PLLConfig2) & chipcHw_REG_PLL_CONFIG_TEST_SELECT_MASK)
 | 
				
			||||||
			  >> chipcHw_REG_PLL_CONFIG_TEST_SELECT_SHIFT);
 | 
								  >> chipcHw_REG_PLL_CONFIG_TEST_SELECT_SHIFT);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1208,7 +1211,8 @@ static inline uint8_t chipcHw_getPll2TestSelected(void)
 | 
				
			||||||
static inline void chipcHw_pll1Disable(void)
 | 
					static inline void chipcHw_pll1Disable(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	pChipcHw->PLLConfig |= chipcHw_REG_PLL_CONFIG_POWER_DOWN;
 | 
						writel(readl(&pChipcHw->PLLConfig) | chipcHw_REG_PLL_CONFIG_POWER_DOWN,
 | 
				
			||||||
 | 
							&pChipcHw->PLLConfig);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1221,7 +1225,8 @@ static inline void chipcHw_pll1Disable(void)
 | 
				
			||||||
static inline void chipcHw_pll2Disable(void)
 | 
					static inline void chipcHw_pll2Disable(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	pChipcHw->PLLConfig2 |= chipcHw_REG_PLL_CONFIG_POWER_DOWN;
 | 
						writel(readl(&pChipcHw->PLLConfig2) | chipcHw_REG_PLL_CONFIG_POWER_DOWN,
 | 
				
			||||||
 | 
							&pChipcHw->PLLConfig2);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1233,7 +1238,8 @@ static inline void chipcHw_pll2Disable(void)
 | 
				
			||||||
static inline void chipcHw_ddrPhaseAlignInterruptEnable(void)
 | 
					static inline void chipcHw_ddrPhaseAlignInterruptEnable(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	pChipcHw->Spare1 |= chipcHw_REG_SPARE1_DDR_PHASE_INTR_ENABLE;
 | 
						writel(readl(&pChipcHw->Spare1) | chipcHw_REG_SPARE1_DDR_PHASE_INTR_ENABLE,
 | 
				
			||||||
 | 
							&pChipcHw->Spare1);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1245,7 +1251,8 @@ static inline void chipcHw_ddrPhaseAlignInterruptEnable(void)
 | 
				
			||||||
static inline void chipcHw_ddrPhaseAlignInterruptDisable(void)
 | 
					static inline void chipcHw_ddrPhaseAlignInterruptDisable(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	pChipcHw->Spare1 &= ~chipcHw_REG_SPARE1_DDR_PHASE_INTR_ENABLE;
 | 
						writel(readl(&pChipcHw->Spare1) & ~chipcHw_REG_SPARE1_DDR_PHASE_INTR_ENABLE,
 | 
				
			||||||
 | 
							&pChipcHw->Spare1);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1333,7 +1340,8 @@ static inline void chipcHw_ddrHwPhaseAlignDisable(void)
 | 
				
			||||||
static inline void chipcHw_vpmSwPhaseAlignEnable(void)
 | 
					static inline void chipcHw_vpmSwPhaseAlignEnable(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	pChipcHw->VPMPhaseCtrl1 |= chipcHw_REG_VPM_SW_PHASE_CTRL_ENABLE;
 | 
						writel(readl(&pChipcHw->VPMPhaseCtrl1) | chipcHw_REG_VPM_SW_PHASE_CTRL_ENABLE,
 | 
				
			||||||
 | 
								&pChipcHw->VPMPhaseCtrl1);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1372,7 +1380,8 @@ static inline void chipcHw_vpmHwPhaseAlignEnable(void)
 | 
				
			||||||
static inline void chipcHw_vpmHwPhaseAlignDisable(void)
 | 
					static inline void chipcHw_vpmHwPhaseAlignDisable(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	pChipcHw->VPMPhaseCtrl1 &= ~chipcHw_REG_VPM_HW_PHASE_CTRL_ENABLE;
 | 
						writel(readl(&pChipcHw->VPMPhaseCtrl1) & ~chipcHw_REG_VPM_HW_PHASE_CTRL_ENABLE,
 | 
				
			||||||
 | 
							&pChipcHw->VPMPhaseCtrl1);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1474,8 +1483,8 @@ chipcHw_setVpmHwPhaseAlignMargin(chipcHw_VPM_HW_PHASE_MARGIN_e margin)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_isDdrHwPhaseAligned(void)
 | 
					static inline uint32_t chipcHw_isDdrHwPhaseAligned(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (pChipcHw->
 | 
						return (readl(&pChipcHw->
 | 
				
			||||||
		PhaseAlignStatus & chipcHw_REG_DDR_PHASE_ALIGNED) ? 1 : 0;
 | 
							PhaseAlignStatus) & chipcHw_REG_DDR_PHASE_ALIGNED) ? 1 : 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -1488,8 +1497,8 @@ static inline uint32_t chipcHw_isDdrHwPhaseAligned(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_isVpmHwPhaseAligned(void)
 | 
					static inline uint32_t chipcHw_isVpmHwPhaseAligned(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (pChipcHw->
 | 
						return (readl(&pChipcHw->
 | 
				
			||||||
		PhaseAlignStatus & chipcHw_REG_VPM_PHASE_ALIGNED) ? 1 : 0;
 | 
							PhaseAlignStatus) & chipcHw_REG_VPM_PHASE_ALIGNED) ? 1 : 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -1500,8 +1509,8 @@ static inline uint32_t chipcHw_isVpmHwPhaseAligned(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getDdrHwPhaseAlignStatus(void)
 | 
					static inline uint32_t chipcHw_getDdrHwPhaseAlignStatus(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (pChipcHw->
 | 
						return (readl(&pChipcHw->
 | 
				
			||||||
		PhaseAlignStatus & chipcHw_REG_DDR_PHASE_STATUS_MASK) >>
 | 
							PhaseAlignStatus) & chipcHw_REG_DDR_PHASE_STATUS_MASK) >>
 | 
				
			||||||
	    chipcHw_REG_DDR_PHASE_STATUS_SHIFT;
 | 
						    chipcHw_REG_DDR_PHASE_STATUS_SHIFT;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1513,8 +1522,8 @@ static inline uint32_t chipcHw_getDdrHwPhaseAlignStatus(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getVpmHwPhaseAlignStatus(void)
 | 
					static inline uint32_t chipcHw_getVpmHwPhaseAlignStatus(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (pChipcHw->
 | 
						return (readl(&pChipcHw->
 | 
				
			||||||
		PhaseAlignStatus & chipcHw_REG_VPM_PHASE_STATUS_MASK) >>
 | 
							PhaseAlignStatus) & chipcHw_REG_VPM_PHASE_STATUS_MASK) >>
 | 
				
			||||||
	    chipcHw_REG_VPM_PHASE_STATUS_SHIFT;
 | 
						    chipcHw_REG_VPM_PHASE_STATUS_SHIFT;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1526,8 +1535,8 @@ static inline uint32_t chipcHw_getVpmHwPhaseAlignStatus(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getDdrPhaseControl(void)
 | 
					static inline uint32_t chipcHw_getDdrPhaseControl(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (pChipcHw->
 | 
						return (readl(&pChipcHw->
 | 
				
			||||||
		PhaseAlignStatus & chipcHw_REG_DDR_PHASE_CTRL_MASK) >>
 | 
							PhaseAlignStatus) & chipcHw_REG_DDR_PHASE_CTRL_MASK) >>
 | 
				
			||||||
	    chipcHw_REG_DDR_PHASE_CTRL_SHIFT;
 | 
						    chipcHw_REG_DDR_PHASE_CTRL_SHIFT;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1539,8 +1548,8 @@ static inline uint32_t chipcHw_getDdrPhaseControl(void)
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t chipcHw_getVpmPhaseControl(void)
 | 
					static inline uint32_t chipcHw_getVpmPhaseControl(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (pChipcHw->
 | 
						return (readl(&pChipcHw->
 | 
				
			||||||
		PhaseAlignStatus & chipcHw_REG_VPM_PHASE_CTRL_MASK) >>
 | 
							PhaseAlignStatus) & chipcHw_REG_VPM_PHASE_CTRL_MASK) >>
 | 
				
			||||||
	    chipcHw_REG_VPM_PHASE_CTRL_SHIFT;
 | 
						    chipcHw_REG_VPM_PHASE_CTRL_SHIFT;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
#define CHIPCHW_REG_H
 | 
					#define CHIPCHW_REG_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mach/csp/mm_io.h>
 | 
					#include <mach/csp/mm_io.h>
 | 
				
			||||||
#include <csp/reg.h>
 | 
					#include <mach/csp/reg.h>
 | 
				
			||||||
#include <mach/csp/ddrcReg.h>
 | 
					#include <mach/csp/ddrcReg.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define chipcHw_BASE_ADDRESS    MM_IO_BASE_CHIPC
 | 
					#define chipcHw_BASE_ADDRESS    MM_IO_BASE_CHIPC
 | 
				
			||||||
| 
						 | 
					@ -131,8 +131,8 @@ typedef struct {
 | 
				
			||||||
	uint32_t MiscInput_0_15;	/* Input type for MISC 0 - 16 */
 | 
						uint32_t MiscInput_0_15;	/* Input type for MISC 0 - 16 */
 | 
				
			||||||
} chipcHw_REG_t;
 | 
					} chipcHw_REG_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define pChipcHw  ((volatile chipcHw_REG_t *) chipcHw_BASE_ADDRESS)
 | 
					#define pChipcHw  ((chipcHw_REG_t __iomem *) chipcHw_BASE_ADDRESS)
 | 
				
			||||||
#define pChipcPhysical  ((volatile chipcHw_REG_t *) MM_ADDR_IO_CHIPC)
 | 
					#define pChipcPhysical  (MM_ADDR_IO_CHIPC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define chipcHw_REG_CHIPID_BASE_MASK                    0xFFFFF000
 | 
					#define chipcHw_REG_CHIPID_BASE_MASK                    0xFFFFF000
 | 
				
			||||||
#define chipcHw_REG_CHIPID_BASE_SHIFT                   12
 | 
					#define chipcHw_REG_CHIPID_BASE_SHIFT                   12
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,8 +30,8 @@ extern "C" {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/reg.h>
 | 
					#include <mach/csp/reg.h>
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mach/csp/mm_io.h>
 | 
					#include <mach/csp/mm_io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -416,7 +416,7 @@ extern "C" {
 | 
				
			||||||
	} ddrcReg_PHY_ADDR_CTL_REG_t;
 | 
						} ddrcReg_PHY_ADDR_CTL_REG_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ddrcReg_PHY_ADDR_CTL_REG_OFFSET                 0x0400
 | 
					#define ddrcReg_PHY_ADDR_CTL_REG_OFFSET                 0x0400
 | 
				
			||||||
#define ddrcReg_PHY_ADDR_CTL_REGP                       ((volatile ddrcReg_PHY_ADDR_CTL_REG_t *) (MM_IO_BASE_DDRC + ddrcReg_PHY_ADDR_CTL_REG_OFFSET))
 | 
					#define ddrcReg_PHY_ADDR_CTL_REGP                       ((volatile ddrcReg_PHY_ADDR_CTL_REG_t __iomem*) (MM_IO_BASE_DDRC + ddrcReg_PHY_ADDR_CTL_REG_OFFSET))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* @todo These SS definitions are duplicates of ones below */
 | 
					/* @todo These SS definitions are duplicates of ones below */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,9 +23,9 @@
 | 
				
			||||||
#ifndef _DMACHW_H
 | 
					#ifndef _DMACHW_H
 | 
				
			||||||
#define _DMACHW_H
 | 
					#define _DMACHW_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stddef.h>
 | 
					#include <linux/stddef.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <mach/csp/dmacHw_reg.h>
 | 
					#include <mach/csp/dmacHw_reg.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Define DMA Channel ID using DMA controller number (m) and channel number (c).
 | 
					/* Define DMA Channel ID using DMA controller number (m) and channel number (c).
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
#ifndef _DMACHW_PRIV_H
 | 
					#ifndef _DMACHW_PRIV_H
 | 
				
			||||||
#define _DMACHW_PRIV_H
 | 
					#define _DMACHW_PRIV_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Data type for DMA Link List Item */
 | 
					/* Data type for DMA Link List Item */
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
#ifndef _DMACHW_REG_H
 | 
					#ifndef _DMACHW_REG_H
 | 
				
			||||||
#define _DMACHW_REG_H
 | 
					#define _DMACHW_REG_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <mach/csp/mm_io.h>
 | 
					#include <mach/csp/mm_io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Data type for 64 bit little endian register */
 | 
					/* Data type for 64 bit little endian register */
 | 
				
			||||||
| 
						 | 
					@ -121,75 +121,75 @@ typedef struct {
 | 
				
			||||||
} dmacHw_MISC_t;
 | 
					} dmacHw_MISC_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Base registers */
 | 
					/* Base registers */
 | 
				
			||||||
#define dmacHw_0_MODULE_BASE_ADDR        (char *) MM_IO_BASE_DMA0	/* DMAC 0 module's base address */
 | 
					#define dmacHw_0_MODULE_BASE_ADDR        (char __iomem*) MM_IO_BASE_DMA0	/* DMAC 0 module's base address */
 | 
				
			||||||
#define dmacHw_1_MODULE_BASE_ADDR        (char *) MM_IO_BASE_DMA1	/* DMAC 1 module's base address */
 | 
					#define dmacHw_1_MODULE_BASE_ADDR        (char __iomem*) MM_IO_BASE_DMA1	/* DMAC 1 module's base address */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern uint32_t dmaChannelCount_0;
 | 
					extern uint32_t dmaChannelCount_0;
 | 
				
			||||||
extern uint32_t dmaChannelCount_1;
 | 
					extern uint32_t dmaChannelCount_1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Define channel specific registers */
 | 
					/* Define channel specific registers */
 | 
				
			||||||
#define dmacHw_CHAN_BASE(module, chan)          ((dmacHw_CH_REG_t *) ((char *)((module) ? dmacHw_1_MODULE_BASE_ADDR : dmacHw_0_MODULE_BASE_ADDR) + ((chan) * sizeof(dmacHw_CH_REG_t))))
 | 
					#define dmacHw_CHAN_BASE(module, chan)          ((dmacHw_CH_REG_t __iomem*) ((char __iomem*)((module) ? dmacHw_1_MODULE_BASE_ADDR : dmacHw_0_MODULE_BASE_ADDR) + ((chan) * sizeof(dmacHw_CH_REG_t))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Raw interrupt status registers */
 | 
					/* Raw interrupt status registers */
 | 
				
			||||||
#define dmacHw_REG_INT_RAW_BASE(module)         ((char *)dmacHw_CHAN_BASE((module), ((module) ? dmaChannelCount_1 : dmaChannelCount_0)))
 | 
					#define dmacHw_REG_INT_RAW_BASE(module)         ((char __iomem *)dmacHw_CHAN_BASE((module), ((module) ? dmaChannelCount_1 : dmaChannelCount_0)))
 | 
				
			||||||
#define dmacHw_REG_INT_RAW_TRAN(module)         (((dmacHw_INT_RAW_t *) dmacHw_REG_INT_RAW_BASE((module)))->RawTfr.lo)
 | 
					#define dmacHw_REG_INT_RAW_TRAN(module)         (((dmacHw_INT_RAW_t __iomem *) dmacHw_REG_INT_RAW_BASE((module)))->RawTfr.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_RAW_BLOCK(module)        (((dmacHw_INT_RAW_t *) dmacHw_REG_INT_RAW_BASE((module)))->RawBlock.lo)
 | 
					#define dmacHw_REG_INT_RAW_BLOCK(module)        (((dmacHw_INT_RAW_t __iomem *) dmacHw_REG_INT_RAW_BASE((module)))->RawBlock.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_RAW_STRAN(module)        (((dmacHw_INT_RAW_t *) dmacHw_REG_INT_RAW_BASE((module)))->RawSrcTran.lo)
 | 
					#define dmacHw_REG_INT_RAW_STRAN(module)        (((dmacHw_INT_RAW_t __iomem *) dmacHw_REG_INT_RAW_BASE((module)))->RawSrcTran.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_RAW_DTRAN(module)        (((dmacHw_INT_RAW_t *) dmacHw_REG_INT_RAW_BASE((module)))->RawDstTran.lo)
 | 
					#define dmacHw_REG_INT_RAW_DTRAN(module)        (((dmacHw_INT_RAW_t __iomem *) dmacHw_REG_INT_RAW_BASE((module)))->RawDstTran.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_RAW_ERROR(module)        (((dmacHw_INT_RAW_t *) dmacHw_REG_INT_RAW_BASE((module)))->RawErr.lo)
 | 
					#define dmacHw_REG_INT_RAW_ERROR(module)        (((dmacHw_INT_RAW_t __iomem *) dmacHw_REG_INT_RAW_BASE((module)))->RawErr.lo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Interrupt status registers */
 | 
					/* Interrupt status registers */
 | 
				
			||||||
#define dmacHw_REG_INT_STAT_BASE(module)        ((char *)(dmacHw_REG_INT_RAW_BASE((module)) + sizeof(dmacHw_INT_RAW_t)))
 | 
					#define dmacHw_REG_INT_STAT_BASE(module)        ((char __iomem*)(dmacHw_REG_INT_RAW_BASE((module)) + sizeof(dmacHw_INT_RAW_t)))
 | 
				
			||||||
#define dmacHw_REG_INT_STAT_TRAN(module)        (((dmacHw_INT_STATUS_t *) dmacHw_REG_INT_STAT_BASE((module)))->StatusTfr.lo)
 | 
					#define dmacHw_REG_INT_STAT_TRAN(module)        (((dmacHw_INT_STATUS_t __iomem *) dmacHw_REG_INT_STAT_BASE((module)))->StatusTfr.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_STAT_BLOCK(module)       (((dmacHw_INT_STATUS_t *) dmacHw_REG_INT_STAT_BASE((module)))->StatusBlock.lo)
 | 
					#define dmacHw_REG_INT_STAT_BLOCK(module)       (((dmacHw_INT_STATUS_t __iomem *) dmacHw_REG_INT_STAT_BASE((module)))->StatusBlock.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_STAT_STRAN(module)       (((dmacHw_INT_STATUS_t *) dmacHw_REG_INT_STAT_BASE((module)))->StatusSrcTran.lo)
 | 
					#define dmacHw_REG_INT_STAT_STRAN(module)       (((dmacHw_INT_STATUS_t __iomem *) dmacHw_REG_INT_STAT_BASE((module)))->StatusSrcTran.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_STAT_DTRAN(module)       (((dmacHw_INT_STATUS_t *) dmacHw_REG_INT_STAT_BASE((module)))->StatusDstTran.lo)
 | 
					#define dmacHw_REG_INT_STAT_DTRAN(module)       (((dmacHw_INT_STATUS_t __iomem *) dmacHw_REG_INT_STAT_BASE((module)))->StatusDstTran.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_STAT_ERROR(module)       (((dmacHw_INT_STATUS_t *) dmacHw_REG_INT_STAT_BASE((module)))->StatusErr.lo)
 | 
					#define dmacHw_REG_INT_STAT_ERROR(module)       (((dmacHw_INT_STATUS_t __iomem *) dmacHw_REG_INT_STAT_BASE((module)))->StatusErr.lo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Interrupt status registers */
 | 
					/* Interrupt status registers */
 | 
				
			||||||
#define dmacHw_REG_INT_MASK_BASE(module)        ((char *)(dmacHw_REG_INT_STAT_BASE((module)) + sizeof(dmacHw_INT_STATUS_t)))
 | 
					#define dmacHw_REG_INT_MASK_BASE(module)        ((char __iomem*)(dmacHw_REG_INT_STAT_BASE((module)) + sizeof(dmacHw_INT_STATUS_t)))
 | 
				
			||||||
#define dmacHw_REG_INT_MASK_TRAN(module)        (((dmacHw_INT_MASK_t *) dmacHw_REG_INT_MASK_BASE((module)))->MaskTfr.lo)
 | 
					#define dmacHw_REG_INT_MASK_TRAN(module)        (((dmacHw_INT_MASK_t __iomem *) dmacHw_REG_INT_MASK_BASE((module)))->MaskTfr.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_MASK_BLOCK(module)       (((dmacHw_INT_MASK_t *) dmacHw_REG_INT_MASK_BASE((module)))->MaskBlock.lo)
 | 
					#define dmacHw_REG_INT_MASK_BLOCK(module)       (((dmacHw_INT_MASK_t __iomem *) dmacHw_REG_INT_MASK_BASE((module)))->MaskBlock.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_MASK_STRAN(module)       (((dmacHw_INT_MASK_t *) dmacHw_REG_INT_MASK_BASE((module)))->MaskSrcTran.lo)
 | 
					#define dmacHw_REG_INT_MASK_STRAN(module)       (((dmacHw_INT_MASK_t __iomem *) dmacHw_REG_INT_MASK_BASE((module)))->MaskSrcTran.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_MASK_DTRAN(module)       (((dmacHw_INT_MASK_t *) dmacHw_REG_INT_MASK_BASE((module)))->MaskDstTran.lo)
 | 
					#define dmacHw_REG_INT_MASK_DTRAN(module)       (((dmacHw_INT_MASK_t __iomem *) dmacHw_REG_INT_MASK_BASE((module)))->MaskDstTran.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_MASK_ERROR(module)       (((dmacHw_INT_MASK_t *) dmacHw_REG_INT_MASK_BASE((module)))->MaskErr.lo)
 | 
					#define dmacHw_REG_INT_MASK_ERROR(module)       (((dmacHw_INT_MASK_t __iomem *) dmacHw_REG_INT_MASK_BASE((module)))->MaskErr.lo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Interrupt clear registers */
 | 
					/* Interrupt clear registers */
 | 
				
			||||||
#define dmacHw_REG_INT_CLEAR_BASE(module)       ((char *)(dmacHw_REG_INT_MASK_BASE((module)) + sizeof(dmacHw_INT_MASK_t)))
 | 
					#define dmacHw_REG_INT_CLEAR_BASE(module)       ((char __iomem*)(dmacHw_REG_INT_MASK_BASE((module)) + sizeof(dmacHw_INT_MASK_t)))
 | 
				
			||||||
#define dmacHw_REG_INT_CLEAR_TRAN(module)       (((dmacHw_INT_CLEAR_t *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearTfr.lo)
 | 
					#define dmacHw_REG_INT_CLEAR_TRAN(module)       (((dmacHw_INT_CLEAR_t __iomem *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearTfr.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_CLEAR_BLOCK(module)      (((dmacHw_INT_CLEAR_t *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearBlock.lo)
 | 
					#define dmacHw_REG_INT_CLEAR_BLOCK(module)      (((dmacHw_INT_CLEAR_t __iomem *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearBlock.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_CLEAR_STRAN(module)      (((dmacHw_INT_CLEAR_t *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearSrcTran.lo)
 | 
					#define dmacHw_REG_INT_CLEAR_STRAN(module)      (((dmacHw_INT_CLEAR_t __iomem *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearSrcTran.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_CLEAR_DTRAN(module)      (((dmacHw_INT_CLEAR_t *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearDstTran.lo)
 | 
					#define dmacHw_REG_INT_CLEAR_DTRAN(module)      (((dmacHw_INT_CLEAR_t __iomem *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearDstTran.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_CLEAR_ERROR(module)      (((dmacHw_INT_CLEAR_t *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearErr.lo)
 | 
					#define dmacHw_REG_INT_CLEAR_ERROR(module)      (((dmacHw_INT_CLEAR_t __iomem *) dmacHw_REG_INT_CLEAR_BASE((module)))->ClearErr.lo)
 | 
				
			||||||
#define dmacHw_REG_INT_STATUS(module)           (((dmacHw_INT_CLEAR_t *) dmacHw_REG_INT_CLEAR_BASE((module)))->StatusInt.lo)
 | 
					#define dmacHw_REG_INT_STATUS(module)           (((dmacHw_INT_CLEAR_t __iomem *) dmacHw_REG_INT_CLEAR_BASE((module)))->StatusInt.lo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Software handshaking registers */
 | 
					/* Software handshaking registers */
 | 
				
			||||||
#define dmacHw_REG_SW_HS_BASE(module)           ((char *)(dmacHw_REG_INT_CLEAR_BASE((module)) + sizeof(dmacHw_INT_CLEAR_t)))
 | 
					#define dmacHw_REG_SW_HS_BASE(module)           ((char __iomem*)(dmacHw_REG_INT_CLEAR_BASE((module)) + sizeof(dmacHw_INT_CLEAR_t)))
 | 
				
			||||||
#define dmacHw_REG_SW_HS_SRC_REQ(module)        (((dmacHw_SW_HANDSHAKE_t *) dmacHw_REG_SW_HS_BASE((module)))->ReqSrcReg.lo)
 | 
					#define dmacHw_REG_SW_HS_SRC_REQ(module)        (((dmacHw_SW_HANDSHAKE_t __iomem *) dmacHw_REG_SW_HS_BASE((module)))->ReqSrcReg.lo)
 | 
				
			||||||
#define dmacHw_REG_SW_HS_DST_REQ(module)        (((dmacHw_SW_HANDSHAKE_t *) dmacHw_REG_SW_HS_BASE((module)))->ReqDstReg.lo)
 | 
					#define dmacHw_REG_SW_HS_DST_REQ(module)        (((dmacHw_SW_HANDSHAKE_t __iomem *) dmacHw_REG_SW_HS_BASE((module)))->ReqDstReg.lo)
 | 
				
			||||||
#define dmacHw_REG_SW_HS_SRC_SGL_REQ(module)    (((dmacHw_SW_HANDSHAKE_t *) dmacHw_REG_SW_HS_BASE((module)))->SglReqSrcReg.lo)
 | 
					#define dmacHw_REG_SW_HS_SRC_SGL_REQ(module)    (((dmacHw_SW_HANDSHAKE_t __iomem *) dmacHw_REG_SW_HS_BASE((module)))->SglReqSrcReg.lo)
 | 
				
			||||||
#define dmacHw_REG_SW_HS_DST_SGL_REQ(module)    (((dmacHw_SW_HANDSHAKE_t *) dmacHw_REG_SW_HS_BASE((module)))->SglReqDstReg.lo)
 | 
					#define dmacHw_REG_SW_HS_DST_SGL_REQ(module)    (((dmacHw_SW_HANDSHAKE_t __iomem *) dmacHw_REG_SW_HS_BASE((module)))->SglReqDstReg.lo)
 | 
				
			||||||
#define dmacHw_REG_SW_HS_SRC_LST_REQ(module)    (((dmacHw_SW_HANDSHAKE_t *) dmacHw_REG_SW_HS_BASE((module)))->LstSrcReg.lo)
 | 
					#define dmacHw_REG_SW_HS_SRC_LST_REQ(module)    (((dmacHw_SW_HANDSHAKE_t __iomem *) dmacHw_REG_SW_HS_BASE((module)))->LstSrcReg.lo)
 | 
				
			||||||
#define dmacHw_REG_SW_HS_DST_LST_REQ(module)    (((dmacHw_SW_HANDSHAKE_t *) dmacHw_REG_SW_HS_BASE((module)))->LstDstReg.lo)
 | 
					#define dmacHw_REG_SW_HS_DST_LST_REQ(module)    (((dmacHw_SW_HANDSHAKE_t __iomem *) dmacHw_REG_SW_HS_BASE((module)))->LstDstReg.lo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Miscellaneous registers */
 | 
					/* Miscellaneous registers */
 | 
				
			||||||
#define dmacHw_REG_MISC_BASE(module)            ((char *)(dmacHw_REG_SW_HS_BASE((module)) + sizeof(dmacHw_SW_HANDSHAKE_t)))
 | 
					#define dmacHw_REG_MISC_BASE(module)            ((char __iomem*)(dmacHw_REG_SW_HS_BASE((module)) + sizeof(dmacHw_SW_HANDSHAKE_t)))
 | 
				
			||||||
#define dmacHw_REG_MISC_CFG(module)             (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->DmaCfgReg.lo)
 | 
					#define dmacHw_REG_MISC_CFG(module)             (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->DmaCfgReg.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_CH_ENABLE(module)       (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->ChEnReg.lo)
 | 
					#define dmacHw_REG_MISC_CH_ENABLE(module)       (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->ChEnReg.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_ID(module)              (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->DmaIdReg.lo)
 | 
					#define dmacHw_REG_MISC_ID(module)              (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->DmaIdReg.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_TEST(module)            (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->DmaTestReg.lo)
 | 
					#define dmacHw_REG_MISC_TEST(module)            (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->DmaTestReg.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM1_LO(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm1.lo)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM1_LO(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm1.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM1_HI(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm1.hi)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM1_HI(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm1.hi)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM2_LO(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm2.lo)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM2_LO(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm2.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM2_HI(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm2.hi)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM2_HI(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm2.hi)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM3_LO(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm3.lo)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM3_LO(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm3.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM3_HI(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm3.hi)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM3_HI(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm3.hi)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM4_LO(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm4.lo)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM4_LO(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm4.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM4_HI(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm4.hi)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM4_HI(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm4.hi)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM5_LO(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm5.lo)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM5_LO(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm5.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM5_HI(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm5.hi)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM5_HI(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm5.hi)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM6_LO(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm6.lo)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM6_LO(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm6.lo)
 | 
				
			||||||
#define dmacHw_REG_MISC_COMP_PARAM6_HI(module)  (((dmacHw_MISC_t *) dmacHw_REG_MISC_BASE((module)))->CompParm6.hi)
 | 
					#define dmacHw_REG_MISC_COMP_PARAM6_HI(module)  (((dmacHw_MISC_t __iomem*) dmacHw_REG_MISC_BASE((module)))->CompParm6.hi)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Channel control registers */
 | 
					/* Channel control registers */
 | 
				
			||||||
#define dmacHw_REG_SAR(module, chan)            (dmacHw_CHAN_BASE((module), (chan))->ChannelSar.lo)
 | 
					#define dmacHw_REG_SAR(module, chan)            (dmacHw_CHAN_BASE((module), (chan))->ChannelSar.lo)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <cfg_global.h>
 | 
					#include <mach/cfg_global.h>
 | 
				
			||||||
#include <mach/csp/cap_inline.h>
 | 
					#include <mach/csp/cap_inline.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__KERNEL__)
 | 
					#if defined(__KERNEL__)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,8 +27,8 @@
 | 
				
			||||||
#define _INTCHW_REG_H
 | 
					#define _INTCHW_REG_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <csp/reg.h>
 | 
					#include <mach/csp/reg.h>
 | 
				
			||||||
#include <mach/csp/mm_io.h>
 | 
					#include <mach/csp/mm_io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					/* ---- Public Constants and Types --------------------------------------- */
 | 
				
			||||||
| 
						 | 
					@ -37,9 +37,9 @@
 | 
				
			||||||
#define INTCHW_NUM_INTC           3
 | 
					#define INTCHW_NUM_INTC           3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Defines for interrupt controllers. This simplifies and cleans up the function calls. */
 | 
					/* Defines for interrupt controllers. This simplifies and cleans up the function calls. */
 | 
				
			||||||
#define INTCHW_INTC0    ((void *)MM_IO_BASE_INTC0)
 | 
					#define INTCHW_INTC0    (MM_IO_BASE_INTC0)
 | 
				
			||||||
#define INTCHW_INTC1    ((void *)MM_IO_BASE_INTC1)
 | 
					#define INTCHW_INTC1    (MM_IO_BASE_INTC1)
 | 
				
			||||||
#define INTCHW_SINTC    ((void *)MM_IO_BASE_SINTC)
 | 
					#define INTCHW_SINTC    (MM_IO_BASE_SINTC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* INTC0 - interrupt controller 0 */
 | 
					/* INTC0 - interrupt controller 0 */
 | 
				
			||||||
#define INTCHW_INTC0_PIF_BITNUM           31	/* Peripheral interface interrupt */
 | 
					#define INTCHW_INTC0_PIF_BITNUM           31	/* Peripheral interface interrupt */
 | 
				
			||||||
| 
						 | 
					@ -232,15 +232,15 @@
 | 
				
			||||||
/* ---- Public Variable Externs ------------------------------------------ */
 | 
					/* ---- Public Variable Externs ------------------------------------------ */
 | 
				
			||||||
/* ---- Public Function Prototypes --------------------------------------- */
 | 
					/* ---- Public Function Prototypes --------------------------------------- */
 | 
				
			||||||
/* Clear one or more IRQ interrupts. */
 | 
					/* Clear one or more IRQ interrupts. */
 | 
				
			||||||
static inline void intcHw_irq_disable(void *basep, uint32_t mask)
 | 
					static inline void intcHw_irq_disable(void __iomem *basep, uint32_t mask)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__REG32(basep + INTCHW_INTENCLEAR) = mask;
 | 
						writel(mask, basep + INTCHW_INTENCLEAR);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Enables one or more IRQ interrupts. */
 | 
					/* Enables one or more IRQ interrupts. */
 | 
				
			||||||
static inline void intcHw_irq_enable(void *basep, uint32_t mask)
 | 
					static inline void intcHw_irq_enable(void __iomem *basep, uint32_t mask)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__REG32(basep + INTCHW_INTENABLE) = mask;
 | 
						writel(mask, basep + INTCHW_INTENABLE);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* _INTCHW_REG_H */
 | 
					#endif /* _INTCHW_REG_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CSP_SIMULATION)
 | 
					#if !defined(CSP_SIMULATION)
 | 
				
			||||||
#include <cfg_global.h>
 | 
					#include <mach/cfg_global.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					/* ---- Public Constants and Types --------------------------------------- */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@
 | 
				
			||||||
#include <mach/csp/mm_addr.h>
 | 
					#include <mach/csp/mm_addr.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CSP_SIMULATION)
 | 
					#if !defined(CSP_SIMULATION)
 | 
				
			||||||
#include <cfg_global.h>
 | 
					#include <mach/cfg_global.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					/* ---- Public Constants and Types --------------------------------------- */
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@
 | 
				
			||||||
#ifdef __ASSEMBLY__
 | 
					#ifdef __ASSEMBLY__
 | 
				
			||||||
#define MM_IO_PHYS_TO_VIRT(phys)       (0xF0000000 | (((phys) >> 4) & 0x0F000000) | ((phys) & 0xFFFFFF))
 | 
					#define MM_IO_PHYS_TO_VIRT(phys)       (0xF0000000 | (((phys) >> 4) & 0x0F000000) | ((phys) & 0xFFFFFF))
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define MM_IO_PHYS_TO_VIRT(phys)       (((phys) == MM_ADDR_IO_VPM_EXTMEM_RSVD) ? 0xF0000000 : \
 | 
					#define MM_IO_PHYS_TO_VIRT(phys)       (void __iomem *)(((phys) == MM_ADDR_IO_VPM_EXTMEM_RSVD) ? 0xF0000000 : \
 | 
				
			||||||
			(0xF0000000 | (((phys) >> 4) & 0x0F000000) | ((phys) & 0xFFFFFF)))
 | 
								(0xF0000000 | (((phys) >> 4) & 0x0F000000) | ((phys) & 0xFFFFFF)))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -60,8 +60,8 @@
 | 
				
			||||||
#ifdef __ASSEMBLY__
 | 
					#ifdef __ASSEMBLY__
 | 
				
			||||||
#define MM_IO_VIRT_TO_PHYS(virt)       ((((virt) & 0x0F000000) << 4) | ((virt) & 0xFFFFFF))
 | 
					#define MM_IO_VIRT_TO_PHYS(virt)       ((((virt) & 0x0F000000) << 4) | ((virt) & 0xFFFFFF))
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define MM_IO_VIRT_TO_PHYS(virt)       (((virt) == 0xF0000000) ? MM_ADDR_IO_VPM_EXTMEM_RSVD : \
 | 
					#define MM_IO_VIRT_TO_PHYS(virt)       (((unsigned long)(virt) == 0xF0000000) ? MM_ADDR_IO_VPM_EXTMEM_RSVD : \
 | 
				
			||||||
			((((virt) & 0x0F000000) << 4) | ((virt) & 0xFFFFFF)))
 | 
								((((unsigned long)(virt) & 0x0F000000) << 4) | ((unsigned long)(virt) & 0xFFFFFF)))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,13 +25,14 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
 | 
					#include <linux/io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Public Constants and Types --------------------------------------- */
 | 
					/* ---- Public Constants and Types --------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define __REG32(x)      (*((volatile uint32_t *)(x)))
 | 
					#define __REG32(x)      (*((volatile uint32_t __iomem *)(x)))
 | 
				
			||||||
#define __REG16(x)      (*((volatile uint16_t *)(x)))
 | 
					#define __REG16(x)      (*((volatile uint16_t __iomem *)(x)))
 | 
				
			||||||
#define __REG8(x)       (*((volatile uint8_t *) (x)))
 | 
					#define __REG8(x)       (*((volatile uint8_t __iomem *) (x)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Macros used to define a sequence of reserved registers. The start / end */
 | 
					/* Macros used to define a sequence of reserved registers. The start / end */
 | 
				
			||||||
/* are byte offsets in the particular register definition, with the "end" */
 | 
					/* are byte offsets in the particular register definition, with the "end" */
 | 
				
			||||||
| 
						 | 
					@ -84,31 +85,31 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void reg32_modify_and(volatile uint32_t *reg, uint32_t value)
 | 
					static inline void reg32_modify_and(volatile uint32_t __iomem *reg, uint32_t value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	*reg &= value;
 | 
						__raw_writel(__raw_readl(reg) & value, reg);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void reg32_modify_or(volatile uint32_t *reg, uint32_t value)
 | 
					static inline void reg32_modify_or(volatile uint32_t __iomem *reg, uint32_t value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	*reg |= value;
 | 
						__raw_writel(__raw_readl(reg) | value, reg);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void reg32_modify_mask(volatile uint32_t *reg, uint32_t mask,
 | 
					static inline void reg32_modify_mask(volatile uint32_t __iomem *reg, uint32_t mask,
 | 
				
			||||||
				     uint32_t value)
 | 
									     uint32_t value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	REG_LOCAL_IRQ_SAVE;
 | 
						REG_LOCAL_IRQ_SAVE;
 | 
				
			||||||
	*reg = (*reg & mask) | value;
 | 
						__raw_writel((__raw_readl(reg) & mask) | value, reg);
 | 
				
			||||||
	REG_LOCAL_IRQ_RESTORE;
 | 
						REG_LOCAL_IRQ_RESTORE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void reg32_write(volatile uint32_t *reg, uint32_t value)
 | 
					static inline void reg32_write(volatile uint32_t __iomem *reg, uint32_t value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	*reg = value;
 | 
						__raw_writel(value, reg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* CSP_REG_H */
 | 
					#endif /* CSP_REG_H */
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline void secHw_setSecure(uint32_t mask	/*  mask of type secHw_BLK_MASK_XXXXXX */
 | 
					static inline void secHw_setSecure(uint32_t mask	/*  mask of type secHw_BLK_MASK_XXXXXX */
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
	secHw_REGS_t *regp = (secHw_REGS_t *) MM_IO_BASE_TZPC;
 | 
						secHw_REGS_t __iomem *regp = MM_IO_BASE_TZPC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (mask & 0x0000FFFF) {
 | 
						if (mask & 0x0000FFFF) {
 | 
				
			||||||
		regp->reg[secHw_IDX_LS].setSecure = mask & 0x0000FFFF;
 | 
							regp->reg[secHw_IDX_LS].setSecure = mask & 0x0000FFFF;
 | 
				
			||||||
| 
						 | 
					@ -53,13 +53,13 @@ static inline void secHw_setSecure(uint32_t mask	/*  mask of type secHw_BLK_MASK
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline void secHw_setUnsecure(uint32_t mask	/*  mask of type secHw_BLK_MASK_XXXXXX */
 | 
					static inline void secHw_setUnsecure(uint32_t mask	/*  mask of type secHw_BLK_MASK_XXXXXX */
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
	secHw_REGS_t *regp = (secHw_REGS_t *) MM_IO_BASE_TZPC;
 | 
						secHw_REGS_t __iomem *regp = MM_IO_BASE_TZPC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (mask & 0x0000FFFF) {
 | 
						if (mask & 0x0000FFFF) {
 | 
				
			||||||
		regp->reg[secHw_IDX_LS].setUnsecure = mask & 0x0000FFFF;
 | 
							writel(mask & 0x0000FFFF, ®p->reg[secHw_IDX_LS].setUnsecure);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (mask & 0xFFFF0000) {
 | 
						if (mask & 0xFFFF0000) {
 | 
				
			||||||
		regp->reg[secHw_IDX_MS].setUnsecure = mask >> 16;
 | 
							writel(mask >> 16, ®p->reg[secHw_IDX_MS].setUnsecure);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -71,7 +71,7 @@ static inline void secHw_setUnsecure(uint32_t mask	/*  mask of type secHw_BLK_MA
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static inline uint32_t secHw_getStatus(void)
 | 
					static inline uint32_t secHw_getStatus(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	secHw_REGS_t *regp = (secHw_REGS_t *) MM_IO_BASE_TZPC;
 | 
						secHw_REGS_t __iomem *regp = MM_IO_BASE_TZPC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return (regp->reg[1].status << 16) + regp->reg[0].status;
 | 
						return (regp->reg[1].status << 16) + regp->reg[0].status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@
 | 
				
			||||||
#ifndef _TMRHW_H
 | 
					#ifndef _TMRHW_H
 | 
				
			||||||
#define _TMRHW_H
 | 
					#define _TMRHW_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <csp/stdint.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef uint32_t tmrHw_ID_t;	/* Timer ID */
 | 
					typedef uint32_t tmrHw_ID_t;	/* Timer ID */
 | 
				
			||||||
typedef uint32_t tmrHw_COUNT_t;	/* Timer count */
 | 
					typedef uint32_t tmrHw_COUNT_t;	/* Timer count */
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/kernel.h>
 | 
					#include <linux/kernel.h>
 | 
				
			||||||
#include <linux/semaphore.h>
 | 
					#include <linux/semaphore.h>
 | 
				
			||||||
#include <csp/dmacHw.h>
 | 
					#include <mach/csp/dmacHw.h>
 | 
				
			||||||
#include <mach/timer.h>
 | 
					#include <mach/timer.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Constants and Types ---------------------------------------------- */
 | 
					/* ---- Constants and Types ---------------------------------------------- */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,7 @@
 | 
				
			||||||
#define __ASM_ARCH_HARDWARE_H
 | 
					#define __ASM_ARCH_HARDWARE_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/sizes.h>
 | 
					#include <asm/sizes.h>
 | 
				
			||||||
#include <cfg_global.h>
 | 
					#include <mach/cfg_global.h>
 | 
				
			||||||
#include <mach/csp/mm_io.h>
 | 
					#include <mach/csp/mm_io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Hardware addresses of major areas.
 | 
					/* Hardware addresses of major areas.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@
 | 
				
			||||||
#define __ASM_ARCH_REG_NAND_H
 | 
					#define __ASM_ARCH_REG_NAND_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
#include <csp/reg.h>
 | 
					#include <mach/csp/reg.h>
 | 
				
			||||||
#include <mach/reg_umi.h>
 | 
					#include <mach/reg_umi.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Constants and Types ---------------------------------------------- */
 | 
					/* ---- Constants and Types ---------------------------------------------- */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@
 | 
				
			||||||
#define __ASM_ARCH_REG_UMI_H
 | 
					#define __ASM_ARCH_REG_UMI_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Include Files ---------------------------------------------------- */
 | 
					/* ---- Include Files ---------------------------------------------------- */
 | 
				
			||||||
#include <csp/reg.h>
 | 
					#include <mach/csp/reg.h>
 | 
				
			||||||
#include <mach/csp/mm_io.h>
 | 
					#include <mach/csp/mm_io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---- Constants and Types ---------------------------------------------- */
 | 
					/* ---- Constants and Types ---------------------------------------------- */
 | 
				
			||||||
| 
						 | 
					@ -233,5 +233,5 @@
 | 
				
			||||||
#define REG_UMI_BCH_ERR_LOC_WORD              0x00000018
 | 
					#define REG_UMI_BCH_ERR_LOC_WORD              0x00000018
 | 
				
			||||||
/* location within a page (512 byte) */
 | 
					/* location within a page (512 byte) */
 | 
				
			||||||
#define REG_UMI_BCH_ERR_LOC_PAGE              0x00001FE0
 | 
					#define REG_UMI_BCH_ERR_LOC_PAGE              0x00001FE0
 | 
				
			||||||
#define REG_UMI_BCH_ERR_LOC_ADDR(index)     (__REG32(HW_UMI_BASE + 0x64 + (index / 2)*4) >> ((index % 2) * 16))
 | 
					#define REG_UMI_BCH_ERR_LOC_ADDR(index)     (readl(HW_UMI_BASE + 0x64 + (index / 2)*4) >> ((index % 2) * 16))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,12 +20,12 @@
 | 
				
			||||||
#include <mach/hardware.h>
 | 
					#include <mach/hardware.h>
 | 
				
			||||||
#include <mach/csp/mm_io.h>
 | 
					#include <mach/csp/mm_io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IO_DESC(va, sz) { .virtual = va, \
 | 
					#define IO_DESC(va, sz) { .virtual = (unsigned long)va, \
 | 
				
			||||||
	.pfn = __phys_to_pfn(HW_IO_VIRT_TO_PHYS(va)), \
 | 
						.pfn = __phys_to_pfn(HW_IO_VIRT_TO_PHYS(va)), \
 | 
				
			||||||
	.length = sz, \
 | 
						.length = sz, \
 | 
				
			||||||
	.type = MT_DEVICE }
 | 
						.type = MT_DEVICE }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MEM_DESC(va, sz) { .virtual = va, \
 | 
					#define MEM_DESC(va, sz) { .virtual = (unsigned long)va, \
 | 
				
			||||||
	.pfn = __phys_to_pfn(HW_IO_VIRT_TO_PHYS(va)), \
 | 
						.pfn = __phys_to_pfn(HW_IO_VIRT_TO_PHYS(va)), \
 | 
				
			||||||
	.length = sz, \
 | 
						.length = sz, \
 | 
				
			||||||
	.type = MT_MEMORY }
 | 
						.type = MT_MEMORY }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/types.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <linux/module.h>
 | 
					#include <linux/module.h>
 | 
				
			||||||
#include <csp/tmrHw.h>
 | 
					#include <mach/csp/tmrHw.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mach/timer.h>
 | 
					#include <mach/timer.h>
 | 
				
			||||||
/* The core.c file initializes timers 1 and 3 as a linux clocksource. */
 | 
					/* The core.c file initializes timers 1 and 3 as a linux clocksource. */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,16 +49,6 @@ static struct map_desc dove_io_desc[] __initdata = {
 | 
				
			||||||
		.pfn		= __phys_to_pfn(DOVE_NB_REGS_PHYS_BASE),
 | 
							.pfn		= __phys_to_pfn(DOVE_NB_REGS_PHYS_BASE),
 | 
				
			||||||
		.length		= DOVE_NB_REGS_SIZE,
 | 
							.length		= DOVE_NB_REGS_SIZE,
 | 
				
			||||||
		.type		= MT_DEVICE,
 | 
							.type		= MT_DEVICE,
 | 
				
			||||||
	}, {
 | 
					 | 
				
			||||||
		.virtual	= DOVE_PCIE0_IO_VIRT_BASE,
 | 
					 | 
				
			||||||
		.pfn		= __phys_to_pfn(DOVE_PCIE0_IO_PHYS_BASE),
 | 
					 | 
				
			||||||
		.length		= DOVE_PCIE0_IO_SIZE,
 | 
					 | 
				
			||||||
		.type		= MT_DEVICE,
 | 
					 | 
				
			||||||
	}, {
 | 
					 | 
				
			||||||
		.virtual	= DOVE_PCIE1_IO_VIRT_BASE,
 | 
					 | 
				
			||||||
		.pfn		= __phys_to_pfn(DOVE_PCIE1_IO_PHYS_BASE),
 | 
					 | 
				
			||||||
		.length		= DOVE_PCIE1_IO_SIZE,
 | 
					 | 
				
			||||||
		.type		= MT_DEVICE,
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,14 +50,12 @@
 | 
				
			||||||
#define DOVE_NB_REGS_SIZE		SZ_8M
 | 
					#define DOVE_NB_REGS_SIZE		SZ_8M
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DOVE_PCIE0_IO_PHYS_BASE		0xf2000000
 | 
					#define DOVE_PCIE0_IO_PHYS_BASE		0xf2000000
 | 
				
			||||||
#define DOVE_PCIE0_IO_VIRT_BASE		0xfee00000
 | 
					 | 
				
			||||||
#define DOVE_PCIE0_IO_BUS_BASE		0x00000000
 | 
					#define DOVE_PCIE0_IO_BUS_BASE		0x00000000
 | 
				
			||||||
#define DOVE_PCIE0_IO_SIZE		SZ_1M
 | 
					#define DOVE_PCIE0_IO_SIZE		SZ_64K
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DOVE_PCIE1_IO_PHYS_BASE		0xf2100000
 | 
					#define DOVE_PCIE1_IO_PHYS_BASE		0xf2100000
 | 
				
			||||||
#define DOVE_PCIE1_IO_VIRT_BASE		0xfef00000
 | 
					#define DOVE_PCIE1_IO_BUS_BASE		0x00010000
 | 
				
			||||||
#define DOVE_PCIE1_IO_BUS_BASE		0x00100000
 | 
					#define DOVE_PCIE1_IO_SIZE		SZ_64K
 | 
				
			||||||
#define DOVE_PCIE1_IO_SIZE		SZ_1M
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Dove Core Registers Map
 | 
					 * Dove Core Registers Map
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,19 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * arch/arm/mach-dove/include/mach/io.h
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This file is licensed under the terms of the GNU General Public
 | 
					 | 
				
			||||||
 * License version 2.  This program is licensed "as is" without any
 | 
					 | 
				
			||||||
 * warranty of any kind, whether express or implied.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef __ASM_ARCH_IO_H
 | 
					 | 
				
			||||||
#define __ASM_ARCH_IO_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "dove.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define IO_SPACE_LIMIT		0xffffffff
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define __io(a)  	((void __iomem *)(((a) - DOVE_PCIE0_IO_BUS_BASE) + \
 | 
					 | 
				
			||||||
						 DOVE_PCIE0_IO_VIRT_BASE))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
| 
						 | 
					@ -26,9 +26,8 @@ struct pcie_port {
 | 
				
			||||||
	u8			root_bus_nr;
 | 
						u8			root_bus_nr;
 | 
				
			||||||
	void __iomem		*base;
 | 
						void __iomem		*base;
 | 
				
			||||||
	spinlock_t		conf_lock;
 | 
						spinlock_t		conf_lock;
 | 
				
			||||||
	char			io_space_name[16];
 | 
					 | 
				
			||||||
	char			mem_space_name[16];
 | 
						char			mem_space_name[16];
 | 
				
			||||||
	struct resource		res[2];
 | 
						struct resource		res;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct pcie_port pcie_port[2];
 | 
					static struct pcie_port pcie_port[2];
 | 
				
			||||||
| 
						 | 
					@ -53,24 +52,10 @@ static int __init dove_pcie_setup(int nr, struct pci_sys_data *sys)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	orion_pcie_setup(pp->base);
 | 
						orion_pcie_setup(pp->base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						if (pp->index == 0)
 | 
				
			||||||
	 * IORESOURCE_IO
 | 
							pci_ioremap_io(sys->busnr * SZ_64K, DOVE_PCIE0_IO_PHYS_BASE);
 | 
				
			||||||
	 */
 | 
						else
 | 
				
			||||||
	snprintf(pp->io_space_name, sizeof(pp->io_space_name),
 | 
							pci_ioremap_io(sys->busnr * SZ_64K, DOVE_PCIE1_IO_PHYS_BASE);
 | 
				
			||||||
		 "PCIe %d I/O", pp->index);
 | 
					 | 
				
			||||||
	pp->io_space_name[sizeof(pp->io_space_name) - 1] = 0;
 | 
					 | 
				
			||||||
	pp->res[0].name = pp->io_space_name;
 | 
					 | 
				
			||||||
	if (pp->index == 0) {
 | 
					 | 
				
			||||||
		pp->res[0].start = DOVE_PCIE0_IO_PHYS_BASE;
 | 
					 | 
				
			||||||
		pp->res[0].end = pp->res[0].start + DOVE_PCIE0_IO_SIZE - 1;
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		pp->res[0].start = DOVE_PCIE1_IO_PHYS_BASE;
 | 
					 | 
				
			||||||
		pp->res[0].end = pp->res[0].start + DOVE_PCIE1_IO_SIZE - 1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	pp->res[0].flags = IORESOURCE_IO;
 | 
					 | 
				
			||||||
	if (request_resource(&ioport_resource, &pp->res[0]))
 | 
					 | 
				
			||||||
		panic("Request PCIe IO resource failed\n");
 | 
					 | 
				
			||||||
	pci_add_resource_offset(&sys->resources, &pp->res[0], sys->io_offset);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * IORESOURCE_MEM
 | 
						 * IORESOURCE_MEM
 | 
				
			||||||
| 
						 | 
					@ -78,18 +63,18 @@ static int __init dove_pcie_setup(int nr, struct pci_sys_data *sys)
 | 
				
			||||||
	snprintf(pp->mem_space_name, sizeof(pp->mem_space_name),
 | 
						snprintf(pp->mem_space_name, sizeof(pp->mem_space_name),
 | 
				
			||||||
		 "PCIe %d MEM", pp->index);
 | 
							 "PCIe %d MEM", pp->index);
 | 
				
			||||||
	pp->mem_space_name[sizeof(pp->mem_space_name) - 1] = 0;
 | 
						pp->mem_space_name[sizeof(pp->mem_space_name) - 1] = 0;
 | 
				
			||||||
	pp->res[1].name = pp->mem_space_name;
 | 
						pp->res.name = pp->mem_space_name;
 | 
				
			||||||
	if (pp->index == 0) {
 | 
						if (pp->index == 0) {
 | 
				
			||||||
		pp->res[1].start = DOVE_PCIE0_MEM_PHYS_BASE;
 | 
							pp->res.start = DOVE_PCIE0_MEM_PHYS_BASE;
 | 
				
			||||||
		pp->res[1].end = pp->res[1].start + DOVE_PCIE0_MEM_SIZE - 1;
 | 
							pp->res.end = pp->res.start + DOVE_PCIE0_MEM_SIZE - 1;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		pp->res[1].start = DOVE_PCIE1_MEM_PHYS_BASE;
 | 
							pp->res.start = DOVE_PCIE1_MEM_PHYS_BASE;
 | 
				
			||||||
		pp->res[1].end = pp->res[1].start + DOVE_PCIE1_MEM_SIZE - 1;
 | 
							pp->res.end = pp->res.start + DOVE_PCIE1_MEM_SIZE - 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	pp->res[1].flags = IORESOURCE_MEM;
 | 
						pp->res.flags = IORESOURCE_MEM;
 | 
				
			||||||
	if (request_resource(&iomem_resource, &pp->res[1]))
 | 
						if (request_resource(&iomem_resource, &pp->res))
 | 
				
			||||||
		panic("Request PCIe Memory resource failed\n");
 | 
							panic("Request PCIe Memory resource failed\n");
 | 
				
			||||||
	pci_add_resource_offset(&sys->resources, &pp->res[1], sys->mem_offset);
 | 
						pci_add_resource_offset(&sys->resources, &pp->res, sys->mem_offset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -210,7 +195,7 @@ static void __init add_pcie_port(int index, unsigned long base)
 | 
				
			||||||
		pp->root_bus_nr = -1;
 | 
							pp->root_bus_nr = -1;
 | 
				
			||||||
		pp->base = (void __iomem *)base;
 | 
							pp->base = (void __iomem *)base;
 | 
				
			||||||
		spin_lock_init(&pp->conf_lock);
 | 
							spin_lock_init(&pp->conf_lock);
 | 
				
			||||||
		memset(pp->res, 0, sizeof(pp->res));
 | 
							memset(&pp->res, 0, sizeof(pp->res));
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		printk(KERN_INFO "link down, ignoring\n");
 | 
							printk(KERN_INFO "link down, ignoring\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,22 +74,22 @@ static struct map_desc ebsa110_io_desc[] __initdata = {
 | 
				
			||||||
	 * sparse external-decode ISAIO space
 | 
						 * sparse external-decode ISAIO space
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	{	/* IRQ_STAT/IRQ_MCLR */
 | 
						{	/* IRQ_STAT/IRQ_MCLR */
 | 
				
			||||||
		.virtual	= IRQ_STAT,
 | 
							.virtual	= (unsigned long)IRQ_STAT,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(TRICK4_PHYS),
 | 
							.pfn		= __phys_to_pfn(TRICK4_PHYS),
 | 
				
			||||||
		.length		= TRICK4_SIZE,
 | 
							.length		= TRICK4_SIZE,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
	}, {	/* IRQ_MASK/IRQ_MSET */
 | 
						}, {	/* IRQ_MASK/IRQ_MSET */
 | 
				
			||||||
		.virtual	= IRQ_MASK,
 | 
							.virtual	= (unsigned long)IRQ_MASK,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(TRICK3_PHYS),
 | 
							.pfn		= __phys_to_pfn(TRICK3_PHYS),
 | 
				
			||||||
		.length		= TRICK3_SIZE,
 | 
							.length		= TRICK3_SIZE,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
	}, {	/* SOFT_BASE */
 | 
						}, {	/* SOFT_BASE */
 | 
				
			||||||
		.virtual	= SOFT_BASE,
 | 
							.virtual	= (unsigned long)SOFT_BASE,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(TRICK1_PHYS),
 | 
							.pfn		= __phys_to_pfn(TRICK1_PHYS),
 | 
				
			||||||
		.length		= TRICK1_SIZE,
 | 
							.length		= TRICK1_SIZE,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
	}, {	/* PIT_BASE */
 | 
						}, {	/* PIT_BASE */
 | 
				
			||||||
		.virtual	= PIT_BASE,
 | 
							.virtual	= (unsigned long)PIT_BASE,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(TRICK0_PHYS),
 | 
							.pfn		= __phys_to_pfn(TRICK0_PHYS),
 | 
				
			||||||
		.length		= TRICK0_SIZE,
 | 
							.length		= TRICK0_SIZE,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,11 +31,11 @@
 | 
				
			||||||
#define TRICK7_PHYS		0xf3c00000
 | 
					#define TRICK7_PHYS		0xf3c00000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Virtual addresses */
 | 
					/* Virtual addresses */
 | 
				
			||||||
#define PIT_BASE		0xfc000000	/* trick 0 */
 | 
					#define PIT_BASE		IOMEM(0xfc000000)	/* trick 0 */
 | 
				
			||||||
#define SOFT_BASE		0xfd000000	/* trick 1 */
 | 
					#define SOFT_BASE		IOMEM(0xfd000000)	/* trick 1 */
 | 
				
			||||||
#define IRQ_MASK		0xfe000000	/* trick 3 - read */
 | 
					#define IRQ_MASK		IOMEM(0xfe000000)	/* trick 3 - read */
 | 
				
			||||||
#define IRQ_MSET		0xfe000000	/* trick 3 - write */
 | 
					#define IRQ_MSET		IOMEM(0xfe000000)	/* trick 3 - write */
 | 
				
			||||||
#define IRQ_STAT		0xff000000	/* trick 4 - read */
 | 
					#define IRQ_STAT		IOMEM(0xff000000)	/* trick 4 - read */
 | 
				
			||||||
#define IRQ_MCLR		0xff000000	/* trick 4 - write */
 | 
					#define IRQ_MCLR		IOMEM(0xff000000)	/* trick 4 - write */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -166,11 +166,6 @@ static int exynos5_clk_ip_gen_ctrl(struct clk *clk, int enable)
 | 
				
			||||||
	return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GEN, clk, enable);
 | 
						return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GEN, clk, enable);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int exynos5_clk_ip_gps_ctrl(struct clk *clk, int enable)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GPS, clk, enable);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int exynos5_clk_ip_mfc_ctrl(struct clk *clk, int enable)
 | 
					static int exynos5_clk_ip_mfc_ctrl(struct clk *clk, int enable)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return s5p_gatectrl(EXYNOS5_CLKGATE_IP_MFC, clk, enable);
 | 
						return s5p_gatectrl(EXYNOS5_CLKGATE_IP_MFC, clk, enable);
 | 
				
			||||||
| 
						 | 
					@ -671,10 +666,6 @@ static struct clk exynos5_init_clocks_off[] = {
 | 
				
			||||||
		.name		= "usbotg",
 | 
							.name		= "usbotg",
 | 
				
			||||||
		.enable		= exynos5_clk_ip_fsys_ctrl,
 | 
							.enable		= exynos5_clk_ip_fsys_ctrl,
 | 
				
			||||||
		.ctrlbit	= (1 << 7),
 | 
							.ctrlbit	= (1 << 7),
 | 
				
			||||||
	}, {
 | 
					 | 
				
			||||||
		.name		= "gps",
 | 
					 | 
				
			||||||
		.enable		= exynos5_clk_ip_gps_ctrl,
 | 
					 | 
				
			||||||
		.ctrlbit	= ((1 << 3) | (1 << 2) | (1 << 0)),
 | 
					 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.name		= "nfcon",
 | 
							.name		= "nfcon",
 | 
				
			||||||
		.enable		= exynos5_clk_ip_fsys_ctrl,
 | 
							.enable		= exynos5_clk_ip_fsys_ctrl,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -131,7 +131,6 @@
 | 
				
			||||||
#define EXYNOS5_PA_SYSMMU_JPEG		0x11F20000
 | 
					#define EXYNOS5_PA_SYSMMU_JPEG		0x11F20000
 | 
				
			||||||
#define EXYNOS5_PA_SYSMMU_IOP		0x12360000
 | 
					#define EXYNOS5_PA_SYSMMU_IOP		0x12360000
 | 
				
			||||||
#define EXYNOS5_PA_SYSMMU_RTIC		0x12370000
 | 
					#define EXYNOS5_PA_SYSMMU_RTIC		0x12370000
 | 
				
			||||||
#define EXYNOS5_PA_SYSMMU_GPS		0x12630000
 | 
					 | 
				
			||||||
#define EXYNOS5_PA_SYSMMU_ISP		0x13260000
 | 
					#define EXYNOS5_PA_SYSMMU_ISP		0x13260000
 | 
				
			||||||
#define EXYNOS5_PA_SYSMMU_DRC		0x12370000
 | 
					#define EXYNOS5_PA_SYSMMU_DRC		0x12370000
 | 
				
			||||||
#define EXYNOS5_PA_SYSMMU_SCALERC	0x13280000
 | 
					#define EXYNOS5_PA_SYSMMU_SCALERC	0x13280000
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,6 +26,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/mach/irq.h>
 | 
					#include <asm/mach/irq.h>
 | 
				
			||||||
#include <asm/mach/map.h>
 | 
					#include <asm/mach/map.h>
 | 
				
			||||||
 | 
					#include <asm/mach/pci.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "common.h"
 | 
					#include "common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -175,11 +176,6 @@ static struct map_desc ebsa285_host_io_desc[] __initdata = {
 | 
				
			||||||
		.pfn		= __phys_to_pfn(DC21285_PCI_IACK),
 | 
							.pfn		= __phys_to_pfn(DC21285_PCI_IACK),
 | 
				
			||||||
		.length		= PCIIACK_SIZE,
 | 
							.length		= PCIIACK_SIZE,
 | 
				
			||||||
		.type		= MT_DEVICE,
 | 
							.type		= MT_DEVICE,
 | 
				
			||||||
	}, {
 | 
					 | 
				
			||||||
		.virtual	= PCIO_BASE,
 | 
					 | 
				
			||||||
		.pfn		= __phys_to_pfn(DC21285_PCI_IO),
 | 
					 | 
				
			||||||
		.length		= PCIO_SIZE,
 | 
					 | 
				
			||||||
		.type		= MT_DEVICE,
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -196,8 +192,10 @@ void __init footbridge_map_io(void)
 | 
				
			||||||
	 * Now, work out what we've got to map in addition on this
 | 
						 * Now, work out what we've got to map in addition on this
 | 
				
			||||||
	 * platform.
 | 
						 * platform.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (footbridge_cfn_mode())
 | 
						if (footbridge_cfn_mode()) {
 | 
				
			||||||
		iotable_init(ebsa285_host_io_desc, ARRAY_SIZE(ebsa285_host_io_desc));
 | 
							iotable_init(ebsa285_host_io_desc, ARRAY_SIZE(ebsa285_host_io_desc));
 | 
				
			||||||
 | 
							pci_map_io_early(__phys_to_pfn(DC21285_PCI_IO));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void footbridge_restart(char mode, const char *cmd)
 | 
					void footbridge_restart(char mode, const char *cmd)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -276,8 +276,8 @@ int __init dc21285_setup(int nr, struct pci_sys_data *sys)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sys->mem_offset  = DC21285_PCI_MEM;
 | 
						sys->mem_offset  = DC21285_PCI_MEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pci_add_resource_offset(&sys->resources,
 | 
						pci_ioremap_io(0, DC21285_PCI_IO);
 | 
				
			||||||
				&ioport_resource, sys->io_offset);
 | 
					
 | 
				
			||||||
	pci_add_resource_offset(&sys->resources, &res[0], sys->mem_offset);
 | 
						pci_add_resource_offset(&sys->resources, &res[0], sys->mem_offset);
 | 
				
			||||||
	pci_add_resource_offset(&sys->resources, &res[1], sys->mem_offset);
 | 
						pci_add_resource_offset(&sys->resources, &res[1], sys->mem_offset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -350,14 +350,6 @@ void __init dc21285_preinit(void)
 | 
				
			||||||
			    "PCI data parity", NULL);
 | 
								    "PCI data parity", NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cfn_mode) {
 | 
						if (cfn_mode) {
 | 
				
			||||||
		static struct resource csrio;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		csrio.flags  = IORESOURCE_IO;
 | 
					 | 
				
			||||||
		csrio.name   = "Footbridge";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		allocate_resource(&ioport_resource, &csrio, 128,
 | 
					 | 
				
			||||||
				  0xff00, 0xffff, 128, NULL, NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Map our SDRAM at a known address in PCI space, just in case
 | 
							 * Map our SDRAM at a known address in PCI space, just in case
 | 
				
			||||||
		 * the firmware had other ideas.  Using a nonzero base is
 | 
							 * the firmware had other ideas.  Using a nonzero base is
 | 
				
			||||||
| 
						 | 
					@ -365,7 +357,7 @@ void __init dc21285_preinit(void)
 | 
				
			||||||
		 * in the range 0x000a0000 to 0x000c0000. (eg, S3 cards).
 | 
							 * in the range 0x000a0000 to 0x000c0000. (eg, S3 cards).
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		*CSR_PCICSRBASE       = 0xf4000000;
 | 
							*CSR_PCICSRBASE       = 0xf4000000;
 | 
				
			||||||
		*CSR_PCICSRIOBASE     = csrio.start;
 | 
							*CSR_PCICSRIOBASE     = 0;
 | 
				
			||||||
		*CSR_PCISDRAMBASE     = __virt_to_bus(PAGE_OFFSET);
 | 
							*CSR_PCISDRAMBASE     = __virt_to_bus(PAGE_OFFSET);
 | 
				
			||||||
		*CSR_PCIROMBASE       = 0;
 | 
							*CSR_PCIROMBASE       = 0;
 | 
				
			||||||
		*CSR_PCICMD = PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER |
 | 
							*CSR_PCICMD = PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER |
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,8 @@
 | 
				
			||||||
	/* For NetWinder debugging */
 | 
						/* For NetWinder debugging */
 | 
				
			||||||
		.macro	addruart, rp, rv, tmp
 | 
							.macro	addruart, rp, rv, tmp
 | 
				
			||||||
		mov	\rp, #0x000003f8
 | 
							mov	\rp, #0x000003f8
 | 
				
			||||||
		orr	\rv, \rp, #0xff000000	@ virtual
 | 
							orr	\rv, \rp, #0xfe000000	@ virtual
 | 
				
			||||||
 | 
							orr	\rv, \rv, #0x00e00000	@ virtual
 | 
				
			||||||
		orr	\rp, \rp, #0x7c000000	@ physical
 | 
							orr	\rp, \rp, #0x7c000000	@ physical
 | 
				
			||||||
		.endm
 | 
							.endm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,18 +14,10 @@
 | 
				
			||||||
#ifndef __ASM_ARM_ARCH_IO_H
 | 
					#ifndef __ASM_ARM_ARCH_IO_H
 | 
				
			||||||
#define __ASM_ARM_ARCH_IO_H
 | 
					#define __ASM_ARM_ARCH_IO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_MMU
 | 
					 | 
				
			||||||
#define MMU_IO(a, b)	(a)
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define MMU_IO(a, b)	(b)
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define PCIO_SIZE       0x00100000
 | 
					 | 
				
			||||||
#define PCIO_BASE       MMU_IO(0xff000000, 0x7c000000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Translation of various region addresses to virtual addresses
 | 
					 * Translation of various i/o addresses to host addresses for !CONFIG_MMU
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#define PCIO_BASE       0x7c000000
 | 
				
			||||||
#define __io(a)			((void __iomem *)(PCIO_BASE + (a)))
 | 
					#define __io(a)			((void __iomem *)(PCIO_BASE + (a)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,7 @@ imx5-pm-$(CONFIG_PM) += pm-imx5.o
 | 
				
			||||||
obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o mm-imx5.o clk-imx51-imx53.o ehci-imx5.o $(imx5-pm-y) cpu_op-mx51.o
 | 
					obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o mm-imx5.o clk-imx51-imx53.o ehci-imx5.o $(imx5-pm-y) cpu_op-mx51.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \
 | 
					obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \
 | 
				
			||||||
			    clk-pfd.o clk-busy.o
 | 
								    clk-pfd.o clk-busy.o clk.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Support for CMOS sensor interface
 | 
					# Support for CMOS sensor interface
 | 
				
			||||||
obj-$(CONFIG_MX1_VIDEO) += mx1-camera-fiq.o mx1-camera-fiq-ksym.o
 | 
					obj-$(CONFIG_MX1_VIDEO) += mx1-camera-fiq.o mx1-camera-fiq-ksym.o
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,6 @@
 | 
				
			||||||
#include <linux/clk-provider.h>
 | 
					#include <linux/clk-provider.h>
 | 
				
			||||||
#include <linux/io.h>
 | 
					#include <linux/io.h>
 | 
				
			||||||
#include <linux/module.h>
 | 
					#include <linux/module.h>
 | 
				
			||||||
#include <linux/clkdev.h>
 | 
					 | 
				
			||||||
#include <linux/err.h>
 | 
					#include <linux/err.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mach/hardware.h>
 | 
					#include <mach/hardware.h>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,10 +39,10 @@ static const char *ssi_ext2_com_sels[] = { "ssi_ext2_podf", "ssi2_root_gate", };
 | 
				
			||||||
static const char *emi_slow_sel[] = { "main_bus", "ahb", };
 | 
					static const char *emi_slow_sel[] = { "main_bus", "ahb", };
 | 
				
			||||||
static const char *usb_phy_sel_str[] = { "osc", "usb_phy_podf", };
 | 
					static const char *usb_phy_sel_str[] = { "osc", "usb_phy_podf", };
 | 
				
			||||||
static const char *mx51_ipu_di0_sel[] = { "di_pred", "osc", "ckih1", "tve_di", };
 | 
					static const char *mx51_ipu_di0_sel[] = { "di_pred", "osc", "ckih1", "tve_di", };
 | 
				
			||||||
static const char *mx53_ipu_di0_sel[] = { "di_pred", "osc", "ckih1", "di_pll4_podf", "dummy", "ldb_di0", };
 | 
					static const char *mx53_ipu_di0_sel[] = { "di_pred", "osc", "ckih1", "di_pll4_podf", "dummy", "ldb_di0_gate", };
 | 
				
			||||||
static const char *mx53_ldb_di0_sel[] = { "pll3_sw", "pll4_sw", };
 | 
					static const char *mx53_ldb_di0_sel[] = { "pll3_sw", "pll4_sw", };
 | 
				
			||||||
static const char *mx51_ipu_di1_sel[] = { "di_pred", "osc", "ckih1", "tve_di", "ipp_di1", };
 | 
					static const char *mx51_ipu_di1_sel[] = { "di_pred", "osc", "ckih1", "tve_di", "ipp_di1", };
 | 
				
			||||||
static const char *mx53_ipu_di1_sel[] = { "di_pred", "osc", "ckih1", "tve_di", "ipp_di1", "ldb_di1", };
 | 
					static const char *mx53_ipu_di1_sel[] = { "di_pred", "osc", "ckih1", "tve_di", "ipp_di1", "ldb_di1_gate", };
 | 
				
			||||||
static const char *mx53_ldb_di1_sel[] = { "pll3_sw", "pll4_sw", };
 | 
					static const char *mx53_ldb_di1_sel[] = { "pll3_sw", "pll4_sw", };
 | 
				
			||||||
static const char *mx51_tve_ext_sel[] = { "osc", "ckih1", };
 | 
					static const char *mx51_tve_ext_sel[] = { "osc", "ckih1", };
 | 
				
			||||||
static const char *mx53_tve_ext_sel[] = { "pll4_sw", "ckih1", };
 | 
					static const char *mx53_tve_ext_sel[] = { "pll4_sw", "ckih1", };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@
 | 
				
			||||||
#include <linux/err.h>
 | 
					#include <linux/err.h>
 | 
				
			||||||
#include <mach/common.h>
 | 
					#include <mach/common.h>
 | 
				
			||||||
#include <mach/hardware.h>
 | 
					#include <mach/hardware.h>
 | 
				
			||||||
#include <mach/clock.h>
 | 
					
 | 
				
			||||||
#include "clk.h"
 | 
					#include "clk.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -29,8 +29,53 @@ static unsigned long clk_pllv1_recalc_rate(struct clk_hw *hw,
 | 
				
			||||||
		unsigned long parent_rate)
 | 
							unsigned long parent_rate)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct clk_pllv1 *pll = to_clk_pllv1(hw);
 | 
						struct clk_pllv1 *pll = to_clk_pllv1(hw);
 | 
				
			||||||
 | 
						long long ll;
 | 
				
			||||||
 | 
						int mfn_abs;
 | 
				
			||||||
 | 
						unsigned int mfi, mfn, mfd, pd;
 | 
				
			||||||
 | 
						u32 reg;
 | 
				
			||||||
 | 
						unsigned long rate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return mxc_decode_pll(readl(pll->base), parent_rate);
 | 
						reg = readl(pll->base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Get the resulting clock rate from a PLL register value and the input
 | 
				
			||||||
 | 
						 * frequency. PLLs with this register layout can be found on i.MX1,
 | 
				
			||||||
 | 
						 * i.MX21, i.MX27 and i,MX31
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 *                  mfi + mfn / (mfd + 1)
 | 
				
			||||||
 | 
						 *  f = 2 * f_ref * --------------------
 | 
				
			||||||
 | 
						 *                        pd + 1
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mfi = (reg >> 10) & 0xf;
 | 
				
			||||||
 | 
						mfn = reg & 0x3ff;
 | 
				
			||||||
 | 
						mfd = (reg >> 16) & 0x3ff;
 | 
				
			||||||
 | 
						pd =  (reg >> 26) & 0xf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mfi = mfi <= 5 ? 5 : mfi;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mfn_abs = mfn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * On all i.MXs except i.MX1 and i.MX21 mfn is a 10bit
 | 
				
			||||||
 | 
						 * 2's complements number
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						if (!cpu_is_mx1() && !cpu_is_mx21() && mfn >= 0x200)
 | 
				
			||||||
 | 
							mfn_abs = 0x400 - mfn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						rate = parent_rate * 2;
 | 
				
			||||||
 | 
						rate /= pd + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ll = (unsigned long long)rate * mfn_abs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						do_div(ll, mfd + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!cpu_is_mx1() && !cpu_is_mx21() && mfn >= 0x200)
 | 
				
			||||||
 | 
							ll = -ll;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ll = (rate * mfi) + ll;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return ll;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct clk_ops clk_pllv1_ops = {
 | 
					struct clk_ops clk_pllv1_ops = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								arch/arm/mach-imx/clk.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								arch/arm/mach-imx/clk.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					#include <linux/spinlock.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEFINE_SPINLOCK(imx_ccm_lock);
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/spinlock.h>
 | 
					#include <linux/spinlock.h>
 | 
				
			||||||
#include <linux/clk-provider.h>
 | 
					#include <linux/clk-provider.h>
 | 
				
			||||||
#include <mach/clock.h>
 | 
					
 | 
				
			||||||
 | 
					extern spinlock_t imx_ccm_lock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct clk *imx_clk_pllv1(const char *name, const char *parent,
 | 
					struct clk *imx_clk_pllv1(const char *name, const char *parent,
 | 
				
			||||||
		void __iomem *base);
 | 
							void __iomem *base);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,7 +36,6 @@
 | 
				
			||||||
#include <asm/mach/map.h>
 | 
					#include <asm/mach/map.h>
 | 
				
			||||||
#include <asm/mach/time.h>
 | 
					#include <asm/mach/time.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <mach/clock.h>
 | 
					 | 
				
			||||||
#include <mach/common.h>
 | 
					#include <mach/common.h>
 | 
				
			||||||
#include <mach/hardware.h>
 | 
					#include <mach/hardware.h>
 | 
				
			||||||
#include <mach/iomux-mx3.h>
 | 
					#include <mach/iomux-mx3.h>
 | 
				
			||||||
| 
						 | 
					@ -259,13 +258,13 @@ static void __init kzm_board_init(void)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static struct map_desc kzm_io_desc[] __initdata = {
 | 
					static struct map_desc kzm_io_desc[] __initdata = {
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		.virtual	= MX31_CS4_BASE_ADDR_VIRT,
 | 
							.virtual	= (unsigned long)MX31_CS4_BASE_ADDR_VIRT,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(MX31_CS4_BASE_ADDR),
 | 
							.pfn		= __phys_to_pfn(MX31_CS4_BASE_ADDR),
 | 
				
			||||||
		.length		= MX31_CS4_SIZE,
 | 
							.length		= MX31_CS4_SIZE,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		.virtual	= MX31_CS5_BASE_ADDR_VIRT,
 | 
							.virtual	= (unsigned long)MX31_CS5_BASE_ADDR_VIRT,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(MX31_CS5_BASE_ADDR),
 | 
							.pfn		= __phys_to_pfn(MX31_CS5_BASE_ADDR),
 | 
				
			||||||
		.length		= MX31_CS5_SIZE,
 | 
							.length		= MX31_CS5_SIZE,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -540,7 +540,7 @@ static void __init mxc_init_audio(void)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static struct map_desc mx31ads_io_desc[] __initdata = {
 | 
					static struct map_desc mx31ads_io_desc[] __initdata = {
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		.virtual	= MX31_CS4_BASE_ADDR_VIRT,
 | 
							.virtual	= (unsigned long)MX31_CS4_BASE_ADDR_VIRT,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(MX31_CS4_BASE_ADDR),
 | 
							.pfn		= __phys_to_pfn(MX31_CS4_BASE_ADDR),
 | 
				
			||||||
		.length		= CS4_CS8900_MMIO_START,
 | 
							.length		= CS4_CS8900_MMIO_START,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -207,7 +207,7 @@ static struct platform_device physmap_flash_device = {
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static struct map_desc mx31lite_io_desc[] __initdata = {
 | 
					static struct map_desc mx31lite_io_desc[] __initdata = {
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		.virtual = MX31_CS4_BASE_ADDR_VIRT,
 | 
							.virtual = (unsigned long)MX31_CS4_BASE_ADDR_VIRT,
 | 
				
			||||||
		.pfn = __phys_to_pfn(MX31_CS4_BASE_ADDR),
 | 
							.pfn = __phys_to_pfn(MX31_CS4_BASE_ADDR),
 | 
				
			||||||
		.length = MX31_CS4_SIZE,
 | 
							.length = MX31_CS4_SIZE,
 | 
				
			||||||
		.type = MT_DEVICE
 | 
							.type = MT_DEVICE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -95,8 +95,8 @@ arch_initcall(integrator_init);
 | 
				
			||||||
 *  UART0  7    6
 | 
					 *  UART0  7    6
 | 
				
			||||||
 *  UART1  5    4
 | 
					 *  UART1  5    4
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define SC_CTRLC	IO_ADDRESS(INTEGRATOR_SC_CTRLC)
 | 
					#define SC_CTRLC	__io_address(INTEGRATOR_SC_CTRLC)
 | 
				
			||||||
#define SC_CTRLS	IO_ADDRESS(INTEGRATOR_SC_CTRLS)
 | 
					#define SC_CTRLS	__io_address(INTEGRATOR_SC_CTRLS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void integrator_uart_set_mctrl(struct amba_device *dev, void __iomem *base, unsigned int mctrl)
 | 
					static void integrator_uart_set_mctrl(struct amba_device *dev, void __iomem *base, unsigned int mctrl)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,10 +25,10 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct cpufreq_driver integrator_driver;
 | 
					static struct cpufreq_driver integrator_driver;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CM_ID  	IO_ADDRESS(INTEGRATOR_HDR_ID)
 | 
					#define CM_ID  	__io_address(INTEGRATOR_HDR_ID)
 | 
				
			||||||
#define CM_OSC	IO_ADDRESS(INTEGRATOR_HDR_OSC)
 | 
					#define CM_OSC	__io_address(INTEGRATOR_HDR_OSC)
 | 
				
			||||||
#define CM_STAT IO_ADDRESS(INTEGRATOR_HDR_STAT)
 | 
					#define CM_STAT __io_address(INTEGRATOR_HDR_STAT)
 | 
				
			||||||
#define CM_LOCK IO_ADDRESS(INTEGRATOR_HDR_LOCK)
 | 
					#define CM_LOCK __io_address(INTEGRATOR_HDR_LOCK)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct icst_params lclk_params = {
 | 
					static const struct icst_params lclk_params = {
 | 
				
			||||||
	.ref		= 24000000,
 | 
						.ref		= 24000000,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,33 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 *  arch/arm/mach-integrator/include/mach/io.h
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *  Copyright (C) 1999 ARM Limited
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This program is free software; you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU General Public License for more details.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
 * along with this program; if not, write to the Free Software
 | 
					 | 
				
			||||||
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifndef __ASM_ARM_ARCH_IO_H
 | 
					 | 
				
			||||||
#define __ASM_ARM_ARCH_IO_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * WARNING: this has to mirror definitions in platform.h
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define PCI_MEMORY_VADDR        0xe8000000
 | 
					 | 
				
			||||||
#define PCI_CONFIG_VADDR        0xec000000
 | 
					 | 
				
			||||||
#define PCI_V3_VADDR            0xed000000
 | 
					 | 
				
			||||||
#define PCI_IO_VADDR            0xee000000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define __io(a)			((void __iomem *)(PCI_IO_VADDR + (a)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
| 
						 | 
					@ -324,6 +324,10 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define PHYS_PCI_V3_BASE                0x62000000
 | 
					#define PHYS_PCI_V3_BASE                0x62000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PCI_MEMORY_VADDR		0xe8000000
 | 
				
			||||||
 | 
					#define PCI_CONFIG_VADDR		0xec000000
 | 
				
			||||||
 | 
					#define PCI_V3_VADDR			0xed000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ------------------------------------------------------------------------
 | 
					/* ------------------------------------------------------------------------
 | 
				
			||||||
 *  Integrator Interrupt Controllers
 | 
					 *  Integrator Interrupt Controllers
 | 
				
			||||||
 * ------------------------------------------------------------------------
 | 
					 * ------------------------------------------------------------------------
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,6 +50,7 @@
 | 
				
			||||||
#include <asm/mach/arch.h>
 | 
					#include <asm/mach/arch.h>
 | 
				
			||||||
#include <asm/mach/irq.h>
 | 
					#include <asm/mach/irq.h>
 | 
				
			||||||
#include <asm/mach/map.h>
 | 
					#include <asm/mach/map.h>
 | 
				
			||||||
 | 
					#include <asm/mach/pci.h>
 | 
				
			||||||
#include <asm/mach/time.h>
 | 
					#include <asm/mach/time.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <plat/fpga-irq.h>
 | 
					#include <plat/fpga-irq.h>
 | 
				
			||||||
| 
						 | 
					@ -73,7 +74,7 @@
 | 
				
			||||||
 * e8000000	40000000	PCI memory		PHYS_PCI_MEM_BASE	(max 512M)
 | 
					 * e8000000	40000000	PCI memory		PHYS_PCI_MEM_BASE	(max 512M)
 | 
				
			||||||
 * ec000000	61000000	PCI config space	PHYS_PCI_CONFIG_BASE	(max 16M)
 | 
					 * ec000000	61000000	PCI config space	PHYS_PCI_CONFIG_BASE	(max 16M)
 | 
				
			||||||
 * ed000000	62000000	PCI V3 regs		PHYS_PCI_V3_BASE	(max 64k)
 | 
					 * ed000000	62000000	PCI V3 regs		PHYS_PCI_V3_BASE	(max 64k)
 | 
				
			||||||
 * ee000000	60000000	PCI IO			PHYS_PCI_IO_BASE	(max 16M)
 | 
					 * fee00000	60000000	PCI IO			PHYS_PCI_IO_BASE	(max 16M)
 | 
				
			||||||
 * ef000000			Cache flush
 | 
					 * ef000000			Cache flush
 | 
				
			||||||
 * f1000000	10000000	Core module registers
 | 
					 * f1000000	10000000	Core module registers
 | 
				
			||||||
 * f1100000	11000000	System controller registers
 | 
					 * f1100000	11000000	System controller registers
 | 
				
			||||||
| 
						 | 
					@ -133,25 +134,20 @@ static struct map_desc ap_io_desc[] __initdata = {
 | 
				
			||||||
		.length		= SZ_4K,
 | 
							.length		= SZ_4K,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.virtual	= PCI_MEMORY_VADDR,
 | 
							.virtual	= (unsigned long)PCI_MEMORY_VADDR,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(PHYS_PCI_MEM_BASE),
 | 
							.pfn		= __phys_to_pfn(PHYS_PCI_MEM_BASE),
 | 
				
			||||||
		.length		= SZ_16M,
 | 
							.length		= SZ_16M,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.virtual	= PCI_CONFIG_VADDR,
 | 
							.virtual	= (unsigned long)PCI_CONFIG_VADDR,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(PHYS_PCI_CONFIG_BASE),
 | 
							.pfn		= __phys_to_pfn(PHYS_PCI_CONFIG_BASE),
 | 
				
			||||||
		.length		= SZ_16M,
 | 
							.length		= SZ_16M,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.virtual	= PCI_V3_VADDR,
 | 
							.virtual	= (unsigned long)PCI_V3_VADDR,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(PHYS_PCI_V3_BASE),
 | 
							.pfn		= __phys_to_pfn(PHYS_PCI_V3_BASE),
 | 
				
			||||||
		.length		= SZ_64K,
 | 
							.length		= SZ_64K,
 | 
				
			||||||
		.type		= MT_DEVICE
 | 
							.type		= MT_DEVICE
 | 
				
			||||||
	}, {
 | 
					 | 
				
			||||||
		.virtual	= PCI_IO_VADDR,
 | 
					 | 
				
			||||||
		.pfn		= __phys_to_pfn(PHYS_PCI_IO_BASE),
 | 
					 | 
				
			||||||
		.length		= SZ_64K,
 | 
					 | 
				
			||||||
		.type		= MT_DEVICE
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,6 +155,7 @@ static void __init ap_map_io(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	iotable_init(ap_io_desc, ARRAY_SIZE(ap_io_desc));
 | 
						iotable_init(ap_io_desc, ARRAY_SIZE(ap_io_desc));
 | 
				
			||||||
	vga_base = PCI_MEMORY_VADDR;
 | 
						vga_base = PCI_MEMORY_VADDR;
 | 
				
			||||||
 | 
						pci_map_io_early(__phys_to_pfn(PHYS_PCI_IO_BASE));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define INTEGRATOR_SC_VALID_INT	0x003fffff
 | 
					#define INTEGRATOR_SC_VALID_INT	0x003fffff
 | 
				
			||||||
| 
						 | 
					@ -317,9 +314,9 @@ static void __init ap_init(void)
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Where is the timer (VA)?
 | 
					 * Where is the timer (VA)?
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define TIMER0_VA_BASE IO_ADDRESS(INTEGRATOR_TIMER0_BASE)
 | 
					#define TIMER0_VA_BASE __io_address(INTEGRATOR_TIMER0_BASE)
 | 
				
			||||||
#define TIMER1_VA_BASE IO_ADDRESS(INTEGRATOR_TIMER1_BASE)
 | 
					#define TIMER1_VA_BASE __io_address(INTEGRATOR_TIMER1_BASE)
 | 
				
			||||||
#define TIMER2_VA_BASE IO_ADDRESS(INTEGRATOR_TIMER2_BASE)
 | 
					#define TIMER2_VA_BASE __io_address(INTEGRATOR_TIMER2_BASE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned long timer_reload;
 | 
					static unsigned long timer_reload;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,7 +59,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define INTCP_ETH_SIZE			0x10
 | 
					#define INTCP_ETH_SIZE			0x10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define INTCP_VA_CTRL_BASE		IO_ADDRESS(INTEGRATOR_CP_CTL_BASE)
 | 
					#define INTCP_VA_CTRL_BASE		__io_address(INTEGRATOR_CP_CTL_BASE)
 | 
				
			||||||
#define INTCP_FLASHPROG			0x04
 | 
					#define INTCP_FLASHPROG			0x04
 | 
				
			||||||
#define CINTEGRATOR_FLASHPROG_FLVPPEN	(1 << 0)
 | 
					#define CINTEGRATOR_FLASHPROG_FLVPPEN	(1 << 0)
 | 
				
			||||||
#define CINTEGRATOR_FLASHPROG_FLWREN	(1 << 1)
 | 
					#define CINTEGRATOR_FLASHPROG_FLWREN	(1 << 1)
 | 
				
			||||||
| 
						 | 
					@ -265,8 +265,8 @@ static struct platform_device *intcp_devs[] __initdata = {
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned int mmc_status(struct device *dev)
 | 
					static unsigned int mmc_status(struct device *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned int status = readl(IO_ADDRESS(0xca000000 + 4));
 | 
						unsigned int status = readl(__io_address(0xca000000 + 4));
 | 
				
			||||||
	writel(8, IO_ADDRESS(INTEGRATOR_CP_CTL_BASE + 8));
 | 
						writel(8, __io_address(INTEGRATOR_CP_CTL_BASE + 8));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return status & 8;
 | 
						return status & 8;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -181,7 +181,7 @@ static DEFINE_RAW_SPINLOCK(v3_lock);
 | 
				
			||||||
#undef V3_LB_BASE_PREFETCH
 | 
					#undef V3_LB_BASE_PREFETCH
 | 
				
			||||||
#define V3_LB_BASE_PREFETCH 0
 | 
					#define V3_LB_BASE_PREFETCH 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned long v3_open_config_window(struct pci_bus *bus,
 | 
					static void __iomem *v3_open_config_window(struct pci_bus *bus,
 | 
				
			||||||
					   unsigned int devfn, int offset)
 | 
										   unsigned int devfn, int offset)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned int address, mapaddress, busnr;
 | 
						unsigned int address, mapaddress, busnr;
 | 
				
			||||||
| 
						 | 
					@ -280,7 +280,7 @@ static void v3_close_config_window(void)
 | 
				
			||||||
static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
 | 
					static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
 | 
				
			||||||
			  int size, u32 *val)
 | 
								  int size, u32 *val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long addr;
 | 
						void __iomem *addr;
 | 
				
			||||||
	unsigned long flags;
 | 
						unsigned long flags;
 | 
				
			||||||
	u32 v;
 | 
						u32 v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -311,7 +311,7 @@ static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
 | 
				
			||||||
static int v3_write_config(struct pci_bus *bus, unsigned int devfn, int where,
 | 
					static int v3_write_config(struct pci_bus *bus, unsigned int devfn, int where,
 | 
				
			||||||
			   int size, u32 val)
 | 
								   int size, u32 val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long addr;
 | 
						void __iomem *addr;
 | 
				
			||||||
	unsigned long flags;
 | 
						unsigned long flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	raw_spin_lock_irqsave(&v3_lock, flags);
 | 
						raw_spin_lock_irqsave(&v3_lock, flags);
 | 
				
			||||||
| 
						 | 
					@ -374,12 +374,9 @@ static int __init pci_v3_setup_resources(struct pci_sys_data *sys)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * the IO resource for this bus
 | 
					 | 
				
			||||||
	 * the mem resource for this bus
 | 
						 * the mem resource for this bus
 | 
				
			||||||
	 * the prefetch mem resource for this bus
 | 
						 * the prefetch mem resource for this bus
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	pci_add_resource_offset(&sys->resources,
 | 
					 | 
				
			||||||
				&ioport_resource, sys->io_offset);
 | 
					 | 
				
			||||||
	pci_add_resource_offset(&sys->resources, &non_mem, sys->mem_offset);
 | 
						pci_add_resource_offset(&sys->resources, &non_mem, sys->mem_offset);
 | 
				
			||||||
	pci_add_resource_offset(&sys->resources, &pre_mem, sys->mem_offset);
 | 
						pci_add_resource_offset(&sys->resources, &pre_mem, sys->mem_offset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -391,9 +388,9 @@ static int __init pci_v3_setup_resources(struct pci_sys_data *sys)
 | 
				
			||||||
 * means I can't get additional information on the reason for the pm2fb
 | 
					 * means I can't get additional information on the reason for the pm2fb
 | 
				
			||||||
 * problems.  I suppose I'll just have to mind-meld with the machine. ;)
 | 
					 * problems.  I suppose I'll just have to mind-meld with the machine. ;)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define SC_PCI     IO_ADDRESS(INTEGRATOR_SC_PCIENABLE)
 | 
					#define SC_PCI     __io_address(INTEGRATOR_SC_PCIENABLE)
 | 
				
			||||||
#define SC_LBFADDR IO_ADDRESS(INTEGRATOR_SC_BASE + 0x20)
 | 
					#define SC_LBFADDR __io_address(INTEGRATOR_SC_BASE + 0x20)
 | 
				
			||||||
#define SC_LBFCODE IO_ADDRESS(INTEGRATOR_SC_BASE + 0x24)
 | 
					#define SC_LBFCODE __io_address(INTEGRATOR_SC_BASE + 0x24)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
v3_pci_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 | 
					v3_pci_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 | 
				
			||||||
| 
						 | 
					@ -498,7 +495,6 @@ void __init pci_v3_preinit(void)
 | 
				
			||||||
	unsigned int temp;
 | 
						unsigned int temp;
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pcibios_min_io = 0x6000;
 | 
					 | 
				
			||||||
	pcibios_min_mem = 0x00100000;
 | 
						pcibios_min_mem = 0x00100000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,28 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * iop13xx custom ioremap implementation
 | 
					 | 
				
			||||||
 * Copyright (c) 2005-2006, Intel Corporation.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This program is free software; you can redistribute it and/or modify it
 | 
					 | 
				
			||||||
 * under the terms and conditions of the GNU General Public License,
 | 
					 | 
				
			||||||
 * version 2, as published by the Free Software Foundation.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This program is distributed in the hope it will be useful, but WITHOUT
 | 
					 | 
				
			||||||
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
					 | 
				
			||||||
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 | 
					 | 
				
			||||||
 * more details.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU General Public License along with
 | 
					 | 
				
			||||||
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 | 
					 | 
				
			||||||
 * Place - Suite 330, Boston, MA 02111-1307 USA.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifndef __ASM_ARM_ARCH_IO_H
 | 
					 | 
				
			||||||
#define __ASM_ARM_ARCH_IO_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define IO_SPACE_LIMIT 0xffffffff
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define __io(a) __iop13xx_io(a)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern void __iomem * __iop13xx_io(unsigned long io_addr);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
| 
						 | 
					@ -69,21 +69,11 @@ extern unsigned long get_iop_tick_rate(void);
 | 
				
			||||||
 * 0x8000.0000 + 928M	0x2.8000.0000   (ioremap)	PCIE outbound memory window
 | 
					 * 0x8000.0000 + 928M	0x2.8000.0000   (ioremap)	PCIE outbound memory window
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * IO MAP
 | 
					 * IO MAP
 | 
				
			||||||
 * 0x1000 + 64K	0x0.fffb.1000	0xfec6.1000	PCIX outbound i/o window
 | 
					 * 0x00000 + 64K	0x0.fffb.0000	0xfee0.0000	PCIX outbound i/o window
 | 
				
			||||||
 * 0x1000 + 64K	0x0.fffd.1000	0xfed7.1000	PCIE outbound i/o window
 | 
					 * 0x10000 + 64K	0x0.fffd.0000	0xfee1.0000	PCIE outbound i/o window
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define IOP13XX_PCIX_IO_WINDOW_SIZE   0x10000UL
 | 
					 | 
				
			||||||
#define IOP13XX_PCIX_LOWER_IO_PA      0xfffb0000UL
 | 
					#define IOP13XX_PCIX_LOWER_IO_PA      0xfffb0000UL
 | 
				
			||||||
#define IOP13XX_PCIX_LOWER_IO_VA      0xfec60000UL
 | 
					 | 
				
			||||||
#define IOP13XX_PCIX_LOWER_IO_BA      0x0UL /* OIOTVR */
 | 
					#define IOP13XX_PCIX_LOWER_IO_BA      0x0UL /* OIOTVR */
 | 
				
			||||||
#define IOP13XX_PCIX_IO_BUS_OFFSET    0x1000UL
 | 
					 | 
				
			||||||
#define IOP13XX_PCIX_UPPER_IO_PA      (IOP13XX_PCIX_LOWER_IO_PA +\
 | 
					 | 
				
			||||||
				       IOP13XX_PCIX_IO_WINDOW_SIZE - 1)
 | 
					 | 
				
			||||||
#define IOP13XX_PCIX_UPPER_IO_VA      (IOP13XX_PCIX_LOWER_IO_VA +\
 | 
					 | 
				
			||||||
				       IOP13XX_PCIX_IO_WINDOW_SIZE - 1)
 | 
					 | 
				
			||||||
#define IOP13XX_PCIX_IO_PHYS_TO_VIRT(addr) (u32) ((u32) addr -\
 | 
					 | 
				
			||||||
					   (IOP13XX_PCIX_LOWER_IO_PA\
 | 
					 | 
				
			||||||
					   - IOP13XX_PCIX_LOWER_IO_VA))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IOP13XX_PCIX_MEM_PHYS_OFFSET  0x100000000ULL
 | 
					#define IOP13XX_PCIX_MEM_PHYS_OFFSET  0x100000000ULL
 | 
				
			||||||
#define IOP13XX_PCIX_MEM_WINDOW_SIZE  0x3a000000UL
 | 
					#define IOP13XX_PCIX_MEM_WINDOW_SIZE  0x3a000000UL
 | 
				
			||||||
| 
						 | 
					@ -103,20 +93,8 @@ extern unsigned long get_iop_tick_rate(void);
 | 
				
			||||||
					IOP13XX_PCIX_LOWER_MEM_BA)
 | 
										IOP13XX_PCIX_LOWER_MEM_BA)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* PCI-E ranges */
 | 
					/* PCI-E ranges */
 | 
				
			||||||
#define IOP13XX_PCIE_IO_WINDOW_SIZE   	 0x10000UL
 | 
					 | 
				
			||||||
#define IOP13XX_PCIE_LOWER_IO_PA      	 0xfffd0000UL
 | 
					#define IOP13XX_PCIE_LOWER_IO_PA      	 0xfffd0000UL
 | 
				
			||||||
#define IOP13XX_PCIE_LOWER_IO_VA      	 0xfed70000UL
 | 
					#define IOP13XX_PCIE_LOWER_IO_BA	 0x10000UL  /* OIOTVR */
 | 
				
			||||||
#define IOP13XX_PCIE_LOWER_IO_BA      	 0x0UL  /* OIOTVR */
 | 
					 | 
				
			||||||
#define IOP13XX_PCIE_IO_BUS_OFFSET	 0x1000UL
 | 
					 | 
				
			||||||
#define IOP13XX_PCIE_UPPER_IO_PA      	 (IOP13XX_PCIE_LOWER_IO_PA +\
 | 
					 | 
				
			||||||
					 IOP13XX_PCIE_IO_WINDOW_SIZE - 1)
 | 
					 | 
				
			||||||
#define IOP13XX_PCIE_UPPER_IO_VA      	 (IOP13XX_PCIE_LOWER_IO_VA +\
 | 
					 | 
				
			||||||
					 IOP13XX_PCIE_IO_WINDOW_SIZE - 1)
 | 
					 | 
				
			||||||
#define IOP13XX_PCIE_UPPER_IO_BA      	 (IOP13XX_PCIE_LOWER_IO_BA +\
 | 
					 | 
				
			||||||
					 IOP13XX_PCIE_IO_WINDOW_SIZE - 1)
 | 
					 | 
				
			||||||
#define IOP13XX_PCIE_IO_PHYS_TO_VIRT(addr) (u32) ((u32) addr -\
 | 
					 | 
				
			||||||
					   (IOP13XX_PCIE_LOWER_IO_PA\
 | 
					 | 
				
			||||||
					   - IOP13XX_PCIE_LOWER_IO_VA))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IOP13XX_PCIE_MEM_PHYS_OFFSET  	 0x200000000ULL
 | 
					#define IOP13XX_PCIE_MEM_PHYS_OFFSET  	 0x200000000ULL
 | 
				
			||||||
#define IOP13XX_PCIE_MEM_WINDOW_SIZE  	 0x3a000000UL
 | 
					#define IOP13XX_PCIE_MEM_WINDOW_SIZE  	 0x3a000000UL
 | 
				
			||||||
| 
						 | 
					@ -148,18 +126,16 @@ extern unsigned long get_iop_tick_rate(void);
 | 
				
			||||||
 * IOP13XX chipset registers
 | 
					 * IOP13XX chipset registers
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define IOP13XX_PMMR_PHYS_MEM_BASE	   0xffd80000UL  /* PMMR phys. address */
 | 
					#define IOP13XX_PMMR_PHYS_MEM_BASE	   0xffd80000UL  /* PMMR phys. address */
 | 
				
			||||||
#define IOP13XX_PMMR_VIRT_MEM_BASE	   0xfee80000UL  /* PMMR phys. address */
 | 
					#define IOP13XX_PMMR_VIRT_MEM_BASE	   (void __iomem *)(0xfee80000UL)  /* PMMR phys. address */
 | 
				
			||||||
#define IOP13XX_PMMR_MEM_WINDOW_SIZE	   0x80000
 | 
					#define IOP13XX_PMMR_MEM_WINDOW_SIZE	   0x80000
 | 
				
			||||||
#define IOP13XX_PMMR_UPPER_MEM_VA	   (IOP13XX_PMMR_VIRT_MEM_BASE +\
 | 
					#define IOP13XX_PMMR_UPPER_MEM_VA	   (IOP13XX_PMMR_VIRT_MEM_BASE +\
 | 
				
			||||||
					   IOP13XX_PMMR_MEM_WINDOW_SIZE - 1)
 | 
										   IOP13XX_PMMR_MEM_WINDOW_SIZE - 1)
 | 
				
			||||||
#define IOP13XX_PMMR_UPPER_MEM_PA	   (IOP13XX_PMMR_PHYS_MEM_BASE +\
 | 
					#define IOP13XX_PMMR_UPPER_MEM_PA	   (IOP13XX_PMMR_PHYS_MEM_BASE +\
 | 
				
			||||||
					   IOP13XX_PMMR_MEM_WINDOW_SIZE - 1)
 | 
										   IOP13XX_PMMR_MEM_WINDOW_SIZE - 1)
 | 
				
			||||||
#define IOP13XX_PMMR_VIRT_TO_PHYS(addr)   (u32) ((u32) addr +\
 | 
					#define IOP13XX_PMMR_VIRT_TO_PHYS(addr)   (((addr) - IOP13XX_PMMR_VIRT_MEM_BASE)\
 | 
				
			||||||
					   (IOP13XX_PMMR_PHYS_MEM_BASE\
 | 
										   + IOP13XX_PMMR_PHYS_MEM_BASE)
 | 
				
			||||||
					   - IOP13XX_PMMR_VIRT_MEM_BASE))
 | 
					#define IOP13XX_PMMR_PHYS_TO_VIRT(addr)   (((addr) - IOP13XX_PMMR_PHYS_MEM_BASE)\
 | 
				
			||||||
#define IOP13XX_PMMR_PHYS_TO_VIRT(addr)   (u32) ((u32) addr -\
 | 
										   + IOP13XX_PMMR_VIRT_MEM_BASE)
 | 
				
			||||||
					   (IOP13XX_PMMR_PHYS_MEM_BASE\
 | 
					 | 
				
			||||||
					   - IOP13XX_PMMR_VIRT_MEM_BASE))
 | 
					 | 
				
			||||||
#define IOP13XX_REG_ADDR32(reg)     	   (IOP13XX_PMMR_VIRT_MEM_BASE + (reg))
 | 
					#define IOP13XX_REG_ADDR32(reg)     	   (IOP13XX_PMMR_VIRT_MEM_BASE + (reg))
 | 
				
			||||||
#define IOP13XX_REG_ADDR16(reg)     	   (IOP13XX_PMMR_VIRT_MEM_BASE + (reg))
 | 
					#define IOP13XX_REG_ADDR16(reg)     	   (IOP13XX_PMMR_VIRT_MEM_BASE + (reg))
 | 
				
			||||||
#define IOP13XX_REG_ADDR8(reg)      	   (IOP13XX_PMMR_VIRT_MEM_BASE + (reg))
 | 
					#define IOP13XX_REG_ADDR8(reg)      	   (IOP13XX_PMMR_VIRT_MEM_BASE + (reg))
 | 
				
			||||||
| 
						 | 
					@ -169,10 +145,10 @@ extern unsigned long get_iop_tick_rate(void);
 | 
				
			||||||
#define IOP13XX_PMMR_SIZE		   0x00080000
 | 
					#define IOP13XX_PMMR_SIZE		   0x00080000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*=================== Defines for Platform Devices =====================*/
 | 
					/*=================== Defines for Platform Devices =====================*/
 | 
				
			||||||
#define IOP13XX_UART0_PHYS  (IOP13XX_PMMR_PHYS_MEM_BASE | 0x00002300)
 | 
					#define IOP13XX_UART0_PHYS  (IOP13XX_PMMR_PHYS_MEM_BASE + 0x00002300)
 | 
				
			||||||
#define IOP13XX_UART1_PHYS  (IOP13XX_PMMR_PHYS_MEM_BASE | 0x00002340)
 | 
					#define IOP13XX_UART1_PHYS  (IOP13XX_PMMR_PHYS_MEM_BASE + 0x00002340)
 | 
				
			||||||
#define IOP13XX_UART0_VIRT  (IOP13XX_PMMR_VIRT_MEM_BASE | 0x00002300)
 | 
					#define IOP13XX_UART0_VIRT  (IOP13XX_PMMR_VIRT_MEM_BASE + 0x00002300)
 | 
				
			||||||
#define IOP13XX_UART1_VIRT  (IOP13XX_PMMR_VIRT_MEM_BASE | 0x00002340)
 | 
					#define IOP13XX_UART1_VIRT  (IOP13XX_PMMR_VIRT_MEM_BASE + 0x00002340)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IOP13XX_I2C0_PHYS   (IOP13XX_PMMR_PHYS_MEM_BASE | 0x00002500)
 | 
					#define IOP13XX_I2C0_PHYS   (IOP13XX_PMMR_PHYS_MEM_BASE | 0x00002500)
 | 
				
			||||||
#define IOP13XX_I2C1_PHYS   (IOP13XX_PMMR_PHYS_MEM_BASE | 0x00002520)
 | 
					#define IOP13XX_I2C1_PHYS   (IOP13XX_PMMR_PHYS_MEM_BASE | 0x00002520)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue