• John David Anglin's avatar
    parisc: Use lpa instruction to load physical addresses in driver code · 116d7533
    John David Anglin authored
    Most I/O in the kernel is done using the kernel offset mapping.
    However, there is one API that uses aliased kernel address ranges:
    
    > The final category of APIs is for I/O to deliberately aliased address
    > ranges inside the kernel.  Such aliases are set up by use of the
    > vmap/vmalloc API.  Since kernel I/O goes via physical pages, the I/O
    > subsystem assumes that the user mapping and kernel offset mapping are
    > the only aliases.  This isn't true for vmap aliases, so anything in
    > the kernel trying to do I/O to vmap areas must manually manage
    > coherency.  It must do this by flushing the vmap range before doing
    > I/O and invalidating it after the I/O returns.
    
    For this reason, we should use the hardware lpa instruction to load the
    physical address of kernel virtual addresses in the driver code.
    
    I believe we only use the vmap/vmalloc API with old PA 1.x processors
    which don't have a sba, so we don't hit this problem.
    
    Tested on c3750, c8000 and rp3440.
    Signed-off-by: default avatarJohn David Anglin <dave.anglin@bell.net>
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    116d7533
sba_iommu.c 57.5 KB