[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 1/1] XEN/ARM: Add Odroid-XU3/XU4 support
On Thu, Feb 11, 2016 at 1:40 AM, Ian Campbell <ian.campbell@xxxxxxxxxx> wrote:
I did some looking at the linux 4.4.y dts for exynos, and this is what I see: exynos3250: cpu0, cpu1 = A7 (1 cluster) exynos4210: cpu0, cpu1 = A9 (1 cluster) exynos4212: cpu0, cpu1 = A9 (1 cluster) exynos4412: cpu0, cpu1, cpu2, cpu3 = A9 (1 cluster) exynos4415: cpu0, cpu1, cpu2, cpu3 = A9 (1 cluster) exynos5250: cpu0, cpu1 = A15 (1 cluster) exynos5260: cpu0, cpu1 = A15. cpu2, cpu3, cpu4, cpu5 = A7 (2 clusters) exynos5410: cpu0, cpu1, cpu2, cpu3 = A15 (1 cluster - even thougg it has 2 clusters, but not both can be on at same time) exynos5420: cpu0, cpu1, cpu2, cpu3 = A15. cpu4, cpu5, cpu6, cpu7 = A7 (2 clusters) exynos5422: cpu0, cpu1, cpu2, cpu3 = A7. cpu4, cpu5, cpu6, cpu7 = A15 (2 clusters) exynos5440: cpu0, cpu1, cpu2, cpu3 = A15 (1 cluster) If we look at the ones that can potentially support hardware virtualization, limits us to the A7s and the A15s. That gives us: exynos3250: cpu0, cpu1 = A7 (1 cluster) exynos5250: cpu0, cpu1 = A15 (1 cluster) exynos5260: cpu0, cpu1 = A15. cpu2, cpu3, cpu4, cpu5 = A7 (2 clusters) exynos5410: cpu0, cpu1, cpu2, cpu3 = A15 (1 cluster) exynos5420: cpu0, cpu1, cpu2, cpu3 = A15. cpu4, cpu5, cpu6, cpu7 = A7 (2 clusters) exynos5422: cpu0, cpu1, cpu2, cpu3 = A7. cpu4, cpu5, cpu6, cpu7 = A15 (2 clusters) exynos5440: cpu0, cpu1, cpu2, cpu3 = A15 (1 cluster) Of these the only ones which has A7 as the 1st cluster are: exynos3250: cpu0, cpu1 = A7 exynos5420: cpu0, cpu1, cpu2, cpu3 = A15. cpu4, cpu5, cpu6, cpu7 = A7 (2 clusters) Note that the exynos5800 has the same cpu config as the exysno5420. I was looking at the cpu bring up code, and notice that if the secondary cpu being brought up is an A7, then it invariably does the below: For the exynos3250: in platsmp.c void exynos_core_restart(u32 core_id) {     u32 val;     if (!of_machine_is_compatible("samsung,exynos3250"))         return;     while (!pmu_raw_readl(S5P_PMU_SPARE2))         udelay(10);     udelay(10);     val = pmu_raw_readl(EXYNOS_ARM_CORE_STATUS(core_id));     val |= S5P_CORE_WAKEUP_FROM_LOCAL_CFG;     pmu_raw_writel(val, EXYNOS_ARM_CORE_STATUS(core_id));     pmu_raw_writel(EXYNOS_CORE_PO_RESET(core_id), EXYNOS_SWRESET); } And for the exynos5800/exynos5422: mcpm-exynos.c static int exynos_cpu_powerup(unsigned int cpu, unsigned int cluster) {     unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER);     pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster);     if (cpu >= EXYNOS5420_CPUS_PER_CLUSTER ||         cluster >= EXYNOS5420_NR_CLUSTERS)         return -EINVAL;     if (!exynos_cpu_power_state(cpunr)) {         exynos_cpu_power_up(cpunr);         /*         Â* This assumes the cluster number of the big cores(Cortex A15)         Â* is 0 and the Little cores(Cortex A7) is 1.         * When the system was booted from the Little core,         Â* they should be reset during power up cpu.         Â*/         if (cluster &&           cluster == MPIDR_AFFINITY_LEVEL(cpu_logical_map(0), 1)) {             /*             Â* Before we reset the Little cores, we should wait             Â* the SPARE2 register is set to 1 because the init             Â* codes of the iROM will set the register after             Â* initialization.             Â*/             while (!pmu_raw_readl(S5P_PMU_SPARE2))                 udelay(10);             pmu_raw_writel(EXYNOS5420_KFC_CORE_RESET(cpu),                     EXYNOS_SWRESET);         }     }     return 0; } This pretty much indicates that when bringing up the A7s, the special reset sequence is deemed essential. Probably, we could generalize that it might be true for future exynos's having A7s. Â
Thanks, I shall dig into this some more. Â Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |