Lines Matching +full:8 +full:- +full:cpu

1 // SPDX-License-Identifier: GPL-2.0-only
16 #include <asm/entry-common.h>
35 regs->status |= SR_FS_DIRTY; in set_f32_rd()
53 regs->status |= SR_FS_DIRTY; in set_f64_rd()
68 regs->status |= SR_FS_DIRTY; in get_f64_rs()
83 regs->status |= SR_FS_DIRTY; in get_f64_rs()
99 regs->status |= SR_FS_DIRTY; in get_f32_rs()
154 return -EFAULT; in get_insn()
166 return -EFAULT; in get_insn()
172 return -EFAULT; in get_insn()
185 u8 data_bytes[8];
196 unsigned long epc = regs->epc; in handle_vector_misaligned_load()
200 return -1; in handle_vector_misaligned_load()
205 regs->epc = epc + INSN_LEN(insn); in handle_vector_misaligned_load()
210 regs->epc = epc; in handle_vector_misaligned_load()
211 return -1; in handle_vector_misaligned_load()
216 return -1; in handle_vector_misaligned_load()
223 unsigned long epc = regs->epc; in handle_scalar_misaligned_load()
225 unsigned long addr = regs->badaddr; in handle_scalar_misaligned_load()
233 return -1; in handle_scalar_misaligned_load()
235 if (user_mode(regs) && (current->thread.align_ctl & PR_UNALIGN_SIGBUS)) in handle_scalar_misaligned_load()
236 return -1; in handle_scalar_misaligned_load()
239 return -1; in handle_scalar_misaligned_load()
241 regs->epc = 0; in handle_scalar_misaligned_load()
245 shift = 8 * (sizeof(unsigned long) - len); in handle_scalar_misaligned_load()
248 len = 8; in handle_scalar_misaligned_load()
249 shift = 8 * (sizeof(unsigned long) - len); in handle_scalar_misaligned_load()
255 len = 8; in handle_scalar_misaligned_load()
261 shift = 8 * (sizeof(unsigned long) - len); in handle_scalar_misaligned_load()
266 len = 8; in handle_scalar_misaligned_load()
267 shift = 8 * (sizeof(unsigned long) - len); in handle_scalar_misaligned_load()
271 len = 8; in handle_scalar_misaligned_load()
272 shift = 8 * (sizeof(unsigned long) - len); in handle_scalar_misaligned_load()
276 shift = 8 * (sizeof(unsigned long) - len); in handle_scalar_misaligned_load()
281 shift = 8 * (sizeof(unsigned long) - len); in handle_scalar_misaligned_load()
284 len = 8; in handle_scalar_misaligned_load()
288 len = 8; in handle_scalar_misaligned_load()
303 shift = 8 * (sizeof(ulong) - len); in handle_scalar_misaligned_load()
306 regs->epc = epc; in handle_scalar_misaligned_load()
307 return -1; in handle_scalar_misaligned_load()
311 return -EOPNOTSUPP; in handle_scalar_misaligned_load()
316 return -1; in handle_scalar_misaligned_load()
323 else if (len == 8) in handle_scalar_misaligned_load()
328 regs->epc = epc + INSN_LEN(insn); in handle_scalar_misaligned_load()
336 unsigned long epc = regs->epc; in handle_scalar_misaligned_store()
338 unsigned long addr = regs->badaddr; in handle_scalar_misaligned_store()
344 return -1; in handle_scalar_misaligned_store()
346 if (user_mode(regs) && (current->thread.align_ctl & PR_UNALIGN_SIGBUS)) in handle_scalar_misaligned_store()
347 return -1; in handle_scalar_misaligned_store()
350 return -1; in handle_scalar_misaligned_store()
352 regs->epc = 0; in handle_scalar_misaligned_store()
360 len = 8; in handle_scalar_misaligned_store()
364 len = 8; in handle_scalar_misaligned_store()
374 len = 8; in handle_scalar_misaligned_store()
377 len = 8; in handle_scalar_misaligned_store()
388 len = 8; in handle_scalar_misaligned_store()
392 len = 8; in handle_scalar_misaligned_store()
408 regs->epc = epc; in handle_scalar_misaligned_store()
409 return -1; in handle_scalar_misaligned_store()
413 return -EOPNOTSUPP; in handle_scalar_misaligned_store()
417 return -1; in handle_scalar_misaligned_store()
422 regs->epc = epc + INSN_LEN(insn); in handle_scalar_misaligned_store()
429 unsigned long epc = regs->epc; in handle_misaligned_load()
434 return -1; in handle_misaligned_load()
443 return -1; in handle_misaligned_load()
451 return -1; in handle_misaligned_store()
464 * In pre-13.0.0 versions of GCC, vector registers cannot appear in in check_vector_unaligned_access_emulated()
484 int cpu; in check_vector_unaligned_access_emulated_all_cpus() local
492 for_each_online_cpu(cpu) in check_vector_unaligned_access_emulated_all_cpus()
493 if (per_cpu(vector_misaligned_access, cpu) in check_vector_unaligned_access_emulated_all_cpus()
508 int cpu; in all_cpus_unaligned_scalar_access_emulated() local
510 for_each_online_cpu(cpu) in all_cpus_unaligned_scalar_access_emulated()
511 if (per_cpu(misaligned_access_speed, cpu) != in all_cpus_unaligned_scalar_access_emulated()
524 int cpu = smp_processor_id(); in check_unaligned_access_emulated() local
525 long *mas_ptr = per_cpu_ptr(&misaligned_access_speed, cpu); in check_unaligned_access_emulated()
535 static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) in cpu_online_check_unaligned_access_emulated() argument
537 long *mas_ptr = per_cpu_ptr(&misaligned_access_speed, cpu); in cpu_online_check_unaligned_access_emulated()
544 * when hotplugging the new cpu, this is something we don't handle. in cpu_online_check_unaligned_access_emulated()
547 pr_crit("CPU misaligned accesses non homogeneous (expected all emulated)\n"); in cpu_online_check_unaligned_access_emulated()
548 return -EINVAL; in cpu_online_check_unaligned_access_emulated()
559 * CPU. in check_unaligned_access_emulated_all_cpus()
579 static int cpu_online_check_unaligned_access_emulated(unsigned int cpu) in cpu_online_check_unaligned_access_emulated() argument
589 static int cpu_online_sbi_unaligned_setup(unsigned int cpu) in cpu_online_sbi_unaligned_setup() argument
594 return -EINVAL; in cpu_online_sbi_unaligned_setup()
620 static int cpu_online_sbi_unaligned_setup(unsigned int cpu __always_unused) in cpu_online_sbi_unaligned_setup()
627 int cpu_online_unaligned_access_init(unsigned int cpu) in cpu_online_unaligned_access_init() argument
631 ret = cpu_online_sbi_unaligned_setup(cpu); in cpu_online_unaligned_access_init()
635 return cpu_online_check_unaligned_access_emulated(cpu); in cpu_online_unaligned_access_init()