3 * Logic Product Development <www.logicpd.com>
6 * Peter Barada <peter.barada@logicpd.com>
8 * Derived from Beagle Board and 3430 SDP code by
9 * Richard Woodruff <r-woodruff2@ti.com>
10 * Syed Mohammed Khasim <khasim@ti.com>
12 * SPDX-License-Identifier: GPL-2.0+
21 #include <asm/arch/mmc_host_def.h>
22 #include <asm/arch/mux.h>
23 #include <asm/arch/mem.h>
24 #include <asm/arch/sys_proto.h>
26 #include <asm/mach-types.h>
27 #include "omap3logic.h"
29 DECLARE_GLOBAL_DATA_PTR
;
32 * two dimensional array of strucures containining board name and Linux
33 * machine IDs; row it selected based on CPU column is slected based
34 * on hsusb0_data5 pin having a pulldown resistor
36 static struct board_id
{
42 .name
= "OMAP35xx SOM LV",
43 .machine_id
= MACH_TYPE_OMAP3530_LV_SOM
,
46 .name
= "OMAP35xx Torpedo",
47 .machine_id
= MACH_TYPE_OMAP3_TORPEDO
,
52 .name
= "DM37xx SOM LV",
53 .machine_id
= MACH_TYPE_DM3730_SOM_LV
,
56 .name
= "DM37xx Torpedo",
57 .machine_id
= MACH_TYPE_DM3730_TORPEDO
,
63 * BOARD_ID_GPIO - GPIO of pin with optional pulldown resistor on SOM LV
65 #define BOARD_ID_GPIO 189 /* hsusb0_data5 pin */
69 * Description: Early hardware init.
73 struct board_id
*board
;
76 gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
79 gd
->bd
->bi_boot_params
= (OMAP34XX_SDRC_CS0
+ 0x100);
82 * To identify between a SOM LV and Torpedo module,
83 * a pulldown resistor is on hsusb0_data5 for the SOM LV module.
84 * Drive the pin (and let it soak), then read it back.
85 * If the pin is still high its a Torpedo. If low its a SOM LV
88 /* Mux hsusb0_data5 as a GPIO */
89 MUX_VAL(CP(HSUSB0_DATA5
), (IEN
| PTD
| DIS
| M4
));
91 if (gpio_request(BOARD_ID_GPIO
, "husb0_data5.gpio_189") == 0) {
94 * Drive BOARD_ID_GPIO - the pulldown resistor on the SOM LV
95 * will drain the voltage.
97 gpio_direction_output(BOARD_ID_GPIO
, 0);
98 gpio_set_value(BOARD_ID_GPIO
, 1);
100 /* Let it soak for a bit */
104 * Read state of BOARD_ID_GPIO as an input and if its set.
105 * If so the board is a Torpedo
107 gpio_direction_input(BOARD_ID_GPIO
);
108 val
= gpio_get_value(BOARD_ID_GPIO
);
109 gpio_free(BOARD_ID_GPIO
);
111 board
= &boards
[!!(get_cpu_family() == CPU_OMAP36XX
)][!!val
];
112 printf("Board: %s\n", board
->name
);
114 /* Set the machine_id passed to Linux */
115 gd
->bd
->bi_arch_number
= board
->machine_id
;
118 /* restore hsusb0_data5 pin as hsusb0_data5 */
119 MUX_VAL(CP(HSUSB0_DATA5
), (IEN
| PTD
| DIS
| M0
));
124 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
125 int board_mmc_init(bd_t
*bis
)
127 return omap_mmc_init(0, 0, 0, -1, -1);
131 #ifdef CONFIG_SMC911X
132 /* GPMC CS1 settings for Logic SOM LV/Torpedo LAN92xx Ethernet chip */
133 static const u32 gpmc_lan92xx_config
[] = {
134 NET_LAN92XX_GPMC_CONFIG1
,
135 NET_LAN92XX_GPMC_CONFIG2
,
136 NET_LAN92XX_GPMC_CONFIG3
,
137 NET_LAN92XX_GPMC_CONFIG4
,
138 NET_LAN92XX_GPMC_CONFIG5
,
139 NET_LAN92XX_GPMC_CONFIG6
,
142 int board_eth_init(bd_t
*bis
)
144 enable_gpmc_cs_config(gpmc_lan92xx_config
, &gpmc_cfg
->cs
[1],
145 CONFIG_SMC911X_BASE
, GPMC_SIZE_16M
);
147 return smc911x_initialize(0, CONFIG_SMC911X_BASE
);
153 * IDIS - Input Disable
154 * PTD - Pull type Down
156 * DIS - Pull type selection is inactive
157 * EN - Pull type selection is active
159 * The commented string gives the final mux configuration for that pin
163 * Routine: set_muxconf_regs
164 * Description: Setting up the configuration Mux registers specific to the
165 * hardware. Many pins need to be moved from protect to primary
168 void set_muxconf_regs(void)
171 MUX_VAL(CP(GPMC_A1
), (IDIS
| PTU
| EN
| M0
));
172 MUX_VAL(CP(GPMC_A2
), (IDIS
| PTU
| EN
| M0
));
173 MUX_VAL(CP(GPMC_A3
), (IDIS
| PTU
| EN
| M0
));
174 MUX_VAL(CP(GPMC_A4
), (IDIS
| PTU
| EN
| M0
));
175 MUX_VAL(CP(GPMC_A5
), (IDIS
| PTU
| EN
| M0
));
176 MUX_VAL(CP(GPMC_A6
), (IDIS
| PTU
| EN
| M0
));
177 MUX_VAL(CP(GPMC_A7
), (IDIS
| PTU
| EN
| M0
));
178 MUX_VAL(CP(GPMC_A8
), (IDIS
| PTU
| EN
| M0
));
179 MUX_VAL(CP(GPMC_A9
), (IDIS
| PTU
| EN
| M0
));
180 MUX_VAL(CP(GPMC_A10
), (IDIS
| PTU
| EN
| M0
));
181 MUX_VAL(CP(GPMC_D0
), (IEN
| PTU
| EN
| M0
));
182 MUX_VAL(CP(GPMC_D1
), (IEN
| PTU
| EN
| M0
));
183 MUX_VAL(CP(GPMC_D2
), (IEN
| PTU
| EN
| M0
));
184 MUX_VAL(CP(GPMC_D3
), (IEN
| PTU
| EN
| M0
));
185 MUX_VAL(CP(GPMC_D4
), (IEN
| PTU
| EN
| M0
));
186 MUX_VAL(CP(GPMC_D5
), (IEN
| PTU
| EN
| M0
));
187 MUX_VAL(CP(GPMC_D6
), (IEN
| PTU
| EN
| M0
));
188 MUX_VAL(CP(GPMC_D7
), (IEN
| PTU
| EN
| M0
));
189 MUX_VAL(CP(GPMC_D8
), (IEN
| PTU
| EN
| M0
));
190 MUX_VAL(CP(GPMC_D9
), (IEN
| PTU
| EN
| M0
));
191 MUX_VAL(CP(GPMC_D10
), (IEN
| PTU
| EN
| M0
));
192 MUX_VAL(CP(GPMC_D11
), (IEN
| PTU
| EN
| M0
));
193 MUX_VAL(CP(GPMC_D12
), (IEN
| PTU
| EN
| M0
));
194 MUX_VAL(CP(GPMC_D13
), (IEN
| PTU
| EN
| M0
));
195 MUX_VAL(CP(GPMC_D14
), (IEN
| PTU
| EN
| M0
));
196 MUX_VAL(CP(GPMC_D15
), (IEN
| PTU
| EN
| M0
));
197 MUX_VAL(CP(GPMC_NCS0
), (IDIS
| PTU
| EN
| M0
));
198 MUX_VAL(CP(GPMC_NCS1
), (IDIS
| PTU
| EN
| M0
));
199 MUX_VAL(CP(GPMC_NCS2
), (IDIS
| PTU
| EN
| M0
));
200 MUX_VAL(CP(GPMC_NCS3
), (IDIS
| PTD
| DIS
| M0
));
201 MUX_VAL(CP(GPMC_NCS5
), (IDIS
| PTU
| DIS
| M4
));
202 MUX_VAL(CP(GPMC_NCS7
), (IDIS
| PTD
| DIS
| M1
)); /*GPMC_IO_DIR*/
203 MUX_VAL(CP(GPMC_NBE0_CLE
), (IDIS
| PTU
| EN
| M0
));
204 MUX_VAL(CP(GPMC_WAIT1
), (IEN
| PTU
| EN
| M0
));
207 MUX_VAL(CP(MMC1_CLK
), (IDIS
| PTU
| EN
| M0
));
208 MUX_VAL(CP(MMC1_CMD
), (IEN
| PTU
| EN
| M0
));
209 MUX_VAL(CP(MMC1_DAT0
), (IEN
| PTU
| EN
| M0
));
210 MUX_VAL(CP(MMC1_DAT1
), (IEN
| PTU
| EN
| M0
));
211 MUX_VAL(CP(MMC1_DAT2
), (IEN
| PTU
| EN
| M0
));
212 MUX_VAL(CP(MMC1_DAT3
), (IEN
| PTU
| EN
| M0
));
215 MUX_VAL(CP(UART1_TX
), (IDIS
| PTD
| DIS
| M0
));
216 MUX_VAL(CP(UART1_RTS
), (IDIS
| PTD
| DIS
| M0
));
217 MUX_VAL(CP(UART1_CTS
), (IEN
| PTU
| DIS
| M0
));
218 MUX_VAL(CP(UART1_RX
), (IEN
| PTD
| DIS
| M0
));
221 MUX_VAL(CP(I2C2_SCL
), (IEN
| PTU
| EN
| M0
));
222 MUX_VAL(CP(I2C2_SDA
), (IEN
| PTU
| EN
| M0
));
223 MUX_VAL(CP(I2C3_SCL
), (IEN
| PTU
| EN
| M0
));
224 MUX_VAL(CP(I2C3_SDA
), (IEN
| PTU
| EN
| M0
));
226 MUX_VAL(CP(HDQ_SIO
), (IEN
| PTU
| EN
| M0
));
228 /*Control and debug */
229 MUX_VAL(CP(SYS_NIRQ
), (IEN
| PTU
| EN
| M0
));
230 MUX_VAL(CP(SYS_OFF_MODE
), (IEN
| PTD
| DIS
| M0
));
231 MUX_VAL(CP(SYS_CLKOUT1
), (IEN
| PTD
| DIS
| M0
));
232 MUX_VAL(CP(SYS_CLKOUT2
), (IEN
| PTU
| EN
| M0
));
233 MUX_VAL(CP(JTAG_nTRST
), (IEN
| PTD
| DIS
| M0
));
234 MUX_VAL(CP(SDRC_CKE0
), (IDIS
| PTU
| EN
| M0
));