/*
 * Check the APIC IDs in bios_cpu_apicid and choose the APIC mode.
 */
void __init default_setup_apic_routing(void)
{

	enable_IR_x2apic();

#ifdef CONFIG_X86_X2APIC
	if (x2apic_mode
#ifdef CONFIG_X86_UV
		       && apic != &apic_x2apic_uv_x
#endif
		       ) {
		if (x2apic_phys)
			apic = &apic_x2apic_phys;
		else
			apic = &apic_x2apic_cluster;
	}
#endif

	if (apic == &apic_flat && num_possible_cpus() > 8)
			apic = &apic_physflat;

	printk(KERN_INFO "Setting APIC routing to %s\n", apic->name);

	if (is_vsmp_box()) {
		/* need to update phys_pkg_id */
		apic->phys_pkg_id = apicid_phys_pkg_id;
	}

	/*
	 * Now that apic routing model is selected, configure the
	 * fault handling for intr remapping.
	 */
	if (intr_remapping_enabled)
		enable_drhd_fault_handling();
}
예제 #2
0
파일: probe_64.c 프로젝트: 0-T-0/ps4-linux
/*
 * Check the APIC IDs in bios_cpu_apicid and choose the APIC mode.
 */
void __init default_setup_apic_routing(void)
{
	struct apic **drv;

	enable_IR_x2apic();

	for (drv = __apicdrivers; drv < __apicdrivers_end; drv++) {
		if ((*drv)->probe && (*drv)->probe()) {
			if (apic != *drv) {
				apic = *drv;
				pr_info("Switched APIC routing to %s.\n",
					apic->name);
			}
			break;
		}
	}

	if (x86_platform.apic_post_init)
		x86_platform.apic_post_init();
}
예제 #3
0
파일: 472a.c 프로젝트: models-team/eba
void native_smp_prepare_cpus()
{
  enable_IR_x2apic();
  smp_sanity_check();
}
예제 #4
0
파일: 472a.c 프로젝트: models-team/eba
int APIC_init_uniprocessor(void)
{
  enable_IR_x2apic();
}
예제 #5
0
int __init APIC_init_uniprocessor(void)
{
    if (disable_apic) {
        pr_info("Apic disabled\n");
        return -1;
    }
#ifdef CONFIG_X86_64
    if (!cpu_has_apic) {
        disable_apic = 1;
        pr_info("Apic disabled by BIOS\n");
        return -1;
    }
#else
    if (!smp_found_config && !cpu_has_apic)
        return -1;


    if (!cpu_has_apic &&
            APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
        pr_err("BIOS bug, local APIC 0x%x not detected!...\n",
               boot_cpu_physical_apicid);
        return -1;
    }
#endif

    enable_IR_x2apic();
#ifdef CONFIG_X86_64
    default_setup_apic_routing();
#endif

    verify_local_APIC();
    connect_bsp_APIC();

#ifdef CONFIG_X86_64
    apic_write(APIC_ID, SET_APIC_ID(boot_cpu_physical_apicid));
#else

# ifdef CONFIG_CRASH_DUMP
    boot_cpu_physical_apicid = read_apic_id();
# endif
#endif
    physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map);
    setup_local_APIC();

#ifdef CONFIG_X86_IO_APIC

    if (!skip_ioapic_setup && nr_ioapics)
        enable_IO_APIC();
#endif

    end_local_APIC_setup();

#ifdef CONFIG_X86_IO_APIC
    if (smp_found_config && !skip_ioapic_setup && nr_ioapics)
        setup_IO_APIC();
    else {
        nr_ioapics = 0;
        localise_nmi_watchdog();
    }
#else
    localise_nmi_watchdog();
#endif

    x86_init.timers.setup_percpu_clockev();
#ifdef CONFIG_X86_64
    check_nmi_watchdog();
#endif

    return 0;
}