Skip to contentSkip to conversation

spi/xilinx: Merge OF and non-OF drivers

RFC PATCH In review Grant Likely 3 participants 11 messages Oct 14, 2010 – Nov 10, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover spi/xilinx: Merge OF and non-OF drivers

Since of_platform_bus_type has been merged with the platform_bus_type, a single platform driver can now support both use cases. This patch series merges the two halves of the xilinx_spi device driver.

Compile tested only. I haven't booted this yet.

---

Grant Likely (3):
spi/xilinx: Eliminate pdata references from common code. spi/xilinx: fold platform_driver support into main body spi/xilinx: merge OF support code into main driver

 drivers/spi/Kconfig            |   14 ----
 drivers/spi/Makefile           |    2 -
 drivers/spi/xilinx_spi.c       |  133 ++++++++++++++++++++++++++++++++++------
 drivers/spi/xilinx_spi.h       |   32 ----------
 drivers/spi/xilinx_spi_of.c    |  133 ----------------------------------------
 drivers/spi/xilinx_spi_pltfm.c |  102 -------------------------------
 6 files changed, 114 insertions(+), 302 deletions(-)
 delete mode 100644 drivers/spi/xilinx_spi.h
 delete mode 100644 drivers/spi/xilinx_spi_of.c
 delete mode 100644 drivers/spi/xilinx_spi_pltfm.c
#1 lore raw

RFC PATCH 1/3 spi/xilinx: Eliminate pdata references from common code.

The current code has the OF binding modifying the platform_data pointer which it must not do, and the common code doesn't really need to use a pdata pointer. This patch eliminates the platform_data references from the common part of the driver in preparation for merging the OF and non-OF versions.

---
 drivers/spi/xilinx_spi.c       |   14 ++++----------
 drivers/spi/xilinx_spi.h       |    2 +-
 drivers/spi/xilinx_spi_of.c    |   17 ++++-------------
 drivers/spi/xilinx_spi_pltfm.c |    4 +++-
 4 files changed, 12 insertions(+), 25 deletions(-)
drivers/spi/xilinx_spi.c +4 -10
index 80f2db5..efb28ba 100644
@@ -351,18 +351,12 @@ static irqreturn_t xilinx_spi_irq(int irq, void *dev_id)
 }
 
 struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
-	u32 irq, s16 bus_num)
+	u32 irq, s16 bus_num, int num_cs, int little_endian, int bits_per_word)
 {
 	struct spi_master *master;
 	struct xilinx_spi *xspi;
-	struct xspi_platform_data *pdata = dev->platform_data;
 	int ret;
 
-	if (!pdata) {
-		dev_err(dev, "No platform data attached\n");
-		return NULL;
-	}
-
 	master = spi_alloc_master(dev, sizeof(struct xilinx_spi));
 	if (!master)
 		return NULL;
@@ -389,21 +383,21 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
 	}
 
 	master->bus_num = bus_num;
-	master->num_chipselect = pdata->num_chipselect;
+	master->num_chipselect = num_cs;
 #ifdef CONFIG_OF
 	master->dev.of_node = dev->of_node;
 #endif
 
 	xspi->mem = *mem;
 	xspi->irq = irq;
-	if (pdata->little_endian) {
+	if (little_endian) {
 		xspi->read_fn = xspi_read32;
 		xspi->write_fn = xspi_write32;
 	} else {
 		xspi->read_fn = xspi_read32_be;
 		xspi->write_fn = xspi_write32_be;
 	}
-	xspi->bits_per_word = pdata->bits_per_word;
+	xspi->bits_per_word = bits_per_word;
 	if (xspi->bits_per_word == 8) {
 		xspi->tx_fn = xspi_tx8;
 		xspi->rx_fn = xspi_rx8;
drivers/spi/xilinx_spi.h +1 -1
index d211acc..d710a33 100644
@@ -26,7 +26,7 @@
 #define XILINX_SPI_NAME "xilinx_spi"
 
 struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
-	u32 irq, s16 bus_num);
+	u32 irq, s16 bus_num, int num_cs, int little_endian, int bits_per_word);
 
 void xilinx_spi_deinit(struct spi_master *master);
 #endif
