mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 18:35:42 +01:00 
			
		
		
		
	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:
		| @@ -600,7 +600,7 @@ void *dev_get_plat(const struct udevice *dev) | |||||||
| 		return NULL; | 		return NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return dev->plat_; | 	return dm_priv_to_rw(dev->plat_); | ||||||
| } | } | ||||||
|  |  | ||||||
| void *dev_get_parent_plat(const struct udevice *dev) | 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 NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return dev->parent_plat_; | 	return dm_priv_to_rw(dev->parent_plat_); | ||||||
| } | } | ||||||
|  |  | ||||||
| void *dev_get_uclass_plat(const struct udevice *dev) | 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 NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return dev->uclass_plat_; | 	return dm_priv_to_rw(dev->uclass_plat_); | ||||||
| } | } | ||||||
|  |  | ||||||
| void *dev_get_priv(const struct udevice *dev) | void *dev_get_priv(const struct udevice *dev) | ||||||
| @@ -630,7 +630,7 @@ void *dev_get_priv(const struct udevice *dev) | |||||||
| 		return NULL; | 		return NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return dev->priv_; | 	return dm_priv_to_rw(dev->priv_); | ||||||
| } | } | ||||||
|  |  | ||||||
| void *dev_get_uclass_priv(const struct udevice *dev) | 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 NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return dev->uclass_priv_; | 	return dm_priv_to_rw(dev->uclass_priv_); | ||||||
| } | } | ||||||
|  |  | ||||||
| void *dev_get_parent_priv(const struct udevice *dev) | 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 NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return dev->parent_priv_; | 	return dm_priv_to_rw(dev->parent_priv_); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int device_get_device_tail(struct udevice *dev, int ret, | 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; | 	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 |  * dm_scan() - Scan tables to bind devices | ||||||
|  * |  * | ||||||
|   | |||||||
| @@ -49,3 +49,12 @@ void dm_dump_driver_compat(void); | |||||||
| void dm_dump_static_driver_info(void); | void dm_dump_static_driver_info(void); | ||||||
|  |  | ||||||
| #endif | #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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user