Revision a94fd955

b/hw/apb_pci.c
22 22
 * THE SOFTWARE.
23 23
 */
24 24

  
25
/* XXX This file and most of its contests are somewhat misnamed.  The
25
/* XXX This file and most of its contents are somewhat misnamed.  The
26 26
   Ultrasparc PCI host is called the PCI Bus Module (PBM).  The APB is
27 27
   the secondary PCI bridge.  */
28 28

  
29 29
#include "hw.h"
30 30
#include "pci.h"
31

  
32
/* debug APB */
33
//#define DEBUG_APB
34

  
35
#ifdef DEBUG_APB
36
#define APB_DPRINTF(fmt, args...) \
37
do { printf("APB: " fmt , ##args); } while (0)
38
#else
39
#define APB_DPRINTF(fmt, args...)
40
#endif
41

  
31 42
typedef target_phys_addr_t pci_addr_t;
32 43
#include "pci_host.h"
33 44

  
......
37 48
                                         uint32_t val)
38 49
{
39 50
    APBState *s = opaque;
40
    int i;
41 51

  
42
    for (i = 11; i < 32; i++) {
43
        if ((val & (1 << i)) != 0)
44
            break;
45
    }
46
    s->config_reg = (1 << 16) | (val & 0x7FC) | (i << 11);
52
#ifdef TARGET_WORDS_BIGENDIAN
53
    val = bswap32(val);
54
#endif
55
    APB_DPRINTF("config_writel addr " TARGET_FMT_plx " val %x\n", addr,
56
                val);
57
    s->config_reg = val;
47 58
}
48 59

  
49 60
static uint32_t pci_apb_config_readl (void *opaque,
......
51 62
{
52 63
    APBState *s = opaque;
53 64
    uint32_t val;
54
    int devfn;
55 65

  
56
    devfn = (s->config_reg >> 8) & 0xFF;
57
    val = (1 << (devfn >> 3)) | ((devfn & 0x07) << 8) | (s->config_reg & 0xFC);
66
    val = s->config_reg;
67
#ifdef TARGET_WORDS_BIGENDIAN
68
    val = bswap32(val);
69
#endif
70
    APB_DPRINTF("config_readl addr " TARGET_FMT_plx " val %x\n", addr,
71
                val);
58 72
    return val;
59 73
}
60 74

  
......
259 273
                                "Advanced PCI Bus secondary bridge 1");
260 274
    pci_bridge_init(s->bus, 9, 0x108e5000, pci_apb_map_irq,
261 275
                    "Advanced PCI Bus secondary bridge 2");
262
    return secondary;
276
    return s->bus;
263 277
}
b/hw/sun4u.c
465 465
    pci_bus = pci_apb_init(APB_SPECIAL_BASE, APB_MEM_BASE, NULL);
466 466
    isa_mem_base = VGA_BASE;
467 467
    vga_ram_offset = qemu_ram_alloc(vga_ram_size);
468
    pci_cirrus_vga_init(pci_bus, ds, phys_ram_base + vga_ram_offset,
469
                        vga_ram_offset, vga_ram_size);
468
    pci_vga_init(pci_bus, ds, phys_ram_base + vga_ram_offset,
469
                 vga_ram_offset, vga_ram_size,
470
                 0, 0);
470 471

  
471 472
    i = 0;
472 473
    if (hwdef->console_serial_base) {

Also available in: Unified diff