1a7da6f8cSNobuhiro Iwamatsu /* 2a7da6f8cSNobuhiro Iwamatsu * board/renesas/rcar-common/common.c 3a7da6f8cSNobuhiro Iwamatsu * 4a7da6f8cSNobuhiro Iwamatsu * Copyright (C) 2013 Renesas Electronics Corporation 5a7da6f8cSNobuhiro Iwamatsu * Copyright (C) 2013 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> 6581183deSNobuhiro Iwamatsu * Copyright (C) 2015 Nobuhiro Iwamatsu <iwamatsu@nigauri.org> 7a7da6f8cSNobuhiro Iwamatsu * 8a7da6f8cSNobuhiro Iwamatsu * SPDX-License-Identifier: GPL-2.0 9a7da6f8cSNobuhiro Iwamatsu */ 10a7da6f8cSNobuhiro Iwamatsu 11a7da6f8cSNobuhiro Iwamatsu #include <common.h> 12a7da6f8cSNobuhiro Iwamatsu #include <asm/io.h> 13a7da6f8cSNobuhiro Iwamatsu #include <asm/arch/sys_proto.h> 14a7da6f8cSNobuhiro Iwamatsu #include <asm/arch/rmobile.h> 15a7da6f8cSNobuhiro Iwamatsu #include <asm/arch/rcar-mstp.h> 16a7da6f8cSNobuhiro Iwamatsu 17a7da6f8cSNobuhiro Iwamatsu #define TSTR0 0x04 18a7da6f8cSNobuhiro Iwamatsu #define TSTR0_STR0 0x01 19a7da6f8cSNobuhiro Iwamatsu 20a7da6f8cSNobuhiro Iwamatsu static struct mstp_ctl mstptbl[] = { 21a7da6f8cSNobuhiro Iwamatsu { SMSTPCR0, MSTP0_BITS, CONFIG_SMSTP0_ENA, 22a7da6f8cSNobuhiro Iwamatsu RMSTPCR0, MSTP0_BITS, CONFIG_RMSTP0_ENA }, 23a7da6f8cSNobuhiro Iwamatsu { SMSTPCR1, MSTP1_BITS, CONFIG_SMSTP1_ENA, 24a7da6f8cSNobuhiro Iwamatsu RMSTPCR1, MSTP1_BITS, CONFIG_RMSTP1_ENA }, 25a7da6f8cSNobuhiro Iwamatsu { SMSTPCR2, MSTP2_BITS, CONFIG_SMSTP2_ENA, 26a7da6f8cSNobuhiro Iwamatsu RMSTPCR2, MSTP2_BITS, CONFIG_RMSTP2_ENA }, 27a7da6f8cSNobuhiro Iwamatsu { SMSTPCR3, MSTP3_BITS, CONFIG_SMSTP3_ENA, 28a7da6f8cSNobuhiro Iwamatsu RMSTPCR3, MSTP3_BITS, CONFIG_RMSTP3_ENA }, 29a7da6f8cSNobuhiro Iwamatsu { SMSTPCR4, MSTP4_BITS, CONFIG_SMSTP4_ENA, 30a7da6f8cSNobuhiro Iwamatsu RMSTPCR4, MSTP4_BITS, CONFIG_RMSTP4_ENA }, 31a7da6f8cSNobuhiro Iwamatsu { SMSTPCR5, MSTP5_BITS, CONFIG_SMSTP5_ENA, 32a7da6f8cSNobuhiro Iwamatsu RMSTPCR5, MSTP5_BITS, CONFIG_RMSTP5_ENA }, 33581183deSNobuhiro Iwamatsu #ifdef CONFIG_RCAR_GEN3 34581183deSNobuhiro Iwamatsu { SMSTPCR6, MSTP6_BITS, CONFIG_SMSTP6_ENA, 35581183deSNobuhiro Iwamatsu RMSTPCR6, MSTP6_BITS, CONFIG_RMSTP6_ENA }, 36581183deSNobuhiro Iwamatsu #endif 37a7da6f8cSNobuhiro Iwamatsu { SMSTPCR7, MSTP7_BITS, CONFIG_SMSTP7_ENA, 38a7da6f8cSNobuhiro Iwamatsu RMSTPCR7, MSTP7_BITS, CONFIG_RMSTP7_ENA }, 39a7da6f8cSNobuhiro Iwamatsu { SMSTPCR8, MSTP8_BITS, CONFIG_SMSTP8_ENA, 40a7da6f8cSNobuhiro Iwamatsu RMSTPCR8, MSTP8_BITS, CONFIG_RMSTP8_ENA }, 41a7da6f8cSNobuhiro Iwamatsu { SMSTPCR9, MSTP9_BITS, CONFIG_SMSTP9_ENA, 42a7da6f8cSNobuhiro Iwamatsu RMSTPCR9, MSTP9_BITS, CONFIG_RMSTP9_ENA }, 43a7da6f8cSNobuhiro Iwamatsu { SMSTPCR10, MSTP10_BITS, CONFIG_SMSTP10_ENA, 44a7da6f8cSNobuhiro Iwamatsu RMSTPCR10, MSTP10_BITS, CONFIG_RMSTP10_ENA }, 45a7da6f8cSNobuhiro Iwamatsu { SMSTPCR11, MSTP11_BITS, CONFIG_SMSTP1_ENA, 46a7da6f8cSNobuhiro Iwamatsu RMSTPCR11, MSTP11_BITS, CONFIG_RMSTP11_ENA }, 47a7da6f8cSNobuhiro Iwamatsu }; 48a7da6f8cSNobuhiro Iwamatsu 49a7da6f8cSNobuhiro Iwamatsu void arch_preboot_os(void) 50a7da6f8cSNobuhiro Iwamatsu { 51a7da6f8cSNobuhiro Iwamatsu int i; 52a7da6f8cSNobuhiro Iwamatsu 53a7da6f8cSNobuhiro Iwamatsu /* stop TMU0 */ 54a7da6f8cSNobuhiro Iwamatsu mstp_clrbits_le32(TMU_BASE + TSTR0, TMU_BASE + TSTR0, TSTR0_STR0); 55a7da6f8cSNobuhiro Iwamatsu 56a7da6f8cSNobuhiro Iwamatsu /* Stop module clock */ 57a7da6f8cSNobuhiro Iwamatsu for (i = 0; i < ARRAY_SIZE(mstptbl); i++) { 58*4ebaba55SNobuhiro Iwamatsu mstp_setclrbits_le32((uintptr_t)mstptbl[i].s_addr, 59*4ebaba55SNobuhiro Iwamatsu mstptbl[i].s_dis, 60a7da6f8cSNobuhiro Iwamatsu mstptbl[i].s_ena); 61*4ebaba55SNobuhiro Iwamatsu mstp_setclrbits_le32((uintptr_t)mstptbl[i].r_addr, 62*4ebaba55SNobuhiro Iwamatsu mstptbl[i].r_dis, 63a7da6f8cSNobuhiro Iwamatsu mstptbl[i].r_ena); 64a7da6f8cSNobuhiro Iwamatsu } 65a7da6f8cSNobuhiro Iwamatsu } 66