mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-23 15:41:22 +02:00
Add support for WinLink E850-96 board [1]. It's based on Exynos850 SoC and follows 96boards specification, so it's compatible with 96boards mezzanine boards [2]. This patch enables next features: * Serial console * USI * PMU (muxing AP UART path) * Pinctrl * Clocks * Timer (ARMv8 architected) * Reset control It's quite a minimal enablement. Features like MMC, USB and Ethernet will be enabled later. The rationale for config values is as follows: * TEXT_BASE = 0xf8800000 That's where BL2 loads the U-Boot payload, so TEXT_BASE must be exactly this value. Overall the memory map is designed in a way to keep the bootloader in the upper 128 MiB area of RAM, which is 0xf8000000..0xffffffff. That includes bootloader's code, stack, data, heap, MMU tables, etc. All the memory below that 128 MiB chunk can be used for storing boot images (0x80000000..0xf8000000). * CUSTOM_SYS_INIT_SP_ADDR = 0xf8c00000 Just 4 MiB above the TEXT_BASE address, to leave enough space for U-Boot code and stack itself (grows downwards). * SYS_LOAD_ADDR = 0x80000000 The beginning of RAM. That's where Linux kernel image must be loaded. * SYS_MALLOC_LEN = 0x81f000 8 MiB for malloc() + ENV_SIZE (128 KiB) * SYS_MALLOC_F_LEN = 0x4000 Increase malloc() pool size available before relocation from 8 KiB (default) to 16 KiB. Otherwise "alloc space exhausted" message appears in U-Boot log during board_init_f() stage. There are next reasons for doing so: 1. Having "bootph-all" flags in some dts nodes leads to binding those during pre-relocation stage, and binding (DM) uses dynamic memory allocation 2. clk-exynos850 driver uses CCF clocks, which in turn use dynamic memory allocation Device tree file was imported from Linux kernel. All nodes and boot phase flags added in exynos850-e850-96-u-boot.dtsi are only needed to enable serial console: * oscclk -> cmu_top -> cmu_peri: generate UART/USI clocks * pinctrl_alive and uart1_pins: needed to mux UART pins * pmu_system_controller: configures AP UART path to uart1_pins * usi_uart: configures USI block to operate as a UART protocol * serial_0: enables serial console (UART) [1] https://www.96boards.org/product/e850-96b/ [2] https://www.96boards.org/products/mezzanine/ Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
274 lines
5.7 KiB
Plaintext
274 lines
5.7 KiB
Plaintext
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* WinLink E850-96 board device tree source
|
|
*
|
|
* Copyright (C) 2018 Samsung Electronics Co., Ltd.
|
|
* Copyright (C) 2021 Linaro Ltd.
|
|
*
|
|
* Device tree source file for WinLink's E850-96 board which is based on
|
|
* Samsung Exynos850 SoC.
|
|
*/
|
|
|
|
/dts-v1/;
|
|
|
|
#include "exynos850.dtsi"
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
#include <dt-bindings/input/input.h>
|
|
#include <dt-bindings/leds/common.h>
|
|
|
|
/ {
|
|
model = "WinLink E850-96 board";
|
|
compatible = "winlink,e850-96", "samsung,exynos850";
|
|
|
|
aliases {
|
|
mmc0 = &mmc_0;
|
|
serial0 = &serial_0;
|
|
};
|
|
|
|
chosen {
|
|
stdout-path = &serial_0;
|
|
};
|
|
|
|
connector {
|
|
compatible = "gpio-usb-b-connector", "usb-b-connector";
|
|
label = "micro-USB";
|
|
type = "micro";
|
|
vbus-supply = <®_usb_host_vbus>;
|
|
id-gpios = <&gpa0 0 GPIO_ACTIVE_LOW>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <µ_usb_det_pins>;
|
|
|
|
port {
|
|
usb_dr_connector: endpoint {
|
|
remote-endpoint = <&usb1_drd_sw>;
|
|
};
|
|
};
|
|
};
|
|
|
|
/*
|
|
* RAM: 4 GiB (eMCP):
|
|
* - 2 GiB at 0x80000000
|
|
* - 2 GiB at 0x880000000
|
|
*
|
|
* 0xbab00000..0xbfffffff: secure memory (85 MiB).
|
|
*/
|
|
memory@80000000 {
|
|
device_type = "memory";
|
|
reg = <0x0 0x80000000 0x3ab00000>,
|
|
<0x0 0xc0000000 0x40000000>,
|
|
<0x8 0x80000000 0x80000000>;
|
|
};
|
|
|
|
gpio-keys {
|
|
compatible = "gpio-keys";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&key_voldown_pins &key_volup_pins>;
|
|
|
|
volume-down-key {
|
|
label = "Volume Down";
|
|
linux,code = <KEY_VOLUMEDOWN>;
|
|
gpios = <&gpa1 0 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
volume-up-key {
|
|
label = "Volume Up";
|
|
linux,code = <KEY_VOLUMEUP>;
|
|
gpios = <&gpa0 7 GPIO_ACTIVE_LOW>;
|
|
};
|
|
};
|
|
|
|
leds {
|
|
compatible = "gpio-leds";
|
|
|
|
/* HEART_BEAT_LED */
|
|
user_led1: led-1 {
|
|
label = "yellow:user1";
|
|
gpios = <&gpg2 2 GPIO_ACTIVE_HIGH>;
|
|
color = <LED_COLOR_ID_YELLOW>;
|
|
function = LED_FUNCTION_HEARTBEAT;
|
|
linux,default-trigger = "heartbeat";
|
|
};
|
|
|
|
/* eMMC_LED */
|
|
user_led2: led-2 {
|
|
label = "yellow:user2";
|
|
gpios = <&gpg2 3 GPIO_ACTIVE_HIGH>;
|
|
color = <LED_COLOR_ID_YELLOW>;
|
|
linux,default-trigger = "mmc0";
|
|
};
|
|
|
|
/* SD_LED */
|
|
user_led3: led-3 {
|
|
label = "white:user3";
|
|
gpios = <&gpg2 4 GPIO_ACTIVE_HIGH>;
|
|
color = <LED_COLOR_ID_WHITE>;
|
|
function = LED_FUNCTION_SD;
|
|
linux,default-trigger = "mmc2";
|
|
};
|
|
|
|
/* WIFI_LED */
|
|
wlan_active_led: led-4 {
|
|
label = "yellow:wlan";
|
|
gpios = <&gpg2 6 GPIO_ACTIVE_HIGH>;
|
|
color = <LED_COLOR_ID_YELLOW>;
|
|
function = LED_FUNCTION_WLAN;
|
|
linux,default-trigger = "phy0tx";
|
|
default-state = "off";
|
|
};
|
|
|
|
/* BLUETOOTH_LED */
|
|
bt_active_led: led-5 {
|
|
label = "blue:bt";
|
|
gpios = <&gpg2 7 GPIO_ACTIVE_HIGH>;
|
|
color = <LED_COLOR_ID_BLUE>;
|
|
function = LED_FUNCTION_BLUETOOTH;
|
|
linux,default-trigger = "hci0-power";
|
|
default-state = "off";
|
|
};
|
|
};
|
|
|
|
/* TODO: Remove this once PMIC is implemented */
|
|
reg_dummy: regulator-0 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "dummy_reg";
|
|
};
|
|
|
|
reg_usb_host_vbus: regulator-1 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "usb_host_vbus";
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
gpio = <&gpa3 5 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
reserved-memory {
|
|
#address-cells = <2>;
|
|
#size-cells = <1>;
|
|
ranges;
|
|
|
|
ramoops@f0000000 {
|
|
compatible = "ramoops";
|
|
reg = <0x0 0xf0000000 0x200000>;
|
|
record-size = <0x20000>;
|
|
console-size = <0x20000>;
|
|
ftrace-size = <0x100000>;
|
|
pmsg-size = <0x20000>;
|
|
};
|
|
};
|
|
|
|
/*
|
|
* RTC clock (XrtcXTI); external, must be 32.768 kHz.
|
|
*
|
|
* TODO: Remove this once RTC clock is implemented properly as part of
|
|
* PMIC driver.
|
|
*/
|
|
rtcclk: clock-rtcclk {
|
|
compatible = "fixed-clock";
|
|
clock-output-names = "rtcclk";
|
|
#clock-cells = <0>;
|
|
clock-frequency = <32768>;
|
|
};
|
|
};
|
|
|
|
&cmu_hsi {
|
|
clocks = <&oscclk>, <&rtcclk>,
|
|
<&cmu_top CLK_DOUT_HSI_BUS>,
|
|
<&cmu_top CLK_DOUT_HSI_MMC_CARD>,
|
|
<&cmu_top CLK_DOUT_HSI_USB20DRD>;
|
|
clock-names = "oscclk", "rtcclk", "dout_hsi_bus",
|
|
"dout_hsi_mmc_card", "dout_hsi_usb20drd";
|
|
};
|
|
|
|
&mmc_0 {
|
|
status = "okay";
|
|
mmc-hs200-1_8v;
|
|
mmc-hs400-1_8v;
|
|
cap-mmc-highspeed;
|
|
non-removable;
|
|
mmc-hs400-enhanced-strobe;
|
|
card-detect-delay = <200>;
|
|
clock-frequency = <800000000>;
|
|
bus-width = <8>;
|
|
samsung,dw-mshc-ciu-div = <3>;
|
|
samsung,dw-mshc-sdr-timing = <0 4>;
|
|
samsung,dw-mshc-ddr-timing = <2 4>;
|
|
samsung,dw-mshc-hs400-timing = <0 2>;
|
|
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&sd0_clk_pins &sd0_cmd_pins &sd0_rdqs_pins &sd0_nreset_pins
|
|
&sd0_bus1_pins &sd0_bus4_pins &sd0_bus8_pins>;
|
|
};
|
|
|
|
&oscclk {
|
|
clock-frequency = <26000000>;
|
|
};
|
|
|
|
&pinctrl_alive {
|
|
key_voldown_pins: key-voldown-pins {
|
|
samsung,pins = "gpa1-0";
|
|
samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
|
|
samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
|
|
samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>;
|
|
};
|
|
|
|
key_volup_pins: key-volup-pins {
|
|
samsung,pins = "gpa0-7";
|
|
samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
|
|
samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
|
|
samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>;
|
|
};
|
|
|
|
micro_usb_det_pins: micro-usb-det-pins {
|
|
samsung,pins = "gpa0-0";
|
|
samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
|
|
samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
|
|
};
|
|
};
|
|
|
|
&rtc {
|
|
status = "okay";
|
|
clocks = <&cmu_apm CLK_GOUT_RTC_PCLK>, <&rtcclk>;
|
|
clock-names = "rtc", "rtc_src";
|
|
};
|
|
|
|
&serial_0 {
|
|
status = "okay";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&uart1_pins>;
|
|
};
|
|
|
|
&usbdrd {
|
|
status = "okay";
|
|
vdd10-supply = <®_dummy>;
|
|
vdd33-supply = <®_dummy>;
|
|
};
|
|
|
|
&usbdrd_dwc3 {
|
|
dr_mode = "otg";
|
|
usb-role-switch;
|
|
role-switch-default-mode = "host";
|
|
|
|
port {
|
|
usb1_drd_sw: endpoint {
|
|
remote-endpoint = <&usb_dr_connector>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&usbdrd_phy {
|
|
status = "okay";
|
|
};
|
|
|
|
&usi_uart {
|
|
samsung,clkreq-on; /* needed for UART mode */
|
|
status = "okay";
|
|
};
|
|
|
|
&watchdog_cl0 {
|
|
status = "okay";
|
|
};
|
|
|
|
&watchdog_cl1 {
|
|
status = "okay";
|
|
};
|