Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

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:
"Another week, another batch of fixes.

Again, OMAP regressions due to move to DT is the bulk of the changes
here, but this should be the last of it for 3.13. There are also a
handful of OMAP hwmod changes (power management, reset handling) for
USB on OMAP3 that fixes some longish-standing bugs around USB resets.

There are a couple of other changes that also add up line count a bit:
One is a long-standing bug with the keyboard layout on one of the PXA
platforms. The other is a fix for highbank that moves their
power-off/reset button handling to be done in-kernel since relying on
userspace to handle it was fragile and awkward"

* tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
ARM: sun6i: dt: Fix interrupt trigger types
ARM: sun7i: dt: Fix interrupt trigger types
MAINTAINERS: merge IMX6 entry into IMX
ARM: tegra: add missing break to fuse initialization code
ARM: pxa: prevent PXA270 occasional reboot freezes
ARM: pxa: tosa: fix keys mapping
ARM: OMAP2+: omap_device: add fail hook for runtime_pm when bad data is detected
ARM: OMAP2+: hwmod: Fix usage of invalid iclk / oclk when clock node is not present
ARM: OMAP3: hwmod data: Don't prevent RESET of USB Host module
ARM: OMAP2+: hwmod: Fix SOFTRESET logic
ARM: OMAP4+: hwmod data: Don't prevent RESET of USB Host module
ARM: dts: Fix booting for secure omaps
ARM: OMAP2+: Fix the machine entry for am3517
ARM: dts: Fix missing entries for am3517
ARM: OMAP2+: Fix overwriting hwmod data with data from device tree
ARM: davinci: Fix McASP mem resource names
ARM: highbank: handle soft poweroff and reset key events
ARM: davinci: fix number of resources passed to davinci_gpio_register()
gpio: davinci: fix check for unbanked gpio

