aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/boot/Makefile3
-rw-r--r--arch/powerpc/include/asm/systbl.h1
-rw-r--r--arch/powerpc/include/asm/unistd.h2
-rw-r--r--arch/powerpc/include/uapi/asm/unistd.h1
-rw-r--r--arch/powerpc/kernel/setup_32.c6
-rw-r--r--arch/powerpc/lib/copy_32.S11
-rw-r--r--arch/powerpc/mm/hugepage-hash64.c3
-rw-r--r--arch/powerpc/platforms/pasemi/msi.c5
-rw-r--r--arch/powerpc/platforms/powernv/pci-ioda.c16
-rw-r--r--arch/powerpc/platforms/powernv/pci.c5
-rw-r--r--arch/powerpc/platforms/pseries/dlpar.c4
-rw-r--r--arch/powerpc/sysdev/fsl_msi.c5
-rw-r--r--arch/powerpc/sysdev/mpic_u3msi.c5
-rw-r--r--arch/powerpc/sysdev/ppc4xx_msi.c5
-rw-r--r--drivers/misc/cxl/Makefile2
-rw-r--r--drivers/misc/cxl/pci.c2
-rw-r--r--drivers/misc/cxl/vphb.c6
17 files changed, 65 insertions, 17 deletions
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 73eddda53b8e..4eec430d8fa8 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -28,6 +28,9 @@ BOOTCFLAGS += -m64
28endif 28endif
29ifdef CONFIG_CPU_BIG_ENDIAN 29ifdef CONFIG_CPU_BIG_ENDIAN
30BOOTCFLAGS += -mbig-endian 30BOOTCFLAGS += -mbig-endian
31else
32BOOTCFLAGS += -mlittle-endian
33BOOTCFLAGS += $(call cc-option,-mabi=elfv2)
31endif 34endif
32 35
33BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc 36BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h
index 71f2b3f02cf8..4d65499ee1c1 100644
--- a/arch/powerpc/include/asm/systbl.h
+++ b/arch/powerpc/include/asm/systbl.h
@@ -368,3 +368,4 @@ SYSCALL_SPU(memfd_create)
368SYSCALL_SPU(bpf) 368SYSCALL_SPU(bpf)
369COMPAT_SYS(execveat) 369COMPAT_SYS(execveat)
370PPC64ONLY(switch_endian) 370PPC64ONLY(switch_endian)
371SYSCALL_SPU(userfaultfd)
diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h
index f4f8b667d75b..4a055b6c2a64 100644
--- a/arch/powerpc/include/asm/unistd.h
+++ b/arch/powerpc/include/asm/unistd.h
@@ -12,7 +12,7 @@
12#include <uapi/asm/unistd.h> 12#include <uapi/asm/unistd.h>
13 13
14 14
15#define __NR_syscalls 364 15#define __NR_syscalls 365
16 16
17#define __NR__exit __NR_exit 17#define __NR__exit __NR_exit
18#define NR_syscalls __NR_syscalls 18#define NR_syscalls __NR_syscalls
diff --git a/arch/powerpc/include/uapi/asm/unistd.h b/arch/powerpc/include/uapi/asm/unistd.h
index e4aa173dae62..6ad58d4c879b 100644
--- a/arch/powerpc/include/uapi/asm/unistd.h
+++ b/arch/powerpc/include/uapi/asm/unistd.h
@@ -386,5 +386,6 @@
386#define __NR_bpf 361 386#define __NR_bpf 361
387#define __NR_execveat 362 387#define __NR_execveat 362
388#define __NR_switch_endian 363 388#define __NR_switch_endian 363
389#define __NR_userfaultfd 364
389 390
390#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */ 391#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index bb02e9f6944e..ad8c9db61237 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -38,6 +38,7 @@
38#include <asm/udbg.h> 38#include <asm/udbg.h>
39#include <asm/mmu_context.h> 39#include <asm/mmu_context.h>
40#include <asm/epapr_hcalls.h> 40#include <asm/epapr_hcalls.h>
41#include <asm/code-patching.h>
41 42
42#define DBG(fmt...) 43#define DBG(fmt...)
43 44
@@ -109,6 +110,8 @@ notrace unsigned long __init early_init(unsigned long dt_ptr)
109 * This is called very early on the boot process, after a minimal 110 * This is called very early on the boot process, after a minimal
110 * MMU environment has been set up but before MMU_init is called. 111 * MMU environment has been set up but before MMU_init is called.
111 */ 112 */
113extern unsigned int memset_nocache_branch; /* Insn to be replaced by NOP */
114
112notrace void __init machine_init(u64 dt_ptr) 115notrace void __init machine_init(u64 dt_ptr)
113{ 116{
114 lockdep_init(); 117 lockdep_init();
@@ -116,6 +119,9 @@ notrace void __init machine_init(u64 dt_ptr)
116 /* Enable early debugging if any specified (see udbg.h) */ 119 /* Enable early debugging if any specified (see udbg.h) */
117 udbg_early_init(); 120 udbg_early_init();
118 121
122 patch_instruction((unsigned int *)&memcpy, PPC_INST_NOP);
123 patch_instruction(&memset_nocache_branch, PPC_INST_NOP);
124
119 /* Do some early initialization based on the flat device tree */ 125 /* Do some early initialization based on the flat device tree */
120 early_init_devtree(__va(dt_ptr)); 126 early_init_devtree(__va(dt_ptr));
121 127
diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S
index 2ef50c629470..c44df2dbedd5 100644
--- a/arch/powerpc/lib/copy_32.S
+++ b/arch/powerpc/lib/copy_32.S
@@ -73,6 +73,10 @@ CACHELINE_MASK = (L1_CACHE_BYTES-1)
73 * Use dcbz on the complete cache lines in the destination 73 * Use dcbz on the complete cache lines in the destination
74 * to set them to zero. This requires that the destination 74 * to set them to zero. This requires that the destination
75 * area is cacheable. -- paulus 75 * area is cacheable. -- paulus
76 *
77 * During early init, cache might not be active yet, so dcbz cannot be used.
78 * We therefore skip the optimised bloc that uses dcbz. This jump is
79 * replaced by a nop once cache is active. This is done in machine_init()
76 */ 80 */
77_GLOBAL(memset) 81_GLOBAL(memset)
78 rlwimi r4,r4,8,16,23 82 rlwimi r4,r4,8,16,23
@@ -88,6 +92,8 @@ _GLOBAL(memset)
88 subf r6,r0,r6 92 subf r6,r0,r6
89 cmplwi 0,r4,0 93 cmplwi 0,r4,0
90 bne 2f /* Use normal procedure if r4 is not zero */ 94 bne 2f /* Use normal procedure if r4 is not zero */
95_GLOBAL(memset_nocache_branch)
96 b 2f /* Skip optimised bloc until cache is enabled */
91 97
92 clrlwi r7,r6,32-LG_CACHELINE_BYTES 98 clrlwi r7,r6,32-LG_CACHELINE_BYTES
93 add r8,r7,r5 99 add r8,r7,r5
@@ -128,6 +134,10 @@ _GLOBAL(memset)
128 * the destination area is cacheable. 134 * the destination area is cacheable.
129 * We only use this version if the source and dest don't overlap. 135 * We only use this version if the source and dest don't overlap.
130 * -- paulus. 136 * -- paulus.
137 *
138 * During early init, cache might not be active yet, so dcbz cannot be used.
139 * We therefore jump to generic_memcpy which doesn't use dcbz. This jump is
140 * replaced by a nop once cache is active. This is done in machine_init()
131 */ 141 */
132_GLOBAL(memmove) 142_GLOBAL(memmove)
133 cmplw 0,r3,r4 143 cmplw 0,r3,r4
@@ -135,6 +145,7 @@ _GLOBAL(memmove)
135 /* fall through */ 145 /* fall through */
136 146
137_GLOBAL(memcpy) 147_GLOBAL(memcpy)
148 b generic_memcpy
138 add r7,r3,r5 /* test if the src & dst overlap */ 149 add r7,r3,r5 /* test if the src & dst overlap */
139 add r8,r4,r5 150 add r8,r4,r5
140 cmplw 0,r4,r7 151 cmplw 0,r4,r7
diff --git a/arch/powerpc/mm/hugepage-hash64.c b/arch/powerpc/mm/hugepage-hash64.c
index 43dafb9d6a46..4d87122cf6a7 100644
--- a/arch/powerpc/mm/hugepage-hash64.c
+++ b/arch/powerpc/mm/hugepage-hash64.c
@@ -85,7 +85,6 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
85 BUG_ON(index >= 4096); 85 BUG_ON(index >= 4096);
86 86
87 vpn = hpt_vpn(ea, vsid, ssize); 87 vpn = hpt_vpn(ea, vsid, ssize);
88 hash = hpt_hash(vpn, shift, ssize);
89 hpte_slot_array = get_hpte_slot_array(pmdp); 88 hpte_slot_array = get_hpte_slot_array(pmdp);
90 if (psize == MMU_PAGE_4K) { 89 if (psize == MMU_PAGE_4K) {
91 /* 90 /*
@@ -101,6 +100,7 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
101 valid = hpte_valid(hpte_slot_array, index); 100 valid = hpte_valid(hpte_slot_array, index);
102 if (valid) { 101 if (valid) {
103 /* update the hpte bits */ 102 /* update the hpte bits */
103 hash = hpt_hash(vpn, shift, ssize);
104 hidx = hpte_hash_index(hpte_slot_array, index); 104 hidx = hpte_hash_index(hpte_slot_array, index);
105 if (hidx & _PTEIDX_SECONDARY) 105 if (hidx & _PTEIDX_SECONDARY)
106 hash = ~hash; 106 hash = ~hash;
@@ -126,6 +126,7 @@ int __hash_page_thp(unsigned long ea, unsigned long access, unsigned long vsid,
126 if (!valid) { 126 if (!valid) {
127 unsigned long hpte_group; 127 unsigned long hpte_group;
128 128
129 hash = hpt_hash(vpn, shift, ssize);
129 /* insert new entry */ 130 /* insert new entry */
130 pa = pmd_pfn(__pmd(old_pmd)) << PAGE_SHIFT; 131 pa = pmd_pfn(__pmd(old_pmd)) << PAGE_SHIFT;
131 new_pmd |= _PAGE_HASHPTE; 132 new_pmd |= _PAGE_HASHPTE;
diff --git a/arch/powerpc/platforms/pasemi/msi.c b/arch/powerpc/platforms/pasemi/msi.c
index e66ef1943338..b304a9fe55cc 100644
--- a/arch/powerpc/platforms/pasemi/msi.c
+++ b/arch/powerpc/platforms/pasemi/msi.c
@@ -63,6 +63,7 @@ static struct irq_chip mpic_pasemi_msi_chip = {
63static void pasemi_msi_teardown_msi_irqs(struct pci_dev *pdev) 63static void pasemi_msi_teardown_msi_irqs(struct pci_dev *pdev)
64{ 64{
65 struct msi_desc *entry; 65 struct msi_desc *entry;
66 irq_hw_number_t hwirq;
66 67
67 pr_debug("pasemi_msi_teardown_msi_irqs, pdev %p\n", pdev); 68 pr_debug("pasemi_msi_teardown_msi_irqs, pdev %p\n", pdev);
68 69
@@ -70,10 +71,10 @@ static void pasemi_msi_teardown_msi_irqs(struct pci_dev *pdev)
70 if (entry->irq == NO_IRQ) 71 if (entry->irq == NO_IRQ)
71 continue; 72 continue;
72 73
74 hwirq = virq_to_hw(entry->irq);
73 irq_set_msi_desc(entry->irq, NULL); 75 irq_set_msi_desc(entry->irq, NULL);
74 msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap,
75 virq_to_hw(entry->irq), ALLOC_CHUNK);
76 irq_dispose_mapping(entry->irq); 76 irq_dispose_mapping(entry->irq);
77 msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, ALLOC_CHUNK);
77 } 78 }
78 79
79 return; 80 return;
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 2927cd5c8303..414fd1a00fda 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -2049,9 +2049,23 @@ static long pnv_pci_ioda2_setup_default_config(struct pnv_ioda_pe *pe)
2049 struct iommu_table *tbl = NULL; 2049 struct iommu_table *tbl = NULL;
2050 long rc; 2050 long rc;
2051 2051
2052 /*
2053 * crashkernel= specifies the kdump kernel's maximum memory at
2054 * some offset and there is no guaranteed the result is a power
2055 * of 2, which will cause errors later.
2056 */
2057 const u64 max_memory = __rounddown_pow_of_two(memory_hotplug_max());
2058
2059 /*
2060 * In memory constrained environments, e.g. kdump kernel, the
2061 * DMA window can be larger than available memory, which will
2062 * cause errors later.
2063 */
2064 const u64 window_size = min((u64)pe->table_group.tce32_size, max_memory);
2065
2052 rc = pnv_pci_ioda2_create_table(&pe->table_group, 0, 2066 rc = pnv_pci_ioda2_create_table(&pe->table_group, 0,
2053 IOMMU_PAGE_SHIFT_4K, 2067 IOMMU_PAGE_SHIFT_4K,
2054 pe->table_group.tce32_size, 2068 window_size,
2055 POWERNV_IOMMU_DEFAULT_LEVELS, &tbl); 2069 POWERNV_IOMMU_DEFAULT_LEVELS, &tbl);
2056 if (rc) { 2070 if (rc) {
2057 pe_err(pe, "Failed to create 32-bit TCE table, err %ld", 2071 pe_err(pe, "Failed to create 32-bit TCE table, err %ld",
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index 9b2480b265c0..f2dd77234240 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -99,6 +99,7 @@ void pnv_teardown_msi_irqs(struct pci_dev *pdev)
99 struct pci_controller *hose = pci_bus_to_host(pdev->bus); 99 struct pci_controller *hose = pci_bus_to_host(pdev->bus);
100 struct pnv_phb *phb = hose->private_data; 100 struct pnv_phb *phb = hose->private_data;
101 struct msi_desc *entry; 101 struct msi_desc *entry;
102 irq_hw_number_t hwirq;
102 103
103 if (WARN_ON(!phb)) 104 if (WARN_ON(!phb))
104 return; 105 return;
@@ -106,10 +107,10 @@ void pnv_teardown_msi_irqs(struct pci_dev *pdev)
106 for_each_pci_msi_entry(entry, pdev) { 107 for_each_pci_msi_entry(entry, pdev) {
107 if (entry->irq == NO_IRQ) 108 if (entry->irq == NO_IRQ)
108 continue; 109 continue;
110 hwirq = virq_to_hw(entry->irq);
109 irq_set_msi_desc(entry->irq, NULL); 111 irq_set_msi_desc(entry->irq, NULL);
110 msi_bitmap_free_hwirqs(&phb->msi_bmp,
111 virq_to_hw(entry->irq) - phb->msi_base, 1);
112 irq_dispose_mapping(entry->irq); 112 irq_dispose_mapping(entry->irq);
113 msi_bitmap_free_hwirqs(&phb->msi_bmp, hwirq - phb->msi_base, 1);
113 } 114 }
114} 115}
115#endif /* CONFIG_PCI_MSI */ 116#endif /* CONFIG_PCI_MSI */
diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c
index 47d9cebe7159..db17827eb746 100644
--- a/arch/powerpc/platforms/pseries/dlpar.c
+++ b/arch/powerpc/platforms/pseries/dlpar.c
@@ -422,8 +422,10 @@ static ssize_t dlpar_cpu_probe(const char *buf, size_t count)
422 422
423 dn = dlpar_configure_connector(cpu_to_be32(drc_index), parent); 423 dn = dlpar_configure_connector(cpu_to_be32(drc_index), parent);
424 of_node_put(parent); 424 of_node_put(parent);
425 if (!dn) 425 if (!dn) {
426 dlpar_release_drc(drc_index);
426 return -EINVAL; 427 return -EINVAL;
428 }
427 429
428 rc = dlpar_attach_node(dn); 430 rc = dlpar_attach_node(dn);
429 if (rc) { 431 if (rc) {
diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c
index 5916da1856a7..48a576aa47b9 100644
--- a/arch/powerpc/sysdev/fsl_msi.c
+++ b/arch/powerpc/sysdev/fsl_msi.c
@@ -128,15 +128,16 @@ static void fsl_teardown_msi_irqs(struct pci_dev *pdev)
128{ 128{
129 struct msi_desc *entry; 129 struct msi_desc *entry;
130 struct fsl_msi *msi_data; 130 struct fsl_msi *msi_data;
131 irq_hw_number_t hwirq;
131 132
132 for_each_pci_msi_entry(entry, pdev) { 133 for_each_pci_msi_entry(entry, pdev) {
133 if (entry->irq == NO_IRQ) 134 if (entry->irq == NO_IRQ)
134 continue; 135 continue;
136 hwirq = virq_to_hw(entry->irq);
135 msi_data = irq_get_chip_data(entry->irq); 137 msi_data = irq_get_chip_data(entry->irq);
136 irq_set_msi_desc(entry->irq, NULL); 138 irq_set_msi_desc(entry->irq, NULL);
137 msi_bitmap_free_hwirqs(&msi_data->bitmap,
138 virq_to_hw(entry->irq), 1);
139 irq_dispose_mapping(entry->irq); 139 irq_dispose_mapping(entry->irq);
140 msi_bitmap_free_hwirqs(&msi_data->bitmap, hwirq, 1);
140 } 141 }
141 142
142 return; 143 return;
diff --git a/arch/powerpc/sysdev/mpic_u3msi.c b/arch/powerpc/sysdev/mpic_u3msi.c
index 70fbd5694a8b..2cbc7e29b85f 100644
--- a/arch/powerpc/sysdev/mpic_u3msi.c
+++ b/arch/powerpc/sysdev/mpic_u3msi.c
@@ -107,15 +107,16 @@ static u64 find_u4_magic_addr(struct pci_dev *pdev, unsigned int hwirq)
107static void u3msi_teardown_msi_irqs(struct pci_dev *pdev) 107static void u3msi_teardown_msi_irqs(struct pci_dev *pdev)
108{ 108{
109 struct msi_desc *entry; 109 struct msi_desc *entry;
110 irq_hw_number_t hwirq;
110 111
111 for_each_pci_msi_entry(entry, pdev) { 112 for_each_pci_msi_entry(entry, pdev) {
112 if (entry->irq == NO_IRQ) 113 if (entry->irq == NO_IRQ)
113 continue; 114 continue;
114 115
116 hwirq = virq_to_hw(entry->irq);
115 irq_set_msi_desc(entry->irq, NULL); 117 irq_set_msi_desc(entry->irq, NULL);
116 msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap,
117 virq_to_hw(entry->irq), 1);
118 irq_dispose_mapping(entry->irq); 118 irq_dispose_mapping(entry->irq);
119 msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, 1);
119 } 120 }
120 121
121 return; 122 return;
diff --git a/arch/powerpc/sysdev/ppc4xx_msi.c b/arch/powerpc/sysdev/ppc4xx_msi.c
index 24d0470c1698..8fb806135043 100644
--- a/arch/powerpc/sysdev/ppc4xx_msi.c
+++ b/arch/powerpc/sysdev/ppc4xx_msi.c
@@ -124,16 +124,17 @@ void ppc4xx_teardown_msi_irqs(struct pci_dev *dev)
124{ 124{
125 struct msi_desc *entry; 125 struct msi_desc *entry;
126 struct ppc4xx_msi *msi_data = &ppc4xx_msi; 126 struct ppc4xx_msi *msi_data = &ppc4xx_msi;
127 irq_hw_number_t hwirq;
127 128
128 dev_dbg(&dev->dev, "PCIE-MSI: tearing down msi irqs\n"); 129 dev_dbg(&dev->dev, "PCIE-MSI: tearing down msi irqs\n");
129 130
130 for_each_pci_msi_entry(entry, dev) { 131 for_each_pci_msi_entry(entry, dev) {
131 if (entry->irq == NO_IRQ) 132 if (entry->irq == NO_IRQ)
132 continue; 133 continue;
134 hwirq = virq_to_hw(entry->irq);
133 irq_set_msi_desc(entry->irq, NULL); 135 irq_set_msi_desc(entry->irq, NULL);
134 msi_bitmap_free_hwirqs(&msi_data->bitmap,
135 virq_to_hw(entry->irq), 1);
136 irq_dispose_mapping(entry->irq); 136 irq_dispose_mapping(entry->irq);
137 msi_bitmap_free_hwirqs(&msi_data->bitmap, hwirq, 1);
137 } 138 }
138} 139}
139 140
diff --git a/drivers/misc/cxl/Makefile b/drivers/misc/cxl/Makefile
index 6f484dfe78f9..6982f603fadc 100644
--- a/drivers/misc/cxl/Makefile
+++ b/drivers/misc/cxl/Makefile
@@ -1,4 +1,4 @@
1ccflags-y := -Werror 1ccflags-y := -Werror -Wno-unused-const-variable
2 2
3cxl-y += main.o file.o irq.o fault.o native.o 3cxl-y += main.o file.o irq.o fault.o native.o
4cxl-y += context.o sysfs.o debugfs.o pci.o trace.o 4cxl-y += context.o sysfs.o debugfs.o pci.o trace.o
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
index 02c85160bfe9..a5e977192b61 100644
--- a/drivers/misc/cxl/pci.c
+++ b/drivers/misc/cxl/pci.c
@@ -1249,8 +1249,6 @@ static int cxl_probe(struct pci_dev *dev, const struct pci_device_id *id)
1249 int slice; 1249 int slice;
1250 int rc; 1250 int rc;
1251 1251
1252 pci_dev_get(dev);
1253
1254 if (cxl_verbose) 1252 if (cxl_verbose)
1255 dump_cxl_config_space(dev); 1253 dump_cxl_config_space(dev);
1256 1254
diff --git a/drivers/misc/cxl/vphb.c b/drivers/misc/cxl/vphb.c
index 6dd16a6d153f..94b520896b18 100644
--- a/drivers/misc/cxl/vphb.c
+++ b/drivers/misc/cxl/vphb.c
@@ -48,6 +48,12 @@ static bool cxl_pci_enable_device_hook(struct pci_dev *dev)
48 48
49 phb = pci_bus_to_host(dev->bus); 49 phb = pci_bus_to_host(dev->bus);
50 afu = (struct cxl_afu *)phb->private_data; 50 afu = (struct cxl_afu *)phb->private_data;
51
52 if (!cxl_adapter_link_ok(afu->adapter)) {
53 dev_warn(&dev->dev, "%s: Device link is down, refusing to enable AFU\n", __func__);
54 return false;
55 }
56
51 set_dma_ops(&dev->dev, &dma_direct_ops); 57 set_dma_ops(&dev->dev, &dma_direct_ops);
52 set_dma_offset(&dev->dev, PAGE_OFFSET); 58 set_dma_offset(&dev->dev, PAGE_OFFSET);
53 59