From abbe87a4503b1f018933b55e2f7f34cc7fee308f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Pe=C4=8Dovnik?= Date: Wed, 8 Sep 2021 17:50:05 +0200 Subject: [PATCH] Add Radxa Zero initial support (#3128) * Add support for Radxa Zero u-boot: new patch based on v2021.04 kernel: use patches sent to kernel list by chewitt Tested with minimal build and cinnamon desktop: - SD/eMMC, ok - USB3, works in USB 2 mode - HDMI, ok - WiFi/BT, ok Signed-off-by: Jack Ma * Add build targets * Cleanup and set min speed to 666000 * Change to WIP target Support status undetermined Co-authored-by: Jack Ma --- config/boards/radxa-zero.wip | 10 + .../families/include/meson64_common.inc | 2 +- config/sources/families/meson-g12a.conf | 12 + config/targets-cli-beta.conf | 2 + config/targets.conf | 9 + ...c-revert-g103a5348c-to-fix-some-wifi.patch | 96 +++ ...s-amlogic-add-support-for-Radxa-Zero.patch | 590 ++++++++++++++ .../0001-Add-support-for-Radxa-Zero.patch | 729 ++++++++++++++++++ 8 files changed, 1449 insertions(+), 1 deletion(-) create mode 100644 config/boards/radxa-zero.wip create mode 100644 config/sources/families/meson-g12a.conf create mode 100644 patch/kernel/archive/meson64-5.10/0381-drivrs-mmc-revert-g103a5348c-to-fix-some-wifi.patch create mode 100644 patch/kernel/archive/meson64-5.10/arm64-dts-amlogic-add-support-for-Radxa-Zero.patch create mode 100644 patch/u-boot/u-boot-meson64/0001-Add-support-for-Radxa-Zero.patch diff --git a/config/boards/radxa-zero.wip b/config/boards/radxa-zero.wip new file mode 100644 index 0000000000..0d2adccd15 --- /dev/null +++ b/config/boards/radxa-zero.wip @@ -0,0 +1,10 @@ +# Amlogic S905Y2 512MB/1GB/2GB/4GB RAM eMMC USB3 WiFi BT +BOARD_NAME="Radxa Zero" +BOARDFAMILY="meson-g12a" +BOOTCONFIG="radxa-zero_config" +CPUMIN=6660000 +CPUMAX=1800000 +KERNEL_TARGET="current,edge" +FULL_DESKTOP="yes" +FORCE_BOOTSCRIPT_UPDATE="yes" +BOOT_LOGO="desktop" diff --git a/config/sources/families/include/meson64_common.inc b/config/sources/families/include/meson64_common.inc index 9ec63b19bf..a6fed89cfc 100644 --- a/config/sources/families/include/meson64_common.inc +++ b/config/sources/families/include/meson64_common.inc @@ -238,7 +238,7 @@ family_tweaks_bsp() EndSection EOF ;; - "odroidn2" | "odroidc4" | "khadas-vim2" | "odroidhc4" | "khadas-vim3" | "khadas-vim3l" ) + "odroidn2" | "odroidc4" | "khadas-vim2" | "odroidhc4" | "khadas-vim3" | "khadas-vim3l" | "radxa-zero" ) cat <<-EOF > "$destination"/etc/X11/xorg.conf Section "Device" Identifier "DRM Graphics Acclerated" diff --git a/config/sources/families/meson-g12a.conf b/config/sources/families/meson-g12a.conf new file mode 100644 index 0000000000..0f6128b629 --- /dev/null +++ b/config/sources/families/meson-g12a.conf @@ -0,0 +1,12 @@ +source "${BASH_SOURCE%/*}/include/meson64_common.inc" +ASOUND_STATE="asound.state.meson64" + +CPUMIN=1000000 +CPUMAX=1800000 +GOVERNOR=ondemand + +uboot_custom_postprocess() { + if [[ $BOARD == radxa-zero ]]; then + uboot_g12_postprocess "$SRC"/cache/sources/amlogic-boot-fip/radxa-zero g12a + fi +} diff --git a/config/targets-cli-beta.conf b/config/targets-cli-beta.conf index 221e7b2f5e..eed34951af 100644 --- a/config/targets-cli-beta.conf +++ b/config/targets-cli-beta.conf @@ -265,6 +265,8 @@ rockpi-s edge hirsute minimal # Rockpi E rockpi-e edge hirsute cli beta yes +# Radxa Zero +radxa-zero edge hirsute cli beta yes # Rock64pro rockpro64 edge hirsute cli beta yes diff --git a/config/targets.conf b/config/targets.conf index 23ae7eb655..39a0da64e8 100644 --- a/config/targets.conf +++ b/config/targets.conf @@ -827,6 +827,15 @@ rockpi-e current focal cli s rockpi-e edge hirsute cli stable yes +# Radxa Zero +radxa-zero current buster cli stable yes +radxa-zero current focal cli stable yes +radxa-zero edge bullseye cli stable yes +radxa-zero edge hirsute cli stable yes +radxa-zero current focal desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop +radxa-zero edge hirsute desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop + + # Rockpi N10 rockpi-n10 current buster cli stable yes rockpi-n10 current bullseye cli stable yes diff --git a/patch/kernel/archive/meson64-5.10/0381-drivrs-mmc-revert-g103a5348c-to-fix-some-wifi.patch b/patch/kernel/archive/meson64-5.10/0381-drivrs-mmc-revert-g103a5348c-to-fix-some-wifi.patch new file mode 100644 index 0000000000..f495342777 --- /dev/null +++ b/patch/kernel/archive/meson64-5.10/0381-drivrs-mmc-revert-g103a5348c-to-fix-some-wifi.patch @@ -0,0 +1,96 @@ + +This revets 103a5348c22c3fca8b96c735a9e353b8a0801842 + +Revert is required hack to get ap6256 wifi working ok on Amlogic. +Propper fix will be added soon... +Milion thx for Neil Armstrong for helping with this! + + +diff -Naur linux-5.13.5-old/drivers/mmc/host/meson-gx-mmc.c linux-5.13.5-new/drivers/mmc/host/meson-gx-mmc.c +--- linux-5.13.5-old/drivers/mmc/host/meson-gx-mmc.c 2021-07-25 14:37:37.000000000 +0200 ++++ linux-5.13.5-new/drivers/mmc/host/meson-gx-mmc.c 2021-07-26 14:45:59.626665204 +0200 +@@ -165,7 +165,6 @@ + + unsigned int bounce_buf_size; + void *bounce_buf; +- void __iomem *bounce_iomem_buf; + dma_addr_t bounce_dma_addr; + struct sd_emmc_desc *descs; + dma_addr_t descs_dma_addr; +@@ -746,47 +745,6 @@ + writel(start, host->regs + SD_EMMC_START); + } + +-/* local sg copy to buffer version with _to/fromio usage for dram_access_quirk */ +-static void meson_mmc_copy_buffer(struct meson_host *host, struct mmc_data *data, +- size_t buflen, bool to_buffer) +-{ +- unsigned int sg_flags = SG_MITER_ATOMIC; +- struct scatterlist *sgl = data->sg; +- unsigned int nents = data->sg_len; +- struct sg_mapping_iter miter; +- unsigned int offset = 0; +- +- if (to_buffer) +- sg_flags |= SG_MITER_FROM_SG; +- else +- sg_flags |= SG_MITER_TO_SG; +- +- sg_miter_start(&miter, sgl, nents, sg_flags); +- +- while ((offset < buflen) && sg_miter_next(&miter)) { +- unsigned int len; +- +- len = min(miter.length, buflen - offset); +- +- /* When dram_access_quirk, the bounce buffer is a iomem mapping */ +- if (host->dram_access_quirk) { +- if (to_buffer) +- memcpy_toio(host->bounce_iomem_buf + offset, miter.addr, len); +- else +- memcpy_fromio(miter.addr, host->bounce_iomem_buf + offset, len); +- } else { +- if (to_buffer) +- memcpy(host->bounce_buf + offset, miter.addr, len); +- else +- memcpy(miter.addr, host->bounce_buf + offset, len); +- } +- +- offset += len; +- } +- +- sg_miter_stop(&miter); +-} +- + static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd) + { + struct meson_host *host = mmc_priv(mmc); +@@ -830,7 +788,8 @@ + if (data->flags & MMC_DATA_WRITE) { + cmd_cfg |= CMD_CFG_DATA_WR; + WARN_ON(xfer_bytes > host->bounce_buf_size); +- meson_mmc_copy_buffer(host, data, xfer_bytes, true); ++ sg_copy_to_buffer(data->sg, data->sg_len, ++ host->bounce_buf, xfer_bytes); + dma_wmb(); + } + +@@ -999,7 +958,8 @@ + if (meson_mmc_bounce_buf_read(data)) { + xfer_bytes = data->blksz * data->blocks; + WARN_ON(xfer_bytes > host->bounce_buf_size); +- meson_mmc_copy_buffer(host, data, xfer_bytes, false); ++ sg_copy_from_buffer(data->sg, data->sg_len, ++ host->bounce_buf, xfer_bytes); + } + + next_cmd = meson_mmc_get_next_command(cmd); +@@ -1219,7 +1179,7 @@ + * instead of the DDR memory + */ + host->bounce_buf_size = SD_EMMC_SRAM_DATA_BUF_LEN; +- host->bounce_iomem_buf = host->regs + SD_EMMC_SRAM_DATA_BUF_OFF; ++ host->bounce_buf = host->regs + SD_EMMC_SRAM_DATA_BUF_OFF; + host->bounce_dma_addr = res->start + SD_EMMC_SRAM_DATA_BUF_OFF; + } else { + /* data bounce buffer */ diff --git a/patch/kernel/archive/meson64-5.10/arm64-dts-amlogic-add-support-for-Radxa-Zero.patch b/patch/kernel/archive/meson64-5.10/arm64-dts-amlogic-add-support-for-Radxa-Zero.patch new file mode 100644 index 0000000000..7df8043287 --- /dev/null +++ b/patch/kernel/archive/meson64-5.10/arm64-dts-amlogic-add-support-for-Radxa-Zero.patch @@ -0,0 +1,590 @@ +Radxa Zero is a small form-factor SBC with an Amlogic S905Y2 chip. + +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 6423377710ee..67dccdd9a5a4 100644 +--- a/Documentation/devicetree/bindings/arm/amlogic.yaml ++++ b/Documentation/devicetree/bindings/arm/amlogic.yaml +@@ -141,6 +141,7 @@ properties: + - enum: + - amediatech,x96-max + - amlogic,u200 ++ - radxa,zero + - seirobotics,sei510 + - const: amlogic,g12a + + +From patchwork Mon Aug 9 13:10:47 2021 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Christian Hewitt +X-Patchwork-Id: 12426441 +Return-Path: + +X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on + aws-us-west-2-korg-lkml-1.web.codeaurora.org +X-Spam-Level: +X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00, + DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, + FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, + INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, + USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 +Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) + by smtp.lore.kernel.org (Postfix) with ESMTP id F3F8FC4338F + for ; + Mon, 9 Aug 2021 13:11:55 +0000 (UTC) +Received: from bombadil.infradead.org (bombadil.infradead.org + [198.137.202.133]) + (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) + (No client certificate requested) + by mail.kernel.org (Postfix) with ESMTPS id AECC660F93 + for ; + Mon, 9 Aug 2021 13:11:55 +0000 (UTC) +DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org AECC660F93 +Authentication-Results: mail.kernel.org; + dmarc=fail (p=none dis=none) header.from=gmail.com +Authentication-Results: mail.kernel.org; + spf=none smtp.mailfrom=lists.infradead.org +DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; + d=lists.infradead.org; s=bombadil.20210309; h=Sender: + Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: + List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: + Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: + Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: + List-Owner; bh=UtJnQJv5YBh4UBWss0yz5LmywXBwOrPPIdXazFksFBI=; b=c0Myi64WNAi84D + gifpsVNc+yFpMtZF3AF4YNybnBchZeKImaQoBntIuKGadNwg/szcl+IyUsVlGPQIaq0AHFwykTNVj + VmAE12NkXHooA9hR3Ept1Kolilx577f1OGytWIvZDcr/DaKDndzoDzuOdLFZUKANmhykOCVfWvYw/ + C4gE6f9XMy0WTfyHF3y3ozYF8kqJg/pgRuhxr01LK8f9JCgyXslgcd80bOPfo8+/vgJvwq7cL07zf + EWOIDmF4J+yaZdpleTZ4B9yW1i1AbwWN9kHeCycNpmzvruJIkplBiOpLaM3oI3Z7nOZtnUVLDtMX8 + Ma30JD76VzaXo/NqlxaQ==; +Received: from localhost ([::1] helo=bombadil.infradead.org) + by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) + id 1mD54I-000hvm-Ht; Mon, 09 Aug 2021 13:11:50 +0000 +Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) + by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) + id 1mD53R-000hZa-KA; Mon, 09 Aug 2021 13:11:00 +0000 +Received: by mail-wm1-x334.google.com with SMTP id u1so570524wmm.0; + Mon, 09 Aug 2021 06:10:56 -0700 (PDT) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; + h=from:to:cc:subject:date:message-id:in-reply-to:references; + bh=CKcEzNFYuGEeaz7jwPbq616RUx2Sy10QLeq/JBh4TSE=; + b=D97Ypv0xGLj/Bip4b6nNWS14lWO35lvjm5mLG1kkDO2ak0E3Ip1mON5go9Bh9gUhLt + kvfEhMi14849nF3zfsbHHC1FRzlo02ovFEAtdOp8LeA81mAB+R1IZ3HkgYLgWm1XVJJY + 336TJFNQa5NXy5KFMvFk3MSwAzi9plvwhn2WOb8emOnchHctwRBAg5ahE6qASEzqg7HL + Xr4I/29qBzxL8P7QTacsyA5wfMmW7n5A/AIOCpZfF8Snv2becFTjOF4lEpc+adpe8vaw + y3znl10ANzXD2iC40ufGS+HMZbGLaswl+aMkNeJycYWGIqyXWLrRVfnih8+Zt/OOYiua + JN1w== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20161025; + h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to + :references; + bh=CKcEzNFYuGEeaz7jwPbq616RUx2Sy10QLeq/JBh4TSE=; + b=YvVur2vFwsRmOZ3Ye3MijE2oixMlEOwDsnvYafLSmE0Sjg1Q7tqJYMKGqJO5rs3sDq + X6XnecZASB1ABEnbWOFa0s3lyyBto2SvazLeBegEP45s5ByHf3OrCzbuBLy+YzMHCGud + odajUzJXP+gUvKekNkj1HQlZqL95jox8ztKK2gpSet2NzBF6xopwTBA7K9QxALppXuBV + AtWyt46zZl/F1l09SnFZvbaQ81ZIwkNWhy9uhly+wqSQKUSCPcQB8D1Ays3peUdQlnmi + er4kv2HFMWPylcW3nmZwdGuCnGTcNFKA1qDd5iU2/5HpcAQVwxVOvMab3wOeWgwUsrTO + RPEw== +X-Gm-Message-State: AOAM530CvdmcjAwIGFaJZG/vW2jflM9YWzcz7veucK88XnSD0p9RES8p + +R7OAAkrKD/KCsa/xN0vkgE= +X-Google-Smtp-Source: + ABdhPJzf2AKNn1UlIpvSh4/ECgVSEIAJnIkg8qC3JqMmnclHQ6hwYs9eohMk51p+MZLaEyVYfBE6Vw== +X-Received: by 2002:a7b:c041:: with SMTP id u1mr16351531wmc.95.1628514655775; + Mon, 09 Aug 2021 06:10:55 -0700 (PDT) +Received: from localhost.localdomain ([87.200.95.144]) + by smtp.gmail.com with ESMTPSA id k12sm5276094wrd.75.2021.08.09.06.10.53 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Mon, 09 Aug 2021 06:10:55 -0700 (PDT) +From: Christian Hewitt +To: Rob Herring , Mark Rutland , + Kevin Hilman , devicetree@vger.kernel.org, + linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org, + linux-kernel@vger.kernel.org +Cc: Christian Hewitt +Subject: [PATCH 2/2] arm64: dts: amlogic: add support for Radxa Zero +Date: Mon, 9 Aug 2021 13:10:47 +0000 +Message-Id: <20210809131047.28047-3-christianshewitt@gmail.com> +X-Mailer: git-send-email 2.17.1 +In-Reply-To: <20210809131047.28047-1-christianshewitt@gmail.com> +References: <20210809131047.28047-1-christianshewitt@gmail.com> +X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 +X-CRM114-CacheID: sfid-20210809_061057_714410_07D0E152 +X-CRM114-Status: GOOD ( 17.79 ) +X-BeenThere: linux-amlogic@lists.infradead.org +X-Mailman-Version: 2.1.34 +Precedence: list +List-Id: +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +MIME-Version: 1.0 +Sender: "linux-amlogic" +Errors-To: + linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org + +Radxa Zero is a small form factor SBC based on the Amlogic S905Y2 +chipset that ships in a number of RAM/eMMC configurations: + +Boards with 512MB/1GB LPDDR4 RAM have no eMMC storage and BCM43436 +wireless (2.4GHz b/g/n) while 2GB/4GB boards have 8/16/32/64/128GB +eMMC storage and BCM4345 wireless (2.4/5GHz a/b/g/n/ac). + +- Amlogic S905Y2 quad-core Cortex-A53 +- Mali G31-MP2 GPU +- HDMI 2.1 output (micro) +- 1x USB 2.0 port - Type C (OTG) +- 1x USB 3.0 port - Type C (Host) +- 1x micro SD Card slot +- 40 Pin GPIO header + +Signed-off-by: Christian Hewitt +--- + arch/arm64/boot/dts/amlogic/Makefile | 1 + + .../dts/amlogic/meson-g12a-radxa-zero.dts | 418 ++++++++++++++++++ + 2 files changed, 419 insertions(+) + create mode 100644 arch/arm64/boot/dts/amlogic/meson-g12a-radxa-zero.dts + +diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile +index faa0a79a34f5..be308361e2f1 100644 +--- a/arch/arm64/boot/dts/amlogic/Makefile ++++ b/arch/arm64/boot/dts/amlogic/Makefile +@@ -1,5 +1,6 @@ + # SPDX-License-Identifier: GPL-2.0 + dtb-$(CONFIG_ARCH_MESON) += meson-axg-s400.dtb ++dtb-$(CONFIG_ARCH_MESON) += meson-g12a-radxa-zero.dtb + dtb-$(CONFIG_ARCH_MESON) += meson-g12a-sei510.dtb + dtb-$(CONFIG_ARCH_MESON) += meson-g12a-u200.dtb + dtb-$(CONFIG_ARCH_MESON) += meson-g12a-x96-max.dtb +diff --git a/arch/arm64/boot/dts/amlogic/meson-g12a-radxa-zero.dts b/arch/arm64/boot/dts/amlogic/meson-g12a-radxa-zero.dts +new file mode 100644 +index 000000000000..d44d3881d9b9 +--- /dev/null ++++ b/arch/arm64/boot/dts/amlogic/meson-g12a-radxa-zero.dts +@@ -0,0 +1,418 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2018 BayLibre SAS. All rights reserved. ++ */ ++ ++/dts-v1/; ++ ++#include "meson-g12a.dtsi" ++#include ++#include ++ ++/ { ++ compatible = "radxa,zero", "amlogic,g12a"; ++ model = "Radxa Zero"; ++ ++ aliases { ++ serial0 = &uart_AO; ++ }; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ memory@0 { ++ device_type = "memory"; ++ reg = <0x0 0x0 0x0 0x40000000>; ++ }; ++ ++ cvbs-connector { ++ status = "disabled"; ++ compatible = "composite-video-connector"; ++ ++ port { ++ cvbs_connector_in: endpoint { ++ remote-endpoint = <&cvbs_vdac_out>; ++ }; ++ }; ++ }; ++ ++ hdmi-connector { ++ compatible = "hdmi-connector"; ++ type = "a"; ++ ++ port { ++ hdmi_connector_in: endpoint { ++ remote-endpoint = <&hdmi_tx_tmds_out>; ++ }; ++ }; ++ }; ++ ++ emmc_pwrseq: emmc-pwrseq { ++ compatible = "mmc-pwrseq-emmc"; ++ reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>; ++ }; ++ ++ sdio_pwrseq: sdio-pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>; ++ clocks = <&wifi32k>; ++ clock-names = "ext_clock"; ++ }; ++ ++ 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; ++ }; ++ ++ dc_in: regulator-dc_in { ++ compatible = "regulator-fixed"; ++ regulator-name = "DC_IN"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-always-on; ++ }; ++ ++ 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; ++ }; ++ ++ vcc_5v: regulator-vcc_5v { ++ compatible = "regulator-fixed"; ++ regulator-name = "VCC_5V"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&dc_in>; ++ ++ gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>; ++ enable-active-low; ++ }; ++ ++ 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 = <&dc_in>; ++ regulator-always-on; ++ }; ++ ++ vddcpu: regulator-vddcpu { ++ compatible = "pwm-regulator"; ++ ++ regulator-name = "VDDCPU"; ++ regulator-min-microvolt = <721000>; ++ regulator-max-microvolt = <1022000>; ++ ++ vin-supply = <&dc_in>; ++ ++ pwms = <&pwm_AO_cd 1 1250 0>; ++ pwm-dutycycle-range = <100 0>; ++ ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ sound { ++ compatible = "amlogic,axg-sound-card"; ++ model = "RADXA-ZERO"; ++ 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>; ++ }; ++ }; ++ ++ dai-link-4 { ++ sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>; ++ ++ codec { ++ sound-dai = <&hdmi_tx>; ++ }; ++ }; ++ }; ++ ++ wifi32k: wifi32k { ++ compatible = "pwm-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <32768>; ++ pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */ ++ }; ++}; ++ ++&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>; ++ operating-points-v2 = <&cpu_opp_table>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu1 { ++ cpu-supply = <&vddcpu>; ++ operating-points-v2 = <&cpu_opp_table>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu2 { ++ cpu-supply = <&vddcpu>; ++ operating-points-v2 = <&cpu_opp_table>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu3 { ++ cpu-supply = <&vddcpu>; ++ operating-points-v2 = <&cpu_opp_table>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cvbs_vdac_port { ++ cvbs_vdac_out: endpoint { ++ remote-endpoint = <&cvbs_connector_in>; ++ }; ++}; ++ ++&frddr_a { ++ status = "okay"; ++}; ++ ++&frddr_b { ++ status = "okay"; ++}; ++ ++&frddr_c { ++ status = "okay"; ++}; ++ ++&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 = "disabled"; ++ pinctrl-0 = <&remote_input_ao_pins>; ++ pinctrl-names = "default"; ++}; ++ ++&pwm_AO_cd { ++ pinctrl-0 = <&pwm_ao_d_e_pins>; ++ pinctrl-names = "default"; ++ clocks = <&xtal>; ++ clock-names = "clkin1"; ++ status = "okay"; ++}; ++ ++&pwm_ef { ++ status = "okay"; ++ pinctrl-0 = <&pwm_e_pins>; ++ pinctrl-names = "default"; ++ clocks = <&xtal>; ++ clock-names = "clkin0"; ++}; ++ ++&saradc { ++ status = "okay"; ++ vref-supply = <&vddao_1v8>; ++}; ++ ++/* SDIO */ ++&sd_emmc_a { ++ status = "okay"; ++ pinctrl-0 = <&sdio_pins>; ++ pinctrl-1 = <&sdio_clk_gate_pins>; ++ pinctrl-names = "default", "clk-gate"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ bus-width = <4>; ++ cap-sd-highspeed; ++ sd-uhs-sdr50; ++ max-frequency = <100000000>; ++ ++ non-removable; ++ disable-wp; ++ ++ /* WiFi firmware requires power to be kept while in suspend */ ++ keep-power-in-suspend; ++ ++ mmc-pwrseq = <&sdio_pwrseq>; ++ ++ vmmc-supply = <&vddao_3v3>; ++ vqmmc-supply = <&vddao_1v8>; ++ ++ brcmf: wifi@1 { ++ reg = <1>; ++ compatible = "brcm,bcm4329-fmac"; ++ interrupts = <&gpio GPIOX_7 GPIO_ACTIVE_HIGH>; ++ interrupt-names = "host-wake"; ++ }; ++}; ++ ++/* 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 = <100000000>; ++ disable-wp; ++ ++ cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>; ++ vmmc-supply = <&vddao_3v3>; ++ vqmmc-supply = <&vddao_3v3>; ++}; ++ ++/* 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>; ++}; ++ ++&tdmif_b { ++ status = "okay"; ++}; ++ ++&tdmout_b { ++ status = "okay"; ++}; ++ ++&tohdmitx { ++ status = "okay"; ++}; ++ ++&uart_A { ++ status = "okay"; ++ pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>; ++ pinctrl-names = "default"; ++ uart-has-rtscts; ++ ++ bluetooth { ++ compatible = "brcm,bcm43438-bt"; ++ shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>; ++ max-speed = <2000000>; ++ clocks = <&wifi32k>; ++ clock-names = "lpo"; ++ }; ++}; ++ ++&uart_AO { ++ status = "okay"; ++ pinctrl-0 = <&uart_ao_a_pins>; ++ pinctrl-names = "default"; ++}; ++ ++&usb { ++ status = "okay"; ++ dr_mode = "host"; ++}; diff --git a/patch/u-boot/u-boot-meson64/0001-Add-support-for-Radxa-Zero.patch b/patch/u-boot/u-boot-meson64/0001-Add-support-for-Radxa-Zero.patch new file mode 100644 index 0000000000..963ceb9887 --- /dev/null +++ b/patch/u-boot/u-boot-meson64/0001-Add-support-for-Radxa-Zero.patch @@ -0,0 +1,729 @@ +From cda2a9f4f2bc6eae3b98d84c7fe119ba730070de Mon Sep 17 00:00:00 2001 +From: Jack Ma +Date: Wed, 11 Aug 2021 16:26:25 +0800 +Subject: [PATCH] Add support for Radxa Zero + +Signed-off-by: Jack Ma +--- + arch/arm/dts/Makefile | 1 + + .../arm/dts/meson-g12a-radxa-zero-u-boot.dtsi | 7 + + arch/arm/dts/meson-g12a-radxa-zero.dts | 537 ++++++++++++++++++ + board/amlogic/radxa-zero/Makefile | 6 + + board/amlogic/radxa-zero/radxa-zero.c | 24 + + configs/radxa-zero_defconfig | 90 +++ + 6 files changed, 665 insertions(+) + create mode 100644 arch/arm/dts/meson-g12a-radxa-zero-u-boot.dtsi + create mode 100644 arch/arm/dts/meson-g12a-radxa-zero.dts + create mode 100644 board/amlogic/radxa-zero/Makefile + create mode 100644 board/amlogic/radxa-zero/radxa-zero.c + create mode 100644 configs/radxa-zero_defconfig + +diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile +index c6710826..809ecd0e 100644 +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -168,6 +168,7 @@ dtb-$(CONFIG_ARCH_MESON) += \ + meson-gxm-wetek-core2.dtb \ + meson-axg-s400.dtb \ + meson-g12a-u200.dtb \ ++ meson-g12a-radxa-zero.dtb \ + meson-g12a-sei510.dtb \ + meson-g12b-gtking.dtb \ + meson-g12b-gtking-pro.dtb \ +diff --git a/arch/arm/dts/meson-g12a-radxa-zero-u-boot.dtsi b/arch/arm/dts/meson-g12a-radxa-zero-u-boot.dtsi +new file mode 100644 +index 00000000..236f2468 +--- /dev/null ++++ b/arch/arm/dts/meson-g12a-radxa-zero-u-boot.dtsi +@@ -0,0 +1,7 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2019 BayLibre, SAS. ++ * Author: Neil Armstrong ++ */ ++ ++#include "meson-g12-common-u-boot.dtsi" +diff --git a/arch/arm/dts/meson-g12a-radxa-zero.dts b/arch/arm/dts/meson-g12a-radxa-zero.dts +new file mode 100644 +index 00000000..9345d63f +--- /dev/null ++++ b/arch/arm/dts/meson-g12a-radxa-zero.dts +@@ -0,0 +1,537 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2019 BayLibre SAS. All rights reserved. ++ */ ++ ++/dts-v1/; ++ ++#include "meson-g12a.dtsi" ++#include ++#include ++#include ++#include ++ ++/ { ++ compatible = "radxa,zero", "amlogic,g12a"; ++ model = "Radxa Zero"; ++ ++ adc_keys { ++ compatible = "adc-keys"; ++ io-channels = <&saradc 0>; ++ io-channel-names = "buttons"; ++ keyup-threshold-microvolt = <1800000>; ++ ++ button-onoff { ++ label = "On/Off"; ++ linux,code = ; ++ press-threshold-microvolt = <1700000>; ++ }; ++ }; ++ ++ aliases { ++ serial0 = &uart_AO; ++ }; ++ ++ mono_dac: audio-codec-0 { ++ compatible = "maxim,max98357a"; ++ #sound-dai-cells = <0>; ++ sound-name-prefix = "U16"; ++ sdmode-gpios = <&gpio GPIOX_8 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ dmics: audio-codec-1 { ++ #sound-dai-cells = <0>; ++ compatible = "dmic-codec"; ++ num-channels = <2>; ++ wakeup-delay-ms = <50>; ++ status = "okay"; ++ sound-name-prefix = "MIC"; ++ }; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ emmc_pwrseq: emmc-pwrseq { ++ compatible = "mmc-pwrseq-emmc"; ++ reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>; ++ }; ++ ++ hdmi-connector { ++ compatible = "hdmi-connector"; ++ type = "a"; ++ ++ port { ++ hdmi_connector_in: endpoint { ++ remote-endpoint = <&hdmi_tx_tmds_out>; ++ }; ++ }; ++ }; ++ ++ memory@0 { ++ device_type = "memory"; ++ reg = <0x0 0x0 0x0 0x40000000>; ++ }; ++ ++ ao_5v: regulator-ao_5v { ++ compatible = "regulator-fixed"; ++ regulator-name = "AO_5V"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&dc_in>; ++ regulator-always-on; ++ }; ++ ++ dc_in: regulator-dc_in { ++ compatible = "regulator-fixed"; ++ regulator-name = "DC_IN"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-always-on; ++ }; ++ ++ emmc_1v8: regulator-emmc_1v8 { ++ compatible = "regulator-fixed"; ++ regulator-name = "EMMC_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 = <&dc_in>; ++ regulator-always-on; ++ }; ++ ++ vddao_3v3_t: regultor-vddao_3v3_t { ++ compatible = "regulator-fixed"; ++ regulator-name = "VDDAO_3V3_T"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ vin-supply = <&vddao_3v3>; ++ gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>; ++ enable-active-high; ++ }; ++ ++ vddcpu: regulator-vddcpu { ++ /* ++ * SY8120B1ABC DC/DC Regulator. ++ */ ++ compatible = "pwm-regulator"; ++ ++ regulator-name = "VDDCPU"; ++ regulator-min-microvolt = <721000>; ++ regulator-max-microvolt = <1022000>; ++ ++ vin-supply = <&dc_in>; ++ ++ pwms = <&pwm_AO_cd 1 1250 0>; ++ pwm-dutycycle-range = <100 0>; ++ ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ vddio_ao1v8: regulator-vddio_ao1v8 { ++ compatible = "regulator-fixed"; ++ regulator-name = "VDDIO_AO1V8"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vddao_3v3>; ++ regulator-always-on; ++ }; ++ ++ reserved-memory { ++ /* TEE Reserved Memory */ ++ bl32_reserved: bl32@5000000 { ++ reg = <0x0 0x05300000 0x0 0x2000000>; ++ no-map; ++ }; ++ }; ++ ++ sdio_pwrseq: sdio-pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>; ++ clocks = <&wifi32k>; ++ clock-names = "ext_clock"; ++ }; ++ ++ wifi32k: wifi32k { ++ compatible = "pwm-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <32768>; ++ pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */ ++ }; ++ ++ sound { ++ compatible = "amlogic,axg-sound-card"; ++ model = "G12A-SEI510"; ++ audio-aux-devs = <&tdmout_a>, <&tdmout_b>, ++ <&tdmin_a>, <&tdmin_b>; ++ audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0", ++ "TDMOUT_A IN 1", "FRDDR_B OUT 0", ++ "TDMOUT_A IN 2", "FRDDR_C OUT 0", ++ "TDM_A Playback", "TDMOUT_A OUT", ++ "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", ++ "TODDR_A IN 4", "PDM Capture", ++ "TODDR_B IN 4", "PDM Capture", ++ "TODDR_C IN 4", "PDM Capture", ++ "TDMIN_A IN 0", "TDM_A Capture", ++ "TDMIN_A IN 3", "TDM_A Loopback", ++ "TDMIN_B IN 0", "TDM_A Capture", ++ "TDMIN_B IN 3", "TDM_A Loopback", ++ "TDMIN_A IN 1", "TDM_B Capture", ++ "TDMIN_A IN 4", "TDM_B Loopback", ++ "TDMIN_B IN 1", "TDM_B Capture", ++ "TDMIN_B IN 4", "TDM_B 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"; ++ ++ 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>; ++ }; ++ ++ /* internal speaker interface */ ++ dai-link-6 { ++ sound-dai = <&tdmif_a>; ++ dai-format = "i2s"; ++ dai-tdm-slot-tx-mask-0 = <1 1>; ++ mclk-fs = <256>; ++ ++ codec-0 { ++ sound-dai = <&mono_dac>; ++ }; ++ ++ codec-1 { ++ sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>; ++ }; ++ }; ++ ++ /* 8ch hdmi interface */ ++ dai-link-7 { ++ 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>; ++ }; ++ }; ++ ++ /* internal digital mics */ ++ dai-link-8 { ++ sound-dai = <&pdm>; ++ ++ codec { ++ sound-dai = <&dmics>; ++ }; ++ }; ++ ++ /* hdmi glue */ ++ dai-link-9 { ++ 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>; ++ operating-points-v2 = <&cpu_opp_table>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu1 { ++ cpu-supply = <&vddcpu>; ++ operating-points-v2 = <&cpu_opp_table>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu2 { ++ cpu-supply = <&vddcpu>; ++ operating-points-v2 = <&cpu_opp_table>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&cpu3 { ++ cpu-supply = <&vddcpu>; ++ operating-points-v2 = <&cpu_opp_table>; ++ clocks = <&clkc CLKID_CPU_CLK>; ++ clock-latency = <50000>; ++}; ++ ++&frddr_a { ++ status = "okay"; ++}; ++ ++&frddr_b { ++ status = "okay"; ++}; ++ ++&frddr_c { ++ status = "okay"; ++}; ++ ++&hdmi_tx { ++ status = "okay"; ++ pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>; ++ pinctrl-names = "default"; ++}; ++ ++&hdmi_tx_tmds_port { ++ hdmi_tx_tmds_out: endpoint { ++ remote-endpoint = <&hdmi_connector_in>; ++ }; ++}; ++ ++&i2c3 { ++ status = "okay"; ++ pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>; ++ pinctrl-names = "default"; ++}; ++ ++&pwm_AO_cd { ++ pinctrl-0 = <&pwm_ao_d_e_pins>; ++ pinctrl-names = "default"; ++ clocks = <&xtal>; ++ clock-names = "clkin1"; ++ status = "okay"; ++}; ++ ++&pwm_ef { ++ status = "okay"; ++ pinctrl-0 = <&pwm_e_pins>; ++ pinctrl-names = "default"; ++ clocks = <&xtal>; ++ clock-names = "clkin0"; ++}; ++ ++&pdm { ++ pinctrl-0 = <&pdm_din0_z_pins>, <&pdm_din1_z_pins>, ++ <&pdm_din2_z_pins>, <&pdm_din3_z_pins>, ++ <&pdm_dclk_z_pins>; ++ pinctrl-names = "default"; ++ status = "okay"; ++}; ++ ++&saradc { ++ status = "okay"; ++ vref-supply = <&vddio_ao1v8>; ++}; ++ ++/* SDIO */ ++&sd_emmc_a { ++ status = "okay"; ++ pinctrl-0 = <&sdio_pins>; ++ pinctrl-1 = <&sdio_clk_gate_pins>; ++ pinctrl-names = "default", "clk-gate"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ bus-width = <4>; ++ cap-sd-highspeed; ++ sd-uhs-sdr50; ++ max-frequency = <100000000>; ++ ++ non-removable; ++ disable-wp; ++ ++ /* WiFi firmware requires power to be kept while in suspend */ ++ keep-power-in-suspend; ++ ++ mmc-pwrseq = <&sdio_pwrseq>; ++ ++ vmmc-supply = <&vddao_3v3>; ++ vqmmc-supply = <&vddio_ao1v8>; ++ ++ brcmf: wifi@1 { ++ reg = <1>; ++ compatible = "brcm,bcm4329-fmac"; ++ }; ++}; ++ ++/* 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 = <&vddao_3v3>; ++ vqmmc-supply = <&vddao_3v3>; ++}; ++ ++/* 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>; ++ non-removable; ++ disable-wp; ++ ++ mmc-pwrseq = <&emmc_pwrseq>; ++ vmmc-supply = <&vddao_3v3>; ++ vqmmc-supply = <&emmc_1v8>; ++}; ++ ++&tdmif_a { ++ pinctrl-0 = <&tdm_a_dout0_pins>, <&tdm_a_fs_pins>, <&tdm_a_sclk_pins>; ++ pinctrl-names = "default"; ++ status = "okay"; ++ ++ assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD0>, ++ <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD0>; ++ assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_A_SCLK>, ++ <&clkc_audio AUD_CLKID_MST_A_LRCLK>; ++ assigned-clock-rates = <0>, <0>; ++}; ++ ++&tdmif_b { ++ status = "okay"; ++}; ++ ++&tdmin_a { ++ status = "okay"; ++}; ++ ++&tdmin_b { ++ status = "okay"; ++}; ++ ++&tdmout_a { ++ status = "okay"; ++}; ++ ++&tdmout_b { ++ status = "okay"; ++}; ++ ++&toddr_a { ++ status = "okay"; ++}; ++ ++&toddr_b { ++ status = "okay"; ++}; ++ ++&toddr_c { ++ status = "okay"; ++}; ++ ++&tohdmitx { ++ status = "okay"; ++}; ++ ++&uart_A { ++ status = "okay"; ++ pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>; ++ pinctrl-names = "default"; ++ uart-has-rtscts; ++ ++ bluetooth { ++ compatible = "brcm,bcm43438-bt"; ++ shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>; ++ max-speed = <2000000>; ++ clocks = <&wifi32k>; ++ clock-names = "lpo"; ++ vbat-supply = <&vddao_3v3>; ++ vddio-supply = <&vddio_ao1v8>; ++ }; ++}; ++ ++&uart_AO { ++ status = "okay"; ++ pinctrl-0 = <&uart_ao_a_pins>; ++ pinctrl-names = "default"; ++}; ++ ++&usb { ++ status = "okay"; ++ dr_mode = "host"; ++}; +diff --git a/board/amlogic/radxa-zero/Makefile b/board/amlogic/radxa-zero/Makefile +new file mode 100644 +index 00000000..9dd34804 +--- /dev/null ++++ b/board/amlogic/radxa-zero/Makefile +@@ -0,0 +1,6 @@ ++# SPDX-License-Identifier: GPL-2.0+ ++# ++# (C) Copyright 2021 Radxa Limited ++# Author: Jack Ma ++ ++obj-y := radxa-zero.o +diff --git a/board/amlogic/radxa-zero/radxa-zero.c b/board/amlogic/radxa-zero/radxa-zero.c +new file mode 100644 +index 00000000..a2c23d62 +--- /dev/null ++++ b/board/amlogic/radxa-zero/radxa-zero.c +@@ -0,0 +1,24 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * Copyright (C) 2021 Radxa Limited ++ * Author: Jack Ma ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++int misc_init_r(void) ++{ ++ env_set("serial#", "AMLG12A-RADXA-ZERO"); ++ ++ return 0; ++} +diff --git a/configs/radxa-zero_defconfig b/configs/radxa-zero_defconfig +new file mode 100644 +index 00000000..5c253f09 +--- /dev/null ++++ b/configs/radxa-zero_defconfig +@@ -0,0 +1,90 @@ ++CONFIG_ARM=y ++CONFIG_SYS_BOARD="radxa-zero" ++CONFIG_ARCH_MESON=y ++CONFIG_SYS_TEXT_BASE=0x01000000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SIZE=0x10000 ++CONFIG_ENV_OFFSET=0xFFFF0000 ++CONFIG_DM_GPIO=y ++CONFIG_MESON_G12A=y ++CONFIG_DEBUG_UART_BASE=0xff803000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_IDENT_STRING=" radxazero" ++# CONFIG_PSCI_RESET is not set ++CONFIG_DEFAULT_DEVICE_TREE="meson-g12a-radxa-zero" ++CONFIG_DEBUG_UART=y ++CONFIG_OF_BOARD_SETUP=y ++CONFIG_USE_PREBOOT=y ++CONFIG_PREBOOT="run load_logo" ++# CONFIG_CONSOLE_MUX is not set ++# CONFIG_DISPLAY_CPUINFO is not set ++CONFIG_MISC_INIT_R=y ++CONFIG_AVB_VERIFY=y ++# CONFIG_CMD_BDI is not set ++CONFIG_CMD_ADTIMG=y ++CONFIG_CMD_ABOOTIMG=y ++# CONFIG_CMD_IMI is not set ++CONFIG_CMD_BCB=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++# CONFIG_CMD_LOADS is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_USB_MASS_STORAGE=y ++# CONFIG_CMD_SETEXPR is not set ++CONFIG_CMD_BMP=y ++CONFIG_CMD_REGULATOR=y ++CONFIG_CMD_AVB=y ++CONFIG_OF_CONTROL=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_SYS_MMC_ENV_DEV=2 ++CONFIG_SYS_MMC_ENV_PART=1 ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_USB_FUNCTION_FASTBOOT=y ++CONFIG_FASTBOOT_BUF_ADDR=0x6000000 ++CONFIG_FASTBOOT_FLASH=y ++CONFIG_FASTBOOT_FLASH_CUSTOM=y ++CONFIG_FASTBOOT_FLASH_MMC_DEV=2 ++CONFIG_FASTBOOT_CMD_OEM_FORMAT=y ++# CONFIG_INPUT is not set ++CONFIG_DM_MMC=y ++CONFIG_MMC_MESON_GX=y ++# CONFIG_NETDEVICES is not set ++CONFIG_MESON_G12A_USB_PHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCTRL_MESON_G12A=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MESON_EE_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_RESET=y ++CONFIG_DEBUG_UART_ANNOUNCE=y ++CONFIG_DEBUG_UART_SKIP_INIT=y ++CONFIG_MESON_SERIAL=y ++CONFIG_USB=y ++CONFIG_DM_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_DWC3=y ++CONFIG_USB_DWC3=y ++# CONFIG_USB_DWC3_GADGET is not set ++CONFIG_USB_DWC3_MESON_G12A=y ++CONFIG_USB_GADGET=y ++CONFIG_USB_GADGET_VENDOR_NUM=0x18d1 ++CONFIG_USB_GADGET_PRODUCT_NUM=0xfada ++CONFIG_USB_GADGET_DWC2_OTG=y ++CONFIG_USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8=y ++CONFIG_DM_VIDEO=y ++# CONFIG_VIDEO_BPP8 is not set ++# CONFIG_VIDEO_BPP16 is not set ++CONFIG_SYS_WHITE_ON_BLACK=y ++CONFIG_VIDEO_MESON=y ++CONFIG_VIDEO_DT_SIMPLEFB=y ++CONFIG_SPLASH_SCREEN=y ++CONFIG_SPLASH_SCREEN_ALIGN=y ++CONFIG_VIDEO_BMP_RLE8=y ++CONFIG_BMP_16BPP=y ++CONFIG_BMP_24BPP=y ++CONFIG_BMP_32BPP=y ++CONFIG_LIBAVB=y ++CONFIG_OF_LIBFDT_OVERLAY=y +-- +2.25.1 +