From: Marcel Apfelbaum <marcel@redhat.com>
To: qemu-devel@nongnu.org
Cc: mst@redhat.com, marcel@redhat.com, yvugenfi@redhat.com
Subject: [Qemu-devel] [PATCH 3/4] hw/virtio: fix Link Control Register for PCI Express virtio devices
Date: Wed, 4 Jan 2017 21:57:17 +0200 [thread overview]
Message-ID: <1483559838-8797-4-git-send-email-marcel@redhat.com> (raw)
In-Reply-To: <1483559838-8797-1-git-send-email-marcel@redhat.com>
Make several Link Control Register flags writable to conform
with the PCI Express spec.
Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
---
hw/pci/pcie.c | 14 ++++++++++++++
hw/virtio/virtio-pci.c | 3 +++
include/hw/pci/pcie.h | 3 +++
3 files changed, 20 insertions(+)
diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
index 62c1def..a596400 100644
--- a/hw/pci/pcie.c
+++ b/hw/pci/pcie.c
@@ -220,6 +220,20 @@ void pcie_cap_deverr_reset(PCIDevice *dev)
PCI_EXP_DEVCTL_FERE | PCI_EXP_DEVCTL_URRE);
}
+void pcie_cap_lnkctl_init(PCIDevice *dev)
+{
+ uint32_t pos = dev->exp.exp_cap;
+ pci_long_test_and_set_mask(dev->wmask + pos + PCI_EXP_LNKCTL,
+ PCI_EXP_LNKCTL_CCC | PCI_EXP_LNKCTL_ES);
+}
+
+void pcie_cap_lnkctl_reset(PCIDevice *dev)
+{
+ uint8_t *lnkctl = dev->config + dev->exp.exp_cap + PCI_EXP_LNKCTL;
+ pci_long_test_and_clear_mask(lnkctl,
+ PCI_EXP_LNKCTL_CCC | PCI_EXP_LNKCTL_ES);
+}
+
static void hotplug_event_update_event_status(PCIDevice *dev)
{
uint32_t pos = dev->exp.exp_cap;
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index da2124f..66a5bf3 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1804,6 +1804,8 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Error **errp)
pci_set_word(pci_dev->config + pos + PCI_PM_PMC, 0x3);
/* Init error enabling flags */
pcie_cap_deverr_init(pci_dev);
+ /* Init Link Control Register */
+ pcie_cap_lnkctl_init(pci_dev);
} else {
/*
* make future invocations of pci_is_express() return false
@@ -1843,6 +1845,7 @@ static void virtio_pci_reset(DeviceState *qdev)
if (pci_is_express(dev)) {
pcie_cap_deverr_reset(dev);
+ pcie_cap_lnkctl_reset(dev);
}
}
diff --git a/include/hw/pci/pcie.h b/include/hw/pci/pcie.h
index 056d25e..7d6611a 100644
--- a/include/hw/pci/pcie.h
+++ b/include/hw/pci/pcie.h
@@ -93,6 +93,9 @@ uint8_t pcie_cap_flags_get_vector(PCIDevice *dev);
void pcie_cap_deverr_init(PCIDevice *dev);
void pcie_cap_deverr_reset(PCIDevice *dev);
+void pcie_cap_lnkctl_init(PCIDevice *dev);
+void pcie_cap_lnkctl_reset(PCIDevice *dev);
+
void pcie_cap_slot_init(PCIDevice *dev, uint16_t slot);
void pcie_cap_slot_reset(PCIDevice *dev);
void pcie_cap_slot_write_config(PCIDevice *dev,
--
2.5.5
next prev parent reply other threads:[~2017-01-04 19:57 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-04 19:57 [Qemu-devel] [PATCH 0/4] hw/virtio: fix several PCI Express compliance issues Marcel Apfelbaum
2017-01-04 19:57 ` [Qemu-devel] [PATCH 1/4] hw/pcie: fix Extended Configuration Space for devices with no Extended Capabilities Marcel Apfelbaum
2017-01-10 3:13 ` Michael S. Tsirkin
2017-01-27 16:12 ` Marcel Apfelbaum
2017-01-04 19:57 ` [Qemu-devel] [PATCH 2/4] hw/virtio: fix error enabling flags in Device Control register Marcel Apfelbaum
2017-01-10 3:07 ` Michael S. Tsirkin
2017-01-27 16:07 ` Marcel Apfelbaum
2017-01-04 19:57 ` Marcel Apfelbaum [this message]
2017-01-10 3:07 ` [Qemu-devel] [PATCH 3/4] hw/virtio: fix Link Control Register for PCI Express virtio devices Michael S. Tsirkin
2017-01-04 19:57 ` [Qemu-devel] [PATCH 4/4] hw/virtio: fix Power Management " Marcel Apfelbaum
2017-01-10 3:07 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1483559838-8797-4-git-send-email-marcel@redhat.com \
--to=marcel@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=yvugenfi@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.