config FIQ_GLUE
bool
select FIQ
- config FIQ_DEBUGGER
- bool "FIQ Mode Serial Debugger"
- select FIQ
- select FIQ_GLUE
- default n
- help
- The FIQ serial debugger can accept commands even when the
- kernel is unresponsive due to being stuck with interrupts
- disabled.
-
-
- config FIQ_DEBUGGER_NO_SLEEP
- bool "Keep serial debugger active"
- depends on FIQ_DEBUGGER
- default n
- help
- Enables the serial debugger at boot. Passing
- fiq_debugger.no_sleep on the kernel commandline will
- override this config option.
-
- config FIQ_DEBUGGER_WAKEUP_IRQ_ALWAYS_ON
- bool "Don't disable wakeup IRQ when debugger is active"
- depends on FIQ_DEBUGGER
- default n
- help
- Don't disable the wakeup irq when enabling the uart clock. This will
- cause extra interrupts, but it makes the serial debugger usable with
- on some MSM radio builds that ignore the uart clock request in power
- collapse.
-
- config FIQ_DEBUGGER_CONSOLE
- bool "Console on FIQ Serial Debugger port"
- depends on FIQ_DEBUGGER
- default n
- help
- Enables a console so that printk messages are displayed on
- the debugger serial port as the occur.
-
- config FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE
- bool "Put the FIQ debugger into console mode by default"
- depends on FIQ_DEBUGGER_CONSOLE
- default n
- help
- If enabled, this puts the fiq debugger into console mode by default.
- Otherwise, the fiq debugger will start out in debug mode.
-
+
+config GIC_SET_MULTIPLE_CPUS
+ bool "Use affinity hint to allow multiple CPUs for IRQ"
+ depends on ARM_GIC && SMP
+ default n
+ help
+ IRQ affinity is always set by gic to the 1st cpu in the requested
+ mask. If this option is enabled, affinity is also set to all cpus
+ present in affinity_hint and requested masks.
libs-y += $(LIBGCC)
# Default target when executing plain make
+ ifeq ($(CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE),y)
+ KBUILD_IMAGE := Image.gz-dtb
+ else
KBUILD_IMAGE := Image.gz
+ endif
+
KBUILD_DTBS := dtbs
-all: $(KBUILD_IMAGE) $(KBUILD_DTBS)
+all: $(KBUILD_IMAGE) $(KBUILD_DTBS) zImage
boot := arch/arm64/boot
# Based on the ia64 boot/Makefile.
#
-targets := Image Image.gz
+ include $(srctree)/arch/arm64/boot/dts/Makefile
+
+targets := Image Image.gz zImage
+ DTB_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES))
+ ifneq ($(DTB_NAMES),)
+ DTB_LIST := $(addsuffix .dtb,$(DTB_NAMES))
+ else
+ DTB_LIST := $(dtb-y)
+ endif
+ DTB_OBJS := $(addprefix $(obj)/dts/,$(DTB_LIST))
+
$(obj)/Image: vmlinux FORCE
$(call if_changed,objcopy)
$(obj)/Image.gz: $(obj)/Image FORCE
$(call if_changed,gzip)
+$(obj)/zImage: $(obj)/Image FORCE
+ $(call if_changed,gzip)
+
+ $(obj)/Image.gz-dtb: $(obj)/Image.gz $(DTB_OBJS) FORCE
+ $(call if_changed,cat)
+
install: $(obj)/Image
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
$(obj)/Image System.map "$(INSTALL_PATH)"
dtb-$(CONFIG_ARCH_VEXPRESS) += rtsm_ve-aemv8a.dtb foundation-v8.dtb
targets += dtbs
+dtb-$(CONFIG_MACH_EXUMA) += tegra132-exuma.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-norrin-pm374-0001-a00-00.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-norrin-pm374-0001-a01-00.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-norrin-tegrasim.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-laguna.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-bowmore-e1973-1000-a01-00.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-bowmore-e1971-1100-a00-00.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-bowmore-e1971-1100-a00-00-pcie.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-bowmore-e1971-1100-a00-00-battery.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-bowmore-e1971-1100-a00-00-powerconfig.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-tn8-p1761-1270-a03-battery.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-tn8-p1761-1270-a03.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-interposer-e2141-1100-a00-00.dtb
+dtb-$(CONFIG_MACH_T132REF) += tegra132-interposer-e2141-1100-a00-00-battery.dtb
+dtb-$(CONFIG_MACH_GRENADA) += tegra210-grenada.dtb
+dtb-$(CONFIG_MACH_GRENADA) += tegra210-ers-e2190-1100-a00-00.dtb
+dtb-$(CONFIG_MACH_GRENADA) += tegra210-ers-e2220-1100-a00-00.dtb
+dtb-$(CONFIG_ARCH_TEGRA_18x_SOC) += tegra186-sim.dtb
+targets += $(dtb-y)
+
+DTC_FLAGS := -i $(srctree)/arch/arm/boot/dts
+ifeq ($(CONFIG_ARCH_TEGRA_18x_SOC),y)
+DTC_FLAGS += -i $(srctree)/../kernel-t18x/arch/arm64/boot/dts
+endif
+
+DTCCPP_FLAGS := -I$(srctree)/arch/arm/boot/dts
+ifeq ($(CONFIG_ARCH_TEGRA_18x_SOC),y)
+DTCCPP_FLAGS += -I$(srctree)/../kernel-t18x/arch/arm64/boot/dts
+endif
-dtbs: $(addprefix $(obj)/, $(DTB_LIST))
+ DTB_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES))
+ ifneq ($(DTB_NAMES),)
+ DTB_LIST := $(addsuffix .dtb,$(DTB_NAMES))
+ else
+ DTB_LIST := $(dtb-y)
+ endif
+ targets += $(DTB_LIST)
+
+dtbs: $(addprefix $(obj)/, $(dtb-y))
- clean-files := *.dtb
+ clean-files := dts/*.dtb *.dtb
spinlock_t load_lock; /* protects the next 4 fields */
u64 time_in_idle;
u64 time_in_idle_timestamp;
+ u64 time_in_iowait;
u64 cputime_speedadj;
u64 cputime_speedadj_timestamp;
+ unsigned int io_consecutive;
struct cpufreq_policy *policy;
struct cpufreq_frequency_table *freq_table;
+ spinlock_t target_freq_lock; /*protects target freq */
unsigned int target_freq;
unsigned int floor_freq;
+ unsigned int max_freq;
u64 floor_validate_time;
u64 hispeed_validate_time;
struct rw_semaphore enable_sem;
ktime_to_us(ktime_get());
pcpu->hispeed_validate_time =
pcpu->floor_validate_time;
+ pcpu->max_freq = policy->max;
down_write(&pcpu->enable_sem);
- del_timer_sync(&pcpu->cpu_timer);
- del_timer_sync(&pcpu->cpu_slack_timer);
cpufreq_interactive_timer_start(tunables, j);
pcpu->governor_enabled = 1;
up_write(&pcpu->enable_sem);
spin_unlock(&cpufreq_stats_lock);
return 0;
}
- if (stat->time_in_state) {
+
- if (stat->time_in_state && stat->last_index >= 0)
++ if (stat->time_in_state && stat->last_index >= 0) {
stat->time_in_state[stat->last_index] +=
cur_time - stat->last_time;
+ if (all_stat)
+ all_stat->time_in_state[stat->last_index] +=
+ cur_time - stat->last_time;
+ }
stat->last_time = cur_time;
spin_unlock(&cpufreq_stats_lock);
return 0;
To compile this driver as a module, choose M here: the
module will be called keyreset.
+config INPUT_CFBOOST
+ tristate "Input event CPU frequency booster"
+ depends on INPUT && CPU_FREQ
+ help
+ Say Y here if you want to temporarily boost CPU frequency upon input
+ events.
+
+ To compile this driver as a module, choose M here: the
+ module will be called input-cfboost.
+
+ config INPUT_KEYCOMBO
+ tristate "Key combo"
+ depends on INPUT
+ ---help---
+ Say Y here if you want to take action when some keys are pressed;
+
+ To compile this driver as a module, choose M here: the
+ module will be called keycombo.
+
comment "Input Device Drivers"
source "drivers/input/keyboard/Kconfig"
obj-$(CONFIG_INPUT_APMPOWER) += apm-power.o
obj-$(CONFIG_INPUT_KEYRESET) += keyreset.o
-obj-$(CONFIG_INPUT_KEYCOMBO) += keycombo.o
+obj-$(CONFIG_INPUT_CFBOOST) += input-cfboost.o
++
++obj-$(CONFIG_INPUT_KEYCOMBO) += keycombo.o
platform_set_drvdata(pdev, state);
spin_lock_init(&state->sleep_timer_lock);
+ spin_lock_init(&state->debug_fiq_lock);
- if (state->wakeup_irq < 0 && debug_have_fiq(state))
+ if (state->wakeup_irq < 0 && fiq_debugger_have_fiq(state))
state->no_sleep = true;
state->ignore_next_wakeup_irq = !state->no_sleep;
extern int of_flat_dt_match(unsigned long node, const char *const *matches);
extern unsigned long of_get_flat_dt_root(void);
+ /*
+ * early_init_dt_scan_chosen - scan the device tree for ramdisk and bootargs
+ *
+ * The boot arguments will be placed into the memory pointed to by @data.
+ * That memory should be COMMAND_LINE_SIZE big and initialized to be a valid
+ * (possibly empty) string. Logic for what will be in @data after this
+ * function finishes:
+ *
+ * - CONFIG_CMDLINE_FORCE=true
+ * CONFIG_CMDLINE
+ * - CONFIG_CMDLINE_EXTEND=true, @data is non-empty string
+ * @data + dt bootargs (even if dt bootargs are empty)
+ * - CONFIG_CMDLINE_EXTEND=true, @data is empty string
+ * CONFIG_CMDLINE + dt bootargs (even if dt bootargs are empty)
+ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=non-empty:
+ * dt bootargs
+ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is non-empty string
+ * @data is left unchanged
+ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is empty string
+ * CONFIG_CMDLINE (or "" if that's not defined)
+ */
extern int early_init_dt_scan_chosen(unsigned long node, const char *uname,
int depth, void *data);
-extern void early_init_dt_check_for_initrd(unsigned long node);
extern int early_init_dt_scan_memory(unsigned long node, const char *uname,
int depth, void *data);
extern void early_init_dt_add_memory_arch(u64 base, u64 size);
#include <linux/workqueue.h>
#include <linux/leds.h>
+#include <linux/errno.h>
+ #include <linux/types.h>
struct device;
flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos,
RT_SCOPE_UNIVERSE,
inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol,
- inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP,
+ inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP |
+ (inet->hdrincl ? FLOWI_FLAG_KNOWN_NH : 0),
- daddr, saddr, 0, 0);
+ daddr, saddr, 0, 0,
+ sock_i_uid(sk));
if (!inet->hdrincl) {
err = raw_probe_proto_opt(&fl4, msg);
prefix = &prefix_buf;
}
- rt = rt6_get_route_info(dev, prefix, rinfo->prefix_len, gwaddr);
+ if (rinfo->prefix_len == 0)
+ rt = rt6_get_dflt_router(gwaddr, dev);
+ else
- rt = rt6_get_route_info(net, prefix, rinfo->prefix_len,
- gwaddr, dev->ifindex);
++ rt = rt6_get_route_info(dev, prefix, rinfo->prefix_len, gwaddr);
if (rt && !lifetime) {
ip6_del_rt(rt);