device_set_wakeup_capable(&pdev->dev, true);
  
 +      if (of_property_read_bool(np, "wakeup-source"))
 +              device_set_wakeup_enable(&pdev->dev, true);
 +
 +      return 0;
++
+ out_put_node:
+       of_node_put(gpr_np);
+       return ret;
  }
  
  static const struct of_device_id flexcan_of_match[] = {
 
                return;
  
        list_for_each_entry(e, &nhe->encap_list, encap_list) {
 -              struct encap_flow_item *efi;
 +              struct encap_flow_item *efi, *tmp;
                if (!(e->flags & MLX5_ENCAP_ENTRY_VALID))
                        continue;
 -              list_for_each_entry(efi, &e->flows, list) {
 +              list_for_each_entry_safe(efi, tmp, &e->flows, list) {
                        flow = container_of(efi, struct mlx5e_tc_flow,
                                            encaps[efi->index]);
 -                      if (flow->flags & MLX5E_TC_FLOW_OFFLOADED) {
 +                      if (IS_ERR(mlx5e_flow_get(flow)))
 +                              continue;
 +
 +                      if (mlx5e_is_offloaded_flow(flow)) {
                                counter = mlx5e_tc_get_counter(flow);
-                               mlx5_fc_query_cached(counter, &bytes, &packets, &lastuse);
+                               lastuse = mlx5_fc_query_lastuse(counter);
                                if (time_after((unsigned long)lastuse, nhe->reported_lastuse)) {
 +                                      mlx5e_flow_put(netdev_priv(e->out_dev), flow);
                                        neigh_used = true;
                                        break;
                                }