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,109 +180,113 @@ struct prestera_msg_common_resp { ...@@ -180,109 +180,113 @@ struct prestera_msg_common_resp {
struct prestera_msg_ret ret; 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_switch_attr_req {
struct prestera_msg_cmd cmd; struct prestera_msg_cmd cmd;
__le32 attr; __le32 attr;
union prestera_msg_switch_param param; union {
u8 pad[2]; __le32 ageing_timeout_ms;
struct {
u8 mac[ETH_ALEN];
u8 __pad[2];
};
} param;
}; };
struct prestera_msg_switch_init_resp { struct prestera_msg_switch_init_resp {
struct prestera_msg_ret ret; struct prestera_msg_ret ret;
__le32 port_count; __le32 port_count;
__le32 mtu_max; __le32 mtu_max;
u8 switch_id;
u8 lag_max;
u8 lag_member_max;
__le32 size_tbl_router_nexthop; __le32 size_tbl_router_nexthop;
} __packed __aligned(4); u8 switch_id;
u8 lag_max;
u8 lag_member_max;
};
struct prestera_msg_event_port_param { struct prestera_msg_event_port_param {
union { union {
struct { struct {
u8 oper;
__le32 mode; __le32 mode;
__le32 speed; __le32 speed;
u8 oper;
u8 duplex; u8 duplex;
u8 fc; u8 fc;
u8 fec; u8 fec;
} __packed mac; } mac;
struct { struct {
u8 mdix;
__le64 lmode_bmap; __le64 lmode_bmap;
u8 mdix;
u8 fc; u8 fc;
} __packed phy; u8 __pad[2];
} __packed; } __packed phy; /* make sure always 12 bytes size */
} __packed __aligned(4); };
};
struct prestera_msg_port_cap_param { struct prestera_msg_port_cap_param {
__le64 link_mode; __le64 link_mode;
u8 type; u8 type;
u8 fec; u8 fec;
u8 fc; u8 fc;
u8 transceiver; u8 transceiver;
}; };
struct prestera_msg_port_flood_param { struct prestera_msg_port_flood_param {
u8 type; u8 type;
u8 enable; u8 enable;
u8 __pad[2];
}; };
union prestera_msg_port_param { union prestera_msg_port_param {
__le32 mtu;
__le32 speed;
__le32 link_mode;
u8 admin_state; u8 admin_state;
u8 oper_state; u8 oper_state;
__le32 mtu;
u8 mac[ETH_ALEN]; u8 mac[ETH_ALEN];
u8 accept_frm_type; u8 accept_frm_type;
__le32 speed;
u8 learning; u8 learning;
u8 flood; u8 flood;
__le32 link_mode;
u8 type; u8 type;
u8 duplex; u8 duplex;
u8 fec; u8 fec;
u8 fc; u8 fc;
union { union {
struct { struct {
u8 admin:1; u8 admin;
u8 fc; u8 fc;
u8 ap_enable; u8 ap_enable;
u8 __reserved[5];
union { union {
struct { struct {
__le32 mode; __le32 mode;
u8 inband:1;
__le32 speed; __le32 speed;
u8 duplex; u8 inband;
u8 fec; u8 duplex;
u8 fec_supp; u8 fec;
} __packed reg_mode; u8 fec_supp;
} reg_mode;
struct { struct {
__le32 mode; __le32 mode;
__le32 speed; __le32 speed;
u8 fec; u8 fec;
u8 fec_supp; u8 fec_supp;
} __packed ap_modes[PRESTERA_AP_PORT_MAX]; u8 __pad[2];
} __packed; } ap_modes[PRESTERA_AP_PORT_MAX];
} __packed mac; };
} mac;
struct { struct {
u8 admin:1;
u8 adv_enable;
__le64 modes; __le64 modes;
__le32 mode; __le32 mode;
u8 admin;
u8 adv_enable;
u8 mdix; u8 mdix;
} __packed phy; u8 __pad;
} __packed link; } phy;
} link;
struct prestera_msg_port_cap_param cap; struct prestera_msg_port_cap_param cap;
struct prestera_msg_port_flood_param flood_ext; struct prestera_msg_port_flood_param flood_ext;
struct prestera_msg_event_port_param link_evt; struct prestera_msg_event_port_param link_evt;
} __packed; };
struct prestera_msg_port_attr_req { struct prestera_msg_port_attr_req {
struct prestera_msg_cmd cmd; struct prestera_msg_cmd cmd;
...@@ -290,14 +294,12 @@ struct prestera_msg_port_attr_req { ...@@ -290,14 +294,12 @@ struct prestera_msg_port_attr_req {
__le32 port; __le32 port;
__le32 dev; __le32 dev;
union prestera_msg_port_param param; union prestera_msg_port_param param;
} __packed __aligned(4); };
struct prestera_msg_port_attr_resp { struct prestera_msg_port_attr_resp {
struct prestera_msg_ret ret; struct prestera_msg_ret ret;
union prestera_msg_port_param param; union prestera_msg_port_param param;
} __packed __aligned(4); };
struct prestera_msg_port_stats_resp { struct prestera_msg_port_stats_resp {
struct prestera_msg_ret ret; struct prestera_msg_ret ret;
...@@ -322,13 +324,13 @@ struct prestera_msg_vlan_req { ...@@ -322,13 +324,13 @@ struct prestera_msg_vlan_req {
__le32 port; __le32 port;
__le32 dev; __le32 dev;
__le16 vid; __le16 vid;
u8 is_member; u8 is_member;
u8 is_tagged; u8 is_tagged;
}; };
struct prestera_msg_fdb_req { struct prestera_msg_fdb_req {
struct prestera_msg_cmd cmd; struct prestera_msg_cmd cmd;
u8 dest_type; __le32 flush_mode;
union { union {
struct { struct {
__le32 port; __le32 port;
...@@ -336,11 +338,12 @@ struct prestera_msg_fdb_req { ...@@ -336,11 +338,12 @@ struct prestera_msg_fdb_req {
}; };
__le16 lag_id; __le16 lag_id;
} dest; } dest;
u8 mac[ETH_ALEN];
__le16 vid; __le16 vid;
u8 dynamic; u8 dest_type;
__le32 flush_mode; u8 dynamic;
} __packed __aligned(4); u8 mac[ETH_ALEN];
u8 __pad[2];
};
struct prestera_msg_bridge_req { struct prestera_msg_bridge_req {
struct prestera_msg_cmd cmd; struct prestera_msg_cmd cmd;
...@@ -363,11 +366,12 @@ struct prestera_msg_acl_action { ...@@ -363,11 +366,12 @@ struct prestera_msg_acl_action {
struct prestera_msg_acl_match { struct prestera_msg_acl_match {
__le32 type; __le32 type;
__le32 __reserved;
union { union {
struct { struct {
u8 key; u8 key;
u8 mask; u8 mask;
} __packed u8; } u8;
struct { struct {
__le16 key; __le16 key;
__le16 mask; __le16 mask;
...@@ -383,7 +387,7 @@ struct prestera_msg_acl_match { ...@@ -383,7 +387,7 @@ struct prestera_msg_acl_match {
struct { struct {
u8 key[ETH_ALEN]; u8 key[ETH_ALEN];
u8 mask[ETH_ALEN]; u8 mask[ETH_ALEN];
} __packed mac; } mac;
} keymask; } keymask;
}; };
...@@ -446,7 +450,8 @@ struct prestera_msg_stp_req { ...@@ -446,7 +450,8 @@ struct prestera_msg_stp_req {
__le32 port; __le32 port;
__le32 dev; __le32 dev;
__le16 vid; __le16 vid;
u8 state; u8 state;
u8 __pad;
}; };
struct prestera_msg_rxtx_req { struct prestera_msg_rxtx_req {
...@@ -497,21 +502,21 @@ union prestera_msg_event_fdb_param { ...@@ -497,21 +502,21 @@ union prestera_msg_event_fdb_param {
struct prestera_msg_event_fdb { struct prestera_msg_event_fdb {
struct prestera_msg_event id; struct prestera_msg_event id;
u8 dest_type; __le32 vid;
union { union {
__le32 port_id; __le32 port_id;
__le16 lag_id; __le16 lag_id;
} dest; } dest;
__le32 vid;
union prestera_msg_event_fdb_param param; 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 */ /* check requests */
BUILD_BUG_ON(sizeof(struct prestera_msg_common_req) != 4); 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_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_port_info_req) != 8);
BUILD_BUG_ON(sizeof(struct prestera_msg_vlan_req) != 16); BUILD_BUG_ON(sizeof(struct prestera_msg_vlan_req) != 16);
BUILD_BUG_ON(sizeof(struct prestera_msg_fdb_req) != 28); BUILD_BUG_ON(sizeof(struct prestera_msg_fdb_req) != 28);
...@@ -528,7 +533,7 @@ static inline void prestera_hw_build_tests(void) ...@@ -528,7 +533,7 @@ static inline void prestera_hw_build_tests(void)
/* check responses */ /* check responses */
BUILD_BUG_ON(sizeof(struct prestera_msg_common_resp) != 8); 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_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_stats_resp) != 248);
BUILD_BUG_ON(sizeof(struct prestera_msg_port_info_resp) != 20); BUILD_BUG_ON(sizeof(struct prestera_msg_port_info_resp) != 20);
BUILD_BUG_ON(sizeof(struct prestera_msg_bridge_resp) != 12); BUILD_BUG_ON(sizeof(struct prestera_msg_bridge_resp) != 12);
...@@ -561,9 +566,9 @@ static int __prestera_cmd_ret(struct prestera_switch *sw, ...@@ -561,9 +566,9 @@ static int __prestera_cmd_ret(struct prestera_switch *sw,
if (err) if (err)
return 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; 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 -EINVAL;
return 0; 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