Skip to content

Commit

Permalink
octeon_ep: function id in link info and stats mailbox commands
Browse files Browse the repository at this point in the history
Update control mailbox API to include function id in get stats and
link info.

Signed-off-by: Veerasenareddy Burru <vburru@marvell.com>
Signed-off-by: Abhijit Ayarekar <aayarekar@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Veerasenareddy Burru authored and David S. Miller committed Mar 27, 2023
1 parent baa9879 commit 0718693
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 31 deletions.
33 changes: 15 additions & 18 deletions drivers/net/ethernet/marvell/octeon_ep/octep_ctrl_net.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ static const u32 mtu_sz = sizeof(struct octep_ctrl_net_h2f_req_cmd_mtu);
static const u32 mac_sz = sizeof(struct octep_ctrl_net_h2f_req_cmd_mac);
static const u32 state_sz = sizeof(struct octep_ctrl_net_h2f_req_cmd_state);
static const u32 link_info_sz = sizeof(struct octep_ctrl_net_link_info);
static const u32 get_stats_sz = sizeof(struct octep_ctrl_net_h2f_req_cmd_get_stats);
static atomic_t ctrl_net_msg_id;

static void init_send_req(struct octep_ctrl_mbox_msg *msg, void *buf,
Expand Down Expand Up @@ -188,31 +187,29 @@ int octep_ctrl_net_set_mtu(struct octep_device *oct, int vfid, int mtu,
return octep_send_mbox_req(oct, &d, wait_for_response);
}

int octep_ctrl_net_get_if_stats(struct octep_device *oct, int vfid)
int octep_ctrl_net_get_if_stats(struct octep_device *oct, int vfid,
struct octep_iface_rx_stats *rx_stats,
struct octep_iface_tx_stats *tx_stats)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
void __iomem *iface_rx_stats;
void __iomem *iface_tx_stats;
struct octep_ctrl_net_h2f_resp *resp;
int err;

init_send_req(&d.msg, req, get_stats_sz, vfid);
init_send_req(&d.msg, req, 0, vfid);
req->hdr.s.cmd = OCTEP_CTRL_NET_H2F_CMD_GET_IF_STATS;
req->get_stats.offset = oct->ctrl_mbox_ifstats_offset;
err = octep_send_mbox_req(oct, &d, true);
if (err < 0)
return err;

iface_rx_stats = oct->ctrl_mbox.barmem + oct->ctrl_mbox_ifstats_offset;
iface_tx_stats = oct->ctrl_mbox.barmem + oct->ctrl_mbox_ifstats_offset +
sizeof(struct octep_iface_rx_stats);
memcpy_fromio(&oct->iface_rx_stats, iface_rx_stats, sizeof(struct octep_iface_rx_stats));
memcpy_fromio(&oct->iface_tx_stats, iface_tx_stats, sizeof(struct octep_iface_tx_stats));

resp = &d.data.resp;
memcpy(rx_stats, &resp->if_stats.rx_stats, sizeof(struct octep_iface_rx_stats));
memcpy(tx_stats, &resp->if_stats.tx_stats, sizeof(struct octep_iface_tx_stats));
return 0;
}

int octep_ctrl_net_get_link_info(struct octep_device *oct, int vfid)
int octep_ctrl_net_get_link_info(struct octep_device *oct, int vfid,
struct octep_iface_link_info *link_info)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
Expand All @@ -227,11 +224,11 @@ int octep_ctrl_net_get_link_info(struct octep_device *oct, int vfid)
return err;

resp = &d.data.resp;
oct->link_info.supported_modes = resp->link_info.supported_modes;
oct->link_info.advertised_modes = resp->link_info.advertised_modes;
oct->link_info.autoneg = resp->link_info.autoneg;
oct->link_info.pause = resp->link_info.pause;
oct->link_info.speed = resp->link_info.speed;
link_info->supported_modes = resp->link_info.supported_modes;
link_info->advertised_modes = resp->link_info.advertised_modes;
link_info->autoneg = resp->link_info.autoneg;
link_info->pause = resp->link_info.pause;
link_info->speed = resp->link_info.speed;

return 0;
}
Expand Down
24 changes: 15 additions & 9 deletions drivers/net/ethernet/marvell/octeon_ep/octep_ctrl_net.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,6 @@ struct octep_ctrl_net_h2f_req_cmd_mac {
u8 addr[ETH_ALEN];
};

/* get if_stats, xstats, q_stats request */
struct octep_ctrl_net_h2f_req_cmd_get_stats {
/* offset into barmem where fw should copy over stats */
u32 offset;
};

