Commit bab6c864 authored by David S. Miller's avatar David S. Miller

Merge branch 'octeon_ep-max-rx'

Shinas Rasheed says:

====================
Get max rx packet length and solve

Patchsets which resolve observed style issues in control net
source files, and also implements get mtu control net api
to fetch max mtu value from firmware

Changes:
V2:
  - Introduced a patch to resolve style issues as mentioned in V1
  - Removed OCTEP_MAX_MTU macro, as it is redundant.

V1: https://lore.kernel.org/all/20231121191224.2489474-1-srasheed@marvell.com/
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 1ad04b79 0a5f8534
......@@ -45,8 +45,6 @@
/* Minimum MTU supported by Octeon network interface */
#define OCTEP_MIN_MTU ETH_MIN_MTU
/* Maximum MTU supported by Octeon interface*/
#define OCTEP_MAX_MTU (10000 - (ETH_HLEN + ETH_FCS_LEN))
/* Default MTU */
#define OCTEP_DEFAULT_MTU 1500
......
......@@ -122,7 +122,7 @@ int octep_ctrl_net_init(struct octep_device *oct)
int octep_ctrl_net_get_link_status(struct octep_device *oct, int vfid)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_wait_data d = {};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
int err;
......@@ -139,7 +139,7 @@ int octep_ctrl_net_get_link_status(struct octep_device *oct, int vfid)
int octep_ctrl_net_set_link_status(struct octep_device *oct, int vfid, bool up,
bool wait_for_response)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_wait_data d = {};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
init_send_req(&d.msg, req, state_sz, vfid);
......@@ -154,7 +154,7 @@ int octep_ctrl_net_set_link_status(struct octep_device *oct, int vfid, bool up,
int octep_ctrl_net_set_rx_state(struct octep_device *oct, int vfid, bool up,
bool wait_for_response)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_wait_data d = {};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
init_send_req(&d.msg, req, state_sz, vfid);
......@@ -168,7 +168,7 @@ int octep_ctrl_net_set_rx_state(struct octep_device *oct, int vfid, bool up,
int octep_ctrl_net_get_mac_addr(struct octep_device *oct, int vfid, u8 *addr)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_wait_data d = {};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
int err;
......@@ -187,7 +187,7 @@ int octep_ctrl_net_get_mac_addr(struct octep_device *oct, int vfid, u8 *addr)
int octep_ctrl_net_set_mac_addr(struct octep_device *oct, int vfid, u8 *addr,
bool wait_for_response)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_wait_data d = {};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
init_send_req(&d.msg, req, mac_sz, vfid);
......@@ -198,10 +198,28 @@ int octep_ctrl_net_set_mac_addr(struct octep_device *oct, int vfid, u8 *addr,
return octep_send_mbox_req(oct, &d, wait_for_response);
}
int octep_ctrl_net_get_mtu(struct octep_device *oct, int vfid)
{
struct octep_ctrl_net_wait_data d = {};
struct octep_ctrl_net_h2f_req *req;
int err;
req = &d.data.req;
init_send_req(&d.msg, req, mtu_sz, vfid);
req->hdr.s.cmd = OCTEP_CTRL_NET_H2F_CMD_MTU;
req->mtu.cmd = OCTEP_CTRL_NET_CMD_GET;
err = octep_send_mbox_req(oct, &d, true);
if (err < 0)
return err;
return d.data.resp.mtu.val;
}
int octep_ctrl_net_set_mtu(struct octep_device *oct, int vfid, int mtu,
bool wait_for_response)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_wait_data d = {};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
init_send_req(&d.msg, req, mtu_sz, vfid);
......@@ -216,7 +234,7 @@ 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_wait_data d = {};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
struct octep_ctrl_net_h2f_resp *resp;
int err;
......@@ -236,7 +254,7 @@ int octep_ctrl_net_get_if_stats(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_wait_data d = {};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
struct octep_ctrl_net_h2f_resp *resp;
int err;
......@@ -262,7 +280,7 @@ int octep_ctrl_net_set_link_info(struct octep_device *oct, int vfid,
struct octep_iface_link_info *link_info,
bool wait_for_response)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_wait_data d = {};
struct octep_ctrl_net_h2f_req *req = &d.data.req;
init_send_req(&d.msg, req, link_info_sz, vfid);
......@@ -331,8 +349,8 @@ static int process_mbox_notify(struct octep_device *oct,
void octep_ctrl_net_recv_fw_messages(struct octep_device *oct)
{
static u16 msg_sz = sizeof(union octep_ctrl_net_max_data);
union octep_ctrl_net_max_data data = {0};
struct octep_ctrl_mbox_msg msg = {0};
union octep_ctrl_net_max_data data = {};
struct octep_ctrl_mbox_msg msg = {};
int ret;
msg.hdr.s.sz = msg_sz;
......@@ -356,7 +374,7 @@ void octep_ctrl_net_recv_fw_messages(struct octep_device *oct)
int octep_ctrl_net_get_info(struct octep_device *oct, int vfid,
struct octep_fw_info *info)
{
struct octep_ctrl_net_wait_data d = {0};
struct octep_ctrl_net_wait_data d = {};
struct octep_ctrl_net_h2f_resp *resp;
struct octep_ctrl_net_h2f_req *req;
int err;
......
......@@ -218,87 +218,105 @@ struct octep_ctrl_net_wait_data {
} data;
};
/** Initialize data for ctrl net.
/**
* octep_ctrl_net_init() - Initialize data for ctrl net.
*
* @param oct: non-null pointer to struct octep_device.
* @oct: non-null pointer to struct octep_device.
*
* return value: 0 on success, -errno on error.
*/
int octep_ctrl_net_init(struct octep_device *oct);
/** Get link status from firmware.
/**
* octep_ctrl_net_get_link_status() - Get link status from firmware.
*
* @param oct: non-null pointer to struct octep_device.
* @param vfid: Index of virtual function.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
*
* return value: link status 0=down, 1=up.
*/
int octep_ctrl_net_get_link_status(struct octep_device *oct, int vfid);
/** Set link status in firmware.
/**
* octep_ctrl_net_set_link_status() - Set link status in firmware.
*
* @param oct: non-null pointer to struct octep_device.
* @param vfid: Index of virtual function.
* @param up: boolean status.
* @param wait_for_response: poll for response.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
* @up: boolean status.
* @wait_for_response: poll for response.
*
* return value: 0 on success, -errno on failure
*/
int octep_ctrl_net_set_link_status(struct octep_device *oct, int vfid, bool up,
bool wait_for_response);
/** Set rx state in firmware.
/**
* octep_ctrl_net_set_rx_state() - Set rx state in firmware.
*
* @param oct: non-null pointer to struct octep_device.
* @param vfid: Index of virtual function.
* @param up: boolean status.
* @param wait_for_response: poll for response.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
* @up: boolean status.
* @wait_for_response: poll for response.
*
* return value: 0 on success, -errno on failure.
*/
int octep_ctrl_net_set_rx_state(struct octep_device *oct, int vfid, bool up,
bool wait_for_response);
/** Get mac address from firmware.
/**
* octep_ctrl_net_get_mac_addr() - Get mac address from firmware.
*
* @param oct: non-null pointer to struct octep_device.
* @param vfid: Index of virtual function.
* @param addr: non-null pointer to mac address.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
* @addr: non-null pointer to mac address.
*
* return value: 0 on success, -errno on failure.
*/
int octep_ctrl_net_get_mac_addr(struct octep_device *oct, int vfid, u8 *addr);
/** Set mac address in firmware.
/**
* octep_ctrl_net_set_mac_addr() - Set mac address in firmware.
*
* @param oct: non-null pointer to struct octep_device.
* @param vfid: Index of virtual function.
* @param addr: non-null pointer to mac address.
* @param wait_for_response: poll for response.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
* @addr: non-null pointer to mac address.
* @wait_for_response: poll for response.
*
* return value: 0 on success, -errno on failure.
*/
int octep_ctrl_net_set_mac_addr(struct octep_device *oct, int vfid, u8 *addr,
bool wait_for_response);
/** Set mtu in firmware.
/**
* octep_ctrl_net_get_mtu() - Get max MTU from firmware.
*
* @param oct: non-null pointer to struct octep_device.
* @param vfid: Index of virtual function.
* @param mtu: mtu.
* @param wait_for_response: poll for response.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
*
* return value: mtu on success, -errno on failure.
*/
int octep_ctrl_net_get_mtu(struct octep_device *oct, int vfid);
/**
* octep_ctrl_net_set_mtu() - Set mtu in firmware.
*
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
* @mtu: mtu.
* @wait_for_response: poll for response.
*
* return value: 0 on success, -errno on failure.
*/
int octep_ctrl_net_set_mtu(struct octep_device *oct, int vfid, int mtu,
bool wait_for_response);
/** Get interface statistics from firmware.
/**
* octep_ctrl_net_get_if_stats() - Get interface statistics from firmware.
*
* @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.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
* @rx_stats: non-null pointer struct octep_iface_rx_stats.
* @tx_stats: non-null pointer struct octep_iface_tx_stats.
*
* return value: 0 on success, -errno on failure.
*/
......@@ -306,23 +324,25 @@ 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.
/**
* octep_ctrl_net_get_link_info() - 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.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
* @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,
struct octep_iface_link_info *link_info);
/** Set link info in firmware.
/**
* octep_ctrl_net_set_link_info() - Set link info in 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.
* @param wait_for_response: poll for response.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
* @link_info: non-null pointer to struct octep_iface_link_info.
* @wait_for_response: poll for response.
*
* return value: 0 on success, -errno on failure.
*/
......@@ -331,26 +351,29 @@ int octep_ctrl_net_set_link_info(struct octep_device *oct,
struct octep_iface_link_info *link_info,
bool wait_for_response);
/** Poll for firmware messages and process them.
/**
* octep_ctrl_net_recv_fw_messages() - Poll for firmware messages and process them.
*
* @param oct: non-null pointer to struct octep_device.
* @oct: non-null pointer to struct octep_device.
*/
void octep_ctrl_net_recv_fw_messages(struct octep_device *oct);
/** Get info from firmware.
/**
* octep_ctrl_net_get_info() - Get info from firmware.
*
* @param oct: non-null pointer to struct octep_device.
* @param vfid: Index of virtual function.
* @param info: non-null pointer to struct octep_fw_info.
* @oct: non-null pointer to struct octep_device.
* @vfid: Index of virtual function.
* @info: non-null pointer to struct octep_fw_info.
*
* return value: 0 on success, -errno on failure.
*/
int octep_ctrl_net_get_info(struct octep_device *oct, int vfid,
struct octep_fw_info *info);
/** Uninitialize data for ctrl net.
/**
* octep_ctrl_net_uninit() - Uninitialize data for ctrl net.
*
* @param oct: non-null pointer to struct octep_device.
* @oct: non-null pointer to struct octep_device.
*
* return value: 0 on success, -errno on error.
*/
......
......@@ -1307,6 +1307,7 @@ static int octep_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
struct octep_device *octep_dev = NULL;
struct net_device *netdev;
int max_rx_pktlen;
int err;
err = pci_enable_device(pdev);
......@@ -1377,8 +1378,15 @@ static int octep_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
netdev->hw_features = NETIF_F_SG;
netdev->features |= netdev->hw_features;
max_rx_pktlen = octep_ctrl_net_get_mtu(octep_dev, OCTEP_CTRL_NET_INVALID_VFID);
if (max_rx_pktlen < 0) {
dev_err(&octep_dev->pdev->dev,
"Failed to get max receive packet size; err = %d\n", max_rx_pktlen);
goto register_dev_err;
}
netdev->min_mtu = OCTEP_MIN_MTU;
netdev->max_mtu = OCTEP_MAX_MTU;
netdev->max_mtu = max_rx_pktlen - (ETH_HLEN + ETH_FCS_LEN);
netdev->mtu = OCTEP_DEFAULT_MTU;
err = octep_ctrl_net_get_mac_addr(octep_dev, OCTEP_CTRL_NET_INVALID_VFID,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment