• Paul Burton's avatar
    MIPS: Malta: Fix IOCU disable switch read for MIPS64 · 305723ab
    Paul Burton authored
    Malta boards used with CPU emulators feature a switch to disable use of
    an IOCU. Software has to check this switch & ignore any present IOCU if
    the switch is closed. The read used to do this was unsafe for 64 bit
    kernels, as it simply casted the address 0xbf403000 to a pointer &
    dereferenced it. Whilst in a 32 bit kernel this would access kseg1, in a
    64 bit kernel this attempts to access xuseg & results in an address
    error exception.
    
    Fix by accessing a correctly formed ckseg1 address generated using the
    CKSEG1ADDR macro.
    
    Whilst modifying this code, define the name of the register and the bit
    we care about within it, which indicates whether PCI DMA is routed to
    the IOCU or straight to DRAM. The code previously checked that bit 0 was
    also set, but the least significant 7 bits of the CONFIG_GEN0 register
    contain the value of the MReqInfo signal provided to the IOCU OCP bus,
    so singling out bit 0 makes little sense & that part of the check is
    dropped.
    Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
    Fixes: b6d92b4a ("MIPS: Add option to disable software I/O coherency.")
    Cc: Matt Redfearn <matt.redfearn@imgtec.com>
    Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14187/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    305723ab
malta-setup.c 7.98 KB