aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2019-08-13 03:25:06 -0400
committerTony Luck <tony.luck@intel.com>2019-08-16 14:33:57 -0400
commitdf43acac8e32e2ee51a1e9376993c5ac18598d92 (patch)
treefd86e0604c0485dd2116e38575806f93189bddb3
parent2e0f2b1659ddd7bb005ca0bf9f92915904974676 (diff)
ia64: remove the zx1 swiotlb machvec
The aim of this machvec is to support devices with < 32-bit dma masks. But given that ia64 only has a ZONE_DMA32 and not a ZONE_DMA that isn't supported by swiotlb either. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lkml.kernel.org/r/20190813072514.23299-21-hch@lst.de Signed-off-by: Tony Luck <tony.luck@intel.com>
-rw-r--r--Documentation/admin-guide/kernel-parameters.txt2
-rw-r--r--arch/ia64/Kconfig13
-rw-r--r--arch/ia64/Kconfig.debug2
-rw-r--r--arch/ia64/Makefile2
-rw-r--r--arch/ia64/hp/common/Makefile2
-rw-r--r--arch/ia64/hp/common/hwsw_iommu.c60
-rw-r--r--arch/ia64/hp/common/sba_iommu.c15
-rw-r--r--arch/ia64/hp/zx1/Makefile2
-rw-r--r--arch/ia64/hp/zx1/hpzx1_swiotlb_machvec.c3
-rw-r--r--arch/ia64/include/asm/acpi.h2
-rw-r--r--arch/ia64/include/asm/dma-mapping.h8
-rw-r--r--arch/ia64/include/asm/machvec.h15
-rw-r--r--arch/ia64/include/asm/machvec_hpzx1_swiotlb.h20
-rw-r--r--arch/ia64/kernel/dma-mapping.c6
-rw-r--r--drivers/char/agp/Kconfig2
15 files changed, 7 insertions, 147 deletions
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 7ccd158b3894..4ace5af0e9a7 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -2373,7 +2373,7 @@
2373 2373
2374 machvec= [IA-64] Force the use of a particular machine-vector 2374 machvec= [IA-64] Force the use of a particular machine-vector
2375 (machvec) in a generic kernel. 2375 (machvec) in a generic kernel.
2376 Example: machvec=hpzx1_swiotlb 2376 Example: machvec=hpzx1
2377 2377
2378 machtype= [Loongson] Share the same kernel image file between different 2378 machtype= [Loongson] Share the same kernel image file between different
2379 yeeloong laptop. 2379 yeeloong laptop.
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 63db7a5378ac..a42ab41ee8ab 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -138,7 +138,6 @@ config IA64_GENERIC
138 DIG-compliant For DIG ("Developer's Interface Guide") compliant systems 138 DIG-compliant For DIG ("Developer's Interface Guide") compliant systems
139 DIG+Intel+IOMMU For DIG systems with Intel IOMMU 139 DIG+Intel+IOMMU For DIG systems with Intel IOMMU
140 HP-zx1/sx1000 For HP systems 140 HP-zx1/sx1000 For HP systems
141 HP-zx1/sx1000+swiotlb For HP systems with (broken) DMA-constrained devices.
142 SGI-UV For SGI UV systems 141 SGI-UV For SGI UV systems
143 142
144 If you don't know what to do, choose "generic". 143 If you don't know what to do, choose "generic".
@@ -158,16 +157,6 @@ config IA64_HP_ZX1
158 Build a kernel that runs on HP zx1 and sx1000 systems. This adds 157 Build a kernel that runs on HP zx1 and sx1000 systems. This adds
159 support for the HP I/O MMU. 158 support for the HP I/O MMU.
160 159
161config IA64_HP_ZX1_SWIOTLB
162 bool "HP-zx1/sx1000 with software I/O TLB"
163 select SWIOTLB
164 help
165 Build a kernel that runs on HP zx1 and sx1000 systems even when they
166 have broken PCI devices which cannot DMA to full 32 bits. Apart
167 from support for the HP I/O MMU, this includes support for the software
168 I/O TLB, which allows supporting the broken devices at the expense of
169 wasting some kernel memory (about 2MB by default).
170
171config IA64_SGI_UV 160config IA64_SGI_UV
172 bool "SGI-UV" 161 bool "SGI-UV"
173 select NUMA 162 select NUMA
@@ -350,7 +339,7 @@ config ARCH_SPARSEMEM_ENABLE
350 select SPARSEMEM_VMEMMAP_ENABLE 339 select SPARSEMEM_VMEMMAP_ENABLE
351 340
352config ARCH_DISCONTIGMEM_DEFAULT 341config ARCH_DISCONTIGMEM_DEFAULT
353 def_bool y if (IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB) 342 def_bool y if (IA64_GENERIC || IA64_HP_ZX1)
354 depends on ARCH_DISCONTIGMEM_ENABLE 343 depends on ARCH_DISCONTIGMEM_ENABLE
355 344
356config NUMA 345config NUMA
diff --git a/arch/ia64/Kconfig.debug b/arch/ia64/Kconfig.debug
index 793a613c54ab..abf8d04ab6ab 100644
--- a/arch/ia64/Kconfig.debug
+++ b/arch/ia64/Kconfig.debug
@@ -14,7 +14,7 @@ config IA64_GRANULE_16MB
14 14
15config IA64_GRANULE_64MB 15config IA64_GRANULE_64MB
16 bool "64MB" 16 bool "64MB"
17 depends on !(IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB) 17 depends on !(IA64_GENERIC || IA64_HP_ZX1)
18 18
19endchoice 19endchoice
20 20
diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile
index c06802799659..0b3647efde5d 100644
--- a/arch/ia64/Makefile
+++ b/arch/ia64/Makefile
@@ -54,12 +54,10 @@ core-$(CONFIG_IA64_DIG) += arch/ia64/dig/
54core-$(CONFIG_IA64_DIG_VTD) += arch/ia64/dig/ 54core-$(CONFIG_IA64_DIG_VTD) += arch/ia64/dig/
55core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/ 55core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/
56core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/ 56core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/
57core-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/dig/
58core-$(CONFIG_IA64_SGI_UV) += arch/ia64/uv/ 57core-$(CONFIG_IA64_SGI_UV) += arch/ia64/uv/
59 58
60drivers-y += arch/ia64/pci/ 59drivers-y += arch/ia64/pci/
61drivers-$(CONFIG_IA64_HP_ZX1) += arch/ia64/hp/common/ arch/ia64/hp/zx1/ 60drivers-$(CONFIG_IA64_HP_ZX1) += arch/ia64/hp/common/ arch/ia64/hp/zx1/
62drivers-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/hp/common/ arch/ia64/hp/zx1/
63drivers-$(CONFIG_IA64_GENERIC) += arch/ia64/hp/common/ arch/ia64/hp/zx1/ arch/ia64/uv/ 61drivers-$(CONFIG_IA64_GENERIC) += arch/ia64/hp/common/ arch/ia64/hp/zx1/ arch/ia64/uv/
64drivers-$(CONFIG_OPROFILE) += arch/ia64/oprofile/ 62drivers-$(CONFIG_OPROFILE) += arch/ia64/oprofile/
65 63
diff --git a/arch/ia64/hp/common/Makefile b/arch/ia64/hp/common/Makefile
index 6026308f9a62..47c8f6ecb6f4 100644
--- a/arch/ia64/hp/common/Makefile
+++ b/arch/ia64/hp/common/Makefile
@@ -7,6 +7,4 @@
7# 7#
8 8
9obj-y := sba_iommu.o 9obj-y := sba_iommu.o
10obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += hwsw_iommu.o
11obj-$(CONFIG_IA64_GENERIC) += hwsw_iommu.o
12obj-$(CONFIG_IA64_HP_AML_NFW) += aml_nfw.o 10obj-$(CONFIG_IA64_HP_AML_NFW) += aml_nfw.o
diff --git a/arch/ia64/hp/common/hwsw_iommu.c b/arch/ia64/hp/common/hwsw_iommu.c
deleted file mode 100644
index 8840ed97712f..000000000000
--- a/arch/ia64/hp/common/hwsw_iommu.c
+++ /dev/null
@@ -1,60 +0,0 @@
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2004 Hewlett-Packard Development Company, L.P.
4 * Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
5 *
6 * This is a pseudo I/O MMU which dispatches to the hardware I/O MMU
7 * whenever possible. We assume that the hardware I/O MMU requires
8 * full 32-bit addressability, as is the case, e.g., for HP zx1-based
9 * systems (there, the I/O MMU window is mapped at 3-4GB). If a
10 * device doesn't provide full 32-bit addressability, we fall back on
11 * the sw I/O TLB. This is good enough to let us support broken
12 * hardware such as soundcards which have a DMA engine that can
13 * address only 28 bits.
14 */
15
16#include <linux/device.h>
17#include <linux/dma-mapping.h>
18#include <linux/swiotlb.h>
19#include <linux/export.h>
20#include <asm/machvec.h>
21
22extern const struct dma_map_ops sba_dma_ops;
23
24/* swiotlb declarations & definitions: */
25extern int swiotlb_late_init_with_default_size (size_t size);
26
27/*
28 * Note: we need to make the determination of whether or not to use
29 * the sw I/O TLB based purely on the device structure. Anything else
30 * would be unreliable or would be too intrusive.
31 */
32static inline int use_swiotlb(struct device *dev)
33{
34 return dev && dev->dma_mask &&
35 !sba_dma_ops.dma_supported(dev, *dev->dma_mask);
36}
37
38const struct dma_map_ops *hwsw_dma_get_ops(struct device *dev)
39{
40 if (use_swiotlb(dev))
41 return NULL;
42 return &sba_dma_ops;
43}
44EXPORT_SYMBOL(hwsw_dma_get_ops);
45
46void __init
47hwsw_init (void)
48{
49 /* default to a smallish 2MB sw I/O TLB */
50 if (swiotlb_late_init_with_default_size (2 * (1<<20)) != 0) {
51#ifdef CONFIG_IA64_GENERIC
52 /* Better to have normal DMA than panic */
53 printk(KERN_WARNING "%s: Failed to initialize software I/O TLB,"
54 " reverting to hpzx1 platform vector\n", __func__);
55 machvec_init("hpzx1");
56#else
57 panic("Unable to initialize software I/O TLB services");
58#endif
59 }
60}
diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c
index 18321ce8bfa0..215fa688b729 100644
--- a/arch/ia64/hp/common/sba_iommu.c
+++ b/arch/ia64/hp/common/sba_iommu.c
@@ -2059,7 +2059,7 @@ arch_initcall(acpi_sba_ioc_init_acpi);
2059static int __init 2059static int __init
2060sba_init(void) 2060sba_init(void)
2061{ 2061{
2062 if (!ia64_platform_is("hpzx1") && !ia64_platform_is("hpzx1_swiotlb")) 2062 if (!ia64_platform_is("hpzx1"))
2063 return 0; 2063 return 0;
2064 2064
2065#if defined(CONFIG_IA64_GENERIC) 2065#if defined(CONFIG_IA64_GENERIC)
@@ -2102,19 +2102,6 @@ sba_init(void)
2102 return 0; 2102 return 0;
2103 } 2103 }
2104 2104
2105#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_HP_ZX1_SWIOTLB)
2106 /*
2107 * hpzx1_swiotlb needs to have a fairly small swiotlb bounce
2108 * buffer setup to support devices with smaller DMA masks than
2109 * sba_iommu can handle.
2110 */
2111 if (ia64_platform_is("hpzx1_swiotlb")) {
2112 extern void hwsw_init(void);
2113
2114 hwsw_init();
2115 }
2116#endif
2117
2118 { 2105 {
2119 struct pci_bus *b = NULL; 2106 struct pci_bus *b = NULL;
2120 while ((b = pci_find_next_bus(b)) != NULL) 2107 while ((b = pci_find_next_bus(b)) != NULL)
diff --git a/arch/ia64/hp/zx1/Makefile b/arch/ia64/hp/zx1/Makefile
index 46b37d820b59..bea44b4ed173 100644
--- a/arch/ia64/hp/zx1/Makefile
+++ b/arch/ia64/hp/zx1/Makefile
@@ -6,4 +6,4 @@
6# Copyright (C) Alex Williamson (alex_williamson@hp.com) 6# Copyright (C) Alex Williamson (alex_williamson@hp.com)
7# 7#
8 8
9obj-$(CONFIG_IA64_GENERIC) += hpzx1_machvec.o hpzx1_swiotlb_machvec.o 9obj-$(CONFIG_IA64_GENERIC) += hpzx1_machvec.o
diff --git a/arch/ia64/hp/zx1/hpzx1_swiotlb_machvec.c b/arch/ia64/hp/zx1/hpzx1_swiotlb_machvec.c
deleted file mode 100644
index 4392a96b3c58..000000000000
--- a/arch/ia64/hp/zx1/hpzx1_swiotlb_machvec.c
+++ /dev/null
@@ -1,3 +0,0 @@
1#define MACHVEC_PLATFORM_NAME hpzx1_swiotlb
2#define MACHVEC_PLATFORM_HEADER <asm/machvec_hpzx1_swiotlb.h>
3#include <asm/machvec_init.h>
diff --git a/arch/ia64/include/asm/acpi.h b/arch/ia64/include/asm/acpi.h
index 01c1c269aa13..9e563df73038 100644
--- a/arch/ia64/include/asm/acpi.h
+++ b/arch/ia64/include/asm/acpi.h
@@ -39,8 +39,6 @@ static inline const char *acpi_get_sysname (void)
39{ 39{
40# if defined (CONFIG_IA64_HP_ZX1) 40# if defined (CONFIG_IA64_HP_ZX1)
41 return "hpzx1"; 41 return "hpzx1";
42# elif defined (CONFIG_IA64_HP_ZX1_SWIOTLB)
43 return "hpzx1_swiotlb";
44# elif defined (CONFIG_IA64_SGI_UV) 42# elif defined (CONFIG_IA64_SGI_UV)
45 return "uv"; 43 return "uv";
46# elif defined (CONFIG_IA64_DIG) 44# elif defined (CONFIG_IA64_DIG)
diff --git a/arch/ia64/include/asm/dma-mapping.h b/arch/ia64/include/asm/dma-mapping.h
index f7ec71e4001e..a5d9d788eede 100644
--- a/arch/ia64/include/asm/dma-mapping.h
+++ b/arch/ia64/include/asm/dma-mapping.h
@@ -6,17 +6,11 @@
6 * Copyright (C) 2003-2004 Hewlett-Packard Co 6 * Copyright (C) 2003-2004 Hewlett-Packard Co
7 * David Mosberger-Tang <davidm@hpl.hp.com> 7 * David Mosberger-Tang <davidm@hpl.hp.com>
8 */ 8 */
9#include <asm/machvec.h>
10#include <linux/scatterlist.h>
11#include <linux/dma-debug.h>
12
13extern const struct dma_map_ops *dma_ops; 9extern const struct dma_map_ops *dma_ops;
14extern struct ia64_machine_vector ia64_mv;
15extern void set_iommu_machvec(void);
16 10
17static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus) 11static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus)
18{ 12{
19 return platform_dma_get_ops(NULL); 13 return dma_ops;
20} 14}
21 15
22#endif /* _ASM_IA64_DMA_MAPPING_H */ 16#endif /* _ASM_IA64_DMA_MAPPING_H */
diff --git a/arch/ia64/include/asm/machvec.h b/arch/ia64/include/asm/machvec.h
index 5a9a8af79308..fa867e980d87 100644
--- a/arch/ia64/include/asm/machvec.h
+++ b/arch/ia64/include/asm/machvec.h
@@ -17,12 +17,6 @@ struct device;
17 17
18typedef void ia64_mv_setup_t (char **); 18typedef void ia64_mv_setup_t (char **);
19typedef void ia64_mv_dma_init (void); 19typedef void ia64_mv_dma_init (void);
20typedef const struct dma_map_ops *ia64_mv_dma_get_ops(struct device *);
21
22static inline void
23machvec_noop (void)
24{
25}
26 20
27extern void machvec_setup (char **); 21extern void machvec_setup (char **);
28 22
@@ -32,8 +26,6 @@ extern void machvec_setup (char **);
32# include <asm/machvec_dig_vtd.h> 26# include <asm/machvec_dig_vtd.h>
33# elif defined (CONFIG_IA64_HP_ZX1) 27# elif defined (CONFIG_IA64_HP_ZX1)
34# include <asm/machvec_hpzx1.h> 28# include <asm/machvec_hpzx1.h>
35# elif defined (CONFIG_IA64_HP_ZX1_SWIOTLB)
36# include <asm/machvec_hpzx1_swiotlb.h>
37# elif defined (CONFIG_IA64_SGI_UV) 29# elif defined (CONFIG_IA64_SGI_UV)
38# include <asm/machvec_uv.h> 30# include <asm/machvec_uv.h>
39# elif defined (CONFIG_IA64_GENERIC) 31# elif defined (CONFIG_IA64_GENERIC)
@@ -44,7 +36,6 @@ extern void machvec_setup (char **);
44# define ia64_platform_name ia64_mv.name 36# define ia64_platform_name ia64_mv.name
45# define platform_setup ia64_mv.setup 37# define platform_setup ia64_mv.setup
46# define platform_dma_init ia64_mv.dma_init 38# define platform_dma_init ia64_mv.dma_init
47# define platform_dma_get_ops ia64_mv.dma_get_ops
48# endif 39# endif
49 40
50/* __attribute__((__aligned__(16))) is required to make size of the 41/* __attribute__((__aligned__(16))) is required to make size of the
@@ -56,7 +47,6 @@ struct ia64_machine_vector {
56 const char *name; 47 const char *name;
57 ia64_mv_setup_t *setup; 48 ia64_mv_setup_t *setup;
58 ia64_mv_dma_init *dma_init; 49 ia64_mv_dma_init *dma_init;
59 ia64_mv_dma_get_ops *dma_get_ops;
60} __attribute__((__aligned__(16))); /* align attrib? see above comment */ 50} __attribute__((__aligned__(16))); /* align attrib? see above comment */
61 51
62#define MACHVEC_INIT(name) \ 52#define MACHVEC_INIT(name) \
@@ -64,7 +54,6 @@ struct ia64_machine_vector {
64 #name, \ 54 #name, \
65 platform_setup, \ 55 platform_setup, \
66 platform_dma_init, \ 56 platform_dma_init, \
67 platform_dma_get_ops, \
68} 57}
69 58
70extern struct ia64_machine_vector ia64_mv; 59extern struct ia64_machine_vector ia64_mv;
@@ -76,7 +65,6 @@ extern void machvec_init_from_cmdline(const char *cmdline);
76# endif /* CONFIG_IA64_GENERIC */ 65# endif /* CONFIG_IA64_GENERIC */
77 66
78extern void swiotlb_dma_init(void); 67extern void swiotlb_dma_init(void);
79extern const struct dma_map_ops *dma_get_ops(struct device *);
80 68
81/* 69/*
82 * Define default versions so we can extend machvec for new platforms without having 70 * Define default versions so we can extend machvec for new platforms without having
@@ -88,8 +76,5 @@ extern const struct dma_map_ops *dma_get_ops(struct device *);
88#ifndef platform_dma_init 76#ifndef platform_dma_init
89# define platform_dma_init swiotlb_dma_init 77# define platform_dma_init swiotlb_dma_init
90#endif 78#endif
91#ifndef platform_dma_get_ops
92# define platform_dma_get_ops dma_get_ops
93#endif
94 79
95#endif /* _ASM_IA64_MACHVEC_H */ 80#endif /* _ASM_IA64_MACHVEC_H */
diff --git a/arch/ia64/include/asm/machvec_hpzx1_swiotlb.h b/arch/ia64/include/asm/machvec_hpzx1_swiotlb.h
deleted file mode 100644
index 5aec6a008c61..000000000000
--- a/arch/ia64/include/asm/machvec_hpzx1_swiotlb.h
+++ /dev/null
@@ -1,20 +0,0 @@
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_IA64_MACHVEC_HPZX1_SWIOTLB_h
3#define _ASM_IA64_MACHVEC_HPZX1_SWIOTLB_h
4
5extern ia64_mv_setup_t dig_setup;
6extern ia64_mv_dma_get_ops hwsw_dma_get_ops;
7
8/*
9 * This stuff has dual use!
10 *
11 * For a generic kernel, the macros are used to initialize the
12 * platform's machvec structure. When compiling a non-generic kernel,
13 * the macros are used directly.
14 */
15#define ia64_platform_name "hpzx1_swiotlb"
16#define platform_setup dig_setup
17#define platform_dma_init machvec_noop
18#define platform_dma_get_ops hwsw_dma_get_ops
19
20#endif /* _ASM_IA64_MACHVEC_HPZX1_SWIOTLB_h */
diff --git a/arch/ia64/kernel/dma-mapping.c b/arch/ia64/kernel/dma-mapping.c
index ad7d9963de34..4be5ee04ccfa 100644
--- a/arch/ia64/kernel/dma-mapping.c
+++ b/arch/ia64/kernel/dma-mapping.c
@@ -9,12 +9,6 @@ int iommu_detected __read_mostly;
9const struct dma_map_ops *dma_ops; 9const struct dma_map_ops *dma_ops;
10EXPORT_SYMBOL(dma_ops); 10EXPORT_SYMBOL(dma_ops);
11 11
12const struct dma_map_ops *dma_get_ops(struct device *dev)
13{
14 return dma_ops;
15}
16EXPORT_SYMBOL(dma_get_ops);
17
18#ifdef CONFIG_SWIOTLB 12#ifdef CONFIG_SWIOTLB
19void *arch_dma_alloc(struct device *dev, size_t size, 13void *arch_dma_alloc(struct device *dev, size_t size,
20 dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) 14 dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs)
diff --git a/drivers/char/agp/Kconfig b/drivers/char/agp/Kconfig
index be50d7a93f4c..42d45e97c2ae 100644
--- a/drivers/char/agp/Kconfig
+++ b/drivers/char/agp/Kconfig
@@ -118,7 +118,7 @@ config AGP_I460
118 118
119config AGP_HP_ZX1 119config AGP_HP_ZX1
120 tristate "HP ZX1 chipset AGP support" 120 tristate "HP ZX1 chipset AGP support"
121 depends on AGP && (IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB || IA64_GENERIC) 121 depends on AGP && (IA64_HP_ZX1 || IA64_GENERIC)
122 help 122 help
123 This option gives you AGP GART support for the HP ZX1 chipset 123 This option gives you AGP GART support for the HP ZX1 chipset
124 for IA64 processors. 124 for IA64 processors.