brcm2708: switch to linux 4.4 and update patches
[openwrt.git] / target / linux / brcm2708 / patches-4.1 / 0178-BCM270X_DT-Use-fixed-factor-clock-for-uart1.patch
1 From 72ab78d0e2048e9563179e530b315f0074b923c4 Mon Sep 17 00:00:00 2001
2 From: Phil Elwell <phil@raspberrypi.org>
3 Date: Fri, 11 Sep 2015 09:14:01 +0100
4 Subject: [PATCH 178/222] BCM270X_DT: Use fixed-factor-clock for uart1
5
6 The BCM2835 mini-UART is almost 8250-compatible, but there is
7 a factor-of-two difference in the clock divider for the baud rate.
8 The standard 8250 driver can be used unmodified provided we lie to it
9 about the clock frequency, pretending it is double the actual value.
10 The mini-UART block shares the core clock, and the current firmware
11 uses a DT-parameter to update the clock-frequency property. Although it
12 works, this isn't ideal because it exposes the firmware to a driver
13 problem.
14
15 This patch uses the fixed-factor-clock module to create a clock that is
16 always twice the frequency of the core clock. (N.B. These "fixed" clocks
17 just describe an existing clock, rather than changing any hardware
18 settings.)
19 ---
20  arch/arm/boot/dts/bcm2708-rpi-b-plus.dts |  1 -
21  arch/arm/boot/dts/bcm2708-rpi-b.dts      |  1 -
22  arch/arm/boot/dts/bcm2708-rpi-cm.dts     |  1 -
23  arch/arm/boot/dts/bcm2708_common.dtsi    | 10 +++++++++-
24  arch/arm/boot/dts/bcm2709-rpi-2-b.dts    |  1 -
25  5 files changed, 9 insertions(+), 5 deletions(-)
26
27 --- a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
28 +++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
29 @@ -103,7 +103,6 @@
30         __overrides__ {
31                 uart0 = <&uart0>,"status";
32                 uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
33 -               uart1_clkrate = <&uart1>,"clock-frequency:0";
34                 i2s = <&i2s>,"status";
35                 spi = <&spi0>,"status";
36                 i2c0 = <&i2c0>,"status";
37 --- a/arch/arm/boot/dts/bcm2708-rpi-b.dts
38 +++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts
39 @@ -97,7 +97,6 @@
40         __overrides__ {
41                 uart0 = <&uart0>,"status";
42                 uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
43 -               uart1_clkrate = <&uart1>,"clock-frequency:0";
44                 i2s = <&i2s>,"status";
45                 spi = <&spi0>,"status";
46                 i2c0 = <&i2c0>,"status";
47 --- a/arch/arm/boot/dts/bcm2708-rpi-cm.dts
48 +++ b/arch/arm/boot/dts/bcm2708-rpi-cm.dts
49 @@ -79,7 +79,6 @@
50         __overrides__ {
51                 uart0 = <&uart0>,"status";
52                 uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
53 -               uart1_clkrate = <&uart1>,"clock-frequency:0";
54                 i2s = <&i2s>,"status";
55                 spi = <&spi0>,"status";
56                 i2c0 = <&i2c0>,"status";
57 --- a/arch/arm/boot/dts/bcm2708_common.dtsi
58 +++ b/arch/arm/boot/dts/bcm2708_common.dtsi
59 @@ -165,7 +165,7 @@
60                         compatible = "brcm,bcm2835-aux-uart", "ns16550";
61                         reg = <0x7e215040 0x40>;
62                         interrupts = <1 29>;
63 -                       clock-frequency = <500000000>;
64 +                       clocks = <&clk_uart1>;
65                         reg-shift = <2>;
66                         no-loopback-test;
67                         status = "disabled";
68 @@ -294,6 +294,14 @@
69                          clock-output-names = "pwm";
70                          clock-frequency = <100000000>;
71                 };
72 +
73 +               clk_uart1: clock@6 {
74 +                       compatible = "fixed-factor-clock";
75 +                       clocks = <&clk_core>;
76 +                       #clock-cells = <0>;
77 +                       clock-div = <1>;
78 +                       clock-mult = <2>;
79 +               };
80         };
81  
82         __overrides__ {
83 --- a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
84 +++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
85 @@ -103,7 +103,6 @@
86         __overrides__ {
87                 uart0 = <&uart0>,"status";
88                 uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
89 -               uart1_clkrate = <&uart1>,"clock-frequency:0";
90                 i2s = <&i2s>,"status";
91                 spi = <&spi0>,"status";
92                 i2c0 = <&i2c0>,"status";