Commit 409dd7dc authored by Oliver O'Halloran's avatar Oliver O'Halloran Committed by Michael Ellerman

powerpc/papr_scm: Remove endian conversions

The return values of a h-call are returned in the CPU registers and
written to the provided buffer by the plpar_hcall() wrapper. As a result
the values written to memory are always in the native endian and should
not be byte swapped.

The inital implementation of the H-Call interface was done in qemu and
the returned values were byte swapped unnecessarily in both the
hypervisor and in the driver so this was only noticed when bringing up
the PowerVM implementation.

Fixes: b5beae5e ("powerpc/pseries: Add driver for PAPR SCM regions")
Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 683ec0e0
...@@ -55,7 +55,7 @@ static int drc_pmem_bind(struct papr_scm_priv *p) ...@@ -55,7 +55,7 @@ static int drc_pmem_bind(struct papr_scm_priv *p)
do { do {
rc = plpar_hcall(H_SCM_BIND_MEM, ret, p->drc_index, 0, rc = plpar_hcall(H_SCM_BIND_MEM, ret, p->drc_index, 0,
p->blocks, BIND_ANY_ADDR, token); p->blocks, BIND_ANY_ADDR, token);
token = be64_to_cpu(ret[0]); token = ret[0];
cond_resched(); cond_resched();
} while (rc == H_BUSY); } while (rc == H_BUSY);
...@@ -64,7 +64,7 @@ static int drc_pmem_bind(struct papr_scm_priv *p) ...@@ -64,7 +64,7 @@ static int drc_pmem_bind(struct papr_scm_priv *p)
return -ENXIO; return -ENXIO;
} }
p->bound_addr = be64_to_cpu(ret[1]); p->bound_addr = ret[1];
dev_dbg(&p->pdev->dev, "bound drc %x to %pR\n", p->drc_index, &p->res); dev_dbg(&p->pdev->dev, "bound drc %x to %pR\n", p->drc_index, &p->res);
...@@ -82,7 +82,7 @@ static int drc_pmem_unbind(struct papr_scm_priv *p) ...@@ -82,7 +82,7 @@ static int drc_pmem_unbind(struct papr_scm_priv *p)
do { do {
rc = plpar_hcall(H_SCM_UNBIND_MEM, ret, p->drc_index, rc = plpar_hcall(H_SCM_UNBIND_MEM, ret, p->drc_index,
p->bound_addr, p->blocks, token); p->bound_addr, p->blocks, token);
token = be64_to_cpu(ret); token = ret[0];
cond_resched(); cond_resched();
} while (rc == H_BUSY); } while (rc == H_BUSY);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment