aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAisheng Dong <aisheng.dong@nxp.com>2019-02-20 09:38:32 -0500
committerShawn Guo <shawnguo@kernel.org>2019-03-19 09:57:50 -0400
commitad8cc071c557b075b923bf27aee8a7dae7338f5e (patch)
tree303b279a0b3e002756fa5505c2371305cfedcdff
parent9d616d62faefd573f6eaf687f6c83a872708afcf (diff)
firmware: imx: scu-pd: add specifying the base of domain name index support
As the domain resource id in the same type may not be continuous, so it's hard to describe all such power domains with current struct imx_sc_pd_range. Adding the optional base for domain name index to address this issue. Then we can add the discrete domains easily later. Cc: Ulf Hansson <ulf.hansson@linaro.org> Cc: Shawn Guo <shawnguo@kernel.org> Cc: Sascha Hauer <kernel@pengutronix.de> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> Cc: Kevin Hilman <khilman@kernel.org> Cc: linux-pm@vger.kernel.org Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> Signed-off-by: Shawn Guo <shawnguo@kernel.org>
-rw-r--r--drivers/firmware/imx/scu-pd.c107
1 files changed, 55 insertions, 52 deletions
diff --git a/drivers/firmware/imx/scu-pd.c b/drivers/firmware/imx/scu-pd.c
index e7802ec591c2..8a2b6ada58ad 100644
--- a/drivers/firmware/imx/scu-pd.c
+++ b/drivers/firmware/imx/scu-pd.c
@@ -74,7 +74,10 @@ struct imx_sc_pd_range {
74 char *name; 74 char *name;
75 u32 rsrc; 75 u32 rsrc;
76 u8 num; 76 u8 num;
77
78 /* add domain index */
77 bool postfix; 79 bool postfix;
80 u8 start_from;
78}; 81};
79 82
80struct imx_sc_pd_soc { 83struct imx_sc_pd_soc {
@@ -84,71 +87,71 @@ struct imx_sc_pd_soc {
84 87
85static const struct imx_sc_pd_range imx8qxp_scu_pd_ranges[] = { 88static const struct imx_sc_pd_range imx8qxp_scu_pd_ranges[] = {
86 /* LSIO SS */ 89 /* LSIO SS */
87 { "lsio-pwm", IMX_SC_R_PWM_0, 8, true }, 90 { "lsio-pwm", IMX_SC_R_PWM_0, 8, true, 0 },
88 { "lsio-gpio", IMX_SC_R_GPIO_0, 8, true }, 91 { "lsio-gpio", IMX_SC_R_GPIO_0, 8, true, 0 },
89 { "lsio-gpt", IMX_SC_R_GPT_0, 5, true }, 92 { "lsio-gpt", IMX_SC_R_GPT_0, 5, true, 0 },
90 { "lsio-kpp", IMX_SC_R_KPP, 1, false }, 93 { "lsio-kpp", IMX_SC_R_KPP, 1, false, 0 },
91 { "lsio-fspi", IMX_SC_R_FSPI_0, 2, true }, 94 { "lsio-fspi", IMX_SC_R_FSPI_0, 2, true, 0 },
92 { "lsio-mu", IMX_SC_R_MU_0A, 14, true }, 95 { "lsio-mu", IMX_SC_R_MU_0A, 14, true, 0 },
93 96
94 /* CONN SS */ 97 /* CONN SS */
95 { "con-usb", IMX_SC_R_USB_0, 2, true }, 98 { "con-usb", IMX_SC_R_USB_0, 2, true, 0 },
96 { "con-usb0phy", IMX_SC_R_USB_0_PHY, 1, false }, 99 { "con-usb0phy", IMX_SC_R_USB_0_PHY, 1, false, 0 },
97 { "con-usb2", IMX_SC_R_USB_2, 1, false }, 100 { "con-usb2", IMX_SC_R_USB_2, 1, false, 0 },
98 { "con-usb2phy", IMX_SC_R_USB_2_PHY, 1, false }, 101 { "con-usb2phy", IMX_SC_R_USB_2_PHY, 1, false, 0 },
99 { "con-sdhc", IMX_SC_R_SDHC_0, 3, true }, 102 { "con-sdhc", IMX_SC_R_SDHC_0, 3, true, 0 },
100 { "con-enet", IMX_SC_R_ENET_0, 2, true }, 103 { "con-enet", IMX_SC_R_ENET_0, 2, true, 0 },
101 { "con-nand", IMX_SC_R_NAND, 1, false }, 104 { "con-nand", IMX_SC_R_NAND, 1, false, 0 },
102 { "con-mlb", IMX_SC_R_MLB_0, 1, true }, 105 { "con-mlb", IMX_SC_R_MLB_0, 1, true, 0 },
103 106
104 /* Audio DMA SS */ 107 /* Audio DMA SS */
105 { "adma-audio-pll0", IMX_SC_R_AUDIO_PLL_0, 1, false }, 108 { "adma-audio-pll0", IMX_SC_R_AUDIO_PLL_0, 1, false, 0 },
106 { "adma-audio-pll1", IMX_SC_R_AUDIO_PLL_1, 1, false }, 109 { "adma-audio-pll1", IMX_SC_R_AUDIO_PLL_1, 1, false, 0 },
107 { "adma-audio-clk-0", IMX_SC_R_AUDIO_CLK_0, 1, false }, 110 { "adma-audio-clk-0", IMX_SC_R_AUDIO_CLK_0, 1, false, 0 },
108 { "adma-dma0-ch", IMX_SC_R_DMA_0_CH0, 16, true }, 111 { "adma-dma0-ch", IMX_SC_R_DMA_0_CH0, 16, true, 0 },
109 { "adma-dma1-ch", IMX_SC_R_DMA_1_CH0, 16, true }, 112 { "adma-dma1-ch", IMX_SC_R_DMA_1_CH0, 16, true, 0 },
110 { "adma-dma2-ch", IMX_SC_R_DMA_2_CH0, 5, true }, 113 { "adma-dma2-ch", IMX_SC_R_DMA_2_CH0, 5, true, 0 },
111 { "adma-asrc0", IMX_SC_R_ASRC_0, 1, false }, 114 { "adma-asrc0", IMX_SC_R_ASRC_0, 1, false, 0 },
112 { "adma-asrc1", IMX_SC_R_ASRC_1, 1, false }, 115 { "adma-asrc1", IMX_SC_R_ASRC_1, 1, false, 0 },
113 { "adma-esai0", IMX_SC_R_ESAI_0, 1, false }, 116 { "adma-esai0", IMX_SC_R_ESAI_0, 1, false, 0 },
114 { "adma-spdif0", IMX_SC_R_SPDIF_0, 1, false }, 117 { "adma-spdif0", IMX_SC_R_SPDIF_0, 1, false, 0 },
115 { "adma-sai", IMX_SC_R_SAI_0, 3, true }, 118 { "adma-sai", IMX_SC_R_SAI_0, 3, true, 0 },
116 { "adma-amix", IMX_SC_R_AMIX, 1, false }, 119 { "adma-amix", IMX_SC_R_AMIX, 1, false, 0 },
117 { "adma-mqs0", IMX_SC_R_MQS_0, 1, false }, 120 { "adma-mqs0", IMX_SC_R_MQS_0, 1, false, 0 },
118 { "adma-dsp", IMX_SC_R_DSP, 1, false }, 121 { "adma-dsp", IMX_SC_R_DSP, 1, false, 0 },
119 { "adma-dsp-ram", IMX_SC_R_DSP_RAM, 1, false }, 122 { "adma-dsp-ram", IMX_SC_R_DSP_RAM, 1, false, 0 },
120 { "adma-can", IMX_SC_R_CAN_0, 3, true }, 123 { "adma-can", IMX_SC_R_CAN_0, 3, true, 0 },
121 { "adma-ftm", IMX_SC_R_FTM_0, 2, true }, 124 { "adma-ftm", IMX_SC_R_FTM_0, 2, true, 0 },
122 { "adma-lpi2c", IMX_SC_R_I2C_0, 4, true }, 125 { "adma-lpi2c", IMX_SC_R_I2C_0, 4, true, 0 },
123 { "adma-adc", IMX_SC_R_ADC_0, 1, true }, 126 { "adma-adc", IMX_SC_R_ADC_0, 1, true, 0 },
124 { "adma-lcd", IMX_SC_R_LCD_0, 1, true }, 127 { "adma-lcd", IMX_SC_R_LCD_0, 1, true, 0 },
125 { "adma-lcd0-pwm", IMX_SC_R_LCD_0_PWM_0, 1, true }, 128 { "adma-lcd0-pwm", IMX_SC_R_LCD_0_PWM_0, 1, true, 0 },
126 { "adma-lpuart", IMX_SC_R_UART_0, 4, true }, 129 { "adma-lpuart", IMX_SC_R_UART_0, 4, true, 0 },
127 { "adma-lpspi", IMX_SC_R_SPI_0, 4, true }, 130 { "adma-lpspi", IMX_SC_R_SPI_0, 4, true, 0 },
128 131
129 /* VPU SS */ 132 /* VPU SS */
130 { "vpu", IMX_SC_R_VPU, 1, false }, 133 { "vpu", IMX_SC_R_VPU, 1, false, 0 },
131 { "vpu-pid", IMX_SC_R_VPU_PID0, 8, true }, 134 { "vpu-pid", IMX_SC_R_VPU_PID0, 8, true, 0 },
132 { "vpu-dec0", IMX_SC_R_VPU_DEC_0, 1, false }, 135 { "vpu-dec0", IMX_SC_R_VPU_DEC_0, 1, false, 0 },
133 { "vpu-enc0", IMX_SC_R_VPU_ENC_0, 1, false }, 136 { "vpu-enc0", IMX_SC_R_VPU_ENC_0, 1, false, 0 },
134 137
135 /* GPU SS */ 138 /* GPU SS */
136 { "gpu0-pid", IMX_SC_R_GPU_0_PID0, 4, true }, 139 { "gpu0-pid", IMX_SC_R_GPU_0_PID0, 4, true, 0 },
137 140
138 /* HSIO SS */ 141 /* HSIO SS */
139 { "hsio-pcie-b", IMX_SC_R_PCIE_B, 1, false }, 142 { "hsio-pcie-b", IMX_SC_R_PCIE_B, 1, false, 0 },
140 { "hsio-serdes-1", IMX_SC_R_SERDES_1, 1, false }, 143 { "hsio-serdes-1", IMX_SC_R_SERDES_1, 1, false, 0 },
141 { "hsio-gpio", IMX_SC_R_HSIO_GPIO, 1, false }, 144 { "hsio-gpio", IMX_SC_R_HSIO_GPIO, 1, false, 0 },
142 145
143 /* MIPI/LVDS SS */ 146 /* MIPI/LVDS SS */
144 { "mipi0", IMX_SC_R_MIPI_0, 1, false }, 147 { "mipi0", IMX_SC_R_MIPI_0, 1, false, 0 },
145 { "mipi0-pwm0", IMX_SC_R_MIPI_0_PWM_0, 1, false }, 148 { "mipi0-pwm0", IMX_SC_R_MIPI_0_PWM_0, 1, false, 0 },
146 { "mipi0-i2c", IMX_SC_R_MIPI_0_I2C_0, 2, true }, 149 { "mipi0-i2c", IMX_SC_R_MIPI_0_I2C_0, 2, true, 0 },
147 { "lvds0", IMX_SC_R_LVDS_0, 1, false }, 150 { "lvds0", IMX_SC_R_LVDS_0, 1, false, 0 },
148 151
149 /* DC SS */ 152 /* DC SS */
150 { "dc0", IMX_SC_R_DC_0, 1, false }, 153 { "dc0", IMX_SC_R_DC_0, 1, false, 0 },
151 { "dc0-pll", IMX_SC_R_DC_0_PLL_0, 2, true }, 154 { "dc0-pll", IMX_SC_R_DC_0_PLL_0, 2, true, 0 },
152}; 155};
153 156
154static const struct imx_sc_pd_soc imx8qxp_scu_pd = { 157static const struct imx_sc_pd_soc imx8qxp_scu_pd = {
@@ -236,7 +239,7 @@ imx_scu_add_pm_domain(struct device *dev, int idx,
236 239
237 if (pd_ranges->postfix) 240 if (pd_ranges->postfix)
238 snprintf(sc_pd->name, sizeof(sc_pd->name), 241 snprintf(sc_pd->name, sizeof(sc_pd->name),
239 "%s%i", pd_ranges->name, idx); 242 "%s%i", pd_ranges->name, pd_ranges->start_from + idx);
240 else 243 else
241 snprintf(sc_pd->name, sizeof(sc_pd->name), 244 snprintf(sc_pd->name, sizeof(sc_pd->name),
242 "%s", pd_ranges->name); 245 "%s", pd_ranges->name);