diff options
Diffstat (limited to 'recipes-kernel/linux/linux-hierofalcon')
14 files changed, 11340 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-hierofalcon/01-arm64-boot-BE-kernels-from-UEFI.patch b/recipes-kernel/linux/linux-hierofalcon/01-arm64-boot-BE-kernels-from-UEFI.patch new file mode 100644 index 0000000..6790315 --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/01-arm64-boot-BE-kernels-from-UEFI.patch | |||
@@ -0,0 +1,995 @@ | |||
1 | From c55fa726d3e67da11a7ccd16ca367e9094265e4e Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Mon, 16 Feb 2015 13:56:36 +0100 | ||
4 | Subject: [PATCH 1/1] arm64: boot BE kernels from UEFI | ||
5 | |||
6 | Adds support for booting BE kernels from UEFI. As UEFI is defined to | ||
7 | be strictly little endian, some workarounds are required to combine a little | ||
8 | endian EFI stub with a big endian kernel. Also, runtime services need to be | ||
9 | wrapped so they can be executed in little endian mode. | ||
10 | |||
11 | This patch is the resulting of porting on 3.19 kernel of a patch set | ||
12 | ([RFC PATCH 00/10] arm64: boot BE kernels from UEFI) provided by | ||
13 | Ard Biesheuvel ard.biesheuvel at linaro.org for 3.17 kernel. | ||
14 | |||
15 | http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/274208.html | ||
16 | |||
17 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
18 | --- | ||
19 | arch/arm64/Kconfig | 10 ++- | ||
20 | arch/arm64/include/asm/assembler.h | 18 +++++ | ||
21 | arch/arm64/include/asm/efi.h | 2 + | ||
22 | arch/arm64/kernel/Makefile | 7 +- | ||
23 | arch/arm64/kernel/efi-be-call.S | 55 +++++++++++++++ | ||
24 | arch/arm64/kernel/efi-be-runtime.c | 104 ++++++++++++++++++++++++++++ | ||
25 | arch/arm64/kernel/efi-entry.S | 43 +++++++++--- | ||
26 | arch/arm64/kernel/efi-stub.c | 10 +-- | ||
27 | arch/arm64/kernel/efi.c | 64 ++++++++++------- | ||
28 | arch/arm64/kernel/efistub-le/Makefile | 52 ++++++++++++++ | ||
29 | arch/arm64/kernel/efistub-le/efi-le-entry.S | 12 ++++ | ||
30 | arch/arm64/kernel/efistub-le/efistub-le.lds | 35 ++++++++++ | ||
31 | arch/arm64/kernel/efistub-le/le.h | 12 ++++ | ||
32 | arch/arm64/kernel/efistub-le/strstr.c | 20 ++++++ | ||
33 | arch/arm64/kernel/head.S | 48 +++++++------ | ||
34 | arch/arm64/kernel/image.h | 16 ++++- | ||
35 | drivers/firmware/efi/efi.c | 26 ++++--- | ||
36 | drivers/firmware/efi/efivars.c | 2 +- | ||
37 | drivers/firmware/efi/libstub/fdt.c | 4 ++ | ||
38 | 19 files changed, 459 insertions(+), 81 deletions(-) | ||
39 | create mode 100644 arch/arm64/kernel/efi-be-call.S | ||
40 | create mode 100644 arch/arm64/kernel/efi-be-runtime.c | ||
41 | create mode 100644 arch/arm64/kernel/efistub-le/Makefile | ||
42 | create mode 100644 arch/arm64/kernel/efistub-le/efi-le-entry.S | ||
43 | create mode 100644 arch/arm64/kernel/efistub-le/efistub-le.lds | ||
44 | create mode 100644 arch/arm64/kernel/efistub-le/le.h | ||
45 | create mode 100644 arch/arm64/kernel/efistub-le/strstr.c | ||
46 | |||
47 | diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig | ||
48 | index 3f08727..d35a06c 100644 | ||
49 | --- a/arch/arm64/Kconfig | ||
50 | +++ b/arch/arm64/Kconfig | ||
51 | @@ -573,16 +573,20 @@ config CMDLINE_FORCE | ||
52 | config EFI_STUB | ||
53 | bool | ||
54 | |||
55 | +config EFI_LE_STUB | ||
56 | + bool | ||
57 | + | ||
58 | config EFI | ||
59 | bool "UEFI runtime support" | ||
60 | - depends on OF && !CPU_BIG_ENDIAN | ||
61 | + depends on OF | ||
62 | select LIBFDT | ||
63 | select UCS2_STRING | ||
64 | select EFI_PARAMS_FROM_FDT | ||
65 | select EFI_RUNTIME_WRAPPERS | ||
66 | - select EFI_STUB | ||
67 | + select EFI_STUB if !CPU_BIG_ENDIAN | ||
68 | + select EFI_LE_STUB if CPU_BIG_ENDIAN | ||
69 | select EFI_ARMSTUB | ||
70 | - default y | ||
71 | + default y if !CPU_BIG_ENDIAN | ||
72 | help | ||
73 | This option provides support for runtime services provided | ||
74 | by UEFI firmware (such as non-volatile variables, realtime | ||
75 | diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h | ||
76 | index 5901480..ad3aa92 100644 | ||
77 | --- a/arch/arm64/include/asm/assembler.h | ||
78 | +++ b/arch/arm64/include/asm/assembler.h | ||
79 | @@ -155,3 +155,21 @@ lr .req x30 // link register | ||
80 | #endif | ||
81 | orr \rd, \lbits, \hbits, lsl #32 | ||
82 | .endm | ||
83 | + | ||
84 | + /* | ||
85 | + * Define LE constants | ||
86 | + */ | ||
87 | + .macro le16, x | ||
88 | + .byte \x & 0xff | ||
89 | + .byte (\x >> 8) & 0xff | ||
90 | + .endm | ||
91 | + | ||
92 | + .macro le32, x | ||
93 | + le16 \x | ||
94 | + le16 \x >> 16 | ||
95 | + .endm | ||
96 | + | ||
97 | + .macro le64, x | ||
98 | + le32 \x | ||
99 | + le32 \x >> 32 | ||
100 | + .endm | ||
101 | diff --git a/arch/arm64/include/asm/efi.h b/arch/arm64/include/asm/efi.h | ||
102 | index a34fd3b..44e642b 100644 | ||
103 | --- a/arch/arm64/include/asm/efi.h | ||
104 | +++ b/arch/arm64/include/asm/efi.h | ||
105 | @@ -44,4 +44,6 @@ extern void efi_idmap_init(void); | ||
106 | |||
107 | #define efi_call_early(f, ...) sys_table_arg->boottime->f(__VA_ARGS__) | ||
108 | |||
109 | +extern void efi_be_runtime_setup(void); | ||
110 | + | ||
111 | #endif /* _ASM_EFI_H */ | ||
112 | diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile | ||
113 | index 79bdd3b..1ab3ff4 100644 | ||
114 | --- a/arch/arm64/kernel/Makefile | ||
115 | +++ b/arch/arm64/kernel/Makefile | ||
116 | @@ -32,7 +32,12 @@ arm64-obj-$(CONFIG_ARM64_CPU_SUSPEND) += sleep.o suspend.o | ||
117 | arm64-obj-$(CONFIG_CPU_IDLE) += cpuidle.o | ||
118 | arm64-obj-$(CONFIG_JUMP_LABEL) += jump_label.o | ||
119 | arm64-obj-$(CONFIG_KGDB) += kgdb.o | ||
120 | -arm64-obj-$(CONFIG_EFI) += efi.o efi-stub.o efi-entry.o | ||
121 | +arm64-efi-obj-y := efi.o | ||
122 | +arm64-efi-obj-$(CONFIG_EFI_STUB) += efi-stub.o efi-entry.o | ||
123 | +arm64-efi-obj-$(CONFIG_EFI_LE_STUB) += efistub-le/ | ||
124 | +arm64-efi-obj-$(CONFIG_CPU_BIG_ENDIAN) += efi-be-runtime.o efi-be-call.o | ||
125 | +arm64-obj-$(CONFIG_EFI) += $(arm64-efi-obj-y) | ||
126 | + | ||
127 | arm64-obj-$(CONFIG_PCI) += pci.o | ||
128 | arm64-obj-$(CONFIG_ARMV8_DEPRECATED) += armv8_deprecated.o | ||
129 | arm64-obj-$(CONFIG_ACPI) += acpi.o | ||
130 | diff --git a/arch/arm64/kernel/efi-be-call.S b/arch/arm64/kernel/efi-be-call.S | ||
131 | new file mode 100644 | ||
132 | index 0000000..b395c8c | ||
133 | --- /dev/null | ||
134 | +++ b/arch/arm64/kernel/efi-be-call.S | ||
135 | @@ -0,0 +1,55 @@ | ||
136 | + | ||
137 | +#include <linux/linkage.h> | ||
138 | + | ||
139 | + .text | ||
140 | + .align 3 | ||
141 | +ENTRY(efi_be_phys_call) | ||
142 | + /* | ||
143 | + * Entered at physical address with 1:1 mapping enabled. | ||
144 | + */ | ||
145 | + stp x29, x30, [sp, #-96]! | ||
146 | + mov x29, sp | ||
147 | + str x27, [sp, #16] | ||
148 | + | ||
149 | + ldr x8, =efi_be_phys_call // virt address of this function | ||
150 | + adr x9, efi_be_phys_call // phys address of this function | ||
151 | + sub x9, x8, x9 // calculate virt to phys offset in x9 | ||
152 | + | ||
153 | + /* preserve all inputs */ | ||
154 | + stp x0, x1, [sp, #32] | ||
155 | + stp x2, x3, [sp, #48] | ||
156 | + stp x4, x5, [sp, #64] | ||
157 | + stp x6, x7, [sp, #80] | ||
158 | + | ||
159 | + /* get phys address of stack */ | ||
160 | + sub sp, sp, x9 | ||
161 | + | ||
162 | + /* switch to LE, disable MMU and D-cache but leave I-cache enabled */ | ||
163 | + mrs x27, sctlr_el1 | ||
164 | + bic x8, x27, #1 << 2 // clear SCTLR.C | ||
165 | + msr sctlr_el1, x8 | ||
166 | + | ||
167 | + bl flush_cache_all | ||
168 | + | ||
169 | + /* restore inputs but rotated by 1 register */ | ||
170 | + ldp x7, x0, [sp, #32] | ||
171 | + ldp x1, x2, [sp, #48] | ||
172 | + ldp x3, x4, [sp, #64] | ||
173 | + ldp x5, x6, [sp, #80] | ||
174 | + | ||
175 | + bic x8, x27, #1 << 2 // clear SCTLR.C | ||
176 | + bic x8, x8, #1 << 0 // clear SCTLR.M | ||
177 | + bic x8, x8, #1 << 25 // clear SCTLR.EE | ||
178 | + msr sctlr_el1, x8 | ||
179 | + isb | ||
180 | + | ||
181 | + blr x7 | ||
182 | + | ||
183 | + /* switch back to BE and reenable MMU and D-cache */ | ||
184 | + msr sctlr_el1, x27 | ||
185 | + | ||
186 | + mov sp, x29 | ||
187 | + ldr x27, [sp, #16] | ||
188 | + ldp x29, x30, [sp], #96 | ||
189 | + ret | ||
190 | +ENDPROC(efi_be_phys_call) | ||
191 | diff --git a/arch/arm64/kernel/efi-be-runtime.c b/arch/arm64/kernel/efi-be-runtime.c | ||
192 | new file mode 100644 | ||
193 | index 0000000..28d7406 | ||
194 | --- /dev/null | ||
195 | +++ b/arch/arm64/kernel/efi-be-runtime.c | ||
196 | @@ -0,0 +1,104 @@ | ||
197 | + | ||
198 | +#include <linux/efi.h> | ||
199 | +#include <linux/spinlock.h> | ||
200 | +#include <asm/efi.h> | ||
201 | +#include <asm/neon.h> | ||
202 | +#include <asm/tlbflush.h> | ||
203 | + | ||
204 | +static efi_runtime_services_t *runtime; | ||
205 | +static efi_status_t (*efi_be_call)(phys_addr_t func, ...); | ||
206 | + | ||
207 | +static DEFINE_SPINLOCK(efi_be_rt_lock); | ||
208 | + | ||
209 | +static unsigned long efi_be_call_pre(void) | ||
210 | +{ | ||
211 | + unsigned long flags; | ||
212 | + | ||
213 | + kernel_neon_begin(); | ||
214 | + spin_lock_irqsave(&efi_be_rt_lock, flags); | ||
215 | + cpu_switch_mm(idmap_pg_dir, &init_mm); | ||
216 | + flush_tlb_all(); | ||
217 | + return flags; | ||
218 | +} | ||
219 | + | ||
220 | +static void efi_be_call_post(unsigned long flags) | ||
221 | +{ | ||
222 | + cpu_switch_mm(current, current->active_mm); | ||
223 | + flush_tlb_all(); | ||
224 | + spin_unlock_irqrestore(&efi_be_rt_lock, flags); | ||
225 | + kernel_neon_end(); | ||
226 | +} | ||
227 | + | ||
228 | +static efi_status_t efi_be_get_variable(efi_char16_t *name, | ||
229 | + efi_guid_t *vendor, | ||
230 | + u32 *attr, | ||
231 | + unsigned long *data_size, | ||
232 | + void *data) | ||
233 | +{ | ||
234 | + unsigned long flags; | ||
235 | + efi_status_t status; | ||
236 | + | ||
237 | + *data_size = cpu_to_le64(*data_size); | ||
238 | + flags = efi_be_call_pre(); | ||
239 | + status = efi_be_call(le64_to_cpu(runtime->get_variable), | ||
240 | + virt_to_phys(name), virt_to_phys(vendor), | ||
241 | + virt_to_phys(attr), virt_to_phys(data_size), | ||
242 | + virt_to_phys(data)); | ||
243 | + efi_be_call_post(flags); | ||
244 | + *attr = le32_to_cpu(*attr); | ||
245 | + *data_size = le64_to_cpu(*data_size); | ||
246 | + return status; | ||
247 | +} | ||
248 | + | ||
249 | +static efi_status_t efi_be_get_next_variable(unsigned long *name_size, | ||
250 | + efi_char16_t *name, | ||
251 | + efi_guid_t *vendor) | ||
252 | +{ | ||
253 | + unsigned long flags; | ||
254 | + efi_status_t status; | ||
255 | + | ||
256 | + *name_size = cpu_to_le64(*name_size); | ||
257 | + flags = efi_be_call_pre(); | ||
258 | + status = efi_be_call(le64_to_cpu(runtime->get_next_variable), | ||
259 | + virt_to_phys(name_size), virt_to_phys(name), | ||
260 | + virt_to_phys(vendor)); | ||
261 | + efi_be_call_post(flags); | ||
262 | + *name_size = le64_to_cpu(*name_size); | ||
263 | + return status; | ||
264 | +} | ||
265 | + | ||
266 | +static efi_status_t efi_be_set_variable(efi_char16_t *name, | ||
267 | + efi_guid_t *vendor, | ||
268 | + u32 attr, | ||
269 | + unsigned long data_size, | ||
270 | + void *data) | ||
271 | +{ | ||
272 | + unsigned long flags; | ||
273 | + efi_status_t status; | ||
274 | + | ||
275 | + flags = efi_be_call_pre(); | ||
276 | + status = efi_be_call(le64_to_cpu(runtime->set_variable), | ||
277 | + virt_to_phys(name), virt_to_phys(vendor), | ||
278 | + cpu_to_le32(attr), cpu_to_le64(data_size), | ||
279 | + virt_to_phys(data)); | ||
280 | + efi_be_call_post(flags); | ||
281 | + return status; | ||
282 | +} | ||
283 | + | ||
284 | +void efi_be_runtime_setup(void) | ||
285 | +{ | ||
286 | + extern u8 efi_be_phys_call[]; | ||
287 | + | ||
288 | + runtime = ioremap_cache(le64_to_cpu(efi.systab->runtime), | ||
289 | + sizeof(efi_runtime_services_t)); | ||
290 | + if (!runtime) { | ||
291 | + pr_err("Failed to set up BE wrappers for UEFI Runtime Services!\n"); | ||
292 | + return; | ||
293 | + } | ||
294 | + | ||
295 | + efi_be_call = (void *)virt_to_phys(efi_be_phys_call); | ||
296 | + | ||
297 | + efi.get_variable = efi_be_get_variable; | ||
298 | + efi.get_next_variable = efi_be_get_next_variable; | ||
299 | + efi.set_variable = efi_be_set_variable; | ||
300 | +} | ||
301 | diff --git a/arch/arm64/kernel/efi-entry.S b/arch/arm64/kernel/efi-entry.S | ||
302 | index 8ce9b05..760fbb5 100644 | ||
303 | --- a/arch/arm64/kernel/efi-entry.S | ||
304 | +++ b/arch/arm64/kernel/efi-entry.S | ||
305 | @@ -34,7 +34,34 @@ ENTRY(efi_stub_entry) | ||
306 | * Create a stack frame to save FP/LR with extra space | ||
307 | * for image_addr variable passed to efi_entry(). | ||
308 | */ | ||
309 | - stp x29, x30, [sp, #-32]! | ||
310 | + stp x29, x30, [sp, #-48]! | ||
311 | + stp x22, x23, [sp, #32] | ||
312 | + | ||
313 | +#ifdef CONFIG_EFI_LE_STUB | ||
314 | + adr x4, efi_stub_entry | ||
315 | + ldp w8, w9, [x4, #-32] | ||
316 | +STUB_BE(rev w8, w8 ) | ||
317 | +STUB_BE(rev w9, w9 ) | ||
318 | + add x8, x4, w8, sxtw // x8: base of Image | ||
319 | + add x9, x4, w9, sxtw // x9: offset of linux_banner | ||
320 | + | ||
321 | + ldp x22, x23, [x4, #-24] // x22: size of Image | ||
322 | +STUB_BE(rev x23, x23 ) // x23: stext offset | ||
323 | + | ||
324 | + /* | ||
325 | + * Get a pointer to linux_banner in the outer image and store it | ||
326 | + * in this image. | ||
327 | + */ | ||
328 | + adrp x4, le_linux_banner | ||
329 | + str x9, [x4, #:lo12:le_linux_banner] | ||
330 | +#else | ||
331 | + adrp x8, _text | ||
332 | + add x8, x8, #:lo12:_text // x8: base of Image | ||
333 | + adrp x9, _edata | ||
334 | + add x9, x9, #:lo12:_edata | ||
335 | + sub x22, x9, x8 // x22: size of Image | ||
336 | + ldr x23, =stext_offset // x23: stext offset | ||
337 | +#endif | ||
338 | |||
339 | /* | ||
340 | * Call efi_entry to do the real work. | ||
341 | @@ -45,8 +72,6 @@ ENTRY(efi_stub_entry) | ||
342 | * efi_system_table_t *sys_table, | ||
343 | * unsigned long *image_addr) ; | ||
344 | */ | ||
345 | - adrp x8, _text | ||
346 | - add x8, x8, #:lo12:_text | ||
347 | add x2, sp, 16 | ||
348 | str x8, [x2] | ||
349 | bl efi_entry | ||
350 | @@ -61,17 +86,12 @@ ENTRY(efi_stub_entry) | ||
351 | */ | ||
352 | mov x20, x0 // DTB address | ||
353 | ldr x0, [sp, #16] // relocated _text address | ||
354 | - ldr x21, =stext_offset | ||
355 | - add x21, x0, x21 | ||
356 | + add x21, x0, x23 | ||
357 | |||
358 | /* | ||
359 | * Calculate size of the kernel Image (same for original and copy). | ||
360 | */ | ||
361 | - adrp x1, _text | ||
362 | - add x1, x1, #:lo12:_text | ||
363 | - adrp x2, _edata | ||
364 | - add x2, x2, #:lo12:_edata | ||
365 | - sub x1, x2, x1 | ||
366 | + mov x1, x22 | ||
367 | |||
368 | /* | ||
369 | * Flush the copied Image to the PoC, and ensure it is not shadowed by | ||
370 | @@ -117,7 +137,8 @@ ENTRY(efi_stub_entry) | ||
371 | |||
372 | efi_load_fail: | ||
373 | mov x0, #EFI_LOAD_ERROR | ||
374 | - ldp x29, x30, [sp], #32 | ||
375 | + ldp x22, x23, [sp, #32] | ||
376 | + ldp x29, x30, [sp], #48 | ||
377 | ret | ||
378 | |||
379 | efi_stub_entry_end: | ||
380 | diff --git a/arch/arm64/kernel/efi-stub.c b/arch/arm64/kernel/efi-stub.c | ||
381 | index d27dd98..dd6d6bc 100644 | ||
382 | --- a/arch/arm64/kernel/efi-stub.c | ||
383 | +++ b/arch/arm64/kernel/efi-stub.c | ||
384 | @@ -11,7 +11,6 @@ | ||
385 | */ | ||
386 | #include <linux/efi.h> | ||
387 | #include <asm/efi.h> | ||
388 | -#include <asm/sections.h> | ||
389 | |||
390 | efi_status_t handle_kernel_image(efi_system_table_t *sys_table, | ||
391 | unsigned long *image_addr, | ||
392 | @@ -22,22 +21,19 @@ efi_status_t handle_kernel_image(efi_system_table_t *sys_table, | ||
393 | efi_loaded_image_t *image) | ||
394 | { | ||
395 | efi_status_t status; | ||
396 | - unsigned long kernel_size, kernel_memsize = 0; | ||
397 | |||
398 | /* Relocate the image, if required. */ | ||
399 | - kernel_size = _edata - _text; | ||
400 | if (*image_addr != (dram_base + TEXT_OFFSET)) { | ||
401 | - kernel_memsize = kernel_size + (_end - _edata); | ||
402 | - status = efi_low_alloc(sys_table, kernel_memsize + TEXT_OFFSET, | ||
403 | + status = efi_low_alloc(sys_table, image->image_size + TEXT_OFFSET, | ||
404 | SZ_2M, reserve_addr); | ||
405 | if (status != EFI_SUCCESS) { | ||
406 | pr_efi_err(sys_table, "Failed to relocate kernel\n"); | ||
407 | return status; | ||
408 | } | ||
409 | memcpy((void *)*reserve_addr + TEXT_OFFSET, (void *)*image_addr, | ||
410 | - kernel_size); | ||
411 | + image->image_size); | ||
412 | *image_addr = *reserve_addr + TEXT_OFFSET; | ||
413 | - *reserve_size = kernel_memsize + TEXT_OFFSET; | ||
414 | + *reserve_size = image->image_size + TEXT_OFFSET; | ||
415 | } | ||
416 | |||
417 | |||
418 | diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c | ||
419 | index 4178e9e..133c599 100644 | ||
420 | --- a/arch/arm64/kernel/efi.c | ||
421 | +++ b/arch/arm64/kernel/efi.c | ||
422 | @@ -43,7 +43,7 @@ early_param("uefi_debug", uefi_debug_setup); | ||
423 | |||
424 | static int __init is_normal_ram(efi_memory_desc_t *md) | ||
425 | { | ||
426 | - if (md->attribute & EFI_MEMORY_WB) | ||
427 | + if (le64_to_cpu(md->attribute) & EFI_MEMORY_WB) | ||
428 | return 1; | ||
429 | return 0; | ||
430 | } | ||
431 | @@ -59,10 +59,10 @@ static void __init efi_setup_idmap(void) | ||
432 | |||
433 | /* map runtime io spaces */ | ||
434 | for_each_efi_memory_desc(&memmap, md) { | ||
435 | - if (!(md->attribute & EFI_MEMORY_RUNTIME) || is_normal_ram(md)) | ||
436 | + if (!(le64_to_cpu(md->attribute) & EFI_MEMORY_RUNTIME) || is_normal_ram(md)) | ||
437 | continue; | ||
438 | - paddr = md->phys_addr; | ||
439 | - npages = md->num_pages; | ||
440 | + paddr = le64_to_cpu(md->phys_addr); | ||
441 | + npages = le64_to_cpu(md->num_pages); | ||
442 | memrange_efi_to_native(&paddr, &npages); | ||
443 | size = npages << PAGE_SHIFT; | ||
444 | create_id_mapping(paddr, size, 1); | ||
445 | @@ -88,29 +88,29 @@ static int __init uefi_init(void) | ||
446 | /* | ||
447 | * Verify the EFI Table | ||
448 | */ | ||
449 | - if (efi.systab->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) { | ||
450 | + if (le64_to_cpu(efi.systab->hdr.signature) != EFI_SYSTEM_TABLE_SIGNATURE) { | ||
451 | pr_err("System table signature incorrect\n"); | ||
452 | retval = -EINVAL; | ||
453 | goto out; | ||
454 | } | ||
455 | - if ((efi.systab->hdr.revision >> 16) < 2) | ||
456 | + if ((le32_to_cpu(efi.systab->hdr.revision) >> 16) < 2) | ||
457 | pr_warn("Warning: EFI system table version %d.%02d, expected 2.00 or greater\n", | ||
458 | efi.systab->hdr.revision >> 16, | ||
459 | efi.systab->hdr.revision & 0xffff); | ||
460 | |||
461 | /* Show what we know for posterity */ | ||
462 | - c16 = early_memremap(efi.systab->fw_vendor, | ||
463 | + c16 = early_memremap(le64_to_cpu(efi.systab->fw_vendor), | ||
464 | sizeof(vendor)); | ||
465 | if (c16) { | ||
466 | for (i = 0; i < (int) sizeof(vendor) - 1 && *c16; ++i) | ||
467 | - vendor[i] = c16[i]; | ||
468 | + vendor[i] = le16_to_cpu(c16[i]); | ||
469 | vendor[i] = '\0'; | ||
470 | early_memunmap(c16, sizeof(vendor)); | ||
471 | } | ||
472 | |||
473 | pr_info("EFI v%u.%.02u by %s\n", | ||
474 | - efi.systab->hdr.revision >> 16, | ||
475 | - efi.systab->hdr.revision & 0xffff, vendor); | ||
476 | + le32_to_cpu(efi.systab->hdr.revision) >> 16, | ||
477 | + le32_to_cpu(efi.systab->hdr.revision) & 0xffff, vendor); | ||
478 | |||
479 | retval = efi_config_init(NULL); | ||
480 | |||
481 | @@ -124,7 +124,7 @@ out: | ||
482 | */ | ||
483 | static __init int is_reserve_region(efi_memory_desc_t *md) | ||
484 | { | ||
485 | - switch (md->type) { | ||
486 | + switch (le32_to_cpu(md->type)) { | ||
487 | case EFI_LOADER_CODE: | ||
488 | case EFI_LOADER_DATA: | ||
489 | case EFI_BOOT_SERVICES_CODE: | ||
490 | @@ -146,8 +146,9 @@ static __init void reserve_regions(void) | ||
491 | pr_info("Processing EFI memory map:\n"); | ||
492 | |||
493 | for_each_efi_memory_desc(&memmap, md) { | ||
494 | - paddr = md->phys_addr; | ||
495 | - npages = md->num_pages; | ||
496 | + u32 md_type = le32_to_cpu(md->type); | ||
497 | + paddr = le64_to_cpu(md->phys_addr); | ||
498 | + npages = le64_to_cpu(md->num_pages); | ||
499 | |||
500 | if (uefi_debug) { | ||
501 | char buf[64]; | ||
502 | @@ -164,8 +165,8 @@ static __init void reserve_regions(void) | ||
503 | early_init_dt_add_memory_arch(paddr, size); | ||
504 | |||
505 | if (is_reserve_region(md) || | ||
506 | - md->type == EFI_BOOT_SERVICES_CODE || | ||
507 | - md->type == EFI_BOOT_SERVICES_DATA) { | ||
508 | + md_type == EFI_BOOT_SERVICES_CODE || | ||
509 | + md_type == EFI_BOOT_SERVICES_DATA) { | ||
510 | memblock_reserve(paddr, size); | ||
511 | if (uefi_debug) | ||
512 | pr_cont("*"); | ||
513 | @@ -246,17 +247,17 @@ static void __init free_boot_services(void) | ||
514 | */ | ||
515 | if (free_start) { | ||
516 | /* adjust free_end then free region */ | ||
517 | - if (free_end > md->phys_addr) | ||
518 | + if (free_end > le64_to_cpu(md->phys_addr)) | ||
519 | free_end -= PAGE_SIZE; | ||
520 | total_freed += free_region(free_start, free_end); | ||
521 | free_start = 0; | ||
522 | } | ||
523 | - keep_end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT); | ||
524 | + keep_end = le64_to_cpu(md->phys_addr) + (le64_to_cpu(md->num_pages) << EFI_PAGE_SHIFT); | ||
525 | continue; | ||
526 | } | ||
527 | |||
528 | - if (md->type != EFI_BOOT_SERVICES_CODE && | ||
529 | - md->type != EFI_BOOT_SERVICES_DATA) { | ||
530 | + if (le32_to_cpu(md->type) != EFI_BOOT_SERVICES_CODE && | ||
531 | + le32_to_cpu(md->type) != EFI_BOOT_SERVICES_DATA) { | ||
532 | /* no need to free this region */ | ||
533 | continue; | ||
534 | } | ||
535 | @@ -264,8 +265,8 @@ static void __init free_boot_services(void) | ||
536 | /* | ||
537 | * We want to free memory from this region. | ||
538 | */ | ||
539 | - paddr = md->phys_addr; | ||
540 | - npages = md->num_pages; | ||
541 | + paddr = le64_to_cpu(md->phys_addr); | ||
542 | + npages = le64_to_cpu(md->num_pages); | ||
543 | memrange_efi_to_native(&paddr, &npages); | ||
544 | size = npages << PAGE_SHIFT; | ||
545 | |||
546 | @@ -333,8 +334,8 @@ static int __init remap_region(efi_memory_desc_t *md, void **new) | ||
547 | { | ||
548 | u64 paddr, vaddr, npages, size; | ||
549 | |||
550 | - paddr = md->phys_addr; | ||
551 | - npages = md->num_pages; | ||
552 | + paddr = le64_to_cpu(md->phys_addr); | ||
553 | + npages = le64_to_cpu(md->num_pages); | ||
554 | memrange_efi_to_native(&paddr, &npages); | ||
555 | size = npages << PAGE_SHIFT; | ||
556 | |||
557 | @@ -350,7 +351,7 @@ static int __init remap_region(efi_memory_desc_t *md, void **new) | ||
558 | } | ||
559 | |||
560 | /* adjust for any rounding when EFI and system pagesize differs */ | ||
561 | - md->virt_addr = vaddr + (md->phys_addr - paddr); | ||
562 | + md->virt_addr = vaddr + (le64_to_cpu(md->phys_addr) - paddr); | ||
563 | |||
564 | if (uefi_debug) | ||
565 | pr_info(" EFI remap 0x%012llx => %p\n", | ||
566 | @@ -395,6 +396,21 @@ static int __init arm64_enter_virtual_mode(void) | ||
567 | |||
568 | efi.memmap = &memmap; | ||
569 | |||
570 | + if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) { | ||
571 | + efi.systab = ioremap_cache(efi_system_table, | ||
572 | + sizeof(efi_system_table_t)); | ||
573 | + if (!efi.systab) { | ||
574 | + pr_err("Failed to remap EFI system table!\n"); | ||
575 | + return -1; | ||
576 | + } | ||
577 | + free_boot_services(); | ||
578 | + efi_be_runtime_setup(); | ||
579 | + | ||
580 | + set_bit(EFI_SYSTEM_TABLES, &efi.flags); | ||
581 | + set_bit(EFI_RUNTIME_SERVICES, &efi.flags); | ||
582 | + return 0; | ||
583 | + } | ||
584 | + | ||
585 | /* Map the runtime regions */ | ||
586 | virtmap = kmalloc(mapsize, GFP_KERNEL); | ||
587 | if (!virtmap) { | ||
588 | diff --git a/arch/arm64/kernel/efistub-le/Makefile b/arch/arm64/kernel/efistub-le/Makefile | ||
589 | new file mode 100644 | ||
590 | index 0000000..8a1c2a8 | ||
591 | --- /dev/null | ||
592 | +++ b/arch/arm64/kernel/efistub-le/Makefile | ||
593 | @@ -0,0 +1,52 @@ | ||
594 | + | ||
595 | +# | ||
596 | +# Build a little endian EFI stub and wrap it into a single .o | ||
597 | +# | ||
598 | + | ||
599 | +# the LE objects making up the LE efi stub | ||
600 | +le-objs := efi-entry.o efi-stub.o strstr.o cache.o \ | ||
601 | + lib-memchr.o lib-memcmp.o lib-memcpy.o lib-memmove.o \ | ||
602 | + lib-memset.o lib-strchr.o lib-strlen.o lib-strncmp.o \ | ||
603 | + fdt-fdt.o fdt-fdt_ro.o fdt-fdt_rw.o fdt-fdt_sw.o \ | ||
604 | + fdt-fdt_wip.o fdt-fdt_empty_tree.o \ | ||
605 | + libstub-fdt.o libstub-arm-stub.o libstub-efi-stub-helper.o | ||
606 | + | ||
607 | +extra-y := efi-le-stub.bin efi-le-stub.elf $(le-objs) | ||
608 | + | ||
609 | +KBUILD_CFLAGS := $(subst -pg,,$(KBUILD_CFLAGS)) -fno-stack-protector \ | ||
610 | + -mlittle-endian -I$(srctree)/scripts/dtc/libfdt | ||
611 | + | ||
612 | +le-targets := $(addprefix $(obj)/, $(le-objs)) | ||
613 | +$(le-targets): KBUILD_AFLAGS += -mlittle-endian -include $(srctree)/$(src)/le.h | ||
614 | + | ||
615 | +$(obj)/efi-entry.o: $(obj)/../efi-entry.S FORCE | ||
616 | + $(call if_changed_dep,as_o_S) | ||
617 | + | ||
618 | +CFLAGS_efi-stub.o += -DTEXT_OFFSET=$(TEXT_OFFSET) | ||
619 | +$(obj)/efi-stub.o: $(obj)/../efi-stub.c FORCE | ||
620 | + $(call if_changed_dep,cc_o_c) | ||
621 | + | ||
622 | +$(obj)/cache.o: $(src)/../../mm/cache.S FORCE | ||
623 | + $(call if_changed_dep,as_o_S) | ||
624 | + | ||
625 | +$(obj)/lib-%.o: $(src)/../../lib/%.S FORCE | ||
626 | + $(call if_changed_dep,as_o_S) | ||
627 | + | ||
628 | +$(obj)/fdt-%.o: $(srctree)/lib/%.c FORCE | ||
629 | + $(call if_changed_dep,cc_o_c) | ||
630 | + | ||
631 | +$(obj)/libstub-%.o: $(srctree)/drivers/firmware/efi/libstub/%.c FORCE | ||
632 | + $(call if_changed_dep,cc_o_c) | ||
633 | + | ||
634 | +$(obj)/efi-le-stub.elf: LDFLAGS=-EL -Map $@.map -T | ||
635 | +$(obj)/efi-le-stub.elf: $(src)/efistub-le.lds $(le-targets) FORCE | ||
636 | + $(call if_changed,ld) | ||
637 | + | ||
638 | +$(obj)/efi-le-stub.bin: OBJCOPYFLAGS=-O binary | ||
639 | +$(obj)/efi-le-stub.bin: $(obj)/efi-le-stub.elf FORCE | ||
640 | + $(call if_changed,objcopy) | ||
641 | + | ||
642 | +# the BE object containing the entire LE stub | ||
643 | +obj-y := efi-le-entry.o | ||
644 | + | ||
645 | +$(obj)/efi-le-entry.o: $(obj)/efi-le-stub.bin | ||
646 | diff --git a/arch/arm64/kernel/efistub-le/efi-le-entry.S b/arch/arm64/kernel/efistub-le/efi-le-entry.S | ||
647 | new file mode 100644 | ||
648 | index 0000000..755364c | ||
649 | --- /dev/null | ||
650 | +++ b/arch/arm64/kernel/efistub-le/efi-le-entry.S | ||
651 | @@ -0,0 +1,12 @@ | ||
652 | +#include <linux/linkage.h> | ||
653 | + | ||
654 | + .text | ||
655 | + .align 12 | ||
656 | + .long _text - efi_stub_entry | ||
657 | + .long linux_banner - efi_stub_entry | ||
658 | + .quad _kernel_size_le | ||
659 | + .quad stext_offset | ||
660 | + .quad 0 | ||
661 | +ENTRY(efi_stub_entry) | ||
662 | + .incbin "arch/arm64/kernel/efistub-le/efi-le-stub.bin" | ||
663 | +ENDPROC(efi_stub_entry) | ||
664 | diff --git a/arch/arm64/kernel/efistub-le/efistub-le.lds b/arch/arm64/kernel/efistub-le/efistub-le.lds | ||
665 | new file mode 100644 | ||
666 | index 0000000..f64d542 | ||
667 | --- /dev/null | ||
668 | +++ b/arch/arm64/kernel/efistub-le/efistub-le.lds | ||
669 | @@ -0,0 +1,35 @@ | ||
670 | + | ||
671 | +ENTRY(efi_stub_entry) | ||
672 | + | ||
673 | +SECTIONS { | ||
674 | + /* | ||
675 | + * The inner and outer alignment of this chunk of code need to be the | ||
676 | + * same so that PC relative references using adrp/add or adrp/ldr pairs | ||
677 | + * will work correctly. | ||
678 | + * Skip 32 bytes here, so we can put the binary blob at an offset of | ||
679 | + * 4k + 0x20 in the outer image, and use the gap to share constants | ||
680 | + * emitted by the outer linker but required in the stub. | ||
681 | + */ | ||
682 | + .text 0x20 : { | ||
683 | + arch/arm64/kernel/efistub-le/efi-entry.o(.init.text) | ||
684 | + *(.init.text) | ||
685 | + *(.text) | ||
686 | + *(.text*) | ||
687 | + } | ||
688 | + .rodata : { | ||
689 | + . = ALIGN(16); | ||
690 | + *(.rodata) | ||
691 | + *(.rodata*) | ||
692 | + *(.init.rodata) | ||
693 | + } | ||
694 | + .data : { | ||
695 | + . = ALIGN(16); | ||
696 | + *(.data) | ||
697 | + *(.data*) | ||
698 | + le_linux_banner = .; | ||
699 | + . += 8; | ||
700 | + } | ||
701 | + /DISCARD/ : { | ||
702 | + *(__ex_table) | ||
703 | + } | ||
704 | +} | ||
705 | diff --git a/arch/arm64/kernel/efistub-le/le.h b/arch/arm64/kernel/efistub-le/le.h | ||
706 | new file mode 100644 | ||
707 | index 0000000..a9f6dfc | ||
708 | --- /dev/null | ||
709 | +++ b/arch/arm64/kernel/efistub-le/le.h | ||
710 | @@ -0,0 +1,12 @@ | ||
711 | + | ||
712 | +/* | ||
713 | + * This is a bit of a hack, but it is necessary to correctly compile .S files | ||
714 | + * that contain CPU_LE()/CPU_BE() statements, as these are defined to depend on | ||
715 | + * CONFIG_ symbols and not on the endianness of the compiler. | ||
716 | + */ | ||
717 | +#ifdef CONFIG_CPU_BIG_ENDIAN | ||
718 | +#define STUB_BE(code...) code | ||
719 | +#else | ||
720 | +#define STUB_BE(code...) | ||
721 | +#endif | ||
722 | +#undef CONFIG_CPU_BIG_ENDIAN | ||
723 | diff --git a/arch/arm64/kernel/efistub-le/strstr.c b/arch/arm64/kernel/efistub-le/strstr.c | ||
724 | new file mode 100644 | ||
725 | index 0000000..bd16094 | ||
726 | --- /dev/null | ||
727 | +++ b/arch/arm64/kernel/efistub-le/strstr.c | ||
728 | @@ -0,0 +1,20 @@ | ||
729 | + | ||
730 | +#include <linux/types.h> | ||
731 | +#include <linux/string.h> | ||
732 | + | ||
733 | +char *strstr(const char *s1, const char *s2) | ||
734 | +{ | ||
735 | + size_t l1, l2; | ||
736 | + | ||
737 | + l2 = strlen(s2); | ||
738 | + if (!l2) | ||
739 | + return (char *)s1; | ||
740 | + l1 = strlen(s1); | ||
741 | + while (l1 >= l2) { | ||
742 | + l1--; | ||
743 | + if (!memcmp(s1, s2, l2)) | ||
744 | + return (char *)s1; | ||
745 | + s1++; | ||
746 | + } | ||
747 | + return NULL; | ||
748 | +} | ||
749 | diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S | ||
750 | index 8ce88e0..8b1eba5 100644 | ||
751 | --- a/arch/arm64/kernel/head.S | ||
752 | +++ b/arch/arm64/kernel/head.S | ||
753 | @@ -126,7 +126,10 @@ efi_head: | ||
754 | .byte 0x4d | ||
755 | .byte 0x64 | ||
756 | #ifdef CONFIG_EFI | ||
757 | - .long pe_header - efi_head // Offset to the PE header. | ||
758 | + .byte pe_header - efi_head // Offset to the PE header. | ||
759 | + .byte 0 | ||
760 | + .byte 0 | ||
761 | + .byte 0 | ||
762 | #else | ||
763 | .word 0 // reserved | ||
764 | #endif | ||
765 | @@ -139,30 +142,31 @@ pe_header: | ||
766 | .ascii "PE" | ||
767 | .short 0 | ||
768 | coff_header: | ||
769 | - .short 0xaa64 // AArch64 | ||
770 | - .short 2 // nr_sections | ||
771 | + le16 0xaa64 // AArch64 | ||
772 | + le16 2 // nr_sections | ||
773 | .long 0 // TimeDateStamp | ||
774 | .long 0 // PointerToSymbolTable | ||
775 | - .long 1 // NumberOfSymbols | ||
776 | - .short section_table - optional_header // SizeOfOptionalHeader | ||
777 | - .short 0x206 // Characteristics. | ||
778 | + le32 1 // NumberOfSymbols | ||
779 | + .byte section_table - optional_header // SizeOfOptionalHeader | ||
780 | + .byte 0 | ||
781 | + le16 0x206 // Characteristics. | ||
782 | // IMAGE_FILE_DEBUG_STRIPPED | | ||
783 | // IMAGE_FILE_EXECUTABLE_IMAGE | | ||
784 | // IMAGE_FILE_LINE_NUMS_STRIPPED | ||
785 | optional_header: | ||
786 | - .short 0x20b // PE32+ format | ||
787 | + le16 0x20b // PE32+ format | ||
788 | .byte 0x02 // MajorLinkerVersion | ||
789 | .byte 0x14 // MinorLinkerVersion | ||
790 | - .long _end - stext // SizeOfCode | ||
791 | + .long _efi_code_virtsize_le // SizeOfCode | ||
792 | .long 0 // SizeOfInitializedData | ||
793 | .long 0 // SizeOfUninitializedData | ||
794 | - .long efi_stub_entry - efi_head // AddressOfEntryPoint | ||
795 | - .long stext_offset // BaseOfCode | ||
796 | + .long _efi_entry_point_le // AddressOfEntryPoint | ||
797 | + .long _efi_stext_offset_le // BaseOfCode | ||
798 | |||
799 | extra_header_fields: | ||
800 | .quad 0 // ImageBase | ||
801 | - .long 0x1000 // SectionAlignment | ||
802 | - .long PECOFF_FILE_ALIGNMENT // FileAlignment | ||
803 | + le32 0x1000 // SectionAlignment | ||
804 | + le32 0x200 // FileAlignment | ||
805 | .short 0 // MajorOperatingSystemVersion | ||
806 | .short 0 // MinorOperatingSystemVersion | ||
807 | .short 0 // MajorImageVersion | ||
808 | @@ -171,19 +175,19 @@ extra_header_fields: | ||
809 | .short 0 // MinorSubsystemVersion | ||
810 | .long 0 // Win32VersionValue | ||
811 | |||
812 | - .long _end - efi_head // SizeOfImage | ||
813 | + .long _efi_image_size_le // SizeOfImage | ||
814 | |||
815 | // Everything before the kernel image is considered part of the header | ||
816 | - .long stext_offset // SizeOfHeaders | ||
817 | + .long _efi_stext_offset_le // SizeOfHeaders | ||
818 | .long 0 // CheckSum | ||
819 | - .short 0xa // Subsystem (EFI application) | ||
820 | + le16 0xa // Subsystem (EFI application) | ||
821 | .short 0 // DllCharacteristics | ||
822 | .quad 0 // SizeOfStackReserve | ||
823 | .quad 0 // SizeOfStackCommit | ||
824 | .quad 0 // SizeOfHeapReserve | ||
825 | .quad 0 // SizeOfHeapCommit | ||
826 | .long 0 // LoaderFlags | ||
827 | - .long 0x6 // NumberOfRvaAndSizes | ||
828 | + le32 0x6 // NumberOfRvaAndSizes | ||
829 | |||
830 | .quad 0 // ExportTable | ||
831 | .quad 0 // ImportTable | ||
832 | @@ -211,23 +215,23 @@ section_table: | ||
833 | .long 0 // PointerToLineNumbers | ||
834 | .short 0 // NumberOfRelocations | ||
835 | .short 0 // NumberOfLineNumbers | ||
836 | - .long 0x42100040 // Characteristics (section flags) | ||
837 | + le32 0x42100040 // Characteristics (section flags) | ||
838 | |||
839 | |||
840 | .ascii ".text" | ||
841 | .byte 0 | ||
842 | .byte 0 | ||
843 | .byte 0 // end of 0 padding of section name | ||
844 | - .long _end - stext // VirtualSize | ||
845 | - .long stext_offset // VirtualAddress | ||
846 | - .long _edata - stext // SizeOfRawData | ||
847 | - .long stext_offset // PointerToRawData | ||
848 | + .long _efi_code_virtsize_le // VirtualSize | ||
849 | + .long _efi_stext_offset_le // VirtualAddress | ||
850 | + .long _efi_code_rawsize_le // SizeOfRawData | ||
851 | + .long _efi_stext_offset_le // PointerToRawData | ||
852 | |||
853 | .long 0 // PointerToRelocations (0 for executables) | ||
854 | .long 0 // PointerToLineNumbers (0 for executables) | ||
855 | .short 0 // NumberOfRelocations (0 for executables) | ||
856 | .short 0 // NumberOfLineNumbers (0 for executables) | ||
857 | - .long 0xe0500020 // Characteristics (section flags) | ||
858 | + le32 0xe0500020 // Characteristics (section flags) | ||
859 | |||
860 | /* | ||
861 | * EFI will load stext onwards at the 4k section alignment | ||
862 | diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h | ||
863 | index 8fae075..d08ce56 100644 | ||
864 | --- a/arch/arm64/kernel/image.h | ||
865 | +++ b/arch/arm64/kernel/image.h | ||
866 | @@ -37,8 +37,10 @@ | ||
867 | (((data) & 0x0000ff0000000000) >> 24) | \ | ||
868 | (((data) & 0x00ff000000000000) >> 40) | \ | ||
869 | (((data) & 0xff00000000000000) >> 56)) | ||
870 | +#define DATA_LE32(data) (DATA_LE64(data) >> 32) | ||
871 | #else | ||
872 | #define DATA_LE64(data) ((data) & 0xffffffffffffffff) | ||
873 | +#define DATA_LE32(data) ((data) & 0xffffffff) | ||
874 | #endif | ||
875 | |||
876 | #ifdef CONFIG_CPU_BIG_ENDIAN | ||
877 | @@ -57,6 +59,18 @@ | ||
878 | #define HEAD_SYMBOLS \ | ||
879 | _kernel_size_le = DATA_LE64(_end - _text); \ | ||
880 | _kernel_offset_le = DATA_LE64(TEXT_OFFSET); \ | ||
881 | - _kernel_flags_le = DATA_LE64(__HEAD_FLAGS); | ||
882 | + _kernel_flags_le = DATA_LE64(__HEAD_FLAGS); \ | ||
883 | + EFI_HEAD_SYMBOLS | ||
884 | + | ||
885 | +#ifdef CONFIG_EFI | ||
886 | +#define EFI_HEAD_SYMBOLS \ | ||
887 | + _efi_stext_offset_le = DATA_LE32(stext_offset); \ | ||
888 | + _efi_code_virtsize_le = DATA_LE32(_end - _text - stext_offset); \ | ||
889 | + _efi_code_rawsize_le = DATA_LE32(_edata - _text - stext_offset); \ | ||
890 | + _efi_image_size_le = DATA_LE32(_end - _text); \ | ||
891 | + _efi_entry_point_le = DATA_LE32(efi_stub_entry - _text); | ||
892 | +#else | ||
893 | +#define EFI_HEAD_SYMBOLS | ||
894 | +#endif | ||
895 | |||
896 | #endif /* __ASM_IMAGE_H */ | ||
897 | diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c | ||
898 | index 9035c1b..4e98daa 100644 | ||
899 | --- a/drivers/firmware/efi/efi.c | ||
900 | +++ b/drivers/firmware/efi/efi.c | ||
901 | @@ -296,18 +296,23 @@ static __init int match_config_table(efi_guid_t *guid, | ||
902 | int __init efi_config_init(efi_config_table_type_t *arch_tables) | ||
903 | { | ||
904 | void *config_tables, *tablep; | ||
905 | - int i, sz; | ||
906 | + unsigned long __tables; | ||
907 | + int i, sz, nr_tables; | ||
908 | |||
909 | - if (efi_enabled(EFI_64BIT)) | ||
910 | + if (efi_enabled(EFI_64BIT)) { | ||
911 | sz = sizeof(efi_config_table_64_t); | ||
912 | - else | ||
913 | + nr_tables = le64_to_cpu((__force __le64)efi.systab->nr_tables); | ||
914 | + __tables = le64_to_cpu((__force __le64)efi.systab->tables); | ||
915 | + } else { | ||
916 | sz = sizeof(efi_config_table_32_t); | ||
917 | + nr_tables = le32_to_cpu((__force __le32)efi.systab->nr_tables); | ||
918 | + __tables = le32_to_cpu((__force __le32)efi.systab->tables); | ||
919 | + } | ||
920 | |||
921 | /* | ||
922 | * Let's see what config tables the firmware passed to us. | ||
923 | */ | ||
924 | - config_tables = early_memremap(efi.systab->tables, | ||
925 | - efi.systab->nr_tables * sz); | ||
926 | + config_tables = early_memremap(__tables, nr_tables * sz); | ||
927 | if (config_tables == NULL) { | ||
928 | pr_err("Could not map Configuration table!\n"); | ||
929 | return -ENOMEM; | ||
930 | @@ -315,21 +320,20 @@ int __init efi_config_init(efi_config_table_type_t *arch_tables) | ||
931 | |||
932 | tablep = config_tables; | ||
933 | pr_info(""); | ||
934 | - for (i = 0; i < efi.systab->nr_tables; i++) { | ||
935 | + for (i = 0; i < nr_tables; i++) { | ||
936 | efi_guid_t guid; | ||
937 | unsigned long table; | ||
938 | |||
939 | if (efi_enabled(EFI_64BIT)) { | ||
940 | u64 table64; | ||
941 | guid = ((efi_config_table_64_t *)tablep)->guid; | ||
942 | - table64 = ((efi_config_table_64_t *)tablep)->table; | ||
943 | - table = table64; | ||
944 | + table = table64 = le64_to_cpu((__force __le64) | ||
945 | + ((efi_config_table_64_t *)tablep)->table); | ||
946 | #ifndef CONFIG_64BIT | ||
947 | if (table64 >> 32) { | ||
948 | pr_cont("\n"); | ||
949 | pr_err("Table located above 4GB, disabling EFI.\n"); | ||
950 | - early_memunmap(config_tables, | ||
951 | - efi.systab->nr_tables * sz); | ||
952 | + early_memunmap(config_tables, nr_tables * sz); | ||
953 | return -EINVAL; | ||
954 | } | ||
955 | #endif | ||
956 | @@ -344,7 +348,7 @@ int __init efi_config_init(efi_config_table_type_t *arch_tables) | ||
957 | tablep += sz; | ||
958 | } | ||
959 | pr_cont("\n"); | ||
960 | - early_memunmap(config_tables, efi.systab->nr_tables * sz); | ||
961 | + early_memunmap(config_tables, nr_tables * sz); | ||
962 | |||
963 | set_bit(EFI_CONFIG_TABLES, &efi.flags); | ||
964 | |||
965 | diff --git a/drivers/firmware/efi/efivars.c b/drivers/firmware/efi/efivars.c | ||
966 | index f256ecd..2b1c8be 100644 | ||
967 | --- a/drivers/firmware/efi/efivars.c | ||
968 | +++ b/drivers/firmware/efi/efivars.c | ||
969 | @@ -563,7 +563,7 @@ efivar_create_sysfs_entry(struct efivar_entry *new_var) | ||
970 | /* Convert Unicode to normal chars (assume top bits are 0), | ||
971 | ala UTF-8 */ | ||
972 | for (i=0; i < (int)(variable_name_size / sizeof(efi_char16_t)); i++) { | ||
973 | - short_name[i] = variable_name[i] & 0xFF; | ||
974 | + short_name[i] = le16_to_cpu((__force __le16)variable_name[i]); | ||
975 | } | ||
976 | /* This is ugly, but necessary to separate one vendor's | ||
977 | private variables from another's. */ | ||
978 | diff --git a/drivers/firmware/efi/libstub/fdt.c b/drivers/firmware/efi/libstub/fdt.c | ||
979 | index c846a96..f0f9d54 100644 | ||
980 | --- a/drivers/firmware/efi/libstub/fdt.c | ||
981 | +++ b/drivers/firmware/efi/libstub/fdt.c | ||
982 | @@ -22,6 +22,10 @@ efi_status_t update_fdt(efi_system_table_t *sys_table, void *orig_fdt, | ||
983 | unsigned long map_size, unsigned long desc_size, | ||
984 | u32 desc_ver) | ||
985 | { | ||
986 | +#ifdef CONFIG_EFI_LE_STUB | ||
987 | + extern char const *le_linux_banner; | ||
988 | + char const *linux_banner = le_linux_banner; | ||
989 | +#endif | ||
990 | int node, prev, num_rsv; | ||
991 | int status; | ||
992 | u32 fdt_val32; | ||
993 | -- | ||
994 | 1.9.1 | ||
995 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/02-319-Hierofalcon-Enable-32-bit-EL0-with-64K-and-4K-page-s.patch b/recipes-kernel/linux/linux-hierofalcon/02-319-Hierofalcon-Enable-32-bit-EL0-with-64K-and-4K-page-s.patch new file mode 100644 index 0000000..63031ec --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/02-319-Hierofalcon-Enable-32-bit-EL0-with-64K-and-4K-page-s.patch | |||
@@ -0,0 +1,47 @@ | |||
1 | From ab3d099133f84d59e02a572801659cf8b1145f72 Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Thu, 19 Feb 2015 09:24:22 +0100 | ||
4 | Subject: [PATCH 1/1] Hierofalcon: Enable 32-bit EL0 with 64K and 4K page sizes | ||
5 | |||
6 | Hierofalcon is able to switch to aarch32 EL0 only with following setup: | ||
7 | - Page Size 64K - 42bit VA | ||
8 | - Page Size 4K - 48bit VA | ||
9 | |||
10 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
11 | --- | ||
12 | arch/arm64/Kconfig | 5 +++-- | ||
13 | 1 file changed, 3 insertions(+), 2 deletions(-) | ||
14 | |||
15 | diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig | ||
16 | index d35a06c..68b4859 100644 | ||
17 | --- a/arch/arm64/Kconfig | ||
18 | +++ b/arch/arm64/Kconfig | ||
19 | @@ -338,6 +338,7 @@ endchoice | ||
20 | choice | ||
21 | prompt "Virtual address space size" | ||
22 | default ARM64_VA_BITS_39 if ARM64_4K_PAGES | ||
23 | + default ARM64_VA_BITS_48 if ARM64_4K_PAGES | ||
24 | default ARM64_VA_BITS_42 if ARM64_64K_PAGES | ||
25 | help | ||
26 | Allows choosing one of multiple possible virtual address | ||
27 | @@ -354,7 +355,7 @@ config ARM64_VA_BITS_42 | ||
28 | |||
29 | config ARM64_VA_BITS_48 | ||
30 | bool "48-bit" | ||
31 | - depends on !ARM_SMMU | ||
32 | + depends on ARM64_4K_PAGES | ||
33 | |||
34 | endchoice | ||
35 | |||
36 | @@ -613,7 +614,7 @@ source "fs/Kconfig.binfmt" | ||
37 | |||
38 | config COMPAT | ||
39 | bool "Kernel support for 32-bit EL0" | ||
40 | - depends on !ARM64_64K_PAGES | ||
41 | + depends on !ARM64_64K_PAGES || EXPERT | ||
42 | select COMPAT_BINFMT_ELF | ||
43 | select HAVE_UID16 | ||
44 | select OLD_SIGSUSPEND3 | ||
45 | -- | ||
46 | 1.9.1 | ||
47 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/02-41-Hierofalcon-Enable-32-bit-EL0-with-64K-and-4K-page-s.patch b/recipes-kernel/linux/linux-hierofalcon/02-41-Hierofalcon-Enable-32-bit-EL0-with-64K-and-4K-page-s.patch new file mode 100644 index 0000000..7fe0cda --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/02-41-Hierofalcon-Enable-32-bit-EL0-with-64K-and-4K-page-s.patch | |||
@@ -0,0 +1,46 @@ | |||
1 | From 15839d0281cba986e018a59827d69ae419112162 Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Tue, 28 Jul 2015 15:56:51 +0200 | ||
4 | Subject: [PATCH 1/1] Hierofalcon: Enable 32-bit EL0 with 64K and 4K page sizes | ||
5 | |||
6 | Hierofalcon is able to switch to aarch32 EL0 only with following setup: | ||
7 | - Page Size 64K - 42bit VA | ||
8 | - Page Size 4K - 48bit VA | ||
9 | |||
10 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
11 | --- | ||
12 | arch/arm64/Kconfig | 4 +++- | ||
13 | 1 file changed, 3 insertions(+), 1 deletion(-) | ||
14 | |||
15 | diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig | ||
16 | index 7796af4..29f6a03 100644 | ||
17 | --- a/arch/arm64/Kconfig | ||
18 | +++ b/arch/arm64/Kconfig | ||
19 | @@ -436,6 +436,7 @@ endchoice | ||
20 | choice | ||
21 | prompt "Virtual address space size" | ||
22 | default ARM64_VA_BITS_39 if ARM64_4K_PAGES | ||
23 | + default ARM64_VA_BITS_48 if ARM64_4K_PAGES | ||
24 | default ARM64_VA_BITS_42 if ARM64_64K_PAGES | ||
25 | help | ||
26 | Allows choosing one of multiple possible virtual address | ||
27 | @@ -452,6 +453,7 @@ config ARM64_VA_BITS_42 | ||
28 | |||
29 | config ARM64_VA_BITS_48 | ||
30 | bool "48-bit" | ||
31 | + depends on ARM64_4K_PAGES | ||
32 | |||
33 | endchoice | ||
34 | |||
35 | @@ -715,7 +717,7 @@ source "fs/Kconfig.binfmt" | ||
36 | |||
37 | config COMPAT | ||
38 | bool "Kernel support for 32-bit EL0" | ||
39 | - depends on !ARM64_64K_PAGES || EXPERT | ||
40 | + depends on !ARM64_64K_PAGES || EXPERT | ||
41 | select COMPAT_BINFMT_ELF | ||
42 | select HAVE_UID16 | ||
43 | select OLD_SIGSUSPEND3 | ||
44 | -- | ||
45 | 1.9.1 | ||
46 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/03-arm64-don-t-set-READ_IMPLIES_EXEC-for-EM_AARCH64-ELF.patch b/recipes-kernel/linux/linux-hierofalcon/03-arm64-don-t-set-READ_IMPLIES_EXEC-for-EM_AARCH64-ELF.patch new file mode 100644 index 0000000..01701a9 --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/03-arm64-don-t-set-READ_IMPLIES_EXEC-for-EM_AARCH64-ELF.patch | |||
@@ -0,0 +1,54 @@ | |||
1 | From b2072dba2431de0cfef3e6fb9823537a812dd90b Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Mon, 23 Feb 2015 16:48:43 +0100 | ||
4 | Subject: [PATCH 1/1] arm64: don't set READ_IMPLIES_EXEC for EM_AARCH64 ELF | ||
5 | objects | ||
6 | |||
7 | Currently, we're accidentally ending up with executable stacks on | ||
8 | AArch64 when the ABI says we shouldn't be, and relying on glibc to | ||
9 | fix things up for us when we're loaded. However, SELinux will deny us | ||
10 | mucking with the stack, and hit us with execmem AVCs. | ||
11 | |||
12 | current->personality & READ_IMPLIES_EXEC is currently being set for | ||
13 | AArch64 binaries, resulting in an executable stack, when no explicit | ||
14 | PT_GNU_STACK header is present. | ||
15 | |||
16 | [kmcmarti@sedition ~]$ uname -p | ||
17 | aarch64 | ||
18 | [kmcmarti@sedition ~]$ cat /proc/$$/personality | ||
19 | 00400000 | ||
20 | The reason for this is, without an explicit PT_GNU_STACK entry in the | ||
21 | binary, stk is still set to EXSTACK_DEFAULT (which should be | ||
22 | non-executable on AArch64.) As a result, elf_read_implies_exec is true, | ||
23 | and we set READ_IMPLIES_EXEC in binfmt_elf.c:load_elf_binary. | ||
24 | |||
25 | Fix this to return 0 in the native case, and parrot the logic from | ||
26 | arch/arm/kernel/elf.c otherwise. With this patch, binaries correctly | ||
27 | don't have READ_IMPLIES_EXEC set, and we can let PT_GNU_STACK change | ||
28 | things if it's explicitly requested. | ||
29 | |||
30 | Patch provided by: | ||
31 | Signed-off-by: Kyle McMartin <kyle@redhat.com> | ||
32 | |||
33 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
34 | --- | ||
35 | arch/arm64/include/asm/elf.h | 3 ++- | ||
36 | 1 file changed, 2 insertions(+), 1 deletion(-) | ||
37 | |||
38 | diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h | ||
39 | index 1f65be3..dbc9888 100644 | ||
40 | --- a/arch/arm64/include/asm/elf.h | ||
41 | +++ b/arch/arm64/include/asm/elf.h | ||
42 | @@ -114,7 +114,8 @@ typedef struct user_fpsimd_state elf_fpregset_t; | ||
43 | */ | ||
44 | #define elf_check_arch(x) ((x)->e_machine == EM_AARCH64) | ||
45 | |||
46 | -#define elf_read_implies_exec(ex,stk) (stk != EXSTACK_DISABLE_X) | ||
47 | +#define elf_read_implies_exec(ex,stk) (test_thread_flag(TIF_32BIT) \ | ||
48 | + ? (stk == EXSTACK_ENABLE_X) : 0) | ||
49 | |||
50 | #define CORE_DUMP_USE_REGSET | ||
51 | #define ELF_EXEC_PAGESIZE PAGE_SIZE | ||
52 | -- | ||
53 | 1.9.1 | ||
54 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/319-Hierofalcon-Update-xgbe-drivers-for-B0-board.patch b/recipes-kernel/linux/linux-hierofalcon/319-Hierofalcon-Update-xgbe-drivers-for-B0-board.patch new file mode 100644 index 0000000..6c45b11 --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/319-Hierofalcon-Update-xgbe-drivers-for-B0-board.patch | |||
@@ -0,0 +1,3557 @@ | |||
1 | From 675ffdbcc905bc44a9fef9a7f6569493a3a8efe1 Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Fri, 28 Aug 2015 17:35:57 +0200 | ||
4 | Subject: [PATCH] Hierofalcon: Update xgbe drivers for B0 board | ||
5 | |||
6 | Port ethernet drivers for AMD xgbe from 4.1 kernel to 3.19 | ||
7 | in order to have ethernet working on B0 board | ||
8 | |||
9 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
10 | --- | ||
11 | drivers/net/ethernet/amd/xgbe/xgbe-common.h | 2 + | ||
12 | drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c | 2 +- | ||
13 | drivers/net/ethernet/amd/xgbe/xgbe-desc.c | 34 +- | ||
14 | drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 147 +++- | ||
15 | drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 309 +++---- | ||
16 | drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 29 +- | ||
17 | drivers/net/ethernet/amd/xgbe/xgbe-main.c | 207 ++++- | ||
18 | drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 29 +- | ||
19 | drivers/net/ethernet/amd/xgbe/xgbe-ptp.c | 21 +- | ||
20 | drivers/net/ethernet/amd/xgbe/xgbe.h | 46 +- | ||
21 | drivers/net/phy/amd-xgbe-phy.c | 1142 ++++++++++++++++++-------- | ||
22 | include/linux/clocksource.h | 9 + | ||
23 | 12 files changed, 1284 insertions(+), 693 deletions(-) | ||
24 | |||
25 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h | ||
26 | index 29a0927..34c28aa 100644 | ||
27 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h | ||
28 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h | ||
29 | @@ -365,6 +365,8 @@ | ||
30 | #define MAC_HWF0R_TXCOESEL_WIDTH 1 | ||
31 | #define MAC_HWF0R_VLHASH_INDEX 4 | ||
32 | #define MAC_HWF0R_VLHASH_WIDTH 1 | ||
33 | +#define MAC_HWF1R_ADDR64_INDEX 14 | ||
34 | +#define MAC_HWF1R_ADDR64_WIDTH 2 | ||
35 | #define MAC_HWF1R_ADVTHWORD_INDEX 13 | ||
36 | #define MAC_HWF1R_ADVTHWORD_WIDTH 1 | ||
37 | #define MAC_HWF1R_DBGMEMA_INDEX 19 | ||
38 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c | ||
39 | index 76479d0..2c063b6 100644 | ||
40 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c | ||
41 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c | ||
42 | @@ -328,7 +328,7 @@ void xgbe_debugfs_init(struct xgbe_prv_data *pdata) | ||
43 | |||
44 | buf = kasprintf(GFP_KERNEL, "amd-xgbe-%s", pdata->netdev->name); | ||
45 | pdata->xgbe_debugfs = debugfs_create_dir(buf, NULL); | ||
46 | - if (pdata->xgbe_debugfs == NULL) { | ||
47 | + if (!pdata->xgbe_debugfs) { | ||
48 | netdev_err(pdata->netdev, "debugfs_create_dir failed\n"); | ||
49 | return; | ||
50 | } | ||
51 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c | ||
52 | index a50891f..5c92fb7 100644 | ||
53 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c | ||
54 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c | ||
55 | @@ -263,7 +263,7 @@ static int xgbe_alloc_pages(struct xgbe_prv_data *pdata, | ||
56 | int ret; | ||
57 | |||
58 | /* Try to obtain pages, decreasing order if necessary */ | ||
59 | - gfp |= __GFP_COLD | __GFP_COMP; | ||
60 | + gfp |= __GFP_COLD | __GFP_COMP | __GFP_NOWARN; | ||
61 | while (order >= 0) { | ||
62 | pages = alloc_pages(gfp, order); | ||
63 | if (pages) | ||
64 | @@ -422,7 +422,6 @@ static void xgbe_wrapper_rx_descriptor_init(struct xgbe_prv_data *pdata) | ||
65 | |||
66 | ring->cur = 0; | ||
67 | ring->dirty = 0; | ||
68 | - memset(&ring->rx, 0, sizeof(ring->rx)); | ||
69 | |||
70 | hw_if->rx_desc_init(channel); | ||
71 | } | ||
72 | @@ -621,35 +620,6 @@ err_out: | ||
73 | return 0; | ||
74 | } | ||
75 | |||
76 | -static void xgbe_realloc_rx_buffer(struct xgbe_channel *channel) | ||
77 | -{ | ||
78 | - struct xgbe_prv_data *pdata = channel->pdata; | ||
79 | - struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
80 | - struct xgbe_ring *ring = channel->rx_ring; | ||
81 | - struct xgbe_ring_data *rdata; | ||
82 | - int i; | ||
83 | - | ||
84 | - DBGPR("-->xgbe_realloc_rx_buffer: rx_ring->rx.realloc_index = %u\n", | ||
85 | - ring->rx.realloc_index); | ||
86 | - | ||
87 | - for (i = 0; i < ring->dirty; i++) { | ||
88 | - rdata = XGBE_GET_DESC_DATA(ring, ring->rx.realloc_index); | ||
89 | - | ||
90 | - /* Reset rdata values */ | ||
91 | - xgbe_unmap_rdata(pdata, rdata); | ||
92 | - | ||
93 | - if (xgbe_map_rx_buffer(pdata, ring, rdata)) | ||
94 | - break; | ||
95 | - | ||
96 | - hw_if->rx_desc_reset(rdata); | ||
97 | - | ||
98 | - ring->rx.realloc_index++; | ||
99 | - } | ||
100 | - ring->dirty = 0; | ||
101 | - | ||
102 | - DBGPR("<--xgbe_realloc_rx_buffer\n"); | ||
103 | -} | ||
104 | - | ||
105 | void xgbe_init_function_ptrs_desc(struct xgbe_desc_if *desc_if) | ||
106 | { | ||
107 | DBGPR("-->xgbe_init_function_ptrs_desc\n"); | ||
108 | @@ -657,7 +627,7 @@ void xgbe_init_function_ptrs_desc(struct xgbe_desc_if *desc_if) | ||
109 | desc_if->alloc_ring_resources = xgbe_alloc_ring_resources; | ||
110 | desc_if->free_ring_resources = xgbe_free_ring_resources; | ||
111 | desc_if->map_tx_skb = xgbe_map_tx_skb; | ||
112 | - desc_if->realloc_rx_buffer = xgbe_realloc_rx_buffer; | ||
113 | + desc_if->map_rx_buffer = xgbe_map_rx_buffer; | ||
114 | desc_if->unmap_rdata = xgbe_unmap_rdata; | ||
115 | desc_if->wrapper_tx_desc_init = xgbe_wrapper_tx_descriptor_init; | ||
116 | desc_if->wrapper_rx_desc_init = xgbe_wrapper_rx_descriptor_init; | ||
117 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c | ||
118 | index 4c66cd1..21d9497 100644 | ||
119 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c | ||
120 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c | ||
121 | @@ -115,6 +115,7 @@ | ||
122 | */ | ||
123 | |||
124 | #include <linux/phy.h> | ||
125 | +#include <linux/mdio.h> | ||
126 | #include <linux/clk.h> | ||
127 | #include <linux/bitrev.h> | ||
128 | #include <linux/crc32.h> | ||
129 | @@ -130,7 +131,7 @@ static unsigned int xgbe_usec_to_riwt(struct xgbe_prv_data *pdata, | ||
130 | |||
131 | DBGPR("-->xgbe_usec_to_riwt\n"); | ||
132 | |||
133 | - rate = clk_get_rate(pdata->sysclk); | ||
134 | + rate = pdata->sysclk_rate; | ||
135 | |||
136 | /* | ||
137 | * Convert the input usec value to the watchdog timer value. Each | ||
138 | @@ -153,7 +154,7 @@ static unsigned int xgbe_riwt_to_usec(struct xgbe_prv_data *pdata, | ||
139 | |||
140 | DBGPR("-->xgbe_riwt_to_usec\n"); | ||
141 | |||
142 | - rate = clk_get_rate(pdata->sysclk); | ||
143 | + rate = pdata->sysclk_rate; | ||
144 | |||
145 | /* | ||
146 | * Convert the input watchdog timer value to the usec value. Each | ||
147 | @@ -673,6 +674,9 @@ static void xgbe_enable_mac_interrupts(struct xgbe_prv_data *pdata) | ||
148 | |||
149 | static int xgbe_set_gmii_speed(struct xgbe_prv_data *pdata) | ||
150 | { | ||
151 | + if (XGMAC_IOREAD_BITS(pdata, MAC_TCR, SS) == 0x3) | ||
152 | + return 0; | ||
153 | + | ||
154 | XGMAC_IOWRITE_BITS(pdata, MAC_TCR, SS, 0x3); | ||
155 | |||
156 | return 0; | ||
157 | @@ -680,6 +684,9 @@ static int xgbe_set_gmii_speed(struct xgbe_prv_data *pdata) | ||
158 | |||
159 | static int xgbe_set_gmii_2500_speed(struct xgbe_prv_data *pdata) | ||
160 | { | ||
161 | + if (XGMAC_IOREAD_BITS(pdata, MAC_TCR, SS) == 0x2) | ||
162 | + return 0; | ||
163 | + | ||
164 | XGMAC_IOWRITE_BITS(pdata, MAC_TCR, SS, 0x2); | ||
165 | |||
166 | return 0; | ||
167 | @@ -687,6 +694,9 @@ static int xgbe_set_gmii_2500_speed(struct xgbe_prv_data *pdata) | ||
168 | |||
169 | static int xgbe_set_xgmii_speed(struct xgbe_prv_data *pdata) | ||
170 | { | ||
171 | + if (XGMAC_IOREAD_BITS(pdata, MAC_TCR, SS) == 0) | ||
172 | + return 0; | ||
173 | + | ||
174 | XGMAC_IOWRITE_BITS(pdata, MAC_TCR, SS, 0); | ||
175 | |||
176 | return 0; | ||
177 | @@ -843,6 +853,22 @@ static int xgbe_set_mac_address(struct xgbe_prv_data *pdata, u8 *addr) | ||
178 | return 0; | ||
179 | } | ||
180 | |||
181 | +static int xgbe_config_rx_mode(struct xgbe_prv_data *pdata) | ||
182 | +{ | ||
183 | + struct net_device *netdev = pdata->netdev; | ||
184 | + unsigned int pr_mode, am_mode; | ||
185 | + | ||
186 | + pr_mode = ((netdev->flags & IFF_PROMISC) != 0); | ||
187 | + am_mode = ((netdev->flags & IFF_ALLMULTI) != 0); | ||
188 | + | ||
189 | + xgbe_set_promiscuous_mode(pdata, pr_mode); | ||
190 | + xgbe_set_all_multicast_mode(pdata, am_mode); | ||
191 | + | ||
192 | + xgbe_add_mac_addresses(pdata); | ||
193 | + | ||
194 | + return 0; | ||
195 | +} | ||
196 | + | ||
197 | static int xgbe_read_mmd_regs(struct xgbe_prv_data *pdata, int prtad, | ||
198 | int mmd_reg) | ||
199 | { | ||
200 | @@ -881,6 +907,23 @@ static void xgbe_write_mmd_regs(struct xgbe_prv_data *pdata, int prtad, | ||
201 | else | ||
202 | mmd_address = (pdata->mdio_mmd << 16) | (mmd_reg & 0xffff); | ||
203 | |||
204 | + /* If the PCS is changing modes, match the MAC speed to it */ | ||
205 | + if (((mmd_address >> 16) == MDIO_MMD_PCS) && | ||
206 | + ((mmd_address & 0xffff) == MDIO_CTRL2)) { | ||
207 | + struct phy_device *phydev = pdata->phydev; | ||
208 | + | ||
209 | + if (mmd_data & MDIO_PCS_CTRL2_TYPE) { | ||
210 | + /* KX mode */ | ||
211 | + if (phydev->supported & SUPPORTED_1000baseKX_Full) | ||
212 | + xgbe_set_gmii_speed(pdata); | ||
213 | + else | ||
214 | + xgbe_set_gmii_2500_speed(pdata); | ||
215 | + } else { | ||
216 | + /* KR mode */ | ||
217 | + xgbe_set_xgmii_speed(pdata); | ||
218 | + } | ||
219 | + } | ||
220 | + | ||
221 | /* The PCS registers are accessed using mmio. The underlying APB3 | ||
222 | * management interface uses indirect addressing to access the MMD | ||
223 | * register sets. This requires accessing of the PCS register in two | ||
224 | @@ -1041,7 +1084,7 @@ static void xgbe_tx_desc_reset(struct xgbe_ring_data *rdata) | ||
225 | rdesc->desc3 = 0; | ||
226 | |||
227 | /* Make sure ownership is written to the descriptor */ | ||
228 | - wmb(); | ||
229 | + dma_wmb(); | ||
230 | } | ||
231 | |||
232 | static void xgbe_tx_desc_init(struct xgbe_channel *channel) | ||
233 | @@ -1074,9 +1117,24 @@ static void xgbe_tx_desc_init(struct xgbe_channel *channel) | ||
234 | DBGPR("<--tx_desc_init\n"); | ||
235 | } | ||
236 | |||
237 | -static void xgbe_rx_desc_reset(struct xgbe_ring_data *rdata) | ||
238 | +static void xgbe_rx_desc_reset(struct xgbe_prv_data *pdata, | ||
239 | + struct xgbe_ring_data *rdata, unsigned int index) | ||
240 | { | ||
241 | struct xgbe_ring_desc *rdesc = rdata->rdesc; | ||
242 | + unsigned int rx_usecs = pdata->rx_usecs; | ||
243 | + unsigned int rx_frames = pdata->rx_frames; | ||
244 | + unsigned int inte; | ||
245 | + | ||
246 | + if (!rx_usecs && !rx_frames) { | ||
247 | + /* No coalescing, interrupt for every descriptor */ | ||
248 | + inte = 1; | ||
249 | + } else { | ||
250 | + /* Set interrupt based on Rx frame coalescing setting */ | ||
251 | + if (rx_frames && !((index + 1) % rx_frames)) | ||
252 | + inte = 1; | ||
253 | + else | ||
254 | + inte = 0; | ||
255 | + } | ||
256 | |||
257 | /* Reset the Rx descriptor | ||
258 | * Set buffer 1 (lo) address to header dma address (lo) | ||
259 | @@ -1090,19 +1148,18 @@ static void xgbe_rx_desc_reset(struct xgbe_ring_data *rdata) | ||
260 | rdesc->desc2 = cpu_to_le32(lower_32_bits(rdata->rx.buf.dma)); | ||
261 | rdesc->desc3 = cpu_to_le32(upper_32_bits(rdata->rx.buf.dma)); | ||
262 | |||
263 | - XGMAC_SET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, INTE, | ||
264 | - rdata->interrupt ? 1 : 0); | ||
265 | + XGMAC_SET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, INTE, inte); | ||
266 | |||
267 | /* Since the Rx DMA engine is likely running, make sure everything | ||
268 | * is written to the descriptor(s) before setting the OWN bit | ||
269 | * for the descriptor | ||
270 | */ | ||
271 | - wmb(); | ||
272 | + dma_wmb(); | ||
273 | |||
274 | XGMAC_SET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, OWN, 1); | ||
275 | |||
276 | /* Make sure ownership is written to the descriptor */ | ||
277 | - wmb(); | ||
278 | + dma_wmb(); | ||
279 | } | ||
280 | |||
281 | static void xgbe_rx_desc_init(struct xgbe_channel *channel) | ||
282 | @@ -1111,26 +1168,16 @@ static void xgbe_rx_desc_init(struct xgbe_channel *channel) | ||
283 | struct xgbe_ring *ring = channel->rx_ring; | ||
284 | struct xgbe_ring_data *rdata; | ||
285 | unsigned int start_index = ring->cur; | ||
286 | - unsigned int rx_coalesce, rx_frames; | ||
287 | unsigned int i; | ||
288 | |||
289 | DBGPR("-->rx_desc_init\n"); | ||
290 | |||
291 | - rx_coalesce = (pdata->rx_riwt || pdata->rx_frames) ? 1 : 0; | ||
292 | - rx_frames = pdata->rx_frames; | ||
293 | - | ||
294 | /* Initialize all descriptors */ | ||
295 | for (i = 0; i < ring->rdesc_count; i++) { | ||
296 | rdata = XGBE_GET_DESC_DATA(ring, i); | ||
297 | |||
298 | - /* Set interrupt on completion bit as appropriate */ | ||
299 | - if (rx_coalesce && (!rx_frames || ((i + 1) % rx_frames))) | ||
300 | - rdata->interrupt = 0; | ||
301 | - else | ||
302 | - rdata->interrupt = 1; | ||
303 | - | ||
304 | /* Initialize Rx descriptor */ | ||
305 | - xgbe_rx_desc_reset(rdata); | ||
306 | + xgbe_rx_desc_reset(pdata, rdata, i); | ||
307 | } | ||
308 | |||
309 | /* Update the total number of Rx descriptors */ | ||
310 | @@ -1331,18 +1378,20 @@ static void xgbe_tx_start_xmit(struct xgbe_channel *channel, | ||
311 | struct xgbe_prv_data *pdata = channel->pdata; | ||
312 | struct xgbe_ring_data *rdata; | ||
313 | |||
314 | + /* Make sure everything is written before the register write */ | ||
315 | + wmb(); | ||
316 | + | ||
317 | /* Issue a poll command to Tx DMA by writing address | ||
318 | * of next immediate free descriptor */ | ||
319 | rdata = XGBE_GET_DESC_DATA(ring, ring->cur); | ||
320 | XGMAC_DMA_IOWRITE(channel, DMA_CH_TDTR_LO, | ||
321 | lower_32_bits(rdata->rdesc_dma)); | ||
322 | |||
323 | - /* Start the Tx coalescing timer */ | ||
324 | + /* Start the Tx timer */ | ||
325 | if (pdata->tx_usecs && !channel->tx_timer_active) { | ||
326 | channel->tx_timer_active = 1; | ||
327 | - hrtimer_start(&channel->tx_timer, | ||
328 | - ktime_set(0, pdata->tx_usecs * NSEC_PER_USEC), | ||
329 | - HRTIMER_MODE_REL); | ||
330 | + mod_timer(&channel->tx_timer, | ||
331 | + jiffies + usecs_to_jiffies(pdata->tx_usecs)); | ||
332 | } | ||
333 | |||
334 | ring->tx.xmit_more = 0; | ||
335 | @@ -1359,6 +1408,7 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel) | ||
336 | unsigned int tso_context, vlan_context; | ||
337 | unsigned int tx_set_ic; | ||
338 | int start_index = ring->cur; | ||
339 | + int cur_index = ring->cur; | ||
340 | int i; | ||
341 | |||
342 | DBGPR("-->xgbe_dev_xmit\n"); | ||
343 | @@ -1401,7 +1451,7 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel) | ||
344 | else | ||
345 | tx_set_ic = 0; | ||
346 | |||
347 | - rdata = XGBE_GET_DESC_DATA(ring, ring->cur); | ||
348 | + rdata = XGBE_GET_DESC_DATA(ring, cur_index); | ||
349 | rdesc = rdata->rdesc; | ||
350 | |||
351 | /* Create a context descriptor if this is a TSO packet */ | ||
352 | @@ -1444,8 +1494,8 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel) | ||
353 | ring->tx.cur_vlan_ctag = packet->vlan_ctag; | ||
354 | } | ||
355 | |||
356 | - ring->cur++; | ||
357 | - rdata = XGBE_GET_DESC_DATA(ring, ring->cur); | ||
358 | + cur_index++; | ||
359 | + rdata = XGBE_GET_DESC_DATA(ring, cur_index); | ||
360 | rdesc = rdata->rdesc; | ||
361 | } | ||
362 | |||
363 | @@ -1473,7 +1523,7 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel) | ||
364 | XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, CTXT, 0); | ||
365 | |||
366 | /* Set OWN bit if not the first descriptor */ | ||
367 | - if (ring->cur != start_index) | ||
368 | + if (cur_index != start_index) | ||
369 | XGMAC_SET_BITS_LE(rdesc->desc3, TX_NORMAL_DESC3, OWN, 1); | ||
370 | |||
371 | if (tso) { | ||
372 | @@ -1497,9 +1547,9 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel) | ||
373 | packet->length); | ||
374 | } | ||
375 | |||
376 | - for (i = ring->cur - start_index + 1; i < packet->rdesc_count; i++) { | ||
377 | - ring->cur++; | ||
378 | - rdata = XGBE_GET_DESC_DATA(ring, ring->cur); | ||
379 | + for (i = cur_index - start_index + 1; i < packet->rdesc_count; i++) { | ||
380 | + cur_index++; | ||
381 | + rdata = XGBE_GET_DESC_DATA(ring, cur_index); | ||
382 | rdesc = rdata->rdesc; | ||
383 | |||
384 | /* Update buffer address */ | ||
385 | @@ -1537,7 +1587,7 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel) | ||
386 | * is written to the descriptor(s) before setting the OWN bit | ||
387 | * for the first descriptor | ||
388 | */ | ||
389 | - wmb(); | ||
390 | + dma_wmb(); | ||
391 | |||
392 | /* Set OWN bit for the first descriptor */ | ||
393 | rdata = XGBE_GET_DESC_DATA(ring, start_index); | ||
394 | @@ -1549,9 +1599,9 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel) | ||
395 | #endif | ||
396 | |||
397 | /* Make sure ownership is written to the descriptor */ | ||
398 | - wmb(); | ||
399 | + dma_wmb(); | ||
400 | |||
401 | - ring->cur++; | ||
402 | + ring->cur = cur_index + 1; | ||
403 | if (!packet->skb->xmit_more || | ||
404 | netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev, | ||
405 | channel->queue_index))) | ||
406 | @@ -1585,7 +1635,7 @@ static int xgbe_dev_read(struct xgbe_channel *channel) | ||
407 | return 1; | ||
408 | |||
409 | /* Make sure descriptor fields are read after reading the OWN bit */ | ||
410 | - rmb(); | ||
411 | + dma_rmb(); | ||
412 | |||
413 | #ifdef XGMAC_ENABLE_RX_DESC_DUMP | ||
414 | xgbe_dump_rx_desc(ring, rdesc, ring->cur); | ||
415 | @@ -1976,7 +2026,8 @@ static void xgbe_config_tx_fifo_size(struct xgbe_prv_data *pdata) | ||
416 | for (i = 0; i < pdata->tx_q_count; i++) | ||
417 | XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, TQS, fifo_size); | ||
418 | |||
419 | - netdev_notice(pdata->netdev, "%d Tx queues, %d byte fifo per queue\n", | ||
420 | + netdev_notice(pdata->netdev, | ||
421 | + "%d Tx hardware queues, %d byte fifo per queue\n", | ||
422 | pdata->tx_q_count, ((fifo_size + 1) * 256)); | ||
423 | } | ||
424 | |||
425 | @@ -1991,7 +2042,8 @@ static void xgbe_config_rx_fifo_size(struct xgbe_prv_data *pdata) | ||
426 | for (i = 0; i < pdata->rx_q_count; i++) | ||
427 | XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_RQOMR, RQS, fifo_size); | ||
428 | |||
429 | - netdev_notice(pdata->netdev, "%d Rx queues, %d byte fifo per queue\n", | ||
430 | + netdev_notice(pdata->netdev, | ||
431 | + "%d Rx hardware queues, %d byte fifo per queue\n", | ||
432 | pdata->rx_q_count, ((fifo_size + 1) * 256)); | ||
433 | } | ||
434 | |||
435 | @@ -2107,6 +2159,23 @@ static void xgbe_config_jumbo_enable(struct xgbe_prv_data *pdata) | ||
436 | XGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val); | ||
437 | } | ||
438 | |||
439 | +static void xgbe_config_mac_speed(struct xgbe_prv_data *pdata) | ||
440 | +{ | ||
441 | + switch (pdata->phy_speed) { | ||
442 | + case SPEED_10000: | ||
443 | + xgbe_set_xgmii_speed(pdata); | ||
444 | + break; | ||
445 | + | ||
446 | + case SPEED_2500: | ||
447 | + xgbe_set_gmii_2500_speed(pdata); | ||
448 | + break; | ||
449 | + | ||
450 | + case SPEED_1000: | ||
451 | + xgbe_set_gmii_speed(pdata); | ||
452 | + break; | ||
453 | + } | ||
454 | +} | ||
455 | + | ||
456 | static void xgbe_config_checksum_offload(struct xgbe_prv_data *pdata) | ||
457 | { | ||
458 | if (pdata->netdev->features & NETIF_F_RXCSUM) | ||
459 | @@ -2755,8 +2824,10 @@ static int xgbe_init(struct xgbe_prv_data *pdata) | ||
460 | * Initialize MAC related features | ||
461 | */ | ||
462 | xgbe_config_mac_address(pdata); | ||
463 | + xgbe_config_rx_mode(pdata); | ||
464 | xgbe_config_jumbo_enable(pdata); | ||
465 | xgbe_config_flow_control(pdata); | ||
466 | + xgbe_config_mac_speed(pdata); | ||
467 | xgbe_config_checksum_offload(pdata); | ||
468 | xgbe_config_vlan_support(pdata); | ||
469 | xgbe_config_mmc(pdata); | ||
470 | @@ -2773,10 +2844,8 @@ void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *hw_if) | ||
471 | |||
472 | hw_if->tx_complete = xgbe_tx_complete; | ||
473 | |||
474 | - hw_if->set_promiscuous_mode = xgbe_set_promiscuous_mode; | ||
475 | - hw_if->set_all_multicast_mode = xgbe_set_all_multicast_mode; | ||
476 | - hw_if->add_mac_addresses = xgbe_add_mac_addresses; | ||
477 | hw_if->set_mac_address = xgbe_set_mac_address; | ||
478 | + hw_if->config_rx_mode = xgbe_config_rx_mode; | ||
479 | |||
480 | hw_if->enable_rx_csum = xgbe_enable_rx_csum; | ||
481 | hw_if->disable_rx_csum = xgbe_disable_rx_csum; | ||
482 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c | ||
483 | index e5ffb2c..343bf6a 100644 | ||
484 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c | ||
485 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c | ||
486 | @@ -129,7 +129,6 @@ | ||
487 | |||
488 | static int xgbe_one_poll(struct napi_struct *, int); | ||
489 | static int xgbe_all_poll(struct napi_struct *, int); | ||
490 | -static void xgbe_set_rx_mode(struct net_device *); | ||
491 | |||
492 | static int xgbe_alloc_channels(struct xgbe_prv_data *pdata) | ||
493 | { | ||
494 | @@ -225,6 +224,11 @@ static inline unsigned int xgbe_tx_avail_desc(struct xgbe_ring *ring) | ||
495 | return (ring->rdesc_count - (ring->cur - ring->dirty)); | ||
496 | } | ||
497 | |||
498 | +static inline unsigned int xgbe_rx_dirty_desc(struct xgbe_ring *ring) | ||
499 | +{ | ||
500 | + return (ring->cur - ring->dirty); | ||
501 | +} | ||
502 | + | ||
503 | static int xgbe_maybe_stop_tx_queue(struct xgbe_channel *channel, | ||
504 | struct xgbe_ring *ring, unsigned int count) | ||
505 | { | ||
506 | @@ -337,12 +341,13 @@ static irqreturn_t xgbe_isr(int irq, void *data) | ||
507 | dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR); | ||
508 | DBGPR(" DMA_CH%u_ISR = %08x\n", i, dma_ch_isr); | ||
509 | |||
510 | - /* If we get a TI or RI interrupt that means per channel DMA | ||
511 | - * interrupts are not enabled, so we use the private data napi | ||
512 | - * structure, not the per channel napi structure | ||
513 | + /* The TI or RI interrupt bits may still be set even if using | ||
514 | + * per channel DMA interrupts. Check to be sure those are not | ||
515 | + * enabled before using the private data napi structure. | ||
516 | */ | ||
517 | - if (XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, TI) || | ||
518 | - XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, RI)) { | ||
519 | + if (!pdata->per_channel_irq && | ||
520 | + (XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, TI) || | ||
521 | + XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, RI))) { | ||
522 | if (napi_schedule_prep(&pdata->napi)) { | ||
523 | /* Disable Tx and Rx interrupts */ | ||
524 | xgbe_disable_rx_tx_ints(pdata); | ||
525 | @@ -405,26 +410,20 @@ static irqreturn_t xgbe_dma_isr(int irq, void *data) | ||
526 | return IRQ_HANDLED; | ||
527 | } | ||
528 | |||
529 | -static enum hrtimer_restart xgbe_tx_timer(struct hrtimer *timer) | ||
530 | +static void xgbe_tx_timer(unsigned long data) | ||
531 | { | ||
532 | - struct xgbe_channel *channel = container_of(timer, | ||
533 | - struct xgbe_channel, | ||
534 | - tx_timer); | ||
535 | - struct xgbe_ring *ring = channel->tx_ring; | ||
536 | + struct xgbe_channel *channel = (struct xgbe_channel *)data; | ||
537 | struct xgbe_prv_data *pdata = channel->pdata; | ||
538 | struct napi_struct *napi; | ||
539 | - unsigned long flags; | ||
540 | |||
541 | DBGPR("-->xgbe_tx_timer\n"); | ||
542 | |||
543 | napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi; | ||
544 | |||
545 | - spin_lock_irqsave(&ring->lock, flags); | ||
546 | - | ||
547 | if (napi_schedule_prep(napi)) { | ||
548 | /* Disable Tx and Rx interrupts */ | ||
549 | if (pdata->per_channel_irq) | ||
550 | - disable_irq(channel->dma_irq); | ||
551 | + disable_irq_nosync(channel->dma_irq); | ||
552 | else | ||
553 | xgbe_disable_rx_tx_ints(pdata); | ||
554 | |||
555 | @@ -434,11 +433,7 @@ static enum hrtimer_restart xgbe_tx_timer(struct hrtimer *timer) | ||
556 | |||
557 | channel->tx_timer_active = 0; | ||
558 | |||
559 | - spin_unlock_irqrestore(&ring->lock, flags); | ||
560 | - | ||
561 | DBGPR("<--xgbe_tx_timer\n"); | ||
562 | - | ||
563 | - return HRTIMER_NORESTART; | ||
564 | } | ||
565 | |||
566 | static void xgbe_init_tx_timers(struct xgbe_prv_data *pdata) | ||
567 | @@ -454,9 +449,8 @@ static void xgbe_init_tx_timers(struct xgbe_prv_data *pdata) | ||
568 | break; | ||
569 | |||
570 | DBGPR(" %s adding tx timer\n", channel->name); | ||
571 | - hrtimer_init(&channel->tx_timer, CLOCK_MONOTONIC, | ||
572 | - HRTIMER_MODE_REL); | ||
573 | - channel->tx_timer.function = xgbe_tx_timer; | ||
574 | + setup_timer(&channel->tx_timer, xgbe_tx_timer, | ||
575 | + (unsigned long)channel); | ||
576 | } | ||
577 | |||
578 | DBGPR("<--xgbe_init_tx_timers\n"); | ||
579 | @@ -475,8 +469,7 @@ static void xgbe_stop_tx_timers(struct xgbe_prv_data *pdata) | ||
580 | break; | ||
581 | |||
582 | DBGPR(" %s deleting tx timer\n", channel->name); | ||
583 | - channel->tx_timer_active = 0; | ||
584 | - hrtimer_cancel(&channel->tx_timer); | ||
585 | + del_timer_sync(&channel->tx_timer); | ||
586 | } | ||
587 | |||
588 | DBGPR("<--xgbe_stop_tx_timers\n"); | ||
589 | @@ -519,6 +512,7 @@ void xgbe_get_all_hw_features(struct xgbe_prv_data *pdata) | ||
590 | RXFIFOSIZE); | ||
591 | hw_feat->tx_fifo_size = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, | ||
592 | TXFIFOSIZE); | ||
593 | + hw_feat->dma_width = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, ADDR64); | ||
594 | hw_feat->dcb = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, DCBEN); | ||
595 | hw_feat->sph = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, SPHEN); | ||
596 | hw_feat->tso = XGMAC_GET_BITS(mac_hfr1, MAC_HWF1R, TSOEN); | ||
597 | @@ -553,6 +547,21 @@ void xgbe_get_all_hw_features(struct xgbe_prv_data *pdata) | ||
598 | break; | ||
599 | } | ||
600 | |||
601 | + /* Translate the address width setting into actual number */ | ||
602 | + switch (hw_feat->dma_width) { | ||
603 | + case 0: | ||
604 | + hw_feat->dma_width = 32; | ||
605 | + break; | ||
606 | + case 1: | ||
607 | + hw_feat->dma_width = 40; | ||
608 | + break; | ||
609 | + case 2: | ||
610 | + hw_feat->dma_width = 48; | ||
611 | + break; | ||
612 | + default: | ||
613 | + hw_feat->dma_width = 32; | ||
614 | + } | ||
615 | + | ||
616 | /* The Queue, Channel and TC counts are zero based so increment them | ||
617 | * to get the actual number | ||
618 | */ | ||
619 | @@ -609,6 +618,68 @@ static void xgbe_napi_disable(struct xgbe_prv_data *pdata, unsigned int del) | ||
620 | } | ||
621 | } | ||
622 | |||
623 | +static int xgbe_request_irqs(struct xgbe_prv_data *pdata) | ||
624 | +{ | ||
625 | + struct xgbe_channel *channel; | ||
626 | + struct net_device *netdev = pdata->netdev; | ||
627 | + unsigned int i; | ||
628 | + int ret; | ||
629 | + | ||
630 | + ret = devm_request_irq(pdata->dev, pdata->dev_irq, xgbe_isr, 0, | ||
631 | + netdev->name, pdata); | ||
632 | + if (ret) { | ||
633 | + netdev_alert(netdev, "error requesting irq %d\n", | ||
634 | + pdata->dev_irq); | ||
635 | + return ret; | ||
636 | + } | ||
637 | + | ||
638 | + if (!pdata->per_channel_irq) | ||
639 | + return 0; | ||
640 | + | ||
641 | + channel = pdata->channel; | ||
642 | + for (i = 0; i < pdata->channel_count; i++, channel++) { | ||
643 | + snprintf(channel->dma_irq_name, | ||
644 | + sizeof(channel->dma_irq_name) - 1, | ||
645 | + "%s-TxRx-%u", netdev_name(netdev), | ||
646 | + channel->queue_index); | ||
647 | + | ||
648 | + ret = devm_request_irq(pdata->dev, channel->dma_irq, | ||
649 | + xgbe_dma_isr, 0, | ||
650 | + channel->dma_irq_name, channel); | ||
651 | + if (ret) { | ||
652 | + netdev_alert(netdev, "error requesting irq %d\n", | ||
653 | + channel->dma_irq); | ||
654 | + goto err_irq; | ||
655 | + } | ||
656 | + } | ||
657 | + | ||
658 | + return 0; | ||
659 | + | ||
660 | +err_irq: | ||
661 | + /* Using an unsigned int, 'i' will go to UINT_MAX and exit */ | ||
662 | + for (i--, channel--; i < pdata->channel_count; i--, channel--) | ||
663 | + devm_free_irq(pdata->dev, channel->dma_irq, channel); | ||
664 | + | ||
665 | + devm_free_irq(pdata->dev, pdata->dev_irq, pdata); | ||
666 | + | ||
667 | + return ret; | ||
668 | +} | ||
669 | + | ||
670 | +static void xgbe_free_irqs(struct xgbe_prv_data *pdata) | ||
671 | +{ | ||
672 | + struct xgbe_channel *channel; | ||
673 | + unsigned int i; | ||
674 | + | ||
675 | + devm_free_irq(pdata->dev, pdata->dev_irq, pdata); | ||
676 | + | ||
677 | + if (!pdata->per_channel_irq) | ||
678 | + return; | ||
679 | + | ||
680 | + channel = pdata->channel; | ||
681 | + for (i = 0; i < pdata->channel_count; i++, channel++) | ||
682 | + devm_free_irq(pdata->dev, channel->dma_irq, channel); | ||
683 | +} | ||
684 | + | ||
685 | void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata) | ||
686 | { | ||
687 | struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
688 | @@ -630,6 +701,7 @@ void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata) | ||
689 | DBGPR("-->xgbe_init_rx_coalesce\n"); | ||
690 | |||
691 | pdata->rx_riwt = hw_if->usec_to_riwt(pdata, XGMAC_INIT_DMA_RX_USECS); | ||
692 | + pdata->rx_usecs = XGMAC_INIT_DMA_RX_USECS; | ||
693 | pdata->rx_frames = XGMAC_INIT_DMA_RX_FRAMES; | ||
694 | |||
695 | hw_if->config_rx_coalesce(pdata); | ||
696 | @@ -694,7 +766,7 @@ static void xgbe_adjust_link(struct net_device *netdev) | ||
697 | struct phy_device *phydev = pdata->phydev; | ||
698 | int new_state = 0; | ||
699 | |||
700 | - if (phydev == NULL) | ||
701 | + if (!phydev) | ||
702 | return; | ||
703 | |||
704 | if (phydev->link) { | ||
705 | @@ -810,20 +882,20 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller) | ||
706 | return -EINVAL; | ||
707 | } | ||
708 | |||
709 | - phy_stop(pdata->phydev); | ||
710 | - | ||
711 | spin_lock_irqsave(&pdata->lock, flags); | ||
712 | |||
713 | if (caller == XGMAC_DRIVER_CONTEXT) | ||
714 | netif_device_detach(netdev); | ||
715 | |||
716 | netif_tx_stop_all_queues(netdev); | ||
717 | - xgbe_napi_disable(pdata, 0); | ||
718 | |||
719 | - /* Powerdown Tx/Rx */ | ||
720 | hw_if->powerdown_tx(pdata); | ||
721 | hw_if->powerdown_rx(pdata); | ||
722 | |||
723 | + xgbe_napi_disable(pdata, 0); | ||
724 | + | ||
725 | + phy_stop(pdata->phydev); | ||
726 | + | ||
727 | pdata->power_down = 1; | ||
728 | |||
729 | spin_unlock_irqrestore(&pdata->lock, flags); | ||
730 | @@ -854,14 +926,14 @@ int xgbe_powerup(struct net_device *netdev, unsigned int caller) | ||
731 | |||
732 | phy_start(pdata->phydev); | ||
733 | |||
734 | - /* Enable Tx/Rx */ | ||
735 | + xgbe_napi_enable(pdata, 0); | ||
736 | + | ||
737 | hw_if->powerup_tx(pdata); | ||
738 | hw_if->powerup_rx(pdata); | ||
739 | |||
740 | if (caller == XGMAC_DRIVER_CONTEXT) | ||
741 | netif_device_attach(netdev); | ||
742 | |||
743 | - xgbe_napi_enable(pdata, 0); | ||
744 | netif_tx_start_all_queues(netdev); | ||
745 | |||
746 | spin_unlock_irqrestore(&pdata->lock, flags); | ||
747 | @@ -875,26 +947,39 @@ static int xgbe_start(struct xgbe_prv_data *pdata) | ||
748 | { | ||
749 | struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
750 | struct net_device *netdev = pdata->netdev; | ||
751 | + int ret; | ||
752 | |||
753 | DBGPR("-->xgbe_start\n"); | ||
754 | |||
755 | - xgbe_set_rx_mode(netdev); | ||
756 | - | ||
757 | hw_if->init(pdata); | ||
758 | |||
759 | phy_start(pdata->phydev); | ||
760 | |||
761 | + xgbe_napi_enable(pdata, 1); | ||
762 | + | ||
763 | + ret = xgbe_request_irqs(pdata); | ||
764 | + if (ret) | ||
765 | + goto err_napi; | ||
766 | + | ||
767 | hw_if->enable_tx(pdata); | ||
768 | hw_if->enable_rx(pdata); | ||
769 | |||
770 | xgbe_init_tx_timers(pdata); | ||
771 | |||
772 | - xgbe_napi_enable(pdata, 1); | ||
773 | netif_tx_start_all_queues(netdev); | ||
774 | |||
775 | DBGPR("<--xgbe_start\n"); | ||
776 | |||
777 | return 0; | ||
778 | + | ||
779 | +err_napi: | ||
780 | + xgbe_napi_disable(pdata, 1); | ||
781 | + | ||
782 | + phy_stop(pdata->phydev); | ||
783 | + | ||
784 | + hw_if->exit(pdata); | ||
785 | + | ||
786 | + return ret; | ||
787 | } | ||
788 | |||
789 | static void xgbe_stop(struct xgbe_prv_data *pdata) | ||
790 | @@ -907,16 +992,21 @@ static void xgbe_stop(struct xgbe_prv_data *pdata) | ||
791 | |||
792 | DBGPR("-->xgbe_stop\n"); | ||
793 | |||
794 | - phy_stop(pdata->phydev); | ||
795 | - | ||
796 | netif_tx_stop_all_queues(netdev); | ||
797 | - xgbe_napi_disable(pdata, 1); | ||
798 | |||
799 | xgbe_stop_tx_timers(pdata); | ||
800 | |||
801 | hw_if->disable_tx(pdata); | ||
802 | hw_if->disable_rx(pdata); | ||
803 | |||
804 | + xgbe_free_irqs(pdata); | ||
805 | + | ||
806 | + xgbe_napi_disable(pdata, 1); | ||
807 | + | ||
808 | + phy_stop(pdata->phydev); | ||
809 | + | ||
810 | + hw_if->exit(pdata); | ||
811 | + | ||
812 | channel = pdata->channel; | ||
813 | for (i = 0; i < pdata->channel_count; i++, channel++) { | ||
814 | if (!channel->tx_ring) | ||
815 | @@ -929,12 +1019,8 @@ static void xgbe_stop(struct xgbe_prv_data *pdata) | ||
816 | DBGPR("<--xgbe_stop\n"); | ||
817 | } | ||
818 | |||
819 | -static void xgbe_restart_dev(struct xgbe_prv_data *pdata, unsigned int reset) | ||
820 | +static void xgbe_restart_dev(struct xgbe_prv_data *pdata) | ||
821 | { | ||
822 | - struct xgbe_channel *channel; | ||
823 | - struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
824 | - unsigned int i; | ||
825 | - | ||
826 | DBGPR("-->xgbe_restart_dev\n"); | ||
827 | |||
828 | /* If not running, "restart" will happen on open */ | ||
829 | @@ -942,20 +1028,10 @@ static void xgbe_restart_dev(struct xgbe_prv_data *pdata, unsigned int reset) | ||
830 | return; | ||
831 | |||
832 | xgbe_stop(pdata); | ||
833 | - synchronize_irq(pdata->dev_irq); | ||
834 | - if (pdata->per_channel_irq) { | ||
835 | - channel = pdata->channel; | ||
836 | - for (i = 0; i < pdata->channel_count; i++, channel++) | ||
837 | - synchronize_irq(channel->dma_irq); | ||
838 | - } | ||
839 | |||
840 | xgbe_free_tx_data(pdata); | ||
841 | xgbe_free_rx_data(pdata); | ||
842 | |||
843 | - /* Issue software reset to device if requested */ | ||
844 | - if (reset) | ||
845 | - hw_if->exit(pdata); | ||
846 | - | ||
847 | xgbe_start(pdata); | ||
848 | |||
849 | DBGPR("<--xgbe_restart_dev\n"); | ||
850 | @@ -969,7 +1045,7 @@ static void xgbe_restart(struct work_struct *work) | ||
851 | |||
852 | rtnl_lock(); | ||
853 | |||
854 | - xgbe_restart_dev(pdata, 1); | ||
855 | + xgbe_restart_dev(pdata); | ||
856 | |||
857 | rtnl_unlock(); | ||
858 | } | ||
859 | @@ -1284,10 +1360,7 @@ static void xgbe_packet_info(struct xgbe_prv_data *pdata, | ||
860 | static int xgbe_open(struct net_device *netdev) | ||
861 | { | ||
862 | struct xgbe_prv_data *pdata = netdev_priv(netdev); | ||
863 | - struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
864 | struct xgbe_desc_if *desc_if = &pdata->desc_if; | ||
865 | - struct xgbe_channel *channel = NULL; | ||
866 | - unsigned int i = 0; | ||
867 | int ret; | ||
868 | |||
869 | DBGPR("-->xgbe_open\n"); | ||
870 | @@ -1330,55 +1403,14 @@ static int xgbe_open(struct net_device *netdev) | ||
871 | INIT_WORK(&pdata->restart_work, xgbe_restart); | ||
872 | INIT_WORK(&pdata->tx_tstamp_work, xgbe_tx_tstamp); | ||
873 | |||
874 | - /* Request interrupts */ | ||
875 | - ret = devm_request_irq(pdata->dev, pdata->dev_irq, xgbe_isr, 0, | ||
876 | - netdev->name, pdata); | ||
877 | - if (ret) { | ||
878 | - netdev_alert(netdev, "error requesting irq %d\n", | ||
879 | - pdata->dev_irq); | ||
880 | - goto err_rings; | ||
881 | - } | ||
882 | - | ||
883 | - if (pdata->per_channel_irq) { | ||
884 | - channel = pdata->channel; | ||
885 | - for (i = 0; i < pdata->channel_count; i++, channel++) { | ||
886 | - snprintf(channel->dma_irq_name, | ||
887 | - sizeof(channel->dma_irq_name) - 1, | ||
888 | - "%s-TxRx-%u", netdev_name(netdev), | ||
889 | - channel->queue_index); | ||
890 | - | ||
891 | - ret = devm_request_irq(pdata->dev, channel->dma_irq, | ||
892 | - xgbe_dma_isr, 0, | ||
893 | - channel->dma_irq_name, channel); | ||
894 | - if (ret) { | ||
895 | - netdev_alert(netdev, | ||
896 | - "error requesting irq %d\n", | ||
897 | - channel->dma_irq); | ||
898 | - goto err_irq; | ||
899 | - } | ||
900 | - } | ||
901 | - } | ||
902 | - | ||
903 | ret = xgbe_start(pdata); | ||
904 | if (ret) | ||
905 | - goto err_start; | ||
906 | + goto err_rings; | ||
907 | |||
908 | DBGPR("<--xgbe_open\n"); | ||
909 | |||
910 | return 0; | ||
911 | |||
912 | -err_start: | ||
913 | - hw_if->exit(pdata); | ||
914 | - | ||
915 | -err_irq: | ||
916 | - if (pdata->per_channel_irq) { | ||
917 | - /* Using an unsigned int, 'i' will go to UINT_MAX and exit */ | ||
918 | - for (i--, channel--; i < pdata->channel_count; i--, channel--) | ||
919 | - devm_free_irq(pdata->dev, channel->dma_irq, channel); | ||
920 | - } | ||
921 | - | ||
922 | - devm_free_irq(pdata->dev, pdata->dev_irq, pdata); | ||
923 | - | ||
924 | err_rings: | ||
925 | desc_if->free_ring_resources(pdata); | ||
926 | |||
927 | @@ -1400,30 +1432,16 @@ err_phy_init: | ||
928 | static int xgbe_close(struct net_device *netdev) | ||
929 | { | ||
930 | struct xgbe_prv_data *pdata = netdev_priv(netdev); | ||
931 | - struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
932 | struct xgbe_desc_if *desc_if = &pdata->desc_if; | ||
933 | - struct xgbe_channel *channel; | ||
934 | - unsigned int i; | ||
935 | |||
936 | DBGPR("-->xgbe_close\n"); | ||
937 | |||
938 | /* Stop the device */ | ||
939 | xgbe_stop(pdata); | ||
940 | |||
941 | - /* Issue software reset to device */ | ||
942 | - hw_if->exit(pdata); | ||
943 | - | ||
944 | /* Free the ring descriptors and buffers */ | ||
945 | desc_if->free_ring_resources(pdata); | ||
946 | |||
947 | - /* Release the interrupts */ | ||
948 | - devm_free_irq(pdata->dev, pdata->dev_irq, pdata); | ||
949 | - if (pdata->per_channel_irq) { | ||
950 | - channel = pdata->channel; | ||
951 | - for (i = 0; i < pdata->channel_count; i++, channel++) | ||
952 | - devm_free_irq(pdata->dev, channel->dma_irq, channel); | ||
953 | - } | ||
954 | - | ||
955 | /* Free the channel and ring structures */ | ||
956 | xgbe_free_channels(pdata); | ||
957 | |||
958 | @@ -1448,7 +1466,6 @@ static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
959 | struct xgbe_ring *ring; | ||
960 | struct xgbe_packet_data *packet; | ||
961 | struct netdev_queue *txq; | ||
962 | - unsigned long flags; | ||
963 | int ret; | ||
964 | |||
965 | DBGPR("-->xgbe_xmit: skb->len = %d\n", skb->len); | ||
966 | @@ -1460,8 +1477,6 @@ static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
967 | |||
968 | ret = NETDEV_TX_OK; | ||
969 | |||
970 | - spin_lock_irqsave(&ring->lock, flags); | ||
971 | - | ||
972 | if (skb->len == 0) { | ||
973 | netdev_err(netdev, "empty skb received from stack\n"); | ||
974 | dev_kfree_skb_any(skb); | ||
975 | @@ -1508,10 +1523,6 @@ static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev) | ||
976 | ret = NETDEV_TX_OK; | ||
977 | |||
978 | tx_netdev_return: | ||
979 | - spin_unlock_irqrestore(&ring->lock, flags); | ||
980 | - | ||
981 | - DBGPR("<--xgbe_xmit\n"); | ||
982 | - | ||
983 | return ret; | ||
984 | } | ||
985 | |||
986 | @@ -1519,17 +1530,10 @@ static void xgbe_set_rx_mode(struct net_device *netdev) | ||
987 | { | ||
988 | struct xgbe_prv_data *pdata = netdev_priv(netdev); | ||
989 | struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
990 | - unsigned int pr_mode, am_mode; | ||
991 | |||
992 | DBGPR("-->xgbe_set_rx_mode\n"); | ||
993 | |||
994 | - pr_mode = ((netdev->flags & IFF_PROMISC) != 0); | ||
995 | - am_mode = ((netdev->flags & IFF_ALLMULTI) != 0); | ||
996 | - | ||
997 | - hw_if->set_promiscuous_mode(pdata, pr_mode); | ||
998 | - hw_if->set_all_multicast_mode(pdata, am_mode); | ||
999 | - | ||
1000 | - hw_if->add_mac_addresses(pdata); | ||
1001 | + hw_if->config_rx_mode(pdata); | ||
1002 | |||
1003 | DBGPR("<--xgbe_set_rx_mode\n"); | ||
1004 | } | ||
1005 | @@ -1589,13 +1593,21 @@ static int xgbe_change_mtu(struct net_device *netdev, int mtu) | ||
1006 | pdata->rx_buf_size = ret; | ||
1007 | netdev->mtu = mtu; | ||
1008 | |||
1009 | - xgbe_restart_dev(pdata, 0); | ||
1010 | + xgbe_restart_dev(pdata); | ||
1011 | |||
1012 | DBGPR("<--xgbe_change_mtu\n"); | ||
1013 | |||
1014 | return 0; | ||
1015 | } | ||
1016 | |||
1017 | +static void xgbe_tx_timeout(struct net_device *netdev) | ||
1018 | +{ | ||
1019 | + struct xgbe_prv_data *pdata = netdev_priv(netdev); | ||
1020 | + | ||
1021 | + netdev_warn(netdev, "tx timeout, device restarting\n"); | ||
1022 | + schedule_work(&pdata->restart_work); | ||
1023 | +} | ||
1024 | + | ||
1025 | static struct rtnl_link_stats64 *xgbe_get_stats64(struct net_device *netdev, | ||
1026 | struct rtnl_link_stats64 *s) | ||
1027 | { | ||
1028 | @@ -1760,6 +1772,7 @@ static const struct net_device_ops xgbe_netdev_ops = { | ||
1029 | .ndo_validate_addr = eth_validate_addr, | ||
1030 | .ndo_do_ioctl = xgbe_ioctl, | ||
1031 | .ndo_change_mtu = xgbe_change_mtu, | ||
1032 | + .ndo_tx_timeout = xgbe_tx_timeout, | ||
1033 | .ndo_get_stats64 = xgbe_get_stats64, | ||
1034 | .ndo_vlan_rx_add_vid = xgbe_vlan_rx_add_vid, | ||
1035 | .ndo_vlan_rx_kill_vid = xgbe_vlan_rx_kill_vid, | ||
1036 | @@ -1778,29 +1791,44 @@ struct net_device_ops *xgbe_get_netdev_ops(void) | ||
1037 | static void xgbe_rx_refresh(struct xgbe_channel *channel) | ||
1038 | { | ||
1039 | struct xgbe_prv_data *pdata = channel->pdata; | ||
1040 | + struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
1041 | struct xgbe_desc_if *desc_if = &pdata->desc_if; | ||
1042 | struct xgbe_ring *ring = channel->rx_ring; | ||
1043 | struct xgbe_ring_data *rdata; | ||
1044 | |||
1045 | - desc_if->realloc_rx_buffer(channel); | ||
1046 | + while (ring->dirty != ring->cur) { | ||
1047 | + rdata = XGBE_GET_DESC_DATA(ring, ring->dirty); | ||
1048 | + | ||
1049 | + /* Reset rdata values */ | ||
1050 | + desc_if->unmap_rdata(pdata, rdata); | ||
1051 | + | ||
1052 | + if (desc_if->map_rx_buffer(pdata, ring, rdata)) | ||
1053 | + break; | ||
1054 | + | ||
1055 | + hw_if->rx_desc_reset(pdata, rdata, ring->dirty); | ||
1056 | + | ||
1057 | + ring->dirty++; | ||
1058 | + } | ||
1059 | + | ||
1060 | + /* Make sure everything is written before the register write */ | ||
1061 | + wmb(); | ||
1062 | |||
1063 | /* Update the Rx Tail Pointer Register with address of | ||
1064 | * the last cleaned entry */ | ||
1065 | - rdata = XGBE_GET_DESC_DATA(ring, ring->rx.realloc_index - 1); | ||
1066 | + rdata = XGBE_GET_DESC_DATA(ring, ring->dirty - 1); | ||
1067 | XGMAC_DMA_IOWRITE(channel, DMA_CH_RDTR_LO, | ||
1068 | lower_32_bits(rdata->rdesc_dma)); | ||
1069 | } | ||
1070 | |||
1071 | -static struct sk_buff *xgbe_create_skb(struct xgbe_prv_data *pdata, | ||
1072 | +static struct sk_buff *xgbe_create_skb(struct napi_struct *napi, | ||
1073 | struct xgbe_ring_data *rdata, | ||
1074 | unsigned int *len) | ||
1075 | { | ||
1076 | - struct net_device *netdev = pdata->netdev; | ||
1077 | struct sk_buff *skb; | ||
1078 | u8 *packet; | ||
1079 | unsigned int copy_len; | ||
1080 | |||
1081 | - skb = netdev_alloc_skb_ip_align(netdev, rdata->rx.hdr.dma_len); | ||
1082 | + skb = napi_alloc_skb(napi, rdata->rx.hdr.dma_len); | ||
1083 | if (!skb) | ||
1084 | return NULL; | ||
1085 | |||
1086 | @@ -1826,7 +1854,6 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) | ||
1087 | struct xgbe_ring_desc *rdesc; | ||
1088 | struct net_device *netdev = pdata->netdev; | ||
1089 | struct netdev_queue *txq; | ||
1090 | - unsigned long flags; | ||
1091 | int processed = 0; | ||
1092 | unsigned int tx_packets = 0, tx_bytes = 0; | ||
1093 | |||
1094 | @@ -1838,8 +1865,6 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) | ||
1095 | |||
1096 | txq = netdev_get_tx_queue(netdev, channel->queue_index); | ||
1097 | |||
1098 | - spin_lock_irqsave(&ring->lock, flags); | ||
1099 | - | ||
1100 | while ((processed < XGBE_TX_DESC_MAX_PROC) && | ||
1101 | (ring->dirty != ring->cur)) { | ||
1102 | rdata = XGBE_GET_DESC_DATA(ring, ring->dirty); | ||
1103 | @@ -1850,7 +1875,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) | ||
1104 | |||
1105 | /* Make sure descriptor fields are read after reading the OWN | ||
1106 | * bit */ | ||
1107 | - rmb(); | ||
1108 | + dma_rmb(); | ||
1109 | |||
1110 | #ifdef XGMAC_ENABLE_TX_DESC_DUMP | ||
1111 | xgbe_dump_tx_desc(ring, ring->dirty, 1, 0); | ||
1112 | @@ -1870,7 +1895,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) | ||
1113 | } | ||
1114 | |||
1115 | if (!processed) | ||
1116 | - goto unlock; | ||
1117 | + return 0; | ||
1118 | |||
1119 | netdev_tx_completed_queue(txq, tx_packets, tx_bytes); | ||
1120 | |||
1121 | @@ -1882,9 +1907,6 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) | ||
1122 | |||
1123 | DBGPR("<--xgbe_tx_poll: processed=%d\n", processed); | ||
1124 | |||
1125 | -unlock: | ||
1126 | - spin_unlock_irqrestore(&ring->lock, flags); | ||
1127 | - | ||
1128 | return processed; | ||
1129 | } | ||
1130 | |||
1131 | @@ -1936,7 +1958,7 @@ static int xgbe_rx_poll(struct xgbe_channel *channel, int budget) | ||
1132 | read_again: | ||
1133 | rdata = XGBE_GET_DESC_DATA(ring, ring->cur); | ||
1134 | |||
1135 | - if (ring->dirty > (XGBE_RX_DESC_CNT >> 3)) | ||
1136 | + if (xgbe_rx_dirty_desc(ring) > (XGBE_RX_DESC_CNT >> 3)) | ||
1137 | xgbe_rx_refresh(channel); | ||
1138 | |||
1139 | if (hw_if->dev_read(channel)) | ||
1140 | @@ -1944,7 +1966,6 @@ read_again: | ||
1141 | |||
1142 | received++; | ||
1143 | ring->cur++; | ||
1144 | - ring->dirty++; | ||
1145 | |||
1146 | incomplete = XGMAC_GET_BITS(packet->attributes, | ||
1147 | RX_PACKET_ATTRIBUTES, | ||
1148 | @@ -1977,7 +1998,7 @@ read_again: | ||
1149 | rdata->rx.hdr.dma_len, | ||
1150 | DMA_FROM_DEVICE); | ||
1151 | |||
1152 | - skb = xgbe_create_skb(pdata, rdata, &put_len); | ||
1153 | + skb = xgbe_create_skb(napi, rdata, &put_len); | ||
1154 | if (!skb) { | ||
1155 | error = 1; | ||
1156 | goto skip_data; | ||
1157 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | ||
1158 | index ebf4893..5f149e8 100644 | ||
1159 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | ||
1160 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | ||
1161 | @@ -291,7 +291,6 @@ static int xgbe_get_settings(struct net_device *netdev, | ||
1162 | return -ENODEV; | ||
1163 | |||
1164 | ret = phy_ethtool_gset(pdata->phydev, cmd); | ||
1165 | - cmd->transceiver = XCVR_EXTERNAL; | ||
1166 | |||
1167 | DBGPR("<--xgbe_get_settings\n"); | ||
1168 | |||
1169 | @@ -378,18 +377,14 @@ static int xgbe_get_coalesce(struct net_device *netdev, | ||
1170 | struct ethtool_coalesce *ec) | ||
1171 | { | ||
1172 | struct xgbe_prv_data *pdata = netdev_priv(netdev); | ||
1173 | - struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
1174 | - unsigned int riwt; | ||
1175 | |||
1176 | DBGPR("-->xgbe_get_coalesce\n"); | ||
1177 | |||
1178 | memset(ec, 0, sizeof(struct ethtool_coalesce)); | ||
1179 | |||
1180 | - riwt = pdata->rx_riwt; | ||
1181 | - ec->rx_coalesce_usecs = hw_if->riwt_to_usec(pdata, riwt); | ||
1182 | + ec->rx_coalesce_usecs = pdata->rx_usecs; | ||
1183 | ec->rx_max_coalesced_frames = pdata->rx_frames; | ||
1184 | |||
1185 | - ec->tx_coalesce_usecs = pdata->tx_usecs; | ||
1186 | ec->tx_max_coalesced_frames = pdata->tx_frames; | ||
1187 | |||
1188 | DBGPR("<--xgbe_get_coalesce\n"); | ||
1189 | @@ -403,13 +398,14 @@ static int xgbe_set_coalesce(struct net_device *netdev, | ||
1190 | struct xgbe_prv_data *pdata = netdev_priv(netdev); | ||
1191 | struct xgbe_hw_if *hw_if = &pdata->hw_if; | ||
1192 | unsigned int rx_frames, rx_riwt, rx_usecs; | ||
1193 | - unsigned int tx_frames, tx_usecs; | ||
1194 | + unsigned int tx_frames; | ||
1195 | |||
1196 | DBGPR("-->xgbe_set_coalesce\n"); | ||
1197 | |||
1198 | /* Check for not supported parameters */ | ||
1199 | if ((ec->rx_coalesce_usecs_irq) || | ||
1200 | (ec->rx_max_coalesced_frames_irq) || | ||
1201 | + (ec->tx_coalesce_usecs) || | ||
1202 | (ec->tx_coalesce_usecs_irq) || | ||
1203 | (ec->tx_max_coalesced_frames_irq) || | ||
1204 | (ec->stats_block_coalesce_usecs) || | ||
1205 | @@ -428,28 +424,18 @@ static int xgbe_set_coalesce(struct net_device *netdev, | ||
1206 | (ec->rate_sample_interval)) | ||
1207 | return -EOPNOTSUPP; | ||
1208 | |||
1209 | - /* Can only change rx-frames when interface is down (see | ||
1210 | - * rx_descriptor_init in xgbe-dev.c) | ||
1211 | - */ | ||
1212 | - rx_frames = pdata->rx_frames; | ||
1213 | - if (rx_frames != ec->rx_max_coalesced_frames && netif_running(netdev)) { | ||
1214 | - netdev_alert(netdev, | ||
1215 | - "interface must be down to change rx-frames\n"); | ||
1216 | - return -EINVAL; | ||
1217 | - } | ||
1218 | - | ||
1219 | rx_riwt = hw_if->usec_to_riwt(pdata, ec->rx_coalesce_usecs); | ||
1220 | + rx_usecs = ec->rx_coalesce_usecs; | ||
1221 | rx_frames = ec->rx_max_coalesced_frames; | ||
1222 | |||
1223 | /* Use smallest possible value if conversion resulted in zero */ | ||
1224 | - if (ec->rx_coalesce_usecs && !rx_riwt) | ||
1225 | + if (rx_usecs && !rx_riwt) | ||
1226 | rx_riwt = 1; | ||
1227 | |||
1228 | /* Check the bounds of values for Rx */ | ||
1229 | if (rx_riwt > XGMAC_MAX_DMA_RIWT) { | ||
1230 | - rx_usecs = hw_if->riwt_to_usec(pdata, XGMAC_MAX_DMA_RIWT); | ||
1231 | netdev_alert(netdev, "rx-usec is limited to %d usecs\n", | ||
1232 | - rx_usecs); | ||
1233 | + hw_if->riwt_to_usec(pdata, XGMAC_MAX_DMA_RIWT)); | ||
1234 | return -EINVAL; | ||
1235 | } | ||
1236 | if (rx_frames > pdata->rx_desc_count) { | ||
1237 | @@ -458,7 +444,6 @@ static int xgbe_set_coalesce(struct net_device *netdev, | ||
1238 | return -EINVAL; | ||
1239 | } | ||
1240 | |||
1241 | - tx_usecs = ec->tx_coalesce_usecs; | ||
1242 | tx_frames = ec->tx_max_coalesced_frames; | ||
1243 | |||
1244 | /* Check the bounds of values for Tx */ | ||
1245 | @@ -469,10 +454,10 @@ static int xgbe_set_coalesce(struct net_device *netdev, | ||
1246 | } | ||
1247 | |||
1248 | pdata->rx_riwt = rx_riwt; | ||
1249 | + pdata->rx_usecs = rx_usecs; | ||
1250 | pdata->rx_frames = rx_frames; | ||
1251 | hw_if->config_rx_coalesce(pdata); | ||
1252 | |||
1253 | - pdata->tx_usecs = tx_usecs; | ||
1254 | pdata->tx_frames = tx_frames; | ||
1255 | hw_if->config_tx_coalesce(pdata); | ||
1256 | |||
1257 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c | ||
1258 | index dbd3850..7149053 100644 | ||
1259 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c | ||
1260 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c | ||
1261 | @@ -123,7 +123,10 @@ | ||
1262 | #include <linux/io.h> | ||
1263 | #include <linux/of.h> | ||
1264 | #include <linux/of_net.h> | ||
1265 | +#include <linux/of_address.h> | ||
1266 | #include <linux/clk.h> | ||
1267 | +#include <linux/property.h> | ||
1268 | +#include <linux/acpi.h> | ||
1269 | |||
1270 | #include "xgbe.h" | ||
1271 | #include "xgbe-common.h" | ||
1272 | @@ -148,6 +151,7 @@ static void xgbe_default_config(struct xgbe_prv_data *pdata) | ||
1273 | pdata->pause_autoneg = 1; | ||
1274 | pdata->tx_pause = 1; | ||
1275 | pdata->rx_pause = 1; | ||
1276 | + pdata->phy_speed = SPEED_UNKNOWN; | ||
1277 | pdata->power_down = 0; | ||
1278 | pdata->default_autoneg = AUTONEG_ENABLE; | ||
1279 | pdata->default_speed = SPEED_10000; | ||
1280 | @@ -161,6 +165,96 @@ static void xgbe_init_all_fptrs(struct xgbe_prv_data *pdata) | ||
1281 | xgbe_init_function_ptrs_desc(&pdata->desc_if); | ||
1282 | } | ||
1283 | |||
1284 | +#ifdef CONFIG_ACPI | ||
1285 | +static int xgbe_acpi_support(struct xgbe_prv_data *pdata) | ||
1286 | +{ | ||
1287 | + struct acpi_device *adev = pdata->adev; | ||
1288 | + struct device *dev = pdata->dev; | ||
1289 | + u32 property; | ||
1290 | + acpi_handle handle; | ||
1291 | + acpi_status status; | ||
1292 | + unsigned long long data; | ||
1293 | + int cca; | ||
1294 | + int ret; | ||
1295 | + | ||
1296 | + /* Obtain the system clock setting */ | ||
1297 | + ret = device_property_read_u32(dev, XGBE_ACPI_DMA_FREQ, &property); | ||
1298 | + if (ret) { | ||
1299 | + dev_err(dev, "unable to obtain %s property\n", | ||
1300 | + XGBE_ACPI_DMA_FREQ); | ||
1301 | + return ret; | ||
1302 | + } | ||
1303 | + pdata->sysclk_rate = property; | ||
1304 | + | ||
1305 | + /* Obtain the PTP clock setting */ | ||
1306 | + ret = device_property_read_u32(dev, XGBE_ACPI_PTP_FREQ, &property); | ||
1307 | + if (ret) { | ||
1308 | + dev_err(dev, "unable to obtain %s property\n", | ||
1309 | + XGBE_ACPI_PTP_FREQ); | ||
1310 | + return ret; | ||
1311 | + } | ||
1312 | + pdata->ptpclk_rate = property; | ||
1313 | + | ||
1314 | + /* Retrieve the device cache coherency value */ | ||
1315 | + handle = adev->handle; | ||
1316 | + do { | ||
1317 | + status = acpi_evaluate_integer(handle, "_CCA", NULL, &data); | ||
1318 | + if (!ACPI_FAILURE(status)) { | ||
1319 | + cca = data; | ||
1320 | + break; | ||
1321 | + } | ||
1322 | + | ||
1323 | + status = acpi_get_parent(handle, &handle); | ||
1324 | + } while (!ACPI_FAILURE(status)); | ||
1325 | + | ||
1326 | + if (ACPI_FAILURE(status)) { | ||
1327 | + dev_err(dev, "error obtaining acpi coherency value\n"); | ||
1328 | + return -EINVAL; | ||
1329 | + } | ||
1330 | + pdata->coherent = !!cca; | ||
1331 | + | ||
1332 | + return 0; | ||
1333 | +} | ||
1334 | +#else /* CONFIG_ACPI */ | ||
1335 | +static int xgbe_acpi_support(struct xgbe_prv_data *pdata) | ||
1336 | +{ | ||
1337 | + return -EINVAL; | ||
1338 | +} | ||
1339 | +#endif /* CONFIG_ACPI */ | ||
1340 | + | ||
1341 | +#ifdef CONFIG_OF | ||
1342 | +static int xgbe_of_support(struct xgbe_prv_data *pdata) | ||
1343 | +{ | ||
1344 | + struct device *dev = pdata->dev; | ||
1345 | + | ||
1346 | + /* Obtain the system clock setting */ | ||
1347 | + pdata->sysclk = devm_clk_get(dev, XGBE_DMA_CLOCK); | ||
1348 | + if (IS_ERR(pdata->sysclk)) { | ||
1349 | + dev_err(dev, "dma devm_clk_get failed\n"); | ||
1350 | + return PTR_ERR(pdata->sysclk); | ||
1351 | + } | ||
1352 | + pdata->sysclk_rate = clk_get_rate(pdata->sysclk); | ||
1353 | + | ||
1354 | + /* Obtain the PTP clock setting */ | ||
1355 | + pdata->ptpclk = devm_clk_get(dev, XGBE_PTP_CLOCK); | ||
1356 | + if (IS_ERR(pdata->ptpclk)) { | ||
1357 | + dev_err(dev, "ptp devm_clk_get failed\n"); | ||
1358 | + return PTR_ERR(pdata->ptpclk); | ||
1359 | + } | ||
1360 | + pdata->ptpclk_rate = clk_get_rate(pdata->ptpclk); | ||
1361 | + | ||
1362 | + /* Retrieve the device cache coherency value */ | ||
1363 | + pdata->coherent = of_dma_is_coherent(dev->of_node); | ||
1364 | + | ||
1365 | + return 0; | ||
1366 | +} | ||
1367 | +#else /* CONFIG_OF */ | ||
1368 | +static int xgbe_of_support(struct xgbe_prv_data *pdata) | ||
1369 | +{ | ||
1370 | + return -EINVAL; | ||
1371 | +} | ||
1372 | +#endif /*CONFIG_OF */ | ||
1373 | + | ||
1374 | static int xgbe_probe(struct platform_device *pdev) | ||
1375 | { | ||
1376 | struct xgbe_prv_data *pdata; | ||
1377 | @@ -169,7 +263,7 @@ static int xgbe_probe(struct platform_device *pdev) | ||
1378 | struct net_device *netdev; | ||
1379 | struct device *dev = &pdev->dev; | ||
1380 | struct resource *res; | ||
1381 | - const u8 *mac_addr; | ||
1382 | + const char *phy_mode; | ||
1383 | unsigned int i; | ||
1384 | int ret; | ||
1385 | |||
1386 | @@ -186,6 +280,7 @@ static int xgbe_probe(struct platform_device *pdev) | ||
1387 | pdata = netdev_priv(netdev); | ||
1388 | pdata->netdev = netdev; | ||
1389 | pdata->pdev = pdev; | ||
1390 | + pdata->adev = ACPI_COMPANION(dev); | ||
1391 | pdata->dev = dev; | ||
1392 | platform_set_drvdata(pdev, netdev); | ||
1393 | |||
1394 | @@ -194,6 +289,9 @@ static int xgbe_probe(struct platform_device *pdev) | ||
1395 | mutex_init(&pdata->rss_mutex); | ||
1396 | spin_lock_init(&pdata->tstamp_lock); | ||
1397 | |||
1398 | + /* Check if we should use ACPI or DT */ | ||
1399 | + pdata->use_acpi = (!pdata->adev || acpi_disabled) ? 0 : 1; | ||
1400 | + | ||
1401 | /* Set and validate the number of descriptors for a ring */ | ||
1402 | BUILD_BUG_ON_NOT_POWER_OF_2(XGBE_TX_DESC_CNT); | ||
1403 | pdata->tx_desc_count = XGBE_TX_DESC_CNT; | ||
1404 | @@ -212,22 +310,6 @@ static int xgbe_probe(struct platform_device *pdev) | ||
1405 | goto err_io; | ||
1406 | } | ||
1407 | |||
1408 | - /* Obtain the system clock setting */ | ||
1409 | - pdata->sysclk = devm_clk_get(dev, XGBE_DMA_CLOCK); | ||
1410 | - if (IS_ERR(pdata->sysclk)) { | ||
1411 | - dev_err(dev, "dma devm_clk_get failed\n"); | ||
1412 | - ret = PTR_ERR(pdata->sysclk); | ||
1413 | - goto err_io; | ||
1414 | - } | ||
1415 | - | ||
1416 | - /* Obtain the PTP clock setting */ | ||
1417 | - pdata->ptpclk = devm_clk_get(dev, XGBE_PTP_CLOCK); | ||
1418 | - if (IS_ERR(pdata->ptpclk)) { | ||
1419 | - dev_err(dev, "ptp devm_clk_get failed\n"); | ||
1420 | - ret = PTR_ERR(pdata->ptpclk); | ||
1421 | - goto err_io; | ||
1422 | - } | ||
1423 | - | ||
1424 | /* Obtain the mmio areas for the device */ | ||
1425 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
1426 | pdata->xgmac_regs = devm_ioremap_resource(dev, res); | ||
1427 | @@ -247,16 +329,42 @@ static int xgbe_probe(struct platform_device *pdev) | ||
1428 | } | ||
1429 | DBGPR(" xpcs_regs = %p\n", pdata->xpcs_regs); | ||
1430 | |||
1431 | - /* Set the DMA mask */ | ||
1432 | - if (!dev->dma_mask) | ||
1433 | - dev->dma_mask = &dev->coherent_dma_mask; | ||
1434 | - ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40)); | ||
1435 | - if (ret) { | ||
1436 | - dev_err(dev, "dma_set_mask_and_coherent failed\n"); | ||
1437 | + /* Retrieve the MAC address */ | ||
1438 | + ret = device_property_read_u8_array(dev, XGBE_MAC_ADDR_PROPERTY, | ||
1439 | + pdata->mac_addr, | ||
1440 | + sizeof(pdata->mac_addr)); | ||
1441 | + if (ret || !is_valid_ether_addr(pdata->mac_addr)) { | ||
1442 | + dev_err(dev, "invalid %s property\n", XGBE_MAC_ADDR_PROPERTY); | ||
1443 | + if (!ret) | ||
1444 | + ret = -EINVAL; | ||
1445 | goto err_io; | ||
1446 | } | ||
1447 | |||
1448 | - if (of_property_read_bool(dev->of_node, "dma-coherent")) { | ||
1449 | + /* Retrieve the PHY mode - it must be "xgmii" */ | ||
1450 | + ret = device_property_read_string(dev, XGBE_PHY_MODE_PROPERTY, | ||
1451 | + &phy_mode); | ||
1452 | + if (ret || strcmp(phy_mode, phy_modes(PHY_INTERFACE_MODE_XGMII))) { | ||
1453 | + dev_err(dev, "invalid %s property\n", XGBE_PHY_MODE_PROPERTY); | ||
1454 | + if (!ret) | ||
1455 | + ret = -EINVAL; | ||
1456 | + goto err_io; | ||
1457 | + } | ||
1458 | + pdata->phy_mode = PHY_INTERFACE_MODE_XGMII; | ||
1459 | + | ||
1460 | + /* Check for per channel interrupt support */ | ||
1461 | + if (device_property_present(dev, XGBE_DMA_IRQS_PROPERTY)) | ||
1462 | + pdata->per_channel_irq = 1; | ||
1463 | + | ||
1464 | + /* Obtain device settings unique to ACPI/OF */ | ||
1465 | + if (pdata->use_acpi) | ||
1466 | + ret = xgbe_acpi_support(pdata); | ||
1467 | + else | ||
1468 | + ret = xgbe_of_support(pdata); | ||
1469 | + if (ret) | ||
1470 | + goto err_io; | ||
1471 | + | ||
1472 | + /* Set the DMA coherency values */ | ||
1473 | + if (pdata->coherent) { | ||
1474 | pdata->axdomain = XGBE_DMA_OS_AXDOMAIN; | ||
1475 | pdata->arcache = XGBE_DMA_OS_ARCACHE; | ||
1476 | pdata->awcache = XGBE_DMA_OS_AWCACHE; | ||
1477 | @@ -266,10 +374,7 @@ static int xgbe_probe(struct platform_device *pdev) | ||
1478 | pdata->awcache = XGBE_DMA_SYS_AWCACHE; | ||
1479 | } | ||
1480 | |||
1481 | - /* Check for per channel interrupt support */ | ||
1482 | - if (of_property_read_bool(dev->of_node, XGBE_DMA_IRQS)) | ||
1483 | - pdata->per_channel_irq = 1; | ||
1484 | - | ||
1485 | + /* Get the device interrupt */ | ||
1486 | ret = platform_get_irq(pdev, 0); | ||
1487 | if (ret < 0) { | ||
1488 | dev_err(dev, "platform_get_irq 0 failed\n"); | ||
1489 | @@ -279,6 +384,7 @@ static int xgbe_probe(struct platform_device *pdev) | ||
1490 | |||
1491 | netdev->irq = pdata->dev_irq; | ||
1492 | netdev->base_addr = (unsigned long)pdata->xgmac_regs; | ||
1493 | + memcpy(netdev->dev_addr, pdata->mac_addr, netdev->addr_len); | ||
1494 | |||
1495 | /* Set all the function pointers */ | ||
1496 | xgbe_init_all_fptrs(pdata); | ||
1497 | @@ -291,26 +397,19 @@ static int xgbe_probe(struct platform_device *pdev) | ||
1498 | /* Populate the hardware features */ | ||
1499 | xgbe_get_all_hw_features(pdata); | ||
1500 | |||
1501 | - /* Retrieve the MAC address */ | ||
1502 | - mac_addr = of_get_mac_address(dev->of_node); | ||
1503 | - if (!mac_addr) { | ||
1504 | - dev_err(dev, "invalid mac address for this device\n"); | ||
1505 | - ret = -EINVAL; | ||
1506 | - goto err_io; | ||
1507 | - } | ||
1508 | - memcpy(netdev->dev_addr, mac_addr, netdev->addr_len); | ||
1509 | + /* Set default configuration data */ | ||
1510 | + xgbe_default_config(pdata); | ||
1511 | |||
1512 | - /* Retrieve the PHY mode - it must be "xgmii" */ | ||
1513 | - pdata->phy_mode = of_get_phy_mode(dev->of_node); | ||
1514 | - if (pdata->phy_mode != PHY_INTERFACE_MODE_XGMII) { | ||
1515 | - dev_err(dev, "invalid phy-mode specified for this device\n"); | ||
1516 | - ret = -EINVAL; | ||
1517 | + /* Set the DMA mask */ | ||
1518 | + if (!dev->dma_mask) | ||
1519 | + dev->dma_mask = &dev->coherent_dma_mask; | ||
1520 | + ret = dma_set_mask_and_coherent(dev, | ||
1521 | + DMA_BIT_MASK(pdata->hw_feat.dma_width)); | ||
1522 | + if (ret) { | ||
1523 | + dev_err(dev, "dma_set_mask_and_coherent failed\n"); | ||
1524 | goto err_io; | ||
1525 | } | ||
1526 | |||
1527 | - /* Set default configuration data */ | ||
1528 | - xgbe_default_config(pdata); | ||
1529 | - | ||
1530 | /* Calculate the number of Tx and Rx rings to be created | ||
1531 | * -Tx (DMA) Channels map 1-to-1 to Tx Queues so set | ||
1532 | * the number of Tx queues to the number of Tx channels | ||
1533 | @@ -392,6 +491,9 @@ static int xgbe_probe(struct platform_device *pdev) | ||
1534 | |||
1535 | netdev->priv_flags |= IFF_UNICAST_FLT; | ||
1536 | |||
1537 | + /* Use default watchdog timeout */ | ||
1538 | + netdev->watchdog_timeo = 0; | ||
1539 | + | ||
1540 | xgbe_init_rx_coalesce(pdata); | ||
1541 | xgbe_init_tx_coalesce(pdata); | ||
1542 | |||
1543 | @@ -491,18 +593,35 @@ static int xgbe_resume(struct device *dev) | ||
1544 | } | ||
1545 | #endif /* CONFIG_PM */ | ||
1546 | |||
1547 | +#ifdef CONFIG_ACPI | ||
1548 | +static const struct acpi_device_id xgbe_acpi_match[] = { | ||
1549 | + { "AMDI8001", 0 }, | ||
1550 | + {}, | ||
1551 | +}; | ||
1552 | + | ||
1553 | +MODULE_DEVICE_TABLE(acpi, xgbe_acpi_match); | ||
1554 | +#endif | ||
1555 | + | ||
1556 | +#ifdef CONFIG_OF | ||
1557 | static const struct of_device_id xgbe_of_match[] = { | ||
1558 | { .compatible = "amd,xgbe-seattle-v1a", }, | ||
1559 | {}, | ||
1560 | }; | ||
1561 | |||
1562 | MODULE_DEVICE_TABLE(of, xgbe_of_match); | ||
1563 | +#endif | ||
1564 | + | ||
1565 | static SIMPLE_DEV_PM_OPS(xgbe_pm_ops, xgbe_suspend, xgbe_resume); | ||
1566 | |||
1567 | static struct platform_driver xgbe_driver = { | ||
1568 | .driver = { | ||
1569 | .name = "amd-xgbe", | ||
1570 | +#ifdef CONFIG_ACPI | ||
1571 | + .acpi_match_table = xgbe_acpi_match, | ||
1572 | +#endif | ||
1573 | +#ifdef CONFIG_OF | ||
1574 | .of_match_table = xgbe_of_match, | ||
1575 | +#endif | ||
1576 | .pm = &xgbe_pm_ops, | ||
1577 | }, | ||
1578 | .probe = xgbe_probe, | ||
1579 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | ||
1580 | index 363b210..59e267f 100644 | ||
1581 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | ||
1582 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | ||
1583 | @@ -205,25 +205,16 @@ void xgbe_dump_phy_registers(struct xgbe_prv_data *pdata) | ||
1584 | |||
1585 | int xgbe_mdio_register(struct xgbe_prv_data *pdata) | ||
1586 | { | ||
1587 | - struct device_node *phy_node; | ||
1588 | struct mii_bus *mii; | ||
1589 | struct phy_device *phydev; | ||
1590 | int ret = 0; | ||
1591 | |||
1592 | DBGPR("-->xgbe_mdio_register\n"); | ||
1593 | |||
1594 | - /* Retrieve the phy-handle */ | ||
1595 | - phy_node = of_parse_phandle(pdata->dev->of_node, "phy-handle", 0); | ||
1596 | - if (!phy_node) { | ||
1597 | - dev_err(pdata->dev, "unable to parse phy-handle\n"); | ||
1598 | - return -EINVAL; | ||
1599 | - } | ||
1600 | - | ||
1601 | mii = mdiobus_alloc(); | ||
1602 | - if (mii == NULL) { | ||
1603 | + if (!mii) { | ||
1604 | dev_err(pdata->dev, "mdiobus_alloc failed\n"); | ||
1605 | - ret = -ENOMEM; | ||
1606 | - goto err_node_get; | ||
1607 | + return -ENOMEM; | ||
1608 | } | ||
1609 | |||
1610 | /* Register on the MDIO bus (don't probe any PHYs) */ | ||
1611 | @@ -252,18 +243,19 @@ int xgbe_mdio_register(struct xgbe_prv_data *pdata) | ||
1612 | request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, | ||
1613 | MDIO_ID_ARGS(phydev->c45_ids.device_ids[MDIO_MMD_PCS])); | ||
1614 | |||
1615 | - of_node_get(phy_node); | ||
1616 | - phydev->dev.of_node = phy_node; | ||
1617 | ret = phy_device_register(phydev); | ||
1618 | if (ret) { | ||
1619 | dev_err(pdata->dev, "phy_device_register failed\n"); | ||
1620 | - of_node_put(phy_node); | ||
1621 | + goto err_phy_device; | ||
1622 | + } | ||
1623 | + if (!phydev->dev.driver) { | ||
1624 | + dev_err(pdata->dev, "phy driver probe failed\n"); | ||
1625 | + ret = -EIO; | ||
1626 | goto err_phy_device; | ||
1627 | } | ||
1628 | |||
1629 | /* Add a reference to the PHY driver so it can't be unloaded */ | ||
1630 | - pdata->phy_module = phydev->dev.driver ? | ||
1631 | - phydev->dev.driver->owner : NULL; | ||
1632 | + pdata->phy_module = phydev->dev.driver->owner; | ||
1633 | if (!try_module_get(pdata->phy_module)) { | ||
1634 | dev_err(pdata->dev, "try_module_get failed\n"); | ||
1635 | ret = -EIO; | ||
1636 | @@ -283,8 +275,6 @@ int xgbe_mdio_register(struct xgbe_prv_data *pdata) | ||
1637 | |||
1638 | pdata->phydev = phydev; | ||
1639 | |||
1640 | - of_node_put(phy_node); | ||
1641 | - | ||
1642 | DBGPHY_REGS(pdata); | ||
1643 | |||
1644 | DBGPR("<--xgbe_mdio_register\n"); | ||
1645 | @@ -300,9 +290,6 @@ err_mdiobus_register: | ||
1646 | err_mdiobus_alloc: | ||
1647 | mdiobus_free(mii); | ||
1648 | |||
1649 | -err_node_get: | ||
1650 | - of_node_put(phy_node); | ||
1651 | - | ||
1652 | return ret; | ||
1653 | } | ||
1654 | |||
1655 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c | ||
1656 | index a1bf9d1c..f0d0ac6 100644 | ||
1657 | --- a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c | ||
1658 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c | ||
1659 | @@ -171,21 +171,15 @@ static int xgbe_adjtime(struct ptp_clock_info *info, s64 delta) | ||
1660 | struct xgbe_prv_data, | ||
1661 | ptp_clock_info); | ||
1662 | unsigned long flags; | ||
1663 | - u64 nsec; | ||
1664 | |||
1665 | spin_lock_irqsave(&pdata->tstamp_lock, flags); | ||
1666 | - | ||
1667 | - nsec = timecounter_read(&pdata->tstamp_tc); | ||
1668 | - | ||
1669 | - nsec += delta; | ||
1670 | - timecounter_init(&pdata->tstamp_tc, &pdata->tstamp_cc, nsec); | ||
1671 | - | ||
1672 | + timecounter_adjtime(&pdata->tstamp_tc, delta); | ||
1673 | spin_unlock_irqrestore(&pdata->tstamp_lock, flags); | ||
1674 | |||
1675 | return 0; | ||
1676 | } | ||
1677 | |||
1678 | -static int xgbe_gettime(struct ptp_clock_info *info, struct timespec *ts) | ||
1679 | +static int xgbe_gettime(struct ptp_clock_info *info, struct timespec64 *ts) | ||
1680 | { | ||
1681 | struct xgbe_prv_data *pdata = container_of(info, | ||
1682 | struct xgbe_prv_data, | ||
1683 | @@ -199,12 +193,13 @@ static int xgbe_gettime(struct ptp_clock_info *info, struct timespec *ts) | ||
1684 | |||
1685 | spin_unlock_irqrestore(&pdata->tstamp_lock, flags); | ||
1686 | |||
1687 | - *ts = ns_to_timespec(nsec); | ||
1688 | + *ts = ns_to_timespec64(nsec); | ||
1689 | |||
1690 | return 0; | ||
1691 | } | ||
1692 | |||
1693 | -static int xgbe_settime(struct ptp_clock_info *info, const struct timespec *ts) | ||
1694 | +static int xgbe_settime(struct ptp_clock_info *info, | ||
1695 | + const struct timespec64 *ts) | ||
1696 | { | ||
1697 | struct xgbe_prv_data *pdata = container_of(info, | ||
1698 | struct xgbe_prv_data, | ||
1699 | @@ -212,7 +207,7 @@ static int xgbe_settime(struct ptp_clock_info *info, const struct timespec *ts) | ||
1700 | unsigned long flags; | ||
1701 | u64 nsec; | ||
1702 | |||
1703 | - nsec = timespec_to_ns(ts); | ||
1704 | + nsec = timespec64_to_ns(ts); | ||
1705 | |||
1706 | spin_lock_irqsave(&pdata->tstamp_lock, flags); | ||
1707 | |||
1708 | @@ -239,7 +234,7 @@ void xgbe_ptp_register(struct xgbe_prv_data *pdata) | ||
1709 | snprintf(info->name, sizeof(info->name), "%s", | ||
1710 | netdev_name(pdata->netdev)); | ||
1711 | info->owner = THIS_MODULE; | ||
1712 | - info->max_adj = clk_get_rate(pdata->ptpclk); | ||
1713 | + info->max_adj = pdata->ptpclk_rate; | ||
1714 | info->adjfreq = xgbe_adjfreq; | ||
1715 | info->adjtime = xgbe_adjtime; | ||
1716 | info->gettime = xgbe_gettime; | ||
1717 | @@ -260,7 +255,7 @@ void xgbe_ptp_register(struct xgbe_prv_data *pdata) | ||
1718 | */ | ||
1719 | dividend = 50000000; | ||
1720 | dividend <<= 32; | ||
1721 | - pdata->tstamp_addend = div_u64(dividend, clk_get_rate(pdata->ptpclk)); | ||
1722 | + pdata->tstamp_addend = div_u64(dividend, pdata->ptpclk_rate); | ||
1723 | |||
1724 | /* Setup the timecounter */ | ||
1725 | cc->read = xgbe_cc_read; | ||
1726 | diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h | ||
1727 | index f9ec762..2ef3ffb 100644 | ||
1728 | --- a/drivers/net/ethernet/amd/xgbe/xgbe.h | ||
1729 | +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h | ||
1730 | @@ -182,10 +182,18 @@ | ||
1731 | #define XGBE_PHY_NAME "amd_xgbe_phy" | ||
1732 | #define XGBE_PRTAD 0 | ||
1733 | |||
1734 | +/* Common property names */ | ||
1735 | +#define XGBE_MAC_ADDR_PROPERTY "mac-address" | ||
1736 | +#define XGBE_PHY_MODE_PROPERTY "phy-mode" | ||
1737 | +#define XGBE_DMA_IRQS_PROPERTY "amd,per-channel-interrupt" | ||
1738 | + | ||
1739 | /* Device-tree clock names */ | ||
1740 | #define XGBE_DMA_CLOCK "dma_clk" | ||
1741 | #define XGBE_PTP_CLOCK "ptp_clk" | ||
1742 | -#define XGBE_DMA_IRQS "amd,per-channel-interrupt" | ||
1743 | + | ||
1744 | +/* ACPI property names */ | ||
1745 | +#define XGBE_ACPI_DMA_FREQ "amd,dma-freq" | ||
1746 | +#define XGBE_ACPI_PTP_FREQ "amd,ptp-freq" | ||
1747 | |||
1748 | /* Timestamp support - values based on 50MHz PTP clock | ||
1749 | * 50MHz => 20 nsec | ||
1750 | @@ -214,7 +222,7 @@ | ||
1751 | ((_idx) & ((_ring)->rdesc_count - 1))) | ||
1752 | |||
1753 | /* Default coalescing parameters */ | ||
1754 | -#define XGMAC_INIT_DMA_TX_USECS 50 | ||
1755 | +#define XGMAC_INIT_DMA_TX_USECS 1000 | ||
1756 | #define XGMAC_INIT_DMA_TX_FRAMES 25 | ||
1757 | |||
1758 | #define XGMAC_MAX_DMA_RIWT 0xff | ||
1759 | @@ -317,8 +325,6 @@ struct xgbe_ring_data { | ||
1760 | struct xgbe_tx_ring_data tx; /* Tx-related data */ | ||
1761 | struct xgbe_rx_ring_data rx; /* Rx-related data */ | ||
1762 | |||
1763 | - unsigned int interrupt; /* Interrupt indicator */ | ||
1764 | - | ||
1765 | unsigned int mapped_as_page; | ||
1766 | |||
1767 | /* Incomplete receive save location. If the budget is exhausted | ||
1768 | @@ -361,8 +367,7 @@ struct xgbe_ring { | ||
1769 | * cur - Tx: index of descriptor to be used for current transfer | ||
1770 | * Rx: index of descriptor to check for packet availability | ||
1771 | * dirty - Tx: index of descriptor to check for transfer complete | ||
1772 | - * Rx: count of descriptors in which a packet has been received | ||
1773 | - * (used with skb_realloc_index to refresh the ring) | ||
1774 | + * Rx: index of descriptor to check for buffer reallocation | ||
1775 | */ | ||
1776 | unsigned int cur; | ||
1777 | unsigned int dirty; | ||
1778 | @@ -377,11 +382,6 @@ struct xgbe_ring { | ||
1779 | unsigned short cur_mss; | ||
1780 | unsigned short cur_vlan_ctag; | ||
1781 | } tx; | ||
1782 | - | ||
1783 | - struct { | ||
1784 | - unsigned int realloc_index; | ||
1785 | - unsigned int realloc_threshold; | ||
1786 | - } rx; | ||
1787 | }; | ||
1788 | } ____cacheline_aligned; | ||
1789 | |||
1790 | @@ -408,7 +408,7 @@ struct xgbe_channel { | ||
1791 | unsigned int saved_ier; | ||
1792 | |||
1793 | unsigned int tx_timer_active; | ||
1794 | - struct hrtimer tx_timer; | ||
1795 | + struct timer_list tx_timer; | ||
1796 | |||
1797 | struct xgbe_ring *tx_ring; | ||
1798 | struct xgbe_ring *rx_ring; | ||
1799 | @@ -495,10 +495,8 @@ struct xgbe_mmc_stats { | ||
1800 | struct xgbe_hw_if { | ||
1801 | int (*tx_complete)(struct xgbe_ring_desc *); | ||
1802 | |||
1803 | - int (*set_promiscuous_mode)(struct xgbe_prv_data *, unsigned int); | ||
1804 | - int (*set_all_multicast_mode)(struct xgbe_prv_data *, unsigned int); | ||
1805 | - int (*add_mac_addresses)(struct xgbe_prv_data *); | ||
1806 | int (*set_mac_address)(struct xgbe_prv_data *, u8 *addr); | ||
1807 | + int (*config_rx_mode)(struct xgbe_prv_data *); | ||
1808 | |||
1809 | int (*enable_rx_csum)(struct xgbe_prv_data *); | ||
1810 | int (*disable_rx_csum)(struct xgbe_prv_data *); | ||
1811 | @@ -534,8 +532,9 @@ struct xgbe_hw_if { | ||
1812 | int (*dev_read)(struct xgbe_channel *); | ||
1813 | void (*tx_desc_init)(struct xgbe_channel *); | ||
1814 | void (*rx_desc_init)(struct xgbe_channel *); | ||
1815 | - void (*rx_desc_reset)(struct xgbe_ring_data *); | ||
1816 | void (*tx_desc_reset)(struct xgbe_ring_data *); | ||
1817 | + void (*rx_desc_reset)(struct xgbe_prv_data *, struct xgbe_ring_data *, | ||
1818 | + unsigned int); | ||
1819 | int (*is_last_desc)(struct xgbe_ring_desc *); | ||
1820 | int (*is_context_desc)(struct xgbe_ring_desc *); | ||
1821 | void (*tx_start_xmit)(struct xgbe_channel *, struct xgbe_ring *); | ||
1822 | @@ -596,7 +595,8 @@ struct xgbe_desc_if { | ||
1823 | int (*alloc_ring_resources)(struct xgbe_prv_data *); | ||
1824 | void (*free_ring_resources)(struct xgbe_prv_data *); | ||
1825 | int (*map_tx_skb)(struct xgbe_channel *, struct sk_buff *); | ||
1826 | - void (*realloc_rx_buffer)(struct xgbe_channel *); | ||
1827 | + int (*map_rx_buffer)(struct xgbe_prv_data *, struct xgbe_ring *, | ||
1828 | + struct xgbe_ring_data *); | ||
1829 | void (*unmap_rdata)(struct xgbe_prv_data *, struct xgbe_ring_data *); | ||
1830 | void (*wrapper_tx_desc_init)(struct xgbe_prv_data *); | ||
1831 | void (*wrapper_rx_desc_init)(struct xgbe_prv_data *); | ||
1832 | @@ -617,7 +617,7 @@ struct xgbe_hw_features { | ||
1833 | unsigned int mgk; /* PMT magic packet */ | ||
1834 | unsigned int mmc; /* RMON module */ | ||
1835 | unsigned int aoe; /* ARP Offload */ | ||
1836 | - unsigned int ts; /* IEEE 1588-2008 Adavanced Timestamp */ | ||
1837 | + unsigned int ts; /* IEEE 1588-2008 Advanced Timestamp */ | ||
1838 | unsigned int eee; /* Energy Efficient Ethernet */ | ||
1839 | unsigned int tx_coe; /* Tx Checksum Offload */ | ||
1840 | unsigned int rx_coe; /* Rx Checksum Offload */ | ||
1841 | @@ -629,6 +629,7 @@ struct xgbe_hw_features { | ||
1842 | unsigned int rx_fifo_size; /* MTL Receive FIFO Size */ | ||
1843 | unsigned int tx_fifo_size; /* MTL Transmit FIFO Size */ | ||
1844 | unsigned int adv_ts_hi; /* Advance Timestamping High Word */ | ||
1845 | + unsigned int dma_width; /* DMA width */ | ||
1846 | unsigned int dcb; /* DCB Feature */ | ||
1847 | unsigned int sph; /* Split Header Feature */ | ||
1848 | unsigned int tso; /* TCP Segmentation Offload */ | ||
1849 | @@ -650,8 +651,12 @@ struct xgbe_hw_features { | ||
1850 | struct xgbe_prv_data { | ||
1851 | struct net_device *netdev; | ||
1852 | struct platform_device *pdev; | ||
1853 | + struct acpi_device *adev; | ||
1854 | struct device *dev; | ||
1855 | |||
1856 | + /* ACPI or DT flag */ | ||
1857 | + unsigned int use_acpi; | ||
1858 | + | ||
1859 | /* XGMAC/XPCS related mmio registers */ | ||
1860 | void __iomem *xgmac_regs; /* XGMAC CSRs */ | ||
1861 | void __iomem *xpcs_regs; /* XPCS MMD registers */ | ||
1862 | @@ -672,6 +677,7 @@ struct xgbe_prv_data { | ||
1863 | struct xgbe_desc_if desc_if; | ||
1864 | |||
1865 | /* AXI DMA settings */ | ||
1866 | + unsigned int coherent; | ||
1867 | unsigned int axdomain; | ||
1868 | unsigned int arcache; | ||
1869 | unsigned int awcache; | ||
1870 | @@ -707,6 +713,7 @@ struct xgbe_prv_data { | ||
1871 | |||
1872 | /* Rx coalescing settings */ | ||
1873 | unsigned int rx_riwt; | ||
1874 | + unsigned int rx_usecs; | ||
1875 | unsigned int rx_frames; | ||
1876 | |||
1877 | /* Current Rx buffer size */ | ||
1878 | @@ -739,6 +746,7 @@ struct xgbe_prv_data { | ||
1879 | unsigned int phy_rx_pause; | ||
1880 | |||
1881 | /* Netdev related settings */ | ||
1882 | + unsigned char mac_addr[ETH_ALEN]; | ||
1883 | netdev_features_t netdev_features; | ||
1884 | struct napi_struct napi; | ||
1885 | struct xgbe_mmc_stats mmc_stats; | ||
1886 | @@ -748,7 +756,9 @@ struct xgbe_prv_data { | ||
1887 | |||
1888 | /* Device clocks */ | ||
1889 | struct clk *sysclk; | ||
1890 | + unsigned long sysclk_rate; | ||
1891 | struct clk *ptpclk; | ||
1892 | + unsigned long ptpclk_rate; | ||
1893 | |||
1894 | /* Timestamp support */ | ||
1895 | spinlock_t tstamp_lock; | ||
1896 | diff --git a/drivers/net/phy/amd-xgbe-phy.c b/drivers/net/phy/amd-xgbe-phy.c | ||
1897 | index 903dc3d..34a75cb 100644 | ||
1898 | --- a/drivers/net/phy/amd-xgbe-phy.c | ||
1899 | +++ b/drivers/net/phy/amd-xgbe-phy.c | ||
1900 | @@ -60,6 +60,7 @@ | ||
1901 | #include <linux/interrupt.h> | ||
1902 | #include <linux/init.h> | ||
1903 | #include <linux/delay.h> | ||
1904 | +#include <linux/workqueue.h> | ||
1905 | #include <linux/netdevice.h> | ||
1906 | #include <linux/etherdevice.h> | ||
1907 | #include <linux/skbuff.h> | ||
1908 | @@ -74,6 +75,10 @@ | ||
1909 | #include <linux/of_platform.h> | ||
1910 | #include <linux/of_device.h> | ||
1911 | #include <linux/uaccess.h> | ||
1912 | +#include <linux/bitops.h> | ||
1913 | +#include <linux/property.h> | ||
1914 | +#include <linux/acpi.h> | ||
1915 | +#include <linux/jiffies.h> | ||
1916 | |||
1917 | MODULE_AUTHOR("Tom Lendacky <thomas.lendacky@amd.com>"); | ||
1918 | MODULE_LICENSE("Dual BSD/GPL"); | ||
1919 | @@ -84,22 +89,47 @@ MODULE_DESCRIPTION("AMD 10GbE (amd-xgbe) PHY driver"); | ||
1920 | #define XGBE_PHY_MASK 0xfffffff0 | ||
1921 | |||
1922 | #define XGBE_PHY_SPEEDSET_PROPERTY "amd,speed-set" | ||
1923 | +#define XGBE_PHY_BLWC_PROPERTY "amd,serdes-blwc" | ||
1924 | +#define XGBE_PHY_CDR_RATE_PROPERTY "amd,serdes-cdr-rate" | ||
1925 | +#define XGBE_PHY_PQ_SKEW_PROPERTY "amd,serdes-pq-skew" | ||
1926 | +#define XGBE_PHY_TX_AMP_PROPERTY "amd,serdes-tx-amp" | ||
1927 | +#define XGBE_PHY_DFE_CFG_PROPERTY "amd,serdes-dfe-tap-config" | ||
1928 | +#define XGBE_PHY_DFE_ENA_PROPERTY "amd,serdes-dfe-tap-enable" | ||
1929 | + | ||
1930 | +#define XGBE_PHY_SPEEDS 3 | ||
1931 | +#define XGBE_PHY_SPEED_1000 0 | ||
1932 | +#define XGBE_PHY_SPEED_2500 1 | ||
1933 | +#define XGBE_PHY_SPEED_10000 2 | ||
1934 | + | ||
1935 | +#define XGBE_AN_MS_TIMEOUT 500 | ||
1936 | |||
1937 | #define XGBE_AN_INT_CMPLT 0x01 | ||
1938 | #define XGBE_AN_INC_LINK 0x02 | ||
1939 | #define XGBE_AN_PG_RCV 0x04 | ||
1940 | +#define XGBE_AN_INT_MASK 0x07 | ||
1941 | |||
1942 | #define XNP_MCF_NULL_MESSAGE 0x001 | ||
1943 | -#define XNP_ACK_PROCESSED (1 << 12) | ||
1944 | -#define XNP_MP_FORMATTED (1 << 13) | ||
1945 | -#define XNP_NP_EXCHANGE (1 << 15) | ||
1946 | +#define XNP_ACK_PROCESSED BIT(12) | ||
1947 | +#define XNP_MP_FORMATTED BIT(13) | ||
1948 | +#define XNP_NP_EXCHANGE BIT(15) | ||
1949 | |||
1950 | #define XGBE_PHY_RATECHANGE_COUNT 500 | ||
1951 | |||
1952 | +#define XGBE_PHY_KR_TRAINING_START 0x01 | ||
1953 | +#define XGBE_PHY_KR_TRAINING_ENABLE 0x02 | ||
1954 | + | ||
1955 | +#define XGBE_PHY_FEC_ENABLE 0x01 | ||
1956 | +#define XGBE_PHY_FEC_FORWARD 0x02 | ||
1957 | +#define XGBE_PHY_FEC_MASK 0x03 | ||
1958 | + | ||
1959 | #ifndef MDIO_PMA_10GBR_PMD_CTRL | ||
1960 | #define MDIO_PMA_10GBR_PMD_CTRL 0x0096 | ||
1961 | #endif | ||
1962 | |||
1963 | +#ifndef MDIO_PMA_10GBR_FEC_ABILITY | ||
1964 | +#define MDIO_PMA_10GBR_FEC_ABILITY 0x00aa | ||
1965 | +#endif | ||
1966 | + | ||
1967 | #ifndef MDIO_PMA_10GBR_FEC_CTRL | ||
1968 | #define MDIO_PMA_10GBR_FEC_CTRL 0x00ab | ||
1969 | #endif | ||
1970 | @@ -108,6 +138,10 @@ MODULE_DESCRIPTION("AMD 10GbE (amd-xgbe) PHY driver"); | ||
1971 | #define MDIO_AN_XNP 0x0016 | ||
1972 | #endif | ||
1973 | |||
1974 | +#ifndef MDIO_AN_LPX | ||
1975 | +#define MDIO_AN_LPX 0x0019 | ||
1976 | +#endif | ||
1977 | + | ||
1978 | #ifndef MDIO_AN_INTMASK | ||
1979 | #define MDIO_AN_INTMASK 0x8001 | ||
1980 | #endif | ||
1981 | @@ -116,18 +150,10 @@ MODULE_DESCRIPTION("AMD 10GbE (amd-xgbe) PHY driver"); | ||
1982 | #define MDIO_AN_INT 0x8002 | ||
1983 | #endif | ||
1984 | |||
1985 | -#ifndef MDIO_AN_KR_CTRL | ||
1986 | -#define MDIO_AN_KR_CTRL 0x8003 | ||
1987 | -#endif | ||
1988 | - | ||
1989 | #ifndef MDIO_CTRL1_SPEED1G | ||
1990 | #define MDIO_CTRL1_SPEED1G (MDIO_CTRL1_SPEED10G & ~BMCR_SPEED100) | ||
1991 | #endif | ||
1992 | |||
1993 | -#ifndef MDIO_KR_CTRL_PDETECT | ||
1994 | -#define MDIO_KR_CTRL_PDETECT 0x01 | ||
1995 | -#endif | ||
1996 | - | ||
1997 | /* SerDes integration register offsets */ | ||
1998 | #define SIR0_KR_RT_1 0x002c | ||
1999 | #define SIR0_STATUS 0x0040 | ||
2000 | @@ -140,10 +166,10 @@ MODULE_DESCRIPTION("AMD 10GbE (amd-xgbe) PHY driver"); | ||
2001 | #define SIR0_STATUS_RX_READY_WIDTH 1 | ||
2002 | #define SIR0_STATUS_TX_READY_INDEX 8 | ||
2003 | #define SIR0_STATUS_TX_READY_WIDTH 1 | ||
2004 | +#define SIR1_SPEED_CDR_RATE_INDEX 12 | ||
2005 | +#define SIR1_SPEED_CDR_RATE_WIDTH 4 | ||
2006 | #define SIR1_SPEED_DATARATE_INDEX 4 | ||
2007 | #define SIR1_SPEED_DATARATE_WIDTH 2 | ||
2008 | -#define SIR1_SPEED_PI_SPD_SEL_INDEX 12 | ||
2009 | -#define SIR1_SPEED_PI_SPD_SEL_WIDTH 4 | ||
2010 | #define SIR1_SPEED_PLLSEL_INDEX 3 | ||
2011 | #define SIR1_SPEED_PLLSEL_WIDTH 1 | ||
2012 | #define SIR1_SPEED_RATECHANGE_INDEX 6 | ||
2013 | @@ -153,42 +179,52 @@ MODULE_DESCRIPTION("AMD 10GbE (amd-xgbe) PHY driver"); | ||
2014 | #define SIR1_SPEED_WORDMODE_INDEX 0 | ||
2015 | #define SIR1_SPEED_WORDMODE_WIDTH 3 | ||
2016 | |||
2017 | +#define SPEED_10000_BLWC 0 | ||
2018 | #define SPEED_10000_CDR 0x7 | ||
2019 | #define SPEED_10000_PLL 0x1 | ||
2020 | +#define SPEED_10000_PQ 0x12 | ||
2021 | #define SPEED_10000_RATE 0x0 | ||
2022 | #define SPEED_10000_TXAMP 0xa | ||
2023 | #define SPEED_10000_WORD 0x7 | ||
2024 | +#define SPEED_10000_DFE_TAP_CONFIG 0x1 | ||
2025 | +#define SPEED_10000_DFE_TAP_ENABLE 0x7f | ||
2026 | |||
2027 | +#define SPEED_2500_BLWC 1 | ||
2028 | #define SPEED_2500_CDR 0x2 | ||
2029 | #define SPEED_2500_PLL 0x0 | ||
2030 | +#define SPEED_2500_PQ 0xa | ||
2031 | #define SPEED_2500_RATE 0x1 | ||
2032 | #define SPEED_2500_TXAMP 0xf | ||
2033 | #define SPEED_2500_WORD 0x1 | ||
2034 | +#define SPEED_2500_DFE_TAP_CONFIG 0x3 | ||
2035 | +#define SPEED_2500_DFE_TAP_ENABLE 0x0 | ||
2036 | |||
2037 | +#define SPEED_1000_BLWC 1 | ||
2038 | #define SPEED_1000_CDR 0x2 | ||
2039 | #define SPEED_1000_PLL 0x0 | ||
2040 | +#define SPEED_1000_PQ 0xa | ||
2041 | #define SPEED_1000_RATE 0x3 | ||
2042 | #define SPEED_1000_TXAMP 0xf | ||
2043 | #define SPEED_1000_WORD 0x1 | ||
2044 | +#define SPEED_1000_DFE_TAP_CONFIG 0x3 | ||
2045 | +#define SPEED_1000_DFE_TAP_ENABLE 0x0 | ||
2046 | |||
2047 | /* SerDes RxTx register offsets */ | ||
2048 | +#define RXTX_REG6 0x0018 | ||
2049 | #define RXTX_REG20 0x0050 | ||
2050 | +#define RXTX_REG22 0x0058 | ||
2051 | #define RXTX_REG114 0x01c8 | ||
2052 | +#define RXTX_REG129 0x0204 | ||
2053 | |||
2054 | /* SerDes RxTx register entry bit positions and sizes */ | ||
2055 | +#define RXTX_REG6_RESETB_RXD_INDEX 8 | ||
2056 | +#define RXTX_REG6_RESETB_RXD_WIDTH 1 | ||
2057 | #define RXTX_REG20_BLWC_ENA_INDEX 2 | ||
2058 | #define RXTX_REG20_BLWC_ENA_WIDTH 1 | ||
2059 | #define RXTX_REG114_PQ_REG_INDEX 9 | ||
2060 | #define RXTX_REG114_PQ_REG_WIDTH 7 | ||
2061 | - | ||
2062 | -#define RXTX_10000_BLWC 0 | ||
2063 | -#define RXTX_10000_PQ 0x1e | ||
2064 | - | ||
2065 | -#define RXTX_2500_BLWC 1 | ||
2066 | -#define RXTX_2500_PQ 0xa | ||
2067 | - | ||
2068 | -#define RXTX_1000_BLWC 1 | ||
2069 | -#define RXTX_1000_PQ 0xa | ||
2070 | +#define RXTX_REG129_RXDFE_CONFIG_INDEX 14 | ||
2071 | +#define RXTX_REG129_RXDFE_CONFIG_WIDTH 2 | ||
2072 | |||
2073 | /* Bit setting and getting macros | ||
2074 | * The get macro will extract the current bit field value from within | ||
2075 | @@ -291,23 +327,56 @@ do { \ | ||
2076 | XRXTX_IOWRITE((_priv), _reg, reg_val); \ | ||
2077 | } while (0) | ||
2078 | |||
2079 | +static const u32 amd_xgbe_phy_serdes_blwc[] = { | ||
2080 | + SPEED_1000_BLWC, | ||
2081 | + SPEED_2500_BLWC, | ||
2082 | + SPEED_10000_BLWC, | ||
2083 | +}; | ||
2084 | + | ||
2085 | +static const u32 amd_xgbe_phy_serdes_cdr_rate[] = { | ||
2086 | + SPEED_1000_CDR, | ||
2087 | + SPEED_2500_CDR, | ||
2088 | + SPEED_10000_CDR, | ||
2089 | +}; | ||
2090 | + | ||
2091 | +static const u32 amd_xgbe_phy_serdes_pq_skew[] = { | ||
2092 | + SPEED_1000_PQ, | ||
2093 | + SPEED_2500_PQ, | ||
2094 | + SPEED_10000_PQ, | ||
2095 | +}; | ||
2096 | + | ||
2097 | +static const u32 amd_xgbe_phy_serdes_tx_amp[] = { | ||
2098 | + SPEED_1000_TXAMP, | ||
2099 | + SPEED_2500_TXAMP, | ||
2100 | + SPEED_10000_TXAMP, | ||
2101 | +}; | ||
2102 | + | ||
2103 | +static const u32 amd_xgbe_phy_serdes_dfe_tap_cfg[] = { | ||
2104 | + SPEED_1000_DFE_TAP_CONFIG, | ||
2105 | + SPEED_2500_DFE_TAP_CONFIG, | ||
2106 | + SPEED_10000_DFE_TAP_CONFIG, | ||
2107 | +}; | ||
2108 | + | ||
2109 | +static const u32 amd_xgbe_phy_serdes_dfe_tap_ena[] = { | ||
2110 | + SPEED_1000_DFE_TAP_ENABLE, | ||
2111 | + SPEED_2500_DFE_TAP_ENABLE, | ||
2112 | + SPEED_10000_DFE_TAP_ENABLE, | ||
2113 | +}; | ||
2114 | + | ||
2115 | enum amd_xgbe_phy_an { | ||
2116 | AMD_XGBE_AN_READY = 0, | ||
2117 | - AMD_XGBE_AN_START, | ||
2118 | - AMD_XGBE_AN_EVENT, | ||
2119 | AMD_XGBE_AN_PAGE_RECEIVED, | ||
2120 | AMD_XGBE_AN_INCOMPAT_LINK, | ||
2121 | AMD_XGBE_AN_COMPLETE, | ||
2122 | AMD_XGBE_AN_NO_LINK, | ||
2123 | - AMD_XGBE_AN_EXIT, | ||
2124 | AMD_XGBE_AN_ERROR, | ||
2125 | }; | ||
2126 | |||
2127 | enum amd_xgbe_phy_rx { | ||
2128 | - AMD_XGBE_RX_READY = 0, | ||
2129 | - AMD_XGBE_RX_BPA, | ||
2130 | + AMD_XGBE_RX_BPA = 0, | ||
2131 | AMD_XGBE_RX_XNP, | ||
2132 | AMD_XGBE_RX_COMPLETE, | ||
2133 | + AMD_XGBE_RX_ERROR, | ||
2134 | }; | ||
2135 | |||
2136 | enum amd_xgbe_phy_mode { | ||
2137 | @@ -316,12 +385,13 @@ enum amd_xgbe_phy_mode { | ||
2138 | }; | ||
2139 | |||
2140 | enum amd_xgbe_phy_speedset { | ||
2141 | - AMD_XGBE_PHY_SPEEDSET_1000_10000, | ||
2142 | + AMD_XGBE_PHY_SPEEDSET_1000_10000 = 0, | ||
2143 | AMD_XGBE_PHY_SPEEDSET_2500_10000, | ||
2144 | }; | ||
2145 | |||
2146 | struct amd_xgbe_phy_priv { | ||
2147 | struct platform_device *pdev; | ||
2148 | + struct acpi_device *adev; | ||
2149 | struct device *dev; | ||
2150 | |||
2151 | struct phy_device *phydev; | ||
2152 | @@ -336,10 +406,26 @@ struct amd_xgbe_phy_priv { | ||
2153 | void __iomem *sir0_regs; /* SerDes integration registers (1/2) */ | ||
2154 | void __iomem *sir1_regs; /* SerDes integration registers (2/2) */ | ||
2155 | |||
2156 | - /* Maintain link status for re-starting auto-negotiation */ | ||
2157 | - unsigned int link; | ||
2158 | + int an_irq; | ||
2159 | + char an_irq_name[IFNAMSIZ + 32]; | ||
2160 | + struct work_struct an_irq_work; | ||
2161 | + unsigned int an_irq_allocated; | ||
2162 | + | ||
2163 | unsigned int speed_set; | ||
2164 | |||
2165 | + /* SerDes UEFI configurable settings. | ||
2166 | + * Switching between modes/speeds requires new values for some | ||
2167 | + * SerDes settings. The values can be supplied as device | ||
2168 | + * properties in array format. The first array entry is for | ||
2169 | + * 1GbE, second for 2.5GbE and third for 10GbE | ||
2170 | + */ | ||
2171 | + u32 serdes_blwc[XGBE_PHY_SPEEDS]; | ||
2172 | + u32 serdes_cdr_rate[XGBE_PHY_SPEEDS]; | ||
2173 | + u32 serdes_pq_skew[XGBE_PHY_SPEEDS]; | ||
2174 | + u32 serdes_tx_amp[XGBE_PHY_SPEEDS]; | ||
2175 | + u32 serdes_dfe_tap_cfg[XGBE_PHY_SPEEDS]; | ||
2176 | + u32 serdes_dfe_tap_ena[XGBE_PHY_SPEEDS]; | ||
2177 | + | ||
2178 | /* Auto-negotiation state machine support */ | ||
2179 | struct mutex an_mutex; | ||
2180 | enum amd_xgbe_phy_an an_result; | ||
2181 | @@ -348,7 +434,12 @@ struct amd_xgbe_phy_priv { | ||
2182 | enum amd_xgbe_phy_rx kx_state; | ||
2183 | struct work_struct an_work; | ||
2184 | struct workqueue_struct *an_workqueue; | ||
2185 | + unsigned int an_supported; | ||
2186 | unsigned int parallel_detect; | ||
2187 | + unsigned int fec_ability; | ||
2188 | + unsigned long an_start; | ||
2189 | + | ||
2190 | + unsigned int lpm_ctrl; /* CTRL1 for resume */ | ||
2191 | }; | ||
2192 | |||
2193 | static int amd_xgbe_an_enable_kr_training(struct phy_device *phydev) | ||
2194 | @@ -359,7 +450,7 @@ static int amd_xgbe_an_enable_kr_training(struct phy_device *phydev) | ||
2195 | if (ret < 0) | ||
2196 | return ret; | ||
2197 | |||
2198 | - ret |= 0x02; | ||
2199 | + ret |= XGBE_PHY_KR_TRAINING_ENABLE; | ||
2200 | phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, ret); | ||
2201 | |||
2202 | return 0; | ||
2203 | @@ -373,7 +464,7 @@ static int amd_xgbe_an_disable_kr_training(struct phy_device *phydev) | ||
2204 | if (ret < 0) | ||
2205 | return ret; | ||
2206 | |||
2207 | - ret &= ~0x02; | ||
2208 | + ret &= ~XGBE_PHY_KR_TRAINING_ENABLE; | ||
2209 | phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, ret); | ||
2210 | |||
2211 | return 0; | ||
2212 | @@ -423,11 +514,16 @@ static void amd_xgbe_phy_serdes_complete_ratechange(struct phy_device *phydev) | ||
2213 | status = XSIR0_IOREAD(priv, SIR0_STATUS); | ||
2214 | if (XSIR_GET_BITS(status, SIR0_STATUS, RX_READY) && | ||
2215 | XSIR_GET_BITS(status, SIR0_STATUS, TX_READY)) | ||
2216 | - return; | ||
2217 | + goto rx_reset; | ||
2218 | } | ||
2219 | |||
2220 | netdev_dbg(phydev->attached_dev, "SerDes rx/tx not ready (%#hx)\n", | ||
2221 | status); | ||
2222 | + | ||
2223 | +rx_reset: | ||
2224 | + /* Perform Rx reset for the DFE changes */ | ||
2225 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG6, RESETB_RXD, 0); | ||
2226 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG6, RESETB_RXD, 1); | ||
2227 | } | ||
2228 | |||
2229 | static int amd_xgbe_phy_xgmii_mode(struct phy_device *phydev) | ||
2230 | @@ -466,12 +562,20 @@ static int amd_xgbe_phy_xgmii_mode(struct phy_device *phydev) | ||
2231 | |||
2232 | XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, DATARATE, SPEED_10000_RATE); | ||
2233 | XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, WORDMODE, SPEED_10000_WORD); | ||
2234 | - XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, TXAMP, SPEED_10000_TXAMP); | ||
2235 | XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, PLLSEL, SPEED_10000_PLL); | ||
2236 | - XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, PI_SPD_SEL, SPEED_10000_CDR); | ||
2237 | |||
2238 | - XRXTX_IOWRITE_BITS(priv, RXTX_REG20, BLWC_ENA, RXTX_10000_BLWC); | ||
2239 | - XRXTX_IOWRITE_BITS(priv, RXTX_REG114, PQ_REG, RXTX_10000_PQ); | ||
2240 | + XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, CDR_RATE, | ||
2241 | + priv->serdes_cdr_rate[XGBE_PHY_SPEED_10000]); | ||
2242 | + XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, TXAMP, | ||
2243 | + priv->serdes_tx_amp[XGBE_PHY_SPEED_10000]); | ||
2244 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG20, BLWC_ENA, | ||
2245 | + priv->serdes_blwc[XGBE_PHY_SPEED_10000]); | ||
2246 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG114, PQ_REG, | ||
2247 | + priv->serdes_pq_skew[XGBE_PHY_SPEED_10000]); | ||
2248 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG129, RXDFE_CONFIG, | ||
2249 | + priv->serdes_dfe_tap_cfg[XGBE_PHY_SPEED_10000]); | ||
2250 | + XRXTX_IOWRITE(priv, RXTX_REG22, | ||
2251 | + priv->serdes_dfe_tap_ena[XGBE_PHY_SPEED_10000]); | ||
2252 | |||
2253 | amd_xgbe_phy_serdes_complete_ratechange(phydev); | ||
2254 | |||
2255 | @@ -514,12 +618,20 @@ static int amd_xgbe_phy_gmii_2500_mode(struct phy_device *phydev) | ||
2256 | |||
2257 | XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, DATARATE, SPEED_2500_RATE); | ||
2258 | XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, WORDMODE, SPEED_2500_WORD); | ||
2259 | - XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, TXAMP, SPEED_2500_TXAMP); | ||
2260 | XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, PLLSEL, SPEED_2500_PLL); | ||
2261 | - XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, PI_SPD_SEL, SPEED_2500_CDR); | ||
2262 | |||
2263 | - XRXTX_IOWRITE_BITS(priv, RXTX_REG20, BLWC_ENA, RXTX_2500_BLWC); | ||
2264 | - XRXTX_IOWRITE_BITS(priv, RXTX_REG114, PQ_REG, RXTX_2500_PQ); | ||
2265 | + XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, CDR_RATE, | ||
2266 | + priv->serdes_cdr_rate[XGBE_PHY_SPEED_2500]); | ||
2267 | + XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, TXAMP, | ||
2268 | + priv->serdes_tx_amp[XGBE_PHY_SPEED_2500]); | ||
2269 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG20, BLWC_ENA, | ||
2270 | + priv->serdes_blwc[XGBE_PHY_SPEED_2500]); | ||
2271 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG114, PQ_REG, | ||
2272 | + priv->serdes_pq_skew[XGBE_PHY_SPEED_2500]); | ||
2273 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG129, RXDFE_CONFIG, | ||
2274 | + priv->serdes_dfe_tap_cfg[XGBE_PHY_SPEED_2500]); | ||
2275 | + XRXTX_IOWRITE(priv, RXTX_REG22, | ||
2276 | + priv->serdes_dfe_tap_ena[XGBE_PHY_SPEED_2500]); | ||
2277 | |||
2278 | amd_xgbe_phy_serdes_complete_ratechange(phydev); | ||
2279 | |||
2280 | @@ -562,12 +674,20 @@ static int amd_xgbe_phy_gmii_mode(struct phy_device *phydev) | ||
2281 | |||
2282 | XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, DATARATE, SPEED_1000_RATE); | ||
2283 | XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, WORDMODE, SPEED_1000_WORD); | ||
2284 | - XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, TXAMP, SPEED_1000_TXAMP); | ||
2285 | XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, PLLSEL, SPEED_1000_PLL); | ||
2286 | - XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, PI_SPD_SEL, SPEED_1000_CDR); | ||
2287 | |||
2288 | - XRXTX_IOWRITE_BITS(priv, RXTX_REG20, BLWC_ENA, RXTX_1000_BLWC); | ||
2289 | - XRXTX_IOWRITE_BITS(priv, RXTX_REG114, PQ_REG, RXTX_1000_PQ); | ||
2290 | + XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, CDR_RATE, | ||
2291 | + priv->serdes_cdr_rate[XGBE_PHY_SPEED_1000]); | ||
2292 | + XSIR1_IOWRITE_BITS(priv, SIR1_SPEED, TXAMP, | ||
2293 | + priv->serdes_tx_amp[XGBE_PHY_SPEED_1000]); | ||
2294 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG20, BLWC_ENA, | ||
2295 | + priv->serdes_blwc[XGBE_PHY_SPEED_1000]); | ||
2296 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG114, PQ_REG, | ||
2297 | + priv->serdes_pq_skew[XGBE_PHY_SPEED_1000]); | ||
2298 | + XRXTX_IOWRITE_BITS(priv, RXTX_REG129, RXDFE_CONFIG, | ||
2299 | + priv->serdes_dfe_tap_cfg[XGBE_PHY_SPEED_1000]); | ||
2300 | + XRXTX_IOWRITE(priv, RXTX_REG22, | ||
2301 | + priv->serdes_dfe_tap_ena[XGBE_PHY_SPEED_1000]); | ||
2302 | |||
2303 | amd_xgbe_phy_serdes_complete_ratechange(phydev); | ||
2304 | |||
2305 | @@ -635,6 +755,77 @@ static int amd_xgbe_phy_set_mode(struct phy_device *phydev, | ||
2306 | return ret; | ||
2307 | } | ||
2308 | |||
2309 | +static bool amd_xgbe_phy_use_xgmii_mode(struct phy_device *phydev) | ||
2310 | +{ | ||
2311 | + if (phydev->autoneg == AUTONEG_ENABLE) { | ||
2312 | + if (phydev->advertising & ADVERTISED_10000baseKR_Full) | ||
2313 | + return true; | ||
2314 | + } else { | ||
2315 | + if (phydev->speed == SPEED_10000) | ||
2316 | + return true; | ||
2317 | + } | ||
2318 | + | ||
2319 | + return false; | ||
2320 | +} | ||
2321 | + | ||
2322 | +static bool amd_xgbe_phy_use_gmii_2500_mode(struct phy_device *phydev) | ||
2323 | +{ | ||
2324 | + if (phydev->autoneg == AUTONEG_ENABLE) { | ||
2325 | + if (phydev->advertising & ADVERTISED_2500baseX_Full) | ||
2326 | + return true; | ||
2327 | + } else { | ||
2328 | + if (phydev->speed == SPEED_2500) | ||
2329 | + return true; | ||
2330 | + } | ||
2331 | + | ||
2332 | + return false; | ||
2333 | +} | ||
2334 | + | ||
2335 | +static bool amd_xgbe_phy_use_gmii_mode(struct phy_device *phydev) | ||
2336 | +{ | ||
2337 | + if (phydev->autoneg == AUTONEG_ENABLE) { | ||
2338 | + if (phydev->advertising & ADVERTISED_1000baseKX_Full) | ||
2339 | + return true; | ||
2340 | + } else { | ||
2341 | + if (phydev->speed == SPEED_1000) | ||
2342 | + return true; | ||
2343 | + } | ||
2344 | + | ||
2345 | + return false; | ||
2346 | +} | ||
2347 | + | ||
2348 | +static int amd_xgbe_phy_set_an(struct phy_device *phydev, bool enable, | ||
2349 | + bool restart) | ||
2350 | +{ | ||
2351 | + int ret; | ||
2352 | + | ||
2353 | + ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1); | ||
2354 | + if (ret < 0) | ||
2355 | + return ret; | ||
2356 | + | ||
2357 | + ret &= ~MDIO_AN_CTRL1_ENABLE; | ||
2358 | + | ||
2359 | + if (enable) | ||
2360 | + ret |= MDIO_AN_CTRL1_ENABLE; | ||
2361 | + | ||
2362 | + if (restart) | ||
2363 | + ret |= MDIO_AN_CTRL1_RESTART; | ||
2364 | + | ||
2365 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1, ret); | ||
2366 | + | ||
2367 | + return 0; | ||
2368 | +} | ||
2369 | + | ||
2370 | +static int amd_xgbe_phy_restart_an(struct phy_device *phydev) | ||
2371 | +{ | ||
2372 | + return amd_xgbe_phy_set_an(phydev, true, true); | ||
2373 | +} | ||
2374 | + | ||
2375 | +static int amd_xgbe_phy_disable_an(struct phy_device *phydev) | ||
2376 | +{ | ||
2377 | + return amd_xgbe_phy_set_an(phydev, false, false); | ||
2378 | +} | ||
2379 | + | ||
2380 | static enum amd_xgbe_phy_an amd_xgbe_an_tx_training(struct phy_device *phydev, | ||
2381 | enum amd_xgbe_phy_rx *state) | ||
2382 | { | ||
2383 | @@ -645,7 +836,7 @@ static enum amd_xgbe_phy_an amd_xgbe_an_tx_training(struct phy_device *phydev, | ||
2384 | |||
2385 | /* If we're not in KR mode then we're done */ | ||
2386 | if (!amd_xgbe_phy_in_kr_mode(phydev)) | ||
2387 | - return AMD_XGBE_AN_EVENT; | ||
2388 | + return AMD_XGBE_AN_PAGE_RECEIVED; | ||
2389 | |||
2390 | /* Enable/Disable FEC */ | ||
2391 | ad_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2); | ||
2392 | @@ -660,10 +851,9 @@ static enum amd_xgbe_phy_an amd_xgbe_an_tx_training(struct phy_device *phydev, | ||
2393 | if (ret < 0) | ||
2394 | return AMD_XGBE_AN_ERROR; | ||
2395 | |||
2396 | + ret &= ~XGBE_PHY_FEC_MASK; | ||
2397 | if ((ad_reg & 0xc000) && (lp_reg & 0xc000)) | ||
2398 | - ret |= 0x01; | ||
2399 | - else | ||
2400 | - ret &= ~0x01; | ||
2401 | + ret |= priv->fec_ability; | ||
2402 | |||
2403 | phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_FEC_CTRL, ret); | ||
2404 | |||
2405 | @@ -672,14 +862,17 @@ static enum amd_xgbe_phy_an amd_xgbe_an_tx_training(struct phy_device *phydev, | ||
2406 | if (ret < 0) | ||
2407 | return AMD_XGBE_AN_ERROR; | ||
2408 | |||
2409 | - XSIR0_IOWRITE_BITS(priv, SIR0_KR_RT_1, RESET, 1); | ||
2410 | + if (ret & XGBE_PHY_KR_TRAINING_ENABLE) { | ||
2411 | + XSIR0_IOWRITE_BITS(priv, SIR0_KR_RT_1, RESET, 1); | ||
2412 | |||
2413 | - ret |= 0x01; | ||
2414 | - phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, ret); | ||
2415 | + ret |= XGBE_PHY_KR_TRAINING_START; | ||
2416 | + phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, | ||
2417 | + ret); | ||
2418 | |||
2419 | - XSIR0_IOWRITE_BITS(priv, SIR0_KR_RT_1, RESET, 0); | ||
2420 | + XSIR0_IOWRITE_BITS(priv, SIR0_KR_RT_1, RESET, 0); | ||
2421 | + } | ||
2422 | |||
2423 | - return AMD_XGBE_AN_EVENT; | ||
2424 | + return AMD_XGBE_AN_PAGE_RECEIVED; | ||
2425 | } | ||
2426 | |||
2427 | static enum amd_xgbe_phy_an amd_xgbe_an_tx_xnp(struct phy_device *phydev, | ||
2428 | @@ -696,7 +889,7 @@ static enum amd_xgbe_phy_an amd_xgbe_an_tx_xnp(struct phy_device *phydev, | ||
2429 | phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_XNP + 1, 0); | ||
2430 | phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_XNP, msg); | ||
2431 | |||
2432 | - return AMD_XGBE_AN_EVENT; | ||
2433 | + return AMD_XGBE_AN_PAGE_RECEIVED; | ||
2434 | } | ||
2435 | |||
2436 | static enum amd_xgbe_phy_an amd_xgbe_an_rx_bpa(struct phy_device *phydev, | ||
2437 | @@ -735,11 +928,11 @@ static enum amd_xgbe_phy_an amd_xgbe_an_rx_xnp(struct phy_device *phydev, | ||
2438 | int ad_reg, lp_reg; | ||
2439 | |||
2440 | /* Check Extended Next Page support */ | ||
2441 | - ad_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE); | ||
2442 | + ad_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_XNP); | ||
2443 | if (ad_reg < 0) | ||
2444 | return AMD_XGBE_AN_ERROR; | ||
2445 | |||
2446 | - lp_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPA); | ||
2447 | + lp_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_LPX); | ||
2448 | if (lp_reg < 0) | ||
2449 | return AMD_XGBE_AN_ERROR; | ||
2450 | |||
2451 | @@ -748,226 +941,271 @@ static enum amd_xgbe_phy_an amd_xgbe_an_rx_xnp(struct phy_device *phydev, | ||
2452 | amd_xgbe_an_tx_training(phydev, state); | ||
2453 | } | ||
2454 | |||
2455 | -static enum amd_xgbe_phy_an amd_xgbe_an_start(struct phy_device *phydev) | ||
2456 | +static enum amd_xgbe_phy_an amd_xgbe_an_page_received(struct phy_device *phydev) | ||
2457 | { | ||
2458 | struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
2459 | + enum amd_xgbe_phy_rx *state; | ||
2460 | + unsigned long an_timeout; | ||
2461 | int ret; | ||
2462 | |||
2463 | - /* Be sure we aren't looping trying to negotiate */ | ||
2464 | - if (amd_xgbe_phy_in_kr_mode(phydev)) { | ||
2465 | - if (priv->kr_state != AMD_XGBE_RX_READY) | ||
2466 | - return AMD_XGBE_AN_NO_LINK; | ||
2467 | - priv->kr_state = AMD_XGBE_RX_BPA; | ||
2468 | + if (!priv->an_start) { | ||
2469 | + priv->an_start = jiffies; | ||
2470 | } else { | ||
2471 | - if (priv->kx_state != AMD_XGBE_RX_READY) | ||
2472 | - return AMD_XGBE_AN_NO_LINK; | ||
2473 | - priv->kx_state = AMD_XGBE_RX_BPA; | ||
2474 | + an_timeout = priv->an_start + | ||
2475 | + msecs_to_jiffies(XGBE_AN_MS_TIMEOUT); | ||
2476 | + if (time_after(jiffies, an_timeout)) { | ||
2477 | + /* Auto-negotiation timed out, reset state */ | ||
2478 | + priv->kr_state = AMD_XGBE_RX_BPA; | ||
2479 | + priv->kx_state = AMD_XGBE_RX_BPA; | ||
2480 | + | ||
2481 | + priv->an_start = jiffies; | ||
2482 | + } | ||
2483 | } | ||
2484 | |||
2485 | - /* Set up Advertisement register 3 first */ | ||
2486 | - ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2); | ||
2487 | - if (ret < 0) | ||
2488 | - return AMD_XGBE_AN_ERROR; | ||
2489 | - | ||
2490 | - if (phydev->supported & SUPPORTED_10000baseR_FEC) | ||
2491 | - ret |= 0xc000; | ||
2492 | - else | ||
2493 | - ret &= ~0xc000; | ||
2494 | - | ||
2495 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2, ret); | ||
2496 | + state = amd_xgbe_phy_in_kr_mode(phydev) ? &priv->kr_state | ||
2497 | + : &priv->kx_state; | ||
2498 | |||
2499 | - /* Set up Advertisement register 2 next */ | ||
2500 | - ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1); | ||
2501 | - if (ret < 0) | ||
2502 | - return AMD_XGBE_AN_ERROR; | ||
2503 | + switch (*state) { | ||
2504 | + case AMD_XGBE_RX_BPA: | ||
2505 | + ret = amd_xgbe_an_rx_bpa(phydev, state); | ||
2506 | + break; | ||
2507 | |||
2508 | - if (phydev->supported & SUPPORTED_10000baseKR_Full) | ||
2509 | - ret |= 0x80; | ||
2510 | - else | ||
2511 | - ret &= ~0x80; | ||
2512 | + case AMD_XGBE_RX_XNP: | ||
2513 | + ret = amd_xgbe_an_rx_xnp(phydev, state); | ||
2514 | + break; | ||
2515 | |||
2516 | - if ((phydev->supported & SUPPORTED_1000baseKX_Full) || | ||
2517 | - (phydev->supported & SUPPORTED_2500baseX_Full)) | ||
2518 | - ret |= 0x20; | ||
2519 | - else | ||
2520 | - ret &= ~0x20; | ||
2521 | + default: | ||
2522 | + ret = AMD_XGBE_AN_ERROR; | ||
2523 | + } | ||
2524 | |||
2525 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1, ret); | ||
2526 | + return ret; | ||
2527 | +} | ||
2528 | |||
2529 | - /* Set up Advertisement register 1 last */ | ||
2530 | - ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE); | ||
2531 | - if (ret < 0) | ||
2532 | - return AMD_XGBE_AN_ERROR; | ||
2533 | +static enum amd_xgbe_phy_an amd_xgbe_an_incompat_link(struct phy_device *phydev) | ||
2534 | +{ | ||
2535 | + struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
2536 | + int ret; | ||
2537 | |||
2538 | - if (phydev->supported & SUPPORTED_Pause) | ||
2539 | - ret |= 0x400; | ||
2540 | - else | ||
2541 | - ret &= ~0x400; | ||
2542 | + /* Be sure we aren't looping trying to negotiate */ | ||
2543 | + if (amd_xgbe_phy_in_kr_mode(phydev)) { | ||
2544 | + priv->kr_state = AMD_XGBE_RX_ERROR; | ||
2545 | |||
2546 | - if (phydev->supported & SUPPORTED_Asym_Pause) | ||
2547 | - ret |= 0x800; | ||
2548 | - else | ||
2549 | - ret &= ~0x800; | ||
2550 | + if (!(phydev->advertising & SUPPORTED_1000baseKX_Full) && | ||
2551 | + !(phydev->advertising & SUPPORTED_2500baseX_Full)) | ||
2552 | + return AMD_XGBE_AN_NO_LINK; | ||
2553 | |||
2554 | - /* We don't intend to perform XNP */ | ||
2555 | - ret &= ~XNP_NP_EXCHANGE; | ||
2556 | + if (priv->kx_state != AMD_XGBE_RX_BPA) | ||
2557 | + return AMD_XGBE_AN_NO_LINK; | ||
2558 | + } else { | ||
2559 | + priv->kx_state = AMD_XGBE_RX_ERROR; | ||
2560 | |||
2561 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE, ret); | ||
2562 | + if (!(phydev->advertising & SUPPORTED_10000baseKR_Full)) | ||
2563 | + return AMD_XGBE_AN_NO_LINK; | ||
2564 | |||
2565 | - /* Enable and start auto-negotiation */ | ||
2566 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0); | ||
2567 | + if (priv->kr_state != AMD_XGBE_RX_BPA) | ||
2568 | + return AMD_XGBE_AN_NO_LINK; | ||
2569 | + } | ||
2570 | |||
2571 | - ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_KR_CTRL); | ||
2572 | - if (ret < 0) | ||
2573 | + ret = amd_xgbe_phy_disable_an(phydev); | ||
2574 | + if (ret) | ||
2575 | return AMD_XGBE_AN_ERROR; | ||
2576 | |||
2577 | - ret |= MDIO_KR_CTRL_PDETECT; | ||
2578 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_KR_CTRL, ret); | ||
2579 | - | ||
2580 | - ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1); | ||
2581 | - if (ret < 0) | ||
2582 | + ret = amd_xgbe_phy_switch_mode(phydev); | ||
2583 | + if (ret) | ||
2584 | return AMD_XGBE_AN_ERROR; | ||
2585 | |||
2586 | - ret |= MDIO_AN_CTRL1_ENABLE; | ||
2587 | - ret |= MDIO_AN_CTRL1_RESTART; | ||
2588 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1, ret); | ||
2589 | + ret = amd_xgbe_phy_restart_an(phydev); | ||
2590 | + if (ret) | ||
2591 | + return AMD_XGBE_AN_ERROR; | ||
2592 | |||
2593 | - return AMD_XGBE_AN_EVENT; | ||
2594 | + return AMD_XGBE_AN_INCOMPAT_LINK; | ||
2595 | } | ||
2596 | |||
2597 | -static enum amd_xgbe_phy_an amd_xgbe_an_event(struct phy_device *phydev) | ||
2598 | +static irqreturn_t amd_xgbe_an_isr(int irq, void *data) | ||
2599 | { | ||
2600 | - enum amd_xgbe_phy_an new_state; | ||
2601 | - int ret; | ||
2602 | + struct amd_xgbe_phy_priv *priv = (struct amd_xgbe_phy_priv *)data; | ||
2603 | |||
2604 | - ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT); | ||
2605 | - if (ret < 0) | ||
2606 | - return AMD_XGBE_AN_ERROR; | ||
2607 | + /* Interrupt reason must be read and cleared outside of IRQ context */ | ||
2608 | + disable_irq_nosync(priv->an_irq); | ||
2609 | |||
2610 | - new_state = AMD_XGBE_AN_EVENT; | ||
2611 | - if (ret & XGBE_AN_PG_RCV) | ||
2612 | - new_state = AMD_XGBE_AN_PAGE_RECEIVED; | ||
2613 | - else if (ret & XGBE_AN_INC_LINK) | ||
2614 | - new_state = AMD_XGBE_AN_INCOMPAT_LINK; | ||
2615 | - else if (ret & XGBE_AN_INT_CMPLT) | ||
2616 | - new_state = AMD_XGBE_AN_COMPLETE; | ||
2617 | + queue_work(priv->an_workqueue, &priv->an_irq_work); | ||
2618 | |||
2619 | - if (new_state != AMD_XGBE_AN_EVENT) | ||
2620 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0); | ||
2621 | + return IRQ_HANDLED; | ||
2622 | +} | ||
2623 | + | ||
2624 | +static void amd_xgbe_an_irq_work(struct work_struct *work) | ||
2625 | +{ | ||
2626 | + struct amd_xgbe_phy_priv *priv = container_of(work, | ||
2627 | + struct amd_xgbe_phy_priv, | ||
2628 | + an_irq_work); | ||
2629 | |||
2630 | - return new_state; | ||
2631 | + /* Avoid a race between enabling the IRQ and exiting the work by | ||
2632 | + * waiting for the work to finish and then queueing it | ||
2633 | + */ | ||
2634 | + flush_work(&priv->an_work); | ||
2635 | + queue_work(priv->an_workqueue, &priv->an_work); | ||
2636 | } | ||
2637 | |||
2638 | -static enum amd_xgbe_phy_an amd_xgbe_an_page_received(struct phy_device *phydev) | ||
2639 | +static void amd_xgbe_an_state_machine(struct work_struct *work) | ||
2640 | { | ||
2641 | - struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
2642 | - enum amd_xgbe_phy_rx *state; | ||
2643 | - int ret; | ||
2644 | + struct amd_xgbe_phy_priv *priv = container_of(work, | ||
2645 | + struct amd_xgbe_phy_priv, | ||
2646 | + an_work); | ||
2647 | + struct phy_device *phydev = priv->phydev; | ||
2648 | + enum amd_xgbe_phy_an cur_state = priv->an_state; | ||
2649 | + int int_reg, int_mask; | ||
2650 | |||
2651 | - state = amd_xgbe_phy_in_kr_mode(phydev) ? &priv->kr_state | ||
2652 | - : &priv->kx_state; | ||
2653 | + mutex_lock(&priv->an_mutex); | ||
2654 | |||
2655 | - switch (*state) { | ||
2656 | - case AMD_XGBE_RX_BPA: | ||
2657 | - ret = amd_xgbe_an_rx_bpa(phydev, state); | ||
2658 | + /* Read the interrupt */ | ||
2659 | + int_reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT); | ||
2660 | + if (!int_reg) | ||
2661 | + goto out; | ||
2662 | + | ||
2663 | +next_int: | ||
2664 | + if (int_reg < 0) { | ||
2665 | + priv->an_state = AMD_XGBE_AN_ERROR; | ||
2666 | + int_mask = XGBE_AN_INT_MASK; | ||
2667 | + } else if (int_reg & XGBE_AN_PG_RCV) { | ||
2668 | + priv->an_state = AMD_XGBE_AN_PAGE_RECEIVED; | ||
2669 | + int_mask = XGBE_AN_PG_RCV; | ||
2670 | + } else if (int_reg & XGBE_AN_INC_LINK) { | ||
2671 | + priv->an_state = AMD_XGBE_AN_INCOMPAT_LINK; | ||
2672 | + int_mask = XGBE_AN_INC_LINK; | ||
2673 | + } else if (int_reg & XGBE_AN_INT_CMPLT) { | ||
2674 | + priv->an_state = AMD_XGBE_AN_COMPLETE; | ||
2675 | + int_mask = XGBE_AN_INT_CMPLT; | ||
2676 | + } else { | ||
2677 | + priv->an_state = AMD_XGBE_AN_ERROR; | ||
2678 | + int_mask = 0; | ||
2679 | + } | ||
2680 | + | ||
2681 | + /* Clear the interrupt to be processed */ | ||
2682 | + int_reg &= ~int_mask; | ||
2683 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, int_reg); | ||
2684 | + | ||
2685 | + priv->an_result = priv->an_state; | ||
2686 | + | ||
2687 | +again: | ||
2688 | + cur_state = priv->an_state; | ||
2689 | + | ||
2690 | + switch (priv->an_state) { | ||
2691 | + case AMD_XGBE_AN_READY: | ||
2692 | + priv->an_supported = 0; | ||
2693 | break; | ||
2694 | |||
2695 | - case AMD_XGBE_RX_XNP: | ||
2696 | - ret = amd_xgbe_an_rx_xnp(phydev, state); | ||
2697 | + case AMD_XGBE_AN_PAGE_RECEIVED: | ||
2698 | + priv->an_state = amd_xgbe_an_page_received(phydev); | ||
2699 | + priv->an_supported++; | ||
2700 | + break; | ||
2701 | + | ||
2702 | + case AMD_XGBE_AN_INCOMPAT_LINK: | ||
2703 | + priv->an_supported = 0; | ||
2704 | + priv->parallel_detect = 0; | ||
2705 | + priv->an_state = amd_xgbe_an_incompat_link(phydev); | ||
2706 | + break; | ||
2707 | + | ||
2708 | + case AMD_XGBE_AN_COMPLETE: | ||
2709 | + priv->parallel_detect = priv->an_supported ? 0 : 1; | ||
2710 | + netdev_dbg(phydev->attached_dev, "%s successful\n", | ||
2711 | + priv->an_supported ? "Auto negotiation" | ||
2712 | + : "Parallel detection"); | ||
2713 | + break; | ||
2714 | + | ||
2715 | + case AMD_XGBE_AN_NO_LINK: | ||
2716 | break; | ||
2717 | |||
2718 | default: | ||
2719 | - ret = AMD_XGBE_AN_ERROR; | ||
2720 | + priv->an_state = AMD_XGBE_AN_ERROR; | ||
2721 | } | ||
2722 | |||
2723 | - return ret; | ||
2724 | -} | ||
2725 | + if (priv->an_state == AMD_XGBE_AN_NO_LINK) { | ||
2726 | + int_reg = 0; | ||
2727 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0); | ||
2728 | + } else if (priv->an_state == AMD_XGBE_AN_ERROR) { | ||
2729 | + netdev_err(phydev->attached_dev, | ||
2730 | + "error during auto-negotiation, state=%u\n", | ||
2731 | + cur_state); | ||
2732 | |||
2733 | -static enum amd_xgbe_phy_an amd_xgbe_an_incompat_link(struct phy_device *phydev) | ||
2734 | -{ | ||
2735 | - int ret; | ||
2736 | + int_reg = 0; | ||
2737 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0); | ||
2738 | + } | ||
2739 | |||
2740 | - ret = amd_xgbe_phy_switch_mode(phydev); | ||
2741 | - if (ret) | ||
2742 | - return AMD_XGBE_AN_ERROR; | ||
2743 | + if (priv->an_state >= AMD_XGBE_AN_COMPLETE) { | ||
2744 | + priv->an_result = priv->an_state; | ||
2745 | + priv->an_state = AMD_XGBE_AN_READY; | ||
2746 | + priv->kr_state = AMD_XGBE_RX_BPA; | ||
2747 | + priv->kx_state = AMD_XGBE_RX_BPA; | ||
2748 | + priv->an_start = 0; | ||
2749 | + } | ||
2750 | |||
2751 | - return AMD_XGBE_AN_START; | ||
2752 | -} | ||
2753 | + if (cur_state != priv->an_state) | ||
2754 | + goto again; | ||
2755 | |||
2756 | -static void amd_xgbe_an_state_machine(struct work_struct *work) | ||
2757 | -{ | ||
2758 | - struct amd_xgbe_phy_priv *priv = container_of(work, | ||
2759 | - struct amd_xgbe_phy_priv, | ||
2760 | - an_work); | ||
2761 | - struct phy_device *phydev = priv->phydev; | ||
2762 | - enum amd_xgbe_phy_an cur_state; | ||
2763 | - int sleep; | ||
2764 | - unsigned int an_supported = 0; | ||
2765 | + if (int_reg) | ||
2766 | + goto next_int; | ||
2767 | |||
2768 | - /* Start in KX mode */ | ||
2769 | - if (amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KX)) | ||
2770 | - priv->an_state = AMD_XGBE_AN_ERROR; | ||
2771 | +out: | ||
2772 | + enable_irq(priv->an_irq); | ||
2773 | |||
2774 | - while (1) { | ||
2775 | - mutex_lock(&priv->an_mutex); | ||
2776 | + mutex_unlock(&priv->an_mutex); | ||
2777 | +} | ||
2778 | |||
2779 | - cur_state = priv->an_state; | ||
2780 | +static int amd_xgbe_an_init(struct phy_device *phydev) | ||
2781 | +{ | ||
2782 | + int ret; | ||
2783 | |||
2784 | - switch (priv->an_state) { | ||
2785 | - case AMD_XGBE_AN_START: | ||
2786 | - an_supported = 0; | ||
2787 | - priv->parallel_detect = 0; | ||
2788 | - priv->an_state = amd_xgbe_an_start(phydev); | ||
2789 | - break; | ||
2790 | + /* Set up Advertisement register 3 first */ | ||
2791 | + ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2); | ||
2792 | + if (ret < 0) | ||
2793 | + return ret; | ||
2794 | |||
2795 | - case AMD_XGBE_AN_EVENT: | ||
2796 | - priv->an_state = amd_xgbe_an_event(phydev); | ||
2797 | - break; | ||
2798 | + if (phydev->advertising & SUPPORTED_10000baseR_FEC) | ||
2799 | + ret |= 0xc000; | ||
2800 | + else | ||
2801 | + ret &= ~0xc000; | ||
2802 | |||
2803 | - case AMD_XGBE_AN_PAGE_RECEIVED: | ||
2804 | - priv->an_state = amd_xgbe_an_page_received(phydev); | ||
2805 | - an_supported++; | ||
2806 | - break; | ||
2807 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 2, ret); | ||
2808 | |||
2809 | - case AMD_XGBE_AN_INCOMPAT_LINK: | ||
2810 | - priv->an_state = amd_xgbe_an_incompat_link(phydev); | ||
2811 | - break; | ||
2812 | + /* Set up Advertisement register 2 next */ | ||
2813 | + ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1); | ||
2814 | + if (ret < 0) | ||
2815 | + return ret; | ||
2816 | |||
2817 | - case AMD_XGBE_AN_COMPLETE: | ||
2818 | - priv->parallel_detect = an_supported ? 0 : 1; | ||
2819 | - netdev_info(phydev->attached_dev, "%s successful\n", | ||
2820 | - an_supported ? "Auto negotiation" | ||
2821 | - : "Parallel detection"); | ||
2822 | - /* fall through */ | ||
2823 | + if (phydev->advertising & SUPPORTED_10000baseKR_Full) | ||
2824 | + ret |= 0x80; | ||
2825 | + else | ||
2826 | + ret &= ~0x80; | ||
2827 | |||
2828 | - case AMD_XGBE_AN_NO_LINK: | ||
2829 | - case AMD_XGBE_AN_EXIT: | ||
2830 | - goto exit_unlock; | ||
2831 | + if ((phydev->advertising & SUPPORTED_1000baseKX_Full) || | ||
2832 | + (phydev->advertising & SUPPORTED_2500baseX_Full)) | ||
2833 | + ret |= 0x20; | ||
2834 | + else | ||
2835 | + ret &= ~0x20; | ||
2836 | |||
2837 | - default: | ||
2838 | - priv->an_state = AMD_XGBE_AN_ERROR; | ||
2839 | - } | ||
2840 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE + 1, ret); | ||
2841 | |||
2842 | - if (priv->an_state == AMD_XGBE_AN_ERROR) { | ||
2843 | - netdev_err(phydev->attached_dev, | ||
2844 | - "error during auto-negotiation, state=%u\n", | ||
2845 | - cur_state); | ||
2846 | - goto exit_unlock; | ||
2847 | - } | ||
2848 | + /* Set up Advertisement register 1 last */ | ||
2849 | + ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE); | ||
2850 | + if (ret < 0) | ||
2851 | + return ret; | ||
2852 | |||
2853 | - sleep = (priv->an_state == AMD_XGBE_AN_EVENT) ? 1 : 0; | ||
2854 | + if (phydev->advertising & SUPPORTED_Pause) | ||
2855 | + ret |= 0x400; | ||
2856 | + else | ||
2857 | + ret &= ~0x400; | ||
2858 | |||
2859 | - mutex_unlock(&priv->an_mutex); | ||
2860 | + if (phydev->advertising & SUPPORTED_Asym_Pause) | ||
2861 | + ret |= 0x800; | ||
2862 | + else | ||
2863 | + ret &= ~0x800; | ||
2864 | |||
2865 | - if (sleep) | ||
2866 | - usleep_range(20, 50); | ||
2867 | - } | ||
2868 | + /* We don't intend to perform XNP */ | ||
2869 | + ret &= ~XNP_NP_EXCHANGE; | ||
2870 | |||
2871 | -exit_unlock: | ||
2872 | - priv->an_result = priv->an_state; | ||
2873 | - priv->an_state = AMD_XGBE_AN_READY; | ||
2874 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE, ret); | ||
2875 | |||
2876 | - mutex_unlock(&priv->an_mutex); | ||
2877 | + return 0; | ||
2878 | } | ||
2879 | |||
2880 | static int amd_xgbe_phy_soft_reset(struct phy_device *phydev) | ||
2881 | @@ -992,33 +1230,68 @@ static int amd_xgbe_phy_soft_reset(struct phy_device *phydev) | ||
2882 | if (ret & MDIO_CTRL1_RESET) | ||
2883 | return -ETIMEDOUT; | ||
2884 | |||
2885 | - /* Make sure the XPCS and SerDes are in compatible states */ | ||
2886 | - return amd_xgbe_phy_xgmii_mode(phydev); | ||
2887 | + /* Disable auto-negotiation for now */ | ||
2888 | + ret = amd_xgbe_phy_disable_an(phydev); | ||
2889 | + if (ret < 0) | ||
2890 | + return ret; | ||
2891 | + | ||
2892 | + /* Clear auto-negotiation interrupts */ | ||
2893 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0); | ||
2894 | + | ||
2895 | + return 0; | ||
2896 | } | ||
2897 | |||
2898 | static int amd_xgbe_phy_config_init(struct phy_device *phydev) | ||
2899 | { | ||
2900 | struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
2901 | + struct net_device *netdev = phydev->attached_dev; | ||
2902 | + int ret; | ||
2903 | |||
2904 | - /* Initialize supported features */ | ||
2905 | - phydev->supported = SUPPORTED_Autoneg; | ||
2906 | - phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | ||
2907 | - phydev->supported |= SUPPORTED_Backplane; | ||
2908 | - phydev->supported |= SUPPORTED_10000baseKR_Full | | ||
2909 | - SUPPORTED_10000baseR_FEC; | ||
2910 | - switch (priv->speed_set) { | ||
2911 | - case AMD_XGBE_PHY_SPEEDSET_1000_10000: | ||
2912 | - phydev->supported |= SUPPORTED_1000baseKX_Full; | ||
2913 | - break; | ||
2914 | - case AMD_XGBE_PHY_SPEEDSET_2500_10000: | ||
2915 | - phydev->supported |= SUPPORTED_2500baseX_Full; | ||
2916 | - break; | ||
2917 | + if (!priv->an_irq_allocated) { | ||
2918 | + /* Allocate the auto-negotiation workqueue and interrupt */ | ||
2919 | + snprintf(priv->an_irq_name, sizeof(priv->an_irq_name) - 1, | ||
2920 | + "%s-pcs", netdev_name(netdev)); | ||
2921 | + | ||
2922 | + priv->an_workqueue = | ||
2923 | + create_singlethread_workqueue(priv->an_irq_name); | ||
2924 | + if (!priv->an_workqueue) { | ||
2925 | + netdev_err(netdev, "phy workqueue creation failed\n"); | ||
2926 | + return -ENOMEM; | ||
2927 | + } | ||
2928 | + | ||
2929 | + ret = devm_request_irq(priv->dev, priv->an_irq, | ||
2930 | + amd_xgbe_an_isr, 0, priv->an_irq_name, | ||
2931 | + priv); | ||
2932 | + if (ret) { | ||
2933 | + netdev_err(netdev, "phy irq request failed\n"); | ||
2934 | + destroy_workqueue(priv->an_workqueue); | ||
2935 | + return ret; | ||
2936 | + } | ||
2937 | + | ||
2938 | + priv->an_irq_allocated = 1; | ||
2939 | } | ||
2940 | - phydev->advertising = phydev->supported; | ||
2941 | |||
2942 | - /* Turn off and clear interrupts */ | ||
2943 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INTMASK, 0); | ||
2944 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0); | ||
2945 | + /* Set initial mode - call the mode setting routines | ||
2946 | + * directly to insure we are properly configured | ||
2947 | + */ | ||
2948 | + if (amd_xgbe_phy_use_xgmii_mode(phydev)) | ||
2949 | + ret = amd_xgbe_phy_xgmii_mode(phydev); | ||
2950 | + else if (amd_xgbe_phy_use_gmii_mode(phydev)) | ||
2951 | + ret = amd_xgbe_phy_gmii_mode(phydev); | ||
2952 | + else if (amd_xgbe_phy_use_gmii_2500_mode(phydev)) | ||
2953 | + ret = amd_xgbe_phy_gmii_2500_mode(phydev); | ||
2954 | + else | ||
2955 | + ret = -EINVAL; | ||
2956 | + if (ret < 0) | ||
2957 | + return ret; | ||
2958 | + | ||
2959 | + /* Set up advertisement registers based on current settings */ | ||
2960 | + ret = amd_xgbe_an_init(phydev); | ||
2961 | + if (ret) | ||
2962 | + return ret; | ||
2963 | + | ||
2964 | + /* Enable auto-negotiation interrupts */ | ||
2965 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INTMASK, 0x07); | ||
2966 | |||
2967 | return 0; | ||
2968 | } | ||
2969 | @@ -1028,25 +1301,19 @@ static int amd_xgbe_phy_setup_forced(struct phy_device *phydev) | ||
2970 | int ret; | ||
2971 | |||
2972 | /* Disable auto-negotiation */ | ||
2973 | - ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1); | ||
2974 | + ret = amd_xgbe_phy_disable_an(phydev); | ||
2975 | if (ret < 0) | ||
2976 | return ret; | ||
2977 | |||
2978 | - ret &= ~MDIO_AN_CTRL1_ENABLE; | ||
2979 | - phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1, ret); | ||
2980 | - | ||
2981 | /* Validate/Set specified speed */ | ||
2982 | switch (phydev->speed) { | ||
2983 | case SPEED_10000: | ||
2984 | - ret = amd_xgbe_phy_xgmii_mode(phydev); | ||
2985 | + ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KR); | ||
2986 | break; | ||
2987 | |||
2988 | case SPEED_2500: | ||
2989 | - ret = amd_xgbe_phy_gmii_2500_mode(phydev); | ||
2990 | - break; | ||
2991 | - | ||
2992 | case SPEED_1000: | ||
2993 | - ret = amd_xgbe_phy_gmii_mode(phydev); | ||
2994 | + ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KX); | ||
2995 | break; | ||
2996 | |||
2997 | default: | ||
2998 | @@ -1066,10 +1333,11 @@ static int amd_xgbe_phy_setup_forced(struct phy_device *phydev) | ||
2999 | return 0; | ||
3000 | } | ||
3001 | |||
3002 | -static int amd_xgbe_phy_config_aneg(struct phy_device *phydev) | ||
3003 | +static int __amd_xgbe_phy_config_aneg(struct phy_device *phydev) | ||
3004 | { | ||
3005 | struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
3006 | u32 mmd_mask = phydev->c45_ids.devices_in_package; | ||
3007 | + int ret; | ||
3008 | |||
3009 | if (phydev->autoneg != AUTONEG_ENABLE) | ||
3010 | return amd_xgbe_phy_setup_forced(phydev); | ||
3011 | @@ -1078,56 +1346,79 @@ static int amd_xgbe_phy_config_aneg(struct phy_device *phydev) | ||
3012 | if (!(mmd_mask & MDIO_DEVS_AN)) | ||
3013 | return -EINVAL; | ||
3014 | |||
3015 | - /* Start/Restart the auto-negotiation state machine */ | ||
3016 | - mutex_lock(&priv->an_mutex); | ||
3017 | + /* Disable auto-negotiation interrupt */ | ||
3018 | + disable_irq(priv->an_irq); | ||
3019 | + | ||
3020 | + /* Start auto-negotiation in a supported mode */ | ||
3021 | + if (phydev->advertising & SUPPORTED_10000baseKR_Full) | ||
3022 | + ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KR); | ||
3023 | + else if ((phydev->advertising & SUPPORTED_1000baseKX_Full) || | ||
3024 | + (phydev->advertising & SUPPORTED_2500baseX_Full)) | ||
3025 | + ret = amd_xgbe_phy_set_mode(phydev, AMD_XGBE_MODE_KX); | ||
3026 | + else | ||
3027 | + ret = -EINVAL; | ||
3028 | + if (ret < 0) { | ||
3029 | + enable_irq(priv->an_irq); | ||
3030 | + return ret; | ||
3031 | + } | ||
3032 | + | ||
3033 | + /* Disable and stop any in progress auto-negotiation */ | ||
3034 | + ret = amd_xgbe_phy_disable_an(phydev); | ||
3035 | + if (ret < 0) | ||
3036 | + return ret; | ||
3037 | + | ||
3038 | + /* Clear any auto-negotitation interrupts */ | ||
3039 | + phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_INT, 0); | ||
3040 | + | ||
3041 | priv->an_result = AMD_XGBE_AN_READY; | ||
3042 | - priv->an_state = AMD_XGBE_AN_START; | ||
3043 | - priv->kr_state = AMD_XGBE_RX_READY; | ||
3044 | - priv->kx_state = AMD_XGBE_RX_READY; | ||
3045 | - mutex_unlock(&priv->an_mutex); | ||
3046 | + priv->an_state = AMD_XGBE_AN_READY; | ||
3047 | + priv->kr_state = AMD_XGBE_RX_BPA; | ||
3048 | + priv->kx_state = AMD_XGBE_RX_BPA; | ||
3049 | |||
3050 | - queue_work(priv->an_workqueue, &priv->an_work); | ||
3051 | + /* Re-enable auto-negotiation interrupt */ | ||
3052 | + enable_irq(priv->an_irq); | ||
3053 | |||
3054 | - return 0; | ||
3055 | + /* Set up advertisement registers based on current settings */ | ||
3056 | + ret = amd_xgbe_an_init(phydev); | ||
3057 | + if (ret) | ||
3058 | + return ret; | ||
3059 | + | ||
3060 | + /* Enable and start auto-negotiation */ | ||
3061 | + return amd_xgbe_phy_restart_an(phydev); | ||
3062 | } | ||
3063 | |||
3064 | -static int amd_xgbe_phy_aneg_done(struct phy_device *phydev) | ||
3065 | +static int amd_xgbe_phy_config_aneg(struct phy_device *phydev) | ||
3066 | { | ||
3067 | struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
3068 | - enum amd_xgbe_phy_an state; | ||
3069 | + int ret; | ||
3070 | |||
3071 | mutex_lock(&priv->an_mutex); | ||
3072 | - state = priv->an_result; | ||
3073 | + | ||
3074 | + ret = __amd_xgbe_phy_config_aneg(phydev); | ||
3075 | + | ||
3076 | mutex_unlock(&priv->an_mutex); | ||
3077 | |||
3078 | - return (state == AMD_XGBE_AN_COMPLETE); | ||
3079 | + return ret; | ||
3080 | +} | ||
3081 | + | ||
3082 | +static int amd_xgbe_phy_aneg_done(struct phy_device *phydev) | ||
3083 | +{ | ||
3084 | + struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
3085 | + | ||
3086 | + return (priv->an_result == AMD_XGBE_AN_COMPLETE); | ||
3087 | } | ||
3088 | |||
3089 | static int amd_xgbe_phy_update_link(struct phy_device *phydev) | ||
3090 | { | ||
3091 | struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
3092 | - enum amd_xgbe_phy_an state; | ||
3093 | - unsigned int check_again, autoneg; | ||
3094 | int ret; | ||
3095 | |||
3096 | /* If we're doing auto-negotiation don't report link down */ | ||
3097 | - mutex_lock(&priv->an_mutex); | ||
3098 | - state = priv->an_state; | ||
3099 | - mutex_unlock(&priv->an_mutex); | ||
3100 | - | ||
3101 | - if (state != AMD_XGBE_AN_READY) { | ||
3102 | + if (priv->an_state != AMD_XGBE_AN_READY) { | ||
3103 | phydev->link = 1; | ||
3104 | return 0; | ||
3105 | } | ||
3106 | |||
3107 | - /* Since the device can be in the wrong mode when a link is | ||
3108 | - * (re-)established (cable connected after the interface is | ||
3109 | - * up, etc.), the link status may report no link. If there | ||
3110 | - * is no link, try switching modes and checking the status | ||
3111 | - * again if auto negotiation is enabled. | ||
3112 | - */ | ||
3113 | - check_again = (phydev->autoneg == AUTONEG_ENABLE) ? 1 : 0; | ||
3114 | -again: | ||
3115 | /* Link status is latched low, so read once to clear | ||
3116 | * and then read again to get current state | ||
3117 | */ | ||
3118 | @@ -1141,25 +1432,6 @@ again: | ||
3119 | |||
3120 | phydev->link = (ret & MDIO_STAT1_LSTATUS) ? 1 : 0; | ||
3121 | |||
3122 | - if (!phydev->link) { | ||
3123 | - if (check_again) { | ||
3124 | - ret = amd_xgbe_phy_switch_mode(phydev); | ||
3125 | - if (ret < 0) | ||
3126 | - return ret; | ||
3127 | - check_again = 0; | ||
3128 | - goto again; | ||
3129 | - } | ||
3130 | - } | ||
3131 | - | ||
3132 | - autoneg = (phydev->link && !priv->link) ? 1 : 0; | ||
3133 | - priv->link = phydev->link; | ||
3134 | - if (autoneg) { | ||
3135 | - /* Link is (back) up, re-start auto-negotiation */ | ||
3136 | - ret = amd_xgbe_phy_config_aneg(phydev); | ||
3137 | - if (ret < 0) | ||
3138 | - return ret; | ||
3139 | - } | ||
3140 | - | ||
3141 | return 0; | ||
3142 | } | ||
3143 | |||
3144 | @@ -1249,6 +1521,7 @@ static int amd_xgbe_phy_read_status(struct phy_device *phydev) | ||
3145 | |||
3146 | static int amd_xgbe_phy_suspend(struct phy_device *phydev) | ||
3147 | { | ||
3148 | + struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
3149 | int ret; | ||
3150 | |||
3151 | mutex_lock(&phydev->lock); | ||
3152 | @@ -1257,6 +1530,8 @@ static int amd_xgbe_phy_suspend(struct phy_device *phydev) | ||
3153 | if (ret < 0) | ||
3154 | goto unlock; | ||
3155 | |||
3156 | + priv->lpm_ctrl = ret; | ||
3157 | + | ||
3158 | ret |= MDIO_CTRL1_LPOWER; | ||
3159 | phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, ret); | ||
3160 | |||
3161 | @@ -1270,69 +1545,106 @@ unlock: | ||
3162 | |||
3163 | static int amd_xgbe_phy_resume(struct phy_device *phydev) | ||
3164 | { | ||
3165 | - int ret; | ||
3166 | + struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
3167 | |||
3168 | mutex_lock(&phydev->lock); | ||
3169 | |||
3170 | - ret = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1); | ||
3171 | - if (ret < 0) | ||
3172 | - goto unlock; | ||
3173 | + priv->lpm_ctrl &= ~MDIO_CTRL1_LPOWER; | ||
3174 | + phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, priv->lpm_ctrl); | ||
3175 | |||
3176 | - ret &= ~MDIO_CTRL1_LPOWER; | ||
3177 | - phy_write_mmd(phydev, MDIO_MMD_PCS, MDIO_CTRL1, ret); | ||
3178 | + mutex_unlock(&phydev->lock); | ||
3179 | |||
3180 | - ret = 0; | ||
3181 | + return 0; | ||
3182 | +} | ||
3183 | |||
3184 | -unlock: | ||
3185 | - mutex_unlock(&phydev->lock); | ||
3186 | +static unsigned int amd_xgbe_phy_resource_count(struct platform_device *pdev, | ||
3187 | + unsigned int type) | ||
3188 | +{ | ||
3189 | + unsigned int count; | ||
3190 | + int i; | ||
3191 | |||
3192 | - return ret; | ||
3193 | + for (i = 0, count = 0; i < pdev->num_resources; i++) { | ||
3194 | + struct resource *r = &pdev->resource[i]; | ||
3195 | + | ||
3196 | + if (type == resource_type(r)) | ||
3197 | + count++; | ||
3198 | + } | ||
3199 | + | ||
3200 | + return count; | ||
3201 | } | ||
3202 | |||
3203 | static int amd_xgbe_phy_probe(struct phy_device *phydev) | ||
3204 | { | ||
3205 | struct amd_xgbe_phy_priv *priv; | ||
3206 | - struct platform_device *pdev; | ||
3207 | - struct device *dev; | ||
3208 | - char *wq_name; | ||
3209 | - const __be32 *property; | ||
3210 | - unsigned int speed_set; | ||
3211 | + struct platform_device *phy_pdev; | ||
3212 | + struct device *dev, *phy_dev; | ||
3213 | + unsigned int phy_resnum, phy_irqnum; | ||
3214 | int ret; | ||
3215 | |||
3216 | - if (!phydev->dev.of_node) | ||
3217 | + if (!phydev->bus || !phydev->bus->parent) | ||
3218 | return -EINVAL; | ||
3219 | |||
3220 | - pdev = of_find_device_by_node(phydev->dev.of_node); | ||
3221 | - if (!pdev) | ||
3222 | - return -EINVAL; | ||
3223 | - dev = &pdev->dev; | ||
3224 | - | ||
3225 | - wq_name = kasprintf(GFP_KERNEL, "%s-amd-xgbe-phy", phydev->bus->name); | ||
3226 | - if (!wq_name) { | ||
3227 | - ret = -ENOMEM; | ||
3228 | - goto err_pdev; | ||
3229 | - } | ||
3230 | + dev = phydev->bus->parent; | ||
3231 | |||
3232 | priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); | ||
3233 | - if (!priv) { | ||
3234 | - ret = -ENOMEM; | ||
3235 | - goto err_name; | ||
3236 | - } | ||
3237 | + if (!priv) | ||
3238 | + return -ENOMEM; | ||
3239 | |||
3240 | - priv->pdev = pdev; | ||
3241 | + priv->pdev = to_platform_device(dev); | ||
3242 | + priv->adev = ACPI_COMPANION(dev); | ||
3243 | priv->dev = dev; | ||
3244 | priv->phydev = phydev; | ||
3245 | + mutex_init(&priv->an_mutex); | ||
3246 | + INIT_WORK(&priv->an_irq_work, amd_xgbe_an_irq_work); | ||
3247 | + INIT_WORK(&priv->an_work, amd_xgbe_an_state_machine); | ||
3248 | + | ||
3249 | + if (!priv->adev || acpi_disabled) { | ||
3250 | + struct device_node *bus_node; | ||
3251 | + struct device_node *phy_node; | ||
3252 | + | ||
3253 | + bus_node = priv->dev->of_node; | ||
3254 | + phy_node = of_parse_phandle(bus_node, "phy-handle", 0); | ||
3255 | + if (!phy_node) { | ||
3256 | + dev_err(dev, "unable to parse phy-handle\n"); | ||
3257 | + ret = -EINVAL; | ||
3258 | + goto err_priv; | ||
3259 | + } | ||
3260 | + | ||
3261 | + phy_pdev = of_find_device_by_node(phy_node); | ||
3262 | + of_node_put(phy_node); | ||
3263 | + | ||
3264 | + if (!phy_pdev) { | ||
3265 | + dev_err(dev, "unable to obtain phy device\n"); | ||
3266 | + ret = -EINVAL; | ||
3267 | + goto err_priv; | ||
3268 | + } | ||
3269 | + | ||
3270 | + phy_resnum = 0; | ||
3271 | + phy_irqnum = 0; | ||
3272 | + } else { | ||
3273 | + /* In ACPI, the XGBE and PHY resources are the grouped | ||
3274 | + * together with the PHY resources at the end | ||
3275 | + */ | ||
3276 | + phy_pdev = priv->pdev; | ||
3277 | + phy_resnum = amd_xgbe_phy_resource_count(phy_pdev, | ||
3278 | + IORESOURCE_MEM) - 3; | ||
3279 | + phy_irqnum = amd_xgbe_phy_resource_count(phy_pdev, | ||
3280 | + IORESOURCE_IRQ) - 1; | ||
3281 | + } | ||
3282 | + phy_dev = &phy_pdev->dev; | ||
3283 | |||
3284 | /* Get the device mmio areas */ | ||
3285 | - priv->rxtx_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
3286 | + priv->rxtx_res = platform_get_resource(phy_pdev, IORESOURCE_MEM, | ||
3287 | + phy_resnum++); | ||
3288 | priv->rxtx_regs = devm_ioremap_resource(dev, priv->rxtx_res); | ||
3289 | if (IS_ERR(priv->rxtx_regs)) { | ||
3290 | dev_err(dev, "rxtx ioremap failed\n"); | ||
3291 | ret = PTR_ERR(priv->rxtx_regs); | ||
3292 | - goto err_priv; | ||
3293 | + goto err_put; | ||
3294 | } | ||
3295 | |||
3296 | - priv->sir0_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); | ||
3297 | + priv->sir0_res = platform_get_resource(phy_pdev, IORESOURCE_MEM, | ||
3298 | + phy_resnum++); | ||
3299 | priv->sir0_regs = devm_ioremap_resource(dev, priv->sir0_res); | ||
3300 | if (IS_ERR(priv->sir0_regs)) { | ||
3301 | dev_err(dev, "sir0 ioremap failed\n"); | ||
3302 | @@ -1340,7 +1652,8 @@ static int amd_xgbe_phy_probe(struct phy_device *phydev) | ||
3303 | goto err_rxtx; | ||
3304 | } | ||
3305 | |||
3306 | - priv->sir1_res = platform_get_resource(pdev, IORESOURCE_MEM, 2); | ||
3307 | + priv->sir1_res = platform_get_resource(phy_pdev, IORESOURCE_MEM, | ||
3308 | + phy_resnum++); | ||
3309 | priv->sir1_regs = devm_ioremap_resource(dev, priv->sir1_res); | ||
3310 | if (IS_ERR(priv->sir1_regs)) { | ||
3311 | dev_err(dev, "sir1 ioremap failed\n"); | ||
3312 | @@ -1348,40 +1661,153 @@ static int amd_xgbe_phy_probe(struct phy_device *phydev) | ||
3313 | goto err_sir0; | ||
3314 | } | ||
3315 | |||
3316 | + /* Get the auto-negotiation interrupt */ | ||
3317 | + ret = platform_get_irq(phy_pdev, phy_irqnum); | ||
3318 | + if (ret < 0) { | ||
3319 | + dev_err(dev, "platform_get_irq failed\n"); | ||
3320 | + goto err_sir1; | ||
3321 | + } | ||
3322 | + priv->an_irq = ret; | ||
3323 | + | ||
3324 | /* Get the device speed set property */ | ||
3325 | - speed_set = 0; | ||
3326 | - property = of_get_property(dev->of_node, XGBE_PHY_SPEEDSET_PROPERTY, | ||
3327 | - NULL); | ||
3328 | - if (property) | ||
3329 | - speed_set = be32_to_cpu(*property); | ||
3330 | - | ||
3331 | - switch (speed_set) { | ||
3332 | - case 0: | ||
3333 | - priv->speed_set = AMD_XGBE_PHY_SPEEDSET_1000_10000; | ||
3334 | - break; | ||
3335 | - case 1: | ||
3336 | - priv->speed_set = AMD_XGBE_PHY_SPEEDSET_2500_10000; | ||
3337 | + ret = device_property_read_u32(phy_dev, XGBE_PHY_SPEEDSET_PROPERTY, | ||
3338 | + &priv->speed_set); | ||
3339 | + if (ret) { | ||
3340 | + dev_err(dev, "invalid %s property\n", | ||
3341 | + XGBE_PHY_SPEEDSET_PROPERTY); | ||
3342 | + goto err_sir1; | ||
3343 | + } | ||
3344 | + | ||
3345 | + switch (priv->speed_set) { | ||
3346 | + case AMD_XGBE_PHY_SPEEDSET_1000_10000: | ||
3347 | + case AMD_XGBE_PHY_SPEEDSET_2500_10000: | ||
3348 | break; | ||
3349 | default: | ||
3350 | - dev_err(dev, "invalid amd,speed-set property\n"); | ||
3351 | + dev_err(dev, "invalid %s property\n", | ||
3352 | + XGBE_PHY_SPEEDSET_PROPERTY); | ||
3353 | ret = -EINVAL; | ||
3354 | goto err_sir1; | ||
3355 | } | ||
3356 | |||
3357 | - priv->link = 1; | ||
3358 | + if (device_property_present(phy_dev, XGBE_PHY_BLWC_PROPERTY)) { | ||
3359 | + ret = device_property_read_u32_array(phy_dev, | ||
3360 | + XGBE_PHY_BLWC_PROPERTY, | ||
3361 | + priv->serdes_blwc, | ||
3362 | + XGBE_PHY_SPEEDS); | ||
3363 | + if (ret) { | ||
3364 | + dev_err(dev, "invalid %s property\n", | ||
3365 | + XGBE_PHY_BLWC_PROPERTY); | ||
3366 | + goto err_sir1; | ||
3367 | + } | ||
3368 | + } else { | ||
3369 | + memcpy(priv->serdes_blwc, amd_xgbe_phy_serdes_blwc, | ||
3370 | + sizeof(priv->serdes_blwc)); | ||
3371 | + } | ||
3372 | |||
3373 | - mutex_init(&priv->an_mutex); | ||
3374 | - INIT_WORK(&priv->an_work, amd_xgbe_an_state_machine); | ||
3375 | - priv->an_workqueue = create_singlethread_workqueue(wq_name); | ||
3376 | - if (!priv->an_workqueue) { | ||
3377 | - ret = -ENOMEM; | ||
3378 | - goto err_sir1; | ||
3379 | + if (device_property_present(phy_dev, XGBE_PHY_CDR_RATE_PROPERTY)) { | ||
3380 | + ret = device_property_read_u32_array(phy_dev, | ||
3381 | + XGBE_PHY_CDR_RATE_PROPERTY, | ||
3382 | + priv->serdes_cdr_rate, | ||
3383 | + XGBE_PHY_SPEEDS); | ||
3384 | + if (ret) { | ||
3385 | + dev_err(dev, "invalid %s property\n", | ||
3386 | + XGBE_PHY_CDR_RATE_PROPERTY); | ||
3387 | + goto err_sir1; | ||
3388 | + } | ||
3389 | + } else { | ||
3390 | + memcpy(priv->serdes_cdr_rate, amd_xgbe_phy_serdes_cdr_rate, | ||
3391 | + sizeof(priv->serdes_cdr_rate)); | ||
3392 | + } | ||
3393 | + | ||
3394 | + if (device_property_present(phy_dev, XGBE_PHY_PQ_SKEW_PROPERTY)) { | ||
3395 | + ret = device_property_read_u32_array(phy_dev, | ||
3396 | + XGBE_PHY_PQ_SKEW_PROPERTY, | ||
3397 | + priv->serdes_pq_skew, | ||
3398 | + XGBE_PHY_SPEEDS); | ||
3399 | + if (ret) { | ||
3400 | + dev_err(dev, "invalid %s property\n", | ||
3401 | + XGBE_PHY_PQ_SKEW_PROPERTY); | ||
3402 | + goto err_sir1; | ||
3403 | + } | ||
3404 | + } else { | ||
3405 | + memcpy(priv->serdes_pq_skew, amd_xgbe_phy_serdes_pq_skew, | ||
3406 | + sizeof(priv->serdes_pq_skew)); | ||
3407 | + } | ||
3408 | + | ||
3409 | + if (device_property_present(phy_dev, XGBE_PHY_TX_AMP_PROPERTY)) { | ||
3410 | + ret = device_property_read_u32_array(phy_dev, | ||
3411 | + XGBE_PHY_TX_AMP_PROPERTY, | ||
3412 | + priv->serdes_tx_amp, | ||
3413 | + XGBE_PHY_SPEEDS); | ||
3414 | + if (ret) { | ||
3415 | + dev_err(dev, "invalid %s property\n", | ||
3416 | + XGBE_PHY_TX_AMP_PROPERTY); | ||
3417 | + goto err_sir1; | ||
3418 | + } | ||
3419 | + } else { | ||
3420 | + memcpy(priv->serdes_tx_amp, amd_xgbe_phy_serdes_tx_amp, | ||
3421 | + sizeof(priv->serdes_tx_amp)); | ||
3422 | + } | ||
3423 | + | ||
3424 | + if (device_property_present(phy_dev, XGBE_PHY_DFE_CFG_PROPERTY)) { | ||
3425 | + ret = device_property_read_u32_array(phy_dev, | ||
3426 | + XGBE_PHY_DFE_CFG_PROPERTY, | ||
3427 | + priv->serdes_dfe_tap_cfg, | ||
3428 | + XGBE_PHY_SPEEDS); | ||
3429 | + if (ret) { | ||
3430 | + dev_err(dev, "invalid %s property\n", | ||
3431 | + XGBE_PHY_DFE_CFG_PROPERTY); | ||
3432 | + goto err_sir1; | ||
3433 | + } | ||
3434 | + } else { | ||
3435 | + memcpy(priv->serdes_dfe_tap_cfg, | ||
3436 | + amd_xgbe_phy_serdes_dfe_tap_cfg, | ||
3437 | + sizeof(priv->serdes_dfe_tap_cfg)); | ||
3438 | } | ||
3439 | |||
3440 | + if (device_property_present(phy_dev, XGBE_PHY_DFE_ENA_PROPERTY)) { | ||
3441 | + ret = device_property_read_u32_array(phy_dev, | ||
3442 | + XGBE_PHY_DFE_ENA_PROPERTY, | ||
3443 | + priv->serdes_dfe_tap_ena, | ||
3444 | + XGBE_PHY_SPEEDS); | ||
3445 | + if (ret) { | ||
3446 | + dev_err(dev, "invalid %s property\n", | ||
3447 | + XGBE_PHY_DFE_ENA_PROPERTY); | ||
3448 | + goto err_sir1; | ||
3449 | + } | ||
3450 | + } else { | ||
3451 | + memcpy(priv->serdes_dfe_tap_ena, | ||
3452 | + amd_xgbe_phy_serdes_dfe_tap_ena, | ||
3453 | + sizeof(priv->serdes_dfe_tap_ena)); | ||
3454 | + } | ||
3455 | + | ||
3456 | + /* Initialize supported features */ | ||
3457 | + phydev->supported = SUPPORTED_Autoneg; | ||
3458 | + phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; | ||
3459 | + phydev->supported |= SUPPORTED_Backplane; | ||
3460 | + phydev->supported |= SUPPORTED_10000baseKR_Full; | ||
3461 | + switch (priv->speed_set) { | ||
3462 | + case AMD_XGBE_PHY_SPEEDSET_1000_10000: | ||
3463 | + phydev->supported |= SUPPORTED_1000baseKX_Full; | ||
3464 | + break; | ||
3465 | + case AMD_XGBE_PHY_SPEEDSET_2500_10000: | ||
3466 | + phydev->supported |= SUPPORTED_2500baseX_Full; | ||
3467 | + break; | ||
3468 | + } | ||
3469 | + | ||
3470 | + ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_FEC_ABILITY); | ||
3471 | + if (ret < 0) | ||
3472 | + return ret; | ||
3473 | + priv->fec_ability = ret & XGBE_PHY_FEC_MASK; | ||
3474 | + if (priv->fec_ability & XGBE_PHY_FEC_ENABLE) | ||
3475 | + phydev->supported |= SUPPORTED_10000baseR_FEC; | ||
3476 | + | ||
3477 | + phydev->advertising = phydev->supported; | ||
3478 | + | ||
3479 | phydev->priv = priv; | ||
3480 | |||
3481 | - kfree(wq_name); | ||
3482 | - of_dev_put(pdev); | ||
3483 | + if (!priv->adev || acpi_disabled) | ||
3484 | + platform_device_put(phy_pdev); | ||
3485 | |||
3486 | return 0; | ||
3487 | |||
3488 | @@ -1400,15 +1826,13 @@ err_rxtx: | ||
3489 | devm_release_mem_region(dev, priv->rxtx_res->start, | ||
3490 | resource_size(priv->rxtx_res)); | ||
3491 | |||
3492 | +err_put: | ||
3493 | + if (!priv->adev || acpi_disabled) | ||
3494 | + platform_device_put(phy_pdev); | ||
3495 | + | ||
3496 | err_priv: | ||
3497 | devm_kfree(dev, priv); | ||
3498 | |||
3499 | -err_name: | ||
3500 | - kfree(wq_name); | ||
3501 | - | ||
3502 | -err_pdev: | ||
3503 | - of_dev_put(pdev); | ||
3504 | - | ||
3505 | return ret; | ||
3506 | } | ||
3507 | |||
3508 | @@ -1417,13 +1841,12 @@ static void amd_xgbe_phy_remove(struct phy_device *phydev) | ||
3509 | struct amd_xgbe_phy_priv *priv = phydev->priv; | ||
3510 | struct device *dev = priv->dev; | ||
3511 | |||
3512 | - /* Stop any in process auto-negotiation */ | ||
3513 | - mutex_lock(&priv->an_mutex); | ||
3514 | - priv->an_state = AMD_XGBE_AN_EXIT; | ||
3515 | - mutex_unlock(&priv->an_mutex); | ||
3516 | + if (priv->an_irq_allocated) { | ||
3517 | + devm_free_irq(dev, priv->an_irq, priv); | ||
3518 | |||
3519 | - flush_workqueue(priv->an_workqueue); | ||
3520 | - destroy_workqueue(priv->an_workqueue); | ||
3521 | + flush_workqueue(priv->an_workqueue); | ||
3522 | + destroy_workqueue(priv->an_workqueue); | ||
3523 | + } | ||
3524 | |||
3525 | /* Release resources */ | ||
3526 | devm_iounmap(dev, priv->sir1_regs); | ||
3527 | @@ -1452,6 +1875,7 @@ static struct phy_driver amd_xgbe_phy_driver[] = { | ||
3528 | .phy_id_mask = XGBE_PHY_MASK, | ||
3529 | .name = "AMD XGBE PHY", | ||
3530 | .features = 0, | ||
3531 | + .flags = PHY_IS_INTERNAL, | ||
3532 | .probe = amd_xgbe_phy_probe, | ||
3533 | .remove = amd_xgbe_phy_remove, | ||
3534 | .soft_reset = amd_xgbe_phy_soft_reset, | ||
3535 | diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h | ||
3536 | index abcafaa..6bdf476 100644 | ||
3537 | --- a/include/linux/clocksource.h | ||
3538 | +++ b/include/linux/clocksource.h | ||
3539 | @@ -87,6 +87,15 @@ static inline u64 cyclecounter_cyc2ns(const struct cyclecounter *cc, | ||
3540 | } | ||
3541 | |||
3542 | /** | ||
3543 | + * timecounter_adjtime - Shifts the time of the clock. | ||
3544 | + * @delta: Desired change in nanoseconds. | ||
3545 | + */ | ||
3546 | +static inline void timecounter_adjtime(struct timecounter *tc, s64 delta) | ||
3547 | +{ | ||
3548 | + tc->nsec += delta; | ||
3549 | +} | ||
3550 | + | ||
3551 | +/** | ||
3552 | * timecounter_init - initialize a time counter | ||
3553 | * @tc: Pointer to time counter which is to be initialized/reset | ||
3554 | * @cc: A cycle counter, ready to be used. | ||
3555 | -- | ||
3556 | 1.9.1 | ||
3557 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/412-1-styx-linux-tracking.git-2a3f98071e81b66033f6272f6c632023d1dcb1d2.patch b/recipes-kernel/linux/linux-hierofalcon/412-1-styx-linux-tracking.git-2a3f98071e81b66033f6272f6c632023d1dcb1d2.patch new file mode 100644 index 0000000..1dcbb88 --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/412-1-styx-linux-tracking.git-2a3f98071e81b66033f6272f6c632023d1dcb1d2.patch | |||
@@ -0,0 +1,348 @@ | |||
1 | From 2f12ab9f8409067cd3a977994659c1a0e8f3088b Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Mon, 10 Aug 2015 17:19:12 +0200 | ||
4 | Subject: [PATCH] Subject: [PATCH] ACPI / scan: Add support for ACPI _CLS | ||
5 | device matching | ||
6 | |||
7 | Patch ported from 3.19 kernel: | ||
8 | |||
9 | Device drivers typically use ACPI _HIDs/_CIDs listed in struct device_driver | ||
10 | acpi_match_table to match devices. However, for generic drivers, we do not | ||
11 | want to list _HID for all supported devices. Also, certain classes of devices | ||
12 | do not have _CID (e.g. SATA, USB). Instead, we can leverage ACPI _CLS, | ||
13 | which specifies PCI-defined class code (i.e. base-class, subclass and | ||
14 | programming interface). This patch adds support for matching ACPI devices using | ||
15 | the _CLS method. | ||
16 | |||
17 | To support loadable module, current design uses _HID or _CID to match device's | ||
18 | modalias. With the new way of matching with _CLS this would requires modification | ||
19 | to the current ACPI modalias key to include _CLS. This patch appends PCI-defined | ||
20 | class-code to the existing ACPI modalias as following. | ||
21 | |||
22 | acpi:<HID>:<CID1>:<CID2>:..:<CIDn>:<bbsspp>: | ||
23 | E.g: | ||
24 | # cat /sys/devices/platform/AMDI0600:00/modalias | ||
25 | acpi:AMDI0600:010601: | ||
26 | |||
27 | where bb is th base-class code, ss is te sub-class code, and pp is the | ||
28 | programming interface code | ||
29 | |||
30 | Since there would not be _HID/_CID in the ACPI matching table of the driver, | ||
31 | this patch adds a field to acpi_device_id to specify the matching _CLS. | ||
32 | |||
33 | static const struct acpi_device_id ahci_acpi_match[] = { | ||
34 | { "", 0, PCI_CLASS_STORAGE_SATA_AHCI }, | ||
35 | {}, | ||
36 | }; | ||
37 | |||
38 | In this case, the corresponded entry in modules.alias file would be: | ||
39 | |||
40 | alias acpi*:010601:* ahci_platform | ||
41 | |||
42 | Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com> | ||
43 | |||
44 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
45 | --- | ||
46 | drivers/acpi/acpica/acutils.h | 3 ++ | ||
47 | drivers/acpi/acpica/nsxfname.c | 21 ++++++++++-- | ||
48 | drivers/acpi/acpica/utids.c | 71 +++++++++++++++++++++++++++++++++++++++ | ||
49 | drivers/acpi/scan.c | 20 ++++++++--- | ||
50 | include/acpi/acnames.h | 1 + | ||
51 | include/acpi/actypes.h | 4 ++- | ||
52 | include/linux/mod_devicetable.h | 1 + | ||
53 | scripts/mod/devicetable-offsets.c | 1 + | ||
54 | scripts/mod/file2alias.c | 14 ++++++-- | ||
55 | 9 files changed, 126 insertions(+), 10 deletions(-) | ||
56 | |||
57 | diff --git a/drivers/acpi/acpica/acutils.h b/drivers/acpi/acpica/acutils.h | ||
58 | index 2b3c5bd..218ddfd 100644 | ||
59 | --- a/drivers/acpi/acpica/acutils.h | ||
60 | +++ b/drivers/acpi/acpica/acutils.h | ||
61 | @@ -430,6 +430,9 @@ acpi_status | ||
62 | acpi_ut_execute_CID(struct acpi_namespace_node *device_node, | ||
63 | struct acpi_pnp_device_id_list ** return_cid_list); | ||
64 | |||
65 | +acpi_status | ||
66 | +acpi_ut_execute_CLS(struct acpi_namespace_node *device_node, | ||
67 | + struct acpi_pnp_device_id **return_id); | ||
68 | /* | ||
69 | * utlock - reader/writer locks | ||
70 | */ | ||
71 | diff --git a/drivers/acpi/acpica/nsxfname.c b/drivers/acpi/acpica/nsxfname.c | ||
72 | index d66c326..3754db5 100644 | ||
73 | --- a/drivers/acpi/acpica/nsxfname.c | ||
74 | +++ b/drivers/acpi/acpica/nsxfname.c | ||
75 | @@ -276,11 +276,12 @@ acpi_get_object_info(acpi_handle handle, | ||
76 | struct acpi_pnp_device_id *hid = NULL; | ||
77 | struct acpi_pnp_device_id *uid = NULL; | ||
78 | struct acpi_pnp_device_id *sub = NULL; | ||
79 | + struct acpi_pnp_device_id *cls = NULL; | ||
80 | char *next_id_string; | ||
81 | acpi_object_type type; | ||
82 | acpi_name name; | ||
83 | u8 param_count = 0; | ||
84 | - u8 valid = 0; | ||
85 | + u16 valid = 0; | ||
86 | u32 info_size; | ||
87 | u32 i; | ||
88 | acpi_status status; | ||
89 | @@ -320,7 +321,7 @@ acpi_get_object_info(acpi_handle handle, | ||
90 | if ((type == ACPI_TYPE_DEVICE) || (type == ACPI_TYPE_PROCESSOR)) { | ||
91 | /* | ||
92 | * Get extra info for ACPI Device/Processor objects only: | ||
93 | - * Run the Device _HID, _UID, _SUB, and _CID methods. | ||
94 | + * Run the Device _HID, _UID, _SUB, _CID and _CLS methods. | ||
95 | * | ||
96 | * Note: none of these methods are required, so they may or may | ||
97 | * not be present for this device. The Info->Valid bitfield is used | ||
98 | @@ -351,6 +352,14 @@ acpi_get_object_info(acpi_handle handle, | ||
99 | valid |= ACPI_VALID_SUB; | ||
100 | } | ||
101 | |||
102 | + /* Execute the Device._CLS method */ | ||
103 | + | ||
104 | + status = acpi_ut_execute_CLS(node, &cls); | ||
105 | + if (ACPI_SUCCESS(status)) { | ||
106 | + info_size += cls->length; | ||
107 | + valid |= ACPI_VALID_CLS; | ||
108 | + } | ||
109 | + | ||
110 | /* Execute the Device._CID method */ | ||
111 | |||
112 | status = acpi_ut_execute_CID(node, &cid_list); | ||
113 | @@ -468,6 +477,11 @@ acpi_get_object_info(acpi_handle handle, | ||
114 | sub, next_id_string); | ||
115 | } | ||
116 | |||
117 | + if (cls) { | ||
118 | + next_id_string = acpi_ns_copy_device_id(&info->cls, | ||
119 | + cls, next_id_string); | ||
120 | + } | ||
121 | + | ||
122 | if (cid_list) { | ||
123 | info->compatible_id_list.count = cid_list->count; | ||
124 | info->compatible_id_list.list_size = cid_list->list_size; | ||
125 | @@ -510,6 +524,9 @@ cleanup: | ||
126 | if (cid_list) { | ||
127 | ACPI_FREE(cid_list); | ||
128 | } | ||
129 | + if (cls) { | ||
130 | + ACPI_FREE(cls); | ||
131 | + } | ||
132 | return (status); | ||
133 | } | ||
134 | |||
135 | diff --git a/drivers/acpi/acpica/utids.c b/drivers/acpi/acpica/utids.c | ||
136 | index 27431cf..bc77122 100644 | ||
137 | --- a/drivers/acpi/acpica/utids.c | ||
138 | +++ b/drivers/acpi/acpica/utids.c | ||
139 | @@ -416,3 +416,74 @@ cleanup: | ||
140 | acpi_ut_remove_reference(obj_desc); | ||
141 | return_ACPI_STATUS(status); | ||
142 | } | ||
143 | + | ||
144 | +/******************************************************************************* | ||
145 | + * | ||
146 | + * FUNCTION: acpi_ut_execute_CLS | ||
147 | + * | ||
148 | + * PARAMETERS: device_node - Node for the device | ||
149 | + * return_id - Where the string UID is returned | ||
150 | + * | ||
151 | + * RETURN: Status | ||
152 | + * | ||
153 | + * DESCRIPTION: Executes the _CLS control method that returns PCI-defined | ||
154 | + * class code of the device. The ACPI spec define _CLS as a | ||
155 | + * package with three integers. The returned string has format: | ||
156 | + * | ||
157 | + * "bbsspp" | ||
158 | + * where: | ||
159 | + * bb = Base-class code | ||
160 | + * ss = Sub-class code | ||
161 | + * pp = Programming Interface code | ||
162 | + * | ||
163 | + ******************************************************************************/ | ||
164 | + | ||
165 | +acpi_status | ||
166 | +acpi_ut_execute_CLS(struct acpi_namespace_node *device_node, | ||
167 | + struct acpi_pnp_device_id **return_id) | ||
168 | +{ | ||
169 | + struct acpi_pnp_device_id *cls; | ||
170 | + union acpi_operand_object *obj_desc; | ||
171 | + union acpi_operand_object **cls_objects; | ||
172 | + acpi_status status; | ||
173 | + | ||
174 | + ACPI_FUNCTION_TRACE(ut_execute_CLS); | ||
175 | + status = acpi_ut_evaluate_object(device_node, METHOD_NAME__CLS, | ||
176 | + ACPI_BTYPE_PACKAGE, &obj_desc); | ||
177 | + if (ACPI_FAILURE(status)) | ||
178 | + return_ACPI_STATUS(status); | ||
179 | + | ||
180 | + cls_objects = obj_desc->package.elements; | ||
181 | + | ||
182 | + if (obj_desc->common.type == ACPI_TYPE_PACKAGE && | ||
183 | + obj_desc->package.count == 3 && | ||
184 | + cls_objects[0]->common.type == ACPI_TYPE_INTEGER && | ||
185 | + cls_objects[1]->common.type == ACPI_TYPE_INTEGER && | ||
186 | + cls_objects[2]->common.type == ACPI_TYPE_INTEGER) { | ||
187 | + | ||
188 | + /* Allocate a buffer for the CLS */ | ||
189 | + cls = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_pnp_device_id) + | ||
190 | + (acpi_size) 7); | ||
191 | + if (!cls) { | ||
192 | + status = AE_NO_MEMORY; | ||
193 | + goto cleanup; | ||
194 | + } | ||
195 | + | ||
196 | + cls->string = | ||
197 | + ACPI_ADD_PTR(char, cls, sizeof(struct acpi_pnp_device_id)); | ||
198 | + | ||
199 | + sprintf(cls->string, "%02x%02x%02x", | ||
200 | + (u8)ACPI_TO_INTEGER(cls_objects[0]->integer.value), | ||
201 | + (u8)ACPI_TO_INTEGER(cls_objects[1]->integer.value), | ||
202 | + (u8)ACPI_TO_INTEGER(cls_objects[2]->integer.value)); | ||
203 | + cls->length = 7; | ||
204 | + *return_id = cls; | ||
205 | + } | ||
206 | + | ||
207 | +cleanup: | ||
208 | + | ||
209 | + /* On exit, we must delete the return object */ | ||
210 | + | ||
211 | + acpi_ut_remove_reference(obj_desc); | ||
212 | + return_ACPI_STATUS(status); | ||
213 | +} | ||
214 | diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c | ||
215 | index 03141aa..ca6297b1 100644 | ||
216 | --- a/drivers/acpi/scan.c | ||
217 | +++ b/drivers/acpi/scan.c | ||
218 | @@ -1031,11 +1031,18 @@ static const struct acpi_device_id *__acpi_match_device( | ||
219 | if (!device || !device->status.present) | ||
220 | return NULL; | ||
221 | |||
222 | - list_for_each_entry(hwid, &device->pnp.ids, list) { | ||
223 | - /* First, check the ACPI/PNP IDs provided by the caller. */ | ||
224 | - for (id = ids; id->id[0]; id++) | ||
225 | - if (!strcmp((char *) id->id, hwid->id)) | ||
226 | - return id; | ||
227 | + list_for_each_entry(hwid, &device->pnp.ids, list) { | ||
228 | + for (id = ids; id->id[0] || id->cls; id++) { | ||
229 | + if (id->id[0] && !strcmp((char *) id->id, hwid->id)) { | ||
230 | + return id; | ||
231 | + } else if (id->cls) { | ||
232 | + char buf[7]; | ||
233 | + | ||
234 | + sprintf(buf, "%06x", id->cls); | ||
235 | + if (!strcmp(buf, hwid->id)) | ||
236 | + return id; | ||
237 | + } | ||
238 | + } | ||
239 | |||
240 | /* | ||
241 | * Next, check the special "PRP0001" ID and try to match the | ||
242 | @@ -2057,6 +2064,9 @@ static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp, | ||
243 | pnp->unique_id = kstrdup(info->unique_id.string, | ||
244 | GFP_KERNEL); | ||
245 | |||
246 | + if (info->valid & ACPI_VALID_CLS) | ||
247 | + acpi_add_id(pnp, info->cls.string); | ||
248 | + | ||
249 | kfree(info); | ||
250 | |||
251 | /* | ||
252 | diff --git a/include/acpi/acnames.h b/include/acpi/acnames.h | ||
253 | index 273de70..b52c0dc 100644 | ||
254 | --- a/include/acpi/acnames.h | ||
255 | +++ b/include/acpi/acnames.h | ||
256 | @@ -51,6 +51,7 @@ | ||
257 | #define METHOD_NAME__BBN "_BBN" | ||
258 | #define METHOD_NAME__CBA "_CBA" | ||
259 | #define METHOD_NAME__CID "_CID" | ||
260 | +#define METHOD_NAME__CLS "_CLS" | ||
261 | #define METHOD_NAME__CRS "_CRS" | ||
262 | #define METHOD_NAME__DDN "_DDN" | ||
263 | #define METHOD_NAME__HID "_HID" | ||
264 | diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h | ||
265 | index 1c3002e..0ad0c61 100644 | ||
266 | --- a/include/acpi/actypes.h | ||
267 | +++ b/include/acpi/actypes.h | ||
268 | @@ -1166,7 +1166,7 @@ struct acpi_device_info { | ||
269 | u32 name; /* ACPI object Name */ | ||
270 | acpi_object_type type; /* ACPI object Type */ | ||
271 | u8 param_count; /* If a method, required parameter count */ | ||
272 | - u8 valid; /* Indicates which optional fields are valid */ | ||
273 | + u16 valid; /* Indicates which optional fields are valid */ | ||
274 | u8 flags; /* Miscellaneous info */ | ||
275 | u8 highest_dstates[4]; /* _sx_d values: 0xFF indicates not valid */ | ||
276 | u8 lowest_dstates[5]; /* _sx_w values: 0xFF indicates not valid */ | ||
277 | @@ -1175,6 +1175,7 @@ struct acpi_device_info { | ||
278 | struct acpi_pnp_device_id hardware_id; /* _HID value */ | ||
279 | struct acpi_pnp_device_id unique_id; /* _UID value */ | ||
280 | struct acpi_pnp_device_id subsystem_id; /* _SUB value */ | ||
281 | + struct acpi_pnp_device_id cls; /* _CLS value */ | ||
282 | struct acpi_pnp_device_id_list compatible_id_list; /* _CID list <must be last> */ | ||
283 | }; | ||
284 | |||
285 | @@ -1192,6 +1193,7 @@ struct acpi_device_info { | ||
286 | #define ACPI_VALID_CID 0x20 | ||
287 | #define ACPI_VALID_SXDS 0x40 | ||
288 | #define ACPI_VALID_SXWS 0x80 | ||
289 | +#define ACPI_VALID_CLS 0x100 | ||
290 | |||
291 | /* Flags for _STA return value (current_status above) */ | ||
292 | |||
293 | diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h | ||
294 | index 3bfd567..8a958d1 100644 | ||
295 | --- a/include/linux/mod_devicetable.h | ||
296 | +++ b/include/linux/mod_devicetable.h | ||
297 | @@ -35,6 +35,7 @@ struct ieee1394_device_id { | ||
298 | __u32 specifier_id; | ||
299 | __u32 version; | ||
300 | kernel_ulong_t driver_data; | ||
301 | + __u32 cls; | ||
302 | }; | ||
303 | |||
304 | |||
305 | diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c | ||
306 | index fce36d0..aac0be3 100644 | ||
307 | --- a/scripts/mod/devicetable-offsets.c | ||
308 | +++ b/scripts/mod/devicetable-offsets.c | ||
309 | @@ -63,6 +63,7 @@ int main(void) | ||
310 | |||
311 | DEVID(acpi_device_id); | ||
312 | DEVID_FIELD(acpi_device_id, id); | ||
313 | + DEVID_FIELD(acpi_device_id, cls); | ||
314 | |||
315 | DEVID(pnp_device_id); | ||
316 | DEVID_FIELD(pnp_device_id, id); | ||
317 | diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c | ||
318 | index 78691d5..f5599ad 100644 | ||
319 | --- a/scripts/mod/file2alias.c | ||
320 | +++ b/scripts/mod/file2alias.c | ||
321 | @@ -511,12 +511,22 @@ static int do_serio_entry(const char *filename, | ||
322 | } | ||
323 | ADD_TO_DEVTABLE("serio", serio_device_id, do_serio_entry); | ||
324 | |||
325 | -/* looks like: "acpi:ACPI0003 or acpi:PNP0C0B" or "acpi:LNXVIDEO" */ | ||
326 | +/* looks like: "acpi:ACPI0003" or "acpi:PNP0C0B" or "acpi:LNXVIDEO" or | ||
327 | + * "acpi:bbsspp" (bb=base-class, ss=sub-class, pp=prog-if) | ||
328 | + * | ||
329 | + * NOTE: * Each driver should use one of the following : _HID, _CIDs or _CLS. | ||
330 | + */ | ||
331 | static int do_acpi_entry(const char *filename, | ||
332 | void *symval, char *alias) | ||
333 | { | ||
334 | DEF_FIELD_ADDR(symval, acpi_device_id, id); | ||
335 | - sprintf(alias, "acpi*:%s:*", *id); | ||
336 | + DEF_FIELD_ADDR(symval, acpi_device_id, cls); | ||
337 | + | ||
338 | + if (id && strlen((const char *)*id)) | ||
339 | + sprintf(alias, "acpi*:%s:*", *id); | ||
340 | + else if (cls) | ||
341 | + sprintf(alias, "acpi*:%06x:*", *cls); | ||
342 | + | ||
343 | return 1; | ||
344 | } | ||
345 | ADD_TO_DEVTABLE("acpi", acpi_device_id, do_acpi_entry); | ||
346 | -- | ||
347 | 1.9.1 | ||
348 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/412-2-styx-linux-tracking.git-390adff766de2d7117ec666674d114dfd5b5a911.patch b/recipes-kernel/linux/linux-hierofalcon/412-2-styx-linux-tracking.git-390adff766de2d7117ec666674d114dfd5b5a911.patch new file mode 100644 index 0000000..20d6b7b --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/412-2-styx-linux-tracking.git-390adff766de2d7117ec666674d114dfd5b5a911.patch | |||
@@ -0,0 +1,90 @@ | |||
1 | From c6824811936cbbdb9a13100b23b2f39b307b571f Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Mon, 10 Aug 2015 17:28:23 +0200 | ||
4 | Subject: [PATCH] Subject: [PATCH] ata: ahci_platform: Add ACPI _CLS matching | ||
5 | |||
6 | Ported from 3.19 kernel: | ||
7 | |||
8 | This patch adds ACPI supports for AHCI platform driver, which uses _CLS | ||
9 | method to match the device. | ||
10 | |||
11 | The following is an example of ASL structure in DSDT for a SATA controller, | ||
12 | which contains _CLS package to be matched by the ahci_platform driver: | ||
13 | |||
14 | Device (AHC0) // AHCI Controller | ||
15 | { | ||
16 | Name(_HID, "AMDI0600") | ||
17 | Name (_CCA, 1) | ||
18 | Name (_CLS, Package (3) | ||
19 | { | ||
20 | 0x01, // Base Class: Mass Storage | ||
21 | 0x06, // Sub-Class: serial ATA | ||
22 | 0x01, // Interface: AHCI | ||
23 | }) | ||
24 | Name (_CRS, ResourceTemplate () | ||
25 | { | ||
26 | Memory32Fixed (ReadWrite, 0xE0300000, 0x00010000) | ||
27 | Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive,,,) { 387 } | ||
28 | }) | ||
29 | } | ||
30 | |||
31 | Also, since ATA driver should not require PCI support for ATA_ACPI, | ||
32 | this patch removes dependency in the driver/ata/Kconfig. | ||
33 | |||
34 | Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com> | ||
35 | |||
36 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
37 | --- | ||
38 | drivers/ata/Kconfig | 2 +- | ||
39 | drivers/ata/ahci_platform.c | 9 +++++++++ | ||
40 | 2 files changed, 10 insertions(+), 1 deletion(-) | ||
41 | |||
42 | diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig | ||
43 | index 9dca4b9..7954ea2 100644 | ||
44 | --- a/drivers/ata/Kconfig | ||
45 | +++ b/drivers/ata/Kconfig | ||
46 | @@ -48,7 +48,7 @@ config ATA_VERBOSE_ERROR | ||
47 | |||
48 | config ATA_ACPI | ||
49 | bool "ATA ACPI Support" | ||
50 | - depends on ACPI && PCI | ||
51 | + depends on ACPI | ||
52 | default y | ||
53 | help | ||
54 | This option adds support for ATA-related ACPI objects. | ||
55 | diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c | ||
56 | index 78d6ae0..c0c055d 100644 | ||
57 | --- a/drivers/ata/ahci_platform.c | ||
58 | +++ b/drivers/ata/ahci_platform.c | ||
59 | @@ -20,6 +20,8 @@ | ||
60 | #include <linux/platform_device.h> | ||
61 | #include <linux/libata.h> | ||
62 | #include <linux/ahci_platform.h> | ||
63 | +#include <linux/acpi.h> | ||
64 | +#include <linux/pci_ids.h> | ||
65 | #include "ahci.h" | ||
66 | |||
67 | #define DRV_NAME "ahci" | ||
68 | @@ -78,12 +80,19 @@ static const struct of_device_id ahci_of_match[] = { | ||
69 | }; | ||
70 | MODULE_DEVICE_TABLE(of, ahci_of_match); | ||
71 | |||
72 | +static const struct acpi_device_id ahci_acpi_match[] = { | ||
73 | + { "", 0, PCI_CLASS_STORAGE_SATA_AHCI }, | ||
74 | + {}, | ||
75 | +}; | ||
76 | +MODULE_DEVICE_TABLE(acpi, ahci_acpi_match); | ||
77 | + | ||
78 | static struct platform_driver ahci_driver = { | ||
79 | .probe = ahci_probe, | ||
80 | .remove = ata_platform_remove_one, | ||
81 | .driver = { | ||
82 | .name = DRV_NAME, | ||
83 | .of_match_table = ahci_of_match, | ||
84 | + .acpi_match_table = ahci_acpi_match, | ||
85 | .pm = &ahci_pm_ops, | ||
86 | }, | ||
87 | }; | ||
88 | -- | ||
89 | 1.9.1 | ||
90 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/412-3-styx-linux-tracking.git-427c918b150e5f9c25ea36b3d640e511a08abb5f.patch b/recipes-kernel/linux/linux-hierofalcon/412-3-styx-linux-tracking.git-427c918b150e5f9c25ea36b3d640e511a08abb5f.patch new file mode 100644 index 0000000..b32044d --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/412-3-styx-linux-tracking.git-427c918b150e5f9c25ea36b3d640e511a08abb5f.patch | |||
@@ -0,0 +1,211 @@ | |||
1 | From 8c969157c0ac60d23ff2102ca0b5a893cedf2fad Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Mon, 10 Aug 2015 17:53:12 +0200 | ||
4 | Subject: [PATCH] Subject: [PATCH] pci-host-generic | ||
5 | |||
6 | Ported from 3.19 kernel: | ||
7 | |||
8 | From: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com> | ||
9 | Date: Tue, 20 Jan 2015 19:30:58 -0600 | ||
10 | |||
11 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
12 | --- | ||
13 | drivers/pci/host/Kconfig | 2 +- | ||
14 | drivers/pci/host/pci-host-generic.c | 97 ++++++++++++++++++++++++++++++++----- | ||
15 | 2 files changed, 87 insertions(+), 12 deletions(-) | ||
16 | |||
17 | diff --git a/drivers/pci/host/Kconfig b/drivers/pci/host/Kconfig | ||
18 | index 1dfb567..aeca260 100644 | ||
19 | --- a/drivers/pci/host/Kconfig | ||
20 | +++ b/drivers/pci/host/Kconfig | ||
21 | @@ -53,7 +53,7 @@ config PCI_RCAR_GEN2_PCIE | ||
22 | |||
23 | config PCI_HOST_GENERIC | ||
24 | bool "Generic PCI host controller" | ||
25 | - depends on ARM && OF | ||
26 | + depends on (ARM || ARM64) && OF | ||
27 | help | ||
28 | Say Y here if you want to support a simple generic PCI host | ||
29 | controller, such as the one emulated by kvmtool. | ||
30 | diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c | ||
31 | index ba46e58..01931e8 100644 | ||
32 | --- a/drivers/pci/host/pci-host-generic.c | ||
33 | +++ b/drivers/pci/host/pci-host-generic.c | ||
34 | @@ -44,12 +44,21 @@ struct gen_pci { | ||
35 | struct list_head resources; | ||
36 | }; | ||
37 | |||
38 | +#ifdef CONFIG_ARM64 | ||
39 | +#define bus_to_gen_pci(b) \ | ||
40 | + ((struct gen_pci *)b->sysdata) | ||
41 | +#else | ||
42 | +#define bus_to_gen_pci(b) \ | ||
43 | + ((struct gen_pci *) \ | ||
44 | + (((struct pci_sys_data *) \ | ||
45 | + (bus->sysdata))->private_data)) | ||
46 | +#endif | ||
47 | + | ||
48 | static void __iomem *gen_pci_map_cfg_bus_cam(struct pci_bus *bus, | ||
49 | unsigned int devfn, | ||
50 | int where) | ||
51 | { | ||
52 | - struct pci_sys_data *sys = bus->sysdata; | ||
53 | - struct gen_pci *pci = sys->private_data; | ||
54 | + struct gen_pci *pci = bus_to_gen_pci(bus); | ||
55 | resource_size_t idx = bus->number - pci->cfg.bus_range->start; | ||
56 | |||
57 | return pci->cfg.win[idx] + ((devfn << 8) | where); | ||
58 | @@ -64,8 +73,7 @@ static void __iomem *gen_pci_map_cfg_bus_ecam(struct pci_bus *bus, | ||
59 | unsigned int devfn, | ||
60 | int where) | ||
61 | { | ||
62 | - struct pci_sys_data *sys = bus->sysdata; | ||
63 | - struct gen_pci *pci = sys->private_data; | ||
64 | + struct gen_pci *pci = bus_to_gen_pci(bus); | ||
65 | resource_size_t idx = bus->number - pci->cfg.bus_range->start; | ||
66 | |||
67 | return pci->cfg.win[idx] + ((devfn << 12) | where); | ||
68 | @@ -94,6 +102,13 @@ MODULE_DEVICE_TABLE(of, gen_pci_of_match); | ||
69 | |||
70 | static void gen_pci_release_of_pci_ranges(struct gen_pci *pci) | ||
71 | { | ||
72 | + struct pci_host_bridge_window *win; | ||
73 | + | ||
74 | + list_for_each_entry(win, &pci->resources, list) | ||
75 | + /* Release only requested resources */ | ||
76 | + if (win->res->parent) | ||
77 | + release_resource(win->res); | ||
78 | + | ||
79 | pci_free_resource_list(&pci->resources); | ||
80 | } | ||
81 | |||
82 | @@ -117,11 +132,6 @@ static int gen_pci_parse_request_of_pci_ranges(struct gen_pci *pci) | ||
83 | case IORESOURCE_IO: | ||
84 | parent = &ioport_resource; | ||
85 | err = pci_remap_iospace(res, iobase); | ||
86 | - if (err) { | ||
87 | - dev_warn(dev, "error %d: failed to map resource %pR\n", | ||
88 | - err, res); | ||
89 | - continue; | ||
90 | - } | ||
91 | break; | ||
92 | case IORESOURCE_MEM: | ||
93 | parent = &iomem_resource; | ||
94 | @@ -129,11 +139,20 @@ static int gen_pci_parse_request_of_pci_ranges(struct gen_pci *pci) | ||
95 | break; | ||
96 | case IORESOURCE_BUS: | ||
97 | pci->cfg.bus_range = res; | ||
98 | + continue; | ||
99 | default: | ||
100 | + err = -EINVAL; | ||
101 | continue; | ||
102 | } | ||
103 | |||
104 | - err = devm_request_resource(dev, parent, res); | ||
105 | + if (err) { | ||
106 | + dev_warn(dev, | ||
107 | + "error %d: failed to add resource %pR\n", err, | ||
108 | + res); | ||
109 | + continue; | ||
110 | + } | ||
111 | + | ||
112 | + err = request_resource(parent, res); | ||
113 | if (err) | ||
114 | goto out_release_res; | ||
115 | } | ||
116 | @@ -198,12 +217,51 @@ static int gen_pci_parse_map_cfg_windows(struct gen_pci *pci) | ||
117 | return 0; | ||
118 | } | ||
119 | |||
120 | +#ifndef CONFIG_ARM64 | ||
121 | static int gen_pci_setup(int nr, struct pci_sys_data *sys) | ||
122 | { | ||
123 | struct gen_pci *pci = sys->private_data; | ||
124 | list_splice_init(&pci->resources, &sys->resources); | ||
125 | return 1; | ||
126 | } | ||
127 | +#endif | ||
128 | + | ||
129 | +#ifdef CONFIG_ARM64 | ||
130 | +struct pci_bus *gen_scan_root_bus(struct device *parent, int bus, | ||
131 | + struct pci_ops *ops, void *sysdata, | ||
132 | + struct list_head *resources) | ||
133 | +{ | ||
134 | + struct pci_host_bridge_window *window; | ||
135 | + bool found = false; | ||
136 | + struct pci_bus *b; | ||
137 | + int max; | ||
138 | + | ||
139 | + list_for_each_entry(window, resources, list) | ||
140 | + if (window->res->flags & IORESOURCE_BUS) { | ||
141 | + found = true; | ||
142 | + break; | ||
143 | + } | ||
144 | + | ||
145 | + b = pci_create_root_bus(parent, bus, ops, sysdata, resources); | ||
146 | + if (!b) | ||
147 | + return NULL; | ||
148 | + | ||
149 | + if (!found) { | ||
150 | + dev_info(&b->dev, | ||
151 | + "No busn resource found for root bus, will use [bus %02x-ff]\n", | ||
152 | + bus); | ||
153 | + pci_bus_insert_busn_res(b, bus, 255); | ||
154 | + } | ||
155 | + | ||
156 | + max = pci_scan_child_bus(b); | ||
157 | + | ||
158 | + if (!found) | ||
159 | + pci_bus_update_busn_res_end(b, max); | ||
160 | + | ||
161 | + pci_bus_add_devices(b); | ||
162 | + return b; | ||
163 | +} | ||
164 | +#endif | ||
165 | |||
166 | static int gen_pci_probe(struct platform_device *pdev) | ||
167 | { | ||
168 | @@ -214,6 +272,7 @@ static int gen_pci_probe(struct platform_device *pdev) | ||
169 | struct device *dev = &pdev->dev; | ||
170 | struct device_node *np = dev->of_node; | ||
171 | struct gen_pci *pci = devm_kzalloc(dev, sizeof(*pci), GFP_KERNEL); | ||
172 | +#ifndef CONFIG_ARM64 | ||
173 | struct hw_pci hw = { | ||
174 | .nr_controllers = 1, | ||
175 | .private_data = (void **)&pci, | ||
176 | @@ -221,6 +280,9 @@ static int gen_pci_probe(struct platform_device *pdev) | ||
177 | .map_irq = of_irq_parse_and_map_pci, | ||
178 | .ops = &gen_pci_ops, | ||
179 | }; | ||
180 | +#else | ||
181 | + struct pci_bus *bus; | ||
182 | +#endif | ||
183 | |||
184 | if (!pci) | ||
185 | return -ENOMEM; | ||
186 | @@ -257,8 +319,21 @@ static int gen_pci_probe(struct platform_device *pdev) | ||
187 | gen_pci_release_of_pci_ranges(pci); | ||
188 | return err; | ||
189 | } | ||
190 | - | ||
191 | +#ifdef CONFIG_ARM64 | ||
192 | + bus = gen_scan_root_bus(&pdev->dev, pci->cfg.bus_range->start, | ||
193 | + &gen_pci_ops, pci, &pci->resources); | ||
194 | + if (!bus) { | ||
195 | + dev_err(&pdev->dev, "failed to enable PCIe ports\n"); | ||
196 | + return -ENODEV; | ||
197 | + } | ||
198 | + | ||
199 | + if (!pci_has_flag(PCI_PROBE_ONLY)) { | ||
200 | + pci_bus_size_bridges(bus); | ||
201 | + pci_bus_assign_resources(bus); | ||
202 | + } | ||
203 | +#else | ||
204 | pci_common_init_dev(dev, &hw); | ||
205 | +#endif /* CONFIG_ARM64 */ | ||
206 | return 0; | ||
207 | } | ||
208 | |||
209 | -- | ||
210 | 1.9.1 | ||
211 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/412-4-styx-linux-tracking.git-d1072e3d950aa6e348313a31395091003611f794.patch b/recipes-kernel/linux/linux-hierofalcon/412-4-styx-linux-tracking.git-d1072e3d950aa6e348313a31395091003611f794.patch new file mode 100644 index 0000000..51f348e --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/412-4-styx-linux-tracking.git-d1072e3d950aa6e348313a31395091003611f794.patch | |||
@@ -0,0 +1,50 @@ | |||
1 | From a0f4d0a183159646da9eacd6645c9c8de1fe958c Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Mon, 10 Aug 2015 18:05:08 +0200 | ||
4 | Subject: [PATCH] [PATCH] probe-only | ||
5 | |||
6 | From: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com> | ||
7 | Date: Tue, 20 Jan 2015 19:48:59 -0600 | ||
8 | |||
9 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
10 | --- | ||
11 | drivers/pci/pci.c | 8 +++++++- | ||
12 | drivers/pci/setup-bus.c | 3 ++- | ||
13 | 2 files changed, 9 insertions(+), 2 deletions(-) | ||
14 | |||
15 | diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c | ||
16 | index acc4b6e..221f47f 100644 | ||
17 | --- a/drivers/pci/pci.c | ||
18 | +++ b/drivers/pci/pci.c | ||
19 | @@ -1198,7 +1198,13 @@ EXPORT_SYMBOL_GPL(pci_load_and_free_saved_state); | ||
20 | |||
21 | int __weak pcibios_enable_device(struct pci_dev *dev, int bars) | ||
22 | { | ||
23 | - return pci_enable_resources(dev, bars); | ||
24 | + int err; | ||
25 | + | ||
26 | + if (!pci_has_flag(PCI_PROBE_ONLY)) { | ||
27 | + err = pci_enable_resources(dev, bars); | ||
28 | + if (err < 0) | ||
29 | + return err; | ||
30 | + } | ||
31 | } | ||
32 | |||
33 | static int do_pci_enable_device(struct pci_dev *dev, int bars) | ||
34 | diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c | ||
35 | index 508cc56..029222c 100644 | ||
36 | --- a/drivers/pci/setup-bus.c | ||
37 | +++ b/drivers/pci/setup-bus.c | ||
38 | @@ -1737,7 +1737,8 @@ void __init pci_assign_unassigned_resources(void) | ||
39 | struct pci_bus *root_bus; | ||
40 | |||
41 | list_for_each_entry(root_bus, &pci_root_buses, node) | ||
42 | - pci_assign_unassigned_root_bus_resources(root_bus); | ||
43 | + if (!pci_has_flag(PCI_PROBE_ONLY)) | ||
44 | + pci_assign_unassigned_root_bus_resources(root_bus); | ||
45 | } | ||
46 | |||
47 | void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge) | ||
48 | -- | ||
49 | 1.9.1 | ||
50 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/412-5-styx-linux-tracking.git-2a80b31ff435cd274a61d685a4861bf0da461c90.patch b/recipes-kernel/linux/linux-hierofalcon/412-5-styx-linux-tracking.git-2a80b31ff435cd274a61d685a4861bf0da461c90.patch new file mode 100644 index 0000000..9d9af0e --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/412-5-styx-linux-tracking.git-2a80b31ff435cd274a61d685a4861bf0da461c90.patch | |||
@@ -0,0 +1,384 @@ | |||
1 | From 4343fa95a5f0e2e9c32faecc05e4aa1e12e27f72 Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Tue, 11 Aug 2015 13:21:33 +0200 | ||
4 | Subject: [PATCH] [PATCH] DO NOT UPSTREAM YET: Clean up GIC irq domain for ACPI | ||
5 | |||
6 | From: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com> | ||
7 | Date: Tue, 20 Jan 2015 20:02:28 -0600 | ||
8 | |||
9 | Instead of using the irq_default_domain, define the acpi_irq_domain. | ||
10 | This still have the same assumption that ACPI only support a single | ||
11 | GIC domain. | ||
12 | |||
13 | Also, rename acpi_gic_init() to acpi_irq_init() | ||
14 | |||
15 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
16 | --- | ||
17 | arch/arm64/kernel/acpi.c | 14 ++++-- | ||
18 | drivers/acpi/gsi.c | 31 ++++++++++---- | ||
19 | drivers/irqchip/irq-gic.c | 83 ++++++++++++++++++++++++++++++------ | ||
20 | drivers/irqchip/irqchip.c | 2 +- | ||
21 | drivers/pci/pci-acpi.c | 25 +++++++++++ | ||
22 | include/linux/irqchip/arm-gic-acpi.h | 6 ++- | ||
23 | include/linux/irqchip/arm-gic.h | 17 ++++++++ | ||
24 | 7 files changed, 151 insertions(+), 27 deletions(-) | ||
25 | |||
26 | diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c | ||
27 | index 8b83955..ea80ce2 100644 | ||
28 | --- a/arch/arm64/kernel/acpi.c | ||
29 | +++ b/arch/arm64/kernel/acpi.c | ||
30 | @@ -319,7 +319,7 @@ void __init acpi_boot_table_init(void) | ||
31 | } | ||
32 | } | ||
33 | |||
34 | -void __init acpi_gic_init(void) | ||
35 | +void __init acpi_irq_init(void) | ||
36 | { | ||
37 | struct acpi_table_header *table; | ||
38 | acpi_status status; | ||
39 | @@ -329,6 +329,14 @@ void __init acpi_gic_init(void) | ||
40 | if (acpi_disabled) | ||
41 | return; | ||
42 | |||
43 | + /** | ||
44 | + * NOTE: We need to declare this before we initialize the GIC | ||
45 | + * so that we can use pointers to MADT table and MSI_FRAME sub-table | ||
46 | + * for reference. | ||
47 | + */ | ||
48 | + acpi_gbl_permanent_mmap = 1; | ||
49 | + | ||
50 | + | ||
51 | status = acpi_get_table_with_size(ACPI_SIG_MADT, 0, &table, &tbl_size); | ||
52 | if (ACPI_FAILURE(status)) { | ||
53 | const char *msg = acpi_format_exception(status); | ||
54 | @@ -337,8 +345,8 @@ void __init acpi_gic_init(void) | ||
55 | return; | ||
56 | } | ||
57 | |||
58 | - err = gic_v2_acpi_init(table); | ||
59 | - if (err) | ||
60 | + err = gic_v2_acpi_init(table, &acpi_irq_domain); | ||
61 | + if (err || !acpi_irq_domain) | ||
62 | pr_err("Failed to initialize GIC IRQ controller"); | ||
63 | |||
64 | early_acpi_os_unmap_memory((char *)table, tbl_size); | ||
65 | diff --git a/drivers/acpi/gsi.c b/drivers/acpi/gsi.c | ||
66 | index 38208f2..7f1b8a0 100644 | ||
67 | --- a/drivers/acpi/gsi.c | ||
68 | +++ b/drivers/acpi/gsi.c | ||
69 | @@ -11,6 +11,7 @@ | ||
70 | #include <linux/acpi.h> | ||
71 | #include <linux/irq.h> | ||
72 | #include <linux/irqdomain.h> | ||
73 | +#include <linux/of.h> | ||
74 | |||
75 | enum acpi_irq_model_id acpi_irq_model; | ||
76 | |||
77 | @@ -43,6 +44,8 @@ static unsigned int acpi_gsi_get_irq_type(int trigger, int polarity) | ||
78 | * Returns: linux IRQ number on success (>0) | ||
79 | * -EINVAL on failure | ||
80 | */ | ||
81 | +static struct irq_domain *acpi_irq_domain; | ||
82 | + | ||
83 | int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) | ||
84 | { | ||
85 | /* | ||
86 | @@ -50,7 +53,7 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) | ||
87 | * the mapping corresponding to default domain by passing NULL | ||
88 | * as irq_domain parameter | ||
89 | */ | ||
90 | - *irq = irq_find_mapping(NULL, gsi); | ||
91 | + *irq = irq_find_mapping(acpi_irq_domain, gsi); | ||
92 | /* | ||
93 | * *irq == 0 means no mapping, that should | ||
94 | * be reported as a failure | ||
95 | @@ -74,20 +77,32 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger, | ||
96 | { | ||
97 | unsigned int irq; | ||
98 | unsigned int irq_type = acpi_gsi_get_irq_type(trigger, polarity); | ||
99 | + struct gic_irq_alloc_info info; | ||
100 | + struct irq_data *d; | ||
101 | |||
102 | /* | ||
103 | * There is no way at present to look-up the IRQ domain on ACPI, | ||
104 | * hence always create mapping referring to the default domain | ||
105 | * by passing NULL as irq_domain parameter | ||
106 | */ | ||
107 | - irq = irq_create_mapping(NULL, gsi); | ||
108 | - if (!irq) | ||
109 | - return -EINVAL; | ||
110 | + if (!acpi_irq_domain) | ||
111 | + BUG(); | ||
112 | + | ||
113 | + if (gic_init_irq_alloc_info(GIC_INT_TYPE_NONE, | ||
114 | + gsi, irq_type, NULL, &info) < 0) | ||
115 | + return -EINVAL; | ||
116 | + | ||
117 | + irq = __irq_domain_alloc_irqs(acpi_irq_domain, -1, 1, | ||
118 | + dev_to_node(dev), &info, false); | ||
119 | + if (irq < 0) | ||
120 | + return -ENOSPC; | ||
121 | + | ||
122 | + d = irq_domain_get_irq_data(acpi_irq_domain, irq); | ||
123 | + if (!d) | ||
124 | + return -EFAULT; | ||
125 | + | ||
126 | + d->chip->irq_set_type(d, irq_type); | ||
127 | |||
128 | - /* Set irq type if specified and different than the current one */ | ||
129 | - if (irq_type != IRQ_TYPE_NONE && | ||
130 | - irq_type != irq_get_trigger_type(irq)) | ||
131 | - irq_set_irq_type(irq, irq_type); | ||
132 | return irq; | ||
133 | } | ||
134 | EXPORT_SYMBOL_GPL(acpi_register_gsi); | ||
135 | diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c | ||
136 | index 01999d7..997d073 100644 | ||
137 | --- a/drivers/irqchip/irq-gic.c | ||
138 | +++ b/drivers/irqchip/irq-gic.c | ||
139 | @@ -854,10 +854,13 @@ static int gic_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, | ||
140 | int i, ret; | ||
141 | irq_hw_number_t hwirq; | ||
142 | unsigned int type = IRQ_TYPE_NONE; | ||
143 | - struct of_phandle_args *irq_data = arg; | ||
144 | + struct gic_irq_alloc_info *info = arg; | ||
145 | + u32 intspec[3]; | ||
146 | |||
147 | - ret = gic_irq_domain_xlate(domain, irq_data->np, irq_data->args, | ||
148 | - irq_data->args_count, &hwirq, &type); | ||
149 | + intspec[0] = info->gic_int_type; | ||
150 | + intspec[1] = info->hwirq; | ||
151 | + intspec[2] = info->irq_type; | ||
152 | + ret = gic_irq_domain_xlate(domain, info->ref, intspec, 3, &hwirq, &type); | ||
153 | if (ret) | ||
154 | return ret; | ||
155 | |||
156 | @@ -867,6 +870,51 @@ static int gic_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, | ||
157 | return 0; | ||
158 | } | ||
159 | |||
160 | +int gic_init_irq_alloc_info(unsigned int gic_int_type, unsigned int irq, | ||
161 | + unsigned int irq_type, void *ref, | ||
162 | + struct gic_irq_alloc_info *info) | ||
163 | +{ | ||
164 | + if (!info) | ||
165 | + return -EINVAL; | ||
166 | + | ||
167 | + if ((irq_type & IRQ_TYPE_SENSE_MASK) != IRQ_TYPE_LEVEL_HIGH && | ||
168 | + (irq_type & IRQ_TYPE_SENSE_MASK) != IRQ_TYPE_EDGE_RISING) | ||
169 | + return -EINVAL; | ||
170 | + | ||
171 | + info->ref = ref; | ||
172 | + info->irq_type = irq_type; | ||
173 | + | ||
174 | + /* | ||
175 | + * ACPI have no bindings to indicate SPI or PPI, so we | ||
176 | + * use different mappings from DT in ACPI. | ||
177 | + * | ||
178 | + * For FDT | ||
179 | + * PPI interrupt: in the range [0, 15]; | ||
180 | + * SPI interrupt: in the range [0, 987]; | ||
181 | + * | ||
182 | + * For ACPI, GSI should be unique so using | ||
183 | + * the hwirq directly for the mapping: | ||
184 | + * PPI interrupt: in the range [16, 31]; | ||
185 | + * SPI interrupt: in the range [32, 1019]; | ||
186 | + */ | ||
187 | + | ||
188 | + if (gic_int_type != ~0U) { | ||
189 | + info->gic_int_type = gic_int_type; | ||
190 | + info->hwirq = irq; | ||
191 | + | ||
192 | + } else { | ||
193 | + if (irq < 32) { | ||
194 | + info->gic_int_type = GIC_INT_TYPE_PPI; | ||
195 | + info->hwirq = irq - 16; | ||
196 | + } else { | ||
197 | + info->gic_int_type = GIC_INT_TYPE_SPI; | ||
198 | + info->hwirq = irq - 32; | ||
199 | + } | ||
200 | + } | ||
201 | + | ||
202 | + return 0; | ||
203 | +} | ||
204 | + | ||
205 | static const struct irq_domain_ops gic_irq_domain_hierarchy_ops = { | ||
206 | .xlate = gic_irq_domain_xlate, | ||
207 | .alloc = gic_irq_domain_alloc, | ||
208 | @@ -945,7 +993,10 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start, | ||
209 | gic_irqs = 1020; | ||
210 | gic->gic_irqs = gic_irqs; | ||
211 | |||
212 | - if (node) { /* DT case */ | ||
213 | + if (!acpi_disabled) { /* ACPI case */ | ||
214 | + gic->domain = irq_domain_add_linear(node, gic_irqs, | ||
215 | + &gic_irq_domain_hierarchy_ops, gic); | ||
216 | + } else if (node) { /* DT case */ | ||
217 | gic->domain = irq_domain_add_linear(node, gic_irqs, | ||
218 | &gic_irq_domain_hierarchy_ops, | ||
219 | gic); | ||
220 | @@ -992,9 +1043,9 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start, | ||
221 | gic_pm_init(gic); | ||
222 | } | ||
223 | |||
224 | -#ifdef CONFIG_OF | ||
225 | static int gic_cnt __initdata; | ||
226 | |||
227 | +#ifdef CONFIG_OF | ||
228 | static int __init | ||
229 | gic_of_init(struct device_node *node, struct device_node *parent) | ||
230 | { | ||
231 | @@ -1086,7 +1137,7 @@ gic_acpi_parse_madt_distributor(struct acpi_subtable_header *header, | ||
232 | } | ||
233 | |||
234 | int __init | ||
235 | -gic_v2_acpi_init(struct acpi_table_header *table) | ||
236 | +gic_v2_acpi_init(struct acpi_table_header *table, struct irq_domain **domain) | ||
237 | { | ||
238 | void __iomem *cpu_base, *dist_base; | ||
239 | int count; | ||
240 | @@ -1130,13 +1181,19 @@ gic_v2_acpi_init(struct acpi_table_header *table) | ||
241 | return -ENOMEM; | ||
242 | } | ||
243 | |||
244 | - /* | ||
245 | - * Initialize zero GIC instance (no multi-GIC support). Also, set GIC | ||
246 | - * as default IRQ domain to allow for GSI registration and GSI to IRQ | ||
247 | - * number translation (see acpi_register_gsi() and acpi_gsi_to_irq()). | ||
248 | - */ | ||
249 | - gic_init_bases(0, -1, dist_base, cpu_base, 0, NULL); | ||
250 | - irq_set_default_host(gic_data[0].domain); | ||
251 | + gic_init_bases(gic_cnt, -1, dist_base, cpu_base, 0, NULL); | ||
252 | + *domain = gic_data[gic_cnt].domain; | ||
253 | + | ||
254 | + if (!*domain) { | ||
255 | + pr_err("Unable to create domain\n"); | ||
256 | + return -EFAULT; | ||
257 | + } | ||
258 | + | ||
259 | + if (IS_ENABLED(CONFIG_ARM_GIC_V2M)) { | ||
260 | + gicv2m_acpi_init(table, gic_data[gic_cnt].domain); | ||
261 | + } | ||
262 | + | ||
263 | + gic_cnt++; | ||
264 | |||
265 | acpi_irq_model = ACPI_IRQ_MODEL_GIC; | ||
266 | return 0; | ||
267 | diff --git a/drivers/irqchip/irqchip.c b/drivers/irqchip/irqchip.c | ||
268 | index afd1af3..0d3a8b1 100644 | ||
269 | --- a/drivers/irqchip/irqchip.c | ||
270 | +++ b/drivers/irqchip/irqchip.c | ||
271 | @@ -28,5 +28,5 @@ void __init irqchip_init(void) | ||
272 | { | ||
273 | of_irq_init(__irqchip_of_table); | ||
274 | |||
275 | - acpi_irq_init(); | ||
276 | + acpi_irq_init(); | ||
277 | } | ||
278 | diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c | ||
279 | index 6f6f175..fe42097 100644 | ||
280 | --- a/drivers/pci/pci-acpi.c | ||
281 | +++ b/drivers/pci/pci-acpi.c | ||
282 | @@ -12,6 +12,7 @@ | ||
283 | #include <linux/pci.h> | ||
284 | #include <linux/pci_hotplug.h> | ||
285 | #include <linux/module.h> | ||
286 | +#include <linux/msi.h> | ||
287 | #include <linux/pci-aspm.h> | ||
288 | #include <linux/pci-acpi.h> | ||
289 | #include <linux/pm_runtime.h> | ||
290 | @@ -714,3 +715,27 @@ static int __init acpi_pci_init(void) | ||
291 | return 0; | ||
292 | } | ||
293 | arch_initcall(acpi_pci_init); | ||
294 | + | ||
295 | +#ifdef CONFIG_PCI_MSI | ||
296 | +void pci_acpi_set_phb_msi_domain(struct pci_bus *bus) { | ||
297 | +#ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN | ||
298 | + u32 msi_frame_id = 0; | ||
299 | + int num; | ||
300 | + | ||
301 | + if (acpi_disabled) | ||
302 | + return; | ||
303 | + | ||
304 | + /** | ||
305 | + * Since ACPI 5.1 currently does not define | ||
306 | + * a way to associate MSI frame ID to a device, | ||
307 | + * we can only support single MSI frame at the moment. | ||
308 | + * Therefore, the id 0 is used as a default. | ||
309 | + */ | ||
310 | + num = msi_get_num_irq_domain(); | ||
311 | + if (num <= 0 || num > 1) | ||
312 | + return; | ||
313 | + | ||
314 | + dev_set_msi_domain(&bus->dev, irq_find_acpi_msi_domain(msi_frame_id)); | ||
315 | +#endif | ||
316 | +} | ||
317 | +#endif /* CONFIG_PCI_MSI */ | ||
318 | diff --git a/include/linux/irqchip/arm-gic-acpi.h b/include/linux/irqchip/arm-gic-acpi.h | ||
319 | index de3419e..fa8033b 100644 | ||
320 | --- a/include/linux/irqchip/arm-gic-acpi.h | ||
321 | +++ b/include/linux/irqchip/arm-gic-acpi.h | ||
322 | @@ -10,6 +10,8 @@ | ||
323 | #ifndef ARM_GIC_ACPI_H_ | ||
324 | #define ARM_GIC_ACPI_H_ | ||
325 | |||
326 | +#include <linux/irqchip/arm-gic.h> | ||
327 | + | ||
328 | #ifdef CONFIG_ACPI | ||
329 | |||
330 | /* | ||
331 | @@ -22,8 +24,8 @@ | ||
332 | |||
333 | struct acpi_table_header; | ||
334 | |||
335 | -int gic_v2_acpi_init(struct acpi_table_header *table); | ||
336 | -void acpi_gic_init(void); | ||
337 | +void acpi_irq_init(void); | ||
338 | +int gic_v2_acpi_init(struct acpi_table_header *table, struct irq_domain **domain); | ||
339 | #else | ||
340 | static inline void acpi_gic_init(void) { } | ||
341 | #endif | ||
342 | diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h | ||
343 | index 9de976b..f490f26 100644 | ||
344 | --- a/include/linux/irqchip/arm-gic.h | ||
345 | +++ b/include/linux/irqchip/arm-gic.h | ||
346 | @@ -89,12 +89,25 @@ | ||
347 | #define GICH_MISR_EOI (1 << 0) | ||
348 | #define GICH_MISR_U (1 << 1) | ||
349 | |||
350 | +#define GIC_INT_TYPE_SPI 0 | ||
351 | +#define GIC_INT_TYPE_PPI 1 | ||
352 | +#define GIC_INT_TYPE_NONE ~0U | ||
353 | + | ||
354 | #ifndef __ASSEMBLY__ | ||
355 | |||
356 | #include <linux/irqdomain.h> | ||
357 | |||
358 | struct device_node; | ||
359 | |||
360 | +struct gic_irq_alloc_info { | ||
361 | + | ||
362 | + enum irq_domain_ref_type ref_type; | ||
363 | + void *ref; | ||
364 | + unsigned int irq_type; | ||
365 | + unsigned int gic_int_type; | ||
366 | + unsigned int hwirq; | ||
367 | +}; | ||
368 | + | ||
369 | void gic_set_irqchip_flags(unsigned long flags); | ||
370 | void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, | ||
371 | u32 offset, struct device_node *); | ||
372 | @@ -114,5 +127,9 @@ int gic_get_cpu_id(unsigned int cpu); | ||
373 | void gic_migrate_target(unsigned int new_cpu_id); | ||
374 | unsigned long gic_get_sgir_physaddr(void); | ||
375 | |||
376 | +extern int gic_init_irq_alloc_info(unsigned int gic_int_type, unsigned int irq, | ||
377 | + unsigned int irq_type, void *ref, | ||
378 | + struct gic_irq_alloc_info *info); | ||
379 | + | ||
380 | #endif /* __ASSEMBLY */ | ||
381 | #endif | ||
382 | -- | ||
383 | 1.9.1 | ||
384 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/412-6-styx-linux-tracking.git-1c9b07fb461d87b41854fef3a07fff65e0d95113.patch b/recipes-kernel/linux/linux-hierofalcon/412-6-styx-linux-tracking.git-1c9b07fb461d87b41854fef3a07fff65e0d95113.patch new file mode 100644 index 0000000..6f5b57b --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/412-6-styx-linux-tracking.git-1c9b07fb461d87b41854fef3a07fff65e0d95113.patch | |||
@@ -0,0 +1,159 @@ | |||
1 | From 4f0837d4d1274b6e25d6bd76ac448e25592d6ea0 Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Tue, 11 Aug 2015 13:37:41 +0200 | ||
4 | Subject: [PATCH] [PATCH] DO NOT UPSTREAM YET: irqdomain | ||
5 | |||
6 | From: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com> | ||
7 | Date: Tue, 20 Jan 2015 20:02:28 -0600 | ||
8 | |||
9 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
10 | --- | ||
11 | include/linux/irqdomain.h | 14 +++++++++++++- | ||
12 | kernel/irq/irqdomain.c | 44 ++++++++++++++++++++++++++++++++++++-------- | ||
13 | 2 files changed, 49 insertions(+), 9 deletions(-) | ||
14 | |||
15 | diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h | ||
16 | index 676d730..ddd6602 100644 | ||
17 | --- a/include/linux/irqdomain.h | ||
18 | +++ b/include/linux/irqdomain.h | ||
19 | @@ -45,6 +45,11 @@ struct irq_data; | ||
20 | /* Number of irqs reserved for a legacy isa controller */ | ||
21 | #define NUM_ISA_INTERRUPTS 16 | ||
22 | |||
23 | +enum irq_domain_ref_type { | ||
24 | + IRQ_DOMAIN_REF_OF_DEV_NODE = 0, | ||
25 | + IRQ_DOMAIN_REF_ACPI_MSI_FRAME, | ||
26 | +}; | ||
27 | + | ||
28 | /** | ||
29 | * struct irq_domain_ops - Methods for irq_domain objects | ||
30 | * @match: Match an interrupt controller device node to a host, returns | ||
31 | @@ -61,7 +66,7 @@ struct irq_data; | ||
32 | * to setup the irq_desc when returning from map(). | ||
33 | */ | ||
34 | struct irq_domain_ops { | ||
35 | - int (*match)(struct irq_domain *d, struct device_node *node); | ||
36 | + int (*match)(struct irq_domain *d, enum irq_domain_ref_type type, void *data); | ||
37 | int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw); | ||
38 | void (*unmap)(struct irq_domain *d, unsigned int virq); | ||
39 | int (*xlate)(struct irq_domain *d, struct device_node *node, | ||
40 | @@ -116,6 +121,11 @@ struct irq_domain { | ||
41 | |||
42 | /* Optional data */ | ||
43 | struct device_node *of_node; | ||
44 | + enum irq_domain_ref_type type; | ||
45 | + union { | ||
46 | + struct device_node *of_node; | ||
47 | + void *acpi_ref; | ||
48 | + }; | ||
49 | struct irq_domain_chip_generic *gc; | ||
50 | #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY | ||
51 | struct irq_domain *parent; | ||
52 | @@ -163,6 +173,8 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node, | ||
53 | void *host_data); | ||
54 | extern struct irq_domain *irq_find_host(struct device_node *node); | ||
55 | extern void irq_set_default_host(struct irq_domain *host); | ||
56 | +extern struct irq_domain *irq_find_domain(enum irq_domain_ref_type type, | ||
57 | + void *ref); | ||
58 | |||
59 | /** | ||
60 | * irq_domain_add_linear() - Allocate and register a linear revmap irq_domain. | ||
61 | diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c | ||
62 | index 7fac311..0f0559f 100644 | ||
63 | --- a/kernel/irq/irqdomain.c | ||
64 | +++ b/kernel/irq/irqdomain.c | ||
65 | @@ -1,5 +1,6 @@ | ||
66 | #define pr_fmt(fmt) "irq: " fmt | ||
67 | |||
68 | +#include <linux/acpi.h> | ||
69 | #include <linux/debugfs.h> | ||
70 | #include <linux/hardirq.h> | ||
71 | #include <linux/interrupt.h> | ||
72 | @@ -187,10 +188,11 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node, | ||
73 | EXPORT_SYMBOL_GPL(irq_domain_add_legacy); | ||
74 | |||
75 | /** | ||
76 | - * irq_find_host() - Locates a domain for a given device node | ||
77 | - * @node: device-tree node of the interrupt controller | ||
78 | + * irq_find_domain() - Locates a domain for a given a refence pointer | ||
79 | + * @type: specify irq domain reference pointer type to be match | ||
80 | + * @ref: pointer to the reference data structure to be matched | ||
81 | */ | ||
82 | -struct irq_domain *irq_find_host(struct device_node *node) | ||
83 | +struct irq_domain *irq_find_domain(enum irq_domain_ref_type type, void *ref) | ||
84 | { | ||
85 | struct irq_domain *h, *found = NULL; | ||
86 | int rc; | ||
87 | @@ -202,10 +204,16 @@ struct irq_domain *irq_find_host(struct device_node *node) | ||
88 | */ | ||
89 | mutex_lock(&irq_domain_mutex); | ||
90 | list_for_each_entry(h, &irq_domain_list, link) { | ||
91 | - if (h->ops->match) | ||
92 | - rc = h->ops->match(h, node); | ||
93 | - else | ||
94 | - rc = (h->of_node != NULL) && (h->of_node == node); | ||
95 | + if (h->ops->match) { | ||
96 | + rc = h->ops->match(h, type, ref); | ||
97 | + } else if (type == IRQ_DOMAIN_REF_OF_DEV_NODE || | ||
98 | + type == IRQ_DOMAIN_REF_ACPI_MSI_FRAME) { | ||
99 | + /* Here, we just need to compare reference pointer */ | ||
100 | + rc = (h->of_node != NULL) && (h->of_node == ref); | ||
101 | + } else { | ||
102 | + /* For non-DT and non-ACPI reference, must specify match */ | ||
103 | + BUG(); | ||
104 | + } | ||
105 | |||
106 | if (rc) { | ||
107 | found = h; | ||
108 | @@ -215,6 +223,16 @@ struct irq_domain *irq_find_host(struct device_node *node) | ||
109 | mutex_unlock(&irq_domain_mutex); | ||
110 | return found; | ||
111 | } | ||
112 | +EXPORT_SYMBOL_GPL(irq_find_domain); | ||
113 | + | ||
114 | +/** | ||
115 | + * irq_find_host() - Locates a domain for a given device node | ||
116 | + * @node: device-tree node of the interrupt controller | ||
117 | + */ | ||
118 | +struct irq_domain *irq_find_host(struct device_node *node) | ||
119 | +{ | ||
120 | + return irq_find_domain(IRQ_DOMAIN_REF_OF_DEV_NODE, node); | ||
121 | +} | ||
122 | EXPORT_SYMBOL_GPL(irq_find_host); | ||
123 | |||
124 | /** | ||
125 | @@ -464,12 +482,16 @@ int irq_create_strict_mappings(struct irq_domain *domain, unsigned int irq_base, | ||
126 | } | ||
127 | EXPORT_SYMBOL_GPL(irq_create_strict_mappings); | ||
128 | |||
129 | +//SURAVEE: HACK | ||
130 | +#include <linux/irqchip/arm-gic.h> | ||
131 | + | ||
132 | unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data) | ||
133 | { | ||
134 | struct irq_domain *domain; | ||
135 | irq_hw_number_t hwirq; | ||
136 | unsigned int type = IRQ_TYPE_NONE; | ||
137 | int virq; | ||
138 | + struct gic_irq_alloc_info info; | ||
139 | |||
140 | domain = irq_data->np ? irq_find_host(irq_data->np) : irq_default_domain; | ||
141 | if (!domain) { | ||
142 | @@ -496,7 +518,13 @@ unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data) | ||
143 | if (virq) | ||
144 | return virq; | ||
145 | |||
146 | - virq = irq_domain_alloc_irqs(domain, 1, NUMA_NO_NODE, irq_data); | ||
147 | +//SURAVEE: TODO: Need to make this as part of irqdomain ops | ||
148 | + if (gic_init_irq_alloc_info(irq_data->args[0], irq_data->args[1], | ||
149 | + irq_data->args[2], irq_data->np, | ||
150 | + &info)) | ||
151 | + return 0; | ||
152 | + | ||
153 | + virq = irq_domain_alloc_irqs(domain, 1, NUMA_NO_NODE, &info); | ||
154 | if (virq <= 0) | ||
155 | return 0; | ||
156 | } else { | ||
157 | -- | ||
158 | 1.9.1 | ||
159 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/412-7-styx-linux-tracking.git-f9a9d954f23b967cd26338afda9a0a96afe62c25.patch b/recipes-kernel/linux/linux-hierofalcon/412-7-styx-linux-tracking.git-f9a9d954f23b967cd26338afda9a0a96afe62c25.patch new file mode 100644 index 0000000..16c2dbd --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/412-7-styx-linux-tracking.git-f9a9d954f23b967cd26338afda9a0a96afe62c25.patch | |||
@@ -0,0 +1,418 @@ | |||
1 | From 6082a087207706d5951768d2d48aaa2d21fc2c0d Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Tue, 11 Aug 2015 15:09:19 +0200 | ||
4 | Subject: [PATCH] DO NOT UPSTREAM YET: Introducing ACPI support for GICv2m | ||
5 | |||
6 | From: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com> | ||
7 | Date: Tue, 20 Jan 2015 23:21:20 -0600 | ||
8 | |||
9 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
10 | --- | ||
11 | drivers/irqchip/irq-gic-v2m.c | 193 ++++++++++++++++++++++++++--------- | ||
12 | drivers/pci/pci-acpi.c | 55 ++++++---- | ||
13 | include/linux/irqchip/arm-gic-acpi.h | 1 + | ||
14 | include/linux/pci-acpi.h | 3 + | ||
15 | 4 files changed, 185 insertions(+), 67 deletions(-) | ||
16 | |||
17 | diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c | ||
18 | index fdf7065..c32eb55 100644 | ||
19 | --- a/drivers/irqchip/irq-gic-v2m.c | ||
20 | +++ b/drivers/irqchip/irq-gic-v2m.c | ||
21 | @@ -15,6 +15,7 @@ | ||
22 | |||
23 | #define pr_fmt(fmt) "GICv2m: " fmt | ||
24 | |||
25 | +#include <linux/acpi.h> | ||
26 | #include <linux/irq.h> | ||
27 | #include <linux/irqdomain.h> | ||
28 | #include <linux/kernel.h> | ||
29 | @@ -22,6 +23,7 @@ | ||
30 | #include <linux/of_pci.h> | ||
31 | #include <linux/slab.h> | ||
32 | #include <linux/spinlock.h> | ||
33 | +#include <linux/irqchip/arm-gic.h> | ||
34 | |||
35 | /* | ||
36 | * MSI_TYPER: | ||
37 | @@ -45,7 +47,6 @@ | ||
38 | |||
39 | struct v2m_data { | ||
40 | spinlock_t msi_cnt_lock; | ||
41 | - struct msi_controller mchip; | ||
42 | struct resource res; /* GICv2m resource */ | ||
43 | void __iomem *base; /* GICv2m virt address */ | ||
44 | u32 spi_start; /* The SPI number that MSIs start */ | ||
45 | @@ -115,17 +116,17 @@ static int gicv2m_irq_gic_domain_alloc(struct irq_domain *domain, | ||
46 | unsigned int virq, | ||
47 | irq_hw_number_t hwirq) | ||
48 | { | ||
49 | - struct of_phandle_args args; | ||
50 | + struct gic_irq_alloc_info info; | ||
51 | struct irq_data *d; | ||
52 | int err; | ||
53 | |||
54 | - args.np = domain->parent->of_node; | ||
55 | - args.args_count = 3; | ||
56 | - args.args[0] = 0; | ||
57 | - args.args[1] = hwirq - 32; | ||
58 | - args.args[2] = IRQ_TYPE_EDGE_RISING; | ||
59 | + err = gic_init_irq_alloc_info(GIC_INT_TYPE_NONE, hwirq, | ||
60 | + IRQ_TYPE_EDGE_RISING, | ||
61 | + domain->parent->of_node, &info); | ||
62 | + if (err) | ||
63 | + return err; | ||
64 | |||
65 | - err = irq_domain_alloc_irqs_parent(domain, virq, 1, &args); | ||
66 | + err = irq_domain_alloc_irqs_parent(domain, virq, 1, &info); | ||
67 | if (err) | ||
68 | return err; | ||
69 | |||
70 | @@ -192,7 +193,7 @@ static void gicv2m_irq_domain_free(struct irq_domain *domain, | ||
71 | irq_domain_free_irqs_parent(domain, virq, nr_irqs); | ||
72 | } | ||
73 | |||
74 | -static const struct irq_domain_ops gicv2m_domain_ops = { | ||
75 | +static struct irq_domain_ops gicv2m_domain_ops = { | ||
76 | .alloc = gicv2m_irq_domain_alloc, | ||
77 | .free = gicv2m_irq_domain_free, | ||
78 | }; | ||
79 | @@ -213,11 +214,18 @@ static bool is_msi_spi_valid(u32 base, u32 num) | ||
80 | return true; | ||
81 | } | ||
82 | |||
83 | -static int __init gicv2m_init_one(struct device_node *node, | ||
84 | - struct irq_domain *parent) | ||
85 | +char gicv2m_msi_domain_name[] = "V2M-MSI"; | ||
86 | +char gicv2m_domain_name[] = "GICV2M"; | ||
87 | + | ||
88 | +static int __init gicv2m_init_one(struct irq_domain *parent, | ||
89 | + u32 *spi_start, u32 *nr_spis, | ||
90 | + struct resource *res, | ||
91 | + enum irq_domain_ref_type type, | ||
92 | + void *ref) | ||
93 | { | ||
94 | int ret; | ||
95 | struct v2m_data *v2m; | ||
96 | + struct irq_domain *inner_domain; | ||
97 | |||
98 | v2m = kzalloc(sizeof(struct v2m_data), GFP_KERNEL); | ||
99 | if (!v2m) { | ||
100 | @@ -225,23 +233,17 @@ static int __init gicv2m_init_one(struct device_node *node, | ||
101 | return -ENOMEM; | ||
102 | } | ||
103 | |||
104 | - ret = of_address_to_resource(node, 0, &v2m->res); | ||
105 | - if (ret) { | ||
106 | - pr_err("Failed to allocate v2m resource.\n"); | ||
107 | - goto err_free_v2m; | ||
108 | - } | ||
109 | - | ||
110 | - v2m->base = ioremap(v2m->res.start, resource_size(&v2m->res)); | ||
111 | + v2m->base = ioremap(res->start, resource_size(res)); | ||
112 | if (!v2m->base) { | ||
113 | pr_err("Failed to map GICv2m resource\n"); | ||
114 | ret = -ENOMEM; | ||
115 | goto err_free_v2m; | ||
116 | } | ||
117 | + memcpy(&v2m->res,res, sizeof(struct resource)); | ||
118 | |||
119 | - if (!of_property_read_u32(node, "arm,msi-base-spi", &v2m->spi_start) && | ||
120 | - !of_property_read_u32(node, "arm,msi-num-spis", &v2m->nr_spis)) { | ||
121 | - pr_info("Overriding V2M MSI_TYPER (base:%u, num:%u)\n", | ||
122 | - v2m->spi_start, v2m->nr_spis); | ||
123 | + if (*spi_start && *nr_spis) { | ||
124 | + v2m->spi_start = *spi_start; | ||
125 | + v2m->nr_spis = *nr_spis; | ||
126 | } else { | ||
127 | u32 typer = readl_relaxed(v2m->base + V2M_MSI_TYPER); | ||
128 | |||
129 | @@ -261,43 +263,50 @@ static int __init gicv2m_init_one(struct device_node *node, | ||
130 | goto err_iounmap; | ||
131 | } | ||
132 | |||
133 | - v2m->domain = irq_domain_add_tree(NULL, &gicv2m_domain_ops, v2m); | ||
134 | - if (!v2m->domain) { | ||
135 | + inner_domain = irq_domain_add_tree(node, &gicv2m_domain_ops, v2m); | ||
136 | + if (!inner_domain) { | ||
137 | pr_err("Failed to create GICv2m domain\n"); | ||
138 | ret = -ENOMEM; | ||
139 | goto err_free_bm; | ||
140 | } | ||
141 | |||
142 | - v2m->domain->parent = parent; | ||
143 | - v2m->mchip.of_node = node; | ||
144 | - v2m->mchip.domain = pci_msi_create_irq_domain(node, | ||
145 | - &gicv2m_msi_domain_info, | ||
146 | - v2m->domain); | ||
147 | - if (!v2m->mchip.domain) { | ||
148 | - pr_err("Failed to create MSI domain\n"); | ||
149 | - ret = -ENOMEM; | ||
150 | - goto err_free_domains; | ||
151 | - } | ||
152 | - | ||
153 | - spin_lock_init(&v2m->msi_cnt_lock); | ||
154 | - | ||
155 | - ret = of_pci_msi_chip_add(&v2m->mchip); | ||
156 | - if (ret) { | ||
157 | - pr_err("Failed to add msi_chip.\n"); | ||
158 | - goto err_free_domains; | ||
159 | - } | ||
160 | - | ||
161 | - pr_info("Node %s: range[%#lx:%#lx], SPI[%d:%d]\n", node->name, | ||
162 | - (unsigned long)v2m->res.start, (unsigned long)v2m->res.end, | ||
163 | - v2m->spi_start, (v2m->spi_start + v2m->nr_spis)); | ||
164 | + inner_domain->bus_token = DOMAIN_BUS_PLATFORM_MSI; | ||
165 | + inner_domain->name = gicv2m_domain_name; | ||
166 | + | ||
167 | + ret = -ENOMEM; | ||
168 | + if (type == IRQ_DOMAIN_REF_OF_DEV_NODE) { | ||
169 | + v2m->domain = pci_msi_create_irq_domain( | ||
170 | + (struct device_node *)ref, | ||
171 | + &gicv2m_msi_domain_info, | ||
172 | + inner_domain); | ||
173 | + if (!v2m->domain) { | ||
174 | + pr_err("Failed to create MSI domain\n"); | ||
175 | + goto err_free_domains; | ||
176 | + } | ||
177 | + } else { | ||
178 | + v2m->domain = pci_msi_create_irq_domain( NULL, | ||
179 | + &gicv2m_msi_domain_info, | ||
180 | + inner_domain); | ||
181 | + if (!v2m->domain) { | ||
182 | + pr_err("Failed to create MSI domain\n"); | ||
183 | + goto err_free_domains; | ||
184 | + } | ||
185 | + | ||
186 | + v2m->domain->type = type; | ||
187 | + v2m->domain->acpi_ref = ref; | ||
188 | + } | ||
189 | + | ||
190 | + v2m->domain->name = gicv2m_msi_domain_name; | ||
191 | + | ||
192 | + spin_lock_init(&v2m->msi_cnt_lock); | ||
193 | |||
194 | return 0; | ||
195 | |||
196 | err_free_domains: | ||
197 | - if (v2m->mchip.domain) | ||
198 | - irq_domain_remove(v2m->mchip.domain); | ||
199 | if (v2m->domain) | ||
200 | irq_domain_remove(v2m->domain); | ||
201 | + if (inner_domain) | ||
202 | + irq_domain_remove(inner_domain); | ||
203 | err_free_bm: | ||
204 | kfree(v2m->bm); | ||
205 | err_iounmap: | ||
206 | @@ -319,15 +328,101 @@ int __init gicv2m_of_init(struct device_node *node, struct irq_domain *parent) | ||
207 | |||
208 | for (child = of_find_matching_node(node, gicv2m_device_id); child; | ||
209 | child = of_find_matching_node(child, gicv2m_device_id)) { | ||
210 | + u32 spi_start = 0, nr_spis = 0; | ||
211 | + struct resource res; | ||
212 | + | ||
213 | if (!of_find_property(child, "msi-controller", NULL)) | ||
214 | continue; | ||
215 | |||
216 | - ret = gicv2m_init_one(child, parent); | ||
217 | + ret = of_address_to_resource(child, 0, &res); | ||
218 | + if (ret) { | ||
219 | + pr_err("Failed to allocate v2m resource.\n"); | ||
220 | + break; | ||
221 | + } | ||
222 | + | ||
223 | + if (!of_property_read_u32(child, "arm,msi-base-spi", &spi_start) && | ||
224 | + !of_property_read_u32(child, "arm,msi-num-spis", &nr_spis)) | ||
225 | + pr_info("Overriding V2M MSI_TYPER (base:%u, num:%u)\n", | ||
226 | + spi_start, nr_spis); | ||
227 | + | ||
228 | + ret = gicv2m_init_one(parent, &spi_start, &nr_spis, &res, | ||
229 | + IRQ_DOMAIN_REF_OF_DEV_NODE, child); | ||
230 | + | ||
231 | if (ret) { | ||
232 | of_node_put(node); | ||
233 | break; | ||
234 | } | ||
235 | + pr_info("Node %s: range[%#lx:%#lx], SPI[%d:%d]\n", child->name, | ||
236 | + (unsigned long)res.start, (unsigned long)res.end, | ||
237 | + spi_start, (spi_start + nr_spis)); | ||
238 | } | ||
239 | |||
240 | return ret; | ||
241 | } | ||
242 | + | ||
243 | +#ifdef CONFIG_ACPI | ||
244 | +static struct acpi_madt_generic_msi_frame *msi_frame; | ||
245 | + | ||
246 | +static int __init | ||
247 | +gicv2m_acpi_parse_madt_msi(struct acpi_subtable_header *header, | ||
248 | + const unsigned long end) | ||
249 | +{ | ||
250 | + struct acpi_madt_generic_msi_frame *frame; | ||
251 | + | ||
252 | + frame = (struct acpi_madt_generic_msi_frame *)header; | ||
253 | + if (BAD_MADT_ENTRY(frame, end)) | ||
254 | + return -EINVAL; | ||
255 | + | ||
256 | + if (msi_frame) | ||
257 | + pr_warn("Only one GIC MSI FRAME supported.\n"); | ||
258 | + else | ||
259 | + msi_frame = frame; | ||
260 | + | ||
261 | + return 0; | ||
262 | +} | ||
263 | + | ||
264 | +int __init gicv2m_acpi_init(struct acpi_table_header *table, | ||
265 | + struct irq_domain *parent) | ||
266 | +{ | ||
267 | + int ret = 0; | ||
268 | + int count, i; | ||
269 | + struct acpi_madt_generic_msi_frame *cur; | ||
270 | + | ||
271 | + count = acpi_parse_entries(ACPI_SIG_MADT, sizeof(struct acpi_table_madt), | ||
272 | + gicv2m_acpi_parse_madt_msi, table, | ||
273 | + ACPI_MADT_TYPE_GENERIC_MSI_FRAME, 0); | ||
274 | + | ||
275 | + if ((count <= 0) || !msi_frame) { | ||
276 | + pr_debug("No valid ACPI GIC MSI FRAME exist\n"); | ||
277 | + return 0; | ||
278 | + } | ||
279 | + | ||
280 | + for (i = 0, cur = msi_frame; i < count; i++, cur++) { | ||
281 | + struct resource res; | ||
282 | + u32 spi_start = 0, nr_spis = 0; | ||
283 | + | ||
284 | + res.start = cur->base_address; | ||
285 | + res.end = cur->base_address + 0x1000; | ||
286 | + | ||
287 | + if (cur->flags & ACPI_MADT_OVERRIDE_SPI_VALUES) { | ||
288 | + spi_start = cur->spi_base; | ||
289 | + nr_spis = cur->spi_count; | ||
290 | + | ||
291 | + pr_info("ACPI overriding V2M MSI_TYPER (base:%u, num:%u)\n", | ||
292 | + spi_start, nr_spis); | ||
293 | + } | ||
294 | + | ||
295 | + ret = gicv2m_init_one(parent, &spi_start, &nr_spis, &res, | ||
296 | + IRQ_DOMAIN_REF_ACPI_MSI_FRAME, msi_frame); | ||
297 | + if (ret) | ||
298 | + break; | ||
299 | + | ||
300 | + pr_info("MSI frame ID %u: range[%#lx:%#lx], SPI[%d:%d]\n", | ||
301 | + cur->msi_frame_id, | ||
302 | + (unsigned long)res.start, (unsigned long)res.end, | ||
303 | + spi_start, (spi_start + nr_spis)); | ||
304 | + } | ||
305 | + return ret; | ||
306 | +} | ||
307 | + | ||
308 | +#endif /* CONFIG_ACPI */ | ||
309 | diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c | ||
310 | index fe42097..fa0d8ec 100644 | ||
311 | --- a/drivers/pci/pci-acpi.c | ||
312 | +++ b/drivers/pci/pci-acpi.c | ||
313 | @@ -9,6 +9,7 @@ | ||
314 | |||
315 | #include <linux/delay.h> | ||
316 | #include <linux/init.h> | ||
317 | +#include <linux/irqdomain.h> | ||
318 | #include <linux/pci.h> | ||
319 | #include <linux/pci_hotplug.h> | ||
320 | #include <linux/module.h> | ||
321 | @@ -717,25 +718,43 @@ static int __init acpi_pci_init(void) | ||
322 | arch_initcall(acpi_pci_init); | ||
323 | |||
324 | #ifdef CONFIG_PCI_MSI | ||
325 | -void pci_acpi_set_phb_msi_domain(struct pci_bus *bus) { | ||
326 | +static struct acpi_madt_generic_msi_frame *msi_frame; | ||
327 | +static int | ||
328 | +pci_acpi_parse_madt_msi(struct acpi_subtable_header *header, | ||
329 | + const unsigned long end) | ||
330 | +{ | ||
331 | + struct acpi_madt_generic_msi_frame *frame; | ||
332 | + frame = (struct acpi_madt_generic_msi_frame *)header; | ||
333 | + if (BAD_MADT_ENTRY(frame, end)) | ||
334 | + return -EINVAL; | ||
335 | + | ||
336 | + /* We currently support one MSI frame only */ | ||
337 | + if (!msi_frame) | ||
338 | + msi_frame = frame; | ||
339 | + | ||
340 | + return 0; | ||
341 | +} | ||
342 | + | ||
343 | +void pci_acpi_set_phb_msi_domain(struct pci_bus *bus) | ||
344 | +{ | ||
345 | + int count = acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_MSI_FRAME, | ||
346 | + pci_acpi_parse_madt_msi, 0); | ||
347 | + if (count > 0) { | ||
348 | #ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN | ||
349 | - u32 msi_frame_id = 0; | ||
350 | - int num; | ||
351 | - | ||
352 | - if (acpi_disabled) | ||
353 | - return; | ||
354 | - | ||
355 | - /** | ||
356 | - * Since ACPI 5.1 currently does not define | ||
357 | - * a way to associate MSI frame ID to a device, | ||
358 | - * we can only support single MSI frame at the moment. | ||
359 | - * Therefore, the id 0 is used as a default. | ||
360 | - */ | ||
361 | - num = msi_get_num_irq_domain(); | ||
362 | - if (num <= 0 || num > 1) | ||
363 | - return; | ||
364 | - | ||
365 | - dev_set_msi_domain(&bus->dev, irq_find_acpi_msi_domain(msi_frame_id)); | ||
366 | + struct irq_domain *domain; | ||
367 | + /** | ||
368 | + * Since ACPI 5.1 currently does not define | ||
369 | + * a way to associate MSI frame ID to a device, | ||
370 | + * we can only support single MSI frame at the moment. | ||
371 | + */ | ||
372 | + domain = irq_find_domain(IRQ_DOMAIN_REF_ACPI_MSI_FRAME, msi_frame); | ||
373 | + if (!domain) { | ||
374 | + pr_debug("Fail to find domain for MSI\n"); | ||
375 | + return; | ||
376 | + } | ||
377 | + | ||
378 | + dev_set_msi_domain(&bus->dev, domain); | ||
379 | #endif | ||
380 | + } | ||
381 | } | ||
382 | #endif /* CONFIG_PCI_MSI */ | ||
383 | diff --git a/include/linux/irqchip/arm-gic-acpi.h b/include/linux/irqchip/arm-gic-acpi.h | ||
384 | index fa8033b..b02f065 100644 | ||
385 | --- a/include/linux/irqchip/arm-gic-acpi.h | ||
386 | +++ b/include/linux/irqchip/arm-gic-acpi.h | ||
387 | @@ -26,6 +26,7 @@ struct acpi_table_header; | ||
388 | |||
389 | void acpi_irq_init(void); | ||
390 | int gic_v2_acpi_init(struct acpi_table_header *table, struct irq_domain **domain); | ||
391 | +int gicv2m_acpi_init(struct acpi_table_header *table, struct irq_domain *parent); | ||
392 | #else | ||
393 | static inline void acpi_gic_init(void) { } | ||
394 | #endif | ||
395 | diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h | ||
396 | index a965efa..759916d 100644 | ||
397 | --- a/include/linux/pci-acpi.h | ||
398 | +++ b/include/linux/pci-acpi.h | ||
399 | @@ -77,6 +77,8 @@ static inline void acpiphp_remove_slots(struct pci_bus *bus) { } | ||
400 | static inline void acpiphp_check_host_bridge(struct acpi_device *adev) { } | ||
401 | #endif | ||
402 | |||
403 | +void pci_acpi_set_phb_msi_domain(struct pci_bus *bus); | ||
404 | + | ||
405 | extern const u8 pci_acpi_dsm_uuid[]; | ||
406 | #define DEVICE_LABEL_DSM 0x07 | ||
407 | #define RESET_DELAY_DSM 0x08 | ||
408 | @@ -85,6 +87,7 @@ extern const u8 pci_acpi_dsm_uuid[]; | ||
409 | #else /* CONFIG_ACPI */ | ||
410 | static inline void acpi_pci_add_bus(struct pci_bus *bus) { } | ||
411 | static inline void acpi_pci_remove_bus(struct pci_bus *bus) { } | ||
412 | +static inline void pci_acpi_set_phb_msi_domain(struct pci_bus *bus) { }; | ||
413 | #endif /* CONFIG_ACPI */ | ||
414 | |||
415 | #ifdef CONFIG_ACPI_APEI | ||
416 | -- | ||
417 | 1.9.1 | ||
418 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/412-styx-Fix-build-issues-after-porting-PCI-patches-to-4.1.2-.patch b/recipes-kernel/linux/linux-hierofalcon/412-styx-Fix-build-issues-after-porting-PCI-patches-to-4.1.2-.patch new file mode 100644 index 0000000..91054a7 --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/412-styx-Fix-build-issues-after-porting-PCI-patches-to-4.1.2-.patch | |||
@@ -0,0 +1,107 @@ | |||
1 | From 8471812e8eee4a56562885cb5746d42587c5074a Mon Sep 17 00:00:00 2001 | ||
2 | From: Adrian Calianu <adrian.calianu@enea.com> | ||
3 | Date: Thu, 13 Aug 2015 09:28:28 +0200 | ||
4 | Subject: [PATCH] Fix build issues after porting PCI patches to 4.1.2 kernel | ||
5 | |||
6 | Signed-off-by: Adrian Calianu <adrian.calianu@enea.com> | ||
7 | --- | ||
8 | drivers/irqchip/irq-gic-v2m.c | 3 +-- | ||
9 | drivers/pci/host/pci-host-generic.c | 9 ++++----- | ||
10 | include/linux/irqchip/arm-gic.h | 2 ++ | ||
11 | include/linux/irqdomain.h | 1 - | ||
12 | include/linux/mod_devicetable.h | 1 + | ||
13 | 5 files changed, 8 insertions(+), 8 deletions(-) | ||
14 | |||
15 | diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c | ||
16 | index c32eb55..5b219f3 100644 | ||
17 | --- a/drivers/irqchip/irq-gic-v2m.c | ||
18 | +++ b/drivers/irqchip/irq-gic-v2m.c | ||
19 | @@ -263,14 +263,13 @@ static int __init gicv2m_init_one(struct irq_domain *parent, | ||
20 | goto err_iounmap; | ||
21 | } | ||
22 | |||
23 | - inner_domain = irq_domain_add_tree(node, &gicv2m_domain_ops, v2m); | ||
24 | + inner_domain = irq_domain_add_tree(NULL, &gicv2m_domain_ops, v2m); | ||
25 | if (!inner_domain) { | ||
26 | pr_err("Failed to create GICv2m domain\n"); | ||
27 | ret = -ENOMEM; | ||
28 | goto err_free_bm; | ||
29 | } | ||
30 | |||
31 | - inner_domain->bus_token = DOMAIN_BUS_PLATFORM_MSI; | ||
32 | inner_domain->name = gicv2m_domain_name; | ||
33 | |||
34 | ret = -ENOMEM; | ||
35 | diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c | ||
36 | index 01931e8..a4780c7 100644 | ||
37 | --- a/drivers/pci/host/pci-host-generic.c | ||
38 | +++ b/drivers/pci/host/pci-host-generic.c | ||
39 | @@ -102,10 +102,9 @@ MODULE_DEVICE_TABLE(of, gen_pci_of_match); | ||
40 | |||
41 | static void gen_pci_release_of_pci_ranges(struct gen_pci *pci) | ||
42 | { | ||
43 | - struct pci_host_bridge_window *win; | ||
44 | + struct resource_entry *win; | ||
45 | |||
46 | - list_for_each_entry(win, &pci->resources, list) | ||
47 | - /* Release only requested resources */ | ||
48 | + resource_list_for_each_entry(win, &pci->resources) | ||
49 | if (win->res->parent) | ||
50 | release_resource(win->res); | ||
51 | |||
52 | @@ -231,12 +230,12 @@ struct pci_bus *gen_scan_root_bus(struct device *parent, int bus, | ||
53 | struct pci_ops *ops, void *sysdata, | ||
54 | struct list_head *resources) | ||
55 | { | ||
56 | - struct pci_host_bridge_window *window; | ||
57 | + struct resource_entry *window; | ||
58 | bool found = false; | ||
59 | struct pci_bus *b; | ||
60 | int max; | ||
61 | |||
62 | - list_for_each_entry(window, resources, list) | ||
63 | + resource_list_for_each_entry(window, resources) | ||
64 | if (window->res->flags & IORESOURCE_BUS) { | ||
65 | found = true; | ||
66 | break; | ||
67 | diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h | ||
68 | index f490f26..8eaeac1 100644 | ||
69 | --- a/include/linux/irqchip/arm-gic.h | ||
70 | +++ b/include/linux/irqchip/arm-gic.h | ||
71 | @@ -122,7 +122,9 @@ static inline void gic_init(unsigned int nr, int start, | ||
72 | |||
73 | int gicv2m_of_init(struct device_node *node, struct irq_domain *parent); | ||
74 | |||
75 | +/* | ||
76 | void gic_send_sgi(unsigned int cpu_id, unsigned int irq); | ||
77 | +*/ | ||
78 | int gic_get_cpu_id(unsigned int cpu); | ||
79 | void gic_migrate_target(unsigned int new_cpu_id); | ||
80 | unsigned long gic_get_sgir_physaddr(void); | ||
81 | diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h | ||
82 | index ddd6602..9964c3e 100644 | ||
83 | --- a/include/linux/irqdomain.h | ||
84 | +++ b/include/linux/irqdomain.h | ||
85 | @@ -120,7 +120,6 @@ struct irq_domain { | ||
86 | unsigned int flags; | ||
87 | |||
88 | /* Optional data */ | ||
89 | - struct device_node *of_node; | ||
90 | enum irq_domain_ref_type type; | ||
91 | union { | ||
92 | struct device_node *of_node; | ||
93 | diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h | ||
94 | index 8a958d1..8492ad7 100644 | ||
95 | --- a/include/linux/mod_devicetable.h | ||
96 | +++ b/include/linux/mod_devicetable.h | ||
97 | @@ -190,6 +190,7 @@ struct css_device_id { | ||
98 | struct acpi_device_id { | ||
99 | __u8 id[ACPI_ID_LEN]; | ||
100 | kernel_ulong_t driver_data; | ||
101 | + __u32 cls; | ||
102 | }; | ||
103 | |||
104 | #define PNP_ID_LEN 8 | ||
105 | -- | ||
106 | 1.9.1 | ||
107 | |||
diff --git a/recipes-kernel/linux/linux-hierofalcon/defconfig b/recipes-kernel/linux/linux-hierofalcon/defconfig new file mode 100644 index 0000000..ec3e367 --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon/defconfig | |||
@@ -0,0 +1,4874 @@ | |||
1 | # | ||
2 | # Automatically generated file; DO NOT EDIT. | ||
3 | # Linux/arm64 4.1.2 Kernel Configuration | ||
4 | # | ||
5 | CONFIG_ARM64=y | ||
6 | CONFIG_64BIT=y | ||
7 | CONFIG_ARCH_PHYS_ADDR_T_64BIT=y | ||
8 | CONFIG_MMU=y | ||
9 | CONFIG_STACKTRACE_SUPPORT=y | ||
10 | CONFIG_LOCKDEP_SUPPORT=y | ||
11 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
13 | CONFIG_GENERIC_HWEIGHT=y | ||
14 | CONFIG_GENERIC_CSUM=y | ||
15 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
16 | CONFIG_ZONE_DMA=y | ||
17 | CONFIG_HAVE_GENERIC_RCU_GUP=y | ||
18 | CONFIG_ARCH_DMA_ADDR_T_64BIT=y | ||
19 | CONFIG_NEED_DMA_MAP_STATE=y | ||
20 | CONFIG_NEED_SG_DMA_LENGTH=y | ||
21 | CONFIG_SWIOTLB=y | ||
22 | CONFIG_IOMMU_HELPER=y | ||
23 | CONFIG_KERNEL_MODE_NEON=y | ||
24 | CONFIG_FIX_EARLYCON_MEM=y | ||
25 | CONFIG_PGTABLE_LEVELS=4 | ||
26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
27 | CONFIG_IRQ_WORK=y | ||
28 | CONFIG_BUILDTIME_EXTABLE_SORT=y | ||
29 | |||
30 | # | ||
31 | # General setup | ||
32 | # | ||
33 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
34 | CONFIG_CROSS_COMPILE="" | ||
35 | # CONFIG_COMPILE_TEST is not set | ||
36 | CONFIG_LOCALVERSION="" | ||
37 | # CONFIG_LOCALVERSION_AUTO is not set | ||
38 | CONFIG_DEFAULT_HOSTNAME="hierofalcon" | ||
39 | CONFIG_SWAP=y | ||
40 | CONFIG_SYSVIPC=y | ||
41 | CONFIG_SYSVIPC_SYSCTL=y | ||
42 | CONFIG_POSIX_MQUEUE=y | ||
43 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
44 | CONFIG_CROSS_MEMORY_ATTACH=y | ||
45 | CONFIG_FHANDLE=y | ||
46 | # CONFIG_USELIB is not set | ||
47 | CONFIG_AUDIT=y | ||
48 | CONFIG_HAVE_ARCH_AUDITSYSCALL=y | ||
49 | CONFIG_AUDITSYSCALL=y | ||
50 | CONFIG_AUDIT_WATCH=y | ||
51 | CONFIG_AUDIT_TREE=y | ||
52 | |||
53 | # | ||
54 | # IRQ subsystem | ||
55 | # | ||
56 | CONFIG_GENERIC_IRQ_PROBE=y | ||
57 | CONFIG_GENERIC_IRQ_SHOW=y | ||
58 | CONFIG_GENERIC_IRQ_SHOW_LEVEL=y | ||
59 | CONFIG_HARDIRQS_SW_RESEND=y | ||
60 | CONFIG_IRQ_DOMAIN=y | ||
61 | CONFIG_IRQ_DOMAIN_HIERARCHY=y | ||
62 | CONFIG_GENERIC_MSI_IRQ=y | ||
63 | CONFIG_GENERIC_MSI_IRQ_DOMAIN=y | ||
64 | CONFIG_HANDLE_DOMAIN_IRQ=y | ||
65 | # CONFIG_IRQ_DOMAIN_DEBUG is not set | ||
66 | CONFIG_SPARSE_IRQ=y | ||
67 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
68 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
69 | CONFIG_ARCH_HAS_TICK_BROADCAST=y | ||
70 | CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y | ||
71 | |||
72 | # | ||
73 | # Timers subsystem | ||
74 | # | ||
75 | CONFIG_TICK_ONESHOT=y | ||
76 | CONFIG_NO_HZ_COMMON=y | ||
77 | # CONFIG_HZ_PERIODIC is not set | ||
78 | CONFIG_NO_HZ_IDLE=y | ||
79 | # CONFIG_NO_HZ_FULL is not set | ||
80 | CONFIG_NO_HZ=y | ||
81 | CONFIG_HIGH_RES_TIMERS=y | ||
82 | |||
83 | # | ||
84 | # CPU/Task time and stats accounting | ||
85 | # | ||
86 | CONFIG_TICK_CPU_ACCOUNTING=y | ||
87 | # CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set | ||
88 | CONFIG_BSD_PROCESS_ACCT=y | ||
89 | CONFIG_BSD_PROCESS_ACCT_V3=y | ||
90 | CONFIG_TASKSTATS=y | ||
91 | CONFIG_TASK_DELAY_ACCT=y | ||
92 | CONFIG_TASK_XACCT=y | ||
93 | CONFIG_TASK_IO_ACCOUNTING=y | ||
94 | |||
95 | # | ||
96 | # RCU Subsystem | ||
97 | # | ||
98 | CONFIG_TREE_RCU=y | ||
99 | CONFIG_SRCU=y | ||
100 | # CONFIG_TASKS_RCU is not set | ||
101 | CONFIG_RCU_STALL_COMMON=y | ||
102 | # CONFIG_RCU_USER_QS is not set | ||
103 | CONFIG_RCU_FANOUT=64 | ||
104 | CONFIG_RCU_FANOUT_LEAF=16 | ||
105 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
106 | CONFIG_RCU_FAST_NO_HZ=y | ||
107 | # CONFIG_TREE_RCU_TRACE is not set | ||
108 | CONFIG_RCU_KTHREAD_PRIO=0 | ||
109 | CONFIG_RCU_NOCB_CPU=y | ||
110 | # CONFIG_RCU_NOCB_CPU_NONE is not set | ||
111 | # CONFIG_RCU_NOCB_CPU_ZERO is not set | ||
112 | CONFIG_RCU_NOCB_CPU_ALL=y | ||
113 | # CONFIG_RCU_EXPEDITE_BOOT is not set | ||
114 | CONFIG_BUILD_BIN2C=y | ||
115 | CONFIG_IKCONFIG=y | ||
116 | CONFIG_IKCONFIG_PROC=y | ||
117 | CONFIG_LOG_BUF_SHIFT=14 | ||
118 | CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 | ||
119 | CONFIG_GENERIC_SCHED_CLOCK=y | ||
120 | CONFIG_CGROUPS=y | ||
121 | # CONFIG_CGROUP_DEBUG is not set | ||
122 | CONFIG_CGROUP_FREEZER=y | ||
123 | CONFIG_CGROUP_DEVICE=y | ||
124 | CONFIG_CPUSETS=y | ||
125 | CONFIG_PROC_PID_CPUSET=y | ||
126 | CONFIG_CGROUP_CPUACCT=y | ||
127 | CONFIG_PAGE_COUNTER=y | ||
128 | CONFIG_MEMCG=y | ||
129 | CONFIG_MEMCG_SWAP=y | ||
130 | CONFIG_MEMCG_SWAP_ENABLED=y | ||
131 | CONFIG_MEMCG_KMEM=y | ||
132 | # CONFIG_CGROUP_HUGETLB is not set | ||
133 | CONFIG_CGROUP_PERF=y | ||
134 | CONFIG_CGROUP_SCHED=y | ||
135 | CONFIG_FAIR_GROUP_SCHED=y | ||
136 | CONFIG_CFS_BANDWIDTH=y | ||
137 | CONFIG_RT_GROUP_SCHED=y | ||
138 | CONFIG_BLK_CGROUP=y | ||
139 | # CONFIG_DEBUG_BLK_CGROUP is not set | ||
140 | # CONFIG_CHECKPOINT_RESTORE is not set | ||
141 | CONFIG_NAMESPACES=y | ||
142 | CONFIG_UTS_NS=y | ||
143 | CONFIG_IPC_NS=y | ||
144 | CONFIG_USER_NS=y | ||
145 | CONFIG_PID_NS=y | ||
146 | CONFIG_NET_NS=y | ||
147 | CONFIG_SCHED_AUTOGROUP=y | ||
148 | # CONFIG_SYSFS_DEPRECATED is not set | ||
149 | CONFIG_RELAY=y | ||
150 | CONFIG_BLK_DEV_INITRD=y | ||
151 | CONFIG_INITRAMFS_SOURCE="" | ||
152 | CONFIG_RD_GZIP=y | ||
153 | CONFIG_RD_BZIP2=y | ||
154 | CONFIG_RD_LZMA=y | ||
155 | CONFIG_RD_XZ=y | ||
156 | CONFIG_RD_LZO=y | ||
157 | CONFIG_RD_LZ4=y | ||
158 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
159 | CONFIG_SYSCTL=y | ||
160 | CONFIG_ANON_INODES=y | ||
161 | CONFIG_HAVE_UID16=y | ||
162 | CONFIG_SYSCTL_EXCEPTION_TRACE=y | ||
163 | CONFIG_BPF=y | ||
164 | CONFIG_EXPERT=y | ||
165 | # CONFIG_UPTIME_LIMITED_KERNEL is not set | ||
166 | CONFIG_UID16=y | ||
167 | CONFIG_MULTIUSER=y | ||
168 | # CONFIG_SGETMASK_SYSCALL is not set | ||
169 | CONFIG_SYSFS_SYSCALL=y | ||
170 | # CONFIG_SYSCTL_SYSCALL is not set | ||
171 | CONFIG_KALLSYMS=y | ||
172 | CONFIG_KALLSYMS_ALL=y | ||
173 | CONFIG_PRINTK=y | ||
174 | CONFIG_BUG=y | ||
175 | CONFIG_ELF_CORE=y | ||
176 | CONFIG_BASE_FULL=y | ||
177 | CONFIG_FUTEX=y | ||
178 | CONFIG_EPOLL=y | ||
179 | CONFIG_SIGNALFD=y | ||
180 | CONFIG_TIMERFD=y | ||
181 | CONFIG_EVENTFD=y | ||
182 | # CONFIG_BPF_SYSCALL is not set | ||
183 | CONFIG_SHMEM=y | ||
184 | CONFIG_AIO=y | ||
185 | CONFIG_ADVISE_SYSCALLS=y | ||
186 | CONFIG_PCI_QUIRKS=y | ||
187 | CONFIG_EMBEDDED=y | ||
188 | CONFIG_HAVE_PERF_EVENTS=y | ||
189 | CONFIG_PERF_USE_VMALLOC=y | ||
190 | |||
191 | # | ||
192 | # Kernel Performance Events And Counters | ||
193 | # | ||
194 | CONFIG_PERF_EVENTS=y | ||
195 | # CONFIG_DEBUG_PERF_USE_VMALLOC is not set | ||
196 | CONFIG_VM_EVENT_COUNTERS=y | ||
197 | CONFIG_SLUB_DEBUG=y | ||
198 | # CONFIG_COMPAT_BRK is not set | ||
199 | # CONFIG_SLAB is not set | ||
200 | CONFIG_SLUB=y | ||
201 | # CONFIG_SLOB is not set | ||
202 | CONFIG_SLUB_CPU_PARTIAL=y | ||
203 | # CONFIG_SYSTEM_TRUSTED_KEYRING is not set | ||
204 | CONFIG_PROFILING=y | ||
205 | CONFIG_TRACEPOINTS=y | ||
206 | CONFIG_JUMP_LABEL=y | ||
207 | # CONFIG_UPROBES is not set | ||
208 | # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set | ||
209 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y | ||
210 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
211 | CONFIG_HAVE_DMA_ATTRS=y | ||
212 | CONFIG_HAVE_DMA_CONTIGUOUS=y | ||
213 | CONFIG_GENERIC_SMP_IDLE_THREAD=y | ||
214 | CONFIG_HAVE_CLK=y | ||
215 | CONFIG_HAVE_DMA_API_DEBUG=y | ||
216 | CONFIG_HAVE_HW_BREAKPOINT=y | ||
217 | CONFIG_HAVE_PERF_REGS=y | ||
218 | CONFIG_HAVE_PERF_USER_STACK_DUMP=y | ||
219 | CONFIG_HAVE_ARCH_JUMP_LABEL=y | ||
220 | CONFIG_HAVE_RCU_TABLE_FREE=y | ||
221 | CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y | ||
222 | CONFIG_HAVE_CMPXCHG_DOUBLE=y | ||
223 | CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y | ||
224 | CONFIG_HAVE_ARCH_SECCOMP_FILTER=y | ||
225 | CONFIG_HAVE_CC_STACKPROTECTOR=y | ||
226 | # CONFIG_CC_STACKPROTECTOR is not set | ||
227 | CONFIG_CC_STACKPROTECTOR_NONE=y | ||
228 | # CONFIG_CC_STACKPROTECTOR_REGULAR is not set | ||
229 | # CONFIG_CC_STACKPROTECTOR_STRONG is not set | ||
230 | CONFIG_HAVE_CONTEXT_TRACKING=y | ||
231 | CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y | ||
232 | CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y | ||
233 | CONFIG_MODULES_USE_ELF_RELA=y | ||
234 | CONFIG_ARCH_HAS_ELF_RANDOMIZE=y | ||
235 | CONFIG_CLONE_BACKWARDS=y | ||
236 | CONFIG_OLD_SIGSUSPEND3=y | ||
237 | CONFIG_COMPAT_OLD_SIGACTION=y | ||
238 | |||
239 | # | ||
240 | # GCOV-based kernel profiling | ||
241 | # | ||
242 | # CONFIG_GCOV_KERNEL is not set | ||
243 | CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y | ||
244 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
245 | CONFIG_SLABINFO=y | ||
246 | CONFIG_RT_MUTEXES=y | ||
247 | CONFIG_BASE_SMALL=0 | ||
248 | CONFIG_MODULES=y | ||
249 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
250 | CONFIG_MODULE_UNLOAD=y | ||
251 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
252 | # CONFIG_MODVERSIONS is not set | ||
253 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
254 | # CONFIG_MODULE_SIG is not set | ||
255 | # CONFIG_MODULE_COMPRESS is not set | ||
256 | CONFIG_STOP_MACHINE=y | ||
257 | CONFIG_BLOCK=y | ||
258 | CONFIG_BLK_DEV_BSG=y | ||
259 | CONFIG_BLK_DEV_BSGLIB=y | ||
260 | CONFIG_BLK_DEV_INTEGRITY=y | ||
261 | CONFIG_BLK_DEV_THROTTLING=y | ||
262 | # CONFIG_BLK_CMDLINE_PARSER is not set | ||
263 | |||
264 | # | ||
265 | # Partition Types | ||
266 | # | ||
267 | CONFIG_PARTITION_ADVANCED=y | ||
268 | # CONFIG_ACORN_PARTITION is not set | ||
269 | CONFIG_AIX_PARTITION=y | ||
270 | CONFIG_OSF_PARTITION=y | ||
271 | CONFIG_AMIGA_PARTITION=y | ||
272 | # CONFIG_ATARI_PARTITION is not set | ||
273 | CONFIG_MAC_PARTITION=y | ||
274 | CONFIG_MSDOS_PARTITION=y | ||
275 | CONFIG_BSD_DISKLABEL=y | ||
276 | CONFIG_MINIX_SUBPARTITION=y | ||
277 | CONFIG_SOLARIS_X86_PARTITION=y | ||
278 | CONFIG_UNIXWARE_DISKLABEL=y | ||
279 | CONFIG_LDM_PARTITION=y | ||
280 | # CONFIG_LDM_DEBUG is not set | ||
281 | CONFIG_SGI_PARTITION=y | ||
282 | # CONFIG_ULTRIX_PARTITION is not set | ||
283 | CONFIG_SUN_PARTITION=y | ||
284 | CONFIG_KARMA_PARTITION=y | ||
285 | CONFIG_EFI_PARTITION=y | ||
286 | # CONFIG_SYSV68_PARTITION is not set | ||
287 | # CONFIG_CMDLINE_PARTITION is not set | ||
288 | CONFIG_BLOCK_COMPAT=y | ||
289 | |||
290 | # | ||
291 | # IO Schedulers | ||
292 | # | ||
293 | CONFIG_IOSCHED_NOOP=y | ||
294 | CONFIG_IOSCHED_DEADLINE=y | ||
295 | CONFIG_IOSCHED_CFQ=y | ||
296 | CONFIG_CFQ_GROUP_IOSCHED=y | ||
297 | # CONFIG_DEFAULT_DEADLINE is not set | ||
298 | CONFIG_DEFAULT_CFQ=y | ||
299 | # CONFIG_DEFAULT_NOOP is not set | ||
300 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
301 | CONFIG_PREEMPT_NOTIFIERS=y | ||
302 | CONFIG_PADATA=y | ||
303 | CONFIG_INLINE_SPIN_UNLOCK_IRQ=y | ||
304 | CONFIG_INLINE_READ_UNLOCK=y | ||
305 | CONFIG_INLINE_READ_UNLOCK_IRQ=y | ||
306 | CONFIG_INLINE_WRITE_UNLOCK=y | ||
307 | CONFIG_INLINE_WRITE_UNLOCK_IRQ=y | ||
308 | CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y | ||
309 | CONFIG_MUTEX_SPIN_ON_OWNER=y | ||
310 | CONFIG_RWSEM_SPIN_ON_OWNER=y | ||
311 | CONFIG_LOCK_SPIN_ON_OWNER=y | ||
312 | CONFIG_FREEZER=y | ||
313 | |||
314 | # | ||
315 | # Platform selection | ||
316 | # | ||
317 | # CONFIG_ARCH_EXYNOS7 is not set | ||
318 | # CONFIG_ARCH_FSL_LS2085A is not set | ||
319 | # CONFIG_ARCH_MEDIATEK is not set | ||
320 | # CONFIG_ARCH_QCOM is not set | ||
321 | CONFIG_ARCH_SEATTLE=y | ||
322 | # CONFIG_ARCH_TEGRA is not set | ||
323 | # CONFIG_ARCH_SPRD is not set | ||
324 | # CONFIG_ARCH_THUNDER is not set | ||
325 | # CONFIG_ARCH_VEXPRESS is not set | ||
326 | # CONFIG_ARCH_XGENE is not set | ||
327 | # CONFIG_ARCH_ZYNQMP is not set | ||
328 | |||
329 | # | ||
330 | # Bus support | ||
331 | # | ||
332 | CONFIG_PCI=y | ||
333 | CONFIG_PCI_DOMAINS=y | ||
334 | CONFIG_PCI_DOMAINS_GENERIC=y | ||
335 | CONFIG_PCI_SYSCALL=y | ||
336 | CONFIG_PCI_MSI=y | ||
337 | CONFIG_PCI_MSI_IRQ_DOMAIN=y | ||
338 | # CONFIG_PCI_DEBUG is not set | ||
339 | # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set | ||
340 | CONFIG_PCI_STUB=y | ||
341 | CONFIG_PCI_ATS=y | ||
342 | CONFIG_PCI_IOV=y | ||
343 | CONFIG_PCI_PRI=y | ||
344 | CONFIG_PCI_PASID=y | ||
345 | CONFIG_PCI_LABEL=y | ||
346 | |||
347 | # | ||
348 | # PCI host controller drivers | ||
349 | # | ||
350 | CONFIG_PCI_HOST_GENERIC=y | ||
351 | CONFIG_PCIEPORTBUS=y | ||
352 | CONFIG_HOTPLUG_PCI_PCIE=y | ||
353 | CONFIG_PCIEAER=y | ||
354 | CONFIG_PCIE_ECRC=y | ||
355 | CONFIG_PCIEAER_INJECT=m | ||
356 | CONFIG_PCIEASPM=y | ||
357 | # CONFIG_PCIEASPM_DEBUG is not set | ||
358 | CONFIG_PCIEASPM_DEFAULT=y | ||
359 | # CONFIG_PCIEASPM_POWERSAVE is not set | ||
360 | # CONFIG_PCIEASPM_PERFORMANCE is not set | ||
361 | CONFIG_PCIE_PME=y | ||
362 | CONFIG_HOTPLUG_PCI=y | ||
363 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
364 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
365 | |||
366 | # | ||
367 | # Kernel Features | ||
368 | # | ||
369 | |||
370 | # | ||
371 | # ARM errata workarounds via the alternatives framework | ||
372 | # | ||
373 | CONFIG_ARM64_ERRATUM_826319=y | ||
374 | CONFIG_ARM64_ERRATUM_827319=y | ||
375 | CONFIG_ARM64_ERRATUM_824069=y | ||
376 | CONFIG_ARM64_ERRATUM_819472=y | ||
377 | CONFIG_ARM64_ERRATUM_832075=y | ||
378 | CONFIG_ARM64_ERRATUM_845719=y | ||
379 | CONFIG_ARM64_4K_PAGES=y | ||
380 | # CONFIG_ARM64_64K_PAGES is not set | ||
381 | # CONFIG_ARM64_VA_BITS_39 is not set | ||
382 | CONFIG_ARM64_VA_BITS_48=y | ||
383 | CONFIG_ARM64_VA_BITS=48 | ||
384 | # CONFIG_CPU_BIG_ENDIAN is not set | ||
385 | CONFIG_SMP=y | ||
386 | CONFIG_SCHED_MC=y | ||
387 | CONFIG_SCHED_SMT=y | ||
388 | CONFIG_NR_CPUS=8 | ||
389 | CONFIG_HOTPLUG_CPU=y | ||
390 | # CONFIG_PREEMPT_NONE is not set | ||
391 | CONFIG_PREEMPT_VOLUNTARY=y | ||
392 | # CONFIG_PREEMPT is not set | ||
393 | CONFIG_HZ=100 | ||
394 | CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y | ||
395 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
396 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | ||
397 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
398 | CONFIG_HAVE_ARCH_PFN_VALID=y | ||
399 | CONFIG_HW_PERF_EVENTS=y | ||
400 | CONFIG_SYS_SUPPORTS_HUGETLBFS=y | ||
401 | CONFIG_ARCH_WANT_GENERAL_HUGETLB=y | ||
402 | CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y | ||
403 | CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y | ||
404 | CONFIG_SELECT_MEMORY_MODEL=y | ||
405 | CONFIG_SPARSEMEM_MANUAL=y | ||
406 | CONFIG_SPARSEMEM=y | ||
407 | CONFIG_HAVE_MEMORY_PRESENT=y | ||
408 | CONFIG_SPARSEMEM_EXTREME=y | ||
409 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | ||
410 | CONFIG_SPARSEMEM_VMEMMAP=y | ||
411 | CONFIG_HAVE_MEMBLOCK=y | ||
412 | CONFIG_NO_BOOTMEM=y | ||
413 | CONFIG_MEMORY_ISOLATION=y | ||
414 | # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set | ||
415 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
416 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
417 | CONFIG_MEMORY_BALLOON=y | ||
418 | CONFIG_BALLOON_COMPACTION=y | ||
419 | CONFIG_COMPACTION=y | ||
420 | CONFIG_MIGRATION=y | ||
421 | CONFIG_PHYS_ADDR_T_64BIT=y | ||
422 | CONFIG_ZONE_DMA_FLAG=1 | ||
423 | CONFIG_BOUNCE=y | ||
424 | CONFIG_NEED_BOUNCE_POOL=y | ||
425 | CONFIG_MMU_NOTIFIER=y | ||
426 | CONFIG_KSM=y | ||
427 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
428 | # CONFIG_TRANSPARENT_HUGEPAGE is not set | ||
429 | CONFIG_CLEANCACHE=y | ||
430 | CONFIG_FRONTSWAP=y | ||
431 | CONFIG_CMA=y | ||
432 | # CONFIG_CMA_DEBUG is not set | ||
433 | # CONFIG_CMA_DEBUGFS is not set | ||
434 | CONFIG_CMA_AREAS=7 | ||
435 | CONFIG_ZSWAP=y | ||
436 | CONFIG_ZPOOL=y | ||
437 | # CONFIG_ZBUD is not set | ||
438 | CONFIG_ZSMALLOC=y | ||
439 | # CONFIG_PGTABLE_MAPPING is not set | ||
440 | # CONFIG_ZSMALLOC_STAT is not set | ||
441 | CONFIG_GENERIC_EARLY_IOREMAP=y | ||
442 | # CONFIG_SECCOMP is not set | ||
443 | # CONFIG_XEN is not set | ||
444 | CONFIG_FORCE_MAX_ZONEORDER=11 | ||
445 | # CONFIG_ARMV8_DEPRECATED is not set | ||
446 | |||
447 | # | ||
448 | # Boot options | ||
449 | # | ||
450 | CONFIG_CMDLINE=" debug" | ||
451 | # CONFIG_CMDLINE_FORCE is not set | ||
452 | CONFIG_EFI_STUB=y | ||
453 | CONFIG_EFI=y | ||
454 | CONFIG_DMI=y | ||
455 | |||
456 | # | ||
457 | # Userspace binary formats | ||
458 | # | ||
459 | CONFIG_BINFMT_ELF=y | ||
460 | CONFIG_COMPAT_BINFMT_ELF=y | ||
461 | CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y | ||
462 | CONFIG_BINFMT_SCRIPT=y | ||
463 | # CONFIG_HAVE_AOUT is not set | ||
464 | CONFIG_BINFMT_MISC=m | ||
465 | CONFIG_COREDUMP=y | ||
466 | CONFIG_COMPAT=y | ||
467 | CONFIG_SYSVIPC_COMPAT=y | ||
468 | |||
469 | # | ||
470 | # Power management options | ||
471 | # | ||
472 | CONFIG_SUSPEND=y | ||
473 | CONFIG_SUSPEND_FREEZER=y | ||
474 | CONFIG_PM_SLEEP=y | ||
475 | CONFIG_PM_SLEEP_SMP=y | ||
476 | # CONFIG_PM_AUTOSLEEP is not set | ||
477 | # CONFIG_PM_WAKELOCKS is not set | ||
478 | CONFIG_PM=y | ||
479 | CONFIG_PM_DEBUG=y | ||
480 | CONFIG_PM_ADVANCED_DEBUG=y | ||
481 | # CONFIG_PM_TEST_SUSPEND is not set | ||
482 | CONFIG_PM_SLEEP_DEBUG=y | ||
483 | # CONFIG_DPM_WATCHDOG is not set | ||
484 | CONFIG_PM_CLK=y | ||
485 | # CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set | ||
486 | CONFIG_CPU_PM=y | ||
487 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
488 | |||
489 | # | ||
490 | # CPU Power Management | ||
491 | # | ||
492 | |||
493 | # | ||
494 | # CPU Idle | ||
495 | # | ||
496 | # CONFIG_CPU_IDLE is not set | ||
497 | # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set | ||
498 | |||
499 | # | ||
500 | # CPU Frequency scaling | ||
501 | # | ||
502 | CONFIG_CPU_FREQ=y | ||
503 | CONFIG_CPU_FREQ_GOV_COMMON=y | ||
504 | CONFIG_CPU_FREQ_STAT=m | ||
505 | CONFIG_CPU_FREQ_STAT_DETAILS=y | ||
506 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set | ||
507 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
508 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | ||
509 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y | ||
510 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | ||
511 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||
512 | CONFIG_CPU_FREQ_GOV_POWERSAVE=y | ||
513 | CONFIG_CPU_FREQ_GOV_USERSPACE=y | ||
514 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y | ||
515 | CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y | ||
516 | |||
517 | # | ||
518 | # CPU frequency scaling drivers | ||
519 | # | ||
520 | # CONFIG_CPUFREQ_DT is not set | ||
521 | # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set | ||
522 | CONFIG_NET=y | ||
523 | CONFIG_COMPAT_NETLINK_MESSAGES=y | ||
524 | |||
525 | # | ||
526 | # Networking options | ||
527 | # | ||
528 | CONFIG_PACKET=y | ||
529 | CONFIG_PACKET_DIAG=m | ||
530 | CONFIG_UNIX=y | ||
531 | CONFIG_UNIX_DIAG=m | ||
532 | CONFIG_XFRM=y | ||
533 | CONFIG_XFRM_ALGO=y | ||
534 | CONFIG_XFRM_USER=y | ||
535 | CONFIG_XFRM_SUB_POLICY=y | ||
536 | CONFIG_XFRM_MIGRATE=y | ||
537 | CONFIG_XFRM_STATISTICS=y | ||
538 | CONFIG_XFRM_IPCOMP=m | ||
539 | CONFIG_NET_KEY=m | ||
540 | CONFIG_NET_KEY_MIGRATE=y | ||
541 | CONFIG_INET=y | ||
542 | CONFIG_IP_MULTICAST=y | ||
543 | CONFIG_IP_ADVANCED_ROUTER=y | ||
544 | CONFIG_IP_FIB_TRIE_STATS=y | ||
545 | CONFIG_IP_MULTIPLE_TABLES=y | ||
546 | CONFIG_IP_ROUTE_MULTIPATH=y | ||
547 | CONFIG_IP_ROUTE_VERBOSE=y | ||
548 | CONFIG_IP_ROUTE_CLASSID=y | ||
549 | # CONFIG_IP_PNP is not set | ||
550 | CONFIG_NET_IPIP=m | ||
551 | CONFIG_NET_IPGRE_DEMUX=m | ||
552 | CONFIG_NET_IP_TUNNEL=m | ||
553 | CONFIG_NET_IPGRE=m | ||
554 | CONFIG_NET_IPGRE_BROADCAST=y | ||
555 | CONFIG_IP_MROUTE=y | ||
556 | CONFIG_IP_MROUTE_MULTIPLE_TABLES=y | ||
557 | CONFIG_IP_PIMSM_V1=y | ||
558 | CONFIG_IP_PIMSM_V2=y | ||
559 | CONFIG_SYN_COOKIES=y | ||
560 | CONFIG_NET_IPVTI=m | ||
561 | CONFIG_NET_UDP_TUNNEL=m | ||
562 | # CONFIG_NET_FOU is not set | ||
563 | # CONFIG_NET_FOU_IP_TUNNELS is not set | ||
564 | # CONFIG_GENEVE is not set | ||
565 | CONFIG_INET_AH=m | ||
566 | CONFIG_INET_ESP=m | ||
567 | CONFIG_INET_IPCOMP=m | ||
568 | CONFIG_INET_XFRM_TUNNEL=m | ||
569 | CONFIG_INET_TUNNEL=m | ||
570 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | ||
571 | CONFIG_INET_XFRM_MODE_TUNNEL=m | ||
572 | CONFIG_INET_XFRM_MODE_BEET=m | ||
573 | CONFIG_INET_LRO=y | ||
574 | CONFIG_INET_DIAG=m | ||
575 | CONFIG_INET_TCP_DIAG=m | ||
576 | CONFIG_INET_UDP_DIAG=m | ||
577 | CONFIG_TCP_CONG_ADVANCED=y | ||
578 | CONFIG_TCP_CONG_BIC=m | ||
579 | CONFIG_TCP_CONG_CUBIC=y | ||
580 | CONFIG_TCP_CONG_WESTWOOD=m | ||
581 | CONFIG_TCP_CONG_HTCP=m | ||
582 | CONFIG_TCP_CONG_HSTCP=m | ||
583 | CONFIG_TCP_CONG_HYBLA=m | ||
584 | CONFIG_TCP_CONG_VEGAS=m | ||
585 | CONFIG_TCP_CONG_SCALABLE=m | ||
586 | CONFIG_TCP_CONG_LP=m | ||
587 | CONFIG_TCP_CONG_VENO=m | ||
588 | CONFIG_TCP_CONG_YEAH=m | ||
589 | CONFIG_TCP_CONG_ILLINOIS=m | ||
590 | # CONFIG_TCP_CONG_DCTCP is not set | ||
591 | CONFIG_DEFAULT_CUBIC=y | ||
592 | # CONFIG_DEFAULT_RENO is not set | ||
593 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
594 | CONFIG_TCP_MD5SIG=y | ||
595 | CONFIG_IPV6=y | ||
596 | CONFIG_IPV6_ROUTER_PREF=y | ||
597 | CONFIG_IPV6_ROUTE_INFO=y | ||
598 | CONFIG_IPV6_OPTIMISTIC_DAD=y | ||
599 | CONFIG_INET6_AH=m | ||
600 | CONFIG_INET6_ESP=m | ||
601 | CONFIG_INET6_IPCOMP=m | ||
602 | CONFIG_IPV6_MIP6=y | ||
603 | CONFIG_INET6_XFRM_TUNNEL=m | ||
604 | CONFIG_INET6_TUNNEL=m | ||
605 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m | ||
606 | CONFIG_INET6_XFRM_MODE_TUNNEL=m | ||
607 | CONFIG_INET6_XFRM_MODE_BEET=m | ||
608 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | ||
609 | CONFIG_IPV6_VTI=m | ||
610 | CONFIG_IPV6_SIT=m | ||
611 | CONFIG_IPV6_SIT_6RD=y | ||
612 | CONFIG_IPV6_NDISC_NODETYPE=y | ||
613 | CONFIG_IPV6_TUNNEL=m | ||
614 | # CONFIG_IPV6_GRE is not set | ||
615 | CONFIG_IPV6_MULTIPLE_TABLES=y | ||
616 | CONFIG_IPV6_SUBTREES=y | ||
617 | CONFIG_IPV6_MROUTE=y | ||
618 | CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y | ||
619 | CONFIG_IPV6_PIMSM_V2=y | ||
620 | CONFIG_NETLABEL=y | ||
621 | CONFIG_NETWORK_SECMARK=y | ||
622 | CONFIG_NET_PTP_CLASSIFY=y | ||
623 | CONFIG_NETWORK_PHY_TIMESTAMPING=y | ||
624 | CONFIG_NETFILTER=y | ||
625 | # CONFIG_NETFILTER_DEBUG is not set | ||
626 | CONFIG_NETFILTER_ADVANCED=y | ||
627 | CONFIG_BRIDGE_NETFILTER=m | ||
628 | |||
629 | # | ||
630 | # Core Netfilter Configuration | ||
631 | # | ||
632 | CONFIG_NETFILTER_NETLINK=m | ||
633 | CONFIG_NETFILTER_NETLINK_ACCT=m | ||
634 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
635 | CONFIG_NETFILTER_NETLINK_LOG=m | ||
636 | CONFIG_NF_CONNTRACK=m | ||
637 | CONFIG_NF_LOG_COMMON=m | ||
638 | CONFIG_NF_CONNTRACK_MARK=y | ||
639 | CONFIG_NF_CONNTRACK_SECMARK=y | ||
640 | CONFIG_NF_CONNTRACK_ZONES=y | ||
641 | CONFIG_NF_CONNTRACK_PROCFS=y | ||
642 | CONFIG_NF_CONNTRACK_EVENTS=y | ||
643 | # CONFIG_NF_CONNTRACK_TIMEOUT is not set | ||
644 | CONFIG_NF_CONNTRACK_TIMESTAMP=y | ||
645 | CONFIG_NF_CONNTRACK_LABELS=y | ||
646 | CONFIG_NF_CT_PROTO_DCCP=m | ||
647 | CONFIG_NF_CT_PROTO_GRE=m | ||
648 | CONFIG_NF_CT_PROTO_SCTP=m | ||
649 | CONFIG_NF_CT_PROTO_UDPLITE=m | ||
650 | CONFIG_NF_CONNTRACK_AMANDA=m | ||
651 | CONFIG_NF_CONNTRACK_FTP=m | ||
652 | CONFIG_NF_CONNTRACK_H323=m | ||
653 | CONFIG_NF_CONNTRACK_IRC=m | ||
654 | CONFIG_NF_CONNTRACK_BROADCAST=m | ||
655 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | ||
656 | CONFIG_NF_CONNTRACK_SNMP=m | ||
657 | CONFIG_NF_CONNTRACK_PPTP=m | ||
658 | CONFIG_NF_CONNTRACK_SANE=m | ||
659 | CONFIG_NF_CONNTRACK_SIP=m | ||
660 | CONFIG_NF_CONNTRACK_TFTP=m | ||
661 | CONFIG_NF_CT_NETLINK=m | ||
662 | # CONFIG_NF_CT_NETLINK_TIMEOUT is not set | ||
663 | CONFIG_NF_CT_NETLINK_HELPER=m | ||
664 | CONFIG_NETFILTER_NETLINK_QUEUE_CT=y | ||
665 | CONFIG_NF_NAT=m | ||
666 | CONFIG_NF_NAT_NEEDED=y | ||
667 | CONFIG_NF_NAT_PROTO_DCCP=m | ||
668 | CONFIG_NF_NAT_PROTO_UDPLITE=m | ||
669 | CONFIG_NF_NAT_PROTO_SCTP=m | ||
670 | CONFIG_NF_NAT_AMANDA=m | ||
671 | CONFIG_NF_NAT_FTP=m | ||
672 | CONFIG_NF_NAT_IRC=m | ||
673 | CONFIG_NF_NAT_SIP=m | ||
674 | CONFIG_NF_NAT_TFTP=m | ||
675 | CONFIG_NF_NAT_REDIRECT=m | ||
676 | CONFIG_NETFILTER_SYNPROXY=m | ||
677 | CONFIG_NF_TABLES=m | ||
678 | CONFIG_NF_TABLES_INET=m | ||
679 | CONFIG_NFT_EXTHDR=m | ||
680 | CONFIG_NFT_META=m | ||
681 | CONFIG_NFT_CT=m | ||
682 | CONFIG_NFT_RBTREE=m | ||
683 | CONFIG_NFT_HASH=m | ||
684 | CONFIG_NFT_COUNTER=m | ||
685 | CONFIG_NFT_LOG=m | ||
686 | CONFIG_NFT_LIMIT=m | ||
687 | # CONFIG_NFT_MASQ is not set | ||
688 | # CONFIG_NFT_REDIR is not set | ||
689 | CONFIG_NFT_NAT=m | ||
690 | CONFIG_NFT_QUEUE=m | ||
691 | CONFIG_NFT_REJECT=m | ||
692 | CONFIG_NFT_REJECT_INET=m | ||
693 | CONFIG_NFT_COMPAT=m | ||
694 | CONFIG_NETFILTER_XTABLES=y | ||
695 | |||
696 | # | ||
697 | # Xtables combined modules | ||
698 | # | ||
699 | CONFIG_NETFILTER_XT_MARK=m | ||
700 | CONFIG_NETFILTER_XT_CONNMARK=m | ||
701 | CONFIG_NETFILTER_XT_SET=m | ||
702 | |||
703 | # | ||
704 | # Xtables targets | ||
705 | # | ||
706 | CONFIG_NETFILTER_XT_TARGET_AUDIT=m | ||
707 | CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m | ||
708 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||
709 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | ||
710 | CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m | ||
711 | CONFIG_NETFILTER_XT_TARGET_CT=m | ||
712 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | ||
713 | CONFIG_NETFILTER_XT_TARGET_HL=m | ||
714 | CONFIG_NETFILTER_XT_TARGET_HMARK=m | ||
715 | CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m | ||
716 | CONFIG_NETFILTER_XT_TARGET_LED=m | ||
717 | CONFIG_NETFILTER_XT_TARGET_LOG=m | ||
718 | CONFIG_NETFILTER_XT_TARGET_MARK=m | ||
719 | CONFIG_NETFILTER_XT_NAT=m | ||
720 | CONFIG_NETFILTER_XT_TARGET_NETMAP=m | ||
721 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | ||
722 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
723 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | ||
724 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | ||
725 | CONFIG_NETFILTER_XT_TARGET_REDIRECT=m | ||
726 | CONFIG_NETFILTER_XT_TARGET_TEE=m | ||
727 | CONFIG_NETFILTER_XT_TARGET_TPROXY=m | ||
728 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | ||
729 | CONFIG_NETFILTER_XT_TARGET_SECMARK=m | ||
730 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | ||
731 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | ||
732 | |||
733 | # | ||
734 | # Xtables matches | ||
735 | # | ||
736 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m | ||
737 | CONFIG_NETFILTER_XT_MATCH_BPF=m | ||
738 | CONFIG_NETFILTER_XT_MATCH_CGROUP=m | ||
739 | CONFIG_NETFILTER_XT_MATCH_CLUSTER=m | ||
740 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
741 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | ||
742 | CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m | ||
743 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | ||
744 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | ||
745 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | ||
746 | CONFIG_NETFILTER_XT_MATCH_CPU=m | ||
747 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | ||
748 | CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m | ||
749 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | ||
750 | CONFIG_NETFILTER_XT_MATCH_ECN=m | ||
751 | CONFIG_NETFILTER_XT_MATCH_ESP=m | ||
752 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
753 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | ||
754 | CONFIG_NETFILTER_XT_MATCH_HL=m | ||
755 | CONFIG_NETFILTER_XT_MATCH_IPCOMP=m | ||
756 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | ||
757 | CONFIG_NETFILTER_XT_MATCH_IPVS=m | ||
758 | CONFIG_NETFILTER_XT_MATCH_L2TP=m | ||
759 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||
760 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
761 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
762 | CONFIG_NETFILTER_XT_MATCH_MARK=m | ||
763 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
764 | CONFIG_NETFILTER_XT_MATCH_NFACCT=m | ||
765 | CONFIG_NETFILTER_XT_MATCH_OSF=m | ||
766 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | ||
767 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | ||
768 | CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m | ||
769 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | ||
770 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | ||
771 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | ||
772 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
773 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
774 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | ||
775 | CONFIG_NETFILTER_XT_MATCH_SOCKET=m | ||
776 | CONFIG_NETFILTER_XT_MATCH_STATE=m | ||
777 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | ||
778 | CONFIG_NETFILTER_XT_MATCH_STRING=m | ||
779 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | ||
780 | CONFIG_NETFILTER_XT_MATCH_TIME=m | ||
781 | CONFIG_NETFILTER_XT_MATCH_U32=m | ||
782 | CONFIG_IP_SET=m | ||
783 | CONFIG_IP_SET_MAX=256 | ||
784 | CONFIG_IP_SET_BITMAP_IP=m | ||
785 | CONFIG_IP_SET_BITMAP_IPMAC=m | ||
786 | CONFIG_IP_SET_BITMAP_PORT=m | ||
787 | CONFIG_IP_SET_HASH_IP=m | ||
788 | CONFIG_IP_SET_HASH_IPMARK=m | ||
789 | CONFIG_IP_SET_HASH_IPPORT=m | ||
790 | CONFIG_IP_SET_HASH_IPPORTIP=m | ||
791 | CONFIG_IP_SET_HASH_IPPORTNET=m | ||
792 | # CONFIG_IP_SET_HASH_MAC is not set | ||
793 | CONFIG_IP_SET_HASH_NETPORTNET=m | ||
794 | CONFIG_IP_SET_HASH_NET=m | ||
795 | CONFIG_IP_SET_HASH_NETNET=m | ||
796 | CONFIG_IP_SET_HASH_NETPORT=m | ||
797 | CONFIG_IP_SET_HASH_NETIFACE=m | ||
798 | CONFIG_IP_SET_LIST_SET=m | ||
799 | CONFIG_IP_VS=m | ||
800 | CONFIG_IP_VS_IPV6=y | ||
801 | # CONFIG_IP_VS_DEBUG is not set | ||
802 | CONFIG_IP_VS_TAB_BITS=12 | ||
803 | |||
804 | # | ||
805 | # IPVS transport protocol load balancing support | ||
806 | # | ||
807 | CONFIG_IP_VS_PROTO_TCP=y | ||
808 | CONFIG_IP_VS_PROTO_UDP=y | ||
809 | CONFIG_IP_VS_PROTO_AH_ESP=y | ||
810 | CONFIG_IP_VS_PROTO_ESP=y | ||
811 | CONFIG_IP_VS_PROTO_AH=y | ||
812 | CONFIG_IP_VS_PROTO_SCTP=y | ||
813 | |||
814 | # | ||
815 | # IPVS scheduler | ||
816 | # | ||
817 | CONFIG_IP_VS_RR=m | ||
818 | CONFIG_IP_VS_WRR=m | ||
819 | CONFIG_IP_VS_LC=m | ||
820 | CONFIG_IP_VS_WLC=m | ||
821 | # CONFIG_IP_VS_FO is not set | ||
822 | CONFIG_IP_VS_LBLC=m | ||
823 | CONFIG_IP_VS_LBLCR=m | ||
824 | CONFIG_IP_VS_DH=m | ||
825 | CONFIG_IP_VS_SH=m | ||
826 | CONFIG_IP_VS_SED=m | ||
827 | CONFIG_IP_VS_NQ=m | ||
828 | |||
829 | # | ||
830 | # IPVS SH scheduler | ||
831 | # | ||
832 | CONFIG_IP_VS_SH_TAB_BITS=8 | ||
833 | |||
834 | # | ||
835 | # IPVS application helper | ||
836 | # | ||
837 | CONFIG_IP_VS_FTP=m | ||
838 | CONFIG_IP_VS_NFCT=y | ||
839 | CONFIG_IP_VS_PE_SIP=m | ||
840 | |||
841 | # | ||
842 | # IP: Netfilter Configuration | ||
843 | # | ||
844 | CONFIG_NF_DEFRAG_IPV4=m | ||
845 | CONFIG_NF_CONNTRACK_IPV4=m | ||
846 | # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set | ||
847 | CONFIG_NF_TABLES_IPV4=m | ||
848 | CONFIG_NFT_CHAIN_ROUTE_IPV4=m | ||
849 | CONFIG_NFT_REJECT_IPV4=m | ||
850 | CONFIG_NF_TABLES_ARP=m | ||
851 | CONFIG_NF_LOG_ARP=m | ||
852 | CONFIG_NF_LOG_IPV4=m | ||
853 | CONFIG_NF_REJECT_IPV4=y | ||
854 | CONFIG_NF_NAT_IPV4=m | ||
855 | CONFIG_NFT_CHAIN_NAT_IPV4=m | ||
856 | CONFIG_NF_NAT_MASQUERADE_IPV4=m | ||
857 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
858 | CONFIG_NF_NAT_PROTO_GRE=m | ||
859 | CONFIG_NF_NAT_PPTP=m | ||
860 | CONFIG_NF_NAT_H323=m | ||
861 | CONFIG_IP_NF_IPTABLES=y | ||
862 | CONFIG_IP_NF_MATCH_AH=m | ||
863 | CONFIG_IP_NF_MATCH_ECN=m | ||
864 | CONFIG_IP_NF_MATCH_RPFILTER=m | ||
865 | CONFIG_IP_NF_MATCH_TTL=m | ||
866 | CONFIG_IP_NF_FILTER=y | ||
867 | CONFIG_IP_NF_TARGET_REJECT=y | ||
868 | CONFIG_IP_NF_TARGET_SYNPROXY=m | ||
869 | CONFIG_IP_NF_NAT=m | ||
870 | CONFIG_IP_NF_TARGET_MASQUERADE=m | ||
871 | CONFIG_IP_NF_TARGET_NETMAP=m | ||
872 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
873 | CONFIG_IP_NF_MANGLE=m | ||
874 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
875 | CONFIG_IP_NF_TARGET_ECN=m | ||
876 | CONFIG_IP_NF_TARGET_TTL=m | ||
877 | CONFIG_IP_NF_RAW=m | ||
878 | CONFIG_IP_NF_SECURITY=m | ||
879 | CONFIG_IP_NF_ARPTABLES=m | ||
880 | CONFIG_IP_NF_ARPFILTER=m | ||
881 | CONFIG_IP_NF_ARP_MANGLE=m | ||
882 | |||
883 | # | ||
884 | # IPv6: Netfilter Configuration | ||
885 | # | ||
886 | CONFIG_NF_DEFRAG_IPV6=m | ||
887 | CONFIG_NF_CONNTRACK_IPV6=m | ||
888 | CONFIG_NF_TABLES_IPV6=m | ||
889 | CONFIG_NFT_CHAIN_ROUTE_IPV6=m | ||
890 | CONFIG_NFT_REJECT_IPV6=m | ||
891 | CONFIG_NF_REJECT_IPV6=m | ||
892 | CONFIG_NF_LOG_IPV6=m | ||
893 | CONFIG_NF_NAT_IPV6=m | ||
894 | CONFIG_NFT_CHAIN_NAT_IPV6=m | ||
895 | CONFIG_NF_NAT_MASQUERADE_IPV6=m | ||
896 | CONFIG_IP6_NF_IPTABLES=m | ||
897 | CONFIG_IP6_NF_MATCH_AH=m | ||
898 | CONFIG_IP6_NF_MATCH_EUI64=m | ||
899 | CONFIG_IP6_NF_MATCH_FRAG=m | ||
900 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
901 | CONFIG_IP6_NF_MATCH_HL=m | ||
902 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | ||
903 | CONFIG_IP6_NF_MATCH_MH=m | ||
904 | CONFIG_IP6_NF_MATCH_RPFILTER=m | ||
905 | CONFIG_IP6_NF_MATCH_RT=m | ||
906 | CONFIG_IP6_NF_TARGET_HL=m | ||
907 | CONFIG_IP6_NF_FILTER=m | ||
908 | CONFIG_IP6_NF_TARGET_REJECT=m | ||
909 | CONFIG_IP6_NF_TARGET_SYNPROXY=m | ||
910 | CONFIG_IP6_NF_MANGLE=m | ||
911 | CONFIG_IP6_NF_RAW=m | ||
912 | CONFIG_IP6_NF_SECURITY=m | ||
913 | CONFIG_IP6_NF_NAT=m | ||
914 | CONFIG_IP6_NF_TARGET_MASQUERADE=m | ||
915 | # CONFIG_IP6_NF_TARGET_NPT is not set | ||
916 | CONFIG_NF_TABLES_BRIDGE=m | ||
917 | CONFIG_NFT_BRIDGE_META=m | ||
918 | CONFIG_NFT_BRIDGE_REJECT=m | ||
919 | CONFIG_NF_LOG_BRIDGE=m | ||
920 | CONFIG_BRIDGE_NF_EBTABLES=m | ||
921 | CONFIG_BRIDGE_EBT_BROUTE=m | ||
922 | CONFIG_BRIDGE_EBT_T_FILTER=m | ||
923 | CONFIG_BRIDGE_EBT_T_NAT=m | ||
924 | CONFIG_BRIDGE_EBT_802_3=m | ||
925 | CONFIG_BRIDGE_EBT_AMONG=m | ||
926 | CONFIG_BRIDGE_EBT_ARP=m | ||
927 | CONFIG_BRIDGE_EBT_IP=m | ||
928 | CONFIG_BRIDGE_EBT_IP6=m | ||
929 | CONFIG_BRIDGE_EBT_LIMIT=m | ||
930 | CONFIG_BRIDGE_EBT_MARK=m | ||
931 | CONFIG_BRIDGE_EBT_PKTTYPE=m | ||
932 | CONFIG_BRIDGE_EBT_STP=m | ||
933 | CONFIG_BRIDGE_EBT_VLAN=m | ||
934 | CONFIG_BRIDGE_EBT_ARPREPLY=m | ||
935 | CONFIG_BRIDGE_EBT_DNAT=m | ||
936 | CONFIG_BRIDGE_EBT_MARK_T=m | ||
937 | CONFIG_BRIDGE_EBT_REDIRECT=m | ||
938 | CONFIG_BRIDGE_EBT_SNAT=m | ||
939 | CONFIG_BRIDGE_EBT_LOG=m | ||
940 | CONFIG_BRIDGE_EBT_NFLOG=m | ||
941 | # CONFIG_IP_DCCP is not set | ||
942 | CONFIG_IP_SCTP=m | ||
943 | # CONFIG_SCTP_DBG_OBJCNT is not set | ||
944 | # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set | ||
945 | CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y | ||
946 | # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set | ||
947 | CONFIG_SCTP_COOKIE_HMAC_MD5=y | ||
948 | CONFIG_SCTP_COOKIE_HMAC_SHA1=y | ||
949 | # CONFIG_RDS is not set | ||
950 | CONFIG_TIPC=m | ||
951 | CONFIG_TIPC_MEDIA_UDP=y | ||
952 | CONFIG_ATM=m | ||
953 | CONFIG_ATM_CLIP=m | ||
954 | # CONFIG_ATM_CLIP_NO_ICMP is not set | ||
955 | CONFIG_ATM_LANE=m | ||
956 | # CONFIG_ATM_MPOA is not set | ||
957 | CONFIG_ATM_BR2684=m | ||
958 | # CONFIG_ATM_BR2684_IPFILTER is not set | ||
959 | CONFIG_L2TP=m | ||
960 | CONFIG_L2TP_DEBUGFS=m | ||
961 | CONFIG_L2TP_V3=y | ||
962 | CONFIG_L2TP_IP=m | ||
963 | CONFIG_L2TP_ETH=m | ||
964 | CONFIG_STP=m | ||
965 | CONFIG_GARP=m | ||
966 | CONFIG_MRP=m | ||
967 | CONFIG_BRIDGE=m | ||
968 | CONFIG_BRIDGE_IGMP_SNOOPING=y | ||
969 | CONFIG_BRIDGE_VLAN_FILTERING=y | ||
970 | CONFIG_HAVE_NET_DSA=y | ||
971 | CONFIG_VLAN_8021Q=m | ||
972 | CONFIG_VLAN_8021Q_GVRP=y | ||
973 | CONFIG_VLAN_8021Q_MVRP=y | ||
974 | # CONFIG_DECNET is not set | ||
975 | CONFIG_LLC=m | ||
976 | # CONFIG_LLC2 is not set | ||
977 | CONFIG_IPX=m | ||
978 | # CONFIG_IPX_INTERN is not set | ||
979 | # CONFIG_ATALK is not set | ||
980 | # CONFIG_X25 is not set | ||
981 | # CONFIG_LAPB is not set | ||
982 | # CONFIG_PHONET is not set | ||
983 | CONFIG_6LOWPAN=m | ||
984 | CONFIG_6LOWPAN_NHC=m | ||
985 | CONFIG_6LOWPAN_NHC_DEST=m | ||
986 | CONFIG_6LOWPAN_NHC_FRAGMENT=m | ||
987 | CONFIG_6LOWPAN_NHC_HOP=m | ||
988 | CONFIG_6LOWPAN_NHC_IPV6=m | ||
989 | CONFIG_6LOWPAN_NHC_MOBILITY=m | ||
990 | CONFIG_6LOWPAN_NHC_ROUTING=m | ||
991 | CONFIG_6LOWPAN_NHC_UDP=m | ||
992 | CONFIG_IEEE802154=m | ||
993 | CONFIG_IEEE802154_SOCKET=m | ||
994 | CONFIG_IEEE802154_6LOWPAN=m | ||
995 | CONFIG_MAC802154=m | ||
996 | CONFIG_NET_SCHED=y | ||
997 | |||
998 | # | ||
999 | # Queueing/Scheduling | ||
1000 | # | ||
1001 | CONFIG_NET_SCH_CBQ=m | ||
1002 | CONFIG_NET_SCH_HTB=m | ||
1003 | CONFIG_NET_SCH_HFSC=m | ||
1004 | CONFIG_NET_SCH_ATM=m | ||
1005 | CONFIG_NET_SCH_PRIO=m | ||
1006 | CONFIG_NET_SCH_MULTIQ=m | ||
1007 | CONFIG_NET_SCH_RED=m | ||
1008 | CONFIG_NET_SCH_SFB=m | ||
1009 | CONFIG_NET_SCH_SFQ=m | ||
1010 | CONFIG_NET_SCH_TEQL=m | ||
1011 | CONFIG_NET_SCH_TBF=m | ||
1012 | CONFIG_NET_SCH_GRED=m | ||
1013 | CONFIG_NET_SCH_DSMARK=m | ||
1014 | CONFIG_NET_SCH_NETEM=m | ||
1015 | CONFIG_NET_SCH_DRR=m | ||
1016 | CONFIG_NET_SCH_MQPRIO=m | ||
1017 | CONFIG_NET_SCH_CHOKE=m | ||
1018 | CONFIG_NET_SCH_QFQ=m | ||
1019 | CONFIG_NET_SCH_CODEL=m | ||
1020 | CONFIG_NET_SCH_FQ_CODEL=m | ||
1021 | CONFIG_NET_SCH_FQ=m | ||
1022 | CONFIG_NET_SCH_HHF=m | ||
1023 | CONFIG_NET_SCH_PIE=m | ||
1024 | CONFIG_NET_SCH_INGRESS=m | ||
1025 | CONFIG_NET_SCH_PLUG=m | ||
1026 | |||
1027 | # | ||
1028 | # Classification | ||
1029 | # | ||
1030 | CONFIG_NET_CLS=y | ||
1031 | CONFIG_NET_CLS_BASIC=m | ||
1032 | CONFIG_NET_CLS_TCINDEX=m | ||
1033 | CONFIG_NET_CLS_ROUTE4=m | ||
1034 | CONFIG_NET_CLS_FW=m | ||
1035 | CONFIG_NET_CLS_U32=m | ||
1036 | CONFIG_CLS_U32_PERF=y | ||
1037 | CONFIG_CLS_U32_MARK=y | ||
1038 | CONFIG_NET_CLS_RSVP=m | ||
1039 | CONFIG_NET_CLS_RSVP6=m | ||
1040 | CONFIG_NET_CLS_FLOW=m | ||
1041 | CONFIG_NET_CLS_CGROUP=y | ||
1042 | CONFIG_NET_CLS_BPF=m | ||
1043 | CONFIG_NET_EMATCH=y | ||
1044 | CONFIG_NET_EMATCH_STACK=32 | ||
1045 | CONFIG_NET_EMATCH_CMP=m | ||
1046 | CONFIG_NET_EMATCH_NBYTE=m | ||
1047 | CONFIG_NET_EMATCH_U32=m | ||
1048 | CONFIG_NET_EMATCH_META=m | ||
1049 | CONFIG_NET_EMATCH_TEXT=m | ||
1050 | CONFIG_NET_EMATCH_IPSET=m | ||
1051 | CONFIG_NET_CLS_ACT=y | ||
1052 | CONFIG_NET_ACT_POLICE=m | ||
1053 | CONFIG_NET_ACT_GACT=m | ||
1054 | CONFIG_GACT_PROB=y | ||
1055 | CONFIG_NET_ACT_MIRRED=m | ||
1056 | CONFIG_NET_ACT_IPT=m | ||
1057 | CONFIG_NET_ACT_NAT=m | ||
1058 | CONFIG_NET_ACT_PEDIT=m | ||
1059 | CONFIG_NET_ACT_SIMP=m | ||
1060 | CONFIG_NET_ACT_SKBEDIT=m | ||
1061 | CONFIG_NET_ACT_CSUM=m | ||
1062 | # CONFIG_NET_ACT_VLAN is not set | ||
1063 | # CONFIG_NET_ACT_BPF is not set | ||
1064 | # CONFIG_NET_ACT_CONNMARK is not set | ||
1065 | CONFIG_NET_CLS_IND=y | ||
1066 | CONFIG_NET_SCH_FIFO=y | ||
1067 | CONFIG_DCB=y | ||
1068 | CONFIG_DNS_RESOLVER=y | ||
1069 | CONFIG_BATMAN_ADV=m | ||
1070 | CONFIG_BATMAN_ADV_BLA=y | ||
1071 | CONFIG_BATMAN_ADV_DAT=y | ||
1072 | CONFIG_BATMAN_ADV_NC=y | ||
1073 | CONFIG_BATMAN_ADV_MCAST=y | ||
1074 | # CONFIG_BATMAN_ADV_DEBUG is not set | ||
1075 | CONFIG_OPENVSWITCH=m | ||
1076 | CONFIG_OPENVSWITCH_GRE=m | ||
1077 | CONFIG_OPENVSWITCH_VXLAN=m | ||
1078 | CONFIG_VSOCKETS=m | ||
1079 | CONFIG_NETLINK_MMAP=y | ||
1080 | CONFIG_NETLINK_DIAG=m | ||
1081 | CONFIG_MPLS=y | ||
1082 | CONFIG_NET_MPLS_GSO=m | ||
1083 | # CONFIG_MPLS_ROUTING is not set | ||
1084 | # CONFIG_HSR is not set | ||
1085 | # CONFIG_NET_SWITCHDEV is not set | ||
1086 | CONFIG_RPS=y | ||
1087 | CONFIG_RFS_ACCEL=y | ||
1088 | CONFIG_XPS=y | ||
1089 | CONFIG_CGROUP_NET_PRIO=y | ||
1090 | CONFIG_CGROUP_NET_CLASSID=y | ||
1091 | CONFIG_NET_RX_BUSY_POLL=y | ||
1092 | CONFIG_BQL=y | ||
1093 | # CONFIG_BPF_JIT is not set | ||
1094 | CONFIG_NET_FLOW_LIMIT=y | ||
1095 | |||
1096 | # | ||
1097 | # Network testing | ||
1098 | # | ||
1099 | CONFIG_NET_PKTGEN=m | ||
1100 | CONFIG_NET_DROP_MONITOR=y | ||
1101 | # CONFIG_HAMRADIO is not set | ||
1102 | # CONFIG_CAN is not set | ||
1103 | CONFIG_IRDA=m | ||
1104 | |||
1105 | # | ||
1106 | # IrDA protocols | ||
1107 | # | ||
1108 | CONFIG_IRLAN=m | ||
1109 | CONFIG_IRNET=m | ||
1110 | CONFIG_IRCOMM=m | ||
1111 | # CONFIG_IRDA_ULTRA is not set | ||
1112 | |||
1113 | # | ||
1114 | # IrDA options | ||
1115 | # | ||
1116 | CONFIG_IRDA_CACHE_LAST_LSAP=y | ||
1117 | CONFIG_IRDA_FAST_RR=y | ||
1118 | # CONFIG_IRDA_DEBUG is not set | ||
1119 | |||
1120 | # | ||
1121 | # Infrared-port device drivers | ||
1122 | # | ||
1123 | |||
1124 | # | ||
1125 | # SIR device drivers | ||
1126 | # | ||
1127 | CONFIG_IRTTY_SIR=m | ||
1128 | |||
1129 | # | ||
1130 | # Dongle support | ||
1131 | # | ||
1132 | CONFIG_DONGLE=y | ||
1133 | CONFIG_ESI_DONGLE=m | ||
1134 | CONFIG_ACTISYS_DONGLE=m | ||
1135 | CONFIG_TEKRAM_DONGLE=m | ||
1136 | CONFIG_TOIM3232_DONGLE=m | ||
1137 | CONFIG_LITELINK_DONGLE=m | ||
1138 | CONFIG_MA600_DONGLE=m | ||
1139 | CONFIG_GIRBIL_DONGLE=m | ||
1140 | CONFIG_MCP2120_DONGLE=m | ||
1141 | CONFIG_OLD_BELKIN_DONGLE=m | ||
1142 | CONFIG_ACT200L_DONGLE=m | ||
1143 | CONFIG_KINGSUN_DONGLE=m | ||
1144 | CONFIG_KSDAZZLE_DONGLE=m | ||
1145 | CONFIG_KS959_DONGLE=m | ||
1146 | |||
1147 | # | ||
1148 | # FIR device drivers | ||
1149 | # | ||
1150 | CONFIG_USB_IRDA=m | ||
1151 | CONFIG_SIGMATEL_FIR=m | ||
1152 | CONFIG_VLSI_FIR=m | ||
1153 | CONFIG_MCS_FIR=m | ||
1154 | CONFIG_BT=m | ||
1155 | CONFIG_BT_BREDR=y | ||
1156 | CONFIG_BT_RFCOMM=m | ||
1157 | CONFIG_BT_RFCOMM_TTY=y | ||
1158 | CONFIG_BT_BNEP=m | ||
1159 | CONFIG_BT_BNEP_MC_FILTER=y | ||
1160 | CONFIG_BT_BNEP_PROTO_FILTER=y | ||
1161 | CONFIG_BT_HIDP=m | ||
1162 | CONFIG_BT_LE=y | ||
1163 | CONFIG_BT_6LOWPAN=m | ||
1164 | # CONFIG_BT_SELFTEST is not set | ||
1165 | CONFIG_BT_DEBUGFS=y | ||
1166 | |||
1167 | # | ||
1168 | # Bluetooth device drivers | ||
1169 | # | ||
1170 | CONFIG_BT_INTEL=m | ||
1171 | CONFIG_BT_BCM=m | ||
1172 | CONFIG_BT_HCIBTUSB=m | ||
1173 | CONFIG_BT_HCIBTUSB_BCM=y | ||
1174 | CONFIG_BT_HCIBTSDIO=m | ||
1175 | CONFIG_BT_HCIUART=m | ||
1176 | CONFIG_BT_HCIUART_H4=y | ||
1177 | CONFIG_BT_HCIUART_BCSP=y | ||
1178 | CONFIG_BT_HCIUART_ATH3K=y | ||
1179 | CONFIG_BT_HCIUART_LL=y | ||
1180 | CONFIG_BT_HCIUART_3WIRE=y | ||
1181 | # CONFIG_BT_HCIUART_INTEL is not set | ||
1182 | # CONFIG_BT_HCIUART_BCM is not set | ||
1183 | CONFIG_BT_HCIBCM203X=m | ||
1184 | CONFIG_BT_HCIBPA10X=m | ||
1185 | CONFIG_BT_HCIBFUSB=m | ||
1186 | CONFIG_BT_HCIVHCI=m | ||
1187 | CONFIG_BT_MRVL=m | ||
1188 | CONFIG_BT_MRVL_SDIO=m | ||
1189 | CONFIG_BT_ATH3K=m | ||
1190 | # CONFIG_AF_RXRPC is not set | ||
1191 | CONFIG_FIB_RULES=y | ||
1192 | CONFIG_WIRELESS=y | ||
1193 | CONFIG_WIRELESS_EXT=y | ||
1194 | CONFIG_WEXT_CORE=y | ||
1195 | CONFIG_WEXT_PROC=y | ||
1196 | CONFIG_WEXT_SPY=y | ||
1197 | CONFIG_WEXT_PRIV=y | ||
1198 | CONFIG_CFG80211=m | ||
1199 | # CONFIG_NL80211_TESTMODE is not set | ||
1200 | # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set | ||
1201 | # CONFIG_CFG80211_REG_DEBUG is not set | ||
1202 | # CONFIG_CFG80211_CERTIFICATION_ONUS is not set | ||
1203 | CONFIG_CFG80211_DEFAULT_PS=y | ||
1204 | CONFIG_CFG80211_DEBUGFS=y | ||
1205 | # CONFIG_CFG80211_INTERNAL_REGDB is not set | ||
1206 | CONFIG_CFG80211_WEXT=y | ||
1207 | CONFIG_LIB80211=m | ||
1208 | # CONFIG_LIB80211_DEBUG is not set | ||
1209 | CONFIG_MAC80211=m | ||
1210 | CONFIG_MAC80211_HAS_RC=y | ||
1211 | CONFIG_MAC80211_RC_MINSTREL=y | ||
1212 | CONFIG_MAC80211_RC_MINSTREL_HT=y | ||
1213 | # CONFIG_MAC80211_RC_MINSTREL_VHT is not set | ||
1214 | CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y | ||
1215 | CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" | ||
1216 | CONFIG_MAC80211_MESH=y | ||
1217 | CONFIG_MAC80211_LEDS=y | ||
1218 | CONFIG_MAC80211_DEBUGFS=y | ||
1219 | # CONFIG_MAC80211_MESSAGE_TRACING is not set | ||
1220 | # CONFIG_MAC80211_DEBUG_MENU is not set | ||
1221 | # CONFIG_WIMAX is not set | ||
1222 | CONFIG_RFKILL=m | ||
1223 | CONFIG_RFKILL_LEDS=y | ||
1224 | # CONFIG_RFKILL_INPUT is not set | ||
1225 | CONFIG_RFKILL_GPIO=m | ||
1226 | CONFIG_NET_9P=y | ||
1227 | CONFIG_NET_9P_VIRTIO=y | ||
1228 | # CONFIG_NET_9P_DEBUG is not set | ||
1229 | # CONFIG_CAIF is not set | ||
1230 | CONFIG_CEPH_LIB=m | ||
1231 | # CONFIG_CEPH_LIB_PRETTYDEBUG is not set | ||
1232 | # CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set | ||
1233 | CONFIG_NFC=m | ||
1234 | CONFIG_NFC_DIGITAL=m | ||
1235 | CONFIG_NFC_NCI=m | ||
1236 | CONFIG_NFC_HCI=m | ||
1237 | CONFIG_NFC_SHDLC=y | ||
1238 | |||
1239 | # | ||
1240 | # Near Field Communication (NFC) devices | ||
1241 | # | ||
1242 | CONFIG_NFC_PN533=m | ||
1243 | CONFIG_NFC_SIM=m | ||
1244 | CONFIG_NFC_PORT100=m | ||
1245 | CONFIG_NFC_PN544=m | ||
1246 | CONFIG_NFC_PN544_I2C=m | ||
1247 | CONFIG_NFC_MICROREAD=m | ||
1248 | CONFIG_NFC_MICROREAD_I2C=m | ||
1249 | CONFIG_NFC_MRVL=m | ||
1250 | CONFIG_NFC_MRVL_USB=m | ||
1251 | CONFIG_NFC_ST21NFCA=m | ||
1252 | CONFIG_NFC_ST21NFCA_I2C=m | ||
1253 | # CONFIG_NFC_ST21NFCB is not set | ||
1254 | # CONFIG_NFC_NXP_NCI is not set | ||
1255 | CONFIG_HAVE_BPF_JIT=y | ||
1256 | |||
1257 | # | ||
1258 | # Device Drivers | ||
1259 | # | ||
1260 | CONFIG_ARM_AMBA=y | ||
1261 | # CONFIG_TEGRA_AHB is not set | ||
1262 | |||
1263 | # | ||
1264 | # Generic Driver Options | ||
1265 | # | ||
1266 | # CONFIG_UEVENT_HELPER is not set | ||
1267 | CONFIG_DEVTMPFS=y | ||
1268 | CONFIG_DEVTMPFS_MOUNT=y | ||
1269 | CONFIG_STANDALONE=y | ||
1270 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
1271 | CONFIG_FW_LOADER=y | ||
1272 | # CONFIG_FIRMWARE_IN_KERNEL is not set | ||
1273 | CONFIG_EXTRA_FIRMWARE="" | ||
1274 | # CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set | ||
1275 | CONFIG_WANT_DEV_COREDUMP=y | ||
1276 | CONFIG_ALLOW_DEV_COREDUMP=y | ||
1277 | CONFIG_DEV_COREDUMP=y | ||
1278 | # CONFIG_DEBUG_DRIVER is not set | ||
1279 | CONFIG_DEBUG_DEVRES=y | ||
1280 | # CONFIG_SYS_HYPERVISOR is not set | ||
1281 | # CONFIG_GENERIC_CPU_DEVICES is not set | ||
1282 | CONFIG_GENERIC_CPU_AUTOPROBE=y | ||
1283 | CONFIG_REGMAP=y | ||
1284 | CONFIG_REGMAP_I2C=m | ||
1285 | CONFIG_REGMAP_MMIO=y | ||
1286 | CONFIG_DMA_SHARED_BUFFER=y | ||
1287 | # CONFIG_FENCE_TRACE is not set | ||
1288 | CONFIG_DMA_CMA=y | ||
1289 | |||
1290 | # | ||
1291 | # Default contiguous memory area size: | ||
1292 | # | ||
1293 | CONFIG_CMA_SIZE_MBYTES=16 | ||
1294 | CONFIG_CMA_SIZE_SEL_MBYTES=y | ||
1295 | # CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set | ||
1296 | # CONFIG_CMA_SIZE_SEL_MIN is not set | ||
1297 | # CONFIG_CMA_SIZE_SEL_MAX is not set | ||
1298 | CONFIG_CMA_ALIGNMENT=8 | ||
1299 | |||
1300 | # | ||
1301 | # Bus devices | ||
1302 | # | ||
1303 | CONFIG_ARM_CCI=y | ||
1304 | CONFIG_ARM_CCI400_COMMON=y | ||
1305 | CONFIG_ARM_CCI400_PMU=y | ||
1306 | CONFIG_ARM_CCN=y | ||
1307 | CONFIG_VEXPRESS_CONFIG=y | ||
1308 | CONFIG_CONNECTOR=y | ||
1309 | CONFIG_PROC_EVENTS=y | ||
1310 | CONFIG_MTD=m | ||
1311 | # CONFIG_MTD_TESTS is not set | ||
1312 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
1313 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
1314 | CONFIG_MTD_OF_PARTS=m | ||
1315 | # CONFIG_MTD_AR7_PARTS is not set | ||
1316 | |||
1317 | # | ||
1318 | # User Modules And Translation Layers | ||
1319 | # | ||
1320 | CONFIG_MTD_BLKDEVS=m | ||
1321 | CONFIG_MTD_BLOCK=m | ||
1322 | # CONFIG_MTD_BLOCK_RO is not set | ||
1323 | # CONFIG_FTL is not set | ||
1324 | # CONFIG_NFTL is not set | ||
1325 | # CONFIG_INFTL is not set | ||
1326 | # CONFIG_RFD_FTL is not set | ||
1327 | # CONFIG_SSFDC is not set | ||
1328 | # CONFIG_SM_FTL is not set | ||
1329 | # CONFIG_MTD_OOPS is not set | ||
1330 | # CONFIG_MTD_SWAP is not set | ||
1331 | # CONFIG_MTD_PARTITIONED_MASTER is not set | ||
1332 | |||
1333 | # | ||
1334 | # RAM/ROM/Flash chip drivers | ||
1335 | # | ||
1336 | CONFIG_MTD_CFI=m | ||
1337 | # CONFIG_MTD_JEDECPROBE is not set | ||
1338 | CONFIG_MTD_GEN_PROBE=m | ||
1339 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
1340 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
1341 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
1342 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
1343 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
1344 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
1345 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
1346 | CONFIG_MTD_CFI_I1=y | ||
1347 | CONFIG_MTD_CFI_I2=y | ||
1348 | # CONFIG_MTD_CFI_I4 is not set | ||
1349 | # CONFIG_MTD_CFI_I8 is not set | ||
1350 | CONFIG_MTD_CFI_INTELEXT=m | ||
1351 | CONFIG_MTD_CFI_AMDSTD=m | ||
1352 | CONFIG_MTD_CFI_STAA=m | ||
1353 | CONFIG_MTD_CFI_UTIL=m | ||
1354 | # CONFIG_MTD_RAM is not set | ||
1355 | # CONFIG_MTD_ROM is not set | ||
1356 | # CONFIG_MTD_ABSENT is not set | ||
1357 | |||
1358 | # | ||
1359 | # Mapping drivers for chip access | ||
1360 | # | ||
1361 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
1362 | CONFIG_MTD_PHYSMAP=m | ||
1363 | # CONFIG_MTD_PHYSMAP_COMPAT is not set | ||
1364 | CONFIG_MTD_PHYSMAP_OF=m | ||
1365 | # CONFIG_MTD_INTEL_VR_NOR is not set | ||
1366 | # CONFIG_MTD_PLATRAM is not set | ||
1367 | |||
1368 | # | ||
1369 | # Self-contained MTD device drivers | ||
1370 | # | ||
1371 | # CONFIG_MTD_PMC551 is not set | ||
1372 | # CONFIG_MTD_SLRAM is not set | ||
1373 | # CONFIG_MTD_PHRAM is not set | ||
1374 | # CONFIG_MTD_MTDRAM is not set | ||
1375 | # CONFIG_MTD_BLOCK2MTD is not set | ||
1376 | |||
1377 | # | ||
1378 | # Disk-On-Chip Device Drivers | ||
1379 | # | ||
1380 | # CONFIG_MTD_DOCG3 is not set | ||
1381 | # CONFIG_MTD_NAND is not set | ||
1382 | # CONFIG_MTD_ONENAND is not set | ||
1383 | |||
1384 | # | ||
1385 | # LPDDR & LPDDR2 PCM memory drivers | ||
1386 | # | ||
1387 | # CONFIG_MTD_LPDDR is not set | ||
1388 | # CONFIG_MTD_SPI_NOR is not set | ||
1389 | CONFIG_MTD_UBI=m | ||
1390 | CONFIG_MTD_UBI_WL_THRESHOLD=4096 | ||
1391 | CONFIG_MTD_UBI_BEB_LIMIT=20 | ||
1392 | # CONFIG_MTD_UBI_FASTMAP is not set | ||
1393 | # CONFIG_MTD_UBI_GLUEBI is not set | ||
1394 | # CONFIG_MTD_UBI_BLOCK is not set | ||
1395 | CONFIG_DTC=y | ||
1396 | CONFIG_OF=y | ||
1397 | |||
1398 | # | ||
1399 | # Device Tree and Open Firmware support | ||
1400 | # | ||
1401 | CONFIG_OF_UNITTEST=y | ||
1402 | CONFIG_OF_FLATTREE=y | ||
1403 | CONFIG_OF_EARLY_FLATTREE=y | ||
1404 | CONFIG_OF_DYNAMIC=y | ||
1405 | CONFIG_OF_ADDRESS=y | ||
1406 | CONFIG_OF_ADDRESS_PCI=y | ||
1407 | CONFIG_OF_IRQ=y | ||
1408 | CONFIG_OF_NET=y | ||
1409 | CONFIG_OF_MDIO=y | ||
1410 | CONFIG_OF_PCI=y | ||
1411 | CONFIG_OF_PCI_IRQ=y | ||
1412 | CONFIG_OF_MTD=y | ||
1413 | CONFIG_OF_RESERVED_MEM=y | ||
1414 | CONFIG_OF_RESOLVE=y | ||
1415 | # CONFIG_OF_OVERLAY is not set | ||
1416 | # CONFIG_PARPORT is not set | ||
1417 | CONFIG_BLK_DEV=y | ||
1418 | CONFIG_BLK_DEV_NULL_BLK=m | ||
1419 | # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set | ||
1420 | CONFIG_ZRAM=m | ||
1421 | # CONFIG_ZRAM_LZ4_COMPRESS is not set | ||
1422 | # CONFIG_ZRAM_DEBUG is not set | ||
1423 | CONFIG_BLK_CPQ_CISS_DA=m | ||
1424 | CONFIG_CISS_SCSI_TAPE=y | ||
1425 | CONFIG_BLK_DEV_DAC960=m | ||
1426 | CONFIG_BLK_DEV_UMEM=m | ||
1427 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
1428 | CONFIG_BLK_DEV_LOOP=m | ||
1429 | CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 | ||
1430 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
1431 | CONFIG_BLK_DEV_DRBD=m | ||
1432 | # CONFIG_DRBD_FAULT_INJECTION is not set | ||
1433 | CONFIG_BLK_DEV_NBD=y | ||
1434 | CONFIG_BLK_DEV_NVME=m | ||
1435 | CONFIG_BLK_DEV_SKD=m | ||
1436 | CONFIG_BLK_DEV_OSD=m | ||
1437 | CONFIG_BLK_DEV_SX8=m | ||
1438 | CONFIG_BLK_DEV_RAM=y | ||
1439 | CONFIG_BLK_DEV_RAM_COUNT=1 | ||
1440 | CONFIG_BLK_DEV_RAM_SIZE=131070 | ||
1441 | # CONFIG_BLK_DEV_PMEM is not set | ||
1442 | CONFIG_CDROM_PKTCDVD=m | ||
1443 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | ||
1444 | # CONFIG_CDROM_PKTCDVD_WCACHE is not set | ||
1445 | CONFIG_ATA_OVER_ETH=m | ||
1446 | CONFIG_VIRTIO_BLK=y | ||
1447 | CONFIG_BLK_DEV_RBD=m | ||
1448 | # CONFIG_BLK_DEV_RSXX is not set | ||
1449 | |||
1450 | # | ||
1451 | # Misc devices | ||
1452 | # | ||
1453 | CONFIG_SENSORS_LIS3LV02D=m | ||
1454 | # CONFIG_AD525X_DPOT is not set | ||
1455 | # CONFIG_DUMMY_IRQ is not set | ||
1456 | # CONFIG_PHANTOM is not set | ||
1457 | # CONFIG_SGI_IOC4 is not set | ||
1458 | CONFIG_TIFM_CORE=m | ||
1459 | CONFIG_TIFM_7XX1=m | ||
1460 | # CONFIG_ICS932S401 is not set | ||
1461 | CONFIG_ENCLOSURE_SERVICES=m | ||
1462 | # CONFIG_HP_ILO is not set | ||
1463 | CONFIG_APDS9802ALS=m | ||
1464 | CONFIG_ISL29003=m | ||
1465 | CONFIG_ISL29020=m | ||
1466 | CONFIG_SENSORS_TSL2550=m | ||
1467 | # CONFIG_SENSORS_BH1780 is not set | ||
1468 | CONFIG_SENSORS_BH1770=m | ||
1469 | CONFIG_SENSORS_APDS990X=m | ||
1470 | # CONFIG_HMC6352 is not set | ||
1471 | # CONFIG_DS1682 is not set | ||
1472 | # CONFIG_BMP085_I2C is not set | ||
1473 | # CONFIG_USB_SWITCH_FSA9480 is not set | ||
1474 | # CONFIG_SRAM is not set | ||
1475 | CONFIG_VEXPRESS_SYSCFG=y | ||
1476 | # CONFIG_C2PORT is not set | ||
1477 | |||
1478 | # | ||
1479 | # EEPROM support | ||
1480 | # | ||
1481 | CONFIG_EEPROM_AT24=m | ||
1482 | CONFIG_EEPROM_LEGACY=m | ||
1483 | CONFIG_EEPROM_MAX6875=m | ||
1484 | CONFIG_EEPROM_93CX6=m | ||
1485 | CONFIG_CB710_CORE=m | ||
1486 | # CONFIG_CB710_DEBUG is not set | ||
1487 | CONFIG_CB710_DEBUG_ASSUMPTIONS=y | ||
1488 | |||
1489 | # | ||
1490 | # Texas Instruments shared transport line discipline | ||
1491 | # | ||
1492 | # CONFIG_TI_ST is not set | ||
1493 | CONFIG_SENSORS_LIS3_I2C=m | ||
1494 | |||
1495 | # | ||
1496 | # Altera FPGA firmware download module | ||
1497 | # | ||
1498 | CONFIG_ALTERA_STAPL=m | ||
1499 | |||
1500 | # | ||
1501 | # Intel MIC Bus Driver | ||
1502 | # | ||
1503 | |||
1504 | # | ||
1505 | # Intel MIC Host Driver | ||
1506 | # | ||
1507 | |||
1508 | # | ||
1509 | # Intel MIC Card Driver | ||
1510 | # | ||
1511 | # CONFIG_GENWQE is not set | ||
1512 | # CONFIG_ECHO is not set | ||
1513 | # CONFIG_CXL_BASE is not set | ||
1514 | |||
1515 | # | ||
1516 | # SCSI device support | ||
1517 | # | ||
1518 | CONFIG_SCSI_MOD=y | ||
1519 | CONFIG_RAID_ATTRS=m | ||
1520 | CONFIG_SCSI=y | ||
1521 | CONFIG_SCSI_DMA=y | ||
1522 | CONFIG_SCSI_NETLINK=y | ||
1523 | # CONFIG_SCSI_MQ_DEFAULT is not set | ||
1524 | CONFIG_SCSI_PROC_FS=y | ||
1525 | |||
1526 | # | ||
1527 | # SCSI support type (disk, tape, CD-ROM) | ||
1528 | # | ||
1529 | CONFIG_BLK_DEV_SD=y | ||
1530 | CONFIG_CHR_DEV_ST=m | ||
1531 | CONFIG_CHR_DEV_OSST=m | ||
1532 | CONFIG_BLK_DEV_SR=y | ||
1533 | CONFIG_BLK_DEV_SR_VENDOR=y | ||
1534 | CONFIG_CHR_DEV_SG=y | ||
1535 | CONFIG_CHR_DEV_SCH=m | ||
1536 | CONFIG_SCSI_ENCLOSURE=m | ||
1537 | CONFIG_SCSI_CONSTANTS=y | ||
1538 | CONFIG_SCSI_LOGGING=y | ||
1539 | CONFIG_SCSI_SCAN_ASYNC=y | ||
1540 | |||
1541 | # | ||
1542 | # SCSI Transports | ||
1543 | # | ||
1544 | CONFIG_SCSI_SPI_ATTRS=m | ||
1545 | CONFIG_SCSI_FC_ATTRS=m | ||
1546 | CONFIG_SCSI_ISCSI_ATTRS=m | ||
1547 | CONFIG_SCSI_SAS_ATTRS=m | ||
1548 | CONFIG_SCSI_SAS_LIBSAS=m | ||
1549 | CONFIG_SCSI_SAS_ATA=y | ||
1550 | CONFIG_SCSI_SAS_HOST_SMP=y | ||
1551 | CONFIG_SCSI_SRP_ATTRS=m | ||
1552 | CONFIG_SCSI_LOWLEVEL=y | ||
1553 | CONFIG_ISCSI_TCP=m | ||
1554 | CONFIG_ISCSI_BOOT_SYSFS=m | ||
1555 | # CONFIG_SCSI_CXGB3_ISCSI is not set | ||
1556 | # CONFIG_SCSI_CXGB4_ISCSI is not set | ||
1557 | CONFIG_SCSI_BNX2_ISCSI=m | ||
1558 | CONFIG_SCSI_BNX2X_FCOE=m | ||
1559 | CONFIG_BE2ISCSI=m | ||
1560 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
1561 | CONFIG_SCSI_HPSA=m | ||
1562 | # CONFIG_SCSI_3W_9XXX is not set | ||
1563 | # CONFIG_SCSI_3W_SAS is not set | ||
1564 | # CONFIG_SCSI_ACARD is not set | ||
1565 | # CONFIG_SCSI_AACRAID is not set | ||
1566 | # CONFIG_SCSI_AIC7XXX is not set | ||
1567 | # CONFIG_SCSI_AIC79XX is not set | ||
1568 | # CONFIG_SCSI_AIC94XX is not set | ||
1569 | CONFIG_SCSI_MVSAS=m | ||
1570 | # CONFIG_SCSI_MVSAS_DEBUG is not set | ||
1571 | CONFIG_SCSI_MVSAS_TASKLET=y | ||
1572 | CONFIG_SCSI_MVUMI=m | ||
1573 | CONFIG_SCSI_ARCMSR=m | ||
1574 | CONFIG_SCSI_ESAS2R=m | ||
1575 | CONFIG_MEGARAID_NEWGEN=y | ||
1576 | CONFIG_MEGARAID_MM=m | ||
1577 | CONFIG_MEGARAID_MAILBOX=m | ||
1578 | CONFIG_MEGARAID_LEGACY=m | ||
1579 | CONFIG_MEGARAID_SAS=m | ||
1580 | # CONFIG_SCSI_MPT2SAS is not set | ||
1581 | # CONFIG_SCSI_MPT3SAS is not set | ||
1582 | CONFIG_SCSI_UFSHCD=m | ||
1583 | CONFIG_SCSI_UFSHCD_PCI=m | ||
1584 | # CONFIG_SCSI_UFSHCD_PLATFORM is not set | ||
1585 | CONFIG_SCSI_HPTIOP=m | ||
1586 | CONFIG_LIBFC=m | ||
1587 | CONFIG_LIBFCOE=m | ||
1588 | CONFIG_FCOE=m | ||
1589 | CONFIG_SCSI_DMX3191D=m | ||
1590 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
1591 | # CONFIG_SCSI_IPS is not set | ||
1592 | CONFIG_SCSI_INITIO=m | ||
1593 | CONFIG_SCSI_INIA100=m | ||
1594 | CONFIG_SCSI_STEX=m | ||
1595 | CONFIG_SCSI_SYM53C8XX_2=m | ||
1596 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 | ||
1597 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | ||
1598 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | ||
1599 | CONFIG_SCSI_SYM53C8XX_MMIO=y | ||
1600 | CONFIG_SCSI_IPR=m | ||
1601 | CONFIG_SCSI_IPR_TRACE=y | ||
1602 | CONFIG_SCSI_IPR_DUMP=y | ||
1603 | CONFIG_SCSI_QLOGIC_1280=m | ||
1604 | CONFIG_SCSI_QLA_FC=m | ||
1605 | CONFIG_TCM_QLA2XXX=m | ||
1606 | CONFIG_SCSI_QLA_ISCSI=m | ||
1607 | CONFIG_SCSI_LPFC=m | ||
1608 | # CONFIG_SCSI_LPFC_DEBUG_FS is not set | ||
1609 | CONFIG_SCSI_DC395x=m | ||
1610 | # CONFIG_SCSI_AM53C974 is not set | ||
1611 | # CONFIG_SCSI_WD719X is not set | ||
1612 | CONFIG_SCSI_DEBUG=m | ||
1613 | CONFIG_SCSI_PMCRAID=m | ||
1614 | # CONFIG_SCSI_PM8001 is not set | ||
1615 | # CONFIG_SCSI_BFA_FC is not set | ||
1616 | CONFIG_SCSI_VIRTIO=m | ||
1617 | CONFIG_SCSI_CHELSIO_FCOE=m | ||
1618 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set | ||
1619 | CONFIG_SCSI_DH=y | ||
1620 | CONFIG_SCSI_DH_RDAC=m | ||
1621 | CONFIG_SCSI_DH_HP_SW=m | ||
1622 | CONFIG_SCSI_DH_EMC=m | ||
1623 | CONFIG_SCSI_DH_ALUA=m | ||
1624 | CONFIG_SCSI_OSD_INITIATOR=m | ||
1625 | CONFIG_SCSI_OSD_ULD=m | ||
1626 | CONFIG_SCSI_OSD_DPRINT_SENSE=1 | ||
1627 | # CONFIG_SCSI_OSD_DEBUG is not set | ||
1628 | CONFIG_HAVE_PATA_PLATFORM=y | ||
1629 | CONFIG_ATA=y | ||
1630 | # CONFIG_ATA_NONSTANDARD is not set | ||
1631 | CONFIG_ATA_VERBOSE_ERROR=y | ||
1632 | CONFIG_SATA_PMP=y | ||
1633 | |||
1634 | # | ||
1635 | # Controllers with non-SFF native interface | ||
1636 | # | ||
1637 | CONFIG_SATA_AHCI=y | ||
1638 | CONFIG_SATA_AHCI_PLATFORM=y | ||
1639 | CONFIG_AHCI_XGENE=y | ||
1640 | CONFIG_SATA_INIC162X=m | ||
1641 | CONFIG_SATA_ACARD_AHCI=m | ||
1642 | CONFIG_SATA_SIL24=m | ||
1643 | CONFIG_ATA_SFF=y | ||
1644 | |||
1645 | # | ||
1646 | # SFF controllers with custom DMA interface | ||
1647 | # | ||
1648 | CONFIG_PDC_ADMA=m | ||
1649 | CONFIG_SATA_QSTOR=m | ||
1650 | CONFIG_SATA_SX4=m | ||
1651 | CONFIG_ATA_BMDMA=y | ||
1652 | |||
1653 | # | ||
1654 | # SATA SFF controllers with BMDMA | ||
1655 | # | ||
1656 | CONFIG_ATA_PIIX=y | ||
1657 | CONFIG_SATA_MV=m | ||
1658 | CONFIG_SATA_NV=m | ||
1659 | CONFIG_SATA_PROMISE=m | ||
1660 | CONFIG_SATA_SIL=m | ||
1661 | CONFIG_SATA_SIS=m | ||
1662 | CONFIG_SATA_SVW=m | ||
1663 | CONFIG_SATA_ULI=m | ||
1664 | CONFIG_SATA_VIA=m | ||
1665 | CONFIG_SATA_VITESSE=m | ||
1666 | |||
1667 | # | ||
1668 | # PATA SFF controllers with BMDMA | ||
1669 | # | ||
1670 | CONFIG_PATA_ALI=m | ||
1671 | CONFIG_PATA_AMD=m | ||
1672 | CONFIG_PATA_ARTOP=m | ||
1673 | CONFIG_PATA_ATIIXP=m | ||
1674 | CONFIG_PATA_ATP867X=m | ||
1675 | CONFIG_PATA_CMD64X=m | ||
1676 | CONFIG_PATA_CYPRESS=m | ||
1677 | CONFIG_PATA_EFAR=m | ||
1678 | CONFIG_PATA_HPT366=m | ||
1679 | CONFIG_PATA_HPT37X=m | ||
1680 | CONFIG_PATA_HPT3X2N=m | ||
1681 | CONFIG_PATA_HPT3X3=m | ||
1682 | # CONFIG_PATA_HPT3X3_DMA is not set | ||
1683 | CONFIG_PATA_IT8213=m | ||
1684 | CONFIG_PATA_IT821X=m | ||
1685 | CONFIG_PATA_JMICRON=m | ||
1686 | CONFIG_PATA_MARVELL=m | ||
1687 | CONFIG_PATA_NETCELL=m | ||
1688 | CONFIG_PATA_NINJA32=m | ||
1689 | CONFIG_PATA_NS87415=m | ||
1690 | CONFIG_PATA_OLDPIIX=m | ||
1691 | CONFIG_PATA_OPTIDMA=m | ||
1692 | CONFIG_PATA_PDC2027X=m | ||
1693 | CONFIG_PATA_PDC_OLD=m | ||
1694 | # CONFIG_PATA_RADISYS is not set | ||
1695 | CONFIG_PATA_RDC=m | ||
1696 | CONFIG_PATA_SCH=m | ||
1697 | CONFIG_PATA_SERVERWORKS=m | ||
1698 | CONFIG_PATA_SIL680=m | ||
1699 | CONFIG_PATA_SIS=m | ||
1700 | CONFIG_PATA_TOSHIBA=m | ||
1701 | CONFIG_PATA_TRIFLEX=m | ||
1702 | CONFIG_PATA_VIA=m | ||
1703 | CONFIG_PATA_WINBOND=m | ||
1704 | |||
1705 | # | ||
1706 | # PIO-only SFF controllers | ||
1707 | # | ||
1708 | CONFIG_PATA_CMD640_PCI=m | ||
1709 | CONFIG_PATA_MPIIX=m | ||
1710 | CONFIG_PATA_NS87410=m | ||
1711 | CONFIG_PATA_OPTI=m | ||
1712 | CONFIG_PATA_PLATFORM=y | ||
1713 | # CONFIG_PATA_OF_PLATFORM is not set | ||
1714 | # CONFIG_PATA_RZ1000 is not set | ||
1715 | |||
1716 | # | ||
1717 | # Generic fallback / legacy drivers | ||
1718 | # | ||
1719 | CONFIG_ATA_GENERIC=y | ||
1720 | # CONFIG_PATA_LEGACY is not set | ||
1721 | CONFIG_MD=y | ||
1722 | CONFIG_BLK_DEV_MD=y | ||
1723 | CONFIG_MD_AUTODETECT=y | ||
1724 | CONFIG_MD_LINEAR=m | ||
1725 | CONFIG_MD_RAID0=m | ||
1726 | CONFIG_MD_RAID1=m | ||
1727 | CONFIG_MD_RAID10=m | ||
1728 | CONFIG_MD_RAID456=m | ||
1729 | CONFIG_MD_MULTIPATH=m | ||
1730 | CONFIG_MD_FAULTY=m | ||
1731 | # CONFIG_MD_CLUSTER is not set | ||
1732 | CONFIG_BCACHE=m | ||
1733 | # CONFIG_BCACHE_DEBUG is not set | ||
1734 | # CONFIG_BCACHE_CLOSURES_DEBUG is not set | ||
1735 | CONFIG_BLK_DEV_DM_BUILTIN=y | ||
1736 | CONFIG_BLK_DEV_DM=y | ||
1737 | # CONFIG_DM_MQ_DEFAULT is not set | ||
1738 | CONFIG_DM_DEBUG=y | ||
1739 | CONFIG_DM_BUFIO=y | ||
1740 | CONFIG_DM_BIO_PRISON=m | ||
1741 | CONFIG_DM_PERSISTENT_DATA=m | ||
1742 | # CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set | ||
1743 | CONFIG_DM_CRYPT=m | ||
1744 | CONFIG_DM_SNAPSHOT=y | ||
1745 | CONFIG_DM_THIN_PROVISIONING=m | ||
1746 | CONFIG_DM_CACHE=m | ||
1747 | CONFIG_DM_CACHE_MQ=m | ||
1748 | CONFIG_DM_CACHE_CLEANER=m | ||
1749 | # CONFIG_DM_ERA is not set | ||
1750 | CONFIG_DM_MIRROR=y | ||
1751 | CONFIG_DM_LOG_USERSPACE=m | ||
1752 | CONFIG_DM_RAID=m | ||
1753 | CONFIG_DM_ZERO=y | ||
1754 | CONFIG_DM_MULTIPATH=m | ||
1755 | CONFIG_DM_MULTIPATH_QL=m | ||
1756 | CONFIG_DM_MULTIPATH_ST=m | ||
1757 | CONFIG_DM_DELAY=m | ||
1758 | CONFIG_DM_UEVENT=y | ||
1759 | CONFIG_DM_FLAKEY=m | ||
1760 | CONFIG_DM_VERITY=m | ||
1761 | CONFIG_DM_SWITCH=m | ||
1762 | # CONFIG_DM_LOG_WRITES is not set | ||
1763 | CONFIG_TARGET_CORE=m | ||
1764 | CONFIG_TCM_IBLOCK=m | ||
1765 | CONFIG_TCM_FILEIO=m | ||
1766 | CONFIG_TCM_PSCSI=m | ||
1767 | # CONFIG_TCM_USER2 is not set | ||
1768 | CONFIG_LOOPBACK_TARGET=m | ||
1769 | CONFIG_TCM_FC=m | ||
1770 | CONFIG_ISCSI_TARGET=m | ||
1771 | # CONFIG_FUSION is not set | ||
1772 | |||
1773 | # | ||
1774 | # IEEE 1394 (FireWire) support | ||
1775 | # | ||
1776 | # CONFIG_FIREWIRE is not set | ||
1777 | CONFIG_FIREWIRE_NOSY=m | ||
1778 | CONFIG_NETDEVICES=y | ||
1779 | CONFIG_MII=y | ||
1780 | CONFIG_NET_CORE=y | ||
1781 | CONFIG_BONDING=m | ||
1782 | CONFIG_DUMMY=m | ||
1783 | CONFIG_EQUALIZER=m | ||
1784 | CONFIG_NET_FC=y | ||
1785 | CONFIG_IFB=m | ||
1786 | CONFIG_NET_TEAM=m | ||
1787 | CONFIG_NET_TEAM_MODE_BROADCAST=m | ||
1788 | CONFIG_NET_TEAM_MODE_ROUNDROBIN=m | ||
1789 | CONFIG_NET_TEAM_MODE_RANDOM=m | ||
1790 | CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m | ||
1791 | CONFIG_NET_TEAM_MODE_LOADBALANCE=m | ||
1792 | CONFIG_MACVLAN=m | ||
1793 | CONFIG_MACVTAP=m | ||
1794 | # CONFIG_IPVLAN is not set | ||
1795 | CONFIG_VXLAN=m | ||
1796 | CONFIG_NETCONSOLE=m | ||
1797 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
1798 | CONFIG_NETPOLL=y | ||
1799 | CONFIG_NET_POLL_CONTROLLER=y | ||
1800 | CONFIG_TUN=m | ||
1801 | CONFIG_VETH=m | ||
1802 | CONFIG_VIRTIO_NET=m | ||
1803 | CONFIG_NLMON=m | ||
1804 | # CONFIG_ARCNET is not set | ||
1805 | # CONFIG_ATM_DRIVERS is not set | ||
1806 | |||
1807 | # | ||
1808 | # CAIF transport drivers | ||
1809 | # | ||
1810 | |||
1811 | # | ||
1812 | # Distributed Switch Architecture drivers | ||
1813 | # | ||
1814 | # CONFIG_NET_DSA_MV88E6XXX is not set | ||
1815 | # CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set | ||
1816 | CONFIG_ETHERNET=y | ||
1817 | CONFIG_MDIO=y | ||
1818 | # CONFIG_NET_VENDOR_3COM is not set | ||
1819 | # CONFIG_NET_VENDOR_ADAPTEC is not set | ||
1820 | CONFIG_NET_VENDOR_AGERE=y | ||
1821 | # CONFIG_ET131X is not set | ||
1822 | CONFIG_NET_VENDOR_ALTEON=y | ||
1823 | CONFIG_ACENIC=m | ||
1824 | # CONFIG_ACENIC_OMIT_TIGON_I is not set | ||
1825 | CONFIG_ALTERA_TSE=m | ||
1826 | CONFIG_NET_VENDOR_AMD=y | ||
1827 | CONFIG_AMD8111_ETH=m | ||
1828 | CONFIG_PCNET32=m | ||
1829 | CONFIG_AMD_XGBE=y | ||
1830 | CONFIG_AMD_XGBE_DCB=y | ||
1831 | CONFIG_NET_VENDOR_ARC=y | ||
1832 | CONFIG_ARC_EMAC_CORE=m | ||
1833 | CONFIG_ARC_EMAC=m | ||
1834 | CONFIG_NET_VENDOR_ATHEROS=y | ||
1835 | CONFIG_ATL2=m | ||
1836 | CONFIG_ATL1=m | ||
1837 | CONFIG_ATL1E=m | ||
1838 | CONFIG_ATL1C=m | ||
1839 | CONFIG_ALX=m | ||
1840 | CONFIG_NET_CADENCE=y | ||
1841 | # CONFIG_MACB is not set | ||
1842 | CONFIG_NET_VENDOR_BROADCOM=y | ||
1843 | CONFIG_B44=m | ||
1844 | CONFIG_B44_PCI_AUTOSELECT=y | ||
1845 | CONFIG_B44_PCICORE_AUTOSELECT=y | ||
1846 | CONFIG_B44_PCI=y | ||
1847 | CONFIG_BCMGENET=m | ||
1848 | CONFIG_BNX2=m | ||
1849 | CONFIG_CNIC=m | ||
1850 | CONFIG_TIGON3=m | ||
1851 | CONFIG_BNX2X=m | ||
1852 | CONFIG_BNX2X_SRIOV=y | ||
1853 | # CONFIG_SYSTEMPORT is not set | ||
1854 | # CONFIG_NET_VENDOR_BROCADE is not set | ||
1855 | # CONFIG_NET_VENDOR_CHELSIO is not set | ||
1856 | # CONFIG_NET_VENDOR_CISCO is not set | ||
1857 | CONFIG_DNET=m | ||
1858 | # CONFIG_NET_VENDOR_DEC is not set | ||
1859 | CONFIG_NET_VENDOR_DLINK=y | ||
1860 | CONFIG_DL2K=m | ||
1861 | CONFIG_SUNDANCE=m | ||
1862 | # CONFIG_SUNDANCE_MMIO is not set | ||
1863 | # CONFIG_NET_VENDOR_EMULEX is not set | ||
1864 | # CONFIG_NET_VENDOR_EXAR is not set | ||
1865 | # CONFIG_NET_VENDOR_HP is not set | ||
1866 | CONFIG_NET_VENDOR_INTEL=y | ||
1867 | CONFIG_E100=y | ||
1868 | CONFIG_E1000=y | ||
1869 | CONFIG_E1000E=y | ||
1870 | CONFIG_IGB=y | ||
1871 | CONFIG_IGB_HWMON=y | ||
1872 | CONFIG_IGBVF=y | ||
1873 | CONFIG_IXGB=y | ||
1874 | CONFIG_IXGBE=y | ||
1875 | CONFIG_IXGBE_HWMON=y | ||
1876 | CONFIG_IXGBE_DCB=y | ||
1877 | CONFIG_IXGBEVF=y | ||
1878 | CONFIG_I40E=y | ||
1879 | CONFIG_I40E_DCB=y | ||
1880 | CONFIG_I40E_FCOE=y | ||
1881 | CONFIG_I40EVF=y | ||
1882 | CONFIG_FM10K=y | ||
1883 | CONFIG_NET_VENDOR_I825XX=y | ||
1884 | # CONFIG_IP1000 is not set | ||
1885 | CONFIG_JME=m | ||
1886 | CONFIG_NET_VENDOR_MARVELL=y | ||
1887 | CONFIG_MVMDIO=m | ||
1888 | CONFIG_SKGE=m | ||
1889 | # CONFIG_SKGE_DEBUG is not set | ||
1890 | CONFIG_SKGE_GENESIS=y | ||
1891 | CONFIG_SKY2=m | ||
1892 | # CONFIG_SKY2_DEBUG is not set | ||
1893 | # CONFIG_NET_VENDOR_MELLANOX is not set | ||
1894 | CONFIG_NET_VENDOR_MICREL=y | ||
1895 | # CONFIG_KS8842 is not set | ||
1896 | # CONFIG_KS8851_MLL is not set | ||
1897 | CONFIG_KSZ884X_PCI=m | ||
1898 | CONFIG_NET_VENDOR_MYRI=y | ||
1899 | CONFIG_MYRI10GE=m | ||
1900 | CONFIG_FEALNX=m | ||
1901 | CONFIG_NET_VENDOR_NATSEMI=y | ||
1902 | CONFIG_NATSEMI=m | ||
1903 | CONFIG_NS83820=m | ||
1904 | CONFIG_NET_VENDOR_8390=y | ||
1905 | CONFIG_NE2K_PCI=m | ||
1906 | CONFIG_NET_VENDOR_NVIDIA=y | ||
1907 | CONFIG_FORCEDETH=m | ||
1908 | CONFIG_NET_VENDOR_OKI=y | ||
1909 | CONFIG_ETHOC=m | ||
1910 | CONFIG_NET_PACKET_ENGINE=y | ||
1911 | CONFIG_HAMACHI=m | ||
1912 | CONFIG_YELLOWFIN=m | ||
1913 | # CONFIG_NET_VENDOR_QLOGIC is not set | ||
1914 | CONFIG_NET_VENDOR_QUALCOMM=y | ||
1915 | CONFIG_NET_VENDOR_REALTEK=y | ||
1916 | CONFIG_8139CP=m | ||
1917 | CONFIG_8139TOO=m | ||
1918 | # CONFIG_8139TOO_PIO is not set | ||
1919 | # CONFIG_8139TOO_TUNE_TWISTER is not set | ||
1920 | CONFIG_8139TOO_8129=y | ||
1921 | # CONFIG_8139_OLD_RX_RESET is not set | ||
1922 | CONFIG_R8169=m | ||
1923 | CONFIG_NET_VENDOR_RDC=y | ||
1924 | CONFIG_R6040=m | ||
1925 | CONFIG_NET_VENDOR_ROCKER=y | ||
1926 | # CONFIG_NET_VENDOR_SAMSUNG is not set | ||
1927 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
1928 | CONFIG_NET_VENDOR_SILAN=y | ||
1929 | CONFIG_SC92031=m | ||
1930 | CONFIG_NET_VENDOR_SIS=y | ||
1931 | CONFIG_SIS900=m | ||
1932 | CONFIG_SIS190=m | ||
1933 | # CONFIG_SFC is not set | ||
1934 | CONFIG_NET_VENDOR_SMSC=y | ||
1935 | CONFIG_SMC91X=m | ||
1936 | CONFIG_EPIC100=m | ||
1937 | CONFIG_SMSC911X=m | ||
1938 | # CONFIG_SMSC911X_ARCH_HOOKS is not set | ||
1939 | CONFIG_SMSC9420=m | ||
1940 | CONFIG_NET_VENDOR_STMICRO=y | ||
1941 | CONFIG_STMMAC_ETH=m | ||
1942 | # CONFIG_STMMAC_PLATFORM is not set | ||
1943 | # CONFIG_STMMAC_PCI is not set | ||
1944 | # CONFIG_NET_VENDOR_SUN is not set | ||
1945 | CONFIG_NET_VENDOR_TEHUTI=y | ||
1946 | CONFIG_TEHUTI=m | ||
1947 | CONFIG_NET_VENDOR_TI=y | ||
1948 | # CONFIG_TI_CPSW_ALE is not set | ||
1949 | CONFIG_TLAN=m | ||
1950 | CONFIG_NET_VENDOR_VIA=y | ||
1951 | CONFIG_VIA_RHINE=m | ||
1952 | CONFIG_VIA_RHINE_MMIO=y | ||
1953 | CONFIG_VIA_VELOCITY=m | ||
1954 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
1955 | # CONFIG_FDDI is not set | ||
1956 | # CONFIG_HIPPI is not set | ||
1957 | CONFIG_PHYLIB=y | ||
1958 | |||
1959 | # | ||
1960 | # MII PHY device drivers | ||
1961 | # | ||
1962 | CONFIG_AT803X_PHY=m | ||
1963 | CONFIG_AMD_PHY=m | ||
1964 | CONFIG_AMD_XGBE_PHY=y | ||
1965 | CONFIG_MARVELL_PHY=m | ||
1966 | CONFIG_DAVICOM_PHY=m | ||
1967 | CONFIG_QSEMI_PHY=m | ||
1968 | CONFIG_LXT_PHY=m | ||
1969 | CONFIG_CICADA_PHY=m | ||
1970 | CONFIG_VITESSE_PHY=m | ||
1971 | CONFIG_SMSC_PHY=m | ||
1972 | CONFIG_BROADCOM_PHY=m | ||
1973 | CONFIG_BCM7XXX_PHY=m | ||
1974 | CONFIG_BCM87XX_PHY=m | ||
1975 | CONFIG_ICPLUS_PHY=m | ||
1976 | CONFIG_REALTEK_PHY=m | ||
1977 | CONFIG_NATIONAL_PHY=m | ||
1978 | CONFIG_STE10XP=m | ||
1979 | CONFIG_LSI_ET1011C_PHY=m | ||
1980 | CONFIG_MICREL_PHY=m | ||
1981 | CONFIG_FIXED_PHY=y | ||
1982 | CONFIG_MDIO_BITBANG=m | ||
1983 | CONFIG_MDIO_GPIO=m | ||
1984 | # CONFIG_MDIO_BUS_MUX_GPIO is not set | ||
1985 | # CONFIG_MDIO_BUS_MUX_MMIOREG is not set | ||
1986 | # CONFIG_MDIO_BCM_UNIMAC is not set | ||
1987 | CONFIG_PPP=m | ||
1988 | CONFIG_PPP_BSDCOMP=m | ||
1989 | CONFIG_PPP_DEFLATE=m | ||
1990 | CONFIG_PPP_FILTER=y | ||
1991 | CONFIG_PPP_MPPE=m | ||
1992 | CONFIG_PPP_MULTILINK=y | ||
1993 | CONFIG_PPPOATM=m | ||
1994 | CONFIG_PPPOE=m | ||
1995 | CONFIG_PPTP=m | ||
1996 | CONFIG_PPPOL2TP=m | ||
1997 | CONFIG_PPP_ASYNC=m | ||
1998 | CONFIG_PPP_SYNC_TTY=m | ||
1999 | CONFIG_SLIP=m | ||
2000 | CONFIG_SLHC=m | ||
2001 | CONFIG_SLIP_COMPRESSED=y | ||
2002 | CONFIG_SLIP_SMART=y | ||
2003 | # CONFIG_SLIP_MODE_SLIP6 is not set | ||
2004 | CONFIG_USB_NET_DRIVERS=y | ||
2005 | CONFIG_USB_CATC=m | ||
2006 | CONFIG_USB_KAWETH=m | ||
2007 | CONFIG_USB_PEGASUS=m | ||
2008 | CONFIG_USB_RTL8150=m | ||
2009 | CONFIG_USB_RTL8152=m | ||
2010 | CONFIG_USB_USBNET=m | ||
2011 | CONFIG_USB_NET_AX8817X=m | ||
2012 | CONFIG_USB_NET_AX88179_178A=m | ||
2013 | CONFIG_USB_NET_CDCETHER=m | ||
2014 | CONFIG_USB_NET_CDC_EEM=m | ||
2015 | CONFIG_USB_NET_CDC_NCM=m | ||
2016 | CONFIG_USB_NET_HUAWEI_CDC_NCM=m | ||
2017 | CONFIG_USB_NET_CDC_MBIM=m | ||
2018 | CONFIG_USB_NET_DM9601=m | ||
2019 | CONFIG_USB_NET_SR9700=m | ||
2020 | # CONFIG_USB_NET_SR9800 is not set | ||
2021 | CONFIG_USB_NET_SMSC75XX=m | ||
2022 | CONFIG_USB_NET_SMSC95XX=m | ||
2023 | CONFIG_USB_NET_GL620A=m | ||
2024 | CONFIG_USB_NET_NET1080=m | ||
2025 | CONFIG_USB_NET_PLUSB=m | ||
2026 | CONFIG_USB_NET_MCS7830=m | ||
2027 | CONFIG_USB_NET_RNDIS_HOST=m | ||
2028 | CONFIG_USB_NET_CDC_SUBSET=m | ||
2029 | CONFIG_USB_ALI_M5632=y | ||
2030 | CONFIG_USB_AN2720=y | ||
2031 | CONFIG_USB_BELKIN=y | ||
2032 | CONFIG_USB_ARMLINUX=y | ||
2033 | CONFIG_USB_EPSON2888=y | ||
2034 | CONFIG_USB_KC2190=y | ||
2035 | CONFIG_USB_NET_ZAURUS=m | ||
2036 | CONFIG_USB_NET_CX82310_ETH=m | ||
2037 | CONFIG_USB_NET_KALMIA=m | ||
2038 | CONFIG_USB_NET_QMI_WWAN=m | ||
2039 | CONFIG_USB_HSO=m | ||
2040 | CONFIG_USB_NET_INT51X1=m | ||
2041 | CONFIG_USB_IPHETH=m | ||
2042 | CONFIG_USB_SIERRA_NET=m | ||
2043 | CONFIG_USB_VL600=m | ||
2044 | CONFIG_WLAN=y | ||
2045 | # CONFIG_LIBERTAS_THINFIRM is not set | ||
2046 | # CONFIG_ATMEL is not set | ||
2047 | CONFIG_AT76C50X_USB=m | ||
2048 | # CONFIG_PRISM54 is not set | ||
2049 | # CONFIG_USB_ZD1201 is not set | ||
2050 | CONFIG_USB_NET_RNDIS_WLAN=m | ||
2051 | CONFIG_RTL8180=m | ||
2052 | CONFIG_RTL8187=m | ||
2053 | CONFIG_RTL8187_LEDS=y | ||
2054 | # CONFIG_ADM8211 is not set | ||
2055 | CONFIG_MAC80211_HWSIM=m | ||
2056 | CONFIG_MWL8K=m | ||
2057 | CONFIG_ATH_COMMON=m | ||
2058 | CONFIG_ATH_CARDS=m | ||
2059 | # CONFIG_ATH_DEBUG is not set | ||
2060 | CONFIG_ATH5K=m | ||
2061 | CONFIG_ATH5K_DEBUG=y | ||
2062 | # CONFIG_ATH5K_TRACER is not set | ||
2063 | CONFIG_ATH5K_PCI=y | ||
2064 | CONFIG_ATH9K_HW=m | ||
2065 | CONFIG_ATH9K_COMMON=m | ||
2066 | CONFIG_ATH9K_BTCOEX_SUPPORT=y | ||
2067 | CONFIG_ATH9K=m | ||
2068 | CONFIG_ATH9K_PCI=y | ||
2069 | CONFIG_ATH9K_AHB=y | ||
2070 | CONFIG_ATH9K_DEBUGFS=y | ||
2071 | # CONFIG_ATH9K_STATION_STATISTICS is not set | ||
2072 | # CONFIG_ATH9K_DYNACK is not set | ||
2073 | # CONFIG_ATH9K_WOW is not set | ||
2074 | CONFIG_ATH9K_RFKILL=y | ||
2075 | # CONFIG_ATH9K_CHANNEL_CONTEXT is not set | ||
2076 | CONFIG_ATH9K_PCOEM=y | ||
2077 | CONFIG_ATH9K_HTC=m | ||
2078 | # CONFIG_ATH9K_HTC_DEBUGFS is not set | ||
2079 | CONFIG_CARL9170=m | ||
2080 | CONFIG_CARL9170_LEDS=y | ||
2081 | # CONFIG_CARL9170_DEBUGFS is not set | ||
2082 | CONFIG_CARL9170_WPC=y | ||
2083 | # CONFIG_CARL9170_HWRNG is not set | ||
2084 | CONFIG_ATH6KL=m | ||
2085 | CONFIG_ATH6KL_SDIO=m | ||
2086 | CONFIG_ATH6KL_USB=m | ||
2087 | CONFIG_ATH6KL_DEBUG=y | ||
2088 | # CONFIG_ATH6KL_TRACING is not set | ||
2089 | CONFIG_AR5523=m | ||
2090 | CONFIG_WIL6210=m | ||
2091 | CONFIG_WIL6210_ISR_COR=y | ||
2092 | # CONFIG_WIL6210_TRACING is not set | ||
2093 | CONFIG_ATH10K=m | ||
2094 | CONFIG_ATH10K_PCI=m | ||
2095 | # CONFIG_ATH10K_DEBUG is not set | ||
2096 | CONFIG_ATH10K_DEBUGFS=y | ||
2097 | # CONFIG_ATH10K_TRACING is not set | ||
2098 | CONFIG_WCN36XX=m | ||
2099 | # CONFIG_WCN36XX_DEBUGFS is not set | ||
2100 | CONFIG_B43=m | ||
2101 | CONFIG_B43_BCMA=y | ||
2102 | CONFIG_B43_SSB=y | ||
2103 | CONFIG_B43_BUSES_BCMA_AND_SSB=y | ||
2104 | # CONFIG_B43_BUSES_BCMA is not set | ||
2105 | # CONFIG_B43_BUSES_SSB is not set | ||
2106 | CONFIG_B43_PCI_AUTOSELECT=y | ||
2107 | CONFIG_B43_PCICORE_AUTOSELECT=y | ||
2108 | CONFIG_B43_SDIO=y | ||
2109 | CONFIG_B43_BCMA_PIO=y | ||
2110 | CONFIG_B43_PIO=y | ||
2111 | # CONFIG_B43_PHY_G is not set | ||
2112 | CONFIG_B43_PHY_N=y | ||
2113 | CONFIG_B43_PHY_LP=y | ||
2114 | CONFIG_B43_PHY_HT=y | ||
2115 | CONFIG_B43_LEDS=y | ||
2116 | CONFIG_B43_HWRNG=y | ||
2117 | # CONFIG_B43_DEBUG is not set | ||
2118 | CONFIG_B43LEGACY=m | ||
2119 | CONFIG_B43LEGACY_PCI_AUTOSELECT=y | ||
2120 | CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y | ||
2121 | CONFIG_B43LEGACY_LEDS=y | ||
2122 | CONFIG_B43LEGACY_HWRNG=y | ||
2123 | # CONFIG_B43LEGACY_DEBUG is not set | ||
2124 | CONFIG_B43LEGACY_DMA=y | ||
2125 | CONFIG_B43LEGACY_PIO=y | ||
2126 | CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y | ||
2127 | # CONFIG_B43LEGACY_DMA_MODE is not set | ||
2128 | # CONFIG_B43LEGACY_PIO_MODE is not set | ||
2129 | CONFIG_BRCMUTIL=m | ||
2130 | CONFIG_BRCMSMAC=m | ||
2131 | CONFIG_BRCMFMAC=m | ||
2132 | CONFIG_BRCMFMAC_PROTO_BCDC=y | ||
2133 | CONFIG_BRCMFMAC_PROTO_MSGBUF=y | ||
2134 | CONFIG_BRCMFMAC_SDIO=y | ||
2135 | CONFIG_BRCMFMAC_USB=y | ||
2136 | CONFIG_BRCMFMAC_PCIE=y | ||
2137 | # CONFIG_BRCM_TRACING is not set | ||
2138 | # CONFIG_BRCMDBG is not set | ||
2139 | # CONFIG_HOSTAP is not set | ||
2140 | # CONFIG_IPW2100 is not set | ||
2141 | # CONFIG_IPW2200 is not set | ||
2142 | CONFIG_IWLWIFI=m | ||
2143 | CONFIG_IWLWIFI_LEDS=y | ||
2144 | CONFIG_IWLDVM=m | ||
2145 | CONFIG_IWLMVM=m | ||
2146 | CONFIG_IWLWIFI_OPMODE_MODULAR=y | ||
2147 | # CONFIG_IWLWIFI_BCAST_FILTERING is not set | ||
2148 | # CONFIG_IWLWIFI_UAPSD is not set | ||
2149 | |||
2150 | # | ||
2151 | # Debugging Options | ||
2152 | # | ||
2153 | CONFIG_IWLWIFI_DEBUG=y | ||
2154 | CONFIG_IWLWIFI_DEBUGFS=y | ||
2155 | # CONFIG_IWLWIFI_DEBUG_EXPERIMENTAL_UCODE is not set | ||
2156 | # CONFIG_IWLWIFI_DEVICE_TRACING is not set | ||
2157 | CONFIG_IWLEGACY=m | ||
2158 | CONFIG_IWL4965=m | ||
2159 | CONFIG_IWL3945=m | ||
2160 | |||
2161 | # | ||
2162 | # iwl3945 / iwl4965 Debugging Options | ||
2163 | # | ||
2164 | CONFIG_IWLEGACY_DEBUG=y | ||
2165 | CONFIG_IWLEGACY_DEBUGFS=y | ||
2166 | CONFIG_LIBERTAS=m | ||
2167 | CONFIG_LIBERTAS_USB=m | ||
2168 | CONFIG_LIBERTAS_SDIO=m | ||
2169 | # CONFIG_LIBERTAS_DEBUG is not set | ||
2170 | CONFIG_LIBERTAS_MESH=y | ||
2171 | # CONFIG_HERMES is not set | ||
2172 | CONFIG_P54_COMMON=m | ||
2173 | CONFIG_P54_USB=m | ||
2174 | CONFIG_P54_PCI=m | ||
2175 | CONFIG_P54_LEDS=y | ||
2176 | CONFIG_RT2X00=m | ||
2177 | CONFIG_RT2400PCI=m | ||
2178 | CONFIG_RT2500PCI=m | ||
2179 | CONFIG_RT61PCI=m | ||
2180 | CONFIG_RT2800PCI=m | ||
2181 | CONFIG_RT2800PCI_RT33XX=y | ||
2182 | CONFIG_RT2800PCI_RT35XX=y | ||
2183 | CONFIG_RT2800PCI_RT53XX=y | ||
2184 | CONFIG_RT2800PCI_RT3290=y | ||
2185 | CONFIG_RT2500USB=m | ||
2186 | CONFIG_RT73USB=m | ||
2187 | CONFIG_RT2800USB=m | ||
2188 | CONFIG_RT2800USB_RT33XX=y | ||
2189 | CONFIG_RT2800USB_RT35XX=y | ||
2190 | CONFIG_RT2800USB_RT3573=y | ||
2191 | CONFIG_RT2800USB_RT53XX=y | ||
2192 | CONFIG_RT2800USB_RT55XX=y | ||
2193 | CONFIG_RT2800USB_UNKNOWN=y | ||
2194 | CONFIG_RT2800_LIB=m | ||
2195 | CONFIG_RT2800_LIB_MMIO=m | ||
2196 | CONFIG_RT2X00_LIB_MMIO=m | ||
2197 | CONFIG_RT2X00_LIB_PCI=m | ||
2198 | CONFIG_RT2X00_LIB_USB=m | ||
2199 | CONFIG_RT2X00_LIB=m | ||
2200 | CONFIG_RT2X00_LIB_FIRMWARE=y | ||
2201 | CONFIG_RT2X00_LIB_CRYPTO=y | ||
2202 | CONFIG_RT2X00_LIB_LEDS=y | ||
2203 | CONFIG_RT2X00_LIB_DEBUGFS=y | ||
2204 | # CONFIG_RT2X00_DEBUG is not set | ||
2205 | CONFIG_RTL_CARDS=m | ||
2206 | CONFIG_RTL8192CE=m | ||
2207 | CONFIG_RTL8192SE=m | ||
2208 | CONFIG_RTL8192DE=m | ||
2209 | CONFIG_RTL8723AE=m | ||
2210 | CONFIG_RTL8723BE=m | ||
2211 | CONFIG_RTL8188EE=m | ||
2212 | # CONFIG_RTL8192EE is not set | ||
2213 | # CONFIG_RTL8821AE is not set | ||
2214 | CONFIG_RTL8192CU=m | ||
2215 | CONFIG_RTLWIFI=m | ||
2216 | CONFIG_RTLWIFI_PCI=m | ||
2217 | CONFIG_RTLWIFI_USB=m | ||
2218 | # CONFIG_RTLWIFI_DEBUG is not set | ||
2219 | CONFIG_RTL8192C_COMMON=m | ||
2220 | CONFIG_RTL8723_COMMON=m | ||
2221 | CONFIG_RTLBTCOEXIST=m | ||
2222 | # CONFIG_WL_TI is not set | ||
2223 | CONFIG_ZD1211RW=m | ||
2224 | # CONFIG_ZD1211RW_DEBUG is not set | ||
2225 | CONFIG_MWIFIEX=m | ||
2226 | CONFIG_MWIFIEX_SDIO=m | ||
2227 | CONFIG_MWIFIEX_PCIE=m | ||
2228 | CONFIG_MWIFIEX_USB=m | ||
2229 | CONFIG_CW1200=m | ||
2230 | CONFIG_CW1200_WLAN_SDIO=m | ||
2231 | CONFIG_RSI_91X=m | ||
2232 | CONFIG_RSI_DEBUGFS=y | ||
2233 | CONFIG_RSI_SDIO=m | ||
2234 | CONFIG_RSI_USB=m | ||
2235 | |||
2236 | # | ||
2237 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
2238 | # | ||
2239 | # CONFIG_WAN is not set | ||
2240 | CONFIG_IEEE802154_DRIVERS=m | ||
2241 | CONFIG_IEEE802154_FAKELB=m | ||
2242 | # CONFIG_VMXNET3 is not set | ||
2243 | # CONFIG_ISDN is not set | ||
2244 | |||
2245 | # | ||
2246 | # Input device support | ||
2247 | # | ||
2248 | CONFIG_INPUT=y | ||
2249 | CONFIG_INPUT_FF_MEMLESS=y | ||
2250 | CONFIG_INPUT_POLLDEV=m | ||
2251 | CONFIG_INPUT_SPARSEKMAP=m | ||
2252 | # CONFIG_INPUT_MATRIXKMAP is not set | ||
2253 | |||
2254 | # | ||
2255 | # Userland interfaces | ||
2256 | # | ||
2257 | CONFIG_INPUT_MOUSEDEV=y | ||
2258 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
2259 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
2260 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
2261 | CONFIG_INPUT_JOYDEV=m | ||
2262 | CONFIG_INPUT_EVDEV=y | ||
2263 | # CONFIG_INPUT_EVBUG is not set | ||
2264 | |||
2265 | # | ||
2266 | # Input Device Drivers | ||
2267 | # | ||
2268 | CONFIG_INPUT_KEYBOARD=y | ||
2269 | # CONFIG_KEYBOARD_ADP5588 is not set | ||
2270 | # CONFIG_KEYBOARD_ADP5589 is not set | ||
2271 | CONFIG_KEYBOARD_ATKBD=y | ||
2272 | # CONFIG_KEYBOARD_QT1070 is not set | ||
2273 | # CONFIG_KEYBOARD_QT2160 is not set | ||
2274 | # CONFIG_KEYBOARD_LKKBD is not set | ||
2275 | # CONFIG_KEYBOARD_GPIO is not set | ||
2276 | # CONFIG_KEYBOARD_GPIO_POLLED is not set | ||
2277 | # CONFIG_KEYBOARD_TCA6416 is not set | ||
2278 | # CONFIG_KEYBOARD_TCA8418 is not set | ||
2279 | # CONFIG_KEYBOARD_MATRIX is not set | ||
2280 | # CONFIG_KEYBOARD_LM8323 is not set | ||
2281 | # CONFIG_KEYBOARD_LM8333 is not set | ||
2282 | # CONFIG_KEYBOARD_MAX7359 is not set | ||
2283 | # CONFIG_KEYBOARD_MCS is not set | ||
2284 | # CONFIG_KEYBOARD_MPR121 is not set | ||
2285 | # CONFIG_KEYBOARD_NEWTON is not set | ||
2286 | # CONFIG_KEYBOARD_OPENCORES is not set | ||
2287 | # CONFIG_KEYBOARD_SAMSUNG is not set | ||
2288 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
2289 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
2290 | # CONFIG_KEYBOARD_OMAP4 is not set | ||
2291 | # CONFIG_KEYBOARD_XTKBD is not set | ||
2292 | # CONFIG_KEYBOARD_CAP11XX is not set | ||
2293 | # CONFIG_KEYBOARD_BCM is not set | ||
2294 | CONFIG_INPUT_MOUSE=y | ||
2295 | CONFIG_MOUSE_PS2=y | ||
2296 | CONFIG_MOUSE_PS2_ALPS=y | ||
2297 | CONFIG_MOUSE_PS2_LOGIPS2PP=y | ||
2298 | CONFIG_MOUSE_PS2_SYNAPTICS=y | ||
2299 | CONFIG_MOUSE_PS2_CYPRESS=y | ||
2300 | CONFIG_MOUSE_PS2_TRACKPOINT=y | ||
2301 | CONFIG_MOUSE_PS2_ELANTECH=y | ||
2302 | CONFIG_MOUSE_PS2_SENTELIC=y | ||
2303 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
2304 | CONFIG_MOUSE_PS2_FOCALTECH=y | ||
2305 | CONFIG_MOUSE_SERIAL=m | ||
2306 | CONFIG_MOUSE_APPLETOUCH=m | ||
2307 | CONFIG_MOUSE_BCM5974=m | ||
2308 | CONFIG_MOUSE_CYAPA=m | ||
2309 | # CONFIG_MOUSE_ELAN_I2C is not set | ||
2310 | CONFIG_MOUSE_VSXXXAA=m | ||
2311 | # CONFIG_MOUSE_GPIO is not set | ||
2312 | CONFIG_MOUSE_SYNAPTICS_I2C=m | ||
2313 | CONFIG_MOUSE_SYNAPTICS_USB=m | ||
2314 | CONFIG_INPUT_JOYSTICK=y | ||
2315 | CONFIG_JOYSTICK_ANALOG=m | ||
2316 | CONFIG_JOYSTICK_A3D=m | ||
2317 | CONFIG_JOYSTICK_ADI=m | ||
2318 | CONFIG_JOYSTICK_COBRA=m | ||
2319 | CONFIG_JOYSTICK_GF2K=m | ||
2320 | CONFIG_JOYSTICK_GRIP=m | ||
2321 | CONFIG_JOYSTICK_GRIP_MP=m | ||
2322 | CONFIG_JOYSTICK_GUILLEMOT=m | ||
2323 | CONFIG_JOYSTICK_INTERACT=m | ||
2324 | CONFIG_JOYSTICK_SIDEWINDER=m | ||
2325 | CONFIG_JOYSTICK_TMDC=m | ||
2326 | CONFIG_JOYSTICK_IFORCE=m | ||
2327 | CONFIG_JOYSTICK_IFORCE_USB=y | ||
2328 | CONFIG_JOYSTICK_IFORCE_232=y | ||
2329 | CONFIG_JOYSTICK_WARRIOR=m | ||
2330 | CONFIG_JOYSTICK_MAGELLAN=m | ||
2331 | CONFIG_JOYSTICK_SPACEORB=m | ||
2332 | CONFIG_JOYSTICK_SPACEBALL=m | ||
2333 | CONFIG_JOYSTICK_STINGER=m | ||
2334 | CONFIG_JOYSTICK_TWIDJOY=m | ||
2335 | CONFIG_JOYSTICK_ZHENHUA=m | ||
2336 | # CONFIG_JOYSTICK_AS5011 is not set | ||
2337 | CONFIG_JOYSTICK_JOYDUMP=m | ||
2338 | CONFIG_JOYSTICK_XPAD=m | ||
2339 | CONFIG_JOYSTICK_XPAD_FF=y | ||
2340 | CONFIG_JOYSTICK_XPAD_LEDS=y | ||
2341 | CONFIG_INPUT_TABLET=y | ||
2342 | CONFIG_TABLET_USB_ACECAD=m | ||
2343 | CONFIG_TABLET_USB_AIPTEK=m | ||
2344 | CONFIG_TABLET_USB_GTCO=m | ||
2345 | CONFIG_TABLET_USB_HANWANG=m | ||
2346 | CONFIG_TABLET_USB_KBTAB=m | ||
2347 | CONFIG_TABLET_SERIAL_WACOM4=m | ||
2348 | CONFIG_INPUT_TOUCHSCREEN=y | ||
2349 | CONFIG_OF_TOUCHSCREEN=y | ||
2350 | # CONFIG_TOUCHSCREEN_AD7879 is not set | ||
2351 | # CONFIG_TOUCHSCREEN_AR1021_I2C is not set | ||
2352 | CONFIG_TOUCHSCREEN_ATMEL_MXT=m | ||
2353 | CONFIG_TOUCHSCREEN_AUO_PIXCIR=m | ||
2354 | # CONFIG_TOUCHSCREEN_BU21013 is not set | ||
2355 | # CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set | ||
2356 | # CONFIG_TOUCHSCREEN_CY8CTMG110 is not set | ||
2357 | # CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set | ||
2358 | # CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set | ||
2359 | CONFIG_TOUCHSCREEN_DYNAPRO=m | ||
2360 | # CONFIG_TOUCHSCREEN_HAMPSHIRE is not set | ||
2361 | CONFIG_TOUCHSCREEN_EETI=m | ||
2362 | CONFIG_TOUCHSCREEN_EGALAX=m | ||
2363 | CONFIG_TOUCHSCREEN_FUJITSU=m | ||
2364 | # CONFIG_TOUCHSCREEN_GOODIX is not set | ||
2365 | CONFIG_TOUCHSCREEN_ILI210X=m | ||
2366 | CONFIG_TOUCHSCREEN_GUNZE=m | ||
2367 | # CONFIG_TOUCHSCREEN_ELAN is not set | ||
2368 | CONFIG_TOUCHSCREEN_ELO=m | ||
2369 | CONFIG_TOUCHSCREEN_WACOM_W8001=m | ||
2370 | CONFIG_TOUCHSCREEN_WACOM_I2C=m | ||
2371 | # CONFIG_TOUCHSCREEN_MAX11801 is not set | ||
2372 | CONFIG_TOUCHSCREEN_MCS5000=m | ||
2373 | CONFIG_TOUCHSCREEN_MMS114=m | ||
2374 | CONFIG_TOUCHSCREEN_MTOUCH=m | ||
2375 | CONFIG_TOUCHSCREEN_INEXIO=m | ||
2376 | CONFIG_TOUCHSCREEN_MK712=m | ||
2377 | CONFIG_TOUCHSCREEN_PENMOUNT=m | ||
2378 | CONFIG_TOUCHSCREEN_EDT_FT5X06=m | ||
2379 | CONFIG_TOUCHSCREEN_TOUCHRIGHT=m | ||
2380 | CONFIG_TOUCHSCREEN_TOUCHWIN=m | ||
2381 | CONFIG_TOUCHSCREEN_PIXCIR=m | ||
2382 | CONFIG_TOUCHSCREEN_USB_COMPOSITE=m | ||
2383 | CONFIG_TOUCHSCREEN_USB_EGALAX=y | ||
2384 | CONFIG_TOUCHSCREEN_USB_PANJIT=y | ||
2385 | CONFIG_TOUCHSCREEN_USB_3M=y | ||
2386 | CONFIG_TOUCHSCREEN_USB_ITM=y | ||
2387 | CONFIG_TOUCHSCREEN_USB_ETURBO=y | ||
2388 | CONFIG_TOUCHSCREEN_USB_GUNZE=y | ||
2389 | CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y | ||
2390 | CONFIG_TOUCHSCREEN_USB_IRTOUCH=y | ||
2391 | CONFIG_TOUCHSCREEN_USB_IDEALTEK=y | ||
2392 | CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y | ||
2393 | CONFIG_TOUCHSCREEN_USB_GOTOP=y | ||
2394 | CONFIG_TOUCHSCREEN_USB_JASTEC=y | ||
2395 | CONFIG_TOUCHSCREEN_USB_ELO=y | ||
2396 | CONFIG_TOUCHSCREEN_USB_E2I=y | ||
2397 | CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y | ||
2398 | CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y | ||
2399 | CONFIG_TOUCHSCREEN_USB_NEXIO=y | ||
2400 | CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y | ||
2401 | CONFIG_TOUCHSCREEN_TOUCHIT213=m | ||
2402 | CONFIG_TOUCHSCREEN_TSC_SERIO=m | ||
2403 | CONFIG_TOUCHSCREEN_TSC2007=m | ||
2404 | CONFIG_TOUCHSCREEN_ST1232=m | ||
2405 | # CONFIG_TOUCHSCREEN_SX8654 is not set | ||
2406 | # CONFIG_TOUCHSCREEN_TPS6507X is not set | ||
2407 | CONFIG_TOUCHSCREEN_ZFORCE=m | ||
2408 | CONFIG_INPUT_MISC=y | ||
2409 | # CONFIG_INPUT_AD714X is not set | ||
2410 | # CONFIG_INPUT_BMA150 is not set | ||
2411 | # CONFIG_INPUT_E3X0_BUTTON is not set | ||
2412 | CONFIG_INPUT_MMA8450=m | ||
2413 | CONFIG_INPUT_MPU3050=m | ||
2414 | CONFIG_INPUT_GP2A=m | ||
2415 | # CONFIG_INPUT_GPIO_BEEPER is not set | ||
2416 | # CONFIG_INPUT_GPIO_TILT_POLLED is not set | ||
2417 | CONFIG_INPUT_ATI_REMOTE2=m | ||
2418 | CONFIG_INPUT_KEYSPAN_REMOTE=m | ||
2419 | CONFIG_INPUT_KXTJ9=m | ||
2420 | # CONFIG_INPUT_KXTJ9_POLLED_MODE is not set | ||
2421 | CONFIG_INPUT_POWERMATE=m | ||
2422 | CONFIG_INPUT_YEALINK=m | ||
2423 | CONFIG_INPUT_CM109=m | ||
2424 | CONFIG_INPUT_UINPUT=m | ||
2425 | # CONFIG_INPUT_PCF8574 is not set | ||
2426 | CONFIG_INPUT_PWM_BEEPER=m | ||
2427 | CONFIG_INPUT_GPIO_ROTARY_ENCODER=m | ||
2428 | # CONFIG_INPUT_ADXL34X is not set | ||
2429 | # CONFIG_INPUT_IMS_PCU is not set | ||
2430 | CONFIG_INPUT_CMA3000=m | ||
2431 | CONFIG_INPUT_CMA3000_I2C=m | ||
2432 | # CONFIG_INPUT_DRV260X_HAPTICS is not set | ||
2433 | # CONFIG_INPUT_DRV2667_HAPTICS is not set | ||
2434 | |||
2435 | # | ||
2436 | # Hardware I/O ports | ||
2437 | # | ||
2438 | CONFIG_SERIO=y | ||
2439 | CONFIG_SERIO_SERPORT=y | ||
2440 | CONFIG_SERIO_AMBAKMI=y | ||
2441 | # CONFIG_SERIO_PCIPS2 is not set | ||
2442 | CONFIG_SERIO_LIBPS2=y | ||
2443 | CONFIG_SERIO_RAW=m | ||
2444 | CONFIG_SERIO_ALTERA_PS2=m | ||
2445 | # CONFIG_SERIO_PS2MULT is not set | ||
2446 | CONFIG_SERIO_ARC_PS2=m | ||
2447 | # CONFIG_SERIO_APBPS2 is not set | ||
2448 | CONFIG_GAMEPORT=m | ||
2449 | CONFIG_GAMEPORT_NS558=m | ||
2450 | CONFIG_GAMEPORT_L4=m | ||
2451 | CONFIG_GAMEPORT_EMU10K1=m | ||
2452 | CONFIG_GAMEPORT_FM801=m | ||
2453 | |||
2454 | # | ||
2455 | # Character devices | ||
2456 | # | ||
2457 | CONFIG_TTY=y | ||
2458 | CONFIG_VT=y | ||
2459 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
2460 | CONFIG_VT_CONSOLE=y | ||
2461 | CONFIG_VT_CONSOLE_SLEEP=y | ||
2462 | CONFIG_HW_CONSOLE=y | ||
2463 | CONFIG_VT_HW_CONSOLE_BINDING=y | ||
2464 | CONFIG_UNIX98_PTYS=y | ||
2465 | CONFIG_DEVPTS_MULTIPLE_INSTANCES=y | ||
2466 | CONFIG_LEGACY_PTYS=y | ||
2467 | CONFIG_LEGACY_PTY_COUNT=256 | ||
2468 | CONFIG_SERIAL_NONSTANDARD=y | ||
2469 | CONFIG_ROCKETPORT=m | ||
2470 | CONFIG_CYCLADES=m | ||
2471 | # CONFIG_CYZ_INTR is not set | ||
2472 | # CONFIG_MOXA_INTELLIO is not set | ||
2473 | # CONFIG_MOXA_SMARTIO is not set | ||
2474 | CONFIG_SYNCLINKMP=m | ||
2475 | CONFIG_SYNCLINK_GT=m | ||
2476 | CONFIG_NOZOMI=m | ||
2477 | # CONFIG_ISI is not set | ||
2478 | CONFIG_N_HDLC=m | ||
2479 | CONFIG_N_GSM=m | ||
2480 | # CONFIG_TRACE_SINK is not set | ||
2481 | CONFIG_DEVMEM=y | ||
2482 | # CONFIG_DEVKMEM is not set | ||
2483 | |||
2484 | # | ||
2485 | # Serial drivers | ||
2486 | # | ||
2487 | CONFIG_SERIAL_EARLYCON=y | ||
2488 | CONFIG_SERIAL_8250=y | ||
2489 | # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set | ||
2490 | CONFIG_SERIAL_8250_CONSOLE=y | ||
2491 | CONFIG_SERIAL_8250_DMA=y | ||
2492 | CONFIG_SERIAL_8250_PCI=y | ||
2493 | CONFIG_SERIAL_8250_NR_UARTS=32 | ||
2494 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
2495 | CONFIG_SERIAL_8250_EXTENDED=y | ||
2496 | CONFIG_SERIAL_8250_MANY_PORTS=y | ||
2497 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
2498 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
2499 | CONFIG_SERIAL_8250_RSA=y | ||
2500 | # CONFIG_SERIAL_8250_DW is not set | ||
2501 | |||
2502 | # | ||
2503 | # Non-8250 serial port support | ||
2504 | # | ||
2505 | # CONFIG_SERIAL_AMBA_PL010 is not set | ||
2506 | CONFIG_SERIAL_AMBA_PL011=y | ||
2507 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | ||
2508 | CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y | ||
2509 | # CONFIG_SERIAL_KGDB_NMI is not set | ||
2510 | CONFIG_SERIAL_CORE=y | ||
2511 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
2512 | CONFIG_CONSOLE_POLL=y | ||
2513 | CONFIG_SERIAL_JSM=m | ||
2514 | CONFIG_SERIAL_OF_PLATFORM=y | ||
2515 | # CONFIG_SERIAL_SCCNXP is not set | ||
2516 | # CONFIG_SERIAL_SC16IS7XX is not set | ||
2517 | # CONFIG_SERIAL_ALTERA_JTAGUART is not set | ||
2518 | # CONFIG_SERIAL_ALTERA_UART is not set | ||
2519 | # CONFIG_SERIAL_XILINX_PS_UART is not set | ||
2520 | CONFIG_SERIAL_ARC=m | ||
2521 | CONFIG_SERIAL_ARC_NR_PORTS=1 | ||
2522 | # CONFIG_SERIAL_RP2 is not set | ||
2523 | # CONFIG_SERIAL_FSL_LPUART is not set | ||
2524 | # CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set | ||
2525 | # CONFIG_TTY_PRINTK is not set | ||
2526 | CONFIG_HVC_DRIVER=y | ||
2527 | CONFIG_VIRTIO_CONSOLE=y | ||
2528 | CONFIG_IPMI_HANDLER=m | ||
2529 | # CONFIG_IPMI_PANIC_EVENT is not set | ||
2530 | CONFIG_IPMI_DEVICE_INTERFACE=m | ||
2531 | CONFIG_IPMI_SI=m | ||
2532 | # CONFIG_IPMI_SI_PROBE_DEFAULTS is not set | ||
2533 | # CONFIG_IPMI_SSIF is not set | ||
2534 | CONFIG_IPMI_WATCHDOG=m | ||
2535 | CONFIG_IPMI_POWEROFF=m | ||
2536 | CONFIG_HW_RANDOM=y | ||
2537 | CONFIG_HW_RANDOM_TIMERIOMEM=m | ||
2538 | CONFIG_HW_RANDOM_VIRTIO=m | ||
2539 | CONFIG_HW_RANDOM_TPM=m | ||
2540 | CONFIG_R3964=m | ||
2541 | # CONFIG_APPLICOM is not set | ||
2542 | |||
2543 | # | ||
2544 | # PCMCIA character devices | ||
2545 | # | ||
2546 | CONFIG_RAW_DRIVER=y | ||
2547 | CONFIG_MAX_RAW_DEVS=8192 | ||
2548 | CONFIG_TCG_TPM=m | ||
2549 | # CONFIG_TCG_TIS_I2C_ATMEL is not set | ||
2550 | # CONFIG_TCG_TIS_I2C_INFINEON is not set | ||
2551 | # CONFIG_TCG_TIS_I2C_NUVOTON is not set | ||
2552 | CONFIG_TCG_ATMEL=m | ||
2553 | # CONFIG_TCG_TIS_ST33ZP24 is not set | ||
2554 | CONFIG_DEVPORT=y | ||
2555 | # CONFIG_XILLYBUS is not set | ||
2556 | |||
2557 | # | ||
2558 | # I2C support | ||
2559 | # | ||
2560 | CONFIG_I2C=y | ||
2561 | CONFIG_I2C_BOARDINFO=y | ||
2562 | CONFIG_I2C_COMPAT=y | ||
2563 | CONFIG_I2C_CHARDEV=m | ||
2564 | CONFIG_I2C_MUX=m | ||
2565 | |||
2566 | # | ||
2567 | # Multiplexer I2C Chip support | ||
2568 | # | ||
2569 | CONFIG_I2C_ARB_GPIO_CHALLENGE=m | ||
2570 | CONFIG_I2C_MUX_GPIO=m | ||
2571 | CONFIG_I2C_MUX_PCA9541=m | ||
2572 | CONFIG_I2C_MUX_PCA954x=m | ||
2573 | CONFIG_I2C_HELPER_AUTO=y | ||
2574 | CONFIG_I2C_SMBUS=m | ||
2575 | CONFIG_I2C_ALGOBIT=y | ||
2576 | CONFIG_I2C_ALGOPCA=m | ||
2577 | |||
2578 | # | ||
2579 | # I2C Hardware Bus support | ||
2580 | # | ||
2581 | |||
2582 | # | ||
2583 | # PC SMBus host controller drivers | ||
2584 | # | ||
2585 | # CONFIG_I2C_ALI1535 is not set | ||
2586 | # CONFIG_I2C_ALI1563 is not set | ||
2587 | # CONFIG_I2C_ALI15X3 is not set | ||
2588 | # CONFIG_I2C_AMD756 is not set | ||
2589 | # CONFIG_I2C_AMD8111 is not set | ||
2590 | # CONFIG_I2C_I801 is not set | ||
2591 | # CONFIG_I2C_ISCH is not set | ||
2592 | # CONFIG_I2C_PIIX4 is not set | ||
2593 | CONFIG_I2C_NFORCE2=m | ||
2594 | # CONFIG_I2C_SIS5595 is not set | ||
2595 | # CONFIG_I2C_SIS630 is not set | ||
2596 | # CONFIG_I2C_SIS96X is not set | ||
2597 | # CONFIG_I2C_VIA is not set | ||
2598 | # CONFIG_I2C_VIAPRO is not set | ||
2599 | |||
2600 | # | ||
2601 | # I2C system bus drivers (mostly embedded / system-on-chip) | ||
2602 | # | ||
2603 | # CONFIG_I2C_CBUS_GPIO is not set | ||
2604 | # CONFIG_I2C_DESIGNWARE_PLATFORM is not set | ||
2605 | # CONFIG_I2C_DESIGNWARE_PCI is not set | ||
2606 | CONFIG_I2C_GPIO=m | ||
2607 | # CONFIG_I2C_NOMADIK is not set | ||
2608 | # CONFIG_I2C_OCORES is not set | ||
2609 | CONFIG_I2C_PCA_PLATFORM=m | ||
2610 | # CONFIG_I2C_PXA_PCI is not set | ||
2611 | # CONFIG_I2C_RK3X is not set | ||
2612 | CONFIG_I2C_SIMTEC=m | ||
2613 | # CONFIG_I2C_XILINX is not set | ||
2614 | |||
2615 | # | ||
2616 | # External I2C/SMBus adapter drivers | ||
2617 | # | ||
2618 | CONFIG_I2C_DIOLAN_U2C=m | ||
2619 | CONFIG_I2C_PARPORT_LIGHT=m | ||
2620 | # CONFIG_I2C_ROBOTFUZZ_OSIF is not set | ||
2621 | # CONFIG_I2C_TAOS_EVM is not set | ||
2622 | CONFIG_I2C_TINY_USB=m | ||
2623 | CONFIG_I2C_VIPERBOARD=m | ||
2624 | |||
2625 | # | ||
2626 | # Other I2C/SMBus bus drivers | ||
2627 | # | ||
2628 | CONFIG_I2C_STUB=m | ||
2629 | # CONFIG_I2C_SLAVE is not set | ||
2630 | # CONFIG_I2C_DEBUG_CORE is not set | ||
2631 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
2632 | # CONFIG_I2C_DEBUG_BUS is not set | ||
2633 | # CONFIG_SPI is not set | ||
2634 | # CONFIG_SPMI is not set | ||
2635 | # CONFIG_HSI is not set | ||
2636 | |||
2637 | # | ||
2638 | # PPS support | ||
2639 | # | ||
2640 | CONFIG_PPS=y | ||
2641 | # CONFIG_PPS_DEBUG is not set | ||
2642 | |||
2643 | # | ||
2644 | # PPS clients support | ||
2645 | # | ||
2646 | # CONFIG_PPS_CLIENT_KTIMER is not set | ||
2647 | CONFIG_PPS_CLIENT_LDISC=m | ||
2648 | CONFIG_PPS_CLIENT_GPIO=m | ||
2649 | |||
2650 | # | ||
2651 | # PPS generators support | ||
2652 | # | ||
2653 | |||
2654 | # | ||
2655 | # PTP clock support | ||
2656 | # | ||
2657 | CONFIG_PTP_1588_CLOCK=y | ||
2658 | CONFIG_DP83640_PHY=m | ||
2659 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | ||
2660 | CONFIG_GPIOLIB=y | ||
2661 | CONFIG_GPIO_DEVRES=y | ||
2662 | CONFIG_OF_GPIO=y | ||
2663 | # CONFIG_DEBUG_GPIO is not set | ||
2664 | CONFIG_GPIO_SYSFS=y | ||
2665 | CONFIG_GPIO_GENERIC=y | ||
2666 | |||
2667 | # | ||
2668 | # Memory mapped GPIO drivers | ||
2669 | # | ||
2670 | # CONFIG_GPIO_74XX_MMIO is not set | ||
2671 | # CONFIG_GPIO_ALTERA is not set | ||
2672 | # CONFIG_GPIO_DWAPB is not set | ||
2673 | CONFIG_GPIO_GENERIC_PLATFORM=y | ||
2674 | # CONFIG_GPIO_GRGPIO is not set | ||
2675 | # CONFIG_GPIO_PL061 is not set | ||
2676 | # CONFIG_GPIO_SCH311X is not set | ||
2677 | # CONFIG_GPIO_SYSCON is not set | ||
2678 | # CONFIG_GPIO_VX855 is not set | ||
2679 | # CONFIG_GPIO_XGENE is not set | ||
2680 | |||
2681 | # | ||
2682 | # I2C GPIO expanders | ||
2683 | # | ||
2684 | # CONFIG_GPIO_ADP5588 is not set | ||
2685 | # CONFIG_GPIO_ADNP is not set | ||
2686 | # CONFIG_GPIO_MAX7300 is not set | ||
2687 | # CONFIG_GPIO_MAX732X is not set | ||
2688 | # CONFIG_GPIO_PCA953X is not set | ||
2689 | # CONFIG_GPIO_PCF857X is not set | ||
2690 | # CONFIG_GPIO_SX150X is not set | ||
2691 | |||
2692 | # | ||
2693 | # MFD GPIO expanders | ||
2694 | # | ||
2695 | |||
2696 | # | ||
2697 | # PCI GPIO expanders | ||
2698 | # | ||
2699 | # CONFIG_GPIO_AMD8111 is not set | ||
2700 | # CONFIG_GPIO_BT8XX is not set | ||
2701 | # CONFIG_GPIO_ML_IOH is not set | ||
2702 | # CONFIG_GPIO_RDC321X is not set | ||
2703 | |||
2704 | # | ||
2705 | # USB GPIO expanders | ||
2706 | # | ||
2707 | CONFIG_GPIO_VIPERBOARD=m | ||
2708 | # CONFIG_W1 is not set | ||
2709 | CONFIG_POWER_SUPPLY=y | ||
2710 | # CONFIG_POWER_SUPPLY_DEBUG is not set | ||
2711 | # CONFIG_PDA_POWER is not set | ||
2712 | # CONFIG_GENERIC_ADC_BATTERY is not set | ||
2713 | # CONFIG_TEST_POWER is not set | ||
2714 | # CONFIG_BATTERY_DS2780 is not set | ||
2715 | # CONFIG_BATTERY_DS2781 is not set | ||
2716 | # CONFIG_BATTERY_DS2782 is not set | ||
2717 | # CONFIG_BATTERY_SBS is not set | ||
2718 | # CONFIG_BATTERY_BQ27x00 is not set | ||
2719 | # CONFIG_BATTERY_MAX17040 is not set | ||
2720 | # CONFIG_BATTERY_MAX17042 is not set | ||
2721 | # CONFIG_CHARGER_ISP1704 is not set | ||
2722 | # CONFIG_CHARGER_MAX8903 is not set | ||
2723 | # CONFIG_CHARGER_LP8727 is not set | ||
2724 | # CONFIG_CHARGER_GPIO is not set | ||
2725 | # CONFIG_CHARGER_BQ2415X is not set | ||
2726 | # CONFIG_CHARGER_BQ24190 is not set | ||
2727 | # CONFIG_CHARGER_BQ24735 is not set | ||
2728 | CONFIG_CHARGER_SMB347=m | ||
2729 | # CONFIG_BATTERY_GAUGE_LTC2941 is not set | ||
2730 | CONFIG_POWER_RESET=y | ||
2731 | CONFIG_POWER_RESET_GPIO=y | ||
2732 | # CONFIG_POWER_RESET_GPIO_RESTART is not set | ||
2733 | # CONFIG_POWER_RESET_LTC2952 is not set | ||
2734 | # CONFIG_POWER_RESET_RESTART is not set | ||
2735 | CONFIG_POWER_RESET_VEXPRESS=y | ||
2736 | CONFIG_POWER_RESET_XGENE=y | ||
2737 | # CONFIG_POWER_RESET_SYSCON is not set | ||
2738 | # CONFIG_POWER_RESET_SYSCON_POWEROFF is not set | ||
2739 | # CONFIG_POWER_AVS is not set | ||
2740 | CONFIG_HWMON=y | ||
2741 | CONFIG_HWMON_VID=m | ||
2742 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
2743 | |||
2744 | # | ||
2745 | # Native drivers | ||
2746 | # | ||
2747 | CONFIG_SENSORS_AD7414=m | ||
2748 | CONFIG_SENSORS_AD7418=m | ||
2749 | CONFIG_SENSORS_ADM1021=m | ||
2750 | CONFIG_SENSORS_ADM1025=m | ||
2751 | CONFIG_SENSORS_ADM1026=m | ||
2752 | CONFIG_SENSORS_ADM1029=m | ||
2753 | CONFIG_SENSORS_ADM1031=m | ||
2754 | CONFIG_SENSORS_ADM9240=m | ||
2755 | CONFIG_SENSORS_ADT7X10=m | ||
2756 | CONFIG_SENSORS_ADT7410=m | ||
2757 | CONFIG_SENSORS_ADT7411=m | ||
2758 | CONFIG_SENSORS_ADT7462=m | ||
2759 | CONFIG_SENSORS_ADT7470=m | ||
2760 | CONFIG_SENSORS_ADT7475=m | ||
2761 | CONFIG_SENSORS_ASC7621=m | ||
2762 | CONFIG_SENSORS_ATXP1=m | ||
2763 | CONFIG_SENSORS_DS620=m | ||
2764 | CONFIG_SENSORS_DS1621=m | ||
2765 | # CONFIG_SENSORS_I5K_AMB is not set | ||
2766 | CONFIG_SENSORS_F71805F=m | ||
2767 | CONFIG_SENSORS_F71882FG=m | ||
2768 | CONFIG_SENSORS_F75375S=m | ||
2769 | CONFIG_SENSORS_GL518SM=m | ||
2770 | CONFIG_SENSORS_GL520SM=m | ||
2771 | CONFIG_SENSORS_G760A=m | ||
2772 | CONFIG_SENSORS_G762=m | ||
2773 | # CONFIG_SENSORS_GPIO_FAN is not set | ||
2774 | # CONFIG_SENSORS_HIH6130 is not set | ||
2775 | CONFIG_SENSORS_IBMAEM=m | ||
2776 | CONFIG_SENSORS_IBMPEX=m | ||
2777 | CONFIG_SENSORS_IIO_HWMON=m | ||
2778 | CONFIG_SENSORS_IT87=m | ||
2779 | # CONFIG_SENSORS_JC42 is not set | ||
2780 | CONFIG_SENSORS_POWR1220=m | ||
2781 | CONFIG_SENSORS_LINEAGE=m | ||
2782 | CONFIG_SENSORS_LTC2945=m | ||
2783 | CONFIG_SENSORS_LTC4151=m | ||
2784 | CONFIG_SENSORS_LTC4215=m | ||
2785 | CONFIG_SENSORS_LTC4222=m | ||
2786 | CONFIG_SENSORS_LTC4245=m | ||
2787 | CONFIG_SENSORS_LTC4260=m | ||
2788 | CONFIG_SENSORS_LTC4261=m | ||
2789 | CONFIG_SENSORS_MAX16065=m | ||
2790 | CONFIG_SENSORS_MAX1619=m | ||
2791 | CONFIG_SENSORS_MAX1668=m | ||
2792 | CONFIG_SENSORS_MAX197=m | ||
2793 | CONFIG_SENSORS_MAX6639=m | ||
2794 | CONFIG_SENSORS_MAX6642=m | ||
2795 | CONFIG_SENSORS_MAX6650=m | ||
2796 | CONFIG_SENSORS_MAX6697=m | ||
2797 | # CONFIG_SENSORS_HTU21 is not set | ||
2798 | CONFIG_SENSORS_MCP3021=m | ||
2799 | CONFIG_SENSORS_LM63=m | ||
2800 | CONFIG_SENSORS_LM73=m | ||
2801 | CONFIG_SENSORS_LM75=m | ||
2802 | CONFIG_SENSORS_LM77=m | ||
2803 | CONFIG_SENSORS_LM78=m | ||
2804 | CONFIG_SENSORS_LM80=m | ||
2805 | CONFIG_SENSORS_LM83=m | ||
2806 | CONFIG_SENSORS_LM85=m | ||
2807 | CONFIG_SENSORS_LM87=m | ||
2808 | CONFIG_SENSORS_LM90=m | ||
2809 | CONFIG_SENSORS_LM92=m | ||
2810 | CONFIG_SENSORS_LM93=m | ||
2811 | CONFIG_SENSORS_LM95234=m | ||
2812 | CONFIG_SENSORS_LM95241=m | ||
2813 | CONFIG_SENSORS_LM95245=m | ||
2814 | CONFIG_SENSORS_PC87360=m | ||
2815 | CONFIG_SENSORS_PC87427=m | ||
2816 | CONFIG_SENSORS_NTC_THERMISTOR=m | ||
2817 | CONFIG_SENSORS_NCT6683=m | ||
2818 | CONFIG_SENSORS_NCT6775=m | ||
2819 | # CONFIG_SENSORS_NCT7802 is not set | ||
2820 | # CONFIG_SENSORS_NCT7904 is not set | ||
2821 | CONFIG_SENSORS_PCF8591=m | ||
2822 | CONFIG_PMBUS=m | ||
2823 | CONFIG_SENSORS_PMBUS=m | ||
2824 | CONFIG_SENSORS_ADM1275=m | ||
2825 | CONFIG_SENSORS_LM25066=m | ||
2826 | CONFIG_SENSORS_LTC2978=m | ||
2827 | CONFIG_SENSORS_MAX16064=m | ||
2828 | CONFIG_SENSORS_MAX34440=m | ||
2829 | CONFIG_SENSORS_MAX8688=m | ||
2830 | CONFIG_SENSORS_TPS40422=m | ||
2831 | CONFIG_SENSORS_UCD9000=m | ||
2832 | CONFIG_SENSORS_UCD9200=m | ||
2833 | CONFIG_SENSORS_ZL6100=m | ||
2834 | CONFIG_SENSORS_PWM_FAN=m | ||
2835 | CONFIG_SENSORS_SHT15=m | ||
2836 | CONFIG_SENSORS_SHT21=m | ||
2837 | CONFIG_SENSORS_SHTC1=m | ||
2838 | CONFIG_SENSORS_SIS5595=m | ||
2839 | CONFIG_SENSORS_DME1737=m | ||
2840 | CONFIG_SENSORS_EMC1403=m | ||
2841 | # CONFIG_SENSORS_EMC2103 is not set | ||
2842 | CONFIG_SENSORS_EMC6W201=m | ||
2843 | CONFIG_SENSORS_SMSC47M1=m | ||
2844 | CONFIG_SENSORS_SMSC47M192=m | ||
2845 | CONFIG_SENSORS_SMSC47B397=m | ||
2846 | CONFIG_SENSORS_SCH56XX_COMMON=m | ||
2847 | CONFIG_SENSORS_SCH5627=m | ||
2848 | CONFIG_SENSORS_SCH5636=m | ||
2849 | # CONFIG_SENSORS_SMM665 is not set | ||
2850 | CONFIG_SENSORS_ADC128D818=m | ||
2851 | CONFIG_SENSORS_ADS1015=m | ||
2852 | CONFIG_SENSORS_ADS7828=m | ||
2853 | CONFIG_SENSORS_AMC6821=m | ||
2854 | CONFIG_SENSORS_INA209=m | ||
2855 | CONFIG_SENSORS_INA2XX=m | ||
2856 | CONFIG_SENSORS_THMC50=m | ||
2857 | CONFIG_SENSORS_TMP102=m | ||
2858 | CONFIG_SENSORS_TMP103=m | ||
2859 | CONFIG_SENSORS_TMP401=m | ||
2860 | CONFIG_SENSORS_TMP421=m | ||
2861 | CONFIG_SENSORS_VEXPRESS=m | ||
2862 | CONFIG_SENSORS_VIA686A=m | ||
2863 | CONFIG_SENSORS_VT1211=m | ||
2864 | CONFIG_SENSORS_VT8231=m | ||
2865 | CONFIG_SENSORS_W83781D=m | ||
2866 | CONFIG_SENSORS_W83791D=m | ||
2867 | CONFIG_SENSORS_W83792D=m | ||
2868 | CONFIG_SENSORS_W83793=m | ||
2869 | CONFIG_SENSORS_W83795=m | ||
2870 | # CONFIG_SENSORS_W83795_FANCTRL is not set | ||
2871 | CONFIG_SENSORS_W83L785TS=m | ||
2872 | CONFIG_SENSORS_W83L786NG=m | ||
2873 | CONFIG_SENSORS_W83627HF=m | ||
2874 | CONFIG_SENSORS_W83627EHF=m | ||
2875 | CONFIG_THERMAL=m | ||
2876 | CONFIG_THERMAL_HWMON=y | ||
2877 | CONFIG_THERMAL_OF=y | ||
2878 | CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y | ||
2879 | # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set | ||
2880 | # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set | ||
2881 | CONFIG_THERMAL_GOV_FAIR_SHARE=y | ||
2882 | CONFIG_THERMAL_GOV_STEP_WISE=y | ||
2883 | # CONFIG_THERMAL_GOV_BANG_BANG is not set | ||
2884 | CONFIG_THERMAL_GOV_USER_SPACE=y | ||
2885 | CONFIG_CPU_THERMAL=y | ||
2886 | # CONFIG_THERMAL_EMULATION is not set | ||
2887 | CONFIG_IMX_THERMAL=m | ||
2888 | |||
2889 | # | ||
2890 | # Texas Instruments thermal drivers | ||
2891 | # | ||
2892 | CONFIG_WATCHDOG=y | ||
2893 | CONFIG_WATCHDOG_CORE=y | ||
2894 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
2895 | |||
2896 | # | ||
2897 | # Watchdog Device Drivers | ||
2898 | # | ||
2899 | CONFIG_SOFT_WATCHDOG=m | ||
2900 | CONFIG_GPIO_WATCHDOG=m | ||
2901 | # CONFIG_XILINX_WATCHDOG is not set | ||
2902 | CONFIG_ARM_SP805_WATCHDOG=m | ||
2903 | # CONFIG_CADENCE_WATCHDOG is not set | ||
2904 | # CONFIG_DW_WATCHDOG is not set | ||
2905 | CONFIG_ALIM7101_WDT=m | ||
2906 | CONFIG_I6300ESB_WDT=m | ||
2907 | # CONFIG_MEN_A21_WDT is not set | ||
2908 | |||
2909 | # | ||
2910 | # PCI-based Watchdog Cards | ||
2911 | # | ||
2912 | CONFIG_PCIPCWATCHDOG=m | ||
2913 | CONFIG_WDTPCI=m | ||
2914 | |||
2915 | # | ||
2916 | # USB-based Watchdog Cards | ||
2917 | # | ||
2918 | CONFIG_USBPCWATCHDOG=m | ||
2919 | CONFIG_SSB_POSSIBLE=y | ||
2920 | |||
2921 | # | ||
2922 | # Sonics Silicon Backplane | ||
2923 | # | ||
2924 | CONFIG_SSB=m | ||
2925 | CONFIG_SSB_SPROM=y | ||
2926 | CONFIG_SSB_BLOCKIO=y | ||
2927 | CONFIG_SSB_PCIHOST_POSSIBLE=y | ||
2928 | CONFIG_SSB_PCIHOST=y | ||
2929 | CONFIG_SSB_B43_PCI_BRIDGE=y | ||
2930 | CONFIG_SSB_SDIOHOST_POSSIBLE=y | ||
2931 | CONFIG_SSB_SDIOHOST=y | ||
2932 | # CONFIG_SSB_SILENT is not set | ||
2933 | # CONFIG_SSB_DEBUG is not set | ||
2934 | CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y | ||
2935 | CONFIG_SSB_DRIVER_PCICORE=y | ||
2936 | CONFIG_SSB_DRIVER_GPIO=y | ||
2937 | CONFIG_BCMA_POSSIBLE=y | ||
2938 | |||
2939 | # | ||
2940 | # Broadcom specific AMBA | ||
2941 | # | ||
2942 | CONFIG_BCMA=m | ||
2943 | CONFIG_BCMA_BLOCKIO=y | ||
2944 | CONFIG_BCMA_HOST_PCI_POSSIBLE=y | ||
2945 | CONFIG_BCMA_HOST_PCI=y | ||
2946 | # CONFIG_BCMA_HOST_SOC is not set | ||
2947 | CONFIG_BCMA_DRIVER_PCI=y | ||
2948 | CONFIG_BCMA_DRIVER_GMAC_CMN=y | ||
2949 | CONFIG_BCMA_DRIVER_GPIO=y | ||
2950 | # CONFIG_BCMA_DEBUG is not set | ||
2951 | |||
2952 | # | ||
2953 | # Multifunction device drivers | ||
2954 | # | ||
2955 | CONFIG_MFD_CORE=y | ||
2956 | # CONFIG_MFD_AS3711 is not set | ||
2957 | # CONFIG_MFD_AS3722 is not set | ||
2958 | # CONFIG_PMIC_ADP5520 is not set | ||
2959 | # CONFIG_MFD_AAT2870_CORE is not set | ||
2960 | # CONFIG_MFD_ATMEL_HLCDC is not set | ||
2961 | # CONFIG_MFD_BCM590XX is not set | ||
2962 | # CONFIG_MFD_AXP20X is not set | ||
2963 | # CONFIG_MFD_CROS_EC is not set | ||
2964 | # CONFIG_PMIC_DA903X is not set | ||
2965 | # CONFIG_MFD_DA9052_I2C is not set | ||
2966 | # CONFIG_MFD_DA9055 is not set | ||
2967 | # CONFIG_MFD_DA9063 is not set | ||
2968 | # CONFIG_MFD_DA9150 is not set | ||
2969 | # CONFIG_MFD_DLN2 is not set | ||
2970 | # CONFIG_MFD_MC13XXX_I2C is not set | ||
2971 | # CONFIG_MFD_HI6421_PMIC is not set | ||
2972 | # CONFIG_HTC_PASIC3 is not set | ||
2973 | # CONFIG_HTC_I2CPLD is not set | ||
2974 | # CONFIG_LPC_ICH is not set | ||
2975 | # CONFIG_LPC_SCH is not set | ||
2976 | # CONFIG_INTEL_SOC_PMIC is not set | ||
2977 | # CONFIG_MFD_JANZ_CMODIO is not set | ||
2978 | # CONFIG_MFD_KEMPLD is not set | ||
2979 | # CONFIG_MFD_88PM800 is not set | ||
2980 | # CONFIG_MFD_88PM805 is not set | ||
2981 | # CONFIG_MFD_88PM860X is not set | ||
2982 | # CONFIG_MFD_MAX14577 is not set | ||
2983 | # CONFIG_MFD_MAX77686 is not set | ||
2984 | # CONFIG_MFD_MAX77693 is not set | ||
2985 | # CONFIG_MFD_MAX77843 is not set | ||
2986 | # CONFIG_MFD_MAX8907 is not set | ||
2987 | # CONFIG_MFD_MAX8925 is not set | ||
2988 | # CONFIG_MFD_MAX8997 is not set | ||
2989 | # CONFIG_MFD_MAX8998 is not set | ||
2990 | # CONFIG_MFD_MT6397 is not set | ||
2991 | # CONFIG_MFD_MENF21BMC is not set | ||
2992 | CONFIG_MFD_VIPERBOARD=m | ||
2993 | # CONFIG_MFD_RETU is not set | ||
2994 | # CONFIG_MFD_PCF50633 is not set | ||
2995 | # CONFIG_MFD_RDC321X is not set | ||
2996 | CONFIG_MFD_RTSX_PCI=m | ||
2997 | # CONFIG_MFD_RT5033 is not set | ||
2998 | CONFIG_MFD_RTSX_USB=m | ||
2999 | # CONFIG_MFD_RC5T583 is not set | ||
3000 | # CONFIG_MFD_RK808 is not set | ||
3001 | # CONFIG_MFD_RN5T618 is not set | ||
3002 | # CONFIG_MFD_SEC_CORE is not set | ||
3003 | # CONFIG_MFD_SI476X_CORE is not set | ||
3004 | CONFIG_MFD_SM501=m | ||
3005 | CONFIG_MFD_SM501_GPIO=y | ||
3006 | # CONFIG_MFD_SKY81452 is not set | ||
3007 | # CONFIG_MFD_SMSC is not set | ||
3008 | # CONFIG_ABX500_CORE is not set | ||
3009 | # CONFIG_MFD_STMPE is not set | ||
3010 | CONFIG_MFD_SYSCON=y | ||
3011 | # CONFIG_MFD_TI_AM335X_TSCADC is not set | ||
3012 | # CONFIG_MFD_LP3943 is not set | ||
3013 | # CONFIG_MFD_LP8788 is not set | ||
3014 | # CONFIG_MFD_PALMAS is not set | ||
3015 | # CONFIG_TPS6105X is not set | ||
3016 | # CONFIG_TPS65010 is not set | ||
3017 | # CONFIG_TPS6507X is not set | ||
3018 | # CONFIG_MFD_TPS65090 is not set | ||
3019 | # CONFIG_MFD_TPS65217 is not set | ||
3020 | # CONFIG_MFD_TPS65218 is not set | ||
3021 | # CONFIG_MFD_TPS6586X is not set | ||
3022 | # CONFIG_MFD_TPS65910 is not set | ||
3023 | # CONFIG_MFD_TPS65912 is not set | ||
3024 | # CONFIG_MFD_TPS65912_I2C is not set | ||
3025 | # CONFIG_MFD_TPS80031 is not set | ||
3026 | # CONFIG_TWL4030_CORE is not set | ||
3027 | # CONFIG_TWL6040_CORE is not set | ||
3028 | CONFIG_MFD_WL1273_CORE=m | ||
3029 | # CONFIG_MFD_LM3533 is not set | ||
3030 | # CONFIG_MFD_TC3589X is not set | ||
3031 | # CONFIG_MFD_TMIO is not set | ||
3032 | CONFIG_MFD_VX855=m | ||
3033 | # CONFIG_MFD_ARIZONA_I2C is not set | ||
3034 | # CONFIG_MFD_WM8400 is not set | ||
3035 | # CONFIG_MFD_WM831X_I2C is not set | ||
3036 | # CONFIG_MFD_WM8350_I2C is not set | ||
3037 | # CONFIG_MFD_WM8994 is not set | ||
3038 | CONFIG_MFD_VEXPRESS_SYSREG=y | ||
3039 | # CONFIG_REGULATOR is not set | ||
3040 | # CONFIG_MEDIA_SUPPORT is not set | ||
3041 | |||
3042 | # | ||
3043 | # Graphics support | ||
3044 | # | ||
3045 | CONFIG_VGA_ARB=y | ||
3046 | CONFIG_VGA_ARB_MAX_GPUS=16 | ||
3047 | |||
3048 | # | ||
3049 | # Direct Rendering Manager | ||
3050 | # | ||
3051 | CONFIG_DRM=m | ||
3052 | CONFIG_DRM_KMS_HELPER=m | ||
3053 | CONFIG_DRM_KMS_FB_HELPER=y | ||
3054 | CONFIG_DRM_LOAD_EDID_FIRMWARE=y | ||
3055 | CONFIG_DRM_TTM=m | ||
3056 | |||
3057 | # | ||
3058 | # I2C encoder or helper chips | ||
3059 | # | ||
3060 | # CONFIG_DRM_I2C_ADV7511 is not set | ||
3061 | CONFIG_DRM_I2C_CH7006=m | ||
3062 | CONFIG_DRM_I2C_SIL164=m | ||
3063 | CONFIG_DRM_I2C_NXP_TDA998X=m | ||
3064 | CONFIG_DRM_PTN3460=m | ||
3065 | # CONFIG_DRM_PS8622 is not set | ||
3066 | # CONFIG_DRM_TDFX is not set | ||
3067 | # CONFIG_DRM_R128 is not set | ||
3068 | CONFIG_DRM_RADEON=m | ||
3069 | # CONFIG_DRM_RADEON_USERPTR is not set | ||
3070 | # CONFIG_DRM_RADEON_UMS is not set | ||
3071 | CONFIG_DRM_NOUVEAU=m | ||
3072 | CONFIG_NOUVEAU_DEBUG=5 | ||
3073 | CONFIG_NOUVEAU_DEBUG_DEFAULT=3 | ||
3074 | CONFIG_DRM_NOUVEAU_BACKLIGHT=y | ||
3075 | # CONFIG_DRM_MGA is not set | ||
3076 | CONFIG_DRM_VIA=m | ||
3077 | # CONFIG_DRM_SAVAGE is not set | ||
3078 | # CONFIG_DRM_VGEM is not set | ||
3079 | # CONFIG_DRM_VMWGFX is not set | ||
3080 | CONFIG_DRM_UDL=m | ||
3081 | CONFIG_DRM_AST=m | ||
3082 | CONFIG_DRM_MGAG200=m | ||
3083 | CONFIG_DRM_CIRRUS_QEMU=m | ||
3084 | CONFIG_DRM_QXL=m | ||
3085 | CONFIG_DRM_BOCHS=m | ||
3086 | CONFIG_DRM_PANEL=y | ||
3087 | |||
3088 | # | ||
3089 | # Display Panels | ||
3090 | # | ||
3091 | # CONFIG_DRM_PANEL_SIMPLE is not set | ||
3092 | # CONFIG_DRM_PANEL_S6E8AA0 is not set | ||
3093 | |||
3094 | # | ||
3095 | # Frame buffer Devices | ||
3096 | # | ||
3097 | CONFIG_FB=y | ||
3098 | # CONFIG_FIRMWARE_EDID is not set | ||
3099 | CONFIG_FB_CMDLINE=y | ||
3100 | # CONFIG_FB_DDC is not set | ||
3101 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
3102 | CONFIG_FB_CFB_FILLRECT=y | ||
3103 | CONFIG_FB_CFB_COPYAREA=y | ||
3104 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
3105 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
3106 | CONFIG_FB_SYS_FILLRECT=m | ||
3107 | CONFIG_FB_SYS_COPYAREA=m | ||
3108 | CONFIG_FB_SYS_IMAGEBLIT=m | ||
3109 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
3110 | CONFIG_FB_SYS_FOPS=m | ||
3111 | CONFIG_FB_DEFERRED_IO=y | ||
3112 | # CONFIG_FB_SVGALIB is not set | ||
3113 | # CONFIG_FB_MACMODES is not set | ||
3114 | CONFIG_FB_BACKLIGHT=y | ||
3115 | CONFIG_FB_MODE_HELPERS=y | ||
3116 | CONFIG_FB_TILEBLITTING=y | ||
3117 | |||
3118 | # | ||
3119 | # Frame buffer hardware drivers | ||
3120 | # | ||
3121 | # CONFIG_FB_CIRRUS is not set | ||
3122 | # CONFIG_FB_PM2 is not set | ||
3123 | CONFIG_FB_ARMCLCD=y | ||
3124 | # CONFIG_FB_CYBER2000 is not set | ||
3125 | # CONFIG_FB_ASILIANT is not set | ||
3126 | # CONFIG_FB_IMSTT is not set | ||
3127 | # CONFIG_FB_UVESA is not set | ||
3128 | # CONFIG_FB_OPENCORES is not set | ||
3129 | # CONFIG_FB_S1D13XXX is not set | ||
3130 | # CONFIG_FB_NVIDIA is not set | ||
3131 | # CONFIG_FB_RIVA is not set | ||
3132 | # CONFIG_FB_I740 is not set | ||
3133 | # CONFIG_FB_MATROX is not set | ||
3134 | # CONFIG_FB_RADEON is not set | ||
3135 | # CONFIG_FB_ATY128 is not set | ||
3136 | # CONFIG_FB_ATY is not set | ||
3137 | # CONFIG_FB_S3 is not set | ||
3138 | # CONFIG_FB_SAVAGE is not set | ||
3139 | # CONFIG_FB_SIS is not set | ||
3140 | # CONFIG_FB_NEOMAGIC is not set | ||
3141 | # CONFIG_FB_KYRO is not set | ||
3142 | # CONFIG_FB_3DFX is not set | ||
3143 | # CONFIG_FB_VOODOO1 is not set | ||
3144 | # CONFIG_FB_VT8623 is not set | ||
3145 | # CONFIG_FB_TRIDENT is not set | ||
3146 | # CONFIG_FB_ARK is not set | ||
3147 | # CONFIG_FB_PM3 is not set | ||
3148 | # CONFIG_FB_CARMINE is not set | ||
3149 | # CONFIG_FB_SM501 is not set | ||
3150 | # CONFIG_FB_SMSCUFX is not set | ||
3151 | # CONFIG_FB_UDL is not set | ||
3152 | CONFIG_FB_VIRTUAL=m | ||
3153 | # CONFIG_FB_METRONOME is not set | ||
3154 | # CONFIG_FB_MB862XX is not set | ||
3155 | # CONFIG_FB_BROADSHEET is not set | ||
3156 | # CONFIG_FB_AUO_K190X is not set | ||
3157 | CONFIG_FB_SIMPLE=y | ||
3158 | CONFIG_FB_SSD1307=m | ||
3159 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
3160 | CONFIG_LCD_CLASS_DEVICE=m | ||
3161 | CONFIG_LCD_PLATFORM=m | ||
3162 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
3163 | # CONFIG_BACKLIGHT_GENERIC is not set | ||
3164 | CONFIG_BACKLIGHT_PWM=m | ||
3165 | # CONFIG_BACKLIGHT_ADP8860 is not set | ||
3166 | # CONFIG_BACKLIGHT_ADP8870 is not set | ||
3167 | # CONFIG_BACKLIGHT_LM3630A is not set | ||
3168 | # CONFIG_BACKLIGHT_LM3639 is not set | ||
3169 | CONFIG_BACKLIGHT_LP855X=m | ||
3170 | CONFIG_BACKLIGHT_GPIO=m | ||
3171 | # CONFIG_BACKLIGHT_LV5207LP is not set | ||
3172 | # CONFIG_BACKLIGHT_BD6107 is not set | ||
3173 | # CONFIG_VGASTATE is not set | ||
3174 | CONFIG_VIDEOMODE_HELPERS=y | ||
3175 | CONFIG_HDMI=y | ||
3176 | |||
3177 | # | ||
3178 | # Console display driver support | ||
3179 | # | ||
3180 | CONFIG_DUMMY_CONSOLE=y | ||
3181 | CONFIG_DUMMY_CONSOLE_COLUMNS=80 | ||
3182 | CONFIG_DUMMY_CONSOLE_ROWS=25 | ||
3183 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
3184 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
3185 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y | ||
3186 | CONFIG_LOGO=y | ||
3187 | # CONFIG_LOGO_LINUX_MONO is not set | ||
3188 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
3189 | CONFIG_LOGO_LINUX_CLUT224=y | ||
3190 | # CONFIG_SOUND is not set | ||
3191 | |||
3192 | # | ||
3193 | # HID support | ||
3194 | # | ||
3195 | CONFIG_HID=y | ||
3196 | CONFIG_HID_BATTERY_STRENGTH=y | ||
3197 | CONFIG_HIDRAW=y | ||
3198 | CONFIG_UHID=m | ||
3199 | CONFIG_HID_GENERIC=y | ||
3200 | |||
3201 | # | ||
3202 | # Special HID drivers | ||
3203 | # | ||
3204 | # CONFIG_HID_A4TECH is not set | ||
3205 | CONFIG_HID_ACRUX=m | ||
3206 | CONFIG_HID_ACRUX_FF=y | ||
3207 | # CONFIG_HID_APPLE is not set | ||
3208 | CONFIG_HID_APPLEIR=m | ||
3209 | CONFIG_HID_AUREAL=m | ||
3210 | # CONFIG_HID_BELKIN is not set | ||
3211 | # CONFIG_HID_BETOP_FF is not set | ||
3212 | # CONFIG_HID_CHERRY is not set | ||
3213 | # CONFIG_HID_CHICONY is not set | ||
3214 | # CONFIG_HID_CP2112 is not set | ||
3215 | # CONFIG_HID_CYPRESS is not set | ||
3216 | CONFIG_HID_DRAGONRISE=m | ||
3217 | CONFIG_DRAGONRISE_FF=y | ||
3218 | CONFIG_HID_EMS_FF=m | ||
3219 | CONFIG_HID_ELECOM=m | ||
3220 | CONFIG_HID_ELO=m | ||
3221 | # CONFIG_HID_EZKEY is not set | ||
3222 | CONFIG_HID_HOLTEK=m | ||
3223 | CONFIG_HOLTEK_FF=y | ||
3224 | CONFIG_HID_GT683R=m | ||
3225 | CONFIG_HID_KEYTOUCH=m | ||
3226 | CONFIG_HID_KYE=m | ||
3227 | CONFIG_HID_UCLOGIC=m | ||
3228 | CONFIG_HID_WALTOP=m | ||
3229 | CONFIG_HID_GYRATION=m | ||
3230 | CONFIG_HID_ICADE=m | ||
3231 | CONFIG_HID_TWINHAN=m | ||
3232 | # CONFIG_HID_KENSINGTON is not set | ||
3233 | CONFIG_HID_LCPOWER=m | ||
3234 | CONFIG_HID_LENOVO=m | ||
3235 | # CONFIG_HID_LOGITECH is not set | ||
3236 | CONFIG_HID_MAGICMOUSE=y | ||
3237 | # CONFIG_HID_MICROSOFT is not set | ||
3238 | # CONFIG_HID_MONTEREY is not set | ||
3239 | CONFIG_HID_MULTITOUCH=m | ||
3240 | CONFIG_HID_NTRIG=y | ||
3241 | CONFIG_HID_ORTEK=m | ||
3242 | CONFIG_HID_PANTHERLORD=m | ||
3243 | CONFIG_PANTHERLORD_FF=y | ||
3244 | # CONFIG_HID_PENMOUNT is not set | ||
3245 | CONFIG_HID_PETALYNX=m | ||
3246 | CONFIG_HID_PICOLCD=m | ||
3247 | # CONFIG_HID_PICOLCD_FB is not set | ||
3248 | # CONFIG_HID_PICOLCD_BACKLIGHT is not set | ||
3249 | # CONFIG_HID_PICOLCD_LCD is not set | ||
3250 | # CONFIG_HID_PICOLCD_LEDS is not set | ||
3251 | CONFIG_HID_PLANTRONICS=y | ||
3252 | CONFIG_HID_PRIMAX=m | ||
3253 | CONFIG_HID_ROCCAT=m | ||
3254 | CONFIG_HID_SAITEK=m | ||
3255 | CONFIG_HID_SAMSUNG=m | ||
3256 | CONFIG_HID_SONY=m | ||
3257 | CONFIG_SONY_FF=y | ||
3258 | CONFIG_HID_SPEEDLINK=m | ||
3259 | CONFIG_HID_STEELSERIES=m | ||
3260 | CONFIG_HID_SUNPLUS=m | ||
3261 | CONFIG_HID_RMI=m | ||
3262 | CONFIG_HID_GREENASIA=m | ||
3263 | CONFIG_GREENASIA_FF=y | ||
3264 | CONFIG_HID_SMARTJOYPLUS=m | ||
3265 | CONFIG_SMARTJOYPLUS_FF=y | ||
3266 | CONFIG_HID_TIVO=m | ||
3267 | CONFIG_HID_TOPSEED=m | ||
3268 | CONFIG_HID_THINGM=m | ||
3269 | CONFIG_HID_THRUSTMASTER=m | ||
3270 | CONFIG_THRUSTMASTER_FF=y | ||
3271 | CONFIG_HID_WACOM=m | ||
3272 | CONFIG_HID_WIIMOTE=m | ||
3273 | CONFIG_HID_XINMO=m | ||
3274 | CONFIG_HID_ZEROPLUS=m | ||
3275 | CONFIG_ZEROPLUS_FF=y | ||
3276 | CONFIG_HID_ZYDACRON=m | ||
3277 | CONFIG_HID_SENSOR_HUB=m | ||
3278 | # CONFIG_HID_SENSOR_CUSTOM_SENSOR is not set | ||
3279 | |||
3280 | # | ||
3281 | # USB HID support | ||
3282 | # | ||
3283 | CONFIG_USB_HID=y | ||
3284 | CONFIG_HID_PID=y | ||
3285 | CONFIG_USB_HIDDEV=y | ||
3286 | |||
3287 | # | ||
3288 | # I2C HID support | ||
3289 | # | ||
3290 | CONFIG_I2C_HID=m | ||
3291 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
3292 | CONFIG_USB_SUPPORT=y | ||
3293 | CONFIG_USB_COMMON=y | ||
3294 | CONFIG_USB_ARCH_HAS_HCD=y | ||
3295 | CONFIG_USB=y | ||
3296 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | ||
3297 | |||
3298 | # | ||
3299 | # Miscellaneous USB options | ||
3300 | # | ||
3301 | CONFIG_USB_DEFAULT_PERSIST=y | ||
3302 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
3303 | # CONFIG_USB_OTG is not set | ||
3304 | # CONFIG_USB_OTG_WHITELIST is not set | ||
3305 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
3306 | # CONFIG_USB_OTG_FSM is not set | ||
3307 | CONFIG_USB_MON=y | ||
3308 | CONFIG_USB_WUSB=m | ||
3309 | CONFIG_USB_WUSB_CBAF=m | ||
3310 | # CONFIG_USB_WUSB_CBAF_DEBUG is not set | ||
3311 | |||
3312 | # | ||
3313 | # USB Host Controller Drivers | ||
3314 | # | ||
3315 | # CONFIG_USB_C67X00_HCD is not set | ||
3316 | CONFIG_USB_XHCI_HCD=y | ||
3317 | CONFIG_USB_XHCI_PCI=y | ||
3318 | CONFIG_USB_EHCI_HCD=y | ||
3319 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | ||
3320 | CONFIG_USB_EHCI_TT_NEWSCHED=y | ||
3321 | CONFIG_USB_EHCI_PCI=y | ||
3322 | # CONFIG_USB_EHCI_HCD_PLATFORM is not set | ||
3323 | # CONFIG_USB_OXU210HP_HCD is not set | ||
3324 | # CONFIG_USB_ISP116X_HCD is not set | ||
3325 | CONFIG_USB_ISP1362_HCD=m | ||
3326 | CONFIG_USB_FUSBH200_HCD=m | ||
3327 | # CONFIG_USB_FOTG210_HCD is not set | ||
3328 | CONFIG_USB_OHCI_HCD=y | ||
3329 | CONFIG_USB_OHCI_HCD_PCI=y | ||
3330 | # CONFIG_USB_OHCI_HCD_PLATFORM is not set | ||
3331 | CONFIG_USB_UHCI_HCD=y | ||
3332 | CONFIG_USB_U132_HCD=m | ||
3333 | CONFIG_USB_SL811_HCD=m | ||
3334 | CONFIG_USB_SL811_HCD_ISO=y | ||
3335 | # CONFIG_USB_R8A66597_HCD is not set | ||
3336 | # CONFIG_USB_WHCI_HCD is not set | ||
3337 | CONFIG_USB_HWA_HCD=m | ||
3338 | # CONFIG_USB_HCD_BCMA is not set | ||
3339 | # CONFIG_USB_HCD_SSB is not set | ||
3340 | # CONFIG_USB_HCD_TEST_MODE is not set | ||
3341 | |||
3342 | # | ||
3343 | # USB Device Class drivers | ||
3344 | # | ||
3345 | CONFIG_USB_ACM=m | ||
3346 | CONFIG_USB_PRINTER=m | ||
3347 | CONFIG_USB_WDM=m | ||
3348 | CONFIG_USB_TMC=m | ||
3349 | |||
3350 | # | ||
3351 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
3352 | # | ||
3353 | |||
3354 | # | ||
3355 | # also be needed; see USB_STORAGE Help for more info | ||
3356 | # | ||
3357 | CONFIG_USB_STORAGE=m | ||
3358 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
3359 | CONFIG_USB_STORAGE_REALTEK=m | ||
3360 | CONFIG_REALTEK_AUTOPM=y | ||
3361 | CONFIG_USB_STORAGE_DATAFAB=m | ||
3362 | CONFIG_USB_STORAGE_FREECOM=m | ||
3363 | CONFIG_USB_STORAGE_ISD200=m | ||
3364 | CONFIG_USB_STORAGE_USBAT=m | ||
3365 | CONFIG_USB_STORAGE_SDDR09=m | ||
3366 | CONFIG_USB_STORAGE_SDDR55=m | ||
3367 | CONFIG_USB_STORAGE_JUMPSHOT=m | ||
3368 | CONFIG_USB_STORAGE_ALAUDA=m | ||
3369 | CONFIG_USB_STORAGE_ONETOUCH=m | ||
3370 | CONFIG_USB_STORAGE_KARMA=m | ||
3371 | CONFIG_USB_STORAGE_CYPRESS_ATACB=m | ||
3372 | CONFIG_USB_STORAGE_ENE_UB6250=m | ||
3373 | CONFIG_USB_UAS=m | ||
3374 | |||
3375 | # | ||
3376 | # USB Imaging devices | ||
3377 | # | ||
3378 | CONFIG_USB_MDC800=m | ||
3379 | CONFIG_USB_MICROTEK=m | ||
3380 | # CONFIG_USBIP_CORE is not set | ||
3381 | # CONFIG_USB_MUSB_HDRC is not set | ||
3382 | # CONFIG_USB_DWC3 is not set | ||
3383 | # CONFIG_USB_DWC2 is not set | ||
3384 | # CONFIG_USB_CHIPIDEA is not set | ||
3385 | # CONFIG_USB_ISP1760 is not set | ||
3386 | |||
3387 | # | ||
3388 | # USB port drivers | ||
3389 | # | ||
3390 | CONFIG_USB_SERIAL=y | ||
3391 | CONFIG_USB_SERIAL_CONSOLE=y | ||
3392 | CONFIG_USB_SERIAL_GENERIC=y | ||
3393 | CONFIG_USB_SERIAL_SIMPLE=m | ||
3394 | CONFIG_USB_SERIAL_AIRCABLE=m | ||
3395 | CONFIG_USB_SERIAL_ARK3116=m | ||
3396 | CONFIG_USB_SERIAL_BELKIN=m | ||
3397 | CONFIG_USB_SERIAL_CH341=m | ||
3398 | CONFIG_USB_SERIAL_WHITEHEAT=m | ||
3399 | CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m | ||
3400 | CONFIG_USB_SERIAL_CP210X=m | ||
3401 | CONFIG_USB_SERIAL_CYPRESS_M8=m | ||
3402 | CONFIG_USB_SERIAL_EMPEG=m | ||
3403 | CONFIG_USB_SERIAL_FTDI_SIO=m | ||
3404 | CONFIG_USB_SERIAL_VISOR=m | ||
3405 | CONFIG_USB_SERIAL_IPAQ=m | ||
3406 | CONFIG_USB_SERIAL_IR=m | ||
3407 | CONFIG_USB_SERIAL_EDGEPORT=m | ||
3408 | CONFIG_USB_SERIAL_EDGEPORT_TI=m | ||
3409 | # CONFIG_USB_SERIAL_F81232 is not set | ||
3410 | CONFIG_USB_SERIAL_GARMIN=m | ||
3411 | CONFIG_USB_SERIAL_IPW=m | ||
3412 | CONFIG_USB_SERIAL_IUU=m | ||
3413 | CONFIG_USB_SERIAL_KEYSPAN_PDA=m | ||
3414 | CONFIG_USB_SERIAL_KEYSPAN=m | ||
3415 | CONFIG_USB_SERIAL_KLSI=m | ||
3416 | CONFIG_USB_SERIAL_KOBIL_SCT=m | ||
3417 | CONFIG_USB_SERIAL_MCT_U232=m | ||
3418 | # CONFIG_USB_SERIAL_METRO is not set | ||
3419 | CONFIG_USB_SERIAL_MOS7720=m | ||
3420 | CONFIG_USB_SERIAL_MOS7840=m | ||
3421 | # CONFIG_USB_SERIAL_MXUPORT is not set | ||
3422 | CONFIG_USB_SERIAL_NAVMAN=m | ||
3423 | CONFIG_USB_SERIAL_PL2303=m | ||
3424 | CONFIG_USB_SERIAL_OTI6858=m | ||
3425 | CONFIG_USB_SERIAL_QCAUX=m | ||
3426 | CONFIG_USB_SERIAL_QUALCOMM=m | ||
3427 | CONFIG_USB_SERIAL_SPCP8X5=m | ||
3428 | CONFIG_USB_SERIAL_SAFE=m | ||
3429 | CONFIG_USB_SERIAL_SAFE_PADDED=y | ||
3430 | CONFIG_USB_SERIAL_SIERRAWIRELESS=m | ||
3431 | CONFIG_USB_SERIAL_SYMBOL=m | ||
3432 | CONFIG_USB_SERIAL_TI=m | ||
3433 | CONFIG_USB_SERIAL_CYBERJACK=m | ||
3434 | CONFIG_USB_SERIAL_XIRCOM=m | ||
3435 | CONFIG_USB_SERIAL_WWAN=m | ||
3436 | CONFIG_USB_SERIAL_OPTION=m | ||
3437 | CONFIG_USB_SERIAL_OMNINET=m | ||
3438 | CONFIG_USB_SERIAL_OPTICON=m | ||
3439 | CONFIG_USB_SERIAL_XSENS_MT=m | ||
3440 | # CONFIG_USB_SERIAL_WISHBONE is not set | ||
3441 | CONFIG_USB_SERIAL_SSU100=m | ||
3442 | CONFIG_USB_SERIAL_QT2=m | ||
3443 | CONFIG_USB_SERIAL_DEBUG=m | ||
3444 | |||
3445 | # | ||
3446 | # USB Miscellaneous drivers | ||
3447 | # | ||
3448 | CONFIG_USB_EMI62=m | ||
3449 | CONFIG_USB_EMI26=m | ||
3450 | CONFIG_USB_ADUTUX=m | ||
3451 | CONFIG_USB_SEVSEG=m | ||
3452 | # CONFIG_USB_RIO500 is not set | ||
3453 | CONFIG_USB_LEGOTOWER=m | ||
3454 | CONFIG_USB_LCD=m | ||
3455 | CONFIG_USB_LED=m | ||
3456 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
3457 | # CONFIG_USB_CYTHERM is not set | ||
3458 | CONFIG_USB_IDMOUSE=m | ||
3459 | CONFIG_USB_FTDI_ELAN=m | ||
3460 | CONFIG_USB_APPLEDISPLAY=m | ||
3461 | CONFIG_USB_SISUSBVGA=m | ||
3462 | CONFIG_USB_SISUSBVGA_CON=y | ||
3463 | CONFIG_USB_LD=m | ||
3464 | CONFIG_USB_TRANCEVIBRATOR=m | ||
3465 | CONFIG_USB_IOWARRIOR=m | ||
3466 | # CONFIG_USB_TEST is not set | ||
3467 | # CONFIG_USB_EHSET_TEST_FIXTURE is not set | ||
3468 | CONFIG_USB_ISIGHTFW=m | ||
3469 | CONFIG_USB_YUREX=m | ||
3470 | CONFIG_USB_EZUSB_FX2=m | ||
3471 | CONFIG_USB_HSIC_USB3503=m | ||
3472 | # CONFIG_USB_LINK_LAYER_TEST is not set | ||
3473 | # CONFIG_USB_CHAOSKEY is not set | ||
3474 | CONFIG_USB_ATM=m | ||
3475 | # CONFIG_USB_SPEEDTOUCH is not set | ||
3476 | CONFIG_USB_CXACRU=m | ||
3477 | CONFIG_USB_UEAGLEATM=m | ||
3478 | CONFIG_USB_XUSBATM=m | ||
3479 | |||
3480 | # | ||
3481 | # USB Physical Layer drivers | ||
3482 | # | ||
3483 | CONFIG_USB_PHY=y | ||
3484 | CONFIG_NOP_USB_XCEIV=m | ||
3485 | # CONFIG_USB_GPIO_VBUS is not set | ||
3486 | # CONFIG_USB_ISP1301 is not set | ||
3487 | # CONFIG_USB_ULPI is not set | ||
3488 | # CONFIG_USB_GADGET is not set | ||
3489 | # CONFIG_USB_LED_TRIG is not set | ||
3490 | CONFIG_UWB=m | ||
3491 | CONFIG_UWB_HWA=m | ||
3492 | CONFIG_UWB_WHCI=m | ||
3493 | CONFIG_UWB_I1480U=m | ||
3494 | CONFIG_MMC=m | ||
3495 | # CONFIG_MMC_DEBUG is not set | ||
3496 | # CONFIG_MMC_CLKGATE is not set | ||
3497 | |||
3498 | # | ||
3499 | # MMC/SD/SDIO Card Drivers | ||
3500 | # | ||
3501 | CONFIG_MMC_BLOCK=m | ||
3502 | CONFIG_MMC_BLOCK_MINORS=8 | ||
3503 | CONFIG_MMC_BLOCK_BOUNCE=y | ||
3504 | CONFIG_SDIO_UART=m | ||
3505 | # CONFIG_MMC_TEST is not set | ||
3506 | |||
3507 | # | ||
3508 | # MMC/SD/SDIO Host Controller Drivers | ||
3509 | # | ||
3510 | CONFIG_MMC_ARMMMCI=m | ||
3511 | CONFIG_MMC_SDHCI=m | ||
3512 | CONFIG_MMC_SDHCI_PCI=m | ||
3513 | CONFIG_MMC_RICOH_MMC=y | ||
3514 | CONFIG_MMC_SDHCI_PLTFM=m | ||
3515 | # CONFIG_MMC_SDHCI_OF_ARASAN is not set | ||
3516 | # CONFIG_MMC_SDHCI_F_SDH30 is not set | ||
3517 | CONFIG_MMC_TIFM_SD=m | ||
3518 | CONFIG_MMC_CB710=m | ||
3519 | CONFIG_MMC_VIA_SDMMC=m | ||
3520 | # CONFIG_MMC_DW is not set | ||
3521 | CONFIG_MMC_VUB300=m | ||
3522 | CONFIG_MMC_USHC=m | ||
3523 | # CONFIG_MMC_USDHI6ROL0 is not set | ||
3524 | CONFIG_MMC_REALTEK_PCI=m | ||
3525 | CONFIG_MMC_REALTEK_USB=m | ||
3526 | # CONFIG_MMC_TOSHIBA_PCI is not set | ||
3527 | CONFIG_MEMSTICK=m | ||
3528 | # CONFIG_MEMSTICK_DEBUG is not set | ||
3529 | |||
3530 | # | ||
3531 | # MemoryStick drivers | ||
3532 | # | ||
3533 | # CONFIG_MEMSTICK_UNSAFE_RESUME is not set | ||
3534 | CONFIG_MSPRO_BLOCK=m | ||
3535 | # CONFIG_MS_BLOCK is not set | ||
3536 | |||
3537 | # | ||
3538 | # MemoryStick Host Controller Drivers | ||
3539 | # | ||
3540 | CONFIG_MEMSTICK_TIFM_MS=m | ||
3541 | CONFIG_MEMSTICK_JMICRON_38X=m | ||
3542 | CONFIG_MEMSTICK_R592=m | ||
3543 | CONFIG_MEMSTICK_REALTEK_PCI=m | ||
3544 | CONFIG_MEMSTICK_REALTEK_USB=m | ||
3545 | CONFIG_NEW_LEDS=y | ||
3546 | CONFIG_LEDS_CLASS=y | ||
3547 | # CONFIG_LEDS_CLASS_FLASH is not set | ||
3548 | |||
3549 | # | ||
3550 | # LED drivers | ||
3551 | # | ||
3552 | CONFIG_LEDS_LM3530=m | ||
3553 | # CONFIG_LEDS_LM3642 is not set | ||
3554 | # CONFIG_LEDS_PCA9532 is not set | ||
3555 | # CONFIG_LEDS_GPIO is not set | ||
3556 | CONFIG_LEDS_LP3944=m | ||
3557 | CONFIG_LEDS_LP55XX_COMMON=m | ||
3558 | CONFIG_LEDS_LP5521=m | ||
3559 | CONFIG_LEDS_LP5523=m | ||
3560 | CONFIG_LEDS_LP5562=m | ||
3561 | # CONFIG_LEDS_LP8501 is not set | ||
3562 | # CONFIG_LEDS_LP8860 is not set | ||
3563 | # CONFIG_LEDS_PCA955X is not set | ||
3564 | # CONFIG_LEDS_PCA963X is not set | ||
3565 | # CONFIG_LEDS_PWM is not set | ||
3566 | # CONFIG_LEDS_BD2802 is not set | ||
3567 | # CONFIG_LEDS_INTEL_SS4200 is not set | ||
3568 | CONFIG_LEDS_LT3593=m | ||
3569 | # CONFIG_LEDS_TCA6507 is not set | ||
3570 | # CONFIG_LEDS_LM355x is not set | ||
3571 | |||
3572 | # | ||
3573 | # LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) | ||
3574 | # | ||
3575 | CONFIG_LEDS_BLINKM=m | ||
3576 | # CONFIG_LEDS_SYSCON is not set | ||
3577 | # CONFIG_LEDS_PM8941_WLED is not set | ||
3578 | |||
3579 | # | ||
3580 | # LED Triggers | ||
3581 | # | ||
3582 | CONFIG_LEDS_TRIGGERS=y | ||
3583 | CONFIG_LEDS_TRIGGER_TIMER=m | ||
3584 | CONFIG_LEDS_TRIGGER_ONESHOT=m | ||
3585 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m | ||
3586 | CONFIG_LEDS_TRIGGER_BACKLIGHT=m | ||
3587 | # CONFIG_LEDS_TRIGGER_CPU is not set | ||
3588 | CONFIG_LEDS_TRIGGER_GPIO=m | ||
3589 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=m | ||
3590 | |||
3591 | # | ||
3592 | # iptables trigger is under Netfilter config (LED target) | ||
3593 | # | ||
3594 | CONFIG_LEDS_TRIGGER_TRANSIENT=m | ||
3595 | CONFIG_LEDS_TRIGGER_CAMERA=m | ||
3596 | CONFIG_ACCESSIBILITY=y | ||
3597 | CONFIG_A11Y_BRAILLE_CONSOLE=y | ||
3598 | # CONFIG_INFINIBAND is not set | ||
3599 | CONFIG_RTC_LIB=y | ||
3600 | CONFIG_RTC_CLASS=y | ||
3601 | CONFIG_RTC_HCTOSYS=y | ||
3602 | # CONFIG_RTC_SYSTOHC is not set | ||
3603 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
3604 | # CONFIG_RTC_DEBUG is not set | ||
3605 | |||
3606 | # | ||
3607 | # RTC interfaces | ||
3608 | # | ||
3609 | CONFIG_RTC_INTF_SYSFS=y | ||
3610 | CONFIG_RTC_INTF_PROC=y | ||
3611 | CONFIG_RTC_INTF_DEV=y | ||
3612 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
3613 | # CONFIG_RTC_DRV_TEST is not set | ||
3614 | |||
3615 | # | ||
3616 | # I2C RTC drivers | ||
3617 | # | ||
3618 | # CONFIG_RTC_DRV_ABB5ZES3 is not set | ||
3619 | # CONFIG_RTC_DRV_ABX80X is not set | ||
3620 | CONFIG_RTC_DRV_DS1307=m | ||
3621 | CONFIG_RTC_DRV_DS1374=m | ||
3622 | # CONFIG_RTC_DRV_DS1374_WDT is not set | ||
3623 | CONFIG_RTC_DRV_DS1672=m | ||
3624 | CONFIG_RTC_DRV_DS3232=m | ||
3625 | # CONFIG_RTC_DRV_HYM8563 is not set | ||
3626 | CONFIG_RTC_DRV_MAX6900=m | ||
3627 | CONFIG_RTC_DRV_RS5C372=m | ||
3628 | CONFIG_RTC_DRV_ISL1208=m | ||
3629 | CONFIG_RTC_DRV_ISL12022=m | ||
3630 | # CONFIG_RTC_DRV_ISL12057 is not set | ||
3631 | CONFIG_RTC_DRV_X1205=m | ||
3632 | CONFIG_RTC_DRV_PCF2127=m | ||
3633 | CONFIG_RTC_DRV_PCF8523=m | ||
3634 | CONFIG_RTC_DRV_PCF8563=m | ||
3635 | CONFIG_RTC_DRV_PCF85063=m | ||
3636 | CONFIG_RTC_DRV_PCF8583=m | ||
3637 | CONFIG_RTC_DRV_M41T80=m | ||
3638 | CONFIG_RTC_DRV_M41T80_WDT=y | ||
3639 | CONFIG_RTC_DRV_BQ32K=m | ||
3640 | # CONFIG_RTC_DRV_S35390A is not set | ||
3641 | CONFIG_RTC_DRV_FM3130=m | ||
3642 | CONFIG_RTC_DRV_RX8581=m | ||
3643 | CONFIG_RTC_DRV_RX8025=m | ||
3644 | CONFIG_RTC_DRV_EM3027=m | ||
3645 | CONFIG_RTC_DRV_RV3029C2=m | ||
3646 | |||
3647 | # | ||
3648 | # SPI RTC drivers | ||
3649 | # | ||
3650 | |||
3651 | # | ||
3652 | # Platform RTC drivers | ||
3653 | # | ||
3654 | CONFIG_RTC_DRV_DS1286=m | ||
3655 | CONFIG_RTC_DRV_DS1511=m | ||
3656 | CONFIG_RTC_DRV_DS1553=m | ||
3657 | # CONFIG_RTC_DRV_DS1685_FAMILY is not set | ||
3658 | CONFIG_RTC_DRV_DS1742=m | ||
3659 | CONFIG_RTC_DRV_DS2404=m | ||
3660 | # CONFIG_RTC_DRV_EFI is not set | ||
3661 | CONFIG_RTC_DRV_STK17TA8=m | ||
3662 | # CONFIG_RTC_DRV_M48T86 is not set | ||
3663 | CONFIG_RTC_DRV_M48T35=m | ||
3664 | CONFIG_RTC_DRV_M48T59=m | ||
3665 | CONFIG_RTC_DRV_MSM6242=m | ||
3666 | CONFIG_RTC_DRV_BQ4802=m | ||
3667 | CONFIG_RTC_DRV_RP5C01=m | ||
3668 | CONFIG_RTC_DRV_V3020=m | ||
3669 | |||
3670 | # | ||
3671 | # on-CPU RTC drivers | ||
3672 | # | ||
3673 | # CONFIG_RTC_DRV_PL030 is not set | ||
3674 | # CONFIG_RTC_DRV_PL031 is not set | ||
3675 | # CONFIG_RTC_DRV_SNVS is not set | ||
3676 | CONFIG_RTC_DRV_XGENE=m | ||
3677 | |||
3678 | # | ||
3679 | # HID Sensor RTC drivers | ||
3680 | # | ||
3681 | # CONFIG_RTC_DRV_HID_SENSOR_TIME is not set | ||
3682 | CONFIG_DMADEVICES=y | ||
3683 | # CONFIG_DMADEVICES_DEBUG is not set | ||
3684 | |||
3685 | # | ||
3686 | # DMA Devices | ||
3687 | # | ||
3688 | # CONFIG_AMBA_PL08X is not set | ||
3689 | CONFIG_DW_DMAC_CORE=m | ||
3690 | CONFIG_DW_DMAC=m | ||
3691 | CONFIG_DW_DMAC_PCI=m | ||
3692 | # CONFIG_HSU_DMA_PCI is not set | ||
3693 | # CONFIG_PL330_DMA is not set | ||
3694 | # CONFIG_FSL_EDMA is not set | ||
3695 | CONFIG_DMA_ENGINE=y | ||
3696 | CONFIG_DMA_OF=y | ||
3697 | |||
3698 | # | ||
3699 | # DMA Clients | ||
3700 | # | ||
3701 | CONFIG_ASYNC_TX_DMA=y | ||
3702 | # CONFIG_DMATEST is not set | ||
3703 | CONFIG_AUXDISPLAY=y | ||
3704 | CONFIG_UIO=m | ||
3705 | CONFIG_UIO_CIF=m | ||
3706 | # CONFIG_UIO_PDRV_GENIRQ is not set | ||
3707 | # CONFIG_UIO_DMEM_GENIRQ is not set | ||
3708 | CONFIG_UIO_AEC=m | ||
3709 | CONFIG_UIO_SERCOS3=m | ||
3710 | CONFIG_UIO_PCI_GENERIC=m | ||
3711 | # CONFIG_UIO_NETX is not set | ||
3712 | # CONFIG_UIO_MF624 is not set | ||
3713 | CONFIG_VFIO_IOMMU_TYPE1=m | ||
3714 | CONFIG_VFIO_VIRQFD=m | ||
3715 | CONFIG_VFIO=m | ||
3716 | CONFIG_VFIO_PCI=m | ||
3717 | CONFIG_VFIO_PCI_MMAP=y | ||
3718 | CONFIG_VFIO_PCI_INTX=y | ||
3719 | CONFIG_VIRT_DRIVERS=y | ||
3720 | CONFIG_VIRTIO=y | ||
3721 | |||
3722 | # | ||
3723 | # Virtio drivers | ||
3724 | # | ||
3725 | CONFIG_VIRTIO_PCI=y | ||
3726 | CONFIG_VIRTIO_PCI_LEGACY=y | ||
3727 | CONFIG_VIRTIO_BALLOON=y | ||
3728 | # CONFIG_VIRTIO_INPUT is not set | ||
3729 | CONFIG_VIRTIO_MMIO=y | ||
3730 | CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y | ||
3731 | |||
3732 | # | ||
3733 | # Microsoft Hyper-V guest support | ||
3734 | # | ||
3735 | CONFIG_STAGING=y | ||
3736 | # CONFIG_PRISM2_USB is not set | ||
3737 | # CONFIG_COMEDI is not set | ||
3738 | # CONFIG_RTL8192U is not set | ||
3739 | CONFIG_RTLLIB=m | ||
3740 | CONFIG_RTLLIB_CRYPTO_CCMP=m | ||
3741 | CONFIG_RTLLIB_CRYPTO_TKIP=m | ||
3742 | CONFIG_RTLLIB_CRYPTO_WEP=m | ||
3743 | CONFIG_RTL8192E=m | ||
3744 | CONFIG_R8712U=m | ||
3745 | # CONFIG_R8188EU is not set | ||
3746 | CONFIG_R8723AU=m | ||
3747 | # CONFIG_8723AU_AP_MODE is not set | ||
3748 | # CONFIG_8723AU_BT_COEXIST is not set | ||
3749 | # CONFIG_RTS5208 is not set | ||
3750 | # CONFIG_VT6655 is not set | ||
3751 | # CONFIG_VT6656 is not set | ||
3752 | |||
3753 | # | ||
3754 | # IIO staging drivers | ||
3755 | # | ||
3756 | |||
3757 | # | ||
3758 | # Accelerometers | ||
3759 | # | ||
3760 | |||
3761 | # | ||
3762 | # Analog to digital converters | ||
3763 | # | ||
3764 | # CONFIG_AD7606 is not set | ||
3765 | |||
3766 | # | ||
3767 | # Analog digital bi-direction converters | ||
3768 | # | ||
3769 | # CONFIG_ADT7316 is not set | ||
3770 | |||
3771 | # | ||
3772 | # Capacitance to digital converters | ||
3773 | # | ||
3774 | # CONFIG_AD7150 is not set | ||
3775 | # CONFIG_AD7152 is not set | ||
3776 | # CONFIG_AD7746 is not set | ||
3777 | |||
3778 | # | ||
3779 | # Direct Digital Synthesis | ||
3780 | # | ||
3781 | |||
3782 | # | ||
3783 | # Digital gyroscope sensors | ||
3784 | # | ||
3785 | |||
3786 | # | ||
3787 | # Network Analyzer, Impedance Converters | ||
3788 | # | ||
3789 | # CONFIG_AD5933 is not set | ||
3790 | |||
3791 | # | ||
3792 | # Light sensors | ||
3793 | # | ||
3794 | # CONFIG_SENSORS_ISL29018 is not set | ||
3795 | # CONFIG_SENSORS_ISL29028 is not set | ||
3796 | # CONFIG_TSL2583 is not set | ||
3797 | # CONFIG_TSL2x7x is not set | ||
3798 | |||
3799 | # | ||
3800 | # Magnetometer sensors | ||
3801 | # | ||
3802 | # CONFIG_SENSORS_HMC5843_I2C is not set | ||
3803 | |||
3804 | # | ||
3805 | # Active energy metering IC | ||
3806 | # | ||
3807 | # CONFIG_ADE7854 is not set | ||
3808 | |||
3809 | # | ||
3810 | # Resolver to digital converters | ||
3811 | # | ||
3812 | |||
3813 | # | ||
3814 | # Triggers - standalone | ||
3815 | # | ||
3816 | # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set | ||
3817 | # CONFIG_IIO_SIMPLE_DUMMY is not set | ||
3818 | # CONFIG_FB_SM7XX is not set | ||
3819 | # CONFIG_FB_SM750 is not set | ||
3820 | # CONFIG_FB_XGI is not set | ||
3821 | # CONFIG_FT1000 is not set | ||
3822 | |||
3823 | # | ||
3824 | # Speakup console speech | ||
3825 | # | ||
3826 | # CONFIG_SPEAKUP is not set | ||
3827 | # CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set | ||
3828 | CONFIG_STAGING_MEDIA=y | ||
3829 | |||
3830 | # | ||
3831 | # Android | ||
3832 | # | ||
3833 | # CONFIG_USB_WPAN_HCD is not set | ||
3834 | # CONFIG_WIMAX_GDM72XX is not set | ||
3835 | # CONFIG_LTE_GDM724X is not set | ||
3836 | # CONFIG_LUSTRE_FS is not set | ||
3837 | # CONFIG_DGNC is not set | ||
3838 | # CONFIG_DGAP is not set | ||
3839 | # CONFIG_GS_FPGABOOT is not set | ||
3840 | # CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set | ||
3841 | # CONFIG_I2O is not set | ||
3842 | # CONFIG_FSL_MC_BUS is not set | ||
3843 | CONFIG_CLKDEV_LOOKUP=y | ||
3844 | CONFIG_HAVE_CLK_PREPARE=y | ||
3845 | CONFIG_COMMON_CLK=y | ||
3846 | |||
3847 | # | ||
3848 | # Common Clock Framework | ||
3849 | # | ||
3850 | CONFIG_COMMON_CLK_VERSATILE=y | ||
3851 | CONFIG_CLK_SP810=y | ||
3852 | CONFIG_CLK_VEXPRESS_OSC=y | ||
3853 | # CONFIG_COMMON_CLK_SI5351 is not set | ||
3854 | # CONFIG_COMMON_CLK_SI570 is not set | ||
3855 | CONFIG_COMMON_CLK_XGENE=y | ||
3856 | # CONFIG_COMMON_CLK_PWM is not set | ||
3857 | # CONFIG_COMMON_CLK_PXA is not set | ||
3858 | # CONFIG_COMMON_CLK_CDCE706 is not set | ||
3859 | |||
3860 | # | ||
3861 | # Hardware Spinlock drivers | ||
3862 | # | ||
3863 | |||
3864 | # | ||
3865 | # Clock Source drivers | ||
3866 | # | ||
3867 | CONFIG_CLKSRC_OF=y | ||
3868 | CONFIG_CLKSRC_MMIO=y | ||
3869 | CONFIG_ARM_ARCH_TIMER=y | ||
3870 | CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y | ||
3871 | # CONFIG_ATMEL_PIT is not set | ||
3872 | # CONFIG_SH_TIMER_CMT is not set | ||
3873 | # CONFIG_SH_TIMER_MTU2 is not set | ||
3874 | # CONFIG_SH_TIMER_TMU is not set | ||
3875 | # CONFIG_EM_TIMER_STI is not set | ||
3876 | # CONFIG_MAILBOX is not set | ||
3877 | CONFIG_IOMMU_API=y | ||
3878 | CONFIG_IOMMU_SUPPORT=y | ||
3879 | |||
3880 | # | ||
3881 | # Generic IOMMU Pagetable Support | ||
3882 | # | ||
3883 | CONFIG_IOMMU_IO_PGTABLE=y | ||
3884 | CONFIG_IOMMU_IO_PGTABLE_LPAE=y | ||
3885 | # CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set | ||
3886 | CONFIG_OF_IOMMU=y | ||
3887 | CONFIG_ARM_SMMU=y | ||
3888 | |||
3889 | # | ||
3890 | # Remoteproc drivers | ||
3891 | # | ||
3892 | # CONFIG_STE_MODEM_RPROC is not set | ||
3893 | |||
3894 | # | ||
3895 | # Rpmsg drivers | ||
3896 | # | ||
3897 | |||
3898 | # | ||
3899 | # SOC (System On Chip) specific Drivers | ||
3900 | # | ||
3901 | # CONFIG_SOC_TI is not set | ||
3902 | CONFIG_PM_DEVFREQ=y | ||
3903 | |||
3904 | # | ||
3905 | # DEVFREQ Governors | ||
3906 | # | ||
3907 | CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m | ||
3908 | # CONFIG_DEVFREQ_GOV_PERFORMANCE is not set | ||
3909 | # CONFIG_DEVFREQ_GOV_POWERSAVE is not set | ||
3910 | # CONFIG_DEVFREQ_GOV_USERSPACE is not set | ||
3911 | |||
3912 | # | ||
3913 | # DEVFREQ Drivers | ||
3914 | # | ||
3915 | # CONFIG_PM_DEVFREQ_EVENT is not set | ||
3916 | CONFIG_EXTCON=m | ||
3917 | |||
3918 | # | ||
3919 | # Extcon Device Drivers | ||
3920 | # | ||
3921 | CONFIG_EXTCON_ADC_JACK=m | ||
3922 | CONFIG_EXTCON_GPIO=m | ||
3923 | # CONFIG_EXTCON_RT8973A is not set | ||
3924 | # CONFIG_EXTCON_SM5502 is not set | ||
3925 | # CONFIG_EXTCON_USB_GPIO is not set | ||
3926 | CONFIG_MEMORY=y | ||
3927 | CONFIG_IIO=m | ||
3928 | CONFIG_IIO_BUFFER=y | ||
3929 | CONFIG_IIO_BUFFER_CB=y | ||
3930 | CONFIG_IIO_KFIFO_BUF=m | ||
3931 | CONFIG_IIO_TRIGGERED_BUFFER=m | ||
3932 | CONFIG_IIO_TRIGGER=y | ||
3933 | CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 | ||
3934 | |||
3935 | # | ||
3936 | # Accelerometers | ||
3937 | # | ||
3938 | # CONFIG_BMA180 is not set | ||
3939 | # CONFIG_BMC150_ACCEL is not set | ||
3940 | CONFIG_HID_SENSOR_ACCEL_3D=m | ||
3941 | CONFIG_IIO_ST_ACCEL_3AXIS=m | ||
3942 | CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m | ||
3943 | # CONFIG_MMA8452 is not set | ||
3944 | # CONFIG_KXCJK1013 is not set | ||
3945 | # CONFIG_MMA9551 is not set | ||
3946 | # CONFIG_MMA9553 is not set | ||
3947 | |||
3948 | # | ||
3949 | # Analog to digital converters | ||
3950 | # | ||
3951 | # CONFIG_AD7291 is not set | ||
3952 | # CONFIG_AD799X is not set | ||
3953 | # CONFIG_CC10001_ADC is not set | ||
3954 | # CONFIG_MAX1363 is not set | ||
3955 | # CONFIG_MCP3422 is not set | ||
3956 | # CONFIG_NAU7802 is not set | ||
3957 | # CONFIG_TI_ADC081C is not set | ||
3958 | # CONFIG_VF610_ADC is not set | ||
3959 | # CONFIG_VIPERBOARD_ADC is not set | ||
3960 | |||
3961 | # | ||
3962 | # Amplifiers | ||
3963 | # | ||
3964 | |||
3965 | # | ||
3966 | # Hid Sensor IIO Common | ||
3967 | # | ||
3968 | CONFIG_HID_SENSOR_IIO_COMMON=m | ||
3969 | CONFIG_HID_SENSOR_IIO_TRIGGER=m | ||
3970 | |||
3971 | # | ||
3972 | # SSP Sensor Common | ||
3973 | # | ||
3974 | CONFIG_IIO_ST_SENSORS_I2C=m | ||
3975 | CONFIG_IIO_ST_SENSORS_CORE=m | ||
3976 | |||
3977 | # | ||
3978 | # Digital to analog converters | ||
3979 | # | ||
3980 | # CONFIG_AD5064 is not set | ||
3981 | # CONFIG_AD5380 is not set | ||
3982 | # CONFIG_AD5446 is not set | ||
3983 | # CONFIG_MAX517 is not set | ||
3984 | # CONFIG_MAX5821 is not set | ||
3985 | # CONFIG_MCP4725 is not set | ||
3986 | |||
3987 | # | ||
3988 | # Frequency Synthesizers DDS/PLL | ||
3989 | # | ||
3990 | |||
3991 | # | ||
3992 | # Clock Generator/Distribution | ||
3993 | # | ||
3994 | |||
3995 | # | ||
3996 | # Phase-Locked Loop (PLL) frequency synthesizers | ||
3997 | # | ||
3998 | |||
3999 | # | ||
4000 | # Digital gyroscope sensors | ||
4001 | # | ||
4002 | # CONFIG_BMG160 is not set | ||
4003 | CONFIG_HID_SENSOR_GYRO_3D=m | ||
4004 | CONFIG_IIO_ST_GYRO_3AXIS=m | ||
4005 | CONFIG_IIO_ST_GYRO_I2C_3AXIS=m | ||
4006 | # CONFIG_ITG3200 is not set | ||
4007 | |||
4008 | # | ||
4009 | # Humidity sensors | ||
4010 | # | ||
4011 | # CONFIG_DHT11 is not set | ||
4012 | # CONFIG_SI7005 is not set | ||
4013 | # CONFIG_SI7020 is not set | ||
4014 | |||
4015 | # | ||
4016 | # Inertial measurement units | ||
4017 | # | ||
4018 | # CONFIG_KMX61 is not set | ||
4019 | # CONFIG_INV_MPU6050_IIO is not set | ||
4020 | |||
4021 | # | ||
4022 | # Light sensors | ||
4023 | # | ||
4024 | # CONFIG_ADJD_S311 is not set | ||
4025 | # CONFIG_AL3320A is not set | ||
4026 | # CONFIG_APDS9300 is not set | ||
4027 | # CONFIG_CM32181 is not set | ||
4028 | # CONFIG_CM3232 is not set | ||
4029 | # CONFIG_CM3323 is not set | ||
4030 | # CONFIG_CM36651 is not set | ||
4031 | # CONFIG_GP2AP020A00F is not set | ||
4032 | # CONFIG_ISL29125 is not set | ||
4033 | CONFIG_HID_SENSOR_ALS=m | ||
4034 | # CONFIG_HID_SENSOR_PROX is not set | ||
4035 | # CONFIG_JSA1212 is not set | ||
4036 | # CONFIG_LTR501 is not set | ||
4037 | # CONFIG_TCS3414 is not set | ||
4038 | # CONFIG_TCS3472 is not set | ||
4039 | # CONFIG_SENSORS_TSL2563 is not set | ||
4040 | # CONFIG_TSL4531 is not set | ||
4041 | # CONFIG_VCNL4000 is not set | ||
4042 | |||
4043 | # | ||
4044 | # Magnetometer sensors | ||
4045 | # | ||
4046 | # CONFIG_AK8975 is not set | ||
4047 | # CONFIG_AK09911 is not set | ||
4048 | # CONFIG_MAG3110 is not set | ||
4049 | CONFIG_HID_SENSOR_MAGNETOMETER_3D=m | ||
4050 | CONFIG_IIO_ST_MAGN_3AXIS=m | ||
4051 | CONFIG_IIO_ST_MAGN_I2C_3AXIS=m | ||
4052 | |||
4053 | # | ||
4054 | # Inclinometer sensors | ||
4055 | # | ||
4056 | CONFIG_HID_SENSOR_INCLINOMETER_3D=m | ||
4057 | CONFIG_HID_SENSOR_DEVICE_ROTATION=m | ||
4058 | |||
4059 | # | ||
4060 | # Triggers - standalone | ||
4061 | # | ||
4062 | CONFIG_IIO_INTERRUPT_TRIGGER=m | ||
4063 | CONFIG_IIO_SYSFS_TRIGGER=m | ||
4064 | |||
4065 | # | ||
4066 | # Pressure sensors | ||
4067 | # | ||
4068 | # CONFIG_BMP280 is not set | ||
4069 | # CONFIG_HID_SENSOR_PRESS is not set | ||
4070 | # CONFIG_MPL115 is not set | ||
4071 | # CONFIG_MPL3115 is not set | ||
4072 | # CONFIG_MS5611 is not set | ||
4073 | # CONFIG_IIO_ST_PRESS is not set | ||
4074 | # CONFIG_T5403 is not set | ||
4075 | |||
4076 | # | ||
4077 | # Lightning sensors | ||
4078 | # | ||
4079 | |||
4080 | # | ||
4081 | # Proximity sensors | ||
4082 | # | ||
4083 | # CONFIG_SX9500 is not set | ||
4084 | |||
4085 | # | ||
4086 | # Temperature sensors | ||
4087 | # | ||
4088 | # CONFIG_MLX90614 is not set | ||
4089 | # CONFIG_TMP006 is not set | ||
4090 | # CONFIG_VME_BUS is not set | ||
4091 | CONFIG_PWM=y | ||
4092 | CONFIG_PWM_SYSFS=y | ||
4093 | # CONFIG_PWM_FSL_FTM is not set | ||
4094 | # CONFIG_PWM_PCA9685 is not set | ||
4095 | CONFIG_IRQCHIP=y | ||
4096 | CONFIG_ARM_GIC=y | ||
4097 | CONFIG_ARM_GIC_V2M=y | ||
4098 | CONFIG_ARM_GIC_V3=y | ||
4099 | CONFIG_ARM_GIC_V3_ITS=y | ||
4100 | # CONFIG_IPACK_BUS is not set | ||
4101 | CONFIG_RESET_CONTROLLER=y | ||
4102 | CONFIG_FMC=m | ||
4103 | CONFIG_FMC_FAKEDEV=m | ||
4104 | CONFIG_FMC_TRIVIAL=m | ||
4105 | CONFIG_FMC_WRITE_EEPROM=m | ||
4106 | CONFIG_FMC_CHARDEV=m | ||
4107 | |||
4108 | # | ||
4109 | # PHY Subsystem | ||
4110 | # | ||
4111 | CONFIG_GENERIC_PHY=y | ||
4112 | # CONFIG_BCM_KONA_USB2_PHY is not set | ||
4113 | CONFIG_PHY_XGENE=y | ||
4114 | # CONFIG_POWERCAP is not set | ||
4115 | # CONFIG_MCB is not set | ||
4116 | CONFIG_RAS=y | ||
4117 | # CONFIG_THUNDERBOLT is not set | ||
4118 | |||
4119 | # | ||
4120 | # Android | ||
4121 | # | ||
4122 | # CONFIG_ANDROID is not set | ||
4123 | |||
4124 | # | ||
4125 | # Firmware Drivers | ||
4126 | # | ||
4127 | # CONFIG_FIRMWARE_MEMMAP is not set | ||
4128 | CONFIG_DMIID=y | ||
4129 | # CONFIG_DMI_SYSFS is not set | ||
4130 | |||
4131 | # | ||
4132 | # EFI (Extensible Firmware Interface) Support | ||
4133 | # | ||
4134 | # CONFIG_EFI_VARS is not set | ||
4135 | CONFIG_EFI_PARAMS_FROM_FDT=y | ||
4136 | CONFIG_EFI_RUNTIME_WRAPPERS=y | ||
4137 | CONFIG_EFI_ARMSTUB=y | ||
4138 | # CONFIG_ACPI is not set | ||
4139 | |||
4140 | # | ||
4141 | # File systems | ||
4142 | # | ||
4143 | CONFIG_DCACHE_WORD_ACCESS=y | ||
4144 | # CONFIG_EXT2_FS is not set | ||
4145 | CONFIG_EXT3_FS=y | ||
4146 | CONFIG_EXT3_DEFAULTS_TO_ORDERED=y | ||
4147 | CONFIG_EXT3_FS_XATTR=y | ||
4148 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
4149 | # CONFIG_EXT3_FS_SECURITY is not set | ||
4150 | CONFIG_EXT4_FS=y | ||
4151 | CONFIG_EXT4_USE_FOR_EXT23=y | ||
4152 | CONFIG_EXT4_FS_POSIX_ACL=y | ||
4153 | CONFIG_EXT4_FS_SECURITY=y | ||
4154 | # CONFIG_EXT4_ENCRYPTION is not set | ||
4155 | # CONFIG_EXT4_DEBUG is not set | ||
4156 | CONFIG_JBD=y | ||
4157 | # CONFIG_JBD_DEBUG is not set | ||
4158 | CONFIG_JBD2=y | ||
4159 | # CONFIG_JBD2_DEBUG is not set | ||
4160 | CONFIG_FS_MBCACHE=y | ||
4161 | # CONFIG_REISERFS_FS is not set | ||
4162 | CONFIG_JFS_FS=y | ||
4163 | CONFIG_JFS_POSIX_ACL=y | ||
4164 | CONFIG_JFS_SECURITY=y | ||
4165 | # CONFIG_JFS_DEBUG is not set | ||
4166 | # CONFIG_JFS_STATISTICS is not set | ||
4167 | # CONFIG_XFS_FS is not set | ||
4168 | CONFIG_GFS2_FS=m | ||
4169 | CONFIG_GFS2_FS_LOCKING_DLM=y | ||
4170 | # CONFIG_OCFS2_FS is not set | ||
4171 | CONFIG_BTRFS_FS=m | ||
4172 | CONFIG_BTRFS_FS_POSIX_ACL=y | ||
4173 | # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set | ||
4174 | # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set | ||
4175 | # CONFIG_BTRFS_DEBUG is not set | ||
4176 | # CONFIG_BTRFS_ASSERT is not set | ||
4177 | # CONFIG_NILFS2_FS is not set | ||
4178 | # CONFIG_F2FS_FS is not set | ||
4179 | # CONFIG_FS_DAX is not set | ||
4180 | CONFIG_FS_POSIX_ACL=y | ||
4181 | CONFIG_EXPORTFS=y | ||
4182 | CONFIG_FILE_LOCKING=y | ||
4183 | CONFIG_FSNOTIFY=y | ||
4184 | CONFIG_DNOTIFY=y | ||
4185 | CONFIG_INOTIFY_USER=y | ||
4186 | CONFIG_FANOTIFY=y | ||
4187 | CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y | ||
4188 | CONFIG_QUOTA=y | ||
4189 | CONFIG_QUOTA_NETLINK_INTERFACE=y | ||
4190 | # CONFIG_PRINT_QUOTA_WARNING is not set | ||
4191 | # CONFIG_QUOTA_DEBUG is not set | ||
4192 | CONFIG_QUOTA_TREE=y | ||
4193 | # CONFIG_QFMT_V1 is not set | ||
4194 | CONFIG_QFMT_V2=y | ||
4195 | CONFIG_QUOTACTL=y | ||
4196 | CONFIG_AUTOFS4_FS=y | ||
4197 | CONFIG_FUSE_FS=m | ||
4198 | # CONFIG_CUSE is not set | ||
4199 | # CONFIG_OVERLAY_FS is not set | ||
4200 | |||
4201 | # | ||
4202 | # Caches | ||
4203 | # | ||
4204 | CONFIG_FSCACHE=m | ||
4205 | CONFIG_FSCACHE_STATS=y | ||
4206 | # CONFIG_FSCACHE_HISTOGRAM is not set | ||
4207 | # CONFIG_FSCACHE_DEBUG is not set | ||
4208 | CONFIG_FSCACHE_OBJECT_LIST=y | ||
4209 | CONFIG_CACHEFILES=m | ||
4210 | # CONFIG_CACHEFILES_DEBUG is not set | ||
4211 | # CONFIG_CACHEFILES_HISTOGRAM is not set | ||
4212 | |||
4213 | # | ||
4214 | # CD-ROM/DVD Filesystems | ||
4215 | # | ||
4216 | CONFIG_ISO9660_FS=m | ||
4217 | CONFIG_JOLIET=y | ||
4218 | CONFIG_ZISOFS=y | ||
4219 | CONFIG_UDF_FS=m | ||
4220 | CONFIG_UDF_NLS=y | ||
4221 | |||
4222 | # | ||
4223 | # DOS/FAT/NT Filesystems | ||
4224 | # | ||
4225 | CONFIG_FAT_FS=y | ||
4226 | CONFIG_MSDOS_FS=y | ||
4227 | CONFIG_VFAT_FS=y | ||
4228 | # CONFIG_VFAT_FS_NO_DUALNAMES is not set | ||
4229 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
4230 | CONFIG_FAT_DEFAULT_IOCHARSET="ascii" | ||
4231 | # CONFIG_VFAT_NO_CREATE_WITH_LONGNAMES is not set | ||
4232 | # CONFIG_NTFS_FS is not set | ||
4233 | |||
4234 | # | ||
4235 | # Pseudo filesystems | ||
4236 | # | ||
4237 | CONFIG_PROC_FS=y | ||
4238 | CONFIG_PROC_KCORE=y | ||
4239 | CONFIG_PROC_SYSCTL=y | ||
4240 | CONFIG_PROC_PAGE_MONITOR=y | ||
4241 | CONFIG_KERNFS=y | ||
4242 | CONFIG_SYSFS=y | ||
4243 | CONFIG_TMPFS=y | ||
4244 | CONFIG_TMPFS_POSIX_ACL=y | ||
4245 | CONFIG_TMPFS_XATTR=y | ||
4246 | CONFIG_HUGETLBFS=y | ||
4247 | CONFIG_HUGETLB_PAGE=y | ||
4248 | CONFIG_CONFIGFS_FS=y | ||
4249 | CONFIG_EFIVAR_FS=y | ||
4250 | CONFIG_MISC_FILESYSTEMS=y | ||
4251 | # CONFIG_ADFS_FS is not set | ||
4252 | # CONFIG_AFFS_FS is not set | ||
4253 | CONFIG_ECRYPT_FS=m | ||
4254 | # CONFIG_ECRYPT_FS_MESSAGING is not set | ||
4255 | CONFIG_HFS_FS=m | ||
4256 | CONFIG_HFSPLUS_FS=m | ||
4257 | # CONFIG_HFSPLUS_FS_POSIX_ACL is not set | ||
4258 | # CONFIG_BEFS_FS is not set | ||
4259 | # CONFIG_BFS_FS is not set | ||
4260 | # CONFIG_EFS_FS is not set | ||
4261 | # CONFIG_YAFFS_FS is not set | ||
4262 | # CONFIG_JFFS2_FS is not set | ||
4263 | CONFIG_UBIFS_FS=m | ||
4264 | # CONFIG_UBIFS_FS_ADVANCED_COMPR is not set | ||
4265 | CONFIG_UBIFS_FS_LZO=y | ||
4266 | CONFIG_UBIFS_FS_ZLIB=y | ||
4267 | # CONFIG_LOGFS is not set | ||
4268 | CONFIG_CRAMFS=m | ||
4269 | CONFIG_SQUASHFS=m | ||
4270 | CONFIG_SQUASHFS_FILE_CACHE=y | ||
4271 | # CONFIG_SQUASHFS_FILE_DIRECT is not set | ||
4272 | CONFIG_SQUASHFS_DECOMP_SINGLE=y | ||
4273 | # CONFIG_SQUASHFS_DECOMP_MULTI is not set | ||
4274 | # CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set | ||
4275 | CONFIG_SQUASHFS_XATTR=y | ||
4276 | CONFIG_SQUASHFS_ZLIB=y | ||
4277 | # CONFIG_SQUASHFS_LZ4 is not set | ||
4278 | CONFIG_SQUASHFS_LZO=y | ||
4279 | CONFIG_SQUASHFS_XZ=y | ||
4280 | # CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set | ||
4281 | # CONFIG_SQUASHFS_EMBEDDED is not set | ||
4282 | CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 | ||
4283 | # CONFIG_VXFS_FS is not set | ||
4284 | CONFIG_MINIX_FS=m | ||
4285 | # CONFIG_OMFS_FS is not set | ||
4286 | # CONFIG_HPFS_FS is not set | ||
4287 | # CONFIG_QNX4FS_FS is not set | ||
4288 | # CONFIG_QNX6FS_FS is not set | ||
4289 | CONFIG_ROMFS_FS=m | ||
4290 | CONFIG_ROMFS_BACKED_BY_BLOCK=y | ||
4291 | # CONFIG_ROMFS_BACKED_BY_MTD is not set | ||
4292 | # CONFIG_ROMFS_BACKED_BY_BOTH is not set | ||
4293 | CONFIG_ROMFS_ON_BLOCK=y | ||
4294 | CONFIG_PSTORE=y | ||
4295 | # CONFIG_PSTORE_CONSOLE is not set | ||
4296 | # CONFIG_PSTORE_PMSG is not set | ||
4297 | # CONFIG_PSTORE_FTRACE is not set | ||
4298 | CONFIG_PSTORE_RAM=m | ||
4299 | # CONFIG_SYSV_FS is not set | ||
4300 | # CONFIG_UFS_FS is not set | ||
4301 | # CONFIG_EXOFS_FS is not set | ||
4302 | # CONFIG_AUFS_FS is not set | ||
4303 | CONFIG_ORE=m | ||
4304 | CONFIG_NETWORK_FILESYSTEMS=y | ||
4305 | CONFIG_NFS_FS=y | ||
4306 | # CONFIG_NFS_V2 is not set | ||
4307 | CONFIG_NFS_DEF_FILE_IO_SIZE=4096 | ||
4308 | CONFIG_NFS_V3=y | ||
4309 | CONFIG_NFS_V3_ACL=y | ||
4310 | CONFIG_NFS_V4=y | ||
4311 | CONFIG_NFS_SWAP=y | ||
4312 | CONFIG_NFS_V4_1=y | ||
4313 | CONFIG_NFS_V4_2=y | ||
4314 | CONFIG_PNFS_FILE_LAYOUT=y | ||
4315 | CONFIG_PNFS_BLOCK=y | ||
4316 | CONFIG_PNFS_OBJLAYOUT=m | ||
4317 | CONFIG_PNFS_FLEXFILE_LAYOUT=m | ||
4318 | CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" | ||
4319 | # CONFIG_NFS_V4_1_MIGRATION is not set | ||
4320 | CONFIG_NFS_V4_SECURITY_LABEL=y | ||
4321 | # CONFIG_NFS_USE_LEGACY_DNS is not set | ||
4322 | CONFIG_NFS_USE_KERNEL_DNS=y | ||
4323 | CONFIG_NFS_DEBUG=y | ||
4324 | CONFIG_NFSD=m | ||
4325 | CONFIG_NFSD_V2_ACL=y | ||
4326 | CONFIG_NFSD_V3=y | ||
4327 | CONFIG_NFSD_V3_ACL=y | ||
4328 | CONFIG_NFSD_V4=y | ||
4329 | # CONFIG_NFSD_PNFS is not set | ||
4330 | CONFIG_NFSD_V4_SECURITY_LABEL=y | ||
4331 | # CONFIG_NFSD_FAULT_INJECTION is not set | ||
4332 | CONFIG_GRACE_PERIOD=y | ||
4333 | CONFIG_LOCKD=y | ||
4334 | CONFIG_LOCKD_V4=y | ||
4335 | CONFIG_NFS_ACL_SUPPORT=y | ||
4336 | CONFIG_NFS_COMMON=y | ||
4337 | CONFIG_SUNRPC=y | ||
4338 | CONFIG_SUNRPC_GSS=y | ||
4339 | CONFIG_SUNRPC_BACKCHANNEL=y | ||
4340 | CONFIG_SUNRPC_SWAP=y | ||
4341 | CONFIG_RPCSEC_GSS_KRB5=m | ||
4342 | CONFIG_SUNRPC_DEBUG=y | ||
4343 | CONFIG_CEPH_FS=m | ||
4344 | CONFIG_CEPH_FSCACHE=y | ||
4345 | CONFIG_CEPH_FS_POSIX_ACL=y | ||
4346 | CONFIG_CIFS=m | ||
4347 | CONFIG_CIFS_STATS=y | ||
4348 | # CONFIG_CIFS_STATS2 is not set | ||
4349 | CONFIG_CIFS_WEAK_PW_HASH=y | ||
4350 | CONFIG_CIFS_UPCALL=y | ||
4351 | CONFIG_CIFS_XATTR=y | ||
4352 | CONFIG_CIFS_POSIX=y | ||
4353 | CONFIG_CIFS_ACL=y | ||
4354 | CONFIG_CIFS_DEBUG=y | ||
4355 | # CONFIG_CIFS_DEBUG2 is not set | ||
4356 | CONFIG_CIFS_DFS_UPCALL=y | ||
4357 | CONFIG_CIFS_SMB2=y | ||
4358 | CONFIG_CIFS_FSCACHE=y | ||
4359 | # CONFIG_NCP_FS is not set | ||
4360 | # CONFIG_CODA_FS is not set | ||
4361 | # CONFIG_AFS_FS is not set | ||
4362 | CONFIG_9P_FS=y | ||
4363 | CONFIG_9P_FS_POSIX_ACL=y | ||
4364 | CONFIG_9P_FS_SECURITY=y | ||
4365 | CONFIG_NLS=y | ||
4366 | CONFIG_NLS_DEFAULT="utf8" | ||
4367 | CONFIG_NLS_CODEPAGE_437=y | ||
4368 | CONFIG_NLS_CODEPAGE_737=m | ||
4369 | CONFIG_NLS_CODEPAGE_775=m | ||
4370 | CONFIG_NLS_CODEPAGE_850=m | ||
4371 | CONFIG_NLS_CODEPAGE_852=m | ||
4372 | CONFIG_NLS_CODEPAGE_855=m | ||
4373 | CONFIG_NLS_CODEPAGE_857=m | ||
4374 | CONFIG_NLS_CODEPAGE_860=m | ||
4375 | CONFIG_NLS_CODEPAGE_861=m | ||
4376 | CONFIG_NLS_CODEPAGE_862=m | ||
4377 | CONFIG_NLS_CODEPAGE_863=m | ||
4378 | CONFIG_NLS_CODEPAGE_864=m | ||
4379 | CONFIG_NLS_CODEPAGE_865=m | ||
4380 | CONFIG_NLS_CODEPAGE_866=m | ||
4381 | CONFIG_NLS_CODEPAGE_869=m | ||
4382 | CONFIG_NLS_CODEPAGE_936=m | ||
4383 | CONFIG_NLS_CODEPAGE_950=m | ||
4384 | CONFIG_NLS_CODEPAGE_932=m | ||
4385 | CONFIG_NLS_CODEPAGE_949=m | ||
4386 | CONFIG_NLS_CODEPAGE_874=m | ||
4387 | CONFIG_NLS_ISO8859_8=m | ||
4388 | CONFIG_NLS_CODEPAGE_1250=m | ||
4389 | CONFIG_NLS_CODEPAGE_1251=m | ||
4390 | CONFIG_NLS_ASCII=y | ||
4391 | CONFIG_NLS_ISO8859_1=m | ||
4392 | CONFIG_NLS_ISO8859_2=m | ||
4393 | CONFIG_NLS_ISO8859_3=m | ||
4394 | CONFIG_NLS_ISO8859_4=m | ||
4395 | CONFIG_NLS_ISO8859_5=m | ||
4396 | CONFIG_NLS_ISO8859_6=m | ||
4397 | CONFIG_NLS_ISO8859_7=m | ||
4398 | CONFIG_NLS_ISO8859_9=m | ||
4399 | CONFIG_NLS_ISO8859_13=m | ||
4400 | CONFIG_NLS_ISO8859_14=m | ||
4401 | CONFIG_NLS_ISO8859_15=m | ||
4402 | CONFIG_NLS_KOI8_R=m | ||
4403 | CONFIG_NLS_KOI8_U=m | ||
4404 | CONFIG_NLS_MAC_ROMAN=m | ||
4405 | CONFIG_NLS_MAC_CELTIC=m | ||
4406 | CONFIG_NLS_MAC_CENTEURO=m | ||
4407 | CONFIG_NLS_MAC_CROATIAN=m | ||
4408 | CONFIG_NLS_MAC_CYRILLIC=m | ||
4409 | CONFIG_NLS_MAC_GAELIC=m | ||
4410 | CONFIG_NLS_MAC_GREEK=m | ||
4411 | CONFIG_NLS_MAC_ICELAND=m | ||
4412 | CONFIG_NLS_MAC_INUIT=m | ||
4413 | CONFIG_NLS_MAC_ROMANIAN=m | ||
4414 | CONFIG_NLS_MAC_TURKISH=m | ||
4415 | CONFIG_NLS_UTF8=m | ||
4416 | CONFIG_DLM=m | ||
4417 | CONFIG_DLM_DEBUG=y | ||
4418 | CONFIG_HAVE_KVM_IRQFD=y | ||
4419 | CONFIG_HAVE_KVM_EVENTFD=y | ||
4420 | CONFIG_KVM_MMIO=y | ||
4421 | CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y | ||
4422 | CONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL=y | ||
4423 | CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y | ||
4424 | CONFIG_KVM_COMPAT=y | ||
4425 | CONFIG_VIRTUALIZATION=y | ||
4426 | CONFIG_KVM=y | ||
4427 | CONFIG_KVM_ARM_HOST=y | ||
4428 | CONFIG_KVM_ARM_MAX_VCPUS=8 | ||
4429 | |||
4430 | # | ||
4431 | # Kernel hacking | ||
4432 | # | ||
4433 | |||
4434 | # | ||
4435 | # printk and dmesg options | ||
4436 | # | ||
4437 | CONFIG_PRINTK_TIME=y | ||
4438 | CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 | ||
4439 | CONFIG_BOOT_PRINTK_DELAY=y | ||
4440 | CONFIG_DYNAMIC_DEBUG=y | ||
4441 | |||
4442 | # | ||
4443 | # Compile-time checks and compiler options | ||
4444 | # | ||
4445 | CONFIG_DEBUG_INFO=y | ||
4446 | # CONFIG_DEBUG_INFO_REDUCED is not set | ||
4447 | # CONFIG_DEBUG_INFO_SPLIT is not set | ||
4448 | # CONFIG_DEBUG_INFO_DWARF4 is not set | ||
4449 | # CONFIG_GDB_SCRIPTS is not set | ||
4450 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||
4451 | CONFIG_ENABLE_MUST_CHECK=y | ||
4452 | CONFIG_FRAME_WARN=1024 | ||
4453 | CONFIG_STRIP_ASM_SYMS=y | ||
4454 | # CONFIG_READABLE_ASM is not set | ||
4455 | CONFIG_UNUSED_SYMBOLS=y | ||
4456 | # CONFIG_PAGE_OWNER is not set | ||
4457 | CONFIG_DEBUG_FS=y | ||
4458 | CONFIG_HEADERS_CHECK=y | ||
4459 | # CONFIG_DEBUG_SECTION_MISMATCH is not set | ||
4460 | CONFIG_ARCH_WANT_FRAME_POINTERS=y | ||
4461 | CONFIG_FRAME_POINTER=y | ||
4462 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
4463 | CONFIG_MAGIC_SYSRQ=y | ||
4464 | CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x0 | ||
4465 | CONFIG_DEBUG_KERNEL=y | ||
4466 | |||
4467 | # | ||
4468 | # Memory Debugging | ||
4469 | # | ||
4470 | # CONFIG_PAGE_EXTENSION is not set | ||
4471 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
4472 | # CONFIG_DEBUG_OBJECTS is not set | ||
4473 | # CONFIG_SLUB_DEBUG_ON is not set | ||
4474 | # CONFIG_SLUB_STATS is not set | ||
4475 | CONFIG_HAVE_DEBUG_KMEMLEAK=y | ||
4476 | # CONFIG_DEBUG_KMEMLEAK is not set | ||
4477 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
4478 | CONFIG_DEBUG_VM=y | ||
4479 | # CONFIG_DEBUG_VM_VMACACHE is not set | ||
4480 | # CONFIG_DEBUG_VM_RB is not set | ||
4481 | # CONFIG_DEBUG_MEMORY_INIT is not set | ||
4482 | # CONFIG_DEBUG_PER_CPU_MAPS is not set | ||
4483 | CONFIG_DEBUG_SHIRQ=y | ||
4484 | |||
4485 | # | ||
4486 | # Debug Lockups and Hangs | ||
4487 | # | ||
4488 | CONFIG_LOCKUP_DETECTOR=y | ||
4489 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
4490 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
4491 | # CONFIG_DETECT_HUNG_TASK is not set | ||
4492 | # CONFIG_PANIC_ON_OOPS is not set | ||
4493 | CONFIG_PANIC_ON_OOPS_VALUE=0 | ||
4494 | CONFIG_PANIC_TIMEOUT=0 | ||
4495 | CONFIG_SCHED_DEBUG=y | ||
4496 | # CONFIG_SCHEDSTATS is not set | ||
4497 | # CONFIG_SCHED_STACK_END_CHECK is not set | ||
4498 | # CONFIG_DEBUG_TIMEKEEPING is not set | ||
4499 | CONFIG_TIMER_STATS=y | ||
4500 | |||
4501 | # | ||
4502 | # Lock Debugging (spinlocks, mutexes, etc...) | ||
4503 | # | ||
4504 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
4505 | # CONFIG_DEBUG_SPINLOCK is not set | ||
4506 | # CONFIG_DEBUG_MUTEXES is not set | ||
4507 | # CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set | ||
4508 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
4509 | # CONFIG_PROVE_LOCKING is not set | ||
4510 | # CONFIG_LOCK_STAT is not set | ||
4511 | # CONFIG_DEBUG_ATOMIC_SLEEP is not set | ||
4512 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
4513 | # CONFIG_LOCK_TORTURE_TEST is not set | ||
4514 | CONFIG_STACKTRACE=y | ||
4515 | # CONFIG_DEBUG_KOBJECT is not set | ||
4516 | CONFIG_HAVE_DEBUG_BUGVERBOSE=y | ||
4517 | CONFIG_DEBUG_BUGVERBOSE=y | ||
4518 | CONFIG_DEBUG_LIST=y | ||
4519 | # CONFIG_DEBUG_PI_LIST is not set | ||
4520 | # CONFIG_DEBUG_SG is not set | ||
4521 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
4522 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
4523 | |||
4524 | # | ||
4525 | # RCU Debugging | ||
4526 | # | ||
4527 | # CONFIG_PROVE_RCU is not set | ||
4528 | CONFIG_SPARSE_RCU_POINTER=y | ||
4529 | # CONFIG_TORTURE_TEST is not set | ||
4530 | # CONFIG_RCU_TORTURE_TEST is not set | ||
4531 | CONFIG_RCU_CPU_STALL_TIMEOUT=60 | ||
4532 | # CONFIG_RCU_CPU_STALL_INFO is not set | ||
4533 | # CONFIG_RCU_TRACE is not set | ||
4534 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
4535 | # CONFIG_NOTIFIER_ERROR_INJECTION is not set | ||
4536 | # CONFIG_FAULT_INJECTION is not set | ||
4537 | CONFIG_NOP_TRACER=y | ||
4538 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
4539 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
4540 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
4541 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
4542 | CONFIG_HAVE_SYSCALL_TRACEPOINTS=y | ||
4543 | CONFIG_HAVE_C_RECORDMCOUNT=y | ||
4544 | CONFIG_TRACER_MAX_TRACE=y | ||
4545 | CONFIG_TRACE_CLOCK=y | ||
4546 | CONFIG_RING_BUFFER=y | ||
4547 | CONFIG_EVENT_TRACING=y | ||
4548 | CONFIG_CONTEXT_SWITCH_TRACER=y | ||
4549 | CONFIG_TRACING=y | ||
4550 | CONFIG_GENERIC_TRACER=y | ||
4551 | CONFIG_TRACING_SUPPORT=y | ||
4552 | CONFIG_FTRACE=y | ||
4553 | CONFIG_FUNCTION_TRACER=y | ||
4554 | # CONFIG_FUNCTION_GRAPH_TRACER is not set | ||
4555 | # CONFIG_IRQSOFF_TRACER is not set | ||
4556 | CONFIG_SCHED_TRACER=y | ||
4557 | CONFIG_FTRACE_SYSCALLS=y | ||
4558 | CONFIG_TRACER_SNAPSHOT=y | ||
4559 | # CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set | ||
4560 | CONFIG_BRANCH_PROFILE_NONE=y | ||
4561 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
4562 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
4563 | CONFIG_STACK_TRACER=y | ||
4564 | CONFIG_BLK_DEV_IO_TRACE=y | ||
4565 | # CONFIG_PROBE_EVENTS is not set | ||
4566 | CONFIG_DYNAMIC_FTRACE=y | ||
4567 | CONFIG_FUNCTION_PROFILER=y | ||
4568 | CONFIG_FTRACE_MCOUNT_RECORD=y | ||
4569 | # CONFIG_FTRACE_STARTUP_TEST is not set | ||
4570 | # CONFIG_TRACEPOINT_BENCHMARK is not set | ||
4571 | CONFIG_RING_BUFFER_BENCHMARK=m | ||
4572 | # CONFIG_RING_BUFFER_STARTUP_TEST is not set | ||
4573 | # CONFIG_TRACE_ENUM_MAP_FILE is not set | ||
4574 | |||
4575 | # | ||
4576 | # Runtime Testing | ||
4577 | # | ||
4578 | # CONFIG_LKDTM is not set | ||
4579 | # CONFIG_TEST_LIST_SORT is not set | ||
4580 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
4581 | # CONFIG_RBTREE_TEST is not set | ||
4582 | # CONFIG_INTERVAL_TREE_TEST is not set | ||
4583 | # CONFIG_PERCPU_TEST is not set | ||
4584 | CONFIG_ATOMIC64_SELFTEST=y | ||
4585 | CONFIG_ASYNC_RAID6_TEST=m | ||
4586 | # CONFIG_TEST_HEXDUMP is not set | ||
4587 | # CONFIG_TEST_STRING_HELPERS is not set | ||
4588 | CONFIG_TEST_KSTRTOX=y | ||
4589 | # CONFIG_TEST_RHASHTABLE is not set | ||
4590 | CONFIG_BUILD_DOCSRC=y | ||
4591 | # CONFIG_DMA_API_DEBUG is not set | ||
4592 | # CONFIG_TEST_LKM is not set | ||
4593 | # CONFIG_TEST_USER_COPY is not set | ||
4594 | # CONFIG_TEST_BPF is not set | ||
4595 | # CONFIG_TEST_FIRMWARE is not set | ||
4596 | # CONFIG_TEST_UDELAY is not set | ||
4597 | # CONFIG_MEMTEST is not set | ||
4598 | # CONFIG_SAMPLES is not set | ||
4599 | CONFIG_HAVE_ARCH_KGDB=y | ||
4600 | CONFIG_KGDB=y | ||
4601 | CONFIG_KGDB_SERIAL_CONSOLE=y | ||
4602 | CONFIG_KGDB_TESTS=y | ||
4603 | # CONFIG_KGDB_TESTS_ON_BOOT is not set | ||
4604 | CONFIG_KGDB_KDB=y | ||
4605 | CONFIG_KDB_DEFAULT_ENABLE=0x1 | ||
4606 | CONFIG_KDB_KEYBOARD=y | ||
4607 | CONFIG_KDB_CONTINUE_CATASTROPHIC=0 | ||
4608 | # CONFIG_ARM64_PTDUMP is not set | ||
4609 | CONFIG_STRICT_DEVMEM=y | ||
4610 | # CONFIG_PID_IN_CONTEXTIDR is not set | ||
4611 | # CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set | ||
4612 | # CONFIG_DEBUG_SET_MODULE_RONX is not set | ||
4613 | # CONFIG_DEBUG_RODATA is not set | ||
4614 | # CONFIG_CORESIGHT is not set | ||
4615 | |||
4616 | # | ||
4617 | # Security options | ||
4618 | # | ||
4619 | CONFIG_KEYS=y | ||
4620 | CONFIG_PERSISTENT_KEYRINGS=y | ||
4621 | CONFIG_BIG_KEYS=y | ||
4622 | CONFIG_TRUSTED_KEYS=m | ||
4623 | CONFIG_ENCRYPTED_KEYS=m | ||
4624 | # CONFIG_SECURITY_DMESG_RESTRICT is not set | ||
4625 | CONFIG_SECURITY=y | ||
4626 | CONFIG_SECURITYFS=y | ||
4627 | CONFIG_SECURITY_NETWORK=y | ||
4628 | CONFIG_SECURITY_NETWORK_XFRM=y | ||
4629 | # CONFIG_SECURITY_PATH is not set | ||
4630 | CONFIG_LSM_MMAP_MIN_ADDR=65536 | ||
4631 | CONFIG_SECURITY_SELINUX=y | ||
4632 | CONFIG_SECURITY_SELINUX_BOOTPARAM=y | ||
4633 | CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1 | ||
4634 | CONFIG_SECURITY_SELINUX_DISABLE=y | ||
4635 | CONFIG_SECURITY_SELINUX_DEVELOP=y | ||
4636 | CONFIG_SECURITY_SELINUX_AVC_STATS=y | ||
4637 | CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 | ||
4638 | # CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set | ||
4639 | # CONFIG_SECURITY_SMACK is not set | ||
4640 | # CONFIG_SECURITY_TOMOYO is not set | ||
4641 | # CONFIG_SECURITY_APPARMOR is not set | ||
4642 | # CONFIG_SECURITY_YAMA is not set | ||
4643 | CONFIG_INTEGRITY=y | ||
4644 | # CONFIG_INTEGRITY_SIGNATURE is not set | ||
4645 | CONFIG_INTEGRITY_AUDIT=y | ||
4646 | # CONFIG_IMA is not set | ||
4647 | # CONFIG_EVM is not set | ||
4648 | CONFIG_DEFAULT_SECURITY_SELINUX=y | ||
4649 | # CONFIG_DEFAULT_SECURITY_DAC is not set | ||
4650 | CONFIG_DEFAULT_SECURITY="selinux" | ||
4651 | CONFIG_XOR_BLOCKS=m | ||
4652 | CONFIG_ASYNC_CORE=m | ||
4653 | CONFIG_ASYNC_MEMCPY=m | ||
4654 | CONFIG_ASYNC_XOR=m | ||
4655 | CONFIG_ASYNC_PQ=m | ||
4656 | CONFIG_ASYNC_RAID6_RECOV=m | ||
4657 | CONFIG_CRYPTO=y | ||
4658 | |||
4659 | # | ||
4660 | # Crypto core or helper | ||
4661 | # | ||
4662 | CONFIG_CRYPTO_ALGAPI=y | ||
4663 | CONFIG_CRYPTO_ALGAPI2=y | ||
4664 | CONFIG_CRYPTO_AEAD=y | ||
4665 | CONFIG_CRYPTO_AEAD2=y | ||
4666 | CONFIG_CRYPTO_BLKCIPHER=y | ||
4667 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
4668 | CONFIG_CRYPTO_HASH=y | ||
4669 | CONFIG_CRYPTO_HASH2=y | ||
4670 | CONFIG_CRYPTO_RNG=y | ||
4671 | CONFIG_CRYPTO_RNG2=y | ||
4672 | CONFIG_CRYPTO_PCOMP=m | ||
4673 | CONFIG_CRYPTO_PCOMP2=y | ||
4674 | CONFIG_CRYPTO_MANAGER=y | ||
4675 | CONFIG_CRYPTO_MANAGER2=y | ||
4676 | CONFIG_CRYPTO_USER=m | ||
4677 | # CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set | ||
4678 | CONFIG_CRYPTO_GF128MUL=m | ||
4679 | CONFIG_CRYPTO_NULL=m | ||
4680 | CONFIG_CRYPTO_PCRYPT=m | ||
4681 | CONFIG_CRYPTO_WORKQUEUE=y | ||
4682 | CONFIG_CRYPTO_CRYPTD=m | ||
4683 | # CONFIG_CRYPTO_MCRYPTD is not set | ||
4684 | CONFIG_CRYPTO_AUTHENC=m | ||
4685 | # CONFIG_CRYPTO_TEST is not set | ||
4686 | CONFIG_CRYPTO_ABLK_HELPER=m | ||
4687 | |||
4688 | # | ||
4689 | # Authenticated Encryption with Associated Data | ||
4690 | # | ||
4691 | CONFIG_CRYPTO_CCM=m | ||
4692 | CONFIG_CRYPTO_GCM=m | ||
4693 | CONFIG_CRYPTO_SEQIV=y | ||
4694 | |||
4695 | # | ||
4696 | # Block modes | ||
4697 | # | ||
4698 | CONFIG_CRYPTO_CBC=y | ||
4699 | CONFIG_CRYPTO_CTR=y | ||
4700 | CONFIG_CRYPTO_CTS=m | ||
4701 | CONFIG_CRYPTO_ECB=y | ||
4702 | CONFIG_CRYPTO_LRW=m | ||
4703 | CONFIG_CRYPTO_PCBC=m | ||
4704 | CONFIG_CRYPTO_XTS=m | ||
4705 | |||
4706 | # | ||
4707 | # Hash modes | ||
4708 | # | ||
4709 | CONFIG_CRYPTO_CMAC=m | ||
4710 | CONFIG_CRYPTO_HMAC=y | ||
4711 | CONFIG_CRYPTO_XCBC=m | ||
4712 | CONFIG_CRYPTO_VMAC=m | ||
4713 | |||
4714 | # | ||
4715 | # Digest | ||
4716 | # | ||
4717 | CONFIG_CRYPTO_CRC32C=y | ||
4718 | CONFIG_CRYPTO_CRC32=m | ||
4719 | CONFIG_CRYPTO_CRCT10DIF=y | ||
4720 | CONFIG_CRYPTO_GHASH=m | ||
4721 | CONFIG_CRYPTO_MD4=m | ||
4722 | CONFIG_CRYPTO_MD5=y | ||
4723 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
4724 | CONFIG_CRYPTO_RMD128=m | ||
4725 | CONFIG_CRYPTO_RMD160=m | ||
4726 | CONFIG_CRYPTO_RMD256=m | ||
4727 | CONFIG_CRYPTO_RMD320=m | ||
4728 | CONFIG_CRYPTO_SHA1=y | ||
4729 | CONFIG_CRYPTO_SHA256=y | ||
4730 | CONFIG_CRYPTO_SHA512=m | ||
4731 | CONFIG_CRYPTO_TGR192=m | ||
4732 | CONFIG_CRYPTO_WP512=m | ||
4733 | |||
4734 | # | ||
4735 | # Ciphers | ||
4736 | # | ||
4737 | CONFIG_CRYPTO_AES=y | ||
4738 | CONFIG_CRYPTO_ANUBIS=m | ||
4739 | CONFIG_CRYPTO_ARC4=m | ||
4740 | CONFIG_CRYPTO_BLOWFISH=m | ||
4741 | CONFIG_CRYPTO_BLOWFISH_COMMON=m | ||
4742 | CONFIG_CRYPTO_CAMELLIA=m | ||
4743 | CONFIG_CRYPTO_CAST_COMMON=m | ||
4744 | CONFIG_CRYPTO_CAST5=m | ||
4745 | CONFIG_CRYPTO_CAST6=m | ||
4746 | CONFIG_CRYPTO_DES=m | ||
4747 | CONFIG_CRYPTO_FCRYPT=m | ||
4748 | CONFIG_CRYPTO_KHAZAD=m | ||
4749 | CONFIG_CRYPTO_SALSA20=m | ||
4750 | CONFIG_CRYPTO_SEED=m | ||
4751 | CONFIG_CRYPTO_SERPENT=m | ||
4752 | CONFIG_CRYPTO_TEA=m | ||
4753 | CONFIG_CRYPTO_TWOFISH=m | ||
4754 | CONFIG_CRYPTO_TWOFISH_COMMON=m | ||
4755 | |||
4756 | # | ||
4757 | # Compression | ||
4758 | # | ||
4759 | CONFIG_CRYPTO_DEFLATE=m | ||
4760 | CONFIG_CRYPTO_ZLIB=m | ||
4761 | CONFIG_CRYPTO_LZO=y | ||
4762 | CONFIG_CRYPTO_LZ4=m | ||
4763 | CONFIG_CRYPTO_LZ4HC=m | ||
4764 | |||
4765 | # | ||
4766 | # Random Number Generation | ||
4767 | # | ||
4768 | CONFIG_CRYPTO_ANSI_CPRNG=m | ||
4769 | # CONFIG_CRYPTO_DRBG_MENU is not set | ||
4770 | CONFIG_CRYPTO_USER_API=y | ||
4771 | CONFIG_CRYPTO_USER_API_HASH=y | ||
4772 | CONFIG_CRYPTO_USER_API_SKCIPHER=y | ||
4773 | # CONFIG_CRYPTO_USER_API_RNG is not set | ||
4774 | CONFIG_CRYPTO_HW=y | ||
4775 | CONFIG_CRYPTO_DEV_CCP=y | ||
4776 | CONFIG_CRYPTO_DEV_CCP_DD=m | ||
4777 | CONFIG_CRYPTO_DEV_CCP_CRYPTO=m | ||
4778 | # CONFIG_ASYMMETRIC_KEY_TYPE is not set | ||
4779 | CONFIG_ARM64_CRYPTO=y | ||
4780 | CONFIG_CRYPTO_SHA1_ARM64_CE=m | ||
4781 | CONFIG_CRYPTO_SHA2_ARM64_CE=m | ||
4782 | CONFIG_CRYPTO_GHASH_ARM64_CE=m | ||
4783 | CONFIG_CRYPTO_AES_ARM64_CE=m | ||
4784 | CONFIG_CRYPTO_AES_ARM64_CE_CCM=m | ||
4785 | CONFIG_CRYPTO_AES_ARM64_CE_BLK=m | ||
4786 | CONFIG_CRYPTO_AES_ARM64_NEON_BLK=m | ||
4787 | # CONFIG_CRYPTO_CRC32_ARM64 is not set | ||
4788 | CONFIG_BINARY_PRINTF=y | ||
4789 | |||
4790 | # | ||
4791 | # Library routines | ||
4792 | # | ||
4793 | CONFIG_RAID6_PQ=m | ||
4794 | CONFIG_BITREVERSE=y | ||
4795 | CONFIG_HAVE_ARCH_BITREVERSE=y | ||
4796 | CONFIG_RATIONAL=y | ||
4797 | CONFIG_GENERIC_STRNCPY_FROM_USER=y | ||
4798 | CONFIG_GENERIC_STRNLEN_USER=y | ||
4799 | CONFIG_GENERIC_NET_UTILS=y | ||
4800 | CONFIG_GENERIC_PCI_IOMAP=y | ||
4801 | CONFIG_GENERIC_IO=y | ||
4802 | CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y | ||
4803 | CONFIG_CRC_CCITT=m | ||
4804 | CONFIG_CRC16=y | ||
4805 | CONFIG_CRC_T10DIF=y | ||
4806 | CONFIG_CRC_ITU_T=m | ||
4807 | CONFIG_CRC32=y | ||
4808 | # CONFIG_CRC32_SELFTEST is not set | ||
4809 | CONFIG_CRC32_SLICEBY8=y | ||
4810 | # CONFIG_CRC32_SLICEBY4 is not set | ||
4811 | # CONFIG_CRC32_SARWATE is not set | ||
4812 | # CONFIG_CRC32_BIT is not set | ||
4813 | # CONFIG_CRC7 is not set | ||
4814 | CONFIG_LIBCRC32C=m | ||
4815 | CONFIG_CRC8=m | ||
4816 | CONFIG_AUDIT_GENERIC=y | ||
4817 | CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y | ||
4818 | CONFIG_AUDIT_COMPAT_GENERIC=y | ||
4819 | # CONFIG_RANDOM32_SELFTEST is not set | ||
4820 | CONFIG_ZLIB_INFLATE=y | ||
4821 | CONFIG_ZLIB_DEFLATE=y | ||
4822 | CONFIG_LZO_COMPRESS=y | ||
4823 | CONFIG_LZO_DECOMPRESS=y | ||
4824 | CONFIG_LZ4_COMPRESS=m | ||
4825 | CONFIG_LZ4HC_COMPRESS=m | ||
4826 | CONFIG_LZ4_DECOMPRESS=y | ||
4827 | CONFIG_XZ_DEC=y | ||
4828 | CONFIG_XZ_DEC_X86=y | ||
4829 | CONFIG_XZ_DEC_POWERPC=y | ||
4830 | CONFIG_XZ_DEC_IA64=y | ||
4831 | CONFIG_XZ_DEC_ARM=y | ||
4832 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
4833 | CONFIG_XZ_DEC_SPARC=y | ||
4834 | CONFIG_XZ_DEC_BCJ=y | ||
4835 | # CONFIG_XZ_DEC_TEST is not set | ||
4836 | CONFIG_DECOMPRESS_GZIP=y | ||
4837 | CONFIG_DECOMPRESS_BZIP2=y | ||
4838 | CONFIG_DECOMPRESS_LZMA=y | ||
4839 | CONFIG_DECOMPRESS_XZ=y | ||
4840 | CONFIG_DECOMPRESS_LZO=y | ||
4841 | CONFIG_DECOMPRESS_LZ4=y | ||
4842 | CONFIG_GENERIC_ALLOCATOR=y | ||
4843 | CONFIG_REED_SOLOMON=m | ||
4844 | CONFIG_REED_SOLOMON_ENC8=y | ||
4845 | CONFIG_REED_SOLOMON_DEC8=y | ||
4846 | CONFIG_TEXTSEARCH=y | ||
4847 | CONFIG_TEXTSEARCH_KMP=m | ||
4848 | CONFIG_TEXTSEARCH_BM=m | ||
4849 | CONFIG_TEXTSEARCH_FSM=m | ||
4850 | CONFIG_BTREE=y | ||
4851 | CONFIG_INTERVAL_TREE=y | ||
4852 | CONFIG_ASSOCIATIVE_ARRAY=y | ||
4853 | CONFIG_HAS_IOMEM=y | ||
4854 | CONFIG_HAS_IOPORT_MAP=y | ||
4855 | CONFIG_HAS_DMA=y | ||
4856 | CONFIG_CHECK_SIGNATURE=y | ||
4857 | CONFIG_CPU_RMAP=y | ||
4858 | CONFIG_DQL=y | ||
4859 | CONFIG_GLOB=y | ||
4860 | # CONFIG_GLOB_SELFTEST is not set | ||
4861 | CONFIG_NLATTR=y | ||
4862 | CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y | ||
4863 | CONFIG_LRU_CACHE=m | ||
4864 | CONFIG_AVERAGE=y | ||
4865 | CONFIG_CORDIC=m | ||
4866 | # CONFIG_DDR is not set | ||
4867 | CONFIG_LIBFDT=y | ||
4868 | CONFIG_OID_REGISTRY=y | ||
4869 | CONFIG_UCS2_STRING=y | ||
4870 | CONFIG_FONT_SUPPORT=y | ||
4871 | # CONFIG_FONTS is not set | ||
4872 | CONFIG_FONT_8x8=y | ||
4873 | CONFIG_FONT_8x16=y | ||
4874 | CONFIG_ARCH_HAS_SG_CHAIN=y | ||