[PATCH u-boot-marvell 3/5] tools: kwboot: Increase delay after changing baudrate in ARM code

Stefan Roese sr at denx.de
Wed Nov 3 06:38:18 CET 2021


On 27.10.21 20:57, Marek Behún wrote:
> From: Pali Rohár <pali at kernel.org>
> 
> Increase loop cycles from 600000 to 2998272, which should increase delay
> from 1ms to about 5ms on 1200 MHz CPU.
> 
> The Number 2998272 was chosen as the nearest value around 3000000 which can
> be encoded into one ARM mov instruction. It avoids usage of movt instruction
> which is not supported by ARMv5te cores.
> 
> Signed-off-by: Pali Rohár <pali at kernel.org>
> Reviewed-by: Marek Behún <marek.behun at nic.cz>

Reviewed-by: Stefan Roese <sr at denx.de>

Thanks,
Stefan

> ---
>   tools/kwboot.c | 18 +++++++++---------
>   1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/kwboot.c b/tools/kwboot.c
> index a6bfd3d4ce..84294cadfe 100644
> --- a/tools/kwboot.c
> +++ b/tools/kwboot.c
> @@ -119,7 +119,7 @@ static unsigned char kwboot_baud_code[] = {
>   				/* ;   writel(UART_BASE + DLL, new_dll);      */
>   				/* ;   writel(UART_BASE + DLH, new_dlh);      */
>   				/* ;   writel(UART_BASE + LCR, lcr & ~DLAB);  */
> -				/* ;   msleep(1);                             */
> +				/* ;   msleep(5);                             */
>   				/* ;   return 0;                              */
>   				/* ; }                                        */
>   
> @@ -130,7 +130,7 @@ static unsigned char kwboot_baud_code[] = {
>   	0x01, 0x00, 0x4d, 0xe3, /* movt  r0, #0xd001                          */
>   
>   				/*  ; r2 = address of preamble string         */
> -	0xd0, 0x20, 0x8f, 0xe2, /* adr   r2, preamble                         */
> +	0xcc, 0x20, 0x8f, 0xe2, /* adr   r2, preamble                         */
>   
>   				/*  ; Send preamble string over UART          */
>   				/* .Lloop_preamble:                           */
> @@ -177,15 +177,15 @@ static unsigned char kwboot_baud_code[] = {
>   
>   				/*  ; Read old baudrate value                 */
>   				/*  ; r2 = old_baudrate                       */
> -	0x8c, 0x20, 0x9f, 0xe5, /* ldr   r2, old_baudrate                     */
> +	0x88, 0x20, 0x9f, 0xe5, /* ldr   r2, old_baudrate                     */
>   
>   				/*  ; Calculate base clock                    */
>   				/*  ; r1 = r2 * r1                            */
>   	0x92, 0x01, 0x01, 0xe0, /* mul   r1, r2, r1                           */
>   
>   				/*  ; Read new baudrate value                 */
> -				/*  ; r2 = baudrate                           */
> -	0x88, 0x20, 0x9f, 0xe5, /* ldr   r2, baudrate                         */
> +				/*  ; r2 = new_baudrate                       */
> +	0x84, 0x20, 0x9f, 0xe5, /* ldr   r2, new_baudrate                     */
>   
>   				/*  ; Calculate new Divisor Latch             */
>   				/*  ; r1 = DIV_ROUND(r1, r2) =                */
> @@ -225,10 +225,10 @@ static unsigned char kwboot_baud_code[] = {
>   	0x80, 0x10, 0xc1, 0xe3, /* bic   r1, r1, #0x80                        */
>   	0x0c, 0x10, 0x80, 0xe5, /* str   r1, [r0, #0x0c]                      */
>   
> -				/*  ; Sleep 1ms ~~ 600000 cycles at 1200 MHz  */
> -				/*  ; r1 = 600000                             */
> -	0x9f, 0x1d, 0xa0, 0xe3, /* mov   r1, #0x27c0                          */
> -	0x09, 0x10, 0x40, 0xe3, /* movt  r1, #0x0009                          */
> +				/*  ; Loop 0x2dc000 (2998272) cycles          */
> +				/*  ; which is about 5ms on 1200 MHz CPU      */
> +				/*  ; r1 = 0x2dc000                           */
> +	0xb7, 0x19, 0xa0, 0xe3, /* mov   r1, #0x2dc000                        */
>   				/* .Lloop_sleep:                              */
>   	0x01, 0x10, 0x41, 0xe2, /* sub   r1, r1, #1                           */
>   	0x00, 0x00, 0x51, 0xe3, /* cmp   r1, #0                               */
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


More information about the U-Boot mailing list