-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
interconnect: imx: Add platform driver for imx8mn
Add a platform driver for the i.MX8MN SoC describing bus topology, based on internal documentation. Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com> Link: https://lore.kernel.org/r/338a5409ce88811ba6c940ba06441db3faa8c187.1586174566.git.leonard.crestez@nxp.com Signed-off-by: Georgi Djakov <georgi.djakov@linaro.org>
- Loading branch information
Leonard Crestez
authored and
Georgi Djakov
committed
Apr 28, 2020
1 parent
63fc802
commit 4b54bf4
Showing
4 changed files
with
141 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,9 @@ | ||
imx-interconnect-objs := imx.o | ||
imx8mm-interconnect-objs := imx8mm.o | ||
imx8mq-interconnect-objs := imx8mq.o | ||
imx8mn-interconnect-objs := imx8mn.o | ||
|
||
obj-$(CONFIG_INTERCONNECT_IMX) += imx-interconnect.o | ||
obj-$(CONFIG_INTERCONNECT_IMX8MM) += imx8mm-interconnect.o | ||
obj-$(CONFIG_INTERCONNECT_IMX8MQ) += imx8mq-interconnect.o | ||
obj-$(CONFIG_INTERCONNECT_IMX8MN) += imx8mn-interconnect.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* Interconnect framework driver for i.MX8MN SoC | ||
* | ||
* Copyright (c) 2019-2020, NXP | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/platform_device.h> | ||
#include <dt-bindings/interconnect/imx8mn.h> | ||
|
||
#include "imx.h" | ||
|
||
static const struct imx_icc_node_adj_desc imx8mn_dram_adj = { | ||
.bw_mul = 1, | ||
.bw_div = 4, | ||
.phandle_name = "fsl,ddrc", | ||
}; | ||
|
||
static const struct imx_icc_node_adj_desc imx8mn_noc_adj = { | ||
.bw_mul = 1, | ||
.bw_div = 4, | ||
.main_noc = true, | ||
}; | ||
|
||
/* | ||
* Describe bus masters, slaves and connections between them | ||
* | ||
* This is a simplified subset of the bus diagram, there are several other | ||
* PL301 nics which are skipped/merged into PL301_MAIN | ||
*/ | ||
static struct imx_icc_node_desc nodes[] = { | ||
DEFINE_BUS_INTERCONNECT("NOC", IMX8MN_ICN_NOC, &imx8mn_noc_adj, | ||
IMX8MN_ICS_DRAM, IMX8MN_ICN_MAIN), | ||
|
||
DEFINE_BUS_SLAVE("DRAM", IMX8MN_ICS_DRAM, &imx8mn_dram_adj), | ||
DEFINE_BUS_SLAVE("OCRAM", IMX8MN_ICS_OCRAM, NULL), | ||
DEFINE_BUS_MASTER("A53", IMX8MN_ICM_A53, IMX8MN_ICN_NOC), | ||
|
||
/* GPUMIX */ | ||
DEFINE_BUS_MASTER("GPU", IMX8MN_ICM_GPU, IMX8MN_ICN_GPU), | ||
DEFINE_BUS_INTERCONNECT("PL301_GPU", IMX8MN_ICN_GPU, NULL, IMX8MN_ICN_NOC), | ||
|
||
/* DISPLAYMIX */ | ||
DEFINE_BUS_MASTER("CSI1", IMX8MN_ICM_CSI1, IMX8MN_ICN_MIPI), | ||
DEFINE_BUS_MASTER("CSI2", IMX8MN_ICM_CSI2, IMX8MN_ICN_MIPI), | ||
DEFINE_BUS_MASTER("ISI", IMX8MN_ICM_ISI, IMX8MN_ICN_MIPI), | ||
DEFINE_BUS_MASTER("LCDIF", IMX8MN_ICM_LCDIF, IMX8MN_ICN_MIPI), | ||
DEFINE_BUS_INTERCONNECT("PL301_MIPI", IMX8MN_ICN_MIPI, NULL, IMX8MN_ICN_NOC), | ||
|
||
/* USB goes straight to NOC */ | ||
DEFINE_BUS_MASTER("USB", IMX8MN_ICM_USB, IMX8MN_ICN_NOC), | ||
|
||
/* Audio */ | ||
DEFINE_BUS_MASTER("SDMA2", IMX8MN_ICM_SDMA2, IMX8MN_ICN_AUDIO), | ||
DEFINE_BUS_MASTER("SDMA3", IMX8MN_ICM_SDMA3, IMX8MN_ICN_AUDIO), | ||
DEFINE_BUS_INTERCONNECT("PL301_AUDIO", IMX8MN_ICN_AUDIO, NULL, IMX8MN_ICN_MAIN), | ||
|
||
/* Ethernet */ | ||
DEFINE_BUS_MASTER("ENET", IMX8MN_ICM_ENET, IMX8MN_ICN_ENET), | ||
DEFINE_BUS_INTERCONNECT("PL301_ENET", IMX8MN_ICN_ENET, NULL, IMX8MN_ICN_MAIN), | ||
|
||
/* Other */ | ||
DEFINE_BUS_MASTER("SDMA1", IMX8MN_ICM_SDMA1, IMX8MN_ICN_MAIN), | ||
DEFINE_BUS_MASTER("NAND", IMX8MN_ICM_NAND, IMX8MN_ICN_MAIN), | ||
DEFINE_BUS_MASTER("USDHC1", IMX8MN_ICM_USDHC1, IMX8MN_ICN_MAIN), | ||
DEFINE_BUS_MASTER("USDHC2", IMX8MN_ICM_USDHC2, IMX8MN_ICN_MAIN), | ||
DEFINE_BUS_MASTER("USDHC3", IMX8MN_ICM_USDHC3, IMX8MN_ICN_MAIN), | ||
DEFINE_BUS_INTERCONNECT("PL301_MAIN", IMX8MN_ICN_MAIN, NULL, | ||
IMX8MN_ICN_NOC, IMX8MN_ICS_OCRAM), | ||
}; | ||
|
||
static int imx8mn_icc_probe(struct platform_device *pdev) | ||
{ | ||
return imx_icc_register(pdev, nodes, ARRAY_SIZE(nodes)); | ||
} | ||
|
||
static int imx8mn_icc_remove(struct platform_device *pdev) | ||
{ | ||
return imx_icc_unregister(pdev); | ||
} | ||
|
||
static struct platform_driver imx8mn_icc_driver = { | ||
.probe = imx8mn_icc_probe, | ||
.remove = imx8mn_icc_remove, | ||
.driver = { | ||
.name = "imx8mn-interconnect", | ||
}, | ||
}; | ||
|
||
module_platform_driver(imx8mn_icc_driver); | ||
MODULE_ALIAS("platform:imx8mn-interconnect"); | ||
MODULE_AUTHOR("Leonard Crestez <leonard.crestez@nxp.com>"); | ||
MODULE_LICENSE("GPL v2"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
/* | ||
* Interconnect framework driver for i.MX SoC | ||
* | ||
* Copyright (c) 2019-2020, NXP | ||
*/ | ||
|
||
#ifndef __DT_BINDINGS_INTERCONNECT_IMX8MN_H | ||
#define __DT_BINDINGS_INTERCONNECT_IMX8MN_H | ||
|
||
#define IMX8MN_ICN_NOC 1 | ||
#define IMX8MN_ICS_DRAM 2 | ||
#define IMX8MN_ICS_OCRAM 3 | ||
#define IMX8MN_ICM_A53 4 | ||
|
||
#define IMX8MN_ICM_GPU 5 | ||
#define IMX8MN_ICN_GPU 6 | ||
|
||
#define IMX8MN_ICM_CSI1 7 | ||
#define IMX8MN_ICM_CSI2 8 | ||
#define IMX8MN_ICM_ISI 9 | ||
#define IMX8MN_ICM_LCDIF 10 | ||
#define IMX8MN_ICN_MIPI 11 | ||
|
||
#define IMX8MN_ICM_USB 12 | ||
|
||
#define IMX8MN_ICM_SDMA2 13 | ||
#define IMX8MN_ICM_SDMA3 14 | ||
#define IMX8MN_ICN_AUDIO 15 | ||
|
||
#define IMX8MN_ICN_ENET 16 | ||
#define IMX8MN_ICM_ENET 17 | ||
|
||
#define IMX8MN_ICM_NAND 18 | ||
#define IMX8MN_ICM_SDMA1 19 | ||
#define IMX8MN_ICM_USDHC1 20 | ||
#define IMX8MN_ICM_USDHC2 21 | ||
#define IMX8MN_ICM_USDHC3 22 | ||
#define IMX8MN_ICN_MAIN 23 | ||
|
||
#endif /* __DT_BINDINGS_INTERCONNECT_IMX8MN_H */ |