Patchwork [1/2] mtd: atmel_nand: remove unneeded ifdef CONFIG_OF

login
register
mail settings
Submitter Wu, Josh
Date Sept. 3, 2013, 9:20 a.m.
Message ID <1378200028-15415-1-git-send-email-josh.wu@atmel.com>
Download mbox | patch
Permalink /patch/272181/
State New
Headers show

Comments

Wu, Josh - Sept. 3, 2013, 9:20 a.m.
Since following commit
  f3b391425d21e6138e57b2432d91134e0bc2b975
  (of_mtd: Add no-op stubs to support CONFIG_OF=n)

implements the stub for CONFIG_OF=n. Now we can safely remove all
CONFIG_OF in atmel_nand. (Thanks to Ezequiel Garcia's for this protype)

Signed-off-by: Josh Wu <josh.wu@atmel.com>
---
 drivers/mtd/nand/atmel_nand.c |   14 +-------------
 1 file changed, 1 insertion(+), 13 deletions(-)
Ezequiel Garcia - Sept. 3, 2013, 10:54 a.m.
On Tue, Sep 03, 2013 at 05:20:27PM +0800, Josh Wu wrote:
> Since following commit
>   f3b391425d21e6138e57b2432d91134e0bc2b975
>   (of_mtd: Add no-op stubs to support CONFIG_OF=n)
> 
> implements the stub for CONFIG_OF=n. Now we can safely remove all
> CONFIG_OF in atmel_nand. (Thanks to Ezequiel Garcia's for this protype)
> 
> Signed-off-by: Josh Wu <josh.wu@atmel.com>
> ---
>  drivers/mtd/nand/atmel_nand.c |   14 +-------------
>  1 file changed, 1 insertion(+), 13 deletions(-)
> 
> diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
> index 060feea..1ca0724 100644
> --- a/drivers/mtd/nand/atmel_nand.c
> +++ b/drivers/mtd/nand/atmel_nand.c
> @@ -1449,7 +1449,6 @@ static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
>  		ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
>  }
>  
> -#if defined(CONFIG_OF)
>  static int atmel_of_init_port(struct atmel_nand_host *host,
>  			      struct device_node *np)
>  {
> @@ -1457,7 +1456,7 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
>  	u32 offset[2];
>  	int ecc_mode;
>  	struct atmel_nand_data *board = &host->board;
> -	enum of_gpio_flags flags;
> +	enum of_gpio_flags flags = 0;
>  
>  	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
>  		if (val >= 32) {
> @@ -1540,13 +1539,6 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
>  
>  	return 0;
>  }
> -#else
> -static int atmel_of_init_port(struct atmel_nand_host *host,
> -			      struct device_node *np)
> -{
> -	return -EINVAL;
> -}
> -#endif
>  
>  static int __init atmel_hw_nand_init_params(struct platform_device *pdev,
>  					 struct atmel_nand_host *host)
> @@ -2207,14 +2199,12 @@ static int __exit atmel_nand_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -#if defined(CONFIG_OF)
>  static const struct of_device_id atmel_nand_dt_ids[] = {
>  	{ .compatible = "atmel,at91rm9200-nand" },
>  	{ /* sentinel */ }
>  };
>  
>  MODULE_DEVICE_TABLE(of, atmel_nand_dt_ids);
> -#endif
>  
>  static int atmel_nand_nfc_probe(struct platform_device *pdev)
>  {
> @@ -2253,12 +2243,10 @@ static int atmel_nand_nfc_probe(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -#if defined(CONFIG_OF)
>  static struct of_device_id atmel_nand_nfc_match[] = {
>  	{ .compatible = "atmel,sama5d3-nfc" },
>  	{ /* sentinel */ }
>  };
> -#endif
>  
>  static struct platform_driver atmel_nand_nfc_driver = {
>  	.driver = {
> -- 
> 1.7.9.5
> 

Acked-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Brian Norris - Sept. 11, 2013, 11:02 p.m.
Hi Josh,

On Tue, Sep 03, 2013 at 05:20:27PM +0800, Josh Wu wrote:
> Since following commit
>   f3b391425d21e6138e57b2432d91134e0bc2b975

This commit ID will likely change before it gets merged, since there may
be rebasing, and David usually adds his signoff. David or I can take
care of that later though.

>   (of_mtd: Add no-op stubs to support CONFIG_OF=n)
> 
> implements the stub for CONFIG_OF=n. Now we can safely remove all
> CONFIG_OF in atmel_nand. (Thanks to Ezequiel Garcia's for this protype)

I'm not quite so sure about this patch, as I was about the pxa3xx patch.
With pxa3xx, the compiler can easily tell that pxa3xx_nand_probe_dt()
will return 0 without doing anything in the !CONFIG_OF case (and so will
likely remove the dead code), so it's no benefit to have the #ifdef. But
in this driver, the atmel_of_init_port() function can't be trivially
determined to do nothing (and in fact, it does something in either
CONFIG_OF=y or =n case). It's only protected by the 'if
(pdev->dev.of_node)' check, which the compiler can't predict.

So, I don't know if we should remove the #ifdef at the expense of likely
significantly larger code. I won't protest, but I won't merge it yet
either. Perhaps others have better ideas, or perhaps you can find a good
way to work around this -- e.g., check the of_* helpers for -ENOSYS early
in atmel_of_init_port()?

> Signed-off-by: Josh Wu <josh.wu@atmel.com>
> ---
>  drivers/mtd/nand/atmel_nand.c |   14 +-------------
>  1 file changed, 1 insertion(+), 13 deletions(-)
> 
> diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
> index 060feea..1ca0724 100644
> --- a/drivers/mtd/nand/atmel_nand.c
> +++ b/drivers/mtd/nand/atmel_nand.c
> @@ -1449,7 +1449,6 @@ static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
>  		ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
>  }
>  
> -#if defined(CONFIG_OF)
>  static int atmel_of_init_port(struct atmel_nand_host *host,
>  			      struct device_node *np)
>  {
> @@ -1457,7 +1456,7 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
>  	u32 offset[2];
>  	int ecc_mode;
>  	struct atmel_nand_data *board = &host->board;
> -	enum of_gpio_flags flags;
> +	enum of_gpio_flags flags = 0;
>  
>  	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
>  		if (val >= 32) {
> @@ -1540,13 +1539,6 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
>  
>  	return 0;
>  }
> -#else
> -static int atmel_of_init_port(struct atmel_nand_host *host,
> -			      struct device_node *np)
> -{
> -	return -EINVAL;
> -}
> -#endif
>  
>  static int __init atmel_hw_nand_init_params(struct platform_device *pdev,
>  					 struct atmel_nand_host *host)
> @@ -2207,14 +2199,12 @@ static int __exit atmel_nand_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -#if defined(CONFIG_OF)
>  static const struct of_device_id atmel_nand_dt_ids[] = {
>  	{ .compatible = "atmel,at91rm9200-nand" },
>  	{ /* sentinel */ }
>  };
>  
>  MODULE_DEVICE_TABLE(of, atmel_nand_dt_ids);
> -#endif
>  
>  static int atmel_nand_nfc_probe(struct platform_device *pdev)
>  {
> @@ -2253,12 +2243,10 @@ static int atmel_nand_nfc_probe(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -#if defined(CONFIG_OF)
>  static struct of_device_id atmel_nand_nfc_match[] = {
>  	{ .compatible = "atmel,sama5d3-nfc" },
>  	{ /* sentinel */ }
>  };
> -#endif
>  
>  static struct platform_driver atmel_nand_nfc_driver = {
>  	.driver = {

Brian
Wu, Josh - Sept. 13, 2013, 9:28 a.m.
Dear Brian

On 9/12/2013 7:02 AM, Brian Norris wrote:
> Hi Josh,
>
> On Tue, Sep 03, 2013 at 05:20:27PM +0800, Josh Wu wrote:
>> Since following commit
>>    f3b391425d21e6138e57b2432d91134e0bc2b975
> This commit ID will likely change before it gets merged, since there may
> be rebasing, and David usually adds his signoff. David or I can take
> care of that later though.

OK. I think I need to remove the commit ID part.

>
>>    (of_mtd: Add no-op stubs to support CONFIG_OF=n)
>>
>> implements the stub for CONFIG_OF=n. Now we can safely remove all
>> CONFIG_OF in atmel_nand. (Thanks to Ezequiel Garcia's for this protype)
> I'm not quite so sure about this patch, as I was about the pxa3xx patch.
> With pxa3xx, the compiler can easily tell that pxa3xx_nand_probe_dt()
> will return 0 without doing anything in the !CONFIG_OF case (and so will
> likely remove the dead code), so it's no benefit to have the #ifdef. But
> in this driver, the atmel_of_init_port() function can't be trivially
> determined to do nothing (and in fact, it does something in either
> CONFIG_OF=y or =n case). It's only protected by the 'if
> (pdev->dev.of_node)' check, which the compiler can't predict.

I understand your concern here.

>
> So, I don't know if we should remove the #ifdef at the expense of likely
> significantly larger code. I won't protest, but I won't merge it yet
> either. Perhaps others have better ideas, or perhaps you can find a good
> way to work around this -- e.g., check the of_* helpers for -ENOSYS early
> in atmel_of_init_port()?

So what about to add one more check: "IS_ENABLE(CONFIG_OF)" in 
atmel_nand_probe().
And which is compiler predictable.

if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) {
/* of_node can be parsed only when CONFIG_OF is enable */
res = atmel_of_init_port(host, pdev->dev.of_node);
if (res)
goto err_nand_ioremap;
} else {
... ...
}

And thanks for the comments.
Best Regards,
Josh Wu

>
>> Signed-off-by: Josh Wu <josh.wu@atmel.com>
>> ---
>>   drivers/mtd/nand/atmel_nand.c |   14 +-------------
>>   1 file changed, 1 insertion(+), 13 deletions(-)
>>
>> diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
>> index 060feea..1ca0724 100644
>> --- a/drivers/mtd/nand/atmel_nand.c
>> +++ b/drivers/mtd/nand/atmel_nand.c
>> @@ -1449,7 +1449,6 @@ static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
>>   		ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
>>   }
>>   
>> -#if defined(CONFIG_OF)
>>   static int atmel_of_init_port(struct atmel_nand_host *host,
>>   			      struct device_node *np)
>>   {
>> @@ -1457,7 +1456,7 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
>>   	u32 offset[2];
>>   	int ecc_mode;
>>   	struct atmel_nand_data *board = &host->board;
>> -	enum of_gpio_flags flags;
>> +	enum of_gpio_flags flags = 0;
>>   
>>   	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
>>   		if (val >= 32) {
>> @@ -1540,13 +1539,6 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
>>   
>>   	return 0;
>>   }
>> -#else
>> -static int atmel_of_init_port(struct atmel_nand_host *host,
>> -			      struct device_node *np)
>> -{
>> -	return -EINVAL;
>> -}
>> -#endif
>>   
>>   static int __init atmel_hw_nand_init_params(struct platform_device *pdev,
>>   					 struct atmel_nand_host *host)
>> @@ -2207,14 +2199,12 @@ static int __exit atmel_nand_remove(struct platform_device *pdev)
>>   	return 0;
>>   }
>>   
>> -#if defined(CONFIG_OF)
>>   static const struct of_device_id atmel_nand_dt_ids[] = {
>>   	{ .compatible = "atmel,at91rm9200-nand" },
>>   	{ /* sentinel */ }
>>   };
>>   
>>   MODULE_DEVICE_TABLE(of, atmel_nand_dt_ids);
>> -#endif
>>   
>>   static int atmel_nand_nfc_probe(struct platform_device *pdev)
>>   {
>> @@ -2253,12 +2243,10 @@ static int atmel_nand_nfc_probe(struct platform_device *pdev)
>>   	return 0;
>>   }
>>   
>> -#if defined(CONFIG_OF)
>>   static struct of_device_id atmel_nand_nfc_match[] = {
>>   	{ .compatible = "atmel,sama5d3-nfc" },
>>   	{ /* sentinel */ }
>>   };
>> -#endif
>>   
>>   static struct platform_driver atmel_nand_nfc_driver = {
>>   	.driver = {
> Brian
Brian Norris - Sept. 13, 2013, 6:21 p.m.
+ devicetree@vger.kernel.org

On Fri, Sep 13, 2013 at 05:28:13PM +0800, Josh Wu wrote:
> On 9/12/2013 7:02 AM, Brian Norris wrote:
> >On Tue, Sep 03, 2013 at 05:20:27PM +0800, Josh Wu wrote:
> >>Since following commit
> >>   f3b391425d21e6138e57b2432d91134e0bc2b975

...

> >>   (of_mtd: Add no-op stubs to support CONFIG_OF=n)
> >>
> >>implements the stub for CONFIG_OF=n. Now we can safely remove all
> >>CONFIG_OF in atmel_nand. (Thanks to Ezequiel Garcia's for this protype)
> >I'm not quite so sure about this patch, as I was about the pxa3xx patch.
> >With pxa3xx, the compiler can easily tell that pxa3xx_nand_probe_dt()
> >will return 0 without doing anything in the !CONFIG_OF case (and so will
> >likely remove the dead code), so it's no benefit to have the #ifdef. But
> >in this driver, the atmel_of_init_port() function can't be trivially
> >determined to do nothing (and in fact, it does something in either
> >CONFIG_OF=y or =n case). It's only protected by the 'if
> >(pdev->dev.of_node)' check, which the compiler can't predict.
> 
> I understand your concern here.
> 
> >
> >So, I don't know if we should remove the #ifdef at the expense of likely
> >significantly larger code. I won't protest, but I won't merge it yet
> >either. Perhaps others have better ideas, or perhaps you can find a good
> >way to work around this -- e.g., check the of_* helpers for -ENOSYS early
> >in atmel_of_init_port()?
> 
> So what about to add one more check: "IS_ENABLE(CONFIG_OF)" in
> atmel_nand_probe().
> And which is compiler predictable.
> 
> if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) {
> /* of_node can be parsed only when CONFIG_OF is enable */
> res = atmel_of_init_port(host, pdev->dev.of_node);
> if (res)
> goto err_nand_ioremap;
> } else {
> ... ...
> }

That looks good to me. And it has precedent, a nearly identical patch
here:

  commit e305062e94719ef543ae936dd56501b5a36406c6
  Author: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
  Date:   Tue Jun 18 12:29:49 2013 +0200

      gpio-rcar: Remove #ifdef CONFIG_OF around OF-specific sections

      All functions and data types used by OF-specific code paths are declared
      in <linux/of.h> regardless of CONFIG_OF. Replace the #ifdef CONFIG_OF
      guard with a if(IS_ENABLED(CONFIG_OF)) and let the compiler optimize
      the unused code away.

      Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
      Signed-off-by: Simon Horman <horms+renesas@verge.net.au>

Brian

(leaving context intact)

> 
> >
> >>Signed-off-by: Josh Wu <josh.wu@atmel.com>
> >>---
> >>  drivers/mtd/nand/atmel_nand.c |   14 +-------------
> >>  1 file changed, 1 insertion(+), 13 deletions(-)
> >>
> >>diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
> >>index 060feea..1ca0724 100644
> >>--- a/drivers/mtd/nand/atmel_nand.c
> >>+++ b/drivers/mtd/nand/atmel_nand.c
> >>@@ -1449,7 +1449,6 @@ static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
> >>  		ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
> >>  }
> >>-#if defined(CONFIG_OF)
> >>  static int atmel_of_init_port(struct atmel_nand_host *host,
> >>  			      struct device_node *np)
> >>  {
> >>@@ -1457,7 +1456,7 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
> >>  	u32 offset[2];
> >>  	int ecc_mode;
> >>  	struct atmel_nand_data *board = &host->board;
> >>-	enum of_gpio_flags flags;
> >>+	enum of_gpio_flags flags = 0;
> >>  	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
> >>  		if (val >= 32) {
> >>@@ -1540,13 +1539,6 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
> >>  	return 0;
> >>  }
> >>-#else
> >>-static int atmel_of_init_port(struct atmel_nand_host *host,
> >>-			      struct device_node *np)
> >>-{
> >>-	return -EINVAL;
> >>-}
> >>-#endif
> >>  static int __init atmel_hw_nand_init_params(struct platform_device *pdev,
> >>  					 struct atmel_nand_host *host)
> >>@@ -2207,14 +2199,12 @@ static int __exit atmel_nand_remove(struct platform_device *pdev)
> >>  	return 0;
> >>  }
> >>-#if defined(CONFIG_OF)
> >>  static const struct of_device_id atmel_nand_dt_ids[] = {
> >>  	{ .compatible = "atmel,at91rm9200-nand" },
> >>  	{ /* sentinel */ }
> >>  };
> >>  MODULE_DEVICE_TABLE(of, atmel_nand_dt_ids);
> >>-#endif
> >>  static int atmel_nand_nfc_probe(struct platform_device *pdev)
> >>  {
> >>@@ -2253,12 +2243,10 @@ static int atmel_nand_nfc_probe(struct platform_device *pdev)
> >>  	return 0;
> >>  }
> >>-#if defined(CONFIG_OF)
> >>  static struct of_device_id atmel_nand_nfc_match[] = {
> >>  	{ .compatible = "atmel,sama5d3-nfc" },
> >>  	{ /* sentinel */ }
> >>  };
> >>-#endif
> >>  static struct platform_driver atmel_nand_nfc_driver = {
> >>  	.driver = {
Olof Johansson - Sept. 16, 2013, 10:28 p.m.
Guys,

On Fri, Sep 13, 2013 at 11:21 AM, Brian Norris
<computersforpeace@gmail.com> wrote:
> + devicetree@vger.kernel.org
>
> On Fri, Sep 13, 2013 at 05:28:13PM +0800, Josh Wu wrote:
>> On 9/12/2013 7:02 AM, Brian Norris wrote:
>> >On Tue, Sep 03, 2013 at 05:20:27PM +0800, Josh Wu wrote:
>> >>Since following commit
>> >>   f3b391425d21e6138e57b2432d91134e0bc2b975
>
> ...
>
>> >>   (of_mtd: Add no-op stubs to support CONFIG_OF=n)
>> >>
>> >>implements the stub for CONFIG_OF=n. Now we can safely remove all
>> >>CONFIG_OF in atmel_nand. (Thanks to Ezequiel Garcia's for this protype)
>> >I'm not quite so sure about this patch, as I was about the pxa3xx patch.
>> >With pxa3xx, the compiler can easily tell that pxa3xx_nand_probe_dt()
>> >will return 0 without doing anything in the !CONFIG_OF case (and so will
>> >likely remove the dead code), so it's no benefit to have the #ifdef. But
>> >in this driver, the atmel_of_init_port() function can't be trivially
>> >determined to do nothing (and in fact, it does something in either
>> >CONFIG_OF=y or =n case). It's only protected by the 'if
>> >(pdev->dev.of_node)' check, which the compiler can't predict.
>>
>> I understand your concern here.
>>
>> >
>> >So, I don't know if we should remove the #ifdef at the expense of likely
>> >significantly larger code. I won't protest, but I won't merge it yet
>> >either. Perhaps others have better ideas, or perhaps you can find a good
>> >way to work around this -- e.g., check the of_* helpers for -ENOSYS early
>> >in atmel_of_init_port()?


Can we please get less fumbling around on this and just merge a fix,
please? You guys have broken the PXA3xx builds for the whole merge
window, while there's been a patch sitting in linux-next with
_exactly_ this contents since August 30, committed by David.

If this is't fixed within the next few days I'll just pick that patch
up and include it in our next batch of arm-soc fixes. This is
ridiculous.


-Olof
Brian Norris - Sept. 16, 2013, 10:50 p.m.
On Mon, Sep 16, 2013 at 3:28 PM, Olof Johansson <olof@lixom.net> wrote:
> Guys,
>
> On Fri, Sep 13, 2013 at 11:21 AM, Brian Norris
> <computersforpeace@gmail.com> wrote:
>> + devicetree@vger.kernel.org
>>
>> On Fri, Sep 13, 2013 at 05:28:13PM +0800, Josh Wu wrote:
>>> On 9/12/2013 7:02 AM, Brian Norris wrote:
>>> >On Tue, Sep 03, 2013 at 05:20:27PM +0800, Josh Wu wrote:
>>> >>Since following commit
>>> >>   f3b391425d21e6138e57b2432d91134e0bc2b975
>>
>> ...
>>
>>> >>   (of_mtd: Add no-op stubs to support CONFIG_OF=n)
>>> >>
>>> >>implements the stub for CONFIG_OF=n. Now we can safely remove all
>>> >>CONFIG_OF in atmel_nand. (Thanks to Ezequiel Garcia's for this protype)
>>> >I'm not quite so sure about this patch, as I was about the pxa3xx patch.
>>> >With pxa3xx, the compiler can easily tell that pxa3xx_nand_probe_dt()
>>> >will return 0 without doing anything in the !CONFIG_OF case (and so will
>>> >likely remove the dead code), so it's no benefit to have the #ifdef. But
>>> >in this driver, the atmel_of_init_port() function can't be trivially
>>> >determined to do nothing (and in fact, it does something in either
>>> >CONFIG_OF=y or =n case). It's only protected by the 'if
>>> >(pdev->dev.of_node)' check, which the compiler can't predict.
>>>
>>> I understand your concern here.
>>>
>>> >
>>> >So, I don't know if we should remove the #ifdef at the expense of likely
>>> >significantly larger code. I won't protest, but I won't merge it yet
>>> >either. Perhaps others have better ideas, or perhaps you can find a good
>>> >way to work around this -- e.g., check the of_* helpers for -ENOSYS early
>>> >in atmel_of_init_port()?
>
>
> Can we please get less fumbling around on this and just merge a fix,
> please? You guys have broken the PXA3xx builds for the whole merge
> window, while there's been a patch sitting in linux-next with
> _exactly_ this contents since August 30, committed by David.

How about you read the thread you're responding to? This is a
different driver, and it is not broken.

If you look at the thread for the patch which fixes the actual
breakage (in pxa3xx), you will see a plain and clear explanation of
the situation.

http://lists.infradead.org/pipermail/linux-mtd/2013-September/048595.html
http://lists.infradead.org/pipermail/linux-mtd/2013-September/048598.html

David has been sufficiently notified, and he is not acting. I have
even pinged him on our IRC channel, with no response, although I'm not
surprised.

(BTW, I assume the "committed by David" is simply because of
git-rebase. It doesn't necessarily reflect his acknowledgment of the
patch. I can only assume that it was an oversight on his part.)

> If this is't fixed within the next few days I'll just pick that patch
> up and include it in our next batch of arm-soc fixes. This is
> ridiculous.

My hands are tied, as the only thing I could do would be to submit a
pull request around David's back. I am just as frustrated as you, but
for different reasons. The (lack of) response from the head MTD
maintainer is unacceptable, IMO, and it is a recurring problem that we
are trying to solve by my involvement as a submaintainer. But
merge-window problems are not quite under my authority...

Anyway, I don't care if the patch goes in via another tree, as long as
this debacle (notably, for the pxa3xx_nand driver, not the atmel_nand
driver) is resolved.

Brian
Olof Johansson - Sept. 16, 2013, 10:54 p.m.
On Mon, Sep 16, 2013 at 3:50 PM, Brian Norris
<computersforpeace@gmail.com> wrote:
> On Mon, Sep 16, 2013 at 3:28 PM, Olof Johansson <olof@lixom.net> wrote:
>> Guys,
>>
>> On Fri, Sep 13, 2013 at 11:21 AM, Brian Norris
>> <computersforpeace@gmail.com> wrote:
>>> + devicetree@vger.kernel.org
>>>
>>> On Fri, Sep 13, 2013 at 05:28:13PM +0800, Josh Wu wrote:
>>>> On 9/12/2013 7:02 AM, Brian Norris wrote:
>>>> >On Tue, Sep 03, 2013 at 05:20:27PM +0800, Josh Wu wrote:
>>>> >>Since following commit
>>>> >>   f3b391425d21e6138e57b2432d91134e0bc2b975
>>>
>>> ...
>>>
>>>> >>   (of_mtd: Add no-op stubs to support CONFIG_OF=n)
>>>> >>
>>>> >>implements the stub for CONFIG_OF=n. Now we can safely remove all
>>>> >>CONFIG_OF in atmel_nand. (Thanks to Ezequiel Garcia's for this protype)
>>>> >I'm not quite so sure about this patch, as I was about the pxa3xx patch.
>>>> >With pxa3xx, the compiler can easily tell that pxa3xx_nand_probe_dt()
>>>> >will return 0 without doing anything in the !CONFIG_OF case (and so will
>>>> >likely remove the dead code), so it's no benefit to have the #ifdef. But
>>>> >in this driver, the atmel_of_init_port() function can't be trivially
>>>> >determined to do nothing (and in fact, it does something in either
>>>> >CONFIG_OF=y or =n case). It's only protected by the 'if
>>>> >(pdev->dev.of_node)' check, which the compiler can't predict.
>>>>
>>>> I understand your concern here.
>>>>
>>>> >
>>>> >So, I don't know if we should remove the #ifdef at the expense of likely
>>>> >significantly larger code. I won't protest, but I won't merge it yet
>>>> >either. Perhaps others have better ideas, or perhaps you can find a good
>>>> >way to work around this -- e.g., check the of_* helpers for -ENOSYS early
>>>> >in atmel_of_init_port()?
>>
>>
>> Can we please get less fumbling around on this and just merge a fix,
>> please? You guys have broken the PXA3xx builds for the whole merge
>> window, while there's been a patch sitting in linux-next with
>> _exactly_ this contents since August 30, committed by David.
>
> How about you read the thread you're responding to? This is a
> different driver, and it is not broken.

Ah, oops, my apologies. I came across this when searching for the
(committed) patch in my mail history and didn't notice the driver name
differences. :)

> If you look at the thread for the patch which fixes the actual
> breakage (in pxa3xx), you will see a plain and clear explanation of
> the situation.
>
> http://lists.infradead.org/pipermail/linux-mtd/2013-September/048595.html
> http://lists.infradead.org/pipermail/linux-mtd/2013-September/048598.html
>
> David has been sufficiently notified, and he is not acting. I have
> even pinged him on our IRC channel, with no response, although I'm not
> surprised.
>
> (BTW, I assume the "committed by David" is simply because of
> git-rebase. It doesn't necessarily reflect his acknowledgment of the
> patch. I can only assume that it was an oversight on his part.)

That in itself seems broken; if he is pulling code from you he shouldn't rebase.

>> If this is't fixed within the next few days I'll just pick that patch
>> up and include it in our next batch of arm-soc fixes. This is
>> ridiculous.
>
> My hands are tied, as the only thing I could do would be to submit a
> pull request around David's back. I am just as frustrated as you, but
> for different reasons. The (lack of) response from the head MTD
> maintainer is unacceptable, IMO, and it is a recurring problem that we
> are trying to solve by my involvement as a submaintainer. But
> merge-window problems are not quite under my authority...

What you could do is send just a patch, not a pull request. But anyway:

> Anyway, I don't care if the patch goes in via another tree, as long as
> this debacle (notably, for the pxa3xx_nand driver, not the atmel_nand
> driver) is resolved.

Ok. Russell was asking what the status of the fix was as well. I'll
queue it up with our current fixes for -rc2.


-Olof
Brian Norris - Sept. 16, 2013, 11:11 p.m.
On Mon, Sep 16, 2013 at 3:54 PM, Olof Johansson <olof@lixom.net> wrote:
> On Mon, Sep 16, 2013 at 3:50 PM, Brian Norris
> <computersforpeace@gmail.com> wrote:
>> On Mon, Sep 16, 2013 at 3:28 PM, Olof Johansson <olof@lixom.net> wrote:
>>> Guys,
>>> Can we please get less fumbling around on this and just merge a fix,
>>> please? You guys have broken the PXA3xx builds for the whole merge
>>> window, while there's been a patch sitting in linux-next with
>>> _exactly_ this contents since August 30, committed by David.
>>
>> How about you read the thread you're responding to? This is a
>> different driver, and it is not broken.
>
> Ah, oops, my apologies. I came across this when searching for the
> (committed) patch in my mail history and didn't notice the driver name
> differences. :)

Unacceptable. Humans never make mistakes. ;)

>> If you look at the thread for the patch which fixes the actual
>> breakage (in pxa3xx), you will see a plain and clear explanation of
>> the situation.
>>
>> http://lists.infradead.org/pipermail/linux-mtd/2013-September/048595.html
>> http://lists.infradead.org/pipermail/linux-mtd/2013-September/048598.html
>>
>> David has been sufficiently notified, and he is not acting. I have
>> even pinged him on our IRC channel, with no response, although I'm not
>> surprised.
>>
>> (BTW, I assume the "committed by David" is simply because of
>> git-rebase. It doesn't necessarily reflect his acknowledgment of the
>> patch. I can only assume that it was an oversight on his part.)
>
> That in itself seems broken; if he is pulling code from you he shouldn't rebase.

Well, the repo I commit to (l2-mtd.git) was originally Artem's
creation and was intended to collect things that had been reviewed,
allowing David a last chance to review and reject or Sign-Off (or in
this case, break) patches. We haven't traditionally stuck to the "once
it's in git, it's permanent" philosophy, and I'm not sure of my
opinion of it. It may or may not have prevented this error, as I am
not sure why David left this patch out in the first place.

>> Anyway, I don't care if the patch goes in via another tree, as long as
>> this debacle (notably, for the pxa3xx_nand driver, not the atmel_nand
>> driver) is resolved.
>
> Ok. Russell was asking what the status of the fix was as well. I'll
> queue it up with our current fixes for -rc2.

Sounds good.

Brian

Patch

diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
index 060feea..1ca0724 100644
--- a/drivers/mtd/nand/atmel_nand.c
+++ b/drivers/mtd/nand/atmel_nand.c
@@ -1449,7 +1449,6 @@  static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
 		ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
 }
 
-#if defined(CONFIG_OF)
 static int atmel_of_init_port(struct atmel_nand_host *host,
 			      struct device_node *np)
 {
@@ -1457,7 +1456,7 @@  static int atmel_of_init_port(struct atmel_nand_host *host,
 	u32 offset[2];
 	int ecc_mode;
 	struct atmel_nand_data *board = &host->board;
-	enum of_gpio_flags flags;
+	enum of_gpio_flags flags = 0;
 
 	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
 		if (val >= 32) {
@@ -1540,13 +1539,6 @@  static int atmel_of_init_port(struct atmel_nand_host *host,
 
 	return 0;
 }
-#else
-static int atmel_of_init_port(struct atmel_nand_host *host,
-			      struct device_node *np)
-{
-	return -EINVAL;
-}
-#endif
 
 static int __init atmel_hw_nand_init_params(struct platform_device *pdev,
 					 struct atmel_nand_host *host)
@@ -2207,14 +2199,12 @@  static int __exit atmel_nand_remove(struct platform_device *pdev)
 	return 0;
 }
 
-#if defined(CONFIG_OF)
 static const struct of_device_id atmel_nand_dt_ids[] = {
 	{ .compatible = "atmel,at91rm9200-nand" },
 	{ /* sentinel */ }
 };
 
 MODULE_DEVICE_TABLE(of, atmel_nand_dt_ids);
-#endif
 
 static int atmel_nand_nfc_probe(struct platform_device *pdev)
 {
@@ -2253,12 +2243,10 @@  static int atmel_nand_nfc_probe(struct platform_device *pdev)
 	return 0;
 }
 
-#if defined(CONFIG_OF)
 static struct of_device_id atmel_nand_nfc_match[] = {
 	{ .compatible = "atmel,sama5d3-nfc" },
 	{ /* sentinel */ }
 };
-#endif
 
 static struct platform_driver atmel_nand_nfc_driver = {
 	.driver = {