mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
50fa3cd33f
This patch adds decriptions for mt2712 IOMMU and SMI. In order to balance the bandwidth, mt2712 has two M4Us, two smi-commons, 10 smi-larbs. and mt2712 is also MTK IOMMU gen2 which uses ARM Short-Descriptor translation table format. The mt2712 M4U-SMI HW diagram is as below: EMI | ------------------------------------ | | M4U0 M4U1 | | smi-common0 smi-common1 | | ------------------------- -------------------------------- | | | | | | | | | | | | | | | | | | | | larb0 larb1 larb2 larb3 larb6 larb4 larb5 larb7 larb8 larb9 disp0 vdec cam venc jpg mdp1/disp1 mdp2/disp2 mdp3 vdo/nr tvd All the connections are HW fixed, SW can NOT adjust it. Signed-off-by: Yong Wu <yong.wu@mediatek.com> Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
76 lines
3.1 KiB
Plaintext
76 lines
3.1 KiB
Plaintext
* Mediatek IOMMU Architecture Implementation
|
|
|
|
Some Mediatek SOCs contain a Multimedia Memory Management Unit (M4U), and
|
|
this M4U have two generations of HW architecture. Generation one uses flat
|
|
pagetable, and only supports 4K size page mapping. Generation two uses the
|
|
ARM Short-Descriptor translation table format for address translation.
|
|
|
|
About the M4U Hardware Block Diagram, please check below:
|
|
|
|
EMI (External Memory Interface)
|
|
|
|
|
m4u (Multimedia Memory Management Unit)
|
|
|
|
|
SMI Common(Smart Multimedia Interface Common)
|
|
|
|
|
+----------------+-------
|
|
| |
|
|
| |
|
|
SMI larb0 SMI larb1 ... SoCs have several SMI local arbiter(larb).
|
|
(display) (vdec)
|
|
| |
|
|
| |
|
|
+-----+-----+ +----+----+
|
|
| | | | | |
|
|
| | |... | | | ... There are different ports in each larb.
|
|
| | | | | |
|
|
OVL0 RDMA0 WDMA0 MC PP VLD
|
|
|
|
As above, The Multimedia HW will go through SMI and M4U while it
|
|
access EMI. SMI is a bridge between m4u and the Multimedia HW. It contain
|
|
smi local arbiter and smi common. It will control whether the Multimedia
|
|
HW should go though the m4u for translation or bypass it and talk
|
|
directly with EMI. And also SMI help control the power domain and clocks for
|
|
each local arbiter.
|
|
Normally we specify a local arbiter(larb) for each multimedia HW
|
|
like display, video decode, and camera. And there are different ports
|
|
in each larb. Take a example, There are many ports like MC, PP, VLD in the
|
|
video decode local arbiter, all these ports are according to the video HW.
|
|
|
|
Required properties:
|
|
- compatible : must be one of the following string:
|
|
"mediatek,mt2701-m4u" for mt2701 which uses generation one m4u HW.
|
|
"mediatek,mt2712-m4u" for mt2712 which uses generation two m4u HW.
|
|
"mediatek,mt8173-m4u" for mt8173 which uses generation two m4u HW.
|
|
- reg : m4u register base and size.
|
|
- interrupts : the interrupt of m4u.
|
|
- clocks : must contain one entry for each clock-names.
|
|
- clock-names : must be "bclk", It is the block clock of m4u.
|
|
- mediatek,larbs : List of phandle to the local arbiters in the current Socs.
|
|
Refer to bindings/memory-controllers/mediatek,smi-larb.txt. It must sort
|
|
according to the local arbiter index, like larb0, larb1, larb2...
|
|
- iommu-cells : must be 1. This is the mtk_m4u_id according to the HW.
|
|
Specifies the mtk_m4u_id as defined in
|
|
dt-binding/memory/mt2701-larb-port.h for mt2701,
|
|
dt-binding/memory/mt2712-larb-port.h for mt2712, and
|
|
dt-binding/memory/mt8173-larb-port.h for mt8173.
|
|
|
|
Example:
|
|
iommu: iommu@10205000 {
|
|
compatible = "mediatek,mt8173-m4u";
|
|
reg = <0 0x10205000 0 0x1000>;
|
|
interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_LOW>;
|
|
clocks = <&infracfg CLK_INFRA_M4U>;
|
|
clock-names = "bclk";
|
|
mediatek,larbs = <&larb0 &larb1 &larb2 &larb3 &larb4 &larb5>;
|
|
#iommu-cells = <1>;
|
|
};
|
|
|
|
Example for a client device:
|
|
display {
|
|
compatible = "mediatek,mt8173-disp";
|
|
iommus = <&iommu M4U_PORT_DISP_OVL0>,
|
|
<&iommu M4U_PORT_DISP_RDMA0>;
|
|
...
|
|
};
|