void __init smp_prepare_boot_cpu(void) { set_my_cpu_offset(per_cpu_offset(smp_processor_id())); cpuinfo_store_boot_cpu(); save_boot_cpu_run_el(); }
static void __init setup_processor(void) { u64 features; s64 block; u32 cwg; int cls; printk("CPU: AArch64 Processor [%08x] revision %d\n", read_cpuid_id(), read_cpuid_id() & 15); sprintf(init_utsname()->machine, ELF_PLATFORM); elf_hwcap = 0; cpuinfo_store_boot_cpu(); /* * Check for sane CTR_EL0.CWG value. */ cwg = cache_type_cwg(); cls = cache_line_size(); if (!cwg) pr_warn("No Cache Writeback Granule information, assuming cache line size %d\n", cls); if (L1_CACHE_BYTES < cls) pr_warn("L1_CACHE_BYTES smaller than the Cache Writeback Granule (%d < %d)\n", L1_CACHE_BYTES, cls); /* * ID_AA64ISAR0_EL1 contains 4-bit wide signed feature blocks. * The blocks we test below represent incremental functionality * for non-negative values. Negative values are reserved. */ features = read_cpuid(ID_AA64ISAR0_EL1); block = cpuid_feature_extract_field(features, 4); if (block > 0) { switch (block) { default: case 2: elf_hwcap |= HWCAP_PMULL; case 1: elf_hwcap |= HWCAP_AES; case 0: break; } } if (cpuid_feature_extract_field(features, 8) > 0) elf_hwcap |= HWCAP_SHA1; if (cpuid_feature_extract_field(features, 12) > 0) elf_hwcap |= HWCAP_SHA2; if (cpuid_feature_extract_field(features, 16) > 0) elf_hwcap |= HWCAP_CRC32; block = cpuid_feature_extract_field(features, 20); if (block > 0) { switch (block) { default: case 2: elf_hwcap |= HWCAP_ATOMICS; case 1: /* RESERVED */ case 0: break; } } #ifdef CONFIG_COMPAT /* * ID_ISAR5_EL1 carries similar information as above, but pertaining to * the AArch32 32-bit execution state. */ features = read_cpuid(ID_ISAR5_EL1); block = cpuid_feature_extract_field(features, 4); if (block > 0) { switch (block) { default: case 2: compat_elf_hwcap2 |= COMPAT_HWCAP2_PMULL; case 1: compat_elf_hwcap2 |= COMPAT_HWCAP2_AES; case 0: break; } } if (cpuid_feature_extract_field(features, 8) > 0) compat_elf_hwcap2 |= COMPAT_HWCAP2_SHA1; if (cpuid_feature_extract_field(features, 12) > 0) compat_elf_hwcap2 |= COMPAT_HWCAP2_SHA2; if (cpuid_feature_extract_field(features, 16) > 0) compat_elf_hwcap2 |= COMPAT_HWCAP2_CRC32; #endif }