drivers/spi/xilinx_spi_of.c +4 -13
index b66c2db..c2d8ade 100644
@@ -42,12 +42,11 @@ static int __devinit xilinx_spi_of_probe(struct platform_device *ofdev,
 	const struct of_device_id *match)
 {
 	struct spi_master *master;
-	struct xspi_platform_data *pdata;
 	struct resource r_mem;
 	struct resource r_irq;
 	int rc = 0;
 	const u32 *prop;
-	int len;
+	int len, num_cs;
 
 	rc = of_address_to_resource(ofdev->dev.of_node, 0, &r_mem);
 	if (rc) {
@@ -61,21 +60,15 @@ static int __devinit xilinx_spi_of_probe(struct platform_device *ofdev,
 		return -ENODEV;
 	}
 
-	ofdev->dev.platform_data =
-		kzalloc(sizeof(struct xspi_platform_data), GFP_KERNEL);
-	pdata = ofdev->dev.platform_data;
-	if (!pdata)
-		return -ENOMEM;
-
 	/* number of slave select bits is required */
 	prop = of_get_property(ofdev->dev.of_node, "xlnx,num-ss-bits", &len);
 	if (!prop || len < sizeof(*prop)) {
 		dev_warn(&ofdev->dev, "no 'xlnx,num-ss-bits' property\n");
 		return -EINVAL;
 	}
-	pdata->num_chipselect = *prop;
-	pdata->bits_per_word = 8;
-	master = xilinx_spi_init(&ofdev->dev, &r_mem, r_irq.start, -1);
+	num_cs = __be32_to_cpup(prop);
+	master = xilinx_spi_init(&ofdev->dev, &r_mem, r_irq.start, -1,
+				 num_cs, 0, 8);
 	if (!master)
 		return -ENODEV;
 
@@ -88,8 +81,6 @@ static int __devexit xilinx_spi_remove(struct platform_device *ofdev)
 {
 	xilinx_spi_deinit(dev_get_drvdata(&ofdev->dev));
 	dev_set_drvdata(&ofdev->dev, 0);
-	kfree(ofdev->dev.platform_data);
-	ofdev->dev.platform_data = NULL;
 	return 0;
 }
 
drivers/spi/xilinx_spi_pltfm.c +3 -1
index 24debac..a16722a 100644
@@ -54,7 +54,9 @@ static int __devinit xilinx_spi_probe(struct platform_device *dev)
 	if (irq < 0)
 		return -ENXIO;
 
-	master = xilinx_spi_init(&dev->dev, r, irq, dev->id);
+	master = xilinx_spi_init(&dev->dev, r, irq, dev->id,
+				 pdata->num_chipselect, pdata->little_endian,
+				 pdata->bits_per_word);
 	if (!master)
 		return -ENODEV;
 
#2 lore raw

RFC PATCH 2/3 spi/xilinx: fold platform_driver support into main body

In reply to Grant Likely

This patch merges the platform driver support into the main body of xilinx_spi.c in preparation for merging the OF and non-OF support code.

---
 drivers/spi/Kconfig            |    7 ---
 drivers/spi/Makefile           |    1 
 drivers/spi/xilinx_spi.c       |   79 ++++++++++++++++++++++++++++--
 drivers/spi/xilinx_spi_pltfm.c |  104 ----------------------------------------
 4 files changed, 73 insertions(+), 118 deletions(-)
 delete mode 100644 drivers/spi/xilinx_spi_pltfm.c
drivers/spi/Kconfig +0 -7
index 9949c25..cebe425 100644
@@ -345,13 +345,6 @@ config SPI_XILINX_OF
 	help
 	  This is the OF driver for the SPI controller IP from the Xilinx EDK.
 
-config SPI_XILINX_PLTFM
-	tristate "Xilinx SPI controller platform device"
-	depends on SPI_XILINX
-	help
-	  This is the platform driver for the SPI controller IP
-	  from the Xilinx EDK.
-
 config SPI_NUC900
 	tristate "Nuvoton NUC900 series SPI"
 	depends on ARCH_W90X900 && EXPERIMENTAL
drivers/spi/Makefile +0 -1
index 557aaad..90e0e6a 100644
@@ -43,7 +43,6 @@ obj-$(CONFIG_SPI_TOPCLIFF_PCH)		+= spi_topcliff_pch.o
 obj-$(CONFIG_SPI_TXX9)			+= spi_txx9.o
 obj-$(CONFIG_SPI_XILINX)		+= xilinx_spi.o
 obj-$(CONFIG_SPI_XILINX_OF)		+= xilinx_spi_of.o
-obj-$(CONFIG_SPI_XILINX_PLTFM)		+= xilinx_spi_pltfm.o
 obj-$(CONFIG_SPI_SH_SCI)		+= spi_sh_sci.o
 obj-$(CONFIG_SPI_SH_MSIOF)		+= spi_sh_msiof.o
 obj-$(CONFIG_SPI_STMP3XXX)		+= spi_stmp.o
drivers/spi/xilinx_spi.c +73 -6

99 lines not on this page · raw message

drivers/spi/xilinx_spi_pltfm.c deleted +0 -104

104 lines not on this page · raw message

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb

#3 lore raw

RFC PATCH 3/3 spi/xilinx: merge OF support code into main driver

In reply to Grant Likely

Now that the of_platform_bus_type has been merged with the platform bus type, a single platform driver can handle both OF and non-OF use cases. This patch merges the OF support into the platform driver.

---
 drivers/spi/Kconfig         |    7 --
 drivers/spi/Makefile        |    1 
 drivers/spi/xilinx_spi.c    |   56 ++++++++++++++++---
 drivers/spi/xilinx_spi.h    |   32 -----------
 drivers/spi/xilinx_spi_of.c |  124 -------------------------------------------
 5 files changed, 45 insertions(+), 175 deletions(-)
 delete mode 100644 drivers/spi/xilinx_spi.h
 delete mode 100644 drivers/spi/xilinx_spi_of.c
drivers/spi/Kconfig +0 -7
index cebe425..6660deb 100644
@@ -330,7 +330,6 @@ config SPI_XILINX
 	tristate "Xilinx SPI controller common module"
 	depends on HAS_IOMEM && EXPERIMENTAL
 	select SPI_BITBANG
-	select SPI_XILINX_OF if (XILINX_VIRTEX || MICROBLAZE)
 	help
 	  This exposes the SPI controller IP from the Xilinx EDK.
 
@@ -339,12 +338,6 @@ config SPI_XILINX
 
 	  Or for the DS570, see "XPS Serial Peripheral Interface (SPI) (v2.00b)"
 
-config SPI_XILINX_OF
-	tristate "Xilinx SPI controller OF device"
-	depends on SPI_XILINX && (XILINX_VIRTEX || MICROBLAZE)
-	help
-	  This is the OF driver for the SPI controller IP from the Xilinx EDK.
-
 config SPI_NUC900
 	tristate "Nuvoton NUC900 series SPI"
 	depends on ARCH_W90X900 && EXPERIMENTAL
drivers/spi/Makefile +0 -1
index 90e0e6a..dadb6b5 100644
@@ -42,7 +42,6 @@ obj-$(CONFIG_SPI_S3C64XX)		+= spi_s3c64xx.o
 obj-$(CONFIG_SPI_TOPCLIFF_PCH)		+= spi_topcliff_pch.o
 obj-$(CONFIG_SPI_TXX9)			+= spi_txx9.o
 obj-$(CONFIG_SPI_XILINX)		+= xilinx_spi.o
-obj-$(CONFIG_SPI_XILINX_OF)		+= xilinx_spi_of.o
 obj-$(CONFIG_SPI_SH_SCI)		+= spi_sh_sci.o
 obj-$(CONFIG_SPI_SH_MSIOF)		+= spi_sh_msiof.o
 obj-$(CONFIG_SPI_STMP3XXX)		+= spi_stmp.o
drivers/spi/xilinx_spi.c +45 -11

97 lines not on this page · raw message

drivers/spi/xilinx_spi.h deleted +0 -32
deleted file mode 100644
index d710a33..0000000
@@ -1,32 +0,0 @@
-/*
- * Xilinx SPI device driver API and platform data header file
- *
- * Copyright (c) 2009 Intel Corporation
- *
- * 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
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _XILINX_SPI_H_
-#define _XILINX_SPI_H_
-
-#include <linux/spi/spi.h>
-#include <linux/spi/spi_bitbang.h>
-
-#define XILINX_SPI_NAME "xilinx_spi"
-
-struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem,
-	u32 irq, s16 bus_num, int num_cs, int little_endian, int bits_per_word);
-
-void xilinx_spi_deinit(struct spi_master *master);
-#endif
drivers/spi/xilinx_spi_of.c deleted +0 -124

124 lines not on this page · raw message

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb

#4 lore raw
In reply to Grant Likely

Hi Grant,

Quoted 5 lines · Grant Likely

Since of_platform_bus_type has been merged with the platform_bus_type, a single platform driver can now support both use cases. This patch series merges the two halves of the xilinx_spi device driver.

Compile tested only. I haven't booted this yet.

I have tested it on sp605 and works well. Have you added that patches to your repository? Or are they somewhere else? Who is responsible for?

I would like to also discuss one change which is related mmc_spi kernel driver. Let me describe the problem. Microblaze can use dma in all addresses
that's why dma_mask is setup to 0xffffffff in of_platform_device_create.
Xilinx spi driver doesn't support dma but mmc_spi driver is checking dma_mask in parent device which is xilinx spi driver.

Here is the corresponding the part of code (Expect dma_mask=zero for no dma operations). mmc_spi.c:~1395

	if (spi->master->dev.parent->dma_mask) {
		struct device	*dev = spi->master->dev.parent;

		host->dma_dev = dev;

Based on this one our customer came with the following solution to setup dma_mask in xilinx_spi to zero and then mmc_spi doesn't setup dma operation.

I think that this is nice solution but I would like to be sure that I didn't miss anything. After that i will create proper patch with description.

drivers/spi/xilinx_spi.c +3 -0
index 7adaef6..3612e1b 100644
@@ -519,6 +519,9 @@ static int __devinit xilinx_spi_probe(struct platform_device *dev)
        }
 
        platform_set_drvdata(dev, master);
+       /* clear the dma_mask, to try to disable use of dma */
+       dev->dev.dma_mask = 0;
+
        return 0;
 }
 

Thanks,
Michal

Signature · 4 lines
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
#5 lore raw
Quoted 34 lines

-----Original Message-----
From: Michal Simek [mailto:[email protected]]
Sent: Monday, November 08, 2010 6:29 AM
To: [email protected]
Cc: [email protected]; [email protected]; John Linn; linux- [email protected]
Subject: Re: [RFC PATCH 0/3] spi/xilinx: Merge OF and non-OF drivers

Hi Grant,

Quoted 5 lines · Grant Likely

Since of_platform_bus_type has been merged with the platform_bus_type, a single platform driver can now support both use cases. This patch series merges the two halves of the xilinx_spi device driver.

Compile tested only. I haven't booted this yet.

I have tested it on sp605 and works well. Have you added that patches to your repository? Or are they somewhere else? Who is responsible for?

I would like to also discuss one change which is related mmc_spi kernel driver. Let me describe the problem. Microblaze can use dma in all addresses
that's why dma_mask is setup to 0xffffffff in of_platform_device_create.
Xilinx spi driver doesn't support dma but mmc_spi driver is checking dma_mask in parent device which is xilinx spi driver.

Here is the corresponding the part of code (Expect dma_mask=zero for no dma operations). mmc_spi.c:~1395

	if (spi->master->dev.parent->dma_mask) {
		struct device	*dev = spi->master->dev.parent;

		host->dma_dev = dev;
Quoted 5 lines

Based on this one our customer came with the following solution to setup dma_mask in xilinx_spi to zero and then mmc_spi doesn't setup dma operation.

I think that this is nice solution but I would like to be sure that I didn't miss anything. After that i will create proper patch with description.

Seems reasonable to me.

Thanks,
John

Quoted 21 lines
drivers/spi/xilinx_spi.c +3 -0
index 7adaef6..3612e1b 100644
@@ -519,6 +519,9 @@ static int __devinit xilinx_spi_probe(struct platform_device *dev)
        }
 
        platform_set_drvdata(dev, master);
+       /* clear the dma_mask, to try to disable use of dma */
+       dev->dev.dma_mask = 0;
+
        return 0;
 }
 

