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

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
Loading
Loading
Loading
Loading
+68 −63
Original line number Diff line number Diff line
@@ -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;