All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] Assorted PXA3xx DT patches
@ 2012-07-25 16:17 Daniel Mack
  2012-07-25 16:17 ` [PATCH 1/7] RTC: add DT bindings to pxa-rtc Daniel Mack
                   ` (6 more replies)
  0 siblings, 7 replies; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 16:17 UTC (permalink / raw)
  To: linux-arm-kernel

This is a series of 7 patches that add basic support for booting PXA3xx
boards from devicetrees. I'm able to mount a rootfs and use all
irq/gpio based functions as well as the NAND, USB and RTC drivers.

There are some major pieces left to work on though:

 - the pinctrl driver
 - the pxafb driver
 - the ssp/audio implementations

Is somebody working on any of these?


Let me know what you think.

Daniel Mack (7):
  RTC: add DT bindings to pxa-rtc
  MMC: pxa-mci: add DT bindings
  MTD: pxa3xx-nand: add devicetree bindings
  ARM: pxa: add devicetree code for irq handling
  ARM: pxa3xx: skip default device initialization when booting via DT
  ARM: pxa3xx: add generic DT machine code
  ARM: pxa: add .dtsi files

 Documentation/devicetree/bindings/mmc/pxa-mmc.txt  |   24 ++++
 .../devicetree/bindings/mtd/pxa3xx-nand.txt        |   31 +++++
 Documentation/devicetree/bindings/rtc/pxa-rtc.txt  |   12 ++
 arch/arm/boot/dts/pxa2xx.dtsi                      |  132 ++++++++++++++++++++
 arch/arm/boot/dts/pxa3xx.dtsi                      |   26 ++++
 arch/arm/mach-pxa/Kconfig                          |   12 ++
 arch/arm/mach-pxa/Makefile                         |    3 +
 arch/arm/mach-pxa/irq.c                            |   73 +++++++++++
 arch/arm/mach-pxa/pxa-dt.c                         |   61 +++++++++
 arch/arm/mach-pxa/pxa3xx.c                         |   21 +++-
 drivers/mmc/host/pxamci.c                          |   50 ++++++++
 drivers/mtd/nand/pxa3xx_nand.c                     |   83 +++++++++---
 drivers/rtc/rtc-pxa.c                              |   11 ++
 13 files changed, 522 insertions(+), 17 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mmc/pxa-mmc.txt
 create mode 100644 Documentation/devicetree/bindings/mtd/pxa3xx-nand.txt
 create mode 100644 Documentation/devicetree/bindings/rtc/pxa-rtc.txt
 create mode 100644 arch/arm/boot/dts/pxa2xx.dtsi
 create mode 100644 arch/arm/boot/dts/pxa3xx.dtsi
 create mode 100644 arch/arm/mach-pxa/pxa-dt.c

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 1/7] RTC: add DT bindings to pxa-rtc
  2012-07-25 16:17 [PATCH 0/7] Assorted PXA3xx DT patches Daniel Mack
@ 2012-07-25 16:17 ` Daniel Mack
  2012-07-25 17:18   ` Arnd Bergmann
  2012-07-26 12:51   ` Sergei Shtylyov
  2012-07-25 16:17 ` [PATCH 2/7] MMC: pxa-mci: add DT bindings Daniel Mack
                   ` (5 subsequent siblings)
  6 siblings, 2 replies; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 16:17 UTC (permalink / raw)
  To: linux-arm-kernel

This patch adds generic device tree bindings to the PXA RTC driver.
Documentation for bindings were also added.

Signed-off-by: Daniel Mack <zonque@gmail.com>
Cc: Robert Jarzmik <robert.jarzmik@free.fr>
Cc: Alessandro Zummo <a.zummo@towertech.it>
---
 Documentation/devicetree/bindings/rtc/pxa-rtc.txt |   12 ++++++++++++
 drivers/rtc/rtc-pxa.c                             |   11 +++++++++++
 2 files changed, 23 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/rtc/pxa-rtc.txt

diff --git a/Documentation/devicetree/bindings/rtc/pxa-rtc.txt b/Documentation/devicetree/bindings/rtc/pxa-rtc.txt
new file mode 100644
index 0000000..acba256
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/pxa-rtc.txt
@@ -0,0 +1,12 @@
+* PXA RTC
+
+PXA specific RTC driver.
+
+Required properties:
+- compatible : Should be pxa-rtc
+
+Examples:
+
+rtc at 0 {
+    compatible = "mrvl,pxa-rtc";
+};
diff --git a/drivers/rtc/rtc-pxa.c b/drivers/rtc/rtc-pxa.c
index 0075c8f..50d062a 100644
--- a/drivers/rtc/rtc-pxa.c
+++ b/drivers/rtc/rtc-pxa.c
@@ -27,6 +27,8 @@
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/slab.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 
 #include <mach/hardware.h>
 
@@ -396,6 +398,14 @@ static int __exit pxa_rtc_remove(struct platform_device *pdev)
 	return 0;
 }
 
+#ifdef CONFIG_OF
+static struct of_device_id pxa_rtc_dt_ids[] = {
+	{ .compatible = "mrvl,pxa-rtc" },
+	{}
+};
+MODULE_DEVICE_TABLE(of, pxa_rtc_dt_ids);
+#endif
+
 #ifdef CONFIG_PM
 static int pxa_rtc_suspend(struct device *dev)
 {
@@ -425,6 +435,7 @@ static struct platform_driver pxa_rtc_driver = {
 	.remove		= __exit_p(pxa_rtc_remove),
 	.driver		= {
 		.name	= "pxa-rtc",
+		.of_match_table = of_match_ptr(pxa_rtc_dt_ids),
 #ifdef CONFIG_PM
 		.pm	= &pxa_rtc_pm_ops,
 #endif
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/7] MMC: pxa-mci: add DT bindings
  2012-07-25 16:17 [PATCH 0/7] Assorted PXA3xx DT patches Daniel Mack
  2012-07-25 16:17 ` [PATCH 1/7] RTC: add DT bindings to pxa-rtc Daniel Mack
@ 2012-07-25 16:17 ` Daniel Mack
  2012-07-25 16:47   ` Chris Ball
  2012-07-25 16:17 ` [PATCH 3/7] MTD: pxa3xx-nand: add devicetree bindings Daniel Mack
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 16:17 UTC (permalink / raw)
  To: linux-arm-kernel

Signed-off-by: Daniel Mack <zonque@gmail.com>
Cc: Nicolas Pitre <nico@fluxnic.net>
Cc: Chris Ball <cjb@laptop.org>
---
 Documentation/devicetree/bindings/mmc/pxa-mmc.txt |   24 ++++++++++
 drivers/mmc/host/pxamci.c                         |   50 +++++++++++++++++++++
 2 files changed, 74 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mmc/pxa-mmc.txt

diff --git a/Documentation/devicetree/bindings/mmc/pxa-mmc.txt b/Documentation/devicetree/bindings/mmc/pxa-mmc.txt
new file mode 100644
index 0000000..8f0ea58
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/pxa-mmc.txt
@@ -0,0 +1,24 @@
+* PXA MMC drivers
+
+Driver bindings for the PXA MCI (MMC/SDIO) interfaces
+
+Required properties:
+- compatible: Should be "mrvl,pxa-mmc".
+- reg: Should contain registers location and length
+- interrupts: Should contain the interrupt
+- vmmc-supply: A regulator for VMMC
+
+Optional properties:
+- mrvl,detect-delay-ms: sets the detection delay timeout in ms.
+- mrvl,gpio-card-detect: GPIO spec for the card detect pin
+- mrvl,gpio-card-readonly: GPIO spec for the card write protection pin
+- mrvl,gpio-power: GPIO spec for the card power enable pin
+
+Examples:
+
+mmc0: mmc at 41100000 {
+	compatible = "mrvl,pxa-mmc";
+	reg = <0x41100000 0x1000>;
+	interrupts = <23>;
+};
+
diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c
index cb2dc0e..39ddc00 100644
--- a/drivers/mmc/host/pxamci.c
+++ b/drivers/mmc/host/pxamci.c
@@ -30,6 +30,9 @@
 #include <linux/regulator/consumer.h>
 #include <linux/gpio.h>
 #include <linux/gfp.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
+#include <linux/of_device.h>
 
 #include <asm/sizes.h>
 
@@ -573,6 +576,48 @@ static irqreturn_t pxamci_detect_irq(int irq, void *devid)
 	return IRQ_HANDLED;
 }
 
+#ifdef CONFIG_OF
+static const struct of_device_id pxa_mmc_dt_ids[] = {
+        { .compatible = "mrvl,pxa-mmc" },
+        { }
+};
+
+MODULE_DEVICE_TABLE(of, pxa_mmc_dt_ids);
+
+static int __devinit pxamci_of_init(struct platform_device *pdev)
+{
+        struct device_node *np = pdev->dev.of_node;
+        struct pxamci_platform_data *pdata;
+        u32 tmp;
+
+        if (!np)
+                return 0;
+
+        pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+        if (!pdata)
+                return -ENOMEM;
+
+	pdata->gpio_card_detect =
+		of_get_named_gpio(np, "pxa-mmc,gpio-card-detect", 0);
+	pdata->gpio_card_ro =
+		of_get_named_gpio(np, "pxa-mmc,gpio-card-readonly", 0);
+	pdata->gpio_power =
+		of_get_named_gpio(np, "pxa-mmc,gpio-power", 0);
+
+	if (of_property_read_u32(np, "pxa-mmc,detect-delay-ms", &tmp) == 0)
+		pdata->detect_delay_ms = tmp;
+
+        pdev->dev.platform_data = pdata;
+
+        return 0;
+}
+#else
+static int __devinit pxamci_of_init(struct platform_device *pdev)
+{
+        return 0;
+}
+#endif
+
 static int pxamci_probe(struct platform_device *pdev)
 {
 	struct mmc_host *mmc;
@@ -580,6 +625,10 @@ static int pxamci_probe(struct platform_device *pdev)
 	struct resource *r, *dmarx, *dmatx;
 	int ret, irq, gpio_cd = -1, gpio_ro = -1, gpio_power = -1;
 
+	ret = pxamci_of_init(pdev);
+	if (ret)
+		return ret;
+
 	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	irq = platform_get_irq(pdev, 0);
 	if (!r || irq < 0)
@@ -866,6 +915,7 @@ static struct platform_driver pxamci_driver = {
 	.driver		= {
 		.name	= DRIVER_NAME,
 		.owner	= THIS_MODULE,
+		.of_match_table = of_match_ptr(pxa_mmc_dt_ids),
 #ifdef CONFIG_PM
 		.pm	= &pxamci_pm_ops,
 #endif
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 3/7] MTD: pxa3xx-nand: add devicetree bindings
  2012-07-25 16:17 [PATCH 0/7] Assorted PXA3xx DT patches Daniel Mack
  2012-07-25 16:17 ` [PATCH 1/7] RTC: add DT bindings to pxa-rtc Daniel Mack
  2012-07-25 16:17 ` [PATCH 2/7] MMC: pxa-mci: add DT bindings Daniel Mack
@ 2012-07-25 16:17 ` Daniel Mack
  2012-07-26  0:59   ` Marek Vasut
  2012-07-25 16:17 ` [PATCH 4/7] ARM: pxa: add devicetree code for irq handling Daniel Mack
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 16:17 UTC (permalink / raw)
  To: linux-arm-kernel

