aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/configs/mxs_defconfig19
-rw-r--r--arch/arm/mach-mxs/mach-mxs.c62
-rw-r--r--arch/arm/mach-mxs/pm.c1
3 files changed, 44 insertions, 38 deletions
diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig
index 1d6d8fb7f4a1..4555c025629a 100644
--- a/arch/arm/configs/mxs_defconfig
+++ b/arch/arm/configs/mxs_defconfig
@@ -1,4 +1,3 @@
1CONFIG_EXPERIMENTAL=y
2CONFIG_SYSVIPC=y 1CONFIG_SYSVIPC=y
3CONFIG_NO_HZ=y 2CONFIG_NO_HZ=y
4CONFIG_HIGH_RES_TIMERS=y 3CONFIG_HIGH_RES_TIMERS=y
@@ -27,7 +26,6 @@ CONFIG_ARCH_MXS=y
27# CONFIG_ARM_THUMB is not set 26# CONFIG_ARM_THUMB is not set
28CONFIG_PREEMPT_VOLUNTARY=y 27CONFIG_PREEMPT_VOLUNTARY=y
29CONFIG_AEABI=y 28CONFIG_AEABI=y
30CONFIG_AUTO_ZRELADDR=y
31CONFIG_FPE_NWFPE=y 29CONFIG_FPE_NWFPE=y
32CONFIG_NET=y 30CONFIG_NET=y
33CONFIG_PACKET=y 31CONFIG_PACKET=y
@@ -43,8 +41,6 @@ CONFIG_SYN_COOKIES=y
43# CONFIG_INET_DIAG is not set 41# CONFIG_INET_DIAG is not set
44# CONFIG_IPV6 is not set 42# CONFIG_IPV6 is not set
45CONFIG_CAN=m 43CONFIG_CAN=m
46CONFIG_CAN_RAW=m
47CONFIG_CAN_BCM=m
48CONFIG_CAN_FLEXCAN=m 44CONFIG_CAN_FLEXCAN=m
49# CONFIG_WIRELESS is not set 45# CONFIG_WIRELESS is not set
50CONFIG_DEVTMPFS=y 46CONFIG_DEVTMPFS=y
@@ -52,7 +48,6 @@ CONFIG_DEVTMPFS_MOUNT=y
52# CONFIG_FIRMWARE_IN_KERNEL is not set 48# CONFIG_FIRMWARE_IN_KERNEL is not set
53CONFIG_MTD=y 49CONFIG_MTD=y
54CONFIG_MTD_CMDLINE_PARTS=y 50CONFIG_MTD_CMDLINE_PARTS=y
55CONFIG_MTD_CHAR=y
56CONFIG_MTD_BLOCK=y 51CONFIG_MTD_BLOCK=y
57CONFIG_MTD_DATAFLASH=y 52CONFIG_MTD_DATAFLASH=y
58CONFIG_MTD_M25P80=y 53CONFIG_MTD_M25P80=y
@@ -67,12 +62,12 @@ CONFIG_SCSI=y
67CONFIG_BLK_DEV_SD=y 62CONFIG_BLK_DEV_SD=y
68CONFIG_NETDEVICES=y 63CONFIG_NETDEVICES=y
69CONFIG_ENC28J60=y 64CONFIG_ENC28J60=y
70CONFIG_USB_USBNET=y
71CONFIG_USB_NET_SMSC95XX=y
72CONFIG_SMSC_PHY=y 65CONFIG_SMSC_PHY=y
73CONFIG_ICPLUS_PHY=y 66CONFIG_ICPLUS_PHY=y
74CONFIG_REALTEK_PHY=y 67CONFIG_REALTEK_PHY=y
75CONFIG_MICREL_PHY=y 68CONFIG_MICREL_PHY=y
69CONFIG_USB_USBNET=y
70CONFIG_USB_NET_SMSC95XX=y
76# CONFIG_WLAN is not set 71# CONFIG_WLAN is not set
77# CONFIG_INPUT_MOUSEDEV_PSAUX is not set 72# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
78CONFIG_INPUT_EVDEV=y 73CONFIG_INPUT_EVDEV=y
@@ -110,7 +105,6 @@ CONFIG_LCD_CLASS_DEVICE=y
110CONFIG_BACKLIGHT_CLASS_DEVICE=y 105CONFIG_BACKLIGHT_CLASS_DEVICE=y
111CONFIG_BACKLIGHT_PWM=y 106CONFIG_BACKLIGHT_PWM=y
112CONFIG_FRAMEBUFFER_CONSOLE=y 107CONFIG_FRAMEBUFFER_CONSOLE=y
113CONFIG_FONTS=y
114CONFIG_LOGO=y 108CONFIG_LOGO=y
115CONFIG_SOUND=y 109CONFIG_SOUND=y
116CONFIG_SND=y 110CONFIG_SND=y
@@ -119,9 +113,9 @@ CONFIG_SND_MXS_SOC=y
119CONFIG_SND_SOC_MXS_SGTL5000=y 113CONFIG_SND_SOC_MXS_SGTL5000=y
120CONFIG_USB=y 114CONFIG_USB=y
121CONFIG_USB_EHCI_HCD=y 115CONFIG_USB_EHCI_HCD=y
116CONFIG_USB_STORAGE=y
122CONFIG_USB_CHIPIDEA=y 117CONFIG_USB_CHIPIDEA=y
123CONFIG_USB_CHIPIDEA_HOST=y 118CONFIG_USB_CHIPIDEA_HOST=y
124CONFIG_USB_STORAGE=y
125CONFIG_USB_PHY=y 119CONFIG_USB_PHY=y
126CONFIG_USB_MXS_PHY=y 120CONFIG_USB_MXS_PHY=y
127CONFIG_MMC=y 121CONFIG_MMC=y
@@ -143,9 +137,9 @@ CONFIG_DMADEVICES=y
143CONFIG_MXS_DMA=y 137CONFIG_MXS_DMA=y
144CONFIG_STAGING=y 138CONFIG_STAGING=y
145CONFIG_MXS_LRADC=y 139CONFIG_MXS_LRADC=y
146CONFIG_IIO_SYSFS_TRIGGER=y
147CONFIG_COMMON_CLK_DEBUG=y 140CONFIG_COMMON_CLK_DEBUG=y
148CONFIG_IIO=y 141CONFIG_IIO=y
142CONFIG_IIO_SYSFS_TRIGGER=y
149CONFIG_PWM=y 143CONFIG_PWM=y
150CONFIG_PWM_MXS=y 144CONFIG_PWM_MXS=y
151CONFIG_EXT2_FS=y 145CONFIG_EXT2_FS=y
@@ -173,14 +167,14 @@ CONFIG_NLS_CODEPAGE_850=y
173CONFIG_NLS_ISO8859_1=y 167CONFIG_NLS_ISO8859_1=y
174CONFIG_NLS_ISO8859_15=y 168CONFIG_NLS_ISO8859_15=y
175CONFIG_PRINTK_TIME=y 169CONFIG_PRINTK_TIME=y
170CONFIG_DEBUG_INFO=y
176CONFIG_FRAME_WARN=2048 171CONFIG_FRAME_WARN=2048
177CONFIG_MAGIC_SYSRQ=y
178CONFIG_UNUSED_SYMBOLS=y 172CONFIG_UNUSED_SYMBOLS=y
173CONFIG_MAGIC_SYSRQ=y
179CONFIG_DEBUG_KERNEL=y 174CONFIG_DEBUG_KERNEL=y
180CONFIG_LOCKUP_DETECTOR=y 175CONFIG_LOCKUP_DETECTOR=y
181CONFIG_TIMER_STATS=y 176CONFIG_TIMER_STATS=y
182CONFIG_PROVE_LOCKING=y 177CONFIG_PROVE_LOCKING=y
183CONFIG_DEBUG_INFO=y
184CONFIG_BLK_DEV_IO_TRACE=y 178CONFIG_BLK_DEV_IO_TRACE=y
185CONFIG_STRICT_DEVMEM=y 179CONFIG_STRICT_DEVMEM=y
186CONFIG_DEBUG_USER=y 180CONFIG_DEBUG_USER=y
@@ -188,3 +182,4 @@ CONFIG_DEBUG_USER=y
188# CONFIG_CRYPTO_HW is not set 182# CONFIG_CRYPTO_HW is not set
189CONFIG_CRC_ITU_T=m 183CONFIG_CRC_ITU_T=m
190CONFIG_CRC7=m 184CONFIG_CRC7=m
185CONFIG_FONTS=y
diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c
index 4ce27b536dc9..98f6e2adb53e 100644
--- a/arch/arm/mach-mxs/mach-mxs.c
+++ b/arch/arm/mach-mxs/mach-mxs.c
@@ -14,6 +14,7 @@
14#include <linux/clk/mxs.h> 14#include <linux/clk/mxs.h>
15#include <linux/clkdev.h> 15#include <linux/clkdev.h>
16#include <linux/clocksource.h> 16#include <linux/clocksource.h>
17#include <linux/clk-provider.h>
17#include <linux/delay.h> 18#include <linux/delay.h>
18#include <linux/err.h> 19#include <linux/err.h>
19#include <linux/gpio.h> 20#include <linux/gpio.h>
@@ -61,6 +62,8 @@
61static u32 chipid; 62static u32 chipid;
62static u32 socid; 63static u32 socid;
63 64
65static void __iomem *reset_addr;
66
64static inline void __mxs_setl(u32 mask, void __iomem *reg) 67static inline void __mxs_setl(u32 mask, void __iomem *reg)
65{ 68{
66 __raw_writel(mask, reg + MXS_SET_ADDR); 69 __raw_writel(mask, reg + MXS_SET_ADDR);
@@ -393,12 +396,33 @@ static const char __init *mxs_get_revision(void)
393 u32 rev = mxs_get_cpu_rev(); 396 u32 rev = mxs_get_cpu_rev();
394 397
395 if (rev != MXS_CHIP_REV_UNKNOWN) 398 if (rev != MXS_CHIP_REV_UNKNOWN)
396 return kasprintf(GFP_KERNEL, "TO%d.%d", (rev >> 4) & 0xf, 399 return kasprintf(GFP_KERNEL, "%d.%d", (rev >> 4) & 0xf,
397 rev & 0xf); 400 rev & 0xf);
398 else 401 else
399 return kasprintf(GFP_KERNEL, "%s", "Unknown"); 402 return kasprintf(GFP_KERNEL, "%s", "Unknown");
400} 403}
401 404
405#define MX23_CLKCTRL_RESET_OFFSET 0x120
406#define MX28_CLKCTRL_RESET_OFFSET 0x1e0
407
408static int __init mxs_restart_init(void)
409{
410 struct device_node *np;
411
412 np = of_find_compatible_node(NULL, NULL, "fsl,clkctrl");
413 reset_addr = of_iomap(np, 0);
414 if (!reset_addr)
415 return -ENODEV;
416
417 if (of_device_is_compatible(np, "fsl,imx23-clkctrl"))
418 reset_addr += MX23_CLKCTRL_RESET_OFFSET;
419 else
420 reset_addr += MX28_CLKCTRL_RESET_OFFSET;
421 of_node_put(np);
422
423 return 0;
424}
425
402static void __init mxs_machine_init(void) 426static void __init mxs_machine_init(void)
403{ 427{
404 struct device_node *root; 428 struct device_node *root;
@@ -433,21 +457,18 @@ static void __init mxs_machine_init(void)
433 imx28_evk_init(); 457 imx28_evk_init();
434 else if (of_machine_is_compatible("bluegiga,apx4devkit")) 458 else if (of_machine_is_compatible("bluegiga,apx4devkit"))
435 apx4devkit_init(); 459 apx4devkit_init();
436 else if (of_machine_is_compatible("crystalfontz,cfa10037") || 460 else if (of_machine_is_compatible("crystalfontz,cfa10036"))
437 of_machine_is_compatible("crystalfontz,cfa10049") ||
438 of_machine_is_compatible("crystalfontz,cfa10055") ||
439 of_machine_is_compatible("crystalfontz,cfa10057"))
440 crystalfontz_init(); 461 crystalfontz_init();
441 462
442 of_platform_populate(NULL, of_default_bus_match_table, 463 of_platform_populate(NULL, of_default_bus_match_table,
443 NULL, parent); 464 NULL, parent);
444 465
466 mxs_restart_init();
467
445 if (of_machine_is_compatible("karo,tx28")) 468 if (of_machine_is_compatible("karo,tx28"))
446 tx28_post_init(); 469 tx28_post_init();
447} 470}
448 471
449#define MX23_CLKCTRL_RESET_OFFSET 0x120
450#define MX28_CLKCTRL_RESET_OFFSET 0x1e0
451#define MXS_CLKCTRL_RESET_CHIP (1 << 1) 472#define MXS_CLKCTRL_RESET_CHIP (1 << 1)
452 473
453/* 474/*
@@ -455,28 +476,16 @@ static void __init mxs_machine_init(void)
455 */ 476 */
456static void mxs_restart(enum reboot_mode mode, const char *cmd) 477static void mxs_restart(enum reboot_mode mode, const char *cmd)
457{ 478{
458 struct device_node *np; 479 if (reset_addr) {
459 void __iomem *reset_addr; 480 /* reset the chip */
481 __mxs_setl(MXS_CLKCTRL_RESET_CHIP, reset_addr);
460 482
461 np = of_find_compatible_node(NULL, NULL, "fsl,clkctrl"); 483 pr_err("Failed to assert the chip reset\n");
462 reset_addr = of_iomap(np, 0);
463 if (!reset_addr)
464 goto soft;
465 484
466 if (of_device_is_compatible(np, "fsl,imx23-clkctrl")) 485 /* Delay to allow the serial port to show the message */
467 reset_addr += MX23_CLKCTRL_RESET_OFFSET; 486 mdelay(50);
468 else 487 }
469 reset_addr += MX28_CLKCTRL_RESET_OFFSET;
470
471 /* reset the chip */
472 __mxs_setl(MXS_CLKCTRL_RESET_CHIP, reset_addr);
473
474 pr_err("Failed to assert the chip reset\n");
475
476 /* Delay to allow the serial port to show the message */
477 mdelay(50);
478 488
479soft:
480 /* We'll take a jump through zero as a poor second */ 489 /* We'll take a jump through zero as a poor second */
481 soft_restart(0); 490 soft_restart(0);
482} 491}
@@ -487,6 +496,7 @@ static void __init mxs_timer_init(void)
487 mx23_clocks_init(); 496 mx23_clocks_init();
488 else 497 else
489 mx28_clocks_init(); 498 mx28_clocks_init();
499 of_clk_init(NULL);
490 clocksource_of_init(); 500 clocksource_of_init();
491} 501}
492 502
diff --git a/arch/arm/mach-mxs/pm.c b/arch/arm/mach-mxs/pm.c
index b2494d2db2c4..0170e99fd70f 100644
--- a/arch/arm/mach-mxs/pm.c
+++ b/arch/arm/mach-mxs/pm.c
@@ -15,6 +15,7 @@
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/suspend.h> 16#include <linux/suspend.h>
17#include <linux/io.h> 17#include <linux/io.h>
18#include "pm.h"
18 19
19static int mxs_suspend_enter(suspend_state_t state) 20static int mxs_suspend_enter(suspend_state_t state)
20{ 21{