1*ce69a970SAngeloGioacchino Del Regno // SPDX-License-Identifier: GPL-2.0 2*ce69a970SAngeloGioacchino Del Regno /* 3*ce69a970SAngeloGioacchino Del Regno * Copyright (c) 2025 Collabora Ltd. 4*ce69a970SAngeloGioacchino Del Regno * AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> 5*ce69a970SAngeloGioacchino Del Regno */ 6*ce69a970SAngeloGioacchino Del Regno 7*ce69a970SAngeloGioacchino Del Regno #include <linux/device.h> 8*ce69a970SAngeloGioacchino Del Regno #include <linux/interconnect.h> 9*ce69a970SAngeloGioacchino Del Regno #include <linux/interconnect-provider.h> 10*ce69a970SAngeloGioacchino Del Regno #include <linux/mod_devicetable.h> 11*ce69a970SAngeloGioacchino Del Regno #include <linux/module.h> 12*ce69a970SAngeloGioacchino Del Regno #include <linux/platform_device.h> 13*ce69a970SAngeloGioacchino Del Regno #include <dt-bindings/interconnect/mediatek,mt8196.h> 14*ce69a970SAngeloGioacchino Del Regno 15*ce69a970SAngeloGioacchino Del Regno #include "icc-emi.h" 16*ce69a970SAngeloGioacchino Del Regno 17*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node ddr_emi = { 18*ce69a970SAngeloGioacchino Del Regno .name = "ddr-emi", 19*ce69a970SAngeloGioacchino Del Regno .id = SLAVE_DDR_EMI, 20*ce69a970SAngeloGioacchino Del Regno .ep = 1, 21*ce69a970SAngeloGioacchino Del Regno }; 22*ce69a970SAngeloGioacchino Del Regno 23*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcusys = { 24*ce69a970SAngeloGioacchino Del Regno .name = "mcusys", 25*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MCUSYS, 26*ce69a970SAngeloGioacchino Del Regno .ep = 0, 27*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 28*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 29*ce69a970SAngeloGioacchino Del Regno }; 30*ce69a970SAngeloGioacchino Del Regno 31*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port0 = { 32*ce69a970SAngeloGioacchino Del Regno .name = "mcu-port0", 33*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MCU_0, 34*ce69a970SAngeloGioacchino Del Regno .ep = 0, 35*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 36*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 37*ce69a970SAngeloGioacchino Del Regno }; 38*ce69a970SAngeloGioacchino Del Regno 39*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port1 = { 40*ce69a970SAngeloGioacchino Del Regno .name = "mcu-port1", 41*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MCU_1, 42*ce69a970SAngeloGioacchino Del Regno .ep = 0, 43*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 44*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 45*ce69a970SAngeloGioacchino Del Regno }; 46*ce69a970SAngeloGioacchino Del Regno 47*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port2 = { 48*ce69a970SAngeloGioacchino Del Regno .name = "mcu-port2", 49*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MCU_2, 50*ce69a970SAngeloGioacchino Del Regno .ep = 0, 51*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 52*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 53*ce69a970SAngeloGioacchino Del Regno }; 54*ce69a970SAngeloGioacchino Del Regno 55*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port3 = { 56*ce69a970SAngeloGioacchino Del Regno .name = "mcu-port3", 57*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MCU_3, 58*ce69a970SAngeloGioacchino Del Regno .ep = 0, 59*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 60*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 61*ce69a970SAngeloGioacchino Del Regno }; 62*ce69a970SAngeloGioacchino Del Regno 63*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mcu_port4 = { 64*ce69a970SAngeloGioacchino Del Regno .name = "mcu-port4", 65*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MCU_4, 66*ce69a970SAngeloGioacchino Del Regno .ep = 0, 67*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 68*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 69*ce69a970SAngeloGioacchino Del Regno }; 70*ce69a970SAngeloGioacchino Del Regno 71*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node gpu = { 72*ce69a970SAngeloGioacchino Del Regno .name = "gpu", 73*ce69a970SAngeloGioacchino Del Regno .id = MASTER_GPUSYS, 74*ce69a970SAngeloGioacchino Del Regno .ep = 0, 75*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 76*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 77*ce69a970SAngeloGioacchino Del Regno }; 78*ce69a970SAngeloGioacchino Del Regno 79*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mmsys = { 80*ce69a970SAngeloGioacchino Del Regno .name = "mmsys", 81*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MMSYS, 82*ce69a970SAngeloGioacchino Del Regno .ep = 0, 83*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 84*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 85*ce69a970SAngeloGioacchino Del Regno }; 86*ce69a970SAngeloGioacchino Del Regno 87*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_vpu = { 88*ce69a970SAngeloGioacchino Del Regno .name = "mm-vpu", 89*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MM_VPU, 90*ce69a970SAngeloGioacchino Del Regno .ep = 0, 91*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 92*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_MMSYS } 93*ce69a970SAngeloGioacchino Del Regno }; 94*ce69a970SAngeloGioacchino Del Regno 95*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_disp = { 96*ce69a970SAngeloGioacchino Del Regno .name = "mm-disp", 97*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MM_DISP, 98*ce69a970SAngeloGioacchino Del Regno .ep = 0, 99*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 100*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_MMSYS } 101*ce69a970SAngeloGioacchino Del Regno }; 102*ce69a970SAngeloGioacchino Del Regno 103*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_vdec = { 104*ce69a970SAngeloGioacchino Del Regno .name = "mm-vdec", 105*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MM_VDEC, 106*ce69a970SAngeloGioacchino Del Regno .ep = 0, 107*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 108*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_MMSYS } 109*ce69a970SAngeloGioacchino Del Regno }; 110*ce69a970SAngeloGioacchino Del Regno 111*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_venc = { 112*ce69a970SAngeloGioacchino Del Regno .name = "mm-venc", 113*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MM_VENC, 114*ce69a970SAngeloGioacchino Del Regno .ep = 0, 115*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 116*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_MMSYS } 117*ce69a970SAngeloGioacchino Del Regno }; 118*ce69a970SAngeloGioacchino Del Regno 119*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_cam = { 120*ce69a970SAngeloGioacchino Del Regno .name = "mm-cam", 121*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MM_CAM, 122*ce69a970SAngeloGioacchino Del Regno .ep = 0, 123*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 124*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_MMSYS } 125*ce69a970SAngeloGioacchino Del Regno }; 126*ce69a970SAngeloGioacchino Del Regno 127*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_img = { 128*ce69a970SAngeloGioacchino Del Regno .name = "mm-img", 129*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MM_IMG, 130*ce69a970SAngeloGioacchino Del Regno .ep = 0, 131*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 132*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_MMSYS } 133*ce69a970SAngeloGioacchino Del Regno }; 134*ce69a970SAngeloGioacchino Del Regno 135*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mm_mdp = { 136*ce69a970SAngeloGioacchino Del Regno .name = "mm-mdp", 137*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MM_MDP, 138*ce69a970SAngeloGioacchino Del Regno .ep = 0, 139*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 140*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_MMSYS } 141*ce69a970SAngeloGioacchino Del Regno }; 142*ce69a970SAngeloGioacchino Del Regno 143*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node vpusys = { 144*ce69a970SAngeloGioacchino Del Regno .name = "vpusys", 145*ce69a970SAngeloGioacchino Del Regno .id = MASTER_VPUSYS, 146*ce69a970SAngeloGioacchino Del Regno .ep = 0, 147*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 148*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 149*ce69a970SAngeloGioacchino Del Regno }; 150*ce69a970SAngeloGioacchino Del Regno 151*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node vpu_port0 = { 152*ce69a970SAngeloGioacchino Del Regno .name = "vpu-port0", 153*ce69a970SAngeloGioacchino Del Regno .id = MASTER_VPU_0, 154*ce69a970SAngeloGioacchino Del Regno .ep = 0, 155*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 156*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_VPUSYS } 157*ce69a970SAngeloGioacchino Del Regno }; 158*ce69a970SAngeloGioacchino Del Regno 159*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node vpu_port1 = { 160*ce69a970SAngeloGioacchino Del Regno .name = "vpu-port1", 161*ce69a970SAngeloGioacchino Del Regno .id = MASTER_VPU_1, 162*ce69a970SAngeloGioacchino Del Regno .ep = 0, 163*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 164*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_VPUSYS } 165*ce69a970SAngeloGioacchino Del Regno }; 166*ce69a970SAngeloGioacchino Del Regno 167*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mdlasys = { 168*ce69a970SAngeloGioacchino Del Regno .name = "mdlasys", 169*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MDLASYS, 170*ce69a970SAngeloGioacchino Del Regno .ep = 0, 171*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 172*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 173*ce69a970SAngeloGioacchino Del Regno }; 174*ce69a970SAngeloGioacchino Del Regno 175*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node mdla_port0 = { 176*ce69a970SAngeloGioacchino Del Regno .name = "mdla-port0", 177*ce69a970SAngeloGioacchino Del Regno .id = MASTER_MDLA_0, 178*ce69a970SAngeloGioacchino Del Regno .ep = 0, 179*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 180*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_MDLASYS } 181*ce69a970SAngeloGioacchino Del Regno }; 182*ce69a970SAngeloGioacchino Del Regno 183*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node ufs = { 184*ce69a970SAngeloGioacchino Del Regno .name = "ufs", 185*ce69a970SAngeloGioacchino Del Regno .id = MASTER_UFS, 186*ce69a970SAngeloGioacchino Del Regno .ep = 0, 187*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 188*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 189*ce69a970SAngeloGioacchino Del Regno }; 190*ce69a970SAngeloGioacchino Del Regno 191*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node pcie = { 192*ce69a970SAngeloGioacchino Del Regno .name = "pcie", 193*ce69a970SAngeloGioacchino Del Regno .id = MASTER_PCIE, 194*ce69a970SAngeloGioacchino Del Regno .ep = 0, 195*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 196*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 197*ce69a970SAngeloGioacchino Del Regno }; 198*ce69a970SAngeloGioacchino Del Regno 199*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node usb = { 200*ce69a970SAngeloGioacchino Del Regno .name = "usb", 201*ce69a970SAngeloGioacchino Del Regno .id = MASTER_USB, 202*ce69a970SAngeloGioacchino Del Regno .ep = 0, 203*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 204*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 205*ce69a970SAngeloGioacchino Del Regno }; 206*ce69a970SAngeloGioacchino Del Regno 207*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node wifi = { 208*ce69a970SAngeloGioacchino Del Regno .name = "wifi", 209*ce69a970SAngeloGioacchino Del Regno .id = MASTER_WIFI, 210*ce69a970SAngeloGioacchino Del Regno .ep = 0, 211*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 212*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 213*ce69a970SAngeloGioacchino Del Regno }; 214*ce69a970SAngeloGioacchino Del Regno 215*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node bt = { 216*ce69a970SAngeloGioacchino Del Regno .name = "bt", 217*ce69a970SAngeloGioacchino Del Regno .id = MASTER_BT, 218*ce69a970SAngeloGioacchino Del Regno .ep = 0, 219*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 220*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 221*ce69a970SAngeloGioacchino Del Regno }; 222*ce69a970SAngeloGioacchino Del Regno 223*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node netsys = { 224*ce69a970SAngeloGioacchino Del Regno .name = "netsys", 225*ce69a970SAngeloGioacchino Del Regno .id = MASTER_NETSYS, 226*ce69a970SAngeloGioacchino Del Regno .ep = 0, 227*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 228*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 229*ce69a970SAngeloGioacchino Del Regno }; 230*ce69a970SAngeloGioacchino Del Regno 231*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node dbgif = { 232*ce69a970SAngeloGioacchino Del Regno .name = "dbgif", 233*ce69a970SAngeloGioacchino Del Regno .id = MASTER_DBGIF, 234*ce69a970SAngeloGioacchino Del Regno .ep = 0, 235*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 236*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_DDR_EMI } 237*ce69a970SAngeloGioacchino Del Regno }; 238*ce69a970SAngeloGioacchino Del Regno 239*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_ddr_emi = { 240*ce69a970SAngeloGioacchino Del Regno .name = "hrt-ddr-emi", 241*ce69a970SAngeloGioacchino Del Regno .id = SLAVE_HRT_DDR_EMI, 242*ce69a970SAngeloGioacchino Del Regno .ep = 2, 243*ce69a970SAngeloGioacchino Del Regno }; 244*ce69a970SAngeloGioacchino Del Regno 245*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mmsys = { 246*ce69a970SAngeloGioacchino Del Regno .name = "hrt-mmsys", 247*ce69a970SAngeloGioacchino Del Regno .id = MASTER_HRT_MMSYS, 248*ce69a970SAngeloGioacchino Del Regno .ep = 0, 249*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 250*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_HRT_DDR_EMI } 251*ce69a970SAngeloGioacchino Del Regno }; 252*ce69a970SAngeloGioacchino Del Regno 253*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_disp = { 254*ce69a970SAngeloGioacchino Del Regno .name = "hrt-mm-disp", 255*ce69a970SAngeloGioacchino Del Regno .id = MASTER_HRT_MM_DISP, 256*ce69a970SAngeloGioacchino Del Regno .ep = 0, 257*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 258*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_HRT_MMSYS } 259*ce69a970SAngeloGioacchino Del Regno }; 260*ce69a970SAngeloGioacchino Del Regno 261*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_vdec = { 262*ce69a970SAngeloGioacchino Del Regno .name = "hrt-mm-vdec", 263*ce69a970SAngeloGioacchino Del Regno .id = MASTER_HRT_MM_VDEC, 264*ce69a970SAngeloGioacchino Del Regno .ep = 0, 265*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 266*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_HRT_MMSYS } 267*ce69a970SAngeloGioacchino Del Regno }; 268*ce69a970SAngeloGioacchino Del Regno 269*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_venc = { 270*ce69a970SAngeloGioacchino Del Regno .name = "hrt-mm-venc", 271*ce69a970SAngeloGioacchino Del Regno .id = MASTER_HRT_MM_VENC, 272*ce69a970SAngeloGioacchino Del Regno .ep = 0, 273*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 274*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_HRT_MMSYS } 275*ce69a970SAngeloGioacchino Del Regno }; 276*ce69a970SAngeloGioacchino Del Regno 277*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_cam = { 278*ce69a970SAngeloGioacchino Del Regno .name = "hrt-mm-cam", 279*ce69a970SAngeloGioacchino Del Regno .id = MASTER_HRT_MM_CAM, 280*ce69a970SAngeloGioacchino Del Regno .ep = 0, 281*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 282*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_HRT_MMSYS } 283*ce69a970SAngeloGioacchino Del Regno }; 284*ce69a970SAngeloGioacchino Del Regno 285*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_img = { 286*ce69a970SAngeloGioacchino Del Regno .name = "hrt-mm-img", 287*ce69a970SAngeloGioacchino Del Regno .id = MASTER_HRT_MM_IMG, 288*ce69a970SAngeloGioacchino Del Regno .ep = 0, 289*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 290*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_HRT_MMSYS } 291*ce69a970SAngeloGioacchino Del Regno }; 292*ce69a970SAngeloGioacchino Del Regno 293*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_mm_mdp = { 294*ce69a970SAngeloGioacchino Del Regno .name = "hrt-mm-mdp", 295*ce69a970SAngeloGioacchino Del Regno .id = MASTER_HRT_MM_MDP, 296*ce69a970SAngeloGioacchino Del Regno .ep = 0, 297*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 298*ce69a970SAngeloGioacchino Del Regno .links = { MASTER_HRT_MMSYS } 299*ce69a970SAngeloGioacchino Del Regno }; 300*ce69a970SAngeloGioacchino Del Regno 301*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_adsp = { 302*ce69a970SAngeloGioacchino Del Regno .name = "hrt-adsp", 303*ce69a970SAngeloGioacchino Del Regno .id = MASTER_HRT_ADSP, 304*ce69a970SAngeloGioacchino Del Regno .ep = 0, 305*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 306*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_HRT_DDR_EMI } 307*ce69a970SAngeloGioacchino Del Regno }; 308*ce69a970SAngeloGioacchino Del Regno 309*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node hrt_dbgif = { 310*ce69a970SAngeloGioacchino Del Regno .name = "hrt-dbgif", 311*ce69a970SAngeloGioacchino Del Regno .id = MASTER_HRT_DBGIF, 312*ce69a970SAngeloGioacchino Del Regno .ep = 0, 313*ce69a970SAngeloGioacchino Del Regno .num_links = 1, 314*ce69a970SAngeloGioacchino Del Regno .links = { SLAVE_HRT_DDR_EMI } 315*ce69a970SAngeloGioacchino Del Regno }; 316*ce69a970SAngeloGioacchino Del Regno 317*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_node *mt8196_emi_icc_nodes[] = { 318*ce69a970SAngeloGioacchino Del Regno [SLAVE_DDR_EMI] = &ddr_emi, 319*ce69a970SAngeloGioacchino Del Regno [MASTER_MCUSYS] = &mcusys, 320*ce69a970SAngeloGioacchino Del Regno [MASTER_MCU_0] = &mcu_port0, 321*ce69a970SAngeloGioacchino Del Regno [MASTER_MCU_1] = &mcu_port1, 322*ce69a970SAngeloGioacchino Del Regno [MASTER_MCU_2] = &mcu_port2, 323*ce69a970SAngeloGioacchino Del Regno [MASTER_MCU_3] = &mcu_port3, 324*ce69a970SAngeloGioacchino Del Regno [MASTER_MCU_4] = &mcu_port4, 325*ce69a970SAngeloGioacchino Del Regno [MASTER_GPUSYS] = &gpu, 326*ce69a970SAngeloGioacchino Del Regno [MASTER_MMSYS] = &mmsys, 327*ce69a970SAngeloGioacchino Del Regno [MASTER_MM_VPU] = &mm_vpu, 328*ce69a970SAngeloGioacchino Del Regno [MASTER_MM_DISP] = &mm_disp, 329*ce69a970SAngeloGioacchino Del Regno [MASTER_MM_VDEC] = &mm_vdec, 330*ce69a970SAngeloGioacchino Del Regno [MASTER_MM_VENC] = &mm_venc, 331*ce69a970SAngeloGioacchino Del Regno [MASTER_MM_CAM] = &mm_cam, 332*ce69a970SAngeloGioacchino Del Regno [MASTER_MM_IMG] = &mm_img, 333*ce69a970SAngeloGioacchino Del Regno [MASTER_MM_MDP] = &mm_mdp, 334*ce69a970SAngeloGioacchino Del Regno [MASTER_VPUSYS] = &vpusys, 335*ce69a970SAngeloGioacchino Del Regno [MASTER_VPU_0] = &vpu_port0, 336*ce69a970SAngeloGioacchino Del Regno [MASTER_VPU_1] = &vpu_port1, 337*ce69a970SAngeloGioacchino Del Regno [MASTER_MDLASYS] = &mdlasys, 338*ce69a970SAngeloGioacchino Del Regno [MASTER_MDLA_0] = &mdla_port0, 339*ce69a970SAngeloGioacchino Del Regno [MASTER_UFS] = &ufs, 340*ce69a970SAngeloGioacchino Del Regno [MASTER_PCIE] = &pcie, 341*ce69a970SAngeloGioacchino Del Regno [MASTER_USB] = &usb, 342*ce69a970SAngeloGioacchino Del Regno [MASTER_WIFI] = &wifi, 343*ce69a970SAngeloGioacchino Del Regno [MASTER_BT] = &bt, 344*ce69a970SAngeloGioacchino Del Regno [MASTER_NETSYS] = &netsys, 345*ce69a970SAngeloGioacchino Del Regno [MASTER_DBGIF] = &dbgif, 346*ce69a970SAngeloGioacchino Del Regno [SLAVE_HRT_DDR_EMI] = &hrt_ddr_emi, 347*ce69a970SAngeloGioacchino Del Regno [MASTER_HRT_MMSYS] = &hrt_mmsys, 348*ce69a970SAngeloGioacchino Del Regno [MASTER_HRT_MM_DISP] = &hrt_mm_disp, 349*ce69a970SAngeloGioacchino Del Regno [MASTER_HRT_MM_VDEC] = &hrt_mm_vdec, 350*ce69a970SAngeloGioacchino Del Regno [MASTER_HRT_MM_VENC] = &hrt_mm_venc, 351*ce69a970SAngeloGioacchino Del Regno [MASTER_HRT_MM_CAM] = &hrt_mm_cam, 352*ce69a970SAngeloGioacchino Del Regno [MASTER_HRT_MM_IMG] = &hrt_mm_img, 353*ce69a970SAngeloGioacchino Del Regno [MASTER_HRT_MM_MDP] = &hrt_mm_mdp, 354*ce69a970SAngeloGioacchino Del Regno [MASTER_HRT_ADSP] = &hrt_adsp, 355*ce69a970SAngeloGioacchino Del Regno [MASTER_HRT_DBGIF] = &hrt_dbgif 356*ce69a970SAngeloGioacchino Del Regno }; 357*ce69a970SAngeloGioacchino Del Regno 358*ce69a970SAngeloGioacchino Del Regno static struct mtk_icc_desc mt8196_emi_icc = { 359*ce69a970SAngeloGioacchino Del Regno .nodes = mt8196_emi_icc_nodes, 360*ce69a970SAngeloGioacchino Del Regno .num_nodes = ARRAY_SIZE(mt8196_emi_icc_nodes), 361*ce69a970SAngeloGioacchino Del Regno }; 362*ce69a970SAngeloGioacchino Del Regno 363*ce69a970SAngeloGioacchino Del Regno static const struct of_device_id mtk_mt8196_emi_icc_of_match[] = { 364*ce69a970SAngeloGioacchino Del Regno { .compatible = "mediatek,mt8196-emi", .data = &mt8196_emi_icc }, 365*ce69a970SAngeloGioacchino Del Regno { /* sentinel */ }, 366*ce69a970SAngeloGioacchino Del Regno }; 367*ce69a970SAngeloGioacchino Del Regno MODULE_DEVICE_TABLE(of, mtk_mt8196_emi_icc_of_match); 368*ce69a970SAngeloGioacchino Del Regno 369*ce69a970SAngeloGioacchino Del Regno static struct platform_driver mtk_emi_icc_mt8196_driver = { 370*ce69a970SAngeloGioacchino Del Regno .driver = { 371*ce69a970SAngeloGioacchino Del Regno .name = "emi-icc-mt8196", 372*ce69a970SAngeloGioacchino Del Regno .of_match_table = mtk_mt8196_emi_icc_of_match, 373*ce69a970SAngeloGioacchino Del Regno .sync_state = icc_sync_state, 374*ce69a970SAngeloGioacchino Del Regno }, 375*ce69a970SAngeloGioacchino Del Regno .probe = mtk_emi_icc_probe, 376*ce69a970SAngeloGioacchino Del Regno .remove = mtk_emi_icc_remove, 377*ce69a970SAngeloGioacchino Del Regno 378*ce69a970SAngeloGioacchino Del Regno }; 379*ce69a970SAngeloGioacchino Del Regno module_platform_driver(mtk_emi_icc_mt8196_driver); 380*ce69a970SAngeloGioacchino Del Regno 381*ce69a970SAngeloGioacchino Del Regno MODULE_AUTHOR("AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>"); 382*ce69a970SAngeloGioacchino Del Regno MODULE_DESCRIPTION("MediaTek MT8196 EMI ICC driver"); 383*ce69a970SAngeloGioacchino Del Regno MODULE_LICENSE("GPL"); 384