lkml.org 
[lkml]   [2016]   [Feb]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 068/137] powerpc/ioda: Set "read" permission when "write" is set
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alexey Kardashevskiy <aik@ozlabs.ru>

    commit 6ecad912a0073c768db1491c27ca55ad2d0ee68f upstream.

    Quite often drivers set only "write" permission assuming that this
    includes "read" permission as well and this works on plenty of
    platforms. However IODA2 is strict about this and produces an EEH when
    "read" permission is not set and reading happens.

    This adds a workaround in the IODA code to always add the "read" bit
    when the "write" bit is set.

    Fixes: 10b35b2b7485 ("powerpc/powernv: Do not set "read" flag if direction==DMA_NONE")
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
    Tested-by: Douglas Miller <dougmill@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/platforms/powernv/pci.c | 6 ++++++
    1 file changed, 6 insertions(+)

    --- a/arch/powerpc/platforms/powernv/pci.c
    +++ b/arch/powerpc/platforms/powernv/pci.c
    @@ -601,6 +601,9 @@ int pnv_tce_build(struct iommu_table *tb
    u64 rpn = __pa(uaddr) >> tbl->it_page_shift;
    long i;

    + if (proto_tce & TCE_PCI_WRITE)
    + proto_tce |= TCE_PCI_READ;
    +
    for (i = 0; i < npages; i++) {
    unsigned long newtce = proto_tce |
    ((rpn + i) << tbl->it_page_shift);
    @@ -622,6 +625,9 @@ int pnv_tce_xchg(struct iommu_table *tbl

    BUG_ON(*hpa & ~IOMMU_PAGE_MASK(tbl));

    + if (newtce & TCE_PCI_WRITE)
    + newtce |= TCE_PCI_READ;
    +
    oldtce = xchg(pnv_tce(tbl, idx), cpu_to_be64(newtce));
    *hpa = be64_to_cpu(oldtce) & ~(TCE_PCI_READ | TCE_PCI_WRITE);
    *direction = iommu_tce_direction(oldtce);

    \
     
     \ /
      Last update: 2016-02-24 05:41    [W:5.351 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site