return 0;
 }
 
-static int lan966x_vcap_enable(struct net_device *dev,
-                              struct vcap_admin *admin,
-                              bool enable)
-{
-       struct lan966x_port *port = netdev_priv(dev);
-       struct lan966x *lan966x = port->lan966x;
-
-       lan_rmw(ANA_VCAP_S2_CFG_ENA_SET(enable),
-               ANA_VCAP_S2_CFG_ENA,
-               lan966x, ANA_VCAP_S2_CFG(port->chip_port));
-
-       return 0;
-}
-
 static struct vcap_operations lan966x_vcap_ops = {
        .validate_keyset = lan966x_vcap_validate_keyset,
        .add_default_fields = lan966x_vcap_add_default_fields,
        .update = lan966x_vcap_update,
        .move = lan966x_vcap_move,
        .port_info = lan966x_vcap_port_info,
-       .enable = lan966x_vcap_enable,
 };
 
 static void lan966x_vcap_admin_free(struct vcap_admin *admin)
                list_add_tail(&admin->list, &ctrl->list);
        }
 
+       for (int p = 0; p < lan966x->num_phys_ports; ++p)
+               if (lan966x->ports[p])
+                       lan_rmw(ANA_VCAP_S2_CFG_ENA_SET(true),
+                               ANA_VCAP_S2_CFG_ENA, lan966x,
+                               ANA_VCAP_S2_CFG(lan966x->ports[p]->chip_port));
+
        lan966x->vcap_ctrl = ctrl;
 
        return 0;
 
                /* Get lookup state */
                value = spx5_rd(sparx5, ANA_ACL_VCAP_S2_CFG(port->portno));
                out->prf(out->dst, "\n      state: ");
-               if (ANA_ACL_VCAP_S2_CFG_SEC_ENA_GET(value))
+               if (ANA_ACL_VCAP_S2_CFG_SEC_ENA_GET(value) & BIT(lookup))
                        out->prf(out->dst, "on");
                else
                        out->prf(out->dst, "off");
 
        sparx5_vcap_wait_super_update(sparx5);
 }
 
-/* Enable all lookups in the VCAP instance */
-static int sparx5_vcap_enable(struct net_device *ndev,
-                             struct vcap_admin *admin,
-                             bool enable)
-{
-       struct sparx5_port *port = netdev_priv(ndev);
-       struct sparx5 *sparx5;
-       int portno;
-
-       sparx5 = port->sparx5;
-       portno = port->portno;
-
-       /* For now we only consider IS2 */
-       if (enable)
-               spx5_wr(ANA_ACL_VCAP_S2_CFG_SEC_ENA_SET(0xf), sparx5,
-                       ANA_ACL_VCAP_S2_CFG(portno));
-       else
-               spx5_wr(ANA_ACL_VCAP_S2_CFG_SEC_ENA_SET(0), sparx5,
-                       ANA_ACL_VCAP_S2_CFG(portno));
-       return 0;
-}
-
 /* API callback operations: only IS2 is supported for now */
 static struct vcap_operations sparx5_vcap_ops = {
        .validate_keyset = sparx5_vcap_validate_keyset,
        .update = sparx5_vcap_update,
        .move = sparx5_vcap_move,
        .port_info = sparx5_port_info,
-       .enable = sparx5_vcap_enable,
 };
 
 /* Enable lookups per port and set the keyset generation: only IS2 for now */
                                ANA_ACL_VCAP_S2_KEY_SEL(portno, lookup));
                }
        }
+       /* IS2 lookups are in bit 0:3 */
+       for (portno = 0; portno < SPX5_PORTS; ++portno)
+               spx5_rmw(ANA_ACL_VCAP_S2_CFG_SEC_ENA_SET(0xf),
+                        ANA_ACL_VCAP_S2_CFG_SEC_ENA,
+                        sparx5,
+                        ANA_ACL_VCAP_S2_CFG(portno));
 }
 
 /* Disable lookups per port and set the keyset generation: only IS2 for now */
 
            !ctrl->ops->add_default_fields || !ctrl->ops->cache_erase ||
            !ctrl->ops->cache_write || !ctrl->ops->cache_read ||
            !ctrl->ops->init || !ctrl->ops->update || !ctrl->ops->move ||
-           !ctrl->ops->port_info || !ctrl->ops->enable) {
+           !ctrl->ops->port_info) {
                pr_err("%s:%d: client operations are missing\n",
                       __func__, __LINE__);
                return -ENOENT;
        if (admin->vinst || chain_id > admin->first_cid)
                return -EFAULT;
 
-       err = vctrl->ops->enable(ndev, admin, enable);
-       if (err)
-               return err;
-
        if (chain_id) {
                if (vcap_is_enabled(admin, ndev, cookie))
                        return -EADDRINUSE;
 
                (struct net_device *ndev,
                 struct vcap_admin *admin,
                 struct vcap_output_print *out);
-       /* enable/disable the lookups in a vcap instance */
-       int (*enable)
-               (struct net_device *ndev,
-                struct vcap_admin *admin,
-                bool enable);
 };
 
 /* VCAP API Client control interface */
 
        return 0;
 }
 
-static int vcap_test_enable(struct net_device *ndev,
-                           struct vcap_admin *admin,
-                           bool enable)
-{
-       return 0;
-}
-
 static struct vcap_operations test_callbacks = {
        .validate_keyset = test_val_keyset,
        .add_default_fields = test_add_def_fields,
        .update = test_cache_update,
        .move = test_cache_move,
        .port_info = vcap_test_port_info,
-       .enable = vcap_test_enable,
 };
 
 static struct vcap_control test_vctrl = {
        INIT_LIST_HEAD(&test_vctrl.list);
        INIT_LIST_HEAD(&admin->list);
        INIT_LIST_HEAD(&admin->rules);
+       INIT_LIST_HEAD(&admin->enabled);
        list_add_tail(&admin->list, &test_vctrl.list);
        memset(test_updateaddr, 0, sizeof(test_updateaddr));
        test_updateaddridx = 0;
 
        return 0;
 }
 
-static int vcap_test_enable(struct net_device *ndev,
-                           struct vcap_admin *admin,
-                           bool enable)
-{
-       return 0;
-}
-
 static struct vcap_operations test_callbacks = {
        .validate_keyset = test_val_keyset,
        .add_default_fields = test_add_def_fields,
        .update = test_cache_update,
        .move = test_cache_move,
        .port_info = vcap_test_port_info,
-       .enable = vcap_test_enable,
 };
 
 static struct vcap_control test_vctrl = {
        INIT_LIST_HEAD(&test_vctrl.list);
        INIT_LIST_HEAD(&admin->list);
        INIT_LIST_HEAD(&admin->rules);
+       INIT_LIST_HEAD(&admin->enabled);
        list_add_tail(&admin->list, &test_vctrl.list);
        memset(test_updateaddr, 0, sizeof(test_updateaddr));
        test_updateaddridx = 0;