1*4882a593Smuzhiyun# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2*4882a593Smuzhiyun# Copyright (c) 2020 MediaTek Inc. 3*4882a593Smuzhiyun%YAML 1.2 4*4882a593Smuzhiyun--- 5*4882a593Smuzhiyun$id: http://devicetree.org/schemas/memory-controllers/mediatek,smi-common.yaml# 6*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml# 7*4882a593Smuzhiyun 8*4882a593Smuzhiyuntitle: SMI (Smart Multimedia Interface) Common 9*4882a593Smuzhiyun 10*4882a593Smuzhiyunmaintainers: 11*4882a593Smuzhiyun - Yong Wu <yong.wu@mediatek.com> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyundescription: | 14*4882a593Smuzhiyun The hardware block diagram please check bindings/iommu/mediatek,iommu.yaml 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun MediaTek SMI have two generations of HW architecture, here is the list 17*4882a593Smuzhiyun which generation the SoCs use: 18*4882a593Smuzhiyun generation 1: mt2701 and mt7623. 19*4882a593Smuzhiyun generation 2: mt2712, mt6779, mt8167, mt8173 and mt8183. 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun There's slight differences between the two SMI, for generation 2, the 22*4882a593Smuzhiyun register which control the iommu port is at each larb's register base. But 23*4882a593Smuzhiyun for generation 1, the register is at smi ao base(smi always on register 24*4882a593Smuzhiyun base). Besides that, the smi async clock should be prepared and enabled for 25*4882a593Smuzhiyun SMI generation 1 to transform the smi clock into emi clock domain, but that is 26*4882a593Smuzhiyun not needed for SMI generation 2. 27*4882a593Smuzhiyun 28*4882a593Smuzhiyunproperties: 29*4882a593Smuzhiyun compatible: 30*4882a593Smuzhiyun oneOf: 31*4882a593Smuzhiyun - enum: 32*4882a593Smuzhiyun - mediatek,mt2701-smi-common 33*4882a593Smuzhiyun - mediatek,mt2712-smi-common 34*4882a593Smuzhiyun - mediatek,mt6779-smi-common 35*4882a593Smuzhiyun - mediatek,mt8167-smi-common 36*4882a593Smuzhiyun - mediatek,mt8173-smi-common 37*4882a593Smuzhiyun - mediatek,mt8183-smi-common 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun - description: for mt7623 40*4882a593Smuzhiyun items: 41*4882a593Smuzhiyun - const: mediatek,mt7623-smi-common 42*4882a593Smuzhiyun - const: mediatek,mt2701-smi-common 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun reg: 45*4882a593Smuzhiyun maxItems: 1 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun power-domains: 48*4882a593Smuzhiyun maxItems: 1 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun clocks: 51*4882a593Smuzhiyun description: | 52*4882a593Smuzhiyun apb and smi are mandatory. the async is only for generation 1 smi HW. 53*4882a593Smuzhiyun gals(global async local sync) also is optional, see below. 54*4882a593Smuzhiyun minItems: 2 55*4882a593Smuzhiyun maxItems: 4 56*4882a593Smuzhiyun items: 57*4882a593Smuzhiyun - description: apb is Advanced Peripheral Bus clock, It's the clock for 58*4882a593Smuzhiyun setting the register. 59*4882a593Smuzhiyun - description: smi is the clock for transfer data and command. 60*4882a593Smuzhiyun - description: async is asynchronous clock, it help transform the smi 61*4882a593Smuzhiyun clock into the emi clock domain. 62*4882a593Smuzhiyun - description: gals0 is the path0 clock of gals. 63*4882a593Smuzhiyun - description: gals1 is the path1 clock of gals. 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun clock-names: 66*4882a593Smuzhiyun minItems: 2 67*4882a593Smuzhiyun maxItems: 4 68*4882a593Smuzhiyun 69*4882a593Smuzhiyunrequired: 70*4882a593Smuzhiyun - compatible 71*4882a593Smuzhiyun - reg 72*4882a593Smuzhiyun - power-domains 73*4882a593Smuzhiyun - clocks 74*4882a593Smuzhiyun - clock-names 75*4882a593Smuzhiyun 76*4882a593SmuzhiyunallOf: 77*4882a593Smuzhiyun - if: # only for gen1 HW 78*4882a593Smuzhiyun properties: 79*4882a593Smuzhiyun compatible: 80*4882a593Smuzhiyun contains: 81*4882a593Smuzhiyun enum: 82*4882a593Smuzhiyun - mediatek,mt2701-smi-common 83*4882a593Smuzhiyun then: 84*4882a593Smuzhiyun properties: 85*4882a593Smuzhiyun clocks: 86*4882a593Smuzhiyun minItems: 3 87*4882a593Smuzhiyun maxItems: 3 88*4882a593Smuzhiyun clock-names: 89*4882a593Smuzhiyun items: 90*4882a593Smuzhiyun - const: apb 91*4882a593Smuzhiyun - const: smi 92*4882a593Smuzhiyun - const: async 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun - if: # for gen2 HW that have gals 95*4882a593Smuzhiyun properties: 96*4882a593Smuzhiyun compatible: 97*4882a593Smuzhiyun enum: 98*4882a593Smuzhiyun - mediatek,mt6779-smi-common 99*4882a593Smuzhiyun - mediatek,mt8183-smi-common 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun then: 102*4882a593Smuzhiyun properties: 103*4882a593Smuzhiyun clocks: 104*4882a593Smuzhiyun minItems: 4 105*4882a593Smuzhiyun maxItems: 4 106*4882a593Smuzhiyun clock-names: 107*4882a593Smuzhiyun items: 108*4882a593Smuzhiyun - const: apb 109*4882a593Smuzhiyun - const: smi 110*4882a593Smuzhiyun - const: gals0 111*4882a593Smuzhiyun - const: gals1 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun else: # for gen2 HW that don't have gals 114*4882a593Smuzhiyun properties: 115*4882a593Smuzhiyun clocks: 116*4882a593Smuzhiyun minItems: 2 117*4882a593Smuzhiyun maxItems: 2 118*4882a593Smuzhiyun clock-names: 119*4882a593Smuzhiyun items: 120*4882a593Smuzhiyun - const: apb 121*4882a593Smuzhiyun - const: smi 122*4882a593Smuzhiyun 123*4882a593SmuzhiyunadditionalProperties: false 124*4882a593Smuzhiyun 125*4882a593Smuzhiyunexamples: 126*4882a593Smuzhiyun - |+ 127*4882a593Smuzhiyun #include <dt-bindings/clock/mt8173-clk.h> 128*4882a593Smuzhiyun #include <dt-bindings/power/mt8173-power.h> 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun smi_common: smi@14022000 { 131*4882a593Smuzhiyun compatible = "mediatek,mt8173-smi-common"; 132*4882a593Smuzhiyun reg = <0x14022000 0x1000>; 133*4882a593Smuzhiyun power-domains = <&scpsys MT8173_POWER_DOMAIN_MM>; 134*4882a593Smuzhiyun clocks = <&mmsys CLK_MM_SMI_COMMON>, 135*4882a593Smuzhiyun <&mmsys CLK_MM_SMI_COMMON>; 136*4882a593Smuzhiyun clock-names = "apb", "smi"; 137*4882a593Smuzhiyun }; 138