aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2015-01-23 17:53:54 -0500
committerOlof Johansson <olof@lixom.net>2015-01-23 17:53:54 -0500
commit82483ad67e965f6edd61c6c2cdb4ba295cf0af96 (patch)
tree22708288cab53cfd07b63a2bd5b11ee8771a8b0e
parent085dd64e537b06c7b741dac5f0ff3734d27f9a13 (diff)
parent3568df3d31d62b4368830cc6aac868cecdefd187 (diff)
Merge tag 'tegra-for-3.20-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into next/soc
Merge "ARM: tegra: Core code changes for v3.20" from Thierry Reding: This contains a couple of preparatory patches for 64-bit support. A new feature is implemented in the power-management controller which allows it to switch off the SoC if it overheats. * tag 'tegra-for-3.20-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux: soc: tegra: Add thermal reset (thermtrip) support to PMC ARM: tegra: Add PMC thermtrip programming to Jetson TK1 device tree of: Add descriptions of thermtrip properties to Tegra PMC bindings soc/tegra: pmc: Add Tegra132 support soc/tegra: fuse: Add Tegra132 support soc/tegra: fuse: Constify tegra_fuse_info structures soc/tegra: Add Tegra132 support clocksource: Build Tegra timer on 32-bit ARM only soc/tegra: pmc: restrict compilation of suspend-related support to ARM Signed-off-by: Olof Johansson <olof@lixom.net>
-rw-r--r--Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt26
-rw-r--r--arch/arm/boot/dts/tegra124-jetson-tk1.dts7
-rw-r--r--arch/arm/mach-tegra/Kconfig4
-rw-r--r--drivers/clocksource/Kconfig3
-rw-r--r--drivers/clocksource/Makefile2
-rw-r--r--drivers/soc/tegra/fuse/fuse-tegra.c1
-rw-r--r--drivers/soc/tegra/fuse/fuse-tegra30.c9
-rw-r--r--drivers/soc/tegra/pmc.c124
-rw-r--r--include/soc/tegra/fuse.h1
-rw-r--r--include/soc/tegra/pm.h2
10 files changed, 167 insertions, 12 deletions
diff --git a/Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt b/Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt
index 68ac65f82a1c..2fd50511ab4b 100644
--- a/Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt
+++ b/Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt
@@ -47,6 +47,23 @@ Required properties when nvidia,suspend-mode=<0>:
47 sleep mode, the warm boot code will restore some PLLs, clocks and then 47 sleep mode, the warm boot code will restore some PLLs, clocks and then
48 bring up CPU0 for resuming the system. 48 bring up CPU0 for resuming the system.
49 49
50Hardware-triggered thermal reset:
51On Tegra30, Tegra114 and Tegra124, if the 'i2c-thermtrip' subnode exists,
52hardware-triggered thermal reset will be enabled.
53
54Required properties for hardware-triggered thermal reset (inside 'i2c-thermtrip'):
55- nvidia,i2c-controller-id : ID of I2C controller to send poweroff command to. Valid values are
56 described in section 9.2.148 "APBDEV_PMC_SCRATCH53_0" of the
57 Tegra K1 Technical Reference Manual.
58- nvidia,bus-addr : Bus address of the PMU on the I2C bus
59- nvidia,reg-addr : I2C register address to write poweroff command to
60- nvidia,reg-data : Poweroff command to write to PMU
61
62Optional properties for hardware-triggered thermal reset (inside 'i2c-thermtrip'):
63- nvidia,pinmux-id : Pinmux used by the hardware when issuing poweroff command.
64 Defaults to 0. Valid values are described in section 12.5.2
65 "Pinmux Support" of the Tegra4 Technical Reference Manual.
66
50Example: 67Example:
51 68
52/ SoC dts including file 69/ SoC dts including file
@@ -69,6 +86,15 @@ pmc@7000f400 {
69/ Tegra board dts file 86/ Tegra board dts file
70{ 87{
71 ... 88 ...
89 pmc@7000f400 {
90 i2c-thermtrip {
91 nvidia,i2c-controller-id = <4>;
92 nvidia,bus-addr = <0x40>;
93 nvidia,reg-addr = <0x36>;
94 nvidia,reg-data = <0x2>;
95 };
96 };
97 ...
72 clocks { 98 clocks {
73 compatible = "simple-bus"; 99 compatible = "simple-bus";
74 #address-cells = <1>; 100 #address-cells = <1>;
diff --git a/arch/arm/boot/dts/tegra124-jetson-tk1.dts b/arch/arm/boot/dts/tegra124-jetson-tk1.dts
index 4eb540be368f..dbfaba09703a 100644
--- a/arch/arm/boot/dts/tegra124-jetson-tk1.dts
+++ b/arch/arm/boot/dts/tegra124-jetson-tk1.dts
@@ -1673,6 +1673,13 @@
1673 nvidia,core-pwr-off-time = <61036>; 1673 nvidia,core-pwr-off-time = <61036>;
1674 nvidia,core-power-req-active-high; 1674 nvidia,core-power-req-active-high;
1675 nvidia,sys-clock-req-active-high; 1675 nvidia,sys-clock-req-active-high;
1676
1677 i2c-thermtrip {
1678 nvidia,i2c-controller-id = <4>;
1679 nvidia,bus-addr = <0x40>;
1680 nvidia,reg-addr = <0x36>;
1681 nvidia,reg-data = <0x2>;
1682 };
1676 }; 1683 };
1677 1684
1678 /* Serial ATA */ 1685 /* Serial ATA */
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index d0be9a1ef6b8..5d1a318f1302 100644
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -27,6 +27,7 @@ config ARCH_TEGRA_2x_SOC
27 select PINCTRL_TEGRA20 27 select PINCTRL_TEGRA20
28 select PL310_ERRATA_727915 if CACHE_L2X0 28 select PL310_ERRATA_727915 if CACHE_L2X0
29 select PL310_ERRATA_769419 if CACHE_L2X0 29 select PL310_ERRATA_769419 if CACHE_L2X0
30 select TEGRA_TIMER
30 help 31 help
31 Support for NVIDIA Tegra AP20 and T20 processors, based on the 32 Support for NVIDIA Tegra AP20 and T20 processors, based on the
32 ARM CortexA9MP CPU and the ARM PL310 L2 cache controller 33 ARM CortexA9MP CPU and the ARM PL310 L2 cache controller
@@ -37,6 +38,7 @@ config ARCH_TEGRA_3x_SOC
37 select ARM_ERRATA_764369 if SMP 38 select ARM_ERRATA_764369 if SMP
38 select PINCTRL_TEGRA30 39 select PINCTRL_TEGRA30
39 select PL310_ERRATA_769419 if CACHE_L2X0 40 select PL310_ERRATA_769419 if CACHE_L2X0
41 select TEGRA_TIMER
40 help 42 help
41 Support for NVIDIA Tegra T30 processor family, based on the 43 Support for NVIDIA Tegra T30 processor family, based on the
42 ARM CortexA9MP CPU and the ARM PL310 L2 cache controller 44 ARM CortexA9MP CPU and the ARM PL310 L2 cache controller
@@ -47,6 +49,7 @@ config ARCH_TEGRA_114_SOC
47 select ARM_L1_CACHE_SHIFT_6 49 select ARM_L1_CACHE_SHIFT_6
48 select HAVE_ARM_ARCH_TIMER 50 select HAVE_ARM_ARCH_TIMER
49 select PINCTRL_TEGRA114 51 select PINCTRL_TEGRA114
52 select TEGRA_TIMER
50 help 53 help
51 Support for NVIDIA Tegra T114 processor family, based on the 54 Support for NVIDIA Tegra T114 processor family, based on the
52 ARM CortexA15MP CPU 55 ARM CortexA15MP CPU
@@ -56,6 +59,7 @@ config ARCH_TEGRA_124_SOC
56 select ARM_L1_CACHE_SHIFT_6 59 select ARM_L1_CACHE_SHIFT_6
57 select HAVE_ARM_ARCH_TIMER 60 select HAVE_ARM_ARCH_TIMER
58 select PINCTRL_TEGRA124 61 select PINCTRL_TEGRA124
62 select TEGRA_TIMER
59 help 63 help
60 Support for NVIDIA Tegra T124 processor family, based on the 64 Support for NVIDIA Tegra T124 processor family, based on the
61 ARM CortexA15MP CPU 65 ARM CortexA15MP CPU
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index fc01ec27d3c8..c062b6105d49 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -47,6 +47,9 @@ config SUN5I_HSTIMER
47 select CLKSRC_MMIO 47 select CLKSRC_MMIO
48 bool 48 bool
49 49
50config TEGRA_TIMER
51 bool
52
50config VT8500_TIMER 53config VT8500_TIMER
51 bool 54 bool
52 55
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index 94d90b24b56b..ba9ebd868ec5 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -27,7 +27,7 @@ obj-$(CONFIG_ARCH_U300) += timer-u300.o
27obj-$(CONFIG_SUN4I_TIMER) += sun4i_timer.o 27obj-$(CONFIG_SUN4I_TIMER) += sun4i_timer.o
28obj-$(CONFIG_SUN5I_HSTIMER) += timer-sun5i.o 28obj-$(CONFIG_SUN5I_HSTIMER) += timer-sun5i.o
29obj-$(CONFIG_MESON6_TIMER) += meson6_timer.o 29obj-$(CONFIG_MESON6_TIMER) += meson6_timer.o
30obj-$(CONFIG_ARCH_TEGRA) += tegra20_timer.o 30obj-$(CONFIG_TEGRA_TIMER) += tegra20_timer.o
31obj-$(CONFIG_VT8500_TIMER) += vt8500_timer.o 31obj-$(CONFIG_VT8500_TIMER) += vt8500_timer.o
32obj-$(CONFIG_ARCH_NSPIRE) += zevio-timer.o 32obj-$(CONFIG_ARCH_NSPIRE) += zevio-timer.o
33obj-$(CONFIG_ARCH_BCM_MOBILE) += bcm_kona_timer.o 33obj-$(CONFIG_ARCH_BCM_MOBILE) += bcm_kona_timer.o
diff --git a/drivers/soc/tegra/fuse/fuse-tegra.c b/drivers/soc/tegra/fuse/fuse-tegra.c
index 011a3363c265..c0d660f1aaac 100644
--- a/drivers/soc/tegra/fuse/fuse-tegra.c
+++ b/drivers/soc/tegra/fuse/fuse-tegra.c
@@ -81,6 +81,7 @@ static const struct of_device_id car_match[] __initconst = {
81 { .compatible = "nvidia,tegra30-car", }, 81 { .compatible = "nvidia,tegra30-car", },
82 { .compatible = "nvidia,tegra114-car", }, 82 { .compatible = "nvidia,tegra114-car", },
83 { .compatible = "nvidia,tegra124-car", }, 83 { .compatible = "nvidia,tegra124-car", },
84 { .compatible = "nvidia,tegra132-car", },
84 {}, 85 {},
85}; 86};
86 87
diff --git a/drivers/soc/tegra/fuse/fuse-tegra30.c b/drivers/soc/tegra/fuse/fuse-tegra30.c
index 8646fa920d8d..4d2f71bf65c5 100644
--- a/drivers/soc/tegra/fuse/fuse-tegra30.c
+++ b/drivers/soc/tegra/fuse/fuse-tegra30.c
@@ -56,7 +56,7 @@ struct tegra_fuse_info {
56 56
57static void __iomem *fuse_base; 57static void __iomem *fuse_base;
58static struct clk *fuse_clk; 58static struct clk *fuse_clk;
59static struct tegra_fuse_info *fuse_info; 59static const struct tegra_fuse_info *fuse_info;
60 60
61u32 tegra30_fuse_readl(const unsigned int offset) 61u32 tegra30_fuse_readl(const unsigned int offset)
62{ 62{
@@ -78,18 +78,18 @@ u32 tegra30_fuse_readl(const unsigned int offset)
78 return val; 78 return val;
79} 79}
80 80
81static struct tegra_fuse_info tegra30_info = { 81static const struct tegra_fuse_info tegra30_info = {
82 .size = 0x2a4, 82 .size = 0x2a4,
83 .spare_bit = 0x144, 83 .spare_bit = 0x144,
84 .speedo_idx = SPEEDO_TEGRA30, 84 .speedo_idx = SPEEDO_TEGRA30,
85}; 85};
86 86
87static struct tegra_fuse_info tegra114_info = { 87static const struct tegra_fuse_info tegra114_info = {
88 .size = 0x2a0, 88 .size = 0x2a0,
89 .speedo_idx = SPEEDO_TEGRA114, 89 .speedo_idx = SPEEDO_TEGRA114,
90}; 90};
91 91
92static struct tegra_fuse_info tegra124_info = { 92static const struct tegra_fuse_info tegra124_info = {
93 .size = 0x300, 93 .size = 0x300,
94 .speedo_idx = SPEEDO_TEGRA124, 94 .speedo_idx = SPEEDO_TEGRA124,
95}; 95};
@@ -182,6 +182,7 @@ static void __init legacy_fuse_init(void)
182 fuse_info = &tegra114_info; 182 fuse_info = &tegra114_info;
183 break; 183 break;
184 case TEGRA124: 184 case TEGRA124:
185 case TEGRA132:
185 fuse_info = &tegra124_info; 186 fuse_info = &tegra124_info;
186 break; 187 break;
187 default: 188 default:
diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
index a2c0ceb95f8f..c956395cf46f 100644
--- a/drivers/soc/tegra/pmc.c
+++ b/drivers/soc/tegra/pmc.c
@@ -70,6 +70,10 @@
70 70
71#define PMC_SCRATCH41 0x140 71#define PMC_SCRATCH41 0x140
72 72
73#define PMC_SENSOR_CTRL 0x1b0
74#define PMC_SENSOR_CTRL_SCRATCH_WRITE (1 << 2)
75#define PMC_SENSOR_CTRL_ENABLE_RST (1 << 1)
76
73#define IO_DPD_REQ 0x1b8 77#define IO_DPD_REQ 0x1b8
74#define IO_DPD_REQ_CODE_IDLE (0 << 30) 78#define IO_DPD_REQ_CODE_IDLE (0 << 30)
75#define IO_DPD_REQ_CODE_OFF (1 << 30) 79#define IO_DPD_REQ_CODE_OFF (1 << 30)
@@ -81,6 +85,18 @@
81#define IO_DPD2_STATUS 0x1c4 85#define IO_DPD2_STATUS 0x1c4
82#define SEL_DPD_TIM 0x1c8 86#define SEL_DPD_TIM 0x1c8
83 87
88#define PMC_SCRATCH54 0x258
89#define PMC_SCRATCH54_DATA_SHIFT 8
90#define PMC_SCRATCH54_ADDR_SHIFT 0
91
92#define PMC_SCRATCH55 0x25c
93#define PMC_SCRATCH55_RESET_TEGRA (1 << 31)
94#define PMC_SCRATCH55_CNTRL_ID_SHIFT 27
95#define PMC_SCRATCH55_PINMUX_SHIFT 24
96#define PMC_SCRATCH55_16BITOP (1 << 15)
97#define PMC_SCRATCH55_CHECKSUM_SHIFT 16
98#define PMC_SCRATCH55_I2CSLV1_SHIFT 0
99
84#define GPU_RG_CNTRL 0x2d4 100#define GPU_RG_CNTRL 0x2d4
85 101
86struct tegra_pmc_soc { 102struct tegra_pmc_soc {
@@ -88,6 +104,9 @@ struct tegra_pmc_soc {
88 const char *const *powergates; 104 const char *const *powergates;
89 unsigned int num_cpu_powergates; 105 unsigned int num_cpu_powergates;
90 const u8 *cpu_powergates; 106 const u8 *cpu_powergates;
107
108 bool has_tsense_reset;
109 bool has_gpu_clamps;
91}; 110};
92 111
93/** 112/**
@@ -110,6 +129,7 @@ struct tegra_pmc_soc {
110 * @powergates_lock: mutex for power gate register access 129 * @powergates_lock: mutex for power gate register access
111 */ 130 */
112struct tegra_pmc { 131struct tegra_pmc {
132 struct device *dev;
113 void __iomem *base; 133 void __iomem *base;
114 struct clk *clk; 134 struct clk *clk;
115 135
@@ -225,11 +245,11 @@ int tegra_powergate_remove_clamping(int id)
225 return -EINVAL; 245 return -EINVAL;
226 246
227 /* 247 /*
228 * The Tegra124 GPU has a separate register (with different semantics) 248 * On Tegra124 and later, the clamps for the GPU are controlled by a
229 * to remove clamps. 249 * separate register (with different semantics).
230 */ 250 */
231 if (tegra_get_chip_id() == TEGRA124) { 251 if (id == TEGRA_POWERGATE_3D) {
232 if (id == TEGRA_POWERGATE_3D) { 252 if (pmc->soc->has_gpu_clamps) {
233 tegra_pmc_writel(0, GPU_RG_CNTRL); 253 tegra_pmc_writel(0, GPU_RG_CNTRL);
234 return 0; 254 return 0;
235 } 255 }
@@ -703,6 +723,83 @@ static void tegra_pmc_init(struct tegra_pmc *pmc)
703 tegra_pmc_writel(value, PMC_CNTRL); 723 tegra_pmc_writel(value, PMC_CNTRL);
704} 724}
705 725
726void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
727{
728 static const char disabled[] = "emergency thermal reset disabled";
729 u32 pmu_addr, ctrl_id, reg_addr, reg_data, pinmux;
730 struct device *dev = pmc->dev;
731 struct device_node *np;
732 u32 value, checksum;
733
734 if (!pmc->soc->has_tsense_reset)
735 goto out;
736
737 np = of_find_node_by_name(pmc->dev->of_node, "i2c-thermtrip");
738 if (!np) {
739 dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
740 goto out;
741 }
742
743 if (of_property_read_u32(np, "nvidia,i2c-controller-id", &ctrl_id)) {
744 dev_err(dev, "I2C controller ID missing, %s.\n", disabled);
745 goto out;
746 }
747
748 if (of_property_read_u32(np, "nvidia,bus-addr", &pmu_addr)) {
749 dev_err(dev, "nvidia,bus-addr missing, %s.\n", disabled);
750 goto out;
751 }
752
753 if (of_property_read_u32(np, "nvidia,reg-addr", &reg_addr)) {
754 dev_err(dev, "nvidia,reg-addr missing, %s.\n", disabled);
755 goto out;
756 }
757
758 if (of_property_read_u32(np, "nvidia,reg-data", &reg_data)) {
759 dev_err(dev, "nvidia,reg-data missing, %s.\n", disabled);
760 goto out;
761 }
762
763 if (of_property_read_u32(np, "nvidia,pinmux-id", &pinmux))
764 pinmux = 0;
765
766 value = tegra_pmc_readl(PMC_SENSOR_CTRL);
767 value |= PMC_SENSOR_CTRL_SCRATCH_WRITE;
768 tegra_pmc_writel(value, PMC_SENSOR_CTRL);
769
770 value = (reg_data << PMC_SCRATCH54_DATA_SHIFT) |
771 (reg_addr << PMC_SCRATCH54_ADDR_SHIFT);
772 tegra_pmc_writel(value, PMC_SCRATCH54);
773
774 value = PMC_SCRATCH55_RESET_TEGRA;
775 value |= ctrl_id << PMC_SCRATCH55_CNTRL_ID_SHIFT;
776 value |= pinmux << PMC_SCRATCH55_PINMUX_SHIFT;
777 value |= pmu_addr << PMC_SCRATCH55_I2CSLV1_SHIFT;
778
779 /*
780 * Calculate checksum of SCRATCH54, SCRATCH55 fields. Bits 23:16 will
781 * contain the checksum and are currently zero, so they are not added.
782 */
783 checksum = reg_addr + reg_data + (value & 0xff) + ((value >> 8) & 0xff)
784 + ((value >> 24) & 0xff);
785 checksum &= 0xff;
786 checksum = 0x100 - checksum;
787
788 value |= checksum << PMC_SCRATCH55_CHECKSUM_SHIFT;
789
790 tegra_pmc_writel(value, PMC_SCRATCH55);
791
792 value = tegra_pmc_readl(PMC_SENSOR_CTRL);
793 value |= PMC_SENSOR_CTRL_ENABLE_RST;
794 tegra_pmc_writel(value, PMC_SENSOR_CTRL);
795
796 dev_info(pmc->dev, "emergency thermal reset enabled\n");
797
798out:
799 of_node_put(np);
800 return;
801}
802
706static int tegra_pmc_probe(struct platform_device *pdev) 803static int tegra_pmc_probe(struct platform_device *pdev)
707{ 804{
708 void __iomem *base = pmc->base; 805 void __iomem *base = pmc->base;
@@ -728,8 +825,12 @@ static int tegra_pmc_probe(struct platform_device *pdev)
728 return err; 825 return err;
729 } 826 }
730 827
828 pmc->dev = &pdev->dev;
829
731 tegra_pmc_init(pmc); 830 tegra_pmc_init(pmc);
732 831
832 tegra_pmc_init_tsense_reset(pmc);
833
733 if (IS_ENABLED(CONFIG_DEBUG_FS)) { 834 if (IS_ENABLED(CONFIG_DEBUG_FS)) {
734 err = tegra_powergate_debugfs_init(); 835 err = tegra_powergate_debugfs_init();
735 if (err < 0) 836 if (err < 0)
@@ -739,7 +840,7 @@ static int tegra_pmc_probe(struct platform_device *pdev)
739 return 0; 840 return 0;
740} 841}
741 842
742#ifdef CONFIG_PM_SLEEP 843#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
743static int tegra_pmc_suspend(struct device *dev) 844static int tegra_pmc_suspend(struct device *dev)
744{ 845{
745 tegra_pmc_writel(virt_to_phys(tegra_resume), PMC_SCRATCH41); 846 tegra_pmc_writel(virt_to_phys(tegra_resume), PMC_SCRATCH41);
@@ -753,10 +854,11 @@ static int tegra_pmc_resume(struct device *dev)
753 854
754 return 0; 855 return 0;
755} 856}
756#endif
757 857
758static SIMPLE_DEV_PM_OPS(tegra_pmc_pm_ops, tegra_pmc_suspend, tegra_pmc_resume); 858static SIMPLE_DEV_PM_OPS(tegra_pmc_pm_ops, tegra_pmc_suspend, tegra_pmc_resume);
759 859
860#endif
861
760static const char * const tegra20_powergates[] = { 862static const char * const tegra20_powergates[] = {
761 [TEGRA_POWERGATE_CPU] = "cpu", 863 [TEGRA_POWERGATE_CPU] = "cpu",
762 [TEGRA_POWERGATE_3D] = "3d", 864 [TEGRA_POWERGATE_3D] = "3d",
@@ -772,6 +874,8 @@ static const struct tegra_pmc_soc tegra20_pmc_soc = {
772 .powergates = tegra20_powergates, 874 .powergates = tegra20_powergates,
773 .num_cpu_powergates = 0, 875 .num_cpu_powergates = 0,
774 .cpu_powergates = NULL, 876 .cpu_powergates = NULL,
877 .has_tsense_reset = false,
878 .has_gpu_clamps = false,
775}; 879};
776 880
777static const char * const tegra30_powergates[] = { 881static const char * const tegra30_powergates[] = {
@@ -803,6 +907,8 @@ static const struct tegra_pmc_soc tegra30_pmc_soc = {
803 .powergates = tegra30_powergates, 907 .powergates = tegra30_powergates,
804 .num_cpu_powergates = ARRAY_SIZE(tegra30_cpu_powergates), 908 .num_cpu_powergates = ARRAY_SIZE(tegra30_cpu_powergates),
805 .cpu_powergates = tegra30_cpu_powergates, 909 .cpu_powergates = tegra30_cpu_powergates,
910 .has_tsense_reset = true,
911 .has_gpu_clamps = false,
806}; 912};
807 913
808static const char * const tegra114_powergates[] = { 914static const char * const tegra114_powergates[] = {
@@ -838,6 +944,8 @@ static const struct tegra_pmc_soc tegra114_pmc_soc = {
838 .powergates = tegra114_powergates, 944 .powergates = tegra114_powergates,
839 .num_cpu_powergates = ARRAY_SIZE(tegra114_cpu_powergates), 945 .num_cpu_powergates = ARRAY_SIZE(tegra114_cpu_powergates),
840 .cpu_powergates = tegra114_cpu_powergates, 946 .cpu_powergates = tegra114_cpu_powergates,
947 .has_tsense_reset = true,
948 .has_gpu_clamps = false,
841}; 949};
842 950
843static const char * const tegra124_powergates[] = { 951static const char * const tegra124_powergates[] = {
@@ -879,6 +987,8 @@ static const struct tegra_pmc_soc tegra124_pmc_soc = {
879 .powergates = tegra124_powergates, 987 .powergates = tegra124_powergates,
880 .num_cpu_powergates = ARRAY_SIZE(tegra124_cpu_powergates), 988 .num_cpu_powergates = ARRAY_SIZE(tegra124_cpu_powergates),
881 .cpu_powergates = tegra124_cpu_powergates, 989 .cpu_powergates = tegra124_cpu_powergates,
990 .has_tsense_reset = true,
991 .has_gpu_clamps = true,
882}; 992};
883 993
884static const struct of_device_id tegra_pmc_match[] = { 994static const struct of_device_id tegra_pmc_match[] = {
@@ -894,7 +1004,9 @@ static struct platform_driver tegra_pmc_driver = {
894 .name = "tegra-pmc", 1004 .name = "tegra-pmc",
895 .suppress_bind_attrs = true, 1005 .suppress_bind_attrs = true,
896 .of_match_table = tegra_pmc_match, 1006 .of_match_table = tegra_pmc_match,
1007#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
897 .pm = &tegra_pmc_pm_ops, 1008 .pm = &tegra_pmc_pm_ops,
1009#endif
898 }, 1010 },
899 .probe = tegra_pmc_probe, 1011 .probe = tegra_pmc_probe,
900}; 1012};
diff --git a/include/soc/tegra/fuse.h b/include/soc/tegra/fuse.h
index 8e1249474e84..b5f7b5f8d008 100644
--- a/include/soc/tegra/fuse.h
+++ b/include/soc/tegra/fuse.h
@@ -21,6 +21,7 @@
21#define TEGRA30 0x30 21#define TEGRA30 0x30
22#define TEGRA114 0x35 22#define TEGRA114 0x35
23#define TEGRA124 0x40 23#define TEGRA124 0x40
24#define TEGRA132 0x13
24 25
25#define TEGRA_FUSE_SKU_CALIB_0 0xf0 26#define TEGRA_FUSE_SKU_CALIB_0 0xf0
26#define TEGRA30_FUSE_SATA_CALIB 0x124 27#define TEGRA30_FUSE_SATA_CALIB 0x124
diff --git a/include/soc/tegra/pm.h b/include/soc/tegra/pm.h
index 30fe2078a547..03909101d4e7 100644
--- a/include/soc/tegra/pm.h
+++ b/include/soc/tegra/pm.h
@@ -17,7 +17,7 @@ enum tegra_suspend_mode {
17 TEGRA_MAX_SUSPEND_MODE, 17 TEGRA_MAX_SUSPEND_MODE,
18}; 18};
19 19
20#ifdef CONFIG_PM_SLEEP 20#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_ARM)
21enum tegra_suspend_mode 21enum tegra_suspend_mode
22tegra_pm_validate_suspend_mode(enum tegra_suspend_mode mode); 22tegra_pm_validate_suspend_mode(enum tegra_suspend_mode mode);
23 23