Merge tag 'io_uring-5.15-2021-09-11' of git://git.kernel.dk/linux-block
[linux-2.6-microblaze.git] / drivers / pci / endpoint / functions / pci-epf-test.c
index d2708ca..90d84d3 100644 (file)
@@ -247,8 +247,8 @@ static int pci_epf_test_copy(struct pci_epf_test *epf_test)
                goto err;
        }
 
-       ret = pci_epc_map_addr(epc, epf->func_no, src_phys_addr, reg->src_addr,
-                              reg->size);
+       ret = pci_epc_map_addr(epc, epf->func_no, epf->vfunc_no, src_phys_addr,
+                              reg->src_addr, reg->size);
        if (ret) {
                dev_err(dev, "Failed to map source address\n");
                reg->status = STATUS_SRC_ADDR_INVALID;
@@ -263,8 +263,8 @@ static int pci_epf_test_copy(struct pci_epf_test *epf_test)
                goto err_src_map_addr;
        }
 
-       ret = pci_epc_map_addr(epc, epf->func_no, dst_phys_addr, reg->dst_addr,
-                              reg->size);
+       ret = pci_epc_map_addr(epc, epf->func_no, epf->vfunc_no, dst_phys_addr,
+                              reg->dst_addr, reg->size);
        if (ret) {
                dev_err(dev, "Failed to map destination address\n");
                reg->status = STATUS_DST_ADDR_INVALID;
@@ -291,13 +291,13 @@ static int pci_epf_test_copy(struct pci_epf_test *epf_test)
        pci_epf_test_print_rate("COPY", reg->size, &start, &end, use_dma);
 
 err_map_addr:
-       pci_epc_unmap_addr(epc, epf->func_no, dst_phys_addr);
+       pci_epc_unmap_addr(epc, epf->func_no, epf->vfunc_no, dst_phys_addr);
 
 err_dst_addr:
        pci_epc_mem_free_addr(epc, dst_phys_addr, dst_addr, reg->size);
 
 err_src_map_addr:
-       pci_epc_unmap_addr(epc, epf->func_no, src_phys_addr);
+       pci_epc_unmap_addr(epc, epf->func_no, epf->vfunc_no, src_phys_addr);
 
 err_src_addr:
        pci_epc_mem_free_addr(epc, src_phys_addr, src_addr, reg->size);
@@ -331,8 +331,8 @@ static int pci_epf_test_read(struct pci_epf_test *epf_test)
                goto err;
        }
 
-       ret = pci_epc_map_addr(epc, epf->func_no, phys_addr, reg->src_addr,
-                              reg->size);
+       ret = pci_epc_map_addr(epc, epf->func_no, epf->vfunc_no, phys_addr,
+                              reg->src_addr, reg->size);
        if (ret) {
                dev_err(dev, "Failed to map address\n");
                reg->status = STATUS_SRC_ADDR_INVALID;
@@ -386,7 +386,7 @@ err_dma_map:
        kfree(buf);
 
 err_map_addr:
-       pci_epc_unmap_addr(epc, epf->func_no, phys_addr);
+       pci_epc_unmap_addr(epc, epf->func_no, epf->vfunc_no, phys_addr);
 
 err_addr:
        pci_epc_mem_free_addr(epc, phys_addr, src_addr, reg->size);
@@ -419,8 +419,8 @@ static int pci_epf_test_write(struct pci_epf_test *epf_test)
                goto err;
        }
 
-       ret = pci_epc_map_addr(epc, epf->func_no, phys_addr, reg->dst_addr,
-                              reg->size);
+       ret = pci_epc_map_addr(epc, epf->func_no, epf->vfunc_no, phys_addr,
+                              reg->dst_addr, reg->size);
        if (ret) {
                dev_err(dev, "Failed to map address\n");
                reg->status = STATUS_DST_ADDR_INVALID;
@@ -479,7 +479,7 @@ err_dma_map:
        kfree(buf);
 
 err_map_addr:
-       pci_epc_unmap_addr(epc, epf->func_no, phys_addr);
+       pci_epc_unmap_addr(epc, epf->func_no, epf->vfunc_no, phys_addr);
 
 err_addr:
        pci_epc_mem_free_addr(epc, phys_addr, dst_addr, reg->size);
@@ -501,13 +501,16 @@ static void pci_epf_test_raise_irq(struct pci_epf_test *epf_test, u8 irq_type,
 
        switch (irq_type) {
        case IRQ_TYPE_LEGACY:
-               pci_epc_raise_irq(epc, epf->func_no, PCI_EPC_IRQ_LEGACY, 0);
+               pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no,
+                                 PCI_EPC_IRQ_LEGACY, 0);
                break;
        case IRQ_TYPE_MSI:
-               pci_epc_raise_irq(epc, epf->func_no, PCI_EPC_IRQ_MSI, irq);
+               pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no,
+                                 PCI_EPC_IRQ_MSI, irq);
                break;
        case IRQ_TYPE_MSIX:
-               pci_epc_raise_irq(epc, epf->func_no, PCI_EPC_IRQ_MSIX, irq);
+               pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no,
+                                 PCI_EPC_IRQ_MSIX, irq);
                break;
        default:
                dev_err(dev, "Failed to raise IRQ, unknown type\n");
