Browse Source
Rewrite the delay code from assembler to C. Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>pull/1734/head
Marek Vasut
6 years ago
4 changed files with 32 additions and 122 deletions
@ -1,109 +0,0 @@ |
|||
/* |
|||
* Copyright (c) 2015-2018, Renesas Electronics Corporation. All rights reserved. |
|||
* |
|||
* SPDX-License-Identifier: BSD-3-Clause |
|||
*/ |
|||
|
|||
#include <arch.h> |
|||
#include <asm_macros.S> |
|||
#include "micro_delay.h" |
|||
|
|||
#define CPG_BASE (0xE6150000) |
|||
#define CPG_SMSTPCR1 (0x0134) |
|||
#define CPG_CPGWPR (0x0900) |
|||
|
|||
/* Module bit for TMU ch3-5 */ |
|||
#define MSTPCR1_TMU1 (1 << 24) |
|||
|
|||
#define TMU3_BASE (0xE6FC0000) |
|||
#define TMU_TSTR (0x0004) |
|||
#define TMU_TCOR (0x0008) |
|||
#define TMU_TCNT (0x000C) |
|||
#define TMU_TCR (0x0010) |
|||
/* Start bit for TMU ch3 */ |
|||
#define TSTR1_TMU3 (1 << 0) |
|||
|
|||
#define MIDR_CA57 (0x0D07 << MIDR_PN_SHIFT) |
|||
#define MIDR_CA53 (0x0D03 << MIDR_PN_SHIFT) |
|||
|
|||
.globl rcar_micro_delay |
|||
#if (TMU3_MEASUREMENT == 1) |
|||
.globl tmu3_init |
|||
.globl tmu3_start |
|||
.globl tmu3_stop |
|||
.globl tcnt3_snapshot |
|||
#endif |
|||
/* Aligned with the cache line */ |
|||
.align 6 |
|||
|
|||
func rcar_micro_delay |
|||
cbz x0, micro_delay_e |
|||
mrs x1, midr_el1 |
|||
and x1, x1, #MIDR_PN_MASK << MIDR_PN_SHIFT |
|||
mov w2, #MIDR_CA53 |
|||
cmp w1, w2 |
|||
b.eq micro_delay_ca53 |
|||
b micro_delay_ca57 |
|||
micro_delay_e: |
|||
ret |
|||
endfunc rcar_micro_delay |
|||
|
|||
func micro_delay_ca57 |
|||
ca57_loop_1: |
|||
mov x1, #185 |
|||
ca57_loop_2: |
|||
subs x1, x1, #1 |
|||
b.ne ca57_loop_2 |
|||
subs x0, x0, #1 |
|||
b.ne ca57_loop_1 |
|||
ret |
|||
endfunc micro_delay_ca57 |
|||
|
|||
func micro_delay_ca53 |
|||
ca53_loop_1: |
|||
mov x1, #134 |
|||
ca53_loop_2: |
|||
subs x1, x1, #1 |
|||
b.ne ca53_loop_2 |
|||
subs x0, x0, #1 |
|||
b.ne ca53_loop_1 |
|||
ret |
|||
endfunc micro_delay_ca53 |
|||
|
|||
#if (TMU3_MEASUREMENT == 1) |
|||
func tmu3_init |
|||
ldr x2, =CPG_BASE |
|||
ldr w0, [x2, #CPG_SMSTPCR1] |
|||
ldr w1, [x2, #CPG_MSTPSR1] |
|||
ldr w2, #MSTPCR1_TMU1 |
|||
bl mstpcr_write |
|||
ret |
|||
endfunc tmu3_init |
|||
|
|||
func tmu3_start |
|||
ldr x0, =TMU3_BASE |
|||
mov w1, #0xFFFFFFFF |
|||
str w1, [x0, TMU_TCNT] |
|||
|
|||
ldr x0, =TMU3_BASE |
|||
ldrb w1, [x0, TMU_TSTR] |
|||
orr w1, w1, #TSTR1_TMU3 |
|||
strb w1, [x0, TMU_TSTR] |
|||
ret |
|||
endfunc tmu3_start |
|||
|
|||
func tcnt3_snapshot |
|||
ldr x0, =TMU3_BASE |
|||
ldr w0, [x0, TMU_TCNT] |
|||
ret |
|||
endfunc tcnt3_snapshot |
|||
|
|||
|
|||
func tmu3_stop |
|||
ldr x0, =TMU3_BASE |
|||
ldrb w1, [x0, TMU_TSTR] |
|||
and w1, w1, #~TSTR1_TMU3 |
|||
strb w1, [x0, TMU_TSTR] |
|||
ret |
|||
endfunc tmu3_stop |
|||
#endif |
@ -0,0 +1,30 @@ |
|||
/*
|
|||
* Copyright (c) 2018, Renesas Electronics Corporation. All rights reserved. |
|||
* |
|||
* SPDX-License-Identifier: BSD-3-Clause |
|||
*/ |
|||
|
|||
#include <arch.h> |
|||
#include <arch_helpers.h> |
|||
#include "micro_delay.h" |
|||
|
|||
#define RCAR_CONV_MICROSEC 1000000U |
|||
|
|||
void |
|||
#if IMAGE_BL31 |
|||
__attribute__ ((section (".system_ram"))) |
|||
#endif |
|||
rcar_micro_delay(uint64_t micro_sec) |
|||
{ |
|||
uint64_t freq; |
|||
uint64_t base_count; |
|||
uint64_t get_count; |
|||
uint64_t wait_time = 0U; |
|||
|
|||
freq = read_cntfrq_el0(); |
|||
base_count = read_cntpct_el0(); |
|||
while (micro_sec > wait_time) { |
|||
get_count = read_cntpct_el0(); |
|||
wait_time = ((get_count - base_count) * RCAR_CONV_MICROSEC) / freq; |
|||
} |
|||
} |
Loading…
Reference in new issue