[PATCH] Create configuration option for restricted ns16550 functions

Ron Madrid ron_madrid at sbcglobal.net
Tue Feb 17 21:14:17 CET 2009


This patch will create a configuration option for a minimum configuration for
the ns16550 serial driver at drivers/serial/ns16550.c which will exclude all
functions with exception of NS16550_putc and NS16550_init.  This will be used
primarily to save space and remove unused code from builds in which space is
limited.

Signed-off-by: Ron Madrid <ron_madrid at sbcglobal.net>

fixed these compiler errors:

undefined reference to `NS16550_reinit'
undefined reference to `NS16550_tstc'
undefined reference to `NS16550_getc'

Signed-off-by: Kim Phillips <kim.phillips at freescale.com>
---
 README                      |    7 +++++++
 drivers/serial/ns16550.c    |    5 ++++-
 include/configs/SIMPC8313.h |    3 +++
 include/ns16550.h           |    2 ++
 4 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/README b/README
index b64c159..48d3f6d 100644
--- a/README
+++ b/README
@@ -2458,6 +2458,13 @@ use the "saveenv" command to store a valid environment.
 - CONFIG_SYS_64BIT_STRTOUL:
 		Adds simple_strtoull that returns a 64bit value
 
+- CONFIG_NS16550_MIN_FUNCTIONS:
+		Define this if you desire to only have use of the NS16550_init
+		and NS16550_putc functions for the serial driver located at
+		drivers/serial/ns16550.c.  This option is useful for saving
+		space for already greatly restricted images, including but not
+		limited to NAND_SPL configurations.
+
 Low Level (hardware related) configuration options:
 ---------------------------------------------------
 
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
index 93c2243..25a0c5a 100644
--- a/drivers/serial/ns16550.c
+++ b/drivers/serial/ns16550.c
@@ -39,6 +39,7 @@ void NS16550_init (NS16550_t com_port, int baud_divisor)
 #endif
 }
 
+#ifndef CONFIG_NS16550_MIN_FUNCTIONS
 void NS16550_reinit (NS16550_t com_port, int baud_divisor)
 {
 	com_port->ier = 0x00;
@@ -53,6 +54,7 @@ void NS16550_reinit (NS16550_t com_port, int baud_divisor)
 	com_port->dlm = (baud_divisor >> 8) & 0xff;
 	com_port->lcr = LCRVAL;
 }
+#endif /* CONFIG_NS16550_MIN_FUNCTIONS */
 
 void NS16550_putc (NS16550_t com_port, char c)
 {
@@ -60,6 +62,7 @@ void NS16550_putc (NS16550_t com_port, char c)
 	com_port->thr = c;
 }
 
+#ifndef CONFIG_NS16550_MIN_FUNCTIONS
 char NS16550_getc (NS16550_t com_port)
 {
 	while ((com_port->lsr & LSR_DR) == 0) {
@@ -75,5 +78,5 @@ int NS16550_tstc (NS16550_t com_port)
 {
 	return ((com_port->lsr & LSR_DR) != 0);
 }
-
+#endif /* CONFIG_NS16550_MIN_FUNCTIONS */
 #endif
diff --git a/include/configs/SIMPC8313.h b/include/configs/SIMPC8313.h
index f62a705..bbe76df 100644
--- a/include/configs/SIMPC8313.h
+++ b/include/configs/SIMPC8313.h
@@ -205,6 +205,9 @@
 #define CONFIG_SYS_NS16550
 #define CONFIG_SYS_NS16550_SERIAL
 #define CONFIG_SYS_NS16550_REG_SIZE	1
+#ifdef CONFIG_NAND_SPL
+#define CONFIG_NS16550_MIN_FUNCTIONS
+#endif
 
 #define CONFIG_SYS_BAUDRATE_TABLE	\
 	{300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 115200}
diff --git a/include/ns16550.h b/include/ns16550.h
index e6ade61..8f8fb01 100644
--- a/include/ns16550.h
+++ b/include/ns16550.h
@@ -154,6 +154,8 @@ typedef volatile struct NS16550 *NS16550_t;
 
 void	NS16550_init   (NS16550_t com_port, int baud_divisor);
 void	NS16550_putc   (NS16550_t com_port, char c);
+#ifndef CONFIG_NS16550_MIN_FUNCTIONS
 char	NS16550_getc   (NS16550_t com_port);
 int	NS16550_tstc   (NS16550_t com_port);
 void	NS16550_reinit (NS16550_t com_port, int baud_divisor);
+#endif
-- 
1.6.1.3



More information about the U-Boot mailing list