Message ID | 85E425AED000D34C+20230802220309.163804-6-martin@biqu3d.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f41:0:b0:3e4:2afc:c1 with SMTP id v1csp763280vqx; Wed, 2 Aug 2023 15:23:15 -0700 (PDT) X-Google-Smtp-Source: APBJJlH7v5RboLHqRonKZWSbt8eEbw9Vr2f7H7alwfCqnOyMPiuQtEB5Lz3RM+lJy/RonWn45a5V X-Received: by 2002:a05:6402:5216:b0:521:cca6:449a with SMTP id s22-20020a056402521600b00521cca6449amr17905388edd.4.1691014995339; Wed, 02 Aug 2023 15:23:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691014995; cv=none; d=google.com; s=arc-20160816; b=EJq92R1Ohid/s8bZ3evh5784VuD343AMnwmCHoTB0EIozUToxBcHOx8MZzSYYG3n/1 i634foQc2v3VBHiAVwsJ+Pi+xQbEt6Vae1C6aH9rVgZ6u9b9FWv2chURVFdvIdSFSYAb uypmfpw3ffYo5c2Jyes4KVJ4N/c9OEexjibj8Kz+P1riBSWUR6FrUwewBfCPsA6/IZ3C Cyzr3Zcpm3nCF+wqMoO5fd0ws6A4D3cFThneuVA7uhC0FTHJL1gWfvS/AGdlY2bnIGyG uE9wmU2BZ1hVfHbVSoGidjAITmlNQaBoYSwnc8DlmRR3fqWGaivACbD+Wi1AvOQQM2eX D/Zg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:feedback-id:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:from :dkim-signature; bh=qLjsAZb4hmR+HCqRv0i2FQA3g3jSAZUpS8OyHaZ3/t4=; fh=vjENXlcAOtMw2k0qeWbawpxecd2N9h7wDYrgmnAGN+o=; b=oNHAeM0K6lVsu8lqYR063HelwWRh4qPVU0PIWJozwEeuaY70XZQA+xhj5QI0eN/Ha2 EpPaLjnZqJrgxgmNu0fRWJ6fptC5dOXQhZZJxMTovZUwNvED8YRugg+ZfI88oBq3YSVS 7H+5IQUJ8boG22STywF01f6bV09XsYDsO2LavIHa2nq2QCuPkQhuXbc0GqAnGE7LF95t TiKLgA+XNboyPvLGSEhgk/ABDSmI+1IuY3kFWHjGP6XTN5lLRxTPqpus0dNiZ6OO56zG t6xex2zTU0yWxdqAD6W3NNawcDKpIleGAa7zUr3XkgQo1hkP1AQIUYFEDtsP/rVSwzn4 GvjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@biqu3d.com header.s=tfld2305 header.b=oV5f2iGs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=biqu3d.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dy27-20020a05640231fb00b0051e031046a1si1386589edb.444.2023.08.02.15.22.52; Wed, 02 Aug 2023 15:23:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@biqu3d.com header.s=tfld2305 header.b=oV5f2iGs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=biqu3d.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233800AbjHBWGr (ORCPT <rfc822;cambridge8321@gmail.com> + 99 others); Wed, 2 Aug 2023 18:06:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54800 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233055AbjHBWGm (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Wed, 2 Aug 2023 18:06:42 -0400 Received: from bg4.exmail.qq.com (bg4.exmail.qq.com [43.155.65.254]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EFFDE269E for <linux-kernel@vger.kernel.org>; Wed, 2 Aug 2023 15:06:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=biqu3d.com; s=tfld2305; t=1691013977; bh=qLjsAZb4hmR+HCqRv0i2FQA3g3jSAZUpS8OyHaZ3/t4=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=oV5f2iGsSzj8nh64XjSeko7NMUnogYqzf0MJrM5Lkydv8B9E3pypRtAyxk6xRieJP CVhe32z+pRA+Gempvr1zuzgi+PBCEaaxsRPrebLE9sIBKXuXBFKbmiHQJqf2SQ6k7t c0WQrxs1ZmGW+YcRdRmUuC0Uxe6Hz1QeyFuMJFV0= X-QQ-mid: bizesmtp89t1691013894tpfj4qzc Received: from TimeMachine.lan ( [178.41.211.221]) by bizesmtp.qq.com (ESMTP) with id ; Thu, 03 Aug 2023 06:04:40 +0800 (CST) X-QQ-SSF: 01400000008000301000B00A0000000 X-QQ-FEAT: bhet8yMU7vm1KqeAnORJgX9t82gxFMk15zhpHXn3716e+E0HsEE7Q4xWGUrqL yp/EJgK//vhHFCIfNTzrDGw4crir4C4qWe5yJU+bykCzUmURrfDc+AjDfShF1fb4pr+6eCZ MBqFDEVyLUS7UWoWXcjjsX4FHejTl034X5Le06RV4WmQBysZwPuh/bsT//B4HSBQrKSZxUg BzCdvEcvTDf3zZr4YFZMnc3JEF613LG8O7fRHvPzQezFIM4KdE0DAaLBbpSaCcBT+7c5cVE y7DHOOmAZZpbB72vpIRwTFy9nHgxfV8uKTy3O5CaSotn0mrHbgX5HHUB4mgt41ZMhQe8eXg h5t8c2O3WGx9tLpkuX+Q4CPF5yAN0+ZP9zGE1ygujJcsGsFIqwyi7f38hR5gw== X-QQ-GoodBg: 2 X-BIZMAIL-ID: 4070493775033392211 From: Martin Botka <martin@biqu3d.com> Cc: Konrad Dybcio <konrad.dybcio@somainline.org>, AngeloGioacchino Del Regno <angelogioacchino.delregno@somainline.org>, Marijn Suijten <marijn.suijten@somainline.org>, Jami Kettunen <jamipkettunen@somainline.org>, Paul Bouchara <paul.bouchara@somainline.org>, Martin Botka <martin.botka@somainline.org>, Andre Przywara <andre.przywara@arm.com>, Rob Herring <robh+dt@kernel.org>, Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>, Conor Dooley <conor+dt@kernel.org>, Chen-Yu Tsai <wens@csie.org>, Jernej Skrabec <jernej.skrabec@gmail.com>, Samuel Holland <samuel@sholland.org>, Icenowy Zheng <uwu@icenowy.me>, Ludwig Kormann <ludwig.kormann@ict42.de>, Andrew Lunn <andrew@lunn.ch>, Heiko Stuebner <heiko@sntech.de>, Shawn Guo <shawnguo@kernel.org>, Bjorn Andersson <andersson@kernel.org>, Chris Morgan <macromorgan@hotmail.com>, Jagan Teki <jagan@edgeble.ai>, Maxime Ripard <mripard@kernel.org>, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v1 5/6] arm64: dts: allwinner: h616: Add BigTreeTech CB1 SoM & boards support Date: Thu, 3 Aug 2023 00:02:38 +0200 Message-ID: <85E425AED000D34C+20230802220309.163804-6-martin@biqu3d.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230802220309.163804-1-martin@biqu3d.com> References: <20230802220309.163804-1-martin@biqu3d.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:biqu3d.com:qybglogicsvrgz:qybglogicsvrgz5a-1 X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773157739370898482 X-GMAIL-MSGID: 1773157739370898482 |
Series |
[v1,1/6] dt-bindings: vendor-prefixes: Add BigTreeTech
|
|
Commit Message
Martin Botka
Aug. 2, 2023, 10:02 p.m. UTC
From: Martin Botka <martin.botka@somainline.org> CB1 is Compute Module style board that plugs into Rpi board style adapter or Manta 3D printer boards (M4P/M8P). The SoM features: - H616 SoC - 1GiB of RAM - AXP313A PMIC - RTL8189FTV WiFi Boards feature: - 4x USB via USB2 hub (usb1 on SoM). - SDcard slot for loading images. - Ethernet port wired to the internal PHY. (100M) - 2x HDMI 2.0. (Only 1 usable on CB1) - Power and Status LEDs. (Only Status LED usable on CB1) - 40 pin GPIO header Currently working: - Booting - USB - UART - MMC - Status LED - WiFi (RTL8189FS via out of tree driver) I didnt want to duplicate things so the manta DTS can also be used on BTT pi4b adapter. CB1 SoM has its own DTSI file in case other boards shows up that accept this SoM. Signed-off-by: Martin Botka <martin.botka@somainline.org> --- arch/arm64/boot/dts/allwinner/Makefile | 1 + .../sun50i-h616-bigtreetech-cb1-manta.dts | 20 +++ .../sun50i-h616-bigtreetech-cb1.dtsi | 164 ++++++++++++++++++ 3 files changed, 185 insertions(+) create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi
Comments
On Thu, 3 Aug 2023 00:02:38 +0200 Martin Botka <martin@biqu3d.com> wrote: Hi Martin, thanks for sending this! There are some whitespace errors in here, some leading tabs in the first section. "git show" should print them in red. > From: Martin Botka <martin.botka@somainline.org> > > CB1 is Compute Module style board that plugs into Rpi board style adapter or > Manta 3D printer boards (M4P/M8P). > > The SoM features: > - H616 SoC > - 1GiB of RAM > - AXP313A PMIC > - RTL8189FTV WiFi > > Boards feature: > - 4x USB via USB2 hub (usb1 on SoM). > - SDcard slot for loading images. > - Ethernet port wired to the internal PHY. (100M) > - 2x HDMI 2.0. (Only 1 usable on CB1) > - Power and Status LEDs. (Only Status LED usable on CB1) > - 40 pin GPIO header > > Currently working: > - Booting > - USB > - UART > - MMC > - Status LED > - WiFi (RTL8189FS via out of tree driver) > > I didnt want to duplicate things so the manta DTS can also be used on BTT pi4b adapter. > CB1 SoM has its own DTSI file in case other boards shows up that accept this SoM. > > Signed-off-by: Martin Botka <martin.botka@somainline.org> > --- > arch/arm64/boot/dts/allwinner/Makefile | 1 + > .../sun50i-h616-bigtreetech-cb1-manta.dts | 20 +++ > .../sun50i-h616-bigtreetech-cb1.dtsi | 164 ++++++++++++++++++ > 3 files changed, 185 insertions(+) > create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi > > diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile > index 6a96494a2e0a..7b386428510b 100644 > --- a/arch/arm64/boot/dts/allwinner/Makefile > +++ b/arch/arm64/boot/dts/allwinner/Makefile > @@ -38,5 +38,6 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64.dtb > dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64-model-b.dtb > dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6.dtb > dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6-mini.dtb > +dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-cb1-manta.dtb > dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero2.dtb > dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-x96-mate.dtb > diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > new file mode 100644 > index 000000000000..dff5b592a97a > --- /dev/null > +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > @@ -0,0 +1,20 @@ > +// SPDX-License-Identifier: (GPL-2.0+ or MIT) > +/* > + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. > + */ > + > +/dts-v1/; > + > +#include "sun50i-h616-bigtreetech-cb1.dtsi" > + > +/ { > + compatible = "bigtreetech,cb1-manta", "bigtreetech,cb1", "allwinner,sun50i-h616"; > +}; > + > +&ehci1 { > + status = "okay"; > +}; > + > +&ohci1 { > + status = "okay"; > +}; So how is the STM32 connected? Via SPI? If yes, you should activate the SPI node and specify the pinctrl. Even if this requires a patch cable to connect the SPI header coming from the CB1 to the SPI pins on the STM (does it?), it might be worth stating the pins used. I don't know for sure if we enable interfaces that are routed to fixed function header pins, but it might be worth doing so here, since this is some very obvious use case (I guess you wouldn't buy the M8P if you don't plan to use all of its goodies). And what's the USB-C connector doing? Is that an alternative power supply? Ann does it connect the port0 D-/D+ pins, so can be used for OTG? If yes, please enable the usb_otg node here. > diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi > new file mode 100644 > index 000000000000..e630114f0ce4 > --- /dev/null > +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi > @@ -0,0 +1,164 @@ > +// SPDX-License-Identifier: (GPL-2.0+ or MIT) > +/* > + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. > + */ > + > +/dts-v1/; > + > +#include "sun50i-h616.dtsi" > + > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/interrupt-controller/arm-gic.h> > +#include <dt-bindings/leds/common.h> > + > +/ { > + model = "BigTreeTech CB1"; > + compatible = "bigtreetech,cb1", "allwinner,sun50i-h616"; > + > + aliases { > + serial0 = &uart0; > + ethernet0 = &rtl8189ftv; > + }; > + > + chosen { > + stdout-path = "serial0:115200n8"; > + }; I think stdout-path belongs into the board .dts. > + > + leds { > + compatible = "gpio-leds"; > + > + led-0 { > + function = LED_FUNCTION_STATUS; > + color = <LED_COLOR_ID_GREEN>; > + gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */ > + }; > + }; > + > + reg_vcc5v: regulator-vcc5v { > + /* board wide 5V supply directly from the USB-C socket */ I guess this "regulator" is still valid, but please adjust the comment, since there is certainly no USB-C socket on the SoM. I guess it's multiple pins on the SoM connector that supply the incoming base voltage? > + compatible = "regulator-fixed"; > + regulator-name = "vcc-5v"; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + regulator-always-on; > + }; > + > + reg_usb1_vbus: regulator-usb1-vbus { So is this regulator really on the SoM? Or is it just PC16 on the SoM connector, and the actual regulator chip is on the respective carrier boards? > + compatible = "regulator-fixed"; > + regulator-name = "usb1-vbus"; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + vin-supply = <®_vcc5v>; > + enable-active-high; > + gpio = <&pio 2 16 GPIO_ACTIVE_HIGH>; /* PC16 */ > + }; > + > + 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 = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 */ > + post-power-on-delay-ms = <200>; > + }; > +}; > + > +&mmc0 { > + vmmc-supply = <®_dldo1>; > + broken-cd; Is there no card detect switch or is it not wired up, or is it really "broken"? Might be good to have a comment explaining that. And yeah, I also forgot to do this in my Orange Pi Zero3 .dts ;-) > + bus-width = <4>; > + status = "okay"; > +}; > + > +&mmc1 { > + vmmc-supply = <®_vcc33_wifi>; > + vqmmc-supply = <®_vcc_wifi_io>; > + mmc-pwrseq = <&wifi_pwrseq>; > + bus-width = <4>; > + non-removable; > + mmc-ddr-1_8v; > + status = "okay"; > + > + rtl8189ftv: sdio_wifi@1 { > + reg = <1>; > + }; > +}; > + > +&r_i2c { > + status = "okay"; > + > + axp313a: pmic@36 { > + compatible = "x-powers,axp313a"; > + reg = <0x36>; > + interrupt-controller; > + #interrupt-cells = <1>; > + > + regulators{ > + reg_dcdc1: dcdc1 { > + regulator-name = "vdd-gpu"; > + regulator-min-microvolt = <500000>; > + regulator-max-microvolt = <3400000>; So those are the ranges of the PMIC rail, but if this is really connected to VDD_GPU on the H616, you should limit it to between 0.81V and 0.99V, as described in the H616 datasheet. Otherwise this risks frying the SoC, I guess. > + regulator-always-on; So is this connected to something else as well, like VDD_SYS? Please either mention this as a comment, to justify the always-on, or name the regulator accordingly, like "vdd-gpu-sys". > + }; > + > + reg_dcdc2: dcdc2 { > + regulator-name = "vdd-cpu"; > + regulator-min-microvolt = <500000>; > + regulator-max-microvolt = <1540000>; Same limit problem here, VDD_CPU must be between 0.81V and 1.1V. > + regulator-ramp-delay = <200>; > + regulator-always-on; > + }; > + > + reg_dcdc3: dcdc3 { > + regulator-name = "vcc-dram"; > + regulator-min-microvolt = <500000>; > + regulator-max-microvolt = <1840000>; Is that DDR3 or DDR3L DRAM here? I don't think there is any runtime adjustments here, so just specify the respective voltage required, with the same value for both min and max. > + regulator-always-on; > + }; > + > + reg_aldo1: aldo1 { > + regulator-name = "vcc-1v8"; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-always-on; Please mention what this supplies that justifies always-on. > + }; > + > + reg_dldo1: dldo1 { > + regulator-name = "vcc-3v3"; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + regulator-always-on; Please mention what this supplies that justifies always-on. > + }; > + }; > + }; > +}; > + > +&uart0 { > + pinctrl-names = "default"; > + pinctrl-0 = <&uart0_ph_pins>; > + status = "okay"; > +}; This belongs into the board .dts, since the connector/UART bridge is there. Cheers, Andre > + > +&usbphy { > + usb1_vbus-supply = <®_usb1_vbus>; > + status = "okay"; > +};
On 03/08/2023 00:02, Martin Botka wrote: > From: Martin Botka <martin.botka@somainline.org> > > CB1 is Compute Module style board that plugs into Rpi board style adapter or > Manta 3D printer boards (M4P/M8P). > > The SoM features: > - H616 SoC > - 1GiB of RAM > - AXP313A PMIC > - RTL8189FTV WiFi ... > +&mmc0 { > + vmmc-supply = <®_dldo1>; > + broken-cd; > + bus-width = <4>; > + status = "okay"; > +}; > + > +&mmc1 { > + vmmc-supply = <®_vcc33_wifi>; > + vqmmc-supply = <®_vcc_wifi_io>; > + mmc-pwrseq = <&wifi_pwrseq>; > + bus-width = <4>; > + non-removable; > + mmc-ddr-1_8v; > + status = "okay"; > + > + rtl8189ftv: sdio_wifi@1 { No underxcores in node names. Generic node names, so probably "wifi". > + reg = <1>; Missing compatible? Best regards, Krzysztof
On 8/3/23 2:37 PM, Andre Przywara wrote: > On Thu, 3 Aug 2023 00:02:38 +0200 > Martin Botka <martin@biqu3d.com> wrote: > > Hi Martin, > > thanks for sending this! > There are some whitespace errors in here, some leading tabs in the first > section. "git show" should print them in red. > >> From: Martin Botka <martin.botka@somainline.org> >> >> CB1 is Compute Module style board that plugs into Rpi board style adapter or >> Manta 3D printer boards (M4P/M8P). >> >> The SoM features: >> - H616 SoC >> - 1GiB of RAM >> - AXP313A PMIC >> - RTL8189FTV WiFi >> >> Boards feature: >> - 4x USB via USB2 hub (usb1 on SoM). >> - SDcard slot for loading images. >> - Ethernet port wired to the internal PHY. (100M) >> - 2x HDMI 2.0. (Only 1 usable on CB1) >> - Power and Status LEDs. (Only Status LED usable on CB1) >> - 40 pin GPIO header >> >> Currently working: >> - Booting >> - USB >> - UART >> - MMC >> - Status LED >> - WiFi (RTL8189FS via out of tree driver) >> >> I didnt want to duplicate things so the manta DTS can also be used on BTT pi4b adapter. >> CB1 SoM has its own DTSI file in case other boards shows up that accept this SoM. >> >> Signed-off-by: Martin Botka <martin.botka@somainline.org> >> --- >> arch/arm64/boot/dts/allwinner/Makefile | 1 + >> .../sun50i-h616-bigtreetech-cb1-manta.dts | 20 +++ >> .../sun50i-h616-bigtreetech-cb1.dtsi | 164 ++++++++++++++++++ >> 3 files changed, 185 insertions(+) >> create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts >> create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi >> >> diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile >> index 6a96494a2e0a..7b386428510b 100644 >> --- a/arch/arm64/boot/dts/allwinner/Makefile >> +++ b/arch/arm64/boot/dts/allwinner/Makefile >> @@ -38,5 +38,6 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64.dtb >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64-model-b.dtb >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6.dtb >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6-mini.dtb >> +dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-cb1-manta.dtb >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero2.dtb >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-x96-mate.dtb >> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts >> new file mode 100644 >> index 000000000000..dff5b592a97a >> --- /dev/null >> +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts >> @@ -0,0 +1,20 @@ >> +// SPDX-License-Identifier: (GPL-2.0+ or MIT) >> +/* >> + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. >> + */ >> + >> +/dts-v1/; >> + >> +#include "sun50i-h616-bigtreetech-cb1.dtsi" >> + >> +/ { >> + compatible = "bigtreetech,cb1-manta", "bigtreetech,cb1", "allwinner,sun50i-h616"; >> +}; >> + >> +&ehci1 { >> + status = "okay"; >> +}; >> + >> +&ohci1 { >> + status = "okay"; >> +}; > > So how is the STM32 connected? Via SPI? If yes, you should activate the SPI > node and specify the pinctrl. > Even if this requires a patch cable to connect the SPI header coming from > the CB1 to the SPI pins on the STM (does it?), it might be worth stating > the pins used. I don't know for sure if we enable interfaces that are > routed to fixed function header pins, but it might be worth doing so here, > since this is some very obvious use case (I guess you wouldn't buy the M8P > if you don't plan to use all of its goodies). So the STM32 chip is connected directly via USB. There is USB hub on Manta boards and Pi adapter (Not on BTT Pi. That one doesnt use USB hub) that uses this USB port and STM32 connects via that. Then on manta boards there are 2 USB ports and 1 USB port with just pins exposed on XH2.54 4 pin connector. Bit weird but it is what it is :) > > And what's the USB-C connector doing? Is that an alternative power supply? > Ann does it connect the port0 D-/D+ pins, so can be used for OTG? If yes, > please enable the usb_otg node here. > It is indeed an alternative power supply. Or well primary supply in the case of Pi adapter board. It should be connected yes. Tho i never really had much luck getting it to work. Tho i will check again and if i get it to work i will enable it in V2 :) >> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi >> new file mode 100644 >> index 000000000000..e630114f0ce4 >> --- /dev/null >> +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi >> @@ -0,0 +1,164 @@ >> +// SPDX-License-Identifier: (GPL-2.0+ or MIT) >> +/* >> + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. >> + */ >> + >> +/dts-v1/; >> + >> +#include "sun50i-h616.dtsi" >> + >> +#include <dt-bindings/gpio/gpio.h> >> +#include <dt-bindings/interrupt-controller/arm-gic.h> >> +#include <dt-bindings/leds/common.h> >> + >> +/ { >> + model = "BigTreeTech CB1"; >> + compatible = "bigtreetech,cb1", "allwinner,sun50i-h616"; >> + >> + aliases { >> + serial0 = &uart0; >> + ethernet0 = &rtl8189ftv; >> + }; >> + >> + chosen { >> + stdout-path = "serial0:115200n8"; >> + }; > > I think stdout-path belongs into the board .dts. > Got it >> + >> + leds { >> + compatible = "gpio-leds"; >> + >> + led-0 { >> + function = LED_FUNCTION_STATUS; >> + color = <LED_COLOR_ID_GREEN>; >> + gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */ >> + }; >> + }; >> + >> + reg_vcc5v: regulator-vcc5v { >> + /* board wide 5V supply directly from the USB-C socket */ > > I guess this "regulator" is still valid, but please adjust the comment, > since there is certainly no USB-C socket on the SoM. I guess it's multiple > pins on the SoM connector that supply the incoming base voltage? Correct. Its just pins that get the 5V power. My fault for saying directly from USB-C since it can be from somewhere else :) > >> + compatible = "regulator-fixed"; >> + regulator-name = "vcc-5v"; >> + regulator-min-microvolt = <5000000>; >> + regulator-max-microvolt = <5000000>; >> + regulator-always-on; >> + }; >> + >> + reg_usb1_vbus: regulator-usb1-vbus { > > So is this regulator really on the SoM? Or is it just PC16 on the SoM > connector, and the actual regulator chip is on the respective carrier > boards? > This is my bad. This is completely wrong. The actual regulator is the 5V one thats turned on when 5V comes in. Its bit weird but i suppose its done that way for USB-OTG. This will be removed in next revision of this DTS :) >> + compatible = "regulator-fixed"; >> + regulator-name = "usb1-vbus"; >> + regulator-min-microvolt = <5000000>; >> + regulator-max-microvolt = <5000000>; >> + vin-supply = <®_vcc5v>; >> + enable-active-high; >> + gpio = <&pio 2 16 GPIO_ACTIVE_HIGH>; /* PC16 */ >> + }; >> + >> + 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 = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 */ >> + post-power-on-delay-ms = <200>; >> + }; >> +}; >> + >> +&mmc0 { >> + vmmc-supply = <®_dldo1>; >> + broken-cd; > > Is there no card detect switch or is it not wired up, or is it really > "broken"? Might be good to have a comment explaining that. > And yeah, I also forgot to do this in my Orange Pi Zero3 .dts ;-) > Its just straight up not connected. And since documentation specifies that this should be set when no card detection is available i set it. Will add a comment specifying that this is due to the pin not being connected. >> + bus-width = <4>; >> + status = "okay"; >> +}; >> + >> +&mmc1 { >> + vmmc-supply = <®_vcc33_wifi>; >> + vqmmc-supply = <®_vcc_wifi_io>; >> + mmc-pwrseq = <&wifi_pwrseq>; >> + bus-width = <4>; >> + non-removable; >> + mmc-ddr-1_8v; >> + status = "okay"; >> + >> + rtl8189ftv: sdio_wifi@1 { >> + reg = <1>; >> + }; >> +}; >> + >> +&r_i2c { >> + status = "okay"; >> + >> + axp313a: pmic@36 { >> + compatible = "x-powers,axp313a"; >> + reg = <0x36>; >> + interrupt-controller; >> + #interrupt-cells = <1>; >> + >> + regulators{ >> + reg_dcdc1: dcdc1 { >> + regulator-name = "vdd-gpu"; >> + regulator-min-microvolt = <500000>; >> + regulator-max-microvolt = <3400000>; > > So those are the ranges of the PMIC rail, but if this is really connected > to VDD_GPU on the H616, you should limit it to between 0.81V and 0.99V, as > described in the H616 datasheet. Otherwise this risks frying the SoC, I > guess. The range here should be correct. It is also the sys rail. Since AXP313a lacks many rails this was chosen as the sys rail as well. > >> + regulator-always-on; > > So is this connected to something else as well, like VDD_SYS? Please > either mention this as a comment, to justify the always-on, or name the > regulator accordingly, like "vdd-gpu-sys". Will rename to vdd-gpu-sys. > >> + }; >> + >> + reg_dcdc2: dcdc2 { >> + regulator-name = "vdd-cpu"; >> + regulator-min-microvolt = <500000>; >> + regulator-max-microvolt = <1540000>; > > Same limit problem here, VDD_CPU must be between 0.81V and 1.1V. That is indeed right. I will test it on the range you provided with OPP (WIP) and stress test it :) > >> + regulator-ramp-delay = <200>; >> + regulator-always-on; >> + }; >> + >> + reg_dcdc3: dcdc3 { >> + regulator-name = "vcc-dram"; >> + regulator-min-microvolt = <500000>; >> + regulator-max-microvolt = <1840000>; > > Is that DDR3 or DDR3L DRAM here? I don't think there is any runtime > adjustments here, so just specify the respective voltage required, with the > same value for both min and max. it uses Kingston D2516ECMDXGJD so DDR3. I will specify the direct voltage. > >> + regulator-always-on; >> + }; >> + >> + reg_aldo1: aldo1 { >> + regulator-name = "vcc-1v8"; >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <1800000>; >> + regulator-always-on; > > Please mention what this supplies that justifies always-on. ALDO1 1.8V gets also converted to 1.8V for DRAM. Thus needs to be on always. > >> + }; >> + >> + reg_dldo1: dldo1 { >> + regulator-name = "vcc-3v3"; >> + regulator-min-microvolt = <3300000>; >> + regulator-max-microvolt = <3300000>; >> + regulator-always-on; > > Please mention what this supplies that justifies always-on. SDcard that serves as storage for system. Will add comments for both :) > >> + }; >> + }; >> + }; >> +}; >> + >> +&uart0 { >> + pinctrl-names = "default"; >> + pinctrl-0 = <&uart0_ph_pins>; >> + status = "okay"; >> +}; > > This belongs into the board .dts, since the connector/UART bridge is > there. Actually the SoM has exposed pads to connect UART (Which is what i have done to get UART) but also the boards get the exact pins wired to GPIO. But since most users would use the GPIO UART i will specify it in carrier boards and in BTT Pi boards separately. Cheers, Martin > > Cheers, > Andre > >> + >> +&usbphy { >> + usb1_vbus-supply = <®_usb1_vbus>; >> + status = "okay"; >> +}; > >
On 8/3/23 4:28 PM, Krzysztof Kozlowski wrote: > On 03/08/2023 00:02, Martin Botka wrote: >> From: Martin Botka <martin.botka@somainline.org> >> >> CB1 is Compute Module style board that plugs into Rpi board style adapter or >> Manta 3D printer boards (M4P/M8P). >> >> The SoM features: >> - H616 SoC >> - 1GiB of RAM >> - AXP313A PMIC >> - RTL8189FTV WiFi > > ... > >> +&mmc0 { >> + vmmc-supply = <®_dldo1>; >> + broken-cd; >> + bus-width = <4>; >> + status = "okay"; >> +}; >> + >> +&mmc1 { >> + vmmc-supply = <®_vcc33_wifi>; >> + vqmmc-supply = <®_vcc_wifi_io>; >> + mmc-pwrseq = <&wifi_pwrseq>; >> + bus-width = <4>; >> + non-removable; >> + mmc-ddr-1_8v; >> + status = "okay"; >> + >> + rtl8189ftv: sdio_wifi@1 { > > No underxcores in node names. Generic node names, so probably "wifi". Got it. > >> + reg = <1>; > > Missing compatible? No it is an explicitly defined SDIO device so we can add ethernet alias for it so we can for example set the MAC address of it via u-boot and etc :) The actual driver for it is out of tree and from the current state of it looks like will be for a while. Orange Pi Zero Plus based on H5 does this exact thing as well for the same purpose with the same wifi chip :) Cheers, Martin > > > > Best regards, > Krzysztof > >
On Thu, 3 Aug 2023 17:35:55 +0200 Martin Botka <martin@biqu3d.com> wrote: Hi Martin, thanks for the reply and the explanations, very helpful. > On 8/3/23 2:37 PM, Andre Przywara wrote: > > On Thu, 3 Aug 2023 00:02:38 +0200 > > Martin Botka <martin@biqu3d.com> wrote: > > > > Hi Martin, > > > > thanks for sending this! > > There are some whitespace errors in here, some leading tabs in the first > > section. "git show" should print them in red. > > > >> From: Martin Botka <martin.botka@somainline.org> > >> > >> CB1 is Compute Module style board that plugs into Rpi board style adapter or > >> Manta 3D printer boards (M4P/M8P). > >> > >> The SoM features: > >> - H616 SoC > >> - 1GiB of RAM > >> - AXP313A PMIC > >> - RTL8189FTV WiFi > >> > >> Boards feature: > >> - 4x USB via USB2 hub (usb1 on SoM). > >> - SDcard slot for loading images. > >> - Ethernet port wired to the internal PHY. (100M) > >> - 2x HDMI 2.0. (Only 1 usable on CB1) > >> - Power and Status LEDs. (Only Status LED usable on CB1) > >> - 40 pin GPIO header > >> > >> Currently working: > >> - Booting > >> - USB > >> - UART > >> - MMC > >> - Status LED > >> - WiFi (RTL8189FS via out of tree driver) > >> > >> I didnt want to duplicate things so the manta DTS can also be used on BTT pi4b adapter. > >> CB1 SoM has its own DTSI file in case other boards shows up that accept this SoM. > >> > >> Signed-off-by: Martin Botka <martin.botka@somainline.org> > >> --- > >> arch/arm64/boot/dts/allwinner/Makefile | 1 + > >> .../sun50i-h616-bigtreetech-cb1-manta.dts | 20 +++ > >> .../sun50i-h616-bigtreetech-cb1.dtsi | 164 ++++++++++++++++++ > >> 3 files changed, 185 insertions(+) > >> create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > >> create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi > >> > >> diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile > >> index 6a96494a2e0a..7b386428510b 100644 > >> --- a/arch/arm64/boot/dts/allwinner/Makefile > >> +++ b/arch/arm64/boot/dts/allwinner/Makefile > >> @@ -38,5 +38,6 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64.dtb > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64-model-b.dtb > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6.dtb > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6-mini.dtb > >> +dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-cb1-manta.dtb > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero2.dtb > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-x96-mate.dtb > >> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > >> new file mode 100644 > >> index 000000000000..dff5b592a97a > >> --- /dev/null > >> +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > >> @@ -0,0 +1,20 @@ > >> +// SPDX-License-Identifier: (GPL-2.0+ or MIT) > >> +/* > >> + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. > >> + */ > >> + > >> +/dts-v1/; > >> + > >> +#include "sun50i-h616-bigtreetech-cb1.dtsi" > >> + > >> +/ { > >> + compatible = "bigtreetech,cb1-manta", "bigtreetech,cb1", "allwinner,sun50i-h616"; > >> +}; > >> + > >> +&ehci1 { > >> + status = "okay"; > >> +}; > >> + > >> +&ohci1 { > >> + status = "okay"; > >> +}; > > > > So how is the STM32 connected? Via SPI? If yes, you should activate the SPI > > node and specify the pinctrl. > > Even if this requires a patch cable to connect the SPI header coming from > > the CB1 to the SPI pins on the STM (does it?), it might be worth stating > > the pins used. I don't know for sure if we enable interfaces that are > > routed to fixed function header pins, but it might be worth doing so here, > > since this is some very obvious use case (I guess you wouldn't buy the M8P > > if you don't plan to use all of its goodies). > So the STM32 chip is connected directly via USB. There is USB hub on > Manta boards and Pi adapter (Not on BTT Pi. That one doesnt use USB hub) > that uses this USB port and STM32 connects via that. Then on manta > boards there are 2 USB ports and 1 USB port with just pins exposed on > XH2.54 4 pin connector. Bit weird but it is what it is :) Ah, I missed that, and was already wondering where the fourth HUB output went to. So USB is fine. Do the hub or the STM need a switched regulator? Or is the hub and the STM32 always powered on? > > And what's the USB-C connector doing? Is that an alternative power supply? > > Ann does it connect the port0 D-/D+ pins, so can be used for OTG? If yes, > > please enable the usb_otg node here. > > > It is indeed an alternative power supply. Or well primary supply in the > case of Pi adapter board. > > It should be connected yes. Tho i never really had much luck getting it > to work. Tho i will check again and if i get it to work i will enable it > in V2 :) You could test with FEL. Get https://github.com/linux-sunxi/sunxi-tools/raw/master/bin/fel-sdboot.sunxi, write that to sector 16 of an SD card, and boot from there. That should put the SoC into FEL mode, and you should be able to see the BootROM provided USB device ID on a connected host - if the data pins are connected to USB port 0. I see DP0/DM0 test pads on the SoM, maybe you can chase them down to see if they actually go to the SoM connector? But wasn't it that there is only one pair of USB pins available on a CM4 pinout? Hence the hub on the Mantra boards? > >> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi > >> new file mode 100644 > >> index 000000000000..e630114f0ce4 > >> --- /dev/null > >> +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi > >> @@ -0,0 +1,164 @@ > >> +// SPDX-License-Identifier: (GPL-2.0+ or MIT) > >> +/* > >> + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. > >> + */ > >> + > >> +/dts-v1/; > >> + > >> +#include "sun50i-h616.dtsi" > >> + > >> +#include <dt-bindings/gpio/gpio.h> > >> +#include <dt-bindings/interrupt-controller/arm-gic.h> > >> +#include <dt-bindings/leds/common.h> > >> + > >> +/ { > >> + model = "BigTreeTech CB1"; > >> + compatible = "bigtreetech,cb1", "allwinner,sun50i-h616"; > >> + > >> + aliases { > >> + serial0 = &uart0; > >> + ethernet0 = &rtl8189ftv; > >> + }; > >> + > >> + chosen { > >> + stdout-path = "serial0:115200n8"; > >> + }; > > > > I think stdout-path belongs into the board .dts. > > > > Got it > > >> + > >> + leds { > >> + compatible = "gpio-leds"; > >> + > >> + led-0 { > >> + function = LED_FUNCTION_STATUS; > >> + color = <LED_COLOR_ID_GREEN>; > >> + gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */ > >> + }; > >> + }; > >> + > >> + reg_vcc5v: regulator-vcc5v { > >> + /* board wide 5V supply directly from the USB-C socket */ > > > > I guess this "regulator" is still valid, but please adjust the comment, > > since there is certainly no USB-C socket on the SoM. I guess it's multiple > > pins on the SoM connector that supply the incoming base voltage? > Correct. Its just pins that get the 5V power. My fault for saying > directly from USB-C since it can be from somewhere else :) > > > >> + compatible = "regulator-fixed"; > >> + regulator-name = "vcc-5v"; > >> + regulator-min-microvolt = <5000000>; > >> + regulator-max-microvolt = <5000000>; > >> + regulator-always-on; > >> + }; > >> + > >> + reg_usb1_vbus: regulator-usb1-vbus { > > > > So is this regulator really on the SoM? Or is it just PC16 on the SoM > > connector, and the actual regulator chip is on the respective carrier > > boards? > > > > This is my bad. This is completely wrong. The actual regulator is the 5V > one thats turned on when 5V comes in. Its bit weird but i suppose its > done that way for USB-OTG. This will be removed in next revision of this > DTS :) Having fixed 5V supply for USB ports, coming directly from the board power supply, is actually quite common, see many Pine64 boards, for instance. In this case you don't need to specify a usb<x>_vbus-supply property in the PHY node below. > >> + compatible = "regulator-fixed"; > >> + regulator-name = "usb1-vbus"; > >> + regulator-min-microvolt = <5000000>; > >> + regulator-max-microvolt = <5000000>; > >> + vin-supply = <®_vcc5v>; > >> + enable-active-high; > >> + gpio = <&pio 2 16 GPIO_ACTIVE_HIGH>; /* PC16 */ > >> + }; > >> + > >> + 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 = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 */ > >> + post-power-on-delay-ms = <200>; > >> + }; > >> +}; > >> + > >> +&mmc0 { > >> + vmmc-supply = <®_dldo1>; > >> + broken-cd; > > > > Is there no card detect switch or is it not wired up, or is it really > > "broken"? Might be good to have a comment explaining that. > > And yeah, I also forgot to do this in my Orange Pi Zero3 .dts ;-) > > > Its just straight up not connected. And since documentation specifies > that this should be set when no card detection is available i set it. > > Will add a comment specifying that this is due to the pin not being > connected. Yes, that's correct, broken-cd is the right choice then and works fine. I was just asking because it *is* connected on the OrangePi Zero3, but didn't work for me there. > >> + bus-width = <4>; > >> + status = "okay"; > >> +}; > >> + > >> +&mmc1 { > >> + vmmc-supply = <®_vcc33_wifi>; > >> + vqmmc-supply = <®_vcc_wifi_io>; > >> + mmc-pwrseq = <&wifi_pwrseq>; > >> + bus-width = <4>; > >> + non-removable; > >> + mmc-ddr-1_8v; > >> + status = "okay"; > >> + > >> + rtl8189ftv: sdio_wifi@1 { > >> + reg = <1>; > >> + }; > >> +}; > >> + > >> +&r_i2c { > >> + status = "okay"; > >> + > >> + axp313a: pmic@36 { > >> + compatible = "x-powers,axp313a"; > >> + reg = <0x36>; > >> + interrupt-controller; > >> + #interrupt-cells = <1>; > >> + > >> + regulators{ > >> + reg_dcdc1: dcdc1 { > >> + regulator-name = "vdd-gpu"; > >> + regulator-min-microvolt = <500000>; > >> + regulator-max-microvolt = <3400000>; > > > > So those are the ranges of the PMIC rail, but if this is really connected > > to VDD_GPU on the H616, you should limit it to between 0.81V and 0.99V, as > > described in the H616 datasheet. Otherwise this risks frying the SoC, I > > guess. > > The range here should be correct. It is also the sys rail. Since AXP313a > lacks many rails this was chosen as the sys rail as well. Yes, very common indeed. I think in reality most boards will need all rails to be always on. > > > >> + regulator-always-on; > > > > So is this connected to something else as well, like VDD_SYS? Please > > either mention this as a comment, to justify the always-on, or name the > > regulator accordingly, like "vdd-gpu-sys". > Will rename to vdd-gpu-sys. > > > >> + }; > >> + > >> + reg_dcdc2: dcdc2 { > >> + regulator-name = "vdd-cpu"; > >> + regulator-min-microvolt = <500000>; > >> + regulator-max-microvolt = <1540000>; > > > > Same limit problem here, VDD_CPU must be between 0.81V and 1.1V. > That is indeed right. I will test it on the range you provided with OPP > (WIP) and stress test it :) > > > >> + regulator-ramp-delay = <200>; > >> + regulator-always-on; > >> + }; > >> + > >> + reg_dcdc3: dcdc3 { > >> + regulator-name = "vcc-dram"; > >> + regulator-min-microvolt = <500000>; > >> + regulator-max-microvolt = <1840000>; > > > > Is that DDR3 or DDR3L DRAM here? I don't think there is any runtime > > adjustments here, so just specify the respective voltage required, with the > > same value for both min and max. > it uses Kingston D2516ECMDXGJD so DDR3. I will specify the direct voltage. But this is DDR3L, so DDR3, just with a slightly lower voltage (1.35V instead of 1.5V). Please note that this is different from LPDDR3, which uses a different protocol, on top of lowering the voltage. > > > >> + regulator-always-on; > >> + }; > >> + > >> + reg_aldo1: aldo1 { > >> + regulator-name = "vcc-1v8"; > >> + regulator-min-microvolt = <1800000>; > >> + regulator-max-microvolt = <1800000>; > >> + regulator-always-on; > > > > Please mention what this supplies that justifies always-on. > ALDO1 1.8V gets also converted to 1.8V for DRAM. Thus needs to be on always. Yes, as seen with other boards, where it more prominently also supplies VCC-PLL, which is essential for any clock operation. Might be worth checking, if you have access to the complete schematic. > >> + }; > >> + > >> + reg_dldo1: dldo1 { > >> + regulator-name = "vcc-3v3"; > >> + regulator-min-microvolt = <3300000>; > >> + regulator-max-microvolt = <3300000>; > >> + regulator-always-on; > > > > Please mention what this supplies that justifies always-on. > SDcard that serves as storage for system. Will add comments for both :) SD card alone does not justify always-on, as you reference this regulator in the mmc0 node, so a kernel could make the connection. But chances are this is also connected to VCC-IO, which is also one of the mandatory supply voltages. > > > >> + }; > >> + }; > >> + }; > >> +}; > >> + > >> +&uart0 { > >> + pinctrl-names = "default"; > >> + pinctrl-0 = <&uart0_ph_pins>; > >> + status = "okay"; > >> +}; > > > > This belongs into the board .dts, since the connector/UART bridge is > > there. > Actually the SoM has exposed pads to connect UART (Which is what i have > done to get UART) but also the boards get the exact pins wired to GPIO. Those pad on the lower right corner? In this case it might justify having the UART node in the SoM .dtsi, though I don't know if (test)pads qualify for enabling peripherals. Generic GPIO pins (say pinmux'ed I2C on some GPIO headers) certainly don't. Cheers, Andre > But since most users would use the GPIO UART i will specify it in > carrier boards and in BTT Pi boards separately. > > Cheers, > Martin > > > > Cheers, > > Andre > > > >> + > >> +&usbphy { > >> + usb1_vbus-supply = <®_usb1_vbus>; > >> + status = "okay"; > >> +}; > > > > > >
On 8/3/23 6:16 PM, Andre Przywara wrote: > On Thu, 3 Aug 2023 17:35:55 +0200 > Martin Botka <martin@biqu3d.com> wrote: > > Hi Martin, > > thanks for the reply and the explanations, very helpful. > >> On 8/3/23 2:37 PM, Andre Przywara wrote: >>> On Thu, 3 Aug 2023 00:02:38 +0200 >>> Martin Botka <martin@biqu3d.com> wrote: >>> >>> Hi Martin, >>> >>> thanks for sending this! >>> There are some whitespace errors in here, some leading tabs in the first >>> section. "git show" should print them in red. >>> >>>> From: Martin Botka <martin.botka@somainline.org> >>>> >>>> CB1 is Compute Module style board that plugs into Rpi board style adapter or >>>> Manta 3D printer boards (M4P/M8P). >>>> >>>> The SoM features: >>>> - H616 SoC >>>> - 1GiB of RAM >>>> - AXP313A PMIC >>>> - RTL8189FTV WiFi >>>> >>>> Boards feature: >>>> - 4x USB via USB2 hub (usb1 on SoM). >>>> - SDcard slot for loading images. >>>> - Ethernet port wired to the internal PHY. (100M) >>>> - 2x HDMI 2.0. (Only 1 usable on CB1) >>>> - Power and Status LEDs. (Only Status LED usable on CB1) >>>> - 40 pin GPIO header >>>> >>>> Currently working: >>>> - Booting >>>> - USB >>>> - UART >>>> - MMC >>>> - Status LED >>>> - WiFi (RTL8189FS via out of tree driver) >>>> >>>> I didnt want to duplicate things so the manta DTS can also be used on BTT pi4b adapter. >>>> CB1 SoM has its own DTSI file in case other boards shows up that accept this SoM. >>>> >>>> Signed-off-by: Martin Botka <martin.botka@somainline.org> >>>> --- >>>> arch/arm64/boot/dts/allwinner/Makefile | 1 + >>>> .../sun50i-h616-bigtreetech-cb1-manta.dts | 20 +++ >>>> .../sun50i-h616-bigtreetech-cb1.dtsi | 164 ++++++++++++++++++ >>>> 3 files changed, 185 insertions(+) >>>> create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts >>>> create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi >>>> >>>> diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile >>>> index 6a96494a2e0a..7b386428510b 100644 >>>> --- a/arch/arm64/boot/dts/allwinner/Makefile >>>> +++ b/arch/arm64/boot/dts/allwinner/Makefile >>>> @@ -38,5 +38,6 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64.dtb >>>> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64-model-b.dtb >>>> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6.dtb >>>> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6-mini.dtb >>>> +dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-cb1-manta.dtb >>>> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero2.dtb >>>> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-x96-mate.dtb >>>> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts >>>> new file mode 100644 >>>> index 000000000000..dff5b592a97a >>>> --- /dev/null >>>> +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts >>>> @@ -0,0 +1,20 @@ >>>> +// SPDX-License-Identifier: (GPL-2.0+ or MIT) >>>> +/* >>>> + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. >>>> + */ >>>> + >>>> +/dts-v1/; >>>> + >>>> +#include "sun50i-h616-bigtreetech-cb1.dtsi" >>>> + >>>> +/ { >>>> + compatible = "bigtreetech,cb1-manta", "bigtreetech,cb1", "allwinner,sun50i-h616"; >>>> +}; >>>> + >>>> +&ehci1 { >>>> + status = "okay"; >>>> +}; >>>> + >>>> +&ohci1 { >>>> + status = "okay"; >>>> +}; >>> >>> So how is the STM32 connected? Via SPI? If yes, you should activate the SPI >>> node and specify the pinctrl. >>> Even if this requires a patch cable to connect the SPI header coming from >>> the CB1 to the SPI pins on the STM (does it?), it might be worth stating >>> the pins used. I don't know for sure if we enable interfaces that are >>> routed to fixed function header pins, but it might be worth doing so here, >>> since this is some very obvious use case (I guess you wouldn't buy the M8P >>> if you don't plan to use all of its goodies). >> So the STM32 chip is connected directly via USB. There is USB hub on >> Manta boards and Pi adapter (Not on BTT Pi. That one doesnt use USB hub) >> that uses this USB port and STM32 connects via that. Then on manta >> boards there are 2 USB ports and 1 USB port with just pins exposed on >> XH2.54 4 pin connector. Bit weird but it is what it is :) > > Ah, I missed that, and was already wondering where the fourth HUB output > went to. So USB is fine. Do the hub or the STM need a switched regulator? > Or is the hub and the STM32 always powered on? Always powered on :) > >>> And what's the USB-C connector doing? Is that an alternative power supply? >>> Ann does it connect the port0 D-/D+ pins, so can be used for OTG? If yes, >>> please enable the usb_otg node here. >>> >> It is indeed an alternative power supply. Or well primary supply in the >> case of Pi adapter board. >> >> It should be connected yes. Tho i never really had much luck getting it >> to work. Tho i will check again and if i get it to work i will enable it >> in V2 :) > > You could test with FEL. Get > https://github.com/linux-sunxi/sunxi-tools/raw/master/bin/fel-sdboot.sunxi, > write that to sector 16 of an SD card, and boot from there. > That should put the SoC into FEL mode, and you should be able to see the > BootROM provided USB device ID on a connected host - if the data pins are > connected to USB port 0. > I see DP0/DM0 test pads on the SoM, maybe you can chase them down to > see if they actually go to the SoM connector? But wasn't it that there is > only one pair of USB pins available on a CM4 pinout? Hence the hub on the > Mantra boards? Yea the SoM connector supplies only 1 USB and that goes to multiplexer that should be switched via a small 4 switch thingy on the board. And then one of those 2 outputs goes to USB hub. > >>>> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi >>>> new file mode 100644 >>>> index 000000000000..e630114f0ce4 >>>> --- /dev/null >>>> +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi >>>> @@ -0,0 +1,164 @@ >>>> +// SPDX-License-Identifier: (GPL-2.0+ or MIT) >>>> +/* >>>> + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. >>>> + */ >>>> + >>>> +/dts-v1/; >>>> + >>>> +#include "sun50i-h616.dtsi" >>>> + >>>> +#include <dt-bindings/gpio/gpio.h> >>>> +#include <dt-bindings/interrupt-controller/arm-gic.h> >>>> +#include <dt-bindings/leds/common.h> >>>> + >>>> +/ { >>>> + model = "BigTreeTech CB1"; >>>> + compatible = "bigtreetech,cb1", "allwinner,sun50i-h616"; >>>> + >>>> + aliases { >>>> + serial0 = &uart0; >>>> + ethernet0 = &rtl8189ftv; >>>> + }; >>>> + >>>> + chosen { >>>> + stdout-path = "serial0:115200n8"; >>>> + }; >>> >>> I think stdout-path belongs into the board .dts. >>> >> >> Got it >> >>>> + >>>> + leds { >>>> + compatible = "gpio-leds"; >>>> + >>>> + led-0 { >>>> + function = LED_FUNCTION_STATUS; >>>> + color = <LED_COLOR_ID_GREEN>; >>>> + gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */ >>>> + }; >>>> + }; >>>> + >>>> + reg_vcc5v: regulator-vcc5v { >>>> + /* board wide 5V supply directly from the USB-C socket */ >>> >>> I guess this "regulator" is still valid, but please adjust the comment, >>> since there is certainly no USB-C socket on the SoM. I guess it's multiple >>> pins on the SoM connector that supply the incoming base voltage? >> Correct. Its just pins that get the 5V power. My fault for saying >> directly from USB-C since it can be from somewhere else :) >>> >>>> + compatible = "regulator-fixed"; >>>> + regulator-name = "vcc-5v"; >>>> + regulator-min-microvolt = <5000000>; >>>> + regulator-max-microvolt = <5000000>; >>>> + regulator-always-on; >>>> + }; >>>> + >>>> + reg_usb1_vbus: regulator-usb1-vbus { >>> >>> So is this regulator really on the SoM? Or is it just PC16 on the SoM >>> connector, and the actual regulator chip is on the respective carrier >>> boards? >>> >> >> This is my bad. This is completely wrong. The actual regulator is the 5V >> one thats turned on when 5V comes in. Its bit weird but i suppose its >> done that way for USB-OTG. This will be removed in next revision of this >> DTS :) > > Having fixed 5V supply for USB ports, coming directly from the board power > supply, is actually quite common, see many Pine64 boards, for instance. > In this case you don't need to specify a usb<x>_vbus-supply property in > the PHY node below. Got it. > >>>> + compatible = "regulator-fixed"; >>>> + regulator-name = "usb1-vbus"; >>>> + regulator-min-microvolt = <5000000>; >>>> + regulator-max-microvolt = <5000000>; >>>> + vin-supply = <®_vcc5v>; >>>> + enable-active-high; >>>> + gpio = <&pio 2 16 GPIO_ACTIVE_HIGH>; /* PC16 */ >>>> + }; >>>> + >>>> + 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 = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 */ >>>> + post-power-on-delay-ms = <200>; >>>> + }; >>>> +}; >>>> + >>>> +&mmc0 { >>>> + vmmc-supply = <®_dldo1>; >>>> + broken-cd; >>> >>> Is there no card detect switch or is it not wired up, or is it really >>> "broken"? Might be good to have a comment explaining that. >>> And yeah, I also forgot to do this in my Orange Pi Zero3 .dts ;-) >>> >> Its just straight up not connected. And since documentation specifies >> that this should be set when no card detection is available i set it. >> >> Will add a comment specifying that this is due to the pin not being >> connected. > > Yes, that's correct, broken-cd is the right choice then and works fine. I > was just asking because it *is* connected on the OrangePi Zero3, but didn't > work for me there. > >>>> + bus-width = <4>; >>>> + status = "okay"; >>>> +}; >>>> + >>>> +&mmc1 { >>>> + vmmc-supply = <®_vcc33_wifi>; >>>> + vqmmc-supply = <®_vcc_wifi_io>; >>>> + mmc-pwrseq = <&wifi_pwrseq>; >>>> + bus-width = <4>; >>>> + non-removable; >>>> + mmc-ddr-1_8v; >>>> + status = "okay"; >>>> + >>>> + rtl8189ftv: sdio_wifi@1 { >>>> + reg = <1>; >>>> + }; >>>> +}; >>>> + >>>> +&r_i2c { >>>> + status = "okay"; >>>> + >>>> + axp313a: pmic@36 { >>>> + compatible = "x-powers,axp313a"; >>>> + reg = <0x36>; >>>> + interrupt-controller; >>>> + #interrupt-cells = <1>; >>>> + >>>> + regulators{ >>>> + reg_dcdc1: dcdc1 { >>>> + regulator-name = "vdd-gpu"; >>>> + regulator-min-microvolt = <500000>; >>>> + regulator-max-microvolt = <3400000>; >>> >>> So those are the ranges of the PMIC rail, but if this is really connected >>> to VDD_GPU on the H616, you should limit it to between 0.81V and 0.99V, as >>> described in the H616 datasheet. Otherwise this risks frying the SoC, I >>> guess. >> >> The range here should be correct. It is also the sys rail. Since AXP313a >> lacks many rails this was chosen as the sys rail as well. > > Yes, very common indeed. I think in reality most boards will need all > rails to be always on. > >>> >>>> + regulator-always-on; >>> >>> So is this connected to something else as well, like VDD_SYS? Please >>> either mention this as a comment, to justify the always-on, or name the >>> regulator accordingly, like "vdd-gpu-sys". >> Will rename to vdd-gpu-sys. >>> >>>> + }; >>>> + >>>> + reg_dcdc2: dcdc2 { >>>> + regulator-name = "vdd-cpu"; >>>> + regulator-min-microvolt = <500000>; >>>> + regulator-max-microvolt = <1540000>; >>> >>> Same limit problem here, VDD_CPU must be between 0.81V and 1.1V. >> That is indeed right. I will test it on the range you provided with OPP >> (WIP) and stress test it :) >>> >>>> + regulator-ramp-delay = <200>; >>>> + regulator-always-on; >>>> + }; >>>> + >>>> + reg_dcdc3: dcdc3 { >>>> + regulator-name = "vcc-dram"; >>>> + regulator-min-microvolt = <500000>; >>>> + regulator-max-microvolt = <1840000>; >>> >>> Is that DDR3 or DDR3L DRAM here? I don't think there is any runtime >>> adjustments here, so just specify the respective voltage required, with the >>> same value for both min and max. >> it uses Kingston D2516ECMDXGJD so DDR3. I will specify the direct voltage. > > But this is DDR3L, so DDR3, just with a slightly lower voltage (1.35V > instead of 1.5V). Please note that this is different from LPDDR3, which > uses a different protocol, on top of lowering the voltage. Well my bad. Was slightly in hurry when checking the very very crude datasheet kingston provides for it. Must have overlooked the mention of DDR3L. > >>> >>>> + regulator-always-on; >>>> + }; >>>> + >>>> + reg_aldo1: aldo1 { >>>> + regulator-name = "vcc-1v8"; >>>> + regulator-min-microvolt = <1800000>; >>>> + regulator-max-microvolt = <1800000>; >>>> + regulator-always-on; >>> >>> Please mention what this supplies that justifies always-on. >> ALDO1 1.8V gets also converted to 1.8V for DRAM. Thus needs to be on always. > > Yes, as seen with other boards, where it more prominently also supplies > VCC-PLL, which is essential for any clock operation. Might be worth > checking, if you have access to the complete schematic. I do :) yes it also supplies PLL. > >>>> + }; >>>> + >>>> + reg_dldo1: dldo1 { >>>> + regulator-name = "vcc-3v3"; >>>> + regulator-min-microvolt = <3300000>; >>>> + regulator-max-microvolt = <3300000>; >>>> + regulator-always-on; >>> >>> Please mention what this supplies that justifies always-on. >> SDcard that serves as storage for system. Will add comments for both :) > > SD card alone does not justify always-on, as you reference this regulator > in the mmc0 node, so a kernel could make the connection. But chances are > this is also connected to VCC-IO, which is also one of the mandatory supply > voltages. Correct. VCC-IO is one of the rails supplied from this parent rail. > >>> >>>> + }; >>>> + }; >>>> + }; >>>> +}; >>>> + >>>> +&uart0 { >>>> + pinctrl-names = "default"; >>>> + pinctrl-0 = <&uart0_ph_pins>; >>>> + status = "okay"; >>>> +}; >>> >>> This belongs into the board .dts, since the connector/UART bridge is >>> there. >> Actually the SoM has exposed pads to connect UART (Which is what i have >> done to get UART) but also the boards get the exact pins wired to GPIO. > > Those pad on the lower right corner? In this case it might justify having > the UART node in the SoM .dtsi, though I don't know if (test)pads qualify > for enabling peripherals. Generic GPIO pins (say pinmux'ed I2C on some > GPIO headers) certainly don't. Its fine. I will just enable it in carrier boards and BTT Pi DTS :) Cheers, Martin > > Cheers, > Andre > >> But since most users would use the GPIO UART i will specify it in >> carrier boards and in BTT Pi boards separately. >> >> Cheers, >> Martin >>> >>> Cheers, >>> Andre >>> >>>> + >>>> +&usbphy { >>>> + usb1_vbus-supply = <®_usb1_vbus>; >>>> + status = "okay"; >>>> +}; >>> >>> >> >> > >
Dne četrtek, 03. avgust 2023 ob 17:35:55 CEST je Martin Botka napisal(a): > On 8/3/23 2:37 PM, Andre Przywara wrote: > > On Thu, 3 Aug 2023 00:02:38 +0200 > > Martin Botka <martin@biqu3d.com> wrote: > > > > Hi Martin, > > > > thanks for sending this! > > There are some whitespace errors in here, some leading tabs in the first > > section. "git show" should print them in red. > > > >> From: Martin Botka <martin.botka@somainline.org> > >> > >> CB1 is Compute Module style board that plugs into Rpi board style adapter > >> or Manta 3D printer boards (M4P/M8P). > >> > >> The SoM features: > >> - H616 SoC > >> - 1GiB of RAM > >> - AXP313A PMIC > >> - RTL8189FTV WiFi > >> > >> Boards feature: > >> - 4x USB via USB2 hub (usb1 on SoM). > >> - SDcard slot for loading images. > >> - Ethernet port wired to the internal PHY. (100M) > >> - 2x HDMI 2.0. (Only 1 usable on CB1) > >> - Power and Status LEDs. (Only Status LED usable on CB1) > >> - 40 pin GPIO header > >> > >> Currently working: > >> - Booting > >> - USB > >> - UART > >> - MMC > >> - Status LED > >> - WiFi (RTL8189FS via out of tree driver) > >> > >> I didnt want to duplicate things so the manta DTS can also be used on BTT > >> pi4b adapter. CB1 SoM has its own DTSI file in case other boards shows > >> up that accept this SoM. > >> > >> Signed-off-by: Martin Botka <martin.botka@somainline.org> > >> --- > >> > >> arch/arm64/boot/dts/allwinner/Makefile | 1 + > >> .../sun50i-h616-bigtreetech-cb1-manta.dts | 20 +++ > >> .../sun50i-h616-bigtreetech-cb1.dtsi | 164 ++++++++++++++++++ > >> 3 files changed, 185 insertions(+) > >> create mode 100644 > >> arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > >> create mode 100644 > >> arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi>> > >> diff --git a/arch/arm64/boot/dts/allwinner/Makefile > >> b/arch/arm64/boot/dts/allwinner/Makefile index > >> 6a96494a2e0a..7b386428510b 100644 > >> --- a/arch/arm64/boot/dts/allwinner/Makefile > >> +++ b/arch/arm64/boot/dts/allwinner/Makefile > >> @@ -38,5 +38,6 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64.dtb > >> > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64-model-b.dtb > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6.dtb > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6-mini.dtb > >> > >> +dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-cb1-manta.dtb > >> > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero2.dtb > >> dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-x96-mate.dtb > >> > >> diff --git > >> a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > >> b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > >> new file mode 100644 > >> index 000000000000..dff5b592a97a > >> --- /dev/null > >> +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts > >> @@ -0,0 +1,20 @@ > >> +// SPDX-License-Identifier: (GPL-2.0+ or MIT) > >> +/* > >> + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. > >> + */ > >> + > >> +/dts-v1/; > >> + > >> +#include "sun50i-h616-bigtreetech-cb1.dtsi" > >> + > >> +/ { > >> + compatible = "bigtreetech,cb1-manta", "bigtreetech,cb1", > >> "allwinner,sun50i-h616"; +}; > >> + > >> +&ehci1 { > >> + status = "okay"; > >> +}; > >> + > >> +&ohci1 { > >> + status = "okay"; > >> +}; > > > > So how is the STM32 connected? Via SPI? If yes, you should activate the > > SPI > > node and specify the pinctrl. > > Even if this requires a patch cable to connect the SPI header coming from > > the CB1 to the SPI pins on the STM (does it?), it might be worth stating > > the pins used. I don't know for sure if we enable interfaces that are > > routed to fixed function header pins, but it might be worth doing so here, > > since this is some very obvious use case (I guess you wouldn't buy the M8P > > if you don't plan to use all of its goodies). > > So the STM32 chip is connected directly via USB. There is USB hub on > Manta boards and Pi adapter (Not on BTT Pi. That one doesnt use USB hub) > that uses this USB port and STM32 connects via that. Then on manta > boards there are 2 USB ports and 1 USB port with just pins exposed on > XH2.54 4 pin connector. Bit weird but it is what it is :) > > > And what's the USB-C connector doing? Is that an alternative power supply? > > Ann does it connect the port0 D-/D+ pins, so can be used for OTG? If yes, > > please enable the usb_otg node here. > > It is indeed an alternative power supply. Or well primary supply in the > case of Pi adapter board. > > It should be connected yes. Tho i never really had much luck getting it > to work. Tho i will check again and if i get it to work i will enable it > in V2 :) > > >> diff --git > >> a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi > >> b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi new > >> file mode 100644 > >> index 000000000000..e630114f0ce4 > >> --- /dev/null > >> +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi > >> @@ -0,0 +1,164 @@ > >> +// SPDX-License-Identifier: (GPL-2.0+ or MIT) > >> +/* > >> + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. > >> + */ > >> + > >> +/dts-v1/; > >> + > >> +#include "sun50i-h616.dtsi" > >> + > >> +#include <dt-bindings/gpio/gpio.h> > >> +#include <dt-bindings/interrupt-controller/arm-gic.h> > >> +#include <dt-bindings/leds/common.h> > >> + > >> +/ { > >> + model = "BigTreeTech CB1"; > >> + compatible = "bigtreetech,cb1", "allwinner,sun50i-h616"; > >> + > >> + aliases { > >> + serial0 = &uart0; > >> + ethernet0 = &rtl8189ftv; > >> + }; > >> + > >> + chosen { > >> + stdout-path = "serial0:115200n8"; > >> + }; > > > > I think stdout-path belongs into the board .dts. > > Got it > > >> + > >> + leds { > >> + compatible = "gpio-leds"; > >> + > >> + led-0 { > >> + function = LED_FUNCTION_STATUS; > >> + color = <LED_COLOR_ID_GREEN>; > >> + gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */ > >> + }; > >> + }; > >> + > >> + reg_vcc5v: regulator-vcc5v { > >> + /* board wide 5V supply directly from the USB-C socket */ > > > > I guess this "regulator" is still valid, but please adjust the comment, > > since there is certainly no USB-C socket on the SoM. I guess it's multiple > > pins on the SoM connector that supply the incoming base voltage? > > Correct. Its just pins that get the 5V power. My fault for saying > directly from USB-C since it can be from somewhere else :) > > >> + compatible = "regulator-fixed"; > >> + regulator-name = "vcc-5v"; > >> + regulator-min-microvolt = <5000000>; > >> + regulator-max-microvolt = <5000000>; > >> + regulator-always-on; > >> + }; > >> + > >> + reg_usb1_vbus: regulator-usb1-vbus { > > > > So is this regulator really on the SoM? Or is it just PC16 on the SoM > > connector, and the actual regulator chip is on the respective carrier > > boards? > > This is my bad. This is completely wrong. The actual regulator is the 5V > one thats turned on when 5V comes in. Its bit weird but i suppose its > done that way for USB-OTG. This will be removed in next revision of this > DTS :) > > >> + compatible = "regulator-fixed"; > >> + regulator-name = "usb1-vbus"; > >> + regulator-min-microvolt = <5000000>; > >> + regulator-max-microvolt = <5000000>; > >> + vin-supply = <®_vcc5v>; > >> + enable-active-high; > >> + gpio = <&pio 2 16 GPIO_ACTIVE_HIGH>; /* PC16 */ > >> + }; > >> + > >> + 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 = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 */ > >> + post-power-on-delay-ms = <200>; > >> + }; > >> +}; > >> + > >> +&mmc0 { > >> + vmmc-supply = <®_dldo1>; > >> + broken-cd; > > > > Is there no card detect switch or is it not wired up, or is it really > > "broken"? Might be good to have a comment explaining that. > > And yeah, I also forgot to do this in my Orange Pi Zero3 .dts ;-) > > Its just straight up not connected. And since documentation specifies > that this should be set when no card detection is available i set it. > > Will add a comment specifying that this is due to the pin not being > connected. > > >> + bus-width = <4>; > >> + status = "okay"; > >> +}; > >> + > >> +&mmc1 { > >> + vmmc-supply = <®_vcc33_wifi>; > >> + vqmmc-supply = <®_vcc_wifi_io>; > >> + mmc-pwrseq = <&wifi_pwrseq>; > >> + bus-width = <4>; > >> + non-removable; > >> + mmc-ddr-1_8v; > >> + status = "okay"; > >> + > >> + rtl8189ftv: sdio_wifi@1 { > >> + reg = <1>; > >> + }; > >> +}; > >> + > >> +&r_i2c { > >> + status = "okay"; > >> + > >> + axp313a: pmic@36 { > >> + compatible = "x-powers,axp313a"; > >> + reg = <0x36>; > >> + interrupt-controller; > >> + #interrupt-cells = <1>; > >> + > >> + regulators{ > >> + reg_dcdc1: dcdc1 { > >> + regulator-name = "vdd-gpu"; > >> + regulator-min-microvolt = <500000>; > >> + regulator-max-microvolt = <3400000>; > > > > So those are the ranges of the PMIC rail, but if this is really connected > > to VDD_GPU on the H616, you should limit it to between 0.81V and 0.99V, as > > described in the H616 datasheet. Otherwise this risks frying the SoC, I > > guess. > > The range here should be correct. It is also the sys rail. Since AXP313a > lacks many rails this was chosen as the sys rail as well. You should then expand name to "vdd-gpu-sys" or something like that, so it's obvious it's not only gpu, but sys power too. Same with other regulators. SYS voltage has pretty narow range, right? You should always select strictest min and max limits according to all datasheets or manuals, so stability issues and frying electronics is avoided. Best regards, Jernej > > >> + regulator-always-on; > > > > So is this connected to something else as well, like VDD_SYS? Please > > either mention this as a comment, to justify the always-on, or name the > > regulator accordingly, like "vdd-gpu-sys". > > Will rename to vdd-gpu-sys. > > >> + }; > >> + > >> + reg_dcdc2: dcdc2 { > >> + regulator-name = "vdd-cpu"; > >> + regulator-min-microvolt = <500000>; > >> + regulator-max-microvolt = <1540000>; > > > > Same limit problem here, VDD_CPU must be between 0.81V and 1.1V. > > That is indeed right. I will test it on the range you provided with OPP > (WIP) and stress test it :) > > >> + regulator-ramp-delay = <200>; > >> + regulator-always-on; > >> + }; > >> + > >> + reg_dcdc3: dcdc3 { > >> + regulator-name = "vcc-dram"; > >> + regulator-min-microvolt = <500000>; > >> + regulator-max-microvolt = <1840000>; > > > > Is that DDR3 or DDR3L DRAM here? I don't think there is any runtime > > adjustments here, so just specify the respective voltage required, with > > the > > same value for both min and max. > > it uses Kingston D2516ECMDXGJD so DDR3. I will specify the direct voltage. > > >> + regulator-always-on; > >> + }; > >> + > >> + reg_aldo1: aldo1 { > >> + regulator-name = "vcc-1v8"; > >> + regulator-min-microvolt = <1800000>; > >> + regulator-max-microvolt = <1800000>; > >> + regulator-always-on; > > > > Please mention what this supplies that justifies always-on. > > ALDO1 1.8V gets also converted to 1.8V for DRAM. Thus needs to be on always. > >> + }; > >> + > >> + reg_dldo1: dldo1 { > >> + regulator-name = "vcc-3v3"; > >> + regulator-min-microvolt = <3300000>; > >> + regulator-max-microvolt = <3300000>; > >> + regulator-always-on; > > > > Please mention what this supplies that justifies always-on. > > SDcard that serves as storage for system. Will add comments for both :) > > >> + }; > >> + }; > >> + }; > >> +}; > >> + > >> +&uart0 { > >> + pinctrl-names = "default"; > >> + pinctrl-0 = <&uart0_ph_pins>; > >> + status = "okay"; > >> +}; > > > > This belongs into the board .dts, since the connector/UART bridge is > > there. > > Actually the SoM has exposed pads to connect UART (Which is what i have > done to get UART) but also the boards get the exact pins wired to GPIO. > > But since most users would use the GPIO UART i will specify it in > carrier boards and in BTT Pi boards separately. > > Cheers, > Martin > > > Cheers, > > Andre > > > >> + > >> +&usbphy { > >> + usb1_vbus-supply = <®_usb1_vbus>; > >> + status = "okay"; > >> +};
diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile index 6a96494a2e0a..7b386428510b 100644 --- a/arch/arm64/boot/dts/allwinner/Makefile +++ b/arch/arm64/boot/dts/allwinner/Makefile @@ -38,5 +38,6 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64.dtb dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64-model-b.dtb dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6.dtb dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-tanix-tx6-mini.dtb +dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-cb1-manta.dtb dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero2.dtb dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-x96-mate.dtb diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts new file mode 100644 index 000000000000..dff5b592a97a --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1-manta.dts @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: (GPL-2.0+ or MIT) +/* + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. + */ + +/dts-v1/; + +#include "sun50i-h616-bigtreetech-cb1.dtsi" + +/ { + compatible = "bigtreetech,cb1-manta", "bigtreetech,cb1", "allwinner,sun50i-h616"; +}; + +&ehci1 { + status = "okay"; +}; + +&ohci1 { + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi new file mode 100644 index 000000000000..e630114f0ce4 --- /dev/null +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi @@ -0,0 +1,164 @@ +// SPDX-License-Identifier: (GPL-2.0+ or MIT) +/* + * Copyright (C) 2023 Martin Botka <martin.botka@somainline.org>. + */ + +/dts-v1/; + +#include "sun50i-h616.dtsi" + +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/interrupt-controller/arm-gic.h> +#include <dt-bindings/leds/common.h> + +/ { + model = "BigTreeTech CB1"; + compatible = "bigtreetech,cb1", "allwinner,sun50i-h616"; + + aliases { + serial0 = &uart0; + ethernet0 = &rtl8189ftv; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + leds { + compatible = "gpio-leds"; + + led-0 { + function = LED_FUNCTION_STATUS; + color = <LED_COLOR_ID_GREEN>; + gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */ + }; + }; + + reg_vcc5v: regulator-vcc5v { + /* board wide 5V supply directly from the USB-C socket */ + compatible = "regulator-fixed"; + regulator-name = "vcc-5v"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; + + reg_usb1_vbus: regulator-usb1-vbus { + compatible = "regulator-fixed"; + regulator-name = "usb1-vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + vin-supply = <®_vcc5v>; + enable-active-high; + gpio = <&pio 2 16 GPIO_ACTIVE_HIGH>; /* PC16 */ + }; + + 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 = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 */ + post-power-on-delay-ms = <200>; + }; +}; + +&mmc0 { + vmmc-supply = <®_dldo1>; + broken-cd; + bus-width = <4>; + status = "okay"; +}; + +&mmc1 { + vmmc-supply = <®_vcc33_wifi>; + vqmmc-supply = <®_vcc_wifi_io>; + mmc-pwrseq = <&wifi_pwrseq>; + bus-width = <4>; + non-removable; + mmc-ddr-1_8v; + status = "okay"; + + rtl8189ftv: sdio_wifi@1 { + reg = <1>; + }; +}; + +&r_i2c { + status = "okay"; + + axp313a: pmic@36 { + compatible = "x-powers,axp313a"; + reg = <0x36>; + interrupt-controller; + #interrupt-cells = <1>; + + regulators{ + reg_dcdc1: dcdc1 { + regulator-name = "vdd-gpu"; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <3400000>; + regulator-always-on; + }; + + reg_dcdc2: dcdc2 { + regulator-name = "vdd-cpu"; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <1540000>; + regulator-ramp-delay = <200>; + regulator-always-on; + }; + + reg_dcdc3: dcdc3 { + regulator-name = "vcc-dram"; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <1840000>; + regulator-always-on; + }; + + reg_aldo1: aldo1 { + regulator-name = "vcc-1v8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; + + reg_dldo1: dldo1 { + regulator-name = "vcc-3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + }; + }; +}; + +&uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_ph_pins>; + status = "okay"; +}; + +&usbphy { + usb1_vbus-supply = <®_usb1_vbus>; + status = "okay"; +};