}
        if (filter->block_id == VCAP_IS1 || filter->block_id == VCAP_IS2)
                filter->lookup = ocelot_chain_to_lookup(chain);
+       if (filter->block_id == VCAP_IS2)
+               filter->pag = ocelot_chain_to_pag(chain);
 
        filter->goto_target = -1;
        filter->type = OCELOT_VCAP_FILTER_DUMMY;
                        filter->type = OCELOT_VCAP_FILTER_OFFLOAD;
                        break;
                case FLOW_ACTION_POLICE:
-                       if (filter->block_id != VCAP_IS2) {
+                       if (filter->block_id != VCAP_IS2 ||
+                           filter->lookup != 0) {
                                NL_SET_ERR_MSG_MOD(extack,
-                                                  "Police action can only be offloaded to VCAP IS2");
+                                                  "Police action can only be offloaded to VCAP IS2 lookup 0");
                                return -EOPNOTSUPP;
                        }
                        if (filter->goto_target != -1) {
                case FLOW_ACTION_GOTO:
                        filter->goto_target = a->chain_index;
 
-                       if (filter->block_id == VCAP_IS1 &&
-                           ocelot_chain_to_lookup(chain) == 2) {
+                       if (filter->block_id == VCAP_IS1 && filter->lookup == 2) {
                                int pag = ocelot_chain_to_pag(filter->goto_target);
 
                                filter->action.pag_override_mask = 0xff;
 
 
        data.type = IS2_ACTION_TYPE_NORMAL;
 
-       vcap_key_set(vcap, &data, VCAP_IS2_HK_PAG, 0, 0);
+       vcap_key_set(vcap, &data, VCAP_IS2_HK_PAG, filter->pag, 0xff);
+       vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_FIRST,
+                        (filter->lookup == 0) ? OCELOT_VCAP_BIT_1 :
+                        OCELOT_VCAP_BIT_0);
        vcap_key_set(vcap, &data, VCAP_IS2_HK_IGR_PORT_MASK, 0,
                     ~filter->ingress_port_mask);
        vcap_key_bit_set(vcap, &data, VCAP_IS2_HK_FIRST, OCELOT_VCAP_BIT_ANY);
        if (filter->prio != 0)
                data.tg |= data.tg_value;
 
+       vcap_key_set(vcap, &data, VCAP_IS1_HK_LOOKUP, filter->lookup, 0x3);
        vcap_key_set(vcap, &data, VCAP_IS1_HK_IGR_PORT_MASK, 0,
                     ~filter->ingress_port_mask);
        vcap_key_bit_set(vcap, &data, VCAP_IS1_HK_L2_MC, filter->dmac_mc);