]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
powerpc/512x: add function for chip select parameter configuration
authorAnatolij Gustschin <agust@denx.de>
Mon, 4 Feb 2013 10:16:02 +0000 (11:16 +0100)
committerAnatolij Gustschin <agust@denx.de>
Mon, 4 Feb 2013 23:29:26 +0000 (23:29 +0000)
Add ability to configure chip select (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.

Acked-by: Timur Tabi <timur@tabi.org>
Signed-off-by: Anatolij Gustschin <agust@denx.de>
arch/powerpc/include/asm/mpc5121.h
arch/powerpc/platforms/512x/mpc512x_shared.c

index 8c0ab2ca689c4e6e4731de0dcec395c6313b2216..8ae133eaf9faedfaac826491c3f2254f6fa5565f 100644 (file)
@@ -53,4 +53,20 @@ struct mpc512x_ccm {
        u32     m4ccr;  /* MSCAN4 CCR */
        u8      res[0x98]; /* Reserved */
 };
+
+/*
+ * LPC Module
+ */
+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 */
+};
+
+int mpc512x_cs_config(unsigned int cs, u32 val);
+
 #endif /* __ASM_POWERPC_MPC5121_H__ */
index c34443849d9af80af5ea050d3c2a565cd3435cc8..824cbee68df22ac849fe5f1435a9d9fcca47dd54 100644 (file)
@@ -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(unsigned int cs, u32 val)
+{
+       static struct mpc512x_lpc __iomem *lpc;
+       struct device_node *np;
+
+       if (cs > 7)
+               return -EINVAL;
+
+       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);
+       return 0;
+}
+EXPORT_SYMBOL(mpc512x_cs_config);