From nobody Sun Feb 8 09:10:37 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 13B60EB64D8 for ; Thu, 22 Jun 2023 08:41:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230186AbjFVIlk (ORCPT ); Thu, 22 Jun 2023 04:41:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55546 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231186AbjFVIlL (ORCPT ); Thu, 22 Jun 2023 04:41:11 -0400 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D05E22707; Thu, 22 Jun 2023 01:40:50 -0700 (PDT) Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-3fa0253b9e7so3701465e9.1; Thu, 22 Jun 2023 01:40:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687423249; x=1690015249; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=x/BXWd+aXbwkUNKUI7mfSjhHzxj8tSAcMR0CS9iLOvM=; b=giYs465E4aKphj+Di8wzv6flm2H1WdXJTvgHFAVyh9aZjznwFu3PVMQJ16R8fL5m04 Z668ePE+hf+4kIJs39gQ9t7mMcVrenP8dOXRAdhb6UqFfdIBXCuSW8SbupXaYFeFj8Zr gCcyF9qC5sMgJxSUHg5Op/jrQB64KT/GIITWQ9cpSZy4IdCpLvEUWbfO56BSbSrF/ZIg pDPplM7eVWn5XaEiN+J7ZiF7uPy6BJAssUFjXuuIt8jvTu2ojG2b23mEd8NXrgECujZz 5bipQBddnunBYMgBnEotkaY0as7ajVwy9ZPqgFvvwYfam50hwPh4dlni4LIbMLrFlgsU 3DZQ== X-Gm-Message-State: AC+VfDykzhAMkJ7aVlqvfKSrTsBjGOnegrSYiqaUrbOol4Gt5wyET22Q bCtO1zEnl9n2zC8JZp4/+os= X-Google-Smtp-Source: ACHHUZ4Ca7iBZ3ZCuOXAnDKqAifQ64bKpCk3sOUgGBoiSfKcvNVDLsJWLheN8E6T+jv0GFN4aJdQfw== X-Received: by 2002:a05:600c:808a:b0:3f9:b93:ed5 with SMTP id ew10-20020a05600c808a00b003f90b930ed5mr11376889wmb.12.1687423248844; Thu, 22 Jun 2023 01:40:48 -0700 (PDT) Received: from ryzen.lan (cpc87451-finc19-2-0-cust61.4-2.cable.virginm.net. [82.11.51.62]) by smtp.gmail.com with ESMTPSA id v5-20020a05600c214500b003f7f87ba116sm15441277wml.19.2023.06.22.01.40.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jun 2023 01:40:48 -0700 (PDT) From: Lucas Tanure To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Jerome Brunet , Kevin Hilman Cc: Nick , Artem , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Lucas Tanure , Conor Dooley Subject: [PATCH v4 1/3] dt-bindings: arm: amlogic: add Amlogic A311D2 bindings Date: Thu, 22 Jun 2023 09:40:43 +0100 Message-ID: <20230622084045.519203-2-tanure@linux.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230622084045.519203-1-tanure@linux.com> References: <20230622084045.519203-1-tanure@linux.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add bindings for the Khadas Vim4 board, using A311D2 soc, a Meson T7 family chip. Signed-off-by: Lucas Tanure Acked-by: Conor Dooley --- Documentation/devicetree/bindings/arm/amlogic.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/amlogic.yaml b/Documenta= tion/devicetree/bindings/arm/amlogic.yaml index 274ee0890312..8dbd65170c50 100644 --- a/Documentation/devicetree/bindings/arm/amlogic.yaml +++ b/Documentation/devicetree/bindings/arm/amlogic.yaml @@ -211,6 +211,13 @@ properties: - amlogic,aq222 - const: amlogic,s4 =20 + - description: Boards with the Amlogic Meson t7 A311D2 SoC + items: + - enum: + - khadas,vim4 + - const: amlogic,a311d2 + - const: amlogic,t7 + additionalProperties: true =20 ... --=20 2.41.0 From nobody Sun Feb 8 09:10:37 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6F890EB64D8 for ; Thu, 22 Jun 2023 08:41:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229647AbjFVIlx (ORCPT ); Thu, 22 Jun 2023 04:41:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56698 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231202AbjFVIlO (ORCPT ); Thu, 22 Jun 2023 04:41:14 -0400 Received: from mail-lj1-f172.google.com (mail-lj1-f172.google.com [209.85.208.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11B6F1FE1; Thu, 22 Jun 2023 01:40:52 -0700 (PDT) Received: by mail-lj1-f172.google.com with SMTP id 38308e7fff4ca-2b47354c658so69201721fa.1; Thu, 22 Jun 2023 01:40:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687423250; x=1690015250; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HPGC/fa96zpj/HytqXk9DRYd8LBRyi1oOZrs0uuR4lg=; b=WFF/OFeGDxsFHoYuAcSpj2Hrt7Ie1fKo0IJtHD/wzgohYpmqSPpNa+vrf8NK1Wksed iqAfM0cQWwxHjQsJrXL2eotThvKSVH6aysg5DicZx2qG9xbKDiNvR37uiqpJmSXTk4r6 Rse/bstk63j8DOyHGZhwxsOcf75feVjv81WwEYspe6Sd67tVNyr3vq/uaKMXQPS21gf1 QEI5Uk0W48CRy19DkvDvG1uuMfmmC7clfoZmIQwHt+EQeiuTopPSscoYs8o+muqIgTkk vwp/v+jtP/ZPqglhyEDu//TGPwsVarkbz/qStCG0ckWmj/jVu5zve6DasPXwE7CxHFfT Cv2w== X-Gm-Message-State: AC+VfDy9EIyQZbYlbfG6qtbrVvrAXyulFe103lfriwnSno+cpOja4SjX wdZcm2HKecnSpDkpDD4GFNU= X-Google-Smtp-Source: ACHHUZ4CsQDAtaDUVYpXXH32nzrpu6oIZfHh3G0dqM9Yi5mNLJB+oZefiGZ46baSV19/Gg3e9Ni4sA== X-Received: by 2002:a2e:9b83:0:b0:2b5:89f0:bcc2 with SMTP id z3-20020a2e9b83000000b002b589f0bcc2mr2296652lji.19.1687423249668; Thu, 22 Jun 2023 01:40:49 -0700 (PDT) Received: from ryzen.lan (cpc87451-finc19-2-0-cust61.4-2.cable.virginm.net. [82.11.51.62]) by smtp.gmail.com with ESMTPSA id v5-20020a05600c214500b003f7f87ba116sm15441277wml.19.2023.06.22.01.40.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jun 2023 01:40:49 -0700 (PDT) From: Lucas Tanure To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Jerome Brunet , Kevin Hilman Cc: Nick , Artem , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Lucas Tanure , Conor Dooley Subject: [PATCH v4 2/3] dt-bindings: serial: amlogic,meson-uart: Add compatible string for T7 Date: Thu, 22 Jun 2023 09:40:44 +0100 Message-ID: <20230622084045.519203-3-tanure@linux.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230622084045.519203-1-tanure@linux.com> References: <20230622084045.519203-1-tanure@linux.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Amlogic T7 SoCs uses the same UART controller as S4 SoCs and G12A. There is no need for an extra compatible line in the driver, but add T7 compatible line for documentation. Co-developed-by: Conor Dooley Signed-off-by: Lucas Tanure Acked-by: Conor Dooley --- .../devicetree/bindings/serial/amlogic,meson-uart.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/serial/amlogic,meson-uart.ya= ml b/Documentation/devicetree/bindings/serial/amlogic,meson-uart.yaml index 01ec45b3b406..4ca4673169aa 100644 --- a/Documentation/devicetree/bindings/serial/amlogic,meson-uart.yaml +++ b/Documentation/devicetree/bindings/serial/amlogic,meson-uart.yaml @@ -46,6 +46,12 @@ properties: - amlogic,meson8b-uart - amlogic,meson-gx-uart - amlogic,meson-s4-uart + - description: Everything-Else power domain UART controller on G12A = compatible SoCs + items: + - enum: + - amlogic,meson-t7-uart + - const: amlogic,meson-g12a-uart + - const: amlogic,meson-ao-uart - description: Everything-Else power domain UART controller on G12A = SoCs items: - const: amlogic,meson-g12a-uart --=20 2.41.0 From nobody Sun Feb 8 09:10:37 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4010EB64DA for ; Thu, 22 Jun 2023 08:41:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229765AbjFVIls (ORCPT ); Thu, 22 Jun 2023 04:41:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231161AbjFVIlP (ORCPT ); Thu, 22 Jun 2023 04:41:15 -0400 Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D6862114; Thu, 22 Jun 2023 01:40:52 -0700 (PDT) Received: by mail-lj1-f174.google.com with SMTP id 38308e7fff4ca-2b4769a2ee5so67361151fa.3; Thu, 22 Jun 2023 01:40:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687423251; x=1690015251; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uTS7y55Q/21+nLu5HciyUul8I1VZBXcCgTun+eOjtcg=; b=XDmDXkB/MPEKJoquMmmP9QxDsCMlEeceUexjldI5uhMPrJgesulGV6KdN5jUIhtYoS M1TIvasnnK0bBLqAvb1xx8CEibP7nTPmPPs1T66J3RxEFBje2H4BPWDlcdugFO2FZIvn MeSbl8VAf9EZk6ey3PigqIswY3RvRpXvKBNNogIlFriazoAWGqs1dGiwJvdG6padia5l 44/9dbzexbwEU2TxIIBNrgnlwMXjP8AAT7swjwGCKdPrnhkXs1CuWr1jIaS59FMtCI4c upgk+WTIZxe8fcY6XR9nJuH5Gzfph4LtfyksEQLV9UEBnRbzZiOaWUCYs1ALjW78OSiw c5wQ== X-Gm-Message-State: AC+VfDxJSonUhGVlhggr1PKJ3EstFVdr9+C7iu3oGqhmX3IWogakWn9Y fRnGPHDMedEnWWwhAt3AUxY= X-Google-Smtp-Source: ACHHUZ4M9uOeW/i8n4dGFMJCGHAVnaHzKG18TdWCqPx2Psq3U5QCBE7/BY4w0cdspYpGHMYqdrsWMw== X-Received: by 2002:a2e:98cf:0:b0:2b5:1b80:264b with SMTP id s15-20020a2e98cf000000b002b51b80264bmr6056442ljj.12.1687423250661; Thu, 22 Jun 2023 01:40:50 -0700 (PDT) Received: from ryzen.lan (cpc87451-finc19-2-0-cust61.4-2.cable.virginm.net. [82.11.51.62]) by smtp.gmail.com with ESMTPSA id v5-20020a05600c214500b003f7f87ba116sm15441277wml.19.2023.06.22.01.40.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jun 2023 01:40:50 -0700 (PDT) From: Lucas Tanure To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Jerome Brunet , Kevin Hilman Cc: Nick , Artem , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Lucas Tanure Subject: [PATCH v4 3/3] arm64: dts: meson-t7-a311d2-khadas-vim4: add initial device-tree Date: Thu, 22 Jun 2023 09:40:45 +0100 Message-ID: <20230622084045.519203-4-tanure@linux.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230622084045.519203-1-tanure@linux.com> References: <20230622084045.519203-1-tanure@linux.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The Khadas VIM4 uses the Amlogic A311D2 SoC, based on the Amlogic T7 SoC family, on a board with the same form factor as the VIM3 models. - 8GB LPDDR4X 2016MHz - 32GB eMMC 5.1 storage - 32MB SPI flash - 10/100/1000 Base-T Ethernet - AP6275S Wireless (802.11 a/b/g/n/ac/ax, BT5.1) - HDMI 2.1 video - HDMI Input - 1x USB 2.0 + 1x USB 3.0 ports - 1x USB-C (power) with USB 2.0 OTG - 3x LED's (1x red, 1x blue, 1x white) - 3x buttons (power, function, reset) - M2 socket with PCIe, USB, ADC & I2C - 40pin GPIO Header - 1x micro SD card slot Signed-off-by: Lucas Tanure --- arch/arm64/boot/dts/amlogic/Makefile | 1 + .../amlogic/meson-t7-a311d2-khadas-vim4.dts | 52 ++++++ arch/arm64/boot/dts/amlogic/meson-t7.dtsi | 159 ++++++++++++++++++ 3 files changed, 212 insertions(+) create mode 100644 arch/arm64/boot/dts/amlogic/meson-t7-a311d2-khadas-vim4= .dts create mode 100644 arch/arm64/boot/dts/amlogic/meson-t7.dtsi diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/aml= ogic/Makefile index cd1c5b04890a..1c5846bd1ca0 100644 --- a/arch/arm64/boot/dts/amlogic/Makefile +++ b/arch/arm64/boot/dts/amlogic/Makefile @@ -74,3 +74,4 @@ dtb-$(CONFIG_ARCH_MESON) +=3D meson-sm1-odroid-hc4.dtb dtb-$(CONFIG_ARCH_MESON) +=3D meson-sm1-sei610.dtb dtb-$(CONFIG_ARCH_MESON) +=3D meson-sm1-x96-air-gbit.dtb dtb-$(CONFIG_ARCH_MESON) +=3D meson-sm1-x96-air.dtb +dtb-$(CONFIG_ARCH_MESON) +=3D meson-t7-a311d2-khadas-vim4.dtb diff --git a/arch/arm64/boot/dts/amlogic/meson-t7-a311d2-khadas-vim4.dts b/= arch/arm64/boot/dts/amlogic/meson-t7-a311d2-khadas-vim4.dts new file mode 100644 index 000000000000..04cc8b0dfd8c --- /dev/null +++ b/arch/arm64/boot/dts/amlogic/meson-t7-a311d2-khadas-vim4.dts @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2022 Wesion, Inc. All rights reserved. + */ + +/dts-v1/; + +#include "meson-t7.dtsi" + +/ { + model =3D "Khadas vim4"; + compatible =3D "khadas,vim4", "amlogic,a311d2", "amlogic,t7"; + + aliases { + serial0 =3D &uart_A; + }; + + memory@0 { + device_type =3D "memory"; + reg =3D <0x0 0x0 0x2 0x0>; /* 8 GB */ + }; + + reserved-memory { + #address-cells =3D <2>; + #size-cells =3D <2>; + ranges; + + /* 3 MiB reserved for ARM Trusted Firmware (BL31) */ + secmon_reserved: secmon@5000000 { + reg =3D <0x0 0x05000000 0x0 0x300000>; + no-map; + }; + + /* 32 MiB reserved for ARM Trusted Firmware (BL32) */ + secmon_reserved_bl32: secmon@5300000 { + reg =3D <0x0 0x05300000 0x0 0x2000000>; + no-map; + }; + }; + + xtal: xtal-clk { + compatible =3D "fixed-clock"; + clock-frequency =3D <24000000>; + clock-output-names =3D "xtal"; + #clock-cells =3D <0>; + }; + +}; + +&uart_A { + status =3D "okay"; +}; diff --git a/arch/arm64/boot/dts/amlogic/meson-t7.dtsi b/arch/arm64/boot/dt= s/amlogic/meson-t7.dtsi new file mode 100644 index 000000000000..5435ec0e07f8 --- /dev/null +++ b/arch/arm64/boot/dts/amlogic/meson-t7.dtsi @@ -0,0 +1,159 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2019 Amlogic, Inc. All rights reserved. + */ + +#include + +/ { + interrupt-parent =3D <&gic>; + #address-cells =3D <2>; + #size-cells =3D <2>; + + cpus { + #address-cells =3D <0x2>; + #size-cells =3D <0x0>; + + cpu-map { + cluster0 { + core0 { + cpu =3D <&cpu100>; + }; + core1 { + cpu =3D <&cpu101>; + }; + core2 { + cpu =3D <&cpu102>; + }; + core3 { + cpu =3D <&cpu103>; + }; + }; + + cluster1 { + core0 { + cpu =3D <&cpu0>; + }; + core1 { + cpu =3D <&cpu1>; + }; + core2 { + cpu =3D <&cpu2>; + }; + core3 { + cpu =3D <&cpu3>; + }; + }; + }; + + cpu100: cpu@100 { + device_type =3D "cpu"; + compatible =3D "arm,cortex-a53"; + reg =3D <0x0 0x100>; + enable-method =3D "psci"; + }; + + cpu101: cpu@101{ + device_type =3D "cpu"; + compatible =3D "arm,cortex-a53"; + reg =3D <0x0 0x101>; + enable-method =3D "psci"; + }; + + cpu102: cpu@102 { + device_type =3D "cpu"; + compatible =3D "arm,cortex-a53"; + reg =3D <0x0 0x102>; + enable-method =3D "psci"; + }; + + cpu103: cpu@103 { + device_type =3D "cpu"; + compatible =3D "arm,cortex-a53"; + reg =3D <0x0 0x103>; + enable-method =3D "psci"; + }; + + cpu0: cpu@0 { + device_type =3D "cpu"; + compatible =3D "arm,cortex-a73"; + reg =3D <0x0 0x0>; + enable-method =3D "psci"; + }; + + cpu1: cpu@1 { + device_type =3D "cpu"; + compatible =3D "arm,cortex-a73"; + reg =3D <0x0 0x1>; + enable-method =3D "psci"; + }; + + cpu2: cpu@2 { + device_type =3D "cpu"; + compatible =3D "arm,cortex-a73"; + reg =3D <0x0 0x2>; + enable-method =3D "psci"; + }; + + cpu3: cpu@3 { + device_type =3D "cpu"; + compatible =3D "arm,cortex-a73"; + reg =3D <0x0 0x3>; + enable-method =3D "psci"; + }; + }; + + timer { + compatible =3D "arm,armv8-timer"; + interrupts =3D , + , + , + ; + }; + + psci { + compatible =3D "arm,psci-1.0"; + method =3D "smc"; + }; + + sm: secure-monitor { + compatible =3D "amlogic,meson-gxbb-sm"; + }; + + soc { + compatible =3D "simple-bus"; + #address-cells =3D <2>; + #size-cells =3D <2>; + ranges; + + gic: interrupt-controller@fff01000 { + compatible =3D "arm,gic-400"; + #interrupt-cells =3D <3>; + #address-cells =3D <0>; + interrupt-controller; + reg =3D <0x0 0xfff01000 0 0x1000>, + <0x0 0xfff02000 0 0x0100>; + interrupts =3D ; + }; + + apb4: bus@fe000000 { + compatible =3D "simple-bus"; + reg =3D <0x0 0xfe000000 0x0 0x480000>; + #address-cells =3D <2>; + #size-cells =3D <2>; + ranges =3D <0x0 0x0 0x0 0xfe000000 0x0 0x480000>; + + uart_A: serial@78000 { + compatible =3D "amlogic,meson-t7-uart", + "amlogic,meson-g12a-uart", + "amlogic,meson-ao-uart"; + reg =3D <0x0 0x78000 0x0 0x18>; + interrupts =3D ; + status =3D "disabled"; + clocks =3D <&xtal>, <&xtal>, <&xtal>; + clock-names =3D "xtal", "pclk", "baud"; + }; + }; + + }; +}; --=20 2.41.0