Commit 9e2c1298 authored by Alexander Graf's avatar Alexander Graf
Browse files

PPC: e500: pci: Export slot2irq calculation



We need the calculation method to get from a PCI slot ID to its respective
interrupt line twice. Once in the internal map function and once when
assembling the device tree.

So let's extract the calculation to a separate function that can be called
by both users.

Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent 3bb7e02a
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
#include "hw/sysbus.h"
#include "exec-memory.h"
#include "host-utils.h"
#include "hw/ppce500_pci.h"

#define BINARY_DEVICE_TREE_FILE    "mpc8544ds.dtb"
#define UIMAGE_LOAD_BASE           0
@@ -72,6 +73,7 @@ static uint32_t *pci_map_create(void *fdt, uint32_t mpic, int first_slot,
    int i = 0;
    int slot;
    int pci_irq;
    int host_irq;
    int last_slot = first_slot + nr_slots;
    uint32_t *pci_map;

@@ -85,7 +87,8 @@ static uint32_t *pci_map_create(void *fdt, uint32_t mpic, int first_slot,
            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);
            host_irq = ppce500_pci_map_irq_slot(slot, pci_irq);
            pci_map[i++] = cpu_to_be32(host_irq + 1);
            pci_map[i++] = cpu_to_be32(0x1);
        }
    }
+2 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include "pci.h"
#include "pci_host.h"
#include "bswap.h"
#include "ppce500_pci.h"

#ifdef DEBUG_PCI
#define pci_debug(fmt, ...) fprintf(stderr, fmt, ## __VA_ARGS__)
@@ -256,7 +257,7 @@ static int mpc85xx_pci_map_irq(PCIDevice *pci_dev, int irq_num)
    int devno = pci_dev->devfn >> 3;
    int ret;

    ret = (irq_num + devno) % 4;
    ret = ppce500_pci_map_irq_slot(devno, irq_num);

    pci_debug("%s: devfn %x irq %d -> %d  devno:%x\n", __func__,
           pci_dev->devfn, irq_num, ret, devno);

hw/ppce500_pci.h

0 → 100644
+9 −0
Original line number Diff line number Diff line
#ifndef PPCE500_PCI_H
#define PPCE500_PCI_H

static inline int ppce500_pci_map_irq_slot(int devno, int irq_num)
{
    return (devno + irq_num) % 4;
}

#endif