if (!required_opp_tables)
                return 0;
 
+       /*
+        * We only support genpd's OPPs in the "required-opps" for now, as we
+        * don't know much about other use cases. Error out if the required OPP
+        * doesn't belong to a genpd.
+        */
+       if (unlikely(!required_opp_tables[0]->is_genpd)) {
+               dev_err(dev, "required-opps don't belong to a genpd\n");
+               return -ENOENT;
+       }
+
        /* required-opps not fully initialized yet */
        if (lazy_linking_pending(opp_table))
                return -EBUSY;
 
                required_opp_tables[i] = _find_table_of_opp_np(required_np);
                of_node_put(required_np);
 
-               if (IS_ERR(required_opp_tables[i])) {
+               if (IS_ERR(required_opp_tables[i]))
                        lazy = true;
-                       continue;
-               }
-
-               /*
-                * We only support genpd's OPPs in the "required-opps" for now,
-                * as we don't know how much about other cases. Error out if the
-                * required OPP doesn't belong to a genpd.
-                */
-               if (!required_opp_tables[i]->is_genpd) {
-                       dev_err(dev, "required-opp doesn't belong to genpd: %pOF\n",
-                               required_np);
-                       goto free_required_tables;
-               }
        }
 
        /* Let's do the linking later on */
        struct dev_pm_opp *opp;
        int i, ret;
 
-       /*
-        * We only support genpd's OPPs in the "required-opps" for now,
-        * as we don't know much about other cases.
-        */
-       if (!new_table->is_genpd)
-               return;
-
        mutex_lock(&opp_table_lock);
 
        list_for_each_entry_safe(opp_table, temp, &lazy_opp_tables, lazy) {
                return ERR_PTR(-ENOMEM);
 
        ret = _read_opp_key(new_opp, opp_table, np, &rate_not_available);
-       if (ret < 0 && !opp_table->is_genpd) {
+       if (ret < 0) {
                dev_err(dev, "%s: opp key field not found\n", __func__);
                goto free_opp;
        }