From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shreyansh Jain Subject: [PATCH v2 2/3] drivers: update MC firmware version for FSLMC bus Date: Thu, 4 Apr 2019 07:23:24 +0000 Message-ID: <20190404072335.24555-3-shreyansh.jain@nxp.com> References: <20190403142357.17700-1-shreyansh.jain@nxp.com> <20190404072335.24555-1-shreyansh.jain@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Cc: "dev@dpdk.org" , Shreyansh Jain To: "ferruh.yigit@intel.com" Return-path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30043.outbound.protection.outlook.com [40.107.3.43]) by dpdk.org (Postfix) with ESMTP id A8CB44F9C for ; Thu, 4 Apr 2019 09:23:27 +0200 (CEST) In-Reply-To: <20190404072335.24555-1-shreyansh.jain@nxp.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" MC firmware is the core component of FSLMC bus and DPAA2 devices. Prior to this patch, MC firmware supported 10.10.x version. This patch bumps the min supported version to 10.14.x. Signed-off-by: Shreyansh Jain Acked-by: Hemant Agrawal --- drivers/bus/fslmc/mc/fsl_dpmng.h | 2 +- drivers/net/dpaa2/dpaa2_ethdev.c | 1 + drivers/net/dpaa2/mc/dpni.c | 13 ++++- drivers/net/dpaa2/mc/fsl_dpni.h | 84 ++++++++++++++++++++++------- drivers/net/dpaa2/mc/fsl_dpni_cmd.h | 40 ++++++++++---- 5 files changed, 109 insertions(+), 31 deletions(-) diff --git a/drivers/bus/fslmc/mc/fsl_dpmng.h b/drivers/bus/fslmc/mc/fsl_dp= mng.h index 8559bef87..bef2ef095 100644 --- a/drivers/bus/fslmc/mc/fsl_dpmng.h +++ b/drivers/bus/fslmc/mc/fsl_dpmng.h @@ -18,7 +18,7 @@ struct fsl_mc_io; * Management Complex firmware version information */ #define MC_VER_MAJOR 10 -#define MC_VER_MINOR 10 +#define MC_VER_MINOR 14 =20 /** * struct mc_version diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_eth= dev.c index 3fbc82977..98ef8a5f5 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -665,6 +665,7 @@ dpaa2_dev_tx_queue_setup(struct rte_eth_dev *dev, DPNI_CONG_OPT_WRITE_MEM_ON_ENTER | DPNI_CONG_OPT_WRITE_MEM_ON_EXIT | DPNI_CONG_OPT_COHERENT_WRITE; + cong_notif_cfg.cg_point =3D DPNI_CP_QUEUE; =20 ret =3D dpni_set_congestion_notification(dpni, CMD_PRI_LOW, priv->token, diff --git a/drivers/net/dpaa2/mc/dpni.c b/drivers/net/dpaa2/mc/dpni.c index 6c12a0ae1..362cd476f 100644 --- a/drivers/net/dpaa2/mc/dpni.c +++ b/drivers/net/dpaa2/mc/dpni.c @@ -125,6 +125,7 @@ int dpni_create(struct fsl_mc_io *mc_io, cmd_params->vlan_filter_entries =3D cfg->vlan_filter_entries; cmd_params->qos_entries =3D cfg->qos_entries; cmd_params->fs_entries =3D cpu_to_le16(cfg->fs_entries); + cmd_params->num_cgs =3D cfg->num_cgs; =20 /* send command to mc*/ err =3D mc_send_command(mc_io, &cmd); @@ -593,6 +594,7 @@ int dpni_get_attributes(struct fsl_mc_io *mc_io, attr->qos_key_size =3D rsp_params->qos_key_size; attr->fs_key_size =3D rsp_params->fs_key_size; attr->wriop_version =3D le16_to_cpu(rsp_params->wriop_version); + attr->num_cgs =3D rsp_params->num_cgs; =20 return 0; } @@ -1800,6 +1802,8 @@ int dpni_set_congestion_notification(struct fsl_mc_io= *mc_io, cmd_params =3D (struct dpni_cmd_set_congestion_notification *)cmd.params; cmd_params->qtype =3D qtype; cmd_params->tc =3D tc_id; + cmd_params->congestion_point =3D cfg->cg_point; + cmd_params->cgid =3D (uint8_t)cfg->cgid; cmd_params->dest_id =3D cpu_to_le32(cfg->dest_cfg.dest_id); cmd_params->notification_mode =3D cpu_to_le16(cfg->notification_mode); cmd_params->dest_priority =3D cfg->dest_cfg.priority; @@ -1850,6 +1854,8 @@ int dpni_get_congestion_notification(struct fsl_mc_io= *mc_io, cmd_params =3D (struct dpni_cmd_get_congestion_notification *)cmd.params; cmd_params->qtype =3D qtype; cmd_params->tc =3D tc_id; + cmd_params->congestion_point =3D cfg->cg_point; + cmd_params->cgid =3D cfg->cgid; =20 /* send command to mc*/ err =3D mc_send_command(mc_io, &cmd); @@ -1949,6 +1955,7 @@ int dpni_set_queue(struct fsl_mc_io *mc_io, queue->destination.hold_active); cmd_params->flc =3D cpu_to_le64(queue->flc.value); cmd_params->user_context =3D cpu_to_le64(queue->user_context); + cmd_params->cgid =3D queue->cgid; =20 /* send command to mc */ return mc_send_command(mc_io, &cmd); @@ -2010,6 +2017,10 @@ int dpni_get_queue(struct fsl_mc_io *mc_io, queue->user_context =3D le64_to_cpu(rsp_params->user_context); qid->fqid =3D le32_to_cpu(rsp_params->fqid); qid->qdbin =3D le16_to_cpu(rsp_params->qdbin); + if (dpni_get_field(rsp_params->flags, CGID_VALID)) + queue->cgid =3D rsp_params->cgid; + else + queue->cgid =3D -1; =20 return 0; } @@ -2031,7 +2042,7 @@ int dpni_get_statistics(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token, uint8_t page, - uint8_t param, + uint16_t param, union dpni_statistics *stat) { struct mc_command cmd =3D { 0 }; diff --git a/drivers/net/dpaa2/mc/fsl_dpni.h b/drivers/net/dpaa2/mc/fsl_dpn= i.h index aecdc8d1f..8b1cfbac7 100644 --- a/drivers/net/dpaa2/mc/fsl_dpni.h +++ b/drivers/net/dpaa2/mc/fsl_dpni.h @@ -91,6 +91,10 @@ struct fsl_mc_io; * All Tx traffic classes will use a single sender (ignore num_queueus for= tx) */ #define DPNI_OPT_SINGLE_SENDER 0x000100 +/** + * Define a custom number of congestion groups + */ +#define DPNI_OPT_CUSTOM_CG 0x000200 =20 int dpni_open(struct fsl_mc_io *mc_io, uint32_t cmd_flags, @@ -172,6 +176,7 @@ struct dpni_cfg { uint8_t num_tcs; uint8_t num_rx_tcs; uint8_t qos_entries; + uint8_t num_cgs; }; =20 int dpni_create(struct fsl_mc_io *mc_io, @@ -326,6 +331,7 @@ struct dpni_attr { uint8_t qos_key_size; uint8_t fs_key_size; uint16_t wriop_version; + uint8_t num_cgs; }; =20 int dpni_get_attributes(struct fsl_mc_io *mc_io, @@ -638,6 +644,36 @@ union dpni_statistics { */ #define DPNI_LINK_OPT_PFC_PAUSE 0x0000000000000010ULL =20 +/** + * Advertise 10MB full duplex + */ +#define DPNI_ADVERTISED_10BASET_FULL 0x0000000000000001ULL +/** + * Advertise 100MB full duplex + */ +#define DPNI_ADVERTISED_100BASET_FULL 0x0000000000000002ULL +/** + * Advertise 1GB full duplex + */ +#define DPNI_ADVERTISED_1000BASET_FULL 0x0000000000000004ULL +/** + * Advertise auto-negotiation enable + */ +#define DPNI_ADVERTISED_AUTONEG 0x0000000000000008ULL +/** + * Advertise 10GB full duplex + */ +#define DPNI_ADVERTISED_10000BASET_FULL 0x0000000000000010ULL +/** + * Advertise 2.5GB full duplex + */ +#define DPNI_ADVERTISED_2500BASEX_FULL 0x0000000000000020ULL +/** + * Advertise 5GB full duplex + */ +#define DPNI_ADVERTISED_5000BASET_FULL 0x0000000000000040ULL + + /** * struct - Structure representing DPNI link configuration * @rate: Rate @@ -668,7 +704,7 @@ struct dpni_link_state { uint32_t rate; uint64_t options; int up; - int state_valid; + int state_valid; uint64_t supported; uint64_t advertising; }; @@ -850,7 +886,6 @@ enum dpni_congestion_unit { DPNI_CONGESTION_UNIT_FRAMES }; =20 - /** * enum dpni_dest - DPNI destination types * @DPNI_DEST_NONE: Unassigned destination; The queue is set in parked mod= e and @@ -924,6 +959,25 @@ struct dpni_dest_cfg { */ #define DPNI_CONG_OPT_FLOW_CONTROL 0x00000040 =20 +/** + * enum dpni_congestion_point - Structure representing congestion point + * @DPNI_CP_QUEUE: Set congestion per queue, identified by QUEUE_TYPE, TC + * and QUEUE_INDEX + * @DPNI_CP_GROUP: Set congestion per queue group. Depending on options + * used to define the DPNI this can be either per + * TC (default) or per interface + * (DPNI_OPT_SHARED_CONGESTION set at DPNI create). + * QUEUE_INDEX is ignored if this type is used. + * @DPNI_CP_CONGESTION_GROUP: Set per congestion group id. This will work + * only if the DPNI is created with DPNI_OPT_CUSTOM_CG option + */ + +enum dpni_congestion_point { + DPNI_CP_QUEUE, + DPNI_CP_GROUP, + DPNI_CP_CONGESTION_GROUP, +}; + /** * struct dpni_congestion_notification_cfg - congestion notification * configuration @@ -937,6 +991,8 @@ struct dpni_dest_cfg { * contained in 'options' * @dest_cfg: CSCN can be send to either DPIO or DPCON WQ channel * @notification_mode: Mask of available options; use 'DPNI_CONG_OPT_' = values + * @cg_point: Congestion point settings + * @cgid: id of the congestion group. The index is relative to dpni. */ =20 struct dpni_congestion_notification_cfg { @@ -947,6 +1003,8 @@ struct dpni_congestion_notification_cfg { uint64_t message_iova; struct dpni_dest_cfg dest_cfg; uint16_t notification_mode; + enum dpni_congestion_point cg_point; + int cgid; }; =20 int dpni_set_congestion_notification(struct fsl_mc_io *mc_io, @@ -1016,6 +1074,7 @@ int dpni_get_congestion_notification(struct fsl_mc_io= *mc_io, * FD[OFFSET]. * For more details check the Frame Descriptor section in the * hardware documentation. + *@cgid :indicate the cgid to set relative to dpni */ struct dpni_queue { struct { @@ -1029,6 +1088,7 @@ struct dpni_queue { uint64_t value; char stash_control; } flc; + int cgid; }; =20 /** @@ -1218,6 +1278,9 @@ int dpni_get_api_version(struct fsl_mc_io *mc_io, */ #define DPNI_QUEUE_OPT_HOLD_ACTIVE 0x00000008 =20 +#define DPNI_QUEUE_OPT_SET_CGID 0x00000040 +#define DPNI_QUEUE_OPT_CLEAR_CGID 0x00000080 + int dpni_set_queue(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token, @@ -1240,28 +1303,13 @@ int dpni_get_statistics(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token, uint8_t page, - uint8_t param, + uint16_t param, union dpni_statistics *stat); =20 int dpni_reset_statistics(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token); =20 -/** - * enum dpni_congestion_point - Structure representing congestion point - * @DPNI_CP_QUEUE: Set taildrop per queue, identified by QUEUE_TYPE, TC an= d - * QUEUE_INDEX - * @DPNI_CP_GROUP: Set taildrop per queue group. Depending on options used - * to define the DPNI this can be either per - * TC (default) or per interface - * (DPNI_OPT_SHARED_CONGESTION set at DPNI create). - * QUEUE_INDEX is ignored if this type is used. - */ -enum dpni_congestion_point { - DPNI_CP_QUEUE, - DPNI_CP_GROUP, -}; - /** * struct dpni_taildrop - Structure representing the taildrop * @enable: Indicates whether the taildrop is active or not. diff --git a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h b/drivers/net/dpaa2/mc/fsl= _dpni_cmd.h index 9116e417e..5effbb300 100644 --- a/drivers/net/dpaa2/mc/fsl_dpni_cmd.h +++ b/drivers/net/dpaa2/mc/fsl_dpni_cmd.h @@ -9,7 +9,7 @@ =20 /* DPNI Version */ #define DPNI_VER_MAJOR 7 -#define DPNI_VER_MINOR 8 +#define DPNI_VER_MINOR 9 =20 #define DPNI_CMD_BASE_VERSION 1 #define DPNI_CMD_VERSION_2 2 @@ -23,13 +23,13 @@ /* Command IDs */ #define DPNI_CMDID_OPEN DPNI_CMD(0x801) #define DPNI_CMDID_CLOSE DPNI_CMD(0x800) -#define DPNI_CMDID_CREATE DPNI_CMD_V2(0x901) +#define DPNI_CMDID_CREATE DPNI_CMD_V3(0x901) #define DPNI_CMDID_DESTROY DPNI_CMD(0x981) #define DPNI_CMDID_GET_API_VERSION DPNI_CMD(0xa01) =20 #define DPNI_CMDID_ENABLE DPNI_CMD(0x002) #define DPNI_CMDID_DISABLE DPNI_CMD(0x003) -#define DPNI_CMDID_GET_ATTR DPNI_CMD_V2(0x004) +#define DPNI_CMDID_GET_ATTR DPNI_CMD_V3(0x004) #define DPNI_CMDID_RESET DPNI_CMD(0x005) #define DPNI_CMDID_IS_ENABLED DPNI_CMD(0x006) =20 @@ -77,10 +77,10 @@ #define DPNI_CMDID_REMOVE_FS_ENT DPNI_CMD(0x245) #define DPNI_CMDID_CLR_FS_ENT DPNI_CMD(0x246) =20 -#define DPNI_CMDID_GET_STATISTICS DPNI_CMD_V2(0x25D) +#define DPNI_CMDID_GET_STATISTICS DPNI_CMD_V3(0x25D) #define DPNI_CMDID_RESET_STATISTICS DPNI_CMD(0x25E) -#define DPNI_CMDID_GET_QUEUE DPNI_CMD(0x25F) -#define DPNI_CMDID_SET_QUEUE DPNI_CMD(0x260) +#define DPNI_CMDID_GET_QUEUE DPNI_CMD_V2(0x25F) +#define DPNI_CMDID_SET_QUEUE DPNI_CMD_V2(0x260) #define DPNI_CMDID_GET_TAILDROP DPNI_CMD_V2(0x261) #define DPNI_CMDID_SET_TAILDROP DPNI_CMD_V2(0x262) =20 @@ -89,8 +89,8 @@ #define DPNI_CMDID_GET_BUFFER_LAYOUT DPNI_CMD_V2(0x264) #define DPNI_CMDID_SET_BUFFER_LAYOUT DPNI_CMD_V2(0x265) =20 -#define DPNI_CMDID_SET_CONGESTION_NOTIFICATION DPNI_CMD(0x267) -#define DPNI_CMDID_GET_CONGESTION_NOTIFICATION DPNI_CMD(0x268) +#define DPNI_CMDID_SET_CONGESTION_NOTIFICATION DPNI_CMD_V2(0x267) +#define DPNI_CMDID_GET_CONGESTION_NOTIFICATION DPNI_CMD_V2(0x268) #define DPNI_CMDID_SET_EARLY_DROP DPNI_CMD_V2(0x269) #define DPNI_CMDID_GET_EARLY_DROP DPNI_CMD_V2(0x26A) #define DPNI_CMDID_GET_OFFLOAD DPNI_CMD(0x26B) @@ -131,6 +131,8 @@ struct dpni_cmd_create { uint8_t pad3; uint16_t fs_entries; uint8_t num_rx_tcs; + uint8_t pad4; + uint8_t num_cgs; }; =20 struct dpni_cmd_destroy { @@ -222,6 +224,7 @@ struct dpni_rsp_get_attr { uint8_t qos_key_size; uint8_t fs_key_size; uint16_t wriop_version; + uint8_t num_cgs; }; =20 #define DPNI_ERROR_ACTION_SHIFT 0 @@ -315,7 +318,7 @@ struct dpni_rsp_get_tx_data_offset { =20 struct dpni_cmd_get_statistics { uint8_t page_number; - uint8_t param; + uint16_t param; }; =20 struct dpni_rsp_get_statistics { @@ -464,6 +467,8 @@ struct dpni_cmd_get_queue { =20 #define DPNI_DEST_TYPE_SHIFT 0 #define DPNI_DEST_TYPE_SIZE 4 +#define DPNI_CGID_VALID_SHIFT 5 +#define DPNI_CGID_VALID_SIZE 1 #define DPNI_STASH_CTRL_SHIFT 6 #define DPNI_STASH_CTRL_SIZE 1 #define DPNI_HOLD_ACTIVE_SHIFT 7 @@ -476,7 +481,9 @@ struct dpni_rsp_get_queue { uint32_t dest_id; uint16_t pad1; uint8_t dest_prio; - /* From LSB: dest_type:4, pad:2, flc_stash_ctrl:1, hold_active:1 */ + /* From LSB: + * dest_type:4, pad:1, cgid_valid:1, flc_stash_ctrl:1, hold_active:1 + */ uint8_t flags; /* response word 2 */ uint64_t flc; @@ -485,6 +492,9 @@ struct dpni_rsp_get_queue { /* response word 4 */ uint32_t fqid; uint16_t qdbin; + uint16_t pad2; + /* response word 5*/ + uint8_t cgid; }; =20 struct dpni_cmd_set_queue { @@ -503,6 +513,8 @@ struct dpni_cmd_set_queue { uint64_t flc; /* cmd word 3 */ uint64_t user_context; + /* cmd word 4 */ + uint8_t cgid; }; =20 #define DPNI_DISCARD_ON_MISS_SHIFT 0 @@ -655,7 +667,10 @@ struct dpni_tx_confirmation_mode { struct dpni_cmd_set_congestion_notification { uint8_t qtype; uint8_t tc; - uint8_t pad[6]; + uint8_t pad; + uint8_t congestion_point; + uint8_t cgid; + uint8_t pad2[3]; uint32_t dest_id; uint16_t notification_mode; uint8_t dest_priority; @@ -670,6 +685,9 @@ struct dpni_cmd_set_congestion_notification { struct dpni_cmd_get_congestion_notification { uint8_t qtype; uint8_t tc; + uint8_t pad; + uint8_t congestion_point; + uint8_t cgid; }; =20 struct dpni_rsp_get_congestion_notification { --=20 2.19.1