Thread (1 message) 1 message, 1 author, 2015-01-07

[PATCH 1/4] mtd: nand: add NVIDIA Tegra NAND Flash controller driver

From: Thierry Reding <hidden>
Date: 2015-01-07 13:45:47
Also in: linux-devicetree, linux-tegra

On Wed, Jan 07, 2015 at 01:24:38AM +0100, Lucas Stach wrote:
Am Dienstag, den 06.01.2015, 15:27 -0300 schrieb Ezequiel Garcia:
quoted
On 01/04/2015 05:39 PM, Lucas Stach wrote:
[...]
quoted
quoted
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
index 7d0150d..1eafd4e 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -524,4 +524,10 @@ config MTD_NAND_SUNXI
 	help
 	  Enables support for NAND Flash chips on Allwinner SoCs.
 
+config MTD_NAND_TEGRA
+	tristate "Support for NAND on NVIDIA Tegra"
+	depends on ARCH_TEGRA || COMPILE_TEST
I think you're going to need a bunch more dependencies if you use
COMPILE_TEST. Otherwise we're going to get all kinds of build failure
reports.
quoted
quoted
diff --git a/drivers/mtd/nand/tegra_nand.c b/drivers/mtd/nand/tegra_nand.c
[...]
quoted
quoted
+struct tegra_nand {
+	void __iomem *regs;
+	int irq;
Seems like you don't need to store irq.
quoted
+	struct clk *clk;
+	struct reset_control *rst;
+	int wp_gpio;
+	int buswidth;
And also you don't seem to need either wp_gpio or buswidth stored
in the struct. You only use them at probe time.
I'll keep the wp_gpio, as I still hope to use this to WP the NAND when
no write is pending. I'll fix the others.
Maybe use the gpiod_*() API since the old one is new deprecated?
quoted
quoted
+static const struct of_device_id tegra_nand_of_match[] = {
+	{ .compatible = "nvidia,tegra20-nand" },
+	{ .compatible = "nvidia,tegra30-nand" },
AFAIK, having two compatible strings, but making no distinction between
them is typically frowned upon by devicetree maintainers.

Is the controller any different in tegra20 and tegra30?

If you are not sure about the controllers being different, you can
try the following approach. The devicetree is written like this:

nand at foo {
   compatible = "nvidia,tegra20-nand", "nvidia,tegra-nand";
};

So you only deal with "nvidia,tegra-nand" in the driver, yet the
devicetree files are prepared to deal with a difference.
I think it's been more common to have something like this:

	tegra20.dtsi:

		nand-controller at 70008000 {
			compatible = "nvidia,tegra20-nand";
			...
		};

	tegra30.dtsi:

		nand-controller at 70008000 {
			compatible = "nvidia,tegra30-nand", "nvidia,tegra20-nand";
			...
		};

The idea being that if the Tegra30 variant is indeed compatible with the
Tegra20 variant, the driver can match on "nvidia,tegra20-nand". But at
the same time the DTB has the more specific compatible in case the
driver ever needs to handle generation-specific quirks, or implement any
additional functionality added in Tegra30 that wasn't available in early
generations.
I believe that tegra30-nand is actually a bit different from tegra20 (at
least on more clock I know about), but obviously this driver doesn't
handle those differences and I don't know if I ever get to see Tegra30
hardware with NAND. Given that I think it's best to just remove the
tegra30-nand compatible for now and add it back if someone has hardware
to test with.
Yes, that sounds like the best option for now.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20150107/e10768d1/attachment.sig>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help