firmware/br-ext-chip-ingenic/board/t40/kernel/patches/00000-drivers_crypto_ingeni...

117 lines
2.7 KiB
Diff

diff -drupN a/drivers/crypto/ingenic-aes.h b/drivers/crypto/ingenic-aes.h
--- a/drivers/crypto/ingenic-aes.h 1970-01-01 03:00:00.000000000 +0300
+++ b/drivers/crypto/ingenic-aes.h 2022-06-09 05:02:28.000000000 +0300
@@ -0,0 +1,112 @@
+#ifndef __INGENIC_AES_H__
+#define __INGENIC_AES_H__
+
+#define INGENIC_AES_QUEUE_LENGTH (50)
+#define INGENIC_AES_CACHE_PAGE_SHIFT (0)
+#define DMA_MIN 4
+
+#define AES_ASCR (0x00)
+#define AES_ASSR (0x04)
+#define AES_ASINTM (0x08)
+#define AES_ASSA (0x0c)
+#define AES_ASDA (0x10)
+#define AES_ASTC (0x14)
+#define AES_ASDI (0x18)
+#define AES_ASDO (0x1c)
+#define AES_ASKY (0x20)
+#define AES_ASIV (0x24)
+
+#define ASCR_PS_DEF (3 << 28)
+#define ASCR_CLR (1 << 10)
+
+#define ASCR_DMAS (1 << 9)
+#define ASCR_DMAE (1 << 8)
+
+#define ASCR_KEYL(len) ((len) << 6)
+
+#define ECB_ALG (0)
+#define CBC_ALG (1)
+#define ASCR_ALGS(alg) ((alg) << 5)
+
+#define ENCRYPTO_MODE (0)
+#define DECRYPTO_MODE (1)
+#define ASCR_DECE(m) ((m) << 4)
+
+
+#define ASCR_AESS (1 << 3)
+#define ASCR_KEYS (1 << 2)
+#define ASCR_INIT_IV (1 << 1)
+#define ASCR_EN (1 << 0)
+
+struct ingenic_aes_reqctx {
+ unsigned long mode;
+};
+
+struct ingenic_aes_ctx {
+ struct ingenic_aes_dev *aes;
+
+ int keylen;
+ unsigned long key[AES_KEYSIZE_256 / sizeof(unsigned long)];
+ unsigned long flags;
+};
+
+/* struct ingenic_aes_algs_info { */
+/* struct crypto_alg *algs_list; */
+/* unsigned int size; */
+/* unsigned int registered; */
+/* }; */
+struct ingenic_aes_pdata {
+ struct crypto_alg *algs_list;
+ unsigned int size;
+ unsigned int registered;
+};
+
+struct ingenic_aes_dev {
+ struct list_head list;
+ void __iomem *io_base;
+ int irq;
+ struct clk *clk_gate;
+ struct ingenic_aes_ctx *ctx;
+ struct device *dev;
+ unsigned long flags;
+ int err;
+
+ spinlock_t lock;
+ struct crypto_queue queue;
+ struct ablkcipher_request *req;
+ size_t total;
+
+ struct scatterlist *in_sg;
+
+ struct scatterlist in_sgl;
+ size_t in_offset;
+ struct scatterlist *out_sg;
+ struct scatterlist out_sgl;
+ size_t out_offset;
+
+ size_t buflen;
+ void *buf_in;
+ void *buf_out;
+ dma_addr_t dma_addr_in;
+ dma_addr_t dma_addr_out;
+
+ size_t dma_size;
+ struct ingenic_aes_pdata *pdata;
+};
+
+
+#define FLAGS_MODE_MASK 0x000f
+#define FLAGS_DECRYPT BIT(0)
+#define FLAGS_CBC BIT(1)
+
+#define FLAGS_INIT BIT(4)
+#define FLAGS_FAST BIT(5)
+#define FLAGS_BUSY BIT(6)
+
+#define MCU_BOOT 0xb3422000
+
+#define DMCS 0xb3421030
+#define boot_up_mcu() *(volatile unsigned int *)(DMCS) = 0;
+#define reset_mcu() *(volatile unsigned int *)(DMCS) = 1;
+
+#endif /*__INGENIC_AES_H__*/