]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
enic: extend resource discovery for SR-IOV admin channel
authorSatish Kharat <satishkh@cisco.com>
Wed, 1 Apr 2026 15:31:11 +0000 (08:31 -0700)
committerJakub Kicinski <kuba@kernel.org>
Fri, 3 Apr 2026 01:05:05 +0000 (18:05 -0700)
VIC firmware exposes admin channel resources (WQ, RQ, CQ) for PF-VF
communication when SR-IOV is active. Add the corresponding resource
type definitions and teach the discovery and access functions to
handle them.

Signed-off-by: Satish Kharat <satishkh@cisco.com>
Link: https://patch.msgid.link/20260401-enic-sriov-v2-prep-v4-1-d5834b2ef1b9@cisco.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/cisco/enic/enic.h
drivers/net/ethernet/cisco/enic/vnic_dev.c
drivers/net/ethernet/cisco/enic/vnic_resource.h

index 6959e85ab516cc50336b68e28e4693a135ee096a..366c65d072fc5dcfa91166444a3d9674cf9410be 100644 (file)
@@ -297,6 +297,8 @@ static inline struct net_device *vnic_get_netdev(struct vnic_dev *vdev)
        dev_warn(&(vdev)->pdev->dev, fmt, ##__VA_ARGS__)
 #define vdev_info(vdev, fmt, ...)                                      \
        dev_info(&(vdev)->pdev->dev, fmt, ##__VA_ARGS__)
+#define vdev_dbg(vdev, fmt, ...)                                       \
+       dev_dbg(&(vdev)->pdev->dev, fmt, ##__VA_ARGS__)
 
 #define vdev_neterr(vdev, fmt, ...)                                    \
        netdev_err(vnic_get_netdev(vdev), fmt, ##__VA_ARGS__)
index c72452749f5e1a117542bd2c19fd4b112a2e7d43..c8d657e97094ed914022dfa97acc19107a98526e 100644 (file)
@@ -77,6 +77,9 @@ static int vnic_dev_discover_res(struct vnic_dev *vdev,
                u32 count = ioread32(&r->count);
                u32 len;
 
+               vdev_dbg(vdev, "res type %u bar %u offset 0x%x count %u\n",
+                        type, bar_num, bar_offset, count);
+
                r++;
 
                if (bar_num >= num_bars)
@@ -90,6 +93,9 @@ static int vnic_dev_discover_res(struct vnic_dev *vdev,
                case RES_TYPE_RQ:
                case RES_TYPE_CQ:
                case RES_TYPE_INTR_CTRL:
+               case RES_TYPE_ADMIN_WQ:
+               case RES_TYPE_ADMIN_RQ:
+               case RES_TYPE_ADMIN_CQ:
                        /* each count is stride bytes long */
                        len = count * VNIC_RES_STRIDE;
                        if (len + bar_offset > bar[bar_num].len) {
@@ -102,6 +108,7 @@ static int vnic_dev_discover_res(struct vnic_dev *vdev,
                case RES_TYPE_INTR_PBA_LEGACY:
                case RES_TYPE_DEVCMD:
                case RES_TYPE_DEVCMD2:
+               case RES_TYPE_SRIOV_INTR:
                        len = count;
                        break;
                default:
@@ -135,6 +142,9 @@ void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
        case RES_TYPE_RQ:
        case RES_TYPE_CQ:
        case RES_TYPE_INTR_CTRL:
+       case RES_TYPE_ADMIN_WQ:
+       case RES_TYPE_ADMIN_RQ:
+       case RES_TYPE_ADMIN_CQ:
                return (char __iomem *)vdev->res[type].vaddr +
                        index * VNIC_RES_STRIDE;
        default:
index b4776e334d63b3e44dbf108deae6db416b95d246..d327821fa9b965790880c3a5d05c05b58c3db560 100644 (file)
@@ -42,6 +42,10 @@ enum vnic_res_type {
        RES_TYPE_DEPRECATED1,           /* Old version of devcmd 2 */
        RES_TYPE_DEPRECATED2,           /* Old version of devcmd 2 */
        RES_TYPE_DEVCMD2,               /* Device control region */
+       RES_TYPE_SRIOV_INTR = 45,       /* SR-IOV VF interrupt */
+       RES_TYPE_ADMIN_WQ = 49, /* Admin channel WQ */
+       RES_TYPE_ADMIN_RQ,              /* Admin channel RQ */
+       RES_TYPE_ADMIN_CQ,              /* Admin channel CQ */
 
        RES_TYPE_MAX,                   /* Count of resource types */
 };