Thanks,
Michal

Quoted 5 lines

--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian

This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.

#6 lore raw
Quoted 34 lines · John Linn
Quoted 34 lines

-----Original Message-----
From: Michal Simek [mailto:[email protected]]
Sent: Monday, November 08, 2010 6:29 AM
To: [email protected]
Cc: [email protected]; [email protected]; John Linn; linux- [email protected]
Subject: Re: [RFC PATCH 0/3] spi/xilinx: Merge OF and non-OF drivers

Hi Grant,

Quoted 5 lines · Grant Likely

Since of_platform_bus_type has been merged with the platform_bus_type, a single platform driver can now support both use cases.  This patch series merges the two halves of the xilinx_spi device driver.

Compile tested only.  I haven't booted this yet.

I have tested it on sp605 and works well. Have you added that patches to your repository? Or are they somewhere else? Who is responsible for?

I would like to also discuss one change which is related mmc_spi kernel driver. Let me describe the problem. Microblaze can use dma in all addresses
that's why dma_mask is setup to 0xffffffff in of_platform_device_create.
Xilinx spi driver doesn't support dma but mmc_spi driver is checking dma_mask in parent device which is xilinx spi driver.

Here is the corresponding the part of code (Expect dma_mask=zero for no dma operations). mmc_spi.c:~1395
      if (spi->master->dev.parent->dma_mask) {
              struct device   *dev = spi->master->dev.parent;

              host->dma_dev = dev;

Quoted 7 lines
Quoted 5 lines

Based on this one our customer came with the following solution to setup dma_mask in xilinx_spi to zero and then mmc_spi doesn't setup dma operation.

I think that this is nice solution but I would like to be sure that I didn't miss anything. After that i will create proper patch with description.

Seems reasonable to me.

Hmmm, that actually is not sane. Ideally, drivers should never be mucking with the dma mask. It is supposed to only be set by the code actually registering the device. The mmc code should not be looking at the parent's dma mask to determine if DMA is available; the spi bus drivers should be explicitly stating whether or not it supports DMA. The mmc_spi code is doing the wrong thing here.

That being said, until the mmc_spi code is fixed (and all the users are fixed up so DMA still works) then this patch is probably the best solution. However, please note that dev->dma_mask is a pointer, so you should actually be setting it to NULL.

g.

Quoted 34 lines

Thanks,
John

Quoted 21 lines
drivers/spi/xilinx_spi.c +3 -0
index 7adaef6..3612e1b 100644
@@ -519,6 +519,9 @@ static int __devinit xilinx_spi_probe(struct platform_device *dev)
         }
 
         platform_set_drvdata(dev, master);
