cxl: Export library to support IBM XSL
This patch exports a in-kernel 'library' API which can be called by other drivers to help interacting with an IBM XSL on a POWER9 system. The XSL (Translation Service Layer) is a stripped down version of the PSL (Power Service Layer) used in some cards such as the Mellanox CX5. Like the PSL, it implements the CAIA architecture, but has a number of differences, mostly in it's implementation dependent registers. The XSL also uses a special DMA cxl mode, which uses a slightly different init sequence for the CAPP and PHB. Signed-off-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com> Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com> Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
218ea31039
commit
3ced8d7300
@@ -586,17 +586,17 @@ err:
|
||||
#define set_endian(sr) ((sr) &= ~(CXL_PSL_SR_An_LE))
|
||||
#endif
|
||||
|
||||
static u64 calculate_sr(struct cxl_context *ctx)
|
||||
u64 cxl_calculate_sr(bool master, bool kernel, bool real_mode, bool p9)
|
||||
{
|
||||
u64 sr = 0;
|
||||
|
||||
set_endian(sr);
|
||||
if (ctx->master)
|
||||
if (master)
|
||||
sr |= CXL_PSL_SR_An_MP;
|
||||
if (mfspr(SPRN_LPCR) & LPCR_TC)
|
||||
sr |= CXL_PSL_SR_An_TC;
|
||||
if (ctx->kernel) {
|
||||
if (!ctx->real_mode)
|
||||
if (kernel) {
|
||||
if (!real_mode)
|
||||
sr |= CXL_PSL_SR_An_R;
|
||||
sr |= (mfmsr() & MSR_SF) | CXL_PSL_SR_An_HV;
|
||||
} else {
|
||||
@@ -608,7 +608,7 @@ static u64 calculate_sr(struct cxl_context *ctx)
|
||||
if (!test_tsk_thread_flag(current, TIF_32BIT))
|
||||
sr |= CXL_PSL_SR_An_SF;
|
||||
}
|
||||
if (cxl_is_power9()) {
|
||||
if (p9) {
|
||||
if (radix_enabled())
|
||||
sr |= CXL_PSL_SR_An_XLAT_ror;
|
||||
else
|
||||
@@ -617,6 +617,12 @@ static u64 calculate_sr(struct cxl_context *ctx)
|
||||
return sr;
|
||||
}
|
||||
|
||||
static u64 calculate_sr(struct cxl_context *ctx)
|
||||
{
|
||||
return cxl_calculate_sr(ctx->master, ctx->kernel, ctx->real_mode,
|
||||
cxl_is_power9());
|
||||
}
|
||||
|
||||
static void update_ivtes_directed(struct cxl_context *ctx)
|
||||
{
|
||||
bool need_update = (ctx->status == STARTED);
|
||||
|
Reference in New Issue
Block a user