pci: tegra: add/enable support for Tegra210
authorStephen Warren <swarren@nvidia.com>
Mon, 5 Oct 2015 23:00:44 +0000 (17:00 -0600)
committerTom Warren <twarren@nvidia.com>
Thu, 12 Nov 2015 16:21:05 +0000 (09:21 -0700)
This needs a separate compatible value from Tegra124 since the new HW
version has bugs that would prevent a driver for previous HW versions
from operating at all.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Tom Warren <twarren@nvidia.com>
drivers/pci/pci_tegra.c
include/fdtdec.h
lib/fdtdec.c

index bf078b3369baf4af65463429069228c7f0643de5..690896f9f57183f4651553a5b614c951386479de 100644 (file)
@@ -387,6 +387,7 @@ static int tegra_pcie_get_xbar_config(const void *fdt, int node, u32 lanes,
                break;
 
        case COMPAT_NVIDIA_TEGRA124_PCIE:
+       case COMPAT_NVIDIA_TEGRA210_PCIE:
                switch (lanes) {
                case 0x0000104:
                        debug("4x1, 1x1 configuration\n");
@@ -1033,6 +1034,17 @@ static const struct tegra_pcie_soc tegra124_pcie_soc = {
        .force_pca_enable = false,
 };
 
+static const struct tegra_pcie_soc tegra210_pcie_soc = {
+       .num_ports = 2,
+       .pads_pll_ctl = PADS_PLL_CTL_TEGRA30,
+       .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN,
+       .has_pex_clkreq_en = true,
+       .has_pex_bias_ctrl = true,
+       .has_cml_clk = true,
+       .has_gen2 = true,
+       .force_pca_enable = true,
+};
+
 static int process_nodes(const void *fdt, int nodes[], unsigned int count)
 {
        unsigned int i;
@@ -1068,6 +1080,10 @@ static int process_nodes(const void *fdt, int nodes[], unsigned int count)
                        soc = &tegra124_pcie_soc;
                        break;
 
+               case COMPAT_NVIDIA_TEGRA210_PCIE:
+                       soc = &tegra210_pcie_soc;
+                       break;
+
                default:
                        error("unsupported compatible: %s",
                              fdtdec_get_compatible(id));
@@ -1164,6 +1180,12 @@ void pci_init_board(void)
 
        tegra_pcie_board_init();
 
+       count = fdtdec_find_aliases_for_id(fdt, "pcie-controller",
+                                          COMPAT_NVIDIA_TEGRA210_PCIE,
+                                          nodes, ARRAY_SIZE(nodes));
+       if (process_nodes(fdt, nodes, count))
+               return;
+
        count = fdtdec_find_aliases_for_id(fdt, "pcie-controller",
                                           COMPAT_NVIDIA_TEGRA124_PCIE,
                                           nodes, ARRAY_SIZE(nodes));
index 0e36664dca4aed281222a97388089049e1f10ae7..3a6ff1f8aca127ecd59c69bab16660adc5005a63 100644 (file)
@@ -130,6 +130,7 @@ enum fdt_compat_id {
        COMPAT_NVIDIA_TEGRA30_SDMMC,    /* Tegra30 SDMMC controller */
        COMPAT_NVIDIA_TEGRA20_SDMMC,    /* Tegra20 SDMMC controller */
        COMPAT_NVIDIA_TEGRA124_PCIE,    /* Tegra 124 PCIe controller */
+       COMPAT_NVIDIA_TEGRA210_PCIE,    /* Tegra 210 PCIe controller */
        COMPAT_NVIDIA_TEGRA30_PCIE,     /* Tegra 30 PCIe controller */
        COMPAT_NVIDIA_TEGRA20_PCIE,     /* Tegra 20 PCIe controller */
        COMPAT_NVIDIA_TEGRA124_XUSB_PADCTL,
index c1b517706d105b94b72e944edceff08e46454ff9..f1849bcd37f7e2b3b87ec627309b430614ff888a 100644 (file)
@@ -36,6 +36,7 @@ static const char * const compat_names[COMPAT_COUNT] = {
        COMPAT(NVIDIA_TEGRA30_SDMMC, "nvidia,tegra30-sdhci"),
        COMPAT(NVIDIA_TEGRA20_SDMMC, "nvidia,tegra20-sdhci"),
        COMPAT(NVIDIA_TEGRA124_PCIE, "nvidia,tegra124-pcie"),
+       COMPAT(NVIDIA_TEGRA210_PCIE, "nvidia,tegra210-pcie"),
        COMPAT(NVIDIA_TEGRA30_PCIE, "nvidia,tegra30-pcie"),
        COMPAT(NVIDIA_TEGRA20_PCIE, "nvidia,tegra20-pcie"),
        COMPAT(NVIDIA_TEGRA124_XUSB_PADCTL, "nvidia,tegra124-xusb-padctl"),