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

+26 -8
MAINTAINERS
··· 943 943 S: Maintained 944 944 T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git 945 945 F: arch/arm/mach-imx/ 946 + F: arch/arm/mach-mxs/ 946 947 F: arch/arm/boot/dts/imx* 947 948 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 949 956 950 ARM/GLOMATION GESBC9312SX MACHINE SUPPORT 957 951 M: Lennert Buytenhek <kernel@wantstofly.org> ··· 1046 1052 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1047 1053 S: Maintained 1048 1054 F: arch/arm/mach-keystone/ 1049 - F: drivers/clk/keystone/ 1050 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* 1051 1081 1052 1082 ARM/LOGICPD PXA270 MACHINE SUPPORT 1053 1083 M: Lennert Buytenhek <kernel@wantstofly.org>
+4
arch/arm/boot/dts/am43x-epos-evm.dts
··· 319 319 phy-mode = "rmii"; 320 320 }; 321 321 322 + &phy_sel { 323 + rmii-clock-ext; 324 + }; 325 + 322 326 &i2c0 { 323 327 status = "okay"; 324 328 pinctrl-names = "default";
+11 -1
arch/arm/boot/dts/dra7.dtsi
··· 773 773 clocks = <&qspi_gfclk_div>; 774 774 clock-names = "fck"; 775 775 num-cs = <4>; 776 - interrupts = <0 343 0x4>; 777 776 status = "disabled"; 778 777 }; 779 778 ··· 981 982 gpmc,num-waitpins = <2>; 982 983 #address-cells = <2>; 983 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"; 984 996 status = "disabled"; 985 997 }; 986 998 };
+8 -8
arch/arm/boot/dts/dra7xx-clocks.dtsi
··· 10 10 &cm_core_aon_clocks { 11 11 atl_clkin0_ck: atl_clkin0_ck { 12 12 #clock-cells = <0>; 13 - compatible = "fixed-clock"; 14 - clock-frequency = <0>; 13 + compatible = "ti,dra7-atl-clock"; 14 + clocks = <&atl_gfclk_mux>; 15 15 }; 16 16 17 17 atl_clkin1_ck: atl_clkin1_ck { 18 18 #clock-cells = <0>; 19 - compatible = "fixed-clock"; 20 - clock-frequency = <0>; 19 + compatible = "ti,dra7-atl-clock"; 20 + clocks = <&atl_gfclk_mux>; 21 21 }; 22 22 23 23 atl_clkin2_ck: atl_clkin2_ck { 24 24 #clock-cells = <0>; 25 - compatible = "fixed-clock"; 26 - clock-frequency = <0>; 25 + compatible = "ti,dra7-atl-clock"; 26 + clocks = <&atl_gfclk_mux>; 27 27 }; 28 28 29 29 atl_clkin3_ck: atl_clkin3_ck { 30 30 #clock-cells = <0>; 31 - compatible = "fixed-clock"; 32 - clock-frequency = <0>; 31 + compatible = "ti,dra7-atl-clock"; 32 + clocks = <&atl_gfclk_mux>; 33 33 }; 34 34 35 35 hdmi_clkin_ck: hdmi_clkin_ck {
+6
arch/arm/boot/dts/omap3-beagle-xm.dts
··· 251 251 codec { 252 252 }; 253 253 }; 254 + 255 + twl_power: power { 256 + compatible = "ti,twl4030-power-beagleboard-xm", "ti,twl4030-power-idle-osc-off"; 257 + ti,use_poweroff; 258 + }; 254 259 }; 255 260 }; 256 261 ··· 306 301 }; 307 302 308 303 &uart3 { 304 + interrupts-extended = <&intc 74 &omap3_pmx_core OMAP3_UART3_RX>; 309 305 pinctrl-names = "default"; 310 306 pinctrl-0 = <&uart3_pins>; 311 307 };
+7
arch/arm/boot/dts/omap3-evm-common.dtsi
··· 50 50 gpios = <&twl_gpio 18 GPIO_ACTIVE_LOW>; 51 51 }; 52 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 + 53 60 &i2c2 { 54 61 clock-frequency = <400000>; 55 62 };
+5
arch/arm/boot/dts/omap3-n900.dts
··· 351 351 compatible = "ti,twl4030-audio"; 352 352 ti,enable-vibra = <1>; 353 353 }; 354 + 355 + twl_power: power { 356 + compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off"; 357 + ti,use_poweroff; 358 + }; 354 359 }; 355 360 356 361 &twl_keypad {
-1
arch/arm/boot/dts/omap5.dtsi
··· 45 45 46 46 operating-points = < 47 47 /* kHz uV */ 48 - 500000 880000 49 48 1000000 1060000 50 49 1500000 1250000 51 50 >;
+1 -1
arch/arm/configs/bcm_defconfig
··· 94 94 CONFIG_BACKLIGHT_PWM=y 95 95 # CONFIG_USB_SUPPORT is not set 96 96 CONFIG_MMC=y 97 - CONFIG_MMC_UNSAFE_RESUME=y 98 97 CONFIG_MMC_BLOCK_MINORS=32 99 98 CONFIG_MMC_TEST=y 100 99 CONFIG_MMC_SDHCI=y 100 + CONFIG_MMC_SDHCI_PLTFM=y 101 101 CONFIG_MMC_SDHCI_BCM_KONA=y 102 102 CONFIG_NEW_LEDS=y 103 103 CONFIG_LEDS_CLASS=y
+2 -1
arch/arm/configs/multi_v7_defconfig
··· 223 223 CONFIG_POWER_RESET_SUN6I=y 224 224 CONFIG_SENSORS_LM90=y 225 225 CONFIG_THERMAL=y 226 - CONFIG_DOVE_THERMAL=y 227 226 CONFIG_ARMADA_THERMAL=y 228 227 CONFIG_WATCHDOG=y 229 228 CONFIG_ORION_WATCHDOG=y 230 229 CONFIG_SUNXI_WATCHDOG=y 231 230 CONFIG_MFD_AS3722=y 231 + CONFIG_MFD_BCM590XX=y 232 232 CONFIG_MFD_CROS_EC=y 233 233 CONFIG_MFD_CROS_EC_SPI=y 234 234 CONFIG_MFD_MAX8907=y ··· 240 240 CONFIG_REGULATOR_VIRTUAL_CONSUMER=y 241 241 CONFIG_REGULATOR_AB8500=y 242 242 CONFIG_REGULATOR_AS3722=y 243 + CONFIG_REGULATOR_BCM590XX=y 243 244 CONFIG_REGULATOR_GPIO=y 244 245 CONFIG_REGULATOR_MAX8907=y 245 246 CONFIG_REGULATOR_PALMAS=y
+1 -1
arch/arm/mach-mvebu/Makefile
··· 7 7 obj-y += system-controller.o mvebu-soc-id.o 8 8 9 9 ifeq ($(CONFIG_MACH_MVEBU_V7),y) 10 - obj-y += cpu-reset.o board-v7.o coherency.o coherency_ll.o pmsu.o 10 + obj-y += cpu-reset.o board-v7.o coherency.o coherency_ll.o pmsu.o pmsu_ll.o 11 11 obj-$(CONFIG_SMP) += platsmp.o headsmp.o platsmp-a9.o headsmp-a9.o 12 12 obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o 13 13 endif
+19 -10
arch/arm/mach-mvebu/board-v7.c
··· 23 23 #include <linux/mbus.h> 24 24 #include <linux/signal.h> 25 25 #include <linux/slab.h> 26 + #include <linux/irqchip.h> 26 27 #include <asm/hardware/cache-l2x0.h> 27 28 #include <asm/mach/arch.h> 28 29 #include <asm/mach/map.h> ··· 72 71 return 1; 73 72 } 74 73 75 - static void __init mvebu_timer_and_clk_init(void) 74 + static void __init mvebu_init_irq(void) 76 75 { 77 - of_clk_init(NULL); 78 - clocksource_of_init(); 76 + irqchip_init(); 79 77 mvebu_scu_enable(); 80 78 coherency_init(); 81 79 BUG_ON(mvebu_mbus_dt_init(coherency_available())); 80 + } 82 81 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"); 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"); 86 91 } 87 92 88 93 static void __init i2c_quirk(void) ··· 176 169 { 177 170 if (of_machine_is_compatible("plathome,openblocks-ax3-4")) 178 171 i2c_quirk(); 179 - if (of_machine_is_compatible("marvell,a375-db")) 172 + if (of_machine_is_compatible("marvell,a375-db")) { 173 + external_abort_quirk(); 180 174 thermal_quirk(); 175 + } 181 176 182 177 of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 183 178 } ··· 194 185 .l2c_aux_mask = ~0, 195 186 .smp = smp_ops(armada_xp_smp_ops), 196 187 .init_machine = mvebu_dt_init, 197 - .init_time = mvebu_timer_and_clk_init, 188 + .init_irq = mvebu_init_irq, 198 189 .restart = mvebu_restart, 199 190 .dt_compat = armada_370_xp_dt_compat, 200 191 MACHINE_END ··· 207 198 DT_MACHINE_START(ARMADA_375_DT, "Marvell Armada 375 (Device Tree)") 208 199 .l2c_aux_val = 0, 209 200 .l2c_aux_mask = ~0, 210 - .init_time = mvebu_timer_and_clk_init, 201 + .init_irq = mvebu_init_irq, 211 202 .init_machine = mvebu_dt_init, 212 203 .restart = mvebu_restart, 213 204 .dt_compat = armada_375_dt_compat, ··· 222 213 DT_MACHINE_START(ARMADA_38X_DT, "Marvell Armada 380/385 (Device Tree)") 223 214 .l2c_aux_val = 0, 224 215 .l2c_aux_mask = ~0, 225 - .init_time = mvebu_timer_and_clk_init, 216 + .init_irq = mvebu_init_irq, 226 217 .restart = mvebu_restart, 227 218 .dt_compat = armada_38x_dt_compat, 228 219 MACHINE_END
+2 -7
arch/arm/mach-mvebu/pmsu.c
··· 66 66 extern void ll_disable_coherency(void); 67 67 extern void ll_enable_coherency(void); 68 68 69 + extern void armada_370_xp_cpu_resume(void); 70 + 69 71 static struct platform_device armada_xp_cpuidle_device = { 70 72 .name = "cpuidle-armada-370-xp", 71 73 }; ··· 140 138 reg = readl(pmsu_mp_base + L2C_NFABRIC_PM_CTL); 141 139 reg |= L2C_NFABRIC_PM_CTL_PWR_DOWN; 142 140 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 141 } 151 142 152 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 110 obj-$(CONFIG_ARCH_OMAP2) += prm2xxx_3xxx.o prm2xxx.o cm2xxx.o 111 111 obj-$(CONFIG_ARCH_OMAP3) += prm2xxx_3xxx.o prm3xxx.o cm3xxx.o 112 112 obj-$(CONFIG_ARCH_OMAP3) += vc3xxx_data.o vp3xxx_data.o 113 - obj-$(CONFIG_SOC_AM33XX) += prm33xx.o cm33xx.o 114 113 omap-prcm-4-5-common = cminst44xx.o cm44xx.o prm44xx.o \ 115 114 prcm_mpu44xx.o prminst44xx.o \ 116 115 vc44xx_data.o vp44xx_data.o 117 116 obj-$(CONFIG_ARCH_OMAP4) += $(omap-prcm-4-5-common) 118 117 obj-$(CONFIG_SOC_OMAP5) += $(omap-prcm-4-5-common) 119 118 obj-$(CONFIG_SOC_DRA7XX) += $(omap-prcm-4-5-common) 120 - obj-$(CONFIG_SOC_AM43XX) += $(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) 121 123 122 124 # OMAP voltage domains 123 125 voltagedomain-common := voltage.o vc.o vp.o
+1 -1
arch/arm/mach-omap2/cm33xx.h
··· 380 380 void am33xx_cm_clkdm_force_sleep(u16 inst, u16 cdoffs); 381 381 void am33xx_cm_clkdm_force_wakeup(u16 inst, u16 cdoffs); 382 382 383 - #ifdef CONFIG_SOC_AM33XX 383 + #if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX) 384 384 extern int am33xx_cm_wait_module_idle(u16 inst, s16 cdoffs, 385 385 u16 clkctrl_offs); 386 386 extern void am33xx_cm_module_enable(u8 mode, u16 inst, s16 cdoffs,
-1
arch/arm/mach-omap2/common.h
··· 248 248 } 249 249 #endif 250 250 251 - extern void __init gic_init_irq(void); 252 251 extern void gic_dist_disable(void); 253 252 extern void gic_dist_enable(void); 254 253 extern bool gic_dist_disabled(void);
+12
arch/arm/mach-omap2/id.c
··· 649 649 } 650 650 break; 651 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 + 652 664 default: 653 665 /* Unknown default to latest silicon rev as default*/ 654 666 pr_warn("%s: unknown idcode=0x%08x (hawkeye=0x%08x,rev=0x%d)\n",
+4 -2
arch/arm/mach-omap2/mux.c
··· 183 183 m0_entry = mux->muxnames[0]; 184 184 185 185 /* First check for full name in mode0.muxmode format */ 186 - if (mode0_len && strncmp(muxname, m0_entry, mode0_len)) 187 - continue; 186 + if (mode0_len) 187 + if (strncmp(muxname, m0_entry, mode0_len) || 188 + (strlen(m0_entry) != mode0_len)) 189 + continue; 188 190 189 191 /* Then check for muxmode only */ 190 192 for (i = 0; i < OMAP_MUX_NR_MODES; i++) {
-20
arch/arm/mach-omap2/omap4-common.c
··· 102 102 {} 103 103 #endif 104 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 105 void gic_dist_disable(void) 126 106 { 127 107 if (gic_dist_base_addr)
+3 -3
arch/arm/mach-omap2/omap_hwmod.c
··· 4251 4251 soc_ops.enable_module = _omap4_enable_module; 4252 4252 soc_ops.disable_module = _omap4_disable_module; 4253 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; 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 4257 soc_ops.init_clkdm = _init_clkdm; 4258 4258 } else if (soc_is_am33xx()) { 4259 4259 soc_ops.enable_module = _am33xx_enable_module;
+73
arch/arm/mach-omap2/omap_hwmod_54xx_data.c
··· 2020 2020 }, 2021 2021 }; 2022 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 + }; 2023 2094 2024 2095 /* 2025 2096 * Interfaces ··· 2836 2765 &omap54xx_l4_cfg__usb_tll_hs, 2837 2766 &omap54xx_l4_cfg__usb_otg_ss, 2838 2767 &omap54xx_l4_wkup__wd_timer2, 2768 + &omap54xx_l4_cfg__ocp2scp3, 2769 + &omap54xx_l4_cfg__sata, 2839 2770 NULL, 2840 2771 }; 2841 2772
+1
arch/arm/mach-omap2/soc.h
··· 462 462 #define DRA7XX_CLASS 0x07000000 463 463 #define DRA752_REV_ES1_0 (DRA7XX_CLASS | (0x52 << 16) | (0x10 << 8)) 464 464 #define DRA752_REV_ES1_1 (DRA7XX_CLASS | (0x52 << 16) | (0x11 << 8)) 465 + #define DRA722_REV_ES1_0 (DRA7XX_CLASS | (0x22 << 16) | (0x10 << 8)) 465 466 466 467 void omap2xxx_check_revision(void); 467 468 void omap3xxx_check_revision(void);
+77
arch/arm/mach-sunxi/sunxi.c
··· 12 12 13 13 #include <linux/clk-provider.h> 14 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> 15 23 16 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 + } 17 90 18 91 static const char * const sunxi_board_dt_compat[] = { 19 92 "allwinner,sun4i-a10", ··· 96 23 }; 97 24 98 25 DT_MACHINE_START(SUNXI_DT, "Allwinner A1X (Device Tree)") 26 + .init_machine = sunxi_dt_init, 99 27 .dt_compat = sunxi_board_dt_compat, 28 + .restart = sun4i_restart, 100 29 MACHINE_END 101 30 102 31 static const char * const sun6i_board_dt_compat[] = { ··· 126 51 }; 127 52 128 53 DT_MACHINE_START(SUN7I_DT, "Allwinner sun7i (A20) Family") 54 + .init_machine = sunxi_dt_init, 129 55 .dt_compat = sun7i_board_dt_compat, 56 + .restart = sun4i_restart, 130 57 MACHINE_END