tools: kwboot: Make kwboot more robust on a38x
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
--- tools/kwboot.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
tools/kwboot.c +10 -4
@@ -286,6 +286,7 @@ kwboot_bootmsg(int tty, void *msg) {int rc;char c; +int count;if (msg ==NULL )kwboot_printv ("Please reboot the target into UART boot mode..." );
@@ -297,10 +298,12 @@ kwboot_bootmsg(int tty, void *msg)if (rc)break ; - rc =kwboot_tty_send (tty, msg,8 ); -if (rc) { -usleep (msg_req_delay *1000 ); -continue ; +for (count =0 ; count <128 ; count++) { + rc =kwboot_tty_send (tty, msg,8 ); +if (rc) { +usleep (msg_req_delay *1000 ); +continue ; + } } rc =kwboot_tty_recv (tty, &c,1 , msg_rsp_timeo);
@@ -426,6 +429,9 @@ kwboot_xmodem(int tty, const void *_data, size_t size)kwboot_printv ("Sending boot image...\n" ); +sleep (2 );/* flush isn't effective without it */ +tcflush (tty,TCIOFLUSH ); + do { struct kwboot_block block; int n;
Signature · 1 line
2.18.0
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
Hi Baruch, Jon,
Quoted 11 lines · Baruch Siach
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
Quoted 8 lines
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
Signed-off-by Jon Nettleton <[email protected]>Signed-off-by Baruch Siach <[email protected]>---
Lately I haven't had much luck with using kwboot on a38x. I seem to be able to get the spl to boot from uart (even better now thanks to this patch) but the next stage still loads from SPI. I haven't been brave enough to blank a board to see if that changes behaviour. Are your experiences any different? I'm wondering if there is something we need to do in the SPL to figure out that we need to load the next stage via xmodem.
Quoted 47 lines
tools/kwboot.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)tools/kwboot.c +10
-5@@ -286,6 +286,7 @@ kwboot_bootmsg(int tty, void *msg) {int rc;char c; +int count;if (msg ==NULL )kwboot_printv ("Please reboot the target into UART boot mode..." );@@ -297,10 +298,12 @@ kwboot_bootmsg(int tty, void *msg)if (rc)break ; - rc =kwboot_tty_send (tty, msg,8 ); -if (rc) { -usleep (msg_req_delay *1000 ); -continue ; +for (count =0 ; count <128 ; count++) { + rc =kwboot_tty_send (tty, msg,8 ); +if (rc) { +usleep (msg_req_delay *1000 ); +continue ; + } } rc =kwboot_tty_recv (tty, &c,1 , msg_rsp_timeo);@@ -426,6 +429,9 @@ kwboot_xmodem(int tty, const void *_data, size_t size)kwboot_printv ("Sending boot image...\n" ); +sleep (2 );/* flush isn't effective without it */ +tcflush (tty,TCIOFLUSH ); + do { struct kwboot_block block; int n; --2.18.0
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
Hi Chris,
Quoted 16 lines · Chris Packham
Quoted 15 lines · Baruch Siach
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
Quoted 5 lines
Quoted 3 lines
Signed-off-by Jon Nettleton <[email protected]>Signed-off-by Baruch Siach <[email protected]>---
Reviewed-by Chris Packham <[email protected]>
Thanks.
Quoted 7 lines
Lately I haven't had much luck with using kwboot on a38x. I seem to be able to get the spl to boot from uart (even better now thanks to this patch) but the next stage still loads from SPI. I haven't been brave enough to blank a board to see if that changes behaviour. Are your experiences any different? I'm wondering if there is something we need to do in the SPL to figure out that we need to load the next stage via xmodem.
It works for me here on the Clearfog.
The code that determines the seconds stage load device is in arch/arm/mach-mvebu/spl.c:get_boot_device(). Does the code there get it right? What do you read from CONFIG_BOOTROM_ERR_REG?
baruch
Quoted 42 lines
Quoted 42 lines
tools/kwboot.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)tools/kwboot.c +10
-4@@ -286,6 +286,7 @@ kwboot_bootmsg(int tty, void *msg) {int rc;char c; +int count;if (msg ==NULL )kwboot_printv ("Please reboot the target into UART boot mode..." );@@ -297,10 +298,12 @@ kwboot_bootmsg(int tty, void *msg)if (rc)break ; - rc =kwboot_tty_send (tty, msg,8 ); -if (rc) { -usleep (msg_req_delay *1000 ); -continue ; +for (count =0 ; count <128 ; count++) { + rc =kwboot_tty_send (tty, msg,8 ); +if (rc) { +usleep (msg_req_delay *1000 ); +continue ; + } } rc =kwboot_tty_recv (tty, &c,1 , msg_rsp_timeo);@@ -426,6 +429,9 @@ kwboot_xmodem(int tty, const void *_data, size_t size)kwboot_printv ("Sending boot image...\n" ); +sleep (2 );/* flush isn't effective without it */ +tcflush (tty,TCIOFLUSH ); + do { struct kwboot_block block; int n;
Signature · 3 lines
http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il -PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
Quoted 36 lines · Baruch Siach
Hi Chris,
Quoted 16 lines · Chris Packham
Quoted 15 lines · Baruch Siach
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
Quoted 5 lines
Quoted 3 lines
Signed-off-by Jon Nettleton <[email protected]>Signed-off-by Baruch Siach <[email protected]>---
Reviewed-by Chris Packham <[email protected]>Thanks.
Quoted 7 lines
Lately I haven't had much luck with using kwboot on a38x. I seem to be able to get the spl to boot from uart (even better now thanks to this patch) but the next stage still loads from SPI. I haven't been brave enough to blank a board to see if that changes behaviour. Are your experiences any different? I'm wondering if there is something we need to do in the SPL to figure out that we need to load the next stage via xmodem.
Quoted 6 lines
It works for me here on the Clearfog.
The code that determines the seconds stage load device is in arch/arm/mach-mvebu/spl.c:get_boot_device(). Does the code there get it right? What do you read from
CONFIG_BOOTROM_ERR_REG?
I get the following from enabling the debug
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34
The strapping is for SPI so the second part isn't surprising.
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
Quoted 45 lines · Chris Packham
Quoted 36 lines · Baruch Siach
Hi Chris,
Quoted 16 lines · Chris Packham
Quoted 15 lines · Baruch Siach
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
Quoted 5 lines
Quoted 3 lines
Signed-off-by Jon Nettleton <[email protected]>Signed-off-by Baruch Siach <[email protected]>---
Reviewed-by Chris Packham <[email protected]>Thanks.
Quoted 7 lines
Lately I haven't had much luck with using kwboot on a38x. I seem to be able to get the spl to boot from uart (even better now thanks to this patch) but the next stage still loads from SPI. I haven't been brave enough to blank a board to see if that changes behaviour. Are your experiences any different? I'm wondering if there is something we need to do in the SPL to figure out that we need to load the next stage via xmodem.
Quoted 6 lines
It works for me here on the Clearfog.
The code that determines the seconds stage load device is in arch/arm/mach-mvebu/spl.c:get_boot_device(). Does the code there get it right? What do you read from
CONFIG_BOOTROM_ERR_REG?
Quoted 8 lines
I get the following from enabling the debug
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34The strapping is for SPI so the second part isn't surprising.
(sorry hit send too soon)
If I hard code get_boot_device() to return BOOT_DEVICE_UART then kwboot works for me.
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
Quoted 54 lines · Chris Packham
Quoted 52 lines · Chris Packham
Quoted 36 lines · Baruch Siach
Hi Chris,
Quoted 16 lines · Chris Packham
Quoted 15 lines · Baruch Siach
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
Quoted 5 lines
Quoted 3 lines
Signed-off-by Jon Nettleton <[email protected]>Signed-off-by Baruch Siach <[email protected]>---
Reviewed-by Chris Packham <[email protected]>Thanks.
Quoted 7 lines
Lately I haven't had much luck with using kwboot on a38x. I seem to be able to get the spl to boot from uart (even better now thanks to this patch) but the next stage still loads from SPI. I haven't been brave enough to blank a board to see if that changes behaviour. Are your experiences any different? I'm wondering if there is something we need to do in the SPL to figure out that we need to load the next stage via xmodem.
Quoted 6 lines
It works for me here on the Clearfog.
The code that determines the seconds stage load device is in arch/arm/mach-mvebu/spl.c:get_boot_device(). Does the code there get it right? What do you read from
CONFIG_BOOTROM_ERR_REG?I get the following from enabling the debug
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34
Quoted 6 lines
Quoted 1 line
The strapping is for SPI so the second part isn't surprising.
(sorry hit send too soon)
If I hard code
get_boot_device()to returnBOOT_DEVICE_UARTthen kwboot works for me.
And if I revert commit e83e2b390038 ("arm: mvebu: fix boot from UART when in fallback mode") it works properly.
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
Quoted 58 lines · Chris Packham
Quoted 56 lines · Chris Packham
Quoted 53 lines · Chris Packham
Quoted 36 lines · Baruch Siach
Hi Chris,
Quoted 16 lines · Chris Packham
Quoted 15 lines · Baruch Siach
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
Quoted 5 lines
Quoted 3 lines
Signed-off-by Jon Nettleton <[email protected]>Signed-off-by Baruch Siach <[email protected]>---
Reviewed-by Chris Packham <[email protected]>Thanks.
Quoted 7 lines
Lately I haven't had much luck with using kwboot on a38x. I seem to be able to get the spl to boot from uart (even better now thanks to this patch) but the next stage still loads from SPI. I haven't been brave enough to blank a board to see if that changes behaviour. Are your experiences any different? I'm wondering if there is something we need to do in the SPL to figure out that we need to load the next stage via xmodem.
Quoted 6 lines
It works for me here on the Clearfog.
The code that determines the seconds stage load device is in arch/arm/mach-mvebu/spl.c:get_boot_device(). Does the code there get it right? What do you read from
CONFIG_BOOTROM_ERR_REG?I get the following from enabling the debug
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34The strapping is for SPI so the second part isn't surprising.
Quoted 7 lines
Quoted 4 lines
(sorry hit send too soon)
If I hard code
get_boot_device()to returnBOOT_DEVICE_UARTthen kwboot works for me.And if I revert commit
e83e2b390038("arm: mvebu: fix boot from UART when in fallback mode") it works properly.
Chris,
I see the issue. Mainline is still missing another patch from our local tree. I don't think Baruch has broken it out and submitted it to mainline yet. Look at this #ifndef here.
https://github.com/SolidRun/u-boot/blob/v2018.01-solidrun-a38x/arch/arm/mach-mvebu/spl.c#L35
Basically this allows you to specifically build u-boot for UART recovery and short circuits the detected boot device if it is already configured. Please try adding that in and verify that it works for you.
This also requires u-boot with commit 72c4e67d08fe2389754b4ce874d76b1bbd9fef24 and CONFIG_MVEBU_SPL_BOOT_DEVICE_UART set in your .config
Thanks,
Jon
This does bring up the question as to whether Boot Method should be individual choices and then we build multiple images named for each boot type rather than requiring an individual build for each boot type.
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
Quoted 85 lines · Jon Nettleton
Quoted 58 lines · Chris Packham
Quoted 56 lines · Chris Packham
Quoted 53 lines · Chris Packham
Quoted 36 lines · Baruch Siach
Hi Chris,
Quoted 16 lines · Chris Packham
Quoted 15 lines · Baruch Siach
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
Quoted 5 lines
Quoted 3 lines
Signed-off-by Jon Nettleton <[email protected]>Signed-off-by Baruch Siach <[email protected]>---
Reviewed-by Chris Packham <[email protected]>Thanks.
Quoted 7 lines
Lately I haven't had much luck with using kwboot on a38x. I seem to be able to get the spl to boot from uart (even better now thanks to this patch) but the next stage still loads from SPI. I haven't been brave enough to blank a board to see if that changes behaviour. Are your experiences any different? I'm wondering if there is something we need to do in the SPL to figure out that we need to load the next stage via xmodem.
Quoted 6 lines
It works for me here on the Clearfog.
The code that determines the seconds stage load device is in arch/arm/mach-mvebu/spl.c:get_boot_device(). Does the code there get it right? What do you read from
CONFIG_BOOTROM_ERR_REG?I get the following from enabling the debug
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34The strapping is for SPI so the second part isn't surprising.
Quoted 7 lines
Quoted 4 lines
(sorry hit send too soon)
If I hard code
get_boot_device()to returnBOOT_DEVICE_UARTthen kwboot works for me.And if I revert commit
e83e2b390038("arm: mvebu: fix boot from UART when in fallback mode") it works properly.Chris,
I see the issue. Mainline is still missing another patch from our local tree. I don't think Baruch has broken it out and submitted it to mainline yet. Look at this #ifndef here.
https://github.com/SolidRun/u-boot/blob/v2018.01-solidrun-a38x/arch/arm/mach-mvebu/spl.c#L35
Basically this allows you to specifically build u-boot for UART recovery and short circuits the detected boot device if it is already configured. Please try adding that in and verify that it works for you.
This also requires u-boot with commit
72c4e67d08fe2389754b4ce874d76b1bbd9fef24andCONFIG_MVEBU_SPL_BOOT_DEVICE_UARTset in your .config
Quoted 7 lines
Thanks,
JonThis does bring up the question as to whether Boot Method should be individual choices and then we build multiple images named for each boot type rather than requiring an individual build for each boot type.
That's certainly what Marvell's USP does. But I find it a pain because you have to remember to load the right image and you waste so much time sending an image configured for spi over xmodem only to realise you copied the wrong one. Or you brick a board by writing the UART version into flash.I like the kwboot method of patching the image on the fly.
I think the real issue I was experiencing is that there are 2 different behaviours depending on whether your intercepting a normal boot. Or bringing up a blank board. I've just sent a series to deal with this http://patchwork.ozlabs.org/patch/958704/ (I got your main just after sending it, I'll include you in the Cc if there is a re-roll).
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
Took a look Chris, and looks fine.
I would like to note we will have a patchset coming to mainline that adds bubt support to the a38x series. You can get an overview of the initial changes here.
https://github.com/SolidRun/u-boot/commits/v2018.01-solidrun-a38x/cmd/mvebu
Some of them are specific to other patches in our tree that we aren't sure about mainlining such as naming the final image after the intended boot target it is built for.
Specifically I have added boot mode selection verification of the image to be written in this commit.
https://github.com/SolidRun/u-boot/commit/6278dfa518ab4591494e17c5d4d1d9477c22e39f#diff-c63156ce279617bc2b2c5fe8cd299c43
In this case when using bubt to flash an image it is impossible to brick a machine by writing the incorrect image to the incorrect boot medium.
Quoted 108 lines · Chris Packham
Quoted 85 lines · Jon Nettleton
Quoted 58 lines · Chris Packham
Quoted 56 lines · Chris Packham
Quoted 53 lines · Chris Packham
Quoted 36 lines · Baruch Siach
Hi Chris,
Quoted 16 lines · Chris Packham
Quoted 15 lines · Baruch Siach
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
Quoted 5 lines
Quoted 3 lines
Signed-off-by Jon Nettleton <[email protected]>Signed-off-by Baruch Siach <[email protected]>---
Reviewed-by Chris Packham <[email protected]>Thanks.
Quoted 7 lines
Lately I haven't had much luck with using kwboot on a38x. I seem to be able to get the spl to boot from uart (even better now thanks to this patch) but the next stage still loads from SPI. I haven't been brave enough to blank a board to see if that changes behaviour. Are your experiences any different? I'm wondering if there is something we need to do in the SPL to figure out that we need to load the next stage via xmodem.
Quoted 6 lines
It works for me here on the Clearfog.
The code that determines the seconds stage load device is in arch/arm/mach-mvebu/spl.c:get_boot_device(). Does the code there get it right? What do you read from
CONFIG_BOOTROM_ERR_REG?I get the following from enabling the debug
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34
BOOTROM_REG=0x63001000 boot_device=0x0
SAR_REG=0xcb20b342 boot_device=0x34The strapping is for SPI so the second part isn't surprising.
Quoted 7 lines
Quoted 4 lines
(sorry hit send too soon)
If I hard code
get_boot_device()to returnBOOT_DEVICE_UARTthen kwboot works for me.And if I revert commit
e83e2b390038("arm: mvebu: fix boot from UART when in fallback mode") it works properly.Chris,
I see the issue. Mainline is still missing another patch from our local tree. I don't think Baruch has broken it out and submitted it to mainline yet. Look at this #ifndef here.
https://github.com/SolidRun/u-boot/blob/v2018.01-solidrun-a38x/arch/arm/mach-mvebu/spl.c#L35
Basically this allows you to specifically build u-boot for UART recovery and short circuits the detected boot device if it is already configured. Please try adding that in and verify that it works for you.
This also requires u-boot with commit
72c4e67d08fe2389754b4ce874d76b1bbd9fef24andCONFIG_MVEBU_SPL_BOOT_DEVICE_UARTset in your .configQuoted 7 lines
Thanks,
JonThis does bring up the question as to whether Boot Method should be individual choices and then we build multiple images named for each boot type rather than requiring an individual build for each boot type.
That's certainly what Marvell's USP does. But I find it a pain because you have to remember to load the right image and you waste so much time sending an image configured for spi over xmodem only to realise you copied the wrong one. Or you brick a board by writing the UART version into flash.I like the kwboot method of patching the image on the fly.
I think the real issue I was experiencing is that there are 2 different behaviours depending on whether your intercepting a normal boot. Or bringing up a blank board. I've just sent a series to deal with this http://patchwork.ozlabs.org/patch/958704/ (I got your main just after sending it, I'll include you in the Cc if there is a re-roll).
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
In reply to Chris PackhamHi,
Quoted 7 lines · Chris Packham
Lately I haven't had much luck with using kwboot on a38x. I seem to be able to get the spl to boot from uart (even better now thanks to this patch) but the next stage still loads from SPI. I haven't been brave enough to blank a board to see if that changes behaviour. Are your experiences any different? I'm wondering if there is something we need to do in the SPL to figure out that we need to load the next stage via xmodem.
FWIW, I managed to install my clearfog-base using it, though I don't remember any particularly bad corner case. I remember about the usual issue with the SPL being a bit too verbose and breaking the upload but that's something that already affected prior versions. I think the current u-boot version had a pause at this moment but I could be wrong, anyway it used to work for me.
Just my two cents,
Willy
PATCH 1/1 tools: kwboot: Make kwboot more robust on a38x
In reply to Baruch SiachQuoted 52 lines · Baruch Siach
From: Jon Nettleton <[email protected]>
This patch accomplishes 2 things to make the kwboot procedure on the a38x more reliable.
1) We fill the tty with 1K of the magic bootparam. This helps with the timing of where the microcode picks up in the read of the line to ensure we actually catch the break to go into recovery mode
2) Before starting the xmodem transfer we sleep for 2 seconds and then flush the line. This allows all the magic bootparam to be flushed from the line and makes the xmodem transfer reliable and removes the Bad message failures.
Signed-off-by Jon Nettleton <[email protected]>Signed-off-by Baruch Siach <[email protected]>--- tools/kwboot.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)tools/kwboot.c +7
-4@@ -286,6 +286,7 @@ kwboot_bootmsg(int tty, void *msg) {int rc;char c; +int count;if (msg ==NULL )kwboot_printv ("Please reboot the target into UART boot mode..." );@@ -297,10 +298,12 @@ kwboot_bootmsg(int tty, void *msg)if (rc)break ; - rc =kwboot_tty_send (tty, msg,8 ); -if (rc) { -usleep (msg_req_delay *1000 ); -continue ; +for (count =0 ; count <128 ; count++) { + rc =kwboot_tty_send (tty, msg,8 ); +if (rc) { +usleep (msg_req_delay *1000 ); +continue ; + } } rc =kwboot_tty_recv (tty, &c,1 , msg_rsp_timeo);
tools/kwboot.c kwboot_xmodem(int tty, const void *_data, size_t size) · line 437
Quoted 9 lines
tools/kwboot.c +3
-0@@ -426,6 +429,9 @@ kwboot_xmodem(int tty, const void *_data, size_t size)kwboot_printv ("Sending boot image...\n" ); +sleep (2 );/* flush isn't effective without it */ +tcflush (tty,TCIOFLUSH ); + do { struct kwboot_block block; int n;
Applied to u-boot-marvell/master
Thanks,
Stefan