diff mbox

[U-Boot,1/2,RESEND] fdt_support: fdt_translate_address() blob const correctness

Message ID 20160805154751.7858-1-swarren@wwwdotorg.org
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Stephen Warren Aug. 5, 2016, 3:47 p.m. UTC
From: Stephen Warren <swarren@nvidia.com>

The next patch will call fdt_translate_address() from somewhere with a
"const void *blob" rather than a "void *blob", so fdt_translate_address()
must accept a const pointer too. Constify the minimum number of function
parameters to achieve this.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Re-sending since these didn't show up in patchwork for some reason.

This series will be a dependency for the Tegra BPMP driver.

 common/fdt_support.c  | 19 ++++++++++---------
 include/fdt_support.h |  5 +++--
 2 files changed, 13 insertions(+), 11 deletions(-)

Comments

Simon Glass Aug. 6, 2016, 1:41 a.m. UTC | #1
On 5 August 2016 at 09:47, Stephen Warren <swarren@wwwdotorg.org> wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> The next patch will call fdt_translate_address() from somewhere with a
> "const void *blob" rather than a "void *blob", so fdt_translate_address()
> must accept a const pointer too. Constify the minimum number of function
> parameters to achieve this.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> Acked-by: Simon Glass <sjg@chromium.org>
> ---
> Re-sending since these didn't show up in patchwork for some reason.
>
> This series will be a dependency for the Tegra BPMP driver.
>
>  common/fdt_support.c  | 19 ++++++++++---------
>  include/fdt_support.h |  5 +++--
>  2 files changed, 13 insertions(+), 11 deletions(-)

Applied to u-boot-dm, thanks!
Simon Glass Aug. 6, 2016, 3:36 a.m. UTC | #2
Hi Stephen,

On 5 August 2016 at 19:41, Simon Glass <sjg@chromium.org> wrote:
>
> On 5 August 2016 at 09:47, Stephen Warren <swarren@wwwdotorg.org> wrote:
> > From: Stephen Warren <swarren@nvidia.com>
> >
> > The next patch will call fdt_translate_address() from somewhere with a
> > "const void *blob" rather than a "void *blob", so fdt_translate_address()
> > must accept a const pointer too. Constify the minimum number of function
> > parameters to achieve this.
> >
> > Signed-off-by: Stephen Warren <swarren@nvidia.com>
> > Acked-by: Simon Glass <sjg@chromium.org>
> > ---
> > Re-sending since these didn't show up in patchwork for some reason.
> >
> > This series will be a dependency for the Tegra BPMP driver.
> >
> >  common/fdt_support.c  | 19 ++++++++++---------
> >  include/fdt_support.h |  5 +++--
> >  2 files changed, 13 insertions(+), 11 deletions(-)
>
> Applied to u-boot-dm, thanks!

Unfortunately these patches cause some build breakages. Can you please
take a look?

$ buildman -b dm-push -se
...
02: fdt_support: fdt_translate_address() blob const correctness
      mips:  +   malta64 malta64el maltael malta
+   .match = of_bus_isa_match,
+   ^
w+../common/fdt_support.c:1113:3: warning: initialization from
incompatible pointer type
w+../common/fdt_support.c:1113:3: warning: (near initialization for
'of_busses[0].match')
03: fdt: allow fdtdec_get_addr_size_*() to translate addresses
   aarch64:  +   xilinx_zynqmp_zc1751_xm018_dc4 xilinx_zynqmp_zcu102
xilinx_zynqmp_zc1751_xm015_dc1 xilinx_zynqmp_zc1751_xm019_dc5
xilinx_zynqmp_zc1751_xm016_dc2 xilinx_zynqmp_ep
xilinx_zynqmp_zcu102_revB
       arm:  +   socfpga_de0_nano_soc uniphier_pro4 uniphier_ld4_sld8
zynq_zc770_xm010 zynq_zc770_xm013 zynq_zc770_xm012 zynq_zc706
evb-rk3288 socfpga_arria5 zynq_zybo rock2 socfpga_socrates
uniphier_sld3 zynq_microzed socfpga_sr1500 chromebook_jerry zynq_zed
socfpga_sockit zynq_zc702 socfpga_is1 zynq_picozed fennec-rk3288
zynq_zc770_xm011 popmetal-rk3288 socfpga_mcvevk socfpga_cyclone5
socfpga_vining_fpga uniphier_pxs2_ld6b
+lib/built-in.o: In function `fdtdec_get_addr_size_fixed':
+build/../lib/fdtdec.c:117: undefined reference to `fdt_translate_address'