+       /* clear the dma_mask, to try to disable use of dma */
+       dev->dev.dma_mask = 0;
+
         return 0;
  }
 

Thanks,
Michal

Quoted 5 lines

--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian

This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.

Signature · 2 lines
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
#7 lore raw

Hi, [cc: David Brownell]

Quoted 39 lines · Grant Likely
Quoted 38 lines · John Linn
Quoted 38 lines

-----Original Message-----
From: Michal Simek [mailto:[email protected]]
Sent: Monday, November 08, 2010 6:29 AM
To: [email protected]
Cc: [email protected]; [email protected]; John Linn; linux- [email protected]
Subject: Re: [RFC PATCH 0/3] spi/xilinx: Merge OF and non-OF drivers

Hi Grant,

Quoted 5 lines · Grant Likely

Since of_platform_bus_type has been merged with the platform_bus_type, a single platform driver can now support both use cases. This patch series merges the two halves of the xilinx_spi device driver.

Compile tested only. I haven't booted this yet.

I have tested it on sp605 and works well. Have you added that patches to your repository? Or are they somewhere else? Who is responsible for?

I would like to also discuss one change which is related mmc_spi kernel driver. Let me describe the problem. Microblaze can use dma in all addresses
that's why dma_mask is setup to 0xffffffff in of_platform_device_create.
Xilinx spi driver doesn't support dma but mmc_spi driver is checking dma_mask in parent device which is xilinx spi driver.

