From: Mark Brown <broonie@kernel.org>
To: Harini Katakam <harini.katakam@xilinx.com>
Cc: "robh+dt@kernel.org" <robh+dt@kernel.org>,
"pawel.moll@arm.com" <pawel.moll@arm.com>,
"mark.rutland@arm.com" <mark.rutland@arm.com>,
"ijc+devicetree@hellion.org.uk" <ijc+devicetree@hellion.org.uk>,
"galak@codeaurora.org" <galak@codeaurora.org>,
"rob@landley.net" <rob@landley.net>,
"grant.likely@linaro.org" <grant.likely@linaro.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-spi@vger.kernel.org" <linux-spi@vger.kernel.org>,
Michal Simek <michals@xilinx.com>
Subject: Re: [PATCH] SPI: Add driver for Cadence SPI controller
Date: Tue, 18 Mar 2014 11:04:01 +0000 [thread overview]
Message-ID: <20140318110401.GH11706@sirena.org.uk> (raw)
In-Reply-To: <255edf4f-05a8-4d9a-b32d-1a4a8ddaffb5@CH1EHSMHS004.ehs.local>
[-- Attachment #1: Type: text/plain, Size: 3826 bytes --]
On Tue, Mar 18, 2014 at 05:16:26AM +0000, Harini Katakam wrote:
Please fix your mailer to word wrap within paragraphs, this will make
your mail much more legible.
> > > + if (bits_per_word != 8) {
> > > + dev_err(&spi->dev, "%s, unsupported bits per word %x\n",
> > > + __func__, spi->bits_per_word);
> > > + return -EINVAL;
> > > + }
> > The core will check this for you.
> I dint find that the core does this.
bpw_mask.
> > It's not clear to me why this has been split into a separate function and the
> > function will write to the hardware which you're not allowed to do in
> > setup() if it might affect an ongoing transfer.
> Are you saying that there's a chance cdns_spi_setup() will be called
> when there's an ongoing transfer? In that case I have to remove the
> cdns_setup_transfer() call from here but then there's nothing left to
> do in setup.
yes.
> > I see from further up the file that there are error interrupt states which
> > might be flagged but these are just being ignored.
> I'm not sure I understand what you are referring to -
> The only interrupts enabled (See CNDS_IXR_DEFAULT_MASK) are TXOW and MODF.
The code had:
> +#define CDNS_SPI_IXR_TXOW_MASK 0x00000004 /* SPI TX FIFO Overwater */
> +#define CDNS_SPI_IXR_MODF_MASK 0x00000002 /* SPI Mode Fault */
> +#define CDNS_SPI_IXR_RXNEMTY_MASK 0x00000010 /* SPI RX FIFO Not Empty */
> +#define CDNS_SPI_IXR_TXFULL_MASK 0x00000008 /* SPI TX Full */
and defined:
> +#define CDNS_SPI_IXR_ALL_MASK 0x0000007F /* SPI all interrupts */
> > > + return IRQ_HANDLED;
> > This should only be returned if an interrupt was actually handled - if the line
> > is shared in some system this will break.
> In this case both possible interrupt conditions are handled.
Are you sure that's the case, and even if you are that's still not
handling the case where the device isn't flagging an interrupt at all.
> > > + cdns_spi_write(xspi->regs + CDNS_SPI_IER_OFFSET,
> > > + CDNS_SPI_IXR_DEFAULT_MASK);
> > > +
> > > + ret = wait_for_completion_interruptible_timeout(&xspi->done,
> > > + CDNS_SPI_TIMEOUT);
> > > + if (ret < 1) {
> > If you return a positive value from transfer_one() the core will wait for you.
> I don't understand. Here, if the ret from
> wait_for_completion_interruptible_timeout is positive, then this
> function (spi_start_transfer) will return (transfer->len) -
> (xspi->remaining_bytes) to cdns_transfer_one_message(the calling
> funtion). Which will just use this return as information on how many
> bytes were transferred (see variable length).
> cdns_transfer_one_messag() only returns 0 or error value (-ve) (see
> variable status). It doesn't return positive value to core.
I'm saying you should be implementing a transfer_one() operation and
returning a positive value from it so the core can do the delay for you.
> > > + ret = of_property_read_u16(pdev->dev.of_node, "num-chip-select",
> > > + &master->num_chipselect);
> > > + if (ret < 0) {
> > > + dev_err(&pdev->dev, "couldn't determine num-chip-
> > select\n");
> > > + goto clk_dis_all;
> > > + }
> > Is there no reasonable default?
> Are you saying if I cant read num-chipselect from dts,
> I should set it to a default (that will be 4) and proceed?
Yes.
> > > + /* Set to default valid value */
> > > + xspi->speed_hz = clk_get_rate(xspi->ref_clk) / 4;
> > The driver should set max_speed_hz as well.
> This is the max_speed_hz - 4 is the lowest divisor possible. 2 is invalid.
> It is set in init_hw (see config register default mask).
I'm saying you should set max_speed_hz, not set speed_hz to the maximum
value. This tells the core what the maximum speed is so it can error
check the driver operations.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2014-03-18 11:04 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-17 12:05 [PATCH] SPI: Add driver for Cadence SPI controller Harini Katakam
2014-03-17 12:47 ` Rob Herring
[not found] ` <CAL_JsqKacetGytGUJir7ky3qOgCy-3ny1pT_Bx4eCYV2wMgcTg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-17 13:14 ` Mark Brown
2014-03-17 13:22 ` Michal Simek
2014-03-17 13:30 ` Geert Uytterhoeven
2014-03-17 13:54 ` Harini Katakam
[not found] ` <5326F72E.7010401-pSz03upnqPeHXe+LvDLADg@public.gmane.org>
2014-03-17 19:00 ` Rob Herring
2014-03-20 11:23 ` Michal Simek
2014-03-17 14:01 ` Harini Katakam
[not found] ` <1395057936-8643-1-git-send-email-harinik-gjFFaj9aHVfQT0dZR+AlfA@public.gmane.org>
2014-03-17 17:30 ` Mark Brown
2014-03-17 17:59 ` Josh Cartwright
2014-03-17 18:14 ` Mark Brown
2014-03-18 5:22 ` Harini Katakam
[not found] ` <554ccbca-f92e-454c-90c0-b8a4ddddf3fd-p/+QeVIcf1BZbvUCbuG1mrjjLBE8jN/0@public.gmane.org>
2014-03-18 11:06 ` Mark Brown
2014-03-18 5:16 ` Harini Katakam
2014-03-18 11:04 ` Mark Brown [this message]
[not found] ` <20140318110401.GH11706-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-03-18 12:13 ` Harini Katakam
2014-03-18 12:33 ` Mark Brown
2014-03-18 14:45 ` Harini Katakam
2014-03-18 15:59 ` Mark Brown
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=20140318110401.GH11706@sirena.org.uk \
--to=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=grant.likely@linaro.org \
--cc=harini.katakam@xilinx.com \
--cc=ijc+devicetree@hellion.org.uk \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=michals@xilinx.com \
--cc=pawel.moll@arm.com \
--cc=rob@landley.net \
--cc=robh+dt@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).