1*77b55e8cSThomas Abraham /* 2*77b55e8cSThomas Abraham * Lowlevel setup for SMDK5250 board based on S5PC520 3*77b55e8cSThomas Abraham * 4*77b55e8cSThomas Abraham * Copyright (C) 2012 Samsung Electronics 5*77b55e8cSThomas Abraham * 6*77b55e8cSThomas Abraham * SPDX-License-Identifier: GPL-2.0+ 7*77b55e8cSThomas Abraham */ 8*77b55e8cSThomas Abraham 9*77b55e8cSThomas Abraham #include <common.h> 10*77b55e8cSThomas Abraham #include <asm/arch/tzpc.h> 11*77b55e8cSThomas Abraham #include <asm/io.h> 12*77b55e8cSThomas Abraham 13*77b55e8cSThomas Abraham /* Setting TZPC[TrustZone Protection Controller] */ tzpc_init(void)14*77b55e8cSThomas Abrahamvoid tzpc_init(void) 15*77b55e8cSThomas Abraham { 16*77b55e8cSThomas Abraham struct exynos_tzpc *tzpc; 17*77b55e8cSThomas Abraham unsigned int addr, start = 0, end = 0; 18*77b55e8cSThomas Abraham 19*77b55e8cSThomas Abraham start = samsung_get_base_tzpc(); 20*77b55e8cSThomas Abraham 21*77b55e8cSThomas Abraham if (cpu_is_exynos5()) 22*77b55e8cSThomas Abraham end = start + ((EXYNOS5_NR_TZPC_BANKS - 1) * TZPC_BASE_OFFSET); 23*77b55e8cSThomas Abraham else if (cpu_is_exynos4()) 24*77b55e8cSThomas Abraham end = start + ((EXYNOS4_NR_TZPC_BANKS - 1) * TZPC_BASE_OFFSET); 25*77b55e8cSThomas Abraham 26*77b55e8cSThomas Abraham for (addr = start; addr <= end; addr += TZPC_BASE_OFFSET) { 27*77b55e8cSThomas Abraham tzpc = (struct exynos_tzpc *)addr; 28*77b55e8cSThomas Abraham 29*77b55e8cSThomas Abraham if (addr == start) 30*77b55e8cSThomas Abraham writel(R0SIZE, &tzpc->r0size); 31*77b55e8cSThomas Abraham 32*77b55e8cSThomas Abraham writel(DECPROTXSET, &tzpc->decprot0set); 33*77b55e8cSThomas Abraham writel(DECPROTXSET, &tzpc->decprot1set); 34*77b55e8cSThomas Abraham 35*77b55e8cSThomas Abraham if (cpu_is_exynos5() && (addr == end)) 36*77b55e8cSThomas Abraham break; 37*77b55e8cSThomas Abraham 38*77b55e8cSThomas Abraham writel(DECPROTXSET, &tzpc->decprot2set); 39*77b55e8cSThomas Abraham writel(DECPROTXSET, &tzpc->decprot3set); 40*77b55e8cSThomas Abraham } 41*77b55e8cSThomas Abraham } 42