[2/2] net: hinic: Add control command support for VF PMD driver in DPDK

Message ID 20221026125922.34080-2-cai.huoqing@linux.dev
State New
Headers
Series [1/2] net: hinic: Convert the cmd code from decimal to hex to be more readable |

Commit Message

Cai Huoqing Oct. 26, 2022, 12:59 p.m. UTC
  HINIC has a mailbox for PF-VF communication and the VF driver
could send port control command to PF driver via mailbox.

The control command only can be set to register in PF,
so add support in PF driver for VF PMD driver control
command when VF PMD driver work with linux PF driver.

Signed-off-by: Cai Huoqing <cai.huoqing@linux.dev>
---
 .../net/ethernet/huawei/hinic/hinic_hw_dev.h  | 64 +++++++++++++++++++
 .../net/ethernet/huawei/hinic/hinic_sriov.c   | 18 ++++++
 2 files changed, 82 insertions(+)
  

Comments

Jakub Kicinski Oct. 27, 2022, 6:03 p.m. UTC | #1
On Wed, 26 Oct 2022 20:59:11 +0800 Cai Huoqing wrote:
> The control command only can be set to register in PF,
> so add support in PF driver for VF PMD driver control
> command when VF PMD driver work with linux PF driver.

For what definition of "work"?

The commands are actually supported or you're just ignoring them
silently?
  
