]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
board: dragonboard410c: upstream DT compat
authorCaleb Connolly <caleb.connolly@linaro.org>
Mon, 26 Feb 2024 17:26:21 +0000 (17:26 +0000)
committerCaleb Connolly <caleb.connolly@linaro.org>
Fri, 1 Mar 2024 14:44:37 +0000 (14:44 +0000)
Use the root compatible strings from upstream Linux, add missing
'#clock-cells' property to the gcc node.

Adjust some of the msm8916/apq8016 drivers to use the correct upstream
compatible properties and DT bindings.

This prepares us to switch to upstream DT in a future patch.

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
Tested-by: Sumit Garg <sumit.garg@linaro.org> #qcs404
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
arch/arm/dts/dragonboard410c.dts
board/qualcomm/dragonboard410c/dragonboard410c.c
doc/device-tree-bindings/usb/ehci-msm.txt [deleted file]
drivers/clk/qcom/clock-apq8016.c
drivers/phy/qcom/msm8916-usbh-phy.c
drivers/pinctrl/qcom/pinctrl-apq8016.c
drivers/usb/host/ehci-msm.c
include/dt-bindings/clock/qcom,gcc-msm8916.h [new file with mode: 0644]

index c395e6cc042736ae6dd7a4783fc00cb355d42ac2..453642b257055fba618d7cb0f9baede1abd02350 100644 (file)
@@ -12,7 +12,7 @@
 
 / {
        model = "Qualcomm Technologies, Inc. Dragonboard 410c";
-       compatible = "qcom,dragonboard", "qcom,apq8016-sbc";
+       compatible = "qcom,apq8016-sbc", "qcom,apq8016";
        qcom,msm-id = <0xce 0x0 0xf8 0x0 0xf9 0x0 0xfa 0x0 0xf7 0x0>;
        qcom,board-id = <0x10018 0x0>;
        #address-cells = <0x2>;
@@ -79,6 +79,7 @@
                        reg = <0x1800000 0x80000>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
+                       #clock-cells = <0x1>;
                };
 
                serial@78b0000 {
                };
 
                ehci@78d9000 {
-                       compatible = "qcom,ehci-host";
+                       compatible = "qcom,ci-hdrc";
                        reg = <0x78d9000 0x400>;
                        phys = <&ehci_phy>;
-               };
 
