mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
net: enetc: add support for the "Update" operation to buffer pool table
The buffer pool table contains buffer pool configuration and operational information. Each entry corresponds to a buffer pool. The Entry ID value represents the buffer pool ID to access. The buffer pool table is a static bounded index table, buffer pools are always present and enabled. It only supports Update and Query operations, This patch only adds ntmp_bpt_update_entry() helper to support updating the specified entry of the buffer pool table. Query action to the table will be added in the future. Signed-off-by: Wei Fang <wei.fang@nxp.com> Link: https://patch.msgid.link/20260518082506.1318236-7-wei.fang@nxp.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
d0ac4d4bd2
commit
cb4d95d79d
|
|
@ -23,11 +23,15 @@
|
|||
#define NTMP_RSST_ID 3
|
||||
#define NTMP_FDBT_ID 15
|
||||
#define NTMP_VFT_ID 18
|
||||
#define NTMP_BPT_ID 41
|
||||
|
||||
/* Generic Update Actions for most tables */
|
||||
#define NTMP_GEN_UA_CFGEU BIT(0)
|
||||
#define NTMP_GEN_UA_STSEU BIT(1)
|
||||
|
||||
/* Specific Update Actions for some tables */
|
||||
#define BPT_UA_BPSEU BIT(1)
|
||||
|
||||
/* Query Action: 0: Full query. 1: Query entry ID, the fields after entry
|
||||
* ID are not returned.
|
||||
*/
|
||||
|
|
@ -271,6 +275,8 @@ static const char *ntmp_table_name(int tbl_id)
|
|||
return "FDB Table";
|
||||
case NTMP_VFT_ID:
|
||||
return "VLAN Filter Table";
|
||||
case NTMP_BPT_ID:
|
||||
return "Buffer Pool Table";
|
||||
default:
|
||||
return "Unknown Table";
|
||||
}
|
||||
|
|
@ -749,5 +755,42 @@ int ntmp_vft_add_entry(struct ntmp_user *user, u16 vid,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(ntmp_vft_add_entry);
|
||||
|
||||
int ntmp_bpt_update_entry(struct ntmp_user *user, u32 entry_id,
|
||||
const struct bpt_cfge_data *cfge)
|
||||
{
|
||||
struct bpt_req_update *req;
|
||||
struct netc_swcbd swcbd;
|
||||
struct netc_cbdr *cbdr;
|
||||
union netc_cbd cbd;
|
||||
int err;
|
||||
|
||||
swcbd.size = sizeof(*req);
|
||||
err = ntmp_alloc_data_mem(user->dev, &swcbd, (void **)&req);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* Note that BPT_UA_BPSEU is used to update the BPSE_DATA of the entry,
|
||||
* which is maintained by the hardware. The BPSE_DATA is not present in
|
||||
* the request data for 'Update' operation.
|
||||
*/
|
||||
ntmp_fill_crd_eid(&req->rbe, user->tbl.bpt_ver, 0,
|
||||
NTMP_GEN_UA_CFGEU | BPT_UA_BPSEU, entry_id);
|
||||
req->cfge = *cfge;
|
||||
ntmp_fill_request_hdr(&cbd, swcbd.dma, NTMP_LEN(swcbd.size, 0),
|
||||
NTMP_BPT_ID, NTMP_CMD_UPDATE, NTMP_AM_ENTRY_ID);
|
||||
|
||||
ntmp_select_and_lock_cbdr(user, &cbdr);
|
||||
err = netc_xmit_ntmp_cmd(cbdr, &cbd, &swcbd);
|
||||
if (err)
|
||||
dev_err(user->dev,
|
||||
"Failed to update %s entry 0x%x, err: %pe\n",
|
||||
ntmp_table_name(NTMP_BPT_ID), entry_id, ERR_PTR(err));
|
||||
|
||||
ntmp_unlock_cbdr(cbdr);
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ntmp_bpt_update_entry);
|
||||
|
||||
MODULE_DESCRIPTION("NXP NETC Library");
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
|
|
|
|||
|
|
@ -175,4 +175,10 @@ struct vft_req_ua {
|
|||
struct vft_cfge_data cfge;
|
||||
};
|
||||
|
||||
/* Buffer Pool Table Request Data Buffer Format of Update action */
|
||||
struct bpt_req_update {
|
||||
struct ntmp_req_by_eid rbe;
|
||||
struct bpt_cfge_data cfge;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ struct netc_tbl_vers {
|
|||
u8 rsst_ver;
|
||||
u8 fdbt_ver;
|
||||
u8 vft_ver;
|
||||
u8 bpt_ver;
|
||||
};
|
||||
|
||||
struct netc_swcbd {
|
||||
|
|
@ -123,6 +124,28 @@ struct vft_cfge_data {
|
|||
__le32 et_eid;
|
||||
};
|
||||
|
||||
struct bpt_bpse_data {
|
||||
__le32 amount_used;
|
||||
__le32 amount_used_hwm;
|
||||
u8 bpd_fc_state;
|
||||
#define BPT_FC_STATE BIT(0)
|
||||
#define BPT_BPD BIT(1)
|
||||
} __packed;
|
||||
|
||||
struct bpt_cfge_data {
|
||||
u8 fccfg_sbpen;
|
||||
#define BPT_FC_CFG GENMASK(2, 1)
|
||||
#define BPT_FC_CFG_EN_BPFC 1
|
||||
u8 pfc_vector;
|
||||
__le16 max_thresh;
|
||||
__le16 fc_on_thresh;
|
||||
__le16 fc_off_thresh;
|
||||
__le16 sbp_thresh;
|
||||
__le16 resv;
|
||||
__le32 sbp_eid;
|
||||
__le32 fc_ports;
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_NXP_NETC_LIB)
|
||||
int ntmp_init_cbdr(struct netc_cbdr *cbdr, struct device *dev,
|
||||
const struct netc_cbdr_regs *regs);
|
||||
|
|
@ -149,6 +172,8 @@ int ntmp_fdbt_search_port_entry(struct ntmp_user *user, int port,
|
|||
struct fdbt_entry_data *entry);
|
||||
int ntmp_vft_add_entry(struct ntmp_user *user, u16 vid,
|
||||
const struct vft_cfge_data *cfge);
|
||||
int ntmp_bpt_update_entry(struct ntmp_user *user, u32 entry_id,
|
||||
const struct bpt_cfge_data *cfge);
|
||||
#else
|
||||
static inline int ntmp_init_cbdr(struct netc_cbdr *cbdr, struct device *dev,
|
||||
const struct netc_cbdr_regs *regs)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user