ocelot->vcap_is2_actions= felix->info->vcap_is2_actions;
        ocelot->vcap            = felix->info->vcap;
        ocelot->ops             = felix->info->ops;
-       ocelot->inj_prefix      = OCELOT_TAG_PREFIX_NONE;
-       ocelot->xtr_prefix      = OCELOT_TAG_PREFIX_LONG;
+       ocelot->inj_prefix      = OCELOT_TAG_PREFIX_SHORT;
+       ocelot->xtr_prefix      = OCELOT_TAG_PREFIX_SHORT;
 
        port_phy_modes = kcalloc(num_phys_ports, sizeof(phy_interface_t),
                                 GFP_KERNEL);
                        return PTR_ERR(target);
                }
 
-               template = devm_kzalloc(ocelot->dev, OCELOT_TAG_LEN,
+               template = devm_kzalloc(ocelot->dev, OCELOT_TOTAL_TAG_LEN,
                                        GFP_KERNEL);
                if (!template) {
                        dev_err(ocelot->dev,
 
        struct ocelot_port *ocelot_port = ocelot->ports[port];
        u8 *template = ocelot_port->xmit_template;
        u64 bypass, dest, src;
+       __be32 *prefix;
+       u8 *injection;
 
        /* Set the source port as the CPU port module and not the
         * NPI port
        dest = BIT(port);
        bypass = true;
 
-       packing(template, &bypass, 127, 127, OCELOT_TAG_LEN, PACK, 0);
-       packing(template, &dest,    68,  56, OCELOT_TAG_LEN, PACK, 0);
-       packing(template, &src,     46,  43, OCELOT_TAG_LEN, PACK, 0);
+       injection = template + OCELOT_SHORT_PREFIX_LEN;
+       prefix = (__be32 *)template;
+
+       packing(injection, &bypass, 127, 127, OCELOT_TAG_LEN, PACK, 0);
+       packing(injection, &dest,    68,  56, OCELOT_TAG_LEN, PACK, 0);
+       packing(injection, &src,     46,  43, OCELOT_TAG_LEN, PACK, 0);
+
+       *prefix = cpu_to_be32(0x8880000a);
 }
 
 static const struct felix_info felix_info_vsc9959 = {
 
        struct ocelot_port *ocelot_port = ocelot->ports[port];
        u8 *template = ocelot_port->xmit_template;
        u64 bypass, dest, src;
+       __be32 *prefix;
+       u8 *injection;
 
        /* Set the source port as the CPU port module and not the
         * NPI port
        dest = BIT(port);
        bypass = true;
 
-       packing(template, &bypass, 127, 127, OCELOT_TAG_LEN, PACK, 0);
-       packing(template, &dest,    67,  57, OCELOT_TAG_LEN, PACK, 0);
-       packing(template, &src,     46,  43, OCELOT_TAG_LEN, PACK, 0);
+       injection = template + OCELOT_SHORT_PREFIX_LEN;
+       prefix = (__be32 *)template;
+
+       packing(injection, &bypass, 127, 127, OCELOT_TAG_LEN, PACK, 0);
+       packing(injection, &dest,    67,  57, OCELOT_TAG_LEN, PACK, 0);
+       packing(injection, &src,     46,  43, OCELOT_TAG_LEN, PACK, 0);
+
+       *prefix = cpu_to_be32(0x88800005);
 }
 
 static const struct felix_info seville_info_vsc9953 = {
 
 #define OCELOT_TAG_LEN                 16
 #define OCELOT_SHORT_PREFIX_LEN                4
 #define OCELOT_LONG_PREFIX_LEN         16
+#define OCELOT_TOTAL_TAG_LEN   (OCELOT_SHORT_PREFIX_LEN + OCELOT_TAG_LEN)
 
 #define OCELOT_SPEED_2500              0
 #define OCELOT_SPEED_1000              1
 
        struct dsa_switch *ds = dp->ds;
        struct ocelot *ocelot = ds->priv;
        struct ocelot_port *ocelot_port;
+       u8 *prefix, *injection;
        u64 qos_class, rew_op;
-       u8 *injection;
+       int err;
 
-       if (unlikely(skb_cow_head(skb, OCELOT_TAG_LEN) < 0)) {
+       err = skb_cow_head(skb, OCELOT_TOTAL_TAG_LEN);
+       if (unlikely(err < 0)) {
                netdev_err(netdev, "Cannot make room for tag.\n");
                return NULL;
        }
 
        injection = skb_push(skb, OCELOT_TAG_LEN);
 
-       memcpy(injection, ocelot_port->xmit_template, OCELOT_TAG_LEN);
+       prefix = skb_push(skb, OCELOT_SHORT_PREFIX_LEN);
+
+       memcpy(prefix, ocelot_port->xmit_template, OCELOT_TOTAL_TAG_LEN);
+
        /* Fix up the fields which are not statically determined
         * in the template
         */
         * so it points to the beginning of the frame.
         */
        skb_push(skb, ETH_HLEN);
-       /* We don't care about the long prefix, it is just for easy entrance
+       /* We don't care about the short prefix, it is just for easy entrance
         * into the DSA master's RX filter. Discard it now by moving it into
         * the headroom.
         */
-       skb_pull(skb, OCELOT_LONG_PREFIX_LEN);
+       skb_pull(skb, OCELOT_SHORT_PREFIX_LEN);
        /* And skb->data now points to the extraction frame header.
         * Keep a pointer to it.
         */
        skb_pull(skb, ETH_HLEN);
 
        /* Remove from inet csum the extraction header */
-       skb_postpull_rcsum(skb, start, OCELOT_LONG_PREFIX_LEN + OCELOT_TAG_LEN);
+       skb_postpull_rcsum(skb, start, OCELOT_TOTAL_TAG_LEN);
 
        packing(extraction, &src_port,  46, 43, OCELOT_TAG_LEN, UNPACK, 0);
        packing(extraction, &qos_class, 19, 17, OCELOT_TAG_LEN, UNPACK, 0);
        .proto                  = DSA_TAG_PROTO_OCELOT,
        .xmit                   = ocelot_xmit,
        .rcv                    = ocelot_rcv,
-       .overhead               = OCELOT_TAG_LEN + OCELOT_LONG_PREFIX_LEN,
+       .overhead               = OCELOT_TOTAL_TAG_LEN,
+       .promisc_on_master      = true,
 };
 
 MODULE_LICENSE("GPL v2");