1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell.
11 static const char name[] = "roc_cn10k_intra_device_conf";
12 const struct plt_memzone *mz;
13 struct idev_cfg *idev;
15 mz = plt_memzone_lookup(name);
19 /* Request for the first time */
20 mz = plt_memzone_reserve_cache_align(name, sizeof(struct idev_cfg));
23 idev_set_defaults(idev);
30 idev_set_defaults(struct idev_cfg *idev)
32 idev->sso_pf_func = 0;
34 idev->npa_pf_func = 0;
35 idev->max_pools = 128;
36 idev->lmt_pf_func = 0;
37 idev->lmt_base_addr = 0;
38 idev->num_lmtlines = 0;
41 idev->nix_inl_dev = NULL;
42 plt_spinlock_init(&idev->nix_inl_dev_lock);
43 __atomic_store_n(&idev->npa_refcnt, 0, __ATOMIC_RELEASE);
47 idev_sso_pffunc_get(void)
49 struct idev_cfg *idev;
52 idev = idev_get_cfg();
55 sso_pf_func = __atomic_load_n(&idev->sso_pf_func,
62 idev_sso_pffunc_set(uint16_t sso_pf_func)
64 struct idev_cfg *idev;
66 idev = idev_get_cfg();
68 __atomic_store_n(&idev->sso_pf_func, sso_pf_func,
73 idev_npa_pffunc_get(void)
75 struct idev_cfg *idev;
78 idev = idev_get_cfg();
81 npa_pf_func = idev->npa_pf_func;
87 idev_npa_obj_get(void)
89 struct idev_cfg *idev;
91 idev = idev_get_cfg();
92 if (idev && __atomic_load_n(&idev->npa_refcnt, __ATOMIC_ACQUIRE))
99 roc_idev_npa_maxpools_get(void)
101 struct idev_cfg *idev;
104 idev = idev_get_cfg();
107 max_pools = idev->max_pools;
113 roc_idev_npa_maxpools_set(uint32_t max_pools)
115 struct idev_cfg *idev;
117 idev = idev_get_cfg();
119 __atomic_store_n(&idev->max_pools, max_pools, __ATOMIC_RELEASE);
123 idev_npa_lf_active(struct dev *dev)
125 struct idev_cfg *idev;
127 /* Check if npalf is actively used on this dev */
128 idev = idev_get_cfg();
129 if (!idev || !idev->npa || idev->npa->mbox != dev->mbox)
132 return __atomic_load_n(&idev->npa_refcnt, __ATOMIC_ACQUIRE);
136 idev_lmt_pffunc_get(void)
138 struct idev_cfg *idev;
139 uint16_t lmt_pf_func;
141 idev = idev_get_cfg();
144 lmt_pf_func = idev->lmt_pf_func;
150 roc_idev_lmt_base_addr_get(void)
152 uint64_t lmt_base_addr;
153 struct idev_cfg *idev;
155 idev = idev_get_cfg();
158 lmt_base_addr = idev->lmt_base_addr;
160 return lmt_base_addr;
164 roc_idev_num_lmtlines_get(void)
166 struct idev_cfg *idev;
167 uint16_t num_lmtlines;
169 idev = idev_get_cfg();
172 num_lmtlines = idev->num_lmtlines;
178 roc_idev_cpt_get(void)
180 struct idev_cfg *idev = idev_get_cfg();
189 roc_nix_inl_outb_ring_base_get(struct roc_nix *roc_nix)
191 struct nix *nix = roc_nix_to_nix_priv(roc_nix);
192 struct idev_cfg *idev = idev_get_cfg();
193 struct nix_inl_dev *inl_dev;
195 if (!idev || !idev->nix_inl_dev)
198 inl_dev = idev->nix_inl_dev;
200 return (uint64_t *)&inl_dev->sa_soft_exp_ring[nix->outb_se_ring_base];
204 roc_idev_cpt_set(struct roc_cpt *cpt)
206 struct idev_cfg *idev = idev_get_cfg();
209 __atomic_store_n(&idev->cpt, cpt, __ATOMIC_RELEASE);
213 roc_idev_npa_nix_get(void)
215 struct npa_lf *npa_lf = idev_npa_obj_get();
221 dev = container_of(npa_lf, struct dev, npa);
228 struct idev_cfg *idev = idev_get_cfg();
231 return __atomic_load_n(&idev->sso, __ATOMIC_ACQUIRE);
237 idev_sso_set(struct roc_sso *sso)
239 struct idev_cfg *idev = idev_get_cfg();
242 __atomic_store_n(&idev->sso, sso, __ATOMIC_RELEASE);