This patch contains a hack to get the DMA resources of the device when
probed from a devicetree node. This can be removed once a generic DMA
controller framework lands.

A mtd_part_parser_data is passed mtd_device_parse_register which
contains a reference to the device node, so MTD partitions can be
added as children.

Signed-off-by: Daniel Mack <zonque@gmail.com>
Cc: David Woodhouse <dwmw2@infradead.org>
---
 .../devicetree/bindings/mtd/pxa3xx-nand.txt        |   31 ++++++++
 drivers/mtd/nand/pxa3xx_nand.c                     |   83 ++++++++++++++++----
 2 files changed, 100 insertions(+), 14 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/pxa3xx-nand.txt

diff --git a/Documentation/devicetree/bindings/mtd/pxa3xx-nand.txt b/Documentation/devicetree/bindings/mtd/pxa3xx-nand.txt
new file mode 100644
index 0000000..6e28cef
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/pxa3xx-nand.txt
@@ -0,0 +1,31 @@
+PXA3xx NAND DT bindings
+
+Required properties:
+
+ - compatible:		Should be "mrvl,pxa3xx-nand"
+ - reg: 		The register base for the controller
+ - interrupts:		The interrupt to map
+ - #address-cells:	Set to <1> if the node includes partitions
+
+Optional properties:
+
+ - mrvl,nand-enable-arbiter:	Set to enable the bus arbiter
+ - mrvl,nand-keep-config:	Set to keep the NAND controller config as set
+				by the bootloader
+ - num-cs:			Number of chipselect lines to usw
+
+Example:
+
+	nand0: nand at 43100000 {
+		compatible = "mrvl,pxa3xx-nand";
+		reg = <0x43100000 90>;
+		interrupts = <45>;
+		#address-cells = <1>;
+		
+		mrvl,nand-enable-arbiter;
+		mrvl,nand-keep-config;
+		num-cs = <1>;
+
+		/* partitions (optional) */
+	};
+
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index 252aaef..fb592a9 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -22,6 +22,8 @@
 #include <linux/io.h>
 #include <linux/irq.h>
 #include <linux/slab.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 
 #include <mach/dma.h>
 #include <plat/pxa3xx_nand.h>
@@ -1081,21 +1083,29 @@ static int alloc_nand_resource(struct platform_device *pdev)
 	}
 	clk_enable(info->clk);
 
