mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ARM: arm-soc non-critical fixes for 3.10
Here is a collection of fixes (and some intermixed cleanups) that were considered less important and thus not included in the later parts of the 3.9-rc cycle. It's a bit all over the map, contents wise. A series of ux500 fixes and cleanups, a bunch of various fixes for OMAP and tegra, and some for Freescale i.MX and even Qualcomm MSM. Note that there's also a patch on this branch to globally turn off -Wmaybe-uninitialized when building with -Os. It's been posted several times by Arnd and no dissent was raised, but nobody seemed interested to pick it up. So here it is, as the topmost patch. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJRggtQAAoJEIwa5zzehBx3TmYP/i4Kt3JDYEbYyAqNsH3nb0mN 3kLwViUxDdS/aZCXEaNYLwZBUgl1Zyz3oRd39zFCo4dRM2uG1AW+lC73AP3/eW6n 2oHxI43xzwjDNPxRkiipB4NXPyIoIdbRXM6/QIxXzM9zD3MJXj7BpBBpDgGAsLov BQ2r28idxZE6jB4puPjVZCuyG5UMjA0Ko2Fp2em7QXarQBBscDvhAtjqNZ3JPtlN thASsou1B8805J7jf5G8Wz6fNeVJg2wlWMgE9ywJpKFbut4cGM4riS/QvB0fTe6d tmkCae0bw3UD+D+N1gYcZpeGve8oPSHbeyhrSPAfI/wAVBh0J397MgJW5/f0vW8p DffLjQI+S450Kw0Bab41Tn0JnMnXtYUo56yjemdxa/NQJF34ycBFQ3HOm6nFxo7U 6tce2O775uvG0+rJfDbX6M+Mu7QoIi0p8sOdg0/W+pFK08xvaezsOc1NjqTvuYoC s/2LYiIJqVG6tFVU0i/46duQhdp0I/Oj7wXtFXH0ZvZPBz0cDaSU3irB3QA9pNt5 PI6JEBg0FUPUork24gShSUf7un4Itrjlq20HTkC9/z1skx87PbB3Wa7A8jnHeFme tpuPRvmfBWhIhp06AIA8znhDik9xuJ4B7ypsFNM0VyoV/qx+TSIHbViVQuwcOf9b nAidtuhMjE+P2sAu+VGU =bzsu -----END PGP SIGNATURE----- Merge tag 'fixes-nc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull ARM SoC non-critical fixes from Olof Johansson: "Here is a collection of fixes (and some intermixed cleanups) that were considered less important and thus not included in the later parts of the 3.9-rc cycle. It's a bit all over the map, contents wise. A series of ux500 fixes and cleanups, a bunch of various fixes for OMAP and tegra, and some for Freescale i.MX and even Qualcomm MSM. Note that there's also a patch on this branch to globally turn off -Wmaybe-uninitialized when building with -Os. It's been posted several times by Arnd and no dissent was raised, but nobody seemed interested to pick it up. So here it is, as the topmost patch." * tag 'fixes-nc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (70 commits) Turn off -Wmaybe-uninitialized when building with -Os ARM: orion5x: include linux/cpu.h ARM: tegra: call cpu_do_idle from C code ARM: u300: fix ages old copy/paste bug ARM: OMAP2+: add dependencies on ARCH_MULTI_V6/V7 ARM: tegra: solve adr range issue with THUMB2_KERNEL enabled ARM: tegra: fix relocation truncated error when THUMB2_KERNEL enabled ARM: tegra: fix build error when THUMB2_KERNEL enabled ARM: msm: Fix uncompess.h tx underrun check ARM: vexpress: Remove A9 PMU compatible values for non-A9 platforms ARM: cpuimx27 and mbimx27: prepend CONFIG_ to Kconfig macro ARM: OMAP2+: fix typo "CONFIG_BRIDGE_DVFS" ARM: OMAP1: remove "config MACH_OMAP_HTCWIZARD" ARM: mach-imx: mach-imx6q: Fix sparse warnings ARM: mach-imx: src: Include "common.h ARM: mach-imx: gpc: Include "common.h" ARM: mach-imx: avic: Staticize *avic_base ARM: mach-imx: tzic: Staticize *tzic_base ARM: mach-imx: clk: Include "clk.h" ARM: mach-imx: clk-busy: Staticize clk_busy_mux_ops ...
This commit is contained in:
		
						commit
						4d26aa3054
					
				
					 79 changed files with 321 additions and 279 deletions
				
			
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| 
						 | 
					@ -571,7 +571,7 @@ endif # $(dot-config)
 | 
				
			||||||
all: vmlinux
 | 
					all: vmlinux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
 | 
					ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
 | 
				
			||||||