Here is the corresponding the part of code (Expect dma_mask=zero for no dma operations). mmc_spi.c:~1395

      if (spi->master->dev.parent->dma_mask) {
              struct device   *dev = spi->master->dev.parent;

              host->dma_dev = dev;

Based on this one our customer came with the following solution to setup dma_mask in xilinx_spi to zero and then mmc_spi doesn't setup dma operation.

I think that this is nice solution but I would like to be sure that I didn't miss anything. After that i will create proper patch with description.

Quoted 8 lines
Quoted 1 line

Seems reasonable to me.

Hmmm, that actually is not sane. Ideally, drivers should never be mucking with the dma mask. It is supposed to only be set by the code actually registering the device. The mmc code should not be looking at the parent's dma mask to determine if DMA is available; the spi bus drivers should be explicitly stating whether or not it supports DMA. The mmc_spi code is doing the wrong thing here.

I have no problem to fix mmc_spi driver but what is the standard way how to detect DMA capability for this case? This part of code is in mmc_spi from the beginning that's why I am wondering that none complain about.

David?

Sorry I don't have HW where I can test it. :-(

Quoted 5 lines

That being said, until the mmc_spi code is fixed (and all the users are fixed up so DMA still works) then this patch is probably the best solution. However, please note that dev->dma_mask is a pointer, so you should actually be setting it to NULL.

Yes truth.

Michal

Quoted 37 lines

g.

Quoted 31 lines

Thanks,
John

Quoted 20 lines
drivers/spi/xilinx_spi.c +3 -0
index 7adaef6..3612e1b 100644
@@ -519,6 +519,9 @@ static int __devinit xilinx_spi_probe(struct platform_device *dev)
        }
 
        platform_set_drvdata(dev, master);
