summaryrefslogtreecommitdiff
path: root/drivers/core
AgeCommit message (Collapse)Author
20 hoursdm: core: free old name in device_set_name to prevent leakPeng Fan
If device_set_name is called on a device that already has DM_FLAG_NAME_ALLOCED set, the old dynamically-allocated name is leaked. Free it before assigning the new name. See: drivers/net/mdio_gpio.c:mdio_gpio_bind(). There is device_set_name() here, however dm_mdio_post_bind() will also call device_set_name() if "device-name" exists. Signed-off-by: Peng Fan <[email protected]> Reviewed-by: Simon Glass <[email protected]>
20 hoursdm: core: Correct calloc argumentsPeng Fan
Every other calloc in drivers/core uses calloc(count, size) with count first. Fix the two reversed calloc(sizeof, 1) calls for consistency. Signed-off-by: Peng Fan <[email protected]> Reviewed-by: Raphaël Gallais-Pou <[email protected]> Reviewed-by: Simon Glass <[email protected]>
20 hoursdm: core: fix wrong strlen check in of_add_subnodePeng Fan
The duplicate-name check uses strlen on the search name instead of the child name, so a child named "trevor" would falsely match a search for "trev". Fix by checking strlen of child->name. Signed-off-by: Peng Fan <[email protected]> Reviewed-by: Raphaël Gallais-Pou <[email protected]> Reviewed-by: Simon Glass <[email protected]>
20 hoursdm: core: free fdt when fdt_create_empty_tree failurePeng Fan
If fdt_create_empty_tree fails, the malloc-ed fdt buffer is never freed. Add free before the error return. Signed-off-by: Peng Fan <[email protected]> Reviewed-by: Raphaël Gallais-Pou <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2026-06-29treewide: Staticize and constify acpi opsMarek Vasut
Set the acpi_ops structure as static const where applicable. The The structure is not accessible from outside of drivers and is not going to be modified at runtime. The structure may be unused in a couple of drivers depending on their configuration, mark those sites with __maybe_unused . Signed-off-by: Marek Vasut <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2026-06-12dm: core: Remove dependency on CLKMarkus Schneider-Pargmann (TI)
CLK is an optional dependency of simple-pm-bus. Remove the dependency. Fixes: 447bd8f1e5cf ("simple-pm-bus: Make clocks optional") Signed-off-by: Markus Schneider-Pargmann (TI) <[email protected]>
2026-06-12dm: core: Split SIMPLE_PM_BUS into phasesMarkus Schneider-Pargmann (TI)
Similar to SIMPLE_BUS, create a SPL_SIMPLE_PM_BUS additional to the SIMPLE_PM_BUS. Most boards will not need SIMPLE_PM_BUS in SPL. This is currently needed to reduce the SPL size for beagle bone black with OF_UPSTREAM enabled. Reviewed-by: Simon Glass <[email protected]> Reviewed-by: Kory Maincent <[email protected]> Signed-off-by: Markus Schneider-Pargmann (TI) <[email protected]>
2026-06-11dm: core: use DT region size when mapping device addressesPeng Fan
Update dev_read_addr_*_ptr() and dev_remap_addr_*() helpers to use dev_read_addr_size_*() and pass the DT-provided region size to map_sysmem() / map_physmem() instead of 0. Ensure mappings are consistent with the size defined in the device tree and avoids implicit or unbounded mappings. When the DT does not provide a size, the behavior remains unchanged since size is initialized to 0. Signed-off-by: Peng Fan <[email protected]>
2026-05-12Merge patch series "add memdup_nul(), use it and memdup() in a few places"Tom Rini
Rasmus Villemoes <[email protected]> says: There are quite a few places where we allocate X+1 bytes, initialize the first X bytes via memcpy() and then set the last byte to 0. The kernel has a helper for that, kmemdup_nul(). Introduce a similar one, and start making use of it in a few places. Also the existing memdup() helper can be put to more use. There are lots more places one could modify. But for code shared with host tools, one would need to do some refactoring, putting memdup() and memdup_nul() in their own str-util.c TU which could then also be included in the tools build. Link: https://lore.kernel.org/r/[email protected]
2026-05-12drivers/core: use memdup() instead of malloc()+memcpy()Rasmus Villemoes
Use memdup() instead of open-coding it. In the dm_setup_inst() case, there was never any reason to use calloc(), as the whole allocation is definitely initialized via the immediately following memcpy(). Reviewed-by: Simon Glass <[email protected]> Signed-off-by: Rasmus Villemoes <[email protected]>
2026-04-21Merge patch series "Linux compat improvements and CCF prep"Tom Rini
Casey Connolly <[email protected]> says: This series implements various improvements to Linux header compatibility, largely in preparation for a full port of Linux CCF but many of these changes would also be helpful when porting other drivers. Beside the basic header/compat stuff there are a few larger patches: Patch 1 adds the "%pOF" format specifier to vsprintf, this behaves the same as it does in Linux printing the name of the ofnode, but notably it expects an ofnode pointer rather than a device_node. Patch 2 adds an option to skip doing a full DM scan pre-relocation. Some platforms like Qualcomm don't actually need devices to be probed prior to relocation, it is also quite slow to scan the entire FDT before caches are up. This option gets us to main loop 30-50% faster. Unfortunately it isn't possible to totally skip DM since U-Boot will panic if it can't find a serial port, but the serial uclass code will bind the serial port itself by reading /chosen/stdout-path, however any dependencies like clocks won't be found so this should only be enabled if the serial driver gracefully handles missing clocks. Patch 3 adds [k]strdup_const(), this works the same as the Linux version saving a small amount of memory by avoiding duplicating strings stored in .rodata, this is particularly useful for CCF. Patch 4 adds 64-bit versions of some 32-bit ofnode utilities functions, making it possible to parse 64-bit arrays. Patch 6 provides a simple implementation of kref, this will be used by CCF. Patch 9 adds devm_krealloc() support to devres, it relies on storing allocation sizes in the devres struct which will add a small overhead. Link: https://lore.kernel.org/r/[email protected]
2026-04-21ofnode: add read_u64_array and count_elems_of_sizeCasey Connolly
These are similar to their Linux counterparts, adding helpers for reading arrays of 64-bit values with of_access and fdtdec implementations. Signed-off-by: Casey Connolly <[email protected]>
2026-04-07dm: Respect dma-ranges sizeMarek Vasut
Rework dev_phys_to_bus() and dev_bus_to_phys() to respect the size of the area specified in dma-ranges DT property. The area outside of ranges is remapped 1:1, while the area in the ranges is remapped according to the description in the dma-ranges property. Adjust the test to test the area within the remapped range, not area outside the remapped range, which was incorrect. Signed-off-by: Marek Vasut <[email protected]> Reviewed-by: Markus Schneider-Pargmann <[email protected]>
2026-03-30core: Rework REGMAP symbols implementationTom Rini
As exposed by "make randconfig", we have an issue with the dependencies for REGMAP (and xPL variants). As this is a library function, it should always be selected and not depended on by other functionality. This is largely done correctly today, so just correct the few outliers. Acked-by: Anshul Dalal <[email protected]> Signed-off-by: Tom Rini <[email protected]>
2026-03-18Merge patch series "bootm: Clean up arch-specific, pre-OS clean-up"Tom Rini
Simon Glass <[email protected]> says: Each arch does something slightly different before booting the OS. Some archs even do different things depending on the CPU type. It is quite hard to know what actually happens in the final milliseconds before the OS boot. This series attempts to start cleaning up U-Boot in this area. The basic intent is to create a new bootm_final() function which can be called by all archs. It provides some flags for a couple of necessary variations but otherwise it is generic. All architectures are converted over to use this new function. board_quiesce_devices() is moved into bootm_final() so that all archs benefit from it. This series fixes a bug in device_remove() is fixed where removing a parent with specialised flags (e.g. DM_REMOVE_ACTIVE_ALL) could leave children activated, since they do not match the flags. This fixes is needed to avoid bootm_final() causing test failures on sandbox. Future work could take this a little further: - Convert EFI loader to use the same function - Improve comments for cleanup_before_linux() across architectures - Support fake-run tracing on all archs Link: https://lore.kernel.org/r/[email protected]
2026-03-18dm: Remove children when parent is removed by flagsSimon Glass
When dm_remove_devices_active() removes devices using specialised flags like DM_REMOVE_ACTIVE_ALL, a parent device may match (e.g. MMC has DM_FLAG_OS_PREPARE) while its children do not. This deactivates the parent but leaves children activated, an inconsistent state. Later, when uclass_destroy() calls device_remove() with DM_REMOVE_NORMAL on the already-deactivated parent, it returns early without touching the children. The subsequent device_unbind() then fails because the children are still activated. Fix this by dropping only the DM_REMOVE_ACTIVE_ALL requirement for child removal when the parent is being removed. This ensures children are removed along with their parent, while still preserving other flags like DM_REMOVE_NON_VITAL so that vital devices remain protected. Signed-off-by: Simon Glass <[email protected]>
2026-03-18dm: Move flags_remove() check before child removalSimon Glass
Move the flags_remove() call before device_chld_remove() and save the result in a separate variable. This is just a refactoring with no behaviour change, preparing for the next commit which needs to know whether the parent will be removed before deciding how to remove its children. Signed-off-by: Simon Glass <[email protected]>
2026-03-03dm: core: Don't allow ofnode_to_fdt() to return NULLRomain Gantois
The ofnode_to_fdt() function may return a NULL pointer in multiple cases. Or, this function's return value is often passed directly to functions such as fdt_getprop() which end up dereferencing it, thus causing a NULL pointer exception. Don't allow ofnode_to_fdt() to return NULL, to avoid a NULL pointer dereference. Reviewed-by: Raphaël Gallais-Pou <[email protected]> Signed-off-by: Romain Gantois <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2026-01-28dm: core: lists_bind_fdt: Indent continuation debug log messageMarkus Schneider-Pargmann (TI)
The loop in lists_bind_fdt uses an indented style for log messages within the loop and normal messages for errors that lead to the exit of the function. Due to the change of the previous patch that adds support for continuation on -ENODEV returned by bind, the log message should be indented. Signed-off-by: Markus Schneider-Pargmann (TI) <[email protected]>
2026-01-28dm: core: Support multiple drivers with same compatiblesMarkus Schneider-Pargmann (TI.com)
Currently once a driver matched the compatible string of a device, other drivers are ignored. If the first matching driver returns -ENODEV, no other possibly matching drivers are iterated with that compatible of the device. Instead the next compatible in the list of compatibles is selected, assuming only one driver matches one compatible at a time. To be able to use the bind function to return -ENODEV and continue matching other drivers with the same compatible, move the for loop a bit to continue the for loop after -ENODEV was returned. The loop had to be adjusted a bit to still support the 'drv' argument properly. Some simplifications were done as well. The modification will only add additional loop iterations if -ENODEV is returned. Otherwise the exit and continue conditions for the loop stay the same and do not cause any additional iterations and should not impact performance. This is required for ti-musb-host and ti-musb-peripheral which both match on the same device but differ based on the dr_mode DT property. Depending on this property, the driver is either UCLASS_USB or UCLASS_USB_GADGET_GENERIC. By checking the DT property in the bind function and returning -ENODEV the other driver can probe instead. Reviewed-by: Simon Glass <[email protected]> Acked-by: Dinesh Maniyam <[email protected]> Signed-off-by: Markus Schneider-Pargmann (TI.com) <[email protected]>
2026-01-28dm: core: lists_bind_fdt: Replace found variableMarkus Schneider-Pargmann (TI.com)
'found' is only used at the end of the function to print a debug message. No need to maintain a variable if we can just return 0 immediately when a driver was bound successfully. Reviewed-by: Simon Glass <[email protected]> Reviewed-by: Mattijs Korpershoek <[email protected]> Signed-off-by: Markus Schneider-Pargmann (TI.com) <[email protected]>
2026-01-28dm: core: lists_bind_fdt: Remove unused variableMarkus Schneider-Pargmann (TI.com)
'result' is unused in this function, remove it. Reviewed-by: Simon Glass <[email protected]> Reviewed-by: Mattijs Korpershoek <[email protected]> Signed-off-by: Markus Schneider-Pargmann (TI.com) <[email protected]>
2026-01-09dm: core: Default to using DEVRES outside of xPLTom Rini
The devm alloc functions that we have may follow the Linux kernel model where allocations are (almost always) automatically free()'d. However, quite often we don't enable, in full U-Boot, the tracking and free()'ing functionality. This in turn leads to memory leaks because the driver author expects that since the functions have the same name as in the Linux Kernel they have the same behavior. In turn we then get functionally correct commits such as commit 00e1fed93c8c ("firmware: ti_sci: Fix memory leaks in devm_ti_sci_get_of_resource") that manually add these calls. Rather than manually tracking allocations and implementing free()s, rework things so that we follow expectations by enabling the DEVRES functionality (outside of xPL phases). This turns DEVRES from a prompted symbol to a symbol that must be select'd, and we now remove our non-managed alloc/free functions from outside of xPL builds. Reviewed-by: Michael Trimarchi <[email protected]> Signed-off-by: Tom Rini <[email protected]>
2025-12-12simple-pm-bus: Make clocks optionalMarkus Schneider-Pargmann (TI.com)
simple-pm-bus binding requires either power-domains or clocks, not both. Allow clk_get_bulk() to return -ENOENT. When no clocks are present, bulk->count is set to 0, which works correctly with clk_enable_bulk() and other clk functions used in this driver. Reviewed-by: Kory Maincent <[email protected]> Signed-off-by: Markus Schneider-Pargmann (TI.com) <[email protected]>
2025-11-17ofnode: support panel-timings in ofnode_decode_display_timingRaphael Gallais-Pou
The "Display Timings" in panel-common.yaml can be provided by 2 properties - panel-timing: when display panels are restricted to a single resolution the "panel-timing" node expresses the required timings. - display-timings: several resolutions with different timings are supported with several timing subnode of "display-timings" node This patch update the parsing function to handle this 2 possibility when index = 0. Reviewed-by: Patrice Chotard <[email protected]> Reviewed-by: Yannick Fertre <[email protected]> Signed-off-by: Raphael Gallais-Pou <[email protected]>
2025-11-10dm: Remove pre-schema tag supportTom Rini
Support for using "u-boot,dm-..." rather than "bootph-..." has been deprecated since February 2023. Any platforms using this have had a console message saying to migrate by 2023.07. Go and remove all support here now, for the v2026.01 release. The results of this change that aren't clear from the above are that we still have a checkpatch.pl error message, and document in doc/develop/spl.rst that they have been migrated since 2023. We also change the key2dtsi.py tool to use the correct bootph phase rather than the legacy phase. Signed-off-by: Tom Rini <[email protected]>
2025-08-26dm: core: Mark root_info as constMichal Simek
root_info driver structure is not changing that's why mark them as const which ensure that structure will be moved from .data section to .rodata section. Signed-off-by: Michal Simek <[email protected]> Link: https://lore.kernel.org/r/18d92a93a9863ed0452e82a1f8e0ff9205adb4f9.1753444878.git.michal.simek@amd.com
2025-07-24uclass: Cleanup uclass_find_next_deviceAndrew Goodbody
uclass_find_next_device always returns 0, so instead make it a void and update calling sites. Signed-off-by: Andrew Goodbody <[email protected]>
2025-07-14ofnode: NULL check bootscr_flash_size before dereferenceAndrew Goodbody
Move the NULL check of bootscr_flash_size to before the first time it is dereferenced to avoid any possible segment violations. This issue found by Smatch. Signed-off-by: Andrew Goodbody <[email protected]> Reviewed-by: Tom Rini <[email protected]>
2025-06-11dm: core: use s32 instead of int for dev_read_s32_defaultQuentin Schulz
dev_read_s32_default is for getting an s32 from a Device Tree property and allows to take a default value if that property is missing. Considering it calls ofnode_read_u32_default which takes a u32 and returns a u32, it should do the same instead of using an int, especially considering that int size is typically architecture-specific, as opposed to s32/u32. s32 and u32 being the same size, dev_read_s32* functions calling ofnode_read_u32_default shouldn't be an issue (at the type level at least) as the information will be stored appropriately in 4B regardless of the sign. This incidentally matches all other dev_read_*_default functions. Fixes: a1b17e4f4c82 ("dm: core: Add a function to read into a unsigned int") Signed-off-by: Quentin Schulz <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2025-06-11dm: core: use u32 instead of int for dev_read_u32_defaultQuentin Schulz
dev_read_u32_default is for getting a u32 from a Device Tree property and allows to take a default value if that property is missing. Considering it calls ofnode_read_u32_default which takes a u32 and returns a u32, it should do the same instead of using an int, especially considering that int size is typically architecture-specific, as opposed to u32. This incidentally matches all other dev_read_*_default functions (except dev_read_s32_default which will be tackled in the next commit). Fixes: 47a0fd3bad38 ("dm: core: Implement live tree 'read' functions") Signed-off-by: Quentin Schulz <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2025-04-11Merge patch series "Switch to using $(PHASE_) in Makefiles"Tom Rini
Tom Rini <[email protected]> says: This series switches to always using $(PHASE_) in Makefiles when building rather than $(PHASE_) or $(XPL_). It also starts on documenting this part of the build, but as a follow-up we need to rename doc/develop/spl.rst and expand on explaining things a bit. Link: https://lore.kernel.org/r/[email protected]
2025-04-11Kbuild: Always use $(PHASE_)Tom Rini
It is confusing to have both "$(PHASE_)" and "$(XPL_)" be used in our Makefiles as part of the macros to determine when to do something in our Makefiles based on what phase of the build we are in. For consistency, bring this down to a single macro and use "$(PHASE_)" only. Signed-off-by: Tom Rini <[email protected]>
2025-04-10dm: core: Add a helper to retrieve devices through graph endpointsMiquel Raynal
There are already several helpers to find a udevice based on its position in a device tree, like getting a child or a node pointed by a phandle, but there was no support for graph endpoints, which are very common in display pipelines. Add a new helper, named uclass_get_device_by_endpoint() which enters the child graph reprensentation, looks for a specific port, then follows the remote endpoint, and finally retrieves the first parent of the given uclass_id. This is a very handy and straightforward way to get a bridge or a panel handle. Reviewed-by: Simon Glass <[email protected]> Signed-off-by: Miquel Raynal <[email protected]>
2025-04-10core: ofnode_graph: Fix a commentMiquel Raynal
Naming between the parameter list, the prototype and the main comment do not match. Fix the comment which seems the be the one that is incorrect. Fixes: 9057077cf4e1 ("core: ofnode: add of_graph parsing helpers") Signed-off-by: Miquel Raynal <[email protected]> Reviewed-by: Svyatoslav Ryhel <[email protected]>
2025-03-08core: ofnode: add of_graph parsing helpersSvyatoslav Ryhel
Add a mostly complete list of ofnode analogs of of_graph parsing helpers. Signed-off-by: Svyatoslav Ryhel <[email protected]>
2025-03-04Revert "dm: core: Simplify dm_probe_devices()"Simon Glass
Unfortunately this change was not safe as some devices are bound before relocation, but we don't want to probe them. It causes 'raise: Signal # 8 caught' on jerry. Move the bootstage timer to after autoprobe in initf_dm() since the trace test does not tolerate any variance. This reverts commit 21dd873572a01d74bfdfceb7a30b056f8ccba187. Signed-off-by: Simon Glass <[email protected]>
2025-01-22Merge patch series "upl: Prerequite patches for updated spec"Tom Rini
Simon Glass <[email protected]> says: The current UPL spec[1] has been tidied up and improved over the last year, since U-Boot's original UPL support was written. This series includes some prerequisite patches needed for the real UPL patches. It is split from [2] [1] https://github.com/UniversalPayload/spec/tree/3f1450d [2] https://patchwork.ozlabs.org/project/uboot/list/?series=438574&state=* Link: https://lore.kernel.org/r/[email protected]
2025-01-22dm: core: Provide ofnode_find_subnode_unit()Simon Glass
The ofnode_find_subnode() function currently processes things two different ways, so the treatment of unit addresses differs depending on whether OF_LIVE is enabled or not. Add a new version which uses the ofnode API and add a test to check that unit addresses can be matched correctly. Leave the old function in place for the !OF_LIVE case, to avoid a code-size increase, e.g. on firefly-rk3288 Signed-off-by: Simon Glass <[email protected]>
2025-01-22dm: core: Provide ofnode_name_eq_unit() to accept a unit addressSimon Glass
When a unit-address is provided, use it to match against the node name. Since this increases code size, put it into a separate function. Signed-off-by: Simon Glass <[email protected]>
2025-01-22ofnode: Indicate when out of space in a few placesSimon Glass
Update ofnode_add_subnode() and ofnode_add_prop() to return a suitable error when space is exhausted in the FDT. This makes it easier to see what is going wrong. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Tom Rini <[email protected]>
2025-01-22ofnode: Use 4K for a default tree-sizeSimon Glass
At some point it would be nice to have the ofnode API automatically expand the tree as required, to accommodate new nodes. For now, expand the default size so that UPL can be supported. Signed-off-by: Simon Glass <[email protected]>
2025-01-14common: Move autoprobe out to board initSimon Glass
Rather than doing autoprobe within the driver model code, move it out to the board-init code. This makes it clear that it is a separate step from binding devices. For now this is always done twice, before and after relocation, but we should discuss whether it might be possible to drop the post-relocation probe. For boards with SPL, the autoprobe is still done there as well. Note that with this change, autoprobe happens after the EVT_DM_POST_INIT_R/F events are sent, rather than before. Link: https://lore.kernel.org/u-boot/[email protected]/ Signed-off-by: Simon Glass <[email protected]>
2025-01-14dm: core: Simplify dm_probe_devices()Simon Glass
There is no point in checking the pre_reloc flag, since devices not marked as pre-reloc will not have been bound, so won't exist yet. There doesn't seem to be any point in checking if the device has a valid devicetree node either, so drop that too. Signed-off-by: Simon Glass <[email protected]>
2024-12-06Merge patch series "led: update LED boot/activity to new property ↵Tom Rini
implementation" Christian Marangi <[email protected]> says: This series is split in 2 part. While adapting the LED boot and activity code to the new property accepted by Rob in dt-schema repository, a big BUG was discovered. The reason wasn't clear at start and took me some days to figure it out. This was triggered by adding a new phandle in the test.dts to introduce test for the new OPs. This single addition caused the sandbox CI test to fail in the dm_test_ofnode_phandle_ot test. This doesn't make sense as reverting the change made the CI test to correctly finish. Also moving the uboot node down after the first phandle (in test.dts the gpio one) also made the CI test to correctly finish. A little bit of searching and debugging made me realize the parse phandle OPs didn't support other.dts at all and they were still referencing phandle index from test.dts. (more info in the related commit) In short the test was broken all along and was working by pure luck. The first 4 patch address and fix the problem for good. The other 4 patch expand and address the property change for LED boot/activity. Posting in a single series as changes are trivial and just to speedup review process. (and also because the second part depends on the first) All CI tested with azure pipeline. Link: https://lore.kernel.org/r/[email protected]
2024-12-06dm: core: implement phandle ofnode_options helperChristian Marangi
Implement ofnode_options phandle helper to get an ofnode from a phandle option in /options/u-boot. This helper can be useful since new DT yaml usually require to link a phandle of a node instead of referencing it by name or other indirect way. Signed-off-by: Christian Marangi <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2024-12-06dm: core: implement ofnode/tree_parse_phandle() helperChristian Marangi
Implement ofnode/tree_parse_phandle() helper as an equivalent of of_parse_phandle to handle simple single value phandle. Signed-off-by: Christian Marangi <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2024-12-06dm: core: implement oftree variant of parse_phandle OPsChristian Marangi
Implement oftree variant of parse_phandle OPs. There is currently a very hidden and laten BUG with parse_phandle OPs that doesn't permit the support of multiple DTS in a system. One usage example if sandbox with the usage of other.dts The BUG is only present on live scenario where of_... OPs are used and it's not present when fdt... OPs are used. This is caused by an assumption made in __of_parse_phandle_with_args, with the of_find_node_by_phandle call that pass the first arg as NULL. This makes of_find_node_by_phandle use the default root node of the system and doesn't permit the usage of alternative tree. This is correct for normal system and also for the linux kernel where it's assumed a single device tree. It's problematic if other device tree needs to be used. To fix this, introduce __of_root_parse_phandle_with_args to define a root device tree for of_find_node_by_phandle. Introduce all the variant OPs for this and in ofnode, the oftree OPs following how it's done for other OPs with similar task. For FDT scenario, ofnode_from_fdtdec_phandle_args is reworked to accept a new variable, node and noffset_to_ofnode is used instead of offset_to_ofnode. This is required to support multiple FDB blob to calculate the correct of_offset of the ofnode. Signed-off-by: Christian Marangi <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2024-11-24dm: Add dm_remove_devices_active() for ordered device removalJanne Grunau
This replaces dm_remove_devices_flags() calls in all boot implementations to ensure non vital devices are consistently removed first. All boot implementation except arch/arm/lib/bootm.c currently just call dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL). This can result in crashes when dependencies between devices exists. The driver model's design document describes DM_FLAG_VITAL as "indicates that the device is 'vital' to the operation of other devices". Device removal at boot should follow this. Instead of adding dm_remove_devices_flags() with (DM_REMOVE_ACTIVE_ALL | DM_REMOVE_NON_VITAL) everywhere add dm_remove_devices_active() which does this. Fixes a NULL pointer deref in the apple dart IOMMU driver during EFI boot. The xhci-pci (driver which depends on the IOMMU to work) removes its mapping on removal. This explodes when the IOMMU device was removed first. dm_remove_devices_flags() is kept since it is used for testing of device_remove() calls in dm. Signed-off-by: Janne Grunau <[email protected]>
2024-11-03dm: core: Add a function to see if a device existsSimon Glass
All the uclass functions for finding a device end up creating a uclass if it doesn't exist. Add a function which instead returns NULL in this case. This is useful when in the 'unbind' path, since we don't want to undo any unbinding which has already happened. Signed-off-by: Simon Glass <[email protected]>