コード例 #1
0
ファイル: smpboot.c プロジェクト: HPSI/xen-v4v
static int __init smp_spin_table_cpu_up(int cpu)
{
    paddr_t __iomem *release;

    if (!cpu_release_addr[cpu])
    {
        printk("CPU%d: No release addr\n", cpu);
        return -ENODEV;
    }

    release = ioremap_nocache(cpu_release_addr[cpu], 8);
    if ( !release )
    {
        dprintk(XENLOG_ERR, "CPU%d: Unable to map release address\n", cpu);
        return -EFAULT;
    }

    writeq(__pa(init_secondary), release);

    iounmap(release);

    sev();

    return cpu_up_send_sgi(cpu);
}
コード例 #2
0
ファイル: exynos5.c プロジェクト: CPFL/xen
static int exynos5_cpu_up(int cpu)
{
    u64 power_base_addr;
    u64 size;
    void __iomem *power;
    int rc;

    rc = exynos5_get_pmu_baseandsize(&power_base_addr, &size);
    if ( rc )
        return rc;

    power = ioremap_nocache(power_base_addr, size);
    if ( !power )
    {
        dprintk(XENLOG_ERR, "Unable to map power MMIO\n");
        return -EFAULT;
    }

    rc = exynos5_cpu_power_up(power, cpu);
    if ( rc )
    {
        iounmap(power);
        return -ETIMEDOUT;
    }

    iounmap(power);

    if ( secure_firmware )
        call_smc(SMC_CMD_CPU1BOOT, cpu, 0, 0);

    return cpu_up_send_sgi(cpu);
}