Commit e1464db5 authored by Volodymyr Mytnyk's avatar Volodymyr Mytnyk Committed by David S. Miller

net: marvell: prestera: fix hw structure laid out

The prestera FW v4.0 support commit has been merged
accidentally w/o review comments addressed and waiting
for the final patch set to be uploaded. So, fix the remaining
comments related to structure laid out and build issues.
Reported-by: default avatarkernel test robot <lkp@intel.com>
Fixes: bb5dbf2c ("net: marvell: prestera: add firmware v4.0 support")
Signed-off-by: default avatarVolodymyr Mytnyk <vmytnyk@marvell.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e7ea51cd
......@@ -180,45 +180,46 @@ struct prestera_msg_common_resp {
struct prestera_msg_ret ret;
};
union prestera_msg_switch_param {
u8 mac[ETH_ALEN];
__le32 ageing_timeout_ms;
} __packed;
struct prestera_msg_switch_attr_req {
struct prestera_msg_cmd cmd;
__le32 attr;
union prestera_msg_switch_param param;
u8 pad[2];
union {
__le32 ageing_timeout_ms;
struct {
u8 mac[ETH_ALEN];
u8 __pad[2];
};
} param;
};
struct prestera_msg_switch_init_resp {
struct prestera_msg_ret ret;
__le32 port_count;
__le32 mtu_max;
__le32 size_tbl_router_nexthop;
u8 switch_id;
u8 lag_max;
u8 lag_member_max;
__le32 size_tbl_router_nexthop;
} __packed __aligned(4);
};
struct prestera_msg_event_port_param {
union {
struct {
u8 oper;
__le32 mode;
__le32 speed;
u8 oper;
u8 duplex;
u8 fc;
u8 fec;
} __packed mac;
} mac;
struct {
u8 mdix;
__le64 lmode_bmap;
u8 mdix;
u8 fc;
} __packed phy;
} __packed;
} __packed __aligned(4);
u8 __pad[2];
} __packed phy; /* make sure always 12 bytes size */
};
};
struct prestera_msg_port_cap_param {
__le64 link_mode;
......@@ -231,58 +232,61 @@ struct prestera_msg_port_cap_param {
struct prestera_msg_port_flood_param {
u8 type;
u8 enable;
u8 __pad[2];
};
union prestera_msg_port_param {
__le32 mtu;
__le32 speed;
__le32 link_mode;
u8 admin_state;
u8 oper_state;
__le32 mtu;
u8 mac[ETH_ALEN];
u8 accept_frm_type;
__le32 speed;
u8 learning;
u8 flood;
__le32 link_mode;
u8 type;
u8 duplex;
u8 fec;
u8 fc;
union {
struct {
u8 admin:1;
u8 admin;
u8 fc;
u8 ap_enable;
u8 __reserved[5];
union {
struct {
__le32 mode;
u8 inband:1;
__le32 speed;
u8 inband;
u8 duplex;
u8 fec;
u8 fec_supp;
} __packed reg_mode;
} reg_mode;
struct {
__le32 mode;
__le32 speed;
u8 fec;
u8 fec_supp;
} __packed ap_modes[PRESTERA_AP_PORT_MAX];
} __packed;
} __packed mac;
u8 __pad[2];
} ap_modes[PRESTERA_AP_PORT_MAX];
};
} mac;
struct {
u8 admin:1;
u8 adv_enable;
__le64 modes;
__le32 mode;
u8 admin;
u8 adv_enable;
u8 mdix;
} __packed phy;
} __packed link;
u8 __pad;
} phy;
} link;
struct prestera_msg_port_cap_param cap;
struct prestera_msg_port_flood_param flood_ext;
struct prestera_msg_event_port_param link_evt;
} __packed;
};
struct prestera_msg_port_attr_req {
struct prestera_msg_cmd cmd;
......@@ -290,14 +294,12 @@ struct prestera_msg_port_attr_req {
__le32 port;
__le32 dev;
union prestera_msg_port_param param;
} __packed __aligned(4);
};
struct prestera_msg_port_attr_resp {
struct prestera_msg_ret ret;
union prestera_msg_port_param param;
} __packed __aligned(4);
};
struct prestera_msg_port_stats_resp {
struct prestera_msg_ret ret;
......@@ -328,7 +330,7 @@ struct prestera_msg_vlan_req {
struct prestera_msg_fdb_req {
struct prestera_msg_cmd cmd;
u8 dest_type;
__le32 flush_mode;
union {
struct {
__le32 port;
......@@ -336,11 +338,12 @@ struct prestera_msg_fdb_req {
};
__le16 lag_id;
} dest;
u8 mac[ETH_ALEN];
__le16 vid;
u8 dest_type;
u8 dynamic;
__le32 flush_mode;
} __packed __aligned(4);
u8 mac[ETH_ALEN];
u8 __pad[2];
};
struct prestera_msg_bridge_req {
struct prestera_msg_cmd cmd;
......@@ -363,11 +366,12 @@ struct prestera_msg_acl_action {
struct prestera_msg_acl_match {
__le32 type;
__le32 __reserved;
union {
struct {
u8 key;
u8 mask;
} __packed u8;
} u8;
struct {
__le16 key;
__le16 mask;
......@@ -383,7 +387,7 @@ struct prestera_msg_acl_match {
struct {
u8 key[ETH_ALEN];
u8 mask[ETH_ALEN];
} __packed mac;
} mac;
} keymask;
};
......@@ -447,6 +451,7 @@ struct prestera_msg_stp_req {
__le32 dev;
__le16 vid;
u8 state;
u8 __pad;
};
struct prestera_msg_rxtx_req {
......@@ -497,21 +502,21 @@ union prestera_msg_event_fdb_param {
struct prestera_msg_event_fdb {
struct prestera_msg_event id;
u8 dest_type;
__le32 vid;
union {
__le32 port_id;
__le16 lag_id;
} dest;
__le32 vid;
union prestera_msg_event_fdb_param param;
} __packed __aligned(4);
u8 dest_type;
};
static inline void prestera_hw_build_tests(void)
static void prestera_hw_build_tests(void)
{
/* check requests */
BUILD_BUG_ON(sizeof(struct prestera_msg_common_req) != 4);
BUILD_BUG_ON(sizeof(struct prestera_msg_switch_attr_req) != 16);
BUILD_BUG_ON(sizeof(struct prestera_msg_port_attr_req) != 120);
BUILD_BUG_ON(sizeof(struct prestera_msg_port_attr_req) != 144);
BUILD_BUG_ON(sizeof(struct prestera_msg_port_info_req) != 8);
BUILD_BUG_ON(sizeof(struct prestera_msg_vlan_req) != 16);
BUILD_BUG_ON(sizeof(struct prestera_msg_fdb_req) != 28);
......@@ -528,7 +533,7 @@ static inline void prestera_hw_build_tests(void)
/* check responses */
BUILD_BUG_ON(sizeof(struct prestera_msg_common_resp) != 8);
BUILD_BUG_ON(sizeof(struct prestera_msg_switch_init_resp) != 24);
BUILD_BUG_ON(sizeof(struct prestera_msg_port_attr_resp) != 112);
BUILD_BUG_ON(sizeof(struct prestera_msg_port_attr_resp) != 136);
BUILD_BUG_ON(sizeof(struct prestera_msg_port_stats_resp) != 248);
BUILD_BUG_ON(sizeof(struct prestera_msg_port_info_resp) != 20);
BUILD_BUG_ON(sizeof(struct prestera_msg_bridge_resp) != 12);
......@@ -561,9 +566,9 @@ static int __prestera_cmd_ret(struct prestera_switch *sw,
if (err)
return err;
if (__le32_to_cpu(ret->cmd.type) != PRESTERA_CMD_TYPE_ACK)
if (ret->cmd.type != __cpu_to_le32(PRESTERA_CMD_TYPE_ACK))
return -EBADE;
if (__le32_to_cpu(ret->status) != PRESTERA_CMD_ACK_OK)
if (ret->status != __cpu_to_le32(PRESTERA_CMD_ACK_OK))
return -EINVAL;
return 0;
......
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