From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mout.kundenserver.de ([212.227.17.24]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1XA2Xa-00065S-Sx for linux-mtd@lists.infradead.org; Wed, 23 Jul 2014 19:49:31 +0000 From: Arnd Bergmann To: punnaiah choudary kalluri Subject: Re: [PATCH RFC v3 2/2] memory: pl353: Add driver for arm pl353 static memory controller Date: Wed, 23 Jul 2014 21:48:15 +0200 References: <1403838162-18756-1-git-send-email-punnaia@xilinx.com> In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <201407232148.15419.arnd@arndb.de> Cc: "mark.rutland@arm.com" , "jussi.kivilinna@iki.fi" , "linux-doc@vger.kernel.org" , "artem.bityutskiy@linux.intel.com" , "linux-mtd@lists.infradead.org" , svemula@xilinx.com, "michal.simek@xilinx.com" , "ezequiel.garcia@free-electrons.com" , Grant Likely , "devicetree@vger.kernel.org" , "jason@lakedaemon.net" , "pawel.moll@arm.com" , "ijc+devicetree@hellion.org.uk" , anirudh@xilinx.com, "joern@logfs.org" , Punnaiah Choudary Kalluri , "robh+dt@kernel.org" , "acourbot@nvidia.com" , "Gupta, Pekon" , Punnaiah Choudary , "gregkh@linuxfoundation.org" , "linux-kernel@vger.kernel.org" , Rob Landley , Kumar Gala , "Khoronzhuk, Ivan" , Brian Norris , David Woodhouse List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , On Monday 21 July 2014, punnaiah choudary kalluri wrote: > On Mon, Jul 7, 2014 at 10:15 PM, punnaiah choudary kalluri > wrote: > > On Thu, Jul 3, 2014 at 4:09 PM, Arnd Bergmann wrote: > >> On Friday 27 June 2014 08:32:42 Punnaiah Choudary Kalluri wrote: > >> > >>> +/** > >>> + * struct pl353_smc_data - Private smc driver structure > >>> + * @devclk: Pointer to the peripheral clock > >>> + * @aperclk: Pointer to the APER clock > >>> + */ > >>> +struct pl353_smc_data { > >>> + struct clk *memclk; > >>> + struct clk *aclk; > >>> +}; > >>> + > >>> +/* SMC virtual register base */ > >>> +static void __iomem *pl353_smc_base; > >> > >> Drivers should not assume that there is only a single instance of the > >> hardware in the system. Please remove this global variable and > >> change the code to pass around a pointer to a structure containing > >> it. > > > > Since, the pl353 nand driver has dependency with this driver for configuring the > > bus width,operational parameters and ecc specific settings. > > So, i didnt find any mechanism for passing this instance from other driver other > > than exporting this instance. > > http://lists.infradead.org/pipermail/linux-mtd/2014-April/053432.html > > > > Please suggest the better option if you want it to be not global. I would expect the nand device to be a child of the smc device. In this case, the nand driver can just pass a pointer to its own 'struct device', and the smc driver can find its data using dev_get_drvdata(dev->parent). > >>> +/** > >>> + * pl353_smc_set_buswidth - Set memory buswidth > >>> + * @bw: Memory buswidth (8 | 16) > >>> + * Return: 0 on success or negative errno. > >>> + */ > >>> +int pl353_smc_set_buswidth(unsigned int bw) > >>> +{ > >>> + > >>> + if (bw != PL353_SMC_MEM_WIDTH_8 && bw != PL353_SMC_MEM_WIDTH_16) > >>> + return -EINVAL; > >>> + > >>> + writel(bw, pl353_smc_base + PL353_SMC_SET_OPMODE_OFFS); > >>> + writel(PL353_SMC_DC_UPT_NAND_REGS, pl353_smc_base + > >>> + PL353_SMC_DIRECT_CMD_OFFS); > >>> + > >>> + return 0; > >>> +} > >>> +EXPORT_SYMBOL_GPL(pl353_smc_set_buswidth); > >> > >> Why is this an exported interface? Wouldn't that setting just be > >> determined from DT when the device is probed? > > > > Nand driver rely on auto bus width detection mechanism for identifying > > the bus width using onfi parameter page settings. So, once the driver > > finds the bus width, updates accordingly using this API This should at least pass the device pointer then. Arnd