octeon_ep: PF-VF mailbox version support
authorShinas Rasheed <srasheed@marvell.com>
Fri, 15 Dec 2023 18:14:23 +0000 (10:14 -0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 19 Dec 2023 11:00:53 +0000 (12:00 +0100)
Add PF-VF mailbox initial version support

Signed-off-by: Shinas Rasheed <srasheed@marvell.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/marvell/octeon_ep/octep_main.h
drivers/net/ethernet/marvell/octeon_ep/octep_pfvf_mbox.c
drivers/net/ethernet/marvell/octeon_ep/octep_pfvf_mbox.h

index 3223bb6f95ea26daa882b54d5b3bf310b192f52a..fee59e0e0138feecdab5bf8fecd9334172bd894a 100644 (file)
@@ -220,6 +220,7 @@ struct octep_iface_link_info {
 /* The Octeon VF device specific info data structure.*/
 struct octep_pfvf_info {
        u8 mac_addr[ETH_ALEN];
+       u32 mbox_version;
 };
 
 /* The Octeon device specific private data structure.
index 0557c138060f6db742cbc86021d8fc1407097ecc..fb4da72e5193f09a587e48aebfa86dfb675a8ccf 100644 (file)
@@ -27,10 +27,18 @@ static void octep_pfvf_validate_version(struct octep_device *oct,  u32 vf_id,
 {
        u32 vf_version = (u32)cmd.s_version.version;
 
-       if (vf_version <= OCTEP_PFVF_MBOX_VERSION_V1)
-               rsp->s_version.type = OCTEP_PFVF_MBOX_TYPE_RSP_ACK;
+       dev_dbg(&oct->pdev->dev, "VF id:%d VF version:%d PF version:%d\n",
+               vf_id, vf_version, OCTEP_PFVF_MBOX_VERSION_CURRENT);
+       if (vf_version < OCTEP_PFVF_MBOX_VERSION_CURRENT)
+               rsp->s_version.version = vf_version;
        else
-               rsp->s_version.type = OCTEP_PFVF_MBOX_TYPE_RSP_NACK;
+               rsp->s_version.version = OCTEP_PFVF_MBOX_VERSION_CURRENT;
+
+       oct->vf_info[vf_id].mbox_version = rsp->s_version.version;
+       dev_dbg(&oct->pdev->dev, "VF id:%d negotiated VF version:%d\n",
+               vf_id, oct->vf_info[vf_id].mbox_version);
+
+       rsp->s_version.type = OCTEP_PFVF_MBOX_TYPE_RSP_ACK;
 }
 
 static void octep_pfvf_get_link_status(struct octep_device *oct, u32 vf_id,
@@ -166,6 +174,7 @@ int octep_setup_pfvf_mbox(struct octep_device *oct)
                        goto free_mbox;
 
                memset(oct->mbox[ring], 0, sizeof(struct octep_mbox));
+               memset(&oct->vf_info[i], 0, sizeof(struct octep_pfvf_info));
                mutex_init(&oct->mbox[ring]->lock);
                INIT_WORK(&oct->mbox[ring]->wk.work, octep_pfvf_mbox_work);
                oct->mbox[ring]->wk.ctxptr = oct->mbox[ring];
index 83c072d975124d5cef254a4de12ed36c2e2642db..af4dcf5ef7f1d5ff39874797fe4b1d1c7435da99 100644 (file)
 #define OCTEON_SDP_16K_HW_FRS  16380UL
 #define OCTEON_SDP_64K_HW_FRS  65531UL
 
+/* When a new command is implemented,PF Mbox version should be bumped.
+ */
 enum octep_pfvf_mbox_version {
        OCTEP_PFVF_MBOX_VERSION_V0,
        OCTEP_PFVF_MBOX_VERSION_V1,
 };
 
+#define OCTEP_PFVF_MBOX_VERSION_CURRENT        OCTEP_PFVF_MBOX_VERSION_V1
+
 enum octep_pfvf_mbox_opcode {
        OCTEP_PFVF_MBOX_CMD_VERSION,
        OCTEP_PFVF_MBOX_CMD_SET_MTU,