From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 24FA1C433EF for ; Wed, 13 Oct 2021 20:54:29 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D938E61152 for ; Wed, 13 Oct 2021 20:54:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D938E61152 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.xenproject.org Received: from list by lists.xenproject.org with outflank-mailman.208867.365124 (Exim 4.92) (envelope-from ) id 1malGW-0005p1-QN; Wed, 13 Oct 2021 20:54:20 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 208867.365124; Wed, 13 Oct 2021 20:54:20 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1malGW-0005ot-MJ; Wed, 13 Oct 2021 20:54:20 +0000 Received: by outflank-mailman (input) for mailman id 208867; Wed, 13 Oct 2021 20:54:19 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1malGV-0005oj-P7 for xen-devel@lists.xenproject.org; Wed, 13 Oct 2021 20:54:19 +0000 Received: from mail.kernel.org (unknown [198.145.29.99]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 6314625d-56a7-4e92-b61e-ea5edb7912f1; Wed, 13 Oct 2021 20:54:18 +0000 (UTC) Received: by mail.kernel.org (Postfix) with ESMTPSA id 14D3C61139; Wed, 13 Oct 2021 20:54:18 +0000 (UTC) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 6314625d-56a7-4e92-b61e-ea5edb7912f1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1634158458; bh=DJ5O9xaU3KyiNEtsTusVehr3cdzALi4I2qFO3t2I5Tk=; h=Date:From:To:cc:Subject:In-Reply-To:References:From; b=CHsHoBvb/tNH6OALLYNkBB0ZdpYcuF+cJQItIIO7YoESvYseN3CEQxUVVytIEXbjQ gcVytRGdaPIWQVuI8JOWgL5k2qJ3eQfI35f2eeOyGdbZ5+7VRZLEcp6WHV6rU9sxXz MYp5gPOqoDEorj7A6hPWt1E+klkUrRLFp8Ekclp3k993OG68eEl3AAK+U5ehEAqDhD r5ejd8g0fYvgEu1z95ggh9r6mgp0drYrapkuZ+CWKoHAciGVIjDRd/VkdkBYUj/lDn f4AZQg2iguBQEQo1EbVMvFS9+no9hUdStgNenGuInd63nUGUOTUosavfrzf+q9Sn+W q5wLqWctg6Jdw== Date: Wed, 13 Oct 2021 13:54:17 -0700 (PDT) From: Stefano Stabellini X-X-Sender: sstabellini@sstabellini-ThinkPad-T480s To: Rahul Singh cc: xen-devel@lists.xenproject.org, bertrand.marquis@arm.com, Andre.Przywara@arm.com, Stefano Stabellini , Julien Grall , Volodymyr Babchuk Subject: Re: [PATCH v5 11/11] xen/arm: Add linux,pci-domain property for hwdom if not available. In-Reply-To: Message-ID: References: User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII On Wed, 6 Oct 2021, Rahul Singh wrote: > If the property is not present in the device tree node for host bridge, > XEN while creating the dtb for hwdom will create this property and > assigns the already allocated segment to the host bridge > so that XEN and linux will have the same segment for the host bridges. > > Signed-off-by: Rahul Singh > Reviewed-by: Bertrand Marquis > Reviewed-by: Stefano Stabellini I committed this patch > --- > Change in v5: none > Change in v4: > - Added Reviewed-by: Stefano Stabellini > - Added Reviewed-by: Bertrand Marquis > Change in v3: > - Use is_pci_passthrough_enabled() > Change in v2: > - Add linux,pci-domain only when pci-passthrough command line option is enabeld > --- > --- > xen/arch/arm/domain_build.c | 16 ++++++++++++++++ > xen/arch/arm/pci/pci-host-common.c | 21 +++++++++++++++++++++ > xen/include/asm-arm/pci.h | 9 +++++++++ > 3 files changed, 46 insertions(+) > > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c > index f4c89bde8c..8739e3285e 100644 > --- a/xen/arch/arm/domain_build.c > +++ b/xen/arch/arm/domain_build.c > @@ -747,6 +747,22 @@ static int __init write_properties(struct domain *d, struct kernel_info *kinfo, > return res; > } > > + if ( is_pci_passthrough_enabled() && dt_device_type_is_equal(node, "pci") ) > + { > + if ( !dt_find_property(node, "linux,pci-domain", NULL) ) > + { > + uint16_t segment; > + > + res = pci_get_host_bridge_segment(node, &segment); > + if ( res < 0 ) > + return res; > + > + res = fdt_property_cell(kinfo->fdt, "linux,pci-domain", segment); > + if ( res ) > + return res; > + } > + } > + > /* > * Override the property "status" to disable the device when it's > * marked for passthrough. > diff --git a/xen/arch/arm/pci/pci-host-common.c b/xen/arch/arm/pci/pci-host-common.c > index c5941b10e9..593beeb48c 100644 > --- a/xen/arch/arm/pci/pci-host-common.c > +++ b/xen/arch/arm/pci/pci-host-common.c > @@ -255,6 +255,27 @@ struct pci_host_bridge *pci_find_host_bridge(uint16_t segment, uint8_t bus) > > return NULL; > } > + > +/* > + * This function will lookup an hostbridge based on config space address. > + */ > +int pci_get_host_bridge_segment(const struct dt_device_node *node, > + uint16_t *segment) > +{ > + struct pci_host_bridge *bridge; > + > + list_for_each_entry( bridge, &pci_host_bridges, node ) > + { > + if ( bridge->dt_node != node ) > + continue; > + > + *segment = bridge->segment; > + return 0; > + } > + > + return -EINVAL; > +} > + > /* > * Local variables: > * mode: C > diff --git a/xen/include/asm-arm/pci.h b/xen/include/asm-arm/pci.h > index 5532ce3977..7cb2e2f1ed 100644 > --- a/xen/include/asm-arm/pci.h > +++ b/xen/include/asm-arm/pci.h > @@ -90,6 +90,8 @@ int pci_generic_config_write(struct pci_host_bridge *bridge, pci_sbdf_t sbdf, > void __iomem *pci_ecam_map_bus(struct pci_host_bridge *bridge, > pci_sbdf_t sbdf, uint32_t where); > struct pci_host_bridge *pci_find_host_bridge(uint16_t segment, uint8_t bus); > +int pci_get_host_bridge_segment(const struct dt_device_node *node, > + uint16_t *segment); > > static always_inline bool is_pci_passthrough_enabled(void) > { > @@ -104,5 +106,12 @@ static always_inline bool is_pci_passthrough_enabled(void) > return false; > } > > +static inline int pci_get_host_bridge_segment(const struct dt_device_node *node, > + uint16_t *segment) > +{ > + ASSERT_UNREACHABLE(); > + return -EINVAL; > +} > + > #endif /*!CONFIG_HAS_PCI*/ > #endif /* __ARM_PCI_H__ */ > -- > 2.25.1 >