-	r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
-	if (r == NULL) {
-		dev_err(&pdev->dev, "no resource defined for data DMA\n");
-		ret = -ENXIO;
-		goto fail_put_clk;
-	}
-	info->drcmr_dat = r->start;
+	/* 
+	 * This is a dirty hack to make this driver work from devicetree
+	 * bindings. It can be removed once we have a prober DMA controller
+	 * framework for DT.
+	 */
+	if (pdev->dev.of_node && cpu_is_pxa3xx()) {
+		info->drcmr_dat = 97;
+		info->drcmr_cmd = 99;
+	} else {
+		r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+		if (r == NULL) {
+			dev_err(&pdev->dev, "no resource defined for data DMA\n");
+			ret = -ENXIO;
+			goto fail_put_clk;
+		}
 
-	r = platform_get_resource(pdev, IORESOURCE_DMA, 1);
-	if (r == NULL) {
-		dev_err(&pdev->dev, "no resource defined for command DMA\n");
-		ret = -ENXIO;
-		goto fail_put_clk;
+		r = platform_get_resource(pdev, IORESOURCE_DMA, 1);
+		if (r == NULL) {
+			dev_err(&pdev->dev, "no resource defined for command DMA\n");
+			ret = -ENXIO;
+			goto fail_put_clk;
+		}
 	}
-	info->drcmr_cmd = r->start;
 
 	irq = platform_get_irq(pdev, 0);
 	if (irq < 0) {
@@ -1200,12 +1210,55 @@ static int pxa3xx_nand_remove(struct platform_device *pdev)
 	return 0;
 }
 
+#ifdef CONFIG_OF
+static struct of_device_id pxa3xx_nand_dt_ids[] = {
+	{ .compatible = "mrvl,pxa3xx-nand" },
+	{}
+};
+MODULE_DEVICE_TABLE(of, i2c_pxa_dt_ids);
+
+static int pxa3xx_nand_probe_dt(struct platform_device *pdev)
+{
+	struct pxa3xx_nand_platform_data *pdata;
+	struct device_node *np = pdev->dev.of_node;
+	const struct of_device_id *of_id =
+			of_match_device(pxa3xx_nand_dt_ids, &pdev->dev);
+
+	if (!of_id)
+		return 0;
+
+	pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+	if (!pdata)
+		return -ENOMEM;
+
+	if (of_get_property(np, "mrvl,nand-enable-arbiter", NULL))
+		pdata->enable_arbiter = 1;
+	if (of_get_property(np, "mrvl,nand-keep-config", NULL))
+		pdata->keep_config = 1;
+	of_property_read_u32(np, "num-cs", &pdata->num_cs);
+
+	pdev->dev.platform_data = pdata;
+
+	return 0;
+}
+#else
+static inline int pxa3xx_nand_probe_dt(struct platform_device *)
+{
+	return 0;
+}
+#endif
+
 static int pxa3xx_nand_probe(struct platform_device *pdev)
 {
 	struct pxa3xx_nand_platform_data *pdata;
+	struct mtd_part_parser_data ppdata = {};
 	struct pxa3xx_nand_info *info;
 	int ret, cs, probe_success;
 
+	ret = pxa3xx_nand_probe_dt(pdev);
+	if (ret)
+		return ret;
+
 	pdata = pdev->dev.platform_data;
 	if (!pdata) {
 		dev_err(&pdev->dev, "no platform data defined\n");
@@ -1229,8 +1282,9 @@ static int pxa3xx_nand_probe(struct platform_device *pdev)
 			continue;
 		}
 
+		ppdata.of_node = pdev->dev.of_node;
 		ret = mtd_device_parse_register(info->host[cs]->mtd, NULL,
-						NULL, pdata->parts[cs],
+						&ppdata, pdata->parts[cs],
 						pdata->nr_parts[cs]);
 		if (!ret)
 			probe_success = 1;
@@ -1306,6 +1360,7 @@ static int pxa3xx_nand_resume(struct platform_device *pdev)
 static struct platform_driver pxa3xx_nand_driver = {
 	.driver = {
 		.name	= "pxa3xx-nand",
+		.of_match_table = of_match_ptr(pxa3xx_nand_dt_ids),
 	},
 	.probe		= pxa3xx_nand_probe,
 	.remove		= pxa3xx_nand_remove,
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 4/7] ARM: pxa: add devicetree code for irq handling
  2012-07-25 16:17 [PATCH 0/7] Assorted PXA3xx DT patches Daniel Mack
                   ` (2 preceding siblings ...)
  2012-07-25 16:17 ` [PATCH 3/7] MTD: pxa3xx-nand: add devicetree bindings Daniel Mack
@ 2012-07-25 16:17 ` Daniel Mack
  2012-07-25 16:17 ` [PATCH 5/7] ARM: pxa3xx: skip default device initialization when booting via DT Daniel Mack
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 16:17 UTC (permalink / raw)
  To: linux-arm-kernel

Properly register on-chip interrupt using the irqdomain logic. The
number of interrupts is taken from the devicetree node.

Signed-off-by: Daniel Mack <zonque@gmail.com>
---
 arch/arm/mach-pxa/irq.c    |   73 ++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/mach-pxa/pxa3xx.c |   17 +++++++++--
 2 files changed, 88 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c
index 5dae15e..a403d49 100644
--- a/arch/arm/mach-pxa/irq.c
+++ b/arch/arm/mach-pxa/irq.c
@@ -17,6 +17,8 @@
 #include <linux/syscore_ops.h>
 #include <linux/io.h>
 #include <linux/irq.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
 
 #include <asm/exception.h>
 
@@ -202,3 +204,74 @@ struct syscore_ops pxa_irq_syscore_ops = {
 	.suspend	= pxa_irq_suspend,
 	.resume		= pxa_irq_resume,
 };
+
+#ifdef CONFIG_OF
+static struct irq_domain *pxa_irq_domain;
+
+static int pxa_irq_map(struct irq_domain *h, unsigned int virq,
+		       irq_hw_number_t hw)
+{
+	int irq, i = hw % 32;
+	void __iomem *base = irq_base(hw / 32);
+
+	/* initialize interrupt priority */
+	if (cpu_has_ipr())
+		__raw_writel(i | IPR_VALID, IRQ_BASE + IPR(i));
+
+	irq = PXA_IRQ(virq);
+	irq_set_chip_and_handler(irq, &pxa_internal_irq_chip,
+				 handle_level_irq);
+	irq_set_chip_data(virq, base);
+	set_irq_flags(virq, IRQF_VALID);
+
+	return 0;
+}
+
+static struct irq_domain_ops pxa_irq_ops = {
+	.map    = pxa_irq_map,
+	.xlate  = irq_domain_xlate_onecell,
+};
+
+static const struct of_device_id intc_ids[] __initconst = {
+	{ .compatible = "mrvl,pxa-intc", .data = NULL },
+	{}
+};
+
+void __init pxa_dt_irq_init(int (*fn)(struct irq_data *, unsigned int))
+{
+	struct device_node *node;
+	const struct of_device_id *of_id;
+	struct pxa_intc_conf *conf;
+	int nr_irqs, irq_base, ret;
+
+	node = of_find_matching_node(NULL, intc_ids);
+	if (!node) {
+		pr_err("Failed to find interrupt controller in arch-pxa\n");
+		return;
+	}
+	of_id = of_match_node(intc_ids, node);
+	conf = of_id->data;
+
+	ret = of_property_read_u32(node, "mrvl,intc-nr-irqs", &nr_irqs);
+	if (ret) {
+		pr_err("Not found mrvl,intc-nr-irqs property\n");
+		return;
+	}
+
+	irq_base = irq_alloc_descs(-1, 0, nr_irqs, 0);
+	if (irq_base < 0) {
+		pr_err("Failed to allocate IRQ numbers\n");
+		return;
+	}
+
+	pxa_irq_domain = irq_domain_add_legacy(node, nr_irqs, 0, 0,
+					       &pxa_irq_ops, NULL);
+	if (!pxa_irq_domain)
+		panic("Unable to add PXA IRQ domain\n");
+
+	irq_set_default_host(pxa_irq_domain);
+	pxa_init_irq(nr_irqs, fn);
+
+	return;
+}
+#endif /* CONFIG_OF */
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
index dffb7e8..1827d3c 100644
--- a/arch/arm/mach-pxa/pxa3xx.c
+++ b/arch/arm/mach-pxa/pxa3xx.c
@@ -40,6 +40,8 @@
 #define PECR_IE(n)	((1 << ((n) * 2)) << 28)
 #define PECR_IS(n)	((1 << ((n) * 2)) << 29)
 
+extern void __init pxa_dt_irq_init(int (*fn)(struct irq_data *, unsigned int));
+
 static DEFINE_PXA3_CKEN(pxa3xx_ffuart, FFUART, 14857000, 1);
 static DEFINE_PXA3_CKEN(pxa3xx_btuart, BTUART, 14857000, 1);
 static DEFINE_PXA3_CKEN(pxa3xx_stuart, STUART, 14857000, 1);
@@ -382,7 +384,7 @@ static void __init pxa_init_ext_wakeup_irq(int (*fn)(struct irq_data *,
 	pxa_ext_wakeup_chip.irq_set_wake = fn;
 }
 
-void __init pxa3xx_init_irq(void)
+static void __init __pxa3xx_init_irq(void)
 {
 	/* enable CP6 access */
 	u32 value;
@@ -390,10 +392,21 @@ void __init pxa3xx_init_irq(void)
 	value |= (1 << 6);
 	__asm__ __volatile__("mcr p15, 0, %0, c15, c1, 0\n": :"r"(value));
 
-	pxa_init_irq(56, pxa3xx_set_wake);
 	pxa_init_ext_wakeup_irq(pxa3xx_set_wake);
 }
 
+void __init pxa3xx_init_irq(void)
+{
+	__pxa3xx_init_irq();
+	pxa_init_irq(56, pxa3xx_set_wake);
+}
+
+void __init pxa3xx_dt_init_irq(void)
+{
+	__pxa3xx_init_irq();
+	pxa_dt_irq_init(pxa3xx_set_wake);
+}
+
 static struct map_desc pxa3xx_io_desc[] __initdata = {
 	{	/* Mem Ctl */
 		.virtual	= (unsigned long)SMEMC_VIRT,
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 5/7] ARM: pxa3xx: skip default device initialization when booting via DT
  2012-07-25 16:17 [PATCH 0/7] Assorted PXA3xx DT patches Daniel Mack
                   ` (3 preceding siblings ...)
  2012-07-25 16:17 ` [PATCH 4/7] ARM: pxa: add devicetree code for irq handling Daniel Mack
@ 2012-07-25 16:17 ` Daniel Mack
  2012-07-25 16:17 ` [PATCH 6/7] ARM: pxa3xx: add generic DT machine code Daniel Mack
  2012-07-25 16:17 ` [PATCH 7/7] ARM: pxa: add .dtsi files Daniel Mack
  6 siblings, 0 replies; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 16:17 UTC (permalink / raw)
  To: linux-arm-kernel

When booting via DT, the default PXA devices must not have been probed
before, otherwise the augmented information from the device tree is
ignored.

Signed-off-by: Daniel Mack <zonque@gmail.com>
---
 arch/arm/mach-pxa/pxa3xx.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
index 1827d3c..4a9d04a 100644
--- a/arch/arm/mach-pxa/pxa3xx.c
+++ b/arch/arm/mach-pxa/pxa3xx.c
@@ -19,6 +19,7 @@
 #include <linux/platform_device.h>
 #include <linux/irq.h>
 #include <linux/io.h>
+#include <linux/of.h>
 #include <linux/syscore_ops.h>
 #include <linux/i2c/pxa-i2c.h>
 
@@ -479,7 +480,8 @@ static int __init pxa3xx_init(void)
 		register_syscore_ops(&pxa3xx_mfp_syscore_ops);
 		register_syscore_ops(&pxa3xx_clock_syscore_ops);
 
-		ret = platform_add_devices(devices, ARRAY_SIZE(devices));
+		if (!of_have_populated_dt())
+			ret = platform_add_devices(devices, ARRAY_SIZE(devices));
 	}
 
 	return ret;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 6/7] ARM: pxa3xx: add generic DT machine code
  2012-07-25 16:17 [PATCH 0/7] Assorted PXA3xx DT patches Daniel Mack
                   ` (4 preceding siblings ...)
  2012-07-25 16:17 ` [PATCH 5/7] ARM: pxa3xx: skip default device initialization when booting via DT Daniel Mack
@ 2012-07-25 16:17 ` Daniel Mack
  2012-07-25 17:34   ` Arnd Bergmann
  2012-07-25 16:17 ` [PATCH 7/7] ARM: pxa: add .dtsi files Daniel Mack
  6 siblings, 1 reply; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 16:17 UTC (permalink / raw)
  To: linux-arm-kernel

Add a DT_MACHINE_START entry for PXA3xx machines and a auxdata table for
some of the devices. This file can be extended to also support pxa2xx
boards.

Signed-off-by: Daniel Mack <zonque@gmail.com>
---
 arch/arm/mach-pxa/Kconfig  |   12 +++++++++
 arch/arm/mach-pxa/Makefile |    3 +++
 arch/arm/mach-pxa/pxa-dt.c |   61 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 76 insertions(+)
 create mode 100644 arch/arm/mach-pxa/pxa-dt.c

diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index fe2d1f8..8e6288d 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -25,6 +25,18 @@ config PXA_V7_MACH_AUTO
 if !ARCH_PXA_V7
 comment "Intel/Marvell Dev Platforms (sorted by hardware release time)"
 
+config MACH_PXA3XX_DT
+	bool "Support PXA3xx platforms from device tree"
+	select PXA3xx
+	select CPU_PXA300
+	select POWER_SUPPLY
+	select HAVE_PWM
+	select USE_OF
+	help
+	  Include support for Marvell PXA3xx based platforms using
+	  the device tree. Needn't select any other machine while
+	  MACH_PXA3XX_DT is enabled.
+
 config ARCH_LUBBOCK
 	bool "Intel DBPXA250 Development Platform (aka Lubbock)"
 	select PXA25x
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
index be0f7df..2bedc9e 100644
--- a/arch/arm/mach-pxa/Makefile
+++ b/arch/arm/mach-pxa/Makefile
@@ -26,6 +26,9 @@ obj-$(CONFIG_CPU_PXA930)	+= pxa930.o
 
 # NOTE: keep the order of boards in accordance to their order in Kconfig
 
+# Device Tree support
+obj-$(CONFIG_MACH_PXA3XX_DT)	+= pxa-dt.o
+
 # Intel/Marvell Dev Platforms
 obj-$(CONFIG_ARCH_LUBBOCK)	+= lubbock.o
 obj-$(CONFIG_MACH_MAINSTONE)	+= mainstone.o
diff --git a/arch/arm/mach-pxa/pxa-dt.c b/arch/arm/mach-pxa/pxa-dt.c
new file mode 100644
index 0000000..b46618e
--- /dev/null
+++ b/arch/arm/mach-pxa/pxa-dt.c
@@ -0,0 +1,61 @@
+/*
+ *  linux/arch/arm/mach-pxa/pxa-dt.c
+ *
+ *  Copyright (C) 2012 Daniel Mack
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  publishhed by the Free Software Foundation.
+ */
+
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/time.h>
+#include <mach/irqs.h>
+#include <mach/pxa3xx.h>
+
+#include "generic.h"
+
+#ifdef CONFIG_PXA3xx
+extern void __init pxa3xx_dt_init_irq(void);
+
+static const struct of_dev_auxdata pxa3xx_auxdata_lookup[] __initconst = {
+	OF_DEV_AUXDATA("mrvl,pxa-uart",		0x40100000, "pxa2xx-uart.0", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-uart",		0x40200000, "pxa2xx-uart.1", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-uart",		0x40700000, "pxa2xx-uart.2", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-uart",		0x41600000, "pxa2xx-uart.3", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-mmc",		0x41100000, "pxa2xx-mci.0", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-gpio",		0x40e00000, "pxa-gpio", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-ohci",		0x4c000000, "pxa27x-ohci", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-i2c",		0x40301680, "pxa2xx-i2c.0", NULL),
+	OF_DEV_AUXDATA("mrvl,pwri2c",		0x40f500c0, "pxa3xx-i2c.1", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa3xx-nand",	0x43100000, "pxa3xx-nand", NULL),
+	{}
+};
+
+static void __init pxa3xx_dt_init(void)
+{
+	of_platform_populate(NULL, of_default_bus_match_table,
+			     pxa3xx_auxdata_lookup, NULL);
+}
+
+static const char *pxa3xx_dt_board_compat[] __initdata = {
+	"mrvl,pxa3xx",
+	NULL,
+};
+#endif
+
+#ifdef CONFIG_PXA3xx
+DT_MACHINE_START(PXA_DT, "Marvell PXA3xx (Device Tree Support)")
+	.map_io		= pxa3xx_map_io,
+	.init_irq	= pxa3xx_dt_init_irq,
+	.handle_irq	= pxa3xx_handle_irq,
+	.timer		= &pxa_timer,
+	.restart	= pxa_restart,
+	.init_machine	= pxa3xx_dt_init,
+	.dt_compat	= pxa3xx_dt_board_compat,
+MACHINE_END
+#endif
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 7/7] ARM: pxa: add .dtsi files
  2012-07-25 16:17 [PATCH 0/7] Assorted PXA3xx DT patches Daniel Mack
                   ` (5 preceding siblings ...)
  2012-07-25 16:17 ` [PATCH 6/7] ARM: pxa3xx: add generic DT machine code Daniel Mack
@ 2012-07-25 16:17 ` Daniel Mack
  6 siblings, 0 replies; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 16:17 UTC (permalink / raw)
  To: linux-arm-kernel

This adds .dtsi files to describe the PXA SoCs. pxa3xx simply augments
pxa2xx. Not all devices are listed yet, and it will need some time to
get all the drivers ported.

Signed-off-by: Daniel Mack <zonque@gmail.com>
---
 arch/arm/boot/dts/pxa2xx.dtsi |  132 +++++++++++++++++++++++++++++++++++++++++
 arch/arm/boot/dts/pxa3xx.dtsi |   26 ++++++++
 2 files changed, 158 insertions(+)
 create mode 100644 arch/arm/boot/dts/pxa2xx.dtsi
 create mode 100644 arch/arm/boot/dts/pxa3xx.dtsi

diff --git a/arch/arm/boot/dts/pxa2xx.dtsi b/arch/arm/boot/dts/pxa2xx.dtsi
new file mode 100644
index 0000000..1046158
--- /dev/null
+++ b/arch/arm/boot/dts/pxa2xx.dtsi
@@ -0,0 +1,132 @@
+/*
+ * pxa2xx.dtsi - Device Tree Include file for Marvell PXA2xx family SoC
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+/include/ "skeleton.dtsi"
+
+/ {
+	model = "Marvell PXA2xx family SoC";
+	compatible = "marvell,pxa";
+	interrupt-parent = <&pxairq>;
+
+	aliases {
+		serial0 = &ffuart;
+		serial1 = &btuart;
+		serial2 = &stuart;
+		serial3 = &hwuart;
+		i2c0 = &pwri2c;
+		i2c1 = &pxai2c1;
+	};
+
+	cpus {
+		cpu at 0 {
+			compatible = "arm,xscale";
+		};
+	};
+
+	pxabus {
+		compatible = "simple-bus";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		pxairq: interrupt-controller at 40d00000 {
+			#interrupt-cells = <1>;
+			compatible = "mrvl,pxa-intc";
+			interrupt-controller;
+			interrupt-parent;
+			mrvl,intc-nr-irqs = <56>;
+			reg = <0x40d00000 0xd0>;
+		};
+
+		gpio: gpio at 40e00000 {
+			compatible = "mrvl,pxa-gpio";
+			#address-cells = <0x1>;
+			#size-cells = <0x1>;
+			reg = <0x40e00000 0x10000>;
+			gpio-controller;
+			#gpio-cells = <0x2>;
+			interrupts = <10>;
+			interrupt-names = "gpio_mux";
+			interrupt-controller;
+			#interrupt-cells = <0x2>;
+			ranges;
+
+			gcb0: gpio at 40e00000 {
+				reg = <0x40e00000 0x4>;
+			};
+
+			gcb1: gpio at 40e00004 {
+				reg = <0x40e00004 0x4>;
+			};
+
+			gcb2: gpio at 40e00008 {
+				reg = <0x40e00008 0x4>;
+			};
+			gcb3: gpio at 40e0000c {
+				reg = <0x40e0000c 0x4>;
+			};
+		};
+
+		ffuart: uart at 40100000 {
+			compatible = "mrvl,pxa-uart";
+			reg = <0x40100000 0x30>;
+			interrupts = <22>;
+			status = "disabled";
+		};
+
+		btuart: uart at 40200000 {
+			compatible = "mrvl,pxa-uart";
+			reg = <0x40200000 0x30>;
+			interrupts = <21>;
+			status = "disabled";
+		};
+
+		stuart: uart at 40700000 {
+			compatible = "mrvl,pxa-uart";
+			reg = <0x40700000 0x30>;
+			interrupts = <20>;
+			status = "disabled";
+		};
+
+		hwuart: uart at 41100000 {
+			compatible = "mrvl,pxa-uart";
+			reg = <0x41100000 0x30>;
+			interrupts = <7>;
+			status = "disabled";
+		};
+
+		pxai2c1: i2c at 40301680 {
+			compatible = "mrvl,pxa-i2c";
+			reg = <0x40301680 0x30>;
+			interrupts = <18>;
+			#address-cells = <0x1>;
+			#size-cells = <0>;
+			status = "disabled";
+		};
+
+		usb0: ohci at 4c000000 {
+			compatible = "mrvl,pxa-ohci";
+			reg = <0x4c000000 0x10000>;
+			interrupts = <3>;
+			status = "disabled";
+		};
+
+		mmc0: mmc at 41100000 {
+			compatible = "mrvl,pxa-mmc";
+			reg = <0x41100000 0x1000>;
+			interrupts = <23>;
+			status = "disabled";
+		};
+
+		rtc at 40900000 {
+			compatible = "mrvl,pxa-rtc";
+			reg = <0x40900000 0x3c>;
+			interrupts = <30 31>;
+		};
+	};
+};
diff --git a/arch/arm/boot/dts/pxa3xx.dtsi b/arch/arm/boot/dts/pxa3xx.dtsi
new file mode 100644
index 0000000..3b62793
--- /dev/null
+++ b/arch/arm/boot/dts/pxa3xx.dtsi
@@ -0,0 +1,26 @@
+/* The pxa3xx skeleton simply augments the 2xx version */
+/include/ "pxa2xx.dtsi"
+
+/ {
+	model = "Marvell PXA3xx familiy SoC";
+
+	pxabus {
+		pwri2c: i2c at 40f500c0 {
+			compatible = "mrvl,pwri2c";
+			reg = <0x40f500c0 0x30>;
+			interrupts = <6>;
+			#address-cells = <0x1>;
+			#size-cells = <0>;
+			status = "disabled";
+		};
+
+		nand0: nand at 43100000 {
+			compatible = "mrvl,pxa3xx-nand";
+			reg = <0x43100000 90>;
+			interrupts = <45>;
+			#address-cells = <1>;
+			#size-cells = <1>;	
+			status = "disabled";
+		};
+	};
+};
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/7] MMC: pxa-mci: add DT bindings
  2012-07-25 16:17 ` [PATCH 2/7] MMC: pxa-mci: add DT bindings Daniel Mack
@ 2012-07-25 16:47   ` Chris Ball
  2012-07-25 19:09     ` Daniel Mack
  0 siblings, 1 reply; 19+ messages in thread
From: Chris Ball @ 2012-07-25 16:47 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Daniel,

On Wed, Jul 25 2012, Daniel Mack wrote:
> Signed-off-by: Daniel Mack <zonque@gmail.com>
> Cc: Nicolas Pitre <nico@fluxnic.net>
> Cc: Chris Ball <cjb@laptop.org>
> ---
>  Documentation/devicetree/bindings/mmc/pxa-mmc.txt |   24 ++++++++++
>  drivers/mmc/host/pxamci.c                         |   50 +++++++++++++++++++++
>  2 files changed, 74 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/mmc/pxa-mmc.txt
>
> diff --git a/Documentation/devicetree/bindings/mmc/pxa-mmc.txt b/Documentation/devicetree/bindings/mmc/pxa-mmc.txt
> new file mode 100644
> index 0000000..8f0ea58
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mmc/pxa-mmc.txt
> @@ -0,0 +1,24 @@
> +* PXA MMC drivers
> +
> +Driver bindings for the PXA MCI (MMC/SDIO) interfaces
> +
> +Required properties:
> +- compatible: Should be "mrvl,pxa-mmc".
> +- reg: Should contain registers location and length
> +- interrupts: Should contain the interrupt
> +- vmmc-supply: A regulator for VMMC
> +
> +Optional properties:
> +- mrvl,detect-delay-ms: sets the detection delay timeout in ms.
> +- mrvl,gpio-card-detect: GPIO spec for the card detect pin
> +- mrvl,gpio-card-readonly: GPIO spec for the card write protection pin
> +- mrvl,gpio-power: GPIO spec for the card power enable pin

Please see Documentation/devicetree/bindings/mmc/mmc.txt.  It looks like
you should be using cd-gpios and wp-gpios, and you should refer to
mmc.txt instead of specifying reg/interrupts, with:

This file documents differences between the core properties in mmc.txt
and the properties used by the pxa-mmc driver.

I saw Arnd mention that we're moving from "mrvl," to "marvell,", but
maybe that's not finalized yet.  (And there are other drivers using
mrvl, so it'll presumably involve a large renaming patch.)

> +Examples:
> +
> +mmc0: mmc at 41100000 {
> +	compatible = "mrvl,pxa-mmc";
> +	reg = <0x41100000 0x1000>;
> +	interrupts = <23>;
> +};
> +
> diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c
> index cb2dc0e..39ddc00 100644
> --- a/drivers/mmc/host/pxamci.c
> +++ b/drivers/mmc/host/pxamci.c
> @@ -30,6 +30,9 @@
>  #include <linux/regulator/consumer.h>
>  #include <linux/gpio.h>
>  #include <linux/gfp.h>
> +#include <linux/of.h>
> +#include <linux/of_gpio.h>
> +#include <linux/of_device.h>
>  
>  #include <asm/sizes.h>
>  
> @@ -573,6 +576,48 @@ static irqreturn_t pxamci_detect_irq(int irq, void *devid)
>  	return IRQ_HANDLED;
>  }
>  
> +#ifdef CONFIG_OF
> +static const struct of_device_id pxa_mmc_dt_ids[] = {
> +        { .compatible = "mrvl,pxa-mmc" },
> +        { }
> +};
> +
> +MODULE_DEVICE_TABLE(of, pxa_mmc_dt_ids);
> +
> +static int __devinit pxamci_of_init(struct platform_device *pdev)
> +{
> +        struct device_node *np = pdev->dev.of_node;
> +        struct pxamci_platform_data *pdata;
> +        u32 tmp;
> +
> +        if (!np)
> +                return 0;
> +
> +        pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
> +        if (!pdata)
> +                return -ENOMEM;
> +
> +	pdata->gpio_card_detect =
> +		of_get_named_gpio(np, "pxa-mmc,gpio-card-detect", 0);
> +	pdata->gpio_card_ro =
> +		of_get_named_gpio(np, "pxa-mmc,gpio-card-readonly", 0);
> +	pdata->gpio_power =
> +		of_get_named_gpio(np, "pxa-mmc,gpio-power", 0);
> +
> +	if (of_property_read_u32(np, "pxa-mmc,detect-delay-ms", &tmp) == 0)
> +		pdata->detect_delay_ms = tmp;
> +
> +        pdev->dev.platform_data = pdata;
> +
> +        return 0;
> +}
> +#else
> +static int __devinit pxamci_of_init(struct platform_device *pdev)
> +{
> +        return 0;
> +}
> +#endif
> +
>  static int pxamci_probe(struct platform_device *pdev)
>  {
>  	struct mmc_host *mmc;
> @@ -580,6 +625,10 @@ static int pxamci_probe(struct platform_device *pdev)
>  	struct resource *r, *dmarx, *dmatx;
>  	int ret, irq, gpio_cd = -1, gpio_ro = -1, gpio_power = -1;
>  
> +	ret = pxamci_of_init(pdev);
> +	if (ret)
> +		return ret;
> +
>  	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  	irq = platform_get_irq(pdev, 0);
>  	if (!r || irq < 0)
> @@ -866,6 +915,7 @@ static struct platform_driver pxamci_driver = {
>  	.driver		= {
>  		.name	= DRIVER_NAME,
>  		.owner	= THIS_MODULE,
> +		.of_match_table = of_match_ptr(pxa_mmc_dt_ids),

Have you tried compiling without CONFIG_OF?  This doesn't look to be
inside #ifdef CONFIG_OF, which I think would cause a compile error.

>  #ifdef CONFIG_PM
>  		.pm	= &pxamci_pm_ops,
>  #endif

Thanks,

- Chris.
-- 
Chris Ball   <cjb@laptop.org>   <http://printf.net/>
One Laptop Per Child

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 1/7] RTC: add DT bindings to pxa-rtc
  2012-07-25 16:17 ` [PATCH 1/7] RTC: add DT bindings to pxa-rtc Daniel Mack
@ 2012-07-25 17:18   ` Arnd Bergmann
  2012-07-26 12:51   ` Sergei Shtylyov
  1 sibling, 0 replies; 19+ messages in thread
From: Arnd Bergmann @ 2012-07-25 17:18 UTC (permalink / raw)
  To: linux-arm-kernel

On Wednesday 25 July 2012, Daniel Mack wrote:
> +* PXA RTC
> +
> +PXA specific RTC driver.
> +
> +Required properties:
> +- compatible : Should be pxa-rtc
> +
> +Examples:
> +
> +rtc at 0 {
> +    compatible = "mrvl,pxa-rtc";
> +};

The description doesn't match the example here, I think you should
change both to marvell,pxa-rtc.

	Arnd

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 6/7] ARM: pxa3xx: add generic DT machine code
  2012-07-25 16:17 ` [PATCH 6/7] ARM: pxa3xx: add generic DT machine code Daniel Mack
@ 2012-07-25 17:34   ` Arnd Bergmann
  2012-07-25 18:07     ` Daniel Mack
  0 siblings, 1 reply; 19+ messages in thread
From: Arnd Bergmann @ 2012-07-25 17:34 UTC (permalink / raw)
  To: linux-arm-kernel

On Wednesday 25 July 2012, Daniel Mack wrote:
> Add a DT_MACHINE_START entry for PXA3xx machines and a auxdata table for
> some of the devices. This file can be extended to also support pxa2xx
> boards.
> 
> Signed-off-by: Daniel Mack <zonque@gmail.com>
> ---
>  arch/arm/mach-pxa/Kconfig  |   12 +++++++++
>  arch/arm/mach-pxa/Makefile |    3 +++
>  arch/arm/mach-pxa/pxa-dt.c |   61 ++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 76 insertions(+)

The code looks good, but I wonder if it would be better to add it to the pxa3xx.c
file instead. One more comment:


> +static const char *pxa3xx_dt_board_compat[] __initdata = {
> +       "mrvl,pxa3xx",
> +};

We should try to avoid wildcards in compatible properties but rather be
more specific. I would use separate values for pxa300/310/320/920/930/935
that you could all list here if they have the same auxdata lookup table.

	Arnd

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 6/7] ARM: pxa3xx: add generic DT machine code
  2012-07-25 17:34   ` Arnd Bergmann
@ 2012-07-25 18:07     ` Daniel Mack
  2012-07-25 19:04       ` Arnd Bergmann
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 18:07 UTC (permalink / raw)
  To: linux-arm-kernel

On 25.07.2012 19:34, Arnd Bergmann wrote:
> On Wednesday 25 July 2012, Daniel Mack wrote:
>> Add a DT_MACHINE_START entry for PXA3xx machines and a auxdata table for
>> some of the devices. This file can be extended to also support pxa2xx
>> boards.
>>
>> Signed-off-by: Daniel Mack <zonque@gmail.com>
>> ---
>>  arch/arm/mach-pxa/Kconfig  |   12 +++++++++
>>  arch/arm/mach-pxa/Makefile |    3 +++
>>  arch/arm/mach-pxa/pxa-dt.c |   61 ++++++++++++++++++++++++++++++++++++++++++++
>>  3 files changed, 76 insertions(+)
> 
> The code looks good, but I wonder if it would be better to add it to the pxa3xx.c
> file instead. One more comment:

Well, I though having tham separated from the generic code will make
things cleaner and also save us one #ifdef.

>> +static const char *pxa3xx_dt_board_compat[] __initdata = {
>> +       "mrvl,pxa3xx",
>> +};
> 
> We should try to avoid wildcards in compatible properties but rather be
> more specific. I would use separate values for pxa300/310/320/920/930/935
> that you could all list here if they have the same auxdata lookup table.

Ok, makes sense. I'm not sure about 920/930/935, so I'll leave them out
for now. Whoever successfully tests these can easly add that lines.

I'll wait for some more feedback and then resubmit the whole thing.


Thanks for the review, much appreciated.


Daniel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 6/7] ARM: pxa3xx: add generic DT machine code
  2012-07-25 18:07     ` Daniel Mack
@ 2012-07-25 19:04       ` Arnd Bergmann
  0 siblings, 0 replies; 19+ messages in thread
From: Arnd Bergmann @ 2012-07-25 19:04 UTC (permalink / raw)
  To: linux-arm-kernel

On Wednesday 25 July 2012, Daniel Mack wrote:
> On 25.07.2012 19:34, Arnd Bergmann wrote:
> > On Wednesday 25 July 2012, Daniel Mack wrote:
> >> Add a DT_MACHINE_START entry for PXA3xx machines and a auxdata table for
> >> some of the devices. This file can be extended to also support pxa2xx
> >> boards.
> >>
> >> Signed-off-by: Daniel Mack <zonque@gmail.com>
> >> ---
> >>  arch/arm/mach-pxa/Kconfig  |   12 +++++++++
> >>  arch/arm/mach-pxa/Makefile |    3 +++
> >>  arch/arm/mach-pxa/pxa-dt.c |   61 ++++++++++++++++++++++++++++++++++++++++++++
> >>  3 files changed, 76 insertions(+)
> > 
> > The code looks good, but I wonder if it would be better to add it to the pxa3xx.c
> > file instead. One more comment:
> 
> Well, I though having tham separated from the generic code will make
> things cleaner and also save us one #ifdef.

For new platforms that are DT-only we usually keep everything in one file,
but you're right that it makes some sense to have it separate while most
people use non-DT board files.

> >> +static const char *pxa3xx_dt_board_compat[] __initdata = {
> >> +       "mrvl,pxa3xx",
> >> +};
> > 
> > We should try to avoid wildcards in compatible properties but rather be
> > more specific. I would use separate values for pxa300/310/320/920/930/935
> > that you could all list here if they have the same auxdata lookup table.
> 
> Ok, makes sense. I'm not sure about 920/930/935, so I'll leave them out
> for now. Whoever successfully tests these can easly add that lines.

Sounds good.

	Arnd

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 2/7] MMC: pxa-mci: add DT bindings
  2012-07-25 16:47   ` Chris Ball
@ 2012-07-25 19:09     ` Daniel Mack
  0 siblings, 0 replies; 19+ messages in thread
From: Daniel Mack @ 2012-07-25 19:09 UTC (permalink / raw)
  To: linux-arm-kernel

On 25.07.2012 18:47, Chris Ball wrote:
> Hi Daniel,
> 
> On Wed, Jul 25 2012, Daniel Mack wrote:
>> Signed-off-by: Daniel Mack <zonque@gmail.com>
>> Cc: Nicolas Pitre <nico@fluxnic.net>
>> Cc: Chris Ball <cjb@laptop.org>
>> ---
>>  Documentation/devicetree/bindings/mmc/pxa-mmc.txt |   24 ++++++++++
>>  drivers/mmc/host/pxamci.c                         |   50 +++++++++++++++++++++
>>  2 files changed, 74 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/mmc/pxa-mmc.txt
>>
>> diff --git a/Documentation/devicetree/bindings/mmc/pxa-mmc.txt b/Documentation/devicetree/bindings/mmc/pxa-mmc.txt
>> new file mode 100644
>> index 0000000..8f0ea58
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/mmc/pxa-mmc.txt
>> @@ -0,0 +1,24 @@
>> +* PXA MMC drivers
>> +
>> +Driver bindings for the PXA MCI (MMC/SDIO) interfaces
>> +
>> +Required properties:
>> +- compatible: Should be "mrvl,pxa-mmc".
>> +- reg: Should contain registers location and length
>> +- interrupts: Should contain the interrupt
>> +- vmmc-supply: A regulator for VMMC
>> +
>> +Optional properties:
>> +- mrvl,detect-delay-ms: sets the detection delay timeout in ms.
>> +- mrvl,gpio-card-detect: GPIO spec for the card detect pin
>> +- mrvl,gpio-card-readonly: GPIO spec for the card write protection pin
>> +- mrvl,gpio-power: GPIO spec for the card power enable pin
> 
> Please see Documentation/devicetree/bindings/mmc/mmc.txt.  It looks like
> you should be using cd-gpios and wp-gpios, and you should refer to
> mmc.txt instead of specifying reg/interrupts, with:
> 
> This file documents differences between the core properties in mmc.txt
> and the properties used by the pxa-mmc driver.

Ok, will do. Thanks for the review!

> I saw Arnd mention that we're moving from "mrvl," to "marvell,", but
> maybe that's not finalized yet.  (And there are other drivers using
> mrvl, so it'll presumably involve a large renaming patch.)

I have no strong opinion on that, really. But as this is a new driver,
we can as well do it right in the first place.

[snip]

>> @@ -866,6 +915,7 @@ static struct platform_driver pxamci_driver = {
>>  	.driver		= {
>>  		.name	= DRIVER_NAME,
>>  		.owner	= THIS_MODULE,
>> +		.of_match_table = of_match_ptr(pxa_mmc_dt_ids),
> 
> Have you tried compiling without CONFIG_OF?  This doesn't look to be
> inside #ifdef CONFIG_OF, which I think would cause a compile error.

of_match_ptr() validates to NULL for !CONFIG_OF. Quite nice :)


Daniel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 3/7] MTD: pxa3xx-nand: add devicetree bindings
  2012-07-25 16:17 ` [PATCH 3/7] MTD: pxa3xx-nand: add devicetree bindings Daniel Mack
@ 2012-07-26  0:59   ` Marek Vasut
  2012-07-26  6:30     ` Arnd Bergmann
  2012-07-26  6:33     ` Daniel Mack
  0 siblings, 2 replies; 19+ messages in thread
From: Marek Vasut @ 2012-07-26  0:59 UTC (permalink / raw)
  To: linux-arm-kernel

Dear Daniel Mack,

> This patch contains a hack to get the DMA resources of the device when
> probed from a devicetree node. This can be removed once a generic DMA
> controller framework lands.
> 
> A mtd_part_parser_data is passed mtd_device_parse_register which
> contains a reference to the device node, so MTD partitions can be
> added as children.
> 
> Signed-off-by: Daniel Mack <zonque@gmail.com>
> Cc: David Woodhouse <dwmw2@infradead.org>
> ---
>  .../devicetree/bindings/mtd/pxa3xx-nand.txt        |   31 ++++++++
>  drivers/mtd/nand/pxa3xx_nand.c                     |   83
> ++++++++++++++++---- 2 files changed, 100 insertions(+), 14 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/mtd/pxa3xx-nand.txt
> 
> diff --git a/Documentation/devicetree/bindings/mtd/pxa3xx-nand.txt
> b/Documentation/devicetree/bindings/mtd/pxa3xx-nand.txt new file mode
> 100644
> index 0000000..6e28cef
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mtd/pxa3xx-nand.txt
> @@ -0,0 +1,31 @@
> +PXA3xx NAND DT bindings
> +
> +Required properties:
> +
> + - compatible:		Should be "mrvl,pxa3xx-nand"
> + - reg: 		The register base for the controller
> + - interrupts:		The interrupt to map
> + - #address-cells:	Set to <1> if the node includes partitions
> +
> +Optional properties:
> +
> + - mrvl,nand-enable-arbiter:	Set to enable the bus arbiter
> + - mrvl,nand-keep-config:	Set to keep the NAND controller config as set
> +				by the bootloader
> + - num-cs:			Number of chipselect lines to usw
> +
> +Example:
> +
> +	nand0: nand at 43100000 {
> +		compatible = "mrvl,pxa3xx-nand";
> +		reg = <0x43100000 90> ;

0x90 maybe?

> +		interrupts = <45>;
> +		#address-cells = <1>;
> +
> +		mrvl,nand-enable-arbiter;
> +		mrvl,nand-keep-config;
> +		num-cs = <1>;
> +
> +		/* partitions (optional) */
> +	};
> +
> diff --git a/drivers/mtd/nand/pxa3xx_nand.c
> b/drivers/mtd/nand/pxa3xx_nand.c index 252aaef..fb592a9 100644
> --- a/drivers/mtd/nand/pxa3xx_nand.c
> +++ b/drivers/mtd/nand/pxa3xx_nand.c
> @@ -22,6 +22,8 @@
>  #include <linux/io.h>
>  #include <linux/irq.h>
>  #include <linux/slab.h>
> +#include <linux/of.h>
> +#include <linux/of_device.h>
> 
>  #include <mach/dma.h>
>  #include <plat/pxa3xx_nand.h>
> @@ -1081,21 +1083,29 @@ static int alloc_nand_resource(struct
> platform_device *pdev) }
>  	clk_enable(info->clk);
> 
> -	r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
> -	if (r == NULL) {
> -		dev_err(&pdev->dev, "no resource defined for data DMA\n");
> -		ret = -ENXIO;
> -		goto fail_put_clk;
> -	}
> -	info->drcmr_dat = r->start;
> +	/*
> +	 * This is a dirty hack to make this driver work from devicetree
> +	 * bindings. It can be removed once we have a prober DMA controller
> +	 * framework for DT.
> +	 */
> +	if (pdev->dev.of_node && cpu_is_pxa3xx()) {
> +		info->drcmr_dat = 97;
> +		info->drcmr_cmd = 99;

cpu_is_() stuff should begone ... besides, what are these numbers here?

> +	} else {
> +		r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
> +		if (r == NULL) {
> +			dev_err(&pdev->dev, "no resource defined for data 
DMA\n");
> +			ret = -ENXIO;
> +			goto fail_put_clk;
> +		}
> 
> -	r = platform_get_resource(pdev, IORESOURCE_DMA, 1);
> -	if (r == NULL) {
> -		dev_err(&pdev->dev, "no resource defined for command DMA\n");
> -		ret = -ENXIO;
> -		goto fail_put_clk;
> +		r = platform_get_resource(pdev, IORESOURCE_DMA, 1);
> +		if (r == NULL) {
> +			dev_err(&pdev->dev, "no resource defined for command 
DMA\n");
> +			ret = -ENXIO;
> +			goto fail_put_clk;
> +		}
>  	}
> -	info->drcmr_cmd = r->start;
> 
>  	irq = platform_get_irq(pdev, 0);
>  	if (irq < 0) {
> @@ -1200,12 +1210,55 @@ static int pxa3xx_nand_remove(struct
> platform_device *pdev) return 0;
>  }
> 
> +#ifdef CONFIG_OF
> +static struct of_device_id pxa3xx_nand_dt_ids[] = {
> +	{ .compatible = "mrvl,pxa3xx-nand" },
> +	{}
> +};
> +MODULE_DEVICE_TABLE(of, i2c_pxa_dt_ids);
> +
> +static int pxa3xx_nand_probe_dt(struct platform_device *pdev)
> +{
> +	struct pxa3xx_nand_platform_data *pdata;
> +	struct device_node *np = pdev->dev.of_node;
> +	const struct of_device_id *of_id =
> +			of_match_device(pxa3xx_nand_dt_ids, &pdev->dev);
> +
> +	if (!of_id)
> +		return 0;
> +
> +	pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
> +	if (!pdata)
> +		return -ENOMEM;
> +
> +	if (of_get_property(np, "mrvl,nand-enable-arbiter", NULL))
> +		pdata->enable_arbiter = 1;
> +	if (of_get_property(np, "mrvl,nand-keep-config", NULL))

of_property_read_bool() please.

> +		pdata->keep_config = 1;
> +	of_property_read_u32(np, "num-cs", &pdata->num_cs);
> +
> +	pdev->dev.platform_data = pdata;
> +
> +	return 0;
> +}
> +#else
> +static inline int pxa3xx_nand_probe_dt(struct platform_device *)
> +{
> +	return 0;
> +}
> +#endif
> +
>  static int pxa3xx_nand_probe(struct platform_device *pdev)
>  {
>  	struct pxa3xx_nand_platform_data *pdata;
> +	struct mtd_part_parser_data ppdata = {};
>  	struct pxa3xx_nand_info *info;
>  	int ret, cs, probe_success;
> 
> +	ret = pxa3xx_nand_probe_dt(pdev);
> +	if (ret)
> +		return ret;
> +
>  	pdata = pdev->dev.platform_data;
>  	if (!pdata) {
>  		dev_err(&pdev->dev, "no platform data defined\n");
> @@ -1229,8 +1282,9 @@ static int pxa3xx_nand_probe(struct platform_device
> *pdev) continue;
>  		}
> 
> +		ppdata.of_node = pdev->dev.of_node;
>  		ret = mtd_device_parse_register(info->host[cs]->mtd, NULL,
> -						NULL, pdata->parts[cs],
> +						&ppdata, pdata->parts[cs],
>  						pdata->nr_parts[cs]);
>  		if (!ret)
>  			probe_success = 1;
> @@ -1306,6 +1360,7 @@ static int pxa3xx_nand_resume(struct platform_device
> *pdev) static struct platform_driver pxa3xx_nand_driver = {
>  	.driver = {
>  		.name	= "pxa3xx-nand",
> +		.of_match_table = of_match_ptr(pxa3xx_nand_dt_ids),
>  	},
>  	.probe		= pxa3xx_nand_probe,
>  	.remove		= pxa3xx_nand_remove,

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 3/7] MTD: pxa3xx-nand: add devicetree bindings
  2012-07-26  0:59   ` Marek Vasut
@ 2012-07-26  6:30     ` Arnd Bergmann
  2012-07-26  6:53       ` Daniel Mack
  2012-07-26  6:33     ` Daniel Mack
  1 sibling, 1 reply; 19+ messages in thread
From: Arnd Bergmann @ 2012-07-26  6:30 UTC (permalink / raw)
  To: linux-arm-kernel

On Thursday 26 July 2012, Marek Vasut wrote:
> > -     r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
> > -     if (r == NULL) {
> > -             dev_err(&pdev->dev, "no resource defined for data DMA\n");
> > -             ret = -ENXIO;
> > -             goto fail_put_clk;
> > -     }
> > -     info->drcmr_dat = r->start;
> > +     /*
> > +      * This is a dirty hack to make this driver work from devicetree
> > +      * bindings. It can be removed once we have a prober DMA controller
> > +      * framework for DT.
> > +      */
> > +     if (pdev->dev.of_node && cpu_is_pxa3xx()) {
> > +             info->drcmr_dat = 97;
> > +             info->drcmr_cmd = 99;
> 
> cpu_is_() stuff should begone ... besides, what are these numbers here?

They are the numbers from the DMA resource. It's ugly but I think reasonable
to do this here. We will clean it up soon, once the bindings are in place.

I did notice though the the two "info->drcmr_dat = r->start" assignments in
the non-DT case are removed here. I think that's a bug.

	Arnd

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 3/7] MTD: pxa3xx-nand: add devicetree bindings
  2012-07-26  0:59   ` Marek Vasut
  2012-07-26  6:30     ` Arnd Bergmann
@ 2012-07-26  6:33     ` Daniel Mack
  1 sibling, 0 replies; 19+ messages in thread
From: Daniel Mack @ 2012-07-26  6:33 UTC (permalink / raw)
  To: linux-arm-kernel

On 26.07.2012 02:59, Marek Vasut wrote:
>> This patch contains a hack to get the DMA resources of the device when
>> probed from a devicetree node. This can be removed once a generic DMA
>> controller framework lands.
>>
>> A mtd_part_parser_data is passed mtd_device_parse_register which
>> contains a reference to the device node, so MTD partitions can be
>> added as children.
>>

>> +
>> +	nand0: nand at 43100000 {
>> +		compatible = "mrvl,pxa3xx-nand";
>> +		reg = <0x43100000 90> ;
> 
> 0x90 maybe?

No, mach-pxa/devices.c has 0x53 which would be 83. I chose 90 because
the register space up to 0x7c is unused. For some reason, lengths are
more likely given in dec than in hex.

> 
>> +		interrupts = <45>;
>> +		#address-cells = <1>;
>> +
>> +		mrvl,nand-enable-arbiter;
>> +		mrvl,nand-keep-config;
>> +		num-cs = <1>;
>> +
>> +		/* partitions (optional) */
>> +	};
>> +
>> diff --git a/drivers/mtd/nand/pxa3xx_nand.c
>> b/drivers/mtd/nand/pxa3xx_nand.c index 252aaef..fb592a9 100644
>> --- a/drivers/mtd/nand/pxa3xx_nand.c
>> +++ b/drivers/mtd/nand/pxa3xx_nand.c
>> @@ -22,6 +22,8 @@
>>  #include <linux/io.h>
>>  #include <linux/irq.h>
>>  #include <linux/slab.h>
>> +#include <linux/of.h>
>> +#include <linux/of_device.h>
>>
>>  #include <mach/dma.h>
>>  #include <plat/pxa3xx_nand.h>
>> @@ -1081,21 +1083,29 @@ static int alloc_nand_resource(struct
>> platform_device *pdev) }
>>  	clk_enable(info->clk);
>>
>> -	r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
>> -	if (r == NULL) {
>> -		dev_err(&pdev->dev, "no resource defined for data DMA\n");
>> -		ret = -ENXIO;
>> -		goto fail_put_clk;
>> -	}
>> -	info->drcmr_dat = r->start;
>> +	/*
>> +	 * This is a dirty hack to make this driver work from devicetree
>> +	 * bindings. It can be removed once we have a prober DMA controller
>> +	 * framework for DT.
>> +	 */
>> +	if (pdev->dev.of_node && cpu_is_pxa3xx()) {
>> +		info->drcmr_dat = 97;
>> +		info->drcmr_cmd = 99;
> 
> cpu_is_() stuff should begone ... besides, what are these numbers here?

Hmm? Did you read the comment above this block and in the commit log?
The problem is that there is no generic DMA controller implementation
for DT, so we have to live with such hacks until this changes.



Daniel


> 
>> +	} else {
>> +		r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
>> +		if (r == NULL) {
>> +			dev_err(&pdev->dev, "no resource defined for data 
> DMA\n");
>> +			ret = -ENXIO;
>> +			goto fail_put_clk;
>> +		}
>>
>> -	r = platform_get_resource(pdev, IORESOURCE_DMA, 1);
>> -	if (r == NULL) {
>> -		dev_err(&pdev->dev, "no resource defined for command DMA\n");
>> -		ret = -ENXIO;
>> -		goto fail_put_clk;
>> +		r = platform_get_resource(pdev, IORESOURCE_DMA, 1);
>> +		if (r == NULL) {
>> +			dev_err(&pdev->dev, "no resource defined for command 
> DMA\n");
>> +			ret = -ENXIO;
>> +			goto fail_put_clk;
>> +		}
>>  	}
>> -	info->drcmr_cmd = r->start;
>>
>>  	irq = platform_get_irq(pdev, 0);
>>  	if (irq < 0) {
>> @@ -1200,12 +1210,55 @@ static int pxa3xx_nand_remove(struct
>> platform_device *pdev) return 0;
>>  }
>>
>> +#ifdef CONFIG_OF
>> +static struct of_device_id pxa3xx_nand_dt_ids[] = {
>> +	{ .compatible = "mrvl,pxa3xx-nand" },
>> +	{}
>> +};
>> +MODULE_DEVICE_TABLE(of, i2c_pxa_dt_ids);
>> +
>> +static int pxa3xx_nand_probe_dt(struct platform_device *pdev)
>> +{
>> +	struct pxa3xx_nand_platform_data *pdata;
>> +	struct device_node *np = pdev->dev.of_node;
>> +	const struct of_device_id *of_id =
>> +			of_match_device(pxa3xx_nand_dt_ids, &pdev->dev);
>> +
>> +	if (!of_id)
>> +		return 0;
>> +
>> +	pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
>> +	if (!pdata)
>> +		return -ENOMEM;
>> +
>> +	if (of_get_property(np, "mrvl,nand-enable-arbiter", NULL))
>> +		pdata->enable_arbiter = 1;
>> +	if (of_get_property(np, "mrvl,nand-keep-config", NULL))
> 
> of_property_read_bool() please.
> 
>> +		pdata->keep_config = 1;
>> +	of_property_read_u32(np, "num-cs", &pdata->num_cs);
>> +
>> +	pdev->dev.platform_data = pdata;
>> +
>> +	return 0;
>> +}
>> +#else
>> +static inline int pxa3xx_nand_probe_dt(struct platform_device *)
>> +{
>> +	return 0;
>> +}
>> +#endif
>> +
>>  static int pxa3xx_nand_probe(struct platform_device *pdev)
>>  {
>>  	struct pxa3xx_nand_platform_data *pdata;
>> +	struct mtd_part_parser_data ppdata = {};
>>  	struct pxa3xx_nand_info *info;
>>  	int ret, cs, probe_success;
>>
>> +	ret = pxa3xx_nand_probe_dt(pdev);
>> +	if (ret)
>> +		return ret;
>> +
>>  	pdata = pdev->dev.platform_data;
>>  	if (!pdata) {
>>  		dev_err(&pdev->dev, "no platform data defined\n");
>> @@ -1229,8 +1282,9 @@ static int pxa3xx_nand_probe(struct platform_device
>> *pdev) continue;
>>  		}
>>
>> +		ppdata.of_node = pdev->dev.of_node;
>>  		ret = mtd_device_parse_register(info->host[cs]->mtd, NULL,
>> -						NULL, pdata->parts[cs],
>> +						&ppdata, pdata->parts[cs],
>>  						pdata->nr_parts[cs]);
>>  		if (!ret)
>>  			probe_success = 1;
>> @@ -1306,6 +1360,7 @@ static int pxa3xx_nand_resume(struct platform_device
>> *pdev) static struct platform_driver pxa3xx_nand_driver = {
>>  	.driver = {
>>  		.name	= "pxa3xx-nand",
>> +		.of_match_table = of_match_ptr(pxa3xx_nand_dt_ids),
>>  	},
>>  	.probe		= pxa3xx_nand_probe,
>>  	.remove		= pxa3xx_nand_remove,

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 3/7] MTD: pxa3xx-nand: add devicetree bindings
  2012-07-26  6:30     ` Arnd Bergmann
@ 2012-07-26  6:53       ` Daniel Mack
  0 siblings, 0 replies; 19+ messages in thread
From: Daniel Mack @ 2012-07-26  6:53 UTC (permalink / raw)
  To: linux-arm-kernel

On 26.07.2012 08:30, Arnd Bergmann wrote:
> On Thursday 26 July 2012, Marek Vasut wrote:
>>> -     r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
>>> -     if (r == NULL) {
>>> -             dev_err(&pdev->dev, "no resource defined for data DMA\n");
>>> -             ret = -ENXIO;
>>> -             goto fail_put_clk;
>>> -     }
>>> -     info->drcmr_dat = r->start;
>>> +     /*
>>> +      * This is a dirty hack to make this driver work from devicetree
>>> +      * bindings. It can be removed once we have a prober DMA controller
>>> +      * framework for DT.
>>> +      */
>>> +     if (pdev->dev.of_node && cpu_is_pxa3xx()) {
>>> +             info->drcmr_dat = 97;
>>> +             info->drcmr_cmd = 99;
>>
>> cpu_is_() stuff should begone ... besides, what are these numbers here?
> 
> They are the numbers from the DMA resource. It's ugly but I think reasonable
> to do this here. We will clean it up soon, once the bindings are in place.
> 
> I did notice though the the two "info->drcmr_dat = r->start" assignments in
> the non-DT case are removed here. I think that's a bug.

Eh, right you are. Fixed.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 1/7] RTC: add DT bindings to pxa-rtc
  2012-07-25 16:17 ` [PATCH 1/7] RTC: add DT bindings to pxa-rtc Daniel Mack
  2012-07-25 17:18   ` Arnd Bergmann
@ 2012-07-26 12:51   ` Sergei Shtylyov
  1 sibling, 0 replies; 19+ messages in thread
From: Sergei Shtylyov @ 2012-07-26 12:51 UTC (permalink / raw)
  To: linux-arm-kernel

Hello.

On 25-07-2012 20:17, Daniel Mack wrote:

> This patch adds generic device tree bindings to the PXA RTC driver.
> Documentation for bindings were also added.

> Signed-off-by: Daniel Mack <zonque@gmail.com>
> Cc: Robert Jarzmik <robert.jarzmik@free.fr>
> Cc: Alessandro Zummo <a.zummo@towertech.it>
> ---
>   Documentation/devicetree/bindings/rtc/pxa-rtc.txt |   12 ++++++++++++
>   drivers/rtc/rtc-pxa.c                             |   11 +++++++++++
>   2 files changed, 23 insertions(+)
>   create mode 100644 Documentation/devicetree/bindings/rtc/pxa-rtc.txt

> diff --git a/Documentation/devicetree/bindings/rtc/pxa-rtc.txt b/Documentation/devicetree/bindings/rtc/pxa-rtc.txt
> new file mode 100644
> index 0000000..acba256
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/rtc/pxa-rtc.txt
> @@ -0,0 +1,12 @@
> +* PXA RTC
> +
> +PXA specific RTC driver.
> +
> +Required properties:
> +- compatible : Should be pxa-rtc
> +
> +Examples:
> +
> +rtc at 0 {

    Don't use the address postfix when the node doesn't have "reg" property.

> +    compatible = "mrvl,pxa-rtc";
> +};

WBR, Sergei

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2012-07-26 12:51 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-25 16:17 [PATCH 0/7] Assorted PXA3xx DT patches Daniel Mack
2012-07-25 16:17 ` [PATCH 1/7] RTC: add DT bindings to pxa-rtc Daniel Mack
2012-07-25 17:18   ` Arnd Bergmann
2012-07-26 12:51   ` Sergei Shtylyov
2012-07-25 16:17 ` [PATCH 2/7] MMC: pxa-mci: add DT bindings Daniel Mack
2012-07-25 16:47   ` Chris Ball
2012-07-25 19:09     ` Daniel Mack
2012-07-25 16:17 ` [PATCH 3/7] MTD: pxa3xx-nand: add devicetree bindings Daniel Mack
2012-07-26  0:59   ` Marek Vasut
2012-07-26  6:30     ` Arnd Bergmann
2012-07-26  6:53       ` Daniel Mack
2012-07-26  6:33     ` Daniel Mack
2012-07-25 16:17 ` [PATCH 4/7] ARM: pxa: add devicetree code for irq handling Daniel Mack
2012-07-25 16:17 ` [PATCH 5/7] ARM: pxa3xx: skip default device initialization when booting via DT Daniel Mack
2012-07-25 16:17 ` [PATCH 6/7] ARM: pxa3xx: add generic DT machine code Daniel Mack
2012-07-25 17:34   ` Arnd Bergmann
2012-07-25 18:07     ` Daniel Mack
2012-07-25 19:04       ` Arnd Bergmann
2012-07-25 16:17 ` [PATCH 7/7] ARM: pxa: add .dtsi files Daniel Mack

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.