Merge tag 'u-boot-rockchip-20260309' of https://source.denx.de/u-boot/custodians/u-boot-rockchip into next

CI: https://source.denx.de/u-boot/custodians/u-boot-rockchip/-/pipelines/29452

- New SoC support: RK3506, RK3582;
- New Board support: RK3528 FriendlyElec NanoPi Zero2;
- Other fixes
This commit is contained in:
Tom Rini
2026-03-10 08:17:13 -06:00
82 changed files with 2965 additions and 4599 deletions

View File

@@ -58,17 +58,6 @@ dtb-$(CONFIG_ROCKCHIP_RK3128) += \
dtb-$(CONFIG_ROCKCHIP_RK322X) += \
rk3229-evb.dtb
dtb-$(CONFIG_ROCKCHIP_RK3288) += \
rk3288-evb.dtb \
rk3288-popmetal.dtb \
rk3288-rock2-square.dtb \
rk3288-rock-pi-n8.dtb \
rk3288-veyron-jerry.dtb \
rk3288-veyron-mickey.dtb \
rk3288-veyron-minnie.dtb \
rk3288-veyron-speedy.dtb \
rk3288-vyasa.dtb
dtb-$(CONFIG_ROCKCHIP_RK3368) += \
rk3368-sheep.dtb \
rk3368-geekbox.dtb \

View File

@@ -1,52 +0,0 @@
/*
* Smart battery dts fragment for devices that use cros-ec-sbs
*
* Copyright (c) 2015 Google, Inc
*
* This file is dual-licensed: you can use it either under the terms
* of the GPL or the X11 license, at your option. Note that this dual
* licensing only applies to this file, and not this project as a
* whole.
*
* a) This file 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.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Or, alternatively,
*
* b) Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
&i2c_tunnel {
battery: sbs-battery@b {
compatible = "sbs,sbs-battery";
reg = <0xb>;
sbs,i2c-retry-count = <2>;
sbs,poll-retry-count = <1>;
};
};

View File

@@ -1,20 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+ OR X11
/*
* (C) Copyright 2016 Rockchip Electronics Co., Ltd
*/
/dts-v1/;
#include "rk3288-evb.dtsi"
/ {
model = "Evb-RK3288";
compatible = "evb-rk3288,evb-rk3288", "rockchip,rk3288";
chosen {
stdout-path = &uart2;
};
};
&pwm1 {
status = "okay";
};

View File

