/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright 2016-17 IBM Corp. */ #include <asm/ppc-opcode.h> #include <asm/reg.h> /* * Copy/paste instructions: * * copy RA,RB * Copy contents of address (RA) + effective_address(RB) * to internal copy-buffer. * * paste RA,RB * Paste contents of internal copy-buffer to the address * (RA) + effective_address(RB) */ static inline int vas_copy(void *crb, int offset) { asm volatile(PPC_COPY(%0, %1)";" : : "b" (offset), "b" (crb) : "memory"); return 0; } static inline int vas_paste(void *paste_address, int offset) { u32 cr; cr = 0; asm volatile(PPC_PASTE(%1, %2)";" "mfocrf %0, 0x80;" : "=r" (cr) : "b" (offset), "b" (paste_address) : "memory", "cr0"); /* We mask with 0xE to ignore SO */ return (cr >> CR0_SHIFT) & 0xE; }