1*cdcf1f14SBiju Das /* 2*cdcf1f14SBiju Das * Copyright (c) 2018-2020, Renesas Electronics Corporation. All rights reserved. 3*cdcf1f14SBiju Das * 4*cdcf1f14SBiju Das * SPDX-License-Identifier: BSD-3-Clause 5*cdcf1f14SBiju Das */ 6*cdcf1f14SBiju Das 7*cdcf1f14SBiju Das #include <arch.h> 8*cdcf1f14SBiju Das #include <arch_helpers.h> 9*cdcf1f14SBiju Das 10*cdcf1f14SBiju Das #include "micro_delay.h" 11*cdcf1f14SBiju Das 12*cdcf1f14SBiju Das #define RCAR_CONV_MICROSEC 1000000U 13*cdcf1f14SBiju Das 14*cdcf1f14SBiju Das void 15*cdcf1f14SBiju Das #if IMAGE_BL31 16*cdcf1f14SBiju Das __attribute__ ((section(".system_ram"))) 17*cdcf1f14SBiju Das #endif rcar_micro_delay(uint64_t micro_sec)18*cdcf1f14SBiju Das rcar_micro_delay(uint64_t micro_sec) 19*cdcf1f14SBiju Das { 20*cdcf1f14SBiju Das uint64_t freq; 21*cdcf1f14SBiju Das uint64_t base_count; 22*cdcf1f14SBiju Das uint64_t get_count; 23*cdcf1f14SBiju Das uint64_t wait_time = 0U; 24*cdcf1f14SBiju Das 25*cdcf1f14SBiju Das freq = read_cntfrq_el0(); 26*cdcf1f14SBiju Das base_count = read_cntpct_el0(); 27*cdcf1f14SBiju Das while (micro_sec > wait_time) { 28*cdcf1f14SBiju Das get_count = read_cntpct_el0(); 29*cdcf1f14SBiju Das wait_time = ((get_count - base_count) * RCAR_CONV_MICROSEC) / freq; 30*cdcf1f14SBiju Das } 31*cdcf1f14SBiju Das } 32