• D
    drm/radeon: add 2-level VM pagetables support v9 · fa87e62d
    Dmitry Cherkasov 提交于
    PDE/PTE update code uses CP ring for memory writes.
    All page table entries are preallocated for now in alloc_pt().
    
    It is made as whole because it's hard to divide it to several patches
    that compile and doesn't break anything being applied separately.
    
    Tested on cayman card.
    
    v2: rebased on top of "refactor set_page chipset interface v3",
        code cleanups
    
    v3: switched offsets calc macros to inline funcs where possible,
        remove pd_addr from radeon_vm, switched RADEON_BLOCK_SIZE define,
        to 9 (and PTE_COUNT to 1 << BLOCK_SIZE)
    
    v4 (ck): move "incr" documentation to previous patch, cleanup and
             document RADEON_VM_* constants, change commit message to
             our usual format, simplify patch allot by removing
             everything current not necessary, disable SI workaround.
    
    v5: (agd5f): Fix typo in tables_size calculation in
                 radeon_vm_alloc_pt().  Second line should have been
                 '+=' rather than '='.
    
    v6: fix npdes calculation. In scenario when pfns to be mapped overlap
    two PDE spans:
    
       +-----------+-------------+
       | PDE span  | PDE span    |
       +-----------+----+--------+
              |         |
              +---------+
              | pfns    |
              +---------+
    
    the following npdes calculation gives incorrect result:
    
    npdes = (nptes >> RADEON_VM_BLOCK_SIZE) + 1;
    
    For the case above picture it should give npdes = 2, but gives one.
    
    This patch corrects it by rounding last pfn up to 512 border,
    first - down to 512 border and then subtracting and dividing by 512.
    
    v7: Make npde calculation clearer, fix ndw calculation.
    
    v8: (agd5f): reserve enough for 2 full VM PTs, add some
                 additional comments.
    
    v9: fix typo in npde calculation
    Signed-off-by: NDmitry Cherkasov <Dmitrii.Cherkasov@amd.com>
    Signed-off-by: NChristian König <deathsimple@vodafone.de>
    Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
    fa87e62d
ni.c 45.6 KB