diff options
| author | Tudor Florea <tudor.florea@enea.com> | 2015-10-08 22:42:49 +0200 |
|---|---|---|
| committer | Tudor Florea <tudor.florea@enea.com> | 2015-10-08 22:42:49 +0200 |
| commit | 635d320abfa6dc3c0e1d00e3ceae567dd0e55a5b (patch) | |
| tree | dcd42fafb9189d3be13ef3d95f9ce6f4f5cfa267 /recipes-kernel | |
| download | meta-hierofalcon-635d320abfa6dc3c0e1d00e3ceae567dd0e55a5b.tar.gz | |
initial commit for Enea Linux 5.0 arm
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
Diffstat (limited to 'recipes-kernel')
17 files changed, 11503 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 | ||
diff --git a/recipes-kernel/linux/linux-hierofalcon_3.19.bb b/recipes-kernel/linux/linux-hierofalcon_3.19.bb new file mode 100644 index 0000000..25eb602 --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon_3.19.bb | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | DESCRIPTION = "Linux kernel for AMD Hierofalcon Cortex-A57" | ||
| 2 | |||
| 3 | COMPATIBLE_MACHINE = "hierofalcon*" | ||
| 4 | |||
| 5 | require linux.inc | ||
| 6 | |||
| 7 | MACHINE_KERNEL_PR_append = "b+gitr${SRCPV}" | ||
| 8 | PR = "${MACHINE_KERNEL_PR}" | ||
| 9 | |||
| 10 | SRCREV = "e152349de59b43b2a75f2c332b44171df461d5a0" | ||
| 11 | SRC_URI = "git://git.yoctoproject.org/linux-yocto-3.19;branch="standard/qemuarm64" \ | ||
| 12 | file://01-arm64-boot-BE-kernels-from-UEFI.patch \ | ||
| 13 | file://02-319-Hierofalcon-Enable-32-bit-EL0-with-64K-and-4K-page-s.patch \ | ||
| 14 | file://03-arm64-don-t-set-READ_IMPLIES_EXEC-for-EM_AARCH64-ELF.patch \ | ||
| 15 | file://319-Hierofalcon-Update-xgbe-drivers-for-B0-board.patch \ | ||
| 16 | file://defconfig \ | ||
| 17 | " | ||
| 18 | |||
| 19 | S = "${WORKDIR}/git" | ||
| 20 | |||
| 21 | DEPENDS += "libgcc" | ||
| 22 | |||
| 23 | INSANE_SKIP_${PN} += "installed-vs-shipped" | ||
| 24 | INSANE_SKIP_kernel-dev += "debug-files" | ||
| 25 | INSANE_SKIP_kernel-dev += "arch" | ||
diff --git a/recipes-kernel/linux/linux-hierofalcon_4.1.bb b/recipes-kernel/linux/linux-hierofalcon_4.1.bb new file mode 100644 index 0000000..a9159b1 --- /dev/null +++ b/recipes-kernel/linux/linux-hierofalcon_4.1.bb | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | DESCRIPTION = "Linux kernel for AMD Hierofalcon Cortex-A57" | ||
| 2 | |||
| 3 | COMPATIBLE_MACHINE = "hierofalcon*" | ||
| 4 | |||
| 5 | require linux.inc | ||
| 6 | |||
| 7 | MACHINE_KERNEL_PR_append = "b+gitr${SRCPV}" | ||
| 8 | PR = "${MACHINE_KERNEL_PR}" | ||
| 9 | |||
| 10 | SRCREV = "4e30e64c44df9e59bd13239951bb8d2b5b276e6f" | ||
| 11 | SRC_URI = "git://git.yoctoproject.org/linux-yocto-4.1;branch="standard/qemuarm64" \ | ||
| 12 | file://02-41-Hierofalcon-Enable-32-bit-EL0-with-64K-and-4K-page-s.patch \ | ||
| 13 | file://03-arm64-don-t-set-READ_IMPLIES_EXEC-for-EM_AARCH64-ELF.patch \ | ||
| 14 | file://412-1-styx-linux-tracking.git-2a3f98071e81b66033f6272f6c632023d1dcb1d2.patch \ | ||
| 15 | file://412-2-styx-linux-tracking.git-390adff766de2d7117ec666674d114dfd5b5a911.patch \ | ||
| 16 | file://412-3-styx-linux-tracking.git-427c918b150e5f9c25ea36b3d640e511a08abb5f.patch \ | ||
| 17 | file://412-4-styx-linux-tracking.git-d1072e3d950aa6e348313a31395091003611f794.patch \ | ||
| 18 | file://412-5-styx-linux-tracking.git-2a80b31ff435cd274a61d685a4861bf0da461c90.patch \ | ||
| 19 | file://412-6-styx-linux-tracking.git-1c9b07fb461d87b41854fef3a07fff65e0d95113.patch \ | ||
| 20 | file://412-7-styx-linux-tracking.git-f9a9d954f23b967cd26338afda9a0a96afe62c25.patch \ | ||
| 21 | file://412-styx-Fix-build-issues-after-porting-PCI-patches-to-4.1.2-.patch \ | ||
| 22 | file://defconfig \ | ||
| 23 | " | ||
| 24 | |||
| 25 | S = "${WORKDIR}/git" | ||
| 26 | |||
| 27 | DEPENDS += "libgcc" | ||
diff --git a/recipes-kernel/linux/linux.inc b/recipes-kernel/linux/linux.inc new file mode 100644 index 0000000..1f28a56 --- /dev/null +++ b/recipes-kernel/linux/linux.inc | |||
| @@ -0,0 +1,111 @@ | |||
| 1 | DESCRIPTION = "Linux Kernel" | ||
| 2 | SECTION = "kernel" | ||
| 3 | LICENSE = "GPLv2" | ||
| 4 | LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7" | ||
| 5 | |||
| 6 | inherit kernel siteinfo | ||
| 7 | require recipes-kernel/linux/linux-yocto.inc | ||
| 8 | |||
| 9 | KERNEL_EXTRA_ARGS += "dtbs" | ||
| 10 | |||
| 11 | # Set the verbosity of kernel messages during runtime | ||
| 12 | # You can define CMDLINE_DEBUG in your local.conf or distro.conf to override this behaviour | ||
| 13 | CMDLINE_DEBUG ?= '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug", d)}' | ||
| 14 | CMDLINE_append = " ${CMDLINE_DEBUG}" | ||
| 15 | |||
| 16 | # Set a variable in .configure | ||
| 17 | # $1 - Configure variable to be set | ||
| 18 | # $2 - value [n/y/value] | ||
| 19 | kernel_configure_variable() { | ||
| 20 | # Remove the config | ||
| 21 | CONF_SED_SCRIPT="$CONF_SED_SCRIPT /CONFIG_$1[ =]/d;" | ||
| 22 | if test "$2" = "n" | ||
| 23 | then | ||
| 24 | echo "# CONFIG_$1 is not set" >> ${B}/.config | ||
| 25 | else | ||
| 26 | echo "CONFIG_$1=$2" >> ${B}/.config | ||
| 27 | fi | ||
| 28 | } | ||
| 29 | |||
| 30 | # Quirk for udev greater or equal 141 | ||
| 31 | UDEV_GE_141 ?= "1" | ||
| 32 | |||
| 33 | do_configure_prepend() { | ||
| 34 | # Clean .config | ||
| 35 | echo "" > ${B}/.config | ||
| 36 | CONF_SED_SCRIPT="" | ||
| 37 | |||
| 38 | # bigendian support | ||
| 39 | if [[ "${MACHINE}" =~ .*-be ]]; then | ||
| 40 | kernel_configure_variable CPU_BIG_ENDIAN y | ||
| 41 | fi | ||
| 42 | |||
| 43 | # Set cmdline | ||
| 44 | kernel_configure_variable CMDLINE "\"${CMDLINE}\"" | ||
| 45 | |||
| 46 | # Localversion | ||
| 47 | kernel_configure_variable LOCALVERSION "\"\"" | ||
| 48 | kernel_configure_variable LOCALVERSION_AUTO n | ||
| 49 | |||
| 50 | # Udev quirks | ||
| 51 | # Newer versions of udev mandate that sysfs doesn't have deprecated entries | ||
| 52 | if [ "${UDEV_GE_141}" = "1" ] ; then | ||
| 53 | kernel_configure_variable SYSFS_DEPRECATED n | ||
| 54 | kernel_configure_variable SYSFS_DEPRECATED_V2 n | ||
| 55 | kernel_configure_variable HOTPLUG y | ||
| 56 | kernel_configure_variable UEVENT_HELPER_PATH "\"\"" | ||
| 57 | kernel_configure_variable UNIX y | ||
| 58 | kernel_configure_variable SYSFS y | ||
| 59 | kernel_configure_variable PROC_FS y | ||
| 60 | kernel_configure_variable TMPFS y | ||
| 61 | kernel_configure_variable INOTIFY_USER y | ||
| 62 | kernel_configure_variable SIGNALFD y | ||
| 63 | kernel_configure_variable TMPFS_POSIX_ACL y | ||
| 64 | kernel_configure_variable BLK_DEV_BSG y | ||
| 65 | kernel_configure_variable DEVTMPFS y | ||
| 66 | kernel_configure_variable DEVTMPFS_MOUNT y | ||
| 67 | fi | ||
| 68 | |||
| 69 | # Newer inits like systemd need cgroup support | ||
| 70 | if [ "${KERNEL_ENABLE_CGROUPS}" = "1" ] ; then | ||
| 71 | kernel_configure_variable CGROUP_SCHED y | ||
| 72 | kernel_configure_variable CGROUPS y | ||
| 73 | kernel_configure_variable CGROUP_NS y | ||
| 74 | kernel_configure_variable CGROUP_FREEZER y | ||
| 75 | kernel_configure_variable CGROUP_DEVICE y | ||
| 76 | kernel_configure_variable CPUSETS y | ||
| 77 | kernel_configure_variable PROC_PID_CPUSET y | ||
| 78 | kernel_configure_variable CGROUP_CPUACCT y | ||
| 79 | kernel_configure_variable RESOURCE_COUNTERS y | ||
| 80 | fi | ||
| 81 | |||
| 82 | # Activate CONFIG_LEGACY_PTYS | ||
| 83 | kernel_configure_variable LEGACY_PTYS y | ||
| 84 | |||
| 85 | # Keep this the last line | ||
| 86 | # Remove all modified configs and add the rest to .config | ||
| 87 | sed -e "${CONF_SED_SCRIPT}" < '${WORKDIR}/defconfig' >> '${B}/.config' | ||
| 88 | |||
| 89 | yes '' | oe_runmake oldconfig | ||
| 90 | } | ||
| 91 | |||
| 92 | do_deploy_append() { | ||
| 93 | install -m 0644 ${B}/arch/arm64/boot/dts/amd/amd-overdrive.dtb ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.dtb | ||
| 94 | } | ||
| 95 | |||
| 96 | # Automatically depend on lzop-native if CONFIG_KERNEL_LZO is enabled | ||
| 97 | python () { | ||
| 98 | try: | ||
| 99 | defconfig = bb.fetch2.localpath('file://defconfig', d) | ||
| 100 | except bb.fetch2.FetchError: | ||
| 101 | return | ||
| 102 | |||
| 103 | try: | ||
| 104 | configfile = open(defconfig) | ||
| 105 | except IOError: | ||
| 106 | return | ||
| 107 | |||
| 108 | if 'CONFIG_KERNEL_LZO=y\n' in configfile.readlines(): | ||
| 109 | depends = d.getVar('DEPENDS', False) | ||
| 110 | d.setVar('DEPENDS', depends + ' lzop-native') | ||
| 111 | } | ||
