From: Sourav Poddar <sourav.poddar-l0cyMroinI0@public.gmane.org>
To: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: rnayak-l0cyMroinI0@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
balbi-l0cyMroinI0@public.gmane.org,
grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCHv4 2/3] drivers: spi: Add qspi flash controller
Date: Fri, 19 Jul 2013 17:25:50 +0530 [thread overview]
Message-ID: <51E92946.8030907@ti.com> (raw)
In-Reply-To: <20130718104233.GG22506-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
Hi Mark,
On Thursday 18 July 2013 04:12 PM, Mark Brown wrote:
> On Thu, Jul 18, 2013 at 03:31:26PM +0530, Sourav Poddar wrote:
>
>> QSPI is a kind of spi module that allows single,
>> dual and quad read access to external spi devices. The module
>> has a memory mapped interface which provide direct interface
>> for accessing data form external spi devices.
> Have you seen the ongoing thread about SPI buses with extra data lines?
> How does this driver fit in with that?
>
>> --- a/drivers/spi/Makefile
>> +++ b/drivers/spi/Makefile
>> @@ -46,6 +46,7 @@ obj-$(CONFIG_SPI_OCTEON) += spi-octeon.o
>> obj-$(CONFIG_SPI_OMAP_UWIRE) += spi-omap-uwire.o
>> obj-$(CONFIG_SPI_OMAP_100K) += spi-omap-100k.o
>> obj-$(CONFIG_SPI_OMAP24XX) += spi-omap2-mcspi.o
>> +obj-$(CONFIG_QSPI_DRA7xxx) += spi-ti-qspi.o
>> obj-$(CONFIG_SPI_ORION) += spi-orion.o
>> obj-$(CONFIG_SPI_PL022) += spi-pl022.o
>> obj-$(CONFIG_SPI_PPC4xx) += spi-ppc4xx.o
> Please use SPI_ like the other drivers.
>
>> +static int ti_qspi_prepare_xfer(struct spi_master *master)
>> +{
>> + struct ti_qspi *qspi = spi_master_get_devdata(master);
>> + int ret;
>> +
>> + ret = pm_runtime_get_sync(qspi->dev);
>> + if (ret< 0) {
>> + dev_err(qspi->dev, "pm_runtime_get_sync() failed\n");
>> + return ret;
>> + }
>> +
>> + return 0;
>> +}
> This is a very common pattern, it should probably be factored out into
> the core, probably not even as ops but rather as an actual feature.
>
I see, every other driver doing it this way right now.
Is it ok, if I take your above idea as an seperate excercise after this
patch.?
>> + list_for_each_entry(t,&m->transfers, transfer_list) {
>> + qspi->cmd |= QSPI_WLEN(t->bits_per_word);
>> + qspi->cmd |= QSPI_WC_CMD_INT_EN;
>> +
>> + ret = qspi_transfer_msg(qspi, t);
>> + if (ret) {
>> + dev_dbg(qspi->dev, "transfer message failed\n");
>> + return -EINVAL;
>> + }
>> +
>> + m->actual_length += t->len;
>> +
>> + if (list_is_last(&t->transfer_list,&m->transfers))
>> + goto out;
>> + }
> The use of list_is_last() here is *realy* strange - what's going on
> there?
>
>> +static irqreturn_t ti_qspi_isr(int irq, void *dev_id)
>> +{
>> + struct ti_qspi *qspi = dev_id;
>> + u16 mask, stat;
>> +
>> + irqreturn_t ret = IRQ_HANDLED;
>> +
>> + spin_lock(&qspi->lock);
>> +
>> + stat = ti_qspi_readl(qspi, QSPI_SPI_STATUS_REG);
>> + mask = ti_qspi_readl(qspi, QSPI_INTR_ENABLE_SET_REG);
>> +
>> + if (stat&& mask)
>> + ret = IRQ_WAKE_THREAD;
>> +
>> + spin_unlock(&qspi->lock);
>> +
>> + return ret;
> According to the above code we might interrupt for masked events...
> that's a bit worrying isn't it?
>
>> + ret = devm_request_threaded_irq(&pdev->dev, irq, ti_qspi_isr,
>> + ti_qspi_threaded_isr, IRQF_NO_SUSPEND | IRQF_ONESHOT,
>> + dev_name(&pdev->dev), qspi);
>> + if (ret< 0) {
>> + dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n",
>> + irq);
>> + goto free_master;
>> + }
> Standard question about devm_request_threaded_irq() - how can we be
> certain it's safe to use during removal?
------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
WARNING: multiple messages have this Message-ID (diff)
From: Sourav Poddar <sourav.poddar@ti.com>
To: Mark Brown <broonie@kernel.org>
Cc: <spi-devel-general@lists.sourceforge.net>,
<grant.likely@linaro.org>, <balbi@ti.com>, <rnayak@ti.com>,
<linux-omap@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCHv4 2/3] drivers: spi: Add qspi flash controller
Date: Fri, 19 Jul 2013 17:25:50 +0530 [thread overview]
Message-ID: <51E92946.8030907@ti.com> (raw)
In-Reply-To: <20130718104233.GG22506@sirena.org.uk>
Hi Mark,
On Thursday 18 July 2013 04:12 PM, Mark Brown wrote:
> On Thu, Jul 18, 2013 at 03:31:26PM +0530, Sourav Poddar wrote:
>
>> QSPI is a kind of spi module that allows single,
>> dual and quad read access to external spi devices. The module
>> has a memory mapped interface which provide direct interface
>> for accessing data form external spi devices.
> Have you seen the ongoing thread about SPI buses with extra data lines?
> How does this driver fit in with that?
>
>> --- a/drivers/spi/Makefile
>> +++ b/drivers/spi/Makefile
>> @@ -46,6 +46,7 @@ obj-$(CONFIG_SPI_OCTEON) += spi-octeon.o
>> obj-$(CONFIG_SPI_OMAP_UWIRE) += spi-omap-uwire.o
>> obj-$(CONFIG_SPI_OMAP_100K) += spi-omap-100k.o
>> obj-$(CONFIG_SPI_OMAP24XX) += spi-omap2-mcspi.o
>> +obj-$(CONFIG_QSPI_DRA7xxx) += spi-ti-qspi.o
>> obj-$(CONFIG_SPI_ORION) += spi-orion.o
>> obj-$(CONFIG_SPI_PL022) += spi-pl022.o
>> obj-$(CONFIG_SPI_PPC4xx) += spi-ppc4xx.o
> Please use SPI_ like the other drivers.
>
>> +static int ti_qspi_prepare_xfer(struct spi_master *master)
>> +{
>> + struct ti_qspi *qspi = spi_master_get_devdata(master);
>> + int ret;
>> +
>> + ret = pm_runtime_get_sync(qspi->dev);
>> + if (ret< 0) {
>> + dev_err(qspi->dev, "pm_runtime_get_sync() failed\n");
>> + return ret;
>> + }
>> +
>> + return 0;
>> +}
> This is a very common pattern, it should probably be factored out into
> the core, probably not even as ops but rather as an actual feature.
>
I see, every other driver doing it this way right now.
Is it ok, if I take your above idea as an seperate excercise after this
patch.?
>> + list_for_each_entry(t,&m->transfers, transfer_list) {
>> + qspi->cmd |= QSPI_WLEN(t->bits_per_word);
>> + qspi->cmd |= QSPI_WC_CMD_INT_EN;
>> +
>> + ret = qspi_transfer_msg(qspi, t);
>> + if (ret) {
>> + dev_dbg(qspi->dev, "transfer message failed\n");
>> + return -EINVAL;
>> + }
>> +
>> + m->actual_length += t->len;
>> +
>> + if (list_is_last(&t->transfer_list,&m->transfers))
>> + goto out;
>> + }
> The use of list_is_last() here is *realy* strange - what's going on
> there?
>
>> +static irqreturn_t ti_qspi_isr(int irq, void *dev_id)
>> +{
>> + struct ti_qspi *qspi = dev_id;
>> + u16 mask, stat;
>> +
>> + irqreturn_t ret = IRQ_HANDLED;
>> +
>> + spin_lock(&qspi->lock);
>> +
>> + stat = ti_qspi_readl(qspi, QSPI_SPI_STATUS_REG);
>> + mask = ti_qspi_readl(qspi, QSPI_INTR_ENABLE_SET_REG);
>> +
>> + if (stat&& mask)
>> + ret = IRQ_WAKE_THREAD;
>> +
>> + spin_unlock(&qspi->lock);
>> +
>> + return ret;
> According to the above code we might interrupt for masked events...
> that's a bit worrying isn't it?
>
>> + ret = devm_request_threaded_irq(&pdev->dev, irq, ti_qspi_isr,
>> + ti_qspi_threaded_isr, IRQF_NO_SUSPEND | IRQF_ONESHOT,
>> + dev_name(&pdev->dev), qspi);
>> + if (ret< 0) {
>> + dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n",
>> + irq);
>> + goto free_master;
>> + }
> Standard question about devm_request_threaded_irq() - how can we be
> certain it's safe to use during removal?
next prev parent reply other threads:[~2013-07-19 11:55 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-18 10:01 [PATCH 0/3] spi changes and ti quad spi controller Sourav Poddar
2013-07-18 10:01 ` Sourav Poddar
2013-07-18 10:01 ` Sourav Poddar
[not found] ` <1374141687-10790-1-git-send-email-sourav.poddar-l0cyMroinI0@public.gmane.org>
2013-07-18 10:01 ` [RFC/PATCHv2 1/3] driver: spi: Modify core to compute the message length Sourav Poddar
2013-07-18 10:01 ` Sourav Poddar
2013-07-18 10:01 ` Sourav Poddar
2013-07-18 15:22 ` Mark Brown
2013-07-18 10:01 ` [PATCHv4 2/3] drivers: spi: Add qspi flash controller Sourav Poddar
2013-07-18 10:01 ` Sourav Poddar
2013-07-18 10:01 ` Sourav Poddar
2013-07-18 10:24 ` Felipe Balbi
2013-07-18 10:24 ` Felipe Balbi
[not found] ` <20130718102404.GH11251-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
2013-07-18 11:18 ` Sourav Poddar
2013-07-18 11:18 ` Sourav Poddar
2013-07-18 11:18 ` Sourav Poddar
2013-07-18 11:24 ` Felipe Balbi
2013-07-18 11:24 ` Felipe Balbi
[not found] ` <20130718112458.GJ11251-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
2013-07-18 12:24 ` Sourav Poddar
2013-07-18 12:24 ` Sourav Poddar
2013-07-18 12:24 ` Sourav Poddar
2013-07-19 11:48 ` Sourav Poddar
2013-07-19 11:48 ` Sourav Poddar
2013-07-19 12:20 ` Felipe Balbi
2013-07-19 12:20 ` Felipe Balbi
2013-07-18 10:42 ` Mark Brown
[not found] ` <20130718104233.GG22506-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-07-18 11:45 ` Sourav Poddar
2013-07-18 11:45 ` Sourav Poddar
2013-07-18 11:56 ` Felipe Balbi
2013-07-18 11:56 ` Felipe Balbi
2013-07-18 13:18 ` Mark Brown
2013-07-18 13:31 ` Felipe Balbi
2013-07-18 13:31 ` Felipe Balbi
2013-07-18 14:42 ` Mark Brown
[not found] ` <20130718144241.GO22506-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-07-18 14:55 ` Sourav Poddar
2013-07-18 14:55 ` Sourav Poddar
2013-07-18 15:28 ` Mark Brown
2013-07-19 11:55 ` Sourav Poddar [this message]
2013-07-19 11:55 ` Sourav Poddar
[not found] ` <1374141687-10790-3-git-send-email-sourav.poddar-l0cyMroinI0@public.gmane.org>
2013-07-18 19:08 ` Trent Piepho
2013-07-18 19:08 ` Trent Piepho
2013-07-18 20:39 ` Mark Brown
[not found] ` <20130718203934.GT22506-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-07-18 20:59 ` Nishanth Menon
2013-07-18 20:59 ` Nishanth Menon
2013-07-19 5:02 ` Sourav Poddar
2013-07-19 5:02 ` Sourav Poddar
2013-07-18 10:01 ` [RFC/PATCHv2 3/3] driver: spi: Add quad spi read support Sourav Poddar
2013-07-18 10:01 ` Sourav Poddar
2013-07-18 10:01 ` Sourav Poddar
2013-07-18 10:44 ` Mark Brown
[not found] ` <20130718104414.GH22506-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-07-18 11:52 ` Sourav Poddar
2013-07-18 11:52 ` Sourav Poddar
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=51E92946.8030907@ti.com \
--to=sourav.poddar-l0cymroini0@public.gmane.org \
--cc=balbi-l0cyMroinI0@public.gmane.org \
--cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=rnayak-l0cyMroinI0@public.gmane.org \
--cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
/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.