outer_tagging_rule->key_type = OCELOT_VCAP_KEY_ANY;
        outer_tagging_rule->prio = 1;
-       outer_tagging_rule->id.cookie = port;
+       outer_tagging_rule->id.cookie = OCELOT_VCAP_ES0_TAG_8021Q_RXVLAN(ocelot, port);
        outer_tagging_rule->id.tc_offload = false;
        outer_tagging_rule->block_id = VCAP_ES0;
        outer_tagging_rule->type = OCELOT_VCAP_FILTER_OFFLOAD;
        untagging_rule->vlan.vid.value = vid;
        untagging_rule->vlan.vid.mask = VLAN_VID_MASK;
        untagging_rule->prio = 1;
-       untagging_rule->id.cookie = port;
+       untagging_rule->id.cookie = OCELOT_VCAP_IS1_TAG_8021Q_TXVLAN(ocelot, port);
        untagging_rule->id.tc_offload = false;
        untagging_rule->block_id = VCAP_IS1;
        untagging_rule->type = OCELOT_VCAP_FILTER_OFFLOAD;
        redirect_rule->ingress_port_mask = BIT(upstream);
        redirect_rule->pag = port;
        redirect_rule->prio = 1;
-       redirect_rule->id.cookie = port;
+       redirect_rule->id.cookie = OCELOT_VCAP_IS2_TAG_8021Q_TXVLAN(ocelot, port);
        redirect_rule->id.tc_offload = false;
        redirect_rule->block_id = VCAP_IS2;
        redirect_rule->type = OCELOT_VCAP_FILTER_OFFLOAD;
        *(__be16 *)tagging_rule->key.etype.etype.mask = htons(0xffff);
        tagging_rule->ingress_port_mask = user_ports;
        tagging_rule->prio = 1;
-       tagging_rule->id.cookie = ocelot->num_phys_ports;
+       tagging_rule->id.cookie = OCELOT_VCAP_IS1_TAG_8021Q_PTP_MMIO(ocelot);
        tagging_rule->id.tc_offload = false;
        tagging_rule->block_id = VCAP_IS1;
        tagging_rule->type = OCELOT_VCAP_FILTER_OFFLOAD;
        redirect_rule->ingress_port_mask = user_ports;
        redirect_rule->pag = ocelot->num_phys_ports;
        redirect_rule->prio = 1;