+       /* clear the dma_mask, to try to disable use of dma */
+       dev->dev.dma_mask = 0;
+
        return 0;
 }
 

Thanks,
Michal

Quoted 5 lines

--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian

This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.

Signature · 4 lines
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
#8 lore raw
Quoted 51 lines · Michal Simek

Hi, [cc: David Brownell]

Quoted 39 lines · Grant Likely
Quoted 38 lines · John Linn
Quoted 38 lines

-----Original Message-----
From: Michal Simek [mailto:[email protected]]
Sent: Monday, November 08, 2010 6:29 AM
To: [email protected]
Cc: [email protected]; [email protected]; John Linn; linux- [email protected]
Subject: Re: [RFC PATCH 0/3] spi/xilinx: Merge OF and non-OF drivers

Hi Grant,

Quoted 5 lines · Grant Likely

Since of_platform_bus_type has been merged with the platform_bus_type, a single platform driver can now support both use cases.  This patch series merges the two halves of the xilinx_spi device driver.

Compile tested only.  I haven't booted this yet.

I have tested it on sp605 and works well. Have you added that patches to your repository? Or are they somewhere else? Who is responsible for?

I would like to also discuss one change which is related mmc_spi kernel driver. Let me describe the problem. Microblaze can use dma in all addresses
that's why dma_mask is setup to 0xffffffff in of_platform_device_create.
Xilinx spi driver doesn't support dma but mmc_spi driver is checking dma_mask in parent device which is xilinx spi driver.

