[U-Boot] [PATCH 62/71] serial: spl: Implement empty functions for SPL

Marek Vasut
2012-09-18T18:24:59Z

Dear Tom Rini,

> On 09/18/12 11:01, Marek Vasut wrote:
> > Dear Tom Rini,
> >
> >> On 09/18/12 10:13, Marek Vasut wrote:
> >>> Dear Tom Rini,
> >>>
> >>>> On Mon, Sep 17, 2012 at 01:21:27AM +0200, Marek Vasut wrote:
> >>>>> Implement empty serial_* functions for SPL without serial
> >>>>> support enabled. This is imperative to haave once serial
> >>>>> multi is enabled unconditionally.
> >>>>>
> >>>>> Signed-off-by: Marek Vasut <marex@denx.de> Cc: Marek Vasut
> >>>>> <marek.vasut@gmail.com> Cc: Tom Rini <trini@ti.com> ---
> >>>>>
> >>>>> common/serial.c | 12 ++++++++++++ 1 file changed, 12
> >>>>> insertions(+)
> >>>>>
> >>>>> diff --git a/common/serial.c b/common/serial.c index
> >>>>> 631af65..cef4ba8 100644 --- a/common/serial.c +++
> >>>>> b/common/serial.c @@ -27,6 +27,16 @@
> >>>>>
> >>>>> #include <post.h> #include <linux/compiler.h>
> >>>>>
> >>>>> +/* Implement prototypes for SPL without serial support */
> >>>>> +#if defined(CONFIG_SPL_BUILD) &&
> >>>>> !defined(CONFIG_SPL_SERIAL_SUPPORT) +int serial_init(void)
> >>>>> { return 0; } +void serial_setbrg(void) {} +int
> >>>>> serial_getc(void) { return 0; } +int serial_tstc(void) {
> >>>>> return 0; } +void serial_putc(const char c) {} +void
> >>>>> serial_puts(const char *s) {}
> >>>>
> >>>> This isn't quite right. We need to allow for: - No output
> >>>> SPL, strings collected (so #defined to do{} while (0))
> >>>
> >>> Which is not type-checked and will drag in bugs.
> >>
> >> Scott has addressed this.
> >>
> >>>> - puts + printf SPL (CONFIG_SPL_SERIAL_SUPPORT +
> >>>> CONFIG_SPL_LIBCOMMON_SUPPORT) - puts only SPL
> >>>> (CONFIG_SPL_SERIAL_SUPPORT + #define puts serial_puts/putc).
> >>>>
> >>>> I'm not asking you to do that, but you will have to adapt to
> >>>> it once Jose is done with it. What that means, off the top
> >>>> of my head, is we can just drop this patch as in the first
> >>>> and last case serial.o will be garbage-collected (or not
> >>>> built) and in the middle case, this will be fully used.
> >>>
> >>> I can't drop this patch as it will break all of SPL when
> >>> CONFIG_SERIAL_MULTI is unconditionally enabled.
> >>
> >> Why is it breaking _all_ of SPL? Have you run-tested this
> >> anywhere, especially with SPL? In most cases it should be used
> >> and real functions provided or garbage collected away.
> >
> > Yes, try compiling m28evk without this patch for example, it's
> > going to break it. Because CONFIG_SPL_SERIAL_SUPPORT is disabled,
> > yet it uses code that contains references to puts() etc.
>
> Progress! Now, why isn't this file being garbage collected?

What file?

> m28evk
> is fitting into the first category I said (no output) but now it's not
> discarding things that it should be discarding.

What is not discarding things and what things should be discarded? I believe if
you're missing symbols, the compiler will error-out. Always.

Best regards,
Marek Vasut