From e08bbd7047dfc716da15625ed0a05b2135e5bab1 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Wed, 29 Jul 2020 11:06:01 +0200 Subject: [PATCH] Add ODROID-N2+ support (#793) * Add ODROID-N2+ support Add ODROID-N2+ support with the new SoC revision c. Extend the U-Boot script: Assume ODROID-N2 if the SoC revision is "a" (there are only "a" revision SoCs on ODROID N2) and assume N2+ otherwise. Currently using overclock mode as proposed in the upstream kernel patches. * Update hassos-hook.sh Co-authored-by: Pascal Vizeli --- .../board/hardkernel/odroid-n2/hassos-hook.sh | 2 +- .../board/hardkernel/odroid-n2/uboot-boot.ush | 6 +- ...-dts-meson-convert-ODROID-N2-to-dtsi.patch | 1159 +++++++++++++++++ ...amlogic-add-support-for-the-ODROID-N.patch | 32 + ...-meson-add-support-for-the-ODROID-N2.patch | 97 ++ .../configs/odroid_n2_defconfig | 2 +- 6 files changed, 1295 insertions(+), 3 deletions(-) create mode 100644 buildroot-external/board/hardkernel/patches/linux/0008-arm64-dts-meson-convert-ODROID-N2-to-dtsi.patch create mode 100644 buildroot-external/board/hardkernel/patches/linux/0009-dt-bindings-arm-amlogic-add-support-for-the-ODROID-N.patch create mode 100644 buildroot-external/board/hardkernel/patches/linux/0010-arm64-dts-meson-add-support-for-the-ODROID-N2.patch diff --git a/buildroot-external/board/hardkernel/odroid-n2/hassos-hook.sh b/buildroot-external/board/hardkernel/odroid-n2/hassos-hook.sh index d28d36d2d..e90507d7c 100755 --- a/buildroot-external/board/hardkernel/odroid-n2/hassos-hook.sh +++ b/buildroot-external/board/hardkernel/odroid-n2/hassos-hook.sh @@ -7,7 +7,7 @@ function hassos_pre_image() { local SPL_IMG="$(path_spl_img)" cp "${BINARIES_DIR}/boot.scr" "${BOOT_DATA}/boot.scr" - cp "${BINARIES_DIR}/meson-g12b-odroid-n2.dtb" "${BOOT_DATA}/meson-g12b-odroid-n2.dtb" + cp "${BINARIES_DIR}"/*.dtb "${BOOT_DATA}/" echo "console=tty0 console=ttyAML0,115200n8" > "${BOOT_DATA}/cmdline.txt" diff --git a/buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush b/buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush index cc7e46cc0..e02d94f6c 100644 --- a/buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush +++ b/buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush @@ -29,7 +29,11 @@ usb start # Load extraargs fileenv mmc ${devnum}:1 ${ramdisk_addr_r} cmdline.txt cmdline -fatload mmc ${devnum}:1 ${fdt_addr_r} meson-g12b-odroid-n2.dtb +if test "${board_rev}" = "a"; then + fatload mmc ${devnum}:1 ${fdt_addr_r} meson-g12b-odroid-n2.dtb +else + fatload mmc ${devnum}:1 ${fdt_addr_r} meson-g12b-odroid-n2-plus.dtb +fi # logical volumes get numbered after physical ones. # 1. boot diff --git a/buildroot-external/board/hardkernel/patches/linux/0008-arm64-dts-meson-convert-ODROID-N2-to-dtsi.patch b/buildroot-external/board/hardkernel/patches/linux/0008-arm64-dts-meson-convert-ODROID-N2-to-dtsi.patch new file mode 100644 index 000000000..daea64033 --- /dev/null +++ b/buildroot-external/board/hardkernel/patches/linux/0008-arm64-dts-meson-convert-ODROID-N2-to-dtsi.patch @@ -0,0 +1,1159 @@ +From 25225612747408e01d6496d41d4388130db2eff9 Mon Sep 17 00:00:00 2001 +Message-Id: <25225612747408e01d6496d41d4388130db2eff9.1595883122.git.stefan@agner.ch> +In-Reply-To: +References: +From: Christian Hewitt +Date: Sun, 19 Jul 2020 14:10:32 +0000 +Subject: [PATCH 08/10] arm64: dts: meson: convert ODROID-N2 to dtsi + +Convert the current ODROID-N2 dts into a common dtsi in preparation +for adding ODROID-N2+ support. + +Signed-off-by: Christian Hewitt +--- + .../boot/dts/amlogic/meson-g12b-odroid-n2.dts | 619 +----------------- + .../dts/amlogic/meson-g12b-odroid-n2.dtsi | 500 ++++++++++++++ + 2 files changed, 501 insertions(+), 618 deletions(-) + create mode 100644 arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi + +diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dts +index 34fffa6d859d..5fd51a87ae9b 100644 +--- a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dts ++++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dts +@@ -6,626 +6,9 @@ + + /dts-v1/; + +-#include "meson-g12b-s922x.dtsi" +-#include +-#include +-#include +-#include ++#include "meson-g12b-odroid-n2.dtsi" + + / { + compatible = "hardkernel,odroid-n2", "amlogic,s922x", "amlogic,g12b"; + model = "Hardkernel ODROID-N2"; +- +- aliases { +- serial0 = &uart_AO; +- ethernet0 = ðmac; +- }; +- +- dioo2133: audio-amplifier-0 { +- compatible = "simple-audio-amplifier"; +- enable-gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>; +- VCC-supply = <&vcc_5v>; +- sound-name-prefix = "U19"; +- status = "okay"; +- }; +- +- chosen { +- stdout-path = "serial0:115200n8"; +- }; +- +- memory@0 { +- device_type = "memory"; +- reg = <0x0 0x0 0x0 0x40000000>; +- }; +- +- emmc_pwrseq: emmc-pwrseq { +- compatible = "mmc-pwrseq-emmc"; +- reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>; +- }; +- +- leds { +- compatible = "gpio-leds"; +- +- blue { +- label = "n2:blue"; +- gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH>; +- linux,default-trigger = "heartbeat"; +- }; +- }; +- +- tflash_vdd: regulator-tflash_vdd { +- compatible = "regulator-fixed"; +- +- regulator-name = "TFLASH_VDD"; +- regulator-min-microvolt = <3300000>; +- regulator-max-microvolt = <3300000>; +- +- gpio = <&gpio_ao GPIOAO_8 GPIO_ACTIVE_HIGH>; +- enable-active-high; +- regulator-always-on; +- }; +- +- tf_io: gpio-regulator-tf_io { +- compatible = "regulator-gpio"; +- +- regulator-name = "TF_IO"; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <3300000>; +- +- gpios = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>; +- gpios-states = <0>; +- +- states = <3300000 0>, +- <1800000 1>; +- }; +- +- flash_1v8: regulator-flash_1v8 { +- compatible = "regulator-fixed"; +- regulator-name = "FLASH_1V8"; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <1800000>; +- vin-supply = <&vcc_3v3>; +- regulator-always-on; +- }; +- +- main_12v: regulator-main_12v { +- compatible = "regulator-fixed"; +- regulator-name = "12V"; +- regulator-min-microvolt = <12000000>; +- regulator-max-microvolt = <12000000>; +- regulator-always-on; +- }; +- +- vcc_5v: regulator-vcc_5v { +- compatible = "regulator-fixed"; +- regulator-name = "5V"; +- regulator-min-microvolt = <5000000>; +- regulator-max-microvolt = <5000000>; +- regulator-always-on; +- vin-supply = <&main_12v>; +- }; +- +- vcc_1v8: regulator-vcc_1v8 { +- compatible = "regulator-fixed"; +- regulator-name = "VCC_1V8"; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <1800000>; +- vin-supply = <&vcc_3v3>; +- regulator-always-on; +- }; +- +- vcc_3v3: regulator-vcc_3v3 { +- compatible = "regulator-fixed"; +- regulator-name = "VCC_3V3"; +- regulator-min-microvolt = <3300000>; +- regulator-max-microvolt = <3300000>; +- vin-supply = <&vddao_3v3>; +- regulator-always-on; +- /* FIXME: actually controlled by VDDCPU_B_EN */ +- }; +- +- vddcpu_a: regulator-vddcpu-a { +- /* +- * MP8756GD Regulator. +- */ +- compatible = "pwm-regulator"; +- +- regulator-name = "VDDCPU_A"; +- regulator-min-microvolt = <721000>; +- regulator-max-microvolt = <1022000>; +- +- vin-supply = <&main_12v>; +- +- pwms = <&pwm_ab 0 1250 0>; +- pwm-dutycycle-range = <100 0>; +- +- regulator-boot-on; +- regulator-always-on; +- }; +- +- vddcpu_b: regulator-vddcpu-b { +- /* +- * Silergy SY8120B1ABC Regulator. +- */ +- compatible = "pwm-regulator"; +- +- regulator-name = "VDDCPU_B"; +- regulator-min-microvolt = <721000>; +- regulator-max-microvolt = <1022000>; +- +- vin-supply = <&main_12v>; +- +- pwms = <&pwm_AO_cd 1 1250 0>; +- pwm-dutycycle-range = <100 0>; +- +- regulator-boot-on; +- regulator-always-on; +- }; +- +- hub_5v: regulator-hub_5v { +- compatible = "regulator-fixed"; +- regulator-name = "HUB_5V"; +- regulator-min-microvolt = <5000000>; +- regulator-max-microvolt = <5000000>; +- vin-supply = <&vcc_5v>; +- +- /* Connected to the Hub CHIPENABLE, LOW sets low power state */ +- gpio = <&gpio GPIOH_5 GPIO_ACTIVE_HIGH>; +- enable-active-high; +- }; +- +- usb_pwr_en: regulator-usb_pwr_en { +- compatible = "regulator-fixed"; +- regulator-name = "USB_PWR_EN"; +- regulator-min-microvolt = <5000000>; +- regulator-max-microvolt = <5000000>; +- vin-supply = <&vcc_5v>; +- +- /* Connected to the microUSB port power enable */ +- gpio = <&gpio GPIOH_6 GPIO_ACTIVE_HIGH>; +- enable-active-high; +- }; +- +- vddao_1v8: regulator-vddao_1v8 { +- compatible = "regulator-fixed"; +- regulator-name = "VDDAO_1V8"; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <1800000>; +- vin-supply = <&vddao_3v3>; +- regulator-always-on; +- }; +- +- vddao_3v3: regulator-vddao_3v3 { +- compatible = "regulator-fixed"; +- regulator-name = "VDDAO_3V3"; +- regulator-min-microvolt = <3300000>; +- regulator-max-microvolt = <3300000>; +- vin-supply = <&main_12v>; +- regulator-always-on; +- }; +- +- hdmi-connector { +- compatible = "hdmi-connector"; +- type = "a"; +- +- port { +- hdmi_connector_in: endpoint { +- remote-endpoint = <&hdmi_tx_tmds_out>; +- }; +- }; +- }; +- +- sound { +- compatible = "amlogic,axg-sound-card"; +- model = "G12B-ODROID-N2"; +- audio-widgets = "Line", "Lineout"; +- audio-aux-devs = <&tdmout_b>, <&tdmout_c>, <&tdmin_a>, +- <&tdmin_b>, <&tdmin_c>, <&tdmin_lb>, +- <&dioo2133>; +- audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1", +- "TDMOUT_B IN 1", "FRDDR_B OUT 1", +- "TDMOUT_B IN 2", "FRDDR_C OUT 1", +- "TDM_B Playback", "TDMOUT_B OUT", +- "TDMOUT_C IN 0", "FRDDR_A OUT 2", +- "TDMOUT_C IN 1", "FRDDR_B OUT 2", +- "TDMOUT_C IN 2", "FRDDR_C OUT 2", +- "TDM_C Playback", "TDMOUT_C OUT", +- "TDMIN_A IN 4", "TDM_B Loopback", +- "TDMIN_B IN 4", "TDM_B Loopback", +- "TDMIN_C IN 4", "TDM_B Loopback", +- "TDMIN_LB IN 1", "TDM_B Loopback", +- "TDMIN_A IN 5", "TDM_C Loopback", +- "TDMIN_B IN 5", "TDM_C Loopback", +- "TDMIN_C IN 5", "TDM_C Loopback", +- "TDMIN_LB IN 2", "TDM_C Loopback", +- "TODDR_A IN 0", "TDMIN_A OUT", +- "TODDR_B IN 0", "TDMIN_A OUT", +- "TODDR_C IN 0", "TDMIN_A OUT", +- "TODDR_A IN 1", "TDMIN_B OUT", +- "TODDR_B IN 1", "TDMIN_B OUT", +- "TODDR_C IN 1", "TDMIN_B OUT", +- "TODDR_A IN 2", "TDMIN_C OUT", +- "TODDR_B IN 2", "TDMIN_C OUT", +- "TODDR_C IN 2", "TDMIN_C OUT", +- "TODDR_A IN 6", "TDMIN_LB OUT", +- "TODDR_B IN 6", "TDMIN_LB OUT", +- "TODDR_C IN 6", "TDMIN_LB OUT", +- "U19 INL", "ACODEC LOLP", +- "U19 INR", "ACODEC LORP", +- "Lineout", "U19 OUTL", +- "Lineout", "U19 OUTR"; +- +- assigned-clocks = <&clkc CLKID_MPLL2>, +- <&clkc CLKID_MPLL0>, +- <&clkc CLKID_MPLL1>; +- assigned-clock-parents = <0>, <0>, <0>; +- assigned-clock-rates = <294912000>, +- <270950400>, +- <393216000>; +- status = "okay"; +- +- dai-link-0 { +- sound-dai = <&frddr_a>; +- }; +- +- dai-link-1 { +- sound-dai = <&frddr_b>; +- }; +- +- dai-link-2 { +- sound-dai = <&frddr_c>; +- }; +- +- dai-link-3 { +- sound-dai = <&toddr_a>; +- }; +- +- dai-link-4 { +- sound-dai = <&toddr_b>; +- }; +- +- dai-link-5 { +- sound-dai = <&toddr_c>; +- }; +- +- /* 8ch hdmi interface */ +- dai-link-6 { +- sound-dai = <&tdmif_b>; +- dai-format = "i2s"; +- dai-tdm-slot-tx-mask-0 = <1 1>; +- dai-tdm-slot-tx-mask-1 = <1 1>; +- dai-tdm-slot-tx-mask-2 = <1 1>; +- dai-tdm-slot-tx-mask-3 = <1 1>; +- mclk-fs = <256>; +- +- codec-0 { +- sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>; +- }; +- +- codec-1 { +- sound-dai = <&toacodec TOACODEC_IN_B>; +- }; +- }; +- +- /* i2s jack output interface */ +- dai-link-7 { +- sound-dai = <&tdmif_c>; +- dai-format = "i2s"; +- dai-tdm-slot-tx-mask-0 = <1 1>; +- mclk-fs = <256>; +- +- codec-0 { +- sound-dai = <&tohdmitx TOHDMITX_I2S_IN_C>; +- }; +- +- codec-1 { +- sound-dai = <&toacodec TOACODEC_IN_C>; +- }; +- }; +- +- /* hdmi glue */ +- dai-link-8 { +- sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>; +- +- codec { +- sound-dai = <&hdmi_tx>; +- }; +- }; +- +- /* acodec glue */ +- dai-link-9 { +- sound-dai = <&toacodec TOACODEC_OUT>; +- +- codec { +- sound-dai = <&acodec>; +- }; +- }; +- }; +-}; +- +-&acodec { +- AVDD-supply = <&vddao_1v8>; +- status = "okay"; +-}; +- +-&arb { +- status = "okay"; +-}; +- +-&cec_AO { +- pinctrl-0 = <&cec_ao_a_h_pins>; +- pinctrl-names = "default"; +- status = "disabled"; +- hdmi-phandle = <&hdmi_tx>; +-}; +- +-&cecb_AO { +- pinctrl-0 = <&cec_ao_b_h_pins>; +- pinctrl-names = "default"; +- status = "okay"; +- hdmi-phandle = <&hdmi_tx>; +-}; +- +-&clkc_audio { +- status = "okay"; +-}; +- +-&cpu0 { +- cpu-supply = <&vddcpu_b>; +- operating-points-v2 = <&cpu_opp_table_0>; +- clocks = <&clkc CLKID_CPU_CLK>; +- clock-latency = <50000>; +-}; +- +-&cpu1 { +- cpu-supply = <&vddcpu_b>; +- operating-points-v2 = <&cpu_opp_table_0>; +- clocks = <&clkc CLKID_CPU_CLK>; +- clock-latency = <50000>; +-}; +- +-&cpu100 { +- cpu-supply = <&vddcpu_a>; +- operating-points-v2 = <&cpub_opp_table_1>; +- clocks = <&clkc CLKID_CPUB_CLK>; +- clock-latency = <50000>; +-}; +- +-&cpu101 { +- cpu-supply = <&vddcpu_a>; +- operating-points-v2 = <&cpub_opp_table_1>; +- clocks = <&clkc CLKID_CPUB_CLK>; +- clock-latency = <50000>; +-}; +- +-&cpu102 { +- cpu-supply = <&vddcpu_a>; +- operating-points-v2 = <&cpub_opp_table_1>; +- clocks = <&clkc CLKID_CPUB_CLK>; +- clock-latency = <50000>; +-}; +- +-&cpu103 { +- cpu-supply = <&vddcpu_a>; +- operating-points-v2 = <&cpub_opp_table_1>; +- clocks = <&clkc CLKID_CPUB_CLK>; +- clock-latency = <50000>; +-}; +- +-&ext_mdio { +- external_phy: ethernet-phy@0 { +- /* Realtek RTL8211F (0x001cc916) */ +- reg = <0>; +- max-speed = <1000>; +- +- reset-assert-us = <10000>; +- reset-deassert-us = <30000>; +- reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; +- +- interrupt-parent = <&gpio_intc>; +- /* MAC_INTR on GPIOZ_14 */ +- interrupts = <26 IRQ_TYPE_LEVEL_LOW>; +- }; +-}; +- +-ðmac { +- pinctrl-0 = <ð_pins>, <ð_rgmii_pins>; +- pinctrl-names = "default"; +- status = "okay"; +- phy-mode = "rgmii"; +- phy-handle = <&external_phy>; +- amlogic,tx-delay-ns = <2>; +-}; +- +-&frddr_a { +- status = "okay"; +-}; +- +-&frddr_b { +- status = "okay"; +-}; +- +-&frddr_c { +- status = "okay"; +-}; +- +-&gpio { +- /* +- * WARNING: The USB Hub on the Odroid-N2 needs a reset signal +- * to be turned high in order to be detected by the USB Controller +- * This signal should be handled by a USB specific power sequence +- * in order to reset the Hub when USB bus is powered down. +- */ +- usb-hub { +- gpio-hog; +- gpios = ; +- output-high; +- line-name = "usb-hub-reset"; +- }; +-}; +- +-&hdmi_tx { +- status = "okay"; +- pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>; +- pinctrl-names = "default"; +- hdmi-supply = <&vcc_5v>; +-}; +- +-&hdmi_tx_tmds_port { +- hdmi_tx_tmds_out: endpoint { +- remote-endpoint = <&hdmi_connector_in>; +- }; +-}; +- +-&ir { +- status = "okay"; +- pinctrl-0 = <&remote_input_ao_pins>; +- pinctrl-names = "default"; +- linux,rc-map-name = "rc-odroid"; +-}; +- +-&pwm_ab { +- pinctrl-0 = <&pwm_a_e_pins>; +- pinctrl-names = "default"; +- clocks = <&xtal>; +- clock-names = "clkin0"; +- status = "okay"; +-}; +- +-&pwm_AO_cd { +- pinctrl-0 = <&pwm_ao_d_e_pins>; +- pinctrl-names = "default"; +- clocks = <&xtal>; +- clock-names = "clkin1"; +- status = "okay"; +-}; +- +-/* SD card */ +-&sd_emmc_b { +- status = "okay"; +- pinctrl-0 = <&sdcard_c_pins>; +- pinctrl-1 = <&sdcard_clk_gate_c_pins>; +- pinctrl-names = "default", "clk-gate"; +- +- bus-width = <4>; +- cap-sd-highspeed; +- max-frequency = <50000000>; +- disable-wp; +- +- cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>; +- vmmc-supply = <&tflash_vdd>; +- vqmmc-supply = <&tf_io>; +- +-}; +- +-/* eMMC */ +-&sd_emmc_c { +- status = "okay"; +- pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>; +- pinctrl-1 = <&emmc_clk_gate_pins>; +- pinctrl-names = "default", "clk-gate"; +- +- bus-width = <8>; +- cap-mmc-highspeed; +- mmc-ddr-1_8v; +- mmc-hs200-1_8v; +- max-frequency = <200000000>; +- disable-wp; +- +- mmc-pwrseq = <&emmc_pwrseq>; +- vmmc-supply = <&vcc_3v3>; +- vqmmc-supply = <&flash_1v8>; +-}; +- +-/* +- * EMMC_D4, EMMC_D5, EMMC_D6 and EMMC_D7 pins are shared between SPI NOR pins +- * and eMMC Data 4 to 7 pins. +- * Replace emmc_data_8b_pins to emmc_data_4b_pins from sd_emmc_c pinctrl-0, +- * and change bus-width to 4 then spifc can be enabled. +- * The SW1 slide should also be set to the correct position. +- */ +-&spifc { +- status = "disabled"; +- pinctrl-0 = <&nor_pins>; +- pinctrl-names = "default"; +- +- mx25u64: spi-flash@0 { +- #address-cells = <1>; +- #size-cells = <1>; +- compatible = "mxicy,mx25u6435f", "jedec,spi-nor"; +- reg = <0>; +- spi-max-frequency = <104000000>; +- }; +-}; +- +-&tdmif_b { +- status = "okay"; +-}; +- +-&tdmif_c { +- status = "okay"; +-}; +- +-&tdmin_a { +- status = "okay"; +-}; +- +-&tdmin_b { +- status = "okay"; +-}; +- +-&tdmin_c { +- status = "okay"; +-}; +- +-&tdmin_lb { +- status = "okay"; +-}; +- +-&tdmout_b { +- status = "okay"; +-}; +- +-&tdmout_c { +- status = "okay"; +-}; +- +-&toacodec { +- status = "okay"; +-}; +- +-&tohdmitx { +- status = "okay"; +-}; +- +-&toddr_a { +- status = "okay"; +-}; +- +-&toddr_b { +- status = "okay"; +-}; +- +-&toddr_c { +- status = "okay"; +-}; +- +-&uart_AO { +- status = "okay"; +- pinctrl-0 = <&uart_ao_a_pins>; +- pinctrl-names = "default"; +-}; +- +-&usb { +- status = "okay"; +- vbus-supply = <&usb_pwr_en>; +-}; +- +-&usb2_phy0 { +- phy-supply = <&vcc_5v>; +-}; +- +-&usb2_phy1 { +- /* Enable the hub which is connected to this port */ +- phy-supply = <&hub_5v>; + }; +diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi +new file mode 100644 +index 000000000000..ce49973678b8 +--- /dev/null ++++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi +@@ -0,0 +1,500 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2019 BayLibre, SAS ++ * Author: Neil Armstrong ++ */ ++ ++#include "meson-g12b-s922x.dtsi" ++#include ++#include ++#include ++ ++/ { ++ aliases { ++ serial0 = &uart_AO; ++ ethernet0 = ðmac; ++ }; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ memory@0 { ++ device_type = "memory"; ++ reg = <0x0 0x0 0x0 0x40000000>; ++ }; ++ ++ emmc_pwrseq: emmc-pwrseq { ++ compatible = "mmc-pwrseq-emmc"; ++ reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ blue { ++ label = "n2:blue"; ++ gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "heartbeat"; ++ }; ++ }; ++ ++ tflash_vdd: regulator-tflash_vdd { ++ compatible = "regulator-fixed"; ++ ++ regulator-name = "TFLASH_VDD"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ ++ gpio = <&gpio_ao GPIOAO_8 GPIO_ACTIVE_HIGH>; ++ enable-active-high; ++ regulator-always-on; ++ }; ++ ++ tf_io: gpio-regulator-tf_io { ++ compatible = "regulator-gpio"; ++ ++ regulator-name = "TF_IO"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ ++ gpios = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>; ++ gpios-states = <0>; ++ ++ states = <3300000 0>, ++ <1800000 1>; ++ }; ++ ++ flash_1v8: regulator-flash_1v8 { ++ compatible = "regulator-fixed"; ++ regulator-name = "FLASH_1V8"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vcc_3v3>; ++ regulator-always-on; ++ }; ++ ++ main_12v: regulator-main_12v { ++ compatible = "regulator-fixed"; ++ regulator-name = "12V"; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ regulator-always-on; ++ }; ++ ++ vcc_5v: regulator-vcc_5v { ++ compatible = "regulator-fixed"; ++ regulator-name = "5V"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-always-on; ++ vin-supply = <&main_12v>; ++ }; ++ ++ vcc_1v8: regulator-vcc_1v8 { ++ compatible = "regulator-fixed"; ++ regulator-name = "VCC_1V8"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vcc_3v3>; ++ regulator-always-on; ++ }; ++ ++ vcc_3v3: regulator-vcc_3v3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "VCC_3V3"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ vin-supply = <&vddao_3v3>; ++ regulator-always-on; ++ /* FIXME: actually controlled by VDDCPU_B_EN */ ++ }; ++ ++ vddcpu_a: regulator-vddcpu-a { ++ /* ++ * MP8756GD Regulator. ++ */ ++ compatible = "pwm-regulator"; ++ ++ regulator-name = "VDDCPU_A"; ++ regulator-min-microvolt = <721000>; ++ regulator-max-microvolt = <1022000>; ++ ++ vin-supply = <&main_12v>; ++ ++ pwms = <&pwm_ab 0 1250 0>; ++ pwm-dutycycle-range = <100 0>; ++ ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ vddcpu_b: regulator-vddcpu-b { ++ /* ++ * Silergy SY8120B1ABC Regulator. ++ */ ++ compatible = "pwm-regulator"; ++ ++ regulator-name = "VDDCPU_B"; ++ regulator-min-microvolt = <721000>; ++ regulator-max-microvolt = <1022000>; ++ ++ vin-supply = <&main_12v>; ++ ++ pwms = <&pwm_AO_cd 1 1250 0>; ++ pwm-dutycycle-range = <100 0>; ++ ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ hub_5v: regulator-hub_5v { ++ compatible = "regulator-fixed"; ++ regulator-name = "HUB_5V"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc_5v>; ++ ++ /* Connected to the Hub CHIPENABLE, LOW sets low power state */ ++ gpio = <&gpio GPIOH_5 GPIO_ACTIVE_HIGH>; ++ enable-active-high; ++ }; ++ ++ usb_pwr_en: regulator-usb_pwr_en { ++ compatible = "regulator-fixed"; ++ regulator-name = "USB_PWR_EN"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc_5v>; ++ ++ /* Connected to the microUSB port power enable */ ++ gpio = <&gpio GPIOH_6 GPIO_ACTIVE_HIGH>; ++ enable-active-high; ++ }; ++ ++ vddao_1v8: regulator-vddao_1v8 { ++ compatible = "regulator-fixed"; ++ regulator-name = "VDDAO_1V8"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vddao_3v3>; ++ regulator-always-on; ++ }; ++ ++ vddao_3v3: regulator-vddao_3v3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "VDDAO_3V3"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ vin-supply = <&main_12v>; ++ regulator-always-on; ++ }; ++ ++ hdmi-connector { ++ compatible = "hdmi-connector"; ++ type = "a"; ++ ++ port { ++ hdmi_connector_in: endpoint { ++ remote-endpoint = <&hdmi_tx_tmds_out>; ++ }; ++ }; ++ }; ++ ++ sound { ++ compatible = "amlogic,axg-sound-card"; ++ model = "G12B-ODROID-N2"; ++ audio-aux-devs = <&tdmout_b>; ++ audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1", ++ "TDMOUT_B IN 1", "FRDDR_B OUT 1", ++ "TDMOUT_B IN 2", "FRDDR_C OUT 1", ++ "TDM_B Playback", "TDMOUT_B OUT"; ++ ++ assigned-clocks = <&clkc CLKID_MPLL2>, ++ <&clkc CLKID_MPLL0>, ++ <&clkc CLKID_MPLL1>; ++ assigned-clock-parents = <0>, <0>, <0>; ++ assigned-clock-rates = <294912000>, ++ <270950400>, ++ <393216000>; ++ status = "okay"; ++ ++ dai-link-0 { ++ sound-dai = <&frddr_a>; ++ }; ++ ++ dai-link-1 { ++ sound-dai = <&frddr_b>; ++ }; ++ ++ dai-link-2 { ++ sound-dai = <&frddr_c>; ++ }; ++ ++ /* 8ch hdmi interface */ ++ dai-link-3 { ++ sound-dai = <&tdmif_b>; ++ dai-format = "i2s"; ++ dai-tdm-slot-tx-mask-0 = <1 1>; ++ dai-tdm-slot-tx-mask-1 = <1 1>; ++ dai-tdm-slot-tx-mask-2 = <1 1>; ++ dai-tdm-slot-tx-mask-3 = <1 1>; ++ mclk-fs = <256>; ++ ++ codec { ++ sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>; ++ }; ++ }; ++ ++ /* hdmi glue */ ++ dai-link-4 { ++ sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>; ++ ++ codec { ++ sound-dai = <&hdmi_tx>; ++ }; ++ }; ++ }; ++}; ++ ++&arb { ++ status = "okay"; ++}; ++ ++&cec_AO { ++ pinctrl-0 = <&cec_ao_a_h_pins>; ++ pinctrl-names = "default"; ++ status = "disabled"; ++ hdmi-phandle = <&hdmi_tx>; ++}; ++ ++&cecb_AO { ++ pinctrl-0 = <&cec_ao_b_h_pins>; ++ pinctrl-names = "default"; ++ status = "okay"; ++ hdmi-phandle = <&hdmi_tx>; ++}; ++ ++&clkc_audio { ++ status = "okay"; ++}; ++ ++&cpu0 { ++ cpu-supply = <&vddcpu_b>; ++ operating-points-v2 = <&cpu_opp_table_0>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu1 { ++ cpu-supply = <&vddcpu_b>; ++ operating-points-v2 = <&cpu_opp_table_0>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu100 { ++ cpu-supply = <&vddcpu_a>; ++ operating-points-v2 = <&cpub_opp_table_1>; ++ clocks = <&clkc CLKID_CPUB_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu101 { ++ cpu-supply = <&vddcpu_a>; ++ operating-points-v2 = <&cpub_opp_table_1>; ++ clocks = <&clkc CLKID_CPUB_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu102 { ++ cpu-supply = <&vddcpu_a>; ++ operating-points-v2 = <&cpub_opp_table_1>; ++ clocks = <&clkc CLKID_CPUB_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu103 { ++ cpu-supply = <&vddcpu_a>; ++ operating-points-v2 = <&cpub_opp_table_1>; ++ clocks = <&clkc CLKID_CPUB_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&ext_mdio { ++ external_phy: ethernet-phy@0 { ++ /* Realtek RTL8211F (0x001cc916) */ ++ reg = <0>; ++ max-speed = <1000>; ++ ++ reset-assert-us = <10000>; ++ reset-deassert-us = <30000>; ++ reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; ++ ++ interrupt-parent = <&gpio_intc>; ++ /* MAC_INTR on GPIOZ_14 */ ++ interrupts = <26 IRQ_TYPE_LEVEL_LOW>; ++ }; ++}; ++ ++ðmac { ++ pinctrl-0 = <ð_pins>, <ð_rgmii_pins>; ++ pinctrl-names = "default"; ++ status = "okay"; ++ phy-mode = "rgmii"; ++ phy-handle = <&external_phy>; ++ amlogic,tx-delay-ns = <2>; ++}; ++ ++&frddr_a { ++ status = "okay"; ++}; ++ ++&frddr_b { ++ status = "okay"; ++}; ++ ++&frddr_c { ++ status = "okay"; ++}; ++ ++&gpio { ++ /* ++ * WARNING: The USB Hub on the Odroid-N2 needs a reset signal ++ * to be turned high in order to be detected by the USB Controller ++ * This signal should be handled by a USB specific power sequence ++ * in order to reset the Hub when USB bus is powered down. ++ */ ++ usb-hub { ++ gpio-hog; ++ gpios = ; ++ output-high; ++ line-name = "usb-hub-reset"; ++ }; ++}; ++ ++&hdmi_tx { ++ status = "okay"; ++ pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>; ++ pinctrl-names = "default"; ++ hdmi-supply = <&vcc_5v>; ++}; ++ ++&hdmi_tx_tmds_port { ++ hdmi_tx_tmds_out: endpoint { ++ remote-endpoint = <&hdmi_connector_in>; ++ }; ++}; ++ ++&ir { ++ status = "okay"; ++ pinctrl-0 = <&remote_input_ao_pins>; ++ pinctrl-names = "default"; ++ linux,rc-map-name = "rc-odroid"; ++}; ++ ++&pwm_ab { ++ pinctrl-0 = <&pwm_a_e_pins>; ++ pinctrl-names = "default"; ++ clocks = <&xtal>; ++ clock-names = "clkin0"; ++ status = "okay"; ++}; ++ ++&pwm_AO_cd { ++ pinctrl-0 = <&pwm_ao_d_e_pins>; ++ pinctrl-names = "default"; ++ clocks = <&xtal>; ++ clock-names = "clkin1"; ++ status = "okay"; ++}; ++ ++/* SD card */ ++&sd_emmc_b { ++ status = "okay"; ++ pinctrl-0 = <&sdcard_c_pins>; ++ pinctrl-1 = <&sdcard_clk_gate_c_pins>; ++ pinctrl-names = "default", "clk-gate"; ++ ++ bus-width = <4>; ++ cap-sd-highspeed; ++ max-frequency = <50000000>; ++ disable-wp; ++ ++ cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>; ++ vmmc-supply = <&tflash_vdd>; ++ vqmmc-supply = <&tf_io>; ++ ++}; ++ ++/* eMMC */ ++&sd_emmc_c { ++ status = "okay"; ++ pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>; ++ pinctrl-1 = <&emmc_clk_gate_pins>; ++ pinctrl-names = "default", "clk-gate"; ++ ++ bus-width = <8>; ++ cap-mmc-highspeed; ++ mmc-ddr-1_8v; ++ mmc-hs200-1_8v; ++ max-frequency = <200000000>; ++ disable-wp; ++ ++ mmc-pwrseq = <&emmc_pwrseq>; ++ vmmc-supply = <&vcc_3v3>; ++ vqmmc-supply = <&flash_1v8>; ++}; ++ ++/* ++ * EMMC_D4, EMMC_D5, EMMC_D6 and EMMC_D7 pins are shared between SPI NOR pins ++ * and eMMC Data 4 to 7 pins. ++ * Replace emmc_data_8b_pins to emmc_data_4b_pins from sd_emmc_c pinctrl-0, ++ * and change bus-width to 4 then spifc can be enabled. ++ * The SW1 slide should also be set to the correct position. ++ */ ++&spifc { ++ status = "disabled"; ++ pinctrl-0 = <&nor_pins>; ++ pinctrl-names = "default"; ++ ++ mx25u64: spi-flash@0 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ compatible = "mxicy,mx25u6435f", "jedec,spi-nor"; ++ reg = <0>; ++ spi-max-frequency = <104000000>; ++ }; ++}; ++ ++&tdmif_b { ++ status = "okay"; ++}; ++ ++&tdmout_b { ++ status = "okay"; ++}; ++ ++&tohdmitx { ++ status = "okay"; ++}; ++ ++&uart_AO { ++ status = "okay"; ++ pinctrl-0 = <&uart_ao_a_pins>; ++ pinctrl-names = "default"; ++}; ++ ++&usb { ++ status = "okay"; ++ vbus-supply = <&usb_pwr_en>; ++}; ++ ++&usb2_phy0 { ++ phy-supply = <&vcc_5v>; ++}; ++ ++&usb2_phy1 { ++ /* Enable the hub which is connected to this port */ ++ phy-supply = <&hub_5v>; ++}; +-- +2.27.0 + diff --git a/buildroot-external/board/hardkernel/patches/linux/0009-dt-bindings-arm-amlogic-add-support-for-the-ODROID-N.patch b/buildroot-external/board/hardkernel/patches/linux/0009-dt-bindings-arm-amlogic-add-support-for-the-ODROID-N.patch new file mode 100644 index 000000000..23b58efb2 --- /dev/null +++ b/buildroot-external/board/hardkernel/patches/linux/0009-dt-bindings-arm-amlogic-add-support-for-the-ODROID-N.patch @@ -0,0 +1,32 @@ +From 54d8ae2ae7a10dab6998b2d4ac507aec96c6f1da Mon Sep 17 00:00:00 2001 +Message-Id: <54d8ae2ae7a10dab6998b2d4ac507aec96c6f1da.1595882680.git.stefan@agner.ch> +In-Reply-To: +References: +From: Christian Hewitt +Date: Sun, 19 Jul 2020 14:10:33 +0000 +Subject: [PATCH 09/10] dt-bindings: arm: amlogic: add support for the + ODROID-N2+ + +HardKernel ODROID-N2+ uses a revised Amlogic S922X v2 chip that supports +higher cpu clock speeds than the original ODROID-N2. + +Signed-off-by: Christian Hewitt +--- + Documentation/devicetree/bindings/arm/amlogic.yaml | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Documentation/devicetree/bindings/arm/amlogic.yaml b/Documentation/devicetree/bindings/arm/amlogic.yaml +index f74aba48cec1..915ef4f355ad 100644 +--- a/Documentation/devicetree/bindings/arm/amlogic.yaml ++++ b/Documentation/devicetree/bindings/arm/amlogic.yaml +@@ -149,6 +149,7 @@ properties: + items: + - enum: + - hardkernel,odroid-n2 ++ - hardkernel,odroid-n2-plus + - khadas,vim3 + - ugoos,am6 + - const: amlogic,s922x +-- +2.27.0 + diff --git a/buildroot-external/board/hardkernel/patches/linux/0010-arm64-dts-meson-add-support-for-the-ODROID-N2.patch b/buildroot-external/board/hardkernel/patches/linux/0010-arm64-dts-meson-add-support-for-the-ODROID-N2.patch new file mode 100644 index 000000000..42ebf9903 --- /dev/null +++ b/buildroot-external/board/hardkernel/patches/linux/0010-arm64-dts-meson-add-support-for-the-ODROID-N2.patch @@ -0,0 +1,97 @@ +From 188bc924b34b7d845324eb2e0e7493a9eaeb2cb5 Mon Sep 17 00:00:00 2001 +Message-Id: <188bc924b34b7d845324eb2e0e7493a9eaeb2cb5.1595882680.git.stefan@agner.ch> +In-Reply-To: +References: +From: Christian Hewitt +Date: Sun, 19 Jul 2020 14:10:34 +0000 +Subject: [PATCH 10/10] arm64: dts: meson: add support for the ODROID-N2+ + +HardKernel ODROID-N2+ uses an Amlogic S922X rev. C chip capable of higher +clock speeds than the original ODROID-N2. Hardkernel supports the big cpu +cluster at 2.4GHz and the little cpu cluster at 2.0GHz. Opp points and +regulator changess are from the HardKernel Linux kernel sources. + +Suggested-by: Dongjin Kim +Signed-off-by: Christian Hewitt +[Integrated Neil Armstrong's feedback from mailing list] +Signed-off-by: Stefan Agner +--- + arch/arm64/boot/dts/amlogic/Makefile | 1 + + .../dts/amlogic/meson-g12b-odroid-n2-plus.dts | 53 +++++++++++++++++++ + 2 files changed, 54 insertions(+) + create mode 100644 arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts + +diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile +index eef0045320f2..7524cf9680f5 100644 +--- a/arch/arm64/boot/dts/amlogic/Makefile ++++ b/arch/arm64/boot/dts/amlogic/Makefile +@@ -6,6 +6,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-g12a-x96-max.dtb + dtb-$(CONFIG_ARCH_MESON) += meson-g12b-a311d-khadas-vim3.dtb + dtb-$(CONFIG_ARCH_MESON) += meson-g12b-s922x-khadas-vim3.dtb + dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2.dtb ++dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2-plus.dtb + dtb-$(CONFIG_ARCH_MESON) += meson-g12b-ugoos-am6.dtb + dtb-$(CONFIG_ARCH_MESON) += meson-gxbb-kii-pro.dtb + dtb-$(CONFIG_ARCH_MESON) += meson-gxbb-nanopi-k2.dtb +diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts +new file mode 100644 +index 000000000000..4ebb448d233f +--- /dev/null ++++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts +@@ -0,0 +1,53 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2019 BayLibre, SAS ++ * Author: Neil Armstrong ++ */ ++ ++/dts-v1/; ++ ++#include "meson-g12b-odroid-n2.dtsi" ++ ++/ { ++ compatible = "hardkernel,odroid-n2-plus", "amlogic,s922x", "amlogic,g12b"; ++ model = "Hardkernel ODROID-N2+"; ++}; ++ ++&vddcpu_a { ++ regulator-min-microvolt = <680000>; ++ regulator-max-microvolt = <1040000>; ++ ++ pwms = <&pwm_ab 0 1500 0>; ++}; ++ ++&vddcpu_b { ++ regulator-min-microvolt = <680000>; ++ regulator-max-microvolt = <1040000>; ++ ++ pwms = <&pwm_AO_cd 1 1500 0>; ++}; ++ ++&cpu_opp_table_0 { ++ opp-1908000000 { ++ opp-hz = /bits/ 64 <1908000000>; ++ opp-microvolt = <1030000>; ++ }; ++ ++ opp-2016000000 { ++ opp-hz = /bits/ 64 <2016000000>; ++ opp-microvolt = <1040000>; ++ }; ++}; ++ ++&cpub_opp_table_1 { ++ opp-2304000000 { ++ opp-hz = /bits/ 64 <2304000000>; ++ opp-microvolt = <1030000>; ++ }; ++ ++ opp-2400000000 { ++ opp-hz = /bits/ 64 <2400000000>; ++ opp-microvolt = <1040000>; ++ }; ++}; ++ +-- +2.27.0 + diff --git a/buildroot-external/configs/odroid_n2_defconfig b/buildroot-external/configs/odroid_n2_defconfig index a40deed7e..3163b3906 100644 --- a/buildroot-external/configs/odroid_n2_defconfig +++ b/buildroot-external/configs/odroid_n2_defconfig @@ -28,7 +28,7 @@ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkerne BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/device-support.config" BR2_LINUX_KERNEL_LZ4=y BR2_LINUX_KERNEL_DTS_SUPPORT=y -BR2_LINUX_KERNEL_INTREE_DTS_NAME="amlogic/meson-g12b-odroid-n2" +BR2_LINUX_KERNEL_INTREE_DTS_NAME="amlogic/meson-g12b-odroid-n2 amlogic/meson-g12b-odroid-n2-plus" BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"