RE: [PATCH v2 1/4] spi/davinci: add DT binding documentation

2013-03-05 Thread Manjunathappa, Prakash
Hi Arnd,

On Mon, Mar 04, 2013 at 21:59:16, Arnd Bergmann wrote:
 On Monday 04 March 2013 18:29:12 Manjunathappa, Prakash wrote:
  diff --git a/Documentation/devicetree/bindings/spi/spi-davinci.txt 
  b/Documentation/devicetree/bindings/spi/spi-davinci.txt
  new file mode 100644
  index 000..a62d7a8
  --- /dev/null
  +++ b/Documentation/devicetree/bindings/spi/spi-davinci.txt
  @@ -0,0 +1,51 @@
  +Davinci SPI controller device bindings
  +
  +Required properties:
  +- #address-cells: number of cells required to define a chip select
  +   address on the SPI bus. Should be set to 1.
  +- #size-cells: should be zero.
  +- compatible:
  +   - ti,dm644x-spi for SPI used similar to that on DM644x SoC family
  +   - ti,da8xx-spi for SPI used similar to that on DA8xx SoC family
 
 In general, you should avoid wildcards in compatible properties.
 Better use the number of the first chip that introduced the specific
 version of the device.
 

Correct, will accommodate this change.

  +- reg: Offset and length of SPI controller register space
  +- num-cs: Number of chip selects
  +- ti,davinci-spi-intr-line: interrupt line used to connect the SPI
  +   IP to the interrupt controller withn the SoC. Possible values
  +   are 0 and 1. Manual says one of the two possible interrupt
  +   lines can be tied to the interrupt controller. Set this
  +   based on a specifc SoC configuration.
  +- interrupts: interrupt number offset at the irq parent
 
 I would not call this an offset. It is an interrupt descriptor
 which may be something other than a simple number.
 

I am planning to drop from this documentation as it is common property.

 Unfortunately, there is no way to provide an invalid interrupt,
 otherwise you could just list both interrupts, out of which at
 least one should be valid, and drop the ti,davinci-spi-intr-line
 property.
 

This is different from interrupt number, this is used to specifies out
of 2 lines from SPI IP which is tied to INTC. Some discussion about it:
https://lkml.org/lkml/2012/11/16/404

 One thing you could do instead though is to use the interrupt-names
 property to define irq0 and irq1 interrupts, and in the
 implementation use the first one you find.
 

In IP specification it is mentioned as spi-intr-line, I prefer to retain this
property as davinci-spi-intr-line.

Thanks,
Prakash


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


Re: [PATCH v2 1/4] spi/davinci: add DT binding documentation

2013-03-05 Thread Sekhar Nori


On 3/5/2013 6:26 PM, Manjunathappa, Prakash wrote:
 Hi Arnd,
 
 On Mon, Mar 04, 2013 at 21:59:16, Arnd Bergmann wrote:
 On Monday 04 March 2013 18:29:12 Manjunathappa, Prakash wrote:
 diff --git a/Documentation/devicetree/bindings/spi/spi-davinci.txt 
 b/Documentation/devicetree/bindings/spi/spi-davinci.txt
 new file mode 100644
 index 000..a62d7a8
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/spi/spi-davinci.txt
 @@ -0,0 +1,51 @@
 +Davinci SPI controller device bindings
 +
 +Required properties:
 +- #address-cells: number of cells required to define a chip select
 +   address on the SPI bus. Should be set to 1.
 +- #size-cells: should be zero.
 +- compatible:
 +   - ti,dm644x-spi for SPI used similar to that on DM644x SoC family
 +   - ti,da8xx-spi for SPI used similar to that on DA8xx SoC family

 In general, you should avoid wildcards in compatible properties.
 Better use the number of the first chip that introduced the specific
 version of the device.

 
 Correct, will accommodate this change.

But note that this patch is just documenting bindings already accepted
and part of kernel. You probably need another patch which fixes the
incorrect bindings and this one can then document in fixed bindings.

Thanks,
Sekhar

--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


RE: [PATCH v2 1/4] spi/davinci: add DT binding documentation

2013-03-05 Thread Manjunathappa, Prakash
On Tue, Mar 05, 2013 at 18:58:54, Nori, Sekhar wrote:
 
 
 On 3/5/2013 6:26 PM, Manjunathappa, Prakash wrote:
  Hi Arnd,
  
  On Mon, Mar 04, 2013 at 21:59:16, Arnd Bergmann wrote:
  On Monday 04 March 2013 18:29:12 Manjunathappa, Prakash wrote:
  diff --git a/Documentation/devicetree/bindings/spi/spi-davinci.txt 
  b/Documentation/devicetree/bindings/spi/spi-davinci.txt
  new file mode 100644
  index 000..a62d7a8
  --- /dev/null
  +++ b/Documentation/devicetree/bindings/spi/spi-davinci.txt
  @@ -0,0 +1,51 @@
  +Davinci SPI controller device bindings
  +
  +Required properties:
  +- #address-cells: number of cells required to define a chip select
  + address on the SPI bus. Should be set to 1.
  +- #size-cells: should be zero.
  +- compatible:
  + - ti,dm644x-spi for SPI used similar to that on DM644x SoC family
  + - ti,da8xx-spi for SPI used similar to that on DA8xx SoC family
 
  In general, you should avoid wildcards in compatible properties.
  Better use the number of the first chip that introduced the specific
  version of the device.
 
  
  Correct, will accommodate this change.
 
 But note that this patch is just documenting bindings already accepted
 and part of kernel. You probably need another patch which fixes the
 incorrect bindings and this one can then document in fixed bindings.
 

Correct Sekhar I meant the same. I will have patch for driver to accommodate
above change and a patch for missing binding document.

Thanks,
Prakash

 Thanks,
 Sekhar
 

--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[SPAM] O menor preço está aqui: Smart TV 40 LED só 1299.