-               ehci_phy: ehci_phy@78d9000 {
-                       compatible = "qcom,apq8016-usbphy";
-                       reg = <0x78d9000 0x400>;
-                       #phy-cells = <0>;
+                       ulpi {
+                               usb_hs_phy: phy {
+                                       compatible = "qcom,usb-hs-phy-msm8916",
+                                                    "qcom,usb-hs-phy";
+                                       #phy-cells = <0>;
+                                       clocks = <&xo_board>, <&gcc GCC_USB2A_PHY_SLEEP_CLK>;
+                                       clock-names = "ref", "sleep";
+                                       resets = <&gcc GCC_USB2A_PHY_BCR>, <&usb 0>;
+                                       reset-names = "phy", "por";
+                                       qcom,init-seq = /bits/ 8 <0x0 0x44>,
+                                                                <0x1 0x6b>,
+                                                                <0x2 0x24>,
+                                                                <0x3 0x13>;
+                               };
+                       };
                };
 
                sdhci@07824000 {
index 350e0e9e20aad4e8098ed609e6da363ddec6e3d6..1adac07569ae9aa7ee187bfd5fafd1bf367d4546 100644 (file)
@@ -9,6 +9,7 @@
 #include <common.h>
 #include <cpu_func.h>
 #include <dm.h>
+#include <dm/pinctrl.h>
 #include <env.h>
 #include <init.h>
 #include <net.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-int dram_init(void)
-{
-       gd->ram_size = PHYS_SDRAM_1_SIZE;
-
-       return 0;
-}
-
-int dram_init_banksize(void)
-{
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-
-       return 0;
-}
+#define USB_HUB_RESET_GPIO 2
+#define USB_SW_SELECT_GPIO 3
 
 int board_usb_init(int index, enum usb_init_type init)
 {
-       static struct udevice *pmic_gpio;
-       static struct gpio_desc hub_reset, usb_sel;
-       int ret = 0, node;
-
-       if (!pmic_gpio) {
-               ret = uclass_get_device_by_name(UCLASS_GPIO,
-                                               "pm8916_gpios@c000",
-                                               &pmic_gpio);
-               if (ret < 0) {
-                       printf("Failed to find pm8916_gpios@c000 node.\n");
-                       return ret;
-               }
-       }
+       struct udevice *usb;
+       int ret = 0;
 
-       /* Try to request gpios needed to start usb host on dragonboard */
-       if (!dm_gpio_is_valid(&hub_reset)) {
-               node = fdt_subnode_offset(gd->fdt_blob,
-                                         dev_of_offset(pmic_gpio),
-                                         "usb_hub_reset_pm");
-               if (node < 0) {
-                       printf("Failed to find usb_hub_reset_pm dt node.\n");
-                       return node;
-               }
-               ret = gpio_request_by_name_nodev(offset_to_ofnode(node),
-                                                "gpios", 0, &hub_reset, 0);
-               if (ret < 0) {
-                       printf("Failed to request usb_hub_reset_pm gpio.\n");
-                       return ret;
-               }
-       }
-
-       if (!dm_gpio_is_valid(&usb_sel)) {
-               node = fdt_subnode_offset(gd->fdt_blob,
-                                         dev_of_offset(pmic_gpio),
-                                         "usb_sw_sel_pm");
-               if (node < 0) {
-                       printf("Failed to find usb_sw_sel_pm dt node.\n");
-                       return 0;
-               }
-               ret = gpio_request_by_name_nodev(offset_to_ofnode(node),
-                                                "gpios", 0, &usb_sel, 0);
-               if (ret < 0) {
-                       printf("Failed to request usb_sw_sel_pm gpio.\n");
-                       return ret;
-               }
+       /* USB device */
+       ret = device_find_global_by_ofnode(ofnode_path("/soc/usb"), &usb);
+       if (ret) {
+               printf("Cannot find USB device\n");
+               return ret;
        }
 
-       if (init == USB_INIT_HOST) {
-               /* Start USB Hub */
-               dm_gpio_set_dir_flags(&hub_reset,
-                                     GPIOD_IS_OUT | GPIOD_IS_OUT_ACTIVE);
-               mdelay(100);
-               /* Switch usb to host connectors */
-               dm_gpio_set_dir_flags(&usb_sel,
-                                     GPIOD_IS_OUT | GPIOD_IS_OUT_ACTIVE);
-               mdelay(100);
-       } else { /* Device */
-               /* Disable hub */
-               dm_gpio_set_dir_flags(&hub_reset, GPIOD_IS_OUT);
-               /* Switch back to device connector */
-               dm_gpio_set_dir_flags(&usb_sel, GPIOD_IS_OUT);
+       /* Select "default" or "device" pinctrl */
+       switch (init) {
+       case USB_INIT_HOST:
+               pinctrl_select_state(usb, "default");
+               break;
+       case USB_INIT_DEVICE:
+               pinctrl_select_state(usb, "device");
+               break;
+       default:
+               debug("Unknown usb_init_type %d\n", init);
+               break;
        }
 
        return 0;
diff --git a/doc/device-tree-bindings/usb/ehci-msm.txt b/doc/device-tree-bindings/usb/ehci-msm.txt
deleted file mode 100644 (file)
index 205bb07..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Chipidea EHCI controller (part of OTG controller) used on Qualcomm devices.
-
-Required properties:
-- compatible: must be "qcom,ehci-host"
-- reg: start address and size of the registers
-
-ehci@78d9000 {
-       compatible = "qcom,ehci-host";
-       reg = <0x78d9000 0x400>;
-};
index 0af7191cff52175681ad7aee3a6c5aa208ee6f5b..9de0ad5ed32d6d15956c07c71b2d368e8be7af2f 100644 (file)
@@ -13,6 +13,7 @@
 #include <errno.h>
 #include <asm/io.h>
 #include <linux/bitops.h>
+#include <dt-bindings/clock/qcom,gcc-msm8916.h>
 
 #include "clock-qcom.h"
 
@@ -125,13 +126,13 @@ static ulong apq8016_clk_set_rate(struct clk *clk, ulong rate)
        struct msm_clk_priv *priv = dev_get_priv(clk->dev);
 
        switch (clk->id) {
-       case 0: /* SDC1 */
+       case GCC_SDCC1_APPS_CLK: /* SDC1 */
                return clk_init_sdc(priv, 0, rate);
                break;
-       case 1: /* SDC2 */
+       case GCC_SDCC2_APPS_CLK: /* SDC2 */
                return clk_init_sdc(priv, 1, rate);
                break;
-       case 4: /* UART2 */
+       case GCC_BLSP1_UART2_APPS_CLK: /* UART2 */
                return clk_init_uart(priv);
                break;
        default:
index 7c9d030a4d8aac2564684c23d51553e5795dea46..f52046f7cb02c616b18a3c4d67caa26da4d4979e 100644 (file)
@@ -74,7 +74,7 @@ static int msm_phy_probe(struct udevice *dev)
 {
        struct msm_phy_priv *priv = dev_get_priv(dev);
 
-       priv->regs = dev_remap_addr(dev);
+       priv->regs = dev_remap_addr(dev_get_parent(dev));
        if (!priv->regs)
                return -EINVAL;
 
@@ -96,7 +96,7 @@ static struct phy_ops msm_phy_ops = {
 };
 
 static const struct udevice_id msm_phy_ids[] = {
-       { .compatible = "qcom,apq8016-usbphy" },
+       { .compatible = "qcom,usb-hs-phy-msm8916" },
        { }
 };
 
index eb9bf87b6c2e2fb85c0b37c32ea72042169768b6..db0e212468473c9c56730d748df1a94c3da8faa2 100644 (file)
@@ -29,7 +29,7 @@ static const char * const msm_pinctrl_pins[] = {
 };
 
 static const struct pinctrl_function msm_pinctrl_functions[] = {
-       {"blsp1_uart", 2},
+       {"blsp_uart2", 2},
 };
 
 static const char *apq8016_get_function_name(struct udevice *dev,
index dd0d153500cb98d69d10e3c4fb3e89a0ab8b627f..98fe7bc3bcb169d04a1d0770bbdb7dc8e1153b19 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <common.h>
 #include <dm.h>
+#include <dm/lists.h>
 #include <errno.h>
 #include <usb.h>
 #include <usb/ehci-ci.h>
@@ -119,6 +120,24 @@ static int ehci_usb_of_to_plat(struct udevice *dev)
        return 0;
 }
 
+static int ehci_usb_of_bind(struct udevice *dev)
+{
+       ofnode ulpi_node = ofnode_first_subnode(dev_ofnode(dev));
+       ofnode phy_node;
+
+       if (!ofnode_valid(ulpi_node))
+               return 0;
+
+       phy_node = ofnode_first_subnode(ulpi_node);
+       if (!ofnode_valid(phy_node)) {
+               printf("%s: ulpi subnode with no phy\n", __func__);
+               return -ENOENT;
+       }
+
+       return device_bind_driver_to_node(dev, "msm8916_usbphy", "msm8916_usbphy",
+                                         phy_node, NULL);
+}
+
 #if defined(CONFIG_CI_UDC)
 /* Little quirk that MSM needs with Chipidea controller
  * Must reinit phy after reset
@@ -132,7 +151,7 @@ void ci_init_after_reset(struct ehci_ctrl *ctrl)
 #endif
 
 static const struct udevice_id ehci_usb_ids[] = {
-       { .compatible = "qcom,ehci-host", },
+       { .compatible = "qcom,ci-hdrc", },
        { }
 };
 
@@ -141,6 +160,7 @@ U_BOOT_DRIVER(usb_ehci) = {
        .id     = UCLASS_USB,
        .of_match = ehci_usb_ids,
        .of_to_plat = ehci_usb_of_to_plat,
+       .bind = ehci_usb_of_bind,
        .probe = ehci_usb_probe,
        .remove = ehci_usb_remove,
        .ops    = &ehci_usb_ops,
diff --git a/include/dt-bindings/clock/qcom,gcc-msm8916.h b/include/dt-bindings/clock/qcom,gcc-msm8916.h
new file mode 100644 (file)
index 0000000..5630344
--- /dev/null
@@ -0,0 +1,179 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright 2015 Linaro Limited
+ */
+
+#ifndef _DT_BINDINGS_CLK_MSM_GCC_8916_H
+#define _DT_BINDINGS_CLK_MSM_GCC_8916_H
+
+#define GPLL0                                  0
+#define GPLL0_VOTE                             1
+#define BIMC_PLL                               2
+#define BIMC_PLL_VOTE                          3
+#define GPLL1                                  4
+#define GPLL1_VOTE                             5
+#define GPLL2                                  6
+#define GPLL2_VOTE                             7
+#define PCNOC_BFDCD_CLK_SRC                    8
+#define SYSTEM_NOC_BFDCD_CLK_SRC               9
+#define CAMSS_AHB_CLK_SRC                      10
+#define APSS_AHB_CLK_SRC                       11
+#define CSI0_CLK_SRC                           12
+#define CSI1_CLK_SRC                           13
+#define GFX3D_CLK_SRC                          14
+#define VFE0_CLK_SRC                           15
+#define BLSP1_QUP1_I2C_APPS_CLK_SRC            16
+#define BLSP1_QUP1_SPI_APPS_CLK_SRC            17
+#define BLSP1_QUP2_I2C_APPS_CLK_SRC            18
+#define BLSP1_QUP2_SPI_APPS_CLK_SRC            19
+#define BLSP1_QUP3_I2C_APPS_CLK_SRC            20
+#define BLSP1_QUP3_SPI_APPS_CLK_SRC            21
+#define BLSP1_QUP4_I2C_APPS_CLK_SRC            22
+#define BLSP1_QUP4_SPI_APPS_CLK_SRC            23
+#define BLSP1_QUP5_I2C_APPS_CLK_SRC            24
+#define BLSP1_QUP5_SPI_APPS_CLK_SRC            25
+#define BLSP1_QUP6_I2C_APPS_CLK_SRC            26
+#define BLSP1_QUP6_SPI_APPS_CLK_SRC            27
+#define BLSP1_UART1_APPS_CLK_SRC               28
+#define BLSP1_UART2_APPS_CLK_SRC               29
+#define CCI_CLK_SRC                            30
+#define CAMSS_GP0_CLK_SRC                      31
+#define CAMSS_GP1_CLK_SRC                      32
+#define JPEG0_CLK_SRC                          33
+#define MCLK0_CLK_SRC                          34
+#define MCLK1_CLK_SRC                          35
+#define CSI0PHYTIMER_CLK_SRC                   36
+#define CSI1PHYTIMER_CLK_SRC                   37
+#define CPP_CLK_SRC                            38
+#define CRYPTO_CLK_SRC                         39
+#define GP1_CLK_SRC                            40
+#define GP2_CLK_SRC                            41
+#define GP3_CLK_SRC                            42
+#define BYTE0_CLK_SRC                          43
+#define ESC0_CLK_SRC                           44
+#define MDP_CLK_SRC                            45
+#define PCLK0_CLK_SRC                          46
+#define VSYNC_CLK_SRC                          47
+#define PDM2_CLK_SRC                           48
+#define SDCC1_APPS_CLK_SRC                     49
+#define SDCC2_APPS_CLK_SRC                     50
+#define APSS_TCU_CLK_SRC                       51
+#define USB_HS_SYSTEM_CLK_SRC                  52
+#define VCODEC0_CLK_SRC                                53
+#define GCC_BLSP1_AHB_CLK                      54
+#define GCC_BLSP1_SLEEP_CLK                    55
+#define GCC_BLSP1_QUP1_I2C_APPS_CLK            56
+#define GCC_BLSP1_QUP1_SPI_APPS_CLK            57
+#define GCC_BLSP1_QUP2_I2C_APPS_CLK            58
+#define GCC_BLSP1_QUP2_SPI_APPS_CLK            59
+#define GCC_BLSP1_QUP3_I2C_APPS_CLK            60
+#define GCC_BLSP1_QUP3_SPI_APPS_CLK            61
+#define GCC_BLSP1_QUP4_I2C_APPS_CLK            62
+#define GCC_BLSP1_QUP4_SPI_APPS_CLK            63
+#define GCC_BLSP1_QUP5_I2C_APPS_CLK            64
+#define GCC_BLSP1_QUP5_SPI_APPS_CLK            65
+#define GCC_BLSP1_QUP6_I2C_APPS_CLK            66
+#define GCC_BLSP1_QUP6_SPI_APPS_CLK            67
+#define GCC_BLSP1_UART1_APPS_CLK               68
+#define GCC_BLSP1_UART2_APPS_CLK               69
+#define GCC_BOOT_ROM_AHB_CLK                   70
+#define GCC_CAMSS_CCI_AHB_CLK                  71
+#define GCC_CAMSS_CCI_CLK                      72
+#define GCC_CAMSS_CSI0_AHB_CLK                 73
+#define GCC_CAMSS_CSI0_CLK                     74
+#define GCC_CAMSS_CSI0PHY_CLK                  75
+#define GCC_CAMSS_CSI0PIX_CLK                  76
+#define GCC_CAMSS_CSI0RDI_CLK                  77
+#define GCC_CAMSS_CSI1_AHB_CLK                 78
+#define GCC_CAMSS_CSI1_CLK                     79
+#define GCC_CAMSS_CSI1PHY_CLK                  80
+#define GCC_CAMSS_CSI1PIX_CLK                  81
+#define GCC_CAMSS_CSI1RDI_CLK                  82
+#define GCC_CAMSS_CSI_VFE0_CLK                 83
+#define GCC_CAMSS_GP0_CLK                      84
+#define GCC_CAMSS_GP1_CLK                      85
+#define GCC_CAMSS_ISPIF_AHB_CLK                        86
+#define GCC_CAMSS_JPEG0_CLK                    87
+#define GCC_CAMSS_JPEG_AHB_CLK                 88
+#define GCC_CAMSS_JPEG_AXI_CLK                 89
+#define GCC_CAMSS_MCLK0_CLK                    90
+#define GCC_CAMSS_MCLK1_CLK                    91
+#define GCC_CAMSS_MICRO_AHB_CLK                        92
+#define GCC_CAMSS_CSI0PHYTIMER_CLK             93
+#define GCC_CAMSS_CSI1PHYTIMER_CLK             94
+#define GCC_CAMSS_AHB_CLK                      95
+#define GCC_CAMSS_TOP_AHB_CLK                  96
+#define GCC_CAMSS_CPP_AHB_CLK                  97
+#define GCC_CAMSS_CPP_CLK                      98
+#define GCC_CAMSS_VFE0_CLK                     99
+#define GCC_CAMSS_VFE_AHB_CLK                  100
+#define GCC_CAMSS_VFE_AXI_CLK                  101
+#define GCC_CRYPTO_AHB_CLK                     102
+#define GCC_CRYPTO_AXI_CLK                     103
+#define GCC_CRYPTO_CLK                         104
+#define GCC_OXILI_GMEM_CLK                     105
+#define GCC_GP1_CLK                            106
+#define GCC_GP2_CLK                            107
+#define GCC_GP3_CLK                            108
+#define GCC_MDSS_AHB_CLK                       109
+#define GCC_MDSS_AXI_CLK                       110
+#define GCC_MDSS_BYTE0_CLK                     111
+#define GCC_MDSS_ESC0_CLK                      112
+#define GCC_MDSS_MDP_CLK                       113
+#define GCC_MDSS_PCLK0_CLK                     114
+#define GCC_MDSS_VSYNC_CLK                     115
+#define GCC_MSS_CFG_AHB_CLK                    116
+#define GCC_OXILI_AHB_CLK                      117
+#define GCC_OXILI_GFX3D_CLK                    118
+#define GCC_PDM2_CLK                           119
+#define GCC_PDM_AHB_CLK                                120
+#define GCC_PRNG_AHB_CLK                       121
+#define GCC_SDCC1_AHB_CLK                      122
+#define GCC_SDCC1_APPS_CLK                     123
+#define GCC_SDCC2_AHB_CLK                      124
+#define GCC_SDCC2_APPS_CLK                     125
+#define GCC_GTCU_AHB_CLK                       126
+#define GCC_JPEG_TBU_CLK                       127
+#define GCC_MDP_TBU_CLK                                128
+#define GCC_SMMU_CFG_CLK                       129
+#define GCC_VENUS_TBU_CLK                      130
+#define GCC_VFE_TBU_CLK                                131
+#define GCC_USB2A_PHY_SLEEP_CLK                        132
+#define GCC_USB_HS_AHB_CLK                     133
+#define GCC_USB_HS_SYSTEM_CLK                  134
+#define GCC_VENUS0_AHB_CLK                     135
+#define GCC_VENUS0_AXI_CLK                     136
+#define GCC_VENUS0_VCODEC0_CLK                 137
+#define BIMC_DDR_CLK_SRC                       138
+#define GCC_APSS_TCU_CLK                       139
+#define GCC_GFX_TCU_CLK                                140
+#define BIMC_GPU_CLK_SRC                       141
+#define GCC_BIMC_GFX_CLK                       142
+#define GCC_BIMC_GPU_CLK                       143
+#define ULTAUDIO_LPAIF_PRI_I2S_CLK_SRC         144
+#define ULTAUDIO_LPAIF_SEC_I2S_CLK_SRC         145
+#define ULTAUDIO_LPAIF_AUX_I2S_CLK_SRC         146
+#define ULTAUDIO_XO_CLK_SRC                    147
+#define ULTAUDIO_AHBFABRIC_CLK_SRC             148
+#define CODEC_DIGCODEC_CLK_SRC                 149
+#define GCC_ULTAUDIO_PCNOC_MPORT_CLK           150
+#define GCC_ULTAUDIO_PCNOC_SWAY_CLK            151
+#define GCC_ULTAUDIO_AVSYNC_XO_CLK             152
+#define GCC_ULTAUDIO_STC_XO_CLK                        153
+#define GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_CLK    154
+#define GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_LPM_CLK        155
+#define GCC_ULTAUDIO_LPAIF_PRI_I2S_CLK         156
+#define GCC_ULTAUDIO_LPAIF_SEC_I2S_CLK         157
+#define GCC_ULTAUDIO_LPAIF_AUX_I2S_CLK         158
+#define GCC_CODEC_DIGCODEC_CLK                 159
+#define GCC_MSS_Q6_BIMC_AXI_CLK                        160
+
+/* Indexes for GDSCs */
+#define BIMC_GDSC                              0
+#define VENUS_GDSC                             1
+#define MDSS_GDSC                              2
+#define JPEG_GDSC                              3
+#define VFE_GDSC                               4
+#define OXILI_GDSC                             5
+
+#endif