Regards,
Simon
Stephen Warren Aug. 6, 2016, 6:01 a.m. UTC | #3
On 08/05/2016 09:36 PM, Simon Glass wrote:
> Hi Stephen,
>
> On 5 August 2016 at 19:41, Simon Glass <sjg@chromium.org> wrote:
>>
>> On 5 August 2016 at 09:47, Stephen Warren <swarren@wwwdotorg.org> wrote:
>>> From: Stephen Warren <swarren@nvidia.com>
>>>
>>> The next patch will call fdt_translate_address() from somewhere with a
>>> "const void *blob" rather than a "void *blob", so fdt_translate_address()
>>> must accept a const pointer too. Constify the minimum number of function
>>> parameters to achieve this.
>>>
>>> Signed-off-by: Stephen Warren <swarren@nvidia.com>
>>> Acked-by: Simon Glass <sjg@chromium.org>
>>> ---
>>> Re-sending since these didn't show up in patchwork for some reason.
>>>
>>> This series will be a dependency for the Tegra BPMP driver.
>>>
>>>  common/fdt_support.c  | 19 ++++++++++---------
>>>  include/fdt_support.h |  5 +++--
>>>  2 files changed, 13 insertions(+), 11 deletions(-)
>>
>> Applied to u-boot-dm, thanks!
>
> Unfortunately these patches cause some build breakages. Can you please
> take a look?

The following fixes the issues you mentioned. Do you want to squash it 
in or should I resend?

