xref: /rk3399_ARM-atf/plat/imx/imx8m/imx8m_caam.c (revision 7d3287f3407632f765df3037479281ba6b23b141)
12502709fSJacky Bai /*
277850c96SFranck LENORMAND  * Copyright (c) 2019-2022 NXP. All rights reserved.
32502709fSJacky Bai  *
42502709fSJacky Bai  * SPDX-License-Identifier: BSD-3-Clause
52502709fSJacky Bai  */
62502709fSJacky Bai 
777850c96SFranck LENORMAND #include <common/debug.h>
82502709fSJacky Bai #include <lib/mmio.h>
92502709fSJacky Bai 
102502709fSJacky Bai #include <imx8m_caam.h>
112502709fSJacky Bai 
1277850c96SFranck LENORMAND #define HAB_JR0_DID	U(0x8011)
1377850c96SFranck LENORMAND 
imx8m_caam_init(void)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 */
2677850c96SFranck LENORMAND 	if (mmio_read_32(CAAM_JR0MID) == HAB_JR0_DID) {
27*6e24d795SAndrey Zhizhikin 		NOTICE("Do not release JR0 to NS as it can be used by HAB\n");
2877850c96SFranck LENORMAND 	} else {
292502709fSJacky Bai 		mmio_write_32(CAAM_JR0MID, CAAM_NS_MID);
3077850c96SFranck LENORMAND 	}
3177850c96SFranck 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