xref: /dpdk/drivers/crypto/bcmfs/hw/bcmfs_rm_common.c (revision 72b452c5f2599f970f47fd17d3e8e5d60bfebe7a)
1d5a7873cSVikas Gupta /* SPDX-License-Identifier: BSD-3-Clause
2d5a7873cSVikas Gupta  * Copyright(C) 2020 Broadcom.
3d5a7873cSVikas Gupta  * All rights reserved.
4d5a7873cSVikas Gupta  */
5d5a7873cSVikas Gupta 
6*72b452c5SDmitry Kozlyuk #include <errno.h>
7*72b452c5SDmitry Kozlyuk 
8d5a7873cSVikas Gupta #include "bcmfs_hw_defs.h"
9d5a7873cSVikas Gupta #include "bcmfs_rm_common.h"
10d5a7873cSVikas Gupta 
11d5a7873cSVikas Gupta /* Completion descriptor format */
12d5a7873cSVikas Gupta #define FS_CMPL_OPAQUE_SHIFT			0
13d5a7873cSVikas Gupta #define FS_CMPL_OPAQUE_MASK			0xffff
14d5a7873cSVikas Gupta #define FS_CMPL_ENGINE_STATUS_SHIFT		16
15d5a7873cSVikas Gupta #define FS_CMPL_ENGINE_STATUS_MASK		0xffff
16d5a7873cSVikas Gupta #define FS_CMPL_DME_STATUS_SHIFT		32
17d5a7873cSVikas Gupta #define FS_CMPL_DME_STATUS_MASK			0xffff
18d5a7873cSVikas Gupta #define FS_CMPL_RM_STATUS_SHIFT			48
19d5a7873cSVikas Gupta #define FS_CMPL_RM_STATUS_MASK			0xffff
20d5a7873cSVikas Gupta /* Completion RM status code */
21d5a7873cSVikas Gupta #define FS_RM_STATUS_CODE_SHIFT			0
22d5a7873cSVikas Gupta #define FS_RM_STATUS_CODE_MASK			0x3ff
23d5a7873cSVikas Gupta #define FS_RM_STATUS_CODE_GOOD			0x0
24d5a7873cSVikas Gupta #define FS_RM_STATUS_CODE_AE_TIMEOUT		0x3ff
25d5a7873cSVikas Gupta 
26d5a7873cSVikas Gupta 
27d5a7873cSVikas Gupta /* Completion DME status code */
28d5a7873cSVikas Gupta #define FS_DME_STATUS_MEM_COR_ERR		BIT(0)
29d5a7873cSVikas Gupta #define FS_DME_STATUS_MEM_UCOR_ERR		BIT(1)
30d5a7873cSVikas Gupta #define FS_DME_STATUS_FIFO_UNDRFLOW		BIT(2)
31d5a7873cSVikas Gupta #define FS_DME_STATUS_FIFO_OVERFLOW		BIT(3)
32d5a7873cSVikas Gupta #define FS_DME_STATUS_RRESP_ERR			BIT(4)
33d5a7873cSVikas Gupta #define FS_DME_STATUS_BRESP_ERR			BIT(5)
34d5a7873cSVikas Gupta #define FS_DME_STATUS_ERROR_MASK		(FS_DME_STATUS_MEM_COR_ERR | \
35d5a7873cSVikas Gupta 						 FS_DME_STATUS_MEM_UCOR_ERR | \
36d5a7873cSVikas Gupta 						 FS_DME_STATUS_FIFO_UNDRFLOW | \
37d5a7873cSVikas Gupta 						 FS_DME_STATUS_FIFO_OVERFLOW | \
38d5a7873cSVikas Gupta 						 FS_DME_STATUS_RRESP_ERR | \
39d5a7873cSVikas Gupta 						 FS_DME_STATUS_BRESP_ERR)
40d5a7873cSVikas Gupta 
41d5a7873cSVikas Gupta /* APIs related to ring manager descriptors */
42d5a7873cSVikas Gupta uint64_t
rm_build_desc(uint64_t val,uint32_t shift,uint64_t mask)43d5a7873cSVikas Gupta rm_build_desc(uint64_t val, uint32_t shift,
44d5a7873cSVikas Gupta 	   uint64_t mask)
45d5a7873cSVikas Gupta {
46d5a7873cSVikas Gupta 	return((val & mask) << shift);
47d5a7873cSVikas Gupta }
48d5a7873cSVikas Gupta 
49d5a7873cSVikas Gupta uint64_t
rm_read_desc(void * desc_ptr)50d5a7873cSVikas Gupta rm_read_desc(void *desc_ptr)
51d5a7873cSVikas Gupta {
52d5a7873cSVikas Gupta 	return le64_to_cpu(*((uint64_t *)desc_ptr));
53d5a7873cSVikas Gupta }
54d5a7873cSVikas Gupta 
55d5a7873cSVikas Gupta void
rm_write_desc(void * desc_ptr,uint64_t desc)56d5a7873cSVikas Gupta rm_write_desc(void *desc_ptr, uint64_t desc)
57d5a7873cSVikas Gupta {
58d5a7873cSVikas Gupta 	*((uint64_t *)desc_ptr) = cpu_to_le64(desc);
59d5a7873cSVikas Gupta }
60d5a7873cSVikas Gupta 
61d5a7873cSVikas Gupta uint32_t
rm_cmpl_desc_to_reqid(uint64_t cmpl_desc)62d5a7873cSVikas Gupta rm_cmpl_desc_to_reqid(uint64_t cmpl_desc)
63d5a7873cSVikas Gupta {
64d5a7873cSVikas Gupta 	return (uint32_t)(cmpl_desc & FS_CMPL_OPAQUE_MASK);
65d5a7873cSVikas Gupta }
66d5a7873cSVikas Gupta 
67d5a7873cSVikas Gupta int
rm_cmpl_desc_to_error(uint64_t cmpl_desc)68d5a7873cSVikas Gupta rm_cmpl_desc_to_error(uint64_t cmpl_desc)
69d5a7873cSVikas Gupta {
70d5a7873cSVikas Gupta 	uint32_t status;
71d5a7873cSVikas Gupta 
72d5a7873cSVikas Gupta 	status = FS_DESC_DEC(cmpl_desc, FS_CMPL_DME_STATUS_SHIFT,
73d5a7873cSVikas Gupta 			     FS_CMPL_DME_STATUS_MASK);
74d5a7873cSVikas Gupta 	if (status & FS_DME_STATUS_ERROR_MASK)
75d5a7873cSVikas Gupta 		return -EIO;
76d5a7873cSVikas Gupta 
77d5a7873cSVikas Gupta 	status = FS_DESC_DEC(cmpl_desc, FS_CMPL_RM_STATUS_SHIFT,
78d5a7873cSVikas Gupta 			     FS_CMPL_RM_STATUS_MASK);
79d5a7873cSVikas Gupta 	status &= FS_RM_STATUS_CODE_MASK;
80d5a7873cSVikas Gupta 	if (status == FS_RM_STATUS_CODE_AE_TIMEOUT)
81d5a7873cSVikas Gupta 		return -ETIMEDOUT;
82d5a7873cSVikas Gupta 
83d5a7873cSVikas Gupta 	return 0;
84d5a7873cSVikas Gupta }
85