Browse Source

Merge branch 'tegra/cleanups' into next/cleanup2

Arnd Bergmann 13 years ago
parent
commit
fdd8397497

+ 3 - 3
arch/arm/boot/dts/tegra-paz00.dts

@@ -46,11 +46,11 @@
 	};
 	};
 
 
 	serial@70006200 {
 	serial@70006200 {
-		status = "disable";
+		clock-frequency = <216000000>;
 	};
 	};
 
 
 	serial@70006300 {
 	serial@70006300 {
-		clock-frequency = <216000000>;
+		status = "disable";
 	};
 	};
 
 
 	serial@70006400 {
 	serial@70006400 {
@@ -60,7 +60,7 @@
 	sdhci@c8000000 {
 	sdhci@c8000000 {
 		cd-gpios = <&gpio 173 0>; /* gpio PV5 */
 		cd-gpios = <&gpio 173 0>; /* gpio PV5 */
 		wp-gpios = <&gpio 57 0>;  /* gpio PH1 */
 		wp-gpios = <&gpio 57 0>;  /* gpio PH1 */
-		power-gpios = <&gpio 155 0>; /* gpio PT3 */
+		power-gpios = <&gpio 169 0>; /* gpio PV1 */
 	};
 	};
 
 
 	sdhci@c8000200 {
 	sdhci@c8000200 {

+ 16 - 2
arch/arm/mach-tegra/Kconfig

@@ -8,8 +8,16 @@ config ARCH_TEGRA_2x_SOC
 	select ARM_GIC
 	select ARM_GIC
 	select ARCH_REQUIRE_GPIOLIB
 	select ARCH_REQUIRE_GPIOLIB
 	select USB_ARCH_HAS_EHCI if USB_SUPPORT
 	select USB_ARCH_HAS_EHCI if USB_SUPPORT
-	select USB_ULPI if USB_SUPPORT
+	select USB_ULPI if USB
 	select USB_ULPI_VIEWPORT if USB_SUPPORT
 	select USB_ULPI_VIEWPORT if USB_SUPPORT
+	select ARM_ERRATA_720789
+	select ARM_ERRATA_742230
+	select ARM_ERRATA_751472
+	select ARM_ERRATA_754327
+	select ARM_ERRATA_764369
+	select PL310_ERRATA_727915 if CACHE_L2X0
+	select PL310_ERRATA_769419 if CACHE_L2X0
+	select CPU_FREQ_TABLE if CPU_FREQ
 	help
 	help
 	  Support for NVIDIA Tegra AP20 and T20 processors, based on the
 	  Support for NVIDIA Tegra AP20 and T20 processors, based on the
 	  ARM CortexA9MP CPU and the ARM PL310 L2 cache controller
 	  ARM CortexA9MP CPU and the ARM PL310 L2 cache controller
@@ -20,9 +28,15 @@ config ARCH_TEGRA_3x_SOC
 	select ARM_GIC
 	select ARM_GIC
 	select ARCH_REQUIRE_GPIOLIB
 	select ARCH_REQUIRE_GPIOLIB
 	select USB_ARCH_HAS_EHCI if USB_SUPPORT
 	select USB_ARCH_HAS_EHCI if USB_SUPPORT
-	select USB_ULPI if USB_SUPPORT
+	select USB_ULPI if USB
 	select USB_ULPI_VIEWPORT if USB_SUPPORT
 	select USB_ULPI_VIEWPORT if USB_SUPPORT
 	select USE_OF
 	select USE_OF
+	select ARM_ERRATA_743622
+	select ARM_ERRATA_751472
+	select ARM_ERRATA_754322
+	select ARM_ERRATA_764369
+	select PL310_ERRATA_769419 if CACHE_L2X0
+	select CPU_FREQ_TABLE if CPU_FREQ
 	help
 	help
 	  Support for NVIDIA Tegra T30 processor family, based on the
 	  Support for NVIDIA Tegra T30 processor family, based on the
 	  ARM CortexA9MP CPU and the ARM PL310 L2 cache controller
 	  ARM CortexA9MP CPU and the ARM PL310 L2 cache controller

+ 2 - 1
arch/arm/mach-tegra/Makefile

@@ -13,7 +13,8 @@ obj-$(CONFIG_ARCH_TEGRA_2x_SOC)		+= tegra2_emc.o
 obj-$(CONFIG_ARCH_TEGRA_2x_SOC)		+= pinmux-tegra20-tables.o
 obj-$(CONFIG_ARCH_TEGRA_2x_SOC)		+= pinmux-tegra20-tables.o
 obj-$(CONFIG_ARCH_TEGRA_3x_SOC)		+= pinmux-tegra30-tables.o
 obj-$(CONFIG_ARCH_TEGRA_3x_SOC)		+= pinmux-tegra30-tables.o
 obj-$(CONFIG_ARCH_TEGRA_3x_SOC)		+= board-dt-tegra30.o
 obj-$(CONFIG_ARCH_TEGRA_3x_SOC)		+= board-dt-tegra30.o
-obj-$(CONFIG_SMP)                       += platsmp.o localtimer.o headsmp.o
+obj-$(CONFIG_SMP)			+= platsmp.o headsmp.o
+obj-$(CONFIG_LOCAL_TIMERS)		+= localtimer.o
 obj-$(CONFIG_HOTPLUG_CPU)               += hotplug.o
 obj-$(CONFIG_HOTPLUG_CPU)               += hotplug.o
 obj-$(CONFIG_TEGRA_SYSTEM_DMA)		+= dma.o
 obj-$(CONFIG_TEGRA_SYSTEM_DMA)		+= dma.o
 obj-$(CONFIG_CPU_FREQ)                  += cpu-tegra.o
 obj-$(CONFIG_CPU_FREQ)                  += cpu-tegra.o

+ 3 - 3
arch/arm/mach-tegra/board-harmony-pinmux.c

@@ -53,7 +53,7 @@ static struct tegra_pingroup_config harmony_pinmux[] = {
 	{TEGRA_PINGROUP_GME,   TEGRA_MUX_SDIO4,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_GME,   TEGRA_MUX_SDIO4,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_GPU,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_GPU,   TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_GPU7,  TEGRA_MUX_RTCK,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_GPU7,  TEGRA_MUX_RTCK,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
-	{TEGRA_PINGROUP_GPV,   TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
+	{TEGRA_PINGROUP_GPV,   TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_HDINT, TEGRA_MUX_HDMI,          TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_HDINT, TEGRA_MUX_HDMI,          TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_I2CP,  TEGRA_MUX_I2C,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_I2CP,  TEGRA_MUX_I2C,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_IRRX,  TEGRA_MUX_UARTA,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_IRRX,  TEGRA_MUX_UARTA,         TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},
@@ -112,10 +112,10 @@ static struct tegra_pingroup_config harmony_pinmux[] = {
 	{TEGRA_PINGROUP_SDC,   TEGRA_MUX_PWM,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_SDC,   TEGRA_MUX_PWM,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_SDD,   TEGRA_MUX_PWM,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SDD,   TEGRA_MUX_PWM,           TEGRA_PUPD_PULL_UP,   TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SDIO1, TEGRA_MUX_SDIO1,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SDIO1, TEGRA_MUX_SDIO1,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
-	{TEGRA_PINGROUP_SLXA,  TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
+	{TEGRA_PINGROUP_SLXA,  TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_SLXC,  TEGRA_MUX_SPDIF,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SLXC,  TEGRA_MUX_SPDIF,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SLXD,  TEGRA_MUX_SPDIF,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SLXD,  TEGRA_MUX_SPDIF,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
-	{TEGRA_PINGROUP_SLXK,  TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
+	{TEGRA_PINGROUP_SLXK,  TEGRA_MUX_PCIE,          TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_SPDI,  TEGRA_MUX_RSVD2,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SPDI,  TEGRA_MUX_RSVD2,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SPDO,  TEGRA_MUX_RSVD2,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SPDO,  TEGRA_MUX_RSVD2,         TEGRA_PUPD_NORMAL,    TEGRA_TRI_TRISTATE},
 	{TEGRA_PINGROUP_SPIA,  TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},
 	{TEGRA_PINGROUP_SPIA,  TEGRA_MUX_GMI,           TEGRA_PUPD_NORMAL,    TEGRA_TRI_NORMAL},

+ 4 - 4
arch/arm/mach-tegra/board-paz00.c

@@ -60,9 +60,9 @@ static struct plat_serial8250_port debug_uart_platform_data[] = {
 		.uartclk	= 216000000,
 		.uartclk	= 216000000,
 	}, {
 	}, {
 		/* serial port on mini-pcie */
 		/* serial port on mini-pcie */
-		.membase	= IO_ADDRESS(TEGRA_UARTD_BASE),
-		.mapbase	= TEGRA_UARTD_BASE,
-		.irq		= INT_UARTD,
+		.membase	= IO_ADDRESS(TEGRA_UARTC_BASE),
+		.mapbase	= TEGRA_UARTC_BASE,
+		.irq		= INT_UARTC,
 		.flags		= UPF_BOOT_AUTOCONF | UPF_FIXED_TYPE,
 		.flags		= UPF_BOOT_AUTOCONF | UPF_FIXED_TYPE,
 		.type		= PORT_TEGRA,
 		.type		= PORT_TEGRA,
 		.iotype		= UPIO_MEM,
 		.iotype		= UPIO_MEM,
@@ -174,7 +174,7 @@ static void __init tegra_paz00_fixup(struct tag *tags, char **cmdline,
 static __initdata struct tegra_clk_init_table paz00_clk_init_table[] = {
 static __initdata struct tegra_clk_init_table paz00_clk_init_table[] = {
 	/* name		parent		rate		enabled */
 	/* name		parent		rate		enabled */
 	{ "uarta",	"pll_p",	216000000,	true },
 	{ "uarta",	"pll_p",	216000000,	true },
-	{ "uartd",	"pll_p",	216000000,	true },
+	{ "uartc",	"pll_p",	216000000,	true },
 
 
 	{ "pll_p_out4",	"pll_p",	24000000,	true },
 	{ "pll_p_out4",	"pll_p",	24000000,	true },
 	{ "usbd",	"clk_m",	12000000,	false },
 	{ "usbd",	"clk_m",	12000000,	false },

+ 1 - 1
arch/arm/mach-tegra/board-paz00.h

@@ -22,7 +22,7 @@
 /* SDCARD */
 /* SDCARD */
 #define TEGRA_GPIO_SD1_CD		TEGRA_GPIO_PV5
 #define TEGRA_GPIO_SD1_CD		TEGRA_GPIO_PV5
 #define TEGRA_GPIO_SD1_WP		TEGRA_GPIO_PH1
 #define TEGRA_GPIO_SD1_WP		TEGRA_GPIO_PH1
-#define TEGRA_GPIO_SD1_POWER		TEGRA_GPIO_PT3
+#define TEGRA_GPIO_SD1_POWER		TEGRA_GPIO_PV1
 
 
 /* ULPI */
 /* ULPI */
 #define TEGRA_ULPI_RST			TEGRA_GPIO_PV0
 #define TEGRA_ULPI_RST			TEGRA_GPIO_PV0

+ 0 - 2
arch/arm/mach-tegra/common.c

@@ -95,8 +95,6 @@ static void __init tegra_init_cache(u32 tag_latency, u32 data_latency)
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
 void __init tegra20_init_early(void)
 void __init tegra20_init_early(void)
 {
 {
-	disable_hlt();  /* idle WFI usage needs to be confirmed */
-
 	tegra_init_fuse();
 	tegra_init_fuse();
 	tegra2_init_clocks();
 	tegra2_init_clocks();
 	tegra_clk_init_from_table(tegra20_clk_init_table);
 	tegra_clk_init_from_table(tegra20_clk_init_table);

+ 12 - 4
arch/arm/mach-tegra/pcie.c

@@ -585,10 +585,10 @@ static void tegra_pcie_setup_translations(void)
 	afi_writel(0, AFI_MSI_BAR_SZ);
 	afi_writel(0, AFI_MSI_BAR_SZ);
 }
 }
 
 
-static void tegra_pcie_enable_controller(void)
+static int tegra_pcie_enable_controller(void)
 {
 {
 	u32 val, reg;
 	u32 val, reg;
-	int i;
+	int i, timeout;
 
 
 	/* Enable slot clock and pulse the reset signals */
 	/* Enable slot clock and pulse the reset signals */
 	for (i = 0, reg = AFI_PEX0_CTRL; i < 2; i++, reg += 0x8) {
 	for (i = 0, reg = AFI_PEX0_CTRL; i < 2; i++, reg += 0x8) {
@@ -639,8 +639,14 @@ static void tegra_pcie_enable_controller(void)
 	pads_writel(0xfa5cfa5c, 0xc8);
 	pads_writel(0xfa5cfa5c, 0xc8);
 
 
 	/* Wait for the PLL to lock */
 	/* Wait for the PLL to lock */
+	timeout = 300;
 	do {
 	do {
 		val = pads_readl(PADS_PLL_CTL);
 		val = pads_readl(PADS_PLL_CTL);
+		usleep_range(1000, 1000);
+		if (--timeout == 0) {
+			pr_err("Tegra PCIe error: timeout waiting for PLL\n");
+			return -EBUSY;
+		}
 	} while (!(val & PADS_PLL_CTL_LOCKDET));
 	} while (!(val & PADS_PLL_CTL_LOCKDET));
 
 
 	/* turn off IDDQ override */
 	/* turn off IDDQ override */
@@ -671,7 +677,7 @@ static void tegra_pcie_enable_controller(void)
 	/* Disable all execptions */
 	/* Disable all execptions */
 	afi_writel(0, AFI_FPCI_ERROR_MASKS);
 	afi_writel(0, AFI_FPCI_ERROR_MASKS);
 
 
-	return;
+	return 0;
 }
 }
 
 
 static void tegra_pcie_xclk_clamp(bool clamp)
 static void tegra_pcie_xclk_clamp(bool clamp)
@@ -921,7 +927,9 @@ int __init tegra_pcie_init(bool init_port0, bool init_port1)
 	if (err)
 	if (err)
 		return err;
 		return err;
 
 
-	tegra_pcie_enable_controller();
+	err = tegra_pcie_enable_controller();
+	if (err)
+		return err;
 
 
 	/* setup the AFI address translations */
 	/* setup the AFI address translations */
 	tegra_pcie_setup_translations();
 	tegra_pcie_setup_translations();

+ 11 - 0
arch/arm/mach-tegra/usb_phy.c

@@ -22,6 +22,7 @@
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/err.h>
 #include <linux/err.h>
+#include <linux/export.h>
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
 #include <linux/io.h>
 #include <linux/gpio.h>
 #include <linux/gpio.h>
@@ -730,6 +731,7 @@ err0:
 	kfree(phy);
 	kfree(phy);
 	return ERR_PTR(err);
 	return ERR_PTR(err);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_usb_phy_open);
 
 
 int tegra_usb_phy_power_on(struct tegra_usb_phy *phy)
 int tegra_usb_phy_power_on(struct tegra_usb_phy *phy)
 {
 {
@@ -738,6 +740,7 @@ int tegra_usb_phy_power_on(struct tegra_usb_phy *phy)
 	else
 	else
 		return utmi_phy_power_on(phy);
 		return utmi_phy_power_on(phy);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_usb_phy_power_on);
 
 
 void tegra_usb_phy_power_off(struct tegra_usb_phy *phy)
 void tegra_usb_phy_power_off(struct tegra_usb_phy *phy)
 {
 {
@@ -746,18 +749,21 @@ void tegra_usb_phy_power_off(struct tegra_usb_phy *phy)
 	else
 	else
 		utmi_phy_power_off(phy);
 		utmi_phy_power_off(phy);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_usb_phy_power_off);
 
 
 void tegra_usb_phy_preresume(struct tegra_usb_phy *phy)
 void tegra_usb_phy_preresume(struct tegra_usb_phy *phy)
 {
 {
 	if (!phy_is_ulpi(phy))
 	if (!phy_is_ulpi(phy))
 		utmi_phy_preresume(phy);
 		utmi_phy_preresume(phy);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_usb_phy_preresume);
 
 
 void tegra_usb_phy_postresume(struct tegra_usb_phy *phy)
 void tegra_usb_phy_postresume(struct tegra_usb_phy *phy)
 {
 {
 	if (!phy_is_ulpi(phy))
 	if (!phy_is_ulpi(phy))
 		utmi_phy_postresume(phy);
 		utmi_phy_postresume(phy);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_usb_phy_postresume);
 
 
 void tegra_ehci_phy_restore_start(struct tegra_usb_phy *phy,
 void tegra_ehci_phy_restore_start(struct tegra_usb_phy *phy,
 				 enum tegra_usb_phy_port_speed port_speed)
 				 enum tegra_usb_phy_port_speed port_speed)
@@ -765,24 +771,28 @@ void tegra_ehci_phy_restore_start(struct tegra_usb_phy *phy,
 	if (!phy_is_ulpi(phy))
 	if (!phy_is_ulpi(phy))
 		utmi_phy_restore_start(phy, port_speed);
 		utmi_phy_restore_start(phy, port_speed);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_ehci_phy_restore_start);
 
 
 void tegra_ehci_phy_restore_end(struct tegra_usb_phy *phy)
 void tegra_ehci_phy_restore_end(struct tegra_usb_phy *phy)
 {
 {
 	if (!phy_is_ulpi(phy))
 	if (!phy_is_ulpi(phy))
 		utmi_phy_restore_end(phy);
 		utmi_phy_restore_end(phy);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_ehci_phy_restore_end);
 
 
 void tegra_usb_phy_clk_disable(struct tegra_usb_phy *phy)
 void tegra_usb_phy_clk_disable(struct tegra_usb_phy *phy)
 {
 {
 	if (!phy_is_ulpi(phy))
 	if (!phy_is_ulpi(phy))
 		utmi_phy_clk_disable(phy);
 		utmi_phy_clk_disable(phy);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_usb_phy_clk_disable);
 
 
 void tegra_usb_phy_clk_enable(struct tegra_usb_phy *phy)
 void tegra_usb_phy_clk_enable(struct tegra_usb_phy *phy)
 {
 {
 	if (!phy_is_ulpi(phy))
 	if (!phy_is_ulpi(phy))
 		utmi_phy_clk_enable(phy);
 		utmi_phy_clk_enable(phy);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_usb_phy_clk_enable);
 
 
 void tegra_usb_phy_close(struct tegra_usb_phy *phy)
 void tegra_usb_phy_close(struct tegra_usb_phy *phy)
 {
 {
@@ -794,3 +804,4 @@ void tegra_usb_phy_close(struct tegra_usb_phy *phy)
 	clk_put(phy->pll_u);
 	clk_put(phy->pll_u);
 	kfree(phy);
 	kfree(phy);
 }
 }
+EXPORT_SYMBOL_GPL(tegra_usb_phy_close);