[PATCH] powerpc/512x: add function for CS parameter configuration

Timur Tabi timur at tabi.org
Sat Feb 2 15:31:51 EST 2013


On Fri, Feb 1, 2013 at 7:28 AM, Anatolij Gustschin <agust at denx.de> wrote:
> Add ability to configure CS parameters for devices that need
> different CS parameters setup after their configuration. I.e.
> an FPGA device on LP bus can require different CS parameters
> for its bus interface after loading firmware into it. A driver
> can easily reconfigure the LPC CS parameters using this function.

Could you define "CS" somewhere?

> +struct mpc512x_lpc {
> +       u32     cs_cfg[8];      /* CS config */
> +       u32     cs_ctrl;        /* CS Control Register */
> +       u32     cs_status;      /* CS Status Register */
> +       u32     burst_ctrl;     /* CS Burst Control Register */
> +       u32     deadcycle_ctrl; /* CS Deadcycle Control Register */
> +       u32     holdcycle_ctrl; /* CS Holdcycle Control Register */
> +       u32     alt;            /* Address Latch Timing Register */
> +};

These should be __be32.

> +
> +int mpc512x_cs_config(int cs, u32 val);
> +
>  #endif /* __ASM_POWERPC_MPC5121_H__ */
> diff --git a/arch/powerpc/platforms/512x/mpc512x_shared.c b/arch/powerpc/platforms/512x/mpc512x_shared.c
> index c344438..112b4f6 100644
> --- a/arch/powerpc/platforms/512x/mpc512x_shared.c
> +++ b/arch/powerpc/platforms/512x/mpc512x_shared.c
> @@ -436,3 +436,33 @@ void __init mpc512x_init(void)
>         mpc512x_restart_init();
>         mpc512x_psc_fifo_init();
>  }
> +
> +/**
> + * mpc512x_cs_config - Setup chip select configuration
> + * @cs: chip select number
> + * @val: chip select configuration value
> + *
> + * Perform chip select configuration for devices on LocalPlus Bus.
> + * Intended to dynamically reconfigure the chip select parameters
> + * for configurable devices on the bus.
> + */
> +int mpc512x_cs_config(int cs, u32 val)
> +{
> +       static struct mpc512x_lpc __iomem *lpc;
> +       struct device_node *np;
> +
> +       if (cs < 0 || cs > 7)
> +               return -EINVAL;

If you make cs an unsigned int, you won't need to test for < 0.

> +
> +       if (!lpc) {
> +               np = of_find_compatible_node(NULL, NULL, "fsl,mpc5121-lpc");
> +               lpc = of_iomap(np, 0);
> +               of_node_put(np);
> +               if (!lpc)
> +                       return -ENOMEM;
> +       }
> +
> +       out_be32(&lpc->cs_cfg[cs], val);

You forgot the iounmap() if lpc == NULL.

> +       return 0;
> +}
> +EXPORT_SYMBOL_GPL(mpc512x_cs_config);

EXPORT_SYMBOL, please, to match the rest of the Freescale platforms.



-- 
Timur Tabi
Linux kernel developer at Freescale


More information about the Linuxppc-dev mailing list