xref: /rk3399_ARM-atf/plat/imx/imx8m/imx8m_caam.c (revision 77850c96f23bcdc76ecb0ecd27a982c00fde5d9d)
12502709fSJacky Bai /*
2*77850c96SFranck LENORMAND  * Copyright (c) 2019-2022 NXP. All rights reserved.
32502709fSJacky Bai  *
42502709fSJacky Bai  * SPDX-License-Identifier: BSD-3-Clause
52502709fSJacky Bai  */
62502709fSJacky Bai 
7*77850c96SFranck LENORMAND #include <common/debug.h>
82502709fSJacky Bai #include <lib/mmio.h>
92502709fSJacky Bai 
102502709fSJacky Bai #include <imx8m_caam.h>
112502709fSJacky Bai 
12*77850c96SFranck LENORMAND #define HAB_JR0_DID	U(0x8011)
13*77850c96SFranck LENORMAND 
142502709fSJacky Bai void imx8m_caam_init(void)
152502709fSJacky Bai {
162502709fSJacky Bai 	uint32_t sm_cmd;
172502709fSJacky Bai 
182502709fSJacky Bai 	/* Dealloc part 0 and 2 with current DID */
192502709fSJacky Bai 	sm_cmd = (0 << SMC_PART_SHIFT | SMC_CMD_DEALLOC_PART);
202502709fSJacky Bai 	mmio_write_32(SM_CMD, sm_cmd);
212502709fSJacky Bai 
222502709fSJacky Bai 	sm_cmd = (2 << SMC_PART_SHIFT | SMC_CMD_DEALLOC_PART);
232502709fSJacky Bai 	mmio_write_32(SM_CMD, sm_cmd);
242502709fSJacky Bai 
252502709fSJacky Bai 	/* config CAAM JRaMID set MID to Cortex A */
26*77850c96SFranck LENORMAND 	if (mmio_read_32(CAAM_JR0MID) == HAB_JR0_DID) {
27*77850c96SFranck LENORMAND 		NOTICE("Do not release JR0 to NS as it can be used by HAB");
28*77850c96SFranck LENORMAND 	} else {
292502709fSJacky Bai 		mmio_write_32(CAAM_JR0MID, CAAM_NS_MID);
30*77850c96SFranck LENORMAND 	}
31*77850c96SFranck LENORMAND 
322502709fSJacky Bai 	mmio_write_32(CAAM_JR1MID, CAAM_NS_MID);
332502709fSJacky Bai 	mmio_write_32(CAAM_JR2MID, CAAM_NS_MID);
342502709fSJacky Bai 
352502709fSJacky Bai 	/* Alloc partition 0 writing SMPO and SMAGs */
362502709fSJacky Bai 	mmio_write_32(SM_P0_PERM, 0xff);
372502709fSJacky Bai 	mmio_write_32(SM_P0_SMAG2, 0xffffffff);
382502709fSJacky Bai 	mmio_write_32(SM_P0_SMAG1, 0xffffffff);
392502709fSJacky Bai 
402502709fSJacky Bai 	/* Allocate page 0 and 1 to partition 0 with DID set */
412502709fSJacky Bai 	sm_cmd = (0 << SMC_PAGE_SHIFT | 0 << SMC_PART_SHIFT |
422502709fSJacky Bai 			SMC_CMD_ALLOC_PAGE);
432502709fSJacky Bai 	mmio_write_32(SM_CMD, sm_cmd);
442502709fSJacky Bai 
452502709fSJacky Bai 	sm_cmd = (1 << SMC_PAGE_SHIFT | 0 << SMC_PART_SHIFT |
462502709fSJacky Bai 			SMC_CMD_ALLOC_PAGE);
472502709fSJacky Bai 	mmio_write_32(SM_CMD, sm_cmd);
482502709fSJacky Bai }
49