Message ID | 1465852752-11018-2-git-send-email-tthayer@opensource.altera.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Jun 13, 2016 at 04:19:06PM -0500, tthayer@opensource.altera.com wrote: > From: Thor Thayer <tthayer@opensource.altera.com> > > In preparation for the Arria10 ECC modules, check the status > of the parent in the device tree to ensure the block is enabled. > Skip if no parent phandle is set in the device tree. > > Signed-off-by: Thor Thayer <tthayer@opensource.altera.com> > --- > v2 No change > v3 Move check into validate_parent_available(). > --- > drivers/edac/altera_edac.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c > index 6f5d586..926bcaf 100644 > --- a/drivers/edac/altera_edac.c > +++ b/drivers/edac/altera_edac.c > @@ -1125,6 +1125,20 @@ static void altr_edac_a10_irq_handler(struct irq_desc *desc) > chained_irq_exit(chip, desc); > } > > +static int validate_parent_available(struct device_node *np) > +{ > + struct device_node *parent; > + > + /* Ensure parent device is enabled if parent node exists */ > + parent = of_parse_phandle(np, "parent", 0); > + if (parent && !of_device_is_available(parent)) { > + of_node_put(parent); > + return -ENODEV; > + } > + of_node_put(parent); > + return 0; > +} How about this - it is a bit simpler: static int validate_parent_available(struct device_node *np) { struct device_node *parent; int ret = 0; /* Ensure parent device is enabled if parent node exists */ parent = of_parse_phandle(np, "parent", 0); if (parent && !of_device_is_available(parent)) ret = -ENODEV; of_node_put(parent); return ret; } ?
On 06/17/2016 11:46 AM, Borislav Petkov wrote: > On Mon, Jun 13, 2016 at 04:19:06PM -0500, tthayer@opensource.altera.com wrote: >> From: Thor Thayer <tthayer@opensource.altera.com> >> >> In preparation for the Arria10 ECC modules, check the status >> of the parent in the device tree to ensure the block is enabled. >> Skip if no parent phandle is set in the device tree. >> >> Signed-off-by: Thor Thayer <tthayer@opensource.altera.com> >> --- >> v2 No change >> v3 Move check into validate_parent_available(). >> --- >> drivers/edac/altera_edac.c | 17 +++++++++++++++++ >> 1 file changed, 17 insertions(+) >> >> diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c >> index 6f5d586..926bcaf 100644 >> --- a/drivers/edac/altera_edac.c >> +++ b/drivers/edac/altera_edac.c >> @@ -1125,6 +1125,20 @@ static void altr_edac_a10_irq_handler(struct irq_desc *desc) >> chained_irq_exit(chip, desc); >> } >> >> +static int validate_parent_available(struct device_node *np) >> +{ >> + struct device_node *parent; >> + >> + /* Ensure parent device is enabled if parent node exists */ >> + parent = of_parse_phandle(np, "parent", 0); >> + if (parent && !of_device_is_available(parent)) { >> + of_node_put(parent); >> + return -ENODEV; >> + } >> + of_node_put(parent); >> + return 0; >> +} > > How about this - it is a bit simpler: > > static int validate_parent_available(struct device_node *np) > { > struct device_node *parent; > int ret = 0; > > /* Ensure parent device is enabled if parent node exists */ > parent = of_parse_phandle(np, "parent", 0); > if (parent && !of_device_is_available(parent)) > ret = -ENODEV; > > of_node_put(parent); > return ret; > } > > ? > Yes. Thanks! I will make the change.
On Fri, Jun 17, 2016 at 11:54:04AM -0500, Thor Thayer wrote:
> Yes. Thanks! I will make the change.
No need, already did and applied. You can drop this patch from your
queue.
Thanks.
diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index 6f5d586..926bcaf 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c @@ -1125,6 +1125,20 @@ static void altr_edac_a10_irq_handler(struct irq_desc *desc) chained_irq_exit(chip, desc); } +static int validate_parent_available(struct device_node *np) +{ + struct device_node *parent; + + /* Ensure parent device is enabled if parent node exists */ + parent = of_parse_phandle(np, "parent", 0); + if (parent && !of_device_is_available(parent)) { + of_node_put(parent); + return -ENODEV; + } + of_node_put(parent); + return 0; +} + static int altr_edac_a10_device_add(struct altr_arria10_edac *edac, struct device_node *np) { @@ -1146,6 +1160,9 @@ static int altr_edac_a10_device_add(struct altr_arria10_edac *edac, if (IS_ERR_OR_NULL(prv)) return -ENODEV; + if (validate_parent_available(np)) + return -ENODEV; + if (!devres_open_group(edac->dev, altr_edac_a10_device_add, GFP_KERNEL)) return -ENOMEM;