From patchwork Thu Jun 25 02:04:02 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gabriel Laupre X-Patchwork-Id: 488443 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 986EB140077 for ; Thu, 25 Jun 2015 22:59:10 +1000 (AEST) Received: from localhost ([::1]:55642 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z86kG-0004sd-Tw for incoming@patchwork.ozlabs.org; Thu, 25 Jun 2015 08:59:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40569) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z7wXC-0002Dc-Iu for qemu-devel@nongnu.org; Wed, 24 Jun 2015 22:04:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z7wX9-00055g-C0 for qemu-devel@nongnu.org; Wed, 24 Jun 2015 22:04:58 -0400 Received: from stargate.chelsio.com ([67.207.112.58]:7497 helo=stargate3.asicdesigners.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z7wX9-000555-3o for qemu-devel@nongnu.org; Wed, 24 Jun 2015 22:04:55 -0400 Received: from peryn5.asicdesigners.com (peryn5.asicdesigners.com [10.192.164.139]) by stargate3.asicdesigners.com (8.13.8/8.13.8) with ESMTP id t5P24jhj026265; Wed, 24 Jun 2015 19:04:46 -0700 From: Gabriel Laupre To: qemu-devel@nongnu.org Date: Wed, 24 Jun 2015 19:04:02 -0700 Message-Id: <1435197842-26505-1-git-send-email-glaupre@chelsio.com> X-Mailer: git-send-email 1.8.3.1 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 67.207.112.58 X-Mailman-Approved-At: Thu, 25 Jun 2015 08:57:18 -0400 Cc: jb-gnumlists@wisemo.com, leedom@chelsio.com, mst@redhat.com, anish@chelsio.com, mboksanyi@chelsio.com, Gabriel Laupre , alex.williamson@redhat.com, bsd@makefile.in Subject: [Qemu-devel] [PATCH] pci : Add pba_offset PCI quirk for Chelsio T5 devices 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 Fix pba_offset initialization value for Chelsio T5 devices. The hardware doesn't return the correct pba_offset value, so add a quirk to instead return a hardcoded value of 0x1000 when a Chelsio T5 device is detected. Signed-off-by: Gabriel Laupre --- hw/vfio/pci.c | 12 ++++++++++++ include/hw/pci/pci_ids.h | 3 +++ 2 files changed, 15 insertions(+) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index e0e339a..8a4c7cd 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -2220,6 +2220,9 @@ static int vfio_early_setup_msix(VFIOPCIDevice *vdev) uint16_t ctrl; uint32_t table, pba; int fd = vdev->vbasedev.fd; + PCIDevice *pdev = &vdev->pdev; + uint16_t vendor = pci_get_word(pdev->config + PCI_VENDOR_ID); + uint16_t device = pci_get_word(pdev->config + PCI_DEVICE_ID); pos = pci_find_capability(&vdev->pdev, PCI_CAP_ID_MSIX); if (!pos) { @@ -2252,6 +2255,15 @@ static int vfio_early_setup_msix(VFIOPCIDevice *vdev) vdev->msix->pba_offset = pba & ~PCI_MSIX_FLAGS_BIRMASK; vdev->msix->entries = (ctrl & PCI_MSIX_FLAGS_QSIZE) + 1; + /* Quirk to set the pba_offset value for Chelsio T5 + * devices. Since hardware does not return value correctly, + * we override with a hardcoded value instead. + */ + if (vendor == PCI_VENDOR_ID_CHELSIO && + (device & 0xf000) == PCI_DEVICE_ID_CHELSIO_T5_SERIES) { + vdev->msix->pba_offset = 0x1000; + } + trace_vfio_early_setup_msix(vdev->vbasedev.name, pos, vdev->msix->table_bar, vdev->msix->table_offset, diff --git a/include/hw/pci/pci_ids.h b/include/hw/pci/pci_ids.h index 49c062b..9f649da 100644 --- a/include/hw/pci/pci_ids.h +++ b/include/hw/pci/pci_ids.h @@ -114,6 +114,9 @@ #define PCI_VENDOR_ID_ENSONIQ 0x1274 #define PCI_DEVICE_ID_ENSONIQ_ES1370 0x5000 +#define PCI_VENDOR_ID_CHELSIO 0x1425 +#define PCI_DEVICE_ID_CHELSIO_T5_SERIES 0x5000 + #define PCI_VENDOR_ID_FREESCALE 0x1957 #define PCI_DEVICE_ID_MPC8533E 0x0030