f8247591ed87609dbe374d0231487ae8d98cb1eb
[openwrt/staging/dedeckeh.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";