aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/firmware/psci/psci.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
index 9788bfc1cf8b..e480e0af632c 100644
--- a/drivers/firmware/psci/psci.c
+++ b/drivers/firmware/psci/psci.c
@@ -609,9 +609,9 @@ static int __init psci_0_2_init(struct device_node *np)
609 int err; 609 int err;
610 610
611 err = get_set_conduit_method(np); 611 err = get_set_conduit_method(np);
612
613 if (err) 612 if (err)
614 goto out_put_node; 613 return err;
614
615 /* 615 /*
616 * Starting with v0.2, the PSCI specification introduced a call 616 * Starting with v0.2, the PSCI specification introduced a call
617 * (PSCI_VERSION) that allows probing the firmware version, so 617 * (PSCI_VERSION) that allows probing the firmware version, so
@@ -619,11 +619,7 @@ static int __init psci_0_2_init(struct device_node *np)
619 * can be carried out according to the specific version reported 619 * can be carried out according to the specific version reported
620 * by firmware 620 * by firmware
621 */ 621 */
622 err = psci_probe(); 622 return psci_probe();
623
624out_put_node:
625 of_node_put(np);
626 return err;
627} 623}
628 624
629/* 625/*
@@ -635,9 +631,8 @@ static int __init psci_0_1_init(struct device_node *np)
635 int err; 631 int err;
636 632
637 err = get_set_conduit_method(np); 633 err = get_set_conduit_method(np);
638
639 if (err) 634 if (err)
640 goto out_put_node; 635 return err;
641 636
642 pr_info("Using PSCI v0.1 Function IDs from DT\n"); 637 pr_info("Using PSCI v0.1 Function IDs from DT\n");
643 638
@@ -661,9 +656,7 @@ static int __init psci_0_1_init(struct device_node *np)
661 psci_ops.migrate = psci_migrate; 656 psci_ops.migrate = psci_migrate;
662 } 657 }
663 658
664out_put_node: 659 return 0;
665 of_node_put(np);
666 return err;
667} 660}
668 661
669static const struct of_device_id psci_of_match[] __initconst = { 662static const struct of_device_id psci_of_match[] __initconst = {
@@ -678,6 +671,7 @@ int __init psci_dt_init(void)
678 struct device_node *np; 671 struct device_node *np;
679 const struct of_device_id *matched_np; 672 const struct of_device_id *matched_np;
680 psci_initcall_t init_fn; 673 psci_initcall_t init_fn;
674 int ret;
681 675
682 np = of_find_matching_node_and_match(NULL, psci_of_match, &matched_np); 676 np = of_find_matching_node_and_match(NULL, psci_of_match, &matched_np);
683 677
@@ -685,7 +679,10 @@ int __init psci_dt_init(void)
685 return -ENODEV; 679 return -ENODEV;
686 680
687 init_fn = (psci_initcall_t)matched_np->data; 681 init_fn = (psci_initcall_t)matched_np->data;
688 return init_fn(np); 682 ret = init_fn(np);
683
684 of_node_put(np);
685 return ret;
689} 686}
690 687
691#ifdef CONFIG_ACPI 688#ifdef CONFIG_ACPI