mach-snapdragon: use EVT_OF_LIVE_INIT to apply DT fixups
This will now apply fixups prior to devices being bound, which makes it possible to enable/disable devices and adjust more properties that might be read before devices probe. Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
This commit is contained in:
@@ -306,7 +306,6 @@ void __weak qcom_board_init(void)
|
||||
int board_init(void)
|
||||
{
|
||||
show_psci_version();
|
||||
qcom_of_fixup_nodes();
|
||||
qcom_board_init();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <dt-bindings/input/linux-event-codes.h>
|
||||
#include <dm/of_access.h>
|
||||
#include <dm/of.h>
|
||||
#include <event.h>
|
||||
#include <fdt_support.h>
|
||||
#include <linux/errno.h>
|
||||
#include <stdlib.h>
|
||||
@@ -32,7 +33,7 @@
|
||||
* DT here. This improves compatibility with upstream DT and simplifies the
|
||||
* porting process for new devices.
|
||||
*/
|
||||
static int fixup_qcom_dwc3(struct device_node *glue_np)
|
||||
static int fixup_qcom_dwc3(struct device_node *root, struct device_node *glue_np)
|
||||
{
|
||||
struct device_node *dwc3;
|
||||
int ret, len, hsphy_idx = 1;
|
||||
@@ -101,9 +102,9 @@ static int fixup_qcom_dwc3(struct device_node *glue_np)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void fixup_usb_nodes(void)
|
||||
static void fixup_usb_nodes(struct device_node *root)
|
||||
{
|
||||
struct device_node *glue_np = NULL;
|
||||
struct device_node *glue_np = root;
|
||||
int ret;
|
||||
|
||||
while ((glue_np = of_find_compatible_node(glue_np, NULL, "qcom,dwc3"))) {
|
||||
@@ -114,14 +115,14 @@ static void fixup_usb_nodes(void)
|
||||
}
|
||||
|
||||
/* Remove all references to the rpmhpd device */
|
||||
static void fixup_power_domains(void)
|
||||
static void fixup_power_domains(struct device_node *root)
|
||||
{
|
||||
struct device_node *pd = NULL, *np = NULL;
|
||||
struct property *prop;
|
||||
const __be32 *val;
|
||||
|
||||
/* All Qualcomm platforms name the rpm(h)pd "power-controller" */
|
||||
for_each_of_allnodes(pd) {
|
||||
for_each_of_allnodes_from(root, pd) {
|
||||
if (pd->name && !strcmp("power-controller", pd->name))
|
||||
break;
|
||||
}
|
||||
@@ -133,7 +134,7 @@ static void fixup_power_domains(void)
|
||||
}
|
||||
|
||||
/* Remove all references to the power domain controller */
|
||||
for_each_of_allnodes(np) {
|
||||
for_each_of_allnodes_from(root, np) {
|
||||
if (!(prop = of_find_property(np, "power-domains", NULL)))
|
||||
continue;
|
||||
|
||||
@@ -150,12 +151,18 @@ static void fixup_power_domains(void)
|
||||
debug(#func " took %lluus\n", timer_get_us() - start); \
|
||||
} while (0)
|
||||
|
||||
void qcom_of_fixup_nodes(void)
|
||||
static int qcom_of_fixup_nodes(void * __maybe_unused ctx, struct event *event)
|
||||
{
|
||||
time_call(fixup_usb_nodes);
|
||||
time_call(fixup_power_domains);
|
||||
struct device_node *root = event->data.of_live_built.root;
|
||||
|
||||
time_call(fixup_usb_nodes, root);
|
||||
time_call(fixup_power_domains, root);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EVENT_SPY_FULL(EVT_OF_LIVE_BUILT, qcom_of_fixup_nodes);
|
||||
|
||||
int ft_board_setup(void *blob, struct bd_info __maybe_unused *bd)
|
||||
{
|
||||
struct fdt_header *fdt = blob;
|
||||
|
||||
@@ -9,18 +9,4 @@ void qcom_configure_capsule_updates(void);
|
||||
void qcom_configure_capsule_updates(void) {}
|
||||
#endif /* EFI_HAVE_CAPSULE_SUPPORT */
|
||||
|
||||
#if CONFIG_IS_ENABLED(OF_LIVE)
|
||||
/**
|
||||
* qcom_of_fixup_nodes() - Fixup Qualcomm DT nodes
|
||||
*
|
||||
* Adjusts nodes in the live tree to improve compatibility with U-Boot.
|
||||
*/
|
||||
void qcom_of_fixup_nodes(void);
|
||||
#else
|
||||
static inline void qcom_of_fixup_nodes(void)
|
||||
{
|
||||
log_debug("Unable to dynamically fixup USB nodes, please enable CONFIG_OF_LIVE\n");
|
||||
}
|
||||
#endif /* OF_LIVE */
|
||||
|
||||
#endif /* __QCOM_PRIV_H__ */
|
||||
|
||||
Reference in New Issue
Block a user