|
@@ -74,16 +74,6 @@ out:
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int bcm283x_mu_serial_probe(struct udevice *dev)
|
|
|
-{
|
|
|
- struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
|
|
|
- struct bcm283x_mu_priv *priv = dev_get_priv(dev);
|
|
|
-
|
|
|
- priv->regs = (struct bcm283x_mu_regs *)plat->base;
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int bcm283x_mu_serial_getc(struct udevice *dev)
|
|
|
{
|
|
|
struct bcm283x_mu_priv *priv = dev_get_priv(dev);
|
|
@@ -165,15 +155,21 @@ static bool bcm283x_is_serial_muxed(void)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-static int bcm283x_mu_serial_ofdata_to_platdata(struct udevice *dev)
|
|
|
+static int bcm283x_mu_serial_probe(struct udevice *dev)
|
|
|
{
|
|
|
struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
|
|
|
+ struct bcm283x_mu_priv *priv = dev_get_priv(dev);
|
|
|
fdt_addr_t addr;
|
|
|
|
|
|
/* Don't spawn the device if it's not muxed */
|
|
|
if (!bcm283x_is_serial_muxed())
|
|
|
return -ENODEV;
|
|
|
|
|
|
+ /*
|
|
|
+ * Read the ofdata here rather than in an ofdata_to_platdata() method
|
|
|
+ * since we need the soc simple-bus to be probed so that the 'ranges'
|
|
|
+ * property is used.
|
|
|
+ */
|
|
|
addr = devfdt_get_addr(dev);
|
|
|
if (addr == FDT_ADDR_T_NONE)
|
|
|
return -EINVAL;
|
|
@@ -187,6 +183,8 @@ static int bcm283x_mu_serial_ofdata_to_platdata(struct udevice *dev)
|
|
|
*/
|
|
|
plat->skip_init = true;
|
|
|
|
|
|
+ priv->regs = (struct bcm283x_mu_regs *)plat->base;
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
#endif
|
|
@@ -195,7 +193,6 @@ U_BOOT_DRIVER(serial_bcm283x_mu) = {
|
|
|
.name = "serial_bcm283x_mu",
|
|
|
.id = UCLASS_SERIAL,
|
|
|
.of_match = of_match_ptr(bcm283x_mu_serial_id),
|
|
|
- .ofdata_to_platdata = of_match_ptr(bcm283x_mu_serial_ofdata_to_platdata),
|
|
|
.platdata_auto_alloc_size = sizeof(struct bcm283x_mu_serial_platdata),
|
|
|
.probe = bcm283x_mu_serial_probe,
|
|
|
.ops = &bcm283x_mu_serial_ops,
|