[SRU][F][PATCH 6/12] s390/pci: define RID and RID available
frank.heimes at canonical.com
frank.heimes at canonical.com
Mon May 18 18:24:32 UTC 2020
From: Pierre Morel <pmorel at linux.ibm.com>
BugLink: https://bugs.launchpad.net/bugs/1874056
Firmware provides the bus/devfn part of the PCI addresses of a zPCI
function inside the new field RID of the CLP query PCI function
with a bit to know if this field is available to use.
Let's add these fields to the clp_rsp_query_pci structure,
add corresponding fields to zdev and initialize them.
Signed-off-by: Pierre Morel <pmorel at linux.ibm.com>
Reviewed-by: Niklas Schnelle <schnelle at linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor at linux.ibm.com>
(backported from commit c9a1752b84f1a8f73187c116ff0514b2ab24d878)
Signed-off-by: Frank Heimes <frank.heimes at canonical.com>
---
arch/s390/include/asm/pci.h | 3 +++
arch/s390/include/asm/pci_clp.h | 9 +++++++--
arch/s390/pci/pci_clp.c | 3 +++
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h
index 5dfcb8db5828..671323481602 100644
--- a/arch/s390/include/asm/pci.h
+++ b/arch/s390/include/asm/pci.h
@@ -112,6 +112,9 @@ struct zpci_dev {
u8 pft; /* pci function type */
u16 domain;
u8 port;
+ u8 rid_available : 1;
+ u8 reserved : 7;
+ unsigned int devfn; /* DEVFN part of the RID*/
struct mutex lock;
u8 pfip[CLP_PFIP_NR_SEGMENTS]; /* pci function internal path */
diff --git a/arch/s390/include/asm/pci_clp.h b/arch/s390/include/asm/pci_clp.h
index a7a157bf9784..4391ce82230f 100644
--- a/arch/s390/include/asm/pci_clp.h
+++ b/arch/s390/include/asm/pci_clp.h
@@ -93,7 +93,9 @@ struct clp_req_query_pci {
struct clp_rsp_query_pci {
struct clp_rsp_hdr hdr;
u16 vfn; /* virtual fn number */
- u16 : 6;
+ u16 : 3;
+ u16 rid_avail : 1;
+ u16 : 2;
u16 mio_addr_avail : 1;
u16 util_str_avail : 1; /* utility string available? */
u16 pfgid : 8; /* pci function group id */
@@ -108,7 +110,10 @@ struct clp_rsp_query_pci {
u8 pft; /* pci function type */
u64 sdma; /* start dma as */
u64 edma; /* end dma as */
- u32 reserved[11];
+#define ZPCI_RID_MASK_DEVFN 0x00ff
+ u16 rid; /* BUS/DEVFN PCI address */
+ u16 reserved0;
+ u32 reserved[10];
u32 uid; /* user defined id */
u8 util_str[CLP_UTIL_STR_LEN]; /* utility string */
u32 reserved2[16];
diff --git a/arch/s390/pci/pci_clp.c b/arch/s390/pci/pci_clp.c
index 193e5b0d0296..f7dfcd9f8b9e 100644
--- a/arch/s390/pci/pci_clp.c
+++ b/arch/s390/pci/pci_clp.c
@@ -158,6 +158,9 @@ static int clp_store_query_pci_fn(struct zpci_dev *zdev,
zdev->port = response->port;
zdev->uid = response->uid;
zdev->fmb_length = sizeof(u32) * response->fmb_len;
+ zdev->rid_available = response->rid_avail;
+ if (!s390_pci_no_rid && zdev->rid_available)
+ zdev->devfn = response->rid & ZPCI_RID_MASK_DEVFN;
memcpy(zdev->pfip, response->pfip, sizeof(zdev->pfip));
if (response->util_str_avail) {
--
2.25.1
More information about the kernel-team
mailing list