dm: core: Use separate priv/plat data region
Make use of the new priv/plat data region if enabled. This is implemented as a simple offset from the position set up by dtoc to the new position. So long as all access goes through dm_priv_to_rw() this is safe. Signed-off-by: Simon Glass <sjg@chromium.org> Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
d5cc19288e
commit
cfb9c9b77c
@ -600,7 +600,7 @@ void *dev_get_plat(const struct udevice *dev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dev->plat_;
|
||||
return dm_priv_to_rw(dev->plat_);
|
||||
}
|
||||
|
||||
void *dev_get_parent_plat(const struct udevice *dev)
|
||||
@ -610,7 +610,7 @@ void *dev_get_parent_plat(const struct udevice *dev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dev->parent_plat_;
|
||||
return dm_priv_to_rw(dev->parent_plat_);
|
||||
}
|
||||
|
||||
void *dev_get_uclass_plat(const struct udevice *dev)
|
||||
@ -620,7 +620,7 @@ void *dev_get_uclass_plat(const struct udevice *dev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dev->uclass_plat_;
|
||||
return dm_priv_to_rw(dev->uclass_plat_);
|
||||
}
|
||||
|
||||
void *dev_get_priv(const struct udevice *dev)
|
||||
@ -630,7 +630,7 @@ void *dev_get_priv(const struct udevice *dev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dev->priv_;
|
||||
return dm_priv_to_rw(dev->priv_);
|
||||
}
|
||||
|
||||
void *dev_get_uclass_priv(const struct udevice *dev)
|
||||
@ -640,7 +640,7 @@ void *dev_get_uclass_priv(const struct udevice *dev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dev->uclass_priv_;
|
||||
return dm_priv_to_rw(dev->uclass_priv_);
|
||||
}
|
||||
|
||||
void *dev_get_parent_priv(const struct udevice *dev)
|
||||
@ -650,7 +650,7 @@ void *dev_get_parent_priv(const struct udevice *dev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dev->parent_priv_;
|
||||
return dm_priv_to_rw(dev->parent_priv_);
|
||||
}
|
||||
|
||||
static int device_get_device_tail(struct udevice *dev, int ret,
|
||||
|
@ -347,6 +347,15 @@ __weak int dm_scan_other(bool pre_reloc_only)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if CONFIG_IS_ENABLED(OF_PLATDATA_INST) && CONFIG_IS_ENABLED(READ_ONLY)
|
||||
void *dm_priv_to_rw(void *priv)
|
||||
{
|
||||
long offset = priv - (void *)__priv_data_start;
|
||||
|
||||
return gd_dm_priv_base() + offset;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* dm_scan() - Scan tables to bind devices
|
||||
*
|
||||
|
@ -49,3 +49,12 @@ void dm_dump_driver_compat(void);
|
||||
void dm_dump_static_driver_info(void);
|
||||
|
||||
#endif
|
||||
|
||||
#if CONFIG_IS_ENABLED(OF_PLATDATA_INST) && CONFIG_IS_ENABLED(READ_ONLY)
|
||||
void *dm_priv_to_rw(void *priv);
|
||||
#else
|
||||
static inline void *dm_priv_to_rw(void *priv)
|
||||
{
|
||||
return priv;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user