KBUILD_CFLAGS	+= -Os
 | 
					KBUILD_CFLAGS	+= -Os $(call cc-disable-warning,maybe-uninitialized,)
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
KBUILD_CFLAGS	+= -O2
 | 
					KBUILD_CFLAGS	+= -O2
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -191,7 +191,7 @@ dma-controller@801C0000 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		prcmu: prcmu@80157000 {
 | 
							prcmu: prcmu@80157000 {
 | 
				
			||||||
			compatible = "stericsson,db8500-prcmu";
 | 
								compatible = "stericsson,db8500-prcmu";
 | 
				
			||||||
			reg = <0x80157000 0x1000>, <0x801b0000 0x8000>, <0x801b8000 0x1000>;
 | 
								reg = <0x80157000 0x2000>, <0x801b0000 0x8000>, <0x801b8000 0x1000>;
 | 
				
			||||||
			reg-names = "prcmu", "prcmu-tcpm", "prcmu-tcdm";
 | 
								reg-names = "prcmu", "prcmu-tcpm", "prcmu-tcdm";
 | 
				
			||||||
			interrupts = <0 47 0x4>;
 | 
								interrupts = <0 47 0x4>;
 | 
				
			||||||
			#address-cells = <1>;
 | 
								#address-cells = <1>;
 | 
				
			||||||
| 
						 | 
					@ -674,10 +674,13 @@ vmmci: regulator-gpio {
 | 
				
			||||||
			compatible = "regulator-gpio";
 | 
								compatible = "regulator-gpio";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			regulator-min-microvolt = <1800000>;
 | 
								regulator-min-microvolt = <1800000>;
 | 
				
			||||||
			regulator-max-microvolt = <2600000>;
 | 
								regulator-max-microvolt = <2900000>;
 | 
				
			||||||
			regulator-name = "mmci-reg";
 | 
								regulator-name = "mmci-reg";
 | 
				
			||||||
			regulator-type = "voltage";
 | 
								regulator-type = "voltage";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								startup-delay-us = <100>;
 | 
				
			||||||
 | 
								enable-active-high;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			states = <1800000 0x1
 | 
								states = <1800000 0x1
 | 
				
			||||||
				  2900000 0x0>;
 | 
									  2900000 0x0>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,6 +87,7 @@ sdi0_per1@80126000 {
 | 
				
			||||||
			mmc-cap-sd-highspeed;
 | 
								mmc-cap-sd-highspeed;
 | 
				
			||||||
			mmc-cap-mmc-highspeed;
 | 
								mmc-cap-mmc-highspeed;
 | 
				
			||||||
			vmmc-supply = <&ab8500_ldo_aux3_reg>;
 | 
								vmmc-supply = <&ab8500_ldo_aux3_reg>;
 | 
				
			||||||
 | 
								vqmmc-supply = <&vmmci>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			cd-gpios  = <&tc3589x_gpio 3 0x4>;
 | 
								cd-gpios  = <&tc3589x_gpio 3 0x4>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,6 +25,14 @@ button@1 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	soc-u9500 {
 | 
						soc-u9500 {
 | 
				
			||||||
 | 
							prcmu@80157000 {
 | 
				
			||||||
 | 
								ab8500@5 {
 | 
				
			||||||
 | 
									ab8500-gpio {
 | 
				
			||||||
 | 
										compatible = "stericsson,ab8500-gpio";
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		i2c@80004000 {
 | 
							i2c@80004000 {
 | 
				
			||||||
			tps61052@33 {
 | 
								tps61052@33 {
 | 
				
			||||||
				compatible = "tps61052";
 | 
									compatible = "tps61052";
 | 
				
			||||||
| 
						 | 
					@ -40,7 +48,7 @@ bu21013_tp@0x5c {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vmmci: regulator-gpio {
 | 
							vmmci: regulator-gpio {
 | 
				
			||||||
			gpios = <&tc3589x_gpio 18 0x4>;
 | 
								gpios = <&tc3589x_gpio 18 0x4>;
 | 
				
			||||||
			gpio-enable = <&tc3589x_gpio 17 0x4>;
 | 
								enable-gpio = <&tc3589x_gpio 17 0x4>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			status = "okay";
 | 
								status = "okay";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -299,6 +299,10 @@ db8500_esram34_ret_reg: db8500_esram34_ret {
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			ab8500 {
 | 
								ab8500 {
 | 
				
			||||||
 | 
									ab8500-gpio {
 | 
				
			||||||
 | 
										compatible = "stericsson,ab8500-gpio";
 | 
				
			||||||
 | 
									};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				ab8500-regulators {
 | 
									ab8500-regulators {
 | 
				
			||||||
					ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
 | 
										ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
 | 
				
			||||||
						regulator-name = "V-DISPLAY";
 | 
											regulator-name = "V-DISPLAY";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@ i2c@80004000 {
 | 
				
			||||||
			stmpe1601: stmpe1601@40 {
 | 
								stmpe1601: stmpe1601@40 {
 | 
				
			||||||
				compatible = "st,stmpe1601";
 | 
									compatible = "st,stmpe1601";
 | 
				
			||||||
				reg = <0x40>;
 | 
									reg = <0x40>;
 | 
				
			||||||
				interrupts = <26 0x1>;
 | 
									interrupts = <26 0x2>;
 | 
				
			||||||
				interrupt-parent = <&gpio6>;
 | 
									interrupt-parent = <&gpio6>;
 | 
				
			||||||
				interrupt-controller;
 | 
									interrupt-controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -444,7 +444,7 @@ usb@c5004000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@c8000600 {
 | 
						sdhci@c8000600 {
 | 
				
			||||||
		cd-gpios = <&gpio 23 0>; /* gpio PC7 */
 | 
							cd-gpios = <&gpio 23 1>; /* gpio PC7 */
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sound {
 | 
						sound {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -437,7 +437,7 @@ usb-phy@c5004400 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@c8000200 {
 | 
						sdhci@c8000200 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
		cd-gpios = <&gpio 69 0>; /* gpio PI5 */
 | 
							cd-gpios = <&gpio 69 1>; /* gpio PI5 */
 | 
				
			||||||
		wp-gpios = <&gpio 57 0>; /* gpio PH1 */
 | 
							wp-gpios = <&gpio 57 0>; /* gpio PH1 */
 | 
				
			||||||
		power-gpios = <&gpio 155 0>; /* gpio PT3 */
 | 
							power-gpios = <&gpio 155 0>; /* gpio PT3 */
 | 
				
			||||||
		bus-width = <4>;
 | 
							bus-width = <4>;
 | 
				
			||||||
| 
						 | 
					@ -445,7 +445,7 @@ sdhci@c8000200 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@c8000600 {
 | 
						sdhci@c8000600 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
		cd-gpios = <&gpio 58 0>; /* gpio PH2 */
 | 
							cd-gpios = <&gpio 58 1>; /* gpio PH2 */
 | 
				
			||||||
		wp-gpios = <&gpio 59 0>; /* gpio PH3 */
 | 
							wp-gpios = <&gpio 59 0>; /* gpio PH3 */
 | 
				
			||||||
		power-gpios = <&gpio 70 0>; /* gpio PI6 */
 | 
							power-gpios = <&gpio 70 0>; /* gpio PI6 */
 | 
				
			||||||
		bus-width = <8>;
 | 
							bus-width = <8>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -436,7 +436,7 @@ usb-phy@c5004400 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@c8000000 {
 | 
						sdhci@c8000000 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
		cd-gpios = <&gpio 173 0>; /* gpio PV5 */
 | 
							cd-gpios = <&gpio 173 1>; /* gpio PV5 */
 | 
				
			||||||
		wp-gpios = <&gpio 57 0>;  /* gpio PH1 */
 | 
							wp-gpios = <&gpio 57 0>;  /* gpio PH1 */
 | 
				
			||||||
		power-gpios = <&gpio 169 0>; /* gpio PV1 */
 | 
							power-gpios = <&gpio 169 0>; /* gpio PV1 */
 | 
				
			||||||
		bus-width = <4>;
 | 
							bus-width = <4>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -584,7 +584,7 @@ sdhci@c8000000 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@c8000400 {
 | 
						sdhci@c8000400 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
		cd-gpios = <&gpio 69 0>; /* gpio PI5 */
 | 
							cd-gpios = <&gpio 69 1>; /* gpio PI5 */
 | 
				
			||||||
		wp-gpios = <&gpio 57 0>; /* gpio PH1 */
 | 
							wp-gpios = <&gpio 57 0>; /* gpio PH1 */
 | 
				
			||||||
		power-gpios = <&gpio 70 0>; /* gpio PI6 */
 | 
							power-gpios = <&gpio 70 0>; /* gpio PI6 */
 | 
				
			||||||
		bus-width = <4>;
 | 
							bus-width = <4>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -465,7 +465,7 @@ usb@c5008000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@c8000600 {
 | 
						sdhci@c8000600 {
 | 
				
			||||||
		cd-gpios = <&gpio 58 0>; /* gpio PH2 */
 | 
							cd-gpios = <&gpio 58 1>; /* gpio PH2 */
 | 
				
			||||||
		wp-gpios = <&gpio 59 0>; /* gpio PH3 */
 | 
							wp-gpios = <&gpio 59 0>; /* gpio PH3 */
 | 
				
			||||||
		bus-width = <4>;
 | 
							bus-width = <4>;
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -325,7 +325,7 @@ sdhci@c8000000 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@c8000600 {
 | 
						sdhci@c8000600 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
		cd-gpios = <&gpio 121 0>; /* gpio PP1 */
 | 
							cd-gpios = <&gpio 121 1>; /* gpio PP1 */
 | 
				
			||||||
		wp-gpios = <&gpio 122 0>; /* gpio PP2 */
 | 
							wp-gpios = <&gpio 122 0>; /* gpio PP2 */
 | 
				
			||||||
		bus-width = <4>;
 | 
							bus-width = <4>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -520,7 +520,7 @@ sdhci@c8000000 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@c8000400 {
 | 
						sdhci@c8000400 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
		cd-gpios = <&gpio 69 0>; /* gpio PI5 */
 | 
							cd-gpios = <&gpio 69 1>; /* gpio PI5 */
 | 
				
			||||||
		wp-gpios = <&gpio 57 0>; /* gpio PH1 */
 | 
							wp-gpios = <&gpio 57 0>; /* gpio PH1 */
 | 
				
			||||||
		power-gpios = <&gpio 70 0>; /* gpio PI6 */
 | 
							power-gpios = <&gpio 70 0>; /* gpio PI6 */
 | 
				
			||||||
		bus-width = <4>;
 | 
							bus-width = <4>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -510,6 +510,7 @@ usb@c5008000 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@c8000400 {
 | 
						sdhci@c8000400 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
 | 
							cd-gpios = <&gpio 69 1>; /* gpio PI5 */
 | 
				
			||||||
		wp-gpios = <&gpio 173 0>; /* gpio PV5 */
 | 
							wp-gpios = <&gpio 173 0>; /* gpio PV5 */
 | 
				
			||||||
		bus-width = <8>;
 | 
							bus-width = <8>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -257,7 +257,7 @@ pmc {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@78000000 {
 | 
						sdhci@78000000 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
		cd-gpios = <&gpio 69 0>; /* gpio PI5 */
 | 
							cd-gpios = <&gpio 69 1>; /* gpio PI5 */
 | 
				
			||||||
		wp-gpios = <&gpio 155 0>; /* gpio PT3 */
 | 
							wp-gpios = <&gpio 155 0>; /* gpio PT3 */
 | 
				
			||||||
		power-gpios = <&gpio 31 0>; /* gpio PD7 */
 | 
							power-gpios = <&gpio 31 0>; /* gpio PD7 */
 | 
				
			||||||
		bus-width = <4>;
 | 
							bus-width = <4>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -311,7 +311,7 @@ pmc {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdhci@78000000 {
 | 
						sdhci@78000000 {
 | 
				
			||||||
		status = "okay";
 | 
							status = "okay";
 | 
				
			||||||
		cd-gpios = <&gpio 69 0>; /* gpio PI5 */
 | 
							cd-gpios = <&gpio 69 1>; /* gpio PI5 */
 | 
				
			||||||
		wp-gpios = <&gpio 155 0>; /* gpio PT3 */
 | 
							wp-gpios = <&gpio 155 0>; /* gpio PT3 */
 | 
				
			||||||
		power-gpios = <&gpio 31 0>; /* gpio PD7 */
 | 
							power-gpios = <&gpio 31 0>; /* gpio PD7 */
 | 
				
			||||||
		bus-width = <4>;
 | 
							bus-width = <4>;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -117,7 +117,7 @@ timer {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pmu {
 | 
						pmu {
 | 
				
			||||||
		compatible = "arm,cortex-a15-pmu", "arm,cortex-a9-pmu";
 | 
							compatible = "arm,cortex-a15-pmu";
 | 
				
			||||||
		interrupts = <0 68 4>,
 | 
							interrupts = <0 68 4>,
 | 
				
			||||||
			     <0 69 4>;
 | 
								     <0 69 4>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -134,7 +134,7 @@ timer {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pmu {
 | 
						pmu {
 | 
				
			||||||
		compatible = "arm,cortex-a15-pmu", "arm,cortex-a9-pmu";
 | 
							compatible = "arm,cortex-a15-pmu";
 | 
				
			||||||
		interrupts = <0 68 4>,
 | 
							interrupts = <0 68 4>,
 | 
				
			||||||
			     <0 69 4>;
 | 
								     <0 69 4>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -111,7 +111,7 @@ L2: cache-controller@2c0f0000 {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pmu {
 | 
						pmu {
 | 
				
			||||||
		compatible = "arm,cortex-a5-pmu", "arm,cortex-a9-pmu";
 | 
							compatible = "arm,cortex-a5-pmu";
 | 
				
			||||||
		interrupts = <0 68 4>,
 | 
							interrupts = <0 68 4>,
 | 
				
			||||||
			     <0 69 4>;
 | 
								     <0 69 4>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,16 +31,6 @@ static struct map_desc cns3xxx_io_desc[] __initdata = {
 | 
				
			||||||
		.pfn		= __phys_to_pfn(CNS3XXX_TIMER1_2_3_BASE),
 | 
							.pfn		= __phys_to_pfn(CNS3XXX_TIMER1_2_3_BASE),
 | 
				
			||||||
		.length		= SZ_4K,
 | 
							.length		= SZ_4K,
 | 
				
			||||||
		.type		= MT_DEVICE,
 | 
							.type		= MT_DEVICE,
 | 
				
			||||||
	}, {
 | 
					 | 
				
			||||||
		.virtual	= CNS3XXX_GPIOA_BASE_VIRT,
 | 
					 | 
				
			||||||
		.pfn		= __phys_to_pfn(CNS3XXX_GPIOA_BASE),
 | 
					 | 
				
			||||||
		.length		= SZ_4K,
 | 
					 | 
				
			||||||
		.type		= MT_DEVICE,
 | 
					 | 
				
			||||||
	}, {
 | 
					 | 
				
			||||||
		.virtual	= CNS3XXX_GPIOB_BASE_VIRT,
 | 
					 | 
				
			||||||
		.pfn		= __phys_to_pfn(CNS3XXX_GPIOB_BASE),
 | 
					 | 
				
			||||||
		.length		= SZ_4K,
 | 
					 | 
				
			||||||
		.type		= MT_DEVICE,
 | 
					 | 
				
			||||||
	}, {
 | 
						}, {
 | 
				
			||||||
		.virtual	= CNS3XXX_MISC_BASE_VIRT,
 | 
							.virtual	= CNS3XXX_MISC_BASE_VIRT,
 | 
				
			||||||
		.pfn		= __phys_to_pfn(CNS3XXX_MISC_BASE),
 | 
							.pfn		= __phys_to_pfn(CNS3XXX_MISC_BASE),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,22 +20,16 @@
 | 
				
			||||||
#define CNS3XXX_SPI_FLASH_BASE			0x60000000	/* SPI Serial Flash Memory */
 | 
					#define CNS3XXX_SPI_FLASH_BASE			0x60000000	/* SPI Serial Flash Memory */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_SWITCH_BASE			0x70000000	/* Switch and HNAT Control */
 | 
					#define CNS3XXX_SWITCH_BASE			0x70000000	/* Switch and HNAT Control */
 | 
				
			||||||
#define CNS3XXX_SWITCH_BASE_VIRT		0xFFF00000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_PPE_BASE			0x70001000	/* HANT	*/
 | 
					#define CNS3XXX_PPE_BASE			0x70001000	/* HANT	*/
 | 
				
			||||||
#define CNS3XXX_PPE_BASE_VIRT			0xFFF50000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_EMBEDDED_SRAM_BASE		0x70002000	/* HANT Embedded SRAM */
 | 
					#define CNS3XXX_EMBEDDED_SRAM_BASE		0x70002000	/* HANT Embedded SRAM */
 | 
				
			||||||
#define CNS3XXX_EMBEDDED_SRAM_BASE_VIRT		0xFFF60000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_SSP_BASE			0x71000000	/* Synchronous Serial Port - SPI/PCM/I2C */
 | 
					#define CNS3XXX_SSP_BASE			0x71000000	/* Synchronous Serial Port - SPI/PCM/I2C */
 | 
				
			||||||
#define CNS3XXX_SSP_BASE_VIRT			0xFFF01000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_DMC_BASE			0x72000000	/* DMC Control (DDR2 SDRAM) */
 | 
					#define CNS3XXX_DMC_BASE			0x72000000	/* DMC Control (DDR2 SDRAM) */
 | 
				
			||||||
#define CNS3XXX_DMC_BASE_VIRT			0xFFF02000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_SMC_BASE			0x73000000	/* SMC Control */
 | 
					#define CNS3XXX_SMC_BASE			0x73000000	/* SMC Control */
 | 
				
			||||||
#define CNS3XXX_SMC_BASE_VIRT			0xFFF03000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SMC_MEMC_STATUS_OFFSET			0x000
 | 
					#define SMC_MEMC_STATUS_OFFSET			0x000
 | 
				
			||||||
#define SMC_MEMIF_CFG_OFFSET			0x004
 | 
					#define SMC_MEMIF_CFG_OFFSET			0x004
 | 
				
			||||||
| 
						 | 
					@ -74,13 +68,10 @@
 | 
				
			||||||
#define SMC_PCELL_ID_3_OFFSET			0xFFC
 | 
					#define SMC_PCELL_ID_3_OFFSET			0xFFC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_GPIOA_BASE			0x74000000	/* GPIO port A */
 | 
					#define CNS3XXX_GPIOA_BASE			0x74000000	/* GPIO port A */
 | 
				
			||||||
#define CNS3XXX_GPIOA_BASE_VIRT			0xFFF04000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_GPIOB_BASE			0x74800000	/* GPIO port B */
 | 
					#define CNS3XXX_GPIOB_BASE			0x74800000	/* GPIO port B */
 | 
				
			||||||
#define CNS3XXX_GPIOB_BASE_VIRT			0xFFF05000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_RTC_BASE			0x75000000	/* Real Time Clock */
 | 
					#define CNS3XXX_RTC_BASE			0x75000000	/* Real Time Clock */
 | 
				
			||||||
#define CNS3XXX_RTC_BASE_VIRT			0xFFF06000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RTC_SEC_OFFSET				0x00
 | 
					#define RTC_SEC_OFFSET				0x00
 | 
				
			||||||
#define RTC_MIN_OFFSET				0x04
 | 
					#define RTC_MIN_OFFSET				0x04
 | 
				
			||||||
| 
						 | 
					@ -112,22 +103,16 @@
 | 
				
			||||||
#define CNS3XXX_UART0_BASE_VIRT			0xFB002000
 | 
					#define CNS3XXX_UART0_BASE_VIRT			0xFB002000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_UART1_BASE			0x78400000	/* UART 1 */
 | 
					#define CNS3XXX_UART1_BASE			0x78400000	/* UART 1 */
 | 
				
			||||||
#define CNS3XXX_UART1_BASE_VIRT			0xFFF0A000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_UART2_BASE			0x78800000	/* UART 2 */
 | 
					#define CNS3XXX_UART2_BASE			0x78800000	/* UART 2 */
 | 
				
			||||||
#define CNS3XXX_UART2_BASE_VIRT			0xFFF0B000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_DMAC_BASE			0x79000000	/* Generic DMA Control */
 | 
					#define CNS3XXX_DMAC_BASE			0x79000000	/* Generic DMA Control */
 | 
				
			||||||
#define CNS3XXX_DMAC_BASE_VIRT			0xFFF0D000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_CORESIGHT_BASE			0x7A000000	/* CoreSight */
 | 
					#define CNS3XXX_CORESIGHT_BASE			0x7A000000	/* CoreSight */
 | 
				
			||||||
#define CNS3XXX_CORESIGHT_BASE_VIRT		0xFFF0E000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_CRYPTO_BASE			0x7B000000	/* Crypto */
 | 
					#define CNS3XXX_CRYPTO_BASE			0x7B000000	/* Crypto */
 | 
				
			||||||
#define CNS3XXX_CRYPTO_BASE_VIRT		0xFFF0F000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_I2S_BASE			0x7C000000	/* I2S */
 | 
					#define CNS3XXX_I2S_BASE			0x7C000000	/* I2S */
 | 
				
			||||||
#define CNS3XXX_I2S_BASE_VIRT			0xFFF10000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_TIMER1_2_3_BASE			0x7C800000	/* Timer */
 | 
					#define CNS3XXX_TIMER1_2_3_BASE			0x7C800000	/* Timer */
 | 
				
			||||||
#define CNS3XXX_TIMER1_2_3_BASE_VIRT		0xFB003000
 | 
					#define CNS3XXX_TIMER1_2_3_BASE_VIRT		0xFB003000
 | 
				
			||||||
| 
						 | 
					@ -150,42 +135,31 @@
 | 
				
			||||||
#define TIMER_FREERUN_CONTROL_OFFSET		0x44
 | 
					#define TIMER_FREERUN_CONTROL_OFFSET		0x44
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_HCIE_BASE			0x7D000000	/* HCIE Control */
 | 
					#define CNS3XXX_HCIE_BASE			0x7D000000	/* HCIE Control */
 | 
				
			||||||
#define CNS3XXX_HCIE_BASE_VIRT			0xFFF30000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_RAID_BASE			0x7E000000	/* RAID Control */
 | 
					#define CNS3XXX_RAID_BASE			0x7E000000	/* RAID Control */
 | 
				
			||||||
#define CNS3XXX_RAID_BASE_VIRT			0xFFF12000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_AXI_IXC_BASE			0x7F000000	/* AXI IXC */
 | 
					#define CNS3XXX_AXI_IXC_BASE			0x7F000000	/* AXI IXC */
 | 
				
			||||||
#define CNS3XXX_AXI_IXC_BASE_VIRT		0xFFF13000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_CLCD_BASE			0x80000000	/* LCD Control */
 | 
					#define CNS3XXX_CLCD_BASE			0x80000000	/* LCD Control */
 | 
				
			||||||
#define CNS3XXX_CLCD_BASE_VIRT			0xFFF14000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_USBOTG_BASE			0x81000000	/* USB OTG Control */
 | 
					#define CNS3XXX_USBOTG_BASE			0x81000000	/* USB OTG Control */
 | 
				
			||||||
#define CNS3XXX_USBOTG_BASE_VIRT		0xFFF15000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_USB_BASE			0x82000000	/* USB Host Control */
 | 
					#define CNS3XXX_USB_BASE			0x82000000	/* USB Host Control */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_SATA2_BASE			0x83000000	/* SATA */
 | 
					#define CNS3XXX_SATA2_BASE			0x83000000	/* SATA */
 | 
				
			||||||
#define CNS3XXX_SATA2_SIZE			SZ_16M
 | 
					#define CNS3XXX_SATA2_SIZE			SZ_16M
 | 
				
			||||||
#define CNS3XXX_SATA2_BASE_VIRT			0xFFF17000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_CAMERA_BASE			0x84000000	/* Camera Interface */
 | 
					#define CNS3XXX_CAMERA_BASE			0x84000000	/* Camera Interface */
 | 
				
			||||||
#define CNS3XXX_CAMERA_BASE_VIRT		0xFFF18000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_SDIO_BASE			0x85000000	/* SDIO */
 | 
					#define CNS3XXX_SDIO_BASE			0x85000000	/* SDIO */
 | 
				
			||||||
#define CNS3XXX_SDIO_BASE_VIRT			0xFFF19000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_I2S_TDM_BASE			0x86000000	/* I2S TDM */
 | 
					#define CNS3XXX_I2S_TDM_BASE			0x86000000	/* I2S TDM */
 | 
				
			||||||
#define CNS3XXX_I2S_TDM_BASE_VIRT		0xFFF1A000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_2DG_BASE			0x87000000	/* 2D Graphic Control */
 | 
					#define CNS3XXX_2DG_BASE			0x87000000	/* 2D Graphic Control */
 | 
				
			||||||
#define CNS3XXX_2DG_BASE_VIRT			0xFFF1B000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_USB_OHCI_BASE			0x88000000	/* USB OHCI */
 | 
					#define CNS3XXX_USB_OHCI_BASE			0x88000000	/* USB OHCI */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_L2C_BASE			0x92000000	/* L2 Cache Control */
 | 
					#define CNS3XXX_L2C_BASE			0x92000000	/* L2 Cache Control */
 | 
				
			||||||
#define CNS3XXX_L2C_BASE_VIRT			0xFFF27000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_PCIE0_MEM_BASE			0xA0000000	/* PCIe Port 0 IO/Memory Space */
 | 
					#define CNS3XXX_PCIE0_MEM_BASE			0xA0000000	/* PCIe Port 0 IO/Memory Space */
 | 
				
			||||||
#define CNS3XXX_PCIE0_MEM_BASE_VIRT		0xE0000000
 | 
					#define CNS3XXX_PCIE0_MEM_BASE_VIRT		0xE0000000
 | 
				
			||||||
| 
						 | 
					@ -239,7 +213,6 @@
 | 
				
			||||||
#define CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT	(CNS3XXX_TC11MP_SCU_BASE_VIRT + 0x1000)
 | 
					#define CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT	(CNS3XXX_TC11MP_SCU_BASE_VIRT + 0x1000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CNS3XXX_TC11MP_L220_BASE		0x92002000	/* L220 registers */
 | 
					#define CNS3XXX_TC11MP_L220_BASE		0x92002000	/* L220 registers */
 | 
				
			||||||
#define CNS3XXX_TC11MP_L220_BASE_VIRT		0xFF002000
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Misc block
 | 
					 * Misc block
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define AVIC_NUM_IRQS 64
 | 
					#define AVIC_NUM_IRQS 64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void __iomem *avic_base;
 | 
					static void __iomem *avic_base;
 | 
				
			||||||
static struct irq_domain *domain;
 | 
					static struct irq_domain *domain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static u32 avic_saved_mask_reg[2];
 | 
					static u32 avic_saved_mask_reg[2];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,7 +147,7 @@ static int clk_busy_mux_set_parent(struct clk_hw *hw, u8 index)
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct clk_ops clk_busy_mux_ops = {
 | 
					static struct clk_ops clk_busy_mux_ops = {
 | 
				
			||||||
	.get_parent = clk_busy_mux_get_parent,
 | 
						.get_parent = clk_busy_mux_get_parent,
 | 
				
			||||||
	.set_parent = clk_busy_mux_set_parent,
 | 
						.set_parent = clk_busy_mux_set_parent,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,7 @@
 | 
				
			||||||
#include <linux/io.h>
 | 
					#include <linux/io.h>
 | 
				
			||||||
#include <linux/err.h>
 | 
					#include <linux/err.h>
 | 
				
			||||||
#include <linux/string.h>
 | 
					#include <linux/string.h>
 | 
				
			||||||
 | 
					#include "clk.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * DOC: basic gatable clock which can gate and ungate it's ouput
 | 
					 * DOC: basic gatable clock which can gate and ungate it's ouput
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -78,7 +78,7 @@ static unsigned long clk_pllv1_recalc_rate(struct clk_hw *hw,
 | 
				
			||||||
	return ll;
 | 
						return ll;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct clk_ops clk_pllv1_ops = {
 | 
					static struct clk_ops clk_pllv1_ops = {
 | 
				
			||||||
	.recalc_rate = clk_pllv1_recalc_rate,
 | 
						.recalc_rate = clk_pllv1_recalc_rate,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -229,7 +229,7 @@ static void clk_pllv2_unprepare(struct clk_hw *hw)
 | 
				
			||||||
	__raw_writel(reg, pllbase + MXC_PLL_DP_CTL);
 | 
						__raw_writel(reg, pllbase + MXC_PLL_DP_CTL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct clk_ops clk_pllv2_ops = {
 | 
					static struct clk_ops clk_pllv2_ops = {
 | 
				
			||||||
	.prepare = clk_pllv2_prepare,
 | 
						.prepare = clk_pllv2_prepare,
 | 
				
			||||||
	.unprepare = clk_pllv2_unprepare,
 | 
						.unprepare = clk_pllv2_unprepare,
 | 
				
			||||||
	.recalc_rate = clk_pllv2_recalc_rate,
 | 
						.recalc_rate = clk_pllv2_recalc_rate,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
#include <linux/spinlock.h>
 | 
					#include <linux/spinlock.h>
 | 
				
			||||||
 | 
					#include "clk.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEFINE_SPINLOCK(imx_ccm_lock);
 | 
					DEFINE_SPINLOCK(imx_ccm_lock);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@
 | 
				
			||||||
#include <linux/io.h>
 | 
					#include <linux/io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "hardware.h"
 | 
					#include "hardware.h"
 | 
				
			||||||
 | 
					#include "common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int mx5_cpu_rev = -1;
 | 
					static int mx5_cpu_rev = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@
 | 
				
			||||||
#include <linux/io.h>
 | 
					#include <linux/io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "hardware.h"
 | 
					#include "hardware.h"
 | 
				
			||||||
 | 
					#include "common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned int __mxc_cpu_type;
 | 
					unsigned int __mxc_cpu_type;
 | 
				
			||||||
EXPORT_SYMBOL(__mxc_cpu_type);
 | 
					EXPORT_SYMBOL(__mxc_cpu_type);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,7 @@ static const int eukrea_mbimx27_pins[] __initconst = {
 | 
				
			||||||
	PE10_PF_UART3_CTS,
 | 
						PE10_PF_UART3_CTS,
 | 
				
			||||||
	PE11_PF_UART3_RTS,
 | 
						PE11_PF_UART3_RTS,
 | 
				
			||||||
	/* UART4 */
 | 
						/* UART4 */
 | 
				
			||||||
#if !defined(MACH_EUKREA_CPUIMX27_USEUART4)
 | 
					#if !defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)
 | 
				
			||||||
	PB26_AF_UART4_RTS,
 | 
						PB26_AF_UART4_RTS,
 | 
				
			||||||
	PB28_AF_UART4_TXD,
 | 
						PB28_AF_UART4_TXD,
 | 
				
			||||||
	PB29_AF_UART4_CTS,
 | 
						PB29_AF_UART4_CTS,
 | 
				
			||||||
| 
						 | 
					@ -306,7 +306,7 @@ void __init eukrea_mbimx27_baseboard_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	imx27_add_imx_uart1(&uart_pdata);
 | 
						imx27_add_imx_uart1(&uart_pdata);
 | 
				
			||||||
	imx27_add_imx_uart2(&uart_pdata);
 | 
						imx27_add_imx_uart2(&uart_pdata);
 | 
				
			||||||
#if !defined(MACH_EUKREA_CPUIMX27_USEUART4)
 | 
					#if !defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)
 | 
				
			||||||
	imx27_add_imx_uart3(&uart_pdata);
 | 
						imx27_add_imx_uart3(&uart_pdata);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@
 | 
				
			||||||
#include <linux/of_address.h>
 | 
					#include <linux/of_address.h>
 | 
				
			||||||
#include <linux/of_irq.h>
 | 
					#include <linux/of_irq.h>
 | 
				
			||||||
#include <linux/irqchip/arm-gic.h>
 | 
					#include <linux/irqchip/arm-gic.h>
 | 
				
			||||||
 | 
					#include "common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define GPC_IMR1		0x008
 | 
					#define GPC_IMR1		0x008
 | 
				
			||||||
#define GPC_PGC_CPU_PDN		0x2a0
 | 
					#define GPC_PGC_CPU_PDN		0x2a0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@ static DEFINE_SPINLOCK(gpio_mux_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IOMUX_REG_MASK (IOMUX_PADNUM_MASK & ~0x3)
 | 
					#define IOMUX_REG_MASK (IOMUX_PADNUM_MASK & ~0x3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned long mxc_pin_alloc_map[NB_PORTS * 32 / BITS_PER_LONG];
 | 
					static unsigned long mxc_pin_alloc_map[NB_PORTS * 32 / BITS_PER_LONG];
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * set the mode for a IOMUX pin.
 | 
					 * set the mode for a IOMUX pin.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,25 +21,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "irq-common.h"
 | 
					#include "irq-common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int imx_irq_set_priority(unsigned char irq, unsigned char prio)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct irq_chip_generic *gc;
 | 
					 | 
				
			||||||
	struct mxc_extra_irq *exirq;
 | 
					 | 
				
			||||||
	int ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ret = -ENOSYS;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	gc = irq_get_chip_data(irq);
 | 
					 | 
				
			||||||
	if (gc && gc->private) {
 | 
					 | 
				
			||||||
		exirq = gc->private;
 | 
					 | 
				
			||||||
		if (exirq->set_priority)
 | 
					 | 
				
			||||||
			ret = exirq->set_priority(irq, prio);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
EXPORT_SYMBOL(imx_irq_set_priority);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int mxc_set_irq_fiq(unsigned int irq, unsigned int type)
 | 
					int mxc_set_irq_fiq(unsigned int irq, unsigned int type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct irq_chip_generic *gc;
 | 
						struct irq_chip_generic *gc;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,7 +48,7 @@ static const int eukrea_cpuimx27_pins[] __initconst = {
 | 
				
			||||||
	PE14_PF_UART1_CTS,
 | 
						PE14_PF_UART1_CTS,
 | 
				
			||||||
	PE15_PF_UART1_RTS,
 | 
						PE15_PF_UART1_RTS,
 | 
				
			||||||
	/* UART4 */
 | 
						/* UART4 */
 | 
				
			||||||
#if defined(MACH_EUKREA_CPUIMX27_USEUART4)
 | 
					#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)
 | 
				
			||||||
	PB26_AF_UART4_RTS,
 | 
						PB26_AF_UART4_RTS,
 | 
				
			||||||
	PB28_AF_UART4_TXD,
 | 
						PB28_AF_UART4_TXD,
 | 
				
			||||||
	PB29_AF_UART4_CTS,
 | 
						PB29_AF_UART4_CTS,
 | 
				
			||||||
| 
						 | 
					@ -272,7 +272,7 @@ static void __init eukrea_cpuimx27_init(void)
 | 
				
			||||||
	/* SDHC2 can be used for Wifi */
 | 
						/* SDHC2 can be used for Wifi */
 | 
				
			||||||
	imx27_add_mxc_mmc(1, NULL);
 | 
						imx27_add_mxc_mmc(1, NULL);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if defined(MACH_EUKREA_CPUIMX27_USEUART4)
 | 
					#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)
 | 
				
			||||||
	/* in which case UART4 is also used for Bluetooth */
 | 
						/* in which case UART4 is also used for Bluetooth */
 | 
				
			||||||
	imx27_add_imx_uart3(&uart_pdata);
 | 
						imx27_add_imx_uart3(&uart_pdata);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,7 +73,7 @@ static int imx6q_revision(void)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void imx6q_restart(char mode, const char *cmd)
 | 
					static void imx6q_restart(char mode, const char *cmd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct device_node *np;
 | 
						struct device_node *np;
 | 
				
			||||||
	void __iomem *wdog_base;
 | 
						void __iomem *wdog_base;
 | 
				
			||||||
| 
						 | 
					@ -256,7 +256,7 @@ static void __init imx6q_opp_init(struct device *cpu_dev)
 | 
				
			||||||
	of_node_put(np);
 | 
						of_node_put(np);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct platform_device imx6q_cpufreq_pdev = {
 | 
					static struct platform_device imx6q_cpufreq_pdev = {
 | 
				
			||||||
	.name = "imx6q-cpufreq",
 | 
						.name = "imx6q-cpufreq",
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,7 +82,7 @@ static void __iomem *imx3_ioremap_caller(unsigned long phys_addr, size_t size,
 | 
				
			||||||
	return __arm_ioremap_caller(phys_addr, size, mtype, caller);
 | 
						return __arm_ioremap_caller(phys_addr, size, mtype, caller);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void __init imx3_init_l2x0(void)
 | 
					static void __init imx3_init_l2x0(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef CONFIG_CACHE_L2X0
 | 
					#ifdef CONFIG_CACHE_L2X0
 | 
				
			||||||
	void __iomem *l2x0_base;
 | 
						void __iomem *l2x0_base;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@
 | 
				
			||||||
#include <linux/of_address.h>
 | 
					#include <linux/of_address.h>
 | 
				
			||||||
#include <linux/smp.h>
 | 
					#include <linux/smp.h>
 | 
				
			||||||
#include <asm/smp_plat.h>
 | 
					#include <asm/smp_plat.h>
 | 
				
			||||||
 | 
					#include "common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SRC_SCR				0x000
 | 
					#define SRC_SCR				0x000
 | 
				
			||||||
#define SRC_GPR1			0x020
 | 
					#define SRC_GPR1			0x020
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@
 | 
				
			||||||
#define TZIC_SWINT	0x0F00	/* Software Interrupt Rigger Register */
 | 
					#define TZIC_SWINT	0x0F00	/* Software Interrupt Rigger Register */
 | 
				
			||||||
#define TZIC_ID0	0x0FD0	/* Indentification Register 0 */
 | 
					#define TZIC_ID0	0x0FD0	/* Indentification Register 0 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void __iomem *tzic_base; /* Used as irq controller base in entry-macro.S */
 | 
					static void __iomem *tzic_base;
 | 
				
			||||||
static struct irq_domain *domain;
 | 
					static struct irq_domain *domain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TZIC_NUM_IRQS 128
 | 
					#define TZIC_NUM_IRQS 128
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,7 @@ static void putc(int c)
 | 
				
			||||||
	 * Wait for TX_READY to be set; but skip it if we have a
 | 
						 * Wait for TX_READY to be set; but skip it if we have a
 | 
				
			||||||
	 * TX underrun.
 | 
						 * TX underrun.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (UART_DM_SR & 0x08)
 | 
						if (!(UART_DM_SR & 0x08))
 | 
				
			||||||
		while (!(UART_DM_ISR & 0x80))
 | 
							while (!(UART_DM_ISR & 0x80))
 | 
				
			||||||
			cpu_relax();
 | 
								cpu_relax();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,12 +55,6 @@ config MACH_OMAP_H3
 | 
				
			||||||
	  TI OMAP 1710 H3 board support. Say Y here if you have such
 | 
						  TI OMAP 1710 H3 board support. Say Y here if you have such
 | 
				
			||||||
	  a board.
 | 
						  a board.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_OMAP_HTCWIZARD
 | 
					 | 
				
			||||||
	bool "HTC Wizard"
 | 
					 | 
				
			||||||
	depends on ARCH_OMAP850
 | 
					 | 
				
			||||||
	help
 | 
					 | 
				
			||||||
	  HTC Wizard smartphone support (AKA QTEK 9100, ...)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config MACH_HERALD
 | 
					config MACH_HERALD
 | 
				
			||||||
	bool "HTC Herald"
 | 
						bool "HTC Herald"
 | 
				
			||||||
	depends on ARCH_OMAP850
 | 
						depends on ARCH_OMAP850
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,6 +55,7 @@ config SOC_HAS_REALTIME_COUNTER
 | 
				
			||||||
config ARCH_OMAP2
 | 
					config ARCH_OMAP2
 | 
				
			||||||
	bool "TI OMAP2"
 | 
						bool "TI OMAP2"
 | 
				
			||||||
	depends on ARCH_OMAP2PLUS
 | 
						depends on ARCH_OMAP2PLUS
 | 
				
			||||||
 | 
						depends on ARCH_MULTI_V6
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	select CPU_V6
 | 
						select CPU_V6
 | 
				
			||||||
	select MULTI_IRQ_HANDLER
 | 
						select MULTI_IRQ_HANDLER
 | 
				
			||||||
| 
						 | 
					@ -64,6 +65,7 @@ config ARCH_OMAP2
 | 
				
			||||||
config ARCH_OMAP3
 | 
					config ARCH_OMAP3
 | 
				
			||||||
	bool "TI OMAP3"
 | 
						bool "TI OMAP3"
 | 
				
			||||||
	depends on ARCH_OMAP2PLUS
 | 
						depends on ARCH_OMAP2PLUS
 | 
				
			||||||
 | 
						depends on ARCH_MULTI_V7
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	select ARCH_HAS_OPP
 | 
						select ARCH_HAS_OPP
 | 
				
			||||||
	select ARM_CPU_SUSPEND if PM
 | 
						select ARM_CPU_SUSPEND if PM
 | 
				
			||||||
| 
						 | 
					@ -80,6 +82,7 @@ config ARCH_OMAP4
 | 
				
			||||||
	bool "TI OMAP4"
 | 
						bool "TI OMAP4"
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	depends on ARCH_OMAP2PLUS
 | 
						depends on ARCH_OMAP2PLUS
 | 
				
			||||||
 | 
						depends on ARCH_MULTI_V7
 | 
				
			||||||
	select ARCH_HAS_OPP
 | 
						select ARCH_HAS_OPP
 | 
				
			||||||
	select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP
 | 
						select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP
 | 
				
			||||||
	select ARM_CPU_SUSPEND if PM
 | 
						select ARM_CPU_SUSPEND if PM
 | 
				
			||||||
| 
						 | 
					@ -99,6 +102,7 @@ config ARCH_OMAP4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config SOC_OMAP5
 | 
					config SOC_OMAP5
 | 
				
			||||||
	bool "TI OMAP5"
 | 
						bool "TI OMAP5"
 | 
				
			||||||
 | 
						depends on ARCH_MULTI_V7
 | 
				
			||||||
	select ARM_CPU_SUSPEND if PM
 | 
						select ARM_CPU_SUSPEND if PM
 | 
				
			||||||
	select ARM_GIC
 | 
						select ARM_GIC
 | 
				
			||||||
	select CPU_V7
 | 
						select CPU_V7
 | 
				
			||||||
| 
						 | 
					@ -135,6 +139,7 @@ config SOC_TI81XX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config SOC_AM33XX
 | 
					config SOC_AM33XX
 | 
				
			||||||
	bool "AM33XX support"
 | 
						bool "AM33XX support"
 | 
				
			||||||
 | 
						depends on ARCH_MULTI_V7
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	select ARM_CPU_SUSPEND if PM
 | 
						select ARM_CPU_SUSPEND if PM
 | 
				
			||||||
	select CPU_V7
 | 
						select CPU_V7
 | 
				
			||||||
| 
						 | 
					@ -408,7 +413,7 @@ config OMAP3_SDRC_AC_TIMING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config OMAP4_ERRATA_I688
 | 
					config OMAP4_ERRATA_I688
 | 
				
			||||||
	bool "OMAP4 errata: Async Bridge Corruption"
 | 
						bool "OMAP4 errata: Async Bridge Corruption"
 | 
				
			||||||
	depends on ARCH_OMAP4 && !ARCH_MULTIPLATFORM
 | 
						depends on (ARCH_OMAP4 || SOC_OMAP5) && !ARCH_MULTIPLATFORM
 | 
				
			||||||
	select ARCH_HAS_BARRIERS
 | 
						select ARCH_HAS_BARRIERS
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  If a data is stalled inside asynchronous bridge because of back
 | 
						  If a data is stalled inside asynchronous bridge because of back
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -166,7 +166,7 @@ static void __init sdp2430_display_init(void)
 | 
				
			||||||
	omap_display_init(&sdp2430_dss_data);
 | 
						omap_display_init(&sdp2430_dss_data);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91x_MODULE)
 | 
					#if IS_ENABLED(CONFIG_SMC91X)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct omap_smc91x_platform_data board_smc91x_data = {
 | 
					static struct omap_smc91x_platform_data board_smc91x_data = {
 | 
				
			||||||
	.cs		= 5,
 | 
						.cs		= 5,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -246,7 +246,7 @@ static u32 is_gpmc_muxed(void)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91x_MODULE)
 | 
					#if IS_ENABLED(CONFIG_SMC91X)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct omap_smc91x_platform_data board_smc91x_data = {
 | 
					static struct omap_smc91x_platform_data board_smc91x_data = {
 | 
				
			||||||
	.cs		= 1,
 | 
						.cs		= 1,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -958,6 +958,14 @@ int __init am33xx_clk_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clk_set_parent(&timer3_fck, &sys_clkin_ck);
 | 
						clk_set_parent(&timer3_fck, &sys_clkin_ck);
 | 
				
			||||||
	clk_set_parent(&timer6_fck, &sys_clkin_ck);
 | 
						clk_set_parent(&timer6_fck, &sys_clkin_ck);
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * The On-Chip 32K RC Osc clock is not an accurate clock-source as per
 | 
				
			||||||
 | 
						 * the design/spec, so as a result, for example, timer which supposed
 | 
				
			||||||
 | 
						 * to get expired @60Sec, but will expire somewhere ~@40Sec, which is
 | 
				
			||||||
 | 
						 * not expected by any use-case, so change WDT1 clock source to PRCM
 | 
				
			||||||
 | 
						 * 32KHz clock.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						clk_set_parent(&wdt1_fck, &clkdiv32k_ick);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -307,10 +307,10 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel)
 | 
				
			||||||
	_omap3_noncore_dpll_bypass(clk);
 | 
						_omap3_noncore_dpll_bypass(clk);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Set jitter correction. No jitter correction for OMAP4 and 3630
 | 
						 * Set jitter correction. Jitter correction applicable for OMAP343X
 | 
				
			||||||
	 * since freqsel field is no longer present
 | 
						 * only since freqsel field is no longer present on other devices.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (!soc_is_am33xx() && !cpu_is_omap44xx() && !cpu_is_omap3630()) {
 | 
						if (cpu_is_omap343x()) {
 | 
				
			||||||
		v = __raw_readl(dd->control_reg);
 | 
							v = __raw_readl(dd->control_reg);
 | 
				
			||||||
		v &= ~dd->freqsel_mask;
 | 
							v &= ~dd->freqsel_mask;
 | 
				
			||||||
		v |= freqsel << __ffs(dd->freqsel_mask);
 | 
							v |= freqsel << __ffs(dd->freqsel_mask);
 | 
				
			||||||
| 
						 | 
					@ -480,29 +480,30 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate,
 | 
				
			||||||
	if (!dd)
 | 
						if (!dd)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__clk_prepare(dd->clk_bypass);
 | 
					 | 
				
			||||||
	clk_enable(dd->clk_bypass);
 | 
					 | 
				
			||||||
	__clk_prepare(dd->clk_ref);
 | 
					 | 
				
			||||||
	clk_enable(dd->clk_ref);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (__clk_get_rate(dd->clk_bypass) == rate &&
 | 
						if (__clk_get_rate(dd->clk_bypass) == rate &&
 | 
				
			||||||
	    (dd->modes & (1 << DPLL_LOW_POWER_BYPASS))) {
 | 
						    (dd->modes & (1 << DPLL_LOW_POWER_BYPASS))) {
 | 
				
			||||||
		pr_debug("%s: %s: set rate: entering bypass.\n",
 | 
							pr_debug("%s: %s: set rate: entering bypass.\n",
 | 
				
			||||||
			 __func__, __clk_get_name(hw->clk));
 | 
								 __func__, __clk_get_name(hw->clk));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							__clk_prepare(dd->clk_bypass);
 | 
				
			||||||
 | 
							clk_enable(dd->clk_bypass);
 | 
				
			||||||
		ret = _omap3_noncore_dpll_bypass(clk);
 | 
							ret = _omap3_noncore_dpll_bypass(clk);
 | 
				
			||||||
		if (!ret)
 | 
							if (!ret)
 | 
				
			||||||
			new_parent = dd->clk_bypass;
 | 
								new_parent = dd->clk_bypass;
 | 
				
			||||||
 | 
							clk_disable(dd->clk_bypass);
 | 
				
			||||||
 | 
							__clk_unprepare(dd->clk_bypass);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
 | 
							__clk_prepare(dd->clk_ref);
 | 
				
			||||||
 | 
							clk_enable(dd->clk_ref);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (dd->last_rounded_rate != rate)
 | 
							if (dd->last_rounded_rate != rate)
 | 
				
			||||||
			rate = __clk_round_rate(hw->clk, rate);
 | 
								rate = __clk_round_rate(hw->clk, rate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (dd->last_rounded_rate == 0)
 | 
							if (dd->last_rounded_rate == 0)
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* No freqsel on AM335x, OMAP4 and OMAP3630 */
 | 
							/* Freqsel is available only on OMAP343X devices */
 | 
				
			||||||
		if (!soc_is_am33xx() && !cpu_is_omap44xx() &&
 | 
							if (cpu_is_omap343x()) {
 | 
				
			||||||
		    !cpu_is_omap3630()) {
 | 
					 | 
				
			||||||
			freqsel = _omap3_dpll_compute_freqsel(clk,
 | 
								freqsel = _omap3_dpll_compute_freqsel(clk,
 | 
				
			||||||
						dd->last_rounded_n);
 | 
											dd->last_rounded_n);
 | 
				
			||||||
			WARN_ON(!freqsel);
 | 
								WARN_ON(!freqsel);
 | 
				
			||||||
| 
						 | 
					@ -514,6 +515,8 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate,
 | 
				
			||||||
		ret = omap3_noncore_dpll_program(clk, freqsel);
 | 
							ret = omap3_noncore_dpll_program(clk, freqsel);
 | 
				
			||||||
		if (!ret)
 | 
							if (!ret)
 | 
				
			||||||
			new_parent = dd->clk_ref;
 | 
								new_parent = dd->clk_ref;
 | 
				
			||||||
 | 
							clk_disable(dd->clk_ref);
 | 
				
			||||||
 | 
							__clk_unprepare(dd->clk_ref);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	* FIXME - this is all wrong.  common code handles reparenting and
 | 
						* FIXME - this is all wrong.  common code handles reparenting and
 | 
				
			||||||
| 
						 | 
					@ -525,11 +528,6 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate,
 | 
				
			||||||
	if (!ret)
 | 
						if (!ret)
 | 
				
			||||||
		__clk_reparent(hw->clk, new_parent);
 | 
							__clk_reparent(hw->clk, new_parent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clk_disable(dd->clk_ref);
 | 
					 | 
				
			||||||
	__clk_unprepare(dd->clk_ref);
 | 
					 | 
				
			||||||
	clk_disable(dd->clk_bypass);
 | 
					 | 
				
			||||||
	__clk_unprepare(dd->clk_bypass);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,7 @@
 | 
				
			||||||
#include "control.h"
 | 
					#include "control.h"
 | 
				
			||||||
#include "cm2xxx_3xxx.h"
 | 
					#include "cm2xxx_3xxx.h"
 | 
				
			||||||
#include "prm2xxx_3xxx.h"
 | 
					#include "prm2xxx_3xxx.h"
 | 
				
			||||||
#ifdef CONFIG_BRIDGE_DVFS
 | 
					#ifdef CONFIG_TIDSPBRIDGE_DVFS
 | 
				
			||||||
#include "omap-pm.h"
 | 
					#include "omap-pm.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,7 @@
 | 
				
			||||||
static struct platform_device *omap_dsp_pdev;
 | 
					static struct platform_device *omap_dsp_pdev;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct omap_dsp_platform_data omap_dsp_pdata __initdata = {
 | 
					static struct omap_dsp_platform_data omap_dsp_pdata __initdata = {
 | 
				
			||||||
#ifdef CONFIG_BRIDGE_DVFS
 | 
					#ifdef CONFIG_TIDSPBRIDGE_DVFS
 | 
				
			||||||
	.dsp_set_min_opp = omap_pm_dsp_set_min_opp,
 | 
						.dsp_set_min_opp = omap_pm_dsp_set_min_opp,
 | 
				
			||||||
	.dsp_get_opp = omap_pm_dsp_get_opp,
 | 
						.dsp_get_opp = omap_pm_dsp_get_opp,
 | 
				
			||||||
	.cpu_set_freq = omap_pm_cpu_set_freq,
 | 
						.cpu_set_freq = omap_pm_cpu_set_freq,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -529,22 +529,28 @@ void __init omap5xxx_check_revision(void)
 | 
				
			||||||
	case 0xb942:
 | 
						case 0xb942:
 | 
				
			||||||
		switch (rev) {
 | 
							switch (rev) {
 | 
				
			||||||
		case 0:
 | 
							case 0:
 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			omap_revision = OMAP5430_REV_ES1_0;
 | 
								omap_revision = OMAP5430_REV_ES1_0;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 1:
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								omap_revision = OMAP5430_REV_ES2_0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case 0xb998:
 | 
						case 0xb998:
 | 
				
			||||||
		switch (rev) {
 | 
							switch (rev) {
 | 
				
			||||||
		case 0:
 | 
							case 0:
 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			omap_revision = OMAP5432_REV_ES1_0;
 | 
								omap_revision = OMAP5432_REV_ES1_0;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 1:
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								omap_revision = OMAP5432_REV_ES2_0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		/* Unknown default to latest silicon rev as default*/
 | 
							/* Unknown default to latest silicon rev as default*/
 | 
				
			||||||
		omap_revision = OMAP5430_REV_ES1_0;
 | 
							omap_revision = OMAP5430_REV_ES2_0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pr_info("OMAP%04x ES%d.0\n",
 | 
						pr_info("OMAP%04x ES%d.0\n",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -277,6 +277,14 @@ static struct map_desc omap54xx_io_desc[] __initdata = {
 | 
				
			||||||
		.length		= L4_PER_54XX_SIZE,
 | 
							.length		= L4_PER_54XX_SIZE,
 | 
				
			||||||
		.type		= MT_DEVICE,
 | 
							.type		= MT_DEVICE,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					#ifdef CONFIG_OMAP4_ERRATA_I688
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							.virtual	= OMAP4_SRAM_VA,
 | 
				
			||||||
 | 
							.pfn		= __phys_to_pfn(OMAP4_SRAM_PA),
 | 
				
			||||||
 | 
							.length		= PAGE_SIZE,
 | 
				
			||||||
 | 
							.type		= MT_MEMORY_SO,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -329,6 +337,7 @@ void __init omap4_map_io(void)
 | 
				
			||||||
void __init omap5_map_io(void)
 | 
					void __init omap5_map_io(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc));
 | 
						iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc));
 | 
				
			||||||
 | 
						omap_barriers_init();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -240,15 +240,21 @@ void __iomem *omap4_get_sar_ram_base(void)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static int __init omap4_sar_ram_init(void)
 | 
					static int __init omap4_sar_ram_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						unsigned long sar_base;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * To avoid code running on other OMAPs in
 | 
						 * To avoid code running on other OMAPs in
 | 
				
			||||||
	 * multi-omap builds
 | 
						 * multi-omap builds
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (!cpu_is_omap44xx())
 | 
						if (cpu_is_omap44xx())
 | 
				
			||||||
 | 
							sar_base = OMAP44XX_SAR_RAM_BASE;
 | 
				
			||||||
 | 
						else if (soc_is_omap54xx())
 | 
				
			||||||
 | 
							sar_base = OMAP54XX_SAR_RAM_BASE;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Static mapping, never released */
 | 
						/* Static mapping, never released */
 | 
				
			||||||
	sar_ram_base = ioremap(OMAP44XX_SAR_RAM_BASE, SZ_16K);
 | 
						sar_ram_base = ioremap(sar_base, SZ_16K);
 | 
				
			||||||
	if (WARN_ON(!sar_ram_base))
 | 
						if (WARN_ON(!sar_ram_base))
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,13 +48,13 @@
 | 
				
			||||||
#define SAR_BACKUP_STATUS_WAKEUPGEN		0x10
 | 
					#define SAR_BACKUP_STATUS_WAKEUPGEN		0x10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* WakeUpGen save restore offset from OMAP54XX_SAR_RAM_BASE */
 | 
					/* WakeUpGen save restore offset from OMAP54XX_SAR_RAM_BASE */
 | 
				
			||||||
#define OMAP5_WAKEUPGENENB_OFFSET_CPU0		(SAR_BANK3_OFFSET + 0x8d4)
 | 
					#define OMAP5_WAKEUPGENENB_OFFSET_CPU0		(SAR_BANK3_OFFSET + 0x9dc)
 | 
				
			||||||
#define OMAP5_WAKEUPGENENB_SECURE_OFFSET_CPU0	(SAR_BANK3_OFFSET + 0x8e8)
 | 
					#define OMAP5_WAKEUPGENENB_SECURE_OFFSET_CPU0	(SAR_BANK3_OFFSET + 0x9f0)
 | 
				
			||||||
#define OMAP5_WAKEUPGENENB_OFFSET_CPU1		(SAR_BANK3_OFFSET + 0x8fc)
 | 
					#define OMAP5_WAKEUPGENENB_OFFSET_CPU1		(SAR_BANK3_OFFSET + 0xa04)
 | 
				
			||||||
#define OMAP5_WAKEUPGENENB_SECURE_OFFSET_CPU1	(SAR_BANK3_OFFSET + 0x910)
 | 
					#define OMAP5_WAKEUPGENENB_SECURE_OFFSET_CPU1	(SAR_BANK3_OFFSET + 0xa18)
 | 
				
			||||||
#define OMAP5_AUXCOREBOOT0_OFFSET		(SAR_BANK3_OFFSET + 0x924)
 | 
					#define OMAP5_AUXCOREBOOT0_OFFSET		(SAR_BANK3_OFFSET + 0xa2c)
 | 
				
			||||||
#define OMAP5_AUXCOREBOOT1_OFFSET		(SAR_BANK3_OFFSET + 0x928)
 | 
					#define OMAP5_AUXCOREBOOT1_OFFSET		(SAR_BANK3_OFFSET + 0x930)
 | 
				
			||||||
#define OMAP5_AMBA_IF_MODE_OFFSET		(SAR_BANK3_OFFSET + 0x92c)
 | 
					#define OMAP5_AMBA_IF_MODE_OFFSET		(SAR_BANK3_OFFSET + 0xa34)
 | 
				
			||||||
#define OMAP5_SAR_BACKUP_STATUS_OFFSET		(SAR_BANK3_OFFSET + 0x800)
 | 
					#define OMAP5_SAR_BACKUP_STATUS_OFFSET		(SAR_BANK3_OFFSET + 0x800)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,5 +28,6 @@
 | 
				
			||||||
#define OMAP54XX_PRCM_MPU_BASE		0x48243000
 | 
					#define OMAP54XX_PRCM_MPU_BASE		0x48243000
 | 
				
			||||||
#define OMAP54XX_SCM_BASE		0x4a002000
 | 
					#define OMAP54XX_SCM_BASE		0x4a002000
 | 
				
			||||||
#define OMAP54XX_CTRL_BASE		0x4a002800
 | 
					#define OMAP54XX_CTRL_BASE		0x4a002800
 | 
				
			||||||
 | 
					#define OMAP54XX_SAR_RAM_BASE		0x4ae26000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __ASM_SOC_OMAP555554XX_H */
 | 
					#endif /* __ASM_SOC_OMAP555554XX_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -611,8 +611,6 @@ static int _enable_wakeup(struct omap_hwmod *oh, u32 *v)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* XXX test pwrdm_get_wken for this hwmod's subsystem */
 | 
						/* XXX test pwrdm_get_wken for this hwmod's subsystem */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	oh->_int_flags |= _HWMOD_WAKEUP_ENABLED;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -646,8 +644,6 @@ static int _disable_wakeup(struct omap_hwmod *oh, u32 *v)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* XXX test pwrdm_get_wken for this hwmod's subsystem */
 | 
						/* XXX test pwrdm_get_wken for this hwmod's subsystem */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	oh->_int_flags &= ~_HWMOD_WAKEUP_ENABLED;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -482,15 +482,13 @@ struct omap_hwmod_omap4_prcm {
 | 
				
			||||||
 * These are for internal use only and are managed by the omap_hwmod code.
 | 
					 * These are for internal use only and are managed by the omap_hwmod code.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * _HWMOD_NO_MPU_PORT: no path exists for the MPU to write to this module
 | 
					 * _HWMOD_NO_MPU_PORT: no path exists for the MPU to write to this module
 | 
				
			||||||
 * _HWMOD_WAKEUP_ENABLED: set when the omap_hwmod code has enabled ENAWAKEUP
 | 
					 | 
				
			||||||
 * _HWMOD_SYSCONFIG_LOADED: set when the OCP_SYSCONFIG value has been cached
 | 
					 * _HWMOD_SYSCONFIG_LOADED: set when the OCP_SYSCONFIG value has been cached
 | 
				
			||||||
 * _HWMOD_SKIP_ENABLE: set if hwmod enabled during init (HWMOD_INIT_NO_IDLE) -
 | 
					 * _HWMOD_SKIP_ENABLE: set if hwmod enabled during init (HWMOD_INIT_NO_IDLE) -
 | 
				
			||||||
 *     causes the first call to _enable() to only update the pinmux
 | 
					 *     causes the first call to _enable() to only update the pinmux
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define _HWMOD_NO_MPU_PORT			(1 << 0)
 | 
					#define _HWMOD_NO_MPU_PORT			(1 << 0)
 | 
				
			||||||
#define _HWMOD_WAKEUP_ENABLED			(1 << 1)
 | 
					#define _HWMOD_SYSCONFIG_LOADED			(1 << 1)
 | 
				
			||||||
#define _HWMOD_SYSCONFIG_LOADED			(1 << 2)
 | 
					#define _HWMOD_SKIP_ENABLE			(1 << 2)
 | 
				
			||||||
#define _HWMOD_SKIP_ENABLE			(1 << 3)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * omap_hwmod._state definitions
 | 
					 * omap_hwmod._state definitions
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,7 @@
 | 
				
			||||||
#include "prm-regbits-33xx.h"
 | 
					#include "prm-regbits-33xx.h"
 | 
				
			||||||
#include "i2c.h"
 | 
					#include "i2c.h"
 | 
				
			||||||
#include "mmc.h"
 | 
					#include "mmc.h"
 | 
				
			||||||
 | 
					#include "wd_timer.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * IP blocks
 | 
					 * IP blocks
 | 
				
			||||||
| 
						 | 
					@ -2087,8 +2088,21 @@ static struct omap_hwmod am33xx_uart6_hwmod = {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 'wd_timer' class */
 | 
					/* 'wd_timer' class */
 | 
				
			||||||
 | 
					static struct omap_hwmod_class_sysconfig wdt_sysc = {
 | 
				
			||||||
 | 
						.rev_offs	= 0x0,
 | 
				
			||||||
 | 
						.sysc_offs	= 0x10,
 | 
				
			||||||
 | 
						.syss_offs	= 0x14,
 | 
				
			||||||
 | 
						.sysc_flags	= (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
 | 
				
			||||||
 | 
								SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
 | 
				
			||||||
 | 
						.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 | 
				
			||||||
 | 
								SIDLE_SMART_WKUP),
 | 
				
			||||||
 | 
						.sysc_fields	= &omap_hwmod_sysc_type1,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct omap_hwmod_class am33xx_wd_timer_hwmod_class = {
 | 
					static struct omap_hwmod_class am33xx_wd_timer_hwmod_class = {
 | 
				
			||||||
	.name		= "wd_timer",
 | 
						.name		= "wd_timer",
 | 
				
			||||||
 | 
						.sysc		= &wdt_sysc,
 | 
				
			||||||
 | 
						.pre_shutdown	= &omap2_wd_timer_disable,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -2099,6 +2113,7 @@ static struct omap_hwmod am33xx_wd_timer1_hwmod = {
 | 
				
			||||||
	.name		= "wd_timer2",
 | 
						.name		= "wd_timer2",
 | 
				
			||||||
	.class		= &am33xx_wd_timer_hwmod_class,
 | 
						.class		= &am33xx_wd_timer_hwmod_class,
 | 
				
			||||||
	.clkdm_name	= "l4_wkup_clkdm",
 | 
						.clkdm_name	= "l4_wkup_clkdm",
 | 
				
			||||||
 | 
						.flags		= HWMOD_SWSUP_SIDLE,
 | 
				
			||||||
	.main_clk	= "wdt1_fck",
 | 
						.main_clk	= "wdt1_fck",
 | 
				
			||||||
	.prcm		= {
 | 
						.prcm		= {
 | 
				
			||||||
		.omap4	= {
 | 
							.omap4	= {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,7 +52,6 @@ enum {
 | 
				
			||||||
#define ALREADYACTIVE_SWITCH		0
 | 
					#define ALREADYACTIVE_SWITCH		0
 | 
				
			||||||
#define FORCEWAKEUP_SWITCH		1
 | 
					#define FORCEWAKEUP_SWITCH		1
 | 
				
			||||||
#define LOWPOWERSTATE_SWITCH		2
 | 
					#define LOWPOWERSTATE_SWITCH		2
 | 
				
			||||||
#define ERROR_SWITCH			3
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* pwrdm_list contains all registered struct powerdomains */
 | 
					/* pwrdm_list contains all registered struct powerdomains */
 | 
				
			||||||
static LIST_HEAD(pwrdm_list);
 | 
					static LIST_HEAD(pwrdm_list);
 | 
				
			||||||
| 
						 | 
					@ -233,10 +232,7 @@ static u8 _pwrdm_save_clkdm_state_and_activate(struct powerdomain *pwrdm,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u8 sleep_switch;
 | 
						u8 sleep_switch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (curr_pwrst < 0) {
 | 
						if (curr_pwrst < PWRDM_POWER_ON) {
 | 
				
			||||||
		WARN_ON(1);
 | 
					 | 
				
			||||||
		sleep_switch = ERROR_SWITCH;
 | 
					 | 
				
			||||||
	} else if (curr_pwrst < PWRDM_POWER_ON) {
 | 
					 | 
				
			||||||
		if (curr_pwrst > pwrst &&
 | 
							if (curr_pwrst > pwrst &&
 | 
				
			||||||
		    pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE &&
 | 
							    pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE &&
 | 
				
			||||||
		    arch_pwrdm->pwrdm_set_lowpwrstchange) {
 | 
							    arch_pwrdm->pwrdm_set_lowpwrstchange) {
 | 
				
			||||||
| 
						 | 
					@ -1091,7 +1087,8 @@ int pwrdm_post_transition(struct powerdomain *pwrdm)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst)
 | 
					int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u8 curr_pwrst, next_pwrst, sleep_switch;
 | 
						u8 next_pwrst, sleep_switch;
 | 
				
			||||||
 | 
						int curr_pwrst;
 | 
				
			||||||
	int ret = 0;
 | 
						int ret = 0;
 | 
				
			||||||
	bool hwsup = false;
 | 
						bool hwsup = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1107,16 +1104,17 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst)
 | 
				
			||||||
	pwrdm_lock(pwrdm);
 | 
						pwrdm_lock(pwrdm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	curr_pwrst = pwrdm_read_pwrst(pwrdm);
 | 
						curr_pwrst = pwrdm_read_pwrst(pwrdm);
 | 
				
			||||||
 | 
						if (curr_pwrst < 0) {
 | 
				
			||||||
 | 
							ret = -EINVAL;
 | 
				
			||||||
 | 
							goto osps_out;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	next_pwrst = pwrdm_read_next_pwrst(pwrdm);
 | 
						next_pwrst = pwrdm_read_next_pwrst(pwrdm);
 | 
				
			||||||
	if (curr_pwrst == pwrst && next_pwrst == pwrst)
 | 
						if (curr_pwrst == pwrst && next_pwrst == pwrst)
 | 
				
			||||||
		goto osps_out;
 | 
							goto osps_out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sleep_switch = _pwrdm_save_clkdm_state_and_activate(pwrdm, curr_pwrst,
 | 
						sleep_switch = _pwrdm_save_clkdm_state_and_activate(pwrdm, curr_pwrst,
 | 
				
			||||||
							    pwrst, &hwsup);
 | 
												    pwrst, &hwsup);
 | 
				
			||||||
	if (sleep_switch == ERROR_SWITCH) {
 | 
					 | 
				
			||||||
		ret = -EINVAL;
 | 
					 | 
				
			||||||
		goto osps_out;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = pwrdm_set_next_pwrst(pwrdm, pwrst);
 | 
						ret = pwrdm_set_next_pwrst(pwrdm, pwrst);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -81,13 +81,13 @@ static struct prm_reset_src_map omap44xx_prm_reset_src_map[] = {
 | 
				
			||||||
/* Read a register in a CM/PRM instance in the PRM module */
 | 
					/* Read a register in a CM/PRM instance in the PRM module */
 | 
				
			||||||
u32 omap4_prm_read_inst_reg(s16 inst, u16 reg)
 | 
					u32 omap4_prm_read_inst_reg(s16 inst, u16 reg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return __raw_readl(OMAP44XX_PRM_REGADDR(inst, reg));
 | 
						return __raw_readl(prm_base + inst + reg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Write into a register in a CM/PRM instance in the PRM module */
 | 
					/* Write into a register in a CM/PRM instance in the PRM module */
 | 
				
			||||||
void omap4_prm_write_inst_reg(u32 val, s16 inst, u16 reg)
 | 
					void omap4_prm_write_inst_reg(u32 val, s16 inst, u16 reg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__raw_writel(val, OMAP44XX_PRM_REGADDR(inst, reg));
 | 
						__raw_writel(val, prm_base + inst + reg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Read-modify-write a register in a PRM module. Caller must lock */
 | 
					/* Read-modify-write a register in a PRM module. Caller must lock */
 | 
				
			||||||
| 
						 | 
					@ -650,7 +650,7 @@ static struct prm_ll_data omap44xx_prm_ll_data = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int __init omap44xx_prm_init(void)
 | 
					int __init omap44xx_prm_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!cpu_is_omap44xx())
 | 
						if (!cpu_is_omap44xx() && !soc_is_omap54xx())
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return prm_register(&omap44xx_prm_ll_data);
 | 
						return prm_register(&omap44xx_prm_ll_data);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -413,7 +413,9 @@ IS_OMAP_TYPE(3430, 0x3430)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define OMAP54XX_CLASS		0x54000054
 | 
					#define OMAP54XX_CLASS		0x54000054
 | 
				
			||||||
#define OMAP5430_REV_ES1_0	(OMAP54XX_CLASS | (0x30 << 16) | (0x10 << 8))
 | 
					#define OMAP5430_REV_ES1_0	(OMAP54XX_CLASS | (0x30 << 16) | (0x10 << 8))
 | 
				
			||||||
 | 
					#define OMAP5430_REV_ES2_0	(OMAP54XX_CLASS | (0x30 << 16) | (0x20 << 8))
 | 
				
			||||||
#define OMAP5432_REV_ES1_0	(OMAP54XX_CLASS | (0x32 << 16) | (0x10 << 8))
 | 
					#define OMAP5432_REV_ES1_0	(OMAP54XX_CLASS | (0x32 << 16) | (0x10 << 8))
 | 
				
			||||||
 | 
					#define OMAP5432_REV_ES2_0	(OMAP54XX_CLASS | (0x32 << 16) | (0x20 << 8))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void omap2xxx_check_revision(void);
 | 
					void omap2xxx_check_revision(void);
 | 
				
			||||||
void omap3xxx_check_revision(void);
 | 
					void omap3xxx_check_revision(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,6 +62,7 @@
 | 
				
			||||||
#define OMAP2_MPU_SOURCE	"sys_ck"
 | 
					#define OMAP2_MPU_SOURCE	"sys_ck"
 | 
				
			||||||
#define OMAP3_MPU_SOURCE	OMAP2_MPU_SOURCE
 | 
					#define OMAP3_MPU_SOURCE	OMAP2_MPU_SOURCE
 | 
				
			||||||
#define OMAP4_MPU_SOURCE	"sys_clkin_ck"
 | 
					#define OMAP4_MPU_SOURCE	"sys_clkin_ck"
 | 
				
			||||||
 | 
					#define OMAP5_MPU_SOURCE	"sys_clkin"
 | 
				
			||||||
#define OMAP2_32K_SOURCE	"func_32k_ck"
 | 
					#define OMAP2_32K_SOURCE	"func_32k_ck"
 | 
				
			||||||
#define OMAP3_32K_SOURCE	"omap_32k_fck"
 | 
					#define OMAP3_32K_SOURCE	"omap_32k_fck"
 | 
				
			||||||
#define OMAP4_32K_SOURCE	"sys_32k_ck"
 | 
					#define OMAP4_32K_SOURCE	"sys_32k_ck"
 | 
				
			||||||
| 
						 | 
					@ -487,7 +488,7 @@ static void __init realtime_counter_init(void)
 | 
				
			||||||
		pr_err("%s: ioremap failed\n", __func__);
 | 
							pr_err("%s: ioremap failed\n", __func__);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sys_clk = clk_get(NULL, "sys_clkin_ck");
 | 
						sys_clk = clk_get(NULL, OMAP5_MPU_SOURCE);
 | 
				
			||||||
	if (IS_ERR(sys_clk)) {
 | 
						if (IS_ERR(sys_clk)) {
 | 
				
			||||||
		pr_err("%s: failed to get system clock handle\n", __func__);
 | 
							pr_err("%s: failed to get system clock handle\n", __func__);
 | 
				
			||||||
		iounmap(base);
 | 
							iounmap(base);
 | 
				
			||||||
| 
						 | 
					@ -620,7 +621,7 @@ void __init omap4_local_timer_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_SOC_OMAP5
 | 
					#ifdef CONFIG_SOC_OMAP5
 | 
				
			||||||
OMAP_SYS_32K_TIMER_INIT(5, 1, OMAP4_32K_SOURCE, "ti,timer-alwon",
 | 
					OMAP_SYS_32K_TIMER_INIT(5, 1, OMAP4_32K_SOURCE, "ti,timer-alwon",
 | 
				
			||||||
			2, OMAP4_MPU_SOURCE);
 | 
								2, OMAP5_MPU_SOURCE);
 | 
				
			||||||
void __init omap5_realtime_timer_init(void)
 | 
					void __init omap5_realtime_timer_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int err;
 | 
						int err;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@
 | 
				
			||||||
#include <linux/ata_platform.h>
 | 
					#include <linux/ata_platform.h>
 | 
				
			||||||
#include <linux/delay.h>
 | 
					#include <linux/delay.h>
 | 
				
			||||||
#include <linux/clk-provider.h>
 | 
					#include <linux/clk-provider.h>
 | 
				
			||||||
 | 
					#include <linux/cpu.h>
 | 
				
			||||||
#include <net/dsa.h>
 | 
					#include <net/dsa.h>
 | 
				
			||||||
#include <asm/page.h>
 | 
					#include <asm/page.h>
 | 
				
			||||||
#include <asm/setup.h>
 | 
					#include <asm/setup.h>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,7 +62,11 @@ int __init harmony_pcie_init(void)
 | 
				
			||||||
		goto err_reg;
 | 
							goto err_reg;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	regulator_enable(regulator);
 | 
						err = regulator_enable(regulator);
 | 
				
			||||||
 | 
						if (err) {
 | 
				
			||||||
 | 
							pr_err("%s: regulator_enable failed: %d\n", __func__, err);
 | 
				
			||||||
 | 
							goto err_en;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = tegra_pcie_init(true, true);
 | 
						err = tegra_pcie_init(true, true);
 | 
				
			||||||
	if (err) {
 | 
						if (err) {
 | 
				
			||||||
| 
						 | 
					@ -74,6 +78,7 @@ int __init harmony_pcie_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
err_pcie:
 | 
					err_pcie:
 | 
				
			||||||
	regulator_disable(regulator);
 | 
						regulator_disable(regulator);
 | 
				
			||||||
 | 
					err_en:
 | 
				
			||||||
	regulator_put(regulator);
 | 
						regulator_put(regulator);
 | 
				
			||||||
err_reg:
 | 
					err_reg:
 | 
				
			||||||
	gpio_free(en_vdd_1v05);
 | 
						gpio_free(en_vdd_1v05);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -99,12 +99,8 @@ static bool tegra30_cpu_core_power_down(struct cpuidle_device *dev,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	smp_wmb();
 | 
						smp_wmb();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	save_cpu_arch_register();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);
 | 
						cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	restore_cpu_arch_register();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &dev->cpu);
 | 
						clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &dev->cpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,8 +7,5 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(tegra_secondary_startup)
 | 
					ENTRY(tegra_secondary_startup)
 | 
				
			||||||
        bl      v7_invalidate_l1
 | 
					        bl      v7_invalidate_l1
 | 
				
			||||||
	/* Enable coresight */
 | 
					 | 
				
			||||||
	mov32	r0, 0xC5ACCE55
 | 
					 | 
				
			||||||
	mcr	p14, 0, r0, c7, c12, 6
 | 
					 | 
				
			||||||
        b       secondary_startup
 | 
					        b       secondary_startup
 | 
				
			||||||
ENDPROC(tegra_secondary_startup)
 | 
					ENDPROC(tegra_secondary_startup)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,7 +91,7 @@ static int tegra30_power_up_cpu(unsigned int cpu)
 | 
				
			||||||
	if (cpumask_test_cpu(cpu, &tegra_cpu_init_mask)) {
 | 
						if (cpumask_test_cpu(cpu, &tegra_cpu_init_mask)) {
 | 
				
			||||||
		timeout = jiffies + msecs_to_jiffies(50);
 | 
							timeout = jiffies + msecs_to_jiffies(50);
 | 
				
			||||||
		do {
 | 
							do {
 | 
				
			||||||
			if (!tegra_powergate_is_powered(pwrgateid))
 | 
								if (tegra_powergate_is_powered(pwrgateid))
 | 
				
			||||||
				goto remove_clamps;
 | 
									goto remove_clamps;
 | 
				
			||||||
			udelay(10);
 | 
								udelay(10);
 | 
				
			||||||
		} while (time_before(jiffies, timeout));
 | 
							} while (time_before(jiffies, timeout));
 | 
				
			||||||
| 
						 | 
					@ -124,6 +124,9 @@ static int tegra30_power_up_cpu(unsigned int cpu)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Remove I/O clamps. */
 | 
						/* Remove I/O clamps. */
 | 
				
			||||||
	ret = tegra_powergate_remove_clamping(pwrgateid);
 | 
						ret = tegra_powergate_remove_clamping(pwrgateid);
 | 
				
			||||||
 | 
						if (ret)
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	udelay(10);
 | 
						udelay(10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Clear flow controller CSR. */
 | 
						/* Clear flow controller CSR. */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,26 +46,11 @@
 | 
				
			||||||
#define PMC_CPUPWROFF_TIMER	0xcc
 | 
					#define PMC_CPUPWROFF_TIMER	0xcc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PM_SLEEP
 | 
					#ifdef CONFIG_PM_SLEEP
 | 
				
			||||||
static unsigned int g_diag_reg;
 | 
					 | 
				
			||||||
static DEFINE_SPINLOCK(tegra_lp2_lock);
 | 
					static DEFINE_SPINLOCK(tegra_lp2_lock);
 | 
				
			||||||
static void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE);
 | 
					static void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE);
 | 
				
			||||||
static struct clk *tegra_pclk;
 | 
					static struct clk *tegra_pclk;
 | 
				
			||||||
void (*tegra_tear_down_cpu)(void);
 | 
					void (*tegra_tear_down_cpu)(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void save_cpu_arch_register(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	/* read diagnostic register */
 | 
					 | 
				
			||||||
	asm("mrc p15, 0, %0, c15, c0, 1" : "=r"(g_diag_reg) : : "cc");
 | 
					 | 
				
			||||||
	return;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void restore_cpu_arch_register(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	/* write diagnostic register */
 | 
					 | 
				
			||||||
	asm("mcr p15, 0, %0, c15, c0, 1" : : "r"(g_diag_reg) : "cc");
 | 
					 | 
				
			||||||
	return;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void set_power_timers(unsigned long us_on, unsigned long us_off)
 | 
					static void set_power_timers(unsigned long us_on, unsigned long us_off)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long long ticks;
 | 
						unsigned long long ticks;
 | 
				
			||||||
| 
						 | 
					@ -119,8 +104,6 @@ static void restore_cpu_complex(void)
 | 
				
			||||||
	tegra_cpu_clock_resume();
 | 
						tegra_cpu_clock_resume();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	flowctrl_cpu_suspend_exit(cpu);
 | 
						flowctrl_cpu_suspend_exit(cpu);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	restore_cpu_arch_register();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -145,8 +128,6 @@ static void suspend_cpu_complex(void)
 | 
				
			||||||
	tegra_cpu_clock_suspend();
 | 
						tegra_cpu_clock_suspend();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	flowctrl_cpu_suspend_enter(cpu);
 | 
						flowctrl_cpu_suspend_enter(cpu);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	save_cpu_arch_register();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void tegra_clear_cpu_in_lp2(int phy_cpu_id)
 | 
					void tegra_clear_cpu_in_lp2(int phy_cpu_id)
 | 
				
			||||||
| 
						 | 
					@ -181,6 +162,11 @@ bool tegra_set_cpu_in_lp2(int phy_cpu_id)
 | 
				
			||||||
	return last_cpu;
 | 
						return last_cpu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int tegra_cpu_do_idle(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return cpu_do_idle();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int tegra_sleep_cpu(unsigned long v2p)
 | 
					static int tegra_sleep_cpu(unsigned long v2p)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Switch to the identity mapping. */
 | 
						/* Switch to the identity mapping. */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,7 @@
 | 
				
			||||||
#include <linux/debugfs.h>
 | 
					#include <linux/debugfs.h>
 | 
				
			||||||
#include <linux/delay.h>
 | 
					#include <linux/delay.h>
 | 
				
			||||||
#include <linux/err.h>
 | 
					#include <linux/err.h>
 | 
				
			||||||
 | 
					#include <linux/export.h>
 | 
				
			||||||
#include <linux/init.h>
 | 
					#include <linux/init.h>
 | 
				
			||||||
#include <linux/io.h>
 | 
					#include <linux/io.h>
 | 
				
			||||||
#include <linux/seq_file.h>
 | 
					#include <linux/seq_file.h>
 | 
				
			||||||
| 
						 | 
					@ -75,7 +76,7 @@ static int tegra_powergate_set(int id, bool new_state)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (status == new_state) {
 | 
						if (status == new_state) {
 | 
				
			||||||
		spin_unlock_irqrestore(&tegra_powergate_lock, flags);
 | 
							spin_unlock_irqrestore(&tegra_powergate_lock, flags);
 | 
				
			||||||
		return -EINVAL;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pmc_write(PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE);
 | 
						pmc_write(PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE);
 | 
				
			||||||
| 
						 | 
					@ -168,6 +169,7 @@ int tegra_powergate_sequence_power_up(int id, struct clk *clk)
 | 
				
			||||||
err_power:
 | 
					err_power:
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					EXPORT_SYMBOL(tegra_powergate_sequence_power_up);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int tegra_cpu_powergate_id(int cpuid)
 | 
					int tegra_cpu_powergate_id(int cpuid)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,12 +41,10 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(tegra_resume)
 | 
					ENTRY(tegra_resume)
 | 
				
			||||||
	bl	v7_invalidate_l1
 | 
						bl	v7_invalidate_l1
 | 
				
			||||||
	/* Enable coresight */
 | 
					 | 
				
			||||||
	mov32	r0, 0xC5ACCE55
 | 
					 | 
				
			||||||
	mcr	p14, 0, r0, c7, c12, 6
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cpu_id	r0
 | 
						cpu_id	r0
 | 
				
			||||||
	cmp	r0, #0				@ CPU0?
 | 
						cmp	r0, #0				@ CPU0?
 | 
				
			||||||
 | 
					 THUMB(	it	ne )
 | 
				
			||||||
	bne	cpu_resume			@ no
 | 
						bne	cpu_resume			@ no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_ARCH_TEGRA_3x_SOC
 | 
					#ifdef CONFIG_ARCH_TEGRA_3x_SOC
 | 
				
			||||||
| 
						 | 
					@ -99,6 +97,8 @@ ENTRY(__tegra_cpu_reset_handler_start)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Register usage within the reset handler:
 | 
					 * Register usage within the reset handler:
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 | 
					 *      Others: scratch
 | 
				
			||||||
 | 
					 *      R6  = SoC ID << 8
 | 
				
			||||||
 *      R7  = CPU present (to the OS) mask
 | 
					 *      R7  = CPU present (to the OS) mask
 | 
				
			||||||
 *      R8  = CPU in LP1 state mask
 | 
					 *      R8  = CPU in LP1 state mask
 | 
				
			||||||
 *      R9  = CPU in LP2 state mask
 | 
					 *      R9  = CPU in LP2 state mask
 | 
				
			||||||
| 
						 | 
					@ -114,6 +114,40 @@ ENTRY(__tegra_cpu_reset_handler_start)
 | 
				
			||||||
ENTRY(__tegra_cpu_reset_handler)
 | 
					ENTRY(__tegra_cpu_reset_handler)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cpsid	aif, 0x13			@ SVC mode, interrupts disabled
 | 
						cpsid	aif, 0x13			@ SVC mode, interrupts disabled
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mov32	r6, TEGRA_APB_MISC_BASE
 | 
				
			||||||
 | 
						ldr	r6, [r6, #APB_MISC_GP_HIDREV]
 | 
				
			||||||
 | 
						and	r6, r6, #0xff00
 | 
				
			||||||
 | 
					#ifdef CONFIG_ARCH_TEGRA_2x_SOC
 | 
				
			||||||
 | 
					t20_check:
 | 
				
			||||||
 | 
						cmp	r6, #(0x20 << 8)
 | 
				
			||||||
 | 
						bne	after_t20_check
 | 
				
			||||||
 | 
					t20_errata:
 | 
				
			||||||
 | 
						# Tegra20 is a Cortex-A9 r1p1
 | 
				
			||||||
 | 
						mrc	p15, 0, r0, c1, c0, 0   @ read system control register
 | 
				
			||||||
 | 
						orr	r0, r0, #1 << 14        @ erratum 716044
 | 
				
			||||||
 | 
						mcr	p15, 0, r0, c1, c0, 0   @ write system control register
 | 
				
			||||||
 | 
						mrc	p15, 0, r0, c15, c0, 1  @ read diagnostic register
 | 
				
			||||||
 | 
						orr	r0, r0, #1 << 4         @ erratum 742230
 | 
				
			||||||
 | 
						orr	r0, r0, #1 << 11        @ erratum 751472
 | 
				
			||||||
 | 
						mcr	p15, 0, r0, c15, c0, 1  @ write diagnostic register
 | 
				
			||||||
 | 
						b	after_errata
 | 
				
			||||||
 | 
					after_t20_check:
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef CONFIG_ARCH_TEGRA_3x_SOC
 | 
				
			||||||
 | 
					t30_check:
 | 
				
			||||||
 | 
						cmp	r6, #(0x30 << 8)
 | 
				
			||||||
 | 
						bne	after_t30_check
 | 
				
			||||||
 | 
					t30_errata:
 | 
				
			||||||
 | 
						# Tegra30 is a Cortex-A9 r2p9
 | 
				
			||||||
 | 
						mrc	p15, 0, r0, c15, c0, 1  @ read diagnostic register
 | 
				
			||||||
 | 
						orr	r0, r0, #1 << 6         @ erratum 743622
 | 
				
			||||||
 | 
						orr	r0, r0, #1 << 11        @ erratum 751472
 | 
				
			||||||
 | 
						mcr	p15, 0, r0, c15, c0, 1  @ write diagnostic register
 | 
				
			||||||
 | 
						b	after_errata
 | 
				
			||||||
 | 
					after_t30_check:
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					after_errata:
 | 
				
			||||||
	mrc	p15, 0, r10, c0, c0, 5		@ MPIDR
 | 
						mrc	p15, 0, r10, c0, c0, 5		@ MPIDR
 | 
				
			||||||
	and	r10, r10, #0x3			@ R10 = CPU number
 | 
						and	r10, r10, #0x3			@ R10 = CPU number
 | 
				
			||||||
	mov	r11, #1
 | 
						mov	r11, #1
 | 
				
			||||||
| 
						 | 
					@ -129,16 +163,13 @@ ENTRY(__tegra_cpu_reset_handler)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_ARCH_TEGRA_2x_SOC
 | 
					#ifdef CONFIG_ARCH_TEGRA_2x_SOC
 | 
				
			||||||
	/* Are we on Tegra20? */
 | 
						/* Are we on Tegra20? */
 | 
				
			||||||
	mov32	r6, TEGRA_APB_MISC_BASE
 | 
						cmp	r6, #(0x20 << 8)
 | 
				
			||||||
	ldr	r0, [r6, #APB_MISC_GP_HIDREV]
 | 
					 | 
				
			||||||
	and	r0, r0, #0xff00
 | 
					 | 
				
			||||||
	cmp	r0, #(0x20 << 8)
 | 
					 | 
				
			||||||
	bne	1f
 | 
						bne	1f
 | 
				
			||||||
	/* If not CPU0, don't let CPU0 reset CPU1 now that CPU1 is coming up. */
 | 
						/* If not CPU0, don't let CPU0 reset CPU1 now that CPU1 is coming up. */
 | 
				
			||||||
	mov32	r6, TEGRA_PMC_BASE
 | 
						mov32	r5, TEGRA_PMC_BASE
 | 
				
			||||||
	mov	r0, #0
 | 
						mov	r0, #0
 | 
				
			||||||
	cmp	r10, #0
 | 
						cmp	r10, #0
 | 
				
			||||||
	strne	r0, [r6, #PMC_SCRATCH41]
 | 
						strne	r0, [r5, #PMC_SCRATCH41]
 | 
				
			||||||
1:
 | 
					1:
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -197,7 +197,7 @@ ENTRY(tegra20_sleep_cpu_secondary_finish)
 | 
				
			||||||
	mov	r3, #CPU_RESETTABLE
 | 
						mov	r3, #CPU_RESETTABLE
 | 
				
			||||||
	str	r3, [r0]
 | 
						str	r3, [r0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bl	cpu_do_idle
 | 
						bl	tegra_cpu_do_idle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * cpu may be reset while in wfi, which will return through
 | 
						 * cpu may be reset while in wfi, which will return through
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,7 +66,9 @@ ENTRY(tegra30_cpu_shutdown)
 | 
				
			||||||
		FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG | \
 | 
							FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG | \
 | 
				
			||||||
		FLOW_CTRL_CSR_ENABLE
 | 
							FLOW_CTRL_CSR_ENABLE
 | 
				
			||||||
	mov	r4, #(1 << 4)
 | 
						mov	r4, #(1 << 4)
 | 
				
			||||||
	orr	r12, r12, r4, lsl r3
 | 
					 ARM(	orr	r12, r12, r4, lsl r3	)
 | 
				
			||||||
 | 
					 THUMB(	lsl	r4, r4, r3		)
 | 
				
			||||||
 | 
					 THUMB(	orr	r12, r12, r4		)
 | 
				
			||||||
	str	r12, [r1]
 | 
						str	r12, [r1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Halt this CPU. */
 | 
						/* Halt this CPU. */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_CACHE_L2X0
 | 
					#ifdef CONFIG_CACHE_L2X0
 | 
				
			||||||
.macro l2_cache_resume, tmp1, tmp2, tmp3, phys_l2x0_saved_regs
 | 
					.macro l2_cache_resume, tmp1, tmp2, tmp3, phys_l2x0_saved_regs
 | 
				
			||||||
	adr	\tmp1, \phys_l2x0_saved_regs
 | 
						W(adr)	\tmp1, \phys_l2x0_saved_regs
 | 
				
			||||||
	ldr	\tmp1, [\tmp1]
 | 
						ldr	\tmp1, [\tmp1]
 | 
				
			||||||
	ldr	\tmp2, [\tmp1, #L2X0_R_PHY_BASE]
 | 
						ldr	\tmp2, [\tmp1, #L2X0_R_PHY_BASE]
 | 
				
			||||||
	ldr	\tmp3, [\tmp2, #L2X0_CTRL]
 | 
						ldr	\tmp3, [\tmp2, #L2X0_CTRL]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -95,7 +95,7 @@
 | 
				
			||||||
#define U300_SPI_BASE			(U300_FAST_PER_PHYS_BASE+0x6000)
 | 
					#define U300_SPI_BASE			(U300_FAST_PER_PHYS_BASE+0x6000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Fast UART1 on U335 only */
 | 
					/* Fast UART1 on U335 only */
 | 
				
			||||||
#define U300_UART1_BASE			(U300_SLOW_PER_PHYS_BASE+0x7000)
 | 
					#define U300_UART1_BASE			(U300_FAST_PER_PHYS_BASE+0x7000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * SLOW peripherals
 | 
					 * SLOW peripherals
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,20 @@ struct regulator_init_data gpio_en_3v3_regulator = {
 | 
				
			||||||
       .consumer_supplies = gpio_en_3v3_consumers,
 | 
					       .consumer_supplies = gpio_en_3v3_consumers,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct regulator_consumer_supply sdi0_reg_consumers[] = {
 | 
				
			||||||
 | 
					        REGULATOR_SUPPLY("vqmmc", "sdi0"),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct regulator_init_data sdi0_reg_init_data = {
 | 
				
			||||||
 | 
					        .constraints = {
 | 
				
			||||||
 | 
					                .min_uV         = 1800000,
 | 
				
			||||||
 | 
					                .max_uV         = 2900000,
 | 
				
			||||||
 | 
					                .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|REGULATOR_CHANGE_STATUS,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        .num_consumer_supplies  = ARRAY_SIZE(sdi0_reg_consumers),
 | 
				
			||||||
 | 
					        .consumer_supplies      = sdi0_reg_consumers,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * TPS61052 regulator
 | 
					 * TPS61052 regulator
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@ extern struct ab8500_regulator_platform_data ab8500_regulator_plat_data;
 | 
				
			||||||
extern struct ab8500_regulator_platform_data ab8505_regulator_plat_data;
 | 
					extern struct ab8500_regulator_platform_data ab8505_regulator_plat_data;
 | 
				
			||||||
extern struct regulator_init_data tps61052_regulator;
 | 
					extern struct regulator_init_data tps61052_regulator;
 | 
				
			||||||
extern struct regulator_init_data gpio_en_3v3_regulator;
 | 
					extern struct regulator_init_data gpio_en_3v3_regulator;
 | 
				
			||||||
 | 
					extern struct regulator_init_data sdi0_reg_init_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mop500_regulator_init(void);
 | 
					void mop500_regulator_init(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,35 +31,6 @@
 | 
				
			||||||
 * SDI 0 (MicroSD slot)
 | 
					 * SDI 0 (MicroSD slot)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* GPIO pins used by the sdi0 level shifter */
 | 
					 | 
				
			||||||
static int sdi0_en = -1;
 | 
					 | 
				
			||||||
static int sdi0_vsel = -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int mop500_sdi0_ios_handler(struct device *dev, struct mmc_ios *ios)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	switch (ios->power_mode) {
 | 
					 | 
				
			||||||
	case MMC_POWER_UP:
 | 
					 | 
				
			||||||
	case MMC_POWER_ON:
 | 
					 | 
				
			||||||
		/*
 | 
					 | 
				
			||||||
		 * Level shifter voltage should depend on vdd to when deciding
 | 
					 | 
				
			||||||
		 * on either 1.8V or 2.9V. Once the decision has been made the
 | 
					 | 
				
			||||||
		 * level shifter must be disabled and re-enabled with a changed
 | 
					 | 
				
			||||||
		 * select signal in order to switch the voltage. Since there is
 | 
					 | 
				
			||||||
		 * no framework support yet for indicating 1.8V in vdd, use the
 | 
					 | 
				
			||||||
		 * default 2.9V.
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		gpio_direction_output(sdi0_vsel, 0);
 | 
					 | 
				
			||||||
		gpio_direction_output(sdi0_en, 1);
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	case MMC_POWER_OFF:
 | 
					 | 
				
			||||||
		gpio_direction_output(sdi0_vsel, 0);
 | 
					 | 
				
			||||||
		gpio_direction_output(sdi0_en, 0);
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef CONFIG_STE_DMA40
 | 
					#ifdef CONFIG_STE_DMA40
 | 
				
			||||||
struct stedma40_chan_cfg mop500_sdi0_dma_cfg_rx = {
 | 
					struct stedma40_chan_cfg mop500_sdi0_dma_cfg_rx = {
 | 
				
			||||||
	.mode = STEDMA40_MODE_LOGICAL,
 | 
						.mode = STEDMA40_MODE_LOGICAL,
 | 
				
			||||||
| 
						 | 
					@ -100,22 +71,6 @@ struct mmci_platform_data mop500_sdi0_data = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void sdi0_configure(struct device *parent)
 | 
					static void sdi0_configure(struct device *parent)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ret = gpio_request(sdi0_en, "level shifter enable");
 | 
					 | 
				
			||||||
	if (!ret)
 | 
					 | 
				
			||||||
		ret = gpio_request(sdi0_vsel,
 | 
					 | 
				
			||||||
				   "level shifter 1v8-3v select");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (ret) {
 | 
					 | 
				
			||||||
		pr_warning("unable to config sdi0 gpios for level shifter.\n");
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Select the default 2.9V and enable level shifter */
 | 
					 | 
				
			||||||
	gpio_direction_output(sdi0_vsel, 0);
 | 
					 | 
				
			||||||
	gpio_direction_output(sdi0_en, 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Add the device, force v2 to subrevision 1 */
 | 
						/* Add the device, force v2 to subrevision 1 */
 | 
				
			||||||
	db8500_add_sdi0(parent, &mop500_sdi0_data, U8500_SDI_V2_PERIPHID);
 | 
						db8500_add_sdi0(parent, &mop500_sdi0_data, U8500_SDI_V2_PERIPHID);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -123,8 +78,6 @@ static void sdi0_configure(struct device *parent)
 | 
				
			||||||
void mop500_sdi_tc35892_init(struct device *parent)
 | 
					void mop500_sdi_tc35892_init(struct device *parent)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	mop500_sdi0_data.gpio_cd = GPIO_SDMMC_CD;
 | 
						mop500_sdi0_data.gpio_cd = GPIO_SDMMC_CD;
 | 
				
			||||||
	sdi0_en = GPIO_SDMMC_EN;
 | 
					 | 
				
			||||||
	sdi0_vsel = GPIO_SDMMC_1V8_3V_SEL;
 | 
					 | 
				
			||||||
	sdi0_configure(parent);
 | 
						sdi0_configure(parent);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -263,8 +216,6 @@ void __init snowball_sdi_init(struct device *parent)
 | 
				
			||||||
	/* External Micro SD slot */
 | 
						/* External Micro SD slot */
 | 
				
			||||||
	mop500_sdi0_data.gpio_cd = SNOWBALL_SDMMC_CD_GPIO;
 | 
						mop500_sdi0_data.gpio_cd = SNOWBALL_SDMMC_CD_GPIO;
 | 
				
			||||||
	mop500_sdi0_data.cd_invert = true;
 | 
						mop500_sdi0_data.cd_invert = true;
 | 
				
			||||||
	sdi0_en = SNOWBALL_SDMMC_EN_GPIO;
 | 
					 | 
				
			||||||
	sdi0_vsel = SNOWBALL_SDMMC_1V8_3V_GPIO;
 | 
					 | 
				
			||||||
	sdi0_configure(parent);
 | 
						sdi0_configure(parent);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -276,8 +227,6 @@ void __init hrefv60_sdi_init(struct device *parent)
 | 
				
			||||||
	db8500_add_sdi4(parent, &mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
 | 
						db8500_add_sdi4(parent, &mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
 | 
				
			||||||
	/* External Micro SD slot */
 | 
						/* External Micro SD slot */
 | 
				
			||||||
	mop500_sdi0_data.gpio_cd = HREFV60_SDMMC_CD_GPIO;
 | 
						mop500_sdi0_data.gpio_cd = HREFV60_SDMMC_CD_GPIO;
 | 
				
			||||||
	sdi0_en = HREFV60_SDMMC_EN_GPIO;
 | 
					 | 
				
			||||||
	sdi0_vsel = HREFV60_SDMMC_1V8_3V_GPIO;
 | 
					 | 
				
			||||||
	sdi0_configure(parent);
 | 
						sdi0_configure(parent);
 | 
				
			||||||
	/* WLAN SDIO channel */
 | 
						/* WLAN SDIO channel */
 | 
				
			||||||
	db8500_add_sdi1(parent, &mop500_sdi1_data, U8500_SDI_V2_PERIPHID);
 | 
						db8500_add_sdi1(parent, &mop500_sdi1_data, U8500_SDI_V2_PERIPHID);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,6 +25,8 @@
 | 
				
			||||||
#include <linux/mfd/abx500/ab8500.h>
 | 
					#include <linux/mfd/abx500/ab8500.h>
 | 
				
			||||||
#include <linux/regulator/ab8500.h>
 | 
					#include <linux/regulator/ab8500.h>
 | 
				
			||||||
#include <linux/regulator/fixed.h>
 | 
					#include <linux/regulator/fixed.h>
 | 
				
			||||||
 | 
					#include <linux/regulator/driver.h>
 | 
				
			||||||
 | 
					#include <linux/regulator/gpio-regulator.h>
 | 
				
			||||||
#include <linux/mfd/tc3589x.h>
 | 
					#include <linux/mfd/tc3589x.h>
 | 
				
			||||||
#include <linux/mfd/tps6105x.h>
 | 
					#include <linux/mfd/tps6105x.h>
 | 
				
			||||||
#include <linux/mfd/abx500/ab8500-gpio.h>
 | 
					#include <linux/mfd/abx500/ab8500-gpio.h>
 | 
				
			||||||
| 
						 | 
					@ -90,6 +92,37 @@ static struct platform_device snowball_gpio_en_3v3_regulator_dev = {
 | 
				
			||||||
       },
 | 
					       },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Dynamically populated. */
 | 
				
			||||||
 | 
					static struct gpio sdi0_reg_gpios[] = {
 | 
				
			||||||
 | 
						{ 0, GPIOF_OUT_INIT_LOW, "mmci_vsel" },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct gpio_regulator_state sdi0_reg_states[] = {
 | 
				
			||||||
 | 
						{ .value = 2900000, .gpios = (0 << 0) },
 | 
				
			||||||
 | 
						{ .value = 1800000, .gpios = (1 << 0) },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct gpio_regulator_config sdi0_reg_info = {
 | 
				
			||||||
 | 
						.supply_name		= "ext-mmc-level-shifter",
 | 
				
			||||||
 | 
						.gpios			= sdi0_reg_gpios,
 | 
				
			||||||
 | 
						.nr_gpios		= ARRAY_SIZE(sdi0_reg_gpios),
 | 
				
			||||||
 | 
						.states			= sdi0_reg_states,
 | 
				
			||||||
 | 
						.nr_states		= ARRAY_SIZE(sdi0_reg_states),
 | 
				
			||||||
 | 
						.type			= REGULATOR_VOLTAGE,
 | 
				
			||||||
 | 
						.enable_high		= 1,
 | 
				
			||||||
 | 
						.enabled_at_boot	= 0,
 | 
				
			||||||
 | 
						.init_data		= &sdi0_reg_init_data,
 | 
				
			||||||
 | 
						.startup_delay		= 100,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct platform_device sdi0_regulator = {
 | 
				
			||||||
 | 
						.name = "gpio-regulator",
 | 
				
			||||||
 | 
						.id   = -1,
 | 
				
			||||||
 | 
						.dev  = {
 | 
				
			||||||
 | 
							.platform_data = &sdi0_reg_info,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct abx500_gpio_platform_data ab8500_gpio_pdata = {
 | 
					static struct abx500_gpio_platform_data ab8500_gpio_pdata = {
 | 
				
			||||||
	.gpio_base		= MOP500_AB8500_PIN_GPIO(1),
 | 
						.gpio_base		= MOP500_AB8500_PIN_GPIO(1),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -488,6 +521,7 @@ static struct hash_platform_data u8500_hash1_platform_data = {
 | 
				
			||||||
/* add any platform devices here - TODO */
 | 
					/* add any platform devices here - TODO */
 | 
				
			||||||
static struct platform_device *mop500_platform_devs[] __initdata = {
 | 
					static struct platform_device *mop500_platform_devs[] __initdata = {
 | 
				
			||||||
	&mop500_gpio_keys_device,
 | 
						&mop500_gpio_keys_device,
 | 
				
			||||||
 | 
						&sdi0_regulator,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_STE_DMA40
 | 
					#ifdef CONFIG_STE_DMA40
 | 
				
			||||||
| 
						 | 
					@ -631,6 +665,7 @@ static struct platform_device *snowball_platform_devs[] __initdata = {
 | 
				
			||||||
	&snowball_gpio_en_3v3_regulator_dev,
 | 
						&snowball_gpio_en_3v3_regulator_dev,
 | 
				
			||||||
	&u8500_thsens_device,
 | 
						&u8500_thsens_device,
 | 
				
			||||||
	&u8500_cpufreq_cooling_device,
 | 
						&u8500_cpufreq_cooling_device,
 | 
				
			||||||
 | 
						&sdi0_regulator,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __init mop500_init_machine(void)
 | 
					static void __init mop500_init_machine(void)
 | 
				
			||||||
| 
						 | 
					@ -642,6 +677,9 @@ static void __init mop500_init_machine(void)
 | 
				
			||||||
	platform_device_register(&db8500_prcmu_device);
 | 
						platform_device_register(&db8500_prcmu_device);
 | 
				
			||||||
	mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR;
 | 
						mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdi0_reg_info.enable_gpio = GPIO_SDMMC_EN;
 | 
				
			||||||
 | 
						sdi0_reg_info.gpios[0].gpio = GPIO_SDMMC_1V8_3V_SEL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mop500_pinmaps_init();
 | 
						mop500_pinmaps_init();
 | 
				
			||||||
	parent = u8500_init_devices(&ab8500_platdata);
 | 
						parent = u8500_init_devices(&ab8500_platdata);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -675,6 +713,10 @@ static void __init snowball_init_machine(void)
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	platform_device_register(&db8500_prcmu_device);
 | 
						platform_device_register(&db8500_prcmu_device);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdi0_reg_info.enable_gpio = SNOWBALL_SDMMC_EN_GPIO;
 | 
				
			||||||
 | 
						sdi0_reg_info.gpios[0].gpio = SNOWBALL_SDMMC_1V8_3V_GPIO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	snowball_pinmaps_init();
 | 
						snowball_pinmaps_init();
 | 
				
			||||||
	parent = u8500_init_devices(&ab8500_platdata);
 | 
						parent = u8500_init_devices(&ab8500_platdata);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -710,6 +752,9 @@ static void __init hrefv60_init_machine(void)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	mop500_gpio_keys[0].gpio = HREFV60_PROX_SENSE_GPIO;
 | 
						mop500_gpio_keys[0].gpio = HREFV60_PROX_SENSE_GPIO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdi0_reg_info.enable_gpio = HREFV60_SDMMC_EN_GPIO;
 | 
				
			||||||
 | 
						sdi0_reg_info.gpios[0].gpio = HREFV60_SDMMC_1V8_3V_GPIO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hrefv60_pinmaps_init();
 | 
						hrefv60_pinmaps_init();
 | 
				
			||||||
	parent = u8500_init_devices(&ab8500_platdata);
 | 
						parent = u8500_init_devices(&ab8500_platdata);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -282,6 +282,7 @@ static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
 | 
				
			||||||
	OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL),
 | 
						OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL),
 | 
				
			||||||
	OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu",
 | 
						OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu",
 | 
				
			||||||
			&db8500_prcmu_pdata),
 | 
								&db8500_prcmu_pdata),
 | 
				
			||||||
 | 
						OF_DEV_AUXDATA("smsc,lan9115", 0x50000000, "smsc911x", NULL),
 | 
				
			||||||
	/* Requires device name bindings. */
 | 
						/* Requires device name bindings. */
 | 
				
			||||||
	OF_DEV_AUXDATA("stericsson,nmk-pinctrl", U8500_PRCMU_BASE,
 | 
						OF_DEV_AUXDATA("stericsson,nmk-pinctrl", U8500_PRCMU_BASE,
 | 
				
			||||||
		"pinctrl-db8500", NULL),
 | 
							"pinctrl-db8500", NULL),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -711,8 +711,8 @@ static void tegra20_pll_init(void)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *cclk_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m",
 | 
					static const char *cclk_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m",
 | 
				
			||||||
				      "pll_p_cclk", "pll_p_out4_cclk",
 | 
									      "pll_p", "pll_p_out4",
 | 
				
			||||||
				      "pll_p_out3_cclk", "clk_d", "pll_x" };
 | 
									      "pll_p_out3", "clk_d", "pll_x" };
 | 
				
			||||||
static const char *sclk_parents[] = { "clk_m", "pll_c_out1", "pll_p_out4",
 | 
					static const char *sclk_parents[] = { "clk_m", "pll_c_out1", "pll_p_out4",
 | 
				
			||||||
				      "pll_p_out3", "pll_p_out2", "clk_d",
 | 
									      "pll_p_out3", "pll_p_out2", "clk_d",
 | 
				
			||||||
				      "clk_32k", "pll_m_out1" };
 | 
									      "clk_32k", "pll_m_out1" };
 | 
				
			||||||
| 
						 | 
					@ -721,38 +721,6 @@ static void tegra20_super_clk_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct clk *clk;
 | 
						struct clk *clk;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	 * DIV_U71 dividers for CCLK, these dividers are used only
 | 
					 | 
				
			||||||
	 * if parent clock is fixed rate.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	 * Clock input to cclk divided from pll_p using
 | 
					 | 
				
			||||||
	 * U71 divider of cclk.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	clk = tegra_clk_register_divider("pll_p_cclk", "pll_p",
 | 
					 | 
				
			||||||
				clk_base + SUPER_CCLK_DIVIDER, 0,
 | 
					 | 
				
			||||||
				TEGRA_DIVIDER_INT, 16, 8, 1, NULL);
 | 
					 | 
				
			||||||
	clk_register_clkdev(clk, "pll_p_cclk", NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	 * Clock input to cclk divided from pll_p_out3 using
 | 
					 | 
				
			||||||
	 * U71 divider of cclk.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	clk = tegra_clk_register_divider("pll_p_out3_cclk", "pll_p_out3",
 | 
					 | 
				
			||||||
				clk_base + SUPER_CCLK_DIVIDER, 0,
 | 
					 | 
				
			||||||
				TEGRA_DIVIDER_INT, 16, 8, 1, NULL);
 | 
					 | 
				
			||||||
	clk_register_clkdev(clk, "pll_p_out3_cclk", NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	 * Clock input to cclk divided from pll_p_out4 using
 | 
					 | 
				
			||||||
	 * U71 divider of cclk.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	clk = tegra_clk_register_divider("pll_p_out4_cclk", "pll_p_out4",
 | 
					 | 
				
			||||||
				clk_base + SUPER_CCLK_DIVIDER, 0,
 | 
					 | 
				
			||||||
				TEGRA_DIVIDER_INT, 16, 8, 1, NULL);
 | 
					 | 
				
			||||||
	clk_register_clkdev(clk, "pll_p_out4_cclk", NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* CCLK */
 | 
						/* CCLK */
 | 
				
			||||||
	clk = tegra_clk_register_super_mux("cclk", cclk_parents,
 | 
						clk = tegra_clk_register_super_mux("cclk", cclk_parents,
 | 
				
			||||||
			      ARRAY_SIZE(cclk_parents), CLK_SET_RATE_PARENT,
 | 
								      ARRAY_SIZE(cclk_parents), CLK_SET_RATE_PARENT,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -324,7 +324,8 @@ void u8500_clk_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", U8500_CLKRST3_BASE,
 | 
						clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", U8500_CLKRST3_BASE,
 | 
				
			||||||
				BIT(0), 0);
 | 
									BIT(0), 0);
 | 
				
			||||||
	clk_register_clkdev(clk, NULL, "fsmc");
 | 
						clk_register_clkdev(clk, "fsmc", NULL);
 | 
				
			||||||
 | 
						clk_register_clkdev(clk, NULL, "smsc911x");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", U8500_CLKRST3_BASE,
 | 
						clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", U8500_CLKRST3_BASE,
 | 
				
			||||||
				BIT(1), 0);
 | 
									BIT(1), 0);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1141,6 +1141,11 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 | 
				
			||||||
	case MMC_POWER_OFF:
 | 
						case MMC_POWER_OFF:
 | 
				
			||||||
		if (!IS_ERR(mmc->supply.vmmc))
 | 
							if (!IS_ERR(mmc->supply.vmmc))
 | 
				
			||||||
			mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0);
 | 
								mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!IS_ERR(mmc->supply.vqmmc) &&
 | 
				
			||||||
 | 
							    regulator_is_enabled(mmc->supply.vqmmc))
 | 
				
			||||||
 | 
								regulator_disable(mmc->supply.vqmmc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case MMC_POWER_UP:
 | 
						case MMC_POWER_UP:
 | 
				
			||||||
		if (!IS_ERR(mmc->supply.vmmc))
 | 
							if (!IS_ERR(mmc->supply.vmmc))
 | 
				
			||||||
| 
						 | 
					@ -1155,6 +1160,10 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case MMC_POWER_ON:
 | 
						case MMC_POWER_ON:
 | 
				
			||||||
 | 
							if (!IS_ERR(mmc->supply.vqmmc) &&
 | 
				
			||||||
 | 
							    !regulator_is_enabled(mmc->supply.vqmmc))
 | 
				
			||||||
 | 
								regulator_enable(mmc->supply.vqmmc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pwr |= MCI_PWR_ON;
 | 
							pwr |= MCI_PWR_ON;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,6 +33,7 @@
 | 
				
			||||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 | 
					#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/crc32.h>
 | 
					#include <linux/crc32.h>
 | 
				
			||||||
 | 
					#include <linux/clk.h>
 | 
				
			||||||
#include <linux/delay.h>
 | 
					#include <linux/delay.h>
 | 
				
			||||||
#include <linux/errno.h>
 | 
					#include <linux/errno.h>
 | 
				
			||||||
#include <linux/etherdevice.h>
 | 
					#include <linux/etherdevice.h>
 | 
				
			||||||
| 
						 | 
					@ -144,6 +145,9 @@ struct smsc911x_data {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* regulators */
 | 
						/* regulators */
 | 
				
			||||||
	struct regulator_bulk_data supplies[SMSC911X_NUM_SUPPLIES];
 | 
						struct regulator_bulk_data supplies[SMSC911X_NUM_SUPPLIES];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* clock */
 | 
				
			||||||
 | 
						struct clk *clk;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Easy access to information */
 | 
					/* Easy access to information */
 | 
				
			||||||
| 
						 | 
					@ -369,7 +373,7 @@ smsc911x_rx_readfifo_shift(struct smsc911x_data *pdata, unsigned int *buf,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * enable resources, currently just regulators.
 | 
					 * enable regulator and clock resources.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static int smsc911x_enable_resources(struct platform_device *pdev)
 | 
					static int smsc911x_enable_resources(struct platform_device *pdev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -382,6 +386,13 @@ static int smsc911x_enable_resources(struct platform_device *pdev)
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		netdev_err(ndev, "failed to enable regulators %d\n",
 | 
							netdev_err(ndev, "failed to enable regulators %d\n",
 | 
				
			||||||
				ret);
 | 
									ret);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!IS_ERR(pdata->clk)) {
 | 
				
			||||||
 | 
							ret = clk_prepare_enable(pdata->clk);
 | 
				
			||||||
 | 
							if (ret < 0)
 | 
				
			||||||
 | 
								netdev_err(ndev, "failed to enable clock %d\n", ret);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -396,6 +407,10 @@ static int smsc911x_disable_resources(struct platform_device *pdev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = regulator_bulk_disable(ARRAY_SIZE(pdata->supplies),
 | 
						ret = regulator_bulk_disable(ARRAY_SIZE(pdata->supplies),
 | 
				
			||||||
			pdata->supplies);
 | 
								pdata->supplies);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!IS_ERR(pdata->clk))
 | 
				
			||||||
 | 
							clk_disable_unprepare(pdata->clk);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -421,6 +436,12 @@ static int smsc911x_request_resources(struct platform_device *pdev)
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		netdev_err(ndev, "couldn't get regulators %d\n",
 | 
							netdev_err(ndev, "couldn't get regulators %d\n",
 | 
				
			||||||
				ret);
 | 
									ret);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Request clock */
 | 
				
			||||||
 | 
						pdata->clk = clk_get(&pdev->dev, NULL);
 | 
				
			||||||
 | 
						if (IS_ERR(pdata->clk))
 | 
				
			||||||
 | 
							netdev_warn(ndev, "couldn't get clock %li\n", PTR_ERR(pdata->clk));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -436,6 +457,12 @@ static void smsc911x_free_resources(struct platform_device *pdev)
 | 
				
			||||||
	/* Free regulators */
 | 
						/* Free regulators */
 | 
				
			||||||
	regulator_bulk_free(ARRAY_SIZE(pdata->supplies),
 | 
						regulator_bulk_free(ARRAY_SIZE(pdata->supplies),
 | 
				
			||||||
			pdata->supplies);
 | 
								pdata->supplies);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Free clock */
 | 
				
			||||||
 | 
						if (!IS_ERR(pdata->clk)) {
 | 
				
			||||||
 | 
							clk_put(pdata->clk);
 | 
				
			||||||
 | 
							pdata->clk = NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* waits for MAC not busy, with timeout.  Only called by smsc911x_mac_read
 | 
					/* waits for MAC not busy, with timeout.  Only called by smsc911x_mac_read
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue