mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-03-13 21:36:57 +00: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:
parent
e11aa602ab
commit
e81c98649b
2 changed files with 46 additions and 2 deletions
|
@ -312,8 +312,38 @@ int dm_scan_fdt(const void *blob, bool pre_reloc_only)
|
|||
#endif
|
||||
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
|
||||
|
||||
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)
|
||||
{
|
||||
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)) {
|
||||
ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only);
|
||||
ret = dm_extended_scan_fdt(gd->fdt_blob, pre_reloc_only);
|
||||
if (ret) {
|
||||
debug("dm_scan_fdt() failed: %d\n", ret);
|
||||
debug("dm_extended_scan_dt() failed: %d\n", 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);
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
|
|
Loading…
Add table
Reference in a new issue