1011a4c2fSBiju Das /* 2*0dae56bbSToshiyuki Ogasahara * Copyright (c) 2018-2021, Renesas Electronics Corporation. All rights reserved. 3011a4c2fSBiju Das * 4011a4c2fSBiju Das * SPDX-License-Identifier: BSD-3-Clause 5011a4c2fSBiju Das */ 6011a4c2fSBiju Das 7011a4c2fSBiju Das #include <lib/mmio.h> 8011a4c2fSBiju Das 9*0dae56bbSToshiyuki Ogasahara #include "cpg_registers.h" 10011a4c2fSBiju Das #include "rcar_private.h" 11011a4c2fSBiju Das 12011a4c2fSBiju Das #if IMAGE_BL31 13011a4c2fSBiju Das void __attribute__ ((section(".system_ram"))) cpg_write(uintptr_t regadr, uint32_t regval) 14011a4c2fSBiju Das #else 15011a4c2fSBiju Das void cpg_write(uintptr_t regadr, uint32_t regval) 16011a4c2fSBiju Das #endif 17011a4c2fSBiju Das { 18011a4c2fSBiju Das uint32_t value = regval; 19011a4c2fSBiju Das 20*0dae56bbSToshiyuki Ogasahara mmio_write_32(CPG_CPGWPR, ~value); 21011a4c2fSBiju Das mmio_write_32(regadr, value); 22011a4c2fSBiju Das } 23011a4c2fSBiju Das 24011a4c2fSBiju Das #if IMAGE_BL31 25011a4c2fSBiju Das void __attribute__ ((section(".system_ram"))) mstpcr_write(uint32_t mstpcr, uint32_t mstpsr, 26011a4c2fSBiju Das uint32_t target_bit) 27011a4c2fSBiju Das #else 28011a4c2fSBiju Das void mstpcr_write(uint32_t mstpcr, uint32_t mstpsr, uint32_t target_bit) 29011a4c2fSBiju Das #endif 30011a4c2fSBiju Das { 31011a4c2fSBiju Das uint32_t reg; 32011a4c2fSBiju Das 33011a4c2fSBiju Das reg = mmio_read_32(mstpcr); 34011a4c2fSBiju Das reg &= ~target_bit; 35011a4c2fSBiju Das cpg_write(mstpcr, reg); 36011a4c2fSBiju Das while ((mmio_read_32(mstpsr) & target_bit) != 0U) { 37011a4c2fSBiju Das } 38011a4c2fSBiju Das } 39