From 2ee665339b06285a5fd9e36410d1167efc9b0606 Mon Sep 17 00:00:00 2001 From: wdenk Date: Mon, 11 Oct 2004 22:43:02 +0000 Subject: * Patch by Pantelis Antoniou, 14 Sep 2004: Fix early serial hang when CONFIG_SERIAL_MULTI is defined. * Patch by Pantelis Antoniou, 14 Sep 2004: Kick watchdog when bz-decompressing --- CHANGELOG | 6 +++ common/serial.c | 116 ++++++++++++++++++++++------------------- lib_generic/bzlib.c | 5 ++ lib_generic/bzlib_decompress.c | 14 +++++ 4 files changed, 87 insertions(+), 54 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a561208..b8ae75f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,12 @@ Changes since U-Boot 1.1.1: ====================================================================== +* Patch by Pantelis Antoniou, 14 Sep 2004: + Fix early serial hang when CONFIG_SERIAL_MULTI is defined. + +* Patch by Pantelis Antoniou, 14 Sep 2004: + Kick watchdog when bz-decompressing + * Fix CFG_HZ problems on AT91RM9200 systems [Remember: CFG_HZ should be 1000 on ALL systems!] diff --git a/common/serial.c b/common/serial.c index f89bb0a..c0f5a4c 100644 --- a/common/serial.c +++ b/common/serial.c @@ -31,7 +31,7 @@ static struct serial_device *serial_devices = NULL; static struct serial_device *serial_current = NULL; #ifndef CONFIG_LWMON -struct serial_device * default_serial_console (void) +struct serial_device *default_serial_console (void) { #if defined(CONFIG_8xx_CONS_SMC1) || defined(CONFIG_8xx_CONS_SMC2) return &serial_smc_device; @@ -44,7 +44,7 @@ struct serial_device * default_serial_console (void) } #endif -static int serial_register(struct serial_device* dev) +static int serial_register (struct serial_device *dev) { DECLARE_GLOBAL_DATA_PTR; @@ -61,26 +61,25 @@ static int serial_register(struct serial_device* dev) return 0; } -void serial_initialize(void) +void serial_initialize (void) { #if defined(CONFIG_8xx_CONS_SMC1) || defined(CONFIG_8xx_CONS_SMC2) - serial_register(&serial_smc_device); + serial_register (&serial_smc_device); #endif #if defined(CONFIG_8xx_CONS_SCC1) || defined(CONFIG_8xx_CONS_SCC2) \ || defined(CONFIG_8xx_CONS_SCC3) || defined(CONFIG_8xx_CONS_SCC4) - serial_register(&serial_scc_device); + serial_register (&serial_scc_device); #endif - serial_assign(default_serial_console()->name); + serial_assign (default_serial_console ()->name); } -void serial_devices_init(void) +void serial_devices_init (void) { device_t dev; struct serial_device *s = serial_devices; - while (s) - { + while (s) { memset (&dev, 0, sizeof (dev)); strcpy (dev.name, s->name); @@ -98,14 +97,12 @@ void serial_devices_init(void) } } -int serial_assign(char * name) +int serial_assign (char *name) { struct serial_device *s; - for (s = serial_devices; s; s = s->next) - { - if (strcmp(s->name, name) == 0) - { + for (s = serial_devices; s; s = s->next) { + if (strcmp (s->name, name) == 0) { serial_current = s; return 0; } @@ -114,83 +111,94 @@ int serial_assign(char * name) return 1; } -void serial_reinit_all(void) +void serial_reinit_all (void) { struct serial_device *s; - for (s = serial_devices; s; s = s->next) - { - s->init(); + for (s = serial_devices; s; s = s->next) { + s->init (); } } -int serial_init(void) +int serial_init (void) { - if (!serial_current) - { - struct serial_device *dev = default_serial_console(); - return dev->init(); + DECLARE_GLOBAL_DATA_PTR; + + if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { + struct serial_device *dev = default_serial_console (); + + return dev->init (); } - return serial_current->init(); + return serial_current->init (); } -void serial_setbrg(void) +void serial_setbrg (void) { - if (!serial_current) - { - struct serial_device *dev = default_serial_console(); - dev->setbrg(); + DECLARE_GLOBAL_DATA_PTR; + + if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { + struct serial_device *dev = default_serial_console (); + + dev->setbrg (); return; } - serial_current->setbrg(); + serial_current->setbrg (); } -int serial_getc(void) +int serial_getc (void) { - if (!serial_current) - { - struct serial_device *dev = default_serial_console(); - return dev->getc(); + DECLARE_GLOBAL_DATA_PTR; + + if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { + struct serial_device *dev = default_serial_console (); + + return dev->getc (); } - return serial_current->getc(); + return serial_current->getc (); } -int serial_tstc(void) +int serial_tstc (void) { - if (!serial_current) - { - struct serial_device *dev = default_serial_console(); - return dev->tstc(); + DECLARE_GLOBAL_DATA_PTR; + + if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { + struct serial_device *dev = default_serial_console (); + + return dev->tstc (); } - return serial_current->tstc(); + return serial_current->tstc (); } -void serial_putc(const char c) +void serial_putc (const char c) { - if (!serial_current) - { - struct serial_device *dev = default_serial_console(); - dev->putc(c); + DECLARE_GLOBAL_DATA_PTR; + + if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { + struct serial_device *dev = default_serial_console (); + + dev->putc (c); return; } - serial_current->putc(c); + serial_current->putc (c); } -void serial_puts(const char *s) +void serial_puts (const char *s) { - if (!serial_current) - { - struct serial_device *dev = default_serial_console(); - dev->puts(s); + DECLARE_GLOBAL_DATA_PTR; + + if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { + struct serial_device *dev = default_serial_console (); + + dev->puts (s); return; } - serial_current->puts(s); + serial_current->puts (s); } #endif /* CONFIG_SERIAL_MULTI */ diff --git a/lib_generic/bzlib.c b/lib_generic/bzlib.c index 8a64b79..87e6a6e 100644 --- a/lib_generic/bzlib.c +++ b/lib_generic/bzlib.c @@ -1,4 +1,6 @@ #include +#include +#include #ifdef CONFIG_BZIP2 /* @@ -841,6 +843,9 @@ int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) if (s->strm != strm) return BZ_PARAM_ERROR; while (True) { +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) + WATCHDOG_RESET(); +#endif if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR; if (s->state == BZ_X_OUTPUT) { if (s->smallDecompress) diff --git a/lib_generic/bzlib_decompress.c b/lib_generic/bzlib_decompress.c index a4a1687..a575052 100644 --- a/lib_generic/bzlib_decompress.c +++ b/lib_generic/bzlib_decompress.c @@ -1,4 +1,6 @@ #include +#include +#include #ifdef CONFIG_BZIP2 /*-------------------------------------------------------------*/ @@ -416,6 +418,9 @@ Int32 BZ2_decompress ( DState* s ) while (True) { +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) + WATCHDOG_RESET(); +#endif if (nextSym == EOB) break; if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) { @@ -498,6 +503,9 @@ Int32 BZ2_decompress ( DState* s ) if (s->mtfbase[0] == 0) { kk = MTFA_SIZE-1; for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) { +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) + WATCHDOG_RESET(); +#endif for (jj = MTFL_SIZE-1; jj >= 0; jj--) { s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj]; kk--; @@ -560,6 +568,9 @@ Int32 BZ2_decompress ( DState* s ) } while (i != s->origPtr); +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) + WATCHDOG_RESET(); +#endif s->tPos = s->origPtr; s->nblock_used = 0; if (s->blockRandomised) { @@ -572,6 +583,9 @@ Int32 BZ2_decompress ( DState* s ) } else { +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) + WATCHDOG_RESET(); +#endif /*-- compute the T^(-1) vector --*/ for (i = 0; i < nblock; i++) { uc = (UChar)(s->tt[i] & 0xff); -- cgit v1.1