* [PATCH] spi/fsl_spi: fix CPM spi driver
@ 2011-06-20 16:31 Holger Brunck
2011-07-05 14:31 ` Holger Brunck
2011-07-05 18:00 ` Grant Likely
0 siblings, 2 replies; 4+ messages in thread
From: Holger Brunck @ 2011-06-20 16:31 UTC (permalink / raw)
To: linuxppc-dev; +Cc: spi-devel-general, Holger Brunck
This patch fixes the freescale spi driver for CPM. Without this
patch SPI on CPM failed because cpm_muram_alloc_fixed tries to
allocate muram in an preserved area. The error reported was:
mpc8xxx_spi f0011a80.spi: can't allocate spi parameter ram
mpc8xxx_spi: probe of f0011a80.spi failed with error -12
Now the driver uses of_iomap to get access to this area
similar to i2c driver driver in the i2c-cpm.c which has a
similar device tree node. This is tested on a MPC8247 with CPM2.
Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
cc: Grant Likely <grant.likely@secretlab.ca>
cc: spi-devel-general@lists.sourceforge.net
---
This was the same problem reported and discussed on ppc-dev for CPM1:
http://lists.ozlabs.org/pipermail/linuxppc-dev/2010-September/085739.html
drivers/spi/spi_fsl_spi.c | 28 +++++++++++-----------------
1 files changed, 11 insertions(+), 17 deletions(-)
diff --git a/drivers/spi/spi_fsl_spi.c b/drivers/spi/spi_fsl_spi.c
index 7963c9b..ca57edf 100644
--- a/drivers/spi/spi_fsl_spi.c
+++ b/drivers/spi/spi_fsl_spi.c
@@ -684,7 +684,7 @@ static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi)
struct device_node *np = dev->of_node;
const u32 *iprop;
int size;
- unsigned long spi_base_ofs;
+ void __iomem *spi_base;
unsigned long pram_ofs = -ENOMEM;
/* Can't use of_address_to_resource(), QE muram isn't at 0. */
@@ -702,33 +702,27 @@ static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi)
return pram_ofs;
}
- /* CPM1 and CPM2 pram must be at a fixed addr. */
- if (!iprop || size != sizeof(*iprop) * 4)
- return -ENOMEM;
-
- spi_base_ofs = cpm_muram_alloc_fixed(iprop[2], 2);
- if (IS_ERR_VALUE(spi_base_ofs))
- return -ENOMEM;
+ spi_base = of_iomap(np, 1);
+ if (spi_base == NULL)
+ return -EINVAL;
if (mspi->flags & SPI_CPM2) {
pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
- if (!IS_ERR_VALUE(pram_ofs)) {
- u16 __iomem *spi_base = cpm_muram_addr(spi_base_ofs);
-
- out_be16(spi_base, pram_ofs);
- }
+ out_be16(spi_base, pram_ofs);
} else {
- struct spi_pram __iomem *pram = cpm_muram_addr(spi_base_ofs);
+ struct spi_pram __iomem *pram = spi_base;
u16 rpbase = in_be16(&pram->rpbase);
/* Microcode relocation patch applied? */
if (rpbase)
pram_ofs = rpbase;
- else
- return spi_base_ofs;
+ else {
+ pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
+ out_be16(spi_base, pram_ofs);
+ }
}
- cpm_muram_free(spi_base_ofs);
+ iounmap(spi_base);
return pram_ofs;
}
--
1.7.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] spi/fsl_spi: fix CPM spi driver
2011-06-20 16:31 [PATCH] spi/fsl_spi: fix CPM spi driver Holger Brunck
@ 2011-07-05 14:31 ` Holger Brunck
2011-07-05 18:00 ` Grant Likely
2011-07-05 18:00 ` Grant Likely
1 sibling, 1 reply; 4+ messages in thread
From: Holger Brunck @ 2011-07-05 14:31 UTC (permalink / raw)
To: Grant Likely; +Cc: linuxppc-dev, Holger Brunck, spi-devel-general
Hi Grant,
is this patch in your eyes ok to be scheduled for the next linux merge window or
is something missing? Or should it go through the powerpc tree and not through
your spi tree?
Please let me know your opinion.
Best regards
Holger Brunck
On 06/20/2011 06:31 PM, Holger Brunck wrote:
> This patch fixes the freescale spi driver for CPM. Without this
> patch SPI on CPM failed because cpm_muram_alloc_fixed tries to
> allocate muram in an preserved area. The error reported was:
>
> mpc8xxx_spi f0011a80.spi: can't allocate spi parameter ram
> mpc8xxx_spi: probe of f0011a80.spi failed with error -12
>
> Now the driver uses of_iomap to get access to this area
> similar to i2c driver driver in the i2c-cpm.c which has a
> similar device tree node. This is tested on a MPC8247 with CPM2.
>
> Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
> cc: Grant Likely <grant.likely@secretlab.ca>
> cc: spi-devel-general@lists.sourceforge.net
> ---
> This was the same problem reported and discussed on ppc-dev for CPM1:
> http://lists.ozlabs.org/pipermail/linuxppc-dev/2010-September/085739.html
>
> drivers/spi/spi_fsl_spi.c | 28 +++++++++++-----------------
> 1 files changed, 11 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/spi/spi_fsl_spi.c b/drivers/spi/spi_fsl_spi.c
> index 7963c9b..ca57edf 100644
> --- a/drivers/spi/spi_fsl_spi.c
> +++ b/drivers/spi/spi_fsl_spi.c
> @@ -684,7 +684,7 @@ static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi)
> struct device_node *np = dev->of_node;
> const u32 *iprop;
> int size;
> - unsigned long spi_base_ofs;
> + void __iomem *spi_base;
> unsigned long pram_ofs = -ENOMEM;
>
> /* Can't use of_address_to_resource(), QE muram isn't at 0. */
> @@ -702,33 +702,27 @@ static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi)
> return pram_ofs;
> }
>
> - /* CPM1 and CPM2 pram must be at a fixed addr. */
> - if (!iprop || size != sizeof(*iprop) * 4)
> - return -ENOMEM;
> -
> - spi_base_ofs = cpm_muram_alloc_fixed(iprop[2], 2);
> - if (IS_ERR_VALUE(spi_base_ofs))
> - return -ENOMEM;
> + spi_base = of_iomap(np, 1);
> + if (spi_base == NULL)
> + return -EINVAL;
>
> if (mspi->flags & SPI_CPM2) {
> pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
> - if (!IS_ERR_VALUE(pram_ofs)) {
> - u16 __iomem *spi_base = cpm_muram_addr(spi_base_ofs);
> -
> - out_be16(spi_base, pram_ofs);
> - }
> + out_be16(spi_base, pram_ofs);
> } else {
> - struct spi_pram __iomem *pram = cpm_muram_addr(spi_base_ofs);
> + struct spi_pram __iomem *pram = spi_base;
> u16 rpbase = in_be16(&pram->rpbase);
>
> /* Microcode relocation patch applied? */
> if (rpbase)
> pram_ofs = rpbase;
> - else
> - return spi_base_ofs;
> + else {
> + pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
> + out_be16(spi_base, pram_ofs);
> + }
> }
>
> - cpm_muram_free(spi_base_ofs);
> + iounmap(spi_base);
> return pram_ofs;
> }
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] spi/fsl_spi: fix CPM spi driver
2011-07-05 14:31 ` Holger Brunck
@ 2011-07-05 18:00 ` Grant Likely
0 siblings, 0 replies; 4+ messages in thread
From: Grant Likely @ 2011-07-05 18:00 UTC (permalink / raw)
To: Holger Brunck; +Cc: spi-devel-general, linuxppc-dev
On Tue, Jul 05, 2011 at 04:31:50PM +0200, Holger Brunck wrote:
> Hi Grant,
> is this patch in your eyes ok to be scheduled for the next linux merge window or
> is something missing? Or should it go through the powerpc tree and not through
> your spi tree?
No, I just hadn't gotten to it yet. Sometimes I need to be pinged.
I've merged it.
g.
>
> Please let me know your opinion.
>
> Best regards
> Holger Brunck
>
> On 06/20/2011 06:31 PM, Holger Brunck wrote:
> > This patch fixes the freescale spi driver for CPM. Without this
> > patch SPI on CPM failed because cpm_muram_alloc_fixed tries to
> > allocate muram in an preserved area. The error reported was:
> >
> > mpc8xxx_spi f0011a80.spi: can't allocate spi parameter ram
> > mpc8xxx_spi: probe of f0011a80.spi failed with error -12
> >
> > Now the driver uses of_iomap to get access to this area
> > similar to i2c driver driver in the i2c-cpm.c which has a
> > similar device tree node. This is tested on a MPC8247 with CPM2.
> >
> > Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
> > cc: Grant Likely <grant.likely@secretlab.ca>
> > cc: spi-devel-general@lists.sourceforge.net
> > ---
> > This was the same problem reported and discussed on ppc-dev for CPM1:
> > http://lists.ozlabs.org/pipermail/linuxppc-dev/2010-September/085739.html
> >
> > drivers/spi/spi_fsl_spi.c | 28 +++++++++++-----------------
> > 1 files changed, 11 insertions(+), 17 deletions(-)
> >
> > diff --git a/drivers/spi/spi_fsl_spi.c b/drivers/spi/spi_fsl_spi.c
> > index 7963c9b..ca57edf 100644
> > --- a/drivers/spi/spi_fsl_spi.c
> > +++ b/drivers/spi/spi_fsl_spi.c
> > @@ -684,7 +684,7 @@ static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi)
> > struct device_node *np = dev->of_node;
> > const u32 *iprop;
> > int size;
> > - unsigned long spi_base_ofs;
> > + void __iomem *spi_base;
> > unsigned long pram_ofs = -ENOMEM;
> >
> > /* Can't use of_address_to_resource(), QE muram isn't at 0. */
> > @@ -702,33 +702,27 @@ static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi)
> > return pram_ofs;
> > }
> >
> > - /* CPM1 and CPM2 pram must be at a fixed addr. */
> > - if (!iprop || size != sizeof(*iprop) * 4)
> > - return -ENOMEM;
> > -
> > - spi_base_ofs = cpm_muram_alloc_fixed(iprop[2], 2);
> > - if (IS_ERR_VALUE(spi_base_ofs))
> > - return -ENOMEM;
> > + spi_base = of_iomap(np, 1);
> > + if (spi_base == NULL)
> > + return -EINVAL;
> >
> > if (mspi->flags & SPI_CPM2) {
> > pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
> > - if (!IS_ERR_VALUE(pram_ofs)) {
> > - u16 __iomem *spi_base = cpm_muram_addr(spi_base_ofs);
> > -
> > - out_be16(spi_base, pram_ofs);
> > - }
> > + out_be16(spi_base, pram_ofs);
> > } else {
> > - struct spi_pram __iomem *pram = cpm_muram_addr(spi_base_ofs);
> > + struct spi_pram __iomem *pram = spi_base;
> > u16 rpbase = in_be16(&pram->rpbase);
> >
> > /* Microcode relocation patch applied? */
> > if (rpbase)
> > pram_ofs = rpbase;
> > - else
> > - return spi_base_ofs;
> > + else {
> > + pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
> > + out_be16(spi_base, pram_ofs);
> > + }
> > }
> >
> > - cpm_muram_free(spi_base_ofs);
> > + iounmap(spi_base);
> > return pram_ofs;
> > }
> >
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] spi/fsl_spi: fix CPM spi driver
2011-06-20 16:31 [PATCH] spi/fsl_spi: fix CPM spi driver Holger Brunck
2011-07-05 14:31 ` Holger Brunck
@ 2011-07-05 18:00 ` Grant Likely
1 sibling, 0 replies; 4+ messages in thread
From: Grant Likely @ 2011-07-05 18:00 UTC (permalink / raw)
To: Holger Brunck; +Cc: spi-devel-general, linuxppc-dev
On Mon, Jun 20, 2011 at 06:31:57PM +0200, Holger Brunck wrote:
> This patch fixes the freescale spi driver for CPM. Without this
> patch SPI on CPM failed because cpm_muram_alloc_fixed tries to
> allocate muram in an preserved area. The error reported was:
>
> mpc8xxx_spi f0011a80.spi: can't allocate spi parameter ram
> mpc8xxx_spi: probe of f0011a80.spi failed with error -12
>
> Now the driver uses of_iomap to get access to this area
> similar to i2c driver driver in the i2c-cpm.c which has a
> similar device tree node. This is tested on a MPC8247 with CPM2.
>
> Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
> cc: Grant Likely <grant.likely@secretlab.ca>
> cc: spi-devel-general@lists.sourceforge.net
Applied, thanks.
g.
> ---
> This was the same problem reported and discussed on ppc-dev for CPM1:
> http://lists.ozlabs.org/pipermail/linuxppc-dev/2010-September/085739.html
>
> drivers/spi/spi_fsl_spi.c | 28 +++++++++++-----------------
> 1 files changed, 11 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/spi/spi_fsl_spi.c b/drivers/spi/spi_fsl_spi.c
> index 7963c9b..ca57edf 100644
> --- a/drivers/spi/spi_fsl_spi.c
> +++ b/drivers/spi/spi_fsl_spi.c
> @@ -684,7 +684,7 @@ static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi)
> struct device_node *np = dev->of_node;
> const u32 *iprop;
> int size;
> - unsigned long spi_base_ofs;
> + void __iomem *spi_base;
> unsigned long pram_ofs = -ENOMEM;
>
> /* Can't use of_address_to_resource(), QE muram isn't at 0. */
> @@ -702,33 +702,27 @@ static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi)
> return pram_ofs;
> }
>
> - /* CPM1 and CPM2 pram must be at a fixed addr. */
> - if (!iprop || size != sizeof(*iprop) * 4)
> - return -ENOMEM;
> -
> - spi_base_ofs = cpm_muram_alloc_fixed(iprop[2], 2);
> - if (IS_ERR_VALUE(spi_base_ofs))
> - return -ENOMEM;
> + spi_base = of_iomap(np, 1);
> + if (spi_base == NULL)
> + return -EINVAL;
>
> if (mspi->flags & SPI_CPM2) {
> pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
> - if (!IS_ERR_VALUE(pram_ofs)) {
> - u16 __iomem *spi_base = cpm_muram_addr(spi_base_ofs);
> -
> - out_be16(spi_base, pram_ofs);
> - }
> + out_be16(spi_base, pram_ofs);
> } else {
> - struct spi_pram __iomem *pram = cpm_muram_addr(spi_base_ofs);
> + struct spi_pram __iomem *pram = spi_base;
> u16 rpbase = in_be16(&pram->rpbase);
>
> /* Microcode relocation patch applied? */
> if (rpbase)
> pram_ofs = rpbase;
> - else
> - return spi_base_ofs;
> + else {
> + pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
> + out_be16(spi_base, pram_ofs);
> + }
> }
>
> - cpm_muram_free(spi_base_ofs);
> + iounmap(spi_base);
> return pram_ofs;
> }
>
> --
> 1.7.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-07-05 18:01 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-20 16:31 [PATCH] spi/fsl_spi: fix CPM spi driver Holger Brunck
2011-07-05 14:31 ` Holger Brunck
2011-07-05 18:00 ` Grant Likely
2011-07-05 18:00 ` Grant Likely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).