17202b9dbSJohnny Huang /*
27202b9dbSJohnny Huang  * (C) Copyright ASPEED Technology Inc.
37202b9dbSJohnny Huang  *
47202b9dbSJohnny Huang  * SPDX-License-Identifier:	GPL-2.0+
57202b9dbSJohnny Huang  */
67202b9dbSJohnny Huang 
77202b9dbSJohnny Huang #ifndef _CRYPTO_H_
87202b9dbSJohnny Huang #define _CRYPTO_H_
97202b9dbSJohnny Huang 
107202b9dbSJohnny Huang #define ASPEED_SHA224		0x0
117202b9dbSJohnny Huang #define ASPEED_SHA256		0x1
127202b9dbSJohnny Huang #define ASPEED_SHA384		0x2
137202b9dbSJohnny Huang #define ASPEED_SHA512		0x3
147202b9dbSJohnny Huang 
157202b9dbSJohnny Huang #define ASPEED_RSA1024		0x0
167202b9dbSJohnny Huang #define ASPEED_RSA2048		0x1
177202b9dbSJohnny Huang #define ASPEED_RSA3072		0x2
187202b9dbSJohnny Huang #define ASPEED_RSA4096		0x3
197202b9dbSJohnny Huang 
207202b9dbSJohnny Huang #define ASPEED_HACE_BASE		(0x1E6D0000)
217202b9dbSJohnny Huang #define ASPEED_HACE_SRC			0x00
227202b9dbSJohnny Huang #define ASPEED_HACE_DEST		0x04
237202b9dbSJohnny Huang #define ASPEED_HACE_CONTEXT		0x08	/* 8 byte aligned*/
247202b9dbSJohnny Huang #define ASPEED_HACE_DATA_LEN		0x0C
257202b9dbSJohnny Huang #define ASPEED_HACE_CMD			0x10
267202b9dbSJohnny Huang #define ASPEED_HACE_STS			(ASPEED_HACE_BASE + 0x1C)
277202b9dbSJohnny Huang #define  HACE_RSA_ISR			BIT(13)
287202b9dbSJohnny Huang #define  HACE_CRYPTO_ISR		BIT(12)
297202b9dbSJohnny Huang #define  HACE_HASH_ISR			BIT(9)
307202b9dbSJohnny Huang #define  HACE_RSA_BUSY			BIT(2)
317202b9dbSJohnny Huang #define  HACE_CRYPTO_BUSY		BIT(1)
327202b9dbSJohnny Huang #define  HACE_HASH_BUSY			BIT(0)
337202b9dbSJohnny Huang #define ASPEED_HACE_HASH_SRC		(ASPEED_HACE_BASE + 0x20)
347202b9dbSJohnny Huang #define ASPEED_HACE_HASH_DIGEST_BUFF	(ASPEED_HACE_BASE + 0x24)
357202b9dbSJohnny Huang #define ASPEED_HACE_HASH_KEY_BUFF	(ASPEED_HACE_BASE + 0x28)	// 64 byte aligned,g6 16 byte aligned
367202b9dbSJohnny Huang #define ASPEED_HACE_HASH_DATA_LEN	(ASPEED_HACE_BASE + 0x2C)
377202b9dbSJohnny Huang #define ASPEED_HACE_HASH_CMD		(ASPEED_HACE_BASE + 0x30)
387202b9dbSJohnny Huang 
39*4fbcd619SJohnny Huang struct aspeed_sg_list {
40*4fbcd619SJohnny Huang 	u32 len;
41*4fbcd619SJohnny Huang 	u32 phy_addr;
42*4fbcd619SJohnny Huang } __packed;
43*4fbcd619SJohnny Huang 
44*4fbcd619SJohnny Huang extern int aspeed_sg_digest(struct aspeed_sg_list *src_list, u32 list_length, u32 length, u8 *digest, u32 method);
457202b9dbSJohnny Huang extern int digest_object(u8 *src, u32 length, u8 *digest, u32 method);
467202b9dbSJohnny Huang extern int aes256ctr_decrypt_object(u8 *src, u8 *dst, u32 length, u8 *context);
477202b9dbSJohnny Huang extern int rsa_alg(u8 *data, int data_bytes, u8 *m, int m_bits, u8 *e, int e_bits, u8 *dst, void *contex_buf);
487202b9dbSJohnny Huang extern void enable_crypto(void);
497202b9dbSJohnny Huang 
507202b9dbSJohnny Huang #endif /* #ifndef _CRYPTO_H_ */
51