Renesas ARM Based SoC r8a7778 CCF and Multiplatform Updates for v4.1
* Add CCF and them multiplatform support to r8a7778 SoC and its bockw board. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJU9671AAoJENfPZGlqN0++71UP/iuiuiyeF3Wgqc9Pu22hVg8g 3qd0Hqw2iUx07KV29kGoJmAkL48A5zGOk/JqvLY2BX5+ZAdWxy4sbY/njMzeUAH6 hRiZGbgb+7gRSsQNCbxmR6Kh1zx8akxrQOw7PzJs0Yjwh2I8+rrb+2qxDNy1RbO9 KoTYk4j98mOLdwfGYixoVjSIdgt70JNKUn3LY0JHn6Ss38u/1zDB55PnlXeCKNfu t7WSwTxbdN1h0hJ03y3ZsTQMVb3BDYMfRFtWZCZ/AE4CFM53oeRVkXEewbPfPQBn b7A05JYKm8NfF8AnbHbgnRJU/3H9kCMylw/rcYGqXGgs2GDL8qxE1O45vsC0ONJj rKrwRqvz6d8DrSZmEfufI48ykOPKIsWjJw9TKv/8gXNxu0qF9QjqygEKBt4isOZ7 DGqy46RZguhJAESZJkMqydpuLBG+QZ4NKXgm0fi9IhDooj/9qZWLpoaoeSZCO9fC 6ZPGkFA86S9G44bcbrDkp2j86K0lVkoC/Zx/9ZcJMYxauj0/yvDKTH7a/iods7IN xvNxKGgl2en2oADsRAHb3+lGSbdpVo0wMzvf5l8qSMElIJKoDs/L0evykeOQEW83 Kcyd0M3gaX9vSdjrGzrvq6lNXpshGLg/8e+0aAJ9G4x3UKhvc0UnFQ67m1Vmc0Ti WG4WMnD3yXFjiNZjDDrd =f7JV -----END PGP SIGNATURE----- Merge tag 'renesas-r8a7778-ccf-and-multiplatform-for-v4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/multiplatform Pull "Renesas ARM Based SoC r8a7778 CCF and Multiplatform Updates for v4.1" from Simon Horman: * Add CCF and them multiplatform support to r8a7778 SoC and its bockw board. * tag 'renesas-r8a7778-ccf-and-multiplatform-for-v4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas: (21 commits) ARM: shmobile: r8a7778: enable multiplatform target ARM: shmobile: bockw: add sound to DT ARM: shmobile: r8a7778: add sound to DT ARM: shmobile: bockw: add devices hooked up to i2c0 to DT DT: i2c: add trivial binding for OKI ML86V7667 video decoder ARM: shmobile: r8a7778: common clock framework CPG driver ARM: shmobile: bockw dts: set extal clock frequency ARM: shmobile: bockw dts: Move Ethernet node to BSC ARM: shmobile: r8a7778 dtsi: Add Bus State Controller node ARM: shmobile: bockw: add USB, VIN pin descriptions to DT ARM: shmobile: r8a7778: add internal ethernet controller to DT ARM: shmobile: r8a7778: add MSTP clock assignments to DT ARM: shmobile: r8a7778: implement SoC and board CCF support ARM: shmobile: r8a7778: Common clock framework DT description ARM: shmobile: r8a7778: add CPG register bits header ARM: shmobile: r8a7778: synchronize dts with reference platform drivers: bus: Add Simple Power-Managed Bus Driver drivers: bus: Add Renesas Bus State Controller (BSC) DT Bindings drivers: bus: Add Simple Power-Managed Bus DT Bindings drivers: bus: Sort Makefile entries alphabetically ...
This commit is contained in:
Коммит
369237ab1f
|
@ -0,0 +1,46 @@
|
||||||
|
Renesas Bus State Controller (BSC)
|
||||||
|
==================================
|
||||||
|
|
||||||
|
The Renesas Bus State Controller (BSC, sometimes called "LBSC within Bus
|
||||||
|
Bridge", or "External Bus Interface") can be found in several Renesas ARM SoCs.
|
||||||
|
It provides an external bus for connecting multiple external devices to the
|
||||||
|
SoC, driving several chip select lines, for e.g. NOR FLASH, Ethernet and USB.
|
||||||
|
|
||||||
|
While the BSC is a fairly simple memory-mapped bus, it may be part of a PM
|
||||||
|
domain, and may have a gateable functional clock.
|
||||||
|
Before a device connected to the BSC can be accessed, the PM domain
|
||||||
|
containing the BSC must be powered on, and the functional clock
|
||||||
|
driving the BSC must be enabled.
|
||||||
|
|
||||||
|
The bindings for the BSC extend the bindings for "simple-pm-bus".
|
||||||
|
|
||||||
|
|
||||||
|
Required properties
|
||||||
|
- compatible: Must contain an SoC-specific value, and "renesas,bsc" and
|
||||||
|
"simple-pm-bus" as fallbacks.
|
||||||
|
SoC-specific values can be:
|
||||||
|
"renesas,bsc-r8a73a4" for R-Mobile APE6 (r8a73a4)
|
||||||
|
"renesas,bsc-sh73a0" for SH-Mobile AG5 (sh73a0)
|
||||||
|
- #address-cells, #size-cells, ranges: Must describe the mapping between
|
||||||
|
parent address and child address spaces.
|
||||||
|
- reg: Must contain the base address and length to access the bus controller.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- interrupts: Must contain a reference to the BSC interrupt, if available.
|
||||||
|
- clocks: Must contain a reference to the functional clock, if available.
|
||||||
|
- power-domains: Must contain a reference to the PM domain, if available.
|
||||||
|
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
bsc: bus@fec10000 {
|
||||||
|
compatible = "renesas,bsc-sh73a0", "renesas,bsc",
|
||||||
|
"simple-pm-bus";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0 0 0x20000000>;
|
||||||
|
reg = <0xfec10000 0x400>;
|
||||||
|
interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&zb_clk>;
|
||||||
|
power-domains = <&pd_a4s>;
|
||||||
|
};
|
|
@ -0,0 +1,44 @@
|
||||||
|
Simple Power-Managed Bus
|
||||||
|
========================
|
||||||
|
|
||||||
|
A Simple Power-Managed Bus is a transparent bus that doesn't need a real
|
||||||
|
driver, as it's typically initialized by the boot loader.
|
||||||
|
|
||||||
|
However, its bus controller is part of a PM domain, or under the control of a
|
||||||
|
functional clock. Hence, the bus controller's PM domain and/or clock must be
|
||||||
|
enabled for child devices connected to the bus (either on-SoC or externally)
|
||||||
|
to function.
|
||||||
|
|
||||||
|
While "simple-pm-bus" follows the "simple-bus" set of properties, as specified
|
||||||
|
in ePAPR, it is not an extension of "simple-bus".
|
||||||
|
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: Must contain at least "simple-pm-bus".
|
||||||
|
Must not contain "simple-bus".
|
||||||
|
It's recommended to let this be preceded by one or more
|
||||||
|
vendor-specific compatible values.
|
||||||
|
- #address-cells, #size-cells, ranges: Must describe the mapping between
|
||||||
|
parent address and child address spaces.
|
||||||
|
|
||||||
|
Optional platform-specific properties for clock or PM domain control (at least
|
||||||
|
one of them is required):
|
||||||
|
- clocks: Must contain a reference to the functional clock(s),
|
||||||
|
- power-domains: Must contain a reference to the PM domain.
|
||||||
|
Please refer to the binding documentation for the clock and/or PM domain
|
||||||
|
providers for more details.
|
||||||
|
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
bsc: bus@fec10000 {
|
||||||
|
compatible = "renesas,bsc-sh73a0", "renesas,bsc",
|
||||||
|
"simple-pm-bus";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0 0 0x20000000>;
|
||||||
|
reg = <0xfec10000 0x400>;
|
||||||
|
interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&zb_clk>;
|
||||||
|
power-domains = <&pd_a4s>;
|
||||||
|
};
|
|
@ -0,0 +1,25 @@
|
||||||
|
* Renesas R8A7778 Clock Pulse Generator (CPG)
|
||||||
|
|
||||||
|
The CPG generates core clocks for the R8A7778. It includes two PLLs and
|
||||||
|
several fixed ratio dividers
|
||||||
|
|
||||||
|
Required Properties:
|
||||||
|
|
||||||
|
- compatible: Must be "renesas,r8a7778-cpg-clocks"
|
||||||
|
- reg: Base address and length of the memory resource used by the CPG
|
||||||
|
- #clock-cells: Must be 1
|
||||||
|
- clock-output-names: The names of the clocks. Supported clocks are
|
||||||
|
"plla", "pllb", "b", "out", "p", "s", and "s1".
|
||||||
|
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
|
||||||
|
cpg_clocks: cpg_clocks@ffc80000 {
|
||||||
|
compatible = "renesas,r8a7778-cpg-clocks";
|
||||||
|
reg = <0xffc80000 0x80>;
|
||||||
|
#clock-cells = <1>;
|
||||||
|
clocks = <&extal_clk>;
|
||||||
|
clock-output-names = "plla", "pllb", "b",
|
||||||
|
"out", "p", "s", "s1";
|
||||||
|
};
|
|
@ -77,6 +77,7 @@ nxp,pca9556 Octal SMBus and I2C registered interface
|
||||||
nxp,pca9557 8-bit I2C-bus and SMBus I/O port with reset
|
nxp,pca9557 8-bit I2C-bus and SMBus I/O port with reset
|
||||||
nxp,pcf8563 Real-time clock/calendar
|
nxp,pcf8563 Real-time clock/calendar
|
||||||
nxp,pcf85063 Tiny Real-Time Clock
|
nxp,pcf85063 Tiny Real-Time Clock
|
||||||
|
oki,ml86v7667 OKI ML86V7667 video decoder
|
||||||
ovti,ov5642 OV5642: Color CMOS QSXGA (5-megapixel) Image Sensor with OmniBSI and Embedded TrueFocus
|
ovti,ov5642 OV5642: Color CMOS QSXGA (5-megapixel) Image Sensor with OmniBSI and Embedded TrueFocus
|
||||||
pericom,pt7c4338 Real-time Clock Module
|
pericom,pt7c4338 Real-time Clock Module
|
||||||
plx,pex8648 48-Lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch
|
plx,pex8648 48-Lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch
|
||||||
|
|
|
@ -477,6 +477,7 @@ dtb-$(CONFIG_ARCH_SHMOBILE_MULTI) += \
|
||||||
r7s72100-genmai.dtb \
|
r7s72100-genmai.dtb \
|
||||||
r8a73a4-ape6evm.dtb \
|
r8a73a4-ape6evm.dtb \
|
||||||
r8a7740-armadillo800eva.dtb \
|
r8a7740-armadillo800eva.dtb \
|
||||||
|
r8a7778-bockw.dtb \
|
||||||
r8a7779-marzen.dtb \
|
r8a7779-marzen.dtb \
|
||||||
r8a7790-lager.dtb \
|
r8a7790-lager.dtb \
|
||||||
r8a7791-henninger.dtb \
|
r8a7791-henninger.dtb \
|
||||||
|
|
|
@ -16,17 +16,191 @@
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "r8a7778.dtsi"
|
#include "r8a7778.dtsi"
|
||||||
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "bockw";
|
model = "bockw";
|
||||||
compatible = "renesas,bockw", "renesas,r8a7778";
|
compatible = "renesas,bockw", "renesas,r8a7778";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &scif0;
|
||||||
|
};
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
bootargs = "console=ttySC0,115200 ignore_loglevel ip=dhcp root=/dev/nfs rw";
|
bootargs = "console=ttySC0,115200 ignore_loglevel ip=dhcp root=/dev/nfs rw";
|
||||||
|
stdout-path = &scif0;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
device_type = "memory";
|
device_type = "memory";
|
||||||
reg = <0x60000000 0x10000000>;
|
reg = <0x60000000 0x10000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fixedregulator3v3: fixedregulator@0 {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "fixed-3.3V";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
sound {
|
||||||
|
compatible = "simple-audio-card";
|
||||||
|
|
||||||
|
simple-audio-card,format = "left_j";
|
||||||
|
simple-audio-card,bitclock-master = <&sndcodec>;
|
||||||
|
simple-audio-card,frame-master = <&sndcodec>;
|
||||||
|
|
||||||
|
sndcpu: simple-audio-card,cpu {
|
||||||
|
sound-dai = <&rcar_sound>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sndcodec: simple-audio-card,codec {
|
||||||
|
sound-dai = <&ak4643>;
|
||||||
|
system-clock-frequency = <11289600>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&bsc {
|
||||||
|
ethernet@18300000 {
|
||||||
|
compatible = "smsc,lan9220", "smsc,lan9115";
|
||||||
|
reg = <0x18300000 0x1000>;
|
||||||
|
|
||||||
|
phy-mode = "mii";
|
||||||
|
interrupt-parent = <&irqpin>;
|
||||||
|
interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
|
||||||
|
reg-io-width = <4>;
|
||||||
|
vddvario-supply = <&fixedregulator3v3>;
|
||||||
|
vdd33a-supply = <&fixedregulator3v3>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&extal_clk {
|
||||||
|
clock-frequency = <33333333>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
ak4643: sound-codec@12 {
|
||||||
|
compatible = "asahi-kasei,ak4643";
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
reg = <0x12>;
|
||||||
|
};
|
||||||
|
|
||||||
|
camera@41 {
|
||||||
|
compatible = "oki,ml86v7667";
|
||||||
|
reg = <0x41>;
|
||||||
|
};
|
||||||
|
|
||||||
|
camera@43 {
|
||||||
|
compatible = "oki,ml86v7667";
|
||||||
|
reg = <0x43>;
|
||||||
|
};
|
||||||
|
|
||||||
|
rx8581: rtc@51 {
|
||||||
|
compatible = "epson,rx8581";
|
||||||
|
reg = <0x51>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&mmcif {
|
||||||
|
pinctrl-0 = <&mmc_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
|
||||||
|
vmmc-supply = <&fixedregulator3v3>;
|
||||||
|
bus-width = <8>;
|
||||||
|
broken-cd;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&irqpin {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&tmu0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pfc {
|
||||||
|
scif0_pins: serial0 {
|
||||||
|
renesas,groups = "scif0_data_a", "scif0_ctrl";
|
||||||
|
renesas,function = "scif0";
|
||||||
|
};
|
||||||
|
|
||||||
|
mmc_pins: mmc {
|
||||||
|
renesas,groups = "mmc_data8", "mmc_ctrl";
|
||||||
|
renesas,function = "mmc";
|
||||||
|
};
|
||||||
|
|
||||||
|
sdhi0_pins: sd0 {
|
||||||
|
renesas,groups = "sdhi0_data4", "sdhi0_ctrl",
|
||||||
|
"sdhi0_cd";
|
||||||
|
renesas,function = "sdhi0";
|
||||||
|
};
|
||||||
|
|
||||||
|
hspi0_pins: hspi0 {
|
||||||
|
renesas,groups = "hspi0_a";
|
||||||
|
renesas,function = "hspi0";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb0_pins: usb0 {
|
||||||
|
renesas,groups = "usb0";
|
||||||
|
renesas,function = "usb0";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb1_pins: usb1 {
|
||||||
|
renesas,groups = "usb1";
|
||||||
|
renesas,function = "usb1";
|
||||||
|
};
|
||||||
|
|
||||||
|
vin0_pins: vin0 {
|
||||||
|
renesas,groups = "vin0_data8", "vin0_clk";
|
||||||
|
renesas,function = "vin0";
|
||||||
|
};
|
||||||
|
|
||||||
|
vin1_pins: vin1 {
|
||||||
|
renesas,groups = "vin1_data8", "vin1_clk";
|
||||||
|
renesas,function = "vin1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhi0 {
|
||||||
|
pinctrl-0 = <&sdhi0_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
|
||||||
|
vmmc-supply = <&fixedregulator3v3>;
|
||||||
|
bus-width = <4>;
|
||||||
|
status = "okay";
|
||||||
|
wp-gpios = <&gpio3 18 GPIO_ACTIVE_HIGH>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&hspi0 {
|
||||||
|
pinctrl-0 = <&hspi0_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
flash: flash@0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "spansion,s25fl008k";
|
||||||
|
reg = <0>;
|
||||||
|
spi-max-frequency = <104000000>;
|
||||||
|
m25p,fast-read;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "data(spi)";
|
||||||
|
reg = <0x00000000 0x00100000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&scif0 {
|
||||||
|
pinctrl-0 = <&scif0_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
|
||||||
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
|
|
||||||
|
#include <dt-bindings/clock/r8a7778-clock.h>
|
||||||
#include <dt-bindings/interrupt-controller/irq.h>
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
|
@ -40,6 +41,24 @@
|
||||||
spi2 = &hspi2;
|
spi2 = &hspi2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bsc: bus@1c000000 {
|
||||||
|
compatible = "simple-bus";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges = <0 0 0x1c000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ether: ethernet@fde00000 {
|
||||||
|
compatible = "renesas,ether-r8a7778";
|
||||||
|
reg = <0xfde00000 0x400>;
|
||||||
|
interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp1_clks R8A7778_CLK_ETHER>;
|
||||||
|
phy-mode = "rmii";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
gic: interrupt-controller@fe438000 {
|
gic: interrupt-controller@fe438000 {
|
||||||
compatible = "arm,cortex-a9-gic";
|
compatible = "arm,cortex-a9-gic";
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
|
@ -132,6 +151,7 @@
|
||||||
compatible = "renesas,i2c-r8a7778";
|
compatible = "renesas,i2c-r8a7778";
|
||||||
reg = <0xffc70000 0x1000>;
|
reg = <0xffc70000 0x1000>;
|
||||||
interrupts = <0 67 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 67 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_I2C0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -141,6 +161,7 @@
|
||||||
compatible = "renesas,i2c-r8a7778";
|
compatible = "renesas,i2c-r8a7778";
|
||||||
reg = <0xffc71000 0x1000>;
|
reg = <0xffc71000 0x1000>;
|
||||||
interrupts = <0 78 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 78 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_I2C1>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -150,6 +171,7 @@
|
||||||
compatible = "renesas,i2c-r8a7778";
|
compatible = "renesas,i2c-r8a7778";
|
||||||
reg = <0xffc72000 0x1000>;
|
reg = <0xffc72000 0x1000>;
|
||||||
interrupts = <0 76 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 76 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_I2C2>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -159,6 +181,7 @@
|
||||||
compatible = "renesas,i2c-r8a7778";
|
compatible = "renesas,i2c-r8a7778";
|
||||||
reg = <0xffc73000 0x1000>;
|
reg = <0xffc73000 0x1000>;
|
||||||
interrupts = <0 77 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 77 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_I2C3>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -168,6 +191,8 @@
|
||||||
interrupts = <0 32 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <0 32 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<0 33 IRQ_TYPE_LEVEL_HIGH>,
|
<0 33 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<0 34 IRQ_TYPE_LEVEL_HIGH>;
|
<0 34 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_TMU0>;
|
||||||
|
clock-names = "fck";
|
||||||
|
|
||||||
#renesas,channels = <3>;
|
#renesas,channels = <3>;
|
||||||
|
|
||||||
|
@ -180,6 +205,8 @@
|
||||||
interrupts = <0 36 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <0 36 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<0 37 IRQ_TYPE_LEVEL_HIGH>,
|
<0 37 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<0 38 IRQ_TYPE_LEVEL_HIGH>;
|
<0 38 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_TMU1>;
|
||||||
|
clock-names = "fck";
|
||||||
|
|
||||||
#renesas,channels = <3>;
|
#renesas,channels = <3>;
|
||||||
|
|
||||||
|
@ -192,16 +219,75 @@
|
||||||
interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<0 41 IRQ_TYPE_LEVEL_HIGH>,
|
<0 41 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<0 42 IRQ_TYPE_LEVEL_HIGH>;
|
<0 42 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_TMU2>;
|
||||||
|
clock-names = "fck";
|
||||||
|
|
||||||
#renesas,channels = <3>;
|
#renesas,channels = <3>;
|
||||||
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
rcar_sound: sound@ffd90000 {
|
||||||
|
#sound-dai-cells = <1>;
|
||||||
|
compatible = "renesas,rcar_sound-r8a7778", "renesas,rcar_sound-gen1";
|
||||||
|
reg = <0xffd90000 0x1000>, /* SRU */
|
||||||
|
<0xffd91000 0x1240>, /* SSI */
|
||||||
|
<0xfffe0000 0x24>; /* ADG */
|
||||||
|
clocks = <&mstp3_clks R8A7778_CLK_SSI8>,
|
||||||
|
<&mstp3_clks R8A7778_CLK_SSI7>,
|
||||||
|
<&mstp3_clks R8A7778_CLK_SSI6>,
|
||||||
|
<&mstp3_clks R8A7778_CLK_SSI5>,
|
||||||
|
<&mstp3_clks R8A7778_CLK_SSI4>,
|
||||||
|
<&mstp0_clks R8A7778_CLK_SSI3>,
|
||||||
|
<&mstp0_clks R8A7778_CLK_SSI2>,
|
||||||
|
<&mstp0_clks R8A7778_CLK_SSI1>,
|
||||||
|
<&mstp0_clks R8A7778_CLK_SSI0>,
|
||||||
|
<&mstp5_clks R8A7778_CLK_SRU_SRC8>,
|
||||||
|
<&mstp5_clks R8A7778_CLK_SRU_SRC7>,
|
||||||
|
<&mstp5_clks R8A7778_CLK_SRU_SRC6>,
|
||||||
|
<&mstp5_clks R8A7778_CLK_SRU_SRC5>,
|
||||||
|
<&mstp5_clks R8A7778_CLK_SRU_SRC4>,
|
||||||
|
<&mstp5_clks R8A7778_CLK_SRU_SRC3>,
|
||||||
|
<&mstp5_clks R8A7778_CLK_SRU_SRC2>,
|
||||||
|
<&mstp5_clks R8A7778_CLK_SRU_SRC1>,
|
||||||
|
<&mstp5_clks R8A7778_CLK_SRU_SRC0>,
|
||||||
|
<&audio_clk_a>, <&audio_clk_b>, <&audio_clk_c>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_S1>;
|
||||||
|
clock-names = "ssi.8", "ssi.7", "ssi.6", "ssi.5", "ssi.4",
|
||||||
|
"ssi.3", "ssi.2", "ssi.1", "ssi.0",
|
||||||
|
"src.8", "src.7", "src.6", "src.5", "src.4",
|
||||||
|
"src.3", "src.2", "src.1", "src.0",
|
||||||
|
"clk_a", "clk_b", "clk_c", "clk_i";
|
||||||
|
|
||||||
|
status = "disabled";
|
||||||
|
|
||||||
|
rcar_sound,src {
|
||||||
|
src3: src@3 { };
|
||||||
|
src4: src@4 { };
|
||||||
|
src5: src@5 { };
|
||||||
|
src6: src@6 { };
|
||||||
|
src7: src@7 { };
|
||||||
|
src8: src@8 { };
|
||||||
|
src9: src@9 { };
|
||||||
|
};
|
||||||
|
|
||||||
|
rcar_sound,ssi {
|
||||||
|
ssi3: ssi@3 { interrupts = <0 0x85 IRQ_TYPE_LEVEL_HIGH>; };
|
||||||
|
ssi4: ssi@4 { interrupts = <0 0x85 IRQ_TYPE_LEVEL_HIGH>; };
|
||||||
|
ssi5: ssi@5 { interrupts = <0 0x86 IRQ_TYPE_LEVEL_HIGH>; };
|
||||||
|
ssi6: ssi@6 { interrupts = <0 0x86 IRQ_TYPE_LEVEL_HIGH>; };
|
||||||
|
ssi7: ssi@7 { interrupts = <0 0x86 IRQ_TYPE_LEVEL_HIGH>; };
|
||||||
|
ssi8: ssi@8 { interrupts = <0 0x86 IRQ_TYPE_LEVEL_HIGH>; };
|
||||||
|
ssi9: ssi@9 { interrupts = <0 0x86 IRQ_TYPE_LEVEL_HIGH>; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
scif0: serial@ffe40000 {
|
scif0: serial@ffe40000 {
|
||||||
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
||||||
reg = <0xffe40000 0x100>;
|
reg = <0xffe40000 0x100>;
|
||||||
interrupts = <0 70 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 70 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_SCIF0>;
|
||||||
|
clock-names = "sci_ick";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -209,6 +295,8 @@
|
||||||
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
||||||
reg = <0xffe41000 0x100>;
|
reg = <0xffe41000 0x100>;
|
||||||
interrupts = <0 71 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_SCIF1>;
|
||||||
|
clock-names = "sci_ick";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -216,6 +304,8 @@
|
||||||
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
||||||
reg = <0xffe42000 0x100>;
|
reg = <0xffe42000 0x100>;
|
||||||
interrupts = <0 72 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 72 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_SCIF2>;
|
||||||
|
clock-names = "sci_ick";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -223,6 +313,8 @@
|
||||||
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
||||||
reg = <0xffe43000 0x100>;
|
reg = <0xffe43000 0x100>;
|
||||||
interrupts = <0 73 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 73 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_SCIF3>;
|
||||||
|
clock-names = "sci_ick";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -230,6 +322,8 @@
|
||||||
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
||||||
reg = <0xffe44000 0x100>;
|
reg = <0xffe44000 0x100>;
|
||||||
interrupts = <0 74 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 74 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_SCIF4>;
|
||||||
|
clock-names = "sci_ick";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -237,6 +331,8 @@
|
||||||
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
compatible = "renesas,scif-r8a7778", "renesas,scif";
|
||||||
reg = <0xffe45000 0x100>;
|
reg = <0xffe45000 0x100>;
|
||||||
interrupts = <0 75 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 75 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_SCIF5>;
|
||||||
|
clock-names = "sci_ick";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -244,6 +340,7 @@
|
||||||
compatible = "renesas,sh-mmcif";
|
compatible = "renesas,sh-mmcif";
|
||||||
reg = <0xffe4e000 0x100>;
|
reg = <0xffe4e000 0x100>;
|
||||||
interrupts = <0 61 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 61 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp3_clks R8A7778_CLK_MMC>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -251,6 +348,7 @@
|
||||||
compatible = "renesas,sdhi-r8a7778";
|
compatible = "renesas,sdhi-r8a7778";
|
||||||
reg = <0xffe4c000 0x100>;
|
reg = <0xffe4c000 0x100>;
|
||||||
interrupts = <0 87 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 87 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp3_clks R8A7778_CLK_SDHI0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -258,6 +356,7 @@
|
||||||
compatible = "renesas,sdhi-r8a7778";
|
compatible = "renesas,sdhi-r8a7778";
|
||||||
reg = <0xffe4d000 0x100>;
|
reg = <0xffe4d000 0x100>;
|
||||||
interrupts = <0 88 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 88 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp3_clks R8A7778_CLK_SDHI1>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -265,6 +364,7 @@
|
||||||
compatible = "renesas,sdhi-r8a7778";
|
compatible = "renesas,sdhi-r8a7778";
|
||||||
reg = <0xffe4f000 0x100>;
|
reg = <0xffe4f000 0x100>;
|
||||||
interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp3_clks R8A7778_CLK_SDHI2>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -272,6 +372,7 @@
|
||||||
compatible = "renesas,hspi-r8a7778", "renesas,hspi";
|
compatible = "renesas,hspi-r8a7778", "renesas,hspi";
|
||||||
reg = <0xfffc7000 0x18>;
|
reg = <0xfffc7000 0x18>;
|
||||||
interrupts = <0 63 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_HSPI>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -281,6 +382,7 @@
|
||||||
compatible = "renesas,hspi-r8a7778", "renesas,hspi";
|
compatible = "renesas,hspi-r8a7778", "renesas,hspi";
|
||||||
reg = <0xfffc8000 0x18>;
|
reg = <0xfffc8000 0x18>;
|
||||||
interrupts = <0 84 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 84 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_HSPI>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -290,8 +392,199 @@
|
||||||
compatible = "renesas,hspi-r8a7778", "renesas,hspi";
|
compatible = "renesas,hspi-r8a7778", "renesas,hspi";
|
||||||
reg = <0xfffc6000 0x18>;
|
reg = <0xfffc6000 0x18>;
|
||||||
interrupts = <0 85 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 85 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&mstp0_clks R8A7778_CLK_HSPI>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
clocks {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
ranges;
|
||||||
|
|
||||||
|
/* External input clock */
|
||||||
|
extal_clk: extal_clk {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
clock-output-names = "extal";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Special CPG clocks */
|
||||||
|
cpg_clocks: cpg_clocks@ffc80000 {
|
||||||
|
compatible = "renesas,r8a7778-cpg-clocks";
|
||||||
|
reg = <0xffc80000 0x80>;
|
||||||
|
#clock-cells = <1>;
|
||||||
|
clocks = <&extal_clk>;
|
||||||
|
clock-output-names = "plla", "pllb", "b",
|
||||||
|
"out", "p", "s", "s1";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Audio clocks; frequencies are set by boards if applicable. */
|
||||||
|
audio_clk_a: audio_clk_a {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "audio_clk_a";
|
||||||
|
};
|
||||||
|
audio_clk_b: audio_clk_b {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "audio_clk_b";
|
||||||
|
};
|
||||||
|
audio_clk_c: audio_clk_c {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "audio_clk_c";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Fixed ratio clocks */
|
||||||
|
g_clk: g_clk {
|
||||||
|
compatible = "fixed-factor-clock";
|
||||||
|
clocks = <&cpg_clocks R8A7778_CLK_PLLA>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-div = <12>;
|
||||||
|
clock-mult = <1>;
|
||||||
|
clock-output-names = "g";
|
||||||
|
};
|
||||||
|
i_clk: i_clk {
|
||||||
|
compatible = "fixed-factor-clock";
|
||||||
|
clocks = <&cpg_clocks R8A7778_CLK_PLLA>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-div = <1>;
|
||||||
|
clock-mult = <1>;
|
||||||
|
clock-output-names = "i";
|
||||||
|
};
|
||||||
|
s3_clk: s3_clk {
|
||||||
|
compatible = "fixed-factor-clock";
|
||||||
|
clocks = <&cpg_clocks R8A7778_CLK_PLLA>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-div = <4>;
|
||||||
|
clock-mult = <1>;
|
||||||
|
clock-output-names = "s3";
|
||||||
|
};
|
||||||
|
s4_clk: s4_clk {
|
||||||
|
compatible = "fixed-factor-clock";
|
||||||
|
clocks = <&cpg_clocks R8A7778_CLK_PLLA>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-div = <8>;
|
||||||
|
clock-mult = <1>;
|
||||||
|
clock-output-names = "s4";
|
||||||
|
};
|
||||||
|
z_clk: z_clk {
|
||||||
|
compatible = "fixed-factor-clock";
|
||||||
|
clocks = <&cpg_clocks R8A7778_CLK_PLLB>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-div = <1>;
|
||||||
|
clock-mult = <1>;
|
||||||
|
clock-output-names = "z";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Gate clocks */
|
||||||
|
mstp0_clks: mstp0_clks@ffc80030 {
|
||||||
|
compatible = "renesas,r8a7778-mstp-clocks", "renesas,cpg-mstp-clocks";
|
||||||
|
reg = <0xffc80030 4>;
|
||||||
|
clocks = <&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_S>;
|
||||||
|
#clock-cells = <1>;
|
||||||
|
clock-indices = <
|
||||||
|
R8A7778_CLK_I2C0 R8A7778_CLK_I2C1
|
||||||
|
R8A7778_CLK_I2C2 R8A7778_CLK_I2C3
|
||||||
|
R8A7778_CLK_SCIF0 R8A7778_CLK_SCIF1
|
||||||
|
R8A7778_CLK_SCIF2 R8A7778_CLK_SCIF3
|
||||||
|
R8A7778_CLK_SCIF4 R8A7778_CLK_SCIF5
|
||||||
|
R8A7778_CLK_TMU0 R8A7778_CLK_TMU1
|
||||||
|
R8A7778_CLK_TMU2 R8A7778_CLK_SSI0
|
||||||
|
R8A7778_CLK_SSI1 R8A7778_CLK_SSI2
|
||||||
|
R8A7778_CLK_SSI3 R8A7778_CLK_SRU
|
||||||
|
R8A7778_CLK_HSPI
|
||||||
|
>;
|
||||||
|
clock-output-names =
|
||||||
|
"i2c0", "i2c1", "i2c2", "i2c3", "scif0",
|
||||||
|
"scif1", "scif2", "scif3", "scif4", "scif5",
|
||||||
|
"tmu0", "tmu1", "tmu2", "ssi0", "ssi1",
|
||||||
|
"ssi2", "ssi3", "sru", "hspi";
|
||||||
|
};
|
||||||
|
mstp1_clks: mstp1_clks@ffc80034 {
|
||||||
|
compatible = "renesas,r8a7778-mstp-clocks", "renesas,cpg-mstp-clocks";
|
||||||
|
reg = <0xffc80034 4>, <0xffc80044 4>;
|
||||||
|
clocks = <&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_S>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_S>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>;
|
||||||
|
#clock-cells = <1>;
|
||||||
|
clock-indices = <
|
||||||
|
R8A7778_CLK_ETHER R8A7778_CLK_VIN0
|
||||||
|
R8A7778_CLK_VIN1 R8A7778_CLK_USB
|
||||||
|
>;
|
||||||
|
clock-output-names =
|
||||||
|
"ether", "vin0", "vin1", "usb";
|
||||||
|
};
|
||||||
|
mstp3_clks: mstp3_clks@ffc8003c {
|
||||||
|
compatible = "renesas,r8a7778-mstp-clocks", "renesas,cpg-mstp-clocks";
|
||||||
|
reg = <0xffc8003c 4>;
|
||||||
|
clocks = <&s4_clk>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>;
|
||||||
|
#clock-cells = <1>;
|
||||||
|
clock-indices = <
|
||||||
|
R8A7778_CLK_MMC R8A7778_CLK_SDHI0
|
||||||
|
R8A7778_CLK_SDHI1 R8A7778_CLK_SDHI2
|
||||||
|
R8A7778_CLK_SSI4 R8A7778_CLK_SSI5
|
||||||
|
R8A7778_CLK_SSI6 R8A7778_CLK_SSI7
|
||||||
|
R8A7778_CLK_SSI8
|
||||||
|
>;
|
||||||
|
clock-output-names =
|
||||||
|
"mmc", "sdhi0", "sdhi1", "sdhi2", "ssi4",
|
||||||
|
"ssi5", "ssi6", "ssi7", "ssi8";
|
||||||
|
};
|
||||||
|
mstp5_clks: mstp5_clks@ffc80054 {
|
||||||
|
compatible = "renesas,r8a7778-mstp-clocks", "renesas,cpg-mstp-clocks";
|
||||||
|
reg = <0xffc80054 4>;
|
||||||
|
clocks = <&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>,
|
||||||
|
<&cpg_clocks R8A7778_CLK_P>;
|
||||||
|
#clock-cells = <1>;
|
||||||
|
clock-indices = <
|
||||||
|
R8A7778_CLK_SRU_SRC0 R8A7778_CLK_SRU_SRC1
|
||||||
|
R8A7778_CLK_SRU_SRC2 R8A7778_CLK_SRU_SRC3
|
||||||
|
R8A7778_CLK_SRU_SRC4 R8A7778_CLK_SRU_SRC5
|
||||||
|
R8A7778_CLK_SRU_SRC6 R8A7778_CLK_SRU_SRC7
|
||||||
|
R8A7778_CLK_SRU_SRC8
|
||||||
|
>;
|
||||||
|
clock-output-names =
|
||||||
|
"sru-src0", "sru-src1", "sru-src2",
|
||||||
|
"sru-src3", "sru-src4", "sru-src5",
|
||||||
|
"sru-src6", "sru-src7", "sru-src8";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -62,6 +62,10 @@ config ARCH_R8A7740
|
||||||
select ARCH_RMOBILE
|
select ARCH_RMOBILE
|
||||||
select RENESAS_INTC_IRQPIN
|
select RENESAS_INTC_IRQPIN
|
||||||
|
|
||||||
|
config ARCH_R8A7778
|
||||||
|
bool "R-Car M1A (R8A77781)"
|
||||||
|
select ARCH_RCAR_GEN1
|
||||||
|
|
||||||
config ARCH_R8A7779
|
config ARCH_R8A7779
|
||||||
bool "R-Car H1 (R8A77790)"
|
bool "R-Car H1 (R8A77790)"
|
||||||
select ARCH_RCAR_GEN1
|
select ARCH_RCAR_GEN1
|
||||||
|
|
|
@ -36,7 +36,9 @@ static void __init bockw_init(void)
|
||||||
void __iomem *fpga;
|
void __iomem *fpga;
|
||||||
void __iomem *pfc;
|
void __iomem *pfc;
|
||||||
|
|
||||||
|
#ifndef CONFIG_COMMON_CLK
|
||||||
r8a7778_clock_init();
|
r8a7778_clock_init();
|
||||||
|
#endif
|
||||||
r8a7778_init_irq_extpin_dt(1);
|
r8a7778_init_irq_extpin_dt(1);
|
||||||
r8a7778_add_dt_devices();
|
r8a7778_add_dt_devices();
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/clk/shmobile.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/irqchip/arm-gic.h>
|
#include <linux/irqchip/arm-gic.h>
|
||||||
|
@ -41,6 +42,21 @@
|
||||||
#include "irqs.h"
|
#include "irqs.h"
|
||||||
#include "r8a7778.h"
|
#include "r8a7778.h"
|
||||||
|
|
||||||
|
#define MODEMR 0xffcc0020
|
||||||
|
|
||||||
|
#ifdef CONFIG_COMMON_CLK
|
||||||
|
static void __init r8a7778_timer_init(void)
|
||||||
|
{
|
||||||
|
u32 mode;
|
||||||
|
void __iomem *modemr = ioremap_nocache(MODEMR, 4);
|
||||||
|
|
||||||
|
BUG_ON(!modemr);
|
||||||
|
mode = ioread32(modemr);
|
||||||
|
iounmap(modemr);
|
||||||
|
r8a7778_clocks_init(mode);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* SCIF */
|
/* SCIF */
|
||||||
#define R8A7778_SCIF(index, baseaddr, irq) \
|
#define R8A7778_SCIF(index, baseaddr, irq) \
|
||||||
static struct plat_sci_port scif##index##_platform_data = { \
|
static struct plat_sci_port scif##index##_platform_data = { \
|
||||||
|
@ -608,6 +624,9 @@ DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)")
|
||||||
.init_early = shmobile_init_delay,
|
.init_early = shmobile_init_delay,
|
||||||
.init_irq = r8a7778_init_irq_dt,
|
.init_irq = r8a7778_init_irq_dt,
|
||||||
.init_late = shmobile_init_late,
|
.init_late = shmobile_init_late,
|
||||||
|
#ifdef CONFIG_COMMON_CLK
|
||||||
|
.init_time = r8a7778_timer_init,
|
||||||
|
#endif
|
||||||
.dt_compat = r8a7778_compat_dt,
|
.dt_compat = r8a7778_compat_dt,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,21 @@
|
||||||
|
|
||||||
menu "Bus devices"
|
menu "Bus devices"
|
||||||
|
|
||||||
|
config ARM_CCI
|
||||||
|
bool "ARM CCI driver support"
|
||||||
|
depends on ARM && OF && CPU_V7
|
||||||
|
help
|
||||||
|
Driver supporting the CCI cache coherent interconnect for ARM
|
||||||
|
platforms.
|
||||||
|
|
||||||
|
config ARM_CCN
|
||||||
|
bool "ARM CCN driver support"
|
||||||
|
depends on ARM || ARM64
|
||||||
|
depends on PERF_EVENTS
|
||||||
|
help
|
||||||
|
PMU (perf) driver supporting the ARM CCN (Cache Coherent Network)
|
||||||
|
interconnect.
|
||||||
|
|
||||||
config BRCMSTB_GISB_ARB
|
config BRCMSTB_GISB_ARB
|
||||||
bool "Broadcom STB GISB bus arbiter"
|
bool "Broadcom STB GISB bus arbiter"
|
||||||
depends on ARM || MIPS
|
depends on ARM || MIPS
|
||||||
|
@ -27,6 +42,13 @@ config MVEBU_MBUS
|
||||||
Driver needed for the MBus configuration on Marvell EBU SoCs
|
Driver needed for the MBus configuration on Marvell EBU SoCs
|
||||||
(Kirkwood, Dove, Orion5x, MV78XX0 and Armada 370/XP).
|
(Kirkwood, Dove, Orion5x, MV78XX0 and Armada 370/XP).
|
||||||
|
|
||||||
|
config OMAP_INTERCONNECT
|
||||||
|
tristate "OMAP INTERCONNECT DRIVER"
|
||||||
|
depends on ARCH_OMAP2PLUS
|
||||||
|
|
||||||
|
help
|
||||||
|
Driver to enable OMAP interconnect error handling driver.
|
||||||
|
|
||||||
config OMAP_OCP2SCP
|
config OMAP_OCP2SCP
|
||||||
tristate "OMAP OCP2SCP DRIVER"
|
tristate "OMAP OCP2SCP DRIVER"
|
||||||
depends on ARCH_OMAP2PLUS
|
depends on ARCH_OMAP2PLUS
|
||||||
|
@ -36,27 +58,18 @@ config OMAP_OCP2SCP
|
||||||
OCP2SCP and in OMAP5, both USB PHY and SATA PHY is connected via
|
OCP2SCP and in OMAP5, both USB PHY and SATA PHY is connected via
|
||||||
OCP2SCP.
|
OCP2SCP.
|
||||||
|
|
||||||
config OMAP_INTERCONNECT
|
config SIMPLE_PM_BUS
|
||||||
tristate "OMAP INTERCONNECT DRIVER"
|
bool "Simple Power-Managed Bus Driver"
|
||||||
depends on ARCH_OMAP2PLUS
|
depends on OF && PM
|
||||||
|
depends on ARCH_SHMOBILE || COMPILE_TEST
|
||||||
help
|
help
|
||||||
Driver to enable OMAP interconnect error handling driver.
|
Driver for transparent busses that don't need a real driver, but
|
||||||
|
where the bus controller is part of a PM domain, or under the control
|
||||||
config ARM_CCI
|
of a functional clock, and thus relies on runtime PM for managing
|
||||||
bool "ARM CCI driver support"
|
this PM domain and/or clock.
|
||||||
depends on ARM && OF && CPU_V7
|
An example of such a bus controller is the Renesas Bus State
|
||||||
help
|
Controller (BSC, sometimes called "LBSC within Bus Bridge", or
|
||||||
Driver supporting the CCI cache coherent interconnect for ARM
|
"External Bus Interface") as found on several Renesas ARM SoCs.
|
||||||
platforms.
|
|
||||||
|
|
||||||
config ARM_CCN
|
|
||||||
bool "ARM CCN driver support"
|
|
||||||
depends on ARM || ARM64
|
|
||||||
depends on PERF_EVENTS
|
|
||||||
help
|
|
||||||
PMU (perf) driver supporting the ARM CCN (Cache Coherent Network)
|
|
||||||
interconnect.
|
|
||||||
|
|
||||||
config VEXPRESS_CONFIG
|
config VEXPRESS_CONFIG
|
||||||
bool "Versatile Express configuration bus"
|
bool "Versatile Express configuration bus"
|
||||||
|
|
|
@ -2,16 +2,17 @@
|
||||||
# Makefile for the bus drivers.
|
# Makefile for the bus drivers.
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-$(CONFIG_BRCMSTB_GISB_ARB) += brcmstb_gisb.o
|
|
||||||
obj-$(CONFIG_IMX_WEIM) += imx-weim.o
|
|
||||||
obj-$(CONFIG_MVEBU_MBUS) += mvebu-mbus.o
|
|
||||||
obj-$(CONFIG_OMAP_OCP2SCP) += omap-ocp2scp.o
|
|
||||||
|
|
||||||
# Interconnect bus driver for OMAP SoCs.
|
|
||||||
obj-$(CONFIG_OMAP_INTERCONNECT) += omap_l3_smx.o omap_l3_noc.o
|
|
||||||
|
|
||||||
# Interconnect bus drivers for ARM platforms
|
# Interconnect bus drivers for ARM platforms
|
||||||
obj-$(CONFIG_ARM_CCI) += arm-cci.o
|
obj-$(CONFIG_ARM_CCI) += arm-cci.o
|
||||||
obj-$(CONFIG_ARM_CCN) += arm-ccn.o
|
obj-$(CONFIG_ARM_CCN) += arm-ccn.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_BRCMSTB_GISB_ARB) += brcmstb_gisb.o
|
||||||
|
obj-$(CONFIG_IMX_WEIM) += imx-weim.o
|
||||||
|
obj-$(CONFIG_MVEBU_MBUS) += mvebu-mbus.o
|
||||||
|
|
||||||
|
# Interconnect bus driver for OMAP SoCs.
|
||||||
|
obj-$(CONFIG_OMAP_INTERCONNECT) += omap_l3_smx.o omap_l3_noc.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_OMAP_OCP2SCP) += omap-ocp2scp.o
|
||||||
|
obj-$(CONFIG_SIMPLE_PM_BUS) += simple-pm-bus.o
|
||||||
obj-$(CONFIG_VEXPRESS_CONFIG) += vexpress-config.o
|
obj-$(CONFIG_VEXPRESS_CONFIG) += vexpress-config.o
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Simple Power-Managed Bus Driver
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014-2015 Glider bvba
|
||||||
|
*
|
||||||
|
* This file is subject to the terms and conditions of the GNU General Public
|
||||||
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
|
* for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/of_platform.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/pm_runtime.h>
|
||||||
|
|
||||||
|
|
||||||
|
static int simple_pm_bus_probe(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct device_node *np = pdev->dev.of_node;
|
||||||
|
|
||||||
|
dev_dbg(&pdev->dev, "%s\n", __func__);
|
||||||
|
|
||||||
|
pm_runtime_enable(&pdev->dev);
|
||||||
|
|
||||||
|
if (np)
|
||||||
|
of_platform_populate(np, NULL, NULL, &pdev->dev);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int simple_pm_bus_remove(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
dev_dbg(&pdev->dev, "%s\n", __func__);
|
||||||
|
|
||||||
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct of_device_id simple_pm_bus_of_match[] = {
|
||||||
|
{ .compatible = "simple-pm-bus", },
|
||||||
|
{ /* sentinel */ }
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(of, simple_pm_bus_of_match);
|
||||||
|
|
||||||
|
static struct platform_driver simple_pm_bus_driver = {
|
||||||
|
.probe = simple_pm_bus_probe,
|
||||||
|
.remove = simple_pm_bus_remove,
|
||||||
|
.driver = {
|
||||||
|
.name = "simple-pm-bus",
|
||||||
|
.of_match_table = simple_pm_bus_of_match,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
module_platform_driver(simple_pm_bus_driver);
|
||||||
|
|
||||||
|
MODULE_DESCRIPTION("Simple Power-Managed Bus Driver");
|
||||||
|
MODULE_AUTHOR("Geert Uytterhoeven <geert+renesas@glider.be>");
|
||||||
|
MODULE_LICENSE("GPL v2");
|
|
@ -2,6 +2,7 @@ obj-$(CONFIG_ARCH_EMEV2) += clk-emev2.o
|
||||||
obj-$(CONFIG_ARCH_R7S72100) += clk-rz.o
|
obj-$(CONFIG_ARCH_R7S72100) += clk-rz.o
|
||||||
obj-$(CONFIG_ARCH_R8A73A4) += clk-r8a73a4.o
|
obj-$(CONFIG_ARCH_R8A73A4) += clk-r8a73a4.o
|
||||||
obj-$(CONFIG_ARCH_R8A7740) += clk-r8a7740.o
|
obj-$(CONFIG_ARCH_R8A7740) += clk-r8a7740.o
|
||||||
|
obj-$(CONFIG_ARCH_R8A7778) += clk-r8a7778.o
|
||||||
obj-$(CONFIG_ARCH_R8A7779) += clk-r8a7779.o
|
obj-$(CONFIG_ARCH_R8A7779) += clk-r8a7779.o
|
||||||
obj-$(CONFIG_ARCH_R8A7790) += clk-rcar-gen2.o
|
obj-$(CONFIG_ARCH_R8A7790) += clk-rcar-gen2.o
|
||||||
obj-$(CONFIG_ARCH_R8A7791) += clk-rcar-gen2.o
|
obj-$(CONFIG_ARCH_R8A7791) += clk-rcar-gen2.o
|
||||||
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
/*
|
||||||
|
* r8a7778 Core CPG Clocks
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Ulrich Hecht
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/clk-provider.h>
|
||||||
|
#include <linux/clkdev.h>
|
||||||
|
#include <linux/clk/shmobile.h>
|
||||||
|
#include <linux/of_address.h>
|
||||||
|
|
||||||
|
struct r8a7778_cpg {
|
||||||
|
struct clk_onecell_data data;
|
||||||
|
spinlock_t lock;
|
||||||
|
void __iomem *reg;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* PLL multipliers per bits 11, 12, and 18 of MODEMR */
|
||||||
|
struct {
|
||||||
|
unsigned long plla_mult;
|
||||||
|
unsigned long pllb_mult;
|
||||||
|
} r8a7778_rates[] __initdata = {
|
||||||
|
[0] = { 21, 21 },
|
||||||
|
[1] = { 24, 24 },
|
||||||
|
[2] = { 28, 28 },
|
||||||
|
[3] = { 32, 32 },
|
||||||
|
[5] = { 24, 21 },
|
||||||
|
[6] = { 28, 21 },
|
||||||
|
[7] = { 32, 24 },
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Clock dividers per bits 1 and 2 of MODEMR */
|
||||||
|
struct {
|
||||||
|
const char *name;
|
||||||
|
unsigned int div[4];
|
||||||
|
} r8a7778_divs[6] __initdata = {
|
||||||
|
{ "b", { 12, 12, 16, 18 } },
|
||||||
|
{ "out", { 12, 12, 16, 18 } },
|
||||||
|
{ "p", { 16, 12, 16, 12 } },
|
||||||
|
{ "s", { 4, 3, 4, 3 } },
|
||||||
|
{ "s1", { 8, 6, 8, 6 } },
|
||||||
|
};
|
||||||
|
|
||||||
|
static u32 cpg_mode_rates __initdata;
|
||||||
|
static u32 cpg_mode_divs __initdata;
|
||||||
|
|
||||||
|
static struct clk * __init
|
||||||
|
r8a7778_cpg_register_clock(struct device_node *np, struct r8a7778_cpg *cpg,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
if (!strcmp(name, "plla")) {
|
||||||
|
return clk_register_fixed_factor(NULL, "plla",
|
||||||
|
of_clk_get_parent_name(np, 0), 0,
|
||||||
|
r8a7778_rates[cpg_mode_rates].plla_mult, 1);
|
||||||
|
} else if (!strcmp(name, "pllb")) {
|
||||||
|
return clk_register_fixed_factor(NULL, "pllb",
|
||||||
|
of_clk_get_parent_name(np, 0), 0,
|
||||||
|
r8a7778_rates[cpg_mode_rates].pllb_mult, 1);
|
||||||
|
} else {
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(r8a7778_divs); i++) {
|
||||||
|
if (!strcmp(name, r8a7778_divs[i].name)) {
|
||||||
|
return clk_register_fixed_factor(NULL,
|
||||||
|
r8a7778_divs[i].name,
|
||||||
|
"plla", 0, 1,
|
||||||
|
r8a7778_divs[i].div[cpg_mode_divs]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERR_PTR(-EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void __init r8a7778_cpg_clocks_init(struct device_node *np)
|
||||||
|
{
|
||||||
|
struct r8a7778_cpg *cpg;
|
||||||
|
struct clk **clks;
|
||||||
|
unsigned int i;
|
||||||
|
int num_clks;
|
||||||
|
|
||||||
|
num_clks = of_property_count_strings(np, "clock-output-names");
|
||||||
|
if (num_clks < 0) {
|
||||||
|
pr_err("%s: failed to count clocks\n", __func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cpg = kzalloc(sizeof(*cpg), GFP_KERNEL);
|
||||||
|
clks = kcalloc(num_clks, sizeof(*clks), GFP_KERNEL);
|
||||||
|
if (cpg == NULL || clks == NULL) {
|
||||||
|
/* We're leaking memory on purpose, there's no point in cleaning
|
||||||
|
* up as the system won't boot anyway.
|
||||||
|
*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
spin_lock_init(&cpg->lock);
|
||||||
|
|
||||||
|
cpg->data.clks = clks;
|
||||||
|
cpg->data.clk_num = num_clks;
|
||||||
|
|
||||||
|
cpg->reg = of_iomap(np, 0);
|
||||||
|
if (WARN_ON(cpg->reg == NULL))
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < num_clks; ++i) {
|
||||||
|
const char *name;
|
||||||
|
struct clk *clk;
|
||||||
|
|
||||||
|
of_property_read_string_index(np, "clock-output-names", i,
|
||||||
|
&name);
|
||||||
|
|
||||||
|
clk = r8a7778_cpg_register_clock(np, cpg, name);
|
||||||
|
if (IS_ERR(clk))
|
||||||
|
pr_err("%s: failed to register %s %s clock (%ld)\n",
|
||||||
|
__func__, np->name, name, PTR_ERR(clk));
|
||||||
|
else
|
||||||
|
cpg->data.clks[i] = clk;
|
||||||
|
}
|
||||||
|
|
||||||
|
of_clk_add_provider(np, of_clk_src_onecell_get, &cpg->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
CLK_OF_DECLARE(r8a7778_cpg_clks, "renesas,r8a7778-cpg-clocks",
|
||||||
|
r8a7778_cpg_clocks_init);
|
||||||
|
|
||||||
|
void __init r8a7778_clocks_init(u32 mode)
|
||||||
|
{
|
||||||
|
BUG_ON(!(mode & BIT(19)));
|
||||||
|
|
||||||
|
cpg_mode_rates = (!!(mode & BIT(18)) << 2) |
|
||||||
|
(!!(mode & BIT(12)) << 1) |
|
||||||
|
(!!(mode & BIT(11)));
|
||||||
|
cpg_mode_divs = (!!(mode & BIT(2)) << 1) |
|
||||||
|
(!!(mode & BIT(1)));
|
||||||
|
|
||||||
|
of_clk_init(NULL);
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Ulrich Hecht
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __DT_BINDINGS_CLOCK_R8A7778_H__
|
||||||
|
#define __DT_BINDINGS_CLOCK_R8A7778_H__
|
||||||
|
|
||||||
|
/* CPG */
|
||||||
|
#define R8A7778_CLK_PLLA 0
|
||||||
|
#define R8A7778_CLK_PLLB 1
|
||||||
|
#define R8A7778_CLK_B 2
|
||||||
|
#define R8A7778_CLK_OUT 3
|
||||||
|
#define R8A7778_CLK_P 4
|
||||||
|
#define R8A7778_CLK_S 5
|
||||||
|
#define R8A7778_CLK_S1 6
|
||||||
|
|
||||||
|
/* MSTP0 */
|
||||||
|
#define R8A7778_CLK_I2C0 30
|
||||||
|
#define R8A7778_CLK_I2C1 29
|
||||||
|
#define R8A7778_CLK_I2C2 28
|
||||||
|
#define R8A7778_CLK_I2C3 27
|
||||||
|
#define R8A7778_CLK_SCIF0 26
|
||||||
|
#define R8A7778_CLK_SCIF1 25
|
||||||
|
#define R8A7778_CLK_SCIF2 24
|
||||||
|
#define R8A7778_CLK_SCIF3 23
|
||||||
|
#define R8A7778_CLK_SCIF4 22
|
||||||
|
#define R8A7778_CLK_SCIF5 21
|
||||||
|
#define R8A7778_CLK_TMU0 16
|
||||||
|
#define R8A7778_CLK_TMU1 15
|
||||||
|
#define R8A7778_CLK_TMU2 14
|
||||||
|
#define R8A7778_CLK_SSI0 12
|
||||||
|
#define R8A7778_CLK_SSI1 11
|
||||||
|
#define R8A7778_CLK_SSI2 10
|
||||||
|
#define R8A7778_CLK_SSI3 9
|
||||||
|
#define R8A7778_CLK_SRU 8
|
||||||
|
#define R8A7778_CLK_HSPI 7
|
||||||
|
|
||||||
|
/* MSTP1 */
|
||||||
|
#define R8A7778_CLK_ETHER 14
|
||||||
|
#define R8A7778_CLK_VIN0 10
|
||||||
|
#define R8A7778_CLK_VIN1 9
|
||||||
|
#define R8A7778_CLK_USB 0
|
||||||
|
|
||||||
|
/* MSTP3 */
|
||||||
|
#define R8A7778_CLK_MMC 31
|
||||||
|
#define R8A7778_CLK_SDHI0 23
|
||||||
|
#define R8A7778_CLK_SDHI1 22
|
||||||
|
#define R8A7778_CLK_SDHI2 21
|
||||||
|
#define R8A7778_CLK_SSI4 11
|
||||||
|
#define R8A7778_CLK_SSI5 10
|
||||||
|
#define R8A7778_CLK_SSI6 9
|
||||||
|
#define R8A7778_CLK_SSI7 8
|
||||||
|
#define R8A7778_CLK_SSI8 7
|
||||||
|
|
||||||
|
/* MSTP5 */
|
||||||
|
#define R8A7778_CLK_SRU_SRC0 31
|
||||||
|
#define R8A7778_CLK_SRU_SRC1 30
|
||||||
|
#define R8A7778_CLK_SRU_SRC2 29
|
||||||
|
#define R8A7778_CLK_SRU_SRC3 28
|
||||||
|
#define R8A7778_CLK_SRU_SRC4 27
|
||||||
|
#define R8A7778_CLK_SRU_SRC5 26
|
||||||
|
#define R8A7778_CLK_SRU_SRC6 25
|
||||||
|
#define R8A7778_CLK_SRU_SRC7 24
|
||||||
|
#define R8A7778_CLK_SRU_SRC8 23
|
||||||
|
|
||||||
|
#endif /* __DT_BINDINGS_CLOCK_R8A7778_H__ */
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
void r8a7778_clocks_init(u32 mode);
|
||||||
void r8a7779_clocks_init(u32 mode);
|
void r8a7779_clocks_init(u32 mode);
|
||||||
void rcar_gen2_clocks_init(u32 mode);
|
void rcar_gen2_clocks_init(u32 mode);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче