diff mbox

[U-Boot,1/4] spl, common, serial: build SPL without serial support

Message ID 1434370862-8203-2-git-send-email-hs@denx.de
State Superseded
Delegated to: Tom Rini
Headers show

Commit Message

Heiko Schocher June 15, 2015, 12:20 p.m. UTC
This patch enables building SPL without
CONFIG_SPL_SERIAL_SUPPORT support.

Signed-off-by: Heiko Schocher <hs@denx.de>
---

 arch/arm/lib/interrupts.c          | 4 ++--
 arch/arm/mach-at91/arm926ejs/cpu.c | 2 +-
 arch/arm/mach-at91/spl_at91.c      | 3 +++
 common/Makefile                    | 4 ++++
 common/cli_readline.c              | 2 +-
 common/cli_simple.c                | 2 +-
 common/image.c                     | 8 ++++++--
 common/spl/spl.c                   | 9 +++++++++
 include/common.h                   | 7 +++++++
 include/configs/apf27.h            | 1 +
 include/configs/mx31pdk.h          | 1 +
 include/configs/mxs.h              | 1 +
 include/configs/tx25.h             | 1 +
 lib/display_options.c              | 4 ++--
 14 files changed, 40 insertions(+), 9 deletions(-)

Comments

Tom Rini June 15, 2015, 3:32 p.m. UTC | #1
On Mon, Jun 15, 2015 at 02:20:59PM +0200, Heiko Schocher wrote:

> This patch enables building SPL without
> CONFIG_SPL_SERIAL_SUPPORT support.
> 
> Signed-off-by: Heiko Schocher <hs@denx.de>

I like that we're starting down this path.  But can you explain why we
need each of these changes:

>  arch/arm/lib/interrupts.c          | 4 ++--
>  arch/arm/mach-at91/arm926ejs/cpu.c | 2 +-
>  common/cli_readline.c              | 2 +-
>  common/cli_simple.c                | 2 +-
>  lib/display_options.c              | 4 ++--

Having gone down the path of disabling output in SPL before due to size
constraints I didn't need to modify those files (but it was on an older
version)

>  common/image.c                     | 8 ++++++--

In this case I just said we only need those functions (and their
strings!) when we have SPL_SERIAL available.  It may be worth
re-checking what parts of this file we really need available in SPL
even.

>  common/spl/spl.c                   | 9 +++++++++

We should be able to be fine without a preloader_console_init() func I
think.
Heiko Schocher June 16, 2015, 5:21 a.m. UTC | #2
Hello Tom,

Am 15.06.2015 17:32, schrieb Tom Rini:
> On Mon, Jun 15, 2015 at 02:20:59PM +0200, Heiko Schocher wrote:
>
>> This patch enables building SPL without
>> CONFIG_SPL_SERIAL_SUPPORT support.
>>
>> Signed-off-by: Heiko Schocher <hs@denx.de>
>
> I like that we're starting down this path.  But can you explain why we
> need each of these changes:

I try it ...

The determining change is in "include/common.h", which twist the
putc, puts, printf and vprintf functions to /dev/null ... so the
compiler/linker can drop all them ... all other changes are only
fixing compiler warnings, as for example vars no longer used ...

>>   arch/arm/lib/interrupts.c          | 4 ++--
>>   arch/arm/mach-at91/arm926ejs/cpu.c | 2 +-
>>   common/cli_readline.c              | 2 +-
>>   common/cli_simple.c                | 2 +-
>>   lib/display_options.c              | 4 ++--
>
> Having gone down the path of disabling output in SPL before due to size
> constraints I didn't need to modify those files (but it was on an older
> version)

Do you have a patch?

>>   common/image.c                     | 8 ++++++--
>
> In this case I just said we only need those functions (and their
> strings!) when we have SPL_SERIAL available.  It may be worth
> re-checking what parts of this file we really need available in SPL
> even.

Hmm... my change is only to get rid of compiler warning "var defined
but not used" with marking this vars with "__maybe_unused" ... so it
is the less intrusive way ...

If we have a header before the kernel image, we need functions from
here in SPL, and maybe FIT is sometime supported/used in SPL ...
maybe someone wants to print header info in SPL before booting it ...
so I do not know if this would be an easy job ...

