.dev_type = ARPHRD_IP6GRE,
        .ul_proto = MLXSW_SP_L3_PROTO_IPV6,
        .inc_parsing_depth = true,
+       .double_rif_entry = true,
        .parms_init = mlxsw_sp1_ipip_netdev_parms_init_gre6,
        .nexthop_update = mlxsw_sp1_ipip_nexthop_update_gre6,
        .decap_config = mlxsw_sp1_ipip_decap_config_gre6,
 
        };
        u16 vid;
        bool lag;
+       bool double_entry;
 };
 
 struct mlxsw_sp_rif_subport {
        lb_params = (struct mlxsw_sp_rif_params_ipip_lb) {
                .common.dev = ol_dev,
                .common.lag = false,
+               .common.double_entry = ipip_ops->double_rif_entry,
                .lb_config = ipip_ops->ol_loopback_config(mlxsw_sp, ol_dev),
        };
 
                    const struct mlxsw_sp_rif_params *params,
                    struct netlink_ext_ack *extack)
 {
+       u8 rif_entries = params->double_entry ? 2 : 1;
        u32 tb_id = l3mdev_fib_table(params->dev);
        const struct mlxsw_sp_rif_ops *ops;
        struct mlxsw_sp_fid *fid = NULL;
        enum mlxsw_sp_rif_type type;
        struct mlxsw_sp_rif *rif;
        struct mlxsw_sp_vr *vr;
-       u8 rif_entries = 1;
        u16 rif_index;
        int i, err;