Here is the corresponding the part of code (Expect dma_mask=zero for no dma operations). mmc_spi.c:~1395
      if (spi->master->dev.parent->dma_mask) {
              struct device   *dev = spi->master->dev.parent;

              host->dma_dev = dev;

Based on this one our customer came with the following solution to setup dma_mask in xilinx_spi to zero and then mmc_spi doesn't setup dma operation.

I think that this is nice solution but I would like to be sure that I didn't miss anything. After that i will create proper patch with description.

Quoted 8 lines
Quoted 1 line

Seems reasonable to me.

Hmmm, that actually is not sane.  Ideally, drivers should never be mucking with the dma mask.  It is supposed to only be set by the code actually registering the device.  The mmc code should not be looking at the parent's dma mask to determine if DMA is available; the spi bus drivers should be explicitly stating whether or not it supports DMA. The mmc_spi code is doing the wrong thing here.

Quoted 7 lines

I have no problem to fix mmc_spi driver but what is the standard way how to detect DMA capability for this case? This part of code is in mmc_spi from the beginning that's why I am wondering that none complain about.

David?

Sorry I don't have HW where I can test it. :-(

Nobody will have *all* the hardware required to test it. The solution is actually really hard because it requires auditing all of the spi bus drivers, figuring out which ones of them support dma, and then publishing that information in a way readable by the spi_device drivers. For the time being, you're solution is probably the most reasonable.

g.

#9 lore raw
In reply to Grant Likely
Quoted 11 lines · Grant Likely
Quoted 10 lines · John Linn
Quoted 10 lines

-----Original Message-----
From: Michal Simek [mailto:[email protected]]
Sent: Monday, November 08, 2010 6:29 AM
To: [email protected]
Cc: [email protected]; [email protected]; John Linn; linux- [email protected]
Subject: Re: [RFC PATCH 0/3] spi/xilinx: Merge OF and non-OF drivers

Hi Grant,

Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 5 lines · Grant Likely

Since of_platform_bus_type has been merged with the platform_bus_type, a single platform driver can now support both use cases. This patch series merges the two halves of the xilinx_spi device driver.

Compile tested only. I haven't booted this yet.

I have tested it on sp605 and works well. Have you added that patches to your repository? Or are they somewhere else? Who is responsible for?

Grant: Can you answer my questions?

That our patch about DMA should follow your three patches.

Thanks,
Michal

Signature · 4 lines
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
#10 lore raw
Quoted 17 lines · Michal Simek
Quoted 16 lines · Grant Likely
Quoted 15 lines · John Linn
Quoted 15 lines

-----Original Message-----
From: Michal Simek [mailto:[email protected]]
Sent: Monday, November 08, 2010 6:29 AM
To: [email protected]
Cc: [email protected]; [email protected]; John Linn; linux- [email protected]
Subject: Re: [RFC PATCH 0/3] spi/xilinx: Merge OF and non-OF drivers

Hi Grant,

Quoted 4 lines · Grant Likely

Since of_platform_bus_type has been merged with the platform_bus_type, a single platform driver can now support both use cases. This patch series merges the two halves of the xilinx_spi device driver.

Quoted 7 lines
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Quoted 1 line

Compile tested only. I haven't booted this yet.

I have tested it on sp605 and works well. Have you added that patches to your repository? Or are they somewhere else? Who is responsible for?

Grant: Can you answer my questions?

That our patch about DMA should follow your three patches.

It is in my spi/next branch which I haven't pushed out to my public tree yet. Sometime today I will after I've given it one more run through.

g.