diff options
author | Marc Kleine-Budde <mkl@pengutronix.de> | 2012-06-21 14:04:25 -0400 |
---|---|---|
committer | Mike Turquette <mturquette@linaro.org> | 2012-06-25 19:51:48 -0400 |
commit | d03ac61daa8d4d17cd83a5ab98e85b616b90c7ac (patch) | |
tree | 80f412f46d6d37af196899f40877148ed4407aaa /drivers/clk | |
parent | d6dc55c1857ff1911780881b74537785d8a4e6e1 (diff) |
clk: mxs: fix clock lookup after freeing init memory
The struct clk_lookup are marked as __initdata, resulting in being
removed from memory after the kernel finished booting. However this
leads to a NULL pointer de-ref if loading a module which uses clk_get.
This patch removes the __initdata from the struct clk_lookup.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Mike Turquette <mturquette@linaro.org>
Diffstat (limited to 'drivers/clk')
-rw-r--r-- | drivers/clk/mxs/clk-imx23.c | 12 | ||||
-rw-r--r-- | drivers/clk/mxs/clk-imx28.c | 28 |
2 files changed, 20 insertions, 20 deletions
diff --git a/drivers/clk/mxs/clk-imx23.c b/drivers/clk/mxs/clk-imx23.c index f7be225f544c..db2391c054ee 100644 --- a/drivers/clk/mxs/clk-imx23.c +++ b/drivers/clk/mxs/clk-imx23.c | |||
@@ -71,7 +71,7 @@ static void __init clk_misc_init(void) | |||
71 | __mxs_setl(30 << BP_FRAC_IOFRAC, FRAC); | 71 | __mxs_setl(30 << BP_FRAC_IOFRAC, FRAC); |
72 | } | 72 | } |
73 | 73 | ||
74 | static struct clk_lookup uart_lookups[] __initdata = { | 74 | static struct clk_lookup uart_lookups[] = { |
75 | { .dev_id = "duart", }, | 75 | { .dev_id = "duart", }, |
76 | { .dev_id = "mxs-auart.0", }, | 76 | { .dev_id = "mxs-auart.0", }, |
77 | { .dev_id = "mxs-auart.1", }, | 77 | { .dev_id = "mxs-auart.1", }, |
@@ -80,31 +80,31 @@ static struct clk_lookup uart_lookups[] __initdata = { | |||
80 | { .dev_id = "80070000.serial", }, | 80 | { .dev_id = "80070000.serial", }, |
81 | }; | 81 | }; |
82 | 82 | ||
83 | static struct clk_lookup hbus_lookups[] __initdata = { | 83 | static struct clk_lookup hbus_lookups[] = { |
84 | { .dev_id = "imx23-dma-apbh", }, | 84 | { .dev_id = "imx23-dma-apbh", }, |
85 | { .dev_id = "80004000.dma-apbh", }, | 85 | { .dev_id = "80004000.dma-apbh", }, |
86 | }; | 86 | }; |
87 | 87 | ||
88 | static struct clk_lookup xbus_lookups[] __initdata = { | 88 | static struct clk_lookup xbus_lookups[] = { |
89 | { .dev_id = "duart", .con_id = "apb_pclk"}, | 89 | { .dev_id = "duart", .con_id = "apb_pclk"}, |
90 | { .dev_id = "80070000.serial", .con_id = "apb_pclk"}, | 90 | { .dev_id = "80070000.serial", .con_id = "apb_pclk"}, |
91 | { .dev_id = "imx23-dma-apbx", }, | 91 | { .dev_id = "imx23-dma-apbx", }, |
92 | { .dev_id = "80024000.dma-apbx", }, | 92 | { .dev_id = "80024000.dma-apbx", }, |
93 | }; | 93 | }; |
94 | 94 | ||
95 | static struct clk_lookup ssp_lookups[] __initdata = { | 95 | static struct clk_lookup ssp_lookups[] = { |
96 | { .dev_id = "imx23-mmc.0", }, | 96 | { .dev_id = "imx23-mmc.0", }, |
97 | { .dev_id = "imx23-mmc.1", }, | 97 | { .dev_id = "imx23-mmc.1", }, |
98 | { .dev_id = "80010000.ssp", }, | 98 | { .dev_id = "80010000.ssp", }, |
99 | { .dev_id = "80034000.ssp", }, | 99 | { .dev_id = "80034000.ssp", }, |
100 | }; | 100 | }; |
101 | 101 | ||
102 | static struct clk_lookup lcdif_lookups[] __initdata = { | 102 | static struct clk_lookup lcdif_lookups[] = { |
103 | { .dev_id = "imx23-fb", }, | 103 | { .dev_id = "imx23-fb", }, |
104 | { .dev_id = "80030000.lcdif", }, | 104 | { .dev_id = "80030000.lcdif", }, |
105 | }; | 105 | }; |
106 | 106 | ||
107 | static struct clk_lookup gpmi_lookups[] __initdata = { | 107 | static struct clk_lookup gpmi_lookups[] = { |
108 | { .dev_id = "imx23-gpmi-nand", }, | 108 | { .dev_id = "imx23-gpmi-nand", }, |
109 | { .dev_id = "8000c000.gpmi", }, | 109 | { .dev_id = "8000c000.gpmi", }, |
110 | }; | 110 | }; |
diff --git a/drivers/clk/mxs/clk-imx28.c b/drivers/clk/mxs/clk-imx28.c index 17e85a1f28ab..7fad6c8c13d2 100644 --- a/drivers/clk/mxs/clk-imx28.c +++ b/drivers/clk/mxs/clk-imx28.c | |||
@@ -120,7 +120,7 @@ static void __init clk_misc_init(void) | |||
120 | writel_relaxed(val, FRAC0); | 120 | writel_relaxed(val, FRAC0); |
121 | } | 121 | } |
122 | 122 | ||
123 | static struct clk_lookup uart_lookups[] __initdata = { | 123 | static struct clk_lookup uart_lookups[] = { |
124 | { .dev_id = "duart", }, | 124 | { .dev_id = "duart", }, |
125 | { .dev_id = "mxs-auart.0", }, | 125 | { .dev_id = "mxs-auart.0", }, |
126 | { .dev_id = "mxs-auart.1", }, | 126 | { .dev_id = "mxs-auart.1", }, |
@@ -135,71 +135,71 @@ static struct clk_lookup uart_lookups[] __initdata = { | |||
135 | { .dev_id = "80074000.serial", }, | 135 | { .dev_id = "80074000.serial", }, |
136 | }; | 136 | }; |
137 | 137 | ||
138 | static struct clk_lookup hbus_lookups[] __initdata = { | 138 | static struct clk_lookup hbus_lookups[] = { |
139 | { .dev_id = "imx28-dma-apbh", }, | 139 | { .dev_id = "imx28-dma-apbh", }, |
140 | { .dev_id = "80004000.dma-apbh", }, | 140 | { .dev_id = "80004000.dma-apbh", }, |
141 | }; | 141 | }; |
142 | 142 | ||
143 | static struct clk_lookup xbus_lookups[] __initdata = { | 143 | static struct clk_lookup xbus_lookups[] = { |
144 | { .dev_id = "duart", .con_id = "apb_pclk"}, | 144 | { .dev_id = "duart", .con_id = "apb_pclk"}, |
145 | { .dev_id = "80074000.serial", .con_id = "apb_pclk"}, | 145 | { .dev_id = "80074000.serial", .con_id = "apb_pclk"}, |
146 | { .dev_id = "imx28-dma-apbx", }, | 146 | { .dev_id = "imx28-dma-apbx", }, |
147 | { .dev_id = "80024000.dma-apbx", }, | 147 | { .dev_id = "80024000.dma-apbx", }, |
148 | }; | 148 | }; |
149 | 149 | ||
150 | static struct clk_lookup ssp0_lookups[] __initdata = { | 150 | static struct clk_lookup ssp0_lookups[] = { |
151 | { .dev_id = "imx28-mmc.0", }, | 151 | { .dev_id = "imx28-mmc.0", }, |
152 | { .dev_id = "80010000.ssp", }, | 152 | { .dev_id = "80010000.ssp", }, |
153 | }; | 153 | }; |
154 | 154 | ||
155 | static struct clk_lookup ssp1_lookups[] __initdata = { | 155 | static struct clk_lookup ssp1_lookups[] = { |
156 | { .dev_id = "imx28-mmc.1", }, | 156 | { .dev_id = "imx28-mmc.1", }, |
157 | { .dev_id = "80012000.ssp", }, | 157 | { .dev_id = "80012000.ssp", }, |
158 | }; | 158 | }; |
159 | 159 | ||
160 | static struct clk_lookup ssp2_lookups[] __initdata = { | 160 | static struct clk_lookup ssp2_lookups[] = { |
161 | { .dev_id = "imx28-mmc.2", }, | 161 | { .dev_id = "imx28-mmc.2", }, |
162 | { .dev_id = "80014000.ssp", }, | 162 | { .dev_id = "80014000.ssp", }, |
163 | }; | 163 | }; |
164 | 164 | ||
165 | static struct clk_lookup ssp3_lookups[] __initdata = { | 165 | static struct clk_lookup ssp3_lookups[] = { |
166 | { .dev_id = "imx28-mmc.3", }, | 166 | { .dev_id = "imx28-mmc.3", }, |
167 | { .dev_id = "80016000.ssp", }, | 167 | { .dev_id = "80016000.ssp", }, |
168 | }; | 168 | }; |
169 | 169 | ||
170 | static struct clk_lookup lcdif_lookups[] __initdata = { | 170 | static struct clk_lookup lcdif_lookups[] = { |
171 | { .dev_id = "imx28-fb", }, | 171 | { .dev_id = "imx28-fb", }, |
172 | { .dev_id = "80030000.lcdif", }, | 172 | { .dev_id = "80030000.lcdif", }, |
173 | }; | 173 | }; |
174 | 174 | ||
175 | static struct clk_lookup gpmi_lookups[] __initdata = { | 175 | static struct clk_lookup gpmi_lookups[] = { |
176 | { .dev_id = "imx28-gpmi-nand", }, | 176 | { .dev_id = "imx28-gpmi-nand", }, |
177 | { .dev_id = "8000c000.gpmi", }, | 177 | { .dev_id = "8000c000.gpmi", }, |
178 | }; | 178 | }; |
179 | 179 | ||
180 | static struct clk_lookup fec_lookups[] __initdata = { | 180 | static struct clk_lookup fec_lookups[] = { |
181 | { .dev_id = "imx28-fec.0", }, | 181 | { .dev_id = "imx28-fec.0", }, |
182 | { .dev_id = "imx28-fec.1", }, | 182 | { .dev_id = "imx28-fec.1", }, |
183 | { .dev_id = "800f0000.ethernet", }, | 183 | { .dev_id = "800f0000.ethernet", }, |
184 | { .dev_id = "800f4000.ethernet", }, | 184 | { .dev_id = "800f4000.ethernet", }, |
185 | }; | 185 | }; |
186 | 186 | ||
187 | static struct clk_lookup can0_lookups[] __initdata = { | 187 | static struct clk_lookup can0_lookups[] = { |
188 | { .dev_id = "flexcan.0", }, | 188 | { .dev_id = "flexcan.0", }, |
189 | { .dev_id = "80032000.can", }, | 189 | { .dev_id = "80032000.can", }, |
190 | }; | 190 | }; |
191 | 191 | ||
192 | static struct clk_lookup can1_lookups[] __initdata = { | 192 | static struct clk_lookup can1_lookups[] = { |
193 | { .dev_id = "flexcan.1", }, | 193 | { .dev_id = "flexcan.1", }, |
194 | { .dev_id = "80034000.can", }, | 194 | { .dev_id = "80034000.can", }, |
195 | }; | 195 | }; |
196 | 196 | ||
197 | static struct clk_lookup saif0_lookups[] __initdata = { | 197 | static struct clk_lookup saif0_lookups[] = { |
198 | { .dev_id = "mxs-saif.0", }, | 198 | { .dev_id = "mxs-saif.0", }, |
199 | { .dev_id = "80042000.saif", }, | 199 | { .dev_id = "80042000.saif", }, |
200 | }; | 200 | }; |
201 | 201 | ||
202 | static struct clk_lookup saif1_lookups[] __initdata = { | 202 | static struct clk_lookup saif1_lookups[] = { |
203 | { .dev_id = "mxs-saif.1", }, | 203 | { .dev_id = "mxs-saif.1", }, |
204 | { .dev_id = "80046000.saif", }, | 204 | { .dev_id = "80046000.saif", }, |
205 | }; | 205 | }; |