PowerPC: boot: Parse chosen/cmdline-timeout parameter
PATCH v3 1/1 PowerPC: boot: Parse chosen/cmdline-timeout parameter
A 5 second timeout during boot might be too long, so make it configurable. Run the loop at least once to let the user stop the boot by holding a key pressed. If the timeout is set to 0, don't wait for input, which can be used as a workaround if the boot hangs on random data coming in on the serial port.
---
I googled for it, and can't find v2 applied anywhere. I've made an improvement to the patch: If the timeout is 0, don't wait for input. We have a board where the serial port gives garbage when it's not connected - this board would then hang in the bootloader.
If someone (Michael Ellerman?) has already applied it somewhere, I can send a separate patch for that particular change.
ChangeLog:
v3:
- Don't wait for input if the timeout is 0
v2:
- Rename the property linux,cmdline-timeout (Grant Likely)
- Run the loop at least once to allow (Grant Likely)
arch/powerpc/boot/main.c | 13 +++++++++++-- arch/powerpc/boot/ops.h | 2 +- arch/powerpc/boot/serial.c | 6 +++--- 3 files changed, 15 insertions(+), 6 deletions(-)
arch/powerpc/boot/main.c +11 -2
@@ -144,13 +144,22 @@ static char cmdline[COMMAND_LINE_SIZE]static void prep_cmdline (void *chosen) { +unsigned int getline_timeout =5000 ; +int v; +int n; + +/* Wait-for-input time */ + n =getprop (chosen,"linux,cmdline-timeout" , &v,sizeof (v)); +if (n ==sizeof (v)) + getline_timeout = v; +if (cmdline[0 ] =='\0' )getprop (chosen,"bootargs" , cmdline,COMMAND_LINE_SIZE -1 );printf ("\n\rLinux/PowerPC load: %s" , cmdline);/* If possible, edit the command line */ -if (console_ops.edit_cmdline) - console_ops.edit_cmdline (cmdline,COMMAND_LINE_SIZE ); +if (console_ops.edit_cmdline && getline_timeout) + console_ops.edit_cmdline (cmdline,COMMAND_LINE_SIZE , getline_timeout);printf ("\n\r" );/* Put the command line back into the devtree for the kernel */
arch/powerpc/boot/ops.h +1 -1
@@ -58,7 +58,7 @@ extern struct dt_ops dt_ops;struct console_ops {int (*open)(void );void (*write)(const char *buf,int len); -void (*edit_cmdline)(char *buf,int len); +void (*edit_cmdline)(char *buf,int len,unsigned int getline_timeout);void (*close)(void );void *data; };
arch/powerpc/boot/serial.c +3 -3
@@ -33,7 +33,7 @@ static void serial_write(const char *buf, int len) scdp->putc (*buf++); } -static void serial_edit_cmdline (char *buf,int len) +static void serial_edit_cmdline (char *buf,int len,unsigned int timeout) {int timer =0 , count;char ch, *cp;
@@ -44,7 +44,7 @@ static void serial_edit_cmdline(char *buf, int len) cp = &buf[count]; count++; -while (timer++ <5 *1000 ) { + do { if (scdp->tstc()) { while (((ch = scdp->getc()) != '\n') && (ch != '\r')) { /* Test for backspace/delete */
@@ -70,7 +70,7 @@ static void serial_edit_cmdline(char *buf, int len)break ;/* Exit 'timer' loop */ }udelay (1000 );/* 1 msec */ - } + }while (timer++ < timeout); *cp =0 ; }
Signature · 1 line
1.7.9.6
Michael Ellerman
reviewerQuoted 9 lines · Simon Kagstrom
A 5 second timeout during boot might be too long, so make it configurable. Run the loop at least once to let the user stop the boot by holding a key pressed. If the timeout is set to 0, don't wait for input, which can be used as a workaround if the boot hangs on random data coming in on the serial port.
Signed-off-by Simon Kagstrom <[email protected]>---
Quoted 7 lines
I googled for it, and can't find v2 applied anywhere. I've made an improvement to the patch: If the timeout is 0, don't wait for input. We have a board where the serial port gives garbage when it's not connected - this board would then hang in the bootloader.
If someone (Michael Ellerman?) has already applied it somewhere, I can send a separate patch for that particular change.
No I haven't applied it yet. I will put it in next in the next week or so for 3.19, you don't need to do anything.
cheers