[U-Boot] [PATCH v2 52/63] x86: Move pirq_routing_table to global_data

Simon Glass sjg at chromium.org
Mon Jan 16 15:08:24 CET 2017


Hi Bin,

On 14 January 2017 at 06:32, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Simon,
>
> On Sun, Nov 20, 2016 at 4:25 AM, Simon Glass <sjg at chromium.org> wrote:
>> To avoid using BSS in SPL before SDRAM is set up, move this field to
>> global_data.
>>
>
> Why is this needed? pirq routing table setup is done after SDRAM
> initialization. Isn't SPL doing this with a different order?

I'm not sure why it should. SPL sets up SDRAM so it should be able to
set up interrupts, shouldn't it? Some device init may need interrupts,
and my plan was to do all the 32-bit init in SPL.

>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>> ---
>>
>> Changes in v2: None
>>
>>  arch/x86/cpu/irq.c                 | 12 +++++-------
>>  arch/x86/include/asm/global_data.h |  1 +
>>  2 files changed, 6 insertions(+), 7 deletions(-)
>>
>> diff --git a/arch/x86/cpu/irq.c b/arch/x86/cpu/irq.c
>> index e3e928b..442d373 100644
>> --- a/arch/x86/cpu/irq.c
>> +++ b/arch/x86/cpu/irq.c
>> @@ -17,8 +17,6 @@
>>
>>  DECLARE_GLOBAL_DATA_PTR;
>>
>> -static struct irq_routing_table *pirq_routing_table;
>> -
>>  bool pirq_check_irq_routed(struct udevice *dev, int link, u8 irq)
>>  {
>>         struct irq_router *priv = dev_get_priv(dev);
>> @@ -219,7 +217,7 @@ static int create_pirq_routing_table(struct udevice *dev)
>>         /* Fix up the table checksum */
>>         rt->checksum = table_compute_checksum(rt, rt->size);
>>
>> -       pirq_routing_table = rt;
>> +       gd->arch.pirq_routing_table = rt;
>>
>>         return 0;
>>  }
>> @@ -250,8 +248,8 @@ int irq_router_common_init(struct udevice *dev)
>>                 return ret;
>>         }
>>         /* Route PIRQ */
>> -       pirq_route_irqs(dev, pirq_routing_table->slots,
>> -                       get_irq_slot_count(pirq_routing_table));
>> +       pirq_route_irqs(dev, gd->arch.pirq_routing_table->slots,
>> +                       get_irq_slot_count(gd->arch.pirq_routing_table));
>>
>>         if (IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE))
>>                 irq_enable_sci(dev);
>> @@ -266,10 +264,10 @@ int irq_router_probe(struct udevice *dev)
>>
>>  ulong write_pirq_routing_table(ulong addr)
>>  {
>> -       if (!pirq_routing_table)
>> +       if (!gd->arch.pirq_routing_table)
>>                 return addr;
>>
>> -       return copy_pirq_routing_table(addr, pirq_routing_table);
>> +       return copy_pirq_routing_table(addr, gd->arch.pirq_routing_table);
>>  }
>>
>>  static const struct udevice_id irq_router_ids[] = {
>> diff --git a/arch/x86/include/asm/global_data.h b/arch/x86/include/asm/global_data.h
>> index ce9e5cc..e24cee7 100644
>> --- a/arch/x86/include/asm/global_data.h
>> +++ b/arch/x86/include/asm/global_data.h
>> @@ -93,6 +93,7 @@ struct arch_global_data {
>>         char *mrc_output;
>>         unsigned int mrc_output_len;
>>         ulong table;                    /* Table pointer from previous loader */
>> +       struct irq_routing_table *pirq_routing_table;
>>  #ifdef CONFIG_SEABIOS
>>         u32 high_table_ptr;
>>         u32 high_table_limit;
>> --
>
> Regards,
> Bin

Regards,
Simon


More information about the U-Boot mailing list