blob: 74b9a2986fdd99cfc1c9540b00544020a4787e28 [file] [log] [blame]
Device Tree Clock bindings for brcmstb
In addition to the platform bindings provided in-tree, the brcmstb common
clock driver supports the following clock providers/consumers:
- CPU clock dividers (provider/consumer)
- bcm_clk_gate
- bcm_clk_sw
=== CPU clock divider ===
The CPU divider node serves as the sole clock for the CPU complex. It supports
power-of-2 clock division, with a divider of "1" as the default highest-speed
setting.
Required properties:
- compatible : shall be one of the following:
"brcm,brcmstb-cpu-clk-div"
- reg : address and width of the divider configuration register
- #clock-cells : shall be set to 0
- clocks : phandle of clock provider which provides the source clock
(this would typically be a "fixed-clock" type PLL)
- div-table : list of (raw_value,divider) ordered pairs that correspond to the
allowed clock divider settings
- div-shift-width : least-significant bit position and width of divider value
example:
cpupll: cpupll@0 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <1500000000>;
};
cpuclk: cpu-clk-div@0 {
compatible = "brcm,brcmstb-cpu-clk-div";
reg = <0xf03e257c 0x4>;
#clock-cells = <0>;
clocks = <&cpupll>;
div-table = <0x00 1 0x11 2 0x12 4 0x13 8 0x14 16>;
div-shift-width = <0 5>;
};
cpus {
cpu@0 {
clocks = <&cpuclk>;
};
};
=== bcm_clk_gate ===
bcm_clk_gate is a clock type very similar to the clk_gate defined in
drivers/clk/clk-gate. In fact, some of the code has been copied
verbatim. The main difference is that bcm_clk_gate may have a delay
specified.
Required properties:
- compatible: must be "brcm,brcmstb-gate-clk"
- reg : the register address of the bit that gets set/unset. The
register range will always have a size of four bytes.
- #clock-cells : see clock-bindings.txt.
- bit-shift -- the bit position of reg that enables/disables the clock.
Optional properties:
- clocks : see clock-bindings.txt.
- clock-names : see clock-bindings.txt.
- set-bit-to-disable : inverts default gate programming. Setting the bit
gates the clock and clearing the bit ungates the clock.
- brcm,delay : this indicates that there must be a delay after the
bit is changed. The first parameter is the delay in usec
after the bit is being set to 0. The second parameter is the
delay in usec after the bit is being set to 1. So for the
example of <0 200>, there must be a delay of 200 usec after
setting the bit to 1.
- clock-output-names : see clock-bindings.txt.
- brcm,read-only : specified if a clock can whose enable and
disable actions do nothing as they do not write the
register. This is a boolean.
- brcm,inhibit-disable : specified if a clock is allowed to
enable but not disable; ie the disable action does
nothing. This is a boolean.
example:
lc_pll_reseta : lc_pll_reseta@f04e014c {
compatible = "brcm,brcmstb-gate-clk";
#clock-cells = <0>;
reg = <0xf04e014c 0x4>;
bit-shift = <0>;
set-bit-to-disable;
brcm,delay = <0 200>;
clocks = <&iso_ck_pll_lc>;
clock-names = "iso_ck_pll_lc";
=== bcm_clk_sw ===
bcm_clk_sw is a clock type which has no hardware counterpart: it
is used solely to enable/disable one or more parent clocks in
unison.
Required properties:
- compatible : must be "brcm,brcmstb-sw-clk"
- #clock-cells : see clock-bindings.txt.
Optional properties:
- clocks : the list of parent clocks.
- clock-names : the names of the parent clocks in the same order
as the 'clocks' property.
Example:
top_usb21 : top_usb21 {
compatible = "brcm,brcmstb-sw-clk";
#clock-cells = <0>;
clocks = <&usb1_27_mdio_ck>, <&usb1_freerun_ck>,
<&usb1_gisb_ck>, <&usb1_scb_ck>, <&usb1_108_ck_ahb>,
<&usb1_108_ck_axi>, <&lc_pll_pst_div_hld_ch1>;
clock-names = "usb1_27_mdio_ck", "usb1_freerun_ck",
"usb1_gisb_ck", "usb1_scb_ck", "usb1_108_ck_ahb",
"usb1_108_ck_axi", "lc_pll_pst_div_hld_ch1";
};