drivers/ipm: Add IPM support for i.MX7

This patch ads the support for the IPM drivers on i.MX7 SoC family.

Signed-off-by: Diego Sueiro <diego.sueiro@gmail.com>
This commit is contained in:
Diego Sueiro 2018-11-19 17:42:40 +00:00 committed by Kumar Gala
commit 6d070c77b6
4 changed files with 108 additions and 71 deletions

View file

@ -260,6 +260,16 @@
status = "disabled";
};
mub:mu@30ab0000 {
compatible = "nxp,imx-mu";
reg = <0x30ab0000 0x4000>;
interrupts = <97 0>;
rdc = <RDC_DOMAIN_PERM(M4_DOMAIN_ID,\
RDC_DOMAIN_PERM_RW)>;
label = "MU_B";
status = "disabled";
};
i2c1: i2c@30a20000 {
compatible = "fsl,imx7d-i2c";
clock-frequency = <I2C_BITRATE_STANDARD>;

View file

@ -57,4 +57,11 @@ config PWM_IMX
endif # PWM
if IPM
config IPM_IMX
default y
endif # IPM
endif # SOC_MCIMX7_M4

View file

@ -6,105 +6,110 @@
/* SoC level DTS fixup file */
#define DT_NUM_IRQ_PRIO_BITS DT_ARM_V7M_NVIC_E000E100_ARM_NUM_IRQ_PRIORITY_BITS
#define DT_NUM_IRQ_PRIO_BITS DT_ARM_V7M_NVIC_E000E100_ARM_NUM_IRQ_PRIORITY_BITS
#define DT_GPIO_IMX_PORT_1_NAME DT_NXP_IMX_GPIO_30200000_LABEL
#define DT_GPIO_IMX_PORT_1_NAME DT_NXP_IMX_GPIO_30200000_LABEL
#define DT_GPIO_IMX_PORT_1_BASE_ADDRESS DT_NXP_IMX_GPIO_30200000_BASE_ADDRESS
#define DT_GPIO_IMX_PORT_1_IRQ_0 DT_NXP_IMX_GPIO_30200000_IRQ_0
#define DT_GPIO_IMX_PORT_1_IRQ_0_PRI DT_NXP_IMX_GPIO_30200000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_1_IRQ_1 DT_NXP_IMX_GPIO_30200000_IRQ_1
#define DT_GPIO_IMX_PORT_1_IRQ_1_PRI DT_NXP_IMX_GPIO_30200000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_1_IRQ_0 DT_NXP_IMX_GPIO_30200000_IRQ_0
#define DT_GPIO_IMX_PORT_1_IRQ_0_PRI DT_NXP_IMX_GPIO_30200000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_1_IRQ_1 DT_NXP_IMX_GPIO_30200000_IRQ_1
#define DT_GPIO_IMX_PORT_1_IRQ_1_PRI DT_NXP_IMX_GPIO_30200000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_2_NAME DT_NXP_IMX_GPIO_30210000_LABEL
#define DT_GPIO_IMX_PORT_2_NAME DT_NXP_IMX_GPIO_30210000_LABEL
#define DT_GPIO_IMX_PORT_2_BASE_ADDRESS DT_NXP_IMX_GPIO_30210000_BASE_ADDRESS
#define DT_GPIO_IMX_PORT_2_IRQ_0 DT_NXP_IMX_GPIO_30210000_IRQ_0
#define DT_GPIO_IMX_PORT_2_IRQ_0_PRI DT_NXP_IMX_GPIO_30210000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_2_IRQ_1 DT_NXP_IMX_GPIO_30210000_IRQ_1
#define DT_GPIO_IMX_PORT_2_IRQ_1_PRI DT_NXP_IMX_GPIO_30210000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_2_IRQ_0 DT_NXP_IMX_GPIO_30210000_IRQ_0
#define DT_GPIO_IMX_PORT_2_IRQ_0_PRI DT_NXP_IMX_GPIO_30210000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_2_IRQ_1 DT_NXP_IMX_GPIO_30210000_IRQ_1
#define DT_GPIO_IMX_PORT_2_IRQ_1_PRI DT_NXP_IMX_GPIO_30210000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_3_NAME DT_NXP_IMX_GPIO_30220000_LABEL
#define DT_GPIO_IMX_PORT_3_NAME DT_NXP_IMX_GPIO_30220000_LABEL
#define DT_GPIO_IMX_PORT_3_BASE_ADDRESS DT_NXP_IMX_GPIO_30220000_BASE_ADDRESS
#define DT_GPIO_IMX_PORT_3_IRQ_0 DT_NXP_IMX_GPIO_30220000_IRQ_0
#define DT_GPIO_IMX_PORT_3_IRQ_0_PRI DT_NXP_IMX_GPIO_30220000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_3_IRQ_1 DT_NXP_IMX_GPIO_30220000_IRQ_1
#define DT_GPIO_IMX_PORT_3_IRQ_1_PRI DT_NXP_IMX_GPIO_30220000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_3_IRQ_0 DT_NXP_IMX_GPIO_30220000_IRQ_0
#define DT_GPIO_IMX_PORT_3_IRQ_0_PRI DT_NXP_IMX_GPIO_30220000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_3_IRQ_1 DT_NXP_IMX_GPIO_30220000_IRQ_1
#define DT_GPIO_IMX_PORT_3_IRQ_1_PRI DT_NXP_IMX_GPIO_30220000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_4_NAME DT_NXP_IMX_GPIO_30230000_LABEL
#define DT_GPIO_IMX_PORT_4_NAME DT_NXP_IMX_GPIO_30230000_LABEL
#define DT_GPIO_IMX_PORT_4_BASE_ADDRESS DT_NXP_IMX_GPIO_30230000_BASE_ADDRESS
#define DT_GPIO_IMX_PORT_4_IRQ_0 DT_NXP_IMX_GPIO_30230000_IRQ_0
#define DT_GPIO_IMX_PORT_4_IRQ_0_PRI DT_NXP_IMX_GPIO_30230000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_4_IRQ_1 DT_NXP_IMX_GPIO_30230000_IRQ_1
#define DT_GPIO_IMX_PORT_4_IRQ_1_PRI DT_NXP_IMX_GPIO_30230000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_4_IRQ_0 DT_NXP_IMX_GPIO_30230000_IRQ_0
#define DT_GPIO_IMX_PORT_4_IRQ_0_PRI DT_NXP_IMX_GPIO_30230000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_4_IRQ_1 DT_NXP_IMX_GPIO_30230000_IRQ_1
#define DT_GPIO_IMX_PORT_4_IRQ_1_PRI DT_NXP_IMX_GPIO_30230000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_5_NAME DT_NXP_IMX_GPIO_30240000_LABEL
#define DT_GPIO_IMX_PORT_5_NAME DT_NXP_IMX_GPIO_30240000_LABEL
#define DT_GPIO_IMX_PORT_5_BASE_ADDRESS DT_NXP_IMX_GPIO_30240000_BASE_ADDRESS
#define DT_GPIO_IMX_PORT_5_IRQ_0 DT_NXP_IMX_GPIO_30240000_IRQ_0
#define DT_GPIO_IMX_PORT_5_IRQ_0_PRI DT_NXP_IMX_GPIO_30240000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_5_IRQ_1 DT_NXP_IMX_GPIO_30240000_IRQ_1
#define DT_GPIO_IMX_PORT_5_IRQ_1_PRI DT_NXP_IMX_GPIO_30240000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_5_IRQ_0 DT_NXP_IMX_GPIO_30240000_IRQ_0
#define DT_GPIO_IMX_PORT_5_IRQ_0_PRI DT_NXP_IMX_GPIO_30240000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_5_IRQ_1 DT_NXP_IMX_GPIO_30240000_IRQ_1
#define DT_GPIO_IMX_PORT_5_IRQ_1_PRI DT_NXP_IMX_GPIO_30240000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_6_NAME DT_NXP_IMX_GPIO_30250000_LABEL
#define DT_GPIO_IMX_PORT_6_NAME DT_NXP_IMX_GPIO_30250000_LABEL
#define DT_GPIO_IMX_PORT_6_BASE_ADDRESS DT_NXP_IMX_GPIO_30250000_BASE_ADDRESS
#define DT_GPIO_IMX_PORT_6_IRQ_0 DT_NXP_IMX_GPIO_30250000_IRQ_0
#define DT_GPIO_IMX_PORT_6_IRQ_0_PRI DT_NXP_IMX_GPIO_30250000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_6_IRQ_1 DT_NXP_IMX_GPIO_30250000_IRQ_1
#define DT_GPIO_IMX_PORT_6_IRQ_1_PRI DT_NXP_IMX_GPIO_30250000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_6_IRQ_0 DT_NXP_IMX_GPIO_30250000_IRQ_0
#define DT_GPIO_IMX_PORT_6_IRQ_0_PRI DT_NXP_IMX_GPIO_30250000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_6_IRQ_1 DT_NXP_IMX_GPIO_30250000_IRQ_1
#define DT_GPIO_IMX_PORT_6_IRQ_1_PRI DT_NXP_IMX_GPIO_30250000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_7_NAME DT_NXP_IMX_GPIO_30260000_LABEL
#define DT_GPIO_IMX_PORT_7_NAME DT_NXP_IMX_GPIO_30260000_LABEL
#define DT_GPIO_IMX_PORT_7_BASE_ADDRESS DT_NXP_IMX_GPIO_30260000_BASE_ADDRESS
#define DT_GPIO_IMX_PORT_7_IRQ_0 DT_NXP_IMX_GPIO_30260000_IRQ_0
#define DT_GPIO_IMX_PORT_7_IRQ_0_PRI DT_NXP_IMX_GPIO_30260000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_7_IRQ_1 DT_NXP_IMX_GPIO_30260000_IRQ_1
#define DT_GPIO_IMX_PORT_7_IRQ_1_PRI DT_NXP_IMX_GPIO_30260000_IRQ_1_PRIORITY
#define DT_GPIO_IMX_PORT_7_IRQ_0 DT_NXP_IMX_GPIO_30260000_IRQ_0
#define DT_GPIO_IMX_PORT_7_IRQ_0_PRI DT_NXP_IMX_GPIO_30260000_IRQ_0_PRIORITY
#define DT_GPIO_IMX_PORT_7_IRQ_1 DT_NXP_IMX_GPIO_30260000_IRQ_1
#define DT_GPIO_IMX_PORT_7_IRQ_1_PRI DT_NXP_IMX_GPIO_30260000_IRQ_1_PRIORITY
#define DT_UART_IMX_UART_1_NAME DT_NXP_IMX_UART_30860000_LABEL
#define DT_UART_IMX_UART_1_NAME DT_NXP_IMX_UART_30860000_LABEL
#define DT_UART_IMX_UART_1_BASE_ADDRESS DT_NXP_IMX_UART_30860000_BASE_ADDRESS
#define DT_UART_IMX_UART_1_BAUD_RATE DT_NXP_IMX_UART_30860000_CURRENT_SPEED
#define DT_UART_IMX_UART_1_IRQ_NUM DT_NXP_IMX_UART_30860000_IRQ_0
#define DT_UART_IMX_UART_1_IRQ_PRI DT_NXP_IMX_UART_30860000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_1_MODEM_MODE DT_NXP_IMX_UART_30860000_MODEM_MODE
#define DT_UART_IMX_UART_1_BAUD_RATE DT_NXP_IMX_UART_30860000_CURRENT_SPEED
#define DT_UART_IMX_UART_1_IRQ_NUM DT_NXP_IMX_UART_30860000_IRQ_0
#define DT_UART_IMX_UART_1_IRQ_PRI DT_NXP_IMX_UART_30860000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_1_MODEM_MODE DT_NXP_IMX_UART_30860000_MODEM_MODE
#define DT_UART_IMX_UART_2_NAME DT_NXP_IMX_UART_30890000_LABEL
#define DT_UART_IMX_UART_2_NAME DT_NXP_IMX_UART_30890000_LABEL
#define DT_UART_IMX_UART_2_BASE_ADDRESS DT_NXP_IMX_UART_30890000_BASE_ADDRESS
#define DT_UART_IMX_UART_2_BAUD_RATE DT_NXP_IMX_UART_30890000_CURRENT_SPEED
#define DT_UART_IMX_UART_2_IRQ_NUM DT_NXP_IMX_UART_30890000_IRQ_0
#define DT_UART_IMX_UART_2_IRQ_PRI DT_NXP_IMX_UART_30890000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_2_MODEM_MODE DT_NXP_IMX_UART_30890000_MODEM_MODE
#define DT_UART_IMX_UART_2_BAUD_RATE DT_NXP_IMX_UART_30890000_CURRENT_SPEED
#define DT_UART_IMX_UART_2_IRQ_NUM DT_NXP_IMX_UART_30890000_IRQ_0
#define DT_UART_IMX_UART_2_IRQ_PRI DT_NXP_IMX_UART_30890000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_2_MODEM_MODE DT_NXP_IMX_UART_30890000_MODEM_MODE
#define DT_UART_IMX_UART_3_NAME DT_NXP_IMX_UART_30880000_LABEL
#define DT_UART_IMX_UART_3_NAME DT_NXP_IMX_UART_30880000_LABEL
#define DT_UART_IMX_UART_3_BASE_ADDRESS DT_NXP_IMX_UART_30880000_BASE_ADDRESS
#define DT_UART_IMX_UART_3_BAUD_RATE DT_NXP_IMX_UART_30880000_CURRENT_SPEED
#define DT_UART_IMX_UART_3_IRQ_NUM DT_NXP_IMX_UART_30880000_IRQ_0
#define DT_UART_IMX_UART_3_IRQ_PRI DT_NXP_IMX_UART_30880000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_3_MODEM_MODE DT_NXP_IMX_UART_30880000_MODEM_MODE
#define DT_UART_IMX_UART_3_BAUD_RATE DT_NXP_IMX_UART_30880000_CURRENT_SPEED
#define DT_UART_IMX_UART_3_IRQ_NUM DT_NXP_IMX_UART_30880000_IRQ_0
#define DT_UART_IMX_UART_3_IRQ_PRI DT_NXP_IMX_UART_30880000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_3_MODEM_MODE DT_NXP_IMX_UART_30880000_MODEM_MODE
#define DT_UART_IMX_UART_4_NAME DT_NXP_IMX_UART_30A60000_LABEL
#define DT_UART_IMX_UART_4_NAME DT_NXP_IMX_UART_30A60000_LABEL
#define DT_UART_IMX_UART_4_BASE_ADDRESS DT_NXP_IMX_UART_30A60000_BASE_ADDRESS
#define DT_UART_IMX_UART_4_BAUD_RATE DT_NXP_IMX_UART_30A60000_CURRENT_SPEED
#define DT_UART_IMX_UART_4_IRQ_NUM DT_NXP_IMX_UART_30A60000_IRQ_0
#define DT_UART_IMX_UART_4_IRQ_PRI DT_NXP_IMX_UART_30A60000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_4_MODEM_MODE DT_NXP_IMX_UART_30A60000_MODEM_MODE
#define DT_UART_IMX_UART_4_BAUD_RATE DT_NXP_IMX_UART_30A60000_CURRENT_SPEED
#define DT_UART_IMX_UART_4_IRQ_NUM DT_NXP_IMX_UART_30A60000_IRQ_0
#define DT_UART_IMX_UART_4_IRQ_PRI DT_NXP_IMX_UART_30A60000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_4_MODEM_MODE DT_NXP_IMX_UART_30A60000_MODEM_MODE
#define DT_UART_IMX_UART_5_NAME DT_NXP_IMX_UART_30A70000_LABEL
#define DT_UART_IMX_UART_5_NAME DT_NXP_IMX_UART_30A70000_LABEL
#define DT_UART_IMX_UART_5_BASE_ADDRESS DT_NXP_IMX_UART_30A70000_BASE_ADDRESS
#define DT_UART_IMX_UART_5_BAUD_RATE DT_NXP_IMX_UART_30A70000_CURRENT_SPEED
#define DT_UART_IMX_UART_5_IRQ_NUM DT_NXP_IMX_UART_30A70000_IRQ_0
#define DT_UART_IMX_UART_5_IRQ_PRI DT_NXP_IMX_UART_30A70000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_5_MODEM_MODE DT_NXP_IMX_UART_30A70000_MODEM_MODE
#define DT_UART_IMX_UART_5_BAUD_RATE DT_NXP_IMX_UART_30A70000_CURRENT_SPEED
#define DT_UART_IMX_UART_5_IRQ_NUM DT_NXP_IMX_UART_30A70000_IRQ_0
#define DT_UART_IMX_UART_5_IRQ_PRI DT_NXP_IMX_UART_30A70000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_5_MODEM_MODE DT_NXP_IMX_UART_30A70000_MODEM_MODE
#define DT_UART_IMX_UART_6_NAME DT_NXP_IMX_UART_30A80000_LABEL
#define DT_UART_IMX_UART_6_NAME DT_NXP_IMX_UART_30A80000_LABEL
#define DT_UART_IMX_UART_6_BASE_ADDRESS DT_NXP_IMX_UART_30A80000_BASE_ADDRESS
#define DT_UART_IMX_UART_6_BAUD_RATE DT_NXP_IMX_UART_30A80000_CURRENT_SPEED
#define DT_UART_IMX_UART_6_IRQ_NUM DT_NXP_IMX_UART_30A80000_IRQ_0
#define DT_UART_IMX_UART_6_IRQ_PRI DT_NXP_IMX_UART_30A80000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_6_MODEM_MODE DT_NXP_IMX_UART_30A80000_MODEM_MODE
#define DT_UART_IMX_UART_6_BAUD_RATE DT_NXP_IMX_UART_30A80000_CURRENT_SPEED
#define DT_UART_IMX_UART_6_IRQ_NUM DT_NXP_IMX_UART_30A80000_IRQ_0
#define DT_UART_IMX_UART_6_IRQ_PRI DT_NXP_IMX_UART_30A80000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_6_MODEM_MODE DT_NXP_IMX_UART_30A80000_MODEM_MODE
#define DT_UART_IMX_UART_7_NAME DT_NXP_IMX_UART_30A90000_LABEL
#define DT_UART_IMX_UART_7_NAME DT_NXP_IMX_UART_30A90000_LABEL
#define DT_UART_IMX_UART_7_BASE_ADDRESS DT_NXP_IMX_UART_30A90000_BASE_ADDRESS
#define DT_UART_IMX_UART_7_BAUD_RATE DT_NXP_IMX_UART_30A90000_CURRENT_SPEED
#define DT_UART_IMX_UART_7_IRQ_NUM DT_NXP_IMX_UART_30A90000_IRQ_0
#define DT_UART_IMX_UART_7_IRQ_PRI DT_NXP_IMX_UART_30A90000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_7_MODEM_MODE DT_NXP_IMX_UART_30A90000_MODEM_MODE
#define DT_UART_IMX_UART_7_BAUD_RATE DT_NXP_IMX_UART_30A90000_CURRENT_SPEED
#define DT_UART_IMX_UART_7_IRQ_NUM DT_NXP_IMX_UART_30A90000_IRQ_0
#define DT_UART_IMX_UART_7_IRQ_PRI DT_NXP_IMX_UART_30A90000_IRQ_0_PRIORITY
#define DT_UART_IMX_UART_7_MODEM_MODE DT_NXP_IMX_UART_30A90000_MODEM_MODE
#define DT_IPM_IMX_MU_B_BASE_ADDRESS DT_NXP_IMX_MU_30AB0000_BASE_ADDRESS
#define DT_IPM_IMX_MU_B_IRQ DT_NXP_IMX_MU_30AB0000_IRQ_0
#define DT_IPM_IMX_MU_B_IRQ_PRI DT_NXP_IMX_MU_30AB0000_IRQ_0_PRIORITY
#define DT_IPM_IMX_MU_B_NAME DT_NXP_IMX_MU_30AB0000_LABEL
/* End of SoC Level DTS fixup file */

View file

@ -210,6 +210,17 @@ static void nxp_mcimx7_pwm_config(void)
}
#endif /* CONFIG_PWM_IMX */
#ifdef CONFIG_IPM_IMX
static void nxp_mcimx7_mu_config(void)
{
/* Set access to MU B for M4 core */
RDC_SetPdapAccess(RDC, rdcPdapMuB, MU_B_RDC, false, false);
/* Enable clock gate for MU*/
CCM_ControlGate(CCM, ccmCcgrGateMu, ccmClockNeededRun);
}
#endif /* CONFIG_IPM_IMX */
static int nxp_mcimx7_init(struct device *arg)
{
ARG_UNUSED(arg);
@ -236,6 +247,10 @@ static int nxp_mcimx7_init(struct device *arg)
nxp_mcimx7_pwm_config();
#endif /* CONFIG_PWM_IMX */
#ifdef CONFIG_IPM_IMX
nxp_mcimx7_mu_config();
#endif /* CONFIG_IPM_IMX */
return 0;
}