-       redirect_rule->id.cookie = ocelot->num_phys_ports;
+       redirect_rule->id.cookie = OCELOT_VCAP_IS2_TAG_8021Q_PTP_MMIO(ocelot);
        redirect_rule->id.tc_offload = false;
        redirect_rule->block_id = VCAP_IS2;
        redirect_rule->type = OCELOT_VCAP_FILTER_OFFLOAD;
 
 
 static int ocelot_l2_ptp_trap_add(struct ocelot *ocelot, int port)
 {
-       unsigned long l2_cookie = ocelot->num_phys_ports + 1;
+       unsigned long l2_cookie = OCELOT_VCAP_IS2_L2_PTP_TRAP(ocelot);
 
        return ocelot_trap_add(ocelot, port, l2_cookie,
                               ocelot_populate_l2_ptp_trap_key);
 
 static int ocelot_l2_ptp_trap_del(struct ocelot *ocelot, int port)
 {
-       unsigned long l2_cookie = ocelot->num_phys_ports + 1;
+       unsigned long l2_cookie = OCELOT_VCAP_IS2_L2_PTP_TRAP(ocelot);
 
        return ocelot_trap_del(ocelot, port, l2_cookie);
 }
 
 static int ocelot_ipv4_ptp_trap_add(struct ocelot *ocelot, int port)
 {
-       unsigned long ipv4_gen_cookie = ocelot->num_phys_ports + 2;
-       unsigned long ipv4_ev_cookie = ocelot->num_phys_ports + 3;
+       unsigned long ipv4_gen_cookie = OCELOT_VCAP_IS2_IPV4_GEN_PTP_TRAP(ocelot);
+       unsigned long ipv4_ev_cookie = OCELOT_VCAP_IS2_IPV4_EV_PTP_TRAP(ocelot);
        int err;
 
        err = ocelot_trap_add(ocelot, port, ipv4_ev_cookie,
 
 static int ocelot_ipv4_ptp_trap_del(struct ocelot *ocelot, int port)
 {
-       unsigned long ipv4_gen_cookie = ocelot->num_phys_ports + 2;
-       unsigned long ipv4_ev_cookie = ocelot->num_phys_ports + 3;
+       unsigned long ipv4_gen_cookie = OCELOT_VCAP_IS2_IPV4_GEN_PTP_TRAP(ocelot);
+       unsigned long ipv4_ev_cookie = OCELOT_VCAP_IS2_IPV4_EV_PTP_TRAP(ocelot);
        int err;
 
        err = ocelot_trap_del(ocelot, port, ipv4_ev_cookie);
 
 static int ocelot_ipv6_ptp_trap_add(struct ocelot *ocelot, int port)
 {
-       unsigned long ipv6_gen_cookie = ocelot->num_phys_ports + 4;
-       unsigned long ipv6_ev_cookie = ocelot->num_phys_ports + 5;
+       unsigned long ipv6_gen_cookie = OCELOT_VCAP_IS2_IPV6_GEN_PTP_TRAP(ocelot);
+       unsigned long ipv6_ev_cookie = OCELOT_VCAP_IS2_IPV6_EV_PTP_TRAP(ocelot);
        int err;
 
        err = ocelot_trap_add(ocelot, port, ipv6_ev_cookie,
 
 static int ocelot_ipv6_ptp_trap_del(struct ocelot *ocelot, int port)
 {
-       unsigned long ipv6_gen_cookie = ocelot->num_phys_ports + 4;
-       unsigned long ipv6_ev_cookie = ocelot->num_phys_ports + 5;
+       unsigned long ipv6_gen_cookie = OCELOT_VCAP_IS2_IPV6_GEN_PTP_TRAP(ocelot);
+       unsigned long ipv6_ev_cookie = OCELOT_VCAP_IS2_IPV6_EV_PTP_TRAP(ocelot);
        int err;
 
        err = ocelot_trap_del(ocelot, port, ipv6_ev_cookie);
 
 
        filter->key_type = OCELOT_VCAP_KEY_ETYPE;
        filter->prio = 1;
-       filter->id.cookie = src_port;
+       filter->id.cookie = OCELOT_VCAP_IS2_MRP_REDIRECT(ocelot, src_port);
        filter->id.tc_offload = false;
        filter->block_id = VCAP_IS2;
        filter->type = OCELOT_VCAP_FILTER_OFFLOAD;
        return err;
 }
 
-static int ocelot_mrp_copy_add_vcap(struct ocelot *ocelot, int port,
-                                   int prio, unsigned long cookie)
+static int ocelot_mrp_copy_add_vcap(struct ocelot *ocelot, int port, int prio)
 {
        const u8 mrp_mask[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 };
        struct ocelot_vcap_filter *filter;
 
        filter->key_type = OCELOT_VCAP_KEY_ETYPE;
        filter->prio = prio;
-       filter->id.cookie = cookie;
+       filter->id.cookie = OCELOT_VCAP_IS2_MRP_TRAP(ocelot, port);
        filter->id.tc_offload = false;
        filter->block_id = VCAP_IS2;
        filter->type = OCELOT_VCAP_FILTER_OFFLOAD;
        ocelot_mrp_save_mac(ocelot, ocelot_port);
 
        if (mrp->ring_role != BR_MRP_RING_ROLE_MRC)
-               return ocelot_mrp_copy_add_vcap(ocelot, port, 1,
-                                               port + ocelot->num_phys_ports);
+               return ocelot_mrp_copy_add_vcap(ocelot, port, 1);
 
        dst_port = ocelot_mrp_find_partner_port(ocelot, ocelot_port);
        if (dst_port == -1)
        if (err)
                return err;
 
-       err = ocelot_mrp_copy_add_vcap(ocelot, port, 2,
-                                      port + ocelot->num_phys_ports);
+       err = ocelot_mrp_copy_add_vcap(ocelot, port, 2);
        if (err) {
-               ocelot_mrp_del_vcap(ocelot, port);
+               ocelot_mrp_del_vcap(ocelot,
+                                   OCELOT_VCAP_IS2_MRP_REDIRECT(ocelot, port));
                return err;
        }
 
        if (ocelot_port->mrp_ring_id != mrp->ring_id)
                return 0;
 
-       ocelot_mrp_del_vcap(ocelot, port);
-       ocelot_mrp_del_vcap(ocelot, port + ocelot->num_phys_ports);
+       ocelot_mrp_del_vcap(ocelot, OCELOT_VCAP_IS2_MRP_REDIRECT(ocelot, port));
+       ocelot_mrp_del_vcap(ocelot, OCELOT_VCAP_IS2_MRP_TRAP(ocelot, port));
 
        for (i = 0; i < ocelot->num_phys_ports; ++i) {
                ocelot_port = ocelot->ports[i];
 
 
 #include <soc/mscc/ocelot.h>
 
+/* Cookie definitions for private VCAP filters installed by the driver.
+ * Must be unique per VCAP block.
+ */
+#define OCELOT_VCAP_ES0_TAG_8021Q_RXVLAN(ocelot, port)         (port)
+#define OCELOT_VCAP_IS1_TAG_8021Q_TXVLAN(ocelot, port)         (port)
+#define OCELOT_VCAP_IS1_TAG_8021Q_PTP_MMIO(ocelot)             ((ocelot)->num_phys_ports)
+#define OCELOT_VCAP_IS2_TAG_8021Q_TXVLAN(ocelot, port)         (port)
+#define OCELOT_VCAP_IS2_TAG_8021Q_PTP_MMIO(ocelot)             ((ocelot)->num_phys_ports)
+#define OCELOT_VCAP_IS2_L2_PTP_TRAP(ocelot)                    ((ocelot)->num_phys_ports + 1)
+#define OCELOT_VCAP_IS2_IPV4_GEN_PTP_TRAP(ocelot)              ((ocelot)->num_phys_ports + 2)
+#define OCELOT_VCAP_IS2_IPV4_EV_PTP_TRAP(ocelot)               ((ocelot)->num_phys_ports + 3)
+#define OCELOT_VCAP_IS2_IPV6_GEN_PTP_TRAP(ocelot)              ((ocelot)->num_phys_ports + 4)
+#define OCELOT_VCAP_IS2_IPV6_EV_PTP_TRAP(ocelot)               ((ocelot)->num_phys_ports + 5)
+#define OCELOT_VCAP_IS2_MRP_REDIRECT(ocelot, port)             (port)
+#define OCELOT_VCAP_IS2_MRP_TRAP(ocelot, port)                 ((ocelot)->num_phys_ports + (port))
+
 /* =================================================================
  *  VCAP Common
  * =================================================================