@@ -542,7 +545,8 @@ static void pci_epf_test_cmd_handler(struct work_struct *work)
 
        if (command & COMMAND_RAISE_LEGACY_IRQ) {
                reg->status = STATUS_IRQ_RAISED;
-               pci_epc_raise_irq(epc, epf->func_no, PCI_EPC_IRQ_LEGACY, 0);
+               pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no,
+                                 PCI_EPC_IRQ_LEGACY, 0);
                goto reset_handler;
        }
 
@@ -580,22 +584,22 @@ static void pci_epf_test_cmd_handler(struct work_struct *work)
        }
 
        if (command & COMMAND_RAISE_MSI_IRQ) {
-               count = pci_epc_get_msi(epc, epf->func_no);
+               count = pci_epc_get_msi(epc, epf->func_no, epf->vfunc_no);
                if (reg->irq_number > count || count <= 0)
                        goto reset_handler;
                reg->status = STATUS_IRQ_RAISED;
-               pci_epc_raise_irq(epc, epf->func_no, PCI_EPC_IRQ_MSI,
-                                 reg->irq_number);
+               pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no,
+                                 PCI_EPC_IRQ_MSI, reg->irq_number);
                goto reset_handler;
        }
 
        if (command & COMMAND_RAISE_MSIX_IRQ) {
-               count = pci_epc_get_msix(epc, epf->func_no);
+               count = pci_epc_get_msix(epc, epf->func_no, epf->vfunc_no);
                if (reg->irq_number > count || count <= 0)
                        goto reset_handler;
                reg->status = STATUS_IRQ_RAISED;
-               pci_epc_raise_irq(epc, epf->func_no, PCI_EPC_IRQ_MSIX,
-                                 reg->irq_number);
+               pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no,
+                                 PCI_EPC_IRQ_MSIX, reg->irq_number);
                goto reset_handler;
        }
 
@@ -618,7 +622,8 @@ static void pci_epf_test_unbind(struct pci_epf *epf)
                epf_bar = &epf->bar[bar];
 
                if (epf_test->reg[bar]) {
-                       pci_epc_clear_bar(epc, epf->func_no, epf_bar);
+                       pci_epc_clear_bar(epc, epf->func_no, epf->vfunc_no,
+                                         epf_bar);
                        pci_epf_free_space(epf, epf_test->reg[bar], bar,
                                           PRIMARY_INTERFACE);
                }
@@ -650,7 +655,8 @@ static int pci_epf_test_set_bar(struct pci_epf *epf)
                if (!!(epc_features->reserved_bar & (1 << bar)))
                        continue;
 
-               ret = pci_epc_set_bar(epc, epf->func_no, epf_bar);
+               ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no,
+                                     epf_bar);
                if (ret) {
                        pci_epf_free_space(epf, epf_test->reg[bar], bar,
                                           PRIMARY_INTERFACE);
@@ -674,16 +680,18 @@ static int pci_epf_test_core_init(struct pci_epf *epf)
        bool msi_capable = true;
        int ret;
 
-       epc_features = pci_epc_get_features(epc, epf->func_no);
+       epc_features = pci_epc_get_features(epc, epf->func_no, epf->vfunc_no);
        if (epc_features) {
                msix_capable = epc_features->msix_capable;
                msi_capable = epc_features->msi_capable;
        }
 
-       ret = pci_epc_write_header(epc, epf->func_no, header);
-       if (ret) {
-               dev_err(dev, "Configuration header write failed\n");
-               return ret;
+       if (epf->vfunc_no <= 1) {
+               ret = pci_epc_write_header(epc, epf->func_no, epf->vfunc_no, header);
+               if (ret) {
+                       dev_err(dev, "Configuration header write failed\n");
+                       return ret;
+               }
        }
 
        ret = pci_epf_test_set_bar(epf);
@@ -691,7 +699,8 @@ static int pci_epf_test_core_init(struct pci_epf *epf)
                return ret;
 
        if (msi_capable) {
-               ret = pci_epc_set_msi(epc, epf->func_no, epf->msi_interrupts);
+               ret = pci_epc_set_msi(epc, epf->func_no, epf->vfunc_no,
+                                     epf->msi_interrupts);
                if (ret) {
                        dev_err(dev, "MSI configuration failed\n");
                        return ret;
@@ -699,7 +708,8 @@ static int pci_epf_test_core_init(struct pci_epf *epf)
        }
 
        if (msix_capable) {
-               ret = pci_epc_set_msix(epc, epf->func_no, epf->msix_interrupts,
+               ret = pci_epc_set_msix(epc, epf->func_no, epf->vfunc_no,
+                                      epf->msix_interrupts,
                                       epf_test->test_reg_bar,
                                       epf_test->msix_table_offset);
                if (ret) {
@@ -832,7 +842,7 @@ static int pci_epf_test_bind(struct pci_epf *epf)
        if (WARN_ON_ONCE(!epc))
                return -EINVAL;
 
-       epc_features = pci_epc_get_features(epc, epf->func_no);
+       epc_features = pci_epc_get_features(epc, epf->func_no, epf->vfunc_no);
        if (!epc_features) {
                dev_err(&epf->dev, "epc_features not implemented\n");
                return -EOPNOTSUPP;