• Thomas Petazzoni's avatar
    net: mvpp2: store physical address of buffer in rx_desc->buf_cookie · 4e4a105f
    Thomas Petazzoni authored
    The RX descriptors of the PPv2 hardware allow to store several
    information, amongst which:
    
     - the DMA address of the buffer in which the data has been received
     - a "cookie" field, left to the use of the driver, and not used by the
       hardware
    
    In the current implementation, the "cookie" field is used to store the
    virtual address of the buffer, so that in the receive completion path,
    we can easily get the virtual address of the buffer that corresponds to
    a completed RX descriptors.
    
    On PPv2.1, used on 32-bit platforms, those two fields are 32-bit wide,
    which is enough to store a DMA address in the first field, and a virtual
    address in the second field.
    
    On PPv2.2, used on 64-bit platforms, these two fields have been extended
    to 40 bits. While 40 bits is enough to store a DMA address (as long as
    the DMA mask is 40 bits or lower), it is not enough to store a virtual
    address. Therefore, the "cookie" field can no longer be used to store
    the virtual address of the buffer.
    
    However, as Russell King pointed out, the RX buffers are always
    allocated in the kernel linear mapping, and therefore using
    phys_to_virt() on the physical address of the RX buffer is possible and
    correct.
    
    Therefore, this commit changes the driver to use the "cookie" field to
    store the physical address instead of the virtual
    address. phys_to_virt() is used in the receive completion path to
    retrieve the virtual address from the physical address.
    
    It is obviously important to realize that the DMA address and physical
    address are two different things, which is why we store both in the RX
    descriptors. While those addresses may be identical in some situations,
    it remains two distinct concepts, and both addresses should be handled
    separately.
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4e4a105f
mvpp2.c 177 KB