From 1148786c05d97b4c646c11e770b275809b562953 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Thu, 15 Oct 2015 12:22:27 -0500 Subject: arm64: remove spin table support As ARM Trusted Firmware is the only first class citizen for booting arm64 multi-processor in coreboot remove spintable support. If SoCs want to bring up MP then ATF needs to be ported and integrated. Change-Id: I1f38b8d8b0952eee50cc64440bfd010b1dd0bff4 Signed-off-by: Aaron Durbin Reviewed-on: http://review.coreboot.org/11908 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- src/arch/arm64/Kconfig | 5 -- src/arch/arm64/Makefile.inc | 1 - src/arch/arm64/boot.c | 5 -- src/arch/arm64/include/arch/spintable.h | 45 ---------------- src/arch/arm64/spintable.c | 96 --------------------------------- src/arch/arm64/spintable_asm.S | 34 ------------ 6 files changed, 186 deletions(-) delete mode 100644 src/arch/arm64/include/arch/spintable.h delete mode 100644 src/arch/arm64/spintable.c delete mode 100644 src/arch/arm64/spintable_asm.S (limited to 'src/arch/arm64') diff --git a/src/arch/arm64/Kconfig b/src/arch/arm64/Kconfig index 2f019a34be..2c8713224c 100644 --- a/src/arch/arm64/Kconfig +++ b/src/arch/arm64/Kconfig @@ -28,11 +28,6 @@ config ARM64_BOOTBLOCK_CUSTOM bool default n -config ARM64_USE_SPINTABLE - bool - default n - depends on ARCH_RAMSTAGE_ARM64 - config ARM64_USE_ARM_TRUSTED_FIRMWARE bool default n diff --git a/src/arch/arm64/Makefile.inc b/src/arch/arm64/Makefile.inc index e82e8720be..fabe7b3241 100644 --- a/src/arch/arm64/Makefile.inc +++ b/src/arch/arm64/Makefile.inc @@ -142,7 +142,6 @@ ramstage-y += memcpy.S ramstage-y += memmove.S ramstage-y += stage_entry.S ramstage-y += cpu-stubs.c -ramstage-$(CONFIG_ARM64_USE_SPINTABLE) += spintable.c spintable_asm.S ramstage-$(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE) += arm_tf.c ramstage-y += transition.c transition_asm.S diff --git a/src/arch/arm64/boot.c b/src/arch/arm64/boot.c index 6076e67065..10d72576d9 100644 --- a/src/arch/arm64/boot.c +++ b/src/arch/arm64/boot.c @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -39,10 +38,6 @@ static void run_payload(struct prog *prog) else { uint8_t current_el = get_current_el(); - /* Start the other CPUs spinning. */ - if (IS_ENABLED(CONFIG_ARM64_USE_SPINTABLE)) - spintable_start(); - cache_sync_instructions(); printk(BIOS_SPEW, "entry = %p\n", doit); diff --git a/src/arch/arm64/include/arch/spintable.h b/src/arch/arm64/include/arch/spintable.h deleted file mode 100644 index 598090ac60..0000000000 --- a/src/arch/arm64/include/arch/spintable.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright 2014 Google, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef __ARCH_SPINTABLE_H__ -#define __ARCH_SPINTABLE_H__ - -struct spintable_attributes { - void (*entry)(void *); - void *addr; -}; - -#if IS_ENABLED(CONFIG_ARM64_USE_SPINTABLE) - -/* Initialize spintable with provided monitor address. */ -void spintable_init(void *monitor_address); - -/* Return NULL on failure, otherwise the spintable info. */ -const struct spintable_attributes *spintable_get_attributes(void); - -#else /* IS_ENABLED(CONFIG_ARM64_USE_SPINTABLE) */ - -static inline void spintable_init(void *monitor_address) {} -static inline const struct spintable_attributes *spintable_get_attributes(void) -{ - return NULL; -} - -#endif /* IS_ENABLED(CONFIG_ARM64_USE_SPINTABLE) */ - -/* Start spinning on the non-boot CPUs. */ -void spintable_start(void); - -#endif /* __ARCH_SPINTABLE_H__ */ diff --git a/src/arch/arm64/spintable.c b/src/arch/arm64/spintable.c deleted file mode 100644 index 83b2207cf2..0000000000 --- a/src/arch/arm64/spintable.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright 2014 Google Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include -#include -#include -#include -#include -#include -#include - -static struct spintable_attributes spin_attrs; - -void spintable_init(void *monitor_address) -{ - extern void __wait_for_spin_table_request(void); - const size_t code_size = 4096; - - if (monitor_address == NULL) { - printk(BIOS_ERR, "spintable: NULL address to monitor.\n"); - return; - } - - spin_attrs.entry = cbmem_add(CBMEM_ID_SPINTABLE, code_size); - - if (spin_attrs.entry == NULL) - return; - - spin_attrs.addr = monitor_address; - - printk(BIOS_INFO, "spintable @ %p will monitor %p\n", - spin_attrs.entry, spin_attrs.addr); - - /* Ensure the memory location is zero'd out. */ - *(uint64_t *)monitor_address = 0; - - memcpy(spin_attrs.entry, __wait_for_spin_table_request, code_size); - - dcache_clean_invalidate_by_mva(monitor_address, sizeof(uint64_t)); - dcache_clean_invalidate_by_mva(spin_attrs.entry, code_size); -} - -static void spintable_enter(void *unused) -{ - struct exc_state state; - const struct spintable_attributes *attrs; - int current_el; - - attrs = spintable_get_attributes(); - - current_el = get_current_el(); - - if (current_el != EL3) - attrs->entry(attrs->addr); - - memset(&state, 0, sizeof(state)); - state.elx.spsr = get_eret_el(EL2, SPSR_USE_L); - - transition_with_entry(attrs->entry, attrs->addr, &state); -} - -const struct spintable_attributes *spintable_get_attributes(void) -{ - if (spin_attrs.entry == NULL) { - printk(BIOS_ERR, "spintable: monitor code not present.\n"); - return NULL; - } - - return &spin_attrs; -} - -void spintable_start(void) -{ - struct cpu_action action = { - .run = spintable_enter, - }; - - if (spintable_get_attributes() == NULL) - return; - - printk(BIOS_INFO, "All non-boot CPUs to enter spintable.\n"); - - arch_run_on_all_cpus_but_self_async(&action); -} diff --git a/src/arch/arm64/spintable_asm.S b/src/arch/arm64/spintable_asm.S deleted file mode 100644 index 470a9bb3ef..0000000000 --- a/src/arch/arm64/spintable_asm.S +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright 2014 Google Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include - -ENTRY(__wait_for_spin_table_request) - /* Entry here is in EL2 with the magic address in x0. */ - mov x28, x0 -1: - ldr x27, [x28] - cmp x27, xzr - b.ne 2f - wfe - b 1b -2: - /* Entry into the kernel. */ - mov x0, xzr - mov x1, xzr - mov x2, xzr - mov x3, xzr - br x27 -ENDPROC(__wait_for_spin_table_request) -- cgit v1.2.3