mirror of
https://github.com/torvalds/linux.git
synced 2024-12-13 22:53:20 +00:00
nfp: convert all RTsym users to use new read/write helpers
Convert all users of RTsym to the new set of helpers which handle all targets correctly. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Francois H. Theron <francois.theron@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
761969992d
commit
1240989ccc
@ -55,30 +55,21 @@
|
||||
#define NFP_QMSTAT_DROP 16
|
||||
#define NFP_QMSTAT_ECN 24
|
||||
|
||||
static unsigned long long
|
||||
nfp_abm_q_lvl_thrs(struct nfp_abm_link *alink, unsigned int queue)
|
||||
{
|
||||
return alink->abm->q_lvls->addr +
|
||||
(alink->queue_base + queue) * NFP_QLVL_STRIDE + NFP_QLVL_THRS;
|
||||
}
|
||||
|
||||
static int
|
||||
nfp_abm_ctrl_stat(struct nfp_abm_link *alink, const struct nfp_rtsym *sym,
|
||||
unsigned int stride, unsigned int offset, unsigned int i,
|
||||
bool is_u64, u64 *res)
|
||||
{
|
||||
struct nfp_cpp *cpp = alink->abm->app->cpp;
|
||||
u32 val32, mur;
|
||||
u64 val, addr;
|
||||
u64 val, sym_offset;
|
||||
u32 val32;
|
||||
int err;
|
||||
|
||||
mur = NFP_CPP_ATOMIC_RD(sym->target, sym->domain);
|
||||
|
||||
addr = sym->addr + (alink->queue_base + i) * stride + offset;
|
||||
sym_offset = (alink->queue_base + i) * stride + offset;
|
||||
if (is_u64)
|
||||
err = nfp_cpp_readq(cpp, mur, addr, &val);
|
||||
err = __nfp_rtsym_readq(cpp, sym, 3, 0, sym_offset, &val);
|
||||
else
|
||||
err = nfp_cpp_readl(cpp, mur, addr, &val32);
|
||||
err = __nfp_rtsym_readl(cpp, sym, 3, 0, sym_offset, &val32);
|
||||
if (err) {
|
||||
nfp_err(cpp,
|
||||
"RED offload reading stat failed on vNIC %d queue %d\n",
|
||||
@ -114,13 +105,12 @@ nfp_abm_ctrl_stat_all(struct nfp_abm_link *alink, const struct nfp_rtsym *sym,
|
||||
int nfp_abm_ctrl_set_q_lvl(struct nfp_abm_link *alink, unsigned int i, u32 val)
|
||||
{
|
||||
struct nfp_cpp *cpp = alink->abm->app->cpp;
|
||||
u32 muw;
|
||||
u64 sym_offset;
|
||||
int err;
|
||||
|
||||
muw = NFP_CPP_ATOMIC_WR(alink->abm->q_lvls->target,
|
||||
alink->abm->q_lvls->domain);
|
||||
|
||||
err = nfp_cpp_writel(cpp, muw, nfp_abm_q_lvl_thrs(alink, i), val);
|
||||
sym_offset = (alink->queue_base + i) * NFP_QLVL_STRIDE + NFP_QLVL_THRS;
|
||||
err = __nfp_rtsym_writel(cpp, alink->abm->q_lvls, 4, 0,
|
||||
sym_offset, val);
|
||||
if (err) {
|
||||
nfp_err(cpp, "RED offload setting level failed on vNIC %d queue %d\n",
|
||||
alink->id, i);
|
||||
|
@ -116,23 +116,18 @@ nfp_pf_map_rtsym(struct nfp_pf *pf, const char *name, const char *sym_fmt,
|
||||
int nfp_mbox_cmd(struct nfp_pf *pf, u32 cmd, void *in_data, u64 in_length,
|
||||
void *out_data, u64 out_length)
|
||||
{
|
||||
unsigned long long addr;
|
||||
unsigned long err_at;
|
||||
u64 max_data_sz;
|
||||
u32 val = 0;
|
||||
u32 cpp_id;
|
||||
int n, err;
|
||||
|
||||
if (!pf->mbox)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
cpp_id = NFP_CPP_ISLAND_ID(pf->mbox->target, NFP_CPP_ACTION_RW, 0,
|
||||
pf->mbox->domain);
|
||||
addr = pf->mbox->addr;
|
||||
max_data_sz = pf->mbox->size - NFP_MBOX_SYM_MIN_SIZE;
|
||||
|
||||
/* Check if cmd field is clear */
|
||||
err = nfp_cpp_readl(pf->cpp, cpp_id, addr + NFP_MBOX_CMD, &val);
|
||||
err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_CMD, &val);
|
||||
if (err || val) {
|
||||
nfp_warn(pf->cpp, "failed to issue command (%u): %u, err: %d\n",
|
||||
cmd, val, err);
|
||||
@ -140,30 +135,29 @@ int nfp_mbox_cmd(struct nfp_pf *pf, u32 cmd, void *in_data, u64 in_length,
|
||||
}
|
||||
|
||||
in_length = min(in_length, max_data_sz);
|
||||
n = nfp_cpp_write(pf->cpp, cpp_id, addr + NFP_MBOX_DATA,
|
||||
in_data, in_length);
|
||||
n = nfp_rtsym_write(pf->cpp, pf->mbox, NFP_MBOX_DATA, in_data,
|
||||
in_length);
|
||||
if (n != in_length)
|
||||
return -EIO;
|
||||
/* Write data_len and wipe reserved */
|
||||
err = nfp_cpp_writeq(pf->cpp, cpp_id, addr + NFP_MBOX_DATA_LEN,
|
||||
in_length);
|
||||
err = nfp_rtsym_writeq(pf->cpp, pf->mbox, NFP_MBOX_DATA_LEN, in_length);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* Read back for ordering */
|
||||
err = nfp_cpp_readl(pf->cpp, cpp_id, addr + NFP_MBOX_DATA_LEN, &val);
|
||||
err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_DATA_LEN, &val);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* Write cmd and wipe return value */
|
||||
err = nfp_cpp_writeq(pf->cpp, cpp_id, addr + NFP_MBOX_CMD, cmd);
|
||||
err = nfp_rtsym_writeq(pf->cpp, pf->mbox, NFP_MBOX_CMD, cmd);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err_at = jiffies + 5 * HZ;
|
||||
while (true) {
|
||||
/* Wait for command to go to 0 (NFP_MBOX_NO_CMD) */
|
||||
err = nfp_cpp_readl(pf->cpp, cpp_id, addr + NFP_MBOX_CMD, &val);
|
||||
err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_CMD, &val);
|
||||
if (err)
|
||||
return err;
|
||||
if (!val)
|
||||
@ -176,18 +170,18 @@ int nfp_mbox_cmd(struct nfp_pf *pf, u32 cmd, void *in_data, u64 in_length,
|
||||
}
|
||||
|
||||
/* Copy output if any (could be error info, do it before reading ret) */
|
||||
err = nfp_cpp_readl(pf->cpp, cpp_id, addr + NFP_MBOX_DATA_LEN, &val);
|
||||
err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_DATA_LEN, &val);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
out_length = min_t(u32, val, min(out_length, max_data_sz));
|
||||
n = nfp_cpp_read(pf->cpp, cpp_id, addr + NFP_MBOX_DATA,
|
||||
out_data, out_length);
|
||||
n = nfp_rtsym_read(pf->cpp, pf->mbox, NFP_MBOX_DATA,
|
||||
out_data, out_length);
|
||||
if (n != out_length)
|
||||
return -EIO;
|
||||
|
||||
/* Check if there is an error */
|
||||
err = nfp_cpp_readl(pf->cpp, cpp_id, addr + NFP_MBOX_RET, &val);
|
||||
err = nfp_rtsym_readl(pf->cpp, pf->mbox, NFP_MBOX_RET, &val);
|
||||
if (err)
|
||||
return err;
|
||||
if (val)
|
||||
|
@ -188,7 +188,6 @@ nfp_net_dump_load_dumpspec(struct nfp_cpp *cpp, struct nfp_rtsym_table *rtbl)
|
||||
const struct nfp_rtsym *specsym;
|
||||
struct nfp_dumpspec *dumpspec;
|
||||
int bytes_read;
|
||||
u32 cpp_id;
|
||||
|
||||
specsym = nfp_rtsym_lookup(rtbl, NFP_DUMP_SPEC_RTSYM);
|
||||
if (!specsym)
|
||||
@ -201,11 +200,8 @@ nfp_net_dump_load_dumpspec(struct nfp_cpp *cpp, struct nfp_rtsym_table *rtbl)
|
||||
|
||||
dumpspec->size = specsym->size;
|
||||
|
||||
cpp_id = NFP_CPP_ISLAND_ID(specsym->target, NFP_CPP_ACTION_RW, 0,
|
||||
specsym->domain);
|
||||
|
||||
bytes_read = nfp_cpp_read(cpp, cpp_id, specsym->addr, dumpspec->data,
|
||||
specsym->size);
|
||||
bytes_read = nfp_rtsym_read(cpp, specsym, 0, dumpspec->data,
|
||||
specsym->size);
|
||||
if (bytes_read != specsym->size) {
|
||||
vfree(dumpspec);
|
||||
nfp_warn(cpp, "Debug dump specification read failed.\n");
|
||||
@ -644,7 +640,6 @@ nfp_dump_single_rtsym(struct nfp_pf *pf, struct nfp_dumpspec_rtsym *spec,
|
||||
const struct nfp_rtsym *sym;
|
||||
u32 tl_len, key_len;
|
||||
int bytes_read;
|
||||
u32 cpp_id;
|
||||
void *dest;
|
||||
int err;
|
||||
|
||||
@ -683,11 +678,9 @@ nfp_dump_single_rtsym(struct nfp_pf *pf, struct nfp_dumpspec_rtsym *spec,
|
||||
cpp_params.action = NFP_CPP_ACTION_RW;
|
||||
cpp_params.token = 0;
|
||||
cpp_params.island = sym->domain;
|
||||
cpp_id = nfp_get_numeric_cpp_id(&cpp_params);
|
||||
dump_header->cpp.cpp_id = cpp_params;
|
||||
dump_header->cpp.offset = cpu_to_be32(sym->addr);
|
||||
bytes_read = nfp_cpp_read(pf->cpp, cpp_id, sym->addr, dest,
|
||||
sym_size);
|
||||
bytes_read = nfp_rtsym_read(pf->cpp, sym, 0, dest, sym_size);
|
||||
if (bytes_read != sym_size) {
|
||||
if (bytes_read >= 0)
|
||||
bytes_read = -EIO;
|
||||
|
Loading…
Reference in New Issue
Block a user