66#include "otx2_cptvf.h"
77#include "otx2_cptlf.h"
88#include "cn10k_cpt.h"
9+ #include "otx2_cpt_common.h"
910
1011static void cn10k_cpt_send_cmd (union otx2_cpt_inst_s * cptinst , u32 insts_num ,
1112 struct otx2_cptlf_info * lf );
@@ -27,7 +28,7 @@ static struct cpt_hw_ops cn10k_hw_ops = {
2728static void cn10k_cpt_send_cmd (union otx2_cpt_inst_s * cptinst , u32 insts_num ,
2829 struct otx2_cptlf_info * lf )
2930{
30- void __iomem * lmtline = lf -> lmtline ;
31+ void * lmtline = lf -> lfs -> lmt_info . base + ( lf -> slot * LMTLINE_SIZE ) ;
3132 u64 val = (lf -> slot & 0x7FF );
3233 u64 tar_addr = 0 ;
3334
@@ -41,34 +42,69 @@ static void cn10k_cpt_send_cmd(union otx2_cpt_inst_s *cptinst, u32 insts_num,
4142 dma_wmb ();
4243
4344 /* Copy CPT command to LMTLINE */
44- memcpy_toio (lmtline , cptinst , insts_num * OTX2_CPT_INST_SIZE );
45+ memcpy (lmtline , cptinst , insts_num * OTX2_CPT_INST_SIZE );
4546 cn10k_lmt_flush (val , tar_addr );
4647}
4748
49+ void cn10k_cpt_lmtst_free (struct pci_dev * pdev , struct otx2_cptlfs_info * lfs )
50+ {
51+ struct otx2_lmt_info * lmt_info = & lfs -> lmt_info ;
52+
53+ if (!lmt_info -> base )
54+ return ;
55+
56+ dma_free_attrs (& pdev -> dev , lmt_info -> size ,
57+ lmt_info -> base - lmt_info -> align ,
58+ lmt_info -> iova - lmt_info -> align ,
59+ DMA_ATTR_FORCE_CONTIGUOUS );
60+ }
61+ EXPORT_SYMBOL_NS_GPL (cn10k_cpt_lmtst_free , "CRYPTO_DEV_OCTEONTX2_CPT" );
62+
63+ static int cn10k_cpt_lmtst_alloc (struct pci_dev * pdev ,
64+ struct otx2_cptlfs_info * lfs , u32 size )
65+ {
66+ struct otx2_lmt_info * lmt_info = & lfs -> lmt_info ;
67+ dma_addr_t align_iova ;
68+ dma_addr_t iova ;
69+
70+ lmt_info -> base = dma_alloc_attrs (& pdev -> dev , size , & iova , GFP_KERNEL ,
71+ DMA_ATTR_FORCE_CONTIGUOUS );
72+ if (!lmt_info -> base )
73+ return - ENOMEM ;
74+
75+ align_iova = ALIGN ((u64 )iova , LMTLINE_ALIGN );
76+ lmt_info -> iova = align_iova ;
77+ lmt_info -> align = align_iova - iova ;
78+ lmt_info -> size = size ;
79+ lmt_info -> base += lmt_info -> align ;
80+ return 0 ;
81+ }
82+
4883int cn10k_cptpf_lmtst_init (struct otx2_cptpf_dev * cptpf )
4984{
5085 struct pci_dev * pdev = cptpf -> pdev ;
51- resource_size_t size ;
52- u64 lmt_base ;
86+ u32 size ;
87+ int ret ;
5388
5489 if (!test_bit (CN10K_LMTST , & cptpf -> cap_flag )) {
5590 cptpf -> lfs .ops = & otx2_hw_ops ;
5691 return 0 ;
5792 }
5893
5994 cptpf -> lfs .ops = & cn10k_hw_ops ;
60- lmt_base = readq (cptpf -> reg_base + RVU_PF_LMTLINE_ADDR );
61- if (!lmt_base ) {
62- dev_err (& pdev -> dev , "PF LMTLINE address not configured\n" );
63- return - ENOMEM ;
95+ size = OTX2_CPT_MAX_VFS_NUM * LMTLINE_SIZE + LMTLINE_ALIGN ;
96+ ret = cn10k_cpt_lmtst_alloc (pdev , & cptpf -> lfs , size );
97+ if (ret ) {
98+ dev_err (& pdev -> dev , "PF-%d LMTLINE memory allocation failed\n" ,
99+ cptpf -> pf_id );
100+ return ret ;
64101 }
65- size = pci_resource_len (pdev , PCI_MBOX_BAR_NUM );
66- size -= ((1 + cptpf -> max_vfs ) * MBOX_SIZE );
67- cptpf -> lfs .lmt_base = devm_ioremap_wc (& pdev -> dev , lmt_base , size );
68- if (!cptpf -> lfs .lmt_base ) {
69- dev_err (& pdev -> dev ,
70- "Mapping of PF LMTLINE address failed\n" );
71- return - ENOMEM ;
102+
103+ ret = otx2_cpt_lmtst_tbl_setup_msg (& cptpf -> lfs );
104+ if (ret ) {
105+ dev_err (& pdev -> dev , "PF-%d: LMTST Table setup failed\n" ,
106+ cptpf -> pf_id );
107+ cn10k_cpt_lmtst_free (pdev , & cptpf -> lfs );
72108 }
73109
74110 return 0 ;
@@ -78,18 +114,25 @@ EXPORT_SYMBOL_NS_GPL(cn10k_cptpf_lmtst_init, "CRYPTO_DEV_OCTEONTX2_CPT");
78114int cn10k_cptvf_lmtst_init (struct otx2_cptvf_dev * cptvf )
79115{
80116 struct pci_dev * pdev = cptvf -> pdev ;
81- resource_size_t offset , size ;
117+ u32 size ;
118+ int ret ;
82119
83120 if (!test_bit (CN10K_LMTST , & cptvf -> cap_flag ))
84121 return 0 ;
85122
86- offset = pci_resource_start (pdev , PCI_MBOX_BAR_NUM );
87- size = pci_resource_len (pdev , PCI_MBOX_BAR_NUM );
88- /* Map VF LMILINE region */
89- cptvf -> lfs .lmt_base = devm_ioremap_wc (& pdev -> dev , offset , size );
90- if (!cptvf -> lfs .lmt_base ) {
91- dev_err (& pdev -> dev , "Unable to map BAR4\n" );
92- return - ENOMEM ;
123+ size = cptvf -> lfs .lfs_num * LMTLINE_SIZE + LMTLINE_ALIGN ;
124+ ret = cn10k_cpt_lmtst_alloc (pdev , & cptvf -> lfs , size );
125+ if (ret ) {
126+ dev_err (& pdev -> dev , "VF-%d LMTLINE memory allocation failed\n" ,
127+ cptvf -> vf_id );
128+ return ret ;
129+ }
130+
131+ ret = otx2_cpt_lmtst_tbl_setup_msg (& cptvf -> lfs );
132+ if (ret ) {
133+ dev_err (& pdev -> dev , "VF-%d: LMTST Table setup failed\n" ,
134+ cptvf -> vf_id );
135+ cn10k_cpt_lmtst_free (pdev , & cptvf -> lfs );
93136 }
94137
95138 return 0 ;
0 commit comments