Skip to content

Commit 7060377

Browse files
committed
Merge branch 'for-joerg/mtk' into for-joerg/arm-smmu/updates
Merge in Mediatek support from Yong Wu which introduces significant changes to the TLB invalidation and Arm short-descriptor code in the io-pgtable layer. * for-joerg/mtk: (40 commits) MAINTAINERS: Add entry for MediaTek IOMMU iommu/mediatek: Add mt8192 support iommu/mediatek: Remove unnecessary check in attach_device iommu/mediatek: Support master use iova over 32bit iommu/mediatek: Add iova reserved function iommu/mediatek: Support for multi domains iommu/mediatek: Add get_domain_id from dev->dma_range_map iommu/mediatek: Add iova_region structure iommu/mediatek: Move geometry.aperture updating into domain_finalise iommu/mediatek: Move domain_finalise into attach_device iommu/mediatek: Adjust the structure iommu/mediatek: Support report iova 34bit translation fault in ISR iommu/mediatek: Support up to 34bit iova in tlb flush iommu/mediatek: Add power-domain operation iommu/mediatek: Add pm runtime callback iommu/mediatek: Add device link for smi-common and m4u iommu/mediatek: Add error handle for mtk_iommu_probe iommu/mediatek: Move hw_init into attach_device iommu/mediatek: Update oas for v7s iommu/mediatek: Add a flag for iova 34bits case ...
2 parents 34eb935 + 6af4873 commit 7060377

File tree

22 files changed

+866
-286
lines changed

22 files changed

+866
-286
lines changed

Documentation/devicetree/bindings/iommu/mediatek,iommu.txt

