diff mbox series

[RFC,v4,1/4] hotplug/drcinfo: Simplify parse ibm,drc-info structs

Message ID 66fd5dbd-4bca-274a-b0e0-c9d6b52e6567@linux.vnet.ibm.com (mailing list archive)
State RFC
Headers show
Series powerpc/drcinfo: Fix bugs 'ibm,drc-info' property | expand

Commit Message

Michael Bringmann May 22, 2018, 4:37 p.m. UTC
Replace use of of_prop_next_u32() in when parsing 'ibm,drc-info'
structure to simplify and reduce parsing code.

Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
Fixes: 3f38000eda48 ("powerpc/firmware: Add definitions for new drc-info firmware feature" -- end of patch series applied to powerpc next)
---
Changes in V4:
  -- Rebased patch to 4.17-rc5 kernel
  -- Replace of_prop_next_u32() by of_read_number()
---
 arch/powerpc/platforms/pseries/of_helpers.c     |   20 +++++---------------
 arch/powerpc/platforms/pseries/pseries_energy.c |   10 ++++------
 drivers/pci/hotplug/rpaphp_core.c               |    5 ++---
 3 files changed, 11 insertions(+), 24 deletions(-)

Comments

Nathan Fontenot May 22, 2018, 8:32 p.m. UTC | #1
On 05/22/2018 11:37 AM, Michael Bringmann wrote:
> Replace use of of_prop_next_u32() in when parsing 'ibm,drc-info'
> structure to simplify and reduce parsing code.
>

You mention that this patch is to fix the parsing of the drc-info struct, but you end up
making changes to the parsing code in pseries_energy.c and rpaphp_core.c. If there is a
bug in the parsing code in those files that should be submitted as a separate patch
outside of the drc-info fixups.

-Nathan
 
> Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
> Fixes: 3f38000eda48 ("powerpc/firmware: Add definitions for new drc-info firmware feature" -- end of patch series applied to powerpc next)
> ---
> Changes in V4:
>   -- Rebased patch to 4.17-rc5 kernel
>   -- Replace of_prop_next_u32() by of_read_number()
> ---
>  arch/powerpc/platforms/pseries/of_helpers.c     |   20 +++++---------------
>  arch/powerpc/platforms/pseries/pseries_energy.c |   10 ++++------
>  drivers/pci/hotplug/rpaphp_core.c               |    5 ++---
>  3 files changed, 11 insertions(+), 24 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/pseries/of_helpers.c b/arch/powerpc/platforms/pseries/of_helpers.c
> index 6df192f..11b2ef1 100644
> --- a/arch/powerpc/platforms/pseries/of_helpers.c
> +++ b/arch/powerpc/platforms/pseries/of_helpers.c
> @@ -65,29 +65,19 @@ int of_read_drc_info_cell(struct property **prop, const __be32 **curval,
> 
>  	/* Get drc-index-start:encode-int */
>  	p2 = (const __be32 *)p;
> -	p2 = of_prop_next_u32(*prop, p2, &data->drc_index_start);
> -	if (!p2)
> -		return -EINVAL;
> +	data->drc_index_start = of_read_number(p2++, 1);
> 
>  	/* Get drc-name-suffix-start:encode-int */
> -	p2 = of_prop_next_u32(*prop, p2, &data->drc_name_suffix_start);
> -	if (!p2)
> -		return -EINVAL;
> +	data->drc_name_suffix_start = of_read_number(p2++, 1);
> 
>  	/* Get number-sequential-elements:encode-int */
> -	p2 = of_prop_next_u32(*prop, p2, &data->num_sequential_elems);
> -	if (!p2)
> -		return -EINVAL;
> +	data->num_sequential_elems = of_read_number(p2++, 1);
> 
>  	/* Get sequential-increment:encode-int */
> -	p2 = of_prop_next_u32(*prop, p2, &data->sequential_inc);
> -	if (!p2)
> -		return -EINVAL;
> +	data->sequential_inc = of_read_number(p2++, 1);
> 
>  	/* Get drc-power-domain:encode-int */
> -	p2 = of_prop_next_u32(*prop, p2, &data->drc_power_domain);
> -	if (!p2)
> -		return -EINVAL;
> +	data->drc_power_domain = of_read_number(p2++, 1);
> 
>  	/* Should now know end of current entry */
>  	(*curval) = (void *)p2;
> diff --git a/arch/powerpc/platforms/pseries/pseries_energy.c b/arch/powerpc/platforms/pseries/pseries_energy.c
> index 6ed2212..5261975 100644
> --- a/arch/powerpc/platforms/pseries/pseries_energy.c
> +++ b/arch/powerpc/platforms/pseries/pseries_energy.c
> @@ -61,9 +61,8 @@ static u32 cpu_to_drc_index(int cpu)
>  		if (info == NULL)
>  			goto err_of_node_put;
> 
> -		value = of_prop_next_u32(info, NULL, &num_set_entries);
> -		if (!value)
> -			goto err_of_node_put;
> +		value = info->value;
> +		num_set_entries = of_read_number(value++, 1);
> 
>  		for (j = 0; j < num_set_entries; j++) {
> 
> @@ -123,9 +122,8 @@ static int drc_index_to_cpu(u32 drc_index)
>  		if (info == NULL)
>  			goto err_of_node_put;
> 
> -		value = of_prop_next_u32(info, NULL, &num_set_entries);
> -		if (!value)
> -			goto err_of_node_put;
> +		value = info->value;
> +		num_set_entries = of_read_number(value++, 1);
> 
>  		for (j = 0; j < num_set_entries; j++) {
> 
> diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
> index fb5e084..435c1a0 100644
> --- a/drivers/pci/hotplug/rpaphp_core.c
> +++ b/drivers/pci/hotplug/rpaphp_core.c
> @@ -236,9 +236,8 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
>  	if (info == NULL)
>  		return -EINVAL;
> 
> -	value = of_prop_next_u32(info, NULL, &entries);
> -	if (!value)
> -		return -EINVAL;
> +	value = info->value;
> +	entries = of_read_number(value++, 1);
> 
>  	for (j = 0; j < entries; j++) {
>  		of_read_drc_info_cell(&info, &value, &drc);
>
diff mbox series

Patch

diff --git a/arch/powerpc/platforms/pseries/of_helpers.c b/arch/powerpc/platforms/pseries/of_helpers.c
index 6df192f..11b2ef1 100644
--- a/arch/powerpc/platforms/pseries/of_helpers.c
+++ b/arch/powerpc/platforms/pseries/of_helpers.c
@@ -65,29 +65,19 @@  int of_read_drc_info_cell(struct property **prop, const __be32 **curval,
 
 	/* Get drc-index-start:encode-int */
 	p2 = (const __be32 *)p;
-	p2 = of_prop_next_u32(*prop, p2, &data->drc_index_start);
-	if (!p2)
-		return -EINVAL;
+	data->drc_index_start = of_read_number(p2++, 1);
 
 	/* Get drc-name-suffix-start:encode-int */
-	p2 = of_prop_next_u32(*prop, p2, &data->drc_name_suffix_start);
-	if (!p2)
-		return -EINVAL;
+	data->drc_name_suffix_start = of_read_number(p2++, 1);
 
 	/* Get number-sequential-elements:encode-int */
-	p2 = of_prop_next_u32(*prop, p2, &data->num_sequential_elems);
-	if (!p2)
-		return -EINVAL;
+	data->num_sequential_elems = of_read_number(p2++, 1);
 
 	/* Get sequential-increment:encode-int */
-	p2 = of_prop_next_u32(*prop, p2, &data->sequential_inc);
-	if (!p2)
-		return -EINVAL;
+	data->sequential_inc = of_read_number(p2++, 1);
 
 	/* Get drc-power-domain:encode-int */
-	p2 = of_prop_next_u32(*prop, p2, &data->drc_power_domain);
-	if (!p2)
-		return -EINVAL;
+	data->drc_power_domain = of_read_number(p2++, 1);
 
 	/* Should now know end of current entry */
 	(*curval) = (void *)p2;
diff --git a/arch/powerpc/platforms/pseries/pseries_energy.c b/arch/powerpc/platforms/pseries/pseries_energy.c
index 6ed2212..5261975 100644
--- a/arch/powerpc/platforms/pseries/pseries_energy.c
+++ b/arch/powerpc/platforms/pseries/pseries_energy.c
@@ -61,9 +61,8 @@  static u32 cpu_to_drc_index(int cpu)
 		if (info == NULL)
 			goto err_of_node_put;
 
-		value = of_prop_next_u32(info, NULL, &num_set_entries);
-		if (!value)
-			goto err_of_node_put;
+		value = info->value;
+		num_set_entries = of_read_number(value++, 1);
 
 		for (j = 0; j < num_set_entries; j++) {
 
@@ -123,9 +122,8 @@  static int drc_index_to_cpu(u32 drc_index)
 		if (info == NULL)
 			goto err_of_node_put;
 
-		value = of_prop_next_u32(info, NULL, &num_set_entries);
-		if (!value)
-			goto err_of_node_put;
+		value = info->value;
+		num_set_entries = of_read_number(value++, 1);
 
 		for (j = 0; j < num_set_entries; j++) {
 
diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
index fb5e084..435c1a0 100644
--- a/drivers/pci/hotplug/rpaphp_core.c
+++ b/drivers/pci/hotplug/rpaphp_core.c
@@ -236,9 +236,8 @@  static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,
 	if (info == NULL)
 		return -EINVAL;
 
-	value = of_prop_next_u32(info, NULL, &entries);
-	if (!value)
-		return -EINVAL;
+	value = info->value;
+	entries = of_read_number(value++, 1);
 
 	for (j = 0; j < entries; j++) {
 		of_read_drc_info_cell(&info, &value, &drc);