public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH] ARM: rockchip: disable jtag/sdmmc autoswitching on rk3288
@ 2015-01-11 22:09 Heiko Stübner
  2015-01-12 22:08 ` Olof Johansson
  0 siblings, 1 reply; 2+ messages in thread
From: Heiko Stübner @ 2015-01-11 22:09 UTC (permalink / raw)
  To: linux-arm-kernel

rk3288 SoCs have a function to automatically switch between jtag/sdmmc pinmux
settings depending on the card state. This collides with a lot of assumptions.

It only works when using the internal card-detect mechanism and breaks
horribly when using either the normal card-detect via the slot-gpio function
or via any other pin. Also there is of course no link between the mmc and jtag
on the software-side, so the jtag clocks may very well be disabled when the
card is ejected and the soc switches back to the jtag pinmux.

Leaving the switching function enabled did result in mmc timeouts and rcu
stalls thus hanging the system on 3.19-rc1. Therefore disable it in all cases,
as we expect the devicetree to explicitly select either mmc or jtag pinmuxes
anyway.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
 arch/arm/mach-rockchip/rockchip.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/arch/arm/mach-rockchip/rockchip.c b/arch/arm/mach-rockchip/rockchip.c
index d226b71..a611f48 100644
--- a/arch/arm/mach-rockchip/rockchip.c
+++ b/arch/arm/mach-rockchip/rockchip.c
@@ -19,11 +19,37 @@
 #include <linux/init.h>
 #include <linux/of_platform.h>
 #include <linux/irqchip.h>
+#include <linux/clk-provider.h>
+#include <linux/clocksource.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <asm/hardware/cache-l2x0.h>
 #include "core.h"
 
+#define RK3288_GRF_SOC_CON0 0x244
+
+static void __init rockchip_timer_init(void)
+{
+	if (of_machine_is_compatible("rockchip,rk3288")) {
+		struct regmap *grf;
+
+		/*
+		 * Disable auto jtag/sdmmc switching that causes issues
+		 * with the mmc controllers making them unreliable
+		 */
+		grf = syscon_regmap_lookup_by_compatible("rockchip,rk3288-grf");
+		if (!IS_ERR(grf))
+			regmap_write(grf, RK3288_GRF_SOC_CON0, 0x10000000);
+		else
+			pr_err("rockchip: could not get grf syscon\n");
+	}
+
+	of_clk_init(NULL);
+	clocksource_of_init();
+}
+
 static void __init rockchip_dt_init(void)
 {
 	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
@@ -42,6 +68,7 @@ static const char * const rockchip_board_dt_compat[] = {
 DT_MACHINE_START(ROCKCHIP_DT, "Rockchip Cortex-A9 (Device Tree)")
 	.l2c_aux_val	= 0,
 	.l2c_aux_mask	= ~0,
+	.init_time	= rockchip_timer_init,
 	.dt_compat	= rockchip_board_dt_compat,
 	.init_machine	= rockchip_dt_init,
 MACHINE_END
-- 
2.1.1

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH] ARM: rockchip: disable jtag/sdmmc autoswitching on rk3288
  2015-01-11 22:09 [PATCH] ARM: rockchip: disable jtag/sdmmc autoswitching on rk3288 Heiko Stübner
@ 2015-01-12 22:08 ` Olof Johansson
  0 siblings, 0 replies; 2+ messages in thread
From: Olof Johansson @ 2015-01-12 22:08 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Jan 11, 2015 at 11:09:23PM +0100, Heiko St?bner wrote:
> rk3288 SoCs have a function to automatically switch between jtag/sdmmc pinmux
> settings depending on the card state. This collides with a lot of assumptions.
> 
> It only works when using the internal card-detect mechanism and breaks
> horribly when using either the normal card-detect via the slot-gpio function
> or via any other pin. Also there is of course no link between the mmc and jtag
> on the software-side, so the jtag clocks may very well be disabled when the
> card is ejected and the soc switches back to the jtag pinmux.
> 
> Leaving the switching function enabled did result in mmc timeouts and rcu
> stalls thus hanging the system on 3.19-rc1. Therefore disable it in all cases,
> as we expect the devicetree to explicitly select either mmc or jtag pinmuxes
> anyway.
> 
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>

Thanks, applied.


-Olof

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-01-12 22:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-11 22:09 [PATCH] ARM: rockchip: disable jtag/sdmmc autoswitching on rk3288 Heiko Stübner
2015-01-12 22:08 ` Olof Johansson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox