From 22224b99e2939ccf32748de00c7032bf749dd951 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Wed, 12 Dec 2012 11:51:39 -0800 Subject: [PATCH] --- yaml --- r: 339950 b: refs/heads/master c: d01e4afdbb65e030fd6f1f96c30a558e2eb0f279 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/Documentation/ABI/testing/sysfs-bus-iio | 24 + .../ABI/testing/sysfs-class-devfreq | 44 +- .../ABI/testing/sysfs-devices-power | 31 + .../ABI/testing/sysfs-devices-sun | 14 + trunk/Documentation/ABI/testing/sysfs-tty | 112 + trunk/Documentation/DocBook/gadget.tmpl | 2 +- trunk/Documentation/DocBook/uio-howto.tmpl | 56 + trunk/Documentation/IRQ-domain.txt | 34 +- trunk/Documentation/RCU/RTFP.txt | 2 +- trunk/Documentation/RCU/checklist.txt | 17 +- trunk/Documentation/RCU/listRCU.txt | 2 +- trunk/Documentation/RCU/rcuref.txt | 61 +- trunk/Documentation/RCU/trace.txt | 396 +- trunk/Documentation/RCU/whatisRCU.txt | 17 +- trunk/Documentation/acpi/enumeration.txt | 227 + trunk/Documentation/arm64/memory.txt | 2 +- trunk/Documentation/cgroups/00-INDEX | 8 + trunk/Documentation/cgroups/cgroups.txt | 61 +- .../cgroups/freezer-subsystem.txt | 63 +- trunk/Documentation/cgroups/memory.txt | 6 +- trunk/Documentation/cgroups/net_prio.txt | 2 + trunk/Documentation/cpu-hotplug.txt | 24 + trunk/Documentation/devices.txt | 3 - .../devicetree/bindings/arm/atmel-at91.txt | 6 + .../devicetree/bindings/arm/cpus.txt | 77 + .../devicetree/bindings/arm/davinci/nand.txt | 37 +- .../devicetree/bindings/arm/l2cc.txt | 2 +- .../devicetree/bindings/clock/imx23-clock.txt | 2 +- .../devicetree/bindings/clock/imx28-clock.txt | 4 +- .../bindings/cpufreq/cpufreq-spear.txt | 42 + .../devicetree/bindings/gpio/gpio-stmpe.txt | 18 + .../devicetree/bindings/gpio/gpio.txt | 36 + .../devicetree/bindings/gpio/gpio_atmel.txt | 5 + .../devicetree/bindings/gpio/spear_spics.txt | 50 + .../i2c/{atmel-i2c.txt => i2c-at91.txt} | 0 .../i2c/{davinci.txt => i2c-davinci.txt} | 0 .../i2c/{gpio-i2c.txt => i2c-gpio.txt} | 0 .../i2c/{fsl-imx-i2c.txt => i2c-imx.txt} | 0 .../bindings/i2c/{fsl-i2c.txt => i2c-mpc.txt} | 0 .../bindings/i2c/{mux.txt => i2c-mux.txt} | 0 .../devicetree/bindings/i2c/i2c-mv64xxx.txt | 18 + .../i2c/{nomadik.txt => i2c-nomadik.txt} | 0 .../i2c/{cavium-i2c.txt => i2c-octeon.txt} | 0 .../i2c/{omap-i2c.txt => i2c-omap.txt} | 0 .../bindings/i2c/{pnx.txt => i2c-pnx.txt} | 0 ...{ce4100-i2c.txt => i2c-pxa-pci-ce4100.txt} | 0 .../i2c/{mrvl-i2c.txt => i2c-pxa.txt} | 18 - .../i2c/{samsung-i2c.txt => i2c-s3c2410.txt} | 0 .../i2c/{sirf-i2c.txt => i2c-sirf.txt} | 0 .../{arm-versatile.txt => i2c-versatile.txt} | 0 .../bindings/i2c/{xiic.txt => i2c-xiic.txt} | 0 .../devicetree/bindings/leds/common.txt | 23 + .../{gpio/led.txt => leds/leds-gpio.txt} | 14 +- .../devicetree/bindings/mmc/mmc.txt | 8 + .../devicetree/bindings/mmc/samsung-sdhci.txt | 20 +- ...posis-dw-mshc.txt => synopsis-dw-mshc.txt} | 0 .../devicetree/bindings/mmc/ti-omap-hsmmc.txt | 1 + .../devicetree/bindings/mmc/vt8500-sdmmc.txt | 23 + .../bindings/pinctrl/atmel,at91-pinctrl.txt | 141 + .../devicetree/bindings/rtc/orion-rtc.txt | 18 + .../bindings/thermal/db8500-thermal.txt | 44 + .../bindings/tty/serial/fsl-mxs-auart.txt | 8 + .../bindings/tty/serial/of-serial.txt | 5 +- .../devicetree/bindings/usb/am33xx-usb.txt | 8 +- .../devicetree/bindings/vendor-prefixes.txt | 6 +- .../Documentation/devicetree/usage-model.txt | 2 +- trunk/Documentation/filesystems/xfs.txt | 13 +- trunk/Documentation/firmware_class/README | 12 + trunk/Documentation/gpio.txt | 42 + trunk/Documentation/hwmon/ads7828 | 46 +- trunk/Documentation/hwmon/coretemp | 2 + trunk/Documentation/hwmon/da9055 | 47 + trunk/Documentation/kbuild/makefiles.txt | 15 +- trunk/Documentation/kernel-parameters.txt | 55 + trunk/Documentation/memory-barriers.txt | 9 +- trunk/Documentation/memory-hotplug.txt | 19 +- trunk/Documentation/mmc/mmc-dev-attrs.txt | 7 + trunk/Documentation/pinctrl.txt | 7 +- .../Documentation/power/pm_qos_interface.txt | 2 +- trunk/Documentation/telephony/00-INDEX | 4 - trunk/Documentation/telephony/ixj.txt | 394 - trunk/Documentation/thermal/sysfs-api.txt | 64 + trunk/Documentation/usb/error-codes.txt | 7 +- trunk/Documentation/usb/mass-storage.txt | 15 +- trunk/Documentation/x86/boot.txt | 4 +- .../zh_CN/arm/kernel_user_helpers.txt | 284 + trunk/Documentation/zh_CN/arm64/memory.txt | 14 +- trunk/MAINTAINERS | 39 +- trunk/Makefile | 8 +- trunk/arch/Kconfig | 15 +- trunk/arch/alpha/include/asm/Kbuild | 1 + trunk/arch/alpha/include/asm/ioctls.h | 3 + trunk/arch/alpha/include/asm/mman.h | 11 + trunk/arch/alpha/kernel/srmcons.c | 5 +- trunk/arch/arm/Kconfig | 10 +- trunk/arch/arm/Makefile | 5 +- trunk/arch/arm/boot/Makefile | 12 - trunk/arch/arm/boot/compressed/head.S | 14 +- trunk/arch/arm/boot/dts/Makefile | 56 +- trunk/arch/arm/boot/dts/animeo_ip.dts | 178 + trunk/arch/arm/boot/dts/at91rm9200.dtsi | 349 + trunk/arch/arm/boot/dts/at91rm9200ek.dts | 79 + trunk/arch/arm/boot/dts/at91sam9260.dtsi | 295 +- trunk/arch/arm/boot/dts/at91sam9263.dtsi | 299 +- trunk/arch/arm/boot/dts/at91sam9263ek.dts | 29 + trunk/arch/arm/boot/dts/at91sam9g15.dtsi | 28 + trunk/arch/arm/boot/dts/at91sam9g15ek.dts | 16 + .../arch/arm/boot/dts/at91sam9g20ek_2mmc.dts | 26 + .../arm/boot/dts/at91sam9g20ek_common.dtsi | 30 + trunk/arch/arm/boot/dts/at91sam9g25.dtsi | 28 + trunk/arch/arm/boot/dts/at91sam9g25ek.dts | 49 +- trunk/arch/arm/boot/dts/at91sam9g35.dtsi | 28 + trunk/arch/arm/boot/dts/at91sam9g35ek.dts | 16 + trunk/arch/arm/boot/dts/at91sam9g45.dtsi | 301 +- trunk/arch/arm/boot/dts/at91sam9m10g45ek.dts | 48 + trunk/arch/arm/boot/dts/at91sam9n12.dtsi | 225 +- trunk/arch/arm/boot/dts/at91sam9n12ek.dts | 22 + trunk/arch/arm/boot/dts/at91sam9x25.dtsi | 49 + trunk/arch/arm/boot/dts/at91sam9x25ek.dts | 16 + trunk/arch/arm/boot/dts/at91sam9x35.dtsi | 28 + trunk/arch/arm/boot/dts/at91sam9x35ek.dts | 16 + trunk/arch/arm/boot/dts/at91sam9x5.dtsi | 270 +- trunk/arch/arm/boot/dts/at91sam9x5ek.dtsi | 101 + trunk/arch/arm/boot/dts/dbx5x0.dtsi | 14 + trunk/arch/arm/boot/dts/imx28.dtsi | 1 + trunk/arch/arm/boot/dts/pm9g45.dts | 165 + trunk/arch/arm/boot/dts/snowball.dts | 31 + trunk/arch/arm/boot/dts/spear1310-evb.dts | 4 + trunk/arch/arm/boot/dts/spear1310.dtsi | 27 + trunk/arch/arm/boot/dts/spear1340-evb.dts | 4 + trunk/arch/arm/boot/dts/spear1340.dtsi | 26 + trunk/arch/arm/boot/dts/spear310.dtsi | 22 +- trunk/arch/arm/boot/dts/spear320-evb.dts | 4 + trunk/arch/arm/boot/dts/spear320.dtsi | 23 +- trunk/arch/arm/boot/dts/tegra20-seaboard.dts | 4 +- trunk/arch/arm/common/gic.c | 45 +- trunk/arch/arm/common/timer-sp.c | 2 +- trunk/arch/arm/common/vic.c | 19 +- trunk/arch/arm/configs/afeb9260_defconfig | 106 - trunk/arch/arm/configs/at91_dt_defconfig | 1 + trunk/arch/arm/configs/at91sam9260_defconfig | 2 +- trunk/arch/arm/configs/at91sam9261_defconfig | 2 +- trunk/arch/arm/configs/at91sam9263_defconfig | 2 +- trunk/arch/arm/configs/at91sam9g20_defconfig | 2 +- trunk/arch/arm/configs/cam60_defconfig | 173 - trunk/arch/arm/configs/corgi_defconfig | 2 +- trunk/arch/arm/configs/cpu9260_defconfig | 116 - trunk/arch/arm/configs/cpu9g20_defconfig | 116 - trunk/arch/arm/configs/davinci_all_defconfig | 2 +- trunk/arch/arm/configs/h7202_defconfig | 3 +- trunk/arch/arm/configs/magician_defconfig | 2 +- trunk/arch/arm/configs/mini2440_defconfig | 2 +- trunk/arch/arm/configs/omap1_defconfig | 3 +- trunk/arch/arm/configs/prima2_defconfig | 1 - trunk/arch/arm/configs/qil-a9260_defconfig | 114 - trunk/arch/arm/configs/sam9_l9260_defconfig | 148 - trunk/arch/arm/configs/spitz_defconfig | 2 +- trunk/arch/arm/configs/stamp9g20_defconfig | 128 - trunk/arch/arm/configs/u8500_defconfig | 2 + trunk/arch/arm/configs/usb-a9260_defconfig | 105 - trunk/arch/arm/configs/viper_defconfig | 2 +- trunk/arch/arm/configs/zeus_defconfig | 2 +- trunk/arch/arm/include/asm/Kbuild | 2 +- trunk/arch/arm/include/asm/assembler.h | 8 + trunk/arch/arm/include/asm/cpu.h | 1 + trunk/arch/arm/include/asm/cputype.h | 13 + trunk/arch/arm/include/asm/cti.h | 20 +- .../arm/include/asm/hardware/cache-l2x0.h | 5 + trunk/arch/arm/include/asm/hardware/sp810.h | 2 + trunk/arch/arm/include/asm/hardware/vic.h | 2 +- trunk/arch/arm/include/asm/hw_breakpoint.h | 8 +- trunk/arch/arm/include/asm/io.h | 2 +- trunk/arch/arm/include/asm/mach/serial_at91.h | 33 - trunk/arch/arm/include/asm/mmu.h | 13 +- trunk/arch/arm/include/asm/mmu_context.h | 88 +- trunk/arch/arm/include/asm/percpu.h | 45 + trunk/arch/arm/include/asm/perf_event.h | 7 + trunk/arch/arm/include/asm/pgtable-2level.h | 2 + trunk/arch/arm/include/asm/pgtable-3level.h | 4 +- trunk/arch/arm/include/asm/pgtable.h | 10 +- trunk/arch/arm/include/asm/pmu.h | 28 +- trunk/arch/arm/include/asm/prom.h | 4 + trunk/arch/arm/include/asm/smp.h | 1 + trunk/arch/arm/include/asm/smp_plat.h | 17 + trunk/arch/arm/include/asm/syscall.h | 9 + trunk/arch/arm/include/asm/thread_info.h | 7 +- trunk/arch/arm/include/debug/vexpress.S | 11 +- trunk/arch/arm/kernel/devtree.c | 104 + trunk/arch/arm/kernel/entry-common.S | 16 +- trunk/arch/arm/kernel/head-nommu.S | 2 +- trunk/arch/arm/kernel/hw_breakpoint.c | 154 +- trunk/arch/arm/kernel/perf_event.c | 85 +- trunk/arch/arm/kernel/perf_event_cpu.c | 74 +- trunk/arch/arm/kernel/perf_event_v6.c | 126 +- trunk/arch/arm/kernel/perf_event_v7.c | 246 +- trunk/arch/arm/kernel/perf_event_xscale.c | 157 +- trunk/arch/arm/kernel/process.c | 4 +- trunk/arch/arm/kernel/ptrace.c | 43 +- trunk/arch/arm/kernel/setup.c | 84 +- trunk/arch/arm/kernel/smp.c | 12 +- trunk/arch/arm/kernel/smp_twd.c | 54 +- trunk/arch/arm/kernel/topology.c | 42 +- trunk/arch/arm/kernel/vmlinux.lds.S | 19 +- trunk/arch/arm/mach-at91/Kconfig | 9 + trunk/arch/arm/mach-at91/Makefile | 1 + .../mach-at91/{include/mach => }/at91_aic.h | 0 .../mach-at91/{include/mach => }/at91_rstc.h | 0 .../mach-at91/{include/mach => }/at91_shdwc.h | 0 .../mach-at91/{include/mach => }/at91_tc.h | 0 trunk/arch/arm/mach-at91/at91rm9200.c | 24 +- trunk/arch/arm/mach-at91/at91rm9200_devices.c | 2 +- trunk/arch/arm/mach-at91/at91rm9200_time.c | 63 +- trunk/arch/arm/mach-at91/at91sam9260.c | 12 +- .../arch/arm/mach-at91/at91sam9260_devices.c | 2 +- trunk/arch/arm/mach-at91/at91sam9261.c | 8 +- .../arch/arm/mach-at91/at91sam9261_devices.c | 2 +- trunk/arch/arm/mach-at91/at91sam9263.c | 15 +- .../arch/arm/mach-at91/at91sam9263_devices.c | 2 +- trunk/arch/arm/mach-at91/at91sam926x_time.c | 14 +- trunk/arch/arm/mach-at91/at91sam9_alt_reset.S | 2 +- trunk/arch/arm/mach-at91/at91sam9g45.c | 14 +- .../arch/arm/mach-at91/at91sam9g45_devices.c | 2 +- trunk/arch/arm/mach-at91/at91sam9g45_reset.S | 3 +- trunk/arch/arm/mach-at91/at91sam9n12.c | 18 +- trunk/arch/arm/mach-at91/at91sam9rl.c | 8 +- trunk/arch/arm/mach-at91/at91sam9rl_devices.c | 2 +- trunk/arch/arm/mach-at91/at91sam9x5.c | 23 +- trunk/arch/arm/mach-at91/at91x40.c | 3 +- trunk/arch/arm/mach-at91/at91x40_time.c | 3 +- trunk/arch/arm/mach-at91/board-1arm.c | 4 +- trunk/arch/arm/mach-at91/board-afeb-9260v1.c | 5 +- trunk/arch/arm/mach-at91/board-cam60.c | 4 +- trunk/arch/arm/mach-at91/board-carmeva.c | 4 +- trunk/arch/arm/mach-at91/board-cpu9krea.c | 4 +- trunk/arch/arm/mach-at91/board-cpuat91.c | 4 +- trunk/arch/arm/mach-at91/board-csb337.c | 4 +- trunk/arch/arm/mach-at91/board-csb637.c | 4 +- trunk/arch/arm/mach-at91/board-dt.c | 7 +- trunk/arch/arm/mach-at91/board-eb01.c | 5 +- trunk/arch/arm/mach-at91/board-eb9200.c | 5 +- trunk/arch/arm/mach-at91/board-ecbat91.c | 4 +- trunk/arch/arm/mach-at91/board-eco920.c | 4 +- trunk/arch/arm/mach-at91/board-flexibity.c | 4 +- trunk/arch/arm/mach-at91/board-foxg20.c | 4 +- trunk/arch/arm/mach-at91/board-gsia18s.c | 8 +- trunk/arch/arm/mach-at91/board-kafa.c | 4 +- trunk/arch/arm/mach-at91/board-kb9202.c | 4 +- trunk/arch/arm/mach-at91/board-neocore926.c | 4 +- trunk/arch/arm/mach-at91/board-pcontrol-g20.c | 6 +- trunk/arch/arm/mach-at91/board-picotux200.c | 4 +- trunk/arch/arm/mach-at91/board-qil-a9260.c | 6 +- trunk/arch/arm/mach-at91/board-rm9200-dt.c | 57 + trunk/arch/arm/mach-at91/board-rm9200dk.c | 4 +- trunk/arch/arm/mach-at91/board-rm9200ek.c | 4 +- trunk/arch/arm/mach-at91/board-rsi-ews.c | 4 +- trunk/arch/arm/mach-at91/board-sam9-l9260.c | 4 +- trunk/arch/arm/mach-at91/board-sam9260ek.c | 6 +- trunk/arch/arm/mach-at91/board-sam9261ek.c | 6 +- trunk/arch/arm/mach-at91/board-sam9263ek.c | 6 +- trunk/arch/arm/mach-at91/board-sam9g20ek.c | 4 +- trunk/arch/arm/mach-at91/board-sam9m10g45ek.c | 6 +- trunk/arch/arm/mach-at91/board-sam9rlek.c | 7 +- trunk/arch/arm/mach-at91/board-snapper9260.c | 4 +- trunk/arch/arm/mach-at91/board-stamp9g20.c | 4 +- trunk/arch/arm/mach-at91/board-usb-a926x.c | 6 +- trunk/arch/arm/mach-at91/board-yl-9200.c | 4 +- .../arm/mach-at91/{include/mach => }/board.h | 65 - trunk/arch/arm/mach-at91/generic.h | 1 + trunk/arch/arm/mach-at91/gpio.c | 190 +- .../mach-at91/{include/mach => }/gsia18s.h | 0 .../arm/mach-at91/include/mach/at91_pit.h | 32 - .../arm/mach-at91/include/mach/hardware.h | 3 - trunk/arch/arm/mach-at91/irq.c | 2 +- trunk/arch/arm/mach-at91/leds.c | 2 +- trunk/arch/arm/mach-at91/pm.c | 6 +- trunk/arch/arm/mach-at91/setup.c | 22 +- trunk/arch/arm/mach-at91/soc.h | 12 +- .../mach-at91/{include/mach => }/stamp9g20.h | 0 trunk/arch/arm/mach-cns3xxx/Kconfig | 1 - trunk/arch/arm/mach-cns3xxx/cns3420vb.c | 53 +- .../arch/arm/mach-davinci/board-dm644x-evm.c | 5 +- .../arch/arm/mach-davinci/devices-tnetv107x.c | 2 +- .../arm/mach-davinci/include/mach/serial.h | 2 +- .../mach-davinci/include/mach/uncompress.h | 6 + trunk/arch/arm/mach-dove/include/mach/pm.h | 2 +- trunk/arch/arm/mach-dove/irq.c | 14 +- trunk/arch/arm/mach-integrator/impd1.c | 76 +- trunk/arch/arm/mach-ixp4xx/common-pci.c | 1 + trunk/arch/arm/mach-ixp4xx/common.c | 13 +- trunk/arch/arm/mach-ixp4xx/goramo_mlr.c | 3 +- .../mach-ixp4xx/include/mach/debug-macro.S | 4 +- .../mach-ixp4xx/include/mach/ixp4xx-regs.h | 46 +- .../arch/arm/mach-ixp4xx/include/mach/qmgr.h | 12 +- trunk/arch/arm/mach-ixp4xx/include/mach/udc.h | 2 +- trunk/arch/arm/mach-ixp4xx/ixp4xx_npe.c | 9 +- trunk/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c | 12 +- trunk/arch/arm/mach-kirkwood/pcie.c | 11 +- trunk/arch/arm/mach-nomadik/board-nhk8815.c | 3 +- trunk/arch/arm/mach-nomadik/cpu-8815.c | 2 +- trunk/arch/arm/mach-nomadik/i2c-8815nhk.c | 3 +- trunk/arch/arm/mach-omap2/board-generic.c | 2 +- trunk/arch/arm/mach-omap2/common.h | 4 + trunk/arch/arm/mach-omap2/drm.c | 7 + trunk/arch/arm/mach-omap2/omap-headsmp.S | 38 + .../arch/arm/mach-omap2/omap-mpuss-lowpower.c | 9 +- trunk/arch/arm/mach-omap2/omap-smp.c | 41 +- trunk/arch/arm/mach-omap2/omap4-common.c | 42 +- trunk/arch/arm/mach-omap2/pm.h | 9 + trunk/arch/arm/mach-omap2/pmu.c | 2 - trunk/arch/arm/mach-pxa/include/mach/udc.h | 2 +- trunk/arch/arm/mach-pxa/pxa25x.c | 6 + trunk/arch/arm/mach-realview/realview_eb.c | 1 + trunk/arch/arm/mach-s3c24xx/Kconfig | 2 +- trunk/arch/arm/mach-sa1100/assabet.c | 2 +- trunk/arch/arm/mach-sa1100/badge4.c | 2 +- trunk/arch/arm/mach-sa1100/cerf.c | 2 +- trunk/arch/arm/mach-sa1100/collie.c | 2 +- trunk/arch/arm/mach-sa1100/h3xxx.c | 2 +- trunk/arch/arm/mach-sa1100/hackkit.c | 2 +- trunk/arch/arm/mach-sa1100/jornada720.c | 2 +- trunk/arch/arm/mach-sa1100/lart.c | 2 +- trunk/arch/arm/mach-sa1100/nanoengine.c | 2 +- trunk/arch/arm/mach-sa1100/neponset.c | 2 +- trunk/arch/arm/mach-sa1100/pleb.c | 2 +- trunk/arch/arm/mach-sa1100/shannon.c | 2 +- trunk/arch/arm/mach-sa1100/simpad.c | 2 +- trunk/arch/arm/mach-shmobile/board-kzm9g.c | 2 +- trunk/arch/arm/mach-u300/core.c | 5 +- trunk/arch/arm/mach-u300/include/mach/irqs.h | 126 +- .../arch/arm/mach-ux500/board-mop500-audio.c | 3 +- trunk/arch/arm/mach-ux500/board-mop500-pins.c | 3 +- trunk/arch/arm/mach-ux500/board-mop500.c | 66 +- trunk/arch/arm/mach-ux500/cpu-db8500.c | 12 +- trunk/arch/arm/mach-ux500/devices-common.c | 3 +- trunk/arch/arm/mach-ux500/devices-common.h | 8 +- trunk/arch/arm/mach-vexpress/v2m.c | 2 +- trunk/arch/arm/mm/cache-aurora-l2.h | 55 + trunk/arch/arm/mm/cache-l2x0.c | 278 +- trunk/arch/arm/mm/context.c | 207 +- trunk/arch/arm/mm/idmap.c | 14 +- trunk/arch/arm/mm/ioremap.c | 16 +- trunk/arch/arm/mm/mmap.c | 134 +- trunk/arch/arm/mm/mmu.c | 2 +- trunk/arch/arm/mm/proc-macros.S | 4 + trunk/arch/arm/mm/proc-v6.S | 2 +- trunk/arch/arm/mm/proc-v7-2level.S | 10 +- trunk/arch/arm/mm/proc-v7-3level.S | 5 +- trunk/arch/arm/mm/proc-v7.S | 2 +- trunk/arch/arm/net/bpf_jit_32.c | 6 +- .../plat-nomadik/include/plat/gpio-nomadik.h | 102 - .../arm/plat-omap/include/plat/omap-serial.h | 55 - trunk/arch/arm/plat-s3c24xx/dma.c | 9 +- trunk/arch/arm/plat-spear/Kconfig | 1 + trunk/arch/arm/plat-versatile/Kconfig | 2 +- trunk/arch/arm64/Kconfig | 4 +- trunk/arch/arm64/Makefile | 17 +- trunk/arch/arm64/boot/Makefile | 5 - trunk/arch/arm64/boot/dts/.gitignore | 1 + trunk/arch/arm64/boot/dts/Makefile | 5 + trunk/arch/arm64/include/asm/Kbuild | 2 + trunk/arch/arm64/include/asm/arm_generic.h | 8 +- trunk/arch/arm64/include/asm/assembler.h | 8 + trunk/arch/arm64/include/asm/cacheflush.h | 11 +- trunk/arch/arm64/include/asm/fpsimdmacros.h | 64 + trunk/arch/arm64/include/asm/pgtable.h | 2 + trunk/arch/arm64/include/asm/processor.h | 5 - trunk/arch/arm64/include/asm/ptrace.h | 31 +- trunk/arch/arm64/include/asm/syscalls.h | 14 +- trunk/arch/arm64/include/asm/unistd.h | 1 + trunk/arch/arm64/include/asm/unistd32.h | 12 +- trunk/arch/arm64/include/asm/virt.h | 54 + trunk/arch/arm64/kernel/Makefile | 3 +- trunk/arch/arm64/kernel/entry-fpsimd.S | 43 +- trunk/arch/arm64/kernel/entry.S | 21 +- trunk/arch/arm64/kernel/head.S | 33 +- trunk/arch/arm64/kernel/hyp-stub.S | 109 + trunk/arch/arm64/kernel/process.c | 83 +- trunk/arch/arm64/kernel/signal.c | 49 +- trunk/arch/arm64/kernel/signal32.c | 20 +- trunk/arch/arm64/kernel/sys.c | 76 +- trunk/arch/arm64/kernel/sys32.S | 19 - trunk/arch/arm64/kernel/sys_compat.c | 38 +- trunk/arch/arm64/kernel/vdso.c | 2 +- trunk/arch/arm64/kernel/vdso/gettimeofday.S | 100 +- trunk/arch/arm64/mm/fault.c | 13 +- trunk/arch/arm64/mm/flush.c | 9 - trunk/arch/arm64/mm/init.c | 4 +- trunk/arch/avr32/Kconfig | 3 - trunk/arch/avr32/configs/atngw100_defconfig | 2 +- .../configs/atngw100_evklcd100_defconfig | 2 +- .../configs/atngw100_evklcd101_defconfig | 2 +- .../avr32/configs/atngw100_mrmt_defconfig | 2 +- .../arch/avr32/configs/atngw100mkii_defconfig | 2 +- .../configs/atngw100mkii_evklcd100_defconfig | 2 +- .../configs/atngw100mkii_evklcd101_defconfig | 2 +- trunk/arch/avr32/configs/atstk1002_defconfig | 2 +- trunk/arch/avr32/configs/atstk1003_defconfig | 2 +- trunk/arch/avr32/configs/atstk1004_defconfig | 2 +- trunk/arch/avr32/configs/atstk1006_defconfig | 2 +- trunk/arch/avr32/configs/favr-32_defconfig | 2 +- trunk/arch/avr32/configs/hammerhead_defconfig | 2 +- trunk/arch/avr32/include/asm/Kbuild | 1 + .../arch/avr32/include/asm/mach/serial_at91.h | 33 - .../avr32/mach-at32ap/include/mach/board.h | 8 - .../arch/blackfin/configs/CM-BF527_defconfig | 2 +- .../arch/blackfin/configs/CM-BF548_defconfig | 2 +- .../arch/blackfin/configs/CM-BF561_defconfig | 2 +- trunk/arch/blackfin/include/asm/Kbuild | 1 + trunk/arch/c6x/Makefile | 2 +- trunk/arch/c6x/boot/Makefile | 20 - trunk/arch/c6x/boot/dts/Makefile | 20 + trunk/arch/c6x/boot/dts/linked_dtb.S | 2 + trunk/arch/c6x/boot/linked_dtb.S | 2 - trunk/arch/c6x/include/asm/Kbuild | 1 + trunk/arch/c6x/include/asm/setup.h | 33 + trunk/arch/c6x/include/uapi/asm/Kbuild | 2 + trunk/arch/c6x/include/uapi/asm/kvm_para.h | 1 - trunk/arch/c6x/include/uapi/asm/setup.h | 33 +- trunk/arch/c6x/kernel/entry.S | 5 +- trunk/arch/cris/include/asm/Kbuild | 1 + trunk/arch/frv/include/asm/Kbuild | 1 + trunk/arch/h8300/include/asm/Kbuild | 1 + trunk/arch/hexagon/include/asm/Kbuild | 1 + trunk/arch/ia64/hp/sim/simserial.c | 1 + trunk/arch/ia64/include/asm/Kbuild | 1 + trunk/arch/ia64/include/asm/cputime.h | 2 + trunk/arch/ia64/include/asm/device.h | 3 - trunk/arch/ia64/include/asm/io.h | 2 +- trunk/arch/ia64/kernel/acpi.c | 2 + trunk/arch/ia64/kernel/efi.c | 2 +- trunk/arch/ia64/kernel/time.c | 22 +- trunk/arch/ia64/kernel/topology.c | 4 +- trunk/arch/m32r/include/asm/Kbuild | 1 + trunk/arch/m68k/emu/nfcon.c | 6 +- trunk/arch/m68k/include/asm/Kbuild | 1 + trunk/arch/microblaze/Makefile | 2 +- trunk/arch/microblaze/boot/Makefile | 19 +- trunk/arch/microblaze/boot/dts/Makefile | 22 + trunk/arch/microblaze/boot/dts/linked_dtb.S | 2 + trunk/arch/microblaze/boot/linked_dtb.S | 3 - trunk/arch/microblaze/include/asm/Kbuild | 1 + trunk/arch/microblaze/kernel/signal.c | 2 +- trunk/arch/microblaze/pci/pci-common.c | 4 - trunk/arch/mips/alchemy/common/Makefile | 2 +- trunk/arch/mips/alchemy/common/platform.c | 58 +- .../mips/alchemy/common/usb.c} | 0 trunk/arch/mips/ath79/dev-usb.c | 2 - trunk/arch/mips/cavium-octeon/Makefile | 3 - trunk/arch/mips/configs/bcm47xx_defconfig | 2 +- trunk/arch/mips/configs/db1000_defconfig | 1 + trunk/arch/mips/configs/db1235_defconfig | 2 + trunk/arch/mips/configs/gpr_defconfig | 1 + trunk/arch/mips/configs/ls1b_defconfig | 1 + trunk/arch/mips/configs/mtx1_defconfig | 3 +- trunk/arch/mips/include/asm/Kbuild | 1 + trunk/arch/mips/include/asm/hugetlb.h | 12 +- trunk/arch/mips/include/uapi/asm/ioctls.h | 3 + trunk/arch/mips/include/uapi/asm/mman.h | 11 + trunk/arch/mips/kernel/cpu-probe.c | 1 - trunk/arch/mips/kernel/entry.S | 7 +- trunk/arch/mips/kernel/scall64-n32.S | 6 +- trunk/arch/mips/lantiq/dts/Makefile | 3 - trunk/arch/mips/loongson1/common/platform.c | 7 +- trunk/arch/mips/mm/mmap.c | 111 +- trunk/arch/mips/mm/tlb-r4k.c | 18 +- trunk/arch/mips/netlogic/dts/Makefile | 3 - trunk/arch/mips/netlogic/xlr/platform.c | 17 +- trunk/arch/mips/pci/pci.c | 2 - trunk/arch/mips/pnx8550/common/platform.c | 31 +- trunk/arch/mn10300/include/asm/Kbuild | 1 + trunk/arch/openrisc/Makefile | 2 +- trunk/arch/openrisc/boot/{ => dts}/Makefile | 5 - trunk/arch/openrisc/include/asm/Kbuild | 1 + trunk/arch/openrisc/kernel/signal.c | 6 +- trunk/arch/parisc/include/asm/Kbuild | 1 + trunk/arch/parisc/include/uapi/asm/ioctls.h | 3 + trunk/arch/parisc/include/uapi/asm/mman.h | 11 + trunk/arch/parisc/kernel/pdc_cons.c | 5 +- trunk/arch/parisc/kernel/syscall_table.S | 2 +- trunk/arch/powerpc/include/asm/Kbuild | 1 + trunk/arch/powerpc/include/asm/cputime.h | 2 + trunk/arch/powerpc/include/uapi/asm/ioctls.h | 3 + trunk/arch/powerpc/kernel/pci-common.c | 4 - trunk/arch/powerpc/kernel/pci_64.c | 4 - trunk/arch/powerpc/kernel/signal.c | 4 +- trunk/arch/powerpc/kernel/sysfs.c | 4 +- trunk/arch/powerpc/kernel/time.c | 20 +- trunk/arch/powerpc/kernel/uprobes.c | 6 + .../arch/powerpc/platforms/cell/celleb_pci.c | 4 +- .../powerpc/platforms/powermac/pfunc_core.c | 2 +- .../platforms/pseries/processor_idle.c | 4 +- .../arch/powerpc/platforms/pseries/reconfig.c | 3 +- trunk/arch/powerpc/sysdev/fsl_pci.c | 2 +- trunk/arch/powerpc/sysdev/scom.c | 2 +- trunk/arch/s390/include/asm/Kbuild | 1 + trunk/arch/s390/include/asm/cputime.h | 1 + trunk/arch/s390/include/asm/page.h | 3 + trunk/arch/s390/kernel/compat_wrapper.S | 2 +- trunk/arch/s390/kernel/vtime.c | 13 +- trunk/arch/s390/kvm/kvm-s390.c | 4 - trunk/arch/score/include/asm/Kbuild | 1 + trunk/arch/score/kernel/signal.c | 7 +- trunk/arch/sh/configs/ecovec24_defconfig | 2 +- trunk/arch/sh/configs/se7724_defconfig | 2 +- trunk/arch/sh/drivers/pci/pci.c | 2 - trunk/arch/sh/include/asm/Kbuild | 1 + trunk/arch/sh/include/asm/io.h | 2 +- trunk/arch/sh/include/uapi/asm/ioctls.h | 3 + trunk/arch/sh/kernel/cpu/sh3/setup-sh7720.c | 6 +- trunk/arch/sh/kernel/cpu/sh4a/setup-sh7757.c | 6 +- trunk/arch/sh/kernel/cpu/sh4a/setup-sh7763.c | 6 +- trunk/arch/sh/kernel/cpu/sh4a/setup-sh7786.c | 6 +- trunk/arch/sh/kernel/signal_64.c | 6 +- trunk/arch/sh/mm/mmap.c | 139 +- trunk/arch/sparc/boot/piggyback.c | 12 +- trunk/arch/sparc/include/asm/Kbuild | 1 + trunk/arch/sparc/include/uapi/asm/ioctls.h | 3 + trunk/arch/sparc/kernel/pci_impl.h | 2 +- trunk/arch/sparc/kernel/sys32.S | 2 +- trunk/arch/sparc/kernel/sys_sparc_32.c | 27 +- trunk/arch/sparc/kernel/sys_sparc_64.c | 150 +- trunk/arch/sparc/kernel/syscalls.S | 14 +- trunk/arch/sparc/kernel/systbls_64.S | 2 +- trunk/arch/sparc/mm/hugetlbpage.c | 124 +- trunk/arch/tile/include/asm/Kbuild | 1 + trunk/arch/tile/mm/hugetlbpage.c | 139 +- trunk/arch/um/drivers/chan_kern.c | 17 +- trunk/arch/um/drivers/line.c | 2 + trunk/arch/um/drivers/mconsole_kern.c | 2 +- trunk/arch/um/include/asm/Kbuild | 1 + trunk/arch/um/kernel/exec.c | 3 +- trunk/arch/unicore32/include/asm/Kbuild | 1 + trunk/arch/unicore32/kernel/pci.c | 2 - trunk/arch/x86/Kconfig | 59 +- trunk/arch/x86/Kconfig.cpu | 73 +- trunk/arch/x86/Makefile_32.cpu | 1 - trunk/arch/x86/include/asm/Kbuild | 3 + trunk/arch/x86/include/asm/atomic.h | 16 - trunk/arch/x86/include/asm/cmpxchg_32.h | 55 - .../include/asm/{rcu.h => context_tracking.h} | 15 +- trunk/arch/x86/include/asm/cpu.h | 4 + trunk/arch/x86/include/asm/cpufeature.h | 7 +- trunk/arch/x86/include/asm/device.h | 3 - trunk/arch/x86/include/asm/elf.h | 6 +- trunk/arch/x86/include/asm/fpu-internal.h | 15 +- trunk/arch/x86/include/asm/futex.h | 12 - trunk/arch/x86/include/asm/local.h | 18 +- trunk/arch/x86/include/asm/mman.h | 3 + trunk/arch/x86/include/asm/module.h | 2 - trunk/arch/x86/include/asm/msr-index.h | 2 + trunk/arch/x86/include/asm/percpu.h | 3 - trunk/arch/x86/include/asm/processor.h | 35 +- trunk/arch/x86/include/asm/ptrace.h | 9 + trunk/arch/x86/include/asm/smp.h | 1 + trunk/arch/x86/include/asm/swab.h | 29 +- trunk/arch/x86/include/asm/tlbflush.h | 3 - trunk/arch/x86/include/asm/trace_clock.h | 20 + trunk/arch/x86/include/asm/uaccess.h | 42 - trunk/arch/x86/kernel/Makefile | 2 +- trunk/arch/x86/kernel/acpi/boot.c | 6 + trunk/arch/x86/kernel/acpi/sleep.c | 2 + trunk/arch/x86/kernel/apic/apic.c | 73 +- trunk/arch/x86/kernel/apic/io_apic.c | 35 +- trunk/arch/x86/kernel/cpu/amd.c | 12 +- trunk/arch/x86/kernel/cpu/bugs.c | 41 +- trunk/arch/x86/kernel/cpu/common.c | 5 +- trunk/arch/x86/kernel/cpu/intel.c | 4 - trunk/arch/x86/kernel/cpu/intel_cacheinfo.c | 75 +- trunk/arch/x86/kernel/cpu/mtrr/main.c | 9 +- trunk/arch/x86/kernel/cpu/perf_event.c | 121 + trunk/arch/x86/kernel/cpu/perf_event.h | 5 + trunk/arch/x86/kernel/cpu/perf_event_amd.c | 9 + trunk/arch/x86/kernel/cpu/perf_event_intel.c | 9 + trunk/arch/x86/kernel/cpu/perf_event_p6.c | 2 + trunk/arch/x86/kernel/entry_64.S | 43 +- trunk/arch/x86/kernel/head_32.S | 22 +- trunk/arch/x86/kernel/head_64.S | 16 + trunk/arch/x86/kernel/hpet.c | 4 +- trunk/arch/x86/kernel/i387.c | 6 +- trunk/arch/x86/kernel/process.c | 39 +- trunk/arch/x86/kernel/ptrace.c | 12 +- trunk/arch/x86/kernel/rtc.c | 6 - trunk/arch/x86/kernel/signal.c | 5 +- trunk/arch/x86/kernel/smpboot.c | 156 +- trunk/arch/x86/kernel/sys_x86_64.c | 151 +- trunk/arch/x86/kernel/topology.c | 101 +- trunk/arch/x86/kernel/trace_clock.c | 21 + trunk/arch/x86/kernel/traps.c | 2 +- trunk/arch/x86/kernel/tsc.c | 6 + trunk/arch/x86/kernel/uprobes.c | 54 +- trunk/arch/x86/kvm/emulate.c | 3 +- trunk/arch/x86/lib/Makefile | 1 - trunk/arch/x86/lib/cmpxchg.c | 54 - trunk/arch/x86/lib/copy_page_64.S | 120 +- trunk/arch/x86/lib/usercopy_32.c | 57 - trunk/arch/x86/mm/fault.c | 2 +- trunk/arch/x86/mm/hugetlbpage.c | 130 +- trunk/arch/x86/mm/init_32.c | 5 +- trunk/arch/x86/mm/tlb.c | 8 +- trunk/arch/x86/platform/ce4100/ce4100.c | 3 + trunk/arch/x86/power/cpu.c | 82 + trunk/arch/x86/tools/gen-insn-attr-x86.awk | 6 +- trunk/arch/x86/um/Kconfig | 2 +- trunk/arch/x86/vdso/vma.c | 2 +- trunk/arch/x86/xen/Kconfig | 2 +- trunk/arch/xtensa/include/asm/Kbuild | 1 + trunk/arch/xtensa/include/uapi/asm/ioctls.h | 3 + trunk/arch/xtensa/include/uapi/asm/mman.h | 11 + trunk/arch/xtensa/platforms/iss/console.c | 1 + trunk/block/blk-cgroup.c | 15 +- trunk/drivers/Kconfig | 2 + trunk/drivers/Makefile | 1 + trunk/drivers/acpi/Kconfig | 6 + trunk/drivers/acpi/Makefile | 6 +- trunk/drivers/acpi/acpi_i2c.c | 103 + trunk/drivers/acpi/acpi_memhotplug.c | 193 +- trunk/drivers/acpi/acpi_pad.c | 8 +- trunk/drivers/acpi/acpi_platform.c | 104 + trunk/drivers/acpi/acpica/Makefile | 3 + trunk/drivers/acpi/acpica/acdebug.h | 94 +- trunk/drivers/acpi/acpica/acdispat.h | 11 +- trunk/drivers/acpi/acpica/acevents.h | 6 +- trunk/drivers/acpi/acpica/acglobal.h | 73 +- trunk/drivers/acpi/acpica/aclocal.h | 16 +- trunk/drivers/acpi/acpica/acmacros.h | 163 +- trunk/drivers/acpi/acpica/acobject.h | 7 +- trunk/drivers/acpi/acpica/acopcode.h | 6 +- trunk/drivers/acpi/acpica/acparser.h | 3 +- trunk/drivers/acpi/acpica/acpredef.h | 11 +- trunk/drivers/acpi/acpica/acstruct.h | 2 +- trunk/drivers/acpi/acpica/acutils.h | 58 +- trunk/drivers/acpi/acpica/amlresrc.h | 1 - trunk/drivers/acpi/acpica/dscontrol.c | 2 +- trunk/drivers/acpi/acpica/dsfield.c | 2 +- trunk/drivers/acpi/acpica/dsmethod.c | 6 +- trunk/drivers/acpi/acpica/dsmthdat.c | 14 +- trunk/drivers/acpi/acpica/dsobject.c | 6 +- trunk/drivers/acpi/acpica/dsopcode.c | 3 +- trunk/drivers/acpi/acpica/dsutils.c | 33 +- trunk/drivers/acpi/acpica/dswexec.c | 10 +- trunk/drivers/acpi/acpica/dswload2.c | 4 +- trunk/drivers/acpi/acpica/dswstate.c | 26 +- trunk/drivers/acpi/acpica/evgpe.c | 20 +- trunk/drivers/acpi/acpica/evgpeblk.c | 3 +- trunk/drivers/acpi/acpica/evgpeutil.c | 3 +- trunk/drivers/acpi/acpica/evrgnini.c | 7 +- trunk/drivers/acpi/acpica/evxface.c | 2 +- trunk/drivers/acpi/acpica/evxfgpe.c | 13 +- trunk/drivers/acpi/acpica/exconvrt.c | 4 +- trunk/drivers/acpi/acpica/excreate.c | 9 +- trunk/drivers/acpi/acpica/exdebug.c | 10 +- trunk/drivers/acpi/acpica/exdump.c | 20 +- trunk/drivers/acpi/acpica/exfield.c | 4 +- trunk/drivers/acpi/acpica/exfldio.c | 15 +- trunk/drivers/acpi/acpica/exmisc.c | 5 +- trunk/drivers/acpi/acpica/exmutex.c | 9 +- trunk/drivers/acpi/acpica/exnames.c | 9 +- trunk/drivers/acpi/acpica/exoparg1.c | 11 +- trunk/drivers/acpi/acpica/exoparg2.c | 2 +- trunk/drivers/acpi/acpica/exoparg3.c | 3 +- trunk/drivers/acpi/acpica/exoparg6.c | 5 +- trunk/drivers/acpi/acpica/exprep.c | 13 +- trunk/drivers/acpi/acpica/exregion.c | 3 +- trunk/drivers/acpi/acpica/exresnte.c | 9 +- trunk/drivers/acpi/acpica/exresolv.c | 3 +- trunk/drivers/acpi/acpica/exresop.c | 8 +- trunk/drivers/acpi/acpica/exstore.c | 4 +- trunk/drivers/acpi/acpica/exstoren.c | 11 +- trunk/drivers/acpi/acpica/exstorob.c | 5 +- trunk/drivers/acpi/acpica/exsystem.c | 9 +- trunk/drivers/acpi/acpica/exutils.c | 5 +- trunk/drivers/acpi/acpica/hwacpi.c | 3 +- trunk/drivers/acpi/acpica/hwgpe.c | 4 +- trunk/drivers/acpi/acpica/hwpci.c | 4 +- trunk/drivers/acpi/acpica/hwregs.c | 1 - trunk/drivers/acpi/acpica/hwtimer.c | 6 +- trunk/drivers/acpi/acpica/hwvalid.c | 1 - trunk/drivers/acpi/acpica/hwxface.c | 1 - trunk/drivers/acpi/acpica/hwxfsleep.c | 12 +- trunk/drivers/acpi/acpica/nsaccess.c | 7 +- trunk/drivers/acpi/acpica/nsalloc.c | 4 +- trunk/drivers/acpi/acpica/nsdump.c | 10 +- trunk/drivers/acpi/acpica/nsinit.c | 4 +- trunk/drivers/acpi/acpica/nsload.c | 10 +- trunk/drivers/acpi/acpica/nsnames.c | 2 +- trunk/drivers/acpi/acpica/nsobject.c | 8 +- trunk/drivers/acpi/acpica/nsparse.c | 8 +- trunk/drivers/acpi/acpica/nssearch.c | 17 +- trunk/drivers/acpi/acpica/nsutils.c | 18 +- trunk/drivers/acpi/acpica/nswalk.c | 10 +- trunk/drivers/acpi/acpica/nsxfeval.c | 20 +- trunk/drivers/acpi/acpica/nsxfname.c | 66 +- trunk/drivers/acpi/acpica/nsxfobj.c | 4 +- trunk/drivers/acpi/acpica/psargs.c | 8 +- trunk/drivers/acpi/acpica/psloop.c | 61 +- trunk/drivers/acpi/acpica/psopcode.c | 29 +- trunk/drivers/acpi/acpica/psparse.c | 13 +- trunk/drivers/acpi/acpica/psutils.c | 4 +- trunk/drivers/acpi/acpica/rscalc.c | 14 +- trunk/drivers/acpi/acpica/rslist.c | 4 +- trunk/drivers/acpi/acpica/tbfind.c | 2 +- trunk/drivers/acpi/acpica/tbinstal.c | 2 + trunk/drivers/acpi/acpica/tbutils.c | 2 +- trunk/drivers/acpi/acpica/tbxface.c | 4 +- trunk/drivers/acpi/acpica/tbxfload.c | 2 +- trunk/drivers/acpi/acpica/tbxfroot.c | 3 +- trunk/drivers/acpi/acpica/utcache.c | 323 + trunk/drivers/acpi/acpica/utclib.c | 749 ++ trunk/drivers/acpi/acpica/utdebug.c | 37 +- trunk/drivers/acpi/acpica/utids.c | 104 +- trunk/drivers/acpi/acpica/utmath.c | 2 +- trunk/drivers/acpi/acpica/utmisc.c | 150 +- trunk/drivers/acpi/acpica/utmutex.c | 14 +- trunk/drivers/acpi/acpica/utobject.c | 8 +- trunk/drivers/acpi/acpica/utstate.c | 2 +- trunk/drivers/acpi/acpica/uttrack.c | 692 + trunk/drivers/acpi/acpica/utxface.c | 5 +- trunk/drivers/acpi/acpica/utxferror.c | 2 +- trunk/drivers/acpi/apei/einj.c | 2 +- trunk/drivers/acpi/apei/erst.c | 16 +- trunk/drivers/acpi/apei/ghes.c | 4 +- trunk/drivers/acpi/battery.c | 77 + trunk/drivers/acpi/bus.c | 21 +- trunk/drivers/acpi/container.c | 27 +- trunk/drivers/acpi/device_pm.c | 668 + trunk/drivers/acpi/dock.c | 56 +- trunk/drivers/acpi/ec.c | 97 +- trunk/drivers/acpi/glue.c | 56 +- trunk/drivers/acpi/hed.c | 4 +- trunk/drivers/acpi/internal.h | 11 +- trunk/drivers/acpi/osl.c | 22 +- trunk/drivers/acpi/pci_irq.c | 15 +- trunk/drivers/acpi/pci_root.c | 2 +- trunk/drivers/acpi/power.c | 2 +- trunk/drivers/acpi/proc.c | 11 +- trunk/drivers/acpi/processor_driver.c | 74 +- trunk/drivers/acpi/processor_idle.c | 57 +- trunk/drivers/acpi/resource.c | 526 + trunk/drivers/acpi/scan.c | 154 +- trunk/drivers/acpi/sleep.c | 535 +- trunk/drivers/acpi/sysfs.c | 4 +- trunk/drivers/acpi/thermal.c | 40 +- trunk/drivers/acpi/utils.c | 38 + trunk/drivers/acpi/video.c | 14 + trunk/drivers/acpi/video_detect.c | 8 + trunk/drivers/amba/bus.c | 32 +- trunk/drivers/ata/pata_at91.c | 2 +- trunk/drivers/atm/ambassador.c | 1 + trunk/drivers/base/Kconfig | 7 +- trunk/drivers/base/attribute_container.c | 2 +- trunk/drivers/base/bus.c | 14 - trunk/drivers/base/core.c | 10 +- trunk/drivers/base/devres.c | 4 +- trunk/drivers/base/dma-contiguous.c | 24 +- trunk/drivers/base/firmware_class.c | 52 +- trunk/drivers/base/memory.c | 42 +- trunk/drivers/base/node.c | 78 +- trunk/drivers/base/platform.c | 30 +- trunk/drivers/base/power/clock_ops.c | 6 +- trunk/drivers/base/power/domain.c | 11 +- trunk/drivers/base/power/opp.c | 44 +- trunk/drivers/base/power/power.h | 6 +- trunk/drivers/base/power/qos.c | 321 +- trunk/drivers/base/power/sysfs.c | 94 +- trunk/drivers/base/regmap/internal.h | 24 +- trunk/drivers/base/regmap/regmap-debugfs.c | 148 +- trunk/drivers/base/regmap/regmap-irq.c | 19 + trunk/drivers/base/regmap/regmap.c | 269 +- trunk/drivers/char/agp/ali-agp.c | 4 +- trunk/drivers/char/agp/amd-k7-agp.c | 4 +- trunk/drivers/char/agp/amd64-agp.c | 2 +- trunk/drivers/char/agp/ati-agp.c | 4 +- trunk/drivers/char/agp/efficeon-agp.c | 2 +- trunk/drivers/char/agp/i460-agp.c | 2 +- trunk/drivers/char/agp/intel-agp.c | 2 +- trunk/drivers/char/agp/nvidia-agp.c | 2 +- trunk/drivers/char/agp/sgi-agp.c | 2 +- trunk/drivers/char/agp/sis-agp.c | 8 +- trunk/drivers/char/agp/sworks-agp.c | 2 +- trunk/drivers/char/agp/uninorth-agp.c | 4 +- trunk/drivers/char/agp/via-agp.c | 4 +- trunk/drivers/char/hpet.c | 5 +- trunk/drivers/char/hw_random/Kconfig | 6 +- trunk/drivers/char/hw_random/atmel-rng.c | 2 +- trunk/drivers/char/hw_random/bcm63xx-rng.c | 2 +- trunk/drivers/char/hw_random/exynos-rng.c | 2 +- trunk/drivers/char/hw_random/ixp4xx-rng.c | 5 +- trunk/drivers/char/hw_random/n2-drv.c | 4 +- trunk/drivers/char/hw_random/pasemi-rng.c | 2 +- trunk/drivers/char/hw_random/picoxcell-rng.c | 2 +- trunk/drivers/char/hw_random/ppc4xx-rng.c | 2 +- trunk/drivers/char/hw_random/timeriomem-rng.c | 2 +- trunk/drivers/char/hw_random/virtio-rng.c | 2 +- trunk/drivers/char/ipmi/ipmi_si_intf.c | 32 +- trunk/drivers/char/mbcs.c | 2 +- trunk/drivers/char/mem.c | 10 +- trunk/drivers/char/pc8736x_gpio.c | 3 +- trunk/drivers/char/pcmcia/synclink_cs.c | 5 +- trunk/drivers/char/ps3flash.c | 2 +- trunk/drivers/char/raw.c | 2 +- trunk/drivers/char/sonypi.c | 14 +- trunk/drivers/char/tb0219.c | 6 +- trunk/drivers/char/tpm/tpm_i2c_infineon.c | 6 +- trunk/drivers/char/tpm/tpm_ibmvtpm.c | 6 +- trunk/drivers/char/tpm/tpm_infineon.c | 6 +- trunk/drivers/char/tpm/tpm_tis.c | 6 +- trunk/drivers/char/ttyprintk.c | 4 +- trunk/drivers/char/virtio_console.c | 2 +- .../char/xilinx_hwicap/xilinx_hwicap.c | 14 +- trunk/drivers/clk/Kconfig | 16 +- trunk/drivers/clk/Makefile | 1 + trunk/drivers/clk/clk-bcm2835.c | 8 +- trunk/drivers/clk/clk-fixed-rate.c | 2 +- trunk/drivers/clk/clk-max77686.c | 6 +- trunk/drivers/clk/clk-prima2.c | 84 +- trunk/drivers/clk/clk-twl6040.c | 126 + trunk/drivers/clk/clk-vt8500.c | 18 + trunk/drivers/clk/clk-wm831x.c | 40 +- trunk/drivers/clk/clk.c | 154 +- trunk/drivers/clk/mxs/clk-imx23.c | 6 +- trunk/drivers/clk/mxs/clk-imx28.c | 10 +- trunk/drivers/clk/spear/clk-aux-synth.c | 3 +- trunk/drivers/clk/spear/clk-vco-pll.c | 2 +- trunk/drivers/clk/spear/clk.c | 3 + trunk/drivers/clk/spear/spear1310_clock.c | 106 +- trunk/drivers/clk/spear/spear1340_clock.c | 237 +- trunk/drivers/clk/spear/spear3xx_clock.c | 154 +- trunk/drivers/clk/spear/spear6xx_clock.c | 13 +- trunk/drivers/clk/ux500/Makefile | 3 + trunk/drivers/clk/ux500/abx500-clk.c | 73 + trunk/drivers/clk/ux500/clk-prcmu.c | 72 + trunk/drivers/clk/ux500/clk.h | 12 + trunk/drivers/clk/ux500/u8500_clk.c | 28 +- trunk/drivers/clk/versatile/Makefile | 3 + trunk/drivers/clk/versatile/clk-icst.c | 66 +- trunk/drivers/clk/versatile/clk-icst.h | 14 +- trunk/drivers/clk/versatile/clk-impd1.c | 97 + trunk/drivers/clk/versatile/clk-integrator.c | 55 +- trunk/drivers/clk/versatile/clk-realview.c | 65 +- .../drivers/clk/versatile/clk-vexpress-osc.c | 146 + trunk/drivers/clk/versatile/clk-vexpress.c | 142 + trunk/drivers/clocksource/acpi_pm.c | 17 +- trunk/drivers/clocksource/arm_generic.c | 8 +- trunk/drivers/clocksource/i8253.c | 2 +- trunk/drivers/cpufreq/Kconfig.arm | 7 + trunk/drivers/cpufreq/Makefile | 5 +- trunk/drivers/cpufreq/cpufreq-cpu0.c | 2 +- trunk/drivers/cpufreq/cpufreq.c | 37 +- trunk/drivers/cpufreq/cpufreq_conservative.c | 558 +- trunk/drivers/cpufreq/cpufreq_governor.c | 318 + trunk/drivers/cpufreq/cpufreq_governor.h | 176 + trunk/drivers/cpufreq/cpufreq_ondemand.c | 731 +- trunk/drivers/cpufreq/cpufreq_performance.c | 2 + trunk/drivers/cpufreq/cpufreq_powersave.c | 2 + trunk/drivers/cpufreq/cpufreq_stats.c | 4 +- trunk/drivers/cpufreq/cpufreq_userspace.c | 2 + trunk/drivers/cpufreq/db8500-cpufreq.c | 101 +- trunk/drivers/cpufreq/exynos-cpufreq.c | 11 +- trunk/drivers/cpufreq/freq_table.c | 2 + trunk/drivers/cpufreq/longhaul.c | 4 +- trunk/drivers/cpufreq/powernow-k8.c | 4 +- trunk/drivers/cpufreq/spear-cpufreq.c | 291 + trunk/drivers/cpuidle/Kconfig | 9 + trunk/drivers/cpuidle/cpuidle.c | 55 +- trunk/drivers/cpuidle/cpuidle.h | 13 +- trunk/drivers/cpuidle/driver.c | 209 +- trunk/drivers/cpuidle/governors/menu.c | 168 +- trunk/drivers/cpuidle/sysfs.c | 201 +- trunk/drivers/crypto/Kconfig | 2 +- trunk/drivers/crypto/ixp4xx_crypto.c | 12 +- trunk/drivers/devfreq/Kconfig | 8 +- trunk/drivers/devfreq/devfreq.c | 921 +- trunk/drivers/devfreq/exynos4_bus.c | 45 +- trunk/drivers/devfreq/governor.h | 17 + trunk/drivers/devfreq/governor_performance.c | 38 +- trunk/drivers/devfreq/governor_powersave.c | 38 +- .../drivers/devfreq/governor_simpleondemand.c | 55 +- trunk/drivers/devfreq/governor_userspace.c | 45 +- trunk/drivers/dma/dw_dmac.c | 4 +- trunk/drivers/dma/edma.c | 4 +- trunk/drivers/dma/fsldma.c | 4 +- trunk/drivers/dma/intel_mid_dma.c | 4 +- trunk/drivers/dma/ioat/pci.c | 2 +- trunk/drivers/dma/iop-adma.c | 10 +- trunk/drivers/dma/mmp_pdma.c | 6 +- trunk/drivers/dma/mmp_tdma.c | 6 +- trunk/drivers/dma/mpc512x_dma.c | 4 +- trunk/drivers/dma/mv_xor.c | 8 +- trunk/drivers/dma/pch_dma.c | 4 +- trunk/drivers/dma/pl330.c | 2 +- trunk/drivers/dma/ppc4xx/adma.c | 4 +- trunk/drivers/dma/sa11x0-dma.c | 6 +- trunk/drivers/dma/sh/shdma.c | 6 +- trunk/drivers/dma/sirf-dma.c | 4 +- trunk/drivers/dma/tegra20-apb-dma.c | 4 +- trunk/drivers/dma/timb_dma.c | 2 +- trunk/drivers/edac/Kconfig | 8 +- trunk/drivers/edac/amd64_edac.c | 297 +- trunk/drivers/edac/amd64_edac.h | 59 +- trunk/drivers/edac/amd64_edac_inj.c | 128 +- trunk/drivers/edac/edac_mc.c | 65 +- trunk/drivers/edac/edac_mc_sysfs.c | 39 +- trunk/drivers/edac/edac_module.c | 27 +- trunk/drivers/edac/edac_pci.c | 3 +- trunk/drivers/edac/edac_pci_sysfs.c | 12 +- trunk/drivers/edac/highbank_mc_edac.c | 8 +- trunk/drivers/edac/i7300_edac.c | 8 +- trunk/drivers/edac/i7core_edac.c | 6 +- trunk/drivers/edac/i82975x_edac.c | 11 +- trunk/drivers/edac/mce_amd.c | 254 +- trunk/drivers/edac/mce_amd.h | 11 +- trunk/drivers/extcon/extcon-adc-jack.c | 6 +- trunk/drivers/extcon/extcon-arizona.c | 6 +- trunk/drivers/extcon/extcon-gpio.c | 6 +- trunk/drivers/extcon/extcon-max77693.c | 6 +- trunk/drivers/extcon/extcon-max8997.c | 6 +- trunk/drivers/firewire/nosy.c | 4 +- trunk/drivers/firewire/ohci.c | 2 +- trunk/drivers/firmware/efivars.c | 163 +- trunk/drivers/gpio/Kconfig | 36 +- trunk/drivers/gpio/Makefile | 5 + trunk/drivers/gpio/gpio-74x164.c | 6 +- trunk/drivers/gpio/gpio-ab8500.c | 6 +- trunk/drivers/gpio/gpio-adnp.c | 10 +- trunk/drivers/gpio/gpio-adp5520.c | 6 +- trunk/drivers/gpio/gpio-adp5588.c | 6 +- trunk/drivers/gpio/gpio-arizona.c | 6 +- trunk/drivers/gpio/gpio-clps711x.c | 199 + trunk/drivers/gpio/gpio-cs5535.c | 6 +- trunk/drivers/gpio/gpio-da9052.c | 8 +- trunk/drivers/gpio/gpio-da9055.c | 204 + trunk/drivers/gpio/gpio-em.c | 54 +- trunk/drivers/gpio/gpio-ep93xx.c | 2 +- trunk/drivers/gpio/gpio-generic.c | 6 +- trunk/drivers/gpio/gpio-ich.c | 10 +- trunk/drivers/gpio/gpio-janz-ttl.c | 10 +- trunk/drivers/gpio/gpio-langwell.c | 8 +- trunk/drivers/gpio/gpio-lpc32xx.c | 4 +- trunk/drivers/gpio/gpio-max7300.c | 6 +- trunk/drivers/gpio/gpio-max7301.c | 6 +- trunk/drivers/gpio/gpio-max730x.c | 16 +- trunk/drivers/gpio/gpio-max732x.c | 8 +- trunk/drivers/gpio/gpio-mc33880.c | 6 +- trunk/drivers/gpio/gpio-mcp23s08.c | 6 +- trunk/drivers/gpio/gpio-ml-ioh.c | 8 +- trunk/drivers/gpio/gpio-mpc5200.c | 4 +- trunk/drivers/gpio/gpio-msic.c | 2 +- trunk/drivers/gpio/gpio-msm-v2.c | 6 +- trunk/drivers/gpio/gpio-mvebu.c | 13 +- trunk/drivers/gpio/gpio-mxc.c | 4 +- trunk/drivers/gpio/gpio-mxs.c | 2 +- trunk/drivers/gpio/gpio-omap.c | 8 +- trunk/drivers/gpio/gpio-pca953x.c | 61 +- trunk/drivers/gpio/gpio-pcf857x.c | 29 +- trunk/drivers/gpio/gpio-pch.c | 9 +- trunk/drivers/gpio/gpio-pl061.c | 66 +- trunk/drivers/gpio/gpio-pxa.c | 6 +- trunk/drivers/gpio/gpio-rc5t583.c | 6 +- trunk/drivers/gpio/gpio-rdc321x.c | 6 +- trunk/drivers/gpio/gpio-sch.c | 6 +- trunk/drivers/gpio/gpio-sodaville.c | 4 +- trunk/drivers/gpio/gpio-spear-spics.c | 217 + trunk/drivers/gpio/gpio-sta2x11.c | 4 +- trunk/drivers/gpio/gpio-stmpe.c | 94 +- trunk/drivers/gpio/gpio-stp-xway.c | 2 +- trunk/drivers/gpio/gpio-sx150x.c | 6 +- trunk/drivers/gpio/gpio-tc3589x.c | 26 +- trunk/drivers/gpio/gpio-tegra.c | 47 +- trunk/drivers/gpio/gpio-timberdale.c | 4 +- trunk/drivers/gpio/gpio-tps6586x.c | 6 +- trunk/drivers/gpio/gpio-tps65910.c | 6 +- trunk/drivers/gpio/gpio-tps65912.c | 6 +- trunk/drivers/gpio/gpio-ts5500.c | 466 + trunk/drivers/gpio/gpio-twl4030.c | 43 +- trunk/drivers/gpio/gpio-twl6040.c | 4 +- trunk/drivers/gpio/gpio-vr41xx.c | 6 +- trunk/drivers/gpio/gpio-vt8500.c | 4 +- trunk/drivers/gpio/gpio-vx855.c | 6 +- trunk/drivers/gpio/gpio-wm831x.c | 6 +- trunk/drivers/gpio/gpio-wm8350.c | 6 +- trunk/drivers/gpio/gpio-wm8994.c | 6 +- trunk/drivers/gpio/gpio-xilinx.c | 4 +- trunk/drivers/gpio/gpiolib-acpi.c | 54 + trunk/drivers/gpio/gpiolib-of.c | 52 + trunk/drivers/gpio/gpiolib.c | 200 +- .../gpu/drm/exynos/exynos_drm_encoder.c | 8 +- .../drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 3 +- .../drivers/gpu/drm/exynos/exynos_drm_fimd.c | 4 +- .../drivers/gpu/drm/exynos/exynos_drm_plane.c | 1 - trunk/drivers/gpu/drm/i915/i915_gem.c | 6 +- trunk/drivers/gpu/drm/i915/intel_bios.c | 11 +- trunk/drivers/gpu/drm/i915/intel_display.c | 2 +- trunk/drivers/gpu/drm/i915/intel_pm.c | 12 +- trunk/drivers/gpu/drm/i915/intel_sdvo.c | 17 +- trunk/drivers/gpu/drm/radeon/atombios_crtc.c | 48 +- trunk/drivers/hv/Kconfig | 6 + trunk/drivers/hv/Makefile | 1 + trunk/drivers/hv/channel.c | 8 - trunk/drivers/hv/channel_mgmt.c | 8 - trunk/drivers/hv/hv_balloon.c | 1041 ++ trunk/drivers/hwmon/Kconfig | 19 +- trunk/drivers/hwmon/Makefile | 1 + trunk/drivers/hwmon/abituguru.c | 12 +- trunk/drivers/hwmon/abituguru3.c | 6 +- trunk/drivers/hwmon/ad7314.c | 6 +- trunk/drivers/hwmon/ad7414.c | 4 +- trunk/drivers/hwmon/adcxx.c | 6 +- trunk/drivers/hwmon/ads7828.c | 247 +- trunk/drivers/hwmon/ads7871.c | 6 +- trunk/drivers/hwmon/adt7411.c | 6 +- trunk/drivers/hwmon/coretemp.c | 68 +- trunk/drivers/hwmon/da9052-hwmon.c | 33 +- trunk/drivers/hwmon/da9055-hwmon.c | 336 + trunk/drivers/hwmon/dme1737.c | 6 +- trunk/drivers/hwmon/f71805f.c | 8 +- trunk/drivers/hwmon/f71882fg.c | 8 +- trunk/drivers/hwmon/fam15h_power.c | 14 +- trunk/drivers/hwmon/gpio-fan.c | 8 +- trunk/drivers/hwmon/hih6130.c | 6 +- trunk/drivers/hwmon/i5k_amb.c | 18 +- trunk/drivers/hwmon/ina2xx.c | 13 +- trunk/drivers/hwmon/it87.c | 12 +- trunk/drivers/hwmon/jz4740-hwmon.c | 6 +- trunk/drivers/hwmon/k10temp.c | 8 +- trunk/drivers/hwmon/k8temp.c | 8 +- trunk/drivers/hwmon/lm70.c | 6 +- trunk/drivers/hwmon/lm78.c | 6 +- trunk/drivers/hwmon/max1111.c | 8 +- trunk/drivers/hwmon/max197.c | 6 +- trunk/drivers/hwmon/mc13783-adc.c | 4 +- trunk/drivers/hwmon/ntc_thermistor.c | 6 +- trunk/drivers/hwmon/pc87360.c | 8 +- trunk/drivers/hwmon/pc87427.c | 10 +- trunk/drivers/hwmon/s3c-hwmon.c | 6 +- trunk/drivers/hwmon/sch5627.c | 4 +- trunk/drivers/hwmon/sch5636.c | 2 +- trunk/drivers/hwmon/sht15.c | 6 +- trunk/drivers/hwmon/sht21.c | 6 +- trunk/drivers/hwmon/sis5595.c | 16 +- trunk/drivers/hwmon/smsc47b397.c | 6 +- trunk/drivers/hwmon/tmp102.c | 6 +- trunk/drivers/hwmon/twl4030-madc-hwmon.c | 4 +- trunk/drivers/hwmon/ultra45_env.c | 6 +- trunk/drivers/hwmon/via-cputemp.c | 6 +- trunk/drivers/hwmon/via686a.c | 14 +- trunk/drivers/hwmon/vt1211.c | 8 +- trunk/drivers/hwmon/vt8231.c | 12 +- trunk/drivers/hwmon/w83627ehf.c | 12 +- trunk/drivers/hwmon/w83627hf.c | 14 +- trunk/drivers/hwmon/w83781d.c | 6 +- trunk/drivers/hwmon/wm831x-hwmon.c | 6 +- trunk/drivers/hwmon/wm8350-hwmon.c | 6 +- trunk/drivers/hwspinlock/omap_hwspinlock.c | 6 +- trunk/drivers/hwspinlock/u8500_hsem.c | 6 +- trunk/drivers/i2c/busses/i2c-ocores.c | 4 - trunk/drivers/i2c/i2c-core.c | 6 + trunk/drivers/idle/intel_idle.c | 14 +- trunk/drivers/iio/Kconfig | 13 +- trunk/drivers/iio/Makefile | 8 +- trunk/drivers/iio/accel/Kconfig | 2 +- trunk/drivers/iio/accel/hid-sensor-accel-3d.c | 21 +- trunk/drivers/iio/adc/Kconfig | 65 + trunk/drivers/iio/adc/Makefile | 6 + trunk/drivers/iio/adc/ad7266.c | 3 +- .../adc/ad7298_core.c => iio/adc/ad7298.c} | 201 +- trunk/drivers/iio/adc/ad7476.c | 2 +- trunk/drivers/{staging => }/iio/adc/ad7793.c | 390 +- .../adc/ad7887_core.c => iio/adc/ad7887.c} | 217 +- trunk/drivers/iio/adc/ad_sigma_delta.c | 2 +- trunk/drivers/iio/adc/at91_adc.c | 6 +- .../adc/max1363_core.c => iio/adc/max1363.c} | 330 +- trunk/drivers/iio/adc/ti-adc081c.c | 161 + trunk/drivers/iio/buffer_cb.c | 113 + trunk/drivers/iio/common/hid-sensors/Kconfig | 2 +- .../common/hid-sensors/hid-sensor-trigger.c | 6 +- trunk/drivers/iio/dac/Kconfig | 12 +- trunk/drivers/iio/dac/Makefile | 1 + trunk/drivers/iio/dac/ad5449.c | 376 + trunk/drivers/iio/dac/ad5686.c | 2 +- trunk/drivers/iio/gyro/Kconfig | 9 + trunk/drivers/iio/gyro/Makefile | 1 + trunk/drivers/iio/gyro/adis16136.c | 580 + trunk/drivers/iio/gyro/hid-sensor-gyro-3d.c | 21 +- trunk/drivers/iio/imu/Kconfig | 27 + trunk/drivers/iio/imu/Makefile | 10 + trunk/drivers/iio/imu/adis.c | 440 + trunk/drivers/iio/imu/adis16480.c | 924 ++ trunk/drivers/iio/imu/adis_buffer.c | 176 + trunk/drivers/iio/imu/adis_trigger.c | 89 + trunk/drivers/iio/industrialio-buffer.c | 386 +- trunk/drivers/iio/industrialio-core.c | 105 +- trunk/drivers/iio/industrialio-event.c | 11 +- trunk/drivers/iio/inkern.c | 6 +- trunk/drivers/iio/light/adjd_s311.c | 3 +- trunk/drivers/iio/light/hid-sensor-als.c | 20 +- .../iio/magnetometer/hid-sensor-magn-3d.c | 21 +- trunk/drivers/input/matrix-keymap.c | 3 + .../drivers/input/touchscreen/atmel_tsadcc.c | 2 +- trunk/drivers/ipack/Kconfig | 24 + trunk/drivers/{staging => }/ipack/Makefile | 2 +- trunk/drivers/ipack/carriers/Kconfig | 7 + .../ipack/bridges => ipack/carriers}/Makefile | 0 .../bridges => ipack/carriers}/tpci200.c | 321 +- .../bridges => ipack/carriers}/tpci200.h | 33 +- .../{staging => }/ipack/devices/Kconfig | 1 - .../{staging => }/ipack/devices/Makefile | 0 .../{staging => }/ipack/devices/ipoctal.c | 129 +- .../{staging => }/ipack/devices/ipoctal.h | 7 +- .../{staging => }/ipack/devices/scc2698.h | 7 +- trunk/drivers/{staging => }/ipack/ipack.c | 64 +- trunk/drivers/isdn/capi/capi.c | 36 +- trunk/drivers/isdn/gigaset/common.c | 1 + trunk/drivers/isdn/i4l/isdn_tty.c | 4 + trunk/drivers/leds/leds-adp5520.c | 8 +- trunk/drivers/leds/leds-asic3.c | 6 +- trunk/drivers/leds/leds-atmel-pwm.c | 2 +- trunk/drivers/leds/leds-bd2802.c | 2 +- trunk/drivers/leds/leds-blinkm.c | 6 +- trunk/drivers/leds/leds-clevo-mail.c | 2 +- trunk/drivers/leds/leds-cobalt-qube.c | 6 +- trunk/drivers/leds/leds-cobalt-raq.c | 6 +- trunk/drivers/leds/leds-da903x.c | 6 +- trunk/drivers/leds/leds-da9052.c | 6 +- trunk/drivers/leds/leds-gpio.c | 12 +- trunk/drivers/leds/leds-lm3530.c | 6 +- trunk/drivers/leds/leds-lm3533.c | 8 +- trunk/drivers/leds/leds-lm355x.c | 8 +- trunk/drivers/leds/leds-lm3642.c | 8 +- trunk/drivers/leds/leds-lp3944.c | 6 +- trunk/drivers/leds/leds-lp5521.c | 8 +- trunk/drivers/leds/leds-lp5523.c | 4 +- trunk/drivers/leds/leds-lp8788.c | 6 +- trunk/drivers/leds/leds-lt3593.c | 8 +- trunk/drivers/leds/leds-max8997.c | 6 +- trunk/drivers/leds/leds-mc13783.c | 10 +- trunk/drivers/leds/leds-netxbig.c | 10 +- trunk/drivers/leds/leds-ns2.c | 8 +- trunk/drivers/leds/leds-ot200.c | 6 +- trunk/drivers/leds/leds-pca955x.c | 6 +- trunk/drivers/leds/leds-pca9633.c | 6 +- trunk/drivers/leds/leds-pwm.c | 4 +- trunk/drivers/leds/leds-rb532.c | 6 +- trunk/drivers/leds/leds-regulator.c | 6 +- trunk/drivers/leds/leds-renesas-tpu.c | 6 +- trunk/drivers/leds/leds-ss4200.c | 4 +- trunk/drivers/leds/leds-sunfire.c | 12 +- trunk/drivers/leds/leds-tca6507.c | 6 +- trunk/drivers/macintosh/smu.c | 2 +- trunk/drivers/md/raid1.c | 2 +- trunk/drivers/md/raid10.c | 2 +- .../media/dvb-frontends/stv0900_core.c | 6 +- trunk/drivers/media/i2c/adv7604.c | 377 +- trunk/drivers/media/i2c/soc_camera/mt9v022.c | 11 +- .../media/platform/exynos-gsc/gsc-core.c | 6 +- .../media/platform/exynos-gsc/gsc-m2m.c | 4 +- .../media/platform/exynos-gsc/gsc-regs.h | 16 +- .../drivers/media/platform/omap3isp/ispccdc.c | 4 +- .../drivers/media/platform/omap3isp/ispstat.c | 4 +- .../drivers/media/platform/omap3isp/ispstat.h | 4 +- .../media/platform/omap3isp/ispvideo.c | 2 +- trunk/drivers/media/platform/s5p-fimc/Kconfig | 1 + .../media/platform/s5p-fimc/fimc-capture.c | 14 +- .../media/platform/s5p-fimc/fimc-lite.c | 10 +- .../media/platform/s5p-fimc/fimc-m2m.c | 3 +- .../media/platform/s5p-fimc/fimc-mdevice.c | 41 +- .../drivers/media/platform/s5p-mfc/s5p_mfc.c | 7 +- .../media/platform/s5p-mfc/s5p_mfc_opr_v6.c | 2 +- trunk/drivers/media/platform/sh_vou.c | 3 +- .../media/platform/soc_camera/mx1_camera.c | 9 - .../media/platform/soc_camera/mx2_camera.c | 13 +- .../media/platform/soc_camera/mx3_camera.c | 5 +- .../media/platform/soc_camera/omap1_camera.c | 4 +- .../media/platform/soc_camera/pxa_camera.c | 4 +- .../soc_camera/sh_mobile_ceu_camera.c | 13 +- .../media/usb/dvb-usb-v2/dvb_usb_core.c | 11 +- .../media/usb/dvb-usb-v2/dvb_usb_urb.c | 4 +- trunk/drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 4 + trunk/drivers/memstick/host/Kconfig | 10 + trunk/drivers/memstick/host/Makefile | 1 + trunk/drivers/memstick/host/rtsx_pci_ms.c | 641 + trunk/drivers/mfd/88pm800.c | 12 +- trunk/drivers/mfd/88pm805.c | 10 +- trunk/drivers/mfd/88pm80x.c | 2 +- trunk/drivers/mfd/88pm860x-core.c | 104 +- trunk/drivers/mfd/Kconfig | 10 + trunk/drivers/mfd/Makefile | 3 + trunk/drivers/mfd/ab3100-core.c | 13 +- trunk/drivers/mfd/ab8500-core.c | 40 +- trunk/drivers/mfd/ab8500-debugfs.c | 6 +- trunk/drivers/mfd/ab8500-gpadc.c | 6 +- trunk/drivers/mfd/ab8500-sysctrl.c | 6 +- trunk/drivers/mfd/adp5520.c | 6 +- trunk/drivers/mfd/arizona-core.c | 18 +- trunk/drivers/mfd/arizona-i2c.c | 6 +- trunk/drivers/mfd/arizona-irq.c | 1 + trunk/drivers/mfd/arizona-spi.c | 6 +- trunk/drivers/mfd/asic3.c | 4 +- trunk/drivers/mfd/cs5535-mfd.c | 12 +- trunk/drivers/mfd/da903x.c | 10 +- trunk/drivers/mfd/da9052-core.c | 4 +- trunk/drivers/mfd/da9052-i2c.c | 6 +- trunk/drivers/mfd/da9052-spi.c | 6 +- trunk/drivers/mfd/da9055-core.c | 4 +- trunk/drivers/mfd/da9055-i2c.c | 6 +- trunk/drivers/mfd/davinci_voicecodec.c | 4 +- trunk/drivers/mfd/db8500-prcmu.c | 88 +- trunk/drivers/mfd/ezx-pcap.c | 8 +- trunk/drivers/mfd/htc-i2cpld.c | 12 +- trunk/drivers/mfd/intel_msic.c | 10 +- trunk/drivers/mfd/janz-cmodio.c | 10 +- trunk/drivers/mfd/jz4740-adc.c | 6 +- trunk/drivers/mfd/lm3533-core.c | 18 +- trunk/drivers/mfd/lp8788.c | 4 +- trunk/drivers/mfd/lpc_ich.c | 20 +- trunk/drivers/mfd/lpc_sch.c | 6 +- trunk/drivers/mfd/max77686.c | 2 +- trunk/drivers/mfd/max8907.c | 4 +- trunk/drivers/mfd/max8925-core.c | 58 +- trunk/drivers/mfd/max8925-i2c.c | 6 +- trunk/drivers/mfd/mc13xxx-i2c.c | 4 +- trunk/drivers/mfd/mc13xxx-spi.c | 4 +- trunk/drivers/mfd/omap-usb-host.c | 4 +- trunk/drivers/mfd/omap-usb-tll.c | 6 +- trunk/drivers/mfd/palmas.c | 6 +- trunk/drivers/mfd/pcf50633-adc.c | 6 +- trunk/drivers/mfd/pcf50633-core.c | 6 +- trunk/drivers/mfd/pm8921-core.c | 8 +- trunk/drivers/mfd/pm8xxx-irq.c | 4 +- trunk/drivers/mfd/rc5t583.c | 6 +- trunk/drivers/mfd/rdc321x-southbridge.c | 6 +- trunk/drivers/mfd/rtl8411.c | 251 + trunk/drivers/mfd/rts5209.c | 223 + trunk/drivers/mfd/rts5229.c | 205 + trunk/drivers/mfd/rtsx_pcr.c | 1251 ++ .../rts_pstor/general.h => mfd/rtsx_pcr.h} | 15 +- trunk/drivers/mfd/sm501.c | 16 +- trunk/drivers/mfd/sta2x11-mfd.c | 20 +- trunk/drivers/mfd/stmpe-i2c.c | 6 +- trunk/drivers/mfd/stmpe-spi.c | 6 +- trunk/drivers/mfd/stmpe.c | 2 + trunk/drivers/mfd/syscon.c | 6 +- trunk/drivers/mfd/tc3589x.c | 8 +- trunk/drivers/mfd/tc6387xb.c | 6 +- trunk/drivers/mfd/tc6393xb.c | 12 +- trunk/drivers/mfd/ti-ssp.c | 6 +- trunk/drivers/mfd/timberdale.c | 64 +- trunk/drivers/mfd/tps6105x.c | 8 +- trunk/drivers/mfd/tps65090.c | 8 +- trunk/drivers/mfd/tps65217.c | 6 +- trunk/drivers/mfd/tps6586x.c | 10 +- trunk/drivers/mfd/tps65910.c | 10 +- trunk/drivers/mfd/tps65911-comparator.c | 6 +- trunk/drivers/mfd/tps65912-spi.c | 6 +- trunk/drivers/mfd/twl-core.c | 4 +- trunk/drivers/mfd/twl4030-audio.c | 6 +- trunk/drivers/mfd/twl4030-irq.c | 3 +- trunk/drivers/mfd/twl4030-madc.c | 4 +- trunk/drivers/mfd/twl4030-power.c | 20 +- trunk/drivers/mfd/vx855.c | 6 +- trunk/drivers/mfd/wl1273-core.c | 4 +- trunk/drivers/mfd/wm5102-tables.c | 519 +- trunk/drivers/mfd/wm831x-spi.c | 6 +- trunk/drivers/mfd/wm8994-core.c | 16 +- trunk/drivers/misc/ad525x_dpot-i2c.c | 6 +- trunk/drivers/misc/ad525x_dpot-spi.c | 6 +- trunk/drivers/misc/ad525x_dpot.c | 4 +- trunk/drivers/misc/apds9802als.c | 6 +- trunk/drivers/misc/apds990x.c | 6 +- trunk/drivers/misc/atmel-ssc.c | 4 +- trunk/drivers/misc/bh1770glc.c | 6 +- trunk/drivers/misc/bh1780gli.c | 6 +- trunk/drivers/misc/bmp085-i2c.c | 4 +- trunk/drivers/misc/bmp085-spi.c | 4 +- trunk/drivers/misc/bmp085.c | 2 +- trunk/drivers/misc/cb710/core.c | 10 +- trunk/drivers/misc/cs5535-mfgpt.c | 6 +- trunk/drivers/misc/eeprom/at24.c | 4 +- trunk/drivers/misc/eeprom/at25.c | 4 +- trunk/drivers/misc/eeprom/eeprom_93xx46.c | 6 +- trunk/drivers/misc/fsa9480.c | 6 +- trunk/drivers/misc/hpilo.c | 21 +- trunk/drivers/misc/ibmasm/module.c | 6 +- trunk/drivers/misc/ioc4.c | 10 +- trunk/drivers/misc/isl29003.c | 6 +- trunk/drivers/misc/lis3lv02d/lis3lv02d_i2c.c | 6 +- trunk/drivers/misc/lis3lv02d/lis3lv02d_spi.c | 6 +- trunk/drivers/misc/mei/Makefile | 1 + trunk/drivers/misc/mei/amthif.c | 722 ++ trunk/drivers/misc/mei/hw.h | 36 +- trunk/drivers/misc/mei/init.c | 368 +- trunk/drivers/misc/mei/interface.c | 91 +- trunk/drivers/misc/mei/interrupt.c | 760 +- trunk/drivers/misc/mei/iorw.c | 455 +- trunk/drivers/misc/mei/main.c | 462 +- trunk/drivers/misc/mei/mei_dev.h | 155 +- trunk/drivers/misc/mei/wd.c | 15 +- trunk/drivers/misc/pch_phub.c | 6 +- trunk/drivers/misc/phantom.c | 10 +- trunk/drivers/misc/pti.c | 15 +- trunk/drivers/misc/spear13xx_pcie_gadget.c | 4 +- trunk/drivers/misc/ti-st/st_core.c | 1 - trunk/drivers/misc/ti-st/st_kim.c | 30 +- trunk/drivers/misc/ti_dac7512.c | 6 +- trunk/drivers/misc/tsl2550.c | 6 +- trunk/drivers/mmc/card/block.c | 81 + trunk/drivers/mmc/card/queue.c | 17 +- trunk/drivers/mmc/card/sdio_uart.c | 24 +- trunk/drivers/mmc/core/bus.c | 3 +- trunk/drivers/mmc/core/core.c | 32 +- trunk/drivers/mmc/core/debugfs.c | 16 + trunk/drivers/mmc/core/mmc.c | 19 +- trunk/drivers/mmc/core/mmc_ops.c | 11 + trunk/drivers/mmc/core/sdio_bus.c | 17 +- trunk/drivers/mmc/core/sdio_io.c | 10 +- trunk/drivers/mmc/core/sdio_ops.c | 32 +- trunk/drivers/mmc/core/slot-gpio.c | 8 +- trunk/drivers/mmc/host/Kconfig | 52 +- trunk/drivers/mmc/host/Makefile | 5 +- trunk/drivers/mmc/host/at91_mci.c | 1219 -- trunk/drivers/mmc/host/at91_mci.h | 115 - trunk/drivers/mmc/host/atmel-mci.c | 4 +- trunk/drivers/mmc/host/au1xmmc.c | 4 +- trunk/drivers/mmc/host/bfin_sdh.c | 6 +- trunk/drivers/mmc/host/cb710-mmc.c | 6 +- trunk/drivers/mmc/host/dw_mmc-pci.c | 6 +- trunk/drivers/mmc/host/dw_mmc-pltfm.c | 20 +- trunk/drivers/mmc/host/dw_mmc-pltfm.h | 2 +- trunk/drivers/mmc/host/dw_mmc.c | 86 +- trunk/drivers/mmc/host/jz4740_mmc.c | 12 +- trunk/drivers/mmc/host/mmc_spi.c | 6 +- trunk/drivers/mmc/host/mmci.c | 76 +- trunk/drivers/mmc/host/mmci.h | 4 + trunk/drivers/mmc/host/mxcmmc.c | 2 +- trunk/drivers/mmc/host/mxs-mmc.c | 31 +- trunk/drivers/mmc/host/omap.c | 8 +- trunk/drivers/mmc/host/omap_hsmmc.c | 183 +- trunk/drivers/mmc/host/pxamci.c | 4 +- trunk/drivers/mmc/host/rtsx_pci_sdmmc.c | 1348 ++ trunk/drivers/mmc/host/s3cmci.c | 6 +- trunk/drivers/mmc/host/sdhci-acpi.c | 312 + trunk/drivers/mmc/host/sdhci-cns3xxx.c | 6 +- trunk/drivers/mmc/host/sdhci-dove.c | 116 +- trunk/drivers/mmc/host/sdhci-esdhc-imx.c | 64 +- trunk/drivers/mmc/host/sdhci-of-esdhc.c | 60 +- trunk/drivers/mmc/host/sdhci-of-hlwd.c | 6 +- trunk/drivers/mmc/host/sdhci-pci.c | 15 +- trunk/drivers/mmc/host/sdhci-pltfm.c | 9 + trunk/drivers/mmc/host/sdhci-pxav2.c | 6 +- trunk/drivers/mmc/host/sdhci-pxav3.c | 19 +- trunk/drivers/mmc/host/sdhci-s3c.c | 75 +- trunk/drivers/mmc/host/sdhci-spear.c | 21 +- trunk/drivers/mmc/host/sdhci-tegra.c | 10 +- trunk/drivers/mmc/host/sdhci.c | 79 +- trunk/drivers/mmc/host/sdhci.h | 5 +- trunk/drivers/mmc/host/sh_mmcif.c | 18 +- trunk/drivers/mmc/host/sh_mobile_sdhi.c | 12 +- trunk/drivers/mmc/host/tmio_mmc.c | 6 +- trunk/drivers/mmc/host/tmio_mmc_pio.c | 2 +- trunk/drivers/mmc/host/via-sdmmc.c | 6 +- trunk/drivers/mmc/host/vub300.c | 1 + trunk/drivers/mmc/host/wbsd.c | 28 +- trunk/drivers/mmc/host/wmt-sdmmc.c | 1029 ++ trunk/drivers/mtd/mtdcore.c | 6 +- trunk/drivers/mtd/nand/atmel_nand.c | 9 + trunk/drivers/mtd/nand/sh_flctl.c | 4 +- trunk/drivers/mtd/ubi/wl.c | 26 +- trunk/drivers/net/bonding/bond_main.c | 93 +- trunk/drivers/net/bonding/bond_sysfs.c | 36 +- trunk/drivers/net/can/at91_can.c | 3 +- trunk/drivers/net/can/usb/peak_usb/pcan_usb.c | 8 +- .../net/can/usb/peak_usb/pcan_usb_pro.c | 8 +- .../drivers/net/ethernet/cadence/at91_ether.c | 2 +- .../net/ethernet/mellanox/mlx4/en_dcb_nl.c | 2 +- trunk/drivers/net/ethernet/realtek/8139cp.c | 11 +- trunk/drivers/net/team/team.c | 4 +- trunk/drivers/net/usb/hso.c | 5 +- trunk/drivers/net/usb/qmi_wwan.c | 1 + trunk/drivers/net/wan/ixp4xx_hss.c | 2 +- trunk/drivers/net/wireless/iwlwifi/dvm/rxon.c | 12 +- trunk/drivers/of/base.c | 128 +- trunk/drivers/of/fdt.c | 18 +- trunk/drivers/of/of_i2c.c | 2 +- trunk/drivers/of/of_mdio.c | 2 +- trunk/drivers/of/pdt.c | 12 +- trunk/drivers/parport/Kconfig | 16 +- trunk/drivers/pci/Makefile | 7 +- trunk/drivers/pci/hotplug.c | 37 - trunk/drivers/pci/hotplug/cpcihp_zt5550.c | 4 +- trunk/drivers/pci/ioapic.c | 6 +- trunk/drivers/pci/pci-acpi.c | 79 +- trunk/drivers/pci/pci-driver.c | 42 +- trunk/drivers/pci/pci-sysfs.c | 7 - trunk/drivers/pci/pci.c | 4 +- trunk/drivers/pci/pci.h | 5 - trunk/drivers/pci/pcie/aer/aerdrv.c | 4 +- trunk/drivers/pci/pcie/portdrv_pci.c | 2 +- trunk/drivers/pci/probe.c | 20 +- trunk/drivers/pci/quirks.c | 132 +- trunk/drivers/pci/xen-pcifront.c | 10 +- trunk/drivers/pcmcia/at91_cf.c | 2 +- trunk/drivers/pcmcia/bcm63xx_pcmcia.c | 12 +- trunk/drivers/pcmcia/bfin_cf_pcmcia.c | 6 +- trunk/drivers/pcmcia/db1xxx_ss.c | 6 +- trunk/drivers/pcmcia/ds.c | 13 +- trunk/drivers/pcmcia/electra_cf.c | 4 +- trunk/drivers/pcmcia/i82092.c | 6 +- trunk/drivers/pcmcia/pd6729.c | 8 +- trunk/drivers/pcmcia/pxa2xx_sharpsl.c | 2 +- trunk/drivers/pcmcia/rsrc_nonstatic.c | 6 +- trunk/drivers/pcmcia/sa1100_assabet.c | 2 +- trunk/drivers/pcmcia/sa1100_cerf.c | 2 +- trunk/drivers/pcmcia/sa1100_generic.c | 4 +- trunk/drivers/pcmcia/sa1100_h3600.c | 2 +- trunk/drivers/pcmcia/sa1100_shannon.c | 2 +- trunk/drivers/pcmcia/sa1100_simpad.c | 2 +- trunk/drivers/pcmcia/sa1111_generic.c | 4 +- trunk/drivers/pcmcia/sa1111_jornada720.c | 2 +- trunk/drivers/pcmcia/vrc4171_card.c | 8 +- trunk/drivers/pcmcia/vrc4173_cardu.c | 8 +- trunk/drivers/pcmcia/xxs1500_ss.c | 6 +- trunk/drivers/pcmcia/yenta_socket.c | 6 +- trunk/drivers/pinctrl/Kconfig | 50 +- trunk/drivers/pinctrl/Makefile | 7 +- trunk/drivers/pinctrl/core.c | 58 + trunk/drivers/pinctrl/core.h | 2 + trunk/drivers/pinctrl/devicetree.c | 11 + trunk/drivers/pinctrl/mvebu/Kconfig | 24 + trunk/drivers/pinctrl/mvebu/Makefile | 5 + .../pinctrl/{ => mvebu}/pinctrl-armada-370.c | 0 .../pinctrl/{ => mvebu}/pinctrl-armada-xp.c | 0 .../pinctrl/{ => mvebu}/pinctrl-dove.c | 0 .../pinctrl/{ => mvebu}/pinctrl-kirkwood.c | 0 .../pinctrl/{ => mvebu}/pinctrl-mvebu.c | 1 - .../pinctrl/{ => mvebu}/pinctrl-mvebu.h | 0 trunk/drivers/pinctrl/pinconf-generic.c | 1 + trunk/drivers/pinctrl/pinctrl-at91.c | 1634 +++ trunk/drivers/pinctrl/pinctrl-bcm2835.c | 10 +- trunk/drivers/pinctrl/pinctrl-coh901.c | 175 +- trunk/drivers/pinctrl/pinctrl-exynos.c | 1 + trunk/drivers/pinctrl/pinctrl-falcon.c | 2 +- trunk/drivers/pinctrl/pinctrl-imx.c | 6 +- trunk/drivers/pinctrl/pinctrl-imx23.c | 4 +- trunk/drivers/pinctrl/pinctrl-imx28.c | 4 +- trunk/drivers/pinctrl/pinctrl-imx35.c | 4 +- trunk/drivers/pinctrl/pinctrl-imx51.c | 4 +- trunk/drivers/pinctrl/pinctrl-imx53.c | 4 +- trunk/drivers/pinctrl/pinctrl-imx6q.c | 4 +- trunk/drivers/pinctrl/pinctrl-lantiq.c | 23 +- trunk/drivers/pinctrl/pinctrl-mmp2.c | 4 +- trunk/drivers/pinctrl/pinctrl-mxs.c | 4 +- .../drivers/pinctrl/pinctrl-nomadik-db8500.c | 125 +- .../drivers/pinctrl/pinctrl-nomadik-db8540.c | 16 +- trunk/drivers/pinctrl/pinctrl-nomadik.c | 152 +- trunk/drivers/pinctrl/pinctrl-nomadik.h | 2 +- trunk/drivers/pinctrl/pinctrl-pxa168.c | 4 +- trunk/drivers/pinctrl/pinctrl-pxa3xx.c | 12 +- trunk/drivers/pinctrl/pinctrl-pxa3xx.h | 2 - trunk/drivers/pinctrl/pinctrl-pxa910.c | 4 +- trunk/drivers/pinctrl/pinctrl-single.c | 96 +- trunk/drivers/pinctrl/pinctrl-sirf.c | 54 +- trunk/drivers/pinctrl/pinctrl-tegra.c | 26 +- trunk/drivers/pinctrl/pinctrl-tegra20.c | 4 +- trunk/drivers/pinctrl/pinctrl-tegra30.c | 4 +- trunk/drivers/pinctrl/pinctrl-u300.c | 101 +- trunk/drivers/pinctrl/pinctrl-xway.c | 2 +- trunk/drivers/pinctrl/pinmux.c | 85 +- trunk/drivers/pinctrl/spear/Kconfig | 11 + trunk/drivers/pinctrl/spear/Makefile | 1 + trunk/drivers/pinctrl/spear/pinctrl-plgpio.c | 758 ++ trunk/drivers/pinctrl/spear/pinctrl-spear.c | 133 +- trunk/drivers/pinctrl/spear/pinctrl-spear.h | 62 +- .../drivers/pinctrl/spear/pinctrl-spear1310.c | 270 +- .../drivers/pinctrl/spear/pinctrl-spear1340.c | 33 +- .../drivers/pinctrl/spear/pinctrl-spear300.c | 8 +- .../drivers/pinctrl/spear/pinctrl-spear310.c | 8 +- .../drivers/pinctrl/spear/pinctrl-spear320.c | 8 +- .../drivers/pinctrl/spear/pinctrl-spear3xx.c | 37 + trunk/drivers/platform/x86/acerhdf.c | 2 +- .../drivers/platform/x86/intel_mid_thermal.c | 2 +- trunk/drivers/pnp/base.h | 2 + trunk/drivers/pnp/pnpacpi/core.c | 9 +- trunk/drivers/pnp/pnpacpi/rsparser.c | 296 +- trunk/drivers/pnp/pnpbios/core.c | 20 +- trunk/drivers/pnp/resource.c | 16 + trunk/drivers/power/88pm860x_battery.c | 6 +- trunk/drivers/power/88pm860x_charger.c | 6 +- trunk/drivers/power/ab8500_btemp.c | 6 +- trunk/drivers/power/ab8500_charger.c | 6 +- trunk/drivers/power/ab8500_fg.c | 6 +- trunk/drivers/power/abx500_chargalg.c | 6 +- trunk/drivers/power/avs/smartreflex.c | 8 +- trunk/drivers/power/bq27x00_battery.c | 6 +- trunk/drivers/power/charger-manager.c | 4 +- trunk/drivers/power/collie_battery.c | 6 +- trunk/drivers/power/da9052-battery.c | 6 +- trunk/drivers/power/ds2780_battery.c | 6 +- trunk/drivers/power/ds2781_battery.c | 6 +- trunk/drivers/power/generic-adc-battery.c | 6 +- trunk/drivers/power/gpio-charger.c | 6 +- trunk/drivers/power/intel_mid_battery.c | 8 +- trunk/drivers/power/isp1704_charger.c | 6 +- trunk/drivers/power/jz4740-battery.c | 6 +- trunk/drivers/power/lp8727_charger.c | 4 +- trunk/drivers/power/lp8788-charger.c | 6 +- trunk/drivers/power/max17040_battery.c | 6 +- trunk/drivers/power/max17042_battery.c | 6 +- trunk/drivers/power/max8903_charger.c | 6 +- trunk/drivers/power/max8925_power.c | 10 +- trunk/drivers/power/max8997_charger.c | 6 +- trunk/drivers/power/max8998_charger.c | 6 +- trunk/drivers/power/olpc_battery.c | 6 +- trunk/drivers/power/pcf50633-charger.c | 6 +- trunk/drivers/power/power_supply_core.c | 2 +- trunk/drivers/power/s3c_adc_battery.c | 2 +- trunk/drivers/power/sbs-battery.c | 6 +- trunk/drivers/power/smb347-charger.c | 2 +- trunk/drivers/power/tosa_battery.c | 6 +- trunk/drivers/power/wm831x_backup.c | 6 +- trunk/drivers/power/wm831x_power.c | 6 +- trunk/drivers/power/wm8350_power.c | 6 +- trunk/drivers/power/wm97xx_battery.c | 6 +- trunk/drivers/power/z2_battery.c | 6 +- trunk/drivers/ptp/ptp_pch.c | 4 +- trunk/drivers/pwm/pwm-ab8500.c | 6 +- trunk/drivers/pwm/pwm-bfin.c | 4 +- trunk/drivers/pwm/pwm-imx.c | 6 +- trunk/drivers/pwm/pwm-jz4740.c | 6 +- trunk/drivers/pwm/pwm-lpc32xx.c | 4 +- trunk/drivers/pwm/pwm-mxs.c | 4 +- trunk/drivers/pwm/pwm-puv3.c | 6 +- trunk/drivers/pwm/pwm-pxa.c | 6 +- trunk/drivers/pwm/pwm-samsung.c | 4 +- trunk/drivers/pwm/pwm-tegra.c | 4 +- trunk/drivers/pwm/pwm-tiecap.c | 6 +- trunk/drivers/pwm/pwm-tiehrpwm.c | 6 +- trunk/drivers/pwm/pwm-twl6030.c | 2 +- trunk/drivers/rapidio/devices/tsi721.c | 4 +- trunk/drivers/rapidio/devices/tsi721.h | 2 +- trunk/drivers/rapidio/devices/tsi721_dma.c | 2 +- trunk/drivers/rapidio/rio-scan.c | 14 +- trunk/drivers/rapidio/rio.c | 6 +- trunk/drivers/remoteproc/remoteproc_virtio.c | 18 +- trunk/drivers/rtc/rtc-at91rm9200.c | 2 +- .../rtc/rtc-at91rm9200.h} | 0 trunk/drivers/rtc/rtc-at91sam9.c | 2 +- trunk/drivers/rtc/rtc-tps65910.c | 6 +- trunk/drivers/s390/char/con3215.c | 1 + trunk/drivers/s390/char/sclp_tty.c | 4 +- trunk/drivers/s390/char/sclp_vt220.c | 2 + trunk/drivers/s390/char/tty3270.c | 2 + trunk/drivers/scsi/megaraid/megaraid_sas.h | 2 +- .../drivers/scsi/megaraid/megaraid_sas_base.c | 14 +- trunk/drivers/spi/spi-atmel.c | 2 +- trunk/drivers/spi/spi.c | 105 +- trunk/drivers/staging/Kconfig | 10 +- trunk/drivers/staging/Makefile | 5 +- trunk/drivers/staging/android/Makefile | 2 + trunk/drivers/staging/android/binder.c | 471 +- trunk/drivers/staging/android/binder_trace.h | 327 + trunk/drivers/staging/android/logger.c | 21 + .../drivers/staging/android/lowmemorykiller.c | 16 +- trunk/drivers/staging/bcm/Adapter.h | 8 +- trunk/drivers/staging/bcm/Bcmchar.c | 149 +- trunk/drivers/staging/bcm/Bcmnet.c | 6 +- trunk/drivers/staging/bcm/CmHost.c | 90 +- trunk/drivers/staging/bcm/CmHost.h | 189 +- .../drivers/staging/bcm/HandleControlPacket.c | 2 +- trunk/drivers/staging/bcm/HostMIBSInterface.h | 384 +- trunk/drivers/staging/bcm/InterfaceAdapter.h | 142 +- trunk/drivers/staging/bcm/InterfaceDld.c | 4 +- trunk/drivers/staging/bcm/InterfaceIdleMode.c | 2 +- trunk/drivers/staging/bcm/InterfaceIdleMode.h | 5 +- trunk/drivers/staging/bcm/InterfaceInit.c | 25 +- trunk/drivers/staging/bcm/InterfaceInit.h | 4 +- trunk/drivers/staging/bcm/InterfaceIsr.c | 6 +- trunk/drivers/staging/bcm/InterfaceIsr.h | 4 +- trunk/drivers/staging/bcm/InterfaceMisc.c | 124 +- trunk/drivers/staging/bcm/InterfaceMisc.h | 6 +- trunk/drivers/staging/bcm/InterfaceRx.c | 16 +- trunk/drivers/staging/bcm/InterfaceRx.h | 2 +- trunk/drivers/staging/bcm/InterfaceTx.c | 14 +- trunk/drivers/staging/bcm/Ioctl.h | 482 +- trunk/drivers/staging/bcm/LeakyBucket.c | 6 +- trunk/drivers/staging/bcm/Misc.c | 236 +- trunk/drivers/staging/bcm/Prototypes.h | 36 +- trunk/drivers/staging/bcm/Transmit.c | 2 +- .../staging/bcm/cntrl_SignalingInterface.h | 256 +- trunk/drivers/staging/bcm/hostmibs.c | 12 +- trunk/drivers/staging/bcm/nvm.c | 94 +- .../drivers/staging/bcm/vendorspecificextn.c | 6 +- .../drivers/staging/bcm/vendorspecificextn.h | 6 +- trunk/drivers/staging/ccg/ccg.c | 8 +- trunk/drivers/staging/ccg/u_serial.c | 5 +- trunk/drivers/staging/ced1401/ced_ioc.c | 37 +- trunk/drivers/staging/ced1401/usb1401.c | 36 +- trunk/drivers/staging/ced1401/usb1401.h | 2 +- .../staging/ced1401/userspace/use1401.c | 8 +- trunk/drivers/staging/comedi/Kconfig | 45 +- trunk/drivers/staging/comedi/comedi.h | 65 +- .../drivers/staging/comedi/comedi_compat32.c | 1 - trunk/drivers/staging/comedi/comedi_fops.c | 5 +- trunk/drivers/staging/comedi/comedidev.h | 70 +- trunk/drivers/staging/comedi/drivers.c | 144 +- trunk/drivers/staging/comedi/drivers/8255.c | 27 +- .../drivers/staging/comedi/drivers/8255_pci.c | 26 +- trunk/drivers/staging/comedi/drivers/Makefile | 2 - .../comedi/drivers/addi-data/APCI1710_82x54.c | 205 +- .../comedi/drivers/addi-data/APCI1710_82x54.h | 73 - .../drivers/addi-data/APCI1710_Chrono.c | 245 +- .../drivers/addi-data/APCI1710_Chrono.h | 74 - .../drivers/addi-data/APCI1710_Dig_io.c | 44 +- .../drivers/addi-data/APCI1710_Dig_io.h | 46 - .../drivers/addi-data/APCI1710_INCCPT.c | 886 +- .../drivers/addi-data/APCI1710_INCCPT.h | 271 - .../drivers/addi-data/APCI1710_Inp_cpt.c | 39 +- .../drivers/addi-data/APCI1710_Inp_cpt.h | 47 - .../comedi/drivers/addi-data/APCI1710_Pwm.c | 278 +- .../comedi/drivers/addi-data/APCI1710_Pwm.h | 76 - .../comedi/drivers/addi-data/APCI1710_Ssi.c | 41 +- .../comedi/drivers/addi-data/APCI1710_Ssi.h | 43 - .../comedi/drivers/addi-data/APCI1710_Tor.c | 50 +- .../comedi/drivers/addi-data/APCI1710_Tor.h | 57 - .../comedi/drivers/addi-data/APCI1710_Ttl.c | 38 +- .../comedi/drivers/addi-data/APCI1710_Ttl.h | 44 - .../drivers/addi-data/addi_amcc_s5933.h | 469 - .../comedi/drivers/addi-data/addi_common.c | 2036 +-- .../comedi/drivers/addi-data/addi_common.h | 32 - .../comedi/drivers/addi-data/addi_eeprom.c | 1367 +- .../comedi/drivers/addi-data/hwdrv_APCI1710.c | 69 +- .../comedi/drivers/addi-data/hwdrv_APCI1710.h | 71 - .../comedi/drivers/addi-data/hwdrv_apci035.c | 116 +- .../comedi/drivers/addi-data/hwdrv_apci035.h | 109 - .../comedi/drivers/addi-data/hwdrv_apci1032.c | 287 - .../comedi/drivers/addi-data/hwdrv_apci1032.h | 64 - .../comedi/drivers/addi-data/hwdrv_apci1500.c | 197 +- .../comedi/drivers/addi-data/hwdrv_apci1500.h | 165 - .../comedi/drivers/addi-data/hwdrv_apci1516.c | 542 - .../comedi/drivers/addi-data/hwdrv_apci1516.h | 65 - .../comedi/drivers/addi-data/hwdrv_apci1564.c | 469 +- .../comedi/drivers/addi-data/hwdrv_apci1564.h | 121 - .../comedi/drivers/addi-data/hwdrv_apci16xx.c | 57 +- .../comedi/drivers/addi-data/hwdrv_apci16xx.h | 79 - .../comedi/drivers/addi-data/hwdrv_apci2016.c | 460 - .../comedi/drivers/addi-data/hwdrv_apci2016.h | 72 - .../comedi/drivers/addi-data/hwdrv_apci2032.c | 579 - .../comedi/drivers/addi-data/hwdrv_apci2032.h | 83 - .../comedi/drivers/addi-data/hwdrv_apci2200.c | 392 +- .../comedi/drivers/addi-data/hwdrv_apci2200.h | 61 - .../comedi/drivers/addi-data/hwdrv_apci3120.c | 1768 ++- .../comedi/drivers/addi-data/hwdrv_apci3120.h | 249 - .../comedi/drivers/addi-data/hwdrv_apci3200.c | 3417 +++-- .../comedi/drivers/addi-data/hwdrv_apci3200.h | 191 - .../comedi/drivers/addi-data/hwdrv_apci3501.c | 320 +- .../comedi/drivers/addi-data/hwdrv_apci3501.h | 98 - .../comedi/drivers/addi-data/hwdrv_apci3xxx.c | 414 +- .../comedi/drivers/addi-data/hwdrv_apci3xxx.h | 48 - .../staging/comedi/drivers/addi_apci_035.c | 72 +- .../staging/comedi/drivers/addi_apci_1032.c | 396 +- .../staging/comedi/drivers/addi_apci_1500.c | 72 +- .../staging/comedi/drivers/addi_apci_1516.c | 348 +- .../staging/comedi/drivers/addi_apci_1564.c | 69 +- .../staging/comedi/drivers/addi_apci_16xx.c | 72 +- .../staging/comedi/drivers/addi_apci_1710.c | 153 +- .../staging/comedi/drivers/addi_apci_2016.c | 9 - .../staging/comedi/drivers/addi_apci_2032.c | 381 +- .../staging/comedi/drivers/addi_apci_2200.c | 64 +- .../staging/comedi/drivers/addi_apci_3001.c | 9 - .../staging/comedi/drivers/addi_apci_3120.c | 273 +- .../staging/comedi/drivers/addi_apci_3200.c | 119 +- .../staging/comedi/drivers/addi_apci_3300.c | 5 - .../staging/comedi/drivers/addi_apci_3501.c | 70 +- .../staging/comedi/drivers/addi_apci_3xxx.c | 794 +- .../staging/comedi/drivers/adl_pci6208.c | 23 +- .../staging/comedi/drivers/adl_pci7x3x.c | 15 +- .../staging/comedi/drivers/adl_pci8164.c | 27 +- .../staging/comedi/drivers/adl_pci9111.c | 81 +- .../staging/comedi/drivers/adl_pci9118.c | 494 +- trunk/drivers/staging/comedi/drivers/adq12b.c | 46 +- .../staging/comedi/drivers/adv_pci1710.c | 73 +- .../staging/comedi/drivers/adv_pci1723.c | 24 +- .../staging/comedi/drivers/adv_pci_dio.c | 25 +- .../staging/comedi/drivers/aio_aio12_8.c | 8 +- .../staging/comedi/drivers/aio_iiro_16.c | 19 +- .../staging/comedi/drivers/amplc_dio200.c | 1468 ++- .../staging/comedi/drivers/amplc_pc236.c | 72 +- .../staging/comedi/drivers/amplc_pc263.c | 23 +- .../staging/comedi/drivers/amplc_pci224.c | 93 +- .../staging/comedi/drivers/amplc_pci230.c | 157 +- .../staging/comedi/drivers/cb_das16_cs.c | 69 +- .../staging/comedi/drivers/cb_pcidas.c | 106 +- .../staging/comedi/drivers/cb_pcidas64.c | 3041 ++--- .../staging/comedi/drivers/cb_pcidda.c | 681 +- .../staging/comedi/drivers/cb_pcimdas.c | 121 +- .../staging/comedi/drivers/cb_pcimdda.c | 25 +- .../staging/comedi/drivers/comedi_bond.c | 8 +- .../staging/comedi/drivers/comedi_fc.c | 2 +- .../staging/comedi/drivers/comedi_fc.h | 44 + .../staging/comedi/drivers/comedi_parport.c | 35 +- .../staging/comedi/drivers/comedi_test.c | 71 +- .../staging/comedi/drivers/contec_pci_dio.c | 15 +- .../staging/comedi/drivers/daqboard2000.c | 23 +- trunk/drivers/staging/comedi/drivers/das08.c | 39 +- .../drivers/staging/comedi/drivers/das08_cs.c | 9 +- trunk/drivers/staging/comedi/drivers/das16.c | 78 +- .../drivers/staging/comedi/drivers/das16m1.c | 80 +- .../drivers/staging/comedi/drivers/das1800.c | 66 +- .../drivers/staging/comedi/drivers/das6402.c | 16 +- trunk/drivers/staging/comedi/drivers/das800.c | 79 +- .../drivers/staging/comedi/drivers/dmm32at.c | 80 +- trunk/drivers/staging/comedi/drivers/dt2801.c | 14 +- trunk/drivers/staging/comedi/drivers/dt2811.c | 13 +- trunk/drivers/staging/comedi/drivers/dt2814.c | 54 +- trunk/drivers/staging/comedi/drivers/dt2815.c | 9 +- trunk/drivers/staging/comedi/drivers/dt282x.c | 115 +- trunk/drivers/staging/comedi/drivers/dt3000.c | 620 +- trunk/drivers/staging/comedi/drivers/dt9812.c | 27 +- .../staging/comedi/drivers/dyna_pci10xx.c | 27 +- trunk/drivers/staging/comedi/drivers/fl512.c | 10 +- .../drivers/staging/comedi/drivers/gsc_hpdi.c | 515 +- .../staging/comedi/drivers/icp_multi.c | 22 +- .../staging/comedi/drivers/ii_pci20kc.c | 51 +- .../drivers/staging/comedi/drivers/jr3_pci.c | 658 +- .../drivers/staging/comedi/drivers/jr3_pci.h | 12 +- .../staging/comedi/drivers/ke_counter.c | 60 +- trunk/drivers/staging/comedi/drivers/me4000.c | 42 +- trunk/drivers/staging/comedi/drivers/me_daq.c | 595 +- trunk/drivers/staging/comedi/drivers/mpc624.c | 10 +- .../staging/comedi/drivers/mpc8260cpm.c | 164 - .../drivers/staging/comedi/drivers/multiq3.c | 11 +- .../drivers/staging/comedi/drivers/ni_6527.c | 64 +- .../drivers/staging/comedi/drivers/ni_65xx.c | 164 +- .../drivers/staging/comedi/drivers/ni_660x.c | 586 +- .../drivers/staging/comedi/drivers/ni_670x.c | 24 +- .../staging/comedi/drivers/ni_at_a2150.c | 64 +- .../drivers/staging/comedi/drivers/ni_at_ao.c | 13 +- .../drivers/staging/comedi/drivers/ni_atmio.c | 11 +- .../staging/comedi/drivers/ni_atmio16d.c | 58 +- .../staging/comedi/drivers/ni_daq_dio24.c | 14 +- .../drivers/staging/comedi/drivers/ni_labpc.c | 114 +- .../staging/comedi/drivers/ni_labpc_cs.c | 6 +- .../staging/comedi/drivers/ni_mio_common.c | 336 +- .../staging/comedi/drivers/ni_mio_cs.c | 29 +- .../staging/comedi/drivers/ni_pcidio.c | 85 +- .../staging/comedi/drivers/ni_pcimio.c | 62 +- trunk/drivers/staging/comedi/drivers/ni_tio.h | 4 +- .../staging/comedi/drivers/ni_tiocmd.c | 60 +- trunk/drivers/staging/comedi/drivers/pcl711.c | 51 +- trunk/drivers/staging/comedi/drivers/pcl726.c | 10 +- trunk/drivers/staging/comedi/drivers/pcl812.c | 85 +- trunk/drivers/staging/comedi/drivers/pcl816.c | 71 +- trunk/drivers/staging/comedi/drivers/pcl818.c | 80 +- .../drivers/staging/comedi/drivers/pcm3724.c | 44 +- .../staging/comedi/drivers/pcm_common.c | 34 +- trunk/drivers/staging/comedi/drivers/pcmad.c | 10 +- .../drivers/staging/comedi/drivers/pcmda12.c | 34 +- trunk/drivers/staging/comedi/drivers/pcmmio.c | 124 +- trunk/drivers/staging/comedi/drivers/pcmuio.c | 25 +- trunk/drivers/staging/comedi/drivers/poc.c | 15 +- .../staging/comedi/drivers/quatech_daqp_cs.c | 95 +- trunk/drivers/staging/comedi/drivers/rtd520.c | 950 +- trunk/drivers/staging/comedi/drivers/rtd520.h | 267 +- trunk/drivers/staging/comedi/drivers/rti800.c | 13 +- trunk/drivers/staging/comedi/drivers/rti802.c | 9 +- trunk/drivers/staging/comedi/drivers/s526.c | 8 +- trunk/drivers/staging/comedi/drivers/s626.c | 129 +- .../staging/comedi/drivers/serial2002.c | 44 +- trunk/drivers/staging/comedi/drivers/skel.c | 610 +- .../drivers/staging/comedi/drivers/ssv_dnp.c | 26 +- .../drivers/staging/comedi/drivers/unioxx5.c | 44 +- trunk/drivers/staging/comedi/drivers/usbdux.c | 125 +- .../staging/comedi/drivers/usbduxfast.c | 211 +- .../staging/comedi/drivers/usbduxsigma.c | 116 +- .../drivers/staging/comedi/drivers/vmk80xx.c | 20 +- .../comedi/kcomedilib/kcomedilib_main.c | 6 +- trunk/drivers/staging/comedi/proc.c | 1 - .../staging/crystalhd/crystalhd_cmds.c | 8 +- .../drivers/staging/crystalhd/crystalhd_lnx.c | 14 +- .../staging/crystalhd/crystalhd_misc.c | 2 +- trunk/drivers/staging/csr/Makefile | 3 +- trunk/drivers/staging/csr/bh.c | 19 +- trunk/drivers/staging/csr/csr_framework_ext.c | 97 - trunk/drivers/staging/csr/csr_framework_ext.h | 213 - .../staging/csr/csr_framework_ext_types.h | 41 +- trunk/drivers/staging/csr/csr_lib.h | 188 - trunk/drivers/staging/csr/csr_log.h | 172 +- trunk/drivers/staging/csr/csr_log_configure.h | 105 +- trunk/drivers/staging/csr/csr_log_text.h | 8 - trunk/drivers/staging/csr/csr_macro.h | 75 - trunk/drivers/staging/csr/csr_msg_transport.h | 8 - trunk/drivers/staging/csr/csr_msgconv.c | 1 - trunk/drivers/staging/csr/csr_msgconv.h | 9 - trunk/drivers/staging/csr/csr_panic.c | 20 - trunk/drivers/staging/csr/csr_panic.h | 53 - trunk/drivers/staging/csr/csr_prim_defs.h | 7 - trunk/drivers/staging/csr/csr_result.h | 8 - trunk/drivers/staging/csr/csr_sched.h | 215 +- trunk/drivers/staging/csr/csr_sdio.h | 8 - .../csr/csr_serialize_primitive_types.c | 1 - trunk/drivers/staging/csr/csr_time.c | 9 +- trunk/drivers/staging/csr/csr_time.h | 82 +- trunk/drivers/staging/csr/csr_wifi_common.h | 8 - trunk/drivers/staging/csr/csr_wifi_fsm.h | 8 - .../drivers/staging/csr/csr_wifi_fsm_event.h | 8 - .../drivers/staging/csr/csr_wifi_fsm_types.h | 10 - trunk/drivers/staging/csr/csr_wifi_hip_card.h | 9 - .../staging/csr/csr_wifi_hip_card_sdio.c | 162 - .../staging/csr/csr_wifi_hip_card_sdio.h | 8 - .../staging/csr/csr_wifi_hip_chiphelper.h | 64 - .../csr/csr_wifi_hip_chiphelper_private.h | 8 - .../staging/csr/csr_wifi_hip_conversions.h | 8 - .../staging/csr/csr_wifi_hip_download.c | 18 - trunk/drivers/staging/csr/csr_wifi_hip_dump.c | 32 +- trunk/drivers/staging/csr/csr_wifi_hip_send.c | 2 - .../staging/csr/csr_wifi_hip_signals.h | 17 +- trunk/drivers/staging/csr/csr_wifi_hip_sigs.h | 8 - .../staging/csr/csr_wifi_hip_ta_sampling.h | 9 - .../drivers/staging/csr/csr_wifi_hip_unifi.h | 10 +- .../csr/csr_wifi_hip_unifi_signal_names.c | 45 +- .../staging/csr/csr_wifi_hip_unifi_udi.h | 9 - .../staging/csr/csr_wifi_hip_unifihw.h | 8 - .../staging/csr/csr_wifi_hip_unifiversion.h | 8 - trunk/drivers/staging/csr/csr_wifi_hip_xbv.c | 2 +- trunk/drivers/staging/csr/csr_wifi_hip_xbv.h | 8 - .../staging/csr/csr_wifi_hostio_prim.h | 9 - trunk/drivers/staging/csr/csr_wifi_lib.h | 9 - trunk/drivers/staging/csr/csr_wifi_msgconv.h | 9 - .../csr/csr_wifi_nme_ap_converter_init.h | 8 - .../drivers/staging/csr/csr_wifi_nme_ap_lib.h | 28 - .../staging/csr/csr_wifi_nme_ap_prim.h | 9 - .../drivers/staging/csr/csr_wifi_nme_ap_sef.h | 10 - .../staging/csr/csr_wifi_nme_ap_serialize.h | 9 - .../staging/csr/csr_wifi_nme_converter_init.h | 8 - trunk/drivers/staging/csr/csr_wifi_nme_lib.h | 63 - trunk/drivers/staging/csr/csr_wifi_nme_prim.h | 9 - .../staging/csr/csr_wifi_nme_serialize.h | 8 - trunk/drivers/staging/csr/csr_wifi_nme_task.h | 11 - .../staging/csr/csr_wifi_private_common.h | 8 - trunk/drivers/staging/csr/csr_wifi_result.h | 8 - .../csr/csr_wifi_router_converter_init.h | 8 - .../csr/csr_wifi_router_ctrl_converter_init.h | 8 - .../staging/csr/csr_wifi_router_ctrl_lib.h | 10 - .../staging/csr/csr_wifi_router_ctrl_prim.h | 9 - .../staging/csr/csr_wifi_router_ctrl_sef.c | 67 +- .../staging/csr/csr_wifi_router_ctrl_sef.h | 7 - .../csr/csr_wifi_router_ctrl_serialize.h | 8 - .../csr_wifi_router_free_upstream_contents.c | 46 +- .../drivers/staging/csr/csr_wifi_router_lib.h | 10 - .../staging/csr/csr_wifi_router_prim.h | 9 - .../drivers/staging/csr/csr_wifi_router_sef.h | 8 - .../staging/csr/csr_wifi_router_serialize.h | 8 - .../staging/csr/csr_wifi_router_task.h | 8 - .../drivers/staging/csr/csr_wifi_sme_ap_lib.h | 9 - .../staging/csr/csr_wifi_sme_ap_prim.h | 8 - .../staging/csr/csr_wifi_sme_converter_init.h | 8 - trunk/drivers/staging/csr/csr_wifi_sme_lib.h | 10 - trunk/drivers/staging/csr/csr_wifi_sme_prim.h | 9 - trunk/drivers/staging/csr/csr_wifi_sme_sef.h | 213 +- .../staging/csr/csr_wifi_sme_serialize.h | 336 +- trunk/drivers/staging/csr/csr_wifi_sme_task.h | 16 +- .../drivers/staging/csr/csr_wifi_vif_utils.h | 81 - trunk/drivers/staging/csr/data_tx.c | 45 +- trunk/drivers/staging/csr/drv.c | 101 +- trunk/drivers/staging/csr/firmware.c | 15 - trunk/drivers/staging/csr/inet.c | 10 +- trunk/drivers/staging/csr/io.c | 102 +- trunk/drivers/staging/csr/mlme.c | 3 - trunk/drivers/staging/csr/monitor.c | 10 - trunk/drivers/staging/csr/netdev.c | 90 +- trunk/drivers/staging/csr/os.c | 18 +- trunk/drivers/staging/csr/sdio_mmc.c | 28 - trunk/drivers/staging/csr/sme_blocking.c | 307 +- trunk/drivers/staging/csr/sme_native.c | 21 - trunk/drivers/staging/csr/sme_sys.c | 17 +- trunk/drivers/staging/csr/sme_userspace.h | 2 +- trunk/drivers/staging/csr/sme_wext.c | 49 - trunk/drivers/staging/csr/ul_int.c | 1 - trunk/drivers/staging/csr/unifi_event.c | 8 - trunk/drivers/staging/csr/unifi_os.h | 23 - .../staging/csr/unifi_pdu_processing.c | 39 +- trunk/drivers/staging/csr/unifi_priv.h | 7 +- trunk/drivers/staging/csr/unifi_sme.c | 15 - trunk/drivers/staging/csr/unifi_wext.h | 1 - trunk/drivers/staging/cxt1e1/musycc.c | 2162 ++-- trunk/drivers/staging/cxt1e1/musycc.h | 236 +- trunk/drivers/staging/cxt1e1/sbecrc.c | 105 +- trunk/drivers/staging/dgrp/dgrp_common.h | 1 - trunk/drivers/staging/dgrp/dgrp_dpa_ops.c | 2 +- trunk/drivers/staging/dgrp/dgrp_driver.c | 4 - trunk/drivers/staging/dgrp/dgrp_net_ops.c | 78 +- trunk/drivers/staging/dgrp/dgrp_specproc.c | 4 +- trunk/drivers/staging/dgrp/dgrp_sysfs.c | 21 +- trunk/drivers/staging/dgrp/dgrp_tty.c | 39 +- trunk/drivers/staging/et131x/README | 2 +- trunk/drivers/staging/et131x/et131x.c | 1323 +- trunk/drivers/staging/et131x/et131x.h | 4 - .../staging/ft1000/ft1000-usb/ft1000_proc.c | 4 +- trunk/drivers/staging/fwserial/Kconfig | 9 + trunk/drivers/staging/fwserial/Makefile | 2 + trunk/drivers/staging/fwserial/TODO | 37 + trunk/drivers/staging/fwserial/dma_fifo.c | 307 + trunk/drivers/staging/fwserial/dma_fifo.h | 130 + trunk/drivers/staging/fwserial/fwserial.c | 2943 +++++ trunk/drivers/staging/fwserial/fwserial.h | 387 + trunk/drivers/staging/gdm72xx/gdm_qos.c | 33 +- trunk/drivers/staging/gdm72xx/gdm_sdio.c | 29 +- trunk/drivers/staging/gdm72xx/gdm_usb.c | 64 +- trunk/drivers/staging/gdm72xx/gdm_wimax.c | 70 +- trunk/drivers/staging/gdm72xx/netlink_k.c | 23 +- trunk/drivers/staging/gdm72xx/sdio_boot.c | 100 +- trunk/drivers/staging/gdm72xx/usb_boot.c | 49 +- trunk/drivers/staging/iio/accel/Kconfig | 21 +- trunk/drivers/staging/iio/accel/Makefile | 5 - trunk/drivers/staging/iio/accel/adis16201.h | 89 +- .../staging/iio/accel/adis16201_core.c | 476 +- .../staging/iio/accel/adis16201_ring.c | 136 - .../staging/iio/accel/adis16201_trigger.c | 71 - trunk/drivers/staging/iio/accel/adis16203.h | 80 +- .../staging/iio/accel/adis16203_core.c | 432 +- .../staging/iio/accel/adis16203_ring.c | 136 - .../staging/iio/accel/adis16203_trigger.c | 73 - trunk/drivers/staging/iio/accel/adis16204.h | 79 +- .../staging/iio/accel/adis16204_core.c | 462 +- .../staging/iio/accel/adis16204_ring.c | 134 - .../staging/iio/accel/adis16204_trigger.c | 73 - trunk/drivers/staging/iio/accel/adis16209.h | 77 +- .../staging/iio/accel/adis16209_core.c | 496 +- .../staging/iio/accel/adis16209_ring.c | 134 - .../staging/iio/accel/adis16209_trigger.c | 81 - trunk/drivers/staging/iio/accel/adis16220.h | 20 +- .../staging/iio/accel/adis16220_core.c | 288 +- trunk/drivers/staging/iio/accel/adis16240.h | 85 +- .../staging/iio/accel/adis16240_core.c | 481 +- .../staging/iio/accel/adis16240_ring.c | 132 - .../staging/iio/accel/adis16240_trigger.c | 82 - trunk/drivers/staging/iio/accel/kxsd9.c | 10 +- trunk/drivers/staging/iio/accel/lis3l02dq.h | 1 + .../staging/iio/accel/lis3l02dq_core.c | 16 +- .../staging/iio/accel/lis3l02dq_ring.c | 6 +- .../drivers/staging/iio/accel/sca3000_core.c | 6 +- trunk/drivers/staging/iio/adc/Kconfig | 73 +- trunk/drivers/staging/iio/adc/Makefile | 15 - trunk/drivers/staging/iio/adc/ad7192.c | 6 +- trunk/drivers/staging/iio/adc/ad7280a.c | 8 +- trunk/drivers/staging/iio/adc/ad7291.c | 6 +- trunk/drivers/staging/iio/adc/ad7298.h | 75 - trunk/drivers/staging/iio/adc/ad7298_ring.c | 113 - trunk/drivers/staging/iio/adc/ad7606_par.c | 6 +- trunk/drivers/staging/iio/adc/ad7606_ring.c | 2 +- trunk/drivers/staging/iio/adc/ad7606_spi.c | 6 +- trunk/drivers/staging/iio/adc/ad7780.c | 6 +- trunk/drivers/staging/iio/adc/ad7793.h | 115 - trunk/drivers/staging/iio/adc/ad7816.c | 6 +- trunk/drivers/staging/iio/adc/ad7887.h | 99 - trunk/drivers/staging/iio/adc/ad7887_ring.c | 122 - trunk/drivers/staging/iio/adc/ad799x_core.c | 6 +- trunk/drivers/staging/iio/adc/ad799x_ring.c | 2 +- trunk/drivers/staging/iio/adc/adt7310.c | 881 -- trunk/drivers/staging/iio/adc/adt7410.c | 460 +- trunk/drivers/staging/iio/adc/lpc32xx_adc.c | 8 +- trunk/drivers/staging/iio/adc/max1363.h | 177 - trunk/drivers/staging/iio/adc/max1363_ring.c | 139 - trunk/drivers/staging/iio/adc/mxs-lradc.c | 11 +- trunk/drivers/staging/iio/adc/spear_adc.c | 6 +- trunk/drivers/staging/iio/addac/adt7316-i2c.c | 6 +- trunk/drivers/staging/iio/addac/adt7316-spi.c | 6 +- trunk/drivers/staging/iio/addac/adt7316.c | 4 +- trunk/drivers/staging/iio/cdc/ad7150.c | 18 +- trunk/drivers/staging/iio/cdc/ad7152.c | 8 +- trunk/drivers/staging/iio/cdc/ad7746.c | 8 +- trunk/drivers/staging/iio/frequency/ad5930.c | 6 +- trunk/drivers/staging/iio/frequency/ad9832.c | 6 +- trunk/drivers/staging/iio/frequency/ad9834.c | 6 +- trunk/drivers/staging/iio/frequency/ad9850.c | 6 +- trunk/drivers/staging/iio/frequency/ad9852.c | 6 +- trunk/drivers/staging/iio/frequency/ad9910.c | 6 +- trunk/drivers/staging/iio/frequency/ad9951.c | 6 +- trunk/drivers/staging/iio/gyro/Makefile | 1 - .../drivers/staging/iio/gyro/adis16060_core.c | 12 +- .../drivers/staging/iio/gyro/adis16080_core.c | 6 +- .../drivers/staging/iio/gyro/adis16130_core.c | 6 +- trunk/drivers/staging/iio/gyro/adis16260.h | 84 +- .../drivers/staging/iio/gyro/adis16260_core.c | 496 +- .../drivers/staging/iio/gyro/adis16260_ring.c | 136 - .../staging/iio/gyro/adis16260_trigger.c | 75 - .../drivers/staging/iio/gyro/adxrs450_core.c | 6 +- trunk/drivers/staging/iio/iio_dummy_evgen.c | 2 +- trunk/drivers/staging/iio/iio_hwmon.c | 6 +- trunk/drivers/staging/iio/iio_simple_dummy.c | 2 +- .../staging/iio/iio_simple_dummy_buffer.c | 5 +- .../staging/iio/impedance-analyzer/ad5933.c | 10 +- trunk/drivers/staging/iio/imu/adis16400.h | 12 +- .../drivers/staging/iio/imu/adis16400_core.c | 161 +- .../drivers/staging/iio/imu/adis16400_ring.c | 5 +- trunk/drivers/staging/iio/light/isl29018.c | 53 +- trunk/drivers/staging/iio/light/isl29028.c | 6 +- trunk/drivers/staging/iio/light/tsl2563.c | 10 +- trunk/drivers/staging/iio/light/tsl2583.c | 6 +- .../drivers/staging/iio/light/tsl2x7x_core.c | 6 +- .../drivers/staging/iio/magnetometer/ak8975.c | 6 +- .../staging/iio/magnetometer/hmc5843.c | 8 +- trunk/drivers/staging/iio/meter/ade7753.c | 6 +- trunk/drivers/staging/iio/meter/ade7753.h | 2 - trunk/drivers/staging/iio/meter/ade7754.c | 6 +- trunk/drivers/staging/iio/meter/ade7754.h | 2 - trunk/drivers/staging/iio/meter/ade7758.h | 3 - .../drivers/staging/iio/meter/ade7758_core.c | 6 +- .../drivers/staging/iio/meter/ade7758_ring.c | 2 +- trunk/drivers/staging/iio/meter/ade7759.c | 6 +- trunk/drivers/staging/iio/meter/ade7759.h | 2 - trunk/drivers/staging/iio/meter/ade7854-i2c.c | 6 +- trunk/drivers/staging/iio/meter/ade7854-spi.c | 6 +- trunk/drivers/staging/iio/meter/ade7854.h | 2 - trunk/drivers/staging/iio/resolver/ad2s1200.c | 6 +- trunk/drivers/staging/iio/resolver/ad2s1210.c | 8 +- trunk/drivers/staging/iio/resolver/ad2s90.c | 6 +- .../staging/iio/trigger/iio-trig-bfin-timer.c | 6 +- .../staging/iio/trigger/iio-trig-gpio.c | 6 +- .../iio/trigger/iio-trig-periodic-rtc.c | 6 +- trunk/drivers/staging/imx-drm/Kconfig | 2 +- trunk/drivers/staging/imx-drm/imx-drm-core.c | 2 +- .../staging/imx-drm/ipu-v3/imx-ipu-v3.h | 2 +- .../staging/imx-drm/ipu-v3/ipu-common.c | 67 +- trunk/drivers/staging/imx-drm/ipuv3-crtc.c | 8 +- .../staging/imx-drm/parallel-display.c | 16 +- trunk/drivers/staging/ipack/Kconfig | 21 - trunk/drivers/staging/ipack/TODO | 22 - trunk/drivers/staging/ipack/bridges/Kconfig | 8 - trunk/drivers/staging/ipack/ipack_ids.h | 32 - trunk/drivers/staging/line6/Kconfig | 37 - trunk/drivers/staging/line6/Makefile | 2 - trunk/drivers/staging/line6/audio.c | 8 +- trunk/drivers/staging/line6/capture.c | 13 +- trunk/drivers/staging/line6/control.c | 995 -- trunk/drivers/staging/line6/control.h | 195 - trunk/drivers/staging/line6/driver.c | 85 +- trunk/drivers/staging/line6/driver.h | 10 +- trunk/drivers/staging/line6/dumprequest.c | 135 - trunk/drivers/staging/line6/dumprequest.h | 76 - trunk/drivers/staging/line6/midi.c | 126 - trunk/drivers/staging/line6/midi.h | 10 - trunk/drivers/staging/line6/midibuf.c | 6 +- trunk/drivers/staging/line6/pcm.c | 4 +- trunk/drivers/staging/line6/pcm.h | 2 +- trunk/drivers/staging/line6/playback.c | 17 +- trunk/drivers/staging/line6/pod.c | 879 +- trunk/drivers/staging/line6/pod.h | 105 +- trunk/drivers/staging/line6/toneport.c | 8 +- trunk/drivers/staging/line6/usbdefs.h | 10 +- trunk/drivers/staging/line6/variax.c | 484 +- trunk/drivers/staging/line6/variax.h | 60 - .../staging/media/dt3155v4l/dt3155v4l.c | 12 +- .../staging/media/lirc/lirc_parallel.c | 6 +- .../drivers/staging/media/lirc/lirc_serial.c | 6 +- trunk/drivers/staging/media/lirc/lirc_sir.c | 6 +- trunk/drivers/staging/media/solo6x10/core.c | 4 +- trunk/drivers/staging/net/pc300_drv.c | 6 +- trunk/drivers/staging/nvec/Kconfig | 1 + trunk/drivers/staging/nvec/nvec.c | 8 +- trunk/drivers/staging/nvec/nvec_kbd.c | 6 +- trunk/drivers/staging/nvec/nvec_paz00.c | 6 +- trunk/drivers/staging/nvec/nvec_power.c | 6 +- trunk/drivers/staging/nvec/nvec_ps2.c | 6 +- trunk/drivers/staging/octeon/ethernet.c | 12 +- trunk/drivers/staging/olpc_dcon/olpc_dcon.c | 85 +- trunk/drivers/staging/olpc_dcon/olpc_dcon.h | 2 +- .../staging/olpc_dcon/olpc_dcon_xo_1_5.c | 30 - .../staging/omap-thermal/omap-bandgap.c | 67 +- .../staging/omap-thermal/omap-bandgap.h | 9 - .../omap-thermal/omap-thermal-common.c | 71 +- trunk/drivers/staging/omapdrm/Kconfig | 2 +- .../drivers/staging/omapdrm/omap_connector.c | 8 +- trunk/drivers/staging/omapdrm/omap_crtc.c | 8 +- trunk/drivers/staging/omapdrm/omap_dmm_priv.h | 9 +- .../drivers/staging/omapdrm/omap_dmm_tiler.c | 108 +- .../drivers/staging/omapdrm/omap_dmm_tiler.h | 8 +- trunk/drivers/staging/omapdrm/omap_drv.c | 73 +- trunk/drivers/staging/omapdrm/omap_drv.h | 14 +- trunk/drivers/staging/omapdrm/omap_encoder.c | 7 +- trunk/drivers/staging/omapdrm/omap_fb.c | 25 +- trunk/drivers/staging/omapdrm/omap_gem.c | 46 +- .../drivers/staging/omapdrm/omap_gem_dmabuf.c | 4 +- .../staging/omapdrm/omap_gem_helpers.c | 6 +- trunk/drivers/staging/omapdrm/omap_plane.c | 42 +- trunk/drivers/staging/ozwpan/ozevent.c | 2 +- trunk/drivers/staging/ozwpan/ozhcd.c | 7 +- trunk/drivers/staging/ozwpan/ozpd.c | 6 +- trunk/drivers/staging/ozwpan/ozproto.c | 3 +- trunk/drivers/staging/panel/panel.c | 8 +- .../staging/rtl8187se/ieee80211/ieee80211.h | 6 +- .../rtl8187se/ieee80211/ieee80211_crypt.c | 24 +- .../rtl8187se/ieee80211/ieee80211_crypt.h | 2 +- .../ieee80211/ieee80211_crypt_ccmp.c | 38 +- .../rtl8187se/ieee80211/ieee80211_crypt_wep.c | 18 +- .../rtl8187se/ieee80211/ieee80211_module.c | 23 +- .../rtl8187se/ieee80211/ieee80211_rx.c | 321 +- .../ieee80211/ieee80211_softmac_wx.c | 121 +- trunk/drivers/staging/rtl8187se/r8180.h | 28 - trunk/drivers/staging/rtl8187se/r8180_core.c | 496 +- trunk/drivers/staging/rtl8187se/r8180_dm.h | 4 +- .../drivers/staging/rtl8187se/r8180_rtl8225.h | 4 +- .../staging/rtl8187se/r8180_rtl8225z2.c | 229 +- trunk/drivers/staging/rtl8187se/r8180_wx.c | 2 - trunk/drivers/staging/rtl8187se/r8185b_init.c | 239 +- .../staging/rtl8192e/rtl8192e/rtl_core.c | 15 +- trunk/drivers/staging/rtl8192e/rtllib.h | 6 +- trunk/drivers/staging/rtl8192e/rtllib_tx.c | 2 +- .../staging/rtl8192u/ieee80211/ieee80211.h | 5 +- trunk/drivers/staging/rtl8192u/r8192U_core.c | 8 +- trunk/drivers/staging/rtl8712/mlme_linux.c | 2 +- trunk/drivers/staging/rtl8712/rtl871x_cmd.c | 4 +- .../staging/rtl8712/rtl871x_ioctl_linux.c | 4 +- trunk/drivers/staging/rts5139/Makefile | 22 +- trunk/drivers/staging/rts5139/ms.c | 96 +- trunk/drivers/staging/rts5139/ms.h | 18 +- trunk/drivers/staging/rts5139/ms_mg.c | 104 +- trunk/drivers/staging/rts5139/ms_mg.h | 14 +- trunk/drivers/staging/rts5139/rts51x.c | 10 +- trunk/drivers/staging/rts5139/rts51x_card.c | 80 +- trunk/drivers/staging/rts5139/rts51x_card.h | 30 +- trunk/drivers/staging/rts5139/rts51x_chip.c | 24 +- trunk/drivers/staging/rts5139/rts51x_chip.h | 16 +- trunk/drivers/staging/rts5139/rts51x_fop.c | 6 +- trunk/drivers/staging/rts5139/rts51x_scsi.c | 238 +- trunk/drivers/staging/rts5139/rts51x_scsi.h | 6 +- trunk/drivers/staging/rts5139/sd.c | 36 +- trunk/drivers/staging/rts5139/sd.h | 12 +- trunk/drivers/staging/rts5139/sd_cprm.c | 124 +- trunk/drivers/staging/rts5139/sd_cprm.h | 18 +- trunk/drivers/staging/rts5139/xd.c | 58 +- trunk/drivers/staging/rts5139/xd.h | 10 +- trunk/drivers/staging/rts_pstor/Kconfig | 16 - trunk/drivers/staging/rts_pstor/Makefile | 16 - trunk/drivers/staging/rts_pstor/TODO | 9 - trunk/drivers/staging/rts_pstor/general.c | 35 - trunk/drivers/staging/rts_pstor/ms.c | 4051 ------ trunk/drivers/staging/rts_pstor/ms.h | 225 - trunk/drivers/staging/rts_pstor/rtsx.c | 1105 -- trunk/drivers/staging/rts_pstor/rtsx.h | 186 - trunk/drivers/staging/rts_pstor/rtsx_card.c | 1233 -- trunk/drivers/staging/rts_pstor/rtsx_card.h | 1093 -- trunk/drivers/staging/rts_pstor/rtsx_chip.c | 2264 ---- trunk/drivers/staging/rts_pstor/rtsx_chip.h | 989 -- trunk/drivers/staging/rts_pstor/rtsx_scsi.c | 3137 ----- trunk/drivers/staging/rts_pstor/rtsx_scsi.h | 142 - trunk/drivers/staging/rts_pstor/rtsx_sys.h | 50 - .../staging/rts_pstor/rtsx_transport.c | 769 -- .../staging/rts_pstor/rtsx_transport.h | 66 - trunk/drivers/staging/rts_pstor/sd.c | 4570 ------- trunk/drivers/staging/rts_pstor/sd.h | 300 - trunk/drivers/staging/rts_pstor/spi.c | 812 -- trunk/drivers/staging/rts_pstor/spi.h | 65 - trunk/drivers/staging/rts_pstor/trace.h | 93 - trunk/drivers/staging/rts_pstor/xd.c | 2052 --- trunk/drivers/staging/rts_pstor/xd.h | 188 - trunk/drivers/staging/sb105x/Kconfig | 9 + trunk/drivers/staging/sb105x/Makefile | 3 + trunk/drivers/staging/sb105x/sb_mp_register.h | 295 + trunk/drivers/staging/sb105x/sb_pci_mp.c | 3196 +++++ trunk/drivers/staging/sb105x/sb_pci_mp.h | 293 + trunk/drivers/staging/sb105x/sb_ser_core.h | 368 + trunk/drivers/staging/sbe-2t3e3/cpld.c | 2 +- trunk/drivers/staging/sbe-2t3e3/main.c | 7 +- trunk/drivers/staging/sbe-2t3e3/module.c | 19 +- trunk/drivers/staging/sbe-2t3e3/netdev.c | 5 +- trunk/drivers/staging/sep/sep_main.c | 6 +- trunk/drivers/staging/serqt_usb2/serqt_usb2.c | 287 +- trunk/drivers/staging/silicom/bp_mod.c | 219 +- trunk/drivers/staging/silicom/bp_proc.c | 85 +- .../staging/silicom/bypasslib/bplibk.h | 9 - .../staging/silicom/bypasslib/bypass.c | 1 - trunk/drivers/staging/slicoss/slicoss.c | 166 +- trunk/drivers/staging/sm7xxfb/sm7xxfb.c | 6 +- .../staging/ste_rmi4/synaptics_i2c_rmi4.c | 106 +- trunk/drivers/staging/telephony/Kconfig | 47 - trunk/drivers/staging/telephony/Makefile | 7 - trunk/drivers/staging/telephony/TODO | 10 - trunk/drivers/staging/telephony/ixj-ver.h | 4 - trunk/drivers/staging/telephony/ixj.c | 10571 ---------------- trunk/drivers/staging/telephony/ixj.h | 1322 -- trunk/drivers/staging/telephony/ixj_pcmcia.c | 187 - trunk/drivers/staging/telephony/phonedev.c | 166 - .../tidspbridge/dynload/dload_internal.h | 8 +- .../staging/tidspbridge/dynload/reloc.c | 6 +- .../staging/tidspbridge/rmgr/drv_interface.c | 6 +- trunk/drivers/staging/usbip/stub_dev.c | 15 +- trunk/drivers/staging/usbip/stub_rx.c | 5 +- trunk/drivers/staging/usbip/stub_tx.c | 3 +- trunk/drivers/staging/usbip/usbip_common.c | 40 +- trunk/drivers/staging/usbip/usbip_common.h | 4 +- .../usbip/userspace/src/usbip_detach.c | 9 + trunk/drivers/staging/usbip/vhci.h | 1 - trunk/drivers/staging/usbip/vhci_hcd.c | 51 +- trunk/drivers/staging/usbip/vhci_rx.c | 2 +- trunk/drivers/staging/usbip/vhci_sysfs.c | 6 +- trunk/drivers/staging/usbip/vhci_tx.c | 2 +- trunk/drivers/staging/vme/devices/vme_pio2.h | 2 +- .../staging/vme/devices/vme_pio2_core.c | 10 +- .../staging/vme/devices/vme_pio2_gpio.c | 2 +- trunk/drivers/staging/vme/devices/vme_user.c | 83 +- trunk/drivers/staging/vt6655/device_main.c | 6 +- trunk/drivers/staging/vt6655/hostap.c | 6 +- trunk/drivers/staging/vt6655/rxtx.c | 2 +- trunk/drivers/staging/vt6655/wcmd.c | 1 + trunk/drivers/staging/vt6656/80211mgr.c | 2 +- trunk/drivers/staging/vt6656/Makefile | 1 - trunk/drivers/staging/vt6656/bssdb.c | 43 - trunk/drivers/staging/vt6656/desc.h | 28 +- trunk/drivers/staging/vt6656/device.h | 48 +- trunk/drivers/staging/vt6656/dpc.c | 64 +- trunk/drivers/staging/vt6656/firmware.c | 22 +- trunk/drivers/staging/vt6656/hostap.c | 6 +- trunk/drivers/staging/vt6656/int.h | 4 +- trunk/drivers/staging/vt6656/ioctl.c | 648 - trunk/drivers/staging/vt6656/ioctl.h | 54 - trunk/drivers/staging/vt6656/iwctl.c | 510 +- trunk/drivers/staging/vt6656/iwctl.h | 79 +- trunk/drivers/staging/vt6656/key.c | 55 +- trunk/drivers/staging/vt6656/key.h | 8 +- trunk/drivers/staging/vt6656/mac.c | 6 +- trunk/drivers/staging/vt6656/main_usb.c | 552 +- trunk/drivers/staging/vt6656/mib.c | 1 - trunk/drivers/staging/vt6656/mib.h | 1 - trunk/drivers/staging/vt6656/rf.c | 3 + trunk/drivers/staging/vt6656/rxtx.c | 36 +- trunk/drivers/staging/vt6656/rxtx.h | 8 +- trunk/drivers/staging/vt6656/tkip.c | 40 +- trunk/drivers/staging/vt6656/ttype.h | 16 +- trunk/drivers/staging/vt6656/upc.h | 162 - trunk/drivers/staging/vt6656/usbpipe.c | 4 +- trunk/drivers/staging/vt6656/wcmd.c | 44 +- trunk/drivers/staging/vt6656/wmgr.c | 66 - trunk/drivers/staging/vt6656/wmgr.h | 42 +- trunk/drivers/staging/vt6656/wpa2.c | 2 +- trunk/drivers/staging/vt6656/wpa2.h | 4 +- trunk/drivers/staging/vt6656/wpactl.c | 664 +- trunk/drivers/staging/vt6656/wpactl.h | 12 +- trunk/drivers/staging/winbond/mds.c | 7 +- trunk/drivers/staging/winbond/wb35rx_f.h | 12 +- trunk/drivers/staging/winbond/wb35rx_s.h | 62 +- trunk/drivers/staging/winbond/wbhal.h | 4 +- trunk/drivers/staging/winbond/wbusb.c | 14 - trunk/drivers/staging/wlags49_h2/ap_h2.c | 16 +- .../drivers/staging/wlags49_h2/man/wlags49.4 | 2 +- trunk/drivers/staging/wlags49_h2/wl_if.h | 133 +- trunk/drivers/staging/wlags49_h2/wl_pci.c | 25 +- trunk/drivers/staging/wlan-ng/hfa384x_usb.c | 6 +- trunk/drivers/staging/xgifb/TODO | 2 +- trunk/drivers/staging/xgifb/XGI_main_26.c | 60 +- trunk/drivers/staging/xgifb/vb_def.h | 9 +- trunk/drivers/staging/xgifb/vb_init.c | 47 +- trunk/drivers/staging/xgifb/vb_init.h | 1 - trunk/drivers/staging/xgifb/vb_setmode.c | 898 +- trunk/drivers/staging/xgifb/vb_struct.h | 36 +- trunk/drivers/staging/xgifb/vb_table.h | 504 +- trunk/drivers/staging/zram/zram_drv.c | 113 +- trunk/drivers/staging/zram/zram_drv.h | 4 +- trunk/drivers/staging/zram/zram_sysfs.c | 8 +- trunk/drivers/target/target_core_transport.c | 6 +- trunk/drivers/thermal/Kconfig | 82 +- trunk/drivers/thermal/Makefile | 17 +- trunk/drivers/thermal/cpu_cooling.c | 107 +- .../drivers/thermal/db8500_cpufreq_cooling.c | 108 + trunk/drivers/thermal/db8500_thermal.c | 531 + trunk/drivers/thermal/exynos_thermal.c | 2 +- trunk/drivers/thermal/fair_share.c | 133 + trunk/drivers/thermal/rcar_thermal.c | 27 +- trunk/drivers/thermal/spear_thermal.c | 2 +- trunk/drivers/thermal/step_wise.c | 194 + trunk/drivers/thermal/thermal_core.h | 53 + trunk/drivers/thermal/thermal_sys.c | 701 +- trunk/drivers/thermal/user_space.c | 68 + trunk/drivers/tty/amiserial.c | 2 + trunk/drivers/tty/bfin_jtag_comm.c | 6 +- trunk/drivers/tty/cyclades.c | 28 +- trunk/drivers/tty/ehv_bytechan.c | 4 +- trunk/drivers/tty/hvc/hvc_opal.c | 8 +- trunk/drivers/tty/hvc/hvc_vio.c | 6 +- trunk/drivers/tty/hvc/hvc_xen.c | 2 +- trunk/drivers/tty/hvc/hvcs.c | 20 +- trunk/drivers/tty/hvc/hvsi.c | 1 + trunk/drivers/tty/ipwireless/network.c | 5 +- trunk/drivers/tty/ipwireless/tty.c | 1 + trunk/drivers/tty/isicom.c | 35 +- trunk/drivers/tty/moxa.c | 12 +- trunk/drivers/tty/mxser.c | 35 +- trunk/drivers/tty/n_gsm.c | 11 +- trunk/drivers/tty/n_tty.c | 2 +- trunk/drivers/tty/nozomi.c | 23 +- trunk/drivers/tty/pty.c | 51 +- trunk/drivers/tty/rocket.c | 4 +- trunk/drivers/tty/serial/68328serial.c | 2 + trunk/drivers/tty/serial/8250/8250.c | 89 +- trunk/drivers/tty/serial/8250/8250_acorn.c | 6 +- trunk/drivers/tty/serial/8250/8250_dw.c | 31 +- trunk/drivers/tty/serial/8250/8250_early.c | 42 +- trunk/drivers/tty/serial/8250/8250_em.c | 8 +- trunk/drivers/tty/serial/8250/8250_hp300.c | 10 +- trunk/drivers/tty/serial/8250/8250_pci.c | 352 +- trunk/drivers/tty/serial/8250/8250_pnp.c | 14 +- trunk/drivers/tty/serial/Kconfig | 48 +- trunk/drivers/tty/serial/Makefile | 1 + trunk/drivers/tty/serial/altera_jtaguart.c | 6 +- trunk/drivers/tty/serial/altera_uart.c | 6 +- trunk/drivers/tty/serial/amba-pl011.c | 25 +- trunk/drivers/tty/serial/apbuart.c | 2 +- trunk/drivers/tty/serial/ar933x_uart.c | 96 +- trunk/drivers/tty/serial/arc_uart.c | 746 ++ trunk/drivers/tty/serial/atmel_serial.c | 39 +- trunk/drivers/tty/serial/bcm63xx_uart.c | 6 +- trunk/drivers/tty/serial/bfin_sport_uart.c | 6 +- trunk/drivers/tty/serial/bfin_uart.c | 20 +- trunk/drivers/tty/serial/clps711x.c | 595 +- .../tty/serial/cpm_uart/cpm_uart_core.c | 4 +- trunk/drivers/tty/serial/efm32-uart.c | 6 +- trunk/drivers/tty/serial/icom.c | 14 +- trunk/drivers/tty/serial/ifx6x60.c | 168 +- trunk/drivers/tty/serial/ifx6x60.h | 2 + trunk/drivers/tty/serial/ioc3_serial.c | 2 +- trunk/drivers/tty/serial/jsm/jsm.h | 8 +- trunk/drivers/tty/serial/jsm/jsm_driver.c | 9 +- trunk/drivers/tty/serial/jsm/jsm_neo.c | 116 +- trunk/drivers/tty/serial/jsm/jsm_tty.c | 104 +- trunk/drivers/tty/serial/kgdb_nmi.c | 2 + trunk/drivers/tty/serial/lpc32xx_hs.c | 6 +- trunk/drivers/tty/serial/max3100.c | 6 +- trunk/drivers/tty/serial/max310x.c | 11 +- trunk/drivers/tty/serial/mcf.c | 6 +- trunk/drivers/tty/serial/mfd.c | 7 +- trunk/drivers/tty/serial/mpc52xx_uart.c | 2 +- trunk/drivers/tty/serial/mrst_max3110.c | 6 +- trunk/drivers/tty/serial/msm_serial.c | 2 +- trunk/drivers/tty/serial/msm_serial_hs.c | 8 +- trunk/drivers/tty/serial/mux.c | 6 +- trunk/drivers/tty/serial/mxs-auart.c | 376 +- trunk/drivers/tty/serial/of_serial.c | 38 +- trunk/drivers/tty/serial/omap-serial.c | 259 +- trunk/drivers/tty/serial/pch_uart.c | 4 +- trunk/drivers/tty/serial/pxa.c | 55 + trunk/drivers/tty/serial/sa1100.c | 4 +- trunk/drivers/tty/serial/samsung.c | 30 +- trunk/drivers/tty/serial/sc26xx.c | 6 +- trunk/drivers/tty/serial/sccnxp.c | 6 +- trunk/drivers/tty/serial/serial_core.c | 257 +- trunk/drivers/tty/serial/serial_txx9.c | 16 +- trunk/drivers/tty/serial/sh-sci.c | 154 +- trunk/drivers/tty/serial/sirfsoc_uart.c | 4 +- trunk/drivers/tty/serial/sunhv.c | 6 +- trunk/drivers/tty/serial/sunsab.c | 8 +- trunk/drivers/tty/serial/sunsu.c | 10 +- trunk/drivers/tty/serial/sunzilog.c | 14 +- trunk/drivers/tty/serial/timbuart.c | 6 +- trunk/drivers/tty/serial/uartlite.c | 14 +- trunk/drivers/tty/serial/vr41xx_siu.c | 8 +- trunk/drivers/tty/serial/vt8500_serial.c | 14 +- trunk/drivers/tty/serial/xilinx_uartps.c | 15 +- trunk/drivers/tty/synclink.c | 7 +- trunk/drivers/tty/synclink_gt.c | 11 +- trunk/drivers/tty/synclinkmp.c | 11 +- trunk/drivers/tty/sysrq.c | 3 +- trunk/drivers/tty/tty_buffer.c | 2 +- trunk/drivers/tty/tty_io.c | 9 +- trunk/drivers/tty/tty_ioctl.c | 21 - trunk/drivers/tty/tty_ldisc.c | 32 +- trunk/drivers/tty/tty_mutex.c | 4 +- trunk/drivers/tty/tty_port.c | 18 +- trunk/drivers/tty/vt/consolemap.c | 6 +- trunk/drivers/tty/vt/vt.c | 13 +- trunk/drivers/tty/vt/vt_ioctl.c | 1 + trunk/drivers/uio/Kconfig | 16 + trunk/drivers/uio/Makefile | 1 + trunk/drivers/uio/uio_aec.c | 2 +- trunk/drivers/uio/uio_cif.c | 4 +- trunk/drivers/uio/uio_dmem_genirq.c | 359 + trunk/drivers/uio/uio_netx.c | 2 +- trunk/drivers/uio/uio_pci_generic.c | 2 +- trunk/drivers/uio/uio_pdrv.c | 1 + trunk/drivers/uio/uio_pdrv_genirq.c | 3 +- trunk/drivers/uio/uio_pruss.c | 6 +- trunk/drivers/uio/uio_sercos3.c | 4 +- trunk/drivers/usb/c67x00/c67x00-drv.c | 6 +- trunk/drivers/usb/chipidea/Kconfig | 1 + trunk/drivers/usb/chipidea/ci13xxx_imx.c | 8 +- trunk/drivers/usb/chipidea/ci13xxx_msm.c | 6 +- trunk/drivers/usb/chipidea/ci13xxx_pci.c | 6 +- trunk/drivers/usb/chipidea/core.c | 9 +- trunk/drivers/usb/chipidea/debug.c | 3 - trunk/drivers/usb/chipidea/host.c | 67 +- trunk/drivers/usb/chipidea/usbmisc_imx6q.c | 6 +- trunk/drivers/usb/class/cdc-acm.c | 38 + trunk/drivers/usb/core/devices.c | 18 +- trunk/drivers/usb/core/driver.c | 25 - trunk/drivers/usb/core/generic.c | 7 +- trunk/drivers/usb/core/hcd.c | 19 +- trunk/drivers/usb/core/hub.c | 97 +- trunk/drivers/usb/core/message.c | 66 +- trunk/drivers/usb/core/urb.c | 29 +- trunk/drivers/usb/core/usb.c | 13 +- trunk/drivers/usb/dwc3/Makefile | 14 +- trunk/drivers/usb/dwc3/core.c | 96 +- trunk/drivers/usb/dwc3/core.h | 3 - trunk/drivers/usb/dwc3/debugfs.c | 4 +- trunk/drivers/usb/dwc3/dwc3-exynos.c | 57 +- trunk/drivers/usb/dwc3/dwc3-omap.c | 24 +- trunk/drivers/usb/dwc3/dwc3-pci.c | 24 +- trunk/drivers/usb/dwc3/gadget.c | 4 +- trunk/drivers/usb/early/ehci-dbgp.c | 4 +- trunk/drivers/usb/gadget/Kconfig | 29 +- trunk/drivers/usb/gadget/Makefile | 2 - trunk/drivers/usb/gadget/at91_udc.c | 6 +- trunk/drivers/usb/gadget/atmel_usba_udc.c | 2 +- trunk/drivers/usb/gadget/bcm63xx_udc.c | 6 +- trunk/drivers/usb/gadget/composite.c | 8 +- trunk/drivers/usb/gadget/config.c | 39 +- trunk/drivers/usb/gadget/dummy_hcd.c | 170 +- trunk/drivers/usb/gadget/f_acm.c | 79 +- trunk/drivers/usb/gadget/f_ecm.c | 112 +- trunk/drivers/usb/gadget/f_eem.c | 51 +- trunk/drivers/usb/gadget/f_fs.c | 4 +- trunk/drivers/usb/gadget/f_hid.c | 30 +- trunk/drivers/usb/gadget/f_loopback.c | 28 +- trunk/drivers/usb/gadget/f_mass_storage.c | 63 +- trunk/drivers/usb/gadget/f_midi.c | 14 +- trunk/drivers/usb/gadget/f_ncm.c | 94 +- trunk/drivers/usb/gadget/f_obex.c | 42 +- trunk/drivers/usb/gadget/f_phonet.c | 21 +- trunk/drivers/usb/gadget/f_rndis.c | 94 +- trunk/drivers/usb/gadget/f_serial.c | 38 +- trunk/drivers/usb/gadget/f_sourcesink.c | 104 +- trunk/drivers/usb/gadget/f_subset.c | 75 +- trunk/drivers/usb/gadget/f_uac1.c | 23 +- trunk/drivers/usb/gadget/f_uac2.c | 222 +- trunk/drivers/usb/gadget/f_uvc.c | 138 +- trunk/drivers/usb/gadget/file_storage.c | 3656 ------ trunk/drivers/usb/gadget/fsl_qe_udc.c | 14 +- trunk/drivers/usb/gadget/fsl_udc_core.c | 2 +- trunk/drivers/usb/gadget/hid.c | 4 +- trunk/drivers/usb/gadget/inode.c | 3 - trunk/drivers/usb/gadget/lpc32xx_udc.c | 6 +- trunk/drivers/usb/gadget/mv_u3d_core.c | 2 +- trunk/drivers/usb/gadget/mv_udc_core.c | 4 +- trunk/drivers/usb/gadget/net2272.c | 29 +- trunk/drivers/usb/gadget/net2280.c | 2 +- trunk/drivers/usb/gadget/omap_udc.c | 10 +- trunk/drivers/usb/gadget/printer.c | 12 +- trunk/drivers/usb/gadget/pxa25x_udc.c | 4 +- trunk/drivers/usb/gadget/pxa27x_udc.h | 2 +- trunk/drivers/usb/gadget/s3c-hsotg.c | 12 +- trunk/drivers/usb/gadget/s3c-hsudc.c | 2 +- trunk/drivers/usb/gadget/storage_common.c | 165 +- trunk/drivers/usb/gadget/tcm_usb_gadget.c | 13 +- trunk/drivers/usb/gadget/u_serial.c | 5 +- trunk/drivers/usb/gadget/udc-core.c | 11 - trunk/drivers/usb/host/Kconfig | 35 +- trunk/drivers/usb/host/Makefile | 4 +- trunk/drivers/usb/host/bcma-hcd.c | 15 +- trunk/drivers/usb/host/ehci-atmel.c | 15 +- trunk/drivers/usb/host/ehci-au1xxx.c | 184 - trunk/drivers/usb/host/ehci-cns3xxx.c | 155 - trunk/drivers/usb/host/ehci-dbg.c | 112 - trunk/drivers/usb/host/ehci-fsl.c | 1 - trunk/drivers/usb/host/ehci-grlib.c | 20 +- trunk/drivers/usb/host/ehci-hcd.c | 204 +- trunk/drivers/usb/host/ehci-hub.c | 47 +- trunk/drivers/usb/host/ehci-ixp4xx.c | 139 - trunk/drivers/usb/host/ehci-lpm.c | 84 - trunk/drivers/usb/host/ehci-ls1x.c | 147 - trunk/drivers/usb/host/ehci-msm.c | 5 +- trunk/drivers/usb/host/ehci-mxc.c | 10 +- trunk/drivers/usb/host/ehci-octeon.c | 3 - trunk/drivers/usb/host/ehci-omap.c | 3 - trunk/drivers/usb/host/ehci-orion.c | 20 +- trunk/drivers/usb/host/ehci-pci.c | 132 +- trunk/drivers/usb/host/ehci-platform.c | 102 +- trunk/drivers/usb/host/ehci-pmcmsp.c | 1 - trunk/drivers/usb/host/ehci-ppc-of.c | 4 +- trunk/drivers/usb/host/ehci-ps3.c | 2 +- trunk/drivers/usb/host/ehci-q.c | 12 +- trunk/drivers/usb/host/ehci-s5p.c | 16 +- trunk/drivers/usb/host/ehci-sched.c | 136 +- trunk/drivers/usb/host/ehci-sh.c | 9 +- trunk/drivers/usb/host/ehci-spear.c | 59 +- trunk/drivers/usb/host/ehci-tegra.c | 13 +- trunk/drivers/usb/host/ehci-vt8500.c | 21 - trunk/drivers/usb/host/ehci-w90x900.c | 10 +- trunk/drivers/usb/host/ehci-xilinx-of.c | 2 +- trunk/drivers/usb/host/ehci-xls.c | 142 - trunk/drivers/usb/host/ehci.h | 45 +- trunk/drivers/usb/host/fhci-hcd.c | 8 +- trunk/drivers/usb/host/fsl-mph-dr-of.c | 16 +- trunk/drivers/usb/host/imx21-hcd.c | 2 +- trunk/drivers/usb/host/isp116x-hcd.c | 2 +- trunk/drivers/usb/host/isp1362-hcd.c | 6 +- trunk/drivers/usb/host/isp1760-if.c | 15 +- trunk/drivers/usb/host/ohci-at91.c | 24 +- trunk/drivers/usb/host/ohci-au1xxx.c | 234 - trunk/drivers/usb/host/ohci-cns3xxx.c | 166 - trunk/drivers/usb/host/ohci-ep93xx.c | 4 +- trunk/drivers/usb/host/ohci-exynos.c | 38 +- trunk/drivers/usb/host/ohci-hcd.c | 139 +- trunk/drivers/usb/host/ohci-hub.c | 42 - trunk/drivers/usb/host/ohci-jz4740.c | 6 +- trunk/drivers/usb/host/ohci-nxp.c | 4 +- trunk/drivers/usb/host/ohci-octeon.c | 2 +- trunk/drivers/usb/host/ohci-omap.c | 2 +- trunk/drivers/usb/host/ohci-omap3.c | 6 +- trunk/drivers/usb/host/ohci-pci.c | 49 +- trunk/drivers/usb/host/ohci-platform.c | 34 +- trunk/drivers/usb/host/ohci-pnx8550.c | 243 - trunk/drivers/usb/host/ohci-ppc-of.c | 4 +- trunk/drivers/usb/host/ohci-ppc-soc.c | 216 - trunk/drivers/usb/host/ohci-ps3.c | 4 +- trunk/drivers/usb/host/ohci-pxa27x.c | 8 +- trunk/drivers/usb/host/ohci-q.c | 23 +- trunk/drivers/usb/host/ohci-s3c2410.c | 41 +- trunk/drivers/usb/host/ohci-sa1111.c | 2 +- trunk/drivers/usb/host/ohci-sh.c | 141 - trunk/drivers/usb/host/ohci-sm501.c | 2 +- trunk/drivers/usb/host/ohci-spear.c | 50 +- trunk/drivers/usb/host/ohci-tmio.c | 8 +- trunk/drivers/usb/host/ohci-xls.c | 152 - trunk/drivers/usb/host/pci-quirks.c | 20 +- trunk/drivers/usb/host/r8a66597-hcd.c | 12 +- trunk/drivers/usb/host/sl811-hcd.c | 6 +- trunk/drivers/usb/host/ssb-hcd.c | 19 +- trunk/drivers/usb/host/u132-hcd.c | 6 +- trunk/drivers/usb/host/uhci-grlib.c | 2 +- trunk/drivers/usb/host/uhci-platform.c | 2 +- trunk/drivers/usb/host/uhci-q.c | 73 +- trunk/drivers/usb/host/xhci-mem.c | 9 +- trunk/drivers/usb/host/xhci-pci.c | 16 +- trunk/drivers/usb/host/xhci-ring.c | 34 +- trunk/drivers/usb/host/xhci.c | 32 +- trunk/drivers/usb/host/xhci.h | 2 +- trunk/drivers/usb/misc/Kconfig | 1 + trunk/drivers/usb/misc/ezusb.c | 38 +- trunk/drivers/usb/misc/usbtest.c | 4 + trunk/drivers/usb/musb/am35x.c | 40 +- trunk/drivers/usb/musb/blackfin.c | 38 +- trunk/drivers/usb/musb/cppi_dma.c | 4 +- trunk/drivers/usb/musb/da8xx.c | 40 +- trunk/drivers/usb/musb/davinci.c | 40 +- trunk/drivers/usb/musb/musb_core.c | 137 +- trunk/drivers/usb/musb/musb_core.h | 5 +- trunk/drivers/usb/musb/musb_debugfs.c | 2 +- trunk/drivers/usb/musb/musb_dma.h | 3 +- trunk/drivers/usb/musb/musb_dsps.c | 141 +- trunk/drivers/usb/musb/musb_gadget.c | 36 +- trunk/drivers/usb/musb/musb_gadget_ep0.c | 6 +- trunk/drivers/usb/musb/musb_host.c | 2 +- trunk/drivers/usb/musb/musbhsdma.c | 3 +- trunk/drivers/usb/musb/musbhsdma.h | 4 - trunk/drivers/usb/musb/omap2430.c | 52 +- trunk/drivers/usb/musb/tusb6010.c | 40 +- trunk/drivers/usb/musb/tusb6010_omap.c | 3 +- trunk/drivers/usb/musb/ux500.c | 62 +- trunk/drivers/usb/musb/ux500_dma.c | 3 +- trunk/drivers/usb/otg/ab8500-usb.c | 6 +- trunk/drivers/usb/otg/fsl_otg.c | 6 +- trunk/drivers/usb/otg/isp1301_omap.c | 2 +- trunk/drivers/usb/otg/msm_otg.c | 4 +- trunk/drivers/usb/otg/mv_otg.c | 14 +- trunk/drivers/usb/otg/mxs-phy.c | 59 +- trunk/drivers/usb/otg/nop-usb-xceiv.c | 6 +- trunk/drivers/usb/otg/twl4030-usb.c | 48 +- trunk/drivers/usb/otg/twl6030-usb.c | 2 +- trunk/drivers/usb/phy/Kconfig | 12 + trunk/drivers/usb/phy/Makefile | 1 + trunk/drivers/usb/phy/mv_u3d_phy.c | 4 +- trunk/drivers/usb/phy/omap-usb2.c | 6 +- trunk/drivers/usb/phy/rcar-phy.c | 220 + trunk/drivers/usb/renesas_usbhs/common.c | 9 +- trunk/drivers/usb/renesas_usbhs/common.h | 1 + trunk/drivers/usb/renesas_usbhs/fifo.c | 14 +- trunk/drivers/usb/renesas_usbhs/mod.c | 3 +- trunk/drivers/usb/renesas_usbhs/mod_gadget.c | 11 + trunk/drivers/usb/renesas_usbhs/mod_host.c | 45 +- trunk/drivers/usb/renesas_usbhs/pipe.c | 101 + trunk/drivers/usb/renesas_usbhs/pipe.h | 1 + trunk/drivers/usb/serial/aircable.c | 5 - trunk/drivers/usb/serial/ark3116.c | 5 - trunk/drivers/usb/serial/belkin_sa.c | 5 - trunk/drivers/usb/serial/bus.c | 10 - trunk/drivers/usb/serial/cp210x.c | 37 +- trunk/drivers/usb/serial/cyberjack.c | 5 - trunk/drivers/usb/serial/cypress_m8.c | 5 - trunk/drivers/usb/serial/digi_acceleport.c | 4 - trunk/drivers/usb/serial/empeg.c | 4 - trunk/drivers/usb/serial/ftdi_sio.c | 82 +- trunk/drivers/usb/serial/ftdi_sio_ids.h | 6 + trunk/drivers/usb/serial/generic.c | 1 + trunk/drivers/usb/serial/hp4x.c | 5 - trunk/drivers/usb/serial/io_edgeport.c | 4 - trunk/drivers/usb/serial/io_ti.c | 4 - trunk/drivers/usb/serial/ipaq.c | 5 - trunk/drivers/usb/serial/ipw.c | 4 - trunk/drivers/usb/serial/iuu_phoenix.c | 8 +- trunk/drivers/usb/serial/keyspan.c | 4 - trunk/drivers/usb/serial/keyspan_pda.c | 4 - trunk/drivers/usb/serial/kl5kusb105.c | 4 - trunk/drivers/usb/serial/kobil_sct.c | 2 - trunk/drivers/usb/serial/mct_u232.c | 4 - trunk/drivers/usb/serial/metro-usb.c | 2 - trunk/drivers/usb/serial/mos7720.c | 4 - trunk/drivers/usb/serial/mos7840.c | 4 - trunk/drivers/usb/serial/omninet.c | 4 - trunk/drivers/usb/serial/opticon.c | 351 +- trunk/drivers/usb/serial/option.c | 113 +- trunk/drivers/usb/serial/oti6858.c | 2 - trunk/drivers/usb/serial/quatech2.c | 2 - trunk/drivers/usb/serial/siemens_mpi.c | 2 - trunk/drivers/usb/serial/sierra.c | 3 +- trunk/drivers/usb/serial/spcp8x5.c | 4 - trunk/drivers/usb/serial/ssu100.c | 2 - trunk/drivers/usb/serial/usb-serial.c | 1 + trunk/drivers/usb/serial/usb_wwan.c | 2 - trunk/drivers/usb/serial/vivopay-serial.c | 3 - trunk/drivers/usb/storage/Kconfig | 2 +- trunk/drivers/usb/storage/realtek_cr.c | 2 +- trunk/drivers/usb/storage/usb.c | 1 - trunk/drivers/usb/usb-skeleton.c | 13 +- trunk/drivers/usb/wusbcore/devconnect.c | 13 - trunk/drivers/uwb/Kconfig | 3 +- trunk/drivers/uwb/reset.c | 1 + trunk/drivers/uwb/umc-bus.c | 2 +- trunk/drivers/vhost/vhost.c | 2 +- trunk/drivers/video/atmel_lcdfb.c | 2 +- trunk/drivers/video/backlight/adp5520_bl.c | 6 +- trunk/drivers/video/backlight/adp8860_bl.c | 14 +- trunk/drivers/video/backlight/adp8870_bl.c | 14 +- trunk/drivers/video/backlight/ams369fg06.c | 6 +- trunk/drivers/video/backlight/apple_bl.c | 4 +- trunk/drivers/video/backlight/corgi_lcd.c | 6 +- trunk/drivers/video/backlight/ep93xx_bl.c | 2 +- trunk/drivers/video/backlight/hp680_bl.c | 2 +- trunk/drivers/video/backlight/ili9320.c | 4 +- trunk/drivers/video/backlight/l4f00242t03.c | 6 +- trunk/drivers/video/backlight/ld9040.c | 4 +- trunk/drivers/video/backlight/lm3533_bl.c | 8 +- trunk/drivers/video/backlight/lm3630_bl.c | 8 +- trunk/drivers/video/backlight/lm3639_bl.c | 8 +- trunk/drivers/video/backlight/lms283gf05.c | 6 +- trunk/drivers/video/backlight/lp855x_bl.c | 4 +- trunk/drivers/video/backlight/ltv350qv.c | 6 +- trunk/drivers/video/backlight/max8925_bl.c | 6 +- .../video/backlight/pcf50633-backlight.c | 6 +- trunk/drivers/video/backlight/platform_lcd.c | 6 +- trunk/drivers/video/backlight/s6e63m0.c | 6 +- trunk/drivers/video/backlight/tdo24m.c | 6 +- trunk/drivers/video/backlight/tosa_bl.c | 6 +- trunk/drivers/video/backlight/tosa_lcd.c | 6 +- trunk/drivers/video/backlight/vgg2432a4.c | 6 +- trunk/drivers/virtio/virtio_balloon.c | 151 +- trunk/drivers/vme/boards/vme_vmivme7805.c | 15 +- trunk/drivers/vme/bridges/vme_ca91cx42.c | 15 +- trunk/drivers/vme/bridges/vme_tsi148.c | 15 +- trunk/drivers/w1/masters/Kconfig | 2 +- trunk/drivers/w1/masters/ds2482.c | 13 +- trunk/drivers/w1/masters/matrox_w1.c | 10 +- trunk/drivers/w1/masters/mxc_w1.c | 28 +- trunk/drivers/w1/masters/omap_hdq.c | 10 +- trunk/drivers/w1/masters/w1-gpio.c | 65 +- trunk/drivers/w1/w1.c | 7 - trunk/drivers/watchdog/acquirewdt.c | 6 +- trunk/drivers/watchdog/advantechwdt.c | 6 +- trunk/drivers/watchdog/ar7_wdt.c | 6 +- trunk/drivers/watchdog/at91rm9200_wdt.c | 6 +- trunk/drivers/watchdog/ath79_wdt.c | 6 +- trunk/drivers/watchdog/bcm63xx_wdt.c | 6 +- trunk/drivers/watchdog/bfin_wdt.c | 6 +- trunk/drivers/watchdog/cpu5wdt.c | 8 +- trunk/drivers/watchdog/cpwd.c | 6 +- trunk/drivers/watchdog/da9052_wdt.c | 6 +- trunk/drivers/watchdog/davinci_wdt.c | 6 +- trunk/drivers/watchdog/dw_wdt.c | 6 +- trunk/drivers/watchdog/ep93xx_wdt.c | 6 +- trunk/drivers/watchdog/gef_wdt.c | 4 +- trunk/drivers/watchdog/geodewdt.c | 6 +- trunk/drivers/watchdog/hpwdt.c | 30 +- trunk/drivers/watchdog/i6300esb.c | 10 +- trunk/drivers/watchdog/iTCO_wdt.c | 8 +- trunk/drivers/watchdog/ib700wdt.c | 6 +- trunk/drivers/watchdog/ie6xx_wdt.c | 10 +- trunk/drivers/watchdog/jz4740_wdt.c | 6 +- trunk/drivers/watchdog/ks8695_wdt.c | 6 +- trunk/drivers/watchdog/lantiq_wdt.c | 6 +- trunk/drivers/watchdog/max63xx_wdt.c | 6 +- trunk/drivers/watchdog/mixcomwd.c | 2 +- trunk/drivers/watchdog/mpc8xxx_wdt.c | 6 +- trunk/drivers/watchdog/mpcore_wdt.c | 6 +- trunk/drivers/watchdog/mtx-1_wdt.c | 6 +- trunk/drivers/watchdog/mv64x60_wdt.c | 6 +- trunk/drivers/watchdog/nuc900_wdt.c | 6 +- trunk/drivers/watchdog/nv_tco.c | 10 +- trunk/drivers/watchdog/of_xilinx_wdt.c | 8 +- trunk/drivers/watchdog/omap_wdt.c | 6 +- trunk/drivers/watchdog/orion_wdt.c | 8 +- trunk/drivers/watchdog/pcwd.c | 8 +- trunk/drivers/watchdog/pcwd_pci.c | 6 +- trunk/drivers/watchdog/pnx4008_wdt.c | 6 +- trunk/drivers/watchdog/rc32434_wdt.c | 6 +- trunk/drivers/watchdog/rdc321x_wdt.c | 6 +- trunk/drivers/watchdog/riowd.c | 6 +- trunk/drivers/watchdog/s3c2410_wdt.c | 6 +- trunk/drivers/watchdog/sch311x_wdt.c | 6 +- trunk/drivers/watchdog/shwdt.c | 6 +- trunk/drivers/watchdog/sp5100_tco.c | 10 +- trunk/drivers/watchdog/sp805_wdt.c | 12 +- trunk/drivers/watchdog/stmp3xxx_wdt.c | 6 +- trunk/drivers/watchdog/ts72xx_wdt.c | 6 +- trunk/drivers/watchdog/twl4030_wdt.c | 6 +- trunk/drivers/watchdog/via_wdt.c | 6 +- trunk/drivers/watchdog/wdt_pci.c | 6 +- trunk/drivers/watchdog/wm831x_wdt.c | 6 +- trunk/drivers/watchdog/wm8350_wdt.c | 6 +- trunk/drivers/watchdog/xen_wdt.c | 6 +- trunk/drivers/xen/xen-selfballoon.c | 2 +- trunk/firmware/Makefile | 1 - trunk/firmware/dabusb/bitstream.bin.ihex | 761 -- trunk/firmware/dabusb/firmware.HEX | 649 - trunk/fs/block_dev.c | 166 +- trunk/fs/btrfs/disk-io.c | 8 +- trunk/fs/btrfs/file.c | 3 +- trunk/fs/btrfs/ioctl.c | 2 +- trunk/fs/buffer.c | 157 +- trunk/fs/cifs/Kconfig | 10 +- trunk/fs/cifs/cifs_debug.h | 72 +- trunk/fs/cifs/cifsacl.c | 746 +- trunk/fs/cifs/cifsacl.h | 66 +- trunk/fs/cifs/cifsfs.c | 17 +- trunk/fs/cifs/cifsglob.h | 36 +- trunk/fs/cifs/cifsproto.h | 10 +- trunk/fs/cifs/connect.c | 310 +- trunk/fs/cifs/dir.c | 32 + trunk/fs/cifs/file.c | 206 +- trunk/fs/cifs/inode.c | 7 +- trunk/fs/cifs/netmisc.c | 14 +- trunk/fs/cifs/readdir.c | 55 +- trunk/fs/cifs/smb1ops.c | 35 +- trunk/fs/cifs/smb2file.c | 12 - trunk/fs/cifs/smb2ops.c | 103 +- trunk/fs/cifs/smb2pdu.c | 5 +- trunk/fs/cifs/smb2proto.h | 4 + trunk/fs/cifs/smb2transport.c | 13 +- trunk/fs/compat_ioctl.c | 3 + trunk/fs/debugfs/inode.c | 1 - trunk/fs/direct-io.c | 8 +- trunk/fs/dlm/Kconfig | 2 +- trunk/fs/dlm/dlm_internal.h | 1 + trunk/fs/dlm/lock.c | 16 +- trunk/fs/dlm/lowcomms.c | 5 +- trunk/fs/dlm/recover.c | 37 +- trunk/fs/file.c | 14 +- trunk/fs/fs-writeback.c | 2 + trunk/fs/gfs2/glock.c | 2 +- trunk/fs/hugetlbfs/inode.c | 109 +- trunk/fs/inode.c | 18 +- trunk/fs/internal.h | 1 + trunk/fs/jbd/transaction.c | 2 + trunk/fs/namei.c | 5 + trunk/fs/nfs/dir.c | 7 +- trunk/fs/nilfs2/page.c | 2 +- trunk/fs/ocfs2/file.c | 5 +- trunk/fs/proc/array.c | 4 +- trunk/fs/proc/base.c | 15 +- trunk/fs/pstore/inode.c | 7 +- trunk/fs/pstore/internal.h | 2 +- trunk/fs/pstore/platform.c | 13 +- trunk/fs/pstore/ram.c | 9 +- trunk/fs/splice.c | 5 +- trunk/fs/sysfs/file.c | 4 +- trunk/fs/xfs/Kconfig | 1 + trunk/fs/xfs/Makefile | 4 +- trunk/fs/xfs/uuid.h | 6 + trunk/fs/xfs/xfs_ag.h | 5 + trunk/fs/xfs/xfs_alloc.c | 140 +- trunk/fs/xfs/xfs_alloc.h | 3 + trunk/fs/xfs/xfs_alloc_btree.c | 77 + trunk/fs/xfs/xfs_alloc_btree.h | 2 + trunk/fs/xfs/xfs_aops.c | 83 +- trunk/fs/xfs/xfs_attr.c | 103 +- trunk/fs/xfs/xfs_attr_leaf.c | 143 +- trunk/fs/xfs/xfs_attr_leaf.h | 6 + trunk/fs/xfs/xfs_bmap.c | 64 +- trunk/fs/xfs/xfs_bmap_btree.c | 63 + trunk/fs/xfs/xfs_bmap_btree.h | 1 + trunk/fs/xfs/xfs_btree.c | 111 +- trunk/fs/xfs/xfs_btree.h | 22 +- trunk/fs/xfs/xfs_buf.c | 59 +- trunk/fs/xfs/xfs_buf.h | 27 +- trunk/fs/xfs/xfs_cksum.h | 63 + trunk/fs/xfs/xfs_da_btree.c | 141 +- trunk/fs/xfs/xfs_da_btree.h | 10 +- trunk/fs/xfs/xfs_dfrag.c | 13 +- trunk/fs/xfs/xfs_dir2_block.c | 436 +- trunk/fs/xfs/xfs_dir2_data.c | 170 +- trunk/fs/xfs/xfs_dir2_leaf.c | 172 +- trunk/fs/xfs/xfs_dir2_node.c | 288 +- trunk/fs/xfs/xfs_dir2_priv.h | 19 +- trunk/fs/xfs/xfs_dquot.c | 134 +- trunk/fs/xfs/xfs_dquot.h | 2 + trunk/fs/xfs/xfs_export.c | 1 + trunk/fs/xfs/xfs_file.c | 42 +- trunk/fs/xfs/xfs_fs.h | 33 +- trunk/fs/xfs/xfs_fs_subr.c | 96 - trunk/fs/xfs/xfs_fsops.c | 141 +- trunk/fs/xfs/xfs_globals.c | 4 +- trunk/fs/xfs/xfs_ialloc.c | 83 +- trunk/fs/xfs/xfs_ialloc.h | 4 +- trunk/fs/xfs/xfs_ialloc_btree.c | 55 + trunk/fs/xfs/xfs_ialloc_btree.h | 2 + trunk/fs/xfs/{xfs_sync.c => xfs_icache.c} | 914 +- trunk/fs/xfs/{xfs_sync.h => xfs_icache.h} | 28 +- trunk/fs/xfs/xfs_iget.c | 705 -- trunk/fs/xfs/xfs_inode.c | 437 +- trunk/fs/xfs/xfs_inode.h | 12 +- trunk/fs/xfs/xfs_ioctl.c | 21 + trunk/fs/xfs/xfs_iomap.c | 31 +- trunk/fs/xfs/xfs_iops.c | 8 +- trunk/fs/xfs/xfs_itable.c | 4 +- trunk/fs/xfs/xfs_linux.h | 2 + trunk/fs/xfs/xfs_log.c | 241 +- trunk/fs/xfs/xfs_log.h | 4 + trunk/fs/xfs/xfs_log_priv.h | 12 +- trunk/fs/xfs/xfs_log_recover.c | 146 +- trunk/fs/xfs/xfs_mount.c | 163 +- trunk/fs/xfs/xfs_mount.h | 13 +- trunk/fs/xfs/xfs_qm.c | 22 +- trunk/fs/xfs/xfs_qm_syscalls.c | 6 +- trunk/fs/xfs/xfs_rtalloc.c | 16 +- trunk/fs/xfs/xfs_sb.h | 7 + trunk/fs/xfs/xfs_super.c | 148 +- trunk/fs/xfs/xfs_super.h | 1 + trunk/fs/xfs/xfs_sysctl.c | 9 + trunk/fs/xfs/xfs_sysctl.h | 1 + trunk/fs/xfs/xfs_trace.h | 60 +- trunk/fs/xfs/xfs_trans.h | 19 +- trunk/fs/xfs/xfs_trans_buf.c | 9 +- trunk/fs/xfs/xfs_vnodeops.c | 168 +- trunk/fs/xfs/xfs_vnodeops.h | 9 +- trunk/include/acpi/acconfig.h | 1 + trunk/include/acpi/acexcep.h | 2 +- trunk/include/acpi/acnames.h | 1 + trunk/include/acpi/acpi_bus.h | 78 +- trunk/include/acpi/acpiosxf.h | 3 +- trunk/include/acpi/acpixf.h | 18 +- trunk/include/acpi/actbl3.h | 22 +- trunk/include/acpi/actypes.h | 42 +- trunk/include/asm-generic/gpio.h | 52 +- trunk/include/asm-generic/trace_clock.h | 16 + trunk/include/linux/acpi.h | 135 +- trunk/include/linux/acpi_gpio.h | 19 + trunk/include/linux/amba/bus.h | 10 + trunk/include/linux/balloon_compaction.h | 272 + trunk/include/linux/bootmem.h | 4 +- trunk/include/linux/bug.h | 1 + trunk/include/linux/cgroup.h | 167 +- trunk/include/linux/clk-provider.h | 24 +- trunk/include/linux/context_tracking.h | 18 + trunk/include/linux/cpu_cooling.h | 6 +- trunk/include/linux/cpufreq.h | 5 +- trunk/include/linux/cpuidle.h | 15 +- trunk/include/linux/devfreq.h | 136 +- trunk/include/linux/device.h | 18 + trunk/include/linux/dma-contiguous.h | 4 +- trunk/include/linux/edac.h | 3 + trunk/include/linux/efi.h | 1 + trunk/include/linux/freezer.h | 58 +- trunk/include/linux/fs.h | 7 +- trunk/include/linux/ftrace_event.h | 20 +- trunk/include/linux/gfp.h | 7 +- trunk/include/linux/gpio.h | 21 +- trunk/include/linux/hardirq.h | 15 +- trunk/include/linux/huge_mm.h | 4 + trunk/include/linux/hugetlb.h | 7 +- trunk/include/linux/hw_breakpoint.h | 31 +- trunk/include/linux/i2c.h | 9 + trunk/include/linux/i2c/pcf857x.h | 3 - trunk/include/linux/iio/buffer.h | 26 +- trunk/include/linux/iio/consumer.h | 50 + trunk/include/linux/iio/iio.h | 5 + trunk/include/linux/iio/imu/adis.h | 280 + trunk/include/linux/iio/machine.h | 2 + trunk/include/linux/iio/types.h | 2 + trunk/include/linux/init.h | 18 +- .../staging/ipack => include/linux}/ipack.h | 100 +- trunk/include/linux/irq.h | 9 + trunk/include/linux/irqdesc.h | 3 + trunk/include/linux/jiffies.h | 3 +- trunk/include/linux/kernel.h | 22 +- trunk/include/linux/kernel_stat.h | 17 +- trunk/include/linux/kobject.h | 18 - trunk/include/linux/kvm_host.h | 12 +- trunk/include/linux/memory.h | 1 + trunk/include/linux/memory_hotplug.h | 13 +- trunk/include/linux/mempolicy.h | 16 - trunk/include/linux/mfd/88pm80x.h | 2 +- trunk/include/linux/mfd/abx500/ab8500.h | 4 +- trunk/include/linux/mfd/db8500-prcmu.h | 4 +- trunk/include/linux/mfd/dbx500-prcmu.h | 10 + trunk/include/linux/mfd/pm8xxx/irq.h | 8 +- .../linux/mfd/rtsx_common.h} | 43 +- trunk/include/linux/mfd/rtsx_pci.h | 794 ++ trunk/include/linux/migrate.h | 19 + trunk/include/linux/mm.h | 31 + trunk/include/linux/mm_types.h | 19 +- trunk/include/linux/mman.h | 2 + trunk/include/linux/mmc/card.h | 2 + trunk/include/linux/mmc/core.h | 2 + trunk/include/linux/mmc/dw_mmc.h | 5 +- trunk/include/linux/mmc/host.h | 17 +- trunk/include/linux/mmc/mmc.h | 2 + trunk/include/linux/mmc/mxs-mmc.h | 19 - trunk/include/linux/mmc/sdhci.h | 6 +- trunk/include/linux/mmzone.h | 9 - trunk/include/linux/netdevice.h | 3 + trunk/include/linux/node.h | 3 +- trunk/include/linux/of.h | 57 +- trunk/include/linux/oom.h | 21 +- trunk/include/linux/page-isolation.h | 10 +- trunk/include/linux/pagemap.h | 16 + trunk/include/linux/pci.h | 8 +- trunk/include/linux/pci_ids.h | 5 + trunk/include/linux/percpu-rwsem.h | 4 +- trunk/include/linux/pinctrl/pinconf-generic.h | 5 +- trunk/include/linux/pinctrl/pinctrl.h | 19 + trunk/include/linux/platform_data/ad5449.h | 40 + trunk/include/linux/platform_data/ad7298.h | 20 + trunk/include/linux/platform_data/ad7793.h | 112 + trunk/include/linux/platform_data/ad7887.h | 26 + trunk/include/linux/platform_data/ads7828.h | 29 + trunk/include/linux/platform_data/atmel.h | 73 + .../linux/platform_data/clk-integrator.h | 2 + .../linux/platform_data/db8500_thermal.h | 38 + .../include/linux/platform_data/gpio-ts5500.h | 27 + trunk/include/linux/platform_data/mmc-omap.h | 7 +- trunk/include/linux/platform_data/omap_drm.h | 1 + .../linux/platform_data/pinctrl-coh901.h | 4 - .../linux/platform_data/pinctrl-nomadik.h} | 111 +- .../linux/platform_data/pxa2xx_udc.h} | 5 +- trunk/include/linux/platform_data/pxa_sdhci.h | 6 +- .../linux/platform_data/sa11x0-serial.h} | 6 +- .../linux/platform_data/uio_dmem_genirq.h | 26 + trunk/include/linux/platform_device.h | 1 + trunk/include/linux/pm.h | 3 +- trunk/include/linux/pm_qos.h | 77 +- trunk/include/linux/pstore.h | 6 +- trunk/include/linux/rculist.h | 17 - trunk/include/linux/rcupdate.h | 29 +- trunk/include/linux/regmap.h | 95 +- trunk/include/linux/ring_buffer.h | 3 +- trunk/include/linux/sched.h | 66 +- trunk/include/linux/serial_8250.h | 2 + trunk/include/linux/serial_core.h | 6 + trunk/include/linux/shm.h | 15 + trunk/include/linux/srcu.h | 34 + trunk/include/linux/thermal.h | 134 +- trunk/include/linux/tick.h | 6 + trunk/include/linux/trace_clock.h | 2 + trunk/include/linux/tty.h | 1 + trunk/include/linux/types.h | 1 + trunk/include/linux/uprobes.h | 10 +- trunk/include/linux/usb.h | 50 +- trunk/include/linux/usb/composite.h | 4 +- trunk/include/linux/usb/ehci_pdriver.h | 5 +- trunk/include/linux/usb/ezusb.h | 8 - trunk/include/linux/usb/gadget.h | 7 + trunk/include/linux/usb/ohci_pdriver.h | 2 + trunk/include/linux/usb/phy.h | 15 +- trunk/include/linux/vtime.h | 48 + trunk/include/linux/writeback.h | 9 +- trunk/include/media/adv7604.h | 21 +- trunk/include/net/netprio_cgroup.h | 11 +- trunk/include/net/tcp.h | 1 + trunk/include/trace/events/gfpflags.h | 1 + trunk/include/trace/events/oom.h | 4 +- trunk/include/trace/events/rcu.h | 1 + trunk/include/trace/events/task.h | 8 +- trunk/include/trace/ftrace.h | 76 +- trunk/include/trace/syscall.h | 23 - trunk/include/uapi/asm-generic/ioctls.h | 3 + trunk/include/uapi/asm-generic/mman-common.h | 11 + trunk/include/uapi/asm-generic/mman.h | 2 + trunk/include/uapi/linux/Kbuild | 1 + trunk/include/uapi/linux/hw_breakpoint.h | 30 + trunk/include/uapi/linux/serial_core.h | 5 +- trunk/include/uapi/linux/serial_reg.h | 18 + trunk/init/Kconfig | 67 +- trunk/ipc/shm.c | 3 +- trunk/kernel/Makefile | 1 + trunk/kernel/auditsc.c | 2 +- trunk/kernel/cgroup.c | 754 +- trunk/kernel/cgroup_freezer.c | 514 +- trunk/kernel/context_tracking.c | 83 + trunk/kernel/cpu.c | 13 +- trunk/kernel/cpuset.c | 90 +- trunk/kernel/events/core.c | 8 +- trunk/kernel/events/hw_breakpoint.c | 12 +- trunk/kernel/events/uprobes.c | 43 +- trunk/kernel/exit.c | 4 +- trunk/kernel/fork.c | 13 +- trunk/kernel/freezer.c | 11 +- trunk/kernel/futex.c | 18 +- trunk/kernel/irq/chip.c | 1 + trunk/kernel/irq/irqdomain.c | 4 +- trunk/kernel/irq/manage.c | 41 +- trunk/kernel/irq/resend.c | 8 + trunk/kernel/ksysfs.c | 23 +- trunk/kernel/lockdep_proc.c | 2 +- trunk/kernel/modsign_pubkey.c | 4 +- trunk/kernel/module_signing.c | 14 +- trunk/kernel/posix-cpu-timers.c | 24 - trunk/kernel/power/main.c | 2 +- trunk/kernel/power/process.c | 13 +- trunk/kernel/power/qos.c | 65 +- trunk/kernel/power/swap.c | 2 +- trunk/kernel/rcu.h | 2 + trunk/kernel/rcupdate.c | 3 + trunk/kernel/rcutiny.c | 2 +- trunk/kernel/rcutiny_plugin.h | 5 +- trunk/kernel/rcutorture.c | 54 +- trunk/kernel/rcutree.c | 347 +- trunk/kernel/rcutree.h | 67 +- trunk/kernel/rcutree_plugin.h | 415 +- trunk/kernel/rcutree_trace.c | 330 +- trunk/kernel/sched/core.c | 50 +- trunk/kernel/sched/cputime.c | 131 +- trunk/kernel/sched/debug.c | 36 +- trunk/kernel/sched/fair.c | 914 +- trunk/kernel/sched/features.h | 5 + trunk/kernel/sched/sched.h | 60 +- trunk/kernel/signal.c | 20 +- trunk/kernel/softirq.c | 6 +- trunk/kernel/srcu.c | 16 +- trunk/kernel/sys.c | 6 +- trunk/kernel/sysctl.c | 4 +- trunk/kernel/time/jiffies.c | 8 +- trunk/kernel/time/tick-common.c | 8 +- trunk/kernel/time/tick-internal.h | 1 - trunk/kernel/time/tick-sched.c | 137 +- trunk/kernel/time/timekeeping.c | 14 +- trunk/kernel/trace/Kconfig | 1 + trunk/kernel/trace/ftrace.c | 8 +- trunk/kernel/trace/ring_buffer.c | 65 +- trunk/kernel/trace/trace.c | 411 +- trunk/kernel/trace/trace.h | 18 +- trunk/kernel/trace/trace_branch.c | 4 +- trunk/kernel/trace/trace_events.c | 51 +- trunk/kernel/trace/trace_events_filter.c | 4 +- trunk/kernel/trace/trace_functions.c | 5 +- trunk/kernel/trace/trace_functions_graph.c | 6 +- trunk/kernel/trace/trace_irqsoff.c | 14 +- trunk/kernel/trace/trace_kprobe.c | 10 +- trunk/kernel/trace/trace_output.c | 78 +- trunk/kernel/trace/trace_probe.c | 14 +- trunk/kernel/trace/trace_sched_switch.c | 4 +- trunk/kernel/trace/trace_sched_wakeup.c | 10 +- trunk/kernel/trace/trace_selftest.c | 13 +- trunk/kernel/trace/trace_syscalls.c | 61 +- trunk/kernel/trace/trace_uprobe.c | 4 +- trunk/kernel/watchdog.c | 7 +- trunk/kernel/workqueue.c | 28 +- trunk/lib/Kconfig.debug | 2 +- trunk/lib/Makefile | 5 +- trunk/lib/asn1_decoder.c | 2 +- trunk/lib/cpumask.c | 2 +- trunk/mm/Kconfig | 15 + trunk/mm/Makefile | 3 +- trunk/mm/balloon_compaction.c | 302 + trunk/mm/bootmem.c | 20 +- trunk/mm/compaction.c | 37 +- trunk/mm/dmapool.c | 55 +- trunk/mm/highmem.c | 29 +- trunk/mm/huge_memory.c | 174 +- trunk/mm/hugetlb.c | 4 +- trunk/mm/hugetlb_cgroup.c | 23 +- trunk/mm/internal.h | 5 + trunk/mm/ksm.c | 21 +- trunk/mm/memcontrol.c | 195 +- trunk/mm/memory-failure.c | 36 +- trunk/mm/memory.c | 8 +- trunk/mm/memory_hotplug.c | 332 +- trunk/mm/mempolicy.c | 43 +- trunk/mm/migrate.c | 99 +- trunk/mm/mmap.c | 527 +- trunk/mm/nommu.c | 15 + trunk/mm/oom_kill.c | 86 +- trunk/mm/page-writeback.c | 11 +- trunk/mm/page_alloc.c | 185 +- trunk/mm/page_cgroup.c | 3 + trunk/mm/page_isolation.c | 27 +- trunk/mm/percpu.c | 5 +- trunk/mm/rmap.c | 56 +- trunk/mm/shmem.c | 26 +- trunk/mm/slub.c | 4 +- trunk/mm/sparse.c | 35 +- trunk/mm/swapfile.c | 31 +- trunk/mm/vmalloc.c | 4 +- trunk/mm/vmscan.c | 107 +- trunk/net/can/bcm.c | 3 + trunk/net/core/dev.c | 2 + trunk/net/core/netprio_cgroup.c | 260 +- trunk/net/core/skbuff.c | 6 +- trunk/net/ipv4/icmp.c | 3 +- trunk/net/ipv4/inet_diag.c | 154 +- trunk/net/ipv4/ip_fragment.c | 19 +- trunk/net/ipv4/ipmr.c | 4 + trunk/net/ipv4/tcp.c | 15 +- trunk/net/ipv4/tcp_input.c | 6 +- trunk/net/ipv4/tcp_output.c | 15 +- trunk/net/irda/ircomm/ircomm_tty.c | 1 + trunk/net/irda/irttp.c | 1 + trunk/net/mac80211/offchannel.c | 2 - .../netfilter/ipset/ip_set_hash_netiface.c | 2 +- trunk/net/openvswitch/flow.c | 14 +- trunk/net/openvswitch/vport-netdev.c | 2 +- trunk/net/sched/cls_cgroup.c | 28 +- trunk/net/sctp/chunk.c | 20 +- trunk/net/sctp/socket.c | 4 +- trunk/net/sctp/transport.c | 2 +- trunk/scripts/Makefile.lib | 3 + trunk/scripts/dtc/Makefile | 2 + trunk/scripts/headers_install.pl | 3 + trunk/scripts/mod/modpost.c | 24 +- trunk/scripts/sortextable.c | 1 + trunk/security/device_cgroup.c | 20 +- trunk/tools/Makefile | 24 +- trunk/tools/hv/hv_kvp_daemon.c | 40 +- trunk/tools/lib/traceevent/Makefile | 2 +- trunk/tools/lib/traceevent/event-parse.c | 22 +- trunk/tools/perf/Documentation/Makefile | 31 +- trunk/tools/perf/Documentation/android.txt | 78 + trunk/tools/perf/Documentation/perf-diff.txt | 60 + .../tools/perf/Documentation/perf-inject.txt | 11 + trunk/tools/perf/Documentation/perf-stat.txt | 5 + trunk/tools/perf/Documentation/perf-trace.txt | 6 + trunk/tools/perf/Makefile | 203 +- trunk/tools/perf/arch/common.c | 211 + trunk/tools/perf/arch/common.h | 10 + trunk/tools/perf/arch/x86/include/perf_regs.h | 2 +- trunk/tools/perf/builtin-annotate.c | 17 +- trunk/tools/perf/builtin-buildid-cache.c | 1 + trunk/tools/perf/builtin-buildid-list.c | 6 +- trunk/tools/perf/builtin-diff.c | 437 +- trunk/tools/perf/builtin-evlist.c | 5 +- trunk/tools/perf/builtin-inject.c | 195 +- trunk/tools/perf/builtin-kmem.c | 5 +- trunk/tools/perf/builtin-kvm.c | 156 +- trunk/tools/perf/builtin-lock.c | 2 - trunk/tools/perf/builtin-record.c | 66 +- trunk/tools/perf/builtin-report.c | 23 +- trunk/tools/perf/builtin-sched.c | 8 +- trunk/tools/perf/builtin-script.c | 87 +- trunk/tools/perf/builtin-stat.c | 54 +- trunk/tools/perf/builtin-test.c | 1547 --- trunk/tools/perf/builtin-timechart.c | 5 +- trunk/tools/perf/builtin-top.c | 17 +- trunk/tools/perf/builtin-trace.c | 403 +- trunk/tools/perf/config/feature-tests.mak | 25 +- trunk/tools/perf/config/utilities.mak | 10 +- trunk/tools/perf/perf.c | 20 +- trunk/tools/perf/perf.h | 34 +- trunk/tools/perf/tests/attr.c | 175 + trunk/tools/perf/tests/attr.py | 322 + trunk/tools/perf/tests/attr/README | 64 + trunk/tools/perf/tests/attr/base-record | 39 + trunk/tools/perf/tests/attr/base-stat | 39 + trunk/tools/perf/tests/attr/test-record-basic | 5 + .../perf/tests/attr/test-record-branch-any | 8 + .../tests/attr/test-record-branch-filter-any | 8 + .../attr/test-record-branch-filter-any_call | 8 + .../attr/test-record-branch-filter-any_ret | 8 + .../tests/attr/test-record-branch-filter-hv | 8 + .../attr/test-record-branch-filter-ind_call | 8 + .../tests/attr/test-record-branch-filter-k | 8 + .../tests/attr/test-record-branch-filter-u | 8 + trunk/tools/perf/tests/attr/test-record-count | 8 + trunk/tools/perf/tests/attr/test-record-data | 8 + trunk/tools/perf/tests/attr/test-record-freq | 6 + .../perf/tests/attr/test-record-graph-default | 6 + .../perf/tests/attr/test-record-graph-dwarf | 10 + .../perf/tests/attr/test-record-graph-fp | 6 + trunk/tools/perf/tests/attr/test-record-group | 18 + .../tools/perf/tests/attr/test-record-group1 | 19 + .../perf/tests/attr/test-record-no-delay | 9 + .../perf/tests/attr/test-record-no-inherit | 7 + .../perf/tests/attr/test-record-no-samples | 6 + .../tools/perf/tests/attr/test-record-period | 7 + trunk/tools/perf/tests/attr/test-record-raw | 7 + trunk/tools/perf/tests/attr/test-stat-basic | 6 + trunk/tools/perf/tests/attr/test-stat-default | 64 + .../perf/tests/attr/test-stat-detailed-1 | 101 + .../perf/tests/attr/test-stat-detailed-2 | 155 + .../perf/tests/attr/test-stat-detailed-3 | 173 + trunk/tools/perf/tests/attr/test-stat-group | 15 + trunk/tools/perf/tests/attr/test-stat-group1 | 15 + .../perf/tests/attr/test-stat-no-inherit | 7 + trunk/tools/perf/tests/builtin-test.c | 173 + .../dso-test-data.c => tests/dso-data.c} | 8 +- trunk/tools/perf/tests/evsel-roundtrip-name.c | 114 + trunk/tools/perf/tests/evsel-tp-sched.c | 84 + trunk/tools/perf/tests/mmap-basic.c | 162 + .../tools/perf/tests/open-syscall-all-cpus.c | 120 + .../tools/perf/tests/open-syscall-tp-fields.c | 117 + trunk/tools/perf/tests/open-syscall.c | 66 + .../parse-events.c} | 93 +- trunk/tools/perf/tests/perf-record.c | 312 + trunk/tools/perf/tests/pmu.c | 178 + trunk/tools/perf/tests/rdpmc.c | 175 + trunk/tools/perf/tests/tests.h | 22 + trunk/tools/perf/tests/util.c | 30 + trunk/tools/perf/tests/vmlinux-kallsyms.c | 230 + trunk/tools/perf/ui/browsers/annotate.c | 45 +- trunk/tools/perf/ui/browsers/hists.c | 97 +- trunk/tools/perf/ui/browsers/scripts.c | 189 + trunk/tools/perf/ui/gtk/browser.c | 4 +- trunk/tools/perf/ui/gtk/gtk.h | 1 + trunk/tools/perf/ui/gtk/progress.c | 59 + trunk/tools/perf/ui/gtk/setup.c | 2 + trunk/tools/perf/ui/gtk/util.c | 11 - trunk/tools/perf/ui/hist.c | 138 +- trunk/tools/perf/ui/progress.c | 44 +- trunk/tools/perf/ui/progress.h | 10 + trunk/tools/perf/ui/stdio/hist.c | 2 +- trunk/tools/perf/ui/tui/progress.c | 42 + trunk/tools/perf/ui/tui/setup.c | 1 + trunk/tools/perf/ui/ui.h | 28 + trunk/tools/perf/util/PERF-VERSION-GEN | 14 +- trunk/tools/perf/util/annotate.c | 72 +- trunk/tools/perf/util/annotate.h | 10 +- trunk/tools/perf/util/build-id.c | 27 +- trunk/tools/perf/util/build-id.h | 11 +- trunk/tools/perf/util/cache.h | 39 +- trunk/tools/perf/util/debug.h | 1 + trunk/tools/perf/util/dso.c | 595 + trunk/tools/perf/util/dso.h | 148 + trunk/tools/perf/util/event.c | 302 +- trunk/tools/perf/util/event.h | 9 +- trunk/tools/perf/util/evlist.c | 13 +- trunk/tools/perf/util/evsel.c | 56 +- trunk/tools/perf/util/evsel.h | 11 +- trunk/tools/perf/util/header.c | 13 + trunk/tools/perf/util/header.h | 3 +- trunk/tools/perf/util/hist.c | 99 + trunk/tools/perf/util/hist.h | 49 +- trunk/tools/perf/util/machine.c | 464 + trunk/tools/perf/util/machine.h | 148 + trunk/tools/perf/util/map.c | 182 +- trunk/tools/perf/util/map.h | 93 - trunk/tools/perf/util/parse-events.c | 56 +- trunk/tools/perf/util/parse-events.h | 5 +- trunk/tools/perf/util/parse-events.l | 4 +- trunk/tools/perf/util/parse-events.y | 18 + trunk/tools/perf/util/pmu.c | 192 +- trunk/tools/perf/util/pmu.h | 6 +- trunk/tools/perf/util/pstack.c | 46 +- trunk/tools/perf/util/python.c | 2 + trunk/tools/perf/util/rblist.c | 4 +- .../scripting-engines/trace-event-python.c | 1 - trunk/tools/perf/util/session.c | 5 +- trunk/tools/perf/util/session.h | 7 +- trunk/tools/perf/util/sort.h | 45 +- trunk/tools/perf/util/strbuf.c | 8 +- trunk/tools/perf/util/string.c | 18 + trunk/tools/perf/util/symbol.c | 658 +- trunk/tools/perf/util/symbol.h | 162 +- trunk/tools/perf/util/thread.c | 41 +- trunk/tools/perf/util/thread.h | 2 + trunk/tools/perf/util/trace-event-read.c | 2 - trunk/tools/perf/util/util.c | 35 + trunk/tools/perf/util/util.h | 8 + trunk/tools/power/cpupower/.gitignore | 7 + trunk/tools/power/cpupower/Makefile | 3 +- .../tools/power/cpupower/debug/i386/Makefile | 5 +- .../power/cpupower/man/cpupower-monitor.1 | 15 +- .../power/cpupower/utils/helpers/cpuid.c | 2 + .../power/cpupower/utils/helpers/helpers.h | 18 +- .../power/cpupower/utils/helpers/sysfs.c | 19 - .../power/cpupower/utils/helpers/topology.c | 53 +- .../utils/idle_monitor/cpupower-monitor.c | 21 +- .../utils/idle_monitor/cpupower-monitor.h | 17 + .../cpupower/utils/idle_monitor/snb_idle.c | 10 +- trunk/tools/scripts/Makefile.include | 23 +- trunk/tools/testing/selftests/vm/Makefile | 4 +- trunk/tools/testing/selftests/vm/thuge-gen.c | 254 + 3285 files changed, 102600 insertions(+), 122504 deletions(-) create mode 100644 trunk/Documentation/ABI/testing/sysfs-devices-sun create mode 100644 trunk/Documentation/acpi/enumeration.txt create mode 100644 trunk/Documentation/devicetree/bindings/arm/cpus.txt create mode 100644 trunk/Documentation/devicetree/bindings/cpufreq/cpufreq-spear.txt create mode 100644 trunk/Documentation/devicetree/bindings/gpio/gpio-stmpe.txt create mode 100644 trunk/Documentation/devicetree/bindings/gpio/spear_spics.txt rename trunk/Documentation/devicetree/bindings/i2c/{atmel-i2c.txt => i2c-at91.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{davinci.txt => i2c-davinci.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{gpio-i2c.txt => i2c-gpio.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{fsl-imx-i2c.txt => i2c-imx.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{fsl-i2c.txt => i2c-mpc.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{mux.txt => i2c-mux.txt} (100%) create mode 100644 trunk/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt rename trunk/Documentation/devicetree/bindings/i2c/{nomadik.txt => i2c-nomadik.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{cavium-i2c.txt => i2c-octeon.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{omap-i2c.txt => i2c-omap.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{pnx.txt => i2c-pnx.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{ce4100-i2c.txt => i2c-pxa-pci-ce4100.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{mrvl-i2c.txt => i2c-pxa.txt} (70%) rename trunk/Documentation/devicetree/bindings/i2c/{samsung-i2c.txt => i2c-s3c2410.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{sirf-i2c.txt => i2c-sirf.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{arm-versatile.txt => i2c-versatile.txt} (100%) rename trunk/Documentation/devicetree/bindings/i2c/{xiic.txt => i2c-xiic.txt} (100%) create mode 100644 trunk/Documentation/devicetree/bindings/leds/common.txt rename trunk/Documentation/devicetree/bindings/{gpio/led.txt => leds/leds-gpio.txt} (68%) rename trunk/Documentation/devicetree/bindings/mmc/{synposis-dw-mshc.txt => synopsis-dw-mshc.txt} (100%) create mode 100644 trunk/Documentation/devicetree/bindings/mmc/vt8500-sdmmc.txt create mode 100644 trunk/Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt create mode 100644 trunk/Documentation/devicetree/bindings/rtc/orion-rtc.txt create mode 100644 trunk/Documentation/devicetree/bindings/thermal/db8500-thermal.txt create mode 100644 trunk/Documentation/hwmon/da9055 delete mode 100644 trunk/Documentation/telephony/00-INDEX delete mode 100644 trunk/Documentation/telephony/ixj.txt create mode 100644 trunk/Documentation/zh_CN/arm/kernel_user_helpers.txt create mode 100644 trunk/arch/arm/boot/dts/animeo_ip.dts create mode 100644 trunk/arch/arm/boot/dts/at91rm9200.dtsi create mode 100644 trunk/arch/arm/boot/dts/at91rm9200ek.dts create mode 100644 trunk/arch/arm/boot/dts/at91sam9g15.dtsi create mode 100644 trunk/arch/arm/boot/dts/at91sam9g15ek.dts create mode 100644 trunk/arch/arm/boot/dts/at91sam9g25.dtsi create mode 100644 trunk/arch/arm/boot/dts/at91sam9g35.dtsi create mode 100644 trunk/arch/arm/boot/dts/at91sam9g35ek.dts create mode 100644 trunk/arch/arm/boot/dts/at91sam9x25.dtsi create mode 100644 trunk/arch/arm/boot/dts/at91sam9x25ek.dts create mode 100644 trunk/arch/arm/boot/dts/at91sam9x35.dtsi create mode 100644 trunk/arch/arm/boot/dts/at91sam9x35ek.dts create mode 100644 trunk/arch/arm/boot/dts/at91sam9x5ek.dtsi create mode 100644 trunk/arch/arm/boot/dts/pm9g45.dts delete mode 100644 trunk/arch/arm/configs/afeb9260_defconfig delete mode 100644 trunk/arch/arm/configs/cam60_defconfig delete mode 100644 trunk/arch/arm/configs/cpu9260_defconfig delete mode 100644 trunk/arch/arm/configs/cpu9g20_defconfig delete mode 100644 trunk/arch/arm/configs/qil-a9260_defconfig delete mode 100644 trunk/arch/arm/configs/sam9_l9260_defconfig delete mode 100644 trunk/arch/arm/configs/stamp9g20_defconfig delete mode 100644 trunk/arch/arm/configs/usb-a9260_defconfig delete mode 100644 trunk/arch/arm/include/asm/mach/serial_at91.h create mode 100644 trunk/arch/arm/include/asm/percpu.h rename trunk/arch/arm/mach-at91/{include/mach => }/at91_aic.h (100%) rename trunk/arch/arm/mach-at91/{include/mach => }/at91_rstc.h (100%) rename trunk/arch/arm/mach-at91/{include/mach => }/at91_shdwc.h (100%) rename trunk/arch/arm/mach-at91/{include/mach => }/at91_tc.h (100%) create mode 100644 trunk/arch/arm/mach-at91/board-rm9200-dt.c rename trunk/arch/arm/mach-at91/{include/mach => }/board.h (65%) rename trunk/arch/arm/mach-at91/{include/mach => }/gsia18s.h (100%) delete mode 100644 trunk/arch/arm/mach-at91/include/mach/at91_pit.h rename trunk/arch/arm/mach-at91/{include/mach => }/stamp9g20.h (100%) create mode 100644 trunk/arch/arm/mm/cache-aurora-l2.h delete mode 100644 trunk/arch/arm/plat-nomadik/include/plat/gpio-nomadik.h create mode 100644 trunk/arch/arm64/boot/dts/.gitignore create mode 100644 trunk/arch/arm64/boot/dts/Makefile create mode 100644 trunk/arch/arm64/include/asm/fpsimdmacros.h create mode 100644 trunk/arch/arm64/include/asm/virt.h create mode 100644 trunk/arch/arm64/kernel/hyp-stub.S delete mode 100644 trunk/arch/avr32/include/asm/mach/serial_at91.h create mode 100644 trunk/arch/c6x/boot/dts/Makefile create mode 100644 trunk/arch/c6x/boot/dts/linked_dtb.S delete mode 100644 trunk/arch/c6x/boot/linked_dtb.S create mode 100644 trunk/arch/c6x/include/asm/setup.h delete mode 100644 trunk/arch/c6x/include/uapi/asm/kvm_para.h create mode 100644 trunk/arch/microblaze/boot/dts/Makefile create mode 100644 trunk/arch/microblaze/boot/dts/linked_dtb.S delete mode 100644 trunk/arch/microblaze/boot/linked_dtb.S rename trunk/{drivers/usb/host/alchemy-common.c => arch/mips/alchemy/common/usb.c} (100%) rename trunk/arch/openrisc/boot/{ => dts}/Makefile (75%) rename trunk/arch/x86/include/asm/{rcu.h => context_tracking.h} (63%) create mode 100644 trunk/arch/x86/include/asm/trace_clock.h create mode 100644 trunk/arch/x86/kernel/trace_clock.c delete mode 100644 trunk/arch/x86/lib/cmpxchg.c create mode 100644 trunk/drivers/acpi/acpi_i2c.c create mode 100644 trunk/drivers/acpi/acpi_platform.c create mode 100644 trunk/drivers/acpi/acpica/utcache.c create mode 100644 trunk/drivers/acpi/acpica/utclib.c create mode 100644 trunk/drivers/acpi/acpica/uttrack.c create mode 100644 trunk/drivers/acpi/device_pm.c create mode 100644 trunk/drivers/acpi/resource.c create mode 100644 trunk/drivers/clk/clk-twl6040.c create mode 100644 trunk/drivers/clk/ux500/abx500-clk.c create mode 100644 trunk/drivers/clk/versatile/clk-impd1.c create mode 100644 trunk/drivers/clk/versatile/clk-vexpress-osc.c create mode 100644 trunk/drivers/clk/versatile/clk-vexpress.c create mode 100644 trunk/drivers/cpufreq/cpufreq_governor.c create mode 100644 trunk/drivers/cpufreq/cpufreq_governor.h create mode 100644 trunk/drivers/cpufreq/spear-cpufreq.c create mode 100644 trunk/drivers/gpio/gpio-clps711x.c create mode 100644 trunk/drivers/gpio/gpio-da9055.c create mode 100644 trunk/drivers/gpio/gpio-spear-spics.c create mode 100644 trunk/drivers/gpio/gpio-ts5500.c create mode 100644 trunk/drivers/gpio/gpiolib-acpi.c create mode 100644 trunk/drivers/hv/hv_balloon.c create mode 100644 trunk/drivers/hwmon/da9055-hwmon.c rename trunk/drivers/{staging/iio/adc/ad7298_core.c => iio/adc/ad7298.c} (55%) rename trunk/drivers/{staging => }/iio/adc/ad7793.c (50%) rename trunk/drivers/{staging/iio/adc/ad7887_core.c => iio/adc/ad7887.c} (50%) rename trunk/drivers/{staging/iio/adc/max1363_core.c => iio/adc/max1363.c} (81%) create mode 100644 trunk/drivers/iio/adc/ti-adc081c.c create mode 100644 trunk/drivers/iio/buffer_cb.c create mode 100644 trunk/drivers/iio/dac/ad5449.c create mode 100644 trunk/drivers/iio/gyro/adis16136.c create mode 100644 trunk/drivers/iio/imu/Kconfig create mode 100644 trunk/drivers/iio/imu/Makefile create mode 100644 trunk/drivers/iio/imu/adis.c create mode 100644 trunk/drivers/iio/imu/adis16480.c create mode 100644 trunk/drivers/iio/imu/adis_buffer.c create mode 100644 trunk/drivers/iio/imu/adis_trigger.c create mode 100644 trunk/drivers/ipack/Kconfig rename trunk/drivers/{staging => }/ipack/Makefile (83%) create mode 100644 trunk/drivers/ipack/carriers/Kconfig rename trunk/drivers/{staging/ipack/bridges => ipack/carriers}/Makefile (100%) rename trunk/drivers/{staging/ipack/bridges => ipack/carriers}/tpci200.c (66%) rename trunk/drivers/{staging/ipack/bridges => ipack/carriers}/tpci200.h (85%) rename trunk/drivers/{staging => }/ipack/devices/Kconfig (99%) rename trunk/drivers/{staging => }/ipack/devices/Makefile (100%) rename trunk/drivers/{staging => }/ipack/devices/ipoctal.c (86%) rename trunk/drivers/{staging => }/ipack/devices/ipoctal.h (82%) rename trunk/drivers/{staging => }/ipack/devices/scc2698.h (97%) rename trunk/drivers/{staging => }/ipack/ipack.c (90%) create mode 100644 trunk/drivers/memstick/host/rtsx_pci_ms.c create mode 100644 trunk/drivers/mfd/rtl8411.c create mode 100644 trunk/drivers/mfd/rts5209.c create mode 100644 trunk/drivers/mfd/rts5229.c create mode 100644 trunk/drivers/mfd/rtsx_pcr.c rename trunk/drivers/{staging/rts_pstor/general.h => mfd/rtsx_pcr.h} (75%) create mode 100644 trunk/drivers/misc/mei/amthif.c delete mode 100644 trunk/drivers/mmc/host/at91_mci.c delete mode 100644 trunk/drivers/mmc/host/at91_mci.h create mode 100644 trunk/drivers/mmc/host/rtsx_pci_sdmmc.c create mode 100644 trunk/drivers/mmc/host/sdhci-acpi.c create mode 100644 trunk/drivers/mmc/host/wmt-sdmmc.c delete mode 100644 trunk/drivers/pci/hotplug.c create mode 100644 trunk/drivers/pinctrl/mvebu/Kconfig create mode 100644 trunk/drivers/pinctrl/mvebu/Makefile rename trunk/drivers/pinctrl/{ => mvebu}/pinctrl-armada-370.c (100%) rename trunk/drivers/pinctrl/{ => mvebu}/pinctrl-armada-xp.c (100%) rename trunk/drivers/pinctrl/{ => mvebu}/pinctrl-dove.c (100%) rename trunk/drivers/pinctrl/{ => mvebu}/pinctrl-kirkwood.c (100%) rename trunk/drivers/pinctrl/{ => mvebu}/pinctrl-mvebu.c (99%) rename trunk/drivers/pinctrl/{ => mvebu}/pinctrl-mvebu.h (100%) create mode 100644 trunk/drivers/pinctrl/pinctrl-at91.c create mode 100644 trunk/drivers/pinctrl/spear/pinctrl-plgpio.c rename trunk/{arch/arm/mach-at91/include/mach/at91_rtc.h => drivers/rtc/rtc-at91rm9200.h} (100%) create mode 100644 trunk/drivers/staging/android/binder_trace.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/APCI1710_82x54.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/APCI1710_Chrono.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/APCI1710_Dig_io.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/APCI1710_INCCPT.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/APCI1710_Inp_cpt.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/APCI1710_Pwm.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/APCI1710_Ssi.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/APCI1710_Tor.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/APCI1710_Ttl.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/addi_amcc_s5933.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_APCI1710.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1032.c delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1032.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1516.c delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1516.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci16xx.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci2016.c delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci2016.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci2032.c delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci2032.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci2200.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3200.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3xxx.h delete mode 100644 trunk/drivers/staging/comedi/drivers/addi_apci_2016.c delete mode 100644 trunk/drivers/staging/comedi/drivers/addi_apci_3001.c delete mode 100644 trunk/drivers/staging/comedi/drivers/addi_apci_3300.c delete mode 100644 trunk/drivers/staging/comedi/drivers/mpc8260cpm.c delete mode 100644 trunk/drivers/staging/csr/csr_lib.h delete mode 100644 trunk/drivers/staging/csr/csr_panic.c delete mode 100644 trunk/drivers/staging/csr/csr_panic.h create mode 100644 trunk/drivers/staging/fwserial/Kconfig create mode 100644 trunk/drivers/staging/fwserial/Makefile create mode 100644 trunk/drivers/staging/fwserial/TODO create mode 100644 trunk/drivers/staging/fwserial/dma_fifo.c create mode 100644 trunk/drivers/staging/fwserial/dma_fifo.h create mode 100644 trunk/drivers/staging/fwserial/fwserial.c create mode 100644 trunk/drivers/staging/fwserial/fwserial.h delete mode 100644 trunk/drivers/staging/iio/accel/adis16201_ring.c delete mode 100644 trunk/drivers/staging/iio/accel/adis16201_trigger.c delete mode 100644 trunk/drivers/staging/iio/accel/adis16203_ring.c delete mode 100644 trunk/drivers/staging/iio/accel/adis16203_trigger.c delete mode 100644 trunk/drivers/staging/iio/accel/adis16204_ring.c delete mode 100644 trunk/drivers/staging/iio/accel/adis16204_trigger.c delete mode 100644 trunk/drivers/staging/iio/accel/adis16209_ring.c delete mode 100644 trunk/drivers/staging/iio/accel/adis16209_trigger.c delete mode 100644 trunk/drivers/staging/iio/accel/adis16240_ring.c delete mode 100644 trunk/drivers/staging/iio/accel/adis16240_trigger.c delete mode 100644 trunk/drivers/staging/iio/adc/ad7298.h delete mode 100644 trunk/drivers/staging/iio/adc/ad7298_ring.c delete mode 100644 trunk/drivers/staging/iio/adc/ad7793.h delete mode 100644 trunk/drivers/staging/iio/adc/ad7887.h delete mode 100644 trunk/drivers/staging/iio/adc/ad7887_ring.c delete mode 100644 trunk/drivers/staging/iio/adc/adt7310.c delete mode 100644 trunk/drivers/staging/iio/adc/max1363.h delete mode 100644 trunk/drivers/staging/iio/adc/max1363_ring.c delete mode 100644 trunk/drivers/staging/iio/gyro/adis16260_ring.c delete mode 100644 trunk/drivers/staging/iio/gyro/adis16260_trigger.c delete mode 100644 trunk/drivers/staging/ipack/Kconfig delete mode 100644 trunk/drivers/staging/ipack/TODO delete mode 100644 trunk/drivers/staging/ipack/bridges/Kconfig delete mode 100644 trunk/drivers/staging/ipack/ipack_ids.h delete mode 100644 trunk/drivers/staging/line6/control.c delete mode 100644 trunk/drivers/staging/line6/control.h delete mode 100644 trunk/drivers/staging/line6/dumprequest.c delete mode 100644 trunk/drivers/staging/line6/dumprequest.h delete mode 100644 trunk/drivers/staging/rts_pstor/Kconfig delete mode 100644 trunk/drivers/staging/rts_pstor/Makefile delete mode 100644 trunk/drivers/staging/rts_pstor/TODO delete mode 100644 trunk/drivers/staging/rts_pstor/general.c delete mode 100644 trunk/drivers/staging/rts_pstor/ms.c delete mode 100644 trunk/drivers/staging/rts_pstor/ms.h delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx.c delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx.h delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx_card.c delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx_card.h delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx_chip.c delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx_chip.h delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx_scsi.c delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx_scsi.h delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx_sys.h delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx_transport.c delete mode 100644 trunk/drivers/staging/rts_pstor/rtsx_transport.h delete mode 100644 trunk/drivers/staging/rts_pstor/sd.c delete mode 100644 trunk/drivers/staging/rts_pstor/sd.h delete mode 100644 trunk/drivers/staging/rts_pstor/spi.c delete mode 100644 trunk/drivers/staging/rts_pstor/spi.h delete mode 100644 trunk/drivers/staging/rts_pstor/trace.h delete mode 100644 trunk/drivers/staging/rts_pstor/xd.c delete mode 100644 trunk/drivers/staging/rts_pstor/xd.h create mode 100644 trunk/drivers/staging/sb105x/Kconfig create mode 100644 trunk/drivers/staging/sb105x/Makefile create mode 100644 trunk/drivers/staging/sb105x/sb_mp_register.h create mode 100644 trunk/drivers/staging/sb105x/sb_pci_mp.c create mode 100644 trunk/drivers/staging/sb105x/sb_pci_mp.h create mode 100644 trunk/drivers/staging/sb105x/sb_ser_core.h delete mode 100644 trunk/drivers/staging/telephony/Kconfig delete mode 100644 trunk/drivers/staging/telephony/Makefile delete mode 100644 trunk/drivers/staging/telephony/TODO delete mode 100644 trunk/drivers/staging/telephony/ixj-ver.h delete mode 100644 trunk/drivers/staging/telephony/ixj.c delete mode 100644 trunk/drivers/staging/telephony/ixj.h delete mode 100644 trunk/drivers/staging/telephony/ixj_pcmcia.c delete mode 100644 trunk/drivers/staging/telephony/phonedev.c delete mode 100644 trunk/drivers/staging/vt6656/ioctl.c delete mode 100644 trunk/drivers/staging/vt6656/ioctl.h delete mode 100644 trunk/drivers/staging/vt6656/upc.h create mode 100644 trunk/drivers/thermal/db8500_cpufreq_cooling.c create mode 100644 trunk/drivers/thermal/db8500_thermal.c create mode 100644 trunk/drivers/thermal/fair_share.c create mode 100644 trunk/drivers/thermal/step_wise.c create mode 100644 trunk/drivers/thermal/thermal_core.h create mode 100644 trunk/drivers/thermal/user_space.c create mode 100644 trunk/drivers/tty/serial/arc_uart.c create mode 100644 trunk/drivers/uio/uio_dmem_genirq.c delete mode 100644 trunk/drivers/usb/gadget/file_storage.c delete mode 100644 trunk/drivers/usb/host/ehci-au1xxx.c delete mode 100644 trunk/drivers/usb/host/ehci-cns3xxx.c delete mode 100644 trunk/drivers/usb/host/ehci-ixp4xx.c delete mode 100644 trunk/drivers/usb/host/ehci-lpm.c delete mode 100644 trunk/drivers/usb/host/ehci-ls1x.c delete mode 100644 trunk/drivers/usb/host/ehci-xls.c delete mode 100644 trunk/drivers/usb/host/ohci-au1xxx.c delete mode 100644 trunk/drivers/usb/host/ohci-cns3xxx.c delete mode 100644 trunk/drivers/usb/host/ohci-pnx8550.c delete mode 100644 trunk/drivers/usb/host/ohci-ppc-soc.c delete mode 100644 trunk/drivers/usb/host/ohci-sh.c delete mode 100644 trunk/drivers/usb/host/ohci-xls.c create mode 100644 trunk/drivers/usb/phy/rcar-phy.c delete mode 100644 trunk/firmware/dabusb/bitstream.bin.ihex delete mode 100644 trunk/firmware/dabusb/firmware.HEX create mode 100644 trunk/fs/xfs/xfs_cksum.h delete mode 100644 trunk/fs/xfs/xfs_fs_subr.c rename trunk/fs/xfs/{xfs_sync.c => xfs_icache.c} (55%) rename trunk/fs/xfs/{xfs_sync.h => xfs_icache.h} (64%) delete mode 100644 trunk/fs/xfs/xfs_iget.c create mode 100644 trunk/include/asm-generic/trace_clock.h create mode 100644 trunk/include/linux/acpi_gpio.h create mode 100644 trunk/include/linux/balloon_compaction.h create mode 100644 trunk/include/linux/context_tracking.h create mode 100644 trunk/include/linux/iio/imu/adis.h rename trunk/{drivers/staging/ipack => include/linux}/ipack.h (66%) rename trunk/{drivers/staging/rts_pstor/debug.h => include/linux/mfd/rtsx_common.h} (53%) create mode 100644 trunk/include/linux/mfd/rtsx_pci.h delete mode 100644 trunk/include/linux/mmc/mxs-mmc.h create mode 100644 trunk/include/linux/platform_data/ad5449.h create mode 100644 trunk/include/linux/platform_data/ad7298.h create mode 100644 trunk/include/linux/platform_data/ad7793.h create mode 100644 trunk/include/linux/platform_data/ad7887.h create mode 100644 trunk/include/linux/platform_data/ads7828.h create mode 100644 trunk/include/linux/platform_data/db8500_thermal.h create mode 100644 trunk/include/linux/platform_data/gpio-ts5500.h rename trunk/{arch/arm/plat-nomadik/include/plat/pincfg.h => include/linux/platform_data/pinctrl-nomadik.h} (66%) rename trunk/{arch/arm/include/asm/mach/udc_pxa2xx.h => include/linux/platform_data/pxa2xx_udc.h} (94%) rename trunk/{arch/arm/include/asm/mach/serial_sa1100.h => include/linux/platform_data/sa11x0-serial.h} (93%) create mode 100644 trunk/include/linux/platform_data/uio_dmem_genirq.h create mode 100644 trunk/include/linux/vtime.h create mode 100644 trunk/include/uapi/linux/hw_breakpoint.h create mode 100644 trunk/kernel/context_tracking.c create mode 100644 trunk/mm/balloon_compaction.c create mode 100644 trunk/tools/perf/Documentation/android.txt create mode 100644 trunk/tools/perf/arch/common.c create mode 100644 trunk/tools/perf/arch/common.h delete mode 100644 trunk/tools/perf/builtin-test.c create mode 100644 trunk/tools/perf/tests/attr.c create mode 100644 trunk/tools/perf/tests/attr.py create mode 100644 trunk/tools/perf/tests/attr/README create mode 100644 trunk/tools/perf/tests/attr/base-record create mode 100644 trunk/tools/perf/tests/attr/base-stat create mode 100644 trunk/tools/perf/tests/attr/test-record-basic create mode 100644 trunk/tools/perf/tests/attr/test-record-branch-any create mode 100644 trunk/tools/perf/tests/attr/test-record-branch-filter-any create mode 100644 trunk/tools/perf/tests/attr/test-record-branch-filter-any_call create mode 100644 trunk/tools/perf/tests/attr/test-record-branch-filter-any_ret create mode 100644 trunk/tools/perf/tests/attr/test-record-branch-filter-hv create mode 100644 trunk/tools/perf/tests/attr/test-record-branch-filter-ind_call create mode 100644 trunk/tools/perf/tests/attr/test-record-branch-filter-k create mode 100644 trunk/tools/perf/tests/attr/test-record-branch-filter-u create mode 100644 trunk/tools/perf/tests/attr/test-record-count create mode 100644 trunk/tools/perf/tests/attr/test-record-data create mode 100644 trunk/tools/perf/tests/attr/test-record-freq create mode 100644 trunk/tools/perf/tests/attr/test-record-graph-default create mode 100644 trunk/tools/perf/tests/attr/test-record-graph-dwarf create mode 100644 trunk/tools/perf/tests/attr/test-record-graph-fp create mode 100644 trunk/tools/perf/tests/attr/test-record-group create mode 100644 trunk/tools/perf/tests/attr/test-record-group1 create mode 100644 trunk/tools/perf/tests/attr/test-record-no-delay create mode 100644 trunk/tools/perf/tests/attr/test-record-no-inherit create mode 100644 trunk/tools/perf/tests/attr/test-record-no-samples create mode 100644 trunk/tools/perf/tests/attr/test-record-period create mode 100644 trunk/tools/perf/tests/attr/test-record-raw create mode 100644 trunk/tools/perf/tests/attr/test-stat-basic create mode 100644 trunk/tools/perf/tests/attr/test-stat-default create mode 100644 trunk/tools/perf/tests/attr/test-stat-detailed-1 create mode 100644 trunk/tools/perf/tests/attr/test-stat-detailed-2 create mode 100644 trunk/tools/perf/tests/attr/test-stat-detailed-3 create mode 100644 trunk/tools/perf/tests/attr/test-stat-group create mode 100644 trunk/tools/perf/tests/attr/test-stat-group1 create mode 100644 trunk/tools/perf/tests/attr/test-stat-no-inherit create mode 100644 trunk/tools/perf/tests/builtin-test.c rename trunk/tools/perf/{util/dso-test-data.c => tests/dso-data.c} (95%) create mode 100644 trunk/tools/perf/tests/evsel-roundtrip-name.c create mode 100644 trunk/tools/perf/tests/evsel-tp-sched.c create mode 100644 trunk/tools/perf/tests/mmap-basic.c create mode 100644 trunk/tools/perf/tests/open-syscall-all-cpus.c create mode 100644 trunk/tools/perf/tests/open-syscall-tp-fields.c create mode 100644 trunk/tools/perf/tests/open-syscall.c rename trunk/tools/perf/{util/parse-events-test.c => tests/parse-events.c} (94%) create mode 100644 trunk/tools/perf/tests/perf-record.c create mode 100644 trunk/tools/perf/tests/pmu.c create mode 100644 trunk/tools/perf/tests/rdpmc.c create mode 100644 trunk/tools/perf/tests/tests.h create mode 100644 trunk/tools/perf/tests/util.c create mode 100644 trunk/tools/perf/tests/vmlinux-kallsyms.c create mode 100644 trunk/tools/perf/ui/browsers/scripts.c create mode 100644 trunk/tools/perf/ui/gtk/progress.c create mode 100644 trunk/tools/perf/ui/tui/progress.c create mode 100644 trunk/tools/perf/util/dso.c create mode 100644 trunk/tools/perf/util/dso.h create mode 100644 trunk/tools/perf/util/machine.c create mode 100644 trunk/tools/perf/util/machine.h create mode 100644 trunk/tools/testing/selftests/vm/thuge-gen.c diff --git a/[refs] b/[refs] index c3f98927a90a..b87d54c2028a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 794b175fc0c0c4844dbb7b137a73bbfd01f6c608 +refs/heads/master: d01e4afdbb65e030fd6f1f96c30a558e2eb0f279 diff --git a/trunk/Documentation/ABI/testing/sysfs-bus-iio b/trunk/Documentation/ABI/testing/sysfs-bus-iio index 2f06d40fe07d..2e33dc6b2346 100644 --- a/trunk/Documentation/ABI/testing/sysfs-bus-iio +++ b/trunk/Documentation/ABI/testing/sysfs-bus-iio @@ -189,6 +189,14 @@ Description: A computed peak value based on the sum squared magnitude of the underlying value in the specified directions. +What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_raw +What: /sys/bus/iio/devices/iio:deviceX/in_pressure_raw +KernelVersion: 3.8 +Contact: linux-iio@vger.kernel.org +Description: + Raw pressure measurement from channel Y. Units after + application of scale and offset are kilopascal. + What: /sys/bus/iio/devices/iio:deviceX/in_accel_offset What: /sys/bus/iio/devices/iio:deviceX/in_accel_x_offset What: /sys/bus/iio/devices/iio:deviceX/in_accel_y_offset @@ -197,6 +205,8 @@ What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_offset What: /sys/bus/iio/devices/iio:deviceX/in_voltage_offset What: /sys/bus/iio/devices/iio:deviceX/in_tempY_offset What: /sys/bus/iio/devices/iio:deviceX/in_temp_offset +What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_offset +What: /sys/bus/iio/devices/iio:deviceX/in_pressure_offset KernelVersion: 2.6.35 Contact: linux-iio@vger.kernel.org Description: @@ -226,6 +236,8 @@ What: /sys/bus/iio/devices/iio:deviceX/in_magn_scale What: /sys/bus/iio/devices/iio:deviceX/in_magn_x_scale What: /sys/bus/iio/devices/iio:deviceX/in_magn_y_scale What: /sys/bus/iio/devices/iio:deviceX/in_magn_z_scale +What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_scale +What: /sys/bus/iio/devices/iio:deviceX/in_pressure_scale KernelVersion: 2.6.35 Contact: linux-iio@vger.kernel.org Description: @@ -245,6 +257,8 @@ What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_y_calibbias What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_z_calibbias What: /sys/bus/iio/devices/iio:deviceX/in_illuminance0_calibbias What: /sys/bus/iio/devices/iio:deviceX/in_proximity0_calibbias +What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_calibbias +What: /sys/bus/iio/devices/iio:deviceX/in_pressure_calibbias KernelVersion: 2.6.35 Contact: linux-iio@vger.kernel.org Description: @@ -262,6 +276,8 @@ What /sys/bus/iio/devices/iio:deviceX/in_anglvel_y_calibscale What /sys/bus/iio/devices/iio:deviceX/in_anglvel_z_calibscale what /sys/bus/iio/devices/iio:deviceX/in_illuminance0_calibscale what /sys/bus/iio/devices/iio:deviceX/in_proximity0_calibscale +What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_calibscale +What: /sys/bus/iio/devices/iio:deviceX/in_pressure_calibscale KernelVersion: 2.6.35 Contact: linux-iio@vger.kernel.org Description: @@ -275,6 +291,8 @@ What: /sys/.../iio:deviceX/in_voltage-voltage_scale_available What: /sys/.../iio:deviceX/out_voltageX_scale_available What: /sys/.../iio:deviceX/out_altvoltageX_scale_available What: /sys/.../iio:deviceX/in_capacitance_scale_available +What: /sys/.../iio:deviceX/in_pressure_scale_available +What: /sys/.../iio:deviceX/in_pressureY_scale_available KernelVersion: 2.6.35 Contact: linux-iio@vger.kernel.org Description: @@ -694,6 +712,8 @@ What: /sys/.../buffer/scan_elements/in_voltageY_en What: /sys/.../buffer/scan_elements/in_voltageY-voltageZ_en What: /sys/.../buffer/scan_elements/in_incli_x_en What: /sys/.../buffer/scan_elements/in_incli_y_en +What: /sys/.../buffer/scan_elements/in_pressureY_en +What: /sys/.../buffer/scan_elements/in_pressure_en KernelVersion: 2.6.37 Contact: linux-iio@vger.kernel.org Description: @@ -707,6 +727,8 @@ What: /sys/.../buffer/scan_elements/in_voltageY_type What: /sys/.../buffer/scan_elements/in_voltage_type What: /sys/.../buffer/scan_elements/in_voltageY_supply_type What: /sys/.../buffer/scan_elements/in_timestamp_type +What: /sys/.../buffer/scan_elements/in_pressureY_type +What: /sys/.../buffer/scan_elements/in_pressure_type KernelVersion: 2.6.37 Contact: linux-iio@vger.kernel.org Description: @@ -751,6 +773,8 @@ What: /sys/.../buffer/scan_elements/in_magn_z_index What: /sys/.../buffer/scan_elements/in_incli_x_index What: /sys/.../buffer/scan_elements/in_incli_y_index What: /sys/.../buffer/scan_elements/in_timestamp_index +What: /sys/.../buffer/scan_elements/in_pressureY_index +What: /sys/.../buffer/scan_elements/in_pressure_index KernelVersion: 2.6.37 Contact: linux-iio@vger.kernel.org Description: diff --git a/trunk/Documentation/ABI/testing/sysfs-class-devfreq b/trunk/Documentation/ABI/testing/sysfs-class-devfreq index 23d78b5aab11..0ba6ea2f89d9 100644 --- a/trunk/Documentation/ABI/testing/sysfs-class-devfreq +++ b/trunk/Documentation/ABI/testing/sysfs-class-devfreq @@ -11,7 +11,7 @@ What: /sys/class/devfreq/.../governor Date: September 2011 Contact: MyungJoo Ham Description: - The /sys/class/devfreq/.../governor shows the name of the + The /sys/class/devfreq/.../governor show or set the name of the governor used by the corresponding devfreq object. What: /sys/class/devfreq/.../cur_freq @@ -19,15 +19,16 @@ Date: September 2011 Contact: MyungJoo Ham Description: The /sys/class/devfreq/.../cur_freq shows the current - frequency of the corresponding devfreq object. + frequency of the corresponding devfreq object. Same as + target_freq when get_cur_freq() is not implemented by + devfreq driver. -What: /sys/class/devfreq/.../central_polling -Date: September 2011 -Contact: MyungJoo Ham +What: /sys/class/devfreq/.../target_freq +Date: September 2012 +Contact: Rajagopal Venkat Description: - The /sys/class/devfreq/.../central_polling shows whether - the devfreq ojbect is using devfreq-provided central - polling mechanism or not. + The /sys/class/devfreq/.../target_freq shows the next governor + predicted target frequency of the corresponding devfreq object. What: /sys/class/devfreq/.../polling_interval Date: September 2011 @@ -43,6 +44,17 @@ Description: (/sys/class/devfreq/.../central_polling is 0), this value may be useless. +What: /sys/class/devfreq/.../trans_stat +Date: October 2012 +Contact: MyungJoo Ham +Descrtiption: + This ABI shows the statistics of devfreq behavior on a + specific device. It shows the time spent in each state and + the number of transitions between states. + In order to activate this ABI, the devfreq target device + driver should provide the list of available frequencies + with its profile. + What: /sys/class/devfreq/.../userspace/set_freq Date: September 2011 Contact: MyungJoo Ham @@ -50,3 +62,19 @@ Description: The /sys/class/devfreq/.../userspace/set_freq shows and sets the requested frequency for the devfreq object if userspace governor is in effect. + +What: /sys/class/devfreq/.../available_frequencies +Date: October 2012 +Contact: Nishanth Menon +Description: + The /sys/class/devfreq/.../available_frequencies shows + the available frequencies of the corresponding devfreq object. + This is a snapshot of available frequencies and not limited + by the min/max frequency restrictions. + +What: /sys/class/devfreq/.../available_governors +Date: October 2012 +Contact: Nishanth Menon +Description: + The /sys/class/devfreq/.../available_governors shows + currently available governors in the system. diff --git a/trunk/Documentation/ABI/testing/sysfs-devices-power b/trunk/Documentation/ABI/testing/sysfs-devices-power index 45000f0db4d4..7fc2997b23a6 100644 --- a/trunk/Documentation/ABI/testing/sysfs-devices-power +++ b/trunk/Documentation/ABI/testing/sysfs-devices-power @@ -204,3 +204,34 @@ Description: This attribute has no effect on system-wide suspend/resume and hibernation. + +What: /sys/devices/.../power/pm_qos_no_power_off +Date: September 2012 +Contact: Rafael J. Wysocki +Description: + The /sys/devices/.../power/pm_qos_no_power_off attribute + is used for manipulating the PM QoS "no power off" flag. If + set, this flag indicates to the kernel that power should not + be removed entirely from the device. + + Not all drivers support this attribute. If it isn't supported, + it is not present. + + This attribute has no effect on system-wide suspend/resume and + hibernation. + +What: /sys/devices/.../power/pm_qos_remote_wakeup +Date: September 2012 +Contact: Rafael J. Wysocki +Description: + The /sys/devices/.../power/pm_qos_remote_wakeup attribute + is used for manipulating the PM QoS "remote wakeup required" + flag. If set, this flag indicates to the kernel that the + device is a source of user events that have to be signaled from + its low-power states. + + Not all drivers support this attribute. If it isn't supported, + it is not present. + + This attribute has no effect on system-wide suspend/resume and + hibernation. diff --git a/trunk/Documentation/ABI/testing/sysfs-devices-sun b/trunk/Documentation/ABI/testing/sysfs-devices-sun new file mode 100644 index 000000000000..86be9848a77e --- /dev/null +++ b/trunk/Documentation/ABI/testing/sysfs-devices-sun @@ -0,0 +1,14 @@ +Whatt: /sys/devices/.../sun +Date: October 2012 +Contact: Yasuaki Ishimatsu +Description: + The file contains a Slot-unique ID which provided by the _SUN + method in the ACPI namespace. The value is written in Advanced + Configuration and Power Interface Specification as follows: + + "The _SUN value is required to be unique among the slots of + the same type. It is also recommended that this number match + the slot number printed on the physical slot whenever possible." + + So reading the sysfs file, we can identify a physical position + of the slot in the system. diff --git a/trunk/Documentation/ABI/testing/sysfs-tty b/trunk/Documentation/ABI/testing/sysfs-tty index 0c430150d929..ad22fb0ee765 100644 --- a/trunk/Documentation/ABI/testing/sysfs-tty +++ b/trunk/Documentation/ABI/testing/sysfs-tty @@ -26,3 +26,115 @@ Description: UART port in serial_core, that is bound to TTY like ttyS0. uartclk = 16 * baud_base + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/type +Date: October 2012 +Contact: Alan Cox +Description: + Shows the current tty type for this port. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/line +Date: October 2012 +Contact: Alan Cox +Description: + Shows the current tty line number for this port. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/port +Date: October 2012 +Contact: Alan Cox +Description: + Shows the current tty port I/O address for this port. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/irq +Date: October 2012 +Contact: Alan Cox +Description: + Shows the current primary interrupt for this port. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/flags +Date: October 2012 +Contact: Alan Cox +Description: + Show the tty port status flags for this port. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/xmit_fifo_size +Date: October 2012 +Contact: Alan Cox +Description: + Show the transmit FIFO size for this port. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/close_delay +Date: October 2012 +Contact: Alan Cox +Description: + Show the closing delay time for this port in ms. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/closing_wait +Date: October 2012 +Contact: Alan Cox +Description: + Show the close wait time for this port in ms. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/custom_divisor +Date: October 2012 +Contact: Alan Cox +Description: + Show the custom divisor if any that is set on this port. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/io_type +Date: October 2012 +Contact: Alan Cox +Description: + Show the I/O type that is to be used with the iomem base + address. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/iomem_base +Date: October 2012 +Contact: Alan Cox +Description: + The I/O memory base for this port. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. + +What: /sys/class/tty/ttyS0/iomem_reg_shift +Date: October 2012 +Contact: Alan Cox +Description: + Show the register shift indicating the spacing to be used + for accesses on this iomem address. + + These sysfs values expose the TIOCGSERIAL interface via + sysfs rather than via ioctls. diff --git a/trunk/Documentation/DocBook/gadget.tmpl b/trunk/Documentation/DocBook/gadget.tmpl index 6ef2f0073e5a..4017f147ba2f 100644 --- a/trunk/Documentation/DocBook/gadget.tmpl +++ b/trunk/Documentation/DocBook/gadget.tmpl @@ -671,7 +671,7 @@ than a kernel driver. There's a USB Mass Storage class driver, which provides a different solution for interoperability with systems such as MS-Windows and MacOS. -That File-backed Storage driver uses a +That Mass Storage driver uses a file or block device as backing store for a drive, like the loop driver. The USB host uses the BBB, CB, or CBI versions of the mass diff --git a/trunk/Documentation/DocBook/uio-howto.tmpl b/trunk/Documentation/DocBook/uio-howto.tmpl index ac3d0018140c..ddb05e98af0d 100644 --- a/trunk/Documentation/DocBook/uio-howto.tmpl +++ b/trunk/Documentation/DocBook/uio-howto.tmpl @@ -719,6 +719,62 @@ framework to set up sysfs files for this region. Simply leave it alone. + +Using uio_dmem_genirq for platform devices + + In addition to statically allocated memory ranges, they may also be + a desire to use dynamically allocated regions in a user space driver. + In particular, being able to access memory made available through the + dma-mapping API, may be particularly useful. The + uio_dmem_genirq driver provides a way to accomplish + this. + + + This driver is used in a similar manner to the + "uio_pdrv_genirq" driver with respect to interrupt + configuration and handling. + + + Set the .name element of + struct platform_device to + "uio_dmem_genirq" to use this driver. + + + When using this driver, fill in the .platform_data + element of struct platform_device, which is of type + struct uio_dmem_genirq_pdata and which contains the + following elements: + + + struct uio_info uioinfo: The same + structure used as the uio_pdrv_genirq platform + data + unsigned int *dynamic_region_sizes: + Pointer to list of sizes of dynamic memory regions to be mapped into + user space. + + unsigned int num_dynamic_regions: + Number of elements in dynamic_region_sizes array. + + + + The dynamic regions defined in the platform data will be appended to + the mem[] array after the platform device + resources, which implies that the total number of static and dynamic + memory regions cannot exceed MAX_UIO_MAPS. + + + The dynamic memory regions will be allocated when the UIO device file, + /dev/uioX is opened. + Simiar to static memory resources, the memory region information for + dynamic regions is then visible via sysfs at + /sys/class/uio/uioX/maps/mapY/*. + The dynmaic memory regions will be freed when the UIO device file is + closed. When no processes are holding the device file open, the address + returned to userspace is ~0. + + + diff --git a/trunk/Documentation/IRQ-domain.txt b/trunk/Documentation/IRQ-domain.txt index 1401cece745a..9bc95942ec22 100644 --- a/trunk/Documentation/IRQ-domain.txt +++ b/trunk/Documentation/IRQ-domain.txt @@ -7,6 +7,21 @@ systems with multiple interrupt controllers the kernel must ensure that each one gets assigned non-overlapping allocations of Linux IRQ numbers. +The number of interrupt controllers registered as unique irqchips +show a rising tendency: for example subdrivers of different kinds +such as GPIO controllers avoid reimplementing identical callback +mechanisms as the IRQ core system by modelling their interrupt +handlers as irqchips, i.e. in effect cascading interrupt controllers. + +Here the interrupt number loose all kind of correspondence to +hardware interrupt numbers: whereas in the past, IRQ numbers could +be chosen so they matched the hardware IRQ line into the root +interrupt controller (i.e. the component actually fireing the +interrupt line to the CPU) nowadays this number is just a number. + +For this reason we need a mechanism to separate controller-local +interrupt numbers, called hardware irq's, from Linux IRQ numbers. + The irq_alloc_desc*() and irq_free_desc*() APIs provide allocation of irq numbers, but they don't provide any support for reverse mapping of the controller-local IRQ (hwirq) number into the Linux IRQ number @@ -40,6 +55,10 @@ required hardware setup. When an interrupt is received, irq_find_mapping() function should be used to find the Linux IRQ number from the hwirq number. +The irq_create_mapping() function must be called *atleast once* +before any call to irq_find_mapping(), lest the descriptor will not +be allocated. + If the driver has the Linux IRQ number or the irq_data pointer, and needs to know the associated hwirq number (such as in the irq_chip callbacks) then it can be directly obtained from irq_data->hwirq. @@ -119,4 +138,17 @@ numbers. Most users of legacy mappings should use irq_domain_add_simple() which will use a legacy domain only if an IRQ range is supplied by the -system and will otherwise use a linear domain mapping. +system and will otherwise use a linear domain mapping. The semantics +of this call are such that if an IRQ range is specified then +descriptors will be allocated on-the-fly for it, and if no range is +specified it will fall through to irq_domain_add_linear() which meand +*no* irq descriptors will be allocated. + +A typical use case for simple domains is where an irqchip provider +is supporting both dynamic and static IRQ assignments. + +In order to avoid ending up in a situation where a linear domain is +used and no descriptor gets allocated it is very important to make sure +that the driver using the simple domain call irq_create_mapping() +before any irq_find_mapping() since the latter will actually work +for the static IRQ assignment case. diff --git a/trunk/Documentation/RCU/RTFP.txt b/trunk/Documentation/RCU/RTFP.txt index 7c1dfb19fc40..7f40c72a9c51 100644 --- a/trunk/Documentation/RCU/RTFP.txt +++ b/trunk/Documentation/RCU/RTFP.txt @@ -186,7 +186,7 @@ Bibtex Entries @article{Kung80 ,author="H. T. Kung and Q. Lehman" -,title="Concurrent Maintenance of Binary Search Trees" +,title="Concurrent Manipulation of Binary Search Trees" ,Year="1980" ,Month="September" ,journal="ACM Transactions on Database Systems" diff --git a/trunk/Documentation/RCU/checklist.txt b/trunk/Documentation/RCU/checklist.txt index cdb20d41a44a..31ef8fe07f82 100644 --- a/trunk/Documentation/RCU/checklist.txt +++ b/trunk/Documentation/RCU/checklist.txt @@ -271,15 +271,14 @@ over a rather long period of time, but improvements are always welcome! The same cautions apply to call_rcu_bh() and call_rcu_sched(). 9. All RCU list-traversal primitives, which include - rcu_dereference(), list_for_each_entry_rcu(), - list_for_each_continue_rcu(), and list_for_each_safe_rcu(), - must be either within an RCU read-side critical section or - must be protected by appropriate update-side locks. RCU - read-side critical sections are delimited by rcu_read_lock() - and rcu_read_unlock(), or by similar primitives such as - rcu_read_lock_bh() and rcu_read_unlock_bh(), in which case - the matching rcu_dereference() primitive must be used in order - to keep lockdep happy, in this case, rcu_dereference_bh(). + rcu_dereference(), list_for_each_entry_rcu(), and + list_for_each_safe_rcu(), must be either within an RCU read-side + critical section or must be protected by appropriate update-side + locks. RCU read-side critical sections are delimited by + rcu_read_lock() and rcu_read_unlock(), or by similar primitives + such as rcu_read_lock_bh() and rcu_read_unlock_bh(), in which + case the matching rcu_dereference() primitive must be used in + order to keep lockdep happy, in this case, rcu_dereference_bh(). The reason that it is permissible to use RCU list-traversal primitives when the update-side lock is held is that doing so diff --git a/trunk/Documentation/RCU/listRCU.txt b/trunk/Documentation/RCU/listRCU.txt index 4349c1487e91..adb5a3782846 100644 --- a/trunk/Documentation/RCU/listRCU.txt +++ b/trunk/Documentation/RCU/listRCU.txt @@ -205,7 +205,7 @@ RCU ("read-copy update") its name. The RCU code is as follows: audit_copy_rule(&ne->rule, &e->rule); ne->rule.action = newaction; ne->rule.file_count = newfield_count; - list_replace_rcu(e, ne); + list_replace_rcu(&e->list, &ne->list); call_rcu(&e->rcu, audit_free_rule); return 0; } diff --git a/trunk/Documentation/RCU/rcuref.txt b/trunk/Documentation/RCU/rcuref.txt index 4202ad093130..141d531aa14b 100644 --- a/trunk/Documentation/RCU/rcuref.txt +++ b/trunk/Documentation/RCU/rcuref.txt @@ -20,7 +20,7 @@ release_referenced() delete() { { ... write_lock(&list_lock); atomic_dec(&el->rc, relfunc) ... - ... delete_element + ... remove_element } write_unlock(&list_lock); ... if (atomic_dec_and_test(&el->rc)) @@ -52,7 +52,7 @@ release_referenced() delete() { { ... spin_lock(&list_lock); if (atomic_dec_and_test(&el->rc)) ... - call_rcu(&el->head, el_free); delete_element + call_rcu(&el->head, el_free); remove_element ... spin_unlock(&list_lock); } ... if (atomic_dec_and_test(&el->rc)) @@ -64,3 +64,60 @@ Sometimes, a reference to the element needs to be obtained in the update (write) stream. In such cases, atomic_inc_not_zero() might be overkill, since we hold the update-side spinlock. One might instead use atomic_inc() in such cases. + +It is not always convenient to deal with "FAIL" in the +search_and_reference() code path. In such cases, the +atomic_dec_and_test() may be moved from delete() to el_free() +as follows: + +1. 2. +add() search_and_reference() +{ { + alloc_object rcu_read_lock(); + ... search_for_element + atomic_set(&el->rc, 1); atomic_inc(&el->rc); + spin_lock(&list_lock); ... + + add_element rcu_read_unlock(); + ... } + spin_unlock(&list_lock); 4. +} delete() +3. { +release_referenced() spin_lock(&list_lock); +{ ... + ... remove_element + if (atomic_dec_and_test(&el->rc)) spin_unlock(&list_lock); + kfree(el); ... + ... call_rcu(&el->head, el_free); +} ... +5. } +void el_free(struct rcu_head *rhp) +{ + release_referenced(); +} + +The key point is that the initial reference added by add() is not removed +until after a grace period has elapsed following removal. This means that +search_and_reference() cannot find this element, which means that the value +of el->rc cannot increase. Thus, once it reaches zero, there are no +readers that can or ever will be able to reference the element. The +element can therefore safely be freed. This in turn guarantees that if +any reader finds the element, that reader may safely acquire a reference +without checking the value of the reference counter. + +In cases where delete() can sleep, synchronize_rcu() can be called from +delete(), so that el_free() can be subsumed into delete as follows: + +4. +delete() +{ + spin_lock(&list_lock); + ... + remove_element + spin_unlock(&list_lock); + ... + synchronize_rcu(); + if (atomic_dec_and_test(&el->rc)) + kfree(el); + ... +} diff --git a/trunk/Documentation/RCU/trace.txt b/trunk/Documentation/RCU/trace.txt index 672d19083252..c776968f4463 100644 --- a/trunk/Documentation/RCU/trace.txt +++ b/trunk/Documentation/RCU/trace.txt @@ -10,51 +10,63 @@ for rcutree and next for rcutiny. CONFIG_TREE_RCU and CONFIG_TREE_PREEMPT_RCU debugfs Files and Formats -These implementations of RCU provides several debugfs files under the +These implementations of RCU provide several debugfs directories under the top-level directory "rcu": -rcu/rcudata: +rcu/rcu_bh +rcu/rcu_preempt +rcu/rcu_sched + +Each directory contains files for the corresponding flavor of RCU. +Note that rcu/rcu_preempt is only present for CONFIG_TREE_PREEMPT_RCU. +For CONFIG_TREE_RCU, the RCU flavor maps onto the RCU-sched flavor, +so that activity for both appears in rcu/rcu_sched. + +In addition, the following file appears in the top-level directory: +rcu/rcutorture. This file displays rcutorture test progress. The output +of "cat rcu/rcutorture" looks as follows: + +rcutorture test sequence: 0 (test in progress) +rcutorture update version number: 615 + +The first line shows the number of rcutorture tests that have completed +since boot. If a test is currently running, the "(test in progress)" +string will appear as shown above. The second line shows the number of +update cycles that the current test has started, or zero if there is +no test in progress. + + +Within each flavor directory (rcu/rcu_bh, rcu/rcu_sched, and possibly +also rcu/rcu_preempt) the following files will be present: + +rcudata: Displays fields in struct rcu_data. -rcu/rcudata.csv: - Comma-separated values spreadsheet version of rcudata. -rcu/rcugp: +rcuexp: + Displays statistics for expedited grace periods. +rcugp: Displays grace-period counters. -rcu/rcuhier: +rcuhier: Displays the struct rcu_node hierarchy. -rcu/rcu_pending: +rcu_pending: Displays counts of the reasons rcu_pending() decided that RCU had work to do. -rcu/rcutorture: - Displays rcutorture test progress. -rcu/rcuboost: +rcuboost: Displays RCU boosting statistics. Only present if CONFIG_RCU_BOOST=y. -The output of "cat rcu/rcudata" looks as follows: - -rcu_sched: - 0 c=20972 g=20973 pq=1 pgp=20973 qp=0 dt=545/1/0 df=50 of=0 ql=163 qs=NRW. kt=0/W/0 ktl=ebc3 b=10 ci=153737 co=0 ca=0 - 1 c=20972 g=20973 pq=1 pgp=20973 qp=0 dt=967/1/0 df=58 of=0 ql=634 qs=NRW. kt=0/W/1 ktl=58c b=10 ci=191037 co=0 ca=0 - 2 c=20972 g=20973 pq=1 pgp=20973 qp=0 dt=1081/1/0 df=175 of=0 ql=74 qs=N.W. kt=0/W/2 ktl=da94 b=10 ci=75991 co=0 ca=0 - 3 c=20942 g=20943 pq=1 pgp=20942 qp=1 dt=1846/0/0 df=404 of=0 ql=0 qs=.... kt=0/W/3 ktl=d1cd b=10 ci=72261 co=0 ca=0 - 4 c=20972 g=20973 pq=1 pgp=20973 qp=0 dt=369/1/0 df=83 of=0 ql=48 qs=N.W. kt=0/W/4 ktl=e0e7 b=10 ci=128365 co=0 ca=0 - 5 c=20972 g=20973 pq=1 pgp=20973 qp=0 dt=381/1/0 df=64 of=0 ql=169 qs=NRW. kt=0/W/5 ktl=fb2f b=10 ci=164360 co=0 ca=0 - 6 c=20972 g=20973 pq=1 pgp=20973 qp=0 dt=1037/1/0 df=183 of=0 ql=62 qs=N.W. kt=0/W/6 ktl=d2ad b=10 ci=65663 co=0 ca=0 - 7 c=20897 g=20897 pq=1 pgp=20896 qp=0 dt=1572/0/0 df=382 of=0 ql=0 qs=.... kt=0/W/7 ktl=cf15 b=10 ci=75006 co=0 ca=0 -rcu_bh: - 0 c=1480 g=1480 pq=1 pgp=1480 qp=0 dt=545/1/0 df=6 of=0 ql=0 qs=.... kt=0/W/0 ktl=ebc3 b=10 ci=0 co=0 ca=0 - 1 c=1480 g=1480 pq=1 pgp=1480 qp=0 dt=967/1/0 df=3 of=0 ql=0 qs=.... kt=0/W/1 ktl=58c b=10 ci=151 co=0 ca=0 - 2 c=1480 g=1480 pq=1 pgp=1480 qp=0 dt=1081/1/0 df=6 of=0 ql=0 qs=.... kt=0/W/2 ktl=da94 b=10 ci=0 co=0 ca=0 - 3 c=1480 g=1480 pq=1 pgp=1480 qp=0 dt=1846/0/0 df=8 of=0 ql=0 qs=.... kt=0/W/3 ktl=d1cd b=10 ci=0 co=0 ca=0 - 4 c=1480 g=1480 pq=1 pgp=1480 qp=0 dt=369/1/0 df=6 of=0 ql=0 qs=.... kt=0/W/4 ktl=e0e7 b=10 ci=0 co=0 ca=0 - 5 c=1480 g=1480 pq=1 pgp=1480 qp=0 dt=381/1/0 df=4 of=0 ql=0 qs=.... kt=0/W/5 ktl=fb2f b=10 ci=0 co=0 ca=0 - 6 c=1480 g=1480 pq=1 pgp=1480 qp=0 dt=1037/1/0 df=6 of=0 ql=0 qs=.... kt=0/W/6 ktl=d2ad b=10 ci=0 co=0 ca=0 - 7 c=1474 g=1474 pq=1 pgp=1473 qp=0 dt=1572/0/0 df=8 of=0 ql=0 qs=.... kt=0/W/7 ktl=cf15 b=10 ci=0 co=0 ca=0 - -The first section lists the rcu_data structures for rcu_sched, the second -for rcu_bh. Note that CONFIG_TREE_PREEMPT_RCU kernels will have an -additional section for rcu_preempt. Each section has one line per CPU, -or eight for this 8-CPU system. The fields are as follows: +The output of "cat rcu/rcu_preempt/rcudata" looks as follows: + + 0!c=30455 g=30456 pq=1 qp=1 dt=126535/140000000000000/0 df=2002 of=4 ql=0/0 qs=N... b=10 ci=74572 nci=0 co=1131 ca=716 + 1!c=30719 g=30720 pq=1 qp=0 dt=132007/140000000000000/0 df=1874 of=10 ql=0/0 qs=N... b=10 ci=123209 nci=0 co=685 ca=982 + 2!c=30150 g=30151 pq=1 qp=1 dt=138537/140000000000000/0 df=1707 of=8 ql=0/0 qs=N... b=10 ci=80132 nci=0 co=1328 ca=1458 + 3 c=31249 g=31250 pq=1 qp=0 dt=107255/140000000000000/0 df=1749 of=6 ql=0/450 qs=NRW. b=10 ci=151700 nci=0 co=509 ca=622 + 4!c=29502 g=29503 pq=1 qp=1 dt=83647/140000000000000/0 df=965 of=5 ql=0/0 qs=N... b=10 ci=65643 nci=0 co=1373 ca=1521 + 5 c=31201 g=31202 pq=1 qp=1 dt=70422/0/0 df=535 of=7 ql=0/0 qs=.... b=10 ci=58500 nci=0 co=764 ca=698 + 6!c=30253 g=30254 pq=1 qp=1 dt=95363/140000000000000/0 df=780 of=5 ql=0/0 qs=N... b=10 ci=100607 nci=0 co=1414 ca=1353 + 7 c=31178 g=31178 pq=1 qp=0 dt=91536/0/0 df=547 of=4 ql=0/0 qs=.... b=10 ci=109819 nci=0 co=1115 ca=969 + +This file has one line per CPU, or eight for this 8-CPU system. +The fields are as follows: o The number at the beginning of each line is the CPU number. CPUs numbers followed by an exclamation mark are offline, @@ -64,11 +76,13 @@ o The number at the beginning of each line is the CPU number. substantially larger than the number of actual CPUs. o "c" is the count of grace periods that this CPU believes have - completed. Offlined CPUs and CPUs in dynticks idle mode may - lag quite a ways behind, for example, CPU 6 under "rcu_sched" - above, which has been offline through not quite 40,000 RCU grace - periods. It is not unusual to see CPUs lagging by thousands of - grace periods. + completed. Offlined CPUs and CPUs in dynticks idle mode may lag + quite a ways behind, for example, CPU 4 under "rcu_sched" above, + which has been offline through 16 RCU grace periods. It is not + unusual to see offline CPUs lagging by thousands of grace periods. + Note that although the grace-period number is an unsigned long, + it is printed out as a signed long to allow more human-friendly + representation near boot time. o "g" is the count of grace periods that this CPU believes have started. Again, offlined CPUs and CPUs in dynticks idle mode @@ -84,30 +98,25 @@ o "pq" indicates that this CPU has passed through a quiescent state CPU has not yet reported that fact, (2) some other CPU has not yet reported for this grace period, or (3) both. -o "pgp" indicates which grace period the last-observed quiescent - state for this CPU corresponds to. This is important for handling - the race between CPU 0 reporting an extended dynticks-idle - quiescent state for CPU 1 and CPU 1 suddenly waking up and - reporting its own quiescent state. If CPU 1 was the last CPU - for the current grace period, then the CPU that loses this race - will attempt to incorrectly mark CPU 1 as having checked in for - the next grace period! - o "qp" indicates that RCU still expects a quiescent state from this CPU. Offlined CPUs and CPUs in dyntick idle mode might well have qp=1, which is OK: RCU is still ignoring them. o "dt" is the current value of the dyntick counter that is incremented - when entering or leaving dynticks idle state, either by the - scheduler or by irq. This number is even if the CPU is in - dyntick idle mode and odd otherwise. The number after the first - "/" is the interrupt nesting depth when in dyntick-idle state, - or one greater than the interrupt-nesting depth otherwise. - The number after the second "/" is the NMI nesting depth. + when entering or leaving idle, either due to a context switch or + due to an interrupt. This number is even if the CPU is in idle + from RCU's viewpoint and odd otherwise. The number after the + first "/" is the interrupt nesting depth when in idle state, + or a large number added to the interrupt-nesting depth when + running a non-idle task. Some architectures do not accurately + count interrupt nesting when running in non-idle kernel context, + which can result in interesting anomalies such as negative + interrupt-nesting levels. The number after the second "/" + is the NMI nesting depth. o "df" is the number of times that some other CPU has forced a quiescent state on behalf of this CPU due to this CPU being in - dynticks-idle state. + idle state. o "of" is the number of times that some other CPU has forced a quiescent state on behalf of this CPU due to this CPU being @@ -120,9 +129,13 @@ o "of" is the number of times that some other CPU has forced a error, so it makes sense to err conservatively. o "ql" is the number of RCU callbacks currently residing on - this CPU. This is the total number of callbacks, regardless - of what state they are in (new, waiting for grace period to - start, waiting for grace period to end, ready to invoke). + this CPU. The first number is the number of "lazy" callbacks + that are known to RCU to only be freeing memory, and the number + after the "/" is the total number of callbacks, lazy or not. + These counters count callbacks regardless of what phase of + grace-period processing that they are in (new, waiting for + grace period to start, waiting for grace period to end, ready + to invoke). o "qs" gives an indication of the state of the callback queue with four characters: @@ -150,6 +163,43 @@ o "qs" gives an indication of the state of the callback queue If there are no callbacks in a given one of the above states, the corresponding character is replaced by ".". +o "b" is the batch limit for this CPU. If more than this number + of RCU callbacks is ready to invoke, then the remainder will + be deferred. + +o "ci" is the number of RCU callbacks that have been invoked for + this CPU. Note that ci+nci+ql is the number of callbacks that have + been registered in absence of CPU-hotplug activity. + +o "nci" is the number of RCU callbacks that have been offloaded from + this CPU. This will always be zero unless the kernel was built + with CONFIG_RCU_NOCB_CPU=y and the "rcu_nocbs=" kernel boot + parameter was specified. + +o "co" is the number of RCU callbacks that have been orphaned due to + this CPU going offline. These orphaned callbacks have been moved + to an arbitrarily chosen online CPU. + +o "ca" is the number of RCU callbacks that have been adopted by this + CPU due to other CPUs going offline. Note that ci+co-ca+ql is + the number of RCU callbacks registered on this CPU. + + +Kernels compiled with CONFIG_RCU_BOOST=y display the following from +/debug/rcu/rcu_preempt/rcudata: + + 0!c=12865 g=12866 pq=1 qp=1 dt=83113/140000000000000/0 df=288 of=11 ql=0/0 qs=N... kt=0/O ktl=944 b=10 ci=60709 nci=0 co=748 ca=871 + 1 c=14407 g=14408 pq=1 qp=0 dt=100679/140000000000000/0 df=378 of=7 ql=0/119 qs=NRW. kt=0/W ktl=9b6 b=10 ci=109740 nci=0 co=589 ca=485 + 2 c=14407 g=14408 pq=1 qp=0 dt=105486/0/0 df=90 of=9 ql=0/89 qs=NRW. kt=0/W ktl=c0c b=10 ci=83113 nci=0 co=533 ca=490 + 3 c=14407 g=14408 pq=1 qp=0 dt=107138/0/0 df=142 of=8 ql=0/188 qs=NRW. kt=0/W ktl=b96 b=10 ci=121114 nci=0 co=426 ca=290 + 4 c=14405 g=14406 pq=1 qp=1 dt=50238/0/0 df=706 of=7 ql=0/0 qs=.... kt=0/W ktl=812 b=10 ci=34929 nci=0 co=643 ca=114 + 5!c=14168 g=14169 pq=1 qp=0 dt=45465/140000000000000/0 df=161 of=11 ql=0/0 qs=N... kt=0/O ktl=b4d b=10 ci=47712 nci=0 co=677 ca=722 + 6 c=14404 g=14405 pq=1 qp=0 dt=59454/0/0 df=94 of=6 ql=0/0 qs=.... kt=0/W ktl=e57 b=10 ci=55597 nci=0 co=701 ca=811 + 7 c=14407 g=14408 pq=1 qp=1 dt=68850/0/0 df=31 of=8 ql=0/0 qs=.... kt=0/W ktl=14bd b=10 ci=77475 nci=0 co=508 ca=1042 + +This is similar to the output discussed above, but contains the following +additional fields: + o "kt" is the per-CPU kernel-thread state. The digit preceding the first slash is zero if there is no work pending and 1 otherwise. The character between the first pair of slashes is @@ -184,35 +234,51 @@ o "ktl" is the low-order 16 bits (in hexadecimal) of the count of This field is displayed only for CONFIG_RCU_BOOST kernels. -o "b" is the batch limit for this CPU. If more than this number - of RCU callbacks is ready to invoke, then the remainder will - be deferred. -o "ci" is the number of RCU callbacks that have been invoked for - this CPU. Note that ci+ql is the number of callbacks that have - been registered in absence of CPU-hotplug activity. +The output of "cat rcu/rcu_preempt/rcuexp" looks as follows: -o "co" is the number of RCU callbacks that have been orphaned due to - this CPU going offline. These orphaned callbacks have been moved - to an arbitrarily chosen online CPU. +s=21872 d=21872 w=0 tf=0 wd1=0 wd2=0 n=0 sc=21872 dt=21872 dl=0 dx=21872 + +These fields are as follows: + +o "s" is the starting sequence number. -o "ca" is the number of RCU callbacks that have been adopted due to - other CPUs going offline. Note that ci+co-ca+ql is the number of - RCU callbacks registered on this CPU. +o "d" is the ending sequence number. When the starting and ending + numbers differ, there is an expedited grace period in progress. -There is also an rcu/rcudata.csv file with the same information in -comma-separated-variable spreadsheet format. +o "w" is the number of times that the sequence numbers have been + in danger of wrapping. +o "tf" is the number of times that contention has resulted in a + failure to begin an expedited grace period. -The output of "cat rcu/rcugp" looks as follows: +o "wd1" and "wd2" are the number of times that an attempt to + start an expedited grace period found that someone else had + completed an expedited grace period that satisfies the + attempted request. "Our work is done." -rcu_sched: completed=33062 gpnum=33063 -rcu_bh: completed=464 gpnum=464 +o "n" is number of times that contention was so great that + the request was demoted from an expedited grace period to + a normal grace period. + +o "sc" is the number of times that the attempt to start a + new expedited grace period succeeded. + +o "dt" is the number of times that we attempted to update + the "d" counter. + +o "dl" is the number of times that we failed to update the "d" + counter. + +o "dx" is the number of times that we succeeded in updating + the "d" counter. -Again, this output is for both "rcu_sched" and "rcu_bh". Note that -kernels built with CONFIG_TREE_PREEMPT_RCU will have an additional -"rcu_preempt" line. The fields are taken from the rcu_state structure, -and are as follows: + +The output of "cat rcu/rcu_preempt/rcugp" looks as follows: + +completed=31249 gpnum=31250 age=1 max=18 + +These fields are taken from the rcu_state structure, and are as follows: o "completed" is the number of grace periods that have completed. It is comparable to the "c" field from rcu/rcudata in that a @@ -220,44 +286,42 @@ o "completed" is the number of grace periods that have completed. that the corresponding RCU grace period has completed. o "gpnum" is the number of grace periods that have started. It is - comparable to the "g" field from rcu/rcudata in that a CPU - whose "g" field matches the value of "gpnum" is aware that the - corresponding RCU grace period has started. + similarly comparable to the "g" field from rcu/rcudata in that + a CPU whose "g" field matches the value of "gpnum" is aware that + the corresponding RCU grace period has started. + + If these two fields are equal, then there is no grace period + in progress, in other words, RCU is idle. On the other hand, + if the two fields differ (as they are above), then an RCU grace + period is in progress. - If these two fields are equal (as they are for "rcu_bh" above), - then there is no grace period in progress, in other words, RCU - is idle. On the other hand, if the two fields differ (as they - do for "rcu_sched" above), then an RCU grace period is in progress. +o "age" is the number of jiffies that the current grace period + has extended for, or zero if there is no grace period currently + in effect. +o "max" is the age in jiffies of the longest-duration grace period + thus far. -The output of "cat rcu/rcuhier" looks as follows, with very long lines: +The output of "cat rcu/rcu_preempt/rcuhier" looks as follows: -c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6 -1/1 ..>. 0:127 ^0 -3/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3 -3/3f ..>. 0:5 ^0 2/3 ..>. 6:11 ^1 0/0 ..>. 12:17 ^2 0/0 ..>. 18:23 ^3 0/0 ..>. 24:29 ^4 0/0 ..>. 30:35 ^5 0/0 ..>. 36:41 ^0 0/0 ..>. 42:47 ^1 0/0 ..>. 48:53 ^2 0/0 ..>. 54:59 ^3 0/0 ..>. 60:65 ^4 0/0 ..>. 66:71 ^5 0/0 ..>. 72:77 ^0 0/0 ..>. 78:83 ^1 0/0 ..>. 84:89 ^2 0/0 ..>. 90:95 ^3 0/0 ..>. 96:101 ^4 0/0 ..>. 102:107 ^5 0/0 ..>. 108:113 ^0 0/0 ..>. 114:119 ^1 0/0 ..>. 120:125 ^2 0/0 ..>. 126:127 ^3 -rcu_bh: -c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0 -0/1 ..>. 0:127 ^0 -0/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3 -0/3f ..>. 0:5 ^0 0/3 ..>. 6:11 ^1 0/0 ..>. 12:17 ^2 0/0 ..>. 18:23 ^3 0/0 ..>. 24:29 ^4 0/0 ..>. 30:35 ^5 0/0 ..>. 36:41 ^0 0/0 ..>. 42:47 ^1 0/0 ..>. 48:53 ^2 0/0 ..>. 54:59 ^3 0/0 ..>. 60:65 ^4 0/0 ..>. 66:71 ^5 0/0 ..>. 72:77 ^0 0/0 ..>. 78:83 ^1 0/0 ..>. 84:89 ^2 0/0 ..>. 90:95 ^3 0/0 ..>. 96:101 ^4 0/0 ..>. 102:107 ^5 0/0 ..>. 108:113 ^0 0/0 ..>. 114:119 ^1 0/0 ..>. 120:125 ^2 0/0 ..>. 126:127 ^3 +c=14407 g=14408 s=0 jfq=2 j=c863 nfqs=12040/nfqsng=0(12040) fqlh=1051 oqlen=0/0 +3/3 ..>. 0:7 ^0 +e/e ..>. 0:3 ^0 d/d ..>. 4:7 ^1 -This is once again split into "rcu_sched" and "rcu_bh" portions, -and CONFIG_TREE_PREEMPT_RCU kernels will again have an additional -"rcu_preempt" section. The fields are as follows: +The fields are as follows: -o "c" is exactly the same as "completed" under rcu/rcugp. +o "c" is exactly the same as "completed" under rcu/rcu_preempt/rcugp. -o "g" is exactly the same as "gpnum" under rcu/rcugp. +o "g" is exactly the same as "gpnum" under rcu/rcu_preempt/rcugp. -o "s" is the "signaled" state that drives force_quiescent_state()'s +o "s" is the current state of the force_quiescent_state() state machine. o "jfq" is the number of jiffies remaining for this grace period before force_quiescent_state() is invoked to help push things - along. Note that CPUs in dyntick-idle mode throughout the grace - period will not report on their own, but rather must be check by - some other CPU via force_quiescent_state(). + along. Note that CPUs in idle mode throughout the grace period + will not report on their own, but rather must be check by some + other CPU via force_quiescent_state(). o "j" is the low-order four hex digits of the jiffies counter. Yes, Paul did run into a number of problems that turned out to @@ -268,7 +332,8 @@ o "nfqs" is the number of calls to force_quiescent_state() since o "nfqsng" is the number of useless calls to force_quiescent_state(), where there wasn't actually a grace period active. This can - happen due to races. The number in parentheses is the difference + no longer happen due to grace-period processing being pushed + into a kthread. The number in parentheses is the difference between "nfqs" and "nfqsng", or the number of times that force_quiescent_state() actually did some real work. @@ -276,28 +341,27 @@ o "fqlh" is the number of calls to force_quiescent_state() that exited immediately (without even being counted in nfqs above) due to contention on ->fqslock. -o Each element of the form "1/1 0:127 ^0" represents one struct - rcu_node. Each line represents one level of the hierarchy, from - root to leaves. It is best to think of the rcu_data structures - as forming yet another level after the leaves. Note that there - might be either one, two, or three levels of rcu_node structures, - depending on the relationship between CONFIG_RCU_FANOUT and - CONFIG_NR_CPUS. +o Each element of the form "3/3 ..>. 0:7 ^0" represents one rcu_node + structure. Each line represents one level of the hierarchy, + from root to leaves. It is best to think of the rcu_data + structures as forming yet another level after the leaves. + Note that there might be either one, two, three, or even four + levels of rcu_node structures, depending on the relationship + between CONFIG_RCU_FANOUT, CONFIG_RCU_FANOUT_LEAF (possibly + adjusted using the rcu_fanout_leaf kernel boot parameter), and + CONFIG_NR_CPUS (possibly adjusted using the nr_cpu_ids count of + possible CPUs for the booting hardware). o The numbers separated by the "/" are the qsmask followed by the qsmaskinit. The qsmask will have one bit - set for each entity in the next lower level that - has not yet checked in for the current grace period. + set for each entity in the next lower level that has + not yet checked in for the current grace period ("e" + indicating CPUs 5, 6, and 7 in the example above). The qsmaskinit will have one bit for each entity that is currently expected to check in during each grace period. The value of qsmaskinit is assigned to that of qsmask at the beginning of each grace period. - For example, for "rcu_sched", the qsmask of the first - entry of the lowest level is 0x14, meaning that we - are still waiting for CPUs 2 and 4 to check in for the - current grace period. - o The characters separated by the ">" indicate the state of the blocked-tasks lists. A "G" preceding the ">" indicates that at least one task blocked in an RCU @@ -312,48 +376,39 @@ o Each element of the form "1/1 0:127 ^0" represents one struct A "." character appears if the corresponding condition does not hold, so that "..>." indicates that no tasks are blocked. In contrast, "GE>T" indicates maximal - inconvenience from blocked tasks. + inconvenience from blocked tasks. CONFIG_TREE_RCU + builds of the kernel will always show "..>.". o The numbers separated by the ":" are the range of CPUs served by this struct rcu_node. This can be helpful in working out how the hierarchy is wired together. - For example, the first entry at the lowest level shows - "0:5", indicating that it covers CPUs 0 through 5. + For example, the example rcu_node structure shown above + has "0:7", indicating that it covers CPUs 0 through 7. o The number after the "^" indicates the bit in the - next higher level rcu_node structure that this - rcu_node structure corresponds to. - - For example, the first entry at the lowest level shows - "^0", indicating that it corresponds to bit zero in - the first entry at the middle level. - - -The output of "cat rcu/rcu_pending" looks as follows: - -rcu_sched: - 0 np=255892 qsp=53936 rpq=85 cbr=0 cng=14417 gpc=10033 gps=24320 nn=146741 - 1 np=261224 qsp=54638 rpq=33 cbr=0 cng=25723 gpc=16310 gps=2849 nn=155792 - 2 np=237496 qsp=49664 rpq=23 cbr=0 cng=2762 gpc=45478 gps=1762 nn=136629 - 3 np=236249 qsp=48766 rpq=98 cbr=0 cng=286 gpc=48049 gps=1218 nn=137723 - 4 np=221310 qsp=46850 rpq=7 cbr=0 cng=26 gpc=43161 gps=4634 nn=123110 - 5 np=237332 qsp=48449 rpq=9 cbr=0 cng=54 gpc=47920 gps=3252 nn=137456 - 6 np=219995 qsp=46718 rpq=12 cbr=0 cng=50 gpc=42098 gps=6093 nn=120834 - 7 np=249893 qsp=49390 rpq=42 cbr=0 cng=72 gpc=38400 gps=17102 nn=144888 -rcu_bh: - 0 np=146741 qsp=1419 rpq=6 cbr=0 cng=6 gpc=0 gps=0 nn=145314 - 1 np=155792 qsp=12597 rpq=3 cbr=0 cng=0 gpc=4 gps=8 nn=143180 - 2 np=136629 qsp=18680 rpq=1 cbr=0 cng=0 gpc=7 gps=6 nn=117936 - 3 np=137723 qsp=2843 rpq=0 cbr=0 cng=0 gpc=10 gps=7 nn=134863 - 4 np=123110 qsp=12433 rpq=0 cbr=0 cng=0 gpc=4 gps=2 nn=110671 - 5 np=137456 qsp=4210 rpq=1 cbr=0 cng=0 gpc=6 gps=5 nn=133235 - 6 np=120834 qsp=9902 rpq=2 cbr=0 cng=0 gpc=6 gps=3 nn=110921 - 7 np=144888 qsp=26336 rpq=0 cbr=0 cng=0 gpc=8 gps=2 nn=118542 - -As always, this is once again split into "rcu_sched" and "rcu_bh" -portions, with CONFIG_TREE_PREEMPT_RCU kernels having an additional -"rcu_preempt" section. The fields are as follows: + next higher level rcu_node structure that this rcu_node + structure corresponds to. For example, the "d/d ..>. 4:7 + ^1" has a "1" in this position, indicating that it + corresponds to the "1" bit in the "3" shown in the + "3/3 ..>. 0:7 ^0" entry on the next level up. + + +The output of "cat rcu/rcu_sched/rcu_pending" looks as follows: + + 0!np=26111 qsp=29 rpq=5386 cbr=1 cng=570 gpc=3674 gps=577 nn=15903 + 1!np=28913 qsp=35 rpq=6097 cbr=1 cng=448 gpc=3700 gps=554 nn=18113 + 2!np=32740 qsp=37 rpq=6202 cbr=0 cng=476 gpc=4627 gps=546 nn=20889 + 3 np=23679 qsp=22 rpq=5044 cbr=1 cng=415 gpc=3403 gps=347 nn=14469 + 4!np=30714 qsp=4 rpq=5574 cbr=0 cng=528 gpc=3931 gps=639 nn=20042 + 5 np=28910 qsp=2 rpq=5246 cbr=0 cng=428 gpc=4105 gps=709 nn=18422 + 6!np=38648 qsp=5 rpq=7076 cbr=0 cng=840 gpc=4072 gps=961 nn=25699 + 7 np=37275 qsp=2 rpq=6873 cbr=0 cng=868 gpc=3416 gps=971 nn=25147 + +The fields are as follows: + +o The leading number is the CPU number, with "!" indicating + an offline CPU. o "np" is the number of times that __rcu_pending() has been invoked for the corresponding flavor of RCU. @@ -377,38 +432,23 @@ o "gpc" is the number of times that an old grace period had o "gps" is the number of times that a new grace period had started, but this CPU was not yet aware of it. -o "nn" is the number of times that this CPU needed nothing. Alert - readers will note that the rcu "nn" number for a given CPU very - closely matches the rcu_bh "np" number for that same CPU. This - is due to short-circuit evaluation in rcu_pending(). - - -The output of "cat rcu/rcutorture" looks as follows: - -rcutorture test sequence: 0 (test in progress) -rcutorture update version number: 615 - -The first line shows the number of rcutorture tests that have completed -since boot. If a test is currently running, the "(test in progress)" -string will appear as shown above. The second line shows the number of -update cycles that the current test has started, or zero if there is -no test in progress. +o "nn" is the number of times that this CPU needed nothing. The output of "cat rcu/rcuboost" looks as follows: -0:5 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f - balk: nt=0 egt=989 bt=0 nb=0 ny=0 nos=16 -6:7 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f - balk: nt=0 egt=225 bt=0 nb=0 ny=0 nos=6 +0:3 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=c864 bt=c894 + balk: nt=0 egt=4695 bt=0 nb=0 ny=56 nos=0 +4:7 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=c864 bt=c894 + balk: nt=0 egt=6541 bt=0 nb=0 ny=126 nos=0 This information is output only for rcu_preempt. Each two-line entry corresponds to a leaf rcu_node strcuture. The fields are as follows: o "n:m" is the CPU-number range for the corresponding two-line entry. In the sample output above, the first entry covers - CPUs zero through five and the second entry covers CPUs 6 - and 7. + CPUs zero through three and the second entry covers CPUs four + through seven. o "tasks=TNEB" gives the state of the various segments of the rnp->blocked_tasks list: diff --git a/trunk/Documentation/RCU/whatisRCU.txt b/trunk/Documentation/RCU/whatisRCU.txt index bf0f6de2aa00..0cc7820967f4 100644 --- a/trunk/Documentation/RCU/whatisRCU.txt +++ b/trunk/Documentation/RCU/whatisRCU.txt @@ -499,6 +499,8 @@ The foo_reclaim() function might appear as follows: { struct foo *fp = container_of(rp, struct foo, rcu); + foo_cleanup(fp->a); + kfree(fp); } @@ -521,6 +523,12 @@ o Use call_rcu() -after- removing a data element from an read-side critical sections that might be referencing that data item. +If the callback for call_rcu() is not doing anything more than calling +kfree() on the structure, you can use kfree_rcu() instead of call_rcu() +to avoid having to write your own callback: + + kfree_rcu(old_fp, rcu); + Again, see checklist.txt for additional rules governing the use of RCU. @@ -773,8 +781,8 @@ a single atomic update, converting to RCU will require special care. Also, the presence of synchronize_rcu() means that the RCU version of delete() can now block. If this is a problem, there is a callback-based -mechanism that never blocks, namely call_rcu(), that can be used in -place of synchronize_rcu(). +mechanism that never blocks, namely call_rcu() or kfree_rcu(), that can +be used in place of synchronize_rcu(). 7. FULL LIST OF RCU APIs @@ -789,9 +797,7 @@ RCU list traversal: list_for_each_entry_rcu hlist_for_each_entry_rcu hlist_nulls_for_each_entry_rcu - - list_for_each_continue_rcu (to be deprecated in favor of new - list_for_each_entry_continue_rcu) + list_for_each_entry_continue_rcu RCU pointer/list update: @@ -813,6 +819,7 @@ RCU: Critical sections Grace period Barrier rcu_read_unlock synchronize_rcu rcu_dereference synchronize_rcu_expedited call_rcu + kfree_rcu bh: Critical sections Grace period Barrier diff --git a/trunk/Documentation/acpi/enumeration.txt b/trunk/Documentation/acpi/enumeration.txt new file mode 100644 index 000000000000..4f27785ca0c8 --- /dev/null +++ b/trunk/Documentation/acpi/enumeration.txt @@ -0,0 +1,227 @@ +ACPI based device enumeration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +ACPI 5 introduced a set of new resources (UartTSerialBus, I2cSerialBus, +SpiSerialBus, GpioIo and GpioInt) which can be used in enumerating slave +devices behind serial bus controllers. + +In addition we are starting to see peripherals integrated in the +SoC/Chipset to appear only in ACPI namespace. These are typically devices +that are accessed through memory-mapped registers. + +In order to support this and re-use the existing drivers as much as +possible we decided to do following: + + o Devices that have no bus connector resource are represented as + platform devices. + + o Devices behind real busses where there is a connector resource + are represented as struct spi_device or struct i2c_device + (standard UARTs are not busses so there is no struct uart_device). + +As both ACPI and Device Tree represent a tree of devices (and their +resources) this implementation follows the Device Tree way as much as +possible. + +The ACPI implementation enumerates devices behind busses (platform, SPI and +I2C), creates the physical devices and binds them to their ACPI handle in +the ACPI namespace. + +This means that when ACPI_HANDLE(dev) returns non-NULL the device was +enumerated from ACPI namespace. This handle can be used to extract other +device-specific configuration. There is an example of this below. + +Platform bus support +~~~~~~~~~~~~~~~~~~~~ +Since we are using platform devices to represent devices that are not +connected to any physical bus we only need to implement a platform driver +for the device and add supported ACPI IDs. If this same IP-block is used on +some other non-ACPI platform, the driver might work out of the box or needs +some minor changes. + +Adding ACPI support for an existing driver should be pretty +straightforward. Here is the simplest example: + + #ifdef CONFIG_ACPI + static struct acpi_device_id mydrv_acpi_match[] = { + /* ACPI IDs here */ + { } + }; + MODULE_DEVICE_TABLE(acpi, mydrv_acpi_match); + #endif + + static struct platform_driver my_driver = { + ... + .driver = { + .acpi_match_table = ACPI_PTR(mydrv_acpi_match), + }, + }; + +If the driver needs to perform more complex initialization like getting and +configuring GPIOs it can get its ACPI handle and extract this information +from ACPI tables. + +Currently the kernel is not able to automatically determine from which ACPI +device it should make the corresponding platform device so we need to add +the ACPI device explicitly to acpi_platform_device_ids list defined in +drivers/acpi/scan.c. This limitation is only for the platform devices, SPI +and I2C devices are created automatically as described below. + +SPI serial bus support +~~~~~~~~~~~~~~~~~~~~~~ +Slave devices behind SPI bus have SpiSerialBus resource attached to them. +This is extracted automatically by the SPI core and the slave devices are +enumerated once spi_register_master() is called by the bus driver. + +Here is what the ACPI namespace for a SPI slave might look like: + + Device (EEP0) + { + Name (_ADR, 1) + Name (_CID, Package() { + "ATML0025", + "AT25", + }) + ... + Method (_CRS, 0, NotSerialized) + { + SPISerialBus(1, PolarityLow, FourWireMode, 8, + ControllerInitiated, 1000000, ClockPolarityLow, + ClockPhaseFirst, "\\_SB.PCI0.SPI1",) + } + ... + +The SPI device drivers only need to add ACPI IDs in a similar way than with +the platform device drivers. Below is an example where we add ACPI support +to at25 SPI eeprom driver (this is meant for the above ACPI snippet): + + #ifdef CONFIG_ACPI + static struct acpi_device_id at25_acpi_match[] = { + { "AT25", 0 }, + { }, + }; + MODULE_DEVICE_TABLE(acpi, at25_acpi_match); + #endif + + static struct spi_driver at25_driver = { + .driver = { + ... + .acpi_match_table = ACPI_PTR(at25_acpi_match), + }, + }; + +Note that this driver actually needs more information like page size of the +eeprom etc. but at the time writing this there is no standard way of +passing those. One idea is to return this in _DSM method like: + + Device (EEP0) + { + ... + Method (_DSM, 4, NotSerialized) + { + Store (Package (6) + { + "byte-len", 1024, + "addr-mode", 2, + "page-size, 32 + }, Local0) + + // Check UUIDs etc. + + Return (Local0) + } + +Then the at25 SPI driver can get this configation by calling _DSM on its +ACPI handle like: + + struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; + struct acpi_object_list input; + acpi_status status; + + /* Fill in the input buffer */ + + status = acpi_evaluate_object(ACPI_HANDLE(&spi->dev), "_DSM", + &input, &output); + if (ACPI_FAILURE(status)) + /* Handle the error */ + + /* Extract the data here */ + + kfree(output.pointer); + +I2C serial bus support +~~~~~~~~~~~~~~~~~~~~~~ +The slaves behind I2C bus controller only need to add the ACPI IDs like +with the platform and SPI drivers. However the I2C bus controller driver +needs to call acpi_i2c_register_devices() after it has added the adapter. + +An I2C bus (controller) driver does: + + ... + ret = i2c_add_numbered_adapter(adapter); + if (ret) + /* handle error */ + + of_i2c_register_devices(adapter); + /* Enumerate the slave devices behind this bus via ACPI */ + acpi_i2c_register_devices(adapter); + +Below is an example of how to add ACPI support to the existing mpu3050 +input driver: + + #ifdef CONFIG_ACPI + static struct acpi_device_id mpu3050_acpi_match[] = { + { "MPU3050", 0 }, + { }, + }; + MODULE_DEVICE_TABLE(acpi, mpu3050_acpi_match); + #endif + + static struct i2c_driver mpu3050_i2c_driver = { + .driver = { + .name = "mpu3050", + .owner = THIS_MODULE, + .pm = &mpu3050_pm, + .of_match_table = mpu3050_of_match, + .acpi_match_table ACPI_PTR(mpu3050_acpi_match), + }, + .probe = mpu3050_probe, + .remove = __devexit_p(mpu3050_remove), + .id_table = mpu3050_ids, + }; + +GPIO support +~~~~~~~~~~~~ +ACPI 5 introduced two new resources to describe GPIO connections: GpioIo +and GpioInt. These resources are used be used to pass GPIO numbers used by +the device to the driver. For example: + + Method (_CRS, 0, NotSerialized) + { + Name (SBUF, ResourceTemplate() + { + GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, + IoRestrictionOutputOnly, "\\_SB.PCI0.GPI0", + 0x00, ResourceConsumer,,) + { + // Pin List + 0x0055 + } + ... + + Return (SBUF) + } + } + +These GPIO numbers are controller relative and path "\\_SB.PCI0.GPI0" +specifies the path to the controller. In order to use these GPIOs in Linux +we need to translate them to the Linux GPIO numbers. + +The driver can do this by including and then calling +acpi_get_gpio(path, gpio). This will return the Linux GPIO number or +negative errno if there was no translation found. + +Other GpioIo parameters must be converted first by the driver to be +suitable to the gpiolib before passing them. + +In case of GpioInt resource an additional call to gpio_to_irq() must be +done before calling request_irq(). diff --git a/trunk/Documentation/arm64/memory.txt b/trunk/Documentation/arm64/memory.txt index 4110cca96bd6..d758702fc03c 100644 --- a/trunk/Documentation/arm64/memory.txt +++ b/trunk/Documentation/arm64/memory.txt @@ -41,7 +41,7 @@ ffffffbbffff0000 ffffffbcffffffff ~2MB [guard] ffffffbffc000000 ffffffbfffffffff 64MB modules -ffffffc000000000 ffffffffffffffff 256GB memory +ffffffc000000000 ffffffffffffffff 256GB kernel logical memory map Translation table lookup with 4KB pages: diff --git a/trunk/Documentation/cgroups/00-INDEX b/trunk/Documentation/cgroups/00-INDEX index 3f58fa3d6d00..f78b90a35ad0 100644 --- a/trunk/Documentation/cgroups/00-INDEX +++ b/trunk/Documentation/cgroups/00-INDEX @@ -1,7 +1,11 @@ 00-INDEX - this file +blkio-controller.txt + - Description for Block IO Controller, implementation and usage details. cgroups.txt - Control Groups definition, implementation details, examples and API. +cgroup_event_listener.c + - A user program for cgroup listener. cpuacct.txt - CPU Accounting Controller; account CPU usage for groups of tasks. cpusets.txt @@ -10,9 +14,13 @@ devices.txt - Device Whitelist Controller; description, interface and security. freezer-subsystem.txt - checkpointing; rationale to not use signals, interface. +hugetlb.txt + - HugeTLB Controller implementation and usage details. memcg_test.txt - Memory Resource Controller; implementation details. memory.txt - Memory Resource Controller; design, accounting, interface, testing. +net_prio.txt + - Network priority cgroups details and usages. resource_counter.txt - Resource Counter API. diff --git a/trunk/Documentation/cgroups/cgroups.txt b/trunk/Documentation/cgroups/cgroups.txt index 9e04196c4d78..bcf1a00b06a1 100644 --- a/trunk/Documentation/cgroups/cgroups.txt +++ b/trunk/Documentation/cgroups/cgroups.txt @@ -299,11 +299,9 @@ a cgroup hierarchy's release_agent path is empty. 1.5 What does clone_children do ? --------------------------------- -If the clone_children flag is enabled (1) in a cgroup, then all -cgroups created beneath will call the post_clone callbacks for each -subsystem of the newly created cgroup. Usually when this callback is -implemented for a subsystem, it copies the values of the parent -subsystem, this is the case for the cpuset. +This flag only affects the cpuset controller. If the clone_children +flag is enabled (1) in a cgroup, a new cpuset cgroup will copy its +configuration from the parent during initialization. 1.6 How do I use cgroups ? -------------------------- @@ -553,16 +551,16 @@ call to cgroup_unload_subsys(). It should also set its_subsys.module = THIS_MODULE in its .c file. Each subsystem may export the following methods. The only mandatory -methods are create/destroy. Any others that are null are presumed to +methods are css_alloc/free. Any others that are null are presumed to be successful no-ops. -struct cgroup_subsys_state *create(struct cgroup *cgrp) +struct cgroup_subsys_state *css_alloc(struct cgroup *cgrp) (cgroup_mutex held by caller) -Called to create a subsystem state object for a cgroup. The +Called to allocate a subsystem state object for a cgroup. The subsystem should allocate its subsystem state object for the passed cgroup, returning a pointer to the new object on success or a -negative error code. On success, the subsystem pointer should point to +ERR_PTR() value. On success, the subsystem pointer should point to a structure of type cgroup_subsys_state (typically embedded in a larger subsystem-specific object), which will be initialized by the cgroup system. Note that this will be called at initialization to @@ -571,24 +569,33 @@ identified by the passed cgroup object having a NULL parent (since it's the root of the hierarchy) and may be an appropriate place for initialization code. -void destroy(struct cgroup *cgrp) +int css_online(struct cgroup *cgrp) (cgroup_mutex held by caller) -The cgroup system is about to destroy the passed cgroup; the subsystem -should do any necessary cleanup and free its subsystem state -object. By the time this method is called, the cgroup has already been -unlinked from the file system and from the child list of its parent; -cgroup->parent is still valid. (Note - can also be called for a -newly-created cgroup if an error occurs after this subsystem's -create() method has been called for the new cgroup). +Called after @cgrp successfully completed all allocations and made +visible to cgroup_for_each_child/descendant_*() iterators. The +subsystem may choose to fail creation by returning -errno. This +callback can be used to implement reliable state sharing and +propagation along the hierarchy. See the comment on +cgroup_for_each_descendant_pre() for details. -int pre_destroy(struct cgroup *cgrp); +void css_offline(struct cgroup *cgrp); -Called before checking the reference count on each subsystem. This may -be useful for subsystems which have some extra references even if -there are not tasks in the cgroup. If pre_destroy() returns error code, -rmdir() will fail with it. From this behavior, pre_destroy() can be -called multiple times against a cgroup. +This is the counterpart of css_online() and called iff css_online() +has succeeded on @cgrp. This signifies the beginning of the end of +@cgrp. @cgrp is being removed and the subsystem should start dropping +all references it's holding on @cgrp. When all references are dropped, +cgroup removal will proceed to the next step - css_free(). After this +callback, @cgrp should be considered dead to the subsystem. + +void css_free(struct cgroup *cgrp) +(cgroup_mutex held by caller) + +The cgroup system is about to free @cgrp; the subsystem should free +its subsystem state object. By the time this method is called, @cgrp +is completely unused; @cgrp->parent is still valid. (Note - can also +be called for a newly-created cgroup if an error occurs after this +subsystem's create() method has been called for the new cgroup). int can_attach(struct cgroup *cgrp, struct cgroup_taskset *tset) (cgroup_mutex held by caller) @@ -635,14 +642,6 @@ void exit(struct task_struct *task) Called during task exit. -void post_clone(struct cgroup *cgrp) -(cgroup_mutex held by caller) - -Called during cgroup_create() to do any parameter -initialization which might be required before a task could attach. For -example, in cpusets, no task may attach before 'cpus' and 'mems' are set -up. - void bind(struct cgroup *root) (cgroup_mutex held by caller) diff --git a/trunk/Documentation/cgroups/freezer-subsystem.txt b/trunk/Documentation/cgroups/freezer-subsystem.txt index 7e62de1e59ff..c96a72cbb30a 100644 --- a/trunk/Documentation/cgroups/freezer-subsystem.txt +++ b/trunk/Documentation/cgroups/freezer-subsystem.txt @@ -49,13 +49,49 @@ prevent the freeze/unfreeze cycle from becoming visible to the tasks being frozen. This allows the bash example above and gdb to run as expected. -The freezer subsystem in the container filesystem defines a file named -freezer.state. Writing "FROZEN" to the state file will freeze all tasks in the -cgroup. Subsequently writing "THAWED" will unfreeze the tasks in the cgroup. -Reading will return the current state. +The cgroup freezer is hierarchical. Freezing a cgroup freezes all +tasks beloning to the cgroup and all its descendant cgroups. Each +cgroup has its own state (self-state) and the state inherited from the +parent (parent-state). Iff both states are THAWED, the cgroup is +THAWED. -Note freezer.state doesn't exist in root cgroup, which means root cgroup -is non-freezable. +The following cgroupfs files are created by cgroup freezer. + +* freezer.state: Read-write. + + When read, returns the effective state of the cgroup - "THAWED", + "FREEZING" or "FROZEN". This is the combined self and parent-states. + If any is freezing, the cgroup is freezing (FREEZING or FROZEN). + + FREEZING cgroup transitions into FROZEN state when all tasks + belonging to the cgroup and its descendants become frozen. Note that + a cgroup reverts to FREEZING from FROZEN after a new task is added + to the cgroup or one of its descendant cgroups until the new task is + frozen. + + When written, sets the self-state of the cgroup. Two values are + allowed - "FROZEN" and "THAWED". If FROZEN is written, the cgroup, + if not already freezing, enters FREEZING state along with all its + descendant cgroups. + + If THAWED is written, the self-state of the cgroup is changed to + THAWED. Note that the effective state may not change to THAWED if + the parent-state is still freezing. If a cgroup's effective state + becomes THAWED, all its descendants which are freezing because of + the cgroup also leave the freezing state. + +* freezer.self_freezing: Read only. + + Shows the self-state. 0 if the self-state is THAWED; otherwise, 1. + This value is 1 iff the last write to freezer.state was "FROZEN". + +* freezer.parent_freezing: Read only. + + Shows the parent-state. 0 if none of the cgroup's ancestors is + frozen; otherwise, 1. + +The root cgroup is non-freezable and the above interface files don't +exist. * Examples of usage : @@ -85,18 +121,3 @@ to unfreeze all tasks in the container : This is the basic mechanism which should do the right thing for user space task in a simple scenario. - -It's important to note that freezing can be incomplete. In that case we return -EBUSY. This means that some tasks in the cgroup are busy doing something that -prevents us from completely freezing the cgroup at this time. After EBUSY, -the cgroup will remain partially frozen -- reflected by freezer.state reporting -"FREEZING" when read. The state will remain "FREEZING" until one of these -things happens: - - 1) Userspace cancels the freezing operation by writing "THAWED" to - the freezer.state file - 2) Userspace retries the freezing operation by writing "FROZEN" to - the freezer.state file (writing "FREEZING" is not legal - and returns EINVAL) - 3) The tasks that blocked the cgroup from entering the "FROZEN" - state disappear from the cgroup's set of tasks. diff --git a/trunk/Documentation/cgroups/memory.txt b/trunk/Documentation/cgroups/memory.txt index 71c4da413444..a25cb3fafeba 100644 --- a/trunk/Documentation/cgroups/memory.txt +++ b/trunk/Documentation/cgroups/memory.txt @@ -144,9 +144,9 @@ Figure 1 shows the important aspects of the controller 3. Each page has a pointer to the page_cgroup, which in turn knows the cgroup it belongs to -The accounting is done as follows: mem_cgroup_charge() is invoked to set up -the necessary data structures and check if the cgroup that is being charged -is over its limit. If it is, then reclaim is invoked on the cgroup. +The accounting is done as follows: mem_cgroup_charge_common() is invoked to +set up the necessary data structures and check if the cgroup that is being +charged is over its limit. If it is, then reclaim is invoked on the cgroup. More details can be found in the reclaim section of this document. If everything goes well, a page meta-data-structure called page_cgroup is updated. page_cgroup has its own LRU on cgroup. diff --git a/trunk/Documentation/cgroups/net_prio.txt b/trunk/Documentation/cgroups/net_prio.txt index 01b322635591..a82cbd28ea8a 100644 --- a/trunk/Documentation/cgroups/net_prio.txt +++ b/trunk/Documentation/cgroups/net_prio.txt @@ -51,3 +51,5 @@ One usage for the net_prio cgroup is with mqprio qdisc allowing application traffic to be steered to hardware/driver based traffic classes. These mappings can then be managed by administrators or other networking protocols such as DCBX. + +A new net_prio cgroup inherits the parent's configuration. diff --git a/trunk/Documentation/cpu-hotplug.txt b/trunk/Documentation/cpu-hotplug.txt index 66ef8f35613d..9f401350f502 100644 --- a/trunk/Documentation/cpu-hotplug.txt +++ b/trunk/Documentation/cpu-hotplug.txt @@ -207,6 +207,30 @@ by making it not-removable. In such cases you will also notice that the online file is missing under cpu0. +Q: Is CPU0 removable on X86? +A: Yes. If kernel is compiled with CONFIG_BOOTPARAM_HOTPLUG_CPU0=y, CPU0 is +removable by default. Otherwise, CPU0 is also removable by kernel option +cpu0_hotplug. + +But some features depend on CPU0. Two known dependencies are: + +1. Resume from hibernate/suspend depends on CPU0. Hibernate/suspend will fail if +CPU0 is offline and you need to online CPU0 before hibernate/suspend can +continue. +2. PIC interrupts also depend on CPU0. CPU0 can't be removed if a PIC interrupt +is detected. + +It's said poweroff/reboot may depend on CPU0 on some machines although I haven't +seen any poweroff/reboot failure so far after CPU0 is offline on a few tested +machines. + +Please let me know if you know or see any other dependencies of CPU0. + +If the dependencies are under your control, you can turn on CPU0 hotplug feature +either by CONFIG_BOOTPARAM_HOTPLUG_CPU0 or by kernel parameter cpu0_hotplug. + +--Fenghua Yu + Q: How do i find out if a particular CPU is not removable? A: Depending on the implementation, some architectures may show this by the absence of the "online" file. This is done if it can be determined ahead of diff --git a/trunk/Documentation/devices.txt b/trunk/Documentation/devices.txt index b6251cca9263..08f01e79c41a 100644 --- a/trunk/Documentation/devices.txt +++ b/trunk/Documentation/devices.txt @@ -2561,9 +2561,6 @@ Your cooperation is appreciated. 192 = /dev/usb/yurex1 First USB Yurex device ... 209 = /dev/usb/yurex16 16th USB Yurex device - 240 = /dev/usb/dabusb0 First daubusb device - ... - 243 = /dev/usb/dabusb3 Fourth dabusb device 180 block USB block devices 0 = /dev/uba First USB block device diff --git a/trunk/Documentation/devicetree/bindings/arm/atmel-at91.txt b/trunk/Documentation/devicetree/bindings/arm/atmel-at91.txt index d187e9f7cf1c..1196290082d1 100644 --- a/trunk/Documentation/devicetree/bindings/arm/atmel-at91.txt +++ b/trunk/Documentation/devicetree/bindings/arm/atmel-at91.txt @@ -7,6 +7,12 @@ PIT Timer required properties: - interrupts: Should contain interrupt for the PIT which is the IRQ line shared across all System Controller members. +System Timer (ST) required properties: +- compatible: Should be "atmel,at91rm9200-st" +- reg: Should contain registers location and length +- interrupts: Should contain interrupt for the ST which is the IRQ line + shared across all System Controller members. + TC/TCLIB Timer required properties: - compatible: Should be "atmel,-tcb". can be "at91rm9200" or "at91sam9x5" diff --git a/trunk/Documentation/devicetree/bindings/arm/cpus.txt b/trunk/Documentation/devicetree/bindings/arm/cpus.txt new file mode 100644 index 000000000000..f32494dbfe19 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/arm/cpus.txt @@ -0,0 +1,77 @@ +* ARM CPUs binding description + +The device tree allows to describe the layout of CPUs in a system through +the "cpus" node, which in turn contains a number of subnodes (ie "cpu") +defining properties for every cpu. + +Bindings for CPU nodes follow the ePAPR standard, available from: + +http://devicetree.org + +For the ARM architecture every CPU node must contain the following properties: + +- device_type: must be "cpu" +- reg: property matching the CPU MPIDR[23:0] register bits + reg[31:24] bits must be set to 0 +- compatible: should be one of: + "arm,arm1020" + "arm,arm1020e" + "arm,arm1022" + "arm,arm1026" + "arm,arm720" + "arm,arm740" + "arm,arm7tdmi" + "arm,arm920" + "arm,arm922" + "arm,arm925" + "arm,arm926" + "arm,arm940" + "arm,arm946" + "arm,arm9tdmi" + "arm,cortex-a5" + "arm,cortex-a7" + "arm,cortex-a8" + "arm,cortex-a9" + "arm,cortex-a15" + "arm,arm1136" + "arm,arm1156" + "arm,arm1176" + "arm,arm11mpcore" + "faraday,fa526" + "intel,sa110" + "intel,sa1100" + "marvell,feroceon" + "marvell,mohawk" + "marvell,xsc3" + "marvell,xscale" + +Example: + + cpus { + #size-cells = <0>; + #address-cells = <1>; + + CPU0: cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a15"; + reg = <0x0>; + }; + + CPU1: cpu@1 { + device_type = "cpu"; + compatible = "arm,cortex-a15"; + reg = <0x1>; + }; + + CPU2: cpu@100 { + device_type = "cpu"; + compatible = "arm,cortex-a7"; + reg = <0x100>; + }; + + CPU3: cpu@101 { + device_type = "cpu"; + compatible = "arm,cortex-a7"; + reg = <0x101>; + }; + }; diff --git a/trunk/Documentation/devicetree/bindings/arm/davinci/nand.txt b/trunk/Documentation/devicetree/bindings/arm/davinci/nand.txt index e37241f1fdd8..49fc7ada929a 100644 --- a/trunk/Documentation/devicetree/bindings/arm/davinci/nand.txt +++ b/trunk/Documentation/devicetree/bindings/arm/davinci/nand.txt @@ -23,29 +23,16 @@ Recommended properties : - ti,davinci-nand-buswidth: buswidth 8 or 16 - ti,davinci-nand-use-bbt: use flash based bad block table support. -Example (enbw_cmc board): -aemif@60000000 { - compatible = "ti,davinci-aemif"; - #address-cells = <2>; - #size-cells = <1>; - reg = <0x68000000 0x80000>; - ranges = <2 0 0x60000000 0x02000000 - 3 0 0x62000000 0x02000000 - 4 0 0x64000000 0x02000000 - 5 0 0x66000000 0x02000000 - 6 0 0x68000000 0x02000000>; - nand@3,0 { - compatible = "ti,davinci-nand"; - reg = <3 0x0 0x807ff - 6 0x0 0x8000>; - #address-cells = <1>; - #size-cells = <1>; - ti,davinci-chipselect = <1>; - ti,davinci-mask-ale = <0>; - ti,davinci-mask-cle = <0>; - ti,davinci-mask-chipsel = <0>; - ti,davinci-ecc-mode = "hw"; - ti,davinci-ecc-bits = <4>; - ti,davinci-nand-use-bbt; - }; +Example(da850 EVM ): +nand_cs3@62000000 { + compatible = "ti,davinci-nand"; + reg = <0x62000000 0x807ff + 0x68000000 0x8000>; + ti,davinci-chipselect = <1>; + ti,davinci-mask-ale = <0>; + ti,davinci-mask-cle = <0>; + ti,davinci-mask-chipsel = <0>; + ti,davinci-ecc-mode = "hw"; + ti,davinci-ecc-bits = <4>; + ti,davinci-nand-use-bbt; }; diff --git a/trunk/Documentation/devicetree/bindings/arm/l2cc.txt b/trunk/Documentation/devicetree/bindings/arm/l2cc.txt index 7ca52161e7ab..7c3ee3aeb7b7 100644 --- a/trunk/Documentation/devicetree/bindings/arm/l2cc.txt +++ b/trunk/Documentation/devicetree/bindings/arm/l2cc.txt @@ -37,7 +37,7 @@ L2: cache-controller { reg = <0xfff12000 0x1000>; arm,data-latency = <1 1 1>; arm,tag-latency = <2 2 2>; - arm,filter-latency = <0x80000000 0x8000000>; + arm,filter-ranges = <0x80000000 0x8000000>; cache-unified; cache-level = <2>; interrupts = <45>; diff --git a/trunk/Documentation/devicetree/bindings/clock/imx23-clock.txt b/trunk/Documentation/devicetree/bindings/clock/imx23-clock.txt index a0b867ef8d96..baadbb11fe98 100644 --- a/trunk/Documentation/devicetree/bindings/clock/imx23-clock.txt +++ b/trunk/Documentation/devicetree/bindings/clock/imx23-clock.txt @@ -52,7 +52,7 @@ clocks and IDs. lcdif 38 etm 39 usb 40 - usb_pwr 41 + usb_phy 41 Examples: diff --git a/trunk/Documentation/devicetree/bindings/clock/imx28-clock.txt b/trunk/Documentation/devicetree/bindings/clock/imx28-clock.txt index aa2af2866fe8..52a49a4a50b3 100644 --- a/trunk/Documentation/devicetree/bindings/clock/imx28-clock.txt +++ b/trunk/Documentation/devicetree/bindings/clock/imx28-clock.txt @@ -73,8 +73,8 @@ clocks and IDs. can1 59 usb0 60 usb1 61 - usb0_pwr 62 - usb1_pwr 63 + usb0_phy 62 + usb1_phy 63 enet_out 64 Examples: diff --git a/trunk/Documentation/devicetree/bindings/cpufreq/cpufreq-spear.txt b/trunk/Documentation/devicetree/bindings/cpufreq/cpufreq-spear.txt new file mode 100644 index 000000000000..f3d44984d91c --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/cpufreq/cpufreq-spear.txt @@ -0,0 +1,42 @@ +SPEAr cpufreq driver +------------------- + +SPEAr SoC cpufreq driver for CPU frequency scaling. +It supports both uniprocessor (UP) and symmetric multiprocessor (SMP) systems +which share clock across all CPUs. + +Required properties: +- cpufreq_tbl: Table of frequencies CPU could be transitioned into, in the + increasing order. + +Optional properties: +- clock-latency: Specify the possible maximum transition latency for clock, in + unit of nanoseconds. + +Both required and optional properties listed above must be defined under node +/cpus/cpu@0. + +Examples: +-------- +cpus { + + <...> + + cpu@0 { + compatible = "arm,cortex-a9"; + reg = <0>; + + <...> + + cpufreq_tbl = < 166000 + 200000 + 250000 + 300000 + 400000 + 500000 + 600000 >; + }; + + <...> + +}; diff --git a/trunk/Documentation/devicetree/bindings/gpio/gpio-stmpe.txt b/trunk/Documentation/devicetree/bindings/gpio/gpio-stmpe.txt new file mode 100644 index 000000000000..a0e4cf885213 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/gpio/gpio-stmpe.txt @@ -0,0 +1,18 @@ +STMPE gpio +---------- + +Required properties: + - compatible: "st,stmpe-gpio" + +Optional properties: + - st,norequest-mask: bitmask specifying which GPIOs should _not_ be requestable + due to different usage (e.g. touch, keypad) + +Node name must be stmpe_gpio and should be child node of stmpe node to which it +belongs. + +Example: + stmpe_gpio { + compatible = "st,stmpe-gpio"; + st,norequest-mask = <0x20>; //gpio 5 can't be used + }; diff --git a/trunk/Documentation/devicetree/bindings/gpio/gpio.txt b/trunk/Documentation/devicetree/bindings/gpio/gpio.txt index 4e16ba4feab0..a33628759d36 100644 --- a/trunk/Documentation/devicetree/bindings/gpio/gpio.txt +++ b/trunk/Documentation/devicetree/bindings/gpio/gpio.txt @@ -75,4 +75,40 @@ Example of two SOC GPIO banks defined as gpio-controller nodes: gpio-controller; }; +2.1) gpio-controller and pinctrl subsystem +------------------------------------------ +gpio-controller on a SOC might be tightly coupled with the pinctrl +subsystem, in the sense that the pins can be used by other functions +together with optional gpio feature. + +While the pin allocation is totally managed by the pin ctrl subsystem, +gpio (under gpiolib) is still maintained by gpio drivers. It may happen +that different pin ranges in a SoC is managed by different gpio drivers. + +This makes it logical to let gpio drivers announce their pin ranges to +the pin ctrl subsystem and call 'pinctrl_request_gpio' in order to +request the corresponding pin before any gpio usage. + +For this, the gpio controller can use a pinctrl phandle and pins to +announce the pinrange to the pin ctrl subsystem. For example, + + qe_pio_e: gpio-controller@1460 { + #gpio-cells = <2>; + compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank"; + reg = <0x1460 0x18>; + gpio-controller; + gpio-ranges = <&pinctrl1 20 10>, <&pinctrl2 50 20>; + + } + +where, + &pinctrl1 and &pinctrl2 is the phandle to the pinctrl DT node. + + Next values specify the base pin and number of pins for the range + handled by 'qe_pio_e' gpio. In the given example from base pin 20 to + pin 29 under pinctrl1 and pin 50 to pin 69 under pinctrl2 is handled + by this gpio controller. + +The pinctrl node must have "#gpio-range-cells" property to show number of +arguments to pass with phandle from gpio controllers node. diff --git a/trunk/Documentation/devicetree/bindings/gpio/gpio_atmel.txt b/trunk/Documentation/devicetree/bindings/gpio/gpio_atmel.txt index 66efc804806a..85f8c0d084fa 100644 --- a/trunk/Documentation/devicetree/bindings/gpio/gpio_atmel.txt +++ b/trunk/Documentation/devicetree/bindings/gpio/gpio_atmel.txt @@ -9,6 +9,10 @@ Required properties: unused). - gpio-controller: Marks the device node as a GPIO controller. +optional properties: +- #gpio-lines: Number of gpio if absent 32. + + Example: pioA: gpio@fffff200 { compatible = "atmel,at91rm9200-gpio"; @@ -16,5 +20,6 @@ Example: interrupts = <2 4>; #gpio-cells = <2>; gpio-controller; + #gpio-lines = <19>; }; diff --git a/trunk/Documentation/devicetree/bindings/gpio/spear_spics.txt b/trunk/Documentation/devicetree/bindings/gpio/spear_spics.txt new file mode 100644 index 000000000000..96c37eb15075 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/gpio/spear_spics.txt @@ -0,0 +1,50 @@ +=== ST Microelectronics SPEAr SPI CS Driver === + +SPEAr platform provides a provision to control chipselects of ARM PL022 Prime +Cell spi controller through its system registers, which otherwise remains under +PL022 control. If chipselect remain under PL022 control then they would be +released as soon as transfer is over and TxFIFO becomes empty. This is not +desired by some of the device protocols above spi which expect (multiple) +transfers without releasing their chipselects. + +Chipselects can be controlled by software by turning them as GPIOs. SPEAr +provides another interface through system registers through which software can +directly control each PL022 chipselect. Hence, it is natural for SPEAr to export +the control of this interface as gpio. + +Required properties: + + * compatible: should be defined as "st,spear-spics-gpio" + * reg: mentioning address range of spics controller + * st-spics,peripcfg-reg: peripheral configuration register offset + * st-spics,sw-enable-bit: bit offset to enable sw control + * st-spics,cs-value-bit: bit offset to drive chipselect low or high + * st-spics,cs-enable-mask: chip select number bit mask + * st-spics,cs-enable-shift: chip select number program offset + * gpio-controller: Marks the device node as gpio controller + * #gpio-cells: should be 1 and will mention chip select number + +All the above bit offsets are within peripcfg register. + +Example: +------- +spics: spics@e0700000{ + compatible = "st,spear-spics-gpio"; + reg = <0xe0700000 0x1000>; + st-spics,peripcfg-reg = <0x3b0>; + st-spics,sw-enable-bit = <12>; + st-spics,cs-value-bit = <11>; + st-spics,cs-enable-mask = <3>; + st-spics,cs-enable-shift = <8>; + gpio-controller; + #gpio-cells = <2>; +}; + + +spi0: spi@e0100000 { + status = "okay"; + num-cs = <3>; + cs-gpios = <&gpio1 7 0>, <&spics 0>, + <&spics 1>; + ... +} diff --git a/trunk/Documentation/devicetree/bindings/i2c/atmel-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-at91.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/atmel-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-at91.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/davinci.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-davinci.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/davinci.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-davinci.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/gpio-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-gpio.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/gpio-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-gpio.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-imx.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/fsl-imx-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-imx.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/fsl-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-mpc.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/fsl-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-mpc.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/mux.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-mux.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/mux.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-mux.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt new file mode 100644 index 000000000000..f46d928aa73d --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt @@ -0,0 +1,18 @@ + +* Marvell MV64XXX I2C controller + +Required properties : + + - reg : Offset and length of the register set for the device + - compatible : Should be "marvell,mv64xxx-i2c" + - interrupts : The interrupt number + - clock-frequency : Desired I2C bus clock frequency in Hz. + +Examples: + + i2c@11000 { + compatible = "marvell,mv64xxx-i2c"; + reg = <0x11000 0x20>; + interrupts = <29>; + clock-frequency = <100000>; + }; diff --git a/trunk/Documentation/devicetree/bindings/i2c/nomadik.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-nomadik.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/nomadik.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-nomadik.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/cavium-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-octeon.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/cavium-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-octeon.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/omap-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-omap.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/omap-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-omap.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/pnx.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-pnx.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/pnx.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-pnx.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/ce4100-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-pxa-pci-ce4100.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/ce4100-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-pxa-pci-ce4100.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/mrvl-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-pxa.txt similarity index 70% rename from trunk/Documentation/devicetree/bindings/i2c/mrvl-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-pxa.txt index 0f7945019f6f..12b78ac507e9 100644 --- a/trunk/Documentation/devicetree/bindings/i2c/mrvl-i2c.txt +++ b/trunk/Documentation/devicetree/bindings/i2c/i2c-pxa.txt @@ -31,21 +31,3 @@ Examples: reg = <0xd4025000 0x1000>; interrupts = <58>; }; - -* Marvell MV64XXX I2C controller - -Required properties : - - - reg : Offset and length of the register set for the device - - compatible : Should be "marvell,mv64xxx-i2c" - - interrupts : The interrupt number - - clock-frequency : Desired I2C bus clock frequency in Hz. - -Examples: - - i2c@11000 { - compatible = "marvell,mv64xxx-i2c"; - reg = <0x11000 0x20>; - interrupts = <29>; - clock-frequency = <100000>; - }; diff --git a/trunk/Documentation/devicetree/bindings/i2c/samsung-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-s3c2410.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/samsung-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-s3c2410.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/sirf-i2c.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-sirf.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/sirf-i2c.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-sirf.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/arm-versatile.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-versatile.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/arm-versatile.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-versatile.txt diff --git a/trunk/Documentation/devicetree/bindings/i2c/xiic.txt b/trunk/Documentation/devicetree/bindings/i2c/i2c-xiic.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/i2c/xiic.txt rename to trunk/Documentation/devicetree/bindings/i2c/i2c-xiic.txt diff --git a/trunk/Documentation/devicetree/bindings/leds/common.txt b/trunk/Documentation/devicetree/bindings/leds/common.txt new file mode 100644 index 000000000000..2d88816dd550 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/leds/common.txt @@ -0,0 +1,23 @@ +Common leds properties. + +Optional properties for child nodes: +- label : The label for this LED. If omitted, the label is + taken from the node name (excluding the unit address). + +- linux,default-trigger : This parameter, if present, is a + string defining the trigger assigned to the LED. Current triggers are: + "backlight" - LED will act as a back-light, controlled by the framebuffer + system + "default-on" - LED will turn on (but for leds-gpio see "default-state" + property in Documentation/devicetree/bindings/gpio/led.txt) + "heartbeat" - LED "double" flashes at a load average based rate + "ide-disk" - LED indicates disk activity + "timer" - LED flashes at a fixed, configurable rate + +Examples: + +system-status { + label = "Status"; + linux,default-trigger = "heartbeat"; + ... +}; diff --git a/trunk/Documentation/devicetree/bindings/gpio/led.txt b/trunk/Documentation/devicetree/bindings/leds/leds-gpio.txt similarity index 68% rename from trunk/Documentation/devicetree/bindings/gpio/led.txt rename to trunk/Documentation/devicetree/bindings/leds/leds-gpio.txt index edc83c1c0d54..df1b3080f6b8 100644 --- a/trunk/Documentation/devicetree/bindings/gpio/led.txt +++ b/trunk/Documentation/devicetree/bindings/leds/leds-gpio.txt @@ -10,16 +10,10 @@ LED sub-node properties: - gpios : Should specify the LED's GPIO, see "gpios property" in Documentation/devicetree/bindings/gpio/gpio.txt. Active low LEDs should be indicated using flags in the GPIO specifier. -- label : (optional) The label for this LED. If omitted, the label is - taken from the node name (excluding the unit address). -- linux,default-trigger : (optional) This parameter, if present, is a - string defining the trigger assigned to the LED. Current triggers are: - "backlight" - LED will act as a back-light, controlled by the framebuffer - system - "default-on" - LED will turn on, but see "default-state" below - "heartbeat" - LED "double" flashes at a load average based rate - "ide-disk" - LED indicates disk activity - "timer" - LED flashes at a fixed, configurable rate +- label : (optional) + see Documentation/devicetree/bindings/leds/common.txt +- linux,default-trigger : (optional) + see Documentation/devicetree/bindings/leds/common.txt - default-state: (optional) The initial state of the LED. Valid values are "on", "off", and "keep". If the LED is already on or off and the default-state property is set the to same value, then no diff --git a/trunk/Documentation/devicetree/bindings/mmc/mmc.txt b/trunk/Documentation/devicetree/bindings/mmc/mmc.txt index 8e2e0ba2f486..a591c6741d75 100644 --- a/trunk/Documentation/devicetree/bindings/mmc/mmc.txt +++ b/trunk/Documentation/devicetree/bindings/mmc/mmc.txt @@ -21,6 +21,12 @@ Optional properties: - cd-inverted: when present, polarity on the cd gpio line is inverted - wp-inverted: when present, polarity on the wp gpio line is inverted - max-frequency: maximum operating clock frequency +- no-1-8-v: when present, denotes that 1.8v card voltage is not supported on + this system, even if the controller claims it is. + +Optional SDIO properties: +- keep-power-in-suspend: Preserves card power during a suspend/resume cycle +- enable-sdio-wakeup: Enables wake up of host system on SDIO IRQ assertion Example: @@ -33,4 +39,6 @@ sdhci@ab000000 { cd-inverted; wp-gpios = <&gpio 70 0>; max-frequency = <50000000>; + keep-power-in-suspend; + enable-sdio-wakeup; } diff --git a/trunk/Documentation/devicetree/bindings/mmc/samsung-sdhci.txt b/trunk/Documentation/devicetree/bindings/mmc/samsung-sdhci.txt index 630a7d7f4718..97e9e315400d 100644 --- a/trunk/Documentation/devicetree/bindings/mmc/samsung-sdhci.txt +++ b/trunk/Documentation/devicetree/bindings/mmc/samsung-sdhci.txt @@ -12,10 +12,6 @@ is used. The Samsung's SDHCI controller bindings extends this as listed below. [A] The property "samsung,cd-pinmux-gpio" can be used as stated in the "Optional Board Specific Properties" section below. -[B] If core card-detect bindings and "samsung,cd-pinmux-gpio" property - is not specified, it is assumed that there is no card detection - mechanism used. - Required SoC Specific Properties: - compatible: should be one of the following - "samsung,s3c6410-sdhci": For controllers compatible with s3c6410 sdhci @@ -24,14 +20,18 @@ Required SoC Specific Properties: controller. Required Board Specific Properties: -- gpios: Should specify the gpios used for clock, command and data lines. The - gpio specifier format depends on the gpio controller. +- Samsung GPIO variant (will be completely replaced by pinctrl): + - gpios: Should specify the gpios used for clock, command and data lines. The + gpio specifier format depends on the gpio controller. +- Pinctrl variant (preferred if available): + - pinctrl-0: Should specify pin control groups used for this controller. + - pinctrl-names: Should contain only one value - "default". Optional Board Specific Properties: - samsung,cd-pinmux-gpio: Specifies the card detect line that is routed through a pinmux to the card-detect pin of the card slot. This property should be used only if none of the mmc core card-detect properties are - used. + used. Only for Samsung GPIO variant. Example: sdhci@12530000 { @@ -40,12 +40,18 @@ Example: interrupts = <0 75 0>; bus-width = <4>; cd-gpios = <&gpk2 2 2 3 3>; + + /* Samsung GPIO variant */ gpios = <&gpk2 0 2 0 3>, /* clock line */ <&gpk2 1 2 0 3>, /* command line */ <&gpk2 3 2 3 3>, /* data line 0 */ <&gpk2 4 2 3 3>, /* data line 1 */ <&gpk2 5 2 3 3>, /* data line 2 */ <&gpk2 6 2 3 3>; /* data line 3 */ + + /* Pinctrl variant */ + pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus4>; + pinctrl-names = "default"; }; Note: This example shows both SoC specific and board specific properties diff --git a/trunk/Documentation/devicetree/bindings/mmc/synposis-dw-mshc.txt b/trunk/Documentation/devicetree/bindings/mmc/synopsis-dw-mshc.txt similarity index 100% rename from trunk/Documentation/devicetree/bindings/mmc/synposis-dw-mshc.txt rename to trunk/Documentation/devicetree/bindings/mmc/synopsis-dw-mshc.txt diff --git a/trunk/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt b/trunk/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt index be76a23b34c4..ed271fc255b2 100644 --- a/trunk/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt +++ b/trunk/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt @@ -19,6 +19,7 @@ ti,dual-volt: boolean, supports dual voltage cards "supply-name" examples are "vmmc", "vmmc_aux" etc ti,non-removable: non-removable slot (like eMMC) ti,needs-special-reset: Requires a special softreset sequence +ti,needs-special-hs-handling: HSMMC IP needs special setting for handling High Speed Example: mmc1: mmc@0x4809c000 { diff --git a/trunk/Documentation/devicetree/bindings/mmc/vt8500-sdmmc.txt b/trunk/Documentation/devicetree/bindings/mmc/vt8500-sdmmc.txt new file mode 100644 index 000000000000..d7fb6abb3eb8 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/mmc/vt8500-sdmmc.txt @@ -0,0 +1,23 @@ +* Wondermedia WM8505/WM8650 SD/MMC Host Controller + +This file documents differences between the core properties described +by mmc.txt and the properties used by the wmt-sdmmc driver. + +Required properties: +- compatible: Should be "wm,wm8505-sdhc". +- interrupts: Two interrupts are required - regular irq and dma irq. + +Optional properties: +- sdon-inverted: SD_ON bit is inverted on the controller + +Examples: + +sdhc@d800a000 { + compatible = "wm,wm8505-sdhc"; + reg = <0xd800a000 0x1000>; + interrupts = <20 21>; + clocks = <&sdhc>; + bus-width = <4>; + sdon-inverted; +}; + diff --git a/trunk/Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt b/trunk/Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt new file mode 100644 index 000000000000..3a268127b054 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt @@ -0,0 +1,141 @@ +* Atmel AT91 Pinmux Controller + +The AT91 Pinmux Controler, enables the IC +to share one PAD to several functional blocks. The sharing is done by +multiplexing the PAD input/output signals. For each PAD there are up to +8 muxing options (called periph modes). Since different modules require +different PAD settings (like pull up, keeper, etc) the contoller controls +also the PAD settings parameters. + +Please refer to pinctrl-bindings.txt in this directory for details of the +common pinctrl bindings used by client devices, including the meaning of the +phrase "pin configuration node". + +Atmel AT91 pin configuration node is a node of a group of pins which can be +used for a specific device or function. This node represents both mux and config +of the pins in that group. The 'pins' selects the function mode(also named pin +mode) this pin can work on and the 'config' configures various pad settings +such as pull-up, multi drive, etc. + +Required properties for iomux controller: +- compatible: "atmel,at91rm9200-pinctrl" +- atmel,mux-mask: array of mask (periph per bank) to describe if a pin can be + configured in this periph mode. All the periph and bank need to be describe. + +How to create such array: + +Each column will represent the possible peripheral of the pinctrl +Each line will represent a pio bank + +Take an example on the 9260 +Peripheral: 2 ( A and B) +Bank: 3 (A, B and C) +=> + + /* A B */ + 0xffffffff 0xffc00c3b /* pioA */ + 0xffffffff 0x7fff3ccf /* pioB */ + 0xffffffff 0x007fffff /* pioC */ + +For each peripheral/bank we will descibe in a u32 if a pin can can be +configured in it by putting 1 to the pin bit (1 << pin) + +Let's take the pioA on peripheral B +From the datasheet Table 10-2. +Peripheral B +PA0 MCDB0 +PA1 MCCDB +PA2 +PA3 MCDB3 +PA4 MCDB2 +PA5 MCDB1 +PA6 +PA7 +PA8 +PA9 +PA10 ETX2 +PA11 ETX3 +PA12 +PA13 +PA14 +PA15 +PA16 +PA17 +PA18 +PA19 +PA20 +PA21 +PA22 ETXER +PA23 ETX2 +PA24 ETX3 +PA25 ERX2 +PA26 ERX3 +PA27 ERXCK +PA28 ECRS +PA29 ECOL +PA30 RXD4 +PA31 TXD4 + +=> 0xffc00c3b + +Required properties for pin configuration node: +- atmel,pins: 4 integers array, represents a group of pins mux and config + setting. The format is atmel,pins = . + The PERIPH 0 means gpio. + +Bits used for CONFIG: +PULL_UP (1 << 0): indicate this pin need a pull up. +MULTIDRIVE (1 << 1): indicate this pin need to be configured as multidrive. +DEGLITCH (1 << 2): indicate this pin need deglitch. +PULL_DOWN (1 << 3): indicate this pin need a pull down. +DIS_SCHMIT (1 << 4): indicate this pin need to disable schmit trigger. +DEBOUNCE (1 << 16): indicate this pin need debounce. +DEBOUNCE_VAL (0x3fff << 17): debounce val. + +NOTE: +Some requirements for using atmel,at91rm9200-pinctrl binding: +1. We have pin function node defined under at91 controller node to represent + what pinmux functions this SoC supports. +2. The driver can use the function node's name and pin configuration node's + name describe the pin function and group hierarchy. + For example, Linux at91 pinctrl driver takes the function node's name + as the function name and pin configuration node's name as group name to + create the map table. +3. Each pin configuration node should have a phandle, devices can set pins + configurations by referring to the phandle of that pin configuration node. +4. The gpio controller must be describe in the pinctrl simple-bus. + +Examples: + +pinctrl@fffff400 { + #address-cells = <1>; + #size-cells = <1>; + ranges; + compatible = "atmel,at91rm9200-pinctrl", "simple-bus"; + reg = <0xfffff400 0x600>; + + atmel,mux-mask = < + /* A B */ + 0xffffffff 0xffc00c3b /* pioA */ + 0xffffffff 0x7fff3ccf /* pioB */ + 0xffffffff 0x007fffff /* pioC */ + >; + + /* shared pinctrl settings */ + dbgu { + pinctrl_dbgu: dbgu-0 { + atmel,pins = + <1 14 0x1 0x0 /* PB14 periph A */ + 1 15 0x1 0x1>; /* PB15 periph with pullup */ + }; + }; +}; + +dbgu: serial@fffff200 { + compatible = "atmel,at91sam9260-usart"; + reg = <0xfffff200 0x200>; + interrupts = <1 4 7>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_dbgu>; + status = "disabled"; +}; diff --git a/trunk/Documentation/devicetree/bindings/rtc/orion-rtc.txt b/trunk/Documentation/devicetree/bindings/rtc/orion-rtc.txt new file mode 100644 index 000000000000..3bf63ffa5160 --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/rtc/orion-rtc.txt @@ -0,0 +1,18 @@ +* Mvebu Real Time Clock + +RTC controller for the Kirkwood, the Dove, the Armada 370 and the +Armada XP SoCs + +Required properties: +- compatible : Should be "marvell,orion-rtc" +- reg: physical base address of the controller and length of memory mapped + region. +- interrupts: IRQ line for the RTC. + +Example: + +rtc@10300 { + compatible = "marvell,orion-rtc"; + reg = <0xd0010300 0x20>; + interrupts = <50>; +}; diff --git a/trunk/Documentation/devicetree/bindings/thermal/db8500-thermal.txt b/trunk/Documentation/devicetree/bindings/thermal/db8500-thermal.txt new file mode 100644 index 000000000000..2e1c06fad81f --- /dev/null +++ b/trunk/Documentation/devicetree/bindings/thermal/db8500-thermal.txt @@ -0,0 +1,44 @@ +* ST-Ericsson DB8500 Thermal + +** Thermal node properties: + +- compatible : "stericsson,db8500-thermal"; +- reg : address range of the thermal sensor registers; +- interrupts : interrupts generated from PRCMU; +- interrupt-names : "IRQ_HOTMON_LOW" and "IRQ_HOTMON_HIGH"; +- num-trips : number of total trip points, this is required, set it 0 if none, + if greater than 0, the following properties must be defined; +- tripN-temp : temperature of trip point N, should be in ascending order; +- tripN-type : type of trip point N, should be one of "active" "passive" "hot" + "critical"; +- tripN-cdev-num : number of the cooling devices which can be bound to trip + point N, this is required if trip point N is defined, set it 0 if none, + otherwise the following cooling device names must be defined; +- tripN-cdev-nameM : name of the No. M cooling device of trip point N; + +Usually the num-trips and tripN-*** are separated in board related dts files. + +Example: +thermal@801573c0 { + compatible = "stericsson,db8500-thermal"; + reg = <0x801573c0 0x40>; + interrupts = <21 0x4>, <22 0x4>; + interrupt-names = "IRQ_HOTMON_LOW", "IRQ_HOTMON_HIGH"; + + num-trips = <3>; + + trip0-temp = <75000>; + trip0-type = "active"; + trip0-cdev-num = <1>; + trip0-cdev-name0 = "thermal-cpufreq-0"; + + trip1-temp = <80000>; + trip1-type = "active"; + trip1-cdev-num = <2>; + trip1-cdev-name0 = "thermal-cpufreq-0"; + trip1-cdev-name1 = "thermal-fan"; + + trip2-temp = <85000>; + trip2-type = "critical"; + trip2-cdev-num = <0>; +} diff --git a/trunk/Documentation/devicetree/bindings/tty/serial/fsl-mxs-auart.txt b/trunk/Documentation/devicetree/bindings/tty/serial/fsl-mxs-auart.txt index 2ee903fad25c..273a8d5b3300 100644 --- a/trunk/Documentation/devicetree/bindings/tty/serial/fsl-mxs-auart.txt +++ b/trunk/Documentation/devicetree/bindings/tty/serial/fsl-mxs-auart.txt @@ -6,11 +6,19 @@ Required properties: - reg : Address and length of the register set for the device - interrupts : Should contain the auart interrupt numbers +Optional properties: +- fsl,auart-dma-channel : The DMA channels, the first is for RX, the other + is for TX. If you add this property, it also means that you + will enable the DMA support for the auart. + Note: due to the hardware bug in imx23(see errata : 2836), + only the imx28 can enable the DMA support for the auart. + Example: auart0: serial@8006a000 { compatible = "fsl,imx28-auart", "fsl,imx23-auart"; reg = <0x8006a000 0x2000>; interrupts = <112 70 71>; + fsl,auart-dma-channel = <8 9>; }; Note: Each auart port should have an alias correctly numbered in "aliases" diff --git a/trunk/Documentation/devicetree/bindings/tty/serial/of-serial.txt b/trunk/Documentation/devicetree/bindings/tty/serial/of-serial.txt index ba385f2e0ddc..1e1145ca4f3c 100644 --- a/trunk/Documentation/devicetree/bindings/tty/serial/of-serial.txt +++ b/trunk/Documentation/devicetree/bindings/tty/serial/of-serial.txt @@ -14,7 +14,10 @@ Required properties: - "serial" if the port type is unknown. - reg : offset and length of the register set for the device. - interrupts : should contain uart interrupt. -- clock-frequency : the input clock frequency for the UART. +- clock-frequency : the input clock frequency for the UART + or + clocks phandle to refer to the clk used as per Documentation/devicetree + /bindings/clock/clock-bindings.txt Optional properties: - current-speed : the current active speed of the UART. diff --git a/trunk/Documentation/devicetree/bindings/usb/am33xx-usb.txt b/trunk/Documentation/devicetree/bindings/usb/am33xx-usb.txt index 707c1a2dae06..ea840f7f9258 100644 --- a/trunk/Documentation/devicetree/bindings/usb/am33xx-usb.txt +++ b/trunk/Documentation/devicetree/bindings/usb/am33xx-usb.txt @@ -5,12 +5,12 @@ AM33XX MUSB GLUE - ti,hwmods : must be "usb_otg_hs" - multipoint : Should be "1" indicating the musb controller supports multipoint. This is a MUSB configuration-specific setting. - - num_eps : Specifies the number of endpoints. This is also a + - num-eps : Specifies the number of endpoints. This is also a MUSB configuration-specific setting. Should be set to "16" - - ram_bits : Specifies the ram address size. Should be set to "12" - - port0_mode : Should be "3" to represent OTG. "1" signifies HOST and "2" + - ram-bits : Specifies the ram address size. Should be set to "12" + - port0-mode : Should be "3" to represent OTG. "1" signifies HOST and "2" represents PERIPHERAL. - - port1_mode : Should be "1" to represent HOST. "3" signifies OTG and "2" + - port1-mode : Should be "1" to represent HOST. "3" signifies OTG and "2" represents PERIPHERAL. - power : Should be "250". This signifies the controller can supply upto 500mA when operating in host mode. diff --git a/trunk/Documentation/devicetree/bindings/vendor-prefixes.txt b/trunk/Documentation/devicetree/bindings/vendor-prefixes.txt index 9de2b9ff9d6e..770a0193ca1b 100644 --- a/trunk/Documentation/devicetree/bindings/vendor-prefixes.txt +++ b/trunk/Documentation/devicetree/bindings/vendor-prefixes.txt @@ -5,6 +5,7 @@ using them to avoid name-space collisions. ad Avionic Design GmbH adi Analog Devices, Inc. +ak Asahi Kasei Corp. amcc Applied Micro Circuits Corporation (APM, formally AMCC) apm Applied Micro Circuits Corporation (APM) arm ARM Ltd. @@ -25,6 +26,7 @@ gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. hp Hewlett Packard ibm International Business Machines (IBM) idt Integrated Device Technologies, Inc. +img Imagination Technologies Ltd. intercontrol Inter Control Group linux Linux-specific binding marvell Marvell Technology Group Ltd. @@ -34,8 +36,9 @@ national National Semiconductor nintendo Nintendo nvidia NVIDIA nxp NXP Semiconductors +onnn ON Semiconductor Corp. picochip Picochip Ltd -powervr Imagination Technologies +powervr PowerVR (deprecated, use img) qcom Qualcomm, Inc. ramtron Ramtron International realtek Realtek Semiconductor Corp. @@ -45,6 +48,7 @@ schindler Schindler sil Silicon Image simtek sirf SiRF Technology, Inc. +snps Synopsys, Inc. st STMicroelectronics stericsson ST-Ericsson ti Texas Instruments diff --git a/trunk/Documentation/devicetree/usage-model.txt b/trunk/Documentation/devicetree/usage-model.txt index dca90fe22a90..ef9d06c9f8fd 100644 --- a/trunk/Documentation/devicetree/usage-model.txt +++ b/trunk/Documentation/devicetree/usage-model.txt @@ -347,7 +347,7 @@ later), which will happily live at the base of the Linux /sys/devices tree. Therefore, if a DT node is at the root of the tree, then it really probably is best registered as a platform_device. -Linux board support code calls of_platform_populate(NULL, NULL, NULL) +Linux board support code calls of_platform_populate(NULL, NULL, NULL, NULL) to kick off discovery of devices at the root of the tree. The parameters are all NULL because when starting from the root of the tree, there is no need to provide a starting node (the first NULL), a diff --git a/trunk/Documentation/filesystems/xfs.txt b/trunk/Documentation/filesystems/xfs.txt index 3fc0c31a6f5d..3e4b3dd1e046 100644 --- a/trunk/Documentation/filesystems/xfs.txt +++ b/trunk/Documentation/filesystems/xfs.txt @@ -43,7 +43,7 @@ When mounting an XFS filesystem, the following options are accepted. Issue command to let the block device reclaim space freed by the filesystem. This is useful for SSD devices, thinly provisioned LUNs and virtual machine images, but may have a performance - impact. This option is incompatible with the nodelaylog option. + impact. dmapi Enable the DMAPI (Data Management API) event callouts. @@ -72,8 +72,15 @@ When mounting an XFS filesystem, the following options are accepted. Indicates that XFS is allowed to create inodes at any location in the filesystem, including those which will result in inode numbers occupying more than 32 bits of significance. This is - provided for backwards compatibility, but causes problems for - backup applications that cannot handle large inode numbers. + the default allocation option. Applications which do not handle + inode numbers bigger than 32 bits, should use inode32 option. + + inode32 + Indicates that XFS is limited to create inodes at locations which + will not result in inode numbers with more than 32 bits of + significance. This is provided for backwards compatibility, since + 64 bits inode numbers might cause problems for some applications + that cannot handle large inode numbers. largeio/nolargeio If "nolargeio" is specified, the optimal I/O reported in diff --git a/trunk/Documentation/firmware_class/README b/trunk/Documentation/firmware_class/README index 815b711bcd85..43fada989e65 100644 --- a/trunk/Documentation/firmware_class/README +++ b/trunk/Documentation/firmware_class/README @@ -22,12 +22,17 @@ - calls request_firmware(&fw_entry, $FIRMWARE, device) - kernel searchs the fimware image with name $FIRMWARE directly in the below search path of root filesystem: + User customized search path by module parameter 'path'[1] "/lib/firmware/updates/" UTS_RELEASE, "/lib/firmware/updates", "/lib/firmware/" UTS_RELEASE, "/lib/firmware" - If found, goto 7), else goto 2) + [1], the 'path' is a string parameter which length should be less + than 256, user should pass 'firmware_class.path=$CUSTOMIZED_PATH' + if firmware_class is built in kernel(the general situation) + 2), userspace: - /sys/class/firmware/xxx/{loading,data} appear. - hotplug gets called with a firmware identifier in $FIRMWARE @@ -114,3 +119,10 @@ on the setup, so I think that the choice on what firmware to make persistent should be left to userspace. + about firmware cache: + -------------------- + After firmware cache mechanism is introduced during system sleep, + request_firmware can be called safely inside device's suspend and + resume callback, and callers need't cache the firmware by + themselves any more for dealing with firmware loss during system + resume. diff --git a/trunk/Documentation/gpio.txt b/trunk/Documentation/gpio.txt index e08a883de36e..77a1d11af723 100644 --- a/trunk/Documentation/gpio.txt +++ b/trunk/Documentation/gpio.txt @@ -439,6 +439,48 @@ slower clock delays the rising edge of SCK, and the I2C master adjusts its signaling rate accordingly. +GPIO controllers and the pinctrl subsystem +------------------------------------------ + +A GPIO controller on a SOC might be tightly coupled with the pinctrl +subsystem, in the sense that the pins can be used by other functions +together with an optional gpio feature. We have already covered the +case where e.g. a GPIO controller need to reserve a pin or set the +direction of a pin by calling any of: + +pinctrl_request_gpio() +pinctrl_free_gpio() +pinctrl_gpio_direction_input() +pinctrl_gpio_direction_output() + +But how does the pin control subsystem cross-correlate the GPIO +numbers (which are a global business) to a certain pin on a certain +pin controller? + +This is done by registering "ranges" of pins, which are essentially +cross-reference tables. These are described in +Documentation/pinctrl.txt + +While the pin allocation is totally managed by the pinctrl subsystem, +gpio (under gpiolib) is still maintained by gpio drivers. It may happen +that different pin ranges in a SoC is managed by different gpio drivers. + +This makes it logical to let gpio drivers announce their pin ranges to +the pin ctrl subsystem before it will call 'pinctrl_request_gpio' in order +to request the corresponding pin to be prepared by the pinctrl subsystem +before any gpio usage. + +For this, the gpio controller can register its pin range with pinctrl +subsystem. There are two ways of doing it currently: with or without DT. + +For with DT support refer to Documentation/devicetree/bindings/gpio/gpio.txt. + +For non-DT support, user can call gpiochip_add_pin_range() with appropriate +parameters to register a range of gpio pins with a pinctrl driver. For this +exact name string of pinctrl device has to be passed as one of the +argument to this routine. + + What do these conventions omit? =============================== One of the biggest things these conventions omit is pin multiplexing, since diff --git a/trunk/Documentation/hwmon/ads7828 b/trunk/Documentation/hwmon/ads7828 index 2bbebe6f771f..f6e263e0f607 100644 --- a/trunk/Documentation/hwmon/ads7828 +++ b/trunk/Documentation/hwmon/ads7828 @@ -4,29 +4,47 @@ Kernel driver ads7828 Supported chips: * Texas Instruments/Burr-Brown ADS7828 Prefix: 'ads7828' - Addresses scanned: I2C 0x48, 0x49, 0x4a, 0x4b - Datasheet: Publicly available at the Texas Instruments website : + Datasheet: Publicly available at the Texas Instruments website: http://focus.ti.com/lit/ds/symlink/ads7828.pdf + * Texas Instruments ADS7830 + Prefix: 'ads7830' + Datasheet: Publicly available at the Texas Instruments website: + http://focus.ti.com/lit/ds/symlink/ads7830.pdf + Authors: Steve Hardy + Vivien Didelot + Guillaume Roguez + +Platform data +------------- + +The ads7828 driver accepts an optional ads7828_platform_data structure (defined +in include/linux/platform_data/ads7828.h). The structure fields are: -Module Parameters ------------------ +* diff_input: (bool) Differential operation + set to true for differential mode, false for default single ended mode. -* se_input: bool (default Y) - Single ended operation - set to N for differential mode -* int_vref: bool (default Y) - Operate with the internal 2.5V reference - set to N for external reference -* vref_mv: int (default 2500) - If using an external reference, set this to the reference voltage in mV +* ext_vref: (bool) External reference + set to true if it operates with an external reference, false for default + internal reference. + +* vref_mv: (unsigned int) Voltage reference + if using an external reference, set this to the reference voltage in mV, + otherwise it will default to the internal value (2500mV). This value will be + bounded with limits accepted by the chip, described in the datasheet. + + If no structure is provided, the configuration defaults to single ended + operation and internal voltage reference (2.5V). Description ----------- -This driver implements support for the Texas Instruments ADS7828. +This driver implements support for the Texas Instruments ADS7828 and ADS7830. -This device is a 12-bit 8-channel A-D converter. +The ADS7828 device is a 12-bit 8-channel A/D converter, while the ADS7830 does +8-bit sampling. It can operate in single ended mode (8 +ve inputs) or in differential mode, where 4 differential pairs can be measured. @@ -34,3 +52,7 @@ where 4 differential pairs can be measured. The chip also has the facility to use an external voltage reference. This may be required if your hardware supplies the ADS7828 from a 5V supply, see the datasheet for more details. + +There is no reliable way to identify this chip, so the driver will not scan +some addresses to try to auto-detect it. That means that you will have to +statically declare the device in the platform support code. diff --git a/trunk/Documentation/hwmon/coretemp b/trunk/Documentation/hwmon/coretemp index f17256f069ba..3374c085678d 100644 --- a/trunk/Documentation/hwmon/coretemp +++ b/trunk/Documentation/hwmon/coretemp @@ -98,8 +98,10 @@ Process Processor TjMax(C) 45nm Atom Processors D525/510/425/410 100 + Z670/650 90 Z560/550/540/530P/530/520PT/520/515/510PT/510P 90 Z510/500 90 + N570/550 100 N475/470/455/450 100 N280/270 90 330/230 125 diff --git a/trunk/Documentation/hwmon/da9055 b/trunk/Documentation/hwmon/da9055 new file mode 100644 index 000000000000..855c3f536e00 --- /dev/null +++ b/trunk/Documentation/hwmon/da9055 @@ -0,0 +1,47 @@ +Supported chips: + * Dialog Semiconductors DA9055 PMIC + Prefix: 'da9055' + Datasheet: Datasheet is not publicly available. + +Authors: David Dajun Chen + +Description +----------- + +The DA9055 provides an Analogue to Digital Converter (ADC) with 10 bits +resolution and track and hold circuitry combined with an analogue input +multiplexer. The analogue input multiplexer will allow conversion of up to 5 +different inputs. The track and hold circuit ensures stable input voltages at +the input of the ADC during the conversion. + +The ADC is used to measure the following inputs: +Channel 0: VDDOUT - measurement of the system voltage +Channel 1: ADC_IN1 - high impedance input (0 - 2.5V) +Channel 2: ADC_IN2 - high impedance input (0 - 2.5V) +Channel 3: ADC_IN3 - high impedance input (0 - 2.5V) +Channel 4: Internal Tjunc. - sense (internal temp. sensor) + +By using sysfs attributes we can measure the system voltage VDDOUT, +chip junction temperature and auxiliary channels voltages. + +Voltage Monitoring +------------------ + +Voltages are sampled in a AUTO mode it can be manually sampled too and results +are stored in a 10 bit ADC. + +The system voltage is calculated as: + Milli volt = ((ADC value * 1000) / 85) + 2500 + +The voltages on ADC channels 1, 2 and 3 are calculated as: + Milli volt = (ADC value * 1000) / 102 + +Temperature Monitoring +---------------------- + +Temperatures are sampled by a 10 bit ADC. Junction temperatures +are monitored by the ADC channels. + +The junction temperature is calculated: + Degrees celsius = -0.4084 * (ADC_RES - T_OFFSET) + 307.6332 +The junction temperature attribute is supported by the driver. diff --git a/trunk/Documentation/kbuild/makefiles.txt b/trunk/Documentation/kbuild/makefiles.txt index ec9ae6708691..14c3f4f1b617 100644 --- a/trunk/Documentation/kbuild/makefiles.txt +++ b/trunk/Documentation/kbuild/makefiles.txt @@ -1175,15 +1175,16 @@ When kbuild executes, the following steps are followed (roughly): in an init section in the image. Platform code *must* copy the blob to non-init memory prior to calling unflatten_device_tree(). - Example: - #arch/x86/platform/ce4100/Makefile - clean-files := *dtb.S + To use this command, simply add *.dtb into obj-y or targets, or make + some other target depend on %.dtb - DTC_FLAGS := -p 1024 - obj-y += foo.dtb.o + A central rule exists to create $(obj)/%.dtb from $(src)/%.dts; + architecture Makefiles do no need to explicitly write out that rule. - $(obj)/%.dtb: $(src)/%.dts - $(call cmd,dtc) + Example: + targets += $(dtb-y) + clean-files += *.dtb + DTC_FLAGS ?= -p 1024 --- 6.8 Custom kbuild commands diff --git a/trunk/Documentation/kernel-parameters.txt b/trunk/Documentation/kernel-parameters.txt index 9776f068306b..28bd0f0e32c5 100644 --- a/trunk/Documentation/kernel-parameters.txt +++ b/trunk/Documentation/kernel-parameters.txt @@ -1304,6 +1304,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. lapic [X86-32,APIC] Enable the local APIC even if BIOS disabled it. + lapic= [x86,APIC] "notscdeadline" Do not use TSC deadline + value for LAPIC timer one-shot implementation. Default + back to the programmable timer unit in the LAPIC. + lapic_timer_c2_ok [X86,APIC] trust the local apic timer in C2 power state. @@ -1984,6 +1988,20 @@ bytes respectively. Such letter suffixes can also be entirely omitted. nox2apic [X86-64,APIC] Do not enable x2APIC mode. + cpu0_hotplug [X86] Turn on CPU0 hotplug feature when + CONFIG_BOOTPARAM_HOTPLUG_CPU0 is off. + Some features depend on CPU0. Known dependencies are: + 1. Resume from suspend/hibernate depends on CPU0. + Suspend/hibernate will fail if CPU0 is offline and you + need to online CPU0 before suspend/hibernate. + 2. PIC interrupts also depend on CPU0. CPU0 can't be + removed if a PIC interrupt is detected. + It's said poweroff/reboot may depend on CPU0 on some + machines although I haven't seen such issues so far + after CPU0 is offline on a few tested machines. + If the dependencies are under your control, you can + turn on cpu0_hotplug. + nptcg= [IA-64] Override max number of concurrent global TLB purges which is reported from either PAL_VM_SUMMARY or SAL PALO. @@ -2394,6 +2412,27 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ramdisk_size= [RAM] Sizes of RAM disks in kilobytes See Documentation/blockdev/ramdisk.txt. + rcu_nocbs= [KNL,BOOT] + In kernels built with CONFIG_RCU_NOCB_CPU=y, set + the specified list of CPUs to be no-callback CPUs. + Invocation of these CPUs' RCU callbacks will + be offloaded to "rcuoN" kthreads created for + that purpose. This reduces OS jitter on the + offloaded CPUs, which can be useful for HPC and + real-time workloads. It can also improve energy + efficiency for asymmetric multiprocessors. + + rcu_nocbs_poll [KNL,BOOT] + Rather than requiring that offloaded CPUs + (specified by rcu_nocbs= above) explicitly + awaken the corresponding "rcuoN" kthreads, + make these kthreads poll for callbacks. + This improves the real-time response for the + offloaded CPUs by relieving them of the need to + wake up the corresponding kthread, but degrades + energy efficiency by requiring that the kthreads + periodically wake up to do the polling. + rcutree.blimit= [KNL,BOOT] Set maximum number of finished RCU callbacks to process in one batch. @@ -2859,6 +2898,22 @@ bytes respectively. Such letter suffixes can also be entirely omitted. to facilitate early boot debugging. See also Documentation/trace/events.txt + trace_options=[option-list] + [FTRACE] Enable or disable tracer options at boot. + The option-list is a comma delimited list of options + that can be enabled or disabled just as if you were + to echo the option name into + + /sys/kernel/debug/tracing/trace_options + + For example, to enable stacktrace option (to dump the + stack trace of each event), add to the command line: + + trace_options=stacktrace + + See also Documentation/trace/ftrace.txt "trace options" + section. + transparent_hugepage= [KNL] Format: [always|madvise|never] diff --git a/trunk/Documentation/memory-barriers.txt b/trunk/Documentation/memory-barriers.txt index 2759f7c188f0..3c4e1b3b80a1 100644 --- a/trunk/Documentation/memory-barriers.txt +++ b/trunk/Documentation/memory-barriers.txt @@ -251,12 +251,13 @@ And there are a number of things that _must_ or _must_not_ be assumed: And for: - *A = X; Y = *A; + *A = X; *(A + 4) = Y; - we may get either of: + we may get any of: - STORE *A = X; Y = LOAD *A; - STORE *A = Y = X; + STORE *A = X; STORE *(A + 4) = Y; + STORE *(A + 4) = Y; STORE *A = X; + STORE {*A, *(A + 4) } = {X, Y}; ========================= diff --git a/trunk/Documentation/memory-hotplug.txt b/trunk/Documentation/memory-hotplug.txt index 6d0c2519cf47..c6f993d491b5 100644 --- a/trunk/Documentation/memory-hotplug.txt +++ b/trunk/Documentation/memory-hotplug.txt @@ -161,7 +161,8 @@ a recent addition and not present on older kernels. in the memory block. 'state' : read-write at read: contains online/offline state of memory. - at write: user can specify "online", "offline" command + at write: user can specify "online_kernel", + "online_movable", "online", "offline" command which will be performed on al sections in the block. 'phys_device' : read-only: designed to show the name of physical memory device. This is not well implemented now. @@ -255,6 +256,17 @@ For onlining, you have to write "online" to the section's state file as: % echo online > /sys/devices/system/memory/memoryXXX/state +This onlining will not change the ZONE type of the target memory section, +If the memory section is in ZONE_NORMAL, you can change it to ZONE_MOVABLE: + +% echo online_movable > /sys/devices/system/memory/memoryXXX/state +(NOTE: current limit: this memory section must be adjacent to ZONE_MOVABLE) + +And if the memory section is in ZONE_MOVABLE, you can change it to ZONE_NORMAL: + +% echo online_kernel > /sys/devices/system/memory/memoryXXX/state +(NOTE: current limit: this memory section must be adjacent to ZONE_NORMAL) + After this, section memoryXXX's state will be 'online' and the amount of available memory will be increased. @@ -377,15 +389,18 @@ The third argument is passed by pointer of struct memory_notify. struct memory_notify { unsigned long start_pfn; unsigned long nr_pages; + int status_change_nid_normal; int status_change_nid; } start_pfn is start_pfn of online/offline memory. nr_pages is # of pages of online/offline memory. +status_change_nid_normal is set node id when N_NORMAL_MEMORY of nodemask +is (will be) set/clear, if this is -1, then nodemask status is not changed. status_change_nid is set node id when N_HIGH_MEMORY of nodemask is (will be) set/clear. It means a new(memoryless) node gets new memory by online and a node loses all memory. If this is -1, then nodemask status is not changed. -If status_changed_nid >= 0, callback should create/discard structures for the +If status_changed_nid* >= 0, callback should create/discard structures for the node if necessary. -------------- diff --git a/trunk/Documentation/mmc/mmc-dev-attrs.txt b/trunk/Documentation/mmc/mmc-dev-attrs.txt index 22ae8441489f..0d98fac8893b 100644 --- a/trunk/Documentation/mmc/mmc-dev-attrs.txt +++ b/trunk/Documentation/mmc/mmc-dev-attrs.txt @@ -25,6 +25,8 @@ All attributes are read-only. serial Product Serial Number (from CID Register) erase_size Erase group size preferred_erase_size Preferred erase size + raw_rpmb_size_mult RPMB partition size + rel_sectors Reliable write sector count Note on Erase Size and Preferred Erase Size: @@ -65,6 +67,11 @@ Note on Erase Size and Preferred Erase Size: "preferred_erase_size" is in bytes. +Note on raw_rpmb_size_mult: + "raw_rpmb_size_mult" is a mutliple of 128kB block. + RPMB size in byte is calculated by using the following equation: + RPMB partition size = 128kB x raw_rpmb_size_mult + SD/MMC/SDIO Clock Gating Attribute ================================== diff --git a/trunk/Documentation/pinctrl.txt b/trunk/Documentation/pinctrl.txt index 3b4ee5328868..da40efbef6ec 100644 --- a/trunk/Documentation/pinctrl.txt +++ b/trunk/Documentation/pinctrl.txt @@ -364,6 +364,9 @@ will get an pin number into its handled number range. Further it is also passed the range ID value, so that the pin controller knows which range it should deal with. +Calling pinctrl_add_gpio_range from pinctrl driver is DEPRECATED. Please see +section 2.1 of Documentation/devicetree/bindings/gpio/gpio.txt on how to bind +pinctrl and gpio drivers. PINMUX interfaces ================= @@ -1193,4 +1196,6 @@ foo_switch() ... } -The above has to be done from process context. +The above has to be done from process context. The reservation of the pins +will be done when the state is activated, so in effect one specific pin +can be used by different functions at different times on a running system. diff --git a/trunk/Documentation/power/pm_qos_interface.txt b/trunk/Documentation/power/pm_qos_interface.txt index 17e130a80347..79a2a58425ee 100644 --- a/trunk/Documentation/power/pm_qos_interface.txt +++ b/trunk/Documentation/power/pm_qos_interface.txt @@ -99,7 +99,7 @@ reading the aggregated value does not require any locking mechanism. From kernel mode the use of this interface is the following: -int dev_pm_qos_add_request(device, handle, value): +int dev_pm_qos_add_request(device, handle, type, value): Will insert an element into the list for that identified device with the target value. Upon change to this list the new target is recomputed and any registered notifiers are called only if the target value is now different. diff --git a/trunk/Documentation/telephony/00-INDEX b/trunk/Documentation/telephony/00-INDEX deleted file mode 100644 index 4ffe0ed5b6fb..000000000000 --- a/trunk/Documentation/telephony/00-INDEX +++ /dev/null @@ -1,4 +0,0 @@ -00-INDEX - - this file. -ixj.txt - - document describing the Quicknet drivers. diff --git a/trunk/Documentation/telephony/ixj.txt b/trunk/Documentation/telephony/ixj.txt deleted file mode 100644 index db94fb6c5678..000000000000 --- a/trunk/Documentation/telephony/ixj.txt +++ /dev/null @@ -1,394 +0,0 @@ -Linux Quicknet-Drivers-Howto -Quicknet Technologies, Inc. (www.quicknet.net) -Version 0.3.4 December 18, 1999 - -1.0 Introduction - -This document describes the first GPL release version of the Linux -driver for the Quicknet Internet PhoneJACK and Internet LineJACK -cards. More information about these cards is available at -www.quicknet.net. The driver version discussed in this document is -0.3.4. - -These cards offer nice telco style interfaces to use your standard -telephone/key system/PBX as the user interface for VoIP applications. -The Internet LineJACK also offers PSTN connectivity for a single line -Internet to PSTN gateway. Of course, you can add more than one card -to a system to obtain multi-line functionality. At this time, the -driver supports the POTS port on both the Internet PhoneJACK and the -Internet LineJACK, but the PSTN port on the latter card is not yet -supported. - -This document, and the drivers for the cards, are intended for a -limited audience that includes technically capable programmers who -would like to experiment with Quicknet cards. The drivers are -considered in ALPHA status and are not yet considered stable enough -for general, widespread use in an unlimited audience. - -That's worth saying again: - -THE LINUX DRIVERS FOR QUICKNET CARDS ARE PRESENTLY IN A ALPHA STATE -AND SHOULD NOT BE CONSIDERED AS READY FOR NORMAL WIDESPREAD USE. - -They are released early in the spirit of Internet development and to -make this technology available to innovators who would benefit from -early exposure. - -When we promote the device driver to "beta" level it will be -considered ready for non-programmer, non-technical users. Until then, -please be aware that these drivers may not be stable and may affect -the performance of your system. - - -1.1 Latest Additions/Improvements - -The 0.3.4 version of the driver is the first GPL release. Several -features had to be removed from the prior binary only module, mostly -for reasons of Intellectual Property rights. We can't release -information that is not ours - so certain aspects of the driver had to -be removed to protect the rights of others. - -Specifically, very old Internet PhoneJACK cards have non-standard -G.723.1 codecs (due to the early nature of the DSPs in those days). -The auto-conversion code to bring those cards into compliance with -today's standards is available as a binary only module to those people -needing it. If you bought your card after 1997 or so, you are OK - -it's only the very old cards that are affected. - -Also, the code to download G.728/G.729/G.729a codecs to the DSP is -available as a binary only module as well. This IP is not ours to -release. - -Hooks are built into the GPL driver to allow it to work with other -companion modules that are completely separate from this module. - -1.2 Copyright, Trademarks, Disclaimer, & Credits - -Copyright - -Copyright (c) 1999 Quicknet Technologies, Inc. Permission is granted -to freely copy and distribute this document provided you preserve it -in its original form. For corrections and minor changes contact the -maintainer at linux@quicknet.net. - -Trademarks - -Internet PhoneJACK and Internet LineJACK are registered trademarks of -Quicknet Technologies, Inc. - -Disclaimer - -Much of the info in this HOWTO is early information released by -Quicknet Technologies, Inc. for the express purpose of allowing early -testing and use of the Linux drivers developed for their products. -While every attempt has been made to be thorough, complete and -accurate, the information contained here may be unreliable and there -are likely a number of errors in this document. Please let the -maintainer know about them. Since this is free documentation, it -should be obvious that neither I nor previous authors can be held -legally responsible for any errors. - -Credits - -This HOWTO was written by: - - Greg Herlein - Ed Okerson - -1.3 Future Plans: You Can Help - -Please let the maintainer know of any errors in facts, opinions, -logic, spelling, grammar, clarity, links, etc. But first, if the date -is over a month old, check to see that you have the latest -version. Please send any info that you think belongs in this document. - -You can also contribute code and/or bug-fixes for the sample -applications. - - -1.4 Where to get things - -Info on latest versions of the driver are here: - -http://web.archive.org/web/*/http://www.quicknet.net/develop.htm - -1.5 Mailing List - -Quicknet operates a mailing list to provide a public forum on using -these drivers. - -To subscribe to the linux-sdk mailing list, send an email to: - - majordomo@linux.quicknet.net - -In the body of the email, type: - - subscribe linux-sdk - -Please delete any signature block that you would normally add to the -bottom of your email - it tends to confuse majordomo. - -To send mail to the list, address your mail to - - linux-sdk@linux.quicknet.net - -Your message will go out to everyone on the list. - -To unsubscribe to the linux-sdk mailing list, send an email to: - - majordomo@linux.quicknet.net - -In the body of the email, type: - - unsubscribe linux-sdk - - - -2.0 Requirements - -2.1 Quicknet Card(s) - -You will need at least one Internet PhoneJACK or Internet LineJACK -cards. These are ISA or PCI bus devices that use Plug-n-Play for -configuration, and use no IRQs. The driver will support up to 16 -cards in any one system, of any mix between the two types. - -Note that you will need two cards to do any useful testing alone, since -you will need a card on both ends of the connection. Of course, if -you are doing collaborative work, perhaps your friends or coworkers -have cards too. If not, we'll gladly sell them some! - - -2.2 ISAPNP - -Since the Quicknet cards are Plug-n-Play devices, you will need the -isapnp tools package to configure the cards, or you can use the isapnp -module to autoconfigure them. The former package probably came with -your Linux distribution. Documentation on this package is available -online at: - -http://mailer.wiwi.uni-marburg.de/linux/LDP/HOWTO/Plug-and-Play-HOWTO.html - -The isapnp autoconfiguration is available on the Quicknet website at: - - http://www.quicknet.net/develop.htm - -though it may be in the kernel by the time you read this. - - -3.0 Card Configuration - -If you did not get your drivers as part of the linux kernel, do the -following to install them: - - a. untar the distribution file. We use the following command: - tar -xvzf ixj-0.x.x.tgz - -This creates a subdirectory holding all the necessary files. Go to that -subdirectory. - - b. run the "ixj_dev_create" script to remove any stray device -files left in the /dev directory, and to create the new officially -designated device files. Note that the old devices were called -/dev/ixj, and the new method uses /dev/phone. - - c. type "make;make install" - this will compile and install the -module. - - d. type "depmod -av" to rebuild all your kernel version dependencies. - - e. if you are using the isapnp module to configure the cards - automatically, then skip to step f. Otherwise, ensure that you - have run the isapnp configuration utility to properly configure - the cards. - - e1. The Internet PhoneJACK has one configuration register that - requires 16 IO ports. The Internet LineJACK card has two - configuration registers and isapnp reports that IO 0 - requires 16 IO ports and IO 1 requires 8. The Quicknet - driver assumes that these registers are configured to be - contiguous, i.e. if IO 0 is set to 0x340 then IO 1 should - be set to 0x350. - - Make sure that none of the cards overlap if you have - multiple cards in the system. - - If you are new to the isapnp tools, you can jumpstart - yourself by doing the following: - - e2. go to the /etc directory and run pnpdump to get a blank - isapnp.conf file. - - pnpdump > /etc/isapnp.conf - - e3. edit the /etc/isapnp.conf file to set the IO warnings and - the register IO addresses. The IO warnings means that you - should find the line in the file that looks like this: - - (CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING - - and you should edit the line to look like this: - - (CONFLICT (IO WARNING)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # - or WARNING - - The next step is to set the IO port addresses. The issue - here is that isapnp does not identify all of the ports out - there. Specifically any device that does not have a driver - or module loaded by Linux will not be registered. This - includes older sound cards and network cards. We have - found that the IO port 0x300 is often used even though - isapnp claims that no-one is using those ports. We - recommend that for a single card installation that port - 0x340 (and 0x350) be used. The IO port line should change - from this: - - (IO 0 (SIZE 16) (BASE 0x0300) (CHECK)) - - to this: - - (IO 0 (SIZE 16) (BASE 0x0340) ) - - e4. if you have multiple Quicknet cards, make sure that you do - not have any overlaps. Be especially careful if you are - mixing Internet PhoneJACK and Internet LineJACK cards in - the same system. In these cases we recommend moving the - IO port addresses to the 0x400 block. Please note that on - a few machines the 0x400 series are used. Feel free to - experiment with other addresses. Our cards have been - proven to work using IO addresses of up to 0xFF0. - - e5. the last step is to uncomment the activation line so the - drivers will be associated with the port. This means the - line (immediately below) the IO line should go from this: - - # (ACT Y) - - to this: - - (ACT Y) - - Once you have finished editing the isapnp.conf file you - must submit it into the pnp driverconfigure the cards. - This is done using the following command: - - isapnp isapnp.conf - - If this works you should see a line that identifies the - Quicknet device, the IO port(s) chosen, and a message - "Enabled OK". - - f. if you are loading the module by hand, use insmod. An example -of this would look like this: - - insmod phonedev - insmod ixj dspio=0x320,0x310 xio=0,0x330 - -Then verify the module loaded by running lsmod. If you are not using a -module that matches your kernel version, you may need to "force" the -load using the -f option in the insmod command. - - insmod phonedev - insmod -f ixj dspio=0x320,0x310 xio=0,0x330 - - -If you are using isapnp to autoconfigure your card, then you do NOT -need any of the above, though you need to use depmod to load the -driver, like this: - - depmod ixj - -which will result in the needed drivers getting loaded automatically. - - g. if you are planning on having the kernel automatically request -the module for you, then you need to edit /etc/conf.modules and add the -following lines: - - options ixj dspio=0x340 xio=0x330 ixjdebug=0 - -If you do this, then when you execute an application that uses the -module the kernel will request that it is loaded. - - h. if you want non-root users to be able to read and write to the -ixj devices (this is a good idea!) you should do the following: - - - decide upon a group name to use and create that group if - needed. Add the user names to that group that you wish to - have access to the device. For example, we typically will - create a group named "ixj" in /etc/group and add all users - to that group that we want to run software that can use the - ixjX devices. - - - change the permissions on the device files, like this: - - chgrp ixj /dev/ixj* - chmod 660 /dev/ixj* - -Once this is done, then non-root users should be able to use the -devices. If you have enabled autoloading of modules, then the user -should be able to open the device and have the module loaded -automatically for them. - - -4.0 Driver Installation problems. - -We have tested these drivers on the 2.2.9, 2.2.10, 2.2.12, and 2.2.13 kernels -and in all cases have eventually been able to get the drivers to load and -run. We have found four types of problems that prevent this from happening. -The problems and solutions are: - - a. A step was missed in the installation. Go back and use section 3 -as a checklist. Many people miss running the ixj_dev_create script and thus -never load the device names into the filesystem. - - b. The kernel is inconsistently linked. We have found this problem in -the Out Of the Box installation of several distributions. The symptoms -are that neither driver will load, and that the unknown symbols include "jiffy" -and "kmalloc". The solution is to recompile both the kernel and the -modules. The command string for the final compile looks like this: - - In the kernel directory: - 1. cp .config /tmp - 2. make mrproper - 3. cp /tmp/.config . - 4. make clean;make bzImage;make modules;make modules_install - -This rebuilds both the kernel and all the modules and makes sure they all -have the same linkages. This generally solves the problem once the new -kernel is installed and the system rebooted. - - c. The kernel has been patched, then unpatched. This happens when -someone decides to use an earlier kernel after they load a later kernel. -The symptoms are proceeding through all three above steps and still not -being able to load the driver. What has happened is that the generated -header files are out of sync with the kernel itself. The solution is -to recompile (again) using "make mrproper". This will remove and then -regenerate all the necessary header files. Once this is done, then you -need to install and reboot the kernel. We have not seen any problem -loading one of our drivers after this treatment. - -5.0 Known Limitations - -We cannot currently play "dial-tone" and listen for DTMF digits at the -same time using the ISA PhoneJACK. This is a bug in the 8020 DSP chip -used on that product. All other Quicknet products function normally -in this regard. We have a work-around, but it's not done yet. Until -then, if you want dial-tone, you can always play a recorded dial-tone -sound into the audio until you have gathered the DTMF digits. - - - - - - - - - - - - - - - - - diff --git a/trunk/Documentation/thermal/sysfs-api.txt b/trunk/Documentation/thermal/sysfs-api.txt index ca1a1a34970e..88c02334e356 100644 --- a/trunk/Documentation/thermal/sysfs-api.txt +++ b/trunk/Documentation/thermal/sysfs-api.txt @@ -112,6 +112,29 @@ temperature) and throttle appropriate devices. trip: indicates which trip point the cooling devices is associated with in this thermal zone. +1.4 Thermal Zone Parameters +1.4.1 struct thermal_bind_params + This structure defines the following parameters that are used to bind + a zone with a cooling device for a particular trip point. + .cdev: The cooling device pointer + .weight: The 'influence' of a particular cooling device on this zone. + This is on a percentage scale. The sum of all these weights + (for a particular zone) cannot exceed 100. + .trip_mask:This is a bit mask that gives the binding relation between + this thermal zone and cdev, for a particular trip point. + If nth bit is set, then the cdev and thermal zone are bound + for trip point n. + .match: This call back returns success(0) if the 'tz and cdev' need to + be bound, as per platform data. +1.4.2 struct thermal_zone_params + This structure defines the platform level parameters for a thermal zone. + This data, for each thermal zone should come from the platform layer. + This is an optional feature where some platforms can choose not to + provide this data. + .governor_name: Name of the thermal governor used for this zone + .num_tbps: Number of thermal_bind_params entries for this zone + .tbp: thermal_bind_params entries + 2. sysfs attributes structure RO read only value @@ -126,6 +149,7 @@ Thermal zone device sys I/F, created once it's registered: |---type: Type of the thermal zone |---temp: Current temperature |---mode: Working mode of the thermal zone + |---policy: Thermal governor used for this zone |---trip_point_[0-*]_temp: Trip point temperature |---trip_point_[0-*]_type: Trip point type |---trip_point_[0-*]_hyst: Hysteresis value for this trip point @@ -187,6 +211,10 @@ mode charge of the thermal management. RW, Optional +policy + One of the various thermal governors used for a particular zone. + RW, Required + trip_point_[0-*]_temp The temperature above which trip point will be fired. Unit: millidegree Celsius @@ -264,6 +292,7 @@ method, the sys I/F structure will be built like this: |---type: acpitz |---temp: 37000 |---mode: enabled + |---policy: step_wise |---trip_point_0_temp: 100000 |---trip_point_0_type: critical |---trip_point_1_temp: 80000 @@ -305,3 +334,38 @@ to a thermal_zone_device when it registers itself with the framework. The event will be one of:{THERMAL_AUX0, THERMAL_AUX1, THERMAL_CRITICAL, THERMAL_DEV_FAULT}. Notification can be sent when the current temperature crosses any of the configured thresholds. + +5. Export Symbol APIs: + +5.1: get_tz_trend: +This function returns the trend of a thermal zone, i.e the rate of change +of temperature of the thermal zone. Ideally, the thermal sensor drivers +are supposed to implement the callback. If they don't, the thermal +framework calculated the trend by comparing the previous and the current +temperature values. + +5.2:get_thermal_instance: +This function returns the thermal_instance corresponding to a given +{thermal_zone, cooling_device, trip_point} combination. Returns NULL +if such an instance does not exist. + +5.3:notify_thermal_framework: +This function handles the trip events from sensor drivers. It starts +throttling the cooling devices according to the policy configured. +For CRITICAL and HOT trip points, this notifies the respective drivers, +and does actual throttling for other trip points i.e ACTIVE and PASSIVE. +The throttling policy is based on the configured platform data; if no +platform data is provided, this uses the step_wise throttling policy. + +5.4:thermal_cdev_update: +This function serves as an arbitrator to set the state of a cooling +device. It sets the cooling device to the deepest cooling state if +possible. + +5.5:thermal_register_governor: +This function lets the various thermal governors to register themselves +with the Thermal framework. At run time, depending on a zone's platform +data, a particular governor is used for throttling. + +5.6:thermal_unregister_governor: +This function unregisters a governor from the thermal framework. diff --git a/trunk/Documentation/usb/error-codes.txt b/trunk/Documentation/usb/error-codes.txt index b3f606b81a03..9c3eb845ebe5 100644 --- a/trunk/Documentation/usb/error-codes.txt +++ b/trunk/Documentation/usb/error-codes.txt @@ -21,6 +21,8 @@ Non-USB-specific: USB-specific: +-EBUSY The URB is already active. + -ENODEV specified USB-device or bus doesn't exist -ENOENT specified interface or endpoint does not exist or @@ -35,9 +37,8 @@ USB-specific: d) ISO: number_of_packets is < 0 e) various other cases --EAGAIN a) specified ISO start frame too early - b) (using ISO-ASAP) too much scheduled for the future - wait some time and try again. +-EXDEV ISO: URB_ISO_ASAP wasn't specified and all the frames + the URB would be scheduled in have already expired. -EFBIG Host controller driver can't schedule that many ISO frames. diff --git a/trunk/Documentation/usb/mass-storage.txt b/trunk/Documentation/usb/mass-storage.txt index e9b9334627bf..59063ad7a60d 100644 --- a/trunk/Documentation/usb/mass-storage.txt +++ b/trunk/Documentation/usb/mass-storage.txt @@ -20,9 +20,9 @@ This document describes how to use the gadget from user space, its relation to mass storage function (or MSF) and different gadgets - using it, and how it differs from File Storage Gadget (or FSG). It - will talk only briefly about how to use MSF within composite - gadgets. + using it, and how it differs from File Storage Gadget (or FSG) + (which is no longer included in Linux). It will talk only briefly + about how to use MSF within composite gadgets. * Module parameters @@ -198,16 +198,15 @@ The Mass Storage Function and thus the Mass Storage Gadget has been based on the File Storage Gadget. The difference between the two is that MSG is a composite gadget (ie. uses the composite framework) - while file storage gadget is a traditional gadget. From userspace + while file storage gadget was a traditional gadget. From userspace point of view this distinction does not really matter, but from kernel hacker's point of view, this means that (i) MSG does not duplicate code needed for handling basic USB protocol commands and (ii) MSF can be used in any other composite gadget. - Because of that, File Storage Gadget has been deprecated and - scheduled to be removed in Linux 3.8. All users need to transition - to the Mass Storage Gadget by that time. The two gadgets behave - mostly the same from the outside except: + Because of that, File Storage Gadget has been removed in Linux 3.8. + All users need to transition to the Mass Storage Gadget. The two + gadgets behave mostly the same from the outside except: 1. In FSG the “removable” and “cdrom” module parameters set the flag for all logical units whereas in MSG they accept a list of y/n diff --git a/trunk/Documentation/x86/boot.txt b/trunk/Documentation/x86/boot.txt index 9efceff51bfb..f15cb74c4f78 100644 --- a/trunk/Documentation/x86/boot.txt +++ b/trunk/Documentation/x86/boot.txt @@ -1013,7 +1013,7 @@ boot_params as that of 16-bit boot protocol, the boot loader should also fill the additional fields of the struct boot_params as that described in zero-page.txt. -After setupping the struct boot_params, the boot loader can load the +After setting up the struct boot_params, the boot loader can load the 32/64-bit kernel in the same way as that of 16-bit boot protocol. In 32-bit boot protocol, the kernel is started by jumping to the @@ -1023,7 +1023,7 @@ In 32-bit boot protocol, the kernel is started by jumping to the At entry, the CPU must be in 32-bit protected mode with paging disabled; a GDT must be loaded with the descriptors for selectors __BOOT_CS(0x10) and __BOOT_DS(0x18); both descriptors must be 4G flat -segment; __BOOS_CS must have execute/read permission, and __BOOT_DS +segment; __BOOT_CS must have execute/read permission, and __BOOT_DS must have read/write permission; CS must be __BOOT_CS and DS, ES, SS must be __BOOT_DS; interrupt must be disabled; %esi must hold the base address of the struct boot_params; %ebp, %edi and %ebx must be zero. diff --git a/trunk/Documentation/zh_CN/arm/kernel_user_helpers.txt b/trunk/Documentation/zh_CN/arm/kernel_user_helpers.txt new file mode 100644 index 000000000000..cd7fc8f34cf9 --- /dev/null +++ b/trunk/Documentation/zh_CN/arm/kernel_user_helpers.txt @@ -0,0 +1,284 @@ +Chinese translated version of Documentation/arm/kernel_user_helpers.txt + +If you have any comment or update to the content, please contact the +original document maintainer directly. However, if you have a problem +communicating in English you can also ask the Chinese maintainer for +help. Contact the Chinese maintainer if this translation is outdated +or if there is a problem with the translation. + +Maintainer: Nicolas Pitre + Dave Martin +Chinese maintainer: Fu Wei +--------------------------------------------------------------------- +Documentation/arm/kernel_user_helpers.txt 的中文翻译 + +如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文 +交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻 +译存在问题,请联系中文版维护者。 +英文版维护者: Nicolas Pitre + Dave Martin +中文版维护者: 傅炜 Fu Wei +中文版翻译者: 傅炜 Fu Wei +中文版校译者: 宋冬生 Dongsheng Song + 傅炜 Fu Wei + + +以下为正文 +--------------------------------------------------------------------- +内核提供的用户空间辅助代码 +========================= + +在内核内存空间的固定地址处,有一个由内核提供并可从用户空间访问的代码 +段。它用于向用户空间提供因在许多 ARM CPU 中未实现的特性和/或指令而需 +内核提供帮助的某些操作。这些代码直接在用户模式下执行的想法是为了获得 +最佳效率,但那些与内核计数器联系过于紧密的部分,则被留给了用户库实现。 +事实上,此代码甚至可能因不同的 CPU 而异,这取决于其可用的指令集或它 +是否为 SMP 系统。换句话说,内核保留在不作出警告的情况下根据需要更改 +这些代码的权利。只有本文档描述的入口及其结果是保证稳定的。 + +这与完全成熟的 VDSO 实现不同(但两者并不冲突),尽管如此,VDSO 可阻止 +某些通过常量高效跳转到那些代码段的汇编技巧。且由于那些代码段在返回用户 +代码前仅使用少量的代码周期,则一个 VDSO 间接远程调用将会在这些简单的 +操作上增加一个可测量的开销。 + +在对那些拥有原生支持的新型处理器进行代码优化时,仅在已为其他操作使用 +了类似的新增指令,而导致二进制结果已与早期 ARM 处理器不兼容的情况下, +用户空间才应绕过这些辅助代码,并在内联函数中实现这些操作(无论是通过 +编译器在代码中直接放置,还是作为库函数调用实现的一部分)。也就是说, +如果你编译的代码不会为了其他目的使用新指令,则不要仅为了避免使用这些 +内核辅助代码,导致二进制程序无法在早期处理器上运行。 + +新的辅助代码可能随着时间的推移而增加,所以新内核中的某些辅助代码在旧 +内核中可能不存在。因此,程序必须在对任何辅助代码调用假设是安全之前, +检测 __kuser_helper_version 的值(见下文)。理想情况下,这种检测应该 +只在进程启动时执行一次;如果内核版本不支持所需辅助代码,则该进程可尽早 +中止执行。 + +kuser_helper_version +-------------------- + +位置: 0xffff0ffc + +参考声明: + + extern int32_t __kuser_helper_version; + +定义: + + 这个区域包含了当前运行内核实现的辅助代码版本号。用户空间可以通过读 + 取此版本号以确定特定的辅助代码是否存在。 + +使用范例: + +#define __kuser_helper_version (*(int32_t *)0xffff0ffc) + +void check_kuser_version(void) +{ + if (__kuser_helper_version < 2) { + fprintf(stderr, "can't do atomic operations, kernel too old\n"); + abort(); + } +} + +注意: + + 用户空间可以假设这个域的值不会在任何单个进程的生存期内改变。也就 + 是说,这个域可以仅在库的初始化阶段或进程启动阶段读取一次。 + +kuser_get_tls +------------- + +位置: 0xffff0fe0 + +参考原型: + + void * __kuser_get_tls(void); + +输入: + + lr = 返回地址 + +输出: + + r0 = TLS 值 + +被篡改的寄存器: + + 无 + +定义: + + 获取之前通过 __ARM_NR_set_tls 系统调用设置的 TLS 值。 + +使用范例: + +typedef void * (__kuser_get_tls_t)(void); +#define __kuser_get_tls (*(__kuser_get_tls_t *)0xffff0fe0) + +void foo() +{ + void *tls = __kuser_get_tls(); + printf("TLS = %p\n", tls); +} + +注意: + + - 仅在 __kuser_helper_version >= 1 时,此辅助代码存在 + (从内核版本 2.6.12 开始)。 + +kuser_cmpxchg +------------- + +位置: 0xffff0fc0 + +参考原型: + + int __kuser_cmpxchg(int32_t oldval, int32_t newval, volatile int32_t *ptr); + +输入: + + r0 = oldval + r1 = newval + r2 = ptr + lr = 返回地址 + +输出: + + r0 = 成功代码 (零或非零) + C flag = 如果 r0 == 0 则置 1,如果 r0 != 0 则清零。 + +被篡改的寄存器: + + r3, ip, flags + +定义: + + 仅在 *ptr 为 oldval 时原子保存 newval 于 *ptr 中。 + 如果 *ptr 被改变,则返回值为零,否则为非零值。 + 如果 *ptr 被改变,则 C flag 也会被置 1,以实现调用代码中的汇编 + 优化。 + +使用范例: + +typedef int (__kuser_cmpxchg_t)(int oldval, int newval, volatile int *ptr); +#define __kuser_cmpxchg (*(__kuser_cmpxchg_t *)0xffff0fc0) + +int atomic_add(volatile int *ptr, int val) +{ + int old, new; + + do { + old = *ptr; + new = old + val; + } while(__kuser_cmpxchg(old, new, ptr)); + + return new; +} + +注意: + + - 这个例程已根据需要包含了内存屏障。 + + - 仅在 __kuser_helper_version >= 2 时,此辅助代码存在 + (从内核版本 2.6.12 开始)。 + +kuser_memory_barrier +-------------------- + +位置: 0xffff0fa0 + +参考原型: + + void __kuser_memory_barrier(void); + +输入: + + lr = 返回地址 + +输出: + + 无 + +被篡改的寄存器: + + 无 + +定义: + + 应用于任何需要内存屏障以防止手动数据修改带来的一致性问题,以及 + __kuser_cmpxchg 中。 + +使用范例: + +typedef void (__kuser_dmb_t)(void); +#define __kuser_dmb (*(__kuser_dmb_t *)0xffff0fa0) + +注意: + + - 仅在 __kuser_helper_version >= 3 时,此辅助代码存在 + (从内核版本 2.6.15 开始)。 + +kuser_cmpxchg64 +--------------- + +位置: 0xffff0f60 + +参考原型: + + int __kuser_cmpxchg64(const int64_t *oldval, + const int64_t *newval, + volatile int64_t *ptr); + +输入: + + r0 = 指向 oldval + r1 = 指向 newval + r2 = 指向目标值 + lr = 返回地址 + +输出: + + r0 = 成功代码 (零或非零) + C flag = 如果 r0 == 0 则置 1,如果 r0 != 0 则清零。 + +被篡改的寄存器: + + r3, lr, flags + +定义: + + 仅在 *ptr 等于 *oldval 指向的 64 位值时,原子保存 *newval + 指向的 64 位值于 *ptr 中。如果 *ptr 被改变,则返回值为零, + 否则为非零值。 + + 如果 *ptr 被改变,则 C flag 也会被置 1,以实现调用代码中的汇编 + 优化。 + +使用范例: + +typedef int (__kuser_cmpxchg64_t)(const int64_t *oldval, + const int64_t *newval, + volatile int64_t *ptr); +#define __kuser_cmpxchg64 (*(__kuser_cmpxchg64_t *)0xffff0f60) + +int64_t atomic_add64(volatile int64_t *ptr, int64_t val) +{ + int64_t old, new; + + do { + old = *ptr; + new = old + val; + } while(__kuser_cmpxchg64(&old, &new, ptr)); + + return new; +} + +注意: + + - 这个例程已根据需要包含了内存屏障。 + + - 由于这个过程的代码长度(此辅助代码跨越 2 个常规的 kuser “槽”), + 因此 0xffff0f80 不被作为有效的入口点。 + + - 仅在 __kuser_helper_version >= 5 时,此辅助代码存在 + (从内核版本 3.1 开始)。 diff --git a/trunk/Documentation/zh_CN/arm64/memory.txt b/trunk/Documentation/zh_CN/arm64/memory.txt index 83b519314706..a5f6283829f9 100644 --- a/trunk/Documentation/zh_CN/arm64/memory.txt +++ b/trunk/Documentation/zh_CN/arm64/memory.txt @@ -47,21 +47,21 @@ AArch64 Linux 内存布局: ----------------------------------------------------------------------- 0000000000000000 0000007fffffffff 512GB 用户空间 -ffffff8000000000 ffffffbbfffcffff ~240GB vmalloc +ffffff8000000000 ffffffbbfffeffff ~240GB vmalloc -ffffffbbfffd0000 ffffffbcfffdffff 64KB [防护页] +ffffffbbffff0000 ffffffbbffffffff 64KB [防护页] -ffffffbbfffe0000 ffffffbcfffeffff 64KB PCI I/O 空间 +ffffffbc00000000 ffffffbdffffffff 8GB vmemmap -ffffffbbffff0000 ffffffbcffffffff 64KB [防护页] +ffffffbe00000000 ffffffbffbbfffff ~8GB [防护页,未来用于 vmmemap] -ffffffbc00000000 ffffffbdffffffff 8GB vmemmap +ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O 空间 -ffffffbe00000000 ffffffbffbffffff ~8GB [防护页,未来用于 vmmemap] +ffffffbbffff0000 ffffffbcffffffff ~2MB [防护页] ffffffbffc000000 ffffffbfffffffff 64MB 模块 -ffffffc000000000 ffffffffffffffff 256GB 内存空间 +ffffffc000000000 ffffffffffffffff 256GB 内核逻辑内存映射 4KB 页大小的转换表查找: diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS index 140ebd063f1b..e624aa2fc3da 100644 --- a/trunk/MAINTAINERS +++ b/trunk/MAINTAINERS @@ -1129,12 +1129,12 @@ S: Maintained F: drivers/media/platform/s5p-tv/ ARM/SHMOBILE ARM ARCHITECTURE -M: Paul Mundt +M: Simon Horman M: Magnus Damm L: linux-sh@vger.kernel.org W: http://oss.renesas.com Q: http://patchwork.kernel.org/project/linux-sh/list/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git rmobile-latest +T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next S: Supported F: arch/arm/mach-shmobile/ F: drivers/sh/ @@ -1236,6 +1236,7 @@ F: drivers/video/wm8505fb* F: drivers/video/wmt_ge_rops.* F: drivers/tty/serial/vt8500_serial.c F: drivers/rtc/rtc-vt8500-c +F: drivers/mmc/host/wmt-sdmmc.c ARM/ZIPIT Z2 SUPPORT M: Marek Vasut @@ -1246,9 +1247,11 @@ F: arch/arm/mach-pxa/include/mach/z2.h ARM64 PORT (AARCH64 ARCHITECTURE) M: Catalin Marinas +M: Will Deacon L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained F: arch/arm64/ +F: Documentation/arm64/ ASC7621 HARDWARE MONITOR DRIVER M: George Joseph @@ -1367,14 +1370,6 @@ S: Maintained F: drivers/atm/ F: include/linux/atm* -ATMEL AT91 MCI DRIVER -M: Ludovic Desroches -L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) -W: http://www.atmel.com/products/AT91/ -W: http://www.at91.com/ -S: Maintained -F: drivers/mmc/host/at91_mci.c - ATMEL AT91 / AT32 MCI DRIVER M: Ludovic Desroches S: Maintained @@ -1993,7 +1988,6 @@ F: fs/coda/ F: include/linux/coda*.h COMMON CLK FRAMEWORK -M: Mike Turquette M: Mike Turquette L: linux-arm-kernel@lists.infradead.org (same as CLK API & CLKDEV) T: git git://git.linaro.org/people/mturquette/linux.git @@ -3603,7 +3597,6 @@ S: Maintained F: drivers/hv/ F: drivers/hid/hid-hyperv.c F: drivers/net/hyperv/ -F: drivers/staging/hv/ I2C OVER PARALLEL PORT M: Jean Delvare @@ -3796,6 +3789,15 @@ M: Stanislaw Gruszka S: Maintained F: drivers/usb/atm/ueagle-atm.c +INDUSTRY PACK SUBSYSTEM (IPACK) +M: Samuel Iglesias Gonsalvez +M: Jens Taprogge +M: Greg Kroah-Hartman +L: industrypack-devel@lists.sourceforge.net +W: http://industrypack.sourceforge.net +S: Maintained +F: drivers/ipack/ + INTEGRITY MEASUREMENT ARCHITECTURE (IMA) M: Mimi Zohar S: Supported @@ -5695,6 +5697,12 @@ S: Maintained F: drivers/pinctrl/ F: include/linux/pinctrl/ +PIN CONTROLLER - ATMEL AT91 +M: Jean-Christophe Plagniol-Villard +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: drivers/pinctrl/pinctrl-at91.c + PIN CONTROLLER - ST SPEAR M: Viresh Kumar L: spear-devel@list.st.com @@ -7423,6 +7431,7 @@ K: ^Subject:.*(?i)trivial TTY LAYER M: Greg Kroah-Hartman +M: Jiri Slaby S: Supported T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git F: drivers/tty/ @@ -7579,12 +7588,6 @@ L: linux-scsi@vger.kernel.org S: Supported F: drivers/usb/storage/uas.c -USB BLOCK DRIVER (UB ub) -M: Pete Zaitcev -L: linux-usb@vger.kernel.org -S: Supported -F: drivers/block/ub.c - USB CDC ETHERNET DRIVER M: Oliver Neukum L: linux-usb@vger.kernel.org diff --git a/trunk/Makefile b/trunk/Makefile index 3d2fc460b22f..540f7b240c77 100644 --- a/trunk/Makefile +++ b/trunk/Makefile @@ -1,7 +1,7 @@ VERSION = 3 PATCHLEVEL = 7 SUBLEVEL = 0 -EXTRAVERSION = -rc7 +EXTRAVERSION = NAME = Terrified Chipmunk # *DOCUMENTATION* @@ -1321,10 +1321,12 @@ kernelversion: # Clear a bunch of variables before executing the submake tools/: FORCE - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS= -C $(src)/tools/ + $(Q)mkdir -p $(objtree)/tools + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS= O=$(objtree) subdir=tools -C $(src)/tools/ tools/%: FORCE - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS= -C $(src)/tools/ $* + $(Q)mkdir -p $(objtree)/tools + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS= O=$(objtree) subdir=tools -C $(src)/tools/ $* # Single targets # --------------------------------------------------------------------------- diff --git a/trunk/arch/Kconfig b/trunk/arch/Kconfig index 366ec06a5185..cc74aaea116c 100644 --- a/trunk/arch/Kconfig +++ b/trunk/arch/Kconfig @@ -300,15 +300,16 @@ config SECCOMP_FILTER See Documentation/prctl/seccomp_filter.txt for details. -config HAVE_RCU_USER_QS +config HAVE_CONTEXT_TRACKING bool help - Provide kernel entry/exit hooks necessary for userspace - RCU extended quiescent state. Syscalls need to be wrapped inside - rcu_user_exit()-rcu_user_enter() through the slow path using - TIF_NOHZ flag. Exceptions handlers must be wrapped as well. Irqs - are already protected inside rcu_irq_enter/rcu_irq_exit() but - preemption or signal handling on irq exit still need to be protected. + Provide kernel/user boundaries probes necessary for subsystems + that need it, such as userspace RCU extended quiescent state. + Syscalls need to be wrapped inside user_exit()-user_enter() through + the slow path using TIF_NOHZ flag. Exceptions handlers must be + wrapped as well. Irqs are already protected inside + rcu_irq_enter/rcu_irq_exit() but preemption or signal handling on + irq exit still need to be protected. config HAVE_VIRT_CPU_ACCOUNTING bool diff --git a/trunk/arch/alpha/include/asm/Kbuild b/trunk/arch/alpha/include/asm/Kbuild index 64ffc9e9e548..dcfabb9f05a0 100644 --- a/trunk/arch/alpha/include/asm/Kbuild +++ b/trunk/arch/alpha/include/asm/Kbuild @@ -11,3 +11,4 @@ header-y += reg.h header-y += regdef.h header-y += sysinfo.h generic-y += exec.h +generic-y += trace_clock.h diff --git a/trunk/arch/alpha/include/asm/ioctls.h b/trunk/arch/alpha/include/asm/ioctls.h index 80e1cee90f1f..92c557be49fc 100644 --- a/trunk/arch/alpha/include/asm/ioctls.h +++ b/trunk/arch/alpha/include/asm/ioctls.h @@ -95,6 +95,9 @@ #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ #define TIOCVHANGUP 0x5437 +#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ +#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ +#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ #define TIOCSERCONFIG 0x5453 #define TIOCSERGWILD 0x5454 diff --git a/trunk/arch/alpha/include/asm/mman.h b/trunk/arch/alpha/include/asm/mman.h index cbeb3616a28e..0086b472bc2b 100644 --- a/trunk/arch/alpha/include/asm/mman.h +++ b/trunk/arch/alpha/include/asm/mman.h @@ -63,4 +63,15 @@ /* compatibility flags */ #define MAP_FILE 0 +/* + * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. + * This gives us 6 bits, which is enough until someone invents 128 bit address + * spaces. + * + * Assume these are all power of twos. + * When 0 use the default page size. + */ +#define MAP_HUGE_SHIFT 26 +#define MAP_HUGE_MASK 0x3f + #endif /* __ALPHA_MMAN_H__ */ diff --git a/trunk/arch/alpha/kernel/srmcons.c b/trunk/arch/alpha/kernel/srmcons.c index 5d5865204a1d..59b7bbad8394 100644 --- a/trunk/arch/alpha/kernel/srmcons.c +++ b/trunk/arch/alpha/kernel/srmcons.c @@ -205,7 +205,6 @@ static const struct tty_operations srmcons_ops = { static int __init srmcons_init(void) { - tty_port_init(&srmcons_singleton.port); setup_timer(&srmcons_singleton.timer, srmcons_receive_chars, (unsigned long)&srmcons_singleton); if (srm_is_registered_console) { @@ -215,6 +214,9 @@ srmcons_init(void) driver = alloc_tty_driver(MAX_SRM_CONSOLE_DEVICES); if (!driver) return -ENOMEM; + + tty_port_init(&srmcons_singleton.port); + driver->driver_name = "srm"; driver->name = "srm"; driver->major = 0; /* dynamic */ @@ -227,6 +229,7 @@ srmcons_init(void) err = tty_register_driver(driver); if (err) { put_tty_driver(driver); + tty_port_destroy(&srmcons_singleton.port); return err; } srmcons_driver = driver; diff --git a/trunk/arch/arm/Kconfig b/trunk/arch/arm/Kconfig index d45ca1bf1de0..03e0460d5067 100644 --- a/trunk/arch/arm/Kconfig +++ b/trunk/arch/arm/Kconfig @@ -5,8 +5,9 @@ config ARM select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE select ARCH_HAVE_CUSTOM_GPIO_H select ARCH_WANT_IPC_PARSE_VERSION + select BUILDTIME_EXTABLE_SORT if MMU select CPU_PM if (SUSPEND || CPU_IDLE) - select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN + select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN && MMU select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI) select GENERIC_CLOCKEVENTS_BROADCAST if SMP select GENERIC_IRQ_PROBE @@ -21,6 +22,7 @@ config ARM select HAVE_AOUT select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL select HAVE_ARCH_KGDB + select HAVE_ARCH_SECCOMP_FILTER select HAVE_ARCH_TRACEHOOK select HAVE_BPF_JIT select HAVE_C_RECORDMCOUNT @@ -330,6 +332,8 @@ config ARCH_AT91 select IRQ_DOMAIN select NEED_MACH_GPIO_H select NEED_MACH_IO_H if PCCARD + select PINCTRL + select PINCTRL_AT91 if USE_OF help This enables support for systems based on Atmel AT91RM9200 and AT91SAM9* processors. @@ -364,6 +368,7 @@ config ARCH_CNS3XXX config ARCH_CLPS711X bool "Cirrus Logic CLPS711x/EP721x/EP731x-based" + select ARCH_REQUIRE_GPIOLIB select ARCH_USES_GETTIMEOFFSET select CLKDEV_LOOKUP select COMMON_CLK @@ -534,6 +539,7 @@ config ARCH_KIRKWOOD select CPU_FEROCEON select GENERIC_CLOCKEVENTS select PCI + select PCI_QUIRKS select PLAT_ORION_LEGACY help Support for the following Marvell Kirkwood series SoCs: @@ -573,6 +579,7 @@ config ARCH_MMP select GPIO_PXA select IRQ_DOMAIN select NEED_MACH_GPIO_H + select PINCTRL select PLAT_PXA select SPARSE_IRQ help @@ -891,6 +898,7 @@ config ARCH_NOMADIK config PLAT_SPEAR bool "ST SPEAr" + select ARCH_HAS_CPUFREQ select ARCH_REQUIRE_GPIOLIB select ARM_AMBA select CLKDEV_LOOKUP diff --git a/trunk/arch/arm/Makefile b/trunk/arch/arm/Makefile index 97252d86a701..20d295aca51f 100644 --- a/trunk/arch/arm/Makefile +++ b/trunk/arch/arm/Makefile @@ -32,6 +32,7 @@ KBUILD_DEFCONFIG := versatile_defconfig # defines filename extension depending memory management type. ifeq ($(CONFIG_MMU),) MMUEXT := -nommu +KBUILD_CFLAGS += $(call cc-option,-mno-unaligned-access) endif ifeq ($(CONFIG_FRAME_POINTER),y) @@ -290,10 +291,10 @@ zinstall uinstall install: vmlinux $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ %.dtb: scripts - $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ + $(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) $(boot)/dts/$@ dtbs: scripts - $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ + $(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) dtbs # We use MRPROPER_FILES and CLEAN_FILES now archclean: diff --git a/trunk/arch/arm/boot/Makefile b/trunk/arch/arm/boot/Makefile index 9137df539b61..abfce280f57b 100644 --- a/trunk/arch/arm/boot/Makefile +++ b/trunk/arch/arm/boot/Makefile @@ -15,8 +15,6 @@ 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) # PARAMS_PHYS must be within 4MB of ZRELADDR @@ -59,16 +57,6 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE endif -targets += $(dtb-y) - -# Rule to build device tree blobs -$(obj)/%.dtb: $(src)/dts/%.dts FORCE - $(call if_changed_dep,dtc) - -$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y)) - -clean-files := *.dtb - ifneq ($(LOADADDR),) UIMAGE_LOADADDR=$(LOADADDR) else diff --git a/trunk/arch/arm/boot/compressed/head.S b/trunk/arch/arm/boot/compressed/head.S index 90275f036cd1..49ca86e37b8d 100644 --- a/trunk/arch/arm/boot/compressed/head.S +++ b/trunk/arch/arm/boot/compressed/head.S @@ -652,6 +652,15 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size mov pc, lr ENDPROC(__setup_mmu) +@ Enable unaligned access on v6, to allow better code generation +@ for the decompressor C code: +__armv6_mmu_cache_on: + mrc p15, 0, r0, c1, c0, 0 @ read SCTLR + bic r0, r0, #2 @ A (no unaligned access fault) + orr r0, r0, #1 << 22 @ U (v6 unaligned access model) + mcr p15, 0, r0, c1, c0, 0 @ write SCTLR + b __armv4_mmu_cache_on + __arm926ejs_mmu_cache_on: #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH mov r0, #4 @ put dcache in WT mode @@ -694,6 +703,9 @@ __armv7_mmu_cache_on: bic r0, r0, #1 << 28 @ clear SCTLR.TRE orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement orr r0, r0, #0x003c @ write buffer + bic r0, r0, #2 @ A (no unaligned access fault) + orr r0, r0, #1 << 22 @ U (v6 unaligned access model) + @ (needed for ARM1176) #ifdef CONFIG_MMU #ifdef CONFIG_CPU_ENDIAN_BE8 orr r0, r0, #1 << 25 @ big-endian page tables @@ -914,7 +926,7 @@ proc_types: .word 0x0007b000 @ ARMv6 .word 0x000ff000 - W(b) __armv4_mmu_cache_on + W(b) __armv6_mmu_cache_on W(b) __armv4_mmu_cache_off W(b) __armv6_mmu_cache_flush diff --git a/trunk/arch/arm/boot/dts/Makefile b/trunk/arch/arm/boot/dts/Makefile index 2458b69e2be6..5e98094a3e1b 100644 --- a/trunk/arch/arm/boot/dts/Makefile +++ b/trunk/arch/arm/boot/dts/Makefile @@ -1,21 +1,37 @@ ifeq ($(CONFIG_OF),y) -dtb-$(CONFIG_ARCH_AT91) += aks-cdu.dtb \ - at91sam9263ek.dtb \ - at91sam9g20ek_2mmc.dtb \ - at91sam9g20ek.dtb \ - at91sam9g25ek.dtb \ - at91sam9m10g45ek.dtb \ - at91sam9n12ek.dtb \ - ethernut5.dtb \ - evk-pro3.dtb \ - kizbox.dtb \ - tny_a9260.dtb \ - tny_a9263.dtb \ - tny_a9g20.dtb \ - usb_a9260.dtb \ - usb_a9263.dtb \ - usb_a9g20.dtb +# Keep at91 dtb files sorted alphabetically for each SoC +# rm9200 +dtb-$(CONFIG_ARCH_AT91) += at91rm9200ek.dtb +# sam9260 +dtb-$(CONFIG_ARCH_AT91) += animeo_ip.dtb +dtb-$(CONFIG_ARCH_AT91) += aks-cdu.dtb +dtb-$(CONFIG_ARCH_AT91) += ethernut5.dtb +dtb-$(CONFIG_ARCH_AT91) += evk-pro3.dtb +dtb-$(CONFIG_ARCH_AT91) += tny_a9260.dtb +dtb-$(CONFIG_ARCH_AT91) += usb_a9260.dtb +# sam9263 +dtb-$(CONFIG_ARCH_AT91) += at91sam9263ek.dtb +dtb-$(CONFIG_ARCH_AT91) += tny_a9263.dtb +dtb-$(CONFIG_ARCH_AT91) += usb_a9263.dtb +# sam9g20 +dtb-$(CONFIG_ARCH_AT91) += at91sam9g20ek.dtb +dtb-$(CONFIG_ARCH_AT91) += at91sam9g20ek_2mmc.dtb +dtb-$(CONFIG_ARCH_AT91) += kizbox.dtb +dtb-$(CONFIG_ARCH_AT91) += tny_a9g20.dtb +dtb-$(CONFIG_ARCH_AT91) += usb_a9g20.dtb +# sam9g45 +dtb-$(CONFIG_ARCH_AT91) += at91sam9m10g45ek.dtb +dtb-$(CONFIG_ARCH_AT91) += pm9g45.dtb +# sam9n12 +dtb-$(CONFIG_ARCH_AT91) += at91sam9n12ek.dtb +# sam9x5 +dtb-$(CONFIG_ARCH_AT91) += at91sam9g15ek.dtb +dtb-$(CONFIG_ARCH_AT91) += at91sam9g25ek.dtb +dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb +dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb +dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb + dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb dtb-$(CONFIG_ARCH_DOVE) += dove-cm-a510.dtb \ dove-cubox.dtb \ @@ -106,4 +122,12 @@ dtb-$(CONFIG_ARCH_VT8500) += vt8500-bv07.dtb \ wm8505-ref.dtb \ wm8650-mid.dtb +targets += dtbs endif + +# *.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)) + $(Q)rm -f $(obj)/../*.dtb + +clean-files := *.dtb diff --git a/trunk/arch/arm/boot/dts/animeo_ip.dts b/trunk/arch/arm/boot/dts/animeo_ip.dts new file mode 100644 index 000000000000..74d92cd29d87 --- /dev/null +++ b/trunk/arch/arm/boot/dts/animeo_ip.dts @@ -0,0 +1,178 @@ +/* + * animeo_ip.dts - Device Tree file for Somfy Animeo IP Boards + * + * Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD + * + * Licensed under GPLv2 only. + */ + +/dts-v1/; +/include/ "at91sam9260.dtsi" + +/ { + model = "Somfy Animeo IP"; + compatible = "somfy,animeo-ip", "atmel,at91sam9260", "atmel,at91sam9"; + + aliases { + serial0 = &usart1; + serial1 = &usart2; + serial2 = &usart0; + serial3 = &dbgu; + serial4 = &usart3; + serial5 = &uart0; + serial6 = &uart1; + }; + + chosen { + linux,stdout-path = &usart2; + }; + + memory { + reg = <0x20000000 0x4000000>; + }; + + clocks { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + main_clock: clock@0 { + compatible = "atmel,osc", "fixed-clock"; + clock-frequency = <18432000>; + }; + }; + + ahb { + apb { + usart0: serial@fffb0000 { + pinctrl-0 = <&pinctrl_usart0 &pinctrl_usart0_rts>; + linux,rs485-enabled-at-boot-time; + status = "okay"; + }; + + usart1: serial@fffb4000 { + pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts>; + linux,rs485-enabled-at-boot-time; + status = "okay"; + }; + + usart2: serial@fffb8000 { + pinctrl-0 = <&pinctrl_usart2>; + status = "okay"; + }; + + macb0: ethernet@fffc4000 { + pinctrl-0 = <&pinctrl_macb_rmii &pinctrl_macb_rmii_mii>; + phy-mode = "mii"; + status = "okay"; + }; + + mmc0: mmc@fffa8000 { + pinctrl-0 = <&pinctrl_mmc0_clk + &pinctrl_mmc0_slot1_cmd_dat0 + &pinctrl_mmc0_slot1_dat1_3>; + status = "okay"; + + slot@1 { + reg = <1>; + bus-width = <4>; + }; + }; + }; + + nand0: nand@40000000 { + nand-bus-width = <8>; + nand-ecc-mode = "soft"; + nand-on-flash-bbt; + status = "okay"; + + at91bootstrap@0 { + label = "at91bootstrap"; + reg = <0x0 0x8000>; + }; + + barebox@8000 { + label = "barebox"; + reg = <0x8000 0x40000>; + }; + + bareboxenv@48000 { + label = "bareboxenv"; + reg = <0x48000 0x8000>; + }; + + user_block@0x50000 { + label = "user_block"; + reg = <0x50000 0xb0000>; + }; + + kernel@100000 { + label = "kernel"; + reg = <0x100000 0x1b0000>; + }; + + root@2b0000 { + label = "root"; + reg = <0x2b0000 0x1D50000>; + }; + }; + + usb0: ohci@00500000 { + num-ports = <2>; + atmel,vbus-gpio = <&pioB 15 1>; + status = "okay"; + }; + }; + + leds { + compatible = "gpio-leds"; + + power_green { + label = "power_green"; + gpios = <&pioC 17 0>; + linux,default-trigger = "heartbeat"; + }; + + power_red { + label = "power_red"; + gpios = <&pioA 2 0>; + }; + + tx_green { + label = "tx_green"; + gpios = <&pioC 19 0>; + }; + + tx_red { + label = "tx_red"; + gpios = <&pioC 18 0>; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + + keyswitch_in { + label = "keyswitch_in"; + gpios = <&pioB 1 0>; + linux,code = <28>; + gpio-key,wakeup; + }; + + error_in { + label = "error_in"; + gpios = <&pioB 2 0>; + linux,code = <29>; + gpio-key,wakeup; + }; + + btn { + label = "btn"; + gpios = <&pioC 23 0>; + linux,code = <31>; + gpio-key,wakeup; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/at91rm9200.dtsi b/trunk/arch/arm/boot/dts/at91rm9200.dtsi new file mode 100644 index 000000000000..e154f242c680 --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91rm9200.dtsi @@ -0,0 +1,349 @@ +/* + * at91rm9200.dtsi - Device Tree Include file for AT91RM9200 family SoC + * + * Copyright (C) 2011 Atmel, + * 2011 Nicolas Ferre , + * 2012 Joachim Eastwood + * + * Based on at91sam9260.dtsi + * + * Licensed under GPLv2 or later. + */ + +/include/ "skeleton.dtsi" + +/ { + model = "Atmel AT91RM9200 family SoC"; + compatible = "atmel,at91rm9200"; + interrupt-parent = <&aic>; + + aliases { + serial0 = &dbgu; + serial1 = &usart0; + serial2 = &usart1; + serial3 = &usart2; + serial4 = &usart3; + gpio0 = &pioA; + gpio1 = &pioB; + gpio2 = &pioC; + gpio3 = &pioD; + tcb0 = &tcb0; + tcb1 = &tcb1; + }; + cpus { + cpu@0 { + compatible = "arm,arm920t"; + }; + }; + + memory { + reg = <0x20000000 0x04000000>; + }; + + ahb { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges; + + apb { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges; + + aic: interrupt-controller@fffff000 { + #interrupt-cells = <3>; + compatible = "atmel,at91rm9200-aic"; + interrupt-controller; + reg = <0xfffff000 0x200>; + atmel,external-irqs = <25 26 27 28 29 30 31>; + }; + + ramc0: ramc@ffffff00 { + compatible = "atmel,at91rm9200-sdramc"; + reg = <0xffffff00 0x100>; + }; + + pmc: pmc@fffffc00 { + compatible = "atmel,at91rm9200-pmc"; + reg = <0xfffffc00 0x100>; + }; + + st: timer@fffffd00 { + compatible = "atmel,at91rm9200-st"; + reg = <0xfffffd00 0x100>; + interrupts = <1 4 7>; + }; + + tcb0: timer@fffa0000 { + compatible = "atmel,at91rm9200-tcb"; + reg = <0xfffa0000 0x100>; + interrupts = <17 4 0 18 4 0 19 4 0>; + }; + + tcb1: timer@fffa4000 { + compatible = "atmel,at91rm9200-tcb"; + reg = <0xfffa4000 0x100>; + interrupts = <20 4 0 21 4 0 22 4 0>; + }; + + pinctrl@fffff400 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "atmel,at91rm9200-pinctrl", "simple-bus"; + ranges = <0xfffff400 0xfffff400 0x800>; + + atmel,mux-mask = < + /* A B */ + 0xffffffff 0xffffffff /* pioA */ + 0xffffffff 0x083fffff /* pioB */ + 0xffff3fff 0x00000000 /* pioC */ + 0x03ff87ff 0x0fffff80 /* pioD */ + >; + + /* shared pinctrl settings */ + dbgu { + pinctrl_dbgu: dbgu-0 { + atmel,pins = + <0 30 0x1 0x0 /* PA30 periph A */ + 0 31 0x1 0x1>; /* PA31 periph with pullup */ + }; + }; + + uart0 { + pinctrl_uart0: uart0-0 { + atmel,pins = + <0 17 0x1 0x0 /* PA17 periph A */ + 0 18 0x1 0x0>; /* PA18 periph A */ + }; + + pinctrl_uart0_rts: uart0_rts-0 { + atmel,pins = + <0 20 0x1 0x0>; /* PA20 periph A */ + }; + + pinctrl_uart0_cts: uart0_cts-0 { + atmel,pins = + <0 21 0x1 0x0>; /* PA21 periph A */ + }; + }; + + uart1 { + pinctrl_uart1: uart1-0 { + atmel,pins = + <1 20 0x1 0x1 /* PB20 periph A with pullup */ + 1 21 0x1 0x0>; /* PB21 periph A */ + }; + + pinctrl_uart1_rts: uart1_rts-0 { + atmel,pins = + <1 24 0x1 0x0>; /* PB24 periph A */ + }; + + pinctrl_uart1_cts: uart1_cts-0 { + atmel,pins = + <1 26 0x1 0x0>; /* PB26 periph A */ + }; + + pinctrl_uart1_dtr_dsr: uart1_dtr_dsr-0 { + atmel,pins = + <1 19 0x1 0x0 /* PB19 periph A */ + 1 25 0x1 0x0>; /* PB25 periph A */ + }; + + pinctrl_uart1_dcd: uart1_dcd-0 { + atmel,pins = + <1 23 0x1 0x0>; /* PB23 periph A */ + }; + + pinctrl_uart1_ri: uart1_ri-0 { + atmel,pins = + <1 18 0x1 0x0>; /* PB18 periph A */ + }; + }; + + uart2 { + pinctrl_uart2: uart2-0 { + atmel,pins = + <0 22 0x1 0x0 /* PA22 periph A */ + 0 23 0x1 0x1>; /* PA23 periph A with pullup */ + }; + + pinctrl_uart2_rts: uart2_rts-0 { + atmel,pins = + <0 30 0x2 0x0>; /* PA30 periph B */ + }; + + pinctrl_uart2_cts: uart2_cts-0 { + atmel,pins = + <0 31 0x2 0x0>; /* PA31 periph B */ + }; + }; + + uart3 { + pinctrl_uart3: uart3-0 { + atmel,pins = + <0 5 0x2 0x1 /* PA5 periph B with pullup */ + 0 6 0x2 0x0>; /* PA6 periph B */ + }; + + pinctrl_uart3_rts: uart3_rts-0 { + atmel,pins = + <1 0 0x2 0x0>; /* PB0 periph B */ + }; + + pinctrl_uart3_cts: uart3_cts-0 { + atmel,pins = + <1 1 0x2 0x0>; /* PB1 periph B */ + }; + }; + + nand { + pinctrl_nand: nand-0 { + atmel,pins = + <2 2 0x0 0x1 /* PC2 gpio RDY pin pull_up */ + 1 1 0x0 0x1>; /* PB1 gpio CD pin pull_up */ + }; + }; + + pioA: gpio@fffff400 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff400 0x200>; + interrupts = <2 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioB: gpio@fffff600 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff600 0x200>; + interrupts = <3 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioC: gpio@fffff800 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff800 0x200>; + interrupts = <4 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioD: gpio@fffffa00 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffffa00 0x200>; + interrupts = <5 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + }; + + dbgu: serial@fffff200 { + compatible = "atmel,at91rm9200-usart"; + reg = <0xfffff200 0x200>; + interrupts = <1 4 7>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_dbgu>; + status = "disabled"; + }; + + usart0: serial@fffc0000 { + compatible = "atmel,at91rm9200-usart"; + reg = <0xfffc0000 0x200>; + interrupts = <6 4 5>; + atmel,use-dma-rx; + atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart0>; + status = "disabled"; + }; + + usart1: serial@fffc4000 { + compatible = "atmel,at91rm9200-usart"; + reg = <0xfffc4000 0x200>; + interrupts = <7 4 5>; + atmel,use-dma-rx; + atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart1>; + status = "disabled"; + }; + + usart2: serial@fffc8000 { + compatible = "atmel,at91rm9200-usart"; + reg = <0xfffc8000 0x200>; + interrupts = <8 4 5>; + atmel,use-dma-rx; + atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart2>; + status = "disabled"; + }; + + usart3: serial@fffcc000 { + compatible = "atmel,at91rm9200-usart"; + reg = <0xfffcc000 0x200>; + interrupts = <23 4 5>; + atmel,use-dma-rx; + atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart3>; + status = "disabled"; + }; + + usb1: gadget@fffb0000 { + compatible = "atmel,at91rm9200-udc"; + reg = <0xfffb0000 0x4000>; + interrupts = <11 4 2>; + status = "disabled"; + }; + }; + + nand0: nand@40000000 { + compatible = "atmel,at91rm9200-nand"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x40000000 0x10000000>; + atmel,nand-addr-offset = <21>; + atmel,nand-cmd-offset = <22>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_nand>; + nand-ecc-mode = "soft"; + gpios = <&pioC 2 0 + 0 + &pioB 1 0 + >; + status = "disabled"; + }; + + usb0: ohci@00300000 { + compatible = "atmel,at91rm9200-ohci", "usb-ohci"; + reg = <0x00300000 0x100000>; + interrupts = <23 4 2>; + status = "disabled"; + }; + }; + + i2c@0 { + compatible = "i2c-gpio"; + gpios = <&pioA 23 0 /* sda */ + &pioA 24 0 /* scl */ + >; + i2c-gpio,sda-open-drain; + i2c-gpio,scl-open-drain; + i2c-gpio,delay-us = <2>; /* ~100 kHz */ + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; +}; diff --git a/trunk/arch/arm/boot/dts/at91rm9200ek.dts b/trunk/arch/arm/boot/dts/at91rm9200ek.dts new file mode 100644 index 000000000000..8aa48931e0a2 --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91rm9200ek.dts @@ -0,0 +1,79 @@ +/* + * at91rm9200ek.dts - Device Tree file for Atmel AT91RM9200 evaluation kit + * + * Copyright (C) 2012 Joachim Eastwood + * + * Licensed under GPLv2 only + */ +/dts-v1/; +/include/ "at91rm9200.dtsi" + +/ { + model = "Atmel AT91RM9200 evaluation kit"; + compatible = "atmel,at91rm9200ek", "atmel,at91rm9200"; + + memory { + reg = <0x20000000 0x4000000>; + }; + + clocks { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + main_clock: clock@0 { + compatible = "atmel,osc", "fixed-clock"; + clock-frequency = <18432000>; + }; + }; + + ahb { + apb { + dbgu: serial@fffff200 { + status = "okay"; + }; + + usart1: serial@fffc4000 { + pinctrl-0 = + <&pinctrl_uart1 + &pinctrl_uart1_rts + &pinctrl_uart1_cts + &pinctrl_uart1_dtr_dsr + &pinctrl_uart1_dcd + &pinctrl_uart1_ri>; + status = "okay"; + }; + + usb1: gadget@fffb0000 { + atmel,vbus-gpio = <&pioD 4 0>; + status = "okay"; + }; + }; + + usb0: ohci@00300000 { + num-ports = <2>; + status = "okay"; + }; + }; + + leds { + compatible = "gpio-leds"; + + ds2 { + label = "green"; + gpios = <&pioB 0 0x1>; + linux,default-trigger = "mmc0"; + }; + + ds4 { + label = "yellow"; + gpios = <&pioB 1 0x1>; + linux,default-trigger = "heartbeat"; + }; + + ds6 { + label = "red"; + gpios = <&pioB 2 0x1>; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9260.dtsi b/trunk/arch/arm/boot/dts/at91sam9260.dtsi index d410581a5a85..b1d3fab60e0a 100644 --- a/trunk/arch/arm/boot/dts/at91sam9260.dtsi +++ b/trunk/arch/arm/boot/dts/at91sam9260.dtsi @@ -21,8 +21,8 @@ serial2 = &usart1; serial3 = &usart2; serial4 = &usart3; - serial5 = &usart4; - serial6 = &usart5; + serial5 = &uart0; + serial6 = &uart1; gpio0 = &pioA; gpio1 = &pioB; gpio2 = &pioC; @@ -98,40 +98,250 @@ interrupts = <26 4 0 27 4 0 28 4 0>; }; - pioA: gpio@fffff400 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff400 0x100>; - interrupts = <2 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + pinctrl@fffff400 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "atmel,at91rm9200-pinctrl", "simple-bus"; + ranges = <0xfffff400 0xfffff400 0x600>; + + atmel,mux-mask = < + /* A B */ + 0xffffffff 0xffc00c3b /* pioA */ + 0xffffffff 0x7fff3ccf /* pioB */ + 0xffffffff 0x007fffff /* pioC */ + >; + + /* shared pinctrl settings */ + dbgu { + pinctrl_dbgu: dbgu-0 { + atmel,pins = + <1 14 0x1 0x0 /* PB14 periph A */ + 1 15 0x1 0x1>; /* PB15 periph with pullup */ + }; + }; - pioB: gpio@fffff600 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff600 0x100>; - interrupts = <3 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + usart0 { + pinctrl_usart0: usart0-0 { + atmel,pins = + <1 4 0x1 0x0 /* PB4 periph A */ + 1 5 0x1 0x0>; /* PB5 periph A */ + }; + + pinctrl_usart0_rts: usart0_rts-0 { + atmel,pins = + <1 26 0x1 0x0>; /* PB26 periph A */ + }; + + pinctrl_usart0_cts: usart0_cts-0 { + atmel,pins = + <1 27 0x1 0x0>; /* PB27 periph A */ + }; + + pinctrl_usart0_dtr_dsr: usart0_dtr_dsr-0 { + atmel,pins = + <1 24 0x1 0x0 /* PB24 periph A */ + 1 22 0x1 0x0>; /* PB22 periph A */ + }; + + pinctrl_usart0_dcd: usart0_dcd-0 { + atmel,pins = + <1 23 0x1 0x0>; /* PB23 periph A */ + }; + + pinctrl_usart0_ri: usart0_ri-0 { + atmel,pins = + <1 25 0x1 0x0>; /* PB25 periph A */ + }; + }; - pioC: gpio@fffff800 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff800 0x100>; - interrupts = <4 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; + usart1 { + pinctrl_usart1: usart1-0 { + atmel,pins = + <2 6 0x1 0x1 /* PB6 periph A with pullup */ + 2 7 0x1 0x0>; /* PB7 periph A */ + }; + + pinctrl_usart1_rts: usart1_rts-0 { + atmel,pins = + <1 28 0x1 0x0>; /* PB28 periph A */ + }; + + pinctrl_usart1_cts: usart1_cts-0 { + atmel,pins = + <1 29 0x1 0x0>; /* PB29 periph A */ + }; + }; + + usart2 { + pinctrl_usart2: usart2-0 { + atmel,pins = + <1 8 0x1 0x1 /* PB8 periph A with pullup */ + 1 9 0x1 0x0>; /* PB9 periph A */ + }; + + pinctrl_usart2_rts: usart2_rts-0 { + atmel,pins = + <0 4 0x1 0x0>; /* PA4 periph A */ + }; + + pinctrl_usart2_cts: usart2_cts-0 { + atmel,pins = + <0 5 0x1 0x0>; /* PA5 periph A */ + }; + }; + + usart3 { + pinctrl_usart3: usart3-0 { + atmel,pins = + <2 10 0x1 0x1 /* PB10 periph A with pullup */ + 2 11 0x1 0x0>; /* PB11 periph A */ + }; + + pinctrl_usart3_rts: usart3_rts-0 { + atmel,pins = + <3 8 0x2 0x0>; /* PB8 periph B */ + }; + + pinctrl_usart3_cts: usart3_cts-0 { + atmel,pins = + <3 10 0x2 0x0>; /* PB10 periph B */ + }; + }; + + uart0 { + pinctrl_uart0: uart0-0 { + atmel,pins = + <0 31 0x2 0x1 /* PA31 periph B with pullup */ + 0 30 0x2 0x0>; /* PA30 periph B */ + }; + }; + + uart1 { + pinctrl_uart1: uart1-0 { + atmel,pins = + <2 12 0x1 0x1 /* PB12 periph A with pullup */ + 2 13 0x1 0x0>; /* PB13 periph A */ + }; + }; + + nand { + pinctrl_nand: nand-0 { + atmel,pins = + <2 13 0x0 0x1 /* PC13 gpio RDY pin pull_up */ + 2 14 0x0 0x1>; /* PC14 gpio enable pin pull_up */ + }; + }; + + macb { + pinctrl_macb_rmii: macb_rmii-0 { + atmel,pins = + <0 12 0x1 0x0 /* PA12 periph A */ + 0 13 0x1 0x0 /* PA13 periph A */ + 0 14 0x1 0x0 /* PA14 periph A */ + 0 15 0x1 0x0 /* PA15 periph A */ + 0 16 0x1 0x0 /* PA16 periph A */ + 0 17 0x1 0x0 /* PA17 periph A */ + 0 18 0x1 0x0 /* PA18 periph A */ + 0 19 0x1 0x0 /* PA19 periph A */ + 0 20 0x1 0x0 /* PA20 periph A */ + 0 21 0x1 0x0>; /* PA21 periph A */ + }; + + pinctrl_macb_rmii_mii: macb_rmii_mii-0 { + atmel,pins = + <0 22 0x2 0x0 /* PA22 periph B */ + 0 23 0x2 0x0 /* PA23 periph B */ + 0 24 0x2 0x0 /* PA24 periph B */ + 0 25 0x2 0x0 /* PA25 periph B */ + 0 26 0x2 0x0 /* PA26 periph B */ + 0 27 0x2 0x0 /* PA27 periph B */ + 0 28 0x2 0x0 /* PA28 periph B */ + 0 29 0x2 0x0>; /* PA29 periph B */ + }; + + pinctrl_macb_rmii_mii_alt: macb_rmii_mii-1 { + atmel,pins = + <0 10 0x2 0x0 /* PA10 periph B */ + 0 11 0x2 0x0 /* PA11 periph B */ + 0 24 0x2 0x0 /* PA24 periph B */ + 0 25 0x2 0x0 /* PA25 periph B */ + 0 26 0x2 0x0 /* PA26 periph B */ + 0 27 0x2 0x0 /* PA27 periph B */ + 0 28 0x2 0x0 /* PA28 periph B */ + 0 29 0x2 0x0>; /* PA29 periph B */ + }; + }; + + mmc0 { + pinctrl_mmc0_clk: mmc0_clk-0 { + atmel,pins = + <0 8 0x1 0x0>; /* PA8 periph A */ + }; + + pinctrl_mmc0_slot0_cmd_dat0: mmc0_slot0_cmd_dat0-0 { + atmel,pins = + <0 7 0x1 0x1 /* PA7 periph A with pullup */ + 0 6 0x1 0x1>; /* PA6 periph A with pullup */ + }; + + pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { + atmel,pins = + <0 9 0x1 0x1 /* PA9 periph A with pullup */ + 0 10 0x1 0x1 /* PA10 periph A with pullup */ + 0 11 0x1 0x1>; /* PA11 periph A with pullup */ + }; + + pinctrl_mmc0_slot1_cmd_dat0: mmc0_slot1_cmd_dat0-0 { + atmel,pins = + <0 1 0x2 0x1 /* PA1 periph B with pullup */ + 0 0 0x2 0x1>; /* PA0 periph B with pullup */ + }; + + pinctrl_mmc0_slot1_dat1_3: mmc0_slot1_dat1_3-0 { + atmel,pins = + <0 5 0x2 0x1 /* PA5 periph B with pullup */ + 0 4 0x2 0x1 /* PA4 periph B with pullup */ + 0 3 0x2 0x1>; /* PA3 periph B with pullup */ + }; + }; + + pioA: gpio@fffff400 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff400 0x200>; + interrupts = <2 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioB: gpio@fffff600 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff600 0x200>; + interrupts = <3 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioC: gpio@fffff800 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff800 0x200>; + interrupts = <4 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; }; dbgu: serial@fffff200 { compatible = "atmel,at91sam9260-usart"; reg = <0xfffff200 0x200>; interrupts = <1 4 7>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_dbgu>; status = "disabled"; }; @@ -141,6 +351,8 @@ interrupts = <6 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart0>; status = "disabled"; }; @@ -150,6 +362,8 @@ interrupts = <7 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart1>; status = "disabled"; }; @@ -159,6 +373,8 @@ interrupts = <8 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart2>; status = "disabled"; }; @@ -168,24 +384,30 @@ interrupts = <23 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart3>; status = "disabled"; }; - usart4: serial@fffd4000 { + uart0: serial@fffd4000 { compatible = "atmel,at91sam9260-usart"; reg = <0xfffd4000 0x200>; interrupts = <24 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart0>; status = "disabled"; }; - usart5: serial@fffd8000 { + uart1: serial@fffd8000 { compatible = "atmel,at91sam9260-usart"; reg = <0xfffd8000 0x200>; interrupts = <25 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart1>; status = "disabled"; }; @@ -193,6 +415,8 @@ compatible = "cdns,at32ap7000-macb", "cdns,macb"; reg = <0xfffc4000 0x100>; interrupts = <21 4 3>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_macb_rmii>; status = "disabled"; }; @@ -212,6 +436,15 @@ status = "disabled"; }; + mmc0: mmc@fffa8000 { + compatible = "atmel,hsmci"; + reg = <0xfffa8000 0x600>; + interrupts = <9 4 0>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + adc0: adc@fffe0000 { compatible = "atmel,at91sam9260-adc"; reg = <0xfffe0000 0x100>; @@ -257,6 +490,8 @@ >; atmel,nand-addr-offset = <21>; atmel,nand-cmd-offset = <22>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_nand>; gpios = <&pioC 13 0 &pioC 14 0 0 diff --git a/trunk/arch/arm/boot/dts/at91sam9263.dtsi b/trunk/arch/arm/boot/dts/at91sam9263.dtsi index 3e6e5c1abbf3..66106eecf1ed 100644 --- a/trunk/arch/arm/boot/dts/at91sam9263.dtsi +++ b/trunk/arch/arm/boot/dts/at91sam9263.dtsi @@ -89,60 +89,243 @@ reg = <0xfffffd10 0x10>; }; - pioA: gpio@fffff200 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff200 0x100>; - interrupts = <2 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + pinctrl@fffff200 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "atmel,at91rm9200-pinctrl", "simple-bus"; + ranges = <0xfffff200 0xfffff200 0xa00>; - pioB: gpio@fffff400 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff400 0x100>; - interrupts = <3 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + atmel,mux-mask = < + /* A B */ + 0xfffffffb 0xffffe07f /* pioA */ + 0x0007ffff 0x39072fff /* pioB */ + 0xffffffff 0x3ffffff8 /* pioC */ + 0xfffffbff 0xffffffff /* pioD */ + 0xffe00fff 0xfbfcff00 /* pioE */ + >; - pioC: gpio@fffff600 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff600 0x100>; - interrupts = <4 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + /* shared pinctrl settings */ + dbgu { + pinctrl_dbgu: dbgu-0 { + atmel,pins = + <2 30 0x1 0x0 /* PC30 periph A */ + 2 31 0x1 0x1>; /* PC31 periph with pullup */ + }; + }; - pioD: gpio@fffff800 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff800 0x100>; - interrupts = <4 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + usart0 { + pinctrl_usart0: usart0-0 { + atmel,pins = + <0 26 0x1 0x1 /* PA26 periph A with pullup */ + 0 27 0x1 0x0>; /* PA27 periph A */ + }; - pioE: gpio@fffffa00 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffffa00 0x100>; - interrupts = <4 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; + pinctrl_usart0_rts: usart0_rts-0 { + atmel,pins = + <0 28 0x1 0x0>; /* PA28 periph A */ + }; + + pinctrl_usart0_cts: usart0_cts-0 { + atmel,pins = + <0 29 0x1 0x0>; /* PA29 periph A */ + }; + }; + + usart1 { + pinctrl_usart1: usart1-0 { + atmel,pins = + <3 0 0x1 0x1 /* PD0 periph A with pullup */ + 3 1 0x1 0x0>; /* PD1 periph A */ + }; + + pinctrl_usart1_rts: usart1_rts-0 { + atmel,pins = + <3 7 0x2 0x0>; /* PD7 periph B */ + }; + + pinctrl_usart1_cts: usart1_cts-0 { + atmel,pins = + <3 8 0x2 0x0>; /* PD8 periph B */ + }; + }; + + usart2 { + pinctrl_usart2: usart2-0 { + atmel,pins = + <3 2 0x1 0x1 /* PD2 periph A with pullup */ + 3 3 0x1 0x0>; /* PD3 periph A */ + }; + + pinctrl_usart2_rts: usart2_rts-0 { + atmel,pins = + <3 5 0x2 0x0>; /* PD5 periph B */ + }; + + pinctrl_usart2_cts: usart2_cts-0 { + atmel,pins = + <4 6 0x2 0x0>; /* PD6 periph B */ + }; + }; + + nand { + pinctrl_nand: nand-0 { + atmel,pins = + <0 22 0x0 0x1 /* PA22 gpio RDY pin pull_up*/ + 3 15 0x0 0x1>; /* PD15 gpio enable pin pull_up */ + }; + }; + + macb { + pinctrl_macb_rmii: macb_rmii-0 { + atmel,pins = + <2 25 0x2 0x0 /* PC25 periph B */ + 4 21 0x1 0x0 /* PE21 periph A */ + 4 23 0x1 0x0 /* PE23 periph A */ + 4 24 0x1 0x0 /* PE24 periph A */ + 4 25 0x1 0x0 /* PE25 periph A */ + 4 26 0x1 0x0 /* PE26 periph A */ + 4 27 0x1 0x0 /* PE27 periph A */ + 4 28 0x1 0x0 /* PE28 periph A */ + 4 29 0x1 0x0 /* PE29 periph A */ + 4 30 0x1 0x0>; /* PE30 periph A */ + }; + + pinctrl_macb_rmii_mii: macb_rmii_mii-0 { + atmel,pins = + <2 20 0x2 0x0 /* PC20 periph B */ + 2 21 0x2 0x0 /* PC21 periph B */ + 2 22 0x2 0x0 /* PC22 periph B */ + 2 23 0x2 0x0 /* PC23 periph B */ + 2 24 0x2 0x0 /* PC24 periph B */ + 2 25 0x2 0x0 /* PC25 periph B */ + 2 27 0x2 0x0 /* PC27 periph B */ + 4 22 0x2 0x0>; /* PE22 periph B */ + }; + }; + + mmc0 { + pinctrl_mmc0_clk: mmc0_clk-0 { + atmel,pins = + <0 12 0x1 0x0>; /* PA12 periph A */ + }; + + pinctrl_mmc0_slot0_cmd_dat0: mmc0_slot0_cmd_dat0-0 { + atmel,pins = + <0 1 0x1 0x1 /* PA1 periph A with pullup */ + 0 0 0x1 0x1>; /* PA0 periph A with pullup */ + }; + + pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { + atmel,pins = + <0 3 0x1 0x1 /* PA3 periph A with pullup */ + 0 4 0x1 0x1 /* PA4 periph A with pullup */ + 0 5 0x1 0x1>; /* PA5 periph A with pullup */ + }; + + pinctrl_mmc0_slot1_cmd_dat0: mmc0_slot1_cmd_dat0-0 { + atmel,pins = + <0 16 0x1 0x1 /* PA16 periph A with pullup */ + 0 17 0x1 0x1>; /* PA17 periph A with pullup */ + }; + + pinctrl_mmc0_slot1_dat1_3: mmc0_slot1_dat1_3-0 { + atmel,pins = + <0 18 0x1 0x1 /* PA18 periph A with pullup */ + 0 19 0x1 0x1 /* PA19 periph A with pullup */ + 0 20 0x1 0x1>; /* PA20 periph A with pullup */ + }; + }; + + mmc1 { + pinctrl_mmc1_clk: mmc1_clk-0 { + atmel,pins = + <0 6 0x1 0x0>; /* PA6 periph A */ + }; + + pinctrl_mmc1_slot0_cmd_dat0: mmc1_slot0_cmd_dat0-0 { + atmel,pins = + <0 7 0x1 0x1 /* PA7 periph A with pullup */ + 0 8 0x1 0x1>; /* PA8 periph A with pullup */ + }; + + pinctrl_mmc1_slot0_dat1_3: mmc1_slot0_dat1_3-0 { + atmel,pins = + <0 9 0x1 0x1 /* PA9 periph A with pullup */ + 0 10 0x1 0x1 /* PA10 periph A with pullup */ + 0 11 0x1 0x1>; /* PA11 periph A with pullup */ + }; + + pinctrl_mmc1_slot1_cmd_dat0: mmc1_slot1_cmd_dat0-0 { + atmel,pins = + <0 21 0x1 0x1 /* PA21 periph A with pullup */ + 0 22 0x1 0x1>; /* PA22 periph A with pullup */ + }; + + pinctrl_mmc1_slot1_dat1_3: mmc1_slot1_dat1_3-0 { + atmel,pins = + <0 23 0x1 0x1 /* PA23 periph A with pullup */ + 0 24 0x1 0x1 /* PA24 periph A with pullup */ + 0 25 0x1 0x1>; /* PA25 periph A with pullup */ + }; + }; + + pioA: gpio@fffff200 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff200 0x200>; + interrupts = <2 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioB: gpio@fffff400 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff400 0x200>; + interrupts = <3 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioC: gpio@fffff600 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff600 0x200>; + interrupts = <4 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioD: gpio@fffff800 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff800 0x200>; + interrupts = <4 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioE: gpio@fffffa00 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffffa00 0x200>; + interrupts = <4 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; }; dbgu: serial@ffffee00 { compatible = "atmel,at91sam9260-usart"; reg = <0xffffee00 0x200>; interrupts = <1 4 7>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_dbgu>; status = "disabled"; }; @@ -152,6 +335,8 @@ interrupts = <7 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart0>; status = "disabled"; }; @@ -161,6 +346,8 @@ interrupts = <8 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart1>; status = "disabled"; }; @@ -170,6 +357,8 @@ interrupts = <9 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart2>; status = "disabled"; }; @@ -177,6 +366,8 @@ compatible = "cdns,at32ap7000-macb", "cdns,macb"; reg = <0xfffbc000 0x100>; interrupts = <21 4 3>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_macb_rmii>; status = "disabled"; }; @@ -195,6 +386,24 @@ #size-cells = <0>; status = "disabled"; }; + + mmc0: mmc@fff80000 { + compatible = "atmel,hsmci"; + reg = <0xfff80000 0x600>; + interrupts = <10 4 0>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + mmc1: mmc@fff84000 { + compatible = "atmel,hsmci"; + reg = <0xfff84000 0x600>; + interrupts = <11 4 0>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; }; nand0: nand@40000000 { @@ -206,6 +415,8 @@ >; atmel,nand-addr-offset = <21>; atmel,nand-cmd-offset = <22>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_nand>; gpios = <&pioA 22 0 &pioD 15 0 0 diff --git a/trunk/arch/arm/boot/dts/at91sam9263ek.dts b/trunk/arch/arm/boot/dts/at91sam9263ek.dts index f86ac4b609fc..1eb08728f527 100644 --- a/trunk/arch/arm/boot/dts/at91sam9263ek.dts +++ b/trunk/arch/arm/boot/dts/at91sam9263ek.dts @@ -38,6 +38,10 @@ }; usart0: serial@fff8c000 { + pinctrl-0 = < + &pinctrl_usart0 + &pinctrl_usart0_rts + &pinctrl_usart0_cts>; status = "okay"; }; @@ -50,6 +54,31 @@ atmel,vbus-gpio = <&pioA 25 0>; status = "okay"; }; + + mmc0: mmc@fff80000 { + pinctrl-0 = < + &pinctrl_board_mmc0 + &pinctrl_mmc0_clk + &pinctrl_mmc0_slot0_cmd_dat0 + &pinctrl_mmc0_slot0_dat1_3>; + status = "okay"; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioE 18 0>; + wp-gpios = <&pioE 19 0>; + }; + }; + + pinctrl@fffff200 { + mmc0 { + pinctrl_board_mmc0: mmc0-board { + atmel,pins = + <5 18 0x0 0x5 /* PE18 gpio CD pin pull up and deglitch */ + 5 19 0x0 0x1>; /* PE19 gpio WP pin pull up */ + }; + }; + }; }; nand0: nand@40000000 { diff --git a/trunk/arch/arm/boot/dts/at91sam9g15.dtsi b/trunk/arch/arm/boot/dts/at91sam9g15.dtsi new file mode 100644 index 000000000000..fbe7a7089c2a --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9g15.dtsi @@ -0,0 +1,28 @@ +/* + * at91sam9g15.dtsi - Device Tree Include file for AT91SAM9G15 SoC + * + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD + * + * Licensed under GPLv2. + */ + +/include/ "at91sam9x5.dtsi" + +/ { + model = "Atmel AT91SAM9G15 SoC"; + compatible = "atmel, at91sam9g15, atmel,at91sam9x5"; + + ahb { + apb { + pinctrl@fffff400 { + atmel,mux-mask = < + /* A B C */ + 0xffffffff 0xffe0399f 0x00000000 /* pioA */ + 0x00040000 0x00047e3f 0x00000000 /* pioB */ + 0xfdffffff 0x00000000 0xb83fffff /* pioC */ + 0x003fffff 0x003f8000 0x00000000 /* pioD */ + >; + }; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9g15ek.dts b/trunk/arch/arm/boot/dts/at91sam9g15ek.dts new file mode 100644 index 000000000000..86dd3f6d938f --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9g15ek.dts @@ -0,0 +1,16 @@ +/* + * at91sam9g15ek.dts - Device Tree file for AT91SAM9G15-EK board + * + * Copyright (C) 2012 Atmel, + * 2012 Nicolas Ferre + * + * Licensed under GPLv2 or later. + */ +/dts-v1/; +/include/ "at91sam9g15.dtsi" +/include/ "at91sam9x5ek.dtsi" + +/ { + model = "Atmel AT91SAM9G25-EK"; + compatible = "atmel,at91sam9g15ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9g20ek_2mmc.dts b/trunk/arch/arm/boot/dts/at91sam9g20ek_2mmc.dts index f1b2e148ac8c..66467b113126 100644 --- a/trunk/arch/arm/boot/dts/at91sam9g20ek_2mmc.dts +++ b/trunk/arch/arm/boot/dts/at91sam9g20ek_2mmc.dts @@ -12,6 +12,32 @@ model = "Atmel at91sam9g20ek 2 mmc"; compatible = "atmel,at91sam9g20ek_2mmc", "atmel,at91sam9g20", "atmel,at91sam9"; + ahb { + apb{ + mmc0: mmc@fffa8000 { + /* clk already mux wuth slot0 */ + pinctrl-0 = < + &pinctrl_board_mmc0_slot0 + &pinctrl_mmc0_slot0_cmd_dat0 + &pinctrl_mmc0_slot0_dat1_3>; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioC 2 0>; + }; + }; + + pinctrl@fffff400 { + mmc0_slot0 { + pinctrl_board_mmc0_slot0: mmc0_slot0-board { + atmel,pins = + <2 2 0x0 0x5>; /* PC2 gpio CD pin pull up and deglitch */ + }; + }; + }; + }; + }; + leds { compatible = "gpio-leds"; diff --git a/trunk/arch/arm/boot/dts/at91sam9g20ek_common.dtsi b/trunk/arch/arm/boot/dts/at91sam9g20ek_common.dtsi index e6391a4e6649..32a500a0e481 100644 --- a/trunk/arch/arm/boot/dts/at91sam9g20ek_common.dtsi +++ b/trunk/arch/arm/boot/dts/at91sam9g20ek_common.dtsi @@ -35,6 +35,13 @@ }; usart0: serial@fffb0000 { + pinctrl-0 = + <&pinctrl_usart0 + &pinctrl_usart0_rts + &pinctrl_usart0_cts + &pinctrl_usart0_dtr_dsr + &pinctrl_usart0_dcd + &pinctrl_usart0_ri>; status = "okay"; }; @@ -51,6 +58,29 @@ atmel,vbus-gpio = <&pioC 5 0>; status = "okay"; }; + + mmc0: mmc@fffa8000 { + pinctrl-0 = < + &pinctrl_board_mmc0_slot1 + &pinctrl_mmc0_clk + &pinctrl_mmc0_slot1_cmd_dat0 + &pinctrl_mmc0_slot1_dat1_3>; + status = "okay"; + slot@1 { + reg = <1>; + bus-width = <4>; + cd-gpios = <&pioC 9 0>; + }; + }; + + pinctrl@fffff400 { + mmc0_slot1 { + pinctrl_board_mmc0_slot1: mmc0_slot1-board { + atmel,pins = + <2 9 0x0 0x5>; /* PC9 gpio CD pin pull up and deglitch */ + }; + }; + }; }; nand0: nand@40000000 { diff --git a/trunk/arch/arm/boot/dts/at91sam9g25.dtsi b/trunk/arch/arm/boot/dts/at91sam9g25.dtsi new file mode 100644 index 000000000000..05a718fb83c4 --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9g25.dtsi @@ -0,0 +1,28 @@ +/* + * at91sam9g25.dtsi - Device Tree Include file for AT91SAM9G25 SoC + * + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD + * + * Licensed under GPLv2. + */ + +/include/ "at91sam9x5.dtsi" + +/ { + model = "Atmel AT91SAM9G25 SoC"; + compatible = "atmel, at91sam9g25, atmel,at91sam9x5"; + + ahb { + apb { + pinctrl@fffff400 { + atmel,mux-mask = < + /* A B C */ + 0xffffffff 0xffe0399f 0xc000001c /* pioA */ + 0x0007ffff 0x8000fe3f 0x00000000 /* pioB */ + 0x80000000 0x07c0ffff 0xb83fffff /* pioC */ + 0x003fffff 0x003f8000 0x00000000 /* pioD */ + >; + }; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9g25ek.dts b/trunk/arch/arm/boot/dts/at91sam9g25ek.dts index 877c08f06763..c5ab16fba059 100644 --- a/trunk/arch/arm/boot/dts/at91sam9g25ek.dts +++ b/trunk/arch/arm/boot/dts/at91sam9g25ek.dts @@ -7,55 +7,10 @@ * Licensed under GPLv2 or later. */ /dts-v1/; -/include/ "at91sam9x5.dtsi" -/include/ "at91sam9x5cm.dtsi" +/include/ "at91sam9g25.dtsi" +/include/ "at91sam9x5ek.dtsi" / { model = "Atmel AT91SAM9G25-EK"; compatible = "atmel,at91sam9g25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; - - chosen { - bootargs = "console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs"; - }; - - ahb { - apb { - dbgu: serial@fffff200 { - status = "okay"; - }; - - usart0: serial@f801c000 { - status = "okay"; - }; - - macb0: ethernet@f802c000 { - phy-mode = "rmii"; - status = "okay"; - }; - - i2c0: i2c@f8010000 { - status = "okay"; - }; - - i2c1: i2c@f8014000 { - status = "okay"; - }; - - i2c2: i2c@f8018000 { - status = "okay"; - }; - }; - - usb0: ohci@00600000 { - status = "okay"; - num-ports = <2>; - atmel,vbus-gpio = <&pioD 19 1 - &pioD 20 1 - >; - }; - - usb1: ehci@00700000 { - status = "okay"; - }; - }; }; diff --git a/trunk/arch/arm/boot/dts/at91sam9g35.dtsi b/trunk/arch/arm/boot/dts/at91sam9g35.dtsi new file mode 100644 index 000000000000..f9d14a722794 --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9g35.dtsi @@ -0,0 +1,28 @@ +/* + * at91sam9g35.dtsi - Device Tree Include file for AT91SAM9G35 SoC + * + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD + * + * Licensed under GPLv2. + */ + +/include/ "at91sam9x5.dtsi" + +/ { + model = "Atmel AT91SAM9G35 SoC"; + compatible = "atmel, at91sam9g35, atmel,at91sam9x5"; + + ahb { + apb { + pinctrl@fffff400 { + atmel,mux-mask = < + /* A B C */ + 0xffffffff 0xffe0399f 0xc000000c /* pioA */ + 0x000406ff 0x00047e3f 0x00000000 /* pioB */ + 0xfdffffff 0x00000000 0xb83fffff /* pioC */ + 0x003fffff 0x003f8000 0x00000000 /* pioD */ + >; + }; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9g35ek.dts b/trunk/arch/arm/boot/dts/at91sam9g35ek.dts new file mode 100644 index 000000000000..95944bdd798d --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9g35ek.dts @@ -0,0 +1,16 @@ +/* + * at91sam9g35ek.dts - Device Tree file for AT91SAM9G35-EK board + * + * Copyright (C) 2012 Atmel, + * 2012 Nicolas Ferre + * + * Licensed under GPLv2 or later. + */ +/dts-v1/; +/include/ "at91sam9g35.dtsi" +/include/ "at91sam9x5ek.dtsi" + +/ { + model = "Atmel AT91SAM9G35-EK"; + compatible = "atmel,at91sam9g35ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9g45.dtsi b/trunk/arch/arm/boot/dts/at91sam9g45.dtsi index 3add030d61f8..0741caeeced1 100644 --- a/trunk/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/trunk/arch/arm/boot/dts/at91sam9g45.dtsi @@ -108,60 +108,243 @@ interrupts = <21 4 0>; }; - pioA: gpio@fffff200 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff200 0x100>; - interrupts = <2 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + pinctrl@fffff200 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "atmel,at91rm9200-pinctrl", "simple-bus"; + ranges = <0xfffff200 0xfffff200 0xa00>; + + atmel,mux-mask = < + /* A B */ + 0xffffffff 0xffc003ff /* pioA */ + 0xffffffff 0x800f8f00 /* pioB */ + 0xffffffff 0x00000e00 /* pioC */ + 0xffffffff 0xff0c1381 /* pioD */ + 0xffffffff 0x81ffff81 /* pioE */ + >; + + /* shared pinctrl settings */ + dbgu { + pinctrl_dbgu: dbgu-0 { + atmel,pins = + <1 12 0x1 0x0 /* PB12 periph A */ + 1 13 0x1 0x0>; /* PB13 periph A */ + }; + }; - pioB: gpio@fffff400 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff400 0x100>; - interrupts = <3 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + usart0 { + pinctrl_usart0: usart0-0 { + atmel,pins = + <1 19 0x1 0x1 /* PB19 periph A with pullup */ + 1 18 0x1 0x0>; /* PB18 periph A */ + }; + + pinctrl_usart0_rts: usart0_rts-0 { + atmel,pins = + <1 17 0x2 0x0>; /* PB17 periph B */ + }; + + pinctrl_usart0_cts: usart0_cts-0 { + atmel,pins = + <1 15 0x2 0x0>; /* PB15 periph B */ + }; + }; - pioC: gpio@fffff600 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff600 0x100>; - interrupts = <4 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + uart1 { + pinctrl_usart1: usart1-0 { + atmel,pins = + <1 4 0x1 0x1 /* PB4 periph A with pullup */ + 1 5 0x1 0x0>; /* PB5 periph A */ + }; + + pinctrl_usart1_rts: usart1_rts-0 { + atmel,pins = + <3 16 0x1 0x0>; /* PD16 periph A */ + }; + + pinctrl_usart1_cts: usart1_cts-0 { + atmel,pins = + <3 17 0x1 0x0>; /* PD17 periph A */ + }; + }; - pioD: gpio@fffff800 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffff800 0x100>; - interrupts = <5 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + usart2 { + pinctrl_usart2: usart2-0 { + atmel,pins = + <1 6 0x1 0x1 /* PB6 periph A with pullup */ + 1 7 0x1 0x0>; /* PB7 periph A */ + }; + + pinctrl_usart2_rts: usart2_rts-0 { + atmel,pins = + <2 9 0x2 0x0>; /* PC9 periph B */ + }; + + pinctrl_usart2_cts: usart2_cts-0 { + atmel,pins = + <2 11 0x2 0x0>; /* PC11 periph B */ + }; + }; - pioE: gpio@fffffa00 { - compatible = "atmel,at91rm9200-gpio"; - reg = <0xfffffa00 0x100>; - interrupts = <5 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; + usart3 { + pinctrl_usart3: usart3-0 { + atmel,pins = + <1 8 0x1 0x1 /* PB9 periph A with pullup */ + 1 9 0x1 0x0>; /* PB8 periph A */ + }; + + pinctrl_usart3_rts: usart3_rts-0 { + atmel,pins = + <0 23 0x2 0x0>; /* PA23 periph B */ + }; + + pinctrl_usart3_cts: usart3_cts-0 { + atmel,pins = + <0 24 0x2 0x0>; /* PA24 periph B */ + }; + }; + + nand { + pinctrl_nand: nand-0 { + atmel,pins = + <2 8 0x0 0x1 /* PC8 gpio RDY pin pull_up*/ + 2 14 0x0 0x1>; /* PC14 gpio enable pin pull_up */ + }; + }; + + macb { + pinctrl_macb_rmii: macb_rmii-0 { + atmel,pins = + <0 10 0x1 0x0 /* PA10 periph A */ + 0 11 0x1 0x0 /* PA11 periph A */ + 0 12 0x1 0x0 /* PA12 periph A */ + 0 13 0x1 0x0 /* PA13 periph A */ + 0 14 0x1 0x0 /* PA14 periph A */ + 0 15 0x1 0x0 /* PA15 periph A */ + 0 16 0x1 0x0 /* PA16 periph A */ + 0 17 0x1 0x0 /* PA17 periph A */ + 0 18 0x1 0x0 /* PA18 periph A */ + 0 19 0x1 0x0>; /* PA19 periph A */ + }; + + pinctrl_macb_rmii_mii: macb_rmii_mii-0 { + atmel,pins = + <0 6 0x2 0x0 /* PA6 periph B */ + 0 7 0x2 0x0 /* PA7 periph B */ + 0 8 0x2 0x0 /* PA8 periph B */ + 0 9 0x2 0x0 /* PA9 periph B */ + 0 27 0x2 0x0 /* PA27 periph B */ + 0 28 0x2 0x0 /* PA28 periph B */ + 0 29 0x2 0x0 /* PA29 periph B */ + 0 30 0x2 0x0>; /* PA30 periph B */ + }; + }; + + mmc0 { + pinctrl_mmc0_slot0_clk_cmd_dat0: mmc0_slot0_clk_cmd_dat0-0 { + atmel,pins = + <0 0 0x1 0x0 /* PA0 periph A */ + 0 1 0x1 0x1 /* PA1 periph A with pullup */ + 0 2 0x1 0x1>; /* PA2 periph A with pullup */ + }; + + pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { + atmel,pins = + <0 3 0x1 0x1 /* PA3 periph A with pullup */ + 0 4 0x1 0x1 /* PA4 periph A with pullup */ + 0 5 0x1 0x1>; /* PA5 periph A with pullup */ + }; + + pinctrl_mmc0_slot0_dat4_7: mmc0_slot0_dat4_7-0 { + atmel,pins = + <0 6 0x1 0x1 /* PA6 periph A with pullup */ + 0 7 0x1 0x1 /* PA7 periph A with pullup */ + 0 8 0x1 0x1 /* PA8 periph A with pullup */ + 0 9 0x1 0x1>; /* PA9 periph A with pullup */ + }; + }; + + mmc1 { + pinctrl_mmc1_slot0_clk_cmd_dat0: mmc1_slot0_clk_cmd_dat0-0 { + atmel,pins = + <0 31 0x1 0x0 /* PA31 periph A */ + 0 22 0x1 0x1 /* PA22 periph A with pullup */ + 0 23 0x1 0x1>; /* PA23 periph A with pullup */ + }; + + pinctrl_mmc1_slot0_dat1_3: mmc1_slot0_dat1_3-0 { + atmel,pins = + <0 24 0x1 0x1 /* PA24 periph A with pullup */ + 0 25 0x1 0x1 /* PA25 periph A with pullup */ + 0 26 0x1 0x1>; /* PA26 periph A with pullup */ + }; + + pinctrl_mmc1_slot0_dat4_7: mmc1_slot0_dat4_7-0 { + atmel,pins = + <0 27 0x1 0x1 /* PA27 periph A with pullup */ + 0 28 0x1 0x1 /* PA28 periph A with pullup */ + 0 29 0x1 0x1 /* PA29 periph A with pullup */ + 0 20 0x1 0x1>; /* PA30 periph A with pullup */ + }; + }; + + pioA: gpio@fffff200 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff200 0x200>; + interrupts = <2 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioB: gpio@fffff400 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff400 0x200>; + interrupts = <3 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioC: gpio@fffff600 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff600 0x200>; + interrupts = <4 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioD: gpio@fffff800 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffff800 0x200>; + interrupts = <5 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioE: gpio@fffffa00 { + compatible = "atmel,at91rm9200-gpio"; + reg = <0xfffffa00 0x200>; + interrupts = <5 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; }; dbgu: serial@ffffee00 { compatible = "atmel,at91sam9260-usart"; reg = <0xffffee00 0x200>; interrupts = <1 4 7>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_dbgu>; status = "disabled"; }; @@ -171,6 +354,8 @@ interrupts = <7 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart0>; status = "disabled"; }; @@ -180,6 +365,8 @@ interrupts = <8 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart1>; status = "disabled"; }; @@ -189,6 +376,8 @@ interrupts = <9 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart2>; status = "disabled"; }; @@ -198,6 +387,8 @@ interrupts = <10 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart3>; status = "disabled"; }; @@ -205,6 +396,8 @@ compatible = "cdns,at32ap7000-macb", "cdns,macb"; reg = <0xfffbc000 0x100>; interrupts = <25 4 3>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_macb_rmii>; status = "disabled"; }; @@ -262,6 +455,24 @@ trigger-value = <0x6>; }; }; + + mmc0: mmc@fff80000 { + compatible = "atmel,hsmci"; + reg = <0xfff80000 0x600>; + interrupts = <11 4 0>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + mmc1: mmc@fffd0000 { + compatible = "atmel,hsmci"; + reg = <0xfffd0000 0x600>; + interrupts = <29 4 0>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; }; nand0: nand@40000000 { @@ -273,6 +484,8 @@ >; atmel,nand-addr-offset = <21>; atmel,nand-cmd-offset = <22>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_nand>; gpios = <&pioC 8 0 &pioC 14 0 0 diff --git a/trunk/arch/arm/boot/dts/at91sam9m10g45ek.dts b/trunk/arch/arm/boot/dts/at91sam9m10g45ek.dts index 15e1dd43f625..20c31913c270 100644 --- a/trunk/arch/arm/boot/dts/at91sam9m10g45ek.dts +++ b/trunk/arch/arm/boot/dts/at91sam9m10g45ek.dts @@ -39,6 +39,10 @@ }; usart1: serial@fff90000 { + pinctrl-0 = + <&pinctrl_usart1 + &pinctrl_usart1_rts + &pinctrl_usart1_cts>; status = "okay"; }; @@ -54,6 +58,50 @@ i2c1: i2c@fff88000 { status = "okay"; }; + + mmc0: mmc@fff80000 { + pinctrl-0 = < + &pinctrl_board_mmc0 + &pinctrl_mmc0_slot0_clk_cmd_dat0 + &pinctrl_mmc0_slot0_dat1_3>; + status = "okay"; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 10 0>; + }; + }; + + mmc1: mmc@fffd0000 { + pinctrl-0 = < + &pinctrl_board_mmc1 + &pinctrl_mmc1_slot0_clk_cmd_dat0 + &pinctrl_mmc1_slot0_dat1_3>; + status = "okay"; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 11 0>; + wp-gpios = <&pioD 29 0>; + }; + }; + + pinctrl@fffff200 { + mmc0 { + pinctrl_board_mmc0: mmc0-board { + atmel,pins = + <3 10 0x0 0x5>; /* PD10 gpio CD pin pull up and deglitch */ + }; + }; + + mmc1 { + pinctrl_board_mmc1: mmc1-board { + atmel,pins = + <3 11 0x0 0x5 /* PD11 gpio CD pin pull up and deglitch */ + 3 29 0x0 0x1>; /* PD29 gpio WP pin pull up */ + }; + }; + }; }; nand0: nand@40000000 { diff --git a/trunk/arch/arm/boot/dts/at91sam9n12.dtsi b/trunk/arch/arm/boot/dts/at91sam9n12.dtsi index 82508d68aa7e..e9efb34f4379 100644 --- a/trunk/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/trunk/arch/arm/boot/dts/at91sam9n12.dtsi @@ -84,6 +84,15 @@ reg = <0xfffffe10 0x10>; }; + mmc0: mmc@f0008000 { + compatible = "atmel,hsmci"; + reg = <0xf0008000 0x600>; + interrupts = <12 4 0>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + tcb0: timer@f8008000 { compatible = "atmel,at91sam9x5-tcb"; reg = <0xf8008000 0x100>; @@ -102,50 +111,186 @@ interrupts = <20 4 0>; }; - pioA: gpio@fffff400 { - compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; - reg = <0xfffff400 0x100>; - interrupts = <2 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + pinctrl@fffff400 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus"; + ranges = <0xfffff400 0xfffff400 0x800>; - pioB: gpio@fffff600 { - compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; - reg = <0xfffff600 0x100>; - interrupts = <2 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + atmel,mux-mask = < + /* A B C */ + 0xffffffff 0xffe07983 0x00000000 /* pioA */ + 0x00040000 0x00047e0f 0x00000000 /* pioB */ + 0xfdffffff 0x07c00000 0xb83fffff /* pioC */ + 0x003fffff 0x003f8000 0x00000000 /* pioD */ + >; - pioC: gpio@fffff800 { - compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; - reg = <0xfffff800 0x100>; - interrupts = <3 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + /* shared pinctrl settings */ + dbgu { + pinctrl_dbgu: dbgu-0 { + atmel,pins = + <0 9 0x1 0x0 /* PA9 periph A */ + 0 10 0x1 0x1>; /* PA10 periph with pullup */ + }; + }; - pioD: gpio@fffffa00 { - compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; - reg = <0xfffffa00 0x100>; - interrupts = <3 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; + usart0 { + pinctrl_usart0: usart0-0 { + atmel,pins = + <0 1 0x1 0x1 /* PA1 periph A with pullup */ + 0 0 0x1 0x0>; /* PA0 periph A */ + }; + + pinctrl_usart0_rts: usart0_rts-0 { + atmel,pins = + <0 2 0x1 0x0>; /* PA2 periph A */ + }; + + pinctrl_usart0_cts: usart0_cts-0 { + atmel,pins = + <0 3 0x1 0x0>; /* PA3 periph A */ + }; + }; + + usart1 { + pinctrl_usart1: usart1-0 { + atmel,pins = + <0 6 0x1 0x1 /* PA6 periph A with pullup */ + 0 5 0x1 0x0>; /* PA5 periph A */ + }; + }; + + usart2 { + pinctrl_usart2: usart2-0 { + atmel,pins = + <0 8 0x1 0x1 /* PA8 periph A with pullup */ + 0 7 0x1 0x0>; /* PA7 periph A */ + }; + + pinctrl_usart2_rts: usart2_rts-0 { + atmel,pins = + <1 0 0x2 0x0>; /* PB0 periph B */ + }; + + pinctrl_usart2_cts: usart2_cts-0 { + atmel,pins = + <1 1 0x2 0x0>; /* PB1 periph B */ + }; + }; + + usart3 { + pinctrl_usart3: usart3-0 { + atmel,pins = + <2 23 0x2 0x1 /* PC23 periph B with pullup */ + 2 22 0x2 0x0>; /* PC22 periph B */ + }; + + pinctrl_usart3_rts: usart3_rts-0 { + atmel,pins = + <2 24 0x2 0x0>; /* PC24 periph B */ + }; + + pinctrl_usart3_cts: usart3_cts-0 { + atmel,pins = + <2 25 0x2 0x0>; /* PC25 periph B */ + }; + }; + + uart0 { + pinctrl_uart0: uart0-0 { + atmel,pins = + <2 9 0x3 0x1 /* PC9 periph C with pullup */ + 2 8 0x3 0x0>; /* PC8 periph C */ + }; + }; + + uart1 { + pinctrl_uart1: uart1-0 { + atmel,pins = + <2 16 0x3 0x1 /* PC17 periph C with pullup */ + 2 17 0x3 0x0>; /* PC16 periph C */ + }; + }; + + nand { + pinctrl_nand: nand-0 { + atmel,pins = + <3 5 0x0 0x1 /* PD5 gpio RDY pin pull_up*/ + 3 4 0x0 0x1>; /* PD4 gpio enable pin pull_up */ + }; + }; + + mmc0 { + pinctrl_mmc0_slot0_clk_cmd_dat0: mmc0_slot0_clk_cmd_dat0-0 { + atmel,pins = + <0 17 0x1 0x0 /* PA17 periph A */ + 0 16 0x1 0x1 /* PA16 periph A with pullup */ + 0 15 0x1 0x1>; /* PA15 periph A with pullup */ + }; + + pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { + atmel,pins = + <0 18 0x1 0x1 /* PA18 periph A with pullup */ + 0 19 0x1 0x1 /* PA19 periph A with pullup */ + 0 20 0x1 0x1>; /* PA20 periph A with pullup */ + }; + + pinctrl_mmc0_slot0_dat4_7: mmc0_slot0_dat4_7-0 { + atmel,pins = + <0 11 0x2 0x1 /* PA11 periph B with pullup */ + 0 12 0x2 0x1 /* PA12 periph B with pullup */ + 0 13 0x2 0x1 /* PA13 periph B with pullup */ + 0 14 0x2 0x1>; /* PA14 periph B with pullup */ + }; + }; + + pioA: gpio@fffff400 { + compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; + reg = <0xfffff400 0x200>; + interrupts = <2 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioB: gpio@fffff600 { + compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; + reg = <0xfffff600 0x200>; + interrupts = <2 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioC: gpio@fffff800 { + compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; + reg = <0xfffff800 0x200>; + interrupts = <3 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioD: gpio@fffffa00 { + compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; + reg = <0xfffffa00 0x200>; + interrupts = <3 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; }; dbgu: serial@fffff200 { compatible = "atmel,at91sam9260-usart"; reg = <0xfffff200 0x200>; interrupts = <1 4 7>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_dbgu>; status = "disabled"; }; @@ -155,6 +300,8 @@ interrupts = <5 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart0>; status = "disabled"; }; @@ -164,6 +311,8 @@ interrupts = <6 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart1>; status = "disabled"; }; @@ -173,6 +322,8 @@ interrupts = <7 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart2>; status = "disabled"; }; @@ -182,6 +333,8 @@ interrupts = <8 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart3>; status = "disabled"; }; @@ -215,6 +368,8 @@ >; atmel,nand-addr-offset = <21>; atmel,nand-cmd-offset = <22>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_nand>; gpios = <&pioD 5 0 &pioD 4 0 0 diff --git a/trunk/arch/arm/boot/dts/at91sam9n12ek.dts b/trunk/arch/arm/boot/dts/at91sam9n12ek.dts index 912b2c283d6f..0376bf4fd66b 100644 --- a/trunk/arch/arm/boot/dts/at91sam9n12ek.dts +++ b/trunk/arch/arm/boot/dts/at91sam9n12ek.dts @@ -45,6 +45,28 @@ i2c1: i2c@f8014000 { status = "okay"; }; + + mmc0: mmc@f0008000 { + pinctrl-0 = < + &pinctrl_board_mmc0 + &pinctrl_mmc0_slot0_clk_cmd_dat0 + &pinctrl_mmc0_slot0_dat1_3>; + status = "okay"; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioA 7 0>; + }; + }; + + pinctrl@fffff400 { + mmc0 { + pinctrl_board_mmc0: mmc0-board { + atmel,pins = + <0 7 0x0 0x5>; /* PA7 gpio CD pin pull up and deglitch */ + }; + }; + }; }; nand0: nand@40000000 { diff --git a/trunk/arch/arm/boot/dts/at91sam9x25.dtsi b/trunk/arch/arm/boot/dts/at91sam9x25.dtsi new file mode 100644 index 000000000000..54eb33ba6d22 --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9x25.dtsi @@ -0,0 +1,49 @@ +/* + * at91sam9x25.dtsi - Device Tree Include file for AT91SAM9X25 SoC + * + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD + * + * Licensed under GPLv2. + */ + +/include/ "at91sam9x5.dtsi" + +/ { + model = "Atmel AT91SAM9X25 SoC"; + compatible = "atmel, at91sam9x25, atmel,at91sam9x5"; + + ahb { + apb { + pinctrl@fffff400 { + atmel,mux-mask = < + /* A B C */ + 0xffffffff 0xffe03fff 0xc000001c /* pioA */ + 0x0007ffff 0x00047e3f 0x00000000 /* pioB */ + 0x80000000 0xfffd0000 0xb83fffff /* pioC */ + 0x003fffff 0x003f8000 0x00000000 /* pioD */ + >; + + macb1 { + pinctrl_macb1_rmii: macb1_rmii-0 { + atmel,pins = + <2 16 0x2 0x0 /* PC16 periph B */ + 2 18 0x2 0x0 /* PC18 periph B */ + 2 19 0x2 0x0 /* PC19 periph B */ + 2 20 0x2 0x0 /* PC20 periph B */ + 2 21 0x2 0x0 /* PC21 periph B */ + 2 27 0x2 0x0 /* PC27 periph B */ + 2 28 0x2 0x0 /* PC28 periph B */ + 2 29 0x2 0x0 /* PC29 periph B */ + 2 30 0x2 0x0 /* PC30 periph B */ + 2 31 0x2 0x0>; /* PC31 periph B */ + }; + }; + }; + + macb1: ethernet@f8030000 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_macb1_rmii>; + }; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9x25ek.dts b/trunk/arch/arm/boot/dts/at91sam9x25ek.dts new file mode 100644 index 000000000000..af907eaa1f25 --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9x25ek.dts @@ -0,0 +1,16 @@ +/* + * at91sam9x25ek.dts - Device Tree file for AT91SAM9X25-EK board + * + * Copyright (C) 2012 Atmel, + * 2012 Nicolas Ferre + * + * Licensed under GPLv2 or later. + */ +/dts-v1/; +/include/ "at91sam9x25.dtsi" +/include/ "at91sam9x5ek.dtsi" + +/ { + model = "Atmel AT91SAM9G25-EK"; + compatible = "atmel,at91sam9x25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9x35.dtsi b/trunk/arch/arm/boot/dts/at91sam9x35.dtsi new file mode 100644 index 000000000000..fb102d6126ce --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9x35.dtsi @@ -0,0 +1,28 @@ +/* + * at91sam9x35.dtsi - Device Tree Include file for AT91SAM9X35 SoC + * + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD + * + * Licensed under GPLv2. + */ + +/include/ "at91sam9x5.dtsi" + +/ { + model = "Atmel AT91SAM9X35 SoC"; + compatible = "atmel, at91sam9x35, atmel,at91sam9x5"; + + ahb { + apb { + pinctrl@fffff400 { + atmel,mux-mask = < + /* A B C */ + 0xffffffff 0xffe03fff 0xc000000c /* pioA */ + 0x000406ff 0x00047e3f 0x00000000 /* pioB */ + 0xfdffffff 0x00000000 0xb83fffff /* pioC */ + 0x003fffff 0x003f8000 0x00000000 /* pioD */ + >; + }; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9x35ek.dts b/trunk/arch/arm/boot/dts/at91sam9x35ek.dts new file mode 100644 index 000000000000..5ccb607b5414 --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9x35ek.dts @@ -0,0 +1,16 @@ +/* + * at91sam9x35ek.dts - Device Tree file for AT91SAM9X35-EK board + * + * Copyright (C) 2012 Atmel, + * 2012 Nicolas Ferre + * + * Licensed under GPLv2 or later. + */ +/dts-v1/; +/include/ "at91sam9x35.dtsi" +/include/ "at91sam9x5ek.dtsi" + +/ { + model = "Atmel AT91SAM9X35-EK"; + compatible = "atmel,at91sam9x35ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; +}; diff --git a/trunk/arch/arm/boot/dts/at91sam9x5.dtsi b/trunk/arch/arm/boot/dts/at91sam9x5.dtsi index 03fc136421c5..7ee49e8daf98 100644 --- a/trunk/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/trunk/arch/arm/boot/dts/at91sam9x5.dtsi @@ -111,50 +111,244 @@ interrupts = <21 4 0>; }; - pioA: gpio@fffff400 { - compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; - reg = <0xfffff400 0x100>; - interrupts = <2 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; - }; + pinctrl@fffff400 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus"; + ranges = <0xfffff400 0xfffff400 0x800>; + + /* shared pinctrl settings */ + dbgu { + pinctrl_dbgu: dbgu-0 { + atmel,pins = + <0 9 0x1 0x0 /* PA9 periph A */ + 0 10 0x1 0x1>; /* PA10 periph A with pullup */ + }; + }; - pioB: gpio@fffff600 { - compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; - reg = <0xfffff600 0x100>; - interrupts = <2 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; + usart0 { + pinctrl_usart0: usart0-0 { + atmel,pins = + <0 0 0x1 0x1 /* PA0 periph A with pullup */ + 0 1 0x1 0x0>; /* PA1 periph A */ + }; + + pinctrl_usart0_rts: usart0_rts-0 { + atmel,pins = + <0 2 0x1 0x0>; /* PA2 periph A */ + }; + + pinctrl_usart0_cts: usart0_cts-0 { + atmel,pins = + <0 3 0x1 0x0>; /* PA3 periph A */ + }; + }; + + usart1 { + pinctrl_usart1: usart1-0 { + atmel,pins = + <0 5 0x1 0x1 /* PA5 periph A with pullup */ + 0 6 0x1 0x0>; /* PA6 periph A */ + }; + + pinctrl_usart1_rts: usart1_rts-0 { + atmel,pins = + <3 27 0x3 0x0>; /* PC27 periph C */ + }; + + pinctrl_usart1_cts: usart1_cts-0 { + atmel,pins = + <3 28 0x3 0x0>; /* PC28 periph C */ + }; + }; + + usart2 { + pinctrl_usart2: usart2-0 { + atmel,pins = + <0 7 0x1 0x1 /* PA7 periph A with pullup */ + 0 8 0x1 0x0>; /* PA8 periph A */ + }; + + pinctrl_uart2_rts: uart2_rts-0 { + atmel,pins = + <0 0 0x2 0x0>; /* PB0 periph B */ + }; + + pinctrl_uart2_cts: uart2_cts-0 { + atmel,pins = + <0 1 0x2 0x0>; /* PB1 periph B */ + }; + }; + + usart3 { + pinctrl_uart3: usart3-0 { + atmel,pins = + <3 23 0x2 0x1 /* PC22 periph B with pullup */ + 3 23 0x2 0x0>; /* PC23 periph B */ + }; + + pinctrl_usart3_rts: usart3_rts-0 { + atmel,pins = + <3 24 0x2 0x0>; /* PC24 periph B */ + }; + + pinctrl_usart3_cts: usart3_cts-0 { + atmel,pins = + <3 25 0x2 0x0>; /* PC25 periph B */ + }; + }; + + uart0 { + pinctrl_uart0: uart0-0 { + atmel,pins = + <3 8 0x3 0x0 /* PC8 periph C */ + 3 9 0x3 0x1>; /* PC9 periph C with pullup */ + }; + }; + + uart1 { + pinctrl_uart1: uart1-0 { + atmel,pins = + <3 16 0x3 0x0 /* PC16 periph C */ + 3 17 0x3 0x1>; /* PC17 periph C with pullup */ + }; + }; + + nand { + pinctrl_nand: nand-0 { + atmel,pins = + <3 4 0x0 0x1 /* PD5 gpio RDY pin pull_up */ + 3 5 0x0 0x1>; /* PD4 gpio enable pin pull_up */ + }; + }; + + macb0 { + pinctrl_macb0_rmii: macb0_rmii-0 { + atmel,pins = + <1 0 0x1 0x0 /* PB0 periph A */ + 1 1 0x1 0x0 /* PB1 periph A */ + 1 2 0x1 0x0 /* PB2 periph A */ + 1 3 0x1 0x0 /* PB3 periph A */ + 1 4 0x1 0x0 /* PB4 periph A */ + 1 5 0x1 0x0 /* PB5 periph A */ + 1 6 0x1 0x0 /* PB6 periph A */ + 1 7 0x1 0x0 /* PB7 periph A */ + 1 9 0x1 0x0 /* PB9 periph A */ + 1 10 0x1 0x0>; /* PB10 periph A */ + }; + + pinctrl_macb0_rmii_mii: macb0_rmii_mii-0 { + atmel,pins = + <1 8 0x1 0x0 /* PA8 periph A */ + 1 11 0x1 0x0 /* PA11 periph A */ + 1 12 0x1 0x0 /* PA12 periph A */ + 1 13 0x1 0x0 /* PA13 periph A */ + 1 14 0x1 0x0 /* PA14 periph A */ + 1 15 0x1 0x0 /* PA15 periph A */ + 1 16 0x1 0x0 /* PA16 periph A */ + 1 17 0x1 0x0>; /* PA17 periph A */ + }; + }; + + mmc0 { + pinctrl_mmc0_slot0_clk_cmd_dat0: mmc0_slot0_clk_cmd_dat0-0 { + atmel,pins = + <0 17 0x1 0x0 /* PA17 periph A */ + 0 16 0x1 0x1 /* PA16 periph A with pullup */ + 0 15 0x1 0x1>; /* PA15 periph A with pullup */ + }; + + pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { + atmel,pins = + <0 18 0x1 0x1 /* PA18 periph A with pullup */ + 0 19 0x1 0x1 /* PA19 periph A with pullup */ + 0 20 0x1 0x1>; /* PA20 periph A with pullup */ + }; + }; + + mmc1 { + pinctrl_mmc1_slot0_clk_cmd_dat0: mmc1_slot0_clk_cmd_dat0-0 { + atmel,pins = + <0 13 0x2 0x0 /* PA13 periph B */ + 0 12 0x2 0x1 /* PA12 periph B with pullup */ + 0 11 0x2 0x1>; /* PA11 periph B with pullup */ + }; + + pinctrl_mmc1_slot0_dat1_3: mmc1_slot0_dat1_3-0 { + atmel,pins = + <0 2 0x2 0x1 /* PA2 periph B with pullup */ + 0 3 0x2 0x1 /* PA3 periph B with pullup */ + 0 4 0x2 0x1>; /* PA4 periph B with pullup */ + }; + }; + + pioA: gpio@fffff400 { + compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; + reg = <0xfffff400 0x200>; + interrupts = <2 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioB: gpio@fffff600 { + compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; + reg = <0xfffff600 0x200>; + interrupts = <2 4 1>; + #gpio-cells = <2>; + gpio-controller; + #gpio-lines = <19>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioC: gpio@fffff800 { + compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; + reg = <0xfffff800 0x200>; + interrupts = <3 4 1>; + #gpio-cells = <2>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <2>; + }; + + pioD: gpio@fffffa00 { + compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; + reg = <0xfffffa00 0x200>; + interrupts = <3 4 1>; + #gpio-cells = <2>; + gpio-controller; + #gpio-lines = <22>; + interrupt-controller; + #interrupt-cells = <2>; + }; }; - pioC: gpio@fffff800 { - compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; - reg = <0xfffff800 0x100>; - interrupts = <3 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; + mmc0: mmc@f0008000 { + compatible = "atmel,hsmci"; + reg = <0xf0008000 0x600>; + interrupts = <12 4 0>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; }; - pioD: gpio@fffffa00 { - compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; - reg = <0xfffffa00 0x100>; - interrupts = <3 4 1>; - #gpio-cells = <2>; - gpio-controller; - interrupt-controller; - #interrupt-cells = <2>; + mmc1: mmc@f000c000 { + compatible = "atmel,hsmci"; + reg = <0xf000c000 0x600>; + interrupts = <26 4 0>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; }; dbgu: serial@fffff200 { compatible = "atmel,at91sam9260-usart"; reg = <0xfffff200 0x200>; interrupts = <1 4 7>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_dbgu>; status = "disabled"; }; @@ -164,6 +358,8 @@ interrupts = <5 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart0>; status = "disabled"; }; @@ -173,6 +369,8 @@ interrupts = <6 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart1>; status = "disabled"; }; @@ -182,6 +380,8 @@ interrupts = <7 4 5>; atmel,use-dma-rx; atmel,use-dma-tx; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usart2>; status = "disabled"; }; @@ -189,6 +389,8 @@ compatible = "cdns,at32ap7000-macb", "cdns,macb"; reg = <0xf802c000 0x100>; interrupts = <24 4 3>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_macb0_rmii>; status = "disabled"; }; @@ -273,6 +475,8 @@ >; atmel,nand-addr-offset = <21>; atmel,nand-cmd-offset = <22>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_nand>; gpios = <&pioD 5 0 &pioD 4 0 0 diff --git a/trunk/arch/arm/boot/dts/at91sam9x5ek.dtsi b/trunk/arch/arm/boot/dts/at91sam9x5ek.dtsi new file mode 100644 index 000000000000..8a7cf1d9cf5d --- /dev/null +++ b/trunk/arch/arm/boot/dts/at91sam9x5ek.dtsi @@ -0,0 +1,101 @@ +/* + * at91sam9x5ek.dtsi - Device Tree file for AT91SAM9x5CM Base board + * + * Copyright (C) 2012 Atmel, + * 2012 Nicolas Ferre + * + * Licensed under GPLv2 or later. + */ +/include/ "at91sam9x5cm.dtsi" + +/ { + model = "Atmel AT91SAM9X5-EK"; + compatible = "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; + + chosen { + bootargs = "128M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs"; + }; + + ahb { + apb { + mmc0: mmc@f0008000 { + pinctrl-0 = < + &pinctrl_board_mmc0 + &pinctrl_mmc0_slot0_clk_cmd_dat0 + &pinctrl_mmc0_slot0_dat1_3>; + status = "okay"; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 15 0>; + }; + }; + + mmc1: mmc@f000c000 { + pinctrl-0 = < + &pinctrl_board_mmc1 + &pinctrl_mmc1_slot0_clk_cmd_dat0 + &pinctrl_mmc1_slot0_dat1_3>; + status = "okay"; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 14 0>; + }; + }; + + dbgu: serial@fffff200 { + status = "okay"; + }; + + usart0: serial@f801c000 { + status = "okay"; + }; + + macb0: ethernet@f802c000 { + phy-mode = "rmii"; + status = "okay"; + }; + + i2c0: i2c@f8010000 { + status = "okay"; + }; + + i2c1: i2c@f8014000 { + status = "okay"; + }; + + i2c2: i2c@f8018000 { + status = "okay"; + }; + + pinctrl@fffff400 { + mmc0 { + pinctrl_board_mmc0: mmc0-board { + atmel,pins = + <3 15 0x0 0x5>; /* PD15 gpio CD pin pull up and deglitch */ + }; + }; + + mmc1 { + pinctrl_board_mmc1: mmc1-board { + atmel,pins = + <3 14 0x0 0x5>; /* PD14 gpio CD pin pull up and deglitch */ + }; + }; + }; + }; + + usb0: ohci@00600000 { + status = "okay"; + num-ports = <2>; + atmel,vbus-gpio = <&pioD 19 1 + &pioD 20 1 + >; + }; + + usb1: ehci@00700000 { + status = "okay"; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/dbx5x0.dtsi b/trunk/arch/arm/boot/dts/dbx5x0.dtsi index 4b0e0ca08f40..731086b2fca2 100644 --- a/trunk/arch/arm/boot/dts/dbx5x0.dtsi +++ b/trunk/arch/arm/boot/dts/dbx5x0.dtsi @@ -203,6 +203,14 @@ reg = <0x80157450 0xC>; }; + thermal@801573c0 { + compatible = "stericsson,db8500-thermal"; + reg = <0x801573c0 0x40>; + interrupts = <21 0x4>, <22 0x4>; + interrupt-names = "IRQ_HOTMON_LOW", "IRQ_HOTMON_HIGH"; + status = "disabled"; + }; + db8500-prcmu-regulators { compatible = "stericsson,db8500-prcmu-regulator"; @@ -660,5 +668,11 @@ ranges = <0 0x50000000 0x4000000>; status = "disabled"; }; + + cpufreq-cooling { + compatible = "stericsson,db8500-cpufreq-cooling"; + status = "disabled"; + }; + }; }; diff --git a/trunk/arch/arm/boot/dts/imx28.dtsi b/trunk/arch/arm/boot/dts/imx28.dtsi index 55c57ea6169e..b4587b27ae42 100644 --- a/trunk/arch/arm/boot/dts/imx28.dtsi +++ b/trunk/arch/arm/boot/dts/imx28.dtsi @@ -799,6 +799,7 @@ compatible = "fsl,imx28-auart", "fsl,imx23-auart"; reg = <0x8006a000 0x2000>; interrupts = <112 70 71>; + fsl,auart-dma-channel = <8 9>; clocks = <&clks 45>; status = "disabled"; }; diff --git a/trunk/arch/arm/boot/dts/pm9g45.dts b/trunk/arch/arm/boot/dts/pm9g45.dts new file mode 100644 index 000000000000..387fedb58988 --- /dev/null +++ b/trunk/arch/arm/boot/dts/pm9g45.dts @@ -0,0 +1,165 @@ +/* + * pm9g45.dts - Device Tree file for Ronetix pm9g45 board + * + * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD + * + * Licensed under GPLv2. + */ +/dts-v1/; +/include/ "at91sam9g45.dtsi" + +/ { + model = "Ronetix pm9g45"; + compatible = "ronetix,pm9g45", "atmel,at91sam9g45", "atmel,at91sam9"; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + memory { + reg = <0x70000000 0x8000000>; + }; + + clocks { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + main_clock: clock@0 { + compatible = "atmel,osc", "fixed-clock"; + clock-frequency = <12000000>; + }; + }; + + ahb { + apb { + dbgu: serial@ffffee00 { + status = "okay"; + }; + + pinctrl@fffff200 { + + board { + pinctrl_board_nand: nand0-board { + atmel,pins = + <3 3 0x0 0x1 /* PD3 gpio RDY pin pull_up*/ + 2 14 0x0 0x1>; /* PC14 gpio enable pin pull_up */ + }; + }; + + mmc { + pinctrl_board_mmc: mmc0-board { + atmel,pins = + <3 6 0x0 0x5>; /* PD6 gpio CD pin pull_up and deglitch */ + }; + }; + }; + + mmc0: mmc@fff80000 { + pinctrl-0 = < + &pinctrl_board_mmc + &pinctrl_mmc0_slot0_clk_cmd_dat0 + &pinctrl_mmc0_slot0_dat1_3>; + status = "okay"; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioD 6 0>; + }; + }; + + macb0: ethernet@fffbc000 { + phy-mode = "rmii"; + status = "okay"; + }; + + }; + + nand0: nand@40000000 { + nand-bus-width = <8>; + nand-ecc-mode = "soft"; + nand-on-flash-bbt; + pinctrl-0 = <&pinctrl_board_nand>; + + gpios = <&pioD 3 0 + &pioC 14 0 + 0 + >; + + status = "okay"; + + at91bootstrap@0 { + label = "at91bootstrap"; + reg = <0x0 0x20000>; + }; + + barebox@20000 { + label = "barebox"; + reg = <0x20000 0x40000>; + }; + + bareboxenv@60000 { + label = "bareboxenv"; + reg = <0x60000 0x1A0000>; + }; + + kernel@200000 { + label = "bareboxenv2"; + reg = <0x200000 0x300000>; + }; + + kernel@500000 { + label = "root"; + reg = <0x500000 0x400000>; + }; + + data@900000 { + label = "data"; + reg = <0x900000 0x8340000>; + }; + }; + + usb0: ohci@00700000 { + status = "okay"; + num-ports = <2>; + }; + + usb1: ehci@00800000 { + status = "okay"; + }; + }; + + leds { + compatible = "gpio-leds"; + + led0 { + label = "led0"; + gpios = <&pioD 0 1>; + linux,default-trigger = "nand-disk"; + }; + + led1 { + label = "led1"; + gpios = <&pioD 31 0>; + linux,default-trigger = "heartbeat"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + + right { + label = "SW4"; + gpios = <&pioE 7 1>; + linux,code = <106>; + }; + + up { + label = "SW3"; + gpios = <&pioE 8 1>; + linux,code = <103>; + }; + }; +}; diff --git a/trunk/arch/arm/boot/dts/snowball.dts b/trunk/arch/arm/boot/dts/snowball.dts index 702c0baa6004..c6f85f0bc531 100644 --- a/trunk/arch/arm/boot/dts/snowball.dts +++ b/trunk/arch/arm/boot/dts/snowball.dts @@ -99,6 +99,33 @@ status = "okay"; }; + prcmu@80157000 { + thermal@801573c0 { + num-trips = <4>; + + trip0-temp = <70000>; + trip0-type = "active"; + trip0-cdev-num = <1>; + trip0-cdev-name0 = "thermal-cpufreq-0"; + + trip1-temp = <75000>; + trip1-type = "active"; + trip1-cdev-num = <1>; + trip1-cdev-name0 = "thermal-cpufreq-0"; + + trip2-temp = <80000>; + trip2-type = "active"; + trip2-cdev-num = <1>; + trip2-cdev-name0 = "thermal-cpufreq-0"; + + trip3-temp = <85000>; + trip3-type = "critical"; + trip3-cdev-num = <0>; + + status = "okay"; + }; + }; + external-bus@50000000 { status = "okay"; @@ -183,5 +210,9 @@ reg = <0x33>; }; }; + + cpufreq-cooling { + status = "okay"; + }; }; }; diff --git a/trunk/arch/arm/boot/dts/spear1310-evb.dts b/trunk/arch/arm/boot/dts/spear1310-evb.dts index dd4358bc26e2..2e4c5727468e 100644 --- a/trunk/arch/arm/boot/dts/spear1310-evb.dts +++ b/trunk/arch/arm/boot/dts/spear1310-evb.dts @@ -181,6 +181,10 @@ status = "okay"; }; + gpio@d8400000 { + status = "okay"; + }; + i2c0: i2c@e0280000 { status = "okay"; }; diff --git a/trunk/arch/arm/boot/dts/spear1310.dtsi b/trunk/arch/arm/boot/dts/spear1310.dtsi index 419ea7413d23..7cd25eb4f8e0 100644 --- a/trunk/arch/arm/boot/dts/spear1310.dtsi +++ b/trunk/arch/arm/boot/dts/spear1310.dtsi @@ -70,6 +70,12 @@ status = "disabled"; }; + pinmux: pinmux@e0700000 { + compatible = "st,spear1310-pinmux"; + reg = <0xe0700000 0x1000>; + #gpio-range-cells = <2>; + }; + spi1: spi@5d400000 { compatible = "arm,pl022", "arm,primecell"; reg = <0x5d400000 0x1000>; @@ -179,6 +185,27 @@ thermal@e07008c4 { st,thermal-flags = <0x7000>; }; + + gpiopinctrl: gpio@d8400000 { + compatible = "st,spear-plgpio"; + reg = <0xd8400000 0x1000>; + interrupts = <0 100 0x4>; + #interrupt-cells = <1>; + interrupt-controller; + gpio-controller; + #gpio-cells = <2>; + gpio-ranges = <&pinmux 0 246>; + status = "disabled"; + + st-plgpio,ngpio = <246>; + st-plgpio,enb-reg = <0xd0>; + st-plgpio,wdata-reg = <0x90>; + st-plgpio,dir-reg = <0xb0>; + st-plgpio,ie-reg = <0x30>; + st-plgpio,rdata-reg = <0x70>; + st-plgpio,mis-reg = <0x10>; + st-plgpio,eit-reg = <0x50>; + }; }; }; }; diff --git a/trunk/arch/arm/boot/dts/spear1340-evb.dts b/trunk/arch/arm/boot/dts/spear1340-evb.dts index c9a54e06fb68..045f7123ffac 100644 --- a/trunk/arch/arm/boot/dts/spear1340-evb.dts +++ b/trunk/arch/arm/boot/dts/spear1340-evb.dts @@ -193,6 +193,10 @@ status = "okay"; }; + gpio@e2800000 { + status = "okay"; + }; + i2c0: i2c@e0280000 { status = "okay"; }; diff --git a/trunk/arch/arm/boot/dts/spear1340.dtsi b/trunk/arch/arm/boot/dts/spear1340.dtsi index d71fe2a68f09..6c09eb0a1b2b 100644 --- a/trunk/arch/arm/boot/dts/spear1340.dtsi +++ b/trunk/arch/arm/boot/dts/spear1340.dtsi @@ -24,6 +24,12 @@ status = "disabled"; }; + pinmux: pinmux@e0700000 { + compatible = "st,spear1340-pinmux"; + reg = <0xe0700000 0x1000>; + #gpio-range-cells = <2>; + }; + spi1: spi@5d400000 { compatible = "arm,pl022", "arm,primecell"; reg = <0x5d400000 0x1000>; @@ -51,6 +57,26 @@ thermal@e07008c4 { st,thermal-flags = <0x2a00>; }; + + gpiopinctrl: gpio@e2800000 { + compatible = "st,spear-plgpio"; + reg = <0xe2800000 0x1000>; + interrupts = <0 107 0x4>; + #interrupt-cells = <1>; + interrupt-controller; + gpio-controller; + #gpio-cells = <2>; + gpio-ranges = <&pinmux 0 252>; + status = "disabled"; + + st-plgpio,ngpio = <250>; + st-plgpio,wdata-reg = <0x40>; + st-plgpio,dir-reg = <0x00>; + st-plgpio,ie-reg = <0x80>; + st-plgpio,rdata-reg = <0x20>; + st-plgpio,mis-reg = <0xa0>; + st-plgpio,eit-reg = <0x60>; + }; }; }; }; diff --git a/trunk/arch/arm/boot/dts/spear310.dtsi b/trunk/arch/arm/boot/dts/spear310.dtsi index 62fc4fb3e5f9..930303e48df9 100644 --- a/trunk/arch/arm/boot/dts/spear310.dtsi +++ b/trunk/arch/arm/boot/dts/spear310.dtsi @@ -22,9 +22,10 @@ 0xb0000000 0xb0000000 0x10000000 0xd0000000 0xd0000000 0x30000000>; - pinmux@b4000000 { + pinmux: pinmux@b4000000 { compatible = "st,spear310-pinmux"; reg = <0xb4000000 0x1000>; + #gpio-range-cells = <2>; }; fsmc: flash@44000000 { @@ -75,6 +76,25 @@ reg = <0xb2200000 0x1000>; status = "disabled"; }; + + gpiopinctrl: gpio@b4000000 { + compatible = "st,spear-plgpio"; + reg = <0xb4000000 0x1000>; + #interrupt-cells = <1>; + interrupt-controller; + gpio-controller; + #gpio-cells = <2>; + gpio-ranges = <&pinmux 0 102>; + status = "disabled"; + + st-plgpio,ngpio = <102>; + st-plgpio,enb-reg = <0x10>; + st-plgpio,wdata-reg = <0x20>; + st-plgpio,dir-reg = <0x30>; + st-plgpio,ie-reg = <0x50>; + st-plgpio,rdata-reg = <0x40>; + st-plgpio,mis-reg = <0x60>; + }; }; }; }; diff --git a/trunk/arch/arm/boot/dts/spear320-evb.dts b/trunk/arch/arm/boot/dts/spear320-evb.dts index 082328bd64ab..ad4bfc68ee05 100644 --- a/trunk/arch/arm/boot/dts/spear320-evb.dts +++ b/trunk/arch/arm/boot/dts/spear320-evb.dts @@ -164,6 +164,10 @@ status = "okay"; }; + gpio@b3000000 { + status = "okay"; + }; + i2c0: i2c@d0180000 { status = "okay"; }; diff --git a/trunk/arch/arm/boot/dts/spear320.dtsi b/trunk/arch/arm/boot/dts/spear320.dtsi index 1f49d69595a0..67d7ada71275 100644 --- a/trunk/arch/arm/boot/dts/spear320.dtsi +++ b/trunk/arch/arm/boot/dts/spear320.dtsi @@ -21,9 +21,10 @@ ranges = <0x40000000 0x40000000 0x80000000 0xd0000000 0xd0000000 0x30000000>; - pinmux@b3000000 { + pinmux: pinmux@b3000000 { compatible = "st,spear320-pinmux"; reg = <0xb3000000 0x1000>; + #gpio-range-cells = <2>; }; clcd@90000000 { @@ -90,6 +91,26 @@ reg = <0xa4000000 0x1000>; status = "disabled"; }; + + gpiopinctrl: gpio@b3000000 { + compatible = "st,spear-plgpio"; + reg = <0xb3000000 0x1000>; + #interrupt-cells = <1>; + interrupt-controller; + gpio-controller; + #gpio-cells = <2>; + gpio-ranges = <&pinmux 0 102>; + status = "disabled"; + + st-plgpio,ngpio = <102>; + st-plgpio,enb-reg = <0x24>; + st-plgpio,wdata-reg = <0x34>; + st-plgpio,dir-reg = <0x44>; + st-plgpio,ie-reg = <0x64>; + st-plgpio,rdata-reg = <0x54>; + st-plgpio,mis-reg = <0x84>; + st-plgpio,eit-reg = <0x94>; + }; }; }; }; diff --git a/trunk/arch/arm/boot/dts/tegra20-seaboard.dts b/trunk/arch/arm/boot/dts/tegra20-seaboard.dts index 33ae81358d8e..e58a0e60f711 100644 --- a/trunk/arch/arm/boot/dts/tegra20-seaboard.dts +++ b/trunk/arch/arm/boot/dts/tegra20-seaboard.dts @@ -492,12 +492,12 @@ }; temperature-sensor@4c { - compatible = "nct1008"; + compatible = "onnn,nct1008"; reg = <0x4c>; }; magnetometer@c { - compatible = "ak8975"; + compatible = "ak,ak8975"; reg = <0xc>; interrupt-parent = <&gpio>; interrupts = <109 0x04>; /* gpio PN5 */ diff --git a/trunk/arch/arm/common/gic.c b/trunk/arch/arm/common/gic.c index aa5269984187..36ae03a3f5d1 100644 --- a/trunk/arch/arm/common/gic.c +++ b/trunk/arch/arm/common/gic.c @@ -69,6 +69,14 @@ struct gic_chip_data { static DEFINE_RAW_SPINLOCK(irq_controller_lock); +/* + * The GIC mapping of CPU interfaces does not necessarily match + * the logical CPU numbering. Let's use a mapping as returned + * by the GIC itself. + */ +#define NR_GIC_CPU_IF 8 +static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly; + /* * Supported arch specific GIC irq extension. * Default make them NULL. @@ -238,11 +246,11 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val, unsigned int cpu = cpumask_any_and(mask_val, cpu_online_mask); u32 val, mask, bit; - if (cpu >= 8 || cpu >= nr_cpu_ids) + if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids) return -EINVAL; mask = 0xff << shift; - bit = 1 << (cpu_logical_map(cpu) + shift); + bit = gic_cpu_map[cpu] << shift; raw_spin_lock(&irq_controller_lock); val = readl_relaxed(reg) & ~mask; @@ -349,11 +357,6 @@ static void __init gic_dist_init(struct gic_chip_data *gic) u32 cpumask; unsigned int gic_irqs = gic->gic_irqs; void __iomem *base = gic_data_dist_base(gic); - u32 cpu = cpu_logical_map(smp_processor_id()); - - cpumask = 1 << cpu; - cpumask |= cpumask << 8; - cpumask |= cpumask << 16; writel_relaxed(0, base + GIC_DIST_CTRL); @@ -366,6 +369,7 @@ static void __init gic_dist_init(struct gic_chip_data *gic) /* * Set all global interrupts to this CPU only. */ + cpumask = readl_relaxed(base + GIC_DIST_TARGET + 0); for (i = 32; i < gic_irqs; i += 4) writel_relaxed(cpumask, base + GIC_DIST_TARGET + i * 4 / 4); @@ -389,8 +393,24 @@ static void __cpuinit gic_cpu_init(struct gic_chip_data *gic) { void __iomem *dist_base = gic_data_dist_base(gic); void __iomem *base = gic_data_cpu_base(gic); + unsigned int cpu_mask, cpu = smp_processor_id(); int i; + /* + * Get what the GIC says our CPU mask is. + */ + BUG_ON(cpu >= NR_GIC_CPU_IF); + cpu_mask = readl_relaxed(dist_base + GIC_DIST_TARGET + 0); + gic_cpu_map[cpu] = cpu_mask; + + /* + * Clear our mask from the other map entries in case they're + * still undefined. + */ + for (i = 0; i < NR_GIC_CPU_IF; i++) + if (i != cpu) + gic_cpu_map[i] &= ~cpu_mask; + /* * Deal with the banked PPI and SGI interrupts - disable all * PPI interrupts, ensure all SGI interrupts are enabled. @@ -646,7 +666,7 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start, { irq_hw_number_t hwirq_base; struct gic_chip_data *gic; - int gic_irqs, irq_base; + int gic_irqs, irq_base, i; BUG_ON(gic_nr >= MAX_GIC_NR); @@ -682,6 +702,13 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start, gic_set_base_accessor(gic, gic_get_common_base); } + /* + * Initialize the CPU interface map to all CPUs. + * It will be refined as each CPU probes its ID. + */ + for (i = 0; i < NR_GIC_CPU_IF; i++) + gic_cpu_map[i] = 0xff; + /* * For primary GICs, skip over SGIs. * For secondary GICs, skip over PPIs, too. @@ -737,7 +764,7 @@ void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) /* Convert our logical CPU mask into a physical one. */ for_each_cpu(cpu, mask) - map |= 1 << cpu_logical_map(cpu); + map |= gic_cpu_map[cpu]; /* * Ensure that stores to Normal memory are visible to the diff --git a/trunk/arch/arm/common/timer-sp.c b/trunk/arch/arm/common/timer-sp.c index df13a3ffff35..9d2d3ba339ff 100644 --- a/trunk/arch/arm/common/timer-sp.c +++ b/trunk/arch/arm/common/timer-sp.c @@ -162,7 +162,6 @@ static struct clock_event_device sp804_clockevent = { .set_mode = sp804_set_mode, .set_next_event = sp804_set_next_event, .rating = 300, - .cpumask = cpu_all_mask, }; static struct irqaction sp804_timer_irq = { @@ -185,6 +184,7 @@ void __init sp804_clockevents_init(void __iomem *base, unsigned int irq, clkevt_reload = DIV_ROUND_CLOSEST(rate, HZ); evt->name = name; evt->irq = irq; + evt->cpumask = cpu_possible_mask; setup_irq(irq, &sp804_timer_irq); clockevents_config_and_register(evt, rate, 0xf, 0xffffffff); diff --git a/trunk/arch/arm/common/vic.c b/trunk/arch/arm/common/vic.c index e0d538803cc3..e4df17ca90c7 100644 --- a/trunk/arch/arm/common/vic.c +++ b/trunk/arch/arm/common/vic.c @@ -218,7 +218,7 @@ static void __init vic_register(void __iomem *base, unsigned int irq, v->resume_sources = resume_sources; v->irq = irq; vic_id++; - v->domain = irq_domain_add_legacy(node, fls(valid_sources), irq, 0, + v->domain = irq_domain_add_simple(node, fls(valid_sources), irq, &vic_irqdomain_ops, v); } @@ -350,7 +350,7 @@ static void __init vic_init_st(void __iomem *base, unsigned int irq_start, vic_register(base, irq_start, vic_sources, 0, node); } -void __init __vic_init(void __iomem *base, unsigned int irq_start, +void __init __vic_init(void __iomem *base, int irq_start, u32 vic_sources, u32 resume_sources, struct device_node *node) { @@ -407,7 +407,6 @@ void __init vic_init(void __iomem *base, unsigned int irq_start, int __init vic_of_init(struct device_node *node, struct device_node *parent) { void __iomem *regs; - int irq_base; if (WARN(parent, "non-root VICs are not supported")) return -EINVAL; @@ -416,18 +415,12 @@ int __init vic_of_init(struct device_node *node, struct device_node *parent) if (WARN_ON(!regs)) return -EIO; - irq_base = irq_alloc_descs(-1, 0, 32, numa_node_id()); - if (WARN_ON(irq_base < 0)) - goto out_unmap; - - __vic_init(regs, irq_base, ~0, ~0, node); + /* + * Passing -1 as first IRQ makes the simple domain allocate descriptors + */ + __vic_init(regs, -1, ~0, ~0, node); return 0; - - out_unmap: - iounmap(regs); - - return -EIO; } #endif /* CONFIG OF */ diff --git a/trunk/arch/arm/configs/afeb9260_defconfig b/trunk/arch/arm/configs/afeb9260_defconfig deleted file mode 100644 index c285a9d777d9..000000000000 --- a/trunk/arch/arm/configs/afeb9260_defconfig +++ /dev/null @@ -1,106 +0,0 @@ -CONFIG_EXPERIMENTAL=y -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SYSVIPC=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_SYSFS_DEPRECATED_V2=y -CONFIG_BLK_DEV_INITRD=y -CONFIG_SLAB=y -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_BLK_DEV_BSG is not set -# CONFIG_IOSCHED_DEADLINE is not set -# CONFIG_IOSCHED_CFQ is not set -CONFIG_ARCH_AT91=y -CONFIG_ARCH_AT91SAM9260=y -CONFIG_MACH_AFEB9260=y -CONFIG_AT91_PROGRAMMABLE_CLOCKS=y -CONFIG_PREEMPT=y -CONFIG_AEABI=y -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw" -CONFIG_FPE_NWFPE=y -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_LRO is not set -# CONFIG_IPV6 is not set -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_MTD=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_DATAFLASH=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_ATMEL=y -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_ATMEL_SSC=y -CONFIG_EEPROM_AT24=y -CONFIG_SCSI=y -CONFIG_BLK_DEV_SD=y -CONFIG_SCSI_MULTI_LUN=y -CONFIG_NETDEVICES=y -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_MACB=y -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_SERIO is not set -CONFIG_SERIAL_ATMEL=y -CONFIG_SERIAL_ATMEL_CONSOLE=y -# CONFIG_HW_RANDOM is not set -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_GPIO=y -CONFIG_SPI=y -CONFIG_SPI_DEBUG=y -CONFIG_SPI_ATMEL=y -CONFIG_SPI_SPIDEV=y -# CONFIG_HWMON is not set -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_NOWAYOUT=y -# CONFIG_VGA_CONSOLE is not set -# CONFIG_USB_HID is not set -CONFIG_USB=y -CONFIG_USB_DEVICEFS=y -CONFIG_USB_MON=y -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_STORAGE=y -CONFIG_USB_GADGET=y -CONFIG_USB_ZERO=m -CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m -CONFIG_USB_G_SERIAL=m -CONFIG_RTC_CLASS=y -CONFIG_RTC_DEBUG=y -CONFIG_RTC_DRV_FM3130=y -CONFIG_EXT2_FS=y -CONFIG_EXT3_FS=y -CONFIG_INOTIFY=y -CONFIG_VFAT_FS=y -CONFIG_TMPFS=y -CONFIG_JFFS2_FS=y -CONFIG_CRAMFS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_ROOT_NFS=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_CODEPAGE_850=y -CONFIG_NLS_ISO8859_1=y -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_INFO=y -CONFIG_SYSCTL_SYSCALL_CHECK=y -# CONFIG_FTRACE is not set -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_LL=y -CONFIG_CRC_T10DIF=y diff --git a/trunk/arch/arm/configs/at91_dt_defconfig b/trunk/arch/arm/configs/at91_dt_defconfig index 67bc571ed0c3..b175577d7abb 100644 --- a/trunk/arch/arm/configs/at91_dt_defconfig +++ b/trunk/arch/arm/configs/at91_dt_defconfig @@ -111,6 +111,7 @@ CONFIG_I2C=y CONFIG_I2C_GPIO=y CONFIG_SPI=y CONFIG_SPI_ATMEL=y +CONFIG_PINCTRL_AT91=y # CONFIG_HWMON is not set CONFIG_WATCHDOG=y CONFIG_AT91SAM9X_WATCHDOG=y diff --git a/trunk/arch/arm/configs/at91sam9260_defconfig b/trunk/arch/arm/configs/at91sam9260_defconfig index 505b3765f87e..0ea5d2c97fc4 100644 --- a/trunk/arch/arm/configs/at91sam9260_defconfig +++ b/trunk/arch/arm/configs/at91sam9260_defconfig @@ -75,7 +75,7 @@ CONFIG_USB_STORAGE_DEBUG=y CONFIG_USB_GADGET=y CONFIG_USB_ZERO=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_RTC_CLASS=y CONFIG_RTC_DRV_AT91SAM9=y diff --git a/trunk/arch/arm/configs/at91sam9261_defconfig b/trunk/arch/arm/configs/at91sam9261_defconfig index 1e8712ef062e..c87beb973b37 100644 --- a/trunk/arch/arm/configs/at91sam9261_defconfig +++ b/trunk/arch/arm/configs/at91sam9261_defconfig @@ -125,7 +125,7 @@ CONFIG_USB_GADGET=y CONFIG_USB_ZERO=m CONFIG_USB_ETH=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_MMC=y CONFIG_MMC_ATMELMCI=m diff --git a/trunk/arch/arm/configs/at91sam9263_defconfig b/trunk/arch/arm/configs/at91sam9263_defconfig index d2050cada82d..c5212f43eee6 100644 --- a/trunk/arch/arm/configs/at91sam9263_defconfig +++ b/trunk/arch/arm/configs/at91sam9263_defconfig @@ -133,7 +133,7 @@ CONFIG_USB_GADGET=y CONFIG_USB_ZERO=m CONFIG_USB_ETH=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_MMC=y CONFIG_SDIO_UART=m diff --git a/trunk/arch/arm/configs/at91sam9g20_defconfig b/trunk/arch/arm/configs/at91sam9g20_defconfig index e1b0e80b54a5..3b1881033ad8 100644 --- a/trunk/arch/arm/configs/at91sam9g20_defconfig +++ b/trunk/arch/arm/configs/at91sam9g20_defconfig @@ -96,7 +96,7 @@ CONFIG_USB_STORAGE=y CONFIG_USB_GADGET=y CONFIG_USB_ZERO=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_MMC=y CONFIG_MMC_ATMELMCI=m diff --git a/trunk/arch/arm/configs/cam60_defconfig b/trunk/arch/arm/configs/cam60_defconfig deleted file mode 100644 index 14579711d8fc..000000000000 --- a/trunk/arch/arm/configs/cam60_defconfig +++ /dev/null @@ -1,173 +0,0 @@ -CONFIG_EXPERIMENTAL=y -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SYSVIPC=y -CONFIG_POSIX_MQUEUE=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=y -CONFIG_AUDIT=y -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -CONFIG_BLK_DEV_INITRD=y -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_KALLSYMS_ALL=y -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODVERSIONS=y -# CONFIG_BLK_DEV_BSG is not set -CONFIG_ARCH_AT91=y -CONFIG_ARCH_AT91SAM9260=y -CONFIG_MACH_CAM60=y -CONFIG_ZBOOT_ROM_BSS=0x20004000 -CONFIG_CMDLINE="console=ttyS0,115200 noinitrd root=/dev/mtdblock0 rootfstype=jffs2 mem=64M" -CONFIG_FPE_NWFPE=y -CONFIG_BINFMT_AOUT=y -CONFIG_BINFMT_MISC=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_LRO is not set -# CONFIG_INET_DIAG is not set -# CONFIG_IPV6 is not set -CONFIG_NETWORK_SECMARK=y -CONFIG_CFG80211=m -CONFIG_MAC80211=m -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_MTD=y -CONFIG_MTD_CONCAT=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_CFI=y -CONFIG_MTD_COMPLEX_MAPPINGS=y -CONFIG_MTD_PLATRAM=m -CONFIG_MTD_DATAFLASH=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_ATMEL=y -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_RAM=y -# CONFIG_MISC_DEVICES is not set -CONFIG_SCSI=y -CONFIG_SCSI_TGT=y -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_SG=y -CONFIG_CHR_DEV_SCH=y -CONFIG_SCSI_MULTI_LUN=y -CONFIG_SCSI_LOGGING=y -CONFIG_SCSI_SCAN_ASYNC=y -CONFIG_SCSI_SPI_ATTRS=m -CONFIG_SCSI_FC_ATTRS=m -CONFIG_SCSI_ISCSI_ATTRS=m -CONFIG_SCSI_SAS_LIBSAS=m -# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set -# CONFIG_SCSI_LOWLEVEL is not set -CONFIG_NETDEVICES=y -CONFIG_MARVELL_PHY=m -CONFIG_DAVICOM_PHY=m -CONFIG_QSEMI_PHY=m -CONFIG_LXT_PHY=m -CONFIG_CICADA_PHY=m -CONFIG_VITESSE_PHY=m -CONFIG_SMSC_PHY=m -CONFIG_BROADCOM_PHY=m -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_MACB=y -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set -CONFIG_INPUT_EVDEV=y -CONFIG_KEYBOARD_LKKBD=m -CONFIG_KEYBOARD_NEWTON=m -CONFIG_KEYBOARD_STOWAWAY=m -CONFIG_KEYBOARD_SUNKBD=m -CONFIG_KEYBOARD_XTKBD=m -CONFIG_MOUSE_SERIAL=m -CONFIG_MOUSE_APPLETOUCH=m -CONFIG_MOUSE_VSXXXAA=m -# CONFIG_SERIO_SERPORT is not set -CONFIG_VT_HW_CONSOLE_BINDING=y -CONFIG_SERIAL_NONSTANDARD=y -CONFIG_SERIAL_ATMEL=y -CONFIG_SERIAL_ATMEL_CONSOLE=y -# CONFIG_LEGACY_PTYS is not set -CONFIG_HW_RANDOM=y -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y -CONFIG_SPI=y -CONFIG_SPI_ATMEL=y -# CONFIG_HWMON is not set -# CONFIG_VGA_CONSOLE is not set -# CONFIG_HID_SUPPORT is not set -CONFIG_USB=y -CONFIG_USB_DEVICEFS=y -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_STORAGE=y -CONFIG_USB_LIBUSUAL=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_INTF_DEV_UIE_EMUL=y -CONFIG_RTC_DRV_TEST=m -CONFIG_RTC_DRV_AT91SAM9=y -CONFIG_EXT2_FS=y -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT3_FS=y -CONFIG_INOTIFY=y -CONFIG_QUOTA=y -CONFIG_AUTOFS_FS=y -CONFIG_AUTOFS4_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_TMPFS=y -CONFIG_CONFIGFS_FS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_ROOT_NFS=y -CONFIG_NLS_DEFAULT="cp437" -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_ASCII=y -CONFIG_NLS_ISO8859_1=y -CONFIG_NLS_UTF8=y -CONFIG_PRINTK_TIME=y -# CONFIG_ENABLE_MUST_CHECK is not set -CONFIG_MAGIC_SYSRQ=y -CONFIG_UNUSED_SYMBOLS=y -CONFIG_DEBUG_KERNEL=y -CONFIG_BLK_DEV_IO_TRACE=y -CONFIG_DEBUG_LL=y -CONFIG_CRYPTO=y -CONFIG_CRYPTO_NULL=m -CONFIG_CRYPTO_CRYPTD=m -CONFIG_CRYPTO_TEST=m -CONFIG_CRYPTO_CBC=m -CONFIG_CRYPTO_LRW=m -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_SHA1=y -CONFIG_CRYPTO_SHA256=y -CONFIG_CRYPTO_SHA512=y -CONFIG_CRYPTO_TGR192=m -CONFIG_CRYPTO_WP512=m -CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_CAMELLIA=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_DEFLATE=m -# CONFIG_CRYPTO_HW is not set -CONFIG_CRC32=m -CONFIG_LIBCRC32C=m diff --git a/trunk/arch/arm/configs/corgi_defconfig b/trunk/arch/arm/configs/corgi_defconfig index 4b8a25d9e686..1fd1d1de3220 100644 --- a/trunk/arch/arm/configs/corgi_defconfig +++ b/trunk/arch/arm/configs/corgi_defconfig @@ -218,7 +218,7 @@ CONFIG_USB_GADGET=y CONFIG_USB_ZERO=m CONFIG_USB_ETH=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_MMC=y CONFIG_MMC_PXA=y diff --git a/trunk/arch/arm/configs/cpu9260_defconfig b/trunk/arch/arm/configs/cpu9260_defconfig deleted file mode 100644 index 921480c23b98..000000000000 --- a/trunk/arch/arm/configs/cpu9260_defconfig +++ /dev/null @@ -1,116 +0,0 @@ -CONFIG_EXPERIMENTAL=y -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_SYSFS_DEPRECATED_V2=y -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_BLK_DEV_BSG is not set -# CONFIG_IOSCHED_CFQ is not set -CONFIG_ARCH_AT91=y -CONFIG_ARCH_AT91SAM9260=y -CONFIG_MACH_CPU9260=y -# CONFIG_ARM_THUMB is not set -CONFIG_PREEMPT=y -CONFIG_AEABI=y -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_PNP=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_IPV6 is not set -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_MTD=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_CFI=y -CONFIG_MTD_CFI_INTELEXT=y -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PLATRAM=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_ATMEL=y -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_NBD=y -CONFIG_BLK_DEV_RAM=y -# CONFIG_MISC_DEVICES is not set -CONFIG_SCSI=y -CONFIG_BLK_DEV_SD=y -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_LOWLEVEL is not set -CONFIG_NETDEVICES=y -CONFIG_SMSC_PHY=y -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_MACB=y -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set -CONFIG_PPP=y -CONFIG_PPP_ASYNC=y -CONFIG_PPP_DEFLATE=y -CONFIG_PPP_BSDCOMP=y -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -# CONFIG_KEYBOARD_ATKBD is not set -CONFIG_KEYBOARD_GPIO=y -# CONFIG_INPUT_MOUSE is not set -# CONFIG_SERIO is not set -CONFIG_SERIAL_ATMEL=y -CONFIG_SERIAL_ATMEL_CONSOLE=y -CONFIG_LEGACY_PTY_COUNT=32 -# CONFIG_HW_RANDOM is not set -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_GPIO=y -CONFIG_GPIO_SYSFS=y -# CONFIG_HWMON is not set -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_NOWAYOUT=y -CONFIG_AT91SAM9X_WATCHDOG=y -# CONFIG_VGA_CONSOLE is not set -# CONFIG_HID_SUPPORT is not set -CONFIG_USB=y -# CONFIG_USB_DEVICE_CLASS is not set -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_STORAGE=y -CONFIG_USB_GADGET=y -CONFIG_USB_ETH=m -CONFIG_MMC=y -CONFIG_MMC_ATMELMCI=m -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -CONFIG_LEDS_GPIO=y -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_GPIO=y -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y -CONFIG_RTC_CLASS=y -# CONFIG_RTC_HCTOSYS is not set -CONFIG_RTC_DRV_DS1307=y -CONFIG_EXT2_FS=y -CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_XATTR is not set -CONFIG_INOTIFY=y -CONFIG_AUTOFS4_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_TMPFS=y -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_SUMMARY=y -CONFIG_CRAMFS=y -CONFIG_MINIX_FS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_ROOT_NFS=y -CONFIG_PARTITION_ADVANCED=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_ISO8859_1=y -CONFIG_NLS_UTF8=y -# CONFIG_RCU_CPU_STALL_DETECTOR is not set diff --git a/trunk/arch/arm/configs/cpu9g20_defconfig b/trunk/arch/arm/configs/cpu9g20_defconfig deleted file mode 100644 index ea116cbdffa1..000000000000 --- a/trunk/arch/arm/configs/cpu9g20_defconfig +++ /dev/null @@ -1,116 +0,0 @@ -CONFIG_EXPERIMENTAL=y -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_SYSFS_DEPRECATED_V2=y -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_BLK_DEV_BSG is not set -# CONFIG_IOSCHED_CFQ is not set -CONFIG_ARCH_AT91=y -CONFIG_ARCH_AT91SAM9G20=y -CONFIG_MACH_CPU9G20=y -# CONFIG_ARM_THUMB is not set -CONFIG_PREEMPT=y -CONFIG_AEABI=y -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_PNP=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_IPV6 is not set -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_MTD=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_CFI=y -CONFIG_MTD_CFI_INTELEXT=y -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PLATRAM=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_ATMEL=y -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_NBD=y -CONFIG_BLK_DEV_RAM=y -# CONFIG_MISC_DEVICES is not set -CONFIG_SCSI=y -CONFIG_BLK_DEV_SD=y -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_LOWLEVEL is not set -CONFIG_NETDEVICES=y -CONFIG_SMSC_PHY=y -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_MACB=y -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set -CONFIG_PPP=y -CONFIG_PPP_ASYNC=y -CONFIG_PPP_DEFLATE=y -CONFIG_PPP_BSDCOMP=y -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -# CONFIG_KEYBOARD_ATKBD is not set -CONFIG_KEYBOARD_GPIO=y -# CONFIG_INPUT_MOUSE is not set -# CONFIG_SERIO is not set -CONFIG_SERIAL_ATMEL=y -CONFIG_SERIAL_ATMEL_CONSOLE=y -CONFIG_LEGACY_PTY_COUNT=32 -# CONFIG_HW_RANDOM is not set -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_GPIO=y -CONFIG_GPIO_SYSFS=y -# CONFIG_HWMON is not set -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_NOWAYOUT=y -CONFIG_AT91SAM9X_WATCHDOG=y -# CONFIG_VGA_CONSOLE is not set -# CONFIG_HID_SUPPORT is not set -CONFIG_USB=y -# CONFIG_USB_DEVICE_CLASS is not set -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_STORAGE=y -CONFIG_USB_GADGET=y -CONFIG_USB_ETH=m -CONFIG_MMC=y -CONFIG_MMC_ATMELMCI=m -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -CONFIG_LEDS_GPIO=y -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_GPIO=y -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y -CONFIG_RTC_CLASS=y -# CONFIG_RTC_HCTOSYS is not set -CONFIG_RTC_DRV_DS1307=y -CONFIG_EXT2_FS=y -CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_XATTR is not set -CONFIG_INOTIFY=y -CONFIG_AUTOFS4_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_TMPFS=y -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_SUMMARY=y -CONFIG_CRAMFS=y -CONFIG_MINIX_FS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_ROOT_NFS=y -CONFIG_PARTITION_ADVANCED=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_ISO8859_1=y -CONFIG_NLS_UTF8=y -# CONFIG_RCU_CPU_STALL_DETECTOR is not set diff --git a/trunk/arch/arm/configs/davinci_all_defconfig b/trunk/arch/arm/configs/davinci_all_defconfig index 67b5abb6f857..4ea7c95719d2 100644 --- a/trunk/arch/arm/configs/davinci_all_defconfig +++ b/trunk/arch/arm/configs/davinci_all_defconfig @@ -144,7 +144,7 @@ CONFIG_USB_GADGET_DEBUG_FS=y CONFIG_USB_ZERO=m CONFIG_USB_ETH=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_USB_G_PRINTER=m CONFIG_USB_CDC_COMPOSITE=m diff --git a/trunk/arch/arm/configs/h7202_defconfig b/trunk/arch/arm/configs/h7202_defconfig index 69405a762423..e16d3f372e2a 100644 --- a/trunk/arch/arm/configs/h7202_defconfig +++ b/trunk/arch/arm/configs/h7202_defconfig @@ -34,8 +34,7 @@ CONFIG_FB_MODE_HELPERS=y CONFIG_USB_GADGET=m CONFIG_USB_ZERO=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m -CONFIG_USB_FILE_STORAGE_TEST=y +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_EXT2_FS=y CONFIG_TMPFS=y diff --git a/trunk/arch/arm/configs/magician_defconfig b/trunk/arch/arm/configs/magician_defconfig index a691ef4c6008..557dd291288b 100644 --- a/trunk/arch/arm/configs/magician_defconfig +++ b/trunk/arch/arm/configs/magician_defconfig @@ -136,7 +136,7 @@ CONFIG_USB_PXA27X=y CONFIG_USB_ETH=m # CONFIG_USB_ETH_RNDIS is not set CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_USB_CDC_COMPOSITE=m CONFIG_USB_GPIO_VBUS=y diff --git a/trunk/arch/arm/configs/mini2440_defconfig b/trunk/arch/arm/configs/mini2440_defconfig index 00630e6af45c..a07948a87caa 100644 --- a/trunk/arch/arm/configs/mini2440_defconfig +++ b/trunk/arch/arm/configs/mini2440_defconfig @@ -240,7 +240,7 @@ CONFIG_USB_GADGET_S3C2410=y CONFIG_USB_ZERO=m CONFIG_USB_ETH=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_USB_CDC_COMPOSITE=m CONFIG_MMC=y diff --git a/trunk/arch/arm/configs/omap1_defconfig b/trunk/arch/arm/configs/omap1_defconfig index dde2a1af7b39..42eab9a2a0fd 100644 --- a/trunk/arch/arm/configs/omap1_defconfig +++ b/trunk/arch/arm/configs/omap1_defconfig @@ -214,8 +214,7 @@ CONFIG_USB_TEST=y CONFIG_USB_GADGET=y CONFIG_USB_ETH=m # CONFIG_USB_ETH_RNDIS is not set -CONFIG_USB_FILE_STORAGE=m -CONFIG_USB_FILE_STORAGE_TEST=y +CONFIG_USB_MASS_STORAGE=m CONFIG_MMC=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_PLTFM=y diff --git a/trunk/arch/arm/configs/prima2_defconfig b/trunk/arch/arm/configs/prima2_defconfig index 807d4e2acb17..6a936c7c078a 100644 --- a/trunk/arch/arm/configs/prima2_defconfig +++ b/trunk/arch/arm/configs/prima2_defconfig @@ -37,7 +37,6 @@ CONFIG_SPI_SIRF=y CONFIG_SPI_SPIDEV=y # CONFIG_HWMON is not set CONFIG_USB_GADGET=y -CONFIG_USB_FILE_STORAGE=m CONFIG_USB_MASS_STORAGE=m CONFIG_MMC=y CONFIG_MMC_SDHCI=y diff --git a/trunk/arch/arm/configs/qil-a9260_defconfig b/trunk/arch/arm/configs/qil-a9260_defconfig deleted file mode 100644 index 42d5db1876ab..000000000000 --- a/trunk/arch/arm/configs/qil-a9260_defconfig +++ /dev/null @@ -1,114 +0,0 @@ -CONFIG_EXPERIMENTAL=y -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_SLAB=y -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_BLK_DEV_BSG is not set -# CONFIG_IOSCHED_DEADLINE is not set -# CONFIG_IOSCHED_CFQ is not set -CONFIG_ARCH_AT91=y -CONFIG_ARCH_AT91SAM9260=y -CONFIG_MACH_QIL_A9260=y -CONFIG_AT91_SLOW_CLOCK=y -CONFIG_AT91_EARLY_USART0=y -# CONFIG_ARM_THUMB is not set -CONFIG_AEABI=y -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="mem=64M console=ttyS1,115200" -CONFIG_FPE_NWFPE=y -CONFIG_PM=y -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_IP_ROUTE_VERBOSE=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y -CONFIG_IP_MROUTE=y -CONFIG_IP_PIMSM_V1=y -CONFIG_IP_PIMSM_V2=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_LRO is not set -# CONFIG_INET_DIAG is not set -# CONFIG_IPV6 is not set -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_MTD=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_DATAFLASH=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_ATMEL=y -CONFIG_BLK_DEV_LOOP=y -# CONFIG_MISC_DEVICES is not set -CONFIG_SCSI=y -CONFIG_BLK_DEV_SD=y -CONFIG_SCSI_MULTI_LUN=y -CONFIG_NETDEVICES=y -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_MACB=y -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -CONFIG_INPUT_EVDEV=y -CONFIG_INPUT_EVBUG=y -# CONFIG_KEYBOARD_ATKBD is not set -CONFIG_KEYBOARD_GPIO=y -# CONFIG_INPUT_MOUSE is not set -# CONFIG_SERIO is not set -CONFIG_SERIAL_ATMEL=y -CONFIG_SERIAL_ATMEL_CONSOLE=y -CONFIG_HW_RANDOM=y -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y -CONFIG_SPI=y -CONFIG_SPI_ATMEL=y -# CONFIG_HWMON is not set -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_NOWAYOUT=y -# CONFIG_VGA_CONSOLE is not set -# CONFIG_USB_HID is not set -CONFIG_USB=y -CONFIG_USB_DEVICEFS=y -CONFIG_USB_MON=y -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_STORAGE=y -CONFIG_USB_GADGET=y -CONFIG_USB_ETH=m -CONFIG_MMC=y -CONFIG_MMC_ATMELMCI=m -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -CONFIG_LEDS_GPIO=y -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_DRV_M41T94=y -CONFIG_EXT2_FS=y -CONFIG_INOTIFY=y -CONFIG_FUSE_FS=m -CONFIG_VFAT_FS=y -CONFIG_TMPFS=y -CONFIG_JFFS2_FS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=y -CONFIG_ROOT_NFS=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_CODEPAGE_850=y -CONFIG_NLS_ISO8859_1=y -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_LL=y -# CONFIG_CRYPTO_HW is not set diff --git a/trunk/arch/arm/configs/sam9_l9260_defconfig b/trunk/arch/arm/configs/sam9_l9260_defconfig deleted file mode 100644 index b4384af1bea6..000000000000 --- a/trunk/arch/arm/configs/sam9_l9260_defconfig +++ /dev/null @@ -1,148 +0,0 @@ -CONFIG_EXPERIMENTAL=y -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SYSVIPC=y -CONFIG_POSIX_MQUEUE=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=y -CONFIG_AUDIT=y -CONFIG_LOG_BUF_SHIFT=15 -CONFIG_BLK_DEV_INITRD=y -CONFIG_SLAB=y -# CONFIG_BLK_DEV_BSG is not set -CONFIG_ARCH_AT91=y -CONFIG_ARCH_AT91SAM9260=y -CONFIG_MACH_SAM9_L9260=y -CONFIG_MTD_AT91_DATAFLASH_CARD=y -CONFIG_PREEMPT=y -CONFIG_LEDS=y -CONFIG_LEDS_CPU=y -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=ttyS0,115200 mem=64M initrd=0x21100000,4194304 root=/dev/ram0 rw" -CONFIG_FPE_NWFPE=y -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_XFRM_USER=y -CONFIG_NET_KEY=y -CONFIG_INET=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_IPV6 is not set -CONFIG_MTD=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_BLOCK2MTD=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_ATMEL=y -CONFIG_MTD_NAND_PLATFORM=y -CONFIG_MTD_UBI=y -CONFIG_MTD_UBI_BEB_LIMIT=25 -CONFIG_MTD_UBI_GLUEBI=y -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -# CONFIG_MISC_DEVICES is not set -CONFIG_RAID_ATTRS=y -CONFIG_SCSI=y -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_SG=y -CONFIG_SCSI_MULTI_LUN=y -CONFIG_SCSI_CONSTANTS=y -CONFIG_SCSI_LOGGING=y -# CONFIG_SCSI_LOWLEVEL is not set -CONFIG_NETDEVICES=y -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_MACB=y -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_SERIO is not set -CONFIG_SERIAL_ATMEL=y -CONFIG_SERIAL_ATMEL_CONSOLE=y -CONFIG_LEGACY_PTY_COUNT=16 -# CONFIG_HW_RANDOM is not set -# CONFIG_HWMON is not set -# CONFIG_VGA_CONSOLE is not set -# CONFIG_HID_SUPPORT is not set -CONFIG_USB=y -CONFIG_USB_DEVICEFS=y -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_STORAGE=y -CONFIG_USB_LIBUSUAL=y -CONFIG_USB_GADGET=y -CONFIG_MMC=y -CONFIG_MMC_DEBUG=y -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -CONFIG_LEDS_GPIO=y -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_DRV_DS1553=y -CONFIG_RTC_DRV_DS1742=y -CONFIG_RTC_DRV_M48T86=y -CONFIG_RTC_DRV_V3020=y -CONFIG_EXT2_FS=y -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -CONFIG_EXT3_FS=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -CONFIG_INOTIFY=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_TMPFS=y -CONFIG_JFFS2_FS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_CODEPAGE_737=y -CONFIG_NLS_CODEPAGE_775=y -CONFIG_NLS_CODEPAGE_850=y -CONFIG_NLS_CODEPAGE_852=y -CONFIG_NLS_CODEPAGE_855=y -CONFIG_NLS_CODEPAGE_857=y -CONFIG_NLS_CODEPAGE_860=y -CONFIG_NLS_CODEPAGE_861=y -CONFIG_NLS_CODEPAGE_862=y -CONFIG_NLS_CODEPAGE_863=y -CONFIG_NLS_CODEPAGE_864=y -CONFIG_NLS_CODEPAGE_865=y -CONFIG_NLS_CODEPAGE_866=y -CONFIG_NLS_CODEPAGE_869=y -CONFIG_NLS_CODEPAGE_936=y -CONFIG_NLS_CODEPAGE_950=y -CONFIG_NLS_CODEPAGE_932=y -CONFIG_NLS_CODEPAGE_949=y -CONFIG_NLS_CODEPAGE_874=y -CONFIG_NLS_ISO8859_8=y -CONFIG_NLS_CODEPAGE_1250=y -CONFIG_NLS_CODEPAGE_1251=y -CONFIG_NLS_ASCII=y -CONFIG_NLS_ISO8859_1=y -CONFIG_NLS_ISO8859_2=y -CONFIG_NLS_ISO8859_3=y -CONFIG_NLS_ISO8859_4=y -CONFIG_NLS_ISO8859_5=y -CONFIG_NLS_ISO8859_6=y -CONFIG_NLS_ISO8859_7=y -CONFIG_NLS_ISO8859_9=y -CONFIG_NLS_ISO8859_13=y -CONFIG_NLS_ISO8859_14=y -CONFIG_NLS_ISO8859_15=y -CONFIG_NLS_KOI8_R=y -CONFIG_NLS_KOI8_U=y -CONFIG_NLS_UTF8=y -CONFIG_MAGIC_SYSRQ=y -CONFIG_UNUSED_SYMBOLS=y -CONFIG_DEBUG_FS=y -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_LL=y diff --git a/trunk/arch/arm/configs/spitz_defconfig b/trunk/arch/arm/configs/spitz_defconfig index df77931a4326..2e0419d1b964 100644 --- a/trunk/arch/arm/configs/spitz_defconfig +++ b/trunk/arch/arm/configs/spitz_defconfig @@ -214,7 +214,7 @@ CONFIG_USB_GADGET_DUMMY_HCD=y CONFIG_USB_ZERO=m CONFIG_USB_ETH=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_MMC=y CONFIG_MMC_PXA=y diff --git a/trunk/arch/arm/configs/stamp9g20_defconfig b/trunk/arch/arm/configs/stamp9g20_defconfig deleted file mode 100644 index 52f1488591c7..000000000000 --- a/trunk/arch/arm/configs/stamp9g20_defconfig +++ /dev/null @@ -1,128 +0,0 @@ -CONFIG_EXPERIMENTAL=y -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_TREE_PREEMPT_RCU=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_BLK_DEV_INITRD=y -CONFIG_SLAB=y -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_LBDAF is not set -# CONFIG_BLK_DEV_BSG is not set -# CONFIG_IOSCHED_DEADLINE is not set -CONFIG_ARCH_AT91=y -CONFIG_ARCH_AT91SAM9G20=y -CONFIG_MACH_PORTUXG20=y -CONFIG_MACH_STAMP9G20=y -CONFIG_AT91_PROGRAMMABLE_CLOCKS=y -CONFIG_AT91_SLOW_CLOCK=y -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_PREEMPT=y -CONFIG_AEABI=y -# CONFIG_OABI_COMPAT is not set -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw" -CONFIG_KEXEC=y -CONFIG_CPU_IDLE=y -CONFIG_PM=y -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_LRO is not set -# CONFIG_IPV6 is not set -# CONFIG_WIRELESS is not set -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_MTD=y -CONFIG_MTD_CONCAT=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_DATAFLASH=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_ATMEL=y -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -# CONFIG_MISC_DEVICES is not set -CONFIG_SCSI=y -CONFIG_BLK_DEV_SD=y -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_LOWLEVEL is not set -CONFIG_NETDEVICES=y -CONFIG_NET_ETHERNET=y -CONFIG_MACB=y -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set -# CONFIG_WLAN is not set -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -CONFIG_INPUT_MOUSEDEV_SCREEN_X=320 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240 -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_SERIO is not set -CONFIG_SERIAL_ATMEL=y -CONFIG_SERIAL_ATMEL_CONSOLE=y -# CONFIG_LEGACY_PTYS is not set -# CONFIG_HW_RANDOM is not set -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_GPIO=y -CONFIG_SPI=y -CONFIG_SPI_ATMEL=y -CONFIG_SPI_SPIDEV=y -CONFIG_GPIO_SYSFS=y -CONFIG_W1=y -CONFIG_W1_MASTER_GPIO=y -CONFIG_W1_SLAVE_THERM=y -CONFIG_W1_SLAVE_DS2431=y -# CONFIG_HWMON is not set -CONFIG_WATCHDOG=y -CONFIG_AT91SAM9X_WATCHDOG=y -# CONFIG_VGA_CONSOLE is not set -# CONFIG_HID_SUPPORT is not set -CONFIG_USB=y -CONFIG_USB_DEVICEFS=y -# CONFIG_USB_DEVICE_CLASS is not set -CONFIG_USB_MON=y -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_STORAGE=y -CONFIG_USB_GADGET=m -CONFIG_USB_ZERO=m -CONFIG_USB_ETH=m -CONFIG_USB_FILE_STORAGE=m -CONFIG_USB_G_SERIAL=m -CONFIG_MMC=y -CONFIG_MMC_ATMELMCI=y -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -CONFIG_LEDS_GPIO=y -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_DRV_AT91SAM9=y -CONFIG_EXT2_FS=y -CONFIG_EXT3_FS=y -CONFIG_INOTIFY=y -CONFIG_VFAT_FS=y -CONFIG_TMPFS=y -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_SUMMARY=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_CODEPAGE_850=y -CONFIG_NLS_ISO8859_1=y -CONFIG_NLS_ISO8859_15=y -CONFIG_NLS_UTF8=y -# CONFIG_RCU_CPU_STALL_DETECTOR is not set -# CONFIG_ARM_UNWIND is not set diff --git a/trunk/arch/arm/configs/u8500_defconfig b/trunk/arch/arm/configs/u8500_defconfig index da6845493caa..250625d5223f 100644 --- a/trunk/arch/arm/configs/u8500_defconfig +++ b/trunk/arch/arm/configs/u8500_defconfig @@ -69,6 +69,8 @@ CONFIG_GPIO_TC3589X=y CONFIG_POWER_SUPPLY=y CONFIG_AB8500_BM=y CONFIG_AB8500_BATTERY_THERM_ON_BATCTRL=y +CONFIG_THERMAL=y +CONFIG_CPU_THERMAL=y CONFIG_MFD_STMPE=y CONFIG_MFD_TC3589X=y CONFIG_AB5500_CORE=y diff --git a/trunk/arch/arm/configs/usb-a9260_defconfig b/trunk/arch/arm/configs/usb-a9260_defconfig deleted file mode 100644 index a1501e1e1a90..000000000000 --- a/trunk/arch/arm/configs/usb-a9260_defconfig +++ /dev/null @@ -1,105 +0,0 @@ -CONFIG_EXPERIMENTAL=y -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_SLAB=y -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_BLK_DEV_BSG is not set -# CONFIG_IOSCHED_DEADLINE is not set -# CONFIG_IOSCHED_CFQ is not set -CONFIG_ARCH_AT91=y -CONFIG_ARCH_AT91SAM9260=y -CONFIG_MACH_USB_A9260=y -CONFIG_AT91_SLOW_CLOCK=y -# CONFIG_ARM_THUMB is not set -CONFIG_AEABI=y -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="mem=64M console=ttyS0,115200" -CONFIG_FPE_NWFPE=y -CONFIG_PM=y -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_IP_ROUTE_VERBOSE=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y -CONFIG_IP_MROUTE=y -CONFIG_IP_PIMSM_V1=y -CONFIG_IP_PIMSM_V2=y -# CONFIG_INET_XFRM_MODE_TRANSPORT is not set -# CONFIG_INET_XFRM_MODE_TUNNEL is not set -# CONFIG_INET_XFRM_MODE_BEET is not set -# CONFIG_INET_LRO is not set -# CONFIG_INET_DIAG is not set -# CONFIG_IPV6 is not set -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_MTD=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_DATAFLASH=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_ATMEL=y -CONFIG_BLK_DEV_LOOP=y -# CONFIG_MISC_DEVICES is not set -CONFIG_SCSI=y -CONFIG_BLK_DEV_SD=y -CONFIG_SCSI_MULTI_LUN=y -CONFIG_NETDEVICES=y -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -CONFIG_MACB=y -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -CONFIG_INPUT_EVDEV=y -CONFIG_INPUT_EVBUG=y -# CONFIG_KEYBOARD_ATKBD is not set -CONFIG_KEYBOARD_GPIO=y -# CONFIG_INPUT_MOUSE is not set -# CONFIG_SERIO is not set -CONFIG_SERIAL_ATMEL=y -CONFIG_SERIAL_ATMEL_CONSOLE=y -CONFIG_HW_RANDOM=y -CONFIG_SPI=y -CONFIG_SPI_ATMEL=y -# CONFIG_HWMON is not set -# CONFIG_VGA_CONSOLE is not set -# CONFIG_USB_HID is not set -CONFIG_USB=y -CONFIG_USB_DEVICEFS=y -CONFIG_USB_MON=y -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_STORAGE=y -CONFIG_USB_GADGET=y -CONFIG_USB_ETH=m -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -CONFIG_LEDS_GPIO=y -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_EXT2_FS=y -CONFIG_INOTIFY=y -CONFIG_FUSE_FS=m -CONFIG_VFAT_FS=y -CONFIG_TMPFS=y -CONFIG_JFFS2_FS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=y -CONFIG_ROOT_NFS=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_CODEPAGE_850=y -CONFIG_NLS_ISO8859_1=y -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_USER=y -CONFIG_DEBUG_LL=y -# CONFIG_CRYPTO_HW is not set diff --git a/trunk/arch/arm/configs/viper_defconfig b/trunk/arch/arm/configs/viper_defconfig index 1d01ddd33122..d36e0d3c86ec 100644 --- a/trunk/arch/arm/configs/viper_defconfig +++ b/trunk/arch/arm/configs/viper_defconfig @@ -139,7 +139,7 @@ CONFIG_USB_SERIAL_MCT_U232=m CONFIG_USB_GADGET=m CONFIG_USB_ETH=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_USB_G_PRINTER=m CONFIG_RTC_CLASS=y diff --git a/trunk/arch/arm/configs/zeus_defconfig b/trunk/arch/arm/configs/zeus_defconfig index 547a3c1e59db..731d4f985310 100644 --- a/trunk/arch/arm/configs/zeus_defconfig +++ b/trunk/arch/arm/configs/zeus_defconfig @@ -143,7 +143,7 @@ CONFIG_USB_GADGET=m CONFIG_USB_PXA27X=y CONFIG_USB_ETH=m CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_MASS_STORAGE=m CONFIG_USB_G_SERIAL=m CONFIG_USB_G_PRINTER=m CONFIG_MMC=y diff --git a/trunk/arch/arm/include/asm/Kbuild b/trunk/arch/arm/include/asm/Kbuild index f70ae175a3d6..d3db39860b9c 100644 --- a/trunk/arch/arm/include/asm/Kbuild +++ b/trunk/arch/arm/include/asm/Kbuild @@ -16,7 +16,6 @@ generic-y += local64.h generic-y += msgbuf.h generic-y += param.h generic-y += parport.h -generic-y += percpu.h generic-y += poll.h generic-y += resource.h generic-y += sections.h @@ -31,5 +30,6 @@ generic-y += sockios.h generic-y += termbits.h generic-y += termios.h generic-y += timex.h +generic-y += trace_clock.h generic-y += types.h generic-y += unaligned.h diff --git a/trunk/arch/arm/include/asm/assembler.h b/trunk/arch/arm/include/asm/assembler.h index 2ef95813fce0..eb87200aa4b5 100644 --- a/trunk/arch/arm/include/asm/assembler.h +++ b/trunk/arch/arm/include/asm/assembler.h @@ -250,6 +250,7 @@ * Beware, it also clobers LR. */ .macro safe_svcmode_maskall reg:req +#if __LINUX_ARM_ARCH__ >= 6 mrs \reg , cpsr mov lr , \reg and lr , lr , #MODE_MASK @@ -266,6 +267,13 @@ THUMB( orr \reg , \reg , #PSR_T_BIT ) __ERET 1: msr cpsr_c, \reg 2: +#else +/* + * workaround for possibly broken pre-v6 hardware + * (akita, Sharp Zaurus C-1000, PXA270-based) + */ + setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, \reg +#endif .endm /* diff --git a/trunk/arch/arm/include/asm/cpu.h b/trunk/arch/arm/include/asm/cpu.h index d797223b39d5..2744f0602550 100644 --- a/trunk/arch/arm/include/asm/cpu.h +++ b/trunk/arch/arm/include/asm/cpu.h @@ -15,6 +15,7 @@ struct cpuinfo_arm { struct cpu cpu; + u32 cpuid; #ifdef CONFIG_SMP unsigned int loops_per_jiffy; #endif diff --git a/trunk/arch/arm/include/asm/cputype.h b/trunk/arch/arm/include/asm/cputype.h index cb47d28cbe1f..a59dcb5ab5fc 100644 --- a/trunk/arch/arm/include/asm/cputype.h +++ b/trunk/arch/arm/include/asm/cputype.h @@ -25,6 +25,19 @@ #define CPUID_EXT_ISAR4 "c2, 4" #define CPUID_EXT_ISAR5 "c2, 5" +#define MPIDR_SMP_BITMASK (0x3 << 30) +#define MPIDR_SMP_VALUE (0x2 << 30) + +#define MPIDR_MT_BITMASK (0x1 << 24) + +#define MPIDR_HWID_BITMASK 0xFFFFFF + +#define MPIDR_LEVEL_BITS 8 +#define MPIDR_LEVEL_MASK ((1 << MPIDR_LEVEL_BITS) - 1) + +#define MPIDR_AFFINITY_LEVEL(mpidr, level) \ + ((mpidr >> (MPIDR_LEVEL_BITS * level)) & MPIDR_LEVEL_MASK) + extern unsigned int processor_id; #ifdef CONFIG_CPU_CP15 diff --git a/trunk/arch/arm/include/asm/cti.h b/trunk/arch/arm/include/asm/cti.h index a0ada3ea4358..f2e5cad3f306 100644 --- a/trunk/arch/arm/include/asm/cti.h +++ b/trunk/arch/arm/include/asm/cti.h @@ -146,15 +146,7 @@ static inline void cti_irq_ack(struct cti *cti) */ static inline void cti_unlock(struct cti *cti) { - void __iomem *base = cti->base; - unsigned long val; - - val = __raw_readl(base + LOCKSTATUS); - - if (val & 1) { - val = LOCKCODE; - __raw_writel(val, base + LOCKACCESS); - } + __raw_writel(LOCKCODE, cti->base + LOCKACCESS); } /** @@ -166,14 +158,6 @@ static inline void cti_unlock(struct cti *cti) */ static inline void cti_lock(struct cti *cti) { - void __iomem *base = cti->base; - unsigned long val; - - val = __raw_readl(base + LOCKSTATUS); - - if (!(val & 1)) { - val = ~LOCKCODE; - __raw_writel(val, base + LOCKACCESS); - } + __raw_writel(~LOCKCODE, cti->base + LOCKACCESS); } #endif diff --git a/trunk/arch/arm/include/asm/hardware/cache-l2x0.h b/trunk/arch/arm/include/asm/hardware/cache-l2x0.h index c4c87bc12231..3b2c40b5bfa2 100644 --- a/trunk/arch/arm/include/asm/hardware/cache-l2x0.h +++ b/trunk/arch/arm/include/asm/hardware/cache-l2x0.h @@ -102,6 +102,10 @@ #define L2X0_ADDR_FILTER_EN 1 +#define L2X0_CTRL_EN 1 + +#define L2X0_WAY_SIZE_SHIFT 3 + #ifndef __ASSEMBLY__ extern void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask); #if defined(CONFIG_CACHE_L2X0) && defined(CONFIG_OF) @@ -126,6 +130,7 @@ struct l2x0_regs { unsigned long filter_end; unsigned long prefetch_ctrl; unsigned long pwr_ctrl; + unsigned long ctrl; }; extern struct l2x0_regs l2x0_saved_regs; diff --git a/trunk/arch/arm/include/asm/hardware/sp810.h b/trunk/arch/arm/include/asm/hardware/sp810.h index 6b9b077d86b3..afd7e916472f 100644 --- a/trunk/arch/arm/include/asm/hardware/sp810.h +++ b/trunk/arch/arm/include/asm/hardware/sp810.h @@ -56,6 +56,8 @@ #define SCCTRL_TIMEREN1SEL_REFCLK (0 << 17) #define SCCTRL_TIMEREN1SEL_TIMCLK (1 << 17) +#define SCCTRL_TIMERENnSEL_SHIFT(n) (15 + ((n) * 2)) + static inline void sysctl_soft_reset(void __iomem *base) { /* switch to slow mode */ diff --git a/trunk/arch/arm/include/asm/hardware/vic.h b/trunk/arch/arm/include/asm/hardware/vic.h index e14af1a1a320..2bebad36fc83 100644 --- a/trunk/arch/arm/include/asm/hardware/vic.h +++ b/trunk/arch/arm/include/asm/hardware/vic.h @@ -47,7 +47,7 @@ struct device_node; struct pt_regs; -void __vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, +void __vic_init(void __iomem *base, int irq_start, u32 vic_sources, u32 resume_sources, struct device_node *node); void vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, u32 resume_sources); int vic_of_init(struct device_node *node, struct device_node *parent); diff --git a/trunk/arch/arm/include/asm/hw_breakpoint.h b/trunk/arch/arm/include/asm/hw_breakpoint.h index c190bc992f0e..01169dd723f1 100644 --- a/trunk/arch/arm/include/asm/hw_breakpoint.h +++ b/trunk/arch/arm/include/asm/hw_breakpoint.h @@ -98,12 +98,12 @@ static inline void decode_ctrl_reg(u32 reg, #define ARM_BASE_WCR 112 /* Accessor macros for the debug registers. */ -#define ARM_DBG_READ(M, OP2, VAL) do {\ - asm volatile("mrc p14, 0, %0, c0," #M ", " #OP2 : "=r" (VAL));\ +#define ARM_DBG_READ(N, M, OP2, VAL) do {\ + asm volatile("mrc p14, 0, %0, " #N "," #M ", " #OP2 : "=r" (VAL));\ } while (0) -#define ARM_DBG_WRITE(M, OP2, VAL) do {\ - asm volatile("mcr p14, 0, %0, c0," #M ", " #OP2 : : "r" (VAL));\ +#define ARM_DBG_WRITE(N, M, OP2, VAL) do {\ + asm volatile("mcr p14, 0, %0, " #N "," #M ", " #OP2 : : "r" (VAL));\ } while (0) struct notifier_block; diff --git a/trunk/arch/arm/include/asm/io.h b/trunk/arch/arm/include/asm/io.h index 42f042ee4ada..652b56086de7 100644 --- a/trunk/arch/arm/include/asm/io.h +++ b/trunk/arch/arm/include/asm/io.h @@ -374,7 +374,7 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *addr); #ifdef CONFIG_MMU #define ARCH_HAS_VALID_PHYS_ADDR_RANGE -extern int valid_phys_addr_range(unsigned long addr, size_t size); +extern int valid_phys_addr_range(phys_addr_t addr, size_t size); extern int valid_mmap_phys_addr_range(unsigned long pfn, size_t size); extern int devmem_is_allowed(unsigned long pfn); #endif diff --git a/trunk/arch/arm/include/asm/mach/serial_at91.h b/trunk/arch/arm/include/asm/mach/serial_at91.h deleted file mode 100644 index ea6d063923b8..000000000000 --- a/trunk/arch/arm/include/asm/mach/serial_at91.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * arch/arm/include/asm/mach/serial_at91.h - * - * Based on serial_sa1100.h by Nicolas Pitre - * - * Copyright (C) 2002 ATMEL Rousset - * - * Low level machine dependent UART functions. - */ - -struct uart_port; - -/* - * This is a temporary structure for registering these - * functions; it is intended to be discarded after boot. - */ -struct atmel_port_fns { - void (*set_mctrl)(struct uart_port *, u_int); - u_int (*get_mctrl)(struct uart_port *); - void (*enable_ms)(struct uart_port *); - void (*pm)(struct uart_port *, u_int, u_int); - int (*set_wake)(struct uart_port *, u_int); - int (*open)(struct uart_port *); - void (*close)(struct uart_port *); -}; - -#if defined(CONFIG_SERIAL_ATMEL) -void atmel_register_uart_fns(struct atmel_port_fns *fns); -#else -#define atmel_register_uart_fns(fns) do { } while (0) -#endif - - diff --git a/trunk/arch/arm/include/asm/mmu.h b/trunk/arch/arm/include/asm/mmu.h index 14965658a923..9f77e7804f3b 100644 --- a/trunk/arch/arm/include/asm/mmu.h +++ b/trunk/arch/arm/include/asm/mmu.h @@ -5,18 +5,15 @@ typedef struct { #ifdef CONFIG_CPU_HAS_ASID - unsigned int id; - raw_spinlock_t id_lock; + u64 id; #endif - unsigned int kvm_seq; + unsigned int vmalloc_seq; } mm_context_t; #ifdef CONFIG_CPU_HAS_ASID -#define ASID(mm) ((mm)->context.id & 255) - -/* init_mm.context.id_lock should be initialized. */ -#define INIT_MM_CONTEXT(name) \ - .context.id_lock = __RAW_SPIN_LOCK_UNLOCKED(name.context.id_lock), +#define ASID_BITS 8 +#define ASID_MASK ((~0ULL) << ASID_BITS) +#define ASID(mm) ((mm)->context.id & ~ASID_MASK) #else #define ASID(mm) (0) #endif diff --git a/trunk/arch/arm/include/asm/mmu_context.h b/trunk/arch/arm/include/asm/mmu_context.h index 0306bc642c0d..e1f644bc7cc5 100644 --- a/trunk/arch/arm/include/asm/mmu_context.h +++ b/trunk/arch/arm/include/asm/mmu_context.h @@ -20,88 +20,12 @@ #include #include -void __check_kvm_seq(struct mm_struct *mm); +void __check_vmalloc_seq(struct mm_struct *mm); #ifdef CONFIG_CPU_HAS_ASID -/* - * On ARMv6, we have the following structure in the Context ID: - * - * 31 7 0 - * +-------------------------+-----------+ - * | process ID | ASID | - * +-------------------------+-----------+ - * | context ID | - * +-------------------------------------+ - * - * The ASID is used to tag entries in the CPU caches and TLBs. - * The context ID is used by debuggers and trace logic, and - * should be unique within all running processes. - */ -#define ASID_BITS 8 -#define ASID_MASK ((~0) << ASID_BITS) -#define ASID_FIRST_VERSION (1 << ASID_BITS) - -extern unsigned int cpu_last_asid; - -void __init_new_context(struct task_struct *tsk, struct mm_struct *mm); -void __new_context(struct mm_struct *mm); -void cpu_set_reserved_ttbr0(void); - -static inline void switch_new_context(struct mm_struct *mm) -{ - unsigned long flags; - - __new_context(mm); - - local_irq_save(flags); - cpu_switch_mm(mm->pgd, mm); - local_irq_restore(flags); -} - -static inline void check_and_switch_context(struct mm_struct *mm, - struct task_struct *tsk) -{ - if (unlikely(mm->context.kvm_seq != init_mm.context.kvm_seq)) - __check_kvm_seq(mm); - - /* - * Required during context switch to avoid speculative page table - * walking with the wrong TTBR. - */ - cpu_set_reserved_ttbr0(); - - if (!((mm->context.id ^ cpu_last_asid) >> ASID_BITS)) - /* - * The ASID is from the current generation, just switch to the - * new pgd. This condition is only true for calls from - * context_switch() and interrupts are already disabled. - */ - cpu_switch_mm(mm->pgd, mm); - else if (irqs_disabled()) - /* - * Defer the new ASID allocation until after the context - * switch critical region since __new_context() cannot be - * called with interrupts disabled (it sends IPIs). - */ - set_ti_thread_flag(task_thread_info(tsk), TIF_SWITCH_MM); - else - /* - * That is a direct call to switch_mm() or activate_mm() with - * interrupts enabled and a new context. - */ - switch_new_context(mm); -} - -#define init_new_context(tsk,mm) (__init_new_context(tsk,mm),0) - -#define finish_arch_post_lock_switch \ - finish_arch_post_lock_switch -static inline void finish_arch_post_lock_switch(void) -{ - if (test_and_clear_thread_flag(TIF_SWITCH_MM)) - switch_new_context(current->mm); -} +void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk); +#define init_new_context(tsk,mm) ({ mm->context.id = 0; }) #else /* !CONFIG_CPU_HAS_ASID */ @@ -110,8 +34,8 @@ static inline void finish_arch_post_lock_switch(void) static inline void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk) { - if (unlikely(mm->context.kvm_seq != init_mm.context.kvm_seq)) - __check_kvm_seq(mm); + if (unlikely(mm->context.vmalloc_seq != init_mm.context.vmalloc_seq)) + __check_vmalloc_seq(mm); if (irqs_disabled()) /* @@ -143,6 +67,7 @@ static inline void finish_arch_post_lock_switch(void) #endif /* CONFIG_CPU_HAS_ASID */ #define destroy_context(mm) do { } while(0) +#define activate_mm(prev,next) switch_mm(prev, next, NULL) /* * This is called when "tsk" is about to enter lazy TLB mode. @@ -186,6 +111,5 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next, } #define deactivate_mm(tsk,mm) do { } while (0) -#define activate_mm(prev,next) switch_mm(prev, next, NULL) #endif diff --git a/trunk/arch/arm/include/asm/percpu.h b/trunk/arch/arm/include/asm/percpu.h new file mode 100644 index 000000000000..968c0a14e0a3 --- /dev/null +++ b/trunk/arch/arm/include/asm/percpu.h @@ -0,0 +1,45 @@ +/* + * Copyright 2012 Calxeda, Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope 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, see . + */ +#ifndef _ASM_ARM_PERCPU_H_ +#define _ASM_ARM_PERCPU_H_ + +/* + * Same as asm-generic/percpu.h, except that we store the per cpu offset + * in the TPIDRPRW. TPIDRPRW only exists on V6K and V7 + */ +#if defined(CONFIG_SMP) && !defined(CONFIG_CPU_V6) +static inline void set_my_cpu_offset(unsigned long off) +{ + /* Set TPIDRPRW */ + asm volatile("mcr p15, 0, %0, c13, c0, 4" : : "r" (off) : "memory"); +} + +static inline unsigned long __my_cpu_offset(void) +{ + unsigned long off; + /* Read TPIDRPRW */ + asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off) : : "memory"); + return off; +} +#define __my_cpu_offset __my_cpu_offset() +#else +#define set_my_cpu_offset(x) do {} while(0) + +#endif /* CONFIG_SMP */ + +#include + +#endif /* _ASM_ARM_PERCPU_H_ */ diff --git a/trunk/arch/arm/include/asm/perf_event.h b/trunk/arch/arm/include/asm/perf_event.h index 625cd621a436..755877527cf9 100644 --- a/trunk/arch/arm/include/asm/perf_event.h +++ b/trunk/arch/arm/include/asm/perf_event.h @@ -21,4 +21,11 @@ #define C(_x) PERF_COUNT_HW_CACHE_##_x #define CACHE_OP_UNSUPPORTED 0xFFFF +#ifdef CONFIG_HW_PERF_EVENTS +struct pt_regs; +extern unsigned long perf_instruction_pointer(struct pt_regs *regs); +extern unsigned long perf_misc_flags(struct pt_regs *regs); +#define perf_misc_flags(regs) perf_misc_flags(regs) +#endif + #endif /* __ARM_PERF_EVENT_H__ */ diff --git a/trunk/arch/arm/include/asm/pgtable-2level.h b/trunk/arch/arm/include/asm/pgtable-2level.h index 2317a71c8f8e..f97ee02386ee 100644 --- a/trunk/arch/arm/include/asm/pgtable-2level.h +++ b/trunk/arch/arm/include/asm/pgtable-2level.h @@ -115,6 +115,7 @@ * The PTE table pointer refers to the hardware entries; the "Linux" * entries are stored 1024 bytes below. */ +#define L_PTE_VALID (_AT(pteval_t, 1) << 0) /* Valid */ #define L_PTE_PRESENT (_AT(pteval_t, 1) << 0) #define L_PTE_YOUNG (_AT(pteval_t, 1) << 1) #define L_PTE_FILE (_AT(pteval_t, 1) << 2) /* only when !PRESENT */ @@ -123,6 +124,7 @@ #define L_PTE_USER (_AT(pteval_t, 1) << 8) #define L_PTE_XN (_AT(pteval_t, 1) << 9) #define L_PTE_SHARED (_AT(pteval_t, 1) << 10) /* shared(v6), coherent(xsc3) */ +#define L_PTE_NONE (_AT(pteval_t, 1) << 11) /* * These are the memory types, defined to be compatible with diff --git a/trunk/arch/arm/include/asm/pgtable-3level.h b/trunk/arch/arm/include/asm/pgtable-3level.h index b24903549d1c..a3f37929940a 100644 --- a/trunk/arch/arm/include/asm/pgtable-3level.h +++ b/trunk/arch/arm/include/asm/pgtable-3level.h @@ -67,7 +67,8 @@ * These bits overlap with the hardware bits but the naming is preserved for * consistency with the classic page table format. */ -#define L_PTE_PRESENT (_AT(pteval_t, 3) << 0) /* Valid */ +#define L_PTE_VALID (_AT(pteval_t, 1) << 0) /* Valid */ +#define L_PTE_PRESENT (_AT(pteval_t, 3) << 0) /* Present */ #define L_PTE_FILE (_AT(pteval_t, 1) << 2) /* only when !PRESENT */ #define L_PTE_USER (_AT(pteval_t, 1) << 6) /* AP[1] */ #define L_PTE_RDONLY (_AT(pteval_t, 1) << 7) /* AP[2] */ @@ -76,6 +77,7 @@ #define L_PTE_XN (_AT(pteval_t, 1) << 54) /* XN */ #define L_PTE_DIRTY (_AT(pteval_t, 1) << 55) /* unused */ #define L_PTE_SPECIAL (_AT(pteval_t, 1) << 56) /* unused */ +#define L_PTE_NONE (_AT(pteval_t, 1) << 57) /* PROT_NONE */ /* * To be used in assembly code with the upper page attributes. diff --git a/trunk/arch/arm/include/asm/pgtable.h b/trunk/arch/arm/include/asm/pgtable.h index 08c12312a1f9..9c82f988c0e3 100644 --- a/trunk/arch/arm/include/asm/pgtable.h +++ b/trunk/arch/arm/include/asm/pgtable.h @@ -73,7 +73,7 @@ extern pgprot_t pgprot_kernel; #define _MOD_PROT(p, b) __pgprot(pgprot_val(p) | (b)) -#define PAGE_NONE _MOD_PROT(pgprot_user, L_PTE_XN | L_PTE_RDONLY) +#define PAGE_NONE _MOD_PROT(pgprot_user, L_PTE_XN | L_PTE_RDONLY | L_PTE_NONE) #define PAGE_SHARED _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_XN) #define PAGE_SHARED_EXEC _MOD_PROT(pgprot_user, L_PTE_USER) #define PAGE_COPY _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_RDONLY | L_PTE_XN) @@ -83,7 +83,7 @@ extern pgprot_t pgprot_kernel; #define PAGE_KERNEL _MOD_PROT(pgprot_kernel, L_PTE_XN) #define PAGE_KERNEL_EXEC pgprot_kernel -#define __PAGE_NONE __pgprot(_L_PTE_DEFAULT | L_PTE_RDONLY | L_PTE_XN) +#define __PAGE_NONE __pgprot(_L_PTE_DEFAULT | L_PTE_RDONLY | L_PTE_XN | L_PTE_NONE) #define __PAGE_SHARED __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_XN) #define __PAGE_SHARED_EXEC __pgprot(_L_PTE_DEFAULT | L_PTE_USER) #define __PAGE_COPY __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_RDONLY | L_PTE_XN) @@ -203,9 +203,7 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd) #define pte_exec(pte) (!(pte_val(pte) & L_PTE_XN)) #define pte_special(pte) (0) -#define pte_present_user(pte) \ - ((pte_val(pte) & (L_PTE_PRESENT | L_PTE_USER)) == \ - (L_PTE_PRESENT | L_PTE_USER)) +#define pte_present_user(pte) (pte_present(pte) && (pte_val(pte) & L_PTE_USER)) #if __LINUX_ARM_ARCH__ < 6 static inline void __sync_icache_dcache(pte_t pteval) @@ -242,7 +240,7 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; } static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) { - const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER; + const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER | L_PTE_NONE; pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); return pte; } diff --git a/trunk/arch/arm/include/asm/pmu.h b/trunk/arch/arm/include/asm/pmu.h index a26170dce02e..f24edad26c70 100644 --- a/trunk/arch/arm/include/asm/pmu.h +++ b/trunk/arch/arm/include/asm/pmu.h @@ -67,19 +67,19 @@ struct arm_pmu { cpumask_t active_irqs; char *name; irqreturn_t (*handle_irq)(int irq_num, void *dev); - void (*enable)(struct hw_perf_event *evt, int idx); - void (*disable)(struct hw_perf_event *evt, int idx); + void (*enable)(struct perf_event *event); + void (*disable)(struct perf_event *event); int (*get_event_idx)(struct pmu_hw_events *hw_events, - struct hw_perf_event *hwc); + struct perf_event *event); int (*set_event_filter)(struct hw_perf_event *evt, struct perf_event_attr *attr); - u32 (*read_counter)(int idx); - void (*write_counter)(int idx, u32 val); - void (*start)(void); - void (*stop)(void); + u32 (*read_counter)(struct perf_event *event); + void (*write_counter)(struct perf_event *event, u32 val); + void (*start)(struct arm_pmu *); + void (*stop)(struct arm_pmu *); void (*reset)(void *); - int (*request_irq)(irq_handler_t handler); - void (*free_irq)(void); + int (*request_irq)(struct arm_pmu *, irq_handler_t handler); + void (*free_irq)(struct arm_pmu *); int (*map_event)(struct perf_event *event); int num_events; atomic_t active_events; @@ -93,15 +93,11 @@ struct arm_pmu { extern const struct dev_pm_ops armpmu_dev_pm_ops; -int armpmu_register(struct arm_pmu *armpmu, char *name, int type); +int armpmu_register(struct arm_pmu *armpmu, int type); -u64 armpmu_event_update(struct perf_event *event, - struct hw_perf_event *hwc, - int idx); +u64 armpmu_event_update(struct perf_event *event); -int armpmu_event_set_period(struct perf_event *event, - struct hw_perf_event *hwc, - int idx); +int armpmu_event_set_period(struct perf_event *event); int armpmu_map_event(struct perf_event *event, const unsigned (*event_map)[PERF_COUNT_HW_MAX], diff --git a/trunk/arch/arm/include/asm/prom.h b/trunk/arch/arm/include/asm/prom.h index aeae9c609df4..a219227c3e43 100644 --- a/trunk/arch/arm/include/asm/prom.h +++ b/trunk/arch/arm/include/asm/prom.h @@ -11,10 +11,13 @@ #ifndef __ASMARM_PROM_H #define __ASMARM_PROM_H +#define HAVE_ARCH_DEVTREE_FIXUPS + #ifdef CONFIG_OF extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys); extern void arm_dt_memblock_reserve(void); +extern void __init arm_dt_init_cpu_maps(void); #else /* CONFIG_OF */ @@ -24,6 +27,7 @@ static inline struct machine_desc *setup_machine_fdt(unsigned int dt_phys) } static inline void arm_dt_memblock_reserve(void) { } +static inline void arm_dt_init_cpu_maps(void) { } #endif /* CONFIG_OF */ #endif /* ASMARM_PROM_H */ diff --git a/trunk/arch/arm/include/asm/smp.h b/trunk/arch/arm/include/asm/smp.h index 2e3be16c6766..d3a22bebe6ce 100644 --- a/trunk/arch/arm/include/asm/smp.h +++ b/trunk/arch/arm/include/asm/smp.h @@ -79,6 +79,7 @@ extern void cpu_die(void); 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); struct smp_operations { #ifdef CONFIG_SMP diff --git a/trunk/arch/arm/include/asm/smp_plat.h b/trunk/arch/arm/include/asm/smp_plat.h index 558d6c80aca9..aaa61b6f50ff 100644 --- a/trunk/arch/arm/include/asm/smp_plat.h +++ b/trunk/arch/arm/include/asm/smp_plat.h @@ -5,6 +5,9 @@ #ifndef __ASMARM_SMP_PLAT_H #define __ASMARM_SMP_PLAT_H +#include +#include + #include /* @@ -48,5 +51,19 @@ static inline int cache_ops_need_broadcast(void) */ extern int __cpu_logical_map[]; #define cpu_logical_map(cpu) __cpu_logical_map[cpu] +/* + * Retrieve logical cpu index corresponding to a given MPIDR[23:0] + * - mpidr: MPIDR[23:0] to be used for the look-up + * + * Returns the cpu logical index or -EINVAL on look-up error + */ +static inline int get_logical_index(u32 mpidr) +{ + int cpu; + for (cpu = 0; cpu < nr_cpu_ids; cpu++) + if (cpu_logical_map(cpu) == mpidr) + return cpu; + return -EINVAL; +} #endif diff --git a/trunk/arch/arm/include/asm/syscall.h b/trunk/arch/arm/include/asm/syscall.h index 9fdded6b1089..f1d96d4e8092 100644 --- a/trunk/arch/arm/include/asm/syscall.h +++ b/trunk/arch/arm/include/asm/syscall.h @@ -7,6 +7,8 @@ #ifndef _ASM_ARM_SYSCALL_H #define _ASM_ARM_SYSCALL_H +#include /* for AUDIT_ARCH_* */ +#include /* for ELF_EM */ #include #include @@ -95,4 +97,11 @@ static inline void syscall_set_arguments(struct task_struct *task, memcpy(®s->ARM_r0 + i, args, n * sizeof(args[0])); } +static inline int syscall_get_arch(struct task_struct *task, + struct pt_regs *regs) +{ + /* ARM tasks don't change audit architectures on the fly. */ + return AUDIT_ARCH_ARM; +} + #endif /* _ASM_ARM_SYSCALL_H */ diff --git a/trunk/arch/arm/include/asm/thread_info.h b/trunk/arch/arm/include/asm/thread_info.h index 8477b4c1d39f..cddda1f41f0f 100644 --- a/trunk/arch/arm/include/asm/thread_info.h +++ b/trunk/arch/arm/include/asm/thread_info.h @@ -151,10 +151,10 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, #define TIF_SYSCALL_TRACE 8 #define TIF_SYSCALL_AUDIT 9 #define TIF_SYSCALL_TRACEPOINT 10 +#define TIF_SECCOMP 11 /* seccomp syscall filtering active */ #define TIF_USING_IWMMXT 17 #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ #define TIF_RESTORE_SIGMASK 20 -#define TIF_SECCOMP 21 #define TIF_SWITCH_MM 22 /* deferred switch_mm */ #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) @@ -163,11 +163,12 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) -#define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) +#define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT) /* Checks for any syscall work in entry-common.S */ -#define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | _TIF_SYSCALL_TRACEPOINT) +#define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \ + _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP) /* * Change these and you break ASM code in entry-common.S diff --git a/trunk/arch/arm/include/debug/vexpress.S b/trunk/arch/arm/include/debug/vexpress.S index 9f509f55d078..dc8e882a6257 100644 --- a/trunk/arch/arm/include/debug/vexpress.S +++ b/trunk/arch/arm/include/debug/vexpress.S @@ -21,14 +21,17 @@ #if defined(CONFIG_DEBUG_VEXPRESS_UART0_DETECT) .macro addruart,rp,rv,tmp + .arch armv7-a @ Make an educated guess regarding the memory map: - @ - the original A9 core tile, which has MPCore peripherals - @ located at 0x1e000000, should use UART at 0x10009000 + @ - the original A9 core tile (based on ARM Cortex-A9 r0p1) + @ should use UART at 0x10009000 @ - all other (RS1 complaint) tiles use UART mapped @ at 0x1c090000 - mrc p15, 4, \tmp, c15, c0, 0 - cmp \tmp, #0x1e000000 + mrc p15, 0, \rp, c0, c0, 0 + movw \rv, #0xc091 + movt \rv, #0x410f + cmp \rp, \rv @ Original memory map moveq \rp, #DEBUG_LL_UART_OFFSET diff --git a/trunk/arch/arm/kernel/devtree.c b/trunk/arch/arm/kernel/devtree.c index bee7f9d47f02..70f1bdeb241b 100644 --- a/trunk/arch/arm/kernel/devtree.c +++ b/trunk/arch/arm/kernel/devtree.c @@ -19,8 +19,10 @@ #include #include +#include #include #include +#include #include #include @@ -61,6 +63,108 @@ void __init arm_dt_memblock_reserve(void) } } +/* + * arm_dt_init_cpu_maps - Function retrieves cpu nodes from the device tree + * and builds the cpu logical map array containing MPIDR values related to + * logical cpus + * + * Updates the cpu possible mask with the number of parsed cpu nodes + */ +void __init arm_dt_init_cpu_maps(void) +{ + /* + * Temp logical map is initialized with UINT_MAX values that are + * considered invalid logical map entries since the logical map must + * contain a list of MPIDR[23:0] values where MPIDR[31:24] must + * read as 0. + */ + struct device_node *cpu, *cpus; + u32 i, j, cpuidx = 1; + u32 mpidr = is_smp() ? read_cpuid_mpidr() & MPIDR_HWID_BITMASK : 0; + + u32 tmp_map[NR_CPUS] = { [0 ... NR_CPUS-1] = UINT_MAX }; + bool bootcpu_valid = false; + cpus = of_find_node_by_path("/cpus"); + + if (!cpus) + return; + + for_each_child_of_node(cpus, cpu) { + u32 hwid; + + pr_debug(" * %s...\n", cpu->full_name); + /* + * A device tree containing CPU nodes with missing "reg" + * properties is considered invalid to build the + * cpu_logical_map. + */ + if (of_property_read_u32(cpu, "reg", &hwid)) { + pr_debug(" * %s missing reg property\n", + cpu->full_name); + return; + } + + /* + * 8 MSBs must be set to 0 in the DT since the reg property + * defines the MPIDR[23:0]. + */ + if (hwid & ~MPIDR_HWID_BITMASK) + return; + + /* + * Duplicate MPIDRs are a recipe for disaster. + * Scan all initialized entries and check for + * duplicates. If any is found just bail out. + * temp values were initialized to UINT_MAX + * to avoid matching valid MPIDR[23:0] values. + */ + for (j = 0; j < cpuidx; j++) + if (WARN(tmp_map[j] == hwid, "Duplicate /cpu reg " + "properties in the DT\n")) + return; + + /* + * Build a stashed array of MPIDR values. Numbering scheme + * requires that if detected the boot CPU must be assigned + * logical id 0. Other CPUs get sequential indexes starting + * from 1. If a CPU node with a reg property matching the + * boot CPU MPIDR is detected, this is recorded so that the + * logical map built from DT is validated and can be used + * to override the map created in smp_setup_processor_id(). + */ + if (hwid == mpidr) { + i = 0; + bootcpu_valid = true; + } else { + i = cpuidx++; + } + + if (WARN(cpuidx > nr_cpu_ids, "DT /cpu %u nodes greater than " + "max cores %u, capping them\n", + cpuidx, nr_cpu_ids)) { + cpuidx = nr_cpu_ids; + break; + } + + tmp_map[i] = hwid; + } + + if (WARN(!bootcpu_valid, "DT missing boot CPU MPIDR[23:0], " + "fall back to default cpu_logical_map\n")) + return; + + /* + * Since the boot CPU node contains proper data, and all nodes have + * a reg property, the DT CPU list can be considered valid and the + * logical map created in smp_setup_processor_id() can be overridden + */ + for (i = 0; i < cpuidx; i++) { + set_cpu_possible(i, true); + cpu_logical_map(i) = tmp_map[i]; + pr_debug("cpu logical map 0x%x\n", cpu_logical_map(i)); + } +} + /** * setup_machine_fdt - Machine setup when an dtb was passed to the kernel * @dt_phys: physical address of dt blob diff --git a/trunk/arch/arm/kernel/entry-common.S b/trunk/arch/arm/kernel/entry-common.S index 34711757ba59..804153c0a9cf 100644 --- a/trunk/arch/arm/kernel/entry-common.S +++ b/trunk/arch/arm/kernel/entry-common.S @@ -417,16 +417,6 @@ local_restart: ldr r10, [tsk, #TI_FLAGS] @ check for syscall tracing stmdb sp!, {r4, r5} @ push fifth and sixth args -#ifdef CONFIG_SECCOMP - tst r10, #_TIF_SECCOMP - beq 1f - mov r0, scno - bl __secure_computing - add r0, sp, #S_R0 + S_OFF @ pointer to regs - ldmia r0, {r0 - r3} @ have to reload r0 - r3 -1: -#endif - tst r10, #_TIF_SYSCALL_WORK @ are we tracing syscalls? bne __sys_trace @@ -458,11 +448,13 @@ __sys_trace: ldmccia r1, {r0 - r6} @ have to reload r0 - r6 stmccia sp, {r4, r5} @ and update the stack args ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine - b 2b + cmp scno, #-1 @ skip the syscall? + bne 2b + add sp, sp, #S_OFF @ restore stack + b ret_slow_syscall __sys_trace_return: str r0, [sp, #S_R0 + S_OFF]! @ save returned r0 - mov r1, scno mov r0, sp bl syscall_trace_exit b ret_slow_syscall diff --git a/trunk/arch/arm/kernel/head-nommu.S b/trunk/arch/arm/kernel/head-nommu.S index 278cfc144f44..2c228a07e58c 100644 --- a/trunk/arch/arm/kernel/head-nommu.S +++ b/trunk/arch/arm/kernel/head-nommu.S @@ -68,7 +68,7 @@ __after_proc_init: * CP15 system control register value returned in r0 from * the CPU init function. */ -#ifdef CONFIG_ALIGNMENT_TRAP +#if defined(CONFIG_ALIGNMENT_TRAP) && __LINUX_ARM_ARCH__ < 6 orr r0, r0, #CR_A #else bic r0, r0, #CR_A diff --git a/trunk/arch/arm/kernel/hw_breakpoint.c b/trunk/arch/arm/kernel/hw_breakpoint.c index 281bf3301241..5ff2e77782b1 100644 --- a/trunk/arch/arm/kernel/hw_breakpoint.c +++ b/trunk/arch/arm/kernel/hw_breakpoint.c @@ -52,14 +52,14 @@ static u8 debug_arch; /* Maximum supported watchpoint length. */ static u8 max_watchpoint_len; -#define READ_WB_REG_CASE(OP2, M, VAL) \ - case ((OP2 << 4) + M): \ - ARM_DBG_READ(c ## M, OP2, VAL); \ +#define READ_WB_REG_CASE(OP2, M, VAL) \ + case ((OP2 << 4) + M): \ + ARM_DBG_READ(c0, c ## M, OP2, VAL); \ break -#define WRITE_WB_REG_CASE(OP2, M, VAL) \ - case ((OP2 << 4) + M): \ - ARM_DBG_WRITE(c ## M, OP2, VAL);\ +#define WRITE_WB_REG_CASE(OP2, M, VAL) \ + case ((OP2 << 4) + M): \ + ARM_DBG_WRITE(c0, c ## M, OP2, VAL); \ break #define GEN_READ_WB_REG_CASES(OP2, VAL) \ @@ -136,12 +136,12 @@ static u8 get_debug_arch(void) /* Do we implement the extended CPUID interface? */ if (((read_cpuid_id() >> 16) & 0xf) != 0xf) { - pr_warning("CPUID feature registers not supported. " - "Assuming v6 debug is present.\n"); + pr_warn_once("CPUID feature registers not supported. " + "Assuming v6 debug is present.\n"); return ARM_DEBUG_ARCH_V6; } - ARM_DBG_READ(c0, 0, didr); + ARM_DBG_READ(c0, c0, 0, didr); return (didr >> 16) & 0xf; } @@ -169,7 +169,7 @@ static int debug_exception_updates_fsr(void) static int get_num_wrp_resources(void) { u32 didr; - ARM_DBG_READ(c0, 0, didr); + ARM_DBG_READ(c0, c0, 0, didr); return ((didr >> 28) & 0xf) + 1; } @@ -177,7 +177,7 @@ static int get_num_wrp_resources(void) static int get_num_brp_resources(void) { u32 didr; - ARM_DBG_READ(c0, 0, didr); + ARM_DBG_READ(c0, c0, 0, didr); return ((didr >> 24) & 0xf) + 1; } @@ -228,19 +228,17 @@ static int get_num_brps(void) * be put into halting debug mode at any time by an external debugger * but there is nothing we can do to prevent that. */ -static int enable_monitor_mode(void) +static int monitor_mode_enabled(void) { u32 dscr; - int ret = 0; - - ARM_DBG_READ(c1, 0, dscr); + ARM_DBG_READ(c0, c1, 0, dscr); + return !!(dscr & ARM_DSCR_MDBGEN); +} - /* Ensure that halting mode is disabled. */ - if (WARN_ONCE(dscr & ARM_DSCR_HDBGEN, - "halting debug mode enabled. Unable to access hardware resources.\n")) { - ret = -EPERM; - goto out; - } +static int enable_monitor_mode(void) +{ + u32 dscr; + ARM_DBG_READ(c0, c1, 0, dscr); /* If monitor mode is already enabled, just return. */ if (dscr & ARM_DSCR_MDBGEN) @@ -250,24 +248,27 @@ static int enable_monitor_mode(void) switch (get_debug_arch()) { case ARM_DEBUG_ARCH_V6: case ARM_DEBUG_ARCH_V6_1: - ARM_DBG_WRITE(c1, 0, (dscr | ARM_DSCR_MDBGEN)); + ARM_DBG_WRITE(c0, c1, 0, (dscr | ARM_DSCR_MDBGEN)); break; case ARM_DEBUG_ARCH_V7_ECP14: case ARM_DEBUG_ARCH_V7_1: - ARM_DBG_WRITE(c2, 2, (dscr | ARM_DSCR_MDBGEN)); + ARM_DBG_WRITE(c0, c2, 2, (dscr | ARM_DSCR_MDBGEN)); + isb(); break; default: - ret = -ENODEV; - goto out; + return -ENODEV; } /* Check that the write made it through. */ - ARM_DBG_READ(c1, 0, dscr); - if (!(dscr & ARM_DSCR_MDBGEN)) - ret = -EPERM; + ARM_DBG_READ(c0, c1, 0, dscr); + if (!(dscr & ARM_DSCR_MDBGEN)) { + pr_warn_once("Failed to enable monitor mode on CPU %d.\n", + smp_processor_id()); + return -EPERM; + } out: - return ret; + return 0; } int hw_breakpoint_slots(int type) @@ -328,14 +329,9 @@ int arch_install_hw_breakpoint(struct perf_event *bp) { struct arch_hw_breakpoint *info = counter_arch_bp(bp); struct perf_event **slot, **slots; - int i, max_slots, ctrl_base, val_base, ret = 0; + int i, max_slots, ctrl_base, val_base; u32 addr, ctrl; - /* Ensure that we are in monitor mode and halting mode is disabled. */ - ret = enable_monitor_mode(); - if (ret) - goto out; - addr = info->address; ctrl = encode_ctrl_reg(info->ctrl) | 0x1; @@ -362,9 +358,9 @@ int arch_install_hw_breakpoint(struct perf_event *bp) } } - if (WARN_ONCE(i == max_slots, "Can't find any breakpoint slot\n")) { - ret = -EBUSY; - goto out; + if (i == max_slots) { + pr_warning("Can't find any breakpoint slot\n"); + return -EBUSY; } /* Override the breakpoint data with the step data. */ @@ -383,9 +379,7 @@ int arch_install_hw_breakpoint(struct perf_event *bp) /* Setup the control register. */ write_wb_reg(ctrl_base + i, ctrl); - -out: - return ret; + return 0; } void arch_uninstall_hw_breakpoint(struct perf_event *bp) @@ -416,8 +410,10 @@ void arch_uninstall_hw_breakpoint(struct perf_event *bp) } } - if (WARN_ONCE(i == max_slots, "Can't find any breakpoint slot\n")) + if (i == max_slots) { + pr_warning("Can't find any breakpoint slot\n"); return; + } /* Ensure that we disable the mismatch breakpoint. */ if (info->ctrl.type != ARM_BREAKPOINT_EXECUTE && @@ -596,6 +592,10 @@ int arch_validate_hwbkpt_settings(struct perf_event *bp) int ret = 0; u32 offset, alignment_mask = 0x3; + /* Ensure that we are in monitor debug mode. */ + if (!monitor_mode_enabled()) + return -ENODEV; + /* Build the arch_hw_breakpoint. */ ret = arch_build_bp_info(bp); if (ret) @@ -858,7 +858,7 @@ static int hw_breakpoint_pending(unsigned long addr, unsigned int fsr, local_irq_enable(); /* We only handle watchpoints and hardware breakpoints. */ - ARM_DBG_READ(c1, 0, dscr); + ARM_DBG_READ(c0, c1, 0, dscr); /* Perform perf callbacks. */ switch (ARM_DSCR_MOE(dscr)) { @@ -906,7 +906,7 @@ static struct undef_hook debug_reg_hook = { static void reset_ctrl_regs(void *unused) { int i, raw_num_brps, err = 0, cpu = smp_processor_id(); - u32 dbg_power; + u32 val; /* * v7 debug contains save and restore registers so that debug state @@ -919,23 +919,30 @@ static void reset_ctrl_regs(void *unused) switch (debug_arch) { case ARM_DEBUG_ARCH_V6: case ARM_DEBUG_ARCH_V6_1: - /* ARMv6 cores just need to reset the registers. */ - goto reset_regs; + /* ARMv6 cores clear the registers out of reset. */ + goto out_mdbgen; case ARM_DEBUG_ARCH_V7_ECP14: /* * Ensure sticky power-down is clear (i.e. debug logic is * powered up). */ - asm volatile("mrc p14, 0, %0, c1, c5, 4" : "=r" (dbg_power)); - if ((dbg_power & 0x1) == 0) + ARM_DBG_READ(c1, c5, 4, val); + if ((val & 0x1) == 0) err = -EPERM; + + /* + * Check whether we implement OS save and restore. + */ + ARM_DBG_READ(c1, c1, 4, val); + if ((val & 0x9) == 0) + goto clear_vcr; break; case ARM_DEBUG_ARCH_V7_1: /* * Ensure the OS double lock is clear. */ - asm volatile("mrc p14, 0, %0, c1, c3, 4" : "=r" (dbg_power)); - if ((dbg_power & 0x1) == 1) + ARM_DBG_READ(c1, c3, 4, val); + if ((val & 0x1) == 1) err = -EPERM; break; } @@ -947,24 +954,29 @@ static void reset_ctrl_regs(void *unused) } /* - * Unconditionally clear the lock by writing a value + * Unconditionally clear the OS lock by writing a value * other than 0xC5ACCE55 to the access register. */ - asm volatile("mcr p14, 0, %0, c1, c0, 4" : : "r" (0)); + ARM_DBG_WRITE(c1, c0, 4, 0); isb(); /* * Clear any configured vector-catch events before * enabling monitor mode. */ - asm volatile("mcr p14, 0, %0, c0, c7, 0" : : "r" (0)); +clear_vcr: + ARM_DBG_WRITE(c0, c7, 0, 0); isb(); -reset_regs: - if (enable_monitor_mode()) + if (cpumask_intersects(&debug_err_mask, cpumask_of(cpu))) { + pr_warning("CPU %d failed to disable vector catch\n", cpu); return; + } - /* We must also reset any reserved registers. */ + /* + * The control/value register pairs are UNKNOWN out of reset so + * clear them to avoid spurious debug events. + */ raw_num_brps = get_num_brp_resources(); for (i = 0; i < raw_num_brps; ++i) { write_wb_reg(ARM_BASE_BCR + i, 0UL); @@ -975,6 +987,19 @@ static void reset_ctrl_regs(void *unused) write_wb_reg(ARM_BASE_WCR + i, 0UL); write_wb_reg(ARM_BASE_WVR + i, 0UL); } + + if (cpumask_intersects(&debug_err_mask, cpumask_of(cpu))) { + pr_warning("CPU %d failed to clear debug register pairs\n", cpu); + return; + } + + /* + * Have a crack at enabling monitor mode. We don't actually need + * it yet, but reporting an error early is useful if it fails. + */ +out_mdbgen: + if (enable_monitor_mode()) + cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu)); } static int __cpuinit dbg_reset_notify(struct notifier_block *self, @@ -992,8 +1017,6 @@ static struct notifier_block __cpuinitdata dbg_reset_nb = { static int __init arch_hw_breakpoint_init(void) { - u32 dscr; - debug_arch = get_debug_arch(); if (!debug_arch_supported()) { @@ -1028,17 +1051,10 @@ static int __init arch_hw_breakpoint_init(void) core_num_brps, core_has_mismatch_brps() ? "(+1 reserved) " : "", core_num_wrps); - ARM_DBG_READ(c1, 0, dscr); - if (dscr & ARM_DSCR_HDBGEN) { - max_watchpoint_len = 4; - pr_warning("halting debug mode enabled. Assuming maximum watchpoint size of %u bytes.\n", - max_watchpoint_len); - } else { - /* Work out the maximum supported watchpoint length. */ - max_watchpoint_len = get_max_wp_len(); - pr_info("maximum watchpoint size is %u bytes.\n", - max_watchpoint_len); - } + /* Work out the maximum supported watchpoint length. */ + max_watchpoint_len = get_max_wp_len(); + pr_info("maximum watchpoint size is %u bytes.\n", + max_watchpoint_len); /* Register debug fault handler. */ hook_fault_code(FAULT_CODE_DEBUG, hw_breakpoint_pending, SIGTRAP, diff --git a/trunk/arch/arm/kernel/perf_event.c b/trunk/arch/arm/kernel/perf_event.c index 53c0304b734a..f9e8657dd241 100644 --- a/trunk/arch/arm/kernel/perf_event.c +++ b/trunk/arch/arm/kernel/perf_event.c @@ -86,12 +86,10 @@ armpmu_map_event(struct perf_event *event, return -ENOENT; } -int -armpmu_event_set_period(struct perf_event *event, - struct hw_perf_event *hwc, - int idx) +int armpmu_event_set_period(struct perf_event *event) { struct arm_pmu *armpmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; s64 left = local64_read(&hwc->period_left); s64 period = hwc->sample_period; int ret = 0; @@ -119,24 +117,22 @@ armpmu_event_set_period(struct perf_event *event, local64_set(&hwc->prev_count, (u64)-left); - armpmu->write_counter(idx, (u64)(-left) & 0xffffffff); + armpmu->write_counter(event, (u64)(-left) & 0xffffffff); perf_event_update_userpage(event); return ret; } -u64 -armpmu_event_update(struct perf_event *event, - struct hw_perf_event *hwc, - int idx) +u64 armpmu_event_update(struct perf_event *event) { struct arm_pmu *armpmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; u64 delta, prev_raw_count, new_raw_count; again: prev_raw_count = local64_read(&hwc->prev_count); - new_raw_count = armpmu->read_counter(idx); + new_raw_count = armpmu->read_counter(event); if (local64_cmpxchg(&hwc->prev_count, prev_raw_count, new_raw_count) != prev_raw_count) @@ -159,7 +155,7 @@ armpmu_read(struct perf_event *event) if (hwc->idx < 0) return; - armpmu_event_update(event, hwc, hwc->idx); + armpmu_event_update(event); } static void @@ -173,14 +169,13 @@ armpmu_stop(struct perf_event *event, int flags) * PERF_EF_UPDATE, see comments in armpmu_start(). */ if (!(hwc->state & PERF_HES_STOPPED)) { - armpmu->disable(hwc, hwc->idx); - armpmu_event_update(event, hwc, hwc->idx); + armpmu->disable(event); + armpmu_event_update(event); hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE; } } -static void -armpmu_start(struct perf_event *event, int flags) +static void armpmu_start(struct perf_event *event, int flags) { struct arm_pmu *armpmu = to_arm_pmu(event->pmu); struct hw_perf_event *hwc = &event->hw; @@ -200,8 +195,8 @@ armpmu_start(struct perf_event *event, int flags) * get an interrupt too soon or *way* too late if the overflow has * happened since disabling. */ - armpmu_event_set_period(event, hwc, hwc->idx); - armpmu->enable(hwc, hwc->idx); + armpmu_event_set_period(event); + armpmu->enable(event); } static void @@ -233,7 +228,7 @@ armpmu_add(struct perf_event *event, int flags) perf_pmu_disable(event->pmu); /* If we don't have a space for the counter then finish early. */ - idx = armpmu->get_event_idx(hw_events, hwc); + idx = armpmu->get_event_idx(hw_events, event); if (idx < 0) { err = idx; goto out; @@ -244,7 +239,7 @@ armpmu_add(struct perf_event *event, int flags) * sure it is disabled. */ event->hw.idx = idx; - armpmu->disable(hwc, idx); + armpmu->disable(event); hw_events->events[idx] = event; hwc->state = PERF_HES_STOPPED | PERF_HES_UPTODATE; @@ -264,13 +259,12 @@ validate_event(struct pmu_hw_events *hw_events, struct perf_event *event) { struct arm_pmu *armpmu = to_arm_pmu(event->pmu); - struct hw_perf_event fake_event = event->hw; struct pmu *leader_pmu = event->group_leader->pmu; if (event->pmu != leader_pmu || event->state <= PERF_EVENT_STATE_OFF) return 1; - return armpmu->get_event_idx(hw_events, &fake_event) >= 0; + return armpmu->get_event_idx(hw_events, event) >= 0; } static int @@ -316,7 +310,7 @@ static irqreturn_t armpmu_dispatch_irq(int irq, void *dev) static void armpmu_release_hardware(struct arm_pmu *armpmu) { - armpmu->free_irq(); + armpmu->free_irq(armpmu); pm_runtime_put_sync(&armpmu->plat_device->dev); } @@ -330,7 +324,7 @@ armpmu_reserve_hardware(struct arm_pmu *armpmu) return -ENODEV; pm_runtime_get_sync(&pmu_device->dev); - err = armpmu->request_irq(armpmu_dispatch_irq); + err = armpmu->request_irq(armpmu, armpmu_dispatch_irq); if (err) { armpmu_release_hardware(armpmu); return err; @@ -465,13 +459,13 @@ static void armpmu_enable(struct pmu *pmu) int enabled = bitmap_weight(hw_events->used_mask, armpmu->num_events); if (enabled) - armpmu->start(); + armpmu->start(armpmu); } static void armpmu_disable(struct pmu *pmu) { struct arm_pmu *armpmu = to_arm_pmu(pmu); - armpmu->stop(); + armpmu->stop(armpmu); } #ifdef CONFIG_PM_RUNTIME @@ -517,12 +511,13 @@ static void __init armpmu_init(struct arm_pmu *armpmu) }; } -int armpmu_register(struct arm_pmu *armpmu, char *name, int type) +int armpmu_register(struct arm_pmu *armpmu, int type) { armpmu_init(armpmu); + pm_runtime_enable(&armpmu->plat_device->dev); pr_info("enabled with %s PMU driver, %d counters available\n", armpmu->name, armpmu->num_events); - return perf_pmu_register(&armpmu->pmu, name, type); + return perf_pmu_register(&armpmu->pmu, armpmu->name, type); } /* @@ -576,6 +571,10 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) { struct frame_tail __user *tail; + if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) { + /* We don't support guest os callchain now */ + return; + } tail = (struct frame_tail __user *)regs->ARM_fp - 1; @@ -603,9 +602,41 @@ perf_callchain_kernel(struct perf_callchain_entry *entry, struct pt_regs *regs) { struct stackframe fr; + if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) { + /* We don't support guest os callchain now */ + return; + } + fr.fp = regs->ARM_fp; fr.sp = regs->ARM_sp; fr.lr = regs->ARM_lr; fr.pc = regs->ARM_pc; walk_stackframe(&fr, callchain_trace, entry); } + +unsigned long perf_instruction_pointer(struct pt_regs *regs) +{ + if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) + return perf_guest_cbs->get_guest_ip(); + + return instruction_pointer(regs); +} + +unsigned long perf_misc_flags(struct pt_regs *regs) +{ + int misc = 0; + + if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) { + if (perf_guest_cbs->is_user_mode()) + misc |= PERF_RECORD_MISC_GUEST_USER; + else + misc |= PERF_RECORD_MISC_GUEST_KERNEL; + } else { + if (user_mode(regs)) + misc |= PERF_RECORD_MISC_USER; + else + misc |= PERF_RECORD_MISC_KERNEL; + } + + return misc; +} diff --git a/trunk/arch/arm/kernel/perf_event_cpu.c b/trunk/arch/arm/kernel/perf_event_cpu.c index 8d7d8d4de9d6..9a4f6307a016 100644 --- a/trunk/arch/arm/kernel/perf_event_cpu.c +++ b/trunk/arch/arm/kernel/perf_event_cpu.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -45,7 +46,7 @@ const char *perf_pmu_name(void) if (!cpu_pmu) return NULL; - return cpu_pmu->pmu.name; + return cpu_pmu->name; } EXPORT_SYMBOL_GPL(perf_pmu_name); @@ -70,7 +71,7 @@ static struct pmu_hw_events *cpu_pmu_get_cpu_events(void) return &__get_cpu_var(cpu_hw_events); } -static void cpu_pmu_free_irq(void) +static void cpu_pmu_free_irq(struct arm_pmu *cpu_pmu) { int i, irq, irqs; struct platform_device *pmu_device = cpu_pmu->plat_device; @@ -86,7 +87,7 @@ static void cpu_pmu_free_irq(void) } } -static int cpu_pmu_request_irq(irq_handler_t handler) +static int cpu_pmu_request_irq(struct arm_pmu *cpu_pmu, irq_handler_t handler) { int i, err, irq, irqs; struct platform_device *pmu_device = cpu_pmu->plat_device; @@ -147,7 +148,7 @@ static void __devinit cpu_pmu_init(struct arm_pmu *cpu_pmu) /* Ensure the PMU has sane values out of reset. */ if (cpu_pmu && cpu_pmu->reset) - on_each_cpu(cpu_pmu->reset, NULL, 1); + on_each_cpu(cpu_pmu->reset, cpu_pmu, 1); } /* @@ -163,7 +164,9 @@ static int __cpuinit cpu_pmu_notify(struct notifier_block *b, return NOTIFY_DONE; if (cpu_pmu && cpu_pmu->reset) - cpu_pmu->reset(NULL); + cpu_pmu->reset(cpu_pmu); + else + return NOTIFY_DONE; return NOTIFY_OK; } @@ -195,13 +198,13 @@ static struct platform_device_id __devinitdata cpu_pmu_plat_device_ids[] = { /* * CPU PMU identification and probing. */ -static struct arm_pmu *__devinit probe_current_pmu(void) +static int __devinit probe_current_pmu(struct arm_pmu *pmu) { - struct arm_pmu *pmu = NULL; int cpu = get_cpu(); unsigned long cpuid = read_cpuid_id(); unsigned long implementor = (cpuid & 0xFF000000) >> 24; unsigned long part_number = (cpuid & 0xFFF0); + int ret = -ENODEV; pr_info("probing PMU on CPU %d\n", cpu); @@ -211,25 +214,25 @@ static struct arm_pmu *__devinit probe_current_pmu(void) case 0xB360: /* ARM1136 */ case 0xB560: /* ARM1156 */ case 0xB760: /* ARM1176 */ - pmu = armv6pmu_init(); + ret = armv6pmu_init(pmu); break; case 0xB020: /* ARM11mpcore */ - pmu = armv6mpcore_pmu_init(); + ret = armv6mpcore_pmu_init(pmu); break; case 0xC080: /* Cortex-A8 */ - pmu = armv7_a8_pmu_init(); + ret = armv7_a8_pmu_init(pmu); break; case 0xC090: /* Cortex-A9 */ - pmu = armv7_a9_pmu_init(); + ret = armv7_a9_pmu_init(pmu); break; case 0xC050: /* Cortex-A5 */ - pmu = armv7_a5_pmu_init(); + ret = armv7_a5_pmu_init(pmu); break; case 0xC0F0: /* Cortex-A15 */ - pmu = armv7_a15_pmu_init(); + ret = armv7_a15_pmu_init(pmu); break; case 0xC070: /* Cortex-A7 */ - pmu = armv7_a7_pmu_init(); + ret = armv7_a7_pmu_init(pmu); break; } /* Intel CPUs [xscale]. */ @@ -237,43 +240,54 @@ static struct arm_pmu *__devinit probe_current_pmu(void) part_number = (cpuid >> 13) & 0x7; switch (part_number) { case 1: - pmu = xscale1pmu_init(); + ret = xscale1pmu_init(pmu); break; case 2: - pmu = xscale2pmu_init(); + ret = xscale2pmu_init(pmu); break; } } put_cpu(); - return pmu; + return ret; } static int __devinit cpu_pmu_device_probe(struct platform_device *pdev) { const struct of_device_id *of_id; - struct arm_pmu *(*init_fn)(void); + int (*init_fn)(struct arm_pmu *); struct device_node *node = pdev->dev.of_node; + struct arm_pmu *pmu; + int ret = -ENODEV; if (cpu_pmu) { pr_info("attempt to register multiple PMU devices!"); return -ENOSPC; } + pmu = kzalloc(sizeof(struct arm_pmu), GFP_KERNEL); + if (!pmu) { + pr_info("failed to allocate PMU device!"); + return -ENOMEM; + } + if (node && (of_id = of_match_node(cpu_pmu_of_device_ids, pdev->dev.of_node))) { init_fn = of_id->data; - cpu_pmu = init_fn(); + ret = init_fn(pmu); } else { - cpu_pmu = probe_current_pmu(); + ret = probe_current_pmu(pmu); } - if (!cpu_pmu) - return -ENODEV; + if (ret) { + pr_info("failed to register PMU devices!"); + kfree(pmu); + return ret; + } + cpu_pmu = pmu; cpu_pmu->plat_device = pdev; cpu_pmu_init(cpu_pmu); - register_cpu_notifier(&cpu_pmu_hotplug_notifier); - armpmu_register(cpu_pmu, cpu_pmu->name, PERF_TYPE_RAW); + armpmu_register(cpu_pmu, PERF_TYPE_RAW); return 0; } @@ -290,6 +304,16 @@ static struct platform_driver cpu_pmu_driver = { static int __init register_pmu_driver(void) { - return platform_driver_register(&cpu_pmu_driver); + int err; + + err = register_cpu_notifier(&cpu_pmu_hotplug_notifier); + if (err) + return err; + + err = platform_driver_register(&cpu_pmu_driver); + if (err) + unregister_cpu_notifier(&cpu_pmu_hotplug_notifier); + + return err; } device_initcall(register_pmu_driver); diff --git a/trunk/arch/arm/kernel/perf_event_v6.c b/trunk/arch/arm/kernel/perf_event_v6.c index 6ccc07971745..f3e22ff8b6a2 100644 --- a/trunk/arch/arm/kernel/perf_event_v6.c +++ b/trunk/arch/arm/kernel/perf_event_v6.c @@ -401,9 +401,10 @@ armv6_pmcr_counter_has_overflowed(unsigned long pmcr, return ret; } -static inline u32 -armv6pmu_read_counter(int counter) +static inline u32 armv6pmu_read_counter(struct perf_event *event) { + struct hw_perf_event *hwc = &event->hw; + int counter = hwc->idx; unsigned long value = 0; if (ARMV6_CYCLE_COUNTER == counter) @@ -418,10 +419,11 @@ armv6pmu_read_counter(int counter) return value; } -static inline void -armv6pmu_write_counter(int counter, - u32 value) +static inline void armv6pmu_write_counter(struct perf_event *event, u32 value) { + struct hw_perf_event *hwc = &event->hw; + int counter = hwc->idx; + if (ARMV6_CYCLE_COUNTER == counter) asm volatile("mcr p15, 0, %0, c15, c12, 1" : : "r"(value)); else if (ARMV6_COUNTER0 == counter) @@ -432,12 +434,13 @@ armv6pmu_write_counter(int counter, WARN_ONCE(1, "invalid counter number (%d)\n", counter); } -static void -armv6pmu_enable_event(struct hw_perf_event *hwc, - int idx) +static void armv6pmu_enable_event(struct perf_event *event) { unsigned long val, mask, evt, flags; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); + int idx = hwc->idx; if (ARMV6_CYCLE_COUNTER == idx) { mask = 0; @@ -473,7 +476,8 @@ armv6pmu_handle_irq(int irq_num, { unsigned long pmcr = armv6_pmcr_read(); struct perf_sample_data data; - struct pmu_hw_events *cpuc; + struct arm_pmu *cpu_pmu = (struct arm_pmu *)dev; + struct pmu_hw_events *cpuc = cpu_pmu->get_hw_events(); struct pt_regs *regs; int idx; @@ -489,7 +493,6 @@ armv6pmu_handle_irq(int irq_num, */ armv6_pmcr_write(pmcr); - cpuc = &__get_cpu_var(cpu_hw_events); for (idx = 0; idx < cpu_pmu->num_events; ++idx) { struct perf_event *event = cpuc->events[idx]; struct hw_perf_event *hwc; @@ -506,13 +509,13 @@ armv6pmu_handle_irq(int irq_num, continue; hwc = &event->hw; - armpmu_event_update(event, hwc, idx); + armpmu_event_update(event); perf_sample_data_init(&data, 0, hwc->last_period); - if (!armpmu_event_set_period(event, hwc, idx)) + if (!armpmu_event_set_period(event)) continue; if (perf_event_overflow(event, &data, regs)) - cpu_pmu->disable(hwc, idx); + cpu_pmu->disable(event); } /* @@ -527,8 +530,7 @@ armv6pmu_handle_irq(int irq_num, return IRQ_HANDLED; } -static void -armv6pmu_start(void) +static void armv6pmu_start(struct arm_pmu *cpu_pmu) { unsigned long flags, val; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); @@ -540,8 +542,7 @@ armv6pmu_start(void) raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static void -armv6pmu_stop(void) +static void armv6pmu_stop(struct arm_pmu *cpu_pmu) { unsigned long flags, val; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); @@ -555,10 +556,11 @@ armv6pmu_stop(void) static int armv6pmu_get_event_idx(struct pmu_hw_events *cpuc, - struct hw_perf_event *event) + struct perf_event *event) { + struct hw_perf_event *hwc = &event->hw; /* Always place a cycle counter into the cycle counter. */ - if (ARMV6_PERFCTR_CPU_CYCLES == event->config_base) { + if (ARMV6_PERFCTR_CPU_CYCLES == hwc->config_base) { if (test_and_set_bit(ARMV6_CYCLE_COUNTER, cpuc->used_mask)) return -EAGAIN; @@ -579,12 +581,13 @@ armv6pmu_get_event_idx(struct pmu_hw_events *cpuc, } } -static void -armv6pmu_disable_event(struct hw_perf_event *hwc, - int idx) +static void armv6pmu_disable_event(struct perf_event *event) { unsigned long val, mask, evt, flags; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); + int idx = hwc->idx; if (ARMV6_CYCLE_COUNTER == idx) { mask = ARMV6_PMCR_CCOUNT_IEN; @@ -613,12 +616,13 @@ armv6pmu_disable_event(struct hw_perf_event *hwc, raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static void -armv6mpcore_pmu_disable_event(struct hw_perf_event *hwc, - int idx) +static void armv6mpcore_pmu_disable_event(struct perf_event *event) { unsigned long val, mask, flags, evt = 0; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); + int idx = hwc->idx; if (ARMV6_CYCLE_COUNTER == idx) { mask = ARMV6_PMCR_CCOUNT_IEN; @@ -649,24 +653,22 @@ static int armv6_map_event(struct perf_event *event) &armv6_perf_cache_map, 0xFF); } -static struct arm_pmu armv6pmu = { - .name = "v6", - .handle_irq = armv6pmu_handle_irq, - .enable = armv6pmu_enable_event, - .disable = armv6pmu_disable_event, - .read_counter = armv6pmu_read_counter, - .write_counter = armv6pmu_write_counter, - .get_event_idx = armv6pmu_get_event_idx, - .start = armv6pmu_start, - .stop = armv6pmu_stop, - .map_event = armv6_map_event, - .num_events = 3, - .max_period = (1LLU << 32) - 1, -}; - -static struct arm_pmu *__devinit armv6pmu_init(void) +static int __devinit armv6pmu_init(struct arm_pmu *cpu_pmu) { - return &armv6pmu; + cpu_pmu->name = "v6"; + cpu_pmu->handle_irq = armv6pmu_handle_irq; + cpu_pmu->enable = armv6pmu_enable_event; + cpu_pmu->disable = armv6pmu_disable_event; + cpu_pmu->read_counter = armv6pmu_read_counter; + cpu_pmu->write_counter = armv6pmu_write_counter; + cpu_pmu->get_event_idx = armv6pmu_get_event_idx; + cpu_pmu->start = armv6pmu_start; + cpu_pmu->stop = armv6pmu_stop; + cpu_pmu->map_event = armv6_map_event; + cpu_pmu->num_events = 3; + cpu_pmu->max_period = (1LLU << 32) - 1; + + return 0; } /* @@ -683,33 +685,31 @@ static int armv6mpcore_map_event(struct perf_event *event) &armv6mpcore_perf_cache_map, 0xFF); } -static struct arm_pmu armv6mpcore_pmu = { - .name = "v6mpcore", - .handle_irq = armv6pmu_handle_irq, - .enable = armv6pmu_enable_event, - .disable = armv6mpcore_pmu_disable_event, - .read_counter = armv6pmu_read_counter, - .write_counter = armv6pmu_write_counter, - .get_event_idx = armv6pmu_get_event_idx, - .start = armv6pmu_start, - .stop = armv6pmu_stop, - .map_event = armv6mpcore_map_event, - .num_events = 3, - .max_period = (1LLU << 32) - 1, -}; - -static struct arm_pmu *__devinit armv6mpcore_pmu_init(void) +static int __devinit armv6mpcore_pmu_init(struct arm_pmu *cpu_pmu) { - return &armv6mpcore_pmu; + cpu_pmu->name = "v6mpcore"; + cpu_pmu->handle_irq = armv6pmu_handle_irq; + cpu_pmu->enable = armv6pmu_enable_event; + cpu_pmu->disable = armv6mpcore_pmu_disable_event; + cpu_pmu->read_counter = armv6pmu_read_counter; + cpu_pmu->write_counter = armv6pmu_write_counter; + cpu_pmu->get_event_idx = armv6pmu_get_event_idx; + cpu_pmu->start = armv6pmu_start; + cpu_pmu->stop = armv6pmu_stop; + cpu_pmu->map_event = armv6mpcore_map_event; + cpu_pmu->num_events = 3; + cpu_pmu->max_period = (1LLU << 32) - 1; + + return 0; } #else -static struct arm_pmu *__devinit armv6pmu_init(void) +static int armv6pmu_init(struct arm_pmu *cpu_pmu) { - return NULL; + return -ENODEV; } -static struct arm_pmu *__devinit armv6mpcore_pmu_init(void) +static int armv6mpcore_pmu_init(struct arm_pmu *cpu_pmu) { - return NULL; + return -ENODEV; } #endif /* CONFIG_CPU_V6 || CONFIG_CPU_V6K */ diff --git a/trunk/arch/arm/kernel/perf_event_v7.c b/trunk/arch/arm/kernel/perf_event_v7.c index bd4b090ebcfd..7d0cce85d17e 100644 --- a/trunk/arch/arm/kernel/perf_event_v7.c +++ b/trunk/arch/arm/kernel/perf_event_v7.c @@ -18,8 +18,6 @@ #ifdef CONFIG_CPU_V7 -static struct arm_pmu armv7pmu; - /* * Common ARMv7 event types * @@ -738,7 +736,8 @@ static const unsigned armv7_a7_perf_cache_map[PERF_COUNT_HW_CACHE_MAX] */ #define ARMV7_IDX_CYCLE_COUNTER 0 #define ARMV7_IDX_COUNTER0 1 -#define ARMV7_IDX_COUNTER_LAST (ARMV7_IDX_CYCLE_COUNTER + cpu_pmu->num_events - 1) +#define ARMV7_IDX_COUNTER_LAST(cpu_pmu) \ + (ARMV7_IDX_CYCLE_COUNTER + cpu_pmu->num_events - 1) #define ARMV7_MAX_COUNTERS 32 #define ARMV7_COUNTER_MASK (ARMV7_MAX_COUNTERS - 1) @@ -804,49 +803,34 @@ static inline int armv7_pmnc_has_overflowed(u32 pmnc) return pmnc & ARMV7_OVERFLOWED_MASK; } -static inline int armv7_pmnc_counter_valid(int idx) +static inline int armv7_pmnc_counter_valid(struct arm_pmu *cpu_pmu, int idx) { - return idx >= ARMV7_IDX_CYCLE_COUNTER && idx <= ARMV7_IDX_COUNTER_LAST; + return idx >= ARMV7_IDX_CYCLE_COUNTER && + idx <= ARMV7_IDX_COUNTER_LAST(cpu_pmu); } static inline int armv7_pmnc_counter_has_overflowed(u32 pmnc, int idx) { - int ret = 0; - u32 counter; - - if (!armv7_pmnc_counter_valid(idx)) { - pr_err("CPU%u checking wrong counter %d overflow status\n", - smp_processor_id(), idx); - } else { - counter = ARMV7_IDX_TO_COUNTER(idx); - ret = pmnc & BIT(counter); - } - - return ret; + return pmnc & BIT(ARMV7_IDX_TO_COUNTER(idx)); } static inline int armv7_pmnc_select_counter(int idx) { - u32 counter; - - if (!armv7_pmnc_counter_valid(idx)) { - pr_err("CPU%u selecting wrong PMNC counter %d\n", - smp_processor_id(), idx); - return -EINVAL; - } - - counter = ARMV7_IDX_TO_COUNTER(idx); + u32 counter = ARMV7_IDX_TO_COUNTER(idx); asm volatile("mcr p15, 0, %0, c9, c12, 5" : : "r" (counter)); isb(); return idx; } -static inline u32 armv7pmu_read_counter(int idx) +static inline u32 armv7pmu_read_counter(struct perf_event *event) { + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; + int idx = hwc->idx; u32 value = 0; - if (!armv7_pmnc_counter_valid(idx)) + if (!armv7_pmnc_counter_valid(cpu_pmu, idx)) pr_err("CPU%u reading wrong counter %d\n", smp_processor_id(), idx); else if (idx == ARMV7_IDX_CYCLE_COUNTER) @@ -857,9 +841,13 @@ static inline u32 armv7pmu_read_counter(int idx) return value; } -static inline void armv7pmu_write_counter(int idx, u32 value) +static inline void armv7pmu_write_counter(struct perf_event *event, u32 value) { - if (!armv7_pmnc_counter_valid(idx)) + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; + int idx = hwc->idx; + + if (!armv7_pmnc_counter_valid(cpu_pmu, idx)) pr_err("CPU%u writing wrong counter %d\n", smp_processor_id(), idx); else if (idx == ARMV7_IDX_CYCLE_COUNTER) @@ -878,60 +866,28 @@ static inline void armv7_pmnc_write_evtsel(int idx, u32 val) static inline int armv7_pmnc_enable_counter(int idx) { - u32 counter; - - if (!armv7_pmnc_counter_valid(idx)) { - pr_err("CPU%u enabling wrong PMNC counter %d\n", - smp_processor_id(), idx); - return -EINVAL; - } - - counter = ARMV7_IDX_TO_COUNTER(idx); + u32 counter = ARMV7_IDX_TO_COUNTER(idx); asm volatile("mcr p15, 0, %0, c9, c12, 1" : : "r" (BIT(counter))); return idx; } static inline int armv7_pmnc_disable_counter(int idx) { - u32 counter; - - if (!armv7_pmnc_counter_valid(idx)) { - pr_err("CPU%u disabling wrong PMNC counter %d\n", - smp_processor_id(), idx); - return -EINVAL; - } - - counter = ARMV7_IDX_TO_COUNTER(idx); + u32 counter = ARMV7_IDX_TO_COUNTER(idx); asm volatile("mcr p15, 0, %0, c9, c12, 2" : : "r" (BIT(counter))); return idx; } static inline int armv7_pmnc_enable_intens(int idx) { - u32 counter; - - if (!armv7_pmnc_counter_valid(idx)) { - pr_err("CPU%u enabling wrong PMNC counter IRQ enable %d\n", - smp_processor_id(), idx); - return -EINVAL; - } - - counter = ARMV7_IDX_TO_COUNTER(idx); + u32 counter = ARMV7_IDX_TO_COUNTER(idx); asm volatile("mcr p15, 0, %0, c9, c14, 1" : : "r" (BIT(counter))); return idx; } static inline int armv7_pmnc_disable_intens(int idx) { - u32 counter; - - if (!armv7_pmnc_counter_valid(idx)) { - pr_err("CPU%u disabling wrong PMNC counter IRQ enable %d\n", - smp_processor_id(), idx); - return -EINVAL; - } - - counter = ARMV7_IDX_TO_COUNTER(idx); + u32 counter = ARMV7_IDX_TO_COUNTER(idx); asm volatile("mcr p15, 0, %0, c9, c14, 2" : : "r" (BIT(counter))); isb(); /* Clear the overflow flag in case an interrupt is pending. */ @@ -956,7 +912,7 @@ static inline u32 armv7_pmnc_getreset_flags(void) } #ifdef DEBUG -static void armv7_pmnc_dump_regs(void) +static void armv7_pmnc_dump_regs(struct arm_pmu *cpu_pmu) { u32 val; unsigned int cnt; @@ -981,7 +937,8 @@ static void armv7_pmnc_dump_regs(void) asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r" (val)); printk(KERN_INFO "CCNT =0x%08x\n", val); - for (cnt = ARMV7_IDX_COUNTER0; cnt <= ARMV7_IDX_COUNTER_LAST; cnt++) { + for (cnt = ARMV7_IDX_COUNTER0; + cnt <= ARMV7_IDX_COUNTER_LAST(cpu_pmu); cnt++) { armv7_pmnc_select_counter(cnt); asm volatile("mrc p15, 0, %0, c9, c13, 2" : "=r" (val)); printk(KERN_INFO "CNT[%d] count =0x%08x\n", @@ -993,10 +950,19 @@ static void armv7_pmnc_dump_regs(void) } #endif -static void armv7pmu_enable_event(struct hw_perf_event *hwc, int idx) +static void armv7pmu_enable_event(struct perf_event *event) { unsigned long flags; + struct hw_perf_event *hwc = &event->hw; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); struct pmu_hw_events *events = cpu_pmu->get_hw_events(); + int idx = hwc->idx; + + if (!armv7_pmnc_counter_valid(cpu_pmu, idx)) { + pr_err("CPU%u enabling wrong PMNC counter IRQ enable %d\n", + smp_processor_id(), idx); + return; + } /* * Enable counter and interrupt, and set the counter to count @@ -1014,7 +980,7 @@ static void armv7pmu_enable_event(struct hw_perf_event *hwc, int idx) * We only need to set the event for the cycle counter if we * have the ability to perform event filtering. */ - if (armv7pmu.set_event_filter || idx != ARMV7_IDX_CYCLE_COUNTER) + if (cpu_pmu->set_event_filter || idx != ARMV7_IDX_CYCLE_COUNTER) armv7_pmnc_write_evtsel(idx, hwc->config_base); /* @@ -1030,10 +996,19 @@ static void armv7pmu_enable_event(struct hw_perf_event *hwc, int idx) raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static void armv7pmu_disable_event(struct hw_perf_event *hwc, int idx) +static void armv7pmu_disable_event(struct perf_event *event) { unsigned long flags; + struct hw_perf_event *hwc = &event->hw; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); struct pmu_hw_events *events = cpu_pmu->get_hw_events(); + int idx = hwc->idx; + + if (!armv7_pmnc_counter_valid(cpu_pmu, idx)) { + pr_err("CPU%u disabling wrong PMNC counter IRQ enable %d\n", + smp_processor_id(), idx); + return; + } /* * Disable counter and interrupt @@ -1057,7 +1032,8 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) { u32 pmnc; struct perf_sample_data data; - struct pmu_hw_events *cpuc; + struct arm_pmu *cpu_pmu = (struct arm_pmu *)dev; + struct pmu_hw_events *cpuc = cpu_pmu->get_hw_events(); struct pt_regs *regs; int idx; @@ -1077,7 +1053,6 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) */ regs = get_irq_regs(); - cpuc = &__get_cpu_var(cpu_hw_events); for (idx = 0; idx < cpu_pmu->num_events; ++idx) { struct perf_event *event = cpuc->events[idx]; struct hw_perf_event *hwc; @@ -1094,13 +1069,13 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) continue; hwc = &event->hw; - armpmu_event_update(event, hwc, idx); + armpmu_event_update(event); perf_sample_data_init(&data, 0, hwc->last_period); - if (!armpmu_event_set_period(event, hwc, idx)) + if (!armpmu_event_set_period(event)) continue; if (perf_event_overflow(event, &data, regs)) - cpu_pmu->disable(hwc, idx); + cpu_pmu->disable(event); } /* @@ -1115,7 +1090,7 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) return IRQ_HANDLED; } -static void armv7pmu_start(void) +static void armv7pmu_start(struct arm_pmu *cpu_pmu) { unsigned long flags; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); @@ -1126,7 +1101,7 @@ static void armv7pmu_start(void) raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static void armv7pmu_stop(void) +static void armv7pmu_stop(struct arm_pmu *cpu_pmu) { unsigned long flags; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); @@ -1138,10 +1113,12 @@ static void armv7pmu_stop(void) } static int armv7pmu_get_event_idx(struct pmu_hw_events *cpuc, - struct hw_perf_event *event) + struct perf_event *event) { int idx; - unsigned long evtype = event->config_base & ARMV7_EVTYPE_EVENT; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; + unsigned long evtype = hwc->config_base & ARMV7_EVTYPE_EVENT; /* Always place a cycle counter into the cycle counter. */ if (evtype == ARMV7_PERFCTR_CPU_CYCLES) { @@ -1192,11 +1169,14 @@ static int armv7pmu_set_event_filter(struct hw_perf_event *event, static void armv7pmu_reset(void *info) { + struct arm_pmu *cpu_pmu = (struct arm_pmu *)info; u32 idx, nb_cnt = cpu_pmu->num_events; /* The counter and interrupt enable registers are unknown at reset. */ - for (idx = ARMV7_IDX_CYCLE_COUNTER; idx < nb_cnt; ++idx) - armv7pmu_disable_event(NULL, idx); + for (idx = ARMV7_IDX_CYCLE_COUNTER; idx < nb_cnt; ++idx) { + armv7_pmnc_disable_counter(idx); + armv7_pmnc_disable_intens(idx); + } /* Initialize & Reset PMNC: C and P bits */ armv7_pmnc_write(ARMV7_PMNC_P | ARMV7_PMNC_C); @@ -1232,17 +1212,18 @@ static int armv7_a7_map_event(struct perf_event *event) &armv7_a7_perf_cache_map, 0xFF); } -static struct arm_pmu armv7pmu = { - .handle_irq = armv7pmu_handle_irq, - .enable = armv7pmu_enable_event, - .disable = armv7pmu_disable_event, - .read_counter = armv7pmu_read_counter, - .write_counter = armv7pmu_write_counter, - .get_event_idx = armv7pmu_get_event_idx, - .start = armv7pmu_start, - .stop = armv7pmu_stop, - .reset = armv7pmu_reset, - .max_period = (1LLU << 32) - 1, +static void armv7pmu_init(struct arm_pmu *cpu_pmu) +{ + cpu_pmu->handle_irq = armv7pmu_handle_irq; + cpu_pmu->enable = armv7pmu_enable_event; + cpu_pmu->disable = armv7pmu_disable_event; + cpu_pmu->read_counter = armv7pmu_read_counter; + cpu_pmu->write_counter = armv7pmu_write_counter; + cpu_pmu->get_event_idx = armv7pmu_get_event_idx; + cpu_pmu->start = armv7pmu_start; + cpu_pmu->stop = armv7pmu_stop; + cpu_pmu->reset = armv7pmu_reset; + cpu_pmu->max_period = (1LLU << 32) - 1; }; static u32 __devinit armv7_read_num_pmnc_events(void) @@ -1256,70 +1237,75 @@ static u32 __devinit armv7_read_num_pmnc_events(void) return nb_cnt + 1; } -static struct arm_pmu *__devinit armv7_a8_pmu_init(void) +static int __devinit armv7_a8_pmu_init(struct arm_pmu *cpu_pmu) { - armv7pmu.name = "ARMv7 Cortex-A8"; - armv7pmu.map_event = armv7_a8_map_event; - armv7pmu.num_events = armv7_read_num_pmnc_events(); - return &armv7pmu; + armv7pmu_init(cpu_pmu); + cpu_pmu->name = "ARMv7 Cortex-A8"; + cpu_pmu->map_event = armv7_a8_map_event; + cpu_pmu->num_events = armv7_read_num_pmnc_events(); + return 0; } -static struct arm_pmu *__devinit armv7_a9_pmu_init(void) +static int __devinit armv7_a9_pmu_init(struct arm_pmu *cpu_pmu) { - armv7pmu.name = "ARMv7 Cortex-A9"; - armv7pmu.map_event = armv7_a9_map_event; - armv7pmu.num_events = armv7_read_num_pmnc_events(); - return &armv7pmu; + armv7pmu_init(cpu_pmu); + cpu_pmu->name = "ARMv7 Cortex-A9"; + cpu_pmu->map_event = armv7_a9_map_event; + cpu_pmu->num_events = armv7_read_num_pmnc_events(); + return 0; } -static struct arm_pmu *__devinit armv7_a5_pmu_init(void) +static int __devinit armv7_a5_pmu_init(struct arm_pmu *cpu_pmu) { - armv7pmu.name = "ARMv7 Cortex-A5"; - armv7pmu.map_event = armv7_a5_map_event; - armv7pmu.num_events = armv7_read_num_pmnc_events(); - return &armv7pmu; + armv7pmu_init(cpu_pmu); + cpu_pmu->name = "ARMv7 Cortex-A5"; + cpu_pmu->map_event = armv7_a5_map_event; + cpu_pmu->num_events = armv7_read_num_pmnc_events(); + return 0; } -static struct arm_pmu *__devinit armv7_a15_pmu_init(void) +static int __devinit armv7_a15_pmu_init(struct arm_pmu *cpu_pmu) { - armv7pmu.name = "ARMv7 Cortex-A15"; - armv7pmu.map_event = armv7_a15_map_event; - armv7pmu.num_events = armv7_read_num_pmnc_events(); - armv7pmu.set_event_filter = armv7pmu_set_event_filter; - return &armv7pmu; + armv7pmu_init(cpu_pmu); + cpu_pmu->name = "ARMv7 Cortex-A15"; + cpu_pmu->map_event = armv7_a15_map_event; + cpu_pmu->num_events = armv7_read_num_pmnc_events(); + cpu_pmu->set_event_filter = armv7pmu_set_event_filter; + return 0; } -static struct arm_pmu *__devinit armv7_a7_pmu_init(void) +static int __devinit armv7_a7_pmu_init(struct arm_pmu *cpu_pmu) { - armv7pmu.name = "ARMv7 Cortex-A7"; - armv7pmu.map_event = armv7_a7_map_event; - armv7pmu.num_events = armv7_read_num_pmnc_events(); - armv7pmu.set_event_filter = armv7pmu_set_event_filter; - return &armv7pmu; + armv7pmu_init(cpu_pmu); + cpu_pmu->name = "ARMv7 Cortex-A7"; + cpu_pmu->map_event = armv7_a7_map_event; + cpu_pmu->num_events = armv7_read_num_pmnc_events(); + cpu_pmu->set_event_filter = armv7pmu_set_event_filter; + return 0; } #else -static struct arm_pmu *__devinit armv7_a8_pmu_init(void) +static inline int armv7_a8_pmu_init(struct arm_pmu *cpu_pmu) { - return NULL; + return -ENODEV; } -static struct arm_pmu *__devinit armv7_a9_pmu_init(void) +static inline int armv7_a9_pmu_init(struct arm_pmu *cpu_pmu) { - return NULL; + return -ENODEV; } -static struct arm_pmu *__devinit armv7_a5_pmu_init(void) +static inline int armv7_a5_pmu_init(struct arm_pmu *cpu_pmu) { - return NULL; + return -ENODEV; } -static struct arm_pmu *__devinit armv7_a15_pmu_init(void) +static inline int armv7_a15_pmu_init(struct arm_pmu *cpu_pmu) { - return NULL; + return -ENODEV; } -static struct arm_pmu *__devinit armv7_a7_pmu_init(void) +static inline int armv7_a7_pmu_init(struct arm_pmu *cpu_pmu) { - return NULL; + return -ENODEV; } #endif /* CONFIG_CPU_V7 */ diff --git a/trunk/arch/arm/kernel/perf_event_xscale.c b/trunk/arch/arm/kernel/perf_event_xscale.c index 426e19f380a2..0c8265e53d5f 100644 --- a/trunk/arch/arm/kernel/perf_event_xscale.c +++ b/trunk/arch/arm/kernel/perf_event_xscale.c @@ -224,7 +224,8 @@ xscale1pmu_handle_irq(int irq_num, void *dev) { unsigned long pmnc; struct perf_sample_data data; - struct pmu_hw_events *cpuc; + struct arm_pmu *cpu_pmu = (struct arm_pmu *)dev; + struct pmu_hw_events *cpuc = cpu_pmu->get_hw_events(); struct pt_regs *regs; int idx; @@ -248,7 +249,6 @@ xscale1pmu_handle_irq(int irq_num, void *dev) regs = get_irq_regs(); - cpuc = &__get_cpu_var(cpu_hw_events); for (idx = 0; idx < cpu_pmu->num_events; ++idx) { struct perf_event *event = cpuc->events[idx]; struct hw_perf_event *hwc; @@ -260,13 +260,13 @@ xscale1pmu_handle_irq(int irq_num, void *dev) continue; hwc = &event->hw; - armpmu_event_update(event, hwc, idx); + armpmu_event_update(event); perf_sample_data_init(&data, 0, hwc->last_period); - if (!armpmu_event_set_period(event, hwc, idx)) + if (!armpmu_event_set_period(event)) continue; if (perf_event_overflow(event, &data, regs)) - cpu_pmu->disable(hwc, idx); + cpu_pmu->disable(event); } irq_work_run(); @@ -280,11 +280,13 @@ xscale1pmu_handle_irq(int irq_num, void *dev) return IRQ_HANDLED; } -static void -xscale1pmu_enable_event(struct hw_perf_event *hwc, int idx) +static void xscale1pmu_enable_event(struct perf_event *event) { unsigned long val, mask, evt, flags; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); + int idx = hwc->idx; switch (idx) { case XSCALE_CYCLE_COUNTER: @@ -314,11 +316,13 @@ xscale1pmu_enable_event(struct hw_perf_event *hwc, int idx) raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static void -xscale1pmu_disable_event(struct hw_perf_event *hwc, int idx) +static void xscale1pmu_disable_event(struct perf_event *event) { unsigned long val, mask, evt, flags; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); + int idx = hwc->idx; switch (idx) { case XSCALE_CYCLE_COUNTER: @@ -348,9 +352,10 @@ xscale1pmu_disable_event(struct hw_perf_event *hwc, int idx) static int xscale1pmu_get_event_idx(struct pmu_hw_events *cpuc, - struct hw_perf_event *event) + struct perf_event *event) { - if (XSCALE_PERFCTR_CCNT == event->config_base) { + struct hw_perf_event *hwc = &event->hw; + if (XSCALE_PERFCTR_CCNT == hwc->config_base) { if (test_and_set_bit(XSCALE_CYCLE_COUNTER, cpuc->used_mask)) return -EAGAIN; @@ -366,8 +371,7 @@ xscale1pmu_get_event_idx(struct pmu_hw_events *cpuc, } } -static void -xscale1pmu_start(void) +static void xscale1pmu_start(struct arm_pmu *cpu_pmu) { unsigned long flags, val; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); @@ -379,8 +383,7 @@ xscale1pmu_start(void) raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static void -xscale1pmu_stop(void) +static void xscale1pmu_stop(struct arm_pmu *cpu_pmu) { unsigned long flags, val; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); @@ -392,9 +395,10 @@ xscale1pmu_stop(void) raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static inline u32 -xscale1pmu_read_counter(int counter) +static inline u32 xscale1pmu_read_counter(struct perf_event *event) { + struct hw_perf_event *hwc = &event->hw; + int counter = hwc->idx; u32 val = 0; switch (counter) { @@ -412,9 +416,11 @@ xscale1pmu_read_counter(int counter) return val; } -static inline void -xscale1pmu_write_counter(int counter, u32 val) +static inline void xscale1pmu_write_counter(struct perf_event *event, u32 val) { + struct hw_perf_event *hwc = &event->hw; + int counter = hwc->idx; + switch (counter) { case XSCALE_CYCLE_COUNTER: asm volatile("mcr p14, 0, %0, c1, c0, 0" : : "r" (val)); @@ -434,24 +440,22 @@ static int xscale_map_event(struct perf_event *event) &xscale_perf_cache_map, 0xFF); } -static struct arm_pmu xscale1pmu = { - .name = "xscale1", - .handle_irq = xscale1pmu_handle_irq, - .enable = xscale1pmu_enable_event, - .disable = xscale1pmu_disable_event, - .read_counter = xscale1pmu_read_counter, - .write_counter = xscale1pmu_write_counter, - .get_event_idx = xscale1pmu_get_event_idx, - .start = xscale1pmu_start, - .stop = xscale1pmu_stop, - .map_event = xscale_map_event, - .num_events = 3, - .max_period = (1LLU << 32) - 1, -}; - -static struct arm_pmu *__devinit xscale1pmu_init(void) +static int __devinit xscale1pmu_init(struct arm_pmu *cpu_pmu) { - return &xscale1pmu; + cpu_pmu->name = "xscale1"; + cpu_pmu->handle_irq = xscale1pmu_handle_irq; + cpu_pmu->enable = xscale1pmu_enable_event; + cpu_pmu->disable = xscale1pmu_disable_event; + cpu_pmu->read_counter = xscale1pmu_read_counter; + cpu_pmu->write_counter = xscale1pmu_write_counter; + cpu_pmu->get_event_idx = xscale1pmu_get_event_idx; + cpu_pmu->start = xscale1pmu_start; + cpu_pmu->stop = xscale1pmu_stop; + cpu_pmu->map_event = xscale_map_event; + cpu_pmu->num_events = 3; + cpu_pmu->max_period = (1LLU << 32) - 1; + + return 0; } #define XSCALE2_OVERFLOWED_MASK 0x01f @@ -567,7 +571,8 @@ xscale2pmu_handle_irq(int irq_num, void *dev) { unsigned long pmnc, of_flags; struct perf_sample_data data; - struct pmu_hw_events *cpuc; + struct arm_pmu *cpu_pmu = (struct arm_pmu *)dev; + struct pmu_hw_events *cpuc = cpu_pmu->get_hw_events(); struct pt_regs *regs; int idx; @@ -585,7 +590,6 @@ xscale2pmu_handle_irq(int irq_num, void *dev) regs = get_irq_regs(); - cpuc = &__get_cpu_var(cpu_hw_events); for (idx = 0; idx < cpu_pmu->num_events; ++idx) { struct perf_event *event = cpuc->events[idx]; struct hw_perf_event *hwc; @@ -597,13 +601,13 @@ xscale2pmu_handle_irq(int irq_num, void *dev) continue; hwc = &event->hw; - armpmu_event_update(event, hwc, idx); + armpmu_event_update(event); perf_sample_data_init(&data, 0, hwc->last_period); - if (!armpmu_event_set_period(event, hwc, idx)) + if (!armpmu_event_set_period(event)) continue; if (perf_event_overflow(event, &data, regs)) - cpu_pmu->disable(hwc, idx); + cpu_pmu->disable(event); } irq_work_run(); @@ -617,11 +621,13 @@ xscale2pmu_handle_irq(int irq_num, void *dev) return IRQ_HANDLED; } -static void -xscale2pmu_enable_event(struct hw_perf_event *hwc, int idx) +static void xscale2pmu_enable_event(struct perf_event *event) { unsigned long flags, ien, evtsel; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); + int idx = hwc->idx; ien = xscale2pmu_read_int_enable(); evtsel = xscale2pmu_read_event_select(); @@ -661,11 +667,13 @@ xscale2pmu_enable_event(struct hw_perf_event *hwc, int idx) raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static void -xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx) +static void xscale2pmu_disable_event(struct perf_event *event) { unsigned long flags, ien, evtsel, of_flags; + struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); + struct hw_perf_event *hwc = &event->hw; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); + int idx = hwc->idx; ien = xscale2pmu_read_int_enable(); evtsel = xscale2pmu_read_event_select(); @@ -713,7 +721,7 @@ xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx) static int xscale2pmu_get_event_idx(struct pmu_hw_events *cpuc, - struct hw_perf_event *event) + struct perf_event *event) { int idx = xscale1pmu_get_event_idx(cpuc, event); if (idx >= 0) @@ -727,8 +735,7 @@ xscale2pmu_get_event_idx(struct pmu_hw_events *cpuc, return idx; } -static void -xscale2pmu_start(void) +static void xscale2pmu_start(struct arm_pmu *cpu_pmu) { unsigned long flags, val; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); @@ -740,8 +747,7 @@ xscale2pmu_start(void) raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static void -xscale2pmu_stop(void) +static void xscale2pmu_stop(struct arm_pmu *cpu_pmu) { unsigned long flags, val; struct pmu_hw_events *events = cpu_pmu->get_hw_events(); @@ -753,9 +759,10 @@ xscale2pmu_stop(void) raw_spin_unlock_irqrestore(&events->pmu_lock, flags); } -static inline u32 -xscale2pmu_read_counter(int counter) +static inline u32 xscale2pmu_read_counter(struct perf_event *event) { + struct hw_perf_event *hwc = &event->hw; + int counter = hwc->idx; u32 val = 0; switch (counter) { @@ -779,9 +786,11 @@ xscale2pmu_read_counter(int counter) return val; } -static inline void -xscale2pmu_write_counter(int counter, u32 val) +static inline void xscale2pmu_write_counter(struct perf_event *event, u32 val) { + struct hw_perf_event *hwc = &event->hw; + int counter = hwc->idx; + switch (counter) { case XSCALE_CYCLE_COUNTER: asm volatile("mcr p14, 0, %0, c1, c1, 0" : : "r" (val)); @@ -801,33 +810,31 @@ xscale2pmu_write_counter(int counter, u32 val) } } -static struct arm_pmu xscale2pmu = { - .name = "xscale2", - .handle_irq = xscale2pmu_handle_irq, - .enable = xscale2pmu_enable_event, - .disable = xscale2pmu_disable_event, - .read_counter = xscale2pmu_read_counter, - .write_counter = xscale2pmu_write_counter, - .get_event_idx = xscale2pmu_get_event_idx, - .start = xscale2pmu_start, - .stop = xscale2pmu_stop, - .map_event = xscale_map_event, - .num_events = 5, - .max_period = (1LLU << 32) - 1, -}; - -static struct arm_pmu *__devinit xscale2pmu_init(void) +static int __devinit xscale2pmu_init(struct arm_pmu *cpu_pmu) { - return &xscale2pmu; + cpu_pmu->name = "xscale2"; + cpu_pmu->handle_irq = xscale2pmu_handle_irq; + cpu_pmu->enable = xscale2pmu_enable_event; + cpu_pmu->disable = xscale2pmu_disable_event; + cpu_pmu->read_counter = xscale2pmu_read_counter; + cpu_pmu->write_counter = xscale2pmu_write_counter; + cpu_pmu->get_event_idx = xscale2pmu_get_event_idx; + cpu_pmu->start = xscale2pmu_start; + cpu_pmu->stop = xscale2pmu_stop; + cpu_pmu->map_event = xscale_map_event; + cpu_pmu->num_events = 5; + cpu_pmu->max_period = (1LLU << 32) - 1; + + return 0; } #else -static struct arm_pmu *__devinit xscale1pmu_init(void) +static inline int xscale1pmu_init(struct arm_pmu *cpu_pmu) { - return NULL; + return -ENODEV; } -static struct arm_pmu *__devinit xscale2pmu_init(void) +static inline int xscale2pmu_init(struct arm_pmu *cpu_pmu) { - return NULL; + return -ENODEV; } #endif /* CONFIG_CPU_XSCALE */ diff --git a/trunk/arch/arm/kernel/process.c b/trunk/arch/arm/kernel/process.c index 90084a6de35a..44bc0b327e2b 100644 --- a/trunk/arch/arm/kernel/process.c +++ b/trunk/arch/arm/kernel/process.c @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -56,8 +57,6 @@ static const char *isa_modes[] = { "ARM" , "Thumb" , "Jazelle", "ThumbEE" }; -extern void setup_mm_for_reboot(void); - static volatile int hlt_counter; void disable_hlt(void) @@ -70,6 +69,7 @@ EXPORT_SYMBOL(disable_hlt); void enable_hlt(void) { hlt_counter--; + BUG_ON(hlt_counter < 0); } EXPORT_SYMBOL(enable_hlt); diff --git a/trunk/arch/arm/kernel/ptrace.c b/trunk/arch/arm/kernel/ptrace.c index 739db3a1b2d2..03deeffd9f6d 100644 --- a/trunk/arch/arm/kernel/ptrace.c +++ b/trunk/arch/arm/kernel/ptrace.c @@ -916,16 +916,11 @@ enum ptrace_syscall_dir { PTRACE_SYSCALL_EXIT, }; -static int ptrace_syscall_trace(struct pt_regs *regs, int scno, - enum ptrace_syscall_dir dir) +static int tracehook_report_syscall(struct pt_regs *regs, + enum ptrace_syscall_dir dir) { unsigned long ip; - current_thread_info()->syscall = scno; - - if (!test_thread_flag(TIF_SYSCALL_TRACE)) - return scno; - /* * IP is used to denote syscall entry/exit: * IP = 0 -> entry, =1 -> exit @@ -944,19 +939,41 @@ static int ptrace_syscall_trace(struct pt_regs *regs, int scno, asmlinkage int syscall_trace_enter(struct pt_regs *regs, int scno) { - scno = ptrace_syscall_trace(regs, scno, PTRACE_SYSCALL_ENTER); + current_thread_info()->syscall = scno; + + /* Do the secure computing check first; failures should be fast. */ + if (secure_computing(scno) == -1) + return -1; + + if (test_thread_flag(TIF_SYSCALL_TRACE)) + scno = tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER); + if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) trace_sys_enter(regs, scno); + audit_syscall_entry(AUDIT_ARCH_ARM, scno, regs->ARM_r0, regs->ARM_r1, regs->ARM_r2, regs->ARM_r3); + return scno; } -asmlinkage int syscall_trace_exit(struct pt_regs *regs, int scno) +asmlinkage void syscall_trace_exit(struct pt_regs *regs) { - scno = ptrace_syscall_trace(regs, scno, PTRACE_SYSCALL_EXIT); - if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) - trace_sys_exit(regs, scno); + /* + * Audit the syscall before anything else, as a debugger may + * come in and change the current registers. + */ audit_syscall_exit(regs); - return scno; + + /* + * Note that we haven't updated the ->syscall field for the + * current thread. This isn't a problem because it will have + * been set on syscall entry and there hasn't been an opportunity + * for a PTRACE_SET_SYSCALL since then. + */ + if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) + trace_sys_exit(regs, regs_return_value(regs)); + + if (test_thread_flag(TIF_SYSCALL_TRACE)) + tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT); } diff --git a/trunk/arch/arm/kernel/setup.c b/trunk/arch/arm/kernel/setup.c index da1d1aa20ad9..9a89bf4aefe1 100644 --- a/trunk/arch/arm/kernel/setup.c +++ b/trunk/arch/arm/kernel/setup.c @@ -383,6 +383,12 @@ void cpu_init(void) BUG(); } + /* + * This only works on resume and secondary cores. For booting on the + * boot cpu, smp_prepare_boot_cpu is called after percpu area setup. + */ + set_my_cpu_offset(per_cpu_offset(cpu)); + cpu_proc_init(); /* @@ -426,13 +432,14 @@ int __cpu_logical_map[NR_CPUS]; void __init smp_setup_processor_id(void) { int i; - u32 cpu = is_smp() ? read_cpuid_mpidr() & 0xff : 0; + u32 mpidr = is_smp() ? read_cpuid_mpidr() & MPIDR_HWID_BITMASK : 0; + u32 cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); cpu_logical_map(0) = cpu; - for (i = 1; i < NR_CPUS; ++i) + for (i = 1; i < nr_cpu_ids; ++i) cpu_logical_map(i) = i == cpu ? 0 : i; - printk(KERN_INFO "Booting Linux on physical CPU %d\n", cpu); + printk(KERN_INFO "Booting Linux on physical CPU 0x%x\n", mpidr); } static void __init setup_processor(void) @@ -758,6 +765,7 @@ void __init setup_arch(char **cmdline_p) unflatten_device_tree(); + arm_dt_init_cpu_maps(); #ifdef CONFIG_SMP if (is_smp()) { smp_set_ops(mdesc->smp); @@ -841,12 +849,9 @@ static const char *hwcap_str[] = { static int c_show(struct seq_file *m, void *v) { - int i; + int i, j; + u32 cpuid; - seq_printf(m, "Processor\t: %s rev %d (%s)\n", - cpu_name, read_cpuid_id() & 15, elf_platform); - -#if defined(CONFIG_SMP) for_each_online_cpu(i) { /* * glibc reads /proc/cpuinfo to determine the number of @@ -854,45 +859,48 @@ static int c_show(struct seq_file *m, void *v) * "processor". Give glibc what it expects. */ seq_printf(m, "processor\t: %d\n", i); - seq_printf(m, "BogoMIPS\t: %lu.%02lu\n\n", + cpuid = is_smp() ? per_cpu(cpu_data, i).cpuid : read_cpuid_id(); + seq_printf(m, "model name\t: %s rev %d (%s)\n", + cpu_name, cpuid & 15, elf_platform); + +#if defined(CONFIG_SMP) + seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", per_cpu(cpu_data, i).loops_per_jiffy / (500000UL/HZ), (per_cpu(cpu_data, i).loops_per_jiffy / (5000UL/HZ)) % 100); - } -#else /* CONFIG_SMP */ - seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", - loops_per_jiffy / (500000/HZ), - (loops_per_jiffy / (5000/HZ)) % 100); +#else + seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", + loops_per_jiffy / (500000/HZ), + (loops_per_jiffy / (5000/HZ)) % 100); #endif + /* dump out the processor features */ + seq_puts(m, "Features\t: "); - /* dump out the processor features */ - seq_puts(m, "Features\t: "); - - for (i = 0; hwcap_str[i]; i++) - if (elf_hwcap & (1 << i)) - seq_printf(m, "%s ", hwcap_str[i]); + for (j = 0; hwcap_str[j]; j++) + if (elf_hwcap & (1 << j)) + seq_printf(m, "%s ", hwcap_str[j]); - seq_printf(m, "\nCPU implementer\t: 0x%02x\n", read_cpuid_id() >> 24); - seq_printf(m, "CPU architecture: %s\n", proc_arch[cpu_architecture()]); + seq_printf(m, "\nCPU implementer\t: 0x%02x\n", cpuid >> 24); + seq_printf(m, "CPU architecture: %s\n", + proc_arch[cpu_architecture()]); - if ((read_cpuid_id() & 0x0008f000) == 0x00000000) { - /* pre-ARM7 */ - seq_printf(m, "CPU part\t: %07x\n", read_cpuid_id() >> 4); - } else { - if ((read_cpuid_id() & 0x0008f000) == 0x00007000) { - /* ARM7 */ - seq_printf(m, "CPU variant\t: 0x%02x\n", - (read_cpuid_id() >> 16) & 127); + if ((cpuid & 0x0008f000) == 0x00000000) { + /* pre-ARM7 */ + seq_printf(m, "CPU part\t: %07x\n", cpuid >> 4); } else { - /* post-ARM7 */ - seq_printf(m, "CPU variant\t: 0x%x\n", - (read_cpuid_id() >> 20) & 15); + if ((cpuid & 0x0008f000) == 0x00007000) { + /* ARM7 */ + seq_printf(m, "CPU variant\t: 0x%02x\n", + (cpuid >> 16) & 127); + } else { + /* post-ARM7 */ + seq_printf(m, "CPU variant\t: 0x%x\n", + (cpuid >> 20) & 15); + } + seq_printf(m, "CPU part\t: 0x%03x\n", + (cpuid >> 4) & 0xfff); } - seq_printf(m, "CPU part\t: 0x%03x\n", - (read_cpuid_id() >> 4) & 0xfff); + seq_printf(m, "CPU revision\t: %d\n\n", cpuid & 15); } - seq_printf(m, "CPU revision\t: %d\n", read_cpuid_id() & 15); - - seq_puts(m, "\n"); seq_printf(m, "Hardware\t: %s\n", machine_name); seq_printf(m, "Revision\t: %04x\n", system_rev); diff --git a/trunk/arch/arm/kernel/smp.c b/trunk/arch/arm/kernel/smp.c index fbc8b2623d82..84f4cbf652e5 100644 --- a/trunk/arch/arm/kernel/smp.c +++ b/trunk/arch/arm/kernel/smp.c @@ -281,6 +281,7 @@ static void __cpuinit smp_store_cpu_info(unsigned int cpuid) struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid); cpu_info->loops_per_jiffy = loops_per_jiffy; + cpu_info->cpuid = read_cpuid_id(); store_cpu_topology(cpuid); } @@ -313,9 +314,10 @@ asmlinkage void __cpuinit secondary_start_kernel(void) current->active_mm = mm; cpumask_set_cpu(cpu, mm_cpumask(mm)); + cpu_init(); + printk("CPU%u: Booted secondary processor\n", cpu); - cpu_init(); preempt_disable(); trace_hardirqs_off(); @@ -371,6 +373,7 @@ void __init smp_cpus_done(unsigned int max_cpus) void __init smp_prepare_boot_cpu(void) { + set_my_cpu_offset(per_cpu_offset(smp_processor_id())); } void __init smp_prepare_cpus(unsigned int max_cpus) @@ -421,6 +424,11 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask) smp_cross_call(mask, IPI_CALL_FUNC); } +void arch_send_wakeup_ipi_mask(const struct cpumask *mask) +{ + smp_cross_call(mask, IPI_WAKEUP); +} + void arch_send_call_function_single_ipi(int cpu) { smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE); @@ -443,7 +451,7 @@ void show_ipi_list(struct seq_file *p, int prec) for (i = 0; i < NR_IPI; i++) { seq_printf(p, "%*s%u: ", prec - 1, "IPI", i); - for_each_present_cpu(cpu) + for_each_online_cpu(cpu) seq_printf(p, "%10u ", __get_irq_stat(cpu, ipi_irqs[i])); diff --git a/trunk/arch/arm/kernel/smp_twd.c b/trunk/arch/arm/kernel/smp_twd.c index b22d700fea27..ff07879ad95d 100644 --- a/trunk/arch/arm/kernel/smp_twd.c +++ b/trunk/arch/arm/kernel/smp_twd.c @@ -31,6 +31,8 @@ static void __iomem *twd_base; static struct clk *twd_clk; static unsigned long twd_timer_rate; +static bool common_setup_called; +static DEFINE_PER_CPU(bool, percpu_setup_called); static struct clock_event_device __percpu **twd_evt; static int twd_ppi; @@ -248,17 +250,9 @@ static struct clk *twd_get_clock(void) return clk; } - err = clk_prepare(clk); + err = clk_prepare_enable(clk); if (err) { - pr_err("smp_twd: clock failed to prepare: %d\n", err); - clk_put(clk); - return ERR_PTR(err); - } - - err = clk_enable(clk); - if (err) { - pr_err("smp_twd: clock failed to enable: %d\n", err); - clk_unprepare(clk); + pr_err("smp_twd: clock failed to prepare+enable: %d\n", err); clk_put(clk); return ERR_PTR(err); } @@ -272,15 +266,45 @@ static struct clk *twd_get_clock(void) static int __cpuinit twd_timer_setup(struct clock_event_device *clk) { struct clock_event_device **this_cpu_clk; + int cpu = smp_processor_id(); + + /* + * If the basic setup for this CPU has been done before don't + * bother with the below. + */ + if (per_cpu(percpu_setup_called, cpu)) { + __raw_writel(0, twd_base + TWD_TIMER_CONTROL); + clockevents_register_device(*__this_cpu_ptr(twd_evt)); + enable_percpu_irq(clk->irq, 0); + return 0; + } + per_cpu(percpu_setup_called, cpu) = true; - if (!twd_clk) + /* + * This stuff only need to be done once for the entire TWD cluster + * during the runtime of the system. + */ + if (!common_setup_called) { twd_clk = twd_get_clock(); - if (!IS_ERR_OR_NULL(twd_clk)) - twd_timer_rate = clk_get_rate(twd_clk); - else - twd_calibrate_rate(); + /* + * We use IS_ERR_OR_NULL() here, because if the clock stubs + * are active we will get a valid clk reference which is + * however NULL and will return the rate 0. In that case we + * need to calibrate the rate instead. + */ + if (!IS_ERR_OR_NULL(twd_clk)) + twd_timer_rate = clk_get_rate(twd_clk); + else + twd_calibrate_rate(); + + common_setup_called = true; + } + /* + * The following is done once per CPU the first time .setup() is + * called. + */ __raw_writel(0, twd_base + TWD_TIMER_CONTROL); clk->name = "local_timer"; diff --git a/trunk/arch/arm/kernel/topology.c b/trunk/arch/arm/kernel/topology.c index 26c12c6440fc..79282ebcd939 100644 --- a/trunk/arch/arm/kernel/topology.c +++ b/trunk/arch/arm/kernel/topology.c @@ -196,32 +196,7 @@ static inline void parse_dt_topology(void) {} static inline void update_cpu_power(unsigned int cpuid, unsigned int mpidr) {} #endif - -/* - * cpu topology management - */ - -#define MPIDR_SMP_BITMASK (0x3 << 30) -#define MPIDR_SMP_VALUE (0x2 << 30) - -#define MPIDR_MT_BITMASK (0x1 << 24) - -/* - * These masks reflect the current use of the affinity levels. - * The affinity level can be up to 16 bits according to ARM ARM - */ -#define MPIDR_HWID_BITMASK 0xFFFFFF - -#define MPIDR_LEVEL0_MASK 0x3 -#define MPIDR_LEVEL0_SHIFT 0 - -#define MPIDR_LEVEL1_MASK 0xF -#define MPIDR_LEVEL1_SHIFT 8 - -#define MPIDR_LEVEL2_MASK 0xFF -#define MPIDR_LEVEL2_SHIFT 16 - -/* + /* * cpu topology table */ struct cputopo_arm cpu_topology[NR_CPUS]; @@ -282,19 +257,14 @@ void store_cpu_topology(unsigned int cpuid) if (mpidr & MPIDR_MT_BITMASK) { /* core performance interdependency */ - cpuid_topo->thread_id = (mpidr >> MPIDR_LEVEL0_SHIFT) - & MPIDR_LEVEL0_MASK; - cpuid_topo->core_id = (mpidr >> MPIDR_LEVEL1_SHIFT) - & MPIDR_LEVEL1_MASK; - cpuid_topo->socket_id = (mpidr >> MPIDR_LEVEL2_SHIFT) - & MPIDR_LEVEL2_MASK; + cpuid_topo->thread_id = MPIDR_AFFINITY_LEVEL(mpidr, 0); + cpuid_topo->core_id = MPIDR_AFFINITY_LEVEL(mpidr, 1); + cpuid_topo->socket_id = MPIDR_AFFINITY_LEVEL(mpidr, 2); } else { /* largely independent cores */ cpuid_topo->thread_id = -1; - cpuid_topo->core_id = (mpidr >> MPIDR_LEVEL0_SHIFT) - & MPIDR_LEVEL0_MASK; - cpuid_topo->socket_id = (mpidr >> MPIDR_LEVEL1_SHIFT) - & MPIDR_LEVEL1_MASK; + cpuid_topo->core_id = MPIDR_AFFINITY_LEVEL(mpidr, 0); + cpuid_topo->socket_id = MPIDR_AFFINITY_LEVEL(mpidr, 1); } } else { /* diff --git a/trunk/arch/arm/kernel/vmlinux.lds.S b/trunk/arch/arm/kernel/vmlinux.lds.S index 36ff15bbfdd4..b9f38e388b43 100644 --- a/trunk/arch/arm/kernel/vmlinux.lds.S +++ b/trunk/arch/arm/kernel/vmlinux.lds.S @@ -114,6 +114,15 @@ SECTIONS RO_DATA(PAGE_SIZE) + . = ALIGN(4); + __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { + __start___ex_table = .; +#ifdef CONFIG_MMU + *(__ex_table) +#endif + __stop___ex_table = .; + } + #ifdef CONFIG_ARM_UNWIND /* * Stack unwinding tables @@ -219,16 +228,6 @@ SECTIONS CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) READ_MOSTLY_DATA(L1_CACHE_BYTES) - /* - * The exception fixup table (might need resorting at runtime) - */ - . = ALIGN(4); - __start___ex_table = .; -#ifdef CONFIG_MMU - *(__ex_table) -#endif - __stop___ex_table = .; - /* * and the usual data section */ diff --git a/trunk/arch/arm/mach-at91/Kconfig b/trunk/arch/arm/mach-at91/Kconfig index 043624219b55..e34c1bdb804d 100644 --- a/trunk/arch/arm/mach-at91/Kconfig +++ b/trunk/arch/arm/mach-at91/Kconfig @@ -494,8 +494,17 @@ endif comment "Generic Board Type" +config MACH_AT91RM9200_DT + bool "Atmel AT91RM9200 Evaluation Kits with device-tree support" + depends on SOC_AT91RM9200 + select USE_OF + help + Select this if you want to experiment device-tree with + an Atmel RM9200 Evaluation Kit. + config MACH_AT91SAM_DT bool "Atmel AT91SAM Evaluation Kits with device-tree support" + depends on SOC_AT91SAM9 select USE_OF help Select this if you want to experiment device-tree with diff --git a/trunk/arch/arm/mach-at91/Makefile b/trunk/arch/arm/mach-at91/Makefile index 3bb7a51efc9d..b38a1dcb79b8 100644 --- a/trunk/arch/arm/mach-at91/Makefile +++ b/trunk/arch/arm/mach-at91/Makefile @@ -88,6 +88,7 @@ obj-$(CONFIG_MACH_SNAPPER_9260) += board-snapper9260.o obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o # AT91SAM board with device-tree +obj-$(CONFIG_MACH_AT91RM9200_DT) += board-rm9200-dt.o obj-$(CONFIG_MACH_AT91SAM_DT) += board-dt.o # AT91X40 board-specific support diff --git a/trunk/arch/arm/mach-at91/include/mach/at91_aic.h b/trunk/arch/arm/mach-at91/at91_aic.h similarity index 100% rename from trunk/arch/arm/mach-at91/include/mach/at91_aic.h rename to trunk/arch/arm/mach-at91/at91_aic.h diff --git a/trunk/arch/arm/mach-at91/include/mach/at91_rstc.h b/trunk/arch/arm/mach-at91/at91_rstc.h similarity index 100% rename from trunk/arch/arm/mach-at91/include/mach/at91_rstc.h rename to trunk/arch/arm/mach-at91/at91_rstc.h diff --git a/trunk/arch/arm/mach-at91/include/mach/at91_shdwc.h b/trunk/arch/arm/mach-at91/at91_shdwc.h similarity index 100% rename from trunk/arch/arm/mach-at91/include/mach/at91_shdwc.h rename to trunk/arch/arm/mach-at91/at91_shdwc.h diff --git a/trunk/arch/arm/mach-at91/include/mach/at91_tc.h b/trunk/arch/arm/mach-at91/at91_tc.h similarity index 100% rename from trunk/arch/arm/mach-at91/include/mach/at91_tc.h rename to trunk/arch/arm/mach-at91/at91_tc.h diff --git a/trunk/arch/arm/mach-at91/at91rm9200.c b/trunk/arch/arm/mach-at91/at91rm9200.c index 5269825194a8..8ce068240c69 100644 --- a/trunk/arch/arm/mach-at91/at91rm9200.c +++ b/trunk/arch/arm/mach-at91/at91rm9200.c @@ -17,11 +17,11 @@ #include #include #include -#include #include #include #include +#include "at91_aic.h" #include "soc.h" #include "generic.h" #include "clock.h" @@ -194,6 +194,24 @@ static struct clk_lookup periph_clocks_lookups[] = { CLKDEV_CON_ID("pioB", &pioB_clk), CLKDEV_CON_ID("pioC", &pioC_clk), CLKDEV_CON_ID("pioD", &pioD_clk), + /* usart lookup table for DT entries */ + CLKDEV_CON_DEV_ID("usart", "fffff200.serial", &mck), + CLKDEV_CON_DEV_ID("usart", "fffc0000.serial", &usart0_clk), + CLKDEV_CON_DEV_ID("usart", "fffc4000.serial", &usart1_clk), + CLKDEV_CON_DEV_ID("usart", "fffc8000.serial", &usart2_clk), + CLKDEV_CON_DEV_ID("usart", "fffcc000.serial", &usart3_clk), + /* tc lookup table for DT entries */ + CLKDEV_CON_DEV_ID("t0_clk", "fffa0000.timer", &tc0_clk), + CLKDEV_CON_DEV_ID("t1_clk", "fffa0000.timer", &tc1_clk), + CLKDEV_CON_DEV_ID("t2_clk", "fffa0000.timer", &tc2_clk), + CLKDEV_CON_DEV_ID("t0_clk", "fffa4000.timer", &tc3_clk), + CLKDEV_CON_DEV_ID("t1_clk", "fffa4000.timer", &tc4_clk), + CLKDEV_CON_DEV_ID("t2_clk", "fffa4000.timer", &tc5_clk), + CLKDEV_CON_DEV_ID("hclk", "300000.ohci", &ohci_clk), + CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioA_clk), + CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioB_clk), + CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioC_clk), + CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioD_clk), }; static struct clk_lookup usart_clocks_lookups[] = { @@ -361,10 +379,10 @@ static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = { 0 /* Advanced Interrupt Controller (IRQ6) */ }; -struct at91_init_soc __initdata at91rm9200_soc = { +AT91_SOC_START(rm9200) .map_io = at91rm9200_map_io, .default_irq_priority = at91rm9200_default_irq_priority, .ioremap_registers = at91rm9200_ioremap_registers, .register_clocks = at91rm9200_register_clocks, .init = at91rm9200_initialize, -}; +AT91_SOC_END diff --git a/trunk/arch/arm/mach-at91/at91rm9200_devices.c b/trunk/arch/arm/mach-at91/at91rm9200_devices.c index 3cee0e6ea7c3..2a1f8e67683d 100644 --- a/trunk/arch/arm/mach-at91/at91rm9200_devices.c +++ b/trunk/arch/arm/mach-at91/at91rm9200_devices.c @@ -18,11 +18,11 @@ #include #include -#include #include #include #include +#include "board.h" #include "generic.h" diff --git a/trunk/arch/arm/mach-at91/at91rm9200_time.c b/trunk/arch/arm/mach-at91/at91rm9200_time.c index aaa443b48c91..cafe98836c8a 100644 --- a/trunk/arch/arm/mach-at91/at91rm9200_time.c +++ b/trunk/arch/arm/mach-at91/at91rm9200_time.c @@ -24,6 +24,9 @@ #include #include #include +#include +#include +#include #include @@ -91,7 +94,8 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id) static struct irqaction at91rm9200_timer_irq = { .name = "at91_tick", .flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, - .handler = at91rm9200_timer_interrupt + .handler = at91rm9200_timer_interrupt, + .irq = NR_IRQS_LEGACY + AT91_ID_SYS, }; static cycle_t read_clk32k(struct clocksource *cs) @@ -179,8 +183,60 @@ static struct clock_event_device clkevt = { void __iomem *at91_st_base; EXPORT_SYMBOL_GPL(at91_st_base); +#ifdef CONFIG_OF +static struct of_device_id at91rm9200_st_timer_ids[] = { + { .compatible = "atmel,at91rm9200-st" }, + { /* sentinel */ } +}; + +static int __init of_at91rm9200_st_init(void) +{ + struct device_node *np; + int ret; + + np = of_find_matching_node(NULL, at91rm9200_st_timer_ids); + if (!np) + goto err; + + at91_st_base = of_iomap(np, 0); + if (!at91_st_base) + goto node_err; + + /* Get the interrupts property */ + ret = irq_of_parse_and_map(np, 0); + if (!ret) + goto ioremap_err; + at91rm9200_timer_irq.irq = ret; + + of_node_put(np); + + return 0; + +ioremap_err: + iounmap(at91_st_base); +node_err: + of_node_put(np); +err: + return -EINVAL; +} +#else +static int __init of_at91rm9200_st_init(void) +{ + return -EINVAL; +} +#endif + void __init at91rm9200_ioremap_st(u32 addr) { +#ifdef CONFIG_OF + struct device_node *np; + + np = of_find_matching_node(NULL, at91rm9200_st_timer_ids); + if (np) { + of_node_put(np); + return; + } +#endif at91_st_base = ioremap(addr, 256); if (!at91_st_base) panic("Impossible to ioremap ST\n"); @@ -191,13 +247,16 @@ void __init at91rm9200_ioremap_st(u32 addr) */ void __init at91rm9200_timer_init(void) { + /* For device tree enabled device: initialize here */ + of_at91rm9200_st_init(); + /* Disable all timer interrupts, and clear any pending ones */ at91_st_write(AT91_ST_IDR, AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS); at91_st_read(AT91_ST_SR); /* Make IRQs happen for the system timer */ - setup_irq(NR_IRQS_LEGACY + AT91_ID_SYS, &at91rm9200_timer_irq); + setup_irq(at91rm9200_timer_irq.irq, &at91rm9200_timer_irq); /* The 32KiHz "Slow Clock" (tick every 30517.58 nanoseconds) is used * directly for the clocksource and all clockevents, after adjusting diff --git a/trunk/arch/arm/mach-at91/at91sam9260.c b/trunk/arch/arm/mach-at91/at91sam9260.c index f8202615f4a8..c65e7b8d7a81 100644 --- a/trunk/arch/arm/mach-at91/at91sam9260.c +++ b/trunk/arch/arm/mach-at91/at91sam9260.c @@ -20,10 +20,10 @@ #include #include #include -#include #include -#include +#include "at91_aic.h" +#include "at91_rstc.h" #include "soc.h" #include "generic.h" #include "clock.h" @@ -230,11 +230,15 @@ static struct clk_lookup periph_clocks_lookups[] = { CLKDEV_CON_DEV_ID("t1_clk", "fffdc000.timer", &tc4_clk), CLKDEV_CON_DEV_ID("t2_clk", "fffdc000.timer", &tc5_clk), CLKDEV_CON_DEV_ID("hclk", "500000.ohci", &ohci_clk), + CLKDEV_CON_DEV_ID("mci_clk", "fffa8000.mmc", &mmc_clk), /* fake hclk clock */ CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), CLKDEV_CON_ID("pioA", &pioA_clk), CLKDEV_CON_ID("pioB", &pioB_clk), CLKDEV_CON_ID("pioC", &pioC_clk), + CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioA_clk), + CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioB_clk), + CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioC_clk), }; static struct clk_lookup usart_clocks_lookups[] = { @@ -390,10 +394,10 @@ static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = { 0, /* Advanced Interrupt Controller */ }; -struct at91_init_soc __initdata at91sam9260_soc = { +AT91_SOC_START(sam9260) .map_io = at91sam9260_map_io, .default_irq_priority = at91sam9260_default_irq_priority, .ioremap_registers = at91sam9260_ioremap_registers, .register_clocks = at91sam9260_register_clocks, .init = at91sam9260_initialize, -}; +AT91_SOC_END diff --git a/trunk/arch/arm/mach-at91/at91sam9260_devices.c b/trunk/arch/arm/mach-at91/at91sam9260_devices.c index 414bd855fb0c..1f6fac21b2c8 100644 --- a/trunk/arch/arm/mach-at91/at91sam9260_devices.c +++ b/trunk/arch/arm/mach-at91/at91sam9260_devices.c @@ -19,7 +19,6 @@ #include -#include #include #include #include @@ -27,6 +26,7 @@ #include #include +#include "board.h" #include "generic.h" diff --git a/trunk/arch/arm/mach-at91/at91sam9261.c b/trunk/arch/arm/mach-at91/at91sam9261.c index 04295c04b3e0..9d3e9b8b9926 100644 --- a/trunk/arch/arm/mach-at91/at91sam9261.c +++ b/trunk/arch/arm/mach-at91/at91sam9261.c @@ -19,10 +19,10 @@ #include #include #include -#include #include -#include +#include "at91_aic.h" +#include "at91_rstc.h" #include "soc.h" #include "generic.h" #include "clock.h" @@ -334,10 +334,10 @@ static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata = { 0, /* Advanced Interrupt Controller */ }; -struct at91_init_soc __initdata at91sam9261_soc = { +AT91_SOC_START(sam9261) .map_io = at91sam9261_map_io, .default_irq_priority = at91sam9261_default_irq_priority, .ioremap_registers = at91sam9261_ioremap_registers, .register_clocks = at91sam9261_register_clocks, .init = at91sam9261_initialize, -}; +AT91_SOC_END diff --git a/trunk/arch/arm/mach-at91/at91sam9261_devices.c b/trunk/arch/arm/mach-at91/at91sam9261_devices.c index cd604aad8e96..6ce6d27e2442 100644 --- a/trunk/arch/arm/mach-at91/at91sam9261_devices.c +++ b/trunk/arch/arm/mach-at91/at91sam9261_devices.c @@ -21,12 +21,12 @@ #include #include