xref: /freebsd/sys/dev/cesa/cesa.h (revision b07df6e5a91d89764d942959dd1ca7b5ca132af8)
18817e1bfSRafal Jaworowski /*-
28817e1bfSRafal Jaworowski  * Copyright (C) 2009-2011 Semihalf.
38817e1bfSRafal Jaworowski  * All rights reserved.
48817e1bfSRafal Jaworowski  *
58817e1bfSRafal Jaworowski  * Redistribution and use in source and binary forms, with or without
68817e1bfSRafal Jaworowski  * modification, are permitted provided that the following conditions
78817e1bfSRafal Jaworowski  * are met:
88817e1bfSRafal Jaworowski  * 1. Redistributions of source code must retain the above copyright
98817e1bfSRafal Jaworowski  *    notice, this list of conditions and the following disclaimer.
108817e1bfSRafal Jaworowski  * 2. Redistributions in binary form must reproduce the above copyright
118817e1bfSRafal Jaworowski  *    notice, this list of conditions and the following disclaimer in the
128817e1bfSRafal Jaworowski  *    documentation and/or other materials provided with the distribution.
138817e1bfSRafal Jaworowski  *
148817e1bfSRafal Jaworowski  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
158817e1bfSRafal Jaworowski  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
168817e1bfSRafal Jaworowski  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
178817e1bfSRafal Jaworowski  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
188817e1bfSRafal Jaworowski  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
198817e1bfSRafal Jaworowski  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
208817e1bfSRafal Jaworowski  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
218817e1bfSRafal Jaworowski  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
228817e1bfSRafal Jaworowski  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
238817e1bfSRafal Jaworowski  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
248817e1bfSRafal Jaworowski  * SUCH DAMAGE.
258817e1bfSRafal Jaworowski  *
268817e1bfSRafal Jaworowski  * $FreeBSD$
278817e1bfSRafal Jaworowski  */
288817e1bfSRafal Jaworowski 
298817e1bfSRafal Jaworowski #ifndef _DEV_CESA_H_
308817e1bfSRafal Jaworowski #define _DEV_CESA_H_
318817e1bfSRafal Jaworowski 
328817e1bfSRafal Jaworowski /* Maximum number of allocated sessions */
338817e1bfSRafal Jaworowski #define CESA_SESSIONS			64
348817e1bfSRafal Jaworowski 
358817e1bfSRafal Jaworowski /* Maximum number of queued requests */
368817e1bfSRafal Jaworowski #define CESA_REQUESTS			256
378817e1bfSRafal Jaworowski 
388817e1bfSRafal Jaworowski /*
398817e1bfSRafal Jaworowski  * CESA is able to process data only in CESA SRAM, which is quite small (2 kB).
408817e1bfSRafal Jaworowski  * We have to fit a packet there, which contains SA descriptor, keys, IV
418817e1bfSRafal Jaworowski  * and data to be processed. Every request must be converted into chain of
428817e1bfSRafal Jaworowski  * packets and each packet can hold about 1.75 kB of data.
438817e1bfSRafal Jaworowski  *
448817e1bfSRafal Jaworowski  * To process each packet we need at least 1 SA descriptor and at least 4 TDMA
458817e1bfSRafal Jaworowski  * descriptors. However there are cases when we use 2 SA and 8 TDMA descriptors
468817e1bfSRafal Jaworowski  * per packet. Number of used TDMA descriptors can increase beyond given values
478817e1bfSRafal Jaworowski  * if data in the request is fragmented in physical memory.
488817e1bfSRafal Jaworowski  *
498817e1bfSRafal Jaworowski  * The driver uses preallocated SA and TDMA descriptors pools to get best
508817e1bfSRafal Jaworowski  * performace. Size of these pools should match expected request size. Example:
518817e1bfSRafal Jaworowski  *
528817e1bfSRafal Jaworowski  * Expected average request size:			1.5 kB (Ethernet MTU)
538817e1bfSRafal Jaworowski  * Packets per average request:				(1.5 kB / 1.75 kB) = 1
548817e1bfSRafal Jaworowski  * SA decriptors per average request (worst case):	1 * 2 = 2
558817e1bfSRafal Jaworowski  * TDMA desctiptors per average request (worst case):	1 * 8 = 8
568817e1bfSRafal Jaworowski  *
578817e1bfSRafal Jaworowski  * More TDMA descriptors should be allocated, if data fragmentation is expected
588817e1bfSRafal Jaworowski  * (for example while processing mbufs larger than MCLBYTES). The driver may use
598817e1bfSRafal Jaworowski  * 2 additional TDMA descriptors per each discontinuity in the physical data
608817e1bfSRafal Jaworowski  * layout.
618817e1bfSRafal Jaworowski  */
628817e1bfSRafal Jaworowski 
638817e1bfSRafal Jaworowski /* Values below are optimized for requests containing about 1.5 kB of data */
648817e1bfSRafal Jaworowski #define CESA_SA_DESC_PER_REQ		2
658817e1bfSRafal Jaworowski #define CESA_TDMA_DESC_PER_REQ		8
668817e1bfSRafal Jaworowski 
678817e1bfSRafal Jaworowski #define CESA_SA_DESCRIPTORS		(CESA_SA_DESC_PER_REQ * CESA_REQUESTS)
688817e1bfSRafal Jaworowski #define CESA_TDMA_DESCRIPTORS		(CESA_TDMA_DESC_PER_REQ * CESA_REQUESTS)
698817e1bfSRafal Jaworowski 
708817e1bfSRafal Jaworowski /* Useful constants */
711e964f8aSZbigniew Bodek #define CESA_HMAC_TRUNC_LEN		12
728817e1bfSRafal Jaworowski #define CESA_MAX_FRAGMENTS		64
738817e1bfSRafal Jaworowski #define CESA_SRAM_SIZE			2048
748817e1bfSRafal Jaworowski 
758817e1bfSRafal Jaworowski /*
768817e1bfSRafal Jaworowski  * CESA_MAX_HASH_LEN is maximum length of hash generated by CESA.
77*b07df6e5SZbigniew Bodek  * As CESA supports MD5, SHA1 and SHA-256 this equals to 32 bytes.
788817e1bfSRafal Jaworowski  */
79*b07df6e5SZbigniew Bodek #define CESA_MAX_HASH_LEN		32
808817e1bfSRafal Jaworowski #define CESA_MAX_KEY_LEN		32
818817e1bfSRafal Jaworowski #define CESA_MAX_IV_LEN			16
828817e1bfSRafal Jaworowski #define CESA_MAX_HMAC_BLOCK_LEN		64
838817e1bfSRafal Jaworowski #define CESA_MAX_MKEY_LEN		CESA_MAX_HMAC_BLOCK_LEN
848817e1bfSRafal Jaworowski #define CESA_MAX_PACKET_SIZE		(CESA_SRAM_SIZE - CESA_DATA(0))
858817e1bfSRafal Jaworowski #define CESA_MAX_REQUEST_SIZE		65535
868817e1bfSRafal Jaworowski 
878817e1bfSRafal Jaworowski /* Locking macros */
888817e1bfSRafal Jaworowski #define CESA_LOCK(sc, what)		mtx_lock(&(sc)->sc_ ## what ## _lock)
898817e1bfSRafal Jaworowski #define CESA_UNLOCK(sc, what)		mtx_unlock(&(sc)->sc_ ## what ## _lock)
908817e1bfSRafal Jaworowski #define CESA_LOCK_ASSERT(sc, what)	\
918817e1bfSRafal Jaworowski 	mtx_assert(&(sc)->sc_ ## what ## _lock, MA_OWNED)
928817e1bfSRafal Jaworowski 
938817e1bfSRafal Jaworowski /* Registers read/write macros */
9422c7a031SZbigniew Bodek #define CESA_REG_READ(sc, reg)		\
9522c7a031SZbigniew Bodek 	bus_read_4((sc)->sc_res[RES_CESA_REGS], (reg))
9622c7a031SZbigniew Bodek #define CESA_REG_WRITE(sc, reg, val)	\
9722c7a031SZbigniew Bodek 	bus_write_4((sc)->sc_res[RES_CESA_REGS], (reg), (val))
9822c7a031SZbigniew Bodek 
9922c7a031SZbigniew Bodek #define CESA_TDMA_READ(sc, reg)		\
10022c7a031SZbigniew Bodek 	bus_read_4((sc)->sc_res[RES_TDMA_REGS], (reg))
10122c7a031SZbigniew Bodek #define CESA_TDMA_WRITE(sc, reg, val)	\
10222c7a031SZbigniew Bodek 	bus_write_4((sc)->sc_res[RES_TDMA_REGS], (reg), (val))
1038817e1bfSRafal Jaworowski 
1048817e1bfSRafal Jaworowski /* Generic allocator for objects */
1058817e1bfSRafal Jaworowski #define CESA_GENERIC_ALLOC_LOCKED(sc, obj, pool) do {		\
1068817e1bfSRafal Jaworowski 	CESA_LOCK(sc, pool);					\
1078817e1bfSRafal Jaworowski 								\
1088817e1bfSRafal Jaworowski 	if (STAILQ_EMPTY(&(sc)->sc_free_ ## pool))		\
1098817e1bfSRafal Jaworowski 		obj = NULL;					\
1108817e1bfSRafal Jaworowski 	else {							\
1118817e1bfSRafal Jaworowski 		obj = STAILQ_FIRST(&(sc)->sc_free_ ## pool);	\
1128817e1bfSRafal Jaworowski 		STAILQ_REMOVE_HEAD(&(sc)->sc_free_ ## pool,	\
1138817e1bfSRafal Jaworowski 		    obj ## _stq);				\
1148817e1bfSRafal Jaworowski 	}							\
1158817e1bfSRafal Jaworowski 								\
1168817e1bfSRafal Jaworowski 	CESA_UNLOCK(sc, pool);					\
1178817e1bfSRafal Jaworowski } while (0)
1188817e1bfSRafal Jaworowski 
1198817e1bfSRafal Jaworowski #define CESA_GENERIC_FREE_LOCKED(sc, obj, pool) do {		\
1208817e1bfSRafal Jaworowski 	CESA_LOCK(sc, pool);					\
1218817e1bfSRafal Jaworowski 	STAILQ_INSERT_TAIL(&(sc)->sc_free_ ## pool, obj,	\
1228817e1bfSRafal Jaworowski 	    obj ## _stq);					\
1238817e1bfSRafal Jaworowski 	CESA_UNLOCK(sc, pool);					\
1248817e1bfSRafal Jaworowski } while (0)
1258817e1bfSRafal Jaworowski 
1268817e1bfSRafal Jaworowski /* CESA SRAM offset calculation macros */
1278817e1bfSRafal Jaworowski #define CESA_SA_DATA(member)					\
1288817e1bfSRafal Jaworowski 	(sizeof(struct cesa_sa_hdesc) + offsetof(struct cesa_sa_data, member))
1298817e1bfSRafal Jaworowski #define CESA_DATA(offset)					\
1308817e1bfSRafal Jaworowski 	(sizeof(struct cesa_sa_hdesc) + sizeof(struct cesa_sa_data) + offset)
1318817e1bfSRafal Jaworowski 
13222c7a031SZbigniew Bodek /* CESA memory and IRQ resources */
13322c7a031SZbigniew Bodek enum cesa_res_type {
13422c7a031SZbigniew Bodek 	RES_TDMA_REGS,
13522c7a031SZbigniew Bodek 	RES_CESA_REGS,
13622c7a031SZbigniew Bodek 	RES_CESA_IRQ,
13722c7a031SZbigniew Bodek 	RES_CESA_NUM
13822c7a031SZbigniew Bodek };
13922c7a031SZbigniew Bodek 
1408817e1bfSRafal Jaworowski struct cesa_tdma_hdesc {
1418817e1bfSRafal Jaworowski 	uint16_t	cthd_byte_count;
1428817e1bfSRafal Jaworowski 	uint16_t	cthd_flags;
1438817e1bfSRafal Jaworowski 	uint32_t	cthd_src;
1448817e1bfSRafal Jaworowski 	uint32_t	cthd_dst;
1458817e1bfSRafal Jaworowski 	uint32_t	cthd_next;
1468817e1bfSRafal Jaworowski };
1478817e1bfSRafal Jaworowski 
1488817e1bfSRafal Jaworowski struct cesa_sa_hdesc {
1498817e1bfSRafal Jaworowski 	uint32_t	cshd_config;
1508817e1bfSRafal Jaworowski 	uint16_t	cshd_enc_src;
1518817e1bfSRafal Jaworowski 	uint16_t	cshd_enc_dst;
1528817e1bfSRafal Jaworowski 	uint32_t	cshd_enc_dlen;
1538817e1bfSRafal Jaworowski 	uint32_t	cshd_enc_key;
1548817e1bfSRafal Jaworowski 	uint16_t	cshd_enc_iv;
1558817e1bfSRafal Jaworowski 	uint16_t	cshd_enc_iv_buf;
1568817e1bfSRafal Jaworowski 	uint16_t	cshd_mac_src;
1578817e1bfSRafal Jaworowski 	uint16_t	cshd_mac_total_dlen;
1588817e1bfSRafal Jaworowski 	uint16_t	cshd_mac_dst;
1598817e1bfSRafal Jaworowski 	uint16_t	cshd_mac_dlen;
1608817e1bfSRafal Jaworowski 	uint16_t	cshd_mac_iv_in;
1618817e1bfSRafal Jaworowski 	uint16_t	cshd_mac_iv_out;
1628817e1bfSRafal Jaworowski };
1638817e1bfSRafal Jaworowski 
1648817e1bfSRafal Jaworowski struct cesa_sa_data {
1658817e1bfSRafal Jaworowski 	uint8_t		csd_key[CESA_MAX_KEY_LEN];
1668817e1bfSRafal Jaworowski 	uint8_t		csd_iv[CESA_MAX_IV_LEN];
1678817e1bfSRafal Jaworowski 	uint8_t		csd_hiv_in[CESA_MAX_HASH_LEN];
1688817e1bfSRafal Jaworowski 	uint8_t		csd_hiv_out[CESA_MAX_HASH_LEN];
1698817e1bfSRafal Jaworowski 	uint8_t		csd_hash[CESA_MAX_HASH_LEN];
1708817e1bfSRafal Jaworowski };
1718817e1bfSRafal Jaworowski 
1728817e1bfSRafal Jaworowski struct cesa_dma_mem {
1738817e1bfSRafal Jaworowski 	void		*cdm_vaddr;
1748817e1bfSRafal Jaworowski 	bus_addr_t	cdm_paddr;
1758817e1bfSRafal Jaworowski 	bus_dma_tag_t	cdm_tag;
1768817e1bfSRafal Jaworowski 	bus_dmamap_t	cdm_map;
1778817e1bfSRafal Jaworowski };
1788817e1bfSRafal Jaworowski 
1798817e1bfSRafal Jaworowski struct cesa_tdma_desc {
1808817e1bfSRafal Jaworowski 	struct cesa_tdma_hdesc		*ctd_cthd;
1818817e1bfSRafal Jaworowski 	bus_addr_t			ctd_cthd_paddr;
1828817e1bfSRafal Jaworowski 
1838817e1bfSRafal Jaworowski 	STAILQ_ENTRY(cesa_tdma_desc)	ctd_stq;
1848817e1bfSRafal Jaworowski };
1858817e1bfSRafal Jaworowski 
1868817e1bfSRafal Jaworowski struct cesa_sa_desc {
1878817e1bfSRafal Jaworowski 	struct cesa_sa_hdesc		*csd_cshd;
1888817e1bfSRafal Jaworowski 	bus_addr_t			csd_cshd_paddr;
1898817e1bfSRafal Jaworowski 
1908817e1bfSRafal Jaworowski 	STAILQ_ENTRY(cesa_sa_desc)	csd_stq;
1918817e1bfSRafal Jaworowski };
1928817e1bfSRafal Jaworowski 
1938817e1bfSRafal Jaworowski struct cesa_session {
1948817e1bfSRafal Jaworowski 	uint32_t			cs_sid;
1958817e1bfSRafal Jaworowski 	uint32_t			cs_config;
1968817e1bfSRafal Jaworowski 	unsigned int			cs_klen;
1978817e1bfSRafal Jaworowski 	unsigned int			cs_ivlen;
1988817e1bfSRafal Jaworowski 	unsigned int			cs_hlen;
1998817e1bfSRafal Jaworowski 	unsigned int			cs_mblen;
2008817e1bfSRafal Jaworowski 	uint8_t				cs_key[CESA_MAX_KEY_LEN];
2018817e1bfSRafal Jaworowski 	uint8_t				cs_aes_dkey[CESA_MAX_KEY_LEN];
2028817e1bfSRafal Jaworowski 	uint8_t				cs_hiv_in[CESA_MAX_HASH_LEN];
2038817e1bfSRafal Jaworowski 	uint8_t				cs_hiv_out[CESA_MAX_HASH_LEN];
2048817e1bfSRafal Jaworowski 
2058817e1bfSRafal Jaworowski 	STAILQ_ENTRY(cesa_session)	cs_stq;
2068817e1bfSRafal Jaworowski };
2078817e1bfSRafal Jaworowski 
2088817e1bfSRafal Jaworowski struct cesa_request {
2098817e1bfSRafal Jaworowski 	struct cesa_sa_data		*cr_csd;
2108817e1bfSRafal Jaworowski 	bus_addr_t			cr_csd_paddr;
2118817e1bfSRafal Jaworowski 	struct cryptop			*cr_crp;
2128817e1bfSRafal Jaworowski 	struct cryptodesc		*cr_enc;
2138817e1bfSRafal Jaworowski 	struct cryptodesc		*cr_mac;
2148817e1bfSRafal Jaworowski 	struct cesa_session		*cr_cs;
2158817e1bfSRafal Jaworowski 	bus_dmamap_t			cr_dmap;
2168817e1bfSRafal Jaworowski 	int				cr_dmap_loaded;
2178817e1bfSRafal Jaworowski 
2188817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_tdma_desc)	cr_tdesc;
2198817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_sa_desc)	cr_sdesc;
2208817e1bfSRafal Jaworowski 
2218817e1bfSRafal Jaworowski 	STAILQ_ENTRY(cesa_request)	cr_stq;
2228817e1bfSRafal Jaworowski };
2238817e1bfSRafal Jaworowski 
2248817e1bfSRafal Jaworowski struct cesa_packet {
2258817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_tdma_desc)	cp_copyin;
2268817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_tdma_desc)	cp_copyout;
2278817e1bfSRafal Jaworowski 	unsigned int			cp_size;
2288817e1bfSRafal Jaworowski 	unsigned int			cp_offset;
2298817e1bfSRafal Jaworowski };
2308817e1bfSRafal Jaworowski 
2318817e1bfSRafal Jaworowski struct cesa_softc {
2328817e1bfSRafal Jaworowski 	device_t			sc_dev;
2338817e1bfSRafal Jaworowski 	int32_t				sc_cid;
23422c7a031SZbigniew Bodek 	struct resource			*sc_res[RES_CESA_NUM];
2358817e1bfSRafal Jaworowski 	void				*sc_icookie;
2368817e1bfSRafal Jaworowski 	bus_dma_tag_t			sc_data_dtag;
2378817e1bfSRafal Jaworowski 	int				sc_error;
2388817e1bfSRafal Jaworowski 	int				sc_tperr;
2398817e1bfSRafal Jaworowski 
2408817e1bfSRafal Jaworowski 	struct mtx			sc_sc_lock;
2418817e1bfSRafal Jaworowski 	int				sc_blocked;
2428817e1bfSRafal Jaworowski 
2438817e1bfSRafal Jaworowski 	/* TDMA descriptors pool */
2448817e1bfSRafal Jaworowski 	struct mtx			sc_tdesc_lock;
2458817e1bfSRafal Jaworowski 	struct cesa_tdma_desc		sc_tdesc[CESA_TDMA_DESCRIPTORS];
2468817e1bfSRafal Jaworowski 	struct cesa_dma_mem		sc_tdesc_cdm;
2478817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_tdma_desc)	sc_free_tdesc;
2488817e1bfSRafal Jaworowski 
2498817e1bfSRafal Jaworowski 	/* SA descriptors pool */
2508817e1bfSRafal Jaworowski 	struct mtx			sc_sdesc_lock;
2518817e1bfSRafal Jaworowski 	struct cesa_sa_desc		sc_sdesc[CESA_SA_DESCRIPTORS];
2528817e1bfSRafal Jaworowski 	struct cesa_dma_mem		sc_sdesc_cdm;
2538817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_sa_desc)	sc_free_sdesc;
2548817e1bfSRafal Jaworowski 
2558817e1bfSRafal Jaworowski 	/* Requests pool */
2568817e1bfSRafal Jaworowski 	struct mtx			sc_requests_lock;
2578817e1bfSRafal Jaworowski 	struct cesa_request		sc_requests[CESA_REQUESTS];
2588817e1bfSRafal Jaworowski 	struct cesa_dma_mem		sc_requests_cdm;
2598817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_request)	sc_free_requests;
2608817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_request)	sc_ready_requests;
2618817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_request)	sc_queued_requests;
2628817e1bfSRafal Jaworowski 
2638817e1bfSRafal Jaworowski 	/* Sessions pool */
2648817e1bfSRafal Jaworowski 	struct mtx			sc_sessions_lock;
2658817e1bfSRafal Jaworowski 	struct cesa_session		sc_sessions[CESA_SESSIONS];
2668817e1bfSRafal Jaworowski 	STAILQ_HEAD(, cesa_session)	sc_free_sessions;
2678817e1bfSRafal Jaworowski 
2688817e1bfSRafal Jaworowski 	/* CESA SRAM Address */
2695188e3ccSZbigniew Bodek 	bus_addr_t			sc_sram_base_pa;
2705188e3ccSZbigniew Bodek 	bus_space_handle_t		sc_sram_base_va;
2715188e3ccSZbigniew Bodek 	bus_size_t			sc_sram_size;
2728817e1bfSRafal Jaworowski };
2738817e1bfSRafal Jaworowski 
2748817e1bfSRafal Jaworowski struct cesa_chain_info {
2758817e1bfSRafal Jaworowski 	struct cesa_softc		*cci_sc;
2768817e1bfSRafal Jaworowski 	struct cesa_request		*cci_cr;
2778817e1bfSRafal Jaworowski 	struct cryptodesc		*cci_enc;
2788817e1bfSRafal Jaworowski 	struct cryptodesc		*cci_mac;
2798817e1bfSRafal Jaworowski 	uint32_t			cci_config;
2808817e1bfSRafal Jaworowski 	int				cci_error;
2818817e1bfSRafal Jaworowski };
2828817e1bfSRafal Jaworowski 
2838817e1bfSRafal Jaworowski /* CESA descriptors flags definitions */
2848817e1bfSRafal Jaworowski #define CESA_CTHD_OWNED			(1 << 15)
2858817e1bfSRafal Jaworowski 
2868817e1bfSRafal Jaworowski #define CESA_CSHD_MAC			(0 << 0)
2878817e1bfSRafal Jaworowski #define CESA_CSHD_ENC			(1 << 0)
2888817e1bfSRafal Jaworowski #define CESA_CSHD_MAC_AND_ENC		(2 << 0)
2898817e1bfSRafal Jaworowski #define CESA_CSHD_ENC_AND_MAC		(3 << 0)
2908817e1bfSRafal Jaworowski #define CESA_CSHD_OP_MASK		(3 << 0)
2918817e1bfSRafal Jaworowski 
2928817e1bfSRafal Jaworowski #define CESA_CSHD_MD5			(4 << 4)
2938817e1bfSRafal Jaworowski #define CESA_CSHD_SHA1			(5 << 4)
294*b07df6e5SZbigniew Bodek #define CESA_CSHD_SHA2_256		(1 << 4)
2951e964f8aSZbigniew Bodek #define CESA_CSHD_MD5_HMAC		(6 << 4)
2961e964f8aSZbigniew Bodek #define CESA_CSHD_SHA1_HMAC		(7 << 4)
297*b07df6e5SZbigniew Bodek #define CESA_CSHD_SHA2_256_HMAC		(3 << 4)
2981e964f8aSZbigniew Bodek 
2991e964f8aSZbigniew Bodek #define CESA_CSHD_96_BIT_HMAC		(1 << 7)
3008817e1bfSRafal Jaworowski 
3018817e1bfSRafal Jaworowski #define CESA_CSHD_DES			(1 << 8)
3028817e1bfSRafal Jaworowski #define CESA_CSHD_3DES			(2 << 8)
3038817e1bfSRafal Jaworowski #define CESA_CSHD_AES			(3 << 8)
3048817e1bfSRafal Jaworowski 
3058817e1bfSRafal Jaworowski #define CESA_CSHD_DECRYPT		(1 << 12)
3068817e1bfSRafal Jaworowski #define CESA_CSHD_CBC			(1 << 16)
3078817e1bfSRafal Jaworowski #define CESA_CSHD_3DES_EDE		(1 << 20)
3088817e1bfSRafal Jaworowski 
3098817e1bfSRafal Jaworowski #define CESA_CSH_AES_KLEN_128		(0 << 24)
3108817e1bfSRafal Jaworowski #define CESA_CSH_AES_KLEN_192		(1 << 24)
3118817e1bfSRafal Jaworowski #define CESA_CSH_AES_KLEN_256		(2 << 24)
3128817e1bfSRafal Jaworowski #define CESA_CSH_AES_KLEN_MASK		(3 << 24)
3138817e1bfSRafal Jaworowski 
3148817e1bfSRafal Jaworowski #define CESA_CSHD_FRAG_FIRST		(1 << 30)
315c8aef31dSEitan Adler #define CESA_CSHD_FRAG_LAST		(2U << 30)
316c8aef31dSEitan Adler #define CESA_CSHD_FRAG_MIDDLE		(3U << 30)
3178817e1bfSRafal Jaworowski 
3188817e1bfSRafal Jaworowski /* CESA registers definitions */
31922c7a031SZbigniew Bodek #define CESA_ICR			0x0E20
3208817e1bfSRafal Jaworowski #define CESA_ICR_ACCTDMA		(1 << 7)
3218817e1bfSRafal Jaworowski #define CESA_ICR_TPERR			(1 << 12)
3228817e1bfSRafal Jaworowski 
32322c7a031SZbigniew Bodek #define CESA_ICM			0x0E24
3248817e1bfSRafal Jaworowski #define CESA_ICM_ACCTDMA		CESA_ICR_ACCTDMA
3258817e1bfSRafal Jaworowski #define CESA_ICM_TPERR			CESA_ICR_TPERR
3268817e1bfSRafal Jaworowski 
3278817e1bfSRafal Jaworowski /* CESA TDMA registers definitions */
3288817e1bfSRafal Jaworowski #define CESA_TDMA_ND			0x0830
3298817e1bfSRafal Jaworowski 
3308817e1bfSRafal Jaworowski #define CESA_TDMA_CR			0x0840
3318817e1bfSRafal Jaworowski #define CESA_TDMA_CR_DBL128		(4 << 0)
3328817e1bfSRafal Jaworowski #define CESA_TDMA_CR_ORDEN		(1 << 4)
3338817e1bfSRafal Jaworowski #define CESA_TDMA_CR_SBL128		(4 << 6)
3348817e1bfSRafal Jaworowski #define CESA_TDMA_CR_NBS		(1 << 11)
3358817e1bfSRafal Jaworowski #define CESA_TDMA_CR_ENABLE		(1 << 12)
3368817e1bfSRafal Jaworowski #define CESA_TDMA_CR_FETCHND		(1 << 13)
3378817e1bfSRafal Jaworowski #define CESA_TDMA_CR_ACTIVE		(1 << 14)
3388817e1bfSRafal Jaworowski 
339*b07df6e5SZbigniew Bodek #if defined (SOC_MV_ARMADA38X)
340*b07df6e5SZbigniew Bodek #define CESA_TDMA_NUM_OUTSTAND		(2 << 16)
341*b07df6e5SZbigniew Bodek #endif
342*b07df6e5SZbigniew Bodek 
3438817e1bfSRafal Jaworowski #define CESA_TDMA_ECR			0x08C8
3448817e1bfSRafal Jaworowski #define CESA_TDMA_ECR_MISS		(1 << 0)
3458817e1bfSRafal Jaworowski #define CESA_TDMA_ECR_DOUBLE_HIT	(1 << 1)
3468817e1bfSRafal Jaworowski #define CESA_TDMA_ECR_BOTH_HIT		(1 << 2)
3478817e1bfSRafal Jaworowski #define CESA_TDMA_ECR_DATA_ERROR	(1 << 3)
3488817e1bfSRafal Jaworowski 
3498817e1bfSRafal Jaworowski #define CESA_TDMA_EMR			0x08CC
3508817e1bfSRafal Jaworowski #define CESA_TDMA_EMR_MISS		CESA_TDMA_ECR_MISS
3518817e1bfSRafal Jaworowski #define CESA_TDMA_EMR_DOUBLE_HIT	CESA_TDMA_ECR_DOUBLE_HIT
3528817e1bfSRafal Jaworowski #define CESA_TDMA_EMR_BOTH_HIT		CESA_TDMA_ECR_BOTH_HIT
3538817e1bfSRafal Jaworowski #define CESA_TDMA_EMR_DATA_ERROR	CESA_TDMA_ECR_DATA_ERROR
3548817e1bfSRafal Jaworowski 
35599eef682SGrzegorz Bernacki /*  CESA TDMA address decoding registers */
35699eef682SGrzegorz Bernacki #define MV_WIN_CESA_CTRL(n)		(0x8 * (n) + 0xA04)
35799eef682SGrzegorz Bernacki #define MV_WIN_CESA_BASE(n)		(0x8 * (n) + 0xA00)
35899eef682SGrzegorz Bernacki #define MV_WIN_CESA_MAX			4
35999eef682SGrzegorz Bernacki 
3608817e1bfSRafal Jaworowski /* CESA SA registers definitions */
36122c7a031SZbigniew Bodek #define CESA_SA_CMD			0x0E00
3628817e1bfSRafal Jaworowski #define CESA_SA_CMD_ACTVATE		(1 << 0)
3638817e1bfSRafal Jaworowski 
364*b07df6e5SZbigniew Bodek #if defined (SOC_MV_ARMADA38X)
365*b07df6e5SZbigniew Bodek #define CESA_SA_CMD_SHA2		(1 << 31)
366*b07df6e5SZbigniew Bodek #endif
367*b07df6e5SZbigniew Bodek 
36822c7a031SZbigniew Bodek #define CESA_SA_DPR			0x0E04
3698817e1bfSRafal Jaworowski 
37022c7a031SZbigniew Bodek #define CESA_SA_CR			0x0E08
3718817e1bfSRafal Jaworowski #define CESA_SA_CR_WAIT_FOR_TDMA	(1 << 7)
3728817e1bfSRafal Jaworowski #define CESA_SA_CR_ACTIVATE_TDMA	(1 << 9)
3738817e1bfSRafal Jaworowski #define CESA_SA_CR_MULTI_MODE		(1 << 11)
3748817e1bfSRafal Jaworowski 
37522c7a031SZbigniew Bodek #define CESA_SA_SR			0x0E0C
3768817e1bfSRafal Jaworowski #define CESA_SA_SR_ACTIVE		(1 << 0)
3778817e1bfSRafal Jaworowski 
3788817e1bfSRafal Jaworowski #endif
379