diff --git a/projects/imx6/patches/linux/4.4-xbian/linux-000-commits-d08b62d-ade5a7b.patch b/projects/imx6/patches/linux/4.4-xbian/linux-000-commits-d08b62d-ade5a7b.patch new file mode 100644 index 0000000000..2305cc7d56 --- /dev/null +++ b/projects/imx6/patches/linux/4.4-xbian/linux-000-commits-d08b62d-ade5a7b.patch @@ -0,0 +1,16315 @@ +From eb69269a27cf75c34e22728a5499ce4ca9e3bc4e Mon Sep 17 00:00:00 2001 +From: Fugang Duan +Date: Fri, 10 Oct 2014 16:25:26 +0800 +Subject: [PATCH 01/13] ENGR00299323-10 net:fec: add enet AVB Ubuntu Gstreamer + demo support + +Support Gstreamer AVB demo support. + +ring1 -> ClassA, ring2 -> ClassB, ring0 -> Best Effort + +For QoS: ring1 > ring2 > ring0 +For bandwidth reverse: + 50% bandwidth -> ClassA + 33% bandwidth -> ClassB + 17% bandwidth -> Best effort queue + +In general, ClassA run audio, ClassB run video. +Since AVB demo use big bandwidth streaming, video cost more than +33Mbps bandwidth, and with Qos limitation: ClassA >= ClassB > Best effort, +so we have to change ring2 bandwidth equal to ring1 bandwidth (50%). +After validate on FPGA, AVB demo can work fine for audio and video. + +Signed-off-by: Fugang Duan +(cherry picked from commit 93d6579a7b3d2dafa721c835df5d5f7d30ed386e) +(cherry picked from commit 2f78438d70c847f0570ece98cd7933041e36f6bd) +Signed-off-by: Matus Kral +--- + drivers/net/ethernet/freescale/fec_main.c | 35 ++++++++++++++++++++++++++++++- + 1 file changed, 34 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c +index 969922a..d9f1ab3 100644 +--- a/drivers/net/ethernet/freescale/fec_main.c ++++ b/drivers/net/ethernet/freescale/fec_main.c +@@ -18,7 +18,7 @@ + * Bug fixes and cleanup by Philippe De Muyter (phdm@macqel.be) + * Copyright (c) 2004-2006 Macq Electronique SA. + * +- * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. ++ * Copyright (C) 2010-2014 Freescale Semiconductor, Inc. + */ + + #include +@@ -70,6 +70,7 @@ static void fec_enet_itr_coal_init(struct net_device *ndev); + #define DRIVER_NAME "fec" + + #define FEC_ENET_GET_QUQUE(_x) ((_x == 0) ? 1 : ((_x == 1) ? 2 : 0)) ++static const u16 fec_enet_vlan_pri_to_queue[8] = {1, 1, 1, 1, 2, 2, 2, 2}; + + /* Pause frame feild and FIFO threshold */ + #define FEC_ENET_FCE (1 << 5) +@@ -3171,10 +3172,42 @@ static int fec_set_features(struct net_device *netdev, + return 0; + } + ++u16 fec_enet_get_raw_vlan_tci(struct sk_buff *skb) ++{ ++ struct vlan_ethhdr *vhdr; ++ unsigned short vlan_TCI = 0; ++ ++ if (skb->protocol == ntohs(ETH_P_ALL)) { ++ vhdr = (struct vlan_ethhdr *)(skb->data); ++ vlan_TCI = ntohs(vhdr->h_vlan_TCI); ++ } ++ ++ return vlan_TCI; ++} ++ ++u16 fec_enet_select_queue(struct net_device *ndev, struct sk_buff *skb, ++ void *accel_priv, select_queue_fallback_t fallback) ++{ ++ struct fec_enet_private *fep = netdev_priv(ndev); ++ const struct platform_device_id *id_entry = ++ platform_get_device_id(fep->pdev); ++ u16 vlan_tag; ++ ++ if (!(id_entry->driver_data & FEC_QUIRK_HAS_AVB)) ++ return skb_tx_hash(ndev, skb); ++ ++ vlan_tag = fec_enet_get_raw_vlan_tci(skb); ++ if (!vlan_tag) ++ return vlan_tag; ++ ++ return fec_enet_vlan_pri_to_queue[vlan_tag >> 13]; ++} ++ + static const struct net_device_ops fec_netdev_ops = { + .ndo_open = fec_enet_open, + .ndo_stop = fec_enet_close, + .ndo_start_xmit = fec_enet_start_xmit, ++ .ndo_select_queue = fec_enet_select_queue, + .ndo_set_rx_mode = set_multicast_list, + .ndo_change_mtu = eth_change_mtu, + .ndo_validate_addr = eth_validate_addr, + +From 4455ed29cc7a523a293bbe766a75aab04a7f9372 Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Sun, 3 Apr 2016 09:09:27 +0200 +Subject: [PATCH 02/13] apply Real-Time patch -rt13 + +--- + Documentation/kernel-parameters.txt | 9 + + Makefile | 3 + + arch/Kconfig | 1 + + arch/arm/kvm/arm.c | 12 +- + arch/arm/kvm/psci.c | 4 +- + arch/arm/mach-at91/Kconfig | 1 + + arch/arm/mach-at91/at91rm9200.c | 2 - + arch/arm/mach-at91/at91sam9.c | 2 - + arch/arm/mach-at91/generic.h | 13 +- + arch/arm/mach-at91/pm.c | 70 +++++- + arch/arm/mach-at91/sama5.c | 2 +- + arch/arm64/kernel/debug-monitors.c | 21 +- + arch/mips/kvm/mips.c | 8 +- + arch/powerpc/include/asm/kvm_host.h | 4 +- + arch/powerpc/kvm/book3s_hv.c | 22 +- + arch/s390/include/asm/kvm_host.h | 2 +- + arch/s390/kvm/interrupt.c | 4 +- + arch/x86/kernel/kvm.c | 37 +-- + arch/x86/kvm/lapic.c | 6 +- + block/blk-core.c | 4 +- + block/blk-mq.c | 4 +- + drivers/block/zram/zram_drv.c | 30 +-- + drivers/block/zram/zram_drv.h | 41 +++ + drivers/clk/at91/clk-generated.c | 95 ++++--- + drivers/clk/at91/clk-h32mx.c | 40 +-- + drivers/clk/at91/clk-main.c | 324 +++++++++++------------- + drivers/clk/at91/clk-master.c | 94 +++---- + drivers/clk/at91/clk-peripheral.c | 136 +++++----- + drivers/clk/at91/clk-pll.c | 150 +++++------ + drivers/clk/at91/clk-plldiv.c | 44 ++-- + drivers/clk/at91/clk-programmable.c | 96 +++---- + drivers/clk/at91/clk-slow.c | 34 +-- + drivers/clk/at91/clk-smd.c | 56 +++-- + drivers/clk/at91/clk-system.c | 96 +++---- + drivers/clk/at91/clk-usb.c | 123 ++++----- + drivers/clk/at91/clk-utmi.c | 80 ++---- + drivers/clk/at91/pmc.c | 426 +------------------------------- + drivers/clk/at91/pmc.h | 98 +------- + drivers/clocksource/tcb_clksrc.c | 33 ++- + drivers/clocksource/timer-atmel-pit.c | 8 +- + drivers/gpu/drm/i915/i915_irq.c | 2 + + drivers/gpu/drm/i915/intel_sprite.c | 11 +- + drivers/gpu/drm/radeon/radeon_display.c | 2 + + drivers/iommu/amd_iommu.c | 12 +- + drivers/tty/serial/sc16is7xx.c | 2 +- + drivers/usb/gadget/function/f_fs.c | 2 +- + drivers/usb/gadget/udc/atmel_usba_udc.c | 20 +- + drivers/usb/gadget/udc/atmel_usba_udc.h | 2 + + fs/btrfs/volumes.c | 1 - + fs/f2fs/f2fs.h | 4 +- + include/linux/blkdev.h | 2 +- + include/linux/clk/at91_pmc.h | 12 - + include/linux/completion.h | 8 +- + include/linux/ftrace.h | 12 + + include/linux/hrtimer.h | 2 +- + include/linux/kvm_host.h | 5 +- + include/linux/list_bl.h | 12 +- + include/linux/locallock.h | 6 +- + include/linux/sched.h | 2 - + include/linux/spinlock_rt.h | 25 +- + include/linux/suspend.h | 6 + + include/linux/swait.h | 173 +++++++++++++ + include/linux/wait-simple.h | 207 ---------------- + include/trace/events/hist.h | 1 + + include/trace/events/writeback.h | 121 ++++----- + kernel/cpu.c | 4 +- + kernel/events/core.c | 1 + + kernel/futex.c | 18 +- + kernel/irq/irqdesc.c | 21 +- + kernel/irq/manage.c | 2 +- + kernel/locking/lglock.c | 6 +- + kernel/locking/rt.c | 2 - + kernel/locking/rtmutex.c | 244 +++++++++++------- + kernel/power/hibernate.c | 7 + + kernel/power/suspend.c | 5 + + kernel/printk/printk.c | 116 ++++----- + kernel/rcu/rcutorture.c | 7 + + kernel/rcu/tree.c | 24 +- + kernel/rcu/tree.h | 15 +- + kernel/rcu/tree_plugin.h | 26 +- + kernel/sched/Makefile | 2 +- + kernel/sched/completion.c | 10 +- + kernel/sched/core.c | 21 +- + kernel/sched/swait.c | 143 +++++++++++ + kernel/sched/wait-simple.c | 115 --------- + kernel/sched/work-simple.c | 8 +- + kernel/softirq.c | 8 +- + kernel/stop_machine.c | 40 +-- + kernel/time/tick-broadcast-hrtimer.c | 1 + + kernel/trace/trace_irqsoff.c | 8 +- + lib/dump_stack.c | 4 +- + localversion-rt | 2 +- + mm/backing-dev.c | 4 +- + mm/zsmalloc.c | 4 +- + net/core/dev.c | 6 +- + virt/kvm/async_pf.c | 4 +- + virt/kvm/kvm_main.c | 17 +- + 97 files changed, 1679 insertions(+), 2103 deletions(-) + create mode 100644 include/linux/swait.h + delete mode 100644 include/linux/wait-simple.h + create mode 100644 kernel/sched/swait.c + delete mode 100644 kernel/sched/wait-simple.c + +diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt +index 742f69d..bcaf28e 100644 +--- a/Documentation/kernel-parameters.txt ++++ b/Documentation/kernel-parameters.txt +@@ -1629,6 +1629,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted. + ip= [IP_PNP] + See Documentation/filesystems/nfs/nfsroot.txt. + ++ irqaffinity= [SMP] Set the default irq affinity mask ++ Format: ++ ,..., ++ or ++ - ++ (must be a positive range in ascending order) ++ or a mixture ++ ,...,- ++ + irqfixup [HW] + When an interrupt is not handled search all handlers + for it. Intended to get systems with badly broken +diff --git a/Makefile b/Makefile +index 87d12b4..d95c4a4 100644 +--- a/Makefile ++++ b/Makefile +@@ -767,6 +767,9 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=strict-prototypes) + # Prohibit date/time macros, which would make the build non-deterministic + KBUILD_CFLAGS += $(call cc-option,-Werror=date-time) + ++# enforce correct pointer usage ++#KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types) ++ + # use the deterministic mode of AR if available + KBUILD_ARFLAGS := $(call ar-option,D) + +diff --git a/arch/Kconfig b/arch/Kconfig +index 81592b3..3b26d76 100644 +--- a/arch/Kconfig ++++ b/arch/Kconfig +@@ -53,6 +53,7 @@ config KPROBES + config JUMP_LABEL + bool "Optimize very unlikely/likely branches" + depends on HAVE_ARCH_JUMP_LABEL ++ depends on (!INTERRUPT_OFF_HIST && !PREEMPT_OFF_HIST && !WAKEUP_LATENCY_HIST && !MISSED_TIMER_OFFSETS_HIST) + help + This option enables a transparent branch optimization that + makes certain almost-always-true or almost-always-false branch +diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c +index 4f5c42a..bb43bc3 100644 +--- a/arch/arm/kvm/arm.c ++++ b/arch/arm/kvm/arm.c +@@ -498,16 +498,16 @@ static void kvm_arm_resume_guest(struct kvm *kvm) + struct kvm_vcpu *vcpu; + + kvm_for_each_vcpu(i, vcpu, kvm) { +- struct swait_head *wq = kvm_arch_vcpu_wq(vcpu); ++ struct swait_queue_head *wq = kvm_arch_vcpu_wq(vcpu); + + vcpu->arch.pause = false; +- swait_wake_interruptible(wq); ++ swake_up(wq); + } + } + + static void vcpu_sleep(struct kvm_vcpu *vcpu) + { +- struct swait_head *wq = kvm_arch_vcpu_wq(vcpu); ++ struct swait_queue_head *wq = kvm_arch_vcpu_wq(vcpu); + + swait_event_interruptible(*wq, ((!vcpu->arch.power_off) && + (!vcpu->arch.pause))); +@@ -568,7 +568,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) + * involves poking the GIC, which must be done in a + * non-preemptible context. + */ +- preempt_disable(); ++ migrate_disable(); + kvm_timer_flush_hwstate(vcpu); + kvm_vgic_flush_hwstate(vcpu); + +@@ -587,7 +587,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) + local_irq_enable(); + kvm_timer_sync_hwstate(vcpu); + kvm_vgic_sync_hwstate(vcpu); +- preempt_enable(); ++ migrate_enable(); + continue; + } + +@@ -641,7 +641,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) + + kvm_vgic_sync_hwstate(vcpu); + +- preempt_enable(); ++ migrate_enable(); + + ret = handle_exit(vcpu, run, ret); + } +diff --git a/arch/arm/kvm/psci.c b/arch/arm/kvm/psci.c +index 08148c4..c2b1315 100644 +--- a/arch/arm/kvm/psci.c ++++ b/arch/arm/kvm/psci.c +@@ -70,7 +70,7 @@ static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu) + { + struct kvm *kvm = source_vcpu->kvm; + struct kvm_vcpu *vcpu = NULL; +- struct swait_head *wq; ++ struct swait_queue_head *wq; + unsigned long cpu_id; + unsigned long context_id; + phys_addr_t target_pc; +@@ -119,7 +119,7 @@ static unsigned long kvm_psci_vcpu_on(struct kvm_vcpu *source_vcpu) + smp_mb(); /* Make sure the above is visible */ + + wq = kvm_arch_vcpu_wq(vcpu); +- swait_wake_interruptible(wq); ++ swake_up(wq); + + return PSCI_RET_SUCCESS; + } +diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig +index 28656c2..3f50130 100644 +--- a/arch/arm/mach-at91/Kconfig ++++ b/arch/arm/mach-at91/Kconfig +@@ -99,6 +99,7 @@ config HAVE_AT91_USB_CLK + config COMMON_CLK_AT91 + bool + select COMMON_CLK ++ select MFD_SYSCON + + config HAVE_AT91_SMD + bool +diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c +index c1a7c6c..63b4fa2 100644 +--- a/arch/arm/mach-at91/at91rm9200.c ++++ b/arch/arm/mach-at91/at91rm9200.c +@@ -12,7 +12,6 @@ + #include + + #include +-#include + + #include "generic.h" + #include "soc.h" +@@ -33,7 +32,6 @@ static void __init at91rm9200_dt_device_init(void) + + of_platform_populate(NULL, of_default_bus_match_table, NULL, soc_dev); + +- arm_pm_idle = at91rm9200_idle; + at91rm9200_pm_init(); + } + +diff --git a/arch/arm/mach-at91/at91sam9.c b/arch/arm/mach-at91/at91sam9.c +index 7eb64f7..cada2a6 100644 +--- a/arch/arm/mach-at91/at91sam9.c ++++ b/arch/arm/mach-at91/at91sam9.c +@@ -62,8 +62,6 @@ static void __init at91sam9_common_init(void) + soc_dev = soc_device_to_device(soc); + + of_platform_populate(NULL, of_default_bus_match_table, NULL, soc_dev); +- +- arm_pm_idle = at91sam9_idle; + } + + static void __init at91sam9_dt_device_init(void) +diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h +index b0fa7dc..28ca57a 100644 +--- a/arch/arm/mach-at91/generic.h ++++ b/arch/arm/mach-at91/generic.h +@@ -11,27 +11,18 @@ + #ifndef _AT91_GENERIC_H + #define _AT91_GENERIC_H + +-#include +-#include +- +- /* Map io */ +-extern void __init at91_map_io(void); +-extern void __init at91_alt_map_io(void); +- +-/* idle */ +-extern void at91rm9200_idle(void); +-extern void at91sam9_idle(void); +- + #ifdef CONFIG_PM + extern void __init at91rm9200_pm_init(void); + extern void __init at91sam9260_pm_init(void); + extern void __init at91sam9g45_pm_init(void); + extern void __init at91sam9x5_pm_init(void); ++extern void __init sama5_pm_init(void); + #else + static inline void __init at91rm9200_pm_init(void) { } + static inline void __init at91sam9260_pm_init(void) { } + static inline void __init at91sam9g45_pm_init(void) { } + static inline void __init at91sam9x5_pm_init(void) { } ++static inline void __init sama5_pm_init(void) { } + #endif + + #endif /* _AT91_GENERIC_H */ +diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c +index 23726fb3..f062701 100644 +--- a/arch/arm/mach-at91/pm.c ++++ b/arch/arm/mach-at91/pm.c +@@ -31,10 +31,13 @@ + #include + #include + #include ++#include + + #include "generic.h" + #include "pm.h" + ++static void __iomem *pmc; ++ + /* + * FIXME: this is needed to communicate between the pinctrl driver and + * the PM implementation in the machine. Possibly part of the PM +@@ -87,7 +90,7 @@ static int at91_pm_verify_clocks(void) + unsigned long scsr; + int i; + +- scsr = at91_pmc_read(AT91_PMC_SCSR); ++ scsr = readl(pmc + AT91_PMC_SCSR); + + /* USB must not be using PLLB */ + if ((scsr & at91_pm_data.uhp_udp_mask) != 0) { +@@ -101,8 +104,7 @@ static int at91_pm_verify_clocks(void) + + if ((scsr & (AT91_PMC_PCK0 << i)) == 0) + continue; +- +- css = at91_pmc_read(AT91_PMC_PCKR(i)) & AT91_PMC_CSS; ++ css = readl(pmc + AT91_PMC_PCKR(i)) & AT91_PMC_CSS; + if (css != AT91_PMC_CSS_SLOW) { + pr_err("AT91: PM - Suspend-to-RAM with PCK%d src %d\n", i, css); + return 0; +@@ -145,8 +147,8 @@ static void at91_pm_suspend(suspend_state_t state) + flush_cache_all(); + outer_disable(); + +- at91_suspend_sram_fn(at91_pmc_base, at91_ramc_base[0], +- at91_ramc_base[1], pm_data); ++ at91_suspend_sram_fn(pmc, at91_ramc_base[0], ++ at91_ramc_base[1], pm_data); + + outer_resume(); + } +@@ -353,6 +355,21 @@ static __init void at91_dt_ramc(void) + at91_pm_set_standby(standby); + } + ++void at91rm9200_idle(void) ++{ ++ /* ++ * Disable the processor clock. The processor will be automatically ++ * re-enabled by an interrupt or by a reset. ++ */ ++ writel(AT91_PMC_PCK, pmc + AT91_PMC_SCDR); ++} ++ ++void at91sam9_idle(void) ++{ ++ writel(AT91_PMC_PCK, pmc + AT91_PMC_SCDR); ++ cpu_do_idle(); ++} ++ + static void __init at91_pm_sram_init(void) + { + struct gen_pool *sram_pool; +@@ -399,13 +416,36 @@ static void __init at91_pm_sram_init(void) + &at91_pm_suspend_in_sram, at91_pm_suspend_in_sram_sz); + } + +-static void __init at91_pm_init(void) ++static const struct of_device_id atmel_pmc_ids[] __initconst = { ++ { .compatible = "atmel,at91rm9200-pmc" }, ++ { .compatible = "atmel,at91sam9260-pmc" }, ++ { .compatible = "atmel,at91sam9g45-pmc" }, ++ { .compatible = "atmel,at91sam9n12-pmc" }, ++ { .compatible = "atmel,at91sam9x5-pmc" }, ++ { .compatible = "atmel,sama5d3-pmc" }, ++ { .compatible = "atmel,sama5d2-pmc" }, ++ { /* sentinel */ }, ++}; ++ ++static void __init at91_pm_init(void (*pm_idle)(void)) + { +- at91_pm_sram_init(); ++ struct device_node *pmc_np; + + if (at91_cpuidle_device.dev.platform_data) + platform_device_register(&at91_cpuidle_device); + ++ pmc_np = of_find_matching_node(NULL, atmel_pmc_ids); ++ pmc = of_iomap(pmc_np, 0); ++ if (!pmc) { ++ pr_err("AT91: PM not supported, PMC not found\n"); ++ return; ++ } ++ ++ if (pm_idle) ++ arm_pm_idle = pm_idle; ++ ++ at91_pm_sram_init(); ++ + if (at91_suspend_sram_fn) + suspend_set_ops(&at91_pm_ops); + else +@@ -424,7 +464,7 @@ void __init at91rm9200_pm_init(void) + at91_pm_data.uhp_udp_mask = AT91RM9200_PMC_UHP | AT91RM9200_PMC_UDP; + at91_pm_data.memctrl = AT91_MEMCTRL_MC; + +- at91_pm_init(); ++ at91_pm_init(at91rm9200_idle); + } + + void __init at91sam9260_pm_init(void) +@@ -432,7 +472,7 @@ void __init at91sam9260_pm_init(void) + at91_dt_ramc(); + at91_pm_data.memctrl = AT91_MEMCTRL_SDRAMC; + at91_pm_data.uhp_udp_mask = AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP; +- return at91_pm_init(); ++ at91_pm_init(at91sam9_idle); + } + + void __init at91sam9g45_pm_init(void) +@@ -440,7 +480,7 @@ void __init at91sam9g45_pm_init(void) + at91_dt_ramc(); + at91_pm_data.uhp_udp_mask = AT91SAM926x_PMC_UHP; + at91_pm_data.memctrl = AT91_MEMCTRL_DDRSDR; +- return at91_pm_init(); ++ at91_pm_init(at91sam9_idle); + } + + void __init at91sam9x5_pm_init(void) +@@ -448,5 +488,13 @@ void __init at91sam9x5_pm_init(void) + at91_dt_ramc(); + at91_pm_data.uhp_udp_mask = AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP; + at91_pm_data.memctrl = AT91_MEMCTRL_DDRSDR; +- return at91_pm_init(); ++ at91_pm_init(at91sam9_idle); ++} ++ ++void __init sama5_pm_init(void) ++{ ++ at91_dt_ramc(); ++ at91_pm_data.uhp_udp_mask = AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP; ++ at91_pm_data.memctrl = AT91_MEMCTRL_DDRSDR; ++ at91_pm_init(NULL); + } +diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c +index d9cf679..df8fdf1 100644 +--- a/arch/arm/mach-at91/sama5.c ++++ b/arch/arm/mach-at91/sama5.c +@@ -51,7 +51,7 @@ static void __init sama5_dt_device_init(void) + soc_dev = soc_device_to_device(soc); + + of_platform_populate(NULL, of_default_bus_match_table, NULL, soc_dev); +- at91sam9x5_pm_init(); ++ sama5_pm_init(); + } + + static const char *const sama5_dt_board_compat[] __initconst = { +diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c +index 8aee3ae..c1492ba 100644 +--- a/arch/arm64/kernel/debug-monitors.c ++++ b/arch/arm64/kernel/debug-monitors.c +@@ -186,20 +186,21 @@ static void clear_regs_spsr_ss(struct pt_regs *regs) + + /* EL1 Single Step Handler hooks */ + static LIST_HEAD(step_hook); +-static DEFINE_RWLOCK(step_hook_lock); ++static DEFINE_SPINLOCK(step_hook_lock); + + void register_step_hook(struct step_hook *hook) + { +- write_lock(&step_hook_lock); +- list_add(&hook->node, &step_hook); +- write_unlock(&step_hook_lock); ++ spin_lock(&step_hook_lock); ++ list_add_rcu(&hook->node, &step_hook); ++ spin_unlock(&step_hook_lock); + } + + void unregister_step_hook(struct step_hook *hook) + { +- write_lock(&step_hook_lock); +- list_del(&hook->node); +- write_unlock(&step_hook_lock); ++ spin_lock(&step_hook_lock); ++ list_del_rcu(&hook->node); ++ spin_unlock(&step_hook_lock); ++ synchronize_rcu(); + } + + /* +@@ -213,15 +214,15 @@ static int call_step_hook(struct pt_regs *regs, unsigned int esr) + struct step_hook *hook; + int retval = DBG_HOOK_ERROR; + +- read_lock(&step_hook_lock); ++ rcu_read_lock(); + +- list_for_each_entry(hook, &step_hook, node) { ++ list_for_each_entry_rcu(hook, &step_hook, node) { + retval = hook->fn(regs, esr); + if (retval == DBG_HOOK_HANDLED) + break; + } + +- read_unlock(&step_hook_lock); ++ rcu_read_unlock(); + + return retval; + } +diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c +index 2683d04..8a11329 100644 +--- a/arch/mips/kvm/mips.c ++++ b/arch/mips/kvm/mips.c +@@ -445,8 +445,8 @@ int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu, + + dvcpu->arch.wait = 0; + +- if (waitqueue_active(&dvcpu->wq)) +- wake_up_interruptible(&dvcpu->wq); ++ if (swait_active(&dvcpu->wq)) ++ swake_up(&dvcpu->wq); + + return 0; + } +@@ -1174,8 +1174,8 @@ static void kvm_mips_comparecount_func(unsigned long data) + kvm_mips_callbacks->queue_timer_int(vcpu); + + vcpu->arch.wait = 0; +- if (waitqueue_active(&vcpu->wq)) +- wake_up_interruptible(&vcpu->wq); ++ if (swait_active(&vcpu->wq)) ++ swake_up(&vcpu->wq); + } + + /* low level hrtimer wake routine */ +diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h +index b439518..f8673ff 100644 +--- a/arch/powerpc/include/asm/kvm_host.h ++++ b/arch/powerpc/include/asm/kvm_host.h +@@ -286,7 +286,7 @@ struct kvmppc_vcore { + struct list_head runnable_threads; + struct list_head preempt_list; + spinlock_t lock; +- struct swait_head wq; ++ struct swait_queue_head wq; + spinlock_t stoltb_lock; /* protects stolen_tb and preempt_tb */ + u64 stolen_tb; + u64 preempt_tb; +@@ -626,7 +626,7 @@ struct kvm_vcpu_arch { + u8 prodded; + u32 last_inst; + +- struct swait_head *wqp; ++ struct swait_queue_head *wqp; + struct kvmppc_vcore *vcore; + int ret; + int trap; +diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c +index 32be32b..df34a64 100644 +--- a/arch/powerpc/kvm/book3s_hv.c ++++ b/arch/powerpc/kvm/book3s_hv.c +@@ -114,11 +114,11 @@ static bool kvmppc_ipi_thread(int cpu) + static void kvmppc_fast_vcpu_kick_hv(struct kvm_vcpu *vcpu) + { + int cpu; +- struct swait_head *wqp; ++ struct swait_queue_head *wqp; + + wqp = kvm_arch_vcpu_wq(vcpu); +- if (swaitqueue_active(wqp)) { +- swait_wake_interruptible(wqp); ++ if (swait_active(wqp)) { ++ swake_up(wqp); + ++vcpu->stat.halt_wakeup; + } + +@@ -707,8 +707,8 @@ int kvmppc_pseries_do_hcall(struct kvm_vcpu *vcpu) + tvcpu->arch.prodded = 1; + smp_mb(); + if (vcpu->arch.ceded) { +- if (swaitqueue_active(&vcpu->wq)) { +- swait_wake_interruptible(&vcpu->wq); ++ if (swait_active(&vcpu->wq)) { ++ swake_up(&vcpu->wq); + vcpu->stat.halt_wakeup++; + } + } +@@ -1447,7 +1447,7 @@ static struct kvmppc_vcore *kvmppc_vcore_create(struct kvm *kvm, int core) + INIT_LIST_HEAD(&vcore->runnable_threads); + spin_lock_init(&vcore->lock); + spin_lock_init(&vcore->stoltb_lock); +- init_swait_head(&vcore->wq); ++ init_swait_queue_head(&vcore->wq); + vcore->preempt_tb = TB_NIL; + vcore->lpcr = kvm->arch.lpcr; + vcore->first_vcpuid = core * threads_per_subcore; +@@ -2519,9 +2519,9 @@ static void kvmppc_vcore_blocked(struct kvmppc_vcore *vc) + { + struct kvm_vcpu *vcpu; + int do_sleep = 1; +- DEFINE_SWAITER(wait); ++ DECLARE_SWAITQUEUE(wait); + +- swait_prepare(&vc->wq, &wait, TASK_INTERRUPTIBLE); ++ prepare_to_swait(&vc->wq, &wait, TASK_INTERRUPTIBLE); + + /* + * Check one last time for pending exceptions and ceded state after +@@ -2535,7 +2535,7 @@ static void kvmppc_vcore_blocked(struct kvmppc_vcore *vc) + } + + if (!do_sleep) { +- swait_finish(&vc->wq, &wait); ++ finish_swait(&vc->wq, &wait); + return; + } + +@@ -2543,7 +2543,7 @@ static void kvmppc_vcore_blocked(struct kvmppc_vcore *vc) + trace_kvmppc_vcore_blocked(vc, 0); + spin_unlock(&vc->lock); + schedule(); +- swait_finish(&vc->wq, &wait); ++ finish_swait(&vc->wq, &wait); + spin_lock(&vc->lock); + vc->vcore_state = VCORE_INACTIVE; + trace_kvmppc_vcore_blocked(vc, 1); +@@ -2599,7 +2599,7 @@ static int kvmppc_run_vcpu(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) + kvmppc_start_thread(vcpu, vc); + trace_kvm_guest_enter(vcpu); + } else if (vc->vcore_state == VCORE_SLEEPING) { +- swait_wake(&vc->wq); ++ swake_up(&vc->wq); + } + + } +diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h +index 2a84c76..bbdc539 100644 +--- a/arch/s390/include/asm/kvm_host.h ++++ b/arch/s390/include/asm/kvm_host.h +@@ -427,7 +427,7 @@ struct kvm_s390_irq_payload { + struct kvm_s390_local_interrupt { + spinlock_t lock; + struct kvm_s390_float_interrupt *float_int; +- struct swait_head *wq; ++ struct swait_queue_head *wq; + atomic_t *cpuflags; + DECLARE_BITMAP(sigp_emerg_pending, KVM_MAX_VCPUS); + struct kvm_s390_irq_payload irq; +diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c +index 8b4516b..cc862c4 100644 +--- a/arch/s390/kvm/interrupt.c ++++ b/arch/s390/kvm/interrupt.c +@@ -868,13 +868,13 @@ int kvm_s390_handle_wait(struct kvm_vcpu *vcpu) + + void kvm_s390_vcpu_wakeup(struct kvm_vcpu *vcpu) + { +- if (swaitqueue_active(&vcpu->wq)) { ++ if (swait_active(&vcpu->wq)) { + /* + * The vcpu gave up the cpu voluntarily, mark it as a good + * yield-candidate. + */ + vcpu->preempted = true; +- swait_wake_interruptible(&vcpu->wq); ++ swake_up(&vcpu->wq); + vcpu->stat.halt_wakeup++; + } + } +diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c +index 47190bd..8079508 100644 +--- a/arch/x86/kernel/kvm.c ++++ b/arch/x86/kernel/kvm.c +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -91,14 +92,14 @@ static void kvm_io_delay(void) + + struct kvm_task_sleep_node { + struct hlist_node link; +- wait_queue_head_t wq; ++ struct swait_queue_head wq; + u32 token; + int cpu; + bool halted; + }; + + static struct kvm_task_sleep_head { +- spinlock_t lock; ++ raw_spinlock_t lock; + struct hlist_head list; + } async_pf_sleepers[KVM_TASK_SLEEP_HASHSIZE]; + +@@ -122,17 +123,17 @@ void kvm_async_pf_task_wait(u32 token) + u32 key = hash_32(token, KVM_TASK_SLEEP_HASHBITS); + struct kvm_task_sleep_head *b = &async_pf_sleepers[key]; + struct kvm_task_sleep_node n, *e; +- DEFINE_WAIT(wait); ++ DECLARE_SWAITQUEUE(wait); + + rcu_irq_enter(); + +- spin_lock(&b->lock); ++ raw_spin_lock(&b->lock); + e = _find_apf_task(b, token); + if (e) { + /* dummy entry exist -> wake up was delivered ahead of PF */ + hlist_del(&e->link); + kfree(e); +- spin_unlock(&b->lock); ++ raw_spin_unlock(&b->lock); + + rcu_irq_exit(); + return; +@@ -141,13 +142,13 @@ void kvm_async_pf_task_wait(u32 token) + n.token = token; + n.cpu = smp_processor_id(); + n.halted = is_idle_task(current) || preempt_count() > 1; +- init_waitqueue_head(&n.wq); ++ init_swait_queue_head(&n.wq); + hlist_add_head(&n.link, &b->list); +- spin_unlock(&b->lock); ++ raw_spin_unlock(&b->lock); + + for (;;) { + if (!n.halted) +- prepare_to_wait(&n.wq, &wait, TASK_UNINTERRUPTIBLE); ++ prepare_to_swait(&n.wq, &wait, TASK_UNINTERRUPTIBLE); + if (hlist_unhashed(&n.link)) + break; + +@@ -166,7 +167,7 @@ void kvm_async_pf_task_wait(u32 token) + } + } + if (!n.halted) +- finish_wait(&n.wq, &wait); ++ finish_swait(&n.wq, &wait); + + rcu_irq_exit(); + return; +@@ -178,8 +179,8 @@ static void apf_task_wake_one(struct kvm_task_sleep_node *n) + hlist_del_init(&n->link); + if (n->halted) + smp_send_reschedule(n->cpu); +- else if (waitqueue_active(&n->wq)) +- wake_up(&n->wq); ++ else if (swait_active(&n->wq)) ++ swake_up(&n->wq); + } + + static void apf_task_wake_all(void) +@@ -189,14 +190,14 @@ static void apf_task_wake_all(void) + for (i = 0; i < KVM_TASK_SLEEP_HASHSIZE; i++) { + struct hlist_node *p, *next; + struct kvm_task_sleep_head *b = &async_pf_sleepers[i]; +- spin_lock(&b->lock); ++ raw_spin_lock(&b->lock); + hlist_for_each_safe(p, next, &b->list) { + struct kvm_task_sleep_node *n = + hlist_entry(p, typeof(*n), link); + if (n->cpu == smp_processor_id()) + apf_task_wake_one(n); + } +- spin_unlock(&b->lock); ++ raw_spin_unlock(&b->lock); + } + } + +@@ -212,7 +213,7 @@ void kvm_async_pf_task_wake(u32 token) + } + + again: +- spin_lock(&b->lock); ++ raw_spin_lock(&b->lock); + n = _find_apf_task(b, token); + if (!n) { + /* +@@ -225,17 +226,17 @@ void kvm_async_pf_task_wake(u32 token) + * Allocation failed! Busy wait while other cpu + * handles async PF. + */ +- spin_unlock(&b->lock); ++ raw_spin_unlock(&b->lock); + cpu_relax(); + goto again; + } + n->token = token; + n->cpu = smp_processor_id(); +- init_waitqueue_head(&n->wq); ++ init_swait_queue_head(&n->wq); + hlist_add_head(&n->link, &b->list); + } else + apf_task_wake_one(n); +- spin_unlock(&b->lock); ++ raw_spin_unlock(&b->lock); + return; + } + EXPORT_SYMBOL_GPL(kvm_async_pf_task_wake); +@@ -486,7 +487,7 @@ void __init kvm_guest_init(void) + paravirt_ops_setup(); + register_reboot_notifier(&kvm_pv_reboot_nb); + for (i = 0; i < KVM_TASK_SLEEP_HASHSIZE; i++) +- spin_lock_init(&async_pf_sleepers[i].lock); ++ raw_spin_lock_init(&async_pf_sleepers[i].lock); + if (kvm_para_has_feature(KVM_FEATURE_ASYNC_PF)) + x86_init.irqs.trap_init = kvm_apf_trap_init; + +diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c +index 906a1ec..20d9e9f 100644 +--- a/arch/x86/kvm/lapic.c ++++ b/arch/x86/kvm/lapic.c +@@ -1195,7 +1195,7 @@ static void apic_update_lvtt(struct kvm_lapic *apic) + static void apic_timer_expired(struct kvm_lapic *apic) + { + struct kvm_vcpu *vcpu = apic->vcpu; +- struct swait_head *q = &vcpu->wq; ++ struct swait_queue_head *q = &vcpu->wq; + struct kvm_timer *ktimer = &apic->lapic_timer; + + if (atomic_read(&apic->lapic_timer.pending)) +@@ -1204,8 +1204,8 @@ static void apic_timer_expired(struct kvm_lapic *apic) + atomic_inc(&apic->lapic_timer.pending); + kvm_set_pending_timer(vcpu); + +- if (swaitqueue_active(q)) +- swait_wake_interruptible(q); ++ if (swait_active(q)) ++ swake_up(q); + + if (apic_lvtt_tscdeadline(apic)) + ktimer->expired_tscdeadline = ktimer->tscdeadline; +diff --git a/block/blk-core.c b/block/blk-core.c +index 4c8cefd..2f7afb9 100644 +--- a/block/blk-core.c ++++ b/block/blk-core.c +@@ -680,7 +680,7 @@ static void blk_queue_usage_counter_release(struct percpu_ref *ref) + struct request_queue *q = + container_of(ref, struct request_queue, q_usage_counter); + +- swait_wake_all(&q->mq_freeze_wq); ++ swake_up_all(&q->mq_freeze_wq); + } + + struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id) +@@ -742,7 +742,7 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id) + q->bypass_depth = 1; + __set_bit(QUEUE_FLAG_BYPASS, &q->queue_flags); + +- init_swait_head(&q->mq_freeze_wq); ++ init_swait_queue_head(&q->mq_freeze_wq); + + /* + * Init percpu_ref in atomic mode so that it's faster to shutdown. +diff --git a/block/blk-mq.c b/block/blk-mq.c +index 3c70813..7cdf19e 100644 +--- a/block/blk-mq.c ++++ b/block/blk-mq.c +@@ -130,7 +130,7 @@ void blk_mq_unfreeze_queue(struct request_queue *q) + WARN_ON_ONCE(freeze_depth < 0); + if (!freeze_depth) { + percpu_ref_reinit(&q->q_usage_counter); +- swait_wake_all(&q->mq_freeze_wq); ++ swake_up_all(&q->mq_freeze_wq); + } + } + EXPORT_SYMBOL_GPL(blk_mq_unfreeze_queue); +@@ -149,7 +149,7 @@ void blk_mq_wake_waiters(struct request_queue *q) + * dying, we need to ensure that processes currently waiting on + * the queue are notified as well. + */ +- swait_wake_all(&q->mq_freeze_wq); ++ swake_up_all(&q->mq_freeze_wq); + } + + bool blk_mq_can_queue(struct blk_mq_hw_ctx *hctx) +diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c +index 370c2f7..65e0b37 100644 +--- a/drivers/block/zram/zram_drv.c ++++ b/drivers/block/zram/zram_drv.c +@@ -520,6 +520,8 @@ static struct zram_meta *zram_meta_alloc(char *pool_name, u64 disksize) + goto out_error; + } + ++ zram_meta_init_table_locks(meta, disksize); ++ + return meta; + + out_error: +@@ -568,12 +570,12 @@ static int zram_decompress_page(struct zram *zram, char *mem, u32 index) + unsigned long handle; + size_t size; + +- bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_lock_table(&meta->table[index]); + handle = meta->table[index].handle; + size = zram_get_obj_size(meta, index); + + if (!handle || zram_test_flag(meta, index, ZRAM_ZERO)) { +- bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_unlock_table(&meta->table[index]); + clear_page(mem); + return 0; + } +@@ -584,7 +586,7 @@ static int zram_decompress_page(struct zram *zram, char *mem, u32 index) + else + ret = zcomp_decompress(zram->comp, cmem, size, mem); + zs_unmap_object(meta->mem_pool, handle); +- bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_unlock_table(&meta->table[index]); + + /* Should NEVER happen. Return bio error if it does. */ + if (unlikely(ret)) { +@@ -604,14 +606,14 @@ static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec, + struct zram_meta *meta = zram->meta; + page = bvec->bv_page; + +- bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_lock_table(&meta->table[index]); + if (unlikely(!meta->table[index].handle) || + zram_test_flag(meta, index, ZRAM_ZERO)) { +- bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_unlock_table(&meta->table[index]); + handle_zero_page(bvec); + return 0; + } +- bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_unlock_table(&meta->table[index]); + + if (is_partial_io(bvec)) + /* Use a temporary buffer to decompress the page */ +@@ -689,10 +691,10 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index, + if (user_mem) + kunmap_atomic(user_mem); + /* Free memory associated with this sector now. */ +- bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_lock_table(&meta->table[index]); + zram_free_page(zram, index); + zram_set_flag(meta, index, ZRAM_ZERO); +- bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_unlock_table(&meta->table[index]); + + atomic64_inc(&zram->stats.zero_pages); + ret = 0; +@@ -752,12 +754,12 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index, + * Free memory associated with this sector + * before overwriting unused sectors. + */ +- bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_lock_table(&meta->table[index]); + zram_free_page(zram, index); + + meta->table[index].handle = handle; + zram_set_obj_size(meta, index, clen); +- bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_unlock_table(&meta->table[index]); + + /* Update stats */ + atomic64_add(clen, &zram->stats.compr_data_size); +@@ -800,9 +802,9 @@ static void zram_bio_discard(struct zram *zram, u32 index, + } + + while (n >= PAGE_SIZE) { +- bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_lock_table(&meta->table[index]); + zram_free_page(zram, index); +- bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_unlock_table(&meta->table[index]); + atomic64_inc(&zram->stats.notify_free); + index++; + n -= PAGE_SIZE; +@@ -928,9 +930,9 @@ static void zram_slot_free_notify(struct block_device *bdev, + zram = bdev->bd_disk->private_data; + meta = zram->meta; + +- bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_lock_table(&meta->table[index]); + zram_free_page(zram, index); +- bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value); ++ zram_unlock_table(&meta->table[index]); + atomic64_inc(&zram->stats.notify_free); + } + +diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h +index 8e92339..1e4a3c6 100644 +--- a/drivers/block/zram/zram_drv.h ++++ b/drivers/block/zram/zram_drv.h +@@ -72,6 +72,9 @@ enum zram_pageflags { + struct zram_table_entry { + unsigned long handle; + unsigned long value; ++#ifdef CONFIG_PREEMPT_RT_BASE ++ spinlock_t lock; ++#endif + }; + + struct zram_stats { +@@ -119,4 +122,42 @@ struct zram { + */ + bool claim; /* Protected by bdev->bd_mutex */ + }; ++ ++#ifndef CONFIG_PREEMPT_RT_BASE ++static inline void zram_lock_table(struct zram_table_entry *table) ++{ ++ bit_spin_lock(ZRAM_ACCESS, &table->value); ++} ++ ++static inline void zram_unlock_table(struct zram_table_entry *table) ++{ ++ bit_spin_unlock(ZRAM_ACCESS, &table->value); ++} ++ ++static inline void zram_meta_init_locks(struct zram_meta *meta, u64 disksize) { } ++#else /* CONFIG_PREEMPT_RT_BASE */ ++static inline void zram_lock_table(struct zram_table_entry *table) ++{ ++ spin_lock(&table->lock); ++ __set_bit(ZRAM_ACCESS, &table->value); ++} ++ ++static inline void zram_unlock_table(struct zram_table_entry *table) ++{ ++ __clear_bit(ZRAM_ACCESS, &table->value); ++ spin_unlock(&table->lock); ++} ++ ++static inline void zram_meta_init_table_locks(struct zram_meta *meta, u64 disksize) ++{ ++ size_t num_pages = disksize >> PAGE_SHIFT; ++ size_t index; ++ ++ for (index = 0; index < num_pages; index++) { ++ spinlock_t *lock = &meta->table[index].lock; ++ spin_lock_init(lock); ++ } ++} ++#endif /* CONFIG_PREEMPT_RT_BASE */ ++ + #endif +diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c +index abc8094..4ad3298 100644 +--- a/drivers/clk/at91/clk-generated.c ++++ b/drivers/clk/at91/clk-generated.c +@@ -15,8 +15,8 @@ + #include + #include + #include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -28,8 +28,9 @@ + + struct clk_generated { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + struct clk_range range; ++ spinlock_t *lock; + u32 id; + u32 gckdiv; + u8 parent_id; +@@ -41,49 +42,52 @@ struct clk_generated { + static int clk_generated_enable(struct clk_hw *hw) + { + struct clk_generated *gck = to_clk_generated(hw); +- struct at91_pmc *pmc = gck->pmc; +- u32 tmp; ++ unsigned long flags; + + pr_debug("GCLK: %s, gckdiv = %d, parent id = %d\n", + __func__, gck->gckdiv, gck->parent_id); + +- pmc_lock(pmc); +- pmc_write(pmc, AT91_PMC_PCR, (gck->id & AT91_PMC_PCR_PID_MASK)); +- tmp = pmc_read(pmc, AT91_PMC_PCR) & +- ~(AT91_PMC_PCR_GCKDIV_MASK | AT91_PMC_PCR_GCKCSS_MASK); +- pmc_write(pmc, AT91_PMC_PCR, tmp | AT91_PMC_PCR_GCKCSS(gck->parent_id) +- | AT91_PMC_PCR_CMD +- | AT91_PMC_PCR_GCKDIV(gck->gckdiv) +- | AT91_PMC_PCR_GCKEN); +- pmc_unlock(pmc); ++ spin_lock_irqsave(gck->lock, flags); ++ regmap_write(gck->regmap, AT91_PMC_PCR, ++ (gck->id & AT91_PMC_PCR_PID_MASK)); ++ regmap_update_bits(gck->regmap, AT91_PMC_PCR, ++ AT91_PMC_PCR_GCKDIV_MASK | AT91_PMC_PCR_GCKCSS_MASK | ++ AT91_PMC_PCR_CMD | AT91_PMC_PCR_GCKEN, ++ AT91_PMC_PCR_GCKCSS(gck->parent_id) | ++ AT91_PMC_PCR_CMD | ++ AT91_PMC_PCR_GCKDIV(gck->gckdiv) | ++ AT91_PMC_PCR_GCKEN); ++ spin_unlock_irqrestore(gck->lock, flags); + return 0; + } + + static void clk_generated_disable(struct clk_hw *hw) + { + struct clk_generated *gck = to_clk_generated(hw); +- struct at91_pmc *pmc = gck->pmc; +- u32 tmp; +- +- pmc_lock(pmc); +- pmc_write(pmc, AT91_PMC_PCR, (gck->id & AT91_PMC_PCR_PID_MASK)); +- tmp = pmc_read(pmc, AT91_PMC_PCR) & ~AT91_PMC_PCR_GCKEN; +- pmc_write(pmc, AT91_PMC_PCR, tmp | AT91_PMC_PCR_CMD); +- pmc_unlock(pmc); ++ unsigned long flags; ++ ++ spin_lock_irqsave(gck->lock, flags); ++ regmap_write(gck->regmap, AT91_PMC_PCR, ++ (gck->id & AT91_PMC_PCR_PID_MASK)); ++ regmap_update_bits(gck->regmap, AT91_PMC_PCR, ++ AT91_PMC_PCR_CMD | AT91_PMC_PCR_GCKEN, ++ AT91_PMC_PCR_CMD); ++ spin_unlock_irqrestore(gck->lock, flags); + } + + static int clk_generated_is_enabled(struct clk_hw *hw) + { + struct clk_generated *gck = to_clk_generated(hw); +- struct at91_pmc *pmc = gck->pmc; +- int ret; ++ unsigned long flags; ++ unsigned int status; + +- pmc_lock(pmc); +- pmc_write(pmc, AT91_PMC_PCR, (gck->id & AT91_PMC_PCR_PID_MASK)); +- ret = !!(pmc_read(pmc, AT91_PMC_PCR) & AT91_PMC_PCR_GCKEN); +- pmc_unlock(pmc); ++ spin_lock_irqsave(gck->lock, flags); ++ regmap_write(gck->regmap, AT91_PMC_PCR, ++ (gck->id & AT91_PMC_PCR_PID_MASK)); ++ regmap_read(gck->regmap, AT91_PMC_PCR, &status); ++ spin_unlock_irqrestore(gck->lock, flags); + +- return ret; ++ return status & AT91_PMC_PCR_GCKEN ? 1 : 0; + } + + static unsigned long +@@ -214,13 +218,14 @@ static const struct clk_ops generated_ops = { + */ + static void clk_generated_startup(struct clk_generated *gck) + { +- struct at91_pmc *pmc = gck->pmc; + u32 tmp; ++ unsigned long flags; + +- pmc_lock(pmc); +- pmc_write(pmc, AT91_PMC_PCR, (gck->id & AT91_PMC_PCR_PID_MASK)); +- tmp = pmc_read(pmc, AT91_PMC_PCR); +- pmc_unlock(pmc); ++ spin_lock_irqsave(gck->lock, flags); ++ regmap_write(gck->regmap, AT91_PMC_PCR, ++ (gck->id & AT91_PMC_PCR_PID_MASK)); ++ regmap_read(gck->regmap, AT91_PMC_PCR, &tmp); ++ spin_unlock_irqrestore(gck->lock, flags); + + gck->parent_id = (tmp & AT91_PMC_PCR_GCKCSS_MASK) + >> AT91_PMC_PCR_GCKCSS_OFFSET; +@@ -229,8 +234,8 @@ static void clk_generated_startup(struct clk_generated *gck) + } + + static struct clk * __init +-at91_clk_register_generated(struct at91_pmc *pmc, const char *name, +- const char **parent_names, u8 num_parents, ++at91_clk_register_generated(struct regmap *regmap, spinlock_t *lock, const char ++ *name, const char **parent_names, u8 num_parents, + u8 id, const struct clk_range *range) + { + struct clk_generated *gck; +@@ -249,7 +254,8 @@ at91_clk_register_generated(struct at91_pmc *pmc, const char *name, + + gck->id = id; + gck->hw.init = &init; +- gck->pmc = pmc; ++ gck->regmap = regmap; ++ gck->lock = lock; + gck->range = *range; + + clk = clk_register(NULL, &gck->hw); +@@ -261,8 +267,7 @@ at91_clk_register_generated(struct at91_pmc *pmc, const char *name, + return clk; + } + +-void __init of_sama5d2_clk_generated_setup(struct device_node *np, +- struct at91_pmc *pmc) ++void __init of_sama5d2_clk_generated_setup(struct device_node *np) + { + int num; + u32 id; +@@ -272,6 +277,7 @@ void __init of_sama5d2_clk_generated_setup(struct device_node *np, + const char *parent_names[GENERATED_SOURCE_MAX]; + struct device_node *gcknp; + struct clk_range range = CLK_RANGE(0, 0); ++ struct regmap *regmap; + + num_parents = of_clk_get_parent_count(np); + if (num_parents <= 0 || num_parents > GENERATED_SOURCE_MAX) +@@ -283,6 +289,10 @@ void __init of_sama5d2_clk_generated_setup(struct device_node *np, + if (!num || num > PERIPHERAL_MAX) + return; + ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ + for_each_child_of_node(np, gcknp) { + if (of_property_read_u32(gcknp, "reg", &id)) + continue; +@@ -296,11 +306,14 @@ void __init of_sama5d2_clk_generated_setup(struct device_node *np, + of_at91_get_clk_range(gcknp, "atmel,clk-output-range", + &range); + +- clk = at91_clk_register_generated(pmc, name, parent_names, +- num_parents, id, &range); ++ clk = at91_clk_register_generated(regmap, &pmc_pcr_lock, name, ++ parent_names, num_parents, ++ id, &range); + if (IS_ERR(clk)) + continue; + + of_clk_add_provider(gcknp, of_clk_src_simple_get, clk); + } + } ++CLK_OF_DECLARE(of_sama5d2_clk_generated_setup, "atmel,sama5d2-clk-generated", ++ of_sama5d2_clk_generated_setup); +diff --git a/drivers/clk/at91/clk-h32mx.c b/drivers/clk/at91/clk-h32mx.c +index 61566bc..819f584 100644 +--- a/drivers/clk/at91/clk-h32mx.c ++++ b/drivers/clk/at91/clk-h32mx.c +@@ -15,15 +15,9 @@ + #include + #include + #include +-#include + #include +-#include +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -31,7 +25,7 @@ + + struct clk_sama5d4_h32mx { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + }; + + #define to_clk_sama5d4_h32mx(hw) container_of(hw, struct clk_sama5d4_h32mx, hw) +@@ -40,8 +34,10 @@ static unsigned long clk_sama5d4_h32mx_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) + { + struct clk_sama5d4_h32mx *h32mxclk = to_clk_sama5d4_h32mx(hw); ++ unsigned int mckr; + +- if (pmc_read(h32mxclk->pmc, AT91_PMC_MCKR) & AT91_PMC_H32MXDIV) ++ regmap_read(h32mxclk->regmap, AT91_PMC_MCKR, &mckr); ++ if (mckr & AT91_PMC_H32MXDIV) + return parent_rate / 2; + + if (parent_rate > H32MX_MAX_FREQ) +@@ -70,18 +66,16 @@ static int clk_sama5d4_h32mx_set_rate(struct clk_hw *hw, unsigned long rate, + unsigned long parent_rate) + { + struct clk_sama5d4_h32mx *h32mxclk = to_clk_sama5d4_h32mx(hw); +- struct at91_pmc *pmc = h32mxclk->pmc; +- u32 tmp; ++ u32 mckr = 0; + + if (parent_rate != rate && (parent_rate / 2) != rate) + return -EINVAL; + +- pmc_lock(pmc); +- tmp = pmc_read(pmc, AT91_PMC_MCKR) & ~AT91_PMC_H32MXDIV; + if ((parent_rate / 2) == rate) +- tmp |= AT91_PMC_H32MXDIV; +- pmc_write(pmc, AT91_PMC_MCKR, tmp); +- pmc_unlock(pmc); ++ mckr = AT91_PMC_H32MXDIV; ++ ++ regmap_update_bits(h32mxclk->regmap, AT91_PMC_MCKR, ++ AT91_PMC_H32MXDIV, mckr); + + return 0; + } +@@ -92,14 +86,18 @@ static const struct clk_ops h32mx_ops = { + .set_rate = clk_sama5d4_h32mx_set_rate, + }; + +-void __init of_sama5d4_clk_h32mx_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_sama5d4_clk_h32mx_setup(struct device_node *np) + { + struct clk_sama5d4_h32mx *h32mxclk; + struct clk_init_data init; + const char *parent_name; ++ struct regmap *regmap; + struct clk *clk; + ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ + h32mxclk = kzalloc(sizeof(*h32mxclk), GFP_KERNEL); + if (!h32mxclk) + return; +@@ -113,7 +111,7 @@ void __init of_sama5d4_clk_h32mx_setup(struct device_node *np, + init.flags = CLK_SET_RATE_GATE; + + h32mxclk->hw.init = &init; +- h32mxclk->pmc = pmc; ++ h32mxclk->regmap = regmap; + + clk = clk_register(NULL, &h32mxclk->hw); + if (!clk) { +@@ -123,3 +121,5 @@ void __init of_sama5d4_clk_h32mx_setup(struct device_node *np, + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(of_sama5d4_clk_h32mx_setup, "atmel,sama5d4-clk-h32mx", ++ of_sama5d4_clk_h32mx_setup); +diff --git a/drivers/clk/at91/clk-main.c b/drivers/clk/at91/clk-main.c +index fd7247d..4bfc94d 100644 +--- a/drivers/clk/at91/clk-main.c ++++ b/drivers/clk/at91/clk-main.c +@@ -13,13 +13,8 @@ + #include + #include + #include +-#include +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -34,18 +29,14 @@ + + struct clk_main_osc { + struct clk_hw hw; +- struct at91_pmc *pmc; +- unsigned int irq; +- wait_queue_head_t wait; ++ struct regmap *regmap; + }; + + #define to_clk_main_osc(hw) container_of(hw, struct clk_main_osc, hw) + + struct clk_main_rc_osc { + struct clk_hw hw; +- struct at91_pmc *pmc; +- unsigned int irq; +- wait_queue_head_t wait; ++ struct regmap *regmap; + unsigned long frequency; + unsigned long accuracy; + }; +@@ -54,51 +45,47 @@ struct clk_main_rc_osc { + + struct clk_rm9200_main { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + }; + + #define to_clk_rm9200_main(hw) container_of(hw, struct clk_rm9200_main, hw) + + struct clk_sam9x5_main { + struct clk_hw hw; +- struct at91_pmc *pmc; +- unsigned int irq; +- wait_queue_head_t wait; ++ struct regmap *regmap; + u8 parent; + }; + + #define to_clk_sam9x5_main(hw) container_of(hw, struct clk_sam9x5_main, hw) + +-static irqreturn_t clk_main_osc_irq_handler(int irq, void *dev_id) ++static inline bool clk_main_osc_ready(struct regmap *regmap) + { +- struct clk_main_osc *osc = dev_id; ++ unsigned int status; + +- wake_up(&osc->wait); +- disable_irq_nosync(osc->irq); ++ regmap_read(regmap, AT91_PMC_SR, &status); + +- return IRQ_HANDLED; ++ return status & AT91_PMC_MOSCS; + } + + static int clk_main_osc_prepare(struct clk_hw *hw) + { + struct clk_main_osc *osc = to_clk_main_osc(hw); +- struct at91_pmc *pmc = osc->pmc; ++ struct regmap *regmap = osc->regmap; + u32 tmp; + +- tmp = pmc_read(pmc, AT91_CKGR_MOR) & ~MOR_KEY_MASK; ++ regmap_read(regmap, AT91_CKGR_MOR, &tmp); ++ tmp &= ~MOR_KEY_MASK; ++ + if (tmp & AT91_PMC_OSCBYPASS) + return 0; + + if (!(tmp & AT91_PMC_MOSCEN)) { + tmp |= AT91_PMC_MOSCEN | AT91_PMC_KEY; +- pmc_write(pmc, AT91_CKGR_MOR, tmp); ++ regmap_write(regmap, AT91_CKGR_MOR, tmp); + } + +- while (!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCS)) { +- enable_irq(osc->irq); +- wait_event(osc->wait, +- pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCS); +- } ++ while (!clk_main_osc_ready(regmap)) ++ cpu_relax(); + + return 0; + } +@@ -106,9 +93,10 @@ static int clk_main_osc_prepare(struct clk_hw *hw) + static void clk_main_osc_unprepare(struct clk_hw *hw) + { + struct clk_main_osc *osc = to_clk_main_osc(hw); +- struct at91_pmc *pmc = osc->pmc; +- u32 tmp = pmc_read(pmc, AT91_CKGR_MOR); ++ struct regmap *regmap = osc->regmap; ++ u32 tmp; + ++ regmap_read(regmap, AT91_CKGR_MOR, &tmp); + if (tmp & AT91_PMC_OSCBYPASS) + return; + +@@ -116,20 +104,22 @@ static void clk_main_osc_unprepare(struct clk_hw *hw) + return; + + tmp &= ~(AT91_PMC_KEY | AT91_PMC_MOSCEN); +- pmc_write(pmc, AT91_CKGR_MOR, tmp | AT91_PMC_KEY); ++ regmap_write(regmap, AT91_CKGR_MOR, tmp | AT91_PMC_KEY); + } + + static int clk_main_osc_is_prepared(struct clk_hw *hw) + { + struct clk_main_osc *osc = to_clk_main_osc(hw); +- struct at91_pmc *pmc = osc->pmc; +- u32 tmp = pmc_read(pmc, AT91_CKGR_MOR); ++ struct regmap *regmap = osc->regmap; ++ u32 tmp, status; + ++ regmap_read(regmap, AT91_CKGR_MOR, &tmp); + if (tmp & AT91_PMC_OSCBYPASS) + return 1; + +- return !!((pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCS) && +- (pmc_read(pmc, AT91_CKGR_MOR) & AT91_PMC_MOSCEN)); ++ regmap_read(regmap, AT91_PMC_SR, &status); ++ ++ return (status & AT91_PMC_MOSCS) && (tmp & AT91_PMC_MOSCEN); + } + + static const struct clk_ops main_osc_ops = { +@@ -139,18 +129,16 @@ static const struct clk_ops main_osc_ops = { + }; + + static struct clk * __init +-at91_clk_register_main_osc(struct at91_pmc *pmc, +- unsigned int irq, ++at91_clk_register_main_osc(struct regmap *regmap, + const char *name, + const char *parent_name, + bool bypass) + { +- int ret; + struct clk_main_osc *osc; + struct clk *clk = NULL; + struct clk_init_data init; + +- if (!pmc || !irq || !name || !parent_name) ++ if (!name || !parent_name) + return ERR_PTR(-EINVAL); + + osc = kzalloc(sizeof(*osc), GFP_KERNEL); +@@ -164,85 +152,70 @@ at91_clk_register_main_osc(struct at91_pmc *pmc, + init.flags = CLK_IGNORE_UNUSED; + + osc->hw.init = &init; +- osc->pmc = pmc; +- osc->irq = irq; +- +- init_waitqueue_head(&osc->wait); +- irq_set_status_flags(osc->irq, IRQ_NOAUTOEN); +- ret = request_irq(osc->irq, clk_main_osc_irq_handler, +- IRQF_TRIGGER_HIGH, name, osc); +- if (ret) { +- kfree(osc); +- return ERR_PTR(ret); +- } ++ osc->regmap = regmap; + + if (bypass) +- pmc_write(pmc, AT91_CKGR_MOR, +- (pmc_read(pmc, AT91_CKGR_MOR) & +- ~(MOR_KEY_MASK | AT91_PMC_MOSCEN)) | +- AT91_PMC_OSCBYPASS | AT91_PMC_KEY); ++ regmap_update_bits(regmap, ++ AT91_CKGR_MOR, MOR_KEY_MASK | ++ AT91_PMC_MOSCEN, ++ AT91_PMC_OSCBYPASS | AT91_PMC_KEY); + + clk = clk_register(NULL, &osc->hw); +- if (IS_ERR(clk)) { +- free_irq(irq, osc); ++ if (IS_ERR(clk)) + kfree(osc); +- } + + return clk; + } + +-void __init of_at91rm9200_clk_main_osc_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91rm9200_clk_main_osc_setup(struct device_node *np) + { + struct clk *clk; +- unsigned int irq; + const char *name = np->name; + const char *parent_name; ++ struct regmap *regmap; + bool bypass; + + of_property_read_string(np, "clock-output-names", &name); + bypass = of_property_read_bool(np, "atmel,osc-bypass"); + parent_name = of_clk_get_parent_name(np, 0); + +- irq = irq_of_parse_and_map(np, 0); +- if (!irq) ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) + return; + +- clk = at91_clk_register_main_osc(pmc, irq, name, parent_name, bypass); ++ clk = at91_clk_register_main_osc(regmap, name, parent_name, bypass); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(at91rm9200_clk_main_osc, "atmel,at91rm9200-clk-main-osc", ++ of_at91rm9200_clk_main_osc_setup); + +-static irqreturn_t clk_main_rc_osc_irq_handler(int irq, void *dev_id) ++static bool clk_main_rc_osc_ready(struct regmap *regmap) + { +- struct clk_main_rc_osc *osc = dev_id; ++ unsigned int status; + +- wake_up(&osc->wait); +- disable_irq_nosync(osc->irq); ++ regmap_read(regmap, AT91_PMC_SR, &status); + +- return IRQ_HANDLED; ++ return status & AT91_PMC_MOSCRCS; + } + + static int clk_main_rc_osc_prepare(struct clk_hw *hw) + { + struct clk_main_rc_osc *osc = to_clk_main_rc_osc(hw); +- struct at91_pmc *pmc = osc->pmc; +- u32 tmp; ++ struct regmap *regmap = osc->regmap; ++ unsigned int mor; + +- tmp = pmc_read(pmc, AT91_CKGR_MOR) & ~MOR_KEY_MASK; ++ regmap_read(regmap, AT91_CKGR_MOR, &mor); + +- if (!(tmp & AT91_PMC_MOSCRCEN)) { +- tmp |= AT91_PMC_MOSCRCEN | AT91_PMC_KEY; +- pmc_write(pmc, AT91_CKGR_MOR, tmp); +- } ++ if (!(mor & AT91_PMC_MOSCRCEN)) ++ regmap_update_bits(regmap, AT91_CKGR_MOR, ++ MOR_KEY_MASK | AT91_PMC_MOSCRCEN, ++ AT91_PMC_MOSCRCEN | AT91_PMC_KEY); + +- while (!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCRCS)) { +- enable_irq(osc->irq); +- wait_event(osc->wait, +- pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCRCS); +- } ++ while (!clk_main_rc_osc_ready(regmap)) ++ cpu_relax(); + + return 0; + } +@@ -250,23 +223,28 @@ static int clk_main_rc_osc_prepare(struct clk_hw *hw) + static void clk_main_rc_osc_unprepare(struct clk_hw *hw) + { + struct clk_main_rc_osc *osc = to_clk_main_rc_osc(hw); +- struct at91_pmc *pmc = osc->pmc; +- u32 tmp = pmc_read(pmc, AT91_CKGR_MOR); ++ struct regmap *regmap = osc->regmap; ++ unsigned int mor; ++ ++ regmap_read(regmap, AT91_CKGR_MOR, &mor); + +- if (!(tmp & AT91_PMC_MOSCRCEN)) ++ if (!(mor & AT91_PMC_MOSCRCEN)) + return; + +- tmp &= ~(MOR_KEY_MASK | AT91_PMC_MOSCRCEN); +- pmc_write(pmc, AT91_CKGR_MOR, tmp | AT91_PMC_KEY); ++ regmap_update_bits(regmap, AT91_CKGR_MOR, ++ MOR_KEY_MASK | AT91_PMC_MOSCRCEN, AT91_PMC_KEY); + } + + static int clk_main_rc_osc_is_prepared(struct clk_hw *hw) + { + struct clk_main_rc_osc *osc = to_clk_main_rc_osc(hw); +- struct at91_pmc *pmc = osc->pmc; ++ struct regmap *regmap = osc->regmap; ++ unsigned int mor, status; + +- return !!((pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCRCS) && +- (pmc_read(pmc, AT91_CKGR_MOR) & AT91_PMC_MOSCRCEN)); ++ regmap_read(regmap, AT91_CKGR_MOR, &mor); ++ regmap_read(regmap, AT91_PMC_SR, &status); ++ ++ return (mor & AT91_PMC_MOSCRCEN) && (status & AT91_PMC_MOSCRCS); + } + + static unsigned long clk_main_rc_osc_recalc_rate(struct clk_hw *hw, +@@ -294,17 +272,15 @@ static const struct clk_ops main_rc_osc_ops = { + }; + + static struct clk * __init +-at91_clk_register_main_rc_osc(struct at91_pmc *pmc, +- unsigned int irq, ++at91_clk_register_main_rc_osc(struct regmap *regmap, + const char *name, + u32 frequency, u32 accuracy) + { +- int ret; + struct clk_main_rc_osc *osc; + struct clk *clk = NULL; + struct clk_init_data init; + +- if (!pmc || !irq || !name || !frequency) ++ if (!name || !frequency) + return ERR_PTR(-EINVAL); + + osc = kzalloc(sizeof(*osc), GFP_KERNEL); +@@ -318,63 +294,53 @@ at91_clk_register_main_rc_osc(struct at91_pmc *pmc, + init.flags = CLK_IS_ROOT | CLK_IGNORE_UNUSED; + + osc->hw.init = &init; +- osc->pmc = pmc; +- osc->irq = irq; ++ osc->regmap = regmap; + osc->frequency = frequency; + osc->accuracy = accuracy; + +- init_waitqueue_head(&osc->wait); +- irq_set_status_flags(osc->irq, IRQ_NOAUTOEN); +- ret = request_irq(osc->irq, clk_main_rc_osc_irq_handler, +- IRQF_TRIGGER_HIGH, name, osc); +- if (ret) +- return ERR_PTR(ret); +- + clk = clk_register(NULL, &osc->hw); +- if (IS_ERR(clk)) { +- free_irq(irq, osc); ++ if (IS_ERR(clk)) + kfree(osc); +- } + + return clk; + } + +-void __init of_at91sam9x5_clk_main_rc_osc_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9x5_clk_main_rc_osc_setup(struct device_node *np) + { + struct clk *clk; +- unsigned int irq; + u32 frequency = 0; + u32 accuracy = 0; + const char *name = np->name; ++ struct regmap *regmap; + + of_property_read_string(np, "clock-output-names", &name); + of_property_read_u32(np, "clock-frequency", &frequency); + of_property_read_u32(np, "clock-accuracy", &accuracy); + +- irq = irq_of_parse_and_map(np, 0); +- if (!irq) ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) + return; + +- clk = at91_clk_register_main_rc_osc(pmc, irq, name, frequency, +- accuracy); ++ clk = at91_clk_register_main_rc_osc(regmap, name, frequency, accuracy); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(at91sam9x5_clk_main_rc_osc, "atmel,at91sam9x5-clk-main-rc-osc", ++ of_at91sam9x5_clk_main_rc_osc_setup); + + +-static int clk_main_probe_frequency(struct at91_pmc *pmc) ++static int clk_main_probe_frequency(struct regmap *regmap) + { + unsigned long prep_time, timeout; +- u32 tmp; ++ unsigned int mcfr; + + timeout = jiffies + usecs_to_jiffies(MAINFRDY_TIMEOUT); + do { + prep_time = jiffies; +- tmp = pmc_read(pmc, AT91_CKGR_MCFR); +- if (tmp & AT91_PMC_MAINRDY) ++ regmap_read(regmap, AT91_CKGR_MCFR, &mcfr); ++ if (mcfr & AT91_PMC_MAINRDY) + return 0; + usleep_range(MAINF_LOOP_MIN_WAIT, MAINF_LOOP_MAX_WAIT); + } while (time_before(prep_time, timeout)); +@@ -382,34 +348,37 @@ static int clk_main_probe_frequency(struct at91_pmc *pmc) + return -ETIMEDOUT; + } + +-static unsigned long clk_main_recalc_rate(struct at91_pmc *pmc, ++static unsigned long clk_main_recalc_rate(struct regmap *regmap, + unsigned long parent_rate) + { +- u32 tmp; ++ unsigned int mcfr; + + if (parent_rate) + return parent_rate; + + pr_warn("Main crystal frequency not set, using approximate value\n"); +- tmp = pmc_read(pmc, AT91_CKGR_MCFR); +- if (!(tmp & AT91_PMC_MAINRDY)) ++ regmap_read(regmap, AT91_CKGR_MCFR, &mcfr); ++ if (!(mcfr & AT91_PMC_MAINRDY)) + return 0; + +- return ((tmp & AT91_PMC_MAINF) * SLOW_CLOCK_FREQ) / MAINF_DIV; ++ return ((mcfr & AT91_PMC_MAINF) * SLOW_CLOCK_FREQ) / MAINF_DIV; + } + + static int clk_rm9200_main_prepare(struct clk_hw *hw) + { + struct clk_rm9200_main *clkmain = to_clk_rm9200_main(hw); + +- return clk_main_probe_frequency(clkmain->pmc); ++ return clk_main_probe_frequency(clkmain->regmap); + } + + static int clk_rm9200_main_is_prepared(struct clk_hw *hw) + { + struct clk_rm9200_main *clkmain = to_clk_rm9200_main(hw); ++ unsigned int status; ++ ++ regmap_read(clkmain->regmap, AT91_CKGR_MCFR, &status); + +- return !!(pmc_read(clkmain->pmc, AT91_CKGR_MCFR) & AT91_PMC_MAINRDY); ++ return status & AT91_PMC_MAINRDY ? 1 : 0; + } + + static unsigned long clk_rm9200_main_recalc_rate(struct clk_hw *hw, +@@ -417,7 +386,7 @@ static unsigned long clk_rm9200_main_recalc_rate(struct clk_hw *hw, + { + struct clk_rm9200_main *clkmain = to_clk_rm9200_main(hw); + +- return clk_main_recalc_rate(clkmain->pmc, parent_rate); ++ return clk_main_recalc_rate(clkmain->regmap, parent_rate); + } + + static const struct clk_ops rm9200_main_ops = { +@@ -427,7 +396,7 @@ static const struct clk_ops rm9200_main_ops = { + }; + + static struct clk * __init +-at91_clk_register_rm9200_main(struct at91_pmc *pmc, ++at91_clk_register_rm9200_main(struct regmap *regmap, + const char *name, + const char *parent_name) + { +@@ -435,7 +404,7 @@ at91_clk_register_rm9200_main(struct at91_pmc *pmc, + struct clk *clk = NULL; + struct clk_init_data init; + +- if (!pmc || !name) ++ if (!name) + return ERR_PTR(-EINVAL); + + if (!parent_name) +@@ -452,7 +421,7 @@ at91_clk_register_rm9200_main(struct at91_pmc *pmc, + init.flags = 0; + + clkmain->hw.init = &init; +- clkmain->pmc = pmc; ++ clkmain->regmap = regmap; + + clk = clk_register(NULL, &clkmain->hw); + if (IS_ERR(clk)) +@@ -461,52 +430,54 @@ at91_clk_register_rm9200_main(struct at91_pmc *pmc, + return clk; + } + +-void __init of_at91rm9200_clk_main_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91rm9200_clk_main_setup(struct device_node *np) + { + struct clk *clk; + const char *parent_name; + const char *name = np->name; ++ struct regmap *regmap; + + parent_name = of_clk_get_parent_name(np, 0); + of_property_read_string(np, "clock-output-names", &name); + +- clk = at91_clk_register_rm9200_main(pmc, name, parent_name); ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ ++ clk = at91_clk_register_rm9200_main(regmap, name, parent_name); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(at91rm9200_clk_main, "atmel,at91rm9200-clk-main", ++ of_at91rm9200_clk_main_setup); + +-static irqreturn_t clk_sam9x5_main_irq_handler(int irq, void *dev_id) ++static inline bool clk_sam9x5_main_ready(struct regmap *regmap) + { +- struct clk_sam9x5_main *clkmain = dev_id; ++ unsigned int status; + +- wake_up(&clkmain->wait); +- disable_irq_nosync(clkmain->irq); ++ regmap_read(regmap, AT91_PMC_SR, &status); + +- return IRQ_HANDLED; ++ return status & AT91_PMC_MOSCSELS ? 1 : 0; + } + + static int clk_sam9x5_main_prepare(struct clk_hw *hw) + { + struct clk_sam9x5_main *clkmain = to_clk_sam9x5_main(hw); +- struct at91_pmc *pmc = clkmain->pmc; ++ struct regmap *regmap = clkmain->regmap; + +- while (!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCSELS)) { +- enable_irq(clkmain->irq); +- wait_event(clkmain->wait, +- pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCSELS); +- } ++ while (!clk_sam9x5_main_ready(regmap)) ++ cpu_relax(); + +- return clk_main_probe_frequency(pmc); ++ return clk_main_probe_frequency(regmap); + } + + static int clk_sam9x5_main_is_prepared(struct clk_hw *hw) + { + struct clk_sam9x5_main *clkmain = to_clk_sam9x5_main(hw); + +- return !!(pmc_read(clkmain->pmc, AT91_PMC_SR) & AT91_PMC_MOSCSELS); ++ return clk_sam9x5_main_ready(clkmain->regmap); + } + + static unsigned long clk_sam9x5_main_recalc_rate(struct clk_hw *hw, +@@ -514,30 +485,28 @@ static unsigned long clk_sam9x5_main_recalc_rate(struct clk_hw *hw, + { + struct clk_sam9x5_main *clkmain = to_clk_sam9x5_main(hw); + +- return clk_main_recalc_rate(clkmain->pmc, parent_rate); ++ return clk_main_recalc_rate(clkmain->regmap, parent_rate); + } + + static int clk_sam9x5_main_set_parent(struct clk_hw *hw, u8 index) + { + struct clk_sam9x5_main *clkmain = to_clk_sam9x5_main(hw); +- struct at91_pmc *pmc = clkmain->pmc; +- u32 tmp; ++ struct regmap *regmap = clkmain->regmap; ++ unsigned int tmp; + + if (index > 1) + return -EINVAL; + +- tmp = pmc_read(pmc, AT91_CKGR_MOR) & ~MOR_KEY_MASK; ++ regmap_read(regmap, AT91_CKGR_MOR, &tmp); ++ tmp &= ~MOR_KEY_MASK; + + if (index && !(tmp & AT91_PMC_MOSCSEL)) +- pmc_write(pmc, AT91_CKGR_MOR, tmp | AT91_PMC_MOSCSEL); ++ regmap_write(regmap, AT91_CKGR_MOR, tmp | AT91_PMC_MOSCSEL); + else if (!index && (tmp & AT91_PMC_MOSCSEL)) +- pmc_write(pmc, AT91_CKGR_MOR, tmp & ~AT91_PMC_MOSCSEL); ++ regmap_write(regmap, AT91_CKGR_MOR, tmp & ~AT91_PMC_MOSCSEL); + +- while (!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCSELS)) { +- enable_irq(clkmain->irq); +- wait_event(clkmain->wait, +- pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MOSCSELS); +- } ++ while (!clk_sam9x5_main_ready(regmap)) ++ cpu_relax(); + + return 0; + } +@@ -545,8 +514,11 @@ static int clk_sam9x5_main_set_parent(struct clk_hw *hw, u8 index) + static u8 clk_sam9x5_main_get_parent(struct clk_hw *hw) + { + struct clk_sam9x5_main *clkmain = to_clk_sam9x5_main(hw); ++ unsigned int status; ++ ++ regmap_read(clkmain->regmap, AT91_CKGR_MOR, &status); + +- return !!(pmc_read(clkmain->pmc, AT91_CKGR_MOR) & AT91_PMC_MOSCEN); ++ return status & AT91_PMC_MOSCEN ? 1 : 0; + } + + static const struct clk_ops sam9x5_main_ops = { +@@ -558,18 +530,17 @@ static const struct clk_ops sam9x5_main_ops = { + }; + + static struct clk * __init +-at91_clk_register_sam9x5_main(struct at91_pmc *pmc, +- unsigned int irq, ++at91_clk_register_sam9x5_main(struct regmap *regmap, + const char *name, + const char **parent_names, + int num_parents) + { +- int ret; + struct clk_sam9x5_main *clkmain; + struct clk *clk = NULL; + struct clk_init_data init; ++ unsigned int status; + +- if (!pmc || !irq || !name) ++ if (!name) + return ERR_PTR(-EINVAL); + + if (!parent_names || !num_parents) +@@ -586,51 +557,42 @@ at91_clk_register_sam9x5_main(struct at91_pmc *pmc, + init.flags = CLK_SET_PARENT_GATE; + + clkmain->hw.init = &init; +- clkmain->pmc = pmc; +- clkmain->irq = irq; +- clkmain->parent = !!(pmc_read(clkmain->pmc, AT91_CKGR_MOR) & +- AT91_PMC_MOSCEN); +- init_waitqueue_head(&clkmain->wait); +- irq_set_status_flags(clkmain->irq, IRQ_NOAUTOEN); +- ret = request_irq(clkmain->irq, clk_sam9x5_main_irq_handler, +- IRQF_TRIGGER_HIGH, name, clkmain); +- if (ret) +- return ERR_PTR(ret); ++ clkmain->regmap = regmap; ++ regmap_read(clkmain->regmap, AT91_CKGR_MOR, &status); ++ clkmain->parent = status & AT91_PMC_MOSCEN ? 1 : 0; + + clk = clk_register(NULL, &clkmain->hw); +- if (IS_ERR(clk)) { +- free_irq(clkmain->irq, clkmain); ++ if (IS_ERR(clk)) + kfree(clkmain); +- } + + return clk; + } + +-void __init of_at91sam9x5_clk_main_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9x5_clk_main_setup(struct device_node *np) + { + struct clk *clk; + const char *parent_names[2]; + int num_parents; +- unsigned int irq; + const char *name = np->name; ++ struct regmap *regmap; + + num_parents = of_clk_get_parent_count(np); + if (num_parents <= 0 || num_parents > 2) + return; + + of_clk_parent_fill(np, parent_names, num_parents); ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; + + of_property_read_string(np, "clock-output-names", &name); + +- irq = irq_of_parse_and_map(np, 0); +- if (!irq) +- return; +- +- clk = at91_clk_register_sam9x5_main(pmc, irq, name, parent_names, ++ clk = at91_clk_register_sam9x5_main(regmap, name, parent_names, + num_parents); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(at91sam9x5_clk_main, "atmel,at91sam9x5-clk-main", ++ of_at91sam9x5_clk_main_setup); +diff --git a/drivers/clk/at91/clk-master.c b/drivers/clk/at91/clk-master.c +index 620ea32..7d4a186 100644 +--- a/drivers/clk/at91/clk-master.c ++++ b/drivers/clk/at91/clk-master.c +@@ -12,13 +12,8 @@ + #include + #include + #include +-#include +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -44,32 +39,26 @@ struct clk_master_layout { + + struct clk_master { + struct clk_hw hw; +- struct at91_pmc *pmc; +- unsigned int irq; +- wait_queue_head_t wait; ++ struct regmap *regmap; + const struct clk_master_layout *layout; + const struct clk_master_characteristics *characteristics; + }; + +-static irqreturn_t clk_master_irq_handler(int irq, void *dev_id) ++static inline bool clk_master_ready(struct regmap *regmap) + { +- struct clk_master *master = (struct clk_master *)dev_id; ++ unsigned int status; + +- wake_up(&master->wait); +- disable_irq_nosync(master->irq); ++ regmap_read(regmap, AT91_PMC_SR, &status); + +- return IRQ_HANDLED; ++ return status & AT91_PMC_MCKRDY ? 1 : 0; + } ++ + static int clk_master_prepare(struct clk_hw *hw) + { + struct clk_master *master = to_clk_master(hw); +- struct at91_pmc *pmc = master->pmc; + +- while (!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MCKRDY)) { +- enable_irq(master->irq); +- wait_event(master->wait, +- pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_MCKRDY); +- } ++ while (!clk_master_ready(master->regmap)) ++ cpu_relax(); + + return 0; + } +@@ -78,7 +67,7 @@ static int clk_master_is_prepared(struct clk_hw *hw) + { + struct clk_master *master = to_clk_master(hw); + +- return !!(pmc_read(master->pmc, AT91_PMC_SR) & AT91_PMC_MCKRDY); ++ return clk_master_ready(master->regmap); + } + + static unsigned long clk_master_recalc_rate(struct clk_hw *hw, +@@ -88,18 +77,16 @@ static unsigned long clk_master_recalc_rate(struct clk_hw *hw, + u8 div; + unsigned long rate = parent_rate; + struct clk_master *master = to_clk_master(hw); +- struct at91_pmc *pmc = master->pmc; + const struct clk_master_layout *layout = master->layout; + const struct clk_master_characteristics *characteristics = + master->characteristics; +- u32 tmp; ++ unsigned int mckr; + +- pmc_lock(pmc); +- tmp = pmc_read(pmc, AT91_PMC_MCKR) & layout->mask; +- pmc_unlock(pmc); ++ regmap_read(master->regmap, AT91_PMC_MCKR, &mckr); ++ mckr &= layout->mask; + +- pres = (tmp >> layout->pres_shift) & MASTER_PRES_MASK; +- div = (tmp >> MASTER_DIV_SHIFT) & MASTER_DIV_MASK; ++ pres = (mckr >> layout->pres_shift) & MASTER_PRES_MASK; ++ div = (mckr >> MASTER_DIV_SHIFT) & MASTER_DIV_MASK; + + if (characteristics->have_div3_pres && pres == MASTER_PRES_MAX) + rate /= 3; +@@ -119,9 +106,11 @@ static unsigned long clk_master_recalc_rate(struct clk_hw *hw, + static u8 clk_master_get_parent(struct clk_hw *hw) + { + struct clk_master *master = to_clk_master(hw); +- struct at91_pmc *pmc = master->pmc; ++ unsigned int mckr; + +- return pmc_read(pmc, AT91_PMC_MCKR) & AT91_PMC_CSS; ++ regmap_read(master->regmap, AT91_PMC_MCKR, &mckr); ++ ++ return mckr & AT91_PMC_CSS; + } + + static const struct clk_ops master_ops = { +@@ -132,18 +121,17 @@ static const struct clk_ops master_ops = { + }; + + static struct clk * __init +-at91_clk_register_master(struct at91_pmc *pmc, unsigned int irq, ++at91_clk_register_master(struct regmap *regmap, + const char *name, int num_parents, + const char **parent_names, + const struct clk_master_layout *layout, + const struct clk_master_characteristics *characteristics) + { +- int ret; + struct clk_master *master; + struct clk *clk = NULL; + struct clk_init_data init; + +- if (!pmc || !irq || !name || !num_parents || !parent_names) ++ if (!name || !num_parents || !parent_names) + return ERR_PTR(-EINVAL); + + master = kzalloc(sizeof(*master), GFP_KERNEL); +@@ -159,20 +147,10 @@ at91_clk_register_master(struct at91_pmc *pmc, unsigned int irq, + master->hw.init = &init; + master->layout = layout; + master->characteristics = characteristics; +- master->pmc = pmc; +- master->irq = irq; +- init_waitqueue_head(&master->wait); +- irq_set_status_flags(master->irq, IRQ_NOAUTOEN); +- ret = request_irq(master->irq, clk_master_irq_handler, +- IRQF_TRIGGER_HIGH, "clk-master", master); +- if (ret) { +- kfree(master); +- return ERR_PTR(ret); +- } ++ master->regmap = regmap; + + clk = clk_register(NULL, &master->hw); + if (IS_ERR(clk)) { +- free_irq(master->irq, master); + kfree(master); + } + +@@ -217,15 +195,15 @@ of_at91_clk_master_get_characteristics(struct device_node *np) + } + + static void __init +-of_at91_clk_master_setup(struct device_node *np, struct at91_pmc *pmc, ++of_at91_clk_master_setup(struct device_node *np, + const struct clk_master_layout *layout) + { + struct clk *clk; + int num_parents; +- unsigned int irq; + const char *parent_names[MASTER_SOURCE_MAX]; + const char *name = np->name; + struct clk_master_characteristics *characteristics; ++ struct regmap *regmap; + + num_parents = of_clk_get_parent_count(np); + if (num_parents <= 0 || num_parents > MASTER_SOURCE_MAX) +@@ -239,11 +217,11 @@ of_at91_clk_master_setup(struct device_node *np, struct at91_pmc *pmc, + if (!characteristics) + return; + +- irq = irq_of_parse_and_map(np, 0); +- if (!irq) +- goto out_free_characteristics; ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; + +- clk = at91_clk_register_master(pmc, irq, name, num_parents, ++ clk = at91_clk_register_master(regmap, name, num_parents, + parent_names, layout, + characteristics); + if (IS_ERR(clk)) +@@ -256,14 +234,16 @@ of_at91_clk_master_setup(struct device_node *np, struct at91_pmc *pmc, + kfree(characteristics); + } + +-void __init of_at91rm9200_clk_master_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91rm9200_clk_master_setup(struct device_node *np) + { +- of_at91_clk_master_setup(np, pmc, &at91rm9200_master_layout); ++ of_at91_clk_master_setup(np, &at91rm9200_master_layout); + } ++CLK_OF_DECLARE(at91rm9200_clk_master, "atmel,at91rm9200-clk-master", ++ of_at91rm9200_clk_master_setup); + +-void __init of_at91sam9x5_clk_master_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9x5_clk_master_setup(struct device_node *np) + { +- of_at91_clk_master_setup(np, pmc, &at91sam9x5_master_layout); ++ of_at91_clk_master_setup(np, &at91sam9x5_master_layout); + } ++CLK_OF_DECLARE(at91sam9x5_clk_master, "atmel,at91sam9x5-clk-master", ++ of_at91sam9x5_clk_master_setup); +diff --git a/drivers/clk/at91/clk-peripheral.c b/drivers/clk/at91/clk-peripheral.c +index 58f3b56..d69cd2a 100644 +--- a/drivers/clk/at91/clk-peripheral.c ++++ b/drivers/clk/at91/clk-peripheral.c +@@ -12,11 +12,13 @@ + #include + #include + #include +-#include +-#include ++#include ++#include + + #include "pmc.h" + ++DEFINE_SPINLOCK(pmc_pcr_lock); ++ + #define PERIPHERAL_MAX 64 + + #define PERIPHERAL_AT91RM9200 0 +@@ -33,7 +35,7 @@ + + struct clk_peripheral { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + u32 id; + }; + +@@ -41,8 +43,9 @@ struct clk_peripheral { + + struct clk_sam9x5_peripheral { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + struct clk_range range; ++ spinlock_t *lock; + u32 id; + u32 div; + bool auto_div; +@@ -54,7 +57,6 @@ struct clk_sam9x5_peripheral { + static int clk_peripheral_enable(struct clk_hw *hw) + { + struct clk_peripheral *periph = to_clk_peripheral(hw); +- struct at91_pmc *pmc = periph->pmc; + int offset = AT91_PMC_PCER; + u32 id = periph->id; + +@@ -62,14 +64,14 @@ static int clk_peripheral_enable(struct clk_hw *hw) + return 0; + if (id > PERIPHERAL_ID_MAX) + offset = AT91_PMC_PCER1; +- pmc_write(pmc, offset, PERIPHERAL_MASK(id)); ++ regmap_write(periph->regmap, offset, PERIPHERAL_MASK(id)); ++ + return 0; + } + + static void clk_peripheral_disable(struct clk_hw *hw) + { + struct clk_peripheral *periph = to_clk_peripheral(hw); +- struct at91_pmc *pmc = periph->pmc; + int offset = AT91_PMC_PCDR; + u32 id = periph->id; + +@@ -77,21 +79,23 @@ static void clk_peripheral_disable(struct clk_hw *hw) + return; + if (id > PERIPHERAL_ID_MAX) + offset = AT91_PMC_PCDR1; +- pmc_write(pmc, offset, PERIPHERAL_MASK(id)); ++ regmap_write(periph->regmap, offset, PERIPHERAL_MASK(id)); + } + + static int clk_peripheral_is_enabled(struct clk_hw *hw) + { + struct clk_peripheral *periph = to_clk_peripheral(hw); +- struct at91_pmc *pmc = periph->pmc; + int offset = AT91_PMC_PCSR; ++ unsigned int status; + u32 id = periph->id; + + if (id < PERIPHERAL_ID_MIN) + return 1; + if (id > PERIPHERAL_ID_MAX) + offset = AT91_PMC_PCSR1; +- return !!(pmc_read(pmc, offset) & PERIPHERAL_MASK(id)); ++ regmap_read(periph->regmap, offset, &status); ++ ++ return status & PERIPHERAL_MASK(id) ? 1 : 0; + } + + static const struct clk_ops peripheral_ops = { +@@ -101,14 +105,14 @@ static const struct clk_ops peripheral_ops = { + }; + + static struct clk * __init +-at91_clk_register_peripheral(struct at91_pmc *pmc, const char *name, ++at91_clk_register_peripheral(struct regmap *regmap, const char *name, + const char *parent_name, u32 id) + { + struct clk_peripheral *periph; + struct clk *clk = NULL; + struct clk_init_data init; + +- if (!pmc || !name || !parent_name || id > PERIPHERAL_ID_MAX) ++ if (!name || !parent_name || id > PERIPHERAL_ID_MAX) + return ERR_PTR(-EINVAL); + + periph = kzalloc(sizeof(*periph), GFP_KERNEL); +@@ -123,7 +127,7 @@ at91_clk_register_peripheral(struct at91_pmc *pmc, const char *name, + + periph->id = id; + periph->hw.init = &init; +- periph->pmc = pmc; ++ periph->regmap = regmap; + + clk = clk_register(NULL, &periph->hw); + if (IS_ERR(clk)) +@@ -160,53 +164,58 @@ static void clk_sam9x5_peripheral_autodiv(struct clk_sam9x5_peripheral *periph) + static int clk_sam9x5_peripheral_enable(struct clk_hw *hw) + { + struct clk_sam9x5_peripheral *periph = to_clk_sam9x5_peripheral(hw); +- struct at91_pmc *pmc = periph->pmc; +- u32 tmp; ++ unsigned long flags; + + if (periph->id < PERIPHERAL_ID_MIN) + return 0; + +- pmc_lock(pmc); +- pmc_write(pmc, AT91_PMC_PCR, (periph->id & AT91_PMC_PCR_PID_MASK)); +- tmp = pmc_read(pmc, AT91_PMC_PCR) & ~AT91_PMC_PCR_DIV_MASK; +- pmc_write(pmc, AT91_PMC_PCR, tmp | AT91_PMC_PCR_DIV(periph->div) +- | AT91_PMC_PCR_CMD +- | AT91_PMC_PCR_EN); +- pmc_unlock(pmc); ++ spin_lock_irqsave(periph->lock, flags); ++ regmap_write(periph->regmap, AT91_PMC_PCR, ++ (periph->id & AT91_PMC_PCR_PID_MASK)); ++ regmap_update_bits(periph->regmap, AT91_PMC_PCR, ++ AT91_PMC_PCR_DIV_MASK | AT91_PMC_PCR_CMD | ++ AT91_PMC_PCR_EN, ++ AT91_PMC_PCR_DIV(periph->div) | ++ AT91_PMC_PCR_CMD | ++ AT91_PMC_PCR_EN); ++ spin_unlock_irqrestore(periph->lock, flags); ++ + return 0; + } + + static void clk_sam9x5_peripheral_disable(struct clk_hw *hw) + { + struct clk_sam9x5_peripheral *periph = to_clk_sam9x5_peripheral(hw); +- struct at91_pmc *pmc = periph->pmc; +- u32 tmp; ++ unsigned long flags; + + if (periph->id < PERIPHERAL_ID_MIN) + return; + +- pmc_lock(pmc); +- pmc_write(pmc, AT91_PMC_PCR, (periph->id & AT91_PMC_PCR_PID_MASK)); +- tmp = pmc_read(pmc, AT91_PMC_PCR) & ~AT91_PMC_PCR_EN; +- pmc_write(pmc, AT91_PMC_PCR, tmp | AT91_PMC_PCR_CMD); +- pmc_unlock(pmc); ++ spin_lock_irqsave(periph->lock, flags); ++ regmap_write(periph->regmap, AT91_PMC_PCR, ++ (periph->id & AT91_PMC_PCR_PID_MASK)); ++ regmap_update_bits(periph->regmap, AT91_PMC_PCR, ++ AT91_PMC_PCR_EN | AT91_PMC_PCR_CMD, ++ AT91_PMC_PCR_CMD); ++ spin_unlock_irqrestore(periph->lock, flags); + } + + static int clk_sam9x5_peripheral_is_enabled(struct clk_hw *hw) + { + struct clk_sam9x5_peripheral *periph = to_clk_sam9x5_peripheral(hw); +- struct at91_pmc *pmc = periph->pmc; +- int ret; ++ unsigned long flags; ++ unsigned int status; + + if (periph->id < PERIPHERAL_ID_MIN) + return 1; + +- pmc_lock(pmc); +- pmc_write(pmc, AT91_PMC_PCR, (periph->id & AT91_PMC_PCR_PID_MASK)); +- ret = !!(pmc_read(pmc, AT91_PMC_PCR) & AT91_PMC_PCR_EN); +- pmc_unlock(pmc); ++ spin_lock_irqsave(periph->lock, flags); ++ regmap_write(periph->regmap, AT91_PMC_PCR, ++ (periph->id & AT91_PMC_PCR_PID_MASK)); ++ regmap_read(periph->regmap, AT91_PMC_PCR, &status); ++ spin_unlock_irqrestore(periph->lock, flags); + +- return ret; ++ return status & AT91_PMC_PCR_EN ? 1 : 0; + } + + static unsigned long +@@ -214,19 +223,20 @@ clk_sam9x5_peripheral_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) + { + struct clk_sam9x5_peripheral *periph = to_clk_sam9x5_peripheral(hw); +- struct at91_pmc *pmc = periph->pmc; +- u32 tmp; ++ unsigned long flags; ++ unsigned int status; + + if (periph->id < PERIPHERAL_ID_MIN) + return parent_rate; + +- pmc_lock(pmc); +- pmc_write(pmc, AT91_PMC_PCR, (periph->id & AT91_PMC_PCR_PID_MASK)); +- tmp = pmc_read(pmc, AT91_PMC_PCR); +- pmc_unlock(pmc); ++ spin_lock_irqsave(periph->lock, flags); ++ regmap_write(periph->regmap, AT91_PMC_PCR, ++ (periph->id & AT91_PMC_PCR_PID_MASK)); ++ regmap_read(periph->regmap, AT91_PMC_PCR, &status); ++ spin_unlock_irqrestore(periph->lock, flags); + +- if (tmp & AT91_PMC_PCR_EN) { +- periph->div = PERIPHERAL_RSHIFT(tmp); ++ if (status & AT91_PMC_PCR_EN) { ++ periph->div = PERIPHERAL_RSHIFT(status); + periph->auto_div = false; + } else { + clk_sam9x5_peripheral_autodiv(periph); +@@ -318,15 +328,15 @@ static const struct clk_ops sam9x5_peripheral_ops = { + }; + + static struct clk * __init +-at91_clk_register_sam9x5_peripheral(struct at91_pmc *pmc, const char *name, +- const char *parent_name, u32 id, +- const struct clk_range *range) ++at91_clk_register_sam9x5_peripheral(struct regmap *regmap, spinlock_t *lock, ++ const char *name, const char *parent_name, ++ u32 id, const struct clk_range *range) + { + struct clk_sam9x5_peripheral *periph; + struct clk *clk = NULL; + struct clk_init_data init; + +- if (!pmc || !name || !parent_name) ++ if (!name || !parent_name) + return ERR_PTR(-EINVAL); + + periph = kzalloc(sizeof(*periph), GFP_KERNEL); +@@ -342,7 +352,8 @@ at91_clk_register_sam9x5_peripheral(struct at91_pmc *pmc, const char *name, + periph->id = id; + periph->hw.init = &init; + periph->div = 0; +- periph->pmc = pmc; ++ periph->regmap = regmap; ++ periph->lock = lock; + periph->auto_div = true; + periph->range = *range; + +@@ -356,7 +367,7 @@ at91_clk_register_sam9x5_peripheral(struct at91_pmc *pmc, const char *name, + } + + static void __init +-of_at91_clk_periph_setup(struct device_node *np, struct at91_pmc *pmc, u8 type) ++of_at91_clk_periph_setup(struct device_node *np, u8 type) + { + int num; + u32 id; +@@ -364,6 +375,7 @@ of_at91_clk_periph_setup(struct device_node *np, struct at91_pmc *pmc, u8 type) + const char *parent_name; + const char *name; + struct device_node *periphclknp; ++ struct regmap *regmap; + + parent_name = of_clk_get_parent_name(np, 0); + if (!parent_name) +@@ -373,6 +385,10 @@ of_at91_clk_periph_setup(struct device_node *np, struct at91_pmc *pmc, u8 type) + if (!num || num > PERIPHERAL_MAX) + return; + ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ + for_each_child_of_node(np, periphclknp) { + if (of_property_read_u32(periphclknp, "reg", &id)) + continue; +@@ -384,7 +400,7 @@ of_at91_clk_periph_setup(struct device_node *np, struct at91_pmc *pmc, u8 type) + name = periphclknp->name; + + if (type == PERIPHERAL_AT91RM9200) { +- clk = at91_clk_register_peripheral(pmc, name, ++ clk = at91_clk_register_peripheral(regmap, name, + parent_name, id); + } else { + struct clk_range range = CLK_RANGE(0, 0); +@@ -393,7 +409,9 @@ of_at91_clk_periph_setup(struct device_node *np, struct at91_pmc *pmc, u8 type) + "atmel,clk-output-range", + &range); + +- clk = at91_clk_register_sam9x5_peripheral(pmc, name, ++ clk = at91_clk_register_sam9x5_peripheral(regmap, ++ &pmc_pcr_lock, ++ name, + parent_name, + id, &range); + } +@@ -405,14 +423,16 @@ of_at91_clk_periph_setup(struct device_node *np, struct at91_pmc *pmc, u8 type) + } + } + +-void __init of_at91rm9200_clk_periph_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91rm9200_clk_periph_setup(struct device_node *np) + { +- of_at91_clk_periph_setup(np, pmc, PERIPHERAL_AT91RM9200); ++ of_at91_clk_periph_setup(np, PERIPHERAL_AT91RM9200); + } ++CLK_OF_DECLARE(at91rm9200_clk_periph, "atmel,at91rm9200-clk-peripheral", ++ of_at91rm9200_clk_periph_setup); + +-void __init of_at91sam9x5_clk_periph_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9x5_clk_periph_setup(struct device_node *np) + { +- of_at91_clk_periph_setup(np, pmc, PERIPHERAL_AT91SAM9X5); ++ of_at91_clk_periph_setup(np, PERIPHERAL_AT91SAM9X5); + } ++CLK_OF_DECLARE(at91sam9x5_clk_periph, "atmel,at91sam9x5-clk-peripheral", ++ of_at91sam9x5_clk_periph_setup); +diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c +index 18b60f4..fb2e0b5 100644 +--- a/drivers/clk/at91/clk-pll.c ++++ b/drivers/clk/at91/clk-pll.c +@@ -12,14 +12,8 @@ + #include + #include + #include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -58,9 +52,7 @@ struct clk_pll_layout { + + struct clk_pll { + struct clk_hw hw; +- struct at91_pmc *pmc; +- unsigned int irq; +- wait_queue_head_t wait; ++ struct regmap *regmap; + u8 id; + u8 div; + u8 range; +@@ -69,20 +61,19 @@ struct clk_pll { + const struct clk_pll_characteristics *characteristics; + }; + +-static irqreturn_t clk_pll_irq_handler(int irq, void *dev_id) ++static inline bool clk_pll_ready(struct regmap *regmap, int id) + { +- struct clk_pll *pll = (struct clk_pll *)dev_id; ++ unsigned int status; + +- wake_up(&pll->wait); +- disable_irq_nosync(pll->irq); ++ regmap_read(regmap, AT91_PMC_SR, &status); + +- return IRQ_HANDLED; ++ return status & PLL_STATUS_MASK(id) ? 1 : 0; + } + + static int clk_pll_prepare(struct clk_hw *hw) + { + struct clk_pll *pll = to_clk_pll(hw); +- struct at91_pmc *pmc = pll->pmc; ++ struct regmap *regmap = pll->regmap; + const struct clk_pll_layout *layout = pll->layout; + const struct clk_pll_characteristics *characteristics = + pll->characteristics; +@@ -90,39 +81,34 @@ static int clk_pll_prepare(struct clk_hw *hw) + u32 mask = PLL_STATUS_MASK(id); + int offset = PLL_REG(id); + u8 out = 0; +- u32 pllr, icpr; ++ unsigned int pllr; ++ unsigned int status; + u8 div; + u16 mul; + +- pllr = pmc_read(pmc, offset); ++ regmap_read(regmap, offset, &pllr); + div = PLL_DIV(pllr); + mul = PLL_MUL(pllr, layout); + +- if ((pmc_read(pmc, AT91_PMC_SR) & mask) && ++ regmap_read(regmap, AT91_PMC_SR, &status); ++ if ((status & mask) && + (div == pll->div && mul == pll->mul)) + return 0; + + if (characteristics->out) + out = characteristics->out[pll->range]; +- if (characteristics->icpll) { +- icpr = pmc_read(pmc, AT91_PMC_PLLICPR) & ~PLL_ICPR_MASK(id); +- icpr |= (characteristics->icpll[pll->range] << +- PLL_ICPR_SHIFT(id)); +- pmc_write(pmc, AT91_PMC_PLLICPR, icpr); +- } + +- pllr &= ~layout->pllr_mask; +- pllr |= layout->pllr_mask & +- (pll->div | (PLL_MAX_COUNT << PLL_COUNT_SHIFT) | +- (out << PLL_OUT_SHIFT) | +- ((pll->mul & layout->mul_mask) << layout->mul_shift)); +- pmc_write(pmc, offset, pllr); +- +- while (!(pmc_read(pmc, AT91_PMC_SR) & mask)) { +- enable_irq(pll->irq); +- wait_event(pll->wait, +- pmc_read(pmc, AT91_PMC_SR) & mask); +- } ++ if (characteristics->icpll) ++ regmap_update_bits(regmap, AT91_PMC_PLLICPR, PLL_ICPR_MASK(id), ++ characteristics->icpll[pll->range] << PLL_ICPR_SHIFT(id)); ++ ++ regmap_update_bits(regmap, offset, layout->pllr_mask, ++ pll->div | (PLL_MAX_COUNT << PLL_COUNT_SHIFT) | ++ (out << PLL_OUT_SHIFT) | ++ ((pll->mul & layout->mul_mask) << layout->mul_shift)); ++ ++ while (!clk_pll_ready(regmap, pll->id)) ++ cpu_relax(); + + return 0; + } +@@ -130,32 +116,35 @@ static int clk_pll_prepare(struct clk_hw *hw) + static int clk_pll_is_prepared(struct clk_hw *hw) + { + struct clk_pll *pll = to_clk_pll(hw); +- struct at91_pmc *pmc = pll->pmc; + +- return !!(pmc_read(pmc, AT91_PMC_SR) & +- PLL_STATUS_MASK(pll->id)); ++ return clk_pll_ready(pll->regmap, pll->id); + } + + static void clk_pll_unprepare(struct clk_hw *hw) + { + struct clk_pll *pll = to_clk_pll(hw); +- struct at91_pmc *pmc = pll->pmc; +- const struct clk_pll_layout *layout = pll->layout; +- int offset = PLL_REG(pll->id); +- u32 tmp = pmc_read(pmc, offset) & ~(layout->pllr_mask); ++ unsigned int mask = pll->layout->pllr_mask; + +- pmc_write(pmc, offset, tmp); ++ regmap_update_bits(pll->regmap, PLL_REG(pll->id), mask, ~mask); + } + + static unsigned long clk_pll_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) + { + struct clk_pll *pll = to_clk_pll(hw); ++ unsigned int pllr; ++ u16 mul; ++ u8 div; + +- if (!pll->div || !pll->mul) ++ regmap_read(pll->regmap, PLL_REG(pll->id), &pllr); ++ ++ div = PLL_DIV(pllr); ++ mul = PLL_MUL(pllr, pll->layout); ++ ++ if (!div || !mul) + return 0; + +- return (parent_rate / pll->div) * (pll->mul + 1); ++ return (parent_rate / div) * (mul + 1); + } + + static long clk_pll_get_best_div_mul(struct clk_pll *pll, unsigned long rate, +@@ -308,7 +297,7 @@ static const struct clk_ops pll_ops = { + }; + + static struct clk * __init +-at91_clk_register_pll(struct at91_pmc *pmc, unsigned int irq, const char *name, ++at91_clk_register_pll(struct regmap *regmap, const char *name, + const char *parent_name, u8 id, + const struct clk_pll_layout *layout, + const struct clk_pll_characteristics *characteristics) +@@ -316,9 +305,8 @@ at91_clk_register_pll(struct at91_pmc *pmc, unsigned int irq, const char *name, + struct clk_pll *pll; + struct clk *clk = NULL; + struct clk_init_data init; +- int ret; + int offset = PLL_REG(id); +- u32 tmp; ++ unsigned int pllr; + + if (id > PLL_MAX_ID) + return ERR_PTR(-EINVAL); +@@ -337,23 +325,13 @@ at91_clk_register_pll(struct at91_pmc *pmc, unsigned int irq, const char *name, + pll->hw.init = &init; + pll->layout = layout; + pll->characteristics = characteristics; +- pll->pmc = pmc; +- pll->irq = irq; +- tmp = pmc_read(pmc, offset) & layout->pllr_mask; +- pll->div = PLL_DIV(tmp); +- pll->mul = PLL_MUL(tmp, layout); +- init_waitqueue_head(&pll->wait); +- irq_set_status_flags(pll->irq, IRQ_NOAUTOEN); +- ret = request_irq(pll->irq, clk_pll_irq_handler, IRQF_TRIGGER_HIGH, +- id ? "clk-pllb" : "clk-plla", pll); +- if (ret) { +- kfree(pll); +- return ERR_PTR(ret); +- } ++ pll->regmap = regmap; ++ regmap_read(regmap, offset, &pllr); ++ pll->div = PLL_DIV(pllr); ++ pll->mul = PLL_MUL(pllr, layout); + + clk = clk_register(NULL, &pll->hw); + if (IS_ERR(clk)) { +- free_irq(pll->irq, pll); + kfree(pll); + } + +@@ -483,12 +461,12 @@ of_at91_clk_pll_get_characteristics(struct device_node *np) + } + + static void __init +-of_at91_clk_pll_setup(struct device_node *np, struct at91_pmc *pmc, ++of_at91_clk_pll_setup(struct device_node *np, + const struct clk_pll_layout *layout) + { + u32 id; +- unsigned int irq; + struct clk *clk; ++ struct regmap *regmap; + const char *parent_name; + const char *name = np->name; + struct clk_pll_characteristics *characteristics; +@@ -500,15 +478,15 @@ of_at91_clk_pll_setup(struct device_node *np, struct at91_pmc *pmc, + + of_property_read_string(np, "clock-output-names", &name); + +- characteristics = of_at91_clk_pll_get_characteristics(np); +- if (!characteristics) ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) + return; + +- irq = irq_of_parse_and_map(np, 0); +- if (!irq) ++ characteristics = of_at91_clk_pll_get_characteristics(np); ++ if (!characteristics) + return; + +- clk = at91_clk_register_pll(pmc, irq, name, parent_name, id, layout, ++ clk = at91_clk_register_pll(regmap, name, parent_name, id, layout, + characteristics); + if (IS_ERR(clk)) + goto out_free_characteristics; +@@ -520,26 +498,30 @@ of_at91_clk_pll_setup(struct device_node *np, struct at91_pmc *pmc, + kfree(characteristics); + } + +-void __init of_at91rm9200_clk_pll_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91rm9200_clk_pll_setup(struct device_node *np) + { +- of_at91_clk_pll_setup(np, pmc, &at91rm9200_pll_layout); ++ of_at91_clk_pll_setup(np, &at91rm9200_pll_layout); + } ++CLK_OF_DECLARE(at91rm9200_clk_pll, "atmel,at91rm9200-clk-pll", ++ of_at91rm9200_clk_pll_setup); + +-void __init of_at91sam9g45_clk_pll_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9g45_clk_pll_setup(struct device_node *np) + { +- of_at91_clk_pll_setup(np, pmc, &at91sam9g45_pll_layout); ++ of_at91_clk_pll_setup(np, &at91sam9g45_pll_layout); + } ++CLK_OF_DECLARE(at91sam9g45_clk_pll, "atmel,at91sam9g45-clk-pll", ++ of_at91sam9g45_clk_pll_setup); + +-void __init of_at91sam9g20_clk_pllb_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9g20_clk_pllb_setup(struct device_node *np) + { +- of_at91_clk_pll_setup(np, pmc, &at91sam9g20_pllb_layout); ++ of_at91_clk_pll_setup(np, &at91sam9g20_pllb_layout); + } ++CLK_OF_DECLARE(at91sam9g20_clk_pllb, "atmel,at91sam9g20-clk-pllb", ++ of_at91sam9g20_clk_pllb_setup); + +-void __init of_sama5d3_clk_pll_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_sama5d3_clk_pll_setup(struct device_node *np) + { +- of_at91_clk_pll_setup(np, pmc, &sama5d3_pll_layout); ++ of_at91_clk_pll_setup(np, &sama5d3_pll_layout); + } ++CLK_OF_DECLARE(sama5d3_clk_pll, "atmel,sama5d3-clk-pll", ++ of_sama5d3_clk_pll_setup); +diff --git a/drivers/clk/at91/clk-plldiv.c b/drivers/clk/at91/clk-plldiv.c +index ea22656..2bed264 100644 +--- a/drivers/clk/at91/clk-plldiv.c ++++ b/drivers/clk/at91/clk-plldiv.c +@@ -12,8 +12,8 @@ + #include + #include + #include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -21,16 +21,18 @@ + + struct clk_plldiv { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + }; + + static unsigned long clk_plldiv_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) + { + struct clk_plldiv *plldiv = to_clk_plldiv(hw); +- struct at91_pmc *pmc = plldiv->pmc; ++ unsigned int mckr; + +- if (pmc_read(pmc, AT91_PMC_MCKR) & AT91_PMC_PLLADIV2) ++ regmap_read(plldiv->regmap, AT91_PMC_MCKR, &mckr); ++ ++ if (mckr & AT91_PMC_PLLADIV2) + return parent_rate / 2; + + return parent_rate; +@@ -57,18 +59,12 @@ static int clk_plldiv_set_rate(struct clk_hw *hw, unsigned long rate, + unsigned long parent_rate) + { + struct clk_plldiv *plldiv = to_clk_plldiv(hw); +- struct at91_pmc *pmc = plldiv->pmc; +- u32 tmp; + +- if (parent_rate != rate && (parent_rate / 2) != rate) ++ if ((parent_rate != rate) && (parent_rate / 2 != rate)) + return -EINVAL; + +- pmc_lock(pmc); +- tmp = pmc_read(pmc, AT91_PMC_MCKR) & ~AT91_PMC_PLLADIV2; +- if ((parent_rate / 2) == rate) +- tmp |= AT91_PMC_PLLADIV2; +- pmc_write(pmc, AT91_PMC_MCKR, tmp); +- pmc_unlock(pmc); ++ regmap_update_bits(plldiv->regmap, AT91_PMC_MCKR, AT91_PMC_PLLADIV2, ++ parent_rate != rate ? AT91_PMC_PLLADIV2 : 0); + + return 0; + } +@@ -80,7 +76,7 @@ static const struct clk_ops plldiv_ops = { + }; + + static struct clk * __init +-at91_clk_register_plldiv(struct at91_pmc *pmc, const char *name, ++at91_clk_register_plldiv(struct regmap *regmap, const char *name, + const char *parent_name) + { + struct clk_plldiv *plldiv; +@@ -98,7 +94,7 @@ at91_clk_register_plldiv(struct at91_pmc *pmc, const char *name, + init.flags = CLK_SET_RATE_GATE; + + plldiv->hw.init = &init; +- plldiv->pmc = pmc; ++ plldiv->regmap = regmap; + + clk = clk_register(NULL, &plldiv->hw); + +@@ -109,27 +105,27 @@ at91_clk_register_plldiv(struct at91_pmc *pmc, const char *name, + } + + static void __init +-of_at91_clk_plldiv_setup(struct device_node *np, struct at91_pmc *pmc) ++of_at91sam9x5_clk_plldiv_setup(struct device_node *np) + { + struct clk *clk; + const char *parent_name; + const char *name = np->name; ++ struct regmap *regmap; + + parent_name = of_clk_get_parent_name(np, 0); + + of_property_read_string(np, "clock-output-names", &name); + +- clk = at91_clk_register_plldiv(pmc, name, parent_name); ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; + ++ clk = at91_clk_register_plldiv(regmap, name, parent_name); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + return; + } +- +-void __init of_at91sam9x5_clk_plldiv_setup(struct device_node *np, +- struct at91_pmc *pmc) +-{ +- of_at91_clk_plldiv_setup(np, pmc); +-} ++CLK_OF_DECLARE(at91sam9x5_clk_plldiv, "atmel,at91sam9x5-clk-plldiv", ++ of_at91sam9x5_clk_plldiv_setup); +diff --git a/drivers/clk/at91/clk-programmable.c b/drivers/clk/at91/clk-programmable.c +index 14b270b..bc0be62 100644 +--- a/drivers/clk/at91/clk-programmable.c ++++ b/drivers/clk/at91/clk-programmable.c +@@ -12,10 +12,8 @@ + #include + #include + #include +-#include +-#include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -24,6 +22,7 @@ + + #define PROG_STATUS_MASK(id) (1 << ((id) + 8)) + #define PROG_PRES_MASK 0x7 ++#define PROG_PRES(layout, pckr) ((pckr >> layout->pres_shift) & PROG_PRES_MASK) + #define PROG_MAX_RM9200_CSS 3 + + struct clk_programmable_layout { +@@ -34,7 +33,7 @@ struct clk_programmable_layout { + + struct clk_programmable { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + u8 id; + const struct clk_programmable_layout *layout; + }; +@@ -44,14 +43,12 @@ struct clk_programmable { + static unsigned long clk_programmable_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) + { +- u32 pres; + struct clk_programmable *prog = to_clk_programmable(hw); +- struct at91_pmc *pmc = prog->pmc; +- const struct clk_programmable_layout *layout = prog->layout; ++ unsigned int pckr; ++ ++ regmap_read(prog->regmap, AT91_PMC_PCKR(prog->id), &pckr); + +- pres = (pmc_read(pmc, AT91_PMC_PCKR(prog->id)) >> layout->pres_shift) & +- PROG_PRES_MASK; +- return parent_rate >> pres; ++ return parent_rate >> PROG_PRES(prog->layout, pckr); + } + + static int clk_programmable_determine_rate(struct clk_hw *hw, +@@ -101,36 +98,36 @@ static int clk_programmable_set_parent(struct clk_hw *hw, u8 index) + { + struct clk_programmable *prog = to_clk_programmable(hw); + const struct clk_programmable_layout *layout = prog->layout; +- struct at91_pmc *pmc = prog->pmc; +- u32 tmp = pmc_read(pmc, AT91_PMC_PCKR(prog->id)) & ~layout->css_mask; ++ unsigned int mask = layout->css_mask; ++ unsigned int pckr = 0; + + if (layout->have_slck_mck) +- tmp &= AT91_PMC_CSSMCK_MCK; ++ mask |= AT91_PMC_CSSMCK_MCK; + + if (index > layout->css_mask) { +- if (index > PROG_MAX_RM9200_CSS && layout->have_slck_mck) { +- tmp |= AT91_PMC_CSSMCK_MCK; +- return 0; +- } else { ++ if (index > PROG_MAX_RM9200_CSS && !layout->have_slck_mck) + return -EINVAL; +- } ++ ++ pckr |= AT91_PMC_CSSMCK_MCK; + } + +- pmc_write(pmc, AT91_PMC_PCKR(prog->id), tmp | index); ++ regmap_update_bits(prog->regmap, AT91_PMC_PCKR(prog->id), mask, pckr); ++ + return 0; + } + + static u8 clk_programmable_get_parent(struct clk_hw *hw) + { +- u32 tmp; +- u8 ret; + struct clk_programmable *prog = to_clk_programmable(hw); +- struct at91_pmc *pmc = prog->pmc; + const struct clk_programmable_layout *layout = prog->layout; ++ unsigned int pckr; ++ u8 ret; ++ ++ regmap_read(prog->regmap, AT91_PMC_PCKR(prog->id), &pckr); ++ ++ ret = pckr & layout->css_mask; + +- tmp = pmc_read(pmc, AT91_PMC_PCKR(prog->id)); +- ret = tmp & layout->css_mask; +- if (layout->have_slck_mck && (tmp & AT91_PMC_CSSMCK_MCK) && !ret) ++ if (layout->have_slck_mck && (pckr & AT91_PMC_CSSMCK_MCK) && !ret) + ret = PROG_MAX_RM9200_CSS + 1; + + return ret; +@@ -140,26 +137,27 @@ static int clk_programmable_set_rate(struct clk_hw *hw, unsigned long rate, + unsigned long parent_rate) + { + struct clk_programmable *prog = to_clk_programmable(hw); +- struct at91_pmc *pmc = prog->pmc; + const struct clk_programmable_layout *layout = prog->layout; + unsigned long div = parent_rate / rate; ++ unsigned int pckr; + int shift = 0; +- u32 tmp = pmc_read(pmc, AT91_PMC_PCKR(prog->id)) & +- ~(PROG_PRES_MASK << layout->pres_shift); ++ ++ regmap_read(prog->regmap, AT91_PMC_PCKR(prog->id), &pckr); + + if (!div) + return -EINVAL; + + shift = fls(div) - 1; + +- if (div != (1<= PROG_PRES_MASK) + return -EINVAL; + +- pmc_write(pmc, AT91_PMC_PCKR(prog->id), +- tmp | (shift << layout->pres_shift)); ++ regmap_update_bits(prog->regmap, AT91_PMC_PCKR(prog->id), ++ PROG_PRES_MASK << layout->pres_shift, ++ shift << layout->pres_shift); + + return 0; + } +@@ -173,7 +171,7 @@ static const struct clk_ops programmable_ops = { + }; + + static struct clk * __init +-at91_clk_register_programmable(struct at91_pmc *pmc, ++at91_clk_register_programmable(struct regmap *regmap, + const char *name, const char **parent_names, + u8 num_parents, u8 id, + const struct clk_programmable_layout *layout) +@@ -198,7 +196,7 @@ at91_clk_register_programmable(struct at91_pmc *pmc, + prog->id = id; + prog->layout = layout; + prog->hw.init = &init; +- prog->pmc = pmc; ++ prog->regmap = regmap; + + clk = clk_register(NULL, &prog->hw); + if (IS_ERR(clk)) +@@ -226,7 +224,7 @@ static const struct clk_programmable_layout at91sam9x5_programmable_layout = { + }; + + static void __init +-of_at91_clk_prog_setup(struct device_node *np, struct at91_pmc *pmc, ++of_at91_clk_prog_setup(struct device_node *np, + const struct clk_programmable_layout *layout) + { + int num; +@@ -236,6 +234,7 @@ of_at91_clk_prog_setup(struct device_node *np, struct at91_pmc *pmc, + const char *parent_names[PROG_SOURCE_MAX]; + const char *name; + struct device_node *progclknp; ++ struct regmap *regmap; + + num_parents = of_clk_get_parent_count(np); + if (num_parents <= 0 || num_parents > PROG_SOURCE_MAX) +@@ -247,6 +246,10 @@ of_at91_clk_prog_setup(struct device_node *np, struct at91_pmc *pmc, + if (!num || num > (PROG_ID_MAX + 1)) + return; + ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ + for_each_child_of_node(np, progclknp) { + if (of_property_read_u32(progclknp, "reg", &id)) + continue; +@@ -254,7 +257,7 @@ of_at91_clk_prog_setup(struct device_node *np, struct at91_pmc *pmc, + if (of_property_read_string(np, "clock-output-names", &name)) + name = progclknp->name; + +- clk = at91_clk_register_programmable(pmc, name, ++ clk = at91_clk_register_programmable(regmap, name, + parent_names, num_parents, + id, layout); + if (IS_ERR(clk)) +@@ -265,20 +268,23 @@ of_at91_clk_prog_setup(struct device_node *np, struct at91_pmc *pmc, + } + + +-void __init of_at91rm9200_clk_prog_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91rm9200_clk_prog_setup(struct device_node *np) + { +- of_at91_clk_prog_setup(np, pmc, &at91rm9200_programmable_layout); ++ of_at91_clk_prog_setup(np, &at91rm9200_programmable_layout); + } ++CLK_OF_DECLARE(at91rm9200_clk_prog, "atmel,at91rm9200-clk-programmable", ++ of_at91rm9200_clk_prog_setup); + +-void __init of_at91sam9g45_clk_prog_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9g45_clk_prog_setup(struct device_node *np) + { +- of_at91_clk_prog_setup(np, pmc, &at91sam9g45_programmable_layout); ++ of_at91_clk_prog_setup(np, &at91sam9g45_programmable_layout); + } ++CLK_OF_DECLARE(at91sam9g45_clk_prog, "atmel,at91sam9g45-clk-programmable", ++ of_at91sam9g45_clk_prog_setup); + +-void __init of_at91sam9x5_clk_prog_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9x5_clk_prog_setup(struct device_node *np) + { +- of_at91_clk_prog_setup(np, pmc, &at91sam9x5_programmable_layout); ++ of_at91_clk_prog_setup(np, &at91sam9x5_programmable_layout); + } ++CLK_OF_DECLARE(at91sam9x5_clk_prog, "atmel,at91sam9x5-clk-programmable", ++ of_at91sam9x5_clk_prog_setup); +diff --git a/drivers/clk/at91/clk-slow.c b/drivers/clk/at91/clk-slow.c +index d0d5076..221c096 100644 +--- a/drivers/clk/at91/clk-slow.c ++++ b/drivers/clk/at91/clk-slow.c +@@ -13,17 +13,11 @@ + #include + #include + #include +-#include + #include + #include + #include +-#include +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + + #include "pmc.h" + #include "sckc.h" +@@ -59,7 +53,7 @@ struct clk_slow_rc_osc { + + struct clk_sam9260_slow { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + }; + + #define to_clk_sam9260_slow(hw) container_of(hw, struct clk_sam9260_slow, hw) +@@ -393,8 +387,11 @@ void __init of_at91sam9x5_clk_slow_setup(struct device_node *np, + static u8 clk_sam9260_slow_get_parent(struct clk_hw *hw) + { + struct clk_sam9260_slow *slowck = to_clk_sam9260_slow(hw); ++ unsigned int status; + +- return !!(pmc_read(slowck->pmc, AT91_PMC_SR) & AT91_PMC_OSCSEL); ++ regmap_read(slowck->regmap, AT91_PMC_SR, &status); ++ ++ return status & AT91_PMC_OSCSEL ? 1 : 0; + } + + static const struct clk_ops sam9260_slow_ops = { +@@ -402,7 +399,7 @@ static const struct clk_ops sam9260_slow_ops = { + }; + + static struct clk * __init +-at91_clk_register_sam9260_slow(struct at91_pmc *pmc, ++at91_clk_register_sam9260_slow(struct regmap *regmap, + const char *name, + const char **parent_names, + int num_parents) +@@ -411,7 +408,7 @@ at91_clk_register_sam9260_slow(struct at91_pmc *pmc, + struct clk *clk = NULL; + struct clk_init_data init; + +- if (!pmc || !name) ++ if (!name) + return ERR_PTR(-EINVAL); + + if (!parent_names || !num_parents) +@@ -428,7 +425,7 @@ at91_clk_register_sam9260_slow(struct at91_pmc *pmc, + init.flags = 0; + + slowck->hw.init = &init; +- slowck->pmc = pmc; ++ slowck->regmap = regmap; + + clk = clk_register(NULL, &slowck->hw); + if (IS_ERR(clk)) +@@ -439,29 +436,34 @@ at91_clk_register_sam9260_slow(struct at91_pmc *pmc, + return clk; + } + +-void __init of_at91sam9260_clk_slow_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9260_clk_slow_setup(struct device_node *np) + { + struct clk *clk; + const char *parent_names[2]; + int num_parents; + const char *name = np->name; ++ struct regmap *regmap; + + num_parents = of_clk_get_parent_count(np); + if (num_parents != 2) + return; + + of_clk_parent_fill(np, parent_names, num_parents); ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; + + of_property_read_string(np, "clock-output-names", &name); + +- clk = at91_clk_register_sam9260_slow(pmc, name, parent_names, ++ clk = at91_clk_register_sam9260_slow(regmap, name, parent_names, + num_parents); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(at91sam9260_clk_slow, "atmel,at91sam9260-clk-slow", ++ of_at91sam9260_clk_slow_setup); + + /* + * FIXME: All slow clk users are not properly claiming it (get + prepare + +diff --git a/drivers/clk/at91/clk-smd.c b/drivers/clk/at91/clk-smd.c +index a7f8501..e6948a5 100644 +--- a/drivers/clk/at91/clk-smd.c ++++ b/drivers/clk/at91/clk-smd.c +@@ -12,8 +12,8 @@ + #include + #include + #include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -24,7 +24,7 @@ + + struct at91sam9x5_clk_smd { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + }; + + #define to_at91sam9x5_clk_smd(hw) \ +@@ -33,13 +33,13 @@ struct at91sam9x5_clk_smd { + static unsigned long at91sam9x5_clk_smd_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) + { +- u32 tmp; +- u8 smddiv; + struct at91sam9x5_clk_smd *smd = to_at91sam9x5_clk_smd(hw); +- struct at91_pmc *pmc = smd->pmc; ++ unsigned int smdr; ++ u8 smddiv; ++ ++ regmap_read(smd->regmap, AT91_PMC_SMD, &smdr); ++ smddiv = (smdr & AT91_PMC_SMD_DIV) >> SMD_DIV_SHIFT; + +- tmp = pmc_read(pmc, AT91_PMC_SMD); +- smddiv = (tmp & AT91_PMC_SMD_DIV) >> SMD_DIV_SHIFT; + return parent_rate / (smddiv + 1); + } + +@@ -67,40 +67,38 @@ static long at91sam9x5_clk_smd_round_rate(struct clk_hw *hw, unsigned long rate, + + static int at91sam9x5_clk_smd_set_parent(struct clk_hw *hw, u8 index) + { +- u32 tmp; + struct at91sam9x5_clk_smd *smd = to_at91sam9x5_clk_smd(hw); +- struct at91_pmc *pmc = smd->pmc; + + if (index > 1) + return -EINVAL; +- tmp = pmc_read(pmc, AT91_PMC_SMD) & ~AT91_PMC_SMDS; +- if (index) +- tmp |= AT91_PMC_SMDS; +- pmc_write(pmc, AT91_PMC_SMD, tmp); ++ ++ regmap_update_bits(smd->regmap, AT91_PMC_SMD, AT91_PMC_SMDS, ++ index ? AT91_PMC_SMDS : 0); ++ + return 0; + } + + static u8 at91sam9x5_clk_smd_get_parent(struct clk_hw *hw) + { + struct at91sam9x5_clk_smd *smd = to_at91sam9x5_clk_smd(hw); +- struct at91_pmc *pmc = smd->pmc; ++ unsigned int smdr; + +- return pmc_read(pmc, AT91_PMC_SMD) & AT91_PMC_SMDS; ++ regmap_read(smd->regmap, AT91_PMC_SMD, &smdr); ++ ++ return smdr & AT91_PMC_SMDS; + } + + static int at91sam9x5_clk_smd_set_rate(struct clk_hw *hw, unsigned long rate, + unsigned long parent_rate) + { +- u32 tmp; + struct at91sam9x5_clk_smd *smd = to_at91sam9x5_clk_smd(hw); +- struct at91_pmc *pmc = smd->pmc; + unsigned long div = parent_rate / rate; + + if (parent_rate % rate || div < 1 || div > (SMD_MAX_DIV + 1)) + return -EINVAL; +- tmp = pmc_read(pmc, AT91_PMC_SMD) & ~AT91_PMC_SMD_DIV; +- tmp |= (div - 1) << SMD_DIV_SHIFT; +- pmc_write(pmc, AT91_PMC_SMD, tmp); ++ ++ regmap_update_bits(smd->regmap, AT91_PMC_SMD, AT91_PMC_SMD_DIV, ++ (div - 1) << SMD_DIV_SHIFT); + + return 0; + } +@@ -114,7 +112,7 @@ static const struct clk_ops at91sam9x5_smd_ops = { + }; + + static struct clk * __init +-at91sam9x5_clk_register_smd(struct at91_pmc *pmc, const char *name, ++at91sam9x5_clk_register_smd(struct regmap *regmap, const char *name, + const char **parent_names, u8 num_parents) + { + struct at91sam9x5_clk_smd *smd; +@@ -132,7 +130,7 @@ at91sam9x5_clk_register_smd(struct at91_pmc *pmc, const char *name, + init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE; + + smd->hw.init = &init; +- smd->pmc = pmc; ++ smd->regmap = regmap; + + clk = clk_register(NULL, &smd->hw); + if (IS_ERR(clk)) +@@ -141,13 +139,13 @@ at91sam9x5_clk_register_smd(struct at91_pmc *pmc, const char *name, + return clk; + } + +-void __init of_at91sam9x5_clk_smd_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np) + { + struct clk *clk; + int num_parents; + const char *parent_names[SMD_SOURCE_MAX]; + const char *name = np->name; ++ struct regmap *regmap; + + num_parents = of_clk_get_parent_count(np); + if (num_parents <= 0 || num_parents > SMD_SOURCE_MAX) +@@ -157,10 +155,16 @@ void __init of_at91sam9x5_clk_smd_setup(struct device_node *np, + + of_property_read_string(np, "clock-output-names", &name); + +- clk = at91sam9x5_clk_register_smd(pmc, name, parent_names, ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ ++ clk = at91sam9x5_clk_register_smd(regmap, name, parent_names, + num_parents); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(at91sam9x5_clk_smd, "atmel,at91sam9x5-clk-smd", ++ of_at91sam9x5_clk_smd_setup); +diff --git a/drivers/clk/at91/clk-system.c b/drivers/clk/at91/clk-system.c +index 3f53143..8f35d81 100644 +--- a/drivers/clk/at91/clk-system.c ++++ b/drivers/clk/at91/clk-system.c +@@ -12,13 +12,8 @@ + #include + #include + #include +-#include +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -29,9 +24,7 @@ + #define to_clk_system(hw) container_of(hw, struct clk_system, hw) + struct clk_system { + struct clk_hw hw; +- struct at91_pmc *pmc; +- unsigned int irq; +- wait_queue_head_t wait; ++ struct regmap *regmap; + u8 id; + }; + +@@ -39,58 +32,54 @@ static inline int is_pck(int id) + { + return (id >= 8) && (id <= 15); + } +-static irqreturn_t clk_system_irq_handler(int irq, void *dev_id) ++ ++static inline bool clk_system_ready(struct regmap *regmap, int id) + { +- struct clk_system *sys = (struct clk_system *)dev_id; ++ unsigned int status; + +- wake_up(&sys->wait); +- disable_irq_nosync(sys->irq); ++ regmap_read(regmap, AT91_PMC_SR, &status); + +- return IRQ_HANDLED; ++ return status & (1 << id) ? 1 : 0; + } + + static int clk_system_prepare(struct clk_hw *hw) + { + struct clk_system *sys = to_clk_system(hw); +- struct at91_pmc *pmc = sys->pmc; +- u32 mask = 1 << sys->id; + +- pmc_write(pmc, AT91_PMC_SCER, mask); ++ regmap_write(sys->regmap, AT91_PMC_SCER, 1 << sys->id); + + if (!is_pck(sys->id)) + return 0; + +- while (!(pmc_read(pmc, AT91_PMC_SR) & mask)) { +- if (sys->irq) { +- enable_irq(sys->irq); +- wait_event(sys->wait, +- pmc_read(pmc, AT91_PMC_SR) & mask); +- } else +- cpu_relax(); +- } ++ while (!clk_system_ready(sys->regmap, sys->id)) ++ cpu_relax(); ++ + return 0; + } + + static void clk_system_unprepare(struct clk_hw *hw) + { + struct clk_system *sys = to_clk_system(hw); +- struct at91_pmc *pmc = sys->pmc; + +- pmc_write(pmc, AT91_PMC_SCDR, 1 << sys->id); ++ regmap_write(sys->regmap, AT91_PMC_SCDR, 1 << sys->id); + } + + static int clk_system_is_prepared(struct clk_hw *hw) + { + struct clk_system *sys = to_clk_system(hw); +- struct at91_pmc *pmc = sys->pmc; ++ unsigned int status; ++ ++ regmap_read(sys->regmap, AT91_PMC_SCSR, &status); + +- if (!(pmc_read(pmc, AT91_PMC_SCSR) & (1 << sys->id))) ++ if (!(status & (1 << sys->id))) + return 0; + + if (!is_pck(sys->id)) + return 1; + +- return !!(pmc_read(pmc, AT91_PMC_SR) & (1 << sys->id)); ++ regmap_read(sys->regmap, AT91_PMC_SR, &status); ++ ++ return status & (1 << sys->id) ? 1 : 0; + } + + static const struct clk_ops system_ops = { +@@ -100,13 +89,12 @@ static const struct clk_ops system_ops = { + }; + + static struct clk * __init +-at91_clk_register_system(struct at91_pmc *pmc, const char *name, +- const char *parent_name, u8 id, int irq) ++at91_clk_register_system(struct regmap *regmap, const char *name, ++ const char *parent_name, u8 id) + { + struct clk_system *sys; + struct clk *clk = NULL; + struct clk_init_data init; +- int ret; + + if (!parent_name || id > SYSTEM_MAX_ID) + return ERR_PTR(-EINVAL); +@@ -123,44 +111,33 @@ at91_clk_register_system(struct at91_pmc *pmc, const char *name, + + sys->id = id; + sys->hw.init = &init; +- sys->pmc = pmc; +- sys->irq = irq; +- if (irq) { +- init_waitqueue_head(&sys->wait); +- irq_set_status_flags(sys->irq, IRQ_NOAUTOEN); +- ret = request_irq(sys->irq, clk_system_irq_handler, +- IRQF_TRIGGER_HIGH, name, sys); +- if (ret) { +- kfree(sys); +- return ERR_PTR(ret); +- } +- } ++ sys->regmap = regmap; + + clk = clk_register(NULL, &sys->hw); +- if (IS_ERR(clk)) { +- if (irq) +- free_irq(sys->irq, sys); ++ if (IS_ERR(clk)) + kfree(sys); +- } + + return clk; + } + +-static void __init +-of_at91_clk_sys_setup(struct device_node *np, struct at91_pmc *pmc) ++static void __init of_at91rm9200_clk_sys_setup(struct device_node *np) + { + int num; +- int irq = 0; + u32 id; + struct clk *clk; + const char *name; + struct device_node *sysclknp; + const char *parent_name; ++ struct regmap *regmap; + + num = of_get_child_count(np); + if (num > (SYSTEM_MAX_ID + 1)) + return; + ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ + for_each_child_of_node(np, sysclknp) { + if (of_property_read_u32(sysclknp, "reg", &id)) + continue; +@@ -168,21 +145,14 @@ of_at91_clk_sys_setup(struct device_node *np, struct at91_pmc *pmc) + if (of_property_read_string(np, "clock-output-names", &name)) + name = sysclknp->name; + +- if (is_pck(id)) +- irq = irq_of_parse_and_map(sysclknp, 0); +- + parent_name = of_clk_get_parent_name(sysclknp, 0); + +- clk = at91_clk_register_system(pmc, name, parent_name, id, irq); ++ clk = at91_clk_register_system(regmap, name, parent_name, id); + if (IS_ERR(clk)) + continue; + + of_clk_add_provider(sysclknp, of_clk_src_simple_get, clk); + } + } +- +-void __init of_at91rm9200_clk_sys_setup(struct device_node *np, +- struct at91_pmc *pmc) +-{ +- of_at91_clk_sys_setup(np, pmc); +-} ++CLK_OF_DECLARE(at91rm9200_clk_sys, "atmel,at91rm9200-clk-system", ++ of_at91rm9200_clk_sys_setup); +diff --git a/drivers/clk/at91/clk-usb.c b/drivers/clk/at91/clk-usb.c +index 8ab8502..650ca45 100644 +--- a/drivers/clk/at91/clk-usb.c ++++ b/drivers/clk/at91/clk-usb.c +@@ -12,8 +12,8 @@ + #include + #include + #include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -27,7 +27,7 @@ + + struct at91sam9x5_clk_usb { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + }; + + #define to_at91sam9x5_clk_usb(hw) \ +@@ -35,7 +35,7 @@ struct at91sam9x5_clk_usb { + + struct at91rm9200_clk_usb { + struct clk_hw hw; +- struct at91_pmc *pmc; ++ struct regmap *regmap; + u32 divisors[4]; + }; + +@@ -45,13 +45,12 @@ struct at91rm9200_clk_usb { + static unsigned long at91sam9x5_clk_usb_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) + { +- u32 tmp; +- u8 usbdiv; + struct at91sam9x5_clk_usb *usb = to_at91sam9x5_clk_usb(hw); +- struct at91_pmc *pmc = usb->pmc; ++ unsigned int usbr; ++ u8 usbdiv; + +- tmp = pmc_read(pmc, AT91_PMC_USB); +- usbdiv = (tmp & AT91_PMC_OHCIUSBDIV) >> SAM9X5_USB_DIV_SHIFT; ++ regmap_read(usb->regmap, AT91_PMC_USB, &usbr); ++ usbdiv = (usbr & AT91_PMC_OHCIUSBDIV) >> SAM9X5_USB_DIV_SHIFT; + + return DIV_ROUND_CLOSEST(parent_rate, (usbdiv + 1)); + } +@@ -109,33 +108,31 @@ static int at91sam9x5_clk_usb_determine_rate(struct clk_hw *hw, + + static int at91sam9x5_clk_usb_set_parent(struct clk_hw *hw, u8 index) + { +- u32 tmp; + struct at91sam9x5_clk_usb *usb = to_at91sam9x5_clk_usb(hw); +- struct at91_pmc *pmc = usb->pmc; + + if (index > 1) + return -EINVAL; +- tmp = pmc_read(pmc, AT91_PMC_USB) & ~AT91_PMC_USBS; +- if (index) +- tmp |= AT91_PMC_USBS; +- pmc_write(pmc, AT91_PMC_USB, tmp); ++ ++ regmap_update_bits(usb->regmap, AT91_PMC_USB, AT91_PMC_USBS, ++ index ? AT91_PMC_USBS : 0); ++ + return 0; + } + + static u8 at91sam9x5_clk_usb_get_parent(struct clk_hw *hw) + { + struct at91sam9x5_clk_usb *usb = to_at91sam9x5_clk_usb(hw); +- struct at91_pmc *pmc = usb->pmc; ++ unsigned int usbr; + +- return pmc_read(pmc, AT91_PMC_USB) & AT91_PMC_USBS; ++ regmap_read(usb->regmap, AT91_PMC_USB, &usbr); ++ ++ return usbr & AT91_PMC_USBS; + } + + static int at91sam9x5_clk_usb_set_rate(struct clk_hw *hw, unsigned long rate, + unsigned long parent_rate) + { +- u32 tmp; + struct at91sam9x5_clk_usb *usb = to_at91sam9x5_clk_usb(hw); +- struct at91_pmc *pmc = usb->pmc; + unsigned long div; + + if (!rate) +@@ -145,9 +142,8 @@ static int at91sam9x5_clk_usb_set_rate(struct clk_hw *hw, unsigned long rate, + if (div > SAM9X5_USB_MAX_DIV + 1 || !div) + return -EINVAL; + +- tmp = pmc_read(pmc, AT91_PMC_USB) & ~AT91_PMC_OHCIUSBDIV; +- tmp |= (div - 1) << SAM9X5_USB_DIV_SHIFT; +- pmc_write(pmc, AT91_PMC_USB, tmp); ++ regmap_update_bits(usb->regmap, AT91_PMC_USB, AT91_PMC_OHCIUSBDIV, ++ (div - 1) << SAM9X5_USB_DIV_SHIFT); + + return 0; + } +@@ -163,28 +159,28 @@ static const struct clk_ops at91sam9x5_usb_ops = { + static int at91sam9n12_clk_usb_enable(struct clk_hw *hw) + { + struct at91sam9x5_clk_usb *usb = to_at91sam9x5_clk_usb(hw); +- struct at91_pmc *pmc = usb->pmc; + +- pmc_write(pmc, AT91_PMC_USB, +- pmc_read(pmc, AT91_PMC_USB) | AT91_PMC_USBS); ++ regmap_update_bits(usb->regmap, AT91_PMC_USB, AT91_PMC_USBS, ++ AT91_PMC_USBS); ++ + return 0; + } + + static void at91sam9n12_clk_usb_disable(struct clk_hw *hw) + { + struct at91sam9x5_clk_usb *usb = to_at91sam9x5_clk_usb(hw); +- struct at91_pmc *pmc = usb->pmc; + +- pmc_write(pmc, AT91_PMC_USB, +- pmc_read(pmc, AT91_PMC_USB) & ~AT91_PMC_USBS); ++ regmap_update_bits(usb->regmap, AT91_PMC_USB, AT91_PMC_USBS, 0); + } + + static int at91sam9n12_clk_usb_is_enabled(struct clk_hw *hw) + { + struct at91sam9x5_clk_usb *usb = to_at91sam9x5_clk_usb(hw); +- struct at91_pmc *pmc = usb->pmc; ++ unsigned int usbr; + +- return !!(pmc_read(pmc, AT91_PMC_USB) & AT91_PMC_USBS); ++ regmap_read(usb->regmap, AT91_PMC_USB, &usbr); ++ ++ return usbr & AT91_PMC_USBS; + } + + static const struct clk_ops at91sam9n12_usb_ops = { +@@ -197,7 +193,7 @@ static const struct clk_ops at91sam9n12_usb_ops = { + }; + + static struct clk * __init +-at91sam9x5_clk_register_usb(struct at91_pmc *pmc, const char *name, ++at91sam9x5_clk_register_usb(struct regmap *regmap, const char *name, + const char **parent_names, u8 num_parents) + { + struct at91sam9x5_clk_usb *usb; +@@ -216,7 +212,7 @@ at91sam9x5_clk_register_usb(struct at91_pmc *pmc, const char *name, + CLK_SET_RATE_PARENT; + + usb->hw.init = &init; +- usb->pmc = pmc; ++ usb->regmap = regmap; + + clk = clk_register(NULL, &usb->hw); + if (IS_ERR(clk)) +@@ -226,7 +222,7 @@ at91sam9x5_clk_register_usb(struct at91_pmc *pmc, const char *name, + } + + static struct clk * __init +-at91sam9n12_clk_register_usb(struct at91_pmc *pmc, const char *name, ++at91sam9n12_clk_register_usb(struct regmap *regmap, const char *name, + const char *parent_name) + { + struct at91sam9x5_clk_usb *usb; +@@ -244,7 +240,7 @@ at91sam9n12_clk_register_usb(struct at91_pmc *pmc, const char *name, + init.flags = CLK_SET_RATE_GATE | CLK_SET_RATE_PARENT; + + usb->hw.init = &init; +- usb->pmc = pmc; ++ usb->regmap = regmap; + + clk = clk_register(NULL, &usb->hw); + if (IS_ERR(clk)) +@@ -257,12 +253,12 @@ static unsigned long at91rm9200_clk_usb_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) + { + struct at91rm9200_clk_usb *usb = to_at91rm9200_clk_usb(hw); +- struct at91_pmc *pmc = usb->pmc; +- u32 tmp; ++ unsigned int pllbr; + u8 usbdiv; + +- tmp = pmc_read(pmc, AT91_CKGR_PLLBR); +- usbdiv = (tmp & AT91_PMC_USBDIV) >> RM9200_USB_DIV_SHIFT; ++ regmap_read(usb->regmap, AT91_CKGR_PLLBR, &pllbr); ++ ++ usbdiv = (pllbr & AT91_PMC_USBDIV) >> RM9200_USB_DIV_SHIFT; + if (usb->divisors[usbdiv]) + return parent_rate / usb->divisors[usbdiv]; + +@@ -310,10 +306,8 @@ static long at91rm9200_clk_usb_round_rate(struct clk_hw *hw, unsigned long rate, + static int at91rm9200_clk_usb_set_rate(struct clk_hw *hw, unsigned long rate, + unsigned long parent_rate) + { +- u32 tmp; + int i; + struct at91rm9200_clk_usb *usb = to_at91rm9200_clk_usb(hw); +- struct at91_pmc *pmc = usb->pmc; + unsigned long div; + + if (!rate) +@@ -323,10 +317,10 @@ static int at91rm9200_clk_usb_set_rate(struct clk_hw *hw, unsigned long rate, + + for (i = 0; i < RM9200_USB_DIV_TAB_SIZE; i++) { + if (usb->divisors[i] == div) { +- tmp = pmc_read(pmc, AT91_CKGR_PLLBR) & +- ~AT91_PMC_USBDIV; +- tmp |= i << RM9200_USB_DIV_SHIFT; +- pmc_write(pmc, AT91_CKGR_PLLBR, tmp); ++ regmap_update_bits(usb->regmap, AT91_CKGR_PLLBR, ++ AT91_PMC_USBDIV, ++ i << RM9200_USB_DIV_SHIFT); ++ + return 0; + } + } +@@ -341,7 +335,7 @@ static const struct clk_ops at91rm9200_usb_ops = { + }; + + static struct clk * __init +-at91rm9200_clk_register_usb(struct at91_pmc *pmc, const char *name, ++at91rm9200_clk_register_usb(struct regmap *regmap, const char *name, + const char *parent_name, const u32 *divisors) + { + struct at91rm9200_clk_usb *usb; +@@ -359,7 +353,7 @@ at91rm9200_clk_register_usb(struct at91_pmc *pmc, const char *name, + init.flags = CLK_SET_RATE_PARENT; + + usb->hw.init = &init; +- usb->pmc = pmc; ++ usb->regmap = regmap; + memcpy(usb->divisors, divisors, sizeof(usb->divisors)); + + clk = clk_register(NULL, &usb->hw); +@@ -369,13 +363,13 @@ at91rm9200_clk_register_usb(struct at91_pmc *pmc, const char *name, + return clk; + } + +-void __init of_at91sam9x5_clk_usb_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np) + { + struct clk *clk; + int num_parents; + const char *parent_names[USB_SOURCE_MAX]; + const char *name = np->name; ++ struct regmap *regmap; + + num_parents = of_clk_get_parent_count(np); + if (num_parents <= 0 || num_parents > USB_SOURCE_MAX) +@@ -385,19 +379,26 @@ void __init of_at91sam9x5_clk_usb_setup(struct device_node *np, + + of_property_read_string(np, "clock-output-names", &name); + +- clk = at91sam9x5_clk_register_usb(pmc, name, parent_names, num_parents); ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ ++ clk = at91sam9x5_clk_register_usb(regmap, name, parent_names, ++ num_parents); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(at91sam9x5_clk_usb, "atmel,at91sam9x5-clk-usb", ++ of_at91sam9x5_clk_usb_setup); + +-void __init of_at91sam9n12_clk_usb_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np) + { + struct clk *clk; + const char *parent_name; + const char *name = np->name; ++ struct regmap *regmap; + + parent_name = of_clk_get_parent_name(np, 0); + if (!parent_name) +@@ -405,20 +406,26 @@ void __init of_at91sam9n12_clk_usb_setup(struct device_node *np, + + of_property_read_string(np, "clock-output-names", &name); + +- clk = at91sam9n12_clk_register_usb(pmc, name, parent_name); ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ ++ clk = at91sam9n12_clk_register_usb(regmap, name, parent_name); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(at91sam9n12_clk_usb, "atmel,at91sam9n12-clk-usb", ++ of_at91sam9n12_clk_usb_setup); + +-void __init of_at91rm9200_clk_usb_setup(struct device_node *np, +- struct at91_pmc *pmc) ++static void __init of_at91rm9200_clk_usb_setup(struct device_node *np) + { + struct clk *clk; + const char *parent_name; + const char *name = np->name; + u32 divisors[4] = {0, 0, 0, 0}; ++ struct regmap *regmap; + + parent_name = of_clk_get_parent_name(np, 0); + if (!parent_name) +@@ -430,9 +437,15 @@ void __init of_at91rm9200_clk_usb_setup(struct device_node *np, + + of_property_read_string(np, "clock-output-names", &name); + +- clk = at91rm9200_clk_register_usb(pmc, name, parent_name, divisors); ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) ++ return; ++ ++ clk = at91rm9200_clk_register_usb(regmap, name, parent_name, divisors); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + } ++CLK_OF_DECLARE(at91rm9200_clk_usb, "atmel,at91rm9200-clk-usb", ++ of_at91rm9200_clk_usb_setup); +diff --git a/drivers/clk/at91/clk-utmi.c b/drivers/clk/at91/clk-utmi.c +index ca561e9..61fcf39 100644 +--- a/drivers/clk/at91/clk-utmi.c ++++ b/drivers/clk/at91/clk-utmi.c +@@ -11,14 +11,9 @@ + #include + #include + #include +-#include +-#include + #include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + + #include "pmc.h" + +@@ -26,37 +21,30 @@ + + struct clk_utmi { + struct clk_hw hw; +- struct at91_pmc *pmc; +- unsigned int irq; +- wait_queue_head_t wait; ++ struct regmap *regmap; + }; + + #define to_clk_utmi(hw) container_of(hw, struct clk_utmi, hw) + +-static irqreturn_t clk_utmi_irq_handler(int irq, void *dev_id) ++static inline bool clk_utmi_ready(struct regmap *regmap) + { +- struct clk_utmi *utmi = (struct clk_utmi *)dev_id; ++ unsigned int status; + +- wake_up(&utmi->wait); +- disable_irq_nosync(utmi->irq); ++ regmap_read(regmap, AT91_PMC_SR, &status); + +- return IRQ_HANDLED; ++ return status & AT91_PMC_LOCKU; + } + + static int clk_utmi_prepare(struct clk_hw *hw) + { + struct clk_utmi *utmi = to_clk_utmi(hw); +- struct at91_pmc *pmc = utmi->pmc; +- u32 tmp = pmc_read(pmc, AT91_CKGR_UCKR) | AT91_PMC_UPLLEN | +- AT91_PMC_UPLLCOUNT | AT91_PMC_BIASEN; ++ unsigned int uckr = AT91_PMC_UPLLEN | AT91_PMC_UPLLCOUNT | ++ AT91_PMC_BIASEN; + +- pmc_write(pmc, AT91_CKGR_UCKR, tmp); ++ regmap_update_bits(utmi->regmap, AT91_CKGR_UCKR, uckr, uckr); + +- while (!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_LOCKU)) { +- enable_irq(utmi->irq); +- wait_event(utmi->wait, +- pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_LOCKU); +- } ++ while (!clk_utmi_ready(utmi->regmap)) ++ cpu_relax(); + + return 0; + } +@@ -64,18 +52,15 @@ static int clk_utmi_prepare(struct clk_hw *hw) + static int clk_utmi_is_prepared(struct clk_hw *hw) + { + struct clk_utmi *utmi = to_clk_utmi(hw); +- struct at91_pmc *pmc = utmi->pmc; + +- return !!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_LOCKU); ++ return clk_utmi_ready(utmi->regmap); + } + + static void clk_utmi_unprepare(struct clk_hw *hw) + { + struct clk_utmi *utmi = to_clk_utmi(hw); +- struct at91_pmc *pmc = utmi->pmc; +- u32 tmp = pmc_read(pmc, AT91_CKGR_UCKR) & ~AT91_PMC_UPLLEN; + +- pmc_write(pmc, AT91_CKGR_UCKR, tmp); ++ regmap_update_bits(utmi->regmap, AT91_CKGR_UCKR, AT91_PMC_UPLLEN, 0); + } + + static unsigned long clk_utmi_recalc_rate(struct clk_hw *hw, +@@ -93,10 +78,9 @@ static const struct clk_ops utmi_ops = { + }; + + static struct clk * __init +-at91_clk_register_utmi(struct at91_pmc *pmc, unsigned int irq, ++at91_clk_register_utmi(struct regmap *regmap, + const char *name, const char *parent_name) + { +- int ret; + struct clk_utmi *utmi; + struct clk *clk = NULL; + struct clk_init_data init; +@@ -112,52 +96,36 @@ at91_clk_register_utmi(struct at91_pmc *pmc, unsigned int irq, + init.flags = CLK_SET_RATE_GATE; + + utmi->hw.init = &init; +- utmi->pmc = pmc; +- utmi->irq = irq; +- init_waitqueue_head(&utmi->wait); +- irq_set_status_flags(utmi->irq, IRQ_NOAUTOEN); +- ret = request_irq(utmi->irq, clk_utmi_irq_handler, +- IRQF_TRIGGER_HIGH, "clk-utmi", utmi); +- if (ret) { +- kfree(utmi); +- return ERR_PTR(ret); +- } ++ utmi->regmap = regmap; + + clk = clk_register(NULL, &utmi->hw); +- if (IS_ERR(clk)) { +- free_irq(utmi->irq, utmi); ++ if (IS_ERR(clk)) + kfree(utmi); +- } + + return clk; + } + +-static void __init +-of_at91_clk_utmi_setup(struct device_node *np, struct at91_pmc *pmc) ++static void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np) + { +- unsigned int irq; + struct clk *clk; + const char *parent_name; + const char *name = np->name; ++ struct regmap *regmap; + + parent_name = of_clk_get_parent_name(np, 0); + + of_property_read_string(np, "clock-output-names", &name); + +- irq = irq_of_parse_and_map(np, 0); +- if (!irq) ++ regmap = syscon_node_to_regmap(of_get_parent(np)); ++ if (IS_ERR(regmap)) + return; + +- clk = at91_clk_register_utmi(pmc, irq, name, parent_name); ++ clk = at91_clk_register_utmi(regmap, name, parent_name); + if (IS_ERR(clk)) + return; + + of_clk_add_provider(np, of_clk_src_simple_get, clk); + return; + } +- +-void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np, +- struct at91_pmc *pmc) +-{ +- of_at91_clk_utmi_setup(np, pmc); +-} ++CLK_OF_DECLARE(at91sam9x5_clk_utmi, "atmel,at91sam9x5-clk-utmi", ++ of_at91sam9x5_clk_utmi_setup); +diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c +index 8476b57..526df5b 100644 +--- a/drivers/clk/at91/pmc.c ++++ b/drivers/clk/at91/pmc.c +@@ -12,36 +12,13 @@ + #include + #include + #include +-#include +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + + #include + + #include "pmc.h" + +-void __iomem *at91_pmc_base; +-EXPORT_SYMBOL_GPL(at91_pmc_base); +- +-void at91rm9200_idle(void) +-{ +- /* +- * Disable the processor clock. The processor will be automatically +- * re-enabled by an interrupt or by a reset. +- */ +- at91_pmc_write(AT91_PMC_SCDR, AT91_PMC_PCK); +-} +- +-void at91sam9_idle(void) +-{ +- at91_pmc_write(AT91_PMC_SCDR, AT91_PMC_PCK); +- cpu_do_idle(); +-} +- + int of_at91_get_clk_range(struct device_node *np, const char *propname, + struct clk_range *range) + { +@@ -64,402 +41,3 @@ int of_at91_get_clk_range(struct device_node *np, const char *propname, + return 0; + } + EXPORT_SYMBOL_GPL(of_at91_get_clk_range); +- +-static void pmc_irq_mask(struct irq_data *d) +-{ +- struct at91_pmc *pmc = irq_data_get_irq_chip_data(d); +- +- pmc_write(pmc, AT91_PMC_IDR, 1 << d->hwirq); +-} +- +-static void pmc_irq_unmask(struct irq_data *d) +-{ +- struct at91_pmc *pmc = irq_data_get_irq_chip_data(d); +- +- pmc_write(pmc, AT91_PMC_IER, 1 << d->hwirq); +-} +- +-static int pmc_irq_set_type(struct irq_data *d, unsigned type) +-{ +- if (type != IRQ_TYPE_LEVEL_HIGH) { +- pr_warn("PMC: type not supported (support only IRQ_TYPE_LEVEL_HIGH type)\n"); +- return -EINVAL; +- } +- +- return 0; +-} +- +-static void pmc_irq_suspend(struct irq_data *d) +-{ +- struct at91_pmc *pmc = irq_data_get_irq_chip_data(d); +- +- pmc->imr = pmc_read(pmc, AT91_PMC_IMR); +- pmc_write(pmc, AT91_PMC_IDR, pmc->imr); +-} +- +-static void pmc_irq_resume(struct irq_data *d) +-{ +- struct at91_pmc *pmc = irq_data_get_irq_chip_data(d); +- +- pmc_write(pmc, AT91_PMC_IER, pmc->imr); +-} +- +-static struct irq_chip pmc_irq = { +- .name = "PMC", +- .irq_disable = pmc_irq_mask, +- .irq_mask = pmc_irq_mask, +- .irq_unmask = pmc_irq_unmask, +- .irq_set_type = pmc_irq_set_type, +- .irq_suspend = pmc_irq_suspend, +- .irq_resume = pmc_irq_resume, +-}; +- +-static struct lock_class_key pmc_lock_class; +- +-static int pmc_irq_map(struct irq_domain *h, unsigned int virq, +- irq_hw_number_t hw) +-{ +- struct at91_pmc *pmc = h->host_data; +- +- irq_set_lockdep_class(virq, &pmc_lock_class); +- +- irq_set_chip_and_handler(virq, &pmc_irq, +- handle_level_irq); +- irq_set_chip_data(virq, pmc); +- +- return 0; +-} +- +-static int pmc_irq_domain_xlate(struct irq_domain *d, +- struct device_node *ctrlr, +- const u32 *intspec, unsigned int intsize, +- irq_hw_number_t *out_hwirq, +- unsigned int *out_type) +-{ +- struct at91_pmc *pmc = d->host_data; +- const struct at91_pmc_caps *caps = pmc->caps; +- +- if (WARN_ON(intsize < 1)) +- return -EINVAL; +- +- *out_hwirq = intspec[0]; +- +- if (!(caps->available_irqs & (1 << *out_hwirq))) +- return -EINVAL; +- +- *out_type = IRQ_TYPE_LEVEL_HIGH; +- +- return 0; +-} +- +-static const struct irq_domain_ops pmc_irq_ops = { +- .map = pmc_irq_map, +- .xlate = pmc_irq_domain_xlate, +-}; +- +-static irqreturn_t pmc_irq_handler(int irq, void *data) +-{ +- struct at91_pmc *pmc = (struct at91_pmc *)data; +- unsigned long sr; +- int n; +- +- sr = pmc_read(pmc, AT91_PMC_SR) & pmc_read(pmc, AT91_PMC_IMR); +- if (!sr) +- return IRQ_NONE; +- +- for_each_set_bit(n, &sr, BITS_PER_LONG) +- generic_handle_irq(irq_find_mapping(pmc->irqdomain, n)); +- +- return IRQ_HANDLED; +-} +- +-static const struct at91_pmc_caps at91rm9200_caps = { +- .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | AT91_PMC_LOCKB | +- AT91_PMC_MCKRDY | AT91_PMC_PCK0RDY | +- AT91_PMC_PCK1RDY | AT91_PMC_PCK2RDY | +- AT91_PMC_PCK3RDY, +-}; +- +-static const struct at91_pmc_caps at91sam9260_caps = { +- .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | AT91_PMC_LOCKB | +- AT91_PMC_MCKRDY | AT91_PMC_PCK0RDY | +- AT91_PMC_PCK1RDY, +-}; +- +-static const struct at91_pmc_caps at91sam9g45_caps = { +- .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | AT91_PMC_MCKRDY | +- AT91_PMC_LOCKU | AT91_PMC_PCK0RDY | +- AT91_PMC_PCK1RDY, +-}; +- +-static const struct at91_pmc_caps at91sam9n12_caps = { +- .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | AT91_PMC_LOCKB | +- AT91_PMC_MCKRDY | AT91_PMC_PCK0RDY | +- AT91_PMC_PCK1RDY | AT91_PMC_MOSCSELS | +- AT91_PMC_MOSCRCS | AT91_PMC_CFDEV, +-}; +- +-static const struct at91_pmc_caps at91sam9x5_caps = { +- .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | AT91_PMC_MCKRDY | +- AT91_PMC_LOCKU | AT91_PMC_PCK0RDY | +- AT91_PMC_PCK1RDY | AT91_PMC_MOSCSELS | +- AT91_PMC_MOSCRCS | AT91_PMC_CFDEV, +-}; +- +-static const struct at91_pmc_caps sama5d2_caps = { +- .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | AT91_PMC_MCKRDY | +- AT91_PMC_LOCKU | AT91_PMC_PCK0RDY | +- AT91_PMC_PCK1RDY | AT91_PMC_PCK2RDY | +- AT91_PMC_MOSCSELS | AT91_PMC_MOSCRCS | +- AT91_PMC_CFDEV | AT91_PMC_GCKRDY, +-}; +- +-static const struct at91_pmc_caps sama5d3_caps = { +- .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | AT91_PMC_MCKRDY | +- AT91_PMC_LOCKU | AT91_PMC_PCK0RDY | +- AT91_PMC_PCK1RDY | AT91_PMC_PCK2RDY | +- AT91_PMC_MOSCSELS | AT91_PMC_MOSCRCS | +- AT91_PMC_CFDEV, +-}; +- +-static struct at91_pmc *__init at91_pmc_init(struct device_node *np, +- void __iomem *regbase, int virq, +- const struct at91_pmc_caps *caps) +-{ +- struct at91_pmc *pmc; +- +- if (!regbase || !virq || !caps) +- return NULL; +- +- at91_pmc_base = regbase; +- +- pmc = kzalloc(sizeof(*pmc), GFP_KERNEL); +- if (!pmc) +- return NULL; +- +- spin_lock_init(&pmc->lock); +- pmc->regbase = regbase; +- pmc->virq = virq; +- pmc->caps = caps; +- +- pmc->irqdomain = irq_domain_add_linear(np, 32, &pmc_irq_ops, pmc); +- +- if (!pmc->irqdomain) +- goto out_free_pmc; +- +- pmc_write(pmc, AT91_PMC_IDR, 0xffffffff); +- if (request_irq(pmc->virq, pmc_irq_handler, +- IRQF_SHARED | IRQF_COND_SUSPEND, "pmc", pmc)) +- goto out_remove_irqdomain; +- +- return pmc; +- +-out_remove_irqdomain: +- irq_domain_remove(pmc->irqdomain); +-out_free_pmc: +- kfree(pmc); +- +- return NULL; +-} +- +-static const struct of_device_id pmc_clk_ids[] __initconst = { +- /* Slow oscillator */ +- { +- .compatible = "atmel,at91sam9260-clk-slow", +- .data = of_at91sam9260_clk_slow_setup, +- }, +- /* Main clock */ +- { +- .compatible = "atmel,at91rm9200-clk-main-osc", +- .data = of_at91rm9200_clk_main_osc_setup, +- }, +- { +- .compatible = "atmel,at91sam9x5-clk-main-rc-osc", +- .data = of_at91sam9x5_clk_main_rc_osc_setup, +- }, +- { +- .compatible = "atmel,at91rm9200-clk-main", +- .data = of_at91rm9200_clk_main_setup, +- }, +- { +- .compatible = "atmel,at91sam9x5-clk-main", +- .data = of_at91sam9x5_clk_main_setup, +- }, +- /* PLL clocks */ +- { +- .compatible = "atmel,at91rm9200-clk-pll", +- .data = of_at91rm9200_clk_pll_setup, +- }, +- { +- .compatible = "atmel,at91sam9g45-clk-pll", +- .data = of_at91sam9g45_clk_pll_setup, +- }, +- { +- .compatible = "atmel,at91sam9g20-clk-pllb", +- .data = of_at91sam9g20_clk_pllb_setup, +- }, +- { +- .compatible = "atmel,sama5d3-clk-pll", +- .data = of_sama5d3_clk_pll_setup, +- }, +- { +- .compatible = "atmel,at91sam9x5-clk-plldiv", +- .data = of_at91sam9x5_clk_plldiv_setup, +- }, +- /* Master clock */ +- { +- .compatible = "atmel,at91rm9200-clk-master", +- .data = of_at91rm9200_clk_master_setup, +- }, +- { +- .compatible = "atmel,at91sam9x5-clk-master", +- .data = of_at91sam9x5_clk_master_setup, +- }, +- /* System clocks */ +- { +- .compatible = "atmel,at91rm9200-clk-system", +- .data = of_at91rm9200_clk_sys_setup, +- }, +- /* Peripheral clocks */ +- { +- .compatible = "atmel,at91rm9200-clk-peripheral", +- .data = of_at91rm9200_clk_periph_setup, +- }, +- { +- .compatible = "atmel,at91sam9x5-clk-peripheral", +- .data = of_at91sam9x5_clk_periph_setup, +- }, +- /* Programmable clocks */ +- { +- .compatible = "atmel,at91rm9200-clk-programmable", +- .data = of_at91rm9200_clk_prog_setup, +- }, +- { +- .compatible = "atmel,at91sam9g45-clk-programmable", +- .data = of_at91sam9g45_clk_prog_setup, +- }, +- { +- .compatible = "atmel,at91sam9x5-clk-programmable", +- .data = of_at91sam9x5_clk_prog_setup, +- }, +- /* UTMI clock */ +-#if defined(CONFIG_HAVE_AT91_UTMI) +- { +- .compatible = "atmel,at91sam9x5-clk-utmi", +- .data = of_at91sam9x5_clk_utmi_setup, +- }, +-#endif +- /* USB clock */ +-#if defined(CONFIG_HAVE_AT91_USB_CLK) +- { +- .compatible = "atmel,at91rm9200-clk-usb", +- .data = of_at91rm9200_clk_usb_setup, +- }, +- { +- .compatible = "atmel,at91sam9x5-clk-usb", +- .data = of_at91sam9x5_clk_usb_setup, +- }, +- { +- .compatible = "atmel,at91sam9n12-clk-usb", +- .data = of_at91sam9n12_clk_usb_setup, +- }, +-#endif +- /* SMD clock */ +-#if defined(CONFIG_HAVE_AT91_SMD) +- { +- .compatible = "atmel,at91sam9x5-clk-smd", +- .data = of_at91sam9x5_clk_smd_setup, +- }, +-#endif +-#if defined(CONFIG_HAVE_AT91_H32MX) +- { +- .compatible = "atmel,sama5d4-clk-h32mx", +- .data = of_sama5d4_clk_h32mx_setup, +- }, +-#endif +-#if defined(CONFIG_HAVE_AT91_GENERATED_CLK) +- { +- .compatible = "atmel,sama5d2-clk-generated", +- .data = of_sama5d2_clk_generated_setup, +- }, +-#endif +- { /*sentinel*/ } +-}; +- +-static void __init of_at91_pmc_setup(struct device_node *np, +- const struct at91_pmc_caps *caps) +-{ +- struct at91_pmc *pmc; +- struct device_node *childnp; +- void (*clk_setup)(struct device_node *, struct at91_pmc *); +- const struct of_device_id *clk_id; +- void __iomem *regbase = of_iomap(np, 0); +- int virq; +- +- if (!regbase) +- return; +- +- virq = irq_of_parse_and_map(np, 0); +- if (!virq) +- return; +- +- pmc = at91_pmc_init(np, regbase, virq, caps); +- if (!pmc) +- return; +- for_each_child_of_node(np, childnp) { +- clk_id = of_match_node(pmc_clk_ids, childnp); +- if (!clk_id) +- continue; +- clk_setup = clk_id->data; +- clk_setup(childnp, pmc); +- } +-} +- +-static void __init of_at91rm9200_pmc_setup(struct device_node *np) +-{ +- of_at91_pmc_setup(np, &at91rm9200_caps); +-} +-CLK_OF_DECLARE(at91rm9200_clk_pmc, "atmel,at91rm9200-pmc", +- of_at91rm9200_pmc_setup); +- +-static void __init of_at91sam9260_pmc_setup(struct device_node *np) +-{ +- of_at91_pmc_setup(np, &at91sam9260_caps); +-} +-CLK_OF_DECLARE(at91sam9260_clk_pmc, "atmel,at91sam9260-pmc", +- of_at91sam9260_pmc_setup); +- +-static void __init of_at91sam9g45_pmc_setup(struct device_node *np) +-{ +- of_at91_pmc_setup(np, &at91sam9g45_caps); +-} +-CLK_OF_DECLARE(at91sam9g45_clk_pmc, "atmel,at91sam9g45-pmc", +- of_at91sam9g45_pmc_setup); +- +-static void __init of_at91sam9n12_pmc_setup(struct device_node *np) +-{ +- of_at91_pmc_setup(np, &at91sam9n12_caps); +-} +-CLK_OF_DECLARE(at91sam9n12_clk_pmc, "atmel,at91sam9n12-pmc", +- of_at91sam9n12_pmc_setup); +- +-static void __init of_at91sam9x5_pmc_setup(struct device_node *np) +-{ +- of_at91_pmc_setup(np, &at91sam9x5_caps); +-} +-CLK_OF_DECLARE(at91sam9x5_clk_pmc, "atmel,at91sam9x5-pmc", +- of_at91sam9x5_pmc_setup); +- +-static void __init of_sama5d2_pmc_setup(struct device_node *np) +-{ +- of_at91_pmc_setup(np, &sama5d2_caps); +-} +-CLK_OF_DECLARE(sama5d2_clk_pmc, "atmel,sama5d2-pmc", +- of_sama5d2_pmc_setup); +- +-static void __init of_sama5d3_pmc_setup(struct device_node *np) +-{ +- of_at91_pmc_setup(np, &sama5d3_caps); +-} +-CLK_OF_DECLARE(sama5d3_clk_pmc, "atmel,sama5d3-pmc", +- of_sama5d3_pmc_setup); +diff --git a/drivers/clk/at91/pmc.h b/drivers/clk/at91/pmc.h +index f657392..5771fff 100644 +--- a/drivers/clk/at91/pmc.h ++++ b/drivers/clk/at91/pmc.h +@@ -14,8 +14,11 @@ + + #include + #include ++#include + #include + ++extern spinlock_t pmc_pcr_lock; ++ + struct clk_range { + unsigned long min; + unsigned long max; +@@ -23,102 +26,7 @@ struct clk_range { + + #define CLK_RANGE(MIN, MAX) {.min = MIN, .max = MAX,} + +-struct at91_pmc_caps { +- u32 available_irqs; +-}; +- +-struct at91_pmc { +- void __iomem *regbase; +- int virq; +- spinlock_t lock; +- const struct at91_pmc_caps *caps; +- struct irq_domain *irqdomain; +- u32 imr; +-}; +- +-static inline void pmc_lock(struct at91_pmc *pmc) +-{ +- spin_lock(&pmc->lock); +-} +- +-static inline void pmc_unlock(struct at91_pmc *pmc) +-{ +- spin_unlock(&pmc->lock); +-} +- +-static inline u32 pmc_read(struct at91_pmc *pmc, int offset) +-{ +- return readl(pmc->regbase + offset); +-} +- +-static inline void pmc_write(struct at91_pmc *pmc, int offset, u32 value) +-{ +- writel(value, pmc->regbase + offset); +-} +- + int of_at91_get_clk_range(struct device_node *np, const char *propname, + struct clk_range *range); + +-void of_at91sam9260_clk_slow_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_at91rm9200_clk_main_osc_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9x5_clk_main_rc_osc_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91rm9200_clk_main_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9x5_clk_main_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_at91rm9200_clk_pll_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9g45_clk_pll_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9g20_clk_pllb_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_sama5d3_clk_pll_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9x5_clk_plldiv_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_at91rm9200_clk_master_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9x5_clk_master_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_at91rm9200_clk_sys_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_at91rm9200_clk_periph_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9x5_clk_periph_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_at91rm9200_clk_prog_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9g45_clk_prog_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9x5_clk_prog_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_at91sam9x5_clk_utmi_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_at91rm9200_clk_usb_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9x5_clk_usb_setup(struct device_node *np, +- struct at91_pmc *pmc); +-void of_at91sam9n12_clk_usb_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_at91sam9x5_clk_smd_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_sama5d4_clk_h32mx_setup(struct device_node *np, +- struct at91_pmc *pmc); +- +-void of_sama5d2_clk_generated_setup(struct device_node *np, +- struct at91_pmc *pmc); +- + #endif /* __PMC_H_ */ +diff --git a/drivers/clocksource/tcb_clksrc.c b/drivers/clocksource/tcb_clksrc.c +index 7524941..5b6f57f 100644 +--- a/drivers/clocksource/tcb_clksrc.c ++++ b/drivers/clocksource/tcb_clksrc.c +@@ -73,6 +73,7 @@ static struct clocksource clksrc = { + struct tc_clkevt_device { + struct clock_event_device clkevt; + struct clk *clk; ++ bool clk_enabled; + u32 freq; + void __iomem *regs; + }; +@@ -84,6 +85,24 @@ static struct tc_clkevt_device *to_tc_clkevt(struct clock_event_device *clkevt) + + static u32 timer_clock; + ++static void tc_clk_disable(struct clock_event_device *d) ++{ ++ struct tc_clkevt_device *tcd = to_tc_clkevt(d); ++ ++ clk_disable(tcd->clk); ++ tcd->clk_enabled = false; ++} ++ ++static void tc_clk_enable(struct clock_event_device *d) ++{ ++ struct tc_clkevt_device *tcd = to_tc_clkevt(d); ++ ++ if (tcd->clk_enabled) ++ return; ++ clk_enable(tcd->clk); ++ tcd->clk_enabled = true; ++} ++ + static int tc_shutdown(struct clock_event_device *d) + { + struct tc_clkevt_device *tcd = to_tc_clkevt(d); +@@ -91,8 +110,14 @@ static int tc_shutdown(struct clock_event_device *d) + + __raw_writel(0xff, regs + ATMEL_TC_REG(2, IDR)); + __raw_writel(ATMEL_TC_CLKDIS, regs + ATMEL_TC_REG(2, CCR)); ++ return 0; ++} ++ ++static int tc_shutdown_clk_off(struct clock_event_device *d) ++{ ++ tc_shutdown(d); + if (!clockevent_state_detached(d)) +- clk_disable(tcd->clk); ++ tc_clk_disable(d); + + return 0; + } +@@ -105,7 +130,7 @@ static int tc_set_oneshot(struct clock_event_device *d) + if (clockevent_state_oneshot(d) || clockevent_state_periodic(d)) + tc_shutdown(d); + +- clk_enable(tcd->clk); ++ tc_clk_enable(d); + + /* count up to RC, then irq and stop */ + __raw_writel(timer_clock | ATMEL_TC_CPCSTOP | ATMEL_TC_WAVE | +@@ -127,7 +152,7 @@ static int tc_set_periodic(struct clock_event_device *d) + /* By not making the gentime core emulate periodic mode on top + * of oneshot, we get lower overhead and improved accuracy. + */ +- clk_enable(tcd->clk); ++ tc_clk_enable(d); + + /* count up to RC, then irq and restart */ + __raw_writel(timer_clock | ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO, +@@ -165,7 +190,7 @@ static struct tc_clkevt_device clkevt = { + .rating = 200, + #endif + .set_next_event = tc_next_event, +- .set_state_shutdown = tc_shutdown, ++ .set_state_shutdown = tc_shutdown_clk_off, + .set_state_periodic = tc_set_periodic, + .set_state_oneshot = tc_set_oneshot, + }, +diff --git a/drivers/clocksource/timer-atmel-pit.c b/drivers/clocksource/timer-atmel-pit.c +index a7abdb6..7a40f7e 100644 +--- a/drivers/clocksource/timer-atmel-pit.c ++++ b/drivers/clocksource/timer-atmel-pit.c +@@ -46,6 +46,7 @@ struct pit_data { + u32 cycle; + u32 cnt; + unsigned int irq; ++ bool irq_requested; + struct clk *mck; + }; + +@@ -96,7 +97,10 @@ static int pit_clkevt_shutdown(struct clock_event_device *dev) + + /* disable irq, leaving the clocksource active */ + pit_write(data->base, AT91_PIT_MR, (data->cycle - 1) | AT91_PIT_PITEN); +- free_irq(data->irq, data); ++ if (data->irq_requested) { ++ free_irq(data->irq, data); ++ data->irq_requested = false; ++ } + return 0; + } + +@@ -115,6 +119,8 @@ static int pit_clkevt_set_periodic(struct clock_event_device *dev) + if (ret) + panic(pr_fmt("Unable to setup IRQ\n")); + ++ data->irq_requested = true; ++ + /* update clocksource counter */ + data->cnt += data->cycle * PIT_PICNT(pit_read(data->base, AT91_PIT_PIVR)); + pit_write(data->base, AT91_PIT_MR, +diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c +index 0f42a27..80a1db0 100644 +--- a/drivers/gpu/drm/i915/i915_irq.c ++++ b/drivers/gpu/drm/i915/i915_irq.c +@@ -812,6 +812,7 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe, + spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); + + /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */ ++ preempt_disable_rt(); + + /* Get optional system timestamp before query. */ + if (stime) +@@ -863,6 +864,7 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe, + *etime = ktime_get(); + + /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */ ++ preempt_enable_rt(); + + spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); + +diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c +index 56dc132..8771d66 100644 +--- a/drivers/gpu/drm/i915/intel_sprite.c ++++ b/drivers/gpu/drm/i915/intel_sprite.c +@@ -38,6 +38,7 @@ + #include "intel_drv.h" + #include + #include "i915_drv.h" ++#include + + static bool + format_is_yuv(uint32_t format) +@@ -64,6 +65,8 @@ static int usecs_to_scanlines(const struct drm_display_mode *adjusted_mode, + 1000 * adjusted_mode->crtc_htotal); + } + ++static DEFINE_LOCAL_IRQ_LOCK(pipe_update_lock); ++ + /** + * intel_pipe_update_start() - start update of a set of display registers + * @crtc: the crtc of which the registers are going to be updated +@@ -96,7 +99,7 @@ void intel_pipe_update_start(struct intel_crtc *crtc) + min = vblank_start - usecs_to_scanlines(adjusted_mode, 100); + max = vblank_start - 1; + +- local_irq_disable(); ++ local_lock_irq(pipe_update_lock); + + if (min <= 0 || max <= 0) + return; +@@ -126,11 +129,11 @@ void intel_pipe_update_start(struct intel_crtc *crtc) + break; + } + +- local_irq_enable(); ++ local_unlock_irq(pipe_update_lock); + + timeout = schedule_timeout(timeout); + +- local_irq_disable(); ++ local_lock_irq(pipe_update_lock); + } + + finish_wait(wq, &wait); +@@ -164,7 +167,7 @@ void intel_pipe_update_end(struct intel_crtc *crtc) + + trace_i915_pipe_update_end(crtc, end_vbl_count, scanline_end); + +- local_irq_enable(); ++ local_unlock_irq(pipe_update_lock); + + if (crtc->debug.start_vbl_count && + crtc->debug.start_vbl_count != end_vbl_count) { +diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c +index 3645b22..642854b 100644 +--- a/drivers/gpu/drm/radeon/radeon_display.c ++++ b/drivers/gpu/drm/radeon/radeon_display.c +@@ -1862,6 +1862,7 @@ int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe, + struct radeon_device *rdev = dev->dev_private; + + /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */ ++ preempt_disable_rt(); + + /* Get optional system timestamp before query. */ + if (stime) +@@ -1954,6 +1955,7 @@ int radeon_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe, + *etime = ktime_get(); + + /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */ ++ preempt_enable_rt(); + + /* Decode into vertical and horizontal scanout position. */ + *vpos = position & 0x1fff; +diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c +index fc836f5..f417aafe 100644 +--- a/drivers/iommu/amd_iommu.c ++++ b/drivers/iommu/amd_iommu.c +@@ -1952,10 +1952,10 @@ static int __attach_device(struct iommu_dev_data *dev_data, + int ret; + + /* +- * Must be called with IRQs disabled. Warn here to detect early +- * when its not. ++ * Must be called with IRQs disabled on a non RT kernel. Warn here to ++ * detect early when its not. + */ +- WARN_ON(!irqs_disabled()); ++ WARN_ON_NONRT(!irqs_disabled()); + + /* lock domain */ + spin_lock(&domain->lock); +@@ -2118,10 +2118,10 @@ static void __detach_device(struct iommu_dev_data *dev_data) + struct protection_domain *domain; + + /* +- * Must be called with IRQs disabled. Warn here to detect early +- * when its not. ++ * Must be called with IRQs disabled on a non RT kernel. Warn here to ++ * detect early when its not. + */ +- WARN_ON(!irqs_disabled()); ++ WARN_ON_NONRT(!irqs_disabled()); + + if (WARN_ON(!dev_data->domain)) + return; +diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c +index edb5305..7d5ee8a 100644 +--- a/drivers/tty/serial/sc16is7xx.c ++++ b/drivers/tty/serial/sc16is7xx.c +@@ -1230,7 +1230,7 @@ static int sc16is7xx_probe(struct device *dev, + + /* Setup interrupt */ + ret = devm_request_irq(dev, irq, sc16is7xx_irq, +- IRQF_ONESHOT | flags, dev_name(dev), s); ++ flags, dev_name(dev), s); + if (!ret) + return 0; + +diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c +index 3ba63db..4d47528 100644 +--- a/drivers/usb/gadget/function/f_fs.c ++++ b/drivers/usb/gadget/function/f_fs.c +@@ -1405,7 +1405,7 @@ static void ffs_data_put(struct ffs_data *ffs) + pr_info("%s(): freeing\n", __func__); + ffs_data_clear(ffs); + BUG_ON(waitqueue_active(&ffs->ev.waitq) || +- swaitqueue_active(&ffs->ep0req_completion.wait)); ++ swait_active(&ffs->ep0req_completion.wait)); + kfree(ffs->dev_name); + kfree(ffs); + } +diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c +index f92f5af..f9bba26 100644 +--- a/drivers/usb/gadget/udc/atmel_usba_udc.c ++++ b/drivers/usb/gadget/udc/atmel_usba_udc.c +@@ -17,7 +17,9 @@ + #include + #include + #include ++#include + #include ++#include + #include + #include + #include +@@ -1888,20 +1890,15 @@ static int atmel_usba_stop(struct usb_gadget *gadget) + #ifdef CONFIG_OF + static void at91sam9rl_toggle_bias(struct usba_udc *udc, int is_on) + { +- unsigned int uckr = at91_pmc_read(AT91_CKGR_UCKR); +- +- if (is_on) +- at91_pmc_write(AT91_CKGR_UCKR, uckr | AT91_PMC_BIASEN); +- else +- at91_pmc_write(AT91_CKGR_UCKR, uckr & ~(AT91_PMC_BIASEN)); ++ regmap_update_bits(udc->pmc, AT91_CKGR_UCKR, AT91_PMC_BIASEN, ++ is_on ? AT91_PMC_BIASEN : 0); + } + + static void at91sam9g45_pulse_bias(struct usba_udc *udc) + { +- unsigned int uckr = at91_pmc_read(AT91_CKGR_UCKR); +- +- at91_pmc_write(AT91_CKGR_UCKR, uckr & ~(AT91_PMC_BIASEN)); +- at91_pmc_write(AT91_CKGR_UCKR, uckr | AT91_PMC_BIASEN); ++ regmap_update_bits(udc->pmc, AT91_CKGR_UCKR, AT91_PMC_BIASEN, 0); ++ regmap_update_bits(udc->pmc, AT91_CKGR_UCKR, AT91_PMC_BIASEN, ++ AT91_PMC_BIASEN); + } + + static const struct usba_udc_errata at91sam9rl_errata = { +@@ -1938,6 +1935,9 @@ static struct usba_ep * atmel_udc_of_init(struct platform_device *pdev, + return ERR_PTR(-EINVAL); + + udc->errata = match->data; ++ udc->pmc = syscon_regmap_lookup_by_compatible("atmel,at91sam9g45-pmc"); ++ if (udc->errata && IS_ERR(udc->pmc)) ++ return ERR_CAST(udc->pmc); + + udc->num_ep = 0; + +diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.h b/drivers/usb/gadget/udc/atmel_usba_udc.h +index ea448a3..3e1c9d5 100644 +--- a/drivers/usb/gadget/udc/atmel_usba_udc.h ++++ b/drivers/usb/gadget/udc/atmel_usba_udc.h +@@ -354,6 +354,8 @@ struct usba_udc { + struct dentry *debugfs_root; + struct dentry *debugfs_regs; + #endif ++ ++ struct regmap *pmc; + }; + + static inline struct usba_ep *to_usba_ep(struct usb_ep *ep) +diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c +index 9c62a6f..9e08447 100644 +--- a/fs/btrfs/volumes.c ++++ b/fs/btrfs/volumes.c +@@ -232,7 +232,6 @@ static struct btrfs_device *__alloc_device(void) + spin_lock_init(&dev->reada_lock); + atomic_set(&dev->reada_in_flight, 0); + atomic_set(&dev->dev_stats_ccnt, 0); +- btrfs_device_data_ordered_init(dev); + INIT_RADIX_TREE(&dev->reada_zones, GFP_NOFS & ~__GFP_DIRECT_RECLAIM); + INIT_RADIX_TREE(&dev->reada_extents, GFP_NOFS & ~__GFP_DIRECT_RECLAIM); + +diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h +index 9db5500..5951c49 100644 +--- a/fs/f2fs/f2fs.h ++++ b/fs/f2fs/f2fs.h +@@ -24,7 +24,6 @@ + + #ifdef CONFIG_F2FS_CHECK_FS + #define f2fs_bug_on(sbi, condition) BUG_ON(condition) +-#define f2fs_down_write(x, y) down_write_nest_lock(x, y) + #else + #define f2fs_bug_on(sbi, condition) \ + do { \ +@@ -33,7 +32,6 @@ + set_sbi_flag(sbi, SBI_NEED_FSCK); \ + } \ + } while (0) +-#define f2fs_down_write(x, y) down_write(x) + #endif + + /* +@@ -959,7 +957,7 @@ static inline void f2fs_unlock_op(struct f2fs_sb_info *sbi) + + static inline void f2fs_lock_all(struct f2fs_sb_info *sbi) + { +- f2fs_down_write(&sbi->cp_rwsem, &sbi->cp_mutex); ++ down_write(&sbi->cp_rwsem); + } + + static inline void f2fs_unlock_all(struct f2fs_sb_info *sbi) +diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h +index fff4ec1..a8f18e0 100644 +--- a/include/linux/blkdev.h ++++ b/include/linux/blkdev.h +@@ -456,7 +456,7 @@ struct request_queue { + struct throtl_data *td; + #endif + struct rcu_head rcu_head; +- struct swait_head mq_freeze_wq; ++ struct swait_queue_head mq_freeze_wq; + struct percpu_ref q_usage_counter; + struct list_head all_q_node; + +diff --git a/include/linux/clk/at91_pmc.h b/include/linux/clk/at91_pmc.h +index 1e69322..17f413b 100644 +--- a/include/linux/clk/at91_pmc.h ++++ b/include/linux/clk/at91_pmc.h +@@ -16,18 +16,6 @@ + #ifndef AT91_PMC_H + #define AT91_PMC_H + +-#ifndef __ASSEMBLY__ +-extern void __iomem *at91_pmc_base; +- +-#define at91_pmc_read(field) \ +- readl_relaxed(at91_pmc_base + field) +- +-#define at91_pmc_write(field, value) \ +- writel_relaxed(value, at91_pmc_base + field) +-#else +-.extern at91_pmc_base +-#endif +- + #define AT91_PMC_SCER 0x00 /* System Clock Enable Register */ + #define AT91_PMC_SCDR 0x04 /* System Clock Disable Register */ + +diff --git a/include/linux/completion.h b/include/linux/completion.h +index 3fe8d14..3bca159 100644 +--- a/include/linux/completion.h ++++ b/include/linux/completion.h +@@ -7,7 +7,7 @@ + * Atomic wait-for-completion handler data structures. + * See kernel/sched/completion.c for details. + */ +-#include ++#include + + /* + * struct completion - structure used to maintain state for a "completion" +@@ -23,11 +23,11 @@ + */ + struct completion { + unsigned int done; +- struct swait_head wait; ++ struct swait_queue_head wait; + }; + + #define COMPLETION_INITIALIZER(work) \ +- { 0, SWAIT_HEAD_INITIALIZER((work).wait) } ++ { 0, __SWAIT_QUEUE_HEAD_INITIALIZER((work).wait) } + + #define COMPLETION_INITIALIZER_ONSTACK(work) \ + ({ init_completion(&work); work; }) +@@ -72,7 +72,7 @@ struct completion { + static inline void init_completion(struct completion *x) + { + x->done = 0; +- init_swait_head(&x->wait); ++ init_swait_queue_head(&x->wait); + } + + /** +diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h +index 60048c5..f2cd676 100644 +--- a/include/linux/ftrace.h ++++ b/include/linux/ftrace.h +@@ -694,6 +694,18 @@ static inline void __ftrace_enabled_restore(int enabled) + #define CALLER_ADDR5 ((unsigned long)ftrace_return_address(5)) + #define CALLER_ADDR6 ((unsigned long)ftrace_return_address(6)) + ++static inline unsigned long get_lock_parent_ip(void) ++{ ++ unsigned long addr = CALLER_ADDR0; ++ ++ if (!in_lock_functions(addr)) ++ return addr; ++ addr = CALLER_ADDR1; ++ if (!in_lock_functions(addr)) ++ return addr; ++ return CALLER_ADDR2; ++} ++ + #ifdef CONFIG_IRQSOFF_TRACER + extern void time_hardirqs_on(unsigned long a0, unsigned long a1); + extern void time_hardirqs_off(unsigned long a0, unsigned long a1); +diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h +index f606864..8fbcdfa 100644 +--- a/include/linux/hrtimer.h ++++ b/include/linux/hrtimer.h +@@ -91,7 +91,7 @@ enum hrtimer_restart { + * @irqsafe: timer can run in hardirq context + * @praecox: timer expiry time if expired at the time of programming + * @is_rel: Set if the timer was armed relative +- * @start_pid: timer statistics field to store the pid of the task which ++ * @start_pid: timer statistics field to store the pid of the task which + * started the timer + * @start_site: timer statistics field to store the site where the timer + * was started +diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h +index d856ccd..c690acc 100644 +--- a/include/linux/kvm_host.h ++++ b/include/linux/kvm_host.h +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -243,7 +244,7 @@ struct kvm_vcpu { + int fpu_active; + int guest_fpu_loaded, guest_xcr0_loaded; + unsigned char fpu_counter; +- struct swait_head wq; ++ struct swait_queue_head wq; + struct pid *pid; + int sigset_active; + sigset_t sigset; +@@ -794,7 +795,7 @@ static inline bool kvm_arch_has_assigned_device(struct kvm *kvm) + } + #endif + +-static inline struct swait_head *kvm_arch_vcpu_wq(struct kvm_vcpu *vcpu) ++static inline struct swait_queue_head *kvm_arch_vcpu_wq(struct kvm_vcpu *vcpu) + { + #ifdef __KVM_HAVE_ARCH_WQP + return vcpu->arch.wqp; +diff --git a/include/linux/list_bl.h b/include/linux/list_bl.h +index 44f0b55..89ffaa7 100644 +--- a/include/linux/list_bl.h ++++ b/include/linux/list_bl.h +@@ -42,13 +42,15 @@ struct hlist_bl_node { + struct hlist_bl_node *next, **pprev; + }; + +-static inline void INIT_HLIST_BL_HEAD(struct hlist_bl_head *h) +-{ +- h->first = NULL; + #ifdef CONFIG_PREEMPT_RT_BASE +- raw_spin_lock_init(&h->lock); ++#define INIT_HLIST_BL_HEAD(h) \ ++do { \ ++ (h)->first = NULL; \ ++ raw_spin_lock_init(&(h)->lock); \ ++} while (0) ++#else ++#define INIT_HLIST_BL_HEAD(h) (h)->first = NULL + #endif +-} + + static inline void INIT_HLIST_BL_NODE(struct hlist_bl_node *h) + { +diff --git a/include/linux/locallock.h b/include/linux/locallock.h +index 339ba00..6fe5928 100644 +--- a/include/linux/locallock.h ++++ b/include/linux/locallock.h +@@ -43,9 +43,9 @@ struct local_irq_lock { + * for CONFIG_PREEMPT_BASE map to the normal spin_* calls. + */ + #ifdef CONFIG_PREEMPT_RT_FULL +-# define spin_lock_local(lock) rt_spin_lock(lock) +-# define spin_trylock_local(lock) rt_spin_trylock(lock) +-# define spin_unlock_local(lock) rt_spin_unlock(lock) ++# define spin_lock_local(lock) rt_spin_lock__no_mg(lock) ++# define spin_trylock_local(lock) rt_spin_trylock__no_mg(lock) ++# define spin_unlock_local(lock) rt_spin_unlock__no_mg(lock) + #else + # define spin_lock_local(lock) spin_lock(lock) + # define spin_trylock_local(lock) spin_trylock(lock) +diff --git a/include/linux/sched.h b/include/linux/sched.h +index b6a2358..58c5ec8 100644 +--- a/include/linux/sched.h ++++ b/include/linux/sched.h +@@ -183,8 +183,6 @@ extern void update_cpu_load_nohz(void); + static inline void update_cpu_load_nohz(void) { } + #endif + +-extern unsigned long get_parent_ip(unsigned long addr); +- + extern void dump_cpu_task(int cpu); + + struct seq_file; +diff --git a/include/linux/spinlock_rt.h b/include/linux/spinlock_rt.h +index f757096..3b28255 100644 +--- a/include/linux/spinlock_rt.h ++++ b/include/linux/spinlock_rt.h +@@ -18,6 +18,10 @@ do { \ + __rt_spin_lock_init(slock, #slock, &__key); \ + } while (0) + ++void __lockfunc rt_spin_lock__no_mg(spinlock_t *lock); ++void __lockfunc rt_spin_unlock__no_mg(spinlock_t *lock); ++int __lockfunc rt_spin_trylock__no_mg(spinlock_t *lock); ++ + extern void __lockfunc rt_spin_lock(spinlock_t *lock); + extern unsigned long __lockfunc rt_spin_lock_trace_flags(spinlock_t *lock); + extern void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass); +@@ -32,20 +36,16 @@ extern int atomic_dec_and_spin_lock(atomic_t *atomic, spinlock_t *lock); + * lockdep-less calls, for derived types like rwlock: + * (for trylock they can use rt_mutex_trylock() directly. + */ ++extern void __lockfunc __rt_spin_lock__no_mg(struct rt_mutex *lock); + extern void __lockfunc __rt_spin_lock(struct rt_mutex *lock); + extern void __lockfunc __rt_spin_unlock(struct rt_mutex *lock); + extern int __lockfunc __rt_spin_trylock(struct rt_mutex *lock); + +-#define spin_lock(lock) \ +- do { \ +- migrate_disable(); \ +- rt_spin_lock(lock); \ +- } while (0) ++#define spin_lock(lock) rt_spin_lock(lock) + + #define spin_lock_bh(lock) \ + do { \ + local_bh_disable(); \ +- migrate_disable(); \ + rt_spin_lock(lock); \ + } while (0) + +@@ -56,24 +56,19 @@ extern int __lockfunc __rt_spin_trylock(struct rt_mutex *lock); + #define spin_trylock(lock) \ + ({ \ + int __locked; \ +- migrate_disable(); \ + __locked = spin_do_trylock(lock); \ +- if (!__locked) \ +- migrate_enable(); \ + __locked; \ + }) + + #ifdef CONFIG_LOCKDEP + # define spin_lock_nested(lock, subclass) \ + do { \ +- migrate_disable(); \ + rt_spin_lock_nested(lock, subclass); \ + } while (0) + + #define spin_lock_bh_nested(lock, subclass) \ + do { \ + local_bh_disable(); \ +- migrate_disable(); \ + rt_spin_lock_nested(lock, subclass); \ + } while (0) + +@@ -81,7 +76,6 @@ extern int __lockfunc __rt_spin_trylock(struct rt_mutex *lock); + do { \ + typecheck(unsigned long, flags); \ + flags = 0; \ +- migrate_disable(); \ + rt_spin_lock_nested(lock, subclass); \ + } while (0) + #else +@@ -117,16 +111,11 @@ static inline unsigned long spin_lock_trace_flags(spinlock_t *lock) + /* FIXME: we need rt_spin_lock_nest_lock */ + #define spin_lock_nest_lock(lock, nest_lock) spin_lock_nested(lock, 0) + +-#define spin_unlock(lock) \ +- do { \ +- rt_spin_unlock(lock); \ +- migrate_enable(); \ +- } while (0) ++#define spin_unlock(lock) rt_spin_unlock(lock) + + #define spin_unlock_bh(lock) \ + do { \ + rt_spin_unlock(lock); \ +- migrate_enable(); \ + local_bh_enable(); \ + } while (0) + +diff --git a/include/linux/suspend.h b/include/linux/suspend.h +index 8b6ec7e..9b77d4c 100644 +--- a/include/linux/suspend.h ++++ b/include/linux/suspend.h +@@ -194,6 +194,12 @@ struct platform_freeze_ops { + void (*end)(void); + }; + ++#if defined(CONFIG_SUSPEND) || defined(CONFIG_HIBERNATION) ++extern bool pm_in_action; ++#else ++# define pm_in_action false ++#endif ++ + #ifdef CONFIG_SUSPEND + /** + * suspend_set_ops - set platform dependent suspend operations +diff --git a/include/linux/swait.h b/include/linux/swait.h +new file mode 100644 +index 0000000..83f004a +--- /dev/null ++++ b/include/linux/swait.h +@@ -0,0 +1,173 @@ ++#ifndef _LINUX_SWAIT_H ++#define _LINUX_SWAIT_H ++ ++#include ++#include ++#include ++#include ++ ++/* ++ * Simple wait queues ++ * ++ * While these are very similar to the other/complex wait queues (wait.h) the ++ * most important difference is that the simple waitqueue allows for ++ * deterministic behaviour -- IOW it has strictly bounded IRQ and lock hold ++ * times. ++ * ++ * In order to make this so, we had to drop a fair number of features of the ++ * other waitqueue code; notably: ++ * ++ * - mixing INTERRUPTIBLE and UNINTERRUPTIBLE sleeps on the same waitqueue; ++ * all wakeups are TASK_NORMAL in order to avoid O(n) lookups for the right ++ * sleeper state. ++ * ++ * - the exclusive mode; because this requires preserving the list order ++ * and this is hard. ++ * ++ * - custom wake functions; because you cannot give any guarantees about ++ * random code. ++ * ++ * As a side effect of this; the data structures are slimmer. ++ * ++ * One would recommend using this wait queue where possible. ++ */ ++ ++struct task_struct; ++ ++struct swait_queue_head { ++ raw_spinlock_t lock; ++ struct list_head task_list; ++}; ++ ++struct swait_queue { ++ struct task_struct *task; ++ struct list_head task_list; ++}; ++ ++#define __SWAITQUEUE_INITIALIZER(name) { \ ++ .task = current, \ ++ .task_list = LIST_HEAD_INIT((name).task_list), \ ++} ++ ++#define DECLARE_SWAITQUEUE(name) \ ++ struct swait_queue name = __SWAITQUEUE_INITIALIZER(name) ++ ++#define __SWAIT_QUEUE_HEAD_INITIALIZER(name) { \ ++ .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ ++ .task_list = LIST_HEAD_INIT((name).task_list), \ ++} ++ ++#define DECLARE_SWAIT_QUEUE_HEAD(name) \ ++ struct swait_queue_head name = __SWAIT_QUEUE_HEAD_INITIALIZER(name) ++ ++extern void __init_swait_queue_head(struct swait_queue_head *q, const char *name, ++ struct lock_class_key *key); ++ ++#define init_swait_queue_head(q) \ ++ do { \ ++ static struct lock_class_key __key; \ ++ __init_swait_queue_head((q), #q, &__key); \ ++ } while (0) ++ ++#ifdef CONFIG_LOCKDEP ++# define __SWAIT_QUEUE_HEAD_INIT_ONSTACK(name) \ ++ ({ init_swait_queue_head(&name); name; }) ++# define DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(name) \ ++ struct swait_queue_head name = __SWAIT_QUEUE_HEAD_INIT_ONSTACK(name) ++#else ++# define DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(name) \ ++ DECLARE_SWAIT_QUEUE_HEAD(name) ++#endif ++ ++static inline int swait_active(struct swait_queue_head *q) ++{ ++ return !list_empty(&q->task_list); ++} ++ ++extern void swake_up(struct swait_queue_head *q); ++extern void swake_up_all(struct swait_queue_head *q); ++extern void swake_up_locked(struct swait_queue_head *q); ++extern void swake_up_all_locked(struct swait_queue_head *q); ++ ++extern void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait); ++extern void prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait, int state); ++extern long prepare_to_swait_event(struct swait_queue_head *q, struct swait_queue *wait, int state); ++ ++extern void __finish_swait(struct swait_queue_head *q, struct swait_queue *wait); ++extern void finish_swait(struct swait_queue_head *q, struct swait_queue *wait); ++ ++/* as per ___wait_event() but for swait, therefore "exclusive == 0" */ ++#define ___swait_event(wq, condition, state, ret, cmd) \ ++({ \ ++ struct swait_queue __wait; \ ++ long __ret = ret; \ ++ \ ++ INIT_LIST_HEAD(&__wait.task_list); \ ++ for (;;) { \ ++ long __int = prepare_to_swait_event(&wq, &__wait, state);\ ++ \ ++ if (condition) \ ++ break; \ ++ \ ++ if (___wait_is_interruptible(state) && __int) { \ ++ __ret = __int; \ ++ break; \ ++ } \ ++ \ ++ cmd; \ ++ } \ ++ finish_swait(&wq, &__wait); \ ++ __ret; \ ++}) ++ ++#define __swait_event(wq, condition) \ ++ (void)___swait_event(wq, condition, TASK_UNINTERRUPTIBLE, 0, \ ++ schedule()) ++ ++#define swait_event(wq, condition) \ ++do { \ ++ if (condition) \ ++ break; \ ++ __swait_event(wq, condition); \ ++} while (0) ++ ++#define __swait_event_timeout(wq, condition, timeout) \ ++ ___swait_event(wq, ___wait_cond_timeout(condition), \ ++ TASK_UNINTERRUPTIBLE, timeout, \ ++ __ret = schedule_timeout(__ret)) ++ ++#define swait_event_timeout(wq, condition, timeout) \ ++({ \ ++ long __ret = timeout; \ ++ if (!___wait_cond_timeout(condition)) \ ++ __ret = __swait_event_timeout(wq, condition, timeout); \ ++ __ret; \ ++}) ++ ++#define __swait_event_interruptible(wq, condition) \ ++ ___swait_event(wq, condition, TASK_INTERRUPTIBLE, 0, \ ++ schedule()) ++ ++#define swait_event_interruptible(wq, condition) \ ++({ \ ++ int __ret = 0; \ ++ if (!(condition)) \ ++ __ret = __swait_event_interruptible(wq, condition); \ ++ __ret; \ ++}) ++ ++#define __swait_event_interruptible_timeout(wq, condition, timeout) \ ++ ___swait_event(wq, ___wait_cond_timeout(condition), \ ++ TASK_INTERRUPTIBLE, timeout, \ ++ __ret = schedule_timeout(__ret)) ++ ++#define swait_event_interruptible_timeout(wq, condition, timeout) \ ++({ \ ++ long __ret = timeout; \ ++ if (!___wait_cond_timeout(condition)) \ ++ __ret = __swait_event_interruptible_timeout(wq, \ ++ condition, timeout); \ ++ __ret; \ ++}) ++ ++#endif /* _LINUX_SWAIT_H */ +diff --git a/include/linux/wait-simple.h b/include/linux/wait-simple.h +deleted file mode 100644 +index f86bca2..0000000 +--- a/include/linux/wait-simple.h ++++ /dev/null +@@ -1,207 +0,0 @@ +-#ifndef _LINUX_WAIT_SIMPLE_H +-#define _LINUX_WAIT_SIMPLE_H +- +-#include +-#include +- +-#include +- +-struct swaiter { +- struct task_struct *task; +- struct list_head node; +-}; +- +-#define DEFINE_SWAITER(name) \ +- struct swaiter name = { \ +- .task = current, \ +- .node = LIST_HEAD_INIT((name).node), \ +- } +- +-struct swait_head { +- raw_spinlock_t lock; +- struct list_head list; +-}; +- +-#define SWAIT_HEAD_INITIALIZER(name) { \ +- .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ +- .list = LIST_HEAD_INIT((name).list), \ +- } +- +-#define DEFINE_SWAIT_HEAD(name) \ +- struct swait_head name = SWAIT_HEAD_INITIALIZER(name) +- +-extern void __init_swait_head(struct swait_head *h, struct lock_class_key *key); +- +-#define init_swait_head(swh) \ +- do { \ +- static struct lock_class_key __key; \ +- \ +- __init_swait_head((swh), &__key); \ +- } while (0) +- +-/* +- * Waiter functions +- */ +-extern void swait_prepare_locked(struct swait_head *head, struct swaiter *w); +-extern void swait_prepare(struct swait_head *head, struct swaiter *w, int state); +-extern void swait_finish_locked(struct swait_head *head, struct swaiter *w); +-extern void swait_finish(struct swait_head *head, struct swaiter *w); +- +-/* Check whether a head has waiters enqueued */ +-static inline bool swaitqueue_active(struct swait_head *h) +-{ +- /* Make sure the condition is visible before checking list_empty() */ +- smp_mb(); +- return !list_empty(&h->list); +-} +- +-/* +- * Wakeup functions +- */ +-extern unsigned int __swait_wake(struct swait_head *head, unsigned int state, unsigned int num); +-extern unsigned int __swait_wake_locked(struct swait_head *head, unsigned int state, unsigned int num); +- +-#define swait_wake(head) __swait_wake(head, TASK_NORMAL, 1) +-#define swait_wake_interruptible(head) __swait_wake(head, TASK_INTERRUPTIBLE, 1) +-#define swait_wake_all(head) __swait_wake(head, TASK_NORMAL, 0) +-#define swait_wake_all_interruptible(head) __swait_wake(head, TASK_INTERRUPTIBLE, 0) +- +-/* +- * Event API +- */ +-#define __swait_event(wq, condition) \ +-do { \ +- DEFINE_SWAITER(__wait); \ +- \ +- for (;;) { \ +- swait_prepare(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ +- if (condition) \ +- break; \ +- schedule(); \ +- } \ +- swait_finish(&wq, &__wait); \ +-} while (0) +- +-/** +- * swait_event - sleep until a condition gets true +- * @wq: the waitqueue to wait on +- * @condition: a C expression for the event to wait for +- * +- * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the +- * @condition evaluates to true. The @condition is checked each time +- * the waitqueue @wq is woken up. +- * +- * wake_up() has to be called after changing any variable that could +- * change the result of the wait condition. +- */ +-#define swait_event(wq, condition) \ +-do { \ +- if (condition) \ +- break; \ +- __swait_event(wq, condition); \ +-} while (0) +- +-#define __swait_event_interruptible(wq, condition, ret) \ +-do { \ +- DEFINE_SWAITER(__wait); \ +- \ +- for (;;) { \ +- swait_prepare(&wq, &__wait, TASK_INTERRUPTIBLE); \ +- if (condition) \ +- break; \ +- if (signal_pending(current)) { \ +- ret = -ERESTARTSYS; \ +- break; \ +- } \ +- schedule(); \ +- } \ +- swait_finish(&wq, &__wait); \ +-} while (0) +- +-#define __swait_event_interruptible_timeout(wq, condition, ret) \ +-do { \ +- DEFINE_SWAITER(__wait); \ +- \ +- for (;;) { \ +- swait_prepare(&wq, &__wait, TASK_INTERRUPTIBLE); \ +- if (condition) \ +- break; \ +- if (signal_pending(current)) { \ +- ret = -ERESTARTSYS; \ +- break; \ +- } \ +- ret = schedule_timeout(ret); \ +- if (!ret) \ +- break; \ +- } \ +- swait_finish(&wq, &__wait); \ +-} while (0) +- +-/** +- * swait_event_interruptible - sleep until a condition gets true +- * @wq: the waitqueue to wait on +- * @condition: a C expression for the event to wait for +- * +- * The process is put to sleep (TASK_INTERRUPTIBLE) until the +- * @condition evaluates to true. The @condition is checked each time +- * the waitqueue @wq is woken up. +- * +- * wake_up() has to be called after changing any variable that could +- * change the result of the wait condition. +- */ +-#define swait_event_interruptible(wq, condition) \ +-({ \ +- int __ret = 0; \ +- if (!(condition)) \ +- __swait_event_interruptible(wq, condition, __ret); \ +- __ret; \ +-}) +- +-#define swait_event_interruptible_timeout(wq, condition, timeout) \ +-({ \ +- int __ret = timeout; \ +- if (!(condition)) \ +- __swait_event_interruptible_timeout(wq, condition, __ret); \ +- __ret; \ +-}) +- +-#define __swait_event_timeout(wq, condition, ret) \ +-do { \ +- DEFINE_SWAITER(__wait); \ +- \ +- for (;;) { \ +- swait_prepare(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ +- if (condition) \ +- break; \ +- ret = schedule_timeout(ret); \ +- if (!ret) \ +- break; \ +- } \ +- swait_finish(&wq, &__wait); \ +-} while (0) +- +-/** +- * swait_event_timeout - sleep until a condition gets true or a timeout elapses +- * @wq: the waitqueue to wait on +- * @condition: a C expression for the event to wait for +- * @timeout: timeout, in jiffies +- * +- * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the +- * @condition evaluates to true. The @condition is checked each time +- * the waitqueue @wq is woken up. +- * +- * wake_up() has to be called after changing any variable that could +- * change the result of the wait condition. +- * +- * The function returns 0 if the @timeout elapsed, and the remaining +- * jiffies if the condition evaluated to true before the timeout elapsed. +- */ +-#define swait_event_timeout(wq, condition, timeout) \ +-({ \ +- long __ret = timeout; \ +- if (!(condition)) \ +- __swait_event_timeout(wq, condition, __ret); \ +- __ret; \ +-}) +- +-#endif +diff --git a/include/trace/events/hist.h b/include/trace/events/hist.h +index 6122e42..f7710de 100644 +--- a/include/trace/events/hist.h ++++ b/include/trace/events/hist.h +@@ -9,6 +9,7 @@ + + #if !defined(CONFIG_PREEMPT_OFF_HIST) && !defined(CONFIG_INTERRUPT_OFF_HIST) + #define trace_preemptirqsoff_hist(a, b) ++#define trace_preemptirqsoff_hist_rcuidle(a, b) + #else + TRACE_EVENT(preemptirqsoff_hist, + +diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h +index fff846b..73614ce 100644 +--- a/include/trace/events/writeback.h ++++ b/include/trace/events/writeback.h +@@ -134,58 +134,28 @@ DEFINE_EVENT(writeback_dirty_inode_template, writeback_dirty_inode, + #ifdef CREATE_TRACE_POINTS + #ifdef CONFIG_CGROUP_WRITEBACK + +-static inline size_t __trace_wb_cgroup_size(struct bdi_writeback *wb) ++static inline unsigned int __trace_wb_assign_cgroup(struct bdi_writeback *wb) + { +- return kernfs_path_len(wb->memcg_css->cgroup->kn) + 1; ++ return wb->memcg_css->cgroup->kn->ino; + } + +-static inline void __trace_wb_assign_cgroup(char *buf, struct bdi_writeback *wb) +-{ +- struct cgroup *cgrp = wb->memcg_css->cgroup; +- char *path; +- +- path = cgroup_path(cgrp, buf, kernfs_path_len(cgrp->kn) + 1); +- WARN_ON_ONCE(path != buf); +-} +- +-static inline size_t __trace_wbc_cgroup_size(struct writeback_control *wbc) +-{ +- if (wbc->wb) +- return __trace_wb_cgroup_size(wbc->wb); +- else +- return 2; +-} +- +-static inline void __trace_wbc_assign_cgroup(char *buf, +- struct writeback_control *wbc) ++static inline unsigned int __trace_wbc_assign_cgroup(struct writeback_control *wbc) + { + if (wbc->wb) +- __trace_wb_assign_cgroup(buf, wbc->wb); ++ return __trace_wb_assign_cgroup(wbc->wb); + else +- strcpy(buf, "/"); ++ return -1U; + } +- + #else /* CONFIG_CGROUP_WRITEBACK */ + +-static inline size_t __trace_wb_cgroup_size(struct bdi_writeback *wb) +-{ +- return 2; +-} +- +-static inline void __trace_wb_assign_cgroup(char *buf, struct bdi_writeback *wb) +-{ +- strcpy(buf, "/"); +-} +- +-static inline size_t __trace_wbc_cgroup_size(struct writeback_control *wbc) ++static inline unsigned int __trace_wb_assign_cgroup(struct bdi_writeback *wb) + { +- return 2; ++ return -1U; + } + +-static inline void __trace_wbc_assign_cgroup(char *buf, +- struct writeback_control *wbc) ++static inline unsigned int __trace_wbc_assign_cgroup(struct writeback_control *wbc) + { +- strcpy(buf, "/"); ++ return -1U; + } + + #endif /* CONFIG_CGROUP_WRITEBACK */ +@@ -201,7 +171,7 @@ DECLARE_EVENT_CLASS(writeback_write_inode_template, + __array(char, name, 32) + __field(unsigned long, ino) + __field(int, sync_mode) +- __dynamic_array(char, cgroup, __trace_wbc_cgroup_size(wbc)) ++ __field(unsigned int, cgroup_ino) + ), + + TP_fast_assign( +@@ -209,14 +179,14 @@ DECLARE_EVENT_CLASS(writeback_write_inode_template, + dev_name(inode_to_bdi(inode)->dev), 32); + __entry->ino = inode->i_ino; + __entry->sync_mode = wbc->sync_mode; +- __trace_wbc_assign_cgroup(__get_str(cgroup), wbc); ++ __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc); + ), + +- TP_printk("bdi %s: ino=%lu sync_mode=%d cgroup=%s", ++ TP_printk("bdi %s: ino=%lu sync_mode=%d cgroup_ino=%u", + __entry->name, + __entry->ino, + __entry->sync_mode, +- __get_str(cgroup) ++ __entry->cgroup_ino + ) + ); + +@@ -246,7 +216,7 @@ DECLARE_EVENT_CLASS(writeback_work_class, + __field(int, range_cyclic) + __field(int, for_background) + __field(int, reason) +- __dynamic_array(char, cgroup, __trace_wb_cgroup_size(wb)) ++ __field(unsigned int, cgroup_ino) + ), + TP_fast_assign( + strncpy(__entry->name, +@@ -258,10 +228,10 @@ DECLARE_EVENT_CLASS(writeback_work_class, + __entry->range_cyclic = work->range_cyclic; + __entry->for_background = work->for_background; + __entry->reason = work->reason; +- __trace_wb_assign_cgroup(__get_str(cgroup), wb); ++ __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); + ), + TP_printk("bdi %s: sb_dev %d:%d nr_pages=%ld sync_mode=%d " +- "kupdate=%d range_cyclic=%d background=%d reason=%s cgroup=%s", ++ "kupdate=%d range_cyclic=%d background=%d reason=%s cgroup_ino=%u", + __entry->name, + MAJOR(__entry->sb_dev), MINOR(__entry->sb_dev), + __entry->nr_pages, +@@ -270,7 +240,7 @@ DECLARE_EVENT_CLASS(writeback_work_class, + __entry->range_cyclic, + __entry->for_background, + __print_symbolic(__entry->reason, WB_WORK_REASON), +- __get_str(cgroup) ++ __entry->cgroup_ino + ) + ); + #define DEFINE_WRITEBACK_WORK_EVENT(name) \ +@@ -300,15 +270,15 @@ DECLARE_EVENT_CLASS(writeback_class, + TP_ARGS(wb), + TP_STRUCT__entry( + __array(char, name, 32) +- __dynamic_array(char, cgroup, __trace_wb_cgroup_size(wb)) ++ __field(unsigned int, cgroup_ino) + ), + TP_fast_assign( + strncpy(__entry->name, dev_name(wb->bdi->dev), 32); +- __trace_wb_assign_cgroup(__get_str(cgroup), wb); ++ __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); + ), +- TP_printk("bdi %s: cgroup=%s", ++ TP_printk("bdi %s: cgroup_ino=%u", + __entry->name, +- __get_str(cgroup) ++ __entry->cgroup_ino + ) + ); + #define DEFINE_WRITEBACK_EVENT(name) \ +@@ -347,7 +317,7 @@ DECLARE_EVENT_CLASS(wbc_class, + __field(int, range_cyclic) + __field(long, range_start) + __field(long, range_end) +- __dynamic_array(char, cgroup, __trace_wbc_cgroup_size(wbc)) ++ __field(unsigned int, cgroup_ino) + ), + + TP_fast_assign( +@@ -361,12 +331,12 @@ DECLARE_EVENT_CLASS(wbc_class, + __entry->range_cyclic = wbc->range_cyclic; + __entry->range_start = (long)wbc->range_start; + __entry->range_end = (long)wbc->range_end; +- __trace_wbc_assign_cgroup(__get_str(cgroup), wbc); ++ __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc); + ), + + TP_printk("bdi %s: towrt=%ld skip=%ld mode=%d kupd=%d " + "bgrd=%d reclm=%d cyclic=%d " +- "start=0x%lx end=0x%lx cgroup=%s", ++ "start=0x%lx end=0x%lx cgroup_ino=%u", + __entry->name, + __entry->nr_to_write, + __entry->pages_skipped, +@@ -377,7 +347,7 @@ DECLARE_EVENT_CLASS(wbc_class, + __entry->range_cyclic, + __entry->range_start, + __entry->range_end, +- __get_str(cgroup) ++ __entry->cgroup_ino + ) + ) + +@@ -398,7 +368,7 @@ TRACE_EVENT(writeback_queue_io, + __field(long, age) + __field(int, moved) + __field(int, reason) +- __dynamic_array(char, cgroup, __trace_wb_cgroup_size(wb)) ++ __field(unsigned int, cgroup_ino) + ), + TP_fast_assign( + unsigned long *older_than_this = work->older_than_this; +@@ -408,15 +378,15 @@ TRACE_EVENT(writeback_queue_io, + (jiffies - *older_than_this) * 1000 / HZ : -1; + __entry->moved = moved; + __entry->reason = work->reason; +- __trace_wb_assign_cgroup(__get_str(cgroup), wb); ++ __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); + ), +- TP_printk("bdi %s: older=%lu age=%ld enqueue=%d reason=%s cgroup=%s", ++ TP_printk("bdi %s: older=%lu age=%ld enqueue=%d reason=%s cgroup_ino=%u", + __entry->name, + __entry->older, /* older_than_this in jiffies */ + __entry->age, /* older_than_this in relative milliseconds */ + __entry->moved, + __print_symbolic(__entry->reason, WB_WORK_REASON), +- __get_str(cgroup) ++ __entry->cgroup_ino + ) + ); + +@@ -484,7 +454,7 @@ TRACE_EVENT(bdi_dirty_ratelimit, + __field(unsigned long, dirty_ratelimit) + __field(unsigned long, task_ratelimit) + __field(unsigned long, balanced_dirty_ratelimit) +- __dynamic_array(char, cgroup, __trace_wb_cgroup_size(wb)) ++ __field(unsigned int, cgroup_ino) + ), + + TP_fast_assign( +@@ -496,13 +466,13 @@ TRACE_EVENT(bdi_dirty_ratelimit, + __entry->task_ratelimit = KBps(task_ratelimit); + __entry->balanced_dirty_ratelimit = + KBps(wb->balanced_dirty_ratelimit); +- __trace_wb_assign_cgroup(__get_str(cgroup), wb); ++ __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); + ), + + TP_printk("bdi %s: " + "write_bw=%lu awrite_bw=%lu dirty_rate=%lu " + "dirty_ratelimit=%lu task_ratelimit=%lu " +- "balanced_dirty_ratelimit=%lu cgroup=%s", ++ "balanced_dirty_ratelimit=%lu cgroup_ino=%u", + __entry->bdi, + __entry->write_bw, /* write bandwidth */ + __entry->avg_write_bw, /* avg write bandwidth */ +@@ -510,7 +480,7 @@ TRACE_EVENT(bdi_dirty_ratelimit, + __entry->dirty_ratelimit, /* base ratelimit */ + __entry->task_ratelimit, /* ratelimit with position control */ + __entry->balanced_dirty_ratelimit, /* the balanced ratelimit */ +- __get_str(cgroup) ++ __entry->cgroup_ino + ) + ); + +@@ -548,7 +518,7 @@ TRACE_EVENT(balance_dirty_pages, + __field( long, pause) + __field(unsigned long, period) + __field( long, think) +- __dynamic_array(char, cgroup, __trace_wb_cgroup_size(wb)) ++ __field(unsigned int, cgroup_ino) + ), + + TP_fast_assign( +@@ -571,7 +541,7 @@ TRACE_EVENT(balance_dirty_pages, + __entry->period = period * 1000 / HZ; + __entry->pause = pause * 1000 / HZ; + __entry->paused = (jiffies - start_time) * 1000 / HZ; +- __trace_wb_assign_cgroup(__get_str(cgroup), wb); ++ __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); + ), + + +@@ -580,7 +550,7 @@ TRACE_EVENT(balance_dirty_pages, + "bdi_setpoint=%lu bdi_dirty=%lu " + "dirty_ratelimit=%lu task_ratelimit=%lu " + "dirtied=%u dirtied_pause=%u " +- "paused=%lu pause=%ld period=%lu think=%ld cgroup=%s", ++ "paused=%lu pause=%ld period=%lu think=%ld cgroup_ino=%u", + __entry->bdi, + __entry->limit, + __entry->setpoint, +@@ -595,7 +565,7 @@ TRACE_EVENT(balance_dirty_pages, + __entry->pause, /* ms */ + __entry->period, /* ms */ + __entry->think, /* ms */ +- __get_str(cgroup) ++ __entry->cgroup_ino + ) + ); + +@@ -609,8 +579,7 @@ TRACE_EVENT(writeback_sb_inodes_requeue, + __field(unsigned long, ino) + __field(unsigned long, state) + __field(unsigned long, dirtied_when) +- __dynamic_array(char, cgroup, +- __trace_wb_cgroup_size(inode_to_wb(inode))) ++ __field(unsigned int, cgroup_ino) + ), + + TP_fast_assign( +@@ -619,16 +588,16 @@ TRACE_EVENT(writeback_sb_inodes_requeue, + __entry->ino = inode->i_ino; + __entry->state = inode->i_state; + __entry->dirtied_when = inode->dirtied_when; +- __trace_wb_assign_cgroup(__get_str(cgroup), inode_to_wb(inode)); ++ __entry->cgroup_ino = __trace_wb_assign_cgroup(inode_to_wb(inode)); + ), + +- TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu cgroup=%s", ++ TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu cgroup_ino=%u", + __entry->name, + __entry->ino, + show_inode_state(__entry->state), + __entry->dirtied_when, + (jiffies - __entry->dirtied_when) / HZ, +- __get_str(cgroup) ++ __entry->cgroup_ino + ) + ); + +@@ -684,7 +653,7 @@ DECLARE_EVENT_CLASS(writeback_single_inode_template, + __field(unsigned long, writeback_index) + __field(long, nr_to_write) + __field(unsigned long, wrote) +- __dynamic_array(char, cgroup, __trace_wbc_cgroup_size(wbc)) ++ __field(unsigned int, cgroup_ino) + ), + + TP_fast_assign( +@@ -696,11 +665,11 @@ DECLARE_EVENT_CLASS(writeback_single_inode_template, + __entry->writeback_index = inode->i_mapping->writeback_index; + __entry->nr_to_write = nr_to_write; + __entry->wrote = nr_to_write - wbc->nr_to_write; +- __trace_wbc_assign_cgroup(__get_str(cgroup), wbc); ++ __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc); + ), + + TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu " +- "index=%lu to_write=%ld wrote=%lu cgroup=%s", ++ "index=%lu to_write=%ld wrote=%lu cgroup_ino=%u", + __entry->name, + __entry->ino, + show_inode_state(__entry->state), +@@ -709,7 +678,7 @@ DECLARE_EVENT_CLASS(writeback_single_inode_template, + __entry->writeback_index, + __entry->nr_to_write, + __entry->wrote, +- __get_str(cgroup) ++ __entry->cgroup_ino + ) + ); + +diff --git a/kernel/cpu.c b/kernel/cpu.c +index 51aafc2..8edd3c7 100644 +--- a/kernel/cpu.c ++++ b/kernel/cpu.c +@@ -127,8 +127,8 @@ struct hotplug_pcp { + }; + + #ifdef CONFIG_PREEMPT_RT_FULL +-# define hotplug_lock(hp) rt_spin_lock(&(hp)->lock) +-# define hotplug_unlock(hp) rt_spin_unlock(&(hp)->lock) ++# define hotplug_lock(hp) rt_spin_lock__no_mg(&(hp)->lock) ++# define hotplug_unlock(hp) rt_spin_unlock__no_mg(&(hp)->lock) + #else + # define hotplug_lock(hp) mutex_lock(&(hp)->mutex) + # define hotplug_unlock(hp) mutex_unlock(&(hp)->mutex) +diff --git a/kernel/events/core.c b/kernel/events/core.c +index 33c8aa8..760f41d 100644 +--- a/kernel/events/core.c ++++ b/kernel/events/core.c +@@ -802,6 +802,7 @@ static void __perf_mux_hrtimer_init(struct perf_cpu_context *cpuctx, int cpu) + raw_spin_lock_init(&cpuctx->hrtimer_lock); + hrtimer_init(timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_PINNED); + timer->function = perf_mux_hrtimer_handler; ++ timer->irqsafe = 1; + } + + static int perf_mux_hrtimer_restart(struct perf_cpu_context *cpuctx) +diff --git a/kernel/futex.c b/kernel/futex.c +index a34e5ee..02bb869 100644 +--- a/kernel/futex.c ++++ b/kernel/futex.c +@@ -1226,7 +1226,7 @@ static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *this, + if (pi_state->owner != current) + return -EINVAL; + +- raw_spin_lock(&pi_state->pi_mutex.wait_lock); ++ raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock); + new_owner = rt_mutex_next_owner(&pi_state->pi_mutex); + + /* +@@ -1252,22 +1252,22 @@ static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *this, + else if (curval != uval) + ret = -EINVAL; + if (ret) { +- raw_spin_unlock(&pi_state->pi_mutex.wait_lock); ++ raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock); + return ret; + } + +- raw_spin_lock_irq(&pi_state->owner->pi_lock); ++ raw_spin_lock(&pi_state->owner->pi_lock); + WARN_ON(list_empty(&pi_state->list)); + list_del_init(&pi_state->list); +- raw_spin_unlock_irq(&pi_state->owner->pi_lock); ++ raw_spin_unlock(&pi_state->owner->pi_lock); + +- raw_spin_lock_irq(&new_owner->pi_lock); ++ raw_spin_lock(&new_owner->pi_lock); + WARN_ON(!list_empty(&pi_state->list)); + list_add(&pi_state->list, &new_owner->pi_state_list); + pi_state->owner = new_owner; +- raw_spin_unlock_irq(&new_owner->pi_lock); ++ raw_spin_unlock(&new_owner->pi_lock); + +- raw_spin_unlock(&pi_state->pi_mutex.wait_lock); ++ raw_spin_unlock_irq(&pi_state->pi_mutex.wait_lock); + + deboost = rt_mutex_futex_unlock(&pi_state->pi_mutex, &wake_q, + &wake_sleeper_q); +@@ -2144,11 +2144,11 @@ static int fixup_owner(u32 __user *uaddr, struct futex_q *q, int locked) + * we returned due to timeout or signal without taking the + * rt_mutex. Too late. + */ +- raw_spin_lock(&q->pi_state->pi_mutex.wait_lock); ++ raw_spin_lock_irq(&q->pi_state->pi_mutex.wait_lock); + owner = rt_mutex_owner(&q->pi_state->pi_mutex); + if (!owner) + owner = rt_mutex_next_owner(&q->pi_state->pi_mutex); +- raw_spin_unlock(&q->pi_state->pi_mutex.wait_lock); ++ raw_spin_unlock_irq(&q->pi_state->pi_mutex.wait_lock); + ret = fixup_pi_state_owner(uaddr, q, owner); + goto out; + } +diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c +index 239e2ae..0b73349 100644 +--- a/kernel/irq/irqdesc.c ++++ b/kernel/irq/irqdesc.c +@@ -24,10 +24,27 @@ + static struct lock_class_key irq_desc_lock_class; + + #if defined(CONFIG_SMP) ++static int __init irq_affinity_setup(char *str) ++{ ++ zalloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT); ++ cpulist_parse(str, irq_default_affinity); ++ /* ++ * Set at least the boot cpu. We don't want to end up with ++ * bugreports caused by random comandline masks ++ */ ++ cpumask_set_cpu(smp_processor_id(), irq_default_affinity); ++ return 1; ++} ++__setup("irqaffinity=", irq_affinity_setup); ++ + static void __init init_irq_default_affinity(void) + { +- alloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT); +- cpumask_setall(irq_default_affinity); ++#ifdef CONFIG_CPUMASK_OFFSTACK ++ if (!irq_default_affinity) ++ zalloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT); ++#endif ++ if (cpumask_empty(irq_default_affinity)) ++ cpumask_setall(irq_default_affinity); + } + #else + static void __init init_irq_default_affinity(void) +diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c +index ba2a42a..8e89554 100644 +--- a/kernel/irq/manage.c ++++ b/kernel/irq/manage.c +@@ -2060,7 +2060,7 @@ EXPORT_SYMBOL_GPL(irq_get_irqchip_state); + * This call sets the internal irqchip state of an interrupt, + * depending on the value of @which. + * +- * This function should be called with preemption disabled if the ++ * This function should be called with migration disabled if the + * interrupt controller has per-cpu registers. + */ + int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which, +diff --git a/kernel/locking/lglock.c b/kernel/locking/lglock.c +index d8be4fc..57e0ea7 100644 +--- a/kernel/locking/lglock.c ++++ b/kernel/locking/lglock.c +@@ -10,7 +10,7 @@ + # define lg_do_unlock(l) arch_spin_unlock(l) + #else + # define lg_lock_ptr struct rt_mutex +-# define lg_do_lock(l) __rt_spin_lock(l) ++# define lg_do_lock(l) __rt_spin_lock__no_mg(l) + # define lg_do_unlock(l) __rt_spin_unlock(l) + #endif + /* +@@ -86,7 +86,7 @@ void lg_double_lock(struct lglock *lg, int cpu1, int cpu2) + if (cpu2 < cpu1) + swap(cpu1, cpu2); + +- preempt_disable(); ++ preempt_disable_nort(); + lock_acquire_shared(&lg->lock_dep_map, 0, 0, NULL, _RET_IP_); + lg_do_lock(per_cpu_ptr(lg->lock, cpu1)); + lg_do_lock(per_cpu_ptr(lg->lock, cpu2)); +@@ -97,7 +97,7 @@ void lg_double_unlock(struct lglock *lg, int cpu1, int cpu2) + lock_release(&lg->lock_dep_map, 1, _RET_IP_); + lg_do_unlock(per_cpu_ptr(lg->lock, cpu1)); + lg_do_unlock(per_cpu_ptr(lg->lock, cpu2)); +- preempt_enable(); ++ preempt_enable_nort(); + } + + void lg_global_lock(struct lglock *lg) +diff --git a/kernel/locking/rt.c b/kernel/locking/rt.c +index 1bbbcad5..d4ab61c 100644 +--- a/kernel/locking/rt.c ++++ b/kernel/locking/rt.c +@@ -235,7 +235,6 @@ EXPORT_SYMBOL(rt_read_trylock); + void __lockfunc rt_write_lock(rwlock_t *rwlock) + { + rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_); +- migrate_disable(); + __rt_spin_lock(&rwlock->lock); + } + EXPORT_SYMBOL(rt_write_lock); +@@ -249,7 +248,6 @@ void __lockfunc rt_read_lock(rwlock_t *rwlock) + * recursive read locks succeed when current owns the lock + */ + if (rt_mutex_owner(lock) != current) { +- migrate_disable(); + rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_); + __rt_spin_lock(lock); + } +diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c +index e1ddae3..6697100 100644 +--- a/kernel/locking/rtmutex.c ++++ b/kernel/locking/rtmutex.c +@@ -111,13 +111,14 @@ static inline void mark_rt_mutex_waiters(struct rt_mutex *lock) + * 2) Drop lock->wait_lock + * 3) Try to unlock the lock with cmpxchg + */ +-static inline bool unlock_rt_mutex_safe(struct rt_mutex *lock) ++static inline bool unlock_rt_mutex_safe(struct rt_mutex *lock, ++ unsigned long flags) + __releases(lock->wait_lock) + { + struct task_struct *owner = rt_mutex_owner(lock); + + clear_rt_mutex_waiters(lock); +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + /* + * If a new waiter comes in between the unlock and the cmpxchg + * we have two situations: +@@ -159,11 +160,12 @@ static inline void mark_rt_mutex_waiters(struct rt_mutex *lock) + /* + * Simple slow path only version: lock->owner is protected by lock->wait_lock. + */ +-static inline bool unlock_rt_mutex_safe(struct rt_mutex *lock) ++static inline bool unlock_rt_mutex_safe(struct rt_mutex *lock, ++ unsigned long flags) + __releases(lock->wait_lock) + { + lock->owner = NULL; +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + return true; + } + #endif +@@ -454,7 +456,6 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + int ret = 0, depth = 0; + struct rt_mutex *lock; + bool detect_deadlock; +- unsigned long flags; + bool requeue = true; + + detect_deadlock = rt_mutex_cond_detect_deadlock(orig_waiter, chwalk); +@@ -497,7 +498,7 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + /* + * [1] Task cannot go away as we did a get_task() before ! + */ +- raw_spin_lock_irqsave(&task->pi_lock, flags); ++ raw_spin_lock_irq(&task->pi_lock); + + /* + * [2] Get the waiter on which @task is blocked on. +@@ -581,7 +582,7 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + * operations. + */ + if (!raw_spin_trylock(&lock->wait_lock)) { +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++ raw_spin_unlock_irq(&task->pi_lock); + cpu_relax(); + goto retry; + } +@@ -612,7 +613,7 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + /* + * No requeue[7] here. Just release @task [8] + */ +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++ raw_spin_unlock(&task->pi_lock); + put_task_struct(task); + + /* +@@ -620,14 +621,14 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + * If there is no owner of the lock, end of chain. + */ + if (!rt_mutex_owner(lock)) { +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + return 0; + } + + /* [10] Grab the next task, i.e. owner of @lock */ + task = rt_mutex_owner(lock); + get_task_struct(task); +- raw_spin_lock_irqsave(&task->pi_lock, flags); ++ raw_spin_lock(&task->pi_lock); + + /* + * No requeue [11] here. We just do deadlock detection. +@@ -642,8 +643,8 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + top_waiter = rt_mutex_top_waiter(lock); + + /* [13] Drop locks */ +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock(&task->pi_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + + /* If owner is not blocked, end of chain. */ + if (!next_lock) +@@ -664,7 +665,7 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + rt_mutex_enqueue(lock, waiter); + + /* [8] Release the task */ +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++ raw_spin_unlock(&task->pi_lock); + put_task_struct(task); + + /* +@@ -685,14 +686,14 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + lock_top_waiter = rt_mutex_top_waiter(lock); + if (prerequeue_top_waiter != lock_top_waiter) + rt_mutex_wake_waiter(lock_top_waiter); +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + return 0; + } + + /* [10] Grab the next task, i.e. the owner of @lock */ + task = rt_mutex_owner(lock); + get_task_struct(task); +- raw_spin_lock_irqsave(&task->pi_lock, flags); ++ raw_spin_lock(&task->pi_lock); + + /* [11] requeue the pi waiters if necessary */ + if (waiter == rt_mutex_top_waiter(lock)) { +@@ -746,8 +747,8 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + top_waiter = rt_mutex_top_waiter(lock); + + /* [13] Drop the locks */ +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock(&task->pi_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + + /* + * Make the actual exit decisions [12], based on the stored +@@ -770,7 +771,7 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task, + goto again; + + out_unlock_pi: +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++ raw_spin_unlock_irq(&task->pi_lock); + out_put_task: + put_task_struct(task); + +@@ -799,7 +800,7 @@ static inline int lock_is_stealable(struct task_struct *task, + /* + * Try to take an rt-mutex + * +- * Must be called with lock->wait_lock held. ++ * Must be called with lock->wait_lock held and interrupts disabled + * + * @lock: The lock to be acquired. + * @task: The task which wants to acquire the lock +@@ -810,8 +811,6 @@ static int __try_to_take_rt_mutex(struct rt_mutex *lock, + struct task_struct *task, + struct rt_mutex_waiter *waiter, int mode) + { +- unsigned long flags; +- + /* + * Before testing whether we can acquire @lock, we set the + * RT_MUTEX_HAS_WAITERS bit in @lock->owner. This forces all +@@ -894,7 +893,7 @@ static int __try_to_take_rt_mutex(struct rt_mutex *lock, + * case, but conditionals are more expensive than a redundant + * store. + */ +- raw_spin_lock_irqsave(&task->pi_lock, flags); ++ raw_spin_lock(&task->pi_lock); + task->pi_blocked_on = NULL; + /* + * Finish the lock acquisition. @task is the new owner. If +@@ -903,7 +902,7 @@ static int __try_to_take_rt_mutex(struct rt_mutex *lock, + */ + if (rt_mutex_has_waiters(lock)) + rt_mutex_enqueue_pi(task, rt_mutex_top_waiter(lock)); +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++ raw_spin_unlock(&task->pi_lock); + + takeit: + /* We got the lock. */ +@@ -925,14 +924,19 @@ static int __try_to_take_rt_mutex(struct rt_mutex *lock, + * preemptible spin_lock functions: + */ + static inline void rt_spin_lock_fastlock(struct rt_mutex *lock, +- void (*slowfn)(struct rt_mutex *lock)) ++ void (*slowfn)(struct rt_mutex *lock, ++ bool mg_off), ++ bool do_mig_dis) + { + might_sleep_no_state_check(); + ++ if (do_mig_dis) ++ migrate_disable(); ++ + if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current))) + rt_mutex_deadlock_account_lock(lock, current); + else +- slowfn(lock); ++ slowfn(lock, do_mig_dis); + } + + static inline void rt_spin_lock_fastunlock(struct rt_mutex *lock, +@@ -979,9 +983,6 @@ static int adaptive_wait(struct rt_mutex *lock, + } + #endif + +-# define pi_lock(lock) raw_spin_lock_irq(lock) +-# define pi_unlock(lock) raw_spin_unlock_irq(lock) +- + static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + struct rt_mutex_waiter *waiter, + struct task_struct *task, +@@ -993,18 +994,20 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + * We store the current state under p->pi_lock in p->saved_state and + * the try_to_wake_up() code handles this accordingly. + */ +-static void noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock) ++static void noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock, ++ bool mg_off) + { + struct task_struct *lock_owner, *self = current; + struct rt_mutex_waiter waiter, *top_waiter; ++ unsigned long flags; + int ret; + + rt_mutex_init_waiter(&waiter, true); + +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); + + if (__try_to_take_rt_mutex(lock, self, NULL, STEAL_LATERAL)) { +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + return; + } + +@@ -1016,10 +1019,10 @@ static void noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock) + * as well. We are serialized via pi_lock against wakeups. See + * try_to_wake_up(). + */ +- pi_lock(&self->pi_lock); ++ raw_spin_lock(&self->pi_lock); + self->saved_state = self->state; + __set_current_state_no_track(TASK_UNINTERRUPTIBLE); +- pi_unlock(&self->pi_lock); ++ raw_spin_unlock(&self->pi_lock); + + ret = task_blocks_on_rt_mutex(lock, &waiter, self, RT_MUTEX_MIN_CHAINWALK); + BUG_ON(ret); +@@ -1032,18 +1035,23 @@ static void noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock) + top_waiter = rt_mutex_top_waiter(lock); + lock_owner = rt_mutex_owner(lock); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + + debug_rt_mutex_print_deadlock(&waiter); + +- if (top_waiter != &waiter || adaptive_wait(lock, lock_owner)) ++ if (top_waiter != &waiter || adaptive_wait(lock, lock_owner)) { ++ if (mg_off) ++ migrate_enable(); + schedule(); ++ if (mg_off) ++ migrate_disable(); ++ } + +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); + +- pi_lock(&self->pi_lock); ++ raw_spin_lock(&self->pi_lock); + __set_current_state_no_track(TASK_UNINTERRUPTIBLE); +- pi_unlock(&self->pi_lock); ++ raw_spin_unlock(&self->pi_lock); + } + + /* +@@ -1053,10 +1061,10 @@ static void noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock) + * happened while we were blocked. Clear saved_state so + * try_to_wakeup() does not get confused. + */ +- pi_lock(&self->pi_lock); ++ raw_spin_lock(&self->pi_lock); + __set_current_state_no_track(self->saved_state); + self->saved_state = TASK_RUNNING; +- pi_unlock(&self->pi_lock); ++ raw_spin_unlock(&self->pi_lock); + + /* + * try_to_take_rt_mutex() sets the waiter bit +@@ -1067,7 +1075,7 @@ static void noinline __sched rt_spin_lock_slowlock(struct rt_mutex *lock) + BUG_ON(rt_mutex_has_waiters(lock) && &waiter == rt_mutex_top_waiter(lock)); + BUG_ON(!RB_EMPTY_NODE(&waiter.tree_entry)); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + + debug_rt_mutex_free_waiter(&waiter); + } +@@ -1080,10 +1088,11 @@ static void mark_wakeup_next_waiter(struct wake_q_head *wake_q, + */ + static void noinline __sched rt_spin_lock_slowunlock(struct rt_mutex *lock) + { ++ unsigned long flags; + WAKE_Q(wake_q); + WAKE_Q(wake_sleeper_q); + +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); + + debug_rt_mutex_unlock(lock); + +@@ -1091,13 +1100,13 @@ static void noinline __sched rt_spin_lock_slowunlock(struct rt_mutex *lock) + + if (!rt_mutex_has_waiters(lock)) { + lock->owner = NULL; +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + return; + } + + mark_wakeup_next_waiter(&wake_q, &wake_sleeper_q, lock); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + wake_up_q(&wake_q); + wake_up_q_sleeper(&wake_sleeper_q); + +@@ -1105,33 +1114,55 @@ static void noinline __sched rt_spin_lock_slowunlock(struct rt_mutex *lock) + rt_mutex_adjust_prio(current); + } + ++void __lockfunc rt_spin_lock__no_mg(spinlock_t *lock) ++{ ++ rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock, false); ++ spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); ++} ++EXPORT_SYMBOL(rt_spin_lock__no_mg); ++ + void __lockfunc rt_spin_lock(spinlock_t *lock) + { +- rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock); ++ rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock, true); + spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); + } + EXPORT_SYMBOL(rt_spin_lock); + + void __lockfunc __rt_spin_lock(struct rt_mutex *lock) + { +- rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock); ++ rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock, true); + } + EXPORT_SYMBOL(__rt_spin_lock); + ++void __lockfunc __rt_spin_lock__no_mg(struct rt_mutex *lock) ++{ ++ rt_spin_lock_fastlock(lock, rt_spin_lock_slowlock, false); ++} ++EXPORT_SYMBOL(__rt_spin_lock__no_mg); ++ + #ifdef CONFIG_DEBUG_LOCK_ALLOC + void __lockfunc rt_spin_lock_nested(spinlock_t *lock, int subclass) + { +- rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock); + spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_); ++ rt_spin_lock_fastlock(&lock->lock, rt_spin_lock_slowlock, true); + } + EXPORT_SYMBOL(rt_spin_lock_nested); + #endif + ++void __lockfunc rt_spin_unlock__no_mg(spinlock_t *lock) ++{ ++ /* NOTE: we always pass in '1' for nested, for simplicity */ ++ spin_release(&lock->dep_map, 1, _RET_IP_); ++ rt_spin_lock_fastunlock(&lock->lock, rt_spin_lock_slowunlock); ++} ++EXPORT_SYMBOL(rt_spin_unlock__no_mg); ++ + void __lockfunc rt_spin_unlock(spinlock_t *lock) + { + /* NOTE: we always pass in '1' for nested, for simplicity */ + spin_release(&lock->dep_map, 1, _RET_IP_); + rt_spin_lock_fastunlock(&lock->lock, rt_spin_lock_slowunlock); ++ migrate_enable(); + } + EXPORT_SYMBOL(rt_spin_unlock); + +@@ -1158,12 +1189,27 @@ int __lockfunc __rt_spin_trylock(struct rt_mutex *lock) + return rt_mutex_trylock(lock); + } + ++int __lockfunc rt_spin_trylock__no_mg(spinlock_t *lock) ++{ ++ int ret; ++ ++ ret = rt_mutex_trylock(&lock->lock); ++ if (ret) ++ spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); ++ return ret; ++} ++EXPORT_SYMBOL(rt_spin_trylock__no_mg); ++ + int __lockfunc rt_spin_trylock(spinlock_t *lock) + { +- int ret = rt_mutex_trylock(&lock->lock); ++ int ret; + ++ migrate_disable(); ++ ret = rt_mutex_trylock(&lock->lock); + if (ret) + spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); ++ else ++ migrate_enable(); + return ret; + } + EXPORT_SYMBOL(rt_spin_trylock); +@@ -1202,12 +1248,10 @@ int atomic_dec_and_spin_lock(atomic_t *atomic, spinlock_t *lock) + /* Subtract 1 from counter unless that drops it to 0 (ie. it was 1) */ + if (atomic_add_unless(atomic, -1, 1)) + return 0; +- migrate_disable(); + rt_spin_lock(lock); + if (atomic_dec_and_test(atomic)) + return 1; + rt_spin_unlock(lock); +- migrate_enable(); + return 0; + } + EXPORT_SYMBOL(atomic_dec_and_spin_lock); +@@ -1273,7 +1317,7 @@ try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task, + * + * Prepare waiter and propagate pi chain + * +- * This must be called with lock->wait_lock held. ++ * This must be called with lock->wait_lock held and interrupts disabled + */ + static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + struct rt_mutex_waiter *waiter, +@@ -1284,7 +1328,6 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + struct rt_mutex_waiter *top_waiter = waiter; + struct rt_mutex *next_lock; + int chain_walk = 0, res; +- unsigned long flags; + + /* + * Early deadlock detection. We really don't want the task to +@@ -1298,7 +1341,7 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + if (owner == task) + return -EDEADLK; + +- raw_spin_lock_irqsave(&task->pi_lock, flags); ++ raw_spin_lock(&task->pi_lock); + + /* + * In the case of futex requeue PI, this will be a proxy +@@ -1310,7 +1353,7 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + * the task if PI_WAKEUP_INPROGRESS is set. + */ + if (task != current && task->pi_blocked_on == PI_WAKEUP_INPROGRESS) { +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++ raw_spin_unlock(&task->pi_lock); + return -EAGAIN; + } + +@@ -1328,12 +1371,12 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + + task->pi_blocked_on = waiter; + +- raw_spin_unlock_irqrestore(&task->pi_lock, flags); ++ raw_spin_unlock(&task->pi_lock); + + if (!owner) + return 0; + +- raw_spin_lock_irqsave(&owner->pi_lock, flags); ++ raw_spin_lock(&owner->pi_lock); + if (waiter == rt_mutex_top_waiter(lock)) { + rt_mutex_dequeue_pi(owner, top_waiter); + rt_mutex_enqueue_pi(owner, waiter); +@@ -1348,7 +1391,7 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + /* Store the lock on which owner is blocked or NULL */ + next_lock = task_blocked_on_lock(owner); + +- raw_spin_unlock_irqrestore(&owner->pi_lock, flags); ++ raw_spin_unlock(&owner->pi_lock); + /* + * Even if full deadlock detection is on, if the owner is not + * blocked itself, we can avoid finding this out in the chain +@@ -1364,12 +1407,12 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + */ + get_task_struct(owner); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + + res = rt_mutex_adjust_prio_chain(owner, chwalk, lock, + next_lock, waiter, task); + +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irq(&lock->wait_lock); + + return res; + } +@@ -1378,16 +1421,15 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock, + * Remove the top waiter from the current tasks pi waiter tree and + * queue it up. + * +- * Called with lock->wait_lock held. ++ * Called with lock->wait_lock held and interrupts disabled. + */ + static void mark_wakeup_next_waiter(struct wake_q_head *wake_q, + struct wake_q_head *wake_sleeper_q, + struct rt_mutex *lock) + { + struct rt_mutex_waiter *waiter; +- unsigned long flags; + +- raw_spin_lock_irqsave(¤t->pi_lock, flags); ++ raw_spin_lock(¤t->pi_lock); + + waiter = rt_mutex_top_waiter(lock); + +@@ -1409,7 +1451,7 @@ static void mark_wakeup_next_waiter(struct wake_q_head *wake_q, + */ + lock->owner = (void *) RT_MUTEX_HAS_WAITERS; + +- raw_spin_unlock_irqrestore(¤t->pi_lock, flags); ++ raw_spin_unlock(¤t->pi_lock); + + if (waiter->savestate) + wake_q_add(wake_sleeper_q, waiter->task); +@@ -1420,7 +1462,7 @@ static void mark_wakeup_next_waiter(struct wake_q_head *wake_q, + /* + * Remove a waiter from a lock and give up + * +- * Must be called with lock->wait_lock held and ++ * Must be called with lock->wait_lock held and interrupts disabled. I must + * have just failed to try_to_take_rt_mutex(). + */ + static void remove_waiter(struct rt_mutex *lock, +@@ -1429,12 +1471,11 @@ static void remove_waiter(struct rt_mutex *lock, + bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock)); + struct task_struct *owner = rt_mutex_owner(lock); + struct rt_mutex *next_lock = NULL; +- unsigned long flags; + +- raw_spin_lock_irqsave(¤t->pi_lock, flags); ++ raw_spin_lock(¤t->pi_lock); + rt_mutex_dequeue(lock, waiter); + current->pi_blocked_on = NULL; +- raw_spin_unlock_irqrestore(¤t->pi_lock, flags); ++ raw_spin_unlock(¤t->pi_lock); + + /* + * Only update priority if the waiter was the highest priority +@@ -1443,7 +1484,7 @@ static void remove_waiter(struct rt_mutex *lock, + if (!owner || !is_top_waiter) + return; + +- raw_spin_lock_irqsave(&owner->pi_lock, flags); ++ raw_spin_lock(&owner->pi_lock); + + rt_mutex_dequeue_pi(owner, waiter); + +@@ -1456,7 +1497,7 @@ static void remove_waiter(struct rt_mutex *lock, + if (rt_mutex_real_waiter(owner->pi_blocked_on)) + next_lock = task_blocked_on_lock(owner); + +- raw_spin_unlock_irqrestore(&owner->pi_lock, flags); ++ raw_spin_unlock(&owner->pi_lock); + + /* + * Don't walk the chain, if the owner task is not blocked +@@ -1468,12 +1509,12 @@ static void remove_waiter(struct rt_mutex *lock, + /* gets dropped in rt_mutex_adjust_prio_chain()! */ + get_task_struct(owner); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + + rt_mutex_adjust_prio_chain(owner, RT_MUTEX_MIN_CHAINWALK, lock, + next_lock, NULL, current); + +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irq(&lock->wait_lock); + } + + /* +@@ -1509,11 +1550,11 @@ void rt_mutex_adjust_pi(struct task_struct *task) + * __rt_mutex_slowlock() - Perform the wait-wake-try-to-take loop + * @lock: the rt_mutex to take + * @state: the state the task should block in (TASK_INTERRUPTIBLE +- * or TASK_UNINTERRUPTIBLE) ++ * or TASK_UNINTERRUPTIBLE) + * @timeout: the pre-initialized and started timer, or NULL for none + * @waiter: the pre-initialized rt_mutex_waiter + * +- * lock->wait_lock must be held by the caller. ++ * Must be called with lock->wait_lock held and interrupts disabled + */ + static int __sched + __rt_mutex_slowlock(struct rt_mutex *lock, int state, +@@ -1548,13 +1589,13 @@ __rt_mutex_slowlock(struct rt_mutex *lock, int state, + break; + } + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + + debug_rt_mutex_print_deadlock(waiter); + + schedule(); + +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irq(&lock->wait_lock); + set_current_state(state); + } + +@@ -1668,17 +1709,26 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state, + struct ww_acquire_ctx *ww_ctx) + { + struct rt_mutex_waiter waiter; ++ unsigned long flags; + int ret = 0; + + rt_mutex_init_waiter(&waiter, false); + +- raw_spin_lock(&lock->wait_lock); ++ /* ++ * Technically we could use raw_spin_[un]lock_irq() here, but this can ++ * be called in early boot if the cmpxchg() fast path is disabled ++ * (debug, no architecture support). In this case we will acquire the ++ * rtmutex with lock->wait_lock held. But we cannot unconditionally ++ * enable interrupts in that early boot case. So we need to use the ++ * irqsave/restore variants. ++ */ ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); + + /* Try to acquire the lock again: */ + if (try_to_take_rt_mutex(lock, current, NULL)) { + if (ww_ctx) + ww_mutex_account_lock(lock, ww_ctx); +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + return 0; + } + +@@ -1717,7 +1767,7 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state, + */ + fixup_rt_mutex_waiters(lock); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + + /* Remove pending timer: */ + if (unlikely(timeout)) +@@ -1733,6 +1783,7 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state, + */ + static inline int rt_mutex_slowtrylock(struct rt_mutex *lock) + { ++ unsigned long flags; + int ret; + + /* +@@ -1744,10 +1795,10 @@ static inline int rt_mutex_slowtrylock(struct rt_mutex *lock) + return 0; + + /* +- * The mutex has currently no owner. Lock the wait lock and +- * try to acquire the lock. ++ * The mutex has currently no owner. Lock the wait lock and try to ++ * acquire the lock. We use irqsave here to support early boot calls. + */ +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); + + ret = try_to_take_rt_mutex(lock, current, NULL); + +@@ -1757,7 +1808,7 @@ static inline int rt_mutex_slowtrylock(struct rt_mutex *lock) + */ + fixup_rt_mutex_waiters(lock); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + + return ret; + } +@@ -1770,7 +1821,10 @@ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, + struct wake_q_head *wake_q, + struct wake_q_head *wake_sleeper_q) + { +- raw_spin_lock(&lock->wait_lock); ++ unsigned long flags; ++ ++ /* irqsave required to support early boot calls */ ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); + + debug_rt_mutex_unlock(lock); + +@@ -1809,10 +1863,10 @@ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, + */ + while (!rt_mutex_has_waiters(lock)) { + /* Drops lock->wait_lock ! */ +- if (unlock_rt_mutex_safe(lock) == true) ++ if (unlock_rt_mutex_safe(lock, flags) == true) + return false; + /* Relock the rtmutex and try again */ +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irqsave(&lock->wait_lock, flags); + } + + /* +@@ -1823,7 +1877,7 @@ static bool __sched rt_mutex_slowunlock(struct rt_mutex *lock, + */ + mark_wakeup_next_waiter(wake_q, wake_sleeper_q, lock); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irqrestore(&lock->wait_lock, flags); + + /* check PI boosting */ + return true; +@@ -2135,10 +2189,10 @@ int rt_mutex_start_proxy_lock(struct rt_mutex *lock, + { + int ret; + +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irq(&lock->wait_lock); + + if (try_to_take_rt_mutex(lock, task, NULL)) { +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + return 1; + } + +@@ -2161,14 +2215,14 @@ int rt_mutex_start_proxy_lock(struct rt_mutex *lock, + * PI_REQUEUE_INPROGRESS, so that if the task is waking up + * it will know that we are in the process of requeuing it. + */ +- raw_spin_lock_irq(&task->pi_lock); ++ raw_spin_lock(&task->pi_lock); + if (task->pi_blocked_on) { +- raw_spin_unlock_irq(&task->pi_lock); +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock(&task->pi_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + return -EAGAIN; + } + task->pi_blocked_on = PI_REQUEUE_INPROGRESS; +- raw_spin_unlock_irq(&task->pi_lock); ++ raw_spin_unlock(&task->pi_lock); + #endif + + /* We enforce deadlock detection for futexes */ +@@ -2188,7 +2242,7 @@ int rt_mutex_start_proxy_lock(struct rt_mutex *lock, + if (ret && rt_mutex_has_waiters(lock)) + remove_waiter(lock, waiter); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + + debug_rt_mutex_print_deadlock(waiter); + +@@ -2236,7 +2290,7 @@ int rt_mutex_finish_proxy_lock(struct rt_mutex *lock, + { + int ret; + +- raw_spin_lock(&lock->wait_lock); ++ raw_spin_lock_irq(&lock->wait_lock); + + set_current_state(TASK_INTERRUPTIBLE); + +@@ -2252,7 +2306,7 @@ int rt_mutex_finish_proxy_lock(struct rt_mutex *lock, + */ + fixup_rt_mutex_waiters(lock); + +- raw_spin_unlock(&lock->wait_lock); ++ raw_spin_unlock_irq(&lock->wait_lock); + + return ret; + } +diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c +index bfd9e09..fbb23f9 100644 +--- a/kernel/power/hibernate.c ++++ b/kernel/power/hibernate.c +@@ -648,6 +648,10 @@ static void power_down(void) + cpu_relax(); + } + ++#ifndef CONFIG_SUSPEND ++bool pm_in_action; ++#endif ++ + /** + * hibernate - Carry out system hibernation, including saving the image. + */ +@@ -660,6 +664,8 @@ int hibernate(void) + return -EPERM; + } + ++ pm_in_action = true; ++ + lock_system_sleep(); + /* The snapshot device should not be opened while we're running */ + if (!atomic_add_unless(&snapshot_device_available, -1, 0)) { +@@ -725,6 +731,7 @@ int hibernate(void) + atomic_inc(&snapshot_device_available); + Unlock: + unlock_system_sleep(); ++ pm_in_action = false; + return error; + } + +diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c +index 80ebc07..393bc34 100644 +--- a/kernel/power/suspend.c ++++ b/kernel/power/suspend.c +@@ -522,6 +522,8 @@ static int enter_state(suspend_state_t state) + return error; + } + ++bool pm_in_action; ++ + /** + * pm_suspend - Externally visible function for suspending the system. + * @state: System sleep state to enter. +@@ -536,6 +538,8 @@ int pm_suspend(suspend_state_t state) + if (state <= PM_SUSPEND_ON || state >= PM_SUSPEND_MAX) + return -EINVAL; + ++ pm_in_action = true; ++ + error = enter_state(state); + if (error) { + suspend_stats.fail++; +@@ -543,6 +547,7 @@ int pm_suspend(suspend_state_t state) + } else { + suspend_stats.success++; + } ++ pm_in_action = false; + return error; + } + EXPORT_SYMBOL(pm_suspend); +diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c +index 69fbfde..f75e4b0 100644 +--- a/kernel/printk/printk.c ++++ b/kernel/printk/printk.c +@@ -241,6 +241,65 @@ struct printk_log { + */ + static DEFINE_RAW_SPINLOCK(logbuf_lock); + ++#ifdef CONFIG_EARLY_PRINTK ++struct console *early_console; ++ ++static void early_vprintk(const char *fmt, va_list ap) ++{ ++ if (early_console) { ++ char buf[512]; ++ int n = vscnprintf(buf, sizeof(buf), fmt, ap); ++ ++ early_console->write(early_console, buf, n); ++ } ++} ++ ++asmlinkage void early_printk(const char *fmt, ...) ++{ ++ va_list ap; ++ ++ va_start(ap, fmt); ++ early_vprintk(fmt, ap); ++ va_end(ap); ++} ++ ++/* ++ * This is independent of any log levels - a global ++ * kill switch that turns off all of printk. ++ * ++ * Used by the NMI watchdog if early-printk is enabled. ++ */ ++static bool __read_mostly printk_killswitch; ++ ++static int __init force_early_printk_setup(char *str) ++{ ++ printk_killswitch = true; ++ return 0; ++} ++early_param("force_early_printk", force_early_printk_setup); ++ ++void printk_kill(void) ++{ ++ printk_killswitch = true; ++} ++ ++#ifdef CONFIG_PRINTK ++static int forced_early_printk(const char *fmt, va_list ap) ++{ ++ if (!printk_killswitch) ++ return 0; ++ early_vprintk(fmt, ap); ++ return 1; ++} ++#endif ++ ++#else ++static inline int forced_early_printk(const char *fmt, va_list ap) ++{ ++ return 0; ++} ++#endif ++ + #ifdef CONFIG_PRINTK + DECLARE_WAIT_QUEUE_HEAD(log_wait); + /* the next printk record to read by syslog(READ) or /proc/kmsg */ +@@ -1692,62 +1751,6 @@ static size_t cont_print_text(char *text, size_t size) + return textlen; + } + +-#ifdef CONFIG_EARLY_PRINTK +-struct console *early_console; +- +-static void early_vprintk(const char *fmt, va_list ap) +-{ +- if (early_console) { +- char buf[512]; +- int n = vscnprintf(buf, sizeof(buf), fmt, ap); +- +- early_console->write(early_console, buf, n); +- } +-} +- +-asmlinkage void early_printk(const char *fmt, ...) +-{ +- va_list ap; +- +- va_start(ap, fmt); +- early_vprintk(fmt, ap); +- va_end(ap); +-} +- +-/* +- * This is independent of any log levels - a global +- * kill switch that turns off all of printk. +- * +- * Used by the NMI watchdog if early-printk is enabled. +- */ +-static bool __read_mostly printk_killswitch; +- +-static int __init force_early_printk_setup(char *str) +-{ +- printk_killswitch = true; +- return 0; +-} +-early_param("force_early_printk", force_early_printk_setup); +- +-void printk_kill(void) +-{ +- printk_killswitch = true; +-} +- +-static int forced_early_printk(const char *fmt, va_list ap) +-{ +- if (!printk_killswitch) +- return 0; +- early_vprintk(fmt, ap); +- return 1; +-} +-#else +-static inline int forced_early_printk(const char *fmt, va_list ap) +-{ +- return 0; +-} +-#endif +- + asmlinkage int vprintk_emit(int facility, int level, + const char *dict, size_t dictlen, + const char *fmt, va_list args) +@@ -2410,7 +2413,6 @@ void console_unlock(void) + start_critical_timings(); + local_irq_restore(flags); + #endif +- + if (do_cond_resched) + cond_resched(); + } +diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c +index d89328e..5bb3364 100644 +--- a/kernel/rcu/rcutorture.c ++++ b/kernel/rcu/rcutorture.c +@@ -390,6 +390,7 @@ static struct rcu_torture_ops rcu_ops = { + .name = "rcu" + }; + ++#ifndef CONFIG_PREEMPT_RT_FULL + /* + * Definitions for rcu_bh torture testing. + */ +@@ -429,6 +430,12 @@ static struct rcu_torture_ops rcu_bh_ops = { + .name = "rcu_bh" + }; + ++#else ++static struct rcu_torture_ops rcu_bh_ops = { ++ .ttype = INVALID_RCU_FLAVOR, ++}; ++#endif ++ + /* + * Don't even think about trying any of these in real life!!! + * The names includes "busted", and they really means it! +diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c +index 5359091..d862a20 100644 +--- a/kernel/rcu/tree.c ++++ b/kernel/rcu/tree.c +@@ -454,11 +454,13 @@ EXPORT_SYMBOL_GPL(rcu_batches_started_sched); + /* + * Return the number of RCU BH batches started thus far for debug & stats. + */ ++#ifndef CONFIG_PREEMPT_RT_FULL + unsigned long rcu_batches_started_bh(void) + { + return rcu_bh_state.gpnum; + } + EXPORT_SYMBOL_GPL(rcu_batches_started_bh); ++#endif + + /* + * Return the number of RCU batches completed thus far for debug & stats. +@@ -563,9 +565,11 @@ void rcutorture_get_gp_data(enum rcutorture_type test_type, int *flags, + case RCU_FLAVOR: + rsp = rcu_state_p; + break; ++#ifndef CONFIG_PREEMPT_RT_FULL + case RCU_BH_FLAVOR: + rsp = &rcu_bh_state; + break; ++#endif + case RCU_SCHED_FLAVOR: + rsp = &rcu_sched_state; + break; +@@ -1617,7 +1621,6 @@ static int rcu_future_gp_cleanup(struct rcu_state *rsp, struct rcu_node *rnp) + int needmore; + struct rcu_data *rdp = this_cpu_ptr(rsp->rda); + +- rcu_nocb_gp_cleanup(rsp, rnp); + rnp->need_future_gp[c & 0x1] = 0; + needmore = rnp->need_future_gp[(c + 1) & 0x1]; + trace_rcu_future_gp(rnp, rdp, c, +@@ -1638,7 +1641,7 @@ static void rcu_gp_kthread_wake(struct rcu_state *rsp) + !READ_ONCE(rsp->gp_flags) || + !rsp->gp_kthread) + return; +- swait_wake(&rsp->gp_wq); ++ swake_up(&rsp->gp_wq); + } + + /* +@@ -2018,6 +2021,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) + int nocb = 0; + struct rcu_data *rdp; + struct rcu_node *rnp = rcu_get_root(rsp); ++ struct swait_queue_head *sq; + + WRITE_ONCE(rsp->gp_activity, jiffies); + raw_spin_lock_irq(&rnp->lock); +@@ -2056,7 +2060,9 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) + needgp = __note_gp_changes(rsp, rnp, rdp) || needgp; + /* smp_mb() provided by prior unlock-lock pair. */ + nocb += rcu_future_gp_cleanup(rsp, rnp); ++ sq = rcu_nocb_gp_get(rnp); + raw_spin_unlock_irq(&rnp->lock); ++ rcu_nocb_gp_cleanup(sq); + cond_resched_rcu_qs(); + WRITE_ONCE(rsp->gp_activity, jiffies); + rcu_gp_slow(rsp, gp_cleanup_delay); +@@ -2257,7 +2263,7 @@ static void rcu_report_qs_rsp(struct rcu_state *rsp, unsigned long flags) + WARN_ON_ONCE(!rcu_gp_in_progress(rsp)); + WRITE_ONCE(rsp->gp_flags, READ_ONCE(rsp->gp_flags) | RCU_GP_FLAG_FQS); + raw_spin_unlock_irqrestore(&rcu_get_root(rsp)->lock, flags); +- rcu_gp_kthread_wake(rsp); ++ swake_up(&rsp->gp_wq); /* Memory barrier implied by swake_up() path. */ + } + + /* +@@ -2918,7 +2924,7 @@ static void force_quiescent_state(struct rcu_state *rsp) + } + WRITE_ONCE(rsp->gp_flags, READ_ONCE(rsp->gp_flags) | RCU_GP_FLAG_FQS); + raw_spin_unlock_irqrestore(&rnp_old->lock, flags); +- rcu_gp_kthread_wake(rsp); ++ swake_up(&rsp->gp_wq); /* Memory barrier implied by swake_up() path. */ + } + + /* +@@ -3641,7 +3647,7 @@ static void __rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp, + raw_spin_unlock_irqrestore(&rnp->lock, flags); + if (wake) { + smp_mb(); /* EGP done before wake_up(). */ +- swait_wake(&rsp->expedited_wq); ++ swake_up(&rsp->expedited_wq); + } + break; + } +@@ -3898,7 +3904,7 @@ static void synchronize_sched_expedited_wait(struct rcu_state *rsp) + jiffies_start = jiffies; + + for (;;) { +- ret = swait_event_interruptible_timeout( ++ ret = swait_event_timeout( + rsp->expedited_wq, + sync_rcu_preempt_exp_done(rnp_root), + jiffies_stall); +@@ -4574,8 +4580,8 @@ static void __init rcu_init_one(struct rcu_state *rsp, + } + } + +- init_swait_head(&rsp->gp_wq); +- init_swait_head(&rsp->expedited_wq); ++ init_swait_queue_head(&rsp->gp_wq); ++ init_swait_queue_head(&rsp->expedited_wq); + rnp = rsp->level[rcu_num_lvls - 1]; + for_each_possible_cpu(i) { + while (i > rnp->grphi) +@@ -4695,7 +4701,9 @@ void __init rcu_init(void) + + rcu_bootup_announce(); + rcu_init_geometry(); ++#ifndef CONFIG_PREEMPT_RT_FULL + rcu_init_one(&rcu_bh_state, &rcu_bh_data); ++#endif + rcu_init_one(&rcu_sched_state, &rcu_sched_data); + if (dump_tree) + rcu_dump_rcu_node_tree(&rcu_sched_state); +diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h +index 588509d..c75834d 100644 +--- a/kernel/rcu/tree.h ++++ b/kernel/rcu/tree.h +@@ -27,8 +27,8 @@ + #include + #include + #include ++#include + #include +-#include + + /* + * Define shape of hierarchy based on NR_CPUS, CONFIG_RCU_FANOUT, and +@@ -242,7 +242,7 @@ struct rcu_node { + /* Refused to boost: not sure why, though. */ + /* This can happen due to race conditions. */ + #ifdef CONFIG_RCU_NOCB_CPU +- struct swait_head nocb_gp_wq[2]; ++ struct swait_queue_head nocb_gp_wq[2]; + /* Place for rcu_nocb_kthread() to wait GP. */ + #endif /* #ifdef CONFIG_RCU_NOCB_CPU */ + int need_future_gp[2]; +@@ -394,7 +394,7 @@ struct rcu_data { + atomic_long_t nocb_q_count_lazy; /* invocation (all stages). */ + struct rcu_head *nocb_follower_head; /* CBs ready to invoke. */ + struct rcu_head **nocb_follower_tail; +- struct swait_head nocb_wq; /* For nocb kthreads to sleep on. */ ++ struct swait_queue_head nocb_wq; /* For nocb kthreads to sleep on. */ + struct task_struct *nocb_kthread; + int nocb_defer_wakeup; /* Defer wakeup of nocb_kthread. */ + +@@ -473,7 +473,7 @@ struct rcu_state { + unsigned long gpnum; /* Current gp number. */ + unsigned long completed; /* # of last completed gp. */ + struct task_struct *gp_kthread; /* Task for grace periods. */ +- struct swait_head gp_wq; /* Where GP task waits. */ ++ struct swait_queue_head gp_wq; /* Where GP task waits. */ + short gp_flags; /* Commands for GP task. */ + short gp_state; /* GP kthread sleep state. */ + +@@ -505,7 +505,7 @@ struct rcu_state { + atomic_long_t expedited_workdone3; /* # done by others #3. */ + atomic_long_t expedited_normal; /* # fallbacks to normal. */ + atomic_t expedited_need_qs; /* # CPUs left to check in. */ +- struct swait_head expedited_wq; /* Wait for check-ins. */ ++ struct swait_queue_head expedited_wq; /* Wait for check-ins. */ + int ncpus_snap; /* # CPUs seen last time. */ + + unsigned long jiffies_force_qs; /* Time at which to invoke */ +@@ -557,7 +557,9 @@ extern struct list_head rcu_struct_flavors; + */ + extern struct rcu_state rcu_sched_state; + ++#ifndef CONFIG_PREEMPT_RT_FULL + extern struct rcu_state rcu_bh_state; ++#endif + + #ifdef CONFIG_PREEMPT_RCU + extern struct rcu_state rcu_preempt_state; +@@ -605,7 +607,8 @@ static void zero_cpu_stall_ticks(struct rcu_data *rdp); + static void increment_cpu_stall_ticks(void); + static bool rcu_nocb_cpu_needs_barrier(struct rcu_state *rsp, int cpu); + static void rcu_nocb_gp_set(struct rcu_node *rnp, int nrq); +-static void rcu_nocb_gp_cleanup(struct rcu_state *rsp, struct rcu_node *rnp); ++static struct swait_queue_head *rcu_nocb_gp_get(struct rcu_node *rnp); ++static void rcu_nocb_gp_cleanup(struct swait_queue_head *sq); + static void rcu_init_one_nocb(struct rcu_node *rnp); + static bool __call_rcu_nocb(struct rcu_data *rdp, struct rcu_head *rhp, + bool lazy, unsigned long flags); +diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h +index 0d2f27f2..8e119cf 100644 +--- a/kernel/rcu/tree_plugin.h ++++ b/kernel/rcu/tree_plugin.h +@@ -1717,9 +1717,9 @@ early_param("rcu_nocb_poll", parse_rcu_nocb_poll); + * Wake up any no-CBs CPUs' kthreads that were waiting on the just-ended + * grace period. + */ +-static void rcu_nocb_gp_cleanup(struct rcu_state *rsp, struct rcu_node *rnp) ++static void rcu_nocb_gp_cleanup(struct swait_queue_head *sq) + { +- swait_wake_all(&rnp->nocb_gp_wq[rnp->completed & 0x1]); ++ swake_up_all(sq); + } + + /* +@@ -1735,10 +1735,15 @@ static void rcu_nocb_gp_set(struct rcu_node *rnp, int nrq) + rnp->need_future_gp[(rnp->completed + 1) & 0x1] += nrq; + } + ++static struct swait_queue_head *rcu_nocb_gp_get(struct rcu_node *rnp) ++{ ++ return &rnp->nocb_gp_wq[rnp->completed & 0x1]; ++} ++ + static void rcu_init_one_nocb(struct rcu_node *rnp) + { +- init_swait_head(&rnp->nocb_gp_wq[0]); +- init_swait_head(&rnp->nocb_gp_wq[1]); ++ init_swait_queue_head(&rnp->nocb_gp_wq[0]); ++ init_swait_queue_head(&rnp->nocb_gp_wq[1]); + } + + #ifndef CONFIG_RCU_NOCB_CPU_ALL +@@ -1763,7 +1768,7 @@ static void wake_nocb_leader(struct rcu_data *rdp, bool force) + if (READ_ONCE(rdp_leader->nocb_leader_sleep) || force) { + /* Prior smp_mb__after_atomic() orders against prior enqueue. */ + WRITE_ONCE(rdp_leader->nocb_leader_sleep, false); +- swait_wake(&rdp_leader->nocb_wq); ++ swake_up(&rdp_leader->nocb_wq); + } + } + +@@ -2079,7 +2084,7 @@ static void nocb_leader_wait(struct rcu_data *my_rdp) + * List was empty, wake up the follower. + * Memory barriers supplied by atomic_long_add(). + */ +- swait_wake(&rdp->nocb_wq); ++ swake_up(&rdp->nocb_wq); + } + } + +@@ -2259,7 +2264,7 @@ void __init rcu_init_nohz(void) + static void __init rcu_boot_init_nocb_percpu_data(struct rcu_data *rdp) + { + rdp->nocb_tail = &rdp->nocb_head; +- init_swait_head(&rdp->nocb_wq); ++ init_swait_queue_head(&rdp->nocb_wq); + rdp->nocb_follower_tail = &rdp->nocb_follower_head; + } + +@@ -2409,7 +2414,7 @@ static bool rcu_nocb_cpu_needs_barrier(struct rcu_state *rsp, int cpu) + return false; + } + +-static void rcu_nocb_gp_cleanup(struct rcu_state *rsp, struct rcu_node *rnp) ++static void rcu_nocb_gp_cleanup(struct swait_queue_head *sq) + { + } + +@@ -2417,6 +2422,11 @@ static void rcu_nocb_gp_set(struct rcu_node *rnp, int nrq) + { + } + ++static struct swait_queue_head *rcu_nocb_gp_get(struct rcu_node *rnp) ++{ ++ return NULL; ++} ++ + static void rcu_init_one_nocb(struct rcu_node *rnp) + { + } +diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile +index a22fdb6..debedbe 100644 +--- a/kernel/sched/Makefile ++++ b/kernel/sched/Makefile +@@ -13,7 +13,7 @@ endif + + obj-y += core.o loadavg.o clock.o cputime.o + obj-y += idle_task.o fair.o rt.o deadline.o stop_task.o +-obj-y += wait.o wait-simple.o work-simple.o completion.o idle.o ++obj-y += wait.o swait.o work-simple.o completion.o idle.o + obj-$(CONFIG_SMP) += cpupri.o cpudeadline.o + obj-$(CONFIG_SCHED_AUTOGROUP) += auto_group.o + obj-$(CONFIG_SCHEDSTATS) += stats.o +diff --git a/kernel/sched/completion.c b/kernel/sched/completion.c +index 45ebcff..b62cf64 100644 +--- a/kernel/sched/completion.c ++++ b/kernel/sched/completion.c +@@ -32,7 +32,7 @@ void complete(struct completion *x) + + raw_spin_lock_irqsave(&x->wait.lock, flags); + x->done++; +- __swait_wake_locked(&x->wait, TASK_NORMAL, 1); ++ swake_up_locked(&x->wait); + raw_spin_unlock_irqrestore(&x->wait.lock, flags); + } + EXPORT_SYMBOL(complete); +@@ -52,7 +52,7 @@ void complete_all(struct completion *x) + + raw_spin_lock_irqsave(&x->wait.lock, flags); + x->done += UINT_MAX/2; +- __swait_wake_locked(&x->wait, TASK_NORMAL, 0); ++ swake_up_all_locked(&x->wait); + raw_spin_unlock_irqrestore(&x->wait.lock, flags); + } + EXPORT_SYMBOL(complete_all); +@@ -62,9 +62,9 @@ do_wait_for_common(struct completion *x, + long (*action)(long), long timeout, int state) + { + if (!x->done) { +- DEFINE_SWAITER(wait); ++ DECLARE_SWAITQUEUE(wait); + +- swait_prepare_locked(&x->wait, &wait); ++ __prepare_to_swait(&x->wait, &wait); + do { + if (signal_pending_state(state, current)) { + timeout = -ERESTARTSYS; +@@ -75,7 +75,7 @@ do_wait_for_common(struct completion *x, + timeout = action(timeout); + raw_spin_lock_irq(&x->wait.lock); + } while (!x->done && timeout); +- swait_finish_locked(&x->wait, &wait); ++ __finish_swait(&x->wait, &wait); + if (!x->done) + return timeout; + } +diff --git a/kernel/sched/core.c b/kernel/sched/core.c +index b2959ea..94827a5 100644 +--- a/kernel/sched/core.c ++++ b/kernel/sched/core.c +@@ -3039,16 +3039,6 @@ u64 scheduler_tick_max_deferment(void) + } + #endif + +-notrace unsigned long get_parent_ip(unsigned long addr) +-{ +- if (in_lock_functions(addr)) { +- addr = CALLER_ADDR2; +- if (in_lock_functions(addr)) +- addr = CALLER_ADDR3; +- } +- return addr; +-} +- + #if defined(CONFIG_PREEMPT) && (defined(CONFIG_DEBUG_PREEMPT) || \ + defined(CONFIG_PREEMPT_TRACER)) + +@@ -3070,7 +3060,7 @@ void preempt_count_add(int val) + PREEMPT_MASK - 10); + #endif + if (preempt_count() == val) { +- unsigned long ip = get_parent_ip(CALLER_ADDR1); ++ unsigned long ip = get_lock_parent_ip(); + #ifdef CONFIG_DEBUG_PREEMPT + current->preempt_disable_ip = ip; + #endif +@@ -3097,7 +3087,7 @@ void preempt_count_sub(int val) + #endif + + if (preempt_count() == val) +- trace_preempt_on(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1)); ++ trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip()); + __preempt_count_sub(val); + } + EXPORT_SYMBOL(preempt_count_sub); +@@ -3157,7 +3147,7 @@ void migrate_disable(void) + { + struct task_struct *p = current; + +- if (in_atomic()) { ++ if (in_atomic() || irqs_disabled()) { + #ifdef CONFIG_SCHED_DEBUG + p->migrate_disable_atomic++; + #endif +@@ -3180,7 +3170,6 @@ void migrate_disable(void) + preempt_lazy_disable(); + pin_current_cpu(); + p->migrate_disable = 1; +- p->nr_cpus_allowed = 1; + preempt_enable(); + } + EXPORT_SYMBOL(migrate_disable); +@@ -3189,7 +3178,7 @@ void migrate_enable(void) + { + struct task_struct *p = current; + +- if (in_atomic()) { ++ if (in_atomic() || irqs_disabled()) { + #ifdef CONFIG_SCHED_DEBUG + p->migrate_disable_atomic--; + #endif +@@ -3470,7 +3459,7 @@ static void __sched notrace preempt_schedule_common(void) + * set by a RT task. Oterwise we try to avoid beeing scheduled out as long as + * preempt_lazy_count counter >0. + */ +-static int preemptible_lazy(void) ++static __always_inline int preemptible_lazy(void) + { + if (test_thread_flag(TIF_NEED_RESCHED)) + return 1; +diff --git a/kernel/sched/swait.c b/kernel/sched/swait.c +new file mode 100644 +index 0000000..205fe36 +--- /dev/null ++++ b/kernel/sched/swait.c +@@ -0,0 +1,143 @@ ++#include ++#include ++#include ++ ++void __init_swait_queue_head(struct swait_queue_head *q, const char *name, ++ struct lock_class_key *key) ++{ ++ raw_spin_lock_init(&q->lock); ++ lockdep_set_class_and_name(&q->lock, key, name); ++ INIT_LIST_HEAD(&q->task_list); ++} ++EXPORT_SYMBOL(__init_swait_queue_head); ++ ++/* ++ * The thing about the wake_up_state() return value; I think we can ignore it. ++ * ++ * If for some reason it would return 0, that means the previously waiting ++ * task is already running, so it will observe condition true (or has already). ++ */ ++void swake_up_locked(struct swait_queue_head *q) ++{ ++ struct swait_queue *curr; ++ ++ if (list_empty(&q->task_list)) ++ return; ++ ++ curr = list_first_entry(&q->task_list, typeof(*curr), task_list); ++ wake_up_process(curr->task); ++ list_del_init(&curr->task_list); ++} ++EXPORT_SYMBOL(swake_up_locked); ++ ++void swake_up_all_locked(struct swait_queue_head *q) ++{ ++ struct swait_queue *curr; ++ int wakes = 0; ++ ++ while (!list_empty(&q->task_list)) { ++ ++ curr = list_first_entry(&q->task_list, typeof(*curr), ++ task_list); ++ wake_up_process(curr->task); ++ list_del_init(&curr->task_list); ++ wakes++; ++ } ++ if (pm_in_action) ++ return; ++ WARN(wakes > 2, "complate_all() with %d waiters\n", wakes); ++} ++EXPORT_SYMBOL(swake_up_all_locked); ++ ++void swake_up(struct swait_queue_head *q) ++{ ++ unsigned long flags; ++ ++ if (!swait_active(q)) ++ return; ++ ++ raw_spin_lock_irqsave(&q->lock, flags); ++ swake_up_locked(q); ++ raw_spin_unlock_irqrestore(&q->lock, flags); ++} ++EXPORT_SYMBOL(swake_up); ++ ++/* ++ * Does not allow usage from IRQ disabled, since we must be able to ++ * release IRQs to guarantee bounded hold time. ++ */ ++void swake_up_all(struct swait_queue_head *q) ++{ ++ struct swait_queue *curr; ++ LIST_HEAD(tmp); ++ ++ if (!swait_active(q)) ++ return; ++ ++ raw_spin_lock_irq(&q->lock); ++ list_splice_init(&q->task_list, &tmp); ++ while (!list_empty(&tmp)) { ++ curr = list_first_entry(&tmp, typeof(*curr), task_list); ++ ++ wake_up_state(curr->task, TASK_NORMAL); ++ list_del_init(&curr->task_list); ++ ++ if (list_empty(&tmp)) ++ break; ++ ++ raw_spin_unlock_irq(&q->lock); ++ raw_spin_lock_irq(&q->lock); ++ } ++ raw_spin_unlock_irq(&q->lock); ++} ++EXPORT_SYMBOL(swake_up_all); ++ ++void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait) ++{ ++ wait->task = current; ++ if (list_empty(&wait->task_list)) ++ list_add(&wait->task_list, &q->task_list); ++} ++ ++void prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait, int state) ++{ ++ unsigned long flags; ++ ++ raw_spin_lock_irqsave(&q->lock, flags); ++ __prepare_to_swait(q, wait); ++ set_current_state(state); ++ raw_spin_unlock_irqrestore(&q->lock, flags); ++} ++EXPORT_SYMBOL(prepare_to_swait); ++ ++long prepare_to_swait_event(struct swait_queue_head *q, struct swait_queue *wait, int state) ++{ ++ if (signal_pending_state(state, current)) ++ return -ERESTARTSYS; ++ ++ prepare_to_swait(q, wait, state); ++ ++ return 0; ++} ++EXPORT_SYMBOL(prepare_to_swait_event); ++ ++void __finish_swait(struct swait_queue_head *q, struct swait_queue *wait) ++{ ++ __set_current_state(TASK_RUNNING); ++ if (!list_empty(&wait->task_list)) ++ list_del_init(&wait->task_list); ++} ++ ++void finish_swait(struct swait_queue_head *q, struct swait_queue *wait) ++{ ++ unsigned long flags; ++ ++ __set_current_state(TASK_RUNNING); ++ ++ if (!list_empty_careful(&wait->task_list)) { ++ raw_spin_lock_irqsave(&q->lock, flags); ++ list_del_init(&wait->task_list); ++ raw_spin_unlock_irqrestore(&q->lock, flags); ++ } ++} ++EXPORT_SYMBOL(finish_swait); +diff --git a/kernel/sched/wait-simple.c b/kernel/sched/wait-simple.c +deleted file mode 100644 +index 7dfa86d..0000000 +--- a/kernel/sched/wait-simple.c ++++ /dev/null +@@ -1,115 +0,0 @@ +-/* +- * Simple waitqueues without fancy flags and callbacks +- * +- * (C) 2011 Thomas Gleixner +- * +- * Based on kernel/wait.c +- * +- * For licencing details see kernel-base/COPYING +- */ +-#include +-#include +-#include +-#include +- +-/* Adds w to head->list. Must be called with head->lock locked. */ +-static inline void __swait_enqueue(struct swait_head *head, struct swaiter *w) +-{ +- list_add(&w->node, &head->list); +- /* We can't let the condition leak before the setting of head */ +- smp_mb(); +-} +- +-/* Removes w from head->list. Must be called with head->lock locked. */ +-static inline void __swait_dequeue(struct swaiter *w) +-{ +- list_del_init(&w->node); +-} +- +-void __init_swait_head(struct swait_head *head, struct lock_class_key *key) +-{ +- raw_spin_lock_init(&head->lock); +- lockdep_set_class(&head->lock, key); +- INIT_LIST_HEAD(&head->list); +-} +-EXPORT_SYMBOL(__init_swait_head); +- +-void swait_prepare_locked(struct swait_head *head, struct swaiter *w) +-{ +- w->task = current; +- if (list_empty(&w->node)) +- __swait_enqueue(head, w); +-} +- +-void swait_prepare(struct swait_head *head, struct swaiter *w, int state) +-{ +- unsigned long flags; +- +- raw_spin_lock_irqsave(&head->lock, flags); +- swait_prepare_locked(head, w); +- __set_current_state(state); +- raw_spin_unlock_irqrestore(&head->lock, flags); +-} +-EXPORT_SYMBOL(swait_prepare); +- +-void swait_finish_locked(struct swait_head *head, struct swaiter *w) +-{ +- __set_current_state(TASK_RUNNING); +- if (w->task) +- __swait_dequeue(w); +-} +- +-void swait_finish(struct swait_head *head, struct swaiter *w) +-{ +- unsigned long flags; +- +- __set_current_state(TASK_RUNNING); +- if (w->task) { +- raw_spin_lock_irqsave(&head->lock, flags); +- __swait_dequeue(w); +- raw_spin_unlock_irqrestore(&head->lock, flags); +- } +-} +-EXPORT_SYMBOL(swait_finish); +- +-unsigned int +-__swait_wake_locked(struct swait_head *head, unsigned int state, unsigned int num) +-{ +- struct swaiter *curr, *next; +- int woken = 0; +- +- list_for_each_entry_safe(curr, next, &head->list, node) { +- if (wake_up_state(curr->task, state)) { +- __swait_dequeue(curr); +- /* +- * The waiting task can free the waiter as +- * soon as curr->task = NULL is written, +- * without taking any locks. A memory barrier +- * is required here to prevent the following +- * store to curr->task from getting ahead of +- * the dequeue operation. +- */ +- smp_wmb(); +- curr->task = NULL; +- if (++woken == num) +- break; +- } +- } +- return woken; +-} +- +-unsigned int +-__swait_wake(struct swait_head *head, unsigned int state, unsigned int num) +-{ +- unsigned long flags; +- int woken; +- +- if (!swaitqueue_active(head)) +- return 0; +- +- raw_spin_lock_irqsave(&head->lock, flags); +- woken = __swait_wake_locked(head, state, num); +- raw_spin_unlock_irqrestore(&head->lock, flags); +- return woken; +-} +-EXPORT_SYMBOL(__swait_wake); +diff --git a/kernel/sched/work-simple.c b/kernel/sched/work-simple.c +index e57a052..9ffe405 100644 +--- a/kernel/sched/work-simple.c ++++ b/kernel/sched/work-simple.c +@@ -5,7 +5,7 @@ + * PREEMPT_RT_FULL safe. The callbacks are executed in kthread context. + */ + +-#include ++#include + #include + #include + #include +@@ -19,7 +19,7 @@ static struct sworker *glob_worker; + + struct sworker { + struct list_head events; +- struct swait_head wq; ++ struct swait_queue_head wq; + + raw_spinlock_t lock; + +@@ -80,7 +80,7 @@ static struct sworker *swork_create(void) + + INIT_LIST_HEAD(&worker->events); + raw_spin_lock_init(&worker->lock); +- init_swait_head(&worker->wq); ++ init_swait_queue_head(&worker->wq); + + worker->task = kthread_run(swork_kthread, worker, "kswork"); + if (IS_ERR(worker->task)) { +@@ -117,7 +117,7 @@ bool swork_queue(struct swork_event *sev) + list_add_tail(&sev->item, &glob_worker->events); + raw_spin_unlock_irqrestore(&glob_worker->lock, flags); + +- swait_wake(&glob_worker->wq); ++ swake_up(&glob_worker->wq); + return true; + } + EXPORT_SYMBOL_GPL(swork_queue); +diff --git a/kernel/softirq.c b/kernel/softirq.c +index d1e999e..cb9c1d5 100644 +--- a/kernel/softirq.c ++++ b/kernel/softirq.c +@@ -287,9 +287,9 @@ void __local_bh_disable_ip(unsigned long ip, unsigned int cnt) + + if (preempt_count() == cnt) { + #ifdef CONFIG_DEBUG_PREEMPT +- current->preempt_disable_ip = get_parent_ip(CALLER_ADDR1); ++ current->preempt_disable_ip = get_lock_parent_ip(); + #endif +- trace_preempt_off(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1)); ++ trace_preempt_off(CALLER_ADDR0, get_lock_parent_ip()); + } + } + EXPORT_SYMBOL(__local_bh_disable_ip); +@@ -563,8 +563,10 @@ static void do_current_softirqs(void) + do_single_softirq(i); + } + softirq_clr_runner(i); +- unlock_softirq(i); + WARN_ON(current->softirq_nestcnt != 1); ++ local_irq_enable(); ++ unlock_softirq(i); ++ local_irq_disable(); + } + } + +diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c +index 2c5acc8..f84d3b4 100644 +--- a/kernel/stop_machine.c ++++ b/kernel/stop_machine.c +@@ -30,7 +30,7 @@ struct cpu_stop_done { + atomic_t nr_todo; /* nr left to execute */ + bool executed; /* actually executed? */ + int ret; /* collected return value */ +- struct task_struct *waiter; /* woken when nr_todo reaches 0 */ ++ struct completion completion; /* fired if nr_todo reaches 0 */ + }; + + /* the actual stopper, one per every possible cpu, enabled on online cpus */ +@@ -59,7 +59,7 @@ static void cpu_stop_init_done(struct cpu_stop_done *done, unsigned int nr_todo) + { + memset(done, 0, sizeof(*done)); + atomic_set(&done->nr_todo, nr_todo); +- done->waiter = current; ++ init_completion(&done->completion); + } + + /* signal completion unless @done is NULL */ +@@ -68,10 +68,8 @@ static void cpu_stop_signal_done(struct cpu_stop_done *done, bool executed) + if (done) { + if (executed) + done->executed = true; +- if (atomic_dec_and_test(&done->nr_todo)) { +- wake_up_process(done->waiter); +- done->waiter = NULL; +- } ++ if (atomic_dec_and_test(&done->nr_todo)) ++ complete(&done->completion); + } + } + +@@ -96,22 +94,6 @@ static void cpu_stop_queue_work(unsigned int cpu, struct cpu_stop_work *work) + raw_spin_unlock_irqrestore(&stopper->lock, flags); + } + +-static void wait_for_stop_done(struct cpu_stop_done *done) +-{ +- set_current_state(TASK_UNINTERRUPTIBLE); +- while (atomic_read(&done->nr_todo)) { +- schedule(); +- set_current_state(TASK_UNINTERRUPTIBLE); +- } +- /* +- * We need to wait until cpu_stop_signal_done() has cleared +- * done->waiter. +- */ +- while (done->waiter) +- cpu_relax(); +- set_current_state(TASK_RUNNING); +-} +- + /** + * stop_one_cpu - stop a cpu + * @cpu: cpu to stop +@@ -143,7 +125,7 @@ int stop_one_cpu(unsigned int cpu, cpu_stop_fn_t fn, void *arg) + + cpu_stop_init_done(&done, 1); + cpu_stop_queue_work(cpu, &work); +- wait_for_stop_done(&done); ++ wait_for_completion(&done.completion); + return done.executed ? done.ret : -ENOENT; + } + +@@ -302,7 +284,7 @@ int stop_two_cpus(unsigned int cpu1, unsigned int cpu2, cpu_stop_fn_t fn, void * + + preempt_enable_nort(); + +- wait_for_stop_done(&done); ++ wait_for_completion(&done.completion); + + return done.executed ? done.ret : -ENOENT; + } +@@ -364,7 +346,7 @@ static int __stop_cpus(const struct cpumask *cpumask, + + cpu_stop_init_done(&done, cpumask_weight(cpumask)); + queue_stop_cpus_work(cpumask, fn, arg, &done, false); +- wait_for_stop_done(&done); ++ wait_for_completion(&done.completion); + return done.executed ? done.ret : -ENOENT; + } + +@@ -495,13 +477,7 @@ static void cpu_stopper_thread(unsigned int cpu) + kallsyms_lookup((unsigned long)fn, NULL, NULL, NULL, + ksym_buf), arg); + +- /* +- * Make sure that the wakeup and setting done->waiter +- * to NULL is atomic. +- */ +- local_irq_disable(); + cpu_stop_signal_done(done, true); +- local_irq_enable(); + goto repeat; + } + } +@@ -663,7 +639,7 @@ int stop_machine_from_inactive_cpu(cpu_stop_fn_t fn, void *data, + ret = multi_cpu_stop(&msdata); + + /* Busy wait for completion. */ +- while (atomic_read(&done.nr_todo)) ++ while (!completion_done(&done.completion)) + cpu_relax(); + + mutex_unlock(&stop_cpus_mutex); +diff --git a/kernel/time/tick-broadcast-hrtimer.c b/kernel/time/tick-broadcast-hrtimer.c +index 53d7184..1b4ac33 100644 +--- a/kernel/time/tick-broadcast-hrtimer.c ++++ b/kernel/time/tick-broadcast-hrtimer.c +@@ -106,5 +106,6 @@ void tick_setup_hrtimer_broadcast(void) + { + hrtimer_init(&bctimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); + bctimer.function = bc_handler; ++ bctimer.irqsafe = true; + clockevents_register_device(&ce_broadcast_hrtimer); + } +diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c +index 36e584f..069942c 100644 +--- a/kernel/trace/trace_irqsoff.c ++++ b/kernel/trace/trace_irqsoff.c +@@ -421,13 +421,13 @@ void start_critical_timings(void) + { + if (preempt_trace() || irq_trace()) + start_critical_timing(CALLER_ADDR0, CALLER_ADDR1); +- trace_preemptirqsoff_hist(TRACE_START, 1); ++ trace_preemptirqsoff_hist_rcuidle(TRACE_START, 1); + } + EXPORT_SYMBOL_GPL(start_critical_timings); + + void stop_critical_timings(void) + { +- trace_preemptirqsoff_hist(TRACE_STOP, 0); ++ trace_preemptirqsoff_hist_rcuidle(TRACE_STOP, 0); + if (preempt_trace() || irq_trace()) + stop_critical_timing(CALLER_ADDR0, CALLER_ADDR1); + } +@@ -437,7 +437,7 @@ EXPORT_SYMBOL_GPL(stop_critical_timings); + #ifdef CONFIG_PROVE_LOCKING + void time_hardirqs_on(unsigned long a0, unsigned long a1) + { +- trace_preemptirqsoff_hist(IRQS_ON, 0); ++ trace_preemptirqsoff_hist_rcuidle(IRQS_ON, 0); + if (!preempt_trace() && irq_trace()) + stop_critical_timing(a0, a1); + } +@@ -446,7 +446,7 @@ void time_hardirqs_off(unsigned long a0, unsigned long a1) + { + if (!preempt_trace() && irq_trace()) + start_critical_timing(a0, a1); +- trace_preemptirqsoff_hist(IRQS_OFF, 1); ++ trace_preemptirqsoff_hist_rcuidle(IRQS_OFF, 1); + } + + #else /* !CONFIG_PROVE_LOCKING */ +diff --git a/lib/dump_stack.c b/lib/dump_stack.c +index 7ccbc6f..6745c62 100644 +--- a/lib/dump_stack.c ++++ b/lib/dump_stack.c +@@ -33,7 +33,7 @@ asmlinkage __visible void dump_stack(void) + * Permit this cpu to perform nested stack dumps while serialising + * against other CPUs + */ +- migrate_disable(); ++ preempt_disable(); + + retry: + cpu = smp_processor_id(); +@@ -52,7 +52,7 @@ asmlinkage __visible void dump_stack(void) + if (!was_locked) + atomic_set(&dump_lock, -1); + +- migrate_enable(); ++ preempt_enable(); + } + #else + asmlinkage __visible void dump_stack(void) +diff --git a/localversion-rt b/localversion-rt +index 5c84f62..76db1e9 100644 +--- a/localversion-rt ++++ b/localversion-rt +@@ -1 +1 @@ +-+rt3 +++rt13 +diff --git a/mm/backing-dev.c b/mm/backing-dev.c +index cbe6f0b..6871838 100644 +--- a/mm/backing-dev.c ++++ b/mm/backing-dev.c +@@ -457,9 +457,9 @@ void wb_congested_put(struct bdi_writeback_congested *congested) + { + unsigned long flags; + +- local_irq_save(flags); ++ local_irq_save_nort(flags); + if (!atomic_dec_and_lock(&congested->refcnt, &cgwb_lock)) { +- local_irq_restore(flags); ++ local_irq_restore_nort(flags); + return; + } + +diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c +index fc08399..18cc59f 100644 +--- a/mm/zsmalloc.c ++++ b/mm/zsmalloc.c +@@ -1289,7 +1289,7 @@ void *zs_map_object(struct zs_pool *pool, unsigned long handle, + class = pool->size_class[class_idx]; + off = obj_idx_to_offset(page, obj_idx, class->size); + +- area = &get_cpu_var(zs_map_area); ++ area = per_cpu_ptr(&zs_map_area, get_cpu_light()); + area->vm_mm = mm; + if (off + class->size <= PAGE_SIZE) { + /* this object is contained entirely within a page */ +@@ -1342,7 +1342,7 @@ void zs_unmap_object(struct zs_pool *pool, unsigned long handle) + + __zs_unmap_object(area, pages, off, class->size); + } +- put_cpu_var(zs_map_area); ++ put_cpu_light(); + unpin_tag(handle); + } + EXPORT_SYMBOL_GPL(zs_unmap_object); +diff --git a/net/core/dev.c b/net/core/dev.c +index 5ec7abf..0e17592 100644 +--- a/net/core/dev.c ++++ b/net/core/dev.c +@@ -2891,7 +2891,11 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q, + * This permits __QDISC___STATE_RUNNING owner to get the lock more + * often and dequeue packets faster. + */ ++#ifdef CONFIG_PREEMPT_RT_FULL ++ contended = true; ++#else + contended = qdisc_is_running(q); ++#endif + if (unlikely(contended)) + spin_lock(&q->busylock); + +@@ -2983,7 +2987,7 @@ static inline void xmit_rec_inc(void) + __this_cpu_inc(xmit_recursion); + } + +-static inline int xmit_rec_dec(void) ++static inline void xmit_rec_dec(void) + { + __this_cpu_dec(xmit_recursion); + } +diff --git a/virt/kvm/async_pf.c b/virt/kvm/async_pf.c +index 57d9436..9378d09 100644 +--- a/virt/kvm/async_pf.c ++++ b/virt/kvm/async_pf.c +@@ -98,8 +98,8 @@ static void async_pf_execute(struct work_struct *work) + * This memory barrier pairs with prepare_to_wait's set_current_state() + */ + smp_mb(); +- if (swaitqueue_active(&vcpu->wq)) +- swait_wake_interruptible(&vcpu->wq); ++ if (swait_active(&vcpu->wq)) ++ swake_up(&vcpu->wq); + + mmput(mm); + kvm_put_kvm(vcpu->kvm); +diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c +index a076690..eeed326 100644 +--- a/virt/kvm/kvm_main.c ++++ b/virt/kvm/kvm_main.c +@@ -226,8 +226,7 @@ int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id) + vcpu->kvm = kvm; + vcpu->vcpu_id = id; + vcpu->pid = NULL; +- vcpu->halt_poll_ns = 0; +- init_swait_head(&vcpu->wq); ++ init_swait_queue_head(&vcpu->wq); + kvm_async_pf_vcpu_init(vcpu); + + vcpu->pre_pcpu = -1; +@@ -2002,7 +2001,7 @@ static int kvm_vcpu_check_block(struct kvm_vcpu *vcpu) + void kvm_vcpu_block(struct kvm_vcpu *vcpu) + { + ktime_t start, cur; +- DEFINE_SWAITER(wait); ++ DECLARE_SWAITQUEUE(wait); + bool waited = false; + u64 block_ns; + +@@ -2027,7 +2026,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu) + kvm_arch_vcpu_blocking(vcpu); + + for (;;) { +- swait_prepare(&vcpu->wq, &wait, TASK_INTERRUPTIBLE); ++ prepare_to_swait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE); + + if (kvm_vcpu_check_block(vcpu) < 0) + break; +@@ -2036,7 +2035,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu) + schedule(); + } + +- swait_finish(&vcpu->wq, &wait); ++ finish_swait(&vcpu->wq, &wait); + cur = ktime_get(); + + kvm_arch_vcpu_unblocking(vcpu); +@@ -2068,11 +2067,11 @@ void kvm_vcpu_kick(struct kvm_vcpu *vcpu) + { + int me; + int cpu = vcpu->cpu; +- struct swait_head *wqp; ++ struct swait_queue_head *wqp; + + wqp = kvm_arch_vcpu_wq(vcpu); +- if (swaitqueue_active(wqp)) { +- swait_wake_interruptible(wqp); ++ if (swait_active(wqp)) { ++ swake_up(wqp); + ++vcpu->stat.halt_wakeup; + } + +@@ -2173,7 +2172,7 @@ void kvm_vcpu_on_spin(struct kvm_vcpu *me) + continue; + if (vcpu == me) + continue; +- if (swaitqueue_active(&vcpu->wq) && !kvm_arch_vcpu_runnable(vcpu)) ++ if (swait_active(&vcpu->wq) && !kvm_arch_vcpu_runnable(vcpu)) + continue; + if (!kvm_vcpu_eligible_for_directed_yield(vcpu)) + continue; + +From 7885305d87ec4603480459d48f5f54ebcc71fe20 Mon Sep 17 00:00:00 2001 +From: Jon Nettleton +Date: Tue, 11 Aug 2015 13:36:09 +0200 +Subject: [PATCH 03/13] gpu: galcore: Don't abuse the dma_* apis + +There is no reason we can't pass the device to the dma_* api's, +so do it. This does not follow the traditional vivante syntax +but it is more correct for in kernel drivers. + +(cherry picked from commit 3010fb04e38c5952d156afb1290e69a44c3017b8) +Signed-off-by: Matus Kral +--- + drivers/gpu/galcore/gc_hal_kernel_device.c | 3 +++ + drivers/gpu/galcore/gc_hal_kernel_device.h | 3 +++ + drivers/gpu/galcore/gc_hal_kernel_os.c | 20 ++++++++++---------- + drivers/gpu/galcore/gc_hal_kernel_probe.c | 5 +++-- + 4 files changed, 19 insertions(+), 12 deletions(-) + +diff --git a/drivers/gpu/galcore/gc_hal_kernel_device.c b/drivers/gpu/galcore/gc_hal_kernel_device.c +index e99d29f..42a0b24 100644 +--- a/drivers/gpu/galcore/gc_hal_kernel_device.c ++++ b/drivers/gpu/galcore/gc_hal_kernel_device.c +@@ -683,6 +683,7 @@ gckGALDEVICE_Construct( + IN gctINT PowerManagement, + IN gctINT GpuProfiler, + IN gcsDEVICE_CONSTRUCT_ARGS * Args, ++ IN struct device *dev, + OUT gckGALDEVICE *Device + ) + { +@@ -729,6 +730,8 @@ gckGALDEVICE_Construct( + + device->platform = Args->platform; + ++ device->dev = dev; ++ + gcmkONERROR(_DebugfsInit(device)); + + if (gckDEBUGFS_CreateNode( +diff --git a/drivers/gpu/galcore/gc_hal_kernel_device.h b/drivers/gpu/galcore/gc_hal_kernel_device.h +index c94d67c..4d66a6a 100644 +--- a/drivers/gpu/galcore/gc_hal_kernel_device.h ++++ b/drivers/gpu/galcore/gc_hal_kernel_device.h +@@ -30,6 +30,8 @@ + + typedef struct _gckGALDEVICE + { ++ struct device *dev; ++ + /* Objects. */ + gckOS os; + gckKERNEL kernels[gcdMAX_GPU_COUNT]; +@@ -175,6 +177,7 @@ gceSTATUS gckGALDEVICE_Construct( + IN gctINT PowerManagement, + IN gctINT GpuProfiler, + IN gcsDEVICE_CONSTRUCT_ARGS * Args, ++ IN struct device *dev, + OUT gckGALDEVICE *Device + ); + +diff --git a/drivers/gpu/galcore/gc_hal_kernel_os.c b/drivers/gpu/galcore/gc_hal_kernel_os.c +index e05262b..0457574 100644 +--- a/drivers/gpu/galcore/gc_hal_kernel_os.c ++++ b/drivers/gpu/galcore/gc_hal_kernel_os.c +@@ -1092,7 +1092,7 @@ gckOS_MapMemory( + } + + #ifndef NO_DMA_COHERENT +- if (dma_mmap_writecombine(gcvNULL, ++ if (dma_mmap_writecombine(Os->device->dev, + mdlMap->vma, + mdl->addr, + mdl->dmaHandle, +@@ -1411,9 +1411,9 @@ gckOS_AllocateNonPagedMemory( + + #ifndef NO_DMA_COHERENT + #ifdef CONFIG_ARM64 +- addr = dma_alloc_coherent(gcvNULL, ++ addr = dma_alloc_coherent(Os->device->dev, + #else +- addr = dma_alloc_writecombine(gcvNULL, ++ addr = dma_alloc_writecombine(Os->device->dev, + #endif + mdl->numPages * PAGE_SIZE, + &mdl->dmaHandle, +@@ -1442,7 +1442,7 @@ gckOS_AllocateNonPagedMemory( + #if !defined(CONFIG_PPC) + /* Cache invalidate. */ + dma_sync_single_for_device( +- gcvNULL, ++ Os->device->dev, + page_to_phys(page), + bytes, + DMA_FROM_DEVICE); +@@ -1523,7 +1523,7 @@ gckOS_AllocateNonPagedMemory( + } + + #ifndef NO_DMA_COHERENT +- if (dma_mmap_coherent(gcvNULL, ++ if (dma_mmap_coherent(Os->device->dev, + mdlMap->vma, + mdl->addr, + mdl->dmaHandle, +@@ -1681,9 +1681,9 @@ gceSTATUS gckOS_FreeNonPagedMemory( + + #ifndef NO_DMA_COHERENT + #ifdef CONFIG_ARM64 +- dma_free_coherent(gcvNULL, ++ dma_free_coherent(Os->device->dev, + #else +- dma_free_writecombine(gcvNULL, ++ dma_free_writecombine(Os->device->dev, + #endif + mdl->numPages * PAGE_SIZE, + mdl->addr, +@@ -5383,7 +5383,7 @@ gckOS_CacheClean( + } + + dma_sync_single_for_device( +- gcvNULL, ++ Os->device->dev, + (dma_addr_t)Physical, + Bytes, + DMA_TO_DEVICE); +@@ -5457,7 +5457,7 @@ gckOS_CacheInvalidate( + } + + dma_sync_single_for_device( +- gcvNULL, ++ Os->device->dev, + (dma_addr_t)Physical, + Bytes, + DMA_FROM_DEVICE); +@@ -5533,7 +5533,7 @@ gckOS_CacheFlush( + if (Physical != gcvINVALID_ADDRESS) + { + dma_sync_single_for_device( +- gcvNULL, ++ Os->device->dev, + (dma_addr_t)Physical, + Bytes, + DMA_BIDIRECTIONAL); +diff --git a/drivers/gpu/galcore/gc_hal_kernel_probe.c b/drivers/gpu/galcore/gc_hal_kernel_probe.c +index 10098c3..9c904bd 100644 +--- a/drivers/gpu/galcore/gc_hal_kernel_probe.c ++++ b/drivers/gpu/galcore/gc_hal_kernel_probe.c +@@ -758,7 +758,7 @@ static int drv_mmap( + } + + +-static int drv_init(void) ++static int drv_init(struct platform_device *pdev) + { + int ret; + int result = -EINVAL; +@@ -812,6 +812,7 @@ static int drv_init(void) + powerManagement, + gpuProfiler, + &args, ++ &pdev->dev, + &device + ); + +@@ -975,7 +976,7 @@ static int gpu_probe(struct platform_device *pdev) + _UpdateModuleParam(&moduleParam); + } + +- ret = drv_init(); ++ ret = drv_init(pdev); + + if (!ret) + { + +From 6376b35377c9cdac5465b89c4401b6ceb3dee91e Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Sun, 3 Apr 2016 13:29:34 +0200 +Subject: [PATCH 04/13] gpu: galcore: -rt13 updates + +--- + drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c +index 1685e57..ef8a9d2 100644 +--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c ++++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c +@@ -7730,8 +7730,8 @@ gckOS_WaitSignal( + : Wait * HZ / 1000; + #endif + +- DEFINE_SWAITER(wait); +- swait_prepare_locked(&signal->obj.wait, &wait); ++ DECLARE_SWAITQUEUE(wait); ++ __prepare_to_swait(&signal->obj.wait, &wait); + + while (gcvTRUE) + { +@@ -7809,7 +7809,7 @@ gckOS_WaitSignal( + } + } + +- swait_finish_locked(&signal->obj.wait, &wait); ++ __finish_swait(&signal->obj.wait, &wait); + + #if gcdDETECT_TIMEOUT + if (complained) + +From a665ce6296067e0685b559d9b355d10718c08ff3 Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Sun, 3 Apr 2016 13:32:02 +0200 +Subject: [PATCH 05/13] mxc_hdmi: remove blank_state() and abort_stream() + handling + +--- + drivers/video/mxc/mxc_hdmi.c | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/drivers/video/mxc/mxc_hdmi.c b/drivers/video/mxc/mxc_hdmi.c +index 5587165..df91138 100644 +--- a/drivers/video/mxc/mxc_hdmi.c ++++ b/drivers/video/mxc/mxc_hdmi.c +@@ -1904,7 +1904,6 @@ static void mxc_hdmi_phy_disable(struct mxc_hdmi *hdmi) + if (!hdmi->phy_enabled) + return; + +- mxc_hdmi_abort_stream(); + hdmi_disable_overflow_interrupts(); + + /* Setting PHY to reset status */ +@@ -2489,7 +2488,6 @@ static void hotplug_worker(struct work_struct *work) + } else if (!(hdmi_phy_pol0 & hdmi->plug_mask)) { + /* Plugout event */ + dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n"); +- mxc_hdmi_abort_stream(); + mxc_hdmi_cable_disconnected(hdmi); + #if defined(CONFIG_MXC_HDMI_CEC) + mxc_hdmi_cec_handle(0x0); +@@ -2812,13 +2810,10 @@ static int mxc_hdmi_fb_event(struct notifier_block *nb, + + if (hdmi->hp_state > HDMI_HOTPLUG_DISCONNECTED) + mxc_hdmi_setup(hdmi, val); +- hdmi_set_blank_state(1); + + } else if (*((int *)event->data) != hdmi->blank) { + dev_dbg(&hdmi->pdev->dev, + "event=FB_EVENT_BLANK - BLANK\n"); +- mxc_hdmi_abort_stream(); +- hdmi_set_blank_state(0); + + mxc_hdmi_phy_disable(hdmi); + + +From fa3ba4775d9154b53411fbccd4ecc2599d534d26 Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Mon, 4 Apr 2016 01:43:46 +0200 +Subject: [PATCH 06/13] clk: cosmetics, reorder + +--- + drivers/clk/imx/clk-imx6q.c | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c +index d3366be..ceb8703 100644 +--- a/drivers/clk/imx/clk-imx6q.c ++++ b/drivers/clk/imx/clk-imx6q.c +@@ -507,6 +507,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) + clk_data.clk_num = ARRAY_SIZE(clk); + of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); + ++ clk_register_clkdev(clk[IMX6QDL_CLK_GPT_3M], "gpt_3m", "imx-gpt.0"); + clk_register_clkdev(clk[IMX6QDL_CLK_ENET_REF], "enet_ref", NULL); + + if ((imx_get_soc_revision() != IMX_CHIP_REVISION_1_0) || +@@ -515,6 +516,10 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) + imx_clk_set_parent(clk[IMX6QDL_CLK_LDB_DI1_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); + } + ++ imx_clk_set_rate(clk[IMX6QDL_CLK_PLL3_PFD1_540M], 540000000); ++ if (clk_on_imx6dl()) ++ imx_clk_set_parent(clk[IMX6QDL_CLK_IPU1_SEL], clk[IMX6QDL_CLK_PLL3_PFD1_540M]); ++ + imx_clk_set_parent(clk[IMX6QDL_CLK_IPU1_DI0_PRE_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); + imx_clk_set_parent(clk[IMX6QDL_CLK_IPU1_DI1_PRE_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); + imx_clk_set_parent(clk[IMX6QDL_CLK_IPU2_DI0_PRE_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); +@@ -524,8 +529,6 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) + imx_clk_set_parent(clk[IMX6QDL_CLK_IPU2_DI0_SEL], clk[IMX6QDL_CLK_IPU2_DI0_PRE]); + imx_clk_set_parent(clk[IMX6QDL_CLK_IPU2_DI1_SEL], clk[IMX6QDL_CLK_IPU2_DI1_PRE]); + +- imx_clk_set_rate(clk[IMX6QDL_CLK_PLL3_PFD1_540M], 540000000); +- imx_clk_set_parent(clk[IMX6QDL_CLK_IPU1_SEL], clk[IMX6QDL_CLK_PLL3_PFD1_540M]); + imx_clk_set_parent(clk[IMX6QDL_CLK_AXI_ALT_SEL], clk[IMX6QDL_CLK_PLL3_PFD1_540M]); + imx_clk_set_parent(clk[IMX6QDL_CLK_AXI_SEL], clk[IMX6QDL_CLK_AXI_ALT_SEL]); + /* set epdc/pxp axi clock to 200Mhz */ +@@ -543,6 +546,14 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) + */ + imx_clk_set_parent(clk[IMX6QDL_CLK_ENFC_SEL], clk[IMX6QDL_CLK_PLL2_PFD2_396M]); + ++ for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) ++ imx_clk_prepare_enable(clk[clks_init_on[i]]); ++ ++ if (IS_ENABLED(CONFIG_USB_MXS_PHY)) { ++ imx_clk_prepare_enable(clk[IMX6QDL_CLK_USBPHY1_GATE]); ++ imx_clk_prepare_enable(clk[IMX6QDL_CLK_USBPHY2_GATE]); ++ } ++ + /* gpu clock initilazation */ + /* + * On mx6dl, 2d core clock sources(sel, podf) is from 3d +@@ -588,14 +599,6 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) + + imx_register_uart_clocks(uart_clks); + +- for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) +- imx_clk_prepare_enable(clk[clks_init_on[i]]); +- +- if (IS_ENABLED(CONFIG_USB_MXS_PHY)) { +- imx_clk_prepare_enable(clk[IMX6QDL_CLK_USBPHY1_GATE]); +- imx_clk_prepare_enable(clk[IMX6QDL_CLK_USBPHY2_GATE]); +- } +- + imx_clk_set_parent(clk[IMX6QDL_CLK_VPU_AXI_SEL], clk[IMX6QDL_CLK_PLL2_PFD0_352M]); + + if (clk_on_imx6dl()) + +From a0d0665879629b6a24dd94f5206434cb9ab00b87 Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Mon, 4 Apr 2016 03:16:05 +0200 +Subject: [PATCH 07/13] add mxc_v4l2.h to linux-libc-dev headers + +--- + include/uapi/linux/Kbuild | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild +index 18c9229..ba55082 100644 +--- a/include/uapi/linux/Kbuild ++++ b/include/uapi/linux/Kbuild +@@ -274,6 +274,7 @@ header-y += msg.h + header-y += mtio.h + header-y += mxcfb.h + header-y += mxc_dcic.h ++header-y += mxc_v4l2.h + header-y += ipu.h + header-y += nbd.h + header-y += ncp_fs.h + +From 8274eed9c6004cda725a67d12a0fd781326eb2dc Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Mon, 4 Apr 2016 03:17:07 +0200 +Subject: [PATCH 08/13] ipu_device: do not overlap stripes + +--- + drivers/mxc/ipu3/ipu_device.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/drivers/mxc/ipu3/ipu_device.c b/drivers/mxc/ipu3/ipu_device.c +index e34e1ba..306639d 100644 +--- a/drivers/mxc/ipu3/ipu_device.c ++++ b/drivers/mxc/ipu3/ipu_device.c +@@ -485,6 +485,7 @@ cs_t colorspaceofpixel(int fmt) + } + EXPORT_SYMBOL_GPL(colorspaceofpixel); + ++inline + int need_csc(int ifmt, int ofmt) + { + cs_t ics, ocs; +@@ -501,26 +502,31 @@ int need_csc(int ifmt, int ofmt) + } + EXPORT_SYMBOL_GPL(need_csc); + ++inline + static int soc_max_in_width(u32 is_vdoa) + { + return is_vdoa ? 8192 : 4096; + } + ++inline + static int soc_max_vdi_in_width(void) + { + return IPU_MAX_VDI_IN_WIDTH; + } ++inline + static int soc_max_in_height(void) + { + return 4096; + } + ++inline + static int soc_max_out_width(void) + { + /* mx51/mx53/mx6q is 1024*/ + return 1024; + } + ++inline + static int soc_max_out_height(void) + { + /* mx51/mx53/mx6q is 1024*/ +@@ -859,7 +865,7 @@ static int update_split_setting(struct ipu_task_entry *t, bool vdi_split) + ret = ipu_calc_stripes_sizes(iw, + ow, + max_width, +- (((unsigned long long)1) << 32), /* 32bit for fractional*/ ++ 0,/*no overlap*/ /* 32bit for fractional*/ + 1, /* equal stripes */ + t->input.format, + t->output.format, +@@ -907,7 +913,7 @@ static int update_split_setting(struct ipu_task_entry *t, bool vdi_split) + ret = ipu_calc_stripes_sizes(ih, + oh, + soc_max_out_height(), +- (((unsigned long long)1) << 32), /* 32bit for fractional*/ ++ 0,/*no overlap*/ /* 32bit for fractional*/ + 0x1 | 0x2, /* equal stripes and vertical */ + t->input.format, + t->output.format, + +From ea5643bec4f6265a95528693c06d330092e05cc8 Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Mon, 4 Apr 2016 03:43:49 +0200 +Subject: [PATCH 09/13] Revert "printk: do cond_resched() between lines while + outputting to consoles" + +This reverts commit a623f87a72de35096a9eae7cc7764d0c9533c2e9. + +Conflicts: + kernel/printk/printk.c +--- + include/linux/console.h | 1 - + kernel/panic.c | 3 ++- + kernel/printk/printk.c | 34 +--------------------------------- + 3 files changed, 3 insertions(+), 35 deletions(-) + +diff --git a/include/linux/console.h b/include/linux/console.h +index ea731af..bd19434 100644 +--- a/include/linux/console.h ++++ b/include/linux/console.h +@@ -150,7 +150,6 @@ extern int console_trylock(void); + extern void console_unlock(void); + extern void console_conditional_schedule(void); + extern void console_unblank(void); +-extern void console_flush_on_panic(void); + extern struct tty_driver *console_device(int *); + extern void console_stop(struct console *); + extern void console_start(struct console *); +diff --git a/kernel/panic.c b/kernel/panic.c +index 50d4ae2..d74f25d 100644 +--- a/kernel/panic.c ++++ b/kernel/panic.c +@@ -157,7 +157,8 @@ void panic(const char *fmt, ...) + * panic() is not being callled from OOPS. + */ + debug_locks_off(); +- console_flush_on_panic(); ++ console_trylock(); ++ console_unlock(); + + if (!panic_blink) + panic_blink = no_blink; +diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c +index f75e4b0..88995de 100644 +--- a/kernel/printk/printk.c ++++ b/kernel/printk/printk.c +@@ -2319,24 +2319,13 @@ void console_unlock(void) + static u64 seen_seq; + unsigned long flags; + bool wake_klogd = false; +- bool do_cond_resched, retry; ++ bool retry; + + if (console_suspended) { + up_console_sem(); + return; + } + +- /* +- * Console drivers are called under logbuf_lock, so +- * @console_may_schedule should be cleared before; however, we may +- * end up dumping a lot of lines, for example, if called from +- * console registration path, and should invoke cond_resched() +- * between lines if allowable. Not doing so can cause a very long +- * scheduling stall on a slow console leading to RCU stall and +- * softlockup warnings which exacerbate the issue with more +- * messages practically incapacitating the system. +- */ +- do_cond_resched = console_may_schedule; + console_may_schedule = 0; + + /* flush buffered message fragment immediately to console */ +@@ -2413,8 +2402,6 @@ void console_unlock(void) + start_critical_timings(); + local_irq_restore(flags); + #endif +- if (do_cond_resched) +- cond_resched(); + } + console_locked = 0; + +@@ -2482,25 +2469,6 @@ void console_unblank(void) + console_unlock(); + } + +-/** +- * console_flush_on_panic - flush console content on panic +- * +- * Immediately output all pending messages no matter what. +- */ +-void console_flush_on_panic(void) +-{ +- /* +- * If someone else is holding the console lock, trylock will fail +- * and may_schedule may be set. Ignore and proceed to unlock so +- * that messages are flushed out. As this can be called from any +- * context and we don't want to get preempted while flushing, +- * ensure may_schedule is cleared. +- */ +- console_trylock(); +- console_may_schedule = 0; +- console_unlock(); +-} +- + /* + * Return the console tty driver structure and its associated index + */ + +From cf227a4cf2222a7d4fcc93016656a4dce684e5ae Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Tue, 5 Apr 2016 10:37:31 +0200 +Subject: [PATCH 10/13] default configs update for xbian_defconfig_imx6_mvebu + +--- + arch/arm/configs/xbian_defconfig_imx6 | 6550 --------------------------- + arch/arm/configs/xbian_defconfig_imx6_mvebu | 199 +- + 2 files changed, 65 insertions(+), 6684 deletions(-) + delete mode 100644 arch/arm/configs/xbian_defconfig_imx6 + +diff --git a/arch/arm/configs/xbian_defconfig_imx6 b/arch/arm/configs/xbian_defconfig_imx6 +deleted file mode 100644 +index 20d0117..0000000 +--- a/arch/arm/configs/xbian_defconfig_imx6 ++++ /dev/null +@@ -1,6550 +0,0 @@ +-# +-# Automatically generated file; DO NOT EDIT. +-# Linux/arm 4.4.1 Kernel Configuration +-# +-CONFIG_ARM=y +-CONFIG_ARM_HAS_SG_CHAIN=y +-CONFIG_MIGHT_HAVE_PCI=y +-CONFIG_SYS_SUPPORTS_APM_EMULATION=y +-CONFIG_HAVE_PROC_CPU=y +-CONFIG_STACKTRACE_SUPPORT=y +-CONFIG_LOCKDEP_SUPPORT=y +-CONFIG_TRACE_IRQFLAGS_SUPPORT=y +-CONFIG_RWSEM_XCHGADD_ALGORITHM=y +-CONFIG_FIX_EARLYCON_MEM=y +-CONFIG_GENERIC_HWEIGHT=y +-CONFIG_GENERIC_CALIBRATE_DELAY=y +-CONFIG_ZONE_DMA=y +-CONFIG_NEED_DMA_MAP_STATE=y +-CONFIG_ARCH_SUPPORTS_UPROBES=y +-CONFIG_VECTORS_BASE=0xffff0000 +-CONFIG_ARM_PATCH_PHYS_VIRT=y +-CONFIG_GENERIC_BUG=y +-CONFIG_PGTABLE_LEVELS=2 +-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +-CONFIG_IRQ_WORK=y +-CONFIG_BUILDTIME_EXTABLE_SORT=y +- +-# +-# General setup +-# +-CONFIG_INIT_ENV_ARG_LIMIT=32 +-CONFIG_CROSS_COMPILE="" +-# CONFIG_COMPILE_TEST is not set +-CONFIG_LOCALVERSION="" +-# CONFIG_LOCALVERSION_AUTO is not set +-CONFIG_HAVE_KERNEL_GZIP=y +-CONFIG_HAVE_KERNEL_LZMA=y +-CONFIG_HAVE_KERNEL_XZ=y +-CONFIG_HAVE_KERNEL_LZO=y +-CONFIG_HAVE_KERNEL_LZ4=y +-CONFIG_KERNEL_GZIP=y +-# CONFIG_KERNEL_LZMA is not set +-# CONFIG_KERNEL_XZ is not set +-# CONFIG_KERNEL_LZO is not set +-# CONFIG_KERNEL_LZ4 is not set +-CONFIG_DEFAULT_HOSTNAME="xbian" +-CONFIG_SWAP=y +-CONFIG_SYSVIPC=y +-CONFIG_SYSVIPC_SYSCTL=y +-CONFIG_POSIX_MQUEUE=y +-CONFIG_POSIX_MQUEUE_SYSCTL=y +-CONFIG_CROSS_MEMORY_ATTACH=y +-CONFIG_FHANDLE=y +-# CONFIG_USELIB is not set +-# CONFIG_AUDIT is not set +-CONFIG_HAVE_ARCH_AUDITSYSCALL=y +- +-# +-# IRQ subsystem +-# +-CONFIG_GENERIC_IRQ_PROBE=y +-CONFIG_GENERIC_IRQ_SHOW=y +-CONFIG_GENERIC_IRQ_SHOW_LEVEL=y +-CONFIG_HARDIRQS_SW_RESEND=y +-CONFIG_GENERIC_IRQ_CHIP=y +-CONFIG_IRQ_DOMAIN=y +-CONFIG_IRQ_DOMAIN_HIERARCHY=y +-CONFIG_HANDLE_DOMAIN_IRQ=y +-# CONFIG_IRQ_DOMAIN_DEBUG is not set +-CONFIG_IRQ_FORCED_THREADING=y +-CONFIG_SPARSE_IRQ=y +-CONFIG_GENERIC_TIME_VSYSCALL=y +-CONFIG_GENERIC_CLOCKEVENTS=y +-CONFIG_ARCH_HAS_TICK_BROADCAST=y +-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +- +-# +-# Timers subsystem +-# +-CONFIG_TICK_ONESHOT=y +-CONFIG_NO_HZ_COMMON=y +-# CONFIG_HZ_PERIODIC is not set +-CONFIG_NO_HZ_IDLE=y +-# CONFIG_NO_HZ_FULL is not set +-# CONFIG_NO_HZ is not set +-CONFIG_HIGH_RES_TIMERS=y +- +-# +-# CPU/Task time and stats accounting +-# +-# CONFIG_TICK_CPU_ACCOUNTING is not set +-# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set +-CONFIG_IRQ_TIME_ACCOUNTING=y +-CONFIG_BSD_PROCESS_ACCT=y +-CONFIG_BSD_PROCESS_ACCT_V3=y +-# CONFIG_TASKSTATS is not set +- +-# +-# RCU Subsystem +-# +-CONFIG_PREEMPT_RCU=y +-# CONFIG_RCU_EXPERT is not set +-CONFIG_SRCU=y +-# CONFIG_TASKS_RCU is not set +-CONFIG_RCU_STALL_COMMON=y +-# CONFIG_TREE_RCU_TRACE is not set +-# CONFIG_RCU_EXPEDITE_BOOT is not set +-CONFIG_BUILD_BIN2C=y +-CONFIG_IKCONFIG=y +-CONFIG_IKCONFIG_PROC=y +-CONFIG_LOG_BUF_SHIFT=16 +-CONFIG_LOG_CPU_MAX_BUF_SHIFT=13 +-CONFIG_GENERIC_SCHED_CLOCK=y +-CONFIG_CGROUPS=y +-# CONFIG_CGROUP_DEBUG is not set +-# CONFIG_CGROUP_FREEZER is not set +-# CONFIG_CGROUP_PIDS is not set +-# CONFIG_CGROUP_DEVICE is not set +-# CONFIG_CPUSETS is not set +-CONFIG_CGROUP_CPUACCT=y +-# CONFIG_MEMCG is not set +-# CONFIG_CGROUP_PERF is not set +-CONFIG_CGROUP_SCHED=y +-CONFIG_FAIR_GROUP_SCHED=y +-CONFIG_CFS_BANDWIDTH=y +-CONFIG_RT_GROUP_SCHED=y +-CONFIG_BLK_CGROUP=y +-# CONFIG_DEBUG_BLK_CGROUP is not set +-# CONFIG_CHECKPOINT_RESTORE is not set +-CONFIG_NAMESPACES=y +-CONFIG_UTS_NS=y +-CONFIG_IPC_NS=y +-CONFIG_USER_NS=y +-CONFIG_PID_NS=y +-CONFIG_NET_NS=y +-# CONFIG_SCHED_AUTOGROUP is not set +-# CONFIG_SYSFS_DEPRECATED is not set +-CONFIG_RELAY=y +-CONFIG_BLK_DEV_INITRD=y +-CONFIG_INITRAMFS_SOURCE="" +-CONFIG_RD_GZIP=y +-# CONFIG_RD_BZIP2 is not set +-# CONFIG_RD_LZMA is not set +-# CONFIG_RD_XZ is not set +-CONFIG_RD_LZO=y +-# CONFIG_RD_LZ4 is not set +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +-CONFIG_SYSCTL=y +-CONFIG_ANON_INODES=y +-CONFIG_HAVE_UID16=y +-CONFIG_BPF=y +-CONFIG_EXPERT=y +-# CONFIG_UID16 is not set +-CONFIG_MULTIUSER=y +-# CONFIG_SGETMASK_SYSCALL is not set +-CONFIG_SYSFS_SYSCALL=y +-CONFIG_SYSCTL_SYSCALL=y +-CONFIG_KALLSYMS=y +-CONFIG_KALLSYMS_ALL=y +-CONFIG_PRINTK=y +-CONFIG_BUG=y +-CONFIG_BASE_FULL=y +-CONFIG_FUTEX=y +-CONFIG_EPOLL=y +-CONFIG_SIGNALFD=y +-CONFIG_TIMERFD=y +-CONFIG_EVENTFD=y +-# CONFIG_BPF_SYSCALL is not set +-CONFIG_SHMEM=y +-CONFIG_AIO=y +-# CONFIG_ADVISE_SYSCALLS is not set +-CONFIG_USERFAULTFD=y +-CONFIG_PCI_QUIRKS=y +-CONFIG_MEMBARRIER=y +-CONFIG_EMBEDDED=y +-CONFIG_HAVE_PERF_EVENTS=y +-CONFIG_PERF_USE_VMALLOC=y +- +-# +-# Kernel Performance Events And Counters +-# +-CONFIG_PERF_EVENTS=y +-# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +-# CONFIG_VM_EVENT_COUNTERS is not set +-# CONFIG_SLUB_DEBUG is not set +-# CONFIG_COMPAT_BRK is not set +-# CONFIG_SLAB is not set +-CONFIG_SLUB=y +-# CONFIG_SLOB is not set +-# CONFIG_SLUB_CPU_PARTIAL is not set +-# CONFIG_SYSTEM_DATA_VERIFICATION is not set +-# CONFIG_PROFILING is not set +-CONFIG_TRACEPOINTS=y +-CONFIG_KEXEC_CORE=y +-CONFIG_HAVE_OPROFILE=y +-# CONFIG_KPROBES is not set +-# CONFIG_JUMP_LABEL is not set +-# CONFIG_UPROBES is not set +-# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +-CONFIG_ARCH_USE_BUILTIN_BSWAP=y +-CONFIG_HAVE_KPROBES=y +-CONFIG_HAVE_KRETPROBES=y +-CONFIG_HAVE_OPTPROBES=y +-CONFIG_HAVE_ARCH_TRACEHOOK=y +-CONFIG_HAVE_DMA_ATTRS=y +-CONFIG_HAVE_DMA_CONTIGUOUS=y +-CONFIG_GENERIC_SMP_IDLE_THREAD=y +-CONFIG_GENERIC_IDLE_POLL_SETUP=y +-CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +-CONFIG_HAVE_CLK=y +-CONFIG_HAVE_DMA_API_DEBUG=y +-CONFIG_HAVE_HW_BREAKPOINT=y +-CONFIG_HAVE_PERF_REGS=y +-CONFIG_HAVE_PERF_USER_STACK_DUMP=y +-CONFIG_HAVE_ARCH_JUMP_LABEL=y +-CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y +-CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +-CONFIG_HAVE_CC_STACKPROTECTOR=y +-# CONFIG_CC_STACKPROTECTOR is not set +-CONFIG_CC_STACKPROTECTOR_NONE=y +-# CONFIG_CC_STACKPROTECTOR_REGULAR is not set +-# CONFIG_CC_STACKPROTECTOR_STRONG is not set +-CONFIG_HAVE_CONTEXT_TRACKING=y +-CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +-CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +-CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +-CONFIG_MODULES_USE_ELF_REL=y +-CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +-CONFIG_CLONE_BACKWARDS=y +-CONFIG_OLD_SIGSUSPEND3=y +-CONFIG_OLD_SIGACTION=y +- +-# +-# GCOV-based kernel profiling +-# +-# CONFIG_GCOV_KERNEL is not set +-CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +-CONFIG_HAVE_GENERIC_DMA_COHERENT=y +-CONFIG_RT_MUTEXES=y +-CONFIG_BASE_SMALL=0 +-CONFIG_MODULES=y +-# CONFIG_MODULE_FORCE_LOAD is not set +-CONFIG_MODULE_UNLOAD=y +-# CONFIG_MODULE_FORCE_UNLOAD is not set +-CONFIG_MODVERSIONS=y +-CONFIG_MODULE_SRCVERSION_ALL=y +-# CONFIG_MODULE_SIG is not set +-# CONFIG_MODULE_COMPRESS is not set +-CONFIG_MODULES_TREE_LOOKUP=y +-CONFIG_BLOCK=y +-CONFIG_LBDAF=y +-CONFIG_BLK_DEV_BSG=y +-CONFIG_BLK_DEV_BSGLIB=y +-CONFIG_BLK_DEV_INTEGRITY=y +-# CONFIG_BLK_DEV_THROTTLING is not set +-# CONFIG_BLK_CMDLINE_PARSER is not set +- +-# +-# Partition Types +-# +-CONFIG_PARTITION_ADVANCED=y +-# CONFIG_ACORN_PARTITION is not set +-# CONFIG_AIX_PARTITION is not set +-# CONFIG_OSF_PARTITION is not set +-# CONFIG_AMIGA_PARTITION is not set +-# CONFIG_ATARI_PARTITION is not set +-CONFIG_MAC_PARTITION=y +-CONFIG_MSDOS_PARTITION=y +-CONFIG_BSD_DISKLABEL=y +-CONFIG_MINIX_SUBPARTITION=y +-CONFIG_SOLARIS_X86_PARTITION=y +-CONFIG_UNIXWARE_DISKLABEL=y +-CONFIG_LDM_PARTITION=y +-# CONFIG_LDM_DEBUG is not set +-# CONFIG_SGI_PARTITION is not set +-# CONFIG_ULTRIX_PARTITION is not set +-CONFIG_SUN_PARTITION=y +-CONFIG_KARMA_PARTITION=y +-CONFIG_EFI_PARTITION=y +-# CONFIG_SYSV68_PARTITION is not set +-# CONFIG_CMDLINE_PARTITION is not set +- +-# +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_DEADLINE=y +-CONFIG_IOSCHED_CFQ=y +-# CONFIG_CFQ_GROUP_IOSCHED is not set +-CONFIG_IOSCHED_BFQ=y +-# CONFIG_CGROUP_BFQIO is not set +-# CONFIG_DEFAULT_DEADLINE is not set +-# CONFIG_DEFAULT_CFQ is not set +-CONFIG_DEFAULT_BFQ=y +-# CONFIG_DEFAULT_NOOP is not set +-CONFIG_DEFAULT_IOSCHED="bfq" +-CONFIG_PADATA=y +-CONFIG_ASN1=m +-CONFIG_UNINLINE_SPIN_UNLOCK=y +-CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +-CONFIG_MUTEX_SPIN_ON_OWNER=y +-CONFIG_RWSEM_SPIN_ON_OWNER=y +-CONFIG_LOCK_SPIN_ON_OWNER=y +-CONFIG_FREEZER=y +- +-# +-# System Type +-# +-CONFIG_MMU=y +-CONFIG_ARCH_MULTIPLATFORM=y +-# CONFIG_ARCH_REALVIEW is not set +-# CONFIG_ARCH_VERSATILE is not set +-# CONFIG_ARCH_CLPS711X is not set +-# CONFIG_ARCH_GEMINI is not set +-# CONFIG_ARCH_EBSA110 is not set +-# CONFIG_ARCH_EP93XX is not set +-# CONFIG_ARCH_FOOTBRIDGE is not set +-# CONFIG_ARCH_NETX is not set +-# CONFIG_ARCH_IOP13XX is not set +-# CONFIG_ARCH_IOP32X is not set +-# CONFIG_ARCH_IOP33X is not set +-# CONFIG_ARCH_IXP4XX is not set +-# CONFIG_ARCH_DOVE is not set +-# CONFIG_ARCH_MV78XX0 is not set +-# CONFIG_ARCH_ORION5X is not set +-# CONFIG_ARCH_MMP is not set +-# CONFIG_ARCH_KS8695 is not set +-# CONFIG_ARCH_W90X900 is not set +-# CONFIG_ARCH_LPC32XX is not set +-# CONFIG_ARCH_PXA is not set +-# CONFIG_ARCH_RPC is not set +-# CONFIG_ARCH_SA1100 is not set +-# CONFIG_ARCH_S3C24XX is not set +-# CONFIG_ARCH_S3C64XX is not set +-# CONFIG_ARCH_DAVINCI is not set +-# CONFIG_ARCH_OMAP1 is not set +- +-# +-# Multiple platform selection +-# +- +-# +-# CPU Core family selection +-# +-# CONFIG_ARCH_MULTI_V6 is not set +-CONFIG_ARCH_MULTI_V7=y +-CONFIG_ARCH_MULTI_V6_V7=y +-# CONFIG_ARCH_MULTI_CPU_AUTO is not set +-# CONFIG_ARCH_VIRT is not set +-# CONFIG_ARCH_MVEBU is not set +-# CONFIG_ARCH_ALPINE is not set +-# CONFIG_ARCH_AT91 is not set +-# CONFIG_ARCH_BCM is not set +-# CONFIG_ARCH_BERLIN is not set +-# CONFIG_ARCH_DIGICOLOR is not set +-# CONFIG_ARCH_HIGHBANK is not set +-# CONFIG_ARCH_HISI is not set +-# CONFIG_ARCH_KEYSTONE is not set +-# CONFIG_ARCH_MESON is not set +-CONFIG_ARCH_MXC=y +-CONFIG_HAVE_IMX_ANATOP=y +-CONFIG_HAVE_IMX_GPC=y +-CONFIG_HAVE_IMX_MMDC=y +-CONFIG_HAVE_IMX_SRC=y +- +-# +-# Device tree only +-# +- +-# +-# Cortex-A platforms +-# +-# CONFIG_SOC_IMX50 is not set +-# CONFIG_SOC_IMX51 is not set +-# CONFIG_SOC_IMX53 is not set +-CONFIG_SOC_IMX6=y +-CONFIG_SOC_IMX6Q=y +-# CONFIG_SOC_IMX6SL is not set +-# CONFIG_SOC_IMX6SX is not set +-# CONFIG_SOC_IMX6UL is not set +-# CONFIG_SOC_IMX7D is not set +-# CONFIG_SOC_LS1021A is not set +- +-# +-# Cortex-A/Cortex-M asymmetric multiprocessing platforms +-# +-# CONFIG_SOC_VF610 is not set +-# CONFIG_ARCH_MEDIATEK is not set +- +-# +-# TI OMAP/AM/DM/DRA Family +-# +-# CONFIG_ARCH_OMAP3 is not set +-# CONFIG_ARCH_OMAP4 is not set +-# CONFIG_SOC_OMAP5 is not set +-# CONFIG_SOC_AM33XX is not set +-# CONFIG_SOC_AM43XX is not set +-# CONFIG_SOC_DRA7XX is not set +-# CONFIG_ARCH_QCOM is not set +-# CONFIG_ARCH_ROCKCHIP is not set +-# CONFIG_ARCH_SOCFPGA is not set +-# CONFIG_PLAT_SPEAR is not set +-# CONFIG_ARCH_STI is not set +-# CONFIG_ARCH_S5PV210 is not set +-# CONFIG_ARCH_EXYNOS is not set +-# CONFIG_ARCH_SHMOBILE_MULTI is not set +-# CONFIG_ARCH_SUNXI is not set +-# CONFIG_ARCH_SIRF is not set +-# CONFIG_ARCH_TEGRA is not set +-# CONFIG_ARCH_UNIPHIER is not set +-# CONFIG_ARCH_U8500 is not set +-# CONFIG_ARCH_VEXPRESS is not set +-# CONFIG_ARCH_WM8850 is not set +-# CONFIG_ARCH_ZX is not set +-# CONFIG_ARCH_ZYNQ is not set +- +-# +-# Processor Type +-# +-CONFIG_CPU_V7=y +-CONFIG_CPU_32v6K=y +-CONFIG_CPU_32v7=y +-CONFIG_CPU_ABRT_EV7=y +-CONFIG_CPU_PABRT_V7=y +-CONFIG_CPU_CACHE_V7=y +-CONFIG_CPU_CACHE_VIPT=y +-CONFIG_CPU_COPY_V6=y +-CONFIG_CPU_TLB_V7=y +-CONFIG_CPU_HAS_ASID=y +-CONFIG_CPU_CP15=y +-CONFIG_CPU_CP15_MMU=y +- +-# +-# Processor Features +-# +-# CONFIG_ARM_LPAE is not set +-# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +-CONFIG_ARM_THUMB=y +-# CONFIG_ARM_THUMBEE is not set +-CONFIG_ARM_VIRT_EXT=y +-CONFIG_SWP_EMULATE=y +-# CONFIG_CPU_ICACHE_DISABLE is not set +-# CONFIG_CPU_BPREDICT_DISABLE is not set +-CONFIG_KUSER_HELPERS=y +-CONFIG_VDSO=y +-CONFIG_OUTER_CACHE=y +-CONFIG_OUTER_CACHE_SYNC=y +-CONFIG_MIGHT_HAVE_CACHE_L2X0=y +-CONFIG_CACHE_L2X0=y +-# CONFIG_PL310_ERRATA_588369 is not set +-# CONFIG_PL310_ERRATA_727915 is not set +-# CONFIG_PL310_ERRATA_753970 is not set +-CONFIG_PL310_ERRATA_769419=y +-CONFIG_ARM_L1_CACHE_SHIFT_6=y +-CONFIG_ARM_L1_CACHE_SHIFT=6 +-CONFIG_ARM_DMA_MEM_BUFFERABLE=y +-CONFIG_ARM_HEAVY_MB=y +-# CONFIG_ARM_KERNMEM_PERMS is not set +-CONFIG_MULTI_IRQ_HANDLER=y +-# CONFIG_ARM_ERRATA_430973 is not set +-# CONFIG_ARM_ERRATA_643719 is not set +-# CONFIG_ARM_ERRATA_720789 is not set +-CONFIG_ARM_ERRATA_754322=y +-# CONFIG_ARM_ERRATA_754327 is not set +-CONFIG_ARM_ERRATA_764369=y +-CONFIG_ARM_ERRATA_775420=y +-# CONFIG_ARM_ERRATA_798181 is not set +-# CONFIG_ARM_ERRATA_773022 is not set +- +-# +-# Bus support +-# +-CONFIG_PCI=y +-CONFIG_PCI_DOMAINS=y +-CONFIG_PCI_DOMAINS_GENERIC=y +-CONFIG_PCI_SYSCALL=y +-# CONFIG_PCI_MSI is not set +-# CONFIG_PCI_DEBUG is not set +-# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set +-# CONFIG_PCI_STUB is not set +-# CONFIG_PCI_IOV is not set +-# CONFIG_PCI_PRI is not set +-# CONFIG_PCI_PASID is not set +- +-# +-# PCI host controller drivers +-# +-CONFIG_PCIE_DW=y +-CONFIG_PCI_IMX6=y +-# CONFIG_PCI_HOST_GENERIC is not set +-# CONFIG_PCI_LAYERSCAPE is not set +-# CONFIG_PCIE_IPROC is not set +-# CONFIG_PCIE_ALTERA is not set +-CONFIG_PCIEPORTBUS=y +-CONFIG_PCIEAER=y +-# CONFIG_PCIE_ECRC is not set +-# CONFIG_PCIEAER_INJECT is not set +-CONFIG_PCIEASPM=y +-# CONFIG_PCIEASPM_DEBUG is not set +-CONFIG_PCIEASPM_DEFAULT=y +-# CONFIG_PCIEASPM_POWERSAVE is not set +-# CONFIG_PCIEASPM_PERFORMANCE is not set +-CONFIG_PCIE_PME=y +-# CONFIG_PCCARD is not set +- +-# +-# Kernel Features +-# +-CONFIG_HAVE_SMP=y +-CONFIG_SMP=y +-CONFIG_SMP_ON_UP=y +-CONFIG_ARM_CPU_TOPOLOGY=y +-# CONFIG_SCHED_MC is not set +-# CONFIG_SCHED_SMT is not set +-CONFIG_HAVE_ARM_SCU=y +-# CONFIG_HAVE_ARM_ARCH_TIMER is not set +-CONFIG_HAVE_ARM_TWD=y +-# CONFIG_MCPM is not set +-# CONFIG_BIG_LITTLE is not set +-# CONFIG_VMSPLIT_3G is not set +-# CONFIG_VMSPLIT_3G_OPT is not set +-CONFIG_VMSPLIT_2G=y +-# CONFIG_VMSPLIT_1G is not set +-CONFIG_PAGE_OFFSET=0x80000000 +-CONFIG_NR_CPUS=4 +-CONFIG_HOTPLUG_CPU=y +-# CONFIG_ARM_PSCI is not set +-CONFIG_ARCH_NR_GPIO=0 +-CONFIG_PREEMPT=y +-CONFIG_HAVE_PREEMPT_LAZY=y +-# CONFIG_PREEMPT_NONE is not set +-# CONFIG_PREEMPT_VOLUNTARY is not set +-CONFIG_PREEMPT__LL=y +-# CONFIG_PREEMPT_RTB is not set +-# CONFIG_PREEMPT_RT_FULL is not set +-CONFIG_PREEMPT_COUNT=y +-CONFIG_HZ_FIXED=0 +-# CONFIG_HZ_100 is not set +-# CONFIG_HZ_200 is not set +-# CONFIG_HZ_250 is not set +-CONFIG_HZ_300=y +-# CONFIG_HZ_500 is not set +-# CONFIG_HZ_1000 is not set +-CONFIG_HZ=300 +-CONFIG_SCHED_HRTICK=y +-# CONFIG_THUMB2_KERNEL is not set +-CONFIG_AEABI=y +-# CONFIG_OABI_COMPAT is not set +-# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set +-# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set +-CONFIG_HAVE_ARCH_PFN_VALID=y +-CONFIG_HIGHMEM=y +-# CONFIG_HIGHPTE is not set +-# CONFIG_CPU_SW_DOMAIN_PAN is not set +-CONFIG_HW_PERF_EVENTS=y +-CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +-# CONFIG_ARM_MODULE_PLTS is not set +-CONFIG_FLATMEM=y +-CONFIG_FLAT_NODE_MEM_MAP=y +-CONFIG_HAVE_MEMBLOCK=y +-CONFIG_NO_BOOTMEM=y +-CONFIG_MEMORY_ISOLATION=y +-# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +-CONFIG_SPLIT_PTLOCK_CPUS=4 +-CONFIG_COMPACTION=y +-CONFIG_MIGRATION=y +-# CONFIG_PHYS_ADDR_T_64BIT is not set +-CONFIG_ZONE_DMA_FLAG=1 +-CONFIG_BOUNCE=y +-# CONFIG_KSM is not set +-CONFIG_DEFAULT_MMAP_MIN_ADDR=16384 +-CONFIG_CLEANCACHE=y +-CONFIG_FRONTSWAP=y +-CONFIG_CMA=y +-# CONFIG_CMA_DEBUG is not set +-# CONFIG_CMA_DEBUGFS is not set +-CONFIG_CMA_AREAS=7 +-# CONFIG_ZSWAP is not set +-# CONFIG_ZPOOL is not set +-# CONFIG_ZBUD is not set +-# CONFIG_ZSMALLOC is not set +-# CONFIG_IDLE_PAGE_TRACKING is not set +-CONFIG_FRAME_VECTOR=y +-CONFIG_FORCE_MAX_ZONEORDER=14 +-CONFIG_ALIGNMENT_TRAP=y +-# CONFIG_UACCESS_WITH_MEMCPY is not set +-# CONFIG_SECCOMP is not set +-CONFIG_SWIOTLB=y +-CONFIG_IOMMU_HELPER=y +-# CONFIG_XEN is not set +- +-# +-# Boot options +-# +-CONFIG_USE_OF=y +-CONFIG_ATAGS=y +-# CONFIG_DEPRECATED_PARAM_STRUCT is not set +-CONFIG_ZBOOT_ROM_TEXT=0 +-CONFIG_ZBOOT_ROM_BSS=0 +-# CONFIG_ARM_APPENDED_DTB is not set +-CONFIG_CMDLINE="console=ttymxc0,115200 rw root=/dev/mmcblk0p2 rootwait" +-CONFIG_CMDLINE_FROM_BOOTLOADER=y +-# CONFIG_CMDLINE_EXTEND is not set +-# CONFIG_CMDLINE_FORCE is not set +-CONFIG_KEXEC=y +-CONFIG_ATAGS_PROC=y +-# CONFIG_CRASH_DUMP is not set +-CONFIG_AUTO_ZRELADDR=y +- +-# +-# CPU Power Management +-# +- +-# +-# CPU Frequency scaling +-# +-CONFIG_CPU_FREQ=y +-CONFIG_CPU_FREQ_GOV_COMMON=y +-CONFIG_CPU_FREQ_STAT=y +-CONFIG_CPU_FREQ_STAT_DETAILS=y +-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +-# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +-CONFIG_CPU_FREQ_GOV_POWERSAVE=y +-CONFIG_CPU_FREQ_GOV_USERSPACE=y +-CONFIG_CPU_FREQ_GOV_ONDEMAND=y +-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +- +-# +-# CPU frequency scaling drivers +-# +-# CONFIG_CPUFREQ_DT is not set +-# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set +-CONFIG_ARM_IMX6Q_CPUFREQ=y +-# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set +-# CONFIG_QORIQ_CPUFREQ is not set +- +-# +-# CPU Idle +-# +-CONFIG_CPU_IDLE=y +-# CONFIG_CPU_IDLE_GOV_LADDER is not set +-CONFIG_CPU_IDLE_GOV_MENU=y +-CONFIG_DT_IDLE_STATES=y +- +-# +-# ARM CPU Idle Drivers +-# +-CONFIG_ARM_CPUIDLE=y +-# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +- +-# +-# Floating point emulation +-# +- +-# +-# At least one emulation must be selected +-# +-CONFIG_VFP=y +-CONFIG_VFPv3=y +-CONFIG_NEON=y +-CONFIG_KERNEL_MODE_NEON=y +- +-# +-# Userspace binary formats +-# +-CONFIG_BINFMT_ELF=y +-CONFIG_BINFMT_SCRIPT=y +-# CONFIG_HAVE_AOUT is not set +-CONFIG_BINFMT_MISC=m +-# CONFIG_COREDUMP is not set +- +-# +-# Power management options +-# +-CONFIG_SUSPEND=y +-CONFIG_SUSPEND_FREEZER=y +-# CONFIG_SUSPEND_SKIP_SYNC is not set +-# CONFIG_HIBERNATION is not set +-CONFIG_PM_SLEEP=y +-CONFIG_PM_SLEEP_SMP=y +-# CONFIG_PM_AUTOSLEEP is not set +-# CONFIG_PM_WAKELOCKS is not set +-CONFIG_PM=y +-# CONFIG_PM_DEBUG is not set +-# CONFIG_APM_EMULATION is not set +-CONFIG_PM_OPP=y +-CONFIG_PM_CLK=y +-CONFIG_PM_GENERIC_DOMAINS=y +-# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set +-CONFIG_PM_GENERIC_DOMAINS_SLEEP=y +-CONFIG_PM_GENERIC_DOMAINS_OF=y +-CONFIG_CPU_PM=y +-CONFIG_ARCH_SUSPEND_POSSIBLE=y +-CONFIG_ARM_CPU_SUSPEND=y +-CONFIG_ARCH_HIBERNATION_POSSIBLE=y +-CONFIG_NET=y +-CONFIG_NET_INGRESS=y +- +-# +-# Networking options +-# +-CONFIG_PACKET=y +-CONFIG_PACKET_DIAG=y +-CONFIG_UNIX=y +-CONFIG_UNIX_DIAG=y +-CONFIG_XFRM=y +-CONFIG_XFRM_ALGO=y +-CONFIG_XFRM_USER=y +-CONFIG_XFRM_SUB_POLICY=y +-CONFIG_XFRM_MIGRATE=y +-CONFIG_XFRM_STATISTICS=y +-CONFIG_XFRM_IPCOMP=m +-CONFIG_NET_KEY=y +-CONFIG_NET_KEY_MIGRATE=y +-CONFIG_INET=y +-CONFIG_IP_MULTICAST=y +-CONFIG_IP_ADVANCED_ROUTER=y +-# CONFIG_IP_FIB_TRIE_STATS is not set +-CONFIG_IP_MULTIPLE_TABLES=y +-CONFIG_IP_ROUTE_MULTIPATH=y +-CONFIG_IP_ROUTE_VERBOSE=y +-CONFIG_IP_ROUTE_CLASSID=y +-CONFIG_IP_PNP=y +-CONFIG_IP_PNP_DHCP=y +-CONFIG_IP_PNP_BOOTP=y +-# CONFIG_IP_PNP_RARP is not set +-CONFIG_NET_IPIP=m +-CONFIG_NET_IPGRE_DEMUX=m +-CONFIG_NET_IP_TUNNEL=m +-CONFIG_NET_IPGRE=m +-CONFIG_NET_IPGRE_BROADCAST=y +-CONFIG_IP_MROUTE=y +-CONFIG_IP_MROUTE_MULTIPLE_TABLES=y +-CONFIG_IP_PIMSM_V1=y +-CONFIG_IP_PIMSM_V2=y +-CONFIG_SYN_COOKIES=y +-CONFIG_NET_IPVTI=m +-CONFIG_NET_UDP_TUNNEL=m +-# CONFIG_NET_FOU is not set +-# CONFIG_NET_FOU_IP_TUNNELS is not set +-CONFIG_INET_AH=m +-CONFIG_INET_ESP=m +-CONFIG_INET_IPCOMP=m +-CONFIG_INET_XFRM_TUNNEL=m +-CONFIG_INET_TUNNEL=m +-CONFIG_INET_XFRM_MODE_TRANSPORT=m +-CONFIG_INET_XFRM_MODE_TUNNEL=m +-CONFIG_INET_XFRM_MODE_BEET=m +-CONFIG_INET_LRO=m +-CONFIG_INET_DIAG=y +-CONFIG_INET_TCP_DIAG=y +-CONFIG_INET_UDP_DIAG=m +-CONFIG_TCP_CONG_ADVANCED=y +-CONFIG_TCP_CONG_BIC=m +-CONFIG_TCP_CONG_CUBIC=m +-CONFIG_TCP_CONG_WESTWOOD=m +-CONFIG_TCP_CONG_HTCP=m +-CONFIG_TCP_CONG_HSTCP=m +-CONFIG_TCP_CONG_HYBLA=m +-CONFIG_TCP_CONG_VEGAS=y +-CONFIG_TCP_CONG_SCALABLE=m +-CONFIG_TCP_CONG_LP=m +-CONFIG_TCP_CONG_VENO=m +-CONFIG_TCP_CONG_YEAH=y +-CONFIG_TCP_CONG_ILLINOIS=m +-CONFIG_TCP_CONG_DCTCP=m +-# CONFIG_TCP_CONG_CDG is not set +-CONFIG_DEFAULT_VEGAS=y +-# CONFIG_DEFAULT_RENO is not set +-CONFIG_DEFAULT_TCP_CONG="vegas" +-CONFIG_TCP_MD5SIG=y +-CONFIG_IPV6=m +-CONFIG_IPV6_ROUTER_PREF=y +-CONFIG_IPV6_ROUTE_INFO=y +-CONFIG_IPV6_OPTIMISTIC_DAD=y +-CONFIG_INET6_AH=m +-CONFIG_INET6_ESP=m +-CONFIG_INET6_IPCOMP=m +-CONFIG_IPV6_MIP6=m +-CONFIG_IPV6_ILA=m +-CONFIG_INET6_XFRM_TUNNEL=m +-CONFIG_INET6_TUNNEL=m +-CONFIG_INET6_XFRM_MODE_TRANSPORT=m +-CONFIG_INET6_XFRM_MODE_TUNNEL=m +-CONFIG_INET6_XFRM_MODE_BEET=m +-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +-CONFIG_IPV6_VTI=m +-CONFIG_IPV6_SIT=m +-CONFIG_IPV6_SIT_6RD=y +-CONFIG_IPV6_NDISC_NODETYPE=y +-CONFIG_IPV6_TUNNEL=m +-CONFIG_IPV6_GRE=m +-CONFIG_IPV6_MULTIPLE_TABLES=y +-CONFIG_IPV6_SUBTREES=y +-CONFIG_IPV6_MROUTE=y +-CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +-CONFIG_IPV6_PIMSM_V2=y +-CONFIG_NETWORK_SECMARK=y +-CONFIG_NET_PTP_CLASSIFY=y +-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +-CONFIG_NETFILTER=y +-# CONFIG_NETFILTER_DEBUG is not set +-CONFIG_NETFILTER_ADVANCED=y +-CONFIG_BRIDGE_NETFILTER=m +- +-# +-# Core Netfilter Configuration +-# +-CONFIG_NETFILTER_INGRESS=y +-CONFIG_NETFILTER_NETLINK=m +-CONFIG_NETFILTER_NETLINK_ACCT=m +-CONFIG_NETFILTER_NETLINK_QUEUE=m +-CONFIG_NETFILTER_NETLINK_LOG=m +-CONFIG_NF_CONNTRACK=m +-CONFIG_NF_LOG_COMMON=m +-CONFIG_NF_CONNTRACK_MARK=y +-CONFIG_NF_CONNTRACK_SECMARK=y +-CONFIG_NF_CONNTRACK_ZONES=y +-CONFIG_NF_CONNTRACK_PROCFS=y +-CONFIG_NF_CONNTRACK_EVENTS=y +-CONFIG_NF_CONNTRACK_TIMEOUT=y +-CONFIG_NF_CONNTRACK_TIMESTAMP=y +-CONFIG_NF_CONNTRACK_LABELS=y +-CONFIG_NF_CT_PROTO_DCCP=m +-CONFIG_NF_CT_PROTO_GRE=m +-CONFIG_NF_CT_PROTO_SCTP=m +-CONFIG_NF_CT_PROTO_UDPLITE=m +-CONFIG_NF_CONNTRACK_AMANDA=m +-CONFIG_NF_CONNTRACK_FTP=m +-CONFIG_NF_CONNTRACK_H323=m +-CONFIG_NF_CONNTRACK_IRC=m +-CONFIG_NF_CONNTRACK_BROADCAST=m +-CONFIG_NF_CONNTRACK_NETBIOS_NS=m +-CONFIG_NF_CONNTRACK_SNMP=m +-CONFIG_NF_CONNTRACK_PPTP=m +-CONFIG_NF_CONNTRACK_SANE=m +-CONFIG_NF_CONNTRACK_SIP=m +-CONFIG_NF_CONNTRACK_TFTP=m +-CONFIG_NF_CT_NETLINK=m +-CONFIG_NF_CT_NETLINK_TIMEOUT=m +-# CONFIG_NETFILTER_NETLINK_GLUE_CT is not set +-CONFIG_NF_NAT=m +-CONFIG_NF_NAT_NEEDED=y +-CONFIG_NF_NAT_PROTO_DCCP=m +-CONFIG_NF_NAT_PROTO_UDPLITE=m +-CONFIG_NF_NAT_PROTO_SCTP=m +-CONFIG_NF_NAT_AMANDA=m +-CONFIG_NF_NAT_FTP=m +-CONFIG_NF_NAT_IRC=m +-CONFIG_NF_NAT_SIP=m +-CONFIG_NF_NAT_TFTP=m +-CONFIG_NF_NAT_REDIRECT=m +-CONFIG_NETFILTER_SYNPROXY=m +-CONFIG_NF_TABLES=m +-CONFIG_NF_TABLES_INET=m +-CONFIG_NF_TABLES_NETDEV=m +-CONFIG_NFT_EXTHDR=m +-CONFIG_NFT_META=m +-CONFIG_NFT_CT=m +-CONFIG_NFT_RBTREE=m +-CONFIG_NFT_HASH=m +-CONFIG_NFT_COUNTER=m +-CONFIG_NFT_LOG=m +-CONFIG_NFT_LIMIT=m +-CONFIG_NFT_MASQ=m +-CONFIG_NFT_REDIR=m +-CONFIG_NFT_NAT=m +-CONFIG_NFT_QUEUE=m +-CONFIG_NFT_REJECT=m +-CONFIG_NFT_REJECT_INET=m +-CONFIG_NFT_COMPAT=m +-CONFIG_NETFILTER_XTABLES=m +- +-# +-# Xtables combined modules +-# +-CONFIG_NETFILTER_XT_MARK=m +-CONFIG_NETFILTER_XT_CONNMARK=m +-CONFIG_NETFILTER_XT_SET=m +- +-# +-# Xtables targets +-# +-CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +-CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m +-CONFIG_NETFILTER_XT_TARGET_CT=m +-CONFIG_NETFILTER_XT_TARGET_DSCP=m +-CONFIG_NETFILTER_XT_TARGET_HL=m +-CONFIG_NETFILTER_XT_TARGET_HMARK=m +-CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m +-CONFIG_NETFILTER_XT_TARGET_LED=m +-CONFIG_NETFILTER_XT_TARGET_LOG=m +-CONFIG_NETFILTER_XT_TARGET_MARK=m +-CONFIG_NETFILTER_XT_NAT=m +-CONFIG_NETFILTER_XT_TARGET_NETMAP=m +-CONFIG_NETFILTER_XT_TARGET_NFLOG=m +-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +-CONFIG_NETFILTER_XT_TARGET_RATEEST=m +-CONFIG_NETFILTER_XT_TARGET_REDIRECT=m +-CONFIG_NETFILTER_XT_TARGET_TEE=m +-CONFIG_NETFILTER_XT_TARGET_TPROXY=m +-CONFIG_NETFILTER_XT_TARGET_TRACE=m +-CONFIG_NETFILTER_XT_TARGET_SECMARK=m +-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m +- +-# +-# Xtables matches +-# +-CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +-CONFIG_NETFILTER_XT_MATCH_BPF=m +-CONFIG_NETFILTER_XT_MATCH_CGROUP=m +-CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +-CONFIG_NETFILTER_XT_MATCH_COMMENT=m +-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +-CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m +-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +-CONFIG_NETFILTER_XT_MATCH_CPU=m +-CONFIG_NETFILTER_XT_MATCH_DCCP=m +-CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m +-CONFIG_NETFILTER_XT_MATCH_DSCP=m +-CONFIG_NETFILTER_XT_MATCH_ECN=m +-CONFIG_NETFILTER_XT_MATCH_ESP=m +-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +-CONFIG_NETFILTER_XT_MATCH_HELPER=m +-CONFIG_NETFILTER_XT_MATCH_HL=m +-CONFIG_NETFILTER_XT_MATCH_IPCOMP=m +-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +-CONFIG_NETFILTER_XT_MATCH_IPVS=m +-CONFIG_NETFILTER_XT_MATCH_L2TP=m +-CONFIG_NETFILTER_XT_MATCH_LENGTH=m +-CONFIG_NETFILTER_XT_MATCH_LIMIT=m +-CONFIG_NETFILTER_XT_MATCH_MAC=m +-CONFIG_NETFILTER_XT_MATCH_MARK=m +-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +-CONFIG_NETFILTER_XT_MATCH_NFACCT=m +-CONFIG_NETFILTER_XT_MATCH_OSF=m +-CONFIG_NETFILTER_XT_MATCH_OWNER=m +-CONFIG_NETFILTER_XT_MATCH_POLICY=m +-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +-CONFIG_NETFILTER_XT_MATCH_QUOTA=m +-CONFIG_NETFILTER_XT_MATCH_RATEEST=m +-CONFIG_NETFILTER_XT_MATCH_REALM=m +-CONFIG_NETFILTER_XT_MATCH_RECENT=m +-CONFIG_NETFILTER_XT_MATCH_SCTP=m +-CONFIG_NETFILTER_XT_MATCH_SOCKET=m +-CONFIG_NETFILTER_XT_MATCH_STATE=m +-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +-CONFIG_NETFILTER_XT_MATCH_STRING=m +-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +-CONFIG_NETFILTER_XT_MATCH_TIME=m +-CONFIG_NETFILTER_XT_MATCH_U32=m +-CONFIG_IP_SET=m +-CONFIG_IP_SET_MAX=256 +-CONFIG_IP_SET_BITMAP_IP=m +-CONFIG_IP_SET_BITMAP_IPMAC=m +-CONFIG_IP_SET_BITMAP_PORT=m +-CONFIG_IP_SET_HASH_IP=m +-CONFIG_IP_SET_HASH_IPMARK=m +-CONFIG_IP_SET_HASH_IPPORT=m +-CONFIG_IP_SET_HASH_IPPORTIP=m +-CONFIG_IP_SET_HASH_IPPORTNET=m +-CONFIG_IP_SET_HASH_MAC=m +-CONFIG_IP_SET_HASH_NETPORTNET=m +-CONFIG_IP_SET_HASH_NET=m +-CONFIG_IP_SET_HASH_NETNET=m +-CONFIG_IP_SET_HASH_NETPORT=m +-CONFIG_IP_SET_HASH_NETIFACE=m +-CONFIG_IP_SET_LIST_SET=m +-CONFIG_IP_VS=m +-CONFIG_IP_VS_IPV6=y +-# CONFIG_IP_VS_DEBUG is not set +-CONFIG_IP_VS_TAB_BITS=12 +- +-# +-# IPVS transport protocol load balancing support +-# +-CONFIG_IP_VS_PROTO_TCP=y +-CONFIG_IP_VS_PROTO_UDP=y +-CONFIG_IP_VS_PROTO_AH_ESP=y +-CONFIG_IP_VS_PROTO_ESP=y +-CONFIG_IP_VS_PROTO_AH=y +-CONFIG_IP_VS_PROTO_SCTP=y +- +-# +-# IPVS scheduler +-# +-CONFIG_IP_VS_RR=m +-CONFIG_IP_VS_WRR=m +-CONFIG_IP_VS_LC=m +-CONFIG_IP_VS_WLC=m +-CONFIG_IP_VS_FO=m +-CONFIG_IP_VS_OVF=m +-CONFIG_IP_VS_LBLC=m +-CONFIG_IP_VS_LBLCR=m +-CONFIG_IP_VS_DH=m +-CONFIG_IP_VS_SH=m +-CONFIG_IP_VS_SED=m +-CONFIG_IP_VS_NQ=m +- +-# +-# IPVS SH scheduler +-# +-CONFIG_IP_VS_SH_TAB_BITS=8 +- +-# +-# IPVS application helper +-# +-CONFIG_IP_VS_FTP=m +-CONFIG_IP_VS_NFCT=y +-CONFIG_IP_VS_PE_SIP=m +- +-# +-# IP: Netfilter Configuration +-# +-CONFIG_NF_DEFRAG_IPV4=m +-CONFIG_NF_CONNTRACK_IPV4=m +-CONFIG_NF_CONNTRACK_PROC_COMPAT=y +-CONFIG_NF_TABLES_IPV4=m +-CONFIG_NFT_CHAIN_ROUTE_IPV4=m +-CONFIG_NFT_REJECT_IPV4=m +-CONFIG_NFT_DUP_IPV4=m +-CONFIG_NF_TABLES_ARP=m +-CONFIG_NF_DUP_IPV4=m +-CONFIG_NF_LOG_ARP=m +-CONFIG_NF_LOG_IPV4=m +-CONFIG_NF_REJECT_IPV4=m +-CONFIG_NF_NAT_IPV4=m +-CONFIG_NFT_CHAIN_NAT_IPV4=m +-CONFIG_NF_NAT_MASQUERADE_IPV4=m +-CONFIG_NFT_MASQ_IPV4=m +-CONFIG_NFT_REDIR_IPV4=m +-CONFIG_NF_NAT_SNMP_BASIC=m +-CONFIG_NF_NAT_PROTO_GRE=m +-CONFIG_NF_NAT_PPTP=m +-CONFIG_NF_NAT_H323=m +-CONFIG_IP_NF_IPTABLES=m +-CONFIG_IP_NF_MATCH_AH=m +-CONFIG_IP_NF_MATCH_ECN=m +-CONFIG_IP_NF_MATCH_RPFILTER=m +-CONFIG_IP_NF_MATCH_TTL=m +-CONFIG_IP_NF_FILTER=m +-CONFIG_IP_NF_TARGET_REJECT=m +-CONFIG_IP_NF_TARGET_SYNPROXY=m +-CONFIG_IP_NF_NAT=m +-CONFIG_IP_NF_TARGET_MASQUERADE=m +-CONFIG_IP_NF_TARGET_NETMAP=m +-CONFIG_IP_NF_TARGET_REDIRECT=m +-CONFIG_IP_NF_MANGLE=m +-CONFIG_IP_NF_TARGET_CLUSTERIP=m +-CONFIG_IP_NF_TARGET_ECN=m +-CONFIG_IP_NF_TARGET_TTL=m +-CONFIG_IP_NF_RAW=m +-CONFIG_IP_NF_ARPTABLES=m +-CONFIG_IP_NF_ARPFILTER=m +-CONFIG_IP_NF_ARP_MANGLE=m +- +-# +-# IPv6: Netfilter Configuration +-# +-CONFIG_NF_DEFRAG_IPV6=m +-CONFIG_NF_CONNTRACK_IPV6=m +-CONFIG_NF_TABLES_IPV6=m +-CONFIG_NFT_CHAIN_ROUTE_IPV6=m +-CONFIG_NFT_REJECT_IPV6=m +-CONFIG_NFT_DUP_IPV6=m +-CONFIG_NF_DUP_IPV6=m +-CONFIG_NF_REJECT_IPV6=m +-CONFIG_NF_LOG_IPV6=m +-CONFIG_NF_NAT_IPV6=m +-CONFIG_NFT_CHAIN_NAT_IPV6=m +-CONFIG_NF_NAT_MASQUERADE_IPV6=m +-CONFIG_NFT_MASQ_IPV6=m +-CONFIG_NFT_REDIR_IPV6=m +-CONFIG_IP6_NF_IPTABLES=m +-CONFIG_IP6_NF_MATCH_AH=m +-CONFIG_IP6_NF_MATCH_EUI64=m +-CONFIG_IP6_NF_MATCH_FRAG=m +-CONFIG_IP6_NF_MATCH_OPTS=m +-CONFIG_IP6_NF_MATCH_HL=m +-CONFIG_IP6_NF_MATCH_IPV6HEADER=m +-CONFIG_IP6_NF_MATCH_MH=m +-CONFIG_IP6_NF_MATCH_RPFILTER=m +-CONFIG_IP6_NF_MATCH_RT=m +-CONFIG_IP6_NF_TARGET_HL=m +-CONFIG_IP6_NF_FILTER=m +-CONFIG_IP6_NF_TARGET_REJECT=m +-CONFIG_IP6_NF_TARGET_SYNPROXY=m +-CONFIG_IP6_NF_MANGLE=m +-CONFIG_IP6_NF_RAW=m +-CONFIG_IP6_NF_NAT=m +-CONFIG_IP6_NF_TARGET_MASQUERADE=m +-CONFIG_IP6_NF_TARGET_NPT=m +-CONFIG_NF_TABLES_BRIDGE=m +-CONFIG_NFT_BRIDGE_META=m +-CONFIG_NFT_BRIDGE_REJECT=m +-CONFIG_NF_LOG_BRIDGE=m +-CONFIG_BRIDGE_NF_EBTABLES=m +-CONFIG_BRIDGE_EBT_BROUTE=m +-CONFIG_BRIDGE_EBT_T_FILTER=m +-CONFIG_BRIDGE_EBT_T_NAT=m +-CONFIG_BRIDGE_EBT_802_3=m +-CONFIG_BRIDGE_EBT_AMONG=m +-CONFIG_BRIDGE_EBT_ARP=m +-CONFIG_BRIDGE_EBT_IP=m +-CONFIG_BRIDGE_EBT_IP6=m +-CONFIG_BRIDGE_EBT_LIMIT=m +-CONFIG_BRIDGE_EBT_MARK=m +-CONFIG_BRIDGE_EBT_PKTTYPE=m +-CONFIG_BRIDGE_EBT_STP=m +-CONFIG_BRIDGE_EBT_VLAN=m +-CONFIG_BRIDGE_EBT_ARPREPLY=m +-CONFIG_BRIDGE_EBT_DNAT=m +-CONFIG_BRIDGE_EBT_MARK_T=m +-CONFIG_BRIDGE_EBT_REDIRECT=m +-CONFIG_BRIDGE_EBT_SNAT=m +-CONFIG_BRIDGE_EBT_LOG=m +-CONFIG_BRIDGE_EBT_NFLOG=m +-CONFIG_IP_DCCP=m +-CONFIG_INET_DCCP_DIAG=m +- +-# +-# DCCP CCIDs Configuration +-# +-# CONFIG_IP_DCCP_CCID2_DEBUG is not set +-CONFIG_IP_DCCP_CCID3=y +-# CONFIG_IP_DCCP_CCID3_DEBUG is not set +-CONFIG_IP_DCCP_TFRC_LIB=y +- +-# +-# DCCP Kernel Hacking +-# +-# CONFIG_IP_DCCP_DEBUG is not set +-CONFIG_IP_SCTP=m +-CONFIG_SCTP_DBG_OBJCNT=y +-CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y +-# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set +-# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set +-CONFIG_SCTP_COOKIE_HMAC_MD5=y +-CONFIG_SCTP_COOKIE_HMAC_SHA1=y +-CONFIG_RDS=m +-# CONFIG_RDS_TCP is not set +-# CONFIG_RDS_DEBUG is not set +-CONFIG_TIPC=m +-CONFIG_TIPC_MEDIA_UDP=y +-# CONFIG_ATM is not set +-CONFIG_L2TP=m +-# CONFIG_L2TP_DEBUGFS is not set +-CONFIG_L2TP_V3=y +-CONFIG_L2TP_IP=m +-CONFIG_L2TP_ETH=m +-CONFIG_STP=m +-CONFIG_BRIDGE=m +-CONFIG_BRIDGE_IGMP_SNOOPING=y +-CONFIG_BRIDGE_VLAN_FILTERING=y +-CONFIG_HAVE_NET_DSA=y +-CONFIG_VLAN_8021Q=m +-# CONFIG_VLAN_8021Q_GVRP is not set +-# CONFIG_VLAN_8021Q_MVRP is not set +-# CONFIG_DECNET is not set +-CONFIG_LLC=m +-CONFIG_LLC2=m +-# CONFIG_IPX is not set +-CONFIG_ATALK=m +-CONFIG_DEV_APPLETALK=m +-CONFIG_IPDDP=m +-CONFIG_IPDDP_ENCAP=y +-# CONFIG_X25 is not set +-# CONFIG_LAPB is not set +-# CONFIG_PHONET is not set +-# CONFIG_6LOWPAN is not set +-# CONFIG_IEEE802154 is not set +-CONFIG_NET_SCHED=y +- +-# +-# Queueing/Scheduling +-# +-CONFIG_NET_SCH_CBQ=y +-CONFIG_NET_SCH_HTB=y +-CONFIG_NET_SCH_HFSC=m +-CONFIG_NET_SCH_PRIO=y +-CONFIG_NET_SCH_MULTIQ=m +-CONFIG_NET_SCH_RED=m +-CONFIG_NET_SCH_SFB=m +-CONFIG_NET_SCH_SFQ=y +-CONFIG_NET_SCH_TEQL=m +-CONFIG_NET_SCH_TBF=m +-CONFIG_NET_SCH_GRED=m +-CONFIG_NET_SCH_DSMARK=m +-CONFIG_NET_SCH_NETEM=m +-CONFIG_NET_SCH_DRR=m +-CONFIG_NET_SCH_MQPRIO=m +-CONFIG_NET_SCH_CHOKE=m +-CONFIG_NET_SCH_QFQ=y +-CONFIG_NET_SCH_CODEL=m +-CONFIG_NET_SCH_FQ_CODEL=m +-CONFIG_NET_SCH_FQ=m +-CONFIG_NET_SCH_HHF=m +-CONFIG_NET_SCH_PIE=m +-CONFIG_NET_SCH_INGRESS=m +-CONFIG_NET_SCH_PLUG=m +- +-# +-# Classification +-# +-CONFIG_NET_CLS=y +-CONFIG_NET_CLS_BASIC=m +-CONFIG_NET_CLS_TCINDEX=m +-CONFIG_NET_CLS_ROUTE4=m +-CONFIG_NET_CLS_FW=m +-CONFIG_NET_CLS_U32=m +-CONFIG_CLS_U32_PERF=y +-CONFIG_CLS_U32_MARK=y +-CONFIG_NET_CLS_RSVP=m +-CONFIG_NET_CLS_RSVP6=m +-CONFIG_NET_CLS_FLOW=m +-CONFIG_NET_CLS_CGROUP=m +-CONFIG_NET_CLS_BPF=m +-CONFIG_NET_CLS_FLOWER=m +-CONFIG_NET_EMATCH=y +-CONFIG_NET_EMATCH_STACK=32 +-CONFIG_NET_EMATCH_CMP=m +-CONFIG_NET_EMATCH_NBYTE=m +-CONFIG_NET_EMATCH_U32=m +-CONFIG_NET_EMATCH_META=m +-CONFIG_NET_EMATCH_TEXT=m +-CONFIG_NET_EMATCH_CANID=m +-CONFIG_NET_EMATCH_IPSET=m +-CONFIG_NET_CLS_ACT=y +-CONFIG_NET_ACT_POLICE=m +-CONFIG_NET_ACT_GACT=m +-CONFIG_GACT_PROB=y +-CONFIG_NET_ACT_MIRRED=m +-CONFIG_NET_ACT_IPT=m +-CONFIG_NET_ACT_NAT=m +-CONFIG_NET_ACT_PEDIT=m +-CONFIG_NET_ACT_SIMP=m +-CONFIG_NET_ACT_SKBEDIT=m +-CONFIG_NET_ACT_CSUM=m +-CONFIG_NET_ACT_VLAN=m +-CONFIG_NET_ACT_BPF=m +-CONFIG_NET_ACT_CONNMARK=m +-CONFIG_NET_CLS_IND=y +-CONFIG_NET_SCH_FIFO=y +-# CONFIG_DCB is not set +-CONFIG_DNS_RESOLVER=y +-# CONFIG_BATMAN_ADV is not set +-CONFIG_OPENVSWITCH=m +-CONFIG_OPENVSWITCH_GRE=m +-CONFIG_OPENVSWITCH_VXLAN=m +-CONFIG_VSOCKETS=m +-CONFIG_NETLINK_MMAP=y +-CONFIG_NETLINK_DIAG=m +-CONFIG_MPLS=y +-CONFIG_NET_MPLS_GSO=m +-# CONFIG_MPLS_ROUTING is not set +-# CONFIG_HSR is not set +-# CONFIG_NET_SWITCHDEV is not set +-# CONFIG_NET_L3_MASTER_DEV is not set +-CONFIG_RPS=y +-CONFIG_RFS_ACCEL=y +-CONFIG_XPS=y +-CONFIG_CGROUP_NET_PRIO=y +-CONFIG_CGROUP_NET_CLASSID=y +-CONFIG_NET_RX_BUSY_POLL=y +-CONFIG_BQL=y +-# CONFIG_BPF_JIT is not set +-CONFIG_NET_FLOW_LIMIT=y +- +-# +-# Network testing +-# +-# CONFIG_NET_PKTGEN is not set +-# CONFIG_NET_DROP_MONITOR is not set +-# CONFIG_HAMRADIO is not set +-CONFIG_CAN=m +-CONFIG_CAN_RAW=m +-CONFIG_CAN_BCM=m +-CONFIG_CAN_GW=m +- +-# +-# CAN Device Drivers +-# +-# CONFIG_CAN_VCAN is not set +-# CONFIG_CAN_SLCAN is not set +-CONFIG_CAN_DEV=m +-CONFIG_CAN_CALC_BITTIMING=y +-# CONFIG_CAN_LEDS is not set +-# CONFIG_CAN_TI_HECC is not set +-CONFIG_CAN_FLEXCAN=m +-# CONFIG_CAN_GRCAN is not set +-# CONFIG_CAN_RCAR is not set +-# CONFIG_CAN_SJA1000 is not set +-# CONFIG_CAN_C_CAN is not set +-# CONFIG_CAN_M_CAN is not set +-# CONFIG_CAN_CC770 is not set +- +-# +-# CAN SPI interfaces +-# +-# CONFIG_CAN_MCP251X is not set +- +-# +-# CAN USB interfaces +-# +-CONFIG_CAN_EMS_USB=m +-CONFIG_CAN_ESD_USB2=m +-CONFIG_CAN_GS_USB=m +-CONFIG_CAN_KVASER_USB=m +-CONFIG_CAN_PEAK_USB=m +-CONFIG_CAN_8DEV_USB=m +-# CONFIG_CAN_SOFTING is not set +-# CONFIG_CAN_DEBUG_DEVICES is not set +-CONFIG_IRDA=m +- +-# +-# IrDA protocols +-# +-CONFIG_IRLAN=m +-CONFIG_IRNET=m +-CONFIG_IRCOMM=m +-CONFIG_IRDA_ULTRA=y +- +-# +-# IrDA options +-# +-# CONFIG_IRDA_CACHE_LAST_LSAP is not set +-CONFIG_IRDA_FAST_RR=y +-# CONFIG_IRDA_DEBUG is not set +- +-# +-# Infrared-port device drivers +-# +- +-# +-# SIR device drivers +-# +-CONFIG_IRTTY_SIR=m +- +-# +-# Dongle support +-# +-CONFIG_DONGLE=y +-CONFIG_ESI_DONGLE=m +-CONFIG_ACTISYS_DONGLE=m +-CONFIG_TEKRAM_DONGLE=m +-CONFIG_TOIM3232_DONGLE=m +-CONFIG_LITELINK_DONGLE=m +-CONFIG_MA600_DONGLE=m +-CONFIG_GIRBIL_DONGLE=m +-CONFIG_MCP2120_DONGLE=m +-CONFIG_OLD_BELKIN_DONGLE=m +-CONFIG_ACT200L_DONGLE=m +-CONFIG_KINGSUN_DONGLE=m +-CONFIG_KSDAZZLE_DONGLE=m +-CONFIG_KS959_DONGLE=m +- +-# +-# FIR device drivers +-# +-CONFIG_USB_IRDA=m +-CONFIG_SIGMATEL_FIR=m +-CONFIG_VLSI_FIR=m +-CONFIG_MCS_FIR=m +-CONFIG_BT=y +-CONFIG_BT_BREDR=y +-CONFIG_BT_RFCOMM=m +-CONFIG_BT_RFCOMM_TTY=y +-CONFIG_BT_BNEP=m +-CONFIG_BT_BNEP_MC_FILTER=y +-CONFIG_BT_BNEP_PROTO_FILTER=y +-CONFIG_BT_CMTP=m +-CONFIG_BT_HIDP=y +-CONFIG_BT_HS=y +-CONFIG_BT_LE=y +-# CONFIG_BT_SELFTEST is not set +-# CONFIG_BT_DEBUGFS is not set +- +-# +-# Bluetooth device drivers +-# +-CONFIG_BT_INTEL=y +-CONFIG_BT_BCM=y +-CONFIG_BT_RTL=m +-CONFIG_BT_QCA=y +-CONFIG_BT_HCIBTUSB=m +-CONFIG_BT_HCIBTUSB_BCM=y +-CONFIG_BT_HCIBTUSB_RTL=y +-# CONFIG_BT_HCIBTSDIO is not set +-CONFIG_BT_HCIUART=y +-CONFIG_BT_HCIUART_H4=y +-CONFIG_BT_HCIUART_BCSP=y +-CONFIG_BT_HCIUART_ATH3K=y +-CONFIG_BT_HCIUART_LL=y +-CONFIG_BT_HCIUART_3WIRE=y +-CONFIG_BT_HCIUART_INTEL=y +-CONFIG_BT_HCIUART_BCM=y +-CONFIG_BT_HCIUART_QCA=y +-CONFIG_BT_HCIBCM203X=m +-CONFIG_BT_HCIBPA10X=m +-CONFIG_BT_HCIBFUSB=m +-CONFIG_BT_HCIVHCI=m +-CONFIG_BT_MRVL=m +-CONFIG_BT_MRVL_SDIO=m +-CONFIG_BT_ATH3K=m +-CONFIG_BT_WILINK=m +-CONFIG_AF_RXRPC=m +-# CONFIG_AF_RXRPC_DEBUG is not set +-# CONFIG_RXKAD is not set +-CONFIG_FIB_RULES=y +-CONFIG_WIRELESS=y +-CONFIG_WIRELESS_EXT=y +-CONFIG_WEXT_CORE=y +-CONFIG_WEXT_PROC=y +-CONFIG_WEXT_SPY=y +-CONFIG_WEXT_PRIV=y +-CONFIG_CFG80211=m +-# CONFIG_NL80211_TESTMODE is not set +-# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +-# CONFIG_CFG80211_REG_DEBUG is not set +-# CONFIG_CFG80211_CERTIFICATION_ONUS is not set +-# CONFIG_CFG80211_DEFAULT_PS is not set +-# CONFIG_CFG80211_DEBUGFS is not set +-# CONFIG_CFG80211_INTERNAL_REGDB is not set +-CONFIG_CFG80211_CRDA_SUPPORT=y +-CONFIG_CFG80211_WEXT=y +-CONFIG_CFG80211_WEXT_EXPORT=y +-CONFIG_LIB80211=m +-CONFIG_LIB80211_CRYPT_WEP=m +-CONFIG_LIB80211_CRYPT_CCMP=m +-CONFIG_LIB80211_CRYPT_TKIP=m +-# CONFIG_LIB80211_DEBUG is not set +-CONFIG_MAC80211=m +-CONFIG_MAC80211_HAS_RC=y +-CONFIG_MAC80211_RC_MINSTREL=y +-CONFIG_MAC80211_RC_MINSTREL_HT=y +-CONFIG_MAC80211_RC_MINSTREL_VHT=y +-CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +-CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +-CONFIG_MAC80211_MESH=y +-CONFIG_MAC80211_LEDS=y +-# CONFIG_MAC80211_DEBUGFS is not set +-# CONFIG_MAC80211_MESSAGE_TRACING is not set +-# CONFIG_MAC80211_DEBUG_MENU is not set +-CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +-# CONFIG_WIMAX is not set +-CONFIG_RFKILL=y +-CONFIG_RFKILL_LEDS=y +-CONFIG_RFKILL_INPUT=y +-CONFIG_RFKILL_REGULATOR=y +-CONFIG_RFKILL_GPIO=y +-# CONFIG_NET_9P is not set +-CONFIG_CAIF=m +-# CONFIG_CAIF_DEBUG is not set +-CONFIG_CAIF_NETDEV=m +-CONFIG_CAIF_USB=m +-CONFIG_CEPH_LIB=m +-# CONFIG_CEPH_LIB_PRETTYDEBUG is not set +-CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y +-CONFIG_NFC=m +-# CONFIG_NFC_DIGITAL is not set +-# CONFIG_NFC_NCI is not set +-# CONFIG_NFC_HCI is not set +- +-# +-# Near Field Communication (NFC) devices +-# +-# CONFIG_NFC_PN533 is not set +-# CONFIG_NFC_SIM is not set +-CONFIG_LWTUNNEL=y +-CONFIG_HAVE_BPF_JIT=y +- +-# +-# Device Drivers +-# +- +-# +-# Generic Driver Options +-# +-CONFIG_UEVENT_HELPER=y +-CONFIG_UEVENT_HELPER_PATH="" +-CONFIG_DEVTMPFS=y +-CONFIG_DEVTMPFS_MOUNT=y +-# CONFIG_STANDALONE is not set +-# CONFIG_PREVENT_FIRMWARE_BUILD is not set +-CONFIG_FW_LOADER=y +-CONFIG_FIRMWARE_IN_KERNEL=y +-CONFIG_EXTRA_FIRMWARE="" +-CONFIG_FW_LOADER_USER_HELPER=y +-CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +-CONFIG_WANT_DEV_COREDUMP=y +-CONFIG_ALLOW_DEV_COREDUMP=y +-CONFIG_DEV_COREDUMP=y +-# CONFIG_DEBUG_DRIVER is not set +-# CONFIG_DEBUG_DEVRES is not set +-# CONFIG_SYS_HYPERVISOR is not set +-# CONFIG_GENERIC_CPU_DEVICES is not set +-CONFIG_SOC_BUS=y +-CONFIG_REGMAP=y +-CONFIG_REGMAP_I2C=y +-CONFIG_REGMAP_SPI=y +-CONFIG_REGMAP_MMIO=y +-CONFIG_REGMAP_IRQ=y +-CONFIG_DMA_SHARED_BUFFER=y +-# CONFIG_FENCE_TRACE is not set +-CONFIG_DMA_CMA=y +- +-# +-# Default contiguous memory area size: +-# +-CONFIG_CMA_SIZE_MBYTES=288 +-CONFIG_CMA_SIZE_SEL_MBYTES=y +-# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set +-# CONFIG_CMA_SIZE_SEL_MIN is not set +-# CONFIG_CMA_SIZE_SEL_MAX is not set +-CONFIG_CMA_ALIGNMENT=8 +- +-# +-# Bus devices +-# +-# CONFIG_ARM_CCI400_PMU is not set +-# CONFIG_ARM_CCI500_PMU is not set +-# CONFIG_ARM_CCN is not set +-# CONFIG_BRCMSTB_GISB_ARB is not set +-CONFIG_IMX_WEIM=y +-# CONFIG_VEXPRESS_CONFIG is not set +-CONFIG_CONNECTOR=y +-CONFIG_PROC_EVENTS=y +-CONFIG_MTD=y +-# CONFIG_MTD_TESTS is not set +-# CONFIG_MTD_REDBOOT_PARTS is not set +-CONFIG_MTD_CMDLINE_PARTS=y +-# CONFIG_MTD_AFS_PARTS is not set +-CONFIG_MTD_OF_PARTS=y +-# CONFIG_MTD_AR7_PARTS is not set +- +-# +-# User Modules And Translation Layers +-# +-CONFIG_MTD_BLKDEVS=y +-CONFIG_MTD_BLOCK=y +-# CONFIG_FTL is not set +-# CONFIG_NFTL is not set +-# CONFIG_INFTL is not set +-# CONFIG_RFD_FTL is not set +-# CONFIG_SSFDC is not set +-# CONFIG_SM_FTL is not set +-# CONFIG_MTD_OOPS is not set +-# CONFIG_MTD_SWAP is not set +-# CONFIG_MTD_PARTITIONED_MASTER is not set +- +-# +-# RAM/ROM/Flash chip drivers +-# +-CONFIG_MTD_CFI=y +-CONFIG_MTD_JEDECPROBE=y +-CONFIG_MTD_GEN_PROBE=y +-# CONFIG_MTD_CFI_ADV_OPTIONS is not set +-CONFIG_MTD_MAP_BANK_WIDTH_1=y +-CONFIG_MTD_MAP_BANK_WIDTH_2=y +-CONFIG_MTD_MAP_BANK_WIDTH_4=y +-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +-CONFIG_MTD_CFI_I1=y +-CONFIG_MTD_CFI_I2=y +-# CONFIG_MTD_CFI_I4 is not set +-# CONFIG_MTD_CFI_I8 is not set +-CONFIG_MTD_CFI_INTELEXT=y +-CONFIG_MTD_CFI_AMDSTD=y +-CONFIG_MTD_CFI_STAA=y +-CONFIG_MTD_CFI_UTIL=y +-# CONFIG_MTD_RAM is not set +-# CONFIG_MTD_ROM is not set +-# CONFIG_MTD_ABSENT is not set +- +-# +-# Mapping drivers for chip access +-# +-# CONFIG_MTD_COMPLEX_MAPPINGS is not set +-# CONFIG_MTD_PHYSMAP is not set +-CONFIG_MTD_PHYSMAP_OF=y +-# CONFIG_MTD_IMPA7 is not set +-# CONFIG_MTD_INTEL_VR_NOR is not set +-# CONFIG_MTD_PLATRAM is not set +- +-# +-# Self-contained MTD device drivers +-# +-# CONFIG_MTD_PMC551 is not set +-CONFIG_MTD_DATAFLASH=y +-# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set +-# CONFIG_MTD_DATAFLASH_OTP is not set +-# CONFIG_MTD_M25P80 is not set +-CONFIG_MTD_SST25L=y +-# CONFIG_MTD_SLRAM is not set +-# CONFIG_MTD_PHRAM is not set +-# CONFIG_MTD_MTDRAM is not set +-# CONFIG_MTD_BLOCK2MTD is not set +- +-# +-# Disk-On-Chip Device Drivers +-# +-# CONFIG_MTD_DOCG3 is not set +-CONFIG_MTD_NAND_ECC=y +-# CONFIG_MTD_NAND_ECC_SMC is not set +-CONFIG_MTD_NAND=y +-# CONFIG_MTD_NAND_ECC_BCH is not set +-# CONFIG_MTD_SM_COMMON is not set +-# CONFIG_MTD_NAND_DENALI_PCI is not set +-# CONFIG_MTD_NAND_DENALI_DT is not set +-# CONFIG_MTD_NAND_GPIO is not set +-# CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set +-CONFIG_MTD_NAND_IDS=y +-# CONFIG_MTD_NAND_RICOH is not set +-# CONFIG_MTD_NAND_DISKONCHIP is not set +-# CONFIG_MTD_NAND_DOCG4 is not set +-# CONFIG_MTD_NAND_CAFE is not set +-# CONFIG_MTD_NAND_NANDSIM is not set +-# CONFIG_MTD_NAND_GPMI_NAND is not set +-# CONFIG_MTD_NAND_BRCMNAND is not set +-# CONFIG_MTD_NAND_PLATFORM is not set +-CONFIG_MTD_NAND_MXC=y +-# CONFIG_MTD_NAND_HISI504 is not set +-# CONFIG_MTD_ONENAND is not set +- +-# +-# LPDDR & LPDDR2 PCM memory drivers +-# +-# CONFIG_MTD_LPDDR is not set +-# CONFIG_MTD_LPDDR2_NVM is not set +-CONFIG_MTD_SPI_NOR=m +-CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y +-CONFIG_SPI_FSL_QUADSPI=m +-CONFIG_MTD_UBI=y +-CONFIG_MTD_UBI_WL_THRESHOLD=4096 +-CONFIG_MTD_UBI_BEB_LIMIT=20 +-# CONFIG_MTD_UBI_FASTMAP is not set +-# CONFIG_MTD_UBI_GLUEBI is not set +-# CONFIG_MTD_UBI_BLOCK is not set +-CONFIG_DTC=y +-CONFIG_OF=y +-# CONFIG_OF_UNITTEST is not set +-CONFIG_OF_FLATTREE=y +-CONFIG_OF_EARLY_FLATTREE=y +-CONFIG_OF_ADDRESS=y +-CONFIG_OF_ADDRESS_PCI=y +-CONFIG_OF_IRQ=y +-CONFIG_OF_NET=y +-CONFIG_OF_MDIO=y +-CONFIG_OF_PCI=y +-CONFIG_OF_PCI_IRQ=y +-CONFIG_OF_MTD=y +-CONFIG_OF_RESERVED_MEM=y +-# CONFIG_OF_OVERLAY is not set +-CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y +-# CONFIG_PARPORT is not set +-CONFIG_BLK_DEV=y +-# CONFIG_BLK_DEV_NULL_BLK is not set +-# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set +-# CONFIG_BLK_CPQ_CISS_DA is not set +-# CONFIG_BLK_DEV_DAC960 is not set +-# CONFIG_BLK_DEV_UMEM is not set +-# CONFIG_BLK_DEV_COW_COMMON is not set +-CONFIG_BLK_DEV_LOOP=m +-CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +-CONFIG_BLK_DEV_CRYPTOLOOP=m +-# CONFIG_BLK_DEV_DRBD is not set +-# CONFIG_BLK_DEV_NBD is not set +-# CONFIG_BLK_DEV_SX8 is not set +-CONFIG_BLK_DEV_RAM=m +-CONFIG_BLK_DEV_RAM_COUNT=16 +-CONFIG_BLK_DEV_RAM_SIZE=65536 +-CONFIG_CDROM_PKTCDVD=m +-CONFIG_CDROM_PKTCDVD_BUFFERS=8 +-# CONFIG_CDROM_PKTCDVD_WCACHE is not set +-# CONFIG_ATA_OVER_ETH is not set +-CONFIG_MG_DISK=y +-CONFIG_MG_DISK_RES=0 +-# CONFIG_BLK_DEV_RBD is not set +-# CONFIG_BLK_DEV_RSXX is not set +-# CONFIG_BLK_DEV_NVME is not set +- +-# +-# Misc devices +-# +-# CONFIG_SENSORS_LIS3LV02D is not set +-# CONFIG_AD525X_DPOT is not set +-# CONFIG_DUMMY_IRQ is not set +-CONFIG_HWLAT_DETECTOR=m +-# CONFIG_PHANTOM is not set +-# CONFIG_SGI_IOC4 is not set +-CONFIG_TIFM_CORE=y +-CONFIG_TIFM_7XX1=y +-# CONFIG_ICS932S401 is not set +-CONFIG_ENCLOSURE_SERVICES=y +-# CONFIG_HP_ILO is not set +-# CONFIG_APDS9802ALS is not set +-# CONFIG_ISL29003 is not set +-# CONFIG_ISL29020 is not set +-# CONFIG_SENSORS_TSL2550 is not set +-# CONFIG_SENSORS_BH1780 is not set +-# CONFIG_SENSORS_BH1770 is not set +-# CONFIG_SENSORS_APDS990X is not set +-# CONFIG_HMC6352 is not set +-# CONFIG_DS1682 is not set +-# CONFIG_TI_DAC7512 is not set +-# CONFIG_BMP085_I2C is not set +-# CONFIG_BMP085_SPI is not set +-# CONFIG_USB_SWITCH_FSA9480 is not set +-# CONFIG_LATTICE_ECP3_CONFIG is not set +-CONFIG_SRAM=y +-# CONFIG_C2PORT is not set +- +-# +-# EEPROM support +-# +-CONFIG_EEPROM_AT24=y +-CONFIG_EEPROM_AT25=y +-# CONFIG_EEPROM_LEGACY is not set +-CONFIG_EEPROM_MAX6875=y +-CONFIG_EEPROM_93CX6=m +-# CONFIG_EEPROM_93XX46 is not set +-CONFIG_CB710_CORE=y +-# CONFIG_CB710_DEBUG is not set +-CONFIG_CB710_DEBUG_ASSUMPTIONS=y +- +-# +-# Texas Instruments shared transport line discipline +-# +-CONFIG_TI_ST=m +-# CONFIG_SENSORS_LIS3_SPI is not set +-# CONFIG_SENSORS_LIS3_I2C is not set +- +-# +-# Altera FPGA firmware download module +-# +-CONFIG_ALTERA_STAPL=m +- +-# +-# Intel MIC Bus Driver +-# +- +-# +-# SCIF Bus Driver +-# +- +-# +-# Intel MIC Host Driver +-# +- +-# +-# Intel MIC Card Driver +-# +- +-# +-# SCIF Driver +-# +- +-# +-# Intel MIC Coprocessor State Management (COSM) Drivers +-# +-CONFIG_ECHO=m +-# CONFIG_CXL_BASE is not set +-# CONFIG_CXL_KERNEL_API is not set +-# CONFIG_CXL_EEH is not set +-CONFIG_HAVE_IDE=y +-# CONFIG_IDE is not set +- +-# +-# SCSI device support +-# +-CONFIG_SCSI_MOD=y +-# CONFIG_RAID_ATTRS is not set +-CONFIG_SCSI=y +-CONFIG_SCSI_DMA=y +-CONFIG_SCSI_NETLINK=y +-# CONFIG_SCSI_MQ_DEFAULT is not set +-CONFIG_SCSI_PROC_FS=y +- +-# +-# SCSI support type (disk, tape, CD-ROM) +-# +-CONFIG_BLK_DEV_SD=y +-# CONFIG_CHR_DEV_ST is not set +-# CONFIG_CHR_DEV_OSST is not set +-CONFIG_BLK_DEV_SR=y +-CONFIG_BLK_DEV_SR_VENDOR=y +-CONFIG_CHR_DEV_SG=y +-CONFIG_CHR_DEV_SCH=y +-CONFIG_SCSI_ENCLOSURE=y +-# CONFIG_SCSI_CONSTANTS is not set +-CONFIG_SCSI_LOGGING=y +-CONFIG_SCSI_SCAN_ASYNC=y +- +-# +-# SCSI Transports +-# +-# CONFIG_SCSI_SPI_ATTRS is not set +-CONFIG_SCSI_FC_ATTRS=m +-CONFIG_SCSI_ISCSI_ATTRS=m +-# CONFIG_SCSI_SAS_ATTRS is not set +-# CONFIG_SCSI_SAS_LIBSAS is not set +-# CONFIG_SCSI_SRP_ATTRS is not set +-CONFIG_SCSI_LOWLEVEL=y +-CONFIG_ISCSI_TCP=m +-CONFIG_ISCSI_BOOT_SYSFS=m +-# CONFIG_SCSI_CXGB3_ISCSI is not set +-# CONFIG_SCSI_CXGB4_ISCSI is not set +-# CONFIG_SCSI_BNX2_ISCSI is not set +-# CONFIG_SCSI_BNX2X_FCOE is not set +-# CONFIG_BE2ISCSI is not set +-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +-# CONFIG_SCSI_HPSA is not set +-# CONFIG_SCSI_3W_9XXX is not set +-# CONFIG_SCSI_3W_SAS is not set +-# CONFIG_SCSI_ACARD is not set +-# CONFIG_SCSI_AACRAID is not set +-# CONFIG_SCSI_AIC7XXX is not set +-# CONFIG_SCSI_AIC79XX is not set +-# CONFIG_SCSI_AIC94XX is not set +-# CONFIG_SCSI_MVSAS is not set +-# CONFIG_SCSI_MVUMI is not set +-# CONFIG_SCSI_ADVANSYS is not set +-# CONFIG_SCSI_ARCMSR is not set +-# CONFIG_SCSI_ESAS2R is not set +-# CONFIG_MEGARAID_NEWGEN is not set +-# CONFIG_MEGARAID_LEGACY is not set +-# CONFIG_MEGARAID_SAS is not set +-# CONFIG_SCSI_MPT3SAS is not set +-# CONFIG_SCSI_MPT2SAS is not set +-CONFIG_SCSI_UFSHCD=m +-# CONFIG_SCSI_UFSHCD_PCI is not set +-CONFIG_SCSI_UFSHCD_PLATFORM=m +-# CONFIG_SCSI_HPTIOP is not set +-CONFIG_LIBFC=m +-CONFIG_LIBFCOE=m +-# CONFIG_FCOE is not set +-# CONFIG_SCSI_SNIC is not set +-# CONFIG_SCSI_DMX3191D is not set +-# CONFIG_SCSI_FUTURE_DOMAIN is not set +-# CONFIG_SCSI_IPS is not set +-# CONFIG_SCSI_INITIO is not set +-# CONFIG_SCSI_INIA100 is not set +-# CONFIG_SCSI_STEX is not set +-# CONFIG_SCSI_SYM53C8XX_2 is not set +-# CONFIG_SCSI_IPR is not set +-# CONFIG_SCSI_QLOGIC_1280 is not set +-# CONFIG_SCSI_QLA_FC is not set +-# CONFIG_SCSI_QLA_ISCSI is not set +-# CONFIG_SCSI_LPFC is not set +-# CONFIG_SCSI_DC395x is not set +-# CONFIG_SCSI_AM53C974 is not set +-# CONFIG_SCSI_NSP32 is not set +-# CONFIG_SCSI_WD719X is not set +-# CONFIG_SCSI_DEBUG is not set +-# CONFIG_SCSI_PMCRAID is not set +-# CONFIG_SCSI_PM8001 is not set +-# CONFIG_SCSI_BFA_FC is not set +-# CONFIG_SCSI_CHELSIO_FCOE is not set +-# CONFIG_SCSI_DH is not set +-CONFIG_SCSI_OSD_INITIATOR=m +-# CONFIG_SCSI_OSD_ULD is not set +-CONFIG_SCSI_OSD_DPRINT_SENSE=1 +-# CONFIG_SCSI_OSD_DEBUG is not set +-CONFIG_ATA=y +-# CONFIG_ATA_NONSTANDARD is not set +-# CONFIG_ATA_VERBOSE_ERROR is not set +-CONFIG_SATA_PMP=y +- +-# +-# Controllers with non-SFF native interface +-# +-CONFIG_SATA_AHCI=y +-CONFIG_SATA_AHCI_PLATFORM=y +-CONFIG_AHCI_IMX=y +-# CONFIG_AHCI_CEVA is not set +-# CONFIG_AHCI_QORIQ is not set +-# CONFIG_SATA_INIC162X is not set +-# CONFIG_SATA_ACARD_AHCI is not set +-# CONFIG_SATA_SIL24 is not set +-CONFIG_ATA_SFF=y +- +-# +-# SFF controllers with custom DMA interface +-# +-# CONFIG_PDC_ADMA is not set +-# CONFIG_SATA_QSTOR is not set +-# CONFIG_SATA_SX4 is not set +-CONFIG_ATA_BMDMA=y +- +-# +-# SATA SFF controllers with BMDMA +-# +-# CONFIG_ATA_PIIX is not set +-# CONFIG_SATA_MV is not set +-# CONFIG_SATA_NV is not set +-# CONFIG_SATA_PROMISE is not set +-# CONFIG_SATA_SIL is not set +-# CONFIG_SATA_SIS is not set +-# CONFIG_SATA_SVW is not set +-# CONFIG_SATA_ULI is not set +-# CONFIG_SATA_VIA is not set +-# CONFIG_SATA_VITESSE is not set +- +-# +-# PATA SFF controllers with BMDMA +-# +-# CONFIG_PATA_ALI is not set +-# CONFIG_PATA_AMD is not set +-# CONFIG_PATA_ARTOP is not set +-# CONFIG_PATA_ATIIXP is not set +-# CONFIG_PATA_ATP867X is not set +-# CONFIG_PATA_CMD64X is not set +-# CONFIG_PATA_CYPRESS is not set +-# CONFIG_PATA_EFAR is not set +-# CONFIG_PATA_HPT366 is not set +-# CONFIG_PATA_HPT37X is not set +-# CONFIG_PATA_HPT3X2N is not set +-# CONFIG_PATA_HPT3X3 is not set +-CONFIG_PATA_IMX=y +-# CONFIG_PATA_IT8213 is not set +-# CONFIG_PATA_IT821X is not set +-# CONFIG_PATA_JMICRON is not set +-# CONFIG_PATA_MARVELL is not set +-# CONFIG_PATA_NETCELL is not set +-# CONFIG_PATA_NINJA32 is not set +-# CONFIG_PATA_NS87415 is not set +-# CONFIG_PATA_OLDPIIX is not set +-# CONFIG_PATA_OPTIDMA is not set +-# CONFIG_PATA_PDC2027X is not set +-# CONFIG_PATA_PDC_OLD is not set +-# CONFIG_PATA_RADISYS is not set +-# CONFIG_PATA_RDC is not set +-# CONFIG_PATA_SCH is not set +-# CONFIG_PATA_SERVERWORKS is not set +-# CONFIG_PATA_SIL680 is not set +-# CONFIG_PATA_SIS is not set +-# CONFIG_PATA_TOSHIBA is not set +-# CONFIG_PATA_TRIFLEX is not set +-# CONFIG_PATA_VIA is not set +-# CONFIG_PATA_WINBOND is not set +- +-# +-# PIO-only SFF controllers +-# +-# CONFIG_PATA_CMD640_PCI is not set +-# CONFIG_PATA_MPIIX is not set +-# CONFIG_PATA_NS87410 is not set +-# CONFIG_PATA_OPTI is not set +-# CONFIG_PATA_PLATFORM is not set +-# CONFIG_PATA_RZ1000 is not set +- +-# +-# Generic fallback / legacy drivers +-# +-# CONFIG_ATA_GENERIC is not set +-# CONFIG_PATA_LEGACY is not set +-CONFIG_MD=y +-CONFIG_BLK_DEV_MD=y +-CONFIG_MD_AUTODETECT=y +-CONFIG_MD_LINEAR=y +-CONFIG_MD_RAID0=y +-CONFIG_MD_RAID1=y +-CONFIG_MD_RAID10=y +-CONFIG_MD_RAID456=m +-CONFIG_MD_MULTIPATH=m +-CONFIG_MD_FAULTY=m +-# CONFIG_MD_CLUSTER is not set +-CONFIG_BCACHE=m +-# CONFIG_BCACHE_DEBUG is not set +-# CONFIG_BCACHE_CLOSURES_DEBUG is not set +-CONFIG_BLK_DEV_DM_BUILTIN=y +-CONFIG_BLK_DEV_DM=m +-# CONFIG_DM_MQ_DEFAULT is not set +-# CONFIG_DM_DEBUG is not set +-CONFIG_DM_BUFIO=m +-CONFIG_DM_BIO_PRISON=m +-CONFIG_DM_PERSISTENT_DATA=m +-# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set +-CONFIG_DM_CRYPT=m +-CONFIG_DM_SNAPSHOT=m +-CONFIG_DM_THIN_PROVISIONING=m +-CONFIG_DM_CACHE=m +-CONFIG_DM_CACHE_MQ=m +-CONFIG_DM_CACHE_SMQ=m +-CONFIG_DM_CACHE_CLEANER=m +-# CONFIG_DM_ERA is not set +-CONFIG_DM_MIRROR=m +-CONFIG_DM_LOG_USERSPACE=m +-CONFIG_DM_RAID=m +-CONFIG_DM_ZERO=m +-CONFIG_DM_MULTIPATH=m +-CONFIG_DM_MULTIPATH_QL=m +-CONFIG_DM_MULTIPATH_ST=m +-CONFIG_DM_DELAY=m +-CONFIG_DM_UEVENT=y +-CONFIG_DM_FLAKEY=m +-CONFIG_DM_VERITY=m +-# CONFIG_DM_SWITCH is not set +-# CONFIG_DM_LOG_WRITES is not set +-# CONFIG_TARGET_CORE is not set +-# CONFIG_FUSION is not set +- +-# +-# IEEE 1394 (FireWire) support +-# +-# CONFIG_FIREWIRE is not set +-# CONFIG_FIREWIRE_NOSY is not set +-CONFIG_NETDEVICES=y +-CONFIG_MII=y +-CONFIG_NET_CORE=y +-CONFIG_BONDING=m +-CONFIG_DUMMY=m +-# CONFIG_EQUALIZER is not set +-# CONFIG_NET_FC is not set +-# CONFIG_IFB is not set +-CONFIG_NET_TEAM=m +-CONFIG_NET_TEAM_MODE_BROADCAST=m +-CONFIG_NET_TEAM_MODE_ROUNDROBIN=m +-CONFIG_NET_TEAM_MODE_RANDOM=m +-CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m +-CONFIG_NET_TEAM_MODE_LOADBALANCE=m +-CONFIG_MACVLAN=m +-CONFIG_MACVTAP=m +-CONFIG_IPVLAN=m +-CONFIG_VXLAN=m +-# CONFIG_GENEVE is not set +-CONFIG_NETCONSOLE=m +-CONFIG_NETCONSOLE_DYNAMIC=y +-CONFIG_NETPOLL=y +-CONFIG_NET_POLL_CONTROLLER=y +-CONFIG_TUN=m +-# CONFIG_TUN_VNET_CROSS_LE is not set +-CONFIG_VETH=m +-CONFIG_NLMON=m +-# CONFIG_ARCNET is not set +- +-# +-# CAIF transport drivers +-# +-# CONFIG_CAIF_TTY is not set +-# CONFIG_CAIF_SPI_SLAVE is not set +-# CONFIG_CAIF_HSI is not set +-# CONFIG_CAIF_VIRTIO is not set +- +-# +-# Distributed Switch Architecture drivers +-# +-# CONFIG_NET_DSA_MV88E6XXX is not set +-# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set +-CONFIG_ETHERNET=y +-CONFIG_MDIO=y +-# CONFIG_NET_VENDOR_3COM is not set +-# CONFIG_NET_VENDOR_ADAPTEC is not set +-# CONFIG_NET_VENDOR_AGERE is not set +-# CONFIG_NET_VENDOR_ALTEON is not set +-# CONFIG_ALTERA_TSE is not set +-# CONFIG_NET_VENDOR_AMD is not set +-# CONFIG_NET_VENDOR_ARC is not set +-CONFIG_NET_VENDOR_ATHEROS=y +-CONFIG_ATL2=y +-CONFIG_ATL1=y +-CONFIG_ATL1E=y +-CONFIG_ATL1C=y +-CONFIG_ALX=y +-# CONFIG_NET_VENDOR_AURORA is not set +-# CONFIG_NET_CADENCE is not set +-# CONFIG_NET_VENDOR_BROADCOM is not set +-# CONFIG_NET_VENDOR_BROCADE is not set +-# CONFIG_NET_VENDOR_CAVIUM is not set +-# CONFIG_NET_VENDOR_CHELSIO is not set +-# CONFIG_NET_VENDOR_CIRRUS is not set +-# CONFIG_NET_VENDOR_CISCO is not set +-# CONFIG_DM9000 is not set +-# CONFIG_DNET is not set +-# CONFIG_NET_VENDOR_DEC is not set +-# CONFIG_NET_VENDOR_DLINK is not set +-# CONFIG_NET_VENDOR_EMULEX is not set +-# CONFIG_NET_VENDOR_EZCHIP is not set +-# CONFIG_NET_VENDOR_EXAR is not set +-# CONFIG_NET_VENDOR_FARADAY is not set +-CONFIG_NET_VENDOR_FREESCALE=y +-CONFIG_FEC=y +-CONFIG_FSL_PQ_MDIO=y +-CONFIG_FSL_XGMAC_MDIO=y +-CONFIG_GIANFAR=y +-# CONFIG_NET_VENDOR_HISILICON is not set +-# CONFIG_NET_VENDOR_HP is not set +-# CONFIG_NET_VENDOR_INTEL is not set +-# CONFIG_JME is not set +-# CONFIG_NET_VENDOR_MARVELL is not set +-# CONFIG_NET_VENDOR_MELLANOX is not set +-# CONFIG_NET_VENDOR_MICREL is not set +-# CONFIG_NET_VENDOR_MICROCHIP is not set +-# CONFIG_NET_VENDOR_MYRI is not set +-# CONFIG_FEALNX is not set +-# CONFIG_NET_VENDOR_NATSEMI is not set +-# CONFIG_NET_VENDOR_NVIDIA is not set +-# CONFIG_NET_VENDOR_OKI is not set +-# CONFIG_ETHOC is not set +-# CONFIG_NET_PACKET_ENGINE is not set +-# CONFIG_NET_VENDOR_QLOGIC is not set +-# CONFIG_NET_VENDOR_QUALCOMM is not set +-# CONFIG_NET_VENDOR_REALTEK is not set +-# CONFIG_NET_VENDOR_RENESAS is not set +-# CONFIG_NET_VENDOR_RDC is not set +-# CONFIG_NET_VENDOR_ROCKER is not set +-# CONFIG_NET_VENDOR_SAMSUNG is not set +-# CONFIG_NET_VENDOR_SEEQ is not set +-# CONFIG_NET_VENDOR_SILAN is not set +-# CONFIG_NET_VENDOR_SIS is not set +-# CONFIG_SFC is not set +-# CONFIG_NET_VENDOR_SMSC is not set +-# CONFIG_NET_VENDOR_STMICRO is not set +-# CONFIG_NET_VENDOR_SUN is not set +-# CONFIG_NET_VENDOR_SYNOPSYS is not set +-# CONFIG_NET_VENDOR_TEHUTI is not set +-# CONFIG_NET_VENDOR_TI is not set +-# CONFIG_NET_VENDOR_VIA is not set +-# CONFIG_NET_VENDOR_WIZNET is not set +-# CONFIG_FDDI is not set +-# CONFIG_HIPPI is not set +-CONFIG_PHYLIB=y +- +-# +-# MII PHY device drivers +-# +-# CONFIG_AQUANTIA_PHY is not set +-CONFIG_AT803X_PHY=y +-# CONFIG_AMD_PHY is not set +-# CONFIG_MARVELL_PHY is not set +-# CONFIG_DAVICOM_PHY is not set +-# CONFIG_QSEMI_PHY is not set +-# CONFIG_LXT_PHY is not set +-# CONFIG_CICADA_PHY is not set +-# CONFIG_VITESSE_PHY is not set +-# CONFIG_TERANETICS_PHY is not set +-# CONFIG_SMSC_PHY is not set +-# CONFIG_BROADCOM_PHY is not set +-# CONFIG_BCM7XXX_PHY is not set +-# CONFIG_BCM87XX_PHY is not set +-# CONFIG_ICPLUS_PHY is not set +-# CONFIG_REALTEK_PHY is not set +-# CONFIG_NATIONAL_PHY is not set +-# CONFIG_STE10XP is not set +-# CONFIG_LSI_ET1011C_PHY is not set +-# CONFIG_MICREL_PHY is not set +-# CONFIG_DP83848_PHY is not set +-# CONFIG_DP83867_PHY is not set +-CONFIG_MICROCHIP_PHY=m +-CONFIG_FIXED_PHY=y +-CONFIG_MDIO_BITBANG=y +-CONFIG_MDIO_GPIO=y +-CONFIG_MDIO_BUS_MUX=y +-CONFIG_MDIO_BUS_MUX_GPIO=y +-CONFIG_MDIO_BUS_MUX_MMIOREG=y +-CONFIG_MDIO_BCM_UNIMAC=y +-# CONFIG_MICREL_KS8995MA is not set +-CONFIG_PPP=m +-CONFIG_PPP_BSDCOMP=m +-CONFIG_PPP_DEFLATE=m +-CONFIG_PPP_FILTER=y +-CONFIG_PPP_MPPE=m +-CONFIG_PPP_MULTILINK=y +-CONFIG_PPPOE=m +-CONFIG_PPTP=m +-CONFIG_PPPOL2TP=m +-CONFIG_PPP_ASYNC=m +-CONFIG_PPP_SYNC_TTY=m +-CONFIG_SLIP=m +-CONFIG_SLHC=m +-CONFIG_SLIP_COMPRESSED=y +-CONFIG_SLIP_SMART=y +-CONFIG_SLIP_MODE_SLIP6=y +-CONFIG_USB_NET_DRIVERS=y +-CONFIG_USB_CATC=m +-CONFIG_USB_KAWETH=m +-CONFIG_USB_PEGASUS=m +-CONFIG_USB_RTL8150=m +-CONFIG_USB_RTL8152=m +-CONFIG_USB_LAN78XX=m +-CONFIG_USB_USBNET=m +-CONFIG_USB_NET_AX8817X=m +-CONFIG_USB_NET_AX88179_178A=m +-CONFIG_USB_NET_CDCETHER=m +-CONFIG_USB_NET_CDC_EEM=m +-CONFIG_USB_NET_CDC_NCM=m +-CONFIG_USB_NET_HUAWEI_CDC_NCM=m +-CONFIG_USB_NET_CDC_MBIM=m +-CONFIG_USB_NET_DM9601=m +-CONFIG_USB_NET_SR9700=m +-CONFIG_USB_NET_SR9800=m +-CONFIG_USB_NET_SMSC75XX=m +-CONFIG_USB_NET_SMSC95XX=m +-CONFIG_USB_NET_GL620A=m +-CONFIG_USB_NET_NET1080=m +-CONFIG_USB_NET_PLUSB=m +-CONFIG_USB_NET_MCS7830=m +-CONFIG_USB_NET_RNDIS_HOST=m +-CONFIG_USB_NET_CDC_SUBSET=m +-CONFIG_USB_ALI_M5632=y +-CONFIG_USB_AN2720=y +-CONFIG_USB_BELKIN=y +-CONFIG_USB_ARMLINUX=y +-CONFIG_USB_EPSON2888=y +-CONFIG_USB_KC2190=y +-CONFIG_USB_NET_ZAURUS=m +-CONFIG_USB_NET_CX82310_ETH=m +-CONFIG_USB_NET_KALMIA=m +-CONFIG_USB_NET_QMI_WWAN=m +-CONFIG_USB_HSO=m +-CONFIG_USB_NET_INT51X1=m +-CONFIG_USB_IPHETH=m +-CONFIG_USB_SIERRA_NET=m +-CONFIG_USB_VL600=m +-CONFIG_USB_NET_CH9200=m +-CONFIG_WLAN=y +-CONFIG_LIBERTAS_THINFIRM=m +-# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set +-CONFIG_LIBERTAS_THINFIRM_USB=m +-CONFIG_ATMEL=m +-CONFIG_PCI_ATMEL=m +-CONFIG_AT76C50X_USB=m +-CONFIG_PRISM54=m +-CONFIG_USB_ZD1201=m +-CONFIG_USB_NET_RNDIS_WLAN=m +-CONFIG_ADM8211=m +-CONFIG_RTL8180=m +-CONFIG_RTL8187=m +-CONFIG_RTL8187_LEDS=y +-CONFIG_MAC80211_HWSIM=m +-CONFIG_MWL8K=m +-CONFIG_ATH_COMMON=m +-CONFIG_ATH_CARDS=m +-# CONFIG_ATH_DEBUG is not set +-CONFIG_ATH5K=m +-# CONFIG_ATH5K_DEBUG is not set +-# CONFIG_ATH5K_TRACER is not set +-CONFIG_ATH5K_PCI=y +-CONFIG_ATH9K_HW=m +-CONFIG_ATH9K_COMMON=m +-CONFIG_ATH9K_BTCOEX_SUPPORT=y +-CONFIG_ATH9K=m +-CONFIG_ATH9K_PCI=y +-CONFIG_ATH9K_AHB=y +-# CONFIG_ATH9K_DEBUGFS is not set +-# CONFIG_ATH9K_DYNACK is not set +-CONFIG_ATH9K_WOW=y +-CONFIG_ATH9K_RFKILL=y +-CONFIG_ATH9K_CHANNEL_CONTEXT=y +-CONFIG_ATH9K_PCOEM=y +-CONFIG_ATH9K_HTC=m +-# CONFIG_ATH9K_HTC_DEBUGFS is not set +-CONFIG_CARL9170=m +-CONFIG_CARL9170_LEDS=y +-CONFIG_CARL9170_WPC=y +-CONFIG_CARL9170_HWRNG=y +-CONFIG_ATH6KL=m +-CONFIG_ATH6KL_SDIO=m +-CONFIG_ATH6KL_USB=m +-# CONFIG_ATH6KL_DEBUG is not set +-# CONFIG_ATH6KL_TRACING is not set +-CONFIG_AR5523=m +-CONFIG_WIL6210=m +-CONFIG_WIL6210_ISR_COR=y +-CONFIG_WIL6210_TRACING=y +-CONFIG_ATH10K=m +-CONFIG_ATH10K_PCI=m +-# CONFIG_ATH10K_DEBUG is not set +-# CONFIG_ATH10K_DEBUGFS is not set +-# CONFIG_ATH10K_TRACING is not set +-CONFIG_WCN36XX=m +-# CONFIG_WCN36XX_DEBUGFS is not set +-CONFIG_B43=m +-CONFIG_B43_BCMA=y +-CONFIG_B43_SSB=y +-CONFIG_B43_BUSES_BCMA_AND_SSB=y +-# CONFIG_B43_BUSES_BCMA is not set +-# CONFIG_B43_BUSES_SSB is not set +-CONFIG_B43_PCI_AUTOSELECT=y +-CONFIG_B43_PCICORE_AUTOSELECT=y +-CONFIG_B43_SDIO=y +-CONFIG_B43_BCMA_PIO=y +-CONFIG_B43_PIO=y +-CONFIG_B43_PHY_G=y +-CONFIG_B43_PHY_N=y +-CONFIG_B43_PHY_LP=y +-CONFIG_B43_PHY_HT=y +-CONFIG_B43_LEDS=y +-CONFIG_B43_HWRNG=y +-# CONFIG_B43_DEBUG is not set +-CONFIG_B43LEGACY=m +-CONFIG_B43LEGACY_PCI_AUTOSELECT=y +-CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y +-CONFIG_B43LEGACY_LEDS=y +-CONFIG_B43LEGACY_HWRNG=y +-# CONFIG_B43LEGACY_DEBUG is not set +-CONFIG_B43LEGACY_DMA=y +-CONFIG_B43LEGACY_PIO=y +-CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +-# CONFIG_B43LEGACY_DMA_MODE is not set +-# CONFIG_B43LEGACY_PIO_MODE is not set +-CONFIG_BRCMUTIL=m +-CONFIG_BRCMSMAC=m +-CONFIG_BRCMFMAC=m +-CONFIG_BRCMFMAC_PROTO_BCDC=y +-CONFIG_BRCMFMAC_PROTO_MSGBUF=y +-CONFIG_BRCMFMAC_SDIO=y +-CONFIG_BRCMFMAC_USB=y +-CONFIG_BRCMFMAC_PCIE=y +-# CONFIG_BRCM_TRACING is not set +-# CONFIG_BRCMDBG is not set +-CONFIG_HOSTAP=m +-CONFIG_HOSTAP_FIRMWARE=y +-CONFIG_HOSTAP_FIRMWARE_NVRAM=y +-CONFIG_HOSTAP_PLX=m +-CONFIG_HOSTAP_PCI=m +-CONFIG_IPW2100=m +-CONFIG_IPW2100_MONITOR=y +-# CONFIG_IPW2100_DEBUG is not set +-CONFIG_IPW2200=m +-CONFIG_IPW2200_MONITOR=y +-CONFIG_IPW2200_RADIOTAP=y +-CONFIG_IPW2200_PROMISCUOUS=y +-CONFIG_IPW2200_QOS=y +-CONFIG_IPW2200_DEBUG=y +-CONFIG_LIBIPW=m +-# CONFIG_LIBIPW_DEBUG is not set +-CONFIG_IWLWIFI=m +-CONFIG_IWLWIFI_LEDS=y +-CONFIG_IWLDVM=m +-CONFIG_IWLMVM=m +-CONFIG_IWLWIFI_OPMODE_MODULAR=y +-CONFIG_IWLWIFI_BCAST_FILTERING=y +-CONFIG_IWLWIFI_UAPSD=y +- +-# +-# Debugging Options +-# +-# CONFIG_IWLWIFI_DEBUG is not set +-CONFIG_IWLWIFI_DEVICE_TRACING=y +-CONFIG_IWLEGACY=m +-CONFIG_IWL4965=m +-CONFIG_IWL3945=m +- +-# +-# iwl3945 / iwl4965 Debugging Options +-# +-# CONFIG_IWLEGACY_DEBUG is not set +-CONFIG_LIBERTAS=m +-CONFIG_LIBERTAS_USB=m +-CONFIG_LIBERTAS_SDIO=m +-CONFIG_LIBERTAS_SPI=m +-# CONFIG_LIBERTAS_DEBUG is not set +-CONFIG_LIBERTAS_MESH=y +-CONFIG_HERMES=m +-CONFIG_HERMES_PRISM=y +-CONFIG_HERMES_CACHE_FW_ON_INIT=y +-CONFIG_PLX_HERMES=m +-CONFIG_TMD_HERMES=m +-CONFIG_NORTEL_HERMES=m +-CONFIG_PCI_HERMES=m +-CONFIG_ORINOCO_USB=m +-CONFIG_P54_COMMON=m +-CONFIG_P54_USB=m +-CONFIG_P54_PCI=m +-CONFIG_P54_SPI=m +-CONFIG_P54_SPI_DEFAULT_EEPROM=y +-CONFIG_P54_LEDS=y +-CONFIG_RT2X00=m +-CONFIG_RT2400PCI=m +-CONFIG_RT2500PCI=m +-CONFIG_RT61PCI=m +-CONFIG_RT2800PCI=m +-CONFIG_RT2800PCI_RT33XX=y +-CONFIG_RT2800PCI_RT35XX=y +-CONFIG_RT2800PCI_RT53XX=y +-CONFIG_RT2800PCI_RT3290=y +-CONFIG_RT2500USB=m +-CONFIG_RT73USB=m +-CONFIG_RT2800USB=m +-CONFIG_RT2800USB_RT33XX=y +-CONFIG_RT2800USB_RT35XX=y +-CONFIG_RT2800USB_RT3573=y +-CONFIG_RT2800USB_RT53XX=y +-CONFIG_RT2800USB_RT55XX=y +-CONFIG_RT2800USB_UNKNOWN=y +-CONFIG_RT2800_LIB=m +-CONFIG_RT2800_LIB_MMIO=m +-CONFIG_RT2X00_LIB_MMIO=m +-CONFIG_RT2X00_LIB_PCI=m +-CONFIG_RT2X00_LIB_USB=m +-CONFIG_RT2X00_LIB=m +-CONFIG_RT2X00_LIB_FIRMWARE=y +-CONFIG_RT2X00_LIB_CRYPTO=y +-CONFIG_RT2X00_LIB_LEDS=y +-# CONFIG_RT2X00_DEBUG is not set +-CONFIG_WL_MEDIATEK=y +-CONFIG_MT7601U=m +-CONFIG_RTL_CARDS=m +-CONFIG_RTL8192CE=m +-CONFIG_RTL8192SE=m +-CONFIG_RTL8192DE=m +-CONFIG_RTL8723AE=m +-CONFIG_RTL8723BE=m +-CONFIG_RTL8188EE=m +-CONFIG_RTL8192EE=m +-CONFIG_RTL8821AE=m +-CONFIG_RTL8192CU=m +-CONFIG_RTLWIFI=m +-CONFIG_RTLWIFI_PCI=m +-CONFIG_RTLWIFI_USB=m +-CONFIG_RTLWIFI_DEBUG=y +-CONFIG_RTL8192C_COMMON=m +-CONFIG_RTL8723_COMMON=m +-CONFIG_RTLBTCOEXIST=m +-# CONFIG_RTL8XXXU is not set +-CONFIG_WL_TI=y +-CONFIG_WL1251=m +-CONFIG_WL1251_SPI=m +-CONFIG_WL1251_SDIO=m +-CONFIG_WL12XX=m +-CONFIG_WL18XX=m +-CONFIG_WLCORE=m +-CONFIG_WLCORE_SPI=m +-CONFIG_WLCORE_SDIO=m +-CONFIG_WILINK_PLATFORM_DATA=y +-CONFIG_ZD1211RW=m +-# CONFIG_ZD1211RW_DEBUG is not set +-CONFIG_MWIFIEX=m +-CONFIG_MWIFIEX_SDIO=m +-CONFIG_MWIFIEX_PCIE=m +-CONFIG_MWIFIEX_USB=m +-CONFIG_CW1200=m +-CONFIG_CW1200_WLAN_SDIO=m +-CONFIG_CW1200_WLAN_SPI=m +-CONFIG_RSI_91X=m +-CONFIG_RSI_DEBUGFS=y +-CONFIG_RSI_SDIO=m +-CONFIG_RSI_USB=m +- +-# +-# Enable WiMAX (Networking options) to see the WiMAX drivers +-# +-CONFIG_WAN=y +-CONFIG_HDLC=m +-CONFIG_HDLC_RAW=m +-CONFIG_HDLC_RAW_ETH=m +-CONFIG_HDLC_CISCO=m +-CONFIG_HDLC_FR=m +-CONFIG_HDLC_PPP=m +- +-# +-# X.25/LAPB support is disabled +-# +-# CONFIG_PCI200SYN is not set +-CONFIG_WANXL=m +-# CONFIG_WANXL_BUILD_FIRMWARE is not set +-CONFIG_PC300TOO=m +-CONFIG_FARSYNC=m +-CONFIG_DSCC4=m +-# CONFIG_DSCC4_PCISYNC is not set +-# CONFIG_DSCC4_PCI_RST is not set +-# CONFIG_DLCI is not set +-# CONFIG_VMXNET3 is not set +-CONFIG_ISDN=y +-CONFIG_ISDN_I4L=m +-# CONFIG_ISDN_PPP is not set +-# CONFIG_ISDN_AUDIO is not set +- +-# +-# ISDN feature submodules +-# +-# CONFIG_ISDN_DIVERSION is not set +- +-# +-# ISDN4Linux hardware drivers +-# +- +-# +-# Passive cards +-# +-# CONFIG_ISDN_DRV_HISAX is not set +- +-# +-# Active cards +-# +-CONFIG_ISDN_CAPI=m +-CONFIG_CAPI_TRACE=y +-# CONFIG_ISDN_CAPI_CAPI20 is not set +-# CONFIG_ISDN_CAPI_CAPIDRV is not set +- +-# +-# CAPI hardware drivers +-# +-# CONFIG_CAPI_AVM is not set +-# CONFIG_CAPI_EICON is not set +-CONFIG_ISDN_DRV_GIGASET=m +-CONFIG_GIGASET_CAPI=y +-# CONFIG_GIGASET_I4L is not set +-# CONFIG_GIGASET_DUMMYLL is not set +-# CONFIG_GIGASET_BASE is not set +-# CONFIG_GIGASET_M105 is not set +-# CONFIG_GIGASET_M101 is not set +-# CONFIG_GIGASET_DEBUG is not set +-CONFIG_HYSDN=m +-CONFIG_HYSDN_CAPI=y +-CONFIG_MISDN=m +-CONFIG_MISDN_DSP=m +-CONFIG_MISDN_L1OIP=m +- +-# +-# mISDN hardware drivers +-# +-CONFIG_MISDN_HFCPCI=m +-CONFIG_MISDN_HFCMULTI=m +-CONFIG_MISDN_HFCUSB=m +-CONFIG_MISDN_AVMFRITZ=m +-CONFIG_MISDN_SPEEDFAX=m +-CONFIG_MISDN_INFINEON=m +-CONFIG_MISDN_W6692=m +-CONFIG_MISDN_NETJET=m +-CONFIG_MISDN_IPAC=m +-CONFIG_MISDN_ISAR=m +-CONFIG_ISDN_HDLC=m +-# CONFIG_NVM is not set +- +-# +-# Input device support +-# +-CONFIG_INPUT=y +-CONFIG_INPUT_LEDS=m +-CONFIG_INPUT_FF_MEMLESS=m +-CONFIG_INPUT_POLLDEV=y +-CONFIG_INPUT_SPARSEKMAP=m +-CONFIG_INPUT_MATRIXKMAP=y +- +-# +-# Userland interfaces +-# +-CONFIG_INPUT_MOUSEDEV=m +-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +-CONFIG_INPUT_JOYDEV=m +-CONFIG_INPUT_EVDEV=y +-CONFIG_INPUT_EVBUG=m +- +-# +-# Input Device Drivers +-# +-CONFIG_INPUT_KEYBOARD=y +-# CONFIG_KEYBOARD_ADP5588 is not set +-# CONFIG_KEYBOARD_ADP5589 is not set +-# CONFIG_KEYBOARD_ATKBD is not set +-# CONFIG_KEYBOARD_QT1070 is not set +-# CONFIG_KEYBOARD_QT2160 is not set +-# CONFIG_KEYBOARD_LKKBD is not set +-CONFIG_KEYBOARD_GPIO=y +-CONFIG_KEYBOARD_GPIO_POLLED=y +-CONFIG_KEYBOARD_TCA6416=m +-CONFIG_KEYBOARD_TCA8418=m +-CONFIG_KEYBOARD_MATRIX=m +-# CONFIG_KEYBOARD_LM8323 is not set +-# CONFIG_KEYBOARD_LM8333 is not set +-# CONFIG_KEYBOARD_MAX7359 is not set +-# CONFIG_KEYBOARD_MCS is not set +-# CONFIG_KEYBOARD_MPR121 is not set +-CONFIG_KEYBOARD_IMX=y +-# CONFIG_KEYBOARD_NEWTON is not set +-# CONFIG_KEYBOARD_OPENCORES is not set +-# CONFIG_KEYBOARD_SAMSUNG is not set +-# CONFIG_KEYBOARD_STOWAWAY is not set +-# CONFIG_KEYBOARD_SUNKBD is not set +-# CONFIG_KEYBOARD_OMAP4 is not set +-CONFIG_KEYBOARD_XTKBD=m +-# CONFIG_KEYBOARD_CAP11XX is not set +-# CONFIG_KEYBOARD_BCM is not set +-CONFIG_INPUT_MOUSE=y +-CONFIG_MOUSE_PS2=m +-CONFIG_MOUSE_PS2_ALPS=y +-CONFIG_MOUSE_PS2_LOGIPS2PP=y +-CONFIG_MOUSE_PS2_SYNAPTICS=y +-CONFIG_MOUSE_PS2_CYPRESS=y +-CONFIG_MOUSE_PS2_TRACKPOINT=y +-CONFIG_MOUSE_PS2_ELANTECH=y +-# CONFIG_MOUSE_PS2_SENTELIC is not set +-# CONFIG_MOUSE_PS2_TOUCHKIT is not set +-CONFIG_MOUSE_PS2_FOCALTECH=y +-CONFIG_MOUSE_SERIAL=m +-CONFIG_MOUSE_APPLETOUCH=m +-CONFIG_MOUSE_BCM5974=m +-CONFIG_MOUSE_CYAPA=m +-CONFIG_MOUSE_ELAN_I2C=m +-CONFIG_MOUSE_ELAN_I2C_I2C=y +-# CONFIG_MOUSE_ELAN_I2C_SMBUS is not set +-CONFIG_MOUSE_VSXXXAA=m +-CONFIG_MOUSE_GPIO=m +-CONFIG_MOUSE_SYNAPTICS_I2C=m +-CONFIG_MOUSE_SYNAPTICS_USB=m +-CONFIG_INPUT_JOYSTICK=y +-CONFIG_JOYSTICK_ANALOG=m +-CONFIG_JOYSTICK_A3D=m +-CONFIG_JOYSTICK_ADI=m +-CONFIG_JOYSTICK_COBRA=m +-CONFIG_JOYSTICK_GF2K=m +-CONFIG_JOYSTICK_GRIP=m +-CONFIG_JOYSTICK_GRIP_MP=m +-CONFIG_JOYSTICK_GUILLEMOT=m +-CONFIG_JOYSTICK_INTERACT=m +-CONFIG_JOYSTICK_SIDEWINDER=m +-CONFIG_JOYSTICK_TMDC=m +-CONFIG_JOYSTICK_IFORCE=m +-CONFIG_JOYSTICK_IFORCE_USB=y +-CONFIG_JOYSTICK_IFORCE_232=y +-CONFIG_JOYSTICK_WARRIOR=m +-CONFIG_JOYSTICK_MAGELLAN=m +-CONFIG_JOYSTICK_SPACEORB=m +-CONFIG_JOYSTICK_SPACEBALL=m +-CONFIG_JOYSTICK_STINGER=m +-CONFIG_JOYSTICK_TWIDJOY=m +-CONFIG_JOYSTICK_ZHENHUA=m +-CONFIG_JOYSTICK_AS5011=m +-CONFIG_JOYSTICK_JOYDUMP=m +-CONFIG_JOYSTICK_XPAD=m +-CONFIG_JOYSTICK_XPAD_FF=y +-CONFIG_JOYSTICK_XPAD_LEDS=y +-# CONFIG_INPUT_TABLET is not set +-CONFIG_INPUT_TOUCHSCREEN=y +-CONFIG_TOUCHSCREEN_PROPERTIES=y +-CONFIG_TOUCHSCREEN_ADS7846=m +-CONFIG_TOUCHSCREEN_AD7877=m +-CONFIG_TOUCHSCREEN_AD7879=m +-CONFIG_TOUCHSCREEN_AD7879_I2C=m +-CONFIG_TOUCHSCREEN_AD7879_SPI=m +-CONFIG_TOUCHSCREEN_AR1021_I2C=m +-CONFIG_TOUCHSCREEN_ATMEL_MXT=m +-CONFIG_TOUCHSCREEN_AUO_PIXCIR=m +-CONFIG_TOUCHSCREEN_BU21013=m +-CONFIG_TOUCHSCREEN_CHIPONE_ICN8318=m +-CONFIG_TOUCHSCREEN_CY8CTMG110=m +-CONFIG_TOUCHSCREEN_CYTTSP_CORE=m +-CONFIG_TOUCHSCREEN_CYTTSP_I2C=m +-CONFIG_TOUCHSCREEN_CYTTSP_SPI=m +-CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m +-CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m +-CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m +-CONFIG_TOUCHSCREEN_DA9052=m +-CONFIG_TOUCHSCREEN_DYNAPRO=m +-CONFIG_TOUCHSCREEN_HAMPSHIRE=m +-CONFIG_TOUCHSCREEN_EETI=m +-CONFIG_TOUCHSCREEN_EGALAX=m +-CONFIG_TOUCHSCREEN_FT6236=m +-CONFIG_TOUCHSCREEN_FUJITSU=m +-CONFIG_TOUCHSCREEN_GOODIX=m +-CONFIG_TOUCHSCREEN_ILI210X=m +-CONFIG_TOUCHSCREEN_GUNZE=m +-CONFIG_TOUCHSCREEN_ELAN=m +-CONFIG_TOUCHSCREEN_ELO=m +-CONFIG_TOUCHSCREEN_WACOM_W8001=m +-CONFIG_TOUCHSCREEN_WACOM_I2C=m +-CONFIG_TOUCHSCREEN_MAX11801=m +-CONFIG_TOUCHSCREEN_MCS5000=m +-CONFIG_TOUCHSCREEN_MMS114=m +-CONFIG_TOUCHSCREEN_MTOUCH=m +-CONFIG_TOUCHSCREEN_IMX6UL_TSC=m +-CONFIG_TOUCHSCREEN_INEXIO=m +-CONFIG_TOUCHSCREEN_MK712=m +-CONFIG_TOUCHSCREEN_PENMOUNT=m +-CONFIG_TOUCHSCREEN_EDT_FT5X06=m +-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +-CONFIG_TOUCHSCREEN_TOUCHWIN=m +-CONFIG_TOUCHSCREEN_PIXCIR=m +-CONFIG_TOUCHSCREEN_WDT87XX_I2C=m +-CONFIG_TOUCHSCREEN_WM97XX=m +-CONFIG_TOUCHSCREEN_WM9705=y +-CONFIG_TOUCHSCREEN_WM9712=y +-CONFIG_TOUCHSCREEN_WM9713=y +-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +-CONFIG_TOUCHSCREEN_MC13783=m +-CONFIG_TOUCHSCREEN_USB_EGALAX=y +-CONFIG_TOUCHSCREEN_USB_PANJIT=y +-CONFIG_TOUCHSCREEN_USB_3M=y +-CONFIG_TOUCHSCREEN_USB_ITM=y +-CONFIG_TOUCHSCREEN_USB_ETURBO=y +-CONFIG_TOUCHSCREEN_USB_GUNZE=y +-CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +-CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +-CONFIG_TOUCHSCREEN_USB_IDEALTEK=y +-CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y +-CONFIG_TOUCHSCREEN_USB_GOTOP=y +-CONFIG_TOUCHSCREEN_USB_JASTEC=y +-CONFIG_TOUCHSCREEN_USB_ELO=y +-CONFIG_TOUCHSCREEN_USB_E2I=y +-CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y +-CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y +-CONFIG_TOUCHSCREEN_USB_NEXIO=y +-CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y +-CONFIG_TOUCHSCREEN_TOUCHIT213=m +-CONFIG_TOUCHSCREEN_TSC_SERIO=m +-CONFIG_TOUCHSCREEN_TSC200X_CORE=m +-CONFIG_TOUCHSCREEN_TSC2004=m +-CONFIG_TOUCHSCREEN_TSC2005=m +-CONFIG_TOUCHSCREEN_TSC2007=m +-CONFIG_TOUCHSCREEN_ST1232=m +-CONFIG_TOUCHSCREEN_SUR40=m +-CONFIG_TOUCHSCREEN_SX8654=m +-CONFIG_TOUCHSCREEN_TPS6507X=m +-CONFIG_TOUCHSCREEN_ZFORCE=m +-CONFIG_TOUCHSCREEN_ROHM_BU21023=m +-CONFIG_INPUT_MISC=y +-CONFIG_INPUT_AD714X=m +-CONFIG_INPUT_AD714X_I2C=m +-CONFIG_INPUT_AD714X_SPI=m +-CONFIG_INPUT_BMA150=m +-CONFIG_INPUT_E3X0_BUTTON=m +-CONFIG_INPUT_MC13783_PWRBUTTON=m +-CONFIG_INPUT_MMA8450=y +-CONFIG_INPUT_MPU3050=m +-CONFIG_INPUT_GP2A=m +-CONFIG_INPUT_GPIO_BEEPER=m +-CONFIG_INPUT_GPIO_TILT_POLLED=m +-CONFIG_INPUT_ATI_REMOTE2=m +-CONFIG_INPUT_KEYSPAN_REMOTE=m +-CONFIG_INPUT_KXTJ9=m +-CONFIG_INPUT_KXTJ9_POLLED_MODE=y +-CONFIG_INPUT_POWERMATE=m +-CONFIG_INPUT_YEALINK=m +-CONFIG_INPUT_CM109=m +-CONFIG_INPUT_REGULATOR_HAPTIC=m +-CONFIG_INPUT_UINPUT=m +-CONFIG_INPUT_PCF8574=m +-CONFIG_INPUT_PWM_BEEPER=m +-CONFIG_INPUT_GPIO_ROTARY_ENCODER=m +-CONFIG_INPUT_DA9052_ONKEY=m +-CONFIG_INPUT_ADXL34X=m +-CONFIG_INPUT_ADXL34X_I2C=m +-CONFIG_INPUT_ADXL34X_SPI=m +-CONFIG_INPUT_IMS_PCU=m +-CONFIG_INPUT_CMA3000=m +-CONFIG_INPUT_CMA3000_I2C=m +-CONFIG_INPUT_SOC_BUTTON_ARRAY=m +-CONFIG_INPUT_DRV260X_HAPTICS=m +-CONFIG_INPUT_DRV2665_HAPTICS=m +-CONFIG_INPUT_DRV2667_HAPTICS=m +- +-# +-# Hardware I/O ports +-# +-CONFIG_SERIO=m +-CONFIG_SERIO_SERPORT=m +-# CONFIG_SERIO_PCIPS2 is not set +-CONFIG_SERIO_LIBPS2=m +-CONFIG_SERIO_RAW=m +-CONFIG_SERIO_ALTERA_PS2=m +-# CONFIG_SERIO_PS2MULT is not set +-# CONFIG_SERIO_ARC_PS2 is not set +-# CONFIG_SERIO_APBPS2 is not set +-# CONFIG_USERIO is not set +-CONFIG_GAMEPORT=m +-# CONFIG_GAMEPORT_NS558 is not set +-# CONFIG_GAMEPORT_L4 is not set +-# CONFIG_GAMEPORT_EMU10K1 is not set +-# CONFIG_GAMEPORT_FM801 is not set +- +-# +-# Character devices +-# +-CONFIG_TTY=y +-CONFIG_VT=y +-CONFIG_CONSOLE_TRANSLATIONS=y +-CONFIG_VT_CONSOLE=y +-CONFIG_VT_CONSOLE_SLEEP=y +-CONFIG_HW_CONSOLE=y +-CONFIG_VT_HW_CONSOLE_BINDING=y +-CONFIG_UNIX98_PTYS=y +-CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +-CONFIG_LEGACY_PTYS=y +-CONFIG_LEGACY_PTY_COUNT=256 +-# CONFIG_SERIAL_NONSTANDARD is not set +-# CONFIG_NOZOMI is not set +-# CONFIG_N_GSM is not set +-# CONFIG_TRACE_SINK is not set +-CONFIG_DEVMEM=y +-# CONFIG_DEVKMEM is not set +- +-# +-# Serial drivers +-# +-CONFIG_SERIAL_EARLYCON=y +-CONFIG_SERIAL_8250=m +-CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y +-CONFIG_SERIAL_8250_DMA=y +-CONFIG_SERIAL_8250_PCI=m +-CONFIG_SERIAL_8250_NR_UARTS=4 +-CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +-# CONFIG_SERIAL_8250_EXTENDED is not set +-CONFIG_SERIAL_8250_DW=m +-# CONFIG_SERIAL_8250_EM is not set +-# CONFIG_SERIAL_8250_RT288X is not set +-# CONFIG_SERIAL_8250_MID is not set +- +-# +-# Non-8250 serial port support +-# +-CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y +-CONFIG_SERIAL_MAX3100=m +-CONFIG_SERIAL_MAX310X=m +-CONFIG_SERIAL_IMX=y +-CONFIG_SERIAL_IMX_CONSOLE=y +-# CONFIG_SERIAL_UARTLITE is not set +-CONFIG_SERIAL_CORE=y +-CONFIG_SERIAL_CORE_CONSOLE=y +-# CONFIG_SERIAL_JSM is not set +-# CONFIG_SERIAL_OF_PLATFORM is not set +-# CONFIG_SERIAL_SCCNXP is not set +-# CONFIG_SERIAL_SC16IS7XX is not set +-CONFIG_SERIAL_BCM63XX=y +-CONFIG_SERIAL_BCM63XX_CONSOLE=y +-# CONFIG_SERIAL_ALTERA_JTAGUART is not set +-# CONFIG_SERIAL_ALTERA_UART is not set +-# CONFIG_SERIAL_IFX6X60 is not set +-# CONFIG_SERIAL_XILINX_PS_UART is not set +-CONFIG_SERIAL_ARC=y +-CONFIG_SERIAL_ARC_CONSOLE=y +-CONFIG_SERIAL_ARC_NR_PORTS=1 +-# CONFIG_SERIAL_RP2 is not set +-CONFIG_SERIAL_FSL_LPUART=y +-CONFIG_SERIAL_FSL_LPUART_CONSOLE=y +-# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set +-# CONFIG_SERIAL_ST_ASC is not set +-# CONFIG_SERIAL_STM32 is not set +-CONFIG_TTY_PRINTK=m +-CONFIG_HVC_DRIVER=y +-CONFIG_HVC_DCC=y +-# CONFIG_IPMI_HANDLER is not set +-CONFIG_HW_RANDOM=y +-CONFIG_HW_RANDOM_TIMERIOMEM=m +-# CONFIG_NVRAM is not set +-# CONFIG_R3964 is not set +-# CONFIG_APPLICOM is not set +-CONFIG_RAW_DRIVER=m +-CONFIG_MAX_RAW_DEVS=256 +-# CONFIG_TCG_TPM is not set +-CONFIG_DEVPORT=y +-# CONFIG_XILLYBUS is not set +- +-# +-# I2C support +-# +-CONFIG_I2C=y +-CONFIG_I2C_BOARDINFO=y +-CONFIG_I2C_COMPAT=y +-CONFIG_I2C_CHARDEV=y +-CONFIG_I2C_MUX=y +- +-# +-# Multiplexer I2C Chip support +-# +-CONFIG_I2C_ARB_GPIO_CHALLENGE=y +-CONFIG_I2C_MUX_GPIO=y +-CONFIG_I2C_MUX_PCA9541=y +-CONFIG_I2C_MUX_PCA954x=y +-CONFIG_I2C_MUX_PINCTRL=y +-# CONFIG_I2C_MUX_REG is not set +-CONFIG_I2C_HELPER_AUTO=y +-CONFIG_I2C_ALGOBIT=y +- +-# +-# I2C Hardware Bus support +-# +- +-# +-# PC SMBus host controller drivers +-# +-# CONFIG_I2C_ALI1535 is not set +-# CONFIG_I2C_ALI1563 is not set +-# CONFIG_I2C_ALI15X3 is not set +-# CONFIG_I2C_AMD756 is not set +-# CONFIG_I2C_AMD8111 is not set +-# CONFIG_I2C_I801 is not set +-# CONFIG_I2C_ISCH is not set +-# CONFIG_I2C_PIIX4 is not set +-# CONFIG_I2C_NFORCE2 is not set +-# CONFIG_I2C_SIS5595 is not set +-# CONFIG_I2C_SIS630 is not set +-# CONFIG_I2C_SIS96X is not set +-# CONFIG_I2C_VIA is not set +-# CONFIG_I2C_VIAPRO is not set +- +-# +-# I2C system bus drivers (mostly embedded / system-on-chip) +-# +-# CONFIG_I2C_CBUS_GPIO is not set +-CONFIG_I2C_DESIGNWARE_CORE=m +-CONFIG_I2C_DESIGNWARE_PLATFORM=m +-# CONFIG_I2C_DESIGNWARE_PCI is not set +-# CONFIG_I2C_EMEV2 is not set +-CONFIG_I2C_GPIO=y +-CONFIG_I2C_IMX=y +-CONFIG_I2C_OCORES=y +-# CONFIG_I2C_PCA_PLATFORM is not set +-# CONFIG_I2C_PXA_PCI is not set +-# CONFIG_I2C_RK3X is not set +-# CONFIG_I2C_SIMTEC is not set +-# CONFIG_I2C_XILINX is not set +- +-# +-# External I2C/SMBus adapter drivers +-# +-# CONFIG_I2C_DIOLAN_U2C is not set +-# CONFIG_I2C_PARPORT_LIGHT is not set +-# CONFIG_I2C_ROBOTFUZZ_OSIF is not set +-# CONFIG_I2C_TAOS_EVM is not set +-# CONFIG_I2C_TINY_USB is not set +- +-# +-# Other I2C/SMBus bus drivers +-# +-# CONFIG_I2C_STUB is not set +-CONFIG_I2C_SLAVE=y +-CONFIG_I2C_SLAVE_EEPROM=m +-# CONFIG_I2C_DEBUG_CORE is not set +-# CONFIG_I2C_DEBUG_ALGO is not set +-# CONFIG_I2C_DEBUG_BUS is not set +-CONFIG_SPI=y +-# CONFIG_SPI_DEBUG is not set +-CONFIG_SPI_MASTER=y +- +-# +-# SPI Master Controller Drivers +-# +-# CONFIG_SPI_ALTERA is not set +-CONFIG_SPI_BITBANG=m +-# CONFIG_SPI_CADENCE is not set +-CONFIG_SPI_GPIO=m +-CONFIG_SPI_IMX=m +-# CONFIG_SPI_FSL_SPI is not set +-# CONFIG_SPI_OC_TINY is not set +-# CONFIG_SPI_PXA2XX is not set +-# CONFIG_SPI_PXA2XX_PCI is not set +-# CONFIG_SPI_ROCKCHIP is not set +-# CONFIG_SPI_SC18IS602 is not set +-# CONFIG_SPI_XCOMM is not set +-# CONFIG_SPI_XILINX is not set +-# CONFIG_SPI_ZYNQMP_GQSPI is not set +-# CONFIG_SPI_DESIGNWARE is not set +- +-# +-# SPI Protocol Masters +-# +-CONFIG_SPI_SPIDEV=y +-# CONFIG_SPI_TLE62X0 is not set +-# CONFIG_SPMI is not set +-# CONFIG_HSI is not set +- +-# +-# PPS support +-# +-CONFIG_PPS=y +-# CONFIG_PPS_DEBUG is not set +-# CONFIG_NTP_PPS is not set +- +-# +-# PPS clients support +-# +-# CONFIG_PPS_CLIENT_KTIMER is not set +-CONFIG_PPS_CLIENT_LDISC=m +-CONFIG_PPS_CLIENT_GPIO=m +- +-# +-# PPS generators support +-# +- +-# +-# PTP clock support +-# +-CONFIG_PTP_1588_CLOCK=y +-CONFIG_PTP_1588_CLOCK_GIANFAR=y +- +-# +-# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +-# +-CONFIG_PINCTRL=y +- +-# +-# Pin controllers +-# +-CONFIG_PINMUX=y +-CONFIG_PINCONF=y +-CONFIG_GENERIC_PINCONF=y +-# CONFIG_DEBUG_PINCTRL is not set +-# CONFIG_PINCTRL_AMD is not set +-CONFIG_PINCTRL_SINGLE=y +-CONFIG_PINCTRL_IMX=y +-CONFIG_PINCTRL_IMX6Q=y +-CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y +-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +-CONFIG_ARCH_REQUIRE_GPIOLIB=y +-CONFIG_GPIOLIB=y +-CONFIG_GPIO_DEVRES=y +-CONFIG_OF_GPIO=y +-CONFIG_GPIOLIB_IRQCHIP=y +-# CONFIG_DEBUG_GPIO is not set +-CONFIG_GPIO_SYSFS=y +-CONFIG_GPIO_GENERIC=y +- +-# +-# Memory mapped GPIO drivers +-# +-CONFIG_GPIO_74XX_MMIO=y +-# CONFIG_GPIO_ALTERA is not set +-# CONFIG_GPIO_DWAPB is not set +-# CONFIG_GPIO_EM is not set +-CONFIG_GPIO_GENERIC_PLATFORM=y +-# CONFIG_GPIO_GRGPIO is not set +-CONFIG_GPIO_MXC=y +-CONFIG_GPIO_SYSCON=y +-# CONFIG_GPIO_VX855 is not set +-# CONFIG_GPIO_XILINX is not set +-# CONFIG_GPIO_ZEVIO is not set +-# CONFIG_GPIO_ZX is not set +- +-# +-# I2C GPIO expanders +-# +-CONFIG_GPIO_ADP5588=m +-CONFIG_GPIO_ADNP=m +-# CONFIG_GPIO_MAX7300 is not set +-# CONFIG_GPIO_MAX732X is not set +-CONFIG_GPIO_PCA953X=y +-CONFIG_GPIO_PCA953X_IRQ=y +-CONFIG_GPIO_PCF857X=m +-CONFIG_GPIO_SX150X=y +- +-# +-# MFD GPIO expanders +-# +-# CONFIG_GPIO_DA9052 is not set +- +-# +-# PCI GPIO expanders +-# +-# CONFIG_GPIO_AMD8111 is not set +-# CONFIG_GPIO_ML_IOH is not set +-# CONFIG_GPIO_RDC321X is not set +- +-# +-# SPI GPIO expanders +-# +-CONFIG_GPIO_74X164=y +-# CONFIG_GPIO_MAX7301 is not set +-CONFIG_GPIO_MC33880=y +- +-# +-# SPI or I2C GPIO expanders +-# +-CONFIG_GPIO_MCP23S08=y +- +-# +-# USB GPIO expanders +-# +-CONFIG_W1=m +-CONFIG_W1_CON=y +- +-# +-# 1-wire Bus Masters +-# +-CONFIG_W1_MASTER_MATROX=m +-CONFIG_W1_MASTER_DS2490=m +-CONFIG_W1_MASTER_DS2482=m +-CONFIG_W1_MASTER_MXC=m +-CONFIG_W1_MASTER_DS1WM=m +-CONFIG_W1_MASTER_GPIO=m +- +-# +-# 1-wire Slaves +-# +-CONFIG_W1_SLAVE_THERM=m +-CONFIG_W1_SLAVE_SMEM=m +-CONFIG_W1_SLAVE_DS2408=m +-CONFIG_W1_SLAVE_DS2408_READBACK=y +-CONFIG_W1_SLAVE_DS2413=m +-CONFIG_W1_SLAVE_DS2406=m +-CONFIG_W1_SLAVE_DS2423=m +-CONFIG_W1_SLAVE_DS2431=m +-CONFIG_W1_SLAVE_DS2433=m +-CONFIG_W1_SLAVE_DS2433_CRC=y +-CONFIG_W1_SLAVE_DS2760=m +-CONFIG_W1_SLAVE_DS2780=m +-CONFIG_W1_SLAVE_DS2781=m +-CONFIG_W1_SLAVE_DS28E04=m +-CONFIG_W1_SLAVE_BQ27000=m +-CONFIG_POWER_SUPPLY=y +-# CONFIG_POWER_SUPPLY_DEBUG is not set +-# CONFIG_PDA_POWER is not set +-# CONFIG_GENERIC_ADC_BATTERY is not set +-CONFIG_TEST_POWER=m +-# CONFIG_BATTERY_DS2760 is not set +-# CONFIG_BATTERY_DS2780 is not set +-# CONFIG_BATTERY_DS2781 is not set +-# CONFIG_BATTERY_DS2782 is not set +-# CONFIG_BATTERY_SBS is not set +-# CONFIG_BATTERY_BQ27XXX is not set +-# CONFIG_BATTERY_DA9052 is not set +-# CONFIG_BATTERY_MAX17040 is not set +-# CONFIG_BATTERY_MAX17042 is not set +-# CONFIG_CHARGER_ISP1704 is not set +-# CONFIG_CHARGER_MAX8903 is not set +-# CONFIG_CHARGER_LP8727 is not set +-CONFIG_CHARGER_GPIO=m +-# CONFIG_CHARGER_MANAGER is not set +-# CONFIG_CHARGER_BQ2415X is not set +-# CONFIG_CHARGER_BQ24190 is not set +-# CONFIG_CHARGER_BQ24257 is not set +-# CONFIG_CHARGER_BQ24735 is not set +-# CONFIG_CHARGER_BQ25890 is not set +-# CONFIG_CHARGER_SMB347 is not set +-# CONFIG_BATTERY_GAUGE_LTC2941 is not set +-# CONFIG_CHARGER_RT9455 is not set +-CONFIG_POWER_RESET=y +-# CONFIG_POWER_RESET_BRCMSTB is not set +-CONFIG_POWER_RESET_GPIO=y +-CONFIG_POWER_RESET_GPIO_RESTART=y +-CONFIG_POWER_RESET_IMX=y +-CONFIG_POWER_RESET_LTC2952=y +-CONFIG_POWER_RESET_RESTART=y +-CONFIG_POWER_RESET_VERSATILE=y +-# CONFIG_POWER_RESET_SNVS is not set +-CONFIG_POWER_RESET_SYSCON=y +-# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set +-CONFIG_POWER_AVS=y +-CONFIG_HWMON=y +-# CONFIG_HWMON_VID is not set +-# CONFIG_HWMON_DEBUG_CHIP is not set +- +-# +-# Native drivers +-# +-# CONFIG_SENSORS_AD7314 is not set +-# CONFIG_SENSORS_AD7414 is not set +-# CONFIG_SENSORS_AD7418 is not set +-# CONFIG_SENSORS_ADM1021 is not set +-# CONFIG_SENSORS_ADM1025 is not set +-# CONFIG_SENSORS_ADM1026 is not set +-# CONFIG_SENSORS_ADM1029 is not set +-# CONFIG_SENSORS_ADM1031 is not set +-# CONFIG_SENSORS_ADM9240 is not set +-# CONFIG_SENSORS_ADT7310 is not set +-# CONFIG_SENSORS_ADT7410 is not set +-# CONFIG_SENSORS_ADT7411 is not set +-# CONFIG_SENSORS_ADT7462 is not set +-# CONFIG_SENSORS_ADT7470 is not set +-# CONFIG_SENSORS_ADT7475 is not set +-# CONFIG_SENSORS_ASC7621 is not set +-# CONFIG_SENSORS_ATXP1 is not set +-# CONFIG_SENSORS_DS620 is not set +-# CONFIG_SENSORS_DS1621 is not set +-# CONFIG_SENSORS_DA9052_ADC is not set +-# CONFIG_SENSORS_I5K_AMB is not set +-# CONFIG_SENSORS_F71805F is not set +-# CONFIG_SENSORS_F71882FG is not set +-# CONFIG_SENSORS_F75375S is not set +-CONFIG_SENSORS_MC13783_ADC=y +-# CONFIG_SENSORS_GL518SM is not set +-# CONFIG_SENSORS_GL520SM is not set +-# CONFIG_SENSORS_G760A is not set +-# CONFIG_SENSORS_G762 is not set +-# CONFIG_SENSORS_GPIO_FAN is not set +-# CONFIG_SENSORS_HIH6130 is not set +-# CONFIG_SENSORS_IIO_HWMON is not set +-# CONFIG_SENSORS_IT87 is not set +-# CONFIG_SENSORS_JC42 is not set +-# CONFIG_SENSORS_POWR1220 is not set +-# CONFIG_SENSORS_LINEAGE is not set +-# CONFIG_SENSORS_LTC2945 is not set +-# CONFIG_SENSORS_LTC4151 is not set +-# CONFIG_SENSORS_LTC4215 is not set +-# CONFIG_SENSORS_LTC4222 is not set +-# CONFIG_SENSORS_LTC4245 is not set +-# CONFIG_SENSORS_LTC4260 is not set +-# CONFIG_SENSORS_LTC4261 is not set +-CONFIG_SENSORS_MAX1111=y +-CONFIG_SENSORS_MAX16065=y +-CONFIG_SENSORS_MAX1619=y +-CONFIG_SENSORS_MAX1668=y +-# CONFIG_SENSORS_MAX197 is not set +-# CONFIG_SENSORS_MAX6639 is not set +-# CONFIG_SENSORS_MAX6642 is not set +-# CONFIG_SENSORS_MAX6650 is not set +-# CONFIG_SENSORS_MAX6697 is not set +-# CONFIG_SENSORS_MAX31790 is not set +-# CONFIG_SENSORS_HTU21 is not set +-# CONFIG_SENSORS_MCP3021 is not set +-# CONFIG_SENSORS_ADCXX is not set +-# CONFIG_SENSORS_LM63 is not set +-# CONFIG_SENSORS_LM70 is not set +-# CONFIG_SENSORS_LM73 is not set +-# CONFIG_SENSORS_LM75 is not set +-# CONFIG_SENSORS_LM77 is not set +-# CONFIG_SENSORS_LM78 is not set +-# CONFIG_SENSORS_LM80 is not set +-# CONFIG_SENSORS_LM83 is not set +-# CONFIG_SENSORS_LM85 is not set +-# CONFIG_SENSORS_LM87 is not set +-# CONFIG_SENSORS_LM90 is not set +-# CONFIG_SENSORS_LM92 is not set +-# CONFIG_SENSORS_LM93 is not set +-# CONFIG_SENSORS_LM95234 is not set +-# CONFIG_SENSORS_LM95241 is not set +-# CONFIG_SENSORS_LM95245 is not set +-# CONFIG_SENSORS_PC87360 is not set +-# CONFIG_SENSORS_PC87427 is not set +-# CONFIG_SENSORS_NTC_THERMISTOR is not set +-# CONFIG_SENSORS_NCT6683 is not set +-# CONFIG_SENSORS_NCT6775 is not set +-# CONFIG_SENSORS_NCT7802 is not set +-# CONFIG_SENSORS_NCT7904 is not set +-# CONFIG_SENSORS_PCF8591 is not set +-# CONFIG_PMBUS is not set +-CONFIG_SENSORS_PWM_FAN=y +-# CONFIG_SENSORS_SHT15 is not set +-# CONFIG_SENSORS_SHT21 is not set +-# CONFIG_SENSORS_SHTC1 is not set +-# CONFIG_SENSORS_SIS5595 is not set +-# CONFIG_SENSORS_DME1737 is not set +-# CONFIG_SENSORS_EMC1403 is not set +-# CONFIG_SENSORS_EMC2103 is not set +-# CONFIG_SENSORS_EMC6W201 is not set +-# CONFIG_SENSORS_SMSC47M1 is not set +-# CONFIG_SENSORS_SMSC47M192 is not set +-# CONFIG_SENSORS_SMSC47B397 is not set +-# CONFIG_SENSORS_SCH56XX_COMMON is not set +-# CONFIG_SENSORS_SCH5627 is not set +-# CONFIG_SENSORS_SCH5636 is not set +-# CONFIG_SENSORS_SMM665 is not set +-# CONFIG_SENSORS_ADC128D818 is not set +-# CONFIG_SENSORS_ADS1015 is not set +-# CONFIG_SENSORS_ADS7828 is not set +-# CONFIG_SENSORS_ADS7871 is not set +-# CONFIG_SENSORS_AMC6821 is not set +-# CONFIG_SENSORS_INA209 is not set +-# CONFIG_SENSORS_INA2XX is not set +-# CONFIG_SENSORS_TC74 is not set +-# CONFIG_SENSORS_THMC50 is not set +-# CONFIG_SENSORS_TMP102 is not set +-# CONFIG_SENSORS_TMP103 is not set +-# CONFIG_SENSORS_TMP401 is not set +-# CONFIG_SENSORS_TMP421 is not set +-# CONFIG_SENSORS_VIA686A is not set +-# CONFIG_SENSORS_VT1211 is not set +-# CONFIG_SENSORS_VT8231 is not set +-# CONFIG_SENSORS_W83781D is not set +-# CONFIG_SENSORS_W83791D is not set +-# CONFIG_SENSORS_W83792D is not set +-# CONFIG_SENSORS_W83793 is not set +-# CONFIG_SENSORS_W83795 is not set +-# CONFIG_SENSORS_W83L785TS is not set +-# CONFIG_SENSORS_W83L786NG is not set +-# CONFIG_SENSORS_W83627HF is not set +-# CONFIG_SENSORS_W83627EHF is not set +-CONFIG_THERMAL=y +-CONFIG_THERMAL_HWMON=y +-CONFIG_THERMAL_OF=y +-# CONFIG_THERMAL_WRITABLE_TRIPS is not set +-CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +-# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +-# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +-# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set +-CONFIG_THERMAL_GOV_FAIR_SHARE=y +-CONFIG_THERMAL_GOV_STEP_WISE=y +-# CONFIG_THERMAL_GOV_BANG_BANG is not set +-CONFIG_THERMAL_GOV_USER_SPACE=y +-# CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set +-CONFIG_CPU_THERMAL=y +-CONFIG_CLOCK_THERMAL=y +-# CONFIG_DEVFREQ_THERMAL is not set +-# CONFIG_THERMAL_EMULATION is not set +-CONFIG_IMX_THERMAL=y +-CONFIG_WATCHDOG=y +-CONFIG_WATCHDOG_CORE=y +-# CONFIG_WATCHDOG_NOWAYOUT is not set +- +-# +-# Watchdog Device Drivers +-# +-CONFIG_SOFT_WATCHDOG=m +-# CONFIG_DA9052_WATCHDOG is not set +-CONFIG_GPIO_WATCHDOG=m +-# CONFIG_XILINX_WATCHDOG is not set +-# CONFIG_CADENCE_WATCHDOG is not set +-# CONFIG_DW_WATCHDOG is not set +-# CONFIG_MAX63XX_WATCHDOG is not set +-CONFIG_IMX2_WDT=y +-# CONFIG_ALIM7101_WDT is not set +-# CONFIG_I6300ESB_WDT is not set +-# CONFIG_BCM7038_WDT is not set +-# CONFIG_MEN_A21_WDT is not set +- +-# +-# PCI-based Watchdog Cards +-# +-# CONFIG_PCIPCWATCHDOG is not set +-# CONFIG_WDTPCI is not set +- +-# +-# USB-based Watchdog Cards +-# +-# CONFIG_USBPCWATCHDOG is not set +-CONFIG_SSB_POSSIBLE=y +- +-# +-# Sonics Silicon Backplane +-# +-CONFIG_SSB=y +-CONFIG_SSB_SPROM=y +-CONFIG_SSB_BLOCKIO=y +-CONFIG_SSB_PCIHOST_POSSIBLE=y +-CONFIG_SSB_PCIHOST=y +-CONFIG_SSB_B43_PCI_BRIDGE=y +-CONFIG_SSB_SDIOHOST_POSSIBLE=y +-CONFIG_SSB_SDIOHOST=y +-# CONFIG_SSB_HOST_SOC is not set +-# CONFIG_SSB_SILENT is not set +-# CONFIG_SSB_DEBUG is not set +-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +-CONFIG_SSB_DRIVER_PCICORE=y +-# CONFIG_SSB_DRIVER_GPIO is not set +-CONFIG_BCMA_POSSIBLE=y +- +-# +-# Broadcom specific AMBA +-# +-CONFIG_BCMA=m +-CONFIG_BCMA_BLOCKIO=y +-CONFIG_BCMA_HOST_PCI_POSSIBLE=y +-# CONFIG_BCMA_HOST_PCI is not set +-# CONFIG_BCMA_HOST_SOC is not set +-# CONFIG_BCMA_DRIVER_PCI is not set +-# CONFIG_BCMA_DRIVER_GMAC_CMN is not set +-# CONFIG_BCMA_DRIVER_GPIO is not set +-# CONFIG_BCMA_DEBUG is not set +- +-# +-# Multifunction device drivers +-# +-CONFIG_MFD_CORE=y +-# CONFIG_MFD_AS3711 is not set +-# CONFIG_MFD_AS3722 is not set +-# CONFIG_PMIC_ADP5520 is not set +-# CONFIG_MFD_AAT2870_CORE is not set +-# CONFIG_MFD_ATMEL_FLEXCOM is not set +-# CONFIG_MFD_ATMEL_HLCDC is not set +-# CONFIG_MFD_BCM590XX is not set +-# CONFIG_MFD_AXP20X is not set +-# CONFIG_MFD_CROS_EC is not set +-# CONFIG_MFD_ASIC3 is not set +-# CONFIG_PMIC_DA903X is not set +-CONFIG_PMIC_DA9052=y +-CONFIG_MFD_DA9052_SPI=y +-CONFIG_MFD_DA9052_I2C=y +-# CONFIG_MFD_DA9055 is not set +-# CONFIG_MFD_DA9062 is not set +-# CONFIG_MFD_DA9063 is not set +-# CONFIG_MFD_DA9150 is not set +-CONFIG_MFD_MXC_HDMI=y +-# CONFIG_MFD_DLN2 is not set +-CONFIG_MFD_MC13XXX=y +-CONFIG_MFD_MC13XXX_SPI=y +-CONFIG_MFD_MC13XXX_I2C=y +-# CONFIG_MFD_HI6421_PMIC is not set +-# CONFIG_HTC_EGPIO is not set +-# CONFIG_HTC_PASIC3 is not set +-# CONFIG_HTC_I2CPLD is not set +-# CONFIG_LPC_ICH is not set +-# CONFIG_LPC_SCH is not set +-# CONFIG_INTEL_SOC_PMIC is not set +-# CONFIG_MFD_JANZ_CMODIO is not set +-# CONFIG_MFD_KEMPLD is not set +-# CONFIG_MFD_88PM800 is not set +-# CONFIG_MFD_88PM805 is not set +-# CONFIG_MFD_88PM860X is not set +-# CONFIG_MFD_MAX14577 is not set +-# CONFIG_MFD_MAX77686 is not set +-# CONFIG_MFD_MAX77693 is not set +-# CONFIG_MFD_MAX77843 is not set +-# CONFIG_MFD_MAX8907 is not set +-# CONFIG_MFD_MAX8925 is not set +-# CONFIG_MFD_MAX8997 is not set +-# CONFIG_MFD_MAX8998 is not set +-# CONFIG_MFD_MT6397 is not set +-# CONFIG_MFD_MENF21BMC is not set +-# CONFIG_EZX_PCAP is not set +-# CONFIG_MFD_VIPERBOARD is not set +-# CONFIG_MFD_RETU is not set +-# CONFIG_MFD_PCF50633 is not set +-# CONFIG_UCB1400_CORE is not set +-# CONFIG_MFD_PM8921_CORE is not set +-# CONFIG_MFD_RDC321X is not set +-# CONFIG_MFD_RTSX_PCI is not set +-# CONFIG_MFD_RT5033 is not set +-# CONFIG_MFD_RTSX_USB is not set +-# CONFIG_MFD_RC5T583 is not set +-# CONFIG_MFD_RK808 is not set +-# CONFIG_MFD_RN5T618 is not set +-# CONFIG_MFD_SEC_CORE is not set +-CONFIG_MFD_SI476X_CORE=y +-# CONFIG_MFD_SM501 is not set +-# CONFIG_MFD_SKY81452 is not set +-# CONFIG_MFD_SMSC is not set +-# CONFIG_ABX500_CORE is not set +-# CONFIG_MFD_STMPE is not set +-CONFIG_MFD_SYSCON=y +-# CONFIG_MFD_TI_AM335X_TSCADC is not set +-# CONFIG_MFD_LP3943 is not set +-# CONFIG_MFD_LP8788 is not set +-# CONFIG_MFD_PALMAS is not set +-# CONFIG_TPS6105X is not set +-# CONFIG_TPS65010 is not set +-# CONFIG_TPS6507X is not set +-# CONFIG_MFD_TPS65090 is not set +-# CONFIG_MFD_TPS65217 is not set +-# CONFIG_MFD_TPS65218 is not set +-# CONFIG_MFD_TPS6586X is not set +-# CONFIG_MFD_TPS65910 is not set +-# CONFIG_MFD_TPS65912 is not set +-# CONFIG_MFD_TPS65912_I2C is not set +-# CONFIG_MFD_TPS65912_SPI is not set +-# CONFIG_MFD_TPS80031 is not set +-# CONFIG_TWL4030_CORE is not set +-# CONFIG_TWL6040_CORE is not set +-CONFIG_MFD_WL1273_CORE=m +-# CONFIG_MFD_LM3533 is not set +-# CONFIG_MFD_TC3589X is not set +-# CONFIG_MFD_TMIO is not set +-# CONFIG_MFD_T7L66XB is not set +-# CONFIG_MFD_TC6387XB is not set +-# CONFIG_MFD_TC6393XB is not set +-# CONFIG_MFD_VX855 is not set +-# CONFIG_MFD_ARIZONA_I2C is not set +-# CONFIG_MFD_ARIZONA_SPI is not set +-# CONFIG_MFD_WM8400 is not set +-# CONFIG_MFD_WM831X_I2C is not set +-# CONFIG_MFD_WM831X_SPI is not set +-# CONFIG_MFD_WM8350_I2C is not set +-# CONFIG_MFD_WM8994 is not set +-# CONFIG_MFD_TDA1997X is not set +-CONFIG_REGULATOR=y +-# CONFIG_REGULATOR_DEBUG is not set +-CONFIG_REGULATOR_FIXED_VOLTAGE=y +-CONFIG_REGULATOR_VIRTUAL_CONSUMER=y +-CONFIG_REGULATOR_USERSPACE_CONSUMER=m +-# CONFIG_REGULATOR_ACT8865 is not set +-# CONFIG_REGULATOR_AD5398 is not set +-CONFIG_REGULATOR_ANATOP=y +-# CONFIG_REGULATOR_DA9052 is not set +-# CONFIG_REGULATOR_DA9210 is not set +-# CONFIG_REGULATOR_DA9211 is not set +-# CONFIG_REGULATOR_FAN53555 is not set +-CONFIG_REGULATOR_GPIO=y +-# CONFIG_REGULATOR_ISL9305 is not set +-# CONFIG_REGULATOR_ISL6271A is not set +-# CONFIG_REGULATOR_LP3971 is not set +-# CONFIG_REGULATOR_LP3972 is not set +-# CONFIG_REGULATOR_LP872X is not set +-# CONFIG_REGULATOR_LP8755 is not set +-# CONFIG_REGULATOR_LTC3589 is not set +-# CONFIG_REGULATOR_LTC3676 is not set +-# CONFIG_REGULATOR_MAX1586 is not set +-# CONFIG_REGULATOR_MAX8649 is not set +-# CONFIG_REGULATOR_MAX8660 is not set +-# CONFIG_REGULATOR_MAX8952 is not set +-# CONFIG_REGULATOR_MAX8973 is not set +-CONFIG_REGULATOR_MC13XXX_CORE=y +-CONFIG_REGULATOR_MC13783=y +-CONFIG_REGULATOR_MC13892=y +-# CONFIG_REGULATOR_MT6311 is not set +-CONFIG_REGULATOR_PFUZE100=y +-CONFIG_REGULATOR_PWM=y +-# CONFIG_REGULATOR_TPS51632 is not set +-# CONFIG_REGULATOR_TPS62360 is not set +-# CONFIG_REGULATOR_TPS65023 is not set +-# CONFIG_REGULATOR_TPS6507X is not set +-# CONFIG_REGULATOR_TPS6524X is not set +-CONFIG_MEDIA_SUPPORT=y +- +-# +-# Multimedia core support +-# +-CONFIG_MEDIA_CAMERA_SUPPORT=y +-CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +-CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +-CONFIG_MEDIA_RADIO_SUPPORT=y +-CONFIG_MEDIA_SDR_SUPPORT=y +-CONFIG_MEDIA_RC_SUPPORT=y +-CONFIG_MEDIA_CONTROLLER=y +-CONFIG_VIDEO_DEV=y +-CONFIG_VIDEO_V4L2_SUBDEV_API=y +-CONFIG_VIDEO_V4L2=y +-# CONFIG_VIDEO_ADV_DEBUG is not set +-# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +-CONFIG_VIDEO_TUNER=m +-CONFIG_V4L2_MEM2MEM_DEV=m +-CONFIG_VIDEO_V4L2_INT_DEVICE=m +-CONFIG_VIDEOBUF_GEN=y +-CONFIG_VIDEOBUF_DMA_SG=m +-CONFIG_VIDEOBUF_VMALLOC=m +-CONFIG_VIDEOBUF_DMA_CONTIG=y +-CONFIG_VIDEOBUF_DVB=m +-CONFIG_VIDEOBUF2_CORE=y +-CONFIG_VIDEOBUF2_MEMOPS=m +-CONFIG_VIDEOBUF2_DMA_CONTIG=m +-CONFIG_VIDEOBUF2_VMALLOC=m +-CONFIG_VIDEOBUF2_DMA_SG=m +-CONFIG_VIDEOBUF2_DVB=m +-CONFIG_DVB_CORE=y +-CONFIG_DVB_NET=y +-CONFIG_TTPCI_EEPROM=m +-CONFIG_DVB_MAX_ADAPTERS=8 +-# CONFIG_DVB_DYNAMIC_MINORS is not set +- +-# +-# Media drivers +-# +-CONFIG_RC_CORE=y +-CONFIG_RC_MAP=m +-CONFIG_RC_DECODERS=y +-CONFIG_LIRC=m +-CONFIG_IR_LIRC_CODEC=m +-CONFIG_IR_NEC_DECODER=m +-CONFIG_IR_RC5_DECODER=m +-CONFIG_IR_RC6_DECODER=y +-CONFIG_IR_JVC_DECODER=m +-CONFIG_IR_SONY_DECODER=m +-CONFIG_IR_SANYO_DECODER=m +-CONFIG_IR_SHARP_DECODER=m +-CONFIG_IR_MCE_KBD_DECODER=m +-CONFIG_IR_XMP_DECODER=m +-CONFIG_RC_DEVICES=y +-CONFIG_RC_ATI_REMOTE=m +-CONFIG_IR_HIX5HD2=m +-CONFIG_IR_IMON=m +-CONFIG_IR_MCEUSB=m +-CONFIG_IR_REDRAT3=m +-CONFIG_IR_STREAMZAP=m +-CONFIG_IR_IGORPLUGUSB=m +-CONFIG_IR_IGUANA=m +-CONFIG_IR_TTUSBIR=m +-CONFIG_RC_LOOPBACK=m +-CONFIG_IR_GPIO_CIR=m +-CONFIG_MEDIA_USB_SUPPORT=y +- +-# +-# Webcam devices +-# +-CONFIG_USB_VIDEO_CLASS=m +-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y +-CONFIG_USB_GSPCA=m +-CONFIG_USB_M5602=m +-CONFIG_USB_STV06XX=m +-CONFIG_USB_GL860=m +-CONFIG_USB_GSPCA_BENQ=m +-CONFIG_USB_GSPCA_CONEX=m +-CONFIG_USB_GSPCA_CPIA1=m +-CONFIG_USB_GSPCA_DTCS033=m +-CONFIG_USB_GSPCA_ETOMS=m +-CONFIG_USB_GSPCA_FINEPIX=m +-CONFIG_USB_GSPCA_JEILINJ=m +-CONFIG_USB_GSPCA_JL2005BCD=m +-CONFIG_USB_GSPCA_KINECT=m +-CONFIG_USB_GSPCA_KONICA=m +-CONFIG_USB_GSPCA_MARS=m +-CONFIG_USB_GSPCA_MR97310A=m +-CONFIG_USB_GSPCA_NW80X=m +-CONFIG_USB_GSPCA_OV519=m +-CONFIG_USB_GSPCA_OV534=m +-CONFIG_USB_GSPCA_OV534_9=m +-CONFIG_USB_GSPCA_PAC207=m +-CONFIG_USB_GSPCA_PAC7302=m +-CONFIG_USB_GSPCA_PAC7311=m +-CONFIG_USB_GSPCA_SE401=m +-CONFIG_USB_GSPCA_SN9C2028=m +-CONFIG_USB_GSPCA_SN9C20X=m +-CONFIG_USB_GSPCA_SONIXB=m +-CONFIG_USB_GSPCA_SONIXJ=m +-CONFIG_USB_GSPCA_SPCA500=m +-CONFIG_USB_GSPCA_SPCA501=m +-CONFIG_USB_GSPCA_SPCA505=m +-CONFIG_USB_GSPCA_SPCA506=m +-CONFIG_USB_GSPCA_SPCA508=m +-CONFIG_USB_GSPCA_SPCA561=m +-CONFIG_USB_GSPCA_SPCA1528=m +-CONFIG_USB_GSPCA_SQ905=m +-CONFIG_USB_GSPCA_SQ905C=m +-CONFIG_USB_GSPCA_SQ930X=m +-CONFIG_USB_GSPCA_STK014=m +-CONFIG_USB_GSPCA_STK1135=m +-CONFIG_USB_GSPCA_STV0680=m +-CONFIG_USB_GSPCA_SUNPLUS=m +-CONFIG_USB_GSPCA_T613=m +-CONFIG_USB_GSPCA_TOPRO=m +-# CONFIG_USB_GSPCA_TOUPTEK is not set +-CONFIG_USB_GSPCA_TV8532=m +-CONFIG_USB_GSPCA_VC032X=m +-CONFIG_USB_GSPCA_VICAM=m +-CONFIG_USB_GSPCA_XIRLINK_CIT=m +-CONFIG_USB_GSPCA_ZC3XX=m +-CONFIG_USB_PWC=m +-# CONFIG_USB_PWC_DEBUG is not set +-CONFIG_USB_PWC_INPUT_EVDEV=y +-CONFIG_VIDEO_CPIA2=m +-CONFIG_USB_ZR364XX=m +-CONFIG_USB_STKWEBCAM=m +-CONFIG_USB_S2255=m +-CONFIG_VIDEO_USBTV=m +- +-# +-# Analog TV USB devices +-# +-CONFIG_VIDEO_PVRUSB2=m +-CONFIG_VIDEO_PVRUSB2_SYSFS=y +-CONFIG_VIDEO_PVRUSB2_DVB=y +-# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +-CONFIG_VIDEO_HDPVR=m +-CONFIG_VIDEO_USBVISION=m +-CONFIG_VIDEO_STK1160_COMMON=m +-CONFIG_VIDEO_STK1160_AC97=y +-CONFIG_VIDEO_STK1160=m +-CONFIG_VIDEO_GO7007=m +-CONFIG_VIDEO_GO7007_USB=m +-CONFIG_VIDEO_GO7007_LOADER=m +-CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m +- +-# +-# Analog/digital TV USB devices +-# +-CONFIG_VIDEO_AU0828=m +-CONFIG_VIDEO_AU0828_V4L2=y +-CONFIG_VIDEO_AU0828_RC=y +-CONFIG_VIDEO_CX231XX=m +-CONFIG_VIDEO_CX231XX_RC=y +-CONFIG_VIDEO_CX231XX_ALSA=m +-CONFIG_VIDEO_CX231XX_DVB=m +-CONFIG_VIDEO_TM6000=m +-CONFIG_VIDEO_TM6000_ALSA=m +-CONFIG_VIDEO_TM6000_DVB=m +- +-# +-# Digital TV USB devices +-# +-CONFIG_DVB_USB=m +-# CONFIG_DVB_USB_DEBUG is not set +-CONFIG_DVB_USB_A800=m +-CONFIG_DVB_USB_DIBUSB_MB=m +-CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y +-CONFIG_DVB_USB_DIBUSB_MC=m +-CONFIG_DVB_USB_DIB0700=m +-CONFIG_DVB_USB_UMT_010=m +-CONFIG_DVB_USB_CXUSB=m +-CONFIG_DVB_USB_M920X=m +-CONFIG_DVB_USB_DIGITV=m +-CONFIG_DVB_USB_VP7045=m +-CONFIG_DVB_USB_VP702X=m +-CONFIG_DVB_USB_GP8PSK=m +-CONFIG_DVB_USB_NOVA_T_USB2=m +-CONFIG_DVB_USB_TTUSB2=m +-CONFIG_DVB_USB_DTT200U=m +-CONFIG_DVB_USB_OPERA1=m +-CONFIG_DVB_USB_AF9005=m +-CONFIG_DVB_USB_AF9005_REMOTE=m +-CONFIG_DVB_USB_PCTV452E=m +-CONFIG_DVB_USB_DW2102=m +-CONFIG_DVB_USB_CINERGY_T2=m +-CONFIG_DVB_USB_DTV5100=m +-CONFIG_DVB_USB_FRIIO=m +-CONFIG_DVB_USB_AZ6027=m +-CONFIG_DVB_USB_TECHNISAT_USB2=m +-CONFIG_DVB_USB_V2=m +-CONFIG_DVB_USB_AF9015=m +-CONFIG_DVB_USB_AF9035=m +-CONFIG_DVB_USB_ANYSEE=m +-CONFIG_DVB_USB_AU6610=m +-CONFIG_DVB_USB_AZ6007=m +-CONFIG_DVB_USB_CE6230=m +-CONFIG_DVB_USB_EC168=m +-CONFIG_DVB_USB_GL861=m +-CONFIG_DVB_USB_LME2510=m +-CONFIG_DVB_USB_MXL111SF=m +-CONFIG_DVB_USB_RTL28XXU=m +-CONFIG_DVB_USB_DVBSKY=m +-CONFIG_DVB_TTUSB_BUDGET=m +-CONFIG_DVB_TTUSB_DEC=m +-CONFIG_SMS_USB_DRV=m +-CONFIG_DVB_B2C2_FLEXCOP_USB=m +-# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set +-CONFIG_DVB_AS102=m +- +-# +-# Webcam, TV (analog/digital) USB devices +-# +-CONFIG_VIDEO_EM28XX=m +-CONFIG_VIDEO_EM28XX_V4L2=m +-CONFIG_VIDEO_EM28XX_ALSA=m +-CONFIG_VIDEO_EM28XX_DVB=m +-CONFIG_VIDEO_EM28XX_RC=m +- +-# +-# Software defined radio USB devices +-# +-CONFIG_USB_AIRSPY=m +-CONFIG_USB_HACKRF=m +-CONFIG_USB_MSI2500=m +-CONFIG_MEDIA_PCI_SUPPORT=y +- +-# +-# Media capture support +-# +-CONFIG_VIDEO_SOLO6X10=m +-CONFIG_VIDEO_TW68=m +- +-# +-# Media capture/analog TV support +-# +-CONFIG_VIDEO_IVTV=m +-CONFIG_VIDEO_IVTV_ALSA=m +-CONFIG_VIDEO_FB_IVTV=m +-CONFIG_VIDEO_HEXIUM_GEMINI=m +-CONFIG_VIDEO_HEXIUM_ORION=m +-CONFIG_VIDEO_MXB=m +-CONFIG_VIDEO_DT3155=m +- +-# +-# Media capture/analog/hybrid TV support +-# +-CONFIG_VIDEO_CX18=m +-CONFIG_VIDEO_CX18_ALSA=m +-CONFIG_VIDEO_CX23885=m +-CONFIG_MEDIA_ALTERA_CI=m +-CONFIG_VIDEO_CX25821=m +-CONFIG_VIDEO_CX25821_ALSA=m +-CONFIG_VIDEO_CX88=m +-CONFIG_VIDEO_CX88_ALSA=m +-CONFIG_VIDEO_CX88_BLACKBIRD=m +-CONFIG_VIDEO_CX88_DVB=m +-CONFIG_VIDEO_CX88_ENABLE_VP3054=y +-CONFIG_VIDEO_CX88_VP3054=m +-CONFIG_VIDEO_CX88_MPEG=m +-CONFIG_VIDEO_BT848=m +-CONFIG_DVB_BT8XX=m +-CONFIG_VIDEO_SAA7134=m +-CONFIG_VIDEO_SAA7134_ALSA=m +-CONFIG_VIDEO_SAA7134_RC=y +-CONFIG_VIDEO_SAA7134_DVB=m +-CONFIG_VIDEO_SAA7134_GO7007=m +-CONFIG_VIDEO_SAA7164=m +- +-# +-# Media digital TV PCI Adapters +-# +-CONFIG_DVB_AV7110_IR=y +-CONFIG_DVB_AV7110=m +-CONFIG_DVB_AV7110_OSD=y +-CONFIG_DVB_BUDGET_CORE=m +-CONFIG_DVB_BUDGET=m +-CONFIG_DVB_BUDGET_CI=m +-CONFIG_DVB_BUDGET_AV=m +-CONFIG_DVB_BUDGET_PATCH=m +-CONFIG_DVB_B2C2_FLEXCOP_PCI=m +-# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set +-CONFIG_DVB_PLUTO2=m +-CONFIG_DVB_DM1105=m +-CONFIG_DVB_PT1=m +-CONFIG_DVB_PT3=m +-CONFIG_MANTIS_CORE=m +-CONFIG_DVB_MANTIS=m +-CONFIG_DVB_HOPPER=m +-CONFIG_DVB_NGENE=m +-CONFIG_DVB_DDBRIDGE=m +-CONFIG_DVB_SMIPCIE=m +-# CONFIG_DVB_NETUP_UNIDVB is not set +-CONFIG_V4L_PLATFORM_DRIVERS=y +-# CONFIG_VIDEO_CAFE_CCIC is not set +-CONFIG_VIDEO_MXC_OUTPUT=y +-CONFIG_VIDEO_MXC_CAPTURE=m +- +-# +-# MXC Camera/V4L2 PRP Features support +-# +-CONFIG_VIDEO_MXC_IPU_CAMERA=y +-# CONFIG_VIDEO_MXC_CSI_CAMERA is not set +-# CONFIG_MXC_TVIN_TDA1997X is not set +-CONFIG_MXC_CAMERA_OV5640=m +-CONFIG_MXC_CAMERA_OV5642=m +-CONFIG_MXC_CAMERA_OV5640_MIPI=m +-CONFIG_MXC_CAMERA_OV5647_MIPI=m +-# CONFIG_MXC_HDMI_CSI2_TC358743 is not set +-# CONFIG_MXC_TVIN_ADV7180 is not set +-CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m +-CONFIG_MXC_IPU_PRP_ENC=m +-CONFIG_MXC_IPU_CSI_ENC=m +-CONFIG_VIDEO_MXC_IPU_OUTPUT=y +-CONFIG_VIDEO_MXC_PXP_V4L2=y +-CONFIG_SOC_CAMERA=y +-CONFIG_SOC_CAMERA_PLATFORM=y +-# CONFIG_VIDEO_XILINX is not set +-CONFIG_V4L_MEM2MEM_DRIVERS=y +-# CONFIG_VIDEO_CODA is not set +-CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m +-CONFIG_VIDEO_SH_VEU=m +-# CONFIG_V4L_TEST_DRIVERS is not set +-# CONFIG_DVB_PLATFORM_DRIVERS is not set +- +-# +-# Supported MMC/SDIO adapters +-# +-CONFIG_SMS_SDIO_DRV=m +-CONFIG_RADIO_ADAPTERS=y +-CONFIG_RADIO_TEA575X=m +-CONFIG_RADIO_SI470X=y +-CONFIG_USB_SI470X=m +-CONFIG_I2C_SI470X=m +-CONFIG_RADIO_SI4713=m +-CONFIG_USB_SI4713=m +-CONFIG_PLATFORM_SI4713=m +-CONFIG_I2C_SI4713=m +-CONFIG_RADIO_SI476X=m +-CONFIG_USB_MR800=m +-CONFIG_USB_DSBR=m +-CONFIG_RADIO_MAXIRADIO=m +-CONFIG_RADIO_SHARK=m +-CONFIG_RADIO_SHARK2=m +-CONFIG_USB_KEENE=m +-CONFIG_USB_RAREMONO=m +-CONFIG_USB_MA901=m +-CONFIG_RADIO_TEA5764=m +-CONFIG_RADIO_SAA7706H=m +-CONFIG_RADIO_TEF6862=m +-CONFIG_RADIO_WL1273=m +- +-# +-# Texas Instruments WL128x FM driver (ST based) +-# +-CONFIG_RADIO_WL128X=m +-CONFIG_MEDIA_COMMON_OPTIONS=y +- +-# +-# common driver options +-# +-CONFIG_VIDEO_CX2341X=m +-CONFIG_VIDEO_TVEEPROM=m +-CONFIG_CYPRESS_FIRMWARE=m +-CONFIG_DVB_B2C2_FLEXCOP=m +-CONFIG_VIDEO_SAA7146=m +-CONFIG_VIDEO_SAA7146_VV=m +-CONFIG_SMS_SIANO_MDTV=m +-CONFIG_SMS_SIANO_RC=y +-# CONFIG_SMS_SIANO_DEBUGFS is not set +- +-# +-# Media ancillary drivers (tuners, sensors, i2c, frontends) +-# +-# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set +-CONFIG_MEDIA_ATTACH=y +-CONFIG_VIDEO_IR_I2C=m +- +-# +-# Encoders, decoders, sensors and other helper chips +-# +- +-# +-# Audio decoders, processors and mixers +-# +-CONFIG_VIDEO_TVAUDIO=m +-CONFIG_VIDEO_TDA7432=m +-CONFIG_VIDEO_TDA9840=m +-CONFIG_VIDEO_TEA6415C=m +-CONFIG_VIDEO_TEA6420=m +-CONFIG_VIDEO_MSP3400=m +-CONFIG_VIDEO_CS5345=m +-CONFIG_VIDEO_CS53L32A=m +-CONFIG_VIDEO_TLV320AIC23B=m +-CONFIG_VIDEO_UDA1342=m +-CONFIG_VIDEO_WM8775=m +-CONFIG_VIDEO_WM8739=m +-CONFIG_VIDEO_VP27SMPX=m +-CONFIG_VIDEO_SONY_BTF_MPX=m +- +-# +-# RDS decoders +-# +-CONFIG_VIDEO_SAA6588=m +- +-# +-# Video decoders +-# +-CONFIG_VIDEO_ADV7180=m +-CONFIG_VIDEO_ADV7183=m +-CONFIG_VIDEO_ADV7604=m +-CONFIG_VIDEO_ADV7842=m +-CONFIG_VIDEO_BT819=m +-CONFIG_VIDEO_BT856=m +-CONFIG_VIDEO_BT866=m +-CONFIG_VIDEO_KS0127=m +-CONFIG_VIDEO_ML86V7667=m +-CONFIG_VIDEO_SAA7110=m +-CONFIG_VIDEO_SAA711X=m +-CONFIG_VIDEO_TC358743=m +-CONFIG_VIDEO_TVP514X=m +-CONFIG_VIDEO_TVP5150=m +-CONFIG_VIDEO_TVP7002=m +-CONFIG_VIDEO_TW2804=m +-CONFIG_VIDEO_TW9903=m +-CONFIG_VIDEO_TW9906=m +-CONFIG_VIDEO_VPX3220=m +- +-# +-# Video and audio decoders +-# +-CONFIG_VIDEO_SAA717X=m +-CONFIG_VIDEO_CX25840=m +- +-# +-# Video encoders +-# +-CONFIG_VIDEO_SAA7127=m +-CONFIG_VIDEO_SAA7185=m +-CONFIG_VIDEO_ADV7170=m +-CONFIG_VIDEO_ADV7175=m +-CONFIG_VIDEO_ADV7343=m +-CONFIG_VIDEO_ADV7393=m +-CONFIG_VIDEO_ADV7511=m +-CONFIG_VIDEO_AD9389B=m +-CONFIG_VIDEO_AK881X=m +-CONFIG_VIDEO_THS8200=m +- +-# +-# Camera sensor devices +-# +-CONFIG_VIDEO_APTINA_PLL=m +-CONFIG_VIDEO_SMIAPP_PLL=m +-CONFIG_VIDEO_OV2659=m +-CONFIG_VIDEO_OV7640=m +-CONFIG_VIDEO_OV7670=m +-CONFIG_VIDEO_OV9650=m +-CONFIG_VIDEO_VS6624=m +-CONFIG_VIDEO_MT9M032=m +-CONFIG_VIDEO_MT9P031=m +-CONFIG_VIDEO_MT9T001=m +-CONFIG_VIDEO_MT9V011=m +-CONFIG_VIDEO_MT9V032=m +-CONFIG_VIDEO_SR030PC30=m +-CONFIG_VIDEO_NOON010PC30=m +-CONFIG_VIDEO_M5MOLS=m +-CONFIG_VIDEO_S5K6AA=m +-CONFIG_VIDEO_S5K6A3=m +-CONFIG_VIDEO_S5K4ECGX=m +-CONFIG_VIDEO_S5K5BAF=m +-CONFIG_VIDEO_SMIAPP=m +-CONFIG_VIDEO_S5C73M3=m +- +-# +-# Flash devices +-# +-CONFIG_VIDEO_ADP1653=m +-CONFIG_VIDEO_AS3645A=m +-CONFIG_VIDEO_LM3560=m +-CONFIG_VIDEO_LM3646=m +- +-# +-# Video improvement chips +-# +-CONFIG_VIDEO_UPD64031A=m +-CONFIG_VIDEO_UPD64083=m +- +-# +-# Audio/Video compression chips +-# +-CONFIG_VIDEO_SAA6752HS=m +- +-# +-# Miscellaneous helper chips +-# +-CONFIG_VIDEO_THS7303=m +-CONFIG_VIDEO_M52790=m +- +-# +-# Sensors used on soc_camera driver +-# +- +-# +-# soc_camera sensor drivers +-# +-CONFIG_SOC_CAMERA_IMX074=m +-CONFIG_SOC_CAMERA_MT9M001=m +-CONFIG_SOC_CAMERA_MT9M111=m +-CONFIG_SOC_CAMERA_MT9T031=m +-CONFIG_SOC_CAMERA_MT9T112=m +-CONFIG_SOC_CAMERA_MT9V022=m +-CONFIG_SOC_CAMERA_OV2640=m +-CONFIG_SOC_CAMERA_OV5642=m +-CONFIG_SOC_CAMERA_OV6650=m +-CONFIG_SOC_CAMERA_OV772X=m +-CONFIG_SOC_CAMERA_OV9640=m +-CONFIG_SOC_CAMERA_OV9740=m +-CONFIG_SOC_CAMERA_RJ54N1=m +-CONFIG_SOC_CAMERA_TW9910=m +-CONFIG_MEDIA_TUNER=y +- +-# +-# Customize TV tuners +-# +-CONFIG_MEDIA_TUNER_SIMPLE=m +-CONFIG_MEDIA_TUNER_TDA8290=m +-CONFIG_MEDIA_TUNER_TDA827X=m +-CONFIG_MEDIA_TUNER_TDA18271=m +-CONFIG_MEDIA_TUNER_TDA9887=m +-CONFIG_MEDIA_TUNER_TEA5761=m +-CONFIG_MEDIA_TUNER_TEA5767=m +-CONFIG_MEDIA_TUNER_MSI001=m +-CONFIG_MEDIA_TUNER_MT20XX=m +-CONFIG_MEDIA_TUNER_MT2060=m +-CONFIG_MEDIA_TUNER_MT2063=m +-CONFIG_MEDIA_TUNER_MT2266=m +-CONFIG_MEDIA_TUNER_MT2131=m +-CONFIG_MEDIA_TUNER_QT1010=m +-CONFIG_MEDIA_TUNER_XC2028=m +-CONFIG_MEDIA_TUNER_XC5000=m +-CONFIG_MEDIA_TUNER_XC4000=m +-CONFIG_MEDIA_TUNER_MXL5005S=m +-CONFIG_MEDIA_TUNER_MXL5007T=m +-CONFIG_MEDIA_TUNER_MC44S803=m +-CONFIG_MEDIA_TUNER_MAX2165=m +-CONFIG_MEDIA_TUNER_TDA18218=m +-CONFIG_MEDIA_TUNER_FC0011=m +-CONFIG_MEDIA_TUNER_FC0012=m +-CONFIG_MEDIA_TUNER_FC0013=m +-CONFIG_MEDIA_TUNER_TDA18212=m +-CONFIG_MEDIA_TUNER_E4000=m +-CONFIG_MEDIA_TUNER_FC2580=m +-CONFIG_MEDIA_TUNER_M88RS6000T=m +-CONFIG_MEDIA_TUNER_TUA9001=m +-CONFIG_MEDIA_TUNER_SI2157=m +-CONFIG_MEDIA_TUNER_IT913X=m +-CONFIG_MEDIA_TUNER_R820T=m +-CONFIG_MEDIA_TUNER_MXL301RF=m +-CONFIG_MEDIA_TUNER_QM1D1C0042=m +- +-# +-# Customise DVB Frontends +-# +- +-# +-# Multistandard (satellite) frontends +-# +-CONFIG_DVB_STB0899=m +-CONFIG_DVB_STB6100=m +-CONFIG_DVB_STV090x=m +-CONFIG_DVB_STV6110x=m +-CONFIG_DVB_M88DS3103=m +- +-# +-# Multistandard (cable + terrestrial) frontends +-# +-CONFIG_DVB_DRXK=m +-CONFIG_DVB_TDA18271C2DD=m +-CONFIG_DVB_SI2165=m +- +-# +-# DVB-S (satellite) frontends +-# +-CONFIG_DVB_CX24110=m +-CONFIG_DVB_CX24123=m +-CONFIG_DVB_MT312=m +-CONFIG_DVB_ZL10036=m +-CONFIG_DVB_ZL10039=m +-CONFIG_DVB_S5H1420=m +-CONFIG_DVB_STV0288=m +-CONFIG_DVB_STB6000=m +-CONFIG_DVB_STV0299=m +-CONFIG_DVB_STV6110=m +-CONFIG_DVB_STV0900=m +-CONFIG_DVB_TDA8083=m +-CONFIG_DVB_TDA10086=m +-CONFIG_DVB_TDA8261=m +-CONFIG_DVB_VES1X93=m +-CONFIG_DVB_TUNER_ITD1000=m +-CONFIG_DVB_TUNER_CX24113=m +-CONFIG_DVB_TDA826X=m +-CONFIG_DVB_TUA6100=m +-CONFIG_DVB_CX24116=m +-CONFIG_DVB_CX24117=m +-CONFIG_DVB_CX24120=m +-CONFIG_DVB_SI21XX=m +-CONFIG_DVB_TS2020=m +-CONFIG_DVB_DS3000=m +-CONFIG_DVB_MB86A16=m +-CONFIG_DVB_TDA10071=m +- +-# +-# DVB-T (terrestrial) frontends +-# +-CONFIG_DVB_SP8870=m +-CONFIG_DVB_SP887X=m +-CONFIG_DVB_CX22700=m +-CONFIG_DVB_CX22702=m +-CONFIG_DVB_S5H1432=m +-CONFIG_DVB_DRXD=m +-CONFIG_DVB_L64781=m +-CONFIG_DVB_TDA1004X=m +-CONFIG_DVB_NXT6000=m +-CONFIG_DVB_MT352=m +-CONFIG_DVB_ZL10353=m +-CONFIG_DVB_DIB3000MB=m +-CONFIG_DVB_DIB3000MC=m +-CONFIG_DVB_DIB7000M=m +-CONFIG_DVB_DIB7000P=m +-CONFIG_DVB_DIB9000=m +-CONFIG_DVB_TDA10048=m +-CONFIG_DVB_AF9013=m +-CONFIG_DVB_EC100=m +-CONFIG_DVB_HD29L2=m +-CONFIG_DVB_STV0367=m +-CONFIG_DVB_CXD2820R=m +-CONFIG_DVB_CXD2841ER=m +-CONFIG_DVB_RTL2830=m +-CONFIG_DVB_RTL2832=m +-CONFIG_DVB_RTL2832_SDR=m +-CONFIG_DVB_SI2168=m +-CONFIG_DVB_AS102_FE=m +- +-# +-# DVB-C (cable) frontends +-# +-CONFIG_DVB_VES1820=m +-CONFIG_DVB_TDA10021=m +-CONFIG_DVB_TDA10023=m +-CONFIG_DVB_STV0297=m +- +-# +-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +-# +-CONFIG_DVB_NXT200X=m +-CONFIG_DVB_OR51211=m +-CONFIG_DVB_OR51132=m +-CONFIG_DVB_BCM3510=m +-CONFIG_DVB_LGDT330X=m +-CONFIG_DVB_LGDT3305=m +-CONFIG_DVB_LGDT3306A=m +-CONFIG_DVB_LG2160=m +-CONFIG_DVB_S5H1409=m +-CONFIG_DVB_AU8522=m +-CONFIG_DVB_AU8522_DTV=m +-CONFIG_DVB_AU8522_V4L=m +-CONFIG_DVB_S5H1411=m +- +-# +-# ISDB-T (terrestrial) frontends +-# +-CONFIG_DVB_S921=m +-CONFIG_DVB_DIB8000=m +-CONFIG_DVB_MB86A20S=m +- +-# +-# ISDB-S (satellite) & ISDB-T (terrestrial) frontends +-# +-CONFIG_DVB_TC90522=m +- +-# +-# Digital terrestrial only tuners/PLL +-# +-CONFIG_DVB_PLL=m +-CONFIG_DVB_TUNER_DIB0070=m +-CONFIG_DVB_TUNER_DIB0090=m +- +-# +-# SEC control devices for DVB-S +-# +-CONFIG_DVB_DRX39XYJ=m +-CONFIG_DVB_LNBH25=m +-CONFIG_DVB_LNBP21=m +-CONFIG_DVB_LNBP22=m +-CONFIG_DVB_ISL6405=m +-CONFIG_DVB_ISL6421=m +-CONFIG_DVB_ISL6423=m +-CONFIG_DVB_A8293=m +-CONFIG_DVB_SP2=m +-CONFIG_DVB_LGS8GL5=m +-CONFIG_DVB_LGS8GXX=m +-CONFIG_DVB_ATBM8830=m +-CONFIG_DVB_TDA665x=m +-CONFIG_DVB_IX2505V=m +-CONFIG_DVB_M88RS2000=m +-CONFIG_DVB_AF9033=m +-CONFIG_DVB_HORUS3A=m +-CONFIG_DVB_ASCOT2E=m +- +-# +-# Tools to develop new frontends +-# +-CONFIG_DVB_DUMMY_FE=m +- +-# +-# Graphics support +-# +-CONFIG_VGA_ARB=y +-CONFIG_VGA_ARB_MAX_GPUS=16 +-# CONFIG_IMX_IPUV3_CORE is not set +-CONFIG_DRM=y +-# CONFIG_DRM_FBDEV_EMULATION is not set +-# CONFIG_DRM_TDFX is not set +-# CONFIG_DRM_R128 is not set +-# CONFIG_DRM_RADEON is not set +-# CONFIG_DRM_AMDGPU is not set +-# CONFIG_DRM_NOUVEAU is not set +-# CONFIG_DRM_MGA is not set +-# CONFIG_DRM_VIA is not set +-# CONFIG_DRM_SAVAGE is not set +-# CONFIG_DRM_VGEM is not set +-# CONFIG_DRM_EXYNOS is not set +-# CONFIG_DRM_UDL is not set +-# CONFIG_DRM_AST is not set +-# CONFIG_DRM_MGAG200 is not set +-# CONFIG_DRM_CIRRUS_QEMU is not set +-# CONFIG_DRM_ARMADA is not set +-# CONFIG_DRM_TILCDC is not set +-# CONFIG_DRM_QXL is not set +-# CONFIG_DRM_BOCHS is not set +-# CONFIG_DRM_FSL_DCU is not set +-CONFIG_DRM_BRIDGE=y +- +-# +-# Display Interface Bridges +-# +-# CONFIG_DRM_NXP_PTN3460 is not set +-# CONFIG_DRM_PARADE_PS8622 is not set +-# CONFIG_DRM_STI is not set +-CONFIG_DRM_VIVANTE=m +- +-# +-# Frame buffer Devices +-# +-CONFIG_FB=y +-CONFIG_FIRMWARE_EDID=y +-CONFIG_FB_CMDLINE=y +-# CONFIG_FB_DDC is not set +-# CONFIG_FB_BOOT_VESA_SUPPORT is not set +-CONFIG_FB_CFB_FILLRECT=y +-CONFIG_FB_CFB_COPYAREA=y +-CONFIG_FB_CFB_IMAGEBLIT=y +-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +-CONFIG_FB_SYS_FILLRECT=m +-CONFIG_FB_SYS_COPYAREA=m +-CONFIG_FB_SYS_IMAGEBLIT=m +-# CONFIG_FB_FOREIGN_ENDIAN is not set +-CONFIG_FB_SYS_FOPS=m +-CONFIG_FB_DEFERRED_IO=y +-# CONFIG_FB_SVGALIB is not set +-# CONFIG_FB_MACMODES is not set +-CONFIG_FB_BACKLIGHT=y +-CONFIG_FB_MODE_HELPERS=y +-# CONFIG_FB_TILEBLITTING is not set +- +-# +-# Frame buffer hardware drivers +-# +-# CONFIG_FB_CIRRUS is not set +-# CONFIG_FB_PM2 is not set +-# CONFIG_FB_IMX is not set +-# CONFIG_FB_CYBER2000 is not set +-# CONFIG_FB_ASILIANT is not set +-# CONFIG_FB_IMSTT is not set +-# CONFIG_FB_UVESA is not set +-# CONFIG_FB_OPENCORES is not set +-# CONFIG_FB_S1D13XXX is not set +-# CONFIG_FB_NVIDIA is not set +-# CONFIG_FB_RIVA is not set +-# CONFIG_FB_I740 is not set +-# CONFIG_FB_MATROX is not set +-# CONFIG_FB_RADEON is not set +-# CONFIG_FB_ATY128 is not set +-# CONFIG_FB_ATY is not set +-# CONFIG_FB_S3 is not set +-# CONFIG_FB_SAVAGE is not set +-# CONFIG_FB_SIS is not set +-# CONFIG_FB_NEOMAGIC is not set +-# CONFIG_FB_KYRO is not set +-# CONFIG_FB_3DFX is not set +-# CONFIG_FB_VOODOO1 is not set +-# CONFIG_FB_VT8623 is not set +-# CONFIG_FB_TRIDENT is not set +-# CONFIG_FB_ARK is not set +-# CONFIG_FB_PM3 is not set +-# CONFIG_FB_CARMINE is not set +-# CONFIG_FB_SMSCUFX is not set +-CONFIG_FB_UDL=m +-# CONFIG_FB_IBM_GXT4500 is not set +-# CONFIG_FB_VIRTUAL is not set +-# CONFIG_FB_METRONOME is not set +-# CONFIG_FB_MB862XX is not set +-# CONFIG_FB_BROADSHEET is not set +-# CONFIG_FB_AUO_K190X is not set +-# CONFIG_FB_MXS is not set +-# CONFIG_FB_SIMPLE is not set +-# CONFIG_FB_SSD1307 is not set +-# CONFIG_FB_SM712 is not set +-CONFIG_FB_MXC=y +-CONFIG_FB_MXC_SYNC_PANEL=y +-# CONFIG_FB_MXC_TVOUT_ADV739X is not set +-CONFIG_FB_MXC_LDB=y +-# CONFIG_FB_MXC_MIPI_DSI is not set +-CONFIG_FB_MXC_HDMI=y +-CONFIG_FB_MXC_DCIC=y +-CONFIG_FB_MXC_EDID=y +-# CONFIG_FB_MXC_EINK_PANEL is not set +-CONFIG_BACKLIGHT_LCD_SUPPORT=y +-CONFIG_LCD_CLASS_DEVICE=m +-# CONFIG_LCD_L4F00242T03 is not set +-# CONFIG_LCD_LMS283GF05 is not set +-# CONFIG_LCD_LTV350QV is not set +-# CONFIG_LCD_ILI922X is not set +-# CONFIG_LCD_ILI9320 is not set +-# CONFIG_LCD_TDO24M is not set +-# CONFIG_LCD_VGG2432A4 is not set +-CONFIG_LCD_PLATFORM=m +-# CONFIG_LCD_S6E63M0 is not set +-# CONFIG_LCD_LD9040 is not set +-# CONFIG_LCD_AMS369FG06 is not set +-# CONFIG_LCD_LMS501KF03 is not set +-# CONFIG_LCD_HX8357 is not set +-CONFIG_BACKLIGHT_CLASS_DEVICE=y +-# CONFIG_BACKLIGHT_GENERIC is not set +-CONFIG_BACKLIGHT_PWM=m +-# CONFIG_BACKLIGHT_DA9052 is not set +-# CONFIG_BACKLIGHT_PM8941_WLED is not set +-# CONFIG_BACKLIGHT_ADP8860 is not set +-# CONFIG_BACKLIGHT_ADP8870 is not set +-# CONFIG_BACKLIGHT_LM3630A is not set +-# CONFIG_BACKLIGHT_LM3639 is not set +-# CONFIG_BACKLIGHT_LP855X is not set +-# CONFIG_BACKLIGHT_GPIO is not set +-# CONFIG_BACKLIGHT_LV5207LP is not set +-# CONFIG_BACKLIGHT_BD6107 is not set +-# CONFIG_VGASTATE is not set +-CONFIG_VIDEOMODE_HELPERS=y +-CONFIG_HDMI=y +- +-# +-# Console display driver support +-# +-CONFIG_DUMMY_CONSOLE=y +-CONFIG_FRAMEBUFFER_CONSOLE=y +-CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +-# CONFIG_LOGO is not set +-CONFIG_SOUND=y +-# CONFIG_SOUND_OSS_CORE is not set +-CONFIG_SND=y +-CONFIG_SND_TIMER=y +-CONFIG_SND_PCM=y +-CONFIG_SND_DMAENGINE_PCM=y +-CONFIG_SND_HWDEP=m +-CONFIG_SND_RAWMIDI=m +-CONFIG_SND_JACK=y +-# CONFIG_SND_SEQUENCER is not set +-# CONFIG_SND_MIXER_OSS is not set +-# CONFIG_SND_PCM_OSS is not set +-CONFIG_SND_PCM_TIMER=y +-CONFIG_SND_HRTIMER=y +-# CONFIG_SND_DYNAMIC_MINORS is not set +-# CONFIG_SND_SUPPORT_OLD_API is not set +-CONFIG_SND_PROC_FS=y +-# CONFIG_SND_VERBOSE_PROCFS is not set +-# CONFIG_SND_VERBOSE_PRINTK is not set +-# CONFIG_SND_DEBUG is not set +-CONFIG_SND_VMASTER=y +-# CONFIG_SND_RAWMIDI_SEQ is not set +-# CONFIG_SND_OPL3_LIB_SEQ is not set +-# CONFIG_SND_OPL4_LIB_SEQ is not set +-# CONFIG_SND_SBAWE_SEQ is not set +-# CONFIG_SND_EMU10K1_SEQ is not set +-CONFIG_SND_MPU401_UART=m +-CONFIG_SND_AC97_CODEC=m +-CONFIG_SND_DRIVERS=y +-CONFIG_SND_DUMMY=m +-CONFIG_SND_ALOOP=m +-CONFIG_SND_MTPAV=m +-CONFIG_SND_SERIAL_U16550=m +-CONFIG_SND_MPU401=m +-CONFIG_SND_AC97_POWER_SAVE=y +-CONFIG_SND_AC97_POWER_SAVE_DEFAULT=1 +-# CONFIG_SND_PCI is not set +- +-# +-# HD-Audio +-# +-CONFIG_SND_HDA_PREALLOC_SIZE=64 +-CONFIG_SND_ARM=y +-CONFIG_SND_SPI=y +-CONFIG_SND_USB=y +-CONFIG_SND_USB_AUDIO=m +-CONFIG_SND_USB_UA101=m +-CONFIG_SND_USB_CAIAQ=m +-CONFIG_SND_USB_CAIAQ_INPUT=y +-CONFIG_SND_USB_6FIRE=m +-CONFIG_SND_USB_HIFACE=m +-CONFIG_SND_BCD2000=m +-CONFIG_SND_USB_LINE6=m +-CONFIG_SND_USB_POD=m +-CONFIG_SND_USB_PODHD=m +-CONFIG_SND_USB_TONEPORT=m +-CONFIG_SND_USB_VARIAX=m +-CONFIG_SND_SOC=y +-CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y +-# CONFIG_SND_ATMEL_SOC is not set +-# CONFIG_SND_DESIGNWARE_I2S is not set +- +-# +-# SoC Audio for Freescale CPUs +-# +- +-# +-# Common SoC Audio options for Freescale CPUs: +-# +-# CONFIG_SND_SOC_FSL_ASRC is not set +-CONFIG_SND_SOC_FSL_SAI=y +-CONFIG_SND_SOC_FSL_SSI=y +-CONFIG_SND_SOC_FSL_SPDIF=y +-CONFIG_SND_SOC_FSL_ESAI=y +-CONFIG_SND_SOC_FSL_HDMI=y +-CONFIG_SND_SOC_FSL_UTILS=y +-CONFIG_SND_SOC_IMX_PCM_DMA=y +-CONFIG_SND_SOC_IMX_HDMI_DMA=y +-CONFIG_SND_SOC_IMX_AUDMUX=y +-CONFIG_SND_IMX_SOC=y +- +-# +-# SoC Audio support for Freescale i.MX boards: +-# +-# CONFIG_SND_SOC_EUKREA_TLV320 is not set +-# CONFIG_SND_SOC_IMX_WM8731 is not set +-# CONFIG_SND_SOC_IMX_WM8962 is not set +-# CONFIG_SND_SOC_IMX_ES8328 is not set +-CONFIG_SND_SOC_IMX_SGTL5000=y +-# CONFIG_SND_SOC_IMX_AC97_VT1613 is not set +-CONFIG_SND_SOC_IMX_SPDIF=y +-# CONFIG_SND_SOC_IMX_MC13783 is not set +-CONFIG_SND_SOC_IMX_HDMI=y +-CONFIG_SND_SOC_FSL_ASOC_CARD=m +-# CONFIG_SND_SOC_IMX_TDA1997X is not set +- +-# +-# Allwinner SoC Audio support +-# +-# CONFIG_SND_SUN4I_CODEC is not set +-# CONFIG_SND_SOC_XTFPGA_I2S is not set +-CONFIG_SND_SOC_I2C_AND_SPI=y +- +-# +-# CODEC drivers +-# +-# CONFIG_SND_SOC_AC97_CODEC is not set +-# CONFIG_SND_SOC_ADAU1701 is not set +-# CONFIG_SND_SOC_AK4104 is not set +-# CONFIG_SND_SOC_AK4554 is not set +-# CONFIG_SND_SOC_AK4613 is not set +-# CONFIG_SND_SOC_AK4642 is not set +-# CONFIG_SND_SOC_AK5386 is not set +-# CONFIG_SND_SOC_ALC5623 is not set +-# CONFIG_SND_SOC_CS35L32 is not set +-# CONFIG_SND_SOC_CS42L51_I2C is not set +-# CONFIG_SND_SOC_CS42L52 is not set +-# CONFIG_SND_SOC_CS42L56 is not set +-# CONFIG_SND_SOC_CS42L73 is not set +-# CONFIG_SND_SOC_CS4265 is not set +-# CONFIG_SND_SOC_CS4270 is not set +-# CONFIG_SND_SOC_CS4271_I2C is not set +-# CONFIG_SND_SOC_CS4271_SPI is not set +-# CONFIG_SND_SOC_CS42XX8_I2C is not set +-# CONFIG_SND_SOC_CS4349 is not set +-CONFIG_SND_SOC_HDMI_CODEC=y +-# CONFIG_SND_SOC_ES8328 is not set +-# CONFIG_SND_SOC_GTM601 is not set +-# CONFIG_SND_SOC_PCM1681 is not set +-# CONFIG_SND_SOC_PCM1792A is not set +-# CONFIG_SND_SOC_PCM512x_I2C is not set +-# CONFIG_SND_SOC_PCM512x_SPI is not set +-# CONFIG_SND_SOC_RT5631 is not set +-# CONFIG_SND_SOC_RT5677_SPI is not set +-CONFIG_SND_SOC_SGTL5000=y +-CONFIG_SND_SOC_SI476X=m +-# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set +-CONFIG_SND_SOC_SPDIF=y +-# CONFIG_SND_SOC_SSM2602_SPI is not set +-# CONFIG_SND_SOC_SSM2602_I2C is not set +-# CONFIG_SND_SOC_SSM4567 is not set +-# CONFIG_SND_SOC_STA32X is not set +-# CONFIG_SND_SOC_STA350 is not set +-# CONFIG_SND_SOC_STI_SAS is not set +-# CONFIG_SND_SOC_TAS2552 is not set +-# CONFIG_SND_SOC_TAS5086 is not set +-# CONFIG_SND_SOC_TAS571X is not set +-# CONFIG_SND_SOC_TFA9879 is not set +-# CONFIG_SND_SOC_TLV320AIC23_I2C is not set +-# CONFIG_SND_SOC_TLV320AIC23_SPI is not set +-# CONFIG_SND_SOC_TLV320AIC31XX is not set +-# CONFIG_SND_SOC_TLV320AIC3X is not set +-# CONFIG_SND_SOC_TS3A227E is not set +-# CONFIG_SND_SOC_WM8510 is not set +-# CONFIG_SND_SOC_WM8523 is not set +-# CONFIG_SND_SOC_WM8580 is not set +-# CONFIG_SND_SOC_WM8711 is not set +-# CONFIG_SND_SOC_WM8728 is not set +-# CONFIG_SND_SOC_WM8731 is not set +-# CONFIG_SND_SOC_WM8737 is not set +-# CONFIG_SND_SOC_WM8741 is not set +-# CONFIG_SND_SOC_WM8750 is not set +-# CONFIG_SND_SOC_WM8753 is not set +-# CONFIG_SND_SOC_WM8770 is not set +-# CONFIG_SND_SOC_WM8776 is not set +-# CONFIG_SND_SOC_WM8804_I2C is not set +-# CONFIG_SND_SOC_WM8804_SPI is not set +-# CONFIG_SND_SOC_WM8903 is not set +-CONFIG_SND_SOC_WM8962=m +-# CONFIG_SND_SOC_WM8978 is not set +-# CONFIG_SND_SOC_TPA6130A2 is not set +-# CONFIG_SND_SIMPLE_CARD is not set +-# CONFIG_SOUND_PRIME is not set +-CONFIG_AC97_BUS=m +- +-# +-# HID support +-# +-CONFIG_HID=y +-CONFIG_HID_BATTERY_STRENGTH=y +-CONFIG_HIDRAW=y +-CONFIG_UHID=m +-CONFIG_HID_GENERIC=y +- +-# +-# Special HID drivers +-# +-CONFIG_HID_A4TECH=m +-CONFIG_HID_ACRUX=m +-CONFIG_HID_ACRUX_FF=y +-CONFIG_HID_APPLE=m +-CONFIG_HID_APPLEIR=m +-CONFIG_HID_AUREAL=m +-CONFIG_HID_BELKIN=m +-CONFIG_HID_BETOP_FF=m +-CONFIG_HID_CHERRY=m +-CONFIG_HID_CHICONY=m +-# CONFIG_HID_CORSAIR is not set +-CONFIG_HID_PRODIKEYS=m +-CONFIG_HID_CP2112=m +-CONFIG_HID_CYPRESS=m +-CONFIG_HID_DRAGONRISE=m +-CONFIG_DRAGONRISE_FF=y +-CONFIG_HID_EMS_FF=m +-CONFIG_HID_ELECOM=m +-CONFIG_HID_ELO=m +-CONFIG_HID_EZKEY=m +-# CONFIG_HID_GEMBIRD is not set +-# CONFIG_HID_GFRM is not set +-CONFIG_HID_HOLTEK=m +-CONFIG_HOLTEK_FF=y +-CONFIG_HID_GT683R=m +-CONFIG_HID_KEYTOUCH=m +-CONFIG_HID_KYE=m +-CONFIG_HID_UCLOGIC=m +-CONFIG_HID_WALTOP=m +-CONFIG_HID_GYRATION=m +-CONFIG_HID_ICADE=m +-CONFIG_HID_TWINHAN=m +-CONFIG_HID_KENSINGTON=m +-CONFIG_HID_LCPOWER=m +-CONFIG_HID_LENOVO=m +-CONFIG_HID_LOGITECH=m +-CONFIG_HID_LOGITECH_DJ=m +-CONFIG_HID_LOGITECH_HIDPP=m +-CONFIG_LOGITECH_FF=y +-CONFIG_LOGIRUMBLEPAD2_FF=y +-CONFIG_LOGIG940_FF=y +-CONFIG_LOGIWHEELS_FF=y +-CONFIG_HID_MAGICMOUSE=m +-CONFIG_HID_MICROSOFT=m +-CONFIG_HID_MONTEREY=m +-CONFIG_HID_MULTITOUCH=m +-CONFIG_HID_NTRIG=m +-CONFIG_HID_ORTEK=m +-CONFIG_HID_PANTHERLORD=m +-CONFIG_PANTHERLORD_FF=y +-CONFIG_HID_PENMOUNT=m +-CONFIG_HID_PETALYNX=m +-CONFIG_HID_PICOLCD=m +-CONFIG_HID_PICOLCD_FB=y +-CONFIG_HID_PICOLCD_BACKLIGHT=y +-CONFIG_HID_PICOLCD_LCD=y +-CONFIG_HID_PICOLCD_LEDS=y +-CONFIG_HID_PICOLCD_CIR=y +-CONFIG_HID_PLANTRONICS=m +-CONFIG_HID_PRIMAX=m +-CONFIG_HID_ROCCAT=m +-CONFIG_HID_SAITEK=m +-CONFIG_HID_SAMSUNG=m +-CONFIG_HID_SONY=m +-CONFIG_SONY_FF=y +-CONFIG_HID_SPEEDLINK=m +-CONFIG_HID_STEELSERIES=m +-CONFIG_HID_SUNPLUS=m +-CONFIG_HID_RMI=m +-CONFIG_HID_GREENASIA=m +-CONFIG_GREENASIA_FF=y +-CONFIG_HID_SMARTJOYPLUS=m +-CONFIG_SMARTJOYPLUS_FF=y +-CONFIG_HID_TIVO=m +-CONFIG_HID_TOPSEED=m +-CONFIG_HID_THINGM=m +-CONFIG_HID_THRUSTMASTER=m +-CONFIG_THRUSTMASTER_FF=y +-CONFIG_HID_WACOM=m +-CONFIG_HID_WIIMOTE=m +-CONFIG_HID_XINMO=m +-CONFIG_HID_ZEROPLUS=m +-CONFIG_ZEROPLUS_FF=y +-CONFIG_HID_ZYDACRON=m +-CONFIG_HID_SENSOR_HUB=m +-CONFIG_HID_SENSOR_CUSTOM_SENSOR=m +- +-# +-# USB HID support +-# +-CONFIG_USB_HID=y +-CONFIG_HID_PID=y +-CONFIG_USB_HIDDEV=y +- +-# +-# I2C HID support +-# +-CONFIG_I2C_HID=m +-CONFIG_USB_OHCI_LITTLE_ENDIAN=y +-CONFIG_USB_SUPPORT=y +-CONFIG_USB_COMMON=y +-CONFIG_USB_ARCH_HAS_HCD=y +-CONFIG_USB=y +-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set +- +-# +-# Miscellaneous USB options +-# +-CONFIG_USB_DEFAULT_PERSIST=y +-# CONFIG_USB_DYNAMIC_MINORS is not set +-CONFIG_USB_OTG=y +-# CONFIG_USB_OTG_WHITELIST is not set +-# CONFIG_USB_OTG_BLACKLIST_HUB is not set +-CONFIG_USB_OTG_FSM=y +-# CONFIG_USB_ULPI_BUS is not set +-# CONFIG_USB_MON is not set +-# CONFIG_USB_WUSB_CBAF is not set +- +-# +-# USB Host Controller Drivers +-# +-# CONFIG_USB_C67X00_HCD is not set +-# CONFIG_USB_XHCI_HCD is not set +-CONFIG_USB_EHCI_HCD=y +-CONFIG_USB_EHCI_ROOT_HUB_TT=y +-CONFIG_USB_EHCI_TT_NEWSCHED=y +-CONFIG_USB_FSL_MPH_DR_OF=m +-CONFIG_USB_EHCI_PCI=y +-CONFIG_USB_EHCI_MXC=y +-CONFIG_USB_EHCI_HCD_PLATFORM=y +-# CONFIG_USB_OXU210HP_HCD is not set +-# CONFIG_USB_ISP116X_HCD is not set +-# CONFIG_USB_ISP1362_HCD is not set +-# CONFIG_USB_FOTG210_HCD is not set +-# CONFIG_USB_MAX3421_HCD is not set +-# CONFIG_USB_OHCI_HCD is not set +-# CONFIG_USB_UHCI_HCD is not set +-# CONFIG_USB_SL811_HCD is not set +-# CONFIG_USB_R8A66597_HCD is not set +-# CONFIG_USB_IMX21_HCD is not set +-# CONFIG_USB_HCD_BCMA is not set +-# CONFIG_USB_HCD_SSB is not set +-# CONFIG_USB_HCD_TEST_MODE is not set +- +-# +-# USB Device Class drivers +-# +-CONFIG_USB_ACM=m +-CONFIG_USB_PRINTER=m +-CONFIG_USB_WDM=m +-# CONFIG_USB_TMC is not set +- +-# +-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +-# +- +-# +-# also be needed; see USB_STORAGE Help for more info +-# +-CONFIG_USB_STORAGE=y +-# CONFIG_USB_STORAGE_DEBUG is not set +-CONFIG_USB_STORAGE_REALTEK=y +-CONFIG_REALTEK_AUTOPM=y +-CONFIG_USB_STORAGE_DATAFAB=y +-CONFIG_USB_STORAGE_FREECOM=y +-CONFIG_USB_STORAGE_ISD200=y +-CONFIG_USB_STORAGE_USBAT=y +-CONFIG_USB_STORAGE_SDDR09=y +-CONFIG_USB_STORAGE_SDDR55=y +-CONFIG_USB_STORAGE_JUMPSHOT=y +-CONFIG_USB_STORAGE_ALAUDA=y +-CONFIG_USB_STORAGE_ONETOUCH=y +-CONFIG_USB_STORAGE_KARMA=m +-CONFIG_USB_STORAGE_CYPRESS_ATACB=y +-CONFIG_USB_STORAGE_ENE_UB6250=y +-CONFIG_USB_UAS=y +- +-# +-# USB Imaging devices +-# +-# CONFIG_USB_MDC800 is not set +-# CONFIG_USB_MICROTEK is not set +-CONFIG_USBIP_CORE=m +-CONFIG_USBIP_VHCI_HCD=m +-CONFIG_USBIP_HOST=m +-# CONFIG_USBIP_DEBUG is not set +-CONFIG_USB_MUSB_HDRC=m +-CONFIG_USB_MUSB_HOST=y +-# CONFIG_USB_MUSB_GADGET is not set +-# CONFIG_USB_MUSB_DUAL_ROLE is not set +- +-# +-# Platform Glue Layer +-# +- +-# +-# MUSB DMA mode +-# +-CONFIG_MUSB_PIO_ONLY=y +-CONFIG_USB_DWC3=m +-# CONFIG_USB_DWC3_HOST is not set +-# CONFIG_USB_DWC3_GADGET is not set +-CONFIG_USB_DWC3_DUAL_ROLE=y +- +-# +-# Platform Glue Driver Support +-# +-CONFIG_USB_DWC3_PCI=m +-CONFIG_USB_DWC2=m +-# CONFIG_USB_DWC2_HOST is not set +- +-# +-# Gadget/Dual-role mode requires USB Gadget support to be enabled +-# +-# CONFIG_USB_DWC2_PERIPHERAL is not set +-CONFIG_USB_DWC2_DUAL_ROLE=y +-CONFIG_USB_DWC2_PCI=m +-# CONFIG_USB_DWC2_DEBUG is not set +-# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set +-CONFIG_USB_CHIPIDEA=y +-CONFIG_USB_CHIPIDEA_OF=y +-CONFIG_USB_CHIPIDEA_PCI=y +-# CONFIG_USB_CHIPIDEA_UDC is not set +-CONFIG_USB_CHIPIDEA_HOST=y +-# CONFIG_USB_CHIPIDEA_DEBUG is not set +-# CONFIG_USB_ISP1760 is not set +- +-# +-# USB port drivers +-# +-CONFIG_USB_SERIAL=y +-CONFIG_USB_SERIAL_CONSOLE=y +-CONFIG_USB_SERIAL_GENERIC=y +-CONFIG_USB_SERIAL_SIMPLE=m +-CONFIG_USB_SERIAL_AIRCABLE=m +-CONFIG_USB_SERIAL_ARK3116=m +-CONFIG_USB_SERIAL_BELKIN=m +-CONFIG_USB_SERIAL_CH341=m +-CONFIG_USB_SERIAL_WHITEHEAT=m +-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +-CONFIG_USB_SERIAL_CP210X=m +-CONFIG_USB_SERIAL_CYPRESS_M8=m +-CONFIG_USB_SERIAL_EMPEG=m +-CONFIG_USB_SERIAL_FTDI_SIO=m +-CONFIG_USB_SERIAL_VISOR=m +-CONFIG_USB_SERIAL_IPAQ=m +-CONFIG_USB_SERIAL_IR=m +-CONFIG_USB_SERIAL_EDGEPORT=m +-CONFIG_USB_SERIAL_EDGEPORT_TI=m +-CONFIG_USB_SERIAL_F81232=m +-CONFIG_USB_SERIAL_GARMIN=m +-CONFIG_USB_SERIAL_IPW=m +-CONFIG_USB_SERIAL_IUU=m +-CONFIG_USB_SERIAL_KEYSPAN_PDA=m +-CONFIG_USB_SERIAL_KEYSPAN=m +-CONFIG_USB_SERIAL_KEYSPAN_MPR=y +-CONFIG_USB_SERIAL_KEYSPAN_USA28=y +-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +-CONFIG_USB_SERIAL_KEYSPAN_USA19=y +-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +-CONFIG_USB_SERIAL_KLSI=m +-CONFIG_USB_SERIAL_KOBIL_SCT=m +-CONFIG_USB_SERIAL_MCT_U232=m +-CONFIG_USB_SERIAL_METRO=m +-CONFIG_USB_SERIAL_MOS7720=m +-CONFIG_USB_SERIAL_MOS7840=m +-CONFIG_USB_SERIAL_MXUPORT=m +-CONFIG_USB_SERIAL_NAVMAN=m +-CONFIG_USB_SERIAL_PL2303=m +-CONFIG_USB_SERIAL_OTI6858=m +-CONFIG_USB_SERIAL_QCAUX=m +-CONFIG_USB_SERIAL_QUALCOMM=m +-CONFIG_USB_SERIAL_SPCP8X5=m +-CONFIG_USB_SERIAL_SAFE=m +-CONFIG_USB_SERIAL_SAFE_PADDED=y +-CONFIG_USB_SERIAL_SIERRAWIRELESS=m +-CONFIG_USB_SERIAL_SYMBOL=m +-CONFIG_USB_SERIAL_TI=m +-CONFIG_USB_SERIAL_CYBERJACK=m +-CONFIG_USB_SERIAL_XIRCOM=m +-CONFIG_USB_SERIAL_WWAN=m +-CONFIG_USB_SERIAL_OPTION=m +-CONFIG_USB_SERIAL_OMNINET=m +-CONFIG_USB_SERIAL_OPTICON=m +-CONFIG_USB_SERIAL_XSENS_MT=m +-CONFIG_USB_SERIAL_WISHBONE=m +-CONFIG_USB_SERIAL_SSU100=m +-CONFIG_USB_SERIAL_QT2=m +-CONFIG_USB_SERIAL_DEBUG=m +- +-# +-# USB Miscellaneous drivers +-# +-CONFIG_USB_EMI62=m +-CONFIG_USB_EMI26=m +-# CONFIG_USB_ADUTUX is not set +-CONFIG_USB_SEVSEG=m +-CONFIG_USB_RIO500=m +-CONFIG_USB_LEGOTOWER=m +-CONFIG_USB_LCD=m +-CONFIG_USB_LED=m +-CONFIG_USB_CYPRESS_CY7C63=m +-CONFIG_USB_CYTHERM=m +-CONFIG_USB_IDMOUSE=m +-# CONFIG_USB_FTDI_ELAN is not set +-CONFIG_USB_APPLEDISPLAY=m +-CONFIG_USB_SISUSBVGA=m +-CONFIG_USB_SISUSBVGA_CON=y +-CONFIG_USB_LD=m +-CONFIG_USB_TRANCEVIBRATOR=m +-CONFIG_USB_IOWARRIOR=m +-# CONFIG_USB_TEST is not set +-# CONFIG_USB_EHSET_TEST_FIXTURE is not set +-CONFIG_USB_ISIGHTFW=m +-# CONFIG_USB_YUREX is not set +-CONFIG_USB_EZUSB_FX2=m +-CONFIG_USB_HSIC_USB3503=m +-# CONFIG_USB_LINK_LAYER_TEST is not set +-# CONFIG_USB_CHAOSKEY is not set +- +-# +-# USB Physical Layer drivers +-# +-CONFIG_USB_PHY=y +-CONFIG_NOP_USB_XCEIV=y +-CONFIG_AM335X_CONTROL_USB=y +-CONFIG_AM335X_PHY_USB=y +-CONFIG_USB_GPIO_VBUS=y +-CONFIG_USB_ISP1301=y +-CONFIG_USB_MXS_PHY=y +-CONFIG_USB_ULPI=y +-CONFIG_USB_ULPI_VIEWPORT=y +-CONFIG_USB_GADGET=y +-# CONFIG_USB_GADGET_DEBUG is not set +-# CONFIG_USB_GADGET_DEBUG_FILES is not set +-# CONFIG_USB_GADGET_DEBUG_FS is not set +-CONFIG_USB_GADGET_VBUS_DRAW=2 +-CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 +- +-# +-# USB Peripheral Controller +-# +-CONFIG_USB_FSL_USB2=m +-# CONFIG_USB_FUSB300 is not set +-# CONFIG_USB_FOTG210_UDC is not set +-# CONFIG_USB_GR_UDC is not set +-# CONFIG_USB_R8A66597 is not set +-# CONFIG_USB_PXA27X is not set +-# CONFIG_USB_MV_UDC is not set +-# CONFIG_USB_MV_U3D is not set +-# CONFIG_USB_M66592 is not set +-# CONFIG_USB_BDC_UDC is not set +-# CONFIG_USB_AMD5536UDC is not set +-# CONFIG_USB_NET2272 is not set +-# CONFIG_USB_NET2280 is not set +-# CONFIG_USB_GOKU is not set +-# CONFIG_USB_EG20T is not set +-# CONFIG_USB_GADGET_XILINX is not set +-# CONFIG_USB_DUMMY_HCD is not set +-CONFIG_USB_LIBCOMPOSITE=m +-CONFIG_USB_F_ACM=m +-CONFIG_USB_F_SS_LB=m +-CONFIG_USB_U_SERIAL=m +-CONFIG_USB_U_ETHER=m +-CONFIG_USB_F_SERIAL=m +-CONFIG_USB_F_OBEX=m +-CONFIG_USB_F_NCM=m +-CONFIG_USB_F_ECM=m +-CONFIG_USB_F_EEM=m +-CONFIG_USB_F_SUBSET=m +-CONFIG_USB_F_RNDIS=m +-CONFIG_USB_F_MASS_STORAGE=m +-CONFIG_USB_F_FS=m +-CONFIG_USB_F_UAC1=m +-CONFIG_USB_F_UAC2=m +-CONFIG_USB_F_UVC=m +-CONFIG_USB_F_MIDI=m +-CONFIG_USB_F_HID=m +-CONFIG_USB_F_PRINTER=m +-CONFIG_USB_CONFIGFS=m +-CONFIG_USB_CONFIGFS_SERIAL=y +-CONFIG_USB_CONFIGFS_ACM=y +-CONFIG_USB_CONFIGFS_OBEX=y +-CONFIG_USB_CONFIGFS_NCM=y +-CONFIG_USB_CONFIGFS_ECM=y +-CONFIG_USB_CONFIGFS_ECM_SUBSET=y +-CONFIG_USB_CONFIGFS_RNDIS=y +-CONFIG_USB_CONFIGFS_EEM=y +-CONFIG_USB_CONFIGFS_MASS_STORAGE=y +-CONFIG_USB_CONFIGFS_F_LB_SS=y +-CONFIG_USB_CONFIGFS_F_FS=y +-CONFIG_USB_CONFIGFS_F_UAC1=y +-CONFIG_USB_CONFIGFS_F_UAC2=y +-CONFIG_USB_CONFIGFS_F_MIDI=y +-CONFIG_USB_CONFIGFS_F_HID=y +-CONFIG_USB_CONFIGFS_F_UVC=y +-CONFIG_USB_CONFIGFS_F_PRINTER=y +-CONFIG_USB_ZERO=m +-# CONFIG_USB_ZERO_HNPTEST is not set +-CONFIG_USB_AUDIO=m +-# CONFIG_GADGET_UAC1 is not set +-CONFIG_USB_ETH=m +-CONFIG_USB_ETH_RNDIS=y +-# CONFIG_USB_ETH_EEM is not set +-CONFIG_USB_G_NCM=m +-CONFIG_USB_GADGETFS=m +-CONFIG_USB_FUNCTIONFS=m +-# CONFIG_USB_FUNCTIONFS_ETH is not set +-# CONFIG_USB_FUNCTIONFS_RNDIS is not set +-CONFIG_USB_FUNCTIONFS_GENERIC=y +-CONFIG_USB_MASS_STORAGE=m +-CONFIG_USB_G_SERIAL=m +-CONFIG_USB_MIDI_GADGET=m +-CONFIG_USB_G_PRINTER=m +-CONFIG_USB_CDC_COMPOSITE=m +-CONFIG_USB_G_ACM_MS=m +-CONFIG_USB_G_MULTI=m +-CONFIG_USB_G_MULTI_RNDIS=y +-# CONFIG_USB_G_MULTI_CDC is not set +-CONFIG_USB_G_HID=m +-# CONFIG_USB_G_DBGP is not set +-CONFIG_USB_G_WEBCAM=m +-CONFIG_USB_LED_TRIG=y +-# CONFIG_UWB is not set +-CONFIG_MMC=y +-# CONFIG_MMC_DEBUG is not set +- +-# +-# MMC/SD/SDIO Card Drivers +-# +-CONFIG_MMC_BLOCK=y +-CONFIG_MMC_BLOCK_MINORS=8 +-CONFIG_MMC_BLOCK_BOUNCE=y +-CONFIG_SDIO_UART=y +-# CONFIG_MMC_TEST is not set +- +-# +-# MMC/SD/SDIO Host Controller Drivers +-# +-CONFIG_MMC_SDHCI=y +-CONFIG_MMC_SDHCI_IO_ACCESSORS=y +-# CONFIG_MMC_SDHCI_PCI is not set +-CONFIG_MMC_SDHCI_PLTFM=y +-CONFIG_MMC_SDHCI_OF_ARASAN=m +-# CONFIG_MMC_SDHCI_OF_AT91 is not set +-# CONFIG_MMC_SDHCI_OF_ESDHC is not set +-CONFIG_MMC_SDHCI_ESDHC_IMX=y +-# CONFIG_MMC_SDHCI_F_SDH30 is not set +-# CONFIG_MMC_MXC is not set +-CONFIG_MMC_TIFM_SD=m +-CONFIG_MMC_CB710=m +-# CONFIG_MMC_VIA_SDMMC is not set +-# CONFIG_MMC_DW is not set +-CONFIG_MMC_VUB300=m +-CONFIG_MMC_USHC=y +-CONFIG_MMC_USDHI6ROL0=m +-CONFIG_MMC_TOSHIBA_PCI=m +-# CONFIG_MMC_MTK is not set +-# CONFIG_MEMSTICK is not set +-CONFIG_NEW_LEDS=y +-CONFIG_LEDS_CLASS=y +-# CONFIG_LEDS_CLASS_FLASH is not set +- +-# +-# LED drivers +-# +-# CONFIG_LEDS_BCM6328 is not set +-# CONFIG_LEDS_BCM6358 is not set +-# CONFIG_LEDS_LM3530 is not set +-# CONFIG_LEDS_LM3642 is not set +-# CONFIG_LEDS_PCA9532 is not set +-CONFIG_LEDS_GPIO=m +-# CONFIG_LEDS_LP3944 is not set +-# CONFIG_LEDS_LP5521 is not set +-# CONFIG_LEDS_LP5523 is not set +-# CONFIG_LEDS_LP5562 is not set +-# CONFIG_LEDS_LP8501 is not set +-# CONFIG_LEDS_LP8860 is not set +-# CONFIG_LEDS_PCA955X is not set +-# CONFIG_LEDS_PCA963X is not set +-# CONFIG_LEDS_DA9052 is not set +-# CONFIG_LEDS_DAC124S085 is not set +-CONFIG_LEDS_PWM=y +-CONFIG_LEDS_REGULATOR=m +-# CONFIG_LEDS_BD2802 is not set +-# CONFIG_LEDS_LT3593 is not set +-# CONFIG_LEDS_MC13783 is not set +-# CONFIG_LEDS_TCA6507 is not set +-# CONFIG_LEDS_TLC591XX is not set +-# CONFIG_LEDS_LM355x is not set +- +-# +-# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) +-# +-# CONFIG_LEDS_BLINKM is not set +-# CONFIG_LEDS_SYSCON is not set +- +-# +-# LED Triggers +-# +-CONFIG_LEDS_TRIGGERS=y +-CONFIG_LEDS_TRIGGER_TIMER=m +-CONFIG_LEDS_TRIGGER_ONESHOT=m +-CONFIG_LEDS_TRIGGER_HEARTBEAT=y +-CONFIG_LEDS_TRIGGER_BACKLIGHT=m +-CONFIG_LEDS_TRIGGER_CPU=y +-CONFIG_LEDS_TRIGGER_GPIO=m +-CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +- +-# +-# iptables trigger is under Netfilter config (LED target) +-# +-CONFIG_LEDS_TRIGGER_TRANSIENT=m +-CONFIG_LEDS_TRIGGER_CAMERA=m +-# CONFIG_ACCESSIBILITY is not set +-# CONFIG_INFINIBAND is not set +-CONFIG_EDAC_ATOMIC_SCRUB=y +-CONFIG_EDAC_SUPPORT=y +-# CONFIG_EDAC is not set +-CONFIG_RTC_LIB=y +-CONFIG_RTC_CLASS=y +-CONFIG_RTC_HCTOSYS=y +-CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +-# CONFIG_RTC_SYSTOHC is not set +-# CONFIG_RTC_DEBUG is not set +- +-# +-# RTC interfaces +-# +-CONFIG_RTC_INTF_SYSFS=y +-CONFIG_RTC_INTF_PROC=y +-CONFIG_RTC_INTF_DEV=y +-CONFIG_RTC_INTF_DEV_UIE_EMUL=y +-# CONFIG_RTC_DRV_TEST is not set +- +-# +-# I2C RTC drivers +-# +-# CONFIG_RTC_DRV_ABB5ZES3 is not set +-# CONFIG_RTC_DRV_ABX80X is not set +-# CONFIG_RTC_DRV_DS1307 is not set +-# CONFIG_RTC_DRV_DS1374 is not set +-# CONFIG_RTC_DRV_DS1672 is not set +-# CONFIG_RTC_DRV_DS3232 is not set +-# CONFIG_RTC_DRV_HYM8563 is not set +-# CONFIG_RTC_DRV_MAX6900 is not set +-# CONFIG_RTC_DRV_RS5C372 is not set +-# CONFIG_RTC_DRV_ISL1208 is not set +-# CONFIG_RTC_DRV_ISL12022 is not set +-# CONFIG_RTC_DRV_ISL12057 is not set +-# CONFIG_RTC_DRV_X1205 is not set +-# CONFIG_RTC_DRV_PCF2127 is not set +-CONFIG_RTC_DRV_PCF8523=y +-# CONFIG_RTC_DRV_PCF8563 is not set +-# CONFIG_RTC_DRV_PCF85063 is not set +-# CONFIG_RTC_DRV_PCF8583 is not set +-# CONFIG_RTC_DRV_M41T80 is not set +-# CONFIG_RTC_DRV_BQ32K is not set +-# CONFIG_RTC_DRV_S35390A is not set +-# CONFIG_RTC_DRV_FM3130 is not set +-# CONFIG_RTC_DRV_RX8581 is not set +-# CONFIG_RTC_DRV_RX8025 is not set +-# CONFIG_RTC_DRV_EM3027 is not set +-# CONFIG_RTC_DRV_RV3029C2 is not set +-# CONFIG_RTC_DRV_RV8803 is not set +- +-# +-# SPI RTC drivers +-# +-# CONFIG_RTC_DRV_M41T93 is not set +-# CONFIG_RTC_DRV_M41T94 is not set +-# CONFIG_RTC_DRV_DS1305 is not set +-# CONFIG_RTC_DRV_DS1343 is not set +-# CONFIG_RTC_DRV_DS1347 is not set +-# CONFIG_RTC_DRV_DS1390 is not set +-# CONFIG_RTC_DRV_MAX6902 is not set +-# CONFIG_RTC_DRV_R9701 is not set +-# CONFIG_RTC_DRV_RS5C348 is not set +-# CONFIG_RTC_DRV_DS3234 is not set +-# CONFIG_RTC_DRV_PCF2123 is not set +-# CONFIG_RTC_DRV_RX4581 is not set +-# CONFIG_RTC_DRV_MCP795 is not set +- +-# +-# Platform RTC drivers +-# +-CONFIG_RTC_DRV_CMOS=y +-# CONFIG_RTC_DRV_DS1286 is not set +-# CONFIG_RTC_DRV_DS1511 is not set +-# CONFIG_RTC_DRV_DS1553 is not set +-# CONFIG_RTC_DRV_DS1685_FAMILY is not set +-# CONFIG_RTC_DRV_DS1742 is not set +-# CONFIG_RTC_DRV_DS2404 is not set +-# CONFIG_RTC_DRV_DA9052 is not set +-# CONFIG_RTC_DRV_STK17TA8 is not set +-# CONFIG_RTC_DRV_M48T86 is not set +-# CONFIG_RTC_DRV_M48T35 is not set +-# CONFIG_RTC_DRV_M48T59 is not set +-# CONFIG_RTC_DRV_MSM6242 is not set +-# CONFIG_RTC_DRV_BQ4802 is not set +-# CONFIG_RTC_DRV_RP5C01 is not set +-# CONFIG_RTC_DRV_V3020 is not set +-# CONFIG_RTC_DRV_ZYNQMP is not set +- +-# +-# on-CPU RTC drivers +-# +-CONFIG_RTC_DRV_IMXDI=y +-CONFIG_RTC_DRV_MC13XXX=y +-CONFIG_RTC_DRV_MXC=y +-CONFIG_RTC_DRV_SNVS=y +- +-# +-# HID Sensor RTC drivers +-# +-# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set +-CONFIG_DMADEVICES=y +-# CONFIG_DMADEVICES_DEBUG is not set +- +-# +-# DMA Devices +-# +-CONFIG_DMA_ENGINE=y +-CONFIG_DMA_VIRTUAL_CHANNELS=m +-CONFIG_DMA_OF=y +-CONFIG_FSL_EDMA=m +-# CONFIG_IMX_DMA is not set +-CONFIG_IMX_SDMA=y +-# CONFIG_INTEL_IDMA64 is not set +-CONFIG_MXS_DMA=y +-# CONFIG_MX3_IPU is not set +-CONFIG_MXC_PXP_V2=y +-CONFIG_MXC_PXP_CLIENT_DEVICE=y +-# CONFIG_NBPFAXI_DMA is not set +-CONFIG_DW_DMAC_CORE=m +-CONFIG_DW_DMAC=m +-CONFIG_DW_DMAC_PCI=m +- +-# +-# DMA Clients +-# +-CONFIG_ASYNC_TX_DMA=y +-# CONFIG_DMATEST is not set +-# CONFIG_AUXDISPLAY is not set +-# CONFIG_UIO is not set +-# CONFIG_VIRT_DRIVERS is not set +- +-# +-# Virtio drivers +-# +-# CONFIG_VIRTIO_PCI is not set +-# CONFIG_VIRTIO_MMIO is not set +- +-# +-# Microsoft Hyper-V guest support +-# +-CONFIG_STAGING=y +-CONFIG_PRISM2_USB=m +-CONFIG_COMEDI=m +-# CONFIG_COMEDI_DEBUG is not set +-CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048 +-CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480 +-# CONFIG_COMEDI_MISC_DRIVERS is not set +-# CONFIG_COMEDI_ISA_DRIVERS is not set +-# CONFIG_COMEDI_PCI_DRIVERS is not set +-# CONFIG_COMEDI_USB_DRIVERS is not set +-# CONFIG_COMEDI_8255_SA is not set +-# CONFIG_COMEDI_KCOMEDILIB is not set +-CONFIG_RTL8192U=m +-CONFIG_RTLLIB=m +-CONFIG_RTLLIB_CRYPTO_CCMP=m +-CONFIG_RTLLIB_CRYPTO_TKIP=m +-CONFIG_RTLLIB_CRYPTO_WEP=m +-CONFIG_RTL8192E=m +-CONFIG_R8712U=m +-CONFIG_R8188EU=m +-CONFIG_88EU_AP_MODE=y +-CONFIG_R8723AU=m +-CONFIG_8723AU_AP_MODE=y +-CONFIG_8723AU_BT_COEXIST=y +-CONFIG_RTS5208=m +-# CONFIG_VT6655 is not set +-# CONFIG_VT6656 is not set +- +-# +-# IIO staging drivers +-# +- +-# +-# Accelerometers +-# +-# CONFIG_ADIS16201 is not set +-# CONFIG_ADIS16203 is not set +-# CONFIG_ADIS16204 is not set +-# CONFIG_ADIS16209 is not set +-# CONFIG_ADIS16220 is not set +-# CONFIG_ADIS16240 is not set +-# CONFIG_LIS3L02DQ is not set +-# CONFIG_SCA3000 is not set +- +-# +-# Analog to digital converters +-# +-# CONFIG_AD7606 is not set +-# CONFIG_AD7780 is not set +-# CONFIG_AD7816 is not set +-# CONFIG_AD7192 is not set +-# CONFIG_AD7280 is not set +- +-# +-# Analog digital bi-direction converters +-# +-# CONFIG_ADT7316 is not set +- +-# +-# Capacitance to digital converters +-# +-# CONFIG_AD7150 is not set +-# CONFIG_AD7152 is not set +-# CONFIG_AD7746 is not set +- +-# +-# Direct Digital Synthesis +-# +-# CONFIG_AD9832 is not set +-# CONFIG_AD9834 is not set +- +-# +-# Digital gyroscope sensors +-# +-# CONFIG_ADIS16060 is not set +- +-# +-# Network Analyzer, Impedance Converters +-# +-# CONFIG_AD5933 is not set +- +-# +-# Light sensors +-# +-# CONFIG_SENSORS_ISL29018 is not set +-# CONFIG_SENSORS_ISL29028 is not set +-# CONFIG_TSL2583 is not set +-# CONFIG_TSL2x7x is not set +- +-# +-# Magnetometer sensors +-# +-# CONFIG_SENSORS_HMC5843_I2C is not set +-# CONFIG_SENSORS_HMC5843_SPI is not set +- +-# +-# Active energy metering IC +-# +-# CONFIG_ADE7753 is not set +-# CONFIG_ADE7754 is not set +-# CONFIG_ADE7758 is not set +-# CONFIG_ADE7759 is not set +-# CONFIG_ADE7854 is not set +- +-# +-# Resolver to digital converters +-# +-# CONFIG_AD2S90 is not set +-# CONFIG_AD2S1200 is not set +-# CONFIG_AD2S1210 is not set +- +-# +-# Triggers - standalone +-# +-CONFIG_IIO_PERIODIC_RTC_TRIGGER=m +-# CONFIG_IIO_SIMPLE_DUMMY is not set +-# CONFIG_FB_SM750 is not set +-# CONFIG_FB_XGI is not set +- +-# +-# Speakup console speech +-# +-CONFIG_SPEAKUP=m +-CONFIG_SPEAKUP_SYNTH_ACNTSA=m +-CONFIG_SPEAKUP_SYNTH_APOLLO=m +-CONFIG_SPEAKUP_SYNTH_AUDPTR=m +-CONFIG_SPEAKUP_SYNTH_BNS=m +-CONFIG_SPEAKUP_SYNTH_DECTLK=m +-CONFIG_SPEAKUP_SYNTH_DECEXT=m +-CONFIG_SPEAKUP_SYNTH_LTLK=m +-CONFIG_SPEAKUP_SYNTH_SOFT=m +-CONFIG_SPEAKUP_SYNTH_SPKOUT=m +-CONFIG_SPEAKUP_SYNTH_TXPRT=m +-CONFIG_SPEAKUP_SYNTH_DUMMY=m +-CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=m +-CONFIG_STAGING_MEDIA=y +-CONFIG_I2C_BCM2048=m +-CONFIG_DVB_CXD2099=m +-CONFIG_DVB_MN88472=m +-CONFIG_DVB_MN88473=m +-CONFIG_LIRC_STAGING=y +-CONFIG_LIRC_BT829=m +-CONFIG_LIRC_IMON=m +-CONFIG_LIRC_SASEM=m +-CONFIG_LIRC_SERIAL=m +-CONFIG_LIRC_SERIAL_TRANSMITTER=y +-CONFIG_LIRC_SIR=m +-CONFIG_LIRC_ZILOG=m +- +-# +-# Android +-# +-# CONFIG_STAGING_BOARD is not set +-CONFIG_WIMAX_GDM72XX=m +-CONFIG_WIMAX_GDM72XX_QOS=y +-CONFIG_WIMAX_GDM72XX_K_MODE=y +-CONFIG_WIMAX_GDM72XX_WIMAX2=y +-CONFIG_WIMAX_GDM72XX_USB=y +-# CONFIG_WIMAX_GDM72XX_SDIO is not set +-CONFIG_WIMAX_GDM72XX_USB_PM=y +-CONFIG_LTE_GDM724X=m +-CONFIG_MTD_SPINAND_MT29F=m +-# CONFIG_MTD_SPINAND_ONDIEECC is not set +-# CONFIG_LUSTRE_FS is not set +-CONFIG_DGNC=m +-CONFIG_DGAP=m +-# CONFIG_GS_FPGABOOT is not set +-# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set +-CONFIG_FB_TFT=m +-CONFIG_FB_TFT_AGM1264K_FL=m +-CONFIG_FB_TFT_BD663474=m +-CONFIG_FB_TFT_HX8340BN=m +-CONFIG_FB_TFT_HX8347D=m +-CONFIG_FB_TFT_HX8353D=m +-CONFIG_FB_TFT_HX8357D=m +-CONFIG_FB_TFT_ILI9163=m +-CONFIG_FB_TFT_ILI9320=m +-CONFIG_FB_TFT_ILI9325=m +-CONFIG_FB_TFT_ILI9340=m +-CONFIG_FB_TFT_ILI9341=m +-CONFIG_FB_TFT_ILI9481=m +-CONFIG_FB_TFT_ILI9486=m +-CONFIG_FB_TFT_PCD8544=m +-CONFIG_FB_TFT_RA8875=m +-CONFIG_FB_TFT_S6D02A1=m +-CONFIG_FB_TFT_S6D1121=m +-CONFIG_FB_TFT_SSD1289=m +-CONFIG_FB_TFT_SSD1306=m +-CONFIG_FB_TFT_SSD1331=m +-CONFIG_FB_TFT_SSD1351=m +-CONFIG_FB_TFT_ST7735R=m +-# CONFIG_FB_TFT_ST7789V is not set +-CONFIG_FB_TFT_TINYLCD=m +-CONFIG_FB_TFT_TLS8204=m +-CONFIG_FB_TFT_UC1611=m +-CONFIG_FB_TFT_UC1701=m +-CONFIG_FB_TFT_UPD161704=m +-CONFIG_FB_TFT_WATTEROTT=m +-CONFIG_FB_FLEX=m +-CONFIG_FB_TFT_FBTFT_DEVICE=m +-# CONFIG_WILC1000_DRIVER is not set +-# CONFIG_MOST is not set +-# CONFIG_CHROME_PLATFORMS is not set +-CONFIG_CLKDEV_LOOKUP=y +-CONFIG_HAVE_CLK_PREPARE=y +-CONFIG_COMMON_CLK=y +- +-# +-# Common Clock Framework +-# +-# CONFIG_COMMON_CLK_SI5351 is not set +-# CONFIG_COMMON_CLK_SI514 is not set +-# CONFIG_COMMON_CLK_SI570 is not set +-# CONFIG_COMMON_CLK_CDCE925 is not set +-# CONFIG_CLK_QORIQ is not set +-# CONFIG_COMMON_CLK_PWM is not set +-# CONFIG_COMMON_CLK_PXA is not set +-# CONFIG_COMMON_CLK_CDCE706 is not set +- +-# +-# Hardware Spinlock drivers +-# +- +-# +-# Clock Source drivers +-# +-CONFIG_CLKSRC_OF=y +-CONFIG_CLKSRC_PROBE=y +-CONFIG_CLKSRC_MMIO=y +-# CONFIG_ARM_TIMER_SP804 is not set +-# CONFIG_ATMEL_PIT is not set +-# CONFIG_SH_TIMER_CMT is not set +-# CONFIG_SH_TIMER_MTU2 is not set +-# CONFIG_SH_TIMER_TMU is not set +-# CONFIG_EM_TIMER_STI is not set +-CONFIG_CLKSRC_IMX_GPT=y +-# CONFIG_MAILBOX is not set +-CONFIG_IOMMU_SUPPORT=y +- +-# +-# Generic IOMMU Pagetable Support +-# +-# CONFIG_IOMMU_IO_PGTABLE_LPAE is not set +-# CONFIG_ARM_SMMU is not set +- +-# +-# Remoteproc drivers +-# +-# CONFIG_STE_MODEM_RPROC is not set +- +-# +-# Rpmsg drivers +-# +- +-# +-# SOC (System On Chip) specific Drivers +-# +-# CONFIG_SOC_BRCMSTB is not set +-# CONFIG_SUNXI_SRAM is not set +-# CONFIG_SOC_TI is not set +-CONFIG_PM_DEVFREQ=y +- +-# +-# DEVFREQ Governors +-# +-CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +-CONFIG_DEVFREQ_GOV_PERFORMANCE=y +-CONFIG_DEVFREQ_GOV_POWERSAVE=y +-CONFIG_DEVFREQ_GOV_USERSPACE=y +- +-# +-# DEVFREQ Drivers +-# +-CONFIG_PM_DEVFREQ_EVENT=y +-CONFIG_EXTCON=y +- +-# +-# Extcon Device Drivers +-# +-CONFIG_EXTCON_ADC_JACK=m +-CONFIG_EXTCON_GPIO=y +-CONFIG_EXTCON_RT8973A=m +-CONFIG_EXTCON_SM5502=m +-CONFIG_EXTCON_USB_GPIO=y +-# CONFIG_MEMORY is not set +-CONFIG_IIO=m +-CONFIG_IIO_BUFFER=y +-# CONFIG_IIO_BUFFER_CB is not set +-CONFIG_IIO_KFIFO_BUF=m +-CONFIG_IIO_TRIGGERED_BUFFER=m +-CONFIG_IIO_TRIGGER=y +-CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +- +-# +-# Accelerometers +-# +-# CONFIG_BMA180 is not set +-# CONFIG_BMC150_ACCEL is not set +-# CONFIG_HID_SENSOR_ACCEL_3D is not set +-# CONFIG_IIO_ST_ACCEL_3AXIS is not set +-# CONFIG_KXSD9 is not set +-# CONFIG_KXCJK1013 is not set +-# CONFIG_MMA8452 is not set +-# CONFIG_MMA9551 is not set +-# CONFIG_MMA9553 is not set +-# CONFIG_MXC4005 is not set +-# CONFIG_STK8312 is not set +-# CONFIG_STK8BA50 is not set +- +-# +-# Analog to digital converters +-# +-# CONFIG_AD7266 is not set +-# CONFIG_AD7291 is not set +-# CONFIG_AD7298 is not set +-# CONFIG_AD7476 is not set +-# CONFIG_AD7791 is not set +-# CONFIG_AD7793 is not set +-# CONFIG_AD7887 is not set +-# CONFIG_AD7923 is not set +-# CONFIG_AD799X is not set +-# CONFIG_CC10001_ADC is not set +-# CONFIG_HI8435 is not set +-# CONFIG_MAX1027 is not set +-# CONFIG_MAX1363 is not set +-# CONFIG_MCP320X is not set +-# CONFIG_MCP3422 is not set +-# CONFIG_NAU7802 is not set +-# CONFIG_TI_ADC081C is not set +-# CONFIG_TI_ADC128S052 is not set +-# CONFIG_VF610_ADC is not set +- +-# +-# Amplifiers +-# +-# CONFIG_AD8366 is not set +- +-# +-# Chemical Sensors +-# +-# CONFIG_VZ89X is not set +- +-# +-# Hid Sensor IIO Common +-# +-CONFIG_HID_SENSOR_IIO_COMMON=m +-CONFIG_HID_SENSOR_IIO_TRIGGER=m +- +-# +-# SSP Sensor Common +-# +-# CONFIG_IIO_SSP_SENSORHUB is not set +- +-# +-# Digital to analog converters +-# +-# CONFIG_AD5064 is not set +-# CONFIG_AD5360 is not set +-# CONFIG_AD5380 is not set +-# CONFIG_AD5421 is not set +-# CONFIG_AD5446 is not set +-# CONFIG_AD5449 is not set +-# CONFIG_AD5504 is not set +-# CONFIG_AD5624R_SPI is not set +-# CONFIG_AD5686 is not set +-# CONFIG_AD5755 is not set +-# CONFIG_AD5764 is not set +-# CONFIG_AD5791 is not set +-# CONFIG_AD7303 is not set +-# CONFIG_M62332 is not set +-# CONFIG_MAX517 is not set +-# CONFIG_MAX5821 is not set +-# CONFIG_MCP4725 is not set +-# CONFIG_MCP4922 is not set +- +-# +-# Frequency Synthesizers DDS/PLL +-# +- +-# +-# Clock Generator/Distribution +-# +-# CONFIG_AD9523 is not set +- +-# +-# Phase-Locked Loop (PLL) frequency synthesizers +-# +-# CONFIG_ADF4350 is not set +- +-# +-# Digital gyroscope sensors +-# +-# CONFIG_ADIS16080 is not set +-# CONFIG_ADIS16130 is not set +-# CONFIG_ADIS16136 is not set +-# CONFIG_ADIS16260 is not set +-# CONFIG_ADXRS450 is not set +-# CONFIG_BMG160 is not set +-CONFIG_HID_SENSOR_GYRO_3D=m +-# CONFIG_IIO_ST_GYRO_3AXIS is not set +-# CONFIG_ITG3200 is not set +- +-# +-# Humidity sensors +-# +-CONFIG_DHT11=m +-# CONFIG_HDC100X is not set +-# CONFIG_HTU21 is not set +-# CONFIG_SI7005 is not set +-# CONFIG_SI7020 is not set +- +-# +-# Inertial measurement units +-# +-# CONFIG_ADIS16400 is not set +-# CONFIG_ADIS16480 is not set +-# CONFIG_KMX61 is not set +-# CONFIG_INV_MPU6050_IIO is not set +- +-# +-# Light sensors +-# +-# CONFIG_ADJD_S311 is not set +-# CONFIG_AL3320A is not set +-# CONFIG_APDS9300 is not set +-# CONFIG_APDS9960 is not set +-# CONFIG_BH1750 is not set +-# CONFIG_CM32181 is not set +-# CONFIG_CM3232 is not set +-# CONFIG_CM3323 is not set +-# CONFIG_CM36651 is not set +-# CONFIG_GP2AP020A00F is not set +-# CONFIG_ISL29125 is not set +-# CONFIG_HID_SENSOR_ALS is not set +-# CONFIG_HID_SENSOR_PROX is not set +-# CONFIG_JSA1212 is not set +-# CONFIG_RPR0521 is not set +-# CONFIG_LTR501 is not set +-# CONFIG_OPT3001 is not set +-# CONFIG_PA12203001 is not set +-# CONFIG_STK3310 is not set +-# CONFIG_TCS3414 is not set +-# CONFIG_TCS3472 is not set +-# CONFIG_SENSORS_TSL2563 is not set +-# CONFIG_TSL4531 is not set +-# CONFIG_US5182D is not set +-# CONFIG_VCNL4000 is not set +- +-# +-# Magnetometer sensors +-# +-# CONFIG_AK8975 is not set +-# CONFIG_AK09911 is not set +-# CONFIG_BMC150_MAGN is not set +-# CONFIG_MAG3110 is not set +-# CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set +-# CONFIG_MMC35240 is not set +-# CONFIG_IIO_ST_MAGN_3AXIS is not set +- +-# +-# Inclinometer sensors +-# +-# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set +-# CONFIG_HID_SENSOR_DEVICE_ROTATION is not set +- +-# +-# Triggers - standalone +-# +-CONFIG_IIO_INTERRUPT_TRIGGER=m +-CONFIG_IIO_SYSFS_TRIGGER=m +- +-# +-# Digital potentiometers +-# +-# CONFIG_MCP4531 is not set +- +-# +-# Pressure sensors +-# +-# CONFIG_BMP280 is not set +-# CONFIG_HID_SENSOR_PRESS is not set +-# CONFIG_MPL115 is not set +-# CONFIG_MPL3115 is not set +-# CONFIG_MS5611 is not set +-# CONFIG_MS5637 is not set +-# CONFIG_IIO_ST_PRESS is not set +-# CONFIG_T5403 is not set +- +-# +-# Lightning sensors +-# +-# CONFIG_AS3935 is not set +- +-# +-# Proximity sensors +-# +-# CONFIG_LIDAR_LITE_V2 is not set +-# CONFIG_SX9500 is not set +- +-# +-# Temperature sensors +-# +-# CONFIG_MLX90614 is not set +-# CONFIG_TMP006 is not set +-# CONFIG_TSYS01 is not set +-# CONFIG_TSYS02D is not set +-# CONFIG_NTB is not set +-# CONFIG_VME_BUS is not set +-CONFIG_PWM=y +-CONFIG_PWM_SYSFS=y +-CONFIG_PWM_FSL_FTM=y +-CONFIG_PWM_IMX=y +-CONFIG_PWM_PCA9685=y +-CONFIG_IRQCHIP=y +-CONFIG_ARM_GIC=y +-# CONFIG_IPACK_BUS is not set +-CONFIG_ARCH_HAS_RESET_CONTROLLER=y +-CONFIG_RESET_CONTROLLER=y +-# CONFIG_FMC is not set +- +-# +-# PHY Subsystem +-# +-CONFIG_GENERIC_PHY=y +-# CONFIG_PHY_PXA_28NM_HSIC is not set +-# CONFIG_PHY_PXA_28NM_USB2 is not set +-# CONFIG_BCM_KONA_USB2_PHY is not set +-# CONFIG_PHY_SAMSUNG_USB2 is not set +-CONFIG_POWERCAP=y +-# CONFIG_MCB is not set +- +-# +-# Performance monitor support +-# +-CONFIG_ARM_PMU=y +-CONFIG_RAS=y +-# CONFIG_THUNDERBOLT is not set +- +-# +-# Android +-# +-# CONFIG_ANDROID is not set +-CONFIG_NVMEM=y +-CONFIG_NVMEM_IMX_OCOTP=m +-# CONFIG_STM is not set +-# CONFIG_STM_DUMMY is not set +-# CONFIG_STM_SOURCE_CONSOLE is not set +-# CONFIG_INTEL_TH is not set +- +-# +-# FPGA Configuration Support +-# +-# CONFIG_FPGA is not set +- +-# +-# MXC support drivers +-# +-CONFIG_MXC_IPU=y +- +-# +-# Vivante GPU support +-# +-CONFIG_MXC_GPU_VIV=y +-CONFIG_MXC_IPU_V3_FSL=y +- +-# +-# MXC VPU(Video Processing Unit) support +-# +-CONFIG_MXC_VPU=y +-# CONFIG_MXC_VPU_DEBUG is not set +-# CONFIG_MX6_VPU_352M is not set +- +-# +-# MXC HDMI CEC (Consumer Electronics Control) support +-# +-CONFIG_MXC_HDMI_CEC=y +- +-# +-# MXC MIPI Support +-# +-CONFIG_MXC_MIPI_CSI2=y +- +-# +-# MXC Media Local Bus Driver +-# +-CONFIG_MXC_MLB=y +-CONFIG_MXC_MLB150=m +- +-# +-# Firmware Drivers +-# +-CONFIG_FIRMWARE_MEMMAP=y +- +-# +-# File systems +-# +-CONFIG_DCACHE_WORD_ACCESS=y +-# CONFIG_EXT2_FS is not set +-# CONFIG_EXT3_FS is not set +-CONFIG_EXT4_FS=y +-CONFIG_EXT4_USE_FOR_EXT2=y +-CONFIG_EXT4_FS_POSIX_ACL=y +-CONFIG_EXT4_FS_SECURITY=y +-CONFIG_EXT4_ENCRYPTION=y +-CONFIG_EXT4_FS_ENCRYPTION=y +-# CONFIG_EXT4_DEBUG is not set +-CONFIG_JBD2=y +-# CONFIG_JBD2_DEBUG is not set +-CONFIG_FS_MBCACHE=y +-CONFIG_REISERFS_FS=m +-# CONFIG_REISERFS_CHECK is not set +-# CONFIG_REISERFS_PROC_INFO is not set +-CONFIG_REISERFS_FS_XATTR=y +-CONFIG_REISERFS_FS_POSIX_ACL=y +-# CONFIG_REISERFS_FS_SECURITY is not set +-CONFIG_JFS_FS=m +-CONFIG_JFS_POSIX_ACL=y +-CONFIG_JFS_SECURITY=y +-# CONFIG_JFS_DEBUG is not set +-# CONFIG_JFS_STATISTICS is not set +-CONFIG_XFS_FS=m +-CONFIG_XFS_QUOTA=y +-CONFIG_XFS_POSIX_ACL=y +-# CONFIG_XFS_RT is not set +-# CONFIG_XFS_WARN is not set +-# CONFIG_XFS_DEBUG is not set +-# CONFIG_GFS2_FS is not set +-# CONFIG_OCFS2_FS is not set +-CONFIG_BTRFS_FS=y +-CONFIG_BTRFS_FS_POSIX_ACL=y +-# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set +-# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set +-# CONFIG_BTRFS_DEBUG is not set +-# CONFIG_BTRFS_ASSERT is not set +-# CONFIG_NILFS2_FS is not set +-CONFIG_F2FS_FS=m +-CONFIG_F2FS_STAT_FS=y +-CONFIG_F2FS_FS_XATTR=y +-CONFIG_F2FS_FS_POSIX_ACL=y +-# CONFIG_F2FS_FS_SECURITY is not set +-# CONFIG_F2FS_CHECK_FS is not set +-# CONFIG_F2FS_FS_ENCRYPTION is not set +-# CONFIG_F2FS_IO_TRACE is not set +-CONFIG_FS_POSIX_ACL=y +-CONFIG_EXPORTFS=y +-CONFIG_FILE_LOCKING=y +-CONFIG_FSNOTIFY=y +-CONFIG_DNOTIFY=y +-CONFIG_INOTIFY_USER=y +-CONFIG_FANOTIFY=y +-CONFIG_QUOTA=y +-# CONFIG_QUOTA_NETLINK_INTERFACE is not set +-CONFIG_PRINT_QUOTA_WARNING=y +-# CONFIG_QUOTA_DEBUG is not set +-CONFIG_QUOTA_TREE=m +-CONFIG_QFMT_V1=m +-CONFIG_QFMT_V2=m +-CONFIG_QUOTACTL=y +-CONFIG_AUTOFS4_FS=y +-CONFIG_FUSE_FS=y +-CONFIG_CUSE=y +-CONFIG_OVERLAY_FS=y +- +-# +-# Caches +-# +-CONFIG_FSCACHE=m +-# CONFIG_FSCACHE_STATS is not set +-# CONFIG_FSCACHE_HISTOGRAM is not set +-# CONFIG_FSCACHE_DEBUG is not set +-# CONFIG_FSCACHE_OBJECT_LIST is not set +-CONFIG_CACHEFILES=m +-# CONFIG_CACHEFILES_DEBUG is not set +-# CONFIG_CACHEFILES_HISTOGRAM is not set +- +-# +-# CD-ROM/DVD Filesystems +-# +-CONFIG_ISO9660_FS=y +-CONFIG_JOLIET=y +-CONFIG_ZISOFS=y +-CONFIG_UDF_FS=y +-CONFIG_UDF_NLS=y +- +-# +-# DOS/FAT/NT Filesystems +-# +-CONFIG_FAT_FS=y +-CONFIG_MSDOS_FS=y +-CONFIG_VFAT_FS=y +-CONFIG_FAT_DEFAULT_CODEPAGE=437 +-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +-CONFIG_NTFS_FS=m +-# CONFIG_NTFS_DEBUG is not set +-CONFIG_NTFS_RW=y +- +-# +-# Pseudo filesystems +-# +-CONFIG_PROC_FS=y +-CONFIG_PROC_SYSCTL=y +-CONFIG_PROC_PAGE_MONITOR=y +-CONFIG_PROC_CHILDREN=y +-CONFIG_KERNFS=y +-CONFIG_SYSFS=y +-CONFIG_TMPFS=y +-CONFIG_TMPFS_POSIX_ACL=y +-CONFIG_TMPFS_XATTR=y +-# CONFIG_HUGETLB_PAGE is not set +-CONFIG_CONFIGFS_FS=y +-CONFIG_MISC_FILESYSTEMS=y +-# CONFIG_ADFS_FS is not set +-# CONFIG_AFFS_FS is not set +-# CONFIG_ECRYPT_FS is not set +-CONFIG_HFS_FS=m +-CONFIG_HFSPLUS_FS=m +-# CONFIG_HFSPLUS_FS_POSIX_ACL is not set +-# CONFIG_BEFS_FS is not set +-# CONFIG_BFS_FS is not set +-# CONFIG_EFS_FS is not set +-CONFIG_JFFS2_FS=m +-CONFIG_JFFS2_FS_DEBUG=0 +-CONFIG_JFFS2_FS_WRITEBUFFER=y +-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +-# CONFIG_JFFS2_SUMMARY is not set +-# CONFIG_JFFS2_FS_XATTR is not set +-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +-CONFIG_JFFS2_ZLIB=y +-# CONFIG_JFFS2_LZO is not set +-CONFIG_JFFS2_RTIME=y +-# CONFIG_JFFS2_RUBIN is not set +-CONFIG_UBIFS_FS=m +-# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +-CONFIG_UBIFS_FS_LZO=y +-CONFIG_UBIFS_FS_ZLIB=y +-# CONFIG_UBIFS_ATIME_SUPPORT is not set +-CONFIG_LOGFS=m +-# CONFIG_CRAMFS is not set +-CONFIG_SQUASHFS=m +-CONFIG_SQUASHFS_FILE_CACHE=y +-# CONFIG_SQUASHFS_FILE_DIRECT is not set +-CONFIG_SQUASHFS_DECOMP_SINGLE=y +-# CONFIG_SQUASHFS_DECOMP_MULTI is not set +-# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set +-CONFIG_SQUASHFS_XATTR=y +-CONFIG_SQUASHFS_ZLIB=y +-# CONFIG_SQUASHFS_LZ4 is not set +-# CONFIG_SQUASHFS_LZO is not set +-# CONFIG_SQUASHFS_XZ is not set +-# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +-# CONFIG_SQUASHFS_EMBEDDED is not set +-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +-# CONFIG_VXFS_FS is not set +-# CONFIG_MINIX_FS is not set +-# CONFIG_OMFS_FS is not set +-# CONFIG_HPFS_FS is not set +-# CONFIG_QNX4FS_FS is not set +-# CONFIG_QNX6FS_FS is not set +-CONFIG_ROMFS_FS=m +-CONFIG_ROMFS_BACKED_BY_BLOCK=y +-# CONFIG_ROMFS_BACKED_BY_MTD is not set +-# CONFIG_ROMFS_BACKED_BY_BOTH is not set +-CONFIG_ROMFS_ON_BLOCK=y +-# CONFIG_PSTORE is not set +-CONFIG_SYSV_FS=m +-# CONFIG_UFS_FS is not set +-CONFIG_NETWORK_FILESYSTEMS=y +-CONFIG_NFS_FS=y +-CONFIG_NFS_V2=y +-CONFIG_NFS_V3=y +-CONFIG_NFS_V3_ACL=y +-CONFIG_NFS_V4=y +-# CONFIG_NFS_SWAP is not set +-CONFIG_NFS_V4_1=y +-CONFIG_NFS_V4_2=y +-CONFIG_PNFS_FILE_LAYOUT=y +-CONFIG_PNFS_BLOCK=m +-CONFIG_PNFS_FLEXFILE_LAYOUT=m +-CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +-CONFIG_NFS_V4_1_MIGRATION=y +-CONFIG_ROOT_NFS=y +-# CONFIG_NFS_USE_LEGACY_DNS is not set +-CONFIG_NFS_USE_KERNEL_DNS=y +-CONFIG_NFS_DEBUG=y +-CONFIG_NFSD=m +-CONFIG_NFSD_V2_ACL=y +-CONFIG_NFSD_V3=y +-CONFIG_NFSD_V3_ACL=y +-CONFIG_NFSD_V4=y +-# CONFIG_NFSD_PNFS is not set +-# CONFIG_NFSD_FAULT_INJECTION is not set +-CONFIG_GRACE_PERIOD=y +-CONFIG_LOCKD=y +-CONFIG_LOCKD_V4=y +-CONFIG_NFS_ACL_SUPPORT=y +-CONFIG_NFS_COMMON=y +-CONFIG_SUNRPC=y +-CONFIG_SUNRPC_GSS=y +-CONFIG_SUNRPC_BACKCHANNEL=y +-CONFIG_RPCSEC_GSS_KRB5=m +-CONFIG_SUNRPC_DEBUG=y +-# CONFIG_CEPH_FS is not set +-CONFIG_CIFS=m +-# CONFIG_CIFS_STATS is not set +-CONFIG_CIFS_WEAK_PW_HASH=y +-# CONFIG_CIFS_UPCALL is not set +-CONFIG_CIFS_XATTR=y +-CONFIG_CIFS_POSIX=y +-CONFIG_CIFS_ACL=y +-# CONFIG_CIFS_DEBUG is not set +-CONFIG_CIFS_DFS_UPCALL=y +-CONFIG_CIFS_SMB2=y +-CONFIG_CIFS_SMB311=y +-CONFIG_CIFS_FSCACHE=y +-CONFIG_NCP_FS=m +-# CONFIG_NCPFS_PACKET_SIGNING is not set +-# CONFIG_NCPFS_IOCTL_LOCKING is not set +-# CONFIG_NCPFS_STRONG is not set +-# CONFIG_NCPFS_NFS_NS is not set +-# CONFIG_NCPFS_OS2_NS is not set +-# CONFIG_NCPFS_SMALLDOS is not set +-# CONFIG_NCPFS_NLS is not set +-# CONFIG_NCPFS_EXTRAS is not set +-# CONFIG_CODA_FS is not set +-# CONFIG_AFS_FS is not set +-CONFIG_NLS=y +-CONFIG_NLS_DEFAULT="utf8" +-CONFIG_NLS_CODEPAGE_437=y +-CONFIG_NLS_CODEPAGE_737=m +-CONFIG_NLS_CODEPAGE_775=m +-CONFIG_NLS_CODEPAGE_850=y +-CONFIG_NLS_CODEPAGE_852=y +-CONFIG_NLS_CODEPAGE_855=m +-CONFIG_NLS_CODEPAGE_857=m +-CONFIG_NLS_CODEPAGE_860=m +-CONFIG_NLS_CODEPAGE_861=m +-CONFIG_NLS_CODEPAGE_862=m +-CONFIG_NLS_CODEPAGE_863=m +-CONFIG_NLS_CODEPAGE_864=m +-CONFIG_NLS_CODEPAGE_865=m +-CONFIG_NLS_CODEPAGE_866=m +-CONFIG_NLS_CODEPAGE_869=m +-CONFIG_NLS_CODEPAGE_936=m +-CONFIG_NLS_CODEPAGE_950=m +-CONFIG_NLS_CODEPAGE_932=m +-CONFIG_NLS_CODEPAGE_949=m +-CONFIG_NLS_CODEPAGE_874=m +-CONFIG_NLS_ISO8859_8=m +-CONFIG_NLS_CODEPAGE_1250=y +-CONFIG_NLS_CODEPAGE_1251=y +-CONFIG_NLS_ASCII=y +-CONFIG_NLS_ISO8859_1=y +-CONFIG_NLS_ISO8859_2=y +-CONFIG_NLS_ISO8859_3=m +-CONFIG_NLS_ISO8859_4=m +-CONFIG_NLS_ISO8859_5=m +-CONFIG_NLS_ISO8859_6=m +-CONFIG_NLS_ISO8859_7=m +-CONFIG_NLS_ISO8859_9=m +-CONFIG_NLS_ISO8859_13=m +-CONFIG_NLS_ISO8859_14=m +-CONFIG_NLS_ISO8859_15=y +-CONFIG_NLS_KOI8_R=m +-CONFIG_NLS_KOI8_U=m +-CONFIG_NLS_MAC_ROMAN=m +-CONFIG_NLS_MAC_CELTIC=m +-CONFIG_NLS_MAC_CENTEURO=m +-CONFIG_NLS_MAC_CROATIAN=m +-CONFIG_NLS_MAC_CYRILLIC=m +-CONFIG_NLS_MAC_GAELIC=m +-CONFIG_NLS_MAC_GREEK=m +-CONFIG_NLS_MAC_ICELAND=m +-CONFIG_NLS_MAC_INUIT=m +-CONFIG_NLS_MAC_ROMANIAN=m +-CONFIG_NLS_MAC_TURKISH=m +-CONFIG_NLS_UTF8=y +-CONFIG_DLM=m +-# CONFIG_DLM_DEBUG is not set +- +-# +-# Kernel hacking +-# +- +-# +-# printk and dmesg options +-# +-CONFIG_PRINTK_TIME=y +-CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +-# CONFIG_BOOT_PRINTK_DELAY is not set +-CONFIG_DYNAMIC_DEBUG=y +- +-# +-# Compile-time checks and compiler options +-# +-# CONFIG_DEBUG_INFO is not set +-CONFIG_ENABLE_WARN_DEPRECATED=y +-CONFIG_ENABLE_MUST_CHECK=y +-CONFIG_FRAME_WARN=1024 +-CONFIG_STRIP_ASM_SYMS=y +-# CONFIG_READABLE_ASM is not set +-# CONFIG_UNUSED_SYMBOLS is not set +-# CONFIG_PAGE_OWNER is not set +-CONFIG_DEBUG_FS=y +-# CONFIG_HEADERS_CHECK is not set +-# CONFIG_DEBUG_SECTION_MISMATCH is not set +-CONFIG_SECTION_MISMATCH_WARN_ONLY=y +-CONFIG_FRAME_POINTER=y +-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +-CONFIG_MAGIC_SYSRQ=y +-CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 +-CONFIG_DEBUG_KERNEL=y +- +-# +-# Memory Debugging +-# +-# CONFIG_PAGE_EXTENSION is not set +-# CONFIG_DEBUG_PAGEALLOC is not set +-# CONFIG_DEBUG_OBJECTS is not set +-# CONFIG_SLUB_STATS is not set +-CONFIG_HAVE_DEBUG_KMEMLEAK=y +-# CONFIG_DEBUG_KMEMLEAK is not set +-# CONFIG_DEBUG_STACK_USAGE is not set +-# CONFIG_DEBUG_VM is not set +-# CONFIG_DEBUG_MEMORY_INIT is not set +-# CONFIG_DEBUG_PER_CPU_MAPS is not set +-# CONFIG_DEBUG_HIGHMEM is not set +-# CONFIG_DEBUG_SHIRQ is not set +- +-# +-# Debug Lockups and Hangs +-# +-# CONFIG_LOCKUP_DETECTOR is not set +-# CONFIG_DETECT_HUNG_TASK is not set +-CONFIG_PANIC_ON_OOPS=y +-CONFIG_PANIC_ON_OOPS_VALUE=1 +-CONFIG_PANIC_TIMEOUT=1 +-# CONFIG_SCHED_DEBUG is not set +-# CONFIG_SCHED_INFO is not set +-# CONFIG_SCHEDSTATS is not set +-# CONFIG_SCHED_STACK_END_CHECK is not set +-# CONFIG_DEBUG_TIMEKEEPING is not set +-CONFIG_TIMER_STATS=y +-# CONFIG_DEBUG_PREEMPT is not set +- +-# +-# Lock Debugging (spinlocks, mutexes, etc...) +-# +-# CONFIG_DEBUG_RT_MUTEXES is not set +-# CONFIG_DEBUG_SPINLOCK is not set +-# CONFIG_DEBUG_MUTEXES is not set +-# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +-# CONFIG_DEBUG_LOCK_ALLOC is not set +-# CONFIG_PROVE_LOCKING is not set +-# CONFIG_LOCK_STAT is not set +-# CONFIG_DEBUG_ATOMIC_SLEEP is not set +-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +-# CONFIG_LOCK_TORTURE_TEST is not set +-CONFIG_STACKTRACE=y +-# CONFIG_DEBUG_KOBJECT is not set +-# CONFIG_DEBUG_BUGVERBOSE is not set +-# CONFIG_DEBUG_LIST is not set +-# CONFIG_DEBUG_PI_LIST is not set +-# CONFIG_DEBUG_SG is not set +-# CONFIG_DEBUG_NOTIFIERS is not set +-# CONFIG_DEBUG_CREDENTIALS is not set +- +-# +-# RCU Debugging +-# +-# CONFIG_PROVE_RCU is not set +-# CONFIG_SPARSE_RCU_POINTER is not set +-# CONFIG_TORTURE_TEST is not set +-# CONFIG_RCU_TORTURE_TEST is not set +-CONFIG_RCU_CPU_STALL_TIMEOUT=21 +-# CONFIG_RCU_TRACE is not set +-# CONFIG_RCU_EQS_DEBUG is not set +-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +-# CONFIG_NOTIFIER_ERROR_INJECTION is not set +-# CONFIG_FAULT_INJECTION is not set +-CONFIG_NOP_TRACER=y +-CONFIG_HAVE_FUNCTION_TRACER=y +-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +-CONFIG_HAVE_DYNAMIC_FTRACE=y +-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +-CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +-CONFIG_HAVE_C_RECORDMCOUNT=y +-CONFIG_TRACE_CLOCK=y +-CONFIG_RING_BUFFER=y +-CONFIG_EVENT_TRACING=y +-CONFIG_CONTEXT_SWITCH_TRACER=y +-CONFIG_TRACING=y +-CONFIG_GENERIC_TRACER=y +-CONFIG_TRACING_SUPPORT=y +-CONFIG_FTRACE=y +-CONFIG_FUNCTION_TRACER=y +-CONFIG_FUNCTION_GRAPH_TRACER=y +-# CONFIG_IRQSOFF_TRACER is not set +-# CONFIG_PREEMPT_TRACER is not set +-# CONFIG_SCHED_TRACER is not set +-# CONFIG_MISSED_TIMER_OFFSETS_HIST is not set +-# CONFIG_FTRACE_SYSCALLS is not set +-# CONFIG_TRACER_SNAPSHOT is not set +-CONFIG_BRANCH_PROFILE_NONE=y +-# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +-# CONFIG_PROFILE_ALL_BRANCHES is not set +-# CONFIG_STACK_TRACER is not set +-# CONFIG_BLK_DEV_IO_TRACE is not set +-# CONFIG_UPROBE_EVENT is not set +-# CONFIG_PROBE_EVENTS is not set +-CONFIG_DYNAMIC_FTRACE=y +-# CONFIG_FUNCTION_PROFILER is not set +-CONFIG_FTRACE_MCOUNT_RECORD=y +-# CONFIG_FTRACE_STARTUP_TEST is not set +-# CONFIG_TRACEPOINT_BENCHMARK is not set +-# CONFIG_RING_BUFFER_BENCHMARK is not set +-# CONFIG_RING_BUFFER_STARTUP_TEST is not set +-# CONFIG_TRACE_ENUM_MAP_FILE is not set +-# CONFIG_TRACING_EVENTS_GPIO is not set +- +-# +-# Runtime Testing +-# +-# CONFIG_LKDTM is not set +-# CONFIG_TEST_LIST_SORT is not set +-# CONFIG_BACKTRACE_SELF_TEST is not set +-# CONFIG_RBTREE_TEST is not set +-# CONFIG_INTERVAL_TREE_TEST is not set +-# CONFIG_PERCPU_TEST is not set +-# CONFIG_ATOMIC64_SELFTEST is not set +-# CONFIG_ASYNC_RAID6_TEST is not set +-# CONFIG_TEST_HEXDUMP is not set +-# CONFIG_TEST_STRING_HELPERS is not set +-# CONFIG_TEST_KSTRTOX is not set +-# CONFIG_TEST_PRINTF is not set +-# CONFIG_TEST_RHASHTABLE is not set +-# CONFIG_DMA_API_DEBUG is not set +-# CONFIG_TEST_LKM is not set +-# CONFIG_TEST_USER_COPY is not set +-# CONFIG_TEST_BPF is not set +-# CONFIG_TEST_FIRMWARE is not set +-# CONFIG_TEST_UDELAY is not set +-# CONFIG_MEMTEST is not set +-# CONFIG_TEST_STATIC_KEYS is not set +-# CONFIG_SAMPLES is not set +-CONFIG_HAVE_ARCH_KGDB=y +-# CONFIG_KGDB is not set +-# CONFIG_ARM_PTDUMP is not set +-# CONFIG_STRICT_DEVMEM is not set +-CONFIG_ARM_UNWIND=y +-CONFIG_OLD_MCOUNT=y +-# CONFIG_DEBUG_USER is not set +-# CONFIG_DEBUG_LL is not set +-CONFIG_DEBUG_IMX_UART_PORT=1 +-CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" +-# CONFIG_DEBUG_UART_8250 is not set +-# CONFIG_DEBUG_UART_BCM63XX is not set +-CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" +-# CONFIG_PID_IN_CONTEXTIDR is not set +-# CONFIG_DEBUG_SET_MODULE_RONX is not set +-# CONFIG_CORESIGHT is not set +- +-# +-# Security options +-# +-CONFIG_KEYS=y +-# CONFIG_PERSISTENT_KEYRINGS is not set +-# CONFIG_BIG_KEYS is not set +-CONFIG_ENCRYPTED_KEYS=y +-# CONFIG_SECURITY_DMESG_RESTRICT is not set +-# CONFIG_SECURITY is not set +-# CONFIG_SECURITYFS is not set +-CONFIG_DEFAULT_SECURITY_DAC=y +-CONFIG_DEFAULT_SECURITY="" +-CONFIG_XOR_BLOCKS=y +-CONFIG_ASYNC_CORE=m +-CONFIG_ASYNC_MEMCPY=m +-CONFIG_ASYNC_XOR=m +-CONFIG_ASYNC_PQ=m +-CONFIG_ASYNC_RAID6_RECOV=m +-CONFIG_CRYPTO=y +- +-# +-# Crypto core or helper +-# +-CONFIG_CRYPTO_ALGAPI=y +-CONFIG_CRYPTO_ALGAPI2=y +-CONFIG_CRYPTO_AEAD=y +-CONFIG_CRYPTO_AEAD2=y +-CONFIG_CRYPTO_BLKCIPHER=y +-CONFIG_CRYPTO_BLKCIPHER2=y +-CONFIG_CRYPTO_HASH=y +-CONFIG_CRYPTO_HASH2=y +-CONFIG_CRYPTO_RNG=y +-CONFIG_CRYPTO_RNG2=y +-CONFIG_CRYPTO_RNG_DEFAULT=y +-CONFIG_CRYPTO_PCOMP=y +-CONFIG_CRYPTO_PCOMP2=y +-CONFIG_CRYPTO_AKCIPHER2=y +-CONFIG_CRYPTO_AKCIPHER=m +-CONFIG_CRYPTO_RSA=m +-CONFIG_CRYPTO_CRYPTODEV=y +-CONFIG_CRYPTO_MANAGER=y +-CONFIG_CRYPTO_MANAGER2=y +-CONFIG_CRYPTO_USER=y +-CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +-CONFIG_CRYPTO_GF128MUL=y +-CONFIG_CRYPTO_NULL=y +-CONFIG_CRYPTO_NULL2=y +-CONFIG_CRYPTO_PCRYPT=y +-CONFIG_CRYPTO_WORKQUEUE=y +-CONFIG_CRYPTO_CRYPTD=y +-CONFIG_CRYPTO_MCRYPTD=m +-CONFIG_CRYPTO_AUTHENC=y +-# CONFIG_CRYPTO_TEST is not set +-CONFIG_CRYPTO_ABLK_HELPER=m +- +-# +-# Authenticated Encryption with Associated Data +-# +-CONFIG_CRYPTO_CCM=y +-CONFIG_CRYPTO_GCM=y +-CONFIG_CRYPTO_CHACHA20POLY1305=m +-CONFIG_CRYPTO_SEQIV=y +-CONFIG_CRYPTO_ECHAINIV=m +- +-# +-# Block modes +-# +-CONFIG_CRYPTO_CBC=y +-CONFIG_CRYPTO_CTR=y +-CONFIG_CRYPTO_CTS=y +-CONFIG_CRYPTO_ECB=y +-CONFIG_CRYPTO_LRW=y +-CONFIG_CRYPTO_PCBC=y +-CONFIG_CRYPTO_XTS=y +-CONFIG_CRYPTO_KEYWRAP=m +- +-# +-# Hash modes +-# +-CONFIG_CRYPTO_CMAC=y +-CONFIG_CRYPTO_HMAC=y +-CONFIG_CRYPTO_XCBC=y +-CONFIG_CRYPTO_VMAC=y +- +-# +-# Digest +-# +-CONFIG_CRYPTO_CRC32C=y +-CONFIG_CRYPTO_CRC32=y +-CONFIG_CRYPTO_CRCT10DIF=y +-CONFIG_CRYPTO_GHASH=y +-CONFIG_CRYPTO_POLY1305=m +-CONFIG_CRYPTO_MD4=y +-CONFIG_CRYPTO_MD5=y +-CONFIG_CRYPTO_MICHAEL_MIC=y +-CONFIG_CRYPTO_RMD128=m +-CONFIG_CRYPTO_RMD160=m +-CONFIG_CRYPTO_RMD256=m +-CONFIG_CRYPTO_RMD320=m +-CONFIG_CRYPTO_SHA1=y +-CONFIG_CRYPTO_SHA256=y +-CONFIG_CRYPTO_SHA512=y +-CONFIG_CRYPTO_TGR192=m +-CONFIG_CRYPTO_WP512=m +- +-# +-# Ciphers +-# +-CONFIG_CRYPTO_AES=y +-CONFIG_CRYPTO_ANUBIS=m +-CONFIG_CRYPTO_ARC4=y +-CONFIG_CRYPTO_BLOWFISH=m +-CONFIG_CRYPTO_BLOWFISH_COMMON=m +-CONFIG_CRYPTO_CAMELLIA=m +-CONFIG_CRYPTO_CAST_COMMON=m +-CONFIG_CRYPTO_CAST5=m +-CONFIG_CRYPTO_CAST6=m +-CONFIG_CRYPTO_DES=y +-CONFIG_CRYPTO_FCRYPT=m +-CONFIG_CRYPTO_KHAZAD=m +-CONFIG_CRYPTO_SALSA20=m +-CONFIG_CRYPTO_CHACHA20=m +-CONFIG_CRYPTO_SEED=m +-CONFIG_CRYPTO_SERPENT=m +-CONFIG_CRYPTO_TEA=y +-CONFIG_CRYPTO_TWOFISH=y +-CONFIG_CRYPTO_TWOFISH_COMMON=y +- +-# +-# Compression +-# +-CONFIG_CRYPTO_DEFLATE=y +-CONFIG_CRYPTO_ZLIB=y +-CONFIG_CRYPTO_LZO=y +-CONFIG_CRYPTO_842=y +-CONFIG_CRYPTO_LZ4=y +-CONFIG_CRYPTO_LZ4HC=y +- +-# +-# Random Number Generation +-# +-CONFIG_CRYPTO_ANSI_CPRNG=y +-CONFIG_CRYPTO_DRBG_MENU=y +-CONFIG_CRYPTO_DRBG_HMAC=y +-# CONFIG_CRYPTO_DRBG_HASH is not set +-# CONFIG_CRYPTO_DRBG_CTR is not set +-CONFIG_CRYPTO_DRBG=y +-CONFIG_CRYPTO_JITTERENTROPY=y +-CONFIG_CRYPTO_USER_API=m +-CONFIG_CRYPTO_USER_API_HASH=m +-CONFIG_CRYPTO_USER_API_SKCIPHER=m +-CONFIG_CRYPTO_USER_API_RNG=m +-# CONFIG_CRYPTO_USER_API_AEAD is not set +-CONFIG_CRYPTO_HASH_INFO=y +-CONFIG_CRYPTO_HW=y +-# CONFIG_CRYPTO_DEV_HIFN_795X is not set +-CONFIG_CRYPTO_DEV_FSL_CAAM=y +-CONFIG_CRYPTO_DEV_FSL_CAAM_JR=y +-CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9 +-# CONFIG_CRYPTO_DEV_FSL_CAAM_INTC is not set +-CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=y +-CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=y +-CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API=y +-CONFIG_CRYPTO_DEV_FSL_CAAM_IMX=y +-CONFIG_CRYPTO_DEV_FSL_CAAM_LE=y +-# CONFIG_CRYPTO_DEV_FSL_CAAM_SM is not set +-# CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO is not set +-# CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set +-# CONFIG_CRYPTO_DEV_SAHARA is not set +-# CONFIG_CRYPTO_DEV_MXS_DCP is not set +-CONFIG_ASYMMETRIC_KEY_TYPE=m +-CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m +-CONFIG_PUBLIC_KEY_ALGO_RSA=m +-CONFIG_X509_CERTIFICATE_PARSER=m +-CONFIG_PKCS7_MESSAGE_PARSER=m +-CONFIG_PKCS7_TEST_KEY=m +- +-# +-# Certificates for signature checking +-# +-CONFIG_SYSTEM_TRUSTED_KEYRING=y +-CONFIG_SYSTEM_TRUSTED_KEYS="" +-CONFIG_ARM_CRYPTO=y +-CONFIG_CRYPTO_SHA1_ARM=m +-CONFIG_CRYPTO_SHA1_ARM_NEON=m +-CONFIG_CRYPTO_SHA1_ARM_CE=m +-CONFIG_CRYPTO_SHA2_ARM_CE=m +-CONFIG_CRYPTO_SHA256_ARM=y +-CONFIG_CRYPTO_SHA512_ARM=m +-CONFIG_CRYPTO_AES_ARM=m +-CONFIG_CRYPTO_AES_ARM_BS=m +-CONFIG_CRYPTO_AES_ARM_CE=m +-CONFIG_CRYPTO_GHASH_ARM_CE=m +-CONFIG_BINARY_PRINTF=y +- +-# +-# Library routines +-# +-CONFIG_RAID6_PQ=y +-CONFIG_BITREVERSE=y +-CONFIG_HAVE_ARCH_BITREVERSE=y +-CONFIG_RATIONAL=y +-CONFIG_GENERIC_STRNCPY_FROM_USER=y +-CONFIG_GENERIC_STRNLEN_USER=y +-CONFIG_GENERIC_NET_UTILS=y +-CONFIG_GENERIC_PCI_IOMAP=y +-CONFIG_GENERIC_IO=y +-CONFIG_STMP_DEVICE=y +-CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +-CONFIG_CRC_CCITT=y +-CONFIG_CRC16=y +-CONFIG_CRC_T10DIF=y +-CONFIG_CRC_ITU_T=y +-CONFIG_CRC32=y +-# CONFIG_CRC32_SELFTEST is not set +-CONFIG_CRC32_SLICEBY8=y +-# CONFIG_CRC32_SLICEBY4 is not set +-# CONFIG_CRC32_SARWATE is not set +-# CONFIG_CRC32_BIT is not set +-CONFIG_CRC7=y +-CONFIG_LIBCRC32C=y +-CONFIG_CRC8=m +-# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set +-# CONFIG_RANDOM32_SELFTEST is not set +-CONFIG_842_COMPRESS=y +-CONFIG_842_DECOMPRESS=y +-CONFIG_ZLIB_INFLATE=y +-CONFIG_ZLIB_DEFLATE=y +-CONFIG_LZO_COMPRESS=y +-CONFIG_LZO_DECOMPRESS=y +-CONFIG_LZ4_COMPRESS=y +-CONFIG_LZ4HC_COMPRESS=y +-CONFIG_LZ4_DECOMPRESS=y +-CONFIG_XZ_DEC=m +-# CONFIG_XZ_DEC_X86 is not set +-# CONFIG_XZ_DEC_POWERPC is not set +-# CONFIG_XZ_DEC_IA64 is not set +-CONFIG_XZ_DEC_ARM=y +-CONFIG_XZ_DEC_ARMTHUMB=y +-# CONFIG_XZ_DEC_SPARC is not set +-CONFIG_XZ_DEC_BCJ=y +-# CONFIG_XZ_DEC_TEST is not set +-CONFIG_DECOMPRESS_GZIP=y +-CONFIG_DECOMPRESS_LZO=y +-CONFIG_GENERIC_ALLOCATOR=y +-CONFIG_TEXTSEARCH=y +-CONFIG_TEXTSEARCH_KMP=m +-CONFIG_TEXTSEARCH_BM=m +-CONFIG_TEXTSEARCH_FSM=m +-CONFIG_BTREE=y +-CONFIG_ASSOCIATIVE_ARRAY=y +-CONFIG_HAS_IOMEM=y +-CONFIG_HAS_IOPORT_MAP=y +-CONFIG_HAS_DMA=y +-CONFIG_CPU_RMAP=y +-CONFIG_DQL=y +-CONFIG_GLOB=y +-# CONFIG_GLOB_SELFTEST is not set +-CONFIG_NLATTR=y +-CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y +-CONFIG_CLZ_TAB=y +-CONFIG_CORDIC=y +-# CONFIG_DDR is not set +-CONFIG_MPILIB=m +-CONFIG_LIBFDT=y +-CONFIG_OID_REGISTRY=y +-CONFIG_FONT_SUPPORT=y +-# CONFIG_FONTS is not set +-CONFIG_FONT_8x8=y +-CONFIG_FONT_8x16=y +-# CONFIG_SG_SPLIT is not set +-CONFIG_ARCH_HAS_SG_CHAIN=y +-# CONFIG_VIRTUALIZATION is not set +diff --git a/arch/arm/configs/xbian_defconfig_imx6_mvebu b/arch/arm/configs/xbian_defconfig_imx6_mvebu +index 2bc59d8..83cda36 100644 +--- a/arch/arm/configs/xbian_defconfig_imx6_mvebu ++++ b/arch/arm/configs/xbian_defconfig_imx6_mvebu +@@ -1,6 +1,6 @@ + # + # Automatically generated file; DO NOT EDIT. +-# Linux/arm 4.4.1 Kernel Configuration ++# Linux/arm 4.4.6 Kernel Configuration + # + CONFIG_ARM=y + CONFIG_ARM_HAS_SG_CHAIN=y +@@ -83,7 +83,7 @@ CONFIG_NO_HZ_COMMON=y + # CONFIG_HZ_PERIODIC is not set + CONFIG_NO_HZ_IDLE=y + # CONFIG_NO_HZ_FULL is not set +-CONFIG_NO_HZ=y ++# CONFIG_NO_HZ is not set + CONFIG_HIGH_RES_TIMERS=y + + # +@@ -104,12 +104,12 @@ CONFIG_RCU_EXPERT=y + CONFIG_SRCU=y + # CONFIG_TASKS_RCU is not set + CONFIG_RCU_STALL_COMMON=y +-CONFIG_RCU_FANOUT=16 +-CONFIG_RCU_FANOUT_LEAF=8 ++CONFIG_RCU_FANOUT=8 ++CONFIG_RCU_FANOUT_LEAF=2 + # CONFIG_TREE_RCU_TRACE is not set + CONFIG_RCU_BOOST=y + CONFIG_RCU_KTHREAD_PRIO=1 +-CONFIG_RCU_BOOST_DELAY=500 ++CONFIG_RCU_BOOST_DELAY=300 + CONFIG_RCU_NOCB_CPU=y + CONFIG_RCU_NOCB_CPU_NONE=y + # CONFIG_RCU_NOCB_CPU_ZERO is not set +@@ -166,7 +166,6 @@ CONFIG_MULTIUSER=y + CONFIG_SYSFS_SYSCALL=y + CONFIG_SYSCTL_SYSCALL=y + CONFIG_KALLSYMS=y +-CONFIG_KALLSYMS_ALL=y + CONFIG_PRINTK=y + CONFIG_BUG=y + CONFIG_BASE_FULL=y +@@ -178,7 +177,7 @@ CONFIG_EVENTFD=y + # CONFIG_BPF_SYSCALL is not set + CONFIG_SHMEM=y + CONFIG_AIO=y +-# CONFIG_ADVISE_SYSCALLS is not set ++CONFIG_ADVISE_SYSCALLS=y + CONFIG_USERFAULTFD=y + CONFIG_PCI_QUIRKS=y + CONFIG_MEMBARRIER=y +@@ -190,7 +189,6 @@ CONFIG_PERF_USE_VMALLOC=y + # Kernel Performance Events And Counters + # + CONFIG_PERF_EVENTS=y +-# CONFIG_DEBUG_PERF_USE_VMALLOC is not set + # CONFIG_VM_EVENT_COUNTERS is not set + # CONFIG_SLUB_DEBUG is not set + CONFIG_COMPAT_BRK=y +@@ -248,8 +246,8 @@ CONFIG_MODULES=y + # CONFIG_MODULE_FORCE_LOAD is not set + CONFIG_MODULE_UNLOAD=y + # CONFIG_MODULE_FORCE_UNLOAD is not set +-CONFIG_MODVERSIONS=y +-CONFIG_MODULE_SRCVERSION_ALL=y ++# CONFIG_MODVERSIONS is not set ++# CONFIG_MODULE_SRCVERSION_ALL is not set + # CONFIG_MODULE_SIG is not set + # CONFIG_MODULE_COMPRESS is not set + CONFIG_MODULES_TREE_LOOKUP=y +@@ -490,7 +488,6 @@ CONFIG_PCI_DOMAINS=y + CONFIG_PCI_DOMAINS_GENERIC=y + CONFIG_PCI_SYSCALL=y + CONFIG_PCI_MSI=y +-# CONFIG_PCI_DEBUG is not set + CONFIG_PCI_REALLOC_ENABLE_AUTO=y + CONFIG_PCI_STUB=y + CONFIG_PCI_ATS=y +@@ -587,14 +584,12 @@ CONFIG_MIGRATION=y + CONFIG_ZONE_DMA_FLAG=1 + CONFIG_BOUNCE=y + # CONFIG_KSM is not set +-CONFIG_DEFAULT_MMAP_MIN_ADDR=16384 +-CONFIG_CLEANCACHE=y +-CONFIG_FRONTSWAP=y ++CONFIG_DEFAULT_MMAP_MIN_ADDR=8192 ++# CONFIG_CLEANCACHE is not set ++# CONFIG_FRONTSWAP is not set + CONFIG_CMA=y +-# CONFIG_CMA_DEBUG is not set + # CONFIG_CMA_DEBUGFS is not set + CONFIG_CMA_AREAS=7 +-# CONFIG_ZSWAP is not set + # CONFIG_ZPOOL is not set + # CONFIG_ZBUD is not set + # CONFIG_ZSMALLOC is not set +@@ -699,14 +694,18 @@ CONFIG_BINFMT_MISC=m + CONFIG_SUSPEND=y + CONFIG_SUSPEND_FREEZER=y + # CONFIG_SUSPEND_SKIP_SYNC is not set +-# CONFIG_HIBERNATION is not set ++CONFIG_HIBERNATE_CALLBACKS=y ++CONFIG_HIBERNATION=y ++CONFIG_PM_STD_PARTITION="" + CONFIG_PM_SLEEP=y + CONFIG_PM_SLEEP_SMP=y + # CONFIG_PM_AUTOSLEEP is not set +-# CONFIG_PM_WAKELOCKS is not set ++CONFIG_PM_WAKELOCKS=y ++CONFIG_PM_WAKELOCKS_LIMIT=100 ++CONFIG_PM_WAKELOCKS_GC=y + CONFIG_PM=y + # CONFIG_PM_DEBUG is not set +-# CONFIG_APM_EMULATION is not set ++CONFIG_APM_EMULATION=y + CONFIG_PM_OPP=y + CONFIG_PM_CLK=y + CONFIG_PM_GENERIC_DOMAINS=y +@@ -777,7 +776,7 @@ CONFIG_INET_UDP_DIAG=m + CONFIG_TCP_CONG_ADVANCED=y + CONFIG_TCP_CONG_BIC=m + CONFIG_TCP_CONG_CUBIC=m +-CONFIG_TCP_CONG_WESTWOOD=m ++CONFIG_TCP_CONG_WESTWOOD=y + CONFIG_TCP_CONG_HTCP=m + CONFIG_TCP_CONG_HSTCP=m + CONFIG_TCP_CONG_HYBLA=m +@@ -789,9 +788,10 @@ CONFIG_TCP_CONG_YEAH=y + CONFIG_TCP_CONG_ILLINOIS=m + CONFIG_TCP_CONG_DCTCP=m + # CONFIG_TCP_CONG_CDG is not set +-CONFIG_DEFAULT_VEGAS=y ++# CONFIG_DEFAULT_VEGAS is not set ++CONFIG_DEFAULT_WESTWOOD=y + # CONFIG_DEFAULT_RENO is not set +-CONFIG_DEFAULT_TCP_CONG="vegas" ++CONFIG_DEFAULT_TCP_CONG="westwood" + CONFIG_TCP_MD5SIG=y + CONFIG_IPV6=m + CONFIG_IPV6_ROUTER_PREF=y +@@ -821,7 +821,7 @@ CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y + CONFIG_IPV6_PIMSM_V2=y + # CONFIG_NETWORK_SECMARK is not set + CONFIG_NET_PTP_CLASSIFY=y +-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set ++CONFIG_NETWORK_PHY_TIMESTAMPING=y + CONFIG_NETFILTER=y + # CONFIG_NETFILTER_DEBUG is not set + CONFIG_NETFILTER_ADVANCED=y +@@ -1153,20 +1153,15 @@ CONFIG_INET_DCCP_DIAG=m + CONFIG_IP_DCCP_CCID3=y + # CONFIG_IP_DCCP_CCID3_DEBUG is not set + CONFIG_IP_DCCP_TFRC_LIB=y +- +-# +-# DCCP Kernel Hacking +-# +-# CONFIG_IP_DCCP_DEBUG is not set + CONFIG_IP_SCTP=m + # CONFIG_SCTP_DBG_OBJCNT is not set +-CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y ++# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set + # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set +-# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set +-CONFIG_SCTP_COOKIE_HMAC_MD5=y +-CONFIG_SCTP_COOKIE_HMAC_SHA1=y ++CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE=y ++# CONFIG_SCTP_COOKIE_HMAC_MD5 is not set ++# CONFIG_SCTP_COOKIE_HMAC_SHA1 is not set + CONFIG_RDS=m +-# CONFIG_RDS_TCP is not set ++CONFIG_RDS_TCP=m + # CONFIG_RDS_DEBUG is not set + CONFIG_TIPC=m + CONFIG_TIPC_MEDIA_UDP=y +@@ -1177,6 +1172,8 @@ CONFIG_L2TP_V3=y + CONFIG_L2TP_IP=m + CONFIG_L2TP_ETH=m + CONFIG_STP=m ++CONFIG_GARP=m ++CONFIG_MRP=m + CONFIG_BRIDGE=m + CONFIG_BRIDGE_IGMP_SNOOPING=y + CONFIG_BRIDGE_VLAN_FILTERING=y +@@ -1185,8 +1182,8 @@ CONFIG_NET_DSA=y + CONFIG_NET_DSA_HWMON=y + CONFIG_NET_DSA_TAG_EDSA=y + CONFIG_VLAN_8021Q=m +-# CONFIG_VLAN_8021Q_GVRP is not set +-# CONFIG_VLAN_8021Q_MVRP is not set ++CONFIG_VLAN_8021Q_GVRP=y ++CONFIG_VLAN_8021Q_MVRP=y + # CONFIG_DECNET is not set + CONFIG_LLC=m + CONFIG_LLC2=m +@@ -1197,7 +1194,7 @@ CONFIG_IPDDP=m + CONFIG_IPDDP_ENCAP=y + # CONFIG_X25 is not set + # CONFIG_LAPB is not set +-# CONFIG_PHONET is not set ++CONFIG_PHONET=m + # CONFIG_6LOWPAN is not set + # CONFIG_IEEE802154 is not set + CONFIG_NET_SCHED=y +@@ -1286,7 +1283,7 @@ CONFIG_NET_MPLS_GSO=m + # CONFIG_MPLS_ROUTING is not set + # CONFIG_HSR is not set + CONFIG_NET_SWITCHDEV=y +-# CONFIG_NET_L3_MASTER_DEV is not set ++CONFIG_NET_L3_MASTER_DEV=y + CONFIG_RPS=y + CONFIG_RFS_ACCEL=y + CONFIG_XPS=y +@@ -1403,7 +1400,6 @@ CONFIG_BT_CMTP=m + CONFIG_BT_HIDP=y + CONFIG_BT_HS=y + CONFIG_BT_LE=y +-# CONFIG_BT_SELFTEST is not set + # CONFIG_BT_DEBUGFS is not set + + # +@@ -1523,8 +1519,6 @@ CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y + CONFIG_WANT_DEV_COREDUMP=y + CONFIG_ALLOW_DEV_COREDUMP=y + CONFIG_DEV_COREDUMP=y +-# CONFIG_DEBUG_DRIVER is not set +-# CONFIG_DEBUG_DEVRES is not set + # CONFIG_SYS_HYPERVISOR is not set + # CONFIG_GENERIC_CPU_DEVICES is not set + CONFIG_SOC_BUS=y +@@ -2043,9 +2037,9 @@ CONFIG_DM_VERITY=m + # CONFIG_FIREWIRE is not set + # CONFIG_FIREWIRE_NOSY is not set + CONFIG_NETDEVICES=y +-CONFIG_MII=y ++CONFIG_MII=m + CONFIG_NET_CORE=y +-CONFIG_BONDING=y ++CONFIG_BONDING=m + CONFIG_DUMMY=m + CONFIG_EQUALIZER=m + # CONFIG_NET_FC is not set +@@ -2070,6 +2064,7 @@ CONFIG_TUN=m + CONFIG_VETH=m + # CONFIG_VIRTIO_NET is not set + CONFIG_NLMON=m ++# CONFIG_NET_VRF is not set + # CONFIG_ARCNET is not set + + # +@@ -2096,7 +2091,7 @@ CONFIG_NET_DSA_MV88E6XXX=y + CONFIG_NET_DSA_MV88E6352=y + # CONFIG_NET_DSA_BCM_SF2 is not set + CONFIG_ETHERNET=y +-CONFIG_MDIO=y ++CONFIG_MDIO=m + # CONFIG_NET_VENDOR_3COM is not set + # CONFIG_NET_VENDOR_ADAPTEC is not set + # CONFIG_NET_VENDOR_AGERE is not set +@@ -2105,11 +2100,11 @@ CONFIG_MDIO=y + # CONFIG_NET_VENDOR_AMD is not set + # CONFIG_NET_VENDOR_ARC is not set + CONFIG_NET_VENDOR_ATHEROS=y +-CONFIG_ATL2=y +-CONFIG_ATL1=y +-CONFIG_ATL1E=y +-CONFIG_ATL1C=y +-CONFIG_ALX=y ++CONFIG_ATL2=m ++CONFIG_ATL1=m ++CONFIG_ATL1E=m ++CONFIG_ATL1C=m ++CONFIG_ALX=m + # CONFIG_NET_VENDOR_AURORA is not set + # CONFIG_NET_CADENCE is not set + # CONFIG_NET_VENDOR_BROADCOM is not set +@@ -2129,7 +2124,7 @@ CONFIG_ALX=y + CONFIG_NET_VENDOR_FREESCALE=y + CONFIG_FEC=y + CONFIG_FSL_PQ_MDIO=y +-CONFIG_FSL_XGMAC_MDIO=y ++# CONFIG_FSL_XGMAC_MDIO is not set + CONFIG_GIANFAR=y + # CONFIG_NET_VENDOR_HISILICON is not set + # CONFIG_NET_VENDOR_HP is not set +@@ -2279,6 +2274,7 @@ CONFIG_USB_NET_KALMIA=m + CONFIG_USB_NET_QMI_WWAN=m + CONFIG_USB_HSO=m + CONFIG_USB_NET_INT51X1=m ++# CONFIG_USB_CDC_PHONET is not set + CONFIG_USB_IPHETH=m + CONFIG_USB_SIERRA_NET=m + CONFIG_USB_VL600=m +@@ -2471,24 +2467,9 @@ CONFIG_RT2X00_LIB_LEDS=y + # CONFIG_RT2X00_DEBUG is not set + CONFIG_WL_MEDIATEK=y + CONFIG_MT7601U=m +-CONFIG_RTL_CARDS=m +-CONFIG_RTL8192CE=m +-CONFIG_RTL8192SE=m +-CONFIG_RTL8192DE=m +-CONFIG_RTL8723AE=m +-CONFIG_RTL8723BE=m +-CONFIG_RTL8188EE=m +-CONFIG_RTL8192EE=m +-CONFIG_RTL8821AE=m ++CONFIG_RTL8XXXU=m ++CONFIG_RTL8XXXU_UNTESTED=y + CONFIG_RTL8192CU=m +-CONFIG_RTLWIFI=m +-CONFIG_RTLWIFI_PCI=m +-CONFIG_RTLWIFI_USB=m +-CONFIG_RTLWIFI_DEBUG=y +-CONFIG_RTL8192C_COMMON=m +-CONFIG_RTL8723_COMMON=m +-CONFIG_RTLBTCOEXIST=m +-# CONFIG_RTL8XXXU is not set + CONFIG_WL_TI=y + CONFIG_WL1251=m + CONFIG_WL1251_SPI=m +@@ -2619,6 +2600,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 + CONFIG_INPUT_JOYDEV=m + CONFIG_INPUT_EVDEV=y + CONFIG_INPUT_EVBUG=m ++# CONFIG_INPUT_APMPOWER is not set + + # + # Input Device Drivers +@@ -3007,7 +2989,6 @@ CONFIG_I2C_SLAVE_EEPROM=m + # CONFIG_I2C_DEBUG_ALGO is not set + # CONFIG_I2C_DEBUG_BUS is not set + CONFIG_SPI=y +-# CONFIG_SPI_DEBUG is not set + CONFIG_SPI_MASTER=y + + # +@@ -3016,8 +2997,8 @@ CONFIG_SPI_MASTER=y + # CONFIG_SPI_ALTERA is not set + CONFIG_SPI_BITBANG=y + # CONFIG_SPI_CADENCE is not set +-CONFIG_SPI_GPIO=y +-CONFIG_SPI_IMX=m ++# CONFIG_SPI_GPIO is not set ++CONFIG_SPI_IMX=y + # CONFIG_SPI_FSL_SPI is not set + # CONFIG_SPI_OC_TINY is not set + CONFIG_SPI_ORION=m +@@ -3043,13 +3024,14 @@ CONFIG_SPI_SPIDEV=y + # + CONFIG_PPS=y + # CONFIG_PPS_DEBUG is not set ++CONFIG_NTP_PPS=y + + # + # PPS clients support + # + # CONFIG_PPS_CLIENT_KTIMER is not set +-CONFIG_PPS_CLIENT_LDISC=m +-CONFIG_PPS_CLIENT_GPIO=m ++CONFIG_PPS_CLIENT_LDISC=y ++CONFIG_PPS_CLIENT_GPIO=y + + # + # PPS generators support +@@ -3060,10 +3042,7 @@ CONFIG_PPS_CLIENT_GPIO=m + # + CONFIG_PTP_1588_CLOCK=y + CONFIG_PTP_1588_CLOCK_GIANFAR=y +- +-# +-# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +-# ++# CONFIG_DP83640_PHY is not set + CONFIG_PINCTRL=y + + # +@@ -3072,7 +3051,6 @@ CONFIG_PINCTRL=y + CONFIG_PINMUX=y + CONFIG_PINCONF=y + CONFIG_GENERIC_PINCONF=y +-# CONFIG_DEBUG_PINCTRL is not set + # CONFIG_PINCTRL_AMD is not set + CONFIG_PINCTRL_SINGLE=y + CONFIG_PINCTRL_IMX=y +@@ -3087,7 +3065,6 @@ CONFIG_GPIOLIB=y + CONFIG_GPIO_DEVRES=y + CONFIG_OF_GPIO=y + CONFIG_GPIOLIB_IRQCHIP=y +-# CONFIG_DEBUG_GPIO is not set + CONFIG_GPIO_SYSFS=y + CONFIG_GPIO_GENERIC=y + +@@ -3101,6 +3078,7 @@ CONFIG_GPIO_74XX_MMIO=y + CONFIG_GPIO_GENERIC_PLATFORM=y + # CONFIG_GPIO_GRGPIO is not set + CONFIG_GPIO_MVEBU=y ++CONFIG_GPIO_MVEBU_PWM=y + CONFIG_GPIO_MXC=y + CONFIG_GPIO_SYSCON=y + # CONFIG_GPIO_VX855 is not set +@@ -3181,6 +3159,7 @@ CONFIG_W1_SLAVE_BQ27000=m + CONFIG_POWER_SUPPLY=y + # CONFIG_POWER_SUPPLY_DEBUG is not set + # CONFIG_PDA_POWER is not set ++# CONFIG_APM_POWER is not set + # CONFIG_GENERIC_ADC_BATTERY is not set + CONFIG_TEST_POWER=m + # CONFIG_BATTERY_88PM860X is not set +@@ -4830,7 +4809,7 @@ CONFIG_USB_XHCI_MVEBU=y + CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_ROOT_HUB_TT=y + CONFIG_USB_EHCI_TT_NEWSCHED=y +-CONFIG_USB_FSL_MPH_DR_OF=m ++CONFIG_USB_FSL_MPH_DR_OF=y + CONFIG_USB_EHCI_PCI=y + CONFIG_USB_EHCI_MXC=y + CONFIG_USB_EHCI_HCD_ORION=y +@@ -5044,7 +5023,6 @@ CONFIG_USB_ISP1301=y + CONFIG_USB_MXS_PHY=y + # CONFIG_USB_ULPI is not set + CONFIG_USB_GADGET=y +-# CONFIG_USB_GADGET_DEBUG is not set + # CONFIG_USB_GADGET_DEBUG_FILES is not set + # CONFIG_USB_GADGET_DEBUG_FS is not set + CONFIG_USB_GADGET_VBUS_DRAW=2 +@@ -5053,7 +5031,7 @@ CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 + # + # USB Peripheral Controller + # +-CONFIG_USB_FSL_USB2=m ++CONFIG_USB_FSL_USB2=y + # CONFIG_USB_FUSB300 is not set + # CONFIG_USB_FOTG210_UDC is not set + # CONFIG_USB_GR_UDC is not set +@@ -5099,6 +5077,7 @@ CONFIG_USB_CONFIGFS_ECM=y + CONFIG_USB_CONFIGFS_ECM_SUBSET=y + CONFIG_USB_CONFIGFS_RNDIS=y + CONFIG_USB_CONFIGFS_EEM=y ++# CONFIG_USB_CONFIGFS_PHONET is not set + CONFIG_USB_CONFIGFS_MASS_STORAGE=y + CONFIG_USB_CONFIGFS_F_LB_SS=y + CONFIG_USB_CONFIGFS_F_FS=y +@@ -5126,6 +5105,7 @@ CONFIG_USB_G_SERIAL=m + CONFIG_USB_MIDI_GADGET=m + CONFIG_USB_G_PRINTER=m + CONFIG_USB_CDC_COMPOSITE=m ++# CONFIG_USB_G_NOKIA is not set + CONFIG_USB_G_ACM_MS=m + CONFIG_USB_G_MULTI=m + CONFIG_USB_G_MULTI_RNDIS=y +@@ -5531,11 +5511,14 @@ CONFIG_DVB_MN88473=m + CONFIG_LIRC_STAGING=y + CONFIG_LIRC_BT829=m + CONFIG_LIRC_IMON=m ++CONFIG_LIRC_HB=m ++CONFIG_LIRC_XBOX=m + CONFIG_LIRC_SASEM=m + CONFIG_LIRC_SERIAL=m + CONFIG_LIRC_SERIAL_TRANSMITTER=y + CONFIG_LIRC_SIR=m + CONFIG_LIRC_ZILOG=m ++CONFIG_LIRC_ATIUSB=m + + # + # Android +@@ -6177,7 +6160,6 @@ CONFIG_NFSD_V3=y + CONFIG_NFSD_V3_ACL=y + CONFIG_NFSD_V4=y + # CONFIG_NFSD_PNFS is not set +-# CONFIG_NFSD_FAULT_INJECTION is not set + CONFIG_GRACE_PERIOD=y + CONFIG_LOCKD=y + CONFIG_LOCKD_V4=y +@@ -6274,83 +6256,47 @@ CONFIG_DLM=m + # + CONFIG_PRINTK_TIME=y + CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +-# CONFIG_BOOT_PRINTK_DELAY is not set + CONFIG_DYNAMIC_DEBUG=y + + # + # Compile-time checks and compiler options + # +-# CONFIG_DEBUG_INFO is not set + CONFIG_ENABLE_WARN_DEPRECATED=y + CONFIG_ENABLE_MUST_CHECK=y + CONFIG_FRAME_WARN=1024 + CONFIG_STRIP_ASM_SYMS=y +-# CONFIG_READABLE_ASM is not set + # CONFIG_UNUSED_SYMBOLS is not set +-# CONFIG_PAGE_OWNER is not set + CONFIG_DEBUG_FS=y + # CONFIG_HEADERS_CHECK is not set + # CONFIG_DEBUG_SECTION_MISMATCH is not set + CONFIG_SECTION_MISMATCH_WARN_ONLY=y + CONFIG_FRAME_POINTER=y +-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set + CONFIG_MAGIC_SYSRQ=y + CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 +-CONFIG_DEBUG_KERNEL=y ++# CONFIG_DEBUG_KERNEL is not set + + # + # Memory Debugging + # + # CONFIG_PAGE_EXTENSION is not set +-# CONFIG_DEBUG_PAGEALLOC is not set +-# CONFIG_DEBUG_OBJECTS is not set + # CONFIG_SLUB_STATS is not set + CONFIG_HAVE_DEBUG_KMEMLEAK=y +-# CONFIG_DEBUG_KMEMLEAK is not set +-# CONFIG_DEBUG_STACK_USAGE is not set +-# CONFIG_DEBUG_VM is not set + # CONFIG_DEBUG_MEMORY_INIT is not set +-# CONFIG_DEBUG_PER_CPU_MAPS is not set +-# CONFIG_DEBUG_HIGHMEM is not set +-# CONFIG_DEBUG_SHIRQ is not set + + # + # Debug Lockups and Hangs + # +-# CONFIG_LOCKUP_DETECTOR is not set +-# CONFIG_DETECT_HUNG_TASK is not set + CONFIG_PANIC_ON_OOPS=y + CONFIG_PANIC_ON_OOPS_VALUE=1 + CONFIG_PANIC_TIMEOUT=1 +-# CONFIG_SCHED_DEBUG is not set + # CONFIG_SCHED_INFO is not set +-# CONFIG_SCHEDSTATS is not set +-# CONFIG_SCHED_STACK_END_CHECK is not set + # CONFIG_DEBUG_TIMEKEEPING is not set +-CONFIG_TIMER_STATS=y +-# CONFIG_DEBUG_PREEMPT is not set + + # + # Lock Debugging (spinlocks, mutexes, etc...) + # +-# CONFIG_DEBUG_RT_MUTEXES is not set +-# CONFIG_DEBUG_SPINLOCK is not set +-# CONFIG_DEBUG_MUTEXES is not set +-# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +-# CONFIG_DEBUG_LOCK_ALLOC is not set +-# CONFIG_PROVE_LOCKING is not set +-# CONFIG_LOCK_STAT is not set +-# CONFIG_DEBUG_ATOMIC_SLEEP is not set +-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +-# CONFIG_LOCK_TORTURE_TEST is not set + CONFIG_STACKTRACE=y +-# CONFIG_DEBUG_KOBJECT is not set +-# CONFIG_DEBUG_BUGVERBOSE is not set +-# CONFIG_DEBUG_LIST is not set +-# CONFIG_DEBUG_PI_LIST is not set +-# CONFIG_DEBUG_SG is not set +-# CONFIG_DEBUG_NOTIFIERS is not set +-# CONFIG_DEBUG_CREDENTIALS is not set ++CONFIG_DEBUG_BUGVERBOSE=y + + # + # RCU Debugging +@@ -6358,13 +6304,7 @@ CONFIG_STACKTRACE=y + # CONFIG_PROVE_RCU is not set + # CONFIG_SPARSE_RCU_POINTER is not set + # CONFIG_TORTURE_TEST is not set +-# CONFIG_RCU_TORTURE_TEST is not set + CONFIG_RCU_CPU_STALL_TIMEOUT=21 +-# CONFIG_RCU_TRACE is not set +-# CONFIG_RCU_EQS_DEBUG is not set +-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +-# CONFIG_NOTIFIER_ERROR_INJECTION is not set +-# CONFIG_FAULT_INJECTION is not set + CONFIG_NOP_TRACER=y + CONFIG_HAVE_FUNCTION_TRACER=y + CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +@@ -6409,11 +6349,6 @@ CONFIG_FTRACE_MCOUNT_RECORD=y + # Runtime Testing + # + # CONFIG_LKDTM is not set +-# CONFIG_TEST_LIST_SORT is not set +-# CONFIG_BACKTRACE_SELF_TEST is not set +-# CONFIG_RBTREE_TEST is not set +-# CONFIG_INTERVAL_TREE_TEST is not set +-# CONFIG_PERCPU_TEST is not set + # CONFIG_ATOMIC64_SELFTEST is not set + # CONFIG_ASYNC_RAID6_TEST is not set + # CONFIG_TEST_HEXDUMP is not set +@@ -6431,17 +6366,13 @@ CONFIG_FTRACE_MCOUNT_RECORD=y + # CONFIG_TEST_STATIC_KEYS is not set + # CONFIG_SAMPLES is not set + CONFIG_HAVE_ARCH_KGDB=y +-# CONFIG_KGDB is not set +-# CONFIG_ARM_PTDUMP is not set + # CONFIG_STRICT_DEVMEM is not set + CONFIG_ARM_UNWIND=y + CONFIG_OLD_MCOUNT=y + # CONFIG_DEBUG_USER is not set +-# CONFIG_DEBUG_LL is not set + CONFIG_DEBUG_IMX_UART_PORT=1 + CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" + # CONFIG_DEBUG_UART_8250 is not set +-# CONFIG_DEBUG_UART_BCM63XX is not set + CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" + # CONFIG_PID_IN_CONTEXTIDR is not set + # CONFIG_DEBUG_SET_MODULE_RONX is not set + +From 833b5806b812ad66ada5331c86256c1d43e34505 Mon Sep 17 00:00:00 2001 +From: Troy Kisky +Date: Mon, 8 Jun 2015 09:49:47 -0700 +Subject: [PATCH 11/13] fec: Russell Kings corruption fix + +(cherry picked from commit 43e7d29fd2c0df374a95341146991cc449c016b7) +Signed-off-by: Matus Kral +--- + drivers/net/ethernet/freescale/fec_main.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c +index d9f1ab3..55bab37 100644 +--- a/drivers/net/ethernet/freescale/fec_main.c ++++ b/drivers/net/ethernet/freescale/fec_main.c +@@ -1237,8 +1237,7 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_id) + skb = txq->tx_skbuff[index]; + bdnum++; + } +- if (skb_shinfo(skb)->nr_frags && +- (status = bdp_t->cbd_sc) & BD_ENET_TX_READY) ++ if ((status = bdp_t->cbd_sc) & BD_ENET_TX_READY) + break; + + for (i = 0; i < bdnum; i++) { + +From 1a8873f4490146dc03361d30e2d263b823579546 Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Thu, 14 Apr 2016 03:12:49 +0200 +Subject: [PATCH 12/13] sdhci-esdhc-imx: add SDHCI_QUIRK2_TUNING_WORK_AROUND + for imx6q + +--- + drivers/mmc/host/sdhci-esdhc-imx.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c +index 5e23d78..83632d2 100644 +--- a/drivers/mmc/host/sdhci-esdhc-imx.c ++++ b/drivers/mmc/host/sdhci-esdhc-imx.c +@@ -136,6 +136,7 @@ + #define ESDHC_FLAG_HS200 BIT(8) + /* The IP supports HS400 mode */ + #define ESDHC_FLAG_HS400 BIT(9) ++#define ESDHC_FLAG_TUNING_WORK_AROUND BIT(10) + + /* A higher clock ferquency than this rate requires strobell dll control */ + #define ESDHC_STROBE_DLL_CLK_FREQ 100000000 +@@ -161,7 +162,8 @@ static struct esdhc_soc_data esdhc_imx53_data = { + }; + + static struct esdhc_soc_data usdhc_imx6q_data = { +- .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_MAN_TUNING, ++ .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_MAN_TUNING ++ | ESDHC_FLAG_TUNING_WORK_AROUND, + }; + + static struct esdhc_soc_data usdhc_imx6sl_data = { +@@ -1020,6 +1022,9 @@ sdhci_esdhc_imx_probe_dt(struct platform_device *pdev, + if (!IS_ERR_VALUE(mmc_gpio_get_cd(host->mmc))) + host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION; + ++ if (imx_data->socdata->flags & ESDHC_FLAG_TUNING_WORK_AROUND) ++ host->quirks2 |= SDHCI_QUIRK2_TUNING_WORK_AROUND; ++ + return 0; + } + #else + +From ade5a7b4a7dec8272815ee4253c32427b1e9310c Mon Sep 17 00:00:00 2001 +From: Matus Kral +Date: Thu, 14 Apr 2016 03:14:31 +0200 +Subject: [PATCH 13/13] mxc_hdmi: edit after + 940144cad331dedf7a6f8b38cb28c16a1d11d03f + +--- + drivers/video/mxc/mxc_hdmi.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/video/mxc/mxc_hdmi.c b/drivers/video/mxc/mxc_hdmi.c +index df91138..5cc3c54 100644 +--- a/drivers/video/mxc/mxc_hdmi.c ++++ b/drivers/video/mxc/mxc_hdmi.c +@@ -2296,6 +2296,8 @@ static void mxc_hdmi_set_mode(struct mxc_hdmi *hdmi, int edid_status) + dev_dbg(&hdmi->pdev->dev, "%s: New video mode\n", __func__); + } + ++ hdmi_set_cable_state(1); ++ + console_lock(); + fb_blank(hdmi->fbi, FB_BLANK_UNBLANK); + console_unlock(); +@@ -2311,8 +2313,6 @@ static int mxc_hdmi_cable_connected(struct mxc_hdmi *hdmi) + + dev_dbg(&hdmi->pdev->dev, "%s\n", __func__); + +- hdmi_set_cable_state(1); +- + hdmi->hp_state = HDMI_HOTPLUG_CONNECTED_NO_EDID; + memcpy(edid_old, hdmi->edid, HDMI_EDID_LEN); +