> diff --git a/common/fdt_support.c b/common/fdt_support.c
> index da59f2c8cc07..202058621ae2 100644
> --- a/common/fdt_support.c
> +++ b/common/fdt_support.c
> @@ -1055,7 +1055,7 @@ static int of_bus_default_translate(fdt32_t *addr, u64 offset, int na)
>  #ifdef CONFIG_OF_ISA_BUS
>
>  /* ISA bus translator */
> -static int of_bus_isa_match(void *blob, int parentoffset)
> +static int of_bus_isa_match(const void *blob, int parentoffset)
>  {
>  	const char *name;
>
> diff --git a/lib/fdtdec.c b/lib/fdtdec.c
> index 7d99bdb8ca47..e638ca5d6a33 100644
> --- a/lib/fdtdec.c
> +++ b/lib/fdtdec.c
> @@ -113,9 +113,11 @@ fdt_addr_t fdtdec_get_addr_size_fixed(const void *blob, int node,
>  		return FDT_ADDR_T_NONE;
>  	}
>
> +#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_OF_LIBFDT)
>  	if (translate)
>  		addr = fdt_translate_address(blob, node, prop_addr);
>  	else
> +#endif
>  		addr = fdtdec_get_number(prop_addr, na);
>
>  	if (sizep) {

The ifdef is a bit unfortunate but mirrors that ifdefs in 
common/Makefile. An alternative might be to define a weak version of 
fdt_translate_address() in fdtdec.c that does nothing more than call 
fdtdec_get_number(), but that might be even more confusing.
Simon Glass Aug. 6, 2016, 11:23 p.m. UTC | #4
Hi Stephen,

On 6 August 2016 at 00:01, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 08/05/2016 09:36 PM, Simon Glass wrote:
>>
>> Hi Stephen,
>>
>> On 5 August 2016 at 19:41, Simon Glass <sjg@chromium.org> wrote:
>>>
>>>
>>> On 5 August 2016 at 09:47, Stephen Warren <swarren@wwwdotorg.org> wrote:
>>>>
>>>> From: Stephen Warren <swarren@nvidia.com>
>>>>
>>>> The next patch will call fdt_translate_address() from somewhere with a
>>>> "const void *blob" rather than a "void *blob", so
>>>> fdt_translate_address()
>>>> must accept a const pointer too. Constify the minimum number of function
>>>> parameters to achieve this.
>>>>
>>>> Signed-off-by: Stephen Warren <swarren@nvidia.com>
>>>> Acked-by: Simon Glass <sjg@chromium.org>
>>>> ---
>>>> Re-sending since these didn't show up in patchwork for some reason.
>>>>
>>>> This series will be a dependency for the Tegra BPMP driver.
>>>>
>>>>  common/fdt_support.c  | 19 ++++++++++---------
>>>>  include/fdt_support.h |  5 +++--
>>>>  2 files changed, 13 insertions(+), 11 deletions(-)
>>>
>>>
>>> Applied to u-boot-dm, thanks!
>>
>>
>> Unfortunately these patches cause some build breakages. Can you please
>> take a look?
>
>
> The following fixes the issues you mentioned. Do you want to squash it in or
> should I resend?
>
>> diff --git a/common/fdt_support.c b/common/fdt_support.c
>> index da59f2c8cc07..202058621ae2 100644
>> --- a/common/fdt_support.c
>> +++ b/common/fdt_support.c
>> @@ -1055,7 +1055,7 @@ static int of_bus_default_translate(fdt32_t *addr,
>> u64 offset, int na)
>>  #ifdef CONFIG_OF_ISA_BUS
>>
>>  /* ISA bus translator */
>> -static int of_bus_isa_match(void *blob, int parentoffset)
>> +static int of_bus_isa_match(const void *blob, int parentoffset)
>>  {
>>         const char *name;
>>
>> diff --git a/lib/fdtdec.c b/lib/fdtdec.c
>> index 7d99bdb8ca47..e638ca5d6a33 100644
>> --- a/lib/fdtdec.c
>> +++ b/lib/fdtdec.c
>> @@ -113,9 +113,11 @@ fdt_addr_t fdtdec_get_addr_size_fixed(const void
>> *blob, int node,
>>                 return FDT_ADDR_T_NONE;
>>         }
>>
>> +#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_OF_LIBFDT)
>>         if (translate)
>>                 addr = fdt_translate_address(blob, node, prop_addr);
>>         else
>> +#endif
>>                 addr = fdtdec_get_number(prop_addr, na);
>>
>>         if (sizep) {
>
>
> The ifdef is a bit unfortunate but mirrors that ifdefs in common/Makefile.
> An alternative might be to define a weak version of fdt_translate_address()
> in fdtdec.c that does nothing more than call fdtdec_get_number(), but that
> might be even more confusing.

Yes that works - applied, thanks.

- Simon
diff mbox

Patch

diff --git a/common/fdt_support.c b/common/fdt_support.c
index 5d8eb12f1073..da59f2c8cc07 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -997,8 +997,8 @@  static void of_dump_addr(const char *s, const fdt32_t *addr, int na) { }
 struct of_bus {
 	const char	*name;
 	const char	*addresses;
-	int		(*match)(void *blob, int parentoffset);
-	void		(*count_cells)(void *blob, int parentoffset,
+	int		(*match)(const void *blob, int parentoffset);
+	void		(*count_cells)(const void *blob, int parentoffset,
 				int *addrc, int *sizec);
 	u64		(*map)(fdt32_t *addr, const fdt32_t *range,
 				int na, int ns, int pna);
@@ -1006,7 +1006,7 @@  struct of_bus {
 };
 
 /* Default translator (generic bus) */
-void of_bus_default_count_cells(void *blob, int parentoffset,
+void of_bus_default_count_cells(const void *blob, int parentoffset,
 					int *addrc, int *sizec)
 {
 	const fdt32_t *prop;
@@ -1066,7 +1066,7 @@  static int of_bus_isa_match(void *blob, int parentoffset)
 	return !strcmp(name, "isa");
 }
 
-static void of_bus_isa_count_cells(void *blob, int parentoffset,
+static void of_bus_isa_count_cells(const void *blob, int parentoffset,
 				   int *addrc, int *sizec)
 {
 	if (addrc)
@@ -1126,7 +1126,7 @@  static struct of_bus of_busses[] = {
 	},
 };
 
-static struct of_bus *of_match_bus(void *blob, int parentoffset)
+static struct of_bus *of_match_bus(const void *blob, int parentoffset)
 {
 	struct of_bus *bus;
 
@@ -1148,7 +1148,7 @@  static struct of_bus *of_match_bus(void *blob, int parentoffset)
 	return NULL;
 }
 
-static int of_translate_one(void * blob, int parent, struct of_bus *bus,
+static int of_translate_one(const void *blob, int parent, struct of_bus *bus,
 			    struct of_bus *pbus, fdt32_t *addr,
 			    int na, int ns, int pna, const char *rprop)
 {
@@ -1211,8 +1211,8 @@  static int of_translate_one(void * blob, int parent, struct of_bus *bus,
  * that can be mapped to a cpu physical address). This is not really specified
  * that way, but this is traditionally the way IBM at least do things
  */
-static u64 __of_translate_address(void *blob, int node_offset, const fdt32_t *in_addr,
-				  const char *rprop)
+static u64 __of_translate_address(const void *blob, int node_offset,
+				  const fdt32_t *in_addr, const char *rprop)
 {
 	int parent;
 	struct of_bus *bus, *pbus;
@@ -1284,7 +1284,8 @@  static u64 __of_translate_address(void *blob, int node_offset, const fdt32_t *in
 	return result;
 }
 
-u64 fdt_translate_address(void *blob, int node_offset, const fdt32_t *in_addr)
+u64 fdt_translate_address(const void *blob, int node_offset,
+			  const fdt32_t *in_addr)
 {
 	return __of_translate_address(blob, node_offset, in_addr, "ranges");
 }
diff --git a/include/fdt_support.h b/include/fdt_support.h
index 731809874f48..e9f3497ab642 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -180,7 +180,8 @@  static inline void fdt_fixup_mtdparts(void *fdt, void *node_info,
 #endif
 
 void fdt_del_node_and_alias(void *blob, const char *alias);
-u64 fdt_translate_address(void *blob, int node_offset, const __be32 *in_addr);
+u64 fdt_translate_address(const void *blob, int node_offset,
+			  const __be32 *in_addr);
 int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
 					phys_addr_t compat_off);
 int fdt_alloc_phandle(void *blob);
@@ -239,7 +240,7 @@  static inline u64 of_read_number(const fdt32_t *cell, int size)
 	return r;
 }
 
-void of_bus_default_count_cells(void *blob, int parentoffset,
+void of_bus_default_count_cells(const void *blob, int parentoffset,
 					int *addrc, int *sizec);
 int ft_verify_fdt(void *fdt);
 int arch_fixup_memory_node(void *blob);