[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamicall
From: |
Alexander Graf |
Subject: |
Re: [Qemu-ppc] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically |
Date: |
Thu, 13 Dec 2012 00:38:32 +0100 |
On 12.12.2012, at 19:40, Scott Wood wrote:
> On 12/12/2012 08:09:56 AM, Alexander Graf wrote:
>> Today we're hardcoding the PCI interrupt map in the e500 machine file.
>> Instead, let's write it dynamically so that different machine types
>> can have different slot properties.
>> Signed-off-by: Alexander Graf <address@hidden>
>> ---
>> hw/ppc/e500.c | 51 +++++++++++++++++++++++++++++++--------------------
>> 1 files changed, 31 insertions(+), 20 deletions(-)
>> diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
>> index 1034f93..ebb6d96 100644
>> --- a/hw/ppc/e500.c
>> +++ b/hw/ppc/e500.c
>> @@ -66,25 +66,33 @@ struct boot_info
>> uint32_t entry;
>> };
>> -static void pci_map_create(void *fdt, uint32_t *pci_map, uint32_t mpic)
>> +static uint32_t *pci_map_create(void *fdt, uint32_t mpic, int first_slot,
>> + int nr_slots, int *len)
>> {
>> - int i;
>> - const uint32_t tmp[] = {
>> - /* IDSEL 0x11 J17 Slot 1 */
>> - 0x8800, 0x0, 0x0, 0x1, mpic, 0x2, 0x1,
>> - 0x8800, 0x0, 0x0, 0x2, mpic, 0x3, 0x1,
>> - 0x8800, 0x0, 0x0, 0x3, mpic, 0x4, 0x1,
>> - 0x8800, 0x0, 0x0, 0x4, mpic, 0x1, 0x1,
>> -
>> - /* IDSEL 0x12 J16 Slot 2 */
>> - 0x9000, 0x0, 0x0, 0x1, mpic, 0x3, 0x1,
>> - 0x9000, 0x0, 0x0, 0x2, mpic, 0x4, 0x1,
>> - 0x9000, 0x0, 0x0, 0x3, mpic, 0x2, 0x1,
>> - 0x9000, 0x0, 0x0, 0x4, mpic, 0x1, 0x1,
>> - };
>> - for (i = 0; i < (7 * 8); i++) {
>> - pci_map[i] = cpu_to_be32(tmp[i]);
>> + int i = 0;
>> + int slot;
>> + int pci_irq;
>> + int last_slot = first_slot + nr_slots;
>> + uint32_t *pci_map;
>> +
>> + *len = nr_slots * 4 * 7 * sizeof(uint32_t);
>> + pci_map = g_malloc(*len);
>> +
>> + for (slot = first_slot; slot < last_slot; slot++) {
>> + for (pci_irq = 0; pci_irq < 4; pci_irq++) {
>> + pci_map[i++] = cpu_to_be32(slot << 11);
>> + pci_map[i++] = cpu_to_be32(0x0);
>> + pci_map[i++] = cpu_to_be32(0x0);
>> + pci_map[i++] = cpu_to_be32(pci_irq + 1);
>> + pci_map[i++] = cpu_to_be32(mpic);
>> + pci_map[i++] = cpu_to_be32(((pci_irq + slot) % 4) + 1);
>> + pci_map[i++] = cpu_to_be32(0x1);
>> + }
>> }
>
> It would be nice if the slot-to-IRQ calculation were done in only one place
> rather than duplicated here.
Sure, what exactly would you suggest to do? :)
We can move the whole function to ppce500_pci.c. We could export the
function(slot, pci_irq) through the header of ppce500_pci.c. We could also try
and traverse the pci bus to find the function that is actually called to
convert irq numbers internally, so we potentially support other pci host
controllers.
Alex
- [Qemu-ppc] [PATCH 0/5] PPC: e500: Enable more PCI slots for -M ppce500, Alexander Graf, 2012/12/12
- [Qemu-ppc] [PATCH 4/5] PPC: E500: Move PCI slot information into params, Alexander Graf, 2012/12/12
- [Qemu-ppc] [PATCH 5/5] PPC: E500plat: Make a lot of PCI slots available, Alexander Graf, 2012/12/12
- [Qemu-ppc] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically, Alexander Graf, 2012/12/12
- Re: [Qemu-ppc] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically, Scott Wood, 2012/12/12
- Re: [Qemu-ppc] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically,
Alexander Graf <=
- Re: [Qemu-ppc] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically, Scott Wood, 2012/12/12
- Re: [Qemu-ppc] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically, Alexander Graf, 2012/12/12
- Re: [Qemu-ppc] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically, Scott Wood, 2012/12/12
- Re: [Qemu-ppc] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically, Alexander Graf, 2012/12/12
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically, Scott Wood, 2012/12/12
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 3/5] PPC: E500: Generate dt pci irq map dynamically, Alexander Graf, 2012/12/12
[Qemu-ppc] [PATCH 2/5] PPC: E500: PCI: Make IRQ calculation more generic, Alexander Graf, 2012/12/12
[Qemu-ppc] [PATCH 1/5] PPC: E500: PCI: Make first slot qdev settable, Alexander Graf, 2012/12/12