Commit e4c0da21 authored by Linus Torvalds's avatar Linus Torvalds

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:
 "Here's a set of patches for (hopefully) -rc1.  Some of them are fixes,
  but a good number of them also do things such as enable new drivers in
  the defconfigs for platforms that have such devices, increases
  coverage of the multiplatform defconfig and some DTS changes that
  plumbs up some of the devices that now have bindings and driver
  support.

  The commit dates are recent; we've mostly collected these fixes in the
  last few days but I also had to rebuild the branch yesterday to sort
  out some internal conflicts which reset the timestamps.  The changes
  should have been tested by each platform maintainer already (and few
  of them have cross-platform impact) so I'm personally not too
  concerned by it at this time"

* tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (23 commits)
  ARM: multi_v7_defconfig: remove redundant entries and re-enable TI_EDMA
  ARM: multi_v7_defconfig: add mvebu drivers
  clocksource: kona: Add basic use of external clock
  drivers: bus: fix CCI driver kcalloc call parameters swap
  ARM: dts: bcm28155-ap: Fix Card Detection GPIO
  ARM: multi_v7_defconfig: Select CONFIG_AT803X_PHY
  ARM: keystone: config: fix build warning when CONFIG_DMADEVICES is not set
  MAINTAINERS: ARM: SiRF: use regex patterns to involve all SiRF drivers
  ARM: dts: zynq: Add SDHCI nodes
  ARM: hisi: don't select SMP
  ARM: tegra: rebuild tegra_defconfig to add DEBUG_FS
  ARM: multi_v7: copy most options from tegra_defconfig
  ARM: iop32x: fix power off handling for the EM7210 board
  ARM: integrator: restore static map on the CP
  ARM: msm_defconfig: Enable MSM clock drivers
  ARM: dts: msm: Add clock controller nodes and hook into uart
  ARM: OMAP4+: move errata initialization to omap4_pm_init_early
  ARM: OMAP4460: cpuidle: Extend PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD on cpuidle
  ARM: mvebu: fix compilation warning on Armada 370 (i.e. non-SMP)
  ARM: shmobile: r8a7790.dtsi: ficx i2c[0-3] clock reference
  ...
