aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Fan2018-12-15 06:19:52 -0600
committerStefano Babic2019-01-09 10:04:03 -0600
commit026381fc5a06cdc3e41a6bae83486be6cbaae0a9 (patch)
treef418d8d99ac88a13716cdcfdc43f7557c8e92538
parentecab65e4cdec0ee408ca1ac9d0b06d2793fdae91 (diff)
downloadu-boot-026381fc5a06cdc3e41a6bae83486be6cbaae0a9.tar.gz
u-boot-026381fc5a06cdc3e41a6bae83486be6cbaae0a9.tar.xz
u-boot-026381fc5a06cdc3e41a6bae83486be6cbaae0a9.zip
misc: imx8: scu: use platdata instead of priv data
priv data has not been allocated when doing bind, so it is wrong to use dev_get_priv in bind call back. Let's switch to use platdata in the driver to fix the issue. Signed-off-by: Peng Fan <peng.fan@nxp.com> Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r--drivers/misc/imx8/scu.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/misc/imx8/scu.c b/drivers/misc/imx8/scu.c
index b824ac79e6..15101b3e5f 100644
--- a/drivers/misc/imx8/scu.c
+++ b/drivers/misc/imx8/scu.c
@@ -158,7 +158,7 @@ static int sc_ipc_write(struct mu_type *base, void *data)
158static int imx8_scu_call(struct udevice *dev, int no_resp, void *tx_msg, 158static int imx8_scu_call(struct udevice *dev, int no_resp, void *tx_msg,
159 int tx_size, void *rx_msg, int rx_size) 159 int tx_size, void *rx_msg, int rx_size)
160{ 160{
161 struct imx8_scu *priv = dev_get_priv(dev); 161 struct imx8_scu *plat = dev_get_platdata(dev);
162 sc_err_t result; 162 sc_err_t result;
163 int ret; 163 int ret;
164 164
@@ -166,11 +166,11 @@ static int imx8_scu_call(struct udevice *dev, int no_resp, void *tx_msg,
166 if (rx_msg && tx_msg != rx_msg) 166 if (rx_msg && tx_msg != rx_msg)
167 printf("tx_msg %p, rx_msg %p\n", tx_msg, rx_msg); 167 printf("tx_msg %p, rx_msg %p\n", tx_msg, rx_msg);
168 168
169 ret = sc_ipc_write(priv->base, tx_msg); 169 ret = sc_ipc_write(plat->base, tx_msg);
170 if (ret) 170 if (ret)
171 return ret; 171 return ret;
172 if (!no_resp) { 172 if (!no_resp) {
173 ret = sc_ipc_read(priv->base, rx_msg); 173 ret = sc_ipc_read(plat->base, rx_msg);
174 if (ret) 174 if (ret)
175 return ret; 175 return ret;
176 } 176 }
@@ -182,24 +182,24 @@ static int imx8_scu_call(struct udevice *dev, int no_resp, void *tx_msg,
182 182
183static int imx8_scu_probe(struct udevice *dev) 183static int imx8_scu_probe(struct udevice *dev)
184{ 184{
185 struct imx8_scu *priv = dev_get_priv(dev); 185 struct imx8_scu *plat = dev_get_platdata(dev);
186 fdt_addr_t addr; 186 fdt_addr_t addr;
187 187
188 debug("%s(dev=%p) (priv=%p)\n", __func__, dev, priv); 188 debug("%s(dev=%p) (plat=%p)\n", __func__, dev, plat);
189 189
190 addr = devfdt_get_addr(dev); 190 addr = devfdt_get_addr(dev);
191 if (addr == FDT_ADDR_T_NONE) 191 if (addr == FDT_ADDR_T_NONE)
192 return -EINVAL; 192 return -EINVAL;
193 193
194 priv->base = (struct mu_type *)addr; 194 plat->base = (struct mu_type *)addr;
195 195
196 /* U-Boot not enable interrupts, so need to enable RX interrupts */ 196 /* U-Boot not enable interrupts, so need to enable RX interrupts */
197 mu_hal_init(priv->base); 197 mu_hal_init(plat->base);
198 198
199 gd->arch.scu_dev = dev; 199 gd->arch.scu_dev = dev;
200 200
201 device_probe(priv->clk); 201 device_probe(plat->clk);
202 device_probe(priv->pinclk); 202 device_probe(plat->pinclk);
203 203
204 return 0; 204 return 0;
205} 205}
@@ -211,7 +211,7 @@ static int imx8_scu_remove(struct udevice *dev)
211 211
212static int imx8_scu_bind(struct udevice *dev) 212static int imx8_scu_bind(struct udevice *dev)
213{ 213{
214 struct imx8_scu *priv = dev_get_priv(dev); 214 struct imx8_scu *plat = dev_get_platdata(dev);
215 int ret; 215 int ret;
216 struct udevice *child; 216 struct udevice *child;
217 int node; 217 int node;
@@ -227,7 +227,7 @@ static int imx8_scu_bind(struct udevice *dev)
227 if (ret) 227 if (ret)
228 return ret; 228 return ret;
229 229
230 priv->clk = child; 230 plat->clk = child;
231 231
232 node = fdt_node_offset_by_compatible(gd->fdt_blob, -1, 232 node = fdt_node_offset_by_compatible(gd->fdt_blob, -1,
233 "fsl,imx8qxp-iomuxc"); 233 "fsl,imx8qxp-iomuxc");
@@ -238,7 +238,7 @@ static int imx8_scu_bind(struct udevice *dev)
238 if (ret) 238 if (ret)
239 return ret; 239 return ret;
240 240
241 priv->pinclk = child; 241 plat->pinclk = child;
242 242
243 return 0; 243 return 0;
244} 244}
@@ -261,6 +261,6 @@ U_BOOT_DRIVER(imx8_scu) = {
261 .bind = imx8_scu_bind, 261 .bind = imx8_scu_bind,
262 .remove = imx8_scu_remove, 262 .remove = imx8_scu_remove,
263 .ops = &imx8_scu_ops, 263 .ops = &imx8_scu_ops,
264 .priv_auto_alloc_size = sizeof(struct imx8_scu), 264 .platdata_auto_alloc_size = sizeof(struct imx8_scu),
265 .flags = DM_FLAG_PRE_RELOC, 265 .flags = DM_FLAG_PRE_RELOC,
266}; 266};