1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */ 2b9eebfadSRuchika Gupta /* 3b9eebfadSRuchika Gupta * Copyright 2008-2014 Freescale Semiconductor, Inc. 4b9eebfadSRuchika Gupta * 5b9eebfadSRuchika Gupta */ 6b9eebfadSRuchika Gupta 7b9eebfadSRuchika Gupta #ifndef __JR_H 8b9eebfadSRuchika Gupta #define __JR_H 9b9eebfadSRuchika Gupta 10b9eebfadSRuchika Gupta #include <linux/compiler.h> 11b9eebfadSRuchika Gupta 12b9eebfadSRuchika Gupta #define JR_SIZE 4 13b9eebfadSRuchika Gupta /* Timeout currently defined as 90 sec */ 14b9eebfadSRuchika Gupta #define CONFIG_SEC_DEQ_TIMEOUT 90000000U 15b9eebfadSRuchika Gupta 16b9eebfadSRuchika Gupta #define DEFAULT_JR_ID 0 17b9eebfadSRuchika Gupta #define DEFAULT_JR_LIODN 0 18b9eebfadSRuchika Gupta #define DEFAULT_IRQ 0 /* Interrupts not to be configured */ 19b9eebfadSRuchika Gupta 20b9eebfadSRuchika Gupta #define MCFGR_SWRST ((uint32_t)(1)<<31) /* Software Reset */ 21b9eebfadSRuchika Gupta #define MCFGR_DMA_RST ((uint32_t)(1)<<28) /* DMA Reset */ 22b9eebfadSRuchika Gupta #define MCFGR_PS_SHIFT 16 233ef2412dShoria.geanta@freescale.com #define MCFGR_AWCACHE_SHIFT 8 243ef2412dShoria.geanta@freescale.com #define MCFGR_AWCACHE_MASK (0xf << MCFGR_AWCACHE_SHIFT) 258a6f83dcSSaksham Jain #define MCFGR_ARCACHE_SHIFT 12 268a6f83dcSSaksham Jain #define MCFGR_ARCACHE_MASK (0xf << MCFGR_ARCACHE_SHIFT) 278a6f83dcSSaksham Jain 28b9eebfadSRuchika Gupta #define JR_INTMASK 0x00000001 29b9eebfadSRuchika Gupta #define JRCR_RESET 0x01 30b9eebfadSRuchika Gupta #define JRINT_ERR_HALT_INPROGRESS 0x4 31b9eebfadSRuchika Gupta #define JRINT_ERR_HALT_MASK 0xc 32b9eebfadSRuchika Gupta #define JRNSLIODN_SHIFT 16 33b9eebfadSRuchika Gupta #define JRNSLIODN_MASK 0x0fff0000 34b9eebfadSRuchika Gupta #define JRSLIODN_SHIFT 0 35b9eebfadSRuchika Gupta #define JRSLIODN_MASK 0x00000fff 3622191ac3SBryan O'Donoghue #define JROWN_NS 0x00000008 3722191ac3SBryan O'Donoghue #define JRMID_NS 0x00000001 38b9eebfadSRuchika Gupta 39b9eebfadSRuchika Gupta #define JQ_DEQ_ERR -1 40b9eebfadSRuchika Gupta #define JQ_DEQ_TO_ERR -2 41b9eebfadSRuchika Gupta #define JQ_ENQ_ERR -3 42b9eebfadSRuchika Gupta 43dfaec760SLukas Auer #define RNG4_MAX_HANDLES 2 44dfaec760SLukas Auer 45b9eebfadSRuchika Gupta struct op_ring { 46f59e69cbSAneesh Bansal phys_addr_t desc; 47b9eebfadSRuchika Gupta uint32_t status; 48b9eebfadSRuchika Gupta } __packed; 49b9eebfadSRuchika Gupta 50b9eebfadSRuchika Gupta struct jr_info { 51f59e69cbSAneesh Bansal void (*callback)(uint32_t status, void *arg); 52f59e69cbSAneesh Bansal phys_addr_t desc_phys_addr; 53b9eebfadSRuchika Gupta uint32_t desc_len; 54b9eebfadSRuchika Gupta uint32_t op_done; 55b9eebfadSRuchika Gupta void *arg; 56b9eebfadSRuchika Gupta }; 57b9eebfadSRuchika Gupta 58b9eebfadSRuchika Gupta struct jobring { 59b9eebfadSRuchika Gupta int jq_id; 60b9eebfadSRuchika Gupta int irq; 61b9eebfadSRuchika Gupta int liodn; 62b9eebfadSRuchika Gupta /* Head is the index where software would enq the descriptor in 63b9eebfadSRuchika Gupta * the i/p ring 64b9eebfadSRuchika Gupta */ 65b9eebfadSRuchika Gupta int head; 66b9eebfadSRuchika Gupta /* Tail index would be used by s/w ehile enqueuing to determine if 67b9eebfadSRuchika Gupta * there is any space left in the s/w maintained i/p rings 68b9eebfadSRuchika Gupta */ 69b9eebfadSRuchika Gupta /* Also in case of deq tail will be incremented only in case of 70b9eebfadSRuchika Gupta * in-order job completion 71b9eebfadSRuchika Gupta */ 72b9eebfadSRuchika Gupta int tail; 73b9eebfadSRuchika Gupta /* Read index of the output ring. It may not match with tail in case 74b9eebfadSRuchika Gupta * of out of order completetion 75b9eebfadSRuchika Gupta */ 76b9eebfadSRuchika Gupta int read_idx; 77b9eebfadSRuchika Gupta /* Write index to input ring. Would be always equal to head */ 78b9eebfadSRuchika Gupta int write_idx; 79b9eebfadSRuchika Gupta /* Size of the rings. */ 80b9eebfadSRuchika Gupta int size; 817f4736bdSRuchika Gupta /* Op ring size aligned to cache line size */ 827f4736bdSRuchika Gupta int op_size; 83b9eebfadSRuchika Gupta /* The ip and output rings have to be accessed by SEC. So the 84b9eebfadSRuchika Gupta * pointers will ahve to point to the housekeeping region provided 85b9eebfadSRuchika Gupta * by SEC 86b9eebfadSRuchika Gupta */ 87b9eebfadSRuchika Gupta /*Circular Ring of i/p descriptors */ 88b9eebfadSRuchika Gupta dma_addr_t *input_ring; 89b9eebfadSRuchika Gupta /* Circular Ring of o/p descriptors */ 90b9eebfadSRuchika Gupta /* Circula Ring containing info regarding descriptors in i/p 91b9eebfadSRuchika Gupta * and o/p ring 92b9eebfadSRuchika Gupta */ 93b9eebfadSRuchika Gupta /* This ring can be on the stack */ 94b9eebfadSRuchika Gupta struct jr_info info[JR_SIZE]; 95b9eebfadSRuchika Gupta struct op_ring *output_ring; 9676394c9cSAlex Porosanu /* Offset in CCSR to the SEC engine to which this JR belongs */ 9776394c9cSAlex Porosanu uint32_t sec_offset; 9876394c9cSAlex Porosanu 99b9eebfadSRuchika Gupta }; 100b9eebfadSRuchika Gupta 101b9eebfadSRuchika Gupta struct result { 102b9eebfadSRuchika Gupta int done; 103b9eebfadSRuchika Gupta uint32_t status; 104b9eebfadSRuchika Gupta }; 105b9eebfadSRuchika Gupta 106b9eebfadSRuchika Gupta void caam_jr_strstatus(u32 status); 107b9eebfadSRuchika Gupta int run_descriptor_jr(uint32_t *desc); 108b9eebfadSRuchika Gupta 109b9eebfadSRuchika Gupta #endif 110