>>   common/spl/spl.c                   | 9 +++++++++
>
> We should be able to be fine without a preloader_console_init() func I
> think.

I just defined a version for the non serial case, at this place
there is already this function ...

I only set:

         gd->bd = &bdata;
         gd->have_console = 0;

which seems not to bad to me ... ok, "gd->have_console" should be 0.
And why is in preloader_console_init() "gd->bd = &bdata;" ... this
seems not the right place to me, as it has nothing to do with
"console init" ... so maybe we really can drop it, but it gets called
from:

$ grep -lr preloader_console_init .
./arch/microblaze/cpu/spl.c
./arch/powerpc/cpu/ppc4xx/spl_boot.c
./arch/powerpc/cpu/mpc5xxx/spl_boot.c
./arch/arm/mach-davinci/spl.c
./arch/arm/mach-uniphier/spl.c
./arch/arm/mach-mvebu/spl.c
./arch/arm/mach-at91/spl_at91.c
./arch/arm/mach-at91/spl_atmel.c
./arch/arm/mach-tegra/spl.c
./arch/arm/mach-zynq/spl.c
./arch/arm/cpu/armv7/omap-common/boot-common.c
./arch/arm/cpu/armv7/omap-common/boot-common.c.orig
./arch/arm/cpu/armv7/sunxi/board.c
./arch/arm/cpu/armv7/omap3/board.c
./arch/arm/mach-socfpga/spl.c
./20150615/0004-spl-common-serial-build-SPL-without-serial-support.patch
./board/compulab/cm_fx6/spl.c
./board/gateworks/gw_ventana/gw_ventana_spl.c
./board/solidrun/mx6cuboxi/mx6cuboxi.c
./board/barco/platinum/spl_titanium.c
./board/barco/platinum/spl_picon.c
./board/kosagi/novena/novena_spl.c
./board/ti/ks2_evm/board.c
./board/LaCie/edminiv2/edminiv2.c
./board/wandboard/spl.c
./board/freescale/mx6sxsabresd/mx6sxsabresd.c
./board/freescale/ls1021aqds/ls1021aqds.c
./board/freescale/ls1021atwr/ls1021atwr.c
./board/freescale/mx6sabresd/mx6sabresd.c
./board/bachmann/ot1200/ot1200_spl.c
./board/work-microwave/work_92105/work_92105_spl.c
./board/woodburn/woodburn.c

so ... we need a dummy function ... or?

Thanks for your comments!

bye,
Heiko
diff mbox

Patch

