dm: core: Move flags to device-runtime info

When of-platdata-inst is active, use the flags in the new udevice_rt
table, dropping them from the main struct udevice. This ensures that the
latter is not updated at runtime.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2021-03-15 17:25:37 +13:00
parent ab933d8026
commit 6f644efdd8
2 changed files with 41 additions and 0 deletions

View file

@ -1136,3 +1136,36 @@ int dev_enable_by_path(const char *path)
return lists_bind_fdt(parent, node, NULL, false);
}
#endif
#if CONFIG_IS_ENABLED(OF_PLATDATA_RT)
static struct udevice_rt *dev_get_rt(const struct udevice *dev)
{
struct udevice *base = ll_entry_start(struct udevice, udevice);
int idx = dev - base;
struct udevice_rt *urt = gd_dm_udevice_rt() + idx;
return urt;
}
u32 dev_get_flags(const struct udevice *dev)
{
const struct udevice_rt *urt = dev_get_rt(dev);
return urt->flags_;
}
void dev_or_flags(const struct udevice *dev, u32 or)
{
struct udevice_rt *urt = dev_get_rt(dev);
urt->flags_ |= or;
}
void dev_bic_flags(const struct udevice *dev, u32 bic)
{
struct udevice_rt *urt = dev_get_rt(dev);
urt->flags_ &= ~bic;
}
#endif /* OF_PLATDATA_RT */

View file

@ -177,7 +177,9 @@ struct udevice {
struct list_head uclass_node;
struct list_head child_head;
struct list_head sibling_node;
#if !CONFIG_IS_ENABLED(OF_PLATDATA_RT)
u32 flags_;
#endif
int seq_;
#if !CONFIG_IS_ENABLED(OF_PLATDATA)
ofnode node_;
@ -211,6 +213,11 @@ struct udevice_rt {
/* Returns the operations for a device */
#define device_get_ops(dev) (dev->driver->ops)
#if CONFIG_IS_ENABLED(OF_PLATDATA_RT)
u32 dev_get_flags(const struct udevice *dev);
void dev_or_flags(const struct udevice *dev, u32 or);
void dev_bic_flags(const struct udevice *dev, u32 bic);
#else
static inline u32 dev_get_flags(const struct udevice *dev)
{
return dev->flags_;
@ -225,6 +232,7 @@ static inline void dev_bic_flags(struct udevice *dev, u32 bic)
{
dev->flags_ &= ~bic;
}
#endif /* OF_PLATDATA_RT */
/**
* dev_ofnode() - get the DT node reference associated with a udevice