aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2021-06-27 17:51:02 -0600
committerBin Meng <bmeng.cn@gmail.com>2021-07-15 19:50:04 +0800
commit0f5ca1d1f1d399191d6481d1c8853c9ca6fe25ff (patch)
tree15a6f61f4df979dbc53d23e5f2cda44abac33166
parent92873f83d19fa8cedcace2b4c384e6b89ffd5faf (diff)
downloadu-boot-0f5ca1d1f1d399191d6481d1c8853c9ca6fe25ff.zip
u-boot-0f5ca1d1f1d399191d6481d1c8853c9ca6fe25ff.tar.gz
u-boot-0f5ca1d1f1d399191d6481d1c8853c9ca6fe25ff.tar.bz2
x86: Update the MP constants to avoid conflicts
These constants conflict with error codes returned by the MP implementation when something is wrong. In particular, mp_first_cpu() returns MP_SELECT_BSP when running without multiprocessing enabled. Since this is -2, it is interpreted as an error by callers, which expect a positive CPU number for the first CPU. Correct this by using a different range for the pre-defined CPU numbers, above zero and out of the range of possible CPU values. For now it is safe to assume there are no more than 64K CPUs. This fixes the 'mtrr' command when CONFIG_SMP is not enabled. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
-rw-r--r--arch/x86/include/asm/mp.h12
1 files changed, 8 insertions, 4 deletions
diff --git a/arch/x86/include/asm/mp.h b/arch/x86/include/asm/mp.h
index 1a3ae8e..e48ba05 100644
--- a/arch/x86/include/asm/mp.h
+++ b/arch/x86/include/asm/mp.h
@@ -10,18 +10,22 @@
#include <asm/atomic.h>
#include <asm/cache.h>
+#include <linux/bitops.h>
struct udevice;
enum {
- /* Indicates that the function should run on all CPUs */
- MP_SELECT_ALL = -1,
+ /*
+ * Indicates that the function should run on all CPUs. We use a large
+ * number, above the number of real CPUs we expect to find.
+ */
+ MP_SELECT_ALL = BIT(16),
/* Run on boot CPUs */
- MP_SELECT_BSP = -2,
+ MP_SELECT_BSP,
/* Run on non-boot CPUs */
- MP_SELECT_APS = -3,
+ MP_SELECT_APS,
};
typedef int (*mp_callback_t)(struct udevice *cpu, void *arg);