]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00152668 [MX6]Enable arch_reset
authorAnson Huang <b20788@freescale.com>
Wed, 13 Jul 2011 05:52:41 +0000 (13:52 +0800)
committerOliver Wendt <ow@karo-electronics.de>
Mon, 30 Sep 2013 12:09:15 +0000 (14:09 +0200)
--OCRAM size is 256KB, confirmed by IC owner, the
  OCRAM_Aliasd 0.75MB is mapped to the same 256KB
  OCRAM.That means there is only 256KB physical
  OCRAM.

--Enable arch_reset function on MX6Q, For SMP, we
  need to clear the SRC_GPRx after the secondary
  cores brought up, or the wdog reset will fail;

Signed-off-by: Anson Huang <b20788@freescale.com>
arch/arm/mach-mx6/headsmp.S
arch/arm/mach-mx6/mm.c
arch/arm/plat-mxc/include/mach/mx6.h
arch/arm/plat-mxc/system.c

index c972d7364df837b78a13f7a825db7dccfcc820f1..331e844e4a6a1bd27fb939648899f179cff3aaae 100644 (file)
@@ -58,6 +58,14 @@ ENTRY(mx6_secondary_startup)
 
        /* invalidate l1-cache first */
        bl      v7_invalidate_l1
+       mrc     p15, 0, r0, c0, c0, 5
+       and r0, r0, #15
+       ldr r1, = 0x020d8020
+       add r1, r0, LSL#3
+
+       mov r0, #0
+       str r0, [r1]
+       str r0, [r1, #0x4]
 
        /* jump to secondary_startup */
        b secondary_startup
index 124144d61dce35d836e0670276518da6c1b46629..ab91c38f433e2102d26c76e43fa389b61c361b06 100644 (file)
@@ -61,7 +61,7 @@ void __init mx6_map_io(void)
 {
        iotable_init(mx6_io_desc, ARRAY_SIZE(mx6_io_desc));
        mxc_iomux_v3_init(IO_ADDRESS(MX6Q_IOMUXC_BASE_ADDR));
-       mxc_arch_reset_init(IO_ADDRESS(WDOG1_BASE_ADDR));
+       mxc_arch_reset_init(IO_ADDRESS(MX6Q_WDOG1_BASE_ADDR));
 }
 #ifdef CONFIG_CACHE_L2X0
 static int mxc_init_l2x0(void)
index 35aa7265103c7e6534625972aa671b61ff71ae58..dabb46332dbfe93963a74e1270d166d0484fa234 100644 (file)
 #define PCIE_ARB_BASE_ADDR              0x01000000
 #define PCIE_ARB_END_ADDR               0x01FFFFFF
 
+/* IRAM
+ */
+#define MX6Q_IRAM_BASE_ADDR            IRAM_BASE_ADDR
+#define MX6Q_IRAM_SIZE                 SZ_256K
+
 /* Blocks connected via pl301periph */
 #define ROMCP_ARB_BASE_ADDR             0x00000000
 #define ROMCP_ARB_END_ADDR              0x000FFFFF
 #define GPIO6_BASE_ADDR             (AIPS1_OFF_BASE_ADDR + 0x30000)
 #define GPIO7_BASE_ADDR             (AIPS1_OFF_BASE_ADDR + 0x34000)
 #define KPP_BASE_ADDR               (AIPS1_OFF_BASE_ADDR + 0x38000)
-#define WDOG1_BASE_ADDR             (AIPS1_OFF_BASE_ADDR + 0x3C000)
-#define WDOG2_BASE_ADDR             (AIPS1_OFF_BASE_ADDR + 0x40000)
+#define MX6Q_WDOG1_BASE_ADDR        (AIPS1_OFF_BASE_ADDR + 0x3C000)
+#define MX6Q_WDOG2_BASE_ADDR        (AIPS1_OFF_BASE_ADDR + 0x40000)
 #define CCM_BASE_ADDR               (AIPS1_OFF_BASE_ADDR + 0x44000)
 #define ANATOP_BASE_ADDR            (AIPS1_OFF_BASE_ADDR + 0x48000)
 #define USB_PHY0_BASE_ADDR          (AIPS1_OFF_BASE_ADDR + 0x49000)
index 8024f2ac177cbc49bfa4813615927713ceefa637..383013c7c76da1dbf01d6ad65da1797a66d1275c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 1999 ARM Limited
  * Copyright (C) 2000 Deep Blue Solutions Ltd
- * Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright 2006-2011 Freescale Semiconductor, Inc.
  * Copyright 2008 Juergen Beisert, kernel@pengutronix.de
  * Copyright 2009 Ilya Yanok, Emcraft Systems Ltd, yanok@emcraft.com
  *
 #include <linux/io.h>
 #include <linux/err.h>
 #include <linux/delay.h>
-
 #include <mach/hardware.h>
 #include <mach/common.h>
 #include <asm/proc-fns.h>
 #include <asm/system.h>
+#ifdef CONFIG_SMP
+#include <linux/smp.h>
+#endif
 #include <asm/mach-types.h>
 
 static void __iomem *wdog_base;
@@ -37,6 +39,19 @@ void arch_reset(char mode, const char *cmd)
 {
        unsigned int wcr_enable;
 
+#ifdef CONFIG_ARCH_MX6
+       /* wait for reset to assert... */
+       wcr_enable = (1 << 2);
+       __raw_writew(wcr_enable, wdog_base);
+
+       /* wait for reset to assert... */
+       mdelay(500);
+
+       printk(KERN_ERR "Watchdog reset failed to assert reset\n");
+
+       return;
+#endif
+
 #ifdef CONFIG_MACH_MX51_EFIKAMX
        if (machine_is_mx51_efikamx()) {
                mx51_efikamx_reset();