Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc

Pull ARM SoC fixes from Olof Johansson:
"This week's arm-soc fixes:

- A set of of OMAP patches that we had missed Tony's pull request of:
* Reset fix for am43xx
* Proper OPP table for omap5
* Fix for SoC detection of one of the DRA7 SoCs
* hwmod updates to get SATA and OCP to work on omap5 (drivers
merged in 3.16)
* ... plus a handful of smaller fixes
- sunxi needed to re-add machine specific restart code that was
removed in anticipation of a watchdog driver being merged for 3.16,
and it didn't make it in.
- Marvell fixes for PCIe on SMP and a big-endian fix.
- A trivial defconfig update to make my capri test board boot with
bcm_defconfig again.

... and a couple of MAINTAINERS updates, one to claim new Keystone
drivers that have been merged, and one to merge MXS and i.MX (both
Freescale platforms).

The largest diffs come from the hwmod code for omap5 and the re-add of
the restart code on sunxi. The hwmod stuff is quite late at this
point but it slipped through cracks repeatedly while coming up the
maintainer chain and only affects the one SoC so risk is low"

* tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
MAINTAINERS: Add few more Keystone drivers
MAINTAINERS: merge MXS entry into IMX one
ARM: sunxi: Reintroduce the restart code for A10/A20 SoCs
ARM: mvebu: fix cpuidle implementation to work on big-endian systems
ARM: mvebu: update L2/PCIe deadlock workaround after L2CC cleanup
ARM: mvebu: move Armada 375 external abort logic as a quirk
ARM: bcm: Fix bcm and multi_v7 defconfigs
ARM: dts: dra7-evm: remove interrupt binding
ARM: OMAP2+: Fix parser-bug in platform muxing code
ARM: DTS: dra7/dra7xx-clocks: ATL related changes
ARM: OMAP2+: drop unused function
ARM: dts: am43x-epos-evm: Add Missing cpsw-phy-sel for am43x-epos-evm
ARM: dts: omap5: Update CPU OPP table as per final production Manual
ARM: DRA722: add detection of SoC information
ARM: dts: Enable twl4030 off-idle configuration for selected omaps
ARM: OMAP5: hwmod: Add ocp2scp3 and sata hwmods
ARM: OMAP2+: hwmod: Change hardreset soc_ops for AM43XX

+292 -67
+26 -8
MAINTAINERS
··· 943 S: Maintained 944 T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git 945 F: arch/arm/mach-imx/ 946 F: arch/arm/boot/dts/imx* 947 F: arch/arm/configs/imx*_defconfig 948 - 949 - ARM/FREESCALE MXS ARM ARCHITECTURE 950 - M: Shawn Guo <shawn.guo@linaro.org> 951 - L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 952 - S: Maintained 953 - T: git git://git.linaro.org/people/shawnguo/linux-2.6.git 954 - F: arch/arm/mach-mxs/ 955 956 ARM/GLOMATION GESBC9312SX MACHINE SUPPORT 957 M: Lennert Buytenhek <kernel@wantstofly.org> ··· 1046 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1047 S: Maintained 1048 F: arch/arm/mach-keystone/ 1049 - F: drivers/clk/keystone/ 1050 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git 1051 1052 ARM/LOGICPD PXA270 MACHINE SUPPORT 1053 M: Lennert Buytenhek <kernel@wantstofly.org>
··· 943 S: Maintained 944 T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git 945 F: arch/arm/mach-imx/ 946 + F: arch/arm/mach-mxs/ 947 F: arch/arm/boot/dts/imx* 948 F: arch/arm/configs/imx*_defconfig 949 950 ARM/GLOMATION GESBC9312SX MACHINE SUPPORT 951 M: Lennert Buytenhek <kernel@wantstofly.org> ··· 1052 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1053 S: Maintained 1054 F: arch/arm/mach-keystone/ 1055 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git 1056 + 1057 + ARM/TEXAS INSTRUMENT KEYSTONE CLOCK FRAMEWORK 1058 + M: Santosh Shilimkar <santosh.shilimkar@ti.com> 1059 + L: linux-kernel@vger.kernel.org 1060 + S: Maintained 1061 + F: drivers/clk/keystone/ 1062 + 1063 + ARM/TEXAS INSTRUMENT KEYSTONE ClOCKSOURCE 1064 + M: Santosh Shilimkar <santosh.shilimkar@ti.com> 1065 + L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1066 + L: linux-kernel@vger.kernel.org 1067 + S: Maintained 1068 + F: drivers/clocksource/timer-keystone.c 1069 + 1070 + ARM/TEXAS INSTRUMENT KEYSTONE RESET DRIVER 1071 + M: Santosh Shilimkar <santosh.shilimkar@ti.com> 1072 + L: linux-kernel@vger.kernel.org 1073 + S: Maintained 1074 + F: drivers/power/reset/keystone-reset.c 1075 + 1076 + ARM/TEXAS INSTRUMENT AEMIF/EMIF DRIVERS 1077 + M: Santosh Shilimkar <santosh.shilimkar@ti.com> 1078 + L: linux-kernel@vger.kernel.org 1079 + S: Maintained 1080 + F: drivers/memory/*emif* 1081 1082 ARM/LOGICPD PXA270 MACHINE SUPPORT 1083 M: Lennert Buytenhek <kernel@wantstofly.org>
+4
arch/arm/boot/dts/am43x-epos-evm.dts
··· 319 phy-mode = "rmii"; 320 }; 321 322 &i2c0 { 323 status = "okay"; 324 pinctrl-names = "default";
··· 319 phy-mode = "rmii"; 320 }; 321 322 + &phy_sel { 323 + rmii-clock-ext; 324 + }; 325 + 326 &i2c0 { 327 status = "okay"; 328 pinctrl-names = "default";
+11 -1
arch/arm/boot/dts/dra7.dtsi
··· 773 clocks = <&qspi_gfclk_div>; 774 clock-names = "fck"; 775 num-cs = <4>; 776 - interrupts = <0 343 0x4>; 777 status = "disabled"; 778 }; 779 ··· 981 gpmc,num-waitpins = <2>; 982 #address-cells = <2>; 983 #size-cells = <1>; 984 status = "disabled"; 985 }; 986 };
··· 773 clocks = <&qspi_gfclk_div>; 774 clock-names = "fck"; 775 num-cs = <4>; 776 status = "disabled"; 777 }; 778 ··· 982 gpmc,num-waitpins = <2>; 983 #address-cells = <2>; 984 #size-cells = <1>; 985 + status = "disabled"; 986 + }; 987 + 988 + atl: atl@4843c000 { 989 + compatible = "ti,dra7-atl"; 990 + reg = <0x4843c000 0x3ff>; 991 + ti,hwmods = "atl"; 992 + ti,provided-clocks = <&atl_clkin0_ck>, <&atl_clkin1_ck>, 993 + <&atl_clkin2_ck>, <&atl_clkin3_ck>; 994 + clocks = <&atl_gfclk_mux>; 995 + clock-names = "fck"; 996 status = "disabled"; 997 }; 998 };
+8 -8
arch/arm/boot/dts/dra7xx-clocks.dtsi
··· 10 &cm_core_aon_clocks { 11 atl_clkin0_ck: atl_clkin0_ck { 12 #clock-cells = <0>; 13 - compatible = "fixed-clock"; 14 - clock-frequency = <0>; 15 }; 16 17 atl_clkin1_ck: atl_clkin1_ck { 18 #clock-cells = <0>; 19 - compatible = "fixed-clock"; 20 - clock-frequency = <0>; 21 }; 22 23 atl_clkin2_ck: atl_clkin2_ck { 24 #clock-cells = <0>; 25 - compatible = "fixed-clock"; 26 - clock-frequency = <0>; 27 }; 28 29 atl_clkin3_ck: atl_clkin3_ck { 30 #clock-cells = <0>; 31 - compatible = "fixed-clock"; 32 - clock-frequency = <0>; 33 }; 34 35 hdmi_clkin_ck: hdmi_clkin_ck {
··· 10 &cm_core_aon_clocks { 11 atl_clkin0_ck: atl_clkin0_ck { 12 #clock-cells = <0>; 13 + compatible = "ti,dra7-atl-clock"; 14 + clocks = <&atl_gfclk_mux>; 15 }; 16 17 atl_clkin1_ck: atl_clkin1_ck { 18 #clock-cells = <0>; 19 + compatible = "ti,dra7-atl-clock"; 20 + clocks = <&atl_gfclk_mux>; 21 }; 22 23 atl_clkin2_ck: atl_clkin2_ck { 24 #clock-cells = <0>; 25 + compatible = "ti,dra7-atl-clock"; 26 + clocks = <&atl_gfclk_mux>; 27 }; 28 29 atl_clkin3_ck: atl_clkin3_ck { 30 #clock-cells = <0>; 31 + compatible = "ti,dra7-atl-clock"; 32 + clocks = <&atl_gfclk_mux>; 33 }; 34 35 hdmi_clkin_ck: hdmi_clkin_ck {
+6
arch/arm/boot/dts/omap3-beagle-xm.dts
··· 251 codec { 252 }; 253 }; 254 }; 255 }; 256 ··· 306 }; 307 308 &uart3 { 309 pinctrl-names = "default"; 310 pinctrl-0 = <&uart3_pins>; 311 };
··· 251 codec { 252 }; 253 }; 254 + 255 + twl_power: power { 256 + compatible = "ti,twl4030-power-beagleboard-xm", "ti,twl4030-power-idle-osc-off"; 257 + ti,use_poweroff; 258 + }; 259 }; 260 }; 261 ··· 301 }; 302 303 &uart3 { 304 + interrupts-extended = <&intc 74 &omap3_pmx_core OMAP3_UART3_RX>; 305 pinctrl-names = "default"; 306 pinctrl-0 = <&uart3_pins>; 307 };
+7
arch/arm/boot/dts/omap3-evm-common.dtsi
··· 50 gpios = <&twl_gpio 18 GPIO_ACTIVE_LOW>; 51 }; 52 53 &i2c2 { 54 clock-frequency = <400000>; 55 };
··· 50 gpios = <&twl_gpio 18 GPIO_ACTIVE_LOW>; 51 }; 52 53 + &twl { 54 + twl_power: power { 55 + compatible = "ti,twl4030-power-omap3-evm", "ti,twl4030-power-idle"; 56 + ti,use_poweroff; 57 + }; 58 + }; 59 + 60 &i2c2 { 61 clock-frequency = <400000>; 62 };
+5
arch/arm/boot/dts/omap3-n900.dts
··· 351 compatible = "ti,twl4030-audio"; 352 ti,enable-vibra = <1>; 353 }; 354 }; 355 356 &twl_keypad {
··· 351 compatible = "ti,twl4030-audio"; 352 ti,enable-vibra = <1>; 353 }; 354 + 355 + twl_power: power { 356 + compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off"; 357 + ti,use_poweroff; 358 + }; 359 }; 360 361 &twl_keypad {
-1
arch/arm/boot/dts/omap5.dtsi
··· 45 46 operating-points = < 47 /* kHz uV */ 48 - 500000 880000 49 1000000 1060000 50 1500000 1250000 51 >;
··· 45 46 operating-points = < 47 /* kHz uV */ 48 1000000 1060000 49 1500000 1250000 50 >;
+1 -1
arch/arm/configs/bcm_defconfig
··· 94 CONFIG_BACKLIGHT_PWM=y 95 # CONFIG_USB_SUPPORT is not set 96 CONFIG_MMC=y 97 - CONFIG_MMC_UNSAFE_RESUME=y 98 CONFIG_MMC_BLOCK_MINORS=32 99 CONFIG_MMC_TEST=y 100 CONFIG_MMC_SDHCI=y 101 CONFIG_MMC_SDHCI_BCM_KONA=y 102 CONFIG_NEW_LEDS=y 103 CONFIG_LEDS_CLASS=y
··· 94 CONFIG_BACKLIGHT_PWM=y 95 # CONFIG_USB_SUPPORT is not set 96 CONFIG_MMC=y 97 CONFIG_MMC_BLOCK_MINORS=32 98 CONFIG_MMC_TEST=y 99 CONFIG_MMC_SDHCI=y 100 + CONFIG_MMC_SDHCI_PLTFM=y 101 CONFIG_MMC_SDHCI_BCM_KONA=y 102 CONFIG_NEW_LEDS=y 103 CONFIG_LEDS_CLASS=y
+2 -1
arch/arm/configs/multi_v7_defconfig
··· 223 CONFIG_POWER_RESET_SUN6I=y 224 CONFIG_SENSORS_LM90=y 225 CONFIG_THERMAL=y 226 - CONFIG_DOVE_THERMAL=y 227 CONFIG_ARMADA_THERMAL=y 228 CONFIG_WATCHDOG=y 229 CONFIG_ORION_WATCHDOG=y 230 CONFIG_SUNXI_WATCHDOG=y 231 CONFIG_MFD_AS3722=y 232 CONFIG_MFD_CROS_EC=y 233 CONFIG_MFD_CROS_EC_SPI=y 234 CONFIG_MFD_MAX8907=y ··· 240 CONFIG_REGULATOR_VIRTUAL_CONSUMER=y 241 CONFIG_REGULATOR_AB8500=y 242 CONFIG_REGULATOR_AS3722=y 243 CONFIG_REGULATOR_GPIO=y 244 CONFIG_REGULATOR_MAX8907=y 245 CONFIG_REGULATOR_PALMAS=y
··· 223 CONFIG_POWER_RESET_SUN6I=y 224 CONFIG_SENSORS_LM90=y 225 CONFIG_THERMAL=y 226 CONFIG_ARMADA_THERMAL=y 227 CONFIG_WATCHDOG=y 228 CONFIG_ORION_WATCHDOG=y 229 CONFIG_SUNXI_WATCHDOG=y 230 CONFIG_MFD_AS3722=y 231 + CONFIG_MFD_BCM590XX=y 232 CONFIG_MFD_CROS_EC=y 233 CONFIG_MFD_CROS_EC_SPI=y 234 CONFIG_MFD_MAX8907=y ··· 240 CONFIG_REGULATOR_VIRTUAL_CONSUMER=y 241 CONFIG_REGULATOR_AB8500=y 242 CONFIG_REGULATOR_AS3722=y 243 + CONFIG_REGULATOR_BCM590XX=y 244 CONFIG_REGULATOR_GPIO=y 245 CONFIG_REGULATOR_MAX8907=y 246 CONFIG_REGULATOR_PALMAS=y
+1 -1
arch/arm/mach-mvebu/Makefile
··· 7 obj-y += system-controller.o mvebu-soc-id.o 8 9 ifeq ($(CONFIG_MACH_MVEBU_V7),y) 10 - obj-y += cpu-reset.o board-v7.o coherency.o coherency_ll.o pmsu.o 11 obj-$(CONFIG_SMP) += platsmp.o headsmp.o platsmp-a9.o headsmp-a9.o 12 obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o 13 endif
··· 7 obj-y += system-controller.o mvebu-soc-id.o 8 9 ifeq ($(CONFIG_MACH_MVEBU_V7),y) 10 + obj-y += cpu-reset.o board-v7.o coherency.o coherency_ll.o pmsu.o pmsu_ll.o 11 obj-$(CONFIG_SMP) += platsmp.o headsmp.o platsmp-a9.o headsmp-a9.o 12 obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o 13 endif
+19 -10
arch/arm/mach-mvebu/board-v7.c
··· 23 #include <linux/mbus.h> 24 #include <linux/signal.h> 25 #include <linux/slab.h> 26 #include <asm/hardware/cache-l2x0.h> 27 #include <asm/mach/arch.h> 28 #include <asm/mach/map.h> ··· 72 return 1; 73 } 74 75 - static void __init mvebu_timer_and_clk_init(void) 76 { 77 - of_clk_init(NULL); 78 - clocksource_of_init(); 79 mvebu_scu_enable(); 80 coherency_init(); 81 BUG_ON(mvebu_mbus_dt_init(coherency_available())); 82 83 - if (of_machine_is_compatible("marvell,armada375")) 84 - hook_fault_code(16 + 6, armada_375_external_abort_wa, SIGBUS, 0, 85 - "imprecise external abort"); 86 } 87 88 static void __init i2c_quirk(void) ··· 176 { 177 if (of_machine_is_compatible("plathome,openblocks-ax3-4")) 178 i2c_quirk(); 179 - if (of_machine_is_compatible("marvell,a375-db")) 180 thermal_quirk(); 181 182 of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 183 } ··· 194 .l2c_aux_mask = ~0, 195 .smp = smp_ops(armada_xp_smp_ops), 196 .init_machine = mvebu_dt_init, 197 - .init_time = mvebu_timer_and_clk_init, 198 .restart = mvebu_restart, 199 .dt_compat = armada_370_xp_dt_compat, 200 MACHINE_END ··· 207 DT_MACHINE_START(ARMADA_375_DT, "Marvell Armada 375 (Device Tree)") 208 .l2c_aux_val = 0, 209 .l2c_aux_mask = ~0, 210 - .init_time = mvebu_timer_and_clk_init, 211 .init_machine = mvebu_dt_init, 212 .restart = mvebu_restart, 213 .dt_compat = armada_375_dt_compat, ··· 222 DT_MACHINE_START(ARMADA_38X_DT, "Marvell Armada 380/385 (Device Tree)") 223 .l2c_aux_val = 0, 224 .l2c_aux_mask = ~0, 225 - .init_time = mvebu_timer_and_clk_init, 226 .restart = mvebu_restart, 227 .dt_compat = armada_38x_dt_compat, 228 MACHINE_END
··· 23 #include <linux/mbus.h> 24 #include <linux/signal.h> 25 #include <linux/slab.h> 26 + #include <linux/irqchip.h> 27 #include <asm/hardware/cache-l2x0.h> 28 #include <asm/mach/arch.h> 29 #include <asm/mach/map.h> ··· 71 return 1; 72 } 73 74 + static void __init mvebu_init_irq(void) 75 { 76 + irqchip_init(); 77 mvebu_scu_enable(); 78 coherency_init(); 79 BUG_ON(mvebu_mbus_dt_init(coherency_available())); 80 + } 81 82 + static void __init external_abort_quirk(void) 83 + { 84 + u32 dev, rev; 85 + 86 + if (mvebu_get_soc_id(&dev, &rev) == 0 && rev > ARMADA_375_Z1_REV) 87 + return; 88 + 89 + hook_fault_code(16 + 6, armada_375_external_abort_wa, SIGBUS, 0, 90 + "imprecise external abort"); 91 } 92 93 static void __init i2c_quirk(void) ··· 169 { 170 if (of_machine_is_compatible("plathome,openblocks-ax3-4")) 171 i2c_quirk(); 172 + if (of_machine_is_compatible("marvell,a375-db")) { 173 + external_abort_quirk(); 174 thermal_quirk(); 175 + } 176 177 of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 178 } ··· 185 .l2c_aux_mask = ~0, 186 .smp = smp_ops(armada_xp_smp_ops), 187 .init_machine = mvebu_dt_init, 188 + .init_irq = mvebu_init_irq, 189 .restart = mvebu_restart, 190 .dt_compat = armada_370_xp_dt_compat, 191 MACHINE_END ··· 198 DT_MACHINE_START(ARMADA_375_DT, "Marvell Armada 375 (Device Tree)") 199 .l2c_aux_val = 0, 200 .l2c_aux_mask = ~0, 201 + .init_irq = mvebu_init_irq, 202 .init_machine = mvebu_dt_init, 203 .restart = mvebu_restart, 204 .dt_compat = armada_375_dt_compat, ··· 213 DT_MACHINE_START(ARMADA_38X_DT, "Marvell Armada 380/385 (Device Tree)") 214 .l2c_aux_val = 0, 215 .l2c_aux_mask = ~0, 216 + .init_irq = mvebu_init_irq, 217 .restart = mvebu_restart, 218 .dt_compat = armada_38x_dt_compat, 219 MACHINE_END
+2 -7
arch/arm/mach-mvebu/pmsu.c
··· 66 extern void ll_disable_coherency(void); 67 extern void ll_enable_coherency(void); 68 69 static struct platform_device armada_xp_cpuidle_device = { 70 .name = "cpuidle-armada-370-xp", 71 }; ··· 140 reg = readl(pmsu_mp_base + L2C_NFABRIC_PM_CTL); 141 reg |= L2C_NFABRIC_PM_CTL_PWR_DOWN; 142 writel(reg, pmsu_mp_base + L2C_NFABRIC_PM_CTL); 143 - } 144 - 145 - static void armada_370_xp_cpu_resume(void) 146 - { 147 - asm volatile("bl ll_add_cpu_to_smp_group\n\t" 148 - "bl ll_enable_coherency\n\t" 149 - "b cpu_resume\n\t"); 150 } 151 152 /* No locking is needed because we only access per-CPU registers */
··· 66 extern void ll_disable_coherency(void); 67 extern void ll_enable_coherency(void); 68 69 + extern void armada_370_xp_cpu_resume(void); 70 + 71 static struct platform_device armada_xp_cpuidle_device = { 72 .name = "cpuidle-armada-370-xp", 73 }; ··· 138 reg = readl(pmsu_mp_base + L2C_NFABRIC_PM_CTL); 139 reg |= L2C_NFABRIC_PM_CTL_PWR_DOWN; 140 writel(reg, pmsu_mp_base + L2C_NFABRIC_PM_CTL); 141 } 142 143 /* No locking is needed because we only access per-CPU registers */
+25
arch/arm/mach-mvebu/pmsu_ll.S
···
··· 1 + /* 2 + * Copyright (C) 2014 Marvell 3 + * 4 + * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> 5 + * Gregory Clement <gregory.clement@free-electrons.com> 6 + * 7 + * This file is licensed under the terms of the GNU General Public 8 + * License version 2. This program is licensed "as is" without any 9 + * warranty of any kind, whether express or implied. 10 + */ 11 + 12 + #include <linux/linkage.h> 13 + #include <asm/assembler.h> 14 + 15 + /* 16 + * This is the entry point through which CPUs exiting cpuidle deep 17 + * idle state are going. 18 + */ 19 + ENTRY(armada_370_xp_cpu_resume) 20 + ARM_BE8(setend be ) @ go BE8 if entered LE 21 + bl ll_add_cpu_to_smp_group 22 + bl ll_enable_coherency 23 + b cpu_resume 24 + ENDPROC(armada_370_xp_cpu_resume) 25 +
+4 -2
arch/arm/mach-omap2/Makefile
··· 110 obj-$(CONFIG_ARCH_OMAP2) += prm2xxx_3xxx.o prm2xxx.o cm2xxx.o 111 obj-$(CONFIG_ARCH_OMAP3) += prm2xxx_3xxx.o prm3xxx.o cm3xxx.o 112 obj-$(CONFIG_ARCH_OMAP3) += vc3xxx_data.o vp3xxx_data.o 113 - obj-$(CONFIG_SOC_AM33XX) += prm33xx.o cm33xx.o 114 omap-prcm-4-5-common = cminst44xx.o cm44xx.o prm44xx.o \ 115 prcm_mpu44xx.o prminst44xx.o \ 116 vc44xx_data.o vp44xx_data.o 117 obj-$(CONFIG_ARCH_OMAP4) += $(omap-prcm-4-5-common) 118 obj-$(CONFIG_SOC_OMAP5) += $(omap-prcm-4-5-common) 119 obj-$(CONFIG_SOC_DRA7XX) += $(omap-prcm-4-5-common) 120 - obj-$(CONFIG_SOC_AM43XX) += $(omap-prcm-4-5-common) 121 122 # OMAP voltage domains 123 voltagedomain-common := voltage.o vc.o vp.o
··· 110 obj-$(CONFIG_ARCH_OMAP2) += prm2xxx_3xxx.o prm2xxx.o cm2xxx.o 111 obj-$(CONFIG_ARCH_OMAP3) += prm2xxx_3xxx.o prm3xxx.o cm3xxx.o 112 obj-$(CONFIG_ARCH_OMAP3) += vc3xxx_data.o vp3xxx_data.o 113 omap-prcm-4-5-common = cminst44xx.o cm44xx.o prm44xx.o \ 114 prcm_mpu44xx.o prminst44xx.o \ 115 vc44xx_data.o vp44xx_data.o 116 obj-$(CONFIG_ARCH_OMAP4) += $(omap-prcm-4-5-common) 117 obj-$(CONFIG_SOC_OMAP5) += $(omap-prcm-4-5-common) 118 obj-$(CONFIG_SOC_DRA7XX) += $(omap-prcm-4-5-common) 119 + am33xx-43xx-prcm-common += prm33xx.o cm33xx.o 120 + obj-$(CONFIG_SOC_AM33XX) += $(am33xx-43xx-prcm-common) 121 + obj-$(CONFIG_SOC_AM43XX) += $(omap-prcm-4-5-common) \ 122 + $(am33xx-43xx-prcm-common) 123 124 # OMAP voltage domains 125 voltagedomain-common := voltage.o vc.o vp.o
+1 -1
arch/arm/mach-omap2/cm33xx.h
··· 380 void am33xx_cm_clkdm_force_sleep(u16 inst, u16 cdoffs); 381 void am33xx_cm_clkdm_force_wakeup(u16 inst, u16 cdoffs); 382 383 - #ifdef CONFIG_SOC_AM33XX 384 extern int am33xx_cm_wait_module_idle(u16 inst, s16 cdoffs, 385 u16 clkctrl_offs); 386 extern void am33xx_cm_module_enable(u8 mode, u16 inst, s16 cdoffs,
··· 380 void am33xx_cm_clkdm_force_sleep(u16 inst, u16 cdoffs); 381 void am33xx_cm_clkdm_force_wakeup(u16 inst, u16 cdoffs); 382 383 + #if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX) 384 extern int am33xx_cm_wait_module_idle(u16 inst, s16 cdoffs, 385 u16 clkctrl_offs); 386 extern void am33xx_cm_module_enable(u8 mode, u16 inst, s16 cdoffs,
-1
arch/arm/mach-omap2/common.h
··· 248 } 249 #endif 250 251 - extern void __init gic_init_irq(void); 252 extern void gic_dist_disable(void); 253 extern void gic_dist_enable(void); 254 extern bool gic_dist_disabled(void);
··· 248 } 249 #endif 250 251 extern void gic_dist_disable(void); 252 extern void gic_dist_enable(void); 253 extern bool gic_dist_disabled(void);
+12
arch/arm/mach-omap2/id.c
··· 649 } 650 break; 651 652 default: 653 /* Unknown default to latest silicon rev as default*/ 654 pr_warn("%s: unknown idcode=0x%08x (hawkeye=0x%08x,rev=0x%d)\n",
··· 649 } 650 break; 651 652 + case 0xb9bc: 653 + switch (rev) { 654 + case 0: 655 + omap_revision = DRA722_REV_ES1_0; 656 + break; 657 + default: 658 + /* If we have no new revisions */ 659 + omap_revision = DRA722_REV_ES1_0; 660 + break; 661 + } 662 + break; 663 + 664 default: 665 /* Unknown default to latest silicon rev as default*/ 666 pr_warn("%s: unknown idcode=0x%08x (hawkeye=0x%08x,rev=0x%d)\n",
+4 -2
arch/arm/mach-omap2/mux.c
··· 183 m0_entry = mux->muxnames[0]; 184 185 /* First check for full name in mode0.muxmode format */ 186 - if (mode0_len && strncmp(muxname, m0_entry, mode0_len)) 187 - continue; 188 189 /* Then check for muxmode only */ 190 for (i = 0; i < OMAP_MUX_NR_MODES; i++) {
··· 183 m0_entry = mux->muxnames[0]; 184 185 /* First check for full name in mode0.muxmode format */ 186 + if (mode0_len) 187 + if (strncmp(muxname, m0_entry, mode0_len) || 188 + (strlen(m0_entry) != mode0_len)) 189 + continue; 190 191 /* Then check for muxmode only */ 192 for (i = 0; i < OMAP_MUX_NR_MODES; i++) {
-20
arch/arm/mach-omap2/omap4-common.c
··· 102 {} 103 #endif 104 105 - void __init gic_init_irq(void) 106 - { 107 - void __iomem *omap_irq_base; 108 - 109 - /* Static mapping, never released */ 110 - gic_dist_base_addr = ioremap(OMAP44XX_GIC_DIST_BASE, SZ_4K); 111 - BUG_ON(!gic_dist_base_addr); 112 - 113 - twd_base = ioremap(OMAP44XX_LOCAL_TWD_BASE, SZ_4K); 114 - BUG_ON(!twd_base); 115 - 116 - /* Static mapping, never released */ 117 - omap_irq_base = ioremap(OMAP44XX_GIC_CPU_BASE, SZ_512); 118 - BUG_ON(!omap_irq_base); 119 - 120 - omap_wakeupgen_init(); 121 - 122 - gic_init(0, 29, gic_dist_base_addr, omap_irq_base); 123 - } 124 - 125 void gic_dist_disable(void) 126 { 127 if (gic_dist_base_addr)
··· 102 {} 103 #endif 104 105 void gic_dist_disable(void) 106 { 107 if (gic_dist_base_addr)
+3 -3
arch/arm/mach-omap2/omap_hwmod.c
··· 4251 soc_ops.enable_module = _omap4_enable_module; 4252 soc_ops.disable_module = _omap4_disable_module; 4253 soc_ops.wait_target_ready = _omap4_wait_target_ready; 4254 - soc_ops.assert_hardreset = _omap4_assert_hardreset; 4255 - soc_ops.deassert_hardreset = _omap4_deassert_hardreset; 4256 - soc_ops.is_hardreset_asserted = _omap4_is_hardreset_asserted; 4257 soc_ops.init_clkdm = _init_clkdm; 4258 } else if (soc_is_am33xx()) { 4259 soc_ops.enable_module = _am33xx_enable_module;
··· 4251 soc_ops.enable_module = _omap4_enable_module; 4252 soc_ops.disable_module = _omap4_disable_module; 4253 soc_ops.wait_target_ready = _omap4_wait_target_ready; 4254 + soc_ops.assert_hardreset = _am33xx_assert_hardreset; 4255 + soc_ops.deassert_hardreset = _am33xx_deassert_hardreset; 4256 + soc_ops.is_hardreset_asserted = _am33xx_is_hardreset_asserted; 4257 soc_ops.init_clkdm = _init_clkdm; 4258 } else if (soc_is_am33xx()) { 4259 soc_ops.enable_module = _am33xx_enable_module;
+73
arch/arm/mach-omap2/omap_hwmod_54xx_data.c
··· 2020 }, 2021 }; 2022 2023 2024 /* 2025 * Interfaces ··· 2836 &omap54xx_l4_cfg__usb_tll_hs, 2837 &omap54xx_l4_cfg__usb_otg_ss, 2838 &omap54xx_l4_wkup__wd_timer2, 2839 NULL, 2840 }; 2841
··· 2020 }, 2021 }; 2022 2023 + /* 2024 + * 'ocp2scp' class 2025 + * bridge to transform ocp interface protocol to scp (serial control port) 2026 + * protocol 2027 + */ 2028 + /* ocp2scp3 */ 2029 + static struct omap_hwmod omap54xx_ocp2scp3_hwmod; 2030 + /* l4_cfg -> ocp2scp3 */ 2031 + static struct omap_hwmod_ocp_if omap54xx_l4_cfg__ocp2scp3 = { 2032 + .master = &omap54xx_l4_cfg_hwmod, 2033 + .slave = &omap54xx_ocp2scp3_hwmod, 2034 + .clk = "l4_root_clk_div", 2035 + .user = OCP_USER_MPU | OCP_USER_SDMA, 2036 + }; 2037 + 2038 + static struct omap_hwmod omap54xx_ocp2scp3_hwmod = { 2039 + .name = "ocp2scp3", 2040 + .class = &omap54xx_ocp2scp_hwmod_class, 2041 + .clkdm_name = "l3init_clkdm", 2042 + .prcm = { 2043 + .omap4 = { 2044 + .clkctrl_offs = OMAP54XX_CM_L3INIT_OCP2SCP3_CLKCTRL_OFFSET, 2045 + .context_offs = OMAP54XX_RM_L3INIT_OCP2SCP3_CONTEXT_OFFSET, 2046 + .modulemode = MODULEMODE_HWCTRL, 2047 + }, 2048 + }, 2049 + }; 2050 + 2051 + /* 2052 + * 'sata' class 2053 + * sata: serial ata interface gen2 compliant ( 1 rx/ 1 tx) 2054 + */ 2055 + 2056 + static struct omap_hwmod_class_sysconfig omap54xx_sata_sysc = { 2057 + .sysc_offs = 0x0000, 2058 + .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE), 2059 + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 2060 + SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO | 2061 + MSTANDBY_SMART | MSTANDBY_SMART_WKUP), 2062 + .sysc_fields = &omap_hwmod_sysc_type2, 2063 + }; 2064 + 2065 + static struct omap_hwmod_class omap54xx_sata_hwmod_class = { 2066 + .name = "sata", 2067 + .sysc = &omap54xx_sata_sysc, 2068 + }; 2069 + 2070 + /* sata */ 2071 + static struct omap_hwmod omap54xx_sata_hwmod = { 2072 + .name = "sata", 2073 + .class = &omap54xx_sata_hwmod_class, 2074 + .clkdm_name = "l3init_clkdm", 2075 + .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, 2076 + .main_clk = "func_48m_fclk", 2077 + .mpu_rt_idx = 1, 2078 + .prcm = { 2079 + .omap4 = { 2080 + .clkctrl_offs = OMAP54XX_CM_L3INIT_SATA_CLKCTRL_OFFSET, 2081 + .context_offs = OMAP54XX_RM_L3INIT_SATA_CONTEXT_OFFSET, 2082 + .modulemode = MODULEMODE_SWCTRL, 2083 + }, 2084 + }, 2085 + }; 2086 + 2087 + /* l4_cfg -> sata */ 2088 + static struct omap_hwmod_ocp_if omap54xx_l4_cfg__sata = { 2089 + .master = &omap54xx_l4_cfg_hwmod, 2090 + .slave = &omap54xx_sata_hwmod, 2091 + .clk = "l3_iclk_div", 2092 + .user = OCP_USER_MPU | OCP_USER_SDMA, 2093 + }; 2094 2095 /* 2096 * Interfaces ··· 2765 &omap54xx_l4_cfg__usb_tll_hs, 2766 &omap54xx_l4_cfg__usb_otg_ss, 2767 &omap54xx_l4_wkup__wd_timer2, 2768 + &omap54xx_l4_cfg__ocp2scp3, 2769 + &omap54xx_l4_cfg__sata, 2770 NULL, 2771 }; 2772
+1
arch/arm/mach-omap2/soc.h
··· 462 #define DRA7XX_CLASS 0x07000000 463 #define DRA752_REV_ES1_0 (DRA7XX_CLASS | (0x52 << 16) | (0x10 << 8)) 464 #define DRA752_REV_ES1_1 (DRA7XX_CLASS | (0x52 << 16) | (0x11 << 8)) 465 466 void omap2xxx_check_revision(void); 467 void omap3xxx_check_revision(void);
··· 462 #define DRA7XX_CLASS 0x07000000 463 #define DRA752_REV_ES1_0 (DRA7XX_CLASS | (0x52 << 16) | (0x10 << 8)) 464 #define DRA752_REV_ES1_1 (DRA7XX_CLASS | (0x52 << 16) | (0x11 << 8)) 465 + #define DRA722_REV_ES1_0 (DRA7XX_CLASS | (0x22 << 16) | (0x10 << 8)) 466 467 void omap2xxx_check_revision(void); 468 void omap3xxx_check_revision(void);
+77
arch/arm/mach-sunxi/sunxi.c
··· 12 13 #include <linux/clk-provider.h> 14 #include <linux/clocksource.h> 15 16 #include <asm/mach/arch.h> 17 18 static const char * const sunxi_board_dt_compat[] = { 19 "allwinner,sun4i-a10", ··· 96 }; 97 98 DT_MACHINE_START(SUNXI_DT, "Allwinner A1X (Device Tree)") 99 .dt_compat = sunxi_board_dt_compat, 100 MACHINE_END 101 102 static const char * const sun6i_board_dt_compat[] = { ··· 126 }; 127 128 DT_MACHINE_START(SUN7I_DT, "Allwinner sun7i (A20) Family") 129 .dt_compat = sun7i_board_dt_compat, 130 MACHINE_END
··· 12 13 #include <linux/clk-provider.h> 14 #include <linux/clocksource.h> 15 + #include <linux/delay.h> 16 + #include <linux/kernel.h> 17 + #include <linux/init.h> 18 + #include <linux/of_address.h> 19 + #include <linux/of_irq.h> 20 + #include <linux/of_platform.h> 21 + #include <linux/io.h> 22 + #include <linux/reboot.h> 23 24 #include <asm/mach/arch.h> 25 + #include <asm/mach/map.h> 26 + #include <asm/system_misc.h> 27 + 28 + #define SUN4I_WATCHDOG_CTRL_REG 0x00 29 + #define SUN4I_WATCHDOG_CTRL_RESTART BIT(0) 30 + #define SUN4I_WATCHDOG_MODE_REG 0x04 31 + #define SUN4I_WATCHDOG_MODE_ENABLE BIT(0) 32 + #define SUN4I_WATCHDOG_MODE_RESET_ENABLE BIT(1) 33 + 34 + #define SUN6I_WATCHDOG1_IRQ_REG 0x00 35 + #define SUN6I_WATCHDOG1_CTRL_REG 0x10 36 + #define SUN6I_WATCHDOG1_CTRL_RESTART BIT(0) 37 + #define SUN6I_WATCHDOG1_CONFIG_REG 0x14 38 + #define SUN6I_WATCHDOG1_CONFIG_RESTART BIT(0) 39 + #define SUN6I_WATCHDOG1_CONFIG_IRQ BIT(1) 40 + #define SUN6I_WATCHDOG1_MODE_REG 0x18 41 + #define SUN6I_WATCHDOG1_MODE_ENABLE BIT(0) 42 + 43 + static void __iomem *wdt_base; 44 + 45 + static void sun4i_restart(enum reboot_mode mode, const char *cmd) 46 + { 47 + if (!wdt_base) 48 + return; 49 + 50 + /* Enable timer and set reset bit in the watchdog */ 51 + writel(SUN4I_WATCHDOG_MODE_ENABLE | SUN4I_WATCHDOG_MODE_RESET_ENABLE, 52 + wdt_base + SUN4I_WATCHDOG_MODE_REG); 53 + 54 + /* 55 + * Restart the watchdog. The default (and lowest) interval 56 + * value for the watchdog is 0.5s. 57 + */ 58 + writel(SUN4I_WATCHDOG_CTRL_RESTART, wdt_base + SUN4I_WATCHDOG_CTRL_REG); 59 + 60 + while (1) { 61 + mdelay(5); 62 + writel(SUN4I_WATCHDOG_MODE_ENABLE | SUN4I_WATCHDOG_MODE_RESET_ENABLE, 63 + wdt_base + SUN4I_WATCHDOG_MODE_REG); 64 + } 65 + } 66 + 67 + static struct of_device_id sunxi_restart_ids[] = { 68 + { .compatible = "allwinner,sun4i-a10-wdt" }, 69 + { /*sentinel*/ } 70 + }; 71 + 72 + static void sunxi_setup_restart(void) 73 + { 74 + struct device_node *np; 75 + 76 + np = of_find_matching_node(NULL, sunxi_restart_ids); 77 + if (WARN(!np, "unable to setup watchdog restart")) 78 + return; 79 + 80 + wdt_base = of_iomap(np, 0); 81 + WARN(!wdt_base, "failed to map watchdog base address"); 82 + } 83 + 84 + static void __init sunxi_dt_init(void) 85 + { 86 + sunxi_setup_restart(); 87 + 88 + of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 89 + } 90 91 static const char * const sunxi_board_dt_compat[] = { 92 "allwinner,sun4i-a10", ··· 23 }; 24 25 DT_MACHINE_START(SUNXI_DT, "Allwinner A1X (Device Tree)") 26 + .init_machine = sunxi_dt_init, 27 .dt_compat = sunxi_board_dt_compat, 28 + .restart = sun4i_restart, 29 MACHINE_END 30 31 static const char * const sun6i_board_dt_compat[] = { ··· 51 }; 52 53 DT_MACHINE_START(SUN7I_DT, "Allwinner sun7i (A20) Family") 54 + .init_machine = sunxi_dt_init, 55 .dt_compat = sun7i_board_dt_compat, 56 + .restart = sun4i_restart, 57 MACHINE_END