bonito.c (25cca0a9b789244f89b24ed628b0dd6b0a169acc) bonito.c (a0b544c1c95df240629964636479fc113086d57b)
1/*
2 * bonito north bridge support
3 *
4 * Copyright (c) 2008 yajin (yajin@vm-kernel.org)
5 * Copyright (c) 2010 Huacai Chen (zltjiangshi@gmail.com)
6 *
7 * This code is licensed under the GNU GPL v2.
8 *

--- 25 unchanged lines hidden (view full) ---

34 * fun_no [10:8]
35 * reg_no [7:2]
36 *
37 * so function bonito_sbridge_pciaddr for the translation from
38 * north bridge address to pci address.
39 */
40
41#include "qemu/osdep.h"
1/*
2 * bonito north bridge support
3 *
4 * Copyright (c) 2008 yajin (yajin@vm-kernel.org)
5 * Copyright (c) 2010 Huacai Chen (zltjiangshi@gmail.com)
6 *
7 * This code is licensed under the GNU GPL v2.
8 *

--- 25 unchanged lines hidden (view full) ---

34 * fun_no [10:8]
35 * reg_no [7:2]
36 *
37 * so function bonito_sbridge_pciaddr for the translation from
38 * north bridge address to pci address.
39 */
40
41#include "qemu/osdep.h"
42#include "qemu/units.h"
42#include "qemu/error-report.h"
43#include "hw/pci/pci.h"
44#include "hw/irq.h"
45#include "hw/mips/mips.h"
46#include "hw/pci/pci_host.h"
47#include "migration/vmstate.h"
48#include "sysemu/reset.h"
49#include "sysemu/runstate.h"

--- 27 unchanged lines hidden (view full) ---

77#define BONITO_PCILO_BASE 0x10000000
78#define BONITO_PCILO_BASE_VA 0xb0000000
79#define BONITO_PCILO_SIZE 0x0c000000
80#define BONITO_PCILO_TOP (BONITO_PCILO_BASE + BONITO_PCILO_SIZE - 1)
81#define BONITO_PCILO0_BASE 0x10000000
82#define BONITO_PCILO1_BASE 0x14000000
83#define BONITO_PCILO2_BASE 0x18000000
84#define BONITO_PCIHI_BASE 0x20000000
43#include "qemu/error-report.h"
44#include "hw/pci/pci.h"
45#include "hw/irq.h"
46#include "hw/mips/mips.h"
47#include "hw/pci/pci_host.h"
48#include "migration/vmstate.h"
49#include "sysemu/reset.h"
50#include "sysemu/runstate.h"

--- 27 unchanged lines hidden (view full) ---

78#define BONITO_PCILO_BASE 0x10000000
79#define BONITO_PCILO_BASE_VA 0xb0000000
80#define BONITO_PCILO_SIZE 0x0c000000
81#define BONITO_PCILO_TOP (BONITO_PCILO_BASE + BONITO_PCILO_SIZE - 1)
82#define BONITO_PCILO0_BASE 0x10000000
83#define BONITO_PCILO1_BASE 0x14000000
84#define BONITO_PCILO2_BASE 0x18000000
85#define BONITO_PCIHI_BASE 0x20000000
85#define BONITO_PCIHI_SIZE 0x20000000
86#define BONITO_PCIHI_SIZE 0x60000000
86#define BONITO_PCIHI_TOP (BONITO_PCIHI_BASE + BONITO_PCIHI_SIZE - 1)
87#define BONITO_PCIIO_BASE 0x1fd00000
88#define BONITO_PCIIO_BASE_VA 0xbfd00000
89#define BONITO_PCIIO_SIZE 0x00010000
90#define BONITO_PCIIO_TOP (BONITO_PCIIO_BASE + BONITO_PCIIO_SIZE - 1)
91#define BONITO_PCICFG_BASE 0x1fe80000
92#define BONITO_PCICFG_SIZE 0x00080000
93#define BONITO_PCICFG_TOP (BONITO_PCICFG_BASE + BONITO_PCICFG_SIZE - 1)

--- 506 unchanged lines hidden (view full) ---

