All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Marek Vasut <marek.vasut@gmail.com>
Cc: Richard Weinberger <richard@nod.at>,
	linux-mtd@lists.infradead.org,
	David Woodhouse <dwmw2@infradead.org>,
	Brian Norris <computersforpeace@gmail.com>,
	Cyrille Pitchen <cyrille.pitchen@atmel.com>,
	Icenowy Zheng <icenowy@aosc.xyz>,
	Valdis.Kletnieks@vt.edu, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 07/15] mtd: nand: move Samsung specific init/detection logic in nand_samsung.c
Date: Wed, 11 Jan 2017 08:57:27 +0100	[thread overview]
Message-ID: <20170111085727.314de956@bbrezillon> (raw)
In-Reply-To: <27e81612-a7c4-9265-a608-3d5cf1180973@gmail.com>

On Tue, 10 Jan 2017 20:00:28 +0100
Marek Vasut <marek.vasut@gmail.com> wrote:

> On 01/07/2017 08:49 AM, Boris Brezillon wrote:
> > On Sat, 7 Jan 2017 00:53:24 +0100
> > Marek Vasut <marek.vasut@gmail.com> wrote:
> >   
> >> On 01/04/2017 06:08 PM, Boris Brezillon wrote:  
> >>> On Wed, 4 Jan 2017 16:14:07 +0100
> >>> Marek Vasut <marek.vasut@gmail.com> wrote:
> >>>     
> >>>> On 01/03/2017 02:01 PM, Boris Brezillon wrote:    
> >>>>> Move Samsung specific initialization and detection logic into
> >>>>> nand_samsung.c. This is part of the "separate vendor specific code from
> >>>>> core" cleanup process.
> >>>>>
> >>>>> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>      
> >>>>
> >>>> [...]
> >>>>    
> >>>>> diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
> >>>>> index b3a332f37e14..05e9366696c9 100644
> >>>>> --- a/drivers/mtd/nand/nand_ids.c
> >>>>> +++ b/drivers/mtd/nand/nand_ids.c
> >>>>> @@ -10,7 +10,7 @@
> >>>>>  #include <linux/mtd/nand.h>
> >>>>>  #include <linux/sizes.h>
> >>>>>  
> >>>>> -#define LP_OPTIONS NAND_SAMSUNG_LP_OPTIONS
> >>>>> +#define LP_OPTIONS 0
> >>>>>  #define LP_OPTIONS16 (LP_OPTIONS | NAND_BUSWIDTH_16)
> >>>>>  
> >>>>>  #define SP_OPTIONS NAND_NEED_READRDY
> >>>>> @@ -169,10 +169,12 @@ struct nand_flash_dev nand_flash_ids[] = {
> >>>>>  };
> >>>>>  
> >>>>>  /* Manufacturer IDs */
> >>>>> +extern const struct nand_manufacturer_ops samsung_nand_manuf_ops;      
> >>>>
> >>>> Is the extern needed ?    
> >>>
> >>> Yes, unless you have another solution. If you remove the extern keyword
> >>> you just redeclare samsung_nand_manuf_ops here, which is not what we
> >>> want.    
> >>
> >> Maybe some accessor function can help ?
> >>  
> > 
> > You mean, in nand_ids.c
> > 
> >     const struct nand_manufacturer_ops *get_samsung_nand_mafuf_ops();
> > 
> >     struct nand_manufacturers nand_manuf_ids[] = {
> >     ...
> > 	{NAND_MFR_SAMSUNG, "Samsung", get_samsung_nand_mafuf_ops},
> >     ...
> >     };
> > 
> > and then, in nand_samsung.c
> > 
> >     const struct nand_manufacturer_ops *get_samsung_nand_mafuf_ops()
> >     {
> > 	return &samsung_nand_mafuf_ops;
> >     }  
> 
> Yeah, something like that.
> 
> > What's the point of this extra indirection? I mean, in both cases you
> > use a symbol that is not part of the same source file, so you'll have
> > to define this symbol (using a function prototype or an extern object
> > definition).
> > Is this all about fixing checkpatch warnings, or do you have a problem
> > with objects shared between different source files?  
> 
> The later, separating this with an accessor function feels a bit cleaner
> to me than using extern foo.
> 
> > Now, I agree that the current approach is not ideal. A real improvement
> > would be to let the NAND manufacturer drivers (nand_<vendor>.c) register
> > themselves to the core. Something similar to CLK_OF_DECLARE() or
> > IRQCHIP_DECLARE() for example. But that means creating a dedicated
> > section for the nand_manufs_id table, and it's a lot more invasive than
> > the current approach.  
> 
> Well this would be awesome, but this can also be done later. I presume
> you'll get to it eventually anyway, as soon as you'll be annoyed enough
> with the current ugly-ish implementation.
> 