+410 -159
+4 -9
MAINTAINERS
··· 893 893 F: arch/arm/mach-footbridge/ 894 894 895 895 ARM/FREESCALE IMX / MXC ARM ARCHITECTURE 896 + M: Shawn Guo <shawn.guo@linaro.org> 896 897 M: Sascha Hauer <kernel@pengutronix.de> 897 898 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 898 899 S: Maintained 899 - T: git git://git.pengutronix.de/git/imx/linux-2.6.git 900 - F: arch/arm/mach-imx/ 901 - F: arch/arm/configs/imx*_defconfig 902 - 903 - ARM/FREESCALE IMX6 904 - M: Shawn Guo <shawn.guo@linaro.org> 905 - L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 906 - S: Maintained 907 900 T: git git://git.linaro.org/people/shawnguo/linux-2.6.git 908 - F: arch/arm/mach-imx/*imx6* 901 + F: arch/arm/mach-imx/ 902 + F: arch/arm/boot/dts/imx* 903 + F: arch/arm/configs/imx*_defconfig 909 904 910 905 ARM/FREESCALE MXS ARM ARCHITECTURE 911 906 M: Shawn Guo <shawn.guo@linaro.org>
+3 -3
arch/arm/boot/dts/am3517-evm.dts
··· 7 7 */ 8 8 /dts-v1/; 9 9 10 - #include "omap34xx.dtsi" 10 + #include "am3517.dtsi" 11 11 12 12 / { 13 - model = "TI AM3517 EVM (AM3517/05)"; 14 - compatible = "ti,am3517-evm", "ti,omap3"; 13 + model = "TI AM3517 EVM (AM3517/05 TMDSEVM3517)"; 14 + compatible = "ti,am3517-evm", "ti,am3517", "ti,omap3"; 15 15 16 16 memory { 17 17 device_type = "memory";
+63
arch/arm/boot/dts/am3517.dtsi
··· 1 + /* 2 + * Device Tree Source for am3517 SoC 3 + * 4 + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ 5 + * 6 + * This file is licensed under the terms of the GNU General Public License 7 + * version 2. This program is licensed "as is" without any warranty of any 8 + * kind, whether express or implied. 9 + */ 10 + 11 + #include "omap3.dtsi" 12 + 13 + / { 14 + aliases { 15 + serial3 = &uart4; 16 + }; 17 + 18 + ocp { 19 + am35x_otg_hs: am35x_otg_hs@5c040000 { 20 + compatible = "ti,omap3-musb"; 21 + ti,hwmods = "am35x_otg_hs"; 22 + status = "disabled"; 23 + reg = <0x5c040000 0x1000>; 24 + interrupts = <71>; 25 + interrupt-names = "mc"; 26 + }; 27 + 28 + davinci_emac: ethernet@0x5c000000 { 29 + compatible = "ti,am3517-emac"; 30 + ti,hwmods = "davinci_emac"; 31 + status = "disabled"; 32 + reg = <0x5c000000 0x30000>; 33 + interrupts = <67 68 69 70>; 34 + ti,davinci-ctrl-reg-offset = <0x10000>; 35 + ti,davinci-ctrl-mod-reg-offset = <0>; 36 + ti,davinci-ctrl-ram-offset = <0x20000>; 37 + ti,davinci-ctrl-ram-size = <0x2000>; 38 + ti,davinci-rmii-en = /bits/ 8 <1>; 39 + local-mac-address = [ 00 00 00 00 00 00 ]; 40 + }; 41 + 42 + davinci_mdio: ethernet@0x5c030000 { 43 + compatible = "ti,davinci_mdio"; 44 + ti,hwmods = "davinci_mdio"; 45 + status = "disabled"; 46 + reg = <0x5c030000 0x1000>; 47 + bus_freq = <1000000>; 48 + #address-cells = <1>; 49 + #size-cells = <0>; 50 + }; 51 + 52 + uart4: serial@4809e000 { 53 + compatible = "ti,omap3-uart"; 54 + ti,hwmods = "uart4"; 55 + status = "disabled"; 56 + reg = <0x4809e000 0x400>; 57 + interrupts = <84>; 58 + dmas = <&sdma 55 &sdma 54>; 59 + dma-names = "tx", "rx"; 60 + clock-frequency = <48000000>; 61 + }; 62 + }; 63 + };
+1 -1
arch/arm/boot/dts/omap3-n900.dts
··· 9 9 10 10 /dts-v1/; 11 11 12 - #include "omap34xx.dtsi" 12 + #include "omap34xx-hs.dtsi" 13 13 14 14 / { 15 15 model = "Nokia N900";
+1 -1
arch/arm/boot/dts/omap3-n950-n9.dtsi
··· 8 8 * published by the Free Software Foundation. 9 9 */ 10 10 11 - #include "omap36xx.dtsi" 11 + #include "omap36xx-hs.dtsi" 12 12 13 13 / { 14 14 cpus {
+16
arch/arm/boot/dts/omap34xx-hs.dtsi
··· 1 + /* Disabled modules for secure omaps */ 2 + 3 + #include "omap34xx.dtsi" 4 + 5 + /* Secure omaps have some devices inaccessible depending on the firmware */ 6 + &aes { 7 + status = "disabled"; 8 + }; 9 + 10 + &sham { 11 + status = "disabled"; 12 + }; 13 + 14 + &timer12 { 15 + status = "disabled"; 16 + };
+16
arch/arm/boot/dts/omap36xx-hs.dtsi
··· 1 + /* Disabled modules for secure omaps */ 2 + 3 + #include "omap36xx.dtsi" 4 + 5 + /* Secure omaps have some devices inaccessible depending on the firmware */ 6 + &aes { 7 + status = "disabled"; 8 + }; 9 + 10 + &sham { 11 + status = "disabled"; 12 + }; 13 + 14 + &timer12 { 15 + status = "disabled"; 16 + };
+15 -12
arch/arm/boot/dts/sun6i-a31.dtsi
··· 193 193 pio: pinctrl@01c20800 { 194 194 compatible = "allwinner,sun6i-a31-pinctrl"; 195 195 reg = <0x01c20800 0x400>; 196 - interrupts = <0 11 1>, <0 15 1>, <0 16 1>, <0 17 1>; 196 + interrupts = <0 11 4>, 197 + <0 15 4>, 198 + <0 16 4>, 199 + <0 17 4>; 197 200 clocks = <&apb1_gates 5>; 198 201 gpio-controller; 199 202 interrupt-controller; ··· 215 212 timer@01c20c00 { 216 213 compatible = "allwinner,sun4i-timer"; 217 214 reg = <0x01c20c00 0xa0>; 218 - interrupts = <0 18 1>, 219 - <0 19 1>, 220 - <0 20 1>, 221 - <0 21 1>, 222 - <0 22 1>; 215 + interrupts = <0 18 4>, 216 + <0 19 4>, 217 + <0 20 4>, 218 + <0 21 4>, 219 + <0 22 4>; 223 220 clocks = <&osc24M>; 224 221 }; 225 222 ··· 231 228 uart0: serial@01c28000 { 232 229 compatible = "snps,dw-apb-uart"; 233 230 reg = <0x01c28000 0x400>; 234 - interrupts = <0 0 1>; 231 + interrupts = <0 0 4>; 235 232 reg-shift = <2>; 236 233 reg-io-width = <4>; 237 234 clocks = <&apb2_gates 16>; ··· 241 238 uart1: serial@01c28400 { 242 239 compatible = "snps,dw-apb-uart"; 243 240 reg = <0x01c28400 0x400>; 244 - interrupts = <0 1 1>; 241 + interrupts = <0 1 4>; 245 242 reg-shift = <2>; 246 243 reg-io-width = <4>; 247 244 clocks = <&apb2_gates 17>; ··· 251 248 uart2: serial@01c28800 { 252 249 compatible = "snps,dw-apb-uart"; 253 250 reg = <0x01c28800 0x400>; 254 - interrupts = <0 2 1>; 251 + interrupts = <0 2 4>; 255 252 reg-shift = <2>; 256 253 reg-io-width = <4>; 257 254 clocks = <&apb2_gates 18>; ··· 261 258 uart3: serial@01c28c00 { 262 259 compatible = "snps,dw-apb-uart"; 263 260 reg = <0x01c28c00 0x400>; 264 - interrupts = <0 3 1>; 261 + interrupts = <0 3 4>; 265 262 reg-shift = <2>; 266 263 reg-io-width = <4>; 267 264 clocks = <&apb2_gates 19>; ··· 271 268 uart4: serial@01c29000 { 272 269 compatible = "snps,dw-apb-uart"; 273 270 reg = <0x01c29000 0x400>; 274 - interrupts = <0 4 1>; 271 + interrupts = <0 4 4>; 275 272 reg-shift = <2>; 276 273 reg-io-width = <4>; 277 274 clocks = <&apb2_gates 20>; ··· 281 278 uart5: serial@01c29400 { 282 279 compatible = "snps,dw-apb-uart"; 283 280 reg = <0x01c29400 0x400>; 284 - interrupts = <0 5 1>; 281 + interrupts = <0 5 4>; 285 282 reg-shift = <2>; 286 283 reg-io-width = <4>; 287 284 clocks = <&apb2_gates 21>;
+21 -21
arch/arm/boot/dts/sun7i-a20.dtsi
··· 170 170 emac: ethernet@01c0b000 { 171 171 compatible = "allwinner,sun4i-emac"; 172 172 reg = <0x01c0b000 0x1000>; 173 - interrupts = <0 55 1>; 173 + interrupts = <0 55 4>; 174 174 clocks = <&ahb_gates 17>; 175 175 status = "disabled"; 176 176 }; ··· 186 186 pio: pinctrl@01c20800 { 187 187 compatible = "allwinner,sun7i-a20-pinctrl"; 188 188 reg = <0x01c20800 0x400>; 189 - interrupts = <0 28 1>; 189 + interrupts = <0 28 4>; 190 190 clocks = <&apb0_gates 5>; 191 191 gpio-controller; 192 192 interrupt-controller; ··· 251 251 timer@01c20c00 { 252 252 compatible = "allwinner,sun4i-timer"; 253 253 reg = <0x01c20c00 0x90>; 254 - interrupts = <0 22 1>, 255 - <0 23 1>, 256 - <0 24 1>, 257 - <0 25 1>, 258 - <0 67 1>, 259 - <0 68 1>; 254 + interrupts = <0 22 4>, 255 + <0 23 4>, 256 + <0 24 4>, 257 + <0 25 4>, 258 + <0 67 4>, 259 + <0 68 4>; 260 260 clocks = <&osc24M>; 261 261 }; 262 262 ··· 273 273 uart0: serial@01c28000 { 274 274 compatible = "snps,dw-apb-uart"; 275 275 reg = <0x01c28000 0x400>; 276 - interrupts = <0 1 1>; 276 + interrupts = <0 1 4>; 277 277 reg-shift = <2>; 278 278 reg-io-width = <4>; 279 279 clocks = <&apb1_gates 16>; ··· 283 283 uart1: serial@01c28400 { 284 284 compatible = "snps,dw-apb-uart"; 285 285 reg = <0x01c28400 0x400>; 286 - interrupts = <0 2 1>; 286 + interrupts = <0 2 4>; 287 287 reg-shift = <2>; 288 288 reg-io-width = <4>; 289 289 clocks = <&apb1_gates 17>; ··· 293 293 uart2: serial@01c28800 { 294 294 compatible = "snps,dw-apb-uart"; 295 295 reg = <0x01c28800 0x400>; 296 - interrupts = <0 3 1>; 296 + interrupts = <0 3 4>; 297 297 reg-shift = <2>; 298 298 reg-io-width = <4>; 299 299 clocks = <&apb1_gates 18>; ··· 303 303 uart3: serial@01c28c00 { 304 304 compatible = "snps,dw-apb-uart"; 305 305 reg = <0x01c28c00 0x400>; 306 - interrupts = <0 4 1>; 306 + interrupts = <0 4 4>; 307 307 reg-shift = <2>; 308 308 reg-io-width = <4>; 309 309 clocks = <&apb1_gates 19>; ··· 313 313 uart4: serial@01c29000 { 314 314 compatible = "snps,dw-apb-uart"; 315 315 reg = <0x01c29000 0x400>; 316 - interrupts = <0 17 1>; 316 + interrupts = <0 17 4>; 317 317 reg-shift = <2>; 318 318 reg-io-width = <4>; 319 319 clocks = <&apb1_gates 20>; ··· 323 323 uart5: serial@01c29400 { 324 324 compatible = "snps,dw-apb-uart"; 325 325 reg = <0x01c29400 0x400>; 326 - interrupts = <0 18 1>; 326 + interrupts = <0 18 4>; 327 327 reg-shift = <2>; 328 328 reg-io-width = <4>; 329 329 clocks = <&apb1_gates 21>; ··· 333 333 uart6: serial@01c29800 { 334 334 compatible = "snps,dw-apb-uart"; 335 335 reg = <0x01c29800 0x400>; 336 - interrupts = <0 19 1>; 336 + interrupts = <0 19 4>; 337 337 reg-shift = <2>; 338 338 reg-io-width = <4>; 339 339 clocks = <&apb1_gates 22>; ··· 343 343 uart7: serial@01c29c00 { 344 344 compatible = "snps,dw-apb-uart"; 345 345 reg = <0x01c29c00 0x400>; 346 - interrupts = <0 20 1>; 346 + interrupts = <0 20 4>; 347 347 reg-shift = <2>; 348 348 reg-io-width = <4>; 349 349 clocks = <&apb1_gates 23>; ··· 353 353 i2c0: i2c@01c2ac00 { 354 354 compatible = "allwinner,sun4i-i2c"; 355 355 reg = <0x01c2ac00 0x400>; 356 - interrupts = <0 7 1>; 356 + interrupts = <0 7 4>; 357 357 clocks = <&apb1_gates 0>; 358 358 clock-frequency = <100000>; 359 359 status = "disabled"; ··· 362 362 i2c1: i2c@01c2b000 { 363 363 compatible = "allwinner,sun4i-i2c"; 364 364 reg = <0x01c2b000 0x400>; 365 - interrupts = <0 8 1>; 365 + interrupts = <0 8 4>; 366 366 clocks = <&apb1_gates 1>; 367 367 clock-frequency = <100000>; 368 368 status = "disabled"; ··· 371 371 i2c2: i2c@01c2b400 { 372 372 compatible = "allwinner,sun4i-i2c"; 373 373 reg = <0x01c2b400 0x400>; 374 - interrupts = <0 9 1>; 374 + interrupts = <0 9 4>; 375 375 clocks = <&apb1_gates 2>; 376 376 clock-frequency = <100000>; 377 377 status = "disabled"; ··· 380 380 i2c3: i2c@01c2b800 { 381 381 compatible = "allwinner,sun4i-i2c"; 382 382 reg = <0x01c2b800 0x400>; 383 - interrupts = <0 88 1>; 383 + interrupts = <0 88 4>; 384 384 clocks = <&apb1_gates 3>; 385 385 clock-frequency = <100000>; 386 386 status = "disabled"; ··· 389 389 i2c4: i2c@01c2bc00 { 390 390 compatible = "allwinner,sun4i-i2c"; 391 391 reg = <0x01c2bc00 0x400>; 392 - interrupts = <0 89 1>; 392 + interrupts = <0 89 4>; 393 393 clocks = <&apb1_gates 15>; 394 394 clock-frequency = <100000>; 395 395 status = "disabled";
+2 -2
arch/arm/mach-davinci/devices-da8xx.c
··· 487 487 488 488 static struct resource da830_mcasp1_resources[] = { 489 489 { 490 - .name = "mcasp1", 490 + .name = "mpu", 491 491 .start = DAVINCI_DA830_MCASP1_REG_BASE, 492 492 .end = DAVINCI_DA830_MCASP1_REG_BASE + (SZ_1K * 12) - 1, 493 493 .flags = IORESOURCE_MEM, ··· 515 515 516 516 static struct resource da850_mcasp_resources[] = { 517 517 { 518 - .name = "mcasp", 518 + .name = "mpu", 519 519 .start = DAVINCI_DA8XX_MCASP0_REG_BASE, 520 520 .end = DAVINCI_DA8XX_MCASP0_REG_BASE + (SZ_1K * 12) - 1, 521 521 .flags = IORESOURCE_MEM,
+2 -1
arch/arm/mach-davinci/dm355.c
··· 641 641 642 642 static struct resource dm355_asp1_resources[] = { 643 643 { 644 + .name = "mpu", 644 645 .start = DAVINCI_ASP1_BASE, 645 646 .end = DAVINCI_ASP1_BASE + SZ_8K - 1, 646 647 .flags = IORESOURCE_MEM, ··· 907 906 int __init dm355_gpio_register(void) 908 907 { 909 908 return davinci_gpio_register(dm355_gpio_resources, 910 - sizeof(dm355_gpio_resources), 909 + ARRAY_SIZE(dm355_gpio_resources), 911 910 &dm355_gpio_platform_data); 912 911 } 913 912 /*----------------------------------------------------------------------*/
+2 -1
arch/arm/mach-davinci/dm365.c
··· 720 720 int __init dm365_gpio_register(void) 721 721 { 722 722 return davinci_gpio_register(dm365_gpio_resources, 723 - sizeof(dm365_gpio_resources), 723 + ARRAY_SIZE(dm365_gpio_resources), 724 724 &dm365_gpio_platform_data); 725 725 } 726 726 ··· 942 942 943 943 static struct resource dm365_asp_resources[] = { 944 944 { 945 + .name = "mpu", 945 946 .start = DAVINCI_DM365_ASP0_BASE, 946 947 .end = DAVINCI_DM365_ASP0_BASE + SZ_8K - 1, 947 948 .flags = IORESOURCE_MEM,
+2 -1
arch/arm/mach-davinci/dm644x.c
··· 572 572 /* DM6446 EVM uses ASP0; line-out is a pair of RCA jacks */ 573 573 static struct resource dm644x_asp_resources[] = { 574 574 { 575 + .name = "mpu", 575 576 .start = DAVINCI_ASP0_BASE, 576 577 .end = DAVINCI_ASP0_BASE + SZ_8K - 1, 577 578 .flags = IORESOURCE_MEM, ··· 793 792 int __init dm644x_gpio_register(void) 794 793 { 795 794 return davinci_gpio_register(dm644_gpio_resources, 796 - sizeof(dm644_gpio_resources), 795 + ARRAY_SIZE(dm644_gpio_resources), 797 796 &dm644_gpio_platform_data); 798 797 } 799 798 /*----------------------------------------------------------------------*/
+3 -3
arch/arm/mach-davinci/dm646x.c
··· 621 621 622 622 static struct resource dm646x_mcasp0_resources[] = { 623 623 { 624 - .name = "mcasp0", 624 + .name = "mpu", 625 625 .start = DAVINCI_DM646X_MCASP0_REG_BASE, 626 626 .end = DAVINCI_DM646X_MCASP0_REG_BASE + (SZ_1K << 1) - 1, 627 627 .flags = IORESOURCE_MEM, ··· 641 641 642 642 static struct resource dm646x_mcasp1_resources[] = { 643 643 { 644 - .name = "mcasp1", 644 + .name = "mpu", 645 645 .start = DAVINCI_DM646X_MCASP1_REG_BASE, 646 646 .end = DAVINCI_DM646X_MCASP1_REG_BASE + (SZ_1K << 1) - 1, 647 647 .flags = IORESOURCE_MEM, ··· 769 769 int __init dm646x_gpio_register(void) 770 770 { 771 771 return davinci_gpio_register(dm646x_gpio_resources, 772 - sizeof(dm646x_gpio_resources), 772 + ARRAY_SIZE(dm646x_gpio_resources), 773 773 &dm646x_gpio_platform_data); 774 774 } 775 775 /*----------------------------------------------------------------------*/
+23
arch/arm/mach-highbank/highbank.c
··· 17 17 #include <linux/clkdev.h> 18 18 #include <linux/clocksource.h> 19 19 #include <linux/dma-mapping.h> 20 + #include <linux/input.h> 20 21 #include <linux/io.h> 21 22 #include <linux/irqchip.h> 23 + #include <linux/mailbox.h> 22 24 #include <linux/of.h> 23 25 #include <linux/of_irq.h> 24 26 #include <linux/of_platform.h> 25 27 #include <linux/of_address.h> 28 + #include <linux/reboot.h> 26 29 #include <linux/amba/bus.h> 27 30 #include <linux/platform_device.h> 28 31 ··· 133 130 .name = "cpuidle-calxeda", 134 131 }; 135 132 133 + static int hb_keys_notifier(struct notifier_block *nb, unsigned long event, void *data) 134 + { 135 + u32 key = *(u32 *)data; 136 + 137 + if (event != 0x1000) 138 + return 0; 139 + 140 + if (key == KEY_POWER) 141 + orderly_poweroff(false); 142 + else if (key == 0xffff) 143 + ctrl_alt_del(); 144 + 145 + return 0; 146 + } 147 + static struct notifier_block hb_keys_nb = { 148 + .notifier_call = hb_keys_notifier, 149 + }; 150 + 136 151 static void __init highbank_init(void) 137 152 { 138 153 struct device_node *np; ··· 165 144 166 145 bus_register_notifier(&platform_bus_type, &highbank_platform_nb); 167 146 bus_register_notifier(&amba_bustype, &highbank_amba_nb); 147 + 148 + pl320_ipc_register_notifier(&hb_keys_nb); 168 149 169 150 of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 170 151
+18
arch/arm/mach-omap2/board-generic.c
··· 131 131 .dt_compat = omap3_gp_boards_compat, 132 132 .restart = omap3xxx_restart, 133 133 MACHINE_END 134 + 135 + static const char *am3517_boards_compat[] __initdata = { 136 + "ti,am3517", 137 + NULL, 138 + }; 139 + 140 + DT_MACHINE_START(AM3517_DT, "Generic AM3517 (Flattened Device Tree)") 141 + .reserve = omap_reserve, 142 + .map_io = omap3_map_io, 143 + .init_early = am35xx_init_early, 144 + .init_irq = omap_intc_of_init, 145 + .handle_irq = omap3_intc_handle_irq, 146 + .init_machine = omap_generic_init, 147 + .init_late = omap3_init_late, 148 + .init_time = omap3_gptimer_timer_init, 149 + .dt_compat = am3517_boards_compat, 150 + .restart = omap3xxx_restart, 151 + MACHINE_END 134 152 #endif 135 153 136 154 #ifdef CONFIG_SOC_AM33XX
+24
arch/arm/mach-omap2/omap_device.c
··· 183 183 odbfd_exit1: 184 184 kfree(hwmods); 185 185 odbfd_exit: 186 + /* if data/we are at fault.. load up a fail handler */ 187 + if (ret) 188 + pdev->dev.pm_domain = &omap_device_fail_pm_domain; 189 + 186 190 return ret; 187 191 } 188 192 ··· 608 604 609 605 return pm_generic_runtime_resume(dev); 610 606 } 607 + 608 + static int _od_fail_runtime_suspend(struct device *dev) 609 + { 610 + dev_warn(dev, "%s: FIXME: missing hwmod/omap_dev info\n", __func__); 611 + return -ENODEV; 612 + } 613 + 614 + static int _od_fail_runtime_resume(struct device *dev) 615 + { 616 + dev_warn(dev, "%s: FIXME: missing hwmod/omap_dev info\n", __func__); 617 + return -ENODEV; 618 + } 619 + 611 620 #endif 612 621 613 622 #ifdef CONFIG_SUSPEND ··· 673 656 #define _od_suspend_noirq NULL 674 657 #define _od_resume_noirq NULL 675 658 #endif 659 + 660 + struct dev_pm_domain omap_device_fail_pm_domain = { 661 + .ops = { 662 + SET_RUNTIME_PM_OPS(_od_fail_runtime_suspend, 663 + _od_fail_runtime_resume, NULL) 664 + } 665 + }; 676 666 677 667 struct dev_pm_domain omap_device_pm_domain = { 678 668 .ops = {
+1
arch/arm/mach-omap2/omap_device.h
··· 29 29 #include "omap_hwmod.h" 30 30 31 31 extern struct dev_pm_domain omap_device_pm_domain; 32 + extern struct dev_pm_domain omap_device_fail_pm_domain; 32 33 33 34 /* omap_device._state values */ 34 35 #define OMAP_DEVICE_STATE_UNKNOWN 0
+122 -21
arch/arm/mach-omap2/omap_hwmod.c
··· 399 399 } 400 400 401 401 /** 402 - * _set_softreset: set OCP_SYSCONFIG.CLOCKACTIVITY bits in @v 402 + * _set_softreset: set OCP_SYSCONFIG.SOFTRESET bit in @v 403 403 * @oh: struct omap_hwmod * 404 404 * @v: pointer to register contents to modify 405 405 * ··· 422 422 softrst_mask = (0x1 << oh->class->sysc->sysc_fields->srst_shift); 423 423 424 424 *v |= softrst_mask; 425 + 426 + return 0; 427 + } 428 + 429 + /** 430 + * _clear_softreset: clear OCP_SYSCONFIG.SOFTRESET bit in @v 431 + * @oh: struct omap_hwmod * 432 + * @v: pointer to register contents to modify 433 + * 434 + * Clear the SOFTRESET bit in @v for hwmod @oh. Returns -EINVAL upon 435 + * error or 0 upon success. 436 + */ 437 + static int _clear_softreset(struct omap_hwmod *oh, u32 *v) 438 + { 439 + u32 softrst_mask; 440 + 441 + if (!oh->class->sysc || 442 + !(oh->class->sysc->sysc_flags & SYSC_HAS_SOFTRESET)) 443 + return -EINVAL; 444 + 445 + if (!oh->class->sysc->sysc_fields) { 446 + WARN(1, 447 + "omap_hwmod: %s: sysc_fields absent for sysconfig class\n", 448 + oh->name); 449 + return -EINVAL; 450 + } 451 + 452 + softrst_mask = (0x1 << oh->class->sysc->sysc_fields->srst_shift); 453 + 454 + *v &= ~softrst_mask; 425 455 426 456 return 0; 427 457 } ··· 815 785 pr_warning("omap_hwmod: %s: cannot clk_get interface_clk %s\n", 816 786 oh->name, os->clk); 817 787 ret = -EINVAL; 788 + continue; 818 789 } 819 790 os->_clk = c; 820 791 /* ··· 852 821 pr_warning("omap_hwmod: %s: cannot clk_get opt_clk %s\n", 853 822 oh->name, oc->clk); 854 823 ret = -EINVAL; 824 + continue; 855 825 } 856 826 oc->_clk = c; 857 827 /* ··· 1943 1911 ret = _set_softreset(oh, &v); 1944 1912 if (ret) 1945 1913 goto dis_opt_clks; 1914 + 1915 + _write_sysconfig(v, oh); 1916 + ret = _clear_softreset(oh, &v); 1917 + if (ret) 1918 + goto dis_opt_clks; 1919 + 1946 1920 _write_sysconfig(v, oh); 1947 1921 1948 1922 if (oh->class->sysc->srst_udelay) ··· 2364 2326 return 0; 2365 2327 } 2366 2328 2329 + static int of_dev_find_hwmod(struct device_node *np, 2330 + struct omap_hwmod *oh) 2331 + { 2332 + int count, i, res; 2333 + const char *p; 2334 + 2335 + count = of_property_count_strings(np, "ti,hwmods"); 2336 + if (count < 1) 2337 + return -ENODEV; 2338 + 2339 + for (i = 0; i < count; i++) { 2340 + res = of_property_read_string_index(np, "ti,hwmods", 2341 + i, &p); 2342 + if (res) 2343 + continue; 2344 + if (!strcmp(p, oh->name)) { 2345 + pr_debug("omap_hwmod: dt %s[%i] uses hwmod %s\n", 2346 + np->name, i, oh->name); 2347 + return i; 2348 + } 2349 + } 2350 + 2351 + return -ENODEV; 2352 + } 2353 + 2367 2354 /** 2368 2355 * of_dev_hwmod_lookup - look up needed hwmod from dt blob 2369 2356 * @np: struct device_node * 2370 2357 * @oh: struct omap_hwmod * 2358 + * @index: index of the entry found 2359 + * @found: struct device_node * found or NULL 2371 2360 * 2372 2361 * Parse the dt blob and find out needed hwmod. Recursive function is 2373 2362 * implemented to take care hierarchical dt blob parsing. 2374 - * Return: The device node on success or NULL on failure. 2363 + * Return: Returns 0 on success, -ENODEV when not found. 2375 2364 */ 2376 - static struct device_node *of_dev_hwmod_lookup(struct device_node *np, 2377 - struct omap_hwmod *oh) 2365 + static int of_dev_hwmod_lookup(struct device_node *np, 2366 + struct omap_hwmod *oh, 2367 + int *index, 2368 + struct device_node **found) 2378 2369 { 2379 - struct device_node *np0 = NULL, *np1 = NULL; 2380 - const char *p; 2370 + struct device_node *np0 = NULL; 2371 + int res; 2372 + 2373 + res = of_dev_find_hwmod(np, oh); 2374 + if (res >= 0) { 2375 + *found = np; 2376 + *index = res; 2377 + return 0; 2378 + } 2381 2379 2382 2380 for_each_child_of_node(np, np0) { 2383 - if (of_find_property(np0, "ti,hwmods", NULL)) { 2384 - p = of_get_property(np0, "ti,hwmods", NULL); 2385 - if (!strcmp(p, oh->name)) 2386 - return np0; 2387 - np1 = of_dev_hwmod_lookup(np0, oh); 2388 - if (np1) 2389 - return np1; 2381 + struct device_node *fc; 2382 + int i; 2383 + 2384 + res = of_dev_hwmod_lookup(np0, oh, &i, &fc); 2385 + if (res == 0) { 2386 + *found = fc; 2387 + *index = i; 2388 + return 0; 2390 2389 } 2391 2390 } 2392 - return NULL; 2391 + 2392 + *found = NULL; 2393 + *index = 0; 2394 + 2395 + return -ENODEV; 2393 2396 } 2394 2397 2395 2398 /** 2396 2399 * _init_mpu_rt_base - populate the virtual address for a hwmod 2397 2400 * @oh: struct omap_hwmod * to locate the virtual address 2398 2401 * @data: (unused, caller should pass NULL) 2402 + * @index: index of the reg entry iospace in device tree 2399 2403 * @np: struct device_node * of the IP block's device node in the DT data 2400 2404 * 2401 2405 * Cache the virtual address used by the MPU to access this IP block's ··· 2448 2368 * -ENXIO on absent or invalid register target address space. 2449 2369 */ 2450 2370 static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data, 2451 - struct device_node *np) 2371 + int index, struct device_node *np) 2452 2372 { 2453 2373 struct omap_hwmod_addr_space *mem; 2454 2374 void __iomem *va_start = NULL; ··· 2470 2390 if (!np) 2471 2391 return -ENXIO; 2472 2392 2473 - va_start = of_iomap(np, oh->mpu_rt_idx); 2393 + va_start = of_iomap(np, index + oh->mpu_rt_idx); 2474 2394 } else { 2475 2395 va_start = ioremap(mem->pa_start, mem->pa_end - mem->pa_start); 2476 2396 } 2477 2397 2478 2398 if (!va_start) { 2479 - pr_err("omap_hwmod: %s: Could not ioremap\n", oh->name); 2399 + if (mem) 2400 + pr_err("omap_hwmod: %s: Could not ioremap\n", oh->name); 2401 + else 2402 + pr_err("omap_hwmod: %s: Missing dt reg%i for %s\n", 2403 + oh->name, index, np->full_name); 2480 2404 return -ENXIO; 2481 2405 } 2482 2406 ··· 2506 2422 */ 2507 2423 static int __init _init(struct omap_hwmod *oh, void *data) 2508 2424 { 2509 - int r; 2425 + int r, index; 2510 2426 struct device_node *np = NULL; 2511 2427 2512 2428 if (oh->_state != _HWMOD_STATE_REGISTERED) 2513 2429 return 0; 2514 2430 2515 - if (of_have_populated_dt()) 2516 - np = of_dev_hwmod_lookup(of_find_node_by_name(NULL, "ocp"), oh); 2431 + if (of_have_populated_dt()) { 2432 + struct device_node *bus; 2433 + 2434 + bus = of_find_node_by_name(NULL, "ocp"); 2435 + if (!bus) 2436 + return -ENODEV; 2437 + 2438 + r = of_dev_hwmod_lookup(bus, oh, &index, &np); 2439 + if (r) 2440 + pr_debug("omap_hwmod: %s missing dt data\n", oh->name); 2441 + else if (np && index) 2442 + pr_warn("omap_hwmod: %s using broken dt data from %s\n", 2443 + oh->name, np->name); 2444 + } 2517 2445 2518 2446 if (oh->class->sysc) { 2519 - r = _init_mpu_rt_base(oh, NULL, np); 2447 + r = _init_mpu_rt_base(oh, NULL, index, np); 2520 2448 if (r < 0) { 2521 2449 WARN(1, "omap_hwmod: %s: doesn't have mpu register target base\n", 2522 2450 oh->name); ··· 3261 3165 3262 3166 v = oh->_sysc_cache; 3263 3167 ret = _set_softreset(oh, &v); 3168 + if (ret) 3169 + goto error; 3170 + _write_sysconfig(v, oh); 3171 + 3172 + ret = _clear_softreset(oh, &v); 3264 3173 if (ret) 3265 3174 goto error; 3266 3175 _write_sysconfig(v, oh);
+3 -10
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
··· 1943 1943 .syss_offs = 0x0014, 1944 1944 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY | 1945 1945 SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP | 1946 - SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE), 1946 + SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | 1947 + SYSS_HAS_RESET_STATUS), 1947 1948 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 1948 1949 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART), 1949 1950 .sysc_fields = &omap_hwmod_sysc_type1, ··· 2022 2021 * hence HWMOD_SWSUP_MSTANDBY 2023 2022 */ 2024 2023 2025 - /* 2026 - * During system boot; If the hwmod framework resets the module 2027 - * the module will have smart idle settings; which can lead to deadlock 2028 - * (above Errata Id:i660); so, dont reset the module during boot; 2029 - * Use HWMOD_INIT_NO_RESET. 2030 - */ 2031 - 2032 - .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY | 2033 - HWMOD_INIT_NO_RESET, 2024 + .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, 2034 2025 }; 2035 2026 2036 2027 /*
+2 -10
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
··· 2937 2937 .sysc_offs = 0x0010, 2938 2938 .syss_offs = 0x0014, 2939 2939 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE | 2940 - SYSC_HAS_SOFTRESET), 2940 + SYSC_HAS_SOFTRESET | SYSC_HAS_RESET_STATUS), 2941 2941 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 2942 2942 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO | 2943 2943 MSTANDBY_SMART | MSTANDBY_SMART_WKUP), ··· 3001 3001 * hence HWMOD_SWSUP_MSTANDBY 3002 3002 */ 3003 3003 3004 - /* 3005 - * During system boot; If the hwmod framework resets the module 3006 - * the module will have smart idle settings; which can lead to deadlock 3007 - * (above Errata Id:i660); so, dont reset the module during boot; 3008 - * Use HWMOD_INIT_NO_RESET. 3009 - */ 3010 - 3011 - .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY | 3012 - HWMOD_INIT_NO_RESET, 3004 + .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, 3013 3005 }; 3014 3006 3015 3007 /*
+3 -10
arch/arm/mach-omap2/omap_hwmod_54xx_data.c
··· 1544 1544 .rev_offs = 0x0000, 1545 1545 .sysc_offs = 0x0010, 1546 1546 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS | 1547 - SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET), 1547 + SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | 1548 + SYSC_HAS_RESET_STATUS), 1548 1549 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 1549 1550 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO | 1550 1551 MSTANDBY_SMART | MSTANDBY_SMART_WKUP), ··· 1599 1598 * hence HWMOD_SWSUP_MSTANDBY 1600 1599 */ 1601 1600 1602 - /* 1603 - * During system boot; If the hwmod framework resets the module 1604 - * the module will have smart idle settings; which can lead to deadlock 1605 - * (above Errata Id:i660); so, dont reset the module during boot; 1606 - * Use HWMOD_INIT_NO_RESET. 1607 - */ 1608 - 1609 - .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY | 1610 - HWMOD_INIT_NO_RESET, 1601 + .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY, 1611 1602 .main_clk = "l3init_60m_fclk", 1612 1603 .prcm = { 1613 1604 .omap4 = {
+7 -1
arch/arm/mach-pxa/reset.c
··· 13 13 14 14 #include <mach/regs-ost.h> 15 15 #include <mach/reset.h> 16 + #include <mach/smemc.h> 16 17 17 18 unsigned int reset_status; 18 19 EXPORT_SYMBOL(reset_status); ··· 82 81 writel_relaxed(OSSR_M3, OSSR); 83 82 /* ... in 100 ms */ 84 83 writel_relaxed(readl_relaxed(OSCR) + 368640, OSMR3); 84 + /* 85 + * SDRAM hangs on watchdog reset on Marvell PXA270 (erratum 71) 86 + * we put SDRAM into self-refresh to prevent that 87 + */ 88 + while (1) 89 + writel_relaxed(MDREFR_SLFRSH, MDREFR); 85 90 } 86 91 87 92 void pxa_restart(enum reboot_mode mode, const char *cmd) ··· 111 104 break; 112 105 } 113 106 } 114 -
+51 -51
arch/arm/mach-pxa/tosa.c
··· 425 425 * Tosa Keyboard 426 426 */ 427 427 static const uint32_t tosakbd_keymap[] = { 428 - KEY(0, 2, KEY_W), 429 - KEY(0, 6, KEY_K), 430 - KEY(0, 7, KEY_BACKSPACE), 431 - KEY(0, 8, KEY_P), 432 - KEY(1, 1, KEY_Q), 433 - KEY(1, 2, KEY_E), 434 - KEY(1, 3, KEY_T), 435 - KEY(1, 4, KEY_Y), 436 - KEY(1, 6, KEY_O), 437 - KEY(1, 7, KEY_I), 438 - KEY(1, 8, KEY_COMMA), 439 - KEY(2, 1, KEY_A), 440 - KEY(2, 2, KEY_D), 441 - KEY(2, 3, KEY_G), 442 - KEY(2, 4, KEY_U), 443 - KEY(2, 6, KEY_L), 444 - KEY(2, 7, KEY_ENTER), 445 - KEY(2, 8, KEY_DOT), 446 - KEY(3, 1, KEY_Z), 447 - KEY(3, 2, KEY_C), 448 - KEY(3, 3, KEY_V), 449 - KEY(3, 4, KEY_J), 450 - KEY(3, 5, TOSA_KEY_ADDRESSBOOK), 451 - KEY(3, 6, TOSA_KEY_CANCEL), 452 - KEY(3, 7, TOSA_KEY_CENTER), 453 - KEY(3, 8, TOSA_KEY_OK), 454 - KEY(3, 9, KEY_LEFTSHIFT), 455 - KEY(4, 1, KEY_S), 456 - KEY(4, 2, KEY_R), 457 - KEY(4, 3, KEY_B), 458 - KEY(4, 4, KEY_N), 459 - KEY(4, 5, TOSA_KEY_CALENDAR), 460 - KEY(4, 6, TOSA_KEY_HOMEPAGE), 461 - KEY(4, 7, KEY_LEFTCTRL), 462 - KEY(4, 8, TOSA_KEY_LIGHT), 463 - KEY(4, 10, KEY_RIGHTSHIFT), 464 - KEY(5, 1, KEY_TAB), 465 - KEY(5, 2, KEY_SLASH), 466 - KEY(5, 3, KEY_H), 467 - KEY(5, 4, KEY_M), 468 - KEY(5, 5, TOSA_KEY_MENU), 469 - KEY(5, 7, KEY_UP), 470 - KEY(5, 11, TOSA_KEY_FN), 471 - KEY(6, 1, KEY_X), 472 - KEY(6, 2, KEY_F), 473 - KEY(6, 3, KEY_SPACE), 474 - KEY(6, 4, KEY_APOSTROPHE), 475 - KEY(6, 5, TOSA_KEY_MAIL), 476 - KEY(6, 6, KEY_LEFT), 477 - KEY(6, 7, KEY_DOWN), 478 - KEY(6, 8, KEY_RIGHT), 428 + KEY(0, 1, KEY_W), 429 + KEY(0, 5, KEY_K), 430 + KEY(0, 6, KEY_BACKSPACE), 431 + KEY(0, 7, KEY_P), 432 + KEY(1, 0, KEY_Q), 433 + KEY(1, 1, KEY_E), 434 + KEY(1, 2, KEY_T), 435 + KEY(1, 3, KEY_Y), 436 + KEY(1, 5, KEY_O), 437 + KEY(1, 6, KEY_I), 438 + KEY(1, 7, KEY_COMMA), 439 + KEY(2, 0, KEY_A), 440 + KEY(2, 1, KEY_D), 441 + KEY(2, 2, KEY_G), 442 + KEY(2, 3, KEY_U), 443 + KEY(2, 5, KEY_L), 444 + KEY(2, 6, KEY_ENTER), 445 + KEY(2, 7, KEY_DOT), 446 + KEY(3, 0, KEY_Z), 447 + KEY(3, 1, KEY_C), 448 + KEY(3, 2, KEY_V), 449 + KEY(3, 3, KEY_J), 450 + KEY(3, 4, TOSA_KEY_ADDRESSBOOK), 451 + KEY(3, 5, TOSA_KEY_CANCEL), 452 + KEY(3, 6, TOSA_KEY_CENTER), 453 + KEY(3, 7, TOSA_KEY_OK), 454 + KEY(3, 8, KEY_LEFTSHIFT), 455 + KEY(4, 0, KEY_S), 456 + KEY(4, 1, KEY_R), 457 + KEY(4, 2, KEY_B), 458 + KEY(4, 3, KEY_N), 459 + KEY(4, 4, TOSA_KEY_CALENDAR), 460 + KEY(4, 5, TOSA_KEY_HOMEPAGE), 461 + KEY(4, 6, KEY_LEFTCTRL), 462 + KEY(4, 7, TOSA_KEY_LIGHT), 463 + KEY(4, 9, KEY_RIGHTSHIFT), 464 + KEY(5, 0, KEY_TAB), 465 + KEY(5, 1, KEY_SLASH), 466 + KEY(5, 2, KEY_H), 467 + KEY(5, 3, KEY_M), 468 + KEY(5, 4, TOSA_KEY_MENU), 469 + KEY(5, 6, KEY_UP), 470 + KEY(5, 10, TOSA_KEY_FN), 471 + KEY(6, 0, KEY_X), 472 + KEY(6, 1, KEY_F), 473 + KEY(6, 2, KEY_SPACE), 474 + KEY(6, 3, KEY_APOSTROPHE), 475 + KEY(6, 4, TOSA_KEY_MAIL), 476 + KEY(6, 5, KEY_LEFT), 477 + KEY(6, 6, KEY_DOWN), 478 + KEY(6, 7, KEY_RIGHT), 479 479 }; 480 480 481 481 static struct matrix_keymap_data tosakbd_keymap_data = {
+2
arch/arm/mach-tegra/fuse.c
··· 198 198 switch (tegra_chip_id) { 199 199 case TEGRA20: 200 200 tegra20_fuse_init_randomness(); 201 + break; 201 202 case TEGRA30: 202 203 case TEGRA114: 203 204 default: 204 205 tegra30_fuse_init_randomness(); 206 + break; 205 207 } 206 208 207 209 pr_info("Tegra Revision: %s SKU: %d CPU Process: %d Core Process: %d\n",
+3 -1
drivers/gpio/gpio-davinci.c
··· 327 327 * NOTE: we assume for now that only irqs in the first gpio_chip 328 328 * can provide direct-mapped IRQs to AINTC (up to 32 GPIOs). 329 329 */ 330 - if (offset < d->irq_base) 330 + if (offset < d->gpio_unbanked) 331 331 return d->gpio_irq + offset; 332 332 else 333 333 return -ENODEV; ··· 419 419 420 420 /* pass "bank 0" GPIO IRQs to AINTC */ 421 421 chips[0].chip.to_irq = gpio_to_irq_unbanked; 422 + chips[0].gpio_irq = bank_irq; 423 + chips[0].gpio_unbanked = pdata->gpio_unbanked; 422 424 binten = BIT(0); 423 425 424 426 /* AINTC handles mask/unmask; GPIO handles triggering */