mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
Merge branch 'master' of git://git.denx.de/u-boot-sh
This commit is contained in:
commit
040b2583c3
36 changed files with 2844 additions and 34 deletions
|
@ -440,6 +440,7 @@ dtb-$(CONFIG_RCAR_GEN3) += \
|
|||
r8a7796-salvator-x.dtb \
|
||||
r8a77965-salvator-x.dtb \
|
||||
r8a77970-eagle.dtb \
|
||||
r8a77990-ebisu.dtb \
|
||||
r8a77995-draak.dtb
|
||||
|
||||
dtb-$(CONFIG_SOC_KEYSTONE) += keystone-k2hk-evm.dtb \
|
||||
|
|
9
arch/arm/dts/r8a77990-ebisu-u-boot.dts
Normal file
9
arch/arm/dts/r8a77990-ebisu-u-boot.dts
Normal file
|
@ -0,0 +1,9 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Device Tree Source extras for U-Boot for the Ebisu board
|
||||
*
|
||||
* Copyright (C) 2018 Marek Vasut <marek.vasut@gmail.com>
|
||||
*/
|
||||
|
||||
#include "r8a77990-ebisu.dts"
|
||||
#include "r8a77990-u-boot.dtsi"
|
65
arch/arm/dts/r8a77990-ebisu.dts
Normal file
65
arch/arm/dts/r8a77990-ebisu.dts
Normal file
|
@ -0,0 +1,65 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Device Tree Source for the ebisu board
|
||||
*
|
||||
* Copyright (C) 2018 Renesas Electronics Corp.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "r8a77990.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
/ {
|
||||
model = "Renesas Ebisu board based on r8a77990";
|
||||
compatible = "renesas,ebisu", "renesas,r8a77990";
|
||||
|
||||
aliases {
|
||||
serial0 = &scif2;
|
||||
ethernet0 = &avb;
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "ignore_loglevel";
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
memory@48000000 {
|
||||
device_type = "memory";
|
||||
/* first 128MB is reserved for secure area. */
|
||||
reg = <0x0 0x48000000 0x0 0x38000000>;
|
||||
};
|
||||
};
|
||||
|
||||
&avb {
|
||||
pinctrl-0 = <&avb_pins>;
|
||||
pinctrl-names = "default";
|
||||
renesas,no-ether-link;
|
||||
phy-handle = <&phy0>;
|
||||
phy-mode = "rgmii-txid";
|
||||
status = "okay";
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
rxc-skew-ps = <1500>;
|
||||
reg = <0>;
|
||||
interrupt-parent = <&gpio2>;
|
||||
interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
|
||||
reset-gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
&extal_clk {
|
||||
clock-frequency = <48000000>;
|
||||
};
|
||||
|
||||
&pfc {
|
||||
avb_pins: avb {
|
||||
mux {
|
||||
groups = "avb_link", "avb_mii";
|
||||
function = "avb";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&scif2 {
|
||||
status = "okay";
|
||||
};
|
8
arch/arm/dts/r8a77990-u-boot.dtsi
Normal file
8
arch/arm/dts/r8a77990-u-boot.dtsi
Normal file
|
@ -0,0 +1,8 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Device Tree Source extras for U-Boot on RCar R8A77990 SoC
|
||||
*
|
||||
* Copyright (C) 2018 Marek Vasut <marek.vasut@gmail.com>
|
||||
*/
|
||||
|
||||
#include "r8a779x-u-boot.dtsi"
|
281
arch/arm/dts/r8a77990.dtsi
Normal file
281
arch/arm/dts/r8a77990.dtsi
Normal file
|
@ -0,0 +1,281 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Device Tree Source for the r8a77990 SoC
|
||||
*
|
||||
* Copyright (C) 2018 Renesas Electronics Corp.
|
||||
*/
|
||||
|
||||
#include <dt-bindings/clock/renesas-cpg-mssr.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
/ {
|
||||
compatible = "renesas,r8a77990";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
/* 1 core only at this point */
|
||||
a53_0: cpu@0 {
|
||||
compatible = "arm,cortex-a53", "arm,armv8";
|
||||
reg = <0x0>;
|
||||
device_type = "cpu";
|
||||
power-domains = <&sysc 5>;
|
||||
next-level-cache = <&L2_CA53>;
|
||||
enable-method = "psci";
|
||||
};
|
||||
|
||||
L2_CA53: cache-controller-0 {
|
||||
compatible = "cache";
|
||||
power-domains = <&sysc 21>;
|
||||
cache-unified;
|
||||
cache-level = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
extal_clk: extal {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
/* This value must be overridden by the board */
|
||||
clock-frequency = <0>;
|
||||
};
|
||||
|
||||
pmu_a53 {
|
||||
compatible = "arm,cortex-a53-pmu";
|
||||
interrupts-extended = <&gic GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-affinity = <&a53_0>;
|
||||
};
|
||||
|
||||
psci {
|
||||
compatible = "arm,psci-1.0", "arm,psci-0.2";
|
||||
method = "smc";
|
||||
};
|
||||
|
||||
soc: soc {
|
||||
compatible = "simple-bus";
|
||||
interrupt-parent = <&gic>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
gpio0: gpio@e6050000 {
|
||||
compatible = "renesas,gpio-r8a77990",
|
||||
"renesas,rcar-gen3-gpio";
|
||||
reg = <0 0xe6050000 0 0x50>;
|
||||
interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 0 18>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 912>;
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 912>;
|
||||
};
|
||||
|
||||
gpio1: gpio@e6051000 {
|
||||
compatible = "renesas,gpio-r8a77990",
|
||||
"renesas,rcar-gen3-gpio";
|
||||
reg = <0 0xe6051000 0 0x50>;
|
||||
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 32 23>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 911>;
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 911>;
|
||||
};
|
||||
|
||||
gpio2: gpio@e6052000 {
|
||||
compatible = "renesas,gpio-r8a77990",
|
||||
"renesas,rcar-gen3-gpio";
|
||||
reg = <0 0xe6052000 0 0x50>;
|
||||
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 64 26>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 910>;
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 910>;
|
||||
};
|
||||
|
||||
gpio3: gpio@e6053000 {
|
||||
compatible = "renesas,gpio-r8a77990",
|
||||
"renesas,rcar-gen3-gpio";
|
||||
reg = <0 0xe6053000 0 0x50>;
|
||||
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 96 16>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 909>;
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 909>;
|
||||
};
|
||||
|
||||
gpio4: gpio@e6054000 {
|
||||
compatible = "renesas,gpio-r8a77990",
|
||||
"renesas,rcar-gen3-gpio";
|
||||
reg = <0 0xe6054000 0 0x50>;
|
||||
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 128 11>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 908>;
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 908>;
|
||||
};
|
||||
|
||||
gpio5: gpio@e6055000 {
|
||||
compatible = "renesas,gpio-r8a77990",
|
||||
"renesas,rcar-gen3-gpio";
|
||||
reg = <0 0xe6055000 0 0x50>;
|
||||
interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 160 20>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 907>;
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 907>;
|
||||
};
|
||||
|
||||
gpio6: gpio@e6055400 {
|
||||
compatible = "renesas,gpio-r8a77990",
|
||||
"renesas,rcar-gen3-gpio";
|
||||
reg = <0 0xe6055400 0 0x50>;
|
||||
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 192 18>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
clocks = <&cpg CPG_MOD 906>;
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 906>;
|
||||
};
|
||||
|
||||
pfc: pin-controller@e6060000 {
|
||||
compatible = "renesas,pfc-r8a77990";
|
||||
reg = <0 0xe6060000 0 0x508>;
|
||||
};
|
||||
|
||||
cpg: clock-controller@e6150000 {
|
||||
compatible = "renesas,r8a77990-cpg-mssr";
|
||||
reg = <0 0xe6150000 0 0x1000>;
|
||||
clocks = <&extal_clk>;
|
||||
clock-names = "extal";
|
||||
#clock-cells = <2>;
|
||||
#power-domain-cells = <0>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
rst: reset-controller@e6160000 {
|
||||
compatible = "renesas,r8a77990-rst";
|
||||
reg = <0 0xe6160000 0 0x0200>;
|
||||
};
|
||||
|
||||
sysc: system-controller@e6180000 {
|
||||
compatible = "renesas,r8a77990-sysc";
|
||||
reg = <0 0xe6180000 0 0x0400>;
|
||||
#power-domain-cells = <1>;
|
||||
};
|
||||
|
||||
avb: ethernet@e6800000 {
|
||||
compatible = "renesas,etheravb-r8a77990",
|
||||
"renesas,etheravb-rcar-gen3";
|
||||
reg = <0 0xe6800000 0 0x800>, <0 0xe6a00000 0 0x10000>;
|
||||
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "ch0", "ch1", "ch2", "ch3",
|
||||
"ch4", "ch5", "ch6", "ch7",
|
||||
"ch8", "ch9", "ch10", "ch11",
|
||||
"ch12", "ch13", "ch14", "ch15",
|
||||
"ch16", "ch17", "ch18", "ch19",
|
||||
"ch20", "ch21", "ch22", "ch23",
|
||||
"ch24";
|
||||
clocks = <&cpg CPG_MOD 812>;
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 812>;
|
||||
phy-mode = "rgmii";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
scif2: serial@e6e88000 {
|
||||
compatible = "renesas,scif-r8a77990",
|
||||
"renesas,rcar-gen3-scif", "renesas,scif";
|
||||
reg = <0 0xe6e88000 0 64>;
|
||||
interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 310>;
|
||||
clock-names = "fck";
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 310>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gic: interrupt-controller@f1010000 {
|
||||
compatible = "arm,gic-400";
|
||||
#interrupt-cells = <3>;
|
||||
#address-cells = <0>;
|
||||
interrupt-controller;
|
||||
reg = <0x0 0xf1010000 0 0x1000>,
|
||||
<0x0 0xf1020000 0 0x20000>,
|
||||
<0x0 0xf1040000 0 0x20000>,
|
||||
<0x0 0xf1060000 0 0x20000>;
|
||||
interrupts = <GIC_PPI 9
|
||||
(GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
|
||||
clocks = <&cpg CPG_MOD 408>;
|
||||
clock-names = "clk";
|
||||
power-domains = <&sysc 32>;
|
||||
resets = <&cpg 408>;
|
||||
};
|
||||
|
||||
prr: chipid@fff00044 {
|
||||
compatible = "renesas,prr";
|
||||
reg = <0 0xfff00044 0 4>;
|
||||
};
|
||||
};
|
||||
|
||||
timer {
|
||||
compatible = "arm,armv8-timer";
|
||||
interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
<&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
<&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
|
||||
<&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>;
|
||||
};
|
||||
};
|
|
@ -12,6 +12,9 @@ config R8A7796
|
|||
config R8A77970
|
||||
bool "Renesas SoC R8A77970"
|
||||
|
||||
config R8A77990
|
||||
bool "Renesas SoC R8A77990"
|
||||
|
||||
config R8A77995
|
||||
bool "Renesas SoC R8A77995"
|
||||
|
||||
|
@ -31,6 +34,11 @@ config TARGET_EAGLE
|
|||
help
|
||||
Support for Renesas R-Car Gen3 Eagle platform
|
||||
|
||||
config TARGET_EBISU
|
||||
bool "Ebisu board"
|
||||
help
|
||||
Support for Renesas R-Car Gen3 Ebisu platform
|
||||
|
||||
config TARGET_SALVATOR_X
|
||||
bool "Salvator-X board"
|
||||
help
|
||||
|
@ -48,6 +56,7 @@ config SYS_SOC
|
|||
|
||||
source "board/renesas/draak/Kconfig"
|
||||
source "board/renesas/eagle/Kconfig"
|
||||
source "board/renesas/ebisu/Kconfig"
|
||||
source "board/renesas/salvator-x/Kconfig"
|
||||
source "board/renesas/ulcb/Kconfig"
|
||||
|
||||
|
|
|
@ -59,6 +59,7 @@ static const struct {
|
|||
{ RMOBILE_CPU_TYPE_R8A7796, "R8A7796" },
|
||||
{ RMOBILE_CPU_TYPE_R8A77965, "R8A77965" },
|
||||
{ RMOBILE_CPU_TYPE_R8A77970, "R8A77970" },
|
||||
{ RMOBILE_CPU_TYPE_R8A77990, "R8A77990" },
|
||||
{ RMOBILE_CPU_TYPE_R8A77995, "R8A77995" },
|
||||
{ 0x0, "CPU" },
|
||||
};
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#define RMOBILE_CPU_TYPE_R8A7796 0x52
|
||||
#define RMOBILE_CPU_TYPE_R8A77965 0x55
|
||||
#define RMOBILE_CPU_TYPE_R8A77970 0x54
|
||||
#define RMOBILE_CPU_TYPE_R8A77990 0x57
|
||||
#define RMOBILE_CPU_TYPE_R8A77995 0x58
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
|
15
board/renesas/ebisu/Kconfig
Normal file
15
board/renesas/ebisu/Kconfig
Normal file
|
@ -0,0 +1,15 @@
|
|||
if TARGET_EBISU
|
||||
|
||||
config SYS_SOC
|
||||
default "rmobile"
|
||||
|
||||
config SYS_BOARD
|
||||
default "ebisu"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "renesas"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "ebisu"
|
||||
|
||||
endif
|
6
board/renesas/ebisu/MAINTAINERS
Normal file
6
board/renesas/ebisu/MAINTAINERS
Normal file
|
@ -0,0 +1,6 @@
|
|||
EBISU BOARD
|
||||
M: Marek Vasut <marek.vasut+renesas@gmail.com>
|
||||
S: Maintained
|
||||
F: board/renesas/ebisu/
|
||||
F: include/configs/ebisu.h
|
||||
F: configs/r8a77990_ebisu_defconfig
|
9
board/renesas/ebisu/Makefile
Normal file
9
board/renesas/ebisu/Makefile
Normal file
|
@ -0,0 +1,9 @@
|
|||
#
|
||||
# board/renesas/ebisu/Makefile
|
||||
#
|
||||
# Copyright (C) 2018 Renesas Electronics Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := ebisu.o
|
86
board/renesas/ebisu/ebisu.c
Normal file
86
board/renesas/ebisu/ebisu.c
Normal file
|
@ -0,0 +1,86 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* board/renesas/ebisu/ebisu.c
|
||||
* This file is Ebisu board support.
|
||||
*
|
||||
* Copyright (C) 2018 Marek Vasut <marek.vasut+renesas@gmail.com>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <malloc.h>
|
||||
#include <netdev.h>
|
||||
#include <dm.h>
|
||||
#include <dm/platform_data/serial_sh.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/errno.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/rmobile.h>
|
||||
#include <asm/arch/rcar-mstp.h>
|
||||
#include <asm/arch/sh_sdhi.h>
|
||||
#include <i2c.h>
|
||||
#include <mmc.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
void s_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
#define TMU0_MSTP125 BIT(25) /* secure */
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
/* TMU0 */
|
||||
mstp_clrbits_le32(MSTPSR1, SMSTPCR1, TMU0_MSTP125);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* adress of boot parameters */
|
||||
gd->bd->bi_boot_params = CONFIG_SYS_TEXT_BASE + 0x50000;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dram_init(void)
|
||||
{
|
||||
if (fdtdec_setup_memory_size() != 0)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dram_init_banksize(void)
|
||||
{
|
||||
fdtdec_setup_memory_banksize();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define RST_BASE 0xE6160000
|
||||
#define RST_CA57RESCNT (RST_BASE + 0x40)
|
||||
#define RST_CA53RESCNT (RST_BASE + 0x44)
|
||||
#define RST_RSTOUTCR (RST_BASE + 0x58)
|
||||
#define RST_CA57_CODE 0xA5A5000F
|
||||
#define RST_CA53_CODE 0x5A5A000F
|
||||
|
||||
void reset_cpu(ulong addr)
|
||||
{
|
||||
unsigned long midr, cputype;
|
||||
|
||||
asm volatile("mrs %0, midr_el1" : "=r" (midr));
|
||||
cputype = (midr >> 4) & 0xfff;
|
||||
|
||||
if (cputype == 0xd03)
|
||||
writel(RST_CA53_CODE, RST_CA53RESCNT);
|
||||
else if (cputype == 0xd07)
|
||||
writel(RST_CA57_CODE, RST_CA57RESCNT);
|
||||
else
|
||||
hang();
|
||||
}
|
|
@ -46,6 +46,9 @@ CONFIG_CMD_EXT2=y
|
|||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=spi0.0:256k(u-boot-spl),512k(u-boot-env1),512k(u-boot-env2),768k(u-boot),-(user)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_OF_EMBED=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
|
@ -58,9 +61,11 @@ CONFIG_SYS_I2C_RCAR_IIC=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_SH_MMCIF=y
|
||||
CONFIG_RENESAS_SDHI=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_BAR=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_SH_ETHER=y
|
||||
|
|
|
@ -46,6 +46,9 @@ CONFIG_CMD_EXT2=y
|
|||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=spi0.0:256k(u-boot-spl),512k(u-boot-env1),512k(u-boot-env2),768k(u-boot),-(user)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_OF_EMBED=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
|
@ -57,9 +60,11 @@ CONFIG_DM_I2C=y
|
|||
CONFIG_SYS_I2C_RCAR_IIC=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_RENESAS_SDHI=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_BAR=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_SH_ETHER=y
|
||||
|
|
|
@ -46,6 +46,9 @@ CONFIG_CMD_EXT2=y
|
|||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=spi0.0:256k(u-boot-spl),512k(u-boot-env1),512k(u-boot-env2),768k(u-boot),-(user)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_OF_EMBED=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
|
@ -57,9 +60,11 @@ CONFIG_DM_I2C=y
|
|||
CONFIG_SYS_I2C_RCAR_IIC=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_RENESAS_SDHI=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_BAR=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_SH_ETHER=y
|
||||
|
|
|
@ -46,6 +46,9 @@ CONFIG_CMD_EXT2=y
|
|||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=spi0.0:256k(u-boot-spl),512k(u-boot-env1),512k(u-boot-env2),768k(u-boot),-(user)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_OF_EMBED=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
|
@ -59,9 +62,11 @@ CONFIG_SYS_I2C_RCAR_IIC=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_SH_MMCIF=y
|
||||
CONFIG_RENESAS_SDHI=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_BAR=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_SH_ETHER=y
|
||||
|
|
|
@ -46,6 +46,9 @@ CONFIG_CMD_EXT2=y
|
|||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=spi0.0:256k(u-boot-spl),512k(u-boot-env1),512k(u-boot-env2),768k(u-boot),-(user)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_OF_EMBED=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
|
@ -57,9 +60,11 @@ CONFIG_DM_I2C=y
|
|||
CONFIG_SYS_I2C_RCAR_IIC=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_RENESAS_SDHI=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_BAR=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_SH_ETHER=y
|
||||
|
|
64
configs/r8a77990_ebisu_defconfig
Normal file
64
configs/r8a77990_ebisu_defconfig
Normal file
|
@ -0,0 +1,64 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_RMOBILE=y
|
||||
CONFIG_SYS_TEXT_BASE=0x50000000
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
||||
CONFIG_RCAR_GEN3=y
|
||||
CONFIG_R8A77990=y
|
||||
CONFIG_TARGET_EBISU=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="r8a77990-ebisu-u-boot"
|
||||
CONFIG_SMBIOS_PRODUCT_NAME=""
|
||||
CONFIG_FIT=y
|
||||
# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttySC0,115200"
|
||||
CONFIG_SUPPORT_RAW_INITRD=y
|
||||
CONFIG_DEFAULT_FDT_FILE="r8a77990-ebisu.dtb"
|
||||
CONFIG_VERSION_VARIABLE=y
|
||||
CONFIG_HUSH_PARSER=y
|
||||
CONFIG_CMD_BOOTZ=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_DHCP=y
|
||||
CONFIG_CMD_MII=y
|
||||
CONFIG_CMD_PING=y
|
||||
CONFIG_CMD_EXT2=y
|
||||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_FS_GENERIC=y
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_ENV_IS_IN_MMC=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_CLK=y
|
||||
CONFIG_CLK_RENESAS=y
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_RCAR_GPIO=y
|
||||
CONFIG_DM_I2C=y
|
||||
CONFIG_SYS_I2C_RCAR_IIC=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_MMC_IO_VOLTAGE=y
|
||||
CONFIG_MMC_UHS_SUPPORT=y
|
||||
CONFIG_MMC_HS200_SUPPORT=y
|
||||
CONFIG_RENESAS_SDHI=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_PHY_MICREL_KSZ90X1=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_RENESAS_RAVB=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCONF=y
|
||||
CONFIG_PINCTRL_PFC=y
|
||||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_SCIF_CONSOLE=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_DM_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_GENERIC=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
CONFIG_SMBIOS_MANUFACTURER=""
|
|
@ -46,6 +46,9 @@ CONFIG_CMD_EXT2=y
|
|||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=spi0.0:256k(u-boot-spl),512k(u-boot-env1),512k(u-boot-env2),768k(u-boot),-(user)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_OF_EMBED=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
|
@ -59,9 +62,11 @@ CONFIG_SYS_I2C_RCAR_IIC=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_SH_MMCIF=y
|
||||
CONFIG_RENESAS_SDHI=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_BAR=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_SH_ETHER=y
|
||||
|
|
|
@ -46,6 +46,9 @@ CONFIG_CMD_EXT2=y
|
|||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=spi0.0:256k(u-boot-spl),512k(u-boot-env1),512k(u-boot-env2),768k(u-boot),-(user)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_OF_EMBED=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
|
@ -57,9 +60,11 @@ CONFIG_DM_I2C=y
|
|||
CONFIG_SYS_I2C_RCAR_IIC=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_RENESAS_SDHI=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_BAR=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_SH_ETHER=y
|
||||
|
|
|
@ -74,6 +74,13 @@ config CLK_R8A77970
|
|||
help
|
||||
Enable this to support the clocks on Renesas R8A77970 SoC.
|
||||
|
||||
config CLK_R8A77990
|
||||
bool "Renesas R8A77990 clock driver"
|
||||
def_bool y if R8A77990
|
||||
depends on CLK_RCAR_GEN3
|
||||
help
|
||||
Enable this to support the clocks on Renesas R8A77990 SoC.
|
||||
|
||||
config CLK_R8A77995
|
||||
bool "Renesas R8A77995 clock driver"
|
||||
def_bool y if R8A77995
|
||||
|
|
|
@ -9,4 +9,5 @@ obj-$(CONFIG_CLK_RCAR_GEN3) += clk-rcar-gen3.o
|
|||
obj-$(CONFIG_CLK_R8A7795) += r8a7795-cpg-mssr.o
|
||||
obj-$(CONFIG_CLK_R8A7796) += r8a7796-cpg-mssr.o
|
||||
obj-$(CONFIG_CLK_R8A77970) += r8a77970-cpg-mssr.o
|
||||
obj-$(CONFIG_CLK_R8A77990) += r8a77990-cpg-mssr.o
|
||||
obj-$(CONFIG_CLK_R8A77995) += r8a77995-cpg-mssr.o
|
||||
|
|
|
@ -85,6 +85,28 @@ static const struct sd_div_table cpg_sd_div_table[] = {
|
|||
CPG_SD_DIV_TABLE_DATA(1, 0, 4, 0, 32),
|
||||
};
|
||||
|
||||
static int gen3_clk_get_parent(struct gen3_clk_priv *priv, struct clk *clk,
|
||||
struct cpg_mssr_info *info, struct clk *parent)
|
||||
{
|
||||
const struct cpg_core_clk *core;
|
||||
int ret;
|
||||
|
||||
if (!renesas_clk_is_mod(clk)) {
|
||||
ret = renesas_clk_get_core(clk, info, &core);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (core->type == CLK_TYPE_GEN3_PE) {
|
||||
parent->dev = clk->dev;
|
||||
parent->id = core->parent >> (priv->sscg ? 16 : 0);
|
||||
parent->id &= 0xffff;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return renesas_clk_get_parent(clk, info, parent);
|
||||
}
|
||||
|
||||
static int gen3_clk_setup_sdif_div(struct clk *clk)
|
||||
{
|
||||
struct gen3_clk_priv *priv = dev_get_priv(clk->dev);
|
||||
|
@ -93,7 +115,7 @@ static int gen3_clk_setup_sdif_div(struct clk *clk)
|
|||
struct clk parent;
|
||||
int ret;
|
||||
|
||||
ret = renesas_clk_get_parent(clk, info, &parent);
|
||||
ret = gen3_clk_get_parent(priv, clk, info, &parent);
|
||||
if (ret) {
|
||||
printf("%s[%i] parent fail, ret=%i\n", __func__, __LINE__, ret);
|
||||
return ret;
|
||||
|
@ -134,7 +156,7 @@ static int gen3_clk_disable(struct clk *clk)
|
|||
return renesas_clk_endisable(clk, priv->base, false);
|
||||
}
|
||||
|
||||
static ulong gen3_clk_get_rate(struct clk *clk)
|
||||
static u64 gen3_clk_get_rate64(struct clk *clk)
|
||||
{
|
||||
struct gen3_clk_priv *priv = dev_get_priv(clk->dev);
|
||||
struct cpg_mssr_info *info = priv->info;
|
||||
|
@ -142,20 +164,21 @@ static ulong gen3_clk_get_rate(struct clk *clk)
|
|||
const struct cpg_core_clk *core;
|
||||
const struct rcar_gen3_cpg_pll_config *pll_config =
|
||||
priv->cpg_pll_config;
|
||||
u32 value, mult, prediv, postdiv, rate = 0;
|
||||
u32 value, mult, div, prediv, postdiv;
|
||||
u64 rate = 0;
|
||||
int i, ret;
|
||||
|
||||
debug("%s[%i] Clock: id=%lu\n", __func__, __LINE__, clk->id);
|
||||
|
||||
ret = renesas_clk_get_parent(clk, info, &parent);
|
||||
ret = gen3_clk_get_parent(priv, clk, info, &parent);
|
||||
if (ret) {
|
||||
printf("%s[%i] parent fail, ret=%i\n", __func__, __LINE__, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (renesas_clk_is_mod(clk)) {
|
||||
rate = gen3_clk_get_rate(&parent);
|
||||
debug("%s[%i] MOD clk: parent=%lu => rate=%u\n",
|
||||
rate = gen3_clk_get_rate64(&parent);
|
||||
debug("%s[%i] MOD clk: parent=%lu => rate=%llu\n",
|
||||
__func__, __LINE__, parent.id, rate);
|
||||
return rate;
|
||||
}
|
||||
|
@ -168,14 +191,14 @@ static ulong gen3_clk_get_rate(struct clk *clk)
|
|||
case CLK_TYPE_IN:
|
||||
if (core->id == info->clk_extal_id) {
|
||||
rate = clk_get_rate(&priv->clk_extal);
|
||||
debug("%s[%i] EXTAL clk: rate=%u\n",
|
||||
debug("%s[%i] EXTAL clk: rate=%llu\n",
|
||||
__func__, __LINE__, rate);
|
||||
return rate;
|
||||
}
|
||||
|
||||
if (core->id == info->clk_extalr_id) {
|
||||
rate = clk_get_rate(&priv->clk_extalr);
|
||||
debug("%s[%i] EXTALR clk: rate=%u\n",
|
||||
debug("%s[%i] EXTALR clk: rate=%llu\n",
|
||||
__func__, __LINE__, rate);
|
||||
return rate;
|
||||
}
|
||||
|
@ -183,8 +206,8 @@ static ulong gen3_clk_get_rate(struct clk *clk)
|
|||
return -EINVAL;
|
||||
|
||||
case CLK_TYPE_GEN3_MAIN:
|
||||
rate = gen3_clk_get_rate(&parent) / pll_config->extal_div;
|
||||
debug("%s[%i] MAIN clk: parent=%i extal_div=%i => rate=%u\n",
|
||||
rate = gen3_clk_get_rate64(&parent) / pll_config->extal_div;
|
||||
debug("%s[%i] MAIN clk: parent=%i extal_div=%i => rate=%llu\n",
|
||||
__func__, __LINE__,
|
||||
core->parent, pll_config->extal_div, rate);
|
||||
return rate;
|
||||
|
@ -192,49 +215,61 @@ static ulong gen3_clk_get_rate(struct clk *clk)
|
|||
case CLK_TYPE_GEN3_PLL0:
|
||||
value = readl(priv->base + CPG_PLL0CR);
|
||||
mult = (((value >> 24) & 0x7f) + 1) * 2;
|
||||
rate = gen3_clk_get_rate(&parent) * mult;
|
||||
debug("%s[%i] PLL0 clk: parent=%i mult=%u => rate=%u\n",
|
||||
rate = gen3_clk_get_rate64(&parent) * mult;
|
||||
debug("%s[%i] PLL0 clk: parent=%i mult=%u => rate=%llu\n",
|
||||
__func__, __LINE__, core->parent, mult, rate);
|
||||
return rate;
|
||||
|
||||
case CLK_TYPE_GEN3_PLL1:
|
||||
rate = gen3_clk_get_rate(&parent) * pll_config->pll1_mult;
|
||||
debug("%s[%i] PLL1 clk: parent=%i mul=%i => rate=%u\n",
|
||||
rate = gen3_clk_get_rate64(&parent) * pll_config->pll1_mult;
|
||||
rate /= pll_config->pll1_div;
|
||||
debug("%s[%i] PLL1 clk: parent=%i mul=%i div=%i => rate=%llu\n",
|
||||
__func__, __LINE__,
|
||||
core->parent, pll_config->pll1_mult, rate);
|
||||
core->parent, pll_config->pll1_mult,
|
||||
pll_config->pll1_div, rate);
|
||||
return rate;
|
||||
|
||||
case CLK_TYPE_GEN3_PLL2:
|
||||
value = readl(priv->base + CPG_PLL2CR);
|
||||
mult = (((value >> 24) & 0x7f) + 1) * 2;
|
||||
rate = gen3_clk_get_rate(&parent) * mult;
|
||||
debug("%s[%i] PLL2 clk: parent=%i mult=%u => rate=%u\n",
|
||||
rate = gen3_clk_get_rate64(&parent) * mult;
|
||||
debug("%s[%i] PLL2 clk: parent=%i mult=%u => rate=%llu\n",
|
||||
__func__, __LINE__, core->parent, mult, rate);
|
||||
return rate;
|
||||
|
||||
case CLK_TYPE_GEN3_PLL3:
|
||||
rate = gen3_clk_get_rate(&parent) * pll_config->pll3_mult;
|
||||
debug("%s[%i] PLL3 clk: parent=%i mul=%i => rate=%u\n",
|
||||
rate = gen3_clk_get_rate64(&parent) * pll_config->pll3_mult;
|
||||
rate /= pll_config->pll3_div;
|
||||
debug("%s[%i] PLL3 clk: parent=%i mul=%i div=%i => rate=%llu\n",
|
||||
__func__, __LINE__,
|
||||
core->parent, pll_config->pll3_mult, rate);
|
||||
core->parent, pll_config->pll3_mult,
|
||||
pll_config->pll3_div, rate);
|
||||
return rate;
|
||||
|
||||
case CLK_TYPE_GEN3_PLL4:
|
||||
value = readl(priv->base + CPG_PLL4CR);
|
||||
mult = (((value >> 24) & 0x7f) + 1) * 2;
|
||||
rate = gen3_clk_get_rate(&parent) * mult;
|
||||
debug("%s[%i] PLL4 clk: parent=%i mult=%u => rate=%u\n",
|
||||
rate = gen3_clk_get_rate64(&parent) * mult;
|
||||
debug("%s[%i] PLL4 clk: parent=%i mult=%u => rate=%llu\n",
|
||||
__func__, __LINE__, core->parent, mult, rate);
|
||||
return rate;
|
||||
|
||||
case CLK_TYPE_FF:
|
||||
case CLK_TYPE_GEN3_PE: /* FIXME */
|
||||
rate = (gen3_clk_get_rate(&parent) * core->mult) / core->div;
|
||||
debug("%s[%i] FIXED clk: parent=%i div=%i mul=%i => rate=%u\n",
|
||||
rate = (gen3_clk_get_rate64(&parent) * core->mult) / core->div;
|
||||
debug("%s[%i] FIXED clk: parent=%i mul=%i div=%i => rate=%llu\n",
|
||||
__func__, __LINE__,
|
||||
core->parent, core->mult, core->div, rate);
|
||||
return rate;
|
||||
|
||||
case CLK_TYPE_GEN3_PE:
|
||||
div = (core->div >> (priv->sscg ? 16 : 0)) & 0xffff;
|
||||
rate = gen3_clk_get_rate64(&parent) / div;
|
||||
debug("%s[%i] PE clk: parent=%i div=%u => rate=%llu\n",
|
||||
__func__, __LINE__,
|
||||
(core->parent >> (priv->sscg ? 16 : 0)) & 0xffff,
|
||||
div, rate);
|
||||
return rate;
|
||||
|
||||
case CLK_TYPE_GEN3_SD: /* FIXME */
|
||||
value = readl(priv->base + core->offset);
|
||||
value &= CPG_SD_STP_MASK | CPG_SD_FC_MASK;
|
||||
|
@ -243,9 +278,9 @@ static ulong gen3_clk_get_rate(struct clk *clk)
|
|||
if (cpg_sd_div_table[i].val != value)
|
||||
continue;
|
||||
|
||||
rate = gen3_clk_get_rate(&parent) /
|
||||
rate = gen3_clk_get_rate64(&parent) /
|
||||
cpg_sd_div_table[i].div;
|
||||
debug("%s[%i] SD clk: parent=%i div=%i => rate=%u\n",
|
||||
debug("%s[%i] SD clk: parent=%i div=%i => rate=%llu\n",
|
||||
__func__, __LINE__,
|
||||
core->parent, cpg_sd_div_table[i].div, rate);
|
||||
|
||||
|
@ -255,7 +290,7 @@ static ulong gen3_clk_get_rate(struct clk *clk)
|
|||
return -EINVAL;
|
||||
|
||||
case CLK_TYPE_GEN3_RPC:
|
||||
rate = gen3_clk_get_rate(&parent);
|
||||
rate = gen3_clk_get_rate64(&parent);
|
||||
|
||||
value = readl(priv->base + core->offset);
|
||||
|
||||
|
@ -272,7 +307,7 @@ static ulong gen3_clk_get_rate(struct clk *clk)
|
|||
CPG_RPC_POSTDIV_MASK;
|
||||
rate /= postdiv + 1;
|
||||
|
||||
debug("%s[%i] RPC clk: parent=%i prediv=%i postdiv=%i => rate=%u\n",
|
||||
debug("%s[%i] RPC clk: parent=%i prediv=%i postdiv=%i => rate=%llu\n",
|
||||
__func__, __LINE__,
|
||||
core->parent, prediv, postdiv, rate);
|
||||
|
||||
|
@ -285,11 +320,16 @@ static ulong gen3_clk_get_rate(struct clk *clk)
|
|||
return -ENOENT;
|
||||
}
|
||||
|
||||
static ulong gen3_clk_get_rate(struct clk *clk)
|
||||
{
|
||||
return gen3_clk_get_rate64(clk);
|
||||
}
|
||||
|
||||
static ulong gen3_clk_set_rate(struct clk *clk, ulong rate)
|
||||
{
|
||||
/* Force correct SD-IF divider configuration if applicable */
|
||||
gen3_clk_setup_sdif_div(clk);
|
||||
return gen3_clk_get_rate(clk);
|
||||
return gen3_clk_get_rate64(clk);
|
||||
}
|
||||
|
||||
static int gen3_clk_of_xlate(struct clk *clk, struct ofnode_phandle_args *args)
|
||||
|
@ -341,6 +381,8 @@ int gen3_clk_probe(struct udevice *dev)
|
|||
if (!priv->cpg_pll_config->extal_div)
|
||||
return -EINVAL;
|
||||
|
||||
priv->sscg = !(cpg_mode & BIT(12));
|
||||
|
||||
ret = clk_get_by_name(dev, "extal", &priv->clk_extal);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
302
drivers/clk/renesas/r8a77990-cpg-mssr.c
Normal file
302
drivers/clk/renesas/r8a77990-cpg-mssr.c
Normal file
|
@ -0,0 +1,302 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Renesas R8A77990 CPG MSSR driver
|
||||
*
|
||||
* Copyright (C) 2017-2018 Marek Vasut <marek.vasut@gmail.com>
|
||||
*
|
||||
* Based on the following driver from Linux kernel:
|
||||
* r8a7796 Clock Pulse Generator / Module Standby and Software Reset
|
||||
*
|
||||
* Copyright (C) 2016 Glider bvba
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <clk-uclass.h>
|
||||
#include <dm.h>
|
||||
|
||||
#include <dt-bindings/clock/r8a77990-cpg-mssr.h>
|
||||
|
||||
#include "renesas-cpg-mssr.h"
|
||||
#include "rcar-gen3-cpg.h"
|
||||
|
||||
enum clk_ids {
|
||||
/* Core Clock Outputs exported to DT */
|
||||
LAST_DT_CORE_CLK = R8A77990_CLK_CPEX,
|
||||
|
||||
/* External Input Clocks */
|
||||
CLK_EXTAL,
|
||||
|
||||
/* Internal Core Clocks */
|
||||
CLK_MAIN,
|
||||
CLK_PLL0,
|
||||
CLK_PLL1,
|
||||
CLK_PLL3,
|
||||
CLK_PLL0D4,
|
||||
CLK_PLL0D6,
|
||||
CLK_PLL0D8,
|
||||
CLK_PLL0D20,
|
||||
CLK_PLL0D24,
|
||||
CLK_PLL1D2,
|
||||
CLK_PE,
|
||||
CLK_S0,
|
||||
CLK_S1,
|
||||
CLK_S2,
|
||||
CLK_S3,
|
||||
CLK_SDSRC,
|
||||
|
||||
/* Module Clocks */
|
||||
MOD_CLK_BASE
|
||||
};
|
||||
|
||||
static const struct cpg_core_clk r8a77990_core_clks[] = {
|
||||
/* External Clock Inputs */
|
||||
DEF_INPUT("extal", CLK_EXTAL),
|
||||
|
||||
/* Internal Core Clocks */
|
||||
DEF_BASE(".main", CLK_MAIN, CLK_TYPE_GEN3_MAIN, CLK_EXTAL),
|
||||
DEF_BASE(".pll1", CLK_PLL1, CLK_TYPE_GEN3_PLL1, CLK_MAIN),
|
||||
DEF_BASE(".pll3", CLK_PLL3, CLK_TYPE_GEN3_PLL3, CLK_MAIN),
|
||||
|
||||
DEF_FIXED(".pll0", CLK_PLL0, CLK_MAIN, 1, 100),
|
||||
DEF_FIXED(".pll0d4", CLK_PLL0D4, CLK_PLL0, 4, 1),
|
||||
DEF_FIXED(".pll0d6", CLK_PLL0D6, CLK_PLL0, 6, 1),
|
||||
DEF_FIXED(".pll0d8", CLK_PLL0D8, CLK_PLL0, 8, 1),
|
||||
DEF_FIXED(".pll0d20", CLK_PLL0D20, CLK_PLL0, 20, 1),
|
||||
DEF_FIXED(".pll0d24", CLK_PLL0D24, CLK_PLL0, 24, 1),
|
||||
DEF_FIXED(".pll1d2", CLK_PLL1D2, CLK_PLL1, 2, 1),
|
||||
DEF_FIXED(".pe", CLK_PE, CLK_PLL0D20, 1, 1),
|
||||
DEF_FIXED(".s0", CLK_S0, CLK_PLL1, 2, 1),
|
||||
DEF_FIXED(".s1", CLK_S1, CLK_PLL1, 3, 1),
|
||||
DEF_FIXED(".s2", CLK_S2, CLK_PLL1, 4, 1),
|
||||
DEF_FIXED(".s3", CLK_S3, CLK_PLL1, 6, 1),
|
||||
DEF_FIXED(".sdsrc", CLK_SDSRC, CLK_PLL1, 2, 1),
|
||||
|
||||
/* Core Clock Outputs */
|
||||
DEF_FIXED("za2", R8A77990_CLK_ZA2, CLK_PLL0D24, 1, 1),
|
||||
DEF_FIXED("za8", R8A77990_CLK_ZA8, CLK_PLL0D8, 1, 1),
|
||||
DEF_FIXED("ztr", R8A77990_CLK_ZTR, CLK_PLL1, 6, 1),
|
||||
DEF_FIXED("zt", R8A77990_CLK_ZT, CLK_PLL1, 4, 1),
|
||||
DEF_FIXED("zx", R8A77990_CLK_ZX, CLK_PLL1, 3, 1),
|
||||
DEF_FIXED("s0d1", R8A77990_CLK_S0D1, CLK_S0, 1, 1),
|
||||
DEF_FIXED("s0d3", R8A77990_CLK_S0D3, CLK_S0, 3, 1),
|
||||
DEF_FIXED("s0d6", R8A77990_CLK_S0D6, CLK_S0, 6, 1),
|
||||
DEF_FIXED("s0d12", R8A77990_CLK_S0D12, CLK_S0, 12, 1),
|
||||
DEF_FIXED("s0d24", R8A77990_CLK_S0D24, CLK_S0, 24, 1),
|
||||
DEF_FIXED("s1d1", R8A77990_CLK_S1D1, CLK_S1, 1, 1),
|
||||
DEF_FIXED("s1d2", R8A77990_CLK_S1D2, CLK_S1, 2, 1),
|
||||
DEF_FIXED("s1d4", R8A77990_CLK_S1D4, CLK_S1, 4, 1),
|
||||
DEF_FIXED("s2d1", R8A77990_CLK_S2D1, CLK_S2, 1, 1),
|
||||
DEF_FIXED("s2d2", R8A77990_CLK_S2D2, CLK_S2, 2, 1),
|
||||
DEF_FIXED("s2d4", R8A77990_CLK_S2D4, CLK_S2, 4, 1),
|
||||
DEF_FIXED("s3d1", R8A77990_CLK_S3D1, CLK_S3, 1, 1),
|
||||
DEF_FIXED("s3d2", R8A77990_CLK_S3D2, CLK_S3, 2, 1),
|
||||
DEF_FIXED("s3d4", R8A77990_CLK_S3D4, CLK_S3, 4, 1),
|
||||
|
||||
DEF_GEN3_SD("sd0", R8A77990_CLK_SD0, CLK_SDSRC, 0x0074),
|
||||
DEF_GEN3_SD("sd1", R8A77990_CLK_SD1, CLK_SDSRC, 0x0078),
|
||||
DEF_GEN3_SD("sd3", R8A77990_CLK_SD3, CLK_SDSRC, 0x026c),
|
||||
|
||||
DEF_FIXED("cl", R8A77990_CLK_CL, CLK_PLL1, 48, 1),
|
||||
DEF_FIXED("cp", R8A77990_CLK_CP, CLK_EXTAL, 2, 1),
|
||||
DEF_FIXED("cpex", R8A77990_CLK_CPEX, CLK_EXTAL, 4, 1),
|
||||
DEF_FIXED("osc", R8A77990_CLK_OSC, CLK_EXTAL, 384, 1),
|
||||
DEF_FIXED("r", R8A77990_CLK_R, CLK_EXTAL, 1536, 1),
|
||||
|
||||
DEF_GEN3_PE("s0d6c", R8A77990_CLK_S0D6C, CLK_S0, 6, CLK_PE, 6),
|
||||
DEF_GEN3_PE("s3d1c", R8A77990_CLK_S3D1C, CLK_S3, 1, CLK_PE, 1),
|
||||
DEF_GEN3_PE("s3d2c", R8A77990_CLK_S3D2C, CLK_S3, 2, CLK_PE, 2),
|
||||
DEF_GEN3_PE("s3d4c", R8A77990_CLK_S3D4C, CLK_S3, 4, CLK_PE, 4),
|
||||
|
||||
DEF_DIV6P1("canfd", R8A77990_CLK_CANFD, CLK_PLL0D6, 0x244),
|
||||
DEF_DIV6P1("csi0", R8A77990_CLK_CSI0, CLK_PLL1D2, 0x00c),
|
||||
DEF_DIV6P1("mso", R8A77990_CLK_MSO, CLK_PLL1D2, 0x014),
|
||||
};
|
||||
|
||||
static const struct mssr_mod_clk r8a77990_mod_clks[] = {
|
||||
DEF_MOD("scif5", 202, R8A77990_CLK_S3D4C),
|
||||
DEF_MOD("scif4", 203, R8A77990_CLK_S3D4C),
|
||||
DEF_MOD("scif3", 204, R8A77990_CLK_S3D4C),
|
||||
DEF_MOD("scif1", 206, R8A77990_CLK_S3D4C),
|
||||
DEF_MOD("scif0", 207, R8A77990_CLK_S3D4C),
|
||||
DEF_MOD("msiof3", 208, R8A77990_CLK_MSO),
|
||||
DEF_MOD("msiof2", 209, R8A77990_CLK_MSO),
|
||||
DEF_MOD("msiof1", 210, R8A77990_CLK_MSO),
|
||||
DEF_MOD("msiof0", 211, R8A77990_CLK_MSO),
|
||||
DEF_MOD("sys-dmac2", 217, R8A77990_CLK_S3D1),
|
||||
DEF_MOD("sys-dmac1", 218, R8A77990_CLK_S3D1),
|
||||
DEF_MOD("sys-dmac0", 219, R8A77990_CLK_S3D1),
|
||||
|
||||
DEF_MOD("cmt3", 300, R8A77990_CLK_R),
|
||||
DEF_MOD("cmt2", 301, R8A77990_CLK_R),
|
||||
DEF_MOD("cmt1", 302, R8A77990_CLK_R),
|
||||
DEF_MOD("cmt0", 303, R8A77990_CLK_R),
|
||||
DEF_MOD("scif2", 310, R8A77990_CLK_S3D4C),
|
||||
DEF_MOD("sdif3", 311, R8A77990_CLK_SD3),
|
||||
DEF_MOD("sdif1", 313, R8A77990_CLK_SD1),
|
||||
DEF_MOD("sdif0", 314, R8A77990_CLK_SD0),
|
||||
DEF_MOD("pcie0", 319, R8A77990_CLK_S3D1),
|
||||
DEF_MOD("usb3-if0", 328, R8A77990_CLK_S3D1),
|
||||
DEF_MOD("usb-dmac0", 330, R8A77990_CLK_S3D1),
|
||||
DEF_MOD("usb-dmac1", 331, R8A77990_CLK_S3D1),
|
||||
|
||||
DEF_MOD("rwdt", 402, R8A77990_CLK_R),
|
||||
DEF_MOD("intc-ex", 407, R8A77990_CLK_CP),
|
||||
DEF_MOD("intc-ap", 408, R8A77990_CLK_S0D3),
|
||||
|
||||
DEF_MOD("audmac0", 502, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("drif7", 508, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("drif6", 509, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("drif5", 510, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("drif4", 511, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("drif3", 512, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("drif2", 513, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("drif1", 514, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("drif0", 515, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("hscif4", 516, R8A77990_CLK_S3D1C),
|
||||
DEF_MOD("hscif3", 517, R8A77990_CLK_S3D1C),
|
||||
DEF_MOD("hscif2", 518, R8A77990_CLK_S3D1C),
|
||||
DEF_MOD("hscif1", 519, R8A77990_CLK_S3D1C),
|
||||
DEF_MOD("hscif0", 520, R8A77990_CLK_S3D1C),
|
||||
DEF_MOD("thermal", 522, R8A77990_CLK_CP),
|
||||
DEF_MOD("pwm", 523, R8A77990_CLK_S3D4C),
|
||||
|
||||
DEF_MOD("fcpvd1", 602, R8A77990_CLK_S1D2),
|
||||
DEF_MOD("fcpvd0", 603, R8A77990_CLK_S1D2),
|
||||
DEF_MOD("fcpvb0", 607, R8A77990_CLK_S0D1),
|
||||
DEF_MOD("fcpvi0", 611, R8A77990_CLK_S0D1),
|
||||
DEF_MOD("fcpf0", 615, R8A77990_CLK_S0D1),
|
||||
DEF_MOD("fcpcs", 619, R8A77990_CLK_S0D1),
|
||||
DEF_MOD("vspd1", 622, R8A77990_CLK_S1D2),
|
||||
DEF_MOD("vspd0", 623, R8A77990_CLK_S1D2),
|
||||
DEF_MOD("vspb", 626, R8A77990_CLK_S0D1),
|
||||
DEF_MOD("vspi0", 631, R8A77990_CLK_S0D1),
|
||||
|
||||
DEF_MOD("ehci0", 703, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("hsusb", 704, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("csi40", 716, R8A77990_CLK_CSI0),
|
||||
DEF_MOD("du1", 723, R8A77990_CLK_S2D1),
|
||||
DEF_MOD("du0", 724, R8A77990_CLK_S2D1),
|
||||
DEF_MOD("lvds", 727, R8A77990_CLK_S2D1),
|
||||
|
||||
DEF_MOD("vin7", 804, R8A77990_CLK_S1D2),
|
||||
DEF_MOD("vin6", 805, R8A77990_CLK_S1D2),
|
||||
DEF_MOD("vin5", 806, R8A77990_CLK_S1D2),
|
||||
DEF_MOD("vin4", 807, R8A77990_CLK_S1D2),
|
||||
DEF_MOD("etheravb", 812, R8A77990_CLK_S3D2),
|
||||
|
||||
DEF_MOD("gpio6", 906, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("gpio5", 907, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("gpio4", 908, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("gpio3", 909, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("gpio2", 910, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("gpio1", 911, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("gpio0", 912, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("can-fd", 914, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("can-if1", 915, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("can-if0", 916, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("i2c6", 918, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("i2c5", 919, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("i2c-dvfs", 926, R8A77990_CLK_CP),
|
||||
DEF_MOD("i2c4", 927, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("i2c3", 928, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("i2c2", 929, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("i2c1", 930, R8A77990_CLK_S3D2),
|
||||
DEF_MOD("i2c0", 931, R8A77990_CLK_S3D2),
|
||||
|
||||
DEF_MOD("ssi-all", 1005, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("ssi9", 1006, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("ssi8", 1007, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("ssi7", 1008, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("ssi6", 1009, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("ssi5", 1010, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("ssi4", 1011, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("ssi3", 1012, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("ssi2", 1013, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("ssi1", 1014, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("ssi0", 1015, MOD_CLK_ID(1005)),
|
||||
DEF_MOD("scu-all", 1017, R8A77990_CLK_S3D4),
|
||||
DEF_MOD("scu-dvc1", 1018, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-dvc0", 1019, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-ctu1-mix1", 1020, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-ctu0-mix0", 1021, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src9", 1022, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src8", 1023, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src7", 1024, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src6", 1025, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src5", 1026, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src4", 1027, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src3", 1028, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src2", 1029, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src1", 1030, MOD_CLK_ID(1017)),
|
||||
DEF_MOD("scu-src0", 1031, MOD_CLK_ID(1017)),
|
||||
};
|
||||
|
||||
/*
|
||||
* CPG Clock Data
|
||||
*/
|
||||
|
||||
/*
|
||||
* MD19 EXTAL (MHz) PLL0 PLL1 PLL3
|
||||
*--------------------------------------------------------------------
|
||||
* 0 48 x 1 x100/4 x100/3 x100/3
|
||||
* 1 48 x 1 x100/4 x100/3 x58/3
|
||||
*/
|
||||
#define CPG_PLL_CONFIG_INDEX(md) (((md) & BIT(19)) >> 19)
|
||||
|
||||
static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[2] = {
|
||||
/* EXTAL div PLL1 mult/div PLL3 mult/div */
|
||||
{ 1, 100, 3, 100, 3, },
|
||||
{ 1, 100, 3, 58, 3, },
|
||||
};
|
||||
|
||||
static const struct mstp_stop_table r8a77990_mstp_table[] = {
|
||||
{ 0x00200000, 0x0, 0x00200000, 0 },
|
||||
{ 0xFFFFFFFF, 0x0, 0xFFFFFFFF, 0 },
|
||||
{ 0x340E2FDC, 0x2040, 0x340E2FDC, 0 },
|
||||
{ 0xFFFFFFDF, 0x400, 0xFFFFFFDF, 0 },
|
||||
{ 0x80000184, 0x180, 0x80000184, 0 },
|
||||
{ 0xC3FFFFFF, 0x0, 0xC3FFFFFF, 0 },
|
||||
{ 0xFFFFFFFF, 0x0, 0xFFFFFFFF, 0 },
|
||||
{ 0xFFFFFFFF, 0x0, 0xFFFFFFFF, 0 },
|
||||
{ 0x01F1FFF7, 0x0, 0x01F1FFF7, 0 },
|
||||
{ 0xFFFFFFFE, 0x0, 0xFFFFFFFE, 0 },
|
||||
{ 0xFFFEFFE0, 0x0, 0xFFFEFFE0, 0 },
|
||||
{ 0x000000B7, 0x0, 0x000000B7, 0 },
|
||||
};
|
||||
|
||||
static const void *r8a77990_get_pll_config(const u32 cpg_mode)
|
||||
{
|
||||
return &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)];
|
||||
}
|
||||
|
||||
static const struct cpg_mssr_info r8a77990_cpg_mssr_info = {
|
||||
.core_clk = r8a77990_core_clks,
|
||||
.core_clk_size = ARRAY_SIZE(r8a77990_core_clks),
|
||||
.mod_clk = r8a77990_mod_clks,
|
||||
.mod_clk_size = ARRAY_SIZE(r8a77990_mod_clks),
|
||||
.mstp_table = r8a77990_mstp_table,
|
||||
.mstp_table_size = ARRAY_SIZE(r8a77990_mstp_table),
|
||||
.reset_node = "renesas,r8a77990-rst",
|
||||
.mod_clk_base = MOD_CLK_BASE,
|
||||
.clk_extal_id = CLK_EXTAL,
|
||||
.clk_extalr_id = ~0,
|
||||
.get_pll_config = r8a77990_get_pll_config,
|
||||
};
|
||||
|
||||
static const struct udevice_id r8a77990_clk_ids[] = {
|
||||
{
|
||||
.compatible = "renesas,r8a77990-cpg-mssr",
|
||||
.data = (ulong)&r8a77990_cpg_mssr_info
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(clk_r8a77990) = {
|
||||
.name = "clk_r8a77990",
|
||||
.id = UCLASS_CLK,
|
||||
.of_match = r8a77990_clk_ids,
|
||||
.priv_auto_alloc_size = sizeof(struct gen3_clk_priv),
|
||||
.ops = &gen3_clk_ops,
|
||||
.probe = gen3_clk_probe,
|
||||
.remove = gen3_clk_remove,
|
||||
};
|
|
@ -31,8 +31,9 @@ enum rcar_gen3_clk_types {
|
|||
DEF_BASE(_name, _id, CLK_TYPE_GEN3_RPC, _parent, .offset = _offset)
|
||||
#define DEF_GEN3_PE(_name, _id, _parent_sscg, _div_sscg, _parent_clean, \
|
||||
_div_clean) \
|
||||
DEF_BASE(_name, _id, CLK_TYPE_FF, \
|
||||
(_parent_clean), .div = (_div_clean), 1)
|
||||
DEF_BASE(_name, _id, CLK_TYPE_GEN3_PE, \
|
||||
(_parent_sscg) << 16 | (_parent_clean), \
|
||||
.div = (_div_sscg) << 16 | (_div_clean))
|
||||
|
||||
struct rcar_gen3_cpg_pll_config {
|
||||
u8 extal_div;
|
||||
|
@ -49,6 +50,7 @@ struct gen3_clk_priv {
|
|||
struct cpg_mssr_info *info;
|
||||
struct clk clk_extal;
|
||||
struct clk clk_extalr;
|
||||
bool sscg;
|
||||
const struct rcar_gen3_cpg_pll_config *cpg_pll_config;
|
||||
};
|
||||
|
||||
|
|
|
@ -175,6 +175,7 @@ static const struct udevice_id rcar_gpio_ids[] = {
|
|||
{ .compatible = "renesas,gpio-r8a7796" },
|
||||
{ .compatible = "renesas,gpio-r8a77965" },
|
||||
{ .compatible = "renesas,gpio-r8a77970" },
|
||||
{ .compatible = "renesas,gpio-r8a77990" },
|
||||
{ .compatible = "renesas,gpio-r8a77995" },
|
||||
{ .compatible = "renesas,rcar-gen2-gpio" },
|
||||
{ .compatible = "renesas,rcar-gen3-gpio" },
|
||||
|
|
|
@ -323,6 +323,7 @@ static const struct udevice_id renesas_sdhi_match[] = {
|
|||
{ .compatible = "renesas,sdhi-r8a7796", .data = RENESAS_GEN3_QUIRKS },
|
||||
{ .compatible = "renesas,sdhi-r8a77965", .data = RENESAS_GEN3_QUIRKS },
|
||||
{ .compatible = "renesas,sdhi-r8a77970", .data = RENESAS_GEN3_QUIRKS },
|
||||
{ .compatible = "renesas,sdhi-r8a77990", .data = RENESAS_GEN3_QUIRKS },
|
||||
{ .compatible = "renesas,sdhi-r8a77995", .data = RENESAS_GEN3_QUIRKS },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
|
|
@ -659,6 +659,7 @@ static const struct udevice_id ravb_ids[] = {
|
|||
{ .compatible = "renesas,etheravb-r8a7796" },
|
||||
{ .compatible = "renesas,etheravb-r8a77965" },
|
||||
{ .compatible = "renesas,etheravb-r8a77970" },
|
||||
{ .compatible = "renesas,etheravb-r8a77990" },
|
||||
{ .compatible = "renesas,etheravb-r8a77995" },
|
||||
{ .compatible = "renesas,etheravb-rcar-gen3" },
|
||||
{ }
|
||||
|
|
|
@ -94,6 +94,17 @@ config PINCTRL_PFC_R8A77970
|
|||
the GPIO definitions and pin control functions for each available
|
||||
multiplex function.
|
||||
|
||||
config PINCTRL_PFC_R8A77990
|
||||
bool "Renesas RCar Gen3 R8A77990 pin control driver"
|
||||
def_bool y if R8A77990
|
||||
depends on PINCTRL_PFC
|
||||
help
|
||||
Support pin multiplexing control on Renesas RCar Gen3 R8A77990 SoCs.
|
||||
|
||||
The driver is controlled by a device tree node which contains both
|
||||
the GPIO definitions and pin control functions for each available
|
||||
multiplex function.
|
||||
|
||||
config PINCTRL_PFC_R8A77995
|
||||
bool "Renesas RCar Gen3 R8A77995 pin control driver"
|
||||
def_bool y if R8A77995
|
||||
|
|
|
@ -7,4 +7,5 @@ obj-$(CONFIG_PINCTRL_PFC_R8A7794) += pfc-r8a7794.o
|
|||
obj-$(CONFIG_PINCTRL_PFC_R8A7795) += pfc-r8a7795.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A7796) += pfc-r8a7796.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A77970) += pfc-r8a77970.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A77990) += pfc-r8a77990.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A77995) += pfc-r8a77995.o
|
||||
|
|
1731
drivers/pinctrl/renesas/pfc-r8a77990.c
Normal file
1731
drivers/pinctrl/renesas/pfc-r8a77990.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -29,6 +29,7 @@ enum sh_pfc_model {
|
|||
SH_PFC_R8A7795,
|
||||
SH_PFC_R8A7796,
|
||||
SH_PFC_R8A77970,
|
||||
SH_PFC_R8A77990,
|
||||
SH_PFC_R8A77995,
|
||||
};
|
||||
|
||||
|
@ -806,6 +807,10 @@ static int sh_pfc_pinctrl_probe(struct udevice *dev)
|
|||
if (model == SH_PFC_R8A77970)
|
||||
priv->pfc.info = &r8a77970_pinmux_info;
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A77990
|
||||
if (model == SH_PFC_R8A77990)
|
||||
priv->pfc.info = &r8a77990_pinmux_info;
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A77995
|
||||
if (model == SH_PFC_R8A77995)
|
||||
priv->pfc.info = &r8a77995_pinmux_info;
|
||||
|
@ -870,6 +875,12 @@ static const struct udevice_id sh_pfc_pinctrl_ids[] = {
|
|||
.data = SH_PFC_R8A77970,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A77990
|
||||
{
|
||||
.compatible = "renesas,pfc-r8a77990",
|
||||
.data = SH_PFC_R8A77990,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A77995
|
||||
{
|
||||
.compatible = "renesas,pfc-r8a77995",
|
||||
|
|
|
@ -253,6 +253,7 @@ extern const struct sh_pfc_soc_info r8a7794_pinmux_info;
|
|||
extern const struct sh_pfc_soc_info r8a7795_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a7796_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a77970_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a77990_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a77995_pinmux_info;
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Helper macros to create pin and port lists
|
||||
|
@ -368,9 +369,13 @@ extern const struct sh_pfc_soc_info r8a77995_pinmux_info;
|
|||
PORT_GP_CFG_1(bank, 9, fn, sfx, cfg)
|
||||
#define PORT_GP_10(bank, fn, sfx) PORT_GP_CFG_10(bank, fn, sfx, 0)
|
||||
|
||||
#define PORT_GP_CFG_12(bank, fn, sfx, cfg) \
|
||||
#define PORT_GP_CFG_11(bank, fn, sfx, cfg) \
|
||||
PORT_GP_CFG_10(bank, fn, sfx, cfg), \
|
||||
PORT_GP_CFG_1(bank, 10, fn, sfx, cfg), \
|
||||
PORT_GP_CFG_1(bank, 10, fn, sfx, cfg)
|
||||
#define PORT_GP_11(bank, fn, sfx) PORT_GP_CFG_11(bank, fn, sfx, 0)
|
||||
|
||||
#define PORT_GP_CFG_12(bank, fn, sfx, cfg) \
|
||||
PORT_GP_CFG_11(bank, fn, sfx, cfg), \
|
||||
PORT_GP_CFG_1(bank, 11, fn, sfx, cfg)
|
||||
#define PORT_GP_12(bank, fn, sfx) PORT_GP_CFG_12(bank, fn, sfx, 0)
|
||||
|
||||
|
|
33
include/configs/ebisu.h
Normal file
33
include/configs/ebisu.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* include/configs/ebisu.h
|
||||
* This file is Ebisu board configuration.
|
||||
*
|
||||
* Copyright (C) 2018 Renesas Electronics Corporation
|
||||
*/
|
||||
|
||||
#ifndef __EBISU_H
|
||||
#define __EBISU_H
|
||||
|
||||
#undef DEBUG
|
||||
|
||||
#include "rcar-gen3-common.h"
|
||||
|
||||
/* Ethernet RAVB */
|
||||
#define CONFIG_NET_MULTI
|
||||
#define CONFIG_BITBANGMII
|
||||
#define CONFIG_BITBANGMII_MULTI
|
||||
|
||||
/* Board Clock */
|
||||
/* XTAL_CLK : 33.33MHz */
|
||||
#define CONFIG_SYS_CLK_FREQ 48000000u
|
||||
|
||||
/* Generic Timer Definitions (use in assembler source) */
|
||||
#define COUNTER_FREQUENCY 0xFE502A /* 16.66MHz from CPclk */
|
||||
|
||||
/* Environment in eMMC, at the end of 2nd "boot sector" */
|
||||
#define CONFIG_ENV_OFFSET (-CONFIG_ENV_SIZE)
|
||||
#define CONFIG_SYS_MMC_ENV_DEV 2
|
||||
#define CONFIG_SYS_MMC_ENV_PART 2
|
||||
|
||||
#endif /* __EBISU_H */
|
|
@ -51,4 +51,12 @@
|
|||
#define CONFIG_ENV_SIZE (CONFIG_ENV_SECT_SIZE)
|
||||
#define CONFIG_ENV_SIZE_REDUND (CONFIG_SYS_MONITOR_LEN)
|
||||
|
||||
/* SF MTD */
|
||||
#if defined(CONFIG_SPI_FLASH_MTD) && !defined(CONFIG_SPL_BUILD)
|
||||
#define CONFIG_MTD_DEVICE
|
||||
#define CONFIG_MTD_PARTITIONS
|
||||
#else
|
||||
#undef CONFIG_SPI_FLASH_MTD
|
||||
#endif
|
||||
|
||||
#endif /* __RCAR_GEN2_COMMON_H */
|
||||
|
|
63
include/dt-bindings/clock/r8a77990-cpg-mssr.h
Normal file
63
include/dt-bindings/clock/r8a77990-cpg-mssr.h
Normal file
|
@ -0,0 +1,63 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright (C) 2018 Renesas Electronics Corp.
|
||||
*/
|
||||
#ifndef __DT_BINDINGS_CLOCK_R8A77990_CPG_MSSR_H__
|
||||
#define __DT_BINDINGS_CLOCK_R8A77990_CPG_MSSR_H__
|
||||
|
||||
#include <dt-bindings/clock/renesas-cpg-mssr.h>
|
||||
|
||||
/* r8a77990 CPG Core Clocks */
|
||||
#define R8A77990_CLK_Z2 0
|
||||
#define R8A77990_CLK_ZR 1
|
||||
#define R8A77990_CLK_ZG 2
|
||||
#define R8A77990_CLK_ZTR 3
|
||||
#define R8A77990_CLK_ZT 4
|
||||
#define R8A77990_CLK_ZX 5
|
||||
#define R8A77990_CLK_S0D1 6
|
||||
#define R8A77990_CLK_S0D3 7
|
||||
#define R8A77990_CLK_S0D6 8
|
||||
#define R8A77990_CLK_S0D12 9
|
||||
#define R8A77990_CLK_S0D24 10
|
||||
#define R8A77990_CLK_S1D1 11
|
||||
#define R8A77990_CLK_S1D2 12
|
||||
#define R8A77990_CLK_S1D4 13
|
||||
#define R8A77990_CLK_S2D1 14
|
||||
#define R8A77990_CLK_S2D2 15
|
||||
#define R8A77990_CLK_S2D4 16
|
||||
#define R8A77990_CLK_S3D1 17
|
||||
#define R8A77990_CLK_S3D2 18
|
||||
#define R8A77990_CLK_S3D4 19
|
||||
#define R8A77990_CLK_S0D6C 20
|
||||
#define R8A77990_CLK_S3D1C 21
|
||||
#define R8A77990_CLK_S3D2C 22
|
||||
#define R8A77990_CLK_S3D4C 23
|
||||
#define R8A77990_CLK_LB 24
|
||||
#define R8A77990_CLK_CL 25
|
||||
#define R8A77990_CLK_ZB3 26
|
||||
#define R8A77990_CLK_ZB3D2 27
|
||||
#define R8A77990_CLK_CR 28
|
||||
#define R8A77990_CLK_CRD2 29
|
||||
#define R8A77990_CLK_SD0H 30
|
||||
#define R8A77990_CLK_SD0 31
|
||||
#define R8A77990_CLK_SD1H 32
|
||||
#define R8A77990_CLK_SD1 33
|
||||
#define R8A77990_CLK_SD3H 34
|
||||
#define R8A77990_CLK_SD3 35
|
||||
#define R8A77990_CLK_RPC 36
|
||||
#define R8A77990_CLK_RPCD2 37
|
||||
#define R8A77990_CLK_ZA2 38
|
||||
#define R8A77990_CLK_ZA8 39
|
||||
#define R8A77990_CLK_Z2D 40
|
||||
#define R8A77990_CLK_CANFD 41
|
||||
#define R8A77990_CLK_MSO 42
|
||||
#define R8A77990_CLK_R 43
|
||||
#define R8A77990_CLK_OSC 44
|
||||
#define R8A77990_CLK_LV0 45
|
||||
#define R8A77990_CLK_LV1 46
|
||||
#define R8A77990_CLK_CSI0 47
|
||||
#define R8A77990_CLK_POST3 48
|
||||
#define R8A77990_CLK_CP 49
|
||||
#define R8A77990_CLK_CPEX 50
|
||||
|
||||
#endif /* __DT_BINDINGS_CLOCK_R8A77990_CPG_MSSR_H__ */
|
Loading…
Reference in a new issue