|
@@ -747,6 +747,18 @@ static int gfar_parse_group(struct device_node *np,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int gfar_of_group_count(struct device_node *np)
|
|
|
|
+{
|
|
|
|
+ struct device_node *child;
|
|
|
|
+ int num = 0;
|
|
|
|
+
|
|
|
|
+ for_each_available_child_of_node(np, child)
|
|
|
|
+ if (!of_node_cmp(child->name, "queue-group"))
|
|
|
|
+ num++;
|
|
|
|
+
|
|
|
|
+ return num;
|
|
|
|
+}
|
|
|
|
+
|
|
static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
|
|
static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
|
|
{
|
|
{
|
|
const char *model;
|
|
const char *model;
|
|
@@ -784,7 +796,7 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
|
|
num_rx_qs = 1;
|
|
num_rx_qs = 1;
|
|
} else { /* MQ_MG_MODE */
|
|
} else { /* MQ_MG_MODE */
|
|
/* get the actual number of supported groups */
|
|
/* get the actual number of supported groups */
|
|
- unsigned int num_grps = of_get_available_child_count(np);
|
|
|
|
|
|
+ unsigned int num_grps = gfar_of_group_count(np);
|
|
|
|
|
|
if (num_grps == 0 || num_grps > MAXGROUPS) {
|
|
if (num_grps == 0 || num_grps > MAXGROUPS) {
|
|
dev_err(&ofdev->dev, "Invalid # of int groups(%d)\n",
|
|
dev_err(&ofdev->dev, "Invalid # of int groups(%d)\n",
|
|
@@ -851,7 +863,10 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
|
|
|
|
|
|
/* Parse and initialize group specific information */
|
|
/* Parse and initialize group specific information */
|
|
if (priv->mode == MQ_MG_MODE) {
|
|
if (priv->mode == MQ_MG_MODE) {
|
|
- for_each_child_of_node(np, child) {
|
|
|
|
|
|
+ for_each_available_child_of_node(np, child) {
|
|
|
|
+ if (of_node_cmp(child->name, "queue-group"))
|
|
|
|
+ continue;
|
|
|
|
+
|
|
err = gfar_parse_group(child, priv, model);
|
|
err = gfar_parse_group(child, priv, model);
|
|
if (err)
|
|
if (err)
|
|
goto err_grp_init;
|
|
goto err_grp_init;
|