cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

imx8mn.c (2984B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Interconnect framework driver for i.MX8MN SoC
      4 *
      5 * Copyright (c) 2019-2020, NXP
      6 */
      7
      8#include <linux/module.h>
      9#include <linux/platform_device.h>
     10#include <dt-bindings/interconnect/imx8mn.h>
     11
     12#include "imx.h"
     13
     14static const struct imx_icc_node_adj_desc imx8mn_dram_adj = {
     15	.bw_mul = 1,
     16	.bw_div = 4,
     17	.phandle_name = "fsl,ddrc",
     18};
     19
     20static const struct imx_icc_node_adj_desc imx8mn_noc_adj = {
     21	.bw_mul = 1,
     22	.bw_div = 4,
     23	.main_noc = true,
     24};
     25
     26/*
     27 * Describe bus masters, slaves and connections between them
     28 *
     29 * This is a simplified subset of the bus diagram, there are several other
     30 * PL301 nics which are skipped/merged into PL301_MAIN
     31 */
     32static struct imx_icc_node_desc nodes[] = {
     33	DEFINE_BUS_INTERCONNECT("NOC", IMX8MN_ICN_NOC, &imx8mn_noc_adj,
     34			IMX8MN_ICS_DRAM, IMX8MN_ICN_MAIN),
     35
     36	DEFINE_BUS_SLAVE("DRAM", IMX8MN_ICS_DRAM, &imx8mn_dram_adj),
     37	DEFINE_BUS_SLAVE("OCRAM", IMX8MN_ICS_OCRAM, NULL),
     38	DEFINE_BUS_MASTER("A53", IMX8MN_ICM_A53, IMX8MN_ICN_NOC),
     39
     40	/* GPUMIX */
     41	DEFINE_BUS_MASTER("GPU", IMX8MN_ICM_GPU, IMX8MN_ICN_GPU),
     42	DEFINE_BUS_INTERCONNECT("PL301_GPU", IMX8MN_ICN_GPU, NULL, IMX8MN_ICN_NOC),
     43
     44	/* DISPLAYMIX */
     45	DEFINE_BUS_MASTER("CSI1", IMX8MN_ICM_CSI1, IMX8MN_ICN_MIPI),
     46	DEFINE_BUS_MASTER("CSI2", IMX8MN_ICM_CSI2, IMX8MN_ICN_MIPI),
     47	DEFINE_BUS_MASTER("ISI", IMX8MN_ICM_ISI, IMX8MN_ICN_MIPI),
     48	DEFINE_BUS_MASTER("LCDIF", IMX8MN_ICM_LCDIF, IMX8MN_ICN_MIPI),
     49	DEFINE_BUS_INTERCONNECT("PL301_MIPI", IMX8MN_ICN_MIPI, NULL, IMX8MN_ICN_NOC),
     50
     51	/* USB goes straight to NOC */
     52	DEFINE_BUS_MASTER("USB", IMX8MN_ICM_USB, IMX8MN_ICN_NOC),
     53
     54	/* Audio */
     55	DEFINE_BUS_MASTER("SDMA2", IMX8MN_ICM_SDMA2, IMX8MN_ICN_AUDIO),
     56	DEFINE_BUS_MASTER("SDMA3", IMX8MN_ICM_SDMA3, IMX8MN_ICN_AUDIO),
     57	DEFINE_BUS_INTERCONNECT("PL301_AUDIO", IMX8MN_ICN_AUDIO, NULL, IMX8MN_ICN_MAIN),
     58
     59	/* Ethernet */
     60	DEFINE_BUS_MASTER("ENET", IMX8MN_ICM_ENET, IMX8MN_ICN_ENET),
     61	DEFINE_BUS_INTERCONNECT("PL301_ENET", IMX8MN_ICN_ENET, NULL, IMX8MN_ICN_MAIN),
     62
     63	/* Other */
     64	DEFINE_BUS_MASTER("SDMA1", IMX8MN_ICM_SDMA1, IMX8MN_ICN_MAIN),
     65	DEFINE_BUS_MASTER("NAND", IMX8MN_ICM_NAND, IMX8MN_ICN_MAIN),
     66	DEFINE_BUS_MASTER("USDHC1", IMX8MN_ICM_USDHC1, IMX8MN_ICN_MAIN),
     67	DEFINE_BUS_MASTER("USDHC2", IMX8MN_ICM_USDHC2, IMX8MN_ICN_MAIN),
     68	DEFINE_BUS_MASTER("USDHC3", IMX8MN_ICM_USDHC3, IMX8MN_ICN_MAIN),
     69	DEFINE_BUS_INTERCONNECT("PL301_MAIN", IMX8MN_ICN_MAIN, NULL,
     70			IMX8MN_ICN_NOC, IMX8MN_ICS_OCRAM),
     71};
     72
     73static int imx8mn_icc_probe(struct platform_device *pdev)
     74{
     75	return imx_icc_register(pdev, nodes, ARRAY_SIZE(nodes));
     76}
     77
     78static int imx8mn_icc_remove(struct platform_device *pdev)
     79{
     80	return imx_icc_unregister(pdev);
     81}
     82
     83static struct platform_driver imx8mn_icc_driver = {
     84	.probe = imx8mn_icc_probe,
     85	.remove = imx8mn_icc_remove,
     86	.driver = {
     87		.name = "imx8mn-interconnect",
     88	},
     89};
     90
     91module_platform_driver(imx8mn_icc_driver);
     92MODULE_ALIAS("platform:imx8mn-interconnect");
     93MODULE_AUTHOR("Leonard Crestez <leonard.crestez@nxp.com>");
     94MODULE_LICENSE("GPL v2");