From: Stefan Agner <stefan@agner.ch>
To: Bill Pringlemeir <bpringlemeir@nbsps.com>,
Sascha Hauer <s.hauer@pengutronix.de>
Cc: geert@linux-m68k.org, dwmw2@infradead.org,
computersforpeace@gmail.com, mark.rutland@arm.com,
boris.brezillon@free-electrons.com, aaron@tastycactus.com,
marb@ixxat.de, pawel.moll@arm.com, ijc+devicetree@hellion.org.uk,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
robh+dt@kernel.org, linux-mtd@lists.infradead.org,
kernel@pengutronix.de, galak@codeaurora.org,
shawn.guo@linaro.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/5] mtd: nand: vf610_nfc: Freescale NFC for VF610, MPC5125 and others
Date: Mon, 09 Mar 2015 10:05:04 +0100 [thread overview]
Message-ID: <16168d2a42bfbcd91bcd8ca360cc0bda@agner.ch> (raw)
In-Reply-To: <87sidi3zw5.fsf@nbsps.com>
On 2015-03-06 16:32, Bill Pringlemeir wrote:
> On 6 Mar 2015, stefan@agner.ch wrote:
>
>> On 2015-03-06 07:15, Sascha Hauer wrote:
>>> Hi Stefan,
>
>>> On Thu, Mar 05, 2015 at 12:10:20AM +0100, Stefan Agner wrote:
>>>> +
>>>> +static int vf610_nfc_probe_dt(struct device *dev, struct
>>>> vf610_nfc_config *cfg)
>>>> +{
>>>> + struct device_node *np = dev->of_node;
>>>> + int buswidth;
>>>> + u32 clkrate;
>>>> +
>>>> + if (!np)
>>>> + return 1;
>>>> +
>>>> + cfg->flash_bbt = of_get_nand_on_flash_bbt(np);
>>>> +
>>>> + if (!of_property_read_u32(np, "clock-frequency", &clkrate))
>>>> + cfg->clkrate = clkrate;
>
>>> Normally the clock-frequency property tells the driver at which
>>> frequency the device actually is running, not to tell the driver at
>>> which frequency the device *should* run. It's strange to use the
>>> value of the clock-frequency property as input to
>>> clk_set_rate(). Maybe the assigned clock binding is more appropriate
>>> here, see Documentation/devicetree/bindings/clock/clock-bindings.txt.
>
>> What we try to do here is to specify the hardware limitations. There
>> seem to be some hardware restrictions when it comes to clock
>> frequencies. There has been a rather long discussion over at
>> Freescales community about it:
>> https://community.freescale.com/thread/317074
>
>> Not sure if this is the right way to specify the supported
>> frequencies, or should we create a custom property for this, something
>> like fsl,max-nfc-frequency = <33000000>?
>
> On most SOC's with this controller, the input clock to the controller
> affects the NAND flash timing and other factors; so you will want to set
> it based on the board/NAND stuffed. The clock is for synchronous logic
> in the controller and affects many properties.
>
> I guess Sascha's point is, the board's DT should just have some
> '&nfc_clk' node and not have this part of the driver? Either way works.
> However, this clock is very important to get the driver to function. It
> seem better for a user/porter to have this info in the node. I guess
> you need to be trained to look at every node in the sub-tree for a
> device. I think the other way might be better or a sub-system
> maintainer. I looked at 'i2c' and other node which have a
> 'clock-frequency' parameter.
>
> In the Documentation/devicetree/bindings/clock/clock-bindings.txt,
>
> uart@a000 {
> compatible = "fsl,imx-uart";
> reg = <0xa000 0x1000>;
> interrupts = <33>;
> clocks = <&osc 0>, <&pll 1>;
> clock-names = "baud", "register";
> };
>
> Here, this uart clock may affect the maximum baud rate supported by the
> device. For this controller (vf610_nfc), the clock is like setting the
> 'baud rate'; it affect the NAND memory cycles. There is not really any
> 'wait state' type logic in the controller register set that would allow
> the driver to work with a 'given clock' rate. For certain a board
> should set this clock for the NAND chips they wish to support.
>
> What would the board file look like to use clock node?
>
> [generic]
> nfc: nand@400e0000 {
> compatible = "fsl,vf610-nfc";
> reg = <0x400e0000 0x4000>;
> clocks = <&clks VF610_CLK_NFC>;
> clock-names = "nfc_clk";
> status = "disabled";
> };
>
> [board]
>
> &nfc {
> nand-bus-width = <16>;
> nand-ecc-mode = "hw";
> nand-on-flash-bbt;
> nand-ecc-strength = <24>;
> nand-ecc-step-size = <2048>;
> pinctrl-names = "default";
> pinctrl-0 = <&pinctrl_nfc_1>;
> status = "okay";
> &nfc_clk { frequency = <33000000>} /* Like this? */
There is a property called "clock-frequency", but this is really for
static clocks (e.g. external oscillators). I don't think this is the
right approach.
> };
>
> I don't know how to do the 'Like this?' part. I don't think the
> 'clock-bindings.txt' explains it. I see this is better as the the
> driver needs no 'clock handling' code. It is definitely a little more
> obtuse for the users.
There are drivers which use the clock-frequency property to actually
specify maximum operating frequencies:
Documentation/devicetree/bindings/i2c/i2c-efm32.txt: - clock-frequency :
maximal I2C bus clock frequency in Hz.
Documentation/devicetree/bindings/media/samsung-fimc.txt:-
clock-frequency: maximum FIMC local clock (LCLK) frequency;
In the MMC subsystem there is a property called max-frequency, the SPI
subsystem uses the property spi-max-frequency to specify maximum
operating frequencies of SPI slaves.
How about just max-frequency? Or with vendor prefix, e.g.
fsl,max-frequency...?
>
> [snip]
>
>>> Does this driver work without device tree or not? Currently the
>>> driver bails out when device tree support is enabled but no device
>>> node is given. When device tree support is disabled in the kernel
>>> though the driver happily continues here.
>
>> Hm, I never tried using this Driver without DT.
>
> [snip]
>
> I also didn't test this. The driver was ported from Linux versions
> where DT did not exist. It is used in some OpenWRT/68k/coldfire
> (patched) kernels and I wanted it to be useful for them. However, we
> could probably remove the 'platform support'. Other people are using
> this on PPC platforms and they will also have dt/of.
>
> Currently the platform control has no way to 'pass data', so the driver
> only works with whatever defaults it has (or that is my belief). For
> instance, those OpenWRT kernels have a 'machine file' which will set the
> 'clock-frequency' and other parameters. We could remove the platform
> support completely if it is misleading. I guess the KConfig would need
> a 'depends on CONFIG_OF'.
>
> Thanks for the review,
> Bill Pringlemeir.
next prev parent reply other threads:[~2015-03-09 9:05 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-04 23:10 [PATCH 0/5] mtd: nand: vf610_nfc: Freescale NFC for VF610 Stefan Agner
2015-03-04 23:10 ` [PATCH 1/5] mtd: nand: vf610_nfc: Freescale NFC for VF610, MPC5125 and others Stefan Agner
[not found] ` <1425510624-22250-2-git-send-email-stefan-XLVq0VzYD2Y@public.gmane.org>
2015-03-05 8:19 ` Paul Bolle
2015-03-06 4:57 ` Shawn Guo
2015-03-06 6:15 ` Sascha Hauer
2015-03-06 13:31 ` Stefan Agner
2015-03-06 15:32 ` Bill Pringlemeir
2015-03-09 9:05 ` Stefan Agner [this message]
2015-03-09 9:58 ` Sascha Hauer
2015-03-09 12:43 ` Stefan Agner
2015-03-04 23:10 ` [PATCH 2/5] mtd: nand: vf610_nfc: add hardware BCH-ECC support Stefan Agner
2015-03-04 23:10 ` [PATCH 3/5] mtd: nand: vf610_nfc: add device tree bindings Stefan Agner
2015-03-04 23:10 ` [PATCH 4/5] ARM: dts: vf610: add NAND flash controller peripherial Stefan Agner
2015-03-04 23:10 ` [PATCH 5/5] ARM: dts: vf-colibri: enable NAND flash controller Stefan Agner
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=16168d2a42bfbcd91bcd8ca360cc0bda@agner.ch \
--to=stefan@agner.ch \
--cc=aaron@tastycactus.com \
--cc=boris.brezillon@free-electrons.com \
--cc=bpringlemeir@nbsps.com \
--cc=computersforpeace@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=dwmw2@infradead.org \
--cc=galak@codeaurora.org \
--cc=geert@linux-m68k.org \
--cc=ijc+devicetree@hellion.org.uk \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=marb@ixxat.de \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=robh+dt@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawn.guo@linaro.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).