12392c8c8SSukadev Bhattiprolu /* 22392c8c8SSukadev Bhattiprolu * Copyright 2016-17 IBM Corp. 32392c8c8SSukadev Bhattiprolu * 42392c8c8SSukadev Bhattiprolu * This program is free software; you can redistribute it and/or 52392c8c8SSukadev Bhattiprolu * modify it under the terms of the GNU General Public License 62392c8c8SSukadev Bhattiprolu * as published by the Free Software Foundation; either version 72392c8c8SSukadev Bhattiprolu * 2 of the License, or (at your option) any later version. 82392c8c8SSukadev Bhattiprolu */ 92392c8c8SSukadev Bhattiprolu #include <asm/ppc-opcode.h> 10ab3759b5SSimon Guo #include <asm/reg.h> 112392c8c8SSukadev Bhattiprolu 122392c8c8SSukadev Bhattiprolu /* 132392c8c8SSukadev Bhattiprolu * Copy/paste instructions: 142392c8c8SSukadev Bhattiprolu * 152392c8c8SSukadev Bhattiprolu * copy RA,RB 162392c8c8SSukadev Bhattiprolu * Copy contents of address (RA) + effective_address(RB) 172392c8c8SSukadev Bhattiprolu * to internal copy-buffer. 182392c8c8SSukadev Bhattiprolu * 192392c8c8SSukadev Bhattiprolu * paste RA,RB 202392c8c8SSukadev Bhattiprolu * Paste contents of internal copy-buffer to the address 212392c8c8SSukadev Bhattiprolu * (RA) + effective_address(RB) 222392c8c8SSukadev Bhattiprolu */ 232392c8c8SSukadev Bhattiprolu static inline int vas_copy(void *crb, int offset) 242392c8c8SSukadev Bhattiprolu { 252392c8c8SSukadev Bhattiprolu asm volatile(PPC_COPY(%0, %1)";" 262392c8c8SSukadev Bhattiprolu : 272392c8c8SSukadev Bhattiprolu : "b" (offset), "b" (crb) 282392c8c8SSukadev Bhattiprolu : "memory"); 292392c8c8SSukadev Bhattiprolu 302392c8c8SSukadev Bhattiprolu return 0; 312392c8c8SSukadev Bhattiprolu } 322392c8c8SSukadev Bhattiprolu 332392c8c8SSukadev Bhattiprolu static inline int vas_paste(void *paste_address, int offset) 342392c8c8SSukadev Bhattiprolu { 352392c8c8SSukadev Bhattiprolu u32 cr; 362392c8c8SSukadev Bhattiprolu 372392c8c8SSukadev Bhattiprolu cr = 0; 382392c8c8SSukadev Bhattiprolu asm volatile(PPC_PASTE(%1, %2)";" 392392c8c8SSukadev Bhattiprolu "mfocrf %0, 0x80;" 402392c8c8SSukadev Bhattiprolu : "=r" (cr) 412392c8c8SSukadev Bhattiprolu : "b" (offset), "b" (paste_address) 422392c8c8SSukadev Bhattiprolu : "memory", "cr0"); 432392c8c8SSukadev Bhattiprolu 4475743649SHaren Myneni /* We mask with 0xE to ignore SO */ 4575743649SHaren Myneni return (cr >> CR0_SHIFT) & 0xE; 462392c8c8SSukadev Bhattiprolu } 47