Message ID | b649f9f978ed38f05927573381e23f9b3c6c24b8.1632307952.git.rahul.singh@arm.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | PCI devices passthrough on Arm | expand |
On Wed, 22 Sep 2021, Rahul Singh wrote: > Based on tag Linux v5.14.2 commit bbdd3de144fc142f2f4b9834c9241cc4e7f3d3fc Please use an upstream commit id > Import the Linux helper of_get_pci_domain_nr. This function will try to > obtain the host bridge domain number by finding a property called > "linux,pci-domain" of the given device node. > > Signed-off-by: Rahul Singh <rahul.singh@arm.com> > --- > Change in v2: Patch introduced in v2 > --- > xen/common/device_tree.c | 12 ++++++++++++ > xen/include/xen/device_tree.h | 19 +++++++++++++++++++ > 2 files changed, 31 insertions(+) > > diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c > index 53160d61f8..ea93da1725 100644 > --- a/xen/common/device_tree.c > +++ b/xen/common/device_tree.c > @@ -2183,6 +2183,18 @@ void __init dt_unflatten_host_device_tree(void) > dt_alias_scan(); > } > > +int dt_get_pci_domain_nr(struct dt_device_node *node) > +{ > + u32 domain; > + int error; > + > + error = dt_property_read_u32(node, "linux,pci-domain", &domain); > + if ( !error ) > + return -EINVAL; > + > + return (u16)domain; > +} > + > /* > * Local variables: > * mode: C > diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h > index 497144b8a7..9069040ef7 100644 > --- a/xen/include/xen/device_tree.h > +++ b/xen/include/xen/device_tree.h > @@ -831,6 +831,25 @@ int dt_count_phandle_with_args(const struct dt_device_node *np, > const char *list_name, > const char *cells_name); > > +/** > + * dt_get_pci_domain_nr - Find the host bridge domain number > + * of the given device node. > + * @node: Device tree node with the domain information. > + * > + * This function will try to obtain the host bridge domain number by finding > + * a property called "linux,pci-domain" of the given device node. > + * > + * Return: > + * * > 0 - On success, an associated domain number. > + * * -EINVAL - The property "linux,pci-domain" does not exist. > + * * -ENODATA - The linux,pci-domain" property does not have value. > + * * -EOVERFLOW - Invalid "linux,pci-domain" property value. This doesn't match reality for us because it can only return EINVAL > + * Returns the associated domain number from DT in the range [0-0xffff], or > + * a negative value if the required property is not found. > + */ > +int dt_get_pci_domain_nr(struct dt_device_node *node); > + > #ifdef CONFIG_DEVICE_TREE_DEBUG > #define dt_dprintk(fmt, args...) \ > printk(XENLOG_DEBUG fmt, ## args) > -- > 2.17.1 >
Hi Stefano, > On 23 Sep 2021, at 12:50 am, Stefano Stabellini <sstabellini@kernel.org> wrote: > > On Wed, 22 Sep 2021, Rahul Singh wrote: >> Based on tag Linux v5.14.2 commit bbdd3de144fc142f2f4b9834c9241cc4e7f3d3fc > > Please use an upstream commit id Ack. > > >> Import the Linux helper of_get_pci_domain_nr. This function will try to >> obtain the host bridge domain number by finding a property called >> "linux,pci-domain" of the given device node. >> >> Signed-off-by: Rahul Singh <rahul.singh@arm.com> >> --- >> Change in v2: Patch introduced in v2 >> --- >> xen/common/device_tree.c | 12 ++++++++++++ >> xen/include/xen/device_tree.h | 19 +++++++++++++++++++ >> 2 files changed, 31 insertions(+) >> >> diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c >> index 53160d61f8..ea93da1725 100644 >> --- a/xen/common/device_tree.c >> +++ b/xen/common/device_tree.c >> @@ -2183,6 +2183,18 @@ void __init dt_unflatten_host_device_tree(void) >> dt_alias_scan(); >> } >> >> +int dt_get_pci_domain_nr(struct dt_device_node *node) >> +{ >> + u32 domain; >> + int error; >> + >> + error = dt_property_read_u32(node, "linux,pci-domain", &domain); >> + if ( !error ) >> + return -EINVAL; >> + >> + return (u16)domain; >> +} >> + >> /* >> * Local variables: >> * mode: C >> diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h >> index 497144b8a7..9069040ef7 100644 >> --- a/xen/include/xen/device_tree.h >> +++ b/xen/include/xen/device_tree.h >> @@ -831,6 +831,25 @@ int dt_count_phandle_with_args(const struct dt_device_node *np, >> const char *list_name, >> const char *cells_name); >> >> +/** >> + * dt_get_pci_domain_nr - Find the host bridge domain number >> + * of the given device node. >> + * @node: Device tree node with the domain information. >> + * >> + * This function will try to obtain the host bridge domain number by finding >> + * a property called "linux,pci-domain" of the given device node. >> + * >> + * Return: >> + * * > 0 - On success, an associated domain number. >> + * * -EINVAL - The property "linux,pci-domain" does not exist. >> + * * -ENODATA - The linux,pci-domain" property does not have value. >> + * * -EOVERFLOW - Invalid "linux,pci-domain" property value. > > This doesn't match reality for us because it can only return EINVAL I will remove in next version. Regards, Rahul > >> + * Returns the associated domain number from DT in the range [0-0xffff], or >> + * a negative value if the required property is not found. >> + */ >> +int dt_get_pci_domain_nr(struct dt_device_node *node); >> + >> #ifdef CONFIG_DEVICE_TREE_DEBUG >> #define dt_dprintk(fmt, args...) \ >> printk(XENLOG_DEBUG fmt, ## args) >> -- >> 2.17.1
diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 53160d61f8..ea93da1725 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -2183,6 +2183,18 @@ void __init dt_unflatten_host_device_tree(void) dt_alias_scan(); } +int dt_get_pci_domain_nr(struct dt_device_node *node) +{ + u32 domain; + int error; + + error = dt_property_read_u32(node, "linux,pci-domain", &domain); + if ( !error ) + return -EINVAL; + + return (u16)domain; +} + /* * Local variables: * mode: C diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h index 497144b8a7..9069040ef7 100644 --- a/xen/include/xen/device_tree.h +++ b/xen/include/xen/device_tree.h @@ -831,6 +831,25 @@ int dt_count_phandle_with_args(const struct dt_device_node *np, const char *list_name, const char *cells_name); +/** + * dt_get_pci_domain_nr - Find the host bridge domain number + * of the given device node. + * @node: Device tree node with the domain information. + * + * This function will try to obtain the host bridge domain number by finding + * a property called "linux,pci-domain" of the given device node. + * + * Return: + * * > 0 - On success, an associated domain number. + * * -EINVAL - The property "linux,pci-domain" does not exist. + * * -ENODATA - The linux,pci-domain" property does not have value. + * * -EOVERFLOW - Invalid "linux,pci-domain" property value. + * + * Returns the associated domain number from DT in the range [0-0xffff], or + * a negative value if the required property is not found. + */ +int dt_get_pci_domain_nr(struct dt_device_node *node); + #ifdef CONFIG_DEVICE_TREE_DEBUG #define dt_dprintk(fmt, args...) \ printk(XENLOG_DEBUG fmt, ## args)
Based on tag Linux v5.14.2 commit bbdd3de144fc142f2f4b9834c9241cc4e7f3d3fc Import the Linux helper of_get_pci_domain_nr. This function will try to obtain the host bridge domain number by finding a property called "linux,pci-domain" of the given device node. Signed-off-by: Rahul Singh <rahul.singh@arm.com> --- Change in v2: Patch introduced in v2 --- xen/common/device_tree.c | 12 ++++++++++++ xen/include/xen/device_tree.h | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+)