Patchwork spi/mpc52xx: check for invalid PSC usage

login
register
mail settings
Submitter Wolfram Sang
Date Oct. 23, 2009, 11:25 a.m.
Message ID <1256297157-28246-1-git-send-email-w.sang@pengutronix.de>
Download mbox | patch
Permalink /patch/36780/
State Superseded
Delegated to: Grant Likely
Headers show

Comments

Wolfram Sang - Oct. 23, 2009, 11:25 a.m.
Add checks to allow only PSCs capable of SPI.
Also turn printk to dev_err while we are here.

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Cc: Grant Likely <grant.likely@secretlab.ca>
Cc: David Brownell <dbrownell@users.sourceforge.net>
---

Grant, if the patch is OK, maybe it can also go via your tree?

 drivers/spi/mpc52xx_psc_spi.c |    9 ++++-----
 1 files changed, 4 insertions(+), 5 deletions(-)
Grant Likely - Nov. 1, 2009, 1:22 a.m.
On Fri, Oct 23, 2009 at 5:25 AM, Wolfram Sang <w.sang@pengutronix.de> wrote:
> Add checks to allow only PSCs capable of SPI.
> Also turn printk to dev_err while we are here.

Hi Wolfram,

I wouldn't even bother.  It's not actively dangerous to try and use
PSC{4,5} in SPI mode.  It just not going to work.  Besides, the
MPC5200 common code already checks for an invalid PSC number when
setting the clock divisor.

Have you seen cases of users trying to do the wrong thing with the
crippled PSCs?

g.

>
> Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
> Cc: Grant Likely <grant.likely@secretlab.ca>
> Cc: David Brownell <dbrownell@users.sourceforge.net>
> ---
>
> Grant, if the patch is OK, maybe it can also go via your tree?
>
>  drivers/spi/mpc52xx_psc_spi.c |    9 ++++-----
>  1 files changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/spi/mpc52xx_psc_spi.c b/drivers/spi/mpc52xx_psc_spi.c
> index 1b74d5c..1d11a6d 100644
> --- a/drivers/spi/mpc52xx_psc_spi.c
> +++ b/drivers/spi/mpc52xx_psc_spi.c
> @@ -467,19 +467,18 @@ static int __init mpc52xx_psc_spi_of_probe(struct of_device *op,
>
>        regaddr_p = of_get_address(op->node, 0, &size64, NULL);
>        if (!regaddr_p) {
> -               printk(KERN_ERR "Invalid PSC address\n");
> +               dev_err(&op->dev, "Invalid PSC address\n");
>                return -EINVAL;
>        }
>        regaddr64 = of_translate_address(op->node, regaddr_p);
>
> -       /* get PSC id (1..6, used by port_config) */
> +       /* get PSC id (only 1,2,3,6 can do SPI) */
>        if (op->dev.platform_data == NULL) {
>                const u32 *psc_nump;
>
>                psc_nump = of_get_property(op->node, "cell-index", NULL);
> -               if (!psc_nump || *psc_nump > 5) {
> -                       printk(KERN_ERR "mpc52xx_psc_spi: Device node %s has invalid "
> -                                       "cell-index property\n", op->node->full_name);
> +               if (!psc_nump || (*psc_nump > 2 && *psc_nump != 5)) {
> +                       dev_err(&op->dev, "PSC can't do SPI\n");
>                        return -EINVAL;
>                }
>                id = *psc_nump + 1;
> --
> 1.6.3.3
>
>

Patch

diff --git a/drivers/spi/mpc52xx_psc_spi.c b/drivers/spi/mpc52xx_psc_spi.c
index 1b74d5c..1d11a6d 100644
--- a/drivers/spi/mpc52xx_psc_spi.c
+++ b/drivers/spi/mpc52xx_psc_spi.c
@@ -467,19 +467,18 @@  static int __init mpc52xx_psc_spi_of_probe(struct of_device *op,
 
 	regaddr_p = of_get_address(op->node, 0, &size64, NULL);
 	if (!regaddr_p) {
-		printk(KERN_ERR "Invalid PSC address\n");
+		dev_err(&op->dev, "Invalid PSC address\n");
 		return -EINVAL;
 	}
 	regaddr64 = of_translate_address(op->node, regaddr_p);
 
-	/* get PSC id (1..6, used by port_config) */
+	/* get PSC id (only 1,2,3,6 can do SPI) */
 	if (op->dev.platform_data == NULL) {
 		const u32 *psc_nump;
 
 		psc_nump = of_get_property(op->node, "cell-index", NULL);
-		if (!psc_nump || *psc_nump > 5) {
-			printk(KERN_ERR "mpc52xx_psc_spi: Device node %s has invalid "
-					"cell-index property\n", op->node->full_name);
+		if (!psc_nump || (*psc_nump > 2 && *psc_nump != 5)) {
+			dev_err(&op->dev, "PSC can't do SPI\n");
 			return -EINVAL;
 		}
 		id = *psc_nump + 1;