From: John Jacques <john.jacq...@lsi.com>

Signed-off-by: John Jacques <john.jacq...@lsi.com>
---
 arch/arm/boot/dts/axm55xx.dts   | 17 +++++++++++
 arch/arm/mach-axxia/clock.c     | 68 +++++++++++++++++++++++++++++------------
 drivers/tty/serial/amba-pl011.c | 39 +++++++++++------------
 3 files changed, 83 insertions(+), 41 deletions(-)

diff --git a/arch/arm/boot/dts/axm55xx.dts b/arch/arm/boot/dts/axm55xx.dts
index f6de156..b79c744 100644
--- a/arch/arm/boot/dts/axm55xx.dts
+++ b/arch/arm/boot/dts/axm55xx.dts
@@ -152,6 +152,23 @@
                };
        };
 
+       clocks {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu {
+                        frequency = <0>; /* Filled in by the boot loader. */
+               };
+
+               peripheral {
+                       frequency = <0>; /* Filled in by the boot loader. */
+               };
+
+               emmc {
+                        frequency = <0>; /* Filled in by the boot loader. */
+               };
+       };
+
        memory@00000000 {
                device_type = "memory";
                reg = <0 0x00000000 0 0x10000000>;
diff --git a/arch/arm/mach-axxia/clock.c b/arch/arm/mach-axxia/clock.c
index 27ace6f..4ad8cb9 100644
--- a/arch/arm/mach-axxia/clock.c
+++ b/arch/arm/mach-axxia/clock.c
@@ -13,6 +13,9 @@
 #include <linux/clk.h>
 #include <linux/clkdev.h>
 #include <linux/clk-provider.h>
+#include <linux/of_fdt.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
 
 #define AXXIA_CPU_CLOCK 1400000000
 #define AXXIA_SYS_CLOCK  450000000
@@ -81,6 +84,11 @@ axxia_init_clocks(void)
 
 #else
 
+static struct of_device_id cpu_pll[] __initconst = {
+       { .name = "/clocks/cpu", },
+       {},
+};
+
 /*
   
-------------------------------------------------------------------------------
   axxia_init_clocks
@@ -93,27 +101,29 @@ axxia_init_clocks(void)
 {
        struct clk *clk;
        int i;
+       struct device_node *np;
+       u32 frequency;
 
-       /* APB clock dummy */
-       clk = clk_register_fixed_rate(NULL, "apb_pclk", NULL,
-                                     CLK_IS_ROOT, AXXIA_SYS_CLOCK/2);
-       clk_register_clkdev(clk, "apb_pclk", NULL);
+       np = of_find_node_by_path("/clocks/cpu");
+
+       if (np) {
+               if (of_property_read_u32(np, "frequency", &frequency))
+                       printk(KERN_ERR "%d - Error!", __LINE__);
+       }
 
-       /* CPU core clock (1400MHz) from CPU_PLL */
        clk = clk_register_fixed_rate(NULL, "clk_cpu", NULL,
-                                     CLK_IS_ROOT, AXXIA_CPU_CLOCK);
+                                     CLK_IS_ROOT, frequency);
 
-       /* APB and System AXI clock from CPU_PLL */
-       clk = clk_register_fixed_rate(NULL, "clk_pclk", NULL,
-                                     CLK_IS_ROOT, AXXIA_CPU_CLOCK/9);
+       np = of_find_node_by_path("/clocks/peripheral");
 
-       /* DDR3 (interface 1) clock from SMEM1_PLL */
-       clk = clk_register_fixed_rate(NULL, "clk_smem1_2x", NULL,
-                                     CLK_IS_ROOT, AXXIA_DDR_CLOCK);
+       if (np) {
+               if (of_property_read_u32(np, "frequency", &frequency))
+                       printk(KERN_ERR "%d - Error!", __LINE__);
+       }
 
-       /* AXIS slow peripheral clock from SMEM1_PLL. */
        clk = clk_register_fixed_rate(NULL, "clk_per", NULL,
-                                     CLK_IS_ROOT, 2000000);
+                                     CLK_IS_ROOT, frequency);
+
        /* PL011 UART0 */
        clk_register_clkdev(clk, NULL, "2010080000.uart");
        /* PL011 UART1 */
@@ -124,20 +134,38 @@ axxia_init_clocks(void)
        clk_register_clkdev(clk, NULL, "2010083000.uart");
        /* PL022 SSP */
        clk_register_clkdev(clk, NULL, "ssp");
-
-       /* Timers 1MHz clock */
-       clk = clk_register_fixed_rate(NULL, "clk_1mhz", NULL,
-                                     CLK_IS_ROOT, 1000000);
        /* SP804 timers */
        clk_register_clkdev(clk, NULL, "sp804");
        for (i = 0; i < 8; i++)
                clk_register_clkdev(clk, NULL, "axxia-timer%d", i);
 
-       /* Dummy MMC clk */
+       np = of_find_node_by_path("/clocks/emmc");
+
+       if (np) {
+               if (of_property_read_u32(np, "frequency", &frequency))
+                       printk(KERN_ERR "%d - Error!", __LINE__);
+       }
+
        clk = clk_register_fixed_rate(NULL, "clk_mmci", NULL,
-                                     CLK_IS_ROOT, 25000000);
+                                     CLK_IS_ROOT, frequency);
+
        /* PL180 MMCI */
        clk_register_clkdev(clk, NULL, "mmci");