diff --git a/arch/arm/lib/interrupts.c b/arch/arm/lib/interrupts.c
index 06f4679..ec3fb77 100644
--- a/arch/arm/lib/interrupts.c
+++ b/arch/arm/lib/interrupts.c
@@ -123,8 +123,8 @@  void bad_mode (void)
 
 void show_regs (struct pt_regs *regs)
 {
-	unsigned long flags;
-	const char *processor_modes[] = {
+	unsigned long __maybe_unused flags;
+	const char __maybe_unused *processor_modes[] = {
 	"USER_26",	"FIQ_26",	"IRQ_26",	"SVC_26",
 	"UK4_26",	"UK5_26",	"UK6_26",	"UK7_26",
 	"UK8_26",	"UK9_26",	"UK10_26",	"UK11_26",
diff --git a/arch/arm/mach-at91/arm926ejs/cpu.c b/arch/arm/mach-at91/arm926ejs/cpu.c
index da1d359..990c689 100644
--- a/arch/arm/mach-at91/arm926ejs/cpu.c
+++ b/arch/arm/mach-at91/arm926ejs/cpu.c
@@ -42,7 +42,7 @@  void arch_preboot_os(void)
 #if defined(CONFIG_DISPLAY_CPUINFO)
 int print_cpuinfo(void)
 {
-	char buf[32];
+	char __maybe_unused buf[32];
 
 	printf("CPU: %s\n", ATMEL_CPU_NAME);
 	printf("Crystal frequency: %8s MHz\n",
diff --git a/arch/arm/mach-at91/spl_at91.c b/arch/arm/mach-at91/spl_at91.c
index a79a9dc..b19f95b 100644
--- a/arch/arm/mach-at91/spl_at91.c
+++ b/arch/arm/mach-at91/spl_at91.c
@@ -123,9 +123,12 @@  void board_init_f(ulong dummy)
 	at91_periph_clk_enable(ATMEL_ID_PIOB);
 	at91_periph_clk_enable(ATMEL_ID_PIOC);
 #endif
+
+#if defined(CONFIG_SPL_SERIAL_SUPPORT)
 	/* init console */
 	at91_seriald_hw_init();
 	preloader_console_init();
+#endif
 
 	mem_init();
 
diff --git a/common/Makefile b/common/Makefile
index d6c1d48..516c299 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -250,7 +250,11 @@  obj-$(CONFIG_DDR_SPD) += ddr_spd.o
 obj-$(CONFIG_SPD_EEPROM) += ddr_spd.o
 obj-$(CONFIG_HWCONFIG) += hwconfig.o
 obj-$(CONFIG_BOUNCE_BUFFER) += bouncebuf.o
+ifdef CONFIG_SPL_BUILD
+obj-$(CONFIG_SPL_SERIAL_SUPPORT) += console.o
+else
 obj-y += console.o
+endif
 obj-$(CONFIG_CROS_EC) += cros_ec.o
 obj-y += dlmalloc.o
 ifdef CONFIG_SYS_MALLOC_F_LEN
diff --git a/common/cli_readline.c b/common/cli_readline.c
index 9a9fb35..c1476e4 100644
--- a/common/cli_readline.c
+++ b/common/cli_readline.c
@@ -597,7 +597,7 @@  int cli_readline_into_buffer(const char *const prompt, char *buffer,
 					puts(tab_seq + (col & 07));
 					col += 8 - (col & 07);
 				} else {
-					char buf[2];
+					char __maybe_unused buf[2];
 
 					/*
 					 * Echo input using puts() to force an
diff --git a/common/cli_simple.c b/common/cli_simple.c
index 6c65cc6..00a8d2f 100644
--- a/common/cli_simple.c
+++ b/common/cli_simple.c
@@ -68,7 +68,7 @@  void cli_simple_process_macros(const char *input, char *output)
 	/* 1 = waiting for '(' or '{' */
 	/* 2 = waiting for ')' or '}' */
 	/* 3 = waiting for '''  */
-	char *output_start = output;
+	char __maybe_unused *output_start = output;
 
 	debug_parser("[PROCESS_MACROS] INPUT len %zd: \"%s\"\n", strlen(input),
 		     input);
diff --git a/common/image.c b/common/image.c
index f0f0135..eaa98d3 100644
--- a/common/image.c
+++ b/common/image.c
@@ -54,6 +54,10 @@  static const image_header_t *image_get_ramdisk(ulong rd_addr, uint8_t arch,
 #include <u-boot/md5.h>
 #include <time.h>
 #include <image.h>
+
+#ifndef __maybe_unused
+# define __maybe_unused		/* unimplemented */
+#endif
 #endif /* !USE_HOSTCC*/
 
 #include <u-boot/crc.h>
@@ -274,7 +278,7 @@  void image_multi_getimg(const image_header_t *hdr, ulong idx,
 
 static void image_print_type(const image_header_t *hdr)
 {
-	const char *os, *arch, *type, *comp;
+	const char __maybe_unused *os, *arch, *type, *comp;
 
 	os = genimg_get_os_name(image_get_os(hdr));
 	arch = genimg_get_arch_name(image_get_arch(hdr));
@@ -299,7 +303,7 @@  static void image_print_type(const image_header_t *hdr)
 void image_print_contents(const void *ptr)
 {
 	const image_header_t *hdr = (const image_header_t *)ptr;
-	const char *p;
+	const char __maybe_unused *p;
 
 	p = IMAGE_INDENT_STRING;
 	printf("%sImage Name:   %.*s\n", p, IH_NMLEN, image_get_name(hdr));
diff --git a/common/spl/spl.c b/common/spl/spl.c
index aeb0645..7f5e37f 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -288,6 +288,14 @@  void board_init_r(gd_t *dummy1, ulong dummy2)
 	jump_to_image_no_args(&spl_image);
 }
 
+#if !defined(CONFIG_SPL_SERIAL_SUPPORT)
+/* we have no console ... so define some dummy functions ... */
+void preloader_console_init(void)
+{
+	gd->bd = &bdata;
+	gd->have_console = 0;
+}
+#else
 /*
  * This requires UART clocks to be enabled.  In order for this to work the
  * caller must ensure that the gd pointer is valid.
@@ -307,6 +315,7 @@  void preloader_console_init(void)
 	spl_display_print();
 #endif
 }
+#endif
 
 /**
  * spl_relocate_stack_gd() - Relocate stack ready for board_init_r() execution
diff --git a/include/common.h b/include/common.h
index 8f4b2ec..bafe120 100644
--- a/include/common.h
+++ b/include/common.h
@@ -830,11 +830,18 @@  int	getc(void);
 int	tstc(void);
 
 /* stdout */
+#if defined(CONFIG_SPL_BUILD) && !defined(CONFIG_SPL_SERIAL_SUPPORT)
+#define	putc(...) do { } while (0)
+#define puts(...) do { } while (0)
+#define printf(...) do { } while (0)
+#define vprintf(...) do { } while (0)
+#else
 void	putc(const char c);
 void	puts(const char *s);
 int	printf(const char *fmt, ...)
 		__attribute__ ((format (__printf__, 1, 2)));
 int	vprintf(const char *fmt, va_list args);
+#endif
 
 /* stderr */
 #define eputc(c)		fputc(stderr, c)
diff --git a/include/configs/apf27.h b/include/configs/apf27.h
index 7554023..849eb1a 100644
--- a/include/configs/apf27.h
+++ b/include/configs/apf27.h
@@ -40,6 +40,7 @@ 
 #define CONFIG_SPL_LDSCRIPT	"arch/$(ARCH)/cpu/u-boot-spl.lds"
 #define CONFIG_SPL_MAX_SIZE	2048
 #define CONFIG_SPL_TEXT_BASE    0xA0000000
+#define CONFIG_SPL_SERIAL_SUPPORT
 
 /* NAND boot config */
 #define CONFIG_SPL_NAND_SUPPORT
diff --git a/include/configs/mx31pdk.h b/include/configs/mx31pdk.h
index 1282a6e..e01dfe6 100644
--- a/include/configs/mx31pdk.h
+++ b/include/configs/mx31pdk.h
@@ -35,6 +35,7 @@ 
 #define CONFIG_SPL_MAX_SIZE	2048
 #define CONFIG_SPL_NAND_SUPPORT
 #define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
 
 #define CONFIG_SPL_TEXT_BASE	0x87dc0000
 #define CONFIG_SYS_TEXT_BASE	0x87e00000
diff --git a/include/configs/mxs.h b/include/configs/mxs.h
index 38b1e93..9d823de 100644
--- a/include/configs/mxs.h
+++ b/include/configs/mxs.h
@@ -55,6 +55,7 @@ 
 #define CONFIG_SPL_LDSCRIPT	"arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds"
 #define CONFIG_SPL_LIBCOMMON_SUPPORT
 #define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
 #define CONFIG_SPL_GPIO_SUPPORT
 
 /* Memory sizes */
diff --git a/include/configs/tx25.h b/include/configs/tx25.h
index 622bd53..95fcdac 100644
--- a/include/configs/tx25.h
+++ b/include/configs/tx25.h
@@ -26,6 +26,7 @@ 
 #define CONFIG_SPL_MAX_SIZE		2048
 #define CONFIG_SPL_NAND_SUPPORT
 #define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
 
 #define CONFIG_SPL_TEXT_BASE		0x810c0000
 #define CONFIG_SYS_TEXT_BASE		0x81200000
diff --git a/lib/display_options.c b/lib/display_options.c
index 57fb974..6d9c6aa 100644
--- a/lib/display_options.c
+++ b/lib/display_options.c
@@ -121,9 +121,9 @@  int print_buffer(ulong addr, const void *data, uint width, uint count,
 	} lb;
 	int i;
 #ifdef CONFIG_SYS_SUPPORT_64BIT_DATA
-	uint64_t x;
+	uint64_t __maybe_unsued x;
 #else
-	uint32_t x;
+	uint32_t __maybe_unused x;
 #endif
 
 	if (linelen*width > MAX_LINE_LENGTH_BYTES)