xref: /rk3399_ARM-atf/drivers/renesas/common/common.c (revision 011a4c2f049a422e91ac26d5c146f3a1c7d2d16d)
1*011a4c2fSBiju Das /*
2*011a4c2fSBiju Das  * Copyright (c) 2018-2020, Renesas Electronics Corporation. All rights reserved.
3*011a4c2fSBiju Das  *
4*011a4c2fSBiju Das  * SPDX-License-Identifier: BSD-3-Clause
5*011a4c2fSBiju Das  */
6*011a4c2fSBiju Das 
7*011a4c2fSBiju Das #include <lib/mmio.h>
8*011a4c2fSBiju Das 
9*011a4c2fSBiju Das #include "rcar_private.h"
10*011a4c2fSBiju Das 
11*011a4c2fSBiju Das #if IMAGE_BL31
12*011a4c2fSBiju Das void __attribute__ ((section(".system_ram"))) cpg_write(uintptr_t regadr, uint32_t regval)
13*011a4c2fSBiju Das #else
14*011a4c2fSBiju Das void cpg_write(uintptr_t regadr, uint32_t regval)
15*011a4c2fSBiju Das #endif
16*011a4c2fSBiju Das {
17*011a4c2fSBiju Das 	uint32_t value = regval;
18*011a4c2fSBiju Das 
19*011a4c2fSBiju Das 	mmio_write_32((uintptr_t) RCAR_CPGWPR, ~value);
20*011a4c2fSBiju Das 	mmio_write_32(regadr, value);
21*011a4c2fSBiju Das }
22*011a4c2fSBiju Das 
23*011a4c2fSBiju Das #if IMAGE_BL31
24*011a4c2fSBiju Das void __attribute__ ((section(".system_ram"))) mstpcr_write(uint32_t mstpcr, uint32_t mstpsr,
25*011a4c2fSBiju Das 							   uint32_t target_bit)
26*011a4c2fSBiju Das #else
27*011a4c2fSBiju Das void mstpcr_write(uint32_t mstpcr, uint32_t mstpsr, uint32_t target_bit)
28*011a4c2fSBiju Das #endif
29*011a4c2fSBiju Das {
30*011a4c2fSBiju Das 	uint32_t reg;
31*011a4c2fSBiju Das 
32*011a4c2fSBiju Das 	reg = mmio_read_32(mstpcr);
33*011a4c2fSBiju Das 	reg &= ~target_bit;
34*011a4c2fSBiju Das 	cpg_write(mstpcr, reg);
35*011a4c2fSBiju Das 	while ((mmio_read_32(mstpsr) & target_bit) != 0U) {
36*011a4c2fSBiju Das 	}
37*011a4c2fSBiju Das }
38