xref: /optee_os/core/drivers/crypto/aspeed/crypto_ast2600.c (revision e752c173aa0ff2a7eb1dc53bbfffc673e44a9980)
1*e752c173SChia-Wei Wang // SPDX-License-Identifier: BSD-2-Clause
2*e752c173SChia-Wei Wang /*
3*e752c173SChia-Wei Wang  * Copyright (c) 2022, Aspeed Technology Inc.
4*e752c173SChia-Wei Wang  */
5*e752c173SChia-Wei Wang #include <config.h>
6*e752c173SChia-Wei Wang #include <platform_config.h>
7*e752c173SChia-Wei Wang #include <io.h>
8*e752c173SChia-Wei Wang #include <mm/core_memprot.h>
9*e752c173SChia-Wei Wang #include <kernel/boot.h>
10*e752c173SChia-Wei Wang #include <kernel/delay.h>
11*e752c173SChia-Wei Wang #include <kernel/panic.h>
12*e752c173SChia-Wei Wang 
13*e752c173SChia-Wei Wang #include "hace_ast2600.h"
14*e752c173SChia-Wei Wang 
15*e752c173SChia-Wei Wang #define SCU_RST1		0x40
16*e752c173SChia-Wei Wang #define SCU_RSTCLR1		0x44
17*e752c173SChia-Wei Wang #define SCU_RST_CRYPTO		BIT(4)
18*e752c173SChia-Wei Wang 
19*e752c173SChia-Wei Wang #define SCU_CLKGATE1		0x80
20*e752c173SChia-Wei Wang #define SCU_CLKGATECLR1		0x84
21*e752c173SChia-Wei Wang #define SCU_CLKGATE_HACE	BIT(13)
22*e752c173SChia-Wei Wang 
crypto_ast2600_init(void)23*e752c173SChia-Wei Wang static TEE_Result crypto_ast2600_init(void)
24*e752c173SChia-Wei Wang {
25*e752c173SChia-Wei Wang 	TEE_Result rc = TEE_ERROR_GENERIC;
26*e752c173SChia-Wei Wang 	vaddr_t scu_virt = 0;
27*e752c173SChia-Wei Wang 
28*e752c173SChia-Wei Wang 	scu_virt = core_mmu_get_va(SCU_BASE, MEM_AREA_IO_NSEC, SMALL_PAGE_SIZE);
29*e752c173SChia-Wei Wang 	if (!scu_virt)
30*e752c173SChia-Wei Wang 		panic();
31*e752c173SChia-Wei Wang 
32*e752c173SChia-Wei Wang 	/* ast2600 crypto engines share the same reset control */
33*e752c173SChia-Wei Wang 	io_write32(scu_virt + SCU_RST1, SCU_RST_CRYPTO);
34*e752c173SChia-Wei Wang 	udelay(100);
35*e752c173SChia-Wei Wang 	io_write32(scu_virt + SCU_RSTCLR1, SCU_RST_CRYPTO);
36*e752c173SChia-Wei Wang 
37*e752c173SChia-Wei Wang 	if (IS_ENABLED(CFG_CRYPTO_DRV_HASH)) {
38*e752c173SChia-Wei Wang 		io_write32(scu_virt + SCU_CLKGATECLR1, SCU_CLKGATE_HACE);
39*e752c173SChia-Wei Wang 
40*e752c173SChia-Wei Wang 		rc = ast2600_drvcrypt_register_hash();
41*e752c173SChia-Wei Wang 		if (rc) {
42*e752c173SChia-Wei Wang 			EMSG("cannot register hash driver, rc=%d", rc);
43*e752c173SChia-Wei Wang 			return rc;
44*e752c173SChia-Wei Wang 		}
45*e752c173SChia-Wei Wang 	}
46*e752c173SChia-Wei Wang 
47*e752c173SChia-Wei Wang 	return TEE_SUCCESS;
48*e752c173SChia-Wei Wang }
49*e752c173SChia-Wei Wang 
50*e752c173SChia-Wei Wang early_init_late(crypto_ast2600_init);
51