• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  linux/arch/arm/mach-ep93xx/micro9.c
3  *
4  * Copyright (C) 2006 Contec Steuerungstechnik & Automation GmbH
5  *                    Manfred Gruber <m.gruber@tirol.com>
6  * Copyright (C) 2009 Contec Steuerungstechnik & Automation GmbH
7  *                    Hubert Feurstein <hubert.feurstein@contec.at>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12  */
13 
14 #include <linux/kernel.h>
15 #include <linux/init.h>
16 #include <linux/platform_device.h>
17 #include <linux/io.h>
18 
19 #include <mach/hardware.h>
20 
21 #include <asm/hardware/vic.h>
22 #include <asm/mach-types.h>
23 #include <asm/mach/arch.h>
24 
25 #include "soc.h"
26 
27 /*************************************************************************
28  * Micro9 NOR Flash
29  *
30  * Micro9-High has up to 64MB of 32-bit flash on CS1
31  * Micro9-Mid has up to 64MB of either 32-bit or 16-bit flash on CS1
32  * Micro9-Lite uses a separate MTD map driver for flash support
33  * Micro9-Slim has up to 64MB of either 32-bit or 16-bit flash on CS1
34  *************************************************************************/
micro9_detect_bootwidth(void)35 static unsigned int __init micro9_detect_bootwidth(void)
36 {
37 	u32 v;
38 
39 	/* Detect the bus width of the external flash memory */
40 	v = __raw_readl(EP93XX_SYSCON_SYSCFG);
41 	if (v & EP93XX_SYSCON_SYSCFG_LCSN7)
42 		return 4; /* 32-bit */
43 	else
44 		return 2; /* 16-bit */
45 }
46 
micro9_register_flash(void)47 static void __init micro9_register_flash(void)
48 {
49 	unsigned int width;
50 
51 	if (machine_is_micro9())
52 		width = 4;
53 	else if (machine_is_micro9m() || machine_is_micro9s())
54 		width = micro9_detect_bootwidth();
55 	else
56 		width = 0;
57 
58 	if (width)
59 		ep93xx_register_flash(width, EP93XX_CS1_PHYS_BASE, SZ_64M);
60 }
61 
62 
63 /*************************************************************************
64  * Micro9 Ethernet
65  *************************************************************************/
66 static struct ep93xx_eth_data __initdata micro9_eth_data = {
67 	.phy_id		= 0x1f,
68 };
69 
70 
micro9_init_machine(void)71 static void __init micro9_init_machine(void)
72 {
73 	ep93xx_init_devices();
74 	ep93xx_register_eth(&micro9_eth_data, 1);
75 	micro9_register_flash();
76 }
77 
78 
79 #ifdef CONFIG_MACH_MICRO9H
80 MACHINE_START(MICRO9, "Contec Micro9-High")
81 	/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
82 	.atag_offset	= 0x100,
83 	.map_io		= ep93xx_map_io,
84 	.init_irq	= ep93xx_init_irq,
85 	.handle_irq	= vic_handle_irq,
86 	.timer		= &ep93xx_timer,
87 	.init_machine	= micro9_init_machine,
88 	.restart	= ep93xx_restart,
89 MACHINE_END
90 #endif
91 
92 #ifdef CONFIG_MACH_MICRO9M
93 MACHINE_START(MICRO9M, "Contec Micro9-Mid")
94 	/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
95 	.atag_offset	= 0x100,
96 	.map_io		= ep93xx_map_io,
97 	.init_irq	= ep93xx_init_irq,
98 	.handle_irq	= vic_handle_irq,
99 	.timer		= &ep93xx_timer,
100 	.init_machine	= micro9_init_machine,
101 	.restart	= ep93xx_restart,
102 MACHINE_END
103 #endif
104 
105 #ifdef CONFIG_MACH_MICRO9L
106 MACHINE_START(MICRO9L, "Contec Micro9-Lite")
107 	/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
108 	.atag_offset	= 0x100,
109 	.map_io		= ep93xx_map_io,
110 	.init_irq	= ep93xx_init_irq,
111 	.handle_irq	= vic_handle_irq,
112 	.timer		= &ep93xx_timer,
113 	.init_machine	= micro9_init_machine,
114 	.restart	= ep93xx_restart,
115 MACHINE_END
116 #endif
117 
118 #ifdef CONFIG_MACH_MICRO9S
119 MACHINE_START(MICRO9S, "Contec Micro9-Slim")
120 	/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
121 	.atag_offset	= 0x100,
122 	.map_io		= ep93xx_map_io,
123 	.init_irq	= ep93xx_init_irq,
124 	.handle_irq	= vic_handle_irq,
125 	.timer		= &ep93xx_timer,
126 	.init_machine	= micro9_init_machine,
127 	.restart	= ep93xx_restart,
128 MACHINE_END
129 #endif
130