shaozhengchao Oct. 28, 2022, 1:21 a.m. UTC | #2
On 2022/10/26 20:59, Cai Huoqing wrote:
> HINIC has a mailbox for PF-VF communication and the VF driver
> could send port control command to PF driver via mailbox.
> 
> The control command only can be set to register in PF,
> so add support in PF driver for VF PMD driver control
> command when VF PMD driver work with linux PF driver.
> 
> Signed-off-by: Cai Huoqing <cai.huoqing@linux.dev>
> ---
>   .../net/ethernet/huawei/hinic/hinic_hw_dev.h  | 64 +++++++++++++++++++
>   .../net/ethernet/huawei/hinic/hinic_sriov.c   | 18 ++++++
>   2 files changed, 82 insertions(+)
> 
> diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h b/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h
> index abffd967a791..4f561e4e849a 100644
> --- a/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h
> +++ b/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h
> @@ -53,11 +53,15 @@ enum hinic_port_cmd {
>   
>   	HINIC_PORT_CMD_SET_PFC = 0x5,
>   
> +	HINIC_PORT_CMD_SET_ETS = 0x7,
> +	HINIC_PORT_CMD_GET_ETS = 0x8,
> +
>   	HINIC_PORT_CMD_SET_MAC = 0x9,
>   	HINIC_PORT_CMD_GET_MAC = 0xA,
>   	HINIC_PORT_CMD_DEL_MAC = 0xB,
>   
>   	HINIC_PORT_CMD_SET_RX_MODE = 0xC,
> +	HINIC_PORT_CMD_SET_ANTI_ATTACK_RATE = 0xD,
>   
>   	HINIC_PORT_CMD_GET_PAUSE_INFO = 0x14,
>   	HINIC_PORT_CMD_SET_PAUSE_INFO = 0x15,
> @@ -81,6 +85,7 @@ enum hinic_port_cmd {
>   	HINIC_PORT_CMD_GET_RSS_TEMPLATE_INDIR_TBL = 0x25,
>   
>   	HINIC_PORT_CMD_SET_PORT_STATE = 0x29,
> +	HINIC_PORT_CMD_GET_PORT_STATE = 0x30,
>   
>   	HINIC_PORT_CMD_SET_RSS_TEMPLATE_TBL = 0x2B,
>   	HINIC_PORT_CMD_GET_RSS_TEMPLATE_TBL = 0x2C,
> @@ -97,17 +102,29 @@ enum hinic_port_cmd {
>   
>   	HINIC_PORT_CMD_RSS_CFG = 0x42,
>   
> +	HINIC_PORT_CMD_GET_PHY_TYPE = 0x44,
> +
>   	HINIC_PORT_CMD_FWCTXT_INIT = 0x45,
>   
>   	HINIC_PORT_CMD_GET_LOOPBACK_MODE = 0x48,
>   	HINIC_PORT_CMD_SET_LOOPBACK_MODE = 0x49,
>   
> +	HINIC_PORT_CMD_GET_JUMBO_FRAME_SIZE = 0x4A,
> +	HINIC_PORT_CMD_SET_JUMBO_FRAME_SIZE = 0x4B,
> +
>   	HINIC_PORT_CMD_ENABLE_SPOOFCHK = 0x4E,
>   
>   	HINIC_PORT_CMD_GET_MGMT_VERSION = 0x58,
>   
> +	HINIC_PORT_CMD_GET_PORT_TYPE = 0x5B,
> +
>   	HINIC_PORT_CMD_SET_FUNC_STATE = 0x5D,
>   
> +	HINIC_PORT_CMD_GET_PORT_ID_BY_FUNC_ID = 0x5E,
> +
> +	HINIC_PORT_CMD_GET_DMA_CS = 0x64,
> +	HINIC_PORT_CMD_SET_DMA_CS = 0x65,
> +
>   	HINIC_PORT_CMD_GET_GLOBAL_QPN = 0x66,
>   
>   	HINIC_PORT_CMD_SET_VF_RATE = 0x69,
> @@ -121,25 +138,72 @@ enum hinic_port_cmd {
>   
>   	HINIC_PORT_CMD_SET_RQ_IQ_MAP = 0x73,
>   
> +	HINIC_PORT_CMD_SET_PFC_THD = 0x75,
> +
>   	HINIC_PORT_CMD_LINK_STATUS_REPORT = 0xA0,
>   
> +	HINIC_PORT_CMD_SET_LOSSLESS_ETH	= 0xA3,
> +
>   	HINIC_PORT_CMD_UPDATE_MAC = 0xA4,
>   
>   	HINIC_PORT_CMD_GET_CAP = 0xAA,
>   
> +	HINIC_PORT_CMD_UP_TC_ADD_FLOW = 0xAF,
> +	HINIC_PORT_CMD_UP_TC_DEL_FLOW = 0xB0,
> +	HINIC_PORT_CMD_UP_TC_GET_FLOW = 0xB1,
> +
> +	HINIC_PORT_CMD_UP_TC_FLUSH_TCAM = 0xB2,
> +
> +	HINIC_PORT_CMD_UP_TC_CTRL_TCAM_BLOCK = 0xB3,
> +
> +	HINIC_PORT_CMD_UP_TC_ENABLE = 0xB4,
> +
> +	HINIC_PORT_CMD_UP_TC_GET_TCAM_BLOCK = 0xB5,
> +
> +	HINIC_PORT_CMD_SET_IPSU_MAC = 0xCB,
> +	HINIC_PORT_CMD_GET_IPSU_MAC = 0xCC,
> +
> +	HINIC_PORT_CMD_SET_XSFP_STATUS = 0xD4,
>   	HINIC_PORT_CMD_GET_LINK_MODE = 0xD9,
>   
>   	HINIC_PORT_CMD_SET_SPEED = 0xDA,
>   
>   	HINIC_PORT_CMD_SET_AUTONEG = 0xDB,
>   
> +	HINIC_PORT_CMD_CLEAR_QP_RES = 0xDD,
> +
> +	HINIC_PORT_CMD_SET_SUPER_CQE = 0xDE,
> +
> +	HINIC_PORT_CMD_SET_VF_COS = 0xDF,
> +	HINIC_PORT_CMD_GET_VF_COS = 0xE1,
> +
> +	HINIC_PORT_CMD_CABLE_PLUG_EVENT	= 0xE5,
> +
> +	HINIC_PORT_CMD_LINK_ERR_EVENT = 0xE6,
> +
> +	HINIC_PORT_CMD_SET_COS_UP_MAP = 0xE8,
> +
> +	HINIC_PORT_CMD_RESET_LINK_CFG = 0xEB,
> +
>   	HINIC_PORT_CMD_GET_STD_SFP_INFO = 0xF0,
>   
> +	HINIC_PORT_CMD_FORCE_PKT_DROP = 0xF3,
> +
>   	HINIC_PORT_CMD_SET_LRO_TIMER = 0xF4,
>   
> +	HINIC_PORT_CMD_SET_VHD_CFG = 0xF7,
> +
> +	HINIC_PORT_CMD_SET_LINK_FOLLOW = 0xF8,
> +
>   	HINIC_PORT_CMD_SET_VF_MAX_MIN_RATE = 0xF9,
>   
>   	HINIC_PORT_CMD_GET_SFP_ABS = 0xFB,
> +
> +	HINIC_PORT_CMD_Q_FILTER	= 0xFC,
> +
> +	HINIC_PORT_CMD_TCAM_FILTER = 0xFE,
> +
> +	HINIC_PORT_CMD_SET_VLAN_FILTER = 0xFF
>   };
>   
>   /* cmd of mgmt CPU message for HILINK module */
> diff --git a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
> index a5f08b969e3f..bba41994dee6 100644
> --- a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
> +++ b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
> @@ -489,6 +489,24 @@ static struct vf_cmd_check_handle nic_cmd_support_vf[] = {
>   	{HINIC_PORT_CMD_UPDATE_MAC, hinic_mbox_check_func_id_8B},
>   	{HINIC_PORT_CMD_GET_CAP, hinic_mbox_check_func_id_8B},
>   	{HINIC_PORT_CMD_GET_LINK_MODE, hinic_mbox_check_func_id_8B},
> +	{HINIC_PORT_CMD_GET_VF_COS, NULL},
> +	{HINIC_PORT_CMD_SET_VHD_CFG, hinic_mbox_check_func_id_8B},
> +	{HINIC_PORT_CMD_SET_VLAN_FILTER, hinic_mbox_check_func_id_8B},
> +	{HINIC_PORT_CMD_Q_FILTER, hinic_mbox_check_func_id_8B},
> +	{HINIC_PORT_CMD_TCAM_FILTER, NULL},
> +	{HINIC_PORT_CMD_UP_TC_ADD_FLOW, NULL},
> +	{HINIC_PORT_CMD_UP_TC_DEL_FLOW, NULL},
> +	{HINIC_PORT_CMD_UP_TC_FLUSH_TCAM, hinic_mbox_check_func_id_8B},
> +	{HINIC_PORT_CMD_UP_TC_CTRL_TCAM_BLOCK, hinic_mbox_check_func_id_8B},
> +	{HINIC_PORT_CMD_UP_TC_ENABLE, hinic_mbox_check_func_id_8B},
> +	{HINIC_PORT_CMD_CABLE_PLUG_EVENT, NULL},
> +	{HINIC_PORT_CMD_LINK_ERR_EVENT, NULL},
> +	{HINIC_PORT_CMD_SET_PORT_STATE, hinic_mbox_check_func_id_8B},
> +	{HINIC_PORT_CMD_SET_ETS, NULL},
> +	{HINIC_PORT_CMD_SET_ANTI_ATTACK_RATE, NULL},
> +	{HINIC_PORT_CMD_RESET_LINK_CFG, hinic_mbox_check_func_id_8B},
> +	{HINIC_PORT_CMD_SET_LINK_FOLLOW, NULL},
> +	{HINIC_PORT_CMD_CLEAR_QP_RES, NULL},
>   };
>   
>   #define CHECK_IPSU_15BIT	0X8000
Hi Cai:
	I guess how do you get the opcodes of these commands? Have they
all been tested? Is the test result consistent with the driver released
on the Huawei support website?

Zhengchao Shao
  
Cai Huoqing Oct. 28, 2022, 4:56 a.m. UTC | #3
On 27 10月 22 11:03:12, Jakub Kicinski wrote:
> On Wed, 26 Oct 2022 20:59:11 +0800 Cai Huoqing wrote:
> > The control command only can be set to register in PF,
> > so add support in PF driver for VF PMD driver control
> > command when VF PMD driver work with linux PF driver.
> 
> For what definition of "work"?
Hi Jakub,
  The work means that when the VF NIC driver in guest OS do some
  configuration (VF L2NIC config),
  firstly, VF send cmd to PF viamailbox,
  then, PF deside what cmd is valid as a command filter.
 
  see these,
  ./hinic_sriov.c:1031:static int nic_pf_mbox_handler(..
  ./hinic_sriov.c:1045:   if (!hinic_mbox_check_cmd_valid(hwdev, nic_cmd_support_vf, vf_id, cmd,
> 
> The commands are actually supported or you're just ignoring them
> silently?
No, if the cmd is not added to 'nic_cmd_support_vf',
the PF will return false, and the error messsage "PF Receive VFx
unsupported cmd x" in the function 'hinic_mbox_check_cmd_valid',
then, the configuration will not be set to hardware.

./hinic_hw_mbox.c:1238:bool hinic_mbox_check_cmd_valid(struct hinic_hwdev *hwdev,

Thanks,
Cai
  
Cai Huoqing Oct. 28, 2022, 5:24 a.m. UTC | #4
On 28 10月 22 09:21:09, shaozhengchao wrote:
> 
> 
> On 2022/10/26 20:59, Cai Huoqing wrote:
> > HINIC has a mailbox for PF-VF communication and the VF driver
> > could send port control command to PF driver via mailbox.
> > 
> > The control command only can be set to register in PF,
> > so add support in PF driver for VF PMD driver control
> > command when VF PMD driver work with linux PF driver.
> > 
> > Signed-off-by: Cai Huoqing <cai.huoqing@linux.dev>
> > ---
> >   .../net/ethernet/huawei/hinic/hinic_hw_dev.h  | 64 +++++++++++++++++++
> >   .../net/ethernet/huawei/hinic/hinic_sriov.c   | 18 ++++++
> >   2 files changed, 82 insertions(+)
> > 
> > diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h b/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h
> > index abffd967a791..4f561e4e849a 100644
> > --- a/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h
> > +++ b/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h
> > @@ -53,11 +53,15 @@ enum hinic_port_cmd {
> >   	HINIC_PORT_CMD_SET_PFC = 0x5,
> > +	HINIC_PORT_CMD_SET_ETS = 0x7,
> > +	HINIC_PORT_CMD_GET_ETS = 0x8,
> > +
> >   	HINIC_PORT_CMD_SET_MAC = 0x9,
> >   	HINIC_PORT_CMD_GET_MAC = 0xA,
> >   	HINIC_PORT_CMD_DEL_MAC = 0xB,
> >   	HINIC_PORT_CMD_SET_RX_MODE = 0xC,
> > +	HINIC_PORT_CMD_SET_ANTI_ATTACK_RATE = 0xD,
> >   	HINIC_PORT_CMD_GET_PAUSE_INFO = 0x14,
> >   	HINIC_PORT_CMD_SET_PAUSE_INFO = 0x15,
> > @@ -81,6 +85,7 @@ enum hinic_port_cmd {
> >   	HINIC_PORT_CMD_GET_RSS_TEMPLATE_INDIR_TBL = 0x25,
> >   	HINIC_PORT_CMD_SET_PORT_STATE = 0x29,
> > +	HINIC_PORT_CMD_GET_PORT_STATE = 0x30,
> >   	HINIC_PORT_CMD_SET_RSS_TEMPLATE_TBL = 0x2B,
> >   	HINIC_PORT_CMD_GET_RSS_TEMPLATE_TBL = 0x2C,
> > @@ -97,17 +102,29 @@ enum hinic_port_cmd {
> >   	HINIC_PORT_CMD_RSS_CFG = 0x42,
> > +	HINIC_PORT_CMD_GET_PHY_TYPE = 0x44,
> > +
> >   	HINIC_PORT_CMD_FWCTXT_INIT = 0x45,
> >   	HINIC_PORT_CMD_GET_LOOPBACK_MODE = 0x48,
> >   	HINIC_PORT_CMD_SET_LOOPBACK_MODE = 0x49,
> > +	HINIC_PORT_CMD_GET_JUMBO_FRAME_SIZE = 0x4A,
> > +	HINIC_PORT_CMD_SET_JUMBO_FRAME_SIZE = 0x4B,
> > +
> >   	HINIC_PORT_CMD_ENABLE_SPOOFCHK = 0x4E,
> >   	HINIC_PORT_CMD_GET_MGMT_VERSION = 0x58,
> > +	HINIC_PORT_CMD_GET_PORT_TYPE = 0x5B,
> > +
> >   	HINIC_PORT_CMD_SET_FUNC_STATE = 0x5D,
> > +	HINIC_PORT_CMD_GET_PORT_ID_BY_FUNC_ID = 0x5E,
> > +
> > +	HINIC_PORT_CMD_GET_DMA_CS = 0x64,
> > +	HINIC_PORT_CMD_SET_DMA_CS = 0x65,
> > +
> >   	HINIC_PORT_CMD_GET_GLOBAL_QPN = 0x66,
> >   	HINIC_PORT_CMD_SET_VF_RATE = 0x69,
> > @@ -121,25 +138,72 @@ enum hinic_port_cmd {
> >   	HINIC_PORT_CMD_SET_RQ_IQ_MAP = 0x73,
> > +	HINIC_PORT_CMD_SET_PFC_THD = 0x75,
> > +
> >   	HINIC_PORT_CMD_LINK_STATUS_REPORT = 0xA0,
> > +	HINIC_PORT_CMD_SET_LOSSLESS_ETH	= 0xA3,
> > +
> >   	HINIC_PORT_CMD_UPDATE_MAC = 0xA4,
> >   	HINIC_PORT_CMD_GET_CAP = 0xAA,
> > +	HINIC_PORT_CMD_UP_TC_ADD_FLOW = 0xAF,
> > +	HINIC_PORT_CMD_UP_TC_DEL_FLOW = 0xB0,
> > +	HINIC_PORT_CMD_UP_TC_GET_FLOW = 0xB1,
> > +
> > +	HINIC_PORT_CMD_UP_TC_FLUSH_TCAM = 0xB2,
> > +
> > +	HINIC_PORT_CMD_UP_TC_CTRL_TCAM_BLOCK = 0xB3,
> > +
> > +	HINIC_PORT_CMD_UP_TC_ENABLE = 0xB4,
> > +
> > +	HINIC_PORT_CMD_UP_TC_GET_TCAM_BLOCK = 0xB5,
> > +
> > +	HINIC_PORT_CMD_SET_IPSU_MAC = 0xCB,
> > +	HINIC_PORT_CMD_GET_IPSU_MAC = 0xCC,
> > +
> > +	HINIC_PORT_CMD_SET_XSFP_STATUS = 0xD4,
> >   	HINIC_PORT_CMD_GET_LINK_MODE = 0xD9,
> >   	HINIC_PORT_CMD_SET_SPEED = 0xDA,
> >   	HINIC_PORT_CMD_SET_AUTONEG = 0xDB,
> > +	HINIC_PORT_CMD_CLEAR_QP_RES = 0xDD,
> > +
> > +	HINIC_PORT_CMD_SET_SUPER_CQE = 0xDE,
> > +
> > +	HINIC_PORT_CMD_SET_VF_COS = 0xDF,
> > +	HINIC_PORT_CMD_GET_VF_COS = 0xE1,
> > +
> > +	HINIC_PORT_CMD_CABLE_PLUG_EVENT	= 0xE5,
> > +
> > +	HINIC_PORT_CMD_LINK_ERR_EVENT = 0xE6,
> > +
> > +	HINIC_PORT_CMD_SET_COS_UP_MAP = 0xE8,
> > +
> > +	HINIC_PORT_CMD_RESET_LINK_CFG = 0xEB,
> > +
> >   	HINIC_PORT_CMD_GET_STD_SFP_INFO = 0xF0,
> > +	HINIC_PORT_CMD_FORCE_PKT_DROP = 0xF3,
> > +
> >   	HINIC_PORT_CMD_SET_LRO_TIMER = 0xF4,
> > +	HINIC_PORT_CMD_SET_VHD_CFG = 0xF7,
> > +
> > +	HINIC_PORT_CMD_SET_LINK_FOLLOW = 0xF8,
> > +
> >   	HINIC_PORT_CMD_SET_VF_MAX_MIN_RATE = 0xF9,
> >   	HINIC_PORT_CMD_GET_SFP_ABS = 0xFB,
> > +
> > +	HINIC_PORT_CMD_Q_FILTER	= 0xFC,
> > +
> > +	HINIC_PORT_CMD_TCAM_FILTER = 0xFE,
> > +
> > +	HINIC_PORT_CMD_SET_VLAN_FILTER = 0xFF
> >   };
> >   /* cmd of mgmt CPU message for HILINK module */
> > diff --git a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
> > index a5f08b969e3f..bba41994dee6 100644
> > --- a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
> > +++ b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
> > @@ -489,6 +489,24 @@ static struct vf_cmd_check_handle nic_cmd_support_vf[] = {
> >   	{HINIC_PORT_CMD_UPDATE_MAC, hinic_mbox_check_func_id_8B},
> >   	{HINIC_PORT_CMD_GET_CAP, hinic_mbox_check_func_id_8B},
> >   	{HINIC_PORT_CMD_GET_LINK_MODE, hinic_mbox_check_func_id_8B},
> > +	{HINIC_PORT_CMD_GET_VF_COS, NULL},
> > +	{HINIC_PORT_CMD_SET_VHD_CFG, hinic_mbox_check_func_id_8B},
> > +	{HINIC_PORT_CMD_SET_VLAN_FILTER, hinic_mbox_check_func_id_8B},
> > +	{HINIC_PORT_CMD_Q_FILTER, hinic_mbox_check_func_id_8B},
> > +	{HINIC_PORT_CMD_TCAM_FILTER, NULL},
> > +	{HINIC_PORT_CMD_UP_TC_ADD_FLOW, NULL},
> > +	{HINIC_PORT_CMD_UP_TC_DEL_FLOW, NULL},
> > +	{HINIC_PORT_CMD_UP_TC_FLUSH_TCAM, hinic_mbox_check_func_id_8B},
> > +	{HINIC_PORT_CMD_UP_TC_CTRL_TCAM_BLOCK, hinic_mbox_check_func_id_8B},
> > +	{HINIC_PORT_CMD_UP_TC_ENABLE, hinic_mbox_check_func_id_8B},
> > +	{HINIC_PORT_CMD_CABLE_PLUG_EVENT, NULL},
> > +	{HINIC_PORT_CMD_LINK_ERR_EVENT, NULL},
> > +	{HINIC_PORT_CMD_SET_PORT_STATE, hinic_mbox_check_func_id_8B},
> > +	{HINIC_PORT_CMD_SET_ETS, NULL},
> > +	{HINIC_PORT_CMD_SET_ANTI_ATTACK_RATE, NULL},
> > +	{HINIC_PORT_CMD_RESET_LINK_CFG, hinic_mbox_check_func_id_8B},
> > +	{HINIC_PORT_CMD_SET_LINK_FOLLOW, NULL},
> > +	{HINIC_PORT_CMD_CLEAR_QP_RES, NULL},
> >   };
> >   #define CHECK_IPSU_15BIT	0X8000
> Hi Cai:
> 	I guess how do you get the opcodes of these commands? Have they
> all been tested? Is the test result consistent with the driver released
> on the Huawei support website?
Hi Shao,
	Thanks for your reply.

	I try to keep this PF part support to recv hinic VF PMD driver in DPDK
	upstream.
	the command comes from here,
	https://github.com/DPDK/dpdk/blob/main/drivers/net/hinic/base/hinic_pmd_niccfg.c

	send by the DPDK-hinic function 'l2nic_msg_to_mgmt_sync' when
	'hinic_func_type(hwdev) == TYPE_VF'.

	for the test, the DPDK part is tested, I also test this part in SP582 NIC

Thanks.
Cai
> 
> Zhengchao Shao
  
Jakub Kicinski Oct. 28, 2022, 3:56 p.m. UTC | #5
On Fri, 28 Oct 2022 12:56:55 +0800 Cai Huoqing wrote:
> > The commands are actually supported or you're just ignoring them
> > silently?  
> No, 

Do you mean "neither"?

> if the cmd is not added to 'nic_cmd_support_vf',
> the PF will return false, and the error messsage "PF Receive VFx
> unsupported cmd x" in the function 'hinic_mbox_check_cmd_valid',
> then, the configuration will not be set to hardware.

You're describing the behavior before the patch?

After the patch the command is ignored silently, like I said, right?
Because there is no handler added to nic_vf_cmd_msg_handler[].
Why is that okay? Or is there handler somewhere else?
  
Cai Huoqing Oct. 29, 2022, 7:53 a.m. UTC | #6
On 28 10月 22 08:56:51, Jakub Kicinski wrote:
> On Fri, 28 Oct 2022 12:56:55 +0800 Cai Huoqing wrote:
> > > The commands are actually supported or you're just ignoring them
> > > silently?  
> > No, 
> 
> Do you mean "neither"?
> 
> > if the cmd is not added to 'nic_cmd_support_vf',
> > the PF will return false, and the error messsage "PF Receive VFx
> > unsupported cmd x" in the function 'hinic_mbox_check_cmd_valid',
> > then, the configuration will not be set to hardware.
> 
> You're describing the behavior before the patch?
> 
> After the patch the command is ignored silently, like I said, right?
> Because there is no handler added to nic_vf_cmd_msg_handler[].
> Why is that okay? Or is there handler somewhere else?

No need to add handlers to nic_vf_cmd_msg_handler[].
It will run the path,
if (i == ARRAY_SIZE(nic_vf_cmd_msg_handler))
	err = hinic_msg_to_mgmt(&pfhwdev->pf_to_mgmt, HINIC_MOD_L2NIC,
				cmd, buf_in, in_size, buf_out,
				out_size, HINIC_MGMT_MSG_SYNC);
right? or if not please show the related code.
  
Jakub Kicinski Oct. 31, 2022, 11:52 p.m. UTC | #7
On Sat, 29 Oct 2022 15:53:35 +0800 Cai Huoqing wrote:
> On 28 10月 22 08:56:51, Jakub Kicinski wrote:
> > > if the cmd is not added to 'nic_cmd_support_vf',
> > > the PF will return false, and the error messsage "PF Receive VFx
> > > unsupported cmd x" in the function 'hinic_mbox_check_cmd_valid',
> > > then, the configuration will not be set to hardware.  
> > 
> > You're describing the behavior before the patch?
> > 
> > After the patch the command is ignored silently, like I said, right?
> > Because there is no handler added to nic_vf_cmd_msg_handler[].
> > Why is that okay? Or is there handler somewhere else?  
> 
> No need to add handlers to nic_vf_cmd_msg_handler[].
> It will run the path,
> if (i == ARRAY_SIZE(nic_vf_cmd_msg_handler))
> 	err = hinic_msg_to_mgmt(&pfhwdev->pf_to_mgmt, HINIC_MOD_L2NIC,
> 				cmd, buf_in, in_size, buf_out,
> 				out_size, HINIC_MGMT_MSG_SYNC);

Meaning it just forwards it to the firmware?

> right? or if not please show the related code.

I don't know, I don't know this random driver. I'm just asking you
questions because as the author of the patch _you_ are supposed to know.
  
Cai Huoqing Nov. 1, 2022, 1:49 a.m. UTC | #8
On 31 10月 22 16:52:55, Jakub Kicinski wrote:
> On Sat, 29 Oct 2022 15:53:35 +0800 Cai Huoqing wrote:
> > On 28 10月 22 08:56:51, Jakub Kicinski wrote:
> > > > if the cmd is not added to 'nic_cmd_support_vf',
> > > > the PF will return false, and the error messsage "PF Receive VFx
> > > > unsupported cmd x" in the function 'hinic_mbox_check_cmd_valid',
> > > > then, the configuration will not be set to hardware.  
> > > 
> > > You're describing the behavior before the patch?
> > > 
> > > After the patch the command is ignored silently, like I said, right?
> > > Because there is no handler added to nic_vf_cmd_msg_handler[].
> > > Why is that okay? Or is there handler somewhere else?  
> > 
> > No need to add handlers to nic_vf_cmd_msg_handler[].
> > It will run the path,
> > if (i == ARRAY_SIZE(nic_vf_cmd_msg_handler))
> > 	err = hinic_msg_to_mgmt(&pfhwdev->pf_to_mgmt, HINIC_MOD_L2NIC,
> > 				cmd, buf_in, in_size, buf_out,
> > 				out_size, HINIC_MGMT_MSG_SYNC);
> 
> Meaning it just forwards it to the firmware?
Yes, host driver just forwards it to the firmware.
Actually the firmware works on a coprocessor MGMT_CPU(inside the NIC)
which will recv and deal with these commands.

Thanks,
Cai
> 
> > right? or if not please show the related code.
> 
> I don't know, I don't know this random driver. I'm just asking you
> questions because as the author of the patch _you_ are supposed to know.
  
Jakub Kicinski Nov. 1, 2022, 2:58 a.m. UTC | #9
On Tue, 1 Nov 2022 09:49:17 +0800 Cai Huoqing wrote:
> > Meaning it just forwards it to the firmware?  
> Yes, host driver just forwards it to the firmware.
> Actually the firmware works on a coprocessor MGMT_CPU(inside the NIC)
> which will recv and deal with these commands.

I see, please include this info in the commit message for v2.
  

Patch

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h b/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h
index abffd967a791..4f561e4e849a 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h
+++ b/drivers/net/ethernet/huawei/hinic/hinic_hw_dev.h
@@ -53,11 +53,15 @@  enum hinic_port_cmd {
 
 	HINIC_PORT_CMD_SET_PFC = 0x5,
 
+	HINIC_PORT_CMD_SET_ETS = 0x7,
+	HINIC_PORT_CMD_GET_ETS = 0x8,
+
 	HINIC_PORT_CMD_SET_MAC = 0x9,
 	HINIC_PORT_CMD_GET_MAC = 0xA,
 	HINIC_PORT_CMD_DEL_MAC = 0xB,
 
 	HINIC_PORT_CMD_SET_RX_MODE = 0xC,
+	HINIC_PORT_CMD_SET_ANTI_ATTACK_RATE = 0xD,
 
 	HINIC_PORT_CMD_GET_PAUSE_INFO = 0x14,
 	HINIC_PORT_CMD_SET_PAUSE_INFO = 0x15,
@@ -81,6 +85,7 @@  enum hinic_port_cmd {
 	HINIC_PORT_CMD_GET_RSS_TEMPLATE_INDIR_TBL = 0x25,
 
 	HINIC_PORT_CMD_SET_PORT_STATE = 0x29,
+	HINIC_PORT_CMD_GET_PORT_STATE = 0x30,
 
 	HINIC_PORT_CMD_SET_RSS_TEMPLATE_TBL = 0x2B,
 	HINIC_PORT_CMD_GET_RSS_TEMPLATE_TBL = 0x2C,
@@ -97,17 +102,29 @@  enum hinic_port_cmd {
 
 	HINIC_PORT_CMD_RSS_CFG = 0x42,
 
+	HINIC_PORT_CMD_GET_PHY_TYPE = 0x44,
+
 	HINIC_PORT_CMD_FWCTXT_INIT = 0x45,
 
 	HINIC_PORT_CMD_GET_LOOPBACK_MODE = 0x48,
 	HINIC_PORT_CMD_SET_LOOPBACK_MODE = 0x49,
 
+	HINIC_PORT_CMD_GET_JUMBO_FRAME_SIZE = 0x4A,
+	HINIC_PORT_CMD_SET_JUMBO_FRAME_SIZE = 0x4B,
+
 	HINIC_PORT_CMD_ENABLE_SPOOFCHK = 0x4E,
 
 	HINIC_PORT_CMD_GET_MGMT_VERSION = 0x58,
 
+	HINIC_PORT_CMD_GET_PORT_TYPE = 0x5B,
+
 	HINIC_PORT_CMD_SET_FUNC_STATE = 0x5D,
 
+	HINIC_PORT_CMD_GET_PORT_ID_BY_FUNC_ID = 0x5E,
+
+	HINIC_PORT_CMD_GET_DMA_CS = 0x64,
+	HINIC_PORT_CMD_SET_DMA_CS = 0x65,
+
 	HINIC_PORT_CMD_GET_GLOBAL_QPN = 0x66,
 
 	HINIC_PORT_CMD_SET_VF_RATE = 0x69,
@@ -121,25 +138,72 @@  enum hinic_port_cmd {
 
 	HINIC_PORT_CMD_SET_RQ_IQ_MAP = 0x73,
 
+	HINIC_PORT_CMD_SET_PFC_THD = 0x75,
+
 	HINIC_PORT_CMD_LINK_STATUS_REPORT = 0xA0,
 
+	HINIC_PORT_CMD_SET_LOSSLESS_ETH	= 0xA3,
+
 	HINIC_PORT_CMD_UPDATE_MAC = 0xA4,
 
 	HINIC_PORT_CMD_GET_CAP = 0xAA,
 
+	HINIC_PORT_CMD_UP_TC_ADD_FLOW = 0xAF,
+	HINIC_PORT_CMD_UP_TC_DEL_FLOW = 0xB0,
+	HINIC_PORT_CMD_UP_TC_GET_FLOW = 0xB1,
+
+	HINIC_PORT_CMD_UP_TC_FLUSH_TCAM = 0xB2,
+
+	HINIC_PORT_CMD_UP_TC_CTRL_TCAM_BLOCK = 0xB3,
+
+	HINIC_PORT_CMD_UP_TC_ENABLE = 0xB4,
+
+	HINIC_PORT_CMD_UP_TC_GET_TCAM_BLOCK = 0xB5,
+
+	HINIC_PORT_CMD_SET_IPSU_MAC = 0xCB,
+	HINIC_PORT_CMD_GET_IPSU_MAC = 0xCC,
+
+	HINIC_PORT_CMD_SET_XSFP_STATUS = 0xD4,
 	HINIC_PORT_CMD_GET_LINK_MODE = 0xD9,
 
 	HINIC_PORT_CMD_SET_SPEED = 0xDA,
 
 	HINIC_PORT_CMD_SET_AUTONEG = 0xDB,
 
+	HINIC_PORT_CMD_CLEAR_QP_RES = 0xDD,
+
+	HINIC_PORT_CMD_SET_SUPER_CQE = 0xDE,
+
+	HINIC_PORT_CMD_SET_VF_COS = 0xDF,
+	HINIC_PORT_CMD_GET_VF_COS = 0xE1,
+
+	HINIC_PORT_CMD_CABLE_PLUG_EVENT	= 0xE5,
+
+	HINIC_PORT_CMD_LINK_ERR_EVENT = 0xE6,
+
+	HINIC_PORT_CMD_SET_COS_UP_MAP = 0xE8,
+
+	HINIC_PORT_CMD_RESET_LINK_CFG = 0xEB,
+
 	HINIC_PORT_CMD_GET_STD_SFP_INFO = 0xF0,
 
+	HINIC_PORT_CMD_FORCE_PKT_DROP = 0xF3,
+
 	HINIC_PORT_CMD_SET_LRO_TIMER = 0xF4,
 
+	HINIC_PORT_CMD_SET_VHD_CFG = 0xF7,
+
+	HINIC_PORT_CMD_SET_LINK_FOLLOW = 0xF8,
+
 	HINIC_PORT_CMD_SET_VF_MAX_MIN_RATE = 0xF9,
 
 	HINIC_PORT_CMD_GET_SFP_ABS = 0xFB,
+
+	HINIC_PORT_CMD_Q_FILTER	= 0xFC,
+
+	HINIC_PORT_CMD_TCAM_FILTER = 0xFE,
+
+	HINIC_PORT_CMD_SET_VLAN_FILTER = 0xFF
 };
 
 /* cmd of mgmt CPU message for HILINK module */
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
index a5f08b969e3f..bba41994dee6 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
@@ -489,6 +489,24 @@  static struct vf_cmd_check_handle nic_cmd_support_vf[] = {
 	{HINIC_PORT_CMD_UPDATE_MAC, hinic_mbox_check_func_id_8B},
 	{HINIC_PORT_CMD_GET_CAP, hinic_mbox_check_func_id_8B},
 	{HINIC_PORT_CMD_GET_LINK_MODE, hinic_mbox_check_func_id_8B},
+	{HINIC_PORT_CMD_GET_VF_COS, NULL},
+	{HINIC_PORT_CMD_SET_VHD_CFG, hinic_mbox_check_func_id_8B},
+	{HINIC_PORT_CMD_SET_VLAN_FILTER, hinic_mbox_check_func_id_8B},
+	{HINIC_PORT_CMD_Q_FILTER, hinic_mbox_check_func_id_8B},
+	{HINIC_PORT_CMD_TCAM_FILTER, NULL},
+	{HINIC_PORT_CMD_UP_TC_ADD_FLOW, NULL},
+	{HINIC_PORT_CMD_UP_TC_DEL_FLOW, NULL},
+	{HINIC_PORT_CMD_UP_TC_FLUSH_TCAM, hinic_mbox_check_func_id_8B},
+	{HINIC_PORT_CMD_UP_TC_CTRL_TCAM_BLOCK, hinic_mbox_check_func_id_8B},
+	{HINIC_PORT_CMD_UP_TC_ENABLE, hinic_mbox_check_func_id_8B},
+	{HINIC_PORT_CMD_CABLE_PLUG_EVENT, NULL},
+	{HINIC_PORT_CMD_LINK_ERR_EVENT, NULL},
+	{HINIC_PORT_CMD_SET_PORT_STATE, hinic_mbox_check_func_id_8B},
+	{HINIC_PORT_CMD_SET_ETS, NULL},
+	{HINIC_PORT_CMD_SET_ANTI_ATTACK_RATE, NULL},
+	{HINIC_PORT_CMD_RESET_LINK_CFG, hinic_mbox_check_func_id_8B},
+	{HINIC_PORT_CMD_SET_LINK_FOLLOW, NULL},
+	{HINIC_PORT_CMD_CLEAR_QP_RES, NULL},
 };
 
 #define CHECK_IPSU_15BIT	0X8000