summaryrefslogtreecommitdiff
path: root/include/misc
diff options
context:
space:
mode:
authorIan Munsie <imunsie@au1.ibm.com>2016-05-06 17:46:36 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2016-05-11 21:54:10 +1000
commit7a0d85d313c2066712e530e668bc02bb741a685c (patch)
treeb097194d6a8a1b8144efe32dc2222558dd64626f /include/misc
parent3c206fa77aaaac8cd7d4cfcd840c82495b01b288 (diff)
downloadlwn-7a0d85d313c2066712e530e668bc02bb741a685c.tar.gz
lwn-7a0d85d313c2066712e530e668bc02bb741a685c.zip
cxl: Add kernel API to allow a context to operate with relocate disabled
cxl devices typically access memory using an MMU in much the same way as the CPU, and each context includes a state register much like the MSR in the CPU. Like the CPU, the state register includes a bit to enable relocation, which we currently always enable. In some cases, it may be desirable to allow a device to access memory using real addresses instead of effective addresses, so this adds a new API, cxl_set_translation_mode, that can be used to disable relocation on a given kernel context. This can allow for the creation of a special privileged context that the device can use if it needs relocation disabled, and can use regular contexts at times when it needs relocation enabled. This interface is only available to users of the kernel API for obvious reasons, and will never be supported in a virtualised environment. This will be used by the upcoming cxl support in the mlx5 driver. Signed-off-by: Ian Munsie <imunsie@au1.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'include/misc')
-rw-r--r--include/misc/cxl.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/misc/cxl.h b/include/misc/cxl.h
index 7d5e2613c7b8..56560c5781b4 100644
--- a/include/misc/cxl.h
+++ b/include/misc/cxl.h
@@ -127,6 +127,14 @@ int cxl_afu_reset(struct cxl_context *ctx);
void cxl_set_master(struct cxl_context *ctx);
/*
+ * Sets the context to use real mode memory accesses to operate with
+ * translation disabled. Note that this only makes sense for kernel contexts
+ * under bare metal, and will not work with virtualisation. May only be
+ * performed on stopped contexts.
+ */
+int cxl_set_translation_mode(struct cxl_context *ctx, bool real_mode);
+
+/*
* Map and unmap the AFU Problem Space area. The amount and location mapped
* depends on if this context is a master or slave.
*/