2013-03-05 Thread Shopfato
Your email client cannot read this email.
To view it online, please go here:
http://www.promosender.info/news/display.php?M=8524798C=923e0e1f13557000c9932ffdcf39e93eS=329L=28N=44


To stop receiving these
emails:http://www.promosender.info/news/unsubscribe.php?M=8524798C=923e0e1f13557000c9932ffdcf39e93eL=28N=329
--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


Re: [PATCH v2 1/4] spi/davinci: add DT binding documentation

2013-03-05 Thread Arnd Bergmann
On Tuesday 05 March 2013, Manjunathappa, Prakash wrote:
 On Mon, Mar 04, 2013 at 21:59:16, Arnd Bergmann wrote:
  On Monday 04 March 2013 18:29:12 Manjunathappa, Prakash wrote:
   +- reg: Offset and length of SPI controller register space
   +- num-cs: Number of chip selects
   +- ti,davinci-spi-intr-line: interrupt line used to connect the SPI
   + IP to the interrupt controller withn the SoC. Possible values
   + are 0 and 1. Manual says one of the two possible interrupt
   + lines can be tied to the interrupt controller. Set this
   + based on a specifc SoC configuration.
   +- interrupts: interrupt number offset at the irq parent
  
  I would not call this an offset. It is an interrupt descriptor
  which may be something other than a simple number.
  
 
 I am planning to drop from this documentation as it is common property.

I think it makese sense to document the fact that there should be exactly
one interrupt listed in the interrupts property, especially since the
hardware has two outputs.

Arnd

--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[PATCH v8 2/9] ARM: edma: remove unused transfer controller handlers

2013-03-05 Thread Matt Porter
Fix build on OMAP, the irqs are undefined on AM33xx.
These error interrupt handlers were hardcoded as disabled
so since they are unused code, simply remove them.

Signed-off-by: Matt Porter mpor...@ti.com
Acked-by: Sekhar Nori nsek...@ti.com
---
 arch/arm/common/edma.c |   37 -
 1 file changed, 37 deletions(-)

diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
index dcaeb8e..a1db6cd 100644
--- a/arch/arm/common/edma.c
+++ b/arch/arm/common/edma.c
@@ -494,26 +494,6 @@ static irqreturn_t dma_ccerr_handler(int irq, void *data)
return IRQ_HANDLED;
 }
 
-/**
- *
- * Transfer controller error interrupt handlers
- *
- */
-
-#define tc_errs_handledfalse   /* disabled as long as they're NOPs */
-
-static irqreturn_t dma_tc0err_handler(int irq, void *data)
-{
-   dev_dbg(data, dma_tc0err_handler\n);
-   return IRQ_HANDLED;
-}
-
-static irqreturn_t dma_tc1err_handler(int irq, void *data)
-{
-   dev_dbg(data, dma_tc1err_handler\n);
-   return IRQ_HANDLED;
-}
-
 static int reserve_contiguous_slots(int ctlr, unsigned int id,
 unsigned int num_slots,
 unsigned int start_slot)
@@ -1541,23 +1521,6 @@ static int __init edma_probe(struct platform_device 
*pdev)
arch_num_cc++;
}
 
-   if (tc_errs_handled) {
-   status = request_irq(IRQ_TCERRINT0, dma_tc0err_handler, 0,
-   edma_tc0, pdev-dev);
-   if (status  0) {
-   dev_dbg(pdev-dev, request_irq %d failed -- %d\n,
-   IRQ_TCERRINT0, status);
-   return status;
-   }
-   status = request_irq(IRQ_TCERRINT, dma_tc1err_handler, 0,
-   edma_tc1, pdev-dev);
-   if (status  0) {
-   dev_dbg(pdev-dev, request_irq %d -- %d\n,
-   IRQ_TCERRINT, status);
-   return status;
-   }
-   }
-
return 0;
 
 fail:
-- 
1.7.9.5


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[PATCH v8 0/9] DMA Engine support for AM33XX

2013-03-05 Thread Matt Porter
Changes since v7:
- Dropped dmaengine compat() patch. It is upstream.
- Submitted edma_alloc_slot() error checking bug fix separately,
  now a dependency
- Fixed bisect issues due to 3/10 hunks that went into 1/10
- Fixed incorrect IS_ERRVALUE() use in 3/10

Changes since v6:
- Converted edma_of_read_*() to wrappers around of_property_read_*()
- Fixed wording on the omap-spi generic DMA properties
- Added comment/check to clarify that the driver only supports
  a single EDMA instance when booting from DT

Changes since v5:
- Dropped mmc portion and moved it to a separate series
- Incorporate corrected version of dma_request_slave_channel_compat()
- Fix #defines and enablement of TI_PRIV_EDMA option

Changes since v4:
- Fixed debug section mismatch in private edma api [01/14]
- Respun format-patch to catch the platform_data/edma.h rename [01/14]
- Removed address/size-cells from the EDMA binding [05/14]

Changes since v3:
- Rebased on 3.8-rc3
- No longer an RFC
- Fixed bugs in DT/pdata parsing reported by Vaibhav Bedia
- Restored all the Davinci pdata to const
- Removed max_segs hack in favor of using dma_get_channel_caps()
- Fixed extra parens, __raw_* accessors and, ioremap error checks
  in xbar handling
- Removed excess license info in platform_data/edma.h
- Removed unneeded reserved channels data for AM33xx
- Removed test-specific pinmuxing from dts files
- Adjusted mmc1 node to be disabled by default in the dtsi

Changes since v2:
- Rebased on 3.7-rc1
- Fixed bug in DT/pdata parsing first found by Gururaja
  that turned out to be masked by some toolchains
- Dropped unused mach-omap2/devices.c hsmmc patch
- Added AM33XX crossbar DMA event mux support
- Added am335x-evm support

Changes since v1:
- Rebased on top of mainline from 12250d8
- Dropped the feature removal schedule patch
- Implemented dma_request_slave_channel_compat() and
  converted the mmc and spi drivers to use it
