
On Wed, 18 Feb 2009 19:29:27 +0100 Wolfgang Denk wd@denx.de wrote:
+#else +char NS16550_getc (NS16550_t com_port) { } +int NS16550_tstc (NS16550_t com_port) { }
If these functions are supposed to return "char" resp. "int", you will get casty compiler warnings with an empty function body.
I didn't see them, but anyway, please consider this patch (u-boot-spl is 32 bytes smaller than previous empty-fn-body based patch):
From 3d5e8933d033f0aea81fb030b9dc684269619e1c Mon Sep 17 00:00:00 2001
From: Ron Madrid ron_madrid@sbcglobal.net Date: Tue, 17 Feb 2009 12:14:17 -0800 Subject: [PATCH] Create configuration option for restricted ns16550 functions
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@sbcglobal.net
changed CONFIG_NS* to CONFIG_SYS_NS*, fixed these compiler errors:
undefined reference to `NS16550_reinit' undefined reference to `NS16550_tstc' undefined reference to `NS16550_getc'
and made declarations macros to save space, replaced functions that had returned values with 0.
Made SIMPC8313 builds turn on the configuration option by default to fix the "NAND bootstrap too big" error when building u-boot-spl.
Signed-off-by: Kim Phillips kim.phillips@freescale.com --- README | 7 +++++++ drivers/serial/ns16550.c | 5 ++++- include/configs/SIMPC8313.h | 1 + include/ns16550.h | 6 ++++++ 4 files changed, 18 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_SYS_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_SYS_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_SYS_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_SYS_NS16550_MIN_FUNCTIONS */ #endif diff --git a/include/configs/SIMPC8313.h b/include/configs/SIMPC8313.h index f62a705..6219722 100644 --- a/include/configs/SIMPC8313.h +++ b/include/configs/SIMPC8313.h @@ -205,6 +205,7 @@ #define CONFIG_SYS_NS16550 #define CONFIG_SYS_NS16550_SERIAL #define CONFIG_SYS_NS16550_REG_SIZE 1 +#define CONFIG_SYS_NS16550_MIN_FUNCTIONS
#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..dbaacfc 100644 --- a/include/ns16550.h +++ b/include/ns16550.h @@ -154,6 +154,12 @@ 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_SYS_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); +#else +#define NS16550_getc(com_port) 0 +#define NS16550_tstc(com_port) 0 +#define NS16550_reinit(com_port, baud_divisor) +#endif