parents 5cb480f6 f39aa275
...@@ -868,14 +868,7 @@ F: arch/arm/mach-prima2/ ...@@ -868,14 +868,7 @@ F: arch/arm/mach-prima2/
F: drivers/clk/clk-prima2.c F: drivers/clk/clk-prima2.c
F: drivers/clocksource/timer-prima2.c F: drivers/clocksource/timer-prima2.c
F: drivers/clocksource/timer-marco.c F: drivers/clocksource/timer-marco.c
F: drivers/dma/sirf-dma.c N: [^a-z]sirf
F: drivers/i2c/busses/i2c-sirf.c
F: drivers/input/misc/sirfsoc-onkey.c
F: drivers/irqchip/irq-sirfsoc.c
F: drivers/mmc/host/sdhci-sirf.c
F: drivers/pinctrl/sirf/
F: drivers/rtc/rtc-sirfsoc.c
F: drivers/spi/spi-sirf.c
ARM/EBSA110 MACHINE SUPPORT ARM/EBSA110 MACHINE SUPPORT
M: Russell King <linux@arm.linux.org.uk> M: Russell King <linux@arm.linux.org.uk>
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
/dts-v1/; /dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include "bcm11351.dtsi" #include "bcm11351.dtsi"
/ { / {
...@@ -60,7 +62,7 @@ sdio2: sdio@3f190000 { ...@@ -60,7 +62,7 @@ sdio2: sdio@3f190000 {
sdio4: sdio@3f1b0000 { sdio4: sdio@3f1b0000 {
max-frequency = <48000000>; max-frequency = <48000000>;
cd-gpios = <&gpio 14 0>; cd-gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
status = "okay"; status = "okay";
}; };
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
/include/ "skeleton.dtsi" /include/ "skeleton.dtsi"
#include <dt-bindings/clock/qcom,gcc-msm8660.h>
/ { / {
model = "Qualcomm MSM8660 SURF"; model = "Qualcomm MSM8660 SURF";
compatible = "qcom,msm8660-surf", "qcom,msm8660"; compatible = "qcom,msm8660-surf", "qcom,msm8660";
...@@ -37,11 +39,20 @@ msmgpio: gpio@800000 { ...@@ -37,11 +39,20 @@ msmgpio: gpio@800000 {
#interrupt-cells = <2>; #interrupt-cells = <2>;
}; };
gcc: clock-controller@900000 {
compatible = "qcom,gcc-msm8660";
#clock-cells = <1>;
#reset-cells = <1>;
reg = <0x900000 0x4000>;
};
serial@19c40000 { serial@19c40000 {
compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm"; compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm";
reg = <0x19c40000 0x1000>, reg = <0x19c40000 0x1000>,
<0x19c00000 0x1000>; <0x19c00000 0x1000>;
interrupts = <0 195 0x0>; interrupts = <0 195 0x0>;
clocks = <&gcc GSBI12_UART_CLK>, <&gcc GSBI12_H_CLK>;
clock-names = "core", "iface";
}; };
qcom,ssbi@500000 { qcom,ssbi@500000 {
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
/include/ "skeleton.dtsi" /include/ "skeleton.dtsi"
#include <dt-bindings/clock/qcom,gcc-msm8960.h>
/ { / {
model = "Qualcomm MSM8960 CDP"; model = "Qualcomm MSM8960 CDP";
compatible = "qcom,msm8960-cdp", "qcom,msm8960"; compatible = "qcom,msm8960-cdp", "qcom,msm8960";
...@@ -37,11 +39,27 @@ msmgpio: gpio@800000 { ...@@ -37,11 +39,27 @@ msmgpio: gpio@800000 {
reg = <0x800000 0x4000>; reg = <0x800000 0x4000>;
}; };
gcc: clock-controller@900000 {
compatible = "qcom,gcc-msm8960";
#clock-cells = <1>;
#reset-cells = <1>;
reg = <0x900000 0x4000>;
};
clock-controller@4000000 {
compatible = "qcom,mmcc-msm8960";
reg = <0x4000000 0x1000>;
#clock-cells = <1>;
#reset-cells = <1>;
};
serial@16440000 { serial@16440000 {
compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm"; compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm";
reg = <0x16440000 0x1000>, reg = <0x16440000 0x1000>,
<0x16400000 0x1000>; <0x16400000 0x1000>;
interrupts = <0 154 0x0>; interrupts = <0 154 0x0>;
clocks = <&gcc GSBI5_UART_CLK>, <&gcc GSBI5_H_CLK>;
clock-names = "core", "iface";
}; };
qcom,ssbi@500000 { qcom,ssbi@500000 {
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
#include "skeleton.dtsi" #include "skeleton.dtsi"
#include <dt-bindings/clock/qcom,gcc-msm8974.h>
/ { / {
model = "Qualcomm MSM8974"; model = "Qualcomm MSM8974";
compatible = "qcom,msm8974"; compatible = "qcom,msm8974";
...@@ -93,5 +95,27 @@ restart@fc4ab000 { ...@@ -93,5 +95,27 @@ restart@fc4ab000 {
compatible = "qcom,pshold"; compatible = "qcom,pshold";
reg = <0xfc4ab000 0x4>; reg = <0xfc4ab000 0x4>;
}; };
gcc: clock-controller@fc400000 {
compatible = "qcom,gcc-msm8974";
#clock-cells = <1>;
#reset-cells = <1>;
reg = <0xfc400000 0x4000>;
};
mmcc: clock-controller@fd8c0000 {
compatible = "qcom,mmcc-msm8974";
#clock-cells = <1>;
#reset-cells = <1>;
reg = <0xfd8c0000 0x6000>;
};
serial@f991e000 {
compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
reg = <0xf991e000 0x1000>;
interrupts = <0 108 0x0>;
clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>, <&gcc GCC_BLSP1_AHB_CLK>;
clock-names = "core", "iface";
};
}; };
}; };
...@@ -197,7 +197,7 @@ i2c0: i2c@e6508000 { ...@@ -197,7 +197,7 @@ i2c0: i2c@e6508000 {
reg = <0 0xe6508000 0 0x40>; reg = <0 0xe6508000 0 0x40>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 287 IRQ_TYPE_LEVEL_HIGH>; interrupts = <0 287 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp3_clks R8A7790_CLK_I2C0>; clocks = <&mstp9_clks R8A7790_CLK_I2C0>;
status = "disabled"; status = "disabled";
}; };
...@@ -208,7 +208,7 @@ i2c1: i2c@e6518000 { ...@@ -208,7 +208,7 @@ i2c1: i2c@e6518000 {
reg = <0 0xe6518000 0 0x40>; reg = <0 0xe6518000 0 0x40>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 288 IRQ_TYPE_LEVEL_HIGH>; interrupts = <0 288 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp3_clks R8A7790_CLK_I2C1>; clocks = <&mstp9_clks R8A7790_CLK_I2C1>;
status = "disabled"; status = "disabled";
}; };
...@@ -219,7 +219,7 @@ i2c2: i2c@e6530000 { ...@@ -219,7 +219,7 @@ i2c2: i2c@e6530000 {
reg = <0 0xe6530000 0 0x40>; reg = <0 0xe6530000 0 0x40>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 286 IRQ_TYPE_LEVEL_HIGH>; interrupts = <0 286 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp3_clks R8A7790_CLK_I2C2>; clocks = <&mstp9_clks R8A7790_CLK_I2C2>;
status = "disabled"; status = "disabled";
}; };
...@@ -230,7 +230,7 @@ i2c3: i2c@e6540000 { ...@@ -230,7 +230,7 @@ i2c3: i2c@e6540000 {
reg = <0 0xe6540000 0 0x40>; reg = <0 0xe6540000 0 0x40>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 290 IRQ_TYPE_LEVEL_HIGH>; interrupts = <0 290 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&mstp3_clks R8A7790_CLK_I2C3>; clocks = <&mstp9_clks R8A7790_CLK_I2C3>;
status = "disabled"; status = "disabled";
}; };
......
...@@ -102,6 +102,26 @@ gem1: ethernet@e000c000 { ...@@ -102,6 +102,26 @@ gem1: ethernet@e000c000 {
clock-names = "pclk", "hclk", "tx_clk"; clock-names = "pclk", "hclk", "tx_clk";
}; };
sdhci0: ps7-sdhci@e0100000 {
compatible = "arasan,sdhci-8.9a";
status = "disabled";
clock-names = "clk_xin", "clk_ahb";
clocks = <&clkc 21>, <&clkc 32>;
interrupt-parent = <&intc>;
interrupts = <0 24 4>;
reg = <0xe0100000 0x1000>;
} ;
sdhci1: ps7-sdhci@e0101000 {
compatible = "arasan,sdhci-8.9a";
status = "disabled";
clock-names = "clk_xin", "clk_ahb";
clocks = <&clkc 22>, <&clkc 33>;
interrupt-parent = <&intc>;
interrupts = <0 47 4>;
reg = <0xe0101000 0x1000>;
} ;
slcr: slcr@f8000000 { slcr: slcr@f8000000 {
compatible = "xlnx,zynq-slcr"; compatible = "xlnx,zynq-slcr";
reg = <0xF8000000 0x1000>; reg = <0xF8000000 0x1000>;
......
...@@ -34,6 +34,10 @@ &gem0 { ...@@ -34,6 +34,10 @@ &gem0 {
phy-mode = "rgmii"; phy-mode = "rgmii";
}; };
&sdhci0 {
status = "okay";
};
&uart1 { &uart1 {
status = "okay"; status = "okay";
}; };
...@@ -35,6 +35,10 @@ &gem0 { ...@@ -35,6 +35,10 @@ &gem0 {
phy-mode = "rgmii"; phy-mode = "rgmii";
}; };
&sdhci0 {
status = "okay";
};
&uart1 { &uart1 {
status = "okay"; status = "okay";
}; };
...@@ -35,6 +35,10 @@ &gem0 { ...@@ -35,6 +35,10 @@ &gem0 {
phy-mode = "rgmii"; phy-mode = "rgmii";
}; };
&sdhci0 {
status = "okay";
};
&uart1 { &uart1 {
status = "okay"; status = "okay";
}; };
...@@ -142,6 +142,7 @@ CONFIG_USB_DWC3_DEBUG=y ...@@ -142,6 +142,7 @@ CONFIG_USB_DWC3_DEBUG=y
CONFIG_USB_DWC3_VERBOSE=y CONFIG_USB_DWC3_VERBOSE=y
CONFIG_KEYSTONE_USB_PHY=y CONFIG_KEYSTONE_USB_PHY=y
CONFIG_DMADEVICES=y CONFIG_DMADEVICES=y
CONFIG_TI_EDMA=y
CONFIG_COMMON_CLK_DEBUG=y CONFIG_COMMON_CLK_DEBUG=y
CONFIG_MEMORY=y CONFIG_MEMORY=y
CONFIG_EXT4_FS=y CONFIG_EXT4_FS=y
......
...@@ -114,6 +114,10 @@ CONFIG_USB_GADGET_VBUS_DRAW=500 ...@@ -114,6 +114,10 @@ CONFIG_USB_GADGET_VBUS_DRAW=500
CONFIG_NEW_LEDS=y CONFIG_NEW_LEDS=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_STAGING=y CONFIG_STAGING=y
CONFIG_COMMON_CLK_QCOM=y
CONFIG_MSM_GCC_8660=y
CONFIG_MSM_MMCC_8960=y
CONFIG_MSM_MMCC_8974=y
CONFIG_MSM_IOMMU=y CONFIG_MSM_IOMMU=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_XATTR=y
......
CONFIG_SYSVIPC=y
CONFIG_IRQ_DOMAIN_DEBUG=y CONFIG_IRQ_DOMAIN_DEBUG=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_EMBEDDED=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_PARTITION_ADVANCED=y
CONFIG_ARCH_MVEBU=y CONFIG_ARCH_MVEBU=y
CONFIG_MACH_ARMADA_370=y CONFIG_MACH_ARMADA_370=y
CONFIG_MACH_ARMADA_XP=y CONFIG_MACH_ARMADA_XP=y
...@@ -38,7 +43,7 @@ CONFIG_ARCH_TEGRA=y ...@@ -38,7 +43,7 @@ CONFIG_ARCH_TEGRA=y
CONFIG_ARCH_TEGRA_2x_SOC=y CONFIG_ARCH_TEGRA_2x_SOC=y
CONFIG_ARCH_TEGRA_3x_SOC=y CONFIG_ARCH_TEGRA_3x_SOC=y
CONFIG_ARCH_TEGRA_114_SOC=y CONFIG_ARCH_TEGRA_114_SOC=y
CONFIG_TEGRA_PCI=y CONFIG_ARCH_TEGRA_124_SOC=y
CONFIG_TEGRA_EMC_SCALING_ENABLE=y CONFIG_TEGRA_EMC_SCALING_ENABLE=y
CONFIG_ARCH_U8500=y CONFIG_ARCH_U8500=y
CONFIG_MACH_HREFV60=y CONFIG_MACH_HREFV60=y
...@@ -49,19 +54,55 @@ CONFIG_ARCH_VEXPRESS_CA9X4=y ...@@ -49,19 +54,55 @@ CONFIG_ARCH_VEXPRESS_CA9X4=y
CONFIG_ARCH_VIRT=y CONFIG_ARCH_VIRT=y
CONFIG_ARCH_WM8850=y CONFIG_ARCH_WM8850=y
CONFIG_ARCH_ZYNQ=y CONFIG_ARCH_ZYNQ=y
CONFIG_TRUSTED_FOUNDATIONS=y
CONFIG_PCI=y
CONFIG_PCI_MSI=y
CONFIG_PCI_MVEBU=y
CONFIG_PCI_TEGRA=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_HIGHPTE=y CONFIG_HIGHPTE=y
CONFIG_CMA=y
CONFIG_ARM_APPENDED_DTB=y CONFIG_ARM_APPENDED_DTB=y
CONFIG_ARM_ATAG_DTB_COMPAT=y CONFIG_ARM_ATAG_DTB_COMPAT=y
CONFIG_KEXEC=y
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
CONFIG_CPU_IDLE=y
CONFIG_NET=y CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y CONFIG_UNIX=y
CONFIG_INET=y CONFIG_INET=y
CONFIG_IP_PNP=y CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_IPCOMP=m
CONFIG_IPV6_MIP6=m
CONFIG_IPV6_TUNNEL=m
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_CFG80211=m
CONFIG_MAC80211=m
CONFIG_RFKILL=y
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL_GPIO=y
CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DMA_CMA=y
CONFIG_OMAP_OCP2SCP=y CONFIG_OMAP_OCP2SCP=y
CONFIG_MTD=y
CONFIG_MTD_M25P80=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_ICS932S401=y
CONFIG_APDS9802ALS=y
CONFIG_ISL29003=y
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_BLK_DEV_SR=y
CONFIG_SCSI_MULTI_LUN=y
CONFIG_ATA=y CONFIG_ATA=y
CONFIG_SATA_AHCI_PLATFORM=y CONFIG_SATA_AHCI_PLATFORM=y
CONFIG_SATA_HIGHBANK=y CONFIG_SATA_HIGHBANK=y
...@@ -69,13 +110,30 @@ CONFIG_SATA_MV=y ...@@ -69,13 +110,30 @@ CONFIG_SATA_MV=y
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
CONFIG_SUN4I_EMAC=y CONFIG_SUN4I_EMAC=y
CONFIG_NET_CALXEDA_XGMAC=y CONFIG_NET_CALXEDA_XGMAC=y
CONFIG_MVNETA=y
CONFIG_KS8851=y CONFIG_KS8851=y
CONFIG_R8169=y
CONFIG_SMSC911X=y CONFIG_SMSC911X=y
CONFIG_STMMAC_ETH=y CONFIG_STMMAC_ETH=y
CONFIG_ICPLUS_PHY=y
CONFIG_MDIO_SUN4I=y
CONFIG_TI_CPSW=y CONFIG_TI_CPSW=y
CONFIG_AT803X_PHY=y
CONFIG_MARVELL_PHY=y
CONFIG_ICPLUS_PHY=y
CONFIG_USB_PEGASUS=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_SMSC75XX=y
CONFIG_USB_NET_SMSC95XX=y
CONFIG_BRCMFMAC=m
CONFIG_RT2X00=m
CONFIG_RT2800USB=m
CONFIG_INPUT_EVDEV=y
CONFIG_KEYBOARD_GPIO=y
CONFIG_KEYBOARD_TEGRA=y
CONFIG_KEYBOARD_SPEAR=y CONFIG_KEYBOARD_SPEAR=y
CONFIG_KEYBOARD_CROS_EC=y
CONFIG_MOUSE_PS2_ELANTECH=y
CONFIG_INPUT_MISC=y
CONFIG_INPUT_MPU3050=y
CONFIG_SERIO_AMBAKMI=y CONFIG_SERIO_AMBAKMI=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
...@@ -98,30 +156,81 @@ CONFIG_SERIAL_FSL_LPUART=y ...@@ -98,30 +156,81 @@ CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_ST_ASC=y CONFIG_SERIAL_ST_ASC=y
CONFIG_SERIAL_ST_ASC_CONSOLE=y CONFIG_SERIAL_ST_ASC_CONSOLE=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y
CONFIG_I2C_MUX_PINCTRL=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y CONFIG_I2C_DESIGNWARE_PLATFORM=y
CONFIG_I2C_MV64XXX=y
CONFIG_I2C_SIRF=y CONFIG_I2C_SIRF=y
CONFIG_I2C_TEGRA=y CONFIG_I2C_TEGRA=y
CONFIG_SPI=y CONFIG_SPI=y
CONFIG_SPI_OMAP24XX=y CONFIG_SPI_OMAP24XX=y
CONFIG_SPI_ORION=y
CONFIG_SPI_PL022=y CONFIG_SPI_PL022=y
CONFIG_SPI_SIRF=y CONFIG_SPI_SIRF=y
CONFIG_SPI_TEGRA114=y CONFIG_SPI_TEGRA114=y
CONFIG_SPI_TEGRA20_SFLASH=y
CONFIG_SPI_TEGRA20_SLINK=y CONFIG_SPI_TEGRA20_SLINK=y
CONFIG_PINCTRL_SINGLE=y CONFIG_PINCTRL_AS3722=y
CONFIG_PINCTRL_PALMAS=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_GENERIC_PLATFORM=y CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_TWL4030=y CONFIG_GPIO_TWL4030=y
CONFIG_REGULATOR_GPIO=y CONFIG_GPIO_PALMAS=y
CONFIG_GPIO_TPS6586X=y
CONFIG_GPIO_TPS65910=y
CONFIG_BATTERY_SBS=y
CONFIG_CHARGER_TPS65090=y
CONFIG_POWER_RESET_AS3722=y
CONFIG_POWER_RESET_GPIO=y
CONFIG_SENSORS_LM90=y
CONFIG_THERMAL=y
CONFIG_ARMADA_THERMAL=y
CONFIG_MFD_AS3722=y
CONFIG_MFD_CROS_EC=y
CONFIG_MFD_CROS_EC_SPI=y
CONFIG_MFD_MAX8907=y
CONFIG_MFD_PALMAS=y
CONFIG_MFD_TPS65090=y
CONFIG_MFD_TPS6586X=y
CONFIG_MFD_TPS65910=y
CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
CONFIG_REGULATOR_AB8500=y CONFIG_REGULATOR_AB8500=y
CONFIG_REGULATOR_AS3722=y
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_MAX8907=y
CONFIG_REGULATOR_PALMAS=y
CONFIG_REGULATOR_TPS51632=y CONFIG_REGULATOR_TPS51632=y
CONFIG_REGULATOR_TPS62360=y CONFIG_REGULATOR_TPS62360=y
CONFIG_REGULATOR_TPS65090=y
CONFIG_REGULATOR_TPS6586X=y
CONFIG_REGULATOR_TPS65910=y
CONFIG_REGULATOR_TWL4030=y CONFIG_REGULATOR_TWL4030=y
CONFIG_REGULATOR_VEXPRESS=y CONFIG_REGULATOR_VEXPRESS=y
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_DRM=y CONFIG_DRM=y
CONFIG_TEGRA_HOST1X=y
CONFIG_DRM_TEGRA=y CONFIG_DRM_TEGRA=y
CONFIG_DRM_PANEL_SIMPLE=y
CONFIG_FB_ARMCLCD=y CONFIG_FB_ARMCLCD=y
CONFIG_FB_WM8505=y CONFIG_FB_WM8505=y
CONFIG_FB_SIMPLE=y CONFIG_FB_SIMPLE=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_PWM=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_TEGRA=y
CONFIG_SND_SOC_TEGRA_RT5640=y
CONFIG_SND_SOC_TEGRA_WM8753=y
CONFIG_SND_SOC_TEGRA_WM8903=y
CONFIG_SND_SOC_TEGRA_TRIMSLICE=y
CONFIG_SND_SOC_TEGRA_ALC5632=y
CONFIG_SND_SOC_TEGRA_MAX98090=y
CONFIG_USB=y CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_HCD=y
CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_HCD=y
...@@ -132,8 +241,6 @@ CONFIG_USB_STORAGE=y ...@@ -132,8 +241,6 @@ CONFIG_USB_STORAGE=y
CONFIG_USB_CHIPIDEA=y CONFIG_USB_CHIPIDEA=y
CONFIG_USB_CHIPIDEA_HOST=y CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_AB8500_USB=y CONFIG_AB8500_USB=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_OMAP_USB2=y
CONFIG_OMAP_USB3=y CONFIG_OMAP_USB3=y
CONFIG_SAMSUNG_USB2PHY=y CONFIG_SAMSUNG_USB2PHY=y
CONFIG_SAMSUNG_USB3PHY=y CONFIG_SAMSUNG_USB3PHY=y
...@@ -144,24 +251,32 @@ CONFIG_MMC=y ...@@ -144,24 +251,32 @@ CONFIG_MMC=y
CONFIG_MMC_BLOCK_MINORS=16 CONFIG_MMC_BLOCK_MINORS=16
CONFIG_MMC_ARMMMCI=y CONFIG_MMC_ARMMMCI=y
CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_ESDHC_IMX=y CONFIG_MMC_SDHCI_ESDHC_IMX=y
CONFIG_MMC_SDHCI_TEGRA=y CONFIG_MMC_SDHCI_TEGRA=y
CONFIG_MMC_SDHCI_SPEAR=y CONFIG_MMC_SDHCI_SPEAR=y
CONFIG_MMC_SDHCI_BCM_KONA=y CONFIG_MMC_SDHCI_BCM_KONA=y
CONFIG_MMC_OMAP=y CONFIG_MMC_OMAP=y
CONFIG_MMC_OMAP_HS=y CONFIG_MMC_OMAP_HS=y
CONFIG_MMC_MVSDIO=y
CONFIG_EDAC=y CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y CONFIG_EDAC_MM_EDAC=y
CONFIG_EDAC_HIGHBANK_MC=y CONFIG_EDAC_HIGHBANK_MC=y
CONFIG_EDAC_HIGHBANK_L2=y CONFIG_EDAC_HIGHBANK_L2=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_AS3722=y
CONFIG_RTC_DRV_MAX8907=y
CONFIG_RTC_DRV_PALMAS=y
CONFIG_RTC_DRV_TWL4030=y CONFIG_RTC_DRV_TWL4030=y
CONFIG_RTC_DRV_TPS6586X=y
CONFIG_RTC_DRV_TPS65910=y
CONFIG_RTC_DRV_EM3027=y
CONFIG_RTC_DRV_PL031=y CONFIG_RTC_DRV_PL031=y
CONFIG_RTC_DRV_VT8500=y CONFIG_RTC_DRV_VT8500=y
CONFIG_RTC_DRV_MV=y
CONFIG_RTC_DRV_TEGRA=y CONFIG_RTC_DRV_TEGRA=y
CONFIG_DMADEVICES=y CONFIG_DMADEVICES=y
CONFIG_DW_DMAC=y CONFIG_DW_DMAC=y
CONFIG_MV_XOR=y
CONFIG_TEGRA20_APB_DMA=y CONFIG_TEGRA20_APB_DMA=y
CONFIG_STE_DMA40=y CONFIG_STE_DMA40=y
CONFIG_SIRF_DMA=y CONFIG_SIRF_DMA=y
...@@ -171,15 +286,34 @@ CONFIG_IMX_SDMA=y ...@@ -171,15 +286,34 @@ CONFIG_IMX_SDMA=y
CONFIG_IMX_DMA=y CONFIG_IMX_DMA=y
CONFIG_MXS_DMA=y CONFIG_MXS_DMA=y
CONFIG_DMA_OMAP=y CONFIG_DMA_OMAP=y
CONFIG_STAGING=y
CONFIG_SENSORS_ISL29018=y
CONFIG_SENSORS_ISL29028=y
CONFIG_MFD_NVEC=y
CONFIG_KEYBOARD_NVEC=y
CONFIG_SERIO_NVEC_PS2=y
CONFIG_NVEC_POWER=y
CONFIG_TEGRA_IOMMU_GART=y
CONFIG_TEGRA_IOMMU_SMMU=y
CONFIG_MEMORY=y
CONFIG_IIO=y
CONFIG_AK8975=y
CONFIG_PWM=y CONFIG_PWM=y
CONFIG_PWM_TEGRA=y
CONFIG_PWM_VT8500=y CONFIG_PWM_VT8500=y
CONFIG_OMAP_USB2=y
CONFIG_EXT4_FS=y CONFIG_EXT4_FS=y
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_LZO=y
CONFIG_SQUASHFS_XZ=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y CONFIG_NFS_V4=y
CONFIG_ROOT_NFS=y CONFIG_ROOT_NFS=y
CONFIG_PRINTK_TIME=y CONFIG_PRINTK_TIME=y
CONFIG_DEBUG_FS=y CONFIG_DEBUG_FS=y
CONFIG_DEBUG_KERNEL=y CONFIG_MAGIC_SYSRQ=y
CONFIG_LOCKUP_DETECTOR=y CONFIG_LOCKUP_DETECTOR=y
CONFIG_CRYPTO_DEV_TEGRA_AES=y
...@@ -29,11 +29,11 @@ CONFIG_ARCH_TEGRA_3x_SOC=y ...@@ -29,11 +29,11 @@ CONFIG_ARCH_TEGRA_3x_SOC=y
CONFIG_ARCH_TEGRA_114_SOC=y CONFIG_ARCH_TEGRA_114_SOC=y
CONFIG_ARCH_TEGRA_124_SOC=y CONFIG_ARCH_TEGRA_124_SOC=y
CONFIG_TEGRA_EMC_SCALING_ENABLE=y CONFIG_TEGRA_EMC_SCALING_ENABLE=y
CONFIG_TRUSTED_FOUNDATIONS=y
CONFIG_PCI=y CONFIG_PCI=y
CONFIG_PCI_MSI=y CONFIG_PCI_MSI=y
CONFIG_PCI_TEGRA=y CONFIG_PCI_TEGRA=y
CONFIG_PCIEPORTBUS=y CONFIG_PCIEPORTBUS=y
CONFIG_TRUSTED_FOUNDATIONS=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_PREEMPT=y CONFIG_PREEMPT=y
CONFIG_AEABI=y CONFIG_AEABI=y
...@@ -125,7 +125,6 @@ CONFIG_SERIAL_TEGRA=y ...@@ -125,7 +125,6 @@ CONFIG_SERIAL_TEGRA=y
CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_HW_RANDOM is not set # CONFIG_HW_RANDOM is not set
# CONFIG_I2C_COMPAT is not set # CONFIG_I2C_COMPAT is not set
CONFIG_I2C_MUX=y
CONFIG_I2C_MUX_PINCTRL=y CONFIG_I2C_MUX_PINCTRL=y
CONFIG_I2C_TEGRA=y CONFIG_I2C_TEGRA=y
CONFIG_SPI=y CONFIG_SPI=y
...@@ -169,9 +168,8 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y ...@@ -169,9 +168,8 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_USB_SUPPORT=y CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=m CONFIG_USB_VIDEO_CLASS=m
CONFIG_DRM=y CONFIG_DRM=y
CONFIG_DRM_PANEL=y
CONFIG_DRM_PANEL_SIMPLE=y
CONFIG_DRM_TEGRA=y CONFIG_DRM_TEGRA=y
CONFIG_DRM_PANEL_SIMPLE=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set # CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y CONFIG_BACKLIGHT_CLASS_DEVICE=y
...@@ -206,10 +204,7 @@ CONFIG_MMC_BLOCK_MINORS=16 ...@@ -206,10 +204,7 @@ CONFIG_MMC_BLOCK_MINORS=16
CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_TEGRA=y CONFIG_MMC_SDHCI_TEGRA=y
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_GPIO=y CONFIG_LEDS_GPIO=y
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_ONESHOT=y CONFIG_LEDS_TRIGGER_ONESHOT=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y CONFIG_LEDS_TRIGGER_HEARTBEAT=y
...@@ -235,7 +230,6 @@ CONFIG_KEYBOARD_NVEC=y ...@@ -235,7 +230,6 @@ CONFIG_KEYBOARD_NVEC=y
CONFIG_SERIO_NVEC_PS2=y CONFIG_SERIO_NVEC_PS2=y
CONFIG_NVEC_POWER=y CONFIG_NVEC_POWER=y
CONFIG_NVEC_PAZ00=y CONFIG_NVEC_PAZ00=y
CONFIG_COMMON_CLK_DEBUG=y
CONFIG_TEGRA_IOMMU_GART=y CONFIG_TEGRA_IOMMU_GART=y
CONFIG_TEGRA_IOMMU_SMMU=y CONFIG_TEGRA_IOMMU_SMMU=y
CONFIG_MEMORY=y CONFIG_MEMORY=y
...@@ -265,6 +259,7 @@ CONFIG_NLS_CODEPAGE_437=y ...@@ -265,6 +259,7 @@ CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_1=y
CONFIG_PRINTK_TIME=y CONFIG_PRINTK_TIME=y
CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_FS=y
CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_SLAB=y CONFIG_DEBUG_SLAB=y
CONFIG_DEBUG_VM=y CONFIG_DEBUG_VM=y
......
...@@ -12,6 +12,5 @@ config ARCH_HI3xxx ...@@ -12,6 +12,5 @@ config ARCH_HI3xxx
select HAVE_SMP select HAVE_SMP
select PINCTRL select PINCTRL
select PINCTRL_SINGLE select PINCTRL_SINGLE
select SMP
help help
Support for Hisilicon Hi36xx/Hi37xx processor family Support for Hisilicon Hi36xx/Hi37xx processor family
...@@ -64,6 +64,7 @@ static void __iomem *intcp_con_base; ...@@ -64,6 +64,7 @@ static void __iomem *intcp_con_base;
/* /*
* Logical Physical * Logical Physical
* f1000000 10000000 Core module registers
* f1300000 13000000 Counter/Timer * f1300000 13000000 Counter/Timer
* f1400000 14000000 Interrupt controller * f1400000 14000000 Interrupt controller
* f1600000 16000000 UART 0 * f1600000 16000000 UART 0
...@@ -75,6 +76,11 @@ static void __iomem *intcp_con_base; ...@@ -75,6 +76,11 @@ static void __iomem *intcp_con_base;
static struct map_desc intcp_io_desc[] __initdata __maybe_unused = { static struct map_desc intcp_io_desc[] __initdata __maybe_unused = {
{ {
.virtual = IO_ADDRESS(INTEGRATOR_HDR_BASE),
.pfn = __phys_to_pfn(INTEGRATOR_HDR_BASE),
.length = SZ_4K,
.type = MT_DEVICE
}, {
.virtual = IO_ADDRESS(INTEGRATOR_CT_BASE), .virtual = IO_ADDRESS(INTEGRATOR_CT_BASE),
.pfn = __phys_to_pfn(INTEGRATOR_CT_BASE), .pfn = __phys_to_pfn(INTEGRATOR_CT_BASE),
.length = SZ_4K, .length = SZ_4K,
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/gpio.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/irq.h> #include <linux/irq.h>
...@@ -176,11 +177,35 @@ static struct platform_device em7210_serial_device = { ...@@ -176,11 +177,35 @@ static struct platform_device em7210_serial_device = {
.resource = &em7210_uart_resource, .resource = &em7210_uart_resource,
}; };
#define EM7210_HARDWARE_POWER 0
void em7210_power_off(void) void em7210_power_off(void)
{ {
*IOP3XX_GPOE &= 0xfe; int ret;
*IOP3XX_GPOD |= 0x01;
ret = gpio_direction_output(EM7210_HARDWARE_POWER, 1);
if (ret)
pr_crit("could not drive power off GPIO high\n");
}
static int __init em7210_request_gpios(void)
{
int ret;
if (!machine_is_em7210())
return 0;
ret = gpio_request(EM7210_HARDWARE_POWER, "power");
if (ret) {
pr_err("could not request power off GPIO\n");
return 0;
}
pm_power_off = em7210_power_off;
return 0;
} }
device_initcall(em7210_request_gpios);
static void __init em7210_init_machine(void) static void __init em7210_init_machine(void)
{ {
...@@ -194,9 +219,6 @@ static void __init em7210_init_machine(void) ...@@ -194,9 +219,6 @@ static void __init em7210_init_machine(void)
i2c_register_board_info(0, em7210_i2c_devices, i2c_register_board_info(0, em7210_i2c_devices,
ARRAY_SIZE(em7210_i2c_devices)); ARRAY_SIZE(em7210_i2c_devices));
pm_power_off = em7210_power_off;
} }
MACHINE_START(EM7210, "Lanner EM7210") MACHINE_START(EM7210, "Lanner EM7210")
......
...@@ -10,7 +10,6 @@ config ARCH_KEYSTONE ...@@ -10,7 +10,6 @@ config ARCH_KEYSTONE
select ARCH_WANT_OPTIONAL_GPIOLIB select ARCH_WANT_OPTIONAL_GPIOLIB
select ARM_ERRATA_798181 if SMP select ARM_ERRATA_798181 if SMP
select COMMON_CLK_KEYSTONE select COMMON_CLK_KEYSTONE
select TI_EDMA
select ARCH_SUPPORTS_BIG_ENDIAN select ARCH_SUPPORTS_BIG_ENDIAN
select ZONE_DMA if ARM_LPAE select ZONE_DMA if ARM_LPAE
help help
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/suspend.h> #include <linux/suspend.h>
#include <linux/io.h> #include <linux/io.h>
#include <mach/bridge-regs.h> #include <mach/bridge-regs.h>
#include "common.h"
static void __iomem *ddr_operation_base; static void __iomem *ddr_operation_base;
...@@ -65,9 +66,8 @@ static const struct platform_suspend_ops kirkwood_suspend_ops = { ...@@ -65,9 +66,8 @@ static const struct platform_suspend_ops kirkwood_suspend_ops = {
.valid = kirkwood_pm_valid_standby, .valid = kirkwood_pm_valid_standby,
}; };
int __init kirkwood_pm_init(void) void __init kirkwood_pm_init(void)
{ {
ddr_operation_base = ioremap(DDR_OPERATION_BASE, 4); ddr_operation_base = ioremap(DDR_OPERATION_BASE, 4);
suspend_set_ops(&kirkwood_suspend_ops); suspend_set_ops(&kirkwood_suspend_ops);
return 0;
} }
...@@ -88,7 +88,7 @@ static int __init mvebu_soc_id_init(void) ...@@ -88,7 +88,7 @@ static int __init mvebu_soc_id_init(void)
} }
pci_base = of_iomap(child, 0); pci_base = of_iomap(child, 0);
if (IS_ERR(pci_base)) { if (pci_base == NULL) {
pr_err("cannot map registers\n"); pr_err("cannot map registers\n");
ret = -ENOMEM; ret = -ENOMEM;
goto res_ioremap; goto res_ioremap;
......
...@@ -62,11 +62,17 @@ static inline int omap3_pm_init(void) ...@@ -62,11 +62,17 @@ static inline int omap3_pm_init(void)
#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP4) #if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP4)
int omap4_pm_init(void); int omap4_pm_init(void);
int omap4_pm_init_early(void);
#else #else
static inline int omap4_pm_init(void) static inline int omap4_pm_init(void)
{ {
return 0; return 0;
} }
static inline int omap4_pm_init_early(void)
{
return 0;
}
#endif #endif
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
...@@ -236,6 +242,7 @@ static inline void __iomem *omap4_get_scu_base(void) ...@@ -236,6 +242,7 @@ static inline void __iomem *omap4_get_scu_base(void)
extern void __init gic_init_irq(void); extern void __init gic_init_irq(void);
extern void gic_dist_disable(void); extern void gic_dist_disable(void);
extern void gic_dist_enable(void);
extern bool gic_dist_disabled(void); extern bool gic_dist_disabled(void);
extern void gic_timer_retrigger(void); extern void gic_timer_retrigger(void);
extern void omap_smc1(u32 fn, u32 arg); extern void omap_smc1(u32 fn, u32 arg);
......
...@@ -80,6 +80,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, ...@@ -80,6 +80,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
int index) int index)
{ {
struct idle_statedata *cx = state_ptr + index; struct idle_statedata *cx = state_ptr + index;
u32 mpuss_can_lose_context = 0;
/* /*
* CPU0 has to wait and stay ON until CPU1 is OFF state. * CPU0 has to wait and stay ON until CPU1 is OFF state.
...@@ -104,6 +105,9 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, ...@@ -104,6 +105,9 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
} }
} }
mpuss_can_lose_context = (cx->mpu_state == PWRDM_POWER_RET) &&
(cx->mpu_logic_state == PWRDM_POWER_OFF);
/* /*
* Call idle CPU PM enter notifier chain so that * Call idle CPU PM enter notifier chain so that
* VFP and per CPU interrupt context is saved. * VFP and per CPU interrupt context is saved.
...@@ -118,9 +122,8 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, ...@@ -118,9 +122,8 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
* Call idle CPU cluster PM enter notifier chain * Call idle CPU cluster PM enter notifier chain
* to save GIC and wakeupgen context. * to save GIC and wakeupgen context.
*/ */
if ((cx->mpu_state == PWRDM_POWER_RET) && if (mpuss_can_lose_context)
(cx->mpu_logic_state == PWRDM_POWER_OFF)) cpu_cluster_pm_enter();
cpu_cluster_pm_enter();
} }
omap4_enter_lowpower(dev->cpu, cx->cpu_state); omap4_enter_lowpower(dev->cpu, cx->cpu_state);
...@@ -128,9 +131,23 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, ...@@ -128,9 +131,23 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
/* Wakeup CPU1 only if it is not offlined */ /* Wakeup CPU1 only if it is not offlined */
if (dev->cpu == 0 && cpumask_test_cpu(1, cpu_online_mask)) { if (dev->cpu == 0 && cpumask_test_cpu(1, cpu_online_mask)) {
if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD) &&
mpuss_can_lose_context)
gic_dist_disable();
clkdm_wakeup(cpu_clkdm[1]); clkdm_wakeup(cpu_clkdm[1]);
omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON); omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON);
clkdm_allow_idle(cpu_clkdm[1]); clkdm_allow_idle(cpu_clkdm[1]);
if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD) &&
mpuss_can_lose_context) {
while (gic_dist_disabled()) {
udelay(1);
cpu_relax();
}
gic_timer_retrigger();
}
} }
/* /*
...@@ -143,8 +160,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, ...@@ -143,8 +160,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
* Call idle CPU cluster PM exit notifier chain * Call idle CPU cluster PM exit notifier chain
* to restore GIC and wakeupgen context. * to restore GIC and wakeupgen context.
*/ */
if (dev->cpu == 0 && (cx->mpu_state == PWRDM_POWER_RET) && if (dev->cpu == 0 && mpuss_can_lose_context)
(cx->mpu_logic_state == PWRDM_POWER_OFF))
cpu_cluster_pm_exit(); cpu_cluster_pm_exit();
fail: fail:
......
...@@ -641,6 +641,7 @@ void __init omap4430_init_early(void) ...@@ -641,6 +641,7 @@ void __init omap4430_init_early(void)
omap_cm_base_init(); omap_cm_base_init();
omap4xxx_check_revision(); omap4xxx_check_revision();
omap4xxx_check_features(); omap4xxx_check_features();
omap4_pm_init_early();
omap44xx_prm_init(); omap44xx_prm_init();
omap44xx_voltagedomains_init(); omap44xx_voltagedomains_init();
omap44xx_powerdomains_init(); omap44xx_powerdomains_init();
......
...@@ -271,6 +271,9 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state) ...@@ -271,6 +271,9 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state)
else else
omap_pm_ops.finish_suspend(save_state); omap_pm_ops.finish_suspend(save_state);
if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD) && cpu)
gic_dist_enable();
/* /*
* Restore the CPUx power state to ON otherwise CPUx * Restore the CPUx power state to ON otherwise CPUx
* power domain can transitions to programmed low power * power domain can transitions to programmed low power
......
...@@ -39,8 +39,6 @@ ...@@ -39,8 +39,6 @@
#define OMAP5_CORE_COUNT 0x2 #define OMAP5_CORE_COUNT 0x2
u16 pm44xx_errata;
/* SCU base address */ /* SCU base address */
static void __iomem *scu_base; static void __iomem *scu_base;
...@@ -217,10 +215,8 @@ static void __init omap4_smp_prepare_cpus(unsigned int max_cpus) ...@@ -217,10 +215,8 @@ static void __init omap4_smp_prepare_cpus(unsigned int max_cpus)
if (scu_base) if (scu_base)
scu_enable(scu_base); scu_enable(scu_base);
if (cpu_is_omap446x()) { if (cpu_is_omap446x())
startup_addr = omap4460_secondary_startup; startup_addr = omap4460_secondary_startup;
pm44xx_errata |= PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD;
}
/* /*
* Write the address of secondary startup routine into the * Write the address of secondary startup routine into the
......
...@@ -127,6 +127,12 @@ void gic_dist_disable(void) ...@@ -127,6 +127,12 @@ void gic_dist_disable(void)
__raw_writel(0x0, gic_dist_base_addr + GIC_DIST_CTRL); __raw_writel(0x0, gic_dist_base_addr + GIC_DIST_CTRL);
} }
void gic_dist_enable(void)
{
if (gic_dist_base_addr)
__raw_writel(0x1, gic_dist_base_addr + GIC_DIST_CTRL);
}
bool gic_dist_disabled(void) bool gic_dist_disabled(void)
{ {
return !(__raw_readl(gic_dist_base_addr + GIC_DIST_CTRL) & 0x1); return !(__raw_readl(gic_dist_base_addr + GIC_DIST_CTRL) & 0x1);
......
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
#include "powerdomain.h" #include "powerdomain.h"
#include "pm.h" #include "pm.h"
u16 pm44xx_errata;
struct power_state { struct power_state {
struct powerdomain *pwrdm; struct powerdomain *pwrdm;
u32 next_state; u32 next_state;
...@@ -198,6 +200,19 @@ static inline int omap4_init_static_deps(void) ...@@ -198,6 +200,19 @@ static inline int omap4_init_static_deps(void)
return ret; return ret;
} }
/**
* omap4_pm_init_early - Does early initialization necessary for OMAP4+ devices
*
* Initializes basic stuff for power management functionality.
*/
int __init omap4_pm_init_early(void)
{
if (cpu_is_omap446x())
pm44xx_errata |= PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD;
return 0;
}
/** /**
* omap4_pm_init - Init routine for OMAP4+ devices * omap4_pm_init - Init routine for OMAP4+ devices
* *
......
...@@ -15,8 +15,51 @@ ...@@ -15,8 +15,51 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <asm/exception.h>
#include <plat/irq.h> #include <plat/irq.h>
#include <plat/orion-gpio.h> #include <plat/orion-gpio.h>
#include <mach/bridge-regs.h>
#ifdef CONFIG_MULTI_IRQ_HANDLER
/*
* Compiling with both non-DT and DT support enabled, will
* break asm irq handler used by non-DT boards. Therefore,
* we provide a C-style irq handler even for non-DT boards,
* if MULTI_IRQ_HANDLER is set.
*
* Notes:
* - this is prepared for Kirkwood and Dove only, update
* accordingly if you add Orion5x or MV78x00.
* - Orion5x uses different macro names and has only one
* set of CAUSE/MASK registers.
* - MV78x00 uses the same macro names but has a third
* set of CAUSE/MASK registers.
*
*/
static void __iomem *orion_irq_base = IRQ_VIRT_BASE;
asmlinkage void
__exception_irq_entry orion_legacy_handle_irq(struct pt_regs *regs)
{
u32 stat;
stat = readl_relaxed(orion_irq_base + IRQ_CAUSE_LOW_OFF);
stat &= readl_relaxed(orion_irq_base + IRQ_MASK_LOW_OFF);
if (stat) {
unsigned int hwirq = __fls(stat);
handle_IRQ(hwirq, regs);
return;
}
stat = readl_relaxed(orion_irq_base + IRQ_CAUSE_HIGH_OFF);
stat &= readl_relaxed(orion_irq_base + IRQ_MASK_HIGH_OFF);
if (stat) {
unsigned int hwirq = 32 + __fls(stat);
handle_IRQ(hwirq, regs);
return;
}
}
#endif
void __init orion_irq_init(unsigned int irq_start, void __iomem *maskaddr) void __init orion_irq_init(unsigned int irq_start, void __iomem *maskaddr)
{ {
...@@ -35,6 +78,10 @@ void __init orion_irq_init(unsigned int irq_start, void __iomem *maskaddr) ...@@ -35,6 +78,10 @@ void __init orion_irq_init(unsigned int irq_start, void __iomem *maskaddr)
ct->chip.irq_unmask = irq_gc_mask_set_bit; ct->chip.irq_unmask = irq_gc_mask_set_bit;
irq_setup_generic_chip(gc, IRQ_MSK(32), IRQ_GC_INIT_MASK_CACHE, irq_setup_generic_chip(gc, IRQ_MSK(32), IRQ_GC_INIT_MASK_CACHE,
IRQ_NOREQUEST, IRQ_LEVEL | IRQ_NOPROBE); IRQ_NOREQUEST, IRQ_LEVEL | IRQ_NOPROBE);
#ifdef CONFIG_MULTI_IRQ_HANDLER
set_handle_irq(orion_legacy_handle_irq);
#endif
} }
#ifdef CONFIG_OF #ifdef CONFIG_OF
......
...@@ -979,7 +979,7 @@ static int cci_probe(void) ...@@ -979,7 +979,7 @@ static int cci_probe(void)
nb_cci_ports = cci_config->nb_ace + cci_config->nb_ace_lite; nb_cci_ports = cci_config->nb_ace + cci_config->nb_ace_lite;
ports = kcalloc(sizeof(*ports), nb_cci_ports, GFP_KERNEL); ports = kcalloc(nb_cci_ports, sizeof(*ports), GFP_KERNEL);
if (!ports) if (!ports)
return -ENOMEM; return -ENOMEM;
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/clk.h>
#include <linux/io.h> #include <linux/io.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
...@@ -101,11 +102,18 @@ kona_timer_get_counter(void *timer_base, uint32_t *msw, uint32_t *lsw) ...@@ -101,11 +102,18 @@ kona_timer_get_counter(void *timer_base, uint32_t *msw, uint32_t *lsw)
static void __init kona_timers_init(struct device_node *node) static void __init kona_timers_init(struct device_node *node)
{ {
u32 freq; u32 freq;
struct clk *external_clk;
if (!of_property_read_u32(node, "clock-frequency", &freq)) external_clk = of_clk_get_by_name(node, NULL);
if (!IS_ERR(external_clk)) {
arch_timer_rate = clk_get_rate(external_clk);
clk_prepare_enable(external_clk);
} else if (!of_property_read_u32(node, "clock-frequency", &freq)) {
arch_timer_rate = freq; arch_timer_rate = freq;
else } else {
panic("clock-frequency not set in the .dts file"); panic("unable to determine clock-frequency");
}
/* Setup IRQ numbers */ /* Setup IRQ numbers */
timers.tmr_irq = irq_of_parse_and_map(node, 0); timers.tmr_irq = irq_of_parse_and_map(node, 0);
......
...@@ -59,8 +59,6 @@ ...@@ -59,8 +59,6 @@
#define PCI_MSI_DOORBELL_END (32) #define PCI_MSI_DOORBELL_END (32)
#define PCI_MSI_DOORBELL_MASK 0xFFFF0000 #define PCI_MSI_DOORBELL_MASK 0xFFFF0000
static DEFINE_RAW_SPINLOCK(irq_controller_lock);
static void __iomem *per_cpu_int_base; static void __iomem *per_cpu_int_base;
static void __iomem *main_int_base; static void __iomem *main_int_base;
static struct irq_domain *armada_370_xp_mpic_domain; static struct irq_domain *armada_370_xp_mpic_domain;
...@@ -239,6 +237,8 @@ static inline int armada_370_xp_msi_init(struct device_node *node, ...@@ -239,6 +237,8 @@ static inline int armada_370_xp_msi_init(struct device_node *node,
#endif #endif
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
static DEFINE_RAW_SPINLOCK(irq_controller_lock);
static int armada_xp_set_affinity(struct irq_data *d, static int armada_xp_set_affinity(struct irq_data *d,
const struct cpumask *mask_val, bool force) const struct cpumask *mask_val, bool force)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment