iommu.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
  • * [PATCH AUTOSEL 4.14 084/170] iommu/arm-smmu: Add support for qcom,smmu-v2 variant
           [not found] <20190128161200.55107-1-sashal@kernel.org>
           [not found] ` <20190128161200.55107-1-sashal-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
    @ 2019-01-28 16:10 ` Sasha Levin
      2019-01-28 16:10 ` [PATCH AUTOSEL 4.14 085/170] iommu/arm-smmu-v3: Use explicit mb() when moving cons pointer Sasha Levin
      2 siblings, 0 replies; 3+ messages in thread
    From: Sasha Levin @ 2019-01-28 16:10 UTC (permalink / raw)
      To: linux-kernel, stable; +Cc: Vivek Gautam, Will Deacon, Sasha Levin, iommu
    
    From: Vivek Gautam <vivek.gautam@codeaurora.org>
    
    [ Upstream commit 89cddc563743cb1e0068867ac97013b2a5bf86aa ]
    
    qcom,smmu-v2 is an arm,smmu-v2 implementation with specific
    clock and power requirements.
    On msm8996, multiple cores, viz. mdss, video, etc. use this
    smmu. On sdm845, this smmu is used with gpu.
    Add bindings for the same.
    
    Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Reviewed-by: Tomasz Figa <tfiga@chromium.org>
    Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Reviewed-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
     drivers/iommu/arm-smmu.c | 3 +++
     1 file changed, 3 insertions(+)
    
    diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
    index 15b5856475fc..01a6a0ea2a4f 100644
    --- a/drivers/iommu/arm-smmu.c
    +++ b/drivers/iommu/arm-smmu.c
    @@ -117,6 +117,7 @@ enum arm_smmu_implementation {
     	GENERIC_SMMU,
     	ARM_MMU500,
     	CAVIUM_SMMUV2,
    +	QCOM_SMMUV2,
     };
     
     /* Until ACPICA headers cover IORT rev. C */
    @@ -1910,6 +1911,7 @@ ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);
     ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
     ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
     ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
    +ARM_SMMU_MATCH_DATA(qcom_smmuv2, ARM_SMMU_V2, QCOM_SMMUV2);
     
     static const struct of_device_id arm_smmu_of_match[] = {
     	{ .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 },
    @@ -1918,6 +1920,7 @@ static const struct of_device_id arm_smmu_of_match[] = {
     	{ .compatible = "arm,mmu-401", .data = &arm_mmu401 },
     	{ .compatible = "arm,mmu-500", .data = &arm_mmu500 },
     	{ .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 },
    +	{ .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 },
     	{ },
     };
     MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
    -- 
    2.19.1
    
    ^ permalink raw reply related	[flat|nested] 3+ messages in thread
  • * [PATCH AUTOSEL 4.14 085/170] iommu/arm-smmu-v3: Use explicit mb() when moving cons pointer
           [not found] <20190128161200.55107-1-sashal@kernel.org>
           [not found] ` <20190128161200.55107-1-sashal-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
      2019-01-28 16:10 ` [PATCH AUTOSEL 4.14 084/170] iommu/arm-smmu: Add support for qcom,smmu-v2 variant Sasha Levin
    @ 2019-01-28 16:10 ` Sasha Levin
      2 siblings, 0 replies; 3+ messages in thread
    From: Sasha Levin @ 2019-01-28 16:10 UTC (permalink / raw)
      To: linux-kernel, stable; +Cc: Will Deacon, Robin Murphy, Sasha Levin, iommu
    
    From: Will Deacon <will.deacon@arm.com>
    
    [ Upstream commit a868e8530441286342f90c1fd9c5f24de3aa2880 ]
    
    After removing an entry from a queue (e.g. reading an event in
    arm_smmu_evtq_thread()) it is necessary to advance the MMIO consumer
    pointer to free the queue slot back to the SMMU. A memory barrier is
    required here so that all reads targetting the queue entry have
    completed before the consumer pointer is updated.
    
    The implementation of queue_inc_cons() relies on a writel() to complete
    the previous reads, but this is incorrect because writel() is only
    guaranteed to complete prior writes. This patch replaces the call to
    writel() with an mb(); writel_relaxed() sequence, which gives us the
    read->write ordering which we require.
    
    Cc: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
     drivers/iommu/arm-smmu-v3.c | 8 +++++++-
     1 file changed, 7 insertions(+), 1 deletion(-)
    
    diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
    index 26e99c03390f..09eb258a9a7d 100644
    --- a/drivers/iommu/arm-smmu-v3.c
    +++ b/drivers/iommu/arm-smmu-v3.c
    @@ -730,7 +730,13 @@ static void queue_inc_cons(struct arm_smmu_queue *q)
     	u32 cons = (Q_WRP(q, q->cons) | Q_IDX(q, q->cons)) + 1;
     
     	q->cons = Q_OVF(q, q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons);
    -	writel(q->cons, q->cons_reg);
    +
    +	/*
    +	 * Ensure that all CPU accesses (reads and writes) to the queue
    +	 * are complete before we update the cons pointer.
    +	 */
    +	mb();
    +	writel_relaxed(q->cons, q->cons_reg);
     }
     
     static int queue_sync_prod(struct arm_smmu_queue *q)
    -- 
    2.19.1
    
    ^ permalink raw reply related	[flat|nested] 3+ messages in thread

  • end of thread, other threads:[~2019-01-28 16:10 UTC | newest]
    
    Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <20190128161200.55107-1-sashal@kernel.org>
         [not found] ` <20190128161200.55107-1-sashal-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
    2019-01-28 16:10   ` [PATCH AUTOSEL 4.14 075/170] iommu/amd: Fix amd_iommu=force_isolation Sasha Levin
    2019-01-28 16:10 ` [PATCH AUTOSEL 4.14 084/170] iommu/arm-smmu: Add support for qcom,smmu-v2 variant Sasha Levin
    2019-01-28 16:10 ` [PATCH AUTOSEL 4.14 085/170] iommu/arm-smmu-v3: Use explicit mb() when moving cons pointer Sasha Levin
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox;
    as well as URLs for NNTP newsgroup(s).