pcie: Compat with devices which do not support Link Width, such as ioh3420
We hack into PCI_EXP_LNKCAP to support device fast plug/unplug for pcie-root-port. However some devices like ioh3420 does not suport it, so PCI_EXP_LNKCAP is not set for such devices. Signed-off-by: Ying Fang <fangying1@huawei.com> Signed-off-by: Yan Wang <wangyan122@huawei.com>
This commit is contained in:
parent
00144ede80
commit
e40499de24
50
pcie-Compat-with-devices-which-do-not-support-Link-W.patch
Normal file
50
pcie-Compat-with-devices-which-do-not-support-Link-W.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 14d1ad1309a1bd035250512368221088c2f83f32 Mon Sep 17 00:00:00 2001
|
||||||
|
From: fangying <fangying1@huawei.com>
|
||||||
|
Date: Wed, 18 Mar 2020 12:51:33 +0800
|
||||||
|
Subject: [PATCH 6/6] pcie: Compat with devices which do not support Link
|
||||||
|
Width, such as ioh3420
|
||||||
|
|
||||||
|
We hack into PCI_EXP_LNKCAP to support device fast plug/unplug
|
||||||
|
for pcie-root-port. However some devices like ioh3420 does not
|
||||||
|
suport it, so PCI_EXP_LNKCAP is not set for such devices.
|
||||||
|
|
||||||
|
Signed-off-by: Ying Fang <fangying1@huawei.com>
|
||||||
|
Signed-off-by: Yan Wang <wangyan122@huawei.com>
|
||||||
|
---
|
||||||
|
hw/pci/pcie.c | 13 ++++++-------
|
||||||
|
1 file changed, 6 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
|
||||||
|
index d7d1504..30c09ed 100644
|
||||||
|
--- a/hw/pci/pcie.c
|
||||||
|
+++ b/hw/pci/pcie.c
|
||||||
|
@@ -92,13 +92,6 @@ static void pcie_cap_fill_slot_lnk(PCIDevice *dev)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Clear and fill LNKCAP from what was configured above */
|
||||||
|
- pci_long_test_and_clear_mask(exp_cap + PCI_EXP_LNKCAP,
|
||||||
|
- PCI_EXP_LNKCAP_MLW | PCI_EXP_LNKCAP_SLS);
|
||||||
|
- pci_long_test_and_set_mask(exp_cap + PCI_EXP_LNKCAP,
|
||||||
|
- QEMU_PCI_EXP_LNKCAP_MLW(s->width) |
|
||||||
|
- QEMU_PCI_EXP_LNKCAP_MLS(s->speed));
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* Link bandwidth notification is required for all root ports and
|
||||||
|
* downstream ports supporting links wider than x1 or multiple link
|
||||||
|
@@ -106,6 +99,12 @@ static void pcie_cap_fill_slot_lnk(PCIDevice *dev)
|
||||||
|
*/
|
||||||
|
if (s->width > QEMU_PCI_EXP_LNK_X1 ||
|
||||||
|
s->speed > QEMU_PCI_EXP_LNK_2_5GT) {
|
||||||
|
+ /* Clear and fill LNKCAP from what was configured above */
|
||||||
|
+ pci_long_test_and_clear_mask(exp_cap + PCI_EXP_LNKCAP,
|
||||||
|
+ PCI_EXP_LNKCAP_MLW | PCI_EXP_LNKCAP_SLS);
|
||||||
|
+ pci_long_test_and_set_mask(exp_cap + PCI_EXP_LNKCAP,
|
||||||
|
+ QEMU_PCI_EXP_LNKCAP_MLW(s->width) |
|
||||||
|
+ QEMU_PCI_EXP_LNKCAP_MLS(s->speed));
|
||||||
|
pci_long_test_and_set_mask(exp_cap + PCI_EXP_LNKCAP,
|
||||||
|
PCI_EXP_LNKCAP_LBNC);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.9.1
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user