From patchwork Mon Feb 26 10:07:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904344 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=irVFnUUa; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tjzm01vw6z23qD for ; Mon, 26 Feb 2024 23:03:28 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9328387EDD; Mon, 26 Feb 2024 13:01:31 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="irVFnUUa"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 6A09387E95; Mon, 26 Feb 2024 11:10:00 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 3C37B87D6F for ; Mon, 26 Feb 2024 11:09:55 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q8SLcF030158; Mon, 26 Feb 2024 10:09:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=T7T3I0MvqSKyFCZNjE5b52RFgQuCX3AGwr3jBCj7kAk=; b=ir VFnUUaAUmmpOEuRTrTejx3InBV4ibVhsVmLr/UiH5rVqzJ3Yegt32Jffb3aUxpTT 6GJRaU6d5WMhxzmI8nMK8v/nxHxfl51WSQMMcToYz0ibqOyxEys/oXfEjVotqoTA j/rTt8UZJX0zQX/SikG6mdDywvHt3h6huXOx5cEo/734332zrXDWYYc0JrhuJpRf 7GhmPXa/+Vst5fodyI8Ln024/GO6i0xrRDL+7zb7QKom+HN6hDBctJ9Ov0PhaDnc eqPybhhrc8XaWbDVnRQBELSMoPcOLQwe2/bLqPHGZtoVfhtkd1gdNrEvW2wWRIK1 vVmVnlC0RkK79GmHLekg== Received: from nasanppmta04.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxkrjud-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:01 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA04.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA91pE007577 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:01 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:08:53 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Caleb Connolly , FUKAUMI Naoki , Hai Pham , Ilias Apalodimas , Jonas Karlman , Kever Yang , Lukasz Majewski , Marek Vasut , "Mathieu Othacehe" , Michal Simek , "Neil Armstrong" , Patrick Delaunay , Sean Anderson , "Simon Glass" , Sumit Garg , "Svyatoslav Ryhel" , Tianling Shen , Tom Rini Subject: [PATCH 01/10] mach-snapdragon: Add support for IPQ9574 Date: Mon, 26 Feb 2024 15:37:58 +0530 Message-ID: <20240226100807.1095607-2-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: RTM0N8h9MbddqveYy0Y_9iW4v-SABfud X-Proofpoint-GUID: RTM0N8h9MbddqveYy0Y_9iW4v-SABfud X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 suspectscore=0 bulkscore=0 adultscore=0 spamscore=0 clxscore=1015 priorityscore=1501 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Varadarajan Narayanan --- arch/arm/dts/Makefile | 2 + arch/arm/dts/ipq9574-default.dts | 167 +++ arch/arm/dts/ipq9574-rdp433-mht-phy.dts | 208 +++ arch/arm/dts/ipq9574.dtsi | 771 ++++++++++ .../include/mach/sysmap-ipq9574.h | 252 ++++ arch/arm/mach-snapdragon/init_ipq9574.c | 81 + board/qualcomm/ipq9574/Kconfig | 15 + board/qualcomm/ipq9574/Makefile | 4 + board/qualcomm/ipq9574/board_init.c | 326 ++++ board/qualcomm/ipq9574/ipq9574.c | 170 +++ board/qualcomm/ipq9574/ipq9574.h | 75 + board/qualcomm/ipq9574/u-boot-x32.lds | 250 ++++ board/qualcomm/ipq9574/u-boot-x64.lds | 188 +++ drivers/clk/qcom/clock-ipq9574.c | 1320 +++++++++++++++++ drivers/pinctrl/qcom/pinctrl-ipq9574.c | 77 + include/configs/ipq9574.h | 111 ++ include/dt-bindings/clock/gcc-ipq9574.h | 156 ++ include/dt-bindings/net/qti-ipqsoc.h | 20 + include/dt-bindings/pinctrl/pinctrl-ipqsoc.h | 19 + include/dt-bindings/reset/ipq9574-reset.h | 54 + 20 files changed, 4266 insertions(+) create mode 100644 arch/arm/dts/ipq9574-default.dts create mode 100644 arch/arm/dts/ipq9574-rdp433-mht-phy.dts create mode 100644 arch/arm/dts/ipq9574.dtsi create mode 100644 arch/arm/mach-snapdragon/include/mach/sysmap-ipq9574.h create mode 100644 arch/arm/mach-snapdragon/init_ipq9574.c create mode 100644 board/qualcomm/ipq9574/Kconfig create mode 100644 board/qualcomm/ipq9574/Makefile create mode 100644 board/qualcomm/ipq9574/board_init.c create mode 100644 board/qualcomm/ipq9574/ipq9574.c create mode 100644 board/qualcomm/ipq9574/ipq9574.h create mode 100644 board/qualcomm/ipq9574/u-boot-x32.lds create mode 100644 board/qualcomm/ipq9574/u-boot-x64.lds create mode 100644 drivers/clk/qcom/clock-ipq9574.c create mode 100644 drivers/pinctrl/qcom/pinctrl-ipq9574.c create mode 100644 include/configs/ipq9574.h create mode 100644 include/dt-bindings/clock/gcc-ipq9574.h create mode 100644 include/dt-bindings/net/qti-ipqsoc.h create mode 100644 include/dt-bindings/pinctrl/pinctrl-ipqsoc.h create mode 100644 include/dt-bindings/reset/ipq9574-reset.h diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index d9725030d5..8931dfa2aa 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -1523,6 +1523,8 @@ dtb-$(CONFIG_ARCH_QEMU) += qemu-arm.dtb qemu-arm64.dtb dtb-$(CONFIG_TARGET_CORSTONE1000) += corstone1000-mps3.dtb \ corstone1000-fvp.dtb +dtb-$(CONFIG_TARGET_IPQ9574) += ipq9574-rdp433-mht-phy.dtb + include $(srctree)/scripts/Makefile.dts targets += $(dtb-y) diff --git a/arch/arm/dts/ipq9574-default.dts b/arch/arm/dts/ipq9574-default.dts new file mode 100644 index 0000000000..501c9492df --- /dev/null +++ b/arch/arm/dts/ipq9574-default.dts @@ -0,0 +1,167 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. + */ + +/dts-v1/; + +#include "ipq9574.dtsi" + +/ { + config_name = "config-default"; + + aliases { + console = &blsp1_uart2_console; + uart2 = &blsp1_uart3_additional; + sdhci = &mmc; + }; + + soc: soc { + tlmm: pinctrl@1000000 { + + sdhci_pinmux: mmc { + pinconfig; + emmc_data { + pins = "GPIO_0", "GPIO_1", "GPIO_2", + "GPIO_3", "GPIO_6", "GPIO_7", + "GPIO_8", "GPIO_9"; + function = "sdc"; + drive-strength = ; + bias-pull-up; + }; + + emmc_cmd{ + pins = "GPIO_4"; + function = "sdc"; + drive-strength = ; + bias-pull-up; + }; + + emmc_clk{ + pins = "GPIO_5"; + function = "sdc"; + drive-strength = ; + bias-disable; + }; + + emmc_rclk{ + pins = "GPIO_10"; + function = "sdc"; + drive-strength = ; + bias-pull-down; + }; + }; + + qspi_pinmux: nand { + qspi_data { + pins = "GPIO_0", "GPIO_1", "GPIO_2", + "GPIO_3"; + function = "qspi"; + drive-strength = ; + bias-disable; + }; + + qspi_cs_n { + pins = "GPIO_4"; + function = "qspi"; + drive-strength = ; + bias-disable; + }; + + qspi_clk { + pins = "GPIO_5"; + function = "qspi"; + drive-strength = ; + bias-disable; + }; + }; + + serial_pinmux: uart { + data { + pins = "GPIO_34", "GPIO_35"; + function = "blsp0_uart0"; + drive-strength = ; + bias-pull-up; + }; + }; + + serial_pinmux2: uart2 { + data { + pins = "GPIO_17", "GPIO_18"; + function = "blsp1_uart2"; + drive-strength = ; + bias-disable; + }; + }; + + blsp1_spi_pinmux: blsp1_spi_pins { + blsp0_spi_clk { + pins = "GPIO_11"; + function = "blsp0_spi"; + drive-strength = ; + bias-disable; + }; + + blsp0_spi_mosi { + pins = "GPIO_14"; + function = "blsp0_spi"; + drive-strength = ; + bias-disable; + }; + + blsp0_spi_miso { + pins = "GPIO_13"; + function = "blsp0_spi"; + drive-strength = ; + bias-disable; + }; + + blsp0_spi_cs { + pins = "GPIO_12"; + function = "blsp0_spi"; + drive-strength = ; + bias-pull-up; + }; + + }; + }; + + blsp1_uart2_console: serial@78B1000 { + pinctrl-names = "default"; + pinctrl-0 = <&serial_pinmux>; + status = "okay"; + }; + + blsp1_uart3_additional: serial@78B2000 { + pinctrl-names = "default"; + pinctrl-0 = <&serial_pinmux2>; + status = "okay"; + }; + + blsp1_spi: spi@78b5000 { + pinctrl-names = "default"; + pinctrl-0 = <&blsp1_spi_pinmux>; + cs-gpios = <&tlmm 12 0>; + force-cs; + status = "okay"; + + mx25u25635f@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + }; + }; + + nand: nand-controller@79B0000 { + pinctrl-names = "default"; + pinctrl-0 = <&qspi_pinmux>; + //status = "okay"; + status = "disabled"; + }; + + mmc: sdhci@7800000 { + pinctrl-names = "default"; + pinctrl-0 = <&sdhci_pinmux>; + status = "okay"; + }; + }; +}; diff --git a/arch/arm/dts/ipq9574-rdp433-mht-phy.dts b/arch/arm/dts/ipq9574-rdp433-mht-phy.dts new file mode 100644 index 0000000000..085b169e57 --- /dev/null +++ b/arch/arm/dts/ipq9574-rdp433-mht-phy.dts @@ -0,0 +1,208 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. + */ + +/dts-v1/; + +#include "ipq9574-default.dts" + +/ { + config_name = "config@al02-c7", "config@rdp433-mht-phy", "config-rdp433-mht-phy"; + + soc: soc { + tlmm: pinctrl@1000000 { + + mdio_pinmux: mdio { + mdc { + pins = "GPIO_38"; + function = "mdc"; + drive-strength = ; + bias-disable; + }; + + mdio { + pins = "GPIO_39"; + function = "mdio"; + drive-strength = ; + bias-pull-up; + }; + }; + + phy_rst_pinmux: phy_rst { + qti_8x8x_rst { + pins = "GPIO_60"; + drive-strength = ; + bias-pull-up; + }; + + qti_aquantia_rst { + pins = "GPIO_36"; + drive-strength = ; + bias-pull-up; + }; + }; + + blsp3_i2c_pinmux: blsp3_i2c_pins { + blsp3_scl { + pins = "GPIO_15"; + function = "blsp3_i2c_scl"; + drive-strength = ; + bias-pull-up; + }; + + blsp3_sda { + pins = "GPIO_16"; + function = "blsp3_i2c_sda"; + drive-strength = ; + bias-pull-up; + }; + }; + + pcie1_x1_pinmux: pci_pins { + pci_rst { + pins = "GPIO_26"; + drive-strength = ; + bias-pull-up; + }; + }; + + pcie2_x2_pinmux: pci_pins { + pci_rst { + pins = "GPIO_29"; + drive-strength = ; + bias-pull-up; + }; + }; + + pcie3_x2_pinmux: pci_pins { + pci_rst { + pins = "GPIO_32"; + drive-strength = ; + bias-pull-up; + }; + }; + }; + + blsp3_i2c: i2c@78B8000 { + pinctrl-names = "default"; + pinctrl-0 = <&blsp3_i2c_pinmux>; + status = "okay"; + }; + + qmp_ssphy_0: ssphy@7D000 { + status = "okay"; + }; + + qusb2_phy_0: qusb2@7B000 { + status = "okay"; + }; + + usb0: usb@8af8800 { + status = "okay"; + + dwc3@8a00000 { + phys = <&qusb2_phy_0>, <&qmp_ssphy_0>; + phy-names = "usb2-phy", "usb3-phy"; + maximum-speed = "super-speed"; + }; + }; + + mdio: mdio@90000 { + pinctrl-names = "default"; + pinctrl-0 = <&mdio_pinmux>; + status = "okay"; + + phy0: phy@1 { + phy-reset-gpio = <&tlmm 60 0>; + reg = <1>; + phy_id = ; + id = <1>; + uniphy_id = <0>; + uniphy_type = <0>; + xgmac; + }; + + phy1: phy@2 { + reg = <2>; + phy_id = ; + id = <2>; + uniphy_id = <0>; + uniphy_type = <0>; + xgmac; + }; + + phy2: phy@3 { + reg = <3>; + phy_id = ; + id = <3>; + uniphy_id = <0>; + uniphy_type = <0>; + xgmac; + }; + + phy3: phy@4 { + reg = <4>; + phy_id = ; + id = <4>; + uniphy_id = <0>; + uniphy_type = <0>; + xgmac; + }; + + phy4: phy@8 { + phy-reset-gpio = <&tlmm 36 0>; + reg = <8>; + phy_id = ; + phy-mode = "usxgmii"; + id = <5>; + uniphy_id = <1>; + uniphy_type = <1>; + xgmac; + }; + + phy5: phy@0 { + reg = <0>; + phy_id = ; + phy-mode = "usxgmii"; + id = <6>; + uniphy_id = <2>; + uniphy_type = <0>; + xgmac; + }; + }; + + ethernet: nss-switch { + pinctrl-names = "default"; + pinctrl-0 = <&phy_rst_pinmux>; + phy-handle0 = <&phy0>; + phy-handle1 = <&phy1>; + phy-handle2 = <&phy2>; + phy-handle3 = <&phy3>; + phy-handle4 = <&phy4>; + phy-handle5 = <&phy5>; + status = "okay"; + }; + + pcie1_x1: pci@10000000 { + pinctrl-names = "default"; + pinctrl-0 = <&pcie1_x1_pinmux>; + status = "okay"; + perst_gpio = <&tlmm 26 0>; + }; + + pcie2_x2: pci@20000000 { + pinctrl-names = "default"; + pinctrl-0 = <&pcie2_x2_pinmux>; + status = "okay"; + perst_gpio = <&tlmm 29 0>; + }; + + pcie3_x2: pci@18000000 { + pinctrl-names = "default"; + pinctrl-0 = <&pcie3_x2_pinmux>; + status = "okay"; + perst_gpio = <&tlmm 32 0>; + }; + }; +}; diff --git a/arch/arm/dts/ipq9574.dtsi b/arch/arm/dts/ipq9574.dtsi new file mode 100644 index 0000000000..d2d59bcc9c --- /dev/null +++ b/arch/arm/dts/ipq9574.dtsi @@ -0,0 +1,771 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. + */ + +/dts-v1/; + +#include "skeleton64.dtsi" +#include +#include +#include +#include +#include + +/ { + + model = "Qualcomm Technologies, Inc. IPQ9574"; + compatible = "qti,ipq9574"; + + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + + tz_mem: tz@4A600000 { + reg = <0x4A600000 0x400000>; + no-map; + }; + + smem_mem: smem_region@4AA00000 { + reg = <0x4AA00000 0x100000>; + no-map; + }; + }; + + smem { + compatible = "qcom,smem"; + memory-region = <&smem_mem>; + bootph-all; + }; + + psci { + compatible = "arm,psci-1.0"; + method = "smc"; + }; + + soc: soc { + #address-cells = <1>; + #size-cells = <1>; + compatible = "simple-bus"; + + tlmm: pinctrl@1000000 { + compatible = "qti,ipq9574-pinctrl"; + reg = <0x1000000 0x300000>; + gpio-controller; + gpio-count = <64>; + gpio-bank-name="soc"; + #gpio-cells = <2>; + }; + + gcc: clock-controller@1800000 { + compatible = "qti,gcc-ipq9574"; + reg = <0x1800000 0x80000>; + #address-cells = <0x1>; + #size-cells = <0x0>; + #clock-cells = <1>; + #reset-cells = <1>; + }; + + nss: clock-controller@39B00000 { + compatible = "qti,gcc-ipq5332"; + reg = <0x39B00000 0x80000>; + #address-cells = <0x1>; + #size-cells = <0x1>; + #clock-cells = <1>; + }; + + reset: gcc-reset@1800000 { + compatible = "qti,gcc-reset-ipq9574"; + reg = <0x1800000 0x80000>; + #clock-cells = <1>; + #reset-cells = <1>; + }; + + nss_reset: nss-reset@39B00000 { + compatible = "qti,gcc-reset-ipqsoc"; + reg = <0x39B00000 0x80000>; + #clock-cells = <1>; + #reset-cells = <1>; + }; + + blsp_dma: dma@7884000 { + compatible = "qti,bam-v1.7.0"; + reg = <0x07884000 0x1d000>; + clocks = <&gcc GCC_BLSP1_AHB_CLK>; + #dma-cells = <6>; + status = "okay"; + }; + + blsp1_uart2_console: serial@78B1000 { + compatible = "qcom,msm-uartdm-v1.4"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x78B1000 0x200>; + clock = <&gcc GCC_BLSP1_UART2_APPS_CLK>, + <&gcc GCC_BLSP1_AHB_CLK>; + bit-rate = <0xFF>; + status = "okay"; + }; + + blsp1_uart3_additional: serial@78B2000 { + compatible = "qcom,msm-uartdm-v1.4"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x78B2000 0x200>; + clock = <&gcc GCC_BLSP1_UART3_APPS_CLK>, + <&gcc GCC_BLSP1_AHB_CLK>; + bit-rate = <0xFF>; + status = "okay"; + }; + + blsp1_spi: spi@78b5000 { + compatible = "qcom,spi-qup-v2.2.1"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x78b5000 0x600>; + clocks = <&gcc GCC_BLSP1_QUP1_SPI_APPS_CLK>; + dma-names = "tx", "rx"; + dmas = <&blsp_dma 12 1 16 0 0xFFFF 16>, + <&blsp_dma 13 2 16 0 0xFFFF 16>; + status = "disabled"; + }; + + blsp0_i2c: i2c@78B5000 { + compatible = "qcom,i2c-qup-v2.2.1"; + reg = <0x078B5000 0x600>; + clocks = <&gcc GCC_BLSP1_AHB_CLK>, + <&gcc GCC_BLSP1_QUP0_I2C_APPS_CLK>; + clock-names = "core", "iface"; + clock-frequency = <400000>; + assigned-clocks = <&gcc GCC_BLSP1_QUP0_I2C_APPS_CLK>; + assigned-clock-rates = <50000000>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + blsp1_i2c: i2c@78B6000 { + compatible = "qcom,i2c-qup-v2.2.1"; + reg = <0x078B6000 0x600>; + clocks = <&gcc GCC_BLSP1_AHB_CLK>, + <&gcc GCC_BLSP1_QUP1_I2C_APPS_CLK>; + clock-names = "core", "iface"; + clock-frequency = <400000>; + assigned-clocks = <&gcc GCC_BLSP1_QUP1_I2C_APPS_CLK>; + assigned-clock-rates = <50000000>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + blsp2_i2c: i2c@78B7000 { + compatible = "qcom,i2c-qup-v2.2.1"; + reg = <0x078B7000 0x600>; + clocks = <&gcc GCC_BLSP1_AHB_CLK>, + <&gcc GCC_BLSP1_QUP2_I2C_APPS_CLK>; + clock-names = "core", "iface"; + clock-frequency = <400000>; + assigned-clocks = <&gcc GCC_BLSP1_QUP2_I2C_APPS_CLK>; + assigned-clock-rates = <50000000>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + blsp3_i2c: i2c@78B8000 { + compatible = "qcom,i2c-qup-v2.2.1"; + reg = <0x078B8000 0x600>; + clocks = <&gcc GCC_BLSP1_AHB_CLK>, + <&gcc GCC_BLSP1_QUP3_I2C_APPS_CLK>; + clock-names = "core", "iface"; + clock-frequency = <400000>; + assigned-clocks = <&gcc GCC_BLSP1_QUP3_I2C_APPS_CLK>; + assigned-clock-rates = <50000000>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + blsp4_i2c: i2c@78B9000 { + compatible = "qcom,i2c-qup-v2.2.1"; + reg = <0x078B9000 0x600>; + clocks = <&gcc GCC_BLSP1_AHB_CLK>, + <&gcc GCC_BLSP1_QUP4_I2C_APPS_CLK>; + clock-names = "core", "iface"; + clock-frequency = <400000>; + assigned-clocks = <&gcc GCC_BLSP1_QUP4_I2C_APPS_CLK>; + assigned-clock-rates = <50000000>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + blsp5_i2c: i2c@78BA000 { + compatible = "qcom,i2c-qup-v2.2.1"; + reg = <0x078BA000 0x600>; + clocks = <&gcc GCC_BLSP1_AHB_CLK>, + <&gcc GCC_BLSP1_QUP5_I2C_APPS_CLK>; + clock-names = "core", "iface"; + clock-frequency = <400000>; + assigned-clocks = <&gcc GCC_BLSP1_QUP5_I2C_APPS_CLK>; + assigned-clock-rates = <50000000>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + nand: nand-controller@79B0000 { + compatible = "qti,spi-nand-v2.1.1"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x79B0000 0x10000>; + assigned-clocks = <&gcc GCC_QPIC_IO_MACRO_CLK>; + assigned-clock-rates = <200000000>; + clock-names = "qpic-io-macro-clk"; + clocks = <&gcc GCC_QPIC_IO_MACRO_CLK>; + bam_reg = <0x07984000>; + status_pipe = <3>; + status_pipe_grp = <0>; + read_pipe = <1>; + read_pipe_grp = <0>; + write_pipe = <0>; + write_pipe_grp = <0>; + cmd_pipe = <2>; + cmd_pipe_grp = <1>; + serial_training; + status = "okay"; + }; + + mmc: sdhci@7800000 { + compatible = "qti,sdhci-msm-v5"; + reg = <0x7804000 0x1000 0x7805000 0x1000>; + reg-names = "hc_mem", "cmdq_mem"; + resets = <&gcc GCC_SDCC1_BCR>; + reset-names = "bcr_rst"; + clock = <&gcc GCC_SDCC1_APPS_CLK>, + <&gcc GCC_SDCC1_AHB_CLK>; + clock-frequency = <200000000>; + max-frequency = <200000000>; + sdhci-caps-mask = <0x0 0x04000000>; + sdhci-caps = <0x0 0x04000000>; + bus-width = <0x8>; + index = <0x0>; + non-removable; + mmc-ddr-1_8v; + bus_pwr_off_rst; + status = "okay"; + }; + + qmp_ssphy_0: ssphy@7D000 { + compatible = "qti,ipq9574-qmp-usb3-phy"; + reg = <0x7D000 0x1C4>, <0x7D200 0x130>, + <0x7D400 0x200>, <0x7D800 0x1F8>; + reg-names = "com_base", "tx_base", + "rx_base", "pcs_base"; + clocks = <&gcc GCC_USB0_PIPE_CLK>; + #phy-cells = <0>; + resets = <&reset GCC_USB0_PHY_BCR>, + <&reset GCC_USB3PHY_0_PHY_BCR>; + status = "disabled"; + }; + + qusb2_phy_0: qusb2@7B000 { + compatible = "qti,ipq9574-qusb2-phy"; + reg = <0x07B000 0x180>; + #phy-cells = <0>; + resets = <&reset GCC_QUSB2_0_PHY_BCR>; + status = "disabled"; + }; + + usb0: usb@8af8800 { + compatible = "qti,dwc3-ipq"; + reg = <0x8af8800 0x100>; + #address-cells = <1>; + #size-cells = <1>; + assigned-clocks = <&gcc GCC_USB0_MASTER_CLK>, + <&gcc GCC_USB0_MOCK_UTMI_CLK>, + <&gcc GCC_USB0_AUX_CLK>; + assigned-clock-rates = <200000000>, + <24000000>, + <24000000>; + clocks = <&gcc GCC_USB0_MASTER_CLK>, + <&gcc GCC_ANOC_USB_AXI_CLK>, + <&gcc GCC_SNOC_USB_CLK>, + <&gcc GCC_USB0_MOCK_UTMI_CLK>, + <&gcc GCC_USB0_SLEEP_CLK>, + <&gcc GCC_USB0_AUX_CLK>, + <&gcc GCC_USB0_PHY_CFG_AHB_CLK>; + resets = <&reset GCC_USB_BCR>; + ranges; + qti,quirk-ref-clk-per = <0x0a40c010>; + qti,quirk-ref-clk-adj = <0x0a87f0a0>; + status = "disabled"; + + dwc3@8a00000 { + compatible = "snps,dwc3"; + reg = <0x8a00000 0xf8000>; + dr_mode = "host"; + snps,dis_u2_susphy_quirk; + snps,dis_u3_susphy_quirk; + }; + }; + + mdio: mdio@90000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "qcom,ipq4019-mdio"; + reg = <0x90000 0x64>; + status = "disabled"; + }; + + eth_switch: nss-switch { + compatible = "qti,ipq-nss-switch"; + reg = <0x3ab00000 0xEF800 0x3A000000 0x1000000 + 0x7A00000 0x10000>; + reg-names = "edma_hw", "ppe_base", "uniphy_base"; + assigned-clocks = <&gcc GCC_NSSNOC_MEMNOC_BFDCD_CLK>, + <&gcc GCC_QDSS_AT_CLK>, + <&nss NSS_CC_CFG_CLK>, + <&nss NSS_CC_PPE_CLK>, + <&gcc GCC_UNIPHY_SYS_CLK>, + <&gcc GCC_PCNOC_BFDCD_CLK>, + <&gcc GCC_SYSTEM_NOC_BFDCD_CLK>; + assigned-clock-rates = <533000000>, <239000000>, + <100000000>,<353000000>, + <24000000>, <100000000>, + <343000000>; + clocks = <&gcc GCC_MEM_NOC_NSSNOC_CLK>, + <&gcc GCC_NSSCFG_CLK>, + <&gcc GCC_NSSNOC_ATB_CLK>, + <&gcc GCC_NSSNOC_MEM_NOC_1_CLK>, + <&gcc GCC_NSSNOC_MEMNOC_CLK>, + <&gcc GCC_NSSNOC_QOSGEN_REF_CLK>, + <&gcc GCC_NSSNOC_TIMEOUT_REF_CLK>, + <&nss GCC_CMN_12GPLL_AHB_CLK>, + <&nss GCC_CMN_12GPLL_SYS_CLK>, + <&gcc GCC_UNIPHY0_SYS_CLK>, + <&gcc GCC_UNIPHY0_AHB_CLK>, + <&gcc GCC_UNIPHY1_SYS_CLK>, + <&gcc GCC_UNIPHY1_AHB_CLK>, + <&gcc GCC_UNIPHY2_SYS_CLK>, + <&gcc GCC_UNIPHY2_AHB_CLK>, + <&gcc GCC_MDIO_AHB_CLK>, + <&gcc GCC_NSSNOC_SNOC_CLK>, + <&gcc GCC_NSSNOC_SNOC_1_CLK>, + <&gcc GCC_MEM_NOC_SNOC_AXI_CLK>, + <&nss NSS_CC_NSS_CSR_CLK>, + <&nss NSS_CC_NSSNOC_NSS_CSR_CLK>, + <&nss NSS_CC_PORT1_MAC_CLK>, + <&nss NSS_CC_PORT2_MAC_CLK>, + <&nss NSS_CC_PORT3_MAC_CLK>, + <&nss NSS_CC_PORT4_MAC_CLK>, + <&nss NSS_CC_PORT5_MAC_CLK>, + <&nss NSS_CC_PORT6_MAC_CLK>, + <&nss NSS_CC_PPE_SWITCH_IPE_CLK>, + <&nss NSS_CC_PPE_SWITCH_CLK>, + <&nss NSS_CC_PPE_SWITCH_CFG_CLK>, + <&nss NSS_CC_PPE_EDMA_CLK>, + <&nss NSS_CC_PPE_EDMA_CFG_CLK>, + <&nss NSS_CC_CRYPTO_PPE_CLK>, + <&nss NSS_CC_NSSNOC_PPE_CLK>, + <&nss NSS_CC_NSSNOC_PPE_CFG_CLK>, + <&nss NSS_CC_PPE_SWITCH_BTQ_CLK>, + <&nss NSS_CC_PORT1_RX_CLK>, + <&nss NSS_CC_PORT1_TX_CLK>, + <&nss NSS_CC_PORT2_RX_CLK>, + <&nss NSS_CC_PORT2_TX_CLK>, + <&nss NSS_CC_PORT3_RX_CLK>, + <&nss NSS_CC_PORT3_TX_CLK>, + <&nss NSS_CC_PORT4_RX_CLK>, + <&nss NSS_CC_PORT4_TX_CLK>, + <&nss NSS_CC_PORT5_RX_CLK>, + <&nss NSS_CC_PORT5_TX_CLK>, + <&nss NSS_CC_PORT6_RX_CLK>, + <&nss NSS_CC_PORT6_TX_CLK>, + <&nss NSS_CC_UNIPHY_PORT1_RX_CLK>, + <&nss NSS_CC_UNIPHY_PORT1_TX_CLK>, + <&nss NSS_CC_UNIPHY_PORT2_RX_CLK>, + <&nss NSS_CC_UNIPHY_PORT2_TX_CLK>, + <&nss NSS_CC_UNIPHY_PORT3_RX_CLK>, + <&nss NSS_CC_UNIPHY_PORT3_TX_CLK>, + <&nss NSS_CC_UNIPHY_PORT4_RX_CLK>, + <&nss NSS_CC_UNIPHY_PORT4_TX_CLK>, + <&nss NSS_CC_UNIPHY_PORT5_RX_CLK>, + <&nss NSS_CC_UNIPHY_PORT5_TX_CLK>, + <&nss NSS_CC_UNIPHY_PORT6_RX_CLK>, + <&nss NSS_CC_UNIPHY_PORT6_TX_CLK>, + <&nss UNIPHY0_NSS_RX_CLK>, + <&nss UNIPHY0_NSS_TX_CLK>, + <&nss UNIPHY1_NSS_RX_CLK>, + <&nss UNIPHY1_NSS_TX_CLK>, + <&nss UNIPHY2_NSS_RX_CLK>, + <&nss UNIPHY2_NSS_TX_CLK>; + + clock-names = "gcc_mem_noc_nssnoc_clk", + "gcc_nsscfg_clk", + "gcc_nssnoc_atb_clk", + "gcc_nssnoc_mem_noc_1_clk", + "gcc_nssnoc_memnoc_clk", + "gcc_nssnoc_qosgen_ref_clk", + "gcc_nssnoc_timeout_ref_clk", + "gcc_cmn_12gpll_ahb_clk", + "gcc_cmn_12gpll_sys_clk", + "gcc_uniphy0_sys_clk", + "gcc_uniphy0_ahb_clk", + "gcc_uniphy1_sys_clk", + "gcc_uniphy1_ahb_clk", + "gcc_uniphy2_sys_clk", + "gcc_uniphy2_ahb_clk", + "gcc_mdio_ahb_clk", + "gcc_nssnoc_snoc_clk", + "gcc_nssnoc_snoc_1_clk", + "gcc_mem_noc_snoc_axi_clk", + "nss_cc_nss_csr_clk", + "nss_cc_nssnoc_nss_csr_clk", + "nss_cc_port1_mac_clk", + "nss_cc_port2_mac_clk", + "nss_cc_port3_mac_clk", + "nss_cc_port4_mac_clk", + "nss_cc_port5_mac_clk", + "nss_cc_port6_mac_clk", + "nss_cc_ppe_switch_ipe_clk", + "nss_cc_ppe_switch_clk", + "nss_cc_ppe_switch_cfg_clk", + "nss_cc_ppe_edma_clk", + "nss_cc_ppe_edma_cfg_clk", + "nss_cc_crypto_ppe_clk", + "nss_cc_nssnoc_ppe_clk", + "nss_cc_nssnoc_ppe_cfg_clk", + "nss_cc_ppe_switch_btq_clk", + "nss_cc_port1_rx_clk", + "nss_cc_port1_tx_clk", + "nss_cc_port2_rx_clk", + "nss_cc_port2_tx_clk", + "nss_cc_port3_rx_clk", + "nss_cc_port3_tx_clk", + "nss_cc_port4_rx_clk", + "nss_cc_port4_tx_clk", + "nss_cc_port5_rx_clk", + "nss_cc_port5_tx_clk", + "nss_cc_port6_rx_clk", + "nss_cc_port6_tx_clk", + "nss_cc_uniphy_port1_rx_clk", + "nss_cc_uniphy_port1_tx_clk", + "nss_cc_uniphy_port2_rx_clk", + "nss_cc_uniphy_port2_tx_clk", + "nss_cc_uniphy_port3_rx_clk", + "nss_cc_uniphy_port3_tx_clk", + "nss_cc_uniphy_port4_rx_clk", + "nss_cc_uniphy_port4_tx_clk", + "nss_cc_uniphy_port5_rx_clk", + "nss_cc_uniphy_port5_tx_clk", + "nss_cc_uniphy_port6_rx_clk", + "nss_cc_uniphy_port6_tx_clk", + "uniphy0_nss_rx_clk", + "uniphy0_nss_tx_clk", + "uniphy1_nss_rx_clk", + "uniphy1_nss_tx_clk", + "uniphy2_nss_rx_clk", + "uniphy2_nss_tx_clk"; + + resets = <&reset GCC_UNIPHY0_SOFT_RESET>, + <&reset GCC_UNIPHY1_SOFT_RESET>, + <&reset GCC_UNIPHY2_SOFT_RESET>, + <&reset GCC_UNIPHY0_XPCS_RESET>, + <&reset GCC_UNIPHY1_XPCS_RESET>, + <&reset GCC_UNIPHY2_XPCS_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT1_TX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT1_RX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT2_TX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT2_RX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT3_TX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT3_RX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT4_TX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT4_RX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT5_TX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT5_RX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT6_TX_RESET>, + <&nss_reset NSS_CC_UNIPHY_PORT6_RX_RESET>, + <&nss_reset NSS_CC_PORT1_TX_RESET>, + <&nss_reset NSS_CC_PORT1_RX_RESET>, + <&nss_reset NSS_CC_PORT2_TX_RESET>, + <&nss_reset NSS_CC_PORT2_RX_RESET>, + <&nss_reset NSS_CC_PORT3_TX_RESET>, + <&nss_reset NSS_CC_PORT3_RX_RESET>, + <&nss_reset NSS_CC_PORT4_TX_RESET>, + <&nss_reset NSS_CC_PORT4_RX_RESET>, + <&nss_reset NSS_CC_PORT5_TX_RESET>, + <&nss_reset NSS_CC_PORT5_RX_RESET>, + <&nss_reset NSS_CC_PORT6_TX_RESET>, + <&nss_reset NSS_CC_PORT6_RX_RESET>, + <&nss_reset NSS_CC_PPE_EDMA_RESET>, + <&nss_reset NSS_CC_PPE_CFG_RESET>, + <&nss_reset NSS_CC_PORT1_MAC_RESET>, + <&nss_reset NSS_CC_PORT2_MAC_RESET>, + <&nss_reset NSS_CC_PORT3_MAC_RESET>, + <&nss_reset NSS_CC_PORT4_MAC_RESET>, + <&nss_reset NSS_CC_PORT5_MAC_RESET>, + <&nss_reset NSS_CC_PORT6_MAC_RESET>; + + reset-names = "uniphy0_srst", "uniphy1_srst", + "uniphy2_srst", "uniphy0_xrst", + "uniphy1_xrst", "uniphy2_xrst", + "uniphy_port1_tx", "uniphy_port1_rx", + "uniphy_port2_tx", "uniphy_port2_rx", + "uniphy_port3_tx", "uniphy_port3_rx", + "uniphy_port4_tx", "uniphy_port4_rx", + "uniphy_port5_tx", "uniphy_port5_rx", + "uniphy_port6_tx", "uniphy_port6_rx", + "nss_cc_port1_tx", + "nss_cc_port1_rx", + "nss_cc_port2_tx", + "nss_cc_port2_rx", + "nss_cc_port3_tx", + "nss_cc_port3_rx", + "nss_cc_port4_tx", + "nss_cc_port4_rx", + "nss_cc_port5_tx", + "nss_cc_port5_rx", + "nss_cc_port6_tx", + "nss_cc_port6_rx", + "nss_cc_ppe_edma_reset", + "nss_cc_ppe_cfg_reset", + "nss_cc_port1_mac", + "nss_cc_port2_mac", + "nss_cc_port3_mac", + "nss_cc_port4_mac", + "nss_cc_port5_mac", + "nss_cc_port6_mac"; + tdm_offset = <0xc000>; + tdm_mode = <0>; + no_tdm_reg = <118>; + status = "disabled"; + }; + + pcie0_phy: phy@84000 { + compatible = "qti,ipq9574-qmp-gen3x1-pcie-phy"; + reg = <0x00084000 0x1bc>, /* Serdes PLL */ + <0x00084200 0x16c>, /* Serdes Tx0 */ + <0x00084400 0x200>, /* Serdes Rx0 */ + <0x00084800 0x1f0>, /* PCS: Lane0, COM, PCIE */ + <0x00084c00 0x0f4>; /* pcs_misc */ + + clocks = <&gcc GCC_ANOC_PCIE0_1LANE_M_CLK>, + <&gcc GCC_SNOC_PCIE0_1LANE_S_CLK>, + <&gcc GCC_PCIE0_PIPE_CLK>; + + #phy-cells = <1>; + status = "okay"; + }; + + pcie1_phy: phy@fc000 { + compatible = "qti,ipq9574-qmp-gen3x1-pcie-phy"; + reg = <0x000fc000 0x1bc>, /* Serdes PLL */ + <0x000fc200 0x16c>, /* Serdes Tx0 */ + <0x000fc400 0x200>, /* Serdes Rx0 */ + <0x000fc800 0x1f0>, /* PCS: Lane0, COM, PCIE */ + <0x000fcc00 0x0f4>; /* pcs_misc */ + + clocks = <&gcc GCC_ANOC_PCIE1_1LANE_M_CLK>, + <&gcc GCC_SNOC_PCIE1_1LANE_S_CLK>, + <&gcc GCC_PCIE1_PIPE_CLK>; + + #phy-cells = <1>; + status = "okay"; + }; + + pcie2_phy: phy@8c000 { + compatible = "qti,ipq9574-qmp-gen3x2-pcie-phy"; + reg = <0x0008c000 0x1bc>, /* Serdes PLL */ + <0x0008c200 0x16c>, /* Serdes Tx0 */ + <0x0008c400 0x200>, /* Serdes Rx0 */ + <0x0008d000 0x1f0>, /* PCS: Lane0, COM, PCIE */ + <0x0008c600 0x16c>, /* Serdes Tx1 */ + <0x0008c800 0x200>, /* Serdes Rx1 */ + <0x0008d400 0x0f8>; /* pcs_misc */ + + clocks = <&gcc GCC_ANOC_PCIE2_2LANE_M_CLK>, + <&gcc GCC_SNOC_PCIE2_2LANE_S_CLK>, + <&gcc GCC_PCIE2_PIPE_CLK>; + + #phy-cells = <1>; + status = "okay"; + }; + + pcie3_phy: phy@f4000 { + compatible = "qti,ipq9574-qmp-gen3x2-pcie-phy"; + reg = <0x000f4000 0x1bc>, /* Serdes PLL */ + <0x000f4200 0x16c>, /* Serdes Tx0 */ + <0x000f4400 0x200>, /* Serdes Rx0 */ + <0x000f5000 0x1f0>, /* PCS: Lane0, COM, PCIE */ + <0x000f4600 0x16c>, /* Serdes Tx1 */ + <0x000f4800 0x200>, /* Serdes Rx1 */ + <0x000f5400 0x0f8>; /* pcs_misc */ + + clocks = <&gcc GCC_ANOC_PCIE3_2LANE_M_CLK>, + <&gcc GCC_SNOC_PCIE3_2LANE_S_CLK>, + <&gcc GCC_PCIE3_PIPE_CLK>; + + #phy-cells = <1>; + status = "okay"; + }; + + pcie0_x1: pci@28000000 { + compatible = "qti,dw-pcie-ipq9574"; + reg = <0x28000000 0xf1d>, + <0x28000F20 0xa8>, + <0x28001000 0x1000>, + <0x00080000 0x4000>, + <0x28100000 0x1000>; + reg-names = "dbi", "elbi", "atu", "parf", "config"; + num-lanes = <1>; + id = <0>; + gen = <3>; + + clocks = <&gcc GCC_PCIE0_AHB_CLK>, + <&gcc GCC_PCIE0_AUX_CLK>, + <&gcc GCC_PCIE0_AXI_M_CLK>, + <&gcc GCC_PCIE0_AXI_S_CLK>, + <&gcc GCC_PCIE0_AXI_S_BRIDGE_CLK>; + + assigned-clocks = <&gcc GCC_PCIE_AUX_CLK>, + <&gcc GCC_PCIE0_AXI_M_CLK>, + <&gcc GCC_PCIE0_AXI_S_CLK>, + <&gcc GCC_PCIE0_RCHNG_CLK>; + assigned-clock-rates = <20000000>, + <240000000>, + <240000000>, + <100000000>; + + #address-cells = <3>; + #size-cells = <2>; + ranges = <0x81000000 0 0x28200000 0x28200000 + 0 0x00100000 /* downstream I/O */ + 0x82000000 0 0x28300000 0x28300000 + 0 0x07d00000>; /* non-prefetchable memory */ + + phys = <&pcie0_phy PHY_TYPE_PCIE>; + phy-names = "pcie-phy"; + status = "disabled"; + device_type = "pci"; + }; + + pcie1_x1: pci@10000000 { + compatible = "qti,dw-pcie-ipq9574"; + reg = <0x10000000 0xf1d>, + <0x10000F20 0xa8>, + <0x10001000 0x1000>, + <0x000F8000 0x4000>, + <0x10100000 0x1000>; + reg-names = "dbi", "elbi", "atu", "parf", "config"; + num-lanes = <1>; + id = <1>; + gen = <3>; + + clocks = <&gcc GCC_PCIE1_AHB_CLK>, + <&gcc GCC_PCIE1_AUX_CLK>, + <&gcc GCC_PCIE1_AXI_M_CLK>, + <&gcc GCC_PCIE1_AXI_S_CLK>, + <&gcc GCC_PCIE1_AXI_S_BRIDGE_CLK>; + + assigned-clocks = <&gcc GCC_PCIE_AUX_CLK>, + <&gcc GCC_PCIE1_AXI_M_CLK>, + <&gcc GCC_PCIE1_AXI_S_CLK>, + <&gcc GCC_PCIE1_RCHNG_CLK>; + assigned-clock-rates = <20000000>, + <240000000>, + <240000000>, + <100000000>; + + #address-cells = <3>; + #size-cells = <2>; + ranges = <0x81000000 0 0x10200000 0x10200000 + 0 0x00100000 /* downstream I/O */ + 0x82000000 0 0x10300000 0x10300000 + 0 0x07d00000>; /* non-prefetchable memory */ + + phys = <&pcie1_phy PHY_TYPE_PCIE>; + phy-names = "pcie-phy"; + status = "disabled"; + device_type = "pci"; + }; + + pcie2_x2: pci@20000000 { + compatible = "qti,dw-pcie-ipq9574"; + reg = <0x20000000 0xf1d>, + <0x20000F20 0xa8>, + <0x20001000 0x1000>, + <0x00088000 0x4000>, + <0x20100000 0x1000>; + reg-names = "dbi", "elbi", "atu", "parf", "config"; + num-lanes = <2>; + id = <2>; + gen = <3>; + + clocks = <&gcc GCC_PCIE2_AHB_CLK>, + <&gcc GCC_PCIE2_AUX_CLK>, + <&gcc GCC_PCIE2_AXI_M_CLK>, + <&gcc GCC_PCIE2_AXI_S_CLK>, + <&gcc GCC_PCIE2_AXI_S_BRIDGE_CLK>; + + assigned-clocks = <&gcc GCC_PCIE_AUX_CLK>, + <&gcc GCC_PCIE2_AXI_M_CLK>, + <&gcc GCC_PCIE2_AXI_S_CLK>, + <&gcc GCC_PCIE2_RCHNG_CLK>; + assigned-clock-rates = <20000000>, + <342857143>, + <240000000>, + <100000000>; + + #address-cells = <3>; + #size-cells = <2>; + ranges = <0x81000000 0 0x20200000 0x20200000 + 0 0x00100000 /* downstream I/O */ + 0x82000000 0 0x20300000 0x20300000 + 0 0x07d00000>; /* non-prefetchable memory */ + + phys = <&pcie2_phy PHY_TYPE_PCIE>; + phy-names = "pcie-phy"; + status = "disabled"; + }; + + pcie3_x2: pci@18000000 { + compatible = "qti,dw-pcie-ipq9574"; + reg = <0x18000000 0xf1d>, + <0x18000F20 0xa8>, + <0x18001000 0x1000>, + <0x000F0000 0x4000>, + <0x18100000 0x1000>; + reg-names = "dbi", "elbi", "atu", "parf", "config"; + num-lanes = <2>; + id = <3>; + gen = <3>; + + clocks = <&gcc GCC_PCIE3_AHB_CLK>, + <&gcc GCC_PCIE3_AUX_CLK>, + <&gcc GCC_PCIE3_AXI_M_CLK>, + <&gcc GCC_PCIE3_AXI_S_CLK>, + <&gcc GCC_PCIE3_AXI_S_BRIDGE_CLK>; + + assigned-clocks = <&gcc GCC_PCIE_AUX_CLK>, + <&gcc GCC_PCIE3_AXI_M_CLK>, + <&gcc GCC_PCIE3_AXI_S_CLK>, + <&gcc GCC_PCIE3_RCHNG_CLK>; + assigned-clock-rates = <20000000>, + <342857143>, + <240000000>, + <100000000>; + + #address-cells = <3>; + #size-cells = <2>; + ranges = <0x81000000 0 0x18200000 0x18200000 + 0 0x00100000 /* downstream I/O */ + 0x82000000 0 0x18300000 0x18300000 + 0 0x07d00000>; /* non-prefetchable memory */ + + phys = <&pcie3_phy PHY_TYPE_PCIE>; + phy-names = "pcie-phy"; + status = "disabled"; + }; + }; +}; diff --git a/arch/arm/mach-snapdragon/include/mach/sysmap-ipq9574.h b/arch/arm/mach-snapdragon/include/mach/sysmap-ipq9574.h new file mode 100644 index 0000000000..441f702ee5 --- /dev/null +++ b/arch/arm/mach-snapdragon/include/mach/sysmap-ipq9574.h @@ -0,0 +1,252 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * (C) Copyright 2022 Sumit Garg + * + * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. + * + */ + +#ifndef _MACH_SYSMAP_IPQ9574_H +#define _MACH_SYSMAP_IPQ9574_H + +#define SDCC1_SRC_SEL_GPLL2_OUT_MAIN BIT(9) +#define SDCC1_SRC_SEL_GPLL0_OUT_MAIN BIT(8) +#define PCIE_SRC_SEL_UNSUSED_GND BIT(8) +#define PCIE_SRC_SEL_GPLL4_OUT_MAIN BIT(9) +#define PCIE_SRC_SEL_GPLL0_OUT_MAIN BIT(8) + +/* BLSP UART clock register */ +#define BLSP1_AHB_CBCR 0x01004 +#define BLSP1_UART1_BCR 0x02028 +#define APCS_CLOCK_BRANCH_ENA_VOTE 0x0B004 + +#define BLSP1_UART_BCR(id) (BLSP1_UART1_BCR + (0x1000 * (id))) + +#define BLSP1_UART_APPS_CMD_RCGR(id) (BLSP1_UART_BCR(id) + 0x04) +#define BLSP1_UART_APPS_CFG_RCGR(id) (BLSP1_UART_BCR(id) + 0x08) +#define BLSP1_UART_APPS_M(id) (BLSP1_UART_BCR(id) + 0x0c) +#define BLSP1_UART_APPS_N(id) (BLSP1_UART_BCR(id) + 0x10) +#define BLSP1_UART_APPS_D(id) (BLSP1_UART_BCR(id) + 0x14) +#define BLSP1_UART_APPS_CBCR(id) (BLSP1_UART_BCR(id) + 0x18) + +/* Uart clock control registers */ +#define BLSP1_UART2_BCR (0x3028) +#define BLSP1_UART2_APPS_CBCR (0x3040) +#define BLSP1_UART2_APPS_CMD_RCGR (0x302C) +#define BLSP1_UART2_APPS_CFG_RCGR (0x3030) +#define BLSP1_UART2_APPS_M (0x3034) +#define BLSP1_UART2_APPS_N (0x3038) +#define BLSP1_UART2_APPS_D (0x303C) + +/* SD controller clock control registers */ +#define SDCC1_BCR (0x33000) +#define SDCC1_APPS_CMD_RCGR (0x33004) +#define SDCC1_APPS_CFG_RCGR (0x33008) +#define SDCC1_APPS_M (0x3300C) +#define SDCC1_APPS_N (0x33010) +#define SDCC1_APPS_D (0x33014) +#define SDCC1_APPS_CBCR (0x3302C) +#define SDCC1_AHB_CBCR (0x33034) + +/* BLSP QUP SPI clock register */ +#define BLSP1_QUP1_SPI_BCR 0x02000 + +#define BLSP1_QUP_SPI_BCR(id) (BLSP1_QUP1_SPI_BCR + (0x1000 * (id))) + +#define BLSP1_QUP_SPI_APPS_CMD_RCGR(id) (BLSP1_QUP_SPI_BCR(id) + 0x04) +#define BLSP1_QUP_SPI_APPS_CFG_RCGR(id) (BLSP1_QUP_SPI_BCR(id) + 0x08) +#define BLSP1_QUP_SPI_APPS_M(id) (BLSP1_QUP_SPI_BCR(id) + 0x0c) +#define BLSP1_QUP_SPI_APPS_N(id) (BLSP1_QUP_SPI_BCR(id) + 0x10) +#define BLSP1_QUP_SPI_APPS_D(id) (BLSP1_QUP_SPI_BCR(id) + 0x14) +#define BLSP1_QUP_SPI_APPS_CBCR(id) (BLSP1_QUP_SPI_BCR(id) + 0x20) + +#define BLSP1_QUP_SPI_SRC_SEL_XO (0 << 8) +#define BLSP1_QUP_SPI_SRC_SEL_GPLL0_OUT_MAIN BIT(8) + +/* BLSP QUP I2C clock register */ +#define BLSP1_QUP0_I2C_BCR 0x02000 + +#define BLSP1_QUP_I2C_BCR(id) (BLSP1_QUP0_I2C_BCR + (0x1000 * (id))) + +#define BLSP1_QUP_I2C_APPS_CMD_RCGR(id) (BLSP1_QUP_I2C_BCR(id) + 0x18) +#define BLSP1_QUP_I2C_APPS_CFG_RCGR(id) (BLSP1_QUP_I2C_BCR(id) + 0x1C) +#define BLSP1_QUP_I2C_APPS_CBCR(id) (BLSP1_QUP_I2C_BCR(id) + 0x24) + +#define BLSP1_QUP_I2C_50M_DIV_VAL (0x1F << 0) +#define BLSP1_QUP_I2C_SRC_SEL_GPLL0_OUT_MAIN BIT(8) + +/* USB clock control registers */ +#define GCC_USB0_MASTER_CMD_RCGR (0x2C004) +#define GCC_USB0_MASTER_CFG_RCGR (0x2C008) +#define GCC_USB0_MOCK_UTMI_CMD_RCGR (0x2C02C) +#define GCC_USB0_MOCK_UTMI_CFG_RCGR (0x2C030) +#define GCC_USB0_MOCK_UTMI_M (0x2C034) +#define GCC_USB0_MOCK_UTMI_N (0x2C038) +#define GCC_USB0_MOCK_UTMI_D (0x2C03C) +#define GCC_USB0_AUX_CMD_RCGR (0x2C018) +#define GCC_USB0_AUX_CFG_RCGR (0x2C01C) +#define GCC_USB0_AUX_M (0x2C020) +#define GCC_USB0_AUX_N (0x2C024) +#define GCC_USB0_AUX_D (0x2C028) + +#define USB0_MASTER_SRC_SEL_GPLL0_OUT_MAIN BIT(8) +#define USB0_MOCK_UTMI_SRC_SEL_XO (0 << 8) +#define USB0_AUX_SRC_SEL_XO (0 << 8) + +#define GCC_USB0_MASTER_CBCR (0x2C044) +#define GCC_USB0_AUX_CBCR (0x2C048) +#define GCC_USB0_MOCK_UTMI_CBCR (0x2C04C) +#define GCC_USB0_PIPE_CBCR (0x2C054) +#define GCC_USB0_SLEEP_CBCR (0x2C058) +#define GCC_USB0_PHY_CFG_AHB_CBCR (0x2C05C) +#define GCC_SNOC_USB_CBCR (0x2E058) +#define GCC_ANOC_USB_AXI_CBCR (0x2E084) + +/* GCC clock control registers */ +#define GCC_NSSNOC_ATB_CBCR (0x17014) +#define GCC_NSSNOC_QOSGEN_REF_CBCR (0x1701C) +#define GCC_NSSNOC_TIMEOUT_REF_CBCR (0x17020) +#define GCC_NSSNOC_MEMNOC_CBCR (0x17024) +#define GCC_NSSNOC_SNOC_CBCR (0x17028) +#define GCC_NSSCFG_CBCR (0x1702C) +#define GCC_MDIO_AHB_CBCR (0x17040) +#define GCC_UNIPHY0_SYS_CBCR (0x17048) +#define GCC_UNIPHY0_AHB_CBCR (0x1704C) +#define GCC_UNIPHY_SYS_CBCR(id) (GCC_UNIPHY0_SYS_CBCR + (0x10 * (id))) +#define GCC_UNIPHY_AHB_CBCR(id) (GCC_UNIPHY0_AHB_CBCR + (0x10 * (id))) +#define GCC_NSSNOC_SNOC_1_CBCR (0x1707C) +#define GCC_NSSNOC_MEM_NOC_1_CBCR (0x17084) +#define GCC_UNIPHY_SYS_CMD_RCGR (0x17090) +#define GCC_UNIPHY_SYS_CFG_RCGR (0x17094) +#define GCC_MEM_NOC_NSSNOC_CBCR (0x19014) +#define GCC_MEM_NOC_SNOC_AXI_CBCR (0x19018) +#define GCC_CMN_12GPLL_AHB_CBCR (0x3A004) +#define GCC_CMN_12GPLL_SYS_CBCR (0x3A008) + +#define GCC_NSSNOC_MEMNOC_BFDCD_CMD_RCGR (0x17004) +#define GCC_NSSNOC_MEMNOC_BFDCD_CFG_RCGR (0x17008) +#define GCC_QDSS_AT_CMD_RCGR (0x2D004) +#define GCC_QDSS_AT_CFG_RCGR (0x2D008) +#define GCC_SYSTEM_NOC_BFDCD_CMD_RCGR (0x2E004) +#define GCC_SYSTEM_NOC_BFDCD_CFG_RCGR (0x2E008) +#define GCC_PCNOC_BFDCD_CMD_RCGR (0x31004) +#define GCC_PCNOC_BFDCD_CFG_RCGR (0x31008) + +#define GCC_NSSNOC_MEMNOC_BFDCD_SRC_SEL_GPLL0_OUT_MAIN BIT(8) +#define GCC_QDSS_AT_SRC_SEL_GPLL0_OUT_MAIN BIT(8) +#define GCC_PCNOC_BFDCD_SRC_SEL_GPLL0_OUT_MAIN BIT(8) +#define GCC_SYSTEM_NOC_BFDCD_SRC_SEL_GPLL4_OUT_MAIN BIT(9) + +/* NSS clock control registers */ +#define NSS_CC_PORT1_RX_CBCR (0x281A0) +#define NSS_CC_PORT1_TX_CBCR (0x281A4) +#define NSS_CC_PORT_RX_CBCR(id) (NSS_CC_PORT1_RX_CBCR + (8 * ((id) - 1))) +#define NSS_CC_PORT_TX_CBCR(id) (NSS_CC_PORT1_TX_CBCR + (8 * ((id) - 1))) +#define NSS_CC_NSS_CSR_CBCR (0x281D0) +#define NSS_CC_NSSNOC_NSS_CSR_CBCR (0x281D4) +#define NSS_CC_PPE_SWITCH_IPE_CBCR (0x2822C) +#define NSS_CC_PPE_SWITCH_CBCR (0x28230) +#define NSS_CC_PPE_SWITCH_CFG_CBCR (0x28234) +#define NSS_CC_PPE_EDMA_CBCR (0x28238) +#define NSS_CC_PPE_EDMA_CFG_CBCR (0x2823C) +#define NSS_CC_CRYPTO_PPE_CBCR (0x28240) +#define NSS_CC_NSSNOC_PPE_CBCR (0x28244) +#define NSS_CC_NSSNOC_PPE_CFG_CBCR (0x28248) +#define NSS_CC_PORT1_MAC_CBCR (0x2824C) +#define NSS_CC_PORT_MAC_CBCR(id) (NSS_CC_PORT1_MAC_CBCR + (4 * ((id) - 1))) +#define NSS_CC_PPE_SWITCH_BTQ_CBCR (0x2827C) +#define NSS_CC_UNIPHY_PORT1_RX_CBCR (0x28904) +#define NSS_CC_UNIPHY_PORT1_TX_CBCR (0x28908) +#define NSS_CC_UNIPHY_PORT_RX_CBCR(id) (NSS_CC_UNIPHY_PORT1_RX_CBCR + (0x8 * ((id) - 1))) +#define NSS_CC_UNIPHY_PORT_TX_CBCR(id) (NSS_CC_UNIPHY_PORT1_TX_CBCR + (0x8 * ((id) - 1))) + +#define NSS_CC_CFG_CMD_RCGR (0x28104) +#define NSS_CC_CFG_CFG_RCGR (0x28108) +#define NSS_CC_PORT1_RX_CMD_RCGR (0x28110) +#define NSS_CC_PORT1_RX_CFG_RCGR (0x28114) +#define NSS_CC_PORT1_RX_DIV_CDIVR (0x28118) +#define NSS_CC_PORT1_TX_CMD_RCGR (0x2811C) +#define NSS_CC_PORT1_TX_CFG_RCGR (0x28120) +#define NSS_CC_PORT1_TX_DIV_CDIVR (0x28124) +#define NSS_CC_PORT_RX_CMD_RCGR(id) (NSS_CC_PORT1_RX_CMD_RCGR + (0x18 * ((id) - 1))) +#define NSS_CC_PORT_RX_CFG_RCGR(id) (NSS_CC_PORT1_RX_CFG_RCGR + (0x18 * ((id) - 1))) +#define NSS_CC_PORT_RX_DIV_CDIVR(id) (NSS_CC_PORT1_RX_DIV_CDIVR + (0x18 * ((id) - 1))) +#define NSS_CC_PORT_TX_CMD_RCGR(id) (NSS_CC_PORT1_TX_CMD_RCGR + (0x18 * ((id) - 1))) +#define NSS_CC_PORT_TX_CFG_RCGR(id) (NSS_CC_PORT1_TX_CFG_RCGR + (0x18 * ((id) - 1))) +#define NSS_CC_PORT_TX_DIV_CDIVR(id) (NSS_CC_PORT1_TX_DIV_CDIVR + (0x18 * ((id) - 1))) +#define NSS_CC_PPE_CMD_RCGR (0x28204) +#define NSS_CC_PPE_CFG_RCGR (0x28208) + +#define NSS_CC_CFG_SRC_SEL_GCC_GPLL0_OUT_AUX BIT(9) +#define NSS_CC_PPE_SRC_SEL_BIAS_PLL_UBI_NC_CLK BIT(8) +#define NSS_CC_PORT1_RX_SRC_SEL_UNIPHY0_NSS_RX_CLK BIT(9) +#define NSS_CC_PORT1_TX_SRC_SEL_UNIPHY0_NSS_TX_CLK (3 << 8) +#define NSS_CC_PORT5_RX_SRC_SEL_UNIPHY0_NSS_RX_CLK (2 << 8) +#define NSS_CC_PORT5_TX_SRC_SEL_UNIPHY0_NSS_TX_CLK (3 << 8) +#define NSS_CC_PORT5_RX_SRC_SEL_UNIPHY1_NSS_RX_CLK (4 << 8) +#define NSS_CC_PORT5_TX_SRC_SEL_UNIPHY1_NSS_TX_CLK (5 << 8) +#define NSS_CC_PORT6_RX_SRC_SEL_UNIPHY2_NSS_RX_CLK (2 << 8) +#define NSS_CC_PORT6_TX_SRC_SEL_UNIPHY2_NSS_TX_CLK (3 << 8) + +#define CLK_1_25_MHZ (1250000UL) +#define CLK_2_5_MHZ (2500000UL) +#define CLK_12_5_MHZ (12500000UL) +#define CLK_25_MHZ (25000000UL) +#define CLK_78_125_MHZ (78125000UL) +#define CLK_50_MHZ (50000000UL) +#define CLK_125_MHZ (125000000UL) +#define CLK_156_25_MHZ (156250000UL) +#define CLK_312_5_MHZ (312500000UL) + +/* + * QTI SPI NAND clock + */ +#define GCC_QPIC_IO_MACRO_CMD_RCGR (0x32004) +#define GCC_QPIC_IO_MACRO_CFG_RCGR (0x32008) +#define GCC_QPIC_IO_MACRO_CBCR (0x3200C) + +#define IO_MACRO_CLK_320_MHZ (320000000) +#define IO_MACRO_CLK_266_MHZ (266000000) +#define IO_MACRO_CLK_228_MHZ (228000000) +#define IO_MACRO_CLK_200_MHZ (200000000) +#define IO_MACRO_CLK_100_MHZ (100000000) +#define IO_MACRO_CLK_24_MHZ (24000000) + +#define GCC_QPIC_IO_MACRO_SRC_SEL_XO_CLK (0 << 8) +#define GCC_QPIC_IO_MACRO_SRC_SEL_GPLL0_OUT_MAIN BIT(8) + +/* + * PCI clock + */ +#define GCC_PCIE_BASE 0x28000 +#define GCC_PCIE_OFFSET(id, off) (GCC_PCIE_BASE + \ + ((id) * 0x1000) + (off)) + +#define GCC_PCIE_AUX_CMD_RCGR (GCC_PCIE_BASE + 0x4) +#define GCC_PCIE_AUX_CFG_RCGR (GCC_PCIE_BASE + 0x8) +#define GCC_PCIE_AUX_M (GCC_PCIE_BASE + 0xc) +#define GCC_PCIE_AUX_N (GCC_PCIE_BASE + 0x10) +#define GCC_PCIE_AUX_D (GCC_PCIE_BASE + 0x14) + +#define GCC_PCIE_AXI_M_CMD_RCGR(id) GCC_PCIE_OFFSET(id, 0x18) +#define GCC_PCIE_AXI_M_CFG_RCGR(id) GCC_PCIE_OFFSET(id, 0x1C) +#define GCC_PCIE_AXI_S_CMD_RCGR(id) GCC_PCIE_OFFSET(id, 0x20) +#define GCC_PCIE_AXI_S_CFG_RCGR(id) GCC_PCIE_OFFSET(id, 0x24) +#define GCC_PCIE_RCHNG_CMD_RCGR(id) GCC_PCIE_OFFSET(id, 0x28) +#define GCC_PCIE_RCHNG_CFG_RCGR(id) GCC_PCIE_OFFSET(id, 0x2C) +#define GCC_PCIE_AHB_CBCR(id) GCC_PCIE_OFFSET(id, 0x30) +#define GCC_PCIE_AUX_CBCR(id) GCC_PCIE_OFFSET(id, 0x34) +#define GCC_PCIE_AXI_M_CBCR(id) GCC_PCIE_OFFSET(id, 0x38) +#define GCC_PCIE_AXI_S_CBCR(id) GCC_PCIE_OFFSET(id, 0x3C) +#define GCC_PCIE_AXI_S_BRIDGE_CBCR(id) GCC_PCIE_OFFSET(id, 0x40) +#define GCC_PCIE_PIPE_CBCR(id) GCC_PCIE_OFFSET(id, 0x44) + +#define GCC_SNOC_PCIE0_1LANE_S_CBCR 0x2E048 +#define GCC_SNOC_PCIE1_1LANE_S_CBCR 0x2E04C +#define GCC_SNOC_PCIE2_2LANE_S_CBCR 0x2E050 +#define GCC_SNOC_PCIE3_2LANE_S_CBCR 0x2E054 +#define GCC_ANOC_PCIE0_1LANE_M_CBCR 0x2E07C +#define GCC_ANOC_PCIE2_2LANE_M_CBCR 0x2E080 +#define GCC_ANOC_PCIE1_1LANE_M_CBCR 0x2E08C +#define GCC_ANOC_PCIE3_2LANE_M_CBCR 0x2E090 +#endif diff --git a/arch/arm/mach-snapdragon/init_ipq9574.c b/arch/arm/mach-snapdragon/init_ipq9574.c new file mode 100644 index 0000000000..bf8da1f9d1 --- /dev/null +++ b/arch/arm/mach-snapdragon/init_ipq9574.c @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +#define UBOOT_CACHE_SETUP 0x100e +#define GEN_CACHE_SETUP 0x101e + +int arch_setup_dest_addr(void) +{ + gd->relocaddr = CONFIG_TEXT_BASE; + gd->reloc_off = gd->relocaddr - CONFIG_TEXT_BASE; + + return 0; +} + +int arm_reserve_mmu(void) +{ + /* reserve TLB table */ + gd->arch.tlb_size = PGTABLE_SIZE; + gd->arch.tlb_addr = CONFIG_TEXT_BASE + gd->mon_len; + gd->arch.tlb_addr += (0x10000 - 1); + gd->arch.tlb_addr &= ~(0x10000 - 1); + + return 0; +} + +int mach_cpu_init(void) +{ + gd->flags |= GD_FLG_SKIP_RELOC; + + return 0; +} + +int arch_cpu_init(void) +{ + u32 val; + + if (IS_ENABLED(CONFIG_ARM64)) + return 0; + + /* Read SCTLR */ + asm volatile ("mrc p15, 0, %0, c1, c0, 0" : "=r" (val)); + /* set the cp15 barrier enable bit */ + val |= 0x20; + /* write back to SCTLR */ + asm volatile ("mcr p15, 0, %0, c1, c0, 0" : : "r" (val)); + + return 0; +} + +#if !CONFIG_IS_ENABLED(ARM64) +void dram_bank_mmu_setup(int bank) +{ + struct bd_info *bd = gd->bd; + int i; + + /* bd->bi_dram is available only after relocation */ + if ((gd->flags & GD_FLG_RELOC) == 0) + return; + + debug("%s: bank: %d\n", __func__, bank); + for (i = bd->bi_dram[bank].start >> 20; + i < (bd->bi_dram[bank].start + bd->bi_dram[bank].size) >> 20; + i++) { + /* Set XN bit for all dram regions except uboot code region */ + if ((i >= (CONFIG_TEXT_BASE >> 20)) && + (i < ((CONFIG_TEXT_BASE + 0x100000) >> 20))) + set_section_dcache(i, UBOOT_CACHE_SETUP); + else + set_section_dcache(i, GEN_CACHE_SETUP); + } +} +#endif diff --git a/board/qualcomm/ipq9574/Kconfig b/board/qualcomm/ipq9574/Kconfig new file mode 100644 index 0000000000..f9f107dcf6 --- /dev/null +++ b/board/qualcomm/ipq9574/Kconfig @@ -0,0 +1,15 @@ +if TARGET_IPQ9574 + +config SYS_BOARD + default "ipq9574" + +config SYS_VENDOR + default "qualcomm" + +config SYS_SOC + default "ipq9574" + +config SYS_CONFIG_NAME + default "ipq9574" + +endif diff --git a/board/qualcomm/ipq9574/Makefile b/board/qualcomm/ipq9574/Makefile new file mode 100644 index 0000000000..36f24f5fbb --- /dev/null +++ b/board/qualcomm/ipq9574/Makefile @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0+ + +obj-y += ipq9574.o +obj-y += board_init.o diff --git a/board/qualcomm/ipq9574/board_init.c b/board/qualcomm/ipq9574/board_init.c new file mode 100644 index 0000000000..009f84b2bb --- /dev/null +++ b/board/qualcomm/ipq9574/board_init.c @@ -0,0 +1,326 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2013, 2015-2017, 2020 The Linux Foundation. All rights reserved. + * + * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. + * + * Based on smem.c from lk. + * + * Copyright (c) 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ipq9574.h" + +DECLARE_GLOBAL_DATA_PTR; + +u32 g_board_machid; +u32 g_load_addr; + +struct udevice *smem; + +__weak void ipq_uboot_fdt_fixup(void) +{ +} + +__weak void set_flash_secondary_type(uint32_t flash_type) +{ +} + +void *smem_get_item(unsigned int item) +{ + int ret; + struct udevice *smem_tmp; + const char *name = "smem"; + size_t size; + unsigned long reloc_flag = (gd->flags & GD_FLG_RELOC); + + if (reloc_flag == 0) + ret = uclass_get_device_by_name(UCLASS_SMEM, name, &smem_tmp); + else if (!smem) + ret = uclass_get_device_by_name(UCLASS_SMEM, name, &smem); + + if (ret < 0) { + printf("Failed to find SMEM node. Check device tree %d\n", ret); + return 0; + } + + return smem_get(reloc_flag ? smem : smem_tmp, -1, item, &size); +} + +int board_init(void) +{ + u32 *flash_type; + u32 *flash_chip_select; + u32 *primary_mibib; + u32 *flash_index; + u32 *flash_block_size; + u32 *flash_density; + + gd->bd->bi_boot_params = BOOT_PARAMS_ADDR; + + gd->bd->bi_arch_number = g_board_machid; + + flash_type = smem_get_item(SMEM_BOOT_FLASH_TYPE); + + if (!flash_type) { + printf("Failed to find SMEM partition.\n"); + return -ENODEV; + } + + flash_index = smem_get_item(SMEM_BOOT_FLASH_INDEX); + + if (!flash_index) { + printf("Failed to find SMEM partition.\n"); + return -ENODEV; + } + + flash_chip_select = smem_get_item(SMEM_BOOT_FLASH_CHIP_SELECT); + + if (!flash_chip_select) { + printf("Failed to find SMEM partition.\n"); + return -ENODEV; + } + + flash_block_size = smem_get_item(SMEM_BOOT_FLASH_BLOCK_SIZE); + + if (!flash_block_size) { + printf("Failed to find SMEM partition.\n"); + return -ENODEV; + } + + flash_density = smem_get_item(SMEM_BOOT_FLASH_DENSITY); + + if (!flash_density) { + printf("Failed to find SMEM partition.\n"); + return -ENODEV; + } + + primary_mibib = smem_get_item(SMEM_PARTITION_TABLE_OFFSET); + if (IS_ERR_OR_NULL(primary_mibib)) { + debug("Failed to get SMEM item: SMEM_PARTITION_TABLE_OFFSET\n"); + primary_mibib = NULL; + } + + if (SZ_256M == gd->ram_size && CONFIG_SYS_LOAD_ADDR > SZ_256M) + g_load_addr = CFG_SYS_SDRAM_BASE + SZ_64M; + else + g_load_addr = CONFIG_SYS_LOAD_ADDR; + + return 0; +} + +/* + * This function is called in the very beginning. + * Retrieve the machtype info from SMEM and map the board specific + * parameters. Shared memory region at Dram address + * contains the machine id/ board type data polulated by SBL. + */ +int board_early_init_f(void) +{ + union ipq_platform *pt; + + if (IPQ_CONFIG_SMEM_VERSION_C) { + pt = smem_get_item(SMEM_HW_SW_BUILD_ID); + if (IS_ERR_OR_NULL(pt)) { + debug("Failed to get SMEM item: SMEM_HW_SW_BUILD_ID\n"); + return -ENODEV; + } + + g_board_machid = ((pt->v1.hw_platform << 24) | + ((SOCINFO_VERSION_MAJOR(pt->v1.platform_version)) << 16) | + ((SOCINFO_VERSION_MINOR(pt->v1.platform_version)) << 8) | + (pt->v1.hw_platform_subtype)); + } else { + struct smem_machid_info *machid_info; + + machid_info = smem_get_item(SMEM_MACHID_INFO_LOCATION); + if (IS_ERR_OR_NULL(machid_info)) { + debug("Failed to get SMEM item: SMEM_MACHID_INFO_LOCATION\n"); + return -ENODEV; + } + + g_board_machid = machid_info->machid; + } + + return 0; +} + +int board_fix_fdt(void *rw_fdt_blob) +{ + ipq_uboot_fdt_fixup(); + return 0; +} + +int embedded_dtb_select(void) +{ + int rescan; + + if (IS_ENABLED(CONFIG_DTB_RESELECT)) + fdtdec_resetup(&rescan); + + return 0; +} + +int board_late_init(void) +{ + return 0; +} + +int dram_init(void) +{ + return msm_fixup_memory(NULL); +} + +void *env_sf_get_env_addr(void) +{ + return NULL; +} + +int part_get_info_efi_by_name(const char *name, struct disk_partition *info) +{ + struct blk_desc *mmc_dev; + int ret = -1; + int i; + + mmc_dev = blk_get_devnum_by_uclass_id(UCLASS_MMC, 0); + + if (mmc_dev->type == DEV_TYPE_UNKNOWN) + goto done; + + for (i = 1; i < GPT_ENTRY_NUMBERS; i++) { + ret = part_get_info_efi(mmc_dev, i, info); + if (ret != 0) { + /* no more entries in table */ + goto done; + } + if (strcmp(name, (const char *)info->name) == 0) { + /* matched */ + ret = 0; + goto done; + } + } +done: + return ret; +} + +enum env_location env_get_location(enum env_operation op, int prio) +{ + int ret; + u32 *flash_type; + + if (prio) + return ENVL_UNKNOWN; + + flash_type = smem_get_item(SMEM_BOOT_FLASH_TYPE); + if (!flash_type) { + printf("Failed to find SMEM partition.\n"); + return -ENODEV; + } + + if (*flash_type == SMEM_BOOT_SPI_FLASH) { + ret = ENVL_SPI_FLASH; + } else if (*flash_type == SMEM_BOOT_MMC_FLASH) { + ret = ENVL_MMC; + } else if ((*flash_type == SMEM_BOOT_QSPI_NAND_FLASH) || + (*flash_type == SMEM_BOOT_NAND_FLASH)) { + ret = ENVL_NAND; + } else { + ret = ENVL_NOWHERE; + } + + return ret; +} + +int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr) +{ + int ret; + struct disk_partition disk_info; + + ret = part_get_info_efi_by_name("0:APPSBLENV", &disk_info); + + if (!ret) + *env_addr = (u32)disk_info.start * disk_info.blksz; + + return ret; +} + +__weak void board_cache_init(void) +{ + icache_enable(); + if (!CONFIG_IS_ENABLED(SYS_DCACHE_OFF)) + dcache_enable(); +} + +void enable_caches(void) +{ + int i; + u8 bidx = 0; + + /* Now Update the real DDR size based on Board configuration */ + for (i = 0; IS_ENABLED(CONFIG_ARM64) && + (mem_map[i].size || mem_map[i].attrs); i++) { + if (mem_map[i].size == 0x0UL) { + if (!bidx) /* For DDR bank 0 */ + mem_map[i].size = gd->ram_top - mem_map[i].virt; + else /* For remaining DDR banks */ + mem_map[i].size = gd->bd->bi_dram[bidx].size; + bidx++; + } + } + + board_cache_init(); + + if (!IS_ENABLED(CONFIG_MULTI_DTB_FIT_NO_COMPRESSION) && gd->new_fdt) { + memcpy(gd->new_fdt, gd->fdt_blob, fdt_totalsize(gd->fdt_blob)); + flush_cache((ulong)gd->new_fdt, + ALIGN(fdt_totalsize(gd->fdt_blob), + ARCH_DMA_MINALIGN)); + gd->fdt_blob = gd->new_fdt; + } +} + +int ft_board_setup(void *blob, struct bd_info *bd) +{ + return 0; +} diff --git a/board/qualcomm/ipq9574/ipq9574.c b/board/qualcomm/ipq9574/ipq9574.c new file mode 100644 index 0000000000..b3b85a864e --- /dev/null +++ b/board/qualcomm/ipq9574/ipq9574.c @@ -0,0 +1,170 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "ipq9574.h" + +#define CMN_BLK_ADDR 0x0009B780 +#define FREQUENCY_MASK 0xfffffdf0 +#define INTERNAL_48MHZ_CLOCK 0x7 +#define PORT_WRAPPER_MAX 0xFF +#define FIT_CONFIG_NAME_MAX_LEN 128 + +DECLARE_GLOBAL_DATA_PTR; + +void reset_cpu(void) +{ + psci_sys_reset(SYSRESET_COLD); +} + +int print_cpuinfo(void) +{ + return 0; +} + +void lowlevel_init(void) +{ +} + +void ipq_uboot_fdt_fixup(uint32_t machid) +{ + int ret, len = 0, config_nos = 0; + char config[FIT_CONFIG_NAME_MAX_LEN]; + char *config_list[6] = { NULL }; + + switch (machid) { + case MACH_TYPE_IPQ9574_DB_AL01_C2: + config_list[config_nos++] = "config@db-al01-c2"; + config_list[config_nos++] = "config-db-al01-c2"; + break; + case MACH_TYPE_IPQ9574_DB_AL02_C2: + config_list[config_nos++] = "config@db-al02-c2"; + config_list[config_nos++] = "config-db-al02-c2"; + break; + case MACH_TYPE_IPQ9574_RDP455_C11: + config_list[config_nos++] = "config@al02-c11"; + config_list[config_nos++] = "config@rdp455-c11"; + config_list[config_nos++] = "config-rdp455-c11"; + break; + case MACH_TYPE_IPQ9574_RDP455_C12: + config_list[config_nos++] = "config@al02-c12"; + config_list[config_nos++] = "config@rdp455-c12"; + config_list[config_nos++] = "config-rdp455-c12"; + break; + } + + if (config_nos) { + while (config_nos--) { + strlcpy(&config[len], config_list[config_nos], + FIT_CONFIG_NAME_MAX_LEN - len); + len += strnlen(config_list[config_nos], + FIT_CONFIG_NAME_MAX_LEN) + 1; + if (len > FIT_CONFIG_NAME_MAX_LEN) { + printf("skipping uboot fdt fixup err: config name len overflow\n"); + return; + } + } + + /* Open in place with a new length. */ + ret = fdt_open_into(gd->fdt_blob, (void *)gd->fdt_blob, + fdt_totalsize(gd->fdt_blob) + len); + if (ret) + printf("uboot-fdt-fixup: Cannot expand FDT: %s\n", + fdt_strerror(ret)); + + ret = fdt_setprop((void *)gd->fdt_blob, 0, "config_name", + config, len); + if (ret) + printf("uboot-fdt-fixup: unable to set config_name(%d)\n", ret); + } +} + +void ipq_config_cmn_clock(void) +{ + unsigned int reg_val; + /* + * Init CMN clock for ethernet + */ + reg_val = readl(CMN_BLK_ADDR + 4); + reg_val = (reg_val & FREQUENCY_MASK) | INTERNAL_48MHZ_CLOCK; + writel(reg_val, CMN_BLK_ADDR + 0x4); + reg_val = readl(CMN_BLK_ADDR); + reg_val = reg_val | 0x40; + writel(reg_val, CMN_BLK_ADDR); + mdelay(1); + reg_val = reg_val & (~0x40); + writel(reg_val, CMN_BLK_ADDR); + mdelay(1); + writel(0xbf, CMN_BLK_ADDR); + mdelay(1); + writel(0xff, CMN_BLK_ADDR); + mdelay(1); +} + +int get_soc_hw_version(void) +{ + return 0; +} + +#if CONFIG_IS_ENABLED(ARM64) +/* + * Set XN (PTE_BLOCK_PXN | PTE_BLOCK_UXN)bit for all dram regions + * and Peripheral block except uboot code region + */ +static struct mm_region ipq9574_mem_map[] = { + { + /* Peripheral block */ + .virt = 0x0UL, + .phys = 0x0UL, + .size = CFG_SYS_SDRAM_BASE, + .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) | + PTE_BLOCK_NON_SHARE | + PTE_BLOCK_PXN | PTE_BLOCK_UXN + + }, { + /* DDR region upto u-boot CONFIG_TEXT_BASE */ + .virt = CFG_SYS_SDRAM_BASE, + .phys = CFG_SYS_SDRAM_BASE, + .size = CONFIG_TEXT_BASE - CFG_SYS_SDRAM_BASE, + .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | + PTE_BLOCK_INNER_SHARE | + PTE_BLOCK_PXN | PTE_BLOCK_UXN + }, { + /* DDR region U-boot text base */ + .virt = CONFIG_TEXT_BASE, + .phys = CONFIG_TEXT_BASE, + .size = IPQ9574_UBOOT_TEXT_SIZE, + .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | + PTE_BLOCK_INNER_SHARE + }, { + /* + * DDR region after u-boot text base + * added dummy 0xBAD0FF5EUL, + * will update the actual DDR limit + */ + .virt = CONFIG_TEXT_BASE + IPQ9574_UBOOT_TEXT_SIZE, + .phys = CONFIG_TEXT_BASE + IPQ9574_UBOOT_TEXT_SIZE, + .size = 0x0UL, + .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | + PTE_BLOCK_INNER_SHARE | + PTE_BLOCK_PXN | PTE_BLOCK_UXN + }, { + /* List terminator */ + 0, + } +}; + +struct mm_region *mem_map = ipq9574_mem_map; +#endif diff --git a/board/qualcomm/ipq9574/ipq9574.h b/board/qualcomm/ipq9574/ipq9574.h new file mode 100644 index 0000000000..4e1a22eabb --- /dev/null +++ b/board/qualcomm/ipq9574/ipq9574.h @@ -0,0 +1,75 @@ +/* SPDX-License-Identifier: GPL-2.0+ + * + * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#ifndef _IPQ9574_H_ +#define _IPQ9574_H_ + +#include +#include +#include +#include + +/* MACH IDs for various RDPs */ +#define MACH_TYPE_IPQ9574_RDP417 0x8050000 +#define MACH_TYPE_IPQ9574_RDP418 0x8050001 +#define MACH_TYPE_IPQ9574_RDP418_EMMC 0x8050101 +#define MACH_TYPE_IPQ9574_RDP437 0x8050201 +#define MACH_TYPE_IPQ9574_RDP433 0x8050301 +#define MACH_TYPE_IPQ9574_RDP449 0x8050501 +#define MACH_TYPE_IPQ9574_RDP433_MHT_PHY 0x8050601 +#define MACH_TYPE_IPQ9574_RDP453 0x8050701 +#define MACH_TYPE_IPQ9574_RDP454 0x8050801 +#define MACH_TYPE_IPQ9574_RDP433_MHT_SWT 0x8050901 +#define MACH_TYPE_IPQ9574_RDP467 0x8051301 +#define MACH_TYPE_IPQ9574_RDP455_C11 0x8050A01 +#define MACH_TYPE_IPQ9574_RDP455_C12 0x8050B01 +#define MACH_TYPE_IPQ9574_RDP459 0x8050C01 +#define MACH_TYPE_IPQ9574_RDP457 0x8050E01 +#define MACH_TYPE_IPQ9574_RDP456 0x8050F01 +#define MACH_TYPE_IPQ9574_RDP458 0x8050102 +#define MACH_TYPE_IPQ9574_RDP469 0x8051001 +#define MACH_TYPE_IPQ9574_RDP461 0x8051201 +#define MACH_TYPE_IPQ9574_RDP475 0x8050003 +#define MACH_TYPE_IPQ9574_RDP476 0x8050004 +#define MACH_TYPE_IPQ9574_DB_AL01_C1 0x1050000 +#define MACH_TYPE_IPQ9574_DB_AL01_C2 0x1050100 +#define MACH_TYPE_IPQ9574_DB_AL01_C3 0x1050200 +#define MACH_TYPE_IPQ9574_DB_AL02_C1 0x1050001 +#define MACH_TYPE_IPQ9574_DB_AL02_C2 0x1050101 +#define MACH_TYPE_IPQ9574_DB_AL02_C3 0x1050201 + +/* Crashdump Magic registers & values */ +#define TCSR_BOOT_MISC_REG ((u32 *)0x193D100) + +#define DLOAD_MAGIC_COOKIE 0x10 +#define DLOAD_DISABLED 0x40 +#define DLOAD_ENABLE BIT(4) +#define DLOAD_DISABLE (~BIT(4)) +#define CRASHDUMP_RESET BIT(11) + +/* DT Fixup nodes */ +#define LINUX_5_4_NAND_DTS_NODE "/soc/nand@79b0000/" +#define LINUX_5_4_MMC_DTS_NODE "/soc/sdhci@7804000/" +#define LINUX_5_4_USB_DTS_NODE "/soc/usb3@8A00000/dwc3@8A00000/" +#define LINUX_5_4_USB_DR_MODE_FIXUP "/soc/usb3@8A00000/dwc3@8A00000%dr_mode%?peripheral" +#define LINUX_5_4_USB_MAX_SPEED_FIXUP "/soc/usb3@8A00000/dwc3@8A00000%maximum-speed%?high-speed" + +#define LINUX_6_x_NAND_DTS_NODE "/soc@0/nand@79b0000/" +#define LINUX_6_x_MMC_DTS_NODE "/soc@0/mmc@7804000/" +#define LINUX_6_x_USB_DTS_NODE "/soc@0/usb3@8a00000/usb@8a00000/" +#define LINUX_6_x_USB_DR_MODE_FIXUP "/soc@0/usb3@8a00000/usb@8a00000%dr_mode%?peripheral" +#define LINUX_6_x_USB_MAX_SPEED_FIXUP "/soc@0/usb3@8a00000/usb@8a00000%maximum-speed%?high-speed" + +#define LINUX_RSVD_MEM_DTS_NODE "/reserved-memory/" +#define STATUS_OK "status%?okay" +#define STATUS_DISABLED "status%?disabled" + +#define IPQ_CONFIG_SMEM_VERSION_C 1 + +int part_get_info_efi(struct blk_desc *dev_desc, int part, + struct disk_partition *info); +extern struct mm_region *mem_map; + +#endif /* _IPQ9574_H_ */ diff --git a/board/qualcomm/ipq9574/u-boot-x32.lds b/board/qualcomm/ipq9574/u-boot-x32.lds new file mode 100644 index 0000000000..87552a144a --- /dev/null +++ b/board/qualcomm/ipq9574/u-boot-x32.lds @@ -0,0 +1,250 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (c) 2004-2008 Texas Instruments + * + * (C) Copyright 2002 + * Gary Jennejohn, DENX Software Engineering, + */ + +#include +#include + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ +#ifndef CONFIG_CMDLINE + /DISCARD/ : { *(__u_boot_list_2_cmd_*) } +#endif +#if defined(CONFIG_ARMV7_SECURE_BASE) && defined(CONFIG_ARMV7_NONSEC) + /* + * If CONFIG_ARMV7_SECURE_BASE is true, secure code will not + * bundle with u-boot, and code offsets are fixed. Secure zone + * only needs to be copied from the loading address to + * CONFIG_ARMV7_SECURE_BASE, which is the linking and running + * address for secure code. + * + * If CONFIG_ARMV7_SECURE_BASE is undefined, the secure zone will + * be included in u-boot address space, and some absolute address + * were used in secure code. The absolute addresses of the secure + * code also needs to be relocated along with the accompanying u-boot + * code. + * + * So DISCARD is only for CONFIG_ARMV7_SECURE_BASE. + */ + /DISCARD/ : { *(.rel._secure*) } +#endif + . = 0x00000000; + + . = ALIGN(4); + .text : + { + *(.__image_copy_start) + *(.vectors) + CPUDIR/start.o (.text*) + } + + /* This needs to come before *(.text*) */ + .__efi_runtime_start : { + *(.__efi_runtime_start) + } + + .efi_runtime : { + *(.text.efi_runtime*) + *(.rodata.efi_runtime*) + *(.data.efi_runtime*) + } + + .__efi_runtime_stop : { + *(.__efi_runtime_stop) + } + + .text_rest : + { + *(.text*) + } + +#ifdef CONFIG_ARMV7_NONSEC + + /* Align the secure section only if we're going to use it in situ */ + .__secure_start +#ifndef CONFIG_ARMV7_SECURE_BASE + ALIGN(CONSTANT(COMMONPAGESIZE)) +#endif + : { + KEEP(*(.__secure_start)) + } + +#ifndef CONFIG_ARMV7_SECURE_BASE +#define __ARMV7_SECURE_BASE +#define __ARMV7_PSCI_STACK_IN_RAM +#else +#define __ARMV7_SECURE_BASE CONFIG_ARMV7_SECURE_BASE +#endif + + .secure_text __ARMV7_SECURE_BASE : + AT(ADDR(.__secure_start) + SIZEOF(.__secure_start)) + { + *(._secure.text) + } + + .secure_data : AT(LOADADDR(.secure_text) + SIZEOF(.secure_text)) + { + *(._secure.data) + } + +#ifdef CONFIG_ARMV7_PSCI + .secure_stack ALIGN(ADDR(.secure_data) + SIZEOF(.secure_data), + CONSTANT(COMMONPAGESIZE)) (NOLOAD) : +#ifdef __ARMV7_PSCI_STACK_IN_RAM + AT(ADDR(.secure_stack)) +#else + AT(LOADADDR(.secure_data) + SIZEOF(.secure_data)) +#endif + { + KEEP(*(.__secure_stack_start)) + + /* Skip addresses for stack */ + . = . + CONFIG_ARMV7_PSCI_NR_CPUS * ARM_PSCI_STACK_SIZE; + + /* Align end of stack section to page boundary */ + . = ALIGN(CONSTANT(COMMONPAGESIZE)); + + KEEP(*(.__secure_stack_end)) + +#ifdef CONFIG_ARMV7_SECURE_MAX_SIZE + /* + * We are not checking (__secure_end - __secure_start) here, + * as these are the load addresses, and do not include the + * stack section. Instead, use the end of the stack section + * and the start of the text section. + */ + ASSERT((. - ADDR(.secure_text)) <= CONFIG_ARMV7_SECURE_MAX_SIZE, + "Error: secure section exceeds secure memory size"); +#endif + } + +#ifndef __ARMV7_PSCI_STACK_IN_RAM + /* Reset VMA but don't allocate space if we have secure SRAM */ + . = LOADADDR(.secure_stack); +#endif + +#endif + + .__secure_end : AT(ADDR(.__secure_end)) { + *(.__secure_end) + LONG(0x1d1071c); /* Must output something to reset LMA */ + } +#endif + + . = ALIGN(4); + .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } + + . = ALIGN(4); + .data : { + *(.data*) + } + + . = ALIGN(4); + + . = .; + + . = ALIGN(4); + __u_boot_list : { + KEEP(*(SORT(__u_boot_list*))); + } + + . = ALIGN(4); + + .efi_runtime_rel_start : + { + *(.__efi_runtime_rel_start) + } + + .efi_runtime_rel : { + *(.rel*.efi_runtime) + *(.rel*.efi_runtime.*) + } + + .efi_runtime_rel_stop : + { + *(.__efi_runtime_rel_stop) + } + + . = ALIGN(4); + + .image_copy_end : + { + *(.__image_copy_end) + } + + .rel_dyn_start : + { + *(.__rel_dyn_start) + } + + .rel.dyn : { + *(.rel*) + } + + .rel_dyn_end : + { + *(.__rel_dyn_end) + } + + _image_binary_end = .; + + /* + * Deprecated: this MMU section is used by pxa at present but + * should not be used by new boards/CPUs. + */ + . = ALIGN(4096); + .mmutable : { + *(.mmutable) + } + +/* + * Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c + * __bss_base and __bss_limit are for linker only (overlay ordering) + */ + + .bss_start : { + KEEP(*(.__bss_start)); + __bss_base = .; + } + + .bss __bss_base (OVERLAY) : { + *(.bss*) + . = ALIGN(4); + __bss_limit = .; + } + + .bss_end __bss_limit (OVERLAY) : { + KEEP(*(.__bss_end)); + } + + . = ALIGN(4096); + .end : + { + *(.__end) + } + + .dtb : { + . = . + 0x1000; + } + +#ifdef NONCACHED_MEM_REGION_ADDR + . = NONCACHED_MEM_REGION_ADDR; + .noncached_mem : { + . = . + NONCACHED_MEM_REGION_SIZE; + } +#endif + + /DISCARD/ : { *(.dynsym) } + /DISCARD/ : { *(.dynstr*) } + /DISCARD/ : { *(.dynamic*) } + /DISCARD/ : { *(.plt*) } + /DISCARD/ : { *(.interp*) } + /DISCARD/ : { *(.gnu*) } +} diff --git a/board/qualcomm/ipq9574/u-boot-x64.lds b/board/qualcomm/ipq9574/u-boot-x64.lds new file mode 100644 index 0000000000..e25f252498 --- /dev/null +++ b/board/qualcomm/ipq9574/u-boot-x64.lds @@ -0,0 +1,188 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * (C) Copyright 2013 + * David Feng + * + * (C) Copyright 2002 + * Gary Jennejohn, DENX Software Engineering, + */ + +#include +#include + +OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64") +OUTPUT_ARCH(aarch64) +ENTRY(_start) +SECTIONS +{ +#ifdef CONFIG_ARMV8_SECURE_BASE + /DISCARD/ : { *(.rela._secure*) } +#endif + . = 0x00000000; + + . = ALIGN(8); + .text : + { + *(.__image_copy_start) + CPUDIR/start.o (.text*) + } + + /* This needs to come before *(.text*) */ + .efi_runtime : { + __efi_runtime_start = .; + *(.text.efi_runtime*) + *(.rodata.efi_runtime*) + *(.data.efi_runtime*) + __efi_runtime_stop = .; + } + + .text_rest : + { + *(.text*) + } + +#ifdef CONFIG_ARMV8_PSCI + .__secure_start : +#ifndef CONFIG_ARMV8_SECURE_BASE + ALIGN(CONSTANT(COMMONPAGESIZE)) +#endif + { + KEEP(*(.__secure_start)) + } + +#ifndef CONFIG_ARMV8_SECURE_BASE +#define __ARMV8_SECURE_BASE +#define __ARMV8_PSCI_STACK_IN_RAM +#else +#define __ARMV8_SECURE_BASE CONFIG_ARMV8_SECURE_BASE +#endif + .secure_text __ARMV8_SECURE_BASE : + AT(ADDR(.__secure_start) + SIZEOF(.__secure_start)) + { + *(._secure.text) + . = ALIGN(8); + __secure_svc_tbl_start = .; + KEEP(*(._secure_svc_tbl_entries)) + __secure_svc_tbl_end = .; + } + + .secure_data : AT(LOADADDR(.secure_text) + SIZEOF(.secure_text)) + { + *(._secure.data) + } + + .secure_stack ALIGN(ADDR(.secure_data) + SIZEOF(.secure_data), + CONSTANT(COMMONPAGESIZE)) (NOLOAD) : +#ifdef __ARMV8_PSCI_STACK_IN_RAM + AT(ADDR(.secure_stack)) +#else + AT(LOADADDR(.secure_data) + SIZEOF(.secure_data)) +#endif + { + KEEP(*(.__secure_stack_start)) + + . = . + CONFIG_ARMV8_PSCI_NR_CPUS * ARM_PSCI_STACK_SIZE; + + . = ALIGN(CONSTANT(COMMONPAGESIZE)); + + KEEP(*(.__secure_stack_end)) + } + +#ifndef __ARMV8_PSCI_STACK_IN_RAM + . = LOADADDR(.secure_stack); +#endif + + .__secure_end : AT(ADDR(.__secure_end)) { + KEEP(*(.__secure_end)) + LONG(0x1d1071c); /* Must output something to reset LMA */ + } +#endif + + . = ALIGN(8); + .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } + + . = ALIGN(8); + .data : { + *(.data*) + } + + . = ALIGN(8); + + . = .; + + . = ALIGN(8); + __u_boot_list : { + KEEP(*(SORT(__u_boot_list*))); + } + + . = ALIGN(8); + + .efi_runtime_rel : { + __efi_runtime_rel_start = .; + *(.rel*.efi_runtime) + *(.rel*.efi_runtime.*) + __efi_runtime_rel_stop = .; + } + + . = ALIGN(8); + + .image_copy_end : + { + *(.__image_copy_end) + } + + . = ALIGN(8); + + .rel_dyn_start : + { + *(.__rel_dyn_start) + } + + .rela.dyn : { + *(.rela*) + } + + .rel_dyn_end : + { + *(.__rel_dyn_end) + } + + . = ALIGN(8); + + .bss_start : { + KEEP(*(.__bss_start)); + } + + .bss : { + *(.bss*) + . = ALIGN(8); + } + + .bss_end : { + KEEP(*(.__bss_end)); + } + + _end = .; + + .dtb : { + . = . + 0x1000; + } + +#ifdef NONCACHED_MEM_REGION_ADDR + . = NONCACHED_MEM_REGION_ADDR; + .noncached_mem : { + . = . + NONCACHED_MEM_REGION_SIZE; + } +#endif + + /DISCARD/ : { *(.dynsym) } + /DISCARD/ : { *(.dynstr*) } + /DISCARD/ : { *(.dynamic*) } + /DISCARD/ : { *(.plt*) } + /DISCARD/ : { *(.interp*) } + /DISCARD/ : { *(.gnu*) } + +#ifdef CONFIG_LINUX_KERNEL_IMAGE_HEADER +#include "linux-kernel-image-header-vars.h" +#endif +} diff --git a/drivers/clk/qcom/clock-ipq9574.c b/drivers/clk/qcom/clock-ipq9574.c new file mode 100644 index 0000000000..526c14767f --- /dev/null +++ b/drivers/clk/qcom/clock-ipq9574.c @@ -0,0 +1,1320 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* + * Clock drivers for QTI IPQ9574 + * + * (C) Copyright 2022 Sumit Garg + * + * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved. + * + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "clock-qcom.h" + +/*UNIPHY status register*/ +#define QFPROM_CORR_FEATURE_CONFIG_ROW2_MSB 0xA4024 + +#define UNIPHY_0_DISABLE_BIT 23 +#define UNIPHY_1_DISABLE_BIT 24 +#define UNIPHY_2_DISABLE_BIT 25 + +/* GPLL0 clock control registers */ +#define GPLL0_STATUS_ACTIVE BIT(31) + +static struct vote_clk gcc_blsp1_ahb_clk = { + .cbcr_reg = BLSP1_AHB_CBCR, + .ena_vote = APCS_CLOCK_BRANCH_ENA_VOTE, + .vote_bit = BIT(4) | BIT(2) | BIT(1), +}; + +static const struct bcr_regs sdc_regs = { + .cfg_rcgr = SDCC1_APPS_CFG_RCGR, + .cmd_rcgr = SDCC1_APPS_CMD_RCGR, + .M = SDCC1_APPS_M, + .N = SDCC1_APPS_N, + .D = SDCC1_APPS_D, +}; + +static const struct bcr_regs uart0_regs = { + .cfg_rcgr = BLSP1_UART_APPS_CFG_RCGR(0), + .cmd_rcgr = BLSP1_UART_APPS_CMD_RCGR(0), + .M = BLSP1_UART_APPS_M(0), + .N = BLSP1_UART_APPS_N(0), + .D = BLSP1_UART_APPS_D(0), +}; + +static const struct bcr_regs uart1_regs = { + .cfg_rcgr = BLSP1_UART_APPS_CFG_RCGR(1), + .cmd_rcgr = BLSP1_UART_APPS_CMD_RCGR(1), + .M = BLSP1_UART_APPS_M(1), + .N = BLSP1_UART_APPS_N(1), + .D = BLSP1_UART_APPS_D(1), +}; + +static const struct bcr_regs uart2_regs = { + .cfg_rcgr = BLSP1_UART_APPS_CFG_RCGR(2), + .cmd_rcgr = BLSP1_UART_APPS_CMD_RCGR(2), + .M = BLSP1_UART_APPS_M(2), + .N = BLSP1_UART_APPS_N(2), + .D = BLSP1_UART_APPS_D(2), +}; + +static const struct bcr_regs uart3_regs = { + .cfg_rcgr = BLSP1_UART_APPS_CFG_RCGR(3), + .cmd_rcgr = BLSP1_UART_APPS_CMD_RCGR(3), + .M = BLSP1_UART_APPS_M(3), + .N = BLSP1_UART_APPS_N(3), + .D = BLSP1_UART_APPS_D(3), +}; + +static const struct bcr_regs uart4_regs = { + .cfg_rcgr = BLSP1_UART_APPS_CFG_RCGR(4), + .cmd_rcgr = BLSP1_UART_APPS_CMD_RCGR(4), + .M = BLSP1_UART_APPS_M(4), + .N = BLSP1_UART_APPS_N(4), + .D = BLSP1_UART_APPS_D(4), +}; + +static const struct bcr_regs uart5_regs = { + .cfg_rcgr = BLSP1_UART_APPS_CFG_RCGR(5), + .cmd_rcgr = BLSP1_UART_APPS_CMD_RCGR(5), + .M = BLSP1_UART_APPS_M(5), + .N = BLSP1_UART_APPS_N(5), + .D = BLSP1_UART_APPS_D(5), +}; + +static const struct bcr_regs qup1_spi_regs = { + .cfg_rcgr = BLSP1_QUP_SPI_APPS_CFG_RCGR(0), + .cmd_rcgr = BLSP1_QUP_SPI_APPS_CMD_RCGR(0), + .M = BLSP1_QUP_SPI_APPS_M(0), + .N = BLSP1_QUP_SPI_APPS_N(0), + .D = BLSP1_QUP_SPI_APPS_D(0), +}; + +static const struct bcr_regs qup2_spi_regs = { + .cfg_rcgr = BLSP1_QUP_SPI_APPS_CFG_RCGR(1), + .cmd_rcgr = BLSP1_QUP_SPI_APPS_CMD_RCGR(1), + .M = BLSP1_QUP_SPI_APPS_M(1), + .N = BLSP1_QUP_SPI_APPS_N(1), + .D = BLSP1_QUP_SPI_APPS_D(1), +}; + +static const struct bcr_regs qup3_spi_regs = { + .cfg_rcgr = BLSP1_QUP_SPI_APPS_CFG_RCGR(2), + .cmd_rcgr = BLSP1_QUP_SPI_APPS_CMD_RCGR(2), + .M = BLSP1_QUP_SPI_APPS_M(2), + .N = BLSP1_QUP_SPI_APPS_N(2), + .D = BLSP1_QUP_SPI_APPS_D(2), +}; + +static const struct bcr_regs qup4_spi_regs = { + .cfg_rcgr = BLSP1_QUP_SPI_APPS_CFG_RCGR(3), + .cmd_rcgr = BLSP1_QUP_SPI_APPS_CMD_RCGR(3), + .M = BLSP1_QUP_SPI_APPS_M(3), + .N = BLSP1_QUP_SPI_APPS_N(3), + .D = BLSP1_QUP_SPI_APPS_D(3), +}; + +static const struct bcr_regs qup5_spi_regs = { + .cfg_rcgr = BLSP1_QUP_SPI_APPS_CFG_RCGR(4), + .cmd_rcgr = BLSP1_QUP_SPI_APPS_CMD_RCGR(4), + .M = BLSP1_QUP_SPI_APPS_M(4), + .N = BLSP1_QUP_SPI_APPS_N(4), + .D = BLSP1_QUP_SPI_APPS_D(4), +}; + +static const struct bcr_regs qup6_spi_regs = { + .cfg_rcgr = BLSP1_QUP_SPI_APPS_CFG_RCGR(5), + .cmd_rcgr = BLSP1_QUP_SPI_APPS_CMD_RCGR(5), + .M = BLSP1_QUP_SPI_APPS_M(5), + .N = BLSP1_QUP_SPI_APPS_N(5), + .D = BLSP1_QUP_SPI_APPS_D(5), +}; + +static const struct bcr_regs pci_aux_regs = { + .cfg_rcgr = GCC_PCIE_AUX_CFG_RCGR, + .cmd_rcgr = GCC_PCIE_AUX_CMD_RCGR, + .M = GCC_PCIE_AUX_M, + .N = GCC_PCIE_AUX_N, + .D = GCC_PCIE_AUX_D, +}; + +static const struct bcr_regs qup0_i2c_regs = { + .cfg_rcgr = BLSP1_QUP_I2C_APPS_CFG_RCGR(0), + .cmd_rcgr = BLSP1_QUP_I2C_APPS_CMD_RCGR(0), +}; + +static const struct bcr_regs qup1_i2c_regs = { + .cfg_rcgr = BLSP1_QUP_I2C_APPS_CFG_RCGR(1), + .cmd_rcgr = BLSP1_QUP_I2C_APPS_CMD_RCGR(1), +}; + +static const struct bcr_regs qup2_i2c_regs = { + .cfg_rcgr = BLSP1_QUP_I2C_APPS_CFG_RCGR(2), + .cmd_rcgr = BLSP1_QUP_I2C_APPS_CMD_RCGR(2), +}; + +static const struct bcr_regs qup3_i2c_regs = { + .cfg_rcgr = BLSP1_QUP_I2C_APPS_CFG_RCGR(3), + .cmd_rcgr = BLSP1_QUP_I2C_APPS_CMD_RCGR(3), +}; + +static const struct bcr_regs qup4_i2c_regs = { + .cfg_rcgr = BLSP1_QUP_I2C_APPS_CFG_RCGR(4), + .cmd_rcgr = BLSP1_QUP_I2C_APPS_CMD_RCGR(4), +}; + +static const struct bcr_regs qup5_i2c_regs = { + .cfg_rcgr = BLSP1_QUP_I2C_APPS_CFG_RCGR(5), + .cmd_rcgr = BLSP1_QUP_I2C_APPS_CMD_RCGR(5), +}; + +static const struct bcr_regs_v2 gcc_nssnoc_memnoc_bfdcd_regs = { + .cfg_rcgr = GCC_NSSNOC_MEMNOC_BFDCD_CFG_RCGR, + .cmd_rcgr = GCC_NSSNOC_MEMNOC_BFDCD_CMD_RCGR, +}; + +static const struct bcr_regs_v2 gcc_qdss_at_regs = { + .cfg_rcgr = GCC_QDSS_AT_CFG_RCGR, + .cmd_rcgr = GCC_QDSS_AT_CMD_RCGR, +}; + +static const struct bcr_regs_v2 gcc_uniphy_sys_regs = { + .cfg_rcgr = GCC_UNIPHY_SYS_CFG_RCGR, + .cmd_rcgr = GCC_UNIPHY_SYS_CMD_RCGR, +}; + +static const struct bcr_regs_v2 gcc_pcnoc_bfdcd_regs = { + .cfg_rcgr = GCC_PCNOC_BFDCD_CFG_RCGR, + .cmd_rcgr = GCC_PCNOC_BFDCD_CMD_RCGR, +}; + +static const struct bcr_regs_v2 gcc_system_noc_bfdcd_regs = { + .cfg_rcgr = GCC_SYSTEM_NOC_BFDCD_CFG_RCGR, + .cmd_rcgr = GCC_SYSTEM_NOC_BFDCD_CMD_RCGR, +}; + +static const struct bcr_regs_v2 nss_cc_cfg_regs = { + .cfg_rcgr = NSS_CC_CFG_CFG_RCGR, + .cmd_rcgr = NSS_CC_CFG_CMD_RCGR, +}; + +static const struct bcr_regs_v2 nss_cc_ppe_regs = { + .cfg_rcgr = NSS_CC_PPE_CFG_RCGR, + .cmd_rcgr = NSS_CC_PPE_CMD_RCGR, +}; + +static const struct bcr_regs_v2 gcc_qpic_io_macro_regs = { + .cfg_rcgr = GCC_QPIC_IO_MACRO_CFG_RCGR, + .cmd_rcgr = GCC_QPIC_IO_MACRO_CMD_RCGR, +}; + +static const struct bcr_regs gcc_pcie0_axi_m_regs = { + .cfg_rcgr = GCC_PCIE_AXI_M_CFG_RCGR(0), + .cmd_rcgr = GCC_PCIE_AXI_M_CMD_RCGR(0), +}; + +static const struct bcr_regs gcc_pcie1_axi_m_regs = { + .cfg_rcgr = GCC_PCIE_AXI_M_CFG_RCGR(1), + .cmd_rcgr = GCC_PCIE_AXI_M_CMD_RCGR(1), +}; + +static const struct bcr_regs gcc_pcie2_axi_m_regs = { + .cfg_rcgr = GCC_PCIE_AXI_M_CFG_RCGR(2), + .cmd_rcgr = GCC_PCIE_AXI_M_CMD_RCGR(2), +}; + +static const struct bcr_regs gcc_pcie3_axi_m_regs = { + .cfg_rcgr = GCC_PCIE_AXI_M_CFG_RCGR(3), + .cmd_rcgr = GCC_PCIE_AXI_M_CMD_RCGR(3), +}; + +static const struct bcr_regs gcc_pcie0_axi_s_regs = { + .cfg_rcgr = GCC_PCIE_AXI_S_CFG_RCGR(0), + .cmd_rcgr = GCC_PCIE_AXI_S_CMD_RCGR(0), +}; + +static const struct bcr_regs gcc_pcie1_axi_s_regs = { + .cfg_rcgr = GCC_PCIE_AXI_S_CFG_RCGR(1), + .cmd_rcgr = GCC_PCIE_AXI_S_CMD_RCGR(1), +}; + +static const struct bcr_regs gcc_pcie2_axi_s_regs = { + .cfg_rcgr = GCC_PCIE_AXI_S_CFG_RCGR(2), + .cmd_rcgr = GCC_PCIE_AXI_S_CMD_RCGR(2), +}; + +static const struct bcr_regs gcc_pcie3_axi_s_regs = { + .cfg_rcgr = GCC_PCIE_AXI_S_CFG_RCGR(3), + .cmd_rcgr = GCC_PCIE_AXI_S_CMD_RCGR(3), +}; + +static const struct bcr_regs gcc_pcie0_rchng_regs = { + .cfg_rcgr = GCC_PCIE_RCHNG_CFG_RCGR(0), + .cmd_rcgr = GCC_PCIE_RCHNG_CMD_RCGR(0), +}; + +static const struct bcr_regs gcc_pcie1_rchng_regs = { + .cfg_rcgr = GCC_PCIE_RCHNG_CFG_RCGR(1), + .cmd_rcgr = GCC_PCIE_RCHNG_CMD_RCGR(1), +}; + +static const struct bcr_regs gcc_pcie2_rchng_regs = { + .cfg_rcgr = GCC_PCIE_RCHNG_CFG_RCGR(2), + .cmd_rcgr = GCC_PCIE_RCHNG_CMD_RCGR(2), +}; + +static const struct bcr_regs gcc_pcie3_rchng_regs = { + .cfg_rcgr = GCC_PCIE_RCHNG_CFG_RCGR(3), + .cmd_rcgr = GCC_PCIE_RCHNG_CMD_RCGR(3), +}; + +static const struct bcr_regs_v2 nss_cc_port1_rx_regs = { + .cfg_rcgr = NSS_CC_PORT_RX_CFG_RCGR(1), + .cmd_rcgr = NSS_CC_PORT_RX_CMD_RCGR(1), + .div_cdivr = NSS_CC_PORT_RX_DIV_CDIVR(1), +}; + +static const struct bcr_regs_v2 nss_cc_port1_tx_regs = { + .cfg_rcgr = NSS_CC_PORT_TX_CFG_RCGR(1), + .cmd_rcgr = NSS_CC_PORT_TX_CMD_RCGR(1), + .div_cdivr = NSS_CC_PORT_TX_DIV_CDIVR(1), +}; + +static const struct bcr_regs_v2 nss_cc_port2_rx_regs = { + .cfg_rcgr = NSS_CC_PORT_RX_CFG_RCGR(2), + .cmd_rcgr = NSS_CC_PORT_RX_CMD_RCGR(2), + .div_cdivr = NSS_CC_PORT_RX_DIV_CDIVR(2), +}; + +static const struct bcr_regs_v2 nss_cc_port2_tx_regs = { + .cfg_rcgr = NSS_CC_PORT_TX_CFG_RCGR(2), + .cmd_rcgr = NSS_CC_PORT_TX_CMD_RCGR(2), + .div_cdivr = NSS_CC_PORT_TX_DIV_CDIVR(2), +}; + +static const struct bcr_regs_v2 nss_cc_port3_rx_regs = { + .cfg_rcgr = NSS_CC_PORT_RX_CFG_RCGR(3), + .cmd_rcgr = NSS_CC_PORT_RX_CMD_RCGR(3), + .div_cdivr = NSS_CC_PORT_RX_DIV_CDIVR(3), +}; + +static const struct bcr_regs_v2 nss_cc_port3_tx_regs = { + .cfg_rcgr = NSS_CC_PORT_TX_CFG_RCGR(3), + .cmd_rcgr = NSS_CC_PORT_TX_CMD_RCGR(3), + .div_cdivr = NSS_CC_PORT_TX_DIV_CDIVR(3), +}; + +static const struct bcr_regs_v2 nss_cc_port4_rx_regs = { + .cfg_rcgr = NSS_CC_PORT_RX_CFG_RCGR(4), + .cmd_rcgr = NSS_CC_PORT_RX_CMD_RCGR(4), + .div_cdivr = NSS_CC_PORT_RX_DIV_CDIVR(4), +}; + +static const struct bcr_regs_v2 nss_cc_port4_tx_regs = { + .cfg_rcgr = NSS_CC_PORT_TX_CFG_RCGR(4), + .cmd_rcgr = NSS_CC_PORT_TX_CMD_RCGR(4), + .div_cdivr = NSS_CC_PORT_TX_DIV_CDIVR(4), +}; + +static const struct bcr_regs_v2 nss_cc_port5_rx_regs = { + .cfg_rcgr = NSS_CC_PORT_RX_CFG_RCGR(5), + .cmd_rcgr = NSS_CC_PORT_RX_CMD_RCGR(5), + .div_cdivr = NSS_CC_PORT_RX_DIV_CDIVR(5), +}; + +static const struct bcr_regs_v2 nss_cc_port5_tx_regs = { + .cfg_rcgr = NSS_CC_PORT_TX_CFG_RCGR(5), + .cmd_rcgr = NSS_CC_PORT_TX_CMD_RCGR(5), + .div_cdivr = NSS_CC_PORT_TX_DIV_CDIVR(5), +}; + +static const struct bcr_regs_v2 nss_cc_port6_rx_regs = { + .cfg_rcgr = NSS_CC_PORT_RX_CFG_RCGR(6), + .cmd_rcgr = NSS_CC_PORT_RX_CMD_RCGR(6), + .div_cdivr = NSS_CC_PORT_RX_DIV_CDIVR(6), +}; + +static const struct bcr_regs_v2 nss_cc_port6_tx_regs = { + .cfg_rcgr = NSS_CC_PORT_TX_CFG_RCGR(6), + .cmd_rcgr = NSS_CC_PORT_TX_CMD_RCGR(6), + .div_cdivr = NSS_CC_PORT_TX_DIV_CDIVR(6), +}; + +static const struct bcr_regs usb0_mock_utmi_regs = { + .cfg_rcgr = GCC_USB0_MOCK_UTMI_CFG_RCGR, + .cmd_rcgr = GCC_USB0_MOCK_UTMI_CMD_RCGR, + .M = GCC_USB0_MOCK_UTMI_M, + .N = GCC_USB0_MOCK_UTMI_N, + .D = GCC_USB0_MOCK_UTMI_D, +}; + +static const struct bcr_regs usb0_aux_regs = { + .cfg_rcgr = GCC_USB0_AUX_CFG_RCGR, + .cmd_rcgr = GCC_USB0_AUX_CMD_RCGR, + .M = GCC_USB0_AUX_M, + .N = GCC_USB0_AUX_N, + .D = GCC_USB0_AUX_D, +}; + +static const struct bcr_regs usb0_master_regs = { + .cfg_rcgr = GCC_USB0_MASTER_CFG_RCGR, + .cmd_rcgr = GCC_USB0_MASTER_CMD_RCGR, +}; + +static int calc_div_for_nss_port_clk(struct clk *clk, ulong rate, + int *div, int *cdiv) +{ + int pclk_rate = clk_get_parent_rate(clk); + + if (pclk_rate == CLK_125_MHZ) { + switch (rate) { + case CLK_2_5_MHZ: + *div = 9; + *cdiv = 9; + break; + case CLK_25_MHZ: + *div = 9; + break; + case CLK_125_MHZ: + *div = 1; + break; + default: + return -EINVAL; + } + } else if (pclk_rate == CLK_312_5_MHZ) { + switch (rate) { + case CLK_1_25_MHZ: + *div = 19; + *cdiv = 24; + break; + case CLK_12_5_MHZ: + *div = 9; + *cdiv = 4; + break; + case CLK_78_125_MHZ: + *div = 7; + break; + case CLK_125_MHZ: + *div = 4; + break; + case CLK_156_25_MHZ: + *div = 3; + break; + case CLK_312_5_MHZ: + *div = 1; + break; + default: + return -EINVAL; + } + } else { + return -EINVAL; + } + + return 0; +} + +int msm_set_parent(struct clk *clk, struct clk *parent) +{ + assert(clk); + assert(parent); + clk->dev->parent = parent->dev; + dev_set_uclass_priv(parent->dev, parent); + return 0; +} + +ulong msm_get_rate(struct clk *clk) +{ + switch (clk->id) { + case GCC_BLSP1_QUP0_I2C_APPS_CLK: + case GCC_BLSP1_QUP1_I2C_APPS_CLK: + case GCC_BLSP1_QUP2_I2C_APPS_CLK: + case GCC_BLSP1_QUP3_I2C_APPS_CLK: + case GCC_BLSP1_QUP4_I2C_APPS_CLK: + case GCC_BLSP1_QUP5_I2C_APPS_CLK: + clk->rate = CLK_50_MHZ; + break; + } + + return (ulong)clk->rate; +} + +ulong ipq9574_set_rate(struct clk *clk, ulong rate) +{ + struct msm_clk_priv *priv = dev_get_priv(clk->dev); + int ret = 0, src, div = 0, cdiv = 0; + struct clk *pclk = NULL; + + switch (clk->id) { + case GCC_BLSP1_UART0_APPS_CLK: + /* UART: 115200 */ + clk_rcg_set_rate_mnd(priv->base, &uart0_regs, 0, 36, 15625, + SDCC1_SRC_SEL_GPLL0_OUT_MAIN, 16); + break; + case GCC_BLSP1_UART1_APPS_CLK: + /* UART: 115200 */ + clk_rcg_set_rate_mnd(priv->base, &uart1_regs, 0, 36, 15625, + SDCC1_SRC_SEL_GPLL0_OUT_MAIN, 16); + break; + case GCC_BLSP1_UART2_APPS_CLK: + /* UART: 115200 */ + clk_rcg_set_rate_mnd(priv->base, &uart2_regs, 0, 36, 15625, + SDCC1_SRC_SEL_GPLL0_OUT_MAIN, 16); + break; + case GCC_BLSP1_UART3_APPS_CLK: + /* UART: 115200 */ + clk_rcg_set_rate_mnd(priv->base, &uart3_regs, 0, 36, 15625, + SDCC1_SRC_SEL_GPLL0_OUT_MAIN, 16); + break; + case GCC_BLSP1_UART4_APPS_CLK: + /* UART: 115200 */ + clk_rcg_set_rate_mnd(priv->base, &uart4_regs, 0, 36, 15625, + SDCC1_SRC_SEL_GPLL0_OUT_MAIN, 16); + break; + case GCC_BLSP1_UART5_APPS_CLK: + /* UART: 115200 */ + clk_rcg_set_rate_mnd(priv->base, &uart5_regs, 0, 36, 15625, + SDCC1_SRC_SEL_GPLL0_OUT_MAIN, 16); + break; + case GCC_SDCC1_APPS_CLK: + /* SDCC1: 200MHz */ + clk_rcg_set_rate_mnd(priv->base, &sdc_regs, 6, 0, 0, + SDCC1_SRC_SEL_GPLL2_OUT_MAIN, 8); + break; + case GCC_BLSP1_QUP1_SPI_APPS_CLK: + /* QUP1 SPI APPS CLK: 50MHz */ + clk_rcg_set_rate_mnd(priv->base, &qup1_spi_regs, 16, 0, 0, + BLSP1_QUP_SPI_SRC_SEL_GPLL0_OUT_MAIN, 8); + break; + case GCC_BLSP1_QUP2_SPI_APPS_CLK: + /* QUP2 SPI APPS CLK: 50MHz */ + clk_rcg_set_rate_mnd(priv->base, &qup2_spi_regs, 16, 0, 0, + BLSP1_QUP_SPI_SRC_SEL_GPLL0_OUT_MAIN, 8); + break; + case GCC_BLSP1_QUP3_SPI_APPS_CLK: + /* QUP3 SPI APPS CLK: 50MHz */ + clk_rcg_set_rate_mnd(priv->base, &qup3_spi_regs, 16, 0, 0, + BLSP1_QUP_SPI_SRC_SEL_GPLL0_OUT_MAIN, 8); + break; + case GCC_BLSP1_QUP4_SPI_APPS_CLK: + /* QUP4 SPI APPS CLK: 50MHz */ + clk_rcg_set_rate_mnd(priv->base, &qup4_spi_regs, 16, 0, 0, + BLSP1_QUP_SPI_SRC_SEL_GPLL0_OUT_MAIN, 8); + break; + case GCC_BLSP1_QUP5_SPI_APPS_CLK: + /* QUP5 SPI APPS CLK: 50MHz */ + clk_rcg_set_rate_mnd(priv->base, &qup5_spi_regs, 16, 0, 0, + BLSP1_QUP_SPI_SRC_SEL_GPLL0_OUT_MAIN, 8); + break; + case GCC_BLSP1_QUP6_SPI_APPS_CLK: + /* QUP6 SPI APPS CLK: 50MHz */ + clk_rcg_set_rate_mnd(priv->base, &qup6_spi_regs, 16, 0, 0, + BLSP1_QUP_SPI_SRC_SEL_GPLL0_OUT_MAIN, 8); + break; + case GCC_UNIPHY_SYS_CLK: + clk_rcg_set_rate_v2(priv->base, &gcc_uniphy_sys_regs, 1, 0, 0); + break; + case GCC_PCNOC_BFDCD_CLK: + clk_rcg_set_rate_v2(priv->base, &gcc_pcnoc_bfdcd_regs, 15, 0, + GCC_PCNOC_BFDCD_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_SYSTEM_NOC_BFDCD_CLK: + clk_rcg_set_rate_v2(priv->base, &gcc_system_noc_bfdcd_regs, 6, + 0, + GCC_SYSTEM_NOC_BFDCD_SRC_SEL_GPLL4_OUT_MAIN); + break; + case GCC_NSSNOC_MEMNOC_BFDCD_CLK: + clk_rcg_set_rate_v2(priv->base, &gcc_nssnoc_memnoc_bfdcd_regs, + 2, 0, + GCC_NSSNOC_MEMNOC_BFDCD_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_QDSS_AT_CLK: + clk_rcg_set_rate_v2(priv->base, &gcc_qdss_at_regs, 9, 0, + GCC_QDSS_AT_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_QPIC_IO_MACRO_CLK: + src = GCC_QPIC_IO_MACRO_SRC_SEL_GPLL0_OUT_MAIN; + cdiv = 0; + switch (rate) { + case IO_MACRO_CLK_24_MHZ: + src = GCC_QPIC_IO_MACRO_SRC_SEL_XO_CLK; + div = 0; + break; + case IO_MACRO_CLK_100_MHZ: + div = 15; + break; + case IO_MACRO_CLK_200_MHZ: + div = 7; + break; + case IO_MACRO_CLK_228_MHZ: + div = 6; + break; + case IO_MACRO_CLK_266_MHZ: + div = 5; + break; + case IO_MACRO_CLK_320_MHZ: + div = 4; + break; + default: + return -EINVAL; + } + clk_rcg_set_rate_v2(priv->base, &gcc_qpic_io_macro_regs, + div, cdiv, src); + break; + case GCC_BLSP1_QUP0_I2C_APPS_CLK: + /* QUP0 I2C APPS CLK: 50MHz */ + clk_rcg_set_rate(priv->base, &qup0_i2c_regs, + BLSP1_QUP_I2C_50M_DIV_VAL, + BLSP1_QUP_I2C_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_BLSP1_QUP1_I2C_APPS_CLK: + /* QUP1 I2C APPS CLK: 50MHz */ + clk_rcg_set_rate(priv->base, &qup1_i2c_regs, + BLSP1_QUP_I2C_50M_DIV_VAL, + BLSP1_QUP_I2C_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_BLSP1_QUP2_I2C_APPS_CLK: + /* QUP2 I2C APPS CLK: 50MHz */ + clk_rcg_set_rate(priv->base, &qup2_i2c_regs, + BLSP1_QUP_I2C_50M_DIV_VAL, + BLSP1_QUP_I2C_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_BLSP1_QUP3_I2C_APPS_CLK: + /* QUP3 I2C APPS CLK: 50MHz */ + clk_rcg_set_rate(priv->base, &qup3_i2c_regs, + BLSP1_QUP_I2C_50M_DIV_VAL, + BLSP1_QUP_I2C_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_BLSP1_QUP4_I2C_APPS_CLK: + /* QUP4 I2C APPS CLK: 50MHz */ + clk_rcg_set_rate(priv->base, &qup4_i2c_regs, + BLSP1_QUP_I2C_50M_DIV_VAL, + BLSP1_QUP_I2C_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_BLSP1_QUP5_I2C_APPS_CLK: + /* QUP5 I2C APPS CLK: 50MHz */ + clk_rcg_set_rate(priv->base, &qup5_i2c_regs, + BLSP1_QUP_I2C_50M_DIV_VAL, + BLSP1_QUP_I2C_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_PCIE_AUX_CLK: + /* PCIE AUX CLK: 20MHZ */ + clk_rcg_set_rate_mnd(priv->base, &pci_aux_regs, 10, 1, 4, + PCIE_SRC_SEL_UNSUSED_GND, 16); + break; + case GCC_PCIE0_AXI_M_CLK: + /* PCIE0_AXI_M_CLK: 240MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie0_axi_m_regs, 9, + PCIE_SRC_SEL_GPLL4_OUT_MAIN); + break; + case GCC_PCIE1_AXI_M_CLK: + /* PCIE1_AXI_M_CLK: 240MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie1_axi_m_regs, 9, + PCIE_SRC_SEL_GPLL4_OUT_MAIN); + break; + case GCC_PCIE2_AXI_M_CLK: + /* PCIE2_AXI_M_CLK: 342MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie2_axi_m_regs, 6, + PCIE_SRC_SEL_GPLL4_OUT_MAIN); + break; + case GCC_PCIE3_AXI_M_CLK: + /* PCIE3_AXI_M_CLK: 342MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie3_axi_m_regs, 6, + PCIE_SRC_SEL_GPLL4_OUT_MAIN); + break; + case GCC_PCIE0_AXI_S_CLK: + /* PCIE0_AXI_S_CLK: 240MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie0_axi_s_regs, 9, + PCIE_SRC_SEL_GPLL4_OUT_MAIN); + break; + case GCC_PCIE1_AXI_S_CLK: + /* PCIE1_AXI_S_CLK: 240MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie1_axi_s_regs, 9, + PCIE_SRC_SEL_GPLL4_OUT_MAIN); + break; + case GCC_PCIE2_AXI_S_CLK: + /* PCIE2_AXI_S_CLK: 240MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie2_axi_s_regs, 9, + PCIE_SRC_SEL_GPLL4_OUT_MAIN); + break; + case GCC_PCIE3_AXI_S_CLK: + /* PCIE3_AXI_S_CLK: 240MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie3_axi_s_regs, 9, + PCIE_SRC_SEL_GPLL4_OUT_MAIN); + break; + case GCC_PCIE0_RCHNG_CLK: + /* PCIE0_RCHNG_CLK: 100MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie0_rchng_regs, 15, + PCIE_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_PCIE1_RCHNG_CLK: + /* PCIE1_RCHNG_CLK: 100MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie1_rchng_regs, 15, + PCIE_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_PCIE2_RCHNG_CLK: + /* PCIE2_RCHNG_CLK: 100MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie2_rchng_regs, 15, + PCIE_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_PCIE3_RCHNG_CLK: + /* PCIE3_RCHNG_CLK: 100MHZ */ + clk_rcg_set_rate(priv->base, &gcc_pcie3_rchng_regs, 15, + PCIE_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_USB0_MASTER_CLK: + clk_rcg_set_rate(priv->base, &usb0_master_regs, 4, + USB0_MASTER_SRC_SEL_GPLL0_OUT_MAIN); + break; + case GCC_USB0_MOCK_UTMI_CLK: + clk_rcg_set_rate_mnd(priv->base, &usb0_mock_utmi_regs, 0, 0, 0, + USB0_MOCK_UTMI_SRC_SEL_XO, 8); + break; + case GCC_USB0_AUX_CLK: + clk_rcg_set_rate_mnd(priv->base, &usb0_aux_regs, 0, 0, 0, + USB0_AUX_SRC_SEL_XO, 16); + break; + + /* + * NSS controlled clock + */ + case NSS_CC_CFG_CLK: + clk_rcg_set_rate_v2(priv->base, &nss_cc_cfg_regs, 15, 0, + NSS_CC_CFG_SRC_SEL_GCC_GPLL0_OUT_AUX); + break; + case NSS_CC_PPE_CLK: + clk_rcg_set_rate_v2(priv->base, &nss_cc_ppe_regs, 1, 0, + NSS_CC_PPE_SRC_SEL_BIAS_PLL_UBI_NC_CLK); + break; + case NSS_CC_PORT1_RX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port1_rx_regs, div, + cdiv, + NSS_CC_PORT1_RX_SRC_SEL_UNIPHY0_NSS_RX_CLK); + break; + case NSS_CC_PORT1_TX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port1_tx_regs, div, + cdiv, + NSS_CC_PORT1_TX_SRC_SEL_UNIPHY0_NSS_TX_CLK); + break; + case NSS_CC_PORT2_RX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port2_rx_regs, div, + cdiv, + NSS_CC_PORT1_RX_SRC_SEL_UNIPHY0_NSS_RX_CLK); + break; + case NSS_CC_PORT2_TX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port2_tx_regs, div, + cdiv, + NSS_CC_PORT1_TX_SRC_SEL_UNIPHY0_NSS_TX_CLK); + break; + case NSS_CC_PORT3_RX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port3_rx_regs, div, + cdiv, + NSS_CC_PORT1_RX_SRC_SEL_UNIPHY0_NSS_RX_CLK); + break; + case NSS_CC_PORT3_TX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port3_tx_regs, div, + cdiv, + NSS_CC_PORT1_TX_SRC_SEL_UNIPHY0_NSS_TX_CLK); + break; + case NSS_CC_PORT4_RX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port4_rx_regs, div, + cdiv, + NSS_CC_PORT1_RX_SRC_SEL_UNIPHY0_NSS_RX_CLK); + break; + case NSS_CC_PORT4_TX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port4_tx_regs, div, + cdiv, + NSS_CC_PORT1_TX_SRC_SEL_UNIPHY0_NSS_TX_CLK); + break; + case NSS_CC_PORT5_RX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + + pclk = clk_get_parent(clk); + if (!pclk) { + ret = -ENODEV; + break; + } + + if (pclk->id == UNIPHY0_NSS_RX_CLK) { + src = NSS_CC_PORT5_RX_SRC_SEL_UNIPHY0_NSS_RX_CLK; + } else if (pclk->id == UNIPHY1_NSS_RX_CLK) { + src = NSS_CC_PORT5_RX_SRC_SEL_UNIPHY1_NSS_RX_CLK; + } else { + ret = -EINVAL; + break; + } + clk_rcg_set_rate_v2(priv->base, &nss_cc_port5_rx_regs, div, + cdiv, src); + break; + case NSS_CC_PORT5_TX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + + pclk = clk_get_parent(clk); + if (!pclk) { + ret = -ENODEV; + break; + } + + if (pclk->id == UNIPHY0_NSS_TX_CLK) { + src = NSS_CC_PORT5_TX_SRC_SEL_UNIPHY0_NSS_TX_CLK; + } else if (pclk->id == UNIPHY1_NSS_TX_CLK) { + src = NSS_CC_PORT5_TX_SRC_SEL_UNIPHY1_NSS_TX_CLK; + } else { + ret = -EINVAL; + break; + } + clk_rcg_set_rate_v2(priv->base, &nss_cc_port5_tx_regs, div, + cdiv, src); + break; + case NSS_CC_PORT6_RX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port6_rx_regs, + div, cdiv, + NSS_CC_PORT6_RX_SRC_SEL_UNIPHY2_NSS_RX_CLK); + break; + case NSS_CC_PORT6_TX_CLK: + ret = calc_div_for_nss_port_clk(clk, rate, &div, &cdiv); + if (ret < 0) + return ret; + clk_rcg_set_rate_v2(priv->base, &nss_cc_port6_tx_regs, + div, cdiv, + NSS_CC_PORT6_TX_SRC_SEL_UNIPHY2_NSS_TX_CLK); + break; + + case UNIPHY0_NSS_RX_CLK: + case UNIPHY0_NSS_TX_CLK: + case UNIPHY1_NSS_RX_CLK: + case UNIPHY1_NSS_TX_CLK: + case UNIPHY2_NSS_RX_CLK: + case UNIPHY2_NSS_TX_CLK: + if (rate == CLK_125_MHZ) + clk->rate = CLK_125_MHZ; + else if (rate == CLK_312_5_MHZ) + clk->rate = CLK_312_5_MHZ; + else + ret = -EINVAL; + break; + default: + ret = -EINVAL; + } + + return ret; +} + +int ipq9574_clk_enable(struct clk *clk) +{ + struct msm_clk_priv *priv = dev_get_priv(clk->dev); + + switch (clk->id) { + case GCC_BLSP1_AHB_CLK: + clk_enable_vote_clk(priv->base, &gcc_blsp1_ahb_clk); + break; + case GCC_BLSP1_QUP1_SPI_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_SPI_APPS_CBCR(0)); + break; + case GCC_BLSP1_QUP2_SPI_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_SPI_APPS_CBCR(1)); + break; + case GCC_BLSP1_QUP3_SPI_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_SPI_APPS_CBCR(2)); + break; + case GCC_BLSP1_QUP4_SPI_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_SPI_APPS_CBCR(3)); + break; + case GCC_BLSP1_QUP5_SPI_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_SPI_APPS_CBCR(4)); + break; + case GCC_BLSP1_QUP6_SPI_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_SPI_APPS_CBCR(5)); + break; + case GCC_SDCC1_APPS_CLK: + clk_enable_cbc(priv->base + SDCC1_APPS_CBCR); + break; + case GCC_MEM_NOC_NSSNOC_CLK: + clk_enable_cbc(priv->base + GCC_MEM_NOC_NSSNOC_CBCR); + break; + case GCC_NSSCFG_CLK: + clk_enable_cbc(priv->base + GCC_NSSCFG_CBCR); + break; + case GCC_NSSNOC_ATB_CLK: + clk_enable_cbc(priv->base + GCC_NSSNOC_ATB_CBCR); + break; + case GCC_NSSNOC_MEM_NOC_1_CLK: + clk_enable_cbc(priv->base + GCC_NSSNOC_MEM_NOC_1_CBCR); + break; + case GCC_NSSNOC_MEMNOC_CLK: + clk_enable_cbc(priv->base + GCC_NSSNOC_MEMNOC_CBCR); + break; + case GCC_NSSNOC_QOSGEN_REF_CLK: + clk_enable_cbc(priv->base + GCC_NSSNOC_QOSGEN_REF_CBCR); + break; + case GCC_NSSNOC_TIMEOUT_REF_CLK: + clk_enable_cbc(priv->base + GCC_NSSNOC_TIMEOUT_REF_CBCR); + break; + case GCC_CMN_12GPLL_AHB_CLK: + clk_enable_cbc(priv->base + GCC_CMN_12GPLL_AHB_CBCR); + break; + case GCC_CMN_12GPLL_SYS_CLK: + clk_enable_cbc(priv->base + GCC_CMN_12GPLL_SYS_CBCR); + break; + case GCC_UNIPHY0_SYS_CLK: + if (readl(QFPROM_CORR_FEATURE_CONFIG_ROW2_MSB) & + BIT(UNIPHY_0_DISABLE_BIT)) + break; + clk_enable_cbc(priv->base + GCC_UNIPHY_SYS_CBCR(0)); + break; + case GCC_UNIPHY0_AHB_CLK: + if (readl(QFPROM_CORR_FEATURE_CONFIG_ROW2_MSB) & + BIT(UNIPHY_0_DISABLE_BIT)) + break; + clk_enable_cbc(priv->base + GCC_UNIPHY_AHB_CBCR(0)); + break; + case GCC_UNIPHY1_SYS_CLK: + if (readl(QFPROM_CORR_FEATURE_CONFIG_ROW2_MSB) & + BIT(UNIPHY_1_DISABLE_BIT)) + break; + clk_enable_cbc(priv->base + GCC_UNIPHY_SYS_CBCR(1)); + break; + case GCC_UNIPHY1_AHB_CLK: + if (readl(QFPROM_CORR_FEATURE_CONFIG_ROW2_MSB) & + BIT(UNIPHY_1_DISABLE_BIT)) + break; + clk_enable_cbc(priv->base + GCC_UNIPHY_AHB_CBCR(1)); + break; + case GCC_UNIPHY2_SYS_CLK: + if (readl(QFPROM_CORR_FEATURE_CONFIG_ROW2_MSB) & + BIT(UNIPHY_2_DISABLE_BIT)) + break; + clk_enable_cbc(priv->base + GCC_UNIPHY_SYS_CBCR(2)); + break; + case GCC_UNIPHY2_AHB_CLK: + if (readl(QFPROM_CORR_FEATURE_CONFIG_ROW2_MSB) & + BIT(UNIPHY_2_DISABLE_BIT)) + break; + clk_enable_cbc(priv->base + GCC_UNIPHY_AHB_CBCR(2)); + break; + case GCC_MDIO_AHB_CLK: + clk_enable_cbc(priv->base + GCC_MDIO_AHB_CBCR); + break; + case GCC_NSSNOC_SNOC_CLK: + clk_enable_cbc(priv->base + GCC_NSSNOC_SNOC_CBCR); + break; + case GCC_NSSNOC_SNOC_1_CLK: + clk_enable_cbc(priv->base + GCC_NSSNOC_SNOC_1_CBCR); + break; + case GCC_MEM_NOC_SNOC_AXI_CLK: + clk_enable_cbc(priv->base + GCC_MEM_NOC_SNOC_AXI_CBCR); + break; + case GCC_QPIC_IO_MACRO_CLK: + clk_enable_cbc(priv->base + GCC_QPIC_IO_MACRO_CBCR); + break; + case GCC_SDCC1_AHB_CLK: + clk_enable_cbc(priv->base + SDCC1_AHB_CBCR); + break; + case GCC_BLSP1_QUP0_I2C_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_I2C_APPS_CBCR(0)); + break; + case GCC_BLSP1_QUP1_I2C_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_I2C_APPS_CBCR(1)); + break; + case GCC_BLSP1_QUP2_I2C_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_I2C_APPS_CBCR(2)); + break; + case GCC_BLSP1_QUP3_I2C_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_I2C_APPS_CBCR(3)); + break; + case GCC_BLSP1_QUP4_I2C_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_I2C_APPS_CBCR(4)); + break; + case GCC_BLSP1_QUP5_I2C_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_QUP_I2C_APPS_CBCR(5)); + break; + case GCC_PCIE0_AUX_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AUX_CBCR(0)); + break; + case GCC_PCIE1_AUX_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AUX_CBCR(1)); + break; + case GCC_PCIE2_AUX_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AUX_CBCR(2)); + break; + case GCC_PCIE3_AUX_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AUX_CBCR(3)); + break; + case GCC_PCIE0_AHB_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AHB_CBCR(0)); + break; + case GCC_PCIE1_AHB_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AHB_CBCR(1)); + break; + case GCC_PCIE2_AHB_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AHB_CBCR(2)); + break; + case GCC_PCIE3_AHB_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AHB_CBCR(3)); + break; + case GCC_PCIE0_AXI_M_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_M_CBCR(0)); + break; + case GCC_PCIE1_AXI_M_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_M_CBCR(1)); + break; + case GCC_PCIE2_AXI_M_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_M_CBCR(2)); + break; + case GCC_PCIE3_AXI_M_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_M_CBCR(3)); + break; + case GCC_PCIE0_AXI_S_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_S_CBCR(0)); + break; + case GCC_PCIE1_AXI_S_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_S_CBCR(1)); + break; + case GCC_PCIE2_AXI_S_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_S_CBCR(2)); + break; + case GCC_PCIE3_AXI_S_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_S_CBCR(3)); + break; + case GCC_PCIE0_AXI_S_BRIDGE_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_S_BRIDGE_CBCR(0)); + break; + case GCC_PCIE1_AXI_S_BRIDGE_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_S_BRIDGE_CBCR(1)); + break; + case GCC_PCIE2_AXI_S_BRIDGE_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_S_BRIDGE_CBCR(2)); + break; + case GCC_PCIE3_AXI_S_BRIDGE_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_AXI_S_BRIDGE_CBCR(3)); + break; + case GCC_PCIE0_PIPE_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_PIPE_CBCR(0)); + break; + case GCC_PCIE1_PIPE_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_PIPE_CBCR(1)); + break; + case GCC_PCIE2_PIPE_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_PIPE_CBCR(2)); + break; + case GCC_PCIE3_PIPE_CLK: + clk_enable_cbc(priv->base + GCC_PCIE_PIPE_CBCR(3)); + break; + case GCC_SNOC_PCIE0_1LANE_S_CLK: + clk_enable_cbc(priv->base + GCC_SNOC_PCIE0_1LANE_S_CBCR); + break; + case GCC_SNOC_PCIE1_1LANE_S_CLK: + clk_enable_cbc(priv->base + GCC_SNOC_PCIE1_1LANE_S_CBCR); + break; + case GCC_SNOC_PCIE2_2LANE_S_CLK: + clk_enable_cbc(priv->base + GCC_SNOC_PCIE2_2LANE_S_CBCR); + break; + case GCC_SNOC_PCIE3_2LANE_S_CLK: + clk_enable_cbc(priv->base + GCC_SNOC_PCIE3_2LANE_S_CBCR); + break; + case GCC_ANOC_PCIE0_1LANE_M_CLK: + clk_enable_cbc(priv->base + GCC_ANOC_PCIE0_1LANE_M_CBCR); + break; + case GCC_ANOC_PCIE1_1LANE_M_CLK: + clk_enable_cbc(priv->base + GCC_ANOC_PCIE1_1LANE_M_CBCR); + break; + case GCC_ANOC_PCIE2_2LANE_M_CLK: + clk_enable_cbc(priv->base + GCC_ANOC_PCIE2_2LANE_M_CBCR); + break; + case GCC_ANOC_PCIE3_2LANE_M_CLK: + clk_enable_cbc(priv->base + GCC_ANOC_PCIE3_2LANE_M_CBCR); + break; + case GCC_USB0_MASTER_CLK: + clk_enable_cbc(priv->base + GCC_USB0_MASTER_CBCR); + break; + case GCC_USB0_MOCK_UTMI_CLK: + clk_enable_cbc(priv->base + GCC_USB0_MOCK_UTMI_CBCR); + break; + case GCC_USB0_AUX_CLK: + clk_enable_cbc(priv->base + GCC_USB0_AUX_CBCR); + break; + case GCC_USB0_PIPE_CLK: + clk_enable_cbc(priv->base + GCC_USB0_PIPE_CBCR); + break; + case GCC_USB0_SLEEP_CLK: + clk_enable_cbc(priv->base + GCC_USB0_SLEEP_CBCR); + break; + case GCC_SNOC_USB_CLK: + clk_enable_cbc(priv->base + GCC_SNOC_USB_CBCR); + break; + case GCC_ANOC_USB_AXI_CLK: + clk_enable_cbc(priv->base + GCC_ANOC_USB_AXI_CBCR); + break; + case GCC_USB0_PHY_CFG_AHB_CLK: + clk_enable_cbc(priv->base + GCC_USB0_PHY_CFG_AHB_CBCR); + break; + case GCC_BLSP1_UART0_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_UART_APPS_CBCR(0)); + break; + case GCC_BLSP1_UART1_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_UART_APPS_CBCR(1)); + break; + case GCC_BLSP1_UART2_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_UART_APPS_CBCR(2)); + break; + case GCC_BLSP1_UART3_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_UART_APPS_CBCR(3)); + break; + case GCC_BLSP1_UART4_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_UART_APPS_CBCR(4)); + break; + case GCC_BLSP1_UART5_APPS_CLK: + clk_enable_cbc(priv->base + BLSP1_UART_APPS_CBCR(5)); + break; + /* + * NSS controlled clock + */ + case NSS_CC_NSS_CSR_CLK: + clk_enable_cbc(priv->base + NSS_CC_NSS_CSR_CBCR); + break; + case NSS_CC_NSSNOC_NSS_CSR_CLK: + clk_enable_cbc(priv->base + NSS_CC_NSSNOC_NSS_CSR_CBCR); + break; + case NSS_CC_PORT1_MAC_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_MAC_CBCR(1)); + break; + case NSS_CC_PORT2_MAC_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_MAC_CBCR(2)); + break; + case NSS_CC_PORT3_MAC_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_MAC_CBCR(3)); + break; + case NSS_CC_PORT4_MAC_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_MAC_CBCR(4)); + break; + case NSS_CC_PORT5_MAC_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_MAC_CBCR(5)); + break; + case NSS_CC_PORT6_MAC_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_MAC_CBCR(6)); + break; + case NSS_CC_PPE_SWITCH_IPE_CLK: + clk_enable_cbc(priv->base + NSS_CC_PPE_SWITCH_IPE_CBCR); + break; + case NSS_CC_PPE_SWITCH_CLK: + clk_enable_cbc(priv->base + NSS_CC_PPE_SWITCH_CBCR); + break; + case NSS_CC_PPE_SWITCH_CFG_CLK: + clk_enable_cbc(priv->base + NSS_CC_PPE_SWITCH_CFG_CBCR); + break; + case NSS_CC_PPE_EDMA_CLK: + clk_enable_cbc(priv->base + NSS_CC_PPE_EDMA_CBCR); + break; + case NSS_CC_PPE_EDMA_CFG_CLK: + clk_enable_cbc(priv->base + NSS_CC_PPE_EDMA_CFG_CBCR); + break; + case NSS_CC_CRYPTO_PPE_CLK: + clk_enable_cbc(priv->base + NSS_CC_CRYPTO_PPE_CBCR); + break; + case NSS_CC_NSSNOC_PPE_CLK: + clk_enable_cbc(priv->base + NSS_CC_NSSNOC_PPE_CBCR); + break; + case NSS_CC_NSSNOC_PPE_CFG_CLK: + clk_enable_cbc(priv->base + NSS_CC_NSSNOC_PPE_CFG_CBCR); + break; + case NSS_CC_PPE_SWITCH_BTQ_CLK: + clk_enable_cbc(priv->base + NSS_CC_PPE_SWITCH_BTQ_CBCR); + break; + case NSS_CC_PORT1_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_RX_CBCR(1)); + break; + case NSS_CC_PORT1_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_TX_CBCR(1)); + break; + case NSS_CC_PORT2_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_RX_CBCR(2)); + break; + case NSS_CC_PORT2_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_TX_CBCR(2)); + break; + case NSS_CC_PORT3_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_RX_CBCR(3)); + break; + case NSS_CC_PORT3_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_TX_CBCR(3)); + break; + case NSS_CC_PORT4_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_RX_CBCR(4)); + break; + case NSS_CC_PORT4_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_TX_CBCR(4)); + break; + case NSS_CC_PORT5_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_RX_CBCR(5)); + break; + case NSS_CC_PORT5_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_TX_CBCR(5)); + break; + case NSS_CC_PORT6_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_RX_CBCR(6)); + break; + case NSS_CC_PORT6_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_PORT_TX_CBCR(6)); + break; + case NSS_CC_UNIPHY_PORT1_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_RX_CBCR(1)); + break; + case NSS_CC_UNIPHY_PORT1_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_TX_CBCR(1)); + break; + case NSS_CC_UNIPHY_PORT2_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_RX_CBCR(2)); + break; + case NSS_CC_UNIPHY_PORT2_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_TX_CBCR(2)); + break; + case NSS_CC_UNIPHY_PORT3_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_RX_CBCR(3)); + break; + case NSS_CC_UNIPHY_PORT3_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_TX_CBCR(3)); + break; + case NSS_CC_UNIPHY_PORT4_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_RX_CBCR(4)); + break; + case NSS_CC_UNIPHY_PORT4_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_TX_CBCR(4)); + break; + case NSS_CC_UNIPHY_PORT5_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_RX_CBCR(5)); + break; + case NSS_CC_UNIPHY_PORT5_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_TX_CBCR(5)); + break; + case NSS_CC_UNIPHY_PORT6_RX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_RX_CBCR(6)); + break; + case NSS_CC_UNIPHY_PORT6_TX_CLK: + clk_enable_cbc(priv->base + NSS_CC_UNIPHY_PORT_TX_CBCR(6)); + break; + + case UNIPHY0_NSS_RX_CLK: + case UNIPHY0_NSS_TX_CLK: + case UNIPHY1_NSS_RX_CLK: + case UNIPHY1_NSS_TX_CLK: + case UNIPHY2_NSS_RX_CLK: + case UNIPHY2_NSS_TX_CLK: + break; + default: + return -EINVAL; + } + + return 0; +} + +#include +static const struct qcom_reset_map ipq9574_gcc_resets[] = { + [GCC_SDCC1_BCR] = { 0x33000, 0 }, + [GCC_UNIPHY0_SOFT_RESET] = { 0x17050, 0 }, + [GCC_UNIPHY1_SOFT_RESET] = { 0x17060, 0 }, + [GCC_UNIPHY2_SOFT_RESET] = { 0x17070, 0 }, + [GCC_UNIPHY0_XPCS_RESET] = { 0x17050, 2 }, + [GCC_UNIPHY1_XPCS_RESET] = { 0x17060, 2 }, + [GCC_UNIPHY2_XPCS_RESET] = { 0x17070, 2 }, + [NSS_CC_PPE_BTQ_RESET] = { 0x28A08, 20 }, + [NSS_CC_PPE_IPE_RESET] = { 0x28A08, 19 }, + [NSS_CC_PPE_RESET] = { 0x28A08, 18 }, + [NSS_CC_PPE_CFG_RESET] = { 0x28A08, 17 }, + [NSS_CC_PPE_EDMA_RESET] = { 0x28A08, 16 }, + [NSS_CC_PPE_EDMA_CFG_RESET] = { 0x28A08, 15 }, + [NSS_CC_PORT1_MAC_RESET] = { 0x28A08, 11 }, + [NSS_CC_PORT2_MAC_RESET] = { 0x28A08, 10 }, + [NSS_CC_PORT3_MAC_RESET] = { 0x28A08, 9 }, + [NSS_CC_PORT4_MAC_RESET] = { 0x28A08, 8 }, + [NSS_CC_PORT5_MAC_RESET] = { 0x28A08, 7 }, + [NSS_CC_PORT6_MAC_RESET] = { 0x28A08, 6 }, + [NSS_CC_UNIPHY_PORT1_RX_RESET] = { 0x28A24, 23 }, + [NSS_CC_UNIPHY_PORT1_TX_RESET] = { 0x28A24, 22 }, + [NSS_CC_UNIPHY_PORT2_RX_RESET] = { 0x28A24, 21 }, + [NSS_CC_UNIPHY_PORT2_TX_RESET] = { 0x28A24, 20 }, + [NSS_CC_UNIPHY_PORT3_RX_RESET] = { 0x28A24, 19 }, + [NSS_CC_UNIPHY_PORT3_TX_RESET] = { 0x28A24, 18 }, + [NSS_CC_UNIPHY_PORT4_RX_RESET] = { 0x28A24, 17 }, + [NSS_CC_UNIPHY_PORT4_TX_RESET] = { 0x28A24, 16 }, + [NSS_CC_UNIPHY_PORT5_RX_RESET] = { 0x28A24, 15 }, + [NSS_CC_UNIPHY_PORT5_TX_RESET] = { 0x28A24, 14 }, + [NSS_CC_UNIPHY_PORT6_RX_RESET] = { 0x28A24, 13 }, + [NSS_CC_UNIPHY_PORT6_TX_RESET] = { 0x28A24, 12 }, + [NSS_CC_PORT1_RX_RESET] = { 0x28A24, 11 }, + [NSS_CC_PORT1_TX_RESET] = { 0x28A24, 10 }, + [NSS_CC_PORT2_RX_RESET] = { 0x28A24, 9 }, + [NSS_CC_PORT2_TX_RESET] = { 0x28A24, 8 }, + [NSS_CC_PORT3_RX_RESET] = { 0x28A24, 7 }, + [NSS_CC_PORT3_TX_RESET] = { 0x28A24, 6 }, + [NSS_CC_PORT4_RX_RESET] = { 0x28A24, 5 }, + [NSS_CC_PORT4_TX_RESET] = { 0x28A24, 4 }, + [NSS_CC_PORT5_RX_RESET] = { 0x28A24, 3 }, + [NSS_CC_PORT5_TX_RESET] = { 0x28A24, 2 }, + [NSS_CC_PORT6_RX_RESET] = { 0x28A24, 1 }, + [NSS_CC_PORT6_TX_RESET] = { 0x28A24, 0 }, + [GCC_USB_BCR] = { 0x2C000, 0 }, + [GCC_QUSB2_0_PHY_BCR] = { 0x2C068, 0 }, + [GCC_USB0_PHY_BCR] = { 0x2C06C, 0 }, + [GCC_USB3PHY_0_PHY_BCR] = { 0x2C070, 0 }, +}; + +const struct msm_clk_data ipq9574_clk_gcc_data = { + .resets = ipq9574_gcc_resets, + .num_resets = ARRAY_SIZE(ipq9574_gcc_resets), + .enable = ipq9574_clk_enable, + .set_rate = ipq9574_set_rate, +}; + +static const struct udevice_id gcc_ipq9574_of_match[] = { + { + .compatible = "qti,gcc-ipq9574", + .data = (ulong)&ipq9574_clk_gcc_data, + }, + { } +}; + +U_BOOT_DRIVER(clock_ipq9574) = { + .name = "gcc_ipq9574", + .id = UCLASS_NOP, + .of_match = gcc_ipq9574_of_match, + .bind = qcom_cc_bind, + .flags = DM_FLAG_PRE_RELOC, +}; diff --git a/drivers/pinctrl/qcom/pinctrl-ipq9574.c b/drivers/pinctrl/qcom/pinctrl-ipq9574.c new file mode 100644 index 0000000000..75a48f96fc --- /dev/null +++ b/drivers/pinctrl/qcom/pinctrl-ipq9574.c @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2019 Sartura Ltd. + * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. + * + * Author: Robert Marko + */ + +#include +#include +#include +#include +#include "pinctrl-qcom.h" + +#define MAX_PIN_NAME_LEN 32 + +static char pin_name[MAX_PIN_NAME_LEN]; + +static const struct pinctrl_function msm_pinctrl_functions[] = { + {"gpio", 0}, + {"blsp0_uart0", 1}, + {"blsp1_uart2", 2}, + {"blsp0_spi", 1}, + {"blsp1_i2c_scl", 2}, + {"blsp1_i2c_sda", 2}, + {"blsp2_i2c_scl", 2}, + {"blsp2_i2c_sda", 2}, + {"blsp3_i2c_scl", 2}, + {"blsp3_i2c_sda", 2}, + {"blsp4_i2c_scl", 2}, + {"blsp4_i2c_sda", 2}, + {"blsp5_i2c_scl", 1}, + {"blsp5_i2c_sda", 1}, + {"sdc", 1}, + {"qspi", 2}, + {"mdio", 1}, + {"mdc", 1}, +}; + +static const char *ipq9574_get_function_name(struct udevice *dev, + unsigned int selector) +{ + return msm_pinctrl_functions[selector].name; +} + +static const char *ipq9574_get_pin_name(struct udevice *dev, + unsigned int selector) +{ + snprintf(pin_name, MAX_PIN_NAME_LEN, "GPIO_%u", selector); + return pin_name; +} + +static unsigned int ipq9574_get_function_mux(unsigned int selector) +{ + return msm_pinctrl_functions[selector].val; +} + +struct msm_pinctrl_data ipq9574_data = { + .pin_data.pin_count = 64, + .functions_count = ARRAY_SIZE(msm_pinctrl_functions), + .get_function_name = ipq9574_get_function_name, + .get_function_mux = ipq9574_get_function_mux, + .get_pin_name = ipq9574_get_pin_name, +}; + +static const struct udevice_id msm_pinctrl_ids[] = { + { .compatible = "qti,ipq9574-pinctrl", .data = (ulong)&ipq9574_data }, + { /* Sentinal */ } +}; + +U_BOOT_DRIVER(pinctrl_ipq9574) = { + .name = "pinctrl_ipq9574", + .id = UCLASS_NOP, + .of_match = msm_pinctrl_ids, + .ops = &msm_pinctrl_ops, + .bind = msm_pinctrl_bind, +}; diff --git a/include/configs/ipq9574.h b/include/configs/ipq9574.h new file mode 100644 index 0000000000..b914829d44 --- /dev/null +++ b/include/configs/ipq9574.h @@ -0,0 +1,111 @@ +/* SPDX-License-Identifier: GPL-2.0+ + * + * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#include + +#ifndef __ASSEMBLY__ +#include +extern u32 g_board_machid; +extern u32 g_load_addr; +#endif + +/* + * Memory layout + * + * 4000_0000--> _____________________ DRAM Base + * | | + * | | + * | | + * 4A00_0000--> |_____________________| + * | | + * | STACK - 502KB | + * |_____________________| + * | | + * | Global Data | + * |_____________________| + * | | + * | Board Data | + * 4A08_0000--> |_____________________| + * | | + * | HEAP - 1792KB | + * | (inc. ENV) | + * 4A24_0000--> |_____________________| + * | | + * | TEXT - 1792KB | + * 4A40_0000--> |_____________________| + * | | + * | NONCACHED MEM - 1MB | + * 4A50_0000--> |_____________________| + * | | + * | | + * 8000_0000--> |_____________________| DRAM End + */ + +/* + * This cannot come from header file. Have calculated this to be 0x4a077e60 + * and added to configs/ipq9574_mmc_defconfig file + * + * #define CONFIG_CUSTOM_SYS_INIT_SP_ADDR (CONFIG_TEXT_BASE - \ + * CONFIG_SYS_MALLOC_LEN - \ + * CONFIG_ENV_SIZE - \ + * 0x8000 - \ + * GENERATED_GBL_DATA_SIZE) + */ + +#define CFG_SYS_BAUDRATE_TABLE { 115200, 230400, 460800, 921600 } + +#define CFG_SYS_HZ_CLOCK 24000000 +#define CFG_SYS_SDRAM_BASE 0x40000000 +#define CFG_SYS_SDRAM_BASE_MAX_SZ 0xC0000000 +#define KERNEL_START_ADDR CFG_SYS_SDRAM_BASE +#define BOOT_PARAMS_ADDR (CFG_SYS_SDRAM_BASE + 0x100) + +#define CFG_CUSTOM_LOAD_ADDR (g_load_addr) + +#define PHY_ANEG_TIMEOUT 100 +#define FDT_HIGH 0x48500000 + +#define IPQ9574_UBOOT_TEXT_SIZE 0x100000 +#define IPQ9574_UBOOT_END_ADDRESS (CONFIG_TEXT_BASE + IPQ9574_UBOOT_TEXT_SIZE) +#define IPQ9574_DDR_SIZE (0x3UL * SZ_1G) +#define IPQ9574_DDR_UPPER_SIZE_MAX (IPQ9574_DDR_SIZE - \ + (CFG_SYS_SDRAM_BASE - \ + IPQ9574_UBOOT_END_ADDRESS)) + +#define IPQ9574_DDR_LOWER_SIZE (CONFIG_TEXT_BASE - CFG_SYS_SDRAM_BASE) +#define ROOT_FS_PART_NAME "rootfs" + +#define NONCACHED_MEM_REGION_ADDR ((IPQ9574_UBOOT_END_ADDRESS + \ + SZ_1M - 1) & ~(SZ_1M - 1)) +#define NONCACHED_MEM_REGION_SIZE SZ_1M + +/* + * Refer above memory layout, + * Non-Cached Memory should not begin at above 0x4A400000 since upcoming + * memory regions are being used in the other boot components + */ +#if (NONCACHED_MEM_REGION_ADDR > 0x4A400000) +#error "###: Text Segment overlaps with the Non-Cached Region" +#endif + +#ifdef CONFIG_MULTI_DTB_FIT_USER_DEF_ADDR +/* + * CONFIG_MULTI_DTB_FIT_USER_DEF_ADDR - memory used to decompress multi dtb + * NONCACHED_MEM_REGION_ADDR - Non-Cached memory region + * both uses same address space. So both should be same. + * + * Change in CONFIG_TEXT_BASE or CONFIG_TEXT_SIZE various affect this macro. + * So, according define the CONFIG_TEXT_BASE and CONFIG_TEXT_SIZE macros. + */ +#if (CONFIG_MULTI_DTB_FIT_USER_DEF_ADDR != NONCACHED_MEM_REGION_ADDR) +#error "###: CONFIG_MULTI_DTB_FIT_USER_DEF_ADDR != NONCACHED_MEM_REGION_ADDR" +#endif +#endif + +#ifdef CONFIG_IPQ_SMP_CMD_SUPPORT +#define CFG_NR_CPUS 4 +#endif + +#define CFG_EXTRA_ENV_SETTINGS /* nothing */ diff --git a/include/dt-bindings/clock/gcc-ipq9574.h b/include/dt-bindings/clock/gcc-ipq9574.h new file mode 100644 index 0000000000..66787c405a --- /dev/null +++ b/include/dt-bindings/clock/gcc-ipq9574.h @@ -0,0 +1,156 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2018, The Linux Foundation. All rights reserved. + * + * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#ifndef _DT_BINDINGS_CLK_GCC_IPQ9574_H +#define _DT_BINDINGS_CLK_GCC_IPQ9574_H + +/* GCC controlled clock IDs */ +#define GCC_BLSP1_UART0_APPS_CLK 0 +#define GCC_BLSP1_UART1_APPS_CLK 1 +#define GCC_BLSP1_UART2_APPS_CLK 2 +#define GCC_BLSP1_AHB_CLK 3 +#define GCC_SDCC1_APPS_CLK 4 +#define GCC_SDCC1_AHB_CLK 5 +#define GCC_BLSP1_QUP1_SPI_APPS_CLK 6 +#define GCC_BLSP1_QUP2_SPI_APPS_CLK 7 +#define GCC_BLSP1_QUP3_SPI_APPS_CLK 8 +#define GCC_BLSP1_QUP4_SPI_APPS_CLK 9 +#define GCC_BLSP1_QUP5_SPI_APPS_CLK 10 +#define GCC_BLSP1_QUP6_SPI_APPS_CLK 11 +#define GCC_NSSNOC_MEMNOC_BFDCD_CLK 12 +#define GCC_QDSS_AT_CLK 13 +#define GCC_MEM_NOC_NSSNOC_CLK 14 +#define GCC_NSSCFG_CLK 15 +#define GCC_NSSNOC_ATB_CLK 16 +#define GCC_NSSNOC_MEM_NOC_1_CLK 17 +#define GCC_NSSNOC_MEMNOC_CLK 18 +#define GCC_NSSNOC_QOSGEN_REF_CLK 19 +#define GCC_NSSNOC_TIMEOUT_REF_CLK 20 +#define GCC_UNIPHY_SYS_CLK 21 +#define GCC_PCNOC_BFDCD_CLK 22 +#define GCC_SYSTEM_NOC_BFDCD_CLK 23 +#define GCC_CMN_12GPLL_AHB_CLK 24 +#define GCC_CMN_12GPLL_SYS_CLK 25 +#define GCC_MDIO_AHB_CLK 26 +#define GCC_NSSNOC_SNOC_CLK 27 +#define GCC_NSSNOC_SNOC_1_CLK 28 +#define GCC_MEM_NOC_SNOC_AXI_CLK 29 +#define GCC_UNIPHY0_SYS_CLK 30 +#define GCC_UNIPHY0_AHB_CLK 31 +#define GCC_UNIPHY1_SYS_CLK 32 +#define GCC_UNIPHY1_AHB_CLK 33 +#define GCC_UNIPHY2_SYS_CLK 34 +#define GCC_UNIPHY2_AHB_CLK 35 +#define GCC_QPIC_IO_MACRO_CLK 36 +#define GCC_BLSP1_QUP0_I2C_APPS_CLK 37 +#define GCC_BLSP1_QUP1_I2C_APPS_CLK 38 +#define GCC_BLSP1_QUP2_I2C_APPS_CLK 39 +#define GCC_BLSP1_QUP3_I2C_APPS_CLK 40 +#define GCC_BLSP1_QUP4_I2C_APPS_CLK 41 +#define GCC_BLSP1_QUP5_I2C_APPS_CLK 42 +#define GCC_PCIE_AUX_CLK 43 +#define GCC_PCIE0_AXI_M_CLK 44 +#define GCC_PCIE0_AXI_S_CLK 45 +#define GCC_PCIE0_AHB_CLK 46 +#define GCC_PCIE0_AUX_CLK 47 +#define GCC_PCIE0_RCHNG_CLK 48 +#define GCC_PCIE1_AXI_M_CLK 49 +#define GCC_PCIE1_AXI_S_CLK 50 +#define GCC_PCIE1_AHB_CLK 51 +#define GCC_PCIE1_AUX_CLK 52 +#define GCC_PCIE1_RCHNG_CLK 53 +#define GCC_PCIE2_AXI_M_CLK 54 +#define GCC_PCIE2_AXI_S_CLK 55 +#define GCC_PCIE2_AHB_CLK 56 +#define GCC_PCIE2_AUX_CLK 57 +#define GCC_PCIE2_RCHNG_CLK 58 +#define GCC_PCIE3_AXI_M_CLK 59 +#define GCC_PCIE3_AXI_S_CLK 60 +#define GCC_PCIE3_AHB_CLK 61 +#define GCC_PCIE3_AUX_CLK 62 +#define GCC_PCIE3_RCHNG_CLK 63 +#define GCC_SNOC_PCIE0_1LANE_S_CLK 64 +#define GCC_SNOC_PCIE1_1LANE_S_CLK 65 +#define GCC_SNOC_PCIE2_2LANE_S_CLK 66 +#define GCC_SNOC_PCIE3_2LANE_S_CLK 67 +#define GCC_ANOC_PCIE0_1LANE_M_CLK 68 +#define GCC_ANOC_PCIE1_1LANE_M_CLK 69 +#define GCC_ANOC_PCIE2_2LANE_M_CLK 70 +#define GCC_ANOC_PCIE3_2LANE_M_CLK 71 +#define GCC_PCIE0_AXI_S_BRIDGE_CLK 72 +#define GCC_PCIE1_AXI_S_BRIDGE_CLK 73 +#define GCC_PCIE2_AXI_S_BRIDGE_CLK 74 +#define GCC_PCIE3_AXI_S_BRIDGE_CLK 75 +#define GCC_PCIE0_PIPE_CLK 76 +#define GCC_PCIE1_PIPE_CLK 77 +#define GCC_PCIE2_PIPE_CLK 78 +#define GCC_PCIE3_PIPE_CLK 79 +#define GCC_USB0_MASTER_CLK 80 +#define GCC_USB0_MOCK_UTMI_CLK 81 +#define GCC_USB0_AUX_CLK 82 +#define GCC_USB0_PIPE_CLK 83 +#define GCC_USB0_SLEEP_CLK 84 +#define GCC_SNOC_USB_CLK 85 +#define GCC_ANOC_USB_AXI_CLK 86 +#define GCC_USB0_PHY_CFG_AHB_CLK 87 +#define GCC_BLSP1_UART3_APPS_CLK 88 +#define GCC_BLSP1_UART4_APPS_CLK 89 +#define GCC_BLSP1_UART5_APPS_CLK 90 + +/* NSS controlled clock IDs */ +#define NSS_CC_CFG_CLK 100 +#define NSS_CC_PPE_CLK 101 +#define NSS_CC_NSS_CSR_CLK 102 +#define NSS_CC_NSSNOC_NSS_CSR_CLK 103 +#define NSS_CC_PORT1_MAC_CLK 104 +#define NSS_CC_PORT2_MAC_CLK 105 +#define NSS_CC_PORT3_MAC_CLK 106 +#define NSS_CC_PORT4_MAC_CLK 107 +#define NSS_CC_PORT5_MAC_CLK 108 +#define NSS_CC_PORT6_MAC_CLK 109 +#define NSS_CC_PPE_SWITCH_IPE_CLK 110 +#define NSS_CC_PPE_SWITCH_CLK 111 +#define NSS_CC_PPE_SWITCH_CFG_CLK 112 +#define NSS_CC_PPE_EDMA_CLK 113 +#define NSS_CC_PPE_EDMA_CFG_CLK 114 +#define NSS_CC_CRYPTO_PPE_CLK 115 +#define NSS_CC_NSSNOC_PPE_CLK 116 +#define NSS_CC_NSSNOC_PPE_CFG_CLK 117 +#define NSS_CC_PPE_SWITCH_BTQ_CLK 118 +#define NSS_CC_PORT1_RX_CLK 119 +#define NSS_CC_PORT1_TX_CLK 120 +#define NSS_CC_PORT2_RX_CLK 121 +#define NSS_CC_PORT2_TX_CLK 122 +#define NSS_CC_PORT3_RX_CLK 123 +#define NSS_CC_PORT3_TX_CLK 124 +#define NSS_CC_PORT4_RX_CLK 125 +#define NSS_CC_PORT4_TX_CLK 126 +#define NSS_CC_PORT5_RX_CLK 127 +#define NSS_CC_PORT5_TX_CLK 128 +#define NSS_CC_PORT6_RX_CLK 129 +#define NSS_CC_PORT6_TX_CLK 130 +#define NSS_CC_UNIPHY_PORT1_RX_CLK 131 +#define NSS_CC_UNIPHY_PORT1_TX_CLK 132 +#define NSS_CC_UNIPHY_PORT2_RX_CLK 133 +#define NSS_CC_UNIPHY_PORT2_TX_CLK 134 +#define NSS_CC_UNIPHY_PORT3_RX_CLK 135 +#define NSS_CC_UNIPHY_PORT3_TX_CLK 136 +#define NSS_CC_UNIPHY_PORT4_RX_CLK 137 +#define NSS_CC_UNIPHY_PORT4_TX_CLK 138 +#define NSS_CC_UNIPHY_PORT5_RX_CLK 139 +#define NSS_CC_UNIPHY_PORT5_TX_CLK 140 +#define NSS_CC_UNIPHY_PORT6_RX_CLK 141 +#define NSS_CC_UNIPHY_PORT6_TX_CLK 142 + +#define UNIPHY0_NSS_RX_CLK 200 +#define UNIPHY0_NSS_TX_CLK 201 +#define UNIPHY1_NSS_RX_CLK 202 +#define UNIPHY1_NSS_TX_CLK 203 +#define UNIPHY2_NSS_RX_CLK 204 +#define UNIPHY2_NSS_TX_CLK 205 + +#endif diff --git a/include/dt-bindings/net/qti-ipqsoc.h b/include/dt-bindings/net/qti-ipqsoc.h new file mode 100644 index 0000000000..cd60534e3f --- /dev/null +++ b/include/dt-bindings/net/qti-ipqsoc.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef _DT_BINDINGS_QTI_IPQSOC_H +#define _DT_BINDINGS_QTI_IPQSOC_H + +#define QCA8075_PHY_TYPE 0 +#define QCA8081_PHY_TYPE 1 +#define AQ_PHY_TYPE 2 +#define QCA8033_PHY_TYPE 3 +#define SFP_PHY_TYPE 4 +#define SFP10G_PHY_TYPE 5 +#define SFP2_5G_PHY_TYPE 6 +#define SFP1G_PHY_TYPE 7 +#define QCA8x8x_PHY_TYPE 8 +#define QCA8337_SWITCH_TYPE 9 +#define QCA8x8x_SWITCH_TYPE 10 +#define QCA8x8x_BYPASS_TYPE 11 +#define UNUSED_PHY_TYPE 0xFF + +#endif diff --git a/include/dt-bindings/pinctrl/pinctrl-ipqsoc.h b/include/dt-bindings/pinctrl/pinctrl-ipqsoc.h new file mode 100644 index 0000000000..1a3557f1a8 --- /dev/null +++ b/include/dt-bindings/pinctrl/pinctrl-ipqsoc.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#ifndef _DT_BINDINGS_PINCTRL_IPQSOC_H +#define _DT_BINDINGS_PINCTRL_IPQSOC_H + +/* GPIO Drive Strength */ +#define DRIVE_STRENGTH_2MA 0 +#define DRIVE_STRENGTH_4MA 1 +#define DRIVE_STRENGTH_6MA 2 +#define DRIVE_STRENGTH_8MA 3 +#define DRIVE_STRENGTH_10MA 4 +#define DRIVE_STRENGTH_12MA 5 +#define DRIVE_STRENGTH_14MA 6 +#define DRIVE_STRENGTH_16MA 7 + +#endif diff --git a/include/dt-bindings/reset/ipq9574-reset.h b/include/dt-bindings/reset/ipq9574-reset.h new file mode 100644 index 0000000000..ee464b7807 --- /dev/null +++ b/include/dt-bindings/reset/ipq9574-reset.h @@ -0,0 +1,54 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __IPQ9574_RESET_H__ +#define __IPQ9574_RESET_H__ + +#define GCC_SDCC1_BCR 0 +#define GCC_UNIPHY0_SOFT_RESET 1 +#define GCC_UNIPHY1_SOFT_RESET 2 +#define GCC_UNIPHY2_SOFT_RESET 3 +#define GCC_UNIPHY0_XPCS_RESET 4 +#define GCC_UNIPHY1_XPCS_RESET 5 +#define GCC_UNIPHY2_XPCS_RESET 6 +#define NSS_CC_PPE_BTQ_RESET 7 +#define NSS_CC_PPE_IPE_RESET 8 +#define NSS_CC_PPE_RESET 9 +#define NSS_CC_PPE_CFG_RESET 10 +#define NSS_CC_PPE_EDMA_RESET 11 +#define NSS_CC_PPE_EDMA_CFG_RESET 12 +#define NSS_CC_UNIPHY_PORT1_RX_RESET 13 +#define NSS_CC_UNIPHY_PORT1_TX_RESET 14 +#define NSS_CC_UNIPHY_PORT2_RX_RESET 15 +#define NSS_CC_UNIPHY_PORT2_TX_RESET 16 +#define NSS_CC_UNIPHY_PORT3_RX_RESET 17 +#define NSS_CC_UNIPHY_PORT3_TX_RESET 18 +#define NSS_CC_UNIPHY_PORT4_RX_RESET 19 +#define NSS_CC_UNIPHY_PORT4_TX_RESET 20 +#define NSS_CC_UNIPHY_PORT5_RX_RESET 21 +#define NSS_CC_UNIPHY_PORT5_TX_RESET 22 +#define NSS_CC_UNIPHY_PORT6_RX_RESET 23 +#define NSS_CC_UNIPHY_PORT6_TX_RESET 24 +#define NSS_CC_PORT1_RX_RESET 25 +#define NSS_CC_PORT1_TX_RESET 26 +#define NSS_CC_PORT2_RX_RESET 27 +#define NSS_CC_PORT2_TX_RESET 28 +#define NSS_CC_PORT3_RX_RESET 29 +#define NSS_CC_PORT3_TX_RESET 30 +#define NSS_CC_PORT4_RX_RESET 31 +#define NSS_CC_PORT4_TX_RESET 32 +#define NSS_CC_PORT5_RX_RESET 33 +#define NSS_CC_PORT5_TX_RESET 34 +#define NSS_CC_PORT6_RX_RESET 35 +#define NSS_CC_PORT6_TX_RESET 36 +#define NSS_CC_PORT1_MAC_RESET 37 +#define NSS_CC_PORT2_MAC_RESET 38 +#define NSS_CC_PORT3_MAC_RESET 39 +#define NSS_CC_PORT4_MAC_RESET 40 +#define NSS_CC_PORT5_MAC_RESET 41 +#define NSS_CC_PORT6_MAC_RESET 42 +#define GCC_USB_BCR 43 +#define GCC_QUSB2_0_PHY_BCR 44 +#define GCC_USB0_PHY_BCR 45 +#define GCC_USB3PHY_0_PHY_BCR 46 + +#endif From patchwork Mon Feb 26 10:07:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904334 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=L4hmYSy+; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tjzjk0w8Jz23qD for ; Mon, 26 Feb 2024 23:01:30 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id CD91987E69; Mon, 26 Feb 2024 13:01:25 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="L4hmYSy+"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C9CD087E9F; Mon, 26 Feb 2024 11:09:09 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 9F4B787D6F for ; Mon, 26 Feb 2024 11:09:05 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q5dhWK013271; Mon, 26 Feb 2024 10:09:03 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=CjIDhc9lYhn7drd1hBYIazV3YttX70juX7ldyJ27P2s=; b=L4 hmYSy+RRUZSb1LoGzaRZKgcnkkb9AddDXKpcScSmB/0am4s1uoaDXaXzJDxeuTCV Jz1TNPBUwwTukibEcndinIZ8/2KtpHGGlmWlR8kwgTE/bCL3nDp7jICPwRax+OmU DWnARfgrkmPUqnU9WcI9WckWCweMfDAIQhCSaduZ8uvRo2nnLhcRXbU/Ad4NRZOi XiroRif6GQB2wTlwibkvPee7iI9Lc/F1sFAseskWImUSHAVlthe51Opv4EmrsW91 iT3aFTgkbrZccehbigKXYsKARvAaWUssuolWL9YCwm0AbB/m5rmarwD3KyrVKO+Z RV9upvoTuSynL1x8Wg+A== Received: from nasanppmta01.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxkrjug-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:03 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA92Vs017034 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:02 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:09:00 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Tom Rini Subject: [PATCH 02/10] mach-snapdragon: ipq9574: Add SMEM defines needed for IPQ9574 Date: Mon, 26 Feb 2024 15:37:59 +0530 Message-ID: <20240226100807.1095607-3-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: ktjBVJm1NPfxS4ulmQe87bqB3I5TExWQ X-Proofpoint-GUID: ktjBVJm1NPfxS4ulmQe87bqB3I5TExWQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 phishscore=0 mlxlogscore=771 malwarescore=0 suspectscore=0 bulkscore=0 adultscore=0 spamscore=0 clxscore=1015 priorityscore=1501 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Add few SMEM related defines that will be used for IPQ9574 based boards. Signed-off-by: Varadarajan Narayanan --- include/smem.h | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/include/smem.h b/include/smem.h index b19c534ebc..f305354996 100644 --- a/include/smem.h +++ b/include/smem.h @@ -16,6 +16,84 @@ #ifndef _smemh_ #define _smemh_ +enum { + SMEM_SPINLOCK_ARRAY = 7, + SMEM_AARM_PARTITION_TABLE = 9, + SMEM_HW_SW_BUILD_ID = 137, + SMEM_USABLE_RAM_PARTITION_TABLE = 402, + SMEM_POWER_ON_STATUS_INFO = 403, + SMEM_MACHID_INFO_LOCATION = 425, + SMEM_IMAGE_VERSION_TABLE = 469, + SMEM_BOOT_FLASH_TYPE = 498, + SMEM_BOOT_FLASH_INDEX = 499, + SMEM_BOOT_FLASH_CHIP_SELECT = 500, + SMEM_BOOT_FLASH_BLOCK_SIZE = 501, + SMEM_BOOT_FLASH_DENSITY = 502, + SMEM_BOOT_DUALPARTINFO = 503, + SMEM_PARTITION_TABLE_OFFSET = 504, + SMEM_SPI_FLASH_ADDR_LEN = 505, + SMEM_FIRST_VALID_TYPE = SMEM_SPINLOCK_ARRAY, + SMEM_LAST_VALID_TYPE = SMEM_SPI_FLASH_ADDR_LEN, + SMEM_MAX_SIZE = SMEM_SPI_FLASH_ADDR_LEN + 1, +}; + +enum { + SMEM_BOOT_NO_FLASH = 0, + SMEM_BOOT_NOR_FLASH = 1, + SMEM_BOOT_NAND_FLASH = 2, + SMEM_BOOT_ONENAND_FLASH = 3, + SMEM_BOOT_SDC_FLASH = 4, + SMEM_BOOT_MMC_FLASH = 5, + SMEM_BOOT_SPI_FLASH = 6, + SMEM_BOOT_NORPLUSNAND = 7, + SMEM_BOOT_NORPLUSEMMC = 8, + SMEM_BOOT_QSPI_NAND_FLASH = 11, +}; + +#define BUILD_ID_LEN 32 +#define SOCINFO_VERSION_MAJOR(ver) (((ver) & 0xffff0000) >> 16) +#define SOCINFO_VERSION_MINOR(ver) ((ver) & 0x0000ffff) + +struct smem_pmic_type { + unsigned int pmic_model; + unsigned int pmic_die_revision; +}; + +struct ipq_platform_v1 { + unsigned int format; + unsigned int id; + unsigned int version; + char build_id[BUILD_ID_LEN]; + unsigned int raw_id; + unsigned int raw_version; + unsigned int hw_platform; + unsigned int platform_version; + unsigned int accessory_chip; + unsigned int hw_platform_subtype; +}; + +struct ipq_platform_v2 { + struct ipq_platform_v1 v1; + struct smem_pmic_type pmic_info[3]; + unsigned int foundry_id; +}; + +struct ipq_platform_v3 { + struct ipq_platform_v2 v2; + unsigned int chip_serial; +}; + +union ipq_platform { + struct ipq_platform_v1 v1; + struct ipq_platform_v2 v2; + struct ipq_platform_v3 v3; +}; + +struct smem_machid_info { + unsigned int format; + unsigned int machid; +}; + /* struct smem_ops: Operations for the SMEM uclass */ struct smem_ops { /** From patchwork Mon Feb 26 10:08:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904335 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=ilwvpJkM; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tjzjx4q5lz23qD for ; Mon, 26 Feb 2024 23:01:41 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 35F6A87EE3; Mon, 26 Feb 2024 13:01:26 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="ilwvpJkM"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E310C87EB4; Mon, 26 Feb 2024 11:09:16 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id CE2B087CED for ; Mon, 26 Feb 2024 11:09:12 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q6mJgK015857; Mon, 26 Feb 2024 10:09:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=wMnO2qvh+g16xUL1LhRDwWGVcpraif2weG6YsR/GM8I=; b=il wvpJkMbnx2uMbKXHQF7dncuPw9T3EkraEBHleV0OZCYiqPdkybDsaJtRsjfRMTQ+ EbR1av2n/RrN73EKZN/kaY6vfgiFXm4HNwey7WluYfa4Oq/FPHJU5EgPsdAK7AuT D1ZPqcCUMmZVqQfEKPoaXdvPD6ivGdhwV6hwW4Qh6VfF0svU/0eDc1QZabrIVp3X fE+WWd9f/LyHNNxexq4w5bWWNG2LSbvY29JpVilAg2YRguzRsIO4Q2RGu7+9pmWj i6lt0duXkjrnnXOVFbC2ggXXHbrFnSHlvpgg6eMHsdAMdBV+vRljasaKQ8yZFkE9 XVACcQvkzbz4LQ0FjS1g== Received: from nasanppmta04.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxq0jdw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:06 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA04.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA959P007711 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:05 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:09:02 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Caleb Connolly , Konrad Dybcio , "Lukasz Majewski" , Neil Armstrong , "Sean Anderson" , Sumit Garg , Tom Rini Subject: [PATCH 03/10] clk/qcom: Add support for clock registers in IPQ9574 Date: Mon, 26 Feb 2024 15:38:00 +0530 Message-ID: <20240226100807.1095607-4-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: mCIFv-DzP3x4KrOL-RxpxWGITbBoGRBP X-Proofpoint-ORIG-GUID: mCIFv-DzP3x4KrOL-RxpxWGITbBoGRBP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 bulkscore=0 lowpriorityscore=0 mlxlogscore=913 suspectscore=0 adultscore=0 spamscore=0 clxscore=1015 malwarescore=0 impostorscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean The BCR registers in IPQ9574 are different and have different fields. Add function to program these clocks accordingly. Signed-off-by: Varadarajan Narayanan --- drivers/clk/qcom/clock-qcom.c | 32 ++++++++++++++++++++++++++++++++ drivers/clk/qcom/clock-qcom.h | 8 ++++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/clk/qcom/clock-qcom.c b/drivers/clk/qcom/clock-qcom.c index 7c683e5192..fe60490186 100644 --- a/drivers/clk/qcom/clock-qcom.c +++ b/drivers/clk/qcom/clock-qcom.c @@ -156,6 +156,38 @@ void clk_rcg_set_rate(phys_addr_t base, const struct bcr_regs *regs, int div, clk_bcr_update(base + regs->cmd_rcgr); } +#define CFG_MASK 0x3FFF + +#define CFG_DIVIDER_MASK 0x1F + +/* root set rate for clocks without the MND divider */ +void clk_rcg_set_rate_v2(phys_addr_t base, const struct bcr_regs_v2 *regs, + int div, int cdiv, int source) +{ + u32 cfg; + + /* setup src select and divider */ + cfg = readl(base + regs->cfg_rcgr); + cfg &= ~CFG_MASK; + cfg |= source & CFG_CLK_SRC_MASK; /* Select clock source */ + + /* + * Set the divider; HW permits fraction dividers (+0.5), but + * for simplicity, we will support integers only + */ + if (div) + cfg |= div & CFG_DIVIDER_MASK; + + writel(cfg, base + regs->cfg_rcgr); /* Write new clock configuration */ + + /* Write the common divider clock configuration */ + if (regs->div_cdivr) + writel(cdiv, base + regs->div_cdivr); + + /* Inform h/w to start using the new config. */ + clk_bcr_update(base + regs->cmd_rcgr); +} + const struct freq_tbl *qcom_find_freq(const struct freq_tbl *f, uint rate) { if (!f) diff --git a/drivers/clk/qcom/clock-qcom.h b/drivers/clk/qcom/clock-qcom.h index 01088c1901..95f6162ea4 100644 --- a/drivers/clk/qcom/clock-qcom.h +++ b/drivers/clk/qcom/clock-qcom.h @@ -32,6 +32,12 @@ struct bcr_regs { uintptr_t D; }; +struct bcr_regs_v2 { + uintptr_t cfg_rcgr; + uintptr_t cmd_rcgr; + uintptr_t div_cdivr; +}; + struct freq_tbl { uint freq; uint src; @@ -86,6 +92,8 @@ void clk_rcg_set_rate_mnd(phys_addr_t base, const struct bcr_regs *regs, int div, int m, int n, int source, u8 mnd_width); void clk_rcg_set_rate(phys_addr_t base, const struct bcr_regs *regs, int div, int source); +void clk_rcg_set_rate_v2(phys_addr_t base, const struct bcr_regs_v2 *regs, + int div, int cdiv, int source); static inline void qcom_gate_clk_en(const struct msm_clk_priv *priv, unsigned long id) { From patchwork Mon Feb 26 10:08:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904337 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=ko51ZA93; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TjzkV1ZvXz23qD for ; Mon, 26 Feb 2024 23:02:10 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 0A9B387EF2; Mon, 26 Feb 2024 13:01:27 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="ko51ZA93"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 3FDE187EAC; Mon, 26 Feb 2024 11:09:18 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 4226A87EB0 for ; Mon, 26 Feb 2024 11:09:14 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q8WeVE030410; Mon, 26 Feb 2024 10:09:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=AnwdhXDrpHD6GFxj0elIBgEI8ue921WK+BCrsRJ2HKs=; b=ko 51ZA93dg9RKol4J4xXsN5C92JbE3zyzBmWl5YC5nEWT1L8FN5fttTS5/0E0cKKpu ImikFKR7xDzNxJp266MG+Hecu642GcAOwRkEP6JnFyvIMRci0Moo7uWgHghDCNvr k0DqVAuFnweeuu84CmJ8p+0Z/syyFK4Y7tePPvfN1Tnhw6v+USXhFwoiFuhBYf5r hk0pBvvmGv26aCcwQYq9V4tFgn6N2BJvpDOWckb2VyFfUMQo5BEfYNBKssoslKsW mbKK5BqKCbzzEvkJbtSy4UuXAJ39HOHjP9gHPTJiVa/orE6LH1eHiZSCne8y91Sh 0RZsVrT6TZ5WB1LHoOVg== Received: from nasanppmta05.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxn8j79-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:09 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA05.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA98mp028501 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:08 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:09:05 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Caleb Connolly , Lukasz Majewski , Neil Armstrong , Sean Anderson , Sumit Garg , Tom Rini Subject: [PATCH 04/10] clk/qcom: Include IPQ9574 Date: Mon, 26 Feb 2024 15:38:01 +0530 Message-ID: <20240226100807.1095607-5-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: w7gn4mUFGn3HkZDok7H0MaaXTpFLwgDd X-Proofpoint-GUID: w7gn4mUFGn3HkZDok7H0MaaXTpFLwgDd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=911 bulkscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 mlxscore=0 impostorscore=0 clxscore=1015 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Include the IPQ9574 clock driver into build framework Signed-off-by: Varadarajan Narayanan --- drivers/clk/qcom/Kconfig | 8 ++++++++ drivers/clk/qcom/Makefile | 1 + 2 files changed, 9 insertions(+) diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig index 0df0d1881a..73947e1659 100644 --- a/drivers/clk/qcom/Kconfig +++ b/drivers/clk/qcom/Kconfig @@ -47,6 +47,14 @@ config CLK_QCOM_SDM845 on the Snapdragon 845 SoC. This driver supports the clocks and resets exposed by the GCC hardware block. +config CLK_QCOM_IPQ9574 + select CLK_QCOM + bool "Clock controller driver for QTI IPQ9574" + help + Say Y here to enable support for the Global Clock Controller + on the IPQ9574 SoC. This driver supports the clocks + and resets exposed by the GCC hardware block. + endmenu endif diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile index cb179fdac5..c68abeea9c 100644 --- a/drivers/clk/qcom/Makefile +++ b/drivers/clk/qcom/Makefile @@ -8,3 +8,4 @@ obj-$(CONFIG_CLK_QCOM_APQ8016) += clock-apq8016.o obj-$(CONFIG_CLK_QCOM_APQ8096) += clock-apq8096.o obj-$(CONFIG_CLK_QCOM_IPQ4019) += clock-ipq4019.o obj-$(CONFIG_CLK_QCOM_QCS404) += clock-qcs404.o +obj-$(CONFIG_CLK_QCOM_IPQ9574) += clock-ipq9574.o From patchwork Mon Feb 26 10:08:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904338 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=izONCuCZ; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tjzkg0lWNz23qD for ; Mon, 26 Feb 2024 23:02:18 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 85D1287EFA; Mon, 26 Feb 2024 13:01:27 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="izONCuCZ"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id CE16087EAC; Mon, 26 Feb 2024 11:09:19 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id A2E2787E9C for ; Mon, 26 Feb 2024 11:09:14 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q5etvh005466; Mon, 26 Feb 2024 10:09:12 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=6sja+KdV5NU3kO3EgsE3rpIDIp1yoX9k9BuPbEJwx/k=; b=iz ONCuCZL0gyBojHtGZwQ07OT+iXPMvdzZqsHE7QbdapgoQfzdHeZf8RWt25TyBZMo upCUVtv0BONn4N+wWpfiLJAShCRuU8QkfPnnZifLMS940BAWlCW1H9TRZpzAv4Pe AcZP73H8DiZ8cnrBH1gzrIOhvZr5MgwLMGvHyCbrm1ge1IpZeInWiq0C2+sKusay rXE6p6OZnWFBOGWHFlDdTIVN0tdOMXfXJPYDnKjQtYzUP5mRTcRuI4eT7byclGlS pcMZut/ZCHEqokh7GCTIhQSye/o2PZCgpa5OqEE7GBAvavXbCY7ARCI3mZN8MY/M TWgiolMGLuFjyxRN5xFQ== Received: from nasanppmta05.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxprjs4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:12 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA05.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA9Bk5028529 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:11 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:09:08 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Caleb Connolly , Neil Armstrong , Sumit Garg , Tom Rini Subject: [PATCH 05/10] mach-snapdragon: Update gd->ram_size in msm_fixup_memory Date: Mon, 26 Feb 2024 15:38:02 +0530 Message-ID: <20240226100807.1095607-6-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: H0LIC2VHixHlI6-PJGE-l-IsVLCdw7Jp X-Proofpoint-ORIG-GUID: H0LIC2VHixHlI6-PJGE-l-IsVLCdw7Jp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=699 impostorscore=0 lowpriorityscore=0 phishscore=0 malwarescore=0 adultscore=0 priorityscore=1501 bulkscore=0 mlxscore=0 spamscore=0 suspectscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean * gd->ram_size: msm_fixup_memory calculates the amount of memory present in the system. Update 'gd->ram_size' with the computed value. * Update FDT only if 'blob' is not null Signed-off-by: Varadarajan Narayanan --- arch/arm/mach-snapdragon/dram.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-snapdragon/dram.c b/arch/arm/mach-snapdragon/dram.c index 499dfdf0da..08d681555d 100644 --- a/arch/arm/mach-snapdragon/dram.c +++ b/arch/arm/mach-snapdragon/dram.c @@ -74,10 +74,12 @@ int msm_fixup_memory(void *blob) return -ENODEV; } + gd->ram_size = 0; /* Check validy of RAM */ for (i = 0; i < RAM_NUM_PART_ENTRIES; i++) { p = &ram_ptable->parts[i]; if (p->category == CATEGORY_SDRAM && p->type == TYPE_SYSMEM) { + gd->ram_size += p->size; bank_start[count] = p->start; bank_size[count] = p->size; debug("Detected memory bank %u: start: 0x%llx size: 0x%llx\n", @@ -91,9 +93,9 @@ int msm_fixup_memory(void *blob) return -ENODEV; } - ret = fdt_fixup_memory_banks(blob, bank_start, bank_size, count); - if (ret) - return ret; + if (blob) + return fdt_fixup_memory_banks(blob, bank_start, + bank_size, count); - return 0; + return ret; } From patchwork Mon Feb 26 10:08:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904339 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=L/Uc97fD; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tjzkt0Hscz23qD for ; Mon, 26 Feb 2024 23:02:30 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id ECF5987EF6; Mon, 26 Feb 2024 13:01:27 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="L/Uc97fD"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E88A587E89; Mon, 26 Feb 2024 11:09:21 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id CFA3387CED for ; Mon, 26 Feb 2024 11:09:17 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q5cWVw004729; Mon, 26 Feb 2024 10:09:14 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=QSG9V39/9+TkyhfCgM0u2X1QxQTJcwg7i967T40m0H4=; b=L/ Uc97fDfcaD2lzbFZhtkHCEz4+pCGFLwkuyuuobybhc6ZPq32JT3+6oMPNkj8kiTj ixXXyaKwJ3jLNJtMMQcGcd17AwqwkNJ1p47OVwH1B48kFiWEzTnwJXZ7dD9xMc4R uw3AAuRFUj0eEfQrv3lrHO4TicI4QeaBhA4H/j4y8DH9WS34+1s7EHp3jFW7kriT uK7HUZg6R5gCO1BTUhhGdfdVG1PZvRo0q7Eqz1U4qbHoRKbUICYF1ruJskYLBlWl FNzp+o1JP4na74044ekRLH2AEwGQOiKiD0ZUe5gNHBLRhZJVF2kbeREPTB00LYDM BK8YDuq13CS0XmCyHUsA== Received: from nasanppmta03.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxmgjgb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:14 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA9EOY032073 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:14 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:09:11 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Caleb Connolly , Neil Armstrong , Sumit Garg , Tom Rini Subject: [PATCH 06/10] pinctrl: qcom: Add support for 'pull-down' Date: Mon, 26 Feb 2024 15:38:03 +0530 Message-ID: <20240226100807.1095607-7-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: zkTmp6Rz9TTGkbPyqEfqoOHtSPezIMS0 X-Proofpoint-ORIG-GUID: zkTmp6Rz9TTGkbPyqEfqoOHtSPezIMS0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 malwarescore=0 mlxlogscore=999 impostorscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 mlxscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Add support for 'pull-down' needed for IPQ9574. Signed-off-by: Varadarajan Narayanan Reviewed-by: Caleb Connolly --- drivers/pinctrl/qcom/pinctrl-qcom.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/pinctrl/qcom/pinctrl-qcom.c b/drivers/pinctrl/qcom/pinctrl-qcom.c index dc3d8c4d90..ba53b6f290 100644 --- a/drivers/pinctrl/qcom/pinctrl-qcom.c +++ b/drivers/pinctrl/qcom/pinctrl-qcom.c @@ -37,6 +37,7 @@ static const struct pinconf_param msm_conf_params[] = { { "drive-strength", PIN_CONFIG_DRIVE_STRENGTH, 2 }, { "bias-disable", PIN_CONFIG_BIAS_DISABLE, 0 }, { "bias-pull-up", PIN_CONFIG_BIAS_PULL_UP, 3 }, + { "bias-pull-down", PIN_CONFIG_BIAS_PULL_DOWN, 1 }, }; static int msm_get_functions_count(struct udevice *dev) @@ -104,6 +105,7 @@ static int msm_pinconf_set(struct udevice *dev, unsigned int pin_selector, clrbits_le32(priv->base + GPIO_CONFIG_REG(priv, pin_selector), TLMM_GPIO_PULL_MASK); break; + case PIN_CONFIG_BIAS_PULL_DOWN: case PIN_CONFIG_BIAS_PULL_UP: clrsetbits_le32(priv->base + GPIO_CONFIG_REG(priv, pin_selector), TLMM_GPIO_PULL_MASK, argument); From patchwork Mon Feb 26 10:08:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904340 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=ij/ZSEnV; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tjzl54WPbz23qD for ; Mon, 26 Feb 2024 23:02:41 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id A4BDA87F03; Mon, 26 Feb 2024 13:01:28 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="ij/ZSEnV"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id D101187A80; Mon, 26 Feb 2024 11:09:23 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id C7B3387EAD for ; Mon, 26 Feb 2024 11:09:19 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q80g94012686; Mon, 26 Feb 2024 10:09:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=YiSSVRjgAYHPc3rhKsgXZ+xNWBHnGqeEz7gntWiw3gI=; b=ij /ZSEnVGQ4rACHhZcNKNuG8+V/08iy7rKHjg81476q93TFDJpleDSUt2k7qQGLfNP P6lK04ZybjVSqGaGkmUWxx5/GVzqpiny3YHpKNwDmx7NMlK5pVNxVXRG/2s+tQmZ TaoMDUpO3fEyzqNTlXsn+3bZy241I121zer4PX9+JZ46MzAVwMO7DqtfdNcBZ/HU 4lFUPb/n5VnlQiizzHz5dpst1T7tFfdRCKDVk1auBVGm2X2F7yukIlA+2epxSVfK 0to3EQNEroVrALOnVFW4qrjC4DbtVmXFKgJfXQ+/Q0aA8+EJs4hl6d5Zer7f7lQd 2lncb7UKdfvoZ6f08/rQ== Received: from nasanppmta03.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxq0j97-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:17 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA9GWr032092 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:16 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:09:13 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Caleb Connolly , Neil Armstrong , Sumit Garg , Tom Rini Subject: [PATCH 07/10] pinctrl: qcom: Include IPQ9574 Date: Mon, 26 Feb 2024 15:38:04 +0530 Message-ID: <20240226100807.1095607-8-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: KsnANZgPkHdWT2vbIE8VaZj0VyUnaTDr X-Proofpoint-GUID: KsnANZgPkHdWT2vbIE8VaZj0VyUnaTDr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 impostorscore=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 clxscore=1015 malwarescore=0 mlxlogscore=838 suspectscore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Add support for IPQ9574 under pinctrl/qcom. Signed-off-by: Varadarajan Narayanan --- drivers/pinctrl/qcom/Kconfig | 7 +++++++ drivers/pinctrl/qcom/Makefile | 1 + 2 files changed, 8 insertions(+) diff --git a/drivers/pinctrl/qcom/Kconfig b/drivers/pinctrl/qcom/Kconfig index 2fe6398147..558a4d9bbd 100644 --- a/drivers/pinctrl/qcom/Kconfig +++ b/drivers/pinctrl/qcom/Kconfig @@ -27,6 +27,13 @@ config PINCTRL_QCOM_IPQ4019 Say Y here to enable support for pinctrl on the IPQ4019 SoC, as well as the associated GPIO driver. +config PINCTRL_QCOM_IPQ9574 + bool "Qualcomm IPQ9574 GCC" + select PINCTRL_QCOM + help + Say Y here to enable support for pinctrl on the IPQ9574 SoC, + as well as the associated GPIO driver. + config PINCTRL_QCOM_QCS404 bool "Qualcomm QCS404 GCC" select PINCTRL_QCOM diff --git a/drivers/pinctrl/qcom/Makefile b/drivers/pinctrl/qcom/Makefile index 6d9aca6d7b..90e85510fa 100644 --- a/drivers/pinctrl/qcom/Makefile +++ b/drivers/pinctrl/qcom/Makefile @@ -5,6 +5,7 @@ obj-$(CONFIG_PINCTRL_QCOM) += pinctrl-qcom.o obj-$(CONFIG_PINCTRL_QCOM_APQ8016) += pinctrl-apq8016.o obj-$(CONFIG_PINCTRL_QCOM_IPQ4019) += pinctrl-ipq4019.o +obj-$(CONFIG_PINCTRL_QCOM_IPQ9574) += pinctrl-ipq9574.o obj-$(CONFIG_PINCTRL_QCOM_APQ8096) += pinctrl-apq8096.o obj-$(CONFIG_PINCTRL_QCOM_QCS404) += pinctrl-qcs404.o obj-$(CONFIG_PINCTRL_QCOM_SDM845) += pinctrl-sdm845.o From patchwork Mon Feb 26 10:08:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904341 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=dUC50GK7; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TjzlF41lNz23qD for ; Mon, 26 Feb 2024 23:02:49 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 135A487F0C; Mon, 26 Feb 2024 13:01:30 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="dUC50GK7"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 3B89B87EB0; Mon, 26 Feb 2024 11:09:28 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id C6DDE87CED for ; Mon, 26 Feb 2024 11:09:24 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q9NWit018621; Mon, 26 Feb 2024 10:09:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=qLFEzhEqdU4z7Y1zy+AVFLCiXSBM5ysX2ZI3657888U=; b=dU C50GK7dwnR1O1Edv3KzZoobvVKJjxoYI5lQXDH6ocIzEYkV7uh1NOu2TtwdXweeS wpTWfY62Nc+wKiXAMZZXjxzVsY80PD6jgf6OYnUanqLvzJrJpXgftTgocV78WigK cmaUkbvifLOmmglkTlPtEjIiev3TWSsVCF0QuMN8DDFY5qduk+SZhyD64QpYcEQ9 p6znF6YH89U0Zmdd0OsdanBxtBbWwgDCdD8iYHjpVwqZlEO9LWMjp+9pYp5DfsaI RO8Gy3zj50BZ7DsmMoay38aEcMedHfZ9fsYYma4rmN9MQF50zvFvOzL8lQeMrUsJ pk+EODPYS1An6DF0ELRg== Received: from nasanppmta01.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxp8jqa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:20 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA9JIe017336 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:19 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:09:16 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Caleb Connolly , Jaehoon Chung , "Neil Armstrong" , Peng Fan , "Sean Anderson" , Sumit Garg , Tom Rini Subject: [PATCH 08/10] mmc: msm_sdhci: Handle different vendor cap register offsets Date: Mon, 26 Feb 2024 15:38:05 +0530 Message-ID: <20240226100807.1095607-9-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: WlXfrksgnKMFwDTjLKDMmZvx_nmk1iY1 X-Proofpoint-GUID: WlXfrksgnKMFwDTjLKDMmZvx_nmk1iY1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 suspectscore=0 phishscore=0 adultscore=0 bulkscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean In the IPQ9574, the vendor capabilities register is at a different offset than in other SoCs. Hence add a vendor_cap field to msm_sdhc_variant_info structure to get the correct register offset. Signed-off-by: Varadarajan Narayanan Reviewed-by: Caleb Connolly --- drivers/mmc/msm_sdhci.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/msm_sdhci.c b/drivers/mmc/msm_sdhci.c index fe1e754bfd..9285d412fe 100644 --- a/drivers/mmc/msm_sdhci.c +++ b/drivers/mmc/msm_sdhci.c @@ -48,6 +48,7 @@ struct msm_sdhc { struct msm_sdhc_variant_info { bool mci_removed; + u32 vendor_cap; /* Non standard (?) SDHCI register */ }; DECLARE_GLOBAL_DATA_PTR; @@ -158,7 +159,7 @@ static int msm_sdc_probe(struct udevice *dev) if (core_major >= 1 && core_minor != 0x11 && core_minor != 0x12) { caps = readl(host->ioaddr + SDHCI_CAPABILITIES); caps |= SDHCI_CAN_VDD_300 | SDHCI_CAN_DO_8BIT; - writel(caps, host->ioaddr + SDHCI_VENDOR_SPEC_CAPABILITIES0); + writel(caps, host->ioaddr + var_info->vendor_cap); } ret = mmc_of_parse(dev, &plat->cfg); @@ -219,15 +220,23 @@ static int msm_sdc_bind(struct udevice *dev) static const struct msm_sdhc_variant_info msm_sdhc_mci_var = { .mci_removed = false, + .vendor_cap = SDHCI_VENDOR_SPEC_CAPABILITIES0, }; static const struct msm_sdhc_variant_info msm_sdhc_v5_var = { .mci_removed = true, + .vendor_cap = SDHCI_VENDOR_SPEC_CAPABILITIES0, +}; + +static const struct msm_sdhc_variant_info msm_sdhc_v5_ipq_var = { + .mci_removed = true, + .vendor_cap = 0x21c, }; static const struct udevice_id msm_mmc_ids[] = { { .compatible = "qcom,sdhci-msm-v4", .data = (ulong)&msm_sdhc_mci_var }, { .compatible = "qcom,sdhci-msm-v5", .data = (ulong)&msm_sdhc_v5_var }, + { .compatible = "qti,sdhci-msm-v5", .data = (ulong)&msm_sdhc_v5_ipq_var }, { } }; From patchwork Mon Feb 26 10:08:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904342 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=I6gkqn7J; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TjzlW5vj2z23qD for ; Mon, 26 Feb 2024 23:03:03 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 7813287F12; Mon, 26 Feb 2024 13:01:30 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="I6gkqn7J"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1057387D6F; Mon, 26 Feb 2024 11:09:30 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id D665D87A80 for ; Mon, 26 Feb 2024 11:09:26 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q7Dmns030779; Mon, 26 Feb 2024 10:09:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=LktHpvrEWkFn8+QhgYOWe97PqSUUPd+IcH3etJKv/FM=; b=I6 gkqn7JuWnICJ5WgLa7+ETv1JQzjao9o0j5apxhKE8llyWOaMYd9wyDDKrZvJwpS7 jV7ta3ecf0F7CXjoRiKbXvjTlnVOgXCFcA9WKnsk87+UKczB5C69iN+m2RCHQsM2 eiRbgDO8iQbDeo7SQApu1gpoihfo5CwXqt4Lgc0+F8xVs683hT9b1rIG4ywX3O/C pLrn01nnjgfBXNhS5AKi9+5FCKJQZ0ckbMnh/L8Rr7JsI1d0PyZkRwoRBhr5+QgQ TLAU/nDMdBLFMS6YgNR837xpxhwKOmoJLnp4tG2lmsY+qof9B5uSfm6lRfNineZ5 PbwHIzmuP1LUxd/Xhang== Received: from nasanppmta03.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxm0jeh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:24 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA9NI6032182 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:23 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:09:19 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Caleb Connolly , Jaehoon Chung , "Neil Armstrong" , Peng Fan , "Sean Anderson" , Sumit Garg , Tom Rini Subject: [PATCH 09/10] mmc: msm_sdhci: Reset clocks before reconfiguration Date: Mon, 26 Feb 2024 15:38:06 +0530 Message-ID: <20240226100807.1095607-10-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: UT1ZhHkk_VusPB98tLdM_sJS5n_0-LSi X-Proofpoint-GUID: UT1ZhHkk_VusPB98tLdM_sJS5n_0-LSi X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 mlxlogscore=999 clxscore=1015 impostorscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 mlxscore=0 spamscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean U-Boot has to reconfigure the clocks that were set in the boot loaders. However, in IPQ9574, the clocks have to be reset before they can be reconfigured. Hence add code to do the relevant resets. Signed-off-by: Varadarajan Narayanan Reviewed-by: Caleb Connolly --- drivers/mmc/msm_sdhci.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/mmc/msm_sdhci.c b/drivers/mmc/msm_sdhci.c index 9285d412fe..2e9d521159 100644 --- a/drivers/mmc/msm_sdhci.c +++ b/drivers/mmc/msm_sdhci.c @@ -16,6 +16,7 @@ #include #include #include +#include /* Non-standard registers needed for SDHCI startup */ #define SDCC_MCI_POWER 0x0 @@ -122,10 +123,19 @@ static int msm_sdc_probe(struct udevice *dev) struct msm_sdhc *prv = dev_get_priv(dev); const struct msm_sdhc_variant_info *var_info; struct sdhci_host *host = &prv->host; + struct reset_ctl bcr_rst; u32 core_version, core_minor, core_major; u32 caps; int ret; + ret = reset_get_by_name(dev, "bcr_rst", &bcr_rst); + if (!ret) { + reset_assert(&bcr_rst); + mdelay(10); + reset_deassert(&bcr_rst); + mdelay(10); + } + host->quirks = SDHCI_QUIRK_WAIT_SEND_CMD | SDHCI_QUIRK_BROKEN_R1B; host->max_clk = 0; From patchwork Mon Feb 26 10:08:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Varadarajan Narayanan X-Patchwork-Id: 1904343 X-Patchwork-Delegate: caleb.connolly@linaro.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=dMHZq1Jb; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tjzln5Qx8z23qD for ; Mon, 26 Feb 2024 23:03:17 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 2182087F16; Mon, 26 Feb 2024 13:01:31 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=quicinc.com header.i=@quicinc.com header.b="dMHZq1Jb"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 2D87287D6F; Mon, 26 Feb 2024 11:09:37 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,UPPERCASE_50_75 autolearn=no autolearn_force=no version=3.4.2 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 7BA6F87CED for ; Mon, 26 Feb 2024 11:09:32 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=quic_varada@quicinc.com Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41Q83OgE012004; Mon, 26 Feb 2024 10:09:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=I2tQI0d16z6MfUbnyHYoWJRs7fsedHxWNXXBbWsIj7k=; b=dM HZq1JbuLcSDbKdJ39gQgYgkg23GCs97mZKKvG6+W3ul7tye6dIVpWeQ5nUhtiUib uPj+2KjG9GzzhpHXzqaQ434jdy9ciiqjk5igTn5SB/e/iU3YDUI/3/4fUwqv78c6 nqfDfxTfqHl8r7xTXsuGf2GE/rn8Qke881aG+y+CwaSujav/D6UsZBMHLFMWCjx/ 2UjVcFFv7VCz1Atj3lP1w+QVls9g2HCttvvl4IQMkuWaHJ9nGjMZVuiiOD9quCQO Ls76JDL1hIa0cwE3K4kKOmpbkxbc37vf5H/Ra4qEwXyexmmus/4e/cJoKGscnKch AGAurE67oJljN6SrOHkg== Received: from nasanppmta01.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wgkxmgjew-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:27 +0000 (GMT) Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41QA9Q9t017413 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Feb 2024 10:09:26 GMT Received: from hu-varada-blr.qualcomm.com (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Mon, 26 Feb 2024 02:09:23 -0800 From: Varadarajan Narayanan To: CC: Varadarajan Narayanan , Caleb Connolly , Michal Simek , "Neil Armstrong" , Simon Glass , "Sumit Garg" , Svyatoslav Ryhel , Tom Rini Subject: [PATCH 10/10] board: qualcomm: Add support for IPQ9574 RDP433 Date: Mon, 26 Feb 2024 15:38:07 +0530 Message-ID: <20240226100807.1095607-11-quic_varada@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240226100807.1095607-1-quic_varada@quicinc.com> References: <20240226100807.1095607-1-quic_varada@quicinc.com> MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: aZmaT7hRwF5YB2lwtx8CvwrqTcDIQCS6 X-Proofpoint-ORIG-GUID: aZmaT7hRwF5YB2lwtx8CvwrqTcDIQCS6 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-26_07,2024-02-23_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=885 adultscore=0 spamscore=0 phishscore=0 suspectscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402260076 X-Mailman-Approved-At: Mon, 26 Feb 2024 13:01:24 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Provide the defconfig and include IPQ9574/RDP433 into the build framework. Signed-off-by: Varadarajan Narayanan --- arch/arm/mach-snapdragon/Kconfig | 15 ++++ arch/arm/mach-snapdragon/Makefile | 1 + configs/ipq9574_mmc_defconfig | 118 ++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 configs/ipq9574_mmc_defconfig diff --git a/arch/arm/mach-snapdragon/Kconfig b/arch/arm/mach-snapdragon/Kconfig index ad66710819..a4552028c1 100644 --- a/arch/arm/mach-snapdragon/Kconfig +++ b/arch/arm/mach-snapdragon/Kconfig @@ -90,6 +90,20 @@ config TARGET_QCS404EVB - 1GiB RAM - 8GiB eMMC, uSD slot +config TARGET_IPQ9574 + bool "QTI IPQ9574 SOC" + select OF_BOARD_SETUP + select CLK_QCOM_IPQ9574 + select PINCTRL_QCOM_IPQ9574 + help + Support for IPQ95xx SoC. + - Board Open Platform Specifications. + - Quad Cores A73, max@2.2G, L1@32KB L2@512KB + - DDR3L/DDR4 + - QSPI NAND / NOR / eMMC + - USB 3.0/I2C/UART/PCIe Gen3 2Lane + - 1G/2.5G/10G Ethernet Ports + endchoice source "board/qualcomm/dragonboard410c/Kconfig" @@ -97,5 +111,6 @@ source "board/qualcomm/dragonboard820c/Kconfig" source "board/qualcomm/dragonboard845c/Kconfig" source "board/samsung/starqltechn/Kconfig" source "board/qualcomm/qcs404-evb/Kconfig" +source "board/qualcomm/ipq9574/Kconfig" endif diff --git a/arch/arm/mach-snapdragon/Makefile b/arch/arm/mach-snapdragon/Makefile index 3a3a297c17..a9af8d9ee0 100644 --- a/arch/arm/mach-snapdragon/Makefile +++ b/arch/arm/mach-snapdragon/Makefile @@ -4,6 +4,7 @@ obj-$(CONFIG_SDM845) += sysmap-sdm845.o obj-$(CONFIG_SDM845) += init_sdm845.o +obj-$(CONFIG_TARGET_IPQ9574) += init_ipq9574.o obj-$(CONFIG_TARGET_DRAGONBOARD820C) += sysmap-apq8096.o obj-$(CONFIG_TARGET_DRAGONBOARD410C) += sysmap-apq8016.o obj-y += misc.o diff --git a/configs/ipq9574_mmc_defconfig b/configs/ipq9574_mmc_defconfig new file mode 100644 index 0000000000..0001bd8eae --- /dev/null +++ b/configs/ipq9574_mmc_defconfig @@ -0,0 +1,118 @@ +CONFIG_ARM=y +CONFIG_ARCH_SNAPDRAGON=y +CONFIG_ARCH_64BIT_SUPPORT=y +# CONFIG_ARM64_SUPPORT_AARCH32 is not set +CONFIG_ARM_SMCCC=y +CONFIG_HAS_VBAR=y +CONFIG_SKIP_LOWLEVEL_INIT=y +CONFIG_COUNTER_FREQUENCY=24000000 +CONFIG_IPQ9574=y +CONFIG_TARGET_IPQ9574=y +CONFIG_SYS_MALLOC_F_LEN=0x1000 +CONFIG_SYS_MALLOC_F=y +CONFIG_SYS_LOAD_ADDR=0x50000000 +CONFIG_TEXT_BASE=0x4A240000 +CONFIG_SMEM_BASE_ADDR=0x4AA00000 +CONFIG_NR_DRAM_BANKS=1 +CONFIG_SMEM=y +CONFIG_SYS_MALLOC_LEN=0x180000 +CONFIG_DM_SERIAL=y +CONFIG_DEFAULT_DEVICE_TREE="ipq9574-rdp433-mht-phy" +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_EXPERT=y +CONFIG_SYS_MALLOC_CLEAR_ON_INIT=y +CONFIG_FIT=y +CONFIG_FIT_VERBOSE=y +CONFIG_OF_LIBFDT=y +CONFIG_OF_LIBFDT_OVERLAY=y +# CONFIG_BOOTSTD_BOOTCOMMAND is not set +# CONFIG_PSCI_RESET is not set +CONFIG_FIRMWARE=y +CONFIG_DM=y +CONFIG_OF_CONTROL=y +CONFIG_FIT_SIGNATURE=n +CONFIG_TOOLS_LIBCRYPTO=y +CONFIG_TOOLS_FIT_RSASSA_PSS=n +CONFIG_TOOLS_FIT_SIGNATURE=n +CONFIG_TOOLS_SHA1=n +CONFIG_TOOLS_SHA256=n +CONFIG_TOOLS_SHA384=n +CONFIG_TOOLS_SHA512=n +CONFIG_SYS_EXTRA_OPTIONS="" +CONFIG_SYS_PROMPT="IPQ9574# " +# CONFIG_USE_PREBOOT is not set +CONFIG_BOOTDELAY=5 +CONFIG_USE_BOOTARGS=y +CONFIG_USE_BOOTCOMMAND=y +CONFIG_BOOTCOMMAND="" +CONFIG_BOOTARGS="console=ttyMSM0,115200n8" +# CONFIG_BOOTSTD is not set +CONFIG_HUSH_PARSER=y +CONFIG_SYS_MAXARGS=64 +CONFIG_OF_BOARD_FIXUP=y +CONFIG_STACKPROTECTOR=y +CONFIG_MSM_SMEM=y +CONFIG_SYS_CUSTOM_LDSCRIPT=y +CONFIG_SYS_LDSCRIPT="board/qualcomm/ipq9574/u-boot-x64.lds" +CONFIG_OF_LIST="ipq9574-rdp433-mht-phy" +CONFIG_DTB_RESELECT=y +CONFIG_MULTI_DTB_FIT=y +CONFIG_MULTI_DTB_FIT_LZO=y +CONFIG_MULTI_DTB_FIT_USER_DEFINED_AREA=y +CONFIG_MULTI_DTB_FIT_USER_DEF_ADDR=0x4A400000 +CONFIG_MULTI_DTB_FIT_UNCOMPRESS_SZ=0x100000 +# CONFIG_CMD_BOOTI is not set +CONFIG_ENV_OVERWRITE=y +CONFIG_CLK=y +CONFIG_CLK_QCOM=y +CONFIG_CLK_IPQ9574=y +# CONFIG_OF_EMBED is not set +CONFIG_PINCTRL=y +CONFIG_PINCTRL_QCOM=y +CONFIG_PINCTRL_QCOM_IPQ9574=y +CONFIG_IPQ_MMC=y +CONFIG_MMC_SDHCI=y +CONFIG_GPIO=y +# CONFIG_CONFIG_GPIO_EXTRA_HEADER is not set +CONFIG_DM_GPIO=y +CONFIG_MMC_SDHCI_MSM=y +# CONFIG_EFI_LOADER is not set +# CONFIG_MMC_HS200_SUPPORT is not set +CONFIG_EFI_PARTITION=y +CONFIG_EFI_PARTITION_ENTRIES_NUMBERS=64 +CONFIG_MSM_GPIO=y +CONFIG_PINCONF=y +# CONFIG_CMD_GPIO is not set +CONFIG_MSM_SERIAL=y +CONFIG_STACK_SIZE=0x80000 +CONFIG_SYS_BOOTM_LEN=0x4000000 +CONFIG_DM_RESET=y +CONFIG_RAM_NUM_PART_ENTRIES=32 +CONFIG_RAM_PART_NAME_LENGTH=16 +CONFIG_RESET_QCOM=y +CONFIG_NUM_ALT_PARTITION=16 +CONFIG_BOARD_TYPES=y +CONFIG_BOARD_EARLY_INIT_F=y +CONFIG_IPQ_USB=y +CONFIG_IPQ_SPI_NOR=y +# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set +CONFIG_ENV_IS_IN_MMC=y +CONFIG_SYS_MMC_ENV_PART=0 +CONFIG_ENV_SIZE=0x40000 +CONFIG_ENV_RANGE=0x40000 +CONFIG_ENV_OFFSET=0 +CONFIG_SF_DEFAULT_BUS=0 +CONFIG_SF_DEFAULT_CS=0 +CONFIG_SF_DEFAULT_MODE=0x0 +CONFIG_SF_DEFAULT_SPEED=50000000 +CONFIG_SYS_RX_ETH_BUFFER=128 +CONFIG_ETH_MAX_MAC=6 +CONFIG_ETH_MAX_UNIPHY=3 +CONFIG_TFTP_BLOCKSIZE=1280 +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_MMC=y +CONFIG_IPQ_FDT_FIXUP=y +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x4a077e60