From patchwork Wed May 18 02:19:01 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isaku Yamahata X-Patchwork-Id: 96115 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id ED0C6B6EE6 for ; Wed, 18 May 2011 12:19:22 +1000 (EST) Received: from localhost ([::1]:56975 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QMWM2-0003bd-6A for incoming@patchwork.ozlabs.org; Tue, 17 May 2011 22:19:18 -0400 Received: from eggs.gnu.org ([140.186.70.92]:48099) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QMWLs-0003XN-8v for qemu-devel@nongnu.org; Tue, 17 May 2011 22:19:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QMWLp-0003IF-KC for qemu-devel@nongnu.org; Tue, 17 May 2011 22:19:08 -0400 Received: from mail.valinux.co.jp ([210.128.90.3]:49256) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QMWLo-0003Hg-Sg for qemu-devel@nongnu.org; Tue, 17 May 2011 22:19:05 -0400 Received: from ps.local.valinux.co.jp (vagw.valinux.co.jp [210.128.90.14]) by mail.valinux.co.jp (Postfix) with SMTP id AE55C1896B; Wed, 18 May 2011 11:19:01 +0900 (JST) Received: (nullmailer pid 10561 invoked by uid 1000); Wed, 18 May 2011 02:19:01 -0000 Date: Wed, 18 May 2011 11:19:01 +0900 From: Isaku Yamahata To: qemu-devel@nongnu.org Message-ID: <20110518021901.GC1705@valinux.co.jp> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.19 (2009-01-05) X-Virus-Scanned: clamav-milter 0.95.2 at va-mail.local.valinux.co.jp X-Virus-Status: Clean X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 210.128.90.3 Cc: mst@redhat.com Subject: Re: [Qemu-devel] [PATCH v2 00/38] pci: initialize ids in pci common code 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 Here is the prog_interface part. You were unsure about prog_interface, so I split it out. Thus you can determine if prog_interface conversion is wanted or not. From abaf67175190c2f4d0c222c2ae8010e9de38bf59 Mon Sep 17 00:00:00 2001 Message-Id: From: Isaku Yamahata Date: Wed, 18 May 2011 09:58:21 +0900 Subject: [PATCH] pci: initialize prog_interface by common code Add prog_interface to PCIDeviceInfo and initialize prog_interface register in the common initialization code. It's read-only register. Signed-off-by: Isaku Yamahata --- hw/ac97.c | 2 -- hw/acpi_piix4.c | 1 - hw/bonito.c | 3 --- hw/grackle_pci.c | 2 +- hw/gt64xxx.c | 1 - hw/ide/cmd646.c | 3 +-- hw/ide/ich.c | 3 +-- hw/ide/piix.c | 5 ++--- hw/ide/via.c | 2 +- hw/pci.c | 1 + hw/pci.h | 1 + hw/sun4u.c | 1 - hw/usb-ohci.c | 2 +- hw/usb-uhci.c | 1 - hw/vt82c686.c | 4 ---- 15 files changed, 9 insertions(+), 23 deletions(-) diff --git a/hw/ac97.c b/hw/ac97.c index bf1d1d4..ec2b928 100644 --- a/hw/ac97.c +++ b/hw/ac97.c @@ -1289,8 +1289,6 @@ static int ac97_initfn (PCIDevice *dev) c[PCI_STATUS] = PCI_STATUS_FAST_BACK; /* pcists pci status rwc, ro */ c[PCI_STATUS + 1] = PCI_STATUS_DEVSEL_MEDIUM >> 8; - c[PCI_CLASS_PROG] = 0x00; /* pi programming interface ro */ - /* TODO set when bar is registered. no need to override. */ /* nabmar native audio mixer base address rw */ c[PCI_BASE_ADDRESS_0] = PCI_BASE_ADDRESS_SPACE_IO; diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c index 03d833a..4e5674f 100644 --- a/hw/acpi_piix4.c +++ b/hw/acpi_piix4.c @@ -319,7 +319,6 @@ static int piix4_pm_initfn(PCIDevice *dev) pci_conf = s->dev.config; pci_conf[0x06] = 0x80; pci_conf[0x07] = 0x02; - pci_conf[0x09] = 0x00; pci_conf[0x3d] = 0x01; // interrupt pin 1 pci_conf[0x40] = 0x01; /* PM io base read only bit */ diff --git a/hw/bonito.c b/hw/bonito.c index e8c57a3..d1e6d1f 100644 --- a/hw/bonito.c +++ b/hw/bonito.c @@ -690,9 +690,6 @@ static int bonito_initfn(PCIDevice *dev) { PCIBonitoState *s = DO_UPCAST(PCIBonitoState, dev, dev); - /* Bonito North Bridge, built on FPGA, VENDOR_ID/DEVICE_ID are "undefined" */ - pci_config_set_prog_interface(dev->config, 0x00); - /* set the north bridge register mapping */ s->bonito_reg_handle = cpu_register_io_memory(bonito_read, bonito_write, s, DEVICE_NATIVE_ENDIAN); diff --git a/hw/grackle_pci.c b/hw/grackle_pci.c index 7a5221c..46ead7b 100644 --- a/hw/grackle_pci.c +++ b/hw/grackle_pci.c @@ -104,7 +104,6 @@ static int pci_grackle_init_device(SysBusDevice *dev) static int grackle_pci_host_init(PCIDevice *d) { - d->config[0x09] = 0x01; return 0; } @@ -115,6 +114,7 @@ static PCIDeviceInfo grackle_pci_host_info = { .vendor_id = PCI_VENDOR_ID_MOTOROLA, .device_id = PCI_DEVICE_ID_MOTOROLA_MPC106, .revision = 0x00, // revision + .prog_interface = 0x01, .class_id = PCI_CLASS_BRIDGE_HOST, }; diff --git a/hw/gt64xxx.c b/hw/gt64xxx.c index 8e1f6a0..54ace8e 100644 --- a/hw/gt64xxx.c +++ b/hw/gt64xxx.c @@ -1121,7 +1121,6 @@ static int gt64120_pci_init(PCIDevice *d) pci_set_word(d->config + PCI_COMMAND, 0); pci_set_word(d->config + PCI_STATUS, PCI_STATUS_FAST_BACK | PCI_STATUS_DEVSEL_MEDIUM); - pci_config_set_prog_interface(d->config, 0); pci_set_long(d->config + PCI_BASE_ADDRESS_0, 0x00000008); pci_set_long(d->config + PCI_BASE_ADDRESS_1, 0x01000008); pci_set_long(d->config + PCI_BASE_ADDRESS_2, 0x1c000000); diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c index 56302b5..0ca9767 100644 --- a/hw/ide/cmd646.c +++ b/hw/ide/cmd646.c @@ -226,8 +226,6 @@ static int pci_cmd646_ide_initfn(PCIDevice *dev) qemu_irq *irq; int i; - pci_conf[PCI_CLASS_PROG] = 0x8f; - pci_conf[0x51] = 0x04; // enable IDE0 if (d->secondary) { /* XXX: if not enabled, really disable the seconday IDE controller */ @@ -279,6 +277,7 @@ static PCIDeviceInfo cmd646_ide_info[] = { .vendor_id = PCI_VENDOR_ID_CMD, .device_id = PCI_DEVICE_ID_CMD_646, .revision = 0x07, // IDE controller revision + .prog_intarface = 0x8f, .class_id = PCI_CLASS_STORAGE_IDE, .qdev.props = (Property[]) { DEFINE_PROP_UINT32("secondary", PCIIDEState, secondary, 0), diff --git a/hw/ide/ich.c b/hw/ide/ich.c index cb1c405..784bd96 100644 --- a/hw/ide/ich.c +++ b/hw/ide/ich.c @@ -77,8 +77,6 @@ static int pci_ich9_ahci_init(PCIDevice *dev) struct AHCIPCIState *d; d = DO_UPCAST(struct AHCIPCIState, card, dev); - pci_config_set_prog_interface(d->card.config, AHCI_PROGMODE_MAJOR_REV_1); - d->card.config[PCI_CACHE_LINE_SIZE] = 0x08; /* Cache line size */ d->card.config[PCI_LATENCY_TIMER] = 0x00; /* Latency timer */ pci_config_set_interrupt_pin(d->card.config, 1); @@ -129,6 +127,7 @@ static PCIDeviceInfo ich_ahci_info[] = { .vendor_id = PCI_VENDOR_ID_INTEL, .device_id = PCI_DEVICE_ID_INTEL_82801IR, .revision = 0x02, + .prog_interface = AHCI_PROGMODE_MAJOR_REV_1, .class_id = PCI_CLASS_STORAGE_SATA, },{ /* end of list */ diff --git a/hw/ide/piix.c b/hw/ide/piix.c index 84f72b0..c62e2e0 100644 --- a/hw/ide/piix.c +++ b/hw/ide/piix.c @@ -134,9 +134,6 @@ static void pci_piix_init_ports(PCIIDEState *d) { static int pci_piix_ide_initfn(PCIDevice *dev) { PCIIDEState *d = DO_UPCAST(PCIIDEState, dev, dev); - uint8_t *pci_conf = d->dev.config; - - pci_conf[PCI_CLASS_PROG] = 0x80; // legacy ATA mode qemu_register_reset(piix3_reset, d); @@ -180,6 +177,7 @@ static PCIDeviceInfo piix_ide_info[] = { .init = pci_piix_ide_initfn, .vendor_id = PCI_VENDOR_ID_INTEL, .device_id = PCI_DEVICE_ID_INTEL_82371SB_1, + .prog_interface = 0x80, // legacy ATA mode .class_id = PCI_CLASS_STORAGE_IDE, },{ .qdev.name = "piix4-ide", @@ -189,6 +187,7 @@ static PCIDeviceInfo piix_ide_info[] = { .init = pci_piix_ide_initfn, .vendor_id = PCI_VENDOR_ID_INTEL, .device_id = PCI_DEVICE_ID_INTEL_82371AB, + .prog_interface = 0x80, // legacy ATA mode .class_id = PCI_CLASS_STORAGE_IDE, },{ /* end of list */ diff --git a/hw/ide/via.c b/hw/ide/via.c index e9e67de..3901bfa 100644 --- a/hw/ide/via.c +++ b/hw/ide/via.c @@ -160,7 +160,6 @@ static int vt82c686b_ide_initfn(PCIDevice *dev) PCIIDEState *d = DO_UPCAST(PCIIDEState, dev, dev);; uint8_t *pci_conf = d->dev.config; - pci_config_set_prog_interface(pci_conf, 0x8a); /* legacy ATA mode */ pci_set_long(pci_conf + PCI_CAPABILITY_LIST, 0x000000c0); qemu_register_reset(via_reset, d); @@ -190,6 +189,7 @@ static PCIDeviceInfo via_ide_info = { .vendor_id = PCI_VENDOR_ID_VIA, .device_id = PCI_DEVICE_ID_VIA_IDE, .revision = 0x06, /* Revision 0.6 */ + .prog_interface = 0x8a, /* legacy ATA mode */ .class_id = PCI_CLASS_STORAGE_IDE, }; diff --git a/hw/pci.c b/hw/pci.c index 0e97a02..1452bc1 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -754,6 +754,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, pci_config_set_vendor_id(pci_dev->config, info->vendor_id); pci_config_set_device_id(pci_dev->config, info->device_id); pci_config_set_revision(pci_dev->config, info->revision); + pci_config_set_prog_interface(pci_dev->config, info->prog_interface); pci_config_set_class(pci_dev->config, info->class_id); if (!info->is_bridge) { diff --git a/hw/pci.h b/hw/pci.h index ce214f4..522b9c3 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -436,6 +436,7 @@ typedef struct { uint16_t vendor_id; uint16_t device_id; uint8_t revision; + uint8_t prog_interface; uint16_t class_id; uint16_t subsystem_vendor_id; /* only for header type = 0 */ uint16_t subsystem_id; /* only for header type = 0 */ diff --git a/hw/sun4u.c b/hw/sun4u.c index b95daea..1a70d72 100644 --- a/hw/sun4u.c +++ b/hw/sun4u.c @@ -557,7 +557,6 @@ pci_ebus_init1(PCIDevice *s) s->config[0x05] = 0x00; s->config[0x06] = 0xa0; // status = fast back-to-back, 66MHz, no error s->config[0x07] = 0x03; // status = medium devsel - s->config[0x09] = 0x00; // programming i/f s->config[0x0D] = 0x0a; // latency_timer pci_register_bar(s, 0, 0x1000000, PCI_BASE_ADDRESS_SPACE_MEMORY, diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c index 7ff2322..925da0b 100644 --- a/hw/usb-ohci.c +++ b/hw/usb-ohci.c @@ -1716,7 +1716,6 @@ static int usb_ohci_initfn_pci(struct PCIDevice *dev) OHCIPCIState *ohci = DO_UPCAST(OHCIPCIState, pci_dev, dev); int num_ports = 3; - ohci->pci_dev.config[PCI_CLASS_PROG] = 0x10; /* OHCI */ /* TODO: RST# value should be 0. */ ohci->pci_dev.config[PCI_INTERRUPT_PIN] = 0x01; /* interrupt pin 1 */ @@ -1758,6 +1757,7 @@ static PCIDeviceInfo ohci_pci_info = { .init = usb_ohci_initfn_pci, .vendor_id = PCI_VENDOR_ID_APPLE, .device_id = PCI_DEVICE_ID_APPLE_IPID_USB, + .prog_interface = 0x10, /* OHCI */ .class_id = PCI_CLASS_SERIAL_USB, }; diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c index 536c24c..00915a4 100644 --- a/hw/usb-uhci.c +++ b/hw/usb-uhci.c @@ -1121,7 +1121,6 @@ static int usb_uhci_common_initfn(PCIDevice *dev) uint8_t *pci_conf = s->dev.config; int i; - pci_conf[PCI_CLASS_PROG] = 0x00; /* TODO: reset value should be 0. */ pci_conf[PCI_INTERRUPT_PIN] = 4; // interrupt pin 3 pci_conf[0x60] = 0x10; // release number diff --git a/hw/vt82c686.c b/hw/vt82c686.c index f23bea9..0184462 100644 --- a/hw/vt82c686.c +++ b/hw/vt82c686.c @@ -486,15 +486,11 @@ static const VMStateDescription vmstate_via = { /* init the PCI-to-ISA bridge */ static int vt82c686b_initfn(PCIDevice *d) { - uint8_t *pci_conf; uint8_t *wmask; int i; isa_bus_new(&d->qdev); - pci_conf = d->config; - pci_config_set_prog_interface(pci_conf, 0x0); - wmask = d->wmask; for (i = 0x00; i < 0xff; i++) { if (i<=0x03 || (i>=0x08 && i<=0x3f)) {