- Dropped unneeded #address-cells and #size-cells from
  EDMA DT support
- Moved private EDMA header to linux/platform_data/ and
  removed some unneeded definitions
- Fixed parsing of optional properties

This series adds DMA Engine support for AM33xx, which uses
an EDMA DMAC. The EDMA DMAC has been previously supported by only
a private API implementation (much like the situation with OMAP
DMA) found on the DaVinci family of SoCs.

The series applies on top of 3.9-rc1 and the following patches:

- edma private api error check fix from 
  http://www.spinics.net/lists/arm-kernel/msg227886.html

The approach taken is similar to how OMAP DMA is being converted to
DMA Engine support. With the functional EDMA private API already
existing in mach-davinci/dma.c, we first move that to an ARM common
area so it can be shared. Adding DT and runtime PM support to the
private EDMA API implementation allows it to run on AM33xx. AM33xx
*only* boots using DT so we leverage Jon's generic DT DMA helpers to
register EDMA DMAC with the of_dma framework and then add support
for calling the dma_request_slave_channel() API to both the mmc
and spi drivers.

With this series both BeagleBone and the AM335x EVM have working
SPI DMA support (and MMC support with the separate MMC series).

This is tested on BeagleBone with a SPI framebuffer driver and MMC
rootfs. A trivial gpio DMA event misc driver was used to test the
crossbar DMA event support. It is also tested on the AM335x EVM
with the onboard SPI flash and MMC rootfs. The branch at
https://github.com/ohporter/linux/tree/edma-dmaengine-am33xx-v7
has the complete series, dependencies, and some test
drivers/defconfigs. Note that MMC can only be tested with a
separate MMC dmaengine/DT series applied.

Regression testing was done on AM180x-EVM (which also makes use
of the EDMA dmaengine driver and the EDMA private API) using SD,
SPI flash, and the onboard audio supported by the ASoC Davinci
driver. Regression testing was also done on a BeagleBoard xM
booting from the legacy board file using MMC rootfs.

Matt Porter (9):
  ARM: davinci: move private EDMA API to arm/common
  ARM: edma: remove unused transfer controller handlers
  ARM: edma: add AM33XX support to the private EDMA API
  dmaengine: edma: enable build for AM33XX
  dmaengine: edma: Add TI EDMA device tree binding
  ARM: dts: add AM33XX EDMA support
  spi: omap2-mcspi: convert to dma_request_slave_channel_compat()
  spi: omap2-mcspi: add generic DMA request support to the DT binding
  ARM: dts: add AM33XX SPI DMA support

 Documentation/devicetree/bindings/dma/ti-edma.txt  |   49 +++
 Documentation/devicetree/bindings/spi/omap-spi.txt |   27 +-
 arch/arm/Kconfig   |1 +
 

[PATCH v8 6/9] ARM: dts: add AM33XX EDMA support

2013-03-05 Thread Matt Porter
Adds AM33XX EDMA support to the am33xx.dtsi as documented in
Documentation/devicetree/bindings/dma/ti-edma.txt

Signed-off-by: Matt Porter mpor...@ti.com
---
 arch/arm/boot/dts/am33xx.dtsi |   20 
 1 file changed, 20 insertions(+)

diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index 0957645..aaf44122 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -87,6 +87,26 @@
reg = 0x4820 0x1000;
};
 
