mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 13:46:49 +00:00
Allwinner: H6: Organize U-Boot patches
This commit is contained in:
parent
d995b6905a
commit
7c672b5506
@ -1,8 +1,21 @@
|
||||
From 1de004d4e6830c44a30ffa0abd09c12e69734bb5 Mon Sep 17 00:00:00 2001
|
||||
From 4d2be560fe0123536aed35f86184290b0afffccc Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 1 Oct 2020 19:56:38 +0200
|
||||
Subject: [PATCH] wip h6 dram fix
|
||||
Subject: [PATCH] sunxi: dram: h6: Improve DDR3 config detection
|
||||
|
||||
It turns out that in rare cases, current analytical approach to detect
|
||||
correct DRAM bus width and rank on H6 doesn't work. On some TV boxes
|
||||
with DDR3, incorrect DRAM configuration triggers write leveling error
|
||||
which immediately stops initialization process. Exact reason why this
|
||||
error appears isn't known. However, if correct configuration is used,
|
||||
initalization works without problem.
|
||||
|
||||
In order to fix this issue, simply try another configuration when any
|
||||
kind of error appears during initialization, not just those related to
|
||||
rank and bus width.
|
||||
|
||||
Tested-by: Thomas Graichen <thomas.graichen@googlemail.com>
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
arch/arm/mach-sunxi/dram_sun50i_h6.c | 95 +++++++++++++++-------------
|
||||
1 file changed, 51 insertions(+), 44 deletions(-)
|
||||
@ -168,5 +181,5 @@ index 9e34da474798..1cde6132be2c 100644
|
||||
|
||||
mctl_core_init(¶);
|
||||
--
|
||||
2.28.0
|
||||
2.29.2
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,201 @@
|
||||
From 6edd6f3d8ee26d37a557a890fa75e0840c6273db Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Sun, 3 Jan 2021 10:50:27 +0100
|
||||
Subject: [PATCH v3 2/2] sunxi: Add support for Tanix TX6
|
||||
|
||||
This commit adds support for Tanix TX6 TV box, based on H6. It's low end
|
||||
H6 board, with 3 GiB of RAM, eMMC, fast ethernet, USB, IR and other
|
||||
peripherals.
|
||||
|
||||
DT file is taken from Linux 5.11-rc1 release.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
arch/arm/dts/Makefile | 3 +-
|
||||
arch/arm/dts/sun50i-h6-tanix-tx6.dts | 124 +++++++++++++++++++++++++++
|
||||
board/sunxi/MAINTAINERS | 6 ++
|
||||
configs/tanix_tx6_defconfig | 10 +++
|
||||
4 files changed, 142 insertions(+), 1 deletion(-)
|
||||
create mode 100644 arch/arm/dts/sun50i-h6-tanix-tx6.dts
|
||||
create mode 100644 configs/tanix_tx6_defconfig
|
||||
|
||||
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
|
||||
index fd47e408f826..e00aed1ec207 100644
|
||||
--- a/arch/arm/dts/Makefile
|
||||
+++ b/arch/arm/dts/Makefile
|
||||
@@ -607,7 +607,8 @@ dtb-$(CONFIG_MACH_SUN50I_H6) += \
|
||||
sun50i-h6-beelink-gs1.dtb \
|
||||
sun50i-h6-orangepi-lite2.dtb \
|
||||
sun50i-h6-orangepi-one-plus.dtb \
|
||||
- sun50i-h6-pine-h64.dtb
|
||||
+ sun50i-h6-pine-h64.dtb \
|
||||
+ sun50i-h6-tanix-tx6.dtb
|
||||
dtb-$(CONFIG_MACH_SUN50I) += \
|
||||
sun50i-a64-amarula-relic.dtb \
|
||||
sun50i-a64-bananapi-m64.dtb \
|
||||
diff --git a/arch/arm/dts/sun50i-h6-tanix-tx6.dts b/arch/arm/dts/sun50i-h6-tanix-tx6.dts
|
||||
new file mode 100644
|
||||
index 000000000000..be81330db14f
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/sun50i-h6-tanix-tx6.dts
|
||||
@@ -0,0 +1,124 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+// Copyright (c) 2019 Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "sun50i-h6.dtsi"
|
||||
+#include "sun50i-h6-cpu-opp.dtsi"
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+
|
||||
+/ {
|
||||
+ model = "Tanix TX6";
|
||||
+ compatible = "oranth,tanix-tx6", "allwinner,sun50i-h6";
|
||||
+
|
||||
+ aliases {
|
||||
+ serial0 = &uart0;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial0:115200n8";
|
||||
+ };
|
||||
+
|
||||
+ connector {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ ddc-en-gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
|
||||
+ type = "a";
|
||||
+
|
||||
+ port {
|
||||
+ hdmi_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ reg_vcc3v3: vcc3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ };
|
||||
+
|
||||
+ reg_vdd_cpu_gpu: vdd-cpu-gpu {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vdd-cpu-gpu";
|
||||
+ regulator-min-microvolt = <1135000>;
|
||||
+ regulator-max-microvolt = <1135000>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <®_vdd_cpu_gpu>;
|
||||
+};
|
||||
+
|
||||
+&de {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&dwc3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&gpu {
|
||||
+ mali-supply = <®_vdd_cpu_gpu>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_out {
|
||||
+ hdmi_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mmc0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&mmc0_pins>;
|
||||
+ vmmc-supply = <®_vcc3v3>;
|
||||
+ cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
|
||||
+ bus-width = <4>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&r_ir {
|
||||
+ linux,rc-map-name = "rc-tanix-tx5max";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart0_ph_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2otg {
|
||||
+ dr_mode = "host";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2phy {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb3phy {
|
||||
+ status = "okay";
|
||||
+};
|
||||
diff --git a/board/sunxi/MAINTAINERS b/board/sunxi/MAINTAINERS
|
||||
index d3755ae41a9d..1b37a9899edd 100644
|
||||
--- a/board/sunxi/MAINTAINERS
|
||||
+++ b/board/sunxi/MAINTAINERS
|
||||
@@ -489,6 +489,12 @@ S: Maintained
|
||||
F: configs/Sunchip_CX-A99_defconfig
|
||||
W: https://linux-sunxi.org/Sunchip_CX-A99
|
||||
|
||||
+TANIX TX6 BOARD
|
||||
+M: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
+S: Maintained
|
||||
+F: configs/tanix_tx6_defconfig
|
||||
+W: https://linux-sunxi.org/Tanix_TX6
|
||||
+
|
||||
TBS A711 BOARD
|
||||
M: Maxime Ripard <mripard@kernel.org>
|
||||
S: Maintained
|
||||
diff --git a/configs/tanix_tx6_defconfig b/configs/tanix_tx6_defconfig
|
||||
new file mode 100644
|
||||
index 000000000000..9ce812ecc35d
|
||||
--- /dev/null
|
||||
+++ b/configs/tanix_tx6_defconfig
|
||||
@@ -0,0 +1,10 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_ARCH_SUNXI=y
|
||||
+CONFIG_SPL=y
|
||||
+CONFIG_MACH_SUN50I_H6=y
|
||||
+CONFIG_SUNXI_DRAM_H6_DDR3_1333=y
|
||||
+CONFIG_DRAM_CLK=648
|
||||
+CONFIG_MMC0_CD_PIN="PF6"
|
||||
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-tanix-tx6"
|
||||
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
--
|
||||
2.30.0
|
||||
|
@ -0,0 +1,159 @@
|
||||
From a0770d90e89c03115eaf1c22d74b955f37b8ddbd Mon Sep 17 00:00:00 2001
|
||||
From: Andre Heider <a.heider@gmail.com>
|
||||
Date: Tue, 26 Nov 2019 12:38:46 +0100
|
||||
Subject: [PATCH 1/3] sunxi: board: extract creating a unique sid into a helper
|
||||
function
|
||||
|
||||
Refactor setup_environment() so we can use the created sid for a
|
||||
Bluetooth address too.
|
||||
|
||||
Signed-off-by: Andre Heider <a.heider@gmail.com>
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
[rebased]
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
board/sunxi/board.c | 121 ++++++++++++++++++++++++--------------------
|
||||
1 file changed, 66 insertions(+), 55 deletions(-)
|
||||
|
||||
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
||||
index 708a27ed78e9..4a29e351141b 100644
|
||||
--- a/board/sunxi/board.c
|
||||
+++ b/board/sunxi/board.c
|
||||
@@ -789,6 +789,38 @@ static void parse_spl_header(const uint32_t spl_addr)
|
||||
env_set_hex("fel_scriptaddr", spl->fel_script_address);
|
||||
}
|
||||
|
||||
+static bool get_unique_sid(unsigned int *sid)
|
||||
+{
|
||||
+ if (sunxi_get_sid(sid) != 0)
|
||||
+ return false;
|
||||
+
|
||||
+ if (!sid[0])
|
||||
+ return false;
|
||||
+
|
||||
+ /*
|
||||
+ * The single words 1 - 3 of the SID have quite a few bits
|
||||
+ * which are the same on many models, so we take a crc32
|
||||
+ * of all 3 words, to get a more unique value.
|
||||
+ *
|
||||
+ * Note we only do this on newer SoCs as we cannot change
|
||||
+ * the algorithm on older SoCs since those have been using
|
||||
+ * fixed mac-addresses based on only using word 3 for a
|
||||
+ * long time and changing a fixed mac-address with an
|
||||
+ * u-boot update is not good.
|
||||
+ */
|
||||
+#if !defined(CONFIG_MACH_SUN4I) && !defined(CONFIG_MACH_SUN5I) && \
|
||||
+ !defined(CONFIG_MACH_SUN6I) && !defined(CONFIG_MACH_SUN7I) && \
|
||||
+ !defined(CONFIG_MACH_SUN8I_A23) && !defined(CONFIG_MACH_SUN8I_A33)
|
||||
+ sid[3] = crc32(0, (unsigned char *)&sid[1], 12);
|
||||
+#endif
|
||||
+
|
||||
+ /* Ensure the NIC specific bytes of the mac are not all 0 */
|
||||
+ if ((sid[3] & 0xffffff) == 0)
|
||||
+ sid[3] |= 0x800000;
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Note this function gets called multiple times.
|
||||
* It must not make any changes to env variables which already exist.
|
||||
@@ -799,61 +831,40 @@ static void setup_environment(const void *fdt)
|
||||
unsigned int sid[4];
|
||||
uint8_t mac_addr[6];
|
||||
char ethaddr[16];
|
||||
- int i, ret;
|
||||
-
|
||||
- ret = sunxi_get_sid(sid);
|
||||
- if (ret == 0 && sid[0] != 0) {
|
||||
- /*
|
||||
- * The single words 1 - 3 of the SID have quite a few bits
|
||||
- * which are the same on many models, so we take a crc32
|
||||
- * of all 3 words, to get a more unique value.
|
||||
- *
|
||||
- * Note we only do this on newer SoCs as we cannot change
|
||||
- * the algorithm on older SoCs since those have been using
|
||||
- * fixed mac-addresses based on only using word 3 for a
|
||||
- * long time and changing a fixed mac-address with an
|
||||
- * u-boot update is not good.
|
||||
- */
|
||||
-#if !defined(CONFIG_MACH_SUN4I) && !defined(CONFIG_MACH_SUN5I) && \
|
||||
- !defined(CONFIG_MACH_SUN6I) && !defined(CONFIG_MACH_SUN7I) && \
|
||||
- !defined(CONFIG_MACH_SUN8I_A23) && !defined(CONFIG_MACH_SUN8I_A33)
|
||||
- sid[3] = crc32(0, (unsigned char *)&sid[1], 12);
|
||||
-#endif
|
||||
-
|
||||
- /* Ensure the NIC specific bytes of the mac are not all 0 */
|
||||
- if ((sid[3] & 0xffffff) == 0)
|
||||
- sid[3] |= 0x800000;
|
||||
-
|
||||
- for (i = 0; i < 4; i++) {
|
||||
- sprintf(ethaddr, "ethernet%d", i);
|
||||
- if (!fdt_get_alias(fdt, ethaddr))
|
||||
- continue;
|
||||
-
|
||||
- if (i == 0)
|
||||
- strcpy(ethaddr, "ethaddr");
|
||||
- else
|
||||
- sprintf(ethaddr, "eth%daddr", i);
|
||||
-
|
||||
- if (env_get(ethaddr))
|
||||
- continue;
|
||||
-
|
||||
- /* Non OUI / registered MAC address */
|
||||
- mac_addr[0] = (i << 4) | 0x02;
|
||||
- mac_addr[1] = (sid[0] >> 0) & 0xff;
|
||||
- mac_addr[2] = (sid[3] >> 24) & 0xff;
|
||||
- mac_addr[3] = (sid[3] >> 16) & 0xff;
|
||||
- mac_addr[4] = (sid[3] >> 8) & 0xff;
|
||||
- mac_addr[5] = (sid[3] >> 0) & 0xff;
|
||||
-
|
||||
- eth_env_set_enetaddr(ethaddr, mac_addr);
|
||||
- }
|
||||
-
|
||||
- if (!env_get("serial#")) {
|
||||
- snprintf(serial_string, sizeof(serial_string),
|
||||
- "%08x%08x", sid[0], sid[3]);
|
||||
-
|
||||
- env_set("serial#", serial_string);
|
||||
- }
|
||||
+ int i;
|
||||
+
|
||||
+ if (!get_unique_sid(sid))
|
||||
+ return;
|
||||
+
|
||||
+ for (i = 0; i < 4; i++) {
|
||||
+ sprintf(ethaddr, "ethernet%d", i);
|
||||
+ if (!fdt_get_alias(fdt, ethaddr))
|
||||
+ continue;
|
||||
+
|
||||
+ if (i == 0)
|
||||
+ strcpy(ethaddr, "ethaddr");
|
||||
+ else
|
||||
+ sprintf(ethaddr, "eth%daddr", i);
|
||||
+
|
||||
+ if (env_get(ethaddr))
|
||||
+ continue;
|
||||
+
|
||||
+ /* Non OUI / registered MAC address */
|
||||
+ mac_addr[0] = (i << 4) | 0x02;
|
||||
+ mac_addr[1] = (sid[0] >> 0) & 0xff;
|
||||
+ mac_addr[2] = (sid[3] >> 24) & 0xff;
|
||||
+ mac_addr[3] = (sid[3] >> 16) & 0xff;
|
||||
+ mac_addr[4] = (sid[3] >> 8) & 0xff;
|
||||
+ mac_addr[5] = (sid[3] >> 0) & 0xff;
|
||||
+
|
||||
+ eth_env_set_enetaddr(ethaddr, mac_addr);
|
||||
+ }
|
||||
+
|
||||
+ if (!env_get("serial#")) {
|
||||
+ snprintf(serial_string, sizeof(serial_string),
|
||||
+ "%08x%08x", sid[0], sid[3]);
|
||||
+
|
||||
+ env_set("serial#", serial_string);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.30.0
|
||||
|
@ -0,0 +1,96 @@
|
||||
From c8216074411efbc484d2e308451477fa9f4e342c Mon Sep 17 00:00:00 2001
|
||||
From: Andre Heider <a.heider@gmail.com>
|
||||
Date: Sun, 17 Nov 2019 20:24:43 +0100
|
||||
Subject: [PATCH 2/3] arm: sunxi: add a config option to fixup a Bluetooth
|
||||
address
|
||||
|
||||
Some Bluetooth controllers, like the BCM4345C5 of the Orange Pi 3,
|
||||
ship with the controller default address.
|
||||
|
||||
Add a config option to fix it up so it can function properly.
|
||||
|
||||
Signed-off-by: Andre Heider <a.heider@gmail.com>
|
||||
Tested-by: Ondrej Jirman <megous@megous.com>
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
[rebased]
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
arch/arm/mach-sunxi/Kconfig | 11 +++++++++++
|
||||
board/sunxi/board.c | 34 ++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 45 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
|
||||
index 49ef217f08c0..269aef5f01a1 100644
|
||||
--- a/arch/arm/mach-sunxi/Kconfig
|
||||
+++ b/arch/arm/mach-sunxi/Kconfig
|
||||
@@ -1016,4 +1016,15 @@ config PINEPHONE_DT_SELECTION
|
||||
Enable this option to automatically select the device tree for the
|
||||
correct PinePhone hardware revision during boot.
|
||||
|
||||
+config FIXUP_BDADDR
|
||||
+ string "Fixup the Bluetooth controller address"
|
||||
+ default ""
|
||||
+ help
|
||||
+ This option specifies the DT compatible name of the Bluetooth
|
||||
+ controller for which to set the "local-bd-address" property.
|
||||
+ Set this option if your device ships with the Bluetooth controller
|
||||
+ default address.
|
||||
+ The used address is "bdaddr" if set, and "ethaddr" with the LSB
|
||||
+ flipped elsewise.
|
||||
+
|
||||
endif
|
||||
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
||||
index 4a29e351141b..d19119b7eb36 100644
|
||||
--- a/board/sunxi/board.c
|
||||
+++ b/board/sunxi/board.c
|
||||
@@ -908,6 +908,38 @@ int misc_init_r(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void fixup_bd_address(void *blob)
|
||||
+{
|
||||
+ /* Some devices ship with a Bluetooth controller default address.
|
||||
+ * Set a valid address through the device tree.
|
||||
+ */
|
||||
+ uchar tmp[ETH_ALEN], bdaddr[ETH_ALEN];
|
||||
+ unsigned int sid[4];
|
||||
+ int i;
|
||||
+
|
||||
+ if (!CONFIG_FIXUP_BDADDR[0])
|
||||
+ return;
|
||||
+
|
||||
+ if (eth_env_get_enetaddr("bdaddr", tmp)) {
|
||||
+ /* Convert between the binary formats of the corresponding stacks */
|
||||
+ for (i = 0; i < ETH_ALEN; ++i)
|
||||
+ bdaddr[i] = tmp[ETH_ALEN - i - 1];
|
||||
+ } else {
|
||||
+ if (!get_unique_sid(sid))
|
||||
+ return;
|
||||
+
|
||||
+ bdaddr[0] = ((sid[3] >> 0) & 0xff) ^ 1;
|
||||
+ bdaddr[1] = (sid[3] >> 8) & 0xff;
|
||||
+ bdaddr[2] = (sid[3] >> 16) & 0xff;
|
||||
+ bdaddr[3] = (sid[3] >> 24) & 0xff;
|
||||
+ bdaddr[4] = (sid[0] >> 0) & 0xff;
|
||||
+ bdaddr[5] = 0x02;
|
||||
+ }
|
||||
+
|
||||
+ do_fixup_by_compat(blob, CONFIG_FIXUP_BDADDR,
|
||||
+ "local-bd-address", bdaddr, ETH_ALEN, 1);
|
||||
+}
|
||||
+
|
||||
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
int __maybe_unused r;
|
||||
@@ -918,6 +950,8 @@ int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
*/
|
||||
setup_environment(blob);
|
||||
|
||||
+ fixup_bd_address(blob);
|
||||
+
|
||||
#ifdef CONFIG_VIDEO_DT_SIMPLEFB
|
||||
r = sunxi_simplefb_setup(blob);
|
||||
if (r)
|
||||
--
|
||||
2.30.0
|
||||
|
@ -0,0 +1,424 @@
|
||||
From ebbb185d268f795de19aa4d2934531ec61a8ed84 Mon Sep 17 00:00:00 2001
|
||||
From: Andre Heider <a.heider@gmail.com>
|
||||
Date: Mon, 18 Nov 2019 09:54:43 +0100
|
||||
Subject: [PATCH 3/3] arm64: dts: sun50i: Add support for Orange Pi 3
|
||||
|
||||
dts file is taken from Linux 5.11-rc1 tag.
|
||||
|
||||
The Bluetooth controller of this device ships with a default address,
|
||||
use the new CONFIG_FIXUP_BDADDR option to fix it up.
|
||||
|
||||
Signed-off-by: Andre Heider <a.heider@gmail.com>
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
[Updated OrangePi 3 DT, rebase and config update]
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
arch/arm/dts/Makefile | 1 +
|
||||
arch/arm/dts/sun50i-h6-orangepi-3.dts | 345 ++++++++++++++++++++++++++
|
||||
board/sunxi/MAINTAINERS | 5 +
|
||||
configs/orangepi_3_defconfig | 13 +
|
||||
4 files changed, 364 insertions(+)
|
||||
create mode 100644 arch/arm/dts/sun50i-h6-orangepi-3.dts
|
||||
create mode 100644 configs/orangepi_3_defconfig
|
||||
|
||||
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
|
||||
index e00aed1ec207..607571d04b25 100644
|
||||
--- a/arch/arm/dts/Makefile
|
||||
+++ b/arch/arm/dts/Makefile
|
||||
@@ -605,6 +605,7 @@ dtb-$(CONFIG_MACH_SUN50I_H5) += \
|
||||
sun50i-h5-orangepi-zero-plus2.dtb
|
||||
dtb-$(CONFIG_MACH_SUN50I_H6) += \
|
||||
sun50i-h6-beelink-gs1.dtb \
|
||||
+ sun50i-h6-orangepi-3.dtb \
|
||||
sun50i-h6-orangepi-lite2.dtb \
|
||||
sun50i-h6-orangepi-one-plus.dtb \
|
||||
sun50i-h6-pine-h64.dtb \
|
||||
diff --git a/arch/arm/dts/sun50i-h6-orangepi-3.dts b/arch/arm/dts/sun50i-h6-orangepi-3.dts
|
||||
new file mode 100644
|
||||
index 000000000000..15c9dd8c4479
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/sun50i-h6-orangepi-3.dts
|
||||
@@ -0,0 +1,345 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+// Copyright (C) 2019 Ondřej Jirman <megous@megous.com>
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "sun50i-h6.dtsi"
|
||||
+#include "sun50i-h6-cpu-opp.dtsi"
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+
|
||||
+/ {
|
||||
+ model = "OrangePi 3";
|
||||
+ compatible = "xunlong,orangepi-3", "allwinner,sun50i-h6";
|
||||
+
|
||||
+ aliases {
|
||||
+ serial0 = &uart0;
|
||||
+ serial1 = &uart1;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial0:115200n8";
|
||||
+ };
|
||||
+
|
||||
+ connector {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ ddc-en-gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
|
||||
+ type = "a";
|
||||
+
|
||||
+ port {
|
||||
+ hdmi_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ ext_osc32k: ext_osc32k_clk {
|
||||
+ #clock-cells = <0>;
|
||||
+ compatible = "fixed-clock";
|
||||
+ clock-frequency = <32768>;
|
||||
+ clock-output-names = "ext_osc32k";
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+
|
||||
+ power {
|
||||
+ label = "orangepi:red:power";
|
||||
+ gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
|
||||
+ default-state = "on";
|
||||
+ };
|
||||
+
|
||||
+ status {
|
||||
+ label = "orangepi:green:status";
|
||||
+ gpios = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ reg_vcc5v: vcc5v {
|
||||
+ /* board wide 5V supply directly from the DC jack */
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc-5v";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+
|
||||
+ reg_vcc33_wifi: vcc33-wifi {
|
||||
+ /* Always on 3.3V regulator for WiFi and BT */
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc33-wifi";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-always-on;
|
||||
+ vin-supply = <®_vcc5v>;
|
||||
+ };
|
||||
+
|
||||
+ reg_vcc_wifi_io: vcc-wifi-io {
|
||||
+ /* Always on 1.8V/300mA regulator for WiFi and BT IO */
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc-wifi-io";
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+ regulator-always-on;
|
||||
+ vin-supply = <®_vcc33_wifi>;
|
||||
+ };
|
||||
+
|
||||
+ wifi_pwrseq: wifi-pwrseq {
|
||||
+ compatible = "mmc-pwrseq-simple";
|
||||
+ clocks = <&rtc 1>;
|
||||
+ clock-names = "ext_clock";
|
||||
+ reset-gpios = <&r_pio 1 3 GPIO_ACTIVE_LOW>; /* PM3 */
|
||||
+ post-power-on-delay-ms = <200>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <®_dcdca>;
|
||||
+};
|
||||
+
|
||||
+&de {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&dwc3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&gpu {
|
||||
+ mali-supply = <®_dcdcc>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_out {
|
||||
+ hdmi_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mmc0 {
|
||||
+ vmmc-supply = <®_cldo1>;
|
||||
+ cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
|
||||
+ bus-width = <4>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mmc1 {
|
||||
+ vmmc-supply = <®_vcc33_wifi>;
|
||||
+ vqmmc-supply = <®_vcc_wifi_io>;
|
||||
+ mmc-pwrseq = <&wifi_pwrseq>;
|
||||
+ bus-width = <4>;
|
||||
+ non-removable;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ brcm: sdio-wifi@1 {
|
||||
+ reg = <1>;
|
||||
+ compatible = "brcm,bcm4329-fmac";
|
||||
+ interrupt-parent = <&r_pio>;
|
||||
+ interrupts = <1 0 IRQ_TYPE_LEVEL_LOW>; /* PM0 */
|
||||
+ interrupt-names = "host-wake";
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mmc2 {
|
||||
+ vmmc-supply = <®_cldo1>;
|
||||
+ vqmmc-supply = <®_bldo2>;
|
||||
+ cap-mmc-hw-reset;
|
||||
+ non-removable;
|
||||
+ bus-width = <8>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pio {
|
||||
+ vcc-pc-supply = <®_bldo2>;
|
||||
+ vcc-pd-supply = <®_cldo1>;
|
||||
+ vcc-pg-supply = <®_vcc_wifi_io>;
|
||||
+};
|
||||
+
|
||||
+&r_i2c {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ axp805: pmic@36 {
|
||||
+ compatible = "x-powers,axp805", "x-powers,axp806";
|
||||
+ reg = <0x36>;
|
||||
+ interrupt-parent = <&r_intc>;
|
||||
+ interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <1>;
|
||||
+ x-powers,self-working-mode;
|
||||
+ vina-supply = <®_vcc5v>;
|
||||
+ vinb-supply = <®_vcc5v>;
|
||||
+ vinc-supply = <®_vcc5v>;
|
||||
+ vind-supply = <®_vcc5v>;
|
||||
+ vine-supply = <®_vcc5v>;
|
||||
+ aldoin-supply = <®_vcc5v>;
|
||||
+ bldoin-supply = <®_vcc5v>;
|
||||
+ cldoin-supply = <®_vcc5v>;
|
||||
+
|
||||
+ regulators {
|
||||
+ reg_aldo1: aldo1 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-name = "vcc-pl-led-ir";
|
||||
+ };
|
||||
+
|
||||
+ reg_aldo2: aldo2 {
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-name = "vcc33-audio-tv-ephy-mac";
|
||||
+ };
|
||||
+
|
||||
+ /* ALDO3 is shorted to CLDO1 */
|
||||
+ reg_aldo3: aldo3 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-name = "vcc33-io-pd-emmc-sd-usb-uart-1";
|
||||
+ };
|
||||
+
|
||||
+ reg_bldo1: bldo1 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+ regulator-name = "vcc18-dram-bias-pll";
|
||||
+ };
|
||||
+
|
||||
+ reg_bldo2: bldo2 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <1800000>;
|
||||
+ regulator-name = "vcc-efuse-pcie-hdmi-pc";
|
||||
+ };
|
||||
+
|
||||
+ bldo3 {
|
||||
+ /* unused */
|
||||
+ };
|
||||
+
|
||||
+ bldo4 {
|
||||
+ /* unused */
|
||||
+ };
|
||||
+
|
||||
+ reg_cldo1: cldo1 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-name = "vcc33-io-pd-emmc-sd-usb-uart-2";
|
||||
+ };
|
||||
+
|
||||
+ cldo2 {
|
||||
+ /* unused */
|
||||
+ };
|
||||
+
|
||||
+ cldo3 {
|
||||
+ /* unused */
|
||||
+ };
|
||||
+
|
||||
+ reg_dcdca: dcdca {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <800000>;
|
||||
+ regulator-max-microvolt = <1160000>;
|
||||
+ regulator-ramp-delay = <2500>;
|
||||
+ regulator-name = "vdd-cpu";
|
||||
+ };
|
||||
+
|
||||
+ reg_dcdcc: dcdcc {
|
||||
+ regulator-enable-ramp-delay = <32000>;
|
||||
+ regulator-min-microvolt = <810000>;
|
||||
+ regulator-max-microvolt = <1080000>;
|
||||
+ regulator-ramp-delay = <2500>;
|
||||
+ regulator-name = "vdd-gpu";
|
||||
+ };
|
||||
+
|
||||
+ reg_dcdcd: dcdcd {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <960000>;
|
||||
+ regulator-max-microvolt = <960000>;
|
||||
+ regulator-name = "vdd-sys";
|
||||
+ };
|
||||
+
|
||||
+ reg_dcdce: dcdce {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1200000>;
|
||||
+ regulator-max-microvolt = <1200000>;
|
||||
+ regulator-name = "vcc-dram";
|
||||
+ };
|
||||
+
|
||||
+ sw {
|
||||
+ /* unused */
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&r_ir {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&rtc {
|
||||
+ clocks = <&ext_osc32k>;
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart0_ph_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+/* There's the BT part of the AP6256 connected to that UART */
|
||||
+&uart1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
|
||||
+ uart-has-rtscts;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ bluetooth {
|
||||
+ compatible = "brcm,bcm4345c5";
|
||||
+ clocks = <&rtc 1>;
|
||||
+ clock-names = "lpo";
|
||||
+ device-wakeup-gpios = <&r_pio 1 2 GPIO_ACTIVE_HIGH>; /* PM2 */
|
||||
+ host-wakeup-gpios = <&r_pio 1 1 GPIO_ACTIVE_HIGH>; /* PM1 */
|
||||
+ shutdown-gpios = <&r_pio 1 4 GPIO_ACTIVE_HIGH>; /* PM4 */
|
||||
+ max-speed = <1500000>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&usb2otg {
|
||||
+ /*
|
||||
+ * This board doesn't have a controllable VBUS even though it
|
||||
+ * does have an ID pin. Using it as anything but a USB host is
|
||||
+ * unsafe.
|
||||
+ */
|
||||
+ dr_mode = "host";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2phy {
|
||||
+ usb0_id_det-gpios = <&pio 2 15 GPIO_ACTIVE_HIGH>; /* PC15 */
|
||||
+ usb0_vbus-supply = <®_vcc5v>;
|
||||
+ usb3_vbus-supply = <®_vcc5v>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb3phy {
|
||||
+ status = "okay";
|
||||
+};
|
||||
diff --git a/board/sunxi/MAINTAINERS b/board/sunxi/MAINTAINERS
|
||||
index 1b37a9899edd..95b4df83e0a9 100644
|
||||
--- a/board/sunxi/MAINTAINERS
|
||||
+++ b/board/sunxi/MAINTAINERS
|
||||
@@ -385,6 +385,11 @@ M: Icenowy Zheng <icenowy@aosc.io>
|
||||
S: Maintained
|
||||
F: configs/teres_i_defconfig
|
||||
|
||||
+ORANGEPI 3 BOARD
|
||||
+M: Andre Heider <a.heider@gmail.com>
|
||||
+S: Maintained
|
||||
+F: configs/orangepi_3_defconfig
|
||||
+
|
||||
ORANGEPI LITE2 BOARD
|
||||
M: Jagan Teki <jagan@amarulasolutions.com>
|
||||
S: Maintained
|
||||
diff --git a/configs/orangepi_3_defconfig b/configs/orangepi_3_defconfig
|
||||
new file mode 100644
|
||||
index 000000000000..6a4a11739213
|
||||
--- /dev/null
|
||||
+++ b/configs/orangepi_3_defconfig
|
||||
@@ -0,0 +1,13 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_ARCH_SUNXI=y
|
||||
+CONFIG_SPL=y
|
||||
+CONFIG_MACH_SUN50I_H6=y
|
||||
+CONFIG_SUNXI_DRAM_H6_LPDDR3=y
|
||||
+CONFIG_MMC0_CD_PIN="PF6"
|
||||
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
||||
+CONFIG_FIXUP_BDADDR="brcm,bcm4345c5"
|
||||
+# CONFIG_PSCI_RESET is not set
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-orangepi-3"
|
||||
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
+CONFIG_USB_EHCI_HCD=y
|
||||
+CONFIG_USB_OHCI_HCD=y
|
||||
--
|
||||
2.30.0
|
||||
|
@ -72,20 +72,3 @@
|
||||
&mmc0 {
|
||||
vmmc-supply = <®_cldo1>;
|
||||
cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
|
||||
@@ -136,6 +180,16 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&mmc2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&mmc2_pins>;
|
||||
+ vmmc-supply = <®_cldo1>;
|
||||
+ non-removable;
|
||||
+ cap-mmc-hw-reset;
|
||||
+ bus-width = <8>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&ohci0 {
|
||||
status = "okay";
|
||||
};
|
@ -4,13 +4,13 @@ Date: Thu, 11 Jul 2019 23:28:58 +0200
|
||||
Subject: [PATCH] ethernet hack
|
||||
|
||||
---
|
||||
arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts | 14 ++++++++++++++
|
||||
arch/arm/dts/sun50i-h6-tanix-tx6.dts | 14 ++++++++++++++
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts b/arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts
|
||||
diff --git a/arch/arm/dts/sun50i-h6-tanix-tx6.dts b/arch/arm/dts/sun50i-h6-tanix-tx6.dts
|
||||
index c217955a39..5c0099f1a7 100644
|
||||
--- a/arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts
|
||||
+++ b/arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts
|
||||
--- a/arch/arm/dts/sun50i-h6-tanix-tx6.dts
|
||||
+++ b/arch/arm/dts/sun50i-h6-tanix-tx6.dts
|
||||
@@ -16,6 +16,7 @@
|
||||
compatible = "eachlink,h6-mini", "allwinner,sun50i-h6";
|
||||
|
@ -0,0 +1,40 @@
|
||||
From: megous@megous.com
|
||||
Date: Mon, 29 Jul 2019 01:39:42 +0200
|
||||
Subject: [U-Boot] [PATCH] Fix unreliable detection of DRAM size on Orange Pi 3
|
||||
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
|
||||
Orange Pi 3 has 2 GiB of DRAM, that sometime get misdetected
|
||||
as 4 GiB, due to false negative result from mctl_mem_matches()
|
||||
when detecting number of column address bits. This leads to
|
||||
u-boot detecting more address bits than there are and the
|
||||
boot process hangs shortly after.
|
||||
|
||||
In mctl_mem_matches() we need to wait for each write to finish,
|
||||
separately. Without this, the check is not reliable for some
|
||||
unknown reason, probably having to do with unpredictable memory
|
||||
access ordering.
|
||||
|
||||
Patch was made with help from André Przywara, who noticed that
|
||||
my original idea about detection failing due to read-back from
|
||||
cache without involving DRAM was false, because data cache is
|
||||
still of at the time of the DRAM size autodetection.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
Cc: André Przywara <andre.przywara@arm.com>
|
||||
---
|
||||
arch/arm/mach-sunxi/dram_helpers.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/arch/arm/mach-sunxi/dram_helpers.c b/arch/arm/mach-sunxi/dram_helpers.c
|
||||
index 239ab421a8..6dba448638 100644
|
||||
--- a/arch/arm/mach-sunxi/dram_helpers.c
|
||||
+++ b/arch/arm/mach-sunxi/dram_helpers.c
|
||||
@@ -30,6 +30,7 @@ bool mctl_mem_matches(u32 offset)
|
||||
{
|
||||
/* Try to write different values to RAM at two addresses */
|
||||
writel(0, CONFIG_SYS_SDRAM_BASE);
|
||||
+ dsb();
|
||||
writel(0xaa55aa55, (ulong)CONFIG_SYS_SDRAM_BASE + offset);
|
||||
dsb();
|
||||
/* Check if the same value is actually observed when reading back */
|
@ -1,82 +0,0 @@
|
||||
diff --git a/arch/arm/dts/sun50i-h6-orangepi-one-plus.dts b/arch/arm/dts/sun50i-h6-orangepi-one-plus.dts
|
||||
index 12e17567ab..4c3447417f 100644
|
||||
--- a/arch/arm/dts/sun50i-h6-orangepi-one-plus.dts
|
||||
+++ b/arch/arm/dts/sun50i-h6-orangepi-one-plus.dts
|
||||
@@ -9,4 +9,77 @@
|
||||
/ {
|
||||
model = "OrangePi One Plus";
|
||||
compatible = "xunlong,orangepi-one-plus", "allwinner,sun50i-h6";
|
||||
+
|
||||
+ aliases {
|
||||
+ ethernet0 = &emac;
|
||||
+ };
|
||||
+
|
||||
+ connector {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "a";
|
||||
+ ddc-supply = <®_ddc>;
|
||||
+
|
||||
+ port {
|
||||
+ hdmi_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ reg_ddc: ddc-io {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "ddc-io";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
|
||||
+ };
|
||||
+
|
||||
+ reg_gmac_2v5: gmac-2v5 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "gmac-2v5";
|
||||
+ regulator-min-microvolt = <2500000>;
|
||||
+ regulator-max-microvolt = <2500000>;
|
||||
+ startup-delay-us = <100000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>; /* PD6 */
|
||||
+
|
||||
+ /* The real parent of gmac-2v5 is reg_vcc5v, but we need to
|
||||
+ * enable two regulators to power the phy. This is one way
|
||||
+ * to achieve that.
|
||||
+ */
|
||||
+ vin-supply = <®_aldo2>; /* GMAC-3V3 */
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&de {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&emac {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&ext_rgmii_pins>;
|
||||
+ phy-mode = "rgmii";
|
||||
+ phy-handle = <&ext_rgmii_phy>;
|
||||
+ phy-supply = <®_gmac_2v5>;
|
||||
+ allwinner,rx-delay-ps = <1500>;
|
||||
+ allwinner,tx-delay-ps = <700>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_out {
|
||||
+ hdmi_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&mdio {
|
||||
+ ext_rgmii_phy: ethernet-phy@1 {
|
||||
+ compatible = "ethernet-phy-ieee802.3-c22";
|
||||
+ reg = <1>;
|
||||
+ };
|
||||
};
|
@ -1,104 +0,0 @@
|
||||
From patchwork Sun Jul 28 23:39:42 2019
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 8bit
|
||||
X-Patchwork-Submitter: =?utf-8?q?Ond=C5=99ej_Jirman?= <megous@megous.com>
|
||||
X-Patchwork-Id: 1138087
|
||||
X-Patchwork-Delegate: jagannadh.teki@gmail.com
|
||||
Return-Path: <u-boot-bounces@lists.denx.de>
|
||||
X-Original-To: incoming@patchwork.ozlabs.org
|
||||
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
|
||||
Authentication-Results: ozlabs.org;
|
||||
spf=none (mailfrom) smtp.mailfrom=lists.denx.de
|
||||
(client-ip=81.169.180.215; helo=lists.denx.de;
|
||||
envelope-from=u-boot-bounces@lists.denx.de;
|
||||
receiver=<UNKNOWN>)
|
||||
Authentication-Results: ozlabs.org;
|
||||
dmarc=fail (p=none dis=none) header.from=megous.com
|
||||
Authentication-Results: ozlabs.org;
|
||||
dkim=fail reason="signature verification failed" (1024-bit key;
|
||||
unprotected) header.d=megous.com header.i=@megous.com
|
||||
header.b="CrQpjmRT"; dkim-atps=neutral
|
||||
Received: from lists.denx.de (dione.denx.de [81.169.180.215])
|
||||
by ozlabs.org (Postfix) with ESMTP id 45xfSd39Cgz9sBt
|
||||
for <incoming@patchwork.ozlabs.org>;
|
||||
Mon, 29 Jul 2019 09:40:15 +1000 (AEST)
|
||||
Received: by lists.denx.de (Postfix, from userid 105)
|
||||
id B2080C21C6A; Sun, 28 Jul 2019 23:40:01 +0000 (UTC)
|
||||
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de
|
||||
X-Spam-Level:
|
||||
X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID
|
||||
autolearn=unavailable autolearn_force=no version=3.4.0
|
||||
Received: from lists.denx.de (localhost [IPv6:::1])
|
||||
by lists.denx.de (Postfix) with ESMTP id 4ADF8C21C2F;
|
||||
Sun, 28 Jul 2019 23:40:00 +0000 (UTC)
|
||||
Received: by lists.denx.de (Postfix, from userid 105)
|
||||
id 6153DC21C2F; Sun, 28 Jul 2019 23:39:58 +0000 (UTC)
|
||||
Received: from vps.xff.cz (vps.xff.cz [195.181.215.36])
|
||||
by lists.denx.de (Postfix) with ESMTPS id 01E68C21C2C
|
||||
for <u-boot@lists.denx.de>; Sun, 28 Jul 2019 23:39:58 +0000 (UTC)
|
||||
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megous.com; s=mail;
|
||||
t=1564357197; bh=O569bOUuJGqDJElKbA3RSmC4Fo1qMuQYR/PPaLa2AAo=;
|
||||
h=From:To:Cc:Subject:Date:From;
|
||||
b=CrQpjmRTeDQh+lZWj24nnowLe5dFPiJtkSEF1vR2ioP52kdNo+KsrhhPYOL5zP4s8
|
||||
ty4iCkZUQ2Fov/BIVCPJJEgeBBTEFTWzfXyDxIbvgWya45gG3FlGFjyrh52+e3T4zk
|
||||
t9n7yy1iXLNInpC9uJRwJPMee3pcSZKVudimC7DY=
|
||||
From: megous@megous.com
|
||||
To: u-boot@lists.denx.de
|
||||
Date: Mon, 29 Jul 2019 01:39:42 +0200
|
||||
Message-Id: <20190728233942.9767-1-megous@megous.com>
|
||||
MIME-Version: 1.0
|
||||
Cc: Ondrej Jirman <megous@megous.com>, =?utf-8?q?Andr=C3=A9_Przywara?=
|
||||
<andre.przywara@arm.com>, Maxime Ripard <maxime.ripard@bootlin.com>
|
||||
Subject: [U-Boot] [PATCH] Fix unreliable detection of DRAM size on Orange Pi 3
|
||||
X-BeenThere: u-boot@lists.denx.de
|
||||
X-Mailman-Version: 2.1.18
|
||||
Precedence: list
|
||||
List-Id: U-Boot discussion <u-boot.lists.denx.de>
|
||||
List-Unsubscribe: <https://lists.denx.de/options/u-boot>,
|
||||
<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>
|
||||
List-Archive: <http://lists.denx.de/pipermail/u-boot/>
|
||||
List-Post: <mailto:u-boot@lists.denx.de>
|
||||
List-Help: <mailto:u-boot-request@lists.denx.de?subject=help>
|
||||
List-Subscribe: <https://lists.denx.de/listinfo/u-boot>,
|
||||
<mailto:u-boot-request@lists.denx.de?subject=subscribe>
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Errors-To: u-boot-bounces@lists.denx.de
|
||||
Sender: "U-Boot" <u-boot-bounces@lists.denx.de>
|
||||
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
|
||||
Orange Pi 3 has 2 GiB of DRAM, that sometime get misdetected
|
||||
as 4 GiB, due to false negative result from mctl_mem_matches()
|
||||
when detecting number of column address bits. This leads to
|
||||
u-boot detecting more address bits than there are and the
|
||||
boot process hangs shortly after.
|
||||
|
||||
In mctl_mem_matches() we need to wait for each write to finish,
|
||||
separately. Without this, the check is not reliable for some
|
||||
unknown reason, probably having to do with unpredictable memory
|
||||
access ordering.
|
||||
|
||||
Patch was made with help from André Przywara, who noticed that
|
||||
my original idea about detection failing due to read-back from
|
||||
cache without involving DRAM was false, because data cache is
|
||||
still of at the time of the DRAM size autodetection.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
Cc: André Przywara <andre.przywara@arm.com>
|
||||
---
|
||||
arch/arm/mach-sunxi/dram_helpers.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/arch/arm/mach-sunxi/dram_helpers.c b/arch/arm/mach-sunxi/dram_helpers.c
|
||||
index 239ab421a8..6dba448638 100644
|
||||
--- a/arch/arm/mach-sunxi/dram_helpers.c
|
||||
+++ b/arch/arm/mach-sunxi/dram_helpers.c
|
||||
@@ -30,6 +30,7 @@ bool mctl_mem_matches(u32 offset)
|
||||
{
|
||||
/* Try to write different values to RAM at two addresses */
|
||||
writel(0, CONFIG_SYS_SDRAM_BASE);
|
||||
+ dsb();
|
||||
writel(0xaa55aa55, (ulong)CONFIG_SYS_SDRAM_BASE + offset);
|
||||
dsb();
|
||||
/* Check if the same value is actually observed when reading back */
|
@ -1,181 +0,0 @@
|
||||
From ed8d12f7e9b86a20221030ba8609e05308813c5e Mon Sep 17 00:00:00 2001
|
||||
From: Andre Przywara <andre.przywara@arm.com>
|
||||
Date: Fri, 16 Nov 2018 01:38:32 +0000
|
||||
Subject: [PATCH 7/7] sunxi: H6: Add basic Eachlink H6 Mini support
|
||||
|
||||
The Eachlink H6 Mini is a modestly priced TV box, using the Allwinner H6
|
||||
SoC. It comes with 4GB of DRAM (3GB usable) and 32GB of eMMC in the
|
||||
typical TV box enclosure.
|
||||
This adds a basic device tree and defconfig for it.
|
||||
|
||||
It contrast to the other supported H6 boards the H6 Mini uses DDR3 DRAM
|
||||
chips (not LPDDR3), which require a different DRAM controller setup.
|
||||
|
||||
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
|
||||
---
|
||||
arch/arm/dts/Makefile | 1 +
|
||||
arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts | 116 ++++++++++++++++++++
|
||||
configs/eachlink_h6_mini_defconfig | 17 +++
|
||||
3 files changed, 134 insertions(+)
|
||||
create mode 100644 arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts
|
||||
create mode 100644 configs/eachlink_h6_mini_defconfig
|
||||
|
||||
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
|
||||
index 528fb909d5..c463aca190 100644
|
||||
--- a/arch/arm/dts/Makefile
|
||||
+++ b/arch/arm/dts/Makefile
|
||||
@@ -507,6 +507,7 @@ dtb-$(CONFIG_MACH_SUN50I_H5) += \
|
||||
sun50i-h5-orangepi-prime.dtb \
|
||||
sun50i-h5-orangepi-zero-plus2.dtb
|
||||
dtb-$(CONFIG_MACH_SUN50I_H6) += \
|
||||
+ sun50i-h6-eachlink-h6-mini.dtb \
|
||||
sun50i-h6-beelink-gs1.dtb \
|
||||
sun50i-h6-orangepi-lite2.dtb \
|
||||
sun50i-h6-orangepi-one-plus.dtb \
|
||||
diff --git a/arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts b/arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts
|
||||
new file mode 100644
|
||||
index 0000000000..c217955a39
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/dts/sun50i-h6-eachlink-h6-mini.dts
|
||||
@@ -0,0 +1,116 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ or MIT)
|
||||
+/*
|
||||
+ * Copyright (c) 2018 Arm Ltd.
|
||||
+ * based on work by:
|
||||
+ * Copyright (c) 2017 Icenowy Zheng <icenowy@aosc.io>
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "sun50i-h6.dtsi"
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+
|
||||
+/ {
|
||||
+ model = "Eachlink H6 Mini";
|
||||
+ compatible = "eachlink,h6-mini", "allwinner,sun50i-h6";
|
||||
+
|
||||
+ aliases {
|
||||
+ serial0 = &uart0;
|
||||
+ };
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial0:115200n8";
|
||||
+ };
|
||||
+
|
||||
+ connector {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "a";
|
||||
+
|
||||
+ port {
|
||||
+ hdmi_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ reg_vcc3v3: vcc3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ };
|
||||
+
|
||||
+ reg_vcc5v: vcc5v {
|
||||
+ /* board wide 5V supply directly from the DC jack */
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc-5v";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ regulator-always-on;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&de {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_out {
|
||||
+ hdmi_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&ehci0 {
|
||||
+ phys = <&usb2phy 0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mmc0 {
|
||||
+ vmmc-supply = <®_vcc3v3>;
|
||||
+ cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
|
||||
+ bus-width = <4>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mmc2 {
|
||||
+ vmmc-supply = <®_vcc3v3>;
|
||||
+ vqmmc-supply = <®_vcc3v3>;
|
||||
+ non-removable;
|
||||
+ cap-mmc-hw-reset;
|
||||
+ bus-width = <8>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci0 {
|
||||
+ phys = <&usb2phy 0>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart0_ph_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2otg {
|
||||
+ dr_mode = "host";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usb2phy {
|
||||
+ usb0_vbus-supply = <®_vcc5v>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
diff --git a/configs/eachlink_h6_mini_defconfig b/configs/eachlink_h6_mini_defconfig
|
||||
new file mode 100644
|
||||
index 0000000000..d471a24dd5
|
||||
--- /dev/null
|
||||
+++ b/configs/eachlink_h6_mini_defconfig
|
||||
@@ -0,0 +1,16 @@
|
||||
+CONFIG_ARM=y
|
||||
+CONFIG_ARCH_SUNXI=y
|
||||
+CONFIG_SPL=y
|
||||
+CONFIG_MACH_SUN50I_H6=y
|
||||
+CONFIG_DRAM_CLK=648
|
||||
+CONFIG_SUNXI_DRAM_H6_DDR3_1333=y
|
||||
+CONFIG_MMC0_CD_PIN="PF6"
|
||||
+# CONFIG_PSCI_RESET is not set
|
||||
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
||||
+CONFIG_NR_DRAM_BANKS=1
|
||||
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
+CONFIG_SPL_TEXT_BASE=0x20060
|
||||
+# CONFIG_CMD_FLASH is not set
|
||||
+# CONFIG_SPL_DOS_PARTITION is not set
|
||||
+# CONFIG_SPL_EFI_PARTITION is not set
|
||||
+CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-eachlink-h6-mini"
|
||||
--
|
||||
2.22.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user