Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2383953pxb; Tue, 9 Mar 2021 00:44:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJwHgxHqE6h740fJZJKfTIvFUBmgpy6Q8FqAv+eAjRKtswt7efe8c/cMemoTHysZVi0LeoBO X-Received: by 2002:a50:ee10:: with SMTP id g16mr2773112eds.215.1615279486824; Tue, 09 Mar 2021 00:44:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615279486; cv=none; d=google.com; s=arc-20160816; b=P2CzQ6wEm4Rvr6jsToFtwUq2RwenpRzFdXZkV6SHTyQ11VjSyrWg27MSksrD7ynHii SV7RGMW/9Mb5KeJcTwF6zqPt4ACS7Wd/YU0lxLWzsjf0bZPrBLFLTeEaY3BtOxaQqW/Y 2H3wO23T+HEZ45eRTi5yd3dB+ThS8hfELPvAd7q/dgc8h/2Y/rMIjH7HrZhpVQp5JBiF B8Ae+7l0Z7DPdEB4OQzfYhKFOgMKYvWS22EUkDEb5+nrWE+qARSfzn/nIz/N8KNFGMgX U68nY0TSWSbG/IaSPFpZZtzaTKFAxdK4D55Q2UgOaNYuRZalYxm7gHMytIUNvX1B+HnF OeJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date; bh=sQCK78Uorjy9QHKSGgyk6W15d/NlGo4pHl2C5jQJxu8=; b=CrzzMyMVmYQqHAq6kF80FyFnswALtKo3tqNaUTH21gVmNPXNHvemdX8zk0gRPXbAsz J2lZBWe1uOfhAcXf6nVopbPIqiqwA7OLBUFGqLZUAwXpt9JQEUnYhG4iTUE9PTXaAVAV lQfOlzih8Y/3UP9fZt5t41ui/dkC0zMu/pviKkXs9Aai+XLavSLewQIHSo3UxGvVCQaL p3GDBL4OGalj6TmCQBdg9i566S87rAS4BqCXO3wQgYBiGJIB4yEdStDjTwHVJa6Ts6YI LWTacouwMKiYIM8BuYBs58gkdDqGGGveYEKu542fd2g0z2bofD5xbLS65ZgSYibt2oMl 9fUw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ca24si8485774edb.330.2021.03.09.00.44.24; Tue, 09 Mar 2021 00:44:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229767AbhCIIn0 (ORCPT + 99 others); Tue, 9 Mar 2021 03:43:26 -0500 Received: from gecko.sbs.de ([194.138.37.40]:60844 "EHLO gecko.sbs.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229639AbhCIInU (ORCPT ); Tue, 9 Mar 2021 03:43:20 -0500 Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by gecko.sbs.de (8.15.2/8.15.2) with ESMTPS id 1298gtX3016215 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 9 Mar 2021 09:42:55 +0100 Received: from md1za8fc.ad001.siemens.net ([167.87.1.188]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id 1298gsBs017101; Tue, 9 Mar 2021 09:42:54 +0100 Date: Tue, 9 Mar 2021 09:42:52 +0100 From: Henning Schild To: Bjorn Helgaas Cc: Andy Shevchenko , Wolfram Sang , Jean Delvare , Lee Jones , Tan Jui Nee , Jim Quinlan , Jonathan Yong , Bjorn Helgaas , linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org, linux-pci@vger.kernel.org, Jean Delvare , Peter Tyser , hdegoede@redhat.com Subject: Re: [PATCH v1 3/7] PCI: New Primary to Sideband (P2SB) bridge support library Message-ID: <20210309094252.396b7f2d@md1za8fc.ad001.siemens.net> In-Reply-To: <20210309014221.GA1831206@bjorn-Precision-5520> References: <20210309014221.GA1831206@bjorn-Precision-5520> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Am Mon, 8 Mar 2021 19:42:21 -0600 schrieb Bjorn Helgaas : > On Mon, Mar 08, 2021 at 09:16:50PM +0200, Andy Shevchenko wrote: > > On Mon, Mar 08, 2021 at 12:52:12PM -0600, Bjorn Helgaas wrote: > > > On Mon, Mar 08, 2021 at 02:20:16PM +0200, Andy Shevchenko wrote: > > > > From: Jonathan Yong > > > > > > > > There is already one and at least one more user is coming which > > > > requires an access to Primary to Sideband bridge (P2SB) in > > > > order to get IO or MMIO bar hidden by BIOS. Create a library to > > > > access P2SB for x86 devices. > > > > > > Can you include a spec reference? > > > > I'm not sure I have a public link to the spec. It's the 100 Series > > PCH [1]. The document number to look for is 546955 [2] and there > > actually a bit of information about this. > > This link, found by googling for "p2sb bridge", looks like it might > have relevant public links: > > https://lab.whitequark.org/notes/2017-11-08/accessing-intel-ich-pch-gpios/ > > I'd prefer if you could dig out the relevant sections because I really > don't know how to identify them. > > > > I'm trying to figure out why this > > > belongs in drivers/pci/. It looks very device-specific. > > > > Because it's all about access to PCI configuration spaces of the > > (hidden) devices. > > The PCI core generally doesn't deal with device-specific config > registers. > > > [1]: > > https://ark.intel.com/content/www/us/en/ark/products/series/98456/intel-100-series-desktop-chipsets.html > > [2]: > > https://medium.com/@jacksonchen_43335/bios-gpio-p2sb-70e9b829b403 > > > > ... > > > > > > +config PCI_P2SB > > > > + bool "Primary to Sideband (P2SB) bridge access support" > > > > + depends on PCI && X86 > > > > + help > > > > + The Primary to Sideband bridge is an interface to > > > > some PCI > > > > + devices connected through it. In particular, SPI NOR > > > > + controller in Intel Apollo Lake SoC is one of such > > > > devices. > > > > > > This doesn't sound like a "bridge". If it's a bridge, what's on > > > the primary (upstream) side? What's on the secondary side? What > > > resources are passed through the bridge, i.e., what transactions > > > does it transfer from one side to the other? > > > > It's a confusion terminology here. It's a Bridge according to the > > spec, but it is *not* a PCI Bridge as you may had a first > > impression. > > The code suggests that a register on this device controls whether a > different device is visible in config space. I think it will be > better if we can describe what's happening. > > > ... > > > > > > + /* Unhide the P2SB device */ > > > > + pci_bus_write_config_byte(bus, df, P2SBC_HIDE_BYTE, 0); > > > > + > > > > + /* Read the first BAR of the device in question */ > > > > + __pci_bus_read_base(bus, devfn, pci_bar_unknown, mem, > > > > PCI_BASE_ADDRESS_0, true); > > > > > > I don't get this. Apparently this normally hidden device is > > > consuming PCI address space. The PCI core needs to know about > > > this. If it doesn't, the PCI core may assign this space to > > > another device. > > > > Right, it returns all 1:s to any request so PCI core *thinks* it's > > plugged off (like D3cold or so). > > I'm asking about the MMIO address space. The BAR is a register in > config space. AFAICT, clearing P2SBC_HIDE_BYTE makes that BAR > visible. The BAR describes a region of PCI address space. It looks > like setting P2SBC_HIDE_BIT makes the BAR disappear from config space, > but it sounds like the PCI address space *described* by the BAR is > still claimed by the device. If the device didn't respond to that > MMIO space, you would have no reason to read the BAR at all. > > So what keeps the PCI core from assigning that MMIO space to another > device? The device will respond to MMIO while being hidden. I am afraid nothing stops a collision, except for the assumption that the BIOS is always right and PCI devices never get remapped. But just guessing here. I have seen devices with coreboot having the P2SB visible, and most likely relocatable. Making it visible in Linux and not hiding it again might work, but probably only as long as Linux will not relocate it. Which i am afraid might seriously upset the BIOS, depending on what a device does with those GPIOs and which parts are implemented in the BIOS. regards, Henning > This all sounds quite irregular from the point of view of the PCI > core. If a device responds to address space that is not described by > a standard PCI BAR, or by an EA capability, or by one of the legacy > VGA or IDE exceptions, we have a problem. That space must be > described *somehow* in a generic way, e.g., ACPI or similar. > > What happens if CONFIG_PCI_P2SB is unset? The device doesn't know > that, and if it is still consuming MMIO address space that we don't > know about, that's a problem. > > > > > + /* Hide the P2SB device */ > > > > + pci_bus_write_config_byte(bus, df, P2SBC_HIDE_BYTE, > > > > P2SBC_HIDE_BIT); > > > > -- > > With Best Regards, > > Andy Shevchenko > > > >