If we plan to rework it this way, I'd like to keep the existing
approach (with the extern) to avoid changing the prototype of
nand_manufacturer once again when we rework the nand_manufacturer
registration logic.

Also note that in v6 I'm keeping a pointer to the nand_manfucturer
object in nand_chip, so that if we ever need to print the manufacturer
name we don't have to search again in the NAND manufacturer table.
After this rework, I no longer store the manufacturer_ops directly in
nand_chip, and have to access them by doing
chip->manufacturer.desc->ops->xxx.

Which means, with your solution, I'll have to do

	ops = nand_get_manufacturer_ops(chip->manufacturer.desc);
	ops->xxx();

instead of

	chip->manufacturer.desc->ops->xxx();

  reply	other threads:[~2017-01-11  7:57 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-03 13:01 [PATCH v4 00/15] mtd: nand: allow vendor specific detection/initialization Boris Brezillon
2017-01-03 13:01 ` [PATCH v4 01/15] mtd: nand: get rid of the mtd parameter in all auto-detection functions Boris Brezillon
2017-01-04 14:53   ` Marek Vasut
2017-01-03 13:01 ` [PATCH v4 02/15] mtd: nand: store nand ID in struct nand_chip Boris Brezillon
2017-01-04 14:57   ` Marek Vasut
2017-01-03 13:01 ` [PATCH v4 03/15] mtd: nand: get rid of busw parameter Boris Brezillon
2017-01-04 14:59   ` Marek Vasut
2017-01-03 13:01 ` [PATCH v4 04/15] mtd: nand: rename nand_get_flash_type() into nand_detect() Boris Brezillon
2017-01-04 15:01   ` Marek Vasut
2017-01-04 17:03     ` Boris Brezillon
2017-01-03 13:01 ` [PATCH v4 05/15] mtd: nand: add manufacturer specific initialization/detection steps Boris Brezillon
2017-01-04 15:07   ` Marek Vasut
2017-05-01 21:02   ` Brian Norris
2017-05-02  9:04     ` Boris Brezillon
2017-01-03 13:01 ` [PATCH v4 06/15] mtd: nand: kill the MTD_NAND_IDS Kconfig option Boris Brezillon
2017-01-04 15:10   ` Marek Vasut
2017-01-03 13:01 ` [PATCH v4 07/15] mtd: nand: move Samsung specific init/detection logic in nand_samsung.c Boris Brezillon
2017-01-04 15:14   ` Marek Vasut
2017-01-04 17:08     ` Boris Brezillon
2017-01-06 23:53       ` Marek Vasut
2017-01-07  7:49         ` Boris Brezillon
2017-01-10 19:00           ` Marek Vasut
2017-01-11  7:57             ` Boris Brezillon [this message]
2017-01-11 13:02               ` Marek Vasut
2017-01-03 13:01 ` [PATCH v4 08/15] mtd: nand: move Hynix specific init/detection logic in nand_hynix.c Boris Brezillon
2017-01-03 13:01 ` [PATCH v4 09/15] mtd: nand: move Toshiba specific init/detection logic in nand_toshiba.c Boris Brezillon
2017-01-03 13:01 ` [PATCH v4 10/15] mtd: nand: move Micron specific init logic in nand_micron.c Boris Brezillon
2017-01-04 15:15   ` Marek Vasut
2017-01-04 17:13     ` Boris Brezillon
2017-01-04 17:22       ` Marek Vasut
2017-01-04 17:58         ` Boris Brezillon
2017-01-04 21:20           ` Marek Vasut
2017-01-03 13:01 ` [PATCH v4 11/15] mtd: nand: move AMD/Spansion specific init/detection logic in nand_amd.c Boris Brezillon
2017-01-03 13:01 ` [PATCH v4 12/15] mtd: nand: move Macronix specific initialization in nand_macronix.c Boris Brezillon
2017-01-03 13:01 ` [PATCH v4 13/15] mtd: nand: samsung: retrieve ECC requirements from extended ID Boris Brezillon
2017-01-03 13:01 ` [PATCH v4 14/15] mtd: nand: hynix: rework NAND ID decoding to extract more information Boris Brezillon
2017-01-03 13:17   ` Icenowy Zheng
2017-01-03 13:32     ` Boris Brezillon
2017-01-03 13:01 ` [PATCH v4 15/15] mtd: nand: hynix: add read-retry support for 1x nm MLC NANDs Boris Brezillon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170111085727.314de956@bbrezillon \
    --to=boris.brezillon@free-electrons.com \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=computersforpeace@gmail.com \
    --cc=cyrille.pitchen@atmel.com \
    --cc=dwmw2@infradead.org \
    --cc=icenowy@aosc.xyz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=marek.vasut@gmail.com \
    --cc=richard@nod.at \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.