Skip to content

Commit 89ef111

Browse files
Kai-Heng Fenggregkh
authored andcommitted
sky2: Disable MSI on Dell Inspiron 1545 and Gateway P-79
[ Upstream commit b33b7cd ] Some sky2 chips fire IRQ after S3, before the driver is fully resumed: [ 686.804877] do_IRQ: 1.37 No irq handler for vector This is likely a platform bug that device isn't fully quiesced during S3. Use MSI-X, maskable MSI or INTx can prevent this issue from happening. Since MSI-X and maskable MSI are not supported by this device, fallback to use INTx on affected platforms. BugLink: https://bugs.launchpad.net/bugs/1807259 BugLink: https://bugs.launchpad.net/bugs/1809843 Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent d28a029 commit 89ef111

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

  • drivers/net/ethernet/marvell

drivers/net/ethernet/marvell/sky2.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#include <linux/mii.h>
4747
#include <linux/of_device.h>
4848
#include <linux/of_net.h>
49+
#include <linux/dmi.h>
4950

5051
#include <asm/irq.h>
5152

@@ -93,7 +94,7 @@ static int copybreak __read_mostly = 128;
9394
module_param(copybreak, int, 0);
9495
MODULE_PARM_DESC(copybreak, "Receive copy threshold");
9596

96-
static int disable_msi = 0;
97+
static int disable_msi = -1;
9798
module_param(disable_msi, int, 0);
9899
MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");
99100

@@ -4923,6 +4924,24 @@ static const char *sky2_name(u8 chipid, char *buf, int sz)
49234924
return buf;
49244925
}
49254926

4927+
static const struct dmi_system_id msi_blacklist[] = {
4928+
{
4929+
.ident = "Dell Inspiron 1545",
4930+
.matches = {
4931+
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
4932+
DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1545"),
4933+
},
4934+
},
4935+
{
4936+
.ident = "Gateway P-79",
4937+
.matches = {
4938+
DMI_MATCH(DMI_SYS_VENDOR, "Gateway"),
4939+
DMI_MATCH(DMI_PRODUCT_NAME, "P-79"),
4940+
},
4941+
},
4942+
{}
4943+
};
4944+
49264945
static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
49274946
{
49284947
struct net_device *dev, *dev1;
@@ -5034,6 +5053,9 @@ static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
50345053
goto err_out_free_pci;
50355054
}
50365055

5056+
if (disable_msi == -1)
5057+
disable_msi = !!dmi_check_system(msi_blacklist);
5058+
50375059
if (!disable_msi && pci_enable_msi(pdev) == 0) {
50385060
err = sky2_test_msi(hw);
50395061
if (err) {

0 commit comments

Comments
 (0)