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 Wangstatic 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