@@ -1,476 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+ OR X11
/*
* (C) Copyright 2016 Rockchip Electronics Co., Ltd
*/
#include "rk3288.dtsi"
/ {
memory {
reg = <0x0 0x0 0x0 0x80000000>;
};
ext_gmac: external-gmac-clock {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <125000000>;
clock-output-names = "ext_gmac";
};
keys: gpio-keys {
compatible = "gpio-keys";
button@0 {
gpio-key,wakeup = <1>;
gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
label = "GPIO Power";
linux,code = <116>;
pinctrl-names = "default";
pinctrl-0 = <&pwr_key>;
};
};
vcc_sys: vsys-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc_sys";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
regulator-boot-on;
};
vcc_flash: flash-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc_flash";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
vin-supply = <&vcc_io>;
};
vcc_5v: usb-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc_5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&vcc_sys>;
};
vcc_host_5v: usb-host-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 14 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&host_vbus_drv>;
regulator-name = "vcc_host_5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
vin-supply = <&vcc_5v>;
};
vcc_otg_5v: usb-otg-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&otg_vbus_drv>;
regulator-name = "vcc_otg_5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
vin-supply = <&vcc_5v>;
};
backlight: backlight {
compatible = "pwm-backlight";
power-supply = <&vcc_sys>;
enable-gpios = <&gpio7 2 GPIO_ACTIVE_HIGH>;
brightness-levels = <
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95
96 97 98 99 100 101 102 103
104 105 106 107 108 109 110 111
112 113 114 115 116 117 118 119
120 121 122 123 124 125 126 127
128 129 130 131 132 133 134 135
136 137 138 139 140 141 142 143
144 145 146 147 148 149 150 151
152 153 154 155 156 157 158 159
160 161 162 163 164 165 166 167
168 169 170 171 172 173 174 175
176 177 178 179 180 181 182 183
184 185 186 187 188 189 190 191
192 193 194 195 196 197 198 199
200 201 202 203 204 205 206 207
208 209 210 211 212 213 214 215
216 217 218 219 220 221 222 223
224 225 226 227 228 229 230 231
232 233 234 235 236 237 238 239
240 241 242 243 244 245 246 247
248 249 250 251 252 253 254 255>;
default-brightness-level = <50>;
pwms = <&pwm0 0 25000 0>;
pinctrl-names = "default";
pinctrl-0 = <&pwm0_pin>;
pwm-delay-us = <10000>;
status = "disabled";
};
panel: panel {
compatible = "simple-panel";
power-supply = <&vcc_io>;
backlight = <&backlight>;
enable-gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
};
&cpu0 {
cpu0-supply = <&vdd_cpu>;
};
&emmc {
broken-cd;
bus-width = <8>;
cap-mmc-highspeed;
disable-wp;
non-removable;
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&emmc_clk>, <&emmc_cmd>, <&emmc_pwr>, <&emmc_bus8>;
status = "okay";
};
&gmac {
phy-mode = "rgmii";
clock_in_out = "input";
snps,reset-gpio = <&gpio4 7 0>;
snps,reset-active-low;
snps,reset-delays-us = <0 10000 1000000>;
assigned-clocks = <&cru SCLK_MAC>;
assigned-clock-parents = <&ext_gmac>;
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins>;
tx_delay = <0x30>;
rx_delay = <0x10>;
status = "okay";
};
&hdmi {
ddc-i2c-bus = <&i2c5>;
status = "okay";
};
&i2c0 {
clock-frequency = <400000>;
status = "okay";
vdd_cpu: syr827@40 {
compatible = "silergy,syr827";
fcs,suspend-voltage-selector = <1>;
reg = <0x40>;
regulator-name = "vdd_cpu";
regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1350000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&vcc_sys>;
};
vdd_gpu: syr828@41 {
compatible = "silergy,syr828";
fcs,suspend-voltage-selector = <1>;
reg = <0x41>;
regulator-name = "vdd_gpu";
regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1350000>;
regulator-always-on;
vin-supply = <&vcc_sys>;
};
hym8563: hym8563@51 {
compatible = "haoyu,hym8563";
reg = <0x51>;
#clock-cells = <0>;
clock-frequency = <32768>;
clock-output-names = "xin32k";
interrupt-parent = <&gpio7>;
interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
pinctrl-names = "default";
pinctrl-0 = <&rtc_int>;
};
act8846: act8846@5a {
compatible = "active-semi,act8846";
reg = <0x5a>;
pinctrl-names = "default";
pinctrl-0 = <&pwr_hold>;
system-power-controller;
regulators {
vcc_ddr: REG1 {
regulator-name = "vcc_ddr";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
};
vcc_io: REG2 {
regulator-name = "vcc_io";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vdd_log: REG3 {
regulator-name = "vdd_log";
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>;
regulator-always-on;
};
vcc_20: REG4 {
regulator-name = "vcc_20";
regulator-min-microvolt = <2000000>;
regulator-max-microvolt = <2000000>;
regulator-always-on;
};
vccio_sd: REG5 {
regulator-name = "vccio_sd";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vdd10_lcd: REG6 {
regulator-name = "vdd10_lcd";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
};
vcca_codec: REG7 {
regulator-name = "vcca_codec";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
vcc_tp: REG8 {
regulator-name = "vcca_33";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
vccio_pmu: REG9 {
regulator-name = "vccio_pmu";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
vdd_10: REG10 {
regulator-name = "vdd_10";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
};
vcc_18: REG11 {
regulator-name = "vcc_18";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
vcc18_lcd: REG12 {
regulator-name = "vcc18_lcd";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
};
};
};
&i2c1 {
status = "okay";
};
&i2c2 {
status = "okay";
};
&i2c4 {
status = "okay";
};
&i2c5 {
status = "okay";
};
&pinctrl {
pcfg_output_high: pcfg-output-high {
output-high;
};
pcfg_output_low: pcfg-output-low {
output-low;
};
act8846 {
pwr_hold: pwr-hold {
rockchip,pins = <0 9 RK_FUNC_GPIO &pcfg_output_high>;
};
};
hym8563 {
rtc_int: rtc-int {
rockchip,pins = <0 4 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
keys {
pwr_key: pwr-key {
rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
sdmmc {
sdmmc_pwr: sdmmc-pwr {
rockchip,pins = <7 11 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
usb_host {
host_vbus_drv: host-vbus-drv {
rockchip,pins = <0 14 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
usb_otg {
otg_vbus_drv: otg-vbus-drv {
rockchip,pins = <0 12 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
&pwm0 {
status = "okay";
};
&saradc {
vref-supply = <&vcc_18>;
status = "okay";
};
&sdio0 {
broken-cd;
bus-width = <4>;
disable-wp;
non-removable;
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&sdio0_bus4>, <&sdio0_cmd>, <&sdio0_clk>;
vmmc-supply = <&vcc_18>;
status = "disabled";
};
&sdmmc {
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
card-detect-delay = <200>;
disable-wp;
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk>, <&sdmmc_cmd>, <&sdmmc_cd>, <&sdmmc_bus4>;
vmmc-supply = <&vccio_sd>;
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_clk>, <&spi0_cs0>, <&spi0_tx>, <&spi0_rx>, <&spi0_cs1>;
status = "okay";
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_xfer>, <&uart0_cts>, <&uart0_rts>;
status = "okay";
};
&uart1 {
status = "okay";
};
&uart2 {
status = "okay";
};
&uart3 {
status = "okay";
};
&usb_host1 {
status = "okay";
};
&usb_otg {
status = "okay";
};
&vopb {
status = "okay";
};
&vopb_mmu {
status = "okay";
};
&vopl {
status = "okay";
};
&vopl_mmu {
status = "okay";
};
&mipi_dsi {
status = "disabled";
rockchip,panel = <&panel>;
display-timings {
timing0 {
bits-per-pixel = <24>;
clock-frequency = <160000000>;
hfront-porch = <120>;
hsync-len = <20>;
hback-porch = <21>;
hactive = <1200>;
vfront-porch = <21>;
vsync-len = <3>;
vback-porch = <18>;
vactive = <1920>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
};
};
&wdt {
status = "okay";
};

View File

@@ -1,20 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+ OR X11
/*
* (C) Copyright 2016 Rockchip Electronics Co., Ltd
*/
/dts-v1/;
#include "rk3288-popmetal.dtsi"
/ {
model = "PopMetal-RK3288";
compatible = "chipspark,popmetal-rk3288", "rockchip,rk3288";
chosen {
stdout-path = &uart2;
};
};
&pwm1 {
status = "okay";
};

View File

@@ -1,547 +0,0 @@
/*
* This file is dual-licensed: you can use it either under the terms
* of the GPL or the X11 license, at your option. Note that this dual
* licensing only applies to this file, and not this project as a
* whole.
*
* a) This file 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.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Or, alternatively,
*
* b) Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
#include <dt-bindings/input/input.h>
#include "rk3288.dtsi"
/ {
memory{
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>;
};
ext_gmac: external-gmac-clock {
compatible = "fixed-clock";
clock-frequency = <125000000>;
clock-output-names = "ext_gmac";
#clock-cells = <0>;
};
gpio-keys {
compatible = "gpio-keys";
autorepeat;
pinctrl-names = "default";
pinctrl-0 = <&pwrbtn>;
power {
gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
label = "GPIO Key Power";
linux,code = <KEY_POWER>;
linux,input-type = <1>;
wakeup-source;
debounce-interval = <100>;
};
};
ir: ir-receiver {
compatible = "gpio-ir-receiver";
gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&ir_int>;
};
vcc_flash: flash-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc_flash";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
vin-supply = <&vcc_io>;
};
vcc_sd: sdmmc-regulator {
compatible = "regulator-fixed";
gpio = <&gpio7 11 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_pwr>;
regulator-name = "vcc_sd";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
startup-delay-us = <100000>;
vin-supply = <&vcc_io>;
};
vcc_sys: vsys-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc_sys";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
regulator-boot-on;
};
/*
* A PT5128 creates both dovdd_1v8 and vcc28_dvp, controlled
* by the dvp_pwr pin.
*/
vcc18_dvp: vcc18-dvp-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc18-dvp";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
vin-supply = <&vcc28_dvp>;
};
vcc28_dvp: vcc28-dvp-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 17 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&dvp_pwr>;
regulator-name = "vcc28_dvp";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-always-on;
vin-supply = <&vcc_io>;
};
vcc5v0_host: usb-host-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 14 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&host_vbus_drv>;
regulator-name = "vcc5v0_host";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
};
};
&cpu0 {
cpu0-supply = <&vdd_cpu>;
};
&emmc {
bus-width = <8>;
cap-mmc-highspeed;
disable-wp;
non-removable;
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_pwr &emmc_bus8>;
vmmc-supply = <&vcc_io>;
vqmmc-supply = <&vcc_flash>;
status = "okay";
};
&sdmmc {
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
card-detect-delay = <200>;
disable-wp;
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
vmmc-supply = <&vcc_sd>;
vqmmc-supply = <&vccio_sd>;
status = "okay";
};
&gmac {
phy-supply = <&vcc_lan>;
phy-mode = "rgmii";
clock_in_out = "input";
snps,reset-gpio = <&gpio4 7 0>;
snps,reset-active-low;
snps,reset-delays-us = <0 10000 1000000>;
assigned-clocks = <&cru SCLK_MAC>;
assigned-clock-parents = <&ext_gmac>;
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins>;
tx_delay = <0x30>;
rx_delay = <0x10>;
status = "okay";
};
&hdmi {
ddc-i2c-bus = <&i2c5>;
status = "okay";
};
&i2c0 {
status = "okay";
clock-frequency = <400000>;
rk808: pmic@1b {
compatible = "rockchip,rk808";
reg = <0x1b>;
interrupt-parent = <&gpio0>;
interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&pmic_int &global_pwroff>;
rockchip,system-power-controller;
wakeup-source;
#clock-cells = <1>;
clock-output-names = "xin32k", "rk808-clkout2";
vcc1-supply = <&vcc_sys>;
vcc2-supply = <&vcc_sys>;
vcc3-supply = <&vcc_sys>;
vcc4-supply = <&vcc_sys>;
vcc6-supply = <&vcc_sys>;
vcc7-supply = <&vcc_sys>;
vcc8-supply = <&vcc_18>;
vcc9-supply = <&vcc_io>;
vcc10-supply = <&vcc_io>;
vcc11-supply = <&vcc_sys>;
vcc12-supply = <&vcc_io>;
vddio-supply = <&vcc_io>;
regulators {
vdd_cpu: DCDC_REG1 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <750000>;
regulator-max-microvolt = <1350000>;
regulator-name = "vdd_arm";
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdd_gpu: DCDC_REG2 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1250000>;
regulator-name = "vdd_gpu";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1000000>;
};
};
vcc_ddr: DCDC_REG3 {
regulator-always-on;
regulator-boot-on;
regulator-name = "vcc_ddr";
regulator-state-mem {
regulator-on-in-suspend;
};
};
vcc_io: DCDC_REG4 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc_io";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vcc_lan: LDO_REG1 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc_lan";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vccio_sd: LDO_REG2 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vccio_sd";
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdd_10: LDO_REG3 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-name = "vdd_10";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1000000>;
};
};
vcc18_lcd: LDO_REG4 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc18_lcd";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1800000>;
};
};
ldo5: LDO_REG5 {
regulator-always-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-name = "ldo5";
};
vdd10_lcd: LDO_REG6 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-name = "vdd10_lcd";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1000000>;
};
};
vcc_18: LDO_REG7 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc_18";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1800000>;
};
};
vcca_33: LDO_REG8 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcca_33";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vccio_wl: SWITCH_REG1 {
regulator-always-on;
regulator-boot-on;
regulator-name = "vccio_wl";
regulator-state-mem {
regulator-on-in-suspend;
};
};
vcc_lcd: SWITCH_REG2 {
regulator-always-on;
regulator-boot-on;
regulator-name = "vcc_lcd";
regulator-state-mem {
regulator-on-in-suspend;
};
};
};
};
};
&i2c1 {
status = "okay";
clock-frequency = <400000>;
ak8963: ak8963@0d {
compatible = "asahi-kasei,ak8975";
reg = <0x0d>;
interrupt-parent = <&gpio8>;
interrupts = <1 IRQ_TYPE_EDGE_RISING>;
pinctrl-names = "default";
pinctrl-0 = <&comp_int>;
};
l3g4200d: l3g4200d@68 {
compatible = "st,l3g4200d-gyro";
st,drdy-int-pin = <2>;
reg = <0x6b>;
};
mma8452: mma8452@1d {
compatible = "fsl,mma8452";
reg = <0x1d>;
interrupt-parent = <&gpio8>;
interrupts = <0 IRQ_TYPE_EDGE_RISING>;
pinctrl-names = "default";
pinctrl-0 = <&gsensor_int>;
};
};
&i2c2 {
status = "okay";
};
&i2c3 {
status = "okay";
};
&i2c4 {
status = "okay";
};
&i2c5 {
status = "okay";
};
&io_domains {
audio-supply = <&vcca_33>;
bb-supply = <&vcc_io>;
dvp-supply = <&vcc18_dvp>;
flash0-supply = <&vcc_flash>;
flash1-supply = <&vcc_lan>;
gpio30-supply = <&vcc_io>;
gpio1830-supply = <&vcc_io>;
lcdc-supply = <&vcc_io>;
sdcard-supply = <&vccio_sd>;
wifi-supply = <&vccio_wl>;
status = "okay";
};
&pinctrl {
ak8963 {
comp_int: comp-int {
rockchip,pins = <8 1 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
buttons {
pwrbtn: pwrbtn {
rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
dvp {
dvp_pwr: dvp-pwr {
rockchip,pins = <0 17 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
ir {
ir_int: ir-int {
rockchip,pins = <0 6 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
mma8452 {
gsensor_int: gsensor-int {
rockchip,pins = <8 0 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
pmic {
pmic_int: pmic-int {
rockchip,pins = <RK_GPIO0 4 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
sdmmc {
sdmmc_pwr: sdmmc-pwr {
rockchip,pins = <7 11 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
usb_host {
host_vbus_drv: host-vbus-drv {
rockchip,pins = <0 14 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
&saradc {
status = "okay";
};
&tsadc {
rockchip,hw-tshut-mode = <0>;
rockchip,hw-tshut-polarity = <0>;
status = "okay";
};
&vopb {
status = "okay";
};
&vopb_mmu {
status = "okay";
};
&vopl {
status = "okay";
};
&vopl_mmu {
status = "okay";
};
&uart0 {
status = "okay";
};
&uart1 {
status = "okay";
};
&uart2 {
status = "okay";
};
&uart3 {
status = "okay";
};
&uart4 {
status = "okay";
};
&usb_host1 {
vbus-supply = <&vcc5v0_host>;
status = "okay";
};
&usbphy {
status = "okay";
};

View File

@@ -1,17 +0,0 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
* Copyright (c) 2019 Vamrs Limited
* Copyright (c) 2019 Amarula Solutions(India)
*/
/dts-v1/;
#include "rk3288.dtsi"
#include <rockchip-radxa-dalang-carrier.dtsi>
#include "rk3288-vmarc-som.dtsi"
/ {
model = "Radxa ROCK Pi N8";
compatible = "radxa,rockpi-n8", "vamrs,rk3288-vmarc-som",
"rockchip,rk3288";
};

View File

@@ -1,278 +0,0 @@
/*
* This file is dual-licensed: you can use it either under the terms
* of the GPL or the X11 license, at your option. Note that this dual
* licensing only applies to this file, and not this project as a
* whole.
*
* a) This file 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.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Or, alternatively,
*
* b) Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
#include <dt-bindings/pwm/pwm.h>
#include "rk3288.dtsi"
/ {
memory {
reg = <0x0 0x0 0x0 0x80000000>;
device_type = "memory";
};
emmc_pwrseq: emmc-pwrseq {
compatible = "mmc-pwrseq-emmc";
pinctrl-0 = <&emmc_reset>;
pinctrl-names = "default";
reset-gpios = <&gpio3 9 GPIO_ACTIVE_LOW>;
};
ext_gmac: external-gmac-clock {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <125000000>;
clock-output-names = "ext_gmac";
};
vcc_sys: vsys-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc_sys";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
regulator-boot-on;
};
};
&cpu0 {
cpu0-supply = <&vdd_cpu>;
};
&emmc {
bus-width = <8>;
cap-mmc-highspeed;
disable-wp;
non-removable;
num-slots = <1>;
mmc-pwrseq = <&emmc_pwrseq>;
pinctrl-names = "default";
pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>;
vmmc-supply = <&vcc_io>;
status = "okay";
};
&gmac {
assigned-clocks = <&cru SCLK_MAC>;
assigned-clock-parents = <&ext_gmac>;
clock_in_out = "input";
phy-mode = "rgmii";
phy-supply = <&vccio_pmu>;
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins &phy_rst>;
snps,reset-gpio = <&gpio4 8 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
snps,reset-delays-us = <0 10000 30000>;
rx_delay = <0x10>;
tx_delay = <0x30>;
};
&i2c0 {
status = "okay";
act8846: act8846@5a {
compatible = "active-semi,act8846";
reg = <0x5a>;
system-power-controller;
inl1-supply = <&vcc_io>;
inl2-supply = <&vcc_sys>;
inl3-supply = <&vcc_20>;
vp1-supply = <&vcc_sys>;
vp2-supply = <&vcc_sys>;
vp3-supply = <&vcc_sys>;
vp4-supply = <&vcc_sys>;
regulators {
vcc_ddr: REG1 {
regulator-name = "VCC_DDR";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
};
vcc_io: REG2 {
regulator-name = "VCC_IO";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vdd_log: REG3 {
regulator-name = "VDD_LOG";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
};
vcc_20: REG4 {
regulator-name = "VCC_20";
regulator-min-microvolt = <2000000>;
regulator-max-microvolt = <2000000>;
regulator-always-on;
};
vccio_sd: REG5 {
regulator-name = "VCCIO_SD";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vdd10_lcd: REG6 {
regulator-name = "VDD10_LCD";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
};
vcca_codec: REG7 {
regulator-name = "VCCA_CODEC";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vcca_tp: REG8 {
regulator-name = "VCCA_TP";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vccio_pmu: REG9 {
regulator-name = "VCCIO_PMU";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
vdd_10: REG10 {
regulator-name = "VDD_10";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
};
vcc_18: REG11 {
regulator-name = "VCC_18";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
vcc18_lcd: REG12 {
regulator-name = "VCC18_LCD";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
};
};
vdd_cpu: syr827@40 {
compatible = "silergy,syr827";
reg = <0x40>;
fcs,suspend-voltage-selector = <1>;
regulator-always-on;
regulator-boot-on;
regulator-enable-ramp-delay = <300>;
regulator-name = "vdd_cpu";
regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <8000>;
vin-supply = <&vcc_sys>;
};
vdd_gpu: syr828@41 {
compatible = "silergy,syr828";
reg = <0x41>;
fcs,suspend-voltage-selector = <1>;
regulator-always-on;
regulator-enable-ramp-delay = <300>;
regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1350000>;
regulator-name = "vdd_gpu";
regulator-ramp-delay = <8000>;
vin-supply = <&vcc_sys>;
};
};
&pinctrl {
pcfg_output_high: pcfg-output-high {
output-high;
};
emmc {
emmc_reset: emmc-reset {
rockchip,pins = <3 9 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
gmac {
phy_rst: phy-rst {
rockchip,pins = <4 8 RK_FUNC_GPIO &pcfg_output_high>;
};
};
};
&tsadc {
rockchip,hw-tshut-mode = <0>; /* tshut mode 0:CRU 1:GPIO */
rockchip,hw-tshut-polarity = <0>; /* tshut polarity 0:LOW 1:HIGH */
status = "okay";
};
&vopb {
status = "okay";
};
&vopb_mmu {
status = "okay";
};
&vopl {
status = "okay";
};
&vopl_mmu {
status = "okay";
};
&wdt {
status = "okay";
};

View File

@@ -1,181 +0,0 @@
/*
* This file is dual-licensed: you can use it either under the terms
* of the GPL or the X11 license, at your option. Note that this dual
* licensing only applies to this file, and not this project as a
* whole.
*
* a) This file 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.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Or, alternatively,
*
* b) Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
/dts-v1/;
#include "rk3288-rock2-som.dtsi"
/ {
model = "Radxa Rock 2 Square";
compatible = "radxa,rock2-square", "rockchip,rk3288";
chosen {
stdout-path = "serial2:115200n8";
};
ir: ir-receiver {
compatible = "gpio-ir-receiver";
gpios = <&gpio8 1 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&ir_int>;
};
sound {
compatible = "simple-audio-card";
simple-audio-card,name = "SPDIF";
simple-audio-card,dai-link@1 { /* S/PDIF - S/PDIF */
cpu { sound-dai = <&spdif>; };
codec { sound-dai = <&spdif_out>; };
};
};
spdif_out: spdif-out {
compatible = "linux,spdif-dit";
#sound-dai-cells = <0>;
};
vcc_usb_host: vcc-host-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 14 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&host_vbus_drv>;
/* Always on as the rockchip usb phy doesn't have a vbus-supply
* property
*/
regulator-always-on;
regulator-name = "vcc_host";
};
vcc_sd: sdmmc-regulator {
compatible = "regulator-fixed";
gpio = <&gpio7 11 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_pwr>;
regulator-name = "vcc_sd";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
vin-supply = <&vcc_io>;
};
};
&sdmmc {
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
card-detect-delay = <200>;
disable-wp; /* wp not hooked up */
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
vmmc-supply = <&vcc_sd>;
vqmmc-supply = <&vccio_sd>;
status = "okay";
};
&gmac {
status = "okay";
};
&hdmi {
ddc-i2c-bus = <&i2c5>;
status = "okay";
};
&i2c0 {
hym8563@51 {
compatible = "haoyu,hym8563";
reg = <0x51>;
#clock-cells = <0>;
clock-frequency = <32768>;
clock-output-names = "xin32k";
interrupt-parent = <&gpio0>;
interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
pinctrl-names = "default";
pinctrl-0 = <&pmic_int>;
};
};
&i2c5 {
status = "okay";
};
&pinctrl {
ir {
ir_int: ir-int {
rockchip,pins = <8 1 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
pmic {
pmic_int: pmic-int {
rockchip,pins = <0 4 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
usb {
host_vbus_drv: host-vbus-drv {
rockchip,pins = <0 14 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
sdmmc {
sdmmc_pwr: sdmmc-pwr {
rockchip,pins = <7 11 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
&spdif {
status = "okay";
};
&uart2 {
status = "okay";
reg-shift = <2>;
};
&usbphy {
status = "okay";
};
&usb_host0_ehci {
status = "okay";
};

View File

@@ -1,205 +0,0 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Google Veyron (and derivatives) board device tree source
*
* Copyright 2014 Google, Inc
*/
#include <dt-bindings/clock/rockchip,rk808.h>
#include <dt-bindings/input/input.h>
#include "rk3288-veyron.dtsi"
/ {
aliases {
i2c20 = &i2c_tunnel;
video0 = &vopl;
video1 = &vopb;
};
gpio_keys: gpio-keys {
pinctrl-0 = <&pwr_key_h &ap_lid_int_l>;
lid {
label = "Lid";
gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
linux,code = <0>; /* SW_LID */
linux,input-type = <5>; /* EV_SW */
debounce-interval = <1>;
gpio-key,wakeup;
};
};
gpio-charger {
compatible = "gpio-charger";
gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&ac_present_ap>;
charger-type = "mains";
};
/* A non-regulated voltage from power supply or battery */
vccsys: vccsys {
compatible = "regulator-fixed";
regulator-name = "vccsys";
regulator-boot-on;
regulator-always-on;
};
vcc33_sys: vcc33-sys {
vin-supply = <&vccsys>;
};
vcc_5v: vcc-5v {
vin-supply = <&vccsys>;
};
/* This turns on vbus for host1 (dwc2) */
vcc5_host1: vcc5-host1-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&host1_pwr_en>;
regulator-name = "vcc5_host1";
regulator-always-on;
regulator-boot-on;
};
/* This turns on vbus for otg for host mode (dwc2) */
vcc5v_otg: vcc5v-otg-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&usbotg_pwren_h>;
regulator-name = "vcc5_host2";
regulator-always-on;
regulator-boot-on;
};
};
&rk808 {
regulators {
vcc33_ccd: LDO_REG8 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc33_ccd";
regulator-suspend-mem-disabled;
};
};
};
&spi0 {
status = "okay";
spi-activate-delay = <100>;
spi-max-frequency = <3000000>;
spi-deactivate-delay = <200>;
cros_ec: ec@0 {
compatible = "google,cros-ec-spi";
spi-max-frequency = <3000000>;
interrupt-parent = <&gpio7>;
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
ec-interrupt = <&gpio7 7 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&ec_int>;
reg = <0>;
google,cros-ec-spi-pre-delay = <30>;
i2c_tunnel: i2c-tunnel {
compatible = "google,cros-ec-i2c-tunnel";
google,remote-bus = <0>;
#address-cells = <1>;
#size-cells = <0>;
};
};
};
&i2c4 {
trackpad@15 {
compatible = "elan,i2c_touchpad";
interrupt-parent = <&gpio7>;
interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
pinctrl-names = "default";
pinctrl-0 = <&trackpad_int>;
reg = <0x15>;
vcc-supply = <&vcc33_io>;
wakeup-source;
};
};
&pinctrl {
pinctrl-0 = <
/* Common for sleep and wake, but no owners */
&ddr0_retention
&ddrio_pwroff
&global_pwroff
/* Wake only */
&suspend_l_wake
&bt_dev_wake_awake
>;
pinctrl-1 = <
/* Common for sleep and wake, but no owners */
&ddr0_retention
&ddrio_pwroff
&global_pwroff
/* Sleep only */
&suspend_l_sleep
&bt_dev_wake_sleep
>;
buttons {
ap_lid_int_l: ap-lid-int-l {
rockchip,pins = <0 6 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
charger {
ac_present_ap: ac-present-ap {
rockchip,pins = <0 8 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
cros-ec {
ec_int: ec-int {
rockchip,pins = <7 7 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
sdmmc {
sdmmc_wp_gpio: sdmmc-wp-gpio {
rockchip,pins = <7 10 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
suspend {
suspend_l_wake: suspend-l-wake {
rockchip,pins = <0 17 RK_FUNC_GPIO &pcfg_output_low>;
};
suspend_l_sleep: suspend-l-sleep {
rockchip,pins = <0 17 RK_FUNC_GPIO &pcfg_output_high>;
};
};
trackpad {
trackpad_int: trackpad-int {
rockchip,pins = <7 3 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
usb-host {
host1_pwr_en: host1-pwr-en {
rockchip,pins = <0 11 RK_FUNC_GPIO &pcfg_pull_none>;
};
usbotg_pwren_h: usbotg-pwren-h {
rockchip,pins = <0 12 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
#include "cros-ec-keyboard.dtsi"

View File

@@ -1,208 +0,0 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Google Veyron Jerry Rev 3+ board device tree source
*
* Copyright 2014 Google, Inc
*/
/dts-v1/;
#include "rk3288-veyron-chromebook.dtsi"
#include "cros-ec-sbs.dtsi"
/ {
model = "Google Jerry";
compatible = "google,veyron-jerry-rev7", "google,veyron-jerry-rev6",
"google,veyron-jerry-rev5", "google,veyron-jerry-rev4",
"google,veyron-jerry-rev3", "google,veyron-jerry",
"google,veyron", "rockchip,rk3288";
chosen {
stdout-path = &uart2;
};
panel_regulator: panel-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio7 14 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&lcd_enable_h>;
regulator-name = "panel_regulator";
vin-supply = <&vcc33_sys>;
};
vcc18_lcd: vcc18-lcd {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio2 13 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&avdd_1v8_disp_en>;
regulator-name = "vcc18_lcd";
regulator-always-on;
regulator-boot-on;
vin-supply = <&vcc18_wl>;
};
backlight_regulator: backlight-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&bl_pwr_en>;
regulator-name = "backlight_regulator";
vin-supply = <&vcc33_sys>;
startup-delay-us = <15000>;
};
sound {
compatible = "rockchip,audio-max98090-jerry";
cpu {
sound-dai = <&i2s 0>;
};
codec {
sound-dai = <&max98090 0>;
};
};
};
&gpio_keys {
power {
gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
};
};
&backlight {
power-supply = <&backlight_regulator>;
};
&panel {
power-supply= <&panel_regulator>;
};
&rk808 {
pinctrl-names = "default";
pinctrl-0 = <&pmic_int_l &dvs_1 &dvs_2>;
dvs-gpios = <&gpio7 12 GPIO_ACTIVE_HIGH>,
<&gpio7 15 GPIO_ACTIVE_HIGH>;
regulators {
mic_vcc: LDO_REG2 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "mic_vcc";
regulator-suspend-mem-disabled;
};
};
};
&sdmmc {
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
&sdmmc_bus4>;
disable-wp;
};
&vcc_5v {
enable-active-high;
gpio = <&gpio7 21 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&drv_5v>;
};
&vcc50_hdmi {
enable-active-high;
gpio = <&gpio5 19 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&vcc50_hdmi_en>;
};
&edp {
pinctrl-names = "default";
pinctrl-0 = <&edp_hpd>;
};
&pinctrl {
backlight {
bl_pwr_en: bl_pwr_en {
rockchip,pins = <2 12 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
buck-5v {
drv_5v: drv-5v {
rockchip,pins = <7 21 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
emmc {
/* Make sure eMMC is not in reset */
emmc_deassert_reset: emmc-deassert-reset {
rockchip,pins = <2 9 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
hdmi {
vcc50_hdmi_en: vcc50-hdmi-en {
rockchip,pins = <5 19 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
lcd {
lcd_enable_h: lcd-en {
rockchip,pins = <7 14 RK_FUNC_GPIO &pcfg_pull_none>;
};
avdd_1v8_disp_en: avdd-1v8-disp-en {
rockchip,pins = <2 13 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
pmic {
dvs_1: dvs-1 {
rockchip,pins = <7 12 RK_FUNC_GPIO &pcfg_pull_down>;
};
dvs_2: dvs-2 {
rockchip,pins = <7 15 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
};
&i2c4 {
status = "okay";
/*
* Trackpad pin control is shared between Elan and Synaptics devices
* so we have to pull it up to the bus level.
*/
pinctrl-names = "default";
pinctrl-0 = <&i2c4_xfer &trackpad_int>;
trackpad@15 {
compatible = "elan,i2c_touchpad";
interrupt-parent = <&gpio7>;
interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
/*
* Remove the inherited pinctrl settings to avoid clashing
* with bus-wide ones.
*/
/delete-property/pinctrl-names;
/delete-property/pinctrl-0;
reg = <0x15>;
vcc-supply = <&vcc33_io>;
wakeup-source;
};
trackpad@2c {
compatible = "hid-over-i2c";
interrupt-parent = <&gpio7>;
interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
reg = <0x2c>;
hid-descr-addr = <0x0020>;
vcc-supply = <&vcc33_io>;
wakeup-source;
};
};

View File

@@ -1,266 +0,0 @@
/*
* Google Veyron Mickey Rev 0 board device tree source
*
* Copyright 2015 Google, Inc
*
* This file is dual-licensed: you can use it either under the terms
* of the GPL or the X11 license, at your option. Note that this dual
* licensing only applies to this file, and not this project as a
* whole.
*
* a) This file 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.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Or, alternatively,
*
* b) Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
/dts-v1/;
#include "rk3288-veyron-chromebook.dtsi"
/ {
model = "Google Mickey";
compatible = "google,veyron-mickey-rev8", "google,veyron-mickey-rev7",
"google,veyron-mickey-rev6", "google,veyron-mickey-rev5",
"google,veyron-mickey-rev4", "google,veyron-mickey-rev3",
"google,veyron-mickey-rev2", "google,veyron-mickey-rev1",
"google,veyron-mickey-rev0", "google,veyron-mickey",
"google,veyron", "rockchip,rk3288";
vcc_5v: vcc-5v {
vin-supply = <&vcc33_sys>;
};
vcc33_io: vcc33_io {
compatible = "regulator-fixed";
regulator-name = "vcc33_io";
regulator-always-on;
regulator-boot-on;
vin-supply = <&vcc33_sys>;
};
};
&cpu_thermal {
/delete-node/ trips;
/delete-node/ cooling-maps;
trips {
cpu_alert_almost_warm: cpu_alert_almost_warm {
temperature = <63000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "passive";
};
cpu_alert_warm: cpu_alert_warm {
temperature = <65000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "passive";
};
cpu_alert_almost_hot: cpu_alert_almost_hot {
temperature = <80000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "passive";
};
cpu_alert_hot: cpu_alert_hot {
temperature = <82000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "passive";
};
cpu_alert_hotter: cpu_alert_hotter {
temperature = <84000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "passive";
};
cpu_alert_very_hot: cpu_alert_very_hot {
temperature = <85000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "passive";
};
cpu_crit: cpu_crit {
temperature = <90000>; /* millicelsius */
hysteresis = <2000>; /* millicelsius */
type = "critical";
};
};
cooling-maps {
/*
* After 1st level, throttle the CPU down to as low as 1.4 GHz
* and don't let the GPU go faster than 400 MHz. Note that we
* won't throttle the GPU lower than 400 MHz due to CPU
* heat--we'll let the GPU do the rest itself.
*/
cpu_warm_limit_cpu {
trip = <&cpu_alert_warm>;
cooling-device =
<&cpu0 THERMAL_NO_LIMIT 4>;
};
/*
* Add some discrete steps to help throttling system deal
* with the fact that there are two passive cooling devices:
* the CPU and the GPU.
*
* - 1.2 GHz - 1.0 GHz (almost hot)
* - 800 MHz (hot)
* - 800 MHz - 696 MHz (hotter)
* - 696 MHz - min (very hot)
*
* Note:
* - 800 MHz appears to be a "sweet spot" for me. I can run
* some pretty serious workload here and be happy.
* - After 696 MHz we stop lowering voltage, so throttling
* past there is less effective.
*/
cpu_almost_hot_limit_cpu {
trip = <&cpu_alert_almost_hot>;
cooling-device =
<&cpu0 5 6>;
};
cpu_hot_limit_cpu {
trip = <&cpu_alert_hot>;
cooling-device =
<&cpu0 7 7>;
};
cpu_hotter_limit_cpu {
trip = <&cpu_alert_hotter>;
cooling-device =
<&cpu0 7 8>;
};
cpu_very_hot_limit_cpu {
trip = <&cpu_alert_very_hot>;
cooling-device =
<&cpu0 8 THERMAL_NO_LIMIT>;
};
};
};
&emmc {
/delete-property/mmc-hs200-1_8v;
};
&i2c2 {
status = "disabled";
};
&i2c4 {
status = "disabled";
};
&i2s {
status = "okay";
clock-names = "i2s_hclk", "i2s_clk", "i2s_clk_out";
clocks = <&cru HCLK_I2S0>, <&cru SCLK_I2S0>, <&cru SCLK_I2S0_OUT>;
};
&rk808 {
pinctrl-names = "default";
pinctrl-0 = <&pmic_int_l &dvs_1 &dvs_2>;
dvs-gpios = <&gpio7 12 GPIO_ACTIVE_HIGH>,
<&gpio7 15 GPIO_ACTIVE_HIGH>;
/delete-property/ vcc6-supply;
/delete-property/ vcc12-supply;
vcc11-supply = <&vcc33_sys>;
regulators {
/* vcc33_io is sourced directly from vcc33_sys */
/delete-node/ LDO_REG1;
/delete-node/ LDO_REG7;
/* This is not a pwren anymore, but the real power supply */
vdd10_lcd: LDO_REG7 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-name = "vdd10_lcd";
regulator-suspend-mem-disabled;
};
vcc18_lcd: LDO_REG8 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc18_lcd";
regulator-suspend-mem-disabled;
};
};
};
&pinctrl {
hdmi {
power_hdmi_on: power-hdmi-on {
rockchip,pins = <7 11 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
pmic {
dvs_1: dvs-1 {
rockchip,pins = <7 12 RK_FUNC_GPIO &pcfg_pull_down>;
};
dvs_2: dvs-2 {
rockchip,pins = <7 15 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
};
&sdmmc {
status = "disabled";
};
&sdio0 {
status = "disabled";
};
&sdmmc {
status = "disabled";
};
&spi0 {
status = "disabled";
};
&usb_host0_ehci {
status = "disabled";
};
&usb_host1 {
status = "disabled";
};
&vcc50_hdmi {
enable-active-high;
gpio = <&gpio7 11 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&power_hdmi_on>;
};

View File

@@ -1,302 +0,0 @@
/*
* Google Veyron Minnie Rev 0+ board device tree source
*
* Copyright 2015 Google, Inc
*
* This file is dual-licensed: you can use it either under the terms
* of the GPL or the X11 license, at your option. Note that this dual
* licensing only applies to this file, and not this project as a
* whole.
*
* a) This file 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.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Or, alternatively,
*
* b) Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
/dts-v1/;
#include "rk3288-veyron-chromebook.dtsi"
/ {
model = "Google Minnie";
compatible = "google,veyron-minnie-rev4", "google,veyron-minnie-rev3",
"google,veyron-minnie-rev2", "google,veyron-minnie-rev1",
"google,veyron-minnie-rev0", "google,veyron-minnie",
"google,veyron", "rockchip,rk3288";
backlight_regulator: backlight-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&bl_pwr_en>;
regulator-name = "backlight_regulator";
vin-supply = <&vcc33_sys>;
startup-delay-us = <15000>;
};
panel_regulator: panel-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio7 14 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&lcd_enable_h>;
regulator-name = "panel_regulator";
startup-delay-us = <100000>;
vin-supply = <&vcc33_sys>;
};
vcc18_lcd: vcc18-lcd {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio2 13 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&avdd_1v8_disp_en>;
regulator-name = "vcc18_lcd";
regulator-always-on;
regulator-boot-on;
vin-supply = <&vcc18_wl>;
};
sound {
compatible = "rockchip,audio-max98090-jerry";
cpu {
sound-dai = <&i2s 0>;
};
codec {
sound-dai = <&max98090 0>;
};
};
};
&backlight {
/* Minnie panel PWM must be >= 1%, so start non-zero brightness at 3 */
brightness-levels = <
0 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95
96 97 98 99 100 101 102 103
104 105 106 107 108 109 110 111
112 113 114 115 116 117 118 119
120 121 122 123 124 125 126 127
128 129 130 131 132 133 134 135
136 137 138 139 140 141 142 143
144 145 146 147 148 149 150 151
152 153 154 155 156 157 158 159
160 161 162 163 164 165 166 167
168 169 170 171 172 173 174 175
176 177 178 179 180 181 182 183
184 185 186 187 188 189 190 191
192 193 194 195 196 197 198 199
200 201 202 203 204 205 206 207
208 209 210 211 212 213 214 215
216 217 218 219 220 221 222 223
224 225 226 227 228 229 230 231
232 233 234 235 236 237 238 239
240 241 242 243 244 245 246 247
248 249 250 251 252 253 254 255>;
power-supply = <&backlight_regulator>;
};
&emmc {
/delete-property/mmc-hs200-1_8v;
};
&gpio_keys {
pinctrl-0 = <&pwr_key_h &ap_lid_int_l &volum_down_l &volum_up_l>;
volum_down {
label = "Volum_down";
gpios = <&gpio5 11 GPIO_ACTIVE_LOW>;
linux,code = <KEY_VOLUMEDOWN>;
debounce-interval = <100>;
};
volum_up {
label = "Volum_up";
gpios = <&gpio5 10 GPIO_ACTIVE_LOW>;
linux,code = <KEY_VOLUMEUP>;
debounce-interval = <100>;
};
};
&i2c_tunnel {
battery: bq27500@55 {
compatible = "ti,bq27500";
reg = <0x55>;
};
};
&i2c3 {
status = "okay";
clock-frequency = <400000>;
i2c-scl-falling-time-ns = <50>;
i2c-scl-rising-time-ns = <300>;
touchscreen@10 {
compatible = "elan,ekth3500";
reg = <0x10>;
interrupt-parent = <&gpio2>;
interrupts = <14 IRQ_TYPE_EDGE_FALLING>;
pinctrl-names = "default";
pinctrl-0 = <&touch_int &touch_rst>;
reset-gpios = <&gpio2 15 GPIO_ACTIVE_LOW>;
vcc33-supply = <&vcc33_touch>;
vccio-supply = <&vcc33_touch>;
};
};
&panel {
compatible = "auo,b101ean01", "simple-panel";
power-supply= <&panel_regulator>;
};
&rk808 {
pinctrl-names = "default";
pinctrl-0 = <&pmic_int_l &dvs_1 &dvs_2>;
regulators {
vcc33_touch: LDO_REG2 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc33_touch";
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc5v_touch: SWITCH_REG2 {
regulator-name = "vcc5v_touch";
regulator-state-mem {
regulator-off-in-suspend;
};
};
};
};
&sdmmc {
disable-wp;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
&sdmmc_bus4>;
};
&vcc_5v {
enable-active-high;
gpio = <&gpio7 21 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&drv_5v>;
};
&vcc50_hdmi {
enable-active-high;
gpio = <&gpio5 19 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&vcc50_hdmi_en>;
};
&pinctrl {
backlight {
bl_pwr_en: bl_pwr_en {
rockchip,pins = <2 12 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
buck-5v {
drv_5v: drv-5v {
rockchip,pins = <7 21 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
buttons {
volum_down_l: volum-down-l {
rockchip,pins = <5 11 RK_FUNC_GPIO &pcfg_pull_up>;
};
volum_up_l: volum-up-l {
rockchip,pins = <5 10 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
hdmi {
vcc50_hdmi_en: vcc50-hdmi-en {
rockchip,pins = <5 19 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
lcd {
lcd_enable_h: lcd-en {
rockchip,pins = <7 14 RK_FUNC_GPIO &pcfg_pull_none>;
};
avdd_1v8_disp_en: avdd-1v8-disp-en {
rockchip,pins = <2 13 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
pmic {
dvs_1: dvs-1 {
rockchip,pins = <7 12 RK_FUNC_GPIO &pcfg_pull_down>;
};
dvs_2: dvs-2 {
rockchip,pins = <7 15 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
prochot {
gpio_prochot: gpio-prochot {
rockchip,pins = <2 8 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
touchscreen {
touch_int: touch-int {
rockchip,pins = <2 14 RK_FUNC_GPIO &pcfg_pull_none>;
};
touch_rst: touch-rst {
rockchip,pins = <2 15 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};

View File

@@ -1,143 +0,0 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Google Veyron Speedy Rev 1+ board device tree source
*
* Copyright 2015 Google, Inc
*/
/dts-v1/;
#include "rk3288-veyron-chromebook.dtsi"
#include "cros-ec-sbs.dtsi"
#include "rk3288-veyron-speedy-u-boot.dtsi"
/ {
model = "Google Speedy";
compatible = "google,veyron-speedy-rev9", "google,veyron-speedy-rev8",
"google,veyron-speedy-rev7", "google,veyron-speedy-rev6",
"google,veyron-speedy-rev5", "google,veyron-speedy-rev4",
"google,veyron-speedy-rev3", "google,veyron-speedy-rev2",
"google,veyron-speedy", "google,veyron", "rockchip,rk3288";
panel_regulator: panel-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio7 RK_PB6 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&lcd_enable_h>;
regulator-name = "panel_regulator";
startup-delay-us = <100000>;
vin-supply = <&vcc33_sys>;
};
vcc18_lcd: vcc18-lcd {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&avdd_1v8_disp_en>;
regulator-name = "vcc18_lcd";
regulator-always-on;
regulator-boot-on;
vin-supply = <&vcc18_wl>;
};
backlight_regulator: backlight-regulator {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&bl_pwr_en>;
regulator-name = "backlight_regulator";
vin-supply = <&vcc33_sys>;
startup-delay-us = <15000>;
};
};
&backlight {
power-supply = <&backlight_regulator>;
};
&cpu_alert0 {
temperature = <65000>;
};
&cpu_alert1 {
temperature = <70000>;
};
&edp {
/delete-property/pinctrl-names;
/delete-property/pinctrl-0;
force-hpd;
};
&panel {
power-supply = <&panel_regulator>;
};
&rk808 {
pinctrl-names = "default";
pinctrl-0 = <&pmic_int_l>;
};
&sdmmc {
disable-wp;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
&sdmmc_bus4>;
};
&vcc_5v {
enable-active-high;
gpio = <&gpio7 RK_PC5 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&drv_5v>;
};
&vcc50_hdmi {
enable-active-high;
gpio = <&gpio5 RK_PC3 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&vcc50_hdmi_en>;
};
&pinctrl {
backlight {
bl_pwr_en: bl_pwr_en {
rockchip,pins = <2 12 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
buck-5v {
drv_5v: drv-5v {
rockchip,pins = <7 21 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
hdmi {
vcc50_hdmi_en: vcc50-hdmi-en {
rockchip,pins = <5 19 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
lcd {
lcd_enable_h: lcd-en {
rockchip,pins = <7 14 RK_FUNC_GPIO &pcfg_pull_none>;
};
avdd_1v8_disp_en: avdd-1v8-disp-en {
rockchip,pins = <2 13 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
pmic {
dvs_1: dvs-1 {
rockchip,pins = <7 12 RK_FUNC_GPIO &pcfg_pull_down>;
};
dvs_2: dvs-2 {
rockchip,pins = <7 15 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
};

View File

@@ -1,795 +0,0 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Google Veyron (and derivatives) board device tree source
*
* Copyright 2014 Google, Inc
*/
#include <dt-bindings/clock/rockchip,rk808.h>
#include <dt-bindings/input/input.h>
#include "rk3288.dtsi"
/ {
memory {
reg = <0x0 0x0 0x0 0x80000000>;
};
chosen {
stdout-path = &uart2;
};
firmware {
chromeos {
pinctrl-names = "default";
pinctrl-0 = <&fw_wp_ap>;
write-protect-gpio = <&gpio7 6 GPIO_ACTIVE_LOW>;
};
};
backlight: backlight {
compatible = "pwm-backlight";
brightness-levels = <
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95
96 97 98 99 100 101 102 103
104 105 106 107 108 109 110 111
112 113 114 115 116 117 118 119
120 121 122 123 124 125 126 127
128 129 130 131 132 133 134 135
136 137 138 139 140 141 142 143
144 145 146 147 148 149 150 151
152 153 154 155 156 157 158 159
160 161 162 163 164 165 166 167
168 169 170 171 172 173 174 175
176 177 178 179 180 181 182 183
184 185 186 187 188 189 190 191
192 193 194 195 196 197 198 199
200 201 202 203 204 205 206 207
208 209 210 211 212 213 214 215
216 217 218 219 220 221 222 223
224 225 226 227 228 229 230 231
232 233 234 235 236 237 238 239
240 241 242 243 244 245 246 247
248 249 250 251 252 253 254 255>;
default-brightness-level = <128>;
enable-gpios = <&gpio7 2 GPIO_ACTIVE_HIGH>;
backlight-boot-off;
pinctrl-names = "default";
pinctrl-0 = <&bl_en>;
pwms = <&pwm0 0 1000000 0>;
};
panel: panel {
compatible ="cnm,n116bgeea2","simple-panel";
status = "okay";
power-supply = <&vcc33_lcd>;
backlight = <&backlight>;
};
gpio_keys: gpio-keys {
compatible = "gpio-keys";
pinctrl-names = "default";
pinctrl-0 = <&pwr_key_h>;
power {
label = "Power";
gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>;
linux,code = <KEY_POWER>;
debounce-interval = <100>;
gpio-key,wakeup;
};
};
gpio-restart {
compatible = "gpio-restart";
gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&ap_warm_reset_h>;
priority = /bits/ 8 <200>;
};
emmc_pwrseq: emmc-pwrseq {
compatible = "mmc-pwrseq-emmc";
pinctrl-0 = <&emmc_reset>;
pinctrl-names = "default";
reset-gpios = <&gpio2 9 GPIO_ACTIVE_HIGH>;
};
sound {
compatible = "rockchip,rockchip-audio-max98090";
rockchip,model = "ROCKCHIP-I2S";
rockchip,i2s-controller = <&i2s>;
rockchip,audio-codec = <&max98090>;
rockchip,hp-det-gpios = <&gpio6 5 GPIO_ACTIVE_HIGH>;
rockchip,mic-det-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>;
rockchip,headset-codec = <&headsetcodec>;
pinctrl-names = "default";
pinctrl-0 = <&mic_det>, <&hp_det>;
};
vdd_logic: pwm-regulator {
compatible = "pwm-regulator";
pwms = <&pwm1 0 2000 0>;
voltage-table = <1350000 0>,
<1300000 10>,
<1250000 20>,
<1200000 31>,
<1150000 41>,
<1100000 52>,
<1050000 62>,
<1000000 72>,
< 950000 83>;
regulator-min-microvolt = <950000>;
regulator-max-microvolt = <1350000>;
regulator-name = "vdd_logic";
regulator-ramp-delay = <4000>;
};
vcc33_sys: vcc33-sys {
compatible = "regulator-fixed";
regulator-name = "vcc33_sys";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
vin-supply = <&vccsys>;
};
vcc_5v: vcc-5v {
compatible = "regulator-fixed";
regulator-name = "vcc_5v";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
};
vcc50_hdmi: vcc50-hdmi {
compatible = "regulator-fixed";
regulator-name = "vcc50_hdmi";
regulator-always-on;
regulator-boot-on;
vin-supply = <&vcc_5v>;
};
bt_regulator: bt-regulator {
/*
* On the module itself this is one of these (depending
* on the actual card pouplated):
* - BT_I2S_WS_BT_RFDISABLE_L
* - No connect
*/
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio4 29 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&bt_enable_l>;
regulator-name = "bt_regulator";
};
wifi_regulator: wifi-regulator {
/*
* On the module itself this is one of these (depending
* on the actual card populated):
* - SDIO_RESET_L_WL_REG_ON
* - PDN (power down when low)
*/
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio4 28 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&wifi_enable_h>;
regulator-name = "wifi_regulator";
/* Faux input supply. See bt_regulator description. */
vin-supply = <&bt_regulator>;
};
};
&cpu0 {
cpu0-supply = <&vdd_cpu>;
};
&efuse {
status = "okay";
};
&emmc {
broken-cd;
bus-width = <8>;
cap-mmc-highspeed;
mmc-hs200-1_8v;
mmc-pwrseq = <&emmc_pwrseq>;
disable-wp;
non-removable;
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8 &emmc_pwr>;
status = "okay";
};
&sdio0 {
broken-cd;
bus-width = <4>;
cap-sd-highspeed;
sd-uhs-sdr12;
sd-uhs-sdr25;
sd-uhs-sdr50;
sd-uhs-sdr104;
cap-sdio-irq;
card-external-vcc-supply = <&wifi_regulator>;
clocks = <&cru HCLK_SDIO0>, <&cru SCLK_SDIO0>, <&cru SCLK_SDIO0_DRV>,
<&cru SCLK_SDIO0_SAMPLE>, <&rk808 RK808_CLKOUT1>;
clock-names = "biu", "ciu", "ciu_drv", "ciu_sample", "card_ext_clock";
keep-power-in-suspend;
non-removable;
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&sdio0_clk &sdio0_cmd &sdio0_bus4>;
status = "okay";
vmmc-supply = <&vcc33_sys>;
vqmmc-supply = <&vcc18_wl>;
};
&sdmmc {
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
sd-uhs-sdr12;
sd-uhs-sdr25;
sd-uhs-sdr50;
sd-uhs-sdr104;
card-detect-delay = <200>;
cd-gpios = <&gpio7 5 GPIO_ACTIVE_LOW>;
num-slots = <1>;
status = "okay";
vmmc-supply = <&vcc33_sd>;
vqmmc-supply = <&vccio_sd>;
};
&spi2 {
status = "okay";
spi_flash: spiflash@0 {
compatible = "spidev", "jedec,spi-nor";
spi-max-frequency = <20000000>; /* Reduce for Dediprog em100 pro */
reg = <0>;
};
};
&i2c0 {
status = "okay";
clock-frequency = <400000>;
i2c-scl-falling-time-ns = <50>; /* 2.5ns measured */
i2c-scl-rising-time-ns = <100>; /* 45ns measured */
rk808: pmic@1b {
compatible = "rockchip,rk808";
clock-output-names = "xin32k", "wifibt_32kin";
interrupt-parent = <&gpio0>;
interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&pmic_int_l>;
reg = <0x1b>;
rockchip,system-power-controller;
wakeup-source;
#clock-cells = <1>;
vcc1-supply = <&vcc33_sys>;
vcc2-supply = <&vcc33_sys>;
vcc3-supply = <&vcc33_sys>;
vcc4-supply = <&vcc33_sys>;
vcc6-supply = <&vcc_5v>;
vcc7-supply = <&vcc33_sys>;
vcc8-supply = <&vcc33_sys>;
vcc9-supply = <&vcc_5v>;
vcc10-supply = <&vcc33_sys>;
vcc11-supply = <&vcc_5v>;
vcc12-supply = <&vcc_18>;
vddio-supply = <&vcc33_io>;
regulators {
vdd_cpu: DCDC_REG1 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <750000>;
regulator-max-microvolt = <1450000>;
regulator-name = "vdd_arm";
regulator-ramp-delay = <6001>;
regulator-suspend-mem-disabled;
};
vdd_gpu: DCDC_REG2 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <1250000>;
regulator-name = "vdd_gpu";
regulator-ramp-delay = <6001>;
regulator-suspend-mem-disabled;
};
vcc135_ddr: DCDC_REG3 {
regulator-always-on;
regulator-boot-on;
regulator-name = "vcc135_ddr";
regulator-suspend-mem-enabled;
};
/*
* vcc_18 has several aliases. (vcc18_flashio and
* vcc18_wl). We'll add those aliases here just to
* make it easier to follow the schematic. The signals
* are actually hooked together and only separated for
* power measurement purposes).
*/
vcc18_wl: vcc18_flashio: vcc_18: DCDC_REG4 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc_18";
regulator-suspend-mem-microvolt = <1800000>;
};
/*
* Note that both vcc33_io and vcc33_pmuio are always
* powered together. To simplify the logic in the dts
* we just refer to vcc33_io every time something is
* powered from vcc33_pmuio. In fact, on later boards
* (such as danger) they're the same net.
*/
vcc33_io: LDO_REG1 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc33_io";
regulator-suspend-mem-microvolt = <3300000>;
};
vdd_10: LDO_REG3 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-name = "vdd_10";
regulator-suspend-mem-microvolt = <1000000>;
};
vccio_sd: LDO_REG4 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vccio_sd";
regulator-suspend-mem-disabled;
};
vcc33_sd: LDO_REG5 {
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "vcc33_sd";
regulator-suspend-mem-disabled;
};
vcc18_codec: LDO_REG6 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-name = "vcc18_codec";
regulator-suspend-mem-disabled;
};
vdd10_lcd_pwren_h: LDO_REG7 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <2500000>;
regulator-max-microvolt = <2500000>;
regulator-name = "vdd10_lcd_pwren_h";
regulator-suspend-mem-disabled;
};
vcc33_lcd: SWITCH_REG1 {
regulator-always-on;
regulator-boot-on;
regulator-name = "vcc33_lcd";
regulator-suspend-mem-disabled;
};
};
};
};
&i2c1 {
status = "okay";
clock-frequency = <400000>;
i2c-scl-falling-time-ns = <50>; /* 2.5ns measured */
i2c-scl-rising-time-ns = <100>; /* 40ns measured */
tpm: tpm@20 {
compatible = "infineon,slb9645tt";
reg = <0x20>;
powered-while-suspended;
};
};
&i2c2 {
status = "okay";
/* 100kHz since 4.7k resistors don't rise fast enough */
clock-frequency = <100000>;
i2c-scl-falling-time-ns = <50>; /* 10ns measured */
i2c-scl-rising-time-ns = <800>; /* 600ns measured */
max98090: max98090@10 {
compatible = "maxim,max98090";
reg = <0x10>;
#sound-dai-cells = <0>;
interrupt-parent = <&gpio6>;
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
pinctrl-names = "default";
pinctrl-0 = <&int_codec>;
};
};
&i2c3 {
status = "okay";
clock-frequency = <400000>;
i2c-scl-falling-time-ns = <50>;
i2c-scl-rising-time-ns = <300>;
};
&i2c4 {
status = "okay";
clock-frequency = <400000>;
i2c-scl-falling-time-ns = <50>; /* 11ns measured */
i2c-scl-rising-time-ns = <300>; /* 225ns measured */
headsetcodec: ts3a227e@3b {
compatible = "ti,ts3a227e";
reg = <0x3b>;
interrupt-parent = <&gpio0>;
interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&ts3a227e_int_l>;
ti,micbias = <7>; /* MICBIAS = 2.8V */
};
};
&i2c5 {
status = "okay";
clock-frequency = <100000>;
i2c-scl-falling-time-ns = <300>;
i2c-scl-rising-time-ns = <1000>;
};
&i2s {
status = "okay";
clock-names = "i2s_hclk", "i2s_clk", "i2s_clk_out";
clocks = <&cru HCLK_I2S0>, <&cru SCLK_I2S0>, <&cru SCLK_I2S0_OUT>;
};
&io_domains {
audio-supply = <&vcc18_codec>;
bb-supply = <&vcc33_io>;
dvp-supply = <&vcc_18>;
flash0-supply = <&vcc18_flashio>;
gpio1830-supply = <&vcc33_io>;
gpio30-supply = <&vcc33_io>;
lcdc-supply = <&vcc33_lcd>;
sdcard-supply = <&vccio_sd>;
wifi-supply = <&vcc18_wl>;
status = "okay";
};
&wdt {
status = "okay";
};
&pwm0 {
status = "okay";
};
&pwm1 {
status = "okay";
};
&uart0 {
status = "okay";
/* Pins don't include flow control by default; add that in */
pinctrl-names = "default";
pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
/* We need to go faster than 24MHz, so adjust clock parents / rates */
assigned-clocks = <&cru SCLK_UART0>;
assigned-clock-rates = <48000000>;
};
&uart1 {
status = "okay";
};
&uart2 {
status = "okay";
reg-shift = <2>;
};
&vopb {
status = "okay";
};
&vopb_mmu {
status = "okay";
};
&vopl {
status = "okay";
};
&vopl_mmu {
status = "okay";
};
&edp {
status = "okay";
rockchip,panel = <&panel>;
};
&hdmi {
status = "okay";
};
&gpu {
status = "okay";
};
&tsadc {
tsadc-tshut-mode = <1>; /* tshut mode 0:CRU 1:GPIO */
tsadc-tshut-polarity = <1>; /* tshut polarity 0:LOW 1:HIGH */
status = "okay";
};
&pinctrl {
pinctrl-names = "default", "sleep";
pinctrl-0 = <
/* Common for sleep and wake, but no owners */
&ddr0_retention
&ddrio_pwroff
&global_pwroff
/* Wake only */
&bt_dev_wake_awake
>;
pinctrl-1 = <
/* Common for sleep and wake, but no owners */
&ddr0_retention
&ddrio_pwroff
&global_pwroff
/* Sleep only */
&bt_dev_wake_sleep
>;
/* Add this for sdmmc pins to SD card */
pcfg_pull_none_drv_8ma: pcfg-pull-none-drv-8ma {
drive-strength = <8>;
};
pcfg_pull_up_drv_8ma: pcfg-pull-up-drv-8ma {
bias-pull-up;
drive-strength = <8>;
};
pcfg_output_high: pcfg-output-high {
output-high;
};
pcfg_output_low: pcfg-output-low {
output-low;
};
backlight {
bl_en: bl-en {
rockchip,pins = <7 2 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
buttons {
pwr_key_h: pwr-key-h {
rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
codec {
hp_det: hp-det {
rockchip,pins = <6 5 RK_FUNC_GPIO &pcfg_pull_up>;
};
int_codec: int-codec {
rockchip,pins = <6 7 RK_FUNC_GPIO &pcfg_pull_up>;
};
mic_det: mic-det {
rockchip,pins = <6 11 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
emmc {
emmc_reset: emmc-reset {
rockchip,pins = <2 9 RK_FUNC_GPIO &pcfg_pull_none>;
};
/*
* We run eMMC at max speed; bump up drive strength.
* We also have external pulls, so disable the internal ones.
*/
emmc_clk: emmc-clk {
rockchip,pins = <3 18 RK_FUNC_2 &pcfg_pull_none_drv_8ma>;
};
emmc_cmd: emmc-cmd {
rockchip,pins = <3 16 RK_FUNC_2 &pcfg_pull_none_drv_8ma>;
};
emmc_bus8: emmc-bus8 {
rockchip,pins = <3 0 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
<3 1 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
<3 2 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
<3 3 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
<3 4 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
<3 5 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
<3 6 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
<3 7 RK_FUNC_2 &pcfg_pull_none_drv_8ma>;
};
};
headset {
ts3a227e_int_l: ts3a227e-int-l {
rockchip,pins = <0 3 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
pmic {
pmic_int_l: pmic-int-l {
/*
* Causes jerry to hang when probing bus 0
* rockchip,pins = <RK_GPIO0 4 RK_FUNC_GPIO &pcfg_pull_up>;
*/
};
};
reboot {
ap_warm_reset_h: ap-warm-reset-h {
rockchip,pins = <RK_GPIO0 13 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
sdio0 {
wifi_enable_h: wifienable-h {
rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_pull_none>;
};
/* NOTE: mislabelled on schematic; should be bt_enable_h */
bt_enable_l: bt-enable-l {
rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_none>;
};
/*
* We run sdio0 at max speed; bump up drive strength.
* We also have external pulls, so disable the internal ones.
*/
sdio0_bus4: sdio0-bus4 {
rockchip,pins = <4 20 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
<4 21 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
<4 22 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
<4 23 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
};
sdio0_cmd: sdio0-cmd {
rockchip,pins = <4 24 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
};
sdio0_clk: sdio0-clk {
rockchip,pins = <4 25 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
};
/*
* These pins are only present on very new veyron boards; on
* older boards bt_dev_wake is simply always high. Note that
* gpio4_26 is a NC on old veyron boards, so it doesn't hurt
* to map this pin everywhere
*/
bt_dev_wake_sleep: bt-dev-wake-sleep {
rockchip,pins = <4 26 RK_FUNC_GPIO &pcfg_output_low>;
};
bt_dev_wake_awake: bt-dev-wake-awake {
rockchip,pins = <4 26 RK_FUNC_GPIO &pcfg_output_high>;
};
};
sdmmc {
/*
* We run sdmmc at max speed; bump up drive strength.
* We also have external pulls, so disable the internal ones.
*/
sdmmc_bus4: sdmmc-bus4 {
rockchip,pins = <6 16 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
<6 17 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
<6 18 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
<6 19 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
};
sdmmc_clk: sdmmc-clk {
rockchip,pins = <6 20 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
};
sdmmc_cmd: sdmmc-cmd {
rockchip,pins = <6 21 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
};
/*
* Builtin CD line is hooked to ground to prevent JTAG at boot
* (and also to get the voltage rail correct). Make we
* configure gpio6_C6 as GPIO so dw_mmc builtin CD doesn't
* think there's a card inserted
*/
sdmmc_cd_disabled: sdmmc-cd-disabled {
rockchip,pins = <6 22 RK_FUNC_GPIO &pcfg_pull_none>;
};
/* This is where we actually hook up CD */
sdmmc_cd_gpio: sdmmc-cd-gpio {
rockchip,pins = <7 5 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
tpm {
tpm_int_h: tpm-int-h {
rockchip,pins = <7 4 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
write-protect {
fw_wp_ap: fw-wp-ap {
rockchip,pins = <7 6 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
&usbphy {
status = "okay";
};
&usb_host0_ehci {
status = "okay";
needs-reset-on-resume;
};
&usb_host1 {
status = "okay";
};
&usb_otg {
dr_mode = "host";
status = "okay";
assigned-clocks = <&cru SCLK_USBPHY480M_SRC>;
assigned-clock-parents = <&cru SCLK_OTGPHY0>;
};

View File

@@ -1,361 +0,0 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
* Copyright (c) 2019 Vamrs Limited
* Copyright (c) 2019 Amarula Solutions(India)
*/
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/rockchip.h>
/ {
compatible = "vamrs,rk3288-vmarc-som", "rockchip,rk3288";
vccio_flash: vccio-flash-regulator {
compatible = "regulator-fixed";
regulator-name = "vccio_flash";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
vin-supply = <&vcc_io>;
};
};
&emmc {
bus-width = <8>;
cap-mmc-highspeed;
disable-wp;
non-removable;
pinctrl-names = "default";
pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_pwr &emmc_bus8>;
vmmc-supply = <&vcc_io>;
vqmmc-supply = <&vccio_flash>;
status = "okay";
};
&gmac {
assigned-clocks = <&cru SCLK_MAC>;
phy-supply = <&vcc_io>;
snps,reset-gpio = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
};
&hdmi {
ddc-i2c-bus = <&i2c5>;
pinctrl-names = "default";
pinctrl-0 = <&hdmi_cec_c0>;
};
&i2c0 {
clock-frequency = <400000>;
status = "okay";
rk808: pmic@1b {
compatible = "rockchip,rk808";
reg = <0x1b>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&pmic_int &global_pwroff>;
rockchip,system-power-controller;
wakeup-source;
#clock-cells = <1>;
clock-output-names = "rk808-clkout1", "rk808-clkout2";
vcc1-supply = <&vcc5v0_sys>;
vcc2-supply = <&vcc5v0_sys>;
vcc3-supply = <&vcc5v0_sys>;
vcc4-supply = <&vcc5v0_sys>;
vcc6-supply = <&vcc5v0_sys>;
vcc7-supply = <&vcc5v0_sys>;
vcc8-supply = <&vcc_io>;
vcc9-supply = <&vcc_io>;
vcc10-supply = <&vcc5v0_sys>;
vcc11-supply = <&vcc5v0_sys>;
vcc12-supply = <&vcc_io>;
vddio-supply = <&vcc_io>;
regulators {
vdd_cpu: DCDC_REG1 {
regulator-name = "vdd_arm";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <750000>;
regulator-max-microvolt = <1400000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdd_gpu: DCDC_REG2 {
regulator-name = "vdd_gpu";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1250000>;
regulator-ramp-delay = <6000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc_ddr: DCDC_REG3 {
regulator-name = "vcc_ddr";
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
};
};
vcc_io: DCDC_REG4 {
regulator-name = "vcc_io";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vcc_tp: LDO_REG1 {
regulator-name = "vcc_tp";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcca_codec: LDO_REG2 {
regulator-name = "vcca_codec";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vdd_10: LDO_REG3 {
regulator-name = "vdd_10";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1000000>;
};
};
vcc_wl: LDO_REG4 {
regulator-name = "vcc_wl";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-state-mem {
regulator-on-in-suspend;
};
};
vccio_sd: LDO_REG5 {
regulator-name = "vccio_sd";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vdd10_lcd: LDO_REG6 {
regulator-name = "vdd10_lcd";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc_18: LDO_REG7 {
regulator-name = "vcc_18";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1800000>;
};
};
vcc18_lcd: LDO_REG8 {
regulator-name = "vcc18_lcd";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc_sd: SWITCH_REG1 {
regulator-name = "vcc_sd";
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vcc_lcd: SWITCH_REG2 {
regulator-name = "vcc_lcd";
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
};
};
};
};
};
&i2c1 {
clock-frequency = <400000>;
status = "okay";
hym8563: rtc@51 {
compatible = "haoyu,hym8563";
reg = <0x51>;
interrupt-parent = <&gpio5>;
interrupts = <RK_PC3 IRQ_TYPE_LEVEL_LOW>;
#clock-cells = <0>;
clock-output-names = "hym8563";
pinctrl-names = "default";
pinctrl-0 = <&hym8563_int>;
};
};
&i2c5 {
status = "okay";
};
&io_domains {
bb-supply = <&vcc_io>;
flash0-supply = <&vccio_flash>;
gpio1830-supply = <&vcc_18>;
gpio30-supply = <&vcc_io>;
sdcard-supply = <&vccio_sd>;
wifi-supply = <&vcc_wl>;
status = "okay";
};
&pinctrl {
hym8563 {
hym8563_int: hym8563-int {
rockchip,pins = <5 RK_PC3 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
pcfg_pull_none_drv_8ma: pcfg-pull-none-drv-8ma {
drive-strength = <8>;
};
pcfg_pull_up_drv_8ma: pcfg-pull-up-drv-8ma {
bias-pull-up;
drive-strength = <8>;
};
pmic {
pmic_int: pmic-int {
rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
sdio-pwrseq {
wifi_enable_h: wifi-enable-h {
rockchip,pins = <4 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
sdmmc {
sdmmc_bus4: sdmmc-bus4 {
rockchip,pins =
<6 RK_PC0 1 &pcfg_pull_up_drv_8ma>,
<6 RK_PC1 1 &pcfg_pull_up_drv_8ma>,
<6 RK_PC2 1 &pcfg_pull_up_drv_8ma>,
<6 RK_PC3 1 &pcfg_pull_up_drv_8ma>;
};
sdmmc_clk: sdmmc-clk {
rockchip,pins = <6 RK_PC4 1 &pcfg_pull_none_drv_8ma>;
};
sdmmc_cmd: sdmmc-cmd {
rockchip,pins = <6 RK_PC5 1 &pcfg_pull_up_drv_8ma>;
};
};
vbus_host {
usb1_en_oc: usb1-en-oc {
rockchip,pins = <0 RK_PC1 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
vbus_typec {
usb0_en_oc: usb0-en-oc {
rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
};
&sdio_pwrseq {
/*
* On the module itself this is one of these (depending
* on the actual card populated):
* - SDIO_RESET_L_WL_REG_ON
* - PDN (power down when low)
*/
reset-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>; /* WIFI_REG_ON */
};
&usbphy {
status = "okay";
};
&usb_host0_ehci {
status = "okay";
};
&usb_host0_ohci {
status = "okay";
};
&usb_host1 {
status = "okay";
};
&usb_otg {
status = "okay";
};
&vbus_host {
enable-active-high;
gpio = <&gpio0 RK_PC1 GPIO_ACTIVE_HIGH>; /* USB1_EN_OC# */
};
&vbus_typec {
enable-active-high;
gpio = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; /* USB0_EN_OC# */
};

View File

@@ -1,473 +0,0 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2017 Jagan Teki <jagan@amarulasolutions.com>
*/
/dts-v1/;
#include "rk3288.dtsi"
/ {
model = "Amarula Vyasa-RK3288";
compatible = "amarula,vyasa-rk3288", "rockchip,rk3288";
chosen {
stdout-path = &uart2;
};
memory {
reg = <0x0 0x0 0x0 0x80000000>;
device_type = "memory";
};
dc12_vbat: dc12-vbat {
compatible = "regulator-fixed";
regulator-name = "dc12_vbat";
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
regulator-always-on;
regulator-boot-on;
};
vboot_3v3: vboot-3v3 {
compatible = "regulator-fixed";
regulator-name = "vboot_3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&dc12_vbat>;
};
vcc_sys: vsys-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc_sys";
regulator-min-microvolt = <3700000>;
regulator-max-microvolt = <3700000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&dc12_vbat>;
};
vboot_5v: vboot-5v {
compatible = "regulator-fixed";
regulator-name = "vboot_sv";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&dc12_vbat>;
};
v3g_3v3: v3g-3v3 {
compatible = "regulator-fixed";
regulator-name = "v3g_3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&dc12_vbat>;
};
vsus_5v: vsus-5v {
compatible = "regulator-fixed";
regulator-name = "vsus_5v";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&vcc_io>;
};
vcc50_hdmi: vcc50-hdmi {
compatible = "regulator-fixed";
regulator-name = "vcc50_hdmi";
enable-active-high;
gpio = <&gpio7 RK_PB4 GPIO_ACTIVE_HIGH>; /* HDMI_EN */
pinctrl-names = "default";
pinctrl-0 = <&vcc50_hdmi_en>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&vsus_5v>;
};
vusb1_5v: vusb1-5v {
compatible = "regulator-fixed";
regulator-name = "vusb1_5v";
enable-active-high;
gpio = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>; /* OTG_VBUS_DRV */
pinctrl-names = "default";
pinctrl-0 = <&otg_vbus_drv>;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&vsus_5v>;
};
vusb2_5v: vusb2-5v {
compatible = "regulator-fixed";
regulator-name = "vusb2_5v";
enable-active-high;
gpio = <&gpio8 RK_PB1 GPIO_ACTIVE_HIGH>; /* USB2_PWR_EN */
pinctrl-names = "default";
pinctrl-0 = <&usb2_pwr_en>;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
regulator-boot-on;
vin-supply = <&vsus_5v>;
};
ext_gmac: external-gmac-clock {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <125000000>;
clock-output-names = "ext_gmac";
};
};
&cpu0 {
cpu0-supply = <&vdd_cpu>;
};
&emmc {
bus-width = <8>;
cap-mmc-highspeed;
non-removable;
pinctrl-names = "default";
pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_pwr &emmc_bus8>;
vmmc-supply = <&vcc_io>;
status = "okay";
};
&gmac {
assigned-clocks = <&cru SCLK_MAC>;
assigned-clock-parents = <&ext_gmac>;
clock_in_out = "input";
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins>, <&phy_rst>, <&phy_pmeb>, <&phy_int>;
phy-supply = <&vcc_lan>;
phy-mode = "rgmii";
snps,reset-active-low;
snps,reset-delays-us = <0 10000 1000000>;
snps,reset-gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>;
tx_delay = <0x30>;
rx_delay = <0x10>;
status = "okay";
};
&gpu {
mali-supply = <&vdd_gpu>;
status = "okay";
};
&hdmi {
ddc-i2c-bus = <&i2c5>;
status = "okay";
};
&i2c0 {
clock-frequency = <400000>;
status = "okay";
rk808: pmic@1b {
compatible = "rockchip,rk808";
reg = <0x1b>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
#clock-cells = <1>;
clock-output-names = "xin32k", "rk808-clkout2";
pinctrl-names = "default";
pinctrl-0 = <&pmic_int &global_pwroff>;
rockchip,system-power-controller;
wakeup-source;
vcc1-supply = <&vcc_sys>;
vcc2-supply = <&vcc_sys>;
vcc3-supply = <&vcc_sys>;
vcc4-supply = <&vcc_sys>;
vcc6-supply = <&vcc_sys>;
vcc7-supply = <&vcc_sys>;
vcc8-supply = <&vcc_io>;
vcc9-supply = <&vcc_sys>;
vcc10-supply = <&vcc_sys>;
vcc11-supply = <&vcc_sys>;
vcc12-supply = <&vcc_io>;
regulators {
vdd_cpu: DCDC_REG1 {
regulator-name = "vdd_arm";
regulator-min-microvolt = <750000>;
regulator-max-microvolt = <1350000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdd_gpu: DCDC_REG2 {
regulator-name = "vdd_gpu";
regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1250000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1000000>;
};
};
vcc_ddr: DCDC_REG3 {
regulator-name = "vcc_ddr";
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
};
};
vcc_io: DCDC_REG4 {
regulator-name = "vcc_io";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vcca_tp: LDO_REG1 {
regulator-name = "vcc_tp";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vcc_codec: LDO_REG2 {
regulator-name = "vcc_codec";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
};
};
vdd_10: LDO_REG3 {
regulator-name = "vdd_10";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1000000>;
};
};
vcc_gps: LDO_REG4 {
regulator-name = "vcc_gps";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1800000>;
};
};
vccio_sd: LDO_REG5 {
regulator-name = "vccio_sd";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <3300000>;
};
};
vdd10_lcd: LDO_REG6 {
regulator-name = "vdd10_lcd";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1000000>;
};
};
vcc_18: LDO_REG7 {
regulator-name = "vcc_18";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1800000>;
};
};
vcc18_lcd: LDO_REG8 {
regulator-name = "vcc18_lcd";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <1800000>;
};
};
vcc_sd: SWITCH_REG1 {
regulator-name = "vcc_sd";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
};
};
vcc_lan: SWITCH_REG2 {
regulator-name = "vcc_lan";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
regulator-state-mem {
regulator-on-in-suspend;
};
};
};
};
};
&i2c5 {
status = "okay";
};
&sdmmc {
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
card-detect-delay = <200>;
disable-wp;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk>, <&sdmmc_cmd>, <&sdmmc_cd>, <&sdmmc_bus4>;
vmmc-supply = <&vcc_sd>;
vqmmc-supply = <&vccio_sd>;
status = "okay";
};
&tsadc {
rockchip,hw-tshut-mode = <1>; /* tshut mode 0:CRU 1:GPIO */
rockchip,hw-tshut-polarity = <1>; /* tshut polarity 0:LOW 1:HIGH */
status = "okay";
};
&uart2 {
status = "okay";
};
&usbphy {
status = "okay";
};
&usb_host0_ehci {
status = "okay";
};
&usb_host1 {
pinctrl-names = "default";
pinctrl-0 = <&phy_pwr_en>;
status = "okay";
};
&usb_otg {
status = "okay";
};
&vopb {
status = "okay";
};
&vopb_mmu {
status = "okay";
};
&vopl {
status = "okay";
};
&vopl_mmu {
status = "okay";
};
&wdt {
status = "okay";
};
&pinctrl {
pcfg_output_high: pcfg-output-high {
output-high;
};
gmac {
phy_int: phy-int {
rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_up>;
};
phy_pmeb: phy-pmeb {
rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>;
};
phy_rst: phy-rst {
rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_output_high>;
};
};
hdmi {
vcc50_hdmi_en: vcc50-hdmi-en {
rockchip,pins = <7 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
pmic {
pmic_int: pmic-int {
rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
usb_host {
phy_pwr_en: phy-pwr-en {
rockchip,pins = <2 RK_PB1 RK_FUNC_GPIO &pcfg_output_high>;
};
usb2_pwr_en: usb2-pwr-en {
rockchip,pins = <8 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
usb_otg {
otg_vbus_drv: otg-vbus-drv {
rockchip,pins = <0 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};

View File

@@ -0,0 +1,11 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
#include "rk3528-u-boot.dtsi"
&vdd_arm {
regulator-init-microvolt = <953000>;
};
&vdd_logic {
regulator-init-microvolt = <900000>;
};

View File

@@ -118,13 +118,11 @@
&sdhci {
bootph-pre-ram;
bootph-some-ram;
u-boot,spl-fifo-mode;
};
&sdmmc {
bootph-pre-ram;
bootph-some-ram;
u-boot,spl-fifo-mode;
};
&sdmmc0_bus4 {
@@ -154,12 +152,10 @@
&sfc0 {
bootph-some-ram;
u-boot,spl-sfc-no-dma;
};
&sfc1 {
bootph-some-ram;
u-boot,spl-sfc-no-dma;
};
&sys_grf {

View File

@@ -1,13 +1,13 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Minimal generic DT for RK3588S/RK3588 with eMMC, SD-card and USB OTG enabled
* Minimal generic DT for RK3582/RK3588S/RK3588 with eMMC, SD-card and USB OTG enabled
*/
/dts-v1/;
#include "rk3588s.dtsi"
/ {
model = "Generic RK3588S/RK3588";
model = "Generic RK3582/RK3588S/RK3588";
compatible = "rockchip,rk3588";
aliases {

View File

@@ -1,137 +0,0 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
* Copyright (c) 2019 Radxa Limited
* Copyright (c) 2019 Amarula Solutions(India)
*/
#include <dt-bindings/pwm/pwm.h>
/ {
clkin_gmac: external-gmac-clock {
compatible = "fixed-clock";
clock-frequency = <125000000>;
clock-output-names = "clkin_gmac";
#clock-cells = <0>;
};
sdio_pwrseq: sdio-pwrseq {
compatible = "mmc-pwrseq-simple";
clocks = <&hym8563>;
clock-names = "ext_clock";
pinctrl-names = "default";
pinctrl-0 = <&wifi_enable_h>;
};
vcc12v_dcin: vcc12v-dcin-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc12v_dcin";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
};
vcc5v0_sys: vcc5v0-sys-regulator {
compatible = "regulator-fixed";
regulator-name = "vcc5v0_sys";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&vcc12v_dcin>;
};
vbus_host: vbus-host {
compatible = "regulator-fixed";
pinctrl-names = "default";
pinctrl-0 = <&usb1_en_oc>;
regulator-name = "vbus_host"; /* HOST-5V */
regulator-always-on;
vin-supply = <&vcc5v0_sys>;
};
vbus_typec: vbus-typec {
compatible = "regulator-fixed";
pinctrl-names = "default";
pinctrl-0 = <&usb0_en_oc>;
regulator-name = "vbus_typec";
regulator-always-on;
vin-supply = <&vcc5v0_sys>;
};
};
&gmac {
assigned-clock-parents = <&clkin_gmac>;
clock_in_out = "input";
phy-mode = "rgmii";
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins>;
snps,reset-active-low;
snps,reset-delays-us = <0 10000 50000>;
tx_delay = <0x28>;
rx_delay = <0x11>;
status = "okay";
};
&hdmi {
status = "okay";
};
&pwm0 {
status = "okay";
};
&pwm2 {
status = "okay";
};
&sdio0 {
bus-width = <4>;
cap-sd-highspeed;
cap-sdio-irq;
keep-power-in-suspend;
mmc-pwrseq = <&sdio_pwrseq>;
non-removable;
pinctrl-names = "default";
pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
sd-uhs-sdr104;
status = "okay";
};
&sdmmc {
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
disable-wp;
vqmmc-supply = <&vccio_sd>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
status = "okay";
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_xfer &uart0_cts>;
status = "okay";
};
&uart2 {
status = "okay";
};
&vopb {
status = "okay";
};
&vopb_mmu {
status = "okay";
};
&vopl {
status = "okay";
};
&vopl_mmu {
status = "okay";
};

View File

@@ -246,16 +246,18 @@
pad-byte = <0x00>;
u-boot-spl {
no-write-symbols;
};
payload {
type = "section";
align = <CONFIG_SYS_CACHELINE_SIZE>;
#ifdef HAS_FIT
fit {
insert-template = <&fit_template>;
#else
u-boot-img {
#endif
offset = <(CONFIG_SPL_LOAD_FIT_ADDRESS - CFG_SYS_SDRAM_BASE)>;
};
};
};
#endif /* CONFIG_ROCKCHIP_MASKROM_IMAGE */

View File

@@ -0,0 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Copyright Contributors to the U-Boot project. */
#ifndef __ASM_ARCH_BOOT0_H__
#define __ASM_ARCH_BOOT0_H__
#include <asm/arch-rockchip/boot0.h>
#endif

View File

@@ -0,0 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Copyright Contributors to the U-Boot project. */
#ifndef __ASM_ARCH_GPIO_H__
#define __ASM_ARCH_GPIO_H__
#include <asm/arch-rockchip/gpio.h>
#endif

View File

@@ -214,6 +214,16 @@ int rockchip_reset_bind(struct udevice *pdev, u32 reg_offset, u32 reg_number);
*/
int rockchip_reset_bind_lut(struct udevice *pdev, const int *lookup_table,
u32 reg_offset, u32 reg_number);
/*
* rk3506_reset_bind_lut() - Bind soft reset device as child of clock device
* using dedicated RK3506 lookup table
*
* @pdev: clock udevice
* @reg_offset: the first offset in cru for softreset registers
* @reg_number: the reg numbers of softreset registers
* Return: 0 success, or error value
*/
int rk3506_reset_bind_lut(struct udevice *pdev, u32 reg_offset, u32 reg_number);
/*
* rk3528_reset_bind_lut() - Bind soft reset device as child of clock device
* using dedicated RK3528 lookup table

View File

@@ -0,0 +1,181 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2023 Rockchip Electronics Co., Ltd.
* Author: Finley Xiao <finley.xiao@rock-chips.com>
*/
#ifndef _ASM_ARCH_CRU_RK3506_H
#define _ASM_ARCH_CRU_RK3506_H
#include <linux/bitops.h>
#include <linux/bitfield.h>
#define MHz 1000000
#define KHz 1000
#define OSC_HZ (24 * MHz)
/* RK3506 pll id */
enum rk3506_pll_id {
GPLL,
V0PLL,
V1PLL,
PLL_COUNT,
};
struct rk3506_clk_priv {
unsigned long gpll_hz;
unsigned long gpll_div_hz;
unsigned long gpll_div_100mhz;
unsigned long v0pll_hz;
unsigned long v0pll_div_hz;
unsigned long v1pll_hz;
unsigned long v1pll_div_hz;
};
struct pll_rate_table {
unsigned long rate;
unsigned int fbdiv;
unsigned int postdiv1;
unsigned int refdiv;
unsigned int postdiv2;
unsigned int dsmpd;
unsigned int frac;
};
#define RK3506_CRU_BASE 0xff9a0000
#define RK3506_MODE_CON 0x0280
#define RK3506_CLKSEL_CON(x) (RK3506_CRU_BASE + 0x0300 + (x) * 0x4)
#define RK3506_SOFTRST_CON0 0x0a00
#define RK3506_GLB_SRST_FST 0x0c08
#define RK3506_GLB_SRST_SND 0x0c0c
#define RK3506_PLL_CON(x) (0x10000 + (x) * 0x4)
#define RK3506_SCRU_BASE 0xff9a8000
#define RK3506_PMU_CRU_BASE 0xff9b0000
#define RK3506_PMU_CLKSEL_CON(x) (RK3506_PMU_CRU_BASE + 0x0300 + (x) * 0x4)
enum {
/* CRU_CLKSEL_CON00 */
CLK_GPLL_DIV_MASK = GENMASK(9, 6),
CLK_GPLL_DIV_100M_MASK = GENMASK(13, 10),
/* CRU_CLKSEL_CON01 */
CLK_V0PLL_DIV_MASK = GENMASK(3, 0),
CLK_V1PLL_DIV_MASK = GENMASK(7, 4),
/* CRU_CLKSEL_CON15 */
CLK_CORE_SRC_DIV_MASK = GENMASK(4, 0),
CLK_CORE_SRC_SEL_MASK = GENMASK(6, 5),
CLK_CORE_SEL_GPLL = 0,
CLK_CORE_SEL_V0PLL,
CLK_CORE_SEL_V1PLL,
ACLK_CORE_DIV_MASK = GENMASK(12, 9),
/* CRU_CLKSEL_CON16 */
PCLK_CORE_DIV_MASK = GENMASK(3, 0),
/* CRU_CLKSEL_CON21 */
ACLK_BUS_DIV_MASK = GENMASK(4, 0),
ACLK_BUS_SEL_MASK = GENMASK(6, 5),
ACLK_BUS_SEL_GPLL_DIV = 0,
ACLK_BUS_SEL_V0PLL_DIV,
ACLK_BUS_SEL_V1PLL_DIV,
HCLK_BUS_DIV_MASK = GENMASK(11, 7),
HCLK_BUS_SEL_MASK = GENMASK(13, 12),
/* CRU_CLKSEL_CON22 */
PCLK_BUS_DIV_MASK = GENMASK(4, 0),
PCLK_BUS_SEL_MASK = GENMASK(6, 5),
/* CRU_CLKSEL_CON29 */
HCLK_LSPERI_DIV_MASK = GENMASK(4, 0),
HCLK_LSPERI_SEL_MASK = GENMASK(6, 5),
/* CRU_CLKSEL_CON32 */
CLK_I2C0_DIV_MASK = GENMASK(3, 0),
CLK_I2C0_SEL_MASK = GENMASK(5, 4),
CLK_I2C_SEL_GPLL = 0,
CLK_I2C_SEL_V0PLL,
CLK_I2C_SEL_V1PLL,
CLK_I2C1_DIV_MASK = GENMASK(9, 6),
CLK_I2C1_SEL_MASK = GENMASK(11, 10),
/* CRU_CLKSEL_CON33 */
CLK_I2C2_DIV_MASK = GENMASK(3, 0),
CLK_I2C2_SEL_MASK = GENMASK(5, 4),
CLK_PWM1_DIV_MASK = GENMASK(9, 6),
CLK_PWM1_SEL_MASK = GENMASK(11, 10),
CLK_PWM1_SEL_GPLL_DIV = 0,
CLK_PWM1_SEL_V0PLL_DIV,
CLK_PWM1_SEL_V1PLL_DIV,
/* CRU_CLKSEL_CON34 */
CLK_SPI0_DIV_MASK = GENMASK(7, 4),
CLK_SPI0_SEL_MASK = GENMASK(9, 8),
CLK_SPI_SEL_24M = 0,
CLK_SPI_SEL_GPLL_DIV,
CLK_SPI_SEL_V0PLL_DIV,
CLK_SPI_SEL_V1PLL_DIV,
CLK_SPI1_DIV_MASK = GENMASK(13, 10),
CLK_SPI1_SEL_MASK = GENMASK(15, 14),
/* CRU_CLKSEL_CON49 */
ACLK_HSPERI_DIV_MASK = GENMASK(4, 0),
ACLK_HSPERI_SEL_MASK = GENMASK(6, 5),
ACLK_HSPERI_SEL_GPLL_DIV = 0,
ACLK_HSPERI_SEL_V0PLL_DIV,
ACLK_HSPERI_SEL_V1PLL_DIV,
CCLK_SDMMC_DIV_MASK = GENMASK(12, 7),
CCLK_SDMMC_SEL_MASK = GENMASK(14, 13),
CCLK_SDMMC_SEL_24M = 0,
CCLK_SDMMC_SEL_GPLL,
CCLK_SDMMC_SEL_V0PLL,
CCLK_SDMMC_SEL_V1PLL,
/* CRU_CLKSEL_CON50 */
SCLK_FSPI_DIV_MASK = GENMASK(4, 0),
SCLK_FSPI_SEL_MASK = GENMASK(6, 5),
SCLK_FSPI_SEL_24M = 0,
SCLK_FSPI_SEL_GPLL,
SCLK_FSPI_SEL_V0PLL,
SCLK_FSPI_SEL_V1PLL,
CLK_MAC_DIV_MASK = GENMASK(11, 7),
/* CRU_CLKSEL_CON54 */
CLK_SARADC_DIV_MASK = GENMASK(3, 0),
CLK_SARADC_SEL_MASK = GENMASK(5, 4),
CLK_SARADC_SEL_24M = 0,
CLK_SARADC_SEL_400K,
CLK_SARADC_SEL_32K,
/* CRU_CLKSEL_CON60 */
DCLK_VOP_DIV_MASK = GENMASK(7, 0),
DCLK_VOP_SEL_MASK = GENMASK(10, 8),
DCLK_VOP_SEL_24M = 0,
DCLK_VOP_SEL_GPLL,
DCLK_VOP_SEL_V0PLL,
DCLK_VOP_SEL_V1PLL,
DCLK_VOP_SEL_FRAC_VOIC1,
DCLK_VOP_SEL_FRAC_COMMON0,
DCLK_VOP_SEL_FRAC_COMMON1,
DCLK_VOP_SEL_FRAC_COMMON2,
/* CRU_CLKSEL_CON61 */
CLK_TSADC_DIV_MASK = GENMASK(7, 0),
CLK_TSADC_TSEN_DIV_MASK = GENMASK(10, 8),
/* PMUCRU_CLKSEL_CON00 */
CLK_PWM0_DIV_MASK = GENMASK(9, 6),
CLK_MAC_OUT_DIV_MASK = GENMASK(15, 10),
/* SCRU_CLKSEL_CON104 */
CLK_PKA_CRYPTO_DIV_MASK = GENMASK(11, 7),
CLK_PKA_CRYPTO_SEL_MASK = GENMASK(13, 12),
CLK_PKA_CRYPTO_SEL_GPLL = 0,
CLK_PKA_CRYPTO_SEL_V0PLL,
CLK_PKA_CRYPTO_SEL_V1PLL,
};
#endif /* _ASM_ARCH_CRU_RK3506_H */

View File

@@ -8,7 +8,6 @@ config ROCKCHIP_PX30
select SUPPORT_TPL
select SPL
select TPL
select TPL_TINY_FRAMEWORK if TPL
select TPL_HAVE_INIT_STACK if TPL
imply SPL_SEPARATE_BSS
imply SPL_SERIAL
@@ -132,6 +131,7 @@ config ROCKCHIP_RK3288
select SPL
select SUPPORT_TPL
select FDT_64BIT
imply OF_UPSTREAM
imply PRE_CONSOLE_BUFFER
imply ROCKCHIP_COMMON_BOARD
imply SPL_ROCKCHIP_COMMON_BOARD
@@ -317,6 +317,49 @@ config ROCKCHIP_RK3399
and video codec support. Peripherals include Gigabit Ethernet,
USB2 host and OTG, SDIO, I2S, UARTs, SPI, I2C and PWMs.
config ROCKCHIP_RK3506
bool "Support Rockchip RK3506"
select CPU_V7A
select SUPPORT_SPL
select SPL
select CLK
select PINCTRL
select RAM
select REGMAP
select SYSCON
select BOARD_LATE_INIT
select DM_REGULATOR_FIXED
select DM_RESET
imply BOOTSTD_FULL
imply DM_RNG
imply ENV_RELOC_GD_ENV_ADDR
imply FIT
imply LEGACY_IMAGE_FORMAT
imply MISC
imply MISC_INIT_R
imply OF_LIBFDT_OVERLAY
imply OF_LIVE
imply RNG_ROCKCHIP
imply ROCKCHIP_COMMON_BOARD
imply ROCKCHIP_COMMON_STACK_ADDR
imply ROCKCHIP_EXTERNAL_TPL
imply ROCKCHIP_OTP
imply SPL_ARMV7_SET_CORTEX_SMPEN
imply SPL_CLK
imply SPL_DM_SEQ_ALIAS
imply SPL_FIT_SIGNATURE
imply SPL_LOAD_FIT
imply SPL_OF_CONTROL
imply SPL_PINCTRL
imply SPL_RAM
imply SPL_REGMAP
imply SPL_SERIAL
imply SPL_SYSCON
imply SYS_ARCH_TIMER
imply SYSRESET
help
The Rockchip RK3506 is a ARM-based SoC with a tri-core Cortex-A7.
config ROCKCHIP_RK3528
bool "Support Rockchip RK3528"
select ARM64
@@ -745,6 +788,7 @@ source "arch/arm/mach-rockchip/rk3308/Kconfig"
source "arch/arm/mach-rockchip/rk3328/Kconfig"
source "arch/arm/mach-rockchip/rk3368/Kconfig"
source "arch/arm/mach-rockchip/rk3399/Kconfig"
source "arch/arm/mach-rockchip/rk3506/Kconfig"
source "arch/arm/mach-rockchip/rk3528/Kconfig"
source "arch/arm/mach-rockchip/rk3568/Kconfig"
source "arch/arm/mach-rockchip/rk3576/Kconfig"

View File

@@ -42,6 +42,7 @@ obj-$(CONFIG_ROCKCHIP_RK3308) += rk3308/
obj-$(CONFIG_ROCKCHIP_RK3328) += rk3328/
obj-$(CONFIG_ROCKCHIP_RK3368) += rk3368/
obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399/
obj-$(CONFIG_ROCKCHIP_RK3506) += rk3506/
obj-$(CONFIG_ROCKCHIP_RK3528) += rk3528/
obj-$(CONFIG_ROCKCHIP_RK3568) += rk3568/
obj-$(CONFIG_ROCKCHIP_RK3576) += rk3576/

View File

@@ -0,0 +1,15 @@
if ROCKCHIP_RK3506
config ROCKCHIP_BOOT_MODE_REG
default 0xff910200
config ROCKCHIP_STIMER_BASE
default 0xff980000
config SYS_SOC
default "rk3506"
config SYS_CONFIG_NAME
default "rk3506_common"
endif

View File

@@ -0,0 +1,5 @@
# SPDX-License-Identifier: GPL-2.0-or-later
obj-y += rk3506.o
obj-y += clk_rk3506.o
obj-y += syscon_rk3506.o

View File

@@ -0,0 +1,16 @@
// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright Contributors to the U-Boot project.
#include <dm.h>
#include <asm/arch-rockchip/cru_rk3506.h>
int rockchip_get_clk(struct udevice **devp)
{
return uclass_get_device_by_driver(UCLASS_CLK,
DM_DRIVER_GET(rockchip_rk3506_cru), devp);
}
void *rockchip_get_cru(void)
{
return (void *)RK3506_CRU_BASE;
}

View File

@@ -0,0 +1,125 @@
// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright Contributors to the U-Boot project.
#define LOG_CATEGORY LOGC_ARCH
#include <dm.h>
#include <misc.h>
#include <asm/arch-rockchip/bootrom.h>
#include <asm/arch-rockchip/hardware.h>
#define SGRF_BASE 0xff210000
#define FIREWALL_DDR_BASE 0xff5f0000
#define FW_DDR_MST1_REG 0x24
#define FW_DDR_MST2_REG 0x28
#define FW_DDR_MST3_REG 0x2c
const char * const boot_devices[BROM_LAST_BOOTSOURCE + 1] = {
[BROM_BOOTSOURCE_EMMC] = "/soc/mmc@ff480000",
[BROM_BOOTSOURCE_SD] = "/soc/mmc@ff480000",
};
void board_debug_uart_init(void)
{
}
int arch_cpu_init(void)
{
u32 val;
if (!IS_ENABLED(CONFIG_SPL_BUILD))
return 0;
/* Select non-secure OTPC */
rk_clrreg(SGRF_BASE + 0x100, BIT(1));
/* Set the sdmmc/emmc to access ddr memory */
val = readl(FIREWALL_DDR_BASE + FW_DDR_MST1_REG);
writel(val & 0xffff00ff, FIREWALL_DDR_BASE + FW_DDR_MST1_REG);
/* Set the fspi to access ddr memory */
val = readl(FIREWALL_DDR_BASE + FW_DDR_MST1_REG);
writel(val & 0xff00ffff, FIREWALL_DDR_BASE + FW_DDR_MST1_REG);
/* Set the mac0 to access ddr memory */
val = readl(FIREWALL_DDR_BASE + FW_DDR_MST1_REG);
writel(val & 0xf0ffffff, FIREWALL_DDR_BASE + FW_DDR_MST1_REG);
/* Set the mac1 to access ddr memory */
val = readl(FIREWALL_DDR_BASE + FW_DDR_MST2_REG);
writel(val & 0xfffffff0, FIREWALL_DDR_BASE + FW_DDR_MST2_REG);
/* Set the otg1 to access ddr memory */
val = readl(FIREWALL_DDR_BASE + FW_DDR_MST3_REG);
writel(val & 0xfff0ffff, FIREWALL_DDR_BASE + FW_DDR_MST3_REG);
return 0;
}
#define HP_TIMER_BASE CONFIG_ROCKCHIP_STIMER_BASE
#define HP_CTRL_REG 0x04
#define TIMER_EN BIT(0)
#define HP_LOAD_COUNT0_REG 0x14
#define HP_LOAD_COUNT1_REG 0x18
void rockchip_stimer_init(void)
{
u32 reg;
if (!IS_ENABLED(CONFIG_XPL_BUILD))
return;
reg = readl(HP_TIMER_BASE + HP_CTRL_REG);
if (reg & TIMER_EN)
return;
asm volatile("mcr p15, 0, %0, c14, c0, 0" : : "r" (CONFIG_COUNTER_FREQUENCY));
writel(0xffffffff, HP_TIMER_BASE + HP_LOAD_COUNT0_REG);
writel(0xffffffff, HP_TIMER_BASE + HP_LOAD_COUNT1_REG);
writel((TIMER_EN << 16) | TIMER_EN, HP_TIMER_BASE + HP_CTRL_REG);
}
#define RK3506_OTP_CPU_CODE_OFFSET 0x02
#define RK3506_OTP_SPECIFICATION_OFFSET 0x08
int checkboard(void)
{
u8 cpu_code[2], specification;
struct udevice *dev;
char suffix[2];
int ret;
if (!IS_ENABLED(CONFIG_ROCKCHIP_OTP) || !CONFIG_IS_ENABLED(MISC))
return 0;
ret = uclass_get_device_by_driver(UCLASS_MISC,
DM_DRIVER_GET(rockchip_otp), &dev);
if (ret) {
log_debug("Could not find otp device, ret=%d\n", ret);
return 0;
}
/* cpu-code: SoC model, e.g. 0x35 0x06 */
ret = misc_read(dev, RK3506_OTP_CPU_CODE_OFFSET, cpu_code, 2);
if (ret < 0) {
log_debug("Could not read cpu-code, ret=%d\n", ret);
return 0;
}
/* specification: SoC variant, e.g. 0xA for RK3506J */
ret = misc_read(dev, RK3506_OTP_SPECIFICATION_OFFSET, &specification, 1);
if (ret < 0) {
log_debug("Could not read specification, ret=%d\n", ret);
return 0;
}
specification &= 0x1f;
/* for RK3506J i.e. '@' + 0xA = 'J' */
suffix[0] = specification > 1 ? '@' + specification : '\0';
suffix[1] = '\0';
printf("SoC: RK%02x%02x%s\n", cpu_code[0], cpu_code[1], suffix);
return 0;
}

View File

@@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright Contributors to the U-Boot project.
#include <dm.h>
#include <asm/arch-rockchip/clock.h>
static const struct udevice_id rk3506_syscon_ids[] = {
{ .compatible = "rockchip,rk3506-grf", .data = ROCKCHIP_SYSCON_GRF },
{ }
};
U_BOOT_DRIVER(rockchip_rk3506_syscon) = {
.name = "rockchip_rk3506_syscon",
.id = UCLASS_SYSCON,
.of_match = rk3506_syscon_ids,
#if CONFIG_IS_ENABLED(OF_REAL)
.bind = dm_scan_fdt_dev,
#endif
};

View File

@@ -4,6 +4,12 @@ S: Maintained
F: arch/arm/dts/rk3528-generic*
F: configs/generic-rk3528_defconfig
NANOPI-ZERO2-RK3528
M: Jonas Karlman <jonas@kwiboo.se>
S: Maintained
F: arch/arm/dts/rk3528-nanopi-zero2*
F: configs/nanopi-zero2-rk3528_defconfig
RADXA-E20C
M: Jonas Karlman <jonas@kwiboo.se>
S: Maintained

View File

@@ -49,21 +49,6 @@ void board_debug_uart_init(void)
{
}
u32 read_brom_bootsource_id(void)
{
u32 bootsource_id = readl(BROM_BOOTSOURCE_ID_ADDR);
/* Re-map the raw value read from reg to an existing BROM_BOOTSOURCE
* enum value to avoid having to create a larger boot_devices table.
*/
if (bootsource_id == 0x81)
return BROM_BOOTSOURCE_USB;
else if (bootsource_id > BROM_LAST_BOOTSOURCE)
log_debug("Unknown bootsource %x\n", bootsource_id);
return bootsource_id;
}
int arch_cpu_init(void)
{
u32 val;

View File

@@ -26,6 +26,9 @@
#define SYS_SGRF_SOC_CON15 0x005C
#define SYS_SGRF_SOC_CON20 0x0070
#define FW_PMU1SGRF_BASE 0x26003000
#define PMU1SGRF_SLV_LOOKUP0 0x80
#define FW_SYS_SGRF_BASE 0x26005000
#define SGRF_DOMAIN_CON1 0x4
#define SGRF_DOMAIN_CON2 0x8
@@ -140,6 +143,9 @@ int arch_cpu_init(void)
if (!IS_ENABLED(CONFIG_SPL_BUILD))
return 0;
/* Allow pmu sram access for non-secure masters */
writel(0xffff3fff, FW_PMU1SGRF_BASE + PMU1SGRF_SLV_LOOKUP0);
/* Set the emmc to access ddr memory */
val = readl(FW_SYS_SGRF_BASE + SGRF_DOMAIN_CON2);
writel(val | 0x7, FW_SYS_SGRF_BASE + SGRF_DOMAIN_CON2);

View File

@@ -286,14 +286,15 @@ config TARGET_ROCK_5_ITX_RK3588
Powered by either 12V, ATX power-supply or PoE
config TARGET_ROCK_5C_RK3588S
bool "Radxa ROCK 5C RK3588S2 board"
bool "Radxa ROCK 5C/5C Lite"
help
Radxa ROCK 5C is a Rockchip RK3588S2 based single board computer.
Radxa ROCK 5C/5C Lite is a Rockchip RK3588S2/RK3582 based SBC (Single
Board Computer) by Radxa.
Specification:
Quad A76 and Quad A55 CPU
6 TOPS NPU
Quad/Dual A76 and Quad A55 CPU
6/5 TOPS NPU
up to 32GB LPDDR4x RAM
eMMC / SPI flash connector
Micro SD Card slot

View File

@@ -7,6 +7,7 @@
#define LOG_CATEGORY LOGC_ARCH
#include <dm.h>
#include <fdt_support.h>
#include <misc.h>
#include <spl.h>
#include <asm/armv8/mmu.h>
@@ -87,6 +88,24 @@ static struct mm_region rk3588_mem_map[] = {
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
.virt = 0x100000000UL,
.phys = 0x100000000UL,
.size = 0x2fc000000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
PTE_BLOCK_INNER_SHARE
}, {
.virt = 0x3fc500000UL,
.phys = 0x3fc500000UL,
.size = 0x3a00000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
PTE_BLOCK_INNER_SHARE
}, {
.virt = 0x400000000UL,
.phys = 0x400000000UL,
.size = 0x400000000UL,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
PTE_BLOCK_INNER_SHARE
}, {
.virt = 0x900000000,
.phys = 0x900000000,
.size = 0x150000000,
@@ -211,8 +230,45 @@ int arch_cpu_init(void)
}
#endif
/*
* RK3588 has two known memory gaps when using 16+ GiB DRAM,
* [0x3fc000000, 0x3fc500000) and [0x3fff00000, 0x400000000).
*
* Remove the [0x3fc000000, 0x400000000) range to ensure OS does not
* use memory from these gaps when a DDR_MEM tag cannot be found.
*/
#define DRAM_GAP_START 0x3FC000000
#define DRAM_GAP_END 0x400000000
int rockchip_dram_init_banksize_fixup(struct bd_info *bd)
{
size_t ram_top = bd->bi_dram[1].start + bd->bi_dram[1].size;
if (ram_top > DRAM_GAP_START) {
bd->bi_dram[1].size = DRAM_GAP_START - bd->bi_dram[1].start;
if (ram_top > DRAM_GAP_END && CONFIG_NR_DRAM_BANKS > 2) {
bd->bi_dram[2].start = DRAM_GAP_END;
bd->bi_dram[2].size = ram_top - bd->bi_dram[2].start;
}
}
return 0;
}
#define RK3588_OTP_CPU_CODE_OFFSET 0x02
#define RK3588_OTP_SPECIFICATION_OFFSET 0x06
#define RK3588_OTP_IP_STATE_OFFSET 0x1d
#define FAIL_CPU_CLUSTER0 GENMASK(3, 0)
#define FAIL_CPU_CLUSTER1 GENMASK(5, 4)
#define FAIL_CPU_CLUSTER2 GENMASK(7, 6)
#define FAIL_GPU GENMASK(4, 1)
#define FAIL_RKVDEC0 BIT(6)
#define FAIL_RKVDEC1 BIT(7)
#define FAIL_RKVENC0 BIT(0)
#define FAIL_RKVENC1 BIT(2)
int checkboard(void)
{
@@ -258,3 +314,207 @@ int checkboard(void)
return 0;
}
static int fdt_path_del_node(void *fdt, const char *path)
{
int nodeoffset;
nodeoffset = fdt_path_offset(fdt, path);
if (nodeoffset < 0)
return nodeoffset;
return fdt_del_node(fdt, nodeoffset);
}
static int fdt_path_set_name(void *fdt, const char *path, const char *name)
{
int nodeoffset;
nodeoffset = fdt_path_offset(fdt, path);
if (nodeoffset < 0)
return nodeoffset;
return fdt_set_name(fdt, nodeoffset, name);
}
/*
* RK3582 is a variant of the RK3588S with some IP blocks disabled. What blocks
* are disabled/non-working is indicated by ip-state in OTP. ft_system_setup()
* is used to mark any cpu, gpu and/or vdec/venc node with status=fail as
* indicated by ip-state. Apply same policy as vendor U-Boot for RK3582, i.e.
* two big cpu cores, the gpu and one vdec/venc core is always failed. Enable
* OF_SYSTEM_SETUP to use the required DT fixups for RK3582 board variants.
*/
int ft_system_setup(void *blob, struct bd_info *bd)
{
static const char * const cpu_node_names[] = {
"cpu@0", "cpu@100", "cpu@200", "cpu@300",
"cpu@400", "cpu@500", "cpu@600", "cpu@700",
};
int parent, node, i, comp_len, len, ret;
bool cluster1_removed = false;
u8 cpu_code[2], ip_state[3];
struct udevice *dev;
char soc_comp[16];
const char *comp;
void *data;
if (!IS_ENABLED(CONFIG_OF_SYSTEM_SETUP))
return 0;
if (!IS_ENABLED(CONFIG_ROCKCHIP_OTP) || !CONFIG_IS_ENABLED(MISC))
return -ENOSYS;
ret = uclass_get_device_by_driver(UCLASS_MISC,
DM_DRIVER_GET(rockchip_otp), &dev);
if (ret) {
log_debug("Could not find otp device, ret=%d\n", ret);
return ret;
}
/* cpu-code: SoC model, e.g. 0x35 0x82 or 0x35 0x88 */
ret = misc_read(dev, RK3588_OTP_CPU_CODE_OFFSET, cpu_code, 2);
if (ret < 0) {
log_debug("Could not read cpu-code, ret=%d\n", ret);
return ret;
}
log_debug("cpu-code: %02x %02x\n", cpu_code[0], cpu_code[1]);
/* only fail cores on rk3582 */
if (!(cpu_code[0] == 0x35 && cpu_code[1] == 0x82))
return 0;
ret = misc_read(dev, RK3588_OTP_IP_STATE_OFFSET, &ip_state, 3);
if (ret < 0) {
log_err("Could not read ip-state, ret=%d\n", ret);
return ret;
}
log_debug("ip-state: %02x %02x %02x (otp)\n",
ip_state[0], ip_state[1], ip_state[2]);
/* policy: fail entire big core cluster when one or more core is bad */
if (ip_state[0] & FAIL_CPU_CLUSTER1)
ip_state[0] |= FAIL_CPU_CLUSTER1;
if (ip_state[0] & FAIL_CPU_CLUSTER2)
ip_state[0] |= FAIL_CPU_CLUSTER2;
/* policy: always fail one big core cluster on rk3582 */
if (!(ip_state[0] & (FAIL_CPU_CLUSTER1 | FAIL_CPU_CLUSTER2)))
ip_state[0] |= FAIL_CPU_CLUSTER2;
/* policy: always fail gpu on rk3582 */
ip_state[1] |= FAIL_GPU;
/* policy: always fail one rkvdec core on rk3582 */
if (!(ip_state[1] & (FAIL_RKVDEC0 | FAIL_RKVDEC1)))
ip_state[1] |= FAIL_RKVDEC1;
/* policy: always fail one rkvenc core on rk3582 */
if (!(ip_state[2] & (FAIL_RKVENC0 | FAIL_RKVENC1)))
ip_state[2] |= FAIL_RKVENC1;
log_debug("ip-state: %02x %02x %02x (policy)\n",
ip_state[0], ip_state[1], ip_state[2]);
/* cpu cluster1: ip_state[0]: bit4~5 */
if ((ip_state[0] & FAIL_CPU_CLUSTER1) == FAIL_CPU_CLUSTER1) {
log_debug("remove cpu-map cluster1\n");
fdt_path_del_node(blob, "/cpus/cpu-map/cluster1");
cluster1_removed = true;
}
/* cpu cluster2: ip_state[0]: bit6~7 */
if ((ip_state[0] & FAIL_CPU_CLUSTER2) == FAIL_CPU_CLUSTER2) {
log_debug("remove cpu-map cluster2\n");
fdt_path_del_node(blob, "/cpus/cpu-map/cluster2");
} else if (cluster1_removed) {
/* cluster nodes must be named in a continuous series */
log_debug("rename cpu-map cluster2\n");
fdt_path_set_name(blob, "/cpus/cpu-map/cluster2", "cluster1");
}
/* gpu: ip_state[1]: bit1~4 */
if (ip_state[1] & FAIL_GPU) {
log_debug("fail gpu\n");
fdt_status_fail_by_pathf(blob, "/gpu@fb000000");
}
/* rkvdec: ip_state[1]: bit6,7 */
if (ip_state[1] & FAIL_RKVDEC0) {
log_debug("fail rkvdec0\n");
fdt_status_fail_by_pathf(blob, "/video-codec@fdc38000");
fdt_status_fail_by_pathf(blob, "/iommu@fdc38700");
}
if (ip_state[1] & FAIL_RKVDEC1) {
log_debug("fail rkvdec1\n");
fdt_status_fail_by_pathf(blob, "/video-codec@fdc40000");
fdt_status_fail_by_pathf(blob, "/iommu@fdc40700");
}
/* rkvenc: ip_state[2]: bit0,2 */
if (ip_state[2] & FAIL_RKVENC0) {
log_debug("fail rkvenc0\n");
fdt_status_fail_by_pathf(blob, "/video-codec@fdbd0000");
fdt_status_fail_by_pathf(blob, "/iommu@fdbdf000");
}
if (ip_state[2] & FAIL_RKVENC1) {
log_debug("fail rkvenc1\n");
fdt_status_fail_by_pathf(blob, "/video-codec@fdbe0000");
fdt_status_fail_by_pathf(blob, "/iommu@fdbef000");
}
parent = fdt_path_offset(blob, "/cpus");
if (parent < 0) {
log_err("Could not find /cpus, parent=%d\n", parent);
return parent;
}
/* cpu: ip_state[0]: bit0~7 */
for (i = 0; i < 8; i++) {
/* fail any bad cpu core */
if (!(ip_state[0] & BIT(i)))
continue;
node = fdt_subnode_offset(blob, parent, cpu_node_names[i]);
if (node >= 0) {
log_debug("fail cpu %s\n", cpu_node_names[i]);
fdt_status_fail(blob, node);
} else {
log_err("Could not find %s, node=%d\n",
cpu_node_names[i], node);
return node;
}
}
node = fdt_path_offset(blob, "/");
if (node < 0) {
log_err("Could not find /, node=%d\n", node);
return node;
}
snprintf(soc_comp, sizeof(soc_comp), "rockchip,rk35%x", cpu_code[1]);
for (i = 0, comp_len = 0;
(comp = fdt_stringlist_get(blob, node, "compatible", i, &len));
i++) {
/* stop at soc compatible */
if (!strcmp(comp, soc_comp) ||
!strcmp(comp, "rockchip,rk3588s") ||
!strcmp(comp, "rockchip,rk3588"))
break;
log_debug("compatible[%d]: %s\n", i, comp);
comp_len += len + 1;
}
/* truncate to only include board compatible */
fdt_setprop_placeholder(blob, node, "compatible", comp_len, &data);
/* append soc compatible */
fdt_appendprop_string(blob, node, "compatible", soc_comp);
fdt_appendprop_string(blob, node, "compatible", "rockchip,rk3588s");
return 0;
}

View File

@@ -289,6 +289,11 @@ static int rockchip_dram_init_banksize(void)
}
#endif
__weak int rockchip_dram_init_banksize_fixup(struct bd_info *bd)
{
return 0;
}
int dram_init_banksize(void)
{
size_t ram_top = (unsigned long)(gd->ram_size + CFG_SYS_SDRAM_BASE);
@@ -342,7 +347,7 @@ int dram_init_banksize(void)
#endif
#endif
return 0;
return rockchip_dram_init_banksize_fixup(gd->bd);
}
u8 rockchip_sdram_type(phys_addr_t reg)

View File

@@ -3,6 +3,7 @@
* (C) Copyright 2019 Rockchip Electronics Co., Ltd
*/
#include <binman_sym.h>
#include <cpu_func.h>
#include <debug_uart.h>
#include <dm.h>
@@ -10,6 +11,7 @@
#include <image.h>
#include <init.h>
#include <log.h>
#include <mapmem.h>
#include <ram.h>
#include <spl.h>
#include <asm/arch-rockchip/bootrom.h>
@@ -33,7 +35,17 @@ __weak const char * const boot_devices[BROM_LAST_BOOTSOURCE + 1] = {
__weak u32 read_brom_bootsource_id(void)
{
return readl(BROM_BOOTSOURCE_ID_ADDR);
u32 bootsource_id = readl(BROM_BOOTSOURCE_ID_ADDR);
/* Re-map the raw value read from reg to an existing BROM_BOOTSOURCE
* enum value to avoid having to create a larger boot_devices table.
*/
if (bootsource_id == 0x81)
return BROM_BOOTSOURCE_USB;
else if (bootsource_id > BROM_LAST_BOOTSOURCE)
log_debug("Unknown bootsource %x\n", bootsource_id);
return bootsource_id;
}
const char *board_spl_was_booted_from(void)
@@ -140,3 +152,52 @@ void spl_board_prepare_for_boot(void)
cleanup_before_linux();
}
#if CONFIG_IS_ENABLED(RAM_DEVICE) && IS_ENABLED(CONFIG_SPL_LOAD_FIT)
binman_sym_declare_optional(ulong, payload, image_pos);
binman_sym_declare_optional(ulong, payload, size);
static ulong ramboot_load_read(struct spl_load_info *load, ulong sector,
ulong count, void *buf)
{
ulong addr = IF_ENABLED_INT(CONFIG_SPL_LOAD_FIT,
CONFIG_SPL_LOAD_FIT_ADDRESS);
memcpy(buf, map_sysmem(addr + sector, 0), count);
return count;
}
static int ramboot_load_image(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev)
{
struct legacy_img_hdr *header;
ulong addr = IF_ENABLED_INT(CONFIG_SPL_LOAD_FIT,
CONFIG_SPL_LOAD_FIT_ADDRESS);
ulong image_pos = binman_sym(ulong, payload, image_pos);
ulong size = binman_sym(ulong, payload, size);
if (addr == CFG_SYS_SDRAM_BASE || addr == CONFIG_SPL_TEXT_BASE)
return -ENODEV;
if (image_pos != BINMAN_SYM_MISSING && size != BINMAN_SYM_MISSING) {
header = map_sysmem(image_pos, 0);
if (image_get_magic(header) == FDT_MAGIC) {
memmove(map_sysmem(addr, 0), header, size);
memset(header, 0, sizeof(*header));
}
}
header = map_sysmem(addr, 0);
if (image_get_magic(header) == FDT_MAGIC) {
struct spl_load_info load;
spl_load_init(&load, ramboot_load_read, NULL, 1);
return spl_load_simple_fit(spl_image, &load, 0, header);
}
return -ENODEV;
}
/* Use priority and method name that sort before default spl_ram_load_image */
SPL_LOAD_IMAGE_METHOD("RAM", 0, BOOT_DEVICE_RAM, ramboot_load_image);
#endif

View File

@@ -4,5 +4,4 @@ S: Maintained
F: board/amarula/vyasa-rk3288
F: include/configs/vyasa-rk3288.h
F: configs/vyasa-rk3288_defconfig
F: arch/arm/dts/rk3288-vyasa.dts
F: arch/arm/dts/rk3288-vyasa-u-boot.dtsi

View File

@@ -1,7 +1,6 @@
POPMETAL-RK3288
M: Lin Huang <hl@rock-chips.com>
S: Maintained
F: arch/arm/dts/rk3288-popmetal.dts
F: arch/arm/dts/rk3288-popmetal-u-boot.dtsi
F: board/chipspark/popmetal_rk3288
F: include/configs/popmetal_rk3288.h

View File

@@ -1,7 +1,6 @@
CHROMEBOOK JERRY BOARD
M: Simon Glass <sjg@chromium.org>
S: Maintained
F: arch/arm/dts/rk3288-veyron-jerry.dts
F: arch/arm/dts/rk3288-veyron-jerry-u-boot.dtsi
F: board/google/veyron/
F: include/configs/veyron.h
@@ -10,7 +9,6 @@ F: configs/chromebook_jerry_defconfig
CHROMEBIT MICKEY BOARD
M: Simon Glass <sjg@chromium.org>
S: Maintained
F: arch/arm/dts/rk3288-veyron-mickey.dts
F: arch/arm/dts/rk3288-veyron-mickey-u-boot.dtsi
F: board/google/veyron/
F: include/configs/veyron.h
@@ -19,7 +17,6 @@ F: configs/chromebit_mickey_defconfig
CHROMEBOOK MINNIE BOARD
M: Simon Glass <sjg@chromium.org>
S: Maintained
F: arch/arm/dts/rk3288-veyron-minnie.dts
F: arch/arm/dts/rk3288-veyron-minnie-u-boot.dtsi
F: board/google/veyron/
F: include/configs/veyron.h
@@ -28,7 +25,6 @@ F: configs/chromebook_minnie_defconfig
CHROMEBOOK SPEEDY BOARD
M: Simon Glass <sjg@chromium.org>
S: Maintained
F: arch/arm/dts/rk3288-veyron-speedy.dts
F: arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
F: board/google/veyron/
F: include/configs/veyron.h
@@ -37,8 +33,4 @@ F: configs/chromebook_speedy_defconfig
CHROMEBOOK VEYRON COMMON FILES
M: Simon Glass <sjg@chromium.org>
S: Maintained
F: arch/arm/dts/rk3288-veyron.dtsi
F: arch/arm/dts/rk3288-veyron-analog-audio.dtsi
F: arch/arm/dts/rk3288-veyron-broadcom-bluetooth.dtsi
F: arch/arm/dts/rk3288-veyron-chromebook.dtsi
F: arch/arm/dts/rk3288-veyron-edp.dtsi
F: arch/arm/dts/rk3288-veyron-u-boot.dtsi

View File

@@ -1,12 +1,10 @@
EVB-RK3288
M: Lin Huang <hl@rock-chips.com>
S: Maintained
F: arch/arm/dts/rk3288-evb.dts
F: arch/arm/dts/rk3288-evb.dtsi
F: arch/arm/dts/rk3288-evb-u-boot.dtsi
F: arch/arm/dts/rk3288-evb-rk808-u-boot.dtsi
F: board/rockchip/evb_rk3288
F: include/configs/evb_rk3288.h
F: configs/evb-rk3288_defconfig
F: configs/evb-rk3288-rk808_defconfig
ROCK-PI-N8
M: Jagan Teki <jagan@amarulasolutions.com>

View File

@@ -8,7 +8,7 @@ CONFIG_NR_DRAM_BANKS=1
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x100000
CONFIG_SF_DEFAULT_SPEED=20000000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-veyron-mickey"
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3288-veyron-mickey"
CONFIG_DM_RESET=y
CONFIG_SYS_MONITOR_LEN=614400
CONFIG_ROCKCHIP_RK3288=y
@@ -29,7 +29,7 @@ CONFIG_SPL_SPI=y
CONFIG_SPL_PAYLOAD="u-boot.img"
CONFIG_DEBUG_UART=y
CONFIG_USE_PREBOOT=y
CONFIG_DEFAULT_FDT_FILE="rk3288-veyron-mickey.dtb"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3288-veyron-mickey.dtb"
CONFIG_SILENT_CONSOLE=y
CONFIG_LOG=y
# CONFIG_DISPLAY_CPUINFO is not set

View File

@@ -8,7 +8,7 @@ CONFIG_NR_DRAM_BANKS=1
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x100000
CONFIG_SF_DEFAULT_SPEED=20000000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-veyron-jerry"
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3288-veyron-jerry"
CONFIG_DM_RESET=y
CONFIG_SYS_MONITOR_LEN=614400
CONFIG_ROCKCHIP_RK3288=y
@@ -28,7 +28,7 @@ CONFIG_SPL_SPI=y
CONFIG_SPL_PAYLOAD="u-boot.img"
CONFIG_DEBUG_UART=y
CONFIG_USE_PREBOOT=y
CONFIG_DEFAULT_FDT_FILE="rk3288-veyron-jerry.dtb"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3288-veyron-jerry.dtb"
CONFIG_SILENT_CONSOLE=y
CONFIG_LOG=y
# CONFIG_DISPLAY_CPUINFO is not set

View File

@@ -8,7 +8,7 @@ CONFIG_NR_DRAM_BANKS=1
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x100000
CONFIG_SF_DEFAULT_SPEED=20000000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-veyron-minnie"
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3288-veyron-minnie"
CONFIG_DM_RESET=y
CONFIG_SYS_MONITOR_LEN=614400
CONFIG_ROCKCHIP_RK3288=y
@@ -29,7 +29,7 @@ CONFIG_SPL_SPI=y
CONFIG_SPL_PAYLOAD="u-boot.img"
CONFIG_DEBUG_UART=y
CONFIG_USE_PREBOOT=y
CONFIG_DEFAULT_FDT_FILE="rk3288-veyron-minnie.dtb"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3288-veyron-minnie.dtb"
CONFIG_SILENT_CONSOLE=y
CONFIG_LOG=y
# CONFIG_DISPLAY_CPUINFO is not set

View File

@@ -8,7 +8,7 @@ CONFIG_NR_DRAM_BANKS=1
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x100000
CONFIG_SF_DEFAULT_SPEED=20000000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-veyron-speedy"
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3288-veyron-speedy"
CONFIG_DM_RESET=y
CONFIG_SYS_MONITOR_LEN=614400
CONFIG_ROCKCHIP_RK3288=y
@@ -29,7 +29,7 @@ CONFIG_SPL_SPI=y
CONFIG_SPL_PAYLOAD="u-boot.img"
CONFIG_DEBUG_UART=y
CONFIG_USE_PREBOOT=y
CONFIG_DEFAULT_FDT_FILE="rk3288-veyron-speedy.dtb"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3288-veyron-speedy.dtb"
CONFIG_SILENT_CONSOLE=y
CONFIG_LOG=y
# CONFIG_DISPLAY_CPUINFO is not set

View File

@@ -9,7 +9,7 @@ CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x100000
CONFIG_SF_DEFAULT_SPEED=20000000
CONFIG_ENV_OFFSET=0x3F8000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-evb"
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3288-evb-rk808"
CONFIG_DM_RESET=y
CONFIG_SYS_MONITOR_LEN=614400
CONFIG_ROCKCHIP_RK3288=y
@@ -29,7 +29,7 @@ CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_SPL_LOAD_FIT=y
CONFIG_USE_PREBOOT=y
CONFIG_DEFAULT_FDT_FILE="rk3288-evb-rk808.dtb"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3288-evb-rk808.dtb"
CONFIG_SILENT_CONSOLE=y
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_NO_BSS_LIMIT=y

View File

@@ -42,7 +42,6 @@ CONFIG_CMD_REGULATOR=y
# CONFIG_SPL_EFI_PARTITION is not set
CONFIG_SPL_OF_CONTROL=y
CONFIG_OF_LIVE=y
CONFIG_OF_UPSTREAM=y
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
CONFIG_ENV_IS_IN_MMC=y
CONFIG_ENV_RELOC_GD_ENV_ADDR=y

View File

@@ -16,6 +16,7 @@ CONFIG_SPL_FIT_SIGNATURE=y
CONFIG_SPL_LOAD_FIT=y
# CONFIG_BOOTMETH_VBE is not set
CONFIG_LEGACY_IMAGE_FORMAT=y
CONFIG_OF_SYSTEM_SETUP=y
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3588-generic.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_SPL_MAX_SIZE=0x40000

View File

@@ -41,7 +41,6 @@ CONFIG_CMD_REGULATOR=y
# CONFIG_SPL_EFI_PARTITION is not set
CONFIG_SPL_OF_CONTROL=y
CONFIG_OF_LIVE=y
CONFIG_OF_UPSTREAM=y
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
CONFIG_ENV_IS_IN_MMC=y
CONFIG_ENV_RELOC_GD_ENV_ADDR=y

View File

@@ -0,0 +1,64 @@
CONFIG_ARM=y
CONFIG_SKIP_LOWLEVEL_INIT=y
CONFIG_COUNTER_FREQUENCY=24000000
CONFIG_ARCH_ROCKCHIP=y
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3528-nanopi-zero2"
CONFIG_ROCKCHIP_RK3528=y
CONFIG_SYS_LOAD_ADDR=0xc00800
CONFIG_DEBUG_UART_BASE=0xFF9F0000
CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_DEBUG_UART=y
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3528-nanopi-zero2.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_BOARD_RNG_SEED=y
CONFIG_SPL_MAX_SIZE=0x40000
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
CONFIG_CMD_MEMINFO=y
CONFIG_CMD_MEMINFO_MAP=y
CONFIG_CMD_ADC=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
CONFIG_CMD_MISC=y
CONFIG_CMD_MMC=y
CONFIG_CMD_USB=y
CONFIG_CMD_ROCKUSB=y
CONFIG_CMD_USB_MASS_STORAGE=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_RNG=y
CONFIG_CMD_REGULATOR=y
# CONFIG_SPL_DOS_PARTITION is not set
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
CONFIG_BUTTON=y
CONFIG_BUTTON_ADC=y
# CONFIG_USB_FUNCTION_FASTBOOT is not set
CONFIG_ROCKCHIP_GPIO=y
CONFIG_LED=y
CONFIG_LED_GPIO=y
CONFIG_SUPPORT_EMMC_RPMB=y
CONFIG_MMC_DW=y
CONFIG_MMC_DW_ROCKCHIP=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_SDMA=y
CONFIG_MMC_SDHCI_ROCKCHIP=y
CONFIG_PHY_REALTEK=y
CONFIG_DM_MDIO=y
CONFIG_DWC_ETH_QOS=y
CONFIG_DWC_ETH_QOS_ROCKCHIP=y
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
CONFIG_PHY_ROCKCHIP_NANENG_COMBOPHY=y
CONFIG_REGULATOR_PWM=y
CONFIG_DM_REGULATOR_GPIO=y
CONFIG_PWM_ROCKCHIP=y
CONFIG_BAUDRATE=1500000
CONFIG_DEBUG_UART_SHIFT=2
CONFIG_SYS_NS16550_MEM32=y
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_GENERIC=y
CONFIG_USB_DWC3=y
CONFIG_USB_DWC3_GENERIC=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_DOWNLOAD=y
CONFIG_USB_FUNCTION_ROCKUSB=y
CONFIG_ERRNO_STR=y

View File

@@ -26,7 +26,7 @@ CONFIG_DEBUG_UART=y
CONFIG_LTO=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_USE_PREBOOT=y
CONFIG_DEFAULT_FDT_FILE="rk3288-phycore-rdk.dtb"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3288-phycore-rdk.dtb"
CONFIG_SILENT_CONSOLE=y
CONFIG_CONSOLE_MUX=y
CONFIG_DISPLAY_BOARDINFO_LATE=y
@@ -48,7 +48,6 @@ CONFIG_CMD_REGULATOR=y
# CONFIG_SPL_DOS_PARTITION is not set
# CONFIG_SPL_EFI_PARTITION is not set
CONFIG_SPL_OF_CONTROL=y
CONFIG_OF_UPSTREAM=y
CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
CONFIG_ENV_IS_IN_MMC=y
CONFIG_ENV_RELOC_GD_ENV_ADDR=y

View File

@@ -8,7 +8,7 @@ CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x100000
CONFIG_SF_DEFAULT_SPEED=20000000
CONFIG_ENV_OFFSET=0x3F8000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-popmetal"
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3288-popmetal"
CONFIG_SYS_MONITOR_LEN=614400
CONFIG_ROCKCHIP_RK3288=y
CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
@@ -25,7 +25,7 @@ CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_USE_PREBOOT=y
CONFIG_DEFAULT_FDT_FILE="rk3288-popmetal.dtb"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3288-popmetal.dtb"
CONFIG_SILENT_CONSOLE=y
CONFIG_CONSOLE_MUX=y
CONFIG_DISPLAY_BOARDINFO_LATE=y

View File

@@ -18,6 +18,7 @@ CONFIG_FIT_VERBOSE=y
CONFIG_SPL_FIT_SIGNATURE=y
CONFIG_SPL_LOAD_FIT=y
CONFIG_LEGACY_IMAGE_FORMAT=y
CONFIG_OF_SYSTEM_SETUP=y
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3588s-rock-5c.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_SPL_MAX_SIZE=0x40000

View File

@@ -10,7 +10,7 @@ CONFIG_NR_DRAM_BANKS=1
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x100000
CONFIG_ENV_OFFSET=0x3F8000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-rock-pi-n8"
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3288-rock-pi-n8"
CONFIG_DM_RESET=y
CONFIG_SYS_MONITOR_LEN=614400
CONFIG_ROCKCHIP_RK3288=y

View File

@@ -8,7 +8,7 @@ CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x100000
CONFIG_SF_DEFAULT_SPEED=20000000
CONFIG_ENV_OFFSET=0x3F8000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-rock2-square"
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3288-rock2-square"
CONFIG_SYS_MONITOR_LEN=614400
CONFIG_ROCKCHIP_RK3288=y
CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
@@ -25,7 +25,7 @@ CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_USE_PREBOOT=y
CONFIG_DEFAULT_FDT_FILE="rk3288-rock2-square.dtb"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3288-rock2-square.dtb"
CONFIG_SILENT_CONSOLE=y
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y

View File

@@ -75,10 +75,6 @@ CONFIG_MMC_IO_VOLTAGE=y
CONFIG_SPL_MMC_IO_VOLTAGE=y
CONFIG_MMC_UHS_SUPPORT=y
CONFIG_SPL_MMC_UHS_SUPPORT=y
CONFIG_MMC_HS400_ES_SUPPORT=y
CONFIG_SPL_MMC_HS400_ES_SUPPORT=y
CONFIG_MMC_HS400_SUPPORT=y
CONFIG_SPL_MMC_HS400_SUPPORT=y
CONFIG_MMC_DW=y
CONFIG_MMC_DW_ROCKCHIP=y
CONFIG_MMC_SDHCI=y

View File

@@ -42,7 +42,6 @@ CONFIG_CMD_REGULATOR=y
# CONFIG_SPL_EFI_PARTITION is not set
CONFIG_SPL_OF_CONTROL=y
CONFIG_OF_LIVE=y
CONFIG_OF_UPSTREAM=y
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
CONFIG_ENV_IS_IN_MMC=y
CONFIG_ENV_RELOC_GD_ENV_ADDR=y

View File

@@ -42,7 +42,6 @@ CONFIG_CMD_REGULATOR=y
# CONFIG_SPL_EFI_PARTITION is not set
CONFIG_SPL_OF_CONTROL=y
CONFIG_OF_LIVE=y
CONFIG_OF_UPSTREAM=y
CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
CONFIG_ENV_IS_IN_MMC=y
CONFIG_ENV_RELOC_GD_ENV_ADDR=y

View File

@@ -11,7 +11,7 @@ CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x100000
CONFIG_SF_DEFAULT_SPEED=20000000
CONFIG_ENV_OFFSET=0x3F8000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-vyasa"
CONFIG_DEFAULT_DEVICE_TREE="rockchip/rk3288-vyasa"
CONFIG_DM_RESET=y
CONFIG_SYS_MONITOR_LEN=614400
CONFIG_ROCKCHIP_RK3288=y
@@ -26,7 +26,7 @@ CONFIG_DEBUG_UART_BASE=0xff690000
CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_DEBUG_UART=y
CONFIG_USE_PREBOOT=y
CONFIG_DEFAULT_FDT_FILE="rk3288-vyasa.dtb"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3288-vyasa.dtb"
CONFIG_SILENT_CONSOLE=y
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_NO_BSS_LIMIT=y

View File

@@ -40,15 +40,17 @@ List of mainline supported Rockchip boards:
* rk3229
- Rockchip Evb-RK3229 (evb-rk3229)
* rk3288
- Rockchip Evb-RK3288 (evb-rk3288)
- Rockchip Evb-RK3288-rk808 (evb-rk3288-rk808)
- Firefly-RK3288 (firefly-rk3288)
- MQmaker MiQi (miqi-rk3288)
- Phytec RK3288 PCM-947 (phycore-rk3288)
- PopMetal-RK3288 (popmetal-rk3288)
- Radxa Rock 2 Square (rock2)
- Radxa Rock Pi N8 (rock-pi-n8-rk3288)
- Tinker-RK3288 (tinker-rk3288)
- Tinker-S-RK3288 (tinker-s-rk3288)
- Google Jerry (chromebook_jerry)
- Google Mickey (chromebook_mickey)
- Google Mickey (chromebit_mickey)
- Google Minnie (chromebook_minnie)
- Google Speedy (chromebook_speedy)
- Amarula Vyasa-RK3288 (vyasa-rk3288)
@@ -101,6 +103,7 @@ List of mainline supported Rockchip boards:
* rk3528
- ArmSoM Sige1 (sige1-rk3528)
- FriendlyElec NanoPi Zero2 (nanopi-zero2-rk3528)
- Generic RK3528 (generic-rk3528)
- Radxa E20C (radxa-e20c-rk3528)
- Radxa ROCK 2A/2F (rock-2-rk3528)
@@ -154,7 +157,7 @@ List of mainline supported Rockchip boards:
- FriendlyElec NanoPi R6C (nanopi-r6c-rk3588s)
- FriendlyElec NanoPi R6S (nanopi-r6s-rk3588s)
- GameForce Ace (gameforce-ace-rk3588s)
- Generic RK3588S/RK3588 (generic-rk3588)
- Generic RK3582/RK3588S/RK3588 (generic-rk3588)
- Hardkernel ODROID-M2 (odroid-m2-rk3588s)
- Indiedroid Nova (nova-rk3588s)
- Khadas Edge2 (khadas-edge2-rk3588s)
@@ -163,7 +166,7 @@ List of mainline supported Rockchip boards:
- Radxa ROCK 5 ITX (rock-5-itx-rk3588)
- Radxa ROCK 5A (rock5a-rk3588s)
- Radxa ROCK 5B/5B+/5T (rock5b-rk3588)
- Radxa ROCK 5C (rock-5c-rk3588s)
- Radxa ROCK 5C/5C Lite (rock-5c-rk3588s)
- Rockchip Toybrick TB-RK3588X (toybrick-rk3588)
- Theobroma Systems RK3588-SBC Jaguar (jaguar-rk3588)
- Theobroma Systems SOM-RK3588-Q7 - Tiger (tiger-rk3588)
@@ -244,7 +247,7 @@ To build rk3288 boards:
.. code-block:: bash
make evb-rk3288_defconfig
make evb-rk3288-mk808_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf-
To build rk3308 boards:

View File

@@ -15,6 +15,7 @@ obj-$(CONFIG_ROCKCHIP_RK3308) += clk_rk3308.o
obj-$(CONFIG_ROCKCHIP_RK3328) += clk_rk3328.o
obj-$(CONFIG_ROCKCHIP_RK3368) += clk_rk3368.o
obj-$(CONFIG_ROCKCHIP_RK3399) += clk_rk3399.o
obj-$(CONFIG_ROCKCHIP_RK3506) += clk_rk3506.o
obj-$(CONFIG_ROCKCHIP_RK3528) += clk_rk3528.o
obj-$(CONFIG_ROCKCHIP_RK3568) += clk_rk3568.o
obj-$(CONFIG_ROCKCHIP_RK3576) += clk_rk3576.o

File diff suppressed because it is too large Load Diff

View File

@@ -390,6 +390,10 @@ static const struct udevice_id rockchip_otp_ids[] = {
.compatible = "rockchip,rk3308-otp",
.data = (ulong)&px30_data,
},
{
.compatible = "rockchip,rk3506-otp",
.data = (ulong)&rk3568_data,
},
{
.compatible = "rockchip,rk3528-otp",
.data = (ulong)&rk3568_data,

View File

@@ -1620,6 +1620,10 @@ static const struct udevice_id eqos_ids[] = {
},
#endif
#if IS_ENABLED(CONFIG_DWC_ETH_QOS_ROCKCHIP)
{
.compatible = "rockchip,rk3506-gmac",
.data = (ulong)&eqos_rockchip_config
},
{
.compatible = "rockchip,rk3528-gmac",
.data = (ulong)&eqos_rockchip_config

View File

@@ -50,6 +50,80 @@ struct rockchip_platform_data {
(((tx) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \
((rx) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))
#define RK3506_GRF_SOC_CON8 0x0020
#define RK3506_GRF_SOC_CON11 0x002c
#define RK3506_GMAC_RMII_MODE GRF_BIT(1)
#define RK3506_GMAC_CLK_RMII_DIV2 GRF_BIT(3)
#define RK3506_GMAC_CLK_RMII_DIV20 GRF_CLR_BIT(3)
#define RK3506_GMAC_CLK_SELECT_CRU GRF_CLR_BIT(5)
#define RK3506_GMAC_CLK_SELECT_IO GRF_BIT(5)
#define RK3506_GMAC_CLK_RMII_GATE GRF_BIT(2)
#define RK3506_GMAC_CLK_RMII_NOGATE GRF_CLR_BIT(2)
static int rk3506_set_to_rgmii(struct udevice *dev,
int tx_delay, int rx_delay)
{
return -EINVAL;
}
static int rk3506_set_to_rmii(struct udevice *dev)
{
struct eth_pdata *pdata = dev_get_plat(dev);
struct rockchip_platform_data *data = pdata->priv_pdata;
u32 reg;
reg = data->id == 1 ? RK3506_GRF_SOC_CON11 :
RK3506_GRF_SOC_CON8;
regmap_write(data->grf, reg, RK3506_GMAC_RMII_MODE);
return 0;
}
static int rk3506_set_gmac_speed(struct udevice *dev)
{
struct eqos_priv *eqos = dev_get_priv(dev);
struct eth_pdata *pdata = dev_get_plat(dev);
struct rockchip_platform_data *data = pdata->priv_pdata;
u32 val, reg;
switch (eqos->phy->speed) {
case SPEED_10:
val = RK3506_GMAC_CLK_RMII_DIV20;
break;
case SPEED_100:
val = RK3506_GMAC_CLK_RMII_DIV2;
break;
default:
return -EINVAL;
}
reg = data->id == 1 ? RK3506_GRF_SOC_CON11 :
RK3506_GRF_SOC_CON8;
regmap_write(data->grf, reg, val);
return 0;
}
static void rk3506_set_clock_selection(struct udevice *dev, bool enable)
{
struct eth_pdata *pdata = dev_get_plat(dev);
struct rockchip_platform_data *data = pdata->priv_pdata;
u32 val, reg;
val = data->clock_input ? RK3506_GMAC_CLK_SELECT_IO :
RK3506_GMAC_CLK_SELECT_CRU;
val |= enable ? RK3506_GMAC_CLK_RMII_NOGATE :
RK3506_GMAC_CLK_RMII_GATE;
reg = data->id == 1 ? RK3506_GRF_SOC_CON11 :
RK3506_GRF_SOC_CON8;
regmap_write(data->grf, reg, val);
}
#define RK3528_VO_GRF_GMAC_CON 0x0018
#define RK3528_VPU_GRF_GMAC_CON5 0x0018
#define RK3528_VPU_GRF_GMAC_CON6 0x001c
@@ -534,6 +608,18 @@ static void rk3588_set_clock_selection(struct udevice *dev, bool enable)
}
static const struct rk_gmac_ops rk_gmac_ops[] = {
{
.compatible = "rockchip,rk3506-gmac",
.set_to_rgmii = rk3506_set_to_rgmii,
.set_to_rmii = rk3506_set_to_rmii,
.set_gmac_speed = rk3506_set_gmac_speed,
.set_clock_selection = rk3506_set_clock_selection,
.regs = {
0xff4c8000, /* gmac0 */
0xff4d0000, /* gmac1 */
0x0, /* sentinel */
},
},
{
.compatible = "rockchip,rk3528-gmac",
.set_to_rgmii = rk3528_set_to_rgmii,

View File

@@ -421,6 +421,22 @@ static const struct rockchip_usb2phy_cfg rk3399_usb2phy_cfgs[] = {
{ /* sentinel */ }
};
static const struct rockchip_usb2phy_cfg rk3506_phy_cfgs[] = {
{
.reg = 0xff2b0000,
.clkout_ctl_phy = { 0x041c, 7, 2, 0, 0x27 },
.port_cfgs = {
[USB2PHY_PORT_OTG] = {
.phy_sus = { 0x0060, 1, 0, 2, 1 },
},
[USB2PHY_PORT_HOST] = {
.phy_sus = { 0x0070, 1, 0, 2, 1 },
}
},
},
{ /* sentinel */ }
};
static const struct rockchip_usb2phy_cfg rk3528_phy_cfgs[] = {
{
.reg = 0xffdf0000,
@@ -540,6 +556,10 @@ static const struct udevice_id rockchip_usb2phy_ids[] = {
.compatible = "rockchip,rk3399-usb2phy",
.data = (ulong)&rk3399_usb2phy_cfgs,
},
{
.compatible = "rockchip,rk3506-usb2phy",
.data = (ulong)&rk3506_phy_cfgs,
},
{
.compatible = "rockchip,rk3528-usb2phy",
.data = (ulong)&rk3528_phy_cfgs,

View File

@@ -399,6 +399,14 @@ static int rk3568_combphy_cfg(struct rockchip_combphy_priv *priv)
param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
param_write(priv->phy_grf, &cfg->usb_mode_set, true);
switch (priv->id) {
case 0:
param_write(priv->pipe_grf, &cfg->u3otg0_port_en, true);
break;
case 1:
param_write(priv->pipe_grf, &cfg->u3otg1_port_en, true);
break;
}
break;
case PHY_TYPE_SATA:
writel(0x41, priv->mmio + 0x38);

View File

@@ -14,6 +14,7 @@ obj-$(CONFIG_ROCKCHIP_RK3308) += pinctrl-rk3308.o
obj-$(CONFIG_ROCKCHIP_RK3328) += pinctrl-rk3328.o
obj-$(CONFIG_ROCKCHIP_RK3368) += pinctrl-rk3368.o
obj-$(CONFIG_ROCKCHIP_RK3399) += pinctrl-rk3399.o
obj-$(CONFIG_ROCKCHIP_RK3506) += pinctrl-rk3506.o
obj-$(CONFIG_ROCKCHIP_RK3528) += pinctrl-rk3528.o
obj-$(CONFIG_ROCKCHIP_RK3568) += pinctrl-rk3568.o
obj-$(CONFIG_ROCKCHIP_RK3576) += pinctrl-rk3576.o

View File

@@ -0,0 +1,462 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2024 Rockchip Electronics Co., Ltd.
*/
#include <dm.h>
#include <dm/pinctrl.h>
#include <regmap.h>
#include <syscon.h>
#include "pinctrl-rockchip.h"
#include <dt-bindings/pinctrl/rockchip.h>
static int rk3506_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
{
struct rockchip_pinctrl_priv *priv = bank->priv;
int iomux_num = (pin / 8);
struct regmap *regmap;
int reg, mask;
u8 bit;
u32 data, rmask;
if (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
regmap = priv->regmap_pmu;
else
regmap = priv->regmap_base;
if (bank->bank_num == 1)
regmap = priv->regmap_ioc1;
else if (bank->bank_num == 4)
return 0;
reg = bank->iomux[iomux_num].offset;
if ((pin % 8) >= 4)
reg += 0x4;
bit = (pin % 4) * 4;
mask = 0xf;
if (bank->recalced_mask & BIT(pin))
rockchip_get_recalced_mux(bank, pin, &reg, &bit, &mask);
data = (mask << (bit + 16));
rmask = data | (data >> 16);
data |= (mux & mask) << bit;
return regmap_update_bits(regmap, reg, rmask, data);
}
#define RK3506_DRV_BITS_PER_PIN 8
#define RK3506_DRV_PINS_PER_REG 2
#define RK3506_DRV_GPIO0_A_OFFSET 0x100
#define RK3506_DRV_GPIO0_D_OFFSET 0x830
#define RK3506_DRV_GPIO1_OFFSET 0x140
#define RK3506_DRV_GPIO2_OFFSET 0x180
#define RK3506_DRV_GPIO3_OFFSET 0x1c0
#define RK3506_DRV_GPIO4_OFFSET 0x840
static int rk3506_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
int pin_num, struct regmap **regmap,
int *reg, u8 *bit)
{
struct rockchip_pinctrl_priv *priv = bank->priv;
int ret = 0;
switch (bank->bank_num) {
case 0:
*regmap = priv->regmap_pmu;
if (pin_num > 24) {
ret = -EINVAL;
} else if (pin_num < 24) {
*reg = RK3506_DRV_GPIO0_A_OFFSET;
} else {
*reg = RK3506_DRV_GPIO0_D_OFFSET;
*bit = 3;
return 0;
}
break;
case 1:
*regmap = priv->regmap_ioc1;
if (pin_num < 28)
*reg = RK3506_DRV_GPIO1_OFFSET;
else
ret = -EINVAL;
break;
case 2:
*regmap = priv->regmap_base;
if (pin_num < 17)
*reg = RK3506_DRV_GPIO2_OFFSET;
else
ret = -EINVAL;
break;
case 3:
*regmap = priv->regmap_base;
if (pin_num < 15)
*reg = RK3506_DRV_GPIO3_OFFSET;
else
ret = -EINVAL;
break;
case 4:
*regmap = priv->regmap_base;
if (pin_num < 8 || pin_num > 11) {
ret = -EINVAL;
} else {
*reg = RK3506_DRV_GPIO4_OFFSET;
*bit = 10;
return 0;
}
break;
default:
ret = -EINVAL;
break;
}
if (ret) {
debug("unsupported bank_num %d pin_num %d\n", bank->bank_num, pin_num);
return ret;
}
*reg += ((pin_num / RK3506_DRV_PINS_PER_REG) * 4);
*bit = pin_num % RK3506_DRV_PINS_PER_REG;
*bit *= RK3506_DRV_BITS_PER_PIN;
return 0;
}
static int rk3506_set_drive(struct rockchip_pin_bank *bank,
int pin_num, int strength)
{
struct regmap *regmap;
int reg, ret, i;
u32 data, rmask;
u8 bit;
int rmask_bits = RK3506_DRV_BITS_PER_PIN;
ret = rk3506_calc_drv_reg_and_bit(bank, pin_num, &regmap, &reg, &bit);
if (ret)
return ret;
for (i = 0, ret = 1; i < strength; i++)
ret = (ret << 1) | 1;
if ((bank->bank_num == 0 && pin_num == 24) || bank->bank_num == 4) {
rmask_bits = 2;
ret = strength;
}
/* enable the write to the equivalent lower bits */
data = ((1 << rmask_bits) - 1) << (bit + 16);
rmask = data | (data >> 16);
data |= (ret << bit);
return regmap_update_bits(regmap, reg, rmask, data);
}
#define RK3506_PULL_BITS_PER_PIN 2
#define RK3506_PULL_PINS_PER_REG 8
#define RK3506_PULL_GPIO0_A_OFFSET 0x200
#define RK3506_PULL_GPIO0_D_OFFSET 0x830
#define RK3506_PULL_GPIO1_OFFSET 0x210
#define RK3506_PULL_GPIO2_OFFSET 0x220
#define RK3506_PULL_GPIO3_OFFSET 0x230
#define RK3506_PULL_GPIO4_OFFSET 0x840
static int rk3506_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
int pin_num, struct regmap **regmap,
int *reg, u8 *bit)
{
struct rockchip_pinctrl_priv *priv = bank->priv;
int ret = 0;
switch (bank->bank_num) {
case 0:
*regmap = priv->regmap_pmu;
if (pin_num > 24) {
ret = -EINVAL;
} else if (pin_num < 24) {
*reg = RK3506_PULL_GPIO0_A_OFFSET;
} else {
*reg = RK3506_PULL_GPIO0_D_OFFSET;
*bit = 5;
return 0;
}
break;
case 1:
*regmap = priv->regmap_ioc1;
if (pin_num < 28)
*reg = RK3506_PULL_GPIO1_OFFSET;
else
ret = -EINVAL;
break;
case 2:
*regmap = priv->regmap_base;
if (pin_num < 17)
*reg = RK3506_PULL_GPIO2_OFFSET;
else
ret = -EINVAL;
break;
case 3:
*regmap = priv->regmap_base;
if (pin_num < 15)
*reg = RK3506_PULL_GPIO3_OFFSET;
else
ret = -EINVAL;
break;
case 4:
*regmap = priv->regmap_base;
if (pin_num < 8 || pin_num > 11) {
ret = -EINVAL;
} else {
*reg = RK3506_PULL_GPIO4_OFFSET;
*bit = 13;
return 0;
}
break;
default:
ret = -EINVAL;
break;
}
if (ret) {
debug("unsupported bank_num %d pin_num %d\n", bank->bank_num, pin_num);
return ret;
}
*reg += ((pin_num / RK3506_PULL_PINS_PER_REG) * 4);
*bit = pin_num % RK3506_PULL_PINS_PER_REG;
*bit *= RK3506_PULL_BITS_PER_PIN;
return 0;
}
static int rk3506_set_pull(struct rockchip_pin_bank *bank,
int pin_num, int pull)
{
struct regmap *regmap;
int reg, ret;
u8 bit, type;
u32 data, rmask;
if (pull == PIN_CONFIG_BIAS_PULL_PIN_DEFAULT)
return -EOPNOTSUPP;
ret = rk3506_calc_pull_reg_and_bit(bank, pin_num, &regmap, &reg, &bit);
if (ret)
return ret;
type = bank->pull_type[pin_num / 8];
if ((bank->bank_num == 0 && pin_num == 24) || bank->bank_num == 4)
type = 1;
ret = rockchip_translate_pull_value(type, pull);
if (ret < 0) {
debug("unsupported pull setting %d\n", pull);
return ret;
}
/* enable the write to the equivalent lower bits */
data = ((1 << RK3506_PULL_BITS_PER_PIN) - 1) << (bit + 16);
rmask = data | (data >> 16);
data |= (ret << bit);
return regmap_update_bits(regmap, reg, rmask, data);
}
#define RK3506_SMT_BITS_PER_PIN 1
#define RK3506_SMT_PINS_PER_REG 8
#define RK3506_SMT_GPIO0_A_OFFSET 0x400
#define RK3506_SMT_GPIO0_D_OFFSET 0x830
#define RK3506_SMT_GPIO1_OFFSET 0x410
#define RK3506_SMT_GPIO2_OFFSET 0x420
#define RK3506_SMT_GPIO3_OFFSET 0x430
#define RK3506_SMT_GPIO4_OFFSET 0x840
static int rk3506_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
int pin_num,
struct regmap **regmap,
int *reg, u8 *bit)
{
struct rockchip_pinctrl_priv *priv = bank->priv;
int ret = 0;
switch (bank->bank_num) {
case 0:
*regmap = priv->regmap_pmu;
if (pin_num > 24) {
ret = -EINVAL;
} else if (pin_num < 24) {
*reg = RK3506_SMT_GPIO0_A_OFFSET;
} else {
*reg = RK3506_SMT_GPIO0_D_OFFSET;
*bit = 9;
return 0;
}
break;
case 1:
*regmap = priv->regmap_ioc1;
if (pin_num < 28)
*reg = RK3506_SMT_GPIO1_OFFSET;
else
ret = -EINVAL;
break;
case 2:
*regmap = priv->regmap_base;
if (pin_num < 17)
*reg = RK3506_SMT_GPIO2_OFFSET;
else
ret = -EINVAL;
break;
case 3:
*regmap = priv->regmap_base;
if (pin_num < 15)
*reg = RK3506_SMT_GPIO3_OFFSET;
else
ret = -EINVAL;
break;
case 4:
*regmap = priv->regmap_base;
if (pin_num < 8 || pin_num > 11) {
ret = -EINVAL;
} else {
*reg = RK3506_SMT_GPIO4_OFFSET;
*bit = 8;
return 0;
}
break;
default:
ret = -EINVAL;
break;
}
if (ret) {
debug("unsupported bank_num %d pin_num %d\n", bank->bank_num, pin_num);
return ret;
}
*reg += ((pin_num / RK3506_SMT_PINS_PER_REG) * 4);
*bit = pin_num % RK3506_SMT_PINS_PER_REG;
*bit *= RK3506_SMT_BITS_PER_PIN;
return 0;
}
static int rk3506_set_schmitt(struct rockchip_pin_bank *bank,
int pin_num, int enable)
{
struct regmap *regmap;
int reg, ret;
u32 data, rmask;
u8 bit;
ret = rk3506_calc_schmitt_reg_and_bit(bank, pin_num, &regmap, &reg, &bit);
if (ret)
return ret;
/* enable the write to the equivalent lower bits */
data = ((1 << RK3506_SMT_BITS_PER_PIN) - 1) << (bit + 16);
rmask = data | (data >> 16);
data |= (enable << bit);
if ((bank->bank_num == 0 && pin_num == 24) || bank->bank_num == 4) {
data = 0x3 << (bit + 16);
rmask = data | (data >> 16);
data |= ((enable ? 0x3 : 0) << bit);
}
return regmap_update_bits(regmap, reg, rmask, data);
}
static struct rockchip_mux_recalced_data rk3506_mux_recalced_data[] = {
{
.num = 0,
.pin = 24,
.reg = 0x830,
.bit = 0,
.mask = 0x3
},
};
static struct rockchip_pin_bank rk3506_pin_banks[] = {
PIN_BANK_IOMUX_FLAGS_OFFSET(0, 32, "gpio0",
IOMUX_WIDTH_4BIT | IOMUX_SOURCE_PMU,
IOMUX_WIDTH_4BIT | IOMUX_SOURCE_PMU,
IOMUX_WIDTH_4BIT | IOMUX_SOURCE_PMU,
IOMUX_8WIDTH_2BIT | IOMUX_SOURCE_PMU,
0x0, 0x8, 0x10, 0x830),
PIN_BANK_IOMUX_FLAGS_OFFSET(1, 32, "gpio1",
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
0x20, 0x28, 0x30, 0x38),
PIN_BANK_IOMUX_FLAGS_OFFSET(2, 32, "gpio2",
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
0x40, 0x48, 0x50, 0x58),
PIN_BANK_IOMUX_FLAGS_OFFSET(3, 32, "gpio3",
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
0x60, 0x68, 0x70, 0x78),
PIN_BANK_IOMUX_FLAGS_OFFSET(4, 32, "gpio4",
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
IOMUX_WIDTH_4BIT,
0x80, 0x88, 0x90, 0x98),
};
static const struct rockchip_pin_ctrl rk3506_pin_ctrl = {
.pin_banks = rk3506_pin_banks,
.nr_banks = ARRAY_SIZE(rk3506_pin_banks),
.iomux_recalced = rk3506_mux_recalced_data,
.niomux_recalced = ARRAY_SIZE(rk3506_mux_recalced_data),
.set_mux = rk3506_set_mux,
.set_pull = rk3506_set_pull,
.set_drive = rk3506_set_drive,
.set_schmitt = rk3506_set_schmitt,
};
static const struct udevice_id rk3506_pinctrl_ids[] = {
{
.compatible = "rockchip,rk3506-pinctrl",
.data = (ulong)&rk3506_pin_ctrl
},
{ }
};
U_BOOT_DRIVER(rockchip_rk3506_pinctrl) = {
.name = "rockchip_rk3506_pinctrl",
.id = UCLASS_PINCTRL,
.of_match = rk3506_pinctrl_ids,
.priv_auto = sizeof(struct rockchip_pinctrl_priv),
.ops = &rockchip_pinctrl_ops,
#if CONFIG_IS_ENABLED(OF_REAL)
.bind = dm_scan_fdt_dev,
#endif
.probe = rockchip_pinctrl_probe,
};

View File

@@ -10,6 +10,7 @@
#include <syscon.h>
#include <fdtdec.h>
#include <linux/bitops.h>
#include <linux/err.h>
#include <linux/libfdt.h>
#include "pinctrl-rockchip.h"
@@ -641,37 +642,30 @@ int rockchip_pinctrl_probe(struct udevice *dev)
{
struct rockchip_pinctrl_priv *priv = dev_get_priv(dev);
struct rockchip_pin_ctrl *ctrl;
struct udevice *syscon;
struct regmap *regmap;
int ret = 0;
/* get rockchip grf syscon phandle */
ret = uclass_get_device_by_phandle(UCLASS_SYSCON, dev, "rockchip,grf",
&syscon);
if (ret) {
debug("unable to find rockchip,grf syscon device (%d)\n", ret);
return ret;
priv->regmap_base =
syscon_regmap_lookup_by_phandle(dev, "rockchip,grf");
if (IS_ERR(priv->regmap_base)) {
debug("unable to find rockchip,grf regmap\n");
return PTR_ERR(priv->regmap_base);
}
/* get grf-reg base address */
regmap = syscon_get_regmap(syscon);
if (!regmap) {
debug("unable to find rockchip grf regmap\n");
return -ENODEV;
}
priv->regmap_base = regmap;
/* option: get pmu-reg base address */
ret = uclass_get_device_by_phandle(UCLASS_SYSCON, dev, "rockchip,pmu",
&syscon);
if (!ret) {
/* get pmugrf-reg base address */
regmap = syscon_get_regmap(syscon);
if (!regmap) {
debug("unable to find rockchip pmu regmap\n");
return -ENODEV;
if (dev_read_bool(dev, "rockchip,pmu")) {
priv->regmap_pmu =
syscon_regmap_lookup_by_phandle(dev, "rockchip,pmu");
if (IS_ERR(priv->regmap_pmu)) {
debug("unable to find rockchip,pmu regmap\n");
return PTR_ERR(priv->regmap_pmu);
}
}
if (dev_read_bool(dev, "rockchip,ioc1")) {
priv->regmap_ioc1 =
syscon_regmap_lookup_by_phandle(dev, "rockchip,ioc1");
if (IS_ERR(priv->regmap_ioc1)) {
debug("unable to find rockchip,ioc1 regmap\n");
return PTR_ERR(priv->regmap_ioc1);
}
priv->regmap_pmu = regmap;
}
ctrl = rockchip_pinctrl_get_soc_data(dev);

View File

@@ -528,6 +528,7 @@ struct rockchip_pinctrl_priv {
struct rockchip_pin_ctrl *ctrl;
struct regmap *regmap_base;
struct regmap *regmap_pmu;
struct regmap *regmap_ioc1;
};
extern const struct pinctrl_ops rockchip_pinctrl_ops;

View File

@@ -13,6 +13,7 @@ obj-$(CONFIG_ROCKCHIP_RK3288) = sdram_rk3288.o
obj-$(CONFIG_ROCKCHIP_RK3308) = sdram_rk3308.o
obj-$(CONFIG_ROCKCHIP_RK3328) = sdram_rk3328.o sdram_pctl_px30.o sdram_phy_px30.o
obj-$(CONFIG_ROCKCHIP_RK3399) += sdram_rk3399.o
obj-$(CONFIG_ROCKCHIP_RK3506) += sdram_rk3506.o
obj-$(CONFIG_ROCKCHIP_RK3528) += sdram_rk3528.o
obj-$(CONFIG_ROCKCHIP_RK3568) += sdram_rk3568.o
obj-$(CONFIG_ROCKCHIP_RK3576) += sdram_rk3576.o

View File

@@ -0,0 +1,33 @@
// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright Contributors to the U-Boot project.
#include <dm.h>
#include <ram.h>
#include <asm/arch-rockchip/sdram.h>
#define PMUGRF_BASE 0xff910000
#define OS_REG2_REG 0x208
static int rk3506_dmc_get_info(struct udevice *dev, struct ram_info *info)
{
info->base = CFG_SYS_SDRAM_BASE;
info->size = rockchip_sdram_size(PMUGRF_BASE + OS_REG2_REG);
return 0;
}
static struct ram_ops rk3506_dmc_ops = {
.get_info = rk3506_dmc_get_info,
};
static const struct udevice_id rk3506_dmc_ids[] = {
{ .compatible = "rockchip,rk3506-dmc" },
{ }
};
U_BOOT_DRIVER(rockchip_rk3506_dmc) = {
.name = "rockchip_rk3506_dmc",
.id = UCLASS_RAM,
.of_match = rk3506_dmc_ids,
.ops = &rk3506_dmc_ops,
};

View File

@@ -16,7 +16,7 @@ obj-$(CONFIG_RESET_BCM6345) += reset-bcm6345.o
obj-$(CONFIG_RESET_UNIPHIER) += reset-uniphier.o
obj-$(CONFIG_RESET_AST2500) += reset-ast2500.o
obj-$(CONFIG_RESET_AST2600) += reset-ast2600.o
obj-$(CONFIG_RESET_ROCKCHIP) += reset-rockchip.o rst-rk3528.o rst-rk3576.o rst-rk3588.o
obj-$(CONFIG_RESET_ROCKCHIP) += reset-rockchip.o rst-rk3506.o rst-rk3528.o rst-rk3576.o rst-rk3588.o
obj-$(CONFIG_RESET_MESON) += reset-meson.o
obj-$(CONFIG_RESET_SOCFPGA) += reset-socfpga.o
obj-$(CONFIG_RESET_MEDIATEK) += reset-mediatek.o

222
drivers/reset/rst-rk3506.c Normal file
View File

@@ -0,0 +1,222 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
* Author: Finley Xiao <finley.xiao@rock-chips.com>
*/
#include <dm.h>
#include <asm/arch-rockchip/clock.h>
#include <dt-bindings/reset/rockchip,rk3506-cru.h>
/* 0xFF9A0000 + 0x0A00 */
#define RK3506_CRU_RESET_OFFSET(id, reg, bit) [id] = (0 + reg * 16 + bit)
/* mapping table for reset ID to register offset */
static const int rk3506_register_offset[] = {
/* CRU-->SOFTRST_CON00 */
RK3506_CRU_RESET_OFFSET(SRST_NCOREPORESET0_AC, 0, 0),
RK3506_CRU_RESET_OFFSET(SRST_NCOREPORESET1_AC, 0, 1),
RK3506_CRU_RESET_OFFSET(SRST_NCOREPORESET2_AC, 0, 2),
RK3506_CRU_RESET_OFFSET(SRST_NCORESET0_AC, 0, 4),
RK3506_CRU_RESET_OFFSET(SRST_NCORESET1_AC, 0, 5),
RK3506_CRU_RESET_OFFSET(SRST_NCORESET2_AC, 0, 6),
RK3506_CRU_RESET_OFFSET(SRST_NL2RESET_AC, 0, 8),
RK3506_CRU_RESET_OFFSET(SRST_A_CORE_BIU_AC, 0, 9),
RK3506_CRU_RESET_OFFSET(SRST_H_M0_AC, 0, 10),
/* CRU-->SOFTRST_CON02 */
RK3506_CRU_RESET_OFFSET(SRST_NDBGRESET, 2, 10),
RK3506_CRU_RESET_OFFSET(SRST_P_CORE_BIU, 2, 14),
RK3506_CRU_RESET_OFFSET(SRST_PMU, 2, 15),
/* CRU-->SOFTRST_CON03 */
RK3506_CRU_RESET_OFFSET(SRST_P_DBG, 3, 1),
RK3506_CRU_RESET_OFFSET(SRST_POT_DBG, 3, 2),
RK3506_CRU_RESET_OFFSET(SRST_P_CORE_GRF, 3, 4),
RK3506_CRU_RESET_OFFSET(SRST_CORE_EMA_DETECT, 3, 6),
RK3506_CRU_RESET_OFFSET(SRST_REF_PVTPLL_CORE, 3, 7),
RK3506_CRU_RESET_OFFSET(SRST_P_GPIO1, 3, 8),
RK3506_CRU_RESET_OFFSET(SRST_DB_GPIO1, 3, 9),
/* CRU-->SOFTRST_CON04 */
RK3506_CRU_RESET_OFFSET(SRST_A_CORE_PERI_BIU, 4, 3),
RK3506_CRU_RESET_OFFSET(SRST_A_DSMC, 4, 5),
RK3506_CRU_RESET_OFFSET(SRST_P_DSMC, 4, 6),
RK3506_CRU_RESET_OFFSET(SRST_FLEXBUS, 4, 7),
RK3506_CRU_RESET_OFFSET(SRST_A_FLEXBUS, 4, 9),
RK3506_CRU_RESET_OFFSET(SRST_H_FLEXBUS, 4, 10),
RK3506_CRU_RESET_OFFSET(SRST_A_DSMC_SLV, 4, 11),
RK3506_CRU_RESET_OFFSET(SRST_H_DSMC_SLV, 4, 12),
RK3506_CRU_RESET_OFFSET(SRST_DSMC_SLV, 4, 13),
/* CRU-->SOFTRST_CON05 */
RK3506_CRU_RESET_OFFSET(SRST_A_BUS_BIU, 5, 3),
RK3506_CRU_RESET_OFFSET(SRST_H_BUS_BIU, 5, 4),
RK3506_CRU_RESET_OFFSET(SRST_P_BUS_BIU, 5, 5),
RK3506_CRU_RESET_OFFSET(SRST_A_SYSRAM, 5, 6),
RK3506_CRU_RESET_OFFSET(SRST_H_SYSRAM, 5, 7),
RK3506_CRU_RESET_OFFSET(SRST_A_DMAC0, 5, 8),
RK3506_CRU_RESET_OFFSET(SRST_A_DMAC1, 5, 9),
RK3506_CRU_RESET_OFFSET(SRST_H_M0, 5, 10),
RK3506_CRU_RESET_OFFSET(SRST_M0_JTAG, 5, 11),
RK3506_CRU_RESET_OFFSET(SRST_H_CRYPTO, 5, 15),
/* CRU-->SOFTRST_CON06 */
RK3506_CRU_RESET_OFFSET(SRST_H_RNG, 6, 0),
RK3506_CRU_RESET_OFFSET(SRST_P_BUS_GRF, 6, 1),
RK3506_CRU_RESET_OFFSET(SRST_P_TIMER0, 6, 2),
RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH0, 6, 3),
RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH1, 6, 4),
RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH2, 6, 5),
RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH3, 6, 6),
RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH4, 6, 7),
RK3506_CRU_RESET_OFFSET(SRST_TIMER0_CH5, 6, 8),
RK3506_CRU_RESET_OFFSET(SRST_P_WDT0, 6, 9),
RK3506_CRU_RESET_OFFSET(SRST_T_WDT0, 6, 10),
RK3506_CRU_RESET_OFFSET(SRST_P_WDT1, 6, 11),
RK3506_CRU_RESET_OFFSET(SRST_T_WDT1, 6, 12),
RK3506_CRU_RESET_OFFSET(SRST_P_MAILBOX, 6, 13),
RK3506_CRU_RESET_OFFSET(SRST_P_INTMUX, 6, 14),
RK3506_CRU_RESET_OFFSET(SRST_P_SPINLOCK, 6, 15),
/* CRU-->SOFTRST_CON07 */
RK3506_CRU_RESET_OFFSET(SRST_P_DDRC, 7, 0),
RK3506_CRU_RESET_OFFSET(SRST_H_DDRPHY, 7, 1),
RK3506_CRU_RESET_OFFSET(SRST_P_DDRMON, 7, 2),
RK3506_CRU_RESET_OFFSET(SRST_DDRMON_OSC, 7, 3),
RK3506_CRU_RESET_OFFSET(SRST_P_DDR_LPC, 7, 4),
RK3506_CRU_RESET_OFFSET(SRST_H_USBOTG0, 7, 5),
RK3506_CRU_RESET_OFFSET(SRST_USBOTG0_ADP, 7, 7),
RK3506_CRU_RESET_OFFSET(SRST_H_USBOTG1, 7, 8),
RK3506_CRU_RESET_OFFSET(SRST_USBOTG1_ADP, 7, 10),
RK3506_CRU_RESET_OFFSET(SRST_P_USBPHY, 7, 11),
RK3506_CRU_RESET_OFFSET(SRST_USBPHY_POR, 7, 12),
RK3506_CRU_RESET_OFFSET(SRST_USBPHY_OTG0, 7, 13),
RK3506_CRU_RESET_OFFSET(SRST_USBPHY_OTG1, 7, 14),
/* CRU-->SOFTRST_CON08 */
RK3506_CRU_RESET_OFFSET(SRST_A_DMA2DDR, 8, 0),
RK3506_CRU_RESET_OFFSET(SRST_P_DMA2DDR, 8, 1),
/* CRU-->SOFTRST_CON09 */
RK3506_CRU_RESET_OFFSET(SRST_USBOTG0_UTMI, 9, 0),
RK3506_CRU_RESET_OFFSET(SRST_USBOTG1_UTMI, 9, 1),
/* CRU-->SOFTRST_CON10 */
RK3506_CRU_RESET_OFFSET(SRST_A_DDRC_0, 10, 0),
RK3506_CRU_RESET_OFFSET(SRST_A_DDRC_1, 10, 1),
RK3506_CRU_RESET_OFFSET(SRST_A_DDR_BIU, 10, 2),
RK3506_CRU_RESET_OFFSET(SRST_DDRC, 10, 3),
RK3506_CRU_RESET_OFFSET(SRST_DDRMON, 10, 4),
/* CRU-->SOFTRST_CON11 */
RK3506_CRU_RESET_OFFSET(SRST_H_LSPERI_BIU, 11, 2),
RK3506_CRU_RESET_OFFSET(SRST_P_UART0, 11, 4),
RK3506_CRU_RESET_OFFSET(SRST_P_UART1, 11, 5),
RK3506_CRU_RESET_OFFSET(SRST_P_UART2, 11, 6),
RK3506_CRU_RESET_OFFSET(SRST_P_UART3, 11, 7),
RK3506_CRU_RESET_OFFSET(SRST_P_UART4, 11, 8),
RK3506_CRU_RESET_OFFSET(SRST_UART0, 11, 9),
RK3506_CRU_RESET_OFFSET(SRST_UART1, 11, 10),
RK3506_CRU_RESET_OFFSET(SRST_UART2, 11, 11),
RK3506_CRU_RESET_OFFSET(SRST_UART3, 11, 12),
RK3506_CRU_RESET_OFFSET(SRST_UART4, 11, 13),
RK3506_CRU_RESET_OFFSET(SRST_P_I2C0, 11, 14),
RK3506_CRU_RESET_OFFSET(SRST_I2C0, 11, 15),
/* CRU-->SOFTRST_CON12 */
RK3506_CRU_RESET_OFFSET(SRST_P_I2C1, 12, 0),
RK3506_CRU_RESET_OFFSET(SRST_I2C1, 12, 1),
RK3506_CRU_RESET_OFFSET(SRST_P_I2C2, 12, 2),
RK3506_CRU_RESET_OFFSET(SRST_I2C2, 12, 3),
RK3506_CRU_RESET_OFFSET(SRST_P_PWM1, 12, 4),
RK3506_CRU_RESET_OFFSET(SRST_PWM1, 12, 5),
RK3506_CRU_RESET_OFFSET(SRST_P_SPI0, 12, 10),
RK3506_CRU_RESET_OFFSET(SRST_SPI0, 12, 11),
RK3506_CRU_RESET_OFFSET(SRST_P_SPI1, 12, 12),
RK3506_CRU_RESET_OFFSET(SRST_SPI1, 12, 13),
RK3506_CRU_RESET_OFFSET(SRST_P_GPIO2, 12, 14),
RK3506_CRU_RESET_OFFSET(SRST_DB_GPIO2, 12, 15),
/* CRU-->SOFTRST_CON13 */
RK3506_CRU_RESET_OFFSET(SRST_P_GPIO3, 13, 0),
RK3506_CRU_RESET_OFFSET(SRST_DB_GPIO3, 13, 1),
RK3506_CRU_RESET_OFFSET(SRST_P_GPIO4, 13, 2),
RK3506_CRU_RESET_OFFSET(SRST_DB_GPIO4, 13, 3),
RK3506_CRU_RESET_OFFSET(SRST_H_CAN0, 13, 4),
RK3506_CRU_RESET_OFFSET(SRST_CAN0, 13, 5),
RK3506_CRU_RESET_OFFSET(SRST_H_CAN1, 13, 6),
RK3506_CRU_RESET_OFFSET(SRST_CAN1, 13, 7),
RK3506_CRU_RESET_OFFSET(SRST_H_PDM, 13, 8),
RK3506_CRU_RESET_OFFSET(SRST_M_PDM, 13, 9),
RK3506_CRU_RESET_OFFSET(SRST_PDM, 13, 10),
RK3506_CRU_RESET_OFFSET(SRST_SPDIFTX, 13, 11),
RK3506_CRU_RESET_OFFSET(SRST_H_SPDIFTX, 13, 12),
RK3506_CRU_RESET_OFFSET(SRST_H_SPDIFRX, 13, 13),
RK3506_CRU_RESET_OFFSET(SRST_SPDIFRX, 13, 14),
RK3506_CRU_RESET_OFFSET(SRST_M_SAI0, 13, 15),
/* CRU-->SOFTRST_CON14 */
RK3506_CRU_RESET_OFFSET(SRST_H_SAI0, 14, 0),
RK3506_CRU_RESET_OFFSET(SRST_M_SAI1, 14, 2),
RK3506_CRU_RESET_OFFSET(SRST_H_SAI1, 14, 3),
RK3506_CRU_RESET_OFFSET(SRST_H_ASRC0, 14, 5),
RK3506_CRU_RESET_OFFSET(SRST_ASRC0, 14, 6),
RK3506_CRU_RESET_OFFSET(SRST_H_ASRC1, 14, 7),
RK3506_CRU_RESET_OFFSET(SRST_ASRC1, 14, 8),
/* CRU-->SOFTRST_CON17 */
RK3506_CRU_RESET_OFFSET(SRST_H_HSPERI_BIU, 17, 4),
RK3506_CRU_RESET_OFFSET(SRST_H_SDMMC, 17, 7),
RK3506_CRU_RESET_OFFSET(SRST_H_FSPI, 17, 8),
RK3506_CRU_RESET_OFFSET(SRST_S_FSPI, 17, 9),
RK3506_CRU_RESET_OFFSET(SRST_P_SPI2, 17, 10),
RK3506_CRU_RESET_OFFSET(SRST_A_MAC0, 17, 11),
RK3506_CRU_RESET_OFFSET(SRST_A_MAC1, 17, 12),
/* CRU-->SOFTRST_CON18 */
RK3506_CRU_RESET_OFFSET(SRST_M_SAI2, 18, 2),
RK3506_CRU_RESET_OFFSET(SRST_H_SAI2, 18, 3),
RK3506_CRU_RESET_OFFSET(SRST_H_SAI3, 18, 6),
RK3506_CRU_RESET_OFFSET(SRST_M_SAI3, 18, 7),
RK3506_CRU_RESET_OFFSET(SRST_H_SAI4, 18, 10),
RK3506_CRU_RESET_OFFSET(SRST_M_SAI4, 18, 11),
RK3506_CRU_RESET_OFFSET(SRST_H_DSM, 18, 12),
RK3506_CRU_RESET_OFFSET(SRST_M_DSM, 18, 13),
RK3506_CRU_RESET_OFFSET(SRST_P_AUDIO_ADC, 18, 14),
RK3506_CRU_RESET_OFFSET(SRST_M_AUDIO_ADC, 18, 15),
/* CRU-->SOFTRST_CON19 */
RK3506_CRU_RESET_OFFSET(SRST_P_SARADC, 19, 0),
RK3506_CRU_RESET_OFFSET(SRST_SARADC, 19, 1),
RK3506_CRU_RESET_OFFSET(SRST_SARADC_PHY, 19, 2),
RK3506_CRU_RESET_OFFSET(SRST_P_OTPC_NS, 19, 3),
RK3506_CRU_RESET_OFFSET(SRST_SBPI_OTPC_NS, 19, 4),
RK3506_CRU_RESET_OFFSET(SRST_USER_OTPC_NS, 19, 5),
RK3506_CRU_RESET_OFFSET(SRST_P_UART5, 19, 6),
RK3506_CRU_RESET_OFFSET(SRST_UART5, 19, 7),
RK3506_CRU_RESET_OFFSET(SRST_P_GPIO234_IOC, 19, 8),
/* CRU-->SOFTRST_CON21 */
RK3506_CRU_RESET_OFFSET(SRST_A_VIO_BIU, 21, 3),
RK3506_CRU_RESET_OFFSET(SRST_H_VIO_BIU, 21, 4),
RK3506_CRU_RESET_OFFSET(SRST_H_RGA, 21, 6),
RK3506_CRU_RESET_OFFSET(SRST_A_RGA, 21, 7),
RK3506_CRU_RESET_OFFSET(SRST_CORE_RGA, 21, 8),
RK3506_CRU_RESET_OFFSET(SRST_A_VOP, 21, 9),
RK3506_CRU_RESET_OFFSET(SRST_H_VOP, 21, 10),
RK3506_CRU_RESET_OFFSET(SRST_VOP, 21, 11),
RK3506_CRU_RESET_OFFSET(SRST_P_DPHY, 21, 12),
RK3506_CRU_RESET_OFFSET(SRST_P_DSI_HOST, 21, 13),
RK3506_CRU_RESET_OFFSET(SRST_P_TSADC, 21, 14),
RK3506_CRU_RESET_OFFSET(SRST_TSADC, 21, 15),
/* CRU-->SOFTRST_CON22 */
RK3506_CRU_RESET_OFFSET(SRST_P_GPIO1_IOC, 22, 1),
};
int rk3506_reset_bind_lut(struct udevice *pdev, u32 reg_offset, u32 reg_number)
{
return rockchip_reset_bind_lut(pdev, rk3506_register_offset,
reg_offset, reg_number);
}

View File

@@ -89,6 +89,7 @@ config USB_GADGET_PRODUCT_NUM
default 0x350b if ROCKCHIP_RK3588
default 0x350c if ROCKCHIP_RK3528
default 0x350e if ROCKCHIP_RK3576
default 0x350f if ROCKCHIP_RK3506
default 0x4ee0 if ARCH_SNAPDRAGON
default 0x0
help

View File

@@ -0,0 +1,38 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Copyright Contributors to the U-Boot project. */
#ifndef __CONFIG_RK3506_COMMON_H
#define __CONFIG_RK3506_COMMON_H
#define CFG_CPUID_OFFSET 0xa
#include "rockchip-common.h"
#define CFG_IRAM_BASE 0xfff80000
#define CFG_SYS_SDRAM_BASE 0
#define SDRAM_MAX_SIZE 0xc0000000
#ifndef ROCKCHIP_DEVICE_SETTINGS
#define ROCKCHIP_DEVICE_SETTINGS
#endif
#define ENV_MEM_LAYOUT_SETTINGS \
"scriptaddr=0x00500000\0" \
"script_offset_f=0xffe000\0" \
"script_size_f=0x2000\0" \
"pxefile_addr_r=0x00600000\0" \
"kernel_addr_r=0x02080000\0" \
"kernel_comp_addr_r=0x08000000\0" \
"fdt_addr_r=0x01e00000\0" \
"fdtoverlay_addr_r=0x01f00000\0" \
"ramdisk_addr_r=0x06000000\0" \
"kernel_comp_size=0x2000000\0"
#define CFG_EXTRA_ENV_SETTINGS \
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
ENV_MEM_LAYOUT_SETTINGS \
ROCKCHIP_DEVICE_SETTINGS \
"boot_targets=" BOOT_TARGETS "\0"
#endif /* __CONFIG_RK3506_COMMON_H */

View File

@@ -148,12 +148,13 @@ static struct spl_info spl_infos[] = {
{ "rk3328", "RK32", 0x8000 - 0x800, false, RK_HEADER_V1 },
{ "rk3368", "RK33", 0x8000 - 0x1000, false, RK_HEADER_V1 },
{ "rk3399", "RK33", 0x30000 - 0x2000, false, RK_HEADER_V1 },
{ "rv1108", "RK11", 0x1800, false, RK_HEADER_V1 },
{ "rv1126", "110B", 0x10000 - 0x1000, false, RK_HEADER_V1 },
{ "rk3506", "RK35", 0xC000 - 0x1000, false, RK_HEADER_V2 },
{ "rk3528", "RK35", 0x10000 - 0x1000, false, RK_HEADER_V2 },
{ "rk3568", "RK35", 0x10000 - 0x1000, false, RK_HEADER_V2 },
{ "rk3576", "RK35", 0x80000 - 0x1000, false, RK_HEADER_V2 },
{ "rk3588", "RK35", 0x100000 - 0x1000, false, RK_HEADER_V2 },
{ "rv1108", "RK11", 0x1800, false, RK_HEADER_V1 },
{ "rv1126", "110B", 0x10000 - 0x1000, false, RK_HEADER_V1 },
};
/**