1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 27744ccdbSTom Lendacky /* 37744ccdbSTom Lendacky * AMD Memory Encryption Support 47744ccdbSTom Lendacky * 57744ccdbSTom Lendacky * Copyright (C) 2016 Advanced Micro Devices, Inc. 67744ccdbSTom Lendacky * 77744ccdbSTom Lendacky * Author: Tom Lendacky <[email protected]> 87744ccdbSTom Lendacky */ 97744ccdbSTom Lendacky 107744ccdbSTom Lendacky #ifndef __MEM_ENCRYPT_H__ 117744ccdbSTom Lendacky #define __MEM_ENCRYPT_H__ 127744ccdbSTom Lendacky 137744ccdbSTom Lendacky #ifndef __ASSEMBLY__ 147744ccdbSTom Lendacky 157744ccdbSTom Lendacky #ifdef CONFIG_ARCH_HAS_MEM_ENCRYPT 167744ccdbSTom Lendacky 177744ccdbSTom Lendacky #include <asm/mem_encrypt.h> 187744ccdbSTom Lendacky 197744ccdbSTom Lendacky #endif /* CONFIG_ARCH_HAS_MEM_ENCRYPT */ 207744ccdbSTom Lendacky 2121d9bb4aSBorislav Petkov #ifdef CONFIG_AMD_MEM_ENCRYPT 2221729f81STom Lendacky /* 2321729f81STom Lendacky * The __sme_set() and __sme_clr() macros are useful for adding or removing 2421729f81STom Lendacky * the encryption mask from a value (e.g. when dealing with pagetable 2521729f81STom Lendacky * entries). 2621729f81STom Lendacky */ 2721d9bb4aSBorislav Petkov #define __sme_set(x) ((x) | sme_me_mask) 2821d9bb4aSBorislav Petkov #define __sme_clr(x) ((x) & ~sme_me_mask) 29*b66e2ee7SSuzuki K Poulose 30*b66e2ee7SSuzuki K Poulose #define dma_addr_encrypted(x) __sme_set(x) 31*b66e2ee7SSuzuki K Poulose #define dma_addr_canonical(x) __sme_clr(x) 32*b66e2ee7SSuzuki K Poulose 3321d9bb4aSBorislav Petkov #else 3421d9bb4aSBorislav Petkov #define __sme_set(x) (x) 3521d9bb4aSBorislav Petkov #define __sme_clr(x) (x) 3621d9bb4aSBorislav Petkov #endif 3721729f81STom Lendacky 38*b66e2ee7SSuzuki K Poulose /* 39*b66e2ee7SSuzuki K Poulose * dma_addr_encrypted() and dma_addr_unencrypted() are for converting a given DMA 40*b66e2ee7SSuzuki K Poulose * address to the respective type of addressing. 41*b66e2ee7SSuzuki K Poulose * 42*b66e2ee7SSuzuki K Poulose * dma_addr_canonical() is used to reverse any conversions for encrypted/decrypted 43*b66e2ee7SSuzuki K Poulose * back to the canonical address. 44*b66e2ee7SSuzuki K Poulose */ 45*b66e2ee7SSuzuki K Poulose #ifndef dma_addr_encrypted 46*b66e2ee7SSuzuki K Poulose #define dma_addr_encrypted(x) (x) 47*b66e2ee7SSuzuki K Poulose #endif 48*b66e2ee7SSuzuki K Poulose 49*b66e2ee7SSuzuki K Poulose #ifndef dma_addr_unencrypted 50*b66e2ee7SSuzuki K Poulose #define dma_addr_unencrypted(x) (x) 51*b66e2ee7SSuzuki K Poulose #endif 52*b66e2ee7SSuzuki K Poulose 53*b66e2ee7SSuzuki K Poulose #ifndef dma_addr_canonical 54*b66e2ee7SSuzuki K Poulose #define dma_addr_canonical(x) (x) 55*b66e2ee7SSuzuki K Poulose #endif 56*b66e2ee7SSuzuki K Poulose 577744ccdbSTom Lendacky #endif /* __ASSEMBLY__ */ 587744ccdbSTom Lendacky 597744ccdbSTom Lendacky #endif /* __MEM_ENCRYPT_H__ */ 60