summaryrefslogtreecommitdiff
path: root/drivers/interconnect/imx/imx.h
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2022-07-03 12:11:29 +0300
committerGeorgi Djakov <djakov@kernel.org>2022-07-15 17:53:15 +0300
commit7980d85a9443029c39a9d131c13732258e44a8de (patch)
treef6ab95cebdcde33d1f62f58aa936bb0a822f2afa /drivers/interconnect/imx/imx.h
parent12db59e8e0a2472307f47586f7767054a46d95f5 (diff)
downloadlinux-7980d85a9443029c39a9d131c13732258e44a8de.tar.xz
interconnect: imx: configure NoC mode/prioriry/ext_control
Introduce imx_icc_noc_setting structure to describe a master port setting Pass imx_icc_noc_setting as a parameter from specific driver Set priority level, mode, ext control in imx_icc_node_set Signed-off-by: Peng Fan <peng.fan@nxp.com> Link: https://lore.kernel.org/r/20220703091132.1412063-8-peng.fan@oss.nxp.com Signed-off-by: Georgi Djakov <djakov@kernel.org>
Diffstat (limited to 'drivers/interconnect/imx/imx.h')
-rw-r--r--drivers/interconnect/imx/imx.h43
1 files changed, 42 insertions, 1 deletions
diff --git a/drivers/interconnect/imx/imx.h b/drivers/interconnect/imx/imx.h
index 0ad2c654c222..e0a2ee173ecd 100644
--- a/drivers/interconnect/imx/imx.h
+++ b/drivers/interconnect/imx/imx.h
@@ -15,6 +15,32 @@
#define IMX_ICC_MAX_LINKS 4
+/*
+ * High throughput priority level in Regulator mode
+ * Read Priority in Fixed/Limiter mode
+ */
+#define PRIORITY0_SHIFT 0
+/*
+ * Low throughput priority level in Regulator mode
+ * Write Priority in Fixed/Limiter mode
+ */
+#define PRIORITY1_SHIFT 8
+#define PRIORITY_MASK 0x7
+
+#define PRIORITY_COMP_MARK BIT(31) /* Must set */
+
+#define IMX_NOC_MODE_FIXED 0
+#define IMX_NOC_MODE_LIMITER 1
+#define IMX_NOC_MODE_BYPASS 2
+#define IMX_NOC_MODE_REGULATOR 3
+#define IMX_NOC_MODE_UNCONFIGURED 0xFF
+
+#define IMX_NOC_PRIO_REG 0x8
+#define IMX_NOC_MODE_REG 0xC
+#define IMX_NOC_BANDWIDTH_REG 0x10
+#define IMX_NOC_SATURATION 0x14
+#define IMX_NOC_EXT_CTL_REG 0x18
+
struct imx_icc_provider {
void __iomem *noc_base;
struct icc_provider provider;
@@ -44,6 +70,20 @@ struct imx_icc_node_desc {
const struct imx_icc_node_adj_desc *adj;
};
+/*
+ * struct imx_icc_noc_setting - Describe an interconnect node setting
+ * @reg: register offset inside the NoC
+ * @prio_level: priority level
+ * @mode: functional mode
+ * @ext_control: external input control
+ */
+struct imx_icc_noc_setting {
+ u32 reg;
+ u32 prio_level;
+ u32 mode;
+ u32 ext_control;
+};
+
#define DEFINE_BUS_INTERCONNECT(_name, _id, _adj, ...) \
{ \
.id = _id, \
@@ -61,7 +101,8 @@ struct imx_icc_node_desc {
int imx_icc_register(struct platform_device *pdev,
struct imx_icc_node_desc *nodes,
- int nodes_count);
+ int nodes_count,
+ struct imx_icc_noc_setting *noc_settings);
int imx_icc_unregister(struct platform_device *pdev);
#endif /* __DRIVERS_INTERCONNECT_IMX_H */