diff options
Diffstat (limited to 'arch')
99 files changed, 15735 insertions, 312 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 136f263ed47..f414eaa38e5 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -265,6 +265,14 @@ config GENERIC_BUG  	def_bool y  	depends on BUG +config BOOTINFO +	bool "Boot Information Feature" +	default n +	help +	  This feature provides access to certain boot information +	  from both kernel context (via function call) and user +	  context (via /proc/bootinfo). +  source "init/Kconfig"  source "kernel/Kconfig.freezer" @@ -1819,6 +1827,15 @@ config XEN  	help  	  Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. +config ARM_FLUSH_CONSOLE_ON_RESTART +	bool "Force flush the console on restart" +	help +	  If the console is locked while the system is rebooted, the messages +	  in the temporary logbuffer would not have propogated to all the +	  console drivers. This option forces the console lock to be +	  released if it failed to be acquired, which will cause all the +	  pending messages to be flushed. +  endmenu  menu "Boot options" @@ -1831,6 +1848,21 @@ config USE_OF  	help  	  Include support for flattened device tree machine descriptions. +config BUILD_ARM_APPENDED_DTB_IMAGE +	bool "Build a concatenated zImage/dtb by default" +	depends on OF +	help +	  Enabling this option will cause a concatenated zImage and list of +	  DTBs to be built by default (instead of a standalone zImage.) +	  The image will built in arch/arm/boot/zImage-dtb + +config BUILD_ARM_APPENDED_DTB_IMAGE_NAMES +	string "Default dtb names" +	depends on BUILD_ARM_APPENDED_DTB_IMAGE +	help +	  Space separated list of names of dtbs to append when +	  building a concatenated zImage-dtb. +  config ATAGS  	bool "Support for the traditional ATAGS boot data passing" if USE_OF  	default y @@ -1848,6 +1880,21 @@ config DEPRECATED_PARAM_STRUCT  	  This was deprecated in 2001 and announced to live on for 5 years.  	  Some old boot loaders still use this way. +config BUILD_ARM_APPENDED_DTB_IMAGE +	bool "Build a concatenated zImage/dtb by default" +	depends on OF +	help +	  Enabling this option will cause a concatenated zImage and list of +	  DTBs to be built by default (instead of a standalone zImage.) +	  The image will built in arch/arm/boot/zImage-dtb + +config BUILD_ARM_APPENDED_DTB_IMAGE_NAMES +	string "Default dtb names" +	depends on BUILD_ARM_APPENDED_DTB_IMAGE +	help +	  Space separated list of names of dtbs to append when +	  building a concatenated zImage-dtb. +  # Compressed boot loader in ROM.  Yes, we really want to ask about  # TEXT and BSS so we preserve their values in the config files.  config ZBOOT_ROM_TEXT diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 1d41908d5cd..a640f09ec84 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -63,6 +63,27 @@ config DEBUG_USER  	      8 - SIGSEGV faults  	     16 - SIGBUS faults +config DEBUG_RODATA +	bool "Write protect kernel text section" +	default n +	depends on DEBUG_KERNEL && MMU +	---help--- +	  Mark the kernel text section as write-protected in the pagetables, +	  in order to catch accidental (and incorrect) writes to such const +	  data. This will cause the size of the kernel, plus up to 4MB, to +	  be mapped as pages instead of sections, which will increase TLB +	  pressure. +	  If in doubt, say "N". + +config DEBUG_RODATA_TEST +	bool "Testcase for the DEBUG_RODATA feature" +	depends on DEBUG_RODATA +	default n +	---help--- +	  This option enables a testcase for the DEBUG_RODATA +	  feature. +	  If in doubt, say "N" +  # These options are only for real kernel hackers who want to get their hands dirty.  config DEBUG_LL  	bool "Kernel low-level debugging functions (read help!)" @@ -669,6 +690,14 @@ config EARLY_PRINTK  	  kernel low-level debugging functions. Add earlyprintk to your  	  kernel parameters to enable this console. +config EARLY_PRINTK_DIRECT +	bool "Early printk direct" +	depends on DEBUG_LL +	help +	  Say Y here if you want to have an early console using the +	  kernel low-level debugging functions and EARLY_PRINTK is +	  not early enough. +  config OC_ETM  	bool "On-chip ETM and ETB"  	depends on ARM_AMBA diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 1ba358ba16b..7278619f549 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -264,6 +264,8 @@ libs-y				:= arch/arm/lib/ $(libs-y)  # Default target when executing plain make  ifeq ($(CONFIG_XIP_KERNEL),y)  KBUILD_IMAGE := xipImage +else ifeq ($(CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE),y) +KBUILD_IMAGE := zImage-dtb  else  KBUILD_IMAGE := zImage  endif @@ -295,6 +297,12 @@ zinstall uinstall install: vmlinux  dtbs: scripts  	$(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) dtbs +dtb_list: dtbs +	$(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) $(boot)/dts/$@ + +zImage-dtb: vmlinux dtb_list scripts +	$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ +  # We use MRPROPER_FILES and CLEAN_FILES now  archclean:  	$(Q)$(MAKE) $(clean)=$(boot) diff --git a/arch/arm/boot/.gitignore b/arch/arm/boot/.gitignore index 3c79f85975a..765c29a1e6d 100644 --- a/arch/arm/boot/.gitignore +++ b/arch/arm/boot/.gitignore @@ -1,6 +1,8 @@  Image  zImage +zImage-dtb  xipImage  bootpImage  uImage  *.dtb +zImage-dtb diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index 84aa2caf07e..b66f57dbf75 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile @@ -14,6 +14,7 @@  ifneq ($(MACHINE),)  include $(srctree)/$(MACHINE)/Makefile.boot  endif +include $(srctree)/arch/arm/boot/dts/Makefile  # Note: the following conditions must always be true:  #   ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) @@ -25,7 +26,16 @@ INITRD_PHYS := $(initrd_phys-y)  export ZRELADDR INITRD_PHYS PARAMS_PHYS -targets := Image zImage xipImage bootpImage uImage +targets := Image zImage xipImage bootpImage uImage zImage-dtb + + +DTB_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM_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))  ifeq ($(CONFIG_XIP_KERNEL),y) @@ -55,6 +65,10 @@ $(obj)/zImage:	$(obj)/compressed/vmlinux FORCE  	$(call if_changed,objcopy)  	@$(kecho) '  Kernel: $@ is ready' +$(obj)/zImage-dtb:	$(obj)/zImage $(obj)/dts/dtb_list FORCE +	$(call if_changed,cat64) +	@$(kecho) '  Kernel: $@ is ready' +  endif  ifneq ($(LOADADDR),) diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 032a8d98714..a7cd6738388 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -717,6 +717,8 @@ __armv7_mmu_cache_on:  		bic     r6, r6, #1 << 31        @ 32-bit translation system  		bic     r6, r6, #3 << 0         @ use only ttbr0  		mcrne	p15, 0, r3, c2, c0, 0	@ load page table pointer +		mcrne	p15, 0, r0, c8, c7, 0	@ flush I,D TLBs +		mcr	p15, 0, r0, c7, c5, 4	@ ISB  		mcrne	p15, 0, r1, c3, c0, 0	@ load domain access control  		mcrne   p15, 0, r6, c2, c0, 2   @ load ttb control  #endif diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index f0895c581a8..ebd3b406229 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -1,5 +1,13 @@  ifeq ($(CONFIG_OF),y) +DTB_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE_NAMES)) +ifneq ($(DTB_NAMES),) +DTB_LIST := $(addsuffix .dtb,$(DTB_NAMES)) +else +DTB_LIST := $(dtb-y) +endif +DTB_OBJS := $(addprefix $(obj)/,$(DTB_LIST)) +  # Keep at91 dtb files sorted alphabetically for each SoC  # rm9200  dtb-$(CONFIG_ARCH_AT91) += at91rm9200ek.dtb @@ -153,6 +161,8 @@ dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \  	am335x-evm.dtb \  	am335x-evmsk.dtb \  	am335x-bone.dtb +dtb-$(CONFIG_MACH_OMAP3_H1) += omap3-h1-ev1.dtb +dtb-$(CONFIG_MACH_MINNOW) += omap3-minnow-p0.dtb omap3-casper-p1.dtb  dtb-$(CONFIG_ARCH_ORION5X) += orion5x-lacie-ethernet-disk-mini-v2.dtb  dtb-$(CONFIG_ARCH_PRIMA2) += prima2-evb.dtb  dtb-$(CONFIG_ARCH_U8500) += snowball.dtb \ @@ -210,13 +220,26 @@ dtb-$(CONFIG_ARCH_VT8500) += vt8500-bv07.dtb \  	wm8850-w70v2.dtb  dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb +DTB_NAMES := $(subst $\",,$(CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE_NAMES)) +ifneq ($(DTB_NAMES),) +DTB_LIST := $(addsuffix .dtb,$(DTB_NAMES)) +else +DTB_LIST := $(dtb-y) +endif +  targets += dtbs -targets += $(dtb-y) +targets += $(DTB_LIST)  endif +$(obj)/dtb_list: $(DTB_OBJS) FORCE +	$(call if_changed,cat64) + +#$(srctree)/scripts/dtcat.py $(obj)/../zImage $(DTB_OBJS) > $@ +  # *.dtb used to be generated in the directory above. Clean out the  # old build results so people don't accidentally use them. -dtbs: $(addprefix $(obj)/, $(dtb-y)) +dtbs: $(DTB_OBJS)  	$(Q)rm -f $(obj)/../*.dtb  clean-files := *.dtb + diff --git a/arch/arm/boot/dts/omap3-h1-ev1.dts b/arch/arm/boot/dts/omap3-h1-ev1.dts new file mode 100644 index 00000000000..980c510d559 --- /dev/null +++ b/arch/arm/boot/dts/omap3-h1-ev1.dts @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 Olio Devices, Inc. + * Authors: Evan Wilson <evan@oliodevices.com> + *			Mattis Fjallstrom <mattis@oliodevices.com> + * + * Modified from omap3-beagle-xm.dts + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/dts-v1/; + +/include/ "omap36xx.dtsi" + +/ { +	model = "Olio OMAP3 H1 Board"; +	compatible = "olio,omap3-h1", "ti,omap3"; + +	cpus { +		cpu@0 { +			cpu0-supply = <&dummy>; +		}; +	}; +	 +	memory { +		device_type = "memory"; +		reg = <0x80000000 0x20000000>; /* 512 MB */ +	}; +	 +	dummy: fixedregulator@0 { +		compatible = "regulator-fixed"; +		regulator-name = "dummy"; +		regulator-boot-on; +	}; +}; + diff --git a/arch/arm/boot/dts/omap3-minnow-p0-p1a.dts b/arch/arm/boot/dts/omap3-minnow-p0-p1a.dts new file mode 100644 index 00000000000..b4f02fbfa6a --- /dev/null +++ b/arch/arm/boot/dts/omap3-minnow-p0-p1a.dts @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2013 Motorola Mobility LLC + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/dts-v1/; + +/include/ "omap3-minnow.dtsi" + +/ { +	mmi,revision = "p0"; +	mmi,hwrev = < +		0x00   /* Minnow P0 wingboard */ +		0x01   /* Minnow P0 portable */ +		0x03   /* Minnow P1A portable */ +		0x02   /* Minnow P1A CLK distributor test portable */ +	>; + +}; + +&spi_flash { +	m25p,m4sensorhub_cb; +}; + +&i2c1 { +	atmxt@4a { +		support-snowflake = <0>; +	}; +}; + +&ldo4_reg { +	regulator-always-on; +}; + +&tps65912_0 { +		register-init-data = < +                        0x06 0x7F /* DCDC1_LIMIT: 0.7V-1.4875V in 12.5mV steps */ +			0x25 0xD1 /* DEVCTRL2: enable SLEEP, INT push/pull +					       200us TSLOT, INT active high */ +			0x26 0x49 /* I2C_SPI_CFG: AVS ADDR = 0x13, +					DCDC1, DCDC4 is AVS ctrl */ +			0x29 0x10 /* SET_OFF1: LDO5 */ +			0x2A 0x24 /* SET_OFF2: DCDC1, DCDC4 */ +			0x2d 0x88 /* DISCHARGE1: Enable LDO4, LDO8 */ +			0x17 0xC0 /* LDO3_AVS b6=1 : ECO mode */ +			0x1f 0xf8 /* LDO8: b6=1 : ECO mode */ +			0x21 0xf2 /* LD10: b6=1 : ECO mode */ +		>; +		ldo9_loadswitch_enabled; +}; + +&dock_detect { +	old-hw; +}; diff --git a/arch/arm/boot/dts/omap3-minnow-p1b.dts b/arch/arm/boot/dts/omap3-minnow-p1b.dts new file mode 100644 index 00000000000..564485a210e --- /dev/null +++ b/arch/arm/boot/dts/omap3-minnow-p1b.dts @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2014 Motorola Mobility LLC + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/dts-v1/; + +/include/ "omap3-minnow.dtsi" + +/ { +	mmi,revision = "p1"; +	mmi,hwrev = < +		0x04   /* Minnow P1B portable */ +	>; + +	Display@0 { +		gpio_vio_en = <&gpio2 10 0>;    /* VDDIO gpio-42 */ +	}; + +}; + +&i2c1 { +	atmxt@4a { +		support-snowflake = <0>; +	}; +}; + +&ldo4_reg { +	regulator-always-on; +}; + +&tps65912_0 { +		register-init-data = < +                        0x06 0x7F /* DCDC1_LIMIT: 0.7V-1.4875V in 12.5mV steps */ +			0x25 0xD1 /* DEVCTRL2: enable SLEEP, INT push/pull +					       200us TSLOT, INT active high */ +			0x26 0x49 /* I2C_SPI_CFG: AVS ADDR = 0x13, +					DCDC1, DCDC4 is AVS ctrl */ +			0x29 0x10 /* SET_OFF1: LDO5 */ +			0x2A 0x24 /* SET_OFF2: DCDC1, DCDC4 */ +			0x2d 0x88 /* DISCHARGE1: Enable LDO4, LDO8 */ +			0x17 0xC0 /* LDO3_AVS b6=1 : ECO mode */ +			0x1f 0xf8 /* LDO8: b6=1 : ECO mode */ +			0x21 0xf2 /* LD10: b6=1 : ECO mode */ +		>; +		ldo9_loadswitch_enabled; +}; + +&dock_detect { +	old-hw; +}; diff --git a/arch/arm/boot/dts/omap3-minnow-p2-p2.4.dts b/arch/arm/boot/dts/omap3-minnow-p2-p2.4.dts new file mode 100644 index 00000000000..cf6bd1eb82a --- /dev/null +++ b/arch/arm/boot/dts/omap3-minnow-p2-p2.4.dts @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2014 Motorola Mobility LLC + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/dts-v1/; + +/include/ "omap3-minnow.dtsi" + +/ { +	mmi,revision = "p1"; +	mmi,hwrev = < +		0x05   /* Minnow P2A wing */ +		0x06   /* Minnow P2A portable */ +	>; + +	Display@0 { +		gpio_vio_en = <&gpio2 10 0>;    /* VDDIO gpio-42 */ +	}; +}; + +&i2c1 { +	atmxt@4a { +		support-snowflake = <0>; +	}; +}; + +&dock_detect { +	old-hw; +}; diff --git a/arch/arm/boot/dts/omap3-minnow-rev-a-512.dts b/arch/arm/boot/dts/omap3-minnow-rev-a-512.dts new file mode 100644 index 00000000000..ea7df7929ba --- /dev/null +++ b/arch/arm/boot/dts/omap3-minnow-rev-a-512.dts @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2014 Motorola Mobility LLC + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/dts-v1/; + +/include/ "omap3-minnow.dtsi" + +/ { +	mmi,revision = "p2"; +	mmi,hwrev = < +		0xF0   /* Minnow P2-5 portable (Rev A) with 512MB */ +	>; + +	Display@0 { +		gpio_vio_en = <&gpio2 10 0>;    /* VDDIO gpio-42 */ +	}; + +}; + +&i2c2{ +	m4sensorhub@39 { +		mot,fw-filename = "m4sensorhub-p2_5_minnow.bin"; +	}; +}; + diff --git a/arch/arm/boot/dts/omap3-minnow-rev-a.dts b/arch/arm/boot/dts/omap3-minnow-rev-a.dts new file mode 100644 index 00000000000..90ec225460a --- /dev/null +++ b/arch/arm/boot/dts/omap3-minnow-rev-a.dts @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2014 Motorola Mobility LLC + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/dts-v1/; + +/include/ "omap3-minnow.dtsi" + +/ { +	mmi,revision = "p2"; +	mmi,hwrev = < +		0x07   /* Minnow P2-5 portable (Rev A) */ +		0x08   /* Minnow P2-5 wingboard (issue 04) */ +	>; + +	Display@0 { +		gpio_vio_en = <&gpio2 10 0>;    /* VDDIO gpio-42 */ +	}; + +}; + +&i2c2{ +	m4sensorhub@39 { +		mot,fw-filename = "m4sensorhub-p2_5_minnow.bin"; +	}; +}; + +&dock_detect { +	old-hw; +}; diff --git a/arch/arm/boot/dts/omap3-minnow-rev-b+.dts b/arch/arm/boot/dts/omap3-minnow-rev-b+.dts new file mode 100644 index 00000000000..7261a58408c --- /dev/null +++ b/arch/arm/boot/dts/omap3-minnow-rev-b+.dts @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2014 Motorola Mobility LLC + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/dts-v1/; + +/include/ "omap3-minnow.dtsi" + +/ { +	mmi,revision = "p2"; +	mmi,hwrev = < +		0x09   /* Minnow P2-9 portable (Rev B) */ +	>; + +	regulators { +		disp_bridge: gpio-regulator@86 { +			regulator-boot-on; +			compatible = "regulator-fixed"; +			regulator-min-microvolt = <1200000>; +			regulator-max-microvolt = <1200000>; +			regulator-name = "disp_bridge"; +			gpio = <&gpio3 22 0>; /* GPIO-86 */ +			enable-active-high; +			startup-delay-us=<150>; +		}; + +	}; + +	Display@0 { +		gpio_vio_en = <&gpio2 10 0>;    /* VDDIO gpio-42 */ +		gpio_mem_en = <&gpio3 23 0>;    /* MEM_EN gpio-87 */ +		bridge-supply = <&disp_bridge>; +	}; + +}; + +&i2c2{ +	m4sensorhub@39 { +		mot,fw-filename = "m4sensorhub-p2_5_minnow.bin"; +	}; +}; diff --git a/arch/arm/boot/dts/omap3-minnow.dtsi b/arch/arm/boot/dts/omap3-minnow.dtsi new file mode 100644 index 00000000000..aaadebb253b --- /dev/null +++ b/arch/arm/boot/dts/omap3-minnow.dtsi @@ -0,0 +1,901 @@ +/* + * Copyright (C) 2013 Motorola Mobility LLC + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/* reserve memory for ram_console */ +/memreserve/ 0x83000000 0x20000; /* IMAGE_DOWN_LOAD_ADDR */ + +/include/ "omap36xx.dtsi" + +/ { +	model = "Motorola OMAP3 Platform"; +	compatible = "mot,omap3-minnow", "ti,omap3"; + +	ramoops { +		compatible = "ramoops"; +		status = "ok"; + +		android,ramoops-buffer-start = <0x83000000>; +		android,ramoops-buffer-size  = <0x20000>; +		android,ramoops-console-size = <0x1FC00>; +		android,ramoops-annotate-size = <0x400>; +	}; + +	cpus { +		cpu@0 { +			device_type = "cpu"; +			operating-points = < +				/* kHz    uV */ +				 300000   975000 +				 600000  1150000 +				 800000  1275000 +				1000000  1337500 +			>; +			cpu0-supply = <&omap_tps65912_dcdc1>; +			/* OPP tolerance in percentage */ +			voltage-tolerance = <0>; +			reset-voltage = <1275000>; +		}; +	}; + +	regulators { +		compatible = "simple-bus"; + +		vmmc: gpio-regulator { +			compatible = "regulator-fixed"; + +			regulator-min-microvolt = <1800000>; +			regulator-max-microvolt = <1800000>; +			regulator-name = "vmmc"; +			gpio = <&gpio6 26 0>; +			startup-delay-us = <70000>; +			enable-active-high; +		}; +	}; + +	/* external 26MHz clock which is controlled by gpio +	 * it's used for both Display Bridge and USB +	 */ +	periph_26mhz { +		compatible = "gpio-clock"; +		#clock-cells = <0>; +		enable-gpios = <&gpio6 17 0>;  /* GPIO-177, OF_GPIO_ACTIVE_HIGH */ +	}; + +	Display@0 { +		compatible = "mot,minnow-panel-dsi-cm"; +		bridge-supply = <&ldo1_reg>; +		panel-supply = <&ldo7_reg>; +		/* 0: MINNOW_PANEL_CM_220X176 +		 * 1: MINNOW_PANEL_CM_220X220 +		 * 2: MINNOW_PANEL_CM_BRIDGE_320X320 +		 */ +		id_panel = <2>; +		gpio_panel_reset = <&gpio1 14 0>;       /* RESET gpio-14 */ +		gpio_bridge_reset = <&gpio1 23 0>;      /* RESET gpio-23 */ +		gpio_vsync_events = <&gpio1 29 0>;      /* VSYNC gpio-29 */ +		clk_in = "periph_26mhz";        /* external 26MHz clock */ +		/* declare it if ext_te enable */ +		//gpio_te = <&gpio1 0 0>;       /* EXT_TE gpio-0 */ +		//pins = <0 1 2 3>;             /* DSI Pin config */ +		esd_interval = <8000>;          /* ESD_INTERVAL */ +		support_smart_ambient; +		ambient_timeout = <0>;		/* time out in second */ +		//pixel_clock = <4608>;         /* kHZ = 320*240*60/1000*/ +		/* 0: RGB888 +		 * 1: RGB666 +		 * 2: RGB666_PACKED +		 * 3: RGB565 +		 */ +		//pixel_format = <1>; +		//hs_clk = <90000000 150000000>;        /* min max*/ +		//lp_clk = <7000000 9000000>;   /* min max*/ +		pinctrl-names = "viopulldown", "viooutput"; +		pinctrl-0 = <&display_vddio_pulldown>; +		pinctrl-1 = <&display_vddio_output>; +	}; + +	c55-ctrl@0 { +		compatible = "ti,c55-ctrl"; +		reg = <0 0>; +		gpios = <&gpio3 12 1>, /* IRQ   gpio_ap_int gpio-076 */ +			<&gpio3 17 2>; /* gpio_c55_int gpio-81*/ +		vddc-supply = <&ldo9_reg>; +		vddldo-supply = <&ldo3_reg>; +		pinctrl-names = "off", "on"; +		pinctrl-0 = <&c55_pins_off>; +		pinctrl-1 = <&c55_pins_on>; +	}; + +	vib-gpio { +		compatible = "mot,vib-gpio"; +		vib-gpio-supply = <&ldo6_reg>; +	}; + +	tusb_phy: tusb-usb@0 { +		compatible = "ti,tusb-usb"; +		gpios = <&gpio5 14 0x1>,  /* IRQ gpio-142    GPIOF_DIR_IN */ +			<&gpio1 15 0x0>,  /* resetn gpio-15  GPIOF_DIR_OUT|GPIOF_INIT_LOW */ +			<&gpio1 16 0x0>,  /* cs gpio-16      GPIOF_DIR_OUT|GPIOF_INIT_LOW */ +			<&gpio1 27 0x2>;  /* cs gpio-27      GPIOF_DIR_OUT|GPIOF_INIT_HIGH */ +		gpio-names = "tusb-irq", +			     "tusb-resetn", +			     "tusb-cs", +			     "tusb-csn"; +		clk_in = "periph_26mhz";  /* external 26MHz clock */ +		reg = <0 0>; +		supplied_to = "max170xx_battery"; +	}; + +	factory_support { +		compatible = "mmi,factory-support"; + +		gpios = <&gpio6 22 0x0>; /*gpio-182 GPIOF_DIR_OUT|GPIOF_INIT_LOW */ +		gpio-names = "factory_kill_disable"; +	}; + +	pmic-wdi@0 { +		compatible = "mot,pmic-wdi"; +		gpios  = <&gpio5 15 0x0>, /* gpio-143 GPIOF_DIR_OUT|GPIOF_INIT_LOW */ +			 <&gpio3 30 0x0>; /* gpio-94  GPIOF_DIR_OUT|GPIOF_INIT_LOW */ +		gpio-names = "wdi", +			     "sys_reset"; +		pinctrl-names = "output", "tristate"; +		pinctrl-0 = <&wdi_phy_gpio_mode>; +		pinctrl-1 = <&wdi_phy_safe_mode>; +	}; + +	rtc_sensorhub@0 { +		compatible = "mot,rtc_from_sensorhub"; +	}; + +	m4sensor { +		compatible = "simple-bus"; + +		mpu9150 { +			compatible = "mot,m4mpu9150"; +		}; +		pedometer { +			compatible = "mot,m4pedometer"; +		}; +		passive { +			compatible = "mot,m4passive"; +		}; +		gesture { +			compatible = "mot,m4gesture"; +		}; +		display { +			compatible = "mot,m4display"; +		}; +		download { +			compatible = "mot,m4download"; +		}; +		stillmode { +			compatible = "mot,m4stillmode"; +		}; +		lightsensor { +			compatible = "mot,m4als"; +		}; +                heartratesensor { +                        compatible = "mot,m4heartrate"; +                }; +		fusion { +			compatible = "mot,m4fusion"; +		}; +	}; + +	sound { +		compatible = "mot,omap-soc-c55"; +		mot,model = "omap3c55audio"; +		mot,mcbsp = <&mcbsp4>; +	}; + +	soc { + +		compatible = "mot,soc-c55"; +		mot,mic_bias1_en = <&gpio3 13 0>; /* gpio-077 */ +		mot,mic_bias3_en = <&gpio3 20 0>; /* gpio-084 */ +	}; + +	omap_pimic { +		omap_tps65912_dcdc1: omap_vdd1 { +			compatible = "ti,omap-tps65912-dcdc1"; +			ti,boot-voltage-micro-volts = <1275000>; +			ti,vp = <&vp_mpu>; +		}; + +		omap_tps65912_dcdc4: omap_vdd2 { +			compatible = "ti,omap-tps65912-dcdc4"; +			ti,boot-voltage-micro-volts = <1200000>; +			ti,vp = <&vp_core>; +		}; +	}; + +	dock_detect: bq5105x-detect { +		compatible = "mmi,bq5105x-detect"; +		charge-gpio = <&gpio6 16 0>;	/* gpio-176 */ +		detect-gpio = <&gpio1 22 0x1>;	/* gpio-22  */ +		undocked-delay,ms = <1500>; +		charger-name = "wireless"; +		switch-name = "dock"; +		uevent-wakelock-timeout,ms = <2000>; +		supplied_to = "max170xx_battery"; +	}; + +	bq5105x-ctrl { +		reg = <0 0>; +		compatible = "ti,bq5105x-control"; +		gpios = <&gpio3 14 0x0>; /* gpio-72  GPIOF_DIR_OUT|GPIOF_INIT_LOW */ +		gpio-names = "charge_terminate"; +	}; + +	pad-wkup { +		/* on omap, the irqs are calculated as follows: +		 * for the 96 intc IRQs +		 *   irq = 16 + irq_offset (from TRM sec 12.3.2) +		 * for a gpio IRQ (banks numbered 1 to 6 +		 *   irq = 16 + 96 + (gpio_bank - 1) * 32 +		 */ +		compatible = "ti,pad-wkup"; + +		/* Map the pad offset (off) to an interrupt (IRQ).    */ +		/* if handle is 1, an irq will be generated based on  */ +		/* the pad wkup bit.  If 0, the pad will be used only */ +		/* for reporting, assumingly because the domain will  */ +		/* be in a state during suspend to generate the IRQ   */ +		/* directly.                                          */ +		/* generic_handle_irq() will be called for multiple   */ +		/* wakeup sources, but only the first in the order    */ +		/* listed below will be reported as the wakeup reason */ +		/*                                                    */ +		/*             off  IRQ handle                        */ +		ti,pad_irq = <0x144  89 1>, /* uart2 - bluetooth      */ +		             <0x16e  90 1>, /* uart3 - serial rx      */ +		             <0x0a2  96 1>, /* uart4 - m4 rx          */ +		             <0x08e 171 1>, /* m4sensor hub           */ +		             <0x0e6 211 1>, /* touch                  */ +		             <0x140 254 1>, /* USB                    */ +		             <0x1a2 288 1>, /* bq5105x charger        */ +			     <0x1b0 112 0>, /* gpio0 - tps (dbg only) */ +		             <0x5bc 134 1>, /* bq5105x charger pulse  */ +		             <0x13c 252 1>; /* battery                */ + +	}; +}; + +&vc { +	ti,i2c-high-speed; +	ti,i2c-pad-load = <3>; +	vc_mpu{ +		ti,master-channel; +	}; + +	vc_core{ +		ti,use-master-slave-addr; +	}; +}; + +&glbl_prm { +	status = "ok"; +	sys_clk = "osc_sys_ck"; +	autoextclkmode = <2>; +	sys_off_mode; +	auto_off; +	auto_retention; +	offmodesetup_time = <3500>; +	clksetup_time = <1000>; +}; + +&i2c1 { +	clock-frequency = <400000>; + +	atmxt@4a { +		compatible = "atmel,atmxt-ts"; +		reg = <0x4a>; +		interrupt-parent = <&gpio4>; +		interrupts = <3 0>;  /* gpio-99 32 * 3 + 3 */ +		wakeup-source; +		gpios = <&gpio4 3 0>, /* IRQ   gpio-099 */ +			<&gpio6 4 0>; /* RESET gpio-164*/ +		atmel,atmxt-tdat-filename = "atmxt-r2.tdat", "atmxt-r3.tdat"; +		pinctrl-names = "pullup", "pulldown"; +		pinctrl-0 = <&atmxt_int_pullup>; +		pinctrl-1 = <&atmxt_int_pulldown>; +		support-snowflake = <1>; +	}; +}; + +&i2c2 { +	m4sensorhub@39 { +		compatible = "mot,m4sensorhub"; +		status = "ok"; +		reg = <0x39>; + + +		mot,irq-gpio    = <&gpio2 27 1>; /* gpio-059 */ +		mot,reset-gpio  = <&gpio5  1 2>; /* gpio-129 */ +		mot,wake-gpio   = <&gpio4 30 0>; /* gpio-126 */ +		mot,boot0-gpio  = <&gpio1 21 0>; /* gpio-021 */ +		mot,boot1-gpio  = <&gpio1 24 0>; /* gpio-024 */ +		mot,enable-gpio = <&gpio1 28 0>; /* gpio-028 */ +		mot,fw-filename = "m4sensorhub-p0_minnow.bin"; +	}; +}; + +&i2c3 { + +	clock-frequency = <400000>; + +	lm3535@38 { +		compatible = "ti,lm3535"; +		reg = <0x38>; +	}; + +	max17050@36 { +		compatible = "maxim,max17050"; +		reg = <0x36>; +		maxim,rsns-microohm = <10000>; +		pinctrl-names = "default"; +		pinctrl-0 = <&cc_alert_pin>;	/* gpio 140 pin */ +		gpios = <&gpio5 12 0x11>;	/* gpio-140, GPIOF_DIR_IN|GPIOF_EXPORT */ +		gpio-names = "cc-alert"; +		interrupt-parent = <&gpio5>; +		interrupts = <12 0>;		/* gpio-140 IRQ */ +		maxim,malicious_supply = "ac"; +		maxim,enable_por_init; +		maxim,configuration { +			/* Required properties */ +			config		= /bits/ 16 <0x6254>;	/* Tex = 0, Ss = Aen = TS = Ten = ETHRM = 1 */ +			full_soc_thresh	= /bits/ 16 <0x5F00>;	/* app note constant */ +			design_cap	= /bits/ 16 <662>;	/* in 5uVh/Rsns = 0.5 mAh */ +			ichgt_term	= /bits/ 16 <0x0066>;	/* battery attribute */ +			learn_cfg	= /bits/ 16 <0x2606>;	/* app note constant */ +			filter_cfg	= /bits/ 16 <0x87A4>;	/* app note constant */ +			relax_cfg	= /bits/ 16 <0x203B>;	/* Load = 5 mA, dV = 3.7 mV, dT = 6 mins */ +			fullcap		= /bits/ 16 <662>;	/* in 5uVh/Rsns = 0.5 mAh */ +			fullcapnom	= /bits/ 16 <662>;	/* in 5uVh/Rsns = 0.5 mAh */ +			qrtbl00		= /bits/ 16 <0x1B94>;	/* battery attribute */ +			qrtbl10		= /bits/ 16 <0x0E94>;	/* battery attribute */ +			qrtbl20		= /bits/ 16 <0x0594>;	/* battery attribute */ +			qrtbl30		= /bits/ 16 <0x0294>;	/* battery attribute */ +			rcomp0 		= /bits/ 16 <0x0052>;	/* battery attribute */ +			tcompc0		= /bits/ 16 <0x333A>;	/* battery attribute */ +			maxim,cell-char-tbl = /bits/ 16 <	/* battery attribute */ +				0x9cf0 0xa310 0xb180 0xb360 0xb6a0 0xb6e0 +				0xba10 0xbb10 0xbbd0 0xbc10 0xc200 0xc250 +				0xc7c0 0xc820 0xd050 0xd710 0x0140 0x0110 +				0x0210 0x02c0 0x1000 0x0a00 0x06c0 0x31a0 +				0x0af0 0x1170 0x0cb0 0x08d0 0x0aa0 0x0880 +				0x07b0 0x07b0 0x0100 0x0100 0x0100 0x0100 +				0x0100 0x0100 0x0100 0x0100 0x0100 0x0100 +				0x0100 0x0100 0x0100 0x0100 0x0100 0x0100 +			>; +			/* Optional properties */ +			tgain		= /bits/ 16 <0xE71C>;	/* thermistor attribute */ +			toff		= /bits/ 16 <0x251A>;	/* thermistor attribute */ +		}; +		maxim,temp-conv { +			start	= /bits/ 16 <(-20)>;	/* in degrees C */ +			result	= /bits/ 16 < +				/* 1/10th C "real" temps corresponding start, start + 1, etc. fuel gauge temps in C */ +				(-302) (-271) (-246) (-222) (-202) (-180) (-162) (-147) (-129) (-114)	/* -20 C ... -11 C */ +				(-101) (-86)  (-72)  (-59)  (-48)  (-35)  (-23)  (-12)  (-2)   10	/* -10 C ... -1  C */ +				22     32     42     51     62     72     82     91     99     110	/*  0  C ...  9  C */ +				120    129    138    146    156    165    175    184    192    200	/*  10 C ...  19 C */ +				210    220    230    238    247    256    266    275    285    294	/*  20 C ...  29 C */ +				303    313    324    333    343    353    364    375    385    395	/*  30 C ...  39 C */ +				407    419    430    441    453    466    479    492    505    520	/*  40 C ...  49 C */ +				534    548    565    581    597    616    635    654    676    697	/*  50 C ...  59 C */ +				721    747    775    800						/*  60 C ...  63 C */ +			>; +		}; +	}; +}; + +&mcspi1 { + +tps65912_0: tps65912 { + +		compatible = "ti,tps65912"; +		reg = <0>; /* CS 0 */ +		spi-max-frequency = <15000000>; +		spi-cs-high; + +		register-init-data = < +			0x06 0x7F /* DCDC1_LIMIT: 0.7V-1.4875V in 12.5mV steps */ +			0x25 0xD1 /* DEVCTRL2: enable SLEEP, INT push/pull +					       200us TSLOT, INT active high */ +			0x26 0x49 /* I2C_SPI_CFG: AVS ADDR = 0x13, +					DCDC1, DCDC4 is AVS ctrl */ +			0x29 0x10 /* SET_OFF1: LDO5 */ +			0x2A 0x24 /* SET_OFF2: DCDC1, DCDC4 */ +			0x2d 0x88 /* DISCHARGE1: Enable LDO4, LDO8 */ +			0x17 0xC0 /* LDO3_AVS b6=1 : ECO mode */ +			0x19 0x64 /* LDO4_OP: b6 = 1 : give AVS register the on/off control, b0-5:1.8V */ +			0x1A 0x24 /* LDO4_AVS b7 = 0 : disables the reg, b0-5:1.8V */ +			0x1B 0x3f /* LDO4_LIMIT b0-5: ANY */ +			0x21 0xf2 /* LD10: b6=1 : ECO mode */ +			0x62 0x00 /* LOADSWITCH: Disable load switch at all times*/ +		>; + +		tps_irq_gpio = <0>; + +		powerkey_up_irq = <10>;		/* TPS65912_IRQ_GPIO3_R the key down */ +		powerkey_down_irq = <11>;	/* TPS65912_IRQ_GPIO3_F the key up */ +		powerkey_code = <116>;		/* power key code for android*/ + +		regulators { +			#address-cells = <1>; +			#size-cells = <0>; + +			sw1_iva_reg: regulator@0 { +				reg = <0>; +				regulator-compatible = "DCDC1"; +				regulator-name = "DCDC1"; +				regulator-min-microvolt =  <700000>; +				regulator-max-microvolt = <1487500>; +				regulator-boot-on; +				regulator-always-on; +			}; + +			sw2_reg: regulator@1 { +				reg = <1>; +				regulator-compatible = "DCDC2"; +				regulator-name = "DCDC2"; +				regulator-min-microvolt = <3000000>; +				regulator-max-microvolt = <3000000>; +				regulator-boot-on; +				regulator-always-on; +			}; + +			sw3_reg: regulator@2 { +				reg = <2>; +				regulator-compatible = "DCDC3"; +				regulator-name = "DCDC3"; +				regulator-min-microvolt = <1875000>; +				regulator-max-microvolt = <1875000>; +				regulator-boot-on; +				regulator-always-on; +			}; + +			sw4_core_reg: regulator@3 { +				reg = <3>; +				regulator-compatible = "DCDC4"; +				regulator-name = "DCDC4"; +				regulator-min-microvolt = <500000>; +				regulator-max-microvolt = <1287500>; +				regulator-boot-on; +				regulator-always-on; +			}; + +			ldo1_reg: regulator@4 { +				reg = <4>; +				regulator-compatible = "LDO1"; +				regulator-name = "LDO1"; +				regulator-min-microvolt = <1200000>; +				regulator-max-microvolt = <1200000>; +			}; + +			ldo2_reg: regulator@5 { +				reg = <5>; +				regulator-compatible = "LDO2"; +				regulator-name = "LDO2"; +				regulator-min-microvolt = <1700000>; +				regulator-max-microvolt = <1700000>; +			}; + +			ldo3_reg: regulator@6 { +				reg = <6>; +				regulator-compatible = "LDO3"; +				regulator-name = "LDO3"; +				regulator-min-microvolt = <2950000>; +				regulator-max-microvolt = <2950000>; +			}; + +			ldo4_reg: regulator@7 { +				reg = <7>; +				regulator-compatible = "LDO4"; +				regulator-name = "LDO4"; +				regulator-min-microvolt = <1800000>; +				regulator-max-microvolt = <1800000>; +			}; + +			ldo5_reg: regulator@8 { +				reg = <8>; +				regulator-compatible = "LDO5"; +				regulator-name = "LDO5"; +				regulator-min-microvolt = <2800000>; +				regulator-max-microvolt = <2800000>; +				regulator-always-on; +			}; + +			ldo6_reg: regulator@9 { +				reg = <9>; +				regulator-compatible = "LDO6"; +				regulator-name = "LDO6"; +				regulator-min-microvolt = <2400000>; +				regulator-max-microvolt = <2400000>; +			}; + +			ldo7_reg: regulator@10 { +				reg = <10>; +				regulator-compatible = "LDO7"; +				regulator-name = "LDO7"; +				regulator-min-microvolt = <2850000>; +				regulator-max-microvolt = <2850000>; +			}; + +			ldo8_reg: regulator@11 { +				reg = <11>; +				regulator-compatible = "LDO8"; +				regulator-name = "LDO8"; +				regulator-min-microvolt = <2800000>; +				regulator-max-microvolt = <2800000>; +				regulator-boot-on; +				regulator-always-on; +			}; + +			ldo9_reg: regulator@12 { +				reg = <12>; +				regulator-compatible = "LDO9"; +				regulator-name = "LDO9"; +				regulator-min-microvolt = <1200000>; +				regulator-max-microvolt = <1200000>; +			}; + +			ldo10_reg: regulator@13 { +				reg = <13>; +				regulator-compatible = "LDO10"; +				regulator-name = "LDO10"; +				regulator-min-microvolt = <2500000>; +				regulator-max-microvolt = <2500000>; +				regulator-always-on; +			}; +		}; +	}; +}; + + +&mcspi2 { +	spi_flash: m25p80@0 { +		compatible = "w25q80"; +		reg = <0>; /* CS 0 */ +		spi-max-frequency = <24000000>; +		gpios = <&gpio3 21 0x2>; /* core_enb gpio-85 GPIOF_DIR_OUT | GPIOF_INIT_HIGH */ +		pinctrl-names = "off", "on"; +		pinctrl-0 = <&spi_flash_pins_off>; +		pinctrl-1 = <&spi_flash_pins_on>; +		m25p,fast-read; +	}; +}; + +&omap3_pmx_core { +	pinctrl-names = "default"; +	pinctrl-0 = < +		&board_pins +		&audio_gpio_pins +		&usb_phy_pins +	>; + +	board_pins: pinmux_board_pins { +		pinctrl-single,pins = < +			0x04a 0x00f	/* GPMC_A1, GPIO 34, MODE7 | PD */ +			0x04c 0x00f	/* GPMC_A2, GPIO 35, MODE7 | PD */ +			0x04e 0x00f	/* GPMC_A3, GPIO 36, MODE7 | PD */ +			0x056 0x00f	/* GPMC_A7, GPIO 40, MODE7 | PD */ +			0x058 0x00f	/* GPMC_A8, GPIO 41, MODE7 | PD */ +			0x06e 0x00f	/* GPMC_D8, GPIO 44, MODE7 | PD */ +			0x070 0x00f	/* GPMC_D9, GPIO 45, MODE7 | PD */ +			0x072 0x00f	/* GPMC_D10, GPIO 46, MODE7 | PD */ +			0x074 0x00f	/* GPMC_D11, GPIO 47, MODE7 | PD */ +			0x076 0x00f	/* GPMC_D12, GPIO 48, MODE7 | PD */ +			0x078 0x00f	/* GPMC_D13, GPIO 49, MODE7 | PD */ +			0x07a 0x00f	/* GPMC_D14, GPIO 50, MODE7 | PD */ +			0x07c 0x00f	/* GPMC_D15, GPIO 51, MODE7 | PD */ +			0x080 0x00f	/* GPMC_NCS1, GPIO 52, MODE7 | PD */ +			0x082 0x00f	/* GPMC_NCS2, GPIO 53, MODE7 | PD */ +			0x084 0x00f	/* GPMC_NCS3, GPIO 54, MODE7 | PD */ +			0x086 0x00f	/* GPMC_NCS4, GPIO 55, MODE7 | PD */ +			0x088 0x00f	/* GPMC_NCS5, GPIO 56, MODE7 | PD */ +			0x08a 0x00f	/* GPMC_NCS6, GPIO 57, MODE7 | PD */ +			0x08c 0x00f	/* GPMC_NCS7, GPIO 58, MODE7 | PD */ +			0x08e 0x4104	/* GPMC_CLK, MODE4 | INPUT | OFFWAKEUP */ +			0x096 0x00f	/* GPMC_NBE0_CLE, GPIO 60, MODE7 | PD */ +			0x098 0x00f	/* GPMC_NBE1, GPIO 61, MODE7 | PD */ +			0x09a 0x00f	/* GPMC_NWP, GPIO 62, MODE7 | PD */ +			0x09e 0x00f	/* GPMC_WAIT1, GPIO 63, MODE7 | PD */ +			0x0a0 0x002	/* GPMC_WAIT2, MODE2 | OUTPUT */ +			0x0a2 0x4102	/* GPMC_WAIT3, MODE2 | INPUT | OFFWAKEUP */ +			0x0a4 0x10f	/* DSS_PCLK, GPIO 66, MODE7 | PD */ +			0x0a6 0x10f	/* DSS_HSYNC, GPIO 67, MODE7 | PD */ +			0x0a8 0x10f	/* DSS_VSYNC, GPIO 68, MODE7 | PD */ +			0x0ac 0x001	/* DSS_DATA0, MODE1 | OUTPUT */ +			0x0ae 0x001	/* DSS_DATA1, MODE1 | OUTPUT */ +			0x0b0 0x001	/* DSS_DATA2, MODE1 | OUTPUT */ +			0x0b2 0x001	/* DSS_DATA3, MODE1 | OUTPUT */ +			0x0bc 0x004	/* DSS_DATA8, MODE4 | OUTPUT */ +			0x0c0 0x107	/* DSS_DATA10, MODE7 | INPUT */ +			0x0c2 0x004	/* DSS_DATA11, MODE4 | OUTPUT */ +			0x0c6 0x004	/* DSS_DATA13, MODE4 | OUTPUT */ +			0x0cc 0x004	/* DSS_DATA16, GPIO 86, MODE4 | OUTPUT */ +			0x0ce 0x004	/* DSS_DATA17, GPIO 87, MODE4 | OUTPUT */ +			0x0dc 0x004	/* CAM_HS, MODE4 | OUTPUT */ +			0x0e4 0x004	/* CAM_FLD, MODE4 | OUTPUT */ +			0x0ea 0x10f	/* CAM_D2, GPIO 101, MODE7 | PD */ +			0x102 0x00f	/* CAM_STROBE, GPIO 126, MODE7 | PD */ +			0x122 0x004	/* SIM_CLK, MODE4 | OUTPUT */ +			0x124 0x00f	/* SIM_PWRCTRL, MODE7 | PULLDOWN */ +			0x126 0x004	/* SIM_RST, MODE4, GPIO129*/ +			0x13e 0x00F	/* MCBSP3_DR, MODE7 | PULLDOWN */ +			0x15c 0x10f	/* MCBSP1_CLKR, GPIO 156, MODE7 | PD */ +			0x168 0x104	/* MCBSP1_CLKX, MODE4 | INPUT */ +			0x16a 0x10f	/* UART3_CTS_RCTX, GPIO 163, MODE7 | PD */ +			0x16c 0x004	/* UART3_RTS, MODE4 | OUTPUT */ +			0x16e 0x4118	/* UART3_RX, MODEO | INPUT_PULLUP | OFFWAKEUP*/ +			0x170 0x000	/* UART3_TX, MODE0 | OUTPUT */ +			0x18e 0x118	/* I2C2_SCL, MODE0 | INPUT_PULLUP */ +			0x190 0x118	/* I2C2_SDA, MODE0 | INPUT_PULLUP */ +			0x192 0x118	/* I2C3_SCL, MODE0 | INPUT_PULLUP */ +			0x194 0x118	/* I2C3_SDA, MODE0 | INPUT_PULLUP */ +			0x198 0x100	/* MCSPI1_CLK, MODE0 | INPUT */ +			0x19a 0x000	/* MCSPI1_SIMO, MODE0 | OUTPUT */ +			0x19c 0x100	/* MCSPI1_SOMI, MODE0 | INPUT */ +			0x19e 0x000	/* MCSPI1_CS0, MODE0 | OUTPUT */ +			0x1a0 0x000	/* MCSPI1_CS1, MODE0 | OUTPUT */ +			0x1a2 0x4104	/* MCSPI1_CS2, MODE4 | INPUT | OFFWAKEUP */ +			0x1a4 0x004	/* MCSPI1_CS3, MODE4 | OUTPUT */ +			0x1ae 0x004	/* MCSPI2_CS1, MODE4 | OUTPUT */ +			0x1b0 0x4104	/* SYS_NIRQ, MODE4 | INPUT | OFFWAKEUP */ +			0x1b2 0x004	/* SYS_CLKOUT2, MODE4 | OUTPUT  */ +			0x5a8 0x11a	/* ETK_CLK, MODE2 | INPUT_PULLUP */ +			0x5aa 0x11a	/* ETK_CTL, MODE2 | INPUT_PULLUP */ +			0x5b2 0x11a	/* ETK_D3, MODE2 | INPUT_PULLUP */ +			0x5b4 0x11a	/* ETK_D4, MODE2 | INPUT_PULLUP */ +			0x5b6 0x11a	/* ETK_D5, MODE2 | INPUT_PULLUP */ +			0x5b8 0x11a	/* ETK_D6, MODE2 | INPUT_PULLUP */ +			0x5ba 0x004	/* ETK_D7, MODE4 | OUTPUT */ +			0x5bc 0x411c	/* ETK_D8, MODE4 | INPUT | INPUT_PULLUP | OFFWAKEUP */ +			0x5c0 0x004	/* ETK_D10, MODE4 | OUTPUT */ +			0x5c8 0x004	/* ETK_D14, MODE4 | OUTPUT */ +		>; +	}; + +	audio_gpio_pins: pinmux_audio_gpio_pins { +		pinctrl-single,pins = < +			0x0ba 0x004	/* DSS_DATA7, MODE4 | OUTPUT */ +			0x0c8 0x004	/* DSS_DATA14, MODE4 | OUTPUT */ +		>; +	}; + +	usb_phy_pins: pinmux_usb_phy_pins { +		pinctrl-single,pins = < +			0x140 0x4104     /* MCBSP3_CLKX, MODE4 (GPIO-142) | INPUT | OFFWAKEUP */ +			0x5ae 0x004     /* ETK_D1, MODE4 (GPIO_15) | OUTPUT */ +			0x5b0 0x004     /* ETK_D2, MODE4 (GPIO_16) | OUTPUT */ +			0x5c6 0x004     /* EDK_D13, MODE4 (GPIO_27) | OUTPUT */ +		>; +	}; + +	wdi_phy_gpio_mode: pinmux_wdi_phy_gpio_mode { +		pinctrl-single,pins = < +			0x142 0x004 /* MCBSP3_FSX | OUTPUT */ +		>; +	}; + +	wdi_phy_safe_mode: pinmux_wdi_phy_safe_mode { +		pinctrl-single,pins = < +			0x142 0x10F /* MCBSP3_FSX | INPUT | PULLDOWN */ +		>; +	}; + +	spi_flash_pins_on: pinmux_m25p_pins_on { +		pinctrl-single,pins = < +			0x0ca 0x004	/* DSS_DATA15, MODE4 | OUTPUT */ +			0x1a6 0x100	/* MCSPI2_CLK, MODE0 | INPUT */ +			0x1a8 0x000	/* MCSPI2_SIMO, MODE0 | OUTPUT */ +			0x1aa 0x100	/* MCSPI2_SOMI, MODE0 | INPUT */ +			0x1ac 0x000	/* MCSPI2_CS0, MODE0 | OUTPUT */ +		>; +	}; + +	spi_flash_pins_off: pinmux_m25p_pins_off { +		pinctrl-single,pins = < +			0x0ca 0x007	/* DSS_DATA15, MODE7 */ +			0x1a6 0x007	/* MCSPI2_CLK, MODE7 */ +			0x1a8 0x007	/* MCSPI2_SIMO, MODE7 */ +			0x1aa 0x007	/* MCSPI2_SOMI, MODE7 */ +			0x1ac 0x007	/* MCSPI2_CS0, MODE7 */ +		>; +	}; + +	c55_pins_off: pinmux_c55_pins_off { +		pinctrl-single,pins = < +			0x0b8 0x00f	/* DSS_DATA6, MODE7 | PULLDOWN */ +			0x110 0x00f	/* MCBSP2_DR, MODE7 | PULLDOWN */ +			0x10c 0x00f	/* MCBSP2_FSX, MODE7 | PULLDOWN */ +			0x10e 0x00f	/* MCBSP2_CLKX, MODE7 | PULLDOWN */ +			0x14c 0x00f	/* UART1_TX, MODE7 | PULLDOWN */ +			0x14e 0x00f	/* UART1_RTS, MODE7 | PULLDOWN */ +			0x150 0x00f	/* UART1_CTS, MODE7 | PULLDOWN */ +			0x152 0x00f	/* UART1_RX, MODE7 | PULLDOWN */ +			0x154 0x00f	/* MCBSP4_CLKX, MODE7 | PULLDOWN */ +			0x156 0x00f	/* MCBSP4_DR, MODE7 | PULLDOWN */ +			0x158 0x00f	/* MCBSP4_DX, MODE7 | PULLDOWN */ +			0x15a 0x00f	/* MCBSP4_FSX, MODE7 | PULLDOWN */ +		>; +	}; + +	c55_pins_on: pinmux_c55_pins_on { +		pinctrl-single,pins = < +			0x0b8 0x104	/* DSS_DATA6, MODE4 | INPUT */ +			0x110 0x007	/* MCBSP2_DR, MODE7 */ +			0x10c 0x007	/* MCBSP2_FSX, MODE7 */ +			0x10e 0x007	/* MCBSP2_CLKX, MODE7 */ +			0x14c 0x000	/* UART1_TX, MODE0 | OUTPUT */ +			0x14e 0x000	/* UART1_RTS, MODE0 | OUTPUT */ +			0x150 0x118	/* UART1_CTS, MODE0 | INPUT | PULLUP */ +			0x152 0x118	/* UART1_RX, MODE0 | INPUT | PULLUP */ +			0x154 0x108	/* MCBSP4_CLKX, MODE0 | INPUT | PULLDOWN */ +			0x156 0x108	/* MCBSP4_DR, MODE0 | INPUT | PULLDOWN */ +			0x158 0x000	/* MCBSP4_DX, MODE0 | OUTPUT */ +			0x15a 0x108	/* MCBSP4_FSX, MODE0 | INPUT | PULLDOWN */ +		>; +	}; + +	uart2_pins_default: pinmux_uart_pins_default@2 { +		pinctrl-single,pins = < +			0x144 0x4100	/* UART2_CTS, MODE0  | OUTPUT | OFFWAKEUP */ +			0x146 0x000	/* UART2_RTS, MODE0 | OUTPUT */ +			0x148 0x000	/* UART2_TX, MODE0 | OUTPUT */ +			0x14a 0x100	/* UART2_RX, MODE0 | INPUT */ +		>; +	}; + +	uart2_pins_idle: pinmux_uart_pins_idle@2 { +		pinctrl-single,pins = < +			0x144 0x4100	/* UART2_CTS, MODE0  | OUTPUT | OFFWAKEUP */ +			0x146 0x004	/* UART2_RTS, MODE4 | OUTPUT */ +			0x148 0x000	/* UART2_TX, MODE0 | OUTPUT */ +			0x14a 0x100	/* UART2_RX, MODE0 | INPUT */ +		>; +	}; + +	cc_alert_pin: pinmax_cc_alert_pin { +		pinctrl-single,pins = < +			0x13c 0x411c	/* MCBSP3_DX, MODE4 | INPUT | INPUT_PULLUP | OFFWAKEUP */ +		>; +	}; + +	atmxt_int_pullup: pinmux_atmxt_int_pullup { +		pinctrl-single,pins = < +			0x0e6 0x411c	/* CAM_D0, MODE4 | INPUT_PULLUP | OFFWAKEUP */ +		>; +	}; + +	atmxt_int_pulldown: pinmux_atmxt_int_pulldown { +		pinctrl-single,pins = < +			0x0e6 0x10c	/* CAM_D0, MODE4 | INPUT_PULLDOWN */ +		>; +	}; + +	display_vddio_pulldown: pinmux_vddio_pulldown { +		pinctrl-single,pins = < +			0x05a 0x00f	/* GPMC_A9, GPIO 42, MODE7 | PULLDOWN */ +		>; +	}; + +	display_vddio_output: pinmux_vddio_output { +		pinctrl-single,pins = < +			0x05a 0x004	/* GPMC_A9, GPIO 42, MODE4 | OUTPUT */ +		>; +	}; +}; + +&omap3_pmx_wkup{ +	pinctrl-names = "default"; +	pinctrl-0 = <&wkup_pins>; + +	wkup_pins: pinmux_wakeup_pins { +		pinctrl-single,pins = < +			0x006 0x008     /* SYS_CLKREQ, MODE0 | PULLDOWN */ +			0x018 0x000     /* SYS_OFF_MODE, MODE0 */ +			0x01a 0x10c     /* SYS_CLKOUT1, MODE4 | INPUT_PULLDOWN */ +			0x05a 0x004     /* GPIO_129, MODE4 | OUTPUT */ +		>; +	}; +}; + +/* leave gpio bank interface clocks on during suspend + * to avoid race condition in gpio_irq_handler */ +&gpio1 { +	ti,no_idle_on_suspend; +}; + +&gpio2 { +	ti,no_idle_on_suspend; +}; + +&gpio3 { +	ti,no_idle_on_suspend; +}; + +&gpio4 { +	ti,no_idle_on_suspend; +}; + +&gpio5 { +	ti,no_idle_on_suspend; +}; + +&gpio6 { +	ti,no_idle_on_suspend; +}; + +/* external */ +&mmc1 { +	status = "disabled"; +}; + +/* internal */ +&mmc2 { +	ti,non-removable; +	bus-width = <8>; +	vmmc-supply = <&ldo5_reg>; +	vmmc_aux-supply = <&sw3_reg>; +}; + +/* wireless */ +&mmc3 { +	ti,non-removable; +	cap-power-off-card; +	bus-width = <4>; +	vmmc-supply = <&vmmc>; +	wl_host_wake_gpio = <10>; +	status = "disabled"; +}; + +&usb_otg_hs { +	interface-type = <0>; +	usb-phy = <&tusb_phy>; +	mode = <3>; +	power = <50>; + +}; +/* c55 */ +&uart1 { +	flags = <0x00200000>; +	open_close_pm; +	autosuspend-delay = <50>; /* ms */ +}; +/* bluetooth */ +&uart2 { +	flags = <0x00200000>; +	ti,no-pm-qos; +	wakeup-capable; +	autosuspend-delay = <100>; /* ms */ +	timed-wakelock = <150>; /* ms */ +	rx_trig = <32>; + +	/* rts_gpio HACK */ +	gpios = <&gpio5 17 2>; /* gpio_145 (uart_rts) GPIOF_DIR_OUT|GPIOF_INIT_HIGH */ +	pinctrl-names = "default", "idle"; +	pinctrl-0 = <&uart2_pins_default>; +	pinctrl-1 = <&uart2_pins_idle>; + +	resume-noidle; +}; +/* serial console */ +&uart3 { +	wakeup-capable; +	autosuspend-delay = <3000>; /* ms */ +}; +/* m4 debug */ +&uart4 { +	wakeup-capable; +	autosuspend-delay = <50>; /* ms */ +	timed-wakelock = <50>; /* ms */ +	rx_trig = <32>; +}; diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 99ba6e14ebf..2b8802164c1 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi @@ -100,6 +100,7 @@  			#size-cells = <0>;  			pinctrl-single,register-width = <16>;  			pinctrl-single,function-mask = <0x7f1f>; +			#gpio-range-cells = <3>;  		};  		omap3_pmx_wkup: pinmux@0x48002a00 { @@ -109,6 +110,7 @@  			#size-cells = <0>;  			pinctrl-single,register-width = <16>;  			pinctrl-single,function-mask = <0x7f1f>; +			#gpio-range-cells = <3>;  		};  		gpio1: gpio@48310000 { @@ -132,6 +134,12 @@  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupt-cells = <2>; +			/* for gpio 32 33 there is no pnctrl controller defined */ +			gpio-ranges = <&omap3_pmx_core 2 0x25 10>, +					<&omap3_pmx_core 12 0x37 8>, +					<&omap3_pmx_core 20 0x40 8>, +					<&omap3_pmx_core 28 0x4B 3>, +					<&omap3_pmx_core 31 0x4f 1>;  		};  		gpio3: gpio@49052000 { @@ -143,6 +151,7 @@  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupt-cells = <2>; +			gpio-ranges = <&omap3_pmx_core 0 0x50 32>;  		};  		gpio4: gpio@49054000 { @@ -154,6 +163,13 @@  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupt-cells = <2>; +			/* +			* gpio 127 in wkup mux, whcih we can not use (see +			* sorce code for comment) +			*/ +			gpio-ranges = <&omap3_pmx_core 0 0x70 16>, +					<&omap3_pmx_core 16 0x82 14>, +					<&omap3_pmx_core 30 0x81 1>;  		};  		gpio5: gpio@49056000 { @@ -165,6 +181,11 @@  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupt-cells = <2>; +			/* +			* gpio 128 129 in wkup mux, whcih we can not use (see +			* sorce code for comment) +			*/ +			gpio-ranges = <&omap3_pmx_core 2 0x94 30>;  		};  		gpio6: gpio@49058000 { @@ -176,6 +197,15 @@  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupt-cells = <2>; +			/* for gpio 187 there is no pnctrl controller defined */ +			gpio-ranges = <&omap3_pmx_core 0 0xb2 7>, +					<&omap3_pmx_core 7 0x80 1>, +					<&omap3_pmx_core 8 0xc7 1>, +					<&omap3_pmx_core 9 0xc0 1>, +					<&omap3_pmx_core 10 0xcb 13>, +					<&omap3_pmx_core 23 0xc8 3>, +					<&omap3_pmx_core 26 0xd9 1>, +					<&omap3_pmx_core 28 0xc1 4>;  		};  		uart1: serial@4806a000 { @@ -523,5 +553,60 @@  			num-eps = <16>;  			ram-bits = <12>;  		}; + +		glbl_prm: glbl_prm@48307250 { +			/* +			* disabled by default. becasue two required +			* values should be defined in board file +			*/ +			status = "disabled"; +			compatible = "ti,omap3-glbl-prm"; +			reg = <0x48307250 0x60>; +			reg-names = "base-address"; +		}; + +		vc: vc@48307220 { +			compatible = "ti,omap3-vc"; +			reg = <0x48307220 0x24>; +			reg-names = "base-address"; + +			vc_mpu: vc_mpu { +				compatible = "ti,omap3-vc-channel-0"; +				ti,retention-micro-volts = <800000>; +			}; + +			vc_core: vc_core { +				compatible = "ti,omap3-vc-channel-1"; +				ti,retention-micro-volts = <800000>; +			}; +		}; + +		vp_mpu: vp@483072b0 { +			compatible = "ti,omap3-vp"; + +			reg = <0x483072b0 0x18>, <0x48306818 0x4>; +			reg-names = "base-address", "int-address"; +			ti,tranxdone-status-mask=<0x8000>; + +			ti,vc-channel = <&vc_mpu>; +			ti,min-step-micro-volts = <10000>; +			ti,max-step-micro-volts = <50000>; +			ti,min-micro-volts = <800000>; +			ti,max-micro-volts = <1380000>; +		}; + +		vp_core: vp@483072d0 { +			compatible = "ti,omap3-vp"; + +			reg = <0x483072d0 0x18>, <0x48306818 0x4>; +			reg-names = "base-address", "int-address"; +			ti,tranxdone-status-mask=<0x200000>; + +			ti,vc-channel = <&vc_core>; +			ti,min-step-micro-volts = <10000>; +			ti,max-step-micro-volts = <50000>; +			ti,min-micro-volts = <800000>; +			ti,max-micro-volts = <1200000>; +		};  	};  }; diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig index 9353184d730..992d4046bb8 100644 --- a/arch/arm/common/Kconfig +++ b/arch/arm/common/Kconfig @@ -17,3 +17,53 @@ config SHARP_PARAM  config SHARP_SCOOP  	bool + +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. diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile index 48434cbe3e8..384abdc09b6 100644 --- a/arch/arm/common/Makefile +++ b/arch/arm/common/Makefile @@ -4,6 +4,8 @@  obj-y				+= firmware.o +obj-$(CONFIG_FIQ_DEBUGGER)	+= fiq_debugger.o +obj-$(CONFIG_FIQ_GLUE)		+= fiq_glue.o fiq_glue_setup.o  obj-$(CONFIG_ICST)		+= icst.o  obj-$(CONFIG_SA1111)		+= sa1111.o  obj-$(CONFIG_PCI_HOST_VIA82C505) += via82c505.o diff --git a/arch/arm/common/fiq_debugger.c b/arch/arm/common/fiq_debugger.c new file mode 100644 index 00000000000..65b943c7630 --- /dev/null +++ b/arch/arm/common/fiq_debugger.c @@ -0,0 +1,1376 @@ +/* + * arch/arm/common/fiq_debugger.c + * + * Serial Debugger Interface accessed through an FIQ interrupt. + * + * Copyright (C) 2008 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + */ + +#include <stdarg.h> +#include <linux/module.h> +#include <linux/io.h> +#include <linux/console.h> +#include <linux/interrupt.h> +#include <linux/clk.h> +#include <linux/platform_device.h> +#include <linux/kernel_stat.h> +#include <linux/kmsg_dump.h> +#include <linux/irq.h> +#include <linux/delay.h> +#include <linux/reboot.h> +#include <linux/sched.h> +#include <linux/slab.h> +#include <linux/smp.h> +#include <linux/timer.h> +#include <linux/tty.h> +#include <linux/tty_flip.h> +#include <linux/wakelock.h> + +#include <asm/fiq_debugger.h> +#include <asm/fiq_glue.h> +#include <asm/stacktrace.h> + +#include <linux/uaccess.h> + +#include "fiq_debugger_ringbuf.h" + +#define DEBUG_MAX 64 +#define MAX_UNHANDLED_FIQ_COUNT 1000000 + +#define MAX_FIQ_DEBUGGER_PORTS 4 + +#define THREAD_INFO(sp) ((struct thread_info *) \ +		((unsigned long)(sp) & ~(THREAD_SIZE - 1))) + +struct fiq_debugger_state { +	struct fiq_glue_handler handler; + +	int fiq; +	int uart_irq; +	int signal_irq; +	int wakeup_irq; +	bool wakeup_irq_no_set_wake; +	struct clk *clk; +	struct fiq_debugger_pdata *pdata; +	struct platform_device *pdev; + +	char debug_cmd[DEBUG_MAX]; +	int debug_busy; +	int debug_abort; + +	char debug_buf[DEBUG_MAX]; +	int debug_count; + +	bool no_sleep; +	bool debug_enable; +	bool ignore_next_wakeup_irq; +	struct timer_list sleep_timer; +	spinlock_t sleep_timer_lock; +	bool uart_enabled; +	struct wake_lock debugger_wake_lock; +	bool console_enable; +	int current_cpu; +	atomic_t unhandled_fiq_count; +	bool in_fiq; + +	struct work_struct work; +	spinlock_t work_lock; +	char work_cmd[DEBUG_MAX]; + +#ifdef CONFIG_FIQ_DEBUGGER_CONSOLE +	spinlock_t console_lock; +	struct console console; +	struct tty_port tty_port; +	struct fiq_debugger_ringbuf *tty_rbuf; +	bool syslog_dumping; +#endif + +	unsigned int last_irqs[NR_IRQS]; +	unsigned int last_local_timer_irqs[NR_CPUS]; +}; + +#ifdef CONFIG_FIQ_DEBUGGER_CONSOLE +struct tty_driver *fiq_tty_driver; +#endif + +#ifdef CONFIG_FIQ_DEBUGGER_NO_SLEEP +static bool initial_no_sleep = true; +#else +static bool initial_no_sleep; +#endif + +#ifdef CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE +static bool initial_debug_enable = true; +static bool initial_console_enable = true; +#else +static bool initial_debug_enable; +static bool initial_console_enable; +#endif + +static bool fiq_kgdb_enable; + +module_param_named(no_sleep, initial_no_sleep, bool, 0644); +module_param_named(debug_enable, initial_debug_enable, bool, 0644); +module_param_named(console_enable, initial_console_enable, bool, 0644); +module_param_named(kgdb_enable, fiq_kgdb_enable, bool, 0644); + +#ifdef CONFIG_FIQ_DEBUGGER_WAKEUP_IRQ_ALWAYS_ON +static inline void enable_wakeup_irq(struct fiq_debugger_state *state) {} +static inline void disable_wakeup_irq(struct fiq_debugger_state *state) {} +#else +static inline void enable_wakeup_irq(struct fiq_debugger_state *state) +{ +	if (state->wakeup_irq < 0) +		return; +	enable_irq(state->wakeup_irq); +	if (!state->wakeup_irq_no_set_wake) +		enable_irq_wake(state->wakeup_irq); +} +static inline void disable_wakeup_irq(struct fiq_debugger_state *state) +{ +	if (state->wakeup_irq < 0) +		return; +	disable_irq_nosync(state->wakeup_irq); +	if (!state->wakeup_irq_no_set_wake) +		disable_irq_wake(state->wakeup_irq); +} +#endif + +static bool inline debug_have_fiq(struct fiq_debugger_state *state) +{ +	return (state->fiq >= 0); +} + +static void debug_force_irq(struct fiq_debugger_state *state) +{ +	unsigned int irq = state->signal_irq; + +	if (WARN_ON(!debug_have_fiq(state))) +		return; +	if (state->pdata->force_irq) { +		state->pdata->force_irq(state->pdev, irq); +	} else { +		struct irq_chip *chip = irq_get_chip(irq); +		if (chip && chip->irq_retrigger) +			chip->irq_retrigger(irq_get_irq_data(irq)); +	} +} + +static void debug_uart_enable(struct fiq_debugger_state *state) +{ +	if (state->clk) +		clk_enable(state->clk); +	if (state->pdata->uart_enable) +		state->pdata->uart_enable(state->pdev); +} + +static void debug_uart_disable(struct fiq_debugger_state *state) +{ +	if (state->pdata->uart_disable) +		state->pdata->uart_disable(state->pdev); +	if (state->clk) +		clk_disable(state->clk); +} + +static void debug_uart_flush(struct fiq_debugger_state *state) +{ +	if (state->pdata->uart_flush) +		state->pdata->uart_flush(state->pdev); +} + +static void debug_putc(struct fiq_debugger_state *state, char c) +{ +	state->pdata->uart_putc(state->pdev, c); +} + +static void debug_puts(struct fiq_debugger_state *state, char *s) +{ +	unsigned c; +	while ((c = *s++)) { +		if (c == '\n') +			debug_putc(state, '\r'); +		debug_putc(state, c); +	} +} + +static void debug_prompt(struct fiq_debugger_state *state) +{ +	debug_puts(state, "debug> "); +} + +static void dump_kernel_log(struct fiq_debugger_state *state) +{ +	char buf[512]; +	size_t len; +	struct kmsg_dumper dumper = { .active = true }; + + +	kmsg_dump_rewind_nolock(&dumper); +	while (kmsg_dump_get_line_nolock(&dumper, true, buf, +					 sizeof(buf) - 1, &len)) { +		buf[len] = 0; +		debug_puts(state, buf); +	} +} + +static char *mode_name(unsigned cpsr) +{ +	switch (cpsr & MODE_MASK) { +	case USR_MODE: return "USR"; +	case FIQ_MODE: return "FIQ"; +	case IRQ_MODE: return "IRQ"; +	case SVC_MODE: return "SVC"; +	case ABT_MODE: return "ABT"; +	case UND_MODE: return "UND"; +	case SYSTEM_MODE: return "SYS"; +	default: return "???"; +	} +} + +static int debug_printf(void *cookie, const char *fmt, ...) +{ +	struct fiq_debugger_state *state = cookie; +	char buf[256]; +	va_list ap; + +	va_start(ap, fmt); +	vsnprintf(buf, sizeof(buf), fmt, ap); +	va_end(ap); + +	debug_puts(state, buf); +	return state->debug_abort; +} + +/* Safe outside fiq context */ +static int debug_printf_nfiq(void *cookie, const char *fmt, ...) +{ +	struct fiq_debugger_state *state = cookie; +	char buf[256]; +	va_list ap; +	unsigned long irq_flags; + +	va_start(ap, fmt); +	vsnprintf(buf, 128, fmt, ap); +	va_end(ap); + +	local_irq_save(irq_flags); +	debug_puts(state, buf); +	debug_uart_flush(state); +	local_irq_restore(irq_flags); +	return state->debug_abort; +} + +static void dump_regs(struct fiq_debugger_state *state, unsigned *regs) +{ +	debug_printf(state, " r0 %08x  r1 %08x  r2 %08x  r3 %08x\n", +			regs[0], regs[1], regs[2], regs[3]); +	debug_printf(state, " r4 %08x  r5 %08x  r6 %08x  r7 %08x\n", +			regs[4], regs[5], regs[6], regs[7]); +	debug_printf(state, " r8 %08x  r9 %08x r10 %08x r11 %08x  mode %s\n", +			regs[8], regs[9], regs[10], regs[11], +			mode_name(regs[16])); +	if ((regs[16] & MODE_MASK) == USR_MODE) +		debug_printf(state, " ip %08x  sp %08x  lr %08x  pc %08x  " +				"cpsr %08x\n", regs[12], regs[13], regs[14], +				regs[15], regs[16]); +	else +		debug_printf(state, " ip %08x  sp %08x  lr %08x  pc %08x  " +				"cpsr %08x  spsr %08x\n", regs[12], regs[13], +				regs[14], regs[15], regs[16], regs[17]); +} + +struct mode_regs { +	unsigned long sp_svc; +	unsigned long lr_svc; +	unsigned long spsr_svc; + +	unsigned long sp_abt; +	unsigned long lr_abt; +	unsigned long spsr_abt; + +	unsigned long sp_und; +	unsigned long lr_und; +	unsigned long spsr_und; + +	unsigned long sp_irq; +	unsigned long lr_irq; +	unsigned long spsr_irq; + +	unsigned long r8_fiq; +	unsigned long r9_fiq; +	unsigned long r10_fiq; +	unsigned long r11_fiq; +	unsigned long r12_fiq; +	unsigned long sp_fiq; +	unsigned long lr_fiq; +	unsigned long spsr_fiq; +}; + +void __naked get_mode_regs(struct mode_regs *regs) +{ +	asm volatile ( +	"mrs	r1, cpsr\n" +	"msr	cpsr_c, #0xd3 @(SVC_MODE | PSR_I_BIT | PSR_F_BIT)\n" +	"stmia	r0!, {r13 - r14}\n" +	"mrs	r2, spsr\n" +	"msr	cpsr_c, #0xd7 @(ABT_MODE | PSR_I_BIT | PSR_F_BIT)\n" +	"stmia	r0!, {r2, r13 - r14}\n" +	"mrs	r2, spsr\n" +	"msr	cpsr_c, #0xdb @(UND_MODE | PSR_I_BIT | PSR_F_BIT)\n" +	"stmia	r0!, {r2, r13 - r14}\n" +	"mrs	r2, spsr\n" +	"msr	cpsr_c, #0xd2 @(IRQ_MODE | PSR_I_BIT | PSR_F_BIT)\n" +	"stmia	r0!, {r2, r13 - r14}\n" +	"mrs	r2, spsr\n" +	"msr	cpsr_c, #0xd1 @(FIQ_MODE | PSR_I_BIT | PSR_F_BIT)\n" +	"stmia	r0!, {r2, r8 - r14}\n" +	"mrs	r2, spsr\n" +	"stmia	r0!, {r2}\n" +	"msr	cpsr_c, r1\n" +	"bx	lr\n"); +} + + +static void dump_allregs(struct fiq_debugger_state *state, unsigned *regs) +{ +	struct mode_regs mode_regs; +	dump_regs(state, regs); +	get_mode_regs(&mode_regs); +	debug_printf(state, " svc: sp %08x  lr %08x  spsr %08x\n", +			mode_regs.sp_svc, mode_regs.lr_svc, mode_regs.spsr_svc); +	debug_printf(state, " abt: sp %08x  lr %08x  spsr %08x\n", +			mode_regs.sp_abt, mode_regs.lr_abt, mode_regs.spsr_abt); +	debug_printf(state, " und: sp %08x  lr %08x  spsr %08x\n", +			mode_regs.sp_und, mode_regs.lr_und, mode_regs.spsr_und); +	debug_printf(state, " irq: sp %08x  lr %08x  spsr %08x\n", +			mode_regs.sp_irq, mode_regs.lr_irq, mode_regs.spsr_irq); +	debug_printf(state, " fiq: r8 %08x  r9 %08x  r10 %08x  r11 %08x  " +			"r12 %08x\n", +			mode_regs.r8_fiq, mode_regs.r9_fiq, mode_regs.r10_fiq, +			mode_regs.r11_fiq, mode_regs.r12_fiq); +	debug_printf(state, " fiq: sp %08x  lr %08x  spsr %08x\n", +			mode_regs.sp_fiq, mode_regs.lr_fiq, mode_regs.spsr_fiq); +} + +static void dump_irqs(struct fiq_debugger_state *state) +{ +	int n; +	struct irq_desc *desc; + +	debug_printf(state, "irqnr       total  since-last   status  name\n"); +	for_each_irq_desc(n, desc) { +		struct irqaction *act = desc->action; +		if (!act && !kstat_irqs(n)) +			continue; +		debug_printf(state, "%5d: %10u %11u %8x  %s\n", n, +			kstat_irqs(n), +			kstat_irqs(n) - state->last_irqs[n], +			desc->status_use_accessors, +			(act && act->name) ? act->name : "???"); +		state->last_irqs[n] = kstat_irqs(n); +	} +} + +struct stacktrace_state { +	struct fiq_debugger_state *state; +	unsigned int depth; +}; + +static int report_trace(struct stackframe *frame, void *d) +{ +	struct stacktrace_state *sts = d; + +	if (sts->depth) { +		debug_printf(sts->state, +			"  pc: %p (%pF), lr %p (%pF), sp %p, fp %p\n", +			frame->pc, frame->pc, frame->lr, frame->lr, +			frame->sp, frame->fp); +		sts->depth--; +		return 0; +	} +	debug_printf(sts->state, "  ...\n"); + +	return sts->depth == 0; +} + +struct frame_tail { +	struct frame_tail *fp; +	unsigned long sp; +	unsigned long lr; +} __attribute__((packed)); + +static struct frame_tail *user_backtrace(struct fiq_debugger_state *state, +					struct frame_tail *tail) +{ +	struct frame_tail buftail[2]; + +	/* Also check accessibility of one struct frame_tail beyond */ +	if (!access_ok(VERIFY_READ, tail, sizeof(buftail))) { +		debug_printf(state, "  invalid frame pointer %p\n", tail); +		return NULL; +	} +	if (__copy_from_user_inatomic(buftail, tail, sizeof(buftail))) { +		debug_printf(state, +			"  failed to copy frame pointer %p\n", tail); +		return NULL; +	} + +	debug_printf(state, "  %p\n", buftail[0].lr); + +	/* frame pointers should strictly progress back up the stack +	 * (towards higher addresses) */ +	if (tail >= buftail[0].fp) +		return NULL; + +	return buftail[0].fp-1; +} + +void dump_stacktrace(struct fiq_debugger_state *state, +		struct pt_regs * const regs, unsigned int depth, void *ssp) +{ +	struct frame_tail *tail; +	struct thread_info *real_thread_info = THREAD_INFO(ssp); +	struct stacktrace_state sts; + +	sts.depth = depth; +	sts.state = state; +	*current_thread_info() = *real_thread_info; + +	if (!current) +		debug_printf(state, "current NULL\n"); +	else +		debug_printf(state, "pid: %d  comm: %s\n", +			current->pid, current->comm); +	dump_regs(state, (unsigned *)regs); + +	if (!user_mode(regs)) { +		struct stackframe frame; +		frame.fp = regs->ARM_fp; +		frame.sp = regs->ARM_sp; +		frame.lr = regs->ARM_lr; +		frame.pc = regs->ARM_pc; +		debug_printf(state, +			"  pc: %p (%pF), lr %p (%pF), sp %p, fp %p\n", +			regs->ARM_pc, regs->ARM_pc, regs->ARM_lr, regs->ARM_lr, +			regs->ARM_sp, regs->ARM_fp); +		walk_stackframe(&frame, report_trace, &sts); +		return; +	} + +	tail = ((struct frame_tail *) regs->ARM_fp) - 1; +	while (depth-- && tail && !((unsigned long) tail & 3)) +		tail = user_backtrace(state, tail); +} + +static void do_ps(struct fiq_debugger_state *state) +{ +	struct task_struct *g; +	struct task_struct *p; +	unsigned task_state; +	static const char stat_nam[] = "RSDTtZX"; + +	debug_printf(state, "pid   ppid  prio task            pc\n"); +	read_lock(&tasklist_lock); +	do_each_thread(g, p) { +		task_state = p->state ? __ffs(p->state) + 1 : 0; +		debug_printf(state, +			     "%5d %5d %4d ", p->pid, p->parent->pid, p->prio); +		debug_printf(state, "%-13.13s %c", p->comm, +			     task_state >= sizeof(stat_nam) ? '?' : stat_nam[task_state]); +		if (task_state == TASK_RUNNING) +			debug_printf(state, " running\n"); +		else +			debug_printf(state, " %08lx\n", thread_saved_pc(p)); +	} while_each_thread(g, p); +	read_unlock(&tasklist_lock); +} + +#ifdef CONFIG_FIQ_DEBUGGER_CONSOLE +static void begin_syslog_dump(struct fiq_debugger_state *state) +{ +	state->syslog_dumping = true; +} + +static void end_syslog_dump(struct fiq_debugger_state *state) +{ +	state->syslog_dumping = false; +} +#else +extern int do_syslog(int type, char __user *bug, int count); +static void begin_syslog_dump(struct fiq_debugger_state *state) +{ +	do_syslog(5 /* clear */, NULL, 0); +} + +static void end_syslog_dump(struct fiq_debugger_state *state) +{ +	dump_kernel_log(state); +} +#endif + +static void do_sysrq(struct fiq_debugger_state *state, char rq) +{ +	if ((rq == 'g' || rq == 'G') && !fiq_kgdb_enable) { +		debug_printf(state, "sysrq-g blocked\n"); +		return; +	} +	begin_syslog_dump(state); +	handle_sysrq(rq); +	end_syslog_dump(state); +} + +#ifdef CONFIG_KGDB +static void do_kgdb(struct fiq_debugger_state *state) +{ +	if (!fiq_kgdb_enable) { +		debug_printf(state, "kgdb through fiq debugger not enabled\n"); +		return; +	} + +	debug_printf(state, "enabling console and triggering kgdb\n"); +	state->console_enable = true; +	handle_sysrq('g'); +} +#endif + +static void debug_schedule_work(struct fiq_debugger_state *state, char *cmd) +{ +	unsigned long flags; + +	spin_lock_irqsave(&state->work_lock, flags); +	if (state->work_cmd[0] != '\0') { +		debug_printf(state, "work command processor busy\n"); +		spin_unlock_irqrestore(&state->work_lock, flags); +		return; +	} + +	strlcpy(state->work_cmd, cmd, sizeof(state->work_cmd)); +	spin_unlock_irqrestore(&state->work_lock, flags); + +	schedule_work(&state->work); +} + +static void debug_work(struct work_struct *work) +{ +	struct fiq_debugger_state *state; +	char work_cmd[DEBUG_MAX]; +	char *cmd; +	unsigned long flags; + +	state = container_of(work, struct fiq_debugger_state, work); + +	spin_lock_irqsave(&state->work_lock, flags); + +	strlcpy(work_cmd, state->work_cmd, sizeof(work_cmd)); +	state->work_cmd[0] = '\0'; + +	spin_unlock_irqrestore(&state->work_lock, flags); + +	cmd = work_cmd; +	if (!strncmp(cmd, "reboot", 6)) { +		cmd += 6; +		while (*cmd == ' ') +			cmd++; +		if (cmd != '\0') +			kernel_restart(cmd); +		else +			kernel_restart(NULL); +	} else { +		debug_printf(state, "unknown work command '%s'\n", work_cmd); +	} +} + +/* This function CANNOT be called in FIQ context */ +static void debug_irq_exec(struct fiq_debugger_state *state, char *cmd) +{ +	if (!strcmp(cmd, "ps")) +		do_ps(state); +	if (!strcmp(cmd, "sysrq")) +		do_sysrq(state, 'h'); +	if (!strncmp(cmd, "sysrq ", 6)) +		do_sysrq(state, cmd[6]); +#ifdef CONFIG_KGDB +	if (!strcmp(cmd, "kgdb")) +		do_kgdb(state); +#endif +	if (!strncmp(cmd, "reboot", 6)) +		debug_schedule_work(state, cmd); +} + +static void debug_help(struct fiq_debugger_state *state) +{ +	debug_printf(state,	"FIQ Debugger commands:\n" +				" pc            PC status\n" +				" regs          Register dump\n" +				" allregs       Extended Register dump\n" +				" bt            Stack trace\n" +				" reboot [<c>]  Reboot with command <c>\n" +				" reset [<c>]   Hard reset with command <c>\n" +				" irqs          Interupt status\n" +				" kmsg          Kernel log\n" +				" version       Kernel version\n"); +	debug_printf(state,	" sleep         Allow sleep while in FIQ\n" +				" nosleep       Disable sleep while in FIQ\n" +				" console       Switch terminal to console\n" +				" cpu           Current CPU\n" +				" cpu <number>  Switch to CPU<number>\n"); +	debug_printf(state,	" ps            Process list\n" +				" sysrq         sysrq options\n" +				" sysrq <param> Execute sysrq with <param>\n"); +#ifdef CONFIG_KGDB +	debug_printf(state,	" kgdb          Enter kernel debugger\n"); +#endif +} + +static void take_affinity(void *info) +{ +	struct fiq_debugger_state *state = info; +	struct cpumask cpumask; + +	cpumask_clear(&cpumask); +	cpumask_set_cpu(get_cpu(), &cpumask); + +	irq_set_affinity(state->uart_irq, &cpumask); +} + +static void switch_cpu(struct fiq_debugger_state *state, int cpu) +{ +	if (!debug_have_fiq(state)) +		smp_call_function_single(cpu, take_affinity, state, false); +	state->current_cpu = cpu; +} + +static bool debug_fiq_exec(struct fiq_debugger_state *state, +			const char *cmd, unsigned *regs, void *svc_sp) +{ +	bool signal_helper = false; + +	if (!strcmp(cmd, "help") || !strcmp(cmd, "?")) { +		debug_help(state); +	} else if (!strcmp(cmd, "pc")) { +		debug_printf(state, " pc %08x cpsr %08x mode %s\n", +			regs[15], regs[16], mode_name(regs[16])); +	} else if (!strcmp(cmd, "regs")) { +		dump_regs(state, regs); +	} else if (!strcmp(cmd, "allregs")) { +		dump_allregs(state, regs); +	} else if (!strcmp(cmd, "bt")) { +		dump_stacktrace(state, (struct pt_regs *)regs, 100, svc_sp); +	} else if (!strncmp(cmd, "reset", 5)) { +		cmd += 5; +		while (*cmd == ' ') +			cmd++; +		if (*cmd) { +			char tmp_cmd[32]; +			strlcpy(tmp_cmd, cmd, sizeof(tmp_cmd)); +			machine_restart(tmp_cmd); +		} else { +			machine_restart(NULL); +		} +	} else if (!strcmp(cmd, "irqs")) { +		dump_irqs(state); +	} else if (!strcmp(cmd, "kmsg")) { +		dump_kernel_log(state); +	} else if (!strcmp(cmd, "version")) { +		debug_printf(state, "%s\n", linux_banner); +	} else if (!strcmp(cmd, "sleep")) { +		state->no_sleep = false; +		debug_printf(state, "enabling sleep\n"); +	} else if (!strcmp(cmd, "nosleep")) { +		state->no_sleep = true; +		debug_printf(state, "disabling sleep\n"); +	} else if (!strcmp(cmd, "console")) { +		debug_printf(state, "console mode\n"); +		debug_uart_flush(state); +		state->console_enable = true; +	} else if (!strcmp(cmd, "cpu")) { +		debug_printf(state, "cpu %d\n", state->current_cpu); +	} else if (!strncmp(cmd, "cpu ", 4)) { +		unsigned long cpu = 0; +		if (strict_strtoul(cmd + 4, 10, &cpu) == 0) +			switch_cpu(state, cpu); +		else +			debug_printf(state, "invalid cpu\n"); +		debug_printf(state, "cpu %d\n", state->current_cpu); +	} else { +		if (state->debug_busy) { +			debug_printf(state, +				"command processor busy. trying to abort.\n"); +			state->debug_abort = -1; +		} else { +			strcpy(state->debug_cmd, cmd); +			state->debug_busy = 1; +		} + +		return true; +	} +	if (!state->console_enable) +		debug_prompt(state); + +	return signal_helper; +} + +static void sleep_timer_expired(unsigned long data) +{ +	struct fiq_debugger_state *state = (struct fiq_debugger_state *)data; +	unsigned long flags; + +	spin_lock_irqsave(&state->sleep_timer_lock, flags); +	if (state->uart_enabled && !state->no_sleep) { +		if (state->debug_enable && !state->console_enable) { +			state->debug_enable = false; +			debug_printf_nfiq(state, "suspending fiq debugger\n"); +		} +		state->ignore_next_wakeup_irq = true; +		debug_uart_disable(state); +		state->uart_enabled = false; +		enable_wakeup_irq(state); +	} +	wake_unlock(&state->debugger_wake_lock); +	spin_unlock_irqrestore(&state->sleep_timer_lock, flags); +} + +static void handle_wakeup(struct fiq_debugger_state *state) +{ +	unsigned long flags; + +	spin_lock_irqsave(&state->sleep_timer_lock, flags); +	if (state->wakeup_irq >= 0 && state->ignore_next_wakeup_irq) { +		state->ignore_next_wakeup_irq = false; +	} else if (!state->uart_enabled) { +		wake_lock(&state->debugger_wake_lock); +		debug_uart_enable(state); +		state->uart_enabled = true; +		disable_wakeup_irq(state); +		mod_timer(&state->sleep_timer, jiffies + HZ / 2); +	} +	spin_unlock_irqrestore(&state->sleep_timer_lock, flags); +} + +static irqreturn_t wakeup_irq_handler(int irq, void *dev) +{ +	struct fiq_debugger_state *state = dev; + +	if (!state->no_sleep) +		debug_puts(state, "WAKEUP\n"); +	handle_wakeup(state); + +	return IRQ_HANDLED; +} + +static void debug_handle_console_irq_context(struct fiq_debugger_state *state) +{ +#if defined(CONFIG_FIQ_DEBUGGER_CONSOLE) +	if (state->tty_port.ops) { +		int i; +		int count = fiq_debugger_ringbuf_level(state->tty_rbuf); +		for (i = 0; i < count; i++) { +			int c = fiq_debugger_ringbuf_peek(state->tty_rbuf, 0); +			tty_insert_flip_char(&state->tty_port, c, TTY_NORMAL); +			if (!fiq_debugger_ringbuf_consume(state->tty_rbuf, 1)) +				pr_warn("fiq tty failed to consume byte\n"); +		} +		tty_flip_buffer_push(&state->tty_port); +	} +#endif +} + +static void debug_handle_irq_context(struct fiq_debugger_state *state) +{ +	if (!state->no_sleep) { +		unsigned long flags; + +		spin_lock_irqsave(&state->sleep_timer_lock, flags); +		wake_lock(&state->debugger_wake_lock); +		mod_timer(&state->sleep_timer, jiffies + HZ * 5); +		spin_unlock_irqrestore(&state->sleep_timer_lock, flags); +	} +	debug_handle_console_irq_context(state); +	if (state->debug_busy) { +		debug_irq_exec(state, state->debug_cmd); +		if (!state->console_enable) +			debug_prompt(state); +		state->debug_busy = 0; +	} +} + +static int debug_getc(struct fiq_debugger_state *state) +{ +	return state->pdata->uart_getc(state->pdev); +} + +static bool debug_handle_uart_interrupt(struct fiq_debugger_state *state, +			int this_cpu, void *regs, void *svc_sp) +{ +	int c; +	static int last_c; +	int count = 0; +	bool signal_helper = false; + +	if (this_cpu != state->current_cpu) { +		if (state->in_fiq) +			return false; + +		if (atomic_inc_return(&state->unhandled_fiq_count) != +					MAX_UNHANDLED_FIQ_COUNT) +			return false; + +		debug_printf(state, "fiq_debugger: cpu %d not responding, " +			"reverting to cpu %d\n", state->current_cpu, +			this_cpu); + +		atomic_set(&state->unhandled_fiq_count, 0); +		switch_cpu(state, this_cpu); +		return false; +	} + +	state->in_fiq = true; + +	while ((c = debug_getc(state)) != FIQ_DEBUGGER_NO_CHAR) { +		count++; +		if (!state->debug_enable) { +			if ((c == 13) || (c == 10)) { +				state->debug_enable = true; +				state->debug_count = 0; +				debug_prompt(state); +			} +		} else if (c == FIQ_DEBUGGER_BREAK) { +			state->console_enable = false; +			debug_puts(state, "fiq debugger mode\n"); +			state->debug_count = 0; +			debug_prompt(state); +#ifdef CONFIG_FIQ_DEBUGGER_CONSOLE +		} else if (state->console_enable && state->tty_rbuf) { +			fiq_debugger_ringbuf_push(state->tty_rbuf, c); +			signal_helper = true; +#endif +		} else if ((c >= ' ') && (c < 127)) { +			if (state->debug_count < (DEBUG_MAX - 1)) { +				state->debug_buf[state->debug_count++] = c; +				debug_putc(state, c); +			} +		} else if ((c == 8) || (c == 127)) { +			if (state->debug_count > 0) { +				state->debug_count--; +				debug_putc(state, 8); +				debug_putc(state, ' '); +				debug_putc(state, 8); +			} +		} else if ((c == 13) || (c == 10)) { +			if (c == '\r' || (c == '\n' && last_c != '\r')) { +				debug_putc(state, '\r'); +				debug_putc(state, '\n'); +			} +			if (state->debug_count) { +				state->debug_buf[state->debug_count] = 0; +				state->debug_count = 0; +				signal_helper |= +					debug_fiq_exec(state, state->debug_buf, +						       regs, svc_sp); +			} else { +				debug_prompt(state); +			} +		} +		last_c = c; +	} +	if (!state->console_enable) +		debug_uart_flush(state); +	if (state->pdata->fiq_ack) +		state->pdata->fiq_ack(state->pdev, state->fiq); + +	/* poke sleep timer if necessary */ +	if (state->debug_enable && !state->no_sleep) +		signal_helper = true; + +	atomic_set(&state->unhandled_fiq_count, 0); +	state->in_fiq = false; + +	return signal_helper; +} + +static void debug_fiq(struct fiq_glue_handler *h, void *regs, void *svc_sp) +{ +	struct fiq_debugger_state *state = +		container_of(h, struct fiq_debugger_state, handler); +	unsigned int this_cpu = THREAD_INFO(svc_sp)->cpu; +	bool need_irq; + +	need_irq = debug_handle_uart_interrupt(state, this_cpu, regs, svc_sp); +	if (need_irq) +		debug_force_irq(state); +} + +/* + * When not using FIQs, we only use this single interrupt as an entry point. + * This just effectively takes over the UART interrupt and does all the work + * in this context. + */ +static irqreturn_t debug_uart_irq(int irq, void *dev) +{ +	struct fiq_debugger_state *state = dev; +	bool not_done; + +	handle_wakeup(state); + +	/* handle the debugger irq in regular context */ +	not_done = debug_handle_uart_interrupt(state, smp_processor_id(), +					      get_irq_regs(), +					      current_thread_info()); +	if (not_done) +		debug_handle_irq_context(state); + +	return IRQ_HANDLED; +} + +/* + * If FIQs are used, not everything can happen in fiq context. + * FIQ handler does what it can and then signals this interrupt to finish the + * job in irq context. + */ +static irqreturn_t debug_signal_irq(int irq, void *dev) +{ +	struct fiq_debugger_state *state = dev; + +	if (state->pdata->force_irq_ack) +		state->pdata->force_irq_ack(state->pdev, state->signal_irq); + +	debug_handle_irq_context(state); + +	return IRQ_HANDLED; +} + +static void debug_resume(struct fiq_glue_handler *h) +{ +	struct fiq_debugger_state *state = +		container_of(h, struct fiq_debugger_state, handler); +	if (state->pdata->uart_resume) +		state->pdata->uart_resume(state->pdev); +} + +#if defined(CONFIG_FIQ_DEBUGGER_CONSOLE) +struct tty_driver *debug_console_device(struct console *co, int *index) +{ +	*index = co->index; +	return fiq_tty_driver; +} + +static void debug_console_write(struct console *co, +				const char *s, unsigned int count) +{ +	struct fiq_debugger_state *state; +	unsigned long flags; + +	state = container_of(co, struct fiq_debugger_state, console); + +	if (!state->console_enable && !state->syslog_dumping) +		return; + +	debug_uart_enable(state); +	spin_lock_irqsave(&state->console_lock, flags); +	while (count--) { +		if (*s == '\n') +			debug_putc(state, '\r'); +		debug_putc(state, *s++); +	} +	debug_uart_flush(state); +	spin_unlock_irqrestore(&state->console_lock, flags); +	debug_uart_disable(state); +} + +static struct console fiq_debugger_console = { +	.name = "ttyFIQ", +	.device = debug_console_device, +	.write = debug_console_write, +	.flags = CON_PRINTBUFFER | CON_ANYTIME | CON_ENABLED, +}; + +int fiq_tty_open(struct tty_struct *tty, struct file *filp) +{ +	int line = tty->index; +	struct fiq_debugger_state **states = tty->driver->driver_state; +	struct fiq_debugger_state *state = states[line]; + +	return tty_port_open(&state->tty_port, tty, filp); +} + +void fiq_tty_close(struct tty_struct *tty, struct file *filp) +{ +	tty_port_close(tty->port, tty, filp); +} + +int  fiq_tty_write(struct tty_struct *tty, const unsigned char *buf, int count) +{ +	int i; +	int line = tty->index; +	struct fiq_debugger_state **states = tty->driver->driver_state; +	struct fiq_debugger_state *state = states[line]; + +	if (!state->console_enable) +		return count; + +	debug_uart_enable(state); +	spin_lock_irq(&state->console_lock); +	for (i = 0; i < count; i++) +		debug_putc(state, *buf++); +	spin_unlock_irq(&state->console_lock); +	debug_uart_disable(state); + +	return count; +} + +int  fiq_tty_write_room(struct tty_struct *tty) +{ +	return 16; +} + +#ifdef CONFIG_CONSOLE_POLL +static int fiq_tty_poll_init(struct tty_driver *driver, int line, char *options) +{ +	return 0; +} + +static int fiq_tty_poll_get_char(struct tty_driver *driver, int line) +{ +	struct fiq_debugger_state **states = driver->driver_state; +	struct fiq_debugger_state *state = states[line]; +	int c = NO_POLL_CHAR; + +	debug_uart_enable(state); +	if (debug_have_fiq(state)) { +		int count = fiq_debugger_ringbuf_level(state->tty_rbuf); +		if (count > 0) { +			c = fiq_debugger_ringbuf_peek(state->tty_rbuf, 0); +			fiq_debugger_ringbuf_consume(state->tty_rbuf, 1); +		} +	} else { +		c = debug_getc(state); +		if (c == FIQ_DEBUGGER_NO_CHAR) +			c = NO_POLL_CHAR; +	} +	debug_uart_disable(state); + +	return c; +} + +static void fiq_tty_poll_put_char(struct tty_driver *driver, int line, char ch) +{ +	struct fiq_debugger_state **states = driver->driver_state; +	struct fiq_debugger_state *state = states[line]; +	debug_uart_enable(state); +	debug_putc(state, ch); +	debug_uart_disable(state); +} +#endif + +static const struct tty_port_operations fiq_tty_port_ops; + +static const struct tty_operations fiq_tty_driver_ops = { +	.write = fiq_tty_write, +	.write_room = fiq_tty_write_room, +	.open = fiq_tty_open, +	.close = fiq_tty_close, +#ifdef CONFIG_CONSOLE_POLL +	.poll_init = fiq_tty_poll_init, +	.poll_get_char = fiq_tty_poll_get_char, +	.poll_put_char = fiq_tty_poll_put_char, +#endif +}; + +static int fiq_debugger_tty_init(void) +{ +	int ret; +	struct fiq_debugger_state **states = NULL; + +	states = kzalloc(sizeof(*states) * MAX_FIQ_DEBUGGER_PORTS, GFP_KERNEL); +	if (!states) { +		pr_err("Failed to allocate fiq debugger state structres\n"); +		return -ENOMEM; +	} + +	fiq_tty_driver = alloc_tty_driver(MAX_FIQ_DEBUGGER_PORTS); +	if (!fiq_tty_driver) { +		pr_err("Failed to allocate fiq debugger tty\n"); +		ret = -ENOMEM; +		goto err_free_state; +	} + +	fiq_tty_driver->owner		= THIS_MODULE; +	fiq_tty_driver->driver_name	= "fiq-debugger"; +	fiq_tty_driver->name		= "ttyFIQ"; +	fiq_tty_driver->type		= TTY_DRIVER_TYPE_SERIAL; +	fiq_tty_driver->subtype		= SERIAL_TYPE_NORMAL; +	fiq_tty_driver->init_termios	= tty_std_termios; +	fiq_tty_driver->flags		= TTY_DRIVER_REAL_RAW | +					  TTY_DRIVER_DYNAMIC_DEV; +	fiq_tty_driver->driver_state	= states; + +	fiq_tty_driver->init_termios.c_cflag = +					B115200 | CS8 | CREAD | HUPCL | CLOCAL; +	fiq_tty_driver->init_termios.c_ispeed = 115200; +	fiq_tty_driver->init_termios.c_ospeed = 115200; + +	tty_set_operations(fiq_tty_driver, &fiq_tty_driver_ops); + +	ret = tty_register_driver(fiq_tty_driver); +	if (ret) { +		pr_err("Failed to register fiq tty: %d\n", ret); +		goto err_free_tty; +	} + +	pr_info("Registered FIQ tty driver\n"); +	return 0; + +err_free_tty: +	put_tty_driver(fiq_tty_driver); +	fiq_tty_driver = NULL; +err_free_state: +	kfree(states); +	return ret; +} + +static int fiq_debugger_tty_init_one(struct fiq_debugger_state *state) +{ +	int ret; +	struct device *tty_dev; +	struct fiq_debugger_state **states = fiq_tty_driver->driver_state; + +	states[state->pdev->id] = state; + +	state->tty_rbuf = fiq_debugger_ringbuf_alloc(1024); +	if (!state->tty_rbuf) { +		pr_err("Failed to allocate fiq debugger ringbuf\n"); +		ret = -ENOMEM; +		goto err; +	} + +	tty_port_init(&state->tty_port); +	state->tty_port.ops = &fiq_tty_port_ops; + +	tty_dev = tty_port_register_device(&state->tty_port, fiq_tty_driver, +					   state->pdev->id, &state->pdev->dev); +	if (IS_ERR(tty_dev)) { +		pr_err("Failed to register fiq debugger tty device\n"); +		ret = PTR_ERR(tty_dev); +		goto err; +	} + +	device_set_wakeup_capable(tty_dev, 1); + +	pr_info("Registered fiq debugger ttyFIQ%d\n", state->pdev->id); + +	return 0; + +err: +	fiq_debugger_ringbuf_free(state->tty_rbuf); +	state->tty_rbuf = NULL; +	return ret; +} +#endif + +static int fiq_debugger_dev_suspend(struct device *dev) +{ +	struct platform_device *pdev = to_platform_device(dev); +	struct fiq_debugger_state *state = platform_get_drvdata(pdev); + +	if (state->pdata->uart_dev_suspend) +		return state->pdata->uart_dev_suspend(pdev); +	return 0; +} + +static int fiq_debugger_dev_resume(struct device *dev) +{ +	struct platform_device *pdev = to_platform_device(dev); +	struct fiq_debugger_state *state = platform_get_drvdata(pdev); + +	if (state->pdata->uart_dev_resume) +		return state->pdata->uart_dev_resume(pdev); +	return 0; +} + +static int fiq_debugger_probe(struct platform_device *pdev) +{ +	int ret; +	struct fiq_debugger_pdata *pdata = dev_get_platdata(&pdev->dev); +	struct fiq_debugger_state *state; +	int fiq; +	int uart_irq; + +	if (pdev->id >= MAX_FIQ_DEBUGGER_PORTS) +		return -EINVAL; + +	if (!pdata->uart_getc || !pdata->uart_putc) +		return -EINVAL; +	if ((pdata->uart_enable && !pdata->uart_disable) || +	    (!pdata->uart_enable && pdata->uart_disable)) +		return -EINVAL; + +	fiq = platform_get_irq_byname(pdev, "fiq"); +	uart_irq = platform_get_irq_byname(pdev, "uart_irq"); + +	/* uart_irq mode and fiq mode are mutually exclusive, but one of them +	 * is required */ +	if ((uart_irq < 0 && fiq < 0) || (uart_irq >= 0 && fiq >= 0)) +		return -EINVAL; +	if (fiq >= 0 && !pdata->fiq_enable) +		return -EINVAL; + +	state = kzalloc(sizeof(*state), GFP_KERNEL); +	setup_timer(&state->sleep_timer, sleep_timer_expired, +		    (unsigned long)state); +	state->pdata = pdata; +	state->pdev = pdev; +	state->no_sleep = initial_no_sleep; +	state->debug_enable = initial_debug_enable; +	state->console_enable = initial_console_enable; + +	state->fiq = fiq; +	state->uart_irq = uart_irq; +	state->signal_irq = platform_get_irq_byname(pdev, "signal"); +	state->wakeup_irq = platform_get_irq_byname(pdev, "wakeup"); + +	INIT_WORK(&state->work, debug_work); +	spin_lock_init(&state->work_lock); + +	platform_set_drvdata(pdev, state); + +	spin_lock_init(&state->sleep_timer_lock); + +	if (state->wakeup_irq < 0 && debug_have_fiq(state)) +		state->no_sleep = true; +	state->ignore_next_wakeup_irq = !state->no_sleep; + +	wake_lock_init(&state->debugger_wake_lock, +			WAKE_LOCK_SUSPEND, "serial-debug"); + +	state->clk = clk_get(&pdev->dev, NULL); +	if (IS_ERR(state->clk)) +		state->clk = NULL; + +	/* do not call pdata->uart_enable here since uart_init may still +	 * need to do some initialization before uart_enable can work. +	 * So, only try to manage the clock during init. +	 */ +	if (state->clk) +		clk_enable(state->clk); + +	if (pdata->uart_init) { +		ret = pdata->uart_init(pdev); +		if (ret) +			goto err_uart_init; +	} + +	debug_printf_nfiq(state, "<hit enter %sto activate fiq debugger>\n", +				state->no_sleep ? "" : "twice "); + +	if (debug_have_fiq(state)) { +		state->handler.fiq = debug_fiq; +		state->handler.resume = debug_resume; +		ret = fiq_glue_register_handler(&state->handler); +		if (ret) { +			pr_err("%s: could not install fiq handler\n", __func__); +			goto err_register_fiq; +		} + +		pdata->fiq_enable(pdev, state->fiq, 1); +	} else { +		ret = request_irq(state->uart_irq, debug_uart_irq, +				  IRQF_NO_SUSPEND, "debug", state); +		if (ret) { +			pr_err("%s: could not install irq handler\n", __func__); +			goto err_register_irq; +		} + +		/* for irq-only mode, we want this irq to wake us up, if it +		 * can. +		 */ +		enable_irq_wake(state->uart_irq); +	} + +	if (state->clk) +		clk_disable(state->clk); + +	if (state->signal_irq >= 0) { +		ret = request_irq(state->signal_irq, debug_signal_irq, +			  IRQF_TRIGGER_RISING, "debug-signal", state); +		if (ret) +			pr_err("serial_debugger: could not install signal_irq"); +	} + +	if (state->wakeup_irq >= 0) { +		ret = request_irq(state->wakeup_irq, wakeup_irq_handler, +				  IRQF_TRIGGER_FALLING | IRQF_DISABLED, +				  "debug-wakeup", state); +		if (ret) { +			pr_err("serial_debugger: " +				"could not install wakeup irq\n"); +			state->wakeup_irq = -1; +		} else { +			ret = enable_irq_wake(state->wakeup_irq); +			if (ret) { +				pr_err("serial_debugger: " +					"could not enable wakeup\n"); +				state->wakeup_irq_no_set_wake = true; +			} +		} +	} +	if (state->no_sleep) +		handle_wakeup(state); + +#if defined(CONFIG_FIQ_DEBUGGER_CONSOLE) +	spin_lock_init(&state->console_lock); +	state->console = fiq_debugger_console; +	state->console.index = pdev->id; +	if (!console_set_on_cmdline) +		add_preferred_console(state->console.name, +			state->console.index, NULL); +	register_console(&state->console); +	fiq_debugger_tty_init_one(state); +#endif +	return 0; + +err_register_irq: +err_register_fiq: +	if (pdata->uart_free) +		pdata->uart_free(pdev); +err_uart_init: +	if (state->clk) +		clk_disable(state->clk); +	if (state->clk) +		clk_put(state->clk); +	wake_lock_destroy(&state->debugger_wake_lock); +	platform_set_drvdata(pdev, NULL); +	kfree(state); +	return ret; +} + +static const struct dev_pm_ops fiq_debugger_dev_pm_ops = { +	.suspend	= fiq_debugger_dev_suspend, +	.resume		= fiq_debugger_dev_resume, +}; + +static struct platform_driver fiq_debugger_driver = { +	.probe	= fiq_debugger_probe, +	.driver	= { +		.name	= "fiq_debugger", +		.pm	= &fiq_debugger_dev_pm_ops, +	}, +}; + +static int __init fiq_debugger_init(void) +{ +#if defined(CONFIG_FIQ_DEBUGGER_CONSOLE) +	fiq_debugger_tty_init(); +#endif +	return platform_driver_register(&fiq_debugger_driver); +} + +postcore_initcall(fiq_debugger_init); diff --git a/arch/arm/common/fiq_debugger_ringbuf.h b/arch/arm/common/fiq_debugger_ringbuf.h new file mode 100644 index 00000000000..2649b558108 --- /dev/null +++ b/arch/arm/common/fiq_debugger_ringbuf.h @@ -0,0 +1,94 @@ +/* + * arch/arm/common/fiq_debugger_ringbuf.c + * + * simple lockless ringbuffer + * + * Copyright (C) 2010 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + */ + +#include <linux/kernel.h> +#include <linux/slab.h> + +struct fiq_debugger_ringbuf { +	int len; +	int head; +	int tail; +	u8 buf[]; +}; + + +static inline struct fiq_debugger_ringbuf *fiq_debugger_ringbuf_alloc(int len) +{ +	struct fiq_debugger_ringbuf *rbuf; + +	rbuf = kzalloc(sizeof(*rbuf) + len, GFP_KERNEL); +	if (rbuf == NULL) +		return NULL; + +	rbuf->len = len; +	rbuf->head = 0; +	rbuf->tail = 0; +	smp_mb(); + +	return rbuf; +} + +static inline void fiq_debugger_ringbuf_free(struct fiq_debugger_ringbuf *rbuf) +{ +	kfree(rbuf); +} + +static inline int fiq_debugger_ringbuf_level(struct fiq_debugger_ringbuf *rbuf) +{ +	int level = rbuf->head - rbuf->tail; + +	if (level < 0) +		level = rbuf->len + level; + +	return level; +} + +static inline int fiq_debugger_ringbuf_room(struct fiq_debugger_ringbuf *rbuf) +{ +	return rbuf->len - fiq_debugger_ringbuf_level(rbuf) - 1; +} + +static inline u8 +fiq_debugger_ringbuf_peek(struct fiq_debugger_ringbuf *rbuf, int i) +{ +	return rbuf->buf[(rbuf->tail + i) % rbuf->len]; +} + +static inline int +fiq_debugger_ringbuf_consume(struct fiq_debugger_ringbuf *rbuf, int count) +{ +	count = min(count, fiq_debugger_ringbuf_level(rbuf)); + +	rbuf->tail = (rbuf->tail + count) % rbuf->len; +	smp_mb(); + +	return count; +} + +static inline int +fiq_debugger_ringbuf_push(struct fiq_debugger_ringbuf *rbuf, u8 datum) +{ +	if (fiq_debugger_ringbuf_room(rbuf) == 0) +		return 0; + +	rbuf->buf[rbuf->head] = datum; +	smp_mb(); +	rbuf->head = (rbuf->head + 1) % rbuf->len; +	smp_mb(); + +	return 1; +} diff --git a/arch/arm/common/fiq_glue.S b/arch/arm/common/fiq_glue.S new file mode 100644 index 00000000000..24b42cec481 --- /dev/null +++ b/arch/arm/common/fiq_glue.S @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2008 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + */ + +#include <linux/linkage.h> +#include <asm/assembler.h> + +		.text + +		.global fiq_glue_end + +		/* fiq stack: r0-r15,cpsr,spsr of interrupted mode */ + +ENTRY(fiq_glue) +		/* store pc, cpsr from previous mode, reserve space for spsr */ +		mrs	r12, spsr +		sub	lr, lr, #4 +		subs	r10, #1 +		bne	nested_fiq + +		str	r12, [sp, #-8]! +		str	lr, [sp, #-4]! + +		/* store r8-r14 from previous mode */ +		sub	sp, sp, #(7 * 4) +		stmia	sp, {r8-r14}^ +		nop + +		/* store r0-r7 from previous mode */ +		stmfd	sp!, {r0-r7} + +		/* setup func(data,regs) arguments */ +		mov	r0, r9 +		mov	r1, sp +		mov	r3, r8 + +		mov	r7, sp + +		/* Get sp and lr from non-user modes */ +		and	r4, r12, #MODE_MASK +		cmp	r4, #USR_MODE +		beq	fiq_from_usr_mode + +		mov	r7, sp +		orr	r4, r4, #(PSR_I_BIT | PSR_F_BIT) +		msr	cpsr_c, r4 +		str	sp, [r7, #(4 * 13)] +		str	lr, [r7, #(4 * 14)] +		mrs	r5, spsr +		str	r5, [r7, #(4 * 17)] + +		cmp	r4, #(SVC_MODE | PSR_I_BIT | PSR_F_BIT) +		/* use fiq stack if we reenter this mode */ +		subne	sp, r7, #(4 * 3) + +fiq_from_usr_mode: +		msr	cpsr_c, #(SVC_MODE | PSR_I_BIT | PSR_F_BIT) +		mov	r2, sp +		sub	sp, r7, #12 +		stmfd	sp!, {r2, ip, lr} +		/* call func(data,regs) */ +		blx	r3 +		ldmfd	sp, {r2, ip, lr} +		mov	sp, r2 + +		/* restore/discard saved state */ +		cmp	r4, #USR_MODE +		beq	fiq_from_usr_mode_exit + +		msr	cpsr_c, r4 +		ldr	sp, [r7, #(4 * 13)] +		ldr	lr, [r7, #(4 * 14)] +		msr	spsr_cxsf, r5 + +fiq_from_usr_mode_exit: +		msr	cpsr_c, #(FIQ_MODE | PSR_I_BIT | PSR_F_BIT) + +		ldmfd	sp!, {r0-r7} +		ldr	lr, [sp, #(4 * 7)] +		ldr	r12, [sp, #(4 * 8)] +		add	sp, sp, #(10 * 4) +exit_fiq: +		msr	spsr_cxsf, r12 +		add	r10, #1 +		cmp	r11, #0 +		moveqs	pc, lr +		bx	r11 /* jump to custom fiq return function */ + +nested_fiq: +		orr	r12, r12, #(PSR_F_BIT) +		b	exit_fiq + +fiq_glue_end: + +ENTRY(fiq_glue_setup) /* func, data, sp, smc call number */ +		stmfd		sp!, {r4} +		mrs		r4, cpsr +		msr		cpsr_c, #(FIQ_MODE | PSR_I_BIT | PSR_F_BIT) +		movs		r8, r0 +		mov		r9, r1 +		mov		sp, r2 +		mov		r11, r3 +		moveq		r10, #0 +		movne		r10, #1 +		msr		cpsr_c, r4 +		ldmfd		sp!, {r4} +		bx		lr + diff --git a/arch/arm/common/fiq_glue_setup.c b/arch/arm/common/fiq_glue_setup.c new file mode 100644 index 00000000000..8cb1b611c6d --- /dev/null +++ b/arch/arm/common/fiq_glue_setup.c @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2010 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + */ + +#include <linux/kernel.h> +#include <linux/percpu.h> +#include <linux/slab.h> +#include <asm/fiq.h> +#include <asm/fiq_glue.h> + +extern unsigned char fiq_glue, fiq_glue_end; +extern void fiq_glue_setup(void *func, void *data, void *sp, +			   fiq_return_handler_t fiq_return_handler); + +static struct fiq_handler fiq_debbuger_fiq_handler = { +	.name = "fiq_glue", +}; +DEFINE_PER_CPU(void *, fiq_stack); +static struct fiq_glue_handler *current_handler; +static fiq_return_handler_t fiq_return_handler; +static DEFINE_MUTEX(fiq_glue_lock); + +static void fiq_glue_setup_helper(void *info) +{ +	struct fiq_glue_handler *handler = info; +	fiq_glue_setup(handler->fiq, handler, +		__get_cpu_var(fiq_stack) + THREAD_START_SP, +		fiq_return_handler); +} + +int fiq_glue_register_handler(struct fiq_glue_handler *handler) +{ +	int ret; +	int cpu; + +	if (!handler || !handler->fiq) +		return -EINVAL; + +	mutex_lock(&fiq_glue_lock); +	if (fiq_stack) { +		ret = -EBUSY; +		goto err_busy; +	} + +	for_each_possible_cpu(cpu) { +		void *stack; +		stack = (void *)__get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER); +		if (WARN_ON(!stack)) { +			ret = -ENOMEM; +			goto err_alloc_fiq_stack; +		} +		per_cpu(fiq_stack, cpu) = stack; +	} + +	ret = claim_fiq(&fiq_debbuger_fiq_handler); +	if (WARN_ON(ret)) +		goto err_claim_fiq; + +	current_handler = handler; +	on_each_cpu(fiq_glue_setup_helper, handler, true); +	set_fiq_handler(&fiq_glue, &fiq_glue_end - &fiq_glue); + +	mutex_unlock(&fiq_glue_lock); +	return 0; + +err_claim_fiq: +err_alloc_fiq_stack: +	for_each_possible_cpu(cpu) { +		__free_pages(per_cpu(fiq_stack, cpu), THREAD_SIZE_ORDER); +		per_cpu(fiq_stack, cpu) = NULL; +	} +err_busy: +	mutex_unlock(&fiq_glue_lock); +	return ret; +} + +static void fiq_glue_update_return_handler(void (*fiq_return)(void)) +{ +	fiq_return_handler = fiq_return; +	if (current_handler) +		on_each_cpu(fiq_glue_setup_helper, current_handler, true); +} + +int fiq_glue_set_return_handler(void (*fiq_return)(void)) +{ +	int ret; + +	mutex_lock(&fiq_glue_lock); +	if (fiq_return_handler) { +		ret = -EBUSY; +		goto err_busy; +	} +	fiq_glue_update_return_handler(fiq_return); +	ret = 0; +err_busy: +	mutex_unlock(&fiq_glue_lock); + +	return ret; +} +EXPORT_SYMBOL(fiq_glue_set_return_handler); + +int fiq_glue_clear_return_handler(void (*fiq_return)(void)) +{ +	int ret; + +	mutex_lock(&fiq_glue_lock); +	if (WARN_ON(fiq_return_handler != fiq_return)) { +		ret = -EINVAL; +		goto err_inval; +	} +	fiq_glue_update_return_handler(NULL); +	ret = 0; +err_inval: +	mutex_unlock(&fiq_glue_lock); + +	return ret; +} +EXPORT_SYMBOL(fiq_glue_clear_return_handler); + +/** + * fiq_glue_resume - Restore fiqs after suspend or low power idle states + * + * This must be called before calling local_fiq_enable after returning from a + * power state where the fiq mode registers were lost. If a driver provided + * a resume hook when it registered the handler it will be called. + */ + +void fiq_glue_resume(void) +{ +	if (!current_handler) +		return; +	fiq_glue_setup(current_handler->fiq, current_handler, +		__get_cpu_var(fiq_stack) + THREAD_START_SP, +		fiq_return_handler); +	if (current_handler->resume) +		current_handler->resume(current_handler); +} + diff --git a/arch/arm/configs/.gitignore b/arch/arm/configs/.gitignore new file mode 100644 index 00000000000..ad0f5338923 --- /dev/null +++ b/arch/arm/configs/.gitignore @@ -0,0 +1,12 @@ +# +# NOTE! Don't add files that are generated in specific +# subdirectories here. Add them in the ".gitignore" file +# in that subdirectory instead. +# +# NOTE! Please use 'git ls-files -i --exclude-standard' +# command after changing this file, to see if there are +# any tracked files which get ignored after the change. +# +# Normal rules +# +__ext_mapphone_defconfig diff --git a/arch/arm/configs/minnow_defconfig b/arch/arm/configs/minnow_defconfig new file mode 100644 index 00000000000..38ae97a68a7 --- /dev/null +++ b/arch/arm/configs/minnow_defconfig @@ -0,0 +1,3081 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/arm 3.10.0 Kernel Configuration +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_HAVE_PROC_CPU=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_ARCH_HAS_CPUFREQ=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_ARM_PATCH_PHYS_VIRT=y +CONFIG_GENERIC_BUG=y +CONFIG_BOOTINFO=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_EXTABLE_SORT=y + +# +# General setup +# +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +CONFIG_DEFAULT_HOSTNAME="(none)" +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_FHANDLE is not set +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_WATCH=y +CONFIG_AUDIT_TREE=y +# CONFIG_AUDIT_LOGINUID_IMMUTABLE is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_IRQ_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_SPARSE_IRQ=y +CONFIG_KTIME_SCALAR=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=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=y +CONFIG_HIGH_RES_TIMERS=y + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set + +# +# RCU Subsystem +# +# CONFIG_TREE_PREEMPT_RCU is not set +CONFIG_TINY_PREEMPT_RCU=y +CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_STALL_COMMON is not set +# CONFIG_TREE_RCU_TRACE is not set +# CONFIG_RCU_BOOST is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_CGROUPS=y +CONFIG_CGROUP_DEBUG=y +CONFIG_CGROUP_FREEZER=y +# CONFIG_CGROUP_DEVICE is not set +# CONFIG_CPUSETS is not set +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +# CONFIG_MEMCG is not set +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +# CONFIG_CFS_BANDWIDTH is not set +CONFIG_RT_GROUP_SCHED=y +# CONFIG_BLK_CGROUP is not set +# CONFIG_CHECKPOINT_RESTORE is not set +# CONFIG_NAMESPACES is not set +CONFIG_UIDGID_CONVERTED=y +# CONFIG_UIDGID_STRICT_TYPE_CHECKS is not set +# CONFIG_SCHED_AUTOGROUP is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +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 is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_HAVE_UID16=y +CONFIG_HOTPLUG=y +CONFIG_PANIC_TIMEOUT=1 +CONFIG_EXPERT=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_EMBEDDED=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +# CONFIG_PROFILING is not set +CONFIG_TRACEPOINTS=y +CONFIG_HAVE_OPROFILE=y +# CONFIG_JUMP_LABEL is not set +# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=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_ARCH_JUMP_LABEL=y +CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP_FILTER=y +CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_MODULES_USE_ELF_REL=y +CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_OLD_SIGACTION=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +# CONFIG_MODULES is not set +CONFIG_BLOCK=y +CONFIG_LBDAF=y +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_BLK_DEV_BSGLIB is not set +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_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 is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_ROW=y +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_ROW=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="row" +CONFIG_UNINLINE_SPIN_UNLOCK=y +CONFIG_FREEZER=y + +# +# System Type +# +CONFIG_MMU=y +CONFIG_ARCH_MULTIPLATFORM=y +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 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_KIRKWOOD 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_MSM is not set +# CONFIG_ARCH_SHMOBILE 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_S5P64X0 is not set +# CONFIG_ARCH_S5PC100 is not set +# CONFIG_ARCH_S5PV210 is not set +# CONFIG_ARCH_EXYNOS is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_U300 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_MVEBU is not set +# CONFIG_ARCH_BCM is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_ARCH_HIGHBANK is not set +# CONFIG_ARCH_MXC is not set + +# +# TI OMAP Common Features +# + +# +# OMAP Feature Selections +# +# CONFIG_POWER_AVS_OMAP is not set +CONFIG_OMAP_RESET_CLOCKS=y +CONFIG_OMAP_MUX=y +CONFIG_OMAP_MUX_DEBUG=y +CONFIG_OMAP_MUX_WARNINGS=y +CONFIG_OMAP_32K_TIMER=y +CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE=y +CONFIG_OMAP3_L2_AUX_SECURE_SERVICE_SET_ID=41 +CONFIG_OMAP_DM_TIMER=y +CONFIG_OMAP_PM_NOOP=y +# CONFIG_MACH_OMAP_GENERIC is not set +CONFIG_ARCH_OMAP=y +CONFIG_ARCH_OMAP2PLUS=y + +# +# TI OMAP2/3/4 Specific Features +# +# CONFIG_ARCH_OMAP2PLUS_TYPICAL is not set +CONFIG_SOC_HAS_OMAP2_SDRC=y +CONFIG_ARCH_OMAP3=y +# CONFIG_ARCH_OMAP4 is not set +# CONFIG_SOC_OMAP5 is not set +CONFIG_SOC_OMAP3430=y +# CONFIG_SOC_TI81XX is not set +# CONFIG_SOC_AM33XX is not set +CONFIG_OMAP_PACKAGE_CBP=y + +# +# OMAP Board Type +# +# CONFIG_MACH_OMAP3_BEAGLE is not set +# CONFIG_MACH_DEVKIT8000 is not set +# CONFIG_MACH_OMAP_LDP is not set +# CONFIG_MACH_OMAP3530_LV_SOM is not set +# CONFIG_MACH_OMAP3_TORPEDO is not set +# CONFIG_MACH_OVERO is not set +# CONFIG_MACH_OMAP3EVM is not set +# CONFIG_MACH_OMAP3517EVM is not set +# CONFIG_MACH_CRANEBOARD is not set +# CONFIG_MACH_OMAP3_PANDORA is not set +# CONFIG_MACH_TOUCHBOOK is not set +# CONFIG_MACH_OMAP_3430SDP is not set +# CONFIG_MACH_NOKIA_RM680 is not set +# CONFIG_MACH_NOKIA_RX51 is not set +# CONFIG_MACH_OMAP_ZOOM2 is not set +# CONFIG_MACH_OMAP_ZOOM3 is not set +# CONFIG_MACH_CM_T35 is not set +# CONFIG_MACH_CM_T3517 is not set +# CONFIG_MACH_IGEP0020 is not set +# CONFIG_MACH_IGEP0030 is not set +# CONFIG_MACH_SBC3530 is not set +# CONFIG_MACH_OMAP_3630SDP is not set +CONFIG_MACH_MINNOW=y +# CONFIG_OMAP3_EMU is not set +# CONFIG_OMAP3_SDRC_AC_TIMING is not set +# CONFIG_OMAP3_PAD_WKUP_IO is not set +CONFIG_DISABLE_OMAP_ERRATA_i583=y +# CONFIG_ARCH_SOCFPGA is not set +# CONFIG_PLAT_SPEAR is not set +# CONFIG_ARCH_SUNXI is not set +# CONFIG_ARCH_SIRF is not set +# CONFIG_ARCH_TEGRA is not set +# CONFIG_ARCH_U8500 is not set +# CONFIG_ARCH_VEXPRESS is not set +# CONFIG_ARCH_VIRT is not set +# CONFIG_ARCH_WM8850 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 is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_BPREDICT_DISABLE is not set +# CONFIG_CACHE_L2X0 is not set +CONFIG_ARM_L1_CACHE_SHIFT_6=y +CONFIG_ARM_L1_CACHE_SHIFT=6 +CONFIG_ARM_DMA_MEM_BUFFERABLE=y +CONFIG_ARM_NR_BANKS=8 +CONFIG_MULTI_IRQ_HANDLER=y +# CONFIG_ARM_ERRATA_430973 is not set +# CONFIG_ARM_ERRATA_720789 is not set +# CONFIG_ARM_ERRATA_754322 is not set +# CONFIG_ARM_ERRATA_775420 is not set +# CONFIG_FIQ_DEBUGGER is not set + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_HAVE_ARM_ARCH_TIMER is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_ARM_PSCI is not set +CONFIG_ARCH_NR_GPIO=0 +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +CONFIG_PREEMPT_COUNT=y +CONFIG_HZ=100 +CONFIG_SCHED_HRTICK=y +# CONFIG_THUMB2_KERNEL is not set +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set +CONFIG_HAVE_ARCH_PFN_VALID=y +# CONFIG_HIGHMEM is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_HAVE_MEMBLOCK=y +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_COMPACTION is not set +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_NEED_PER_CPU_KM=y +# CONFIG_CLEANCACHE is not set +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UACCESS_WITH_MEMCPY is not set +CONFIG_SECCOMP=y +# CONFIG_CC_STACKPROTECTOR is not set +# CONFIG_XEN is not set +# CONFIG_ARM_FLUSH_CONSOLE_ON_RESTART is not set + +# +# Boot options +# +CONFIG_USE_OF=y +CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE=y +CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE_NAMES="omap3-minnow-p0-p1a omap3-minnow-p1b omap3-minnow-p2-p2.4 omap3-minnow-rev-a omap3-minnow-rev-a-512 omap3-minnow-rev-b+" +CONFIG_ATAGS=y +# CONFIG_DEPRECATED_PARAM_STRUCT is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +# CONFIG_ARM_APPENDED_DTB is not set +CONFIG_CMDLINE="" +# CONFIG_KEXEC is not set +# CONFIG_CRASH_DUMP is not set +CONFIG_AUTO_ZRELADDR=y + +# +# CPU Power Management +# + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_INTERACTIVE=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +CONFIG_GENERIC_CPUFREQ_CPU0=y + +# +# ARM CPU frequency scaling drivers +# +# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set +# CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set +# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set +# CONFIG_ARM_EXYNOS5440_CPUFREQ is not set +# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set +CONFIG_ARM_OMAP2PLUS_CPUFREQ=y +CONFIG_CPU_IDLE=y +# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=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 + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_SCRIPT=y +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_MISC=y +CONFIG_COREDUMP=y + +# +# Power management options +# +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_HAS_WAKELOCK=y +CONFIG_WAKELOCK=y +CONFIG_PM_SLEEP=y +CONFIG_PM_AUTOSLEEP=y +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PM_WAKELOCKS_GC=y +CONFIG_PM_RUNTIME=y +CONFIG_PM=y +CONFIG_PM_DEBUG=y +# CONFIG_PM_ADVANCED_DEBUG is not set +# CONFIG_PM_TEST_SUSPEND is not set +CONFIG_PM_SLEEP_DEBUG=y +# CONFIG_APM_EMULATION is not set +CONFIG_ARCH_HAS_OPP=y +CONFIG_PM_OPP=y +CONFIG_PM_CLK=y +CONFIG_CPU_PM=y +CONFIG_SUSPEND_TIME=y +CONFIG_HAS_AMBIENTMODE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARM_CPU_SUSPEND=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_DIAG is not set +CONFIG_UNIX=y +# CONFIG_UNIX_DIAG is not set +CONFIG_XFRM=y +CONFIG_XFRM_ALGO=y +CONFIG_XFRM_USER=y +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_MIGRATE=y +# CONFIG_XFRM_STATISTICS is not set +CONFIG_XFRM_IPCOMP=y +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 is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +CONFIG_NET_IP_TUNNEL=y +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_NET_IPVTI is not set +# CONFIG_INET_AH is not set +CONFIG_INET_ESP=y +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=y +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +CONFIG_INET6_IPCOMP=y +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_TUNNEL=y +CONFIG_INET6_TUNNEL=y +CONFIG_INET6_XFRM_MODE_TRANSPORT=y +CONFIG_INET6_XFRM_MODE_TUNNEL=y +CONFIG_INET6_XFRM_MODE_BEET=y +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=y +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=y +# CONFIG_IPV6_GRE is not set +CONFIG_IPV6_MULTIPLE_TABLES=y +# CONFIG_IPV6_SUBTREES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_NETLABEL is not set +CONFIG_ANDROID_PARANOID_NETWORK=y +CONFIG_NET_ACTIVITY_STATS=y +CONFIG_NETWORK_SECMARK=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=y +# CONFIG_NETFILTER_NETLINK_ACCT is not set +CONFIG_NETFILTER_NETLINK_QUEUE=y +CONFIG_NETFILTER_NETLINK_LOG=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_SECMARK is not set +CONFIG_NF_CONNTRACK_PROCFS=y +CONFIG_NF_CONNTRACK_EVENTS=y +# CONFIG_NF_CONNTRACK_TIMEOUT is not set +# CONFIG_NF_CONNTRACK_TIMESTAMP is not set +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_GRE=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_CONNTRACK_AMANDA=y +CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_BROADCAST=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +# CONFIG_NF_CONNTRACK_SNMP is not set +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +# CONFIG_NF_CONNTRACK_SIP is not set +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +# CONFIG_NF_CT_NETLINK_TIMEOUT is not set +# CONFIG_NETFILTER_NETLINK_QUEUE_CT is not set +CONFIG_NF_NAT=y +CONFIG_NF_NAT_NEEDED=y +CONFIG_NF_NAT_PROTO_DCCP=y +CONFIG_NF_NAT_PROTO_UDPLITE=y +CONFIG_NF_NAT_PROTO_SCTP=y +CONFIG_NF_NAT_AMANDA=y +CONFIG_NF_NAT_FTP=y +CONFIG_NF_NAT_IRC=y +# CONFIG_NF_NAT_SIP is not set +CONFIG_NF_NAT_TFTP=y +CONFIG_NETFILTER_TPROXY=y +CONFIG_NETFILTER_XTABLES=y + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=y +CONFIG_NETFILTER_XT_CONNMARK=y + +# +# Xtables targets +# +# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set +# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y +CONFIG_NETFILTER_XT_TARGET_CONNMARK=y +# CONFIG_NETFILTER_XT_TARGET_CT is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_HL is not set +# CONFIG_NETFILTER_XT_TARGET_HMARK is not set +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y +# CONFIG_NETFILTER_XT_TARGET_LOG is not set +CONFIG_NETFILTER_XT_TARGET_MARK=y +CONFIG_NETFILTER_XT_TARGET_NETMAP=y +CONFIG_NETFILTER_XT_TARGET_NFLOG=y +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +CONFIG_NETFILTER_XT_TARGET_REDIRECT=y +# CONFIG_NETFILTER_XT_TARGET_TEE is not set +CONFIG_NETFILTER_XT_TARGET_TPROXY=y +CONFIG_NETFILTER_XT_TARGET_TRACE=y +# CONFIG_NETFILTER_XT_TARGET_SECMARK is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set + +# +# Xtables matches +# +# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_BPF is not set +# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set +CONFIG_NETFILTER_XT_MATCH_COMMENT=y +# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set +# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y +CONFIG_NETFILTER_XT_MATCH_CONNMARK=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +# CONFIG_NETFILTER_XT_MATCH_CPU is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +CONFIG_NETFILTER_XT_MATCH_ECN=y +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y +CONFIG_NETFILTER_XT_MATCH_HELPER=y +CONFIG_NETFILTER_XT_MATCH_HL=y +CONFIG_NETFILTER_XT_MATCH_IPRANGE=y +CONFIG_NETFILTER_XT_MATCH_LENGTH=y +CONFIG_NETFILTER_XT_MATCH_LIMIT=y +CONFIG_NETFILTER_XT_MATCH_MAC=y +CONFIG_NETFILTER_XT_MATCH_MARK=y +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set +# CONFIG_NETFILTER_XT_MATCH_OSF is not set +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y +CONFIG_NETFILTER_XT_MATCH_QTAGUID=y +CONFIG_NETFILTER_XT_MATCH_QUOTA=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_SOCKET=y +CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_NETFILTER_XT_MATCH_STATISTIC=y +CONFIG_NETFILTER_XT_MATCH_STRING=y +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +CONFIG_NETFILTER_XT_MATCH_TIME=y +CONFIG_NETFILTER_XT_MATCH_U32=y +# CONFIG_IP_SET is not set +# CONFIG_IP_VS is not set + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=y +CONFIG_NF_CONNTRACK_IPV4=y +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_MATCH_AH=y +CONFIG_IP_NF_MATCH_ECN=y +# CONFIG_IP_NF_MATCH_RPFILTER is not set +CONFIG_IP_NF_MATCH_TTL=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +CONFIG_IP_NF_TARGET_REJECT_SKERR=y +# CONFIG_IP_NF_TARGET_ULOG is not set +CONFIG_NF_NAT_IPV4=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_NETMAP=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_NF_NAT_PROTO_GRE=y +CONFIG_NF_NAT_PPTP=y +CONFIG_NF_NAT_H323=y +CONFIG_IP_NF_MANGLE=y +# CONFIG_IP_NF_TARGET_CLUSTERIP is not set +# CONFIG_IP_NF_TARGET_ECN is not set +# CONFIG_IP_NF_TARGET_TTL is not set +CONFIG_IP_NF_RAW=y +# CONFIG_IP_NF_SECURITY is not set +CONFIG_IP_NF_ARPTABLES=y +CONFIG_IP_NF_ARPFILTER=y +CONFIG_IP_NF_ARP_MANGLE=y + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV6=y +CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_IP6_NF_IPTABLES=y +# CONFIG_IP6_NF_MATCH_AH is not set +# CONFIG_IP6_NF_MATCH_EUI64 is not set +# CONFIG_IP6_NF_MATCH_FRAG is not set +# CONFIG_IP6_NF_MATCH_OPTS is not set +# CONFIG_IP6_NF_MATCH_HL is not set +# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set +# CONFIG_IP6_NF_MATCH_MH is not set +# CONFIG_IP6_NF_MATCH_RPFILTER is not set +# CONFIG_IP6_NF_MATCH_RT is not set +# CONFIG_IP6_NF_TARGET_HL is not set +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +CONFIG_IP6_NF_TARGET_REJECT_SKERR=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_RAW=y +# CONFIG_IP6_NF_SECURITY is not set +CONFIG_NF_NAT_IPV6=y +CONFIG_IP6_NF_TARGET_MASQUERADE=y +# CONFIG_IP6_NF_TARGET_NPT is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +CONFIG_HAVE_NET_DSA=y +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +# CONFIG_NET_SCH_CBQ is not set +CONFIG_NET_SCH_HTB=y +# CONFIG_NET_SCH_HFSC is not set +# CONFIG_NET_SCH_PRIO is not set +# CONFIG_NET_SCH_MULTIQ is not set +# CONFIG_NET_SCH_RED is not set +# CONFIG_NET_SCH_SFB is not set +# CONFIG_NET_SCH_SFQ is not set +# CONFIG_NET_SCH_TEQL is not set +# CONFIG_NET_SCH_TBF is not set +# CONFIG_NET_SCH_GRED is not set +# CONFIG_NET_SCH_DSMARK is not set +# CONFIG_NET_SCH_NETEM is not set +# CONFIG_NET_SCH_DRR is not set +# CONFIG_NET_SCH_MQPRIO is not set +# CONFIG_NET_SCH_CHOKE is not set +# CONFIG_NET_SCH_QFQ is not set +# CONFIG_NET_SCH_CODEL is not set +# CONFIG_NET_SCH_FQ_CODEL is not set +# CONFIG_NET_SCH_INGRESS is not set +# CONFIG_NET_SCH_PLUG is not set + +# +# Classification +# +CONFIG_NET_CLS=y +# CONFIG_NET_CLS_BASIC is not set +# CONFIG_NET_CLS_TCINDEX is not set +# CONFIG_NET_CLS_ROUTE4 is not set +# CONFIG_NET_CLS_FW is not set +CONFIG_NET_CLS_U32=y +# CONFIG_CLS_U32_PERF is not set +# CONFIG_CLS_U32_MARK is not set +# CONFIG_NET_CLS_RSVP is not set +# CONFIG_NET_CLS_RSVP6 is not set +# CONFIG_NET_CLS_FLOW is not set +# CONFIG_NET_CLS_CGROUP is not set +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +# CONFIG_NET_EMATCH_CMP is not set +# CONFIG_NET_EMATCH_NBYTE is not set +CONFIG_NET_EMATCH_U32=y +# CONFIG_NET_EMATCH_META is not set +# CONFIG_NET_EMATCH_TEXT is not set +CONFIG_NET_CLS_ACT=y +# CONFIG_NET_ACT_POLICE is not set +# CONFIG_NET_ACT_GACT is not set +# CONFIG_NET_ACT_MIRRED is not set +# CONFIG_NET_ACT_IPT is not set +# CONFIG_NET_ACT_NAT is not set +# CONFIG_NET_ACT_PEDIT is not set +# CONFIG_NET_ACT_SIMP is not set +# CONFIG_NET_ACT_SKBEDIT is not set +# CONFIG_NET_ACT_CSUM is not set +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y +# CONFIG_BATMAN_ADV is not set +# CONFIG_OPENVSWITCH is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_MMAP is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_NETPRIO_CGROUP is not set +CONFIG_BQL=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NET_DROP_MONITOR is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_NL80211_TESTMODE=y +# 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=y +# CONFIG_CFG80211_DEBUGFS is not set +# CONFIG_CFG80211_INTERNAL_REGDB is not set +# CONFIG_CFG80211_WEXT is not set +# CONFIG_LIB80211 is not set +# CONFIG_CFG80211_ALLOW_RECONNECT is not set +CONFIG_MAC80211=y +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_RC_PID=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +CONFIG_MAC80211_RC_DEFAULT_PID=y +# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set +CONFIG_MAC80211_RC_DEFAULT="pid" +# CONFIG_MAC80211_MESH is not set +# CONFIG_MAC80211_LEDS is not set +# CONFIG_MAC80211_DEBUGFS is not set +# CONFIG_MAC80211_MESSAGE_TRACING is not set +CONFIG_MAC80211_DEBUG_MENU=y +# CONFIG_MAC80211_NOINLINE is not set +# CONFIG_MAC80211_VERBOSE_DEBUG is not set +# CONFIG_MAC80211_MLME_DEBUG is not set +# CONFIG_MAC80211_STA_DEBUG is not set +# CONFIG_MAC80211_HT_DEBUG is not set +# CONFIG_MAC80211_IBSS_DEBUG is not set +# CONFIG_MAC80211_PS_DEBUG is not set +# CONFIG_MAC80211_TDLS_DEBUG is not set +# CONFIG_WIMAX is not set +CONFIG_RFKILL=y +CONFIG_RFKILL_PM=y +# CONFIG_RFKILL_INPUT is not set +# CONFIG_RFKILL_REGULATOR is not set +# CONFIG_RFKILL_GPIO is not set +CONFIG_RFKILL_WL18XX=y +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set +# CONFIG_NFC is not set +CONFIG_HAVE_BPF_JIT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_DEVTMPFS is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_LOADER_USER_HELPER=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_DMA_SHARED_BUFFER is not set +# CONFIG_CMA is not set + +# +# Bus devices +# +# CONFIG_OMAP_OCP2SCP is not set +CONFIG_OMAP_INTERCONNECT=y +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y +CONFIG_MTD=y +# 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 + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE 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_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_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +CONFIG_MTD_M25P80=y +# CONFIG_M25PXX_USE_FAST_READ is not set +CONFIG_M25PXX_M4SENSORHUB_CB=y +# CONFIG_MTD_SST25L is not set +# 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_IDS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set +# CONFIG_MTD_UBI is not set +CONFIG_DTC=y +CONFIG_OF=y + +# +# Device Tree and Open Firmware support +# +CONFIG_PROC_DEVICETREE=y +# CONFIG_OF_SELFTEST is not set +CONFIG_OF_FLATTREE=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_ADDRESS=y +CONFIG_OF_IRQ=y +CONFIG_OF_DEVICE=y +CONFIG_OF_I2C=y +CONFIG_OF_NET=y +CONFIG_OF_MDIO=y +CONFIG_OF_MTD=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_DRBD is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=16384 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_MG_DISK is not set +# CONFIG_BLK_DEV_RBD is not set + +# +# Misc devices +# +# CONFIG_SENSORS_LIS3LV02D is not set +# CONFIG_AD525X_DPOT is not set +# CONFIG_ATMEL_PWM is not set +# CONFIG_DUMMY_IRQ is not set +# CONFIG_ICS932S401 is not set +# CONFIG_ATMEL_SSC is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +CONFIG_VIB_GPIO=y +# 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_UID_STAT 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 is not set +CONFIG_C55_CTRL=y +CONFIG_MMI_FACTORY=y +CONFIG_MOT_UTAG=y +CONFIG_BQ5105X_CTRL=y +CONFIG_BQ5105X_DETECT=y +CONFIG_WAKEUP_SOURCE_NOTIFY=y +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_AT25 is not set +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_EEPROM_93XX46 is not set + +# +# Texas Instruments shared transport line discipline +# +CONFIG_TI_ST=y +CONFIG_ST_HCI=y +# CONFIG_SENSORS_LIS3_SPI is not set +# CONFIG_SENSORS_LIS3_I2C is not set + +# +# Altera FPGA firmware download module +# +# CONFIG_ALTERA_STAPL is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +# CONFIG_BCACHE is not set +CONFIG_BLK_DEV_DM=y +# CONFIG_DM_DEBUG is not set +CONFIG_DM_BUFIO=y +CONFIG_DM_CRYPT=y +# CONFIG_DM_SNAPSHOT is not set +# CONFIG_DM_THIN_PROVISIONING is not set +# CONFIG_DM_CACHE is not set +# CONFIG_DM_MIRROR is not set +# CONFIG_DM_RAID is not set +# CONFIG_DM_ZERO is not set +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +# CONFIG_DM_FLAKEY is not set +CONFIG_DM_VERITY=y +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_BONDING is not set +# CONFIG_DUMMY is not set +# CONFIG_EQUALIZER is not set +# CONFIG_MII is not set +CONFIG_IFB=y +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_VXLAN is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +CONFIG_TUN=y +# CONFIG_VETH is not set + +# +# CAIF transport drivers +# + +# +# Distributed Switch Architecture drivers +# +# CONFIG_NET_DSA_MV88E6XXX is not set +# CONFIG_NET_DSA_MV88E6060 is not set +# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set +# CONFIG_NET_DSA_MV88E6131 is not set +# CONFIG_NET_DSA_MV88E6123_61_65 is not set +# CONFIG_ETHERNET is not set +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +# CONFIG_AT803X_PHY is not set +# 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_SMSC_PHY is not set +# CONFIG_BROADCOM_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_FIXED_PHY is not set +# CONFIG_MDIO_BITBANG is not set +# CONFIG_MDIO_BUS_MUX_GPIO is not set +# CONFIG_MDIO_BUS_MUX_MMIOREG is not set +# CONFIG_MICREL_KS8995MA is not set +CONFIG_PPP=y +CONFIG_PPP_BSDCOMP=y +CONFIG_PPP_DEFLATE=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_MPPE=y +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPPOE is not set +CONFIG_PPPOLAC=y +CONFIG_PPPOPNS=y +# CONFIG_PPP_ASYNC is not set +# CONFIG_PPP_SYNC_TTY is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=y + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_RTL8152 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_HSO is not set +# CONFIG_USB_IPHETH is not set +CONFIG_WLAN=y +# CONFIG_LIBERTAS_THINFIRM is not set +# CONFIG_AT76C50X_USB is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_USB_NET_RNDIS_WLAN is not set +# CONFIG_RTL8187 is not set +# CONFIG_MAC80211_HWSIM is not set +# CONFIG_WIFI_CONTROL_FUNC is not set +# CONFIG_ATH_CARDS is not set +# CONFIG_B43 is not set +# CONFIG_B43LEGACY is not set +# CONFIG_BRCMFMAC is not set +# CONFIG_HOSTAP is not set +# CONFIG_LIBERTAS is not set +# CONFIG_P54_COMMON is not set +# CONFIG_RT2X00 is not set +# CONFIG_RTLWIFI is not set +CONFIG_WL_TI=y +# CONFIG_WL1251 is not set +# CONFIG_WL12XX is not set +CONFIG_WL18XX=y +CONFIG_WLCORE=y +# CONFIG_WLCORE_SPI is not set +CONFIG_WLCORE_SDIO=y +CONFIG_WILINK_PLATFORM_DATA=y +# CONFIG_ZD1211RW is not set +# CONFIG_MWIFIEX is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# +# CONFIG_WAN is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set +CONFIG_INPUT_MATRIXKMAP=y + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +# CONFIG_INPUT_KEYRESET is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMXT=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_AD7877 is not set +# CONFIG_TOUCHSCREEN_AD7879 is not set +# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set +# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set +# CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set +# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set +# CONFIG_TOUCHSCREEN_DYNAPRO is not set +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set +# CONFIG_TOUCHSCREEN_EETI is not set +# CONFIG_TOUCHSCREEN_EGALAX is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_ILI210X is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set +# CONFIG_TOUCHSCREEN_WACOM_I2C is not set +# CONFIG_TOUCHSCREEN_MAX11801 is not set +# CONFIG_TOUCHSCREEN_MCS5000 is not set +# CONFIG_TOUCHSCREEN_MMS114 is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_INEXIO is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_PIXCIR is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set +# CONFIG_TOUCHSCREEN_TSC_SERIO is not set +# CONFIG_TOUCHSCREEN_TSC2005 is not set +# CONFIG_TOUCHSCREEN_TSC2007 is not set +# CONFIG_TOUCHSCREEN_W90X900 is not set +# CONFIG_TOUCHSCREEN_ST1232 is not set +# CONFIG_TOUCHSCREEN_TPS6507X is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_MMA8450 is not set +# CONFIG_INPUT_MPU3050 is not set +# CONFIG_INPUT_GP2A is not set +# CONFIG_INPUT_GPIO_TILT_POLLED is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYCHORD is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_KXTJ9 is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_CM109 is not set +# CONFIG_INPUT_UINPUT is not set +# CONFIG_INPUT_GPIO is not set +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +# CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_IMS_PCU is not set +# CONFIG_INPUT_CMA3000 is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_TTY=y +# CONFIG_VT is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_TRACE_SINK is not set +CONFIG_DEVMEM=y +CONFIG_DEVKMEM=y + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX310X is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_OMAP=y +CONFIG_SERIAL_OMAP_CONSOLE=y +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# 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 is not set +# CONFIG_TTY_PRINTK is not set +# CONFIG_HVC_DCC is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_HW_RANDOM_ATMEL is not set +# CONFIG_HW_RANDOM_EXYNOS is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_DCC_TTY is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=y +# CONFIG_I2C_MUX is not set +CONFIG_I2C_HELPER_AUTO=y + +# +# I2C Hardware Bus support +# + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CBUS_GPIO is not set +# CONFIG_I2C_DESIGNWARE_PLATFORM is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_OMAP=y +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_PXA_PCI 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_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# 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 is not set +# CONFIG_SPI_GPIO is not set +# CONFIG_SPI_FSL_SPI is not set +# CONFIG_SPI_OC_TINY is not set +CONFIG_SPI_OMAP24XX=y +# CONFIG_SPI_PXA2XX_PCI is not set +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_XCOMM is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set + +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=y +# CONFIG_SPI_TLE62X0 is not set + +# +# Qualcomm MSM SSBI bus support +# +# CONFIG_SSBI is not set +# CONFIG_HSI is not set + +# +# PPS support +# +# CONFIG_PPS is not set + +# +# PPS generators support +# + +# +# PTP clock support +# +# CONFIG_PTP_1588_CLOCK is not set + +# +# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +# +# CONFIG_PTP_1588_CLOCK_PCH is not set +CONFIG_PINCTRL=y + +# +# Pin controllers +# +CONFIG_PINMUX=y +CONFIG_PINCONF=y +CONFIG_GENERIC_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set +CONFIG_PINCTRL_SINGLE=y +# CONFIG_PINCTRL_EXYNOS is not set +# CONFIG_PINCTRL_EXYNOS5440 is not set +CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y +CONFIG_ARCH_REQUIRE_GPIOLIB=y +CONFIG_GPIO_DEVRES=y +CONFIG_GPIOLIB=y +CONFIG_OF_GPIO=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y + +# +# Memory mapped GPIO drivers: +# +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_EM is not set +# CONFIG_GPIO_RCAR is not set +# CONFIG_GPIO_TS5500 is not set +# CONFIG_GPIO_GRGPIO is not set + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_SX150X is not set +# CONFIG_GPIO_TPS65912 is not set +# CONFIG_GPIO_ADP5588 is not set +# CONFIG_GPIO_ADNP is not set + +# +# PCI GPIO expanders: +# + +# +# SPI GPIO expanders: +# +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MCP23S08 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_74X164 is not set + +# +# AC97 GPIO expanders: +# + +# +# MODULbus GPIO expanders: +# + +# +# USB GPIO expanders: +# +CONFIG_W1=y +CONFIG_W1_CON=y + +# +# 1-wire Bus Masters +# +# CONFIG_W1_MASTER_DS2490 is not set +# CONFIG_W1_MASTER_DS2482 is not set +# CONFIG_W1_MASTER_DS1WM is not set +# CONFIG_W1_MASTER_GPIO is not set +CONFIG_HDQ_MASTER_OMAP=y + +# +# 1-wire Slaves +# +# CONFIG_W1_SLAVE_THERM is not set +# CONFIG_W1_SLAVE_SMEM is not set +# CONFIG_W1_SLAVE_DS2408 is not set +# CONFIG_W1_SLAVE_DS2413 is not set +# CONFIG_W1_SLAVE_DS2423 is not set +# CONFIG_W1_SLAVE_DS2431 is not set +# CONFIG_W1_SLAVE_DS2433 is not set +# CONFIG_W1_SLAVE_DS2760 is not set +# CONFIG_W1_SLAVE_DS2780 is not set +# CONFIG_W1_SLAVE_DS2781 is not set +# CONFIG_W1_SLAVE_DS28E04 is not set +# CONFIG_W1_SLAVE_BQ27000 is not set +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 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_BQ27x00 is not set +# CONFIG_BATTERY_MAX17040 is not set +CONFIG_BATTERY_MAX17042=y +CONFIG_BATTERY_MAX17042_DEBUGFS=y +# CONFIG_CHARGER_ISP1704 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_SMB347 is not set +# CONFIG_BATTERY_GOLDFISH is not set +CONFIG_POWER_RESET=y +# CONFIG_POWER_RESET_GPIO is not set +# CONFIG_POWER_RESET_RESTART is not set +CONFIG_POWER_RESET_MINNOW=y +CONFIG_POWER_AVS=y +CONFIG_POWER_TI_HARDWARE_VOLTAGE_CONTROL=y +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_DW_WATCHDOG is not set +CONFIG_OMAP_WATCHDOG=y +CONFIG_OMAP_WATCHDOG_AUTOPET=y +# CONFIG_MAX63XX_WATCHDOG is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +# CONFIG_SSB is not set +CONFIG_BCMA_POSSIBLE=y + +# +# Broadcom specific AMBA +# +# CONFIG_BCMA is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +# CONFIG_MFD_AS3711 is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_CROS_EC is not set +# CONFIG_MFD_ASIC3 is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_DA9052_I2C is not set +# CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_HTC_EGPIO is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_MAX77686 is not set +# CONFIG_MFD_MAX77693 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_EZX_PCAP is not set +# CONFIG_MFD_CPCAP is not set +# CONFIG_MFD_VIPERBOARD is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_MFD_RC5T583 is not set +# CONFIG_MFD_SEC_CORE is not set +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SMSC is not set +# CONFIG_ABX500_CORE is not set +CONFIG_MFD_M4SENSORHUB=y +# CONFIG_MFD_STMPE is not set +# CONFIG_MFD_SYSCON is not set +# CONFIG_MFD_TI_AM335X_TSCADC 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_TPS6586X is not set +# CONFIG_MFD_TPS65910 is not set +CONFIG_MFD_TPS65912=y +# CONFIG_MFD_TPS65912_I2C is not set +CONFIG_MFD_TPS65912_SPI=y +CONFIG_MFD_TPS65912_DEBUGFS=y +# CONFIG_MFD_TPS80031 is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_TWL6040_CORE is not set +# CONFIG_MFD_WL1273_CORE is not set +# 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_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_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_DUMMY=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_ISL6271A 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_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# 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_REGULATOR_TPS65912=y +CONFIG_REGULATOR_TI_OMAP_PMIC=y +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +# CONFIG_DRM is not set +# CONFIG_TEGRA_HOST1X is not set +CONFIG_SGX_OMAP3630=y +CONFIG_SGX_SYNC=y +CONFIG_SGX_BUILD_RELEASE=y +# CONFIG_SGX_BUILD_DEBUG is not set +# CONFIG_SGX_PDUMP is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=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 is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_FOREIGN_ENDIAN is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_TMIO is not set +# CONFIG_FB_SMSCUFX is not set +# CONFIG_FB_UDL is not set +# CONFIG_FB_GOLDFISH is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_BROADSHEET is not set +# CONFIG_FB_AUO_K190X is not set +# CONFIG_FB_SIMPLE is not set +CONFIG_OMAP2_VRFB=y +CONFIG_OMAP2_DSS=y +# CONFIG_OMAP2_DSS_DEBUG is not set +CONFIG_OMAP2_DSS_DEBUGFS=y +# CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS is not set +# CONFIG_OMAP2_DSS_DPI is not set +# CONFIG_OMAP2_DSS_RFBI is not set +# CONFIG_OMAP2_DSS_VENC is not set +# CONFIG_OMAP4_DSS_HDMI is not set +# CONFIG_OMAP2_DSS_SDI is not set +CONFIG_OMAP2_DSS_DSI=y +CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0 +CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y +CONFIG_OMAP2_DSS_RESET=y +CONFIG_FB_OMAP2=y +CONFIG_FB_OMAP2_DEBUG_SUPPORT=y +CONFIG_FB_OMAP2_NUM_FBS=1 + +# +# OMAP2/3 Display Device Drivers +# +# CONFIG_PANEL_TAAL is not set +CONFIG_PANEL_MINNOW=y +# CONFIG_EXYNOS_VIDEO is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +# 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=y +# 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=y +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_LM3630 is not set +# CONFIG_BACKLIGHT_LM3639 is not set +# CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_LOGO is not set +# CONFIG_FB_SSD1307 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_COMPRESS_OFFLOAD=y +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_HRTIMER is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_VERBOSE_PROCFS is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +# 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_DRIVERS is not set +# CONFIG_SND_ARM is not set +# CONFIG_SND_SPI is not set +# CONFIG_SND_USB is not set +CONFIG_SND_SOC=y +CONFIG_SND_SOC_DMAENGINE_PCM=y +# CONFIG_SND_ATMEL_SOC is not set +# CONFIG_SND_DESIGNWARE_I2S is not set +CONFIG_SND_OMAP_SOC=y +CONFIG_SND_OMAP_SOC_C55=y +CONFIG_SND_OMAP_SOC_MCBSP=y +CONFIG_SND_SOC_I2C_AND_SPI=y +# CONFIG_SND_SOC_ALL_CODECS is not set +CONFIG_SND_SOC_C55=y +# CONFIG_SND_SIMPLE_CARD is not set +# CONFIG_SOUND_PRIME is not set + +# +# HID support +# +CONFIG_HID=y +# CONFIG_HID_BATTERY_STRENGTH is not set +# CONFIG_HIDRAW is not set +# CONFIG_UHID is not set +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_ACRUX is not set +# CONFIG_HID_APPLE is not set +# CONFIG_HID_APPLEIR is not set +# CONFIG_HID_AUREAL is not set +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_PRODIKEYS is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EMS_FF is not set +# CONFIG_HID_ELECOM is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_HOLTEK is not set +# CONFIG_HID_KEYTOUCH is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +# CONFIG_HID_GYRATION is not set +# CONFIG_HID_ICADE is not set +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LCPOWER is not set +# CONFIG_HID_LENOVO_TPKBD is not set +# CONFIG_HID_LOGITECH is not set +# CONFIG_HID_MAGICMOUSE is not set +# CONFIG_HID_MICROSOFT is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_MULTITOUCH is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_PRIMAX is not set +# CONFIG_HID_PS3REMOTE is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_SAITEK is not set +# CONFIG_HID_SAMSUNG is not set +# CONFIG_HID_SONY is not set +# CONFIG_HID_SPEEDLINK is not set +# CONFIG_HID_STEELSERIES is not set +# CONFIG_HID_SUNPLUS is not set +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TIVO is not set +# CONFIG_HID_TOPSEED is not set +# CONFIG_HID_THINGM is not set +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_WACOM is not set +# CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +# CONFIG_HID_SENSOR_HUB is not set + +# +# USB HID support +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +# CONFIG_USB_HIDDEV is not set + +# +# I2C HID support +# +# CONFIG_I2C_HID is not set +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +# CONFIG_USB_ARCH_HAS_XHCI is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +# 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 is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +CONFIG_USB_MON=y +# CONFIG_USB_WUSB_CBAF is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_EHCI_HCD is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +# CONFIG_USB_OHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +CONFIG_USB_MUSB_HDRC=y +# CONFIG_USB_MUSB_TUSB6010 is not set +CONFIG_USB_MUSB_OMAP2PLUS=y +# CONFIG_USB_MUSB_AM35X is not set +# CONFIG_USB_MUSB_DSPS is not set +# CONFIG_USB_MUSB_UX500 is not set +# CONFIG_USB_INVENTRA_DMA is not set +CONFIG_MUSB_PIO_ONLY=y +# CONFIG_USB_RENESAS_USBHS is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# 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 +# + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_DWC3 is not set +# CONFIG_USB_CHIPIDEA is not set + +# +# USB port drivers +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +# CONFIG_USB_EZUSB_FX2 is not set +# CONFIG_USB_HSIC_USB3503 is not set +CONFIG_USB_PHY=y +CONFIG_USB_OTG_WAKELOCK=y +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_OMAP_CONTROL_USB is not set +# CONFIG_OMAP_USB2 is not set +# CONFIG_OMAP_USB3 is not set +# CONFIG_SAMSUNG_USBPHY is not set +# CONFIG_SAMSUNG_USB2PHY is not set +# CONFIG_SAMSUNG_USB3PHY is not set +# CONFIG_USB_GPIO_VBUS is not set +# CONFIG_USB_ISP1301 is not set +# CONFIG_USB_RCAR_PHY is not set +# CONFIG_USB_ULPI is not set +CONFIG_USB_TUSB=y +# CONFIG_CPCAP_USB 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 +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 + +# +# USB Peripheral Controller +# +# CONFIG_USB_FUSB300 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_GADGET_MUSB_HDRC=y +# CONFIG_USB_M66592 is not set +# CONFIG_USB_NET2272 is not set +# CONFIG_USB_DUMMY_HCD is not set +CONFIG_USB_LIBCOMPOSITE=y +CONFIG_USB_F_ACM=y +CONFIG_USB_U_SERIAL=y +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_ETH is not set +# CONFIG_USB_G_NCM is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FUNCTIONFS is not set +# CONFIG_USB_MASS_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +CONFIG_USB_G_ANDROID=y +# CONFIG_USB_ANDROID_RNDIS_DWORD_ALIGNED is not set +# CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_ACM_MS is not set +# CONFIG_USB_G_MULTI is not set +# CONFIG_USB_G_HID is not set +# CONFIG_USB_G_DBGP is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y +# CONFIG_MMC_CLKGATE is not set +# CONFIG_MMC_EMBEDDED_SDIO is not set +# CONFIG_MMC_PARANOID_SD_INIT is not set + +# +# MMC/SD/SDIO Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_MINORS=32 +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_MMC_BLOCK_DEFERRED_RESUME=y +CONFIG_SDIO_UART=y +# CONFIG_MMC_TEST is not set + +# +# MMC/SD/SDIO Host Controller Drivers +# +# CONFIG_MMC_SDHCI is not set +# CONFIG_MMC_SDHCI_PXAV3 is not set +# CONFIG_MMC_SDHCI_PXAV2 is not set +# CONFIG_MMC_OMAP is not set +CONFIG_MMC_OMAP_HS=y +# CONFIG_MMC_SPI is not set +# CONFIG_MMC_DW is not set +# CONFIG_MMC_VUB300 is not set +# CONFIG_MMC_USHC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_LM3530 is not set +CONFIG_LEDS_LM3535=y +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_GPIO is not set +# 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_PCA955X is not set +# CONFIG_LEDS_PCA9633 is not set +# CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_REGULATOR is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set +# CONFIG_LEDS_RENESAS_TPU is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_OT200 is not set +# CONFIG_LEDS_BLINKM is not set + +# +# LED Triggers +# +# CONFIG_LEDS_TRIGGERS is not set +CONFIG_SWITCH=y +# CONFIG_SWITCH_GPIO is not set +# CONFIG_ACCESSIBILITY is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_HCTOSYS is not set +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# 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 is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# 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_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_X1205 is not set +# CONFIG_RTC_DRV_PCF8523 is not set +# CONFIG_RTC_DRV_PCF8563 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_SENSORHUB=y + +# +# 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_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 + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 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_DS2404 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_SNVS is not set + +# +# 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_DW_DMAC is not set +# CONFIG_TIMB_DMA is not set +CONFIG_DMA_OMAP=y +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=y +CONFIG_DMA_OF=y + +# +# DMA Clients +# +# CONFIG_NET_DMA is not set +# CONFIG_ASYNC_TX_DMA is not set +# 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_MMIO is not set + +# +# Microsoft Hyper-V guest support +# +CONFIG_STAGING=y +# CONFIG_USBIP_CORE is not set +# CONFIG_W35UND is not set +# CONFIG_PRISM2_USB is not set +# CONFIG_ECHO is not set +# CONFIG_ASUS_OLED is not set +# CONFIG_R8712U is not set +# CONFIG_TRANZPORT is not set +# CONFIG_LINE6_USB 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_AD7291 is not set +# CONFIG_AD7606 is not set +# CONFIG_AD799X 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_AD5930 is not set +# CONFIG_AD9832 is not set +# CONFIG_AD9834 is not set +# CONFIG_AD9850 is not set +# CONFIG_AD9852 is not set +# CONFIG_AD9910 is not set +# CONFIG_AD9951 is not set + +# +# Digital gyroscope sensors +# +# CONFIG_ADIS16060 is not set +# CONFIG_ADIS16130 is not set +# CONFIG_ADIS16260 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 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 is not set +# CONFIG_IIO_GPIO_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set +# CONFIG_IIO_SIMPLE_DUMMY is not set +# CONFIG_ZSMALLOC is not set +# CONFIG_BCM_WIMAX is not set +# CONFIG_FT1000 is not set + +# +# Speakup console speech +# +# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set +# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set +# CONFIG_STAGING_MEDIA is not set + +# +# Android +# +CONFIG_ANDROID=y +CONFIG_ANDROID_BINDER_IPC=y +CONFIG_ANDROID_BINDER_IPC_32BIT=y +CONFIG_ASHMEM=y +CONFIG_ANDROID_LOGGER=y +CONFIG_ANDROID_TIMED_OUTPUT=y +CONFIG_ANDROID_TIMED_GPIO=y +CONFIG_ANDROID_LOW_MEMORY_KILLER=y +CONFIG_ANDROID_LOW_MEMORY_KILLER_AUTODETECT_OOM_ADJ_VALUES=y +CONFIG_ANDROID_INTF_ALARM_DEV=y +CONFIG_SYNC=y +CONFIG_SW_SYNC=y +# CONFIG_SW_SYNC_USER is not set +# CONFIG_ION is not set +# CONFIG_USB_WPAN_HCD is not set +# CONFIG_WIMAX_GDM72XX is not set +# CONFIG_CED1401 is not set +# CONFIG_DGRP is not set +CONFIG_CLKDEV_LOOKUP=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y + +# +# Common Clock Framework +# +# CONFIG_COMMON_CLK_DEBUG is not set +# CONFIG_COMMON_CLK_SI5351 is not set + +# +# Hardware Spinlock drivers +# +CONFIG_CLKSRC_MMIO=y +# CONFIG_MAILBOX is not set +CONFIG_IOMMU_SUPPORT=y +CONFIG_OF_IOMMU=y +# CONFIG_OMAP_IOMMU is not set + +# +# Remoteproc drivers +# +# CONFIG_STE_MODEM_RPROC is not set + +# +# Rpmsg drivers +# +# CONFIG_PM_DEVFREQ is not set +# CONFIG_EXTCON is not set +# CONFIG_MEMORY is not set +CONFIG_IIO=y +CONFIG_IIO_BUFFER=y +# CONFIG_IIO_BUFFER_CB is not set +CONFIG_IIO_KFIFO_BUF=y +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 + +# +# Accelerometers +# +# CONFIG_KXSD9 is not set +# CONFIG_IIO_ST_ACCEL_3AXIS is not set + +# +# Analog to digital converters +# +# CONFIG_AD7266 is not set +# CONFIG_AD7298 is not set +# CONFIG_AD7923 is not set +# CONFIG_AD7791 is not set +# CONFIG_AD7793 is not set +# CONFIG_AD7476 is not set +# CONFIG_AD7887 is not set +# CONFIG_EXYNOS_ADC is not set +# CONFIG_MAX1363 is not set +# CONFIG_TI_ADC081C is not set + +# +# Amplifiers +# +# CONFIG_AD8366 is not set + +# +# Hid Sensor IIO Common +# + +# +# 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_AD5624R_SPI is not set +# CONFIG_AD5446 is not set +# CONFIG_AD5449 is not set +# CONFIG_AD5504 is not set +# CONFIG_AD5755 is not set +# CONFIG_AD5764 is not set +# CONFIG_AD5791 is not set +# CONFIG_AD5686 is not set +# CONFIG_MAX517 is not set +# CONFIG_MCP4725 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_ADIS16136 is not set +# CONFIG_ADXRS450 is not set +# CONFIG_IIO_ST_GYRO_3AXIS is not set +# CONFIG_ITG3200 is not set + +# +# Inertial measurement units +# +# CONFIG_ADIS16400 is not set +# CONFIG_ADIS16480 is not set +# CONFIG_INV_MPU6050_IIO is not set + +# +# Light sensors +# +# CONFIG_ADJD_S311 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_VCNL4000 is not set + +# +# Magnetometer sensors +# +# CONFIG_AK8975 is not set +# CONFIG_IIO_ST_MAGN_3AXIS is not set +# CONFIG_PWM is not set +CONFIG_IRQCHIP=y +# CONFIG_IPACK_BUS is not set +# CONFIG_RESET_CONTROLLER is not set + +# +# 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_EXT23=y +# CONFIG_EXT4_FS_POSIX_ACL is not set +CONFIG_EXT4_FS_SECURITY=y +CONFIG_EXT4_DEBUG=y +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +# CONFIG_FS_POSIX_ACL is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +CONFIG_QUOTA=y +# CONFIG_QUOTA_NETLINK_INTERFACE is not set +CONFIG_PRINT_QUOTA_WARNING=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_TREE=y +# CONFIG_QFMT_V1 is not set +CONFIG_QFMT_V2=y +CONFIG_QUOTACTL=y +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=y +# CONFIG_CUSE is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# 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 is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_TMPFS_XATTR is not set +# 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 is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_LOGFS is not set +# CONFIG_CRAMFS is not set +# CONFIG_SQUASHFS is not set +# 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 is not set +CONFIG_PSTORE=y +CONFIG_PSTORE_CONSOLE=y +# CONFIG_PSTORE_FTRACE is not set +CONFIG_PSTORE_RAM=y +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_F2FS_FS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_MAC_ROMAN is not set +# CONFIG_NLS_MAC_CELTIC is not set +# CONFIG_NLS_MAC_CENTEURO is not set +# CONFIG_NLS_MAC_CROATIAN is not set +# CONFIG_NLS_MAC_CYRILLIC is not set +# CONFIG_NLS_MAC_GAELIC is not set +# CONFIG_NLS_MAC_GREEK is not set +# CONFIG_NLS_MAC_ICELAND is not set +# CONFIG_NLS_MAC_INUIT is not set +# CONFIG_NLS_MAC_ROMANIAN is not set +# CONFIG_NLS_MAC_TURKISH is not set +# CONFIG_NLS_UTF8 is not set +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_PRINTK_TIME=y +CONFIG_DEFAULT_MESSAGE_LOGLEVEL=1 +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=1024 +CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_TOUCHSCREEN_DEBUG is not set +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_LOCKUP_DETECTOR=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1 +CONFIG_PANIC_ON_OOPS=y +CONFIG_PANIC_ON_OOPS_VALUE=1 +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1 +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES 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_STACKTRACE=y +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_INFO_REDUCED is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_FRAME_POINTER=y +# CONFIG_BOOT_PRINTK_DELAY is not set + +# +# RCU Debugging +# +# CONFIG_PROVE_RCU_DELAY is not set +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set +# CONFIG_DEBUG_PAGEALLOC 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_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=y +# CONFIG_BLK_DEV_IO_TRACE 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_RING_BUFFER_BENCHMARK is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +CONFIG_DYNAMIC_DEBUG=y +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_STRICT_DEVMEM is not set +# CONFIG_ARM_UNWIND is not set +CONFIG_OLD_MCOUNT=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_RODATA is not set +# CONFIG_DEBUG_LL is not set +CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" +CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" +# CONFIG_PID_IN_CONTEXTIDR is not set + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY=y +# CONFIG_SECURITYFS is not set +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +# CONFIG_SECURITY_PATH is not set +CONFIG_LSM_MMAP_MIN_ADDR=32768 +CONFIG_SECURITY_SELINUX=y +# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set +# CONFIG_SECURITY_SELINUX_DISABLE is not set +# CONFIG_SECURITY_SELINUX_DEVELOP is not set +# CONFIG_SECURITY_SELINUX_AVC_STATS is not set +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set +# CONFIG_SECURITY_SMACK is not set +# CONFIG_SECURITY_TOMOYO is not set +# CONFIG_SECURITY_APPARMOR is not set +# CONFIG_SECURITY_YAMA is not set +# CONFIG_IMA is not set +# CONFIG_EVM is not set +CONFIG_DEFAULT_SECURITY_SELINUX=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +CONFIG_DEFAULT_SECURITY="selinux" +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_RNG2=y +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +# CONFIG_CRYPTO_USER is not set +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +# CONFIG_CRYPTO_GF128MUL is not set +# CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_AUTHENC=y + +# +# Authenticated Encryption with Associated Data +# +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_SEQIV is not set + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_XTS is not set + +# +# Hash modes +# +# CONFIG_CRYPTO_CMAC is not set +CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_CRC32 is not set +# CONFIG_CRYPTO_GHASH is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_RMD128 is not set +# CONFIG_CRYPTO_RMD160 is not set +# CONFIG_CRYPTO_RMD256 is not set +# CONFIG_CRYPTO_RMD320 is not set +CONFIG_CRYPTO_SHA1=y +# CONFIG_CRYPTO_SHA1_ARM is not set +CONFIG_CRYPTO_SHA256=y +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_WP512 is not set + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_ARM is not set +# CONFIG_CRYPTO_ANUBIS is not set +CONFIG_CRYPTO_ARC4=y +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_TEA is not set +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_TWOFISH_COMMON=y + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=y +# CONFIG_CRYPTO_ZLIB is not set +# CONFIG_CRYPTO_LZO is not set + +# +# Random Number Generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_USER_API_HASH is not set +# CONFIG_CRYPTO_USER_API_SKCIPHER is not set +CONFIG_CRYPTO_HW=y +# CONFIG_CRYPTO_DEV_OMAP_SHAM is not set +# CONFIG_CRYPTO_DEV_OMAP_AES is not set +# CONFIG_ASYMMETRIC_KEY_TYPE is not set +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_IO=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +# CONFIG_CRC_T10DIF is not set +# CONFIG_CRC_ITU_T is not set +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 is not set +CONFIG_LIBCRC32C=y +# CONFIG_CRC8 is not set +CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_REED_SOLOMON=y +CONFIG_REED_SOLOMON_ENC8=y +CONFIG_REED_SOLOMON_DEC8=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=y +CONFIG_TEXTSEARCH_BM=y +CONFIG_TEXTSEARCH_FSM=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_DQL=y +CONFIG_NLATTR=y +CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y +CONFIG_AVERAGE=y +# CONFIG_CORDIC is not set +# CONFIG_DDR is not set +# CONFIG_VIRTUALIZATION is not set diff --git a/arch/arm/configs/omap3_h1_defconfig b/arch/arm/configs/omap3_h1_defconfig new file mode 100644 index 00000000000..13eb10c410d --- /dev/null +++ b/arch/arm/configs/omap3_h1_defconfig @@ -0,0 +1,2795 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/arm 3.10.0 Kernel Configuration +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_HAVE_PROC_CPU=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_ARCH_HAS_CPUFREQ=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_ARM_PATCH_PHYS_VIRT=y +CONFIG_GENERIC_BUG=y +# CONFIG_BOOTINFO is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_EXTABLE_SORT=y + +# +# General setup +# +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +CONFIG_DEFAULT_HOSTNAME="(none)" +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_FHANDLE is not set +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_WATCH=y +CONFIG_AUDIT_TREE=y +# CONFIG_AUDIT_LOGINUID_IMMUTABLE is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_IRQ_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_SPARSE_IRQ=y +CONFIG_KTIME_SCALAR=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=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=y +CONFIG_HIGH_RES_TIMERS=y + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set + +# +# RCU Subsystem +# +# CONFIG_TREE_PREEMPT_RCU is not set +CONFIG_TINY_PREEMPT_RCU=y +CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_STALL_COMMON is not set +# CONFIG_TREE_RCU_TRACE is not set +# CONFIG_RCU_BOOST is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_CGROUPS=y +CONFIG_CGROUP_DEBUG=y +CONFIG_CGROUP_FREEZER=y +# CONFIG_CGROUP_DEVICE is not set +# CONFIG_CPUSETS is not set +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +# CONFIG_MEMCG is not set +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +# CONFIG_CFS_BANDWIDTH is not set +CONFIG_RT_GROUP_SCHED=y +# CONFIG_BLK_CGROUP is not set +# CONFIG_CHECKPOINT_RESTORE is not set +# CONFIG_NAMESPACES is not set +CONFIG_UIDGID_CONVERTED=y +# CONFIG_UIDGID_STRICT_TYPE_CHECKS is not set +# CONFIG_SCHED_AUTOGROUP is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +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 is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_HAVE_UID16=y +CONFIG_HOTPLUG=y +CONFIG_PANIC_TIMEOUT=1 +CONFIG_EXPERT=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_EMBEDDED=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +# CONFIG_PROFILING is not set +CONFIG_TRACEPOINTS=y +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +# CONFIG_JUMP_LABEL is not set +# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=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_ARCH_JUMP_LABEL=y +CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP_FILTER=y +CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_MODULES_USE_ELF_REL=y +CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_OLD_SIGACTION=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +# CONFIG_MODULE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_MODULE_SIG is not set +CONFIG_BLOCK=y +CONFIG_LBDAF=y +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_BLK_DEV_BSGLIB is not set +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_EFI_PARTITION=y + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_ROW=y +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_ROW=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="row" +CONFIG_UNINLINE_SPIN_UNLOCK=y +CONFIG_FREEZER=y + +# +# System Type +# +CONFIG_MMU=y +CONFIG_ARCH_MULTIPLATFORM=y +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 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_KIRKWOOD 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_MSM is not set +# CONFIG_ARCH_SHMOBILE 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_S5P64X0 is not set +# CONFIG_ARCH_S5PC100 is not set +# CONFIG_ARCH_S5PV210 is not set +# CONFIG_ARCH_EXYNOS is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_U300 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_MVEBU is not set +# CONFIG_ARCH_BCM is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_KEYBOARD_GPIO_POLLED is not set +# CONFIG_ARCH_HIGHBANK is not set +# CONFIG_ARCH_MXC is not set + +# +# TI OMAP Common Features +# + +# +# OMAP Feature Selections +# +# CONFIG_POWER_AVS_OMAP is not set +CONFIG_OMAP_RESET_CLOCKS=y +CONFIG_OMAP_MUX=y +CONFIG_OMAP_MUX_DEBUG=y +CONFIG_OMAP_MUX_WARNINGS=y +CONFIG_OMAP_32K_TIMER=y +# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set +CONFIG_OMAP_DM_TIMER=y +CONFIG_OMAP_PM_NOOP=y +# CONFIG_MACH_OMAP_GENERIC is not set +CONFIG_ARCH_OMAP=y +CONFIG_ARCH_OMAP2PLUS=y + +# +# TI OMAP2/3/4 Specific Features +# +# CONFIG_ARCH_OMAP2PLUS_TYPICAL is not set +CONFIG_SOC_HAS_OMAP2_SDRC=y +CONFIG_ARCH_OMAP3=y +# CONFIG_ARCH_OMAP4 is not set +# CONFIG_SOC_OMAP5 is not set +# CONFIG_SOC_OMAP3430 is not set +# CONFIG_SOC_TI81XX is not set +# CONFIG_SOC_AM33XX is not set +CONFIG_OMAP_PACKAGE_CBP=y + +# +# OMAP Board Type +# +# CONFIG_MACH_OMAP3_BEAGLE is not set +CONFIG_MACH_OMAP3_H1=y +# CONFIG_MACH_DEVKIT8000 is not set +# CONFIG_MACH_OMAP_LDP is not set +# CONFIG_MACH_OMAP3530_LV_SOM is not set +# CONFIG_MACH_OMAP3_TORPEDO is not set +# CONFIG_MACH_OVERO is not set +# CONFIG_MACH_OMAP3EVM is not set +# CONFIG_MACH_OMAP3517EVM is not set +# CONFIG_MACH_CRANEBOARD is not set +# CONFIG_MACH_OMAP3_PANDORA is not set +# CONFIG_MACH_TOUCHBOOK is not set +# CONFIG_MACH_OMAP_3430SDP is not set +# CONFIG_MACH_NOKIA_RM680 is not set +# CONFIG_MACH_NOKIA_RX51 is not set +# CONFIG_MACH_OMAP_ZOOM2 is not set +# CONFIG_MACH_OMAP_ZOOM3 is not set +# CONFIG_MACH_CM_T35 is not set +# CONFIG_MACH_CM_T3517 is not set +# CONFIG_MACH_IGEP0020 is not set +# CONFIG_MACH_IGEP0030 is not set +# CONFIG_MACH_SBC3530 is not set +# CONFIG_MACH_OMAP_3630SDP is not set +# CONFIG_MACH_MINNOW is not set +# CONFIG_OMAP3_EMU is not set +# CONFIG_OMAP3_SDRC_AC_TIMING is not set +CONFIG_OMAP3_PAD_WKUP_IO=y +CONFIG_DISABLE_OMAP_ERRATA_i583=y +# CONFIG_ARCH_SOCFPGA is not set +# CONFIG_PLAT_SPEAR is not set +# CONFIG_ARCH_SUNXI is not set +# CONFIG_ARCH_SIRF is not set +# CONFIG_ARCH_TEGRA is not set +# CONFIG_ARCH_U8500 is not set +# CONFIG_ARCH_VEXPRESS is not set +# CONFIG_ARCH_VIRT is not set +# CONFIG_ARCH_WM8850 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=y +CONFIG_ARM_VIRT_EXT=y +# CONFIG_SWP_EMULATE is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_BPREDICT_DISABLE is not set +# CONFIG_CACHE_L2X0 is not set +CONFIG_ARM_L1_CACHE_SHIFT_6=y +CONFIG_ARM_L1_CACHE_SHIFT=6 +CONFIG_ARM_DMA_MEM_BUFFERABLE=y +CONFIG_ARM_NR_BANKS=8 +CONFIG_MULTI_IRQ_HANDLER=y +CONFIG_ARM_ERRATA_430973=y +# CONFIG_ARM_ERRATA_720789 is not set +# CONFIG_ARM_ERRATA_754322 is not set +# CONFIG_ARM_ERRATA_775420 is not set +# CONFIG_FIQ_DEBUGGER is not set + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_HAVE_ARM_ARCH_TIMER is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_ARM_PSCI is not set +CONFIG_ARCH_NR_GPIO=0 +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +CONFIG_PREEMPT_COUNT=y +CONFIG_HZ=100 +CONFIG_SCHED_HRTICK=y +# CONFIG_THUMB2_KERNEL is not set +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set +CONFIG_HAVE_ARCH_PFN_VALID=y +# CONFIG_HIGHMEM is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_HAVE_MEMBLOCK=y +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_COMPACTION is not set +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_NEED_PER_CPU_KM=y +# CONFIG_CLEANCACHE is not set +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UACCESS_WITH_MEMCPY is not set +CONFIG_SECCOMP=y +# CONFIG_CC_STACKPROTECTOR is not set +# CONFIG_XEN is not set +# CONFIG_ARM_FLUSH_CONSOLE_ON_RESTART is not set + +# +# Boot options +# +CONFIG_USE_OF=y +# CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE is not set +CONFIG_ATAGS=y +# CONFIG_DEPRECATED_PARAM_STRUCT is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +# CONFIG_ARM_APPENDED_DTB is not set +CONFIG_CMDLINE="" +# CONFIG_KEXEC is not set +# CONFIG_CRASH_DUMP is not set +CONFIG_AUTO_ZRELADDR=y + +# +# CPU Power Management +# + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE is not set +# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_INTERACTIVE=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +# CONFIG_GENERIC_CPUFREQ_CPU0 is not set + +# +# ARM CPU frequency scaling drivers +# +# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set +# CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set +# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set +# CONFIG_ARM_EXYNOS5440_CPUFREQ is not set +# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set +CONFIG_ARM_OMAP2PLUS_CPUFREQ=y +CONFIG_CPU_IDLE=y +# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=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 + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_SCRIPT=y +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_MISC=y +CONFIG_COREDUMP=y + +# +# Power management options +# +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_HAS_WAKELOCK=y +CONFIG_WAKELOCK=y +CONFIG_PM_SLEEP=y +# CONFIG_PM_AUTOSLEEP is not set +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PM_WAKELOCKS_GC=y +CONFIG_PM_RUNTIME=y +CONFIG_PM=y +CONFIG_PM_DEBUG=y +# CONFIG_PM_ADVANCED_DEBUG is not set +# CONFIG_PM_TEST_SUSPEND is not set +CONFIG_PM_SLEEP_DEBUG=y +# CONFIG_APM_EMULATION is not set +CONFIG_ARCH_HAS_OPP=y +CONFIG_PM_OPP=y +CONFIG_PM_CLK=y +CONFIG_CPU_PM=y +CONFIG_SUSPEND_TIME=y +CONFIG_HAS_AMBIENTMODE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARM_CPU_SUSPEND=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_DIAG is not set +CONFIG_UNIX=y +# CONFIG_UNIX_DIAG is not set +CONFIG_XFRM=y +CONFIG_XFRM_ALGO=y +CONFIG_XFRM_USER=y +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_MIGRATE=y +# CONFIG_XFRM_STATISTICS is not set +CONFIG_XFRM_IPCOMP=y +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 is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +CONFIG_NET_IP_TUNNEL=y +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_NET_IPVTI is not set +# CONFIG_INET_AH is not set +CONFIG_INET_ESP=y +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=y +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +CONFIG_INET6_IPCOMP=y +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_TUNNEL=y +CONFIG_INET6_TUNNEL=y +CONFIG_INET6_XFRM_MODE_TRANSPORT=y +CONFIG_INET6_XFRM_MODE_TUNNEL=y +CONFIG_INET6_XFRM_MODE_BEET=y +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=y +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=y +# CONFIG_IPV6_GRE is not set +CONFIG_IPV6_MULTIPLE_TABLES=y +# CONFIG_IPV6_SUBTREES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_NETLABEL is not set +CONFIG_ANDROID_PARANOID_NETWORK=y +CONFIG_NET_ACTIVITY_STATS=y +CONFIG_NETWORK_SECMARK=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=y +# CONFIG_NETFILTER_NETLINK_ACCT is not set +CONFIG_NETFILTER_NETLINK_QUEUE=y +CONFIG_NETFILTER_NETLINK_LOG=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_SECMARK is not set +CONFIG_NF_CONNTRACK_PROCFS=y +CONFIG_NF_CONNTRACK_EVENTS=y +# CONFIG_NF_CONNTRACK_TIMEOUT is not set +# CONFIG_NF_CONNTRACK_TIMESTAMP is not set +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_GRE=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_CONNTRACK_AMANDA=y +CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_BROADCAST=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +# CONFIG_NF_CONNTRACK_SNMP is not set +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +# CONFIG_NF_CONNTRACK_SIP is not set +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +# CONFIG_NF_CT_NETLINK_TIMEOUT is not set +# CONFIG_NETFILTER_NETLINK_QUEUE_CT is not set +CONFIG_NF_NAT=y +CONFIG_NF_NAT_NEEDED=y +CONFIG_NF_NAT_PROTO_DCCP=y +CONFIG_NF_NAT_PROTO_UDPLITE=y +CONFIG_NF_NAT_PROTO_SCTP=y +CONFIG_NF_NAT_AMANDA=y +CONFIG_NF_NAT_FTP=y +CONFIG_NF_NAT_IRC=y +# CONFIG_NF_NAT_SIP is not set +CONFIG_NF_NAT_TFTP=y +CONFIG_NETFILTER_TPROXY=y +CONFIG_NETFILTER_XTABLES=y + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=y +CONFIG_NETFILTER_XT_CONNMARK=y + +# +# Xtables targets +# +# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set +# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y +CONFIG_NETFILTER_XT_TARGET_CONNMARK=y +# CONFIG_NETFILTER_XT_TARGET_CT is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_HL is not set +# CONFIG_NETFILTER_XT_TARGET_HMARK is not set +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y +# CONFIG_NETFILTER_XT_TARGET_LOG is not set +CONFIG_NETFILTER_XT_TARGET_MARK=y +CONFIG_NETFILTER_XT_TARGET_NETMAP=y +CONFIG_NETFILTER_XT_TARGET_NFLOG=y +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +CONFIG_NETFILTER_XT_TARGET_REDIRECT=y +# CONFIG_NETFILTER_XT_TARGET_TEE is not set +CONFIG_NETFILTER_XT_TARGET_TPROXY=y +CONFIG_NETFILTER_XT_TARGET_TRACE=y +# CONFIG_NETFILTER_XT_TARGET_SECMARK is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set + +# +# Xtables matches +# +# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_BPF is not set +# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set +CONFIG_NETFILTER_XT_MATCH_COMMENT=y +# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set +# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y +CONFIG_NETFILTER_XT_MATCH_CONNMARK=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +# CONFIG_NETFILTER_XT_MATCH_CPU is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +CONFIG_NETFILTER_XT_MATCH_ECN=y +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y +CONFIG_NETFILTER_XT_MATCH_HELPER=y +CONFIG_NETFILTER_XT_MATCH_HL=y +CONFIG_NETFILTER_XT_MATCH_IPRANGE=y +CONFIG_NETFILTER_XT_MATCH_LENGTH=y +CONFIG_NETFILTER_XT_MATCH_LIMIT=y +CONFIG_NETFILTER_XT_MATCH_MAC=y +CONFIG_NETFILTER_XT_MATCH_MARK=y +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set +# CONFIG_NETFILTER_XT_MATCH_OSF is not set +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y +CONFIG_NETFILTER_XT_MATCH_QTAGUID=y +CONFIG_NETFILTER_XT_MATCH_QUOTA=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_SOCKET=y +CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_NETFILTER_XT_MATCH_STATISTIC=y +CONFIG_NETFILTER_XT_MATCH_STRING=y +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +CONFIG_NETFILTER_XT_MATCH_TIME=y +CONFIG_NETFILTER_XT_MATCH_U32=y +# CONFIG_IP_SET is not set +# CONFIG_IP_VS is not set + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=y +CONFIG_NF_CONNTRACK_IPV4=y +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_MATCH_AH=y +CONFIG_IP_NF_MATCH_ECN=y +# CONFIG_IP_NF_MATCH_RPFILTER is not set +CONFIG_IP_NF_MATCH_TTL=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +CONFIG_IP_NF_TARGET_REJECT_SKERR=y +# CONFIG_IP_NF_TARGET_ULOG is not set +CONFIG_NF_NAT_IPV4=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_NETMAP=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_NF_NAT_PROTO_GRE=y +CONFIG_NF_NAT_PPTP=y +CONFIG_NF_NAT_H323=y +CONFIG_IP_NF_MANGLE=y +# CONFIG_IP_NF_TARGET_CLUSTERIP is not set +# CONFIG_IP_NF_TARGET_ECN is not set +# CONFIG_IP_NF_TARGET_TTL is not set +CONFIG_IP_NF_RAW=y +# CONFIG_IP_NF_SECURITY is not set +CONFIG_IP_NF_ARPTABLES=y +CONFIG_IP_NF_ARPFILTER=y +CONFIG_IP_NF_ARP_MANGLE=y + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV6=y +CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_IP6_NF_IPTABLES=y +# CONFIG_IP6_NF_MATCH_AH is not set +# CONFIG_IP6_NF_MATCH_EUI64 is not set +# CONFIG_IP6_NF_MATCH_FRAG is not set +# CONFIG_IP6_NF_MATCH_OPTS is not set +# CONFIG_IP6_NF_MATCH_HL is not set +# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set +# CONFIG_IP6_NF_MATCH_MH is not set +# CONFIG_IP6_NF_MATCH_RPFILTER is not set +# CONFIG_IP6_NF_MATCH_RT is not set +# CONFIG_IP6_NF_TARGET_HL is not set +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +CONFIG_IP6_NF_TARGET_REJECT_SKERR=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_RAW=y +# CONFIG_IP6_NF_SECURITY is not set +CONFIG_NF_NAT_IPV6=y +CONFIG_IP6_NF_TARGET_MASQUERADE=y +# CONFIG_IP6_NF_TARGET_NPT is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +CONFIG_HAVE_NET_DSA=y +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +# CONFIG_NET_SCH_CBQ is not set +CONFIG_NET_SCH_HTB=y +# CONFIG_NET_SCH_HFSC is not set +# CONFIG_NET_SCH_PRIO is not set +# CONFIG_NET_SCH_MULTIQ is not set +# CONFIG_NET_SCH_RED is not set +# CONFIG_NET_SCH_SFB is not set +# CONFIG_NET_SCH_SFQ is not set +# CONFIG_NET_SCH_TEQL is not set +# CONFIG_NET_SCH_TBF is not set +# CONFIG_NET_SCH_GRED is not set +# CONFIG_NET_SCH_DSMARK is not set +# CONFIG_NET_SCH_NETEM is not set +# CONFIG_NET_SCH_DRR is not set +# CONFIG_NET_SCH_MQPRIO is not set +# CONFIG_NET_SCH_CHOKE is not set +# CONFIG_NET_SCH_QFQ is not set +# CONFIG_NET_SCH_CODEL is not set +# CONFIG_NET_SCH_FQ_CODEL is not set +# CONFIG_NET_SCH_INGRESS is not set +# CONFIG_NET_SCH_PLUG is not set + +# +# Classification +# +CONFIG_NET_CLS=y +# CONFIG_NET_CLS_BASIC is not set +# CONFIG_NET_CLS_TCINDEX is not set +# CONFIG_NET_CLS_ROUTE4 is not set +# CONFIG_NET_CLS_FW is not set +CONFIG_NET_CLS_U32=y +# CONFIG_CLS_U32_PERF is not set +# CONFIG_CLS_U32_MARK is not set +# CONFIG_NET_CLS_RSVP is not set +# CONFIG_NET_CLS_RSVP6 is not set +# CONFIG_NET_CLS_FLOW is not set +# CONFIG_NET_CLS_CGROUP is not set +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +# CONFIG_NET_EMATCH_CMP is not set +# CONFIG_NET_EMATCH_NBYTE is not set +CONFIG_NET_EMATCH_U32=y +# CONFIG_NET_EMATCH_META is not set +# CONFIG_NET_EMATCH_TEXT is not set +CONFIG_NET_CLS_ACT=y +# CONFIG_NET_ACT_POLICE is not set +# CONFIG_NET_ACT_GACT is not set +# CONFIG_NET_ACT_MIRRED is not set +# CONFIG_NET_ACT_IPT is not set +# CONFIG_NET_ACT_NAT is not set +# CONFIG_NET_ACT_PEDIT is not set +# CONFIG_NET_ACT_SIMP is not set +# CONFIG_NET_ACT_SKBEDIT is not set +# CONFIG_NET_ACT_CSUM is not set +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y +# CONFIG_BATMAN_ADV is not set +# CONFIG_OPENVSWITCH is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_MMAP is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_NETPRIO_CGROUP is not set +CONFIG_BQL=y +# CONFIG_BPF_JIT is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NET_DROP_MONITOR is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +# CONFIG_BT_BNEP_MC_FILTER is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIUART_ATH3K is not set +# CONFIG_BT_HCIUART_LL is not set +# CONFIG_BT_HCIUART_3WIRE is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_BT_MRVL is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y +# CONFIG_WIRELESS is not set +# CONFIG_WIMAX is not set +CONFIG_RFKILL=y +CONFIG_RFKILL_PM=y +# CONFIG_RFKILL_INPUT is not set +# CONFIG_RFKILL_REGULATOR is not set +CONFIG_RFKILL_GPIO=y +# CONFIG_RFKILL_WL18XX is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set +# CONFIG_NFC is not set +CONFIG_HAVE_BPF_JIT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_LOADER_USER_HELPER=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_IRQ=y +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_CMA is not set + +# +# Bus devices +# +# CONFIG_OMAP_OCP2SCP is not set +CONFIG_OMAP_INTERCONNECT=y +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 + +# +# 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 is not set +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +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=y +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_PHYSMAP_OF is not set +# CONFIG_MTD_IMPA7 is not set +# CONFIG_MTD_GPIO_ADDR is not set +# CONFIG_MTD_PLATRAM is not set +# CONFIG_MTD_LATCH_ADDR is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SST25L is not set +# 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_IDS=y +CONFIG_MTD_NAND_ECC=y +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_BCH=y +CONFIG_MTD_NAND_ECC_BCH=y +# CONFIG_MTD_SM_COMMON is not set +# CONFIG_MTD_NAND_DENALI is not set +# CONFIG_MTD_NAND_GPIO is not set +CONFIG_MTD_NAND_OMAP2=y +# CONFIG_MTD_NAND_OMAP_BCH is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_DOCG4 is not set +# CONFIG_MTD_NAND_NANDSIM is not set +CONFIG_MTD_NAND_PLATFORM=y +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set +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_DTC=y +CONFIG_OF=y + +# +# Device Tree and Open Firmware support +# +CONFIG_PROC_DEVICETREE=y +# CONFIG_OF_SELFTEST is not set +CONFIG_OF_FLATTREE=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_ADDRESS=y +CONFIG_OF_IRQ=y +CONFIG_OF_DEVICE=y +CONFIG_OF_I2C=y +CONFIG_OF_NET=y +CONFIG_OF_MTD=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_DRBD is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_MG_DISK is not set +# CONFIG_BLK_DEV_RBD is not set + +# +# Misc devices +# +# CONFIG_SENSORS_LIS3LV02D is not set +# CONFIG_AD525X_DPOT is not set +# CONFIG_ATMEL_PWM is not set +# CONFIG_DUMMY_IRQ is not set +# CONFIG_ICS932S401 is not set +# CONFIG_ATMEL_SSC is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +# CONFIG_VIB_GPIO 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_UID_STAT 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 is not set +# CONFIG_C55_CTRL is not set +# CONFIG_MMI_FACTORY is not set +# CONFIG_MOT_UTAG is not set +# CONFIG_BQ5105X_CTRL is not set +# CONFIG_BQ5105X_DETECT is not set +CONFIG_WAKEUP_SOURCE_NOTIFY=y +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_AT25 is not set +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_EEPROM_93XX46 is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +# CONFIG_SENSORS_LIS3_SPI is not set +# CONFIG_SENSORS_LIS3_I2C is not set + +# +# Altera FPGA firmware download module +# +# CONFIG_ALTERA_STAPL is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_BONDING is not set +# CONFIG_DUMMY is not set +# CONFIG_EQUALIZER is not set +# CONFIG_MII is not set +CONFIG_IFB=y +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_VXLAN is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +CONFIG_TUN=y +# CONFIG_VETH is not set + +# +# CAIF transport drivers +# + +# +# Distributed Switch Architecture drivers +# +# CONFIG_NET_DSA_MV88E6XXX is not set +# CONFIG_NET_DSA_MV88E6060 is not set +# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set +# CONFIG_NET_DSA_MV88E6131 is not set +# CONFIG_NET_DSA_MV88E6123_61_65 is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MICREL_KS8995MA is not set +CONFIG_PPP=y +CONFIG_PPP_BSDCOMP=y +CONFIG_PPP_DEFLATE=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_MPPE=y +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOLAC is not set +# CONFIG_PPPOPNS is not set +CONFIG_PPP_ASYNC=y +CONFIG_PPP_SYNC_TTY=y +# CONFIG_SLIP is not set +CONFIG_SLHC=y +# CONFIG_WLAN is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# +# CONFIG_WAN is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set +CONFIG_INPUT_MATRIXKMAP=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +CONFIG_INPUT_KEYRESET=y + +# +# 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 is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_TCA8418 is not set +# CONFIG_KEYBOARD_MATRIX is not set +# 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_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 is not set +CONFIG_INPUT_MOUSE=y +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_CYAPA is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMXT=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_AD7877 is not set +# CONFIG_TOUCHSCREEN_AD7879 is not set +# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set +# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set +# CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set +# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set +# CONFIG_TOUCHSCREEN_DYNAPRO is not set +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set +# CONFIG_TOUCHSCREEN_EETI is not set +# CONFIG_TOUCHSCREEN_EGALAX is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_ILI210X is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set +# CONFIG_TOUCHSCREEN_WACOM_I2C is not set +# CONFIG_TOUCHSCREEN_MAX11801 is not set +# CONFIG_TOUCHSCREEN_MCS5000 is not set +# CONFIG_TOUCHSCREEN_MMS114 is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_INEXIO is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_PIXCIR is not set +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set +# CONFIG_TOUCHSCREEN_TSC_SERIO is not set +# CONFIG_TOUCHSCREEN_TSC2005 is not set +# CONFIG_TOUCHSCREEN_TSC2007 is not set +# CONFIG_TOUCHSCREEN_W90X900 is not set +# CONFIG_TOUCHSCREEN_ST1232 is not set +# CONFIG_TOUCHSCREEN_TPS6507X is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_MMA8450 is not set +# CONFIG_INPUT_MPU3050 is not set +# CONFIG_INPUT_GP2A is not set +# CONFIG_INPUT_GPIO_TILT_POLLED is not set +# CONFIG_INPUT_KEYCHORD is not set +# CONFIG_INPUT_KXTJ9 is not set +CONFIG_INPUT_UINPUT=y +# CONFIG_INPUT_GPIO is not set +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +# CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_CMA3000 is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_TTY=y +# CONFIG_VT is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_TRACE_SINK is not set +CONFIG_DEVMEM=y +CONFIG_DEVKMEM=y + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX310X is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_OMAP=y +CONFIG_SERIAL_OMAP_CONSOLE=y +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# 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 is not set +CONFIG_TTY_PRINTK=y +# CONFIG_HVC_DCC is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_HW_RANDOM_ATMEL is not set +# CONFIG_HW_RANDOM_EXYNOS is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_DCC_TTY is not set +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 is not set +# CONFIG_I2C_MUX_GPIO is not set +# CONFIG_I2C_MUX_PCA9541 is not set +# CONFIG_I2C_MUX_PCA954x is not set +CONFIG_I2C_MUX_PINCTRL=y +CONFIG_I2C_HELPER_AUTO=y + +# +# I2C Hardware Bus support +# + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CBUS_GPIO is not set +# CONFIG_I2C_DESIGNWARE_PLATFORM is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_OMAP=y +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_PXA_PCI is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_TAOS_EVM is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_STUB is not set +CONFIG_I2C_DEBUG_CORE=y +CONFIG_I2C_DEBUG_ALGO=y +CONFIG_I2C_DEBUG_BUS=y +CONFIG_SPI=y +CONFIG_SPI_DEBUG=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +# CONFIG_SPI_BITBANG is not set +# CONFIG_SPI_GPIO is not set +# CONFIG_SPI_FSL_SPI is not set +# CONFIG_SPI_OC_TINY is not set +CONFIG_SPI_OMAP24XX=y +# CONFIG_SPI_PXA2XX_PCI is not set +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_XCOMM is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set + +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=y +# CONFIG_SPI_TLE62X0 is not set + +# +# Qualcomm MSM SSBI bus support +# +# CONFIG_SSBI is not set +# CONFIG_HSI is not set + +# +# PPS support +# +# CONFIG_PPS is not set + +# +# PPS generators support +# + +# +# PTP clock support +# +# CONFIG_PTP_1588_CLOCK is not set + +# +# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +# +# CONFIG_PTP_1588_CLOCK_PCH is not set +CONFIG_PINCTRL=y + +# +# Pin controllers +# +CONFIG_PINMUX=y +CONFIG_PINCONF=y +CONFIG_GENERIC_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set +CONFIG_PINCTRL_SINGLE=y +# CONFIG_PINCTRL_EXYNOS is not set +# CONFIG_PINCTRL_EXYNOS5440 is not set +CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y +CONFIG_ARCH_REQUIRE_GPIOLIB=y +CONFIG_GPIO_DEVRES=y +CONFIG_GPIOLIB=y +CONFIG_OF_GPIO=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y + +# +# Memory mapped GPIO drivers: +# +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_EM is not set +# CONFIG_GPIO_RCAR is not set +# CONFIG_GPIO_TS5500 is not set +# CONFIG_GPIO_GRGPIO is not set + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_SX150X is not set +# CONFIG_GPIO_ADP5588 is not set +# CONFIG_GPIO_ADNP is not set + +# +# PCI GPIO expanders: +# + +# +# SPI GPIO expanders: +# +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MCP23S08 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_74X164 is not set + +# +# AC97 GPIO expanders: +# + +# +# MODULbus GPIO expanders: +# +# CONFIG_GPIO_TPS65910 is not set + +# +# USB GPIO expanders: +# +# CONFIG_W1 is not set +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 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_BQ27x00=y +CONFIG_BATTERY_BQ27X00_I2C=y +CONFIG_BATTERY_BQ27X00_PLATFORM=y +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_SMB347 is not set +# CONFIG_BATTERY_GOLDFISH is not set +CONFIG_POWER_RESET=y +# CONFIG_POWER_RESET_GPIO is not set +# CONFIG_POWER_RESET_RESTART is not set +# CONFIG_POWER_RESET_MINNOW is not set +CONFIG_POWER_AVS=y +# CONFIG_POWER_TI_HARDWARE_VOLTAGE_CONTROL is not set +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_DW_WATCHDOG is not set +CONFIG_OMAP_WATCHDOG=y +CONFIG_OMAP_WATCHDOG_AUTOPET=y +# CONFIG_MAX63XX_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +# CONFIG_SSB is not set +CONFIG_BCMA_POSSIBLE=y + +# +# Broadcom specific AMBA +# +# CONFIG_BCMA is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +# CONFIG_MFD_AS3711 is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_CROS_EC is not set +# CONFIG_MFD_ASIC3 is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_DA9052_I2C is not set +# CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_HTC_EGPIO is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_MAX77686 is not set +# CONFIG_MFD_MAX77693 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_EZX_PCAP is not set +# CONFIG_MFD_CPCAP is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_MFD_RC5T583 is not set +# CONFIG_MFD_SEC_CORE is not set +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SMSC is not set +# CONFIG_ABX500_CORE is not set +# CONFIG_MFD_M4SENSORHUB is not set +# CONFIG_MFD_STMPE is not set +# CONFIG_MFD_SYSCON is not set +# CONFIG_MFD_TI_AM335X_TSCADC 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_TPS6586X is not set +CONFIG_MFD_TPS65910=y +CONFIG_MFD_TPS65912=y +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_TPS65912_DEBUGFS 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 is not set +# 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_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_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_DUMMY=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_ISL6271A 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_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# 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_REGULATOR_TPS65910=y +CONFIG_REGULATOR_TI_OMAP_PMIC=y +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +# CONFIG_DRM is not set +# CONFIG_TEGRA_HOST1X is not set +# CONFIG_SGX_OMAP3630 is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# 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 is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_FOREIGN_ENDIAN is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_TMIO is not set +# CONFIG_FB_GOLDFISH is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_BROADSHEET is not set +# CONFIG_FB_AUO_K190X is not set +# CONFIG_FB_SIMPLE is not set +CONFIG_OMAP2_VRFB=y +CONFIG_OMAP2_DSS=y +CONFIG_OMAP2_DSS_DEBUG=y +CONFIG_OMAP2_DSS_DEBUGFS=y +# CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS is not set +CONFIG_OMAP2_DSS_DPI=y +# CONFIG_OMAP2_DSS_RFBI is not set +# CONFIG_OMAP2_DSS_VENC is not set +# CONFIG_OMAP4_DSS_HDMI is not set +# CONFIG_OMAP2_DSS_SDI is not set +# CONFIG_OMAP2_DSS_DSI is not set +CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0 +CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y +CONFIG_OMAP2_DSS_RESET=y +CONFIG_FB_OMAP2=y +CONFIG_FB_OMAP2_DEBUG_SUPPORT=y +CONFIG_FB_OMAP2_NUM_FBS=1 + +# +# OMAP2/3 Display Device Drivers +# +# CONFIG_PANEL_GENERIC_DPI is not set +# CONFIG_PANEL_TFP410 is not set +CONFIG_PANEL_ILI_9342=y +# CONFIG_PANEL_LGPHILIPS_LB035Q02 is not set +# CONFIG_PANEL_PICODLP is not set +# CONFIG_PANEL_TPO_TD043MTEA1 is not set +# CONFIG_EXYNOS_VIDEO is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +# CONFIG_ADF is not set +# CONFIG_LOGO is not set +# CONFIG_FB_SSD1307 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_COMPRESS_OFFLOAD=y +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_HRTIMER is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_VERBOSE_PROCFS is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +# 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_DRIVERS is not set +# CONFIG_SND_ARM is not set +# CONFIG_SND_SPI is not set +CONFIG_SND_SOC=y +CONFIG_SND_SOC_DMAENGINE_PCM=y +# CONFIG_SND_ATMEL_SOC is not set +# CONFIG_SND_DESIGNWARE_I2S is not set +CONFIG_SND_OMAP_SOC=y +# CONFIG_SND_OMAP_SOC_C55 is not set +CONFIG_SND_SOC_I2C_AND_SPI=y +# CONFIG_SND_SOC_ALL_CODECS is not set +# CONFIG_SND_SIMPLE_CARD is not set +# CONFIG_SOUND_PRIME is not set + +# +# HID support +# +CONFIG_HID=y +# CONFIG_HID_BATTERY_STRENGTH is not set +# CONFIG_HIDRAW is not set +# CONFIG_UHID is not set +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_ACRUX is not set +# CONFIG_HID_APPLE is not set +# CONFIG_HID_AUREAL is not set +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_PRODIKEYS is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EMS_FF is not set +# CONFIG_HID_ELECOM is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_KEYTOUCH is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +# CONFIG_HID_GYRATION is not set +# CONFIG_HID_ICADE is not set +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LCPOWER is not set +# CONFIG_HID_LOGITECH is not set +# CONFIG_HID_MAGICMOUSE is not set +# CONFIG_HID_MICROSOFT is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_MULTITOUCH is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_PRIMAX is not set +# CONFIG_HID_PS3REMOTE is not set +# CONFIG_HID_SAITEK is not set +# CONFIG_HID_SAMSUNG is not set +# CONFIG_HID_SPEEDLINK is not set +# CONFIG_HID_STEELSERIES is not set +# CONFIG_HID_SUNPLUS is not set +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TIVO is not set +# CONFIG_HID_TOPSEED is not set +# CONFIG_HID_THINGM is not set +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_WACOM is not set +# CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +# CONFIG_HID_SENSOR_HUB is not set + +# +# I2C HID support +# +# CONFIG_I2C_HID is not set +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +# CONFIG_USB_ARCH_HAS_XHCI is not set +# CONFIG_USB_SUPPORT is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_LM3530=y +# CONFIG_LEDS_LM3535 is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_GPIO is not set +# 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_PCA955X is not set +# CONFIG_LEDS_PCA9633 is not set +# CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_REGULATOR is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set +# CONFIG_LEDS_RENESAS_TPU is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_OT200 is not set +# CONFIG_LEDS_BLINKM is not set + +# +# LED Triggers +# +# CONFIG_LEDS_TRIGGERS is not set +CONFIG_SWITCH=y +# CONFIG_SWITCH_GPIO is not set +# CONFIG_ACCESSIBILITY is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_HCTOSYS is not set +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# 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 is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# 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_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_X1205 is not set +# CONFIG_RTC_DRV_PCF8523 is not set +# CONFIG_RTC_DRV_PCF8563 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_TPS65910=y +# 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 + +# +# 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_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 + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 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_DS2404 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_SNVS is not set + +# +# HID Sensor RTC drivers +# +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +# CONFIG_DW_DMAC is not set +# CONFIG_TIMB_DMA is not set +CONFIG_DMA_OMAP=y +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=y +CONFIG_DMA_OF=y + +# +# DMA Clients +# +# CONFIG_NET_DMA is not set +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_DMATEST is not set +# CONFIG_AUXDISPLAY is not set +CONFIG_UIO=y +CONFIG_UIO_PDRV=y +CONFIG_UIO_PDRV_GENIRQ=y +# CONFIG_UIO_DMEM_GENIRQ is not set +# CONFIG_VIRT_DRIVERS is not set + +# +# Virtio drivers +# +# CONFIG_VIRTIO_MMIO is not set + +# +# Microsoft Hyper-V guest support +# +CONFIG_STAGING=y +# CONFIG_ECHO is not set +# CONFIG_COMEDI 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_AD7291 is not set +# CONFIG_AD7606 is not set +# CONFIG_AD799X 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_AD5930 is not set +# CONFIG_AD9832 is not set +# CONFIG_AD9834 is not set +# CONFIG_AD9850 is not set +# CONFIG_AD9852 is not set +# CONFIG_AD9910 is not set +# CONFIG_AD9951 is not set + +# +# Digital gyroscope sensors +# +# CONFIG_ADIS16060 is not set +# CONFIG_ADIS16130 is not set +# CONFIG_ADIS16260 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 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 is not set +# CONFIG_IIO_GPIO_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set + +# +# Inertial measurement units +# +CONFIG_INV_MPU_IIO=m +# CONFIG_INV_IIO_MPU3050_ACCEL_SLAVE_BMA250 is not set +# CONFIG_DTS_INV_MPU_IIO is not set +CONFIG_INV_TESTING=y +# CONFIG_IIO_SIMPLE_DUMMY is not set +# CONFIG_ZSMALLOC is not set +# CONFIG_FT1000 is not set + +# +# Speakup console speech +# +# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set +# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set +# CONFIG_STAGING_MEDIA is not set + +# +# Android +# +CONFIG_ANDROID=y +CONFIG_ANDROID_BINDER_IPC=y +CONFIG_ANDROID_BINDER_IPC_32BIT=y +CONFIG_ASHMEM=y +CONFIG_ANDROID_LOGGER=y +CONFIG_ANDROID_TIMED_OUTPUT=y +CONFIG_ANDROID_TIMED_GPIO=y +CONFIG_ANDROID_LOW_MEMORY_KILLER=y +CONFIG_ANDROID_LOW_MEMORY_KILLER_AUTODETECT_OOM_ADJ_VALUES=y +CONFIG_ANDROID_INTF_ALARM_DEV=y +CONFIG_SYNC=y +CONFIG_SW_SYNC=y +# CONFIG_SW_SYNC_USER is not set +CONFIG_ION=y +# CONFIG_ION_TEST is not set +# CONFIG_WIMAX_GDM72XX is not set +# CONFIG_DGRP is not set +CONFIG_CLKDEV_LOOKUP=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y + +# +# Common Clock Framework +# +# CONFIG_COMMON_CLK_DEBUG is not set +# CONFIG_COMMON_CLK_SI5351 is not set + +# +# Hardware Spinlock drivers +# +CONFIG_CLKSRC_MMIO=y +# CONFIG_MAILBOX is not set +# CONFIG_IOMMU_SUPPORT is not set + +# +# Remoteproc drivers +# +# CONFIG_STE_MODEM_RPROC is not set + +# +# Rpmsg drivers +# +# CONFIG_PM_DEVFREQ is not set +# CONFIG_EXTCON is not set +# CONFIG_MEMORY is not set +CONFIG_IIO=y +CONFIG_IIO_BUFFER=y +# CONFIG_IIO_BUFFER_CB is not set +CONFIG_IIO_KFIFO_BUF=y +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 + +# +# Accelerometers +# +# CONFIG_KXSD9 is not set +# CONFIG_IIO_ST_ACCEL_3AXIS is not set + +# +# Analog to digital converters +# +# CONFIG_AD7266 is not set +# CONFIG_AD7298 is not set +# CONFIG_AD7923 is not set +# CONFIG_AD7791 is not set +# CONFIG_AD7793 is not set +# CONFIG_AD7476 is not set +# CONFIG_AD7887 is not set +# CONFIG_EXYNOS_ADC is not set +# CONFIG_MAX1363 is not set +# CONFIG_TI_ADC081C is not set + +# +# Amplifiers +# +# CONFIG_AD8366 is not set + +# +# Hid Sensor IIO Common +# + +# +# 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_AD5624R_SPI is not set +# CONFIG_AD5446 is not set +# CONFIG_AD5449 is not set +# CONFIG_AD5504 is not set +# CONFIG_AD5755 is not set +# CONFIG_AD5764 is not set +# CONFIG_AD5791 is not set +# CONFIG_AD5686 is not set +# CONFIG_MAX517 is not set +# CONFIG_MCP4725 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_ADIS16136 is not set +# CONFIG_ADXRS450 is not set +# CONFIG_IIO_ST_GYRO_3AXIS is not set +# CONFIG_ITG3200 is not set + +# +# Inertial measurement units +# +# CONFIG_ADIS16400 is not set +# CONFIG_ADIS16480 is not set +# CONFIG_INV_MPU6050_IIO is not set + +# +# Light sensors +# +# CONFIG_ADJD_S311 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_VCNL4000 is not set + +# +# Magnetometer sensors +# +# CONFIG_AK8975 is not set +# CONFIG_IIO_ST_MAGN_3AXIS is not set +# CONFIG_PWM is not set +CONFIG_IRQCHIP=y +# CONFIG_IPACK_BUS is not set +# CONFIG_RESET_CONTROLLER is not set + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +# CONFIG_FS_POSIX_ACL is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +CONFIG_QUOTA=y +# CONFIG_QUOTA_NETLINK_INTERFACE is not set +CONFIG_PRINT_QUOTA_WARNING=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_TREE=y +# CONFIG_QFMT_V1 is not set +CONFIG_QFMT_V2=y +CONFIG_QUOTACTL=y +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=y +# CONFIG_CUSE is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# 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 is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_TMPFS_XATTR is not set +# 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 is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_UBIFS_FS=y +# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +# CONFIG_LOGFS is not set +# CONFIG_CRAMFS is not set +# CONFIG_SQUASHFS is not set +# 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 is not set +# CONFIG_PSTORE is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_F2FS_FS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_MAC_ROMAN is not set +# CONFIG_NLS_MAC_CELTIC is not set +# CONFIG_NLS_MAC_CENTEURO is not set +# CONFIG_NLS_MAC_CROATIAN is not set +# CONFIG_NLS_MAC_CYRILLIC is not set +# CONFIG_NLS_MAC_GAELIC is not set +# CONFIG_NLS_MAC_GREEK is not set +# CONFIG_NLS_MAC_ICELAND is not set +# CONFIG_NLS_MAC_INUIT is not set +# CONFIG_NLS_MAC_ROMANIAN is not set +# CONFIG_NLS_MAC_TURKISH is not set +# CONFIG_NLS_UTF8 is not set +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_PRINTK_TIME=y +CONFIG_DEFAULT_MESSAGE_LOGLEVEL=7 +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=1024 +CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_TOUCHSCREEN_DEBUG is not set +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_LOCKUP_DETECTOR=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1 +CONFIG_PANIC_ON_OOPS=y +CONFIG_PANIC_ON_OOPS_VALUE=1 +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1 +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES 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_STACKTRACE=y +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_INFO_REDUCED is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_FRAME_POINTER=y +# CONFIG_BOOT_PRINTK_DELAY is not set + +# +# RCU Debugging +# +# CONFIG_PROVE_RCU_DELAY is not set +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set +# CONFIG_DEBUG_PAGEALLOC 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_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=y +# CONFIG_BLK_DEV_IO_TRACE 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_RING_BUFFER_BENCHMARK is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +CONFIG_DYNAMIC_DEBUG=y +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_STRICT_DEVMEM is not set +# CONFIG_ARM_UNWIND is not set +CONFIG_OLD_MCOUNT=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_RODATA is not set +CONFIG_DEBUG_LL=y +CONFIG_DEBUG_OMAP2PLUS_UART=y +# CONFIG_DEBUG_ICEDCC is not set +# CONFIG_DEBUG_SEMIHOSTING is not set +# CONFIG_DEBUG_OMAP2UART1 is not set +# CONFIG_DEBUG_OMAP2UART2 is not set +# CONFIG_DEBUG_OMAP2UART3 is not set +CONFIG_DEBUG_OMAP3UART3=y +# CONFIG_DEBUG_OMAP4UART3 is not set +# CONFIG_DEBUG_OMAP3UART4 is not set +# CONFIG_DEBUG_OMAP4UART4 is not set +# CONFIG_DEBUG_TI81XXUART1 is not set +# CONFIG_DEBUG_TI81XXUART2 is not set +# CONFIG_DEBUG_TI81XXUART3 is not set +# CONFIG_DEBUG_AM33XXUART1 is not set +# CONFIG_DEBUG_ZOOM_UART is not set +CONFIG_DEBUG_LL_INCLUDE="debug/omap2plus.S" +CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" +CONFIG_EARLY_PRINTK=y +CONFIG_EARLY_PRINTK_DIRECT=y +# CONFIG_PID_IN_CONTEXTIDR is not set + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY=y +# CONFIG_SECURITYFS is not set +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +# CONFIG_SECURITY_PATH is not set +# CONFIG_SECURITY_SELINUX is not set +# CONFIG_SECURITY_SMACK is not set +# CONFIG_SECURITY_TOMOYO is not set +# CONFIG_SECURITY_APPARMOR is not set +# CONFIG_SECURITY_YAMA is not set +# CONFIG_IMA is not set +# CONFIG_EVM is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +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_RNG2=y +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +# CONFIG_CRYPTO_USER is not set +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +# CONFIG_CRYPTO_GF128MUL is not set +# CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_AUTHENC=y +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_SEQIV is not set + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_XTS is not set + +# +# Hash modes +# +# CONFIG_CRYPTO_CMAC is not set +CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_CRC32 is not set +# CONFIG_CRYPTO_GHASH is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_RMD128 is not set +# CONFIG_CRYPTO_RMD160 is not set +# CONFIG_CRYPTO_RMD256 is not set +# CONFIG_CRYPTO_RMD320 is not set +CONFIG_CRYPTO_SHA1=y +# CONFIG_CRYPTO_SHA1_ARM is not set +CONFIG_CRYPTO_SHA256=y +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_WP512 is not set + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_ARM is not set +# CONFIG_CRYPTO_ANUBIS is not set +CONFIG_CRYPTO_ARC4=y +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_TEA is not set +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_TWOFISH_COMMON=y + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=y +# CONFIG_CRYPTO_ZLIB is not set +CONFIG_CRYPTO_LZO=y + +# +# Random Number Generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_USER_API_HASH is not set +# CONFIG_CRYPTO_USER_API_SKCIPHER is not set +CONFIG_CRYPTO_HW=y +# CONFIG_CRYPTO_DEV_OMAP_SHAM is not set +# CONFIG_CRYPTO_DEV_OMAP_AES is not set +# CONFIG_ASYMMETRIC_KEY_TYPE is not set +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_IO=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +# CONFIG_CRC_T10DIF is not set +# CONFIG_CRC_ITU_T is not set +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 is not set +CONFIG_LIBCRC32C=y +# CONFIG_CRC8 is not set +CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_BCH=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=y +CONFIG_TEXTSEARCH_BM=y +CONFIG_TEXTSEARCH_FSM=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_DQL=y +CONFIG_NLATTR=y +CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y +CONFIG_AVERAGE=y +# CONFIG_CORDIC is not set +# CONFIG_DDR is not set +# CONFIG_VIRTUALIZATION is not set diff --git a/arch/arm/configs/omap3_h1_defconfig.old b/arch/arm/configs/omap3_h1_defconfig.old new file mode 100644 index 00000000000..26083d70273 --- /dev/null +++ b/arch/arm/configs/omap3_h1_defconfig.old @@ -0,0 +1,2858 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/arm 3.10.0 Kernel Configuration +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_HAVE_PROC_CPU=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_ARCH_HAS_CPUFREQ=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_ARM_PATCH_PHYS_VIRT=y +CONFIG_GENERIC_BUG=y +# CONFIG_BOOTINFO is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_EXTABLE_SORT=y + +# +# General setup +# +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +CONFIG_DEFAULT_HOSTNAME="(none)" +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_FHANDLE is not set +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_WATCH=y +CONFIG_AUDIT_TREE=y +# CONFIG_AUDIT_LOGINUID_IMMUTABLE is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_IRQ_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_SPARSE_IRQ=y +CONFIG_KTIME_SCALAR=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=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=y +CONFIG_HIGH_RES_TIMERS=y + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set + +# +# RCU Subsystem +# +# CONFIG_TREE_PREEMPT_RCU is not set +CONFIG_TINY_PREEMPT_RCU=y +CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_STALL_COMMON is not set +# CONFIG_TREE_RCU_TRACE is not set +# CONFIG_RCU_BOOST is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_CGROUPS=y +CONFIG_CGROUP_DEBUG=y +CONFIG_CGROUP_FREEZER=y +# CONFIG_CGROUP_DEVICE is not set +# CONFIG_CPUSETS is not set +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +# CONFIG_MEMCG is not set +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +# CONFIG_CFS_BANDWIDTH is not set +CONFIG_RT_GROUP_SCHED=y +# CONFIG_BLK_CGROUP is not set +# CONFIG_CHECKPOINT_RESTORE is not set +# CONFIG_NAMESPACES is not set +CONFIG_UIDGID_CONVERTED=y +# CONFIG_UIDGID_STRICT_TYPE_CHECKS is not set +# CONFIG_SCHED_AUTOGROUP is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +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 is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_HAVE_UID16=y +CONFIG_HOTPLUG=y +CONFIG_PANIC_TIMEOUT=1 +CONFIG_EXPERT=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_EMBEDDED=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_PERF_EVENTS is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +# CONFIG_PROFILING is not set +CONFIG_TRACEPOINTS=y +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +# CONFIG_JUMP_LABEL is not set +# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=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_ARCH_JUMP_LABEL=y +CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP_FILTER=y +CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_MODULES_USE_ELF_REL=y +CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_OLD_SIGACTION=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +# CONFIG_MODULE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_MODULE_SIG is not set +CONFIG_BLOCK=y +CONFIG_LBDAF=y +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_BLK_DEV_BSGLIB is not set +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_EFI_PARTITION=y + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_ROW=y +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_ROW=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="row" +CONFIG_UNINLINE_SPIN_UNLOCK=y +CONFIG_FREEZER=y + +# +# System Type +# +CONFIG_MMU=y +CONFIG_ARCH_MULTIPLATFORM=y +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 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_KIRKWOOD 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_MSM is not set +# CONFIG_ARCH_SHMOBILE 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_S5P64X0 is not set +# CONFIG_ARCH_S5PC100 is not set +# CONFIG_ARCH_S5PV210 is not set +# CONFIG_ARCH_EXYNOS is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_U300 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_MVEBU is not set +# CONFIG_ARCH_BCM is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_KEYBOARD_GPIO_POLLED is not set +# CONFIG_ARCH_HIGHBANK is not set +# CONFIG_ARCH_MXC is not set + +# +# TI OMAP Common Features +# + +# +# OMAP Feature Selections +# +# CONFIG_POWER_AVS_OMAP is not set +CONFIG_OMAP_RESET_CLOCKS=y +CONFIG_OMAP_MUX=y +CONFIG_OMAP_MUX_DEBUG=y +CONFIG_OMAP_MUX_WARNINGS=y +CONFIG_OMAP_32K_TIMER=y +# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set +CONFIG_OMAP_DM_TIMER=y +CONFIG_OMAP_PM_NOOP=y +CONFIG_MACH_OMAP_GENERIC=y +CONFIG_ARCH_OMAP=y +CONFIG_ARCH_OMAP2PLUS=y + +# +# TI OMAP2/3/4 Specific Features +# +# CONFIG_ARCH_OMAP2PLUS_TYPICAL is not set +CONFIG_SOC_HAS_OMAP2_SDRC=y +CONFIG_ARCH_OMAP3=y +# CONFIG_ARCH_OMAP4 is not set +# CONFIG_SOC_OMAP5 is not set +CONFIG_SOC_OMAP3430=y +# CONFIG_SOC_TI81XX is not set +# CONFIG_SOC_AM33XX is not set +CONFIG_OMAP_PACKAGE_CBP=y + +# +# OMAP Board Type +# +# CONFIG_MACH_OMAP3_BEAGLE is not set +CONFIG_MACH_OMAP3_H1=y +# CONFIG_MACH_DEVKIT8000 is not set +# CONFIG_MACH_OMAP_LDP is not set +# CONFIG_MACH_OMAP3530_LV_SOM is not set +# CONFIG_MACH_OMAP3_TORPEDO is not set +# CONFIG_MACH_OVERO is not set +# CONFIG_MACH_OMAP3EVM is not set +# CONFIG_MACH_OMAP3517EVM is not set +# CONFIG_MACH_CRANEBOARD is not set +# CONFIG_MACH_OMAP3_PANDORA is not set +# CONFIG_MACH_TOUCHBOOK is not set +# CONFIG_MACH_OMAP_3430SDP is not set +# CONFIG_MACH_NOKIA_RM680 is not set +# CONFIG_MACH_NOKIA_RX51 is not set +# CONFIG_MACH_OMAP_ZOOM2 is not set +# CONFIG_MACH_OMAP_ZOOM3 is not set +# CONFIG_MACH_CM_T35 is not set +# CONFIG_MACH_CM_T3517 is not set +# CONFIG_MACH_IGEP0020 is not set +# CONFIG_MACH_IGEP0030 is not set +# CONFIG_MACH_SBC3530 is not set +# CONFIG_MACH_OMAP_3630SDP is not set +# CONFIG_MACH_MINNOW is not set +# CONFIG_OMAP3_EMU is not set +# CONFIG_OMAP3_SDRC_AC_TIMING is not set +# CONFIG_OMAP3_PAD_WKUP_IO is not set +CONFIG_DISABLE_OMAP_ERRATA_i583=y +# CONFIG_ARCH_SOCFPGA is not set +# CONFIG_PLAT_SPEAR is not set +# CONFIG_ARCH_SUNXI is not set +# CONFIG_ARCH_SIRF is not set +# CONFIG_ARCH_TEGRA is not set +# CONFIG_ARCH_U8500 is not set +# CONFIG_ARCH_VEXPRESS is not set +# CONFIG_ARCH_VIRT is not set +# CONFIG_ARCH_WM8850 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=y +CONFIG_ARM_VIRT_EXT=y +# CONFIG_SWP_EMULATE is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_BPREDICT_DISABLE is not set +# CONFIG_CACHE_L2X0 is not set +CONFIG_ARM_L1_CACHE_SHIFT_6=y +CONFIG_ARM_L1_CACHE_SHIFT=6 +CONFIG_ARM_DMA_MEM_BUFFERABLE=y +CONFIG_ARM_NR_BANKS=8 +CONFIG_MULTI_IRQ_HANDLER=y +CONFIG_ARM_ERRATA_430973=y +# CONFIG_ARM_ERRATA_720789 is not set +# CONFIG_ARM_ERRATA_754322 is not set +# CONFIG_ARM_ERRATA_775420 is not set +# CONFIG_FIQ_DEBUGGER is not set + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_HAVE_ARM_ARCH_TIMER is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_ARM_PSCI is not set +CONFIG_ARCH_NR_GPIO=0 +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +CONFIG_PREEMPT_COUNT=y +CONFIG_HZ=100 +CONFIG_SCHED_HRTICK=y +# CONFIG_THUMB2_KERNEL is not set +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set +CONFIG_HAVE_ARCH_PFN_VALID=y +# CONFIG_HIGHMEM is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_HAVE_MEMBLOCK=y +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_COMPACTION is not set +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_NEED_PER_CPU_KM=y +# CONFIG_CLEANCACHE is not set +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UACCESS_WITH_MEMCPY is not set +CONFIG_SECCOMP=y +# CONFIG_CC_STACKPROTECTOR is not set +# CONFIG_XEN is not set +# CONFIG_ARM_FLUSH_CONSOLE_ON_RESTART is not set + +# +# Boot options +# +CONFIG_USE_OF=y +# CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE is not set +CONFIG_ATAGS=y +# CONFIG_DEPRECATED_PARAM_STRUCT is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +# CONFIG_ARM_APPENDED_DTB is not set +CONFIG_CMDLINE="" +# CONFIG_KEXEC is not set +# CONFIG_CRASH_DUMP is not set +CONFIG_AUTO_ZRELADDR=y + +# +# CPU Power Management +# + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE is not set +# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_INTERACTIVE=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +# CONFIG_GENERIC_CPUFREQ_CPU0 is not set + +# +# ARM CPU frequency scaling drivers +# +# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set +# CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set +# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set +# CONFIG_ARM_EXYNOS5440_CPUFREQ is not set +# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set +CONFIG_ARM_OMAP2PLUS_CPUFREQ=y +CONFIG_CPU_IDLE=y +# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=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 + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_SCRIPT=y +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_MISC=y +CONFIG_COREDUMP=y + +# +# Power management options +# +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_HAS_WAKELOCK=y +CONFIG_WAKELOCK=y +CONFIG_PM_SLEEP=y +# CONFIG_PM_AUTOSLEEP is not set +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PM_WAKELOCKS_GC=y +CONFIG_PM_RUNTIME=y +CONFIG_PM=y +CONFIG_PM_DEBUG=y +# CONFIG_PM_ADVANCED_DEBUG is not set +# CONFIG_PM_TEST_SUSPEND is not set +CONFIG_PM_SLEEP_DEBUG=y +# CONFIG_APM_EMULATION is not set +CONFIG_ARCH_HAS_OPP=y +CONFIG_PM_OPP=y +CONFIG_PM_CLK=y +CONFIG_CPU_PM=y +CONFIG_SUSPEND_TIME=y +CONFIG_HAS_AMBIENTMODE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARM_CPU_SUSPEND=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_DIAG is not set +CONFIG_UNIX=y +# CONFIG_UNIX_DIAG is not set +CONFIG_XFRM=y +CONFIG_XFRM_ALGO=y +CONFIG_XFRM_USER=y +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_MIGRATE=y +# CONFIG_XFRM_STATISTICS is not set +CONFIG_XFRM_IPCOMP=y +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 is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +CONFIG_NET_IP_TUNNEL=y +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_NET_IPVTI is not set +# CONFIG_INET_AH is not set +CONFIG_INET_ESP=y +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=y +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +CONFIG_INET6_IPCOMP=y +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_TUNNEL=y +CONFIG_INET6_TUNNEL=y +CONFIG_INET6_XFRM_MODE_TRANSPORT=y +CONFIG_INET6_XFRM_MODE_TUNNEL=y +CONFIG_INET6_XFRM_MODE_BEET=y +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=y +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=y +# CONFIG_IPV6_GRE is not set +CONFIG_IPV6_MULTIPLE_TABLES=y +# CONFIG_IPV6_SUBTREES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_NETLABEL is not set +CONFIG_ANDROID_PARANOID_NETWORK=y +CONFIG_NET_ACTIVITY_STATS=y +CONFIG_NETWORK_SECMARK=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=y +# CONFIG_NETFILTER_NETLINK_ACCT is not set +CONFIG_NETFILTER_NETLINK_QUEUE=y +CONFIG_NETFILTER_NETLINK_LOG=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_SECMARK is not set +CONFIG_NF_CONNTRACK_PROCFS=y +CONFIG_NF_CONNTRACK_EVENTS=y +# CONFIG_NF_CONNTRACK_TIMEOUT is not set +# CONFIG_NF_CONNTRACK_TIMESTAMP is not set +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_GRE=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_CONNTRACK_AMANDA=y +CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_BROADCAST=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +# CONFIG_NF_CONNTRACK_SNMP is not set +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +# CONFIG_NF_CONNTRACK_SIP is not set +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +# CONFIG_NF_CT_NETLINK_TIMEOUT is not set +# CONFIG_NETFILTER_NETLINK_QUEUE_CT is not set +CONFIG_NF_NAT=y +CONFIG_NF_NAT_NEEDED=y +CONFIG_NF_NAT_PROTO_DCCP=y +CONFIG_NF_NAT_PROTO_UDPLITE=y +CONFIG_NF_NAT_PROTO_SCTP=y +CONFIG_NF_NAT_AMANDA=y +CONFIG_NF_NAT_FTP=y +CONFIG_NF_NAT_IRC=y +# CONFIG_NF_NAT_SIP is not set +CONFIG_NF_NAT_TFTP=y +CONFIG_NETFILTER_TPROXY=y +CONFIG_NETFILTER_XTABLES=y + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=y +CONFIG_NETFILTER_XT_CONNMARK=y + +# +# Xtables targets +# +# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set +# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y +CONFIG_NETFILTER_XT_TARGET_CONNMARK=y +# CONFIG_NETFILTER_XT_TARGET_CT is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_HL is not set +# CONFIG_NETFILTER_XT_TARGET_HMARK is not set +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y +# CONFIG_NETFILTER_XT_TARGET_LOG is not set +CONFIG_NETFILTER_XT_TARGET_MARK=y +CONFIG_NETFILTER_XT_TARGET_NETMAP=y +CONFIG_NETFILTER_XT_TARGET_NFLOG=y +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +CONFIG_NETFILTER_XT_TARGET_REDIRECT=y +# CONFIG_NETFILTER_XT_TARGET_TEE is not set +CONFIG_NETFILTER_XT_TARGET_TPROXY=y +CONFIG_NETFILTER_XT_TARGET_TRACE=y +# CONFIG_NETFILTER_XT_TARGET_SECMARK is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set + +# +# Xtables matches +# +# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_BPF is not set +# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set +CONFIG_NETFILTER_XT_MATCH_COMMENT=y +# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set +# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y +CONFIG_NETFILTER_XT_MATCH_CONNMARK=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +# CONFIG_NETFILTER_XT_MATCH_CPU is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +CONFIG_NETFILTER_XT_MATCH_ECN=y +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y +CONFIG_NETFILTER_XT_MATCH_HELPER=y +CONFIG_NETFILTER_XT_MATCH_HL=y +CONFIG_NETFILTER_XT_MATCH_IPRANGE=y +CONFIG_NETFILTER_XT_MATCH_LENGTH=y +CONFIG_NETFILTER_XT_MATCH_LIMIT=y +CONFIG_NETFILTER_XT_MATCH_MAC=y +CONFIG_NETFILTER_XT_MATCH_MARK=y +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set +# CONFIG_NETFILTER_XT_MATCH_OSF is not set +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y +CONFIG_NETFILTER_XT_MATCH_QTAGUID=y +CONFIG_NETFILTER_XT_MATCH_QUOTA=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_SOCKET=y +CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_NETFILTER_XT_MATCH_STATISTIC=y +CONFIG_NETFILTER_XT_MATCH_STRING=y +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +CONFIG_NETFILTER_XT_MATCH_TIME=y +CONFIG_NETFILTER_XT_MATCH_U32=y +# CONFIG_IP_SET is not set +# CONFIG_IP_VS is not set + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=y +CONFIG_NF_CONNTRACK_IPV4=y +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_MATCH_AH=y +CONFIG_IP_NF_MATCH_ECN=y +# CONFIG_IP_NF_MATCH_RPFILTER is not set +CONFIG_IP_NF_MATCH_TTL=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +CONFIG_IP_NF_TARGET_REJECT_SKERR=y +# CONFIG_IP_NF_TARGET_ULOG is not set +CONFIG_NF_NAT_IPV4=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_NETMAP=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_NF_NAT_PROTO_GRE=y +CONFIG_NF_NAT_PPTP=y +CONFIG_NF_NAT_H323=y +CONFIG_IP_NF_MANGLE=y +# CONFIG_IP_NF_TARGET_CLUSTERIP is not set +# CONFIG_IP_NF_TARGET_ECN is not set +# CONFIG_IP_NF_TARGET_TTL is not set +CONFIG_IP_NF_RAW=y +# CONFIG_IP_NF_SECURITY is not set +CONFIG_IP_NF_ARPTABLES=y +CONFIG_IP_NF_ARPFILTER=y +CONFIG_IP_NF_ARP_MANGLE=y + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV6=y +CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_IP6_NF_IPTABLES=y +# CONFIG_IP6_NF_MATCH_AH is not set +# CONFIG_IP6_NF_MATCH_EUI64 is not set +# CONFIG_IP6_NF_MATCH_FRAG is not set +# CONFIG_IP6_NF_MATCH_OPTS is not set +# CONFIG_IP6_NF_MATCH_HL is not set +# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set +# CONFIG_IP6_NF_MATCH_MH is not set +# CONFIG_IP6_NF_MATCH_RPFILTER is not set +# CONFIG_IP6_NF_MATCH_RT is not set +# CONFIG_IP6_NF_TARGET_HL is not set +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +CONFIG_IP6_NF_TARGET_REJECT_SKERR=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_RAW=y +# CONFIG_IP6_NF_SECURITY is not set +CONFIG_NF_NAT_IPV6=y +CONFIG_IP6_NF_TARGET_MASQUERADE=y +# CONFIG_IP6_NF_TARGET_NPT is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +CONFIG_HAVE_NET_DSA=y +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +# CONFIG_NET_SCH_CBQ is not set +CONFIG_NET_SCH_HTB=y +# CONFIG_NET_SCH_HFSC is not set +# CONFIG_NET_SCH_PRIO is not set +# CONFIG_NET_SCH_MULTIQ is not set +# CONFIG_NET_SCH_RED is not set +# CONFIG_NET_SCH_SFB is not set +# CONFIG_NET_SCH_SFQ is not set +# CONFIG_NET_SCH_TEQL is not set +# CONFIG_NET_SCH_TBF is not set +# CONFIG_NET_SCH_GRED is not set +# CONFIG_NET_SCH_DSMARK is not set +# CONFIG_NET_SCH_NETEM is not set +# CONFIG_NET_SCH_DRR is not set +# CONFIG_NET_SCH_MQPRIO is not set +# CONFIG_NET_SCH_CHOKE is not set +# CONFIG_NET_SCH_QFQ is not set +# CONFIG_NET_SCH_CODEL is not set +# CONFIG_NET_SCH_FQ_CODEL is not set +# CONFIG_NET_SCH_INGRESS is not set +# CONFIG_NET_SCH_PLUG is not set + +# +# Classification +# +CONFIG_NET_CLS=y +# CONFIG_NET_CLS_BASIC is not set +# CONFIG_NET_CLS_TCINDEX is not set +# CONFIG_NET_CLS_ROUTE4 is not set +# CONFIG_NET_CLS_FW is not set +CONFIG_NET_CLS_U32=y +# CONFIG_CLS_U32_PERF is not set +# CONFIG_CLS_U32_MARK is not set +# CONFIG_NET_CLS_RSVP is not set +# CONFIG_NET_CLS_RSVP6 is not set +# CONFIG_NET_CLS_FLOW is not set +# CONFIG_NET_CLS_CGROUP is not set +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +# CONFIG_NET_EMATCH_CMP is not set +# CONFIG_NET_EMATCH_NBYTE is not set +CONFIG_NET_EMATCH_U32=y +# CONFIG_NET_EMATCH_META is not set +# CONFIG_NET_EMATCH_TEXT is not set +CONFIG_NET_CLS_ACT=y +# CONFIG_NET_ACT_POLICE is not set +# CONFIG_NET_ACT_GACT is not set +# CONFIG_NET_ACT_MIRRED is not set +# CONFIG_NET_ACT_IPT is not set +# CONFIG_NET_ACT_NAT is not set +# CONFIG_NET_ACT_PEDIT is not set +# CONFIG_NET_ACT_SIMP is not set +# CONFIG_NET_ACT_SKBEDIT is not set +# CONFIG_NET_ACT_CSUM is not set +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y +# CONFIG_BATMAN_ADV is not set +# CONFIG_OPENVSWITCH is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_MMAP is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_NETPRIO_CGROUP is not set +CONFIG_BQL=y +# CONFIG_BPF_JIT is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NET_DROP_MONITOR is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y +CONFIG_CFG80211=y +CONFIG_NL80211_TESTMODE=y +# 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=y +# CONFIG_CFG80211_DEBUGFS is not set +# CONFIG_CFG80211_INTERNAL_REGDB is not set +# CONFIG_CFG80211_WEXT is not set +# CONFIG_LIB80211 is not set +# CONFIG_CFG80211_ALLOW_RECONNECT is not set +CONFIG_MAC80211=y +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_RC_PID=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +CONFIG_MAC80211_RC_DEFAULT_PID=y +# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set +CONFIG_MAC80211_RC_DEFAULT="pid" +# CONFIG_MAC80211_MESH is not set +# CONFIG_MAC80211_LEDS is not set +# CONFIG_MAC80211_DEBUGFS is not set +# CONFIG_MAC80211_MESSAGE_TRACING is not set +CONFIG_MAC80211_DEBUG_MENU=y +# CONFIG_MAC80211_NOINLINE is not set +# CONFIG_MAC80211_VERBOSE_DEBUG is not set +# CONFIG_MAC80211_MLME_DEBUG is not set +# CONFIG_MAC80211_STA_DEBUG is not set +# CONFIG_MAC80211_HT_DEBUG is not set +# CONFIG_MAC80211_IBSS_DEBUG is not set +# CONFIG_MAC80211_PS_DEBUG is not set +# CONFIG_MAC80211_TDLS_DEBUG is not set +# CONFIG_WIMAX is not set +CONFIG_RFKILL=y +CONFIG_RFKILL_PM=y +# CONFIG_RFKILL_INPUT is not set +# CONFIG_RFKILL_REGULATOR is not set +# CONFIG_RFKILL_GPIO is not set +CONFIG_RFKILL_WL18XX=y +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set +# CONFIG_NFC is not set +CONFIG_HAVE_BPF_JIT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_LOADER_USER_HELPER=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_IRQ=y +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_CMA is not set + +# +# Bus devices +# +# CONFIG_OMAP_OCP2SCP is not set +CONFIG_OMAP_INTERCONNECT=y +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 + +# +# 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 is not set +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +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=y +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_PHYSMAP_OF is not set +# CONFIG_MTD_IMPA7 is not set +# CONFIG_MTD_GPIO_ADDR is not set +# CONFIG_MTD_PLATRAM is not set +# CONFIG_MTD_LATCH_ADDR is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SST25L is not set +# 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_IDS=y +CONFIG_MTD_NAND_ECC=y +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_BCH=y +CONFIG_MTD_NAND_ECC_BCH=y +# CONFIG_MTD_SM_COMMON is not set +# CONFIG_MTD_NAND_DENALI is not set +# CONFIG_MTD_NAND_GPIO is not set +CONFIG_MTD_NAND_OMAP2=y +# CONFIG_MTD_NAND_OMAP_BCH is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_DOCG4 is not set +# CONFIG_MTD_NAND_NANDSIM is not set +CONFIG_MTD_NAND_PLATFORM=y +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set +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_DTC=y +CONFIG_OF=y + +# +# Device Tree and Open Firmware support +# +CONFIG_PROC_DEVICETREE=y +# CONFIG_OF_SELFTEST is not set +CONFIG_OF_FLATTREE=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_ADDRESS=y +CONFIG_OF_IRQ=y +CONFIG_OF_DEVICE=y +CONFIG_OF_I2C=y +CONFIG_OF_NET=y +CONFIG_OF_MTD=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_DRBD is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_MG_DISK is not set +# CONFIG_BLK_DEV_RBD is not set + +# +# Misc devices +# +# CONFIG_SENSORS_LIS3LV02D is not set +# CONFIG_AD525X_DPOT is not set +# CONFIG_ATMEL_PWM is not set +# CONFIG_DUMMY_IRQ is not set +# CONFIG_ICS932S401 is not set +# CONFIG_ATMEL_SSC is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +# CONFIG_VIB_GPIO 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_UID_STAT 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 is not set +# CONFIG_C55_CTRL is not set +# CONFIG_MMI_FACTORY is not set +# CONFIG_MOT_UTAG is not set +# CONFIG_BQ5105X_CTRL is not set +# CONFIG_BQ5105X_DETECT is not set +CONFIG_WAKEUP_SOURCE_NOTIFY=y +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_AT25 is not set +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_EEPROM_93XX46 is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +# CONFIG_SENSORS_LIS3_SPI is not set +# CONFIG_SENSORS_LIS3_I2C is not set + +# +# Altera FPGA firmware download module +# +# CONFIG_ALTERA_STAPL is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_BONDING is not set +# CONFIG_DUMMY is not set +# CONFIG_EQUALIZER is not set +# CONFIG_MII is not set +CONFIG_IFB=y +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_VXLAN is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +CONFIG_TUN=y +# CONFIG_VETH is not set + +# +# CAIF transport drivers +# + +# +# Distributed Switch Architecture drivers +# +# CONFIG_NET_DSA_MV88E6XXX is not set +# CONFIG_NET_DSA_MV88E6060 is not set +# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set +# CONFIG_NET_DSA_MV88E6131 is not set +# CONFIG_NET_DSA_MV88E6123_61_65 is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MICREL_KS8995MA is not set +CONFIG_PPP=y +CONFIG_PPP_BSDCOMP=y +CONFIG_PPP_DEFLATE=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_MPPE=y +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOLAC is not set +# CONFIG_PPPOPNS is not set +CONFIG_PPP_ASYNC=y +CONFIG_PPP_SYNC_TTY=y +# CONFIG_SLIP is not set +CONFIG_SLHC=y +# CONFIG_WLAN is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# +# CONFIG_WAN is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set +CONFIG_INPUT_MATRIXKMAP=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +CONFIG_INPUT_KEYRESET=y + +# +# 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 is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_TCA8418 is not set +# CONFIG_KEYBOARD_MATRIX is not set +# 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_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 is not set +CONFIG_INPUT_MOUSE=y +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_CYAPA is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMXT=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_AD7877 is not set +# CONFIG_TOUCHSCREEN_AD7879 is not set +# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set +# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set +# CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set +# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set +# CONFIG_TOUCHSCREEN_DYNAPRO is not set +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set +# CONFIG_TOUCHSCREEN_EETI is not set +# CONFIG_TOUCHSCREEN_EGALAX is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_ILI210X is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set +# CONFIG_TOUCHSCREEN_WACOM_I2C is not set +# CONFIG_TOUCHSCREEN_MAX11801 is not set +# CONFIG_TOUCHSCREEN_MCS5000 is not set +# CONFIG_TOUCHSCREEN_MMS114 is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_INEXIO is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_PIXCIR is not set +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set +# CONFIG_TOUCHSCREEN_TSC_SERIO is not set +# CONFIG_TOUCHSCREEN_TSC2005 is not set +# CONFIG_TOUCHSCREEN_TSC2007 is not set +# CONFIG_TOUCHSCREEN_W90X900 is not set +# CONFIG_TOUCHSCREEN_ST1232 is not set +# CONFIG_TOUCHSCREEN_TPS6507X is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_MMA8450 is not set +# CONFIG_INPUT_MPU3050 is not set +# CONFIG_INPUT_GP2A is not set +# CONFIG_INPUT_GPIO_TILT_POLLED is not set +# CONFIG_INPUT_KEYCHORD is not set +# CONFIG_INPUT_KXTJ9 is not set +# CONFIG_INPUT_UINPUT is not set +# CONFIG_INPUT_GPIO is not set +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +# CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_CMA3000 is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_TTY=y +# CONFIG_VT is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_TRACE_SINK is not set +CONFIG_DEVMEM=y +CONFIG_DEVKMEM=y + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX310X is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_OMAP=y +CONFIG_SERIAL_OMAP_CONSOLE=y +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# 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 is not set +CONFIG_TTY_PRINTK=y +# CONFIG_HVC_DCC is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_HW_RANDOM_ATMEL is not set +# CONFIG_HW_RANDOM_EXYNOS is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_DCC_TTY is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=y +# CONFIG_I2C_MUX is not set +CONFIG_I2C_HELPER_AUTO=y + +# +# I2C Hardware Bus support +# + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CBUS_GPIO is not set +# CONFIG_I2C_DESIGNWARE_PLATFORM is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_OMAP=y +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_PXA_PCI is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_TAOS_EVM is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_STUB is not set +CONFIG_I2C_DEBUG_CORE=y +# CONFIG_I2C_DEBUG_ALGO is not set +CONFIG_I2C_DEBUG_BUS=y +CONFIG_SPI=y +CONFIG_SPI_DEBUG=y +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +# CONFIG_SPI_BITBANG is not set +# CONFIG_SPI_GPIO is not set +# CONFIG_SPI_FSL_SPI is not set +# CONFIG_SPI_OC_TINY is not set +CONFIG_SPI_OMAP24XX=y +# CONFIG_SPI_PXA2XX_PCI is not set +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_XCOMM is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set + +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=y +# CONFIG_SPI_TLE62X0 is not set + +# +# Qualcomm MSM SSBI bus support +# +# CONFIG_SSBI is not set +# CONFIG_HSI is not set + +# +# PPS support +# +# CONFIG_PPS is not set + +# +# PPS generators support +# + +# +# PTP clock support +# +# CONFIG_PTP_1588_CLOCK is not set + +# +# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +# +# CONFIG_PTP_1588_CLOCK_PCH is not set +CONFIG_PINCTRL=y + +# +# Pin controllers +# +CONFIG_PINMUX=y +CONFIG_PINCONF=y +CONFIG_GENERIC_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set +CONFIG_PINCTRL_SINGLE=y +# CONFIG_PINCTRL_EXYNOS is not set +# CONFIG_PINCTRL_EXYNOS5440 is not set +CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y +CONFIG_ARCH_REQUIRE_GPIOLIB=y +CONFIG_GPIO_DEVRES=y +CONFIG_GPIOLIB=y +CONFIG_OF_GPIO=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y + +# +# Memory mapped GPIO drivers: +# +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_EM is not set +# CONFIG_GPIO_RCAR is not set +# CONFIG_GPIO_TS5500 is not set +# CONFIG_GPIO_GRGPIO is not set + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_SX150X is not set +# CONFIG_GPIO_ADP5588 is not set +# CONFIG_GPIO_ADNP is not set + +# +# PCI GPIO expanders: +# + +# +# SPI GPIO expanders: +# +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MCP23S08 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_74X164 is not set + +# +# AC97 GPIO expanders: +# + +# +# MODULbus GPIO expanders: +# +# CONFIG_GPIO_TPS65910 is not set + +# +# USB GPIO expanders: +# +# CONFIG_W1 is not set +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 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_BQ27x00=y +CONFIG_BATTERY_BQ27X00_I2C=y +CONFIG_BATTERY_BQ27X00_PLATFORM=y +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_SMB347 is not set +# CONFIG_BATTERY_GOLDFISH is not set +CONFIG_POWER_RESET=y +# CONFIG_POWER_RESET_GPIO is not set +# CONFIG_POWER_RESET_RESTART is not set +# CONFIG_POWER_RESET_MINNOW is not set +CONFIG_POWER_AVS=y +# CONFIG_POWER_TI_HARDWARE_VOLTAGE_CONTROL is not set +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_DW_WATCHDOG is not set +CONFIG_OMAP_WATCHDOG=y +CONFIG_OMAP_WATCHDOG_AUTOPET=y +# CONFIG_MAX63XX_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +# CONFIG_SSB is not set +CONFIG_BCMA_POSSIBLE=y + +# +# Broadcom specific AMBA +# +# CONFIG_BCMA is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +# CONFIG_MFD_AS3711 is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_CROS_EC is not set +# CONFIG_MFD_ASIC3 is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_DA9052_I2C is not set +# CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_HTC_EGPIO is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_MAX77686 is not set +# CONFIG_MFD_MAX77693 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_EZX_PCAP is not set +# CONFIG_MFD_CPCAP is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_MFD_RC5T583 is not set +# CONFIG_MFD_SEC_CORE is not set +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SMSC is not set +# CONFIG_ABX500_CORE is not set +# CONFIG_MFD_M4SENSORHUB is not set +# CONFIG_MFD_STMPE is not set +# CONFIG_MFD_SYSCON is not set +# CONFIG_MFD_TI_AM335X_TSCADC 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_TPS6586X is not set +CONFIG_MFD_TPS65910=y +CONFIG_MFD_TPS65912=y +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_TPS65912_DEBUGFS 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 is not set +# 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_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_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_DUMMY=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_ISL6271A 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_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# 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_REGULATOR_TPS65910=y +CONFIG_REGULATOR_TI_OMAP_PMIC=y +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +# CONFIG_DRM is not set +# CONFIG_TEGRA_HOST1X is not set +# CONFIG_SGX_OMAP3630 is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# 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 is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_FOREIGN_ENDIAN is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_TMIO is not set +# CONFIG_FB_GOLDFISH is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_BROADSHEET is not set +# CONFIG_FB_AUO_K190X is not set +# CONFIG_FB_SIMPLE is not set +CONFIG_OMAP2_VRFB=y +CONFIG_OMAP2_DSS=y +CONFIG_OMAP2_DSS_DEBUG=y +CONFIG_OMAP2_DSS_DEBUGFS=y +# CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS is not set +CONFIG_OMAP2_DSS_DPI=y +# CONFIG_OMAP2_DSS_RFBI is not set +# CONFIG_OMAP2_DSS_VENC is not set +# CONFIG_OMAP4_DSS_HDMI is not set +# CONFIG_OMAP2_DSS_SDI is not set +# CONFIG_OMAP2_DSS_DSI is not set +CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0 +CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y +CONFIG_OMAP2_DSS_RESET=y +CONFIG_FB_OMAP2=y +CONFIG_FB_OMAP2_DEBUG_SUPPORT=y +CONFIG_FB_OMAP2_NUM_FBS=1 + +# +# OMAP2/3 Display Device Drivers +# +# CONFIG_PANEL_GENERIC_DPI is not set +# CONFIG_PANEL_TFP410 is not set +# CONFIG_PANEL_LGPHILIPS_LB035Q02 is not set +# CONFIG_PANEL_PICODLP is not set +# CONFIG_PANEL_TPO_TD043MTEA1 is not set +# CONFIG_EXYNOS_VIDEO is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +# CONFIG_ADF is not set +# CONFIG_LOGO is not set +# CONFIG_FB_SSD1307 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_COMPRESS_OFFLOAD=y +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_HRTIMER is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_VERBOSE_PROCFS is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +# 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_DRIVERS is not set +# CONFIG_SND_ARM is not set +# CONFIG_SND_SPI is not set +CONFIG_SND_SOC=y +CONFIG_SND_SOC_DMAENGINE_PCM=y +# CONFIG_SND_ATMEL_SOC is not set +# CONFIG_SND_DESIGNWARE_I2S is not set +CONFIG_SND_OMAP_SOC=y +# CONFIG_SND_OMAP_SOC_C55 is not set +CONFIG_SND_SOC_I2C_AND_SPI=y +# CONFIG_SND_SOC_ALL_CODECS is not set +# CONFIG_SND_SIMPLE_CARD is not set +# CONFIG_SOUND_PRIME is not set + +# +# HID support +# +CONFIG_HID=y +# CONFIG_HID_BATTERY_STRENGTH is not set +# CONFIG_HIDRAW is not set +# CONFIG_UHID is not set +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_ACRUX is not set +# CONFIG_HID_APPLE is not set +# CONFIG_HID_AUREAL is not set +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_PRODIKEYS is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EMS_FF is not set +# CONFIG_HID_ELECOM is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_KEYTOUCH is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +# CONFIG_HID_GYRATION is not set +# CONFIG_HID_ICADE is not set +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LCPOWER is not set +# CONFIG_HID_LOGITECH is not set +# CONFIG_HID_MAGICMOUSE is not set +# CONFIG_HID_MICROSOFT is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_MULTITOUCH is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_PRIMAX is not set +# CONFIG_HID_PS3REMOTE is not set +# CONFIG_HID_SAITEK is not set +# CONFIG_HID_SAMSUNG is not set +# CONFIG_HID_SPEEDLINK is not set +# CONFIG_HID_STEELSERIES is not set +# CONFIG_HID_SUNPLUS is not set +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TIVO is not set +# CONFIG_HID_TOPSEED is not set +# CONFIG_HID_THINGM is not set +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_WACOM is not set +# CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +# CONFIG_HID_SENSOR_HUB is not set + +# +# I2C HID support +# +# CONFIG_I2C_HID is not set +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +# CONFIG_USB_ARCH_HAS_XHCI is not set +# CONFIG_USB_SUPPORT is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_LM3530=y +# CONFIG_LEDS_LM3535 is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_GPIO is not set +# 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_PCA955X is not set +# CONFIG_LEDS_PCA9633 is not set +# CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_REGULATOR is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set +# CONFIG_LEDS_RENESAS_TPU is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_OT200 is not set +# CONFIG_LEDS_BLINKM is not set + +# +# LED Triggers +# +# CONFIG_LEDS_TRIGGERS is not set +CONFIG_SWITCH=y +# CONFIG_SWITCH_GPIO is not set +# CONFIG_ACCESSIBILITY is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_HCTOSYS is not set +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# 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 is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# 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_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_X1205 is not set +# CONFIG_RTC_DRV_PCF8523 is not set +# CONFIG_RTC_DRV_PCF8563 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_TPS65910=y +# 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 + +# +# 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_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 + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 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_DS2404 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_SNVS is not set + +# +# HID Sensor RTC drivers +# +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +# CONFIG_DW_DMAC is not set +# CONFIG_TIMB_DMA is not set +CONFIG_DMA_OMAP=y +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=y +CONFIG_DMA_OF=y + +# +# DMA Clients +# +# CONFIG_NET_DMA is not set +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_DMATEST is not set +# CONFIG_AUXDISPLAY is not set +CONFIG_UIO=y +CONFIG_UIO_PDRV=y +CONFIG_UIO_PDRV_GENIRQ=y +# CONFIG_UIO_DMEM_GENIRQ is not set +# CONFIG_VIRT_DRIVERS is not set + +# +# Virtio drivers +# +# CONFIG_VIRTIO_MMIO is not set + +# +# Microsoft Hyper-V guest support +# +CONFIG_STAGING=y +<<<<<<< HEAD +# CONFIG_ECHO is not set +# CONFIG_COMEDI is not set + +# +# IIO staging drivers +# +======= +CONFIG_ECHO=y +CONFIG_IIO=y +# CONFIG_IIO_ST_HWMON is not set +CONFIG_IIO_BUFFER=y +# CONFIG_IIO_SW_RING is not set +CONFIG_IIO_KFIFO_BUF=y +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +>>>>>>> 4353894... inv_mpu: Adding invensense mpu driver + +# +# Accelerometers +# +<<<<<<< HEAD +# 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 +======= +>>>>>>> 4353894... inv_mpu: Adding invensense mpu driver + +# +# Analog to digital converters +# +# CONFIG_AD7291 is not set +# CONFIG_AD7606 is not set +# CONFIG_AD799X is not set +<<<<<<< HEAD +# CONFIG_AD7780 is not set +# CONFIG_AD7816 is not set +# CONFIG_AD7192 is not set +# CONFIG_AD7280 is not set +======= +# CONFIG_ADT7410 is not set +# CONFIG_MAX1363 is not set +>>>>>>> 4353894... inv_mpu: Adding invensense mpu driver + +# +# 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 + +# +<<<<<<< HEAD +# Direct Digital Synthesis +# +# CONFIG_AD5930 is not set +# CONFIG_AD9832 is not set +# CONFIG_AD9834 is not set +# CONFIG_AD9850 is not set +# CONFIG_AD9852 is not set +# CONFIG_AD9910 is not set +# CONFIG_AD9951 is not set +======= +# Digital to analog converters +# +# CONFIG_AD5380 is not set +# CONFIG_MAX517 is not set + +# +# Direct Digital Synthesis +# +>>>>>>> 4353894... inv_mpu: Adding invensense mpu driver + +# +# Digital gyroscope sensors +# +<<<<<<< HEAD +# CONFIG_ADIS16060 is not set +# CONFIG_ADIS16130 is not set +# CONFIG_ADIS16260 is not set +======= +>>>>>>> 4353894... inv_mpu: Adding invensense mpu driver + +# +# Network Analyzer, Impedance Converters +# +# CONFIG_AD5933 is not set + +# +<<<<<<< HEAD +# Light sensors +# +# CONFIG_SENSORS_ISL29018 is not set +# CONFIG_SENSORS_ISL29028 is not set +# CONFIG_TSL2583 is not set +# CONFIG_TSL2x7x is not set +======= +# Inertial measurement units +# +CONFIG_INV_MPU_IIO=m +# CONFIG_INV_IIO_MPU3050_ACCEL_SLAVE_BMA250 is not set +# CONFIG_DTS_INV_MPU_IIO is not set + +# +# Light sensors +# +# CONFIG_SENSORS_ISL29018 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_TSL2583 is not set +>>>>>>> 4353894... inv_mpu: Adding invensense mpu driver + +# +# Magnetometer sensors +# +# CONFIG_SENSORS_HMC5843 is not set + +# +# Active energy metering IC +# +<<<<<<< HEAD +# CONFIG_ADE7753 is not set +# CONFIG_ADE7754 is not set +# CONFIG_ADE7758 is not set +# CONFIG_ADE7759 is not set +======= +>>>>>>> 4353894... inv_mpu: Adding invensense mpu driver +# CONFIG_ADE7854 is not set + +# +# Resolver to digital converters +# +<<<<<<< HEAD +# CONFIG_AD2S90 is not set +# CONFIG_AD2S1200 is not set +# CONFIG_AD2S1210 is not set +======= +>>>>>>> 4353894... inv_mpu: Adding invensense mpu driver + +# +# Triggers - standalone +# +# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set +# CONFIG_IIO_GPIO_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set +# CONFIG_IIO_SIMPLE_DUMMY is not set +<<<<<<< HEAD +# CONFIG_ZSMALLOC is not set +======= +# CONFIG_FB_SM7XX is not set +# CONFIG_TIDSPBRIDGE is not set +>>>>>>> 4353894... inv_mpu: Adding invensense mpu driver +# CONFIG_FT1000 is not set + +# +# Speakup console speech +# +# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set +# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set +# CONFIG_STAGING_MEDIA is not set + +# +# Android +# +CONFIG_ANDROID=y +CONFIG_ANDROID_BINDER_IPC=y +CONFIG_ANDROID_BINDER_IPC_32BIT=y +CONFIG_ASHMEM=y +CONFIG_ANDROID_LOGGER=y +CONFIG_ANDROID_TIMED_OUTPUT=y +CONFIG_ANDROID_TIMED_GPIO=y +CONFIG_ANDROID_LOW_MEMORY_KILLER=y +CONFIG_ANDROID_LOW_MEMORY_KILLER_AUTODETECT_OOM_ADJ_VALUES=y +CONFIG_ANDROID_INTF_ALARM_DEV=y +CONFIG_SYNC=y +CONFIG_SW_SYNC=y +# CONFIG_SW_SYNC_USER is not set +CONFIG_ION=y +# CONFIG_ION_TEST is not set +# CONFIG_WIMAX_GDM72XX is not set +# CONFIG_DGRP is not set +CONFIG_CLKDEV_LOOKUP=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y + +# +# Common Clock Framework +# +# CONFIG_COMMON_CLK_DEBUG is not set +# CONFIG_COMMON_CLK_SI5351 is not set + +# +# Hardware Spinlock drivers +# +CONFIG_CLKSRC_MMIO=y +# CONFIG_MAILBOX is not set +# CONFIG_IOMMU_SUPPORT is not set + +# +# Remoteproc drivers +# +# CONFIG_STE_MODEM_RPROC is not set + +# +# Rpmsg drivers +# +# CONFIG_PM_DEVFREQ is not set +# CONFIG_EXTCON is not set +# CONFIG_MEMORY is not set +CONFIG_IIO=y +CONFIG_IIO_BUFFER=y +# CONFIG_IIO_BUFFER_CB is not set +CONFIG_IIO_KFIFO_BUF=y +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 + +# +# Accelerometers +# +# CONFIG_KXSD9 is not set +# CONFIG_IIO_ST_ACCEL_3AXIS is not set + +# +# Analog to digital converters +# +# CONFIG_AD7266 is not set +# CONFIG_AD7298 is not set +# CONFIG_AD7923 is not set +# CONFIG_AD7791 is not set +# CONFIG_AD7793 is not set +# CONFIG_AD7476 is not set +# CONFIG_AD7887 is not set +# CONFIG_EXYNOS_ADC is not set +# CONFIG_MAX1363 is not set +# CONFIG_TI_ADC081C is not set + +# +# Amplifiers +# +# CONFIG_AD8366 is not set + +# +# Hid Sensor IIO Common +# + +# +# 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_AD5624R_SPI is not set +# CONFIG_AD5446 is not set +# CONFIG_AD5449 is not set +# CONFIG_AD5504 is not set +# CONFIG_AD5755 is not set +# CONFIG_AD5764 is not set +# CONFIG_AD5791 is not set +# CONFIG_AD5686 is not set +# CONFIG_MAX517 is not set +# CONFIG_MCP4725 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_ADIS16136 is not set +# CONFIG_ADXRS450 is not set +# CONFIG_IIO_ST_GYRO_3AXIS is not set +# CONFIG_ITG3200 is not set + +# +# Inertial measurement units +# +# CONFIG_ADIS16400 is not set +# CONFIG_ADIS16480 is not set +# CONFIG_INV_MPU6050_IIO is not set + +# +# Light sensors +# +# CONFIG_ADJD_S311 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_VCNL4000 is not set + +# +# Magnetometer sensors +# +# CONFIG_AK8975 is not set +# CONFIG_IIO_ST_MAGN_3AXIS is not set +# CONFIG_PWM is not set +CONFIG_IRQCHIP=y +# CONFIG_IPACK_BUS is not set +# CONFIG_RESET_CONTROLLER is not set + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +# CONFIG_FS_POSIX_ACL is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +CONFIG_QUOTA=y +# CONFIG_QUOTA_NETLINK_INTERFACE is not set +CONFIG_PRINT_QUOTA_WARNING=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_TREE=y +# CONFIG_QFMT_V1 is not set +CONFIG_QFMT_V2=y +CONFIG_QUOTACTL=y +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=y +# CONFIG_CUSE is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# 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 is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_TMPFS_XATTR is not set +# 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 is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_UBIFS_FS=y +# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +# CONFIG_LOGFS is not set +# CONFIG_CRAMFS is not set +# CONFIG_SQUASHFS is not set +# 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 is not set +# CONFIG_PSTORE is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_F2FS_FS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_MAC_ROMAN is not set +# CONFIG_NLS_MAC_CELTIC is not set +# CONFIG_NLS_MAC_CENTEURO is not set +# CONFIG_NLS_MAC_CROATIAN is not set +# CONFIG_NLS_MAC_CYRILLIC is not set +# CONFIG_NLS_MAC_GAELIC is not set +# CONFIG_NLS_MAC_GREEK is not set +# CONFIG_NLS_MAC_ICELAND is not set +# CONFIG_NLS_MAC_INUIT is not set +# CONFIG_NLS_MAC_ROMANIAN is not set +# CONFIG_NLS_MAC_TURKISH is not set +# CONFIG_NLS_UTF8 is not set +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_PRINTK_TIME=y +CONFIG_DEFAULT_MESSAGE_LOGLEVEL=7 +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=1024 +CONFIG_MAGIC_SYSRQ=y +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_TOUCHSCREEN_DEBUG is not set +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_LOCKUP_DETECTOR=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1 +CONFIG_PANIC_ON_OOPS=y +CONFIG_PANIC_ON_OOPS_VALUE=1 +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1 +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES 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_STACKTRACE=y +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_INFO_REDUCED is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_FRAME_POINTER=y +# CONFIG_BOOT_PRINTK_DELAY is not set + +# +# RCU Debugging +# +# CONFIG_PROVE_RCU_DELAY is not set +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_LKDTM is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set +# CONFIG_DEBUG_PAGEALLOC 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_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=y +# CONFIG_BLK_DEV_IO_TRACE 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_RING_BUFFER_BENCHMARK is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +CONFIG_DYNAMIC_DEBUG=y +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_STRICT_DEVMEM is not set +# CONFIG_ARM_UNWIND is not set +CONFIG_OLD_MCOUNT=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_RODATA is not set +CONFIG_DEBUG_LL=y +CONFIG_DEBUG_OMAP2PLUS_UART=y +# CONFIG_DEBUG_ICEDCC is not set +# CONFIG_DEBUG_SEMIHOSTING is not set +# CONFIG_DEBUG_OMAP2UART1 is not set +# CONFIG_DEBUG_OMAP2UART2 is not set +# CONFIG_DEBUG_OMAP2UART3 is not set +CONFIG_DEBUG_OMAP3UART3=y +# CONFIG_DEBUG_OMAP4UART3 is not set +# CONFIG_DEBUG_OMAP3UART4 is not set +# CONFIG_DEBUG_OMAP4UART4 is not set +# CONFIG_DEBUG_TI81XXUART1 is not set +# CONFIG_DEBUG_TI81XXUART2 is not set +# CONFIG_DEBUG_TI81XXUART3 is not set +# CONFIG_DEBUG_AM33XXUART1 is not set +# CONFIG_DEBUG_ZOOM_UART is not set +CONFIG_DEBUG_LL_INCLUDE="debug/omap2plus.S" +CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" +CONFIG_EARLY_PRINTK=y +CONFIG_EARLY_PRINTK_DIRECT=y +# CONFIG_PID_IN_CONTEXTIDR is not set + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY=y +# CONFIG_SECURITYFS is not set +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +# CONFIG_SECURITY_PATH is not set +CONFIG_LSM_MMAP_MIN_ADDR=32768 +CONFIG_SECURITY_SELINUX=y +# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set +# CONFIG_SECURITY_SELINUX_DISABLE is not set +# CONFIG_SECURITY_SELINUX_DEVELOP is not set +# CONFIG_SECURITY_SELINUX_AVC_STATS is not set +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set +# CONFIG_SECURITY_SMACK is not set +# CONFIG_SECURITY_TOMOYO is not set +# CONFIG_SECURITY_APPARMOR is not set +# CONFIG_SECURITY_YAMA is not set +# CONFIG_IMA is not set +# CONFIG_EVM is not set +CONFIG_DEFAULT_SECURITY_SELINUX=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +CONFIG_DEFAULT_SECURITY="selinux" +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_RNG2=y +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +# CONFIG_CRYPTO_USER is not set +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +# CONFIG_CRYPTO_GF128MUL is not set +# CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_WORKQUEUE=y +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_AUTHENC=y +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_SEQIV is not set + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_XTS is not set + +# +# Hash modes +# +# CONFIG_CRYPTO_CMAC is not set +CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_CRC32 is not set +# CONFIG_CRYPTO_GHASH is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_RMD128 is not set +# CONFIG_CRYPTO_RMD160 is not set +# CONFIG_CRYPTO_RMD256 is not set +# CONFIG_CRYPTO_RMD320 is not set +CONFIG_CRYPTO_SHA1=y +# CONFIG_CRYPTO_SHA1_ARM is not set +CONFIG_CRYPTO_SHA256=y +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_WP512 is not set + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_ARM is not set +# CONFIG_CRYPTO_ANUBIS is not set +CONFIG_CRYPTO_ARC4=y +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_TEA is not set +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_TWOFISH_COMMON=y + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=y +# CONFIG_CRYPTO_ZLIB is not set +CONFIG_CRYPTO_LZO=y + +# +# Random Number Generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_USER_API_HASH is not set +# CONFIG_CRYPTO_USER_API_SKCIPHER is not set +CONFIG_CRYPTO_HW=y +# CONFIG_CRYPTO_DEV_OMAP_SHAM is not set +# CONFIG_CRYPTO_DEV_OMAP_AES is not set +# CONFIG_ASYMMETRIC_KEY_TYPE is not set +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_IO=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +# CONFIG_CRC_T10DIF is not set +# CONFIG_CRC_ITU_T is not set +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 is not set +CONFIG_LIBCRC32C=y +# CONFIG_CRC8 is not set +CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_BCH=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=y +CONFIG_TEXTSEARCH_BM=y +CONFIG_TEXTSEARCH_FSM=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_DQL=y +CONFIG_NLATTR=y +CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y +CONFIG_AVERAGE=y +# CONFIG_CORDIC is not set +# CONFIG_DDR is not set +# CONFIG_VIRTUALIZATION is not set diff --git a/arch/arm/include/asm/bootinfo.h b/arch/arm/include/asm/bootinfo.h new file mode 100644 index 00000000000..4fccfe801d3 --- /dev/null +++ b/arch/arm/include/asm/bootinfo.h @@ -0,0 +1,76 @@ +/* + * linux/include/asm/bootinfo.h:  Include file for boot information + *                                provided on Motorola phones + * + * Copyright (C) 2009 Motorola, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + * + * Date         Author          Comment + * 01/07/2009   Motorola        Initial version + */ + +#ifndef __ASMARM_BOOTINFO_H +#define __ASMARM_BOOTINFO_H + + +#if !defined(__KERNEL__) || defined(CONFIG_BOOTINFO) + +#define PU_REASON_INVALID		0xFFFFFFFF + +/* + * /proc/bootinfo has a strict format.  Each line contains a name/value + * pair which are separated with a colon and a single space on both + * sides of the colon.  The following defines help you size the + * buffers used to read the data from /proc/bootinfo. + * + * BOOTINFO_MAX_NAME_LEN:  maximum size in bytes of a name in the + *                         bootinfo line.  Don't forget to add space + *                         for the NUL if you need it. + * BOOTINFO_MAX_VAL_LEN:   maximum size in bytes of a value in the + *                         bootinfo line.  Don't forget to add space + *                         for the NUL if you need it. + * BOOTINFO_BUF_SIZE:      size in bytes of buffer that is large enough + *                         to read a /proc/bootinfo line.  The extra + *                         3 is for the " : ".  Don't forget to add + *                         space for the NUL and newline if you + *                         need them. + */ +#define BOOTINFO_MAX_NAME_LEN    32 +#define BOOTINFO_MAX_VAL_LEN    128 +#define BOOTINFO_BUF_SIZE       (BOOTINFO_MAX_NAME_LEN + \ +					3 + BOOTINFO_MAX_VAL_LEN) + +#endif + + +#if defined(__KERNEL__) +#if defined(CONFIG_BOOTINFO) + +extern struct proc_dir_entry proc_root; + +u32  bi_powerup_reason(void); +u32  bi_mbm_version(void); + + +#else /* defined(CONFIG_BOOTINFO) */ + +static inline u32 bi_powerup_reason(void) { return 0xFFFFFFFF; } +static inline u32 bi_mbm_version(void) { return 0xFFFFFFFF; } + +#endif /* !defined(CONFIG_BOOTINFO) */ +#endif /* defined(__KERNEL__) */ + +#endif diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index 17d0ae8672f..3e94af33aa6 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h @@ -16,6 +16,7 @@  #include <asm/shmparam.h>  #include <asm/cachetype.h>  #include <asm/outercache.h> +#include <asm/rodata.h>  #define CACHE_COLOUR(vaddr)	((vaddr & (SHMLBA - 1)) >> PAGE_SHIFT) diff --git a/arch/arm/include/asm/fiq_debugger.h b/arch/arm/include/asm/fiq_debugger.h new file mode 100644 index 00000000000..4d274883ba6 --- /dev/null +++ b/arch/arm/include/asm/fiq_debugger.h @@ -0,0 +1,64 @@ +/* + * arch/arm/include/asm/fiq_debugger.h + * + * Copyright (C) 2010 Google, Inc. + * Author: Colin Cross <ccross@android.com> + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + */ + +#ifndef _ARCH_ARM_MACH_TEGRA_FIQ_DEBUGGER_H_ +#define _ARCH_ARM_MACH_TEGRA_FIQ_DEBUGGER_H_ + +#include <linux/serial_core.h> + +#define FIQ_DEBUGGER_NO_CHAR NO_POLL_CHAR +#define FIQ_DEBUGGER_BREAK 0x00ff0100 + +#define FIQ_DEBUGGER_FIQ_IRQ_NAME	"fiq" +#define FIQ_DEBUGGER_SIGNAL_IRQ_NAME	"signal" +#define FIQ_DEBUGGER_WAKEUP_IRQ_NAME	"wakeup" + +/** + * struct fiq_debugger_pdata - fiq debugger platform data + * @uart_resume:	used to restore uart state right before enabling + *			the fiq. + * @uart_enable:	Do the work necessary to communicate with the uart + *			hw (enable clocks, etc.). This must be ref-counted. + * @uart_disable:	Do the work necessary to disable the uart hw + *			(disable clocks, etc.). This must be ref-counted. + * @uart_dev_suspend:	called during PM suspend, generally not needed + *			for real fiq mode debugger. + * @uart_dev_resume:	called during PM resume, generally not needed + *			for real fiq mode debugger. + */ +struct fiq_debugger_pdata { +	int (*uart_init)(struct platform_device *pdev); +	void (*uart_free)(struct platform_device *pdev); +	int (*uart_resume)(struct platform_device *pdev); +	int (*uart_getc)(struct platform_device *pdev); +	void (*uart_putc)(struct platform_device *pdev, unsigned int c); +	void (*uart_flush)(struct platform_device *pdev); +	void (*uart_enable)(struct platform_device *pdev); +	void (*uart_disable)(struct platform_device *pdev); + +	int (*uart_dev_suspend)(struct platform_device *pdev); +	int (*uart_dev_resume)(struct platform_device *pdev); + +	void (*fiq_enable)(struct platform_device *pdev, unsigned int fiq, +								bool enable); +	void (*fiq_ack)(struct platform_device *pdev, unsigned int fiq); + +	void (*force_irq)(struct platform_device *pdev, unsigned int irq); +	void (*force_irq_ack)(struct platform_device *pdev, unsigned int irq); +}; + +#endif diff --git a/arch/arm/include/asm/fiq_glue.h b/arch/arm/include/asm/fiq_glue.h new file mode 100644 index 00000000000..a9e244f9f19 --- /dev/null +++ b/arch/arm/include/asm/fiq_glue.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2010 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + */ + +#ifndef __ASM_FIQ_GLUE_H +#define __ASM_FIQ_GLUE_H + +struct fiq_glue_handler { +	void (*fiq)(struct fiq_glue_handler *h, void *regs, void *svc_sp); +	void (*resume)(struct fiq_glue_handler *h); +}; +typedef void (*fiq_return_handler_t)(void); + +int fiq_glue_register_handler(struct fiq_glue_handler *handler); +int fiq_glue_set_return_handler(fiq_return_handler_t fiq_return); +int fiq_glue_clear_return_handler(fiq_return_handler_t fiq_return); + +#ifdef CONFIG_FIQ_GLUE +void fiq_glue_resume(void); +#else +static inline void fiq_glue_resume(void) {} +#endif + +#endif diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h index 2740c2a2df6..3d7351c844a 100644 --- a/arch/arm/include/asm/hardirq.h +++ b/arch/arm/include/asm/hardirq.h @@ -5,7 +5,7 @@  #include <linux/threads.h>  #include <asm/irq.h> -#define NR_IPI	6 +#define NR_IPI	7  typedef struct {  	unsigned int __softirq_pending; diff --git a/arch/arm/include/asm/hardware/cache-l2x0.h b/arch/arm/include/asm/hardware/cache-l2x0.h index 3b2c40b5bfa..0ca0f5a7c84 100644 --- a/arch/arm/include/asm/hardware/cache-l2x0.h +++ b/arch/arm/include/asm/hardware/cache-l2x0.h @@ -66,6 +66,7 @@  #define   L2X0_STNDBY_MODE_EN		(1 << 0)  /* Registers shifts and masks */ +#define L2X0_CACHE_ID_REV_MASK		(0x3f)  #define L2X0_CACHE_ID_PART_MASK		(0xf << 6)  #define L2X0_CACHE_ID_PART_L210		(1 << 6)  #define L2X0_CACHE_ID_PART_L310		(3 << 6) @@ -106,6 +107,8 @@  #define L2X0_WAY_SIZE_SHIFT		3 +#define REV_PL310_R2P0				4 +  #ifndef __ASSEMBLY__  extern void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask);  #if defined(CONFIG_CACHE_L2X0) && defined(CONFIG_OF) diff --git a/arch/arm/include/asm/hardware/coresight.h b/arch/arm/include/asm/hardware/coresight.h index 0cf7a6b842f..4aee45da6d5 100644 --- a/arch/arm/include/asm/hardware/coresight.h +++ b/arch/arm/include/asm/hardware/coresight.h @@ -17,15 +17,23 @@  #define TRACER_ACCESSED_BIT	0  #define TRACER_RUNNING_BIT	1  #define TRACER_CYCLE_ACC_BIT	2 +#define TRACER_TRACE_DATA_BIT	3 +#define TRACER_TIMESTAMP_BIT	4 +#define TRACER_BRANCHOUTPUT_BIT	5 +#define TRACER_RETURN_STACK_BIT	6  #define TRACER_ACCESSED		BIT(TRACER_ACCESSED_BIT)  #define TRACER_RUNNING		BIT(TRACER_RUNNING_BIT)  #define TRACER_CYCLE_ACC	BIT(TRACER_CYCLE_ACC_BIT) +#define TRACER_TRACE_DATA	BIT(TRACER_TRACE_DATA_BIT) +#define TRACER_TIMESTAMP	BIT(TRACER_TIMESTAMP_BIT) +#define TRACER_BRANCHOUTPUT	BIT(TRACER_BRANCHOUTPUT_BIT) +#define TRACER_RETURN_STACK	BIT(TRACER_RETURN_STACK_BIT)  #define TRACER_TIMEOUT 10000 -#define etm_writel(t, v, x) \ -	(__raw_writel((v), (t)->etm_regs + (x))) -#define etm_readl(t, x) (__raw_readl((t)->etm_regs + (x))) +#define etm_writel(t, id, v, x) \ +	(__raw_writel((v), (t)->etm_regs[(id)] + (x))) +#define etm_readl(t, id, x) (__raw_readl((t)->etm_regs[(id)] + (x)))  /* CoreSight Management Registers */  #define CSMR_LOCKACCESS 0xfb0 @@ -43,7 +51,7 @@  #define ETMCTRL_POWERDOWN	1  #define ETMCTRL_PROGRAM		(1 << 10)  #define ETMCTRL_PORTSEL		(1 << 11) -#define ETMCTRL_DO_CONTEXTID	(3 << 14) +#define ETMCTRL_CONTEXTIDSIZE(x) (((x) & 3) << 14)  #define ETMCTRL_PORTMASK1	(7 << 4)  #define ETMCTRL_PORTMASK2	(1 << 21)  #define ETMCTRL_PORTMASK	(ETMCTRL_PORTMASK1 | ETMCTRL_PORTMASK2) @@ -55,9 +63,12 @@  #define ETMCTRL_DATA_DO_BOTH	(ETMCTRL_DATA_DO_DATA | ETMCTRL_DATA_DO_ADDR)  #define ETMCTRL_BRANCH_OUTPUT	(1 << 8)  #define ETMCTRL_CYCLEACCURATE	(1 << 12) +#define ETMCTRL_TIMESTAMP_EN	(1 << 28) +#define ETMCTRL_RETURN_STACK_EN	(1 << 29)  /* ETM configuration code register */  #define ETMR_CONFCODE		(0x04) +#define ETMCCR_ETMIDR_PRESENT	BIT(31)  /* ETM trace start/stop resource control register */  #define ETMR_TRACESSCTRL	(0x18) @@ -113,10 +124,25 @@  #define ETMR_TRACEENCTRL	0x24  #define ETMTE_INCLEXCL		BIT(24)  #define ETMR_TRACEENEVT		0x20 -#define ETMCTRL_OPTS		(ETMCTRL_DO_CPRT | \ -				ETMCTRL_DATA_DO_ADDR | \ -				ETMCTRL_BRANCH_OUTPUT | \ -				ETMCTRL_DO_CONTEXTID) + +#define ETMR_VIEWDATAEVT	0x30 +#define ETMR_VIEWDATACTRL1	0x34 +#define ETMR_VIEWDATACTRL2	0x38 +#define ETMR_VIEWDATACTRL3	0x3c +#define ETMVDC3_EXCLONLY	BIT(16) + +#define ETMCTRL_OPTS		(ETMCTRL_DO_CPRT) + +#define ETMR_ID			0x1e4 +#define ETMIDR_VERSION(x)	(((x) >> 4) & 0xff) +#define ETMIDR_VERSION_3_1	0x21 +#define ETMIDR_VERSION_PFT_1_0	0x30 + +#define ETMR_CCE		0x1e8 +#define ETMCCER_RETURN_STACK_IMPLEMENTED	BIT(23) +#define ETMCCER_TIMESTAMPING_IMPLEMENTED	BIT(22) + +#define ETMR_TRACEIDR		0x200  /* ETM management registers, "ETM Architecture", 3.5.24 */  #define ETMMR_OSLAR	0x300 @@ -140,14 +166,16 @@  #define ETBFF_TRIGIN		BIT(8)  #define ETBFF_TRIGEVT		BIT(9)  #define ETBFF_TRIGFL		BIT(10) +#define ETBFF_STOPFL		BIT(12)  #define etb_writel(t, v, x) \  	(__raw_writel((v), (t)->etb_regs + (x)))  #define etb_readl(t, x) (__raw_readl((t)->etb_regs + (x))) -#define etm_lock(t) do { etm_writel((t), 0, CSMR_LOCKACCESS); } while (0) -#define etm_unlock(t) \ -	do { etm_writel((t), CS_LAR_KEY, CSMR_LOCKACCESS); } while (0) +#define etm_lock(t, id) \ +	do { etm_writel((t), (id), 0, CSMR_LOCKACCESS); } while (0) +#define etm_unlock(t, id) \ +	do { etm_writel((t), (id), CS_LAR_KEY, CSMR_LOCKACCESS); } while (0)  #define etb_lock(t) do { etb_writel((t), 0, CSMR_LOCKACCESS); } while (0)  #define etb_unlock(t) \ diff --git a/arch/arm/include/asm/irq.h b/arch/arm/include/asm/irq.h index 53c15dec7af..809203a4b71 100644 --- a/arch/arm/include/asm/irq.h +++ b/arch/arm/include/asm/irq.h @@ -35,6 +35,9 @@ extern void (*handle_arch_irq)(struct pt_regs *);  extern void set_handle_irq(void (*handle_irq)(struct pt_regs *));  #endif +void arch_trigger_all_cpu_backtrace(void); +#define arch_trigger_all_cpu_backtrace arch_trigger_all_cpu_backtrace +  #endif  #endif diff --git a/arch/arm/include/asm/mach/mmc.h b/arch/arm/include/asm/mach/mmc.h new file mode 100644 index 00000000000..bca864ac945 --- /dev/null +++ b/arch/arm/include/asm/mach/mmc.h @@ -0,0 +1,28 @@ +/* + *  arch/arm/include/asm/mach/mmc.h + */ +#ifndef ASMARM_MACH_MMC_H +#define ASMARM_MACH_MMC_H + +#include <linux/mmc/host.h> +#include <linux/mmc/card.h> +#include <linux/mmc/sdio_func.h> + +struct embedded_sdio_data { +        struct sdio_cis cis; +        struct sdio_cccr cccr; +        struct sdio_embedded_func *funcs; +        int num_funcs; +}; + +struct mmc_platform_data { +	unsigned int ocr_mask;			/* available voltages */ +	int built_in;				/* built-in device flag */ +	int card_present;			/* card detect state */ +	u32 (*translate_vdd)(struct device *, unsigned int); +	unsigned int (*status)(struct device *); +	struct embedded_sdio_data *embedded_sdio; +	int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id); +}; + +#endif diff --git a/arch/arm/include/asm/rodata.h b/arch/arm/include/asm/rodata.h new file mode 100644 index 00000000000..8c8add87bbc --- /dev/null +++ b/arch/arm/include/asm/rodata.h @@ -0,0 +1,32 @@ +/* + *  arch/arm/include/asm/rodata.h + * + *  Copyright (C) 2011 Google, Inc. + * + *  Author: Colin Cross <ccross@android.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#ifndef _ASMARM_RODATA_H +#define _ASMARM_RODATA_H + +#ifndef __ASSEMBLY__ + +#ifdef CONFIG_DEBUG_RODATA + +int set_memory_rw(unsigned long virt, int numpages); +int set_memory_ro(unsigned long virt, int numpages); + +void mark_rodata_ro(void); +void set_kernel_text_rw(void); +void set_kernel_text_ro(void); +#else +static inline void set_kernel_text_rw(void) { } +static inline void set_kernel_text_ro(void) { } +#endif + +#endif + +#endif diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h index d3a22bebe6c..c5aa088c0a8 100644 --- a/arch/arm/include/asm/smp.h +++ b/arch/arm/include/asm/smp.h @@ -81,6 +81,8 @@ extern void arch_send_call_function_single_ipi(int cpu);  extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);  extern void arch_send_wakeup_ipi_mask(const struct cpumask *mask); +extern void smp_send_all_cpu_backtrace(void); +  struct smp_operations {  #ifdef CONFIG_SMP  	/* diff --git a/arch/arm/include/uapi/asm/setup.h b/arch/arm/include/uapi/asm/setup.h index 979ff401640..fc6f9ea5fba 100644 --- a/arch/arm/include/uapi/asm/setup.h +++ b/arch/arm/include/uapi/asm/setup.h @@ -143,6 +143,12 @@ struct tag_memclk {  	__u32 fmemclk;  }; +#define ATAG_FLAT_DEV_TREE_ADDRESS 0xf100040A +struct tag_flat_dev_tree_address { +	u32 address; +	u32 size; +}; +  struct tag {  	struct tag_header hdr;  	union { @@ -165,6 +171,8 @@ struct tag {  		 * DC21285 specific  		 */  		struct tag_memclk	memclk; + +		struct tag_flat_dev_tree_address flat_dev_tree;  	} u;  }; diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index 5f3338eacad..690fb643389 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile @@ -59,6 +59,7 @@ obj-$(CONFIG_KGDB)		+= kgdb.o  obj-$(CONFIG_ARM_UNWIND)	+= unwind.o  obj-$(CONFIG_HAVE_TCM)		+= tcm.o  obj-$(CONFIG_OF)		+= devtree.o +obj-$(CONFIG_BOOTINFO)		+= bootinfo.o  obj-$(CONFIG_CRASH_DUMP)	+= crash_dump.o  obj-$(CONFIG_SWP_EMULATE)	+= swp_emulate.o  CFLAGS_swp_emulate.o		:= -Wa,-march=armv7-a diff --git a/arch/arm/kernel/atags.h b/arch/arm/kernel/atags.h index 9edc9692332..dc34649d87d 100644 --- a/arch/arm/kernel/atags.h +++ b/arch/arm/kernel/atags.h @@ -6,6 +6,8 @@ static inline void save_atags(struct tag *tags) { }  void convert_to_tag_list(struct tag *tags); +extern u32 flat_dev_tree_address; /* 32bit physical address */ +  #ifdef CONFIG_ATAGS  struct machine_desc *setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr);  #else diff --git a/arch/arm/kernel/atags_parse.c b/arch/arm/kernel/atags_parse.c index 14512e6931d..44b65f47500 100644 --- a/arch/arm/kernel/atags_parse.c +++ b/arch/arm/kernel/atags_parse.c @@ -139,6 +139,29 @@ static int __init parse_tag_cmdline(const struct tag *tag)  __tagtable(ATAG_CMDLINE, parse_tag_cmdline); +u32 flat_dev_tree_address; /* 32bit physical address */ + +#ifdef CONFIG_MACH_MINNOW +/* process Motorola device tree */ +static int __init parse_tag_flat_dev_tree_address(const struct tag *tag) +{ +	printk(KERN_INFO "flat_dev_tree tag == 0x%08x\n", +		ATAG_FLAT_DEV_TREE_ADDRESS); +	printk(KERN_INFO "flat_dev_tree_address (phys) == 0x%08x\n", +		tag->u.flat_dev_tree.address); +	printk(KERN_INFO "flat_dev_tree_address (virt) == 0x%p\n", +		phys_to_virt(tag->u.flat_dev_tree.address)); +	printk(KERN_INFO "flat_dev_tree_size == 0x%08x\n", +		tag->u.flat_dev_tree.size); + +	flat_dev_tree_address = tag->u.flat_dev_tree.address; +	return 0; +} + +__tagtable(ATAG_FLAT_DEV_TREE_ADDRESS, parse_tag_flat_dev_tree_address); + +#endif /* CONFIG_MACH_MINNOW */ +  /*   * Scan the tag table for this tag, and call its parse function.   * The tag table is built by the linker from all the __tagtable diff --git a/arch/arm/kernel/bootinfo.c b/arch/arm/kernel/bootinfo.c new file mode 100644 index 00000000000..52a52a4f121 --- /dev/null +++ b/arch/arm/kernel/bootinfo.c @@ -0,0 +1,206 @@ +/* + * Copyright (C) 2009 Motorola, Inc. + * Copyright (C) 2012 - 2014 Motorola Mobility. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + * + */ + +#include <linux/module.h> +#include <linux/proc_fs.h> +#include <linux/seq_file.h> +#include <linux/of.h> +#include <asm/bootinfo.h> +#include <linux/pstore.h> + +#define EMIT_BOOTINFO_LASTKMSG(buf, strname, fmt, name) \ +		do { \ +			snprintf(buf, sizeof(buf), strname ": " fmt "\n", \ +					bi_##name()); \ +			pstore_annotate(buf); \ +		} while (0) + +/* + * powerup_reason contains the powerup reason provided by the ATAGs when + * the machine boots. + * + * Exported symbols: + * bi_powerup_reason()             -- returns the powerup reason + */ + +#ifdef CONFIG_OF +static void of_powerup(u32 *pwr) +{ +	struct device_node *n = of_find_node_by_path("/chosen"); + +	of_property_read_u32(n, "mmi,powerup_reason", pwr); +	of_node_put(n); +} +#else +static inline void of_powerup(u32 *pwr) { } +#endif + +u32 bi_powerup_reason(void) +{ +	u32 reason = PU_REASON_INVALID; + +	of_powerup(&reason); +	return reason; +} +EXPORT_SYMBOL(bi_powerup_reason); + + +/* + * mbm_version contains the MBM version. + * mbm_loader_version contains the MBM loader version. + * mbm_version and mbm_loader_version default to 0 if they are + * not set. + * + * Exported symbols: + * bi_mbm_version()                -- returns the MBM version + */ +#ifdef CONFIG_OF +static void __init of_mbmver(u32 *ver) +{ +	struct device_node *n = of_find_node_by_path("/chosen"); + +	of_property_read_u32(n, "mmi,mbmversion", ver); +	of_node_put(n); +} +#else +static inline void of_mbmver(u32 *ver) { } +#endif + +u32 bi_mbm_version(void) +{ +	u32 version = 0xFFFFFFFF; + +	of_mbmver(&version); +	return version; +} +EXPORT_SYMBOL(bi_mbm_version); + +#ifdef CONFIG_OF +static void __init of_hwrev(u32 *revision) +{ +	struct device_node *n = of_find_node_by_path("/chosen"); + +	of_property_read_u32(n, "linux,hwrev", revision); +	of_node_put(n); +} +#else +static inline void of_hwrev(u32 *ver) { } +#endif + +static u32 bi_hwrev(void) +{ +	u32 rev = 0xFFFFFFFF; +	of_hwrev(&rev); +	return rev; +} + +#ifdef CONFIG_OF +static void __init of_serial(u32 *serial_h, u32 *serial_l) +{ +	struct device_node *n = of_find_node_by_path("/chosen"); + +	of_property_read_u32(n, "linux,seriallow", serial_l); +	of_property_read_u32(n, "linux,serialhigh", serial_h); +	of_node_put(n); +} +#else +static inline void of_serial(u32 *serial_h, u32 *serial_l) { } +#endif + +static u64 bi_serial(void) +{ +	u32 serial_high = 0xFFFFFFFF; +	u32 serial_low = 0xFFFFFFFF; + +	of_serial(&serial_high, &serial_low); +	return ((u64)serial_high << 32) | (u64)serial_low; +} + +#define BOOTREASON_MAX_LEN 64 +static char bootreason[BOOTREASON_MAX_LEN + 1]; +int __init board_bootreason_init(char *s) +{ +	strncpy(bootreason, s, BOOTREASON_MAX_LEN); +	bootreason[BOOTREASON_MAX_LEN] = '\0'; +	return 1; +} +__setup("androidboot.bootreason=", board_bootreason_init); + +const char *bi_bootreason(void) +{ +	return bootreason; +} +EXPORT_SYMBOL(bi_bootreason); + +static void bootinfo_annotate_lastkmsg(void) +{ +	char buf[BOOTREASON_MAX_LEN]; +	pstore_annotate("Boot info:\n"); +	EMIT_BOOTINFO_LASTKMSG(buf, "Last boot reason", "%s", bootreason); +} + +/* get_bootinfo fills in the /proc/bootinfo information. + * We currently only have the powerup reason, mbm_version, serial + * and hwrevision. + */ +static int get_bootinfo(struct seq_file *m, void *v) +{ +	seq_printf(m, "SERIAL : 0x%llx\n", bi_serial()); +	seq_printf(m, "HW_REV : 0x%04x\n", bi_hwrev()); +	seq_printf(m, "POWERUPREASON : 0x%08x\n", bi_powerup_reason()); +	seq_printf(m, "MBM_VERSION : 0x%08x\n", bi_mbm_version()); +	seq_printf(m, "Last boot reason : %s \n", bootreason); +	return 0; +} +static int  bootinfo_open(struct inode *inode, struct  file *file) +{ +	return single_open(file, get_bootinfo, NULL); +} + +static const struct file_operations bootinfo_fops = { +	.owner = THIS_MODULE, +	.open = bootinfo_open, +	.read = seq_read, +	.llseek = seq_lseek, +	.release = single_release, +}; + +static struct proc_dir_entry *proc_bootinfo; + +static int __init bootinfo_init_module(void) +{ +	proc_bootinfo = &proc_root; +	proc_create("bootinfo", 0, NULL, &bootinfo_fops); +	bootinfo_annotate_lastkmsg(); +	return 0; +} + +void __exit bootinfo_cleanup_module(void) +{ +	if (proc_bootinfo) { +		remove_proc_entry("bootinfo", proc_bootinfo); +		proc_bootinfo = NULL; +	} +} + +module_init(bootinfo_init_module); +module_exit(bootinfo_cleanup_module); + +MODULE_AUTHOR("MOTOROLA"); diff --git a/arch/arm/kernel/etm.c b/arch/arm/kernel/etm.c index 8ff0ecdc637..7db3247b218 100644 --- a/arch/arm/kernel/etm.c +++ b/arch/arm/kernel/etm.c @@ -15,6 +15,7 @@  #include <linux/init.h>  #include <linux/types.h>  #include <linux/io.h> +#include <linux/slab.h>  #include <linux/sysrq.h>  #include <linux/device.h>  #include <linux/clk.h> @@ -37,26 +38,37 @@ MODULE_AUTHOR("Alexander Shishkin");  struct tracectx {  	unsigned int	etb_bufsz;  	void __iomem	*etb_regs; -	void __iomem	*etm_regs; +	void __iomem	**etm_regs; +	int		etm_regs_count;  	unsigned long	flags;  	int		ncmppairs;  	int		etm_portsz; +	int		etm_contextid_size; +	u32		etb_fc; +	unsigned long	range_start; +	unsigned long	range_end; +	unsigned long	data_range_start; +	unsigned long	data_range_end; +	bool		dump_initial_etb;  	struct device	*dev;  	struct clk	*emu_clk;  	struct mutex	mutex;  }; -static struct tracectx tracer; +static struct tracectx tracer = { +	.range_start = (unsigned long)_stext, +	.range_end = (unsigned long)_etext, +};  static inline bool trace_isrunning(struct tracectx *t)  {  	return !!(t->flags & TRACER_RUNNING);  } -static int etm_setup_address_range(struct tracectx *t, int n, +static int etm_setup_address_range(struct tracectx *t, int id, int n,  		unsigned long start, unsigned long end, int exclude, int data)  { -	u32 flags = ETMAAT_ARM | ETMAAT_IGNCONTEXTID | ETMAAT_NSONLY | \ +	u32 flags = ETMAAT_ARM | ETMAAT_IGNCONTEXTID | ETMAAT_IGNSECURITY |  		    ETMAAT_NOVALCMP;  	if (n < 1 || n > t->ncmppairs) @@ -72,95 +84,185 @@ static int etm_setup_address_range(struct tracectx *t, int n,  		flags |= ETMAAT_IEXEC;  	/* first comparator for the range */ -	etm_writel(t, flags, ETMR_COMP_ACC_TYPE(n * 2)); -	etm_writel(t, start, ETMR_COMP_VAL(n * 2)); +	etm_writel(t, id, flags, ETMR_COMP_ACC_TYPE(n * 2)); +	etm_writel(t, id, start, ETMR_COMP_VAL(n * 2));  	/* second comparator is right next to it */ -	etm_writel(t, flags, ETMR_COMP_ACC_TYPE(n * 2 + 1)); -	etm_writel(t, end, ETMR_COMP_VAL(n * 2 + 1)); +	etm_writel(t, id, flags, ETMR_COMP_ACC_TYPE(n * 2 + 1)); +	etm_writel(t, id, end, ETMR_COMP_VAL(n * 2 + 1)); -	flags = exclude ? ETMTE_INCLEXCL : 0; -	etm_writel(t, flags | (1 << n), ETMR_TRACEENCTRL); +	if (data) { +		flags = exclude ? ETMVDC3_EXCLONLY : 0; +		if (exclude) +			n += 8; +		etm_writel(t, id, flags | BIT(n), ETMR_VIEWDATACTRL3); +	} else { +		flags = exclude ? ETMTE_INCLEXCL : 0; +		etm_writel(t, id, flags | (1 << n), ETMR_TRACEENCTRL); +	}  	return 0;  } -static int trace_start(struct tracectx *t) +static int trace_start_etm(struct tracectx *t, int id)  {  	u32 v;  	unsigned long timeout = TRACER_TIMEOUT; -	etb_unlock(t); - -	etb_writel(t, 0, ETBR_FORMATTERCTRL); -	etb_writel(t, 1, ETBR_CTRL); - -	etb_lock(t); - -	/* configure etm */  	v = ETMCTRL_OPTS | ETMCTRL_PROGRAM | ETMCTRL_PORTSIZE(t->etm_portsz); +	v |= ETMCTRL_CONTEXTIDSIZE(t->etm_contextid_size);  	if (t->flags & TRACER_CYCLE_ACC)  		v |= ETMCTRL_CYCLEACCURATE; -	etm_unlock(t); +	if (t->flags & TRACER_BRANCHOUTPUT) +		v |= ETMCTRL_BRANCH_OUTPUT; -	etm_writel(t, v, ETMR_CTRL); +	if (t->flags & TRACER_TRACE_DATA) +		v |= ETMCTRL_DATA_DO_ADDR; -	while (!(etm_readl(t, ETMR_CTRL) & ETMCTRL_PROGRAM) && --timeout) +	if (t->flags & TRACER_TIMESTAMP) +		v |= ETMCTRL_TIMESTAMP_EN; + +	if (t->flags & TRACER_RETURN_STACK) +		v |= ETMCTRL_RETURN_STACK_EN; + +	etm_unlock(t, id); + +	etm_writel(t, id, v, ETMR_CTRL); + +	while (!(etm_readl(t, id, ETMR_CTRL) & ETMCTRL_PROGRAM) && --timeout)  		;  	if (!timeout) {  		dev_dbg(t->dev, "Waiting for progbit to assert timed out\n"); -		etm_lock(t); +		etm_lock(t, id);  		return -EFAULT;  	} -	etm_setup_address_range(t, 1, (unsigned long)_stext, -			(unsigned long)_etext, 0, 0); -	etm_writel(t, 0, ETMR_TRACEENCTRL2); -	etm_writel(t, 0, ETMR_TRACESSCTRL); -	etm_writel(t, 0x6f, ETMR_TRACEENEVT); +	if (t->range_start || t->range_end) +		etm_setup_address_range(t, id, 1, +					t->range_start, t->range_end, 0, 0); +	else +		etm_writel(t, id, ETMTE_INCLEXCL, ETMR_TRACEENCTRL); + +	etm_writel(t, id, 0, ETMR_TRACEENCTRL2); +	etm_writel(t, id, 0, ETMR_TRACESSCTRL); +	etm_writel(t, id, 0x6f, ETMR_TRACEENEVT); + +	etm_writel(t, id, 0, ETMR_VIEWDATACTRL1); +	etm_writel(t, id, 0, ETMR_VIEWDATACTRL2); + +	if (t->data_range_start || t->data_range_end) +		etm_setup_address_range(t, id, 2, t->data_range_start, +					t->data_range_end, 0, 1); +	else +		etm_writel(t, id, ETMVDC3_EXCLONLY, ETMR_VIEWDATACTRL3); + +	etm_writel(t, id, 0x6f, ETMR_VIEWDATAEVT);  	v &= ~ETMCTRL_PROGRAM;  	v |= ETMCTRL_PORTSEL; -	etm_writel(t, v, ETMR_CTRL); +	etm_writel(t, id, v, ETMR_CTRL);  	timeout = TRACER_TIMEOUT; -	while (etm_readl(t, ETMR_CTRL) & ETMCTRL_PROGRAM && --timeout) +	while (etm_readl(t, id, ETMR_CTRL) & ETMCTRL_PROGRAM && --timeout)  		;  	if (!timeout) {  		dev_dbg(t->dev, "Waiting for progbit to deassert timed out\n"); -		etm_lock(t); +		etm_lock(t, id);  		return -EFAULT;  	} -	etm_lock(t); +	etm_lock(t, id); +	return 0; +} + +static int trace_start(struct tracectx *t) +{ +	int ret; +	int id; +	u32 etb_fc = t->etb_fc; + +	etb_unlock(t); + +	t->dump_initial_etb = false; +	etb_writel(t, 0, ETBR_WRITEADDR); +	etb_writel(t, etb_fc, ETBR_FORMATTERCTRL); +	etb_writel(t, 1, ETBR_CTRL); + +	etb_lock(t); + +	/* configure etm(s) */ +	for (id = 0; id < t->etm_regs_count; id++) { +		ret = trace_start_etm(t, id); +		if (ret) +			return ret; +	}  	t->flags |= TRACER_RUNNING;  	return 0;  } -static int trace_stop(struct tracectx *t) +static int trace_stop_etm(struct tracectx *t, int id)  {  	unsigned long timeout = TRACER_TIMEOUT; -	etm_unlock(t); +	etm_unlock(t, id); -	etm_writel(t, 0x440, ETMR_CTRL); -	while (!(etm_readl(t, ETMR_CTRL) & ETMCTRL_PROGRAM) && --timeout) +	etm_writel(t, id, 0x440, ETMR_CTRL); +	while (!(etm_readl(t, id, ETMR_CTRL) & ETMCTRL_PROGRAM) && --timeout)  		;  	if (!timeout) { -		dev_dbg(t->dev, "Waiting for progbit to assert timed out\n"); -		etm_lock(t); +		dev_err(t->dev, +			"etm%d: Waiting for progbit to assert timed out\n", +			id); +		etm_lock(t, id);  		return -EFAULT;  	} -	etm_lock(t); +	etm_lock(t, id); +	return 0; +} + +static int trace_power_down_etm(struct tracectx *t, int id) +{ +	unsigned long timeout = TRACER_TIMEOUT; +	etm_unlock(t, id); +	while (!(etm_readl(t, id, ETMR_STATUS) & ETMST_PROGBIT) && --timeout) +		; +	if (!timeout) { +		dev_err(t->dev, "etm%d: Waiting for status progbit to assert timed out\n", +			id); +		etm_lock(t, id); +		return -EFAULT; +	} + +	etm_writel(t, id, 0x441, ETMR_CTRL); + +	etm_lock(t, id); +	return 0; +} + +static int trace_stop(struct tracectx *t) +{ +	int id; +	unsigned long timeout = TRACER_TIMEOUT; +	u32 etb_fc = t->etb_fc; + +	for (id = 0; id < t->etm_regs_count; id++) +		trace_stop_etm(t, id); + +	for (id = 0; id < t->etm_regs_count; id++) +		trace_power_down_etm(t, id);  	etb_unlock(t); -	etb_writel(t, ETBFF_MANUAL_FLUSH, ETBR_FORMATTERCTRL); +	if (etb_fc) { +		etb_fc |= ETBFF_STOPFL; +		etb_writel(t, t->etb_fc, ETBR_FORMATTERCTRL); +	} +	etb_writel(t, etb_fc | ETBFF_MANUAL_FLUSH, ETBR_FORMATTERCTRL);  	timeout = TRACER_TIMEOUT;  	while (etb_readl(t, ETBR_FORMATTERCTRL) & @@ -185,24 +287,15 @@ static int trace_stop(struct tracectx *t)  static int etb_getdatalen(struct tracectx *t)  {  	u32 v; -	int rp, wp; +	int wp;  	v = etb_readl(t, ETBR_STATUS);  	if (v & 1)  		return t->etb_bufsz; -	rp = etb_readl(t, ETBR_READADDR);  	wp = etb_readl(t, ETBR_WRITEADDR); - -	if (rp > wp) { -		etb_writel(t, 0, ETBR_READADDR); -		etb_writel(t, 0, ETBR_WRITEADDR); - -		return 0; -	} - -	return wp - rp; +	return wp;  }  /* sysrq+v will always stop the running trace and leave it at that */ @@ -235,21 +328,18 @@ static void etm_dump(void)  		printk("%08x", cpu_to_be32(etb_readl(t, ETBR_READMEM)));  	printk(KERN_INFO "\n--- ETB buffer end ---\n"); -	/* deassert the overflow bit */ -	etb_writel(t, 1, ETBR_CTRL); -	etb_writel(t, 0, ETBR_CTRL); - -	etb_writel(t, 0, ETBR_TRIGGERCOUNT); -	etb_writel(t, 0, ETBR_READADDR); -	etb_writel(t, 0, ETBR_WRITEADDR); -  	etb_lock(t);  }  static void sysrq_etm_dump(int key)  { +	if (!mutex_trylock(&tracer.mutex)) { +		printk(KERN_INFO "Tracing hardware busy\n"); +		return; +	}  	dev_dbg(tracer.dev, "Dumping ETB buffer\n");  	etm_dump(); +	mutex_unlock(&tracer.mutex);  }  static struct sysrq_key_op sysrq_etm_op = { @@ -276,6 +366,10 @@ static ssize_t etb_read(struct file *file, char __user *data,  	struct tracectx *t = file->private_data;  	u32 first = 0;  	u32 *buf; +	int wpos; +	int skip; +	long wlength; +	loff_t pos = *ppos;  	mutex_lock(&t->mutex); @@ -287,31 +381,39 @@ static ssize_t etb_read(struct file *file, char __user *data,  	etb_unlock(t);  	total = etb_getdatalen(t); +	if (total == 0 && t->dump_initial_etb) +		total = t->etb_bufsz;  	if (total == t->etb_bufsz)  		first = etb_readl(t, ETBR_WRITEADDR); +	if (pos > total * 4) { +		skip = 0; +		wpos = total; +	} else { +		skip = (int)pos % 4; +		wpos = (int)pos / 4; +	} +	total -= wpos; +	first = (first + wpos) % t->etb_bufsz; +  	etb_writel(t, first, ETBR_READADDR); -	length = min(total * 4, (int)len); -	buf = vmalloc(length); +	wlength = min(total, DIV_ROUND_UP(skip + (int)len, 4)); +	length = min(total * 4 - skip, (int)len); +	buf = vmalloc(wlength * 4); -	dev_dbg(t->dev, "ETB buffer length: %d\n", total); +	dev_dbg(t->dev, "ETB read %ld bytes to %lld from %ld words at %d\n", +		length, pos, wlength, first); +	dev_dbg(t->dev, "ETB buffer length: %d\n", total + wpos);  	dev_dbg(t->dev, "ETB status reg: %x\n", etb_readl(t, ETBR_STATUS)); -	for (i = 0; i < length / 4; i++) +	for (i = 0; i < wlength; i++)  		buf[i] = etb_readl(t, ETBR_READMEM); -	/* the only way to deassert overflow bit in ETB status is this */ -	etb_writel(t, 1, ETBR_CTRL); -	etb_writel(t, 0, ETBR_CTRL); - -	etb_writel(t, 0, ETBR_WRITEADDR); -	etb_writel(t, 0, ETBR_READADDR); -	etb_writel(t, 0, ETBR_TRIGGERCOUNT); -  	etb_lock(t); -	length -= copy_to_user(data, buf, length); +	length -= copy_to_user(data, (u8 *)buf + skip, length);  	vfree(buf); +	*ppos = pos + length;  out:  	mutex_unlock(&t->mutex); @@ -348,28 +450,17 @@ static int etb_probe(struct amba_device *dev, const struct amba_id *id)  	if (ret)  		goto out; +	mutex_lock(&t->mutex);  	t->etb_regs = ioremap_nocache(dev->res.start, resource_size(&dev->res));  	if (!t->etb_regs) {  		ret = -ENOMEM;  		goto out_release;  	} +	t->dev = &dev->dev; +	t->dump_initial_etb = true;  	amba_set_drvdata(dev, t); -	etb_miscdev.parent = &dev->dev; - -	ret = misc_register(&etb_miscdev); -	if (ret) -		goto out_unmap; - -	t->emu_clk = clk_get(&dev->dev, "emu_src_ck"); -	if (IS_ERR(t->emu_clk)) { -		dev_dbg(&dev->dev, "Failed to obtain emu_src_ck.\n"); -		return -EFAULT; -	} - -	clk_enable(t->emu_clk); -  	etb_unlock(t);  	t->etb_bufsz = etb_readl(t, ETBR_DEPTH);  	dev_dbg(&dev->dev, "Size: %x\n", t->etb_bufsz); @@ -378,6 +469,20 @@ static int etb_probe(struct amba_device *dev, const struct amba_id *id)  	etb_writel(t, 0, ETBR_CTRL);  	etb_writel(t, 0x1000, ETBR_FORMATTERCTRL);  	etb_lock(t); +	mutex_unlock(&t->mutex); + +	etb_miscdev.parent = &dev->dev; + +	ret = misc_register(&etb_miscdev); +	if (ret) +		goto out_unmap; + +	/* Get optional clock. Currently used to select clock source on omap3 */ +	t->emu_clk = clk_get(&dev->dev, "emu_src_ck"); +	if (IS_ERR(t->emu_clk)) +		dev_dbg(&dev->dev, "Failed to obtain emu_src_ck.\n"); +	else +		clk_enable(t->emu_clk);  	dev_dbg(&dev->dev, "ETB AMBA driver initialized.\n"); @@ -385,10 +490,13 @@ out:  	return ret;  out_unmap: +	mutex_lock(&t->mutex);  	amba_set_drvdata(dev, NULL);  	iounmap(t->etb_regs); +	t->etb_regs = NULL;  out_release: +	mutex_unlock(&t->mutex);  	amba_release_regions(dev);  	return ret; @@ -403,8 +511,10 @@ static int etb_remove(struct amba_device *dev)  	iounmap(t->etb_regs);  	t->etb_regs = NULL; -	clk_disable(t->emu_clk); -	clk_put(t->emu_clk); +	if (!IS_ERR(t->emu_clk)) { +		clk_disable(t->emu_clk); +		clk_put(t->emu_clk); +	}  	amba_release_regions(dev); @@ -448,7 +558,10 @@ static ssize_t trace_running_store(struct kobject *kobj,  		return -EINVAL;  	mutex_lock(&tracer.mutex); -	ret = value ? trace_start(&tracer) : trace_stop(&tracer); +	if (!tracer.etb_regs) +		ret = -ENODEV; +	else +		ret = value ? trace_start(&tracer) : trace_stop(&tracer);  	mutex_unlock(&tracer.mutex);  	return ret ? : n; @@ -463,36 +576,50 @@ static ssize_t trace_info_show(struct kobject *kobj,  {  	u32 etb_wa, etb_ra, etb_st, etb_fc, etm_ctrl, etm_st;  	int datalen; +	int id; +	int ret; -	etb_unlock(&tracer); -	datalen = etb_getdatalen(&tracer); -	etb_wa = etb_readl(&tracer, ETBR_WRITEADDR); -	etb_ra = etb_readl(&tracer, ETBR_READADDR); -	etb_st = etb_readl(&tracer, ETBR_STATUS); -	etb_fc = etb_readl(&tracer, ETBR_FORMATTERCTRL); -	etb_lock(&tracer); - -	etm_unlock(&tracer); -	etm_ctrl = etm_readl(&tracer, ETMR_CTRL); -	etm_st = etm_readl(&tracer, ETMR_STATUS); -	etm_lock(&tracer); +	mutex_lock(&tracer.mutex); +	if (tracer.etb_regs) { +		etb_unlock(&tracer); +		datalen = etb_getdatalen(&tracer); +		etb_wa = etb_readl(&tracer, ETBR_WRITEADDR); +		etb_ra = etb_readl(&tracer, ETBR_READADDR); +		etb_st = etb_readl(&tracer, ETBR_STATUS); +		etb_fc = etb_readl(&tracer, ETBR_FORMATTERCTRL); +		etb_lock(&tracer); +	} else { +		etb_wa = etb_ra = etb_st = etb_fc = ~0; +		datalen = -1; +	} -	return sprintf(buf, "Trace buffer len: %d\nComparator pairs: %d\n" +	ret = sprintf(buf, "Trace buffer len: %d\nComparator pairs: %d\n"  			"ETBR_WRITEADDR:\t%08x\n"  			"ETBR_READADDR:\t%08x\n"  			"ETBR_STATUS:\t%08x\n" -			"ETBR_FORMATTERCTRL:\t%08x\n" -			"ETMR_CTRL:\t%08x\n" -			"ETMR_STATUS:\t%08x\n", +			"ETBR_FORMATTERCTRL:\t%08x\n",  			datalen,  			tracer.ncmppairs,  			etb_wa,  			etb_ra,  			etb_st, -			etb_fc, +			etb_fc +			); + +	for (id = 0; id < tracer.etm_regs_count; id++) { +		etm_unlock(&tracer, id); +		etm_ctrl = etm_readl(&tracer, id, ETMR_CTRL); +		etm_st = etm_readl(&tracer, id, ETMR_STATUS); +		etm_lock(&tracer, id); +		ret += sprintf(buf + ret, "ETMR_CTRL:\t%08x\n" +			"ETMR_STATUS:\t%08x\n",  			etm_ctrl,  			etm_st  			); +	} +	mutex_unlock(&tracer.mutex); + +	return ret;  }  static struct kobj_attribute trace_info_attr = @@ -531,42 +658,260 @@ static ssize_t trace_mode_store(struct kobject *kobj,  static struct kobj_attribute trace_mode_attr =  	__ATTR(trace_mode, 0644, trace_mode_show, trace_mode_store); +static ssize_t trace_contextid_size_show(struct kobject *kobj, +					 struct kobj_attribute *attr, +					 char *buf) +{ +	/* 0: No context id tracing, 1: One byte, 2: Two bytes, 3: Four bytes */ +	return sprintf(buf, "%d\n", (1 << tracer.etm_contextid_size) >> 1); +} + +static ssize_t trace_contextid_size_store(struct kobject *kobj, +					  struct kobj_attribute *attr, +					  const char *buf, size_t n) +{ +	unsigned int contextid_size; + +	if (sscanf(buf, "%u", &contextid_size) != 1) +		return -EINVAL; + +	if (contextid_size == 3 || contextid_size > 4) +		return -EINVAL; + +	mutex_lock(&tracer.mutex); +	tracer.etm_contextid_size = fls(contextid_size); +	mutex_unlock(&tracer.mutex); + +	return n; +} + +static struct kobj_attribute trace_contextid_size_attr = +	__ATTR(trace_contextid_size, 0644, +		trace_contextid_size_show, trace_contextid_size_store); + +static ssize_t trace_branch_output_show(struct kobject *kobj, +					struct kobj_attribute *attr, +					char *buf) +{ +	return sprintf(buf, "%d\n", !!(tracer.flags & TRACER_BRANCHOUTPUT)); +} + +static ssize_t trace_branch_output_store(struct kobject *kobj, +					 struct kobj_attribute *attr, +					 const char *buf, size_t n) +{ +	unsigned int branch_output; + +	if (sscanf(buf, "%u", &branch_output) != 1) +		return -EINVAL; + +	mutex_lock(&tracer.mutex); +	if (branch_output) { +		tracer.flags |= TRACER_BRANCHOUTPUT; +		/* Branch broadcasting is incompatible with the return stack */ +		tracer.flags &= ~TRACER_RETURN_STACK; +	} else { +		tracer.flags &= ~TRACER_BRANCHOUTPUT; +	} +	mutex_unlock(&tracer.mutex); + +	return n; +} + +static struct kobj_attribute trace_branch_output_attr = +	__ATTR(trace_branch_output, 0644, +		trace_branch_output_show, trace_branch_output_store); + +static ssize_t trace_return_stack_show(struct kobject *kobj, +				  struct kobj_attribute *attr, +				  char *buf) +{ +	return sprintf(buf, "%d\n", !!(tracer.flags & TRACER_RETURN_STACK)); +} + +static ssize_t trace_return_stack_store(struct kobject *kobj, +				   struct kobj_attribute *attr, +				   const char *buf, size_t n) +{ +	unsigned int return_stack; + +	if (sscanf(buf, "%u", &return_stack) != 1) +		return -EINVAL; + +	mutex_lock(&tracer.mutex); +	if (return_stack) { +		tracer.flags |= TRACER_RETURN_STACK; +		/* Return stack is incompatible with branch broadcasting */ +		tracer.flags &= ~TRACER_BRANCHOUTPUT; +	} else { +		tracer.flags &= ~TRACER_RETURN_STACK; +	} +	mutex_unlock(&tracer.mutex); + +	return n; +} + +static struct kobj_attribute trace_return_stack_attr = +	__ATTR(trace_return_stack, 0644, +		trace_return_stack_show, trace_return_stack_store); + +static ssize_t trace_timestamp_show(struct kobject *kobj, +				  struct kobj_attribute *attr, +				  char *buf) +{ +	return sprintf(buf, "%d\n", !!(tracer.flags & TRACER_TIMESTAMP)); +} + +static ssize_t trace_timestamp_store(struct kobject *kobj, +				   struct kobj_attribute *attr, +				   const char *buf, size_t n) +{ +	unsigned int timestamp; + +	if (sscanf(buf, "%u", ×tamp) != 1) +		return -EINVAL; + +	mutex_lock(&tracer.mutex); +	if (timestamp) +		tracer.flags |= TRACER_TIMESTAMP; +	else +		tracer.flags &= ~TRACER_TIMESTAMP; +	mutex_unlock(&tracer.mutex); + +	return n; +} + +static struct kobj_attribute trace_timestamp_attr = +	__ATTR(trace_timestamp, 0644, +		trace_timestamp_show, trace_timestamp_store); + +static ssize_t trace_range_show(struct kobject *kobj, +				  struct kobj_attribute *attr, +				  char *buf) +{ +	return sprintf(buf, "%08lx %08lx\n", +			tracer.range_start, tracer.range_end); +} + +static ssize_t trace_range_store(struct kobject *kobj, +				   struct kobj_attribute *attr, +				   const char *buf, size_t n) +{ +	unsigned long range_start, range_end; + +	if (sscanf(buf, "%lx %lx", &range_start, &range_end) != 2) +		return -EINVAL; + +	mutex_lock(&tracer.mutex); +	tracer.range_start = range_start; +	tracer.range_end = range_end; +	mutex_unlock(&tracer.mutex); + +	return n; +} + + +static struct kobj_attribute trace_range_attr = +	__ATTR(trace_range, 0644, trace_range_show, trace_range_store); + +static ssize_t trace_data_range_show(struct kobject *kobj, +				  struct kobj_attribute *attr, +				  char *buf) +{ +	unsigned long range_start; +	u64 range_end; +	mutex_lock(&tracer.mutex); +	range_start = tracer.data_range_start; +	range_end = tracer.data_range_end; +	if (!range_end && (tracer.flags & TRACER_TRACE_DATA)) +		range_end = 0x100000000ULL; +	mutex_unlock(&tracer.mutex); +	return sprintf(buf, "%08lx %08llx\n", range_start, range_end); +} + +static ssize_t trace_data_range_store(struct kobject *kobj, +				   struct kobj_attribute *attr, +				   const char *buf, size_t n) +{ +	unsigned long range_start; +	u64 range_end; + +	if (sscanf(buf, "%lx %llx", &range_start, &range_end) != 2) +		return -EINVAL; + +	mutex_lock(&tracer.mutex); +	tracer.data_range_start = range_start; +	tracer.data_range_end = (unsigned long)range_end; +	if (range_end) +		tracer.flags |= TRACER_TRACE_DATA; +	else +		tracer.flags &= ~TRACER_TRACE_DATA; +	mutex_unlock(&tracer.mutex); + +	return n; +} + + +static struct kobj_attribute trace_data_range_attr = +	__ATTR(trace_data_range, 0644, +		trace_data_range_show, trace_data_range_store); +  static int etm_probe(struct amba_device *dev, const struct amba_id *id)  {  	struct tracectx *t = &tracer;  	int ret = 0; +	void __iomem **new_regs; +	int new_count; +	u32 etmccr; +	u32 etmidr; +	u32 etmccer = 0; +	u8 etm_version = 0; -	if (t->etm_regs) { -		dev_dbg(&dev->dev, "ETM already initialized\n"); -		ret = -EBUSY; +	mutex_lock(&t->mutex); +	new_count = t->etm_regs_count + 1; +	new_regs = krealloc(t->etm_regs, +				sizeof(t->etm_regs[0]) * new_count, GFP_KERNEL); + +	if (!new_regs) { +		dev_dbg(&dev->dev, "Failed to allocate ETM register array\n"); +		ret = -ENOMEM;  		goto out;  	} +	t->etm_regs = new_regs;  	ret = amba_request_regions(dev, NULL);  	if (ret)  		goto out; -	t->etm_regs = ioremap_nocache(dev->res.start, resource_size(&dev->res)); -	if (!t->etm_regs) { +	t->etm_regs[t->etm_regs_count] = +		ioremap_nocache(dev->res.start, resource_size(&dev->res)); +	if (!t->etm_regs[t->etm_regs_count]) {  		ret = -ENOMEM;  		goto out_release;  	} -	amba_set_drvdata(dev, t); +	amba_set_drvdata(dev, t->etm_regs[t->etm_regs_count]); -	mutex_init(&t->mutex); -	t->dev = &dev->dev; -	t->flags = TRACER_CYCLE_ACC; +	t->flags = TRACER_CYCLE_ACC | TRACER_TRACE_DATA | TRACER_BRANCHOUTPUT;  	t->etm_portsz = 1; +	t->etm_contextid_size = 3; -	etm_unlock(t); -	(void)etm_readl(t, ETMMR_PDSR); +	etm_unlock(t, t->etm_regs_count); +	(void)etm_readl(t, t->etm_regs_count, ETMMR_PDSR);  	/* dummy first read */ -	(void)etm_readl(&tracer, ETMMR_OSSRR); +	(void)etm_readl(&tracer, t->etm_regs_count, ETMMR_OSSRR); -	t->ncmppairs = etm_readl(t, ETMR_CONFCODE) & 0xf; -	etm_writel(t, 0x440, ETMR_CTRL); -	etm_lock(t); +	etmccr = etm_readl(t, t->etm_regs_count, ETMR_CONFCODE); +	t->ncmppairs = etmccr & 0xf; +	if (etmccr & ETMCCR_ETMIDR_PRESENT) { +		etmidr = etm_readl(t, t->etm_regs_count, ETMR_ID); +		etm_version = ETMIDR_VERSION(etmidr); +		if (etm_version >= ETMIDR_VERSION_3_1) +			etmccer = etm_readl(t, t->etm_regs_count, ETMR_CCE); +	} +	etm_writel(t, t->etm_regs_count, 0x441, ETMR_CTRL); +	etm_writel(t, t->etm_regs_count, new_count, ETMR_TRACEIDR); +	etm_lock(t, t->etm_regs_count);  	ret = sysfs_create_file(&dev->dev.kobj,  			&trace_running_attr.attr); @@ -582,36 +927,101 @@ static int etm_probe(struct amba_device *dev, const struct amba_id *id)  	if (ret)  		dev_dbg(&dev->dev, "Failed to create trace_mode in sysfs\n"); -	dev_dbg(t->dev, "ETM AMBA driver initialized.\n"); +	ret = sysfs_create_file(&dev->dev.kobj, +				&trace_contextid_size_attr.attr); +	if (ret) +		dev_dbg(&dev->dev, +			"Failed to create trace_contextid_size in sysfs\n"); + +	ret = sysfs_create_file(&dev->dev.kobj, +				&trace_branch_output_attr.attr); +	if (ret) +		dev_dbg(&dev->dev, +			"Failed to create trace_branch_output in sysfs\n"); + +	if (etmccer & ETMCCER_RETURN_STACK_IMPLEMENTED) { +		ret = sysfs_create_file(&dev->dev.kobj, +					&trace_return_stack_attr.attr); +		if (ret) +			dev_dbg(&dev->dev, +			      "Failed to create trace_return_stack in sysfs\n"); +	} + +	if (etmccer & ETMCCER_TIMESTAMPING_IMPLEMENTED) { +		ret = sysfs_create_file(&dev->dev.kobj, +					&trace_timestamp_attr.attr); +		if (ret) +			dev_dbg(&dev->dev, +				"Failed to create trace_timestamp in sysfs\n"); +	} + +	ret = sysfs_create_file(&dev->dev.kobj, &trace_range_attr.attr); +	if (ret) +		dev_dbg(&dev->dev, "Failed to create trace_range in sysfs\n"); + +	if (etm_version < ETMIDR_VERSION_PFT_1_0) { +		ret = sysfs_create_file(&dev->dev.kobj, +					&trace_data_range_attr.attr); +		if (ret) +			dev_dbg(&dev->dev, +				"Failed to create trace_data_range in sysfs\n"); +	} else { +		tracer.flags &= ~TRACER_TRACE_DATA; +	} + +	dev_dbg(&dev->dev, "ETM AMBA driver initialized.\n"); + +	/* Enable formatter if there are multiple trace sources */ +	if (new_count > 1) +		t->etb_fc = ETBFF_ENFCONT | ETBFF_ENFTC; + +	t->etm_regs_count = new_count;  out: +	mutex_unlock(&t->mutex);  	return ret;  out_unmap:  	amba_set_drvdata(dev, NULL); -	iounmap(t->etm_regs); +	iounmap(t->etm_regs[t->etm_regs_count]);  out_release:  	amba_release_regions(dev); +	mutex_unlock(&t->mutex);  	return ret;  }  static int etm_remove(struct amba_device *dev)  { -	struct tracectx *t = amba_get_drvdata(dev); +	int i; +	struct tracectx *t = &tracer; +	void __iomem	*etm_regs = amba_get_drvdata(dev); + +	sysfs_remove_file(&dev->dev.kobj, &trace_running_attr.attr); +	sysfs_remove_file(&dev->dev.kobj, &trace_info_attr.attr); +	sysfs_remove_file(&dev->dev.kobj, &trace_mode_attr.attr); +	sysfs_remove_file(&dev->dev.kobj, &trace_range_attr.attr); +	sysfs_remove_file(&dev->dev.kobj, &trace_data_range_attr.attr);  	amba_set_drvdata(dev, NULL); -	iounmap(t->etm_regs); -	t->etm_regs = NULL; +	mutex_lock(&t->mutex); +	for (i = 0; i < t->etm_regs_count; i++) +		if (t->etm_regs[i] == etm_regs) +			break; +	for (; i < t->etm_regs_count - 1; i++) +		t->etm_regs[i] = t->etm_regs[i + 1]; +	t->etm_regs_count--; +	if (!t->etm_regs_count) { +		kfree(t->etm_regs); +		t->etm_regs = NULL; +	} +	mutex_unlock(&t->mutex); +	iounmap(etm_regs);  	amba_release_regions(dev); -	sysfs_remove_file(&dev->dev.kobj, &trace_running_attr.attr); -	sysfs_remove_file(&dev->dev.kobj, &trace_info_attr.attr); -	sysfs_remove_file(&dev->dev.kobj, &trace_mode_attr.attr); -  	return 0;  } @@ -620,6 +1030,10 @@ static struct amba_id etm_ids[] = {  		.id	= 0x0003b921,  		.mask	= 0x0007ffff,  	}, +	{ +		.id	= 0x0003b950, +		.mask	= 0x0007ffff, +	},  	{ 0, 0 },  }; @@ -637,6 +1051,8 @@ static int __init etm_init(void)  {  	int retval; +	mutex_init(&tracer.mutex); +  	retval = amba_driver_register(&etb_driver);  	if (retval) {  		printk(KERN_ERR "Failed to register etb\n"); diff --git a/arch/arm/kernel/ftrace.c b/arch/arm/kernel/ftrace.c index 34e56647dce..6a740a93f4b 100644 --- a/arch/arm/kernel/ftrace.c +++ b/arch/arm/kernel/ftrace.c @@ -13,6 +13,7 @@   */  #include <linux/ftrace.h> +#include <linux/module.h>  #include <linux/uaccess.h>  #include <asm/cacheflush.h> @@ -63,6 +64,20 @@ static unsigned long adjust_address(struct dyn_ftrace *rec, unsigned long addr)  }  #endif +int ftrace_arch_code_modify_prepare(void) +{ +	set_kernel_text_rw(); +	set_all_modules_text_rw(); +	return 0; +} + +int ftrace_arch_code_modify_post_process(void) +{ +	set_all_modules_text_ro(); +	set_kernel_text_ro(); +	return 0; +} +  static unsigned long ftrace_call_replace(unsigned long pc, unsigned long addr)  {  	return arm_gen_branch_link(pc, addr); diff --git a/arch/arm/kernel/kgdb.c b/arch/arm/kernel/kgdb.c index 778c2f7024f..b321c8fbb87 100644 --- a/arch/arm/kernel/kgdb.c +++ b/arch/arm/kernel/kgdb.c @@ -144,6 +144,8 @@ int kgdb_arch_handle_exception(int exception_vector, int signo,  static int kgdb_brk_fn(struct pt_regs *regs, unsigned int instr)  { +	if (user_mode(regs)) +		return -1;  	kgdb_handle_exception(1, SIGTRAP, 0, regs);  	return 0; @@ -151,6 +153,8 @@ static int kgdb_brk_fn(struct pt_regs *regs, unsigned int instr)  static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int instr)  { +	if (user_mode(regs)) +		return -1;  	compiled_break = 1;  	kgdb_handle_exception(1, SIGTRAP, 0, regs); diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index 8c3094d0f7b..afe3edee76c 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c @@ -53,7 +53,12 @@ armpmu_map_cache_event(const unsigned (*cache_map)  static int  armpmu_map_hw_event(const unsigned (*event_map)[PERF_COUNT_HW_MAX], u64 config)  { -	int mapping = (*event_map)[config]; +	int mapping; + +	if (config >= PERF_COUNT_HW_MAX) +		return -ENOENT; + +	mapping = (*event_map)[config];  	return mapping == HW_OP_UNSUPPORTED ? -ENOENT : mapping;  } @@ -253,6 +258,9 @@ validate_event(struct pmu_hw_events *hw_events,  	struct arm_pmu *armpmu = to_arm_pmu(event->pmu);  	struct pmu *leader_pmu = event->group_leader->pmu; +	if (is_software_event(event)) +		return 1; +  	if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF)  		return 1; diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 6e8931ccf13..faba0150d60 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -32,6 +32,7 @@  #include <linux/hw_breakpoint.h>  #include <linux/cpuidle.h>  #include <linux/leds.h> +#include <linux/console.h>  #include <asm/cacheflush.h>  #include <asm/idmap.h> @@ -57,9 +58,46 @@ static const char *isa_modes[] = {    "ARM" , "Thumb" , "Jazelle", "ThumbEE"  }; +#ifdef CONFIG_SMP +void arch_trigger_all_cpu_backtrace(void) +{ +	smp_send_all_cpu_backtrace(); +} +#else +void arch_trigger_all_cpu_backtrace(void) +{ +	dump_stack(); +} +#endif +  extern void call_with_stack(void (*fn)(void *), void *arg, void *sp);  typedef void (*phys_reset_t)(unsigned long); +#ifdef CONFIG_ARM_FLUSH_CONSOLE_ON_RESTART +void arm_machine_flush_console(void) +{ +	printk("\n"); +	pr_emerg("Restarting %s\n", linux_banner); +	if (console_trylock()) { +		console_unlock(); +		return; +	} + +	mdelay(50); + +	local_irq_disable(); +	if (!console_trylock()) +		pr_emerg("arm_restart: Console was locked! Busting\n"); +	else +		pr_emerg("arm_restart: Console was locked!\n"); +	console_unlock(); +} +#else +void arm_machine_flush_console(void) +{ +} +#endif +  /*   * A temporary stack to use for CPU reset. This is static so that we   * don't clobber it with the identity mapping. When running with this @@ -147,6 +185,7 @@ void arch_cpu_idle_prepare(void)  void arch_cpu_idle_enter(void)  { +	idle_notifier_call_chain(IDLE_START);  	ledtrig_cpu(CPU_LED_IDLE_START);  #ifdef CONFIG_PL310_ERRATA_769419  	wmb(); @@ -156,6 +195,7 @@ void arch_cpu_idle_enter(void)  void arch_cpu_idle_exit(void)  {  	ledtrig_cpu(CPU_LED_IDLE_END); +	idle_notifier_call_chain(IDLE_END);  }  #ifdef CONFIG_HOTPLUG_CPU @@ -195,6 +235,16 @@ __setup("reboot=", reboot_setup);   */  void machine_shutdown(void)  { +#ifdef CONFIG_SMP +	/* +	 * Disable preemption so we're guaranteed to +	 * run to power off or reboot and prevent +	 * the possibility of switching to another +	 * thread that might wind up blocking on +	 * one of the stopped CPUs. +	 */ +	preempt_disable(); +#endif  	disable_nonboot_cpus();  } @@ -240,6 +290,10 @@ void machine_restart(char *cmd)  {  	smp_send_stop(); +	/* Flush the console to make sure all the relevant messages make it +	 * out to the console drivers */ +	arm_machine_flush_console(); +  	arm_pm_restart(reboot_mode, cmd);  	/* Give a grace period for failure to restart of 1s */ @@ -251,6 +305,81 @@ void machine_restart(char *cmd)  	while (1);  } +/* + * dump a block of kernel memory from around the given address + */ +static void show_data(unsigned long addr, int nbytes, const char *name) +{ +	int	i, j; +	int	nlines; +	u32	*p; + +	/* +	 * don't attempt to dump non-kernel addresses or +	 * values that are probably just small negative numbers +	 */ +	if (addr < PAGE_OFFSET || addr > -256UL) +		return; + +	printk("\n%s: %#lx:\n", name, addr); + +	/* +	 * round address down to a 32 bit boundary +	 * and always dump a multiple of 32 bytes +	 */ +	p = (u32 *)(addr & ~(sizeof(u32) - 1)); +	nbytes += (addr & (sizeof(u32) - 1)); +	nlines = (nbytes + 31) / 32; + + +	for (i = 0; i < nlines; i++) { +		/* +		 * just display low 16 bits of address to keep +		 * each line of the dump < 80 characters +		 */ +		printk("%04lx ", (unsigned long)p & 0xffff); +		for (j = 0; j < 8; j++) { +			u32	data; +			if (probe_kernel_address(p, data)) { +				printk(" ********"); +			} else { +				printk(" %08x", data); +			} +			++p; +		} +		printk("\n"); +	} +} + +static void show_extra_register_data(struct pt_regs *regs, int nbytes) +{ +	mm_segment_t fs; +	static atomic_t recursing = ATOMIC_INIT(-1); + +	if (!atomic_inc_return(&recursing)) { +		fs = get_fs(); +		set_fs(KERNEL_DS); +		show_data(regs->ARM_pc - nbytes, nbytes * 2, "PC"); +		show_data(regs->ARM_lr - nbytes, nbytes * 2, "LR"); +		show_data(regs->ARM_sp - nbytes, nbytes * 2, "SP"); +		show_data(regs->ARM_ip - nbytes, nbytes * 2, "IP"); +		show_data(regs->ARM_fp - nbytes, nbytes * 2, "FP"); +		show_data(regs->ARM_r0 - nbytes, nbytes * 2, "R0"); +		show_data(regs->ARM_r1 - nbytes, nbytes * 2, "R1"); +		show_data(regs->ARM_r2 - nbytes, nbytes * 2, "R2"); +		show_data(regs->ARM_r3 - nbytes, nbytes * 2, "R3"); +		show_data(regs->ARM_r4 - nbytes, nbytes * 2, "R4"); +		show_data(regs->ARM_r5 - nbytes, nbytes * 2, "R5"); +		show_data(regs->ARM_r6 - nbytes, nbytes * 2, "R6"); +		show_data(regs->ARM_r7 - nbytes, nbytes * 2, "R7"); +		show_data(regs->ARM_r8 - nbytes, nbytes * 2, "R8"); +		show_data(regs->ARM_r9 - nbytes, nbytes * 2, "R9"); +		show_data(regs->ARM_r10 - nbytes, nbytes * 2, "R10"); +		set_fs(fs); +	} +	atomic_dec(&recursing); +} +  void __show_regs(struct pt_regs *regs)  {  	unsigned long flags; @@ -307,6 +436,8 @@ void __show_regs(struct pt_regs *regs)  		printk("Control: %08x%s\n", ctrl, buf);  	}  #endif + +	show_extra_register_data(regs, 128);  }  void show_regs(struct pt_regs * regs) diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index b4b1d397592..c698698efd4 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -788,6 +788,17 @@ void __init setup_arch(char **cmdline_p)  	arm_memblock_init(&meminfo, mdesc);  	paging_init(mdesc); + +#ifdef CONFIG_MACH_MINNOW +	if (flat_dev_tree_address) { +		struct boot_param_header *dt = +			phys_to_virt(flat_dev_tree_address); +		if (be32_to_cpu(dt->magic) == OF_DT_HEADER) { +			pr_info("Use ATAG dev_tree from this point.\n"); +			initial_boot_params = dt; +		} +	} +#endif  	request_standard_resources(mdesc);  	if (mdesc->restart) diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 5919eb451bb..0c96b2d343e 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -66,6 +66,7 @@ enum ipi_msg_type {  	IPI_CALL_FUNC,  	IPI_CALL_FUNC_SINGLE,  	IPI_CPU_STOP, +	IPI_CPU_BACKTRACE,  };  static DECLARE_COMPLETION(cpu_running); @@ -463,6 +464,7 @@ static const char *ipi_types[NR_IPI] = {  	S(IPI_CALL_FUNC, "Function call interrupts"),  	S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"),  	S(IPI_CPU_STOP, "CPU stop interrupts"), +	S(IPI_CPU_BACKTRACE, "CPU backtrace"),  };  void show_ipi_list(struct seq_file *p, int prec) @@ -588,6 +590,58 @@ static void ipi_cpu_stop(unsigned int cpu)  		cpu_relax();  } +static cpumask_t backtrace_mask; +static DEFINE_RAW_SPINLOCK(backtrace_lock); + +/* "in progress" flag of arch_trigger_all_cpu_backtrace */ +static unsigned long backtrace_flag; + +void smp_send_all_cpu_backtrace(void) +{ +	unsigned int this_cpu = smp_processor_id(); +	int i; + +	if (test_and_set_bit(0, &backtrace_flag)) +		/* +		 * If there is already a trigger_all_cpu_backtrace() in progress +		 * (backtrace_flag == 1), don't output double cpu dump infos. +		 */ +		return; + +	cpumask_copy(&backtrace_mask, cpu_online_mask); +	cpu_clear(this_cpu, backtrace_mask); + +	pr_info("Backtrace for cpu %d (current):\n", this_cpu); +	dump_stack(); + +	pr_info("\nsending IPI to all other CPUs:\n"); +	smp_cross_call(&backtrace_mask, IPI_CPU_BACKTRACE); + +	/* Wait for up to 10 seconds for all other CPUs to do the backtrace */ +	for (i = 0; i < 10 * 1000; i++) { +		if (cpumask_empty(&backtrace_mask)) +			break; +		mdelay(1); +	} + +	clear_bit(0, &backtrace_flag); +	smp_mb__after_clear_bit(); +} + +/* + * ipi_cpu_backtrace - handle IPI from smp_send_all_cpu_backtrace() + */ +static void ipi_cpu_backtrace(unsigned int cpu, struct pt_regs *regs) +{ +	if (cpu_isset(cpu, backtrace_mask)) { +		raw_spin_lock(&backtrace_lock); +		pr_warning("IPI backtrace for cpu %d\n", cpu); +		show_regs(regs); +		raw_spin_unlock(&backtrace_lock); +		cpu_clear(cpu, backtrace_mask); +	} +} +  /*   * Main handler for inter-processor interrupts   */ @@ -638,6 +692,10 @@ void handle_IPI(int ipinr, struct pt_regs *regs)  		irq_exit();  		break; +	case IPI_CPU_BACKTRACE: +		ipi_cpu_backtrace(cpu, regs); +		break; +  	default:  		printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n",  		       cpu, ipinr); diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index f49cd51e162..662b2bb0921 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -207,6 +207,12 @@ config MACH_OMAP3_BEAGLE  	depends on ARCH_OMAP3  	default y  	select OMAP_PACKAGE_CBB +	 +config MACH_OMAP3_H1 +	bool "OMAP3 H1 board" +	depends on ARCH_OMAP3 +	default y +	select OMAP_PACKAGE_CBP  config MACH_DEVKIT8000  	bool "DEVKIT8000 board" @@ -368,6 +374,12 @@ config MACH_OMAP_3630SDP  	default y  	select OMAP_PACKAGE_CBP +config MACH_MINNOW +	bool "Motorola Minnow Product" +	depends on ARCH_OMAP3 +	default y +	select OMAP_PACKAGE_CBP +  config MACH_TI8168EVM  	bool "TI8168 Evaluation Module"  	depends on SOC_TI81XX @@ -414,6 +426,25 @@ config OMAP3_SDRC_AC_TIMING  	  wish to say no.  Selecting yes without understanding what is  	  going on could result in system crashes; + +config OMAP3_PAD_WKUP_IO +	bool "Enable Generation of IRQ from pad status" +	depends on ARCH_OMAP3 +	default n +	help +	 For offmode, gpio (and possibly other) domains can wakeup the system +	 but will not retain their irq status internally.  This function generates +	 the configured irq on each time the io irq (315) fires. + +config DISABLE_OMAP_ERRATA_i583 +	bool "Override errata i583" +	depends on ARCH_OMAP3 +	default n +	help +	  Errata i583 affects JDEC memory timing when waking from OFF mode on +	  ES 1.1 and older OMAP3.  If the system clock is 26MHz or 38.4MHz and +	  there is no DDR on CS1, then it is safe to disable this errata check. +  config OMAP4_ERRATA_I688  	bool "OMAP4 errata: Async Bridge Corruption"  	depends on (ARCH_OMAP4 || SOC_OMAP5) && !ARCH_MULTIPLATFORM diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 55a9d677768..8df971b821b 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -8,7 +8,7 @@ ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \  # Common support  obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o gpmc.o timer.o pm.o \  	 common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \ -	 omap_device.o sram.o +	 omap_device.o sram.o pad_wkup.o  omap-2-3-common				= irq.o  hwmod-common				= omap_hwmod.o omap_hwmod_reset.o \ @@ -85,7 +85,7 @@ obj-$(CONFIG_ARCH_OMAP2)		+= sleep24xx.o  obj-$(CONFIG_ARCH_OMAP3)		+= pm34xx.o sleep34xx.o  obj-$(CONFIG_ARCH_OMAP4)		+= pm44xx.o omap-mpuss-lowpower.o  obj-$(CONFIG_SOC_OMAP5)			+= omap-mpuss-lowpower.o -obj-$(CONFIG_PM_DEBUG)			+= pm-debug.o +obj-$(CONFIG_PM_DEBUG)			+= pm-debug.o pm-debug-regs.o  obj-$(CONFIG_POWER_AVS_OMAP)		+= sr_device.o  obj-$(CONFIG_POWER_AVS_OMAP_CLASS3)    += smartreflex-class3.o @@ -225,6 +225,8 @@ obj-$(CONFIG_MACH_OMAP_GENERIC)		+= board-generic.o  obj-$(CONFIG_MACH_OMAP_H4)		+= board-h4.o  obj-$(CONFIG_MACH_OMAP_2430SDP)		+= board-2430sdp.o  obj-$(CONFIG_MACH_OMAP3_BEAGLE)		+= board-omap3beagle.o +obj-$(CONFIG_MACH_OMAP3_H1)			+= board-omap3h1.o \ +										board-omap3h1-bluetooth.o  obj-$(CONFIG_MACH_DEVKIT8000)     	+= board-devkit8000.o  obj-$(CONFIG_MACH_OMAP_LDP)		+= board-ldp.o  obj-$(CONFIG_MACH_OMAP3530_LV_SOM)      += board-omap3logic.o @@ -253,6 +255,7 @@ obj-$(CONFIG_MACH_IGEP0020)		+= board-igep0020.o  obj-$(CONFIG_MACH_TOUCHBOOK)		+= board-omap3touchbook.o  obj-$(CONFIG_MACH_OMAP_4430SDP)		+= board-4430sdp.o  obj-$(CONFIG_MACH_OMAP4_PANDA)		+= board-omap4panda.o +obj-$(CONFIG_MACH_MINNOW)		+= board-minnow.o  obj-$(CONFIG_MACH_OMAP3517EVM)		+= board-am3517evm.o diff --git a/arch/arm/mach-omap2/board-minnow.c b/arch/arm/mach-omap2/board-minnow.c new file mode 100644 index 00000000000..af6f13b371d --- /dev/null +++ b/arch/arm/mach-omap2/board-minnow.c @@ -0,0 +1,122 @@ +/* + * linux/arch/arm/mach-omap2/board-minnow.c + * + * Copyright (C) 2013 Motorola Mobility, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <asm/mach/arch.h> +#include <asm/mach-types.h> + +#include <linux/of_irq.h> +#include <linux/of_platform.h> +#include <linux/input/touch_platform.h> +#include <linux/usb/musb.h> +#include <linux/usb/phy.h> +#include <linux/usb/nop-usb-xceiv.h> +#include <linux/ti_wilink_st.h> +#include <linux/clk-provider.h> +#include <linux/clkdev.h> +#include "mux.h" +#include "common.h" +#include "dss-common.h" +#include "control.h" + +#include "sdram-toshiba-hynix-numonyx.h" + +static int platform_wilink_kim_suspend(struct platform_device *pdev, +		pm_message_t msg); +static int platform_wilink_kim_resume(struct platform_device *pdev); + +static struct of_device_id omap_dt_match_table[] __initdata = { +	{ .compatible = "simple-bus", }, +	{ .compatible = "ti,omap-infra", }, +	{ } +}; + +static const char *omap3_gp_boards_compat[] __initdata = { +	"mot,omap3-minnow", +	NULL, +}; + +struct ti_st_plat_data wilink_pdata = { +	.nshutdown_gpio = 83, +	.dev_name = "/dev/ttyO1", +	.port_index = 1, +	.flow_cntrl = 1, +	.baud_rate = 3000000, +	.suspend = platform_wilink_kim_suspend, +	.resume = platform_wilink_kim_resume, +}; + +static struct platform_device wl18xx_device = { +	.name              = "kim", +	.id                = -1, +	.dev.platform_data = &wilink_pdata, +}; + +static struct platform_device hci_tty_device = { +	.name = "hci_tty", +	.id = -1, +}; + +static int platform_wilink_kim_suspend(struct platform_device *pdev, +		pm_message_t msg) +{ +	return 0; +} + +static int platform_wilink_kim_resume(struct platform_device *pdev) +{ +	return 0; +} + +static inline void __init minnow_init_btwilink(void) +{ +	platform_device_register(&wl18xx_device); +	platform_device_register(&hci_tty_device); +} + +static void __init minnow_init_gpio_clock(void) +{ +	struct of_phandle_args clkspec; +	struct clk *clk; +	struct clk_lookup *cl; +	clkspec.np = of_find_compatible_node(NULL, NULL, "gpio-clock"); +	if (clkspec.np) { +		of_gpio_clk_setup(clkspec.np); +		clk = of_clk_get_from_provider(&clkspec); +		if (!IS_ERR(clk)) { +			cl = clkdev_alloc(clk, clkspec.np->name, NULL); +			if (cl) +				clkdev_add(cl); +		} +	} +} + +static void __init minnow_init(void) +{ +	of_platform_populate(NULL, omap_dt_match_table, NULL, NULL); +	minnow_init_gpio_clock(); +	omap_sdrc_init(JEDEC_JESD209A_sdrc_params, JEDEC_JESD209A_sdrc_params); +	omap3_enable_usim_buffer(); /* Needed for GPIOs in USIM block */ +	omap_minnow_display_init(); +	minnow_init_btwilink(); +} + +MACHINE_START(MINNOW, "minnow") +	.atag_offset    = 0x100, +	.reserve        = omap_reserve, +	.map_io         = omap3_map_io, +	.init_early     = omap3630_init_early, +	.init_irq       = omap_intc_of_init, +	.handle_irq     = omap3_intc_handle_irq, +	.init_machine   = minnow_init, +	.init_late      = omap3630_init_late, +	.init_time      = omap3_sync32k_timer_init, +	.dt_compat	    = omap3_gp_boards_compat, +	.restart        = omap3xxx_restart, +MACHINE_END diff --git a/arch/arm/mach-omap2/board-omap3h1-bluetooth.c b/arch/arm/mach-omap2/board-omap3h1-bluetooth.c new file mode 100644 index 00000000000..52bf419b549 --- /dev/null +++ b/arch/arm/mach-omap2/board-omap3h1-bluetooth.c @@ -0,0 +1,387 @@ +/* + * Bluetooth Broadcomm  and low power control via GPIO + * + *  Copyright (C) 2011 Google, Inc. + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  This program is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + * + */ +  + /* +  * Adapted from board-tuna-bluetooth.c by Evan Wilson <evan@oliodevices.com +  * +  */ +  + +#include <linux/module.h> +#include <linux/init.h> +#include <linux/gpio.h> +#include <linux/hrtimer.h> +#include <linux/irq.h> +#include <linux/rfkill.h> +#include <linux/platform_device.h> +#include <linux/wakelock.h> +#include <linux/debugfs.h> +#include <linux/seq_file.h> +#include <asm/mach-types.h> +#include "serial.h" +#include "board-omap3h1.h" +#include <linux/regulator/driver.h> + +static void update_host_wake_locked(int); + +#define BT_REG_GPIO 180 + +#define BT_WAKE_GPIO 93 +#define BT_HOST_WAKE_GPIO 11 + +static struct rfkill *bt_rfkill; +static struct regulator *clk32ksys_reg; +static bool bt_enabled; +static bool host_wake_uart_enabled; +static bool wake_uart_enabled; +static struct dentry *btdebugdent; + +struct bcm_bt_lpm { +	int wake; +	int host_wake; + +	struct hrtimer enter_lpm_timer; +	ktime_t enter_lpm_delay; + +	struct uart_port *uport; + +	struct wake_lock wake_lock; +	char wake_lock_name[100]; +} bt_lpm; + +static int bcm20702_bt_rfkill_set_power(void *data, bool blocked) +{ +	// rfkill_ops callback. Turn transmitter on when blocked is false +	if (!blocked) { +		if (clk32ksys_reg && !bt_enabled) +			regulator_enable(clk32ksys_reg); + +		gpio_set_value(BT_REG_GPIO, 1); + +	} else { +		// Chip won't toggle host_wake after reset.  Make sure +		// we don't hold the wake_lock until chip wakes up again. +		update_host_wake_locked(0); +		 +		gpio_set_value(BT_REG_GPIO, 0); +		if (clk32ksys_reg && bt_enabled) +			regulator_disable(clk32ksys_reg); +	} + +	bt_enabled = !blocked; + +	return 0; +} + +static const struct rfkill_ops bcm20702_bt_rfkill_ops = { +	.set_block = bcm20702_bt_rfkill_set_power, +}; + +static void set_wake_locked(int wake) +{ +	bt_lpm.wake = wake; + +	if (!wake) +		wake_unlock(&bt_lpm.wake_lock); + +	if (!wake_uart_enabled && wake) +		//omap_uart_enable(2); + +	gpio_set_value(BT_WAKE_GPIO, wake); + +	if (wake_uart_enabled && !wake) +		//omap_uart_disable(2); + +	wake_uart_enabled = wake; +} + +static enum hrtimer_restart enter_lpm(struct hrtimer *timer) { +	unsigned long flags; +	spin_lock_irqsave(&bt_lpm.uport->lock, flags); +	set_wake_locked(0); +	spin_unlock_irqrestore(&bt_lpm.uport->lock, flags); + +	return HRTIMER_NORESTART; +} + +void bcm_bt_lpm_exit_lpm_locked(struct uart_port *uport) { +	bt_lpm.uport = uport; + +	hrtimer_try_to_cancel(&bt_lpm.enter_lpm_timer); + +	set_wake_locked(1); + +	hrtimer_start(&bt_lpm.enter_lpm_timer, bt_lpm.enter_lpm_delay, +		HRTIMER_MODE_REL); +} +EXPORT_SYMBOL(bcm_bt_lpm_exit_lpm_locked); + +static void update_host_wake_locked(int host_wake) +{ +	if (host_wake == bt_lpm.host_wake) +		return; + +	bt_lpm.host_wake = host_wake; + +	if (host_wake) { +		wake_lock(&bt_lpm.wake_lock); +		if (!host_wake_uart_enabled) { +			//omap_uart_enable(2); +		} +	} else  { +		if (host_wake_uart_enabled) { +			//omap_uart_disable(2); +		} +		// Take a timed wakelock, so that upper layers can take it. +		// The chipset deasserts the hostwake lock, when there is no +		// more data to send. +		wake_lock_timeout(&bt_lpm.wake_lock, HZ/2); +	} + +	host_wake_uart_enabled = host_wake; + +} + +static irqreturn_t host_wake_isr(int irq, void *dev) +{ +	int host_wake; +	unsigned long flags; + +	host_wake = gpio_get_value(BT_HOST_WAKE_GPIO); +	irq_set_irq_type(irq, host_wake ? IRQF_TRIGGER_LOW : IRQF_TRIGGER_HIGH); + +	if (!bt_lpm.uport) { +		bt_lpm.host_wake = host_wake; +		return IRQ_HANDLED; +	} + +	spin_lock_irqsave(&bt_lpm.uport->lock, flags); +	update_host_wake_locked(host_wake); +	spin_unlock_irqrestore(&bt_lpm.uport->lock, flags); + +	return IRQ_HANDLED; +} + +static int bcm_bt_lpm_init(struct platform_device *pdev) +{ +	int irq; +	int ret; +	int rc; + +	rc = gpio_request(BT_WAKE_GPIO, "bcm20702_wake_gpio"); +	if (unlikely(rc)) { +		return rc; +	} + +	rc = gpio_request(BT_HOST_WAKE_GPIO, "bcm20702_host_wake_gpio"); +	if (unlikely(rc)) { +		gpio_free(BT_WAKE_GPIO); +		return rc; +	} + +	hrtimer_init(&bt_lpm.enter_lpm_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); +	bt_lpm.enter_lpm_delay = ktime_set(1, 0);  /* 1 sec */ +	bt_lpm.enter_lpm_timer.function = enter_lpm; + +	bt_lpm.host_wake = 0; + +	irq = gpio_to_irq(BT_HOST_WAKE_GPIO); +	ret = request_irq(irq, host_wake_isr, IRQF_TRIGGER_HIGH, +		"bt host_wake", NULL); +	if (ret) { +		gpio_free(BT_WAKE_GPIO); +		gpio_free(BT_HOST_WAKE_GPIO); +		return ret; +	} + +	ret = irq_set_irq_wake(irq, 1); +	if (ret) { +		gpio_free(BT_WAKE_GPIO); +		gpio_free(BT_HOST_WAKE_GPIO); +		return ret; +	} + +	gpio_direction_output(BT_WAKE_GPIO, 0); +	gpio_direction_input(BT_HOST_WAKE_GPIO); + +	snprintf(bt_lpm.wake_lock_name, sizeof(bt_lpm.wake_lock_name), +			"BTLowPower"); +	wake_lock_init(&bt_lpm.wake_lock, WAKE_LOCK_SUSPEND, +			 bt_lpm.wake_lock_name); +	return 0; +} + +static int btdebug_dump(struct seq_file *sf, void *private) +{ +	seq_printf(sf, "en=%d bt_wake=%d lpm.w=%d w_uart_en=%d\n", +		   bt_enabled, gpio_get_value(BT_WAKE_GPIO), +		   bt_lpm.wake, wake_uart_enabled); +	seq_printf(sf, "bt_host_wake=%d lpm.hw=%d hw_uart_en=%d\n", +		   gpio_get_value(BT_HOST_WAKE_GPIO), bt_lpm.host_wake, +		   host_wake_uart_enabled); +	return 0; +} + +static int btdebug_open(struct inode *inode, struct file *file) +{ +	return single_open(file, btdebug_dump, NULL); +} + +static const struct file_operations btdebug_fops = { +	.open = btdebug_open, +	.read = seq_read, +	.llseek = seq_lseek, +	.release = single_release, +}; + +static int bcm20702_bluetooth_probe(struct platform_device *pdev) +{ +	int rc = 0; +	int ret = 0; + +//	rc = gpio_request(BT_RESET_GPIO, "bcm20702_nreset_gpip"); +//	if (unlikely(rc)) { +//		return rc; +//	} + +	rc = gpio_request(BT_REG_GPIO, "bcm20702_nshutdown_gpio"); +	if (unlikely(rc)) { +		//gpio_free(BT_RESET_GPIO); +		return rc; +	} + +	clk32ksys_reg = regulator_get(0, "clk32ksys"); +	if (IS_ERR(clk32ksys_reg)) { +		pr_err("clk32ksys reg not found!\n"); +		clk32ksys_reg = NULL; +	} + +	gpio_direction_output(BT_REG_GPIO, 1); +	//gpio_direction_output(BT_RESET_GPIO, 1); + +	bt_rfkill = rfkill_alloc("bcm20702 Bluetooth", &pdev->dev, +				RFKILL_TYPE_BLUETOOTH, &bcm20702_bt_rfkill_ops, +				NULL); + +	if (unlikely(!bt_rfkill)) { +		//gpio_free(BT_RESET_GPIO); +		gpio_free(BT_REG_GPIO); +		return -ENOMEM; +	} + +	rfkill_set_states(bt_rfkill, true, false); +	rc = rfkill_register(bt_rfkill); + +	if (unlikely(rc)) { +		rfkill_destroy(bt_rfkill); +		//gpio_free(BT_RESET_GPIO); +		gpio_free(BT_REG_GPIO); +		return -1; +	} + +	ret = bcm_bt_lpm_init(pdev); +	if (ret) { +		rfkill_unregister(bt_rfkill); +		rfkill_destroy(bt_rfkill); + +		//gpio_free(BT_RESET_GPIO); +		gpio_free(BT_REG_GPIO); +	} + +	btdebugdent = debugfs_create_file("bt", S_IRUGO, NULL, NULL, +					  &btdebug_fops); +	if (IS_ERR_OR_NULL(btdebugdent)) +		pr_err("%s: failed to create debugfs file\n", __func__); + +	return ret; +} + +static int bcm20702_bluetooth_remove(struct platform_device *pdev) +{ +	rfkill_unregister(bt_rfkill); +	rfkill_destroy(bt_rfkill); + +	if (!IS_ERR_OR_NULL(btdebugdent)) +		debugfs_remove(btdebugdent); + +	gpio_free(BT_REG_GPIO); +	//gpio_free(BT_RESET_GPIO); +	gpio_free(BT_WAKE_GPIO); +	gpio_free(BT_HOST_WAKE_GPIO); +	regulator_put(clk32ksys_reg); + +	wake_lock_destroy(&bt_lpm.wake_lock); +	return 0; +} + +int bcm4430_bluetooth_suspend(struct platform_device *pdev, pm_message_t state) +{ +	int irq = gpio_to_irq(BT_HOST_WAKE_GPIO); +	int host_wake; + +	disable_irq(irq); +	host_wake = gpio_get_value(BT_HOST_WAKE_GPIO); + +	if (host_wake) { +		enable_irq(irq); +		return -EBUSY; +	} + +	return 0; +} + +int bcm4430_bluetooth_resume(struct platform_device *pdev) +{ +	int irq = gpio_to_irq(BT_HOST_WAKE_GPIO); +	enable_irq(irq); +	return 0; +} + +static struct platform_driver bcm20702_bluetooth_platform_driver = { +	.probe = bcm20702_bluetooth_probe, +	.remove = bcm20702_bluetooth_remove, +	.suspend = bcm4430_bluetooth_suspend, +	.resume = bcm4430_bluetooth_resume, +	.driver = { +		   .name = "bcm20702_bluetooth", +		   .owner = THIS_MODULE, +		   }, +}; + +static int __init bcm20702_bluetooth_init(void) +{ +	bt_enabled = false; +	return platform_driver_register(&bcm20702_bluetooth_platform_driver); +} + +static void __exit bcm20702_bluetooth_exit(void) +{ +	platform_driver_unregister(&bcm20702_bluetooth_platform_driver); +} + + +module_init(bcm20702_bluetooth_init); +module_exit(bcm20702_bluetooth_exit); + +MODULE_ALIAS("platform:bcm20702"); +MODULE_DESCRIPTION("bcm20702_bluetooth"); +MODULE_AUTHOR("Jaikumar Ganesh <jaikumar@google.com>"); +MODULE_LICENSE("GPL"); diff --git a/arch/arm/mach-omap2/board-omap3h1.c b/arch/arm/mach-omap2/board-omap3h1.c new file mode 100644 index 00000000000..a24b1fdda01 --- /dev/null +++ b/arch/arm/mach-omap2/board-omap3h1.c @@ -0,0 +1,256 @@ +/* + * Copyright (C) 2014 Olio Devices, Inc. + * Authors: Evan Wilson <evan@oliodevices.com> + *			Mattis Fjallstrom <mattis@oliodevices.com> + * + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * Modified from the original mach-omap/omap2/board-generic.c did by Paul + * to support the OMAP2+ device tree boards with an unique board file. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/delay.h> +#include <linux/err.h> +#include <linux/clk.h> +#include <linux/io.h> +#include <linux/opp.h> +#include <linux/cpu.h> +#include <linux/mpu.h> +#include <linux/spi/spi.h> +#include <linux/mtd/mtd.h> +#include <linux/mtd/partitions.h> +#include <linux/mtd/nand.h> + +#include <linux/regulator/machine.h> + +#include <linux/led-lm3530.h> + +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/mach/map.h> +#include <asm/mach/flash.h> + +#include <video/omapdss.h> +#include <video/omap-panel-data.h> +#include <linux/platform_data/mtd-nand-omap2.h> + +#include "common.h" +#include "omap_device.h" +#include "gpmc.h" +#include "soc.h" +#include "mux.h" +#include "pm.h" +#include "board-flash.h" +#include "common-board-devices.h" +#include "board-omap3h1.h" + +#define NAND_CS 0 +#define MPUIRQ_GPIO 31 +#define LCD_RESET_GPIO 122 + +static struct mtd_partition omap3h1_nand_partitions[] = { +	/* All the partition sizes are listed in terms of NAND block size */ +	{ +		.name		= "X-Loader", +		.offset		= 0, +		.size		= 4 * NAND_BLOCK_SIZE, +		.mask_flags	= MTD_WRITEABLE,	/* force read-only */ +	}, +	{ +		.name		= "U-Boot", +		.offset		= MTDPART_OFS_APPEND,	/* Offset = 0x80000 */ +		.size		= 15 * NAND_BLOCK_SIZE, +		.mask_flags	= MTD_WRITEABLE,	/* force read-only */ +	}, +	{ +		.name		= "U-Boot Env", +		.offset		= MTDPART_OFS_APPEND,	/* Offset = 0x260000 */ +		.size		= 1 * NAND_BLOCK_SIZE, +	}, +	{ +		.name		= "kernel", +		.offset		= MTDPART_OFS_APPEND,	/* Offset = 0x280000 */ +		.size		= 40 * NAND_BLOCK_SIZE, +	}, +	{ +		.name		= "initramfs", +		.offset		= MTDPART_OFS_APPEND, 	/* Offset = 0xC80000 */ +		.size		= 80 * NAND_BLOCK_SIZE, +	}, +	{ +		.name		= "ramdisk", +		.offset		= MTDPART_OFS_APPEND,	/* Offset = 0x1180000 */ +		.size		= 40 * NAND_BLOCK_SIZE, +	}, +	{ +		.name		= "system", +		.offset		= MTDPART_OFS_APPEND,	/* Offset = 0x1680000 */ +		.size		= 2000 * NAND_BLOCK_SIZE, +	}, +	{ +		.name		= "userdata", +		.offset		= MTDPART_OFS_APPEND,	/* Offset = 0x11180000 */ +		.size		= MTDPART_SIZ_FULL, +	}, +}; + +static struct omap_dss_device omap3h1_lcd_device = { +	.type				= OMAP_DISPLAY_TYPE_DPI, +	.name				= "olio_h1_panel", +	.driver_name 		= "ili9342_panel", +	.phy.dpi.data_lines = 18, +	.reset_gpio			= LCD_RESET_GPIO, +}; + +static struct omap_dss_device *omap3h1_dss_devices[] = { +		&omap3h1_lcd_device, +}; + +static struct omap_dss_board_info omap3h1_dss_data = { +	.num_devices 	= 1, +	.devices = omap3h1_dss_devices, +	.default_device = &omap3h1_lcd_device, +}; + +static struct spi_board_info omap3h1_spi_board_info[] __initdata = { +	{ +		.modalias		= "ili9342-spi", +		.bus_num		= 1, +		.chip_select 	= 1, +		.max_speed_hz 	= 375000, +		.platform_data	= &omap3h1_lcd_device, +		.mode			= SPI_MODE_0, +	} +}; + +static int __init omap3h1_spi_init(void) { +	spi_register_board_info(omap3h1_spi_board_info, +			ARRAY_SIZE(omap3h1_spi_board_info)); +	return 0; +} + +static struct mpu_platform_data mpu_data = { +	.int_config  = 0x00, +	.level_shifter = 0, +	.orientation = {  -1,  0,  0, +					   0,  1,  0, +					   0,  0, -1 }, +}; + +static struct lm3530_platform_data omap3h1_backlight_platform_data = { +	.mode = LM3530_BL_MODE_MANUAL, +	//.als_input_mode = LM3530_INPUT_ALS1, +	.max_current = LM3530_FS_CURR_12mA, +	//.pwm_pol_hi = true, +	//.als_avrg_time = LM3530_ALS_AVRG_TIME_512ms, +	.brt_ramp_law = 0, +	.brt_ramp_fall = LM3530_RAMP_TIME_2s, +	.brt_ramp_rise = LM3530_RAMP_TIME_2s, +	//.als1_resistor_sel = LM3530_ALS_IMPD_13_53kOhm, +	//.als2_resistor_sel = LM3530_ALS_IMPD_Z, +	//.als_vmin = 730,	/* mV */ +	//.als_vmax = 1020,	/* mV */ +	.brt_val = 0x40,	/* Max brightness */ +}; + +static struct platform_device bcm20702_bluetooth_device = { +	.name = "bcm20702_bluetooth", +	.id = -1, + }; + +static struct i2c_board_info __initdata omap3h1_i2c1_board_info[] = { +		{ +			I2C_BOARD_INFO("mpu6515", 0x68), +			// This is needed for the interrupt wake. IH_GPIO_BASE changed in 3.10 kernel +			//.irq = (IH_GPIO_BASE + MPUIRQ_GPIO), +			.platform_data = &mpu_data, +        }, +    	{ +    		/* Backlight */ +    		I2C_BOARD_INFO("lm3530-led", 0x38), +    		.platform_data = &omap3h1_backlight_platform_data, +    	}, +}; + +static int __init omap3_h1_i2c_init(void) +{ +	omap_register_i2c_bus(1, 400, omap3h1_i2c1_board_info, ARRAY_SIZE(omap3h1_i2c1_board_info)); +	return 0; +} + +static struct platform_device *omap3h1_devices[] __initdata = { +        &bcm20702_bluetooth_device, +}; + +#ifdef CONFIG_OMAP_MUX +static struct omap_board_mux board_mux[] __initdata = { +	OMAP3_MUX(HSUSB0_DIR, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), + +	OMAP3_MUX(DSS_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_HSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_VSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA8, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA9, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA10, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA11, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA12, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA13, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA14, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA15, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), + +	OMAP3_MUX(MCSPI1_CLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(MCSPI1_SIMO, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), +	OMAP3_MUX(MCSPI1_SOMI, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP), +	OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT), + +	{ .reg_offset = OMAP_MUX_TERMINATOR }, +}; +#endif + +static void __init omap3_h1_init(void) +{ +	omap3_mux_init(board_mux, OMAP_PACKAGE_CBP); + +	omap3_h1_i2c_init(); +	omap_display_init(&omap3h1_dss_data); +	omap_serial_init(); +	omap_sdrc_init(NULL, NULL); + +	board_nand_init(omap3h1_nand_partitions, +			ARRAY_SIZE(omap3h1_nand_partitions), NAND_CS, +			NAND_BUSWIDTH_16, NULL); + +	platform_add_devices(omap3h1_devices, ARRAY_SIZE(omap3h1_devices)); +	omap3h1_spi_init(); +	//h1_opp_init(); +} + +MACHINE_START(OMAP3_H1, "Olio OMAP3 H1 Board") +	.atag_offset	= 0x100, +	.reserve		= omap_reserve, +	.map_io			= omap3_map_io, +	.init_early		= omap3630_init_early, +	.init_irq		= omap3_init_irq, +	.handle_irq		= omap3_intc_handle_irq, +	.init_machine	= omap3_h1_init, +	.init_late		= omap3630_init_late, +	.init_time		= omap3_secure_sync32k_timer_init, +	//.dt_compat		= omap3_h1_boards_compat, +	.restart		= omap3xxx_restart, +MACHINE_END diff --git a/arch/arm/mach-omap2/board-omap3h1.h b/arch/arm/mach-omap2/board-omap3h1.h new file mode 100644 index 00000000000..343eaeaaf86 --- /dev/null +++ b/arch/arm/mach-omap2/board-omap3h1.h @@ -0,0 +1,30 @@ +/* + * Bluetooth Broadcomm  and low power control via GPIO + * + *  Copyright (C) 2011 Samsung, Inc. + *  Copyright (C) 2011 Google, Inc. + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  This program is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + * + */ + +#ifndef __BOARD_OMAP3H1__H__ +#define __BOARD_OMAP3H1__H__ + +#include <linux/serial_core.h> + +extern void bcm_bt_lpm_exit_lpm_locked(struct uart_port *uport); + +#endif /*  __BOARD_OMAP3H1_H__  */ diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c index 45cd26430d1..e823edd05eb 100644 --- a/arch/arm/mach-omap2/cclock3xxx_data.c +++ b/arch/arm/mach-omap2/cclock3xxx_data.c @@ -3540,6 +3540,10 @@ static struct omap_clk omap3xxx_clks[] = {  	CLK(NULL,	"timer_32k_ck",	&omap_32k_fck),  	CLK(NULL,	"timer_sys_ck",	&sys_ck),  	CLK(NULL,	"cpufreq_ck",	&dpll1_ck), +	CLK("cpufreq-cpu0.0", NULL,	&dpll1_ck), +	CLK("48307220.vc", NULL,	&osc_sys_ck), +	CLK("483072b0.vp", NULL,	&osc_sys_ck), +	CLK("483072d0.vp", NULL,	&osc_sys_ck),  };  static const char *enable_init_clks[] = { @@ -3550,8 +3554,10 @@ static const char *enable_init_clks[] = {  int __init omap3xxx_clk_init(void)  { -	if (omap3_has_192mhz_clk()) +	if (omap3_has_192mhz_clk()) {  		omap_96m_alwon_fck = omap_96m_alwon_fck_3630; +		omap_96m_alwon_fck_3630.hw->clk = &omap_96m_alwon_fck; +	}  	if (cpu_is_omap3630()) {  		dpll3_m3x2_ck = dpll3_m3x2_ck_3630; diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c index 2adb2683f07..ab5ec4b28ab 100644 --- a/arch/arm/mach-omap2/control.c +++ b/arch/arm/mach-omap2/control.c @@ -235,6 +235,32 @@ void omap3_ctrl_write_boot_mode(u8 bootmode)  	__raw_writel(l, OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD + 4));  } +/** + * omap3_enable_usim_IO - enable USIM block input/output buffers + * + * Enable USIM block input/output buffers.  By default the buffers are + * not enabled.  Once vdds is stable, they can be enabled.  They must + * be enabled before using any GPIOs from this block. + */ +void omap3_enable_usim_buffer(void) +{ +	u32 reg; +	/* +	 * Configure USIM pins for 1.8V control and disable high-z state +	 * CTRL_PBIAS_LITE = 0x20b +	 */ +	reg = omap_ctrl_readl(OMAP343X_CONTROL_PBIAS_LITE); +	reg |= (OMAP2_PBIASLITEVMODE0 | OMAP2_PBIASLITEPWRDNZ0); +	reg |= OMAP343X_PBIASLITEPWRDNZ1; +	reg &= ~OMAP343X_PBIASLITEVMODE1; +	reg &= ~OMAP2_PBIASSPEEDCTRL0; +	omap_ctrl_writel(reg, OMAP343X_CONTROL_PBIAS_LITE); + +	reg = omap_ctrl_readl(OMAP343X_CONTROL_WKUP_CTRL); +	reg |= OMAP343X_USIM_IO_PWRDNZ; +	omap_ctrl_writel(reg, OMAP343X_CONTROL_WKUP_CTRL); +} +  #endif  /** diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h index e6c328128a0..8698aed1e84 100644 --- a/arch/arm/mach-omap2/control.h +++ b/arch/arm/mach-omap2/control.h @@ -243,6 +243,9 @@  #define OMAP343X_CONTROL_WKUP_DEBOBS3 (OMAP343X_CONTROL_GENERAL_WKUP + 0x014)  #define OMAP343X_CONTROL_WKUP_DEBOBS4 (OMAP343X_CONTROL_GENERAL_WKUP + 0x018) +/* 34xx USIM register offsets */ +#define OMAP343X_CONTROL_WKUP_CTRL    (OMAP2_CONTROL_INTERFACE + 0x0A5C) +  /* 36xx-only RTA - Retention till Access control registers and bits */  #define OMAP36XX_CONTROL_MEM_RTA_CTRL	0x40C  #define OMAP36XX_RTA_DISABLE		0x0 @@ -323,6 +326,9 @@  #define OMAP343X_SCRATCHPAD_REGADDR(reg)	OMAP2_L4_IO_ADDRESS(\  						OMAP343X_SCRATCHPAD + reg) +/* CONTROL_WKUP bits */ +#define OMAP343X_USIM_IO_PWRDNZ         (1 << 6) +  /* AM35XX_CONTROL_IPSS_CLK_CTRL bits */  #define AM35XX_USBOTG_VBUSP_CLK_SHIFT	0  #define AM35XX_CPGMAC_VBUSP_CLK_SHIFT	1 @@ -390,6 +396,7 @@  #define		FEAT_NEON_NONE		1 +  #ifndef __ASSEMBLY__  #ifdef CONFIG_ARCH_OMAP2PLUS  extern void __iomem *omap_ctrl_base_get(void); @@ -417,6 +424,8 @@ extern void omap3630_ctrl_disable_rta(void);  extern int omap3_ctrl_save_padconf(void);  extern void omap2_set_globals_control(void __iomem *ctrl,  				      void __iomem *ctrl_pad); +/* called from board-minnow.c to enable USIM GPIOs */ +extern void omap3_enable_usim_buffer(void);  #else  #define omap_ctrl_base_get()		0  #define omap_ctrl_readb(x)		0 @@ -429,6 +438,5 @@ extern void omap2_set_globals_control(void __iomem *ctrl,  #define omap4_ctrl_pad_writel(x, y)	WARN_ON(1)  #endif  #endif	/* __ASSEMBLY__ */ -  #endif /* __ARCH_ARM_MACH_OMAP2_CONTROL_H */ diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index e18709d3b95..039fe44215d 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c @@ -86,7 +86,7 @@ static struct omap3_idle_statedata omap3_idle_data[] = {  	{  		.mpu_state = PWRDM_POWER_RET,  		.core_state = PWRDM_POWER_RET, -		.per_min_state = PWRDM_POWER_OFF, +		.per_min_state = PWRDM_POWER_RET,  	},  	{  		.mpu_state = PWRDM_POWER_OFF, @@ -131,7 +131,7 @@ static int omap3_enter_idle(struct cpuidle_device *dev,  		cpu_pm_enter();  	/* Execute ARM wfi */ -	omap_sram_idle(); +	omap_sram_idle(false);  	/*  	 * Call idle CPU PM enter notifier chain to restore diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 4269fc14569..9017d5ea9f3 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -633,6 +633,32 @@ static void __init omap_init_ocp2scp(void)  static inline void omap_init_ocp2scp(void) { }  #endif +#if defined(CONFIG_SGX_OMAP3630) +static struct platform_device mapphone_omaplfb_device = { +	.name	= "omaplfb", +	.id	= -1, +}; +static void __init omap_init_gpu(void) +{ +	struct omap_hwmod *oh; +	struct platform_device *pdev; +	const char *oh_name = "gpu"; +	const char *name = "pvrsrvkm"; +	oh = omap_hwmod_lookup(oh_name); +	if (!oh) { +		pr_err("%s: Could not look up %s\n", __func__, oh_name); +		return; +	} + +	pdev = omap_device_build(name, -1, oh, NULL, 0); +	WARN(IS_ERR(pdev), +	     "%s, Can't build omap_device for %s\n", __func__, name); +	if (platform_device_register(&mapphone_omaplfb_device) < 0) +		pr_err("%s: Could not register OMAP-LFB device\n", __func__); +} +#else +static inline void omap_init_gpu(void) { } +#endif  /*-------------------------------------------------------------------------*/  static int __init omap2_init_devices(void) @@ -662,6 +688,7 @@ static int __init omap2_init_devices(void)  	omap_init_rng();  	omap_init_vout();  	omap_init_ocp2scp(); +	omap_init_gpu();  	return 0;  } diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index ff37be1f6f9..d22833a0f2a 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c @@ -320,6 +320,10 @@ static enum omapdss_version __init omap_display_get_version(void)  		return OMAPDSS_VER_UNKNOWN;  } +#ifdef	CONFIG_OMAP2_DSS_RESET +static int reset_omap_dss(void); +#endif +  int __init omap_display_init(struct omap_dss_board_info *board_data)  {  	int r = 0; @@ -415,7 +419,9 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)  			return PTR_ERR(pdev);  		}  	} - +#ifdef	CONFIG_OMAP2_DSS_RESET +	reset_omap_dss(); +#endif  	return 0;  } @@ -564,3 +570,60 @@ int omap_dss_reset(struct omap_hwmod *oh)  	return r;  } + +#ifdef	CONFIG_OMAP2_DSS_RESET +#define	DSS_CLKS	4 +static int reset_omap_dss(void) +{ +	static const char * const clkstr[DSS_CLKS] = { +		"dss_ick", +		"dss1_alwon_fck", +		"dss2_alwon_fck", +		"dss_tv_fck" +	}; +	struct clk *clk[DSS_CLKS]; +	int i, r = 0, c = 0; +	struct omap_hwmod *oh_dss = omap_hwmod_lookup("dss_core"); +	struct omap_hwmod *oh_dispc = omap_hwmod_lookup("dss_dispc"); +	struct omap_hwmod *oh_dsi = omap_hwmod_lookup("dss_dsi1"); + +	WARN((!oh_dss || !oh_dispc || !oh_dsi), "Reset lost!"); + +	for (i = 0; i < DSS_CLKS; i++) { +		clk[i] = clk_get(NULL, clkstr[i]); +		if (!IS_ERR(clk[i])) { +			r = clk_prepare_enable(clk[i]); +			if (!r) +				continue; +			clk_put(clk[i]); +		} +		pr_warn("dss_core: failed enable %s\n", clkstr[i]); +		clk[i] = ERR_PTR(-ENOENT); +	} + +	/* +	 * clear DSS_CONTROL register to switch DSS clock sources to +	 * PRCM clock, if any +	 */ +	omap_hwmod_write(0x0, oh_dss, DSS_CONTROL); +	dispc_disable_outputs(); +	omap_hwmod_write(0x0, oh_dss, DSS_SDI_CONTROL); +	omap_hwmod_write(0x0, oh_dss, DSS_PLL_CONTROL); + +	omap_hwmod_write(0x02, oh_dss, DSS_SYSCONFIG); +	omap_test_timeout((omap_hwmod_read(oh_dss, DSS_SYSSTATUS) +				& SYSS_RESETDONE_MASK), +			MAX_MODULE_SOFTRESET_WAIT, c); +	r = (c == MAX_MODULE_SOFTRESET_WAIT) ? -ETIMEDOUT : 0; +	pr_warn("dss_core: reset DSS %s\n", r ? "failed" : "done"); + +	for (i = 0; i < DSS_CLKS; i++) { +		if (!IS_ERR(clk[i])) { +			clk_disable_unprepare(clk[i]); +			clk_put(clk[i]); +		} +	} + +	return r; +} +#endif diff --git a/arch/arm/mach-omap2/dss-common.c b/arch/arm/mach-omap2/dss-common.c index 393aeefaebb..d850864aa7f 100644 --- a/arch/arm/mach-omap2/dss-common.c +++ b/arch/arm/mach-omap2/dss-common.c @@ -249,3 +249,29 @@ void __init omap_4430sdp_display_init_of(void)  	omap_display_init(&sdp4430_dss_data);  } + +static struct omap_dss_device minnow_panel_lcd_device = { +	.name = "lcd", +	.driver_name = "minnow-panel", +	.type = OMAP_DISPLAY_TYPE_DSI, +	.data = NULL, +	.phy.dsi		= { +		.module		= 0, +	}, +	.channel		= OMAP_DSS_CHANNEL_LCD, +}; + +static struct omap_dss_device *minnow_panel_dss_devices[] = { +	&minnow_panel_lcd_device, +}; + +static struct omap_dss_board_info minnow_panel_dss_data = { +	.num_devices		= ARRAY_SIZE(minnow_panel_dss_devices), +	.devices		= minnow_panel_dss_devices, +	.default_device		= &minnow_panel_lcd_device, +}; + +void __init omap_minnow_display_init(void) +{ +	omap_display_init(&minnow_panel_dss_data); +} diff --git a/arch/arm/mach-omap2/dss-common.h b/arch/arm/mach-omap2/dss-common.h index 915f6fff510..c8d24f42f49 100644 --- a/arch/arm/mach-omap2/dss-common.h +++ b/arch/arm/mach-omap2/dss-common.h @@ -11,4 +11,6 @@ void __init omap4_panda_display_init_of(void);  void __init omap_4430sdp_display_init(void);  void __init omap_4430sdp_display_init_of(void); +void __init omap_minnow_display_init(void); +  #endif diff --git a/arch/arm/mach-omap2/i2c.c b/arch/arm/mach-omap2/i2c.c index d940e53dd9f..728ca6729a3 100644 --- a/arch/arm/mach-omap2/i2c.c +++ b/arch/arm/mach-omap2/i2c.c @@ -121,16 +121,6 @@ static int __init omap_i2c_nr_ports(void)  	return ports;  } -/* - * XXX This function is a temporary compatibility wrapper - only - * needed until the I2C driver can be converted to call - * omap_pm_set_max_dev_wakeup_lat() and handle a return code. - */ -static void omap_pm_set_max_mpu_wakeup_lat_compat(struct device *dev, long t) -{ -	omap_pm_set_max_mpu_wakeup_lat(dev, t); -} -  static const char name[] = "omap_i2c";  int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata, @@ -168,15 +158,6 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata,  	dev_attr = (struct omap_i2c_dev_attr *)oh->dev_attr;  	pdata->flags = dev_attr->flags; -	/* -	 * When waiting for completion of a i2c transfer, we need to -	 * set a wake up latency constraint for the MPU. This is to -	 * ensure quick enough wakeup from idle, when transfer -	 * completes. -	 * Only omap3 has support for constraints -	 */ -	if (cpu_is_omap34xx()) -		pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat;  	pdev = omap_device_build(name, bus_id, oh, pdata,  				 sizeof(struct omap_i2c_bus_platform_data));  	WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", name); diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index f82cf878d6a..776ca198119 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c @@ -425,6 +425,35 @@ static irqreturn_t omap_hwmod_mux_handle_irq(int irq, void *unused)  	return IRQ_HANDLED;  } +/** + * _omap_hwmod_mux_count + * + * Increment data if given hwmod has a mux configured + */ +static int _omap_hwmod_mux_count(struct omap_hwmod *oh, void *data) +{ +	int *count = (int *)data; + +	if (oh->mux) +		(*count)++; + +	return 0; +} + +/** + * omap_hwmod_mux_count + * + * Count the total number of muxes configured. + */ +static int omap_hwmod_mux_count(void) +{ +	int count = 0; + +	omap_hwmod_for_each(_omap_hwmod_mux_count, &count); + +	return count; +} +  /* Assumes the calling function takes care of locking */  void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)  { @@ -811,12 +840,17 @@ int __init omap_mux_late_init(void)  		}  	} -	ret = request_irq(omap_prcm_event_to_irq("io"), -		omap_hwmod_mux_handle_irq, IRQF_SHARED | IRQF_NO_SUSPEND, -			"hwmod_io", omap_mux_late_init); +	/* setup io interrupt handler if we have any configured mux'es */ +	if (omap_hwmod_mux_count()) { +		ret = request_irq(omap_prcm_event_to_irq("io"), +				omap_hwmod_mux_handle_irq, +				IRQF_SHARED | IRQF_NO_SUSPEND, +				"hwmod_io", omap_mux_late_init); -	if (ret) -		pr_warning("mux: Failed to setup hwmod io irq %d\n", ret); +		if (ret) +			pr_warning("mux: Failed to setup hwmod io irq %d\n", +					ret); +	}  	omap_mux_dbg_init(); diff --git a/arch/arm/mach-omap2/omap-pm-noop.c b/arch/arm/mach-omap2/omap-pm-noop.c index 6a3be2bebdd..aeb217bfab1 100644 --- a/arch/arm/mach-omap2/omap-pm-noop.c +++ b/arch/arm/mach-omap2/omap-pm-noop.c @@ -25,7 +25,6 @@  #include "omap_device.h"  #include "omap-pm.h" -static bool off_mode_enabled;  static int dummy_context_loss_counter;  /* @@ -281,28 +280,6 @@ unsigned long omap_pm_cpu_get_freq(void)  	return 0;  } -/** - * omap_pm_enable_off_mode - notify OMAP PM that off-mode is enabled - * - * Intended for use only by OMAP PM core code to notify this layer - * that off mode has been enabled. - */ -void omap_pm_enable_off_mode(void) -{ -	off_mode_enabled = true; -} - -/** - * omap_pm_disable_off_mode - notify OMAP PM that off-mode is disabled - * - * Intended for use only by OMAP PM core code to notify this layer - * that off mode has been disabled. - */ -void omap_pm_disable_off_mode(void) -{ -	off_mode_enabled = false; -} -  /*   * Device context loss tracking   */ @@ -320,12 +297,14 @@ int omap_pm_get_dev_context_loss_count(struct device *dev)  	if (dev->pm_domain == &omap_device_pm_domain) {  		count = omap_device_get_context_loss_count(pdev);  	} else { -		WARN_ONCE(off_mode_enabled, "omap_pm: using dummy context loss counter; device %s should be converted to omap_device", +		WARN_ONCE(omap_pm_get_off_mode(), +			"omap_pm: using dummy context loss counter; device %s " +			"should be converted to omap_device",  			  dev_name(dev));  		count = dummy_context_loss_counter; -		if (off_mode_enabled) { +		if (omap_pm_get_off_mode()) {  			count++;  			/*  			 * Context loss count has to be a non-negative value. diff --git a/arch/arm/mach-omap2/omap-pm.h b/arch/arm/mach-omap2/omap-pm.h index 67faa7b8fe9..4511a53b8e3 100644 --- a/arch/arm/mach-omap2/omap-pm.h +++ b/arch/arm/mach-omap2/omap-pm.h @@ -18,6 +18,7 @@  #include <linux/cpufreq.h>  #include <linux/clk.h>  #include <linux/opp.h> +#include <linux/power/omap_prm.h>  /*   * agent_id values for use with omap_pm_set_min_bus_tput(): @@ -346,7 +347,4 @@ unsigned long omap_pm_cpu_get_freq(void);   */  int omap_pm_get_dev_context_loss_count(struct device *dev); -void omap_pm_enable_off_mode(void); -void omap_pm_disable_off_mode(void); -  #endif diff --git a/arch/arm/mach-omap2/omap3-restart.c b/arch/arm/mach-omap2/omap3-restart.c index 923c582189e..92a177654e2 100644 --- a/arch/arm/mach-omap2/omap3-restart.c +++ b/arch/arm/mach-omap2/omap3-restart.c @@ -28,9 +28,40 @@   * Resets the SoC.  For @cmd, see the 'reboot' syscall in   * kernel/sys.c.  No return value.   */ + + +static int in_panic; + +static int panic_prep_restart(struct notifier_block *this, +			      unsigned long event, void *ptr) +{ +	in_panic = 1; +	return NOTIFY_DONE; +} + +static struct notifier_block panic_block = { +	.notifier_call	= panic_prep_restart, +}; +  void omap3xxx_restart(char mode, const char *cmd)  { +	if (cmd != NULL) { +		if ((strncmp(cmd, "bootloader", 10)) && +		    (strncmp(cmd, "recovery", 8))) +			cmd = NULL; +	} + +	if (in_panic) +		cmd = "panic"; +  	omap3_ctrl_write_boot_mode((cmd ? (u8)*cmd : 0));  	omap3xxx_prm_dpll3_reset(); /* never returns */  	while (1);  } + +static int __init omap3xxx_restart_init(void) +{ +	atomic_notifier_chain_register(&panic_notifier_list, &panic_block); +	return 0; +} +early_initcall(omap3xxx_restart_init); diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 7341eff63f5..5cc51234add 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -2015,7 +2015,7 @@ static int _reset(struct omap_hwmod *oh)   * XXX When the PRM code is moved to drivers, this function can be removed,   * as the PRM infrastructure should abstract this.   */ -static void _reconfigure_io_chain(void) +void _reconfigure_io_chain(void)  {  	unsigned long flags; diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index 0c898f58ac9..dd6852ff898 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h @@ -703,4 +703,6 @@ extern int am33xx_hwmod_init(void);  extern int __init omap_hwmod_register_links(struct omap_hwmod_ocp_if **ois); +void _reconfigure_io_chain(void); +  #endif diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 31c7126eb3b..7c5a6b81875 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c @@ -916,7 +916,8 @@ static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {  static struct omap_hwmod omap3xxx_gpio1_hwmod = {  	.name		= "gpio1", -	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET, +	.flags		= (HWMOD_CONTROL_OPT_CLKS_IN_RESET | +			   HWMOD_INIT_NO_RESET),  	.mpu_irqs	= omap2_gpio1_irqs,  	.main_clk	= "gpio1_ick",  	.opt_clks	= gpio1_opt_clks, @@ -941,7 +942,8 @@ static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {  static struct omap_hwmod omap3xxx_gpio2_hwmod = {  	.name		= "gpio2", -	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET, +	.flags		= (HWMOD_CONTROL_OPT_CLKS_IN_RESET | +			   HWMOD_INIT_NO_RESET),  	.mpu_irqs	= omap2_gpio2_irqs,  	.main_clk	= "gpio2_ick",  	.opt_clks	= gpio2_opt_clks, @@ -966,7 +968,8 @@ static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {  static struct omap_hwmod omap3xxx_gpio3_hwmod = {  	.name		= "gpio3", -	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET, +	.flags		= (HWMOD_CONTROL_OPT_CLKS_IN_RESET | +			   HWMOD_INIT_NO_RESET),  	.mpu_irqs	= omap2_gpio3_irqs,  	.main_clk	= "gpio3_ick",  	.opt_clks	= gpio3_opt_clks, @@ -991,7 +994,8 @@ static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {  static struct omap_hwmod omap3xxx_gpio4_hwmod = {  	.name		= "gpio4", -	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET, +	.flags		= (HWMOD_CONTROL_OPT_CLKS_IN_RESET | +			   HWMOD_INIT_NO_RESET),  	.mpu_irqs	= omap2_gpio4_irqs,  	.main_clk	= "gpio4_ick",  	.opt_clks	= gpio4_opt_clks, @@ -1021,7 +1025,8 @@ static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {  static struct omap_hwmod omap3xxx_gpio5_hwmod = {  	.name		= "gpio5", -	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET, +	.flags		= (HWMOD_CONTROL_OPT_CLKS_IN_RESET | +			   HWMOD_INIT_NO_RESET),  	.mpu_irqs	= omap3xxx_gpio5_irqs,  	.main_clk	= "gpio5_ick",  	.opt_clks	= gpio5_opt_clks, @@ -1051,7 +1056,8 @@ static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {  static struct omap_hwmod omap3xxx_gpio6_hwmod = {  	.name		= "gpio6", -	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET, +	.flags		= (HWMOD_CONTROL_OPT_CLKS_IN_RESET | +			   HWMOD_INIT_NO_RESET),  	.mpu_irqs	= omap3xxx_gpio6_irqs,  	.main_clk	= "gpio6_ick",  	.opt_clks	= gpio6_opt_clks, @@ -2181,6 +2187,80 @@ static struct omap_hwmod omap3xxx_gpmc_hwmod = {  			   HWMOD_NO_IDLEST),  }; +#ifdef	CONFIG_SGX_OMAP3630 +/* + * 'gpu' class + * 2d/3d graphics accelerator + */ + +static struct omap_hwmod_class_sysconfig omap3630_gpu_sysc = { +	.rev_offs	= 0xfe00, +	.sysc_offs	= 0xfe10, +	.sysc_flags	= (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | +			   SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO | +			   MSTANDBY_SMART | MSTANDBY_SMART_WKUP), +	.sysc_fields	= &omap_hwmod_sysc_type2, +}; + +static struct omap_hwmod_class omap3630_gpu_hwmod_class = { +	.name	= "gpu", +	.sysc	= &omap3630_gpu_sysc, +}; + +/* gpu */ +static struct omap_hwmod_irq_info omap3630_gpu_irqs[] = { +	{ .irq = 21 + OMAP_INTC_START }, +	{ .irq = -1 } +}; + +static struct omap_hwmod omap3630_gpu_hwmod = { +	.name		= "gpu", +	.class		= &omap3630_gpu_hwmod_class, +	.clkdm_name	= "sgx_clkdm", +	.mpu_irqs	= omap3630_gpu_irqs, +	.main_clk	= "sgx_fck", +	.prcm = { +		.omap2 = { +			.module_offs = OMAP3430ES2_SGX_MOD, +			.prcm_reg_id = 1, +			.idlest_reg_id = 1, +		}, +	}, +	.flags		= HWMOD_NO_IDLEST | HWMOD_NO_OCP_AUTOIDLE, +}; + +/* gpu -> l3_main */ +static struct omap_hwmod_ocp_if omap3630_gpu__l3_main = { +	.master         = &omap3630_gpu_hwmod, +	.slave          = &omap3xxx_l3_main_hwmod, +	.clk		= "core_l3_ick", +	.user           = OCP_USER_MPU | OCP_USER_SDMA, +}; + + +static struct omap_hwmod_addr_space omap3630_gpu_addrs[] = { +	{ +		.pa_start       = 0x50000000, +		.pa_end         = 0x5000ffff, +		.flags          = ADDR_TYPE_RT +	}, +	{ } +}; + +/* l3_main -> gpu interface */ +static struct omap_hwmod_ocp_if omap3630_l3_main__gpu = { +	.master         = &omap3xxx_l3_main_hwmod, +	.slave          = &omap3630_gpu_hwmod, +	.clk		= "sgx_ick", +	.addr           = omap3630_gpu_addrs, +	.user           = OCP_USER_MPU | OCP_USER_SDMA, +}; + + +#endif + +  /*   * interfaces   */ @@ -3830,6 +3910,10 @@ static struct omap_hwmod_ocp_if *omap36xx_hwmod_ocp_ifs[] __initdata = {  #ifdef CONFIG_OMAP_IOMMU_IVA2  	&omap3xxx_l3_main__mmu_iva,  #endif +#ifdef CONFIG_SGX_OMAP3630 +	&omap3630_l3_main__gpu, +	&omap3630_gpu__l3_main, +#endif  	NULL  }; diff --git a/arch/arm/mach-omap2/opp.c b/arch/arm/mach-omap2/opp.c index bd41d59a7ca..82fd8c72f75 100644 --- a/arch/arm/mach-omap2/opp.c +++ b/arch/arm/mach-omap2/opp.c @@ -17,6 +17,7 @@   * GNU General Public License for more details.   */  #include <linux/module.h> +#include <linux/of.h>  #include <linux/opp.h>  #include <linux/cpu.h> @@ -40,6 +41,9 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def,  {  	int i, r; +	if (of_have_populated_dt()) +		return -EINVAL; +  	if (!opp_def || !opp_def_size) {  		pr_err("%s: invalid params!\n", __func__);  		return -EINVAL; diff --git a/arch/arm/mach-omap2/pad_wkup.c b/arch/arm/mach-omap2/pad_wkup.c new file mode 100644 index 00000000000..021c5ff9737 --- /dev/null +++ b/arch/arm/mach-omap2/pad_wkup.c @@ -0,0 +1,167 @@ +/* + * OMAP3 Pad Wakeup Handler + * + * Copyright (C) 2014-2008 Motorola, LLC. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <linux/interrupt.h> +#include <linux/module.h> +#include <linux/list.h> +#include <linux/err.h> +#include <linux/wakeup_reason.h> + +#include "soc.h" +#include "common.h" +#include "mux34xx.h" +#include "prm3xxx.h" +#include "iomap.h" + +#include "pad_wkup.h" + +#define WAKEUPEVENT		0x8000 +struct offmode_wkup { +	struct list_head node; +	u32 irq; +	u32 pad; +	u32 pad_shift; +	bool handle; /* if true generate irq otherwise for debug only */ +}; +LIST_HEAD(offmode_wkup_list); + +static void omap_register_pad_wkup(struct device *dev, u32 pad, u32 irq, +		bool handle) +{ +	struct offmode_wkup *wkup; + +	pr_info("register pad (0x%04x, %u, %d)\n", pad, irq, handle); + +	wkup = devm_kzalloc(dev, sizeof(struct offmode_wkup), GFP_KERNEL); +	if (wkup) { +		wkup->irq = irq; +		wkup->pad = pad & 0xFFFFFFFC; +		wkup->pad_shift = pad % 4 ? 16 : 0; +		wkup->handle = handle; +		list_add_tail(&wkup->node, &offmode_wkup_list); +	} +} + +static inline int is_pad_wkup(const struct offmode_wkup *wkup) +{ +	int pad = __raw_readl( +		OMAP2_L4_IO_ADDRESS(OMAP3_CONTROL_PADCONF_MUX_PBASE)+ wkup->pad); +	pad = pad >> wkup->pad_shift; + +	return (pad & WAKEUPEVENT) ? 1 : 0; +} + +/* prcm_handle_pad_wkup: + * + *   map i/o pad wkup bits to interrupts.  The primary function is + *   to generate interrupts.  If the handle flag is set, then generate + *   interrupt.  If the wkup bit is set on multiple pads, interrupts + *   are generated for all.   The secondary function is to log the + *   Typically there should only be one wakeup event, but if there + *   are multiple wakeup reasons, only the first in the list will be + *   anointed "the" wakeup reason and logged.  This means the order + *   items are listed in the device tree will control which irq + *   wins in the case of a tie. + */ +void prcm_handle_pad_wkup(void) +{ +	struct offmode_wkup *wkup; +	int wkup_irq = -1; + +	list_for_each_entry(wkup, &offmode_wkup_list, node) { +		if (is_pad_wkup(wkup)) { +			pr_info("%s IRQ = %d\n", __func__, wkup->irq); +			if (wkup_irq < 0) +				wkup_irq = wkup->irq; +			if (wkup->handle) +				generic_handle_irq(wkup->irq); +		} +	} +	if (wkup_irq >= 0) +		log_wakeup_reason(wkup_irq); + +} + +#ifdef CONFIG_OMAP3_PAD_WKUP_IO +static irqreturn_t omap3_pad_wkup_handle_irq(int irq, void *unused) +{ +	prcm_handle_pad_wkup(); + +	return IRQ_HANDLED; +} +#endif + +static int omap3_pad_wkup_probe(struct platform_device *pdev) +{ +	struct device_node *node = pdev->dev.of_node; +	int ndx = 0; +	uint32_t pad, irq, handle; +	int ret = 0; + +	if (!node) +		return -ENODEV; + +	do { +		if (of_property_read_u32_index(node, "ti,pad_irq", ndx, &pad)) +			break; +		ndx++; +		if (of_property_read_u32_index(node, "ti,pad_irq", ndx, &irq)) +			break; +		ndx++; +		if (of_property_read_u32_index(node, "ti,pad_irq", ndx, +				&handle)) +			break; +		ndx++; +		omap_register_pad_wkup(&pdev->dev, pad, irq, handle); +	} while (1); + +#ifdef CONFIG_OMAP3_PAD_WKUP_IO +	if (ndx > 1) { +		dev_info(&pdev->dev, "request pad_wkup_io\n"); +		ret = request_irq(omap_prcm_event_to_irq("io"), +				omap3_pad_wkup_handle_irq, +				IRQF_SHARED | IRQF_NO_SUSPEND, +				"pad_wkup_io", &pdev->dev); + +		if (ret) +			pr_warning("wkup: Failed to setup pad_wkup_io irq %d\n", +				ret); +	} +#endif + +	return ret; +} + +static int omap3_pad_wkup_remove(struct platform_device *pdev) +{ +	return 0; +} + +static const struct of_device_id omap3_pad_wkup_table[] = { +	{ .compatible = "ti,pad-wkup", }, +	{ }, +}; +MODULE_DEVICE_TABLE(of, omap3_pad_wkup_table); + +static struct platform_driver omap3_pad_wkup_driver = { +	.probe = omap3_pad_wkup_probe, +	.remove = omap3_pad_wkup_remove, +	.driver = { +		.name = "omap3_pad_wkup", +		.owner = THIS_MODULE, +		.of_match_table = omap3_pad_wkup_table, +	}, +}; + +static int __init omap_pad_wkup_init(void) +{ +	return platform_driver_register(&omap3_pad_wkup_driver); +} +omap_late_initcall(omap_pad_wkup_init); diff --git a/arch/arm/mach-omap2/pad_wkup.h b/arch/arm/mach-omap2/pad_wkup.h new file mode 100644 index 00000000000..9a3b402e411 --- /dev/null +++ b/arch/arm/mach-omap2/pad_wkup.h @@ -0,0 +1,5 @@ +#ifndef __OMAP_PADWKUP_H__ +#define __OMAP_PADWKUP_H__ + +extern void prcm_handle_pad_wkup(void); +#endif diff --git a/arch/arm/mach-omap2/pm-debug-regs.c b/arch/arm/mach-omap2/pm-debug-regs.c new file mode 100644 index 00000000000..b006ae80974 --- /dev/null +++ b/arch/arm/mach-omap2/pm-debug-regs.c @@ -0,0 +1,532 @@ +/* + * Copyright (C) 2014 Motorola Mobility LLC + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * Work based on OMAP Power Management debug routines + * Copyright (C) 2005 Texas Instruments, Inc. + * Copyright (C) 2006-2008 Nokia Corporation + * + * Written by: + *   Richard Woodruff <r-woodruff2@ti.com> + *   Tony Lindgren + *   Juha Yrjola + *   Amit Kucheria <amit.kucheria@nokia.com> + *   Igor Stoppa <igor.stoppa@nokia.com> + *   Jouni Hogander + */ + +#include <linux/kernel.h> +#include <linux/sched.h> +#include <linux/clk.h> +#include <linux/err.h> +#include <linux/io.h> +#include <linux/module.h> +#include <linux/slab.h> + +#include "iomap.h" +#include "clock.h" +#include "powerdomain.h" +#include "clockdomain.h" +#include "omap-pm.h" + +#include "soc.h" +#include "cm2xxx_3xxx.h" +#include "prm3xxx.h" +#include "prm2xxx_3xxx.h" +#include "pm.h" + +#ifdef CONFIG_DEBUG_FS +#include <linux/debugfs.h> +#include <linux/seq_file.h> + +static struct dentry *pm_dbg_dir; +#endif + +struct pm_module_def { +	char name[8];           /* Name of the module     */ +	short type;             /* CM or PRM              */ +	unsigned short offset; +	int low; /* First register address on this module */ +	int high; /* Last register address on this module */ +}; + +#define MOD_CM 0 +#define MOD_PRM 1 + + +static const struct pm_module_def pm_dbg_reg_modules[] = { +	{ "IVA2", MOD_CM, OMAP3430_IVA2_MOD, 0, 0x4c }, +	{ "OCP",  MOD_CM, OCP_MOD, 0, 0x10 }, +	{ "MPU",  MOD_CM, MPU_MOD, 4, 0x4c }, +	{ "CORE", MOD_CM, CORE_MOD, 0, 0x4c }, +	{ "SGX",  MOD_CM, OMAP3430ES2_SGX_MOD, 0, 0x4c }, +	{ "WKUP", MOD_CM, WKUP_MOD, 0, 0x40 }, +	{ "CCR",  MOD_CM, PLL_MOD, 0, 0x70 }, +	{ "DSS",  MOD_CM, OMAP3430_DSS_MOD, 0, 0x4c }, +	{ "CAM",  MOD_CM, OMAP3430_CAM_MOD, 0, 0x4c }, +	{ "PER",  MOD_CM, OMAP3430_PER_MOD, 0, 0x4c }, +	{ "EMU",  MOD_CM, OMAP3430_EMU_MOD, 0x40, 0x54 }, +	{ "NEON", MOD_CM, OMAP3430_NEON_MOD, 0x20, 0x48 }, +	{ "USB",  MOD_CM, OMAP3430ES2_USBHOST_MOD, 0, 0x4c }, + +	{ "IVA2", MOD_PRM, OMAP3430_IVA2_MOD, 0x50, 0xfc }, +	{ "OCP",  MOD_PRM, OCP_MOD, 4, 0x1c }, +	{ "MPU",  MOD_PRM, MPU_MOD, 0x58, 0xe8 }, +	{ "CORE", MOD_PRM, CORE_MOD, 0x58, 0xf8 }, +	{ "SGX",  MOD_PRM, OMAP3430ES2_SGX_MOD, 0x58, 0xe8 }, +	{ "WKUP", MOD_PRM, WKUP_MOD, 0xa0, 0xb0 }, +	{ "CCR",  MOD_PRM, PLL_MOD, 0x40, 0x70 }, +	{ "DSS",  MOD_PRM, OMAP3430_DSS_MOD, 0x58, 0xe8 }, +	{ "CAM",  MOD_PRM, OMAP3430_CAM_MOD, 0x58, 0xe8 }, +	{ "PER",  MOD_PRM, OMAP3430_PER_MOD, 0x58, 0xe8 }, +	{ "EMU",  MOD_PRM, OMAP3430_EMU_MOD, 0x58, 0xe4 }, +	{ "GLBL", MOD_PRM, OMAP3430_GR_MOD, 0x20, 0xe4 }, +	{ "NEON", MOD_PRM, OMAP3430_NEON_MOD, 0x58, 0xe8 }, +	{ "USB",  MOD_PRM, OMAP3430ES2_USBHOST_MOD, 0x58, 0xe8 }, +	{ "", 0, 0, 0, 0 }, +}; + +#define PM_DBG_MAX_REG_SETS 4 + +static void *pm_dbg_reg_set[PM_DBG_MAX_REG_SETS] = {0}; + +static int pm_dbg_get_regset_size(void) +{ +	static int regset_size = 0; + +	if (regset_size == 0) { +		int i = 0; +		while (pm_dbg_reg_modules[i].name[0] != 0) { +			regset_size += pm_dbg_reg_modules[i].high + +				4 - pm_dbg_reg_modules[i].low; +			i++; +		} +	} +	return regset_size; +} + +static void pm_dbg_regset_store(u32 *ptr) +{ +	int i = 0; +	int j; +	u32 val; + +	while (pm_dbg_reg_modules[i].name[0] != 0) { +		for (j = pm_dbg_reg_modules[i].low; +			j <= pm_dbg_reg_modules[i].high; j += 4) { +			if (pm_dbg_reg_modules[i].type == MOD_CM) +				val = omap2_cm_read_mod_reg( +					pm_dbg_reg_modules[i].offset, j); +			else +				val = omap2_prm_read_mod_reg( +					pm_dbg_reg_modules[i].offset, j); +			*(ptr++) = val; +		} +		i++; +	} +} + +void pm_dbg_regs_copy(int tgt, int src) +{ +	size_t sz = pm_dbg_get_regset_size(); + +	pr_debug("saved reference copy %s(%d, %d) size = %u <- %pS\n", +		__func__, tgt, src, sz, __builtin_return_address(0)); +	memcpy(pm_dbg_reg_set[tgt - 1], pm_dbg_reg_set[src - 1], sz); +} + +void pm_dbg_regs_save(int reg_set) +{ +	if (pm_dbg_reg_set[reg_set - 1] == NULL) +		return; + +	pm_dbg_regset_store(pm_dbg_reg_set[reg_set - 1]); +} + +#ifdef CONFIG_DEBUG_FS +static int pm_dbg_show_regs(struct seq_file *s, void *unused) +{ +	int i, j; +	unsigned long val; +	int reg_set = (int)s->private; +	u32 *ptr; +	void *store = NULL; +	int regs; +	int linefeed; + +	if (!cpu_is_omap34xx()) +		return -EINVAL; + +	if (reg_set == 0) { +		store = kmalloc(pm_dbg_get_regset_size(), GFP_KERNEL); +		if (store == NULL) +			return -ENOMEM; +		ptr = store; +		pm_dbg_regset_store(ptr); +	} else { +		ptr = pm_dbg_reg_set[reg_set - 1]; +	} + +	i = 0; + +	while (pm_dbg_reg_modules[i].name[0] != 0) { +		regs = 0; +		linefeed = 0; +		if (pm_dbg_reg_modules[i].type == MOD_CM) +			seq_printf(s, "MOD: CM_%s (%08x)\n", +				pm_dbg_reg_modules[i].name, +				(u32)(OMAP3430_CM_BASE + +				pm_dbg_reg_modules[i].offset)); +		else +			seq_printf(s, "MOD: PRM_%s (%08x)\n", +				pm_dbg_reg_modules[i].name, +				(u32)(OMAP3430_PRM_BASE + +				pm_dbg_reg_modules[i].offset)); + +		for (j = pm_dbg_reg_modules[i].low; +			j <= pm_dbg_reg_modules[i].high; j += 4) { +			val = *(ptr++); +			if (val != 0) { +				regs++; +				if (linefeed) { +					seq_printf(s, "\n"); +					linefeed = 0; +				} +				seq_printf(s, "  %02x => %08lx", j, val); +				if (regs % 4 == 0) +					linefeed = 1; +			} +		} +		seq_printf(s, "\n"); +		i++; +	} + +	if (store != NULL) +		kfree(store); + +	return 0; +} + +#define WAKEUP_SOURCE_LEN 512 +void pm_dbg_show_wakeup_source(void) +{ +	u32 val = 0; +	int len = 0; +	static char buf[WAKEUP_SOURCE_LEN]; +	char *pbuf; +	u32 gpio_bit = 0; + +	/* print the real wkup sources */ +	memset(buf, 0, WAKEUP_SOURCE_LEN); +	pbuf = buf; +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (len > 16) +		pbuf += snprintf(pbuf, len, "WAKEDUP BY: "); + +	val = omap2_prm_read_mod_reg(WKUP_MOD, PM_WKST); +	val &= omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "WKUP_MOD(0x%x), ", val); + +	val = omap2_prm_read_mod_reg(CORE_MOD, PM_WKST1); +	val &= omap2_prm_read_mod_reg(CORE_MOD, PM_WKEN1); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "CORE_MOD(0x%x), ", val); + +	val = omap2_prm_read_mod_reg(CORE_MOD, OMAP3430ES2_PM_WKST3); +	val &= omap2_prm_read_mod_reg(CORE_MOD, OMAP3430ES2_PM_WKEN3); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "CORE3_MOD(0x%x), ", val); + +	val = omap2_prm_read_mod_reg(OMAP3430_PER_MOD, PM_WKST); +	val &= omap2_prm_read_mod_reg(OMAP3430_PER_MOD, PM_WKEN); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "PER_MOD(0x%x), ", val); + +	val = omap2_prm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, PM_WKST); +	val &= omap2_prm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, PM_WKEN); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "USBHOST(0x%x), ", val); + +	val = omap2_prm_read_mod_reg(OMAP3430_DSS_MOD, PM_WKST); +	val &= omap2_prm_read_mod_reg(OMAP3430_DSS_MOD, PM_WKEN); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "DSS(0x%x), ", val); + +	val = omap2_prm_read_mod_reg(OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); +	val &= omap2_prm_read_mod_reg(OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "MPU_IRQSTATUS(0x%x), ", val); + +	val = omap2_prm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_PRM_IRQSTATUS_IVA2); +	val &= omap2_prm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_PRM_IRQENABLE_IVA2); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "IVA2_IRQSTATUS(0x%x), ", val); + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x009C))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_FIQ0(0x%x), ", val); + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x00bC))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_FIQ1(0x%x), ", val); + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x00dC))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_FIQ2(0x%x), ", val); + + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x0098))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_IRQ0(0x%x), ", val); + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x00B8))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_IRQ1(0x%x), ", val); + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x00D8))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_IRQ2(0x%x), ", val); + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x009C))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_FIQ0(0x%x), ", val); + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x00BC))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_FIQ1(0x%x), ", val); + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x00DC))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_FIQ2(0x%x), ", val); + +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if ((val & (1<<29)) && len > 20) { +		gpio_bit = __raw_readl(OMAP2_L4_IO_ADDRESS(0x48310018)) & +			__raw_readl(OMAP2_L4_IO_ADDRESS(0x4831001C)); +		pbuf += snprintf(pbuf, len, "GPIO1(0x%x), ", gpio_bit); +	} +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if ((val & (1<<30)) && len > 20) { +		gpio_bit = __raw_readl(OMAP2_L4_IO_ADDRESS(0x49050018)) & +			__raw_readl(OMAP2_L4_IO_ADDRESS(0x4905001C)); +		pbuf += snprintf(pbuf, len, "GPIO2(0x%x), ", gpio_bit); +	} +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if ((val & (1<<31)) && len > 20) { +		gpio_bit = __raw_readl(OMAP2_L4_IO_ADDRESS(0x49052018)) & +			__raw_readl(OMAP2_L4_IO_ADDRESS(0x4905201C)); +		pbuf += snprintf(pbuf, len, "GPIO3(0x%x), ", gpio_bit); +	} + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x00b8))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_IRQ1(0x%x), ", val); + +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if ((val & (1<<0)) && len > 20) { +		gpio_bit = __raw_readl(OMAP2_L4_IO_ADDRESS(0x49054018)) & +			__raw_readl(OMAP2_L4_IO_ADDRESS(0x4905401C)); +		pbuf += snprintf(pbuf, len, "GPIO4(0x%x), ", gpio_bit); +	} +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if ((val & (1<<1)) && len > 20) { +		gpio_bit = __raw_readl(OMAP2_L4_IO_ADDRESS(0x49056018)) & +			__raw_readl(OMAP2_L4_IO_ADDRESS(0x4905601C)); +		pbuf += snprintf(pbuf, len, "GPIO5(0x%x), ", gpio_bit); +	} +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if ((val & (1<<2)) && len > 20) { +		gpio_bit = __raw_readl(OMAP2_L4_IO_ADDRESS(0x49058018)) & +			__raw_readl(OMAP2_L4_IO_ADDRESS(0x4905801C)); +		pbuf += snprintf(pbuf, len, "GPIO6(0x%x), ", gpio_bit); +	} + +	val = __raw_readl(OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE + (0x00d8))); +	len = WAKEUP_SOURCE_LEN - (pbuf - buf); +	if (val && len > 30) +		pbuf += snprintf(pbuf, len, "INTC_IRQ2(0x%x)", val); + +	pr_debug("%s\n", buf); + +} +EXPORT_SYMBOL(pm_dbg_show_wakeup_source); + +static int pm_dbg_reg_open(struct inode *inode, struct file *file) +{ +	return single_open(file, pm_dbg_show_regs, inode->i_private); +} + +static const struct file_operations debug_reg_fops = { +	.open           = pm_dbg_reg_open, +	.read           = seq_read, +	.llseek         = seq_lseek, +	.release        = single_release, +}; +#endif + +int pm_dbg_regs_dump(int reg_set) +{ +	int i, j; +	unsigned long val; +	u32 *ptr; +	int regs; + +	if ((reg_set <= 0) || (reg_set > PM_DBG_MAX_REG_SETS)) +		return -EINVAL; + +	ptr = pm_dbg_reg_set[reg_set - 1]; + +	i = 0; + +	while (pm_dbg_reg_modules[i].name[0] != 0) { +		regs = 0; +		if (pm_dbg_reg_modules[i].type == MOD_CM) +			pr_debug("MOD: CM_%s (%08x)\n", +				pm_dbg_reg_modules[i].name, +				(u32)(OMAP3430_CM_BASE + +				pm_dbg_reg_modules[i].offset)); +		else +			pr_debug("MOD: PRM_%s (%08x)\n", +				pm_dbg_reg_modules[i].name, +				(u32)(OMAP3430_PRM_BASE + +				pm_dbg_reg_modules[i].offset)); + +		for (j = pm_dbg_reg_modules[i].low; +			j <= pm_dbg_reg_modules[i].high; j += 4) { +			val = *(ptr++); +			if (val != 0) { +				regs++; +				pr_debug("  %02x => %08lx\n", j, val); +			} +		} +		i++; +	} + +	return 0; +} +EXPORT_SYMBOL(pm_dbg_regs_dump); + +int pm_dbg_regs_dump_delta(int cur, int ref) +{ +	int i, j; +	unsigned long val_cur; +	u32 *ptr_cur; +	unsigned long val_ref; +	u32 *ptr_ref; + +	if ((cur <= 0) || (cur > PM_DBG_MAX_REG_SETS) || +	    (ref <= 0) || (ref > PM_DBG_MAX_REG_SETS)) { +		return -EINVAL; +	} + +	ptr_cur = pm_dbg_reg_set[cur - 1]; +	ptr_ref = pm_dbg_reg_set[ref - 1]; + +	i = 0; + +	pr_debug("   module      ( address) reg        %d          %d\n", +			cur, ref); +	while (pm_dbg_reg_modules[i].name[0] != 0) { +		bool cm = pm_dbg_reg_modules[i].type == MOD_CM; +		u32 base_addr = cm ?  OMAP3430_CM_BASE : OMAP3430_PRM_BASE; + +		for (j = pm_dbg_reg_modules[i].low; +		     j <= pm_dbg_reg_modules[i].high; j += 4) { +			u32 addr = (u32)(base_addr + pm_dbg_reg_modules[i].offset); + +			val_cur = *(ptr_cur++); +			val_ref = *(ptr_ref++); +			if (val_cur != val_ref) { +				pr_debug("MOD: %s_%-4s %s(%08x) " +					"%02x => 0x%08lx 0x%08lx\n", +					cm ? "CM" : "PRM", +					pm_dbg_reg_modules[i].name, +					cm ? " " : "", +					addr, j, val_cur, val_ref); +			} +		} +		i++; +	} +	return 0; +} +EXPORT_SYMBOL(pm_dbg_regs_dump_delta); + +static void __init pm_dbg_regset_init(void) +{ +	int i; + +	for (i = 0; i < PM_DBG_MAX_REG_SETS; i++) { +		pm_dbg_reg_set[i] = +			kmalloc(pm_dbg_get_regset_size(), GFP_KERNEL); +	} +} + +#ifdef CONFIG_DEBUG_FS +int __init pm_dbg_regs_init(struct dentry *d) +{ +	int i; +	char name[2]; + +	if (!cpu_is_omap34xx()) { +		pr_err("%s: only OMAP3 supported\n", __func__); +		return -ENODEV; +	} + +	pm_dbg_dir = debugfs_create_dir("registers", d); +	if (IS_ERR(pm_dbg_dir)) +		return PTR_ERR(pm_dbg_dir); + +	(void) debugfs_create_file("current", S_IRUGO, +		pm_dbg_dir, (void *)0, &debug_reg_fops); + +	pm_dbg_regset_init(); +	for (i = 0; i < PM_DBG_MAX_REG_SETS; i++) { +		if (pm_dbg_reg_set[i] != NULL) { +			sprintf(name, "%d", i + 1); +			(void) debugfs_create_file(name, S_IRUGO, +				pm_dbg_dir, (void *)(i+1), &debug_reg_fops); +		} +	} + +	return 0; +} +#else +static int __init pm_dbg_regs_init(void) +{ +	if (!cpu_is_omap34xx()) { +		pr_err("%s: only OMAP3 supported\n", __func__); +		return -ENODEV; +	} + +	pm_dbg_regset_init(); +	return 0; +} +omap_arch_initcall(pm_dbg_regs_init); +#endif diff --git a/arch/arm/mach-omap2/pm-debug-regs.h b/arch/arm/mach-omap2/pm-debug-regs.h new file mode 100644 index 00000000000..f70bbe5c6a8 --- /dev/null +++ b/arch/arm/mach-omap2/pm-debug-regs.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2013 Motorola Mobility LLC + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + */ + +#ifndef __PM_DEBUG_REGS_H__ +#define __PM_DEBUG_REGS_H__ + +#include <linux/dcache.h> + +#ifdef CONFIG_PM_DEBUG +extern int  pm_dbg_regs_init(struct dentry *d); +extern void pm_dbg_regs_save(int reg_set); +extern void pm_dbg_regs_dump(int reg_set); +extern void pm_dbg_regs_dump_delta(int cur, int rfr); +extern void pm_dbg_show_wakeup_source(void); +extern void pm_dbg_regs_copy(int tgt, int src); +#else +static inline int pm_dbg_regs_init(struct dentry *d) { return 0; } +static inline void pm_dbg_regs_save(int reg_set) {}; +static inline void pm_dbg_regs_dump(int reg_set) {}; +static inline void pm_dbg_regs_dump_delta(int current, int ref) {} +static inline void pm_dbg_show_wakeup_source(void) {}; +static inline void pm_dbg_regs_copy(int tgt, int src) {}; +#endif + +#endif diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c index 0b339861d75..b5dff42606c 100644 --- a/arch/arm/mach-omap2/pm-debug.c +++ b/arch/arm/mach-omap2/pm-debug.c @@ -36,6 +36,7 @@  #include "cm2xxx_3xxx.h"  #include "prm2xxx_3xxx.h"  #include "pm.h" +#include "pm-debug-regs.h"  u32 enable_off_mode; @@ -226,9 +227,7 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *dir)  static int option_get(void *data, u64 *val)  { -	u32 *option = data; - -	*val = *option; +	*val = omap_pm_get_off_mode();  	return 0;  } @@ -273,6 +272,9 @@ static int __init pm_dbg_init(void)  	(void) debugfs_create_file("enable_off_mode", S_IRUGO | S_IWUSR, d,  				   &enable_off_mode, &pm_dbg_option_fops); + +	pm_dbg_regs_init(d); +  	pm_dbg_init_done = 1;  	return 0; diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index e742118fcfd..b06b22c3f64 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c @@ -17,6 +17,7 @@  #include <linux/export.h>  #include <linux/suspend.h>  #include <linux/cpu.h> +#include <linux/of_platform.h>  #include <asm/system_misc.h> @@ -227,6 +228,9 @@ static int omap_pm_begin(suspend_state_t state)  static void omap_pm_end(void)  {  	cpu_idle_poll_ctrl(false); + +	if (cpu_is_omap34xx()) +		omap_prcm_irq_complete();  }  static void omap_pm_finish(void) @@ -266,7 +270,12 @@ static void __init omap4_init_voltages(void)  static inline void omap_init_cpufreq(void)  { -	struct platform_device_info devinfo = { .name = "omap-cpufreq", }; +	struct platform_device_info devinfo = { }; + +	if (!of_have_populated_dt()) +		devinfo.name = "omap-cpufreq"; +	else +		devinfo.name = "cpufreq-cpu0";  	platform_device_register_full(&devinfo);  } @@ -300,10 +309,18 @@ int __init omap2_common_pm_late_init(void)  		/* Smartreflex device init */  		omap_devinit_smartreflex(); -		/* cpufreq dummy device instantiation */ -		omap_init_cpufreq(); +	} else { +		struct device_node *np; +		np = of_find_node_by_name(NULL, "omap_pimic"); +		if (np) { +			of_platform_populate(np, NULL, NULL, NULL); +			of_node_put(np); +		}  	} +	/* cpufreq dummy device instantiation */ +	omap_init_cpufreq(); +  #ifdef CONFIG_SUSPEND  	suspend_set_ops(&omap_pm_ops);  #endif diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 7bdd22afce6..4f6f52b5215 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h @@ -32,7 +32,7 @@ static inline int omap4_idle_init(void)  extern void *omap3_secure_ram_storage;  extern void omap3_pm_off_mode_enable(int); -extern void omap_sram_idle(void); +extern void omap_sram_idle(bool in_suspend);  extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused);  extern int (*omap_pm_suspend)(void); diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 5a2d8034c8d..6f67bfa0b03 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -30,15 +30,18 @@  #include <linux/slab.h>  #include <linux/omap-dma.h>  #include <linux/platform_data/gpio-omap.h> +#include <linux/pm_runtime.h>  #include <trace/events/power.h>  #include <asm/fncpy.h> +#include <asm/setup.h>  #include <asm/suspend.h>  #include <asm/system_misc.h>  #include "clockdomain.h"  #include "powerdomain.h" +#include "omap-pm.h"  #include "soc.h"  #include "common.h"  #include "cm3xxx.h" @@ -50,9 +53,17 @@  #include "sdrc.h"  #include "sram.h"  #include "control.h" +#include "pm-debug-regs.h" +#include "iomap.h" +#include "omap_device.h" + +#include "pad_wkup.h"  /* pm34xx errata defined in pm.h */  u16 pm34xx_errata; +bool suspend_debug; +bool suspend_offmode_ref_saved; +static struct timespec suspend_time_before;  struct power_state {  	struct powerdomain *pwrdm; @@ -70,6 +81,8 @@ void (*omap3_do_wfi_sram)(void);  static struct powerdomain *mpu_pwrdm, *neon_pwrdm;  static struct powerdomain *core_pwrdm, *per_pwrdm; +static struct powerdomain *dss_pwrdm; +static struct omap_hwmod *wd_hwmod;  static void omap3_core_save_context(void)  { @@ -144,6 +157,7 @@ static void omap3_save_secure_ram_context(void)   */  static int prcm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits)  { +	static struct clk *per_dpll_clk;  	u32 wkst, fclk, iclk, clken;  	u16 wkst_off = (regs == 3) ? OMAP3430ES2_PM_WKST3 : PM_WKST1;  	u16 fclk_off = (regs == 3) ? OMAP3430ES2_CM_FCLKEN3 : CM_FCLKEN1; @@ -156,6 +170,16 @@ static int prcm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits)  	wkst &= omap2_prm_read_mod_reg(module, grpsel_off);  	wkst &= ~ignore_bits;  	if (wkst) { +		if (module != WKUP_MOD) { +			if (per_dpll_clk == NULL) { +				per_dpll_clk = clk_get(NULL, "dpll4_ck"); +				if (per_dpll_clk == NULL) { +					pr_emerg("Unable to get dpll4_ck\n"); +					BUG(); +				} +			} +			clk_enable(per_dpll_clk); +		}  		iclk = omap2_cm_read_mod_reg(module, iclk_off);  		fclk = omap2_cm_read_mod_reg(module, fclk_off);  		while (wkst) { @@ -172,9 +196,20 @@ static int prcm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits)  			wkst = omap2_prm_read_mod_reg(module, wkst_off);  			wkst &= ~ignore_bits;  			c++; + +			/* Better to panic than to fade away */ +			if (c > 1000) { +				pr_emerg("FATAL: Unable to clear wkst " +					"wkst = 0x%08x module = 0x%04x " +					"regs = 0x%02x\n", +					wkst, module, regs); +				BUG(); +			}  		}  		omap2_cm_write_mod_reg(iclk, module, iclk_off);  		omap2_cm_write_mod_reg(fclk, module, fclk_off); +		if (module != WKUP_MOD) +			clk_disable(per_dpll_clk);  	}  	return c; @@ -184,6 +219,7 @@ static irqreturn_t _prcm_int_handle_io(int irq, void *unused)  {  	int c; +	_reconfigure_io_chain();  	c = prcm_clear_mod_irqs(WKUP_MOD, 1,  		~(OMAP3430_ST_IO_MASK | OMAP3430_ST_IO_CHAIN_MASK)); @@ -228,11 +264,21 @@ static void omap34xx_save_context(u32 *save)  static int omap34xx_do_sram_idle(unsigned long save_state)  { +	if (suspend_debug) { +		pr_debug("OMAP3_PRM_IRQENABLE_MPU_OFFSET 0x%08x\n", +			 omap2_prm_read_mod_reg(OCP_MOD, +				OMAP3_PRM_IRQENABLE_MPU_OFFSET)); +		omap_prcm_irq_restore(); +		pr_debug("OMAP3_PRM_IRQENABLE_MPU_OFFSET 0x%08x\n", +			 omap2_prm_read_mod_reg(OCP_MOD, +				OMAP3_PRM_IRQENABLE_MPU_OFFSET)); +	} +  	omap34xx_cpu_suspend(save_state);  	return 0;  } -void omap_sram_idle(void) +void omap_sram_idle(bool in_suspend)  {  	/* Variable to tell what needs to be saved and restored  	 * in omap_sram_idle*/ @@ -276,20 +322,29 @@ void omap_sram_idle(void)  	/* PER */  	if (per_next_state < PWRDM_POWER_ON) { -		per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0; +		per_going_off = (per_next_state == PWRDM_POWER_OFF) ? +			OFF_MODE : 0;  		omap2_gpio_prepare_for_idle(per_going_off);  	}  	/* CORE */  	if (core_next_state < PWRDM_POWER_ON) { +		_reconfigure_io_chain(); +		if (!in_suspend && wd_hwmod != NULL) +			platform_pm_suspend(&wd_hwmod->od->pdev->dev); +  		if (core_next_state == PWRDM_POWER_OFF) {  			omap3_core_save_context();  			omap3_cm_save_context(); -		} + +			omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, +						   WKUP_MOD, PM_WKEN); +			omap_prm_configure(true); +		} else +			omap_prm_configure(false);  	}  	omap3_intc_prepare_idle(); -  	/*  	 * On EMU/HS devices ROM code restores a SRDC value  	 * from scratchpad which has automatic self refresh on timeout @@ -302,6 +357,9 @@ void omap_sram_idle(void)  	    core_next_state == PWRDM_POWER_OFF)  		sdrc_pwr = sdrc_read_reg(SDRC_POWER); +	if (suspend_debug) +		pm_dbg_regs_save(1); +  	/*  	 * omap3_arm_context is the location where some ARM context  	 * get saved. The rest is placed on the stack, and restored @@ -314,6 +372,9 @@ void omap_sram_idle(void)  	else  		omap34xx_do_sram_idle(save_state); +	if (suspend_debug) +		pm_dbg_regs_save(2); +  	/* Restore normal SDRC POWER settings */  	if (cpu_is_omap3430() && omap_rev() >= OMAP3430_REV_ES3_0 &&  	    (omap_type() == OMAP2_DEVICE_TYPE_EMU || @@ -323,17 +384,26 @@ void omap_sram_idle(void)  	/* CORE */  	if (core_next_state < PWRDM_POWER_ON) { +		if (!in_suspend && wd_hwmod != NULL) +			platform_pm_resume(&wd_hwmod->od->pdev->dev); +  		core_prev_state = pwrdm_read_prev_pwrst(core_pwrdm);  		if (core_prev_state == PWRDM_POWER_OFF) {  			omap3_core_restore_context();  			omap3_cm_restore_context();  			omap3_sram_restore_context();  			omap2_sms_restore_context(); + +			if (unlikely(!suspend_offmode_ref_saved)) { +				suspend_offmode_ref_saved = true; +				pm_dbg_regs_copy(3, 1); +				pm_dbg_regs_copy(4, 2); +			} +		} +		if (core_next_state == PWRDM_POWER_OFF) { +			omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, +						     WKUP_MOD, PM_WKEN);  		} -		if (core_next_state == PWRDM_POWER_OFF) -			omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK, -					       OMAP3430_GR_MOD, -					       OMAP3_PRM_VOLTCTRL_OFFSET);  	}  	omap3_intc_resume_idle(); @@ -341,7 +411,8 @@ void omap_sram_idle(void)  	/* PER */  	if (per_next_state < PWRDM_POWER_ON) -		omap2_gpio_resume_after_idle(); +		omap2_gpio_resume_after_idle(in_suspend); +  }  static void omap3_pm_idle(void) @@ -351,7 +422,7 @@ static void omap3_pm_idle(void)  	trace_cpu_idle(1, smp_processor_id()); -	omap_sram_idle(); +	omap_sram_idle(false);  	trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id());  } @@ -361,6 +432,9 @@ static int omap3_pm_suspend(void)  {  	struct power_state *pwrst;  	int state, ret = 0; +	struct timespec after; + +	suspend_debug = true;  	/* Read current next_pwrsts */  	list_for_each_entry(pwrst, &pwrst_list, node) @@ -373,11 +447,18 @@ static int omap3_pm_suspend(void)  			goto restore;  	} +	read_persistent_clock(&suspend_time_before); +  	omap3_intc_suspend(); -	omap_sram_idle(); +	omap_sram_idle(true); + +	prcm_handle_pad_wkup();  restore: +	read_persistent_clock(&after); +	after = timespec_sub(after, suspend_time_before); +  	/* Restore next_pwrsts */  	list_for_each_entry(pwrst, &pwrst_list, node) {  		state = pwrdm_read_prev_pwrst(pwrst->pwrdm); @@ -388,11 +469,26 @@ restore:  		}  		omap_set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state);  	} -	if (ret) -		pr_err("Could not enter target state in pm_suspend\n"); -	else -		pr_info("Successfully put all powerdomains to target state\n"); +	if (ret) { +		pr_err("Could not enter target state in pm_suspend " +			"for %lu.%03lu seconds\n", after.tv_sec, +			after.tv_nsec / NSEC_PER_MSEC); +		if (suspend_offmode_ref_saved) { +			pm_dbg_regs_dump_delta(1, 3); +			pm_dbg_regs_dump_delta(2, 4); +		} else { +			pm_dbg_regs_dump(1); +			pm_dbg_regs_dump(2); +		} +	} else +		pr_info("Successfully put all powerdomains to target state " +			"for %lu.%03lu seconds\n", after.tv_sec, +			after.tv_nsec / NSEC_PER_MSEC); + +	pm_dbg_show_wakeup_source(); + +	suspend_debug = false;  	return ret;  } @@ -644,9 +740,15 @@ static void __init pm_errata_configure(void)  		pm34xx_errata |= PM_RTA_ERRATUM_i608;  		/* Enable the l2 cache toggling in sleep logic */  		enable_omap3630_toggle_l2_on_restore(); +  		if (omap_rev() < OMAP3630_REV_ES1_2) -			pm34xx_errata |= (PM_SDRC_WAKEUP_ERRATUM_i583 | -					  PM_PER_MEMORIES_ERRATUM_i582); +			pm34xx_errata |= PM_PER_MEMORIES_ERRATUM_i582; +#ifndef CONFIG_DISABLE_OMAP_ERRATA_i583 +			pm34xx_errata |= PM_SDRC_WAKEUP_ERRATUM_i583; +#endif +		if (meminfo.bank[0].size > 256 * (1024 * 1024)) +			pm34xx_errata |= PM_SDRC_WAKEUP_ERRATUM_i583; +  	} else if (cpu_is_omap34xx()) {  		pm34xx_errata |= PM_PER_MEMORIES_ERRATUM_i582;  	} @@ -700,10 +802,12 @@ int __init omap3_pm_init(void)  		ret = -EINVAL;  		goto err3;  	} +	wd_hwmod = omap_hwmod_lookup("wd_timer2");  	neon_pwrdm = pwrdm_lookup("neon_pwrdm");  	per_pwrdm = pwrdm_lookup("per_pwrdm");  	core_pwrdm = pwrdm_lookup("core_pwrdm"); +	dss_pwrdm = pwrdm_lookup("dss_pwrdm");  	neon_clkdm = clkdm_lookup("neon_clkdm");  	mpu_clkdm = clkdm_lookup("mpu_clkdm"); @@ -714,6 +818,9 @@ int __init omap3_pm_init(void)  	omap_pm_suspend = omap3_pm_suspend;  #endif +	if (omap_pm_get_off_mode()) +		omap3_pm_off_mode_enable(true); +  	arm_pm_idle = omap3_pm_idle;  	omap3_idle_init(); diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h index c7d355fafd2..bc83da73d18 100644 --- a/arch/arm/mach-omap2/prcm-common.h +++ b/arch/arm/mach-omap2/prcm-common.h @@ -487,6 +487,7 @@ extern int omap_prcm_register_chain_handler(  extern int omap_prcm_event_to_irq(const char *event);  extern void omap_prcm_irq_prepare(void);  extern void omap_prcm_irq_complete(void); +extern void omap_prcm_irq_restore(void);  # endif diff --git a/arch/arm/mach-omap2/prm2xxx.h b/arch/arm/mach-omap2/prm2xxx.h index 3194dd87e0e..8f16aecf92f 100644 --- a/arch/arm/mach-omap2/prm2xxx.h +++ b/arch/arm/mach-omap2/prm2xxx.h @@ -94,6 +94,9 @@   */  /* Register offsets appearing on both OMAP2 and OMAP3 */ +#define INTC_PENDING_IRQ0				0x0098 +#define INTC_PENDING_IRQ1				0x00b8 +#define INTC_PENDING_IRQ2				0x00d8  #define OMAP2_RM_RSTCTRL				0x0050  #define OMAP2_RM_RSTTIME				0x0054 diff --git a/arch/arm/mach-omap2/prm_common.c b/arch/arm/mach-omap2/prm_common.c index 228b850e632..c82aea6f358 100644 --- a/arch/arm/mach-omap2/prm_common.c +++ b/arch/arm/mach-omap2/prm_common.c @@ -216,6 +216,14 @@ void omap_prcm_irq_prepare(void)  	prcm_irq_setup->suspended = true;  } +void omap_prcm_irq_restore(void) +{ +	if (prcm_irq_setup->suspend_save_flag) { +		prcm_irq_setup->restore_irqen(prcm_irq_setup->saved_mask); +		prcm_irq_setup->ocp_barrier(); +	} +} +  void omap_prcm_irq_complete(void)  {  	prcm_irq_setup->suspended = false; diff --git a/arch/arm/mach-omap2/sdram-toshiba-hynix-numonyx.h b/arch/arm/mach-omap2/sdram-toshiba-hynix-numonyx.h new file mode 100644 index 00000000000..c7acdb8312d --- /dev/null +++ b/arch/arm/mach-omap2/sdram-toshiba-hynix-numonyx.h @@ -0,0 +1,66 @@ +/* + * SDRC register values for the Toshiba, Hynxi and Numonyx. + * These are common SDRC parameters for all vendors since we + * use the JEDEC JESD209A parameters. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef ARCH_ARM_MACH_OMAP2_SDRAM_TOSHIBA_HYNIX_NUMONYX + +#define ARCH_ARM_MACH_OMAP2_SDRAM_TOSHIBA_HYNIX_NUMONYX + +#include "sdrc.h" + +static struct omap_sdrc_params JEDEC_JESD209A_sdrc_params[] = { +	[0] = { +		.rate        = 200000000, +		.actim_ctrla = 0xE2E1B4C6, +		.actim_ctrlb = 0x00022228, +		.rfr_ctrl    = 0x0005E602, +		.mr          = 0x00000032, +	}, +	[1] = { +		.rate        = 100000000, +		.actim_ctrla = 0x7211B485, +		.actim_ctrlb = 0x00022214, +		.rfr_ctrl    = 0x0002DA02, +		.mr          = 0x00000032, +	}, +	[2] = { +		.rate        = 166000000, +		.actim_ctrla = 0xE2E1B4C6, +		.actim_ctrlb = 0x00022228, +		.rfr_ctrl    = 0x0004DD02, +		.mr          = 0x00000032, +	}, +	[3] = { +		.rate        = 83000000, +		.actim_ctrla = 0x7215B485, +		.actim_ctrlb = 0x00022214, +		.rfr_ctrl    = 0x00025602, +		.mr          = 0x00000032, +	}, +	[4] = { +		.rate        = 160000000, +		.actim_ctrla = 0xBA9DB4C6, +		.actim_ctrlb = 0x00022220, +		.rfr_ctrl    = 0x0004AE02, +		.mr	     = 0x00000032, +	}, +	[5] = { +		.rate        = 80000000, +		.actim_ctrla = 0x49512284, +		.actim_ctrlb = 0x0001120C, +		.rfr_ctrl    = 0x23E02, +		.mr	     = 0x00000032, +	}, +	[6] = { +		.rate        = 0 +	}, +}; + +#endif + diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index f6601563aa6..b570d93cbb7 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c @@ -22,6 +22,7 @@  #include <linux/clk.h>  #include <linux/io.h>  #include <linux/delay.h> +#include <linux/spinlock.h>  #include <linux/platform_device.h>  #include <linux/slab.h>  #include <linux/pm_runtime.h> @@ -81,7 +82,7 @@ static struct omap_uart_port_info omap_serial_default_info[] __initdata = {  };  #ifdef CONFIG_PM -static void omap_uart_enable_wakeup(struct device *dev, bool enable) +void omap_uart_enable_wakeup(struct device *dev, bool enable)  {  	struct platform_device *pdev = to_platform_device(dev);  	struct omap_device *od = to_omap_device(pdev); @@ -94,10 +95,35 @@ static void omap_uart_enable_wakeup(struct device *dev, bool enable)  	else  		omap_hwmod_disable_wakeup(od->hwmods[0]);  } +void omap_uart_remove_wakeup(struct device *dev) +{ +	struct platform_device *pdev = to_platform_device(dev); +	struct omap_device *od = to_omap_device(pdev); +	struct omap_hwmod *oh = od->hwmods[0]; +	u16 offs; +	unsigned long flags; + +	spin_lock_irqsave(&oh->_lock, flags); +	omap_hwmod_disable_wakeup(oh); +	if (oh->class->sysc) +		oh->class->sysc->sysc_flags &= ~SYSC_HAS_ENAWAKEUP; +	offs = (oh->prcm.omap2.prcm_reg_id == 3) ? +					OMAP3430ES2_PM_WKEN3 : PM_WKEN1; +	omap2_prm_clear_mod_reg_bits((1<<oh->prcm.omap2.module_bit), +				     oh->prcm.omap2.module_offs, offs); +	offs = (oh->prcm.omap2.prcm_reg_id == 3) ? +					OMAP3430ES2_PM_WKST3 : PM_WKST1; +	omap2_prm_set_mod_reg_bits((1<<oh->prcm.omap2.module_bit), +				   oh->prcm.omap2.module_offs, offs); +	spin_unlock_irqrestore(&oh->_lock, flags); +}  #else -static void omap_uart_enable_wakeup(struct device *dev, bool enable) +void omap_uart_enable_wakeup(struct device *dev, bool enable)  {} +void omap_uart_remove_wakeup(struct device *dev) +{ +}  #endif /* CONFIG_PM */  #ifdef CONFIG_OMAP_MUX diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index 9e51be96f63..8045a48c847 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile @@ -7,6 +7,7 @@ obj-y				:= dma-mapping.o extable.o fault.o init.o \  obj-$(CONFIG_MMU)		+= fault-armv.o flush.o idmap.o ioremap.o \  				   mmap.o pgd.o mmu.o +obj-$(CONFIG_DEBUG_RODATA)	+= rodata.o  ifneq ($(CONFIG_MMU),y)  obj-y				+= nommu.o diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index c465faca51b..90a130f98ac 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c @@ -33,6 +33,9 @@ static void __iomem *l2x0_base;  static DEFINE_RAW_SPINLOCK(l2x0_lock);  static u32 l2x0_way_mask;	/* Bitmask of active ways */  static u32 l2x0_size; +static u32 l2x0_cache_id; +static unsigned int l2x0_sets; +static unsigned int l2x0_ways;  static unsigned long sync_reg_offset = L2X0_CACHE_SYNC;  /* Aurora don't have the cache ID register available, so we have to @@ -49,6 +52,13 @@ struct l2x0_of_data {  static bool of_init = false; +static inline bool is_pl310_rev(int rev) +{ +	return (l2x0_cache_id & +		(L2X0_CACHE_ID_PART_MASK | L2X0_CACHE_ID_REV_MASK)) == +			(L2X0_CACHE_ID_PART_L310 | rev); +} +  static inline void cache_wait_way(void __iomem *reg, unsigned long mask)  {  	/* wait for cache operation by line or way to complete */ @@ -137,6 +147,23 @@ static void l2x0_cache_sync(void)  	raw_spin_unlock_irqrestore(&l2x0_lock, flags);  } +#ifdef CONFIG_PL310_ERRATA_727915 +static void l2x0_for_each_set_way(void __iomem *reg) +{ +	int set; +	int way; +	unsigned long flags; + +	for (way = 0; way < l2x0_ways; way++) { +		raw_spin_lock_irqsave(&l2x0_lock, flags); +		for (set = 0; set < l2x0_sets; set++) +			writel_relaxed((way << 28) | (set << 5), reg); +		cache_sync(); +		raw_spin_unlock_irqrestore(&l2x0_lock, flags); +	} +} +#endif +  static void __l2x0_flush_all(void)  {  	debug_writel(0x03); @@ -150,6 +177,13 @@ static void l2x0_flush_all(void)  {  	unsigned long flags; +#ifdef CONFIG_PL310_ERRATA_727915 +	if (is_pl310_rev(REV_PL310_R2P0)) { +		l2x0_for_each_set_way(l2x0_base + L2X0_CLEAN_INV_LINE_IDX); +		return; +	} +#endif +  	/* clean all ways */  	raw_spin_lock_irqsave(&l2x0_lock, flags);  	__l2x0_flush_all(); @@ -160,11 +194,20 @@ static void l2x0_clean_all(void)  {  	unsigned long flags; +#ifdef CONFIG_PL310_ERRATA_727915 +	if (is_pl310_rev(REV_PL310_R2P0)) { +		l2x0_for_each_set_way(l2x0_base + L2X0_CLEAN_LINE_IDX); +		return; +	} +#endif +  	/* clean all ways */  	raw_spin_lock_irqsave(&l2x0_lock, flags); +	debug_writel(0x03);  	writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_CLEAN_WAY);  	cache_wait_way(l2x0_base + L2X0_CLEAN_WAY, l2x0_way_mask);  	cache_sync(); +	debug_writel(0x00);  	raw_spin_unlock_irqrestore(&l2x0_lock, flags);  } @@ -323,65 +366,64 @@ static void l2x0_unlock(u32 cache_id)  void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)  {  	u32 aux; -	u32 cache_id;  	u32 way_size = 0; -	int ways;  	int way_size_shift = L2X0_WAY_SIZE_SHIFT;  	const char *type;  	l2x0_base = base;  	if (cache_id_part_number_from_dt) -		cache_id = cache_id_part_number_from_dt; +		l2x0_cache_id = cache_id_part_number_from_dt;  	else -		cache_id = readl_relaxed(l2x0_base + L2X0_CACHE_ID); +		l2x0_cache_id = readl_relaxed(l2x0_base + L2X0_CACHE_ID);  	aux = readl_relaxed(l2x0_base + L2X0_AUX_CTRL);  	aux &= aux_mask;  	aux |= aux_val;  	/* Determine the number of ways */ -	switch (cache_id & L2X0_CACHE_ID_PART_MASK) { +	switch (l2x0_cache_id & L2X0_CACHE_ID_PART_MASK) {  	case L2X0_CACHE_ID_PART_L310:  		if (aux & (1 << 16)) -			ways = 16; +			l2x0_ways = 16;  		else -			ways = 8; +			l2x0_ways = 8;  		type = "L310";  #ifdef CONFIG_PL310_ERRATA_753970  		/* Unmapped register. */  		sync_reg_offset = L2X0_DUMMY_REG;  #endif -		if ((cache_id & L2X0_CACHE_ID_RTL_MASK) <= L2X0_CACHE_ID_RTL_R3P0) +		if ((l2x0_cache_id & L2X0_CACHE_ID_RTL_MASK) <= L2X0_CACHE_ID_RTL_R3P0)  			outer_cache.set_debug = pl310_set_debug;  		break;  	case L2X0_CACHE_ID_PART_L210: -		ways = (aux >> 13) & 0xf; +		l2x0_ways = (aux >> 13) & 0xf;  		type = "L210";  		break;  	case AURORA_CACHE_ID:  		sync_reg_offset = AURORA_SYNC_REG; -		ways = (aux >> 13) & 0xf; -		ways = 2 << ((ways + 1) >> 2); +		l2x0_ways = (aux >> 13) & 0xf; +		l2x0_ways = 2 << ((l2x0_ways + 1) >> 2);  		way_size_shift = AURORA_WAY_SIZE_SHIFT;  		type = "Aurora";  		break;  	default:  		/* Assume unknown chips have 8 ways */ -		ways = 8; +		l2x0_ways = 8;  		type = "L2x0 series";  		break;  	} -	l2x0_way_mask = (1 << ways) - 1; +	l2x0_way_mask = (1 << l2x0_ways) - 1;  	/*  	 * L2 cache Size =  Way size * Number of ways  	 */  	way_size = (aux & L2X0_AUX_CTRL_WAY_SIZE_MASK) >> 17; -	way_size = 1 << (way_size + way_size_shift); +	way_size = SZ_1K << (way_size + way_size_shift); -	l2x0_size = ways * way_size * SZ_1K; +	l2x0_size = l2x0_ways * way_size; +	l2x0_sets = way_size / CACHE_LINE_SIZE;  	/*  	 * Check if l2x0 controller is already enabled. @@ -390,7 +432,7 @@ void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)  	 */  	if (!(readl_relaxed(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)) {  		/* Make sure that I&D is not locked down when starting */ -		l2x0_unlock(cache_id); +		l2x0_unlock(l2x0_cache_id);  		/* l2x0 controller is disabled */  		writel_relaxed(aux, l2x0_base + L2X0_AUX_CTRL); @@ -419,7 +461,7 @@ void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)  	printk(KERN_INFO "%s cache controller enabled\n", type);  	printk(KERN_INFO "l2x0: %d ways, CACHE_ID 0x%08x, AUX_CTRL 0x%08x, Cache size: %d B\n", -			ways, cache_id, aux, l2x0_size); +			l2x0_ways, l2x0_cache_id, aux, l2x0_size);  }  #ifdef CONFIG_OF diff --git a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S index d8fd4d4bd3d..7a3d3d8d98d 100644 --- a/arch/arm/mm/cache-v6.S +++ b/arch/arm/mm/cache-v6.S @@ -270,6 +270,11 @@ v6_dma_clean_range:   *	- end     - virtual end address of region   */  ENTRY(v6_dma_flush_range) +#ifdef CONFIG_CACHE_FLUSH_RANGE_LIMIT +	sub	r2, r1, r0 +	cmp	r2, #CONFIG_CACHE_FLUSH_RANGE_LIMIT +	bhi	v6_dma_flush_dcache_all +#endif  #ifdef CONFIG_DMA_CACHE_RWFO  	ldrb	r2, [r0]		@ read for ownership  	strb	r2, [r0]		@ write for ownership @@ -292,6 +297,18 @@ ENTRY(v6_dma_flush_range)  	mcr	p15, 0, r0, c7, c10, 4		@ drain write buffer  	mov	pc, lr +#ifdef CONFIG_CACHE_FLUSH_RANGE_LIMIT +v6_dma_flush_dcache_all: +	mov	r0, #0 +#ifdef HARVARD_CACHE +	mcr	p15, 0, r0, c7, c14, 0		@ D cache clean+invalidate +#else +	mcr	p15, 0, r0, c7, c15, 0		@ Cache clean+invalidate +#endif +	mcr	p15, 0, r0, c7, c10, 4		@ drain write buffer +	mov	pc, lr +#endif +  /*   *	dma_map_area(start, size, dir)   *	- start	- kernel virtual start address diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c index 5dbf13f954f..b835c9e3b77 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c @@ -276,10 +276,10 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)  		local_irq_enable();  	/* -	 * If we're in an interrupt or have no user +	 * If we're in an interrupt, or have no irqs, or have no user  	 * context, we must not take the fault..  	 */ -	if (in_atomic() || !mm) +	if (in_atomic() || irqs_disabled() || !mm)  		goto no_context;  	/* diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 4d409e6a552..bcfc6ffb90c 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -595,25 +595,47 @@ static void __init *early_alloc(unsigned long sz)  	return early_alloc_aligned(sz, sz);  } -static pte_t * __init early_pte_alloc(pmd_t *pmd, unsigned long addr, unsigned long prot) +static pte_t * __init early_pte_alloc(pmd_t *pmd) +{ +	if (pmd_none(*pmd) || pmd_bad(*pmd)) +		return early_alloc(PTE_HWTABLE_OFF + PTE_HWTABLE_SIZE); +	return pmd_page_vaddr(*pmd); +} + +static void __init early_pte_install(pmd_t *pmd, pte_t *pte, unsigned long prot) +{ +	__pmd_populate(pmd, __pa(pte), prot); +	BUG_ON(pmd_bad(*pmd)); +} + +#ifdef CONFIG_HIGHMEM +static pte_t * __init early_pte_alloc_and_install(pmd_t *pmd, +	unsigned long addr, unsigned long prot)  {  	if (pmd_none(*pmd)) { -		pte_t *pte = early_alloc(PTE_HWTABLE_OFF + PTE_HWTABLE_SIZE); -		__pmd_populate(pmd, __pa(pte), prot); +		pte_t *pte = early_pte_alloc(pmd); +		early_pte_install(pmd, pte, prot);  	}  	BUG_ON(pmd_bad(*pmd));  	return pte_offset_kernel(pmd, addr);  } +#endif  static void __init alloc_init_pte(pmd_t *pmd, unsigned long addr,  				  unsigned long end, unsigned long pfn,  				  const struct mem_type *type)  { -	pte_t *pte = early_pte_alloc(pmd, addr, type->prot_l1); +	pte_t *start_pte = early_pte_alloc(pmd); +	pte_t *pte = start_pte + pte_index(addr); + +	/* If replacing a section mapping, the whole section must be replaced */ +	BUG_ON(!pmd_none(*pmd) && pmd_bad(*pmd) && ((addr | end) & ~PMD_MASK)); +  	do {  		set_pte_ext(pte, pfn_pte(pfn, __pgprot(type->prot_pte)), 0);  		pfn++;  	} while (pte++, addr += PAGE_SIZE, addr != end); +	early_pte_install(pmd, start_pte, type->prot_l1);  }  static void __init __map_init_section(pmd_t *pmd, unsigned long addr, @@ -645,7 +667,8 @@ static void __init __map_init_section(pmd_t *pmd, unsigned long addr,  static void __init alloc_init_pmd(pud_t *pud, unsigned long addr,  				      unsigned long end, phys_addr_t phys, -				      const struct mem_type *type) +				      const struct mem_type *type, +				      bool force_pages)  {  	pmd_t *pmd = pmd_offset(pud, addr);  	unsigned long next; @@ -662,7 +685,8 @@ static void __init alloc_init_pmd(pud_t *pud, unsigned long addr,  		 * aligned to a section boundary.  		 */  		if (type->prot_sect && -				((addr | next | phys) & ~SECTION_MASK) == 0) { +				((addr | next | phys) & ~SECTION_MASK) == 0 && +				!force_pages) {  			__map_init_section(pmd, addr, next, phys, type);  		} else {  			alloc_init_pte(pmd, addr, next, @@ -675,14 +699,15 @@ static void __init alloc_init_pmd(pud_t *pud, unsigned long addr,  }  static void __init alloc_init_pud(pgd_t *pgd, unsigned long addr, -	unsigned long end, unsigned long phys, const struct mem_type *type) +	unsigned long end, unsigned long phys, const struct mem_type *type, +	bool force_pages)  {  	pud_t *pud = pud_offset(pgd, addr);  	unsigned long next;  	do {  		next = pud_addr_end(addr, end); -		alloc_init_pmd(pud, addr, next, phys, type); +		alloc_init_pmd(pud, addr, next, phys, type, force_pages);  		phys += next - addr;  	} while (pud++, addr = next, addr != end);  } @@ -756,7 +781,7 @@ static void __init create_36bit_mapping(struct map_desc *md,   * offsets, and we take full advantage of sections and   * supersections.   */ -static void __init create_mapping(struct map_desc *md) +static void __init create_mapping(struct map_desc *md, bool force_pages)  {  	unsigned long addr, length, end;  	phys_addr_t phys; @@ -806,7 +831,7 @@ static void __init create_mapping(struct map_desc *md)  	do {  		unsigned long next = pgd_addr_end(addr, end); -		alloc_init_pud(pgd, addr, next, phys, type); +		alloc_init_pud(pgd, addr, next, phys, type, force_pages);  		phys += next - addr;  		addr = next; @@ -828,7 +853,7 @@ void __init iotable_init(struct map_desc *io_desc, int nr)  	svm = early_alloc_aligned(sizeof(*svm) * nr, __alignof__(*svm));  	for (md = io_desc; nr; md++, nr--) { -		create_mapping(md); +		create_mapping(md, false);  		vm = &svm->vm;  		vm->addr = (void *)(md->virtual & PAGE_MASK); @@ -949,7 +974,7 @@ void __init debug_ll_io_init(void)  	map.virtual &= PAGE_MASK;  	map.length = PAGE_SIZE;  	map.type = MT_DEVICE; -	create_mapping(&map); +	create_mapping(&map, false);  }  #endif @@ -994,6 +1019,28 @@ void __init sanity_check_meminfo(void)  		struct membank *bank = &meminfo.bank[j];  		*bank = meminfo.bank[i]; +#ifdef CONFIG_SPARSEMEM +		if (pfn_to_section_nr(bank_pfn_start(bank)) != +		    pfn_to_section_nr(bank_pfn_end(bank) - 1)) { +			phys_addr_t sz; +			unsigned long start_pfn = bank_pfn_start(bank); +			unsigned long end_pfn = SECTION_ALIGN_UP(start_pfn + 1); +			sz = ((phys_addr_t)(end_pfn - start_pfn) << PAGE_SHIFT); + +			if (meminfo.nr_banks >= NR_BANKS) { +				pr_crit("NR_BANKS too low, ignoring %lld bytes of memory\n", +					(unsigned long long)(bank->size - sz)); +			} else { +				memmove(bank + 1, bank, +					(meminfo.nr_banks - i) * sizeof(*bank)); +				meminfo.nr_banks++; +				bank[1].size -= sz; +				bank[1].start = __pfn_to_phys(end_pfn); +			} +			bank->size = sz; +		} +#endif +  		if (bank->start > ULONG_MAX)  			highmem = 1; @@ -1191,7 +1238,7 @@ static void __init devicemaps_init(struct machine_desc *mdesc)  	map.virtual = MODULES_VADDR;  	map.length = ((unsigned long)_etext - map.virtual + ~SECTION_MASK) & SECTION_MASK;  	map.type = MT_ROM; -	create_mapping(&map); +	create_mapping(&map, false);  #endif  	/* @@ -1202,14 +1249,14 @@ static void __init devicemaps_init(struct machine_desc *mdesc)  	map.virtual = FLUSH_BASE;  	map.length = SZ_1M;  	map.type = MT_CACHECLEAN; -	create_mapping(&map); +	create_mapping(&map, false);  #endif  #ifdef FLUSH_BASE_MINICACHE  	map.pfn = __phys_to_pfn(FLUSH_BASE_PHYS + SZ_1M);  	map.virtual = FLUSH_BASE_MINICACHE;  	map.length = SZ_1M;  	map.type = MT_MINICLEAN; -	create_mapping(&map); +	create_mapping(&map, false);  #endif  	/* @@ -1221,12 +1268,12 @@ static void __init devicemaps_init(struct machine_desc *mdesc)  	map.virtual = 0xffff0000;  	map.length = PAGE_SIZE;  	map.type = MT_HIGH_VECTORS; -	create_mapping(&map); +	create_mapping(&map, false);  	if (!vectors_high()) {  		map.virtual = 0;  		map.type = MT_LOW_VECTORS; -		create_mapping(&map); +		create_mapping(&map, false);  	}  	/* @@ -1252,20 +1299,23 @@ static void __init devicemaps_init(struct machine_desc *mdesc)  static void __init kmap_init(void)  {  #ifdef CONFIG_HIGHMEM -	pkmap_page_table = early_pte_alloc(pmd_off_k(PKMAP_BASE), +	pkmap_page_table = early_pte_alloc_and_install(pmd_off_k(PKMAP_BASE),  		PKMAP_BASE, _PAGE_KERNEL_TABLE);  #endif  } +  static void __init map_lowmem(void)  {  	struct memblock_region *reg; +	phys_addr_t start; +	phys_addr_t end; +	struct map_desc map;  	/* Map all the lowmem memory banks. */  	for_each_memblock(memory, reg) { -		phys_addr_t start = reg->base; -		phys_addr_t end = start + reg->size; -		struct map_desc map; +		start = reg->base; +		end = start + reg->size;  		if (end > arm_lowmem_limit)  			end = arm_lowmem_limit; @@ -1277,8 +1327,20 @@ static void __init map_lowmem(void)  		map.length = end - start;  		map.type = MT_MEMORY; -		create_mapping(&map); +		create_mapping(&map, false);  	} + +#ifdef CONFIG_DEBUG_RODATA +	start = __pa(_stext) & PMD_MASK; +	end = ALIGN(__pa(__end_rodata), PMD_SIZE); + +	map.pfn = __phys_to_pfn(start); +	map.virtual = __phys_to_virt(start); +	map.length = end - start; +	map.type = MT_MEMORY; + +	create_mapping(&map, true); +#endif  }  /* diff --git a/arch/arm/mm/rodata.c b/arch/arm/mm/rodata.c new file mode 100644 index 00000000000..9a8eb841c42 --- /dev/null +++ b/arch/arm/mm/rodata.c @@ -0,0 +1,159 @@ +/* + *  linux/arch/arm/mm/rodata.c + * + *  Copyright (C) 2011 Google, Inc. + * + *  Author: Colin Cross <ccross@android.com> + * + *  Based on x86 implementation in arch/x86/mm/init_32.c + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <linux/kernel.h> +#include <linux/mm.h> +#include <linux/module.h> + +#include <asm/cache.h> +#include <asm/pgtable.h> +#include <asm/rodata.h> +#include <asm/sections.h> +#include <asm/tlbflush.h> + +#include "mm.h" + +static int kernel_set_to_readonly __read_mostly; + +#ifdef CONFIG_DEBUG_RODATA_TEST +static const int rodata_test_data = 0xC3; + +static noinline void rodata_test(void) +{ +	int result; + +	pr_info("%s: attempting to write to read-only section:\n", __func__); + +	if (*(volatile int *)&rodata_test_data != 0xC3) { +		pr_err("read only data changed before test\n"); +		return; +	} + +	/* +	 * Attempt to to write to rodata_test_data, trapping the expected +	 * data abort.  If the trap executed, result will be 1.  If it didn't, +	 * result will be 0xFF. +	 */ +	asm volatile( +		"0:	str	%[zero], [%[rodata_test_data]]\n" +		"	mov	%[result], #0xFF\n" +		"	b	2f\n" +		"1:	mov	%[result], #1\n" +		"2:\n" + +		/* Exception fixup - if store at label 0 faults, jumps to 1 */ +		".pushsection __ex_table, \"a\"\n" +		"	.long	0b, 1b\n" +		".popsection\n" + +		: [result] "=r" (result) +		: [rodata_test_data] "r" (&rodata_test_data), [zero] "r" (0) +		: "memory" +	); + +	if (result == 1) +		pr_info("write to read-only section trapped, success\n"); +	else +		pr_err("write to read-only section NOT trapped, test failed\n"); + +	if (*(volatile int *)&rodata_test_data != 0xC3) +		pr_err("read only data changed during write\n"); +} +#else +static inline void rodata_test(void) { } +#endif + +static int set_page_attributes(unsigned long virt, int numpages, +	pte_t (*f)(pte_t)) +{ +	pmd_t *pmd; +	pte_t *pte; +	unsigned long start = virt; +	unsigned long end = virt + (numpages << PAGE_SHIFT); +	unsigned long pmd_end; + +	while (virt < end) { +		pmd = pmd_off_k(virt); +		pmd_end = min(ALIGN(virt + 1, PMD_SIZE), end); + +		if ((pmd_val(*pmd) & PMD_TYPE_MASK) != PMD_TYPE_TABLE) { +			pr_err("%s: pmd %p=%08lx for %08lx not page table\n", +				__func__, pmd, pmd_val(*pmd), virt); +			virt = pmd_end; +			continue; +		} + +		while (virt < pmd_end) { +			pte = pte_offset_kernel(pmd, virt); +			set_pte_ext(pte, f(*pte), 0); +			virt += PAGE_SIZE; +		} +	} + +	flush_tlb_kernel_range(start, end); + +	return 0; +} + +int set_memory_ro(unsigned long virt, int numpages) +{ +	return set_page_attributes(virt, numpages, pte_wrprotect); +} +EXPORT_SYMBOL(set_memory_ro); + +int set_memory_rw(unsigned long virt, int numpages) +{ +	return set_page_attributes(virt, numpages, pte_mkwrite); +} +EXPORT_SYMBOL(set_memory_rw); + +void set_kernel_text_rw(void) +{ +	unsigned long start = PAGE_ALIGN((unsigned long)_text); +	unsigned long size = PAGE_ALIGN((unsigned long)__end_rodata) - start; + +	if (!kernel_set_to_readonly) +		return; + +	pr_debug("Set kernel text: %lx - %lx to read-write\n", +		 start, start + size); + +	set_memory_rw(start, size >> PAGE_SHIFT); +} + +void set_kernel_text_ro(void) +{ +	unsigned long start = PAGE_ALIGN((unsigned long)_text); +	unsigned long size = PAGE_ALIGN((unsigned long)__end_rodata) - start; + +	if (!kernel_set_to_readonly) +		return; + +	pr_info_once("Write protecting the kernel text section %lx - %lx\n", +		start, start + size); + +	pr_debug("Set kernel text: %lx - %lx to read only\n", +		 start, start + size); + +	set_memory_ro(start, size >> PAGE_SHIFT); +} + +void mark_rodata_ro(void) +{ +	kernel_set_to_readonly = 1; + +	set_kernel_text_ro(); + +	rodata_test(); +} diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index a10297da122..c2fa3ad5270 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types @@ -274,6 +274,7 @@ omap2evm		MACH_OMAP2EVM		OMAP2EVM		1534  omap3evm		MACH_OMAP3EVM		OMAP3EVM		1535  dns323			MACH_DNS323		DNS323			1542  omap3_beagle		MACH_OMAP3_BEAGLE	OMAP3_BEAGLE		1546 +omap3_h1		MACH_OMAP3_H1		OMAP3_H1	1547  nokia_n810		MACH_NOKIA_N810		NOKIA_N810		1548  pcm038			MACH_PCM038		PCM038			1551  sg310			MACH_SG310		SG310			1564 @@ -1007,3 +1008,4 @@ eco5_bx2		MACH_ECO5_BX2		ECO5_BX2		4572  eukrea_cpuimx28sd	MACH_EUKREA_CPUIMX28SD	EUKREA_CPUIMX28SD	4573  domotab			MACH_DOMOTAB		DOMOTAB			4574  pfla03			MACH_PFLA03		PFLA03			4575 +minnow                  MACH_MINNOW             MINNOW                  4799 diff --git a/arch/arm64/include/asm/cmpxchg.h b/arch/arm64/include/asm/cmpxchg.h index 8a8ce0e73a3..a8b44cad39d 100644 --- a/arch/arm64/include/asm/cmpxchg.h +++ b/arch/arm64/include/asm/cmpxchg.h @@ -158,17 +158,23 @@ static inline unsigned long __cmpxchg_mb(volatile void *ptr, unsigned long old,  	return ret;  } -#define cmpxchg(ptr,o,n)						\ -	((__typeof__(*(ptr)))__cmpxchg_mb((ptr),			\ -					  (unsigned long)(o),		\ -					  (unsigned long)(n),		\ -					  sizeof(*(ptr)))) +#define cmpxchg(ptr, o, n) \ +({ \ +	__typeof__(*(ptr)) __ret; \ +	__ret = (__typeof__(*(ptr))) \ +		__cmpxchg_mb((ptr), (unsigned long)(o), (unsigned long)(n), \ +			     sizeof(*(ptr))); \ +	__ret; \ +}) -#define cmpxchg_local(ptr,o,n)						\ -	((__typeof__(*(ptr)))__cmpxchg((ptr),				\ -				       (unsigned long)(o),		\ -				       (unsigned long)(n),		\ -				       sizeof(*(ptr)))) +#define cmpxchg_local(ptr, o, n) \ +({ \ +	__typeof__(*(ptr)) __ret; \ +	__ret = (__typeof__(*(ptr))) \ +		__cmpxchg((ptr), (unsigned long)(o), \ +			  (unsigned long)(n), sizeof(*(ptr))); \ +	__ret; \ +})  #define cmpxchg64(ptr,o,n)		cmpxchg((ptr),(o),(n))  #define cmpxchg64_local(ptr,o,n)	cmpxchg_local((ptr),(o),(n)) diff --git a/arch/arm64/include/asm/pgtable-3level-types.h b/arch/arm64/include/asm/pgtable-3level-types.h index 4489615f14a..4e94424938a 100644 --- a/arch/arm64/include/asm/pgtable-3level-types.h +++ b/arch/arm64/include/asm/pgtable-3level-types.h @@ -16,6 +16,8 @@  #ifndef __ASM_PGTABLE_3LEVEL_TYPES_H  #define __ASM_PGTABLE_3LEVEL_TYPES_H +#include <asm/types.h> +  typedef u64 pteval_t;  typedef u64 pmdval_t;  typedef u64 pgdval_t; diff --git a/arch/arm64/include/asm/pgtable-hwdef.h b/arch/arm64/include/asm/pgtable-hwdef.h index 75fd13d289b..7eeed1ae2c5 100644 --- a/arch/arm64/include/asm/pgtable-hwdef.h +++ b/arch/arm64/include/asm/pgtable-hwdef.h @@ -92,5 +92,6 @@  #define TCR_TG1_64K		(UL(1) << 30)  #define TCR_IPS_40BIT		(UL(2) << 32)  #define TCR_ASID16		(UL(1) << 36) +#define TCR_TBI0		(UL(1) << 37)  #endif diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index 1d1314280a0..1146e6f40a6 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -423,6 +423,7 @@ el0_da:  	 * Data abort handling  	 */  	mrs	x0, far_el1 +	bic	x0, x0, #(0xff << 56)  	disable_step x1  	isb  	enable_dbg diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S index a82ae886807..9428de8a8f3 100644 --- a/arch/arm64/mm/proc.S +++ b/arch/arm64/mm/proc.S @@ -151,7 +151,7 @@ ENTRY(__cpu_setup)  	 * both user and kernel.  	 */  	ldr	x10, =TCR_TxSZ(VA_BITS) | TCR_FLAGS | TCR_IPS_40BIT | \ -		      TCR_ASID16 | (1 << 31) +		      TCR_ASID16 | TCR_TBI0 | (1 << 31)  #ifdef CONFIG_ARM64_64K_PAGES  	orr	x10, x10, TCR_TG0_64K  	orr	x10, x10, TCR_TG1_64K diff --git a/arch/x86/include/asm/idle.h b/arch/x86/include/asm/idle.h index c5d1785373e..02bab09707f 100644 --- a/arch/x86/include/asm/idle.h +++ b/arch/x86/include/asm/idle.h @@ -1,13 +1,6 @@  #ifndef _ASM_X86_IDLE_H  #define _ASM_X86_IDLE_H -#define IDLE_START 1 -#define IDLE_END 2 - -struct notifier_block; -void idle_notifier_register(struct notifier_block *n); -void idle_notifier_unregister(struct notifier_block *n); -  #ifdef CONFIG_X86_64  void enter_idle(void);  void exit_idle(void); diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 81a5f5e8f14..1ce8966f248 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -40,19 +40,6 @@ DEFINE_PER_CPU_SHARED_ALIGNED(struct tss_struct, init_tss) = INIT_TSS;  #ifdef CONFIG_X86_64  static DEFINE_PER_CPU(unsigned char, is_idle); -static ATOMIC_NOTIFIER_HEAD(idle_notifier); - -void idle_notifier_register(struct notifier_block *n) -{ -	atomic_notifier_chain_register(&idle_notifier, n); -} -EXPORT_SYMBOL_GPL(idle_notifier_register); - -void idle_notifier_unregister(struct notifier_block *n) -{ -	atomic_notifier_chain_unregister(&idle_notifier, n); -} -EXPORT_SYMBOL_GPL(idle_notifier_unregister);  #endif  struct kmem_cache *task_xstate_cachep; @@ -257,14 +244,14 @@ static inline void play_dead(void)  void enter_idle(void)  {  	this_cpu_write(is_idle, 1); -	atomic_notifier_call_chain(&idle_notifier, IDLE_START, NULL); +	idle_notifier_call_chain(IDLE_START);  }  static void __exit_idle(void)  {  	if (x86_test_and_clear_bit_percpu(0, is_idle) == 0)  		return; -	atomic_notifier_call_chain(&idle_notifier, IDLE_END, NULL); +	idle_notifier_call_chain(IDLE_END);  }  /* Called from interrupts to signify idle end */  |