[U-Boot] use "boot select" jumper on NGW100 to select USART

Thomas Sprinkmeier thomas.sprinkmeier at gmail.com
Mon Nov 9 13:22:16 CET 2009


From: Thomas Sprinkmeier <thomas.sprinkmeier at gmail.com>
Date: Mon, 9 Nov 2009 09:28:51 +1030
Subject: [PATCH] use "boot select" jumper on NGW100 to select USART

Without the "boot select" jumper U-Boot will use the USART selected
using the CONFIG_USART1, CONFIG_USART2, directive.

If  CONFIG_ALT_USART1 (or ..2, ..3, ..0) is defined then,
with the jumper in place, that USART is used instead.

Signed-off-by: Thomas Sprinkmeier <thomas.sprinkmeier at gmail.com
---
 board/atmel/atngw100/atngw100.c |    6 ++-
 drivers/serial/atmel_usart.c    |   15 +-------
 include/atmel_alt_usart.h       |   81 +++++++++++++++++++++++++++++++++++++++
 include/configs/atngw100.h      |    1 +
 4 files changed, 88 insertions(+), 15 deletions(-)
 create mode 100644 include/atmel_alt_usart.h

diff --git a/board/atmel/atngw100/atngw100.c b/board/atmel/atngw100/atngw100.c
index 004d8da..841d9ec 100644
--- a/board/atmel/atngw100/atngw100.c
+++ b/board/atmel/atngw100/atngw100.c
@@ -29,6 +29,8 @@
 #include <asm/arch/portmux.h>
 #include <netdev.h>
 
+#include <atmel_alt_usart.h>
+
 DECLARE_GLOBAL_DATA_PTR;
 
 static const struct sdram_config sdram_config = {
@@ -53,7 +55,9 @@ int board_early_init_f(void)
 	hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
 
 	portmux_enable_ebi(16, 23, 0, PORTMUX_DRIVE_HIGH);
-	portmux_enable_usart1(PORTMUX_DRIVE_MIN);
+
+	USART_JUMPER_CONFIG;
+	USART_ENABLE;
 
 #if defined(CONFIG_MACB)
 	portmux_enable_macb0(PORTMUX_MACB_MII, PORTMUX_DRIVE_HIGH);
diff --git a/drivers/serial/atmel_usart.c b/drivers/serial/atmel_usart.c
index f50552a..c78755c 100644
--- a/drivers/serial/atmel_usart.c
+++ b/drivers/serial/atmel_usart.c
@@ -21,20 +21,7 @@
 #include <asm/io.h>
 #include <asm/arch/clk.h>
 #include <asm/arch/memory-map.h>
-
-#if defined(CONFIG_USART0)
-# define USART_ID	0
-# define USART_BASE	USART0_BASE
-#elif defined(CONFIG_USART1)
-# define USART_ID	1
-# define USART_BASE	USART1_BASE
-#elif defined(CONFIG_USART2)
-# define USART_ID	2
-# define USART_BASE	USART2_BASE
-#elif defined(CONFIG_USART3)
-# define USART_ID	3
-# define USART_BASE	USART3_BASE
-#endif
+#include <atmel_alt_usart.h>
 
 #include "atmel_usart.h"
 
diff --git a/include/atmel_alt_usart.h b/include/atmel_alt_usart.h
new file mode 100644
index 0000000..1ed2fb8
--- /dev/null
+++ b/include/atmel_alt_usart.h
@@ -0,0 +1,81 @@
+/*
+ *  Copyright (C) 2009 Thomas Sprinkmeier
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#ifndef __ATMEL_ALT_USART_H__
+#define __ATMEL_ALT_USART_H__
+
+/* Define alternate USART ID and BASE */
+#if   defined(CONFIG_ALT_USART0)
+# define USART_ALT_ID	0
+# define USART_ALT_BASE	USART0_BASE
+#elif defined(CONFIG_ALT_USART1)
+# define USART_ALT_ID	1
+# define USART_ALT_BASE	USART1_BASE
+#elif defined(CONFIG_ALT_USART2)
+# define USART_ALT_ID	2
+# define USART_ALT_BASE	USART2_BASE
+#elif defined(CONFIG_ALT_USART3)
+# define USART_ALT_ID	3
+# define USART_ALT_BASE	USART3_BASE
+#elif
+/* No alternate USART selected */
+#define USART_USE_ALT (0)
+#define USART_PIN_CONFIG
+#endif
+
+/* How to read/initialise the boot-select jumper */
+#ifndef USART_USE_ALT
+#define USART_USE_ALT (!gpio_get_value(GPIO_PIN_PB(30)))
+#define USART_JUMPER_CONFIG portmux_select_gpio(PORTMUX_PORT_B,		\
+						(1 << 30),		\
+						PORTMUX_DIR_INPUT)
+#endif
+
+/*Configure default USART ID and BASE*/
+#if   defined(CONFIG_USART0)
+# define USART_DEF_ID	0
+# define USART_DEF_BASE	USART0_BASE
+#elif defined(CONFIG_USART1)
+# define USART_DEF_ID	1
+# define USART_DEF_BASE	USART1_BASE
+#elif defined(CONFIG_USART2)
+# define USART_DEF_ID	2
+# define USART_DEF_BASE	USART2_BASE
+#elif defined(CONFIG_USART3)
+# define USART_DEF_ID	3
+# define USART_DEF_BASE	USART3_BASE
+#elif
+#error You must define CONFIG_USART[0..1] to select a console port
+#endif
+
+
+/* Which USART ID/BASE to use. */
+#define USART_ID   (USART_USE_ALT ? USART_ALT_ID   : USART_DEF_ID)
+#define USART_BASE (USART_USE_ALT ? USART_ALT_BASE : USART_DEF_BASE)
+
+/* Enable the appropriate USART */
+#define USART_ENABLE {							\
+  switch (USART_ID)							\
+    {									\
+    case 0:  portmux_enable_usart0(PORTMUX_DRIVE_MIN); break;		\
+    case 1:  portmux_enable_usart1(PORTMUX_DRIVE_MIN); break;		\
+    case 2:  portmux_enable_usart2(PORTMUX_DRIVE_MIN); break;		\
+    default: portmux_enable_usart3(PORTMUX_DRIVE_MIN); break;		\
+    }									\
+  } while(0)
+
+#endif /* __ATMEL_ALT_USART_H__ */
diff --git a/include/configs/atngw100.h b/include/configs/atngw100.h
index 4ed5514..60a3b60 100644
--- a/include/configs/atngw100.h
+++ b/include/configs/atngw100.h
@@ -59,6 +59,7 @@
 #define CONFIG_SYS_PLL0_OPT			0x04
 
 #define CONFIG_USART1			1
+#define CONFIG_ALT_USART3		1
 
 /* User serviceable stuff */
 #define CONFIG_DOS_PARTITION		1
-- 
1.6.0.4



More information about the U-Boot mailing list