diff mbox

[U-Boot,RFC,3/5] common/board_r: manual relocation for cmd table

Message ID 1421710147-5550-4-git-send-email-andreas.devel@googlemail.com
State RFC, archived
Delegated to: Andreas Bießmann
Headers show

Commit Message

Andreas Bießmann Jan. 19, 2015, 11:29 p.m. UTC
This is required for architectures still need manual relocation like avr32, mk68
and others.

Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
---

 common/board_r.c |   12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Simon Glass Jan. 19, 2015, 11:34 p.m. UTC | #1
Hi Andreas,

On 19 January 2015 at 16:29, Andreas Bießmann
<andreas.devel@googlemail.com> wrote:
> This is required for architectures still need manual relocation like avr32, mk68
> and others.
>
> Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
> ---
>
>  common/board_r.c |   12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/common/board_r.c b/common/board_r.c
> index a301cc2..e712902 100644
> --- a/common/board_r.c
> +++ b/common/board_r.c
> @@ -294,6 +294,15 @@ static int initr_announce(void)
>         return 0;
>  }
>
> +#ifdef CONFIG_NEEDS_MANUAL_RELOC
> +static int initr_manual_reloc_cmdtable(void)
> +{
> +       fixup_cmdtable(ll_entry_start(cmd_tbl_t, cmd),
> +                      ll_entry_count(cmd_tbl_t, cmd));
> +       return 0;
> +}
> +#endif
> +
>  #if !defined(CONFIG_SYS_NO_FLASH)
>  static int initr_flash(void)
>  {
> @@ -718,6 +727,9 @@ init_fnc_t init_sequence_r[] = {
>         initr_serial,
>         initr_announce,
>         INIT_FUNC_WATCHDOG_RESET
> +#ifdef CONFIG_NEEDS_MANUAL_RELOC
> +       initr_manual_reloc_cmdtable,
> +#endif
>  #ifdef CONFIG_PPC
>         initr_trap,
>  #endif
> --

Reviewed-by: Simon Glass <sjg@chromium.org>

Why do you need manual reloc? Is this a toolchain bug?

Regards,
Simon
Andreas Bießmann Jan. 19, 2015, 11:41 p.m. UTC | #2
Hi Simon,

On 20.01.15 00:34, Simon Glass wrote:
> Hi Andreas,
> 
> On 19 January 2015 at 16:29, Andreas Bießmann
> <andreas.devel@googlemail.com> wrote:
>> This is required for architectures still need manual relocation like avr32, mk68
>> and others.
>>
>> Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
>> ---
>>
>>  common/board_r.c |   12 ++++++++++++
>>  1 file changed, 12 insertions(+)
>>
>> diff --git a/common/board_r.c b/common/board_r.c
>> index a301cc2..e712902 100644
>> --- a/common/board_r.c
>> +++ b/common/board_r.c
>> @@ -294,6 +294,15 @@ static int initr_announce(void)
>>         return 0;
>>  }
>>
>> +#ifdef CONFIG_NEEDS_MANUAL_RELOC
>> +static int initr_manual_reloc_cmdtable(void)
>> +{
>> +       fixup_cmdtable(ll_entry_start(cmd_tbl_t, cmd),
>> +                      ll_entry_count(cmd_tbl_t, cmd));
>> +       return 0;
>> +}
>> +#endif
>> +
>>  #if !defined(CONFIG_SYS_NO_FLASH)
>>  static int initr_flash(void)
>>  {
>> @@ -718,6 +727,9 @@ init_fnc_t init_sequence_r[] = {
>>         initr_serial,
>>         initr_announce,
>>         INIT_FUNC_WATCHDOG_RESET
>> +#ifdef CONFIG_NEEDS_MANUAL_RELOC
>> +       initr_manual_reloc_cmdtable,
>> +#endif
>>  #ifdef CONFIG_PPC
>>         initr_trap,
>>  #endif
>> --
> 
> Reviewed-by: Simon Glass <sjg@chromium.org>
> 
> Why do you need manual reloc? Is this a toolchain bug?

Just not implemented yet for avr32. It is on my list, but avr32 has not
my highest priority ;)
As long as there are other arches which need this also I think it is
some more time to shift ... the generic board deadline end of 2014 was a
bit stricter, I don't want to kick avr32 out of u-boot now. So let's get
generic board working for avr32 in the next release ;)

Best regards

Andreas Bießmann
Simon Glass Jan. 20, 2015, 12:13 a.m. UTC | #3
Hi Andreas,

On 19 January 2015 at 16:41, Andreas Bießmann
<andreas.devel@googlemail.com> wrote:
> Hi Simon,
>
> On 20.01.15 00:34, Simon Glass wrote:
>> Hi Andreas,
>>
>> On 19 January 2015 at 16:29, Andreas Bießmann
>> <andreas.devel@googlemail.com> wrote:
>>> This is required for architectures still need manual relocation like avr32, mk68
>>> and others.
>>>
>>> Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
>>> ---
>>>
>>>  common/board_r.c |   12 ++++++++++++
>>>  1 file changed, 12 insertions(+)
>>>
>>> diff --git a/common/board_r.c b/common/board_r.c
>>> index a301cc2..e712902 100644
>>> --- a/common/board_r.c
>>> +++ b/common/board_r.c
>>> @@ -294,6 +294,15 @@ static int initr_announce(void)
>>>         return 0;
>>>  }
>>>
>>> +#ifdef CONFIG_NEEDS_MANUAL_RELOC
>>> +static int initr_manual_reloc_cmdtable(void)
>>> +{
>>> +       fixup_cmdtable(ll_entry_start(cmd_tbl_t, cmd),
>>> +                      ll_entry_count(cmd_tbl_t, cmd));
>>> +       return 0;
>>> +}
>>> +#endif
>>> +
>>>  #if !defined(CONFIG_SYS_NO_FLASH)
>>>  static int initr_flash(void)
>>>  {
>>> @@ -718,6 +727,9 @@ init_fnc_t init_sequence_r[] = {
>>>         initr_serial,
>>>         initr_announce,
>>>         INIT_FUNC_WATCHDOG_RESET
>>> +#ifdef CONFIG_NEEDS_MANUAL_RELOC
>>> +       initr_manual_reloc_cmdtable,
>>> +#endif
>>>  #ifdef CONFIG_PPC
>>>         initr_trap,
>>>  #endif
>>> --
>>
>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>
>> Why do you need manual reloc? Is this a toolchain bug?
>
> Just not implemented yet for avr32. It is on my list, but avr32 has not
> my highest priority ;)
> As long as there are other arches which need this also I think it is
> some more time to shift ... the generic board deadline end of 2014 was a
> bit stricter, I don't want to kick avr32 out of u-boot now. So let's get
> generic board working for avr32 in the next release ;)