Lines changed: 0 additions & 105 deletions
This file was deleted.
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/iommu/mediatek,iommu.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: MediaTek IOMMU Architecture Implementation
8+
9+
maintainers:
10+
- Yong Wu <[email protected]>
11+
12+
description: |+
13+
Some MediaTek SOCs contain a Multimedia Memory Management Unit (M4U), and
14+
this M4U have two generations of HW architecture. Generation one uses flat
15+
pagetable, and only supports 4K size page mapping. Generation two uses the
16+
ARM Short-Descriptor translation table format for address translation.
17+
18+
About the M4U Hardware Block Diagram, please check below:
19+
20+
EMI (External Memory Interface)
21+
|
22+
m4u (Multimedia Memory Management Unit)
23+
|
24+
+--------+
25+
| |
26+
gals0-rx gals1-rx (Global Async Local Sync rx)
27+
| |
28+
| |
29+
gals0-tx gals1-tx (Global Async Local Sync tx)
30+
| | Some SoCs may have GALS.
31+
+--------+
32+
|
33+
SMI Common(Smart Multimedia Interface Common)
34+
|
35+
+----------------+-------
36+
| |
37+
| gals-rx There may be GALS in some larbs.
38+
| |
39+
| |
40+
| gals-tx
41+
| |
42+
SMI larb0 SMI larb1 ... SoCs have several SMI local arbiter(larb).
43+
(display) (vdec)
44+
| |
45+
| |
46+
+-----+-----+ +----+----+
47+
| | | | | |
48+
| | |... | | | ... There are different ports in each larb.
49+
| | | | | |
50+
OVL0 RDMA0 WDMA0 MC PP VLD
51+
52+
As above, The Multimedia HW will go through SMI and M4U while it
53+
access EMI. SMI is a bridge between m4u and the Multimedia HW. It contain
54+
smi local arbiter and smi common. It will control whether the Multimedia
55+
HW should go though the m4u for translation or bypass it and talk
56+
directly with EMI. And also SMI help control the power domain and clocks for
57+
each local arbiter.
58+
59+
Normally we specify a local arbiter(larb) for each multimedia HW
60+
like display, video decode, and camera. And there are different ports
61+
in each larb. Take a example, There are many ports like MC, PP, VLD in the
62+
video decode local arbiter, all these ports are according to the video HW.
63+
64+
In some SoCs, there may be a GALS(Global Async Local Sync) module between
65+
smi-common and m4u, and additional GALS module between smi-larb and
66+
smi-common. GALS can been seen as a "asynchronous fifo" which could help
67+
synchronize for the modules in different clock frequency.
68+
69+
properties:
70+
compatible:
71+
oneOf:
72+
- enum:
73+
- mediatek,mt2701-m4u # generation one
74+
- mediatek,mt2712-m4u # generation two
75+
- mediatek,mt6779-m4u # generation two
76+
- mediatek,mt8167-m4u # generation two
77+
- mediatek,mt8173-m4u # generation two
78+
- mediatek,mt8183-m4u # generation two
79+
- mediatek,mt8192-m4u # generation two
80+
81+
- description: mt7623 generation one
82+
items:
83+
- const: mediatek,mt7623-m4u
84+
- const: mediatek,mt2701-m4u
85+
86+
reg:
87+
maxItems: 1
88+
89+
interrupts:
90+
maxItems: 1
91+
92+
clocks:
93+
items:
94+
- description: bclk is the block clock.
95+
96+
clock-names:
97+
items:
98+
- const: bclk
99+
100+
mediatek,larbs:
101+
$ref: /schemas/types.yaml#/definitions/phandle-array
102+
minItems: 1
103+
maxItems: 32
104+
description: |
105+
List of phandle to the local arbiters in the current Socs.
106+
Refer to bindings/memory-controllers/mediatek,smi-larb.yaml. It must sort
107+
according to the local arbiter index, like larb0, larb1, larb2...
108+
109+
'#iommu-cells':
110+
const: 1
111+
description: |
112+
This is the mtk_m4u_id according to the HW. Specifies the mtk_m4u_id as
113+
defined in
114+
dt-binding/memory/mt2701-larb-port.h for mt2701 and mt7623,
115+
dt-binding/memory/mt2712-larb-port.h for mt2712,
116+
dt-binding/memory/mt6779-larb-port.h for mt6779,
117+
dt-binding/memory/mt8167-larb-port.h for mt8167,
118+
dt-binding/memory/mt8173-larb-port.h for mt8173,
119+
dt-binding/memory/mt8183-larb-port.h for mt8183,
120+
dt-binding/memory/mt8192-larb-port.h for mt8192.
121+
122+
power-domains:
123+
maxItems: 1
124+
125+
required:
126+
- compatible
127+
- reg
128+
- interrupts
129+
- mediatek,larbs
130+
- '#iommu-cells'
131+
132+
allOf:
133+
- if:
134+
properties:
135+
compatible:
136+
contains:
137+
enum:
138+
- mediatek,mt2701-m4u
139+
- mediatek,mt2712-m4u
140+
- mediatek,mt8173-m4u
141+
- mediatek,mt8192-m4u
142+
143+
then:
144+
required:
145+
- clocks
146+
147+
- if:
148+
properties:
149+
compatible:
150+
enum:
151+
- mediatek,mt8192-m4u
152+
153+
then:
154+
required:
155+
- power-domains
156+
157+
additionalProperties: false
158+
159+
examples:
160+
- |
161+
#include <dt-bindings/clock/mt8173-clk.h>
162+
#include <dt-bindings/interrupt-controller/arm-gic.h>
163+
164+
iommu: iommu@10205000 {
165+
compatible = "mediatek,mt8173-m4u";
166+
reg = <0x10205000 0x1000>;
167+
interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_LOW>;
168+
clocks = <&infracfg CLK_INFRA_M4U>;
169+
clock-names = "bclk";
170+
mediatek,larbs = <&larb0 &larb1 &larb2
171+
&larb3 &larb4 &larb5>;
172+
#iommu-cells = <1>;
173+
};
174+
175+
- |
176+
#include <dt-bindings/memory/mt8173-larb-port.h>
177+
178+
/* Example for a client device */
179+
display {
180+
compatible = "mediatek,mt8173-disp";
181+
iommus = <&iommu M4U_PORT_DISP_OVL0>,
182+
<&iommu M4U_PORT_DISP_RDMA0>;
183+
};

MAINTAINERS

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11182,6 +11182,15 @@ S: Maintained
1118211182
F: Documentation/devicetree/bindings/i2c/i2c-mt65xx.txt
1118311183
F: drivers/i2c/busses/i2c-mt65xx.c
1118411184

11185+
MEDIATEK IOMMU DRIVER
11186+
M: Yong Wu <[email protected]>
11187+
11188+
L: [email protected] (moderated for non-subscribers)
11189+
S: Supported
11190+
F: Documentation/devicetree/bindings/iommu/mediatek*
11191+
F: drivers/iommu/mtk-iommu*
11192+
F: include/dt-bindings/memory/mt*-port.h
11193+
1118511194
MEDIATEK JPEG DRIVER
1118611195
M: Rick Chang <[email protected]>
1118711196
M: Bin Liu <[email protected]>

drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2306,7 +2306,7 @@ static void arm_smmu_iotlb_sync(struct iommu_domain *domain,
23062306
struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
23072307

23082308
arm_smmu_tlb_inv_range_domain(gather->start,
2309-
gather->end - gather->start,
2309+
gather->end - gather->start + 1,
23102310
gather->pgsize, true, smmu_domain);
23112311
}
23122312

0 commit comments

Comments
 (0)