mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-31 08:21:36 +01:00 
			
		
		
		
	Move this out of the common header and include it only where needed. In a number of cases this requires adding "struct udevice;" to avoid adding another large header or in other cases replacing / adding missing header files that had been pulled in, very indirectly. Finally, we have a few cases where we did not need to include <asm/global_data.h> at all, so remove that include. Signed-off-by: Simon Glass <sjg@chromium.org> Signed-off-by: Tom Rini <trini@konsulko.com>
		
			
				
	
	
		
			148 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0+ */
 | |
| /*
 | |
|  * (C) Copyright 2020 - Texas Instruments Incorporated - http://www.ti.com/
 | |
|  *	Dave Gerlach <d-gerlach@ti.com>
 | |
|  */
 | |
| 
 | |
| #ifndef __SOC_H
 | |
| #define __SOC_H
 | |
| 
 | |
| #define SOC_MAX_STR_SIZE	128
 | |
| 
 | |
| struct udevice;
 | |
| 
 | |
| /**
 | |
|  * struct soc_attr - Contains SoC identify information to be used in
 | |
|  *		     SoC matching. An array of these structs
 | |
|  *		     representing different SoCs can be passed to
 | |
|  *		     soc_device_match and the struct matching the SoC
 | |
|  *		     in use will be returned.
 | |
|  *
 | |
|  * @family   - Name of SoC family that can include multiple related SoC
 | |
|  *	       variants. Example: am33
 | |
|  * @machine  - Name of a specific SoC. Example: am3352
 | |
|  * @revision - Name of a specific SoC revision. Example: SR1.1
 | |
|  * @data     - A pointer to user data for the SoC variant
 | |
|  */
 | |
| struct soc_attr {
 | |
| 	const char *family;
 | |
| 	const char *machine;
 | |
| 	const char *revision;
 | |
| 	const void *data;
 | |
| };
 | |
| 
 | |
| struct soc_ops {
 | |
| 	/**
 | |
| 	 * get_machine() - Get machine name of an SOC
 | |
| 	 *
 | |
| 	 * @dev:	Device to check (UCLASS_SOC)
 | |
| 	 * @buf:	Buffer to place string
 | |
| 	 * @size:	Size of string space
 | |
| 	 * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
| 	 */
 | |
| 	int (*get_machine)(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| 	/**
 | |
| 	 * get_revision() - Get revision name of a SOC
 | |
| 	 *
 | |
| 	 * @dev:	Device to check (UCLASS_SOC)
 | |
| 	 * @buf:	Buffer to place string
 | |
| 	 * @size:	Size of string space
 | |
| 	 * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
| 	 */
 | |
| 	int (*get_revision)(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| 	/**
 | |
| 	 * get_family() - Get family name of an SOC
 | |
| 	 *
 | |
| 	 * @dev:	Device to check (UCLASS_SOC)
 | |
| 	 * @buf:	Buffer to place string
 | |
| 	 * @size:	Size of string space
 | |
| 	 * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
| 	 */
 | |
| 	int (*get_family)(struct udevice *dev, char *buf, int size);
 | |
| };
 | |
| 
 | |
| #define soc_get_ops(dev)        ((struct soc_ops *)(dev)->driver->ops)
 | |
| 
 | |
| #ifdef CONFIG_SOC_DEVICE
 | |
| /**
 | |
|  * soc_get() - Return the soc device for the soc in use.
 | |
|  * @devp: Pointer to structure to receive the soc device.
 | |
|  *
 | |
|  * Since there can only be at most one SOC instance, the API can supply a
 | |
|  * function that returns the unique device.
 | |
|  *
 | |
|  * Return: 0 if OK, -ve on error.
 | |
|  */
 | |
| int soc_get(struct udevice **devp);
 | |
| 
 | |
| /**
 | |
|  * soc_get_machine() - Get machine name of an SOC
 | |
|  * @dev:	Device to check (UCLASS_SOC)
 | |
|  * @buf:	Buffer to place string
 | |
|  * @size:	Size of string space
 | |
|  *
 | |
|  * Return: 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
|  */
 | |
| int soc_get_machine(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| /**
 | |
|  * soc_get_revision() - Get revision name of an SOC
 | |
|  * @dev:	Device to check (UCLASS_SOC)
 | |
|  * @buf:	Buffer to place string
 | |
|  * @size:	Size of string space
 | |
|  *
 | |
|  * Return: 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
|  */
 | |
| int soc_get_revision(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| /**
 | |
|  * soc_get_family() - Get family name of an SOC
 | |
|  * @dev:	Device to check (UCLASS_SOC)
 | |
|  * @buf:	Buffer to place string
 | |
|  * @size:	Size of string space
 | |
|  *
 | |
|  * Return: 0 if OK, -ENOSPC if buffer is too small, other -ve on error
 | |
|  */
 | |
| int soc_get_family(struct udevice *dev, char *buf, int size);
 | |
| 
 | |
| /**
 | |
|  * soc_device_match() - Return match from an array of soc_attr
 | |
|  * @matches:	Array with any combination of family, revision or machine set
 | |
|  *
 | |
|  * Return: Pointer to struct from matches array with set attributes matching
 | |
|  *	   those provided by the soc device, or NULL if no match found.
 | |
|  */
 | |
| const struct soc_attr *
 | |
| soc_device_match(const struct soc_attr *matches);
 | |
| 
 | |
| #else
 | |
| static inline int soc_get(struct udevice **devp)
 | |
| {
 | |
| 	return -ENOSYS;
 | |
| }
 | |
| 
 | |
| static inline int soc_get_machine(struct udevice *dev, char *buf, int size)
 | |
| {
 | |
| 	return -ENOSYS;
 | |
| }
 | |
| 
 | |
| static inline int soc_get_revision(struct udevice *dev, char *buf, int size)
 | |
| {
 | |
| 	return -ENOSYS;
 | |
| }
 | |
| 
 | |
| static inline int soc_get_family(struct udevice *dev, char *buf, int size)
 | |
| {
 | |
| 	return -ENOSYS;
 | |
| }
 | |
| 
 | |
| static inline const struct soc_attr *
 | |
| soc_device_match(const struct soc_attr *matches)
 | |
| {
 | |
| 	return NULL;
 | |
| }
 | |
| #endif
 | |
| #endif /* _SOC_H */
 |