From patchwork Fri Mar 11 22:08:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yinghai Lu X-Patchwork-Id: 8569611 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id C31E9C0553 for ; Fri, 11 Mar 2016 22:08:16 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BA82420272 for ; Fri, 11 Mar 2016 22:08:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C43BD20221 for ; Fri, 11 Mar 2016 22:08:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932480AbcCKWIN (ORCPT ); Fri, 11 Mar 2016 17:08:13 -0500 Received: from mail-vk0-f68.google.com ([209.85.213.68]:33722 "EHLO mail-vk0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932084AbcCKWIM (ORCPT ); Fri, 11 Mar 2016 17:08:12 -0500 Received: by mail-vk0-f68.google.com with SMTP id c3so10164030vkb.0; Fri, 11 Mar 2016 14:08:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc; bh=9fn5HyAcxrWRh9nN/YBbMN0SF1YaHFkv9QlJbpNI6J0=; b=1F9t2E2U/t2jlus5m77rZyoBb+yCzm2Pqk1YOv5y6YqGw3dGIABn/jrFZnDv+8xdpt SlIEbkoSLfbiIOaC5ND7tc0XeRoDt+IYMpIG1b330Sik+f20InuM4NlYQBBjCbuYv8Mw G1jMpB1wlA9Oh3LLvyBo6Kn1PpI/EhWo8M8FesrizDie9N5XkUAycrXSl+uF80hHBH7f bPP9Gv2fJljxmZlHoZXFZGEMC8b6rTNqY/nPFH7Nuo+irWTuru13QsCWsEkFVPO4Fx+i wFZZTs9IdO1tn/iZJG0GLmS3PKdN3z5zs4ZdRnWPHNhULJDyAYeA7eU3tfYQOyrO0RTc dY9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:in-reply-to:references:date :message-id:subject:from:to:cc; bh=9fn5HyAcxrWRh9nN/YBbMN0SF1YaHFkv9QlJbpNI6J0=; b=Cl+xIxlhcxsCMw2oeTbTZ01uaXqbXOQCck3kVP1Wr8REjE6MqHFT6g1JS1ksrgSC0D EroChoeCfl7cr9tp1CxGyz9Xyr7hmNR8Fe/WElNWYgg8OYnoQ4pUr3GWtekFPKukG4yG oHV+FbxsIMwTsVnzMkAr7WlWC/5hC8ofjxAUAADmWWhKN4HEFHkbnu8DlMn59ZPWTcH6 sCvJsYxGdjBCEPG8+YexNx3XCpod7ZV9n4jpXMjLlpkOb7VfMRyqTvXlJ84ONeZtRAPB EmY2FQLz2sXtQNzMv4Wu4qFiCin9hqy8rcQNRxdtiAmknDeN5E5nFDImQh6hZKvNeUg+ kMew== X-Gm-Message-State: AD7BkJK3ifdzZioA+xR0ELYHmKHL1r/NyEBGBkNfHeOTTjTV3MytBCDmC/axL9BKHypvkA0AmxzUTl+9dSLJTA== MIME-Version: 1.0 X-Received: by 10.31.54.12 with SMTP id d12mr12498416vka.34.1457734091256; Fri, 11 Mar 2016 14:08:11 -0800 (PST) Received: by 10.103.45.194 with HTTP; Fri, 11 Mar 2016 14:08:11 -0800 (PST) In-Reply-To: <20160310174030.GB17238@localhost> References: <1456366370-28995-1-git-send-email-yinghai@kernel.org> <1456366370-28995-7-git-send-email-yinghai@kernel.org> <20160310174030.GB17238@localhost> Date: Fri, 11 Mar 2016 14:08:11 -0800 X-Google-Sender-Auth: 9vc2A1Z_cacrP1fQ1rWC1zx92a4 Message-ID: Subject: Re: [PATCH v10 06/59] PCI: Kill wrong quirk about M7101 From: Yinghai Lu To: Bjorn Helgaas , Linus Torvalds Cc: Bjorn Helgaas , David Miller , Benjamin Herrenschmidt , Wei Yang , TJ , Yijing Wang , Khalid Aziz , "linux-pci@vger.kernel.org" , Linux Kernel Mailing List , Meelis Roos Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On Thu, Mar 10, 2016 at 9:40 AM, Bjorn Helgaas wrote: > On Wed, Feb 24, 2016 at 06:11:57PM -0800, Yinghai Lu wrote: >> Meelis reported that qla2000 driver does not get loaded on one sparc system. >> >> schizo f00732d0: PCI host bridge to bus 0001:00 >> pci_bus 0001:00: root bus resource [io 0x7fe01000000-0x7fe01ffffff] (bus address [0x0000-0xffffff]) >> pci 0001:00:06.0: quirk: [io 0x7fe01000800-0x7fe0100083f] claimed by ali7101 ACPI >> pci 0001:00:06.0: quirk: [io 0x7fe01000600-0x7fe0100061f] claimed by ali7101 SMB >> pci 0001:00:07.0: can't claim BAR 0 [io 0x7fe01000000-0x7fe0100ffff]: address conflict with 0001:00:06.0 [io 0x7fe01000600-0x7fe0100061f] >> >> So the quirk for M7101 claim the io range early. >> >> According to spec with M7101 in M1543 page 103/104, >> http://www.versalogic.com/Support/Downloads/pdf/ali1543.pdf >> 0xe0, and 0xe2 do not include address info for acpi/smb. >> >> Kill wrong quirk about them. > > This needs an explanation for why the quirk was added in the first > place, and why it is now safe to remove it. The related commit does not tell much about why it is there exactly. But it is added the same time with intel piix4. Maybe Linus could have some hint about that quirk? commit 34f550135e349102bd065488eabbbb217ab27f0d Author: Linus Torvalds Date: Fri Nov 23 15:32:20 2007 -0500 Import 2.3.49pre2 * The main table of quirks. @@ -143,6 +192,8 @@ static struct pci_fixup pci_fixups[] __initdata = { { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2, quirk_natoma }, { PCI_FIXUP_FINAL, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, quirk_nopcipci }, { PCI_FIXUP_FINAL, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, quirk_nopcipci }, + { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4acpi }, + { PCI_FIXUP_FINAL, PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, quirk_ali7101 }, { 0 } }; --- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index cda39a5..8029b19 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -113,6 +113,55 @@ static void __init quirk_s3_64M(struct pci_dev *dev) } } +static void __init quirk_io_region(struct pci_dev *dev, unsigned region, unsign ed size, int nr) +{ + region &= ~(size-1); + if (region) { + struct resource *res = dev->resource + nr; + + res->name = dev->name; + res->start = region; + res->end = region + size - 1; + res->flags = IORESOURCE_IO; + pci_claim_resource(dev, nr); + } +} + +/* + * Let's make the southbridge information explicit instead + * of having to worry about people probing the ACPI areas, + * for example.. (Yes, it happens, and if you read the wrong + * ACPI register it will put the machine to sleep with no + * way of waking it up again. Bummer). + * + * ALI M7101: Two IO regions pointed to by words at + * 0xE0 (64 bytes of ACPI registers) + * 0xE2 (32 bytes of SMB registers) + */ +static void __init quirk_ali7101(struct pci_dev *dev) +{ + u16 region; + + pci_read_config_word(dev, 0xE0, ®ion); + quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES); + pci_read_config_word(dev, 0xE2, ®ion); + quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1); +} + +/* + * PIIX4 ACPI: Two IO regions pointed to by longwords at + * 0x40 (64 bytes of ACPI registers) + * 0x90 (32 bytes of SMB registers) + */ +static void __init quirk_piix4acpi(struct pci_dev *dev) +{ + u32 region; + + pci_read_config_dword(dev, 0x40, ®ion); + quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES); + pci_read_config_dword(dev, 0x90, ®ion); + quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1); +} /*