From patchwork Wed Mar 19 23:36:04 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andreas_F=C3=A4rber?= X-Patchwork-Id: 331921 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id CB9BF2C00A0 for ; Thu, 20 Mar 2014 10:37:57 +1100 (EST) Received: from localhost ([::1]:44295 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WQQ3X-0000Ep-Ci for incoming@patchwork.ozlabs.org; Wed, 19 Mar 2014 19:37:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41418) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WQQ2o-0008NF-33 for qemu-devel@nongnu.org; Wed, 19 Mar 2014 19:37:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WQQ2f-0005vB-RT for qemu-devel@nongnu.org; Wed, 19 Mar 2014 19:37:09 -0400 Received: from mout.web.de ([212.227.15.3]:57071) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WQQ2f-0005uy-GX; Wed, 19 Mar 2014 19:37:01 -0400 Received: from envy.de ([84.148.52.217]) by smtp.web.de (mrweb001) with ESMTPSA (Nemesis) id 0MFcTl-1WNNcY3b2z-00Ed3I; Thu, 20 Mar 2014 00:36:16 +0100 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= To: qemu-devel@nongnu.org Date: Thu, 20 Mar 2014 00:36:04 +0100 Message-Id: <1395272166-687-6-git-send-email-andreas.faerber@web.de> X-Mailer: git-send-email 1.8.4.5 In-Reply-To: <1395272166-687-1-git-send-email-andreas.faerber@web.de> References: <1395272166-687-1-git-send-email-andreas.faerber@web.de> MIME-Version: 1.0 X-Provags-ID: V03:K0:VoatLk1cHjrSV+8CjUVSLEmMmUSf75gP8HjkcPLBa+4jpuQTi+G q9pzd9yrIvyyji+6/L92b1rdVJK5iT1juumoF2g/3ZqldHLmTsoaFaTMs6r3927ZgDksPyj 0Ym9FhsW1oW6WR/rm7EKm26Rf9EREI6Lq/wVQgJOV9UyOM6NBLasucaHYMsp3AdFhH/PqtK 3LZMHsed0JuMf8LvupiGg== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 212.227.15.3 Cc: =?UTF-8?q?Herv=C3=A9=20Poussineau?= , =?UTF-8?q?Andreas=20F=C3=A4rber?= , qemu-ppc@nongnu.org Subject: [Qemu-devel] [PULL for-2.0 5/7] raven: Add PCI bus mastering address space X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Hervé Poussineau This has been tested on Linux 2.4/PPC with the lsi53c895a SCSI adapter. Signed-off-by: Hervé Poussineau Signed-off-by: Andreas Färber --- hw/pci-host/prep.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c index 7f23a11..8109625 100644 --- a/hw/pci-host/prep.c +++ b/hw/pci-host/prep.c @@ -59,6 +59,10 @@ typedef struct PRePPCIState { MemoryRegion pci_io_non_contiguous; MemoryRegion pci_memory; MemoryRegion pci_intack; + MemoryRegion bm; + MemoryRegion bm_ram_alias; + MemoryRegion bm_pci_memory_alias; + AddressSpace bm_as; RavenPCIState pci_dev; int contiguous_map; @@ -190,6 +194,14 @@ static void prep_set_irq(void *opaque, int irq_num, int level) qemu_set_irq(pic[irq_num] , level); } +static AddressSpace *raven_pcihost_set_iommu(PCIBus *bus, void *opaque, + int devfn) +{ + PREPPCIState *s = opaque; + + return &s->bm_as; +} + static void raven_change_gpio(void *opaque, int n, int level) { PREPPCIState *s = opaque; @@ -255,6 +267,18 @@ static void raven_pcihost_initfn(Object *obj) pci_bus_new_inplace(&s->pci_bus, sizeof(s->pci_bus), DEVICE(obj), NULL, &s->pci_memory, &s->pci_io, 0, TYPE_PCI_BUS); + /* Bus master address space */ + memory_region_init(&s->bm, obj, "bm-raven", UINT32_MAX); + memory_region_init_alias(&s->bm_pci_memory_alias, obj, "bm-pci-memory", + &s->pci_memory, 0, + memory_region_size(&s->pci_memory)); + memory_region_init_alias(&s->bm_ram_alias, obj, "bm-system", + get_system_memory(), 0, 0x80000000); + memory_region_add_subregion(&s->bm, 0 , &s->bm_pci_memory_alias); + memory_region_add_subregion(&s->bm, 0x80000000, &s->bm_ram_alias); + address_space_init(&s->bm_as, &s->bm, "raven-bm"); + pci_setup_iommu(&s->pci_bus, raven_pcihost_set_iommu, s); + h->bus = &s->pci_bus; object_initialize(&s->pci_dev, sizeof(s->pci_dev), TYPE_RAVEN_PCI_DEVICE);