dm: core: Add a new flag to track platform data
We want to avoid allocating platform data twice. This could happen if device_probe() is called after device_ofdata_to_platdata() for the same device. Add a flag to track whether device_ofdata_to_platdata() has been called on a device. Check the flag to make sure it doesn't happen twice, and clear the flag when the data is freed. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
bcd90cb692
commit
153851ddfa
@ -140,6 +140,7 @@ void device_free(struct udevice *dev)
|
||||
dev->parent_priv = NULL;
|
||||
}
|
||||
}
|
||||
dev->flags &= ~DM_FLAG_PLATDATA_VALID;
|
||||
|
||||
devres_release_probe(dev);
|
||||
}
|
||||
|
@ -320,7 +320,7 @@ int device_ofdata_to_platdata(struct udevice *dev)
|
||||
if (!dev)
|
||||
return -EINVAL;
|
||||
|
||||
if (dev->flags & DM_FLAG_ACTIVATED)
|
||||
if (dev->flags & DM_FLAG_PLATDATA_VALID)
|
||||
return 0;
|
||||
|
||||
drv = dev->driver;
|
||||
@ -368,6 +368,8 @@ int device_ofdata_to_platdata(struct udevice *dev)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
dev->flags |= DM_FLAG_PLATDATA_VALID;
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
device_free(dev);
|
||||
|
@ -65,6 +65,9 @@ struct driver_info;
|
||||
/* DM does not enable/disable the power domains corresponding to this device */
|
||||
#define DM_FLAG_DEFAULT_PD_CTRL_OFF (1 << 11)
|
||||
|
||||
/* Driver platdata has been read. Cleared when the device is removed */
|
||||
#define DM_FLAG_PLATDATA_VALID (1 << 12)
|
||||
|
||||
/*
|
||||
* One or multiple of these flags are passed to device_remove() so that
|
||||
* a selective device removal as specified by the remove-stage and the
|
||||
|
Loading…
Reference in New Issue
Block a user