+
+       /* APB clock dummy */
+       clk = clk_register_fixed_rate(NULL, "apb_pclk", NULL,
+                                     CLK_IS_ROOT, AXXIA_SYS_CLOCK/2);
+       clk_register_clkdev(clk, "apb_pclk", NULL);
+
+       /* APB and System AXI clock from CPU_PLL */
+       clk = clk_register_fixed_rate(NULL, "clk_pclk", NULL,
+                                     CLK_IS_ROOT, AXXIA_CPU_CLOCK/9);
+
+       /* DDR3 (interface 1) clock from SMEM1_PLL */
+       clk = clk_register_fixed_rate(NULL, "clk_smem1_2x", NULL,
+                                     CLK_IS_ROOT, AXXIA_DDR_CLOCK);
+
+       return;
 }
 
 #endif
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index 4587609..af7be44 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -64,7 +64,8 @@
 
 #define AMBA_ISR_PASS_LIMIT    256
 
-#define UART_DR_ERROR          
(UART011_DR_OE|UART011_DR_BE|UART011_DR_PE|UART011_DR_FE)
+#define UART_DR_ERROR          (UART011_DR_OE|UART011_DR_BE| \
+                               UART011_DR_PE|UART011_DR_FE)
 #define UART_DUMMY_DR_RX       (1 << 16)
 
 
@@ -751,8 +752,9 @@ static void pl011_dma_rx_chars(struct uart_amba_port *uap,
         */
        if (dma_count == pending && readfifo) {
                /* Clear any error flags */
-               writew(UART011_OEIS | UART011_BEIS | UART011_PEIS | 
UART011_FEIS,
-                      uap->port.membase + UART011_ICR);
+               writew(UART011_OEIS | UART011_BEIS |
+                       UART011_PEIS | UART011_FEIS,
+                       uap->port.membase + UART011_ICR);
 
                /*
                 * If we read all the DMA'd characters, and we had an
@@ -817,8 +819,8 @@ static void pl011_dma_rx_irq(struct uart_amba_port *uap)
        /* Switch buffer & re-trigger DMA job */
        dmarx->use_buf_b = !dmarx->use_buf_b;
        if (pl011_dma_rx_trigger_dma(uap)) {
-               dev_dbg(uap->port.dev, "could not retrigger RX DMA job "
-                       "fall back to interrupt mode\n");
+               dev_dbg(uap->port.dev,
+                       "could not retrigger RX DMA job fall back to interrupt 
mode\n");
                uap->im |= UART011_RXIM;
                writew(uap->im, uap->port.membase + UART011_IMSC);
        }
@@ -865,8 +867,8 @@ static void pl011_dma_rx_callback(void *data)
         * get some IRQ immediately from RX.
         */
        if (ret) {
-               dev_dbg(uap->port.dev, "could not retrigger RX DMA job "
-                       "fall back to interrupt mode\n");
+               dev_dbg(uap->port.dev,
+                       "could not retrigger RX DMA job fall back to interrupt 
mode\n");
                uap->im |= UART011_RXIM;
                writew(uap->im, uap->port.membase + UART011_IMSC);
        }
@@ -944,8 +946,8 @@ skip_rx:
 
        if (uap->using_rx_dma) {
                if (pl011_dma_rx_trigger_dma(uap))
-                       dev_dbg(uap->port.dev, "could not trigger initial "
-                               "RX DMA job, fall back to interrupt mode\n");
+                       dev_dbg(uap->port.dev,
+                               "could not trigger initial RX DMA job, fall 
back to interrupt mode\n");
        }
 }
 
@@ -1169,8 +1171,8 @@ static void pl011_rx_chars(struct uart_amba_port *uap)
         */
        if (pl011_dma_rx_available(uap)) {
                if (pl011_dma_rx_trigger_dma(uap)) {
-                       dev_dbg(uap->port.dev, "could not trigger RX DMA job "
-                               "fall back to interrupt mode again\n");
+                       dev_dbg(uap->port.dev,
+                               "could not trigger RX DMA job fall back to 
interrupt mode again\n");
                        uap->im |= UART011_RXIM;
                } else
                        uap->im &= ~UART011_RXIM;
@@ -1481,11 +1483,11 @@ static void pl010_put_poll_char(struct uart_port *port,
 static void pl011_shutdown_channel(struct uart_amba_port *uap,
                                        unsigned int lcrh)
 {
-      unsigned long val;
+       unsigned long val;
 
-      val = readw(uap->port.membase + lcrh);
-      val &= ~(UART01x_LCRH_BRK | UART01x_LCRH_FEN);
-      writew(val, uap->port.membase + lcrh);
+       val = readw(uap->port.membase + lcrh);
+       val &= ~(UART01x_LCRH_BRK | UART01x_LCRH_FEN);
+       writew(val, uap->port.membase + lcrh);
 }
 
 static void pl011_shutdown(struct uart_port *port)
@@ -1580,7 +1582,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios 
*termios,
        case CS7:
                lcr_h = UART01x_LCRH_WLEN_7;
                break;
-       default: // CS8
+       default: /* CS8 */
                lcr_h = UART01x_LCRH_WLEN_8;
                break;
        }
@@ -1667,13 +1669,8 @@ pl011_set_termios(struct uart_port *port, struct 
ktermios *termios,
                        quot -= 2;
        }
        /* Set baud rate */
-#if 0
        writew(quot & 0x3f, port->membase + UART011_FBRD);
        writew(quot >> 6, port->membase + UART011_IBRD);
-#else
-       writew(0x3, port->membase + UART011_FBRD);
-       writew(0x364, port->membase + UART011_IBRD);
-#endif
 
        /*
         * ----------v----------v----------v----------v-----
-- 
1.8.4.3

_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to