/* get/set link state, rx state */
struct octep_ctrl_net_h2f_req_cmd_state {
/* enum octep_ctrl_net_cmd */
Expand Down Expand Up @@ -119,7 +113,6 @@ struct octep_ctrl_net_h2f_req {
union {
struct octep_ctrl_net_h2f_req_cmd_mtu mtu;
struct octep_ctrl_net_h2f_req_cmd_mac mac;
struct octep_ctrl_net_h2f_req_cmd_get_stats get_stats;
struct octep_ctrl_net_h2f_req_cmd_state link;
struct octep_ctrl_net_h2f_req_cmd_state rx;
struct octep_ctrl_net_h2f_req_cmd_link_info link_info;
Expand Down Expand Up @@ -152,6 +145,12 @@ struct octep_ctrl_net_h2f_resp_cmd_mac {
u8 addr[ETH_ALEN];
};

/* get if_stats, xstats, q_stats request */
struct octep_ctrl_net_h2f_resp_cmd_get_stats {
struct octep_iface_rx_stats rx_stats;
struct octep_iface_tx_stats tx_stats;
};

/* get link state, rx state response */
struct octep_ctrl_net_h2f_resp_cmd_state {
/* enum octep_ctrl_net_state */
Expand All @@ -164,6 +163,7 @@ struct octep_ctrl_net_h2f_resp {
union {
struct octep_ctrl_net_h2f_resp_cmd_mtu mtu;
struct octep_ctrl_net_h2f_resp_cmd_mac mac;
struct octep_ctrl_net_h2f_resp_cmd_get_stats if_stats;
struct octep_ctrl_net_h2f_resp_cmd_state link;
struct octep_ctrl_net_h2f_resp_cmd_state rx;
struct octep_ctrl_net_link_info link_info;
Expand Down Expand Up @@ -286,19 +286,25 @@ int octep_ctrl_net_set_mtu(struct octep_device *oct, int vfid, int mtu,
*
* @param oct: non-null pointer to struct octep_device.
* @param vfid: Index of virtual function.
* @param rx_stats: non-null pointer struct octep_iface_rx_stats.
* @param tx_stats: non-null pointer struct octep_iface_tx_stats.
*
* return value: 0 on success, -errno on failure.
*/
int octep_ctrl_net_get_if_stats(struct octep_device *oct, int vfid);
int octep_ctrl_net_get_if_stats(struct octep_device *oct, int vfid,
struct octep_iface_rx_stats *rx_stats,
struct octep_iface_tx_stats *tx_stats);

/** Get link info from firmware.
*
* @param oct: non-null pointer to struct octep_device.
* @param vfid: Index of virtual function.
* @param link_info: non-null pointer to struct octep_iface_link_info.
*
* return value: 0 on success, -errno on failure.
*/
int octep_ctrl_net_get_link_info(struct octep_device *oct, int vfid);
int octep_ctrl_net_get_link_info(struct octep_device *oct, int vfid,
struct octep_iface_link_info *link_info);

/** Set link info in firmware.
*
Expand Down
9 changes: 6 additions & 3 deletions drivers/net/ethernet/marvell/octeon_ep/octep_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,12 @@ octep_get_ethtool_stats(struct net_device *netdev,
rx_packets = 0;
rx_bytes = 0;

octep_ctrl_net_get_if_stats(oct, OCTEP_CTRL_NET_INVALID_VFID);
iface_tx_stats = &oct->iface_tx_stats;
iface_rx_stats = &oct->iface_rx_stats;
octep_ctrl_net_get_if_stats(oct,
OCTEP_CTRL_NET_INVALID_VFID,
iface_rx_stats,
iface_tx_stats);

for (q = 0; q < oct->num_oqs; q++) {
struct octep_iq *iq = oct->iq[q];
Expand Down Expand Up @@ -283,11 +286,11 @@ static int octep_get_link_ksettings(struct net_device *netdev,
ethtool_link_ksettings_zero_link_mode(cmd, supported);
ethtool_link_ksettings_zero_link_mode(cmd, advertising);

octep_ctrl_net_get_link_info(oct, OCTEP_CTRL_NET_INVALID_VFID);
link_info = &oct->link_info;
octep_ctrl_net_get_link_info(oct, OCTEP_CTRL_NET_INVALID_VFID, link_info);

advertised_modes = oct->link_info.advertised_modes;
supported_modes = oct->link_info.supported_modes;
link_info = &oct->link_info;

OCTEP_SET_ETHTOOL_LINK_MODES_BITMAP(supported_modes, cmd, supported);
OCTEP_SET_ETHTOOL_LINK_MODES_BITMAP(advertised_modes, cmd, advertising);
Expand Down
5 changes: 4 additions & 1 deletion drivers/net/ethernet/marvell/octeon_ep/octep_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -763,7 +763,10 @@ static void octep_get_stats64(struct net_device *netdev,
int q;

if (netif_running(netdev))
octep_ctrl_net_get_if_stats(oct, OCTEP_CTRL_NET_INVALID_VFID);
octep_ctrl_net_get_if_stats(oct,
OCTEP_CTRL_NET_INVALID_VFID,
&oct->iface_rx_stats,
&oct->iface_tx_stats);

tx_packets = 0;
tx_bytes = 0;
Expand Down

0 comments on commit 0718693

Please sign in to comment.