Skip to content
Permalink
Browse files
net: marvell: prestera: add firmware v4.0 support
Add firmware (FW) version 4.0 support for Marvell Prestera
driver. This FW ABI will be compatible with future Prestera
driver versions and features.

The previous FW support is dropped due to significant changes
in FW ABI, thus this version of Prestera driver will not be
compatible with previous FW versions.

Co-developed-by: Vadym Kochan <vkochan@marvell.com>
Signed-off-by: Vadym Kochan <vkochan@marvell.com>
Signed-off-by: Yevhen Orlov <yevhen.orlov@plvision.eu>
Signed-off-by: Taras Chornyi <tchornyi@marvell.com>
Signed-off-by: Volodymyr Mytnyk <vmytnyk@marvell.com>
  • Loading branch information
Volodymyr Mytnyk authored and intel-lab-lkp committed Oct 15, 2021
1 parent 4008891 commit af0e1a7d7646e639d30d05831aa0a5c4a1b22ff5
Show file tree
Hide file tree
Showing 8 changed files with 640 additions and 458 deletions.
@@ -53,6 +53,8 @@ struct prestera_port_stats {
u64 good_octets_sent;
};

#define PRESTERA_AP_PORT_MAX (10)

struct prestera_port_caps {
u64 supp_link_modes;
u8 supp_fec;
@@ -69,6 +71,40 @@ struct prestera_lag {

struct prestera_flow_block;

struct prestera_port_mac_state {
bool oper;
u32 mode;
u32 speed;
u8 duplex;
u8 fc;
u8 fec;
};

struct prestera_port_phy_state {
u64 lmode_bmap;
struct {
bool pause;
bool asym_pause;
} remote_fc;
u8 mdix;
};

struct prestera_port_mac_config {
bool admin;
u32 mode;
u8 inband;
u32 speed;
u8 duplex;
u8 fec;
};

/* TODO: add another parameters here: modes, etc... */
struct prestera_port_phy_config {
bool admin;
u32 mode;
u8 mdix;
};

struct prestera_port {
struct net_device *dev;
struct prestera_switch *sw;
@@ -91,6 +127,10 @@ struct prestera_port {
struct prestera_port_stats stats;
struct delayed_work caching_dw;
} cached_hw_stats;
struct prestera_port_mac_config cfg_mac;
struct prestera_port_phy_config cfg_phy;
struct prestera_port_mac_state state_mac;
struct prestera_port_phy_state state_phy;
};

struct prestera_device {
@@ -107,7 +147,7 @@ struct prestera_device {
int (*recv_msg)(struct prestera_device *dev, void *msg, size_t size);

/* called by higher layer to send request to the firmware */
int (*send_req)(struct prestera_device *dev, void *in_msg,
int (*send_req)(struct prestera_device *dev, int qid, void *in_msg,
size_t in_size, void *out_msg, size_t out_size,
unsigned int wait);
};
@@ -129,13 +169,28 @@ enum prestera_rxtx_event_id {

enum prestera_port_event_id {
PRESTERA_PORT_EVENT_UNSPEC,
PRESTERA_PORT_EVENT_STATE_CHANGED,
PRESTERA_PORT_EVENT_MAC_STATE_CHANGED,
};

struct prestera_port_event {
u32 port_id;
union {
u32 oper_state;
struct {
u8 oper;
u32 mode;
u32 speed;
u8 duplex;
u8 fc;
u8 fec;
} mac;
struct {
u8 mdix;
u64 lmode_bmap;
struct {
bool pause;
bool asym_pause;
} remote_fc;
} phy;
} data;
};

@@ -223,11 +278,16 @@ void prestera_device_unregister(struct prestera_device *dev);
struct prestera_port *prestera_port_find_by_hwid(struct prestera_switch *sw,
u32 dev_id, u32 hw_id);

int prestera_port_autoneg_set(struct prestera_port *port, bool enable,
u64 adver_link_modes, u8 adver_fec);
int prestera_port_autoneg_set(struct prestera_port *port, u64 link_modes);

struct prestera_port *prestera_find_port(struct prestera_switch *sw, u32 id);

int prestera_port_cfg_mac_read(struct prestera_port *port,
struct prestera_port_mac_config *cfg);

int prestera_port_cfg_mac_write(struct prestera_port *port,
struct prestera_port_mac_config *cfg);

struct prestera_port *prestera_port_dev_lower_find(struct net_device *dev);

int prestera_port_pvid_set(struct prestera_port *port, u16 vid);

0 comments on commit af0e1a7

Please sign in to comment.