600 VMSTATE_END_OF_LIST()
601 }
602};
603
604static void bonito_pcihost_realize(DeviceState *dev, Error **errp)
605{
606 PCIHostState *phb = PCI_HOST_BRIDGE(dev);
607 BonitoState *bs = BONITO_PCI_HOST_BRIDGE(dev);
87#define BONITO_PCIHI_TOP (BONITO_PCIHI_BASE + BONITO_PCIHI_SIZE - 1)
88#define BONITO_PCIIO_BASE 0x1fd00000
89#define BONITO_PCIIO_BASE_VA 0xbfd00000
90#define BONITO_PCIIO_SIZE 0x00010000
91#define BONITO_PCIIO_TOP (BONITO_PCIIO_BASE + BONITO_PCIIO_SIZE - 1)
92#define BONITO_PCICFG_BASE 0x1fe80000
93#define BONITO_PCICFG_SIZE 0x00080000
94#define BONITO_PCICFG_TOP (BONITO_PCICFG_BASE + BONITO_PCICFG_SIZE - 1)

--- 506 unchanged lines hidden (view full) ---

601 VMSTATE_END_OF_LIST()
602 }
603};
604
605static void bonito_pcihost_realize(DeviceState *dev, Error **errp)
606{
607 PCIHostState *phb = PCI_HOST_BRIDGE(dev);
608 BonitoState *bs = BONITO_PCI_HOST_BRIDGE(dev);
609 MemoryRegion *pcimem_lo_alias = g_new(MemoryRegion, 3);
608
610
609 memory_region_init(&bs->pci_mem, OBJECT(dev), "pci.mem", BONITO_PCILO_SIZE);
611 memory_region_init(&bs->pci_mem, OBJECT(dev), "pci.mem", BONITO_PCIHI_SIZE);
610 phb->bus = pci_register_root_bus(dev, "pci",
611 pci_bonito_set_irq, pci_bonito_map_irq,
612 dev, &bs->pci_mem, get_system_io(),
613 0x28, 32, TYPE_PCI_BUS);
612 phb->bus = pci_register_root_bus(dev, "pci",
613 pci_bonito_set_irq, pci_bonito_map_irq,
614 dev, &bs->pci_mem, get_system_io(),
615 0x28, 32, TYPE_PCI_BUS);
614 memory_region_add_subregion(get_system_memory(), BONITO_PCILO_BASE,
615 &bs->pci_mem);
616
617 for (size_t i = 0; i < 3; i++) {
618 char *name = g_strdup_printf("pci.lomem%zu", i);
619
620 memory_region_init_alias(&pcimem_lo_alias[i], NULL, name,
621 &bs->pci_mem, i * 64 * MiB, 64 * MiB);
622 memory_region_add_subregion(get_system_memory(),
623 BONITO_PCILO_BASE + i * 64 * MiB,
624 &pcimem_lo_alias[i]);
625 g_free(name);
626 }
627
628 create_unimplemented_device("pci.io", BONITO_PCIIO_BASE, 1 * MiB);
616}
617
618static void bonito_realize(PCIDevice *dev, Error **errp)
619{
620 PCIBonitoState *s = PCI_BONITO(dev);
621 SysBusDevice *sysbus = SYS_BUS_DEVICE(s->pcihost);
622 PCIHostState *phb = PCI_HOST_BRIDGE(s->pcihost);
629}
630
631static void bonito_realize(PCIDevice *dev, Error **errp)
632{
633 PCIBonitoState *s = PCI_BONITO(dev);
634 SysBusDevice *sysbus = SYS_BUS_DEVICE(s->pcihost);
635 PCIHostState *phb = PCI_HOST_BRIDGE(s->pcihost);
636 BonitoState *bs = BONITO_PCI_HOST_BRIDGE(s->pcihost);
637 MemoryRegion *pcimem_alias = g_new(MemoryRegion, 1);
623
624 /*
625 * Bonito North Bridge, built on FPGA,
626 * VENDOR_ID/DEVICE_ID are "undefined"
627 */
628 pci_config_set_prog_interface(dev->config, 0x00);
629
630 /* set the north bridge register mapping */

--- 16 unchanged lines hidden (view full) ---

647
648 create_unimplemented_device("bonito", BONITO_REG_BASE, BONITO_REG_SIZE);
649
650 memory_region_init_io(&s->iomem_ldma, OBJECT(s), &bonito_ldma_ops, s,
651 "ldma", 0x100);
652 sysbus_init_mmio(sysbus, &s->iomem_ldma);
653 sysbus_mmio_map(sysbus, 3, 0x1fe00200);
654
638
639 /*
640 * Bonito North Bridge, built on FPGA,
641 * VENDOR_ID/DEVICE_ID are "undefined"
642 */
643 pci_config_set_prog_interface(dev->config, 0x00);
644
645 /* set the north bridge register mapping */

--- 16 unchanged lines hidden (view full) ---

662
663 create_unimplemented_device("bonito", BONITO_REG_BASE, BONITO_REG_SIZE);
664
665 memory_region_init_io(&s->iomem_ldma, OBJECT(s), &bonito_ldma_ops, s,
666 "ldma", 0x100);
667 sysbus_init_mmio(sysbus, &s->iomem_ldma);
668 sysbus_mmio_map(sysbus, 3, 0x1fe00200);
669
670 /* PCI copier */
655 memory_region_init_io(&s->iomem_cop, OBJECT(s), &bonito_cop_ops, s,
656 "cop", 0x100);
657 sysbus_init_mmio(sysbus, &s->iomem_cop);
658 sysbus_mmio_map(sysbus, 4, 0x1fe00300);
659
660 /* Map PCI IO Space 0x1fd0 0000 - 0x1fd1 0000 */
661 memory_region_init_alias(&s->bonito_pciio, OBJECT(s), "isa_mmio",
662 get_system_io(), 0, BONITO_PCIIO_SIZE);
663 sysbus_init_mmio(sysbus, &s->bonito_pciio);
664 sysbus_mmio_map(sysbus, 5, BONITO_PCIIO_BASE);
665
666 /* add pci local io mapping */
667 memory_region_init_alias(&s->bonito_localio, OBJECT(s), "isa_mmio",
668 get_system_io(), 0, BONITO_DEV_SIZE);
669 sysbus_init_mmio(sysbus, &s->bonito_localio);
670 sysbus_mmio_map(sysbus, 6, BONITO_DEV_BASE);
671
671 memory_region_init_io(&s->iomem_cop, OBJECT(s), &bonito_cop_ops, s,
672 "cop", 0x100);
673 sysbus_init_mmio(sysbus, &s->iomem_cop);
674 sysbus_mmio_map(sysbus, 4, 0x1fe00300);
675
676 /* Map PCI IO Space 0x1fd0 0000 - 0x1fd1 0000 */
677 memory_region_init_alias(&s->bonito_pciio, OBJECT(s), "isa_mmio",
678 get_system_io(), 0, BONITO_PCIIO_SIZE);
679 sysbus_init_mmio(sysbus, &s->bonito_pciio);
680 sysbus_mmio_map(sysbus, 5, BONITO_PCIIO_BASE);
681
682 /* add pci local io mapping */
683 memory_region_init_alias(&s->bonito_localio, OBJECT(s), "isa_mmio",
684 get_system_io(), 0, BONITO_DEV_SIZE);
685 sysbus_init_mmio(sysbus, &s->bonito_localio);
686 sysbus_mmio_map(sysbus, 6, BONITO_DEV_BASE);
687
688 memory_region_init_alias(pcimem_alias, NULL, "pci.mem.alias",
689 &bs->pci_mem, 0, BONITO_PCIHI_SIZE);
690 memory_region_add_subregion(get_system_memory(),
691 BONITO_PCIHI_BASE, pcimem_alias);
692 create_unimplemented_device("PCI_2",
693 (hwaddr)BONITO_PCIHI_BASE + BONITO_PCIHI_SIZE,
694 2 * GiB);
695
672 /* set the default value of north bridge pci config */
673 pci_set_word(dev->config + PCI_COMMAND, 0x0000);
674 pci_set_word(dev->config + PCI_STATUS, 0x0000);
675 pci_set_word(dev->config + PCI_SUBSYSTEM_VENDOR_ID, 0x0000);
676 pci_set_word(dev->config + PCI_SUBSYSTEM_ID, 0x0000);
677
678 pci_set_byte(dev->config + PCI_INTERRUPT_LINE, 0x00);
679 pci_set_byte(dev->config + PCI_INTERRUPT_PIN, 0x01);

--- 80 unchanged lines hidden ---
696 /* set the default value of north bridge pci config */
697 pci_set_word(dev->config + PCI_COMMAND, 0x0000);
698 pci_set_word(dev->config + PCI_STATUS, 0x0000);
699 pci_set_word(dev->config + PCI_SUBSYSTEM_VENDOR_ID, 0x0000);
700 pci_set_word(dev->config + PCI_SUBSYSTEM_ID, 0x0000);
701
702 pci_set_byte(dev->config + PCI_INTERRUPT_LINE, 0x00);
703 pci_set_byte(dev->config + PCI_INTERRUPT_PIN, 0x01);

--- 80 unchanged lines hidden ---