lkml.org 
[lkml]   [2012]   [Jul]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 19/28] iommu/amd: Add IRTE invalidation routine
    Date
    Add routine to invalidate the IOMMU cache for interupt
    translations. Also include the IRTE caches when flushing all
    IOMMU caches.

    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    ---
    drivers/iommu/amd_iommu.c | 27 +++++++++++++++++++++++++++
    drivers/iommu/amd_iommu_types.h | 1 +
    2 files changed, 28 insertions(+)

    diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
    index 6282dab..7006605 100644
    --- a/drivers/iommu/amd_iommu.c
    +++ b/drivers/iommu/amd_iommu.c
    @@ -834,6 +834,13 @@ static void build_inv_all(struct iommu_cmd *cmd)
    CMD_SET_TYPE(cmd, CMD_INV_ALL);
    }

    +static void build_inv_irt(struct iommu_cmd *cmd, u16 devid)
    +{
    + memset(cmd, 0, sizeof(*cmd));
    + cmd->data[0] = devid;
    + CMD_SET_TYPE(cmd, CMD_INV_IRT);
    +}
    +
    /*
    * Writes the command to the IOMMUs command buffer and informs the
    * hardware about the new command.
    @@ -955,12 +962,32 @@ static void iommu_flush_all(struct amd_iommu *iommu)
    iommu_completion_wait(iommu);
    }

    +static void iommu_flush_irt(struct amd_iommu *iommu, u16 devid)
    +{
    + struct iommu_cmd cmd;
    +
    + build_inv_irt(&cmd, devid);
    +
    + iommu_queue_command(iommu, &cmd);
    +}
    +
    +static void iommu_flush_irt_all(struct amd_iommu *iommu)
    +{
    + u32 devid;
    +
    + for (devid = 0; devid <= 0xffff; ++devid)
    + iommu_flush_irt(iommu, devid);
    +
    + iommu_completion_wait(iommu);
    +}
    +
    void iommu_flush_all_caches(struct amd_iommu *iommu)
    {
    if (iommu_feature(iommu, FEATURE_IA)) {
    iommu_flush_all(iommu);
    } else {
    iommu_flush_dte_all(iommu);
    + iommu_flush_irt_all(iommu);
    iommu_flush_tlb_all(iommu);
    }
    }
    diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h
    index 1155389..0791451 100644
    --- a/drivers/iommu/amd_iommu_types.h
    +++ b/drivers/iommu/amd_iommu_types.h
    @@ -152,6 +152,7 @@
    #define CMD_INV_DEV_ENTRY 0x02
    #define CMD_INV_IOMMU_PAGES 0x03
    #define CMD_INV_IOTLB_PAGES 0x04
    +#define CMD_INV_IRT 0x05
    #define CMD_COMPLETE_PPR 0x07
    #define CMD_INV_ALL 0x08

    --
    1.7.9.5



    \
     
     \ /
      Last update: 2012-07-05 15:41    [W:0.030 / U:121.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site