mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 18:35:42 +01:00 
			
		
		
		
	dm: core: add clocks node scan
Currently, all fixed-clock declared in "clocks" node in device tree can be binded by clk_fixed_rate.c driver only if each of them have the "simple-bus" compatible string. This constraint has been invoked here [1]. This patch offers a solution to avoid adding "simple-bus" compatible string to nodes that are not busses. [1] https://patchwork.ozlabs.org/patch/558837/ Signed-off-by: Patrice Chotard <patrice.chotard@st.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
				
					committed by
					
						 Simon Glass
						Simon Glass
					
				
			
			
				
	
			
			
			
						parent
						
							e11aa602ab
						
					
				
				
					commit
					e81c98649b
				
			| @@ -312,8 +312,38 @@ int dm_scan_fdt(const void *blob, bool pre_reloc_only) | |||||||
| #endif | #endif | ||||||
| 	return dm_scan_fdt_node(gd->dm_root, blob, 0, pre_reloc_only); | 	return dm_scan_fdt_node(gd->dm_root, blob, 0, pre_reloc_only); | ||||||
| } | } | ||||||
|  | #else | ||||||
|  | static int dm_scan_fdt_node(struct udevice *parent, const void *blob, | ||||||
|  | 			    int offset, bool pre_reloc_only) | ||||||
|  | { | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | int dm_extended_scan_fdt(const void *blob, bool pre_reloc_only) | ||||||
|  | { | ||||||
|  | 	int node, ret; | ||||||
|  |  | ||||||
|  | 	ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only); | ||||||
|  | 	if (ret) { | ||||||
|  | 		debug("dm_scan_fdt() failed: %d\n", ret); | ||||||
|  | 		return ret; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/* bind fixed-clock */ | ||||||
|  | 	node = ofnode_to_offset(ofnode_path("/clocks")); | ||||||
|  | 	/* if no DT "clocks" node, no need to go further */ | ||||||
|  | 	if (node < 0) | ||||||
|  | 		return ret; | ||||||
|  |  | ||||||
|  | 	ret = dm_scan_fdt_node(gd->dm_root, gd->fdt_blob, node, | ||||||
|  | 			       pre_reloc_only); | ||||||
|  | 	if (ret) | ||||||
|  | 		debug("dm_scan_fdt_node() failed: %d\n", ret); | ||||||
|  |  | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
| __weak int dm_scan_other(bool pre_reloc_only) | __weak int dm_scan_other(bool pre_reloc_only) | ||||||
| { | { | ||||||
| 	return 0; | 	return 0; | ||||||
| @@ -335,9 +365,9 @@ int dm_init_and_scan(bool pre_reloc_only) | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) { | 	if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) { | ||||||
| 		ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only); | 		ret = dm_extended_scan_fdt(gd->fdt_blob, pre_reloc_only); | ||||||
| 		if (ret) { | 		if (ret) { | ||||||
| 			debug("dm_scan_fdt() failed: %d\n", ret); | 			debug("dm_extended_scan_dt() failed: %d\n", ret); | ||||||
| 			return ret; | 			return ret; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -55,6 +55,20 @@ int dm_scan_platdata(bool pre_reloc_only); | |||||||
|  */ |  */ | ||||||
| int dm_scan_fdt(const void *blob, bool pre_reloc_only); | int dm_scan_fdt(const void *blob, bool pre_reloc_only); | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * dm_extended_scan_fdt() - Scan the device tree and bind drivers | ||||||
|  |  * | ||||||
|  |  * This calls dm_scna_dft() which scans the device tree and creates a driver | ||||||
|  |  * for each node. the top-level subnodes are examined and also all sub-nodes | ||||||
|  |  * of "clocks" node. | ||||||
|  |  * | ||||||
|  |  * @blob: Pointer to device tree blob | ||||||
|  |  * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC | ||||||
|  |  * flag. If false bind all drivers. | ||||||
|  |  * @return 0 if OK, -ve on error | ||||||
|  |  */ | ||||||
|  | int dm_extended_scan_fdt(const void *blob, bool pre_reloc_only); | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * dm_scan_other() - Scan for other devices |  * dm_scan_other() - Scan for other devices | ||||||
|  * |  * | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user