Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp5456ybp; Thu, 3 Oct 2019 09:23:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqyPt7VQTjYupW285Ca/3h5Qr6v2d0K7MR9K/5e76QaITz38oL80YObv6NPUiDhspkNnnsv2 X-Received: by 2002:a50:f391:: with SMTP id g17mr10270327edm.163.1570119834474; Thu, 03 Oct 2019 09:23:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570119834; cv=none; d=google.com; s=arc-20160816; b=tyHW2PnrLVrBIw0/kxZoMH7LdmxoODVoIWaf4lHwiZs50RNfVV4tB9O5X8qPFAB3YN IeMsifxvpBp77eSQx7kF73W3V3rV1c6t6aDkeuj2Uty2bVosz3QBD2/JcIu1PDO36uvN 0Yr/AX9UCMVF8oiROEyT3ilEEbwkXCW4Mt/qgEbgYl74XFIvUkix5LRRIXalVf1YcOTT w2JUIEKChm9va4esgZy+zzn/vQLu7NxsTJjCb1MHWprJAq3gFxkUUXFvzrwAOfF5HlLg XAAjdPgf91KuoOd5ACd8R75ScFzaJqmuk6Lj9coGnGdztl7VfoiPfy3el60EKDt5c2B3 ocSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/3Fz+PgAvQVh3OKvnNOF2UUwBjkTO4yrcZUfOhqHOE8=; b=pzdx6AI8Yj2jo+v6VyDvGulY1ZRDN+AOgpmbIER6AwTGf2mjb5/Z60XPWcXfNWc48T Ww0nFTv65GzWHY/kbNUK81f8O2O5OGEK5XQ6QMzMTFRcLm9MQX/JozPAdoYT3sVcAem1 J9AZVk4mPxUjsZS7Xx+m3nrg4Iq9fXHH64TbYIfzMt/97YkOQlKmaPB74JxHhCCr6UrO YqPdrDUtAmSyXrYUkzPO1FRgGtL62f3COkgvNu1OrRL3bn8OKNpo01CqU8ezKzAPcX9F bzudREuL+bWMCI0UZ6fgLaTo9fDHSBqeCfn/rdJh8ercDyJ5c92W856HyWAaWPjHQt6Z EteA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=i5eUvbvU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w10si1745923edv.21.2019.10.03.09.23.30; Thu, 03 Oct 2019 09:23:54 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=i5eUvbvU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390200AbfJCQVs (ORCPT + 99 others); Thu, 3 Oct 2019 12:21:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:50184 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390191AbfJCQVr (ORCPT ); Thu, 3 Oct 2019 12:21:47 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CFED02054F; Thu, 3 Oct 2019 16:21:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1570119706; bh=N9uKcJosbxuA8yjplpPHJhd3laP5PA0VuKho5o6Ctss=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i5eUvbvUpG00f3Pli1/RD9HXSh8y0t/mMxa71txXq5a9/SxifIwocfLolDZwa7QFf sUgpncZI+c6mZNWSd9/xtV2zuaofgWUq6CPnc2nUcYu/MXR7zWd2YIAzci0/iMwA9b 3MsxOzZG13JN1/4+v/1OQcz9hp0jTwHEQtgzj/uE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Helge Deller , Phil Scarr Subject: [PATCH 4.19 164/211] parisc: Disable HP HSC-PCI Cards to prevent kernel crash Date: Thu, 3 Oct 2019 17:53:50 +0200 Message-Id: <20191003154525.403545595@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191003154447.010950442@linuxfoundation.org> References: <20191003154447.010950442@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Helge Deller commit 5fa1659105fac63e0f3c199b476025c2e04111ce upstream. The HP Dino PCI controller chip can be used in two variants: as on-board controller (e.g. in B160L), or on an Add-On card ("Card-Mode") to bridge PCI components to systems without a PCI bus, e.g. to a HSC/GSC bus. One such Add-On card is the HP HSC-PCI Card which has one or more DEC Tulip PCI NIC chips connected to the on-card Dino PCI controller. Dino in Card-Mode has a big disadvantage: All PCI memory accesses need to go through the DINO_MEM_DATA register, so Linux drivers will not be able to use the ioremap() function. Without ioremap() many drivers will not work, one example is the tulip driver which then simply crashes the kernel if it tries to access the ports on the HP HSC card. This patch disables the HP HSC card if it finds one, and as such fixes the kernel crash on a HP D350/2 machine. Signed-off-by: Helge Deller Noticed-by: Phil Scarr Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/parisc/dino.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) --- a/drivers/parisc/dino.c +++ b/drivers/parisc/dino.c @@ -160,6 +160,15 @@ struct dino_device (struct dino_device *)__pdata; }) +/* Check if PCI device is behind a Card-mode Dino. */ +static int pci_dev_is_behind_card_dino(struct pci_dev *dev) +{ + struct dino_device *dino_dev; + + dino_dev = DINO_DEV(parisc_walk_tree(dev->bus->bridge)); + return is_card_dino(&dino_dev->hba.dev->id); +} + /* * Dino Configuration Space Accessor Functions */ @@ -442,6 +451,21 @@ static void quirk_cirrus_cardbus(struct } DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_6832, quirk_cirrus_cardbus ); +#ifdef CONFIG_TULIP +static void pci_fixup_tulip(struct pci_dev *dev) +{ + if (!pci_dev_is_behind_card_dino(dev)) + return; + if (!(pci_resource_flags(dev, 1) & IORESOURCE_MEM)) + return; + pr_warn("%s: HP HSC-PCI Cards with card-mode Dino not yet supported.\n", + pci_name(dev)); + /* Disable this card by zeroing the PCI resources */ + memset(&dev->resource[0], 0, sizeof(dev->resource[0])); + memset(&dev->resource[1], 0, sizeof(dev->resource[1])); +} +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_DEC, PCI_ANY_ID, pci_fixup_tulip); +#endif /* CONFIG_TULIP */ static void __init dino_bios_init(void)