]> git.sur5r.net Git - u-boot/blobdiff - arch/arm/mach-keystone/init.c
sunxi: Add base address for GIC
[u-boot] / arch / arm / mach-keystone / init.c
index a9a7d41160126e571ff073575c787a453df7a044..3b6d5efce1a1386f2203d5e75b0e46892612e47f 100644 (file)
@@ -96,20 +96,81 @@ static void config_pcie_mode(int pcie_port,  enum pci_mode mode)
        __raw_writel(val, KS2_DEVCFG);
 }
 
+static void msmc_k2hkle_common_setup(void)
+{
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_0);
+       msmc_share_all_segments(K2HKLE_MSMC_SEGMENT_ARM);
+       msmc_share_all_segments(K2HKLE_MSMC_SEGMENT_NETCP);
+#ifdef KS2_MSMC_SEGMENT_QM_PDSP
+       msmc_share_all_segments(K2HKLE_MSMC_SEGMENT_QM_PDSP);
+#endif
+       msmc_share_all_segments(K2HKLE_MSMC_SEGMENT_PCIE0);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_DEBUG);
+}
+
+static void msmc_k2hk_setup(void)
+{
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_1);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_2);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_3);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_4);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_5);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_6);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_7);
+       msmc_share_all_segments(K2HKE_MSMC_SEGMENT_HYPERLINK);
+}
+
+static inline void msmc_k2l_setup(void)
+{
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_1);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_2);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_3);
+       msmc_share_all_segments(K2L_MSMC_SEGMENT_PCIE1);
+}
+
+static inline void msmc_k2e_setup(void)
+{
+       msmc_share_all_segments(K2E_MSMC_SEGMENT_PCIE1);
+       msmc_share_all_segments(K2HKE_MSMC_SEGMENT_HYPERLINK);
+       msmc_share_all_segments(K2E_MSMC_SEGMENT_TSIP);
+}
+
+static void msmc_k2g_setup(void)
+{
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_0);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_ARM);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_ICSS0);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_ICSS1);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_NSS);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_PCIE);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_USB);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_MLB);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_PMMC);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_DSS);
+       msmc_share_all_segments(K2G_MSMC_SEGMENT_MMC);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_DEBUG);
+}
+
 int arch_cpu_init(void)
 {
        chip_configuration_unlock();
        icache_enable();
 
-       msmc_share_all_segments(KS2_MSMC_SEGMENT_TETRIS);
-       msmc_share_all_segments(KS2_MSMC_SEGMENT_NETCP);
-       msmc_share_all_segments(KS2_MSMC_SEGMENT_QM_PDSP);
-       msmc_share_all_segments(KS2_MSMC_SEGMENT_PCIE0);
+       if (cpu_is_k2g()) {
+               msmc_k2g_setup();
+       } else {
+               msmc_k2hkle_common_setup();
+               if (cpu_is_k2e())
+                       msmc_k2e_setup();
+               else if (cpu_is_k2l())
+                       msmc_k2l_setup();
+               else
+                       msmc_k2hk_setup();
+       }
 
        /* Initialize the PCIe-0 to work as Root Complex */
        config_pcie_mode(0, ROOTCOMPLEX);
 #if defined(CONFIG_SOC_K2E) || defined(CONFIG_SOC_K2L)
-       msmc_share_all_segments(KS2_MSMC_SEGMENT_PCIE1);
        /* Initialize the PCIe-1 to work as Root Complex */
        config_pcie_mode(1, ROOTCOMPLEX);
 #endif
@@ -122,8 +183,10 @@ int arch_cpu_init(void)
         * UART register PWREMU_MGMT is initialized. Linux UART
         * driver doesn't handle this.
         */
+#ifndef CONFIG_DM_SERIAL
        NS16550_init((NS16550_t)(CONFIG_SYS_NS16550_COM2),
                     CONFIG_SYS_NS16550_CLK / 16 / CONFIG_BAUDRATE);
+#endif
 
        return 0;
 }
@@ -167,6 +230,9 @@ int print_cpuinfo(void)
        case CPU_66AK2Ex:
                puts("66AK2Ex SR");
                break;
+       case CPU_66AK2Gx:
+               puts("66AK2Gx SR");
+               break;
        default:
                puts("Unknown\n");
        }