OK - it would be good to tidy this up.

Regards,
Simon
Alexey Brodkin Jan. 20, 2015, 12:42 p.m. UTC | #4
Hi Simon,

On Mon, 2015-01-19 at 16:34 -0700, Simon Glass wrote:
> Hi Andreas,

> Why do you need manual reloc? Is this a toolchain bug?

From my experience the only way to escape manual relocation is to use
PIE (Position Independent Executable), but this might not be supported
in a toolchain for AVR (or it doesn't actually work good enough - this I
understood from this message
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=574716)

-Alexey
Michal Simek Jan. 27, 2015, 3:18 p.m. UTC | #5
2015-01-20 0:34 GMT+01:00 Simon Glass <sjg@chromium.org>:

> Hi Andreas,
>
> On 19 January 2015 at 16:29, Andreas Bießmann
> <andreas.devel@googlemail.com> wrote:
> > This is required for architectures still need manual relocation like
> avr32, mk68
> > and others.
> >
> > Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
> > ---
> >
> >  common/board_r.c |   12 ++++++++++++
> >  1 file changed, 12 insertions(+)
> >
> > diff --git a/common/board_r.c b/common/board_r.c
> > index a301cc2..e712902 100644
> > --- a/common/board_r.c
> > +++ b/common/board_r.c
> > @@ -294,6 +294,15 @@ static int initr_announce(void)
> >         return 0;
> >  }
> >
> > +#ifdef CONFIG_NEEDS_MANUAL_RELOC
> > +static int initr_manual_reloc_cmdtable(void)
> > +{
> > +       fixup_cmdtable(ll_entry_start(cmd_tbl_t, cmd),
> > +                      ll_entry_count(cmd_tbl_t, cmd));
> > +       return 0;
> > +}
> > +#endif
> > +
> >  #if !defined(CONFIG_SYS_NO_FLASH)
> >  static int initr_flash(void)
> >  {
> > @@ -718,6 +727,9 @@ init_fnc_t init_sequence_r[] = {
> >         initr_serial,
> >         initr_announce,
> >         INIT_FUNC_WATCHDOG_RESET
> > +#ifdef CONFIG_NEEDS_MANUAL_RELOC
> > +       initr_manual_reloc_cmdtable,
> > +#endif
> >  #ifdef CONFIG_PPC
> >         initr_trap,
> >  #endif
> > --
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>

Tested-by: Michal Simek <michal.simek@xilinx.com>

I need this patch for microblaze generic-board support.

Thanks,
Michal
diff mbox

Patch

diff --git a/common/board_r.c b/common/board_r.c
index a301cc2..e712902 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -294,6 +294,15 @@  static int initr_announce(void)
 	return 0;
 }
 
+#ifdef CONFIG_NEEDS_MANUAL_RELOC
+static int initr_manual_reloc_cmdtable(void)
+{
+	fixup_cmdtable(ll_entry_start(cmd_tbl_t, cmd),
+		       ll_entry_count(cmd_tbl_t, cmd));
+	return 0;
+}
+#endif
+
 #if !defined(CONFIG_SYS_NO_FLASH)
 static int initr_flash(void)
 {
@@ -718,6 +727,9 @@  init_fnc_t init_sequence_r[] = {
 	initr_serial,
 	initr_announce,
 	INIT_FUNC_WATCHDOG_RESET
+#ifdef CONFIG_NEEDS_MANUAL_RELOC
+	initr_manual_reloc_cmdtable,
+#endif
 #ifdef CONFIG_PPC
 	initr_trap,
 #endif