* [PATCH v4 0/4] Add U-Boot support for Qualcomm IPQ9650 SoC
@ 2026-07-22 10:46 Badhrinath S via U-Boot
2026-07-22 10:46 ` [PATCH v4 1/4] clk: qcom: Add initial Clock driver for ipq9650 Badhrinath S via U-Boot
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Badhrinath S via U-Boot @ 2026-07-22 10:46 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg, peng.fan,
jh80.chung, lukma, badhrinath.s, michal.simek, luca.weiss, danila,
adrian, aswin.murugan, david.wronek, u-boot, u-boot-qcom
This patch series adds U-Boot support for the Qualcomm IPQ9650 SoC
This series enables:
- Clock control via GCC
- Pin multiplexing via TLMM
- eMMC boot support via SDHCI
- Serial console via GENI UART
The relevant DT files are available in linux-next [1].
Testing:
- Successfully boots to U-Boot prompt on IPQ9650 RDP488 board
- Serial console functional at 115200 baud
- eMMC detection and read/write operations verified
1 - https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/arch/arm64/boot/dts/qcom/ipq9650.dtsi
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/arch/arm64/boot/dts/qcom/ipq9650-rdp488.dts
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/include/dt-bindings/clock/qcom,ipq9650-gcc.h
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/include/dt-bindings/reset/qcom,ipq9650-gcc.h
Changes in v2:
- Fix SPDX license identifiers to GPL-2.0-only across multiple patches
- Address review comment from Ferass
- Link to v1 https://lore.kernel.org/u-boot/20260605094801.4130128-1-badhrinath.s@oss.qualcomm.com/
Changes in v3:
- Removed the sdhc node from this patch as requested. The SDHC-related changes will be upstreamed
separately by the kernel team.
- For the defconfigs, the common IPQ settings have been moved to qcom_ipqdefconfig, while
qcom_ipq9650_mmc_defconfig contains only board-specific options.
- Link to v2 https://lore.kernel.org/u-boot/20260610053655.2825589-1-badhrinath.s@oss.qualcomm.com/
Changes in v4:
- Renamed qcom_ipqdefconfig to qcom_ipq.config
- Removed optional DEBUG_UART configs
- Link to v3 https://lore.kernel.org/u-boot/20260716062318.4121929-1-badhrina@qti.qualcomm.com/
Badhrinath S (4):
clk: qcom: Add initial Clock driver for ipq9650
pinctrl: qcom: Add ipq9650 pinctrl driver
arm: dts: ipq9650: Add override dtsi
configs: Add defconfig for ipq9650 RDP488
arch/arm/dts/ipq9650-rdp488-u-boot.dtsi | 15 +
configs/qcom_ipq.config | 37 ++
configs/qcom_ipq9650_mmc_defconfig | 17 +
drivers/clk/qcom/Kconfig | 8 +
drivers/clk/qcom/Makefile | 1 +
drivers/clk/qcom/clock-ipq9650.c | 95 ++++++
drivers/pinctrl/qcom/Kconfig | 8 +
drivers/pinctrl/qcom/Makefile | 1 +
drivers/pinctrl/qcom/pinctrl-ipq9650.c | 430 ++++++++++++++++++++++++
9 files changed, 612 insertions(+)
create mode 100644 arch/arm/dts/ipq9650-rdp488-u-boot.dtsi
create mode 100644 configs/qcom_ipq.config
create mode 100644 configs/qcom_ipq9650_mmc_defconfig
create mode 100644 drivers/clk/qcom/clock-ipq9650.c
create mode 100644 drivers/pinctrl/qcom/pinctrl-ipq9650.c
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v4 1/4] clk: qcom: Add initial Clock driver for ipq9650
2026-07-22 10:46 [PATCH v4 0/4] Add U-Boot support for Qualcomm IPQ9650 SoC Badhrinath S via U-Boot
@ 2026-07-22 10:46 ` Badhrinath S via U-Boot
2026-07-22 11:38 ` Varadarajan Narayanan via U-Boot
2026-07-22 10:46 ` [PATCH v4 2/4] pinctrl: qcom: Add ipq9650 pinctrl driver Badhrinath S via U-Boot
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Badhrinath S via U-Boot @ 2026-07-22 10:46 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg, peng.fan,
jh80.chung, lukma, badhrinath.s, michal.simek, luca.weiss, danila,
adrian, aswin.murugan, david.wronek, u-boot, u-boot-qcom
Add initial set of clocks and resets for enabling U-Boot on ipq9650
based RDP platforms.
Signed-off-by: Badhrinath S <badhrinath.s@oss.qualcomm.com>
---
drivers/clk/qcom/Kconfig | 8 +++
drivers/clk/qcom/Makefile | 1 +
drivers/clk/qcom/clock-ipq9650.c | 95 ++++++++++++++++++++++++++++++++
3 files changed, 104 insertions(+)
create mode 100644 drivers/clk/qcom/clock-ipq9650.c
diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig
index 0a2ce55aaa2f..82c56cf605a8 100644
--- a/drivers/clk/qcom/Kconfig
+++ b/drivers/clk/qcom/Kconfig
@@ -47,6 +47,14 @@ config CLK_QCOM_IPQ9574
on the Snapdragon IPQ9574 SoC. This driver supports the clocks
and resets exposed by the GCC hardware block.
+config CLK_QCOM_IPQ9650
+ bool "Qualcomm IPQ9650 GCC"
+ select CLK_QCOM
+ help
+ Say Y here to enable support for the Global Clock Controller
+ on the Qualcomm IPQ9650 SoC. This driver supports the clocks
+ and resets exposed by the GCC hardware block.
+
config CLK_QCOM_MILOS
bool "Qualcomm Milos GCC"
select CLK_QCOM
diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile
index b96d61b603e4..6cf069053743 100644
--- a/drivers/clk/qcom/Makefile
+++ b/drivers/clk/qcom/Makefile
@@ -9,6 +9,7 @@ obj-$(CONFIG_CLK_QCOM_APQ8096) += clock-apq8096.o
obj-$(CONFIG_CLK_QCOM_IPQ4019) += clock-ipq4019.o
obj-$(CONFIG_CLK_QCOM_IPQ5424) += clock-ipq5424.o
obj-$(CONFIG_CLK_QCOM_IPQ9574) += clock-ipq9574.o
+obj-$(CONFIG_CLK_QCOM_IPQ9650) += clock-ipq9650.o
obj-$(CONFIG_CLK_QCOM_MILOS) += clock-milos.o
obj-$(CONFIG_CLK_QCOM_QCM2290) += clock-qcm2290.o
obj-$(CONFIG_CLK_QCOM_QCS404) += clock-qcs404.o
diff --git a/drivers/clk/qcom/clock-ipq9650.c b/drivers/clk/qcom/clock-ipq9650.c
new file mode 100644
index 000000000000..cdac71db4e1f
--- /dev/null
+++ b/drivers/clk/qcom/clock-ipq9650.c
@@ -0,0 +1,95 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Clock drivers for Qualcomm ipq9650
+ *
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <clk-uclass.h>
+#include <dm.h>
+#include <linux/delay.h>
+#include <asm/io.h>
+#include <linux/bug.h>
+#include <linux/bitops.h>
+#include <dt-bindings/clock/qcom,ipq9650-gcc.h>
+#include <dt-bindings/reset/qcom,ipq9650-gcc.h>
+
+#include "clock-qcom.h"
+
+#define GCC_IM_SLEEP_CBCR 0x1834020u
+
+static ulong ipq9650_set_rate(struct clk *clk, ulong rate)
+{
+ struct msm_clk_priv *priv = dev_get_priv(clk->dev);
+
+ switch (clk->id) {
+ case GCC_QUPV3_WRAP_SE6_CLK:
+ clk_rcg_set_rate_mnd(priv->base, priv->data->clks[clk->id].reg,
+ 1, 2, 217, CFG_CLK_SRC_GPLL0, 8);
+ return rate;
+ case GCC_SDCC1_APPS_CLK:
+ clk_rcg_set_rate_mnd(priv->base, priv->data->clks[clk->id].reg,
+ 5, 0, 0, CFG_CLK_SRC_GPLL2_MAIN, 16);
+ return rate;
+ }
+ return 0;
+}
+
+static const struct gate_clk ipq9650_clks[] = {
+ GATE_CLK(GCC_SDCC1_AHB_CLK, 0x3303c, BIT(0)),
+ GATE_CLK(GCC_SDCC1_APPS_CLK, 0x33004, BIT(1)),
+ GATE_CLK(GCC_QUPV3_WRAP_SE6_CLK, 0x04004, BIT(0)),
+};
+
+static int ipq9650_enable(struct clk *clk)
+{
+ struct msm_clk_priv *priv = dev_get_priv(clk->dev);
+
+ if (clk->id >= ARRAY_SIZE(ipq9650_clks) || !ipq9650_clks[clk->id].reg)
+ return -EINVAL;
+
+ qcom_gate_clk_en(priv, clk->id);
+
+ return 0;
+}
+
+static const struct qcom_reset_map ipq9650_gcc_resets[] = {
+ [GCC_SDCC_BCR] = { 0x33000 },
+};
+
+static struct msm_clk_data ipq9650_gcc_data = {
+ .resets = ipq9650_gcc_resets,
+ .num_resets = ARRAY_SIZE(ipq9650_gcc_resets),
+ .clks = ipq9650_clks,
+ .num_clks = ARRAY_SIZE(ipq9650_clks),
+
+ .enable = ipq9650_enable,
+ .set_rate = ipq9650_set_rate,
+};
+
+static const struct udevice_id gcc_ipq9650_of_match[] = {
+ {
+ .compatible = "qcom,ipq9650-gcc",
+ .data = (ulong)&ipq9650_gcc_data,
+ },
+ { }
+};
+
+static int ipq9650_clk_probe(struct udevice *dev)
+{
+ /* Enable the sleep clock needed for the MMC block reset */
+ writel(BIT(0), GCC_IM_SLEEP_CBCR);
+
+ return 0;
+}
+
+U_BOOT_DRIVER(gcc_ipq9650) = {
+ .name = "gcc_ipq9650",
+ .id = UCLASS_NOP,
+ .of_match = gcc_ipq9650_of_match,
+ .probe = ipq9650_clk_probe,
+ .bind = qcom_cc_bind,
+ .flags = DM_FLAG_PRE_RELOC | DM_FLAG_DEFAULT_PD_CTRL_OFF,
+};
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v4 2/4] pinctrl: qcom: Add ipq9650 pinctrl driver
2026-07-22 10:46 [PATCH v4 0/4] Add U-Boot support for Qualcomm IPQ9650 SoC Badhrinath S via U-Boot
2026-07-22 10:46 ` [PATCH v4 1/4] clk: qcom: Add initial Clock driver for ipq9650 Badhrinath S via U-Boot
@ 2026-07-22 10:46 ` Badhrinath S via U-Boot
2026-07-22 11:40 ` Varadarajan Narayanan via U-Boot
2026-07-22 10:46 ` [PATCH v4 3/4] arm: dts: ipq9650: Add override dtsi Badhrinath S via U-Boot
2026-07-22 10:46 ` [PATCH v4 4/4] configs: Add defconfig for ipq9650 RDP488 Badhrinath S via U-Boot
3 siblings, 1 reply; 9+ messages in thread
From: Badhrinath S via U-Boot @ 2026-07-22 10:46 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg, peng.fan,
jh80.chung, lukma, badhrinath.s, michal.simek, luca.weiss, danila,
adrian, aswin.murugan, david.wronek, u-boot, u-boot-qcom
Add pinctrl driver for TLMM block found in the Qualcomm IPQ9650 SoC.
This driver supports 54 GPIO pins with various pin functions including
UART, SPI, I2C, SDCC, PCIe, and other peripherals.
Signed-off-by: Badhrinath S <badhrinath.s@oss.qualcomm.com>
---
drivers/pinctrl/qcom/Kconfig | 8 +
drivers/pinctrl/qcom/Makefile | 1 +
drivers/pinctrl/qcom/pinctrl-ipq9650.c | 430 +++++++++++++++++++++++++
3 files changed, 439 insertions(+)
create mode 100644 drivers/pinctrl/qcom/pinctrl-ipq9650.c
diff --git a/drivers/pinctrl/qcom/Kconfig b/drivers/pinctrl/qcom/Kconfig
index 11e6763b5f3e..2c0e40807f0f 100644
--- a/drivers/pinctrl/qcom/Kconfig
+++ b/drivers/pinctrl/qcom/Kconfig
@@ -54,6 +54,14 @@ config PINCTRL_QCOM_IPQ9574
Say Y here to enable support for pinctrl on the IPQ9574 SoC,
as well as the associated GPIO driver.
+config PINCTRL_QCOM_IPQ9650
+ bool "Qualcomm IPQ9650 Pinctrl"
+ default y if PINCTRL_QCOM_GENERIC
+ select PINCTRL_QCOM
+ help
+ Say Y here to enable support for pinctrl on the IPQ9650 SoC,
+ as well as the associated GPIO driver.
+
config PINCTRL_QCOM_MILOS
bool "Qualcomm Milos Pinctrl"
default y if PINCTRL_QCOM_GENERIC
diff --git a/drivers/pinctrl/qcom/Makefile b/drivers/pinctrl/qcom/Makefile
index 4096c1aa4919..17c88885f8de 100644
--- a/drivers/pinctrl/qcom/Makefile
+++ b/drivers/pinctrl/qcom/Makefile
@@ -7,6 +7,7 @@ obj-$(CONFIG_PINCTRL_QCOM_APQ8016) += pinctrl-apq8016.o
obj-$(CONFIG_PINCTRL_QCOM_IPQ4019) += pinctrl-ipq4019.o
obj-$(CONFIG_PINCTRL_QCOM_IPQ5424) += pinctrl-ipq5424.o
obj-$(CONFIG_PINCTRL_QCOM_IPQ9574) += pinctrl-ipq9574.o
+obj-$(CONFIG_PINCTRL_QCOM_IPQ9650) += pinctrl-ipq9650.o
obj-$(CONFIG_PINCTRL_QCOM_APQ8096) += pinctrl-apq8096.o
obj-$(CONFIG_PINCTRL_QCOM_MILOS) += pinctrl-milos.o
obj-$(CONFIG_PINCTRL_QCOM_QCM2290) += pinctrl-qcm2290.o
diff --git a/drivers/pinctrl/qcom/pinctrl-ipq9650.c b/drivers/pinctrl/qcom/pinctrl-ipq9650.c
new file mode 100644
index 000000000000..6496405ae32d
--- /dev/null
+++ b/drivers/pinctrl/qcom/pinctrl-ipq9650.c
@@ -0,0 +1,430 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+#include <dm.h>
+
+#include "pinctrl-qcom.h"
+
+#define MAX_PIN_NAME_LEN 32
+static char pin_name[MAX_PIN_NAME_LEN] __section(".data");
+
+enum ipq9650_functions {
+ msm_mux_gpio,
+ msm_mux_atest_char_start,
+ msm_mux_atest_char_status0,
+ msm_mux_atest_char_status1,
+ msm_mux_atest_char_status2,
+ msm_mux_atest_char_status3,
+ msm_mux_atest_tic_en,
+ msm_mux_audio_pri0,
+ msm_mux_audio_pri1,
+ msm_mux_audio_pri_d0,
+ msm_mux_audio_pri_d1,
+ msm_mux_audio_pri_fsync,
+ msm_mux_audio_pri_pclk,
+ msm_mux_audio_sec0,
+ msm_mux_audio_sec1,
+ msm_mux_audio_sec_d0,
+ msm_mux_audio_sec_d1,
+ msm_mux_audio_sec_fsync,
+ msm_mux_audio_sec_pclk,
+ msm_mux_core_voltage_0,
+ msm_mux_core_voltage_1,
+ msm_mux_core_voltage_2,
+ msm_mux_core_voltage_3,
+ msm_mux_core_voltage_4,
+ msm_mux_cri_rng0,
+ msm_mux_cri_rng1,
+ msm_mux_cri_rng2,
+ msm_mux_dbg_out_clk,
+ msm_mux_gcc_plltest_bypassnl,
+ msm_mux_gcc_plltest_resetn,
+ msm_mux_gcc_tlmm,
+ msm_mux_mdc_mst,
+ msm_mux_mdc_slv0,
+ msm_mux_mdc_slv1,
+ msm_mux_mdio_mst,
+ msm_mux_mdio_slv,
+ msm_mux_mdio_slv0,
+ msm_mux_mdio_slv1,
+ msm_mux_pcie0_clk_req_n,
+ msm_mux_pcie0_wake,
+ msm_mux_pcie1_clk_req_n,
+ msm_mux_pcie1_wake,
+ msm_mux_pcie2_clk_req_n,
+ msm_mux_pcie2_wake,
+ msm_mux_pcie3_clk_req_n,
+ msm_mux_pcie3_wake,
+ msm_mux_pcie4_clk_req_n,
+ msm_mux_pcie4_wake,
+ msm_mux_pll_bist_sync,
+ msm_mux_pll_test,
+ msm_mux_pwm_out00,
+ msm_mux_pwm_out01,
+ msm_mux_pwm_out02,
+ msm_mux_pwm_out10,
+ msm_mux_pwm_out11,
+ msm_mux_pwm_out12,
+ msm_mux_pwm_out20,
+ msm_mux_pwm_out21,
+ msm_mux_pwm_out22,
+ msm_mux_pwm_out30,
+ msm_mux_pwm_out31,
+ msm_mux_pwm_out32,
+ msm_mux_pwm_out40,
+ msm_mux_pwm_out41,
+ msm_mux_pwm_out42,
+ msm_mux_pwm_out50,
+ msm_mux_pwm_out51,
+ msm_mux_qdss_cti_trig_in_a0,
+ msm_mux_qdss_cti_trig_in_a1,
+ msm_mux_qdss_cti_trig_in_b0,
+ msm_mux_qdss_cti_trig_in_b1,
+ msm_mux_qdss_cti_trig_out_a0,
+ msm_mux_qdss_cti_trig_out_a1,
+ msm_mux_qdss_cti_trig_out_b0,
+ msm_mux_qdss_cti_trig_out_b1,
+ msm_mux_qdss_traceclk_a,
+ msm_mux_qdss_tracectl_a,
+ msm_mux_qdss_tracedata_a,
+ msm_mux_qspi_data,
+ msm_mux_qspi_clk,
+ msm_mux_qspi_cs,
+ msm_mux_qup_se0_l0,
+ msm_mux_qup_se0_l1,
+ msm_mux_qup_se0_l2,
+ msm_mux_qup_se0_l3,
+ msm_mux_qup_se0_l4,
+ msm_mux_qup_se0_l5,
+ msm_mux_qup_se1_l0,
+ msm_mux_qup_se1_l1,
+ msm_mux_qup_se1_l2,
+ msm_mux_qup_se1_l3,
+ msm_mux_qup_se1_l4,
+ msm_mux_qup_se1_l5,
+ msm_mux_qup_se2_l0,
+ msm_mux_qup_se2_l1,
+ msm_mux_qup_se2_l2,
+ msm_mux_qup_se2_l3,
+ msm_mux_qup_se3_l0,
+ msm_mux_qup_se3_l1,
+ msm_mux_qup_se3_l2,
+ msm_mux_qup_se3_l3,
+ msm_mux_qup_se4_l0,
+ msm_mux_qup_se4_l1,
+ msm_mux_qup_se4_l2,
+ msm_mux_qup_se4_l3,
+ msm_mux_qup_se4_l4,
+ msm_mux_qup_se4_l5,
+ msm_mux_qup_se5_l0,
+ msm_mux_qup_se5_l1,
+ msm_mux_qup_se5_l2,
+ msm_mux_qup_se5_l3,
+ msm_mux_qup_se5_l4,
+ msm_mux_qup_se5_l5,
+ msm_mux_qup_se6,
+ msm_mux_qup_se6_l0,
+ msm_mux_qup_se6_l1,
+ msm_mux_qup_se6_l2,
+ msm_mux_qup_se6_l3,
+ msm_mux_qup_se7_l0,
+ msm_mux_qup_se7_l1,
+ msm_mux_qup_se7_l2,
+ msm_mux_qup_se7_l3,
+ msm_mux_resout,
+ msm_mux_rx_los00,
+ msm_mux_rx_los01,
+ msm_mux_rx_los02,
+ msm_mux_rx_los10,
+ msm_mux_rx_los11,
+ msm_mux_rx_los20,
+ msm_mux_rx_los21,
+ msm_mux_sdc_clk,
+ msm_mux_sdc_cmd,
+ msm_mux_sdc_data,
+ msm_mux_tsens_max,
+ msm_mux_tsn,
+
+ msm_mux_NA,
+};
+
+#define MSM_PIN_FUNCTION(fname) \
+ [msm_mux_##fname] = {#fname, msm_mux_##fname}
+
+static const struct pinctrl_function msm_pinctrl_functions[] = {
+ MSM_PIN_FUNCTION(gpio),
+ MSM_PIN_FUNCTION(atest_char_start),
+ MSM_PIN_FUNCTION(atest_char_status0),
+ MSM_PIN_FUNCTION(atest_char_status1),
+ MSM_PIN_FUNCTION(atest_char_status2),
+ MSM_PIN_FUNCTION(atest_char_status3),
+ MSM_PIN_FUNCTION(atest_tic_en),
+ MSM_PIN_FUNCTION(audio_pri0),
+ MSM_PIN_FUNCTION(audio_pri1),
+ MSM_PIN_FUNCTION(audio_pri_d0),
+ MSM_PIN_FUNCTION(audio_pri_d1),
+ MSM_PIN_FUNCTION(audio_pri_fsync),
+ MSM_PIN_FUNCTION(audio_pri_pclk),
+ MSM_PIN_FUNCTION(audio_sec0),
+ MSM_PIN_FUNCTION(audio_sec1),
+ MSM_PIN_FUNCTION(audio_sec_d0),
+ MSM_PIN_FUNCTION(audio_sec_d1),
+ MSM_PIN_FUNCTION(audio_sec_fsync),
+ MSM_PIN_FUNCTION(audio_sec_pclk),
+ MSM_PIN_FUNCTION(core_voltage_0),
+ MSM_PIN_FUNCTION(core_voltage_1),
+ MSM_PIN_FUNCTION(core_voltage_2),
+ MSM_PIN_FUNCTION(core_voltage_3),
+ MSM_PIN_FUNCTION(core_voltage_4),
+ MSM_PIN_FUNCTION(cri_rng0),
+ MSM_PIN_FUNCTION(cri_rng1),
+ MSM_PIN_FUNCTION(cri_rng2),
+ MSM_PIN_FUNCTION(dbg_out_clk),
+ MSM_PIN_FUNCTION(gcc_plltest_bypassnl),
+ MSM_PIN_FUNCTION(gcc_plltest_resetn),
+ MSM_PIN_FUNCTION(gcc_tlmm),
+ MSM_PIN_FUNCTION(mdc_mst),
+ MSM_PIN_FUNCTION(mdc_slv0),
+ MSM_PIN_FUNCTION(mdc_slv1),
+ MSM_PIN_FUNCTION(mdio_mst),
+ MSM_PIN_FUNCTION(mdio_slv),
+ MSM_PIN_FUNCTION(mdio_slv0),
+ MSM_PIN_FUNCTION(mdio_slv1),
+ MSM_PIN_FUNCTION(pcie0_clk_req_n),
+ MSM_PIN_FUNCTION(pcie0_wake),
+ MSM_PIN_FUNCTION(pcie1_clk_req_n),
+ MSM_PIN_FUNCTION(pcie1_wake),
+ MSM_PIN_FUNCTION(pcie2_clk_req_n),
+ MSM_PIN_FUNCTION(pcie2_wake),
+ MSM_PIN_FUNCTION(pcie3_clk_req_n),
+ MSM_PIN_FUNCTION(pcie3_wake),
+ MSM_PIN_FUNCTION(pcie4_clk_req_n),
+ MSM_PIN_FUNCTION(pcie4_wake),
+ MSM_PIN_FUNCTION(pll_bist_sync),
+ MSM_PIN_FUNCTION(pll_test),
+ MSM_PIN_FUNCTION(pwm_out00),
+ MSM_PIN_FUNCTION(pwm_out01),
+ MSM_PIN_FUNCTION(pwm_out02),
+ MSM_PIN_FUNCTION(pwm_out10),
+ MSM_PIN_FUNCTION(pwm_out11),
+ MSM_PIN_FUNCTION(pwm_out12),
+ MSM_PIN_FUNCTION(pwm_out20),
+ MSM_PIN_FUNCTION(pwm_out21),
+ MSM_PIN_FUNCTION(pwm_out22),
+ MSM_PIN_FUNCTION(pwm_out30),
+ MSM_PIN_FUNCTION(pwm_out31),
+ MSM_PIN_FUNCTION(pwm_out32),
+ MSM_PIN_FUNCTION(pwm_out40),
+ MSM_PIN_FUNCTION(pwm_out41),
+ MSM_PIN_FUNCTION(pwm_out42),
+ MSM_PIN_FUNCTION(pwm_out50),
+ MSM_PIN_FUNCTION(pwm_out51),
+ MSM_PIN_FUNCTION(qdss_cti_trig_in_a0),
+ MSM_PIN_FUNCTION(qdss_cti_trig_in_a1),
+ MSM_PIN_FUNCTION(qdss_cti_trig_in_b0),
+ MSM_PIN_FUNCTION(qdss_cti_trig_in_b1),
+ MSM_PIN_FUNCTION(qdss_cti_trig_out_a0),
+ MSM_PIN_FUNCTION(qdss_cti_trig_out_a1),
+ MSM_PIN_FUNCTION(qdss_cti_trig_out_b0),
+ MSM_PIN_FUNCTION(qdss_cti_trig_out_b1),
+ MSM_PIN_FUNCTION(qdss_traceclk_a),
+ MSM_PIN_FUNCTION(qdss_tracectl_a),
+ MSM_PIN_FUNCTION(qdss_tracedata_a),
+ MSM_PIN_FUNCTION(qspi_data),
+ MSM_PIN_FUNCTION(qspi_clk),
+ MSM_PIN_FUNCTION(qspi_cs),
+ MSM_PIN_FUNCTION(qup_se0_l0),
+ MSM_PIN_FUNCTION(qup_se0_l1),
+ MSM_PIN_FUNCTION(qup_se0_l2),
+ MSM_PIN_FUNCTION(qup_se0_l3),
+ MSM_PIN_FUNCTION(qup_se0_l4),
+ MSM_PIN_FUNCTION(qup_se0_l5),
+ MSM_PIN_FUNCTION(qup_se1_l0),
+ MSM_PIN_FUNCTION(qup_se1_l1),
+ MSM_PIN_FUNCTION(qup_se1_l2),
+ MSM_PIN_FUNCTION(qup_se1_l3),
+ MSM_PIN_FUNCTION(qup_se1_l4),
+ MSM_PIN_FUNCTION(qup_se1_l5),
+ MSM_PIN_FUNCTION(qup_se2_l0),
+ MSM_PIN_FUNCTION(qup_se2_l1),
+ MSM_PIN_FUNCTION(qup_se2_l2),
+ MSM_PIN_FUNCTION(qup_se2_l3),
+ MSM_PIN_FUNCTION(qup_se3_l0),
+ MSM_PIN_FUNCTION(qup_se3_l1),
+ MSM_PIN_FUNCTION(qup_se3_l2),
+ MSM_PIN_FUNCTION(qup_se3_l3),
+ MSM_PIN_FUNCTION(qup_se4_l0),
+ MSM_PIN_FUNCTION(qup_se4_l1),
+ MSM_PIN_FUNCTION(qup_se4_l2),
+ MSM_PIN_FUNCTION(qup_se4_l3),
+ MSM_PIN_FUNCTION(qup_se4_l4),
+ MSM_PIN_FUNCTION(qup_se4_l5),
+ MSM_PIN_FUNCTION(qup_se5_l0),
+ MSM_PIN_FUNCTION(qup_se5_l1),
+ MSM_PIN_FUNCTION(qup_se5_l2),
+ MSM_PIN_FUNCTION(qup_se5_l3),
+ MSM_PIN_FUNCTION(qup_se5_l4),
+ MSM_PIN_FUNCTION(qup_se5_l5),
+ MSM_PIN_FUNCTION(qup_se6),
+ MSM_PIN_FUNCTION(qup_se6_l0),
+ MSM_PIN_FUNCTION(qup_se6_l1),
+ MSM_PIN_FUNCTION(qup_se6_l2),
+ MSM_PIN_FUNCTION(qup_se6_l3),
+ MSM_PIN_FUNCTION(qup_se7_l0),
+ MSM_PIN_FUNCTION(qup_se7_l1),
+ MSM_PIN_FUNCTION(qup_se7_l2),
+ MSM_PIN_FUNCTION(qup_se7_l3),
+ MSM_PIN_FUNCTION(resout),
+ MSM_PIN_FUNCTION(rx_los00),
+ MSM_PIN_FUNCTION(rx_los01),
+ MSM_PIN_FUNCTION(rx_los02),
+ MSM_PIN_FUNCTION(rx_los10),
+ MSM_PIN_FUNCTION(rx_los11),
+ MSM_PIN_FUNCTION(rx_los20),
+ MSM_PIN_FUNCTION(rx_los21),
+ MSM_PIN_FUNCTION(sdc_clk),
+ MSM_PIN_FUNCTION(sdc_cmd),
+ MSM_PIN_FUNCTION(sdc_data),
+ MSM_PIN_FUNCTION(tsens_max),
+ MSM_PIN_FUNCTION(tsn),
+
+};
+
+typedef unsigned int msm_pin_function[10];
+
+#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9) \
+ [id] = { msm_mux_gpio, /* gpio mode */ \
+ msm_mux_##f1, \
+ msm_mux_##f2, \
+ msm_mux_##f3, \
+ msm_mux_##f4, \
+ msm_mux_##f5, \
+ msm_mux_##f6, \
+ msm_mux_##f7, \
+ msm_mux_##f8, \
+ msm_mux_##f9, \
+ }
+
+static const msm_pin_function ipq9650_pin_functions[] = {
+ PINGROUP(0, sdc_data, qspi_data, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(1, sdc_data, qspi_data, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(2, sdc_data, qspi_data, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(3, sdc_data, qspi_data, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(4, sdc_cmd, qspi_cs, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(5, sdc_clk, qspi_clk, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(6, qup_se0_l2, pwm_out51, NA, cri_rng0, qdss_tracedata_a, NA, NA, NA, NA),
+ PINGROUP(7, qup_se0_l3, pwm_out41, NA, cri_rng1, qdss_tracedata_a, NA, NA, NA, NA),
+ PINGROUP(8, qup_se0_l0, pwm_out31, NA, cri_rng2, qdss_tracedata_a, NA, NA, NA, NA),
+ PINGROUP(9, qup_se0_l1, pwm_out21, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
+ PINGROUP(10, qup_se1_l1, pwm_out11, NA, NA, qdss_tracedata_a, NA, NA, NA, NA),
+ PINGROUP(11, qup_se1_l0, pwm_out01, NA, NA, qdss_tracedata_a, NA, NA, NA, NA),
+ PINGROUP(12, qup_se1_l3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
+ PINGROUP(13, qup_se1_l2, NA, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
+ PINGROUP(14, qup_se4_l1, mdc_slv1, tsens_max, NA, qdss_tracedata_a, NA, NA, NA, NA),
+ PINGROUP(15, qup_se4_l0, mdio_slv1, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
+ PINGROUP(16, core_voltage_0, qup_se3_l1, pwm_out02, NA, NA, NA, NA, NA, NA),
+ PINGROUP(17, core_voltage_1, qup_se3_l0, pwm_out12, NA, NA, NA, NA, NA, NA),
+ PINGROUP(18, NA, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(19, NA, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(20, mdc_slv0, qup_se3_l3, NA, qdss_tracedata_a, NA, NA, NA, NA, NA),
+ PINGROUP(21, mdio_slv0, qup_se3_l2, atest_char_start, NA, qdss_tracedata_a, NA, NA, NA, NA),
+ PINGROUP(22, mdc_mst, atest_char_status2, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(23, mdio_mst, atest_char_status3, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(24, pcie0_clk_req_n, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(25, NA, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(26, pcie0_wake, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(27, pcie1_clk_req_n, qup_se2_l3, qup_se1_l4,
+ NA, qdss_cti_trig_out_a1, NA, NA, NA, NA),
+ PINGROUP(28, NA, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(29, pcie1_wake, qup_se2_l2, qup_se1_l5, NA, qdss_cti_trig_in_a1, NA, NA, NA, NA),
+ PINGROUP(30, pcie4_clk_req_n, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(31, NA, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(32, pcie4_wake, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(33, core_voltage_2, qup_se2_l1, gcc_plltest_bypassnl,
+ pwm_out22, atest_char_status0, NA, NA, NA, NA),
+ PINGROUP(34, core_voltage_3, qup_se2_l0, gcc_tlmm, pwm_out32, NA, NA, NA, NA, NA),
+ PINGROUP(35, core_voltage_4, gcc_plltest_resetn, pwm_out42,
+ atest_char_status1, NA, NA, NA, NA, NA),
+ PINGROUP(36, audio_pri_d0, qup_se7_l2, qdss_tracedata_a, NA, NA, NA, NA, NA, NA),
+ PINGROUP(37, audio_pri_d1, qup_se7_l3, audio_sec0,
+ audio_sec0, rx_los21, qdss_tracedata_a, NA, NA, NA),
+ PINGROUP(38, audio_pri_fsync, qup_se7_l0, rx_los11, qdss_tracedata_a, NA, NA, NA, NA, NA),
+ PINGROUP(39, audio_pri_pclk, qup_se7_l1, audio_sec1,
+ audio_sec1, pll_test, rx_los01, NA, qdss_tracedata_a, NA),
+ PINGROUP(40, pcie3_clk_req_n, qup_se5_l4, qup_se4_l4,
+ NA, qdss_cti_trig_out_b0, NA, NA, NA, NA),
+ PINGROUP(41, NA, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(42, pcie3_wake, qup_se5_l5, qup_se4_l5,
+ NA, qdss_cti_trig_in_b0, NA, NA, NA, NA),
+ PINGROUP(43, qup_se4_l3, qup_se6, pwm_out50, NA, qdss_cti_trig_in_b1, NA, NA, NA, NA),
+ PINGROUP(44, qup_se4_l2, qup_se6, pwm_out40, NA, qdss_cti_trig_out_b1, NA, NA, NA, NA),
+ PINGROUP(45, qup_se5_l2, rx_los20, audio_sec_fsync,
+ pwm_out30, NA, qdss_traceclk_a, NA, NA, NA),
+ PINGROUP(46, qup_se5_l3, rx_los10, audio_sec_pclk,
+ mdio_slv, pwm_out20, dbg_out_clk, qdss_tracectl_a, NA, NA),
+ PINGROUP(47, qup_se5_l0, rx_los00, audio_sec_d1,
+ mdio_slv, pll_bist_sync, pwm_out10, NA, NA, NA),
+ PINGROUP(48, qup_se5_l1, audio_sec_d0, pwm_out00, NA, NA, NA, NA, NA, NA),
+ PINGROUP(49, resout, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(50, tsn, rx_los02, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(51, pcie2_clk_req_n, qup_se6_l0, qup_se0_l4,
+ audio_pri1, audio_pri1, qdss_cti_trig_out_a0, NA, NA, NA),
+ PINGROUP(52, NA, NA, NA, NA, NA, NA, NA, NA, NA),
+ PINGROUP(53, pcie2_wake, qup_se6_l1, qup_se0_l5,
+ audio_pri0, audio_pri0, qdss_cti_trig_in_a0, NA, atest_tic_en, NA),
+};
+
+static const char *ipq9650_get_function_name(struct udevice *dev,
+ unsigned int selector)
+{
+ return msm_pinctrl_functions[selector].name;
+}
+
+static const char *ipq9650_get_pin_name(struct udevice *dev,
+ unsigned int selector)
+{
+ snprintf(pin_name, MAX_PIN_NAME_LEN, "gpio%u", selector);
+ return pin_name;
+}
+
+static int ipq9650_get_function_mux(unsigned int pin, unsigned int selector)
+{
+ unsigned int i;
+ const msm_pin_function *func = ipq9650_pin_functions + pin;
+
+ for (i = 0; i < 10; i++)
+ if ((*func)[i] == selector)
+ return i;
+
+ debug("Can't find requested function for pin:selector %u:%u\n",
+ pin, selector);
+
+ return -EINVAL;
+}
+
+static const struct msm_pinctrl_data ipq9650_data = {
+ .pin_data = {
+ .pin_count = 54,
+ .special_pins_start = 54,
+ },
+ .functions_count = ARRAY_SIZE(msm_pinctrl_functions),
+ .get_function_name = ipq9650_get_function_name,
+ .get_function_mux = ipq9650_get_function_mux,
+ .get_pin_name = ipq9650_get_pin_name,
+};
+
+static const struct udevice_id msm_pinctrl_ids[] = {
+ { .compatible = "qcom,ipq9650-tlmm", .data = (ulong)&ipq9650_data },
+ { /* Sentinel */ }
+};
+
+U_BOOT_DRIVER(pinctrl_ipq9650) = {
+ .name = "pinctrl_ipq9650",
+ .id = UCLASS_NOP,
+ .of_match = msm_pinctrl_ids,
+ .ops = &msm_pinctrl_ops,
+ .bind = msm_pinctrl_bind,
+ .flags = DM_FLAG_PRE_RELOC,
+};
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v4 3/4] arm: dts: ipq9650: Add override dtsi
2026-07-22 10:46 [PATCH v4 0/4] Add U-Boot support for Qualcomm IPQ9650 SoC Badhrinath S via U-Boot
2026-07-22 10:46 ` [PATCH v4 1/4] clk: qcom: Add initial Clock driver for ipq9650 Badhrinath S via U-Boot
2026-07-22 10:46 ` [PATCH v4 2/4] pinctrl: qcom: Add ipq9650 pinctrl driver Badhrinath S via U-Boot
@ 2026-07-22 10:46 ` Badhrinath S via U-Boot
2026-07-22 11:43 ` Varadarajan Narayanan via U-Boot
2026-07-22 10:46 ` [PATCH v4 4/4] configs: Add defconfig for ipq9650 RDP488 Badhrinath S via U-Boot
3 siblings, 1 reply; 9+ messages in thread
From: Badhrinath S via U-Boot @ 2026-07-22 10:46 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg, peng.fan,
jh80.chung, lukma, badhrinath.s, michal.simek, luca.weiss, danila,
adrian, aswin.murugan, david.wronek, u-boot, u-boot-qcom
Add U-Boot specific device tree overrides for IPQ9650 RDP488 board.
This includes memory configuration and SDHCI reset configuration.
Signed-off-by: Badhrinath S <badhrinath.s@oss.qualcomm.com>
---
arch/arm/dts/ipq9650-rdp488-u-boot.dtsi | 15 +++++++++++++++
1 file changed, 15 insertions(+)
create mode 100644 arch/arm/dts/ipq9650-rdp488-u-boot.dtsi
diff --git a/arch/arm/dts/ipq9650-rdp488-u-boot.dtsi b/arch/arm/dts/ipq9650-rdp488-u-boot.dtsi
new file mode 100644
index 000000000000..dd03de98b921
--- /dev/null
+++ b/arch/arm/dts/ipq9650-rdp488-u-boot.dtsi
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * IPQ9650 RDP488 board device tree source
+ *
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+/ {
+ /* Will be removed when SMEM parsing is updated */
+ memory@80000000 {
+ device_type = "memory";
+ reg = <0x0 0x80000000 0x0 0x20000000>;
+ };
+
+};
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v4 4/4] configs: Add defconfig for ipq9650 RDP488
2026-07-22 10:46 [PATCH v4 0/4] Add U-Boot support for Qualcomm IPQ9650 SoC Badhrinath S via U-Boot
` (2 preceding siblings ...)
2026-07-22 10:46 ` [PATCH v4 3/4] arm: dts: ipq9650: Add override dtsi Badhrinath S via U-Boot
@ 2026-07-22 10:46 ` Badhrinath S via U-Boot
3 siblings, 0 replies; 9+ messages in thread
From: Badhrinath S via U-Boot @ 2026-07-22 10:46 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg, peng.fan,
jh80.chung, lukma, badhrinath.s, michal.simek, luca.weiss, danila,
adrian, aswin.murugan, david.wronek, u-boot, u-boot-qcom
Add default configuration for the IPQ9650 RDP488 board with eMMC boot
support.
Signed-off-by: Badhrinath S <badhrinath.s@oss.qualcomm.com>
---
configs/qcom_ipq.config | 37 ++++++++++++++++++++++++++++++
configs/qcom_ipq9650_mmc_defconfig | 17 ++++++++++++++
2 files changed, 54 insertions(+)
create mode 100644 configs/qcom_ipq.config
create mode 100644 configs/qcom_ipq9650_mmc_defconfig
diff --git a/configs/qcom_ipq.config b/configs/qcom_ipq.config
new file mode 100644
index 000000000000..954a97042ba3
--- /dev/null
+++ b/configs/qcom_ipq.config
@@ -0,0 +1,37 @@
+CONFIG_ARM=y
+CONFIG_SKIP_LOWLEVEL_INIT=y
+CONFIG_POSITION_INDEPENDENT=y
+CONFIG_ARCH_SNAPDRAGON=y
+CONFIG_REMAKE_ELF=y
+# CONFIG_EFI_LOADER is not set
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+# CONFIG_BOOTSTD is not set
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_USE_PREBOOT=y
+# CONFIG_DISPLAY_CPUINFO is not set
+CONFIG_DISPLAY_BOARDINFO_LATE=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_PART=y
+CONFIG_OF_LIVE=y
+CONFIG_CLK=y
+CONFIG_MSM_GPIO=y
+# CONFIG_I2C is not set
+# CONFIG_INPUT is not set
+CONFIG_MISC=y
+CONFIG_QCOM_GENI=y
+CONFIG_MTD=y
+CONFIG_DM_MDIO=y
+CONFIG_DM_ETH_PHY=y
+CONFIG_DWC_ETH_QOS=y
+CONFIG_DWC_ETH_QOS_QCOM=y
+CONFIG_RGMII=y
+CONFIG_PHY=y
+CONFIG_PHY_QCOM_QMP_UFS=y
+CONFIG_PHY_QCOM_QUSB2=y
+CONFIG_PINCTRL=y
+CONFIG_PINCONF=y
+CONFIG_MSM_SERIAL=y
+CONFIG_MSM_GENI_SERIAL=y
+CONFIG_SOC_QCOM=y
+
diff --git a/configs/qcom_ipq9650_mmc_defconfig b/configs/qcom_ipq9650_mmc_defconfig
new file mode 100644
index 000000000000..e78455a1db71
--- /dev/null
+++ b/configs/qcom_ipq9650_mmc_defconfig
@@ -0,0 +1,17 @@
+#include "qcom_ipq.config"
+CONFIG_SYS_INIT_SP_BSS_OFFSET=0x180000
+CONFIG_TEXT_BASE=0x8a280000
+CONFIG_NR_DRAM_BANKS=24
+CONFIG_ENV_SIZE=0x40000
+CONFIG_ENV_OFFSET=0
+CONFIG_DEFAULT_DEVICE_TREE="qcom/ipq9650-rdp488"
+CONFIG_SYS_LOAD_ADDR=0x90000000
+CONFIG_SYS_PBSIZE=1024
+CONFIG_CLK_QCOM_IPQ9650=y
+CONFIG_CMD_MMC=y
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_ADMA=y
+CONFIG_MMC_SDHCI_MSM=y
+CONFIG_PINCTRL_QCOM_IPQ9650=y
+CONFIG_SYS_MALLOC_LEN=0xC0000
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v4 1/4] clk: qcom: Add initial Clock driver for ipq9650
2026-07-22 10:46 ` [PATCH v4 1/4] clk: qcom: Add initial Clock driver for ipq9650 Badhrinath S via U-Boot
@ 2026-07-22 11:38 ` Varadarajan Narayanan via U-Boot
2026-07-29 9:17 ` Badhrinath S via U-Boot
0 siblings, 1 reply; 9+ messages in thread
From: Varadarajan Narayanan via U-Boot @ 2026-07-22 11:38 UTC (permalink / raw)
To: Badhrinath S
Cc: trini, casey.connolly, neil.armstrong, sumit.garg, peng.fan,
jh80.chung, lukma, michal.simek, luca.weiss, danila, adrian,
aswin.murugan, david.wronek, u-boot, u-boot-qcom
[. . . ]
> +static const struct gate_clk ipq9650_clks[] = {
> + GATE_CLK(GCC_SDCC1_AHB_CLK, 0x3303c, BIT(0)),
> + GATE_CLK(GCC_SDCC1_APPS_CLK, 0x33004, BIT(1)),
> + GATE_CLK(GCC_QUPV3_WRAP_SE6_CLK, 0x04004, BIT(0)),
Use GATE_CLK_POLLED. GATE_CLK is deprecated.
> +};
> +
> +static int ipq9650_enable(struct clk *clk)
> +{
> + struct msm_clk_priv *priv = dev_get_priv(clk->dev);
> +
> + if (clk->id >= ARRAY_SIZE(ipq9650_clks) || !ipq9650_clks[clk->id].reg)
> + return -EINVAL;
> +
> + qcom_gate_clk_en(priv, clk->id);
> +
> + return 0;
return qcom_gate_clk_en(priv, clk->id);
[ . . . ]
Thanks
Varada
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v4 2/4] pinctrl: qcom: Add ipq9650 pinctrl driver
2026-07-22 10:46 ` [PATCH v4 2/4] pinctrl: qcom: Add ipq9650 pinctrl driver Badhrinath S via U-Boot
@ 2026-07-22 11:40 ` Varadarajan Narayanan via U-Boot
0 siblings, 0 replies; 9+ messages in thread
From: Varadarajan Narayanan via U-Boot @ 2026-07-22 11:40 UTC (permalink / raw)
To: Badhrinath S
Cc: trini, casey.connolly, neil.armstrong, sumit.garg, peng.fan,
jh80.chung, lukma, michal.simek, luca.weiss, danila, adrian,
aswin.murugan, david.wronek, u-boot, u-boot-qcom
On Wed, Jul 22, 2026 at 04:16:22PM +0530, Badhrinath S via U-Boot wrote:
> Add pinctrl driver for TLMM block found in the Qualcomm IPQ9650 SoC.
>
> This driver supports 54 GPIO pins with various pin functions including
> UART, SPI, I2C, SDCC, PCIe, and other peripherals.
>
> Signed-off-by: Badhrinath S <badhrinath.s@oss.qualcomm.com>
Reviewed-by: Varadarajan Narayanan <varadarajan.narayanan@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v4 3/4] arm: dts: ipq9650: Add override dtsi
2026-07-22 10:46 ` [PATCH v4 3/4] arm: dts: ipq9650: Add override dtsi Badhrinath S via U-Boot
@ 2026-07-22 11:43 ` Varadarajan Narayanan via U-Boot
0 siblings, 0 replies; 9+ messages in thread
From: Varadarajan Narayanan via U-Boot @ 2026-07-22 11:43 UTC (permalink / raw)
To: Badhrinath S
Cc: trini, casey.connolly, neil.armstrong, sumit.garg, peng.fan,
jh80.chung, lukma, michal.simek, luca.weiss, danila, adrian,
aswin.murugan, david.wronek, u-boot, u-boot-qcom
On Wed, Jul 22, 2026 at 04:16:23PM +0530, Badhrinath S via U-Boot wrote:
> Add U-Boot specific device tree overrides for IPQ9650 RDP488 board.
> This includes memory configuration and SDHCI reset configuration.
>
> Signed-off-by: Badhrinath S <badhrinath.s@oss.qualcomm.com>
> ---
> arch/arm/dts/ipq9650-rdp488-u-boot.dtsi | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
> create mode 100644 arch/arm/dts/ipq9650-rdp488-u-boot.dtsi
>
> diff --git a/arch/arm/dts/ipq9650-rdp488-u-boot.dtsi b/arch/arm/dts/ipq9650-rdp488-u-boot.dtsi
> new file mode 100644
> index 000000000000..dd03de98b921
> --- /dev/null
> +++ b/arch/arm/dts/ipq9650-rdp488-u-boot.dtsi
> @@ -0,0 +1,15 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * IPQ9650 RDP488 board device tree source
> + *
> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
> + */
> +
> +/ {
> + /* Will be removed when SMEM parsing is updated */
> + memory@80000000 {
> + device_type = "memory";
> + reg = <0x0 0x80000000 0x0 0x20000000>;
> + };
> +
> +};
> --
> 2.34.1
>
Reviewed-by: Varadarajan Narayanan <varadarajan.narayanan@oss.qualcomm.com>
But not sure if Casey would prefer you to rebase on to the custodian tree [1] and
remove this file itself.
1 - https://source.denx.de/u-boot/custodians/u-boot-snapdragon.git
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v4 1/4] clk: qcom: Add initial Clock driver for ipq9650
2026-07-22 11:38 ` Varadarajan Narayanan via U-Boot
@ 2026-07-29 9:17 ` Badhrinath S via U-Boot
0 siblings, 0 replies; 9+ messages in thread
From: Badhrinath S via U-Boot @ 2026-07-29 9:17 UTC (permalink / raw)
To: Varadarajan Narayanan
Cc: trini, casey.connolly, neil.armstrong, sumit.garg, peng.fan,
jh80.chung, lukma, michal.simek, luca.weiss, danila, adrian,
aswin.murugan, david.wronek, u-boot, u-boot-qcom
Hi Varada,
On 7/22/2026 5:08 PM, Varadarajan Narayanan wrote:
> [. . . ]
>
>> +static const struct gate_clk ipq9650_clks[] = {
>> + GATE_CLK(GCC_SDCC1_AHB_CLK, 0x3303c, BIT(0)),
>> + GATE_CLK(GCC_SDCC1_APPS_CLK, 0x33004, BIT(1)),
>> + GATE_CLK(GCC_QUPV3_WRAP_SE6_CLK, 0x04004, BIT(0)),
> Use GATE_CLK_POLLED. GATE_CLK is deprecated.
> Have updated in V5'[PATCH v5 0/4] Add U-Boot support for Qualcomm IPQ9650 SoC' - MARC <https://marc.info/?l=u-boot&m=178530478539468&w=2>
Thanks,
Badhrinath S
>> +};
>> +
>> +static int ipq9650_enable(struct clk *clk)
>> +{
>> + struct msm_clk_priv *priv = dev_get_priv(clk->dev);
>> +
>> + if (clk->id >= ARRAY_SIZE(ipq9650_clks) || !ipq9650_clks[clk->id].reg)
>> + return -EINVAL;
>> +
>> + qcom_gate_clk_en(priv, clk->id);
>> +
>> + return 0;
> return qcom_gate_clk_en(priv, clk->id);
>
> [ . . . ]
>
> Thanks
> Varada
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-07-29 9:17 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-22 10:46 [PATCH v4 0/4] Add U-Boot support for Qualcomm IPQ9650 SoC Badhrinath S via U-Boot
2026-07-22 10:46 ` [PATCH v4 1/4] clk: qcom: Add initial Clock driver for ipq9650 Badhrinath S via U-Boot
2026-07-22 11:38 ` Varadarajan Narayanan via U-Boot
2026-07-29 9:17 ` Badhrinath S via U-Boot
2026-07-22 10:46 ` [PATCH v4 2/4] pinctrl: qcom: Add ipq9650 pinctrl driver Badhrinath S via U-Boot
2026-07-22 11:40 ` Varadarajan Narayanan via U-Boot
2026-07-22 10:46 ` [PATCH v4 3/4] arm: dts: ipq9650: Add override dtsi Badhrinath S via U-Boot
2026-07-22 11:43 ` Varadarajan Narayanan via U-Boot
2026-07-22 10:46 ` [PATCH v4 4/4] configs: Add defconfig for ipq9650 RDP488 Badhrinath S via U-Boot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.