+   edma: edma@4900 {
+   compatible = ti,edma3;
+   ti,hwmods = tpcc, tptc0, tptc1, tptc2;
+   reg =   0x4900 0x1,
+   0x44e10f90 0x10;
+   interrupt-parent = intc;
+   interrupts = 12 13 14;
+   #dma-cells = 1;
+   dma-channels = 64;
+   ti,edma-regions = 4;
+   ti,edma-slots = 256;
+   ti,edma-queue-tc-map = 0 0
+   1 1
+   2 2;
+   ti,edma-queue-priority-map = 0 0
+ 1 1
+ 2 2;
+   ti,edma-default-queue = 0;
+   };
+
gpio1: gpio@44e07000 {
compatible = ti,omap4-gpio;
ti,hwmods = gpio1;
-- 
1.7.9.5


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[PATCH v8 5/9] dmaengine: edma: Add TI EDMA device tree binding

2013-03-05 Thread Matt Porter
The binding definition is based on the generic DMA controller
binding.

Signed-off-by: Matt Porter mpor...@ti.com
---
 Documentation/devicetree/bindings/dma/ti-edma.txt |   49 +
 1 file changed, 49 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/dma/ti-edma.txt

diff --git a/Documentation/devicetree/bindings/dma/ti-edma.txt 
b/Documentation/devicetree/bindings/dma/ti-edma.txt
new file mode 100644
index 000..075a60e3
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/ti-edma.txt
@@ -0,0 +1,49 @@
+TI EDMA
+
+Required properties:
+- compatible : ti,edma3
+- ti,hwmods: Name of the hwmods associated to the EDMA
+- ti,edma-regions: Number of regions
+- ti,edma-slots: Number of slots
+- ti,edma-queue-tc-map: List of transfer control to queue mappings
+- ti,edma-queue-priority-map: List of queue priority mappings
+- ti,edma-default-queue: Default queue value
+
+Optional properties:
+- ti,edma-reserved-channels: List of reserved channel regions
+- ti,edma-reserved-slots: List of reserved slot regions
+- ti,edma-xbar-event-map: Crossbar event to channel map
+
+Example:
+
+edma: edma@4900 {
+   reg = 0x4900 0x1;
+   interrupt-parent = intc;
+   interrupts = 12 13 14;
+   compatible = ti,edma3;
+   ti,hwmods = tpcc, tptc0, tptc1, tptc2;
+   #dma-cells = 1;
+   dma-channels = 64;
+   ti,edma-regions = 4;
+   ti,edma-slots = 256;
+   ti,edma-reserved-channels = 0  2
+14 2
+26 6
+48 4
+56 8;
+   ti,edma-reserved-slots = 0  2
+ 14 2
+ 26 6
+ 48 4
+ 56 8
+ 64 127;
+   ti,edma-queue-tc-map = 0 0
+   1 1
+   2 2;
+   ti,edma-queue-priority-map = 0 0
+ 1 1
+ 2 2;
+   ti,edma-default-queue = 0;
+   ti,edma-xbar-event-map = 1 12
+ 2 13;
+};
-- 
1.7.9.5


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[PATCH v8 7/9] spi: omap2-mcspi: convert to dma_request_slave_channel_compat()

2013-03-05 Thread Matt Porter
Convert dmaengine channel requests to use
dma_request_slave_channel_compat(). This supports the DT case of
platforms requiring channel selection from either the OMAP DMA or
the EDMA engine. AM33xx only boots from DT and is the only user
implementing EDMA so in the !DT case we can default to the OMAP DMA
filter.

Signed-off-by: Matt Porter mpor...@ti.com
Acked-by: Mark Brown broo...@opensource.wolfsonmicro.com
---
 drivers/spi/spi-omap2-mcspi.c |   27 ---
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index 893c3d7..38d0915 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -102,6 +102,9 @@ struct omap2_mcspi_dma {
 
struct completion dma_tx_completion;
struct completion dma_rx_completion;
+
+   char dma_rx_ch_name[14];
+   char dma_tx_ch_name[14];
 };
 
 /* use PIO for small transfers, avoiding DMA setup/teardown overhead and
@@ -822,14 +825,23 @@ static int omap2_mcspi_request_dma(struct spi_device *spi)
dma_cap_zero(mask);
dma_cap_set(DMA_SLAVE, mask);
sig = mcspi_dma-dma_rx_sync_dev;
-   mcspi_dma-dma_rx = dma_request_channel(mask, omap_dma_filter_fn, sig);
+
+   mcspi_dma-dma_rx =
+   dma_request_slave_channel_compat(mask, omap_dma_filter_fn,
+sig, master-dev,
+mcspi_dma-dma_rx_ch_name);
+
if (!mcspi_dma-dma_rx) {
dev_err(spi-dev, no RX DMA engine channel for McSPI\n);
return -EAGAIN;
}
 
sig = mcspi_dma-dma_tx_sync_dev;
-   mcspi_dma-dma_tx = dma_request_channel(mask, omap_dma_filter_fn, sig);
+   mcspi_dma-dma_tx =
+   dma_request_slave_channel_compat(mask, omap_dma_filter_fn,
+sig, master-dev,
+mcspi_dma-dma_tx_ch_name);
+
if (!mcspi_dma-dma_tx) {
dev_err(spi-dev, no TX DMA engine channel for McSPI\n);
dma_release_channel(mcspi_dma-dma_rx);
@@ -1240,12 +1252,13 @@ static int omap2_mcspi_probe(struct platform_device 
*pdev)
goto free_master;
 
for (i = 0; i  master-num_chipselect; i++) {
-   char dma_ch_name[14];
+   char *dma_rx_ch_name = mcspi-dma_channels[i].dma_rx_ch_name;
+   char *dma_tx_ch_name = mcspi-dma_channels[i].dma_tx_ch_name;
struct resource *dma_res;
 
-   sprintf(dma_ch_name, rx%d, i);
+   sprintf(dma_rx_ch_name, rx%d, i);
dma_res = platform_get_resource_byname(pdev, IORESOURCE_DMA,
-   dma_ch_name);
+   dma_rx_ch_name);
if (!dma_res) {
dev_dbg(pdev-dev, cannot get DMA RX channel\n);
status = -ENODEV;
@@ -1253,9 +1266,9 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
}
 
mcspi-dma_channels[i].dma_rx_sync_dev = dma_res-start;
-   sprintf(dma_ch_name, tx%d, i);
+   sprintf(dma_tx_ch_name, tx%d, i);
dma_res = platform_get_resource_byname(pdev, IORESOURCE_DMA,
-   dma_ch_name);
+   dma_tx_ch_name);
if (!dma_res) {
dev_dbg(pdev-dev, cannot get DMA TX channel\n);
status = -ENODEV;
-- 
1.7.9.5


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[PATCH v8 9/9] ARM: dts: add AM33XX SPI DMA support

2013-03-05 Thread Matt Porter
Adds DMA resources to the AM33XX SPI nodes.

Signed-off-by: Matt Porter mpor...@ti.com
---
 arch/arm/boot/dts/am33xx.dtsi |   10 ++
 1 file changed, 10 insertions(+)

diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index aaf44122..a13d710 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -328,6 +328,11 @@
interrupt = 65;
ti,spi-num-cs = 2;
ti,hwmods = spi0;
+   dmas = edma 16
+   edma 17
+   edma 18
+   edma 19;
+   dma-names = tx0, rx0, tx1, rx1;
status = disabled;
};
 
@@ -339,6 +344,11 @@
interrupt = 125;
ti,spi-num-cs = 2;
ti,hwmods = spi1;
+   dmas = edma 42
+   edma 43
+   edma 44
+   edma 45;
+   dma-names = tx0, rx0, tx1, rx1;
status = disabled;
};
 
-- 
1.7.9.5


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[PATCH v8 4/9] dmaengine: edma: enable build for AM33XX

2013-03-05 Thread Matt Porter
Enable TI EDMA option on OMAP.

Signed-off-by: Matt Porter mpor...@ti.com
---
 drivers/dma/Kconfig |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
index 80b6997..3b7ea20 100644
--- a/drivers/dma/Kconfig
+++ b/drivers/dma/Kconfig
@@ -222,7 +222,7 @@ config SIRF_DMA
 
 config TI_EDMA
tristate TI EDMA support
-   depends on ARCH_DAVINCI
+   depends on ARCH_DAVINCI || ARCH_OMAP
select DMA_ENGINE
select DMA_VIRTUAL_CHANNELS
default n
-- 
1.7.9.5


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[PATCH v8 1/9] ARM: davinci: move private EDMA API to arm/common

2013-03-05 Thread Matt Porter
Move mach-davinci/dma.c to common/edma.c so it can be used
by OMAP (specifically AM33xx) as well.

Signed-off-by: Matt Porter mpor...@ti.com
Acked-by: Sekhar Nori nsek...@ti.com
---
 arch/arm/Kconfig   |1 +
 arch/arm/common/Kconfig|3 +
 arch/arm/common/Makefile   |1 +
 arch/arm/{mach-davinci/dma.c = common/edma.c} |2 +-
 arch/arm/mach-davinci/Makefile |2 +-
 arch/arm/mach-davinci/board-tnetv107x-evm.c|2 +-
 arch/arm/mach-davinci/davinci.h|2 +-
 arch/arm/mach-davinci/devices-tnetv107x.c  |2 +-
 arch/arm/mach-davinci/devices.c|6 +-
 arch/arm/mach-davinci/dm355.c  |2 +-
 arch/arm/mach-davinci/dm365.c  |2 +-
 arch/arm/mach-davinci/dm644x.c |2 +-
 arch/arm/mach-davinci/dm646x.c |2 +-
 arch/arm/mach-davinci/include/mach/da8xx.h |2 +-
 drivers/dma/edma.c |2 +-
 drivers/mmc/host/davinci_mmc.c |1 +
 include/linux/mfd/davinci_voicecodec.h |3 +-
 .../mach = include/linux/platform_data}/edma.h|   89 +---
 include/linux/platform_data/spi-davinci.h  |2 +-
 sound/soc/davinci/davinci-evm.c|1 +
 sound/soc/davinci/davinci-pcm.c|1 +
 sound/soc/davinci/davinci-pcm.h|2 +-
 sound/soc/davinci/davinci-sffsdr.c |5 +-
 23 files changed, 33 insertions(+), 104 deletions(-)
 rename arch/arm/{mach-davinci/dma.c = common/edma.c} (99%)
 rename {arch/arm/mach-davinci/include/mach = 
include/linux/platform_data}/edma.h (59%)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 5b71469..cb80a4d 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -956,6 +956,7 @@ config ARCH_DAVINCI
select GENERIC_IRQ_CHIP
select HAVE_IDE
select NEED_MACH_GPIO_H
+   select TI_PRIV_EDMA
select USE_OF
select ZONE_DMA
help
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig
index 9353184..c3a4e9c 100644
--- a/arch/arm/common/Kconfig
+++ b/arch/arm/common/Kconfig
@@ -17,3 +17,6 @@ config SHARP_PARAM
 
 config SHARP_SCOOP
bool
+
+config TI_PRIV_EDMA
+   bool
diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile
index dc8dd0d..9643c50 100644
--- a/arch/arm/common/Makefile
+++ b/arch/arm/common/Makefile
@@ -11,3 +11,4 @@ obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o
 obj-$(CONFIG_SHARP_SCOOP)  += scoop.o
 obj-$(CONFIG_PCI_HOST_ITE8152)  += it8152.o
 obj-$(CONFIG_ARM_TIMER_SP804)  += timer-sp.o
+obj-$(CONFIG_TI_PRIV_EDMA) += edma.o
diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/common/edma.c
similarity index 99%
rename from arch/arm/mach-davinci/dma.c
rename to arch/arm/common/edma.c
index 45b7c71..dcaeb8e 100644
--- a/arch/arm/mach-davinci/dma.c
+++ b/arch/arm/common/edma.c
@@ -25,7 +25,7 @@
 #include linux/io.h
 #include linux/slab.h
 
-#include mach/edma.h
+#include linux/platform_data/edma.h
 
 /* Offsets matching struct edmacc_param */
 #define PARM_OPT   0x00
diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile
index fb5c1aa..493a36b 100644
--- a/arch/arm/mach-davinci/Makefile
+++ b/arch/arm/mach-davinci/Makefile
@@ -5,7 +5,7 @@
 
 # Common objects
 obj-y  := time.o clock.o serial.o psc.o \
-  dma.o usb.o common.o sram.o aemif.o
+  usb.o common.o sram.o aemif.o
 
 obj-$(CONFIG_DAVINCI_MUX)  += mux.o
 
diff --git a/arch/arm/mach-davinci/board-tnetv107x-evm.c 
b/arch/arm/mach-davinci/board-tnetv107x-evm.c
index 4f41602..10c9efd 100644
--- a/arch/arm/mach-davinci/board-tnetv107x-evm.c
+++ b/arch/arm/mach-davinci/board-tnetv107x-evm.c
@@ -26,12 +26,12 @@
 #include linux/input.h
 #include linux/input/matrix_keypad.h
 #include linux/spi/spi.h
+#include linux/platform_data/edma.h
 
 #include asm/mach/arch.h
 #include asm/mach-types.h
 
 #include mach/irqs.h
-#include mach/edma.h
 #include mach/mux.h
 #include mach/cp_intc.h
 #include mach/tnetv107x.h
diff --git a/arch/arm/mach-davinci/davinci.h b/arch/arm/mach-davinci/davinci.h
index 12d544b..d26a6bc 100644
--- a/arch/arm/mach-davinci/davinci.h
+++ b/arch/arm/mach-davinci/davinci.h
@@ -23,9 +23,9 @@
 #include linux/platform_device.h
 #include linux/spi/spi.h
 #include linux/platform_data/davinci_asp.h
+#include linux/platform_data/edma.h
 #include linux/platform_data/keyscan-davinci.h
 #include mach/hardware.h
-#include mach/edma.h
 
 #include media/davinci/vpfe_capture.h
 #include media/davinci/vpif_types.h
diff --git a/arch/arm/mach-davinci/devices-tnetv107x.c 
b/arch/arm/mach-davinci/devices-tnetv107x.c
index 773ab07..ba37760 100644
--- a/arch/arm/mach-davinci/devices-tnetv107x.c
+++ 

[PATCH v8 3/9] ARM: edma: add AM33XX support to the private EDMA API

2013-03-05 Thread Matt Porter
Adds support for parsing the TI EDMA DT data into the
required EDMA private API platform data. Enables runtime
PM support to initialize the EDMA hwmod. Adds AM33XX EDMA
crossbar event mux support. Enables build on OMAP.

Signed-off-by: Matt Porter mpor...@ti.com
Acked-by: Sekhar Nori nsek...@ti.com
---
 arch/arm/common/edma.c |  300 ++--
 arch/arm/mach-omap2/Kconfig|1 +
 include/linux/platform_data/edma.h |1 +
 3 files changed, 292 insertions(+), 10 deletions(-)

diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c
index a1db6cd..e68ac38 100644
--- a/arch/arm/common/edma.c
+++ b/arch/arm/common/edma.c
@@ -24,6 +24,13 @@
 #include linux/platform_device.h
 #include linux/io.h
 #include linux/slab.h
+#include linux/edma.h
+#include linux/err.h
+#include linux/of_address.h
+#include linux/of_device.h
+#include linux/of_dma.h
+#include linux/of_irq.h
+#include linux/pm_runtime.h
 
 #include linux/platform_data/edma.h
 
@@ -1369,31 +1376,278 @@ void edma_clear_event(unsigned channel)
 EXPORT_SYMBOL(edma_clear_event);
 
 /*---*/
+static int edma_of_read_u32_to_s8_array(const struct device_node *np,
+const char *propname, s8 *out_values,
+size_t sz)
+{
+   int ret;
+
+   ret = of_property_read_u8_array(np, propname, out_values, sz);
+   if (ret)
+   return ret;
+
+   /* Terminate it */
+   *out_values++ = -1;
+   *out_values++ = -1;
+
+   return 0;
+}
+
+static int edma_of_read_u32_to_s16_array(const struct device_node *np,
+const char *propname, s16 *out_values,
+size_t sz)
+{
+   int ret;
+
+   ret = of_property_read_u16_array(np, propname, out_values, sz);
+   if (ret)
+   return ret;
+
+   /* Terminate it */
+   *out_values++ = -1;
+   *out_values++ = -1;
+
+   return 0;
+}
+
+static int edma_xbar_event_map(struct device *dev,
+  struct device_node *node,
+  struct edma_soc_info *pdata, int len)
+{
+   int ret = 0;
+   int i;
+   struct resource res;
+   void *xbar;
+   const s16 (*xbar_chans)[2];
+   u32 shift, offset, mux;
+
+   xbar_chans = devm_kzalloc(dev,
+ len/sizeof(s16) + 2*sizeof(s16),
+ GFP_KERNEL);
+   if (!xbar_chans)
+   return -ENOMEM;
+
+   ret = of_address_to_resource(node, 1, res);
+   if (ret)
+   return -EIO;
+
+   xbar = devm_ioremap(dev, res.start, resource_size(res));
+   if (!xbar)
+   return -ENOMEM;
+
+   ret = edma_of_read_u32_to_s16_array(node,
+   ti,edma-xbar-event-map,
+   (s16 *)xbar_chans,
+   len/sizeof(u32));
+   if (ret)
+   return -EIO;
+
+   for (i = 0; xbar_chans[i][0] != -1; i++) {
+   shift = (xbar_chans[i][1] % 4) * 8;
+   offset = xbar_chans[i][1]  2;
+   offset = 2;
+   mux = readl((void *)((u32)xbar + offset));
+   mux = ~(0xff  shift);
+   mux |= xbar_chans[i][0]  shift;
+   writel(mux, (void *)((u32)xbar + offset));
+   }
+
+   pdata-xbar_chans = xbar_chans;
+
+   return 0;
+}
+
+static int edma_of_parse_dt(struct device *dev,
+   struct device_node *node,
+   struct edma_soc_info *pdata)
+{
+   int ret = 0;
+   u32 value;
+   struct property *prop;
+   size_t sz;
+   struct edma_rsv_info *rsv_info;
+   const s16 (*rsv_chans)[2], (*rsv_slots)[2];
+   const s8 (*queue_tc_map)[2], (*queue_priority_map)[2];
+
+   memset(pdata, 0, sizeof(struct edma_soc_info));
+
+   ret = of_property_read_u32(node, dma-channels, value);
+   if (ret  0)
+   return ret;
+   pdata-n_channel = value;
+
+   ret = of_property_read_u32(node, ti,edma-regions, value);
+   if (ret  0)
+   return ret;
+   pdata-n_region = value;
+
+   ret = of_property_read_u32(node, ti,edma-slots, value);
+   if (ret  0)
+   return ret;
+   pdata-n_slot = value;
+
+   pdata-n_cc = 1;
+   pdata-n_tc = 3;
+
+   rsv_info =
+   devm_kzalloc(dev, sizeof(struct edma_rsv_info), GFP_KERNEL);
+   if (!rsv_info)
+   return -ENOMEM;
+   pdata-rsv = rsv_info;
+
+   /* Build the reserved channel/slots arrays */
+   prop = of_find_property(node, ti,edma-reserved-channels, sz);
+   if (prop) {
+   rsv_chans = devm_kzalloc(dev,
+sz/sizeof(s16) + 2*sizeof(s16),
+ 

[PATCH v8 8/9] spi: omap2-mcspi: add generic DMA request support to the DT binding

2013-03-05 Thread Matt Porter
The binding definition is based on the generic DMA request binding

Signed-off-by: Matt Porter mpor...@ti.com
---
 Documentation/devicetree/bindings/spi/omap-spi.txt |   27 +++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/spi/omap-spi.txt 
b/Documentation/devicetree/bindings/spi/omap-spi.txt
index 938809c..4c85c4c 100644
--- a/Documentation/devicetree/bindings/spi/omap-spi.txt
+++ b/Documentation/devicetree/bindings/spi/omap-spi.txt
@@ -10,7 +10,18 @@ Required properties:
  input. The default is D0 as input and
  D1 as output.
 
-Example:
+Optional properties:
+- dmas: List of DMA specifiers with the controller specific format
+   as described in the generic DMA client binding. A tx and rx
+   specifier is required for each chip select.
+- dma-names: List of DMA request names. These strings correspond
+   1:1 with the DMA specifiers listed in dmas. The string naming
+   is to be rxN and txN for RX and TX requests,
+   respectively, where N equals the chip select number.
+
+Examples:
+
+[hwmod populated DMA resources]
 
 mcspi1: mcspi@1 {
 #address-cells = 1;
@@ -20,3 +31,17 @@ mcspi1: mcspi@1 {
 ti,spi-num-cs = 4;
 };
 
+[generic DMA request binding]
+
+mcspi1: mcspi@1 {
+#address-cells = 1;
+#size-cells = 0;
+compatible = ti,omap4-mcspi;
+ti,hwmods = mcspi1;
+ti,spi-num-cs = 2;
+dmas = edma 42
+   edma 43
+   edma 44
+   edma 45;
+dma-names = tx0, rx0, tx1, rx1;
+};
-- 
1.7.9.5


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[PATCH] spi: add driver for BCM2835

2013-03-05 Thread Stephen Warren
From: Chris Boot bo...@bootc.net

The BCM2835 contains two forms of SPI master controller (one known
simply as SPI0, and the other known as the Universal SPI Master, in
the auxilliary block) and one form of SPI slave controller. This patch
adds support for the SPI0 controller.

This driver is taken from Chris Boot's repository at
git://github.com/bootc/linux.git rpi-linear
as of commit 6de2905 spi-bcm2708: fix printf with spurious %s.
In the first SPI-related commit there, Chris wrote:

Thanks to csoutreach / A Robinson for his driver which I used as an
inspiration. You can find his version here:
http://piface.openlx.org.uk/raspberry-pi-spi-kernel-driver-available-for

Changes made during upstreaming:
* Renamed bcm2708 to bcm2835 as per upstream naming for this SoC.
* Wrote device tree binding documentation.
* Request unnamed clock rather than sys_pclk; the DT will provide the
  correct clock.
* Assume that tfr-speed_hz and tfr-bits_per_word are always set in
  bcm2835_spi_start_transfer(), bcm2835_spi_transfer_one(), so no need
  to check spi-speed_hz or tft-bits_per_word.
* Re-ordered probe() to remove the need for temporary variables.
* Don't use devm_request_irq(), to ensure that the IRQ doesn't fire after
  we've torn down the device, but not unhooked the IRQ.
* Removed empty prepare/unprepare implementations.
* Removed use of devinit/devexit.
* Added BCM2835_ prefix to defines.

Signed-off-by: Chris Boot bo...@bootc.net
Signed-off-by: Stephen Warren swar...@wwwdotorg.org
---
 .../devicetree/bindings/spi/brcm,bcm2835-spi.txt   |   26 ++
 drivers/spi/Kconfig|   11 +
 drivers/spi/Makefile   |1 +
 drivers/spi/spi-bcm2835.c  |  430 
 4 files changed, 468 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/spi/brcm,bcm2835-spi.txt
 create mode 100644 drivers/spi/spi-bcm2835.c

diff --git a/Documentation/devicetree/bindings/spi/brcm,bcm2835-spi.txt 
b/Documentation/devicetree/bindings/spi/brcm,bcm2835-spi.txt
new file mode 100644
index 000..3f54bc8
--- /dev/null
+++ b/Documentation/devicetree/bindings/spi/brcm,bcm2835-spi.txt
@@ -0,0 +1,26 @@
+Broadcom BCM2835 SPI0 controller
+
+The BCM2835 contains two forms of SPI master controller, one known simply as
+SPI0, and the other known as the Universal SPI Master; part of the
+auxilliary block. This binding applies to the SPI0 controller.
+
+Required properties:
+- compatible: Should be brcm,bcm2835-spi.
+- reg: Should contain register location and length.
+- interrupts: Should contain interrupt.
+- clocks: The clock feeding the SPI controller.
+
+Optional properties:
+- brcm,realtime: Boolean. Indicates the driver should operate with realtime
+  priority to minimise the transfer latency on the bus.
+
+Example:
+
+spi@20204000 {
+   compatible = brcm,bcm2835-spi;
+   reg = 0x7e204000 0x1000;
+   interrupts = 2 22;
+   clocks = clk_spi;
+   #address-cells = 1;
+   #size-cells = 0;
+};
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
index f80eee7..32b85d4 100644
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -74,6 +74,17 @@ config SPI_ATMEL
  This selects a driver for the Atmel SPI Controller, present on
  many AT32 (AVR32) and AT91 (ARM) chips.
 
+config SPI_BCM2835
+   tristate BCM2835 SPI controller
+   depends on ARCH_BCM2835
+   help
+ This selects a driver for the Broadcom BCM2835 SPI master.
+
+ The BCM2835 contains two types of SPI master controller; the
+ universal SPI master, and the regular SPI controller. This driver
+ is for the regular SPI controller. Slave mode operation is not also
+ not supported.
+
 config SPI_BFIN5XX
tristate SPI controller driver for ADI Blackfin5xx
depends on BLACKFIN
diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
index e53c309..3ce1d08 100644
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -14,6 +14,7 @@ obj-$(CONFIG_SPI_ALTERA)  += spi-altera.o
 obj-$(CONFIG_SPI_ATMEL)+= spi-atmel.o
 obj-$(CONFIG_SPI_ATH79)+= spi-ath79.o
 obj-$(CONFIG_SPI_AU1550)   += spi-au1550.o
+obj-$(CONFIG_SPI_BCM2835)  += spi-bcm2835.o
 obj-$(CONFIG_SPI_BCM63XX)  += spi-bcm63xx.o
 obj-$(CONFIG_SPI_BFIN5XX)  += spi-bfin5xx.o
 obj-$(CONFIG_SPI_BFIN_SPORT)   += spi-bfin-sport.o
diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
new file mode 100644
index 000..74fefeb
--- /dev/null
+++ b/drivers/spi/spi-bcm2835.c
@@ -0,0 +1,430 @@
+/*
+ * Driver for Broadcom BCM2835 SPI Controllers
+ *
+ * Copyright (C) 2012 Chris Boot
+ * Copyright (C) 2012 Stephen Warren
+ *
+ * This driver is inspired by:
+ * spi-ath79.c, Copyright (C) 2009-2011 Gabor Juhos juh...@openwrt.org
+ * spi-atmel.c, Copyright (C) 2006 Atmel Corporation
+ *
+ * This program is free software; you 

RE: [PATCH v8 6/9] ARM: dts: add AM33XX EDMA support

2013-03-05 Thread Kumar, Anil
Hi,

On Wed, Mar 06, 2013 at 02:23:12, Porter, Matt wrote:
 Adds AM33XX EDMA support to the am33xx.dtsi as documented in
 Documentation/devicetree/bindings/dma/ti-edma.txt
 
 Signed-off-by: Matt Porter mpor...@ti.com
 ---
  arch/arm/boot/dts/am33xx.dtsi |   20 
  1 file changed, 20 insertions(+)
 
 diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
 index 0957645..aaf44122 100644
 --- a/arch/arm/boot/dts/am33xx.dtsi
 +++ b/arch/arm/boot/dts/am33xx.dtsi
 @@ -87,6 +87,26 @@
   reg = 0x4820 0x1000;
   };
  
 + edma: edma@4900 {
 + compatible = ti,edma3;
 + ti,hwmods = tpcc, tptc0, tptc1, tptc2;
 + reg =   0x4900 0x1,
 + 0x44e10f90 0x10;
 + interrupt-parent = intc;

Is it really need of interrupt-parent = intc here ?
as this property is already with root node.  
I am taking reference of 3.9-rc1

Thanks,
Anil

 + interrupts = 12 13 14;
 + #dma-cells = 1;
 + dma-channels = 64;
 + ti,edma-regions = 4;
 + ti,edma-slots = 256;
 + ti,edma-queue-tc-map = 0 0
 + 1 1
 + 2 2;
 + ti,edma-queue-priority-map = 0 0
 +   1 1
 +   2 2;
 + ti,edma-default-queue = 0;
 + };
 +
   gpio1: gpio@44e07000 {
   compatible = ti,omap4-gpio;
   ti,hwmods = gpio1;
 -- 
 1.7.9.5
 
 ___
 Davinci-linux-open-source mailing list
 davinci-linux-open-sou...@linux.davincidsp.com
 http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
 


--
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester  
Wave(TM): Endpoint Security, Q1 2013 and remains a good choice in the  
endpoint security space. For insight on selecting the right partner to 
tackle endpoint security challenges, access the full report. 
http://p.sf.net/sfu/symantec-dev2dev
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


Re: [PATCH] spi: add driver for BCM2835

2013-03-05 Thread Stephen Warren
On 03/05/2013 09:05 PM, Mark Brown wrote:
 On Tue, Mar 05, 2013 at 07:49:02PM -0700, Stephen Warren wrote:
 
 +Optional properties: +- brcm,realtime: Boolean. Indicates the
 driver should operate with realtime +  priority to minimise the
 transfer latency on the bus.
 
 This isn't obviously something that ought to be in DT, it'll depend
 on the OS, kernel version and so on.  Indeed I don't think this is
 used any more as the generic pump code Linus did handles it already
 in a runtime tunable way?

I was going to remove this for similar reasons, but then I noticed
that Documentation/devicetree/bindings/spi/spi_pl022.txt contains
basically the same thing:

 - pl022,rt : indicates the controller should run the message pump
 with realtime priority to minimise the transfer latency on the bus
 (boolean)

... so I assumed this must have been conceptually OK'd in the past.

If that somehow accidentally snuck in, I can happily remove this feature.

 +list_for_each_entry(tfr, mesg-transfers, transfer_list) { +
 err = bcm2835_spi_check_transfer(spi, tfr); +if (err) +  
 goto
 out; + + err = bcm2835_spi_start_transfer(spi, tfr); +   
 if
 (err) +  goto out; + +   timeout =
 wait_for_completion_timeout(bs-done, +
 msecs_to_jiffies(BCM2835_SPI_TIMEOUT_MS)); + if (!timeout) { +
 err = -ETIMEDOUT; +  goto out; + }
 
 But I wanted to transfer 10G in a single message at 1kHz!  :P

I'm not sure what the solution is here; calculated timeout value, or
no timeout?

 +/* initialise the hardware */ + clk_prepare_enable(bs-clk); +
 bcm2835_wr(bs, BCM2835_SPI_CS, +BCM2835_SPI_CS_CLEAR_RX |
 BCM2835_SPI_CS_CLEAR_TX);
 
 It'd be nice to only enable the clock during transfers.

In practice, the clock that's provided to the driver is a dummy fixed
clock at the moment, so doing so would make no difference. Controlling
real clocks requires passing messages to the VideoCore co-processor,
and I've avoided upstreaming any of that stuff yet since I'm not sure
if the message structures are static enough to rely on, and I'm hoping
the VC reverse-engineering effort would allow a native driver for some
of those features from the ARM core rather than via message-passing...

I'll fix up the other issues you mentioned that I didn't specifically
respond to.

--
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester  
Wave(TM): Endpoint Security, Q1 2013 and remains a good choice in the  
endpoint security space. For insight on selecting the right partner to 
tackle endpoint security challenges, access the full report. 
http://p.sf.net/sfu/symantec-dev2dev
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general