From 8569ba489a4a8ce3d4cc7e4a41fc1c6b3e1c1e60 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Tue, 30 Nov 2010 18:15:53 +0100 Subject: [PATCH] --- yaml --- r: 225918 b: refs/heads/master c: 4d6b7a779be34e1df296abc1dc555134a8cf34af h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/Documentation/ABI/testing/sysfs-bus-rbd | 83 -- .../ABI/testing/sysfs-platform-asus-laptop | 16 +- .../ABI/testing/sysfs-platform-eeepc-wmi | 10 - trunk/Documentation/accounting/getdelays.c | 1 - trunk/Documentation/arm/00-INDEX | 2 - trunk/Documentation/arm/swp_emulation | 27 - .../Documentation/driver-model/interface.txt | 129 +++ trunk/Documentation/edac.txt | 8 +- trunk/Documentation/filesystems/Locking | 219 ++--- trunk/Documentation/filesystems/vfs.txt | 16 +- trunk/Documentation/kernel-parameters.txt | 7 +- trunk/Documentation/networking/ip-sysctl.txt | 1 - trunk/Documentation/power/runtime_pm.txt | 4 +- trunk/Documentation/scsi/scsi_mid_low_api.txt | 59 +- .../postprocess/trace-vmscan-postprocess.pl | 11 +- trunk/MAINTAINERS | 44 +- trunk/Makefile | 2 +- trunk/arch/arm/Kconfig | 106 +-- trunk/arch/arm/Kconfig.debug | 2 +- trunk/arch/arm/boot/Makefile | 5 + trunk/arch/arm/boot/bootp/init.S | 2 - trunk/arch/arm/boot/compressed/Makefile | 4 - .../arch/arm/boot/compressed/head-shmobile.S | 53 -- trunk/arch/arm/boot/compressed/head.S | 13 +- trunk/arch/arm/common/Kconfig | 4 + trunk/arch/arm/common/Makefile | 1 - .../{drivers/clk => arch/arm/common}/clkdev.c | 13 +- trunk/arch/arm/common/dmabounce.c | 16 +- trunk/arch/arm/common/gic.c | 107 +-- trunk/arch/arm/common/it8152.c | 1 - trunk/arch/arm/configs/at91rm9200_defconfig | 341 -------- trunk/arch/arm/configs/at91rm9200dk_defconfig | 72 ++ trunk/arch/arm/configs/at91rm9200ek_defconfig | 73 ++ trunk/arch/arm/configs/ateb9200_defconfig | 131 +++ trunk/arch/arm/configs/carmeva_defconfig | 47 ++ trunk/arch/arm/configs/cpuat91_defconfig | 112 +++ trunk/arch/arm/configs/csb337_defconfig | 104 +++ trunk/arch/arm/configs/csb637_defconfig | 98 +++ trunk/arch/arm/configs/ecbat91_defconfig | 99 +++ trunk/arch/arm/configs/kafa_defconfig | 61 ++ trunk/arch/arm/configs/kb9202_defconfig | 127 +++ trunk/arch/arm/configs/onearm_defconfig | 80 ++ trunk/arch/arm/configs/picotux200_defconfig | 242 ++++++ trunk/arch/arm/configs/yl9200_defconfig | 137 ++++ trunk/arch/arm/include/asm/assembler.h | 35 +- trunk/arch/arm/include/asm/cache.h | 2 - trunk/arch/arm/include/asm/clkdev.h | 22 +- trunk/arch/arm/include/asm/dma-mapping.h | 93 +-- trunk/arch/arm/include/asm/domain.h | 31 +- trunk/arch/arm/include/asm/elf.h | 2 - .../arch/arm/include/asm/entry-macro-multi.S | 44 -- trunk/arch/arm/include/asm/futex.h | 9 +- trunk/arch/arm/include/asm/hardirq.h | 18 - .../include/asm/hardware/entry-macro-gic.S | 75 -- trunk/arch/arm/include/asm/hardware/gic.h | 7 +- trunk/arch/arm/include/asm/hardware/it8152.h | 1 - trunk/arch/arm/include/asm/highmem.h | 3 + trunk/arch/arm/include/asm/io.h | 13 +- trunk/arch/arm/include/asm/kexec.h | 18 +- trunk/arch/arm/include/asm/localtimer.h | 12 + trunk/arch/arm/include/asm/mach/arch.h | 9 - trunk/arch/arm/include/asm/mach/irq.h | 8 +- trunk/arch/arm/include/asm/mach/time.h | 1 + trunk/arch/arm/include/asm/module.h | 15 +- trunk/arch/arm/include/asm/page.h | 6 +- trunk/arch/arm/include/asm/pgalloc.h | 50 +- trunk/arch/arm/include/asm/pgtable.h | 315 ++++---- trunk/arch/arm/include/asm/sched_clock.h | 118 --- trunk/arch/arm/include/asm/sizes.h | 6 +- trunk/arch/arm/include/asm/smp.h | 17 +- trunk/arch/arm/include/asm/smp_mpidr.h | 17 + trunk/arch/arm/include/asm/smp_twd.h | 1 + trunk/arch/arm/include/asm/system.h | 8 - trunk/arch/arm/include/asm/traps.h | 2 - trunk/arch/arm/include/asm/uaccess.h | 16 +- trunk/arch/arm/kernel/Makefile | 5 +- trunk/arch/arm/kernel/entry-armv.S | 54 +- trunk/arch/arm/kernel/entry-common.S | 6 - trunk/arch/arm/kernel/fiq.c | 10 +- trunk/arch/arm/kernel/head.S | 57 +- trunk/arch/arm/kernel/irq.c | 30 +- trunk/arch/arm/kernel/machine_kexec.c | 30 - trunk/arch/arm/kernel/module.c | 109 +-- trunk/arch/arm/kernel/perf_event.c | 18 +- trunk/arch/arm/kernel/perf_event_v6.c | 10 +- trunk/arch/arm/kernel/perf_event_v7.c | 10 +- trunk/arch/arm/kernel/perf_event_xscale.c | 8 +- trunk/arch/arm/kernel/relocate_kernel.S | 2 - trunk/arch/arm/kernel/sched_clock.c | 69 -- trunk/arch/arm/kernel/setup.c | 37 +- trunk/arch/arm/kernel/smp.c | 446 +++++++---- trunk/arch/arm/kernel/smp_tlb.c | 139 ---- trunk/arch/arm/kernel/smp_twd.c | 17 +- trunk/arch/arm/kernel/swp_emulate.c | 267 ------- trunk/arch/arm/kernel/time.c | 4 +- trunk/arch/arm/kernel/traps.c | 26 +- trunk/arch/arm/kernel/vmlinux.lds.S | 1 - trunk/arch/arm/lib/getuser.S | 13 +- trunk/arch/arm/lib/putuser.S | 29 +- trunk/arch/arm/lib/uaccess.S | 83 +- trunk/arch/arm/mach-at91/Makefile | 6 +- trunk/arch/arm/mach-at91/at91rm9200_devices.c | 45 ++ trunk/arch/arm/mach-at91/at91rm9200_time.c | 4 +- trunk/arch/arm/mach-at91/at91sam926x_time.c | 4 +- trunk/arch/arm/mach-at91/board-1arm.c | 26 +- .../{board-rm9200dk.c => board-dk.c} | 4 +- .../{board-rm9200ek.c => board-ek.c} | 4 +- trunk/arch/arm/mach-at91/board-kafa.c | 21 +- trunk/arch/arm/mach-at91/board-pcontrol-g20.c | 98 ++- trunk/arch/arm/mach-at91/board-picotux200.c | 53 +- trunk/arch/arm/mach-at91/board-stamp9g20.c | 82 +- trunk/arch/arm/mach-at91/board-yl-9200.c | 2 +- trunk/arch/arm/mach-at91/clock.c | 2 +- .../arm/mach-at91/include/mach/at91_mci.h | 2 - trunk/arch/arm/mach-at91/include/mach/board.h | 6 + .../arm/mach-at91/include/mach/stamp9g20.h | 7 - trunk/arch/arm/mach-bcmring/clock.c | 3 +- trunk/arch/arm/mach-bcmring/core.c | 16 +- trunk/arch/arm/mach-cns3xxx/Kconfig | 1 - trunk/arch/arm/mach-cns3xxx/core.c | 7 +- trunk/arch/arm/mach-cns3xxx/core.h | 1 + .../mach-cns3xxx/include/mach/entry-macro.S | 66 +- trunk/arch/arm/mach-cns3xxx/pcie.c | 2 +- trunk/arch/arm/mach-davinci/clock.h | 2 +- trunk/arch/arm/mach-davinci/include/mach/io.h | 4 +- trunk/arch/arm/mach-davinci/time.c | 7 +- trunk/arch/arm/mach-ep93xx/clock.c | 2 +- trunk/arch/arm/mach-imx/clock-imx1.c | 3 +- trunk/arch/arm/mach-imx/clock-imx21.c | 2 +- trunk/arch/arm/mach-imx/clock-imx27.c | 2 +- trunk/arch/arm/mach-integrator/Kconfig | 1 - trunk/arch/arm/mach-integrator/core.c | 3 +- trunk/arch/arm/mach-integrator/impd1.c | 3 +- .../arch/arm/mach-integrator/integrator_ap.c | 4 +- .../arch/arm/mach-integrator/integrator_cp.c | 5 +- trunk/arch/arm/mach-iop13xx/include/mach/io.h | 4 +- .../arm/mach-iop13xx/include/mach/memory.h | 6 +- trunk/arch/arm/mach-iop32x/include/mach/io.h | 4 +- trunk/arch/arm/mach-iop33x/include/mach/io.h | 4 +- trunk/arch/arm/mach-ixp23xx/include/mach/io.h | 4 +- trunk/arch/arm/mach-ixp4xx/common-pci.c | 2 +- trunk/arch/arm/mach-ixp4xx/common.c | 35 +- trunk/arch/arm/mach-ixp4xx/include/mach/io.h | 4 +- .../arch/arm/mach-kirkwood/include/mach/io.h | 4 +- trunk/arch/arm/mach-ks8695/Kconfig | 1 - .../arm/mach-ks8695/include/mach/memory.h | 8 +- trunk/arch/arm/mach-lpc32xx/clock.c | 3 +- trunk/arch/arm/mach-lpc32xx/timer.c | 5 +- trunk/arch/arm/mach-mmp/clock.h | 2 +- trunk/arch/arm/mach-mmp/mmp2.c | 1 + trunk/arch/arm/mach-mmp/time.c | 39 +- trunk/arch/arm/mach-msm/board-msm8x60.c | 7 +- trunk/arch/arm/mach-msm/include/mach/smp.h | 4 +- trunk/arch/arm/mach-msm/timer.c | 5 +- trunk/arch/arm/mach-mx25/clock.c | 3 +- trunk/arch/arm/mach-mx3/clock-imx31.c | 2 +- trunk/arch/arm/mach-mx3/clock-imx35.c | 3 +- trunk/arch/arm/mach-mx5/clock-mx51.c | 2 +- trunk/arch/arm/mach-mxc91231/clock.c | 2 +- trunk/arch/arm/mach-netx/time.c | 5 +- trunk/arch/arm/mach-nomadik/clock.c | 2 +- trunk/arch/arm/mach-ns9xxx/time-ns9360.c | 6 +- trunk/arch/arm/mach-nuc93x/clock.h | 2 +- trunk/arch/arm/mach-omap1/clock.c | 2 +- trunk/arch/arm/mach-omap1/time.c | 6 +- .../arm/mach-omap2/board-zoom-peripherals.c | 2 +- trunk/arch/arm/mach-omap2/dpll3xxx.c | 2 +- .../arm/mach-omap2/include/mach/entry-macro.S | 93 ++- .../mach-omap2/include/mach/omap4-common.h | 1 + trunk/arch/arm/mach-omap2/io.c | 2 +- trunk/arch/arm/mach-omap2/omap-hotplug.c | 14 +- trunk/arch/arm/mach-omap2/omap-smp.c | 68 +- trunk/arch/arm/mach-omap2/omap4-common.c | 11 +- trunk/arch/arm/mach-omap2/pm-debug.c | 34 +- trunk/arch/arm/mach-omap2/pm24xx.c | 35 - trunk/arch/arm/mach-omap2/pm34xx.c | 27 +- trunk/arch/arm/mach-omap2/prcm-common.h | 11 +- trunk/arch/arm/mach-omap2/serial.c | 7 +- trunk/arch/arm/mach-omap2/timer-gp.c | 5 +- trunk/arch/arm/mach-orion5x/include/mach/io.h | 4 +- trunk/arch/arm/mach-pnx4008/clock.c | 3 +- trunk/arch/arm/mach-pxa/Kconfig | 2 - trunk/arch/arm/mach-pxa/clock.c | 2 +- trunk/arch/arm/mach-pxa/clock.h | 2 +- trunk/arch/arm/mach-pxa/palmtx.c | 3 +- trunk/arch/arm/mach-pxa/sleep.S | 4 +- trunk/arch/arm/mach-pxa/time.c | 35 +- trunk/arch/arm/mach-realview/core.c | 18 +- trunk/arch/arm/mach-realview/core.h | 1 + trunk/arch/arm/mach-realview/headsmp.S | 1 - trunk/arch/arm/mach-realview/hotplug.c | 44 +- .../mach-realview/include/mach/entry-macro.S | 65 +- .../arch/arm/mach-realview/include/mach/smp.h | 5 +- trunk/arch/arm/mach-realview/platsmp.c | 116 ++- trunk/arch/arm/mach-realview/realview_eb.c | 14 +- .../arch/arm/mach-realview/realview_pb1176.c | 11 +- .../arch/arm/mach-realview/realview_pb11mp.c | 10 +- trunk/arch/arm/mach-realview/realview_pba8.c | 6 +- trunk/arch/arm/mach-realview/realview_pbx.c | 13 +- trunk/arch/arm/mach-s3c2410/h1940-bluetooth.c | 8 +- trunk/arch/arm/mach-s3c2412/Kconfig | 11 +- trunk/arch/arm/mach-s3c2412/Makefile | 3 +- trunk/arch/arm/mach-s3c2416/Kconfig | 4 - trunk/arch/arm/mach-s3c2416/irq.c | 5 +- trunk/arch/arm/mach-s3c2440/Kconfig | 4 - trunk/arch/arm/mach-s3c2440/s3c2440.c | 11 +- trunk/arch/arm/mach-s3c2440/s3c2442.c | 14 - trunk/arch/arm/mach-s3c2443/Kconfig | 1 - trunk/arch/arm/mach-s3c2443/irq.c | 5 +- trunk/arch/arm/mach-s3c64xx/mach-mini6410.c | 2 +- trunk/arch/arm/mach-s3c64xx/mach-real6410.c | 2 +- trunk/arch/arm/mach-s5pv210/mach-aquila.c | 6 - trunk/arch/arm/mach-s5pv210/mach-goni.c | 6 - trunk/arch/arm/mach-s5pv210/mach-smdkc110.c | 1 - trunk/arch/arm/mach-s5pv210/mach-smdkv210.c | 1 - trunk/arch/arm/mach-s5pv310/cpu.c | 6 +- trunk/arch/arm/mach-s5pv310/hotplug.c | 44 +- .../arch/arm/mach-s5pv310/include/mach/smp.h | 7 +- trunk/arch/arm/mach-s5pv310/platsmp.c | 68 +- trunk/arch/arm/mach-s5pv310/time.c | 6 +- trunk/arch/arm/mach-sa1100/Kconfig | 10 - trunk/arch/arm/mach-sa1100/Makefile | 3 - trunk/arch/arm/mach-sa1100/cpu-sa1100.c | 51 +- trunk/arch/arm/mach-sa1100/cpu-sa1110.c | 57 +- trunk/arch/arm/mach-sa1100/generic.c | 64 +- .../arm/mach-sa1100/include/mach/hardware.h | 8 - .../arm/mach-sa1100/include/mach/nanoengine.h | 52 -- trunk/arch/arm/mach-sa1100/nanoengine.c | 119 --- trunk/arch/arm/mach-sa1100/pci-nanoengine.c | 284 ------- trunk/arch/arm/mach-sa1100/simpad.c | 7 +- trunk/arch/arm/mach-sa1100/time.c | 36 +- trunk/arch/arm/mach-shmobile/Kconfig | 6 +- trunk/arch/arm/mach-shmobile/board-ap4evb.c | 148 +--- trunk/arch/arm/mach-shmobile/clock-sh7367.c | 2 +- trunk/arch/arm/mach-shmobile/clock-sh7372.c | 35 +- trunk/arch/arm/mach-shmobile/clock-sh7377.c | 2 +- .../mach-shmobile/include/mach/entry-macro.S | 30 +- .../include/mach/head-ap4evb.txt | 87 -- .../arm/mach-shmobile/include/mach/vmalloc.h | 2 +- .../arm/mach-shmobile/include/mach/zboot.h | 20 - .../mach-shmobile/include/mach/zboot_macros.h | 65 -- trunk/arch/arm/mach-tcc8k/clock.c | 3 +- trunk/arch/arm/mach-tcc8k/time.c | 5 +- trunk/arch/arm/mach-tegra/clock.c | 2 +- trunk/arch/arm/mach-tegra/clock.h | 2 +- trunk/arch/arm/mach-tegra/hotplug.c | 44 +- .../arm/mach-tegra/include/mach/debug-macro.S | 4 +- .../arm/mach-tegra/include/mach/entry-macro.S | 66 +- trunk/arch/arm/mach-tegra/include/mach/io.h | 4 +- trunk/arch/arm/mach-tegra/include/mach/smp.h | 12 +- trunk/arch/arm/mach-tegra/irq.c | 4 +- trunk/arch/arm/mach-tegra/platsmp.c | 35 +- trunk/arch/arm/mach-tegra/tegra2_clocks.c | 3 +- trunk/arch/arm/mach-tegra/timer.c | 31 +- trunk/arch/arm/mach-u300/clock.c | 2 +- trunk/arch/arm/mach-u300/timer.c | 22 +- trunk/arch/arm/mach-ux500/clock.c | 3 +- trunk/arch/arm/mach-ux500/cpu.c | 4 +- trunk/arch/arm/mach-ux500/headsmp.S | 1 + trunk/arch/arm/mach-ux500/hotplug.c | 18 +- .../arm/mach-ux500/include/mach/entry-macro.S | 68 +- trunk/arch/arm/mach-ux500/include/mach/smp.h | 5 +- trunk/arch/arm/mach-ux500/platsmp.c | 75 +- trunk/arch/arm/mach-versatile/Kconfig | 1 - trunk/arch/arm/mach-versatile/core.c | 15 +- trunk/arch/arm/mach-vexpress/Makefile | 1 - trunk/arch/arm/mach-vexpress/core.h | 2 + trunk/arch/arm/mach-vexpress/ct-ca9x4.c | 12 +- trunk/arch/arm/mach-vexpress/headsmp.S | 1 - trunk/arch/arm/mach-vexpress/hotplug.c | 128 --- .../mach-vexpress/include/mach/entry-macro.S | 62 +- .../arch/arm/mach-vexpress/include/mach/smp.h | 5 +- trunk/arch/arm/mach-vexpress/platsmp.c | 76 +- trunk/arch/arm/mach-vexpress/v2m.c | 8 +- trunk/arch/arm/mach-w90x900/clock.h | 2 +- trunk/arch/arm/mach-w90x900/time.c | 5 +- trunk/arch/arm/mm/Kconfig | 35 - trunk/arch/arm/mm/Makefile | 4 +- trunk/arch/arm/mm/cache-feroceon-l2.c | 37 +- trunk/arch/arm/mm/cache-v6.S | 28 +- trunk/arch/arm/mm/cache-v7.S | 27 +- trunk/arch/arm/mm/cache-xsc3l2.c | 57 +- trunk/arch/arm/mm/dma-mapping.c | 35 +- trunk/arch/arm/mm/fault-armv.c | 2 +- trunk/arch/arm/mm/fault.c | 2 +- trunk/arch/arm/mm/flush.c | 7 +- trunk/arch/arm/mm/highmem.c | 87 ++ trunk/arch/arm/mm/idmap.c | 67 -- trunk/arch/arm/mm/ioremap.c | 8 +- trunk/arch/arm/mm/mm.h | 2 +- trunk/arch/arm/mm/mmu.c | 68 +- trunk/arch/arm/mm/pgd.c | 37 +- trunk/arch/arm/mm/proc-macros.S | 59 +- trunk/arch/arm/mm/proc-v7.S | 31 +- trunk/arch/arm/mm/proc-xscale.S | 4 +- trunk/arch/arm/plat-iop/time.c | 30 +- trunk/arch/arm/plat-mxc/epit.c | 5 +- trunk/arch/arm/plat-mxc/time.c | 5 +- trunk/arch/arm/plat-nomadik/Kconfig | 1 - trunk/arch/arm/plat-nomadik/timer.c | 80 +- trunk/arch/arm/plat-omap/Kconfig | 4 +- trunk/arch/arm/plat-omap/counter_32k.c | 48 +- .../arm/plat-omap/include/plat/clkdev_omap.h | 2 +- trunk/arch/arm/plat-omap/include/plat/io.h | 4 +- .../arch/arm/plat-omap/include/plat/memory.h | 8 +- trunk/arch/arm/plat-omap/include/plat/smp.h | 5 +- trunk/arch/arm/plat-omap/sram.c | 2 +- trunk/arch/arm/plat-orion/time.c | 50 +- trunk/arch/arm/plat-pxa/include/plat/sdhci.h | 3 - trunk/arch/arm/plat-s3c24xx/Kconfig | 2 +- trunk/arch/arm/plat-s3c24xx/cpu.c | 8 +- trunk/arch/arm/plat-s3c24xx/gpiolib.c | 2 + .../arm/plat-s3c24xx/include/plat/s3c244x.h | 7 +- .../arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c | 6 +- .../arm/plat-s3c24xx/spi-bus1-gpd8_9_10.c | 6 +- .../arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c | 6 +- trunk/arch/arm/plat-samsung/gpio-config.c | 47 +- .../include/plat/gpio-cfg-helpers.h | 11 - .../arch/arm/plat-spear/include/plat/clock.h | 2 +- trunk/arch/arm/plat-spear/time.c | 6 +- trunk/arch/arm/plat-stmp3xxx/clock.c | 2 +- trunk/arch/arm/plat-stmp3xxx/timer.c | 5 +- trunk/arch/arm/plat-versatile/Makefile | 6 +- .../plat-versatile/include/plat/sched_clock.h | 6 - .../include/plat}/timer-sp.h | 0 trunk/arch/arm/plat-versatile/sched-clock.c | 50 +- .../arm/{common => plat-versatile}/timer-sp.c | 8 +- trunk/arch/arm/tools/mach-types | 183 +---- trunk/arch/arm/vfp/vfphw.S | 1 - trunk/arch/arm/vfp/vfpmodule.c | 24 +- trunk/arch/mips/Kconfig | 38 +- trunk/arch/mips/alchemy/common/platform.c | 2 - trunk/arch/mips/alchemy/devboards/prom.c | 5 +- trunk/arch/mips/ar7/clock.c | 9 +- trunk/arch/mips/ar7/time.c | 3 - trunk/arch/mips/bcm47xx/setup.c | 153 ++-- trunk/arch/mips/include/asm/cpu.h | 4 +- trunk/arch/mips/include/asm/elf.h | 8 +- trunk/arch/mips/include/asm/io.h | 12 +- trunk/arch/mips/include/asm/mach-ar7/ar7.h | 3 +- .../mips/include/asm/mach-bcm47xx/nvram.h | 7 - trunk/arch/mips/jz4740/board-qi_lb60.c | 4 +- trunk/arch/mips/jz4740/platform.c | 2 +- trunk/arch/mips/jz4740/prom.c | 2 +- trunk/arch/mips/kernel/cevt-r4k.c | 2 +- trunk/arch/mips/kernel/cpu-probe.c | 7 +- trunk/arch/mips/kernel/linux32.c | 13 +- trunk/arch/mips/kernel/process.c | 1 + trunk/arch/mips/kernel/prom.c | 2 +- trunk/arch/mips/kernel/smp-mt.c | 2 +- trunk/arch/mips/kernel/traps.c | 44 +- trunk/arch/mips/kernel/vpe.c | 14 +- trunk/arch/mips/lib/memset.S | 4 +- trunk/arch/mips/loongson/common/env.c | 4 +- trunk/arch/mips/math-emu/cp1emu.c | 116 +-- trunk/arch/mips/mm/dma-default.c | 4 +- trunk/arch/mips/mm/sc-mips.c | 4 - .../mips/pmc-sierra/yosemite/py-console.c | 12 +- trunk/arch/mips/sibyte/swarm/setup.c | 8 +- trunk/arch/mn10300/include/asm/syscall.h | 117 --- trunk/arch/mn10300/kernel/gdb-io-serial.c | 3 +- trunk/arch/mn10300/kernel/gdb-io-ttysm.c | 3 +- trunk/arch/mn10300/kernel/gdb-stub.c | 3 +- trunk/arch/mn10300/kernel/irq.c | 2 +- trunk/arch/mn10300/kernel/time.c | 10 +- trunk/arch/parisc/kernel/irq.c | 7 +- trunk/arch/parisc/kernel/signal.c | 9 +- trunk/arch/powerpc/mm/pgtable.c | 2 +- .../arch/powerpc/platforms/52xx/mpc52xx_gpt.c | 1 - trunk/arch/s390/kernel/nmi.c | 10 +- trunk/arch/s390/kernel/vtime.c | 19 - trunk/arch/s390/lib/delay.c | 14 +- trunk/arch/sh/Kconfig | 5 +- trunk/arch/sh/boards/mach-ecovec24/setup.c | 34 +- trunk/arch/sh/boards/mach-highlander/setup.c | 2 +- trunk/arch/sh/boards/mach-se/7206/irq.c | 2 +- trunk/arch/sh/boards/mach-se/7724/setup.c | 47 +- trunk/arch/sh/include/asm/cacheflush.h | 2 +- trunk/arch/sh/include/asm/clkdev.h | 38 +- trunk/arch/sh/include/asm/unistd_32.h | 3 +- trunk/arch/sh/include/cpu-sh4/cpu/sh7724.h | 3 - trunk/arch/sh/kernel/Makefile | 2 +- trunk/arch/sh/kernel/clkdev.c | 171 ++++ trunk/arch/sh/kernel/cpu/clock-cpg.c | 2 +- trunk/arch/sh/kernel/cpu/clock.c | 16 + trunk/arch/sh/kernel/cpu/sh2a/clock-sh7201.c | 2 +- trunk/arch/sh/kernel/cpu/sh4/clock-sh4-202.c | 5 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7343.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7366.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7722.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7723.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7724.c | 46 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7757.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7763.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7780.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7785.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7786.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/clock-shx3.c | 2 +- trunk/arch/sh/kernel/syscalls_32.S | 1 - trunk/arch/sh/mm/cache-sh4.c | 4 +- trunk/arch/sh/mm/cache-sh7705.c | 2 +- trunk/arch/sh/mm/cache.c | 14 +- trunk/arch/sh/mm/kmap.c | 2 +- trunk/arch/sparc/include/asm/openprom.h | 2 +- trunk/arch/sparc/include/asm/oplib_32.h | 35 +- trunk/arch/sparc/include/asm/oplib_64.h | 46 +- trunk/arch/sparc/kernel/leon_kernel.c | 4 +- trunk/arch/sparc/prom/Makefile | 1 + trunk/arch/sparc/prom/console_32.c | 65 +- trunk/arch/sparc/prom/console_64.c | 81 +- trunk/arch/sparc/prom/devops_32.c | 87 ++ trunk/arch/sparc/prom/devops_64.c | 67 ++ trunk/arch/sparc/prom/misc_64.c | 16 +- trunk/arch/sparc/prom/printf.c | 35 +- trunk/arch/sparc/prom/tree_32.c | 16 + trunk/arch/sparc/prom/tree_64.c | 18 + trunk/arch/tile/include/asm/signal.h | 2 +- trunk/arch/tile/kernel/compat_signal.c | 6 +- trunk/arch/tile/kernel/intvec_32.S | 24 +- trunk/arch/tile/kernel/process.c | 8 - trunk/arch/tile/kernel/signal.c | 10 +- trunk/arch/x86/Kconfig | 2 +- trunk/arch/x86/boot/compressed/misc.c | 2 +- .../x86/crypto/ghash-clmulni-intel_glue.c | 1 - trunk/arch/x86/include/asm/e820.h | 3 - trunk/arch/x86/include/asm/kvm_host.h | 2 +- trunk/arch/x86/include/asm/msr-index.h | 2 +- trunk/arch/x86/include/asm/paravirt.h | 10 +- trunk/arch/x86/include/asm/pvclock.h | 1 - trunk/arch/x86/include/asm/uv/uv_hub.h | 4 - trunk/arch/x86/include/asm/uv/uv_mmrs.h | 19 +- trunk/arch/x86/kernel/Makefile | 1 - trunk/arch/x86/kernel/apic/apic.c | 8 - trunk/arch/x86/kernel/apic/hw_nmi.c | 7 +- trunk/arch/x86/kernel/apic/io_apic.c | 4 +- trunk/arch/x86/kernel/apic/probe_64.c | 7 + trunk/arch/x86/kernel/apic/x2apic_uv_x.c | 25 +- trunk/arch/x86/kernel/cpu/perf_event.c | 20 - trunk/arch/x86/kernel/entry_32.S | 2 +- trunk/arch/x86/kernel/entry_64.S | 2 - trunk/arch/x86/kernel/head_32.S | 16 +- trunk/arch/x86/kernel/hpet.c | 26 +- trunk/arch/x86/kernel/hw_breakpoint.c | 4 - trunk/arch/x86/kernel/microcode_intel.c | 16 +- trunk/arch/x86/kernel/mmconf-fam10h_64.c | 64 +- trunk/arch/x86/kernel/pvclock.c | 5 - trunk/arch/x86/kernel/resource.c | 48 -- trunk/arch/x86/kernel/setup.c | 18 +- trunk/arch/x86/kernel/xsave.c | 3 +- trunk/arch/x86/kvm/i8259.c | 2 - trunk/arch/x86/kvm/mmu.c | 3 +- trunk/arch/x86/kvm/svm.c | 4 - trunk/arch/x86/kvm/vmx.c | 5 + trunk/arch/x86/kvm/x86.c | 11 +- trunk/arch/x86/kvm/x86.h | 5 - trunk/arch/x86/lguest/boot.c | 16 +- trunk/arch/x86/lguest/i386_head.S | 105 --- trunk/arch/x86/mm/tlb.c | 5 +- trunk/arch/x86/oprofile/op_model_amd.c | 24 +- trunk/arch/x86/pci/i386.c | 18 +- trunk/arch/x86/pci/xen.c | 27 +- trunk/arch/x86/platform/uv/tlb_uv.c | 2 +- trunk/arch/x86/platform/uv/uv_time.c | 4 +- trunk/arch/x86/vdso/Makefile | 4 +- trunk/arch/x86/xen/enlighten.c | 4 + trunk/arch/x86/xen/mmu.c | 2 + trunk/arch/x86/xen/platform-pci-unplug.c | 2 +- trunk/arch/x86/xen/setup.c | 41 +- trunk/arch/x86/xen/suspend.c | 1 - trunk/arch/x86/xen/time.c | 2 - trunk/arch/x86/xen/xen-ops.h | 2 +- trunk/block/blk-map.c | 5 +- trunk/block/blk-merge.c | 6 +- trunk/block/blk-settings.c | 51 +- trunk/block/blk-sysfs.c | 2 +- trunk/block/blk-throttle.c | 41 +- trunk/block/bsg.c | 8 - trunk/drivers/Kconfig | 2 - trunk/drivers/Makefile | 2 - trunk/drivers/acpi/ac.c | 46 +- trunk/drivers/acpi/acpica/evgpeinit.c | 3 - trunk/drivers/acpi/apei/erst.c | 34 +- trunk/drivers/acpi/apei/hest.c | 10 +- trunk/drivers/acpi/ec.c | 3 - trunk/drivers/acpi/osl.c | 113 +-- trunk/drivers/acpi/power.c | 12 +- trunk/drivers/acpi/processor_thermal.c | 9 + trunk/drivers/acpi/scan.c | 97 +-- trunk/drivers/acpi/sleep.c | 12 +- trunk/drivers/amba/bus.c | 39 - trunk/drivers/ata/Kconfig | 22 +- trunk/drivers/ata/Makefile | 2 +- trunk/drivers/ata/libata-core.c | 24 +- trunk/drivers/ata/libata-eh.c | 17 +- trunk/drivers/ata/libata-sff.c | 7 +- trunk/drivers/ata/pata_cs5536.c | 20 +- trunk/drivers/atm/adummy.c | 2 +- trunk/drivers/atm/ambassador.c | 3 +- trunk/drivers/atm/atmtcp.c | 7 +- trunk/drivers/atm/eni.c | 2 +- trunk/drivers/atm/firestream.c | 2 +- trunk/drivers/atm/fore200e.c | 14 +- trunk/drivers/atm/he.c | 2 +- trunk/drivers/atm/horizon.c | 3 +- trunk/drivers/atm/idt77252.c | 3 +- trunk/drivers/atm/iphase.c | 2 +- trunk/drivers/atm/lanai.c | 2 +- trunk/drivers/atm/nicstar.c | 3 +- trunk/drivers/atm/solos-pci.c | 8 +- trunk/drivers/atm/zatm.c | 2 +- trunk/drivers/block/amiflop.c | 2 +- trunk/drivers/block/ataflop.c | 2 +- trunk/drivers/block/cciss.c | 5 +- trunk/drivers/block/drbd/drbd_receiver.c | 14 +- trunk/drivers/block/drbd/drbd_req.h | 3 +- trunk/drivers/block/drbd/drbd_worker.c | 10 +- trunk/drivers/block/rbd.c | 748 +++++++----------- trunk/drivers/block/xen-blkfront.c | 57 +- trunk/drivers/bluetooth/ath3k.c | 4 - trunk/drivers/bluetooth/btusb.c | 12 +- trunk/drivers/bluetooth/hci_ldisc.c | 6 +- trunk/drivers/char/agp/intel-gtt.c | 17 +- trunk/drivers/char/ramoops.c | 12 +- trunk/drivers/char/tpm/tpm_tis.c | 24 - trunk/drivers/clk/Kconfig | 4 - trunk/drivers/clk/Makefile | 2 - trunk/drivers/clocksource/sh_cmt.c | 17 +- trunk/drivers/connector/connector.c | 1 - trunk/drivers/dma/Makefile | 4 +- trunk/drivers/dma/at_hdmac.c | 2 +- trunk/drivers/dma/fsldma.c | 6 +- trunk/drivers/dma/fsldma.h | 9 +- trunk/drivers/dma/imx-dma.c | 2 +- trunk/drivers/dma/imx-sdma.c | 4 +- trunk/drivers/dma/intel_mid_dma.c | 8 +- trunk/drivers/dma/ioat/Makefile | 2 +- trunk/drivers/dma/mv_xor.c | 2 +- trunk/drivers/dma/pch_dma.c | 15 +- trunk/drivers/dma/ppc4xx/adma.c | 5 +- trunk/drivers/dma/shdma.c | 1 - trunk/drivers/edac/Makefile | 8 +- trunk/drivers/edac/amd64_edac.c | 2 +- trunk/drivers/edac/edac_core.h | 6 +- trunk/drivers/edac/edac_mc.c | 10 +- trunk/drivers/edac/mce_amd_inj.c | 2 +- trunk/drivers/firewire/net.c | 160 ++-- trunk/drivers/firewire/ohci.c | 47 +- trunk/drivers/gpio/cs5535-gpio.c | 27 +- trunk/drivers/gpio/gpiolib.c | 3 - trunk/drivers/gpio/rdc321x-gpio.c | 2 +- trunk/drivers/gpu/drm/drm_crtc.c | 10 +- trunk/drivers/gpu/drm/drm_crtc_helper.c | 17 +- trunk/drivers/gpu/drm/drm_irq.c | 21 +- trunk/drivers/gpu/drm/i915/dvo_ch7017.c | 2 +- trunk/drivers/gpu/drm/i915/i915_dma.c | 26 - trunk/drivers/gpu/drm/i915/i915_gem.c | 525 +++++------- trunk/drivers/gpu/drm/i915/i915_reg.h | 11 - trunk/drivers/gpu/drm/i915/i915_suspend.c | 40 +- trunk/drivers/gpu/drm/i915/intel_acpi.c | 34 + trunk/drivers/gpu/drm/i915/intel_display.c | 104 +-- trunk/drivers/gpu/drm/i915/intel_dp.c | 208 +++-- trunk/drivers/gpu/drm/i915/intel_drv.h | 2 +- trunk/drivers/gpu/drm/i915/intel_lvds.c | 117 ++- trunk/drivers/gpu/drm/i915/intel_ringbuffer.c | 49 +- trunk/drivers/gpu/drm/i915/intel_ringbuffer.h | 5 +- trunk/drivers/gpu/drm/i915/intel_sdvo.c | 94 ++- trunk/drivers/gpu/drm/radeon/atom.c | 1 - trunk/drivers/gpu/drm/radeon/atombios_crtc.c | 7 +- trunk/drivers/gpu/drm/radeon/evergreen.c | 27 +- trunk/drivers/gpu/drm/radeon/evergreend.h | 1 - trunk/drivers/gpu/drm/radeon/r600.c | 27 +- trunk/drivers/gpu/drm/radeon/r600_cs.c | 9 +- trunk/drivers/gpu/drm/radeon/r600_reg.h | 1 - .../drivers/gpu/drm/radeon/radeon_atombios.c | 16 - trunk/drivers/gpu/drm/radeon/radeon_bios.c | 13 +- trunk/drivers/gpu/drm/radeon/radeon_combios.c | 2 +- .../gpu/drm/radeon/radeon_connectors.c | 34 - trunk/drivers/gpu/drm/radeon/radeon_device.c | 13 +- trunk/drivers/gpu/drm/radeon/radeon_drv.c | 19 - trunk/drivers/gpu/drm/radeon/radeon_fb.c | 2 +- trunk/drivers/gpu/drm/radeon/radeon_object.c | 13 +- trunk/drivers/hid/hid-core.c | 1 - trunk/drivers/hid/hid-egalax.c | 2 +- trunk/drivers/hid/hid-input.c | 21 +- trunk/drivers/hid/hid-tmff.c | 2 - trunk/drivers/hwmon/adm1026.c | 20 +- trunk/drivers/hwmon/it87.c | 61 +- trunk/drivers/hwmon/ltc4215.c | 4 +- trunk/drivers/hwmon/s3c-hwmon.c | 2 + trunk/drivers/i2c/Kconfig | 3 +- trunk/drivers/i2c/algos/Kconfig | 14 +- trunk/drivers/i2c/busses/i2c-intel-mid.c | 2 +- trunk/drivers/idle/intel_idle.c | 12 +- trunk/drivers/infiniband/core/ud_header.c | 30 + trunk/drivers/infiniband/core/uverbs_cmd.c | 99 +-- .../drivers/infiniband/core/uverbs_marshall.c | 4 - trunk/drivers/infiniband/hw/mlx4/main.c | 4 +- trunk/drivers/infiniband/hw/mlx4/qp.c | 10 +- trunk/drivers/input/evdev.c | 113 ++- trunk/drivers/input/joystick/turbografx.c | 1 - trunk/drivers/input/keyboard/Kconfig | 16 - trunk/drivers/input/keyboard/Makefile | 1 - .../drivers/input/keyboard/gpio_keys_polled.c | 261 ------ trunk/drivers/input/mouse/synaptics.h | 3 +- trunk/drivers/input/serio/gscps2.c | 2 +- trunk/drivers/input/tablet/wacom_wac.c | 12 - .../input/touchscreen/usbtouchscreen.c | 1 - trunk/drivers/isdn/gigaset/capi.c | 1 - trunk/drivers/isdn/icn/icn.c | 7 +- trunk/drivers/leds/Kconfig | 50 +- trunk/drivers/leds/led-class.c | 2 +- trunk/drivers/macintosh/Kconfig | 1 - trunk/drivers/md/dm-table.c | 10 +- trunk/drivers/md/md.c | 42 +- trunk/drivers/md/raid10.c | 2 +- trunk/drivers/media/IR/keymaps/rc-rc6-mce.c | 21 +- trunk/drivers/media/IR/lirc_dev.c | 29 +- trunk/drivers/media/IR/mceusb.c | 174 ++-- trunk/drivers/media/IR/nuvoton-cir.c | 10 +- trunk/drivers/media/IR/streamzap.c | 21 +- trunk/drivers/media/common/saa7146_hlp.c | 8 +- trunk/drivers/media/common/saa7146_video.c | 16 +- trunk/drivers/media/common/tuners/Kconfig | 8 +- trunk/drivers/media/dvb/frontends/Kconfig | 5 +- trunk/drivers/media/radio/radio-aimslab.c | 16 +- trunk/drivers/media/radio/radio-aztech.c | 6 +- trunk/drivers/media/radio/radio-cadet.c | 12 +- trunk/drivers/media/radio/radio-gemtek-pci.c | 6 +- trunk/drivers/media/radio/radio-gemtek.c | 14 +- trunk/drivers/media/radio/radio-maestro.c | 14 +- trunk/drivers/media/radio/radio-maxiradio.c | 2 +- trunk/drivers/media/radio/radio-miropcm20.c | 6 +- trunk/drivers/media/radio/radio-rtrack2.c | 10 +- trunk/drivers/media/radio/radio-sf16fmi.c | 7 +- trunk/drivers/media/radio/radio-sf16fmr2.c | 11 +- trunk/drivers/media/radio/radio-si4713.c | 5 +- trunk/drivers/media/radio/radio-tea5764.c | 49 +- trunk/drivers/media/radio/radio-terratec.c | 8 +- trunk/drivers/media/radio/radio-timb.c | 5 +- trunk/drivers/media/radio/radio-trust.c | 18 +- trunk/drivers/media/radio/radio-typhoon.c | 16 +- trunk/drivers/media/radio/radio-zoltrix.c | 30 +- trunk/drivers/media/video/Kconfig | 2 +- trunk/drivers/media/video/arv.c | 2 +- .../drivers/media/video/au0828/au0828-cards.c | 4 +- trunk/drivers/media/video/bt8xx/bttv-cards.c | 22 +- trunk/drivers/media/video/bt8xx/bttv-driver.c | 117 ++- trunk/drivers/media/video/bw-qcam.c | 2 +- trunk/drivers/media/video/c-qcam.c | 2 +- trunk/drivers/media/video/cafe_ccic.c | 5 +- .../drivers/media/video/cx18/cx18-alsa-pcm.c | 8 +- trunk/drivers/media/video/cx18/cx18-i2c.c | 8 +- trunk/drivers/media/video/cx18/cx18-streams.c | 2 +- .../media/video/cx231xx/cx231xx-cards.c | 4 +- .../media/video/cx23885/cx23885-cards.c | 2 +- .../media/video/cx23885/cx23885-video.c | 4 +- .../media/video/cx25840/cx25840-core.c | 19 +- trunk/drivers/media/video/cx88/cx88-alsa.c | 99 ++- trunk/drivers/media/video/cx88/cx88-cards.c | 16 +- trunk/drivers/media/video/cx88/cx88-video.c | 34 +- trunk/drivers/media/video/cx88/cx88.h | 6 +- .../media/video/davinci/vpfe_capture.c | 1 + .../media/video/davinci/vpif_capture.c | 1 + .../media/video/davinci/vpif_display.c | 2 +- .../drivers/media/video/em28xx/em28xx-cards.c | 18 +- .../drivers/media/video/em28xx/em28xx-video.c | 2 +- .../media/video/et61x251/et61x251_core.c | 2 +- trunk/drivers/media/video/fsl-viu.c | 2 +- trunk/drivers/media/video/gspca/sonixj.c | 416 +++++----- trunk/drivers/media/video/ivtv/ivtv-i2c.c | 22 +- trunk/drivers/media/video/meye.c | 14 +- trunk/drivers/media/video/mx2_camera.c | 2 + trunk/drivers/media/video/mxb.c | 12 +- trunk/drivers/media/video/pms.c | 2 +- .../drivers/media/video/pvrusb2/pvrusb2-hdw.c | 6 +- .../media/video/s5p-fimc/fimc-capture.c | 53 +- .../drivers/media/video/s5p-fimc/fimc-core.c | 54 +- .../drivers/media/video/s5p-fimc/fimc-core.h | 24 +- .../drivers/media/video/s5p-fimc/regs-fimc.h | 3 - .../media/video/saa7134/saa7134-cards.c | 8 +- .../media/video/saa7134/saa7134-core.c | 4 +- .../media/video/sh_mobile_ceu_camera.c | 2 +- trunk/drivers/media/video/sh_vou.c | 15 +- .../media/video/sn9c102/sn9c102_core.c | 2 +- trunk/drivers/media/video/soc_camera.c | 6 +- .../media/video/usbvision/usbvision-i2c.c | 6 +- trunk/drivers/media/video/uvc/uvc_ctrl.c | 48 +- trunk/drivers/media/video/uvc/uvc_queue.c | 133 +--- trunk/drivers/media/video/uvc/uvc_v4l2.c | 185 +++-- trunk/drivers/media/video/uvc/uvc_video.c | 3 + trunk/drivers/media/video/uvc/uvcvideo.h | 10 +- trunk/drivers/media/video/v4l2-common.c | 15 +- trunk/drivers/media/video/v4l2-dev.c | 69 +- trunk/drivers/media/video/v4l2-device.c | 1 - trunk/drivers/media/video/via-camera.c | 2 +- trunk/drivers/media/video/vino.c | 4 +- trunk/drivers/media/video/w9966.c | 2 +- trunk/drivers/media/video/wm8775.c | 104 ++- trunk/drivers/media/video/zoran/zoran_card.c | 5 +- trunk/drivers/mfd/ab8500-core.c | 2 +- trunk/drivers/mfd/wm831x-core.c | 8 +- trunk/drivers/mmc/core/core.c | 3 +- trunk/drivers/mmc/core/mmc.c | 8 +- trunk/drivers/mmc/core/sdio.c | 51 +- trunk/drivers/mmc/core/sdio_bus.c | 33 +- trunk/drivers/mmc/host/at91_mci.c | 13 +- trunk/drivers/mmc/host/atmel-mci.c | 18 +- trunk/drivers/mmc/host/mmci.c | 207 +---- trunk/drivers/mmc/host/mmci.h | 9 - trunk/drivers/mmc/host/omap_hsmmc.c | 2 +- trunk/drivers/mmc/host/sdhci-esdhc-imx.c | 12 +- trunk/drivers/mmc/host/sdhci-pci.c | 31 +- trunk/drivers/mmc/host/sdhci-pxa.c | 4 - trunk/drivers/mmc/host/sdhci.c | 54 +- trunk/drivers/mmc/host/sdhci.h | 9 +- trunk/drivers/mmc/host/ushc.c | 30 +- trunk/drivers/mtd/maps/pxa2xx-flash.c | 2 +- trunk/drivers/mtd/nand/omap2.c | 1 + trunk/drivers/mtd/ubi/io.c | 37 +- trunk/drivers/mtd/ubi/scan.c | 20 +- trunk/drivers/net/Kconfig | 6 +- trunk/drivers/net/atl1c/atl1c_main.c | 39 +- trunk/drivers/net/atlx/atl1.c | 10 - trunk/drivers/net/au1000_eth.c | 10 +- trunk/drivers/net/b44.c | 11 +- trunk/drivers/net/benet/be.h | 2 +- trunk/drivers/net/benet/be_cmds.c | 77 +- trunk/drivers/net/benet/be_main.c | 2 +- trunk/drivers/net/bnx2x/bnx2x.h | 4 +- trunk/drivers/net/bnx2x/bnx2x_cmn.c | 42 +- trunk/drivers/net/bnx2x/bnx2x_init_ops.h | 4 +- trunk/drivers/net/bonding/bond_ipv6.c | 7 +- trunk/drivers/net/bonding/bond_main.c | 61 +- trunk/drivers/net/bonding/bonding.h | 16 +- trunk/drivers/net/caif/caif_shm_u5500.c | 2 +- trunk/drivers/net/caif/caif_shmcore.c | 2 +- trunk/drivers/net/cnic.c | 10 +- trunk/drivers/net/cxgb4/t4_hw.c | 2 +- trunk/drivers/net/cxgb4vf/cxgb4vf_main.c | 88 +-- trunk/drivers/net/cxgb4vf/t4vf_hw.c | 94 +-- trunk/drivers/net/ehea/ehea_ethtool.c | 16 - trunk/drivers/net/ehea/ehea_main.c | 25 +- trunk/drivers/net/enic/enic_main.c | 3 +- trunk/drivers/net/epic100.c | 4 +- trunk/drivers/net/hamachi.c | 4 +- trunk/drivers/net/ifb.c | 2 - trunk/drivers/net/ixgbe/ixgbe_main.c | 3 - trunk/drivers/net/mlx4/fw.c | 4 - trunk/drivers/net/pch_gbe/pch_gbe_main.c | 6 +- trunk/drivers/net/pch_gbe/pch_gbe_param.c | 8 +- trunk/drivers/net/pcmcia/axnet_cs.c | 1 - trunk/drivers/net/pcmcia/pcnet_cs.c | 1 + trunk/drivers/net/phy/Kconfig | 2 +- trunk/drivers/net/phy/icplus.c | 59 +- trunk/drivers/net/ppp_generic.c | 52 +- trunk/drivers/net/pppoe.c | 2 +- trunk/drivers/net/qlge/qlge.h | 1 - trunk/drivers/net/qlge/qlge_main.c | 1 - trunk/drivers/net/qlge/qlge_mpi.c | 12 +- trunk/drivers/net/r8169.c | 26 +- trunk/drivers/net/sfc/efx.c | 43 +- trunk/drivers/net/sfc/net_driver.h | 2 - trunk/drivers/net/sfc/nic.c | 6 - trunk/drivers/net/skfp/skfddi.c | 2 +- trunk/drivers/net/starfire.c | 2 +- trunk/drivers/net/stmmac/stmmac_main.c | 4 +- trunk/drivers/net/sundance.c | 4 +- trunk/drivers/net/tehuti.c | 4 +- trunk/drivers/net/tg3.c | 2 +- trunk/drivers/net/tulip/dmfe.c | 6 +- trunk/drivers/net/typhoon.c | 1 + trunk/drivers/net/ucc_geth.h | 3 +- trunk/drivers/net/usb/asix.c | 4 - trunk/drivers/net/usb/hso.c | 14 +- trunk/drivers/net/usb/mcs7830.c | 14 +- trunk/drivers/net/veth.c | 4 +- trunk/drivers/net/wan/hd64572.c | 5 +- trunk/drivers/net/wan/x25_asy.c | 13 +- trunk/drivers/net/wireless/ath/ath5k/base.c | 13 +- .../net/wireless/ath/ath9k/ar9003_eeprom.c | 73 +- .../net/wireless/ath/ath9k/ar9003_eeprom.h | 9 +- trunk/drivers/net/wireless/ath/ath9k/ath9k.h | 6 +- trunk/drivers/net/wireless/ath/ath9k/eeprom.c | 6 +- trunk/drivers/net/wireless/ath/ath9k/eeprom.h | 27 +- .../net/wireless/ath/ath9k/eeprom_def.c | 23 +- .../drivers/net/wireless/ath/ath9k/hif_usb.c | 7 - trunk/drivers/net/wireless/ath/ath9k/htc.h | 3 - .../net/wireless/ath/ath9k/htc_drv_init.c | 6 - .../net/wireless/ath/ath9k/htc_drv_main.c | 4 +- trunk/drivers/net/wireless/ath/ath9k/hw.c | 3 +- trunk/drivers/net/wireless/ath/ath9k/init.c | 9 +- trunk/drivers/net/wireless/ath/ath9k/mac.c | 3 +- trunk/drivers/net/wireless/ath/ath9k/main.c | 28 +- trunk/drivers/net/wireless/ath/ath9k/recv.c | 11 +- trunk/drivers/net/wireless/ath/ath9k/reg.h | 6 +- trunk/drivers/net/wireless/ath/ath9k/xmit.c | 22 +- trunk/drivers/net/wireless/ath/carl9170/fw.c | 3 +- .../drivers/net/wireless/ath/carl9170/main.c | 5 +- trunk/drivers/net/wireless/ath/carl9170/tx.c | 2 +- trunk/drivers/net/wireless/b43/sdio.c | 1 - .../drivers/net/wireless/hostap/hostap_main.c | 1 + trunk/drivers/net/wireless/iwlwifi/iwl-1000.c | 2 - trunk/drivers/net/wireless/iwlwifi/iwl-6000.c | 12 - .../net/wireless/iwlwifi/iwl-agn-eeprom.c | 88 +-- .../net/wireless/iwlwifi/iwl-agn-lib.c | 6 - trunk/drivers/net/wireless/iwlwifi/iwl-core.h | 1 - .../drivers/net/wireless/iwlwifi/iwl-eeprom.h | 25 +- trunk/drivers/net/wireless/libertas/cfg.c | 2 +- trunk/drivers/net/wireless/libertas/if_sdio.c | 1 + trunk/drivers/net/wireless/libertas/if_spi.c | 1 + trunk/drivers/net/wireless/libertas/main.c | 2 + trunk/drivers/net/wireless/orinoco/main.c | 18 +- .../drivers/net/wireless/orinoco/orinoco_cs.c | 14 +- trunk/drivers/net/wireless/orinoco/scan.c | 8 - trunk/drivers/net/wireless/orinoco/scan.h | 1 - .../net/wireless/orinoco/spectrum_cs.c | 14 +- trunk/drivers/net/wireless/orinoco/wext.c | 4 +- trunk/drivers/net/wireless/p54/p54usb.c | 6 - trunk/drivers/net/wireless/rt2x00/rt2800pci.c | 1 - trunk/drivers/net/wireless/rt2x00/rt2x00.h | 1 - trunk/drivers/net/wireless/rt2x00/rt2x00dev.c | 9 +- trunk/drivers/net/xen-netfront.c | 4 +- trunk/drivers/net/yellowfin.c | 4 +- trunk/drivers/of/of_i2c.c | 2 +- trunk/drivers/parisc/dino.c | 1 + trunk/drivers/parisc/eisa.c | 3 +- trunk/drivers/parisc/gsc.c | 3 +- trunk/drivers/parisc/iosapic.c | 8 - trunk/drivers/parisc/led.c | 17 +- trunk/drivers/parisc/superio.c | 3 +- trunk/drivers/pci/bus.c | 81 +- trunk/drivers/pci/dmar.c | 5 - trunk/drivers/pci/hotplug/pciehp_acpi.c | 3 +- trunk/drivers/pci/quirks.c | 26 - trunk/drivers/pcmcia/Makefile | 3 +- trunk/drivers/pcmcia/sa1100_generic.c | 3 - trunk/drivers/pcmcia/sa1100_generic.h | 1 - trunk/drivers/pcmcia/sa1100_nanoengine.c | 219 ----- trunk/drivers/pcmcia/soc_common.c | 129 ++- trunk/drivers/platform/x86/asus-laptop.c | 97 +-- trunk/drivers/platform/x86/eeepc-wmi.c | 4 +- trunk/drivers/platform/x86/hp-wmi.c | 2 - trunk/drivers/platform/x86/ibm_rtl.c | 34 +- trunk/drivers/platform/x86/intel_ips.c | 36 +- trunk/drivers/platform/x86/intel_ips.h | 21 - trunk/drivers/platform/x86/msi-wmi.c | 16 +- trunk/drivers/platform/x86/thinkpad_acpi.c | 1 + trunk/drivers/platform/x86/toshiba_acpi.c | 1 - trunk/drivers/platform/x86/wmi.c | 2 +- trunk/drivers/pnp/pnpacpi/core.c | 2 +- trunk/drivers/regulator/core.c | 30 +- trunk/drivers/regulator/mc13783-regulator.c | 4 +- trunk/drivers/regulator/tps6586x-regulator.c | 33 +- trunk/drivers/regulator/twl-regulator.c | 6 +- trunk/drivers/rtc/rtc-rs5c372.c | 2 +- trunk/drivers/rtc/rtc-sa1100.c | 161 +--- trunk/drivers/s390/cio/css.c | 2 +- trunk/drivers/s390/cio/qdio_thinint.c | 2 +- trunk/drivers/s390/scsi/zfcp_erp.c | 11 +- trunk/drivers/s390/scsi/zfcp_fsf.c | 11 +- trunk/drivers/s390/scsi/zfcp_scsi.c | 7 +- trunk/drivers/scsi/bfa/bfa_fcs.c | 4 +- trunk/drivers/scsi/bfa/bfa_fcs_fcpim.c | 6 +- trunk/drivers/scsi/bfa/bfa_fcs_lport.c | 10 +- trunk/drivers/scsi/bfa/bfa_fcs_rport.c | 6 +- trunk/drivers/scsi/bfa/bfa_ioc.c | 8 +- trunk/drivers/scsi/bfa/bfa_svc.c | 28 +- trunk/drivers/scsi/bfa/bfad.c | 8 +- trunk/drivers/scsi/bfa/bfad_drv.h | 2 +- trunk/drivers/scsi/bfa/bfad_im.c | 21 +- trunk/drivers/scsi/hpsa.c | 8 +- trunk/drivers/scsi/osd/osd_initiator.c | 4 +- trunk/drivers/scsi/pmcraid.c | 4 +- trunk/drivers/scsi/pmcraid.h | 6 +- trunk/drivers/scsi/qla2xxx/qla_def.h | 1 + trunk/drivers/scsi/qla2xxx/qla_iocb.c | 1 - trunk/drivers/scsi/qla2xxx/qla_isr.c | 5 +- trunk/drivers/scsi/qla2xxx/qla_nx.c | 1 - trunk/drivers/scsi/qla2xxx/qla_os.c | 3 +- trunk/drivers/scsi/qla2xxx/qla_version.h | 4 +- trunk/drivers/scsi/scsi_error.c | 26 +- trunk/drivers/scsi/scsi_lib.c | 8 +- trunk/drivers/serial/8250.c | 2 +- trunk/drivers/serial/amba-pl011.c | 592 +------------- trunk/drivers/serial/kgdboc.c | 3 +- trunk/drivers/serial/mfd.c | 24 +- trunk/drivers/sh/intc/core.c | 1 - trunk/drivers/spi/atmel_spi.c | 6 +- trunk/drivers/spi/coldfire_qspi.c | 2 +- trunk/drivers/spi/dw_spi.c | 5 - trunk/drivers/spi/mpc52xx_spi.c | 2 +- trunk/drivers/spi/omap2_mcspi.c | 39 - trunk/drivers/spi/spi.c | 3 +- trunk/drivers/spi/spi_fsl_espi.c | 35 +- trunk/drivers/ssb/b43_pci_bridge.c | 1 - trunk/drivers/staging/asus_oled/asus_oled.c | 8 +- .../staging/batman-adv/hard-interface.c | 19 +- .../staging/batman-adv/soft-interface.c | 14 +- trunk/drivers/staging/brcm80211/README | 8 +- trunk/drivers/staging/brcm80211/TODO | 2 - trunk/drivers/staging/comedi/drivers/usbdux.c | 4 +- trunk/drivers/staging/cx25821/cx25821-video.c | 8 +- trunk/drivers/staging/cx25821/cx25821-video.h | 2 +- trunk/drivers/staging/easycap/easycap.h | 1 - trunk/drivers/staging/frontier/tranzport.c | 2 +- trunk/drivers/staging/go7007/go7007-driver.c | 2 +- .../staging/iio/accel/adis16220_core.c | 2 +- .../intel_sst/intel_sst_stream_encoded.c | 2 +- trunk/drivers/staging/line6/control.c | 204 ++--- trunk/drivers/staging/line6/midi.c | 4 +- trunk/drivers/staging/line6/pcm.c | 4 +- trunk/drivers/staging/line6/pod.c | 32 +- trunk/drivers/staging/line6/toneport.c | 4 +- trunk/drivers/staging/line6/variax.c | 12 +- trunk/drivers/staging/quickstart/quickstart.c | 10 +- trunk/drivers/staging/rt2860/usb_main_dev.c | 1 - trunk/drivers/staging/rtl8187se/r8185b_init.c | 30 +- trunk/drivers/staging/rtl8712/usb_halinit.c | 2 +- .../staging/samsung-laptop/samsung-laptop.c | 2 +- trunk/drivers/staging/speakup/fakekey.c | 1 + trunk/drivers/staging/spectra/ffsport.c | 2 +- trunk/drivers/staging/tm6000/tm6000-cards.c | 4 +- trunk/drivers/staging/udlfb/udlfb.c | 2 +- trunk/drivers/staging/winbond/sysdef.h | 3 - trunk/drivers/staging/zram/zram_drv.c | 6 + trunk/drivers/staging/zram/zram_sysfs.c | 4 +- trunk/drivers/tty/n_gsm.c | 6 +- trunk/drivers/tty/tty_io.c | 13 +- trunk/drivers/tty/tty_ldisc.c | 2 - trunk/drivers/uio/uio.c | 2 +- trunk/drivers/uio/uio_cif.c | 2 +- trunk/drivers/uio/uio_netx.c | 2 +- trunk/drivers/usb/atm/ueagle-atm.c | 22 +- trunk/drivers/usb/atm/usbatm.c | 15 +- trunk/drivers/usb/core/Kconfig | 12 +- trunk/drivers/usb/core/hcd.c | 2 - trunk/drivers/usb/gadget/composite.c | 18 +- trunk/drivers/usb/host/ehci-pci.c | 12 - trunk/drivers/usb/host/xhci-hub.c | 7 - trunk/drivers/usb/host/xhci-mem.c | 169 ---- trunk/drivers/usb/host/xhci.c | 18 - trunk/drivers/usb/host/xhci.h | 26 - trunk/drivers/usb/misc/uss720.c | 4 +- trunk/drivers/usb/misc/yurex.c | 1 - trunk/drivers/usb/musb/musb_core.c | 3 - trunk/drivers/usb/musb/musb_gadget.c | 124 +-- trunk/drivers/usb/serial/ftdi_sio.c | 3 - trunk/drivers/usb/serial/ftdi_sio_ids.h | 9 - trunk/drivers/usb/serial/usb-serial.c | 3 - trunk/drivers/usb/storage/unusual_devs.h | 7 - trunk/drivers/vhost/net.c | 5 +- trunk/drivers/vhost/vhost.c | 3 +- trunk/drivers/video/backlight/cr_bllcd.c | 1 - trunk/drivers/video/da8xx-fb.c | 14 +- trunk/drivers/video/fbcmap.c | 1 - trunk/drivers/video/fbmem.c | 2 +- trunk/drivers/video/geode/lxfb.h | 4 +- trunk/drivers/video/geode/lxfb_ops.c | 20 +- trunk/drivers/video/imxfb.c | 9 +- trunk/drivers/video/modedb.c | 1 - trunk/drivers/video/omap/Kconfig | 4 +- trunk/drivers/video/omap2/vram.c | 4 +- trunk/drivers/video/sh_mobile_hdmi.c | 16 +- trunk/drivers/video/sh_mobile_lcdcfb.c | 30 +- trunk/drivers/watchdog/Kconfig | 3 - trunk/drivers/watchdog/bcm63xx_wdt.c | 42 +- trunk/drivers/watchdog/gef_wdt.c | 1 - trunk/drivers/watchdog/iTCO_wdt.c | 8 +- trunk/drivers/watchdog/rdc321x_wdt.c | 2 +- trunk/drivers/xen/balloon.c | 12 +- trunk/drivers/xen/events.c | 109 +-- trunk/drivers/xen/manage.c | 1 - trunk/fs/autofs4/root.c | 12 +- trunk/fs/btrfs/compression.c | 15 +- trunk/fs/btrfs/ctree.h | 6 +- trunk/fs/btrfs/disk-io.c | 41 +- trunk/fs/btrfs/export.c | 78 +- trunk/fs/btrfs/extent-tree.c | 77 +- trunk/fs/btrfs/extent_io.c | 77 +- trunk/fs/btrfs/extent_io.h | 3 - trunk/fs/btrfs/file.c | 99 +-- trunk/fs/btrfs/free-space-cache.c | 12 +- trunk/fs/btrfs/inode.c | 299 ++----- trunk/fs/btrfs/ioctl.c | 87 +- trunk/fs/btrfs/ioctl.h | 14 +- trunk/fs/btrfs/ordered-data.c | 67 -- trunk/fs/btrfs/ordered-data.h | 3 - trunk/fs/btrfs/orphan.c | 6 +- trunk/fs/btrfs/super.c | 43 +- trunk/fs/btrfs/transaction.c | 5 +- trunk/fs/btrfs/tree-log.c | 21 +- trunk/fs/btrfs/volumes.c | 20 +- trunk/fs/btrfs/volumes.h | 2 - trunk/fs/ceph/dir.c | 7 +- trunk/fs/ceph/file.c | 39 +- trunk/fs/ceph/ioctl.h | 2 +- trunk/fs/ceph/locks.c | 94 ++- trunk/fs/ceph/mds_client.c | 41 +- trunk/fs/ceph/mds_client.h | 31 +- trunk/fs/cifs/Kconfig | 8 - trunk/fs/cifs/Makefile | 4 +- trunk/fs/cifs/README | 9 - trunk/fs/cifs/cifs_fs_sb.h | 1 - trunk/fs/cifs/cifsacl.c | 51 +- trunk/fs/cifs/cifsacl.h | 4 + trunk/fs/cifs/cifsfs.c | 5 +- trunk/fs/cifs/cifsglob.h | 12 +- trunk/fs/cifs/cifsproto.h | 11 +- trunk/fs/cifs/cifssmb.c | 183 +++-- trunk/fs/cifs/connect.c | 47 +- trunk/fs/cifs/dns_resolve.c | 2 +- trunk/fs/cifs/file.c | 6 +- trunk/fs/cifs/fscache.c | 12 +- trunk/fs/cifs/inode.c | 57 +- trunk/fs/cifs/readdir.c | 41 +- trunk/fs/cifs/xattr.c | 55 +- trunk/fs/compat.c | 28 +- trunk/fs/exec.c | 41 +- trunk/fs/ext4/ext4.h | 1 - trunk/fs/ext4/inode.c | 5 +- trunk/fs/ext4/namei.c | 2 +- trunk/fs/ext4/resize.c | 5 - trunk/fs/ext4/super.c | 14 +- trunk/fs/fuse/file.c | 72 +- trunk/fs/gfs2/quota.c | 15 +- trunk/fs/ioprio.c | 31 +- trunk/fs/logfs/journal.c | 2 +- trunk/fs/logfs/readwrite.c | 3 - trunk/fs/namei.c | 3 - trunk/fs/nfs/dir.c | 142 ++-- trunk/fs/nfs/direct.c | 2 +- trunk/fs/nfs/file.c | 2 - trunk/fs/nfs/inode.c | 1 - trunk/fs/nfs/internal.h | 9 - trunk/fs/nfs/mount_clnt.c | 4 +- trunk/fs/nfs/nfs2xdr.c | 4 +- trunk/fs/nfs/nfs3xdr.c | 4 +- trunk/fs/nfs/nfs4proc.c | 9 - trunk/fs/nfs/nfs4xdr.c | 6 +- trunk/fs/nfs/pagelist.c | 4 +- trunk/fs/nfs/read.c | 1 + trunk/fs/nfs/super.c | 4 + trunk/fs/nfs/write.c | 3 +- trunk/fs/nfsd/nfs3xdr.c | 6 +- trunk/fs/nfsd/xdr4.h | 21 +- trunk/fs/nilfs2/dat.c | 2 +- trunk/fs/nilfs2/gcinode.c | 9 + trunk/fs/nilfs2/ioctl.c | 16 +- trunk/fs/notify/fanotify/fanotify.c | 6 +- trunk/fs/notify/fanotify/fanotify_user.c | 81 +- trunk/fs/notify/inotify/inotify_user.c | 1 - trunk/fs/ocfs2/aops.c | 7 +- trunk/fs/ocfs2/aops.h | 23 +- trunk/fs/ocfs2/cluster/heartbeat.c | 14 +- trunk/fs/ocfs2/cluster/masklog.c | 3 +- trunk/fs/ocfs2/cluster/masklog.h | 15 +- trunk/fs/ocfs2/dcache.c | 1 + trunk/fs/ocfs2/dir.c | 4 - trunk/fs/ocfs2/dlm/dlmdomain.c | 2 +- trunk/fs/ocfs2/dlm/dlmmaster.c | 40 +- trunk/fs/ocfs2/file.c | 15 +- trunk/fs/ocfs2/ocfs2.h | 6 +- trunk/fs/ocfs2/ocfs2_fs.h | 2 +- trunk/fs/ocfs2/stack_user.c | 2 +- trunk/fs/pipe.c | 14 +- trunk/fs/proc/base.c | 2 +- trunk/fs/proc/vmcore.c | 2 +- trunk/fs/reiserfs/xattr_acl.c | 6 +- trunk/fs/splice.c | 24 +- trunk/fs/xfs/linux-2.6/xfs_aops.c | 94 ++- trunk/fs/xfs/linux-2.6/xfs_buf.c | 35 +- trunk/fs/xfs/xfs_bmap.c | 85 +- trunk/fs/xfs/xfs_bmap.h | 5 - trunk/fs/xfs/xfs_dfrag.c | 13 - trunk/fs/xfs/xfs_error.c | 3 - trunk/fs/xfs/xfs_error.h | 5 +- trunk/fs/xfs/xfs_inode_item.c | 31 +- trunk/fs/xfs/xfs_rename.c | 1 - trunk/include/acpi/video.h | 5 +- trunk/include/drm/i915_drm.h | 2 - trunk/include/linux/acpi.h | 2 +- trunk/include/linux/amba/bus.h | 8 - trunk/include/linux/amba/serial.h | 22 - trunk/include/linux/atmdev.h | 6 +- trunk/include/linux/binfmts.h | 5 - trunk/include/linux/blkdev.h | 10 +- trunk/include/linux/bootmem.h | 2 - trunk/include/linux/ceph/libceph.h | 6 +- trunk/include/linux/clkdev.h | 36 - trunk/include/linux/cnt32_to_63.h | 20 +- trunk/include/linux/cpu.h | 5 + trunk/include/linux/crash_dump.h | 9 +- trunk/include/linux/dmaengine.h | 13 +- trunk/include/linux/dmar.h | 17 +- trunk/include/linux/fanotify.h | 10 +- trunk/include/linux/fs.h | 1 - trunk/include/linux/fsnotify.h | 3 + trunk/include/linux/fsnotify_backend.h | 2 +- trunk/include/linux/gfp.h | 4 +- trunk/include/linux/gpio_keys.h | 2 - trunk/include/linux/hw_breakpoint.h | 4 - trunk/include/linux/input.h | 31 +- trunk/include/linux/ioport.h | 2 +- trunk/include/linux/kthread.h | 45 +- trunk/include/linux/memory_hotplug.h | 6 - trunk/include/linux/mfd/wm8994/pdata.h | 2 +- trunk/include/linux/mmc/host.h | 1 - trunk/include/linux/netlink.h | 2 +- trunk/include/linux/nfs_fs.h | 1 - trunk/include/linux/nfs_page.h | 1 - trunk/include/linux/nfs_xdr.h | 1 - trunk/include/linux/node.h | 5 + trunk/include/linux/pci_ids.h | 2 - trunk/include/linux/perf_event.h | 31 +- trunk/include/linux/pipe_fs_i.h | 1 - trunk/include/linux/pm_runtime.h | 3 +- trunk/include/linux/sched.h | 2 +- trunk/include/linux/snmp.h | 1 - trunk/include/linux/ssb/ssb_driver_gige.h | 17 +- trunk/include/linux/taskstats.h | 3 +- trunk/include/linux/tty.h | 1 - trunk/include/linux/uio_driver.h | 2 +- trunk/include/linux/unaligned/packed_struct.h | 6 +- trunk/include/linux/usb.h | 4 - trunk/include/linux/video_output.h | 15 - trunk/include/linux/vmalloc.h | 2 + trunk/include/media/saa7146.h | 2 +- trunk/include/media/v4l2-common.h | 16 +- trunk/include/media/v4l2-device.h | 2 - trunk/include/media/wm8775.h | 3 + trunk/include/net/af_unix.h | 2 - trunk/include/net/flow.h | 1 + trunk/include/net/ip6_route.h | 10 - trunk/include/net/mac80211.h | 28 +- trunk/include/net/pkt_cls.h | 4 +- trunk/include/net/sch_generic.h | 6 +- trunk/include/net/sock.h | 7 +- trunk/include/sound/sh_fsi.h | 6 +- trunk/include/xen/events.h | 7 +- trunk/include/xen/interface/io/ring.h | 11 +- trunk/include/xen/interface/physdev.h | 10 - trunk/init/do_mounts.c | 2 +- trunk/kernel/exit.c | 9 - trunk/kernel/fork.c | 1 - trunk/kernel/hw_breakpoint.c | 3 +- trunk/kernel/irq/proc.c | 2 +- trunk/kernel/irq_work.c | 4 +- trunk/kernel/kthread.c | 11 - trunk/kernel/module.c | 12 - trunk/kernel/perf_event.c | 130 +-- trunk/kernel/posix-cpu-timers.c | 12 +- trunk/kernel/power/hibernate.c | 22 +- trunk/kernel/power/suspend.c | 5 +- trunk/kernel/power/swap.c | 55 +- trunk/kernel/power/user.c | 4 +- trunk/kernel/printk.c | 4 +- trunk/kernel/resource.c | 104 ++- trunk/kernel/sched.c | 287 ++----- trunk/kernel/sched_fair.c | 8 +- trunk/kernel/taskstats.c | 57 +- trunk/kernel/time/clocksource.c | 1 - trunk/kernel/timer.c | 8 +- trunk/kernel/trace/ring_buffer.c | 9 +- trunk/kernel/trace/trace.c | 29 +- trunk/kernel/user.c | 1 - trunk/kernel/watchdog.c | 3 +- trunk/kernel/workqueue.c | 7 +- trunk/lib/debug_locks.c | 2 + trunk/mm/compaction.c | 1 + trunk/mm/filemap.c | 5 - trunk/mm/hugetlb.c | 3 +- trunk/mm/ksm.c | 7 +- trunk/mm/memcontrol.c | 19 +- trunk/mm/memory-failure.c | 8 +- trunk/mm/memory_hotplug.c | 31 +- trunk/mm/mempolicy.c | 3 - trunk/mm/migrate.c | 2 - trunk/mm/mmap.c | 16 +- trunk/mm/nommu.c | 28 +- trunk/mm/page-writeback.c | 2 +- trunk/mm/page_alloc.c | 19 +- trunk/mm/percpu.c | 2 +- trunk/mm/slub.c | 4 +- trunk/mm/truncate.c | 4 - trunk/mm/vmalloc.c | 28 +- trunk/mm/vmscan.c | 7 - trunk/mm/vmstat.c | 4 +- trunk/net/atm/atm_sysfs.c | 3 +- trunk/net/atm/resources.c | 7 +- trunk/net/atm/resources.h | 2 +- trunk/net/bluetooth/rfcomm/core.c | 1 - trunk/net/bluetooth/sco.c | 6 +- trunk/net/bridge/br_multicast.c | 30 +- trunk/net/bridge/br_stp_bpdu.c | 2 - trunk/net/can/bcm.c | 4 +- trunk/net/ceph/Makefile | 22 + trunk/net/ceph/messenger.c | 8 +- trunk/net/ceph/pagevec.c | 15 +- trunk/net/core/fib_rules.c | 3 +- trunk/net/core/filter.c | 19 +- trunk/net/core/sock.c | 47 +- trunk/net/core/timestamping.c | 6 +- trunk/net/dccp/input.c | 3 +- trunk/net/decnet/af_decnet.c | 2 - trunk/net/econet/af_econet.c | 99 +-- trunk/net/ipv4/fib_frontend.c | 10 +- trunk/net/ipv4/inet_hashtables.c | 3 +- trunk/net/ipv4/proc.c | 1 - trunk/net/ipv4/route.c | 15 +- trunk/net/ipv4/sysctl_net_ipv4.c | 6 +- trunk/net/ipv4/tcp.c | 2 +- trunk/net/ipv4/tcp_ipv4.c | 8 +- trunk/net/ipv4/tcp_minisocks.c | 2 +- trunk/net/ipv4/tcp_output.c | 42 +- trunk/net/ipv4/udp.c | 1 - trunk/net/ipv4/udplite.c | 1 - trunk/net/ipv6/addrconf.c | 8 +- trunk/net/ipv6/ip6_output.c | 12 +- trunk/net/ipv6/ip6_tunnel.c | 7 - trunk/net/ipv6/route.c | 7 +- trunk/net/ipv6/sit.c | 3 +- trunk/net/ipv6/udp.c | 1 - trunk/net/ipv6/udplite.c | 1 - trunk/net/ipv6/xfrm6_output.c | 16 +- trunk/net/irda/af_irda.c | 18 +- trunk/net/l2tp/l2tp_ip.c | 6 +- trunk/net/llc/af_llc.c | 5 +- trunk/net/mac80211/Kconfig | 2 +- trunk/net/mac80211/ibss.c | 4 - trunk/net/mac80211/rx.c | 11 +- trunk/net/mac80211/tx.c | 28 +- trunk/net/mac80211/work.c | 5 +- trunk/net/sched/sch_sfq.c | 20 +- trunk/net/sctp/socket.c | 10 +- trunk/net/socket.c | 15 - trunk/net/sunrpc/clnt.c | 24 +- trunk/net/sunrpc/svc_xprt.c | 9 +- trunk/net/unix/af_unix.c | 37 +- trunk/net/unix/garbage.c | 9 +- trunk/net/x25/x25_link.c | 1 - trunk/net/xfrm/xfrm_state.c | 2 +- trunk/scripts/kconfig/expr.h | 1 - trunk/scripts/kconfig/lkc.h | 1 - trunk/scripts/kconfig/menu.c | 25 - trunk/scripts/kconfig/zconf.gperf | 1 - trunk/scripts/kconfig/zconf.hash.c_shipped | 122 ++- trunk/scripts/kconfig/zconf.tab.c_shipped | 570 +++++++------ trunk/scripts/kconfig/zconf.y | 21 +- trunk/scripts/recordmcount.c | 7 +- trunk/scripts/recordmcount.h | 7 +- trunk/scripts/tags.sh | 4 +- trunk/security/integrity/ima/ima_policy.c | 2 - trunk/security/keys/request_key.c | 1 + trunk/sound/core/oss/pcm_oss.c | 19 +- trunk/sound/core/pcm_lib.c | 10 +- trunk/sound/oss/soundcard.c | 4 +- trunk/sound/pci/hda/hda_codec.c | 57 +- trunk/sound/pci/hda/hda_eld.c | 24 +- trunk/sound/pci/hda/hda_intel.c | 2 - trunk/sound/pci/hda/patch_conexant.c | 35 +- trunk/sound/pci/hda/patch_hdmi.c | 1 + trunk/sound/pci/hda/patch_realtek.c | 140 +--- trunk/sound/pci/hda/patch_sigmatel.c | 7 +- trunk/sound/soc/atmel/sam9g20_wm8731.c | 9 +- trunk/sound/soc/atmel/snd-soc-afeb9260.c | 1 + trunk/sound/soc/codecs/max98088.c | 13 +- trunk/sound/soc/codecs/stac9766.c | 1 - trunk/sound/soc/codecs/tlv320aic3x.c | 6 +- trunk/sound/soc/codecs/tpa6130a2.c | 4 +- trunk/sound/soc/codecs/wm8523.c | 10 +- trunk/sound/soc/codecs/wm8580.c | 10 +- trunk/sound/soc/codecs/wm8731.c | 2 +- trunk/sound/soc/codecs/wm8741.c | 10 +- trunk/sound/soc/codecs/wm8753.c | 226 ++++-- trunk/sound/soc/codecs/wm8904.c | 42 +- trunk/sound/soc/codecs/wm8940.c | 1 - trunk/sound/soc/codecs/wm8955.c | 34 +- trunk/sound/soc/codecs/wm8960.c | 4 +- trunk/sound/soc/codecs/wm8961.c | 4 +- trunk/sound/soc/codecs/wm8962.c | 47 +- trunk/sound/soc/codecs/wm8971.c | 1 - trunk/sound/soc/codecs/wm8994.c | 4 - trunk/sound/soc/codecs/wm9081.c | 1 - trunk/sound/soc/codecs/wm9090.c | 18 +- trunk/sound/soc/codecs/wm_hubs.c | 2 +- trunk/sound/soc/davinci/davinci-vcif.c | 3 - trunk/sound/soc/ep93xx/simone.c | 18 +- trunk/sound/soc/fsl/efika-audio-fabric.c | 1 - trunk/sound/soc/fsl/mpc5200_dma.c | 1 + trunk/sound/soc/fsl/mpc8610_hpcd.c | 1 - trunk/sound/soc/fsl/p1022_ds.c | 1 - trunk/sound/soc/fsl/pcm030-audio-fabric.c | 1 - trunk/sound/soc/imx/imx-ssi.c | 15 +- trunk/sound/soc/imx/phycore-ac97.c | 28 +- trunk/sound/soc/nuc900/nuc900-ac97.c | 17 +- trunk/sound/soc/nuc900/nuc900-audio.h | 2 - trunk/sound/soc/nuc900/nuc900-pcm.c | 11 +- trunk/sound/soc/omap/Kconfig | 2 +- trunk/sound/soc/omap/omap3pandora.c | 1 - trunk/sound/soc/omap/osk5912.c | 11 +- trunk/sound/soc/pxa/Kconfig | 1 - trunk/sound/soc/s3c24xx/smdk_spdif.c | 4 +- trunk/sound/soc/s6000/s6000-i2s.c | 2 +- trunk/sound/soc/s6000/s6000-pcm.c | 2 +- trunk/sound/soc/s6000/s6105-ipcam.c | 2 +- trunk/sound/soc/sh/fsi.c | 25 +- trunk/sound/soc/sh/ssi.c | 2 +- trunk/sound/soc/soc-core.c | 14 +- trunk/sound/soc/soc-dapm.c | 3 - trunk/tools/perf/builtin-buildid-list.c | 3 +- trunk/tools/perf/builtin-probe.c | 5 - trunk/tools/perf/builtin-record.c | 23 +- trunk/tools/perf/util/header.c | 21 +- trunk/tools/perf/util/hist.c | 2 +- trunk/tools/perf/util/probe-event.c | 15 +- trunk/tools/perf/util/probe-finder.c | 85 +- trunk/tools/perf/util/string.c | 2 +- trunk/tools/perf/util/symbol.c | 67 +- trunk/tools/perf/util/symbol.h | 2 - trunk/usr/initramfs_data.S | 5 +- 1321 files changed, 12209 insertions(+), 17809 deletions(-) delete mode 100644 trunk/Documentation/ABI/testing/sysfs-bus-rbd delete mode 100644 trunk/Documentation/ABI/testing/sysfs-platform-eeepc-wmi delete mode 100644 trunk/Documentation/arm/swp_emulation create mode 100644 trunk/Documentation/driver-model/interface.txt delete mode 100644 trunk/arch/arm/boot/compressed/head-shmobile.S rename trunk/{drivers/clk => arch/arm/common}/clkdev.c (93%) delete mode 100644 trunk/arch/arm/configs/at91rm9200_defconfig create mode 100644 trunk/arch/arm/configs/at91rm9200dk_defconfig create mode 100644 trunk/arch/arm/configs/at91rm9200ek_defconfig create mode 100644 trunk/arch/arm/configs/ateb9200_defconfig create mode 100644 trunk/arch/arm/configs/carmeva_defconfig create mode 100644 trunk/arch/arm/configs/cpuat91_defconfig create mode 100644 trunk/arch/arm/configs/csb337_defconfig create mode 100644 trunk/arch/arm/configs/csb637_defconfig create mode 100644 trunk/arch/arm/configs/ecbat91_defconfig create mode 100644 trunk/arch/arm/configs/kafa_defconfig create mode 100644 trunk/arch/arm/configs/kb9202_defconfig create mode 100644 trunk/arch/arm/configs/onearm_defconfig create mode 100644 trunk/arch/arm/configs/picotux200_defconfig create mode 100644 trunk/arch/arm/configs/yl9200_defconfig delete mode 100644 trunk/arch/arm/include/asm/entry-macro-multi.S delete mode 100644 trunk/arch/arm/include/asm/hardware/entry-macro-gic.S delete mode 100644 trunk/arch/arm/include/asm/sched_clock.h create mode 100644 trunk/arch/arm/include/asm/smp_mpidr.h delete mode 100644 trunk/arch/arm/kernel/sched_clock.c delete mode 100644 trunk/arch/arm/kernel/smp_tlb.c delete mode 100644 trunk/arch/arm/kernel/swp_emulate.c rename trunk/arch/arm/mach-at91/{board-rm9200dk.c => board-dk.c} (98%) rename trunk/arch/arm/mach-at91/{board-rm9200ek.c => board-ek.c} (98%) delete mode 100644 trunk/arch/arm/mach-at91/include/mach/stamp9g20.h delete mode 100644 trunk/arch/arm/mach-sa1100/include/mach/nanoengine.h delete mode 100644 trunk/arch/arm/mach-sa1100/nanoengine.c delete mode 100644 trunk/arch/arm/mach-sa1100/pci-nanoengine.c delete mode 100644 trunk/arch/arm/mach-shmobile/include/mach/head-ap4evb.txt delete mode 100644 trunk/arch/arm/mach-shmobile/include/mach/zboot.h delete mode 100644 trunk/arch/arm/mach-shmobile/include/mach/zboot_macros.h delete mode 100644 trunk/arch/arm/mach-vexpress/hotplug.c delete mode 100644 trunk/arch/arm/mm/idmap.c delete mode 100644 trunk/arch/arm/plat-versatile/include/plat/sched_clock.h rename trunk/arch/arm/{include/asm/hardware => plat-versatile/include/plat}/timer-sp.h (100%) rename trunk/arch/arm/{common => plat-versatile}/timer-sp.c (95%) delete mode 100644 trunk/arch/mn10300/include/asm/syscall.h create mode 100644 trunk/arch/sh/kernel/clkdev.c create mode 100644 trunk/arch/sparc/prom/devops_32.c create mode 100644 trunk/arch/sparc/prom/devops_64.c delete mode 100644 trunk/arch/x86/kernel/resource.c delete mode 100644 trunk/drivers/clk/Kconfig delete mode 100644 trunk/drivers/clk/Makefile delete mode 100644 trunk/drivers/input/keyboard/gpio_keys_polled.c delete mode 100644 trunk/drivers/pcmcia/sa1100_nanoengine.c delete mode 100644 trunk/drivers/platform/x86/intel_ips.h delete mode 100644 trunk/include/linux/clkdev.h diff --git a/[refs] b/[refs] index aafa37569843..188f922dbdc8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 28cdac6690cb113856293bf79b40de33dbd8f974 +refs/heads/master: 4d6b7a779be34e1df296abc1dc555134a8cf34af diff --git a/trunk/Documentation/ABI/testing/sysfs-bus-rbd b/trunk/Documentation/ABI/testing/sysfs-bus-rbd deleted file mode 100644 index 90a87e2a572b..000000000000 --- a/trunk/Documentation/ABI/testing/sysfs-bus-rbd +++ /dev/null @@ -1,83 +0,0 @@ -What: /sys/bus/rbd/ -Date: November 2010 -Contact: Yehuda Sadeh , - Sage Weil -Description: - -Being used for adding and removing rbd block devices. - -Usage: [snap name] - - $ echo "192.168.0.1 name=admin rbd foo" > /sys/bus/rbd/add - -The snapshot name can be "-" or omitted to map the image read/write. A -will be assigned for any registered block device. If snapshot is used, it will -be mapped read-only. - -Removal of a device: - - $ echo > /sys/bus/rbd/remove - -Entries under /sys/bus/rbd/devices// --------------------------------------------- - -client_id - - The ceph unique client id that was assigned for this specific session. - -major - - The block device major number. - -name - - The name of the rbd image. - -pool - - The pool where this rbd image resides. The pool-name pair is unique - per rados system. - -size - - The size (in bytes) of the mapped block device. - -refresh - - Writing to this file will reread the image header data and set - all relevant datastructures accordingly. - -current_snap - - The current snapshot for which the device is mapped. - -create_snap - - Create a snapshot: - - $ echo > /sys/bus/rbd/devices//snap_create - -rollback_snap - - Rolls back data to the specified snapshot. This goes over the entire - list of rados blocks and sends a rollback command to each. - - $ echo > /sys/bus/rbd/devices//snap_rollback - -snap_* - - A directory per each snapshot - - -Entries under /sys/bus/rbd/devices//snap_ -------------------------------------------------------------- - -id - - The rados internal snapshot id assigned for this snapshot - -size - - The size of the image when this snapshot was taken. - - diff --git a/trunk/Documentation/ABI/testing/sysfs-platform-asus-laptop b/trunk/Documentation/ABI/testing/sysfs-platform-asus-laptop index 41ff8ae4dee0..1d775390e856 100644 --- a/trunk/Documentation/ABI/testing/sysfs-platform-asus-laptop +++ b/trunk/Documentation/ABI/testing/sysfs-platform-asus-laptop @@ -47,20 +47,6 @@ Date: January 2007 KernelVersion: 2.6.20 Contact: "Corentin Chary" Description: - Control the wlan device. 1 means on, 0 means off. + Control the bluetooth device. 1 means on, 0 means off. This may control the led, the device or both. Users: Lapsus - -What: /sys/devices/platform/asus_laptop/wimax -Date: October 2010 -KernelVersion: 2.6.37 -Contact: "Corentin Chary" -Description: - Control the wimax device. 1 means on, 0 means off. - -What: /sys/devices/platform/asus_laptop/wwan -Date: October 2010 -KernelVersion: 2.6.37 -Contact: "Corentin Chary" -Description: - Control the wwan (3G) device. 1 means on, 0 means off. diff --git a/trunk/Documentation/ABI/testing/sysfs-platform-eeepc-wmi b/trunk/Documentation/ABI/testing/sysfs-platform-eeepc-wmi deleted file mode 100644 index e4b5fef5fadd..000000000000 --- a/trunk/Documentation/ABI/testing/sysfs-platform-eeepc-wmi +++ /dev/null @@ -1,10 +0,0 @@ -What: /sys/devices/platform/eeepc-wmi/cpufv -Date: Oct 2010 -KernelVersion: 2.6.37 -Contact: "Corentin Chary" -Description: - Change CPU clock configuration (write-only). - There are three available clock configuration: - * 0 -> Super Performance Mode - * 1 -> High Performance Mode - * 2 -> Power Saving Mode diff --git a/trunk/Documentation/accounting/getdelays.c b/trunk/Documentation/accounting/getdelays.c index e9c77788a39d..a2976a6de033 100644 --- a/trunk/Documentation/accounting/getdelays.c +++ b/trunk/Documentation/accounting/getdelays.c @@ -516,7 +516,6 @@ int main(int argc, char *argv[]) default: fprintf(stderr, "Unknown nla_type %d\n", na->nla_type); - case TASKSTATS_TYPE_NULL: break; } na = (struct nlattr *) (GENLMSG_DATA(&msg) + len); diff --git a/trunk/Documentation/arm/00-INDEX b/trunk/Documentation/arm/00-INDEX index 91c24a1e8a9e..ecf7d04bca26 100644 --- a/trunk/Documentation/arm/00-INDEX +++ b/trunk/Documentation/arm/00-INDEX @@ -34,5 +34,3 @@ memory.txt - description of the virtual memory layout nwfpe/ - NWFPE floating point emulator documentation -swp_emulation - - SWP/SWPB emulation handler/logging description diff --git a/trunk/Documentation/arm/swp_emulation b/trunk/Documentation/arm/swp_emulation deleted file mode 100644 index af903d22fd93..000000000000 --- a/trunk/Documentation/arm/swp_emulation +++ /dev/null @@ -1,27 +0,0 @@ -Software emulation of deprecated SWP instruction (CONFIG_SWP_EMULATE) ---------------------------------------------------------------------- - -ARMv6 architecture deprecates use of the SWP/SWPB instructions, and recommeds -moving to the load-locked/store-conditional instructions LDREX and STREX. - -ARMv7 multiprocessing extensions introduce the ability to disable these -instructions, triggering an undefined instruction exception when executed. -Trapped instructions are emulated using an LDREX/STREX or LDREXB/STREXB -sequence. If a memory access fault (an abort) occurs, a segmentation fault is -signalled to the triggering process. - -/proc/cpu/swp_emulation holds some statistics/information, including the PID of -the last process to trigger the emulation to be invocated. For example: ---- -Emulated SWP: 12 -Emulated SWPB: 0 -Aborted SWP{B}: 1 -Last process: 314 ---- - -NOTE: when accessing uncached shared regions, LDREX/STREX rely on an external -transaction monitoring block called a global monitor to maintain update -atomicity. If your system does not implement a global monitor, this option can -cause programs that perform SWP operations to uncached memory to deadlock, as -the STREX operation will always fail. - diff --git a/trunk/Documentation/driver-model/interface.txt b/trunk/Documentation/driver-model/interface.txt new file mode 100644 index 000000000000..c66912bfe866 --- /dev/null +++ b/trunk/Documentation/driver-model/interface.txt @@ -0,0 +1,129 @@ + +Device Interfaces + +Introduction +~~~~~~~~~~~~ + +Device interfaces are the logical interfaces of device classes that correlate +directly to userspace interfaces, like device nodes. + +Each device class may have multiple interfaces through which you can +access the same device. An input device may support the mouse interface, +the 'evdev' interface, and the touchscreen interface. A SCSI disk would +support the disk interface, the SCSI generic interface, and possibly a raw +device interface. + +Device interfaces are registered with the class they belong to. As devices +are added to the class, they are added to each interface registered with +the class. The interface is responsible for determining whether the device +supports the interface or not. + + +Programming Interface +~~~~~~~~~~~~~~~~~~~~~ + +struct device_interface { + char * name; + rwlock_t lock; + u32 devnum; + struct device_class * devclass; + + struct list_head node; + struct driver_dir_entry dir; + + int (*add_device)(struct device *); + int (*add_device)(struct intf_data *); +}; + +int interface_register(struct device_interface *); +void interface_unregister(struct device_interface *); + + +An interface must specify the device class it belongs to. It is added +to that class's list of interfaces on registration. + + +Interfaces can be added to a device class at any time. Whenever it is +added, each device in the class is passed to the interface's +add_device callback. When an interface is removed, each device is +removed from the interface. + + +Devices +~~~~~~~ +Once a device is added to a device class, it is added to each +interface that is registered with the device class. The class +is expected to place a class-specific data structure in +struct device::class_data. The interface can use that (along with +other fields of struct device) to determine whether or not the driver +and/or device support that particular interface. + + +Data +~~~~ + +struct intf_data { + struct list_head node; + struct device_interface * intf; + struct device * dev; + u32 intf_num; +}; + +int interface_add_data(struct interface_data *); + +The interface is responsible for allocating and initializing a struct +intf_data and calling interface_add_data() to add it to the device's list +of interfaces it belongs to. This list will be iterated over when the device +is removed from the class (instead of all possible interfaces for a class). +This structure should probably be embedded in whatever per-device data +structure the interface is allocating anyway. + +Devices are enumerated within the interface. This happens in interface_add_data() +and the enumerated value is stored in the struct intf_data for that device. + +sysfs +~~~~~ +Each interface is given a directory in the directory of the device +class it belongs to: + +Interfaces get a directory in the class's directory as well: + + class/ + `-- input + |-- devices + |-- drivers + |-- mouse + `-- evdev + +When a device is added to the interface, a symlink is created that points +to the device's directory in the physical hierarchy: + + class/ + `-- input + |-- devices + | `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/ + |-- drivers + | `-- usb:usb_mouse -> ../../../bus/drivers/usb_mouse/ + |-- mouse + | `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/ + `-- evdev + `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/ + + +Future Plans +~~~~~~~~~~~~ +A device interface is correlated directly with a userspace interface +for a device, specifically a device node. For instance, a SCSI disk +exposes at least two interfaces to userspace: the standard SCSI disk +interface and the SCSI generic interface. It might also export a raw +device interface. + +Many interfaces have a major number associated with them and each +device gets a minor number. Or, multiple interfaces might share one +major number, and each will receive a range of minor numbers (like in +the case of input devices). + +These major and minor numbers could be stored in the interface +structure. Major and minor allocations could happen when the interface +is registered with the class, or via a helper function. + diff --git a/trunk/Documentation/edac.txt b/trunk/Documentation/edac.txt index 9ee774de57cd..0b875e8da969 100644 --- a/trunk/Documentation/edac.txt +++ b/trunk/Documentation/edac.txt @@ -196,7 +196,7 @@ csrow3. The representation of the above is reflected in the directory tree in EDAC's sysfs interface. Starting in directory /sys/devices/system/edac/mc each memory controller will be represented -by its own 'mcX' directory, where 'X' is the index of the MC. +by its own 'mcX' directory, where 'X" is the index of the MC. ..../edac/mc/ @@ -207,7 +207,7 @@ by its own 'mcX' directory, where 'X' is the index of the MC. .... Under each 'mcX' directory each 'csrowX' is again represented by a -'csrowX', where 'X' is the csrow index: +'csrowX', where 'X" is the csrow index: .../mc/mc0/ @@ -232,7 +232,7 @@ EDAC control and attribute files. In 'mcX' directories are EDAC control and attribute files for -this 'X' instance of the memory controllers: +this 'X" instance of the memory controllers: Counter reset control file: @@ -343,7 +343,7 @@ Sdram memory scrubbing rate: 'csrowX' DIRECTORIES In the 'csrowX' directories are EDAC control and attribute files for -this 'X' instance of csrow: +this 'X" instance of csrow: Total Uncorrectable Errors count attribute file: diff --git a/trunk/Documentation/filesystems/Locking b/trunk/Documentation/filesystems/Locking index 33fa3e5d38fd..a91f30890011 100644 --- a/trunk/Documentation/filesystems/Locking +++ b/trunk/Documentation/filesystems/Locking @@ -18,6 +18,7 @@ prototypes: char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen); locking rules: + none have BKL dcache_lock rename_lock ->d_lock may block d_revalidate: no no no yes d_hash no no no yes @@ -41,23 +42,18 @@ ata *); int (*rename) (struct inode *, struct dentry *, struct inode *, struct dentry *); int (*readlink) (struct dentry *, char __user *,int); - void * (*follow_link) (struct dentry *, struct nameidata *); - void (*put_link) (struct dentry *, struct nameidata *, void *); + int (*follow_link) (struct dentry *, struct nameidata *); void (*truncate) (struct inode *); int (*permission) (struct inode *, int, struct nameidata *); - int (*check_acl)(struct inode *, int); int (*setattr) (struct dentry *, struct iattr *); int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *); int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); ssize_t (*listxattr) (struct dentry *, char *, size_t); int (*removexattr) (struct dentry *, const char *); - void (*truncate_range)(struct inode *, loff_t, loff_t); - long (*fallocate)(struct inode *inode, int mode, loff_t offset, loff_t len); - int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len); locking rules: - all may block + all may block, none have BKL i_mutex(inode) lookup: yes create: yes @@ -70,24 +66,19 @@ rmdir: yes (both) (see below) rename: yes (all) (see below) readlink: no follow_link: no -put_link: no truncate: yes (see below) setattr: yes permission: no -check_acl: no getattr: no setxattr: yes getxattr: no listxattr: no removexattr: yes -truncate_range: yes -fallocate: no -fiemap: no Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on victim. cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem. ->truncate() is never called directly - it's a callback, not a -method. It's called by vmtruncate() - deprecated library function used by +method. It's called by vmtruncate() - library function normally used by ->setattr(). Locking information above applies to that call (i.e. is inherited from ->setattr() - vmtruncate() is used when ATTR_SIZE had been passed). @@ -100,7 +91,7 @@ prototypes: struct inode *(*alloc_inode)(struct super_block *sb); void (*destroy_inode)(struct inode *); void (*dirty_inode) (struct inode *); - int (*write_inode) (struct inode *, struct writeback_control *wbc); + int (*write_inode) (struct inode *, int); int (*drop_inode) (struct inode *); void (*evict_inode) (struct inode *); void (*put_super) (struct super_block *); @@ -114,10 +105,10 @@ prototypes: int (*show_options)(struct seq_file *, struct vfsmount *); ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); - int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t); locking rules: All may block [not true, see below] + None have BKL s_umount alloc_inode: destroy_inode: @@ -136,7 +127,6 @@ umount_begin: no show_options: no (namespace_sem) quota_read: no (see below) quota_write: no (see below) -bdev_try_to_free_page: no (see below) ->statfs() has s_umount (shared) when called by ustat(2) (native or compat), but that's an accident of bad API; s_umount is used to pin @@ -149,25 +139,19 @@ be the only ones operating on the quota file by the quota code (via dqio_sem) (unless an admin really wants to screw up something and writes to quota files with quotas on). For other details about locking see also dquot_operations section. -->bdev_try_to_free_page is called from the ->releasepage handler of -the block device inode. See there for more details. --------------------------- file_system_type --------------------------- prototypes: int (*get_sb) (struct file_system_type *, int, const char *, void *, struct vfsmount *); - struct dentry *(*mount) (struct file_system_type *, int, - const char *, void *); void (*kill_sb) (struct super_block *); locking rules: - may block -get_sb yes -mount yes -kill_sb yes + may block BKL +get_sb yes no +kill_sb yes no ->get_sb() returns error or 0 with locked superblock attached to the vfsmount (exclusive on ->s_umount). -->mount() returns ERR_PTR or the root dentry. ->kill_sb() takes a write-locked superblock, does all shutdown work on it, unlocks and drops the reference. @@ -189,38 +173,28 @@ prototypes: sector_t (*bmap)(struct address_space *, sector_t); int (*invalidatepage) (struct page *, unsigned long); int (*releasepage) (struct page *, int); - void (*freepage)(struct page *); int (*direct_IO)(int, struct kiocb *, const struct iovec *iov, loff_t offset, unsigned long nr_segs); - int (*get_xip_mem)(struct address_space *, pgoff_t, int, void **, - unsigned long *); - int (*migratepage)(struct address_space *, struct page *, struct page *); - int (*launder_page)(struct page *); - int (*is_partially_uptodate)(struct page *, read_descriptor_t *, unsigned long); - int (*error_remove_page)(struct address_space *, struct page *); + int (*launder_page) (struct page *); locking rules: - All except set_page_dirty and freepage may block - - PageLocked(page) i_mutex -writepage: yes, unlocks (see below) -readpage: yes, unlocks -sync_page: maybe -writepages: -set_page_dirty no -readpages: -write_begin: locks the page yes -write_end: yes, unlocks yes -bmap: -invalidatepage: yes -releasepage: yes -freepage: yes -direct_IO: -get_xip_mem: maybe -migratepage: yes (both) -launder_page: yes -is_partially_uptodate: yes -error_remove_page: yes + All except set_page_dirty may block + + BKL PageLocked(page) i_mutex +writepage: no yes, unlocks (see below) +readpage: no yes, unlocks +sync_page: no maybe +writepages: no +set_page_dirty no no +readpages: no +write_begin: no locks the page yes +write_end: no yes, unlocks yes +perform_write: no n/a yes +bmap: no +invalidatepage: no yes +releasepage: no yes +direct_IO: no +launder_page: no yes ->write_begin(), ->write_end(), ->sync_page() and ->readpage() may be called from the request handler (/dev/loop). @@ -300,8 +274,9 @@ under spinlock (it cannot block) and is sometimes called with the page not locked. ->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some -filesystems and by the swapper. The latter will eventually go away. Please, -keep it that way and don't breed new callers. +filesystems and by the swapper. The latter will eventually go away. All +instances do not actually need the BKL. Please, keep it that way and don't +breed new callers. ->invalidatepage() is called when the filesystem must attempt to drop some or all of the buffers from the page when it is being truncated. It @@ -313,46 +288,53 @@ buffers from the page in preparation for freeing it. It returns zero to indicate that the buffers are (or may be) freeable. If ->releasepage is zero, the kernel assumes that the fs has no private interest in the buffers. - ->freepage() is called when the kernel is done dropping the page -from the page cache. - ->launder_page() may be called prior to releasing a page if it is still found to be dirty. It returns zero if the page was successfully cleaned, or an error value if not. Note that in order to prevent the page getting mapped back in and redirtied, it needs to be kept locked across the entire operation. + Note: currently almost all instances of address_space methods are +using BKL for internal serialization and that's one of the worst sources +of contention. Normally they are calling library functions (in fs/buffer.c) +and pass foo_get_block() as a callback (on local block-based filesystems, +indeed). BKL is not needed for library stuff and is usually taken by +foo_get_block(). It's an overkill, since block bitmaps can be protected by +internal fs locking and real critical areas are much smaller than the areas +filesystems protect now. + ----------------------- file_lock_operations ------------------------------ prototypes: + void (*fl_insert)(struct file_lock *); /* lock insertion callback */ + void (*fl_remove)(struct file_lock *); /* lock removal callback */ void (*fl_copy_lock)(struct file_lock *, struct file_lock *); void (*fl_release_private)(struct file_lock *); locking rules: - file_lock_lock may block -fl_copy_lock: yes no -fl_release_private: maybe no + BKL may block +fl_insert: yes no +fl_remove: yes no +fl_copy_lock: yes no +fl_release_private: yes yes ----------------------- lock_manager_operations --------------------------- prototypes: int (*fl_compare_owner)(struct file_lock *, struct file_lock *); void (*fl_notify)(struct file_lock *); /* unblock callback */ - int (*fl_grant)(struct file_lock *, struct file_lock *, int); void (*fl_release_private)(struct file_lock *); void (*fl_break)(struct file_lock *); /* break_lease callback */ - int (*fl_mylease)(struct file_lock *, struct file_lock *); - int (*fl_change)(struct file_lock **, int); locking rules: - file_lock_lock may block -fl_compare_owner: yes no -fl_notify: yes no -fl_grant: no no -fl_release_private: maybe no -fl_break: yes no -fl_mylease: yes no -fl_change yes no - + BKL may block +fl_compare_owner: yes no +fl_notify: yes no +fl_release_private: yes yes +fl_break: yes no + + Currently only NFSD and NLM provide instances of this class. None of the +them block. If you have out-of-tree instances - please, show up. Locking +in that area will change. --------------------------- buffer_head ----------------------------------- prototypes: void (*b_end_io)(struct buffer_head *bh, int uptodate); @@ -377,17 +359,17 @@ prototypes: void (*swap_slot_free_notify) (struct block_device *, unsigned long); locking rules: - bd_mutex -open: yes -release: yes -ioctl: no -compat_ioctl: no -direct_access: no -media_changed: no -unlock_native_capacity: no -revalidate_disk: no -getgeo: no -swap_slot_free_notify: no (see below) + BKL bd_mutex +open: no yes +release: no yes +ioctl: no no +compat_ioctl: no no +direct_access: no no +media_changed: no no +unlock_native_capacity: no no +revalidate_disk: no no +getgeo: no no +swap_slot_free_notify: no no (see below) media_changed, unlock_native_capacity and revalidate_disk are called only from check_disk_change(). @@ -426,21 +408,34 @@ prototypes: unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*check_flags)(int); - int (*flock) (struct file *, int, struct file_lock *); - ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, - size_t, unsigned int); - ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, - size_t, unsigned int); - int (*setlease)(struct file *, long, struct file_lock **); }; locking rules: - All may block except for ->setlease. - No VFS locks held on entry except for ->fsync and ->setlease. - -->fsync() has i_mutex on inode. - -->setlease has the file_list_lock held and must not sleep. + All may block. + BKL +llseek: no (see below) +read: no +aio_read: no +write: no +aio_write: no +readdir: no +poll: no +unlocked_ioctl: no +compat_ioctl: no +mmap: no +open: no +flush: no +release: no +fsync: no (see below) +aio_fsync: no +fasync: no +lock: yes +readv: no +writev: no +sendfile: no +sendpage: no +get_unmapped_area: no +check_flags: no ->llseek() locking has moved from llseek to the individual llseek implementations. If your fs is not using generic_file_llseek, you @@ -450,10 +445,17 @@ mutex or just to use i_size_read() instead. Note: this does not protect the file->f_pos against concurrent modifications since this is something the userspace has to take care about. -->fasync() is responsible for maintaining the FASYNC bit in filp->f_flags. -Most instances call fasync_helper(), which does that maintenance, so it's -not normally something one needs to worry about. Return values > 0 will be -mapped to zero in the VFS layer. +Note: ext2_release() was *the* source of contention on fs-intensive +loads and dropping BKL on ->release() helps to get rid of that (we still +grab BKL for cases when we close a file that had been opened r/w, but that +can and should be done using the internal locking with smaller critical areas). +Current worst offender is ext2_get_block()... + +->fasync() is called without BKL protection, and is responsible for +maintaining the FASYNC bit in filp->f_flags. Most instances call +fasync_helper(), which does that maintenance, so it's not normally +something one needs to worry about. Return values > 0 will be mapped to +zero in the VFS layer. ->readdir() and ->ioctl() on directories must be changed. Ideally we would move ->readdir() to inode_operations and use a separate method for directory @@ -464,6 +466,8 @@ components. And there are other reasons why the current interface is a mess... ->read on directories probably must go away - we should just enforce -EISDIR in sys_read() and friends. +->fsync() has i_mutex on inode. + --------------------------- dquot_operations ------------------------------- prototypes: int (*write_dquot) (struct dquot *); @@ -498,12 +502,12 @@ prototypes: int (*access)(struct vm_area_struct *, unsigned long, void*, int, int); locking rules: - mmap_sem PageLocked(page) -open: yes -close: yes -fault: yes can return with page locked -page_mkwrite: yes can return with page locked -access: yes + BKL mmap_sem PageLocked(page) +open: no yes +close: no yes +fault: no yes can return with page locked +page_mkwrite: no yes can return with page locked +access: no yes ->fault() is called when a previously not present pte is about to be faulted in. The filesystem must find and return the page associated @@ -530,3 +534,6 @@ VM_IO | VM_PFNMAP VMAs. (if you break something or notice that it is broken and do not fix it yourself - at least put it here) + +ipc/shm.c::shm_delete() - may need BKL. +->read() and ->write() in many drivers are (probably) missing BKL. diff --git a/trunk/Documentation/filesystems/vfs.txt b/trunk/Documentation/filesystems/vfs.txt index 20899e095e7e..ed7e5efc06d8 100644 --- a/trunk/Documentation/filesystems/vfs.txt +++ b/trunk/Documentation/filesystems/vfs.txt @@ -534,7 +534,6 @@ struct address_space_operations { sector_t (*bmap)(struct address_space *, sector_t); int (*invalidatepage) (struct page *, unsigned long); int (*releasepage) (struct page *, int); - void (*freepage)(struct page *); ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, loff_t offset, unsigned long nr_segs); struct page* (*get_xip_page)(struct address_space *, sector_t, @@ -661,10 +660,11 @@ struct address_space_operations { releasepage: releasepage is called on PagePrivate pages to indicate that the page should be freed if possible. ->releasepage should remove any private data from the page and clear the - PagePrivate flag. If releasepage() fails for some reason, it must - indicate failure with a 0 return value. - releasepage() is used in two distinct though related cases. The - first is when the VM finds a clean page with no active users and + PagePrivate flag. It may also remove the page from the + address_space. If this fails for some reason, it may indicate + failure with a 0 return value. + This is used in two distinct though related cases. The first + is when the VM finds a clean page with no active users and wants to make it a free page. If ->releasepage succeeds, the page will be removed from the address_space and become free. @@ -679,12 +679,6 @@ struct address_space_operations { need to ensure this. Possibly it can clear the PageUptodate bit if it cannot free private data yet. - freepage: freepage is called once the page is no longer visible in - the page cache in order to allow the cleanup of any private - data. Since it may be called by the memory reclaimer, it - should not assume that the original address_space mapping still - exists, and it should not block. - direct_IO: called by the generic read/write routines to perform direct_IO - that is IO requests which bypass the page cache and transfer data directly between the storage and the diff --git a/trunk/Documentation/kernel-parameters.txt b/trunk/Documentation/kernel-parameters.txt index 01ece1b9213e..cdd2a6e8a3b7 100644 --- a/trunk/Documentation/kernel-parameters.txt +++ b/trunk/Documentation/kernel-parameters.txt @@ -1759,7 +1759,7 @@ and is between 256 and 4096 characters. It is defined in the file nousb [USB] Disable the USB subsystem - nowatchdog [KNL] Disable the lockup detector (NMI watchdog). + nowatchdog [KNL] Disable the lockup detector. nowb [ARM] @@ -2175,6 +2175,11 @@ and is between 256 and 4096 characters. It is defined in the file reset_devices [KNL] Force drivers to reset the underlying device during initialization. + resource_alloc_from_bottom + Allocate new resources from the beginning of available + space, not the end. If you need to use this, please + report a bug. + resume= [SWSUSP] Specify the partition device for software suspend diff --git a/trunk/Documentation/networking/ip-sysctl.txt b/trunk/Documentation/networking/ip-sysctl.txt index 3c5e465296e1..fe95105992c5 100644 --- a/trunk/Documentation/networking/ip-sysctl.txt +++ b/trunk/Documentation/networking/ip-sysctl.txt @@ -144,7 +144,6 @@ tcp_adv_win_scale - INTEGER Count buffering overhead as bytes/2^tcp_adv_win_scale (if tcp_adv_win_scale > 0) or bytes-bytes/2^(-tcp_adv_win_scale), if it is <= 0. - Possible values are [-31, 31], inclusive. Default: 2 tcp_allowed_congestion_control - STRING diff --git a/trunk/Documentation/power/runtime_pm.txt b/trunk/Documentation/power/runtime_pm.txt index 41cc7b30d7dd..489e9bacd165 100644 --- a/trunk/Documentation/power/runtime_pm.txt +++ b/trunk/Documentation/power/runtime_pm.txt @@ -379,8 +379,8 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h: zero) bool pm_runtime_suspended(struct device *dev); - - return true if the device's runtime PM status is 'suspended' and its - 'power.disable_depth' field is equal to zero, or false otherwise + - return true if the device's runtime PM status is 'suspended', or false + otherwise void pm_runtime_allow(struct device *dev); - set the power.runtime_auto flag for the device and decrease its usage diff --git a/trunk/Documentation/scsi/scsi_mid_low_api.txt b/trunk/Documentation/scsi/scsi_mid_low_api.txt index df322c103466..570ef2b3d79b 100644 --- a/trunk/Documentation/scsi/scsi_mid_low_api.txt +++ b/trunk/Documentation/scsi/scsi_mid_low_api.txt @@ -1044,9 +1044,9 @@ Details: /** - * queuecommand - queue scsi command, invoke scp->scsi_done on completion - * @shost: pointer to the scsi host object + * queuecommand - queue scsi command, invoke 'done' on completion * @scp: pointer to scsi command object + * @done: function pointer to be invoked on completion * * Returns 0 on success. * @@ -1074,45 +1074,42 @@ Details: * * Other types of errors that are detected immediately may be * flagged by setting scp->result to an appropriate value, - * invoking the scp->scsi_done callback, and then returning 0 - * from this function. If the command is not performed - * immediately (and the LLD is starting (or will start) the given - * command) then this function should place 0 in scp->result and - * return 0. + * invoking the 'done' callback, and then returning 0 from this + * function. If the command is not performed immediately (and the + * LLD is starting (or will start) the given command) then this + * function should place 0 in scp->result and return 0. * * Command ownership. If the driver returns zero, it owns the - * command and must take responsibility for ensuring the - * scp->scsi_done callback is executed. Note: the driver may - * call scp->scsi_done before returning zero, but after it has - * called scp->scsi_done, it may not return any value other than - * zero. If the driver makes a non-zero return, it must not - * execute the command's scsi_done callback at any time. - * - * Locks: up to and including 2.6.36, struct Scsi_Host::host_lock - * held on entry (with "irqsave") and is expected to be - * held on return. From 2.6.37 onwards, queuecommand is - * called without any locks held. + * command and must take responsibility for ensuring the 'done' + * callback is executed. Note: the driver may call done before + * returning zero, but after it has called done, it may not + * return any value other than zero. If the driver makes a + * non-zero return, it must not execute the command's done + * callback at any time. + * + * Locks: struct Scsi_Host::host_lock held on entry (with "irqsave") + * and is expected to be held on return. * * Calling context: in interrupt (soft irq) or process context * - * Notes: This function should be relatively fast. Normally it - * will not wait for IO to complete. Hence the scp->scsi_done - * callback is invoked (often directly from an interrupt service - * routine) some time after this function has returned. In some - * cases (e.g. pseudo adapter drivers that manufacture the - * response to a SCSI INQUIRY) the scp->scsi_done callback may be - * invoked before this function returns. If the scp->scsi_done - * callback is not invoked within a certain period the SCSI mid - * level will commence error processing. If a status of CHECK - * CONDITION is placed in "result" when the scp->scsi_done - * callback is invoked, then the LLD driver should perform - * autosense and fill in the struct scsi_cmnd::sense_buffer + * Notes: This function should be relatively fast. Normally it will + * not wait for IO to complete. Hence the 'done' callback is invoked + * (often directly from an interrupt service routine) some time after + * this function has returned. In some cases (e.g. pseudo adapter + * drivers that manufacture the response to a SCSI INQUIRY) + * the 'done' callback may be invoked before this function returns. + * If the 'done' callback is not invoked within a certain period + * the SCSI mid level will commence error processing. + * If a status of CHECK CONDITION is placed in "result" when the + * 'done' callback is invoked, then the LLD driver should + * perform autosense and fill in the struct scsi_cmnd::sense_buffer * array. The scsi_cmnd::sense_buffer array is zeroed prior to * the mid level queuing a command to an LLD. * * Defined in: LLD **/ - int queuecommand(struct Scsi_Host *shost, struct scsi_cmnd * scp) + int queuecommand(struct scsi_cmnd * scp, + void (*done)(struct scsi_cmnd *)) /** diff --git a/trunk/Documentation/trace/postprocess/trace-vmscan-postprocess.pl b/trunk/Documentation/trace/postprocess/trace-vmscan-postprocess.pl index 12cecc83cd91..b3e73ddb1567 100644 --- a/trunk/Documentation/trace/postprocess/trace-vmscan-postprocess.pl +++ b/trunk/Documentation/trace/postprocess/trace-vmscan-postprocess.pl @@ -373,18 +373,9 @@ sub process_events { print " $regex_lru_isolate/o\n"; next; } - my $isolate_mode = $1; my $nr_scanned = $4; my $nr_contig_dirty = $7; - - # To closer match vmstat scanning statistics, only count isolate_both - # and isolate_inactive as scanning. isolate_active is rotation - # isolate_inactive == 0 - # isolate_active == 1 - # isolate_both == 2 - if ($isolate_mode != 1) { - $perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned; - } + $perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned; $perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty; } elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") { $details = $5; diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS index 7585e9dd835b..b3be8b3d0437 100644 --- a/trunk/MAINTAINERS +++ b/trunk/MAINTAINERS @@ -405,7 +405,7 @@ S: Supported F: drivers/usb/gadget/amd5536udc.* AMD GEODE PROCESSOR/CHIPSET SUPPORT -P: Andres Salomon +P: Jordan Crouse L: linux-geode@lists.infradead.org (moderated for non-subscribers) W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html S: Supported @@ -559,14 +559,14 @@ W: http://maxim.org.za/at91_26.html S: Maintained ARM/BCMRING ARM ARCHITECTURE -M: Jiandong Zheng +M: Leo Chen M: Scott Branden L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained F: arch/arm/mach-bcmring ARM/BCMRING MTD NAND DRIVER -M: Jiandong Zheng +M: Leo Chen M: Scott Branden L: linux-mtd@lists.infradead.org S: Maintained @@ -792,14 +792,11 @@ S: Maintained ARM/NOMADIK ARCHITECTURE M: Alessandro Rubini -M: Linus Walleij M: STEricsson L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained F: arch/arm/mach-nomadik/ F: arch/arm/plat-nomadik/ -F: drivers/i2c/busses/i2c-nomadik.c -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT M: Nelson Castillo @@ -818,7 +815,7 @@ F: drivers/mmc/host/msm_sdcc.c F: drivers/mmc/host/msm_sdcc.h F: drivers/serial/msm_serial.h F: drivers/serial/msm_serial.c -T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git +T: git git://codeaurora.org/quic/kernel/dwalker/linux-msm.git S: Maintained ARM/TOSA MACHINE SUPPORT @@ -1001,24 +998,12 @@ F: drivers/i2c/busses/i2c-stu300.c F: drivers/rtc/rtc-coh901331.c F: drivers/watchdog/coh901327_wdt.c F: drivers/dma/coh901318* -F: drivers/mfd/ab3100* -F: drivers/rtc/rtc-ab3100.c -F: drivers/rtc/rtc-coh901331.c -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git -ARM/Ux500 ARM ARCHITECTURE +ARM/U8500 ARM ARCHITECTURE M: Srinidhi Kasagar -M: Linus Walleij L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained F: arch/arm/mach-ux500/ -F: drivers/dma/ste_dma40* -F: drivers/mfd/ab3550* -F: drivers/mfd/abx500* -F: drivers/mfd/ab8500* -F: drivers/mfd/stmpe* -F: drivers/rtc/rtc-ab8500.c -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git ARM/VFP SUPPORT M: Russell King @@ -2075,7 +2060,7 @@ F: Documentation/blockdev/drbd/ DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS M: Greg Kroah-Hartman -T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6.git +T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ S: Supported F: Documentation/kobject.txt F: drivers/base/ @@ -2095,7 +2080,7 @@ F: include/drm/ INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) M: Chris Wilson -L: intel-gfx@lists.freedesktop.org (subscribers-only) +L: intel-gfx@lists.freedesktop.org L: dri-devel@lists.freedesktop.org T: git git://git.kernel.org/pub/scm/linux/kernel/git/ickle/drm-intel.git S: Supported @@ -4079,8 +4064,9 @@ F: drivers/scsi/NCR_D700.* NETEFFECT IWARP RNIC DRIVER (IW_NES) M: Faisal Latif +M: Chien Tung L: linux-rdma@vger.kernel.org -W: http://www.intel.com/Products/Server/Adapters/Server-Cluster/Server-Cluster-overview.htm +W: http://www.neteffect.com S: Supported F: drivers/infiniband/hw/nes/ @@ -4605,7 +4591,7 @@ F: drivers/pcmcia/ F: include/pcmcia/ PCNET32 NETWORK DRIVER -M: Don Fry +M: Don Fry L: netdev@vger.kernel.org S: Maintained F: drivers/net/pcnet32.c @@ -5947,6 +5933,7 @@ F: include/linux/tty.h TULIP NETWORK DRIVERS M: Grant Grundler +M: Kyle McMartin L: netdev@vger.kernel.org S: Maintained F: drivers/net/tulip/ @@ -6598,15 +6585,6 @@ F: include/linux/mfd/wm8400* F: include/sound/wm????.h F: sound/soc/codecs/wm* -WORKQUEUE -M: Tejun Heo -L: linux-kernel@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git -S: Maintained -F: include/linux/workqueue.h -F: kernel/workqueue.c -F: Documentation/workqueue.txt - X.25 NETWORK LAYER M: Andrew Hendry L: linux-x25@vger.kernel.org diff --git a/trunk/Makefile b/trunk/Makefile index 74b25559f831..b31d21377e4c 100644 --- a/trunk/Makefile +++ b/trunk/Makefile @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 37 -EXTRAVERSION = +EXTRAVERSION = -rc3 NAME = Flesh-Eating Bats with Fangs # *DOCUMENTATION* diff --git a/trunk/arch/arm/Kconfig b/trunk/arch/arm/Kconfig index 32cbf3e888ff..49778bb43782 100644 --- a/trunk/arch/arm/Kconfig +++ b/trunk/arch/arm/Kconfig @@ -2,7 +2,6 @@ config ARM bool default y select HAVE_AOUT - select HAVE_DMA_API_DEBUG select HAVE_IDE select HAVE_MEMBLOCK select RTC_LIB @@ -10,7 +9,7 @@ config ARM select GENERIC_ATOMIC64 if (!CPU_32v6K || !AEABI) select HAVE_OPROFILE if (HAVE_PERF_EVENTS) select HAVE_ARCH_KGDB - select HAVE_KPROBES if (!XIP_KERNEL && !THUMB2_KERNEL) + select HAVE_KPROBES if (!XIP_KERNEL) select HAVE_KRETPROBES if (HAVE_KPROBES) select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL) @@ -25,7 +24,6 @@ config ARM select PERF_USE_VMALLOC select HAVE_REGS_AND_STACK_ACCESS_API select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V7)) - select HAVE_C_RECORDMCOUNT help The ARM series is a line of low-power-consumption RISC chip designs licensed by ARM Ltd and targeted at embedded applications and @@ -37,15 +35,9 @@ config ARM config HAVE_PWM bool -config MIGHT_HAVE_PCI - bool - config SYS_SUPPORTS_APM_EMULATION bool -config HAVE_SCHED_CLOCK - bool - config GENERIC_GPIO bool @@ -230,7 +222,7 @@ config ARCH_INTEGRATOR bool "ARM Ltd. Integrator family" select ARM_AMBA select ARCH_HAS_CPUFREQ - select CLKDEV_LOOKUP + select COMMON_CLKDEV select ICST select GENERIC_CLOCKEVENTS select PLAT_VERSATILE @@ -240,8 +232,7 @@ config ARCH_INTEGRATOR config ARCH_REALVIEW bool "ARM Ltd. RealView family" select ARM_AMBA - select CLKDEV_LOOKUP - select HAVE_SCHED_CLOCK + select COMMON_CLKDEV select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB @@ -255,8 +246,7 @@ config ARCH_VERSATILE bool "ARM Ltd. Versatile family" select ARM_AMBA select ARM_VIC - select CLKDEV_LOOKUP - select HAVE_SCHED_CLOCK + select COMMON_CLKDEV select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB @@ -270,10 +260,9 @@ config ARCH_VEXPRESS select ARCH_WANT_OPTIONAL_GPIOLIB select ARM_AMBA select ARM_TIMER_SP804 - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_CLOCKEVENTS select HAVE_CLK - select HAVE_SCHED_CLOCK select ICST select PLAT_VERSATILE help @@ -292,7 +281,7 @@ config ARCH_BCMRING depends on MMU select CPU_V6 select ARM_AMBA - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB help @@ -310,7 +299,6 @@ config ARCH_CNS3XXX select CPU_V6 select GENERIC_CLOCKEVENTS select ARM_GIC - select MIGHT_HAVE_PCI select PCI_DOMAINS if PCI help Support for Cavium Networks CNS3XXX platform. @@ -340,7 +328,7 @@ config ARCH_EP93XX select CPU_ARM920T select ARM_AMBA select ARM_VIC - select CLKDEV_LOOKUP + select COMMON_CLKDEV select ARCH_REQUIRE_GPIOLIB select ARCH_HAS_HOLES_MEMORYMODEL select ARCH_USES_GETTIMEOFFSET @@ -360,14 +348,14 @@ config ARCH_MXC bool "Freescale MXC/iMX-based" select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB - select CLKDEV_LOOKUP + select COMMON_CLKDEV help Support for Freescale MXC/iMX-based family of processors config ARCH_STMP3XXX bool "Freescale STMP3xxx" select CPU_ARM926T - select CLKDEV_LOOKUP + select COMMON_CLKDEV select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select USB_ARCH_HAS_EHCI @@ -446,8 +434,6 @@ config ARCH_IXP4XX select CPU_XSCALE select GENERIC_GPIO select GENERIC_CLOCKEVENTS - select HAVE_SCHED_CLOCK - select MIGHT_HAVE_PCI select DMABOUNCE if PCI help Support for Intel's IXP4XX (XScale) family of processors. @@ -487,7 +473,7 @@ config ARCH_LPC32XX select HAVE_IDE select ARM_AMBA select USB_ARCH_HAS_OHCI - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_TIME select GENERIC_CLOCKEVENTS help @@ -521,9 +507,8 @@ config ARCH_MMP bool "Marvell PXA168/910/MMP2" depends on MMU select ARCH_REQUIRE_GPIOLIB - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_CLOCKEVENTS - select HAVE_SCHED_CLOCK select TICK_ONESHOT select PLAT_PXA select SPARSE_IRQ @@ -555,7 +540,7 @@ config ARCH_W90X900 bool "Nuvoton W90X900 CPU" select CPU_ARM926T select ARCH_REQUIRE_GPIOLIB - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_CLOCKEVENTS help Support for Nuvoton (Winbond logic dept.) ARM9 processor, @@ -569,19 +554,18 @@ config ARCH_W90X900 config ARCH_NUC93X bool "Nuvoton NUC93X CPU" select CPU_ARM926T - select CLKDEV_LOOKUP + select COMMON_CLKDEV help Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a low-power and high performance MPEG-4/JPEG multimedia controller chip. config ARCH_TEGRA bool "NVIDIA Tegra" - select CLKDEV_LOOKUP select GENERIC_TIME select GENERIC_CLOCKEVENTS select GENERIC_GPIO select HAVE_CLK - select HAVE_SCHED_CLOCK + select COMMON_CLKDEV select ARCH_HAS_BARRIERS if CACHE_L2X0 select ARCH_HAS_CPUFREQ help @@ -591,7 +575,7 @@ config ARCH_TEGRA config ARCH_PNX4008 bool "Philips Nexperia PNX4008 Mobile" select CPU_ARM926T - select CLKDEV_LOOKUP + select COMMON_CLKDEV select ARCH_USES_GETTIMEOFFSET help This enables support for Philips PNX4008 mobile platform. @@ -601,10 +585,9 @@ config ARCH_PXA depends on MMU select ARCH_MTD_XIP select ARCH_HAS_CPUFREQ - select CLKDEV_LOOKUP + select COMMON_CLKDEV select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS - select HAVE_SCHED_CLOCK select TICK_ONESHOT select PLAT_PXA select SPARSE_IRQ @@ -653,7 +636,6 @@ config ARCH_SA1100 select CPU_FREQ select GENERIC_CLOCKEVENTS select HAVE_CLK - select HAVE_SCHED_CLOCK select TICK_ONESHOT select ARCH_REQUIRE_GPIOLIB help @@ -780,7 +762,7 @@ config ARCH_TCC_926 bool "Telechips TCC ARM926-based systems" select CPU_ARM926T select HAVE_CLK - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_CLOCKEVENTS help Support for Telechips TCC ARM926-based systems. @@ -800,12 +782,11 @@ config ARCH_U300 bool "ST-Ericsson U300 Series" depends on MMU select CPU_ARM926T - select HAVE_SCHED_CLOCK select HAVE_TCM select ARM_AMBA select ARM_VIC select GENERIC_CLOCKEVENTS - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_GPIO help Support for ST-Ericsson U300 series mobile platforms. @@ -815,7 +796,7 @@ config ARCH_U8500 select CPU_V7 select ARM_AMBA select GENERIC_CLOCKEVENTS - select CLKDEV_LOOKUP + select COMMON_CLKDEV select ARCH_REQUIRE_GPIOLIB help Support for ST-Ericsson's Ux500 architecture @@ -825,7 +806,7 @@ config ARCH_NOMADIK select ARM_AMBA select ARM_VIC select CPU_ARM926T - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB help @@ -837,7 +818,7 @@ config ARCH_DAVINCI select ARCH_REQUIRE_GPIOLIB select ZONE_DMA select HAVE_IDE - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_ALLOCATOR select ARCH_HAS_HOLES_MEMORYMODEL help @@ -849,7 +830,6 @@ config ARCH_OMAP select ARCH_REQUIRE_GPIOLIB select ARCH_HAS_CPUFREQ select GENERIC_CLOCKEVENTS - select HAVE_SCHED_CLOCK select ARCH_HAS_HOLES_MEMORYMODEL help Support for TI's OMAP platform (OMAP1/2/3/4). @@ -858,7 +838,7 @@ config PLAT_SPEAR bool "ST SPEAr" select ARM_AMBA select ARCH_REQUIRE_GPIOLIB - select CLKDEV_LOOKUP + select COMMON_CLKDEV select GENERIC_CLOCKEVENTS select HAVE_CLK help @@ -1003,11 +983,9 @@ config ARCH_ACORN config PLAT_IOP bool select GENERIC_CLOCKEVENTS - select HAVE_SCHED_CLOCK config PLAT_ORION bool - select HAVE_SCHED_CLOCK config PLAT_PXA bool @@ -1040,11 +1018,6 @@ config CPU_HAS_PMU default y bool -config MULTI_IRQ_HANDLER - bool - help - Allow each machine to specify it's own IRQ handler at run time. - if !MMU source "arch/arm/Kconfig-nommu" endif @@ -1192,7 +1165,7 @@ config ISA_DMA_API bool config PCI - bool "PCI support" if MIGHT_HAVE_PCI + bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE || ARCH_CNS3XXX help Find out whether you have a PCI motherboard. PCI is the name of a bus system, i.e. the way the CPU talks to the other stuff inside @@ -1203,12 +1176,6 @@ config PCI_DOMAINS bool depends on PCI -config PCI_NANOENGINE - bool "BSE nanoEngine PCI support" - depends on SA1100_NANOENGINE - help - Enable PCI on the BSE nanoEngine board. - config PCI_SYSCALL def_bool PCI @@ -1264,7 +1231,7 @@ config SMP config SMP_ON_UP bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)" depends on EXPERIMENTAL - depends on SMP && !XIP + depends on SMP && !XIP && !THUMB2_KERNEL default y help SMP kernels contain instructions which fail on non-SMP processors. @@ -1283,7 +1250,6 @@ config HAVE_ARM_SCU config HAVE_ARM_TWD bool depends on SMP - select TICK_ONESHOT help This options enables support for the ARM timer and watchdog unit @@ -1347,8 +1313,8 @@ config HZ default 100 config THUMB2_KERNEL - bool "Compile the kernel in Thumb-2 mode (EXPERIMENTAL)" - depends on CPU_V7 && !CPU_V6 && EXPERIMENTAL + bool "Compile the kernel in Thumb-2 mode" + depends on CPU_V7 && EXPERIMENTAL select AEABI select ARM_ASM_UNIFIED help @@ -1561,7 +1527,6 @@ config SECCOMP config CC_STACKPROTECTOR bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)" - depends on EXPERIMENTAL help This option turns on the -fstack-protector GCC feature. This feature puts, at the beginning of functions, a canary value on @@ -1688,19 +1653,6 @@ config ATAGS_PROC Should the atags used to boot the kernel be exported in an "atags" file in procfs. Useful with kexec. -config CRASH_DUMP - bool "Build kdump crash kernel (EXPERIMENTAL)" - depends on EXPERIMENTAL - help - Generate crash dump after being started by kexec. This should - be normally only set in special crash dump kernels which are - loaded in the main kernel with kexec-tools into a specially - reserved region and then later executed after a crash by - kdump/kexec. The crash dump kernel must be compiled to a - memory address not used by the main kernel - - For more details see Documentation/kdump/kdump.txt - config AUTO_ZRELADDR bool "Auto calculation of the decompressed kernel image address" depends on !ZBOOT_ROM && !ARCH_U300 @@ -1758,7 +1710,7 @@ config CPU_FREQ_S3C Internal configuration node for common cpufreq on Samsung SoC config CPU_FREQ_S3C24XX - bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)" + bool "CPUfreq driver for Samsung S3C24XX series CPUs" depends on ARCH_S3C2410 && CPU_FREQ && EXPERIMENTAL select CPU_FREQ_S3C help @@ -1770,7 +1722,7 @@ config CPU_FREQ_S3C24XX If in doubt, say N. config CPU_FREQ_S3C24XX_PLL - bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)" + bool "Support CPUfreq changing of PLL frequency" depends on CPU_FREQ_S3C24XX && EXPERIMENTAL help Compile in support for changing the PLL frequency from the @@ -1810,7 +1762,7 @@ comment "At least one emulation must be selected" config FPE_NWFPE bool "NWFPE math emulation" - depends on (!AEABI || OABI_COMPAT) && !THUMB2_KERNEL + depends on !AEABI || OABI_COMPAT ---help--- Say Y to include the NWFPE floating point emulator in the kernel. This is necessary to run most binaries. Linux does not currently diff --git a/trunk/arch/arm/Kconfig.debug b/trunk/arch/arm/Kconfig.debug index 494224a9b459..eac62085f5b2 100644 --- a/trunk/arch/arm/Kconfig.debug +++ b/trunk/arch/arm/Kconfig.debug @@ -31,7 +31,7 @@ config FRAME_POINTER reported is severely limited. config ARM_UNWIND - bool "Enable stack unwinding support (EXPERIMENTAL)" + bool "Enable stack unwinding support" depends on AEABI && EXPERIMENTAL default y help diff --git a/trunk/arch/arm/boot/Makefile b/trunk/arch/arm/boot/Makefile index 4d26f2c52a75..4a590f4113e2 100644 --- a/trunk/arch/arm/boot/Makefile +++ b/trunk/arch/arm/boot/Makefile @@ -70,7 +70,12 @@ else $(obj)/uImage: LOADADDR=$(ZRELADDR) endif +ifeq ($(CONFIG_THUMB2_KERNEL),y) +# Set bit 0 to 1 so that "mov pc, rx" switches to Thumb-2 mode +$(obj)/uImage: STARTADDR=$(shell echo $(LOADADDR) | sed -e "s/.$$/1/") +else $(obj)/uImage: STARTADDR=$(LOADADDR) +endif $(obj)/uImage: $(obj)/zImage FORCE $(call if_changed,uimage) diff --git a/trunk/arch/arm/boot/bootp/init.S b/trunk/arch/arm/boot/bootp/init.S index 78b508075161..8b0de41c3dcb 100644 --- a/trunk/arch/arm/boot/bootp/init.S +++ b/trunk/arch/arm/boot/bootp/init.S @@ -73,8 +73,6 @@ move: ldmia r4!, {r7 - r10} @ move 32-bytes at a time .size _start, . - _start - .align - .type data,#object data: .word initrd_start @ source initrd address .word initrd_phys @ destination initrd address diff --git a/trunk/arch/arm/boot/compressed/Makefile b/trunk/arch/arm/boot/compressed/Makefile index 0a8f748e506a..65a7c1c588a9 100644 --- a/trunk/arch/arm/boot/compressed/Makefile +++ b/trunk/arch/arm/boot/compressed/Makefile @@ -45,10 +45,6 @@ else endif endif -ifeq ($(CONFIG_ARCH_SHMOBILE),y) -OBJS += head-shmobile.o -endif - # # We now have a PIC decompressor implementation. Decompressors running # from RAM should not define ZTEXTADDR. Decompressors running directly diff --git a/trunk/arch/arm/boot/compressed/head-shmobile.S b/trunk/arch/arm/boot/compressed/head-shmobile.S deleted file mode 100644 index 30973b76e6ae..000000000000 --- a/trunk/arch/arm/boot/compressed/head-shmobile.S +++ /dev/null @@ -1,53 +0,0 @@ -/* - * The head-file for SH-Mobile ARM platforms - * - * Kuninori Morimoto - * Simon Horman - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef CONFIG_ZBOOT_ROM - - .section ".start", "ax" - - /* load board-specific initialization code */ -#include - - b 1f -__atags:@ tag #1 - .long 12 @ tag->hdr.size = tag_size(tag_core); - .long 0x54410001 @ tag->hdr.tag = ATAG_CORE; - .long 0 @ tag->u.core.flags = 0; - .long 0 @ tag->u.core.pagesize = 0; - .long 0 @ tag->u.core.rootdev = 0; - @ tag #2 - .long 8 @ tag->hdr.size = tag_size(tag_mem32); - .long 0x54410002 @ tag->hdr.tag = ATAG_MEM; - .long CONFIG_MEMORY_SIZE @ tag->u.mem.size = CONFIG_MEMORY_SIZE; - .long CONFIG_MEMORY_START @ @ tag->u.mem.start = CONFIG_MEMORY_START; - @ tag #3 - .long 0 @ tag->hdr.size = 0 - .long 0 @ tag->hdr.tag = ATAG_NONE; -1: - - /* Set board ID necessary for boot */ - ldr r7, 1f @ Set machine type register - adr r8, __atags @ Set atag register - b 2f - -1 : .long MACH_TYPE -2 : - -#endif /* CONFIG_ZBOOT_ROM */ diff --git a/trunk/arch/arm/boot/compressed/head.S b/trunk/arch/arm/boot/compressed/head.S index 7193884ed8b0..9be21ba648cd 100644 --- a/trunk/arch/arm/boot/compressed/head.S +++ b/trunk/arch/arm/boot/compressed/head.S @@ -125,13 +125,9 @@ wait: mrc p14, 0, pc, c0, c1, 0 * sort out different calling conventions */ .align - .arm @ Always enter in ARM state start: .type start,#function - THUMB( adr r12, BSYM(1f) ) - THUMB( bx r12 ) - THUMB( .rept 6 ) - ARM( .rept 8 ) + .rept 8 mov r0, r0 .endr @@ -139,7 +135,6 @@ start: .word 0x016f2818 @ Magic numbers to help the loader .word start @ absolute load/run zImage address .word _edata @ zImage end address - THUMB( .thumb ) 1: mov r7, r1 @ save architecture ID mov r8, r2 @ save atags pointer @@ -179,8 +174,7 @@ not_angel: ldr sp, [r0, #28] #ifdef CONFIG_AUTO_ZRELADDR @ determine final kernel image address - mov r4, pc - and r4, r4, #0xf8000000 + and r4, pc, #0xf8000000 add r4, r4, #TEXT_OFFSET #else ldr r4, =zreladdr @@ -451,8 +445,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size */ mov r1, #0x1e orr r1, r1, #3 << 10 - mov r2, pc - mov r2, r2, lsr #20 + mov r2, pc, lsr #20 orr r1, r1, r2, lsl #20 add r0, r3, r2, lsl #2 str r1, [r0], #4 diff --git a/trunk/arch/arm/common/Kconfig b/trunk/arch/arm/common/Kconfig index 778655f0257a..0a34c8186924 100644 --- a/trunk/arch/arm/common/Kconfig +++ b/trunk/arch/arm/common/Kconfig @@ -37,3 +37,7 @@ config SHARP_PARAM config SHARP_SCOOP bool + +config COMMON_CLKDEV + bool + select HAVE_CLK diff --git a/trunk/arch/arm/common/Makefile b/trunk/arch/arm/common/Makefile index e7521bca2c35..e6e8664a9413 100644 --- a/trunk/arch/arm/common/Makefile +++ b/trunk/arch/arm/common/Makefile @@ -17,4 +17,3 @@ obj-$(CONFIG_ARCH_IXP2000) += uengine.o obj-$(CONFIG_ARCH_IXP23XX) += uengine.o obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o obj-$(CONFIG_COMMON_CLKDEV) += clkdev.o -obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o diff --git a/trunk/drivers/clk/clkdev.c b/trunk/arch/arm/common/clkdev.c similarity index 93% rename from trunk/drivers/clk/clkdev.c rename to trunk/arch/arm/common/clkdev.c index 0fc0a79852de..e2b2bb66e094 100644 --- a/trunk/drivers/clk/clkdev.c +++ b/trunk/arch/arm/common/clkdev.c @@ -1,5 +1,5 @@ /* - * drivers/clk/clkdev.c + * arch/arm/common/clkdev.c * * Copyright (C) 2008 Russell King. * @@ -18,7 +18,10 @@ #include #include #include -#include +#include + +#include +#include static LIST_HEAD(clocks); static DEFINE_MUTEX(clocks_mutex); @@ -117,12 +120,12 @@ struct clk_lookup_alloc { char con_id[MAX_CON_ID]; }; -struct clk_lookup * __init_refok -clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...) +struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id, + const char *dev_fmt, ...) { struct clk_lookup_alloc *cla; - cla = __clkdev_alloc(sizeof(*cla)); + cla = kzalloc(sizeof(*cla), GFP_KERNEL); if (!cla) return NULL; diff --git a/trunk/arch/arm/common/dmabounce.c b/trunk/arch/arm/common/dmabounce.c index e5681636626f..cc0a932bbea9 100644 --- a/trunk/arch/arm/common/dmabounce.c +++ b/trunk/arch/arm/common/dmabounce.c @@ -328,7 +328,7 @@ static inline void unmap_single(struct device *dev, dma_addr_t dma_addr, * substitute the safe buffer for the unsafe one. * (basically move the buffer from an unsafe area to a safe one) */ -dma_addr_t __dma_map_single(struct device *dev, void *ptr, size_t size, +dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir) { dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", @@ -338,7 +338,7 @@ dma_addr_t __dma_map_single(struct device *dev, void *ptr, size_t size, return map_single(dev, ptr, size, dir); } -EXPORT_SYMBOL(__dma_map_single); +EXPORT_SYMBOL(dma_map_single); /* * see if a mapped address was really a "safe" buffer and if so, copy @@ -346,7 +346,7 @@ EXPORT_SYMBOL(__dma_map_single); * the safe buffer. (basically return things back to the way they * should be) */ -void __dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, +void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir) { dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", @@ -354,9 +354,9 @@ void __dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, unmap_single(dev, dma_addr, size, dir); } -EXPORT_SYMBOL(__dma_unmap_single); +EXPORT_SYMBOL(dma_unmap_single); -dma_addr_t __dma_map_page(struct device *dev, struct page *page, +dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir) { dev_dbg(dev, "%s(page=%p,off=%#lx,size=%zx,dir=%x)\n", @@ -372,7 +372,7 @@ dma_addr_t __dma_map_page(struct device *dev, struct page *page, return map_single(dev, page_address(page) + offset, size, dir); } -EXPORT_SYMBOL(__dma_map_page); +EXPORT_SYMBOL(dma_map_page); /* * see if a mapped address was really a "safe" buffer and if so, copy @@ -380,7 +380,7 @@ EXPORT_SYMBOL(__dma_map_page); * the safe buffer. (basically return things back to the way they * should be) */ -void __dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, +void dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir) { dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", @@ -388,7 +388,7 @@ void __dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, unmap_single(dev, dma_addr, size, dir); } -EXPORT_SYMBOL(__dma_unmap_page); +EXPORT_SYMBOL(dma_unmap_page); int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, unsigned long off, size_t sz, enum dma_data_direction dir) diff --git a/trunk/arch/arm/common/gic.c b/trunk/arch/arm/common/gic.c index 0b89ef001330..772f95f1aecd 100644 --- a/trunk/arch/arm/common/gic.c +++ b/trunk/arch/arm/common/gic.c @@ -35,9 +35,6 @@ static DEFINE_SPINLOCK(irq_controller_lock); -/* Address of GIC 0 CPU interface */ -void __iomem *gic_cpu_base_addr __read_mostly; - struct gic_chip_data { unsigned int irq_offset; void __iomem *dist_base; @@ -48,7 +45,7 @@ struct gic_chip_data { #define MAX_GIC_NR 1 #endif -static struct gic_chip_data gic_data[MAX_GIC_NR] __read_mostly; +static struct gic_chip_data gic_data[MAX_GIC_NR]; static inline void __iomem *gic_dist_base(unsigned int irq) { @@ -149,15 +146,9 @@ static int gic_set_cpu(unsigned int irq, const struct cpumask *mask_val) unsigned int shift = (irq % 4) * 8; unsigned int cpu = cpumask_first(mask_val); u32 val; - struct irq_desc *desc; spin_lock(&irq_controller_lock); - desc = irq_to_desc(irq); - if (desc == NULL) { - spin_unlock(&irq_controller_lock); - return -EINVAL; - } - desc->node = cpu; + irq_desc[irq].node = cpu; val = readl(reg) & ~(0xff << shift); val |= 1 << (cpu + shift); writel(val, reg); @@ -216,65 +207,68 @@ void __init gic_cascade_irq(unsigned int gic_nr, unsigned int irq) set_irq_chained_handler(irq, gic_handle_cascade_irq); } -static void __init gic_dist_init(struct gic_chip_data *gic, - unsigned int irq_start) +void __init gic_dist_init(unsigned int gic_nr, void __iomem *base, + unsigned int irq_start) { - unsigned int gic_irqs, irq_limit, i; - void __iomem *base = gic->dist_base; + unsigned int max_irq, i; u32 cpumask = 1 << smp_processor_id(); + if (gic_nr >= MAX_GIC_NR) + BUG(); + cpumask |= cpumask << 8; cpumask |= cpumask << 16; + gic_data[gic_nr].dist_base = base; + gic_data[gic_nr].irq_offset = (irq_start - 1) & ~31; + writel(0, base + GIC_DIST_CTRL); /* * Find out how many interrupts are supported. + */ + max_irq = readl(base + GIC_DIST_CTR) & 0x1f; + max_irq = (max_irq + 1) * 32; + + /* * The GIC only supports up to 1020 interrupt sources. + * Limit this to either the architected maximum, or the + * platform maximum. */ - gic_irqs = readl(base + GIC_DIST_CTR) & 0x1f; - gic_irqs = (gic_irqs + 1) * 32; - if (gic_irqs > 1020) - gic_irqs = 1020; + if (max_irq > max(1020, NR_IRQS)) + max_irq = max(1020, NR_IRQS); /* * Set all global interrupts to be level triggered, active low. */ - for (i = 32; i < gic_irqs; i += 16) + for (i = 32; i < max_irq; i += 16) writel(0, base + GIC_DIST_CONFIG + i * 4 / 16); /* * Set all global interrupts to this CPU only. */ - for (i = 32; i < gic_irqs; i += 4) + for (i = 32; i < max_irq; i += 4) writel(cpumask, base + GIC_DIST_TARGET + i * 4 / 4); /* * Set priority on all global interrupts. */ - for (i = 32; i < gic_irqs; i += 4) + for (i = 32; i < max_irq; i += 4) writel(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4); /* * Disable all interrupts. Leave the PPI and SGIs alone * as these enables are banked registers. */ - for (i = 32; i < gic_irqs; i += 32) + for (i = 32; i < max_irq; i += 32) writel(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 / 32); - /* - * Limit number of interrupts registered to the platform maximum - */ - irq_limit = gic->irq_offset + gic_irqs; - if (WARN_ON(irq_limit > NR_IRQS)) - irq_limit = NR_IRQS; - /* * Setup the Linux IRQ subsystem. */ - for (i = irq_start; i < irq_limit; i++) { + for (i = irq_start; i < gic_data[gic_nr].irq_offset + max_irq; i++) { set_irq_chip(i, &gic_chip); - set_irq_chip_data(i, gic); + set_irq_chip_data(i, &gic_data[gic_nr]); set_irq_handler(i, handle_level_irq); set_irq_flags(i, IRQF_VALID | IRQF_PROBE); } @@ -282,12 +276,19 @@ static void __init gic_dist_init(struct gic_chip_data *gic, writel(1, base + GIC_DIST_CTRL); } -static void __cpuinit gic_cpu_init(struct gic_chip_data *gic) +void __cpuinit gic_cpu_init(unsigned int gic_nr, void __iomem *base) { - void __iomem *dist_base = gic->dist_base; - void __iomem *base = gic->cpu_base; + void __iomem *dist_base; int i; + if (gic_nr >= MAX_GIC_NR) + BUG(); + + dist_base = gic_data[gic_nr].dist_base; + BUG_ON(!dist_base); + + gic_data[gic_nr].cpu_base = base; + /* * Deal with the banked PPI and SGI interrupts - disable all * PPI interrupts, ensure all SGI interrupts are enabled. @@ -305,42 +306,6 @@ static void __cpuinit gic_cpu_init(struct gic_chip_data *gic) writel(1, base + GIC_CPU_CTRL); } -void __init gic_init(unsigned int gic_nr, unsigned int irq_start, - void __iomem *dist_base, void __iomem *cpu_base) -{ - struct gic_chip_data *gic; - - BUG_ON(gic_nr >= MAX_GIC_NR); - - gic = &gic_data[gic_nr]; - gic->dist_base = dist_base; - gic->cpu_base = cpu_base; - gic->irq_offset = (irq_start - 1) & ~31; - - if (gic_nr == 0) - gic_cpu_base_addr = cpu_base; - - gic_dist_init(gic, irq_start); - gic_cpu_init(gic); -} - -void __cpuinit gic_secondary_init(unsigned int gic_nr) -{ - BUG_ON(gic_nr >= MAX_GIC_NR); - - gic_cpu_init(&gic_data[gic_nr]); -} - -void __cpuinit gic_enable_ppi(unsigned int irq) -{ - unsigned long flags; - - local_irq_save(flags); - irq_to_desc(irq)->status |= IRQ_NOPROBE; - gic_unmask_irq(irq); - local_irq_restore(flags); -} - #ifdef CONFIG_SMP void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) { diff --git a/trunk/arch/arm/common/it8152.c b/trunk/arch/arm/common/it8152.c index 42ff90b46dfb..1bec96e85196 100644 --- a/trunk/arch/arm/common/it8152.c +++ b/trunk/arch/arm/common/it8152.c @@ -352,4 +352,3 @@ struct pci_bus * __init it8152_pci_scan_bus(int nr, struct pci_sys_data *sys) return pci_scan_bus(nr, &it8152_ops, sys); } -EXPORT_SYMBOL(dma_set_coherent_mask); diff --git a/trunk/arch/arm/configs/at91rm9200_defconfig b/trunk/arch/arm/configs/at91rm9200_defconfig deleted file mode 100644 index 38cb7c985426..000000000000 --- a/trunk/arch/arm/configs/at91rm9200_defconfig +++ /dev/null @@ -1,341 +0,0 @@ -CONFIG_EXPERIMENTAL=y -# CONFIG_LOCALVERSION_AUTO is not set -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_SYSFS_DEPRECATED_V2=y -CONFIG_BLK_DEV_INITRD=y -CONFIG_MODULES=y -CONFIG_MODULE_FORCE_LOAD=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODVERSIONS=y -CONFIG_MODULE_SRCVERSION_ALL=y -# CONFIG_BLK_DEV_BSG is not set -# CONFIG_IOSCHED_CFQ is not set -CONFIG_ARCH_AT91=y -CONFIG_MACH_ONEARM=y -CONFIG_ARCH_AT91RM9200DK=y -CONFIG_MACH_AT91RM9200EK=y -CONFIG_MACH_CSB337=y -CONFIG_MACH_CSB637=y -CONFIG_MACH_CARMEVA=y -CONFIG_MACH_ATEB9200=y -CONFIG_MACH_KB9200=y -CONFIG_MACH_PICOTUX2XX=y -CONFIG_MACH_KAFA=y -CONFIG_MACH_ECBAT91=y -CONFIG_MACH_YL9200=y -CONFIG_MACH_CPUAT91=y -CONFIG_MACH_ECO920=y -CONFIG_MTD_AT91_DATAFLASH_CARD=y -CONFIG_AT91_PROGRAMMABLE_CLOCKS=y -CONFIG_AT91_TIMER_HZ=100 -# CONFIG_ARM_THUMB is not set -CONFIG_PCCARD=y -CONFIG_AT91_CF=y -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_PREEMPT=y -CONFIG_AEABI=y -CONFIG_LEDS=y -CONFIG_LEDS_CPU=y -CONFIG_ZBOOT_ROM_TEXT=0x10000000 -CONFIG_ZBOOT_ROM_BSS=0x20040000 -CONFIG_KEXEC=y -CONFIG_FPE_NWFPE=y -CONFIG_BINFMT_MISC=y -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_XFRM_USER=m -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -CONFIG_IP_PNP_BOOTP=y -CONFIG_NET_IPIP=m -CONFIG_NET_IPGRE=m -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_MODE_TRANSPORT=m -CONFIG_INET_XFRM_MODE_TUNNEL=m -CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_IPV6_PRIVACY=y -CONFIG_IPV6_ROUTER_PREF=y -CONFIG_IPV6_ROUTE_INFO=y -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -CONFIG_IPV6_MIP6=m -CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m -CONFIG_IPV6_TUNNEL=m -CONFIG_BRIDGE=m -CONFIG_VLAN_8021Q=m -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=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_AFS_PARTS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_CFI=y -CONFIG_MTD_JEDECPROBE=y -CONFIG_MTD_CFI_INTELEXT=y -CONFIG_MTD_CFI_AMDSTD=y -CONFIG_MTD_COMPLEX_MAPPINGS=y -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PLATRAM=y -CONFIG_MTD_DATAFLASH=y -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_ATMEL=y -CONFIG_MTD_NAND_PLATFORM=y -CONFIG_MTD_UBI=y -CONFIG_MTD_UBI_GLUEBI=y -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_NBD=y -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_ATMEL_TCLIB=y -CONFIG_EEPROM_LEGACY=m -CONFIG_SCSI=y -CONFIG_BLK_DEV_SD=y -CONFIG_BLK_DEV_SR=m -CONFIG_BLK_DEV_SR_VENDOR=y -CONFIG_CHR_DEV_SG=m -CONFIG_SCSI_MULTI_LUN=y -# CONFIG_SCSI_LOWLEVEL is not set -CONFIG_NETDEVICES=y -CONFIG_TUN=m -CONFIG_PHYLIB=y -CONFIG_DAVICOM_PHY=y -CONFIG_SMSC_PHY=y -CONFIG_MICREL_PHY=y -CONFIG_NET_ETHERNET=y -CONFIG_ARM_AT91_ETHER=y -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_EPSON2888=y -CONFIG_PPP=y -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=y -CONFIG_PPP_DEFLATE=y -CONFIG_PPP_BSDCOMP=y -CONFIG_PPP_MPPE=m -CONFIG_PPPOE=m -CONFIG_SLIP=m -CONFIG_SLIP_COMPRESSED=y -CONFIG_SLIP_SMART=y -CONFIG_SLIP_MODE_SLIP6=y -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 -CONFIG_INPUT_EVDEV=y -CONFIG_KEYBOARD_GPIO=y -# CONFIG_INPUT_MOUSE is not set -CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_SERIAL_ATMEL=y -CONFIG_SERIAL_ATMEL_CONSOLE=y -CONFIG_LEGACY_PTY_COUNT=32 -CONFIG_HW_RANDOM=y -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_GPIO=y -CONFIG_SPI=y -CONFIG_SPI_ATMEL=y -CONFIG_SPI_BITBANG=y -CONFIG_GPIO_SYSFS=y -CONFIG_HWMON=m -CONFIG_SENSORS_ADM1021=m -CONFIG_SENSORS_ADM1025=m -CONFIG_SENSORS_ADM1026=m -CONFIG_SENSORS_ADM1029=m -CONFIG_SENSORS_ADM1031=m -CONFIG_SENSORS_ADM9240=m -CONFIG_SENSORS_DS1621=m -CONFIG_SENSORS_GL518SM=m -CONFIG_SENSORS_GL520SM=m -CONFIG_SENSORS_IT87=m -CONFIG_SENSORS_LM63=m -CONFIG_SENSORS_LM73=m -CONFIG_SENSORS_LM75=m -CONFIG_SENSORS_LM77=m -CONFIG_SENSORS_LM78=m -CONFIG_SENSORS_LM80=m -CONFIG_SENSORS_LM83=m -CONFIG_SENSORS_LM85=m -CONFIG_SENSORS_LM87=m -CONFIG_SENSORS_LM90=m -CONFIG_SENSORS_LM92=m -CONFIG_SENSORS_MAX1619=m -CONFIG_SENSORS_PCF8591=m -CONFIG_SENSORS_SMSC47B397=m -CONFIG_SENSORS_W83781D=m -CONFIG_SENSORS_W83791D=m -CONFIG_SENSORS_W83792D=m -CONFIG_SENSORS_W83793=m -CONFIG_SENSORS_W83L785TS=m -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_NOWAYOUT=y -CONFIG_AT91RM9200_WATCHDOG=y -CONFIG_FB=y -CONFIG_FB_MODE_HELPERS=y -CONFIG_FB_TILEBLITTING=y -CONFIG_FB_S1D13XXX=y -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_LCD_CLASS_DEVICE=y -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_GENERIC is not set -CONFIG_DISPLAY_SUPPORT=y -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_FONTS=y -CONFIG_FONT_MINI_4x6=y -CONFIG_LOGO=y -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 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_ACM=m -CONFIG_USB_PRINTER=m -CONFIG_USB_STORAGE=y -CONFIG_USB_SERIAL=y -CONFIG_USB_SERIAL_CONSOLE=y -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_FTDI_SIO=y -CONFIG_USB_SERIAL_KEYSPAN=y -CONFIG_USB_SERIAL_KEYSPAN_MPR=y -CONFIG_USB_SERIAL_KEYSPAN_USA28=y -CONFIG_USB_SERIAL_KEYSPAN_USA28X=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y -CONFIG_USB_SERIAL_KEYSPAN_USA19=y -CONFIG_USB_SERIAL_KEYSPAN_USA18X=y -CONFIG_USB_SERIAL_KEYSPAN_USA19W=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y -CONFIG_USB_SERIAL_KEYSPAN_USA49W=y -CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y -CONFIG_USB_SERIAL_MCT_U232=y -CONFIG_USB_SERIAL_PL2303=y -CONFIG_USB_GADGET=y -CONFIG_USB_ETH=m -CONFIG_USB_MASS_STORAGE=m -CONFIG_MMC=y -CONFIG_MMC_AT91=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_GPIO=y -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y -CONFIG_RTC_CLASS=y -# CONFIG_RTC_HCTOSYS is not set -CONFIG_RTC_DRV_DS1307=y -CONFIG_RTC_DRV_PCF8563=y -CONFIG_RTC_DRV_AT91RM9200=y -CONFIG_EXT2_FS=y -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_XATTR is not set -CONFIG_REISERFS_FS=y -CONFIG_AUTOFS4_FS=y -CONFIG_ISO9660_FS=y -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_UDF_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_NTFS_FS=m -CONFIG_TMPFS=y -CONFIG_CONFIGFS_FS=y -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_SUMMARY=y -CONFIG_JFFS2_COMPRESSION_OPTIONS=y -CONFIG_JFFS2_LZO=y -CONFIG_JFFS2_RUBIN=y -CONFIG_CRAMFS=y -CONFIG_MINIX_FS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=y -CONFIG_ROOT_NFS=y -CONFIG_NFSD=y -CONFIG_SMB_FS=m -CONFIG_CIFS=m -CONFIG_PARTITION_ADVANCED=y -CONFIG_MAC_PARTITION=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=y -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=y -CONFIG_MAGIC_SYSRQ=y -CONFIG_DEBUG_FS=y -CONFIG_DEBUG_KERNEL=y -# CONFIG_RCU_CPU_STALL_DETECTOR is not set -# CONFIG_FTRACE is not set -CONFIG_CRYPTO_PCBC=y -CONFIG_CRYPTO_SHA1=y diff --git a/trunk/arch/arm/configs/at91rm9200dk_defconfig b/trunk/arch/arm/configs/at91rm9200dk_defconfig new file mode 100644 index 000000000000..4438e64f3bfb --- /dev/null +++ b/trunk/arch/arm/configs/at91rm9200dk_defconfig @@ -0,0 +1,72 @@ +CONFIG_EXPERIMENTAL=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_BLK_DEV_INITRD=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_ARCH_AT91=y +CONFIG_ARCH_AT91RM9200DK=y +CONFIG_MACH_ECO920=y +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +# CONFIG_ARM_THUMB is not set +CONFIG_PCCARD=y +CONFIG_AT91_CF=y +CONFIG_LEDS=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,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_IPV6 is not set +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_JEDECPROBE=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_PHYSMAP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +# 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_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_GPIO=y +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y +CONFIG_AT91RM9200_WATCHDOG=y +# CONFIG_VGA_CONSOLE is not set +# CONFIG_USB_HID is not set +CONFIG_USB=y +CONFIG_USB_DEBUG=y +CONFIG_USB_DEVICEFS=y +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_GADGET=y +CONFIG_MMC=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_AT91RM9200=y +CONFIG_EXT2_FS=y +CONFIG_INOTIFY=y +CONFIG_TMPFS=y +CONFIG_CRAMFS=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_LL=y diff --git a/trunk/arch/arm/configs/at91rm9200ek_defconfig b/trunk/arch/arm/configs/at91rm9200ek_defconfig new file mode 100644 index 000000000000..ccd517c64bc7 --- /dev/null +++ b/trunk/arch/arm/configs/at91rm9200ek_defconfig @@ -0,0 +1,73 @@ +CONFIG_EXPERIMENTAL=y +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_BLK_DEV_INITRD=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_ARCH_AT91=y +CONFIG_MACH_AT91RM9200EK=y +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +# CONFIG_ARM_THUMB is not set +CONFIG_LEDS=y +CONFIG_LEDS_CPU=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,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_IPV6 is not set +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_JEDECPROBE=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_PHYSMAP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +# 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_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_GPIO=y +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y +CONFIG_AT91RM9200_WATCHDOG=y +CONFIG_FB=y +CONFIG_FB_S1D13XXX=y +# CONFIG_VGA_CONSOLE is not set +# CONFIG_USB_HID is not set +CONFIG_USB=y +CONFIG_USB_DEBUG=y +CONFIG_USB_DEVICEFS=y +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_GADGET=y +CONFIG_MMC=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_AT91RM9200=y +CONFIG_EXT2_FS=y +CONFIG_INOTIFY=y +CONFIG_TMPFS=y +CONFIG_CRAMFS=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_LL=y diff --git a/trunk/arch/arm/configs/ateb9200_defconfig b/trunk/arch/arm/configs/ateb9200_defconfig new file mode 100644 index 000000000000..1b0e9a1689bb --- /dev/null +++ b/trunk/arch/arm/configs/ateb9200_defconfig @@ -0,0 +1,131 @@ +CONFIG_EXPERIMENTAL=y +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_EMBEDDED=y +CONFIG_SLAB=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_ARCH_AT91=y +CONFIG_MACH_ATEB9200=y +CONFIG_PCCARD=m +CONFIG_AT91_CF=m +CONFIG_PREEMPT=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_FPE_NWFPE=y +CONFIG_PM=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_NET_KEY=y +CONFIG_INET=y +# CONFIG_IPV6 is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +CONFIG_MTD=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK_RO=y +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +CONFIG_SCSI=m +CONFIG_BLK_DEV_SD=m +CONFIG_BLK_DEV_SR=m +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_CHR_DEV_SG=m +CONFIG_SCSI_MULTI_LUN=y +CONFIG_NETDEVICES=y +CONFIG_DUMMY=m +CONFIG_TUN=m +CONFIG_PHYLIB=y +CONFIG_DAVICOM_PHY=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +CONFIG_USB_USBNET=y +CONFIG_USB_NET_GL620A=y +CONFIG_USB_NET_PLUSB=y +CONFIG_USB_NET_RNDIS_HOST=y +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_EPSON2888=y +CONFIG_PPP=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPPOE=m +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=y +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_GPIO=m +# CONFIG_VGA_CONSOLE is not set +CONFIG_SOUND=y +CONFIG_USB_HID=m +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y +CONFIG_USB=y +CONFIG_USB_DEVICEFS=y +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_STORAGE=m +CONFIG_USB_STORAGE_DATAFAB=m +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_GADGET=m +CONFIG_USB_ETH=m +CONFIG_USB_GADGETFS=m +CONFIG_USB_FILE_STORAGE=m +CONFIG_USB_G_SERIAL=m +CONFIG_MMC=m +CONFIG_MMC_DEBUG=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_HCTOSYS is not set +CONFIG_RTC_DRV_AT91RM9200=y +CONFIG_EXT2_FS=m +CONFIG_EXT3_FS=m +CONFIG_REISERFS_FS=m +CONFIG_INOTIFY=y +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_NTFS_FS=m +CONFIG_NTFS_RW=y +CONFIG_TMPFS=y +CONFIG_CRAMFS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_NFSD=m +CONFIG_NFSD_V4=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_MAC_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_UTF8=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRC16=m +CONFIG_LIBCRC32C=m diff --git a/trunk/arch/arm/configs/carmeva_defconfig b/trunk/arch/arm/configs/carmeva_defconfig new file mode 100644 index 000000000000..ac64dbd8a49c --- /dev/null +++ b/trunk/arch/arm/configs/carmeva_defconfig @@ -0,0 +1,47 @@ +CONFIG_EXPERIMENTAL=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_BLK_DEV_INITRD=y +CONFIG_EMBEDDED=y +# CONFIG_HOTPLUG is not set +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_ARCH_AT91=y +CONFIG_MACH_CARMEVA=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_FPE_NWFPE=y +CONFIG_NET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_PNP=y +# CONFIG_IPV6 is not set +CONFIG_MTD=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_BLK_DEV_RAM=y +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +CONFIG_SERIO=m +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_MMC=m +CONFIG_MMC_DEBUG=y +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +# CONFIG_DNOTIFY is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V4=y +CONFIG_ROOT_NFS=y +CONFIG_NFSD=y diff --git a/trunk/arch/arm/configs/cpuat91_defconfig b/trunk/arch/arm/configs/cpuat91_defconfig new file mode 100644 index 000000000000..022aeb55b676 --- /dev/null +++ b/trunk/arch/arm/configs/cpuat91_defconfig @@ -0,0 +1,112 @@ +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_MACH_CPUAT91=y +CONFIG_AT91_TIMER_HZ=100 +# CONFIG_ARM_THUMB is not set +CONFIG_PREEMPT=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_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_PHYLIB=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=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_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=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_AT91RM9200_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_AT91=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_RTC_DRV_PCF8563=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/csb337_defconfig b/trunk/arch/arm/configs/csb337_defconfig new file mode 100644 index 000000000000..a24c448840c4 --- /dev/null +++ b/trunk/arch/arm/configs/csb337_defconfig @@ -0,0 +1,104 @@ +CONFIG_EXPERIMENTAL=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_BLK_DEV_INITRD=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_BLK_DEV_BSG is not set +CONFIG_ARCH_AT91=y +CONFIG_MACH_CSB337=y +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +# CONFIG_ARM_THUMB is not set +CONFIG_PCCARD=y +CONFIG_AT91_CF=y +CONFIG_LEDS=y +CONFIG_LEDS_CPU=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="mem=32M console=ttyS0,38400 initrd=0x20410000,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_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# 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_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_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_ATMEL_SSC=y +CONFIG_SCSI=y +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +# 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_HWMON is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y +CONFIG_AT91RM9200_WATCHDOG=y +# CONFIG_VGA_CONSOLE is not set +# CONFIG_USB_HID is not set +CONFIG_USB=y +CONFIG_USB_DEBUG=y +CONFIG_USB_DEVICEFS=y +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_CONSOLE=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_FTDI_SIO=y +CONFIG_USB_SERIAL_KEYSPAN=y +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_MCT_U232=y +CONFIG_USB_GADGET=y +CONFIG_MMC=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc1" +# CONFIG_RTC_INTF_SYSFS is not set +CONFIG_RTC_DRV_DS1307=y +CONFIG_RTC_DRV_AT91RM9200=y +CONFIG_EXT2_FS=y +CONFIG_INOTIFY=y +CONFIG_TMPFS=y +CONFIG_CRAMFS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V4=y +CONFIG_ROOT_NFS=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_LL=y diff --git a/trunk/arch/arm/configs/csb637_defconfig b/trunk/arch/arm/configs/csb637_defconfig new file mode 100644 index 000000000000..98552adac5fb --- /dev/null +++ b/trunk/arch/arm/configs/csb637_defconfig @@ -0,0 +1,98 @@ +CONFIG_EXPERIMENTAL=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED_V2=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_BLK_DEV_BSG is not set +CONFIG_ARCH_AT91=y +CONFIG_MACH_CSB637=y +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +# CONFIG_ARM_THUMB is not set +CONFIG_PCCARD=y +CONFIG_AT91_CF=y +CONFIG_LEDS=y +CONFIG_LEDS_CPU=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="mem=32M console=ttyS0,38400 initrd=0x20410000,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_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# 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_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_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_SCSI=y +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +# 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_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y +CONFIG_AT91RM9200_WATCHDOG=y +# CONFIG_VGA_CONSOLE is not set +# CONFIG_USB_HID is not set +CONFIG_USB=y +CONFIG_USB_DEBUG=y +CONFIG_USB_DEVICEFS=y +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_CONSOLE=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_FTDI_SIO=y +CONFIG_USB_SERIAL_KEYSPAN=y +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_MCT_U232=y +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_TMPFS=y +CONFIG_CRAMFS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V4=y +CONFIG_ROOT_NFS=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_LL=y diff --git a/trunk/arch/arm/configs/ecbat91_defconfig b/trunk/arch/arm/configs/ecbat91_defconfig new file mode 100644 index 000000000000..6bb6abdcea8c --- /dev/null +++ b/trunk/arch/arm/configs/ecbat91_defconfig @@ -0,0 +1,99 @@ +CONFIG_EXPERIMENTAL=y +CONFIG_SYSVIPC=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SLAB=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_ARCH_AT91=y +CONFIG_MACH_ECBAT91=y +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +CONFIG_PCCARD=y +CONFIG_AT91_CF=y +CONFIG_PREEMPT=y +CONFIG_LEDS=y +CONFIG_LEDS_CPU=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="rootfstype=reiserfs root=/dev/mmcblk0p1 console=ttyS0,115200n8 rootdelay=1" +CONFIG_FPE_NWFPE=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IPV6 is not set +CONFIG_CFG80211=y +CONFIG_MAC80211=y +# CONFIG_STANDALONE is not set +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +CONFIG_MTD=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_AFS_PARTS=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_DATAFLASH=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_SG=y +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +CONFIG_PPP=y +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=y +# 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=y +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_SPI=y +CONFIG_SPI_BITBANG=y +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_DEVICE_CLASS is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_PRINTER=y +CONFIG_USB_STORAGE=y +CONFIG_USB_GADGET=y +CONFIG_MMC=y +CONFIG_MMC_DEBUG=y +CONFIG_MMC_AT91=m +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_HCTOSYS is not set +CONFIG_RTC_DRV_AT91RM9200=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +CONFIG_REISERFS_FS=y +CONFIG_INOTIFY=y +CONFIG_TMPFS=y +CONFIG_CONFIGFS_FS=y +CONFIG_CRAMFS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_ROOT_NFS=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_DEBUG_USER=y +CONFIG_CRYPTO_PCBC=y +CONFIG_CRYPTO_SHA1=y diff --git a/trunk/arch/arm/configs/kafa_defconfig b/trunk/arch/arm/configs/kafa_defconfig new file mode 100644 index 000000000000..896dbe00dc6e --- /dev/null +++ b/trunk/arch/arm/configs/kafa_defconfig @@ -0,0 +1,61 @@ +CONFIG_EXPERIMENTAL=y +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SLAB=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_IOSCHED_CFQ is not set +CONFIG_ARCH_AT91=y +CONFIG_MACH_KAFA=y +# CONFIG_ARM_THUMB is not set +CONFIG_PREEMPT=y +CONFIG_LEDS=y +CONFIG_LEDS_CPU=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20800000,10M root=/dev/ram0 rw" +CONFIG_FPE_NWFPE=y +CONFIG_BINFMT_MISC=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_INET_DIAG is not set +# CONFIG_IPV6 is not set +CONFIG_MTD=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK_RO=y +CONFIG_NETDEVICES=y +CONFIG_PHYLIB=y +CONFIG_DAVICOM_PHY=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +# 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=32 +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_GPIO=y +# CONFIG_HWMON is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y +CONFIG_AT91RM9200_WATCHDOG=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_RTC_CLASS=y +# CONFIG_RTC_HCTOSYS is not set +CONFIG_RTC_DRV_AT91RM9200=y +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +CONFIG_TMPFS=y +CONFIG_CRAMFS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_DES=y diff --git a/trunk/arch/arm/configs/kb9202_defconfig b/trunk/arch/arm/configs/kb9202_defconfig new file mode 100644 index 000000000000..9f906a85f5c2 --- /dev/null +++ b/trunk/arch/arm/configs/kb9202_defconfig @@ -0,0 +1,127 @@ +CONFIG_EXPERIMENTAL=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_AUDIT=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_KALLSYMS_EXTRA_PASS=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_MODULE_SRCVERSION_ALL=y +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_ARCH_AT91=y +CONFIG_MACH_KB9200=y +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_AEABI=y +CONFIG_ZBOOT_ROM_TEXT=0x10000000 +CONFIG_ZBOOT_ROM_BSS=0x20040000 +CONFIG_CMDLINE="noinitrd root=/dev/mtdblock0 rootfstype=jffs2 mem=64M" +CONFIG_KEXEC=y +CONFIG_FPE_NWFPE=y +CONFIG_BINFMT_MISC=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=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_INET_DIAG is not set +# CONFIG_IPV6 is not set +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_FIRMWARE_IN_KERNEL is not set +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_CFI_INTELEXT=y +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_ATMEL=y +CONFIG_MTD_UBI=y +CONFIG_MTD_UBI_GLUEBI=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=16384 +CONFIG_ATMEL_TCLIB=y +CONFIG_ATMEL_SSC=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_SPI_ATTRS=m +# CONFIG_SCSI_LOWLEVEL is not set +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=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_PTYS is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_HWMON is not set +CONFIG_WATCHDOG=y +CONFIG_AT91RM9200_WATCHDOG=y +CONFIG_FB=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +# CONFIG_VGA_CONSOLE is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FONTS=y +CONFIG_FONT_MINI_4x6=y +# 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_MMC=y +CONFIG_MMC_AT91=m +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_AT91RM9200=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +# CONFIG_DNOTIFY is not set +CONFIG_INOTIFY=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_CONFIGFS_FS=y +CONFIG_JFFS2_FS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_ROOT_NFS=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_UTF8=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_KERNEL=y +# CONFIG_SCHED_DEBUG is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_RCU_CPU_STALL_DETECTOR is not set diff --git a/trunk/arch/arm/configs/onearm_defconfig b/trunk/arch/arm/configs/onearm_defconfig new file mode 100644 index 000000000000..1579857aeeaa --- /dev/null +++ b/trunk/arch/arm/configs/onearm_defconfig @@ -0,0 +1,80 @@ +CONFIG_EXPERIMENTAL=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_BLK_DEV_INITRD=y +CONFIG_EMBEDDED=y +CONFIG_SLAB=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_ARCH_AT91=y +CONFIG_MACH_ONEARM=y +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +# CONFIG_ARM_THUMB is not set +CONFIG_PCCARD=y +CONFIG_AT91_CF=y +CONFIG_LEDS=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M" +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_IPV6=y +# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET6_XFRM_MODE_TUNNEL is not set +# CONFIG_INET6_XFRM_MODE_BEET is not set +# CONFIG_IPV6_SIT is not set +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_JEDECPROBE=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_PHYSMAP=y +CONFIG_BLK_DEV_NBD=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_NETDEVICES=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +# 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_VT 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_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y +CONFIG_AT91RM9200_WATCHDOG=y +# CONFIG_USB_HID is not set +CONFIG_USB=y +CONFIG_USB_DEBUG=y +CONFIG_USB_DEVICEFS=y +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_GADGET=y +CONFIG_MMC=y +CONFIG_EXT2_FS=y +CONFIG_INOTIFY=y +CONFIG_TMPFS=y +CONFIG_CRAMFS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_ROOT_NFS=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_LL=y diff --git a/trunk/arch/arm/configs/picotux200_defconfig b/trunk/arch/arm/configs/picotux200_defconfig new file mode 100644 index 000000000000..4c9afa478d57 --- /dev/null +++ b/trunk/arch/arm/configs/picotux200_defconfig @@ -0,0 +1,242 @@ +CONFIG_EXPERIMENTAL=y +CONFIG_SYSVIPC=y +CONFIG_IKCONFIG=m +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_EMBEDDED=y +# CONFIG_KALLSYMS is not set +CONFIG_SLAB=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_ARCH_AT91=y +CONFIG_MACH_PICOTUX2XX=y +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +CONFIG_AEABI=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_KEXEC=y +CONFIG_FPE_NWFPE=y +CONFIG_BINFMT_MISC=m +CONFIG_NET=y +CONFIG_PACKET=m +CONFIG_UNIX=y +CONFIG_XFRM_USER=m +CONFIG_INET=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_DIAG=m +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_TUNNEL=m +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m +CONFIG_FW_LOADER=m +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_AMDSTD=y +CONFIG_MTD_PHYSMAP=y +CONFIG_BLK_DEV_LOOP=m +CONFIG_EEPROM_LEGACY=m +CONFIG_SCSI=m +CONFIG_BLK_DEV_SD=m +CONFIG_BLK_DEV_SR=m +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_CHR_DEV_SG=m +CONFIG_NETDEVICES=y +CONFIG_TUN=m +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_PPP=m +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +# CONFIG_VT is not set +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_GPIO=m +CONFIG_HWMON=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM9240=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +CONFIG_SENSORS_W83L785TS=m +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_NOWAYOUT=y +CONFIG_AT91RM9200_WATCHDOG=m +CONFIG_HID=m +CONFIG_USB=m +CONFIG_USB_DEVICEFS=y +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_STORAGE=m +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_PL2303=m +CONFIG_MMC=m +CONFIG_MMC_AT91=m +CONFIG_RTC_CLASS=m +CONFIG_RTC_DRV_AT91RM9200=m +CONFIG_EXT2_FS=m +CONFIG_EXT3_FS=m +# CONFIG_EXT3_FS_XATTR is not set +CONFIG_INOTIFY=y +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_UDF_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_NTFS_FS=m +CONFIG_TMPFS=y +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_SUMMARY=y +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_NFS_FS=m +CONFIG_SMB_FS=m +CONFIG_CIFS=m +CONFIG_PARTITION_ADVANCED=y +CONFIG_AMIGA_PARTITION=y +CONFIG_NLS_DEFAULT="utf-8" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_LL=y +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +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_FCRYPT=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_LIBCRC32C=m diff --git a/trunk/arch/arm/configs/yl9200_defconfig b/trunk/arch/arm/configs/yl9200_defconfig new file mode 100644 index 000000000000..30c537f61089 --- /dev/null +++ b/trunk/arch/arm/configs/yl9200_defconfig @@ -0,0 +1,137 @@ +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_ARCH_AT91=y +CONFIG_ARCH_AT91RM9200DK=y +CONFIG_MACH_YL9200=y +# CONFIG_ARM_THUMB is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,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_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_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_JEDECPROBE=y +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PLATRAM=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_ATMEL=y +CONFIG_MTD_NAND_PLATFORM=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=3 +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_MISC_DEVICES is not set +CONFIG_BLK_DEV_SD=y +CONFIG_ATA=y +CONFIG_NETDEVICES=y +CONFIG_PHYLIB=y +CONFIG_DAVICOM_PHY=y +CONFIG_NET_ETHERNET=y +CONFIG_ARM_AT91_ETHER=y +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +CONFIG_INPUT_EVDEV=y +# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ADS7846=y +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=y +# CONFIG_HW_RANDOM is not set +CONFIG_I2C=y +CONFIG_SPI=y +CONFIG_SPI_DEBUG=y +CONFIG_SPI_ATMEL=y +CONFIG_FB=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_DISPLAY_SUPPORT=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_USB=y +CONFIG_USB_DEBUG=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=y +CONFIG_USB_GADGET_M66592=y +CONFIG_USB_FILE_STORAGE=m +CONFIG_MMC=y +CONFIG_MMC_DEBUG=y +# CONFIG_MMC_BLOCK_BOUNCE is not set +CONFIG_MMC_AT91=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_RTC_CLASS=y +CONFIG_RTC_DRV_AT91RM9200=y +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT3_FS=y +CONFIG_REISERFS_FS=y +CONFIG_INOTIFY=y +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=1 +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_RUBIN=y +CONFIG_CRAMFS=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_MAC_PARTITION=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +# CONFIG_ENABLE_MUST_CHECK is not set +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_KERNEL=y +CONFIG_SLUB_DEBUG_ON=y +CONFIG_DEBUG_KOBJECT=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_LIST=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y diff --git a/trunk/arch/arm/include/asm/assembler.h b/trunk/arch/arm/include/asm/assembler.h index bc2d2d75f706..749bb6622404 100644 --- a/trunk/arch/arm/include/asm/assembler.h +++ b/trunk/arch/arm/include/asm/assembler.h @@ -18,7 +18,6 @@ #endif #include -#include /* * Endian independent macros for shifting bytes within registers. @@ -158,24 +157,16 @@ #ifdef CONFIG_SMP #define ALT_SMP(instr...) \ 9998: instr -/* - * Note: if you get assembler errors from ALT_UP() when building with - * CONFIG_THUMB2_KERNEL, you almost certainly need to use - * ALT_SMP( W(instr) ... ) - */ #define ALT_UP(instr...) \ .pushsection ".alt.smp.init", "a" ;\ .long 9998b ;\ -9997: instr ;\ - .if . - 9997b != 4 ;\ - .error "ALT_UP() content must assemble to exactly 4 bytes";\ - .endif ;\ + instr ;\ .popsection #define ALT_UP_B(label) \ .equ up_b_offset, label - 9998b ;\ .pushsection ".alt.smp.init", "a" ;\ .long 9998b ;\ - W(b) . + up_b_offset ;\ + b . + up_b_offset ;\ .popsection #else #define ALT_SMP(instr...) @@ -186,24 +177,16 @@ /* * SMP data memory barrier */ - .macro smp_dmb mode + .macro smp_dmb #ifdef CONFIG_SMP #if __LINUX_ARM_ARCH__ >= 7 - .ifeqs "\mode","arm" ALT_SMP(dmb) - .else - ALT_SMP(W(dmb)) - .endif #elif __LINUX_ARM_ARCH__ == 6 ALT_SMP(mcr p15, 0, r0, c7, c10, 5) @ dmb #else #error Incompatible SMP platform #endif - .ifeqs "\mode","arm" ALT_UP(nop) - .else - ALT_UP(W(nop)) - .endif #endif .endm @@ -223,12 +206,12 @@ */ #ifdef CONFIG_THUMB2_KERNEL - .macro usraccoff, instr, reg, ptr, inc, off, cond, abort, t=T() + .macro usraccoff, instr, reg, ptr, inc, off, cond, abort 9999: .if \inc == 1 - \instr\cond\()b\()\t\().w \reg, [\ptr, #\off] + \instr\cond\()bt \reg, [\ptr, #\off] .elseif \inc == 4 - \instr\cond\()\t\().w \reg, [\ptr, #\off] + \instr\cond\()t \reg, [\ptr, #\off] .else .error "Unsupported inc macro argument" .endif @@ -263,13 +246,13 @@ #else /* !CONFIG_THUMB2_KERNEL */ - .macro usracc, instr, reg, ptr, inc, cond, rept, abort, t=T() + .macro usracc, instr, reg, ptr, inc, cond, rept, abort .rept \rept 9999: .if \inc == 1 - \instr\cond\()b\()\t \reg, [\ptr], #\inc + \instr\cond\()bt \reg, [\ptr], #\inc .elseif \inc == 4 - \instr\cond\()\t \reg, [\ptr], #\inc + \instr\cond\()t \reg, [\ptr], #\inc .else .error "Unsupported inc macro argument" .endif diff --git a/trunk/arch/arm/include/asm/cache.h b/trunk/arch/arm/include/asm/cache.h index 75fe66bc02b4..9d6122096fbe 100644 --- a/trunk/arch/arm/include/asm/cache.h +++ b/trunk/arch/arm/include/asm/cache.h @@ -23,6 +23,4 @@ #define ARCH_SLAB_MINALIGN 8 #endif -#define __read_mostly __attribute__((__section__(".data..read_mostly"))) - #endif diff --git a/trunk/arch/arm/include/asm/clkdev.h b/trunk/arch/arm/include/asm/clkdev.h index 765d33222369..b56c1389b6fa 100644 --- a/trunk/arch/arm/include/asm/clkdev.h +++ b/trunk/arch/arm/include/asm/clkdev.h @@ -12,13 +12,23 @@ #ifndef __ASM_CLKDEV_H #define __ASM_CLKDEV_H -#include +struct clk; +struct device; -#include +struct clk_lookup { + struct list_head node; + const char *dev_id; + const char *con_id; + struct clk *clk; +}; -static inline struct clk_lookup_alloc *__clkdev_alloc(size_t size) -{ - return kzalloc(size, GFP_KERNEL); -} +struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id, + const char *dev_fmt, ...); + +void clkdev_add(struct clk_lookup *cl); +void clkdev_drop(struct clk_lookup *cl); + +void clkdev_add_table(struct clk_lookup *, size_t); +int clk_add_alias(const char *, const char *, char *, struct device *); #endif diff --git a/trunk/arch/arm/include/asm/dma-mapping.h b/trunk/arch/arm/include/asm/dma-mapping.h index 4fff837363ed..c568da7dcae4 100644 --- a/trunk/arch/arm/include/asm/dma-mapping.h +++ b/trunk/arch/arm/include/asm/dma-mapping.h @@ -5,29 +5,24 @@ #include #include -#include #include #include -#ifdef __arch_page_to_dma -#error Please update to __arch_pfn_to_dma -#endif - /* - * dma_to_pfn/pfn_to_dma/dma_to_virt/virt_to_dma are architecture private - * functions used internally by the DMA-mapping API to provide DMA - * addresses. They must not be used by drivers. + * page_to_dma/dma_to_virt/virt_to_dma are architecture private functions + * used internally by the DMA-mapping API to provide DMA addresses. They + * must not be used by drivers. */ -#ifndef __arch_pfn_to_dma -static inline dma_addr_t pfn_to_dma(struct device *dev, unsigned long pfn) +#ifndef __arch_page_to_dma +static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) { - return (dma_addr_t)__pfn_to_bus(pfn); + return (dma_addr_t)__pfn_to_bus(page_to_pfn(page)); } -static inline unsigned long dma_to_pfn(struct device *dev, dma_addr_t addr) +static inline struct page *dma_to_page(struct device *dev, dma_addr_t addr) { - return __bus_to_pfn(addr); + return pfn_to_page(__bus_to_pfn(addr)); } static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) @@ -40,14 +35,14 @@ static inline dma_addr_t virt_to_dma(struct device *dev, void *addr) return (dma_addr_t)__virt_to_bus((unsigned long)(addr)); } #else -static inline dma_addr_t pfn_to_dma(struct device *dev, unsigned long pfn) +static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) { - return __arch_pfn_to_dma(dev, pfn); + return __arch_page_to_dma(dev, page); } -static inline unsigned long dma_to_pfn(struct device *dev, dma_addr_t addr) +static inline struct page *dma_to_page(struct device *dev, dma_addr_t addr) { - return __arch_dma_to_pfn(dev, addr); + return __arch_dma_to_page(dev, addr); } static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) @@ -298,13 +293,13 @@ extern int dma_needs_bounce(struct device*, dma_addr_t, size_t); /* * The DMA API, implemented by dmabounce.c. See below for descriptions. */ -extern dma_addr_t __dma_map_single(struct device *, void *, size_t, +extern dma_addr_t dma_map_single(struct device *, void *, size_t, enum dma_data_direction); -extern void __dma_unmap_single(struct device *, dma_addr_t, size_t, +extern void dma_unmap_single(struct device *, dma_addr_t, size_t, enum dma_data_direction); -extern dma_addr_t __dma_map_page(struct device *, struct page *, +extern dma_addr_t dma_map_page(struct device *, struct page *, unsigned long, size_t, enum dma_data_direction); -extern void __dma_unmap_page(struct device *, dma_addr_t, size_t, +extern void dma_unmap_page(struct device *, dma_addr_t, size_t, enum dma_data_direction); /* @@ -328,34 +323,6 @@ static inline int dmabounce_sync_for_device(struct device *d, dma_addr_t addr, } -static inline dma_addr_t __dma_map_single(struct device *dev, void *cpu_addr, - size_t size, enum dma_data_direction dir) -{ - __dma_single_cpu_to_dev(cpu_addr, size, dir); - return virt_to_dma(dev, cpu_addr); -} - -static inline dma_addr_t __dma_map_page(struct device *dev, struct page *page, - unsigned long offset, size_t size, enum dma_data_direction dir) -{ - __dma_page_cpu_to_dev(page, offset, size, dir); - return pfn_to_dma(dev, page_to_pfn(page)) + offset; -} - -static inline void __dma_unmap_single(struct device *dev, dma_addr_t handle, - size_t size, enum dma_data_direction dir) -{ - __dma_single_dev_to_cpu(dma_to_virt(dev, handle), size, dir); -} - -static inline void __dma_unmap_page(struct device *dev, dma_addr_t handle, - size_t size, enum dma_data_direction dir) -{ - __dma_page_dev_to_cpu(pfn_to_page(dma_to_pfn(dev, handle)), - handle & ~PAGE_MASK, size, dir); -} -#endif /* CONFIG_DMABOUNCE */ - /** * dma_map_single - map a single buffer for streaming DMA * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices @@ -373,16 +340,11 @@ static inline void __dma_unmap_page(struct device *dev, dma_addr_t handle, static inline dma_addr_t dma_map_single(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir) { - dma_addr_t addr; - BUG_ON(!valid_dma_direction(dir)); - addr = __dma_map_single(dev, cpu_addr, size, dir); - debug_dma_map_page(dev, virt_to_page(cpu_addr), - (unsigned long)cpu_addr & ~PAGE_MASK, size, - dir, addr, true); + __dma_single_cpu_to_dev(cpu_addr, size, dir); - return addr; + return virt_to_dma(dev, cpu_addr); } /** @@ -402,14 +364,11 @@ static inline dma_addr_t dma_map_single(struct device *dev, void *cpu_addr, static inline dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir) { - dma_addr_t addr; - BUG_ON(!valid_dma_direction(dir)); - addr = __dma_map_page(dev, page, offset, size, dir); - debug_dma_map_page(dev, page, offset, size, dir, addr, false); + __dma_page_cpu_to_dev(page, offset, size, dir); - return addr; + return page_to_dma(dev, page) + offset; } /** @@ -429,8 +388,7 @@ static inline dma_addr_t dma_map_page(struct device *dev, struct page *page, static inline void dma_unmap_single(struct device *dev, dma_addr_t handle, size_t size, enum dma_data_direction dir) { - debug_dma_unmap_page(dev, handle, size, dir, true); - __dma_unmap_single(dev, handle, size, dir); + __dma_single_dev_to_cpu(dma_to_virt(dev, handle), size, dir); } /** @@ -450,9 +408,10 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle, static inline void dma_unmap_page(struct device *dev, dma_addr_t handle, size_t size, enum dma_data_direction dir) { - debug_dma_unmap_page(dev, handle, size, dir, false); - __dma_unmap_page(dev, handle, size, dir); + __dma_page_dev_to_cpu(dma_to_page(dev, handle), handle & ~PAGE_MASK, + size, dir); } +#endif /* CONFIG_DMABOUNCE */ /** * dma_sync_single_range_for_cpu @@ -478,8 +437,6 @@ static inline void dma_sync_single_range_for_cpu(struct device *dev, { BUG_ON(!valid_dma_direction(dir)); - debug_dma_sync_single_for_cpu(dev, handle + offset, size, dir); - if (!dmabounce_sync_for_cpu(dev, handle, offset, size, dir)) return; @@ -492,8 +449,6 @@ static inline void dma_sync_single_range_for_device(struct device *dev, { BUG_ON(!valid_dma_direction(dir)); - debug_dma_sync_single_for_device(dev, handle + offset, size, dir); - if (!dmabounce_sync_for_device(dev, handle, offset, size, dir)) return; diff --git a/trunk/arch/arm/include/asm/domain.h b/trunk/arch/arm/include/asm/domain.h index af18ceaacf5d..cc7ef4080711 100644 --- a/trunk/arch/arm/include/asm/domain.h +++ b/trunk/arch/arm/include/asm/domain.h @@ -45,17 +45,13 @@ */ #define DOMAIN_NOACCESS 0 #define DOMAIN_CLIENT 1 -#ifdef CONFIG_CPU_USE_DOMAINS #define DOMAIN_MANAGER 3 -#else -#define DOMAIN_MANAGER 1 -#endif #define domain_val(dom,type) ((type) << (2*(dom))) #ifndef __ASSEMBLY__ -#ifdef CONFIG_CPU_USE_DOMAINS +#ifdef CONFIG_MMU #define set_domain(x) \ do { \ __asm__ __volatile__( \ @@ -78,28 +74,5 @@ #define modify_domain(dom,type) do { } while (0) #endif -/* - * Generate the T (user) versions of the LDR/STR and related - * instructions (inline assembly) - */ -#ifdef CONFIG_CPU_USE_DOMAINS -#define T(instr) #instr "t" -#else -#define T(instr) #instr #endif - -#else /* __ASSEMBLY__ */ - -/* - * Generate the T (user) versions of the LDR/STR and related - * instructions - */ -#ifdef CONFIG_CPU_USE_DOMAINS -#define T(instr) instr ## t -#else -#define T(instr) instr -#endif - -#endif /* __ASSEMBLY__ */ - -#endif /* !__ASM_PROC_DOMAIN_H */ +#endif /* !__ASSEMBLY__ */ diff --git a/trunk/arch/arm/include/asm/elf.h b/trunk/arch/arm/include/asm/elf.h index c3cd8755e648..8bb66bca2e3e 100644 --- a/trunk/arch/arm/include/asm/elf.h +++ b/trunk/arch/arm/include/asm/elf.h @@ -99,8 +99,6 @@ struct elf32_hdr; extern int elf_check_arch(const struct elf32_hdr *); #define elf_check_arch elf_check_arch -#define vmcore_elf64_check_arch(x) (0) - extern int arm_elf_read_implies_exec(const struct elf32_hdr *, int); #define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(&(ex), stk) diff --git a/trunk/arch/arm/include/asm/entry-macro-multi.S b/trunk/arch/arm/include/asm/entry-macro-multi.S deleted file mode 100644 index ec0bbf79c71f..000000000000 --- a/trunk/arch/arm/include/asm/entry-macro-multi.S +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Interrupt handling. Preserves r7, r8, r9 - */ - .macro arch_irq_handler_default - get_irqnr_preamble r5, lr -1: get_irqnr_and_base r0, r6, r5, lr - movne r1, sp - @ - @ routine called with r0 = irq number, r1 = struct pt_regs * - @ - adrne lr, BSYM(1b) - bne asm_do_IRQ - -#ifdef CONFIG_SMP - /* - * XXX - * - * this macro assumes that irqstat (r6) and base (r5) are - * preserved from get_irqnr_and_base above - */ - ALT_SMP(test_for_ipi r0, r6, r5, lr) - ALT_UP_B(9997f) - movne r1, sp - adrne lr, BSYM(1b) - bne do_IPI - -#ifdef CONFIG_LOCAL_TIMERS - test_for_ltirq r0, r6, r5, lr - movne r0, sp - adrne lr, BSYM(1b) - bne do_local_timer -#endif -#endif -9997: - .endm - - .macro arch_irq_handler, symbol_name - .align 5 - .global \symbol_name -\symbol_name: - mov r4, lr - arch_irq_handler_default - mov pc, r4 - .endm diff --git a/trunk/arch/arm/include/asm/futex.h b/trunk/arch/arm/include/asm/futex.h index b33fe7065b38..540a044153a5 100644 --- a/trunk/arch/arm/include/asm/futex.h +++ b/trunk/arch/arm/include/asm/futex.h @@ -13,13 +13,12 @@ #include #include #include -#include #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ __asm__ __volatile__( \ - "1: " T(ldr) " %1, [%2]\n" \ + "1: ldrt %1, [%2]\n" \ " " insn "\n" \ - "2: " T(str) " %0, [%2]\n" \ + "2: strt %0, [%2]\n" \ " mov %0, #0\n" \ "3:\n" \ " .pushsection __ex_table,\"a\"\n" \ @@ -98,10 +97,10 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) pagefault_disable(); /* implies preempt_disable() */ __asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n" - "1: " T(ldr) " %0, [%3]\n" + "1: ldrt %0, [%3]\n" " teq %0, %1\n" " it eq @ explicit IT needed for the 2b label\n" - "2: " T(streq) " %2, [%3]\n" + "2: streqt %2, [%3]\n" "3:\n" " .pushsection __ex_table,\"a\"\n" " .align 3\n" diff --git a/trunk/arch/arm/include/asm/hardirq.h b/trunk/arch/arm/include/asm/hardirq.h index 89ad1805e579..6d7485aff955 100644 --- a/trunk/arch/arm/include/asm/hardirq.h +++ b/trunk/arch/arm/include/asm/hardirq.h @@ -5,31 +5,13 @@ #include #include -#define NR_IPI 5 - typedef struct { unsigned int __softirq_pending; -#ifdef CONFIG_LOCAL_TIMERS unsigned int local_timer_irqs; -#endif -#ifdef CONFIG_SMP - unsigned int ipi_irqs[NR_IPI]; -#endif } ____cacheline_aligned irq_cpustat_t; #include /* Standard mappings for irq_cpustat_t above */ -#define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++ -#define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member) - -#ifdef CONFIG_SMP -u64 smp_irq_stat_cpu(unsigned int cpu); -#else -#define smp_irq_stat_cpu(cpu) 0 -#endif - -#define arch_irq_stat_cpu smp_irq_stat_cpu - #if NR_IRQS > 512 #define HARDIRQ_BITS 10 #elif NR_IRQS > 256 diff --git a/trunk/arch/arm/include/asm/hardware/entry-macro-gic.S b/trunk/arch/arm/include/asm/hardware/entry-macro-gic.S deleted file mode 100644 index c115b82fe80a..000000000000 --- a/trunk/arch/arm/include/asm/hardware/entry-macro-gic.S +++ /dev/null @@ -1,75 +0,0 @@ -/* - * arch/arm/include/asm/hardware/entry-macro-gic.S - * - * Low-level IRQ helper macros for GIC - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#include - -#ifndef HAVE_GET_IRQNR_PREAMBLE - .macro get_irqnr_preamble, base, tmp - ldr \base, =gic_cpu_base_addr - ldr \base, [\base] - .endm -#endif - -/* - * The interrupt numbering scheme is defined in the - * interrupt controller spec. To wit: - * - * Interrupts 0-15 are IPI - * 16-28 are reserved - * 29-31 are local. We allow 30 to be used for the watchdog. - * 32-1020 are global - * 1021-1022 are reserved - * 1023 is "spurious" (no interrupt) - * - * For now, we ignore all local interrupts so only return an interrupt if it's - * between 30 and 1020. The test_for_ipi routine below will pick up on IPIs. - * - * A simple read from the controller will tell us the number of the highest - * priority enabled interrupt. We then just need to check whether it is in the - * valid range for an IRQ (30-1020 inclusive). - */ - - .macro get_irqnr_and_base, irqnr, irqstat, base, tmp - - ldr \irqstat, [\base, #GIC_CPU_INTACK] - /* bits 12-10 = src CPU, 9-0 = int # */ - - ldr \tmp, =1021 - bic \irqnr, \irqstat, #0x1c00 - cmp \irqnr, #29 - cmpcc \irqnr, \irqnr - cmpne \irqnr, \tmp - cmpcs \irqnr, \irqnr - .endm - -/* We assume that irqstat (the raw value of the IRQ acknowledge - * register) is preserved from the macro above. - * If there is an IPI, we immediately signal end of interrupt on the - * controller, since this requires the original irqstat value which - * we won't easily be able to recreate later. - */ - - .macro test_for_ipi, irqnr, irqstat, base, tmp - bic \irqnr, \irqstat, #0x1c00 - cmp \irqnr, #16 - strcc \irqstat, [\base, #GIC_CPU_EOI] - cmpcs \irqnr, \irqnr - .endm - -/* As above, this assumes that irqstat and base are preserved.. */ - - .macro test_for_ltirq, irqnr, irqstat, base, tmp - bic \irqnr, \irqstat, #0x1c00 - mov \tmp, #0 - cmp \irqnr, #29 - moveq \tmp, #1 - streq \irqstat, [\base, #GIC_CPU_EOI] - cmp \tmp, #0 - .endm diff --git a/trunk/arch/arm/include/asm/hardware/gic.h b/trunk/arch/arm/include/asm/hardware/gic.h index 84557d321001..7f34333bb545 100644 --- a/trunk/arch/arm/include/asm/hardware/gic.h +++ b/trunk/arch/arm/include/asm/hardware/gic.h @@ -33,13 +33,10 @@ #define GIC_DIST_SOFTINT 0xf00 #ifndef __ASSEMBLY__ -extern void __iomem *gic_cpu_base_addr; - -void gic_init(unsigned int, unsigned int, void __iomem *, void __iomem *); -void gic_secondary_init(unsigned int); +void gic_dist_init(unsigned int gic_nr, void __iomem *base, unsigned int irq_start); +void gic_cpu_init(unsigned int gic_nr, void __iomem *base); void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); void gic_raise_softirq(const struct cpumask *mask, unsigned int irq); -void gic_enable_ppi(unsigned int); #endif #endif diff --git a/trunk/arch/arm/include/asm/hardware/it8152.h b/trunk/arch/arm/include/asm/hardware/it8152.h index b2f95c72287c..21fa272301f8 100644 --- a/trunk/arch/arm/include/asm/hardware/it8152.h +++ b/trunk/arch/arm/include/asm/hardware/it8152.h @@ -76,7 +76,6 @@ extern unsigned long it8152_base_address; IT8152_PD_IRQ(0) Audio controller (ACR) */ #define IT8152_IRQ(x) (IRQ_BOARD_START + (x)) -#define IT8152_LAST_IRQ (IRQ_BOARD_START + 40) /* IRQ-sources in 3 groups - local devices, LPC (serial), and external PCI */ #define IT8152_LD_IRQ_COUNT 9 diff --git a/trunk/arch/arm/include/asm/highmem.h b/trunk/arch/arm/include/asm/highmem.h index 7080e2c8fa62..1fc684e70ab6 100644 --- a/trunk/arch/arm/include/asm/highmem.h +++ b/trunk/arch/arm/include/asm/highmem.h @@ -25,6 +25,9 @@ extern void *kmap_high(struct page *page); extern void *kmap_high_get(struct page *page); extern void kunmap_high(struct page *page); +extern void *kmap_high_l1_vipt(struct page *page, pte_t *saved_pte); +extern void kunmap_high_l1_vipt(struct page *page, pte_t saved_pte); + /* * The following functions are already defined by * when CONFIG_HIGHMEM is not set. diff --git a/trunk/arch/arm/include/asm/io.h b/trunk/arch/arm/include/asm/io.h index 20e0f7c9e03e..815efa2d4e07 100644 --- a/trunk/arch/arm/include/asm/io.h +++ b/trunk/arch/arm/include/asm/io.h @@ -241,15 +241,18 @@ extern void _memset_io(volatile void __iomem *, int, size_t); * */ #ifndef __arch_ioremap -#define __arch_ioremap __arm_ioremap -#define __arch_iounmap __iounmap -#endif - +#define ioremap(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE) +#define ioremap_nocache(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE) +#define ioremap_cached(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE_CACHED) +#define ioremap_wc(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE_WC) +#define iounmap(cookie) __iounmap(cookie) +#else #define ioremap(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE) #define ioremap_nocache(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE) #define ioremap_cached(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE_CACHED) #define ioremap_wc(cookie,size) __arch_ioremap((cookie), (size), MT_DEVICE_WC) -#define iounmap __arch_iounmap +#define iounmap(cookie) __arch_iounmap(cookie) +#endif /* * io{read,write}{8,16,32} macros diff --git a/trunk/arch/arm/include/asm/kexec.h b/trunk/arch/arm/include/asm/kexec.h index c0094d8edae4..8ec9ef5c3c7b 100644 --- a/trunk/arch/arm/include/asm/kexec.h +++ b/trunk/arch/arm/include/asm/kexec.h @@ -33,20 +33,10 @@ static inline void crash_setup_regs(struct pt_regs *newregs, if (oldregs) { memcpy(newregs, oldregs, sizeof(*newregs)); } else { - __asm__ __volatile__ ( - "stmia %[regs_base], {r0-r12}\n\t" - "mov %[_ARM_sp], sp\n\t" - "str lr, %[_ARM_lr]\n\t" - "adr %[_ARM_pc], 1f\n\t" - "mrs %[_ARM_cpsr], cpsr\n\t" - "1:" - : [_ARM_pc] "=r" (newregs->ARM_pc), - [_ARM_cpsr] "=r" (newregs->ARM_cpsr), - [_ARM_sp] "=r" (newregs->ARM_sp), - [_ARM_lr] "=o" (newregs->ARM_lr) - : [regs_base] "r" (&newregs->ARM_r0) - : "memory" - ); + __asm__ __volatile__ ("stmia %0, {r0 - r15}" + : : "r" (&newregs->ARM_r0)); + __asm__ __volatile__ ("mrs %0, cpsr" + : "=r" (newregs->ARM_cpsr)); } } diff --git a/trunk/arch/arm/include/asm/localtimer.h b/trunk/arch/arm/include/asm/localtimer.h index 6bc63ab498ce..50c7e7cfd670 100644 --- a/trunk/arch/arm/include/asm/localtimer.h +++ b/trunk/arch/arm/include/asm/localtimer.h @@ -30,6 +30,7 @@ asmlinkage void do_local_timer(struct pt_regs *); #include "smp_twd.h" #define local_timer_ack() twd_timer_ack() +#define local_timer_stop() twd_timer_stop() #else @@ -39,6 +40,11 @@ asmlinkage void do_local_timer(struct pt_regs *); */ int local_timer_ack(void); +/* + * Stop a local timer interrupt. + */ +void local_timer_stop(void); + #endif /* @@ -46,6 +52,12 @@ int local_timer_ack(void); */ void local_timer_setup(struct clock_event_device *); +#else + +static inline void local_timer_stop(void) +{ +} + #endif #endif diff --git a/trunk/arch/arm/include/asm/mach/arch.h b/trunk/arch/arm/include/asm/mach/arch.h index 3a0893a76a3b..d97a964207fa 100644 --- a/trunk/arch/arm/include/asm/mach/arch.h +++ b/trunk/arch/arm/include/asm/mach/arch.h @@ -37,20 +37,11 @@ struct machine_desc { struct meminfo *); void (*reserve)(void);/* reserve mem blocks */ void (*map_io)(void);/* IO mapping function */ - void (*init_early)(void); void (*init_irq)(void); struct sys_timer *timer; /* system tick timer */ void (*init_machine)(void); -#ifdef CONFIG_MULTI_IRQ_HANDLER - void (*handle_irq)(struct pt_regs *); -#endif }; -/* - * Current machine - only accessible during boot. - */ -extern struct machine_desc *machine_desc; - /* * Set of macros to define architecture features. This is built into * a table by the linker. diff --git a/trunk/arch/arm/include/asm/mach/irq.h b/trunk/arch/arm/include/asm/mach/irq.h index 22ac140edd9e..ce3eee9fe26c 100644 --- a/trunk/arch/arm/include/asm/mach/irq.h +++ b/trunk/arch/arm/include/asm/mach/irq.h @@ -17,12 +17,10 @@ struct seq_file; /* * This is internal. Do not use it. */ +extern unsigned int arch_nr_irqs; +extern void (*init_arch_irq)(void); extern void init_FIQ(void); -extern int show_fiq_list(struct seq_file *, int); - -#ifdef CONFIG_MULTI_IRQ_HANDLER -extern void (*handle_arch_irq)(struct pt_regs *); -#endif +extern int show_fiq_list(struct seq_file *, void *); /* * This is for easy migration, but should be changed in the source diff --git a/trunk/arch/arm/include/asm/mach/time.h b/trunk/arch/arm/include/asm/mach/time.h index 883f6be5117a..35d408f6dccf 100644 --- a/trunk/arch/arm/include/asm/mach/time.h +++ b/trunk/arch/arm/include/asm/mach/time.h @@ -43,6 +43,7 @@ struct sys_timer { #endif }; +extern struct sys_timer *system_timer; extern void timer_tick(void); #endif diff --git a/trunk/arch/arm/include/asm/module.h b/trunk/arch/arm/include/asm/module.h index 12c8e680cbff..cbb0bc295d2b 100644 --- a/trunk/arch/arm/include/asm/module.h +++ b/trunk/arch/arm/include/asm/module.h @@ -8,6 +8,11 @@ struct unwind_table; #ifdef CONFIG_ARM_UNWIND +struct arm_unwind_mapping { + Elf_Shdr *unw_sec; + Elf_Shdr *sec_text; + struct unwind_table *unwind; +}; enum { ARM_SEC_INIT, ARM_SEC_DEVINIT, @@ -16,13 +21,13 @@ enum { ARM_SEC_DEVEXIT, ARM_SEC_MAX, }; -#endif - struct mod_arch_specific { -#ifdef CONFIG_ARM_UNWIND - struct unwind_table *unwind[ARM_SEC_MAX]; -#endif + struct arm_unwind_mapping map[ARM_SEC_MAX]; +}; +#else +struct mod_arch_specific { }; +#endif /* * Include the ARM architecture version. diff --git a/trunk/arch/arm/include/asm/page.h b/trunk/arch/arm/include/asm/page.h index f51a69595f6e..a485ac3c8696 100644 --- a/trunk/arch/arm/include/asm/page.h +++ b/trunk/arch/arm/include/asm/page.h @@ -151,15 +151,13 @@ extern void __cpu_copy_user_highpage(struct page *to, struct page *from, #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) extern void copy_page(void *to, const void *from); -typedef unsigned long pteval_t; - #undef STRICT_MM_TYPECHECKS #ifdef STRICT_MM_TYPECHECKS /* * These are used to make use of C type-checking.. */ -typedef struct { pteval_t pte; } pte_t; +typedef struct { unsigned long pte; } pte_t; typedef struct { unsigned long pmd; } pmd_t; typedef struct { unsigned long pgd[2]; } pgd_t; typedef struct { unsigned long pgprot; } pgprot_t; @@ -177,7 +175,7 @@ typedef struct { unsigned long pgprot; } pgprot_t; /* * .. while these make it easier on the compiler */ -typedef pteval_t pte_t; +typedef unsigned long pte_t; typedef unsigned long pmd_t; typedef unsigned long pgd_t[2]; typedef unsigned long pgprot_t; diff --git a/trunk/arch/arm/include/asm/pgalloc.h b/trunk/arch/arm/include/asm/pgalloc.h index 9763be04f77e..b12cc98bbe04 100644 --- a/trunk/arch/arm/include/asm/pgalloc.h +++ b/trunk/arch/arm/include/asm/pgalloc.h @@ -30,15 +30,13 @@ #define pmd_free(mm, pmd) do { } while (0) #define pgd_populate(mm,pmd,pte) BUG() -extern pgd_t *pgd_alloc(struct mm_struct *mm); -extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); +extern pgd_t *get_pgd_slow(struct mm_struct *mm); +extern void free_pgd_slow(struct mm_struct *mm, pgd_t *pgd); -#define PGALLOC_GFP (GFP_KERNEL | __GFP_NOTRACK | __GFP_REPEAT | __GFP_ZERO) +#define pgd_alloc(mm) get_pgd_slow(mm) +#define pgd_free(mm, pgd) free_pgd_slow(mm, pgd) -static inline void clean_pte_table(pte_t *pte) -{ - clean_dcache_area(pte + PTE_HWTABLE_PTRS, PTE_HWTABLE_SIZE); -} +#define PGALLOC_GFP (GFP_KERNEL | __GFP_NOTRACK | __GFP_REPEAT | __GFP_ZERO) /* * Allocate one PTE table. @@ -47,14 +45,14 @@ static inline void clean_pte_table(pte_t *pte) * into one table thus: * * +------------+ - * | Linux pt 0 | - * +------------+ - * | Linux pt 1 | - * +------------+ * | h/w pt 0 | * +------------+ * | h/w pt 1 | * +------------+ + * | Linux pt 0 | + * +------------+ + * | Linux pt 1 | + * +------------+ */ static inline pte_t * pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) @@ -62,8 +60,10 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) pte_t *pte; pte = (pte_t *)__get_free_page(PGALLOC_GFP); - if (pte) - clean_pte_table(pte); + if (pte) { + clean_dcache_area(pte, sizeof(pte_t) * PTRS_PER_PTE); + pte += PTRS_PER_PTE; + } return pte; } @@ -79,8 +79,10 @@ pte_alloc_one(struct mm_struct *mm, unsigned long addr) pte = alloc_pages(PGALLOC_GFP, 0); #endif if (pte) { - if (!PageHighMem(pte)) - clean_pte_table(page_address(pte)); + if (!PageHighMem(pte)) { + void *page = page_address(pte); + clean_dcache_area(page, sizeof(pte_t) * PTRS_PER_PTE); + } pgtable_page_ctor(pte); } @@ -92,8 +94,10 @@ pte_alloc_one(struct mm_struct *mm, unsigned long addr) */ static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) { - if (pte) + if (pte) { + pte -= PTRS_PER_PTE; free_page((unsigned long)pte); + } } static inline void pte_free(struct mm_struct *mm, pgtable_t pte) @@ -102,10 +106,8 @@ static inline void pte_free(struct mm_struct *mm, pgtable_t pte) __free_page(pte); } -static inline void __pmd_populate(pmd_t *pmdp, phys_addr_t pte, - unsigned long prot) +static inline void __pmd_populate(pmd_t *pmdp, unsigned long pmdval) { - unsigned long pmdval = (pte + PTE_HWTABLE_OFF) | prot; pmdp[0] = __pmd(pmdval); pmdp[1] = __pmd(pmdval + 256 * sizeof(pte_t)); flush_pmd_entry(pmdp); @@ -120,16 +122,20 @@ static inline void __pmd_populate(pmd_t *pmdp, phys_addr_t pte, static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *ptep) { + unsigned long pte_ptr = (unsigned long)ptep; + /* - * The pmd must be loaded with the physical address of the PTE table + * The pmd must be loaded with the physical + * address of the PTE table */ - __pmd_populate(pmdp, __pa(ptep), _PAGE_KERNEL_TABLE); + pte_ptr -= PTRS_PER_PTE * sizeof(void *); + __pmd_populate(pmdp, __pa(pte_ptr) | _PAGE_KERNEL_TABLE); } static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, pgtable_t ptep) { - __pmd_populate(pmdp, page_to_phys(ptep), _PAGE_USER_TABLE); + __pmd_populate(pmdp, page_to_pfn(ptep) << PAGE_SHIFT | _PAGE_USER_TABLE); } #define pmd_pgtable(pmd) pmd_page(pmd) diff --git a/trunk/arch/arm/include/asm/pgtable.h b/trunk/arch/arm/include/asm/pgtable.h index ebcb6432f45f..53d1d5deb111 100644 --- a/trunk/arch/arm/include/asm/pgtable.h +++ b/trunk/arch/arm/include/asm/pgtable.h @@ -10,7 +10,6 @@ #ifndef _ASMARM_PGTABLE_H #define _ASMARM_PGTABLE_H -#include #include #include @@ -55,7 +54,7 @@ * Therefore, we tweak the implementation slightly - we tell Linux that we * have 2048 entries in the first level, each of which is 8 bytes (iow, two * hardware pointers to the second level.) The second level contains two - * hardware PTE tables arranged contiguously, preceded by Linux versions + * hardware PTE tables arranged contiguously, followed by Linux versions * which contain the state information Linux needs. We, therefore, end up * with 512 entries in the "PTE" level. * @@ -63,15 +62,15 @@ * * pgd pte * | | - * +--------+ - * | | +------------+ +0 - * +- - - - + | Linux pt 0 | - * | | +------------+ +1024 - * +--------+ +0 | Linux pt 1 | - * | |-----> +------------+ +2048 + * +--------+ +0 + * | |-----> +------------+ +0 * +- - - - + +4 | h/w pt 0 | - * | |-----> +------------+ +3072 + * | |-----> +------------+ +1024 * +--------+ +8 | h/w pt 1 | + * | | +------------+ +2048 + * +- - - - + | Linux pt 0 | + * | | +------------+ +3072 + * +--------+ | Linux pt 1 | * | | +------------+ +4096 * * See L_PTE_xxx below for definitions of bits in the "Linux pt", and @@ -103,10 +102,6 @@ #define PTRS_PER_PMD 1 #define PTRS_PER_PGD 2048 -#define PTE_HWTABLE_PTRS (PTRS_PER_PTE) -#define PTE_HWTABLE_OFF (PTE_HWTABLE_PTRS * sizeof(pte_t)) -#define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u32)) - /* * PMD_SHIFT determines the size of the area a second-level page table can map * PGDIR_SHIFT determines what a third-level page table entry can map @@ -117,13 +112,13 @@ #define LIBRARY_TEXT_START 0x0c000000 #ifndef __ASSEMBLY__ -extern void __pte_error(const char *file, int line, pte_t); -extern void __pmd_error(const char *file, int line, pmd_t); -extern void __pgd_error(const char *file, int line, pgd_t); +extern void __pte_error(const char *file, int line, unsigned long val); +extern void __pmd_error(const char *file, int line, unsigned long val); +extern void __pgd_error(const char *file, int line, unsigned long val); -#define pte_ERROR(pte) __pte_error(__FILE__, __LINE__, pte) -#define pmd_ERROR(pmd) __pmd_error(__FILE__, __LINE__, pmd) -#define pgd_ERROR(pgd) __pgd_error(__FILE__, __LINE__, pgd) +#define pte_ERROR(pte) __pte_error(__FILE__, __LINE__, pte_val(pte)) +#define pmd_ERROR(pmd) __pmd_error(__FILE__, __LINE__, pmd_val(pmd)) +#define pgd_ERROR(pgd) __pgd_error(__FILE__, __LINE__, pgd_val(pgd)) #endif /* !__ASSEMBLY__ */ #define PMD_SIZE (1UL << PMD_SHIFT) @@ -138,7 +133,8 @@ extern void __pgd_error(const char *file, int line, pgd_t); */ #define FIRST_USER_ADDRESS PAGE_SIZE -#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE) +#define FIRST_USER_PGD_NR 1 +#define USER_PTRS_PER_PGD ((TASK_SIZE/PGDIR_SIZE) - FIRST_USER_PGD_NR) /* * section address mask and size definitions. @@ -165,30 +161,30 @@ extern void __pgd_error(const char *file, int line, pgd_t); * The PTE table pointer refers to the hardware entries; the "Linux" * entries are stored 1024 bytes below. */ -#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 */ -#define L_PTE_DIRTY (_AT(pteval_t, 1) << 6) -#define L_PTE_RDONLY (_AT(pteval_t, 1) << 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_PRESENT (1 << 0) +#define L_PTE_YOUNG (1 << 1) +#define L_PTE_FILE (1 << 2) /* only when !PRESENT */ +#define L_PTE_DIRTY (1 << 6) +#define L_PTE_WRITE (1 << 7) +#define L_PTE_USER (1 << 8) +#define L_PTE_EXEC (1 << 9) +#define L_PTE_SHARED (1 << 10) /* shared(v6), coherent(xsc3) */ /* * These are the memory types, defined to be compatible with * pre-ARMv6 CPUs cacheable and bufferable bits: XXCB */ -#define L_PTE_MT_UNCACHED (_AT(pteval_t, 0x00) << 2) /* 0000 */ -#define L_PTE_MT_BUFFERABLE (_AT(pteval_t, 0x01) << 2) /* 0001 */ -#define L_PTE_MT_WRITETHROUGH (_AT(pteval_t, 0x02) << 2) /* 0010 */ -#define L_PTE_MT_WRITEBACK (_AT(pteval_t, 0x03) << 2) /* 0011 */ -#define L_PTE_MT_MINICACHE (_AT(pteval_t, 0x06) << 2) /* 0110 (sa1100, xscale) */ -#define L_PTE_MT_WRITEALLOC (_AT(pteval_t, 0x07) << 2) /* 0111 */ -#define L_PTE_MT_DEV_SHARED (_AT(pteval_t, 0x04) << 2) /* 0100 */ -#define L_PTE_MT_DEV_NONSHARED (_AT(pteval_t, 0x0c) << 2) /* 1100 */ -#define L_PTE_MT_DEV_WC (_AT(pteval_t, 0x09) << 2) /* 1001 */ -#define L_PTE_MT_DEV_CACHED (_AT(pteval_t, 0x0b) << 2) /* 1011 */ -#define L_PTE_MT_MASK (_AT(pteval_t, 0x0f) << 2) +#define L_PTE_MT_UNCACHED (0x00 << 2) /* 0000 */ +#define L_PTE_MT_BUFFERABLE (0x01 << 2) /* 0001 */ +#define L_PTE_MT_WRITETHROUGH (0x02 << 2) /* 0010 */ +#define L_PTE_MT_WRITEBACK (0x03 << 2) /* 0011 */ +#define L_PTE_MT_MINICACHE (0x06 << 2) /* 0110 (sa1100, xscale) */ +#define L_PTE_MT_WRITEALLOC (0x07 << 2) /* 0111 */ +#define L_PTE_MT_DEV_SHARED (0x04 << 2) /* 0100 */ +#define L_PTE_MT_DEV_NONSHARED (0x0c << 2) /* 1100 */ +#define L_PTE_MT_DEV_WC (0x09 << 2) /* 1001 */ +#define L_PTE_MT_DEV_CACHED (0x0b << 2) /* 1011 */ +#define L_PTE_MT_MASK (0x0f << 2) #ifndef __ASSEMBLY__ @@ -205,44 +201,23 @@ 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_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) -#define PAGE_COPY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_RDONLY) -#define PAGE_READONLY _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_RDONLY | L_PTE_XN) -#define PAGE_READONLY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_RDONLY) -#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_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) -#define __PAGE_COPY_EXEC __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_RDONLY) -#define __PAGE_READONLY __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_RDONLY | L_PTE_XN) -#define __PAGE_READONLY_EXEC __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_RDONLY) - -#define __pgprot_modify(prot,mask,bits) \ - __pgprot((pgprot_val(prot) & ~(mask)) | (bits)) - -#define pgprot_noncached(prot) \ - __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_UNCACHED) - -#define pgprot_writecombine(prot) \ - __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_BUFFERABLE) - -#ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE -#define pgprot_dmacoherent(prot) \ - __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_BUFFERABLE | L_PTE_XN) -#define __HAVE_PHYS_MEM_ACCESS_PROT -struct file; -extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, - unsigned long size, pgprot_t vma_prot); -#else -#define pgprot_dmacoherent(prot) \ - __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_UNCACHED | L_PTE_XN) -#endif +#define PAGE_NONE pgprot_user +#define PAGE_SHARED _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_WRITE) +#define PAGE_SHARED_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_WRITE | L_PTE_EXEC) +#define PAGE_COPY _MOD_PROT(pgprot_user, L_PTE_USER) +#define PAGE_COPY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_EXEC) +#define PAGE_READONLY _MOD_PROT(pgprot_user, L_PTE_USER) +#define PAGE_READONLY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_EXEC) +#define PAGE_KERNEL pgprot_kernel +#define PAGE_KERNEL_EXEC _MOD_PROT(pgprot_kernel, L_PTE_EXEC) + +#define __PAGE_NONE __pgprot(_L_PTE_DEFAULT) +#define __PAGE_SHARED __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_WRITE) +#define __PAGE_SHARED_EXEC __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_WRITE | L_PTE_EXEC) +#define __PAGE_COPY __pgprot(_L_PTE_DEFAULT | L_PTE_USER) +#define __PAGE_COPY_EXEC __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_EXEC) +#define __PAGE_READONLY __pgprot(_L_PTE_DEFAULT | L_PTE_USER) +#define __PAGE_READONLY_EXEC __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_EXEC) #endif /* __ASSEMBLY__ */ @@ -280,84 +255,26 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, extern struct page *empty_zero_page; #define ZERO_PAGE(vaddr) (empty_zero_page) +#define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) +#define pfn_pte(pfn,prot) (__pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))) -extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; - -/* to find an entry in a page-table-directory */ -#define pgd_index(addr) ((addr) >> PGDIR_SHIFT) - -#define pgd_offset(mm, addr) ((mm)->pgd + pgd_index(addr)) - -/* to find an entry in a kernel page-table-directory */ -#define pgd_offset_k(addr) pgd_offset(&init_mm, addr) - -/* - * The "pgd_xxx()" functions here are trivial for a folded two-level - * setup: the pgd is never bad, and a pmd always exists (as it's folded - * into the pgd entry) - */ -#define pgd_none(pgd) (0) -#define pgd_bad(pgd) (0) -#define pgd_present(pgd) (1) -#define pgd_clear(pgdp) do { } while (0) -#define set_pgd(pgd,pgdp) do { } while (0) - - -/* Find an entry in the second-level page table.. */ -#define pmd_offset(dir, addr) ((pmd_t *)(dir)) - -#define pmd_none(pmd) (!pmd_val(pmd)) -#define pmd_present(pmd) (pmd_val(pmd)) -#define pmd_bad(pmd) (pmd_val(pmd) & 2) - -#define copy_pmd(pmdpd,pmdps) \ - do { \ - pmdpd[0] = pmdps[0]; \ - pmdpd[1] = pmdps[1]; \ - flush_pmd_entry(pmdpd); \ - } while (0) - -#define pmd_clear(pmdp) \ - do { \ - pmdp[0] = __pmd(0); \ - pmdp[1] = __pmd(0); \ - clean_pmd_entry(pmdp); \ - } while (0) - -static inline pte_t *pmd_page_vaddr(pmd_t pmd) -{ - return __va(pmd_val(pmd) & PAGE_MASK); -} - -#define pmd_page(pmd) pfn_to_page(__phys_to_pfn(pmd_val(pmd))) - -/* we don't need complex calculations here as the pmd is folded into the pgd */ -#define pmd_addr_end(addr,end) (end) +#define pte_none(pte) (!pte_val(pte)) +#define pte_clear(mm,addr,ptep) set_pte_ext(ptep, __pte(0), 0) +#define pte_page(pte) (pfn_to_page(pte_pfn(pte))) +#define pte_offset_kernel(dir,addr) (pmd_page_vaddr(*(dir)) + __pte_index(addr)) +#define pte_offset_map(dir,addr) (__pte_map(dir) + __pte_index(addr)) +#define pte_unmap(pte) __pte_unmap(pte) #ifndef CONFIG_HIGHPTE -#define __pte_map(pmd) pmd_page_vaddr(*(pmd)) +#define __pte_map(dir) pmd_page_vaddr(*(dir)) #define __pte_unmap(pte) do { } while (0) #else -#define __pte_map(pmd) (pte_t *)kmap_atomic(pmd_page(*(pmd))) -#define __pte_unmap(pte) kunmap_atomic(pte) +#define __pte_map(dir) ((pte_t *)kmap_atomic(pmd_page(*(dir))) + PTRS_PER_PTE) +#define __pte_unmap(pte) kunmap_atomic((pte - PTRS_PER_PTE)) #endif -#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) - -#define pte_offset_kernel(pmd,addr) (pmd_page_vaddr(*(pmd)) + pte_index(addr)) - -#define pte_offset_map(pmd,addr) (__pte_map(pmd) + pte_index(addr)) -#define pte_unmap(pte) __pte_unmap(pte) - -#define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) -#define pfn_pte(pfn,prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) - -#define pte_page(pte) pfn_to_page(pte_pfn(pte)) -#define mk_pte(page,prot) pfn_pte(page_to_pfn(page), prot) - #define set_pte_ext(ptep,pte,ext) cpu_set_pte_ext(ptep,pte,ext) -#define pte_clear(mm,addr,ptep) set_pte_ext(ptep, __pte(0), 0) #if __LINUX_ARM_ARCH__ < 6 static inline void __sync_icache_dcache(pte_t pteval) @@ -378,12 +295,15 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, } } -#define pte_none(pte) (!pte_val(pte)) +/* + * The following only work if pte_present() is true. + * Undefined behaviour if not.. + */ #define pte_present(pte) (pte_val(pte) & L_PTE_PRESENT) -#define pte_write(pte) (!(pte_val(pte) & L_PTE_RDONLY)) +#define pte_write(pte) (pte_val(pte) & L_PTE_WRITE) #define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY) #define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) -#define pte_exec(pte) (!(pte_val(pte) & L_PTE_XN)) +#define pte_exec(pte) (pte_val(pte) & L_PTE_EXEC) #define pte_special(pte) (0) #define pte_present_user(pte) \ @@ -393,8 +313,8 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, #define PTE_BIT_FUNC(fn,op) \ static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; } -PTE_BIT_FUNC(wrprotect, |= L_PTE_RDONLY); -PTE_BIT_FUNC(mkwrite, &= ~L_PTE_RDONLY); +PTE_BIT_FUNC(wrprotect, &= ~L_PTE_WRITE); +PTE_BIT_FUNC(mkwrite, |= L_PTE_WRITE); PTE_BIT_FUNC(mkclean, &= ~L_PTE_DIRTY); PTE_BIT_FUNC(mkdirty, |= L_PTE_DIRTY); PTE_BIT_FUNC(mkold, &= ~L_PTE_YOUNG); @@ -402,13 +322,101 @@ PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG); static inline pte_t pte_mkspecial(pte_t pte) { return pte; } +#define __pgprot_modify(prot,mask,bits) \ + __pgprot((pgprot_val(prot) & ~(mask)) | (bits)) + +/* + * Mark the prot value as uncacheable and unbufferable. + */ +#define pgprot_noncached(prot) \ + __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_UNCACHED) +#define pgprot_writecombine(prot) \ + __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_BUFFERABLE) +#ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE +#define pgprot_dmacoherent(prot) \ + __pgprot_modify(prot, L_PTE_MT_MASK|L_PTE_EXEC, L_PTE_MT_BUFFERABLE) +#define __HAVE_PHYS_MEM_ACCESS_PROT +struct file; +extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, + unsigned long size, pgprot_t vma_prot); +#else +#define pgprot_dmacoherent(prot) \ + __pgprot_modify(prot, L_PTE_MT_MASK|L_PTE_EXEC, L_PTE_MT_UNCACHED) +#endif + +#define pmd_none(pmd) (!pmd_val(pmd)) +#define pmd_present(pmd) (pmd_val(pmd)) +#define pmd_bad(pmd) (pmd_val(pmd) & 2) + +#define copy_pmd(pmdpd,pmdps) \ + do { \ + pmdpd[0] = pmdps[0]; \ + pmdpd[1] = pmdps[1]; \ + flush_pmd_entry(pmdpd); \ + } while (0) + +#define pmd_clear(pmdp) \ + do { \ + pmdp[0] = __pmd(0); \ + pmdp[1] = __pmd(0); \ + clean_pmd_entry(pmdp); \ + } while (0) + +static inline pte_t *pmd_page_vaddr(pmd_t pmd) +{ + unsigned long ptr; + + ptr = pmd_val(pmd) & ~(PTRS_PER_PTE * sizeof(void *) - 1); + ptr += PTRS_PER_PTE * sizeof(void *); + + return __va(ptr); +} + +#define pmd_page(pmd) pfn_to_page(__phys_to_pfn(pmd_val(pmd))) + +/* we don't need complex calculations here as the pmd is folded into the pgd */ +#define pmd_addr_end(addr,end) (end) + +/* + * Conversion functions: convert a page and protection to a page entry, + * and a page entry and page directory to the page they refer to. + */ +#define mk_pte(page,prot) pfn_pte(page_to_pfn(page),prot) + +/* + * The "pgd_xxx()" functions here are trivial for a folded two-level + * setup: the pgd is never bad, and a pmd always exists (as it's folded + * into the pgd entry) + */ +#define pgd_none(pgd) (0) +#define pgd_bad(pgd) (0) +#define pgd_present(pgd) (1) +#define pgd_clear(pgdp) do { } while (0) +#define set_pgd(pgd,pgdp) do { } while (0) + +/* to find an entry in a page-table-directory */ +#define pgd_index(addr) ((addr) >> PGDIR_SHIFT) + +#define pgd_offset(mm, addr) ((mm)->pgd+pgd_index(addr)) + +/* to find an entry in a kernel page-table-directory */ +#define pgd_offset_k(addr) pgd_offset(&init_mm, addr) + +/* Find an entry in the second-level page table.. */ +#define pmd_offset(dir, addr) ((pmd_t *)(dir)) + +/* Find an entry in the third-level page table.. */ +#define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) + 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 unsigned long mask = L_PTE_EXEC | L_PTE_WRITE | L_PTE_USER; pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); return pte; } +extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; + /* * Encode and decode a swap entry. Swap entries are stored in the Linux * page tables as follows: @@ -473,9 +481,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) #define pgtable_cache_init() do { } while (0) -void identity_mapping_add(pgd_t *, unsigned long, unsigned long); -void identity_mapping_del(pgd_t *, unsigned long, unsigned long); - #endif /* !__ASSEMBLY__ */ #endif /* CONFIG_MMU */ diff --git a/trunk/arch/arm/include/asm/sched_clock.h b/trunk/arch/arm/include/asm/sched_clock.h deleted file mode 100644 index a84628be1a7b..000000000000 --- a/trunk/arch/arm/include/asm/sched_clock.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * sched_clock.h: support for extending counters to full 64-bit ns counter - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#ifndef ASM_SCHED_CLOCK -#define ASM_SCHED_CLOCK - -#include -#include - -struct clock_data { - u64 epoch_ns; - u32 epoch_cyc; - u32 epoch_cyc_copy; - u32 mult; - u32 shift; -}; - -#define DEFINE_CLOCK_DATA(name) struct clock_data name - -static inline u64 cyc_to_ns(u64 cyc, u32 mult, u32 shift) -{ - return (cyc * mult) >> shift; -} - -/* - * Atomically update the sched_clock epoch. Your update callback will - * be called from a timer before the counter wraps - read the current - * counter value, and call this function to safely move the epochs - * forward. Only use this from the update callback. - */ -static inline void update_sched_clock(struct clock_data *cd, u32 cyc, u32 mask) -{ - unsigned long flags; - u64 ns = cd->epoch_ns + - cyc_to_ns((cyc - cd->epoch_cyc) & mask, cd->mult, cd->shift); - - /* - * Write epoch_cyc and epoch_ns in a way that the update is - * detectable in cyc_to_fixed_sched_clock(). - */ - raw_local_irq_save(flags); - cd->epoch_cyc = cyc; - smp_wmb(); - cd->epoch_ns = ns; - smp_wmb(); - cd->epoch_cyc_copy = cyc; - raw_local_irq_restore(flags); -} - -/* - * If your clock rate is known at compile time, using this will allow - * you to optimize the mult/shift loads away. This is paired with - * init_fixed_sched_clock() to ensure that your mult/shift are correct. - */ -static inline unsigned long long cyc_to_fixed_sched_clock(struct clock_data *cd, - u32 cyc, u32 mask, u32 mult, u32 shift) -{ - u64 epoch_ns; - u32 epoch_cyc; - - /* - * Load the epoch_cyc and epoch_ns atomically. We do this by - * ensuring that we always write epoch_cyc, epoch_ns and - * epoch_cyc_copy in strict order, and read them in strict order. - * If epoch_cyc and epoch_cyc_copy are not equal, then we're in - * the middle of an update, and we should repeat the load. - */ - do { - epoch_cyc = cd->epoch_cyc; - smp_rmb(); - epoch_ns = cd->epoch_ns; - smp_rmb(); - } while (epoch_cyc != cd->epoch_cyc_copy); - - return epoch_ns + cyc_to_ns((cyc - epoch_cyc) & mask, mult, shift); -} - -/* - * Otherwise, you need to use this, which will obtain the mult/shift - * from the clock_data structure. Use init_sched_clock() with this. - */ -static inline unsigned long long cyc_to_sched_clock(struct clock_data *cd, - u32 cyc, u32 mask) -{ - return cyc_to_fixed_sched_clock(cd, cyc, mask, cd->mult, cd->shift); -} - -/* - * Initialize the clock data - calculate the appropriate multiplier - * and shift. Also setup a timer to ensure that the epoch is refreshed - * at the appropriate time interval, which will call your update - * handler. - */ -void init_sched_clock(struct clock_data *, void (*)(void), - unsigned int, unsigned long); - -/* - * Use this initialization function rather than init_sched_clock() if - * you're using cyc_to_fixed_sched_clock, which will warn if your - * constants are incorrect. - */ -static inline void init_fixed_sched_clock(struct clock_data *cd, - void (*update)(void), unsigned int bits, unsigned long rate, - u32 mult, u32 shift) -{ - init_sched_clock(cd, update, bits, rate); - if (cd->mult != mult || cd->shift != shift) { - pr_crit("sched_clock: wrong multiply/shift: %u>>%u vs calculated %u>>%u\n" - "sched_clock: fix multiply/shift to avoid scheduler hiccups\n", - mult, shift, cd->mult, cd->shift); - } -} - -#endif diff --git a/trunk/arch/arm/include/asm/sizes.h b/trunk/arch/arm/include/asm/sizes.h index 316bb2b2be3d..4fc1565e4f93 100644 --- a/trunk/arch/arm/include/asm/sizes.h +++ b/trunk/arch/arm/include/asm/sizes.h @@ -13,6 +13,9 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* DO NOT EDIT!! - this file automatically generated + * from .s file by awk -f s2h.awk + */ /* Size definitions * Copyright (C) ARM Limited 1998. All rights reserved. */ @@ -22,9 +25,6 @@ /* handy sizes */ #define SZ_16 0x00000010 -#define SZ_32 0x00000020 -#define SZ_64 0x00000040 -#define SZ_128 0x00000080 #define SZ_256 0x00000100 #define SZ_512 0x00000200 diff --git a/trunk/arch/arm/include/asm/smp.h b/trunk/arch/arm/include/asm/smp.h index 96ed521f2408..3d05190797cb 100644 --- a/trunk/arch/arm/include/asm/smp.h +++ b/trunk/arch/arm/include/asm/smp.h @@ -33,23 +33,27 @@ struct seq_file; /* * generate IPI list text */ -extern void show_ipi_list(struct seq_file *, int); +extern void show_ipi_list(struct seq_file *p); /* * Called from assembly code, this handles an IPI. */ -asmlinkage void do_IPI(int ipinr, struct pt_regs *regs); +asmlinkage void do_IPI(struct pt_regs *regs); /* * Setup the set of possible CPUs (via set_cpu_possible) */ extern void smp_init_cpus(void); +/* + * Move global data into per-processor storage. + */ +extern void smp_store_cpu_info(unsigned int cpuid); /* * Raise an IPI cross call on CPUs in callmap. */ -extern void smp_cross_call(const struct cpumask *mask, int ipi); +extern void smp_cross_call(const struct cpumask *mask); /* * Boot a secondary CPU, and assign it the specified idle task. @@ -68,11 +72,6 @@ asmlinkage void secondary_start_kernel(void); */ extern void platform_secondary_init(unsigned int cpu); -/* - * Initialize cpu_possible map, and enable coherency - */ -extern void platform_smp_prepare_cpus(unsigned int); - /* * Initial data for bringing up a secondary CPU. */ @@ -98,6 +97,6 @@ extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); /* * show local interrupt info */ -extern void show_local_irqs(struct seq_file *, int); +extern void show_local_irqs(struct seq_file *); #endif /* ifndef __ASM_ARM_SMP_H */ diff --git a/trunk/arch/arm/include/asm/smp_mpidr.h b/trunk/arch/arm/include/asm/smp_mpidr.h new file mode 100644 index 000000000000..6a9307d64900 --- /dev/null +++ b/trunk/arch/arm/include/asm/smp_mpidr.h @@ -0,0 +1,17 @@ +#ifndef ASMARM_SMP_MIDR_H +#define ASMARM_SMP_MIDR_H + +#define hard_smp_processor_id() \ + ({ \ + unsigned int cpunum; \ + __asm__("\n" \ + "1: mrc p15, 0, %0, c0, c0, 5\n" \ + " .pushsection \".alt.smp.init\", \"a\"\n"\ + " .long 1b\n" \ + " mov %0, #0\n" \ + " .popsection" \ + : "=r" (cpunum)); \ + cpunum &= 0x0F; \ + }) + +#endif diff --git a/trunk/arch/arm/include/asm/smp_twd.h b/trunk/arch/arm/include/asm/smp_twd.h index fed9981fba08..634f357be6bb 100644 --- a/trunk/arch/arm/include/asm/smp_twd.h +++ b/trunk/arch/arm/include/asm/smp_twd.h @@ -22,6 +22,7 @@ struct clock_event_device; extern void __iomem *twd_base; +void twd_timer_stop(void); int twd_timer_ack(void); void twd_timer_setup(struct clock_event_device *); diff --git a/trunk/arch/arm/include/asm/system.h b/trunk/arch/arm/include/asm/system.h index 97f6d60297d5..ec4327a4653d 100644 --- a/trunk/arch/arm/include/asm/system.h +++ b/trunk/arch/arm/include/asm/system.h @@ -124,13 +124,6 @@ extern unsigned int user_debug; #define vectors_high() (0) #endif -#if __LINUX_ARM_ARCH__ >= 7 || \ - (__LINUX_ARM_ARCH__ == 6 && defined(CONFIG_CPU_32v6K)) -#define sev() __asm__ __volatile__ ("sev" : : : "memory") -#define wfe() __asm__ __volatile__ ("wfe" : : : "memory") -#define wfi() __asm__ __volatile__ ("wfi" : : : "memory") -#endif - #if __LINUX_ARM_ARCH__ >= 7 #define isb() __asm__ __volatile__ ("isb" : : : "memory") #define dsb() __asm__ __volatile__ ("dsb" : : : "memory") @@ -162,7 +155,6 @@ extern unsigned int user_debug; #define rmb() dmb() #define wmb() mb() #else -#include #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) #define wmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) diff --git a/trunk/arch/arm/include/asm/traps.h b/trunk/arch/arm/include/asm/traps.h index 1b960d5ef6a5..124475afb007 100644 --- a/trunk/arch/arm/include/asm/traps.h +++ b/trunk/arch/arm/include/asm/traps.h @@ -46,6 +46,4 @@ static inline int in_exception_text(unsigned long ptr) extern void __init early_trap_init(void); extern void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame); -extern void *vectors_page; - #endif diff --git a/trunk/arch/arm/include/asm/uaccess.h b/trunk/arch/arm/include/asm/uaccess.h index b293616a1a1a..33e4a48fe103 100644 --- a/trunk/arch/arm/include/asm/uaccess.h +++ b/trunk/arch/arm/include/asm/uaccess.h @@ -227,7 +227,7 @@ do { \ #define __get_user_asm_byte(x,addr,err) \ __asm__ __volatile__( \ - "1: " T(ldrb) " %1,[%2],#0\n" \ + "1: ldrbt %1,[%2]\n" \ "2:\n" \ " .pushsection .fixup,\"ax\"\n" \ " .align 2\n" \ @@ -263,7 +263,7 @@ do { \ #define __get_user_asm_word(x,addr,err) \ __asm__ __volatile__( \ - "1: " T(ldr) " %1,[%2],#0\n" \ + "1: ldrt %1,[%2]\n" \ "2:\n" \ " .pushsection .fixup,\"ax\"\n" \ " .align 2\n" \ @@ -308,7 +308,7 @@ do { \ #define __put_user_asm_byte(x,__pu_addr,err) \ __asm__ __volatile__( \ - "1: " T(strb) " %1,[%2],#0\n" \ + "1: strbt %1,[%2]\n" \ "2:\n" \ " .pushsection .fixup,\"ax\"\n" \ " .align 2\n" \ @@ -341,7 +341,7 @@ do { \ #define __put_user_asm_word(x,__pu_addr,err) \ __asm__ __volatile__( \ - "1: " T(str) " %1,[%2],#0\n" \ + "1: strt %1,[%2]\n" \ "2:\n" \ " .pushsection .fixup,\"ax\"\n" \ " .align 2\n" \ @@ -366,10 +366,10 @@ do { \ #define __put_user_asm_dword(x,__pu_addr,err) \ __asm__ __volatile__( \ - ARM( "1: " T(str) " " __reg_oper1 ", [%1], #4\n" ) \ - ARM( "2: " T(str) " " __reg_oper0 ", [%1]\n" ) \ - THUMB( "1: " T(str) " " __reg_oper1 ", [%1]\n" ) \ - THUMB( "2: " T(str) " " __reg_oper0 ", [%1, #4]\n" ) \ + ARM( "1: strt " __reg_oper1 ", [%1], #4\n" ) \ + ARM( "2: strt " __reg_oper0 ", [%1]\n" ) \ + THUMB( "1: strt " __reg_oper1 ", [%1]\n" ) \ + THUMB( "2: strt " __reg_oper0 ", [%1, #4]\n" ) \ "3:\n" \ " .pushsection .fixup,\"ax\"\n" \ " .align 2\n" \ diff --git a/trunk/arch/arm/kernel/Makefile b/trunk/arch/arm/kernel/Makefile index 7c33e6f29bcc..679851a9f589 100644 --- a/trunk/arch/arm/kernel/Makefile +++ b/trunk/arch/arm/kernel/Makefile @@ -29,8 +29,7 @@ obj-$(CONFIG_MODULES) += armksyms.o module.o obj-$(CONFIG_ARTHUR) += arthur.o obj-$(CONFIG_ISA_DMA) += dma-isa.o obj-$(CONFIG_PCI) += bios32.o isa.o -obj-$(CONFIG_HAVE_SCHED_CLOCK) += sched_clock.o -obj-$(CONFIG_SMP) += smp.o smp_tlb.o +obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_HAVE_ARM_SCU) += smp_scu.o obj-$(CONFIG_HAVE_ARM_TWD) += smp_twd.o obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o @@ -44,8 +43,6 @@ obj-$(CONFIG_KGDB) += kgdb.o obj-$(CONFIG_ARM_UNWIND) += unwind.o obj-$(CONFIG_HAVE_TCM) += tcm.o obj-$(CONFIG_CRASH_DUMP) += crash_dump.o -obj-$(CONFIG_SWP_EMULATE) += swp_emulate.o -CFLAGS_swp_emulate.o := -Wa,-march=armv7-a obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o obj-$(CONFIG_CRUNCH) += crunch.o crunch-bits.o diff --git a/trunk/arch/arm/kernel/entry-armv.S b/trunk/arch/arm/kernel/entry-armv.S index 27f64489c1cb..c09e3573c5de 100644 --- a/trunk/arch/arm/kernel/entry-armv.S +++ b/trunk/arch/arm/kernel/entry-armv.S @@ -25,22 +25,42 @@ #include #include "entry-header.S" -#include /* * Interrupt handling. Preserves r7, r8, r9 */ .macro irq_handler -#ifdef CONFIG_MULTI_IRQ_HANDLER - ldr r5, =handle_arch_irq - mov r0, sp - ldr r5, [r5] - adr lr, BSYM(9997f) - teq r5, #0 - movne pc, r5 + get_irqnr_preamble r5, lr +1: get_irqnr_and_base r0, r6, r5, lr + movne r1, sp + @ + @ routine called with r0 = irq number, r1 = struct pt_regs * + @ + adrne lr, BSYM(1b) + bne asm_do_IRQ + +#ifdef CONFIG_SMP + /* + * XXX + * + * this macro assumes that irqstat (r6) and base (r5) are + * preserved from get_irqnr_and_base above + */ + ALT_SMP(test_for_ipi r0, r6, r5, lr) + ALT_UP_B(9997f) + movne r0, sp + adrne lr, BSYM(1b) + bne do_IPI + +#ifdef CONFIG_LOCAL_TIMERS + test_for_ltirq r0, r6, r5, lr + movne r0, sp + adrne lr, BSYM(1b) + bne do_local_timer #endif - arch_irq_handler_default 9997: +#endif + .endm #ifdef CONFIG_KPROBES @@ -715,7 +735,7 @@ ENTRY(__switch_to) THUMB( stmia ip!, {r4 - sl, fp} ) @ Store most regs on stack THUMB( str sp, [ip], #4 ) THUMB( str lr, [ip], #4 ) -#ifdef CONFIG_CPU_USE_DOMAINS +#ifdef CONFIG_MMU ldr r6, [r2, #TI_CPU_DOMAIN] #endif set_tls r3, r4, r5 @@ -724,7 +744,7 @@ ENTRY(__switch_to) ldr r8, =__stack_chk_guard ldr r7, [r7, #TSK_STACK_CANARY] #endif -#ifdef CONFIG_CPU_USE_DOMAINS +#ifdef CONFIG_MMU mcr p15, 0, r6, c3, c0, 0 @ Set domain register #endif mov r5, r0 @@ -822,7 +842,7 @@ __kuser_helper_start: */ __kuser_memory_barrier: @ 0xffff0fa0 - smp_dmb arm + smp_dmb usr_ret lr .align 5 @@ -891,7 +911,7 @@ __kuser_cmpxchg: @ 0xffff0fc0 * A special ghost syscall is used for that (see traps.c). */ stmfd sp!, {r7, lr} - ldr r7, 1f @ it's 20 bits + ldr r7, =1f @ it's 20 bits swi __ARM_NR_cmpxchg ldmfd sp!, {r7, pc} 1: .word __ARM_NR_cmpxchg @@ -939,7 +959,7 @@ kuser_cmpxchg_fixup: #else - smp_dmb arm + smp_dmb 1: ldrex r3, [r2] subs r3, r3, r0 strexeq r3, r1, [r2] @@ -1225,9 +1245,3 @@ cr_alignment: .space 4 cr_no_alignment: .space 4 - -#ifdef CONFIG_MULTI_IRQ_HANDLER - .globl handle_arch_irq -handle_arch_irq: - .space 4 -#endif diff --git a/trunk/arch/arm/kernel/entry-common.S b/trunk/arch/arm/kernel/entry-common.S index 1e7b04a40a31..aae802ee12f8 100644 --- a/trunk/arch/arm/kernel/entry-common.S +++ b/trunk/arch/arm/kernel/entry-common.S @@ -29,9 +29,6 @@ ret_fast_syscall: ldr r1, [tsk, #TI_FLAGS] tst r1, #_TIF_WORK_MASK bne fast_work_pending -#if defined(CONFIG_IRQSOFF_TRACER) - asm_trace_hardirqs_on -#endif /* perform architecture specific actions before user return */ arch_ret_to_user r1, lr @@ -68,9 +65,6 @@ ret_slow_syscall: tst r1, #_TIF_WORK_MASK bne work_pending no_work_pending: -#if defined(CONFIG_IRQSOFF_TRACER) - asm_trace_hardirqs_on -#endif /* perform architecture specific actions before user return */ arch_ret_to_user r1, lr diff --git a/trunk/arch/arm/kernel/fiq.c b/trunk/arch/arm/kernel/fiq.c index e72dc34eea1c..6ff7919613d7 100644 --- a/trunk/arch/arm/kernel/fiq.c +++ b/trunk/arch/arm/kernel/fiq.c @@ -45,7 +45,6 @@ #include #include #include -#include static unsigned long no_fiq_insn; @@ -68,22 +67,17 @@ static struct fiq_handler default_owner = { static struct fiq_handler *current_fiq = &default_owner; -int show_fiq_list(struct seq_file *p, int prec) +int show_fiq_list(struct seq_file *p, void *v) { if (current_fiq != &default_owner) - seq_printf(p, "%*s: %s\n", prec, "FIQ", - current_fiq->name); + seq_printf(p, "FIQ: %s\n", current_fiq->name); return 0; } void set_fiq_handler(void *start, unsigned int length) { -#if defined(CONFIG_CPU_USE_DOMAINS) memcpy((void *)0xffff001c, start, length); -#else - memcpy(vectors_page + 0x1c, start, length); -#endif flush_icache_range(0xffff001c, 0xffff001c + length); if (!vectors_high()) flush_icache_range(0x1c, 0x1c + length); diff --git a/trunk/arch/arm/kernel/head.S b/trunk/arch/arm/kernel/head.S index f17d9a09e8fb..dd6b369ac69c 100644 --- a/trunk/arch/arm/kernel/head.S +++ b/trunk/arch/arm/kernel/head.S @@ -85,17 +85,10 @@ ENTRY(stext) mrc p15, 0, r9, c0, c0 @ get processor id bl __lookup_processor_type @ r5=procinfo r9=cpuid movs r10, r5 @ invalid processor (r5=0)? - THUMB( it eq ) @ force fixup-able long branch encoding beq __error_p @ yes, error 'p' bl __lookup_machine_type @ r5=machinfo movs r8, r5 @ invalid machine (r5=0)? - THUMB( it eq ) @ force fixup-able long branch encoding beq __error_a @ yes, error 'a' - - /* - * r1 = machine no, r2 = atags, - * r8 = machinfo, r9 = cpuid, r10 = procinfo - */ bl __vet_atags #ifdef CONFIG_SMP_ON_UP bl __fixup_smp @@ -269,7 +262,6 @@ __create_page_tables: mov pc, lr ENDPROC(__create_page_tables) .ltorg - .align __enable_mmu_loc: .long . .long __enable_mmu @@ -290,7 +282,6 @@ ENTRY(secondary_startup) bl __lookup_processor_type movs r10, r5 @ invalid processor? moveq r0, #'p' @ yes, error 'p' - THUMB( it eq ) @ force fixup-able long branch encoding beq __error_p /* @@ -317,8 +308,6 @@ ENTRY(__secondary_switched) b secondary_start_kernel ENDPROC(__secondary_switched) - .align - .type __secondary_data, %object __secondary_data: .long . @@ -392,19 +381,19 @@ ENDPROC(__turn_mmu_on) #ifdef CONFIG_SMP_ON_UP __fixup_smp: - mov r4, #0x00070000 - orr r3, r4, #0xff000000 @ mask 0xff070000 - orr r4, r4, #0x41000000 @ val 0x41070000 - and r0, r9, r3 - teq r0, r4 @ ARM CPU and ARMv6/v7? + mov r7, #0x00070000 + orr r6, r7, #0xff000000 @ mask 0xff070000 + orr r7, r7, #0x41000000 @ val 0x41070000 + and r0, r9, r6 + teq r0, r7 @ ARM CPU and ARMv6/v7? bne __fixup_smp_on_up @ no, assume UP - orr r3, r3, #0x0000ff00 - orr r3, r3, #0x000000f0 @ mask 0xff07fff0 - orr r4, r4, #0x0000b000 - orr r4, r4, #0x00000020 @ val 0x4107b020 - and r0, r9, r3 - teq r0, r4 @ ARM 11MPCore? + orr r6, r6, #0x0000ff00 + orr r6, r6, #0x000000f0 @ mask 0xff07fff0 + orr r7, r7, #0x0000b000 + orr r7, r7, #0x00000020 @ val 0x4107b020 + and r0, r9, r6 + teq r0, r7 @ ARM 11MPCore? moveq pc, lr @ yes, assume SMP mrc p15, 0, r0, c0, c0, 5 @ read MPIDR @@ -413,25 +402,17 @@ __fixup_smp: __fixup_smp_on_up: adr r0, 1f - ldmia r0, {r3 - r5} + ldmia r0, {r3, r6, r7} sub r3, r0, r3 - add r4, r4, r3 - add r5, r5, r3 -2: cmp r4, r5 - movhs pc, lr - ldmia r4!, {r0, r6} - ARM( str r6, [r0, r3] ) - THUMB( add r0, r0, r3 ) -#ifdef __ARMEB__ - THUMB( mov r6, r6, ror #16 ) @ Convert word order for big-endian. -#endif - THUMB( strh r6, [r0], #2 ) @ For Thumb-2, store as two halfwords - THUMB( mov r6, r6, lsr #16 ) @ to be robust against misaligned r3. - THUMB( strh r6, [r0] ) - b 2b + add r6, r6, r3 + add r7, r7, r3 +2: cmp r6, r7 + ldmia r6!, {r0, r4} + strlo r4, [r0, r3] + blo 2b + mov pc, lr ENDPROC(__fixup_smp) - .align 1: .word . .word __smpalt_begin .word __smpalt_end diff --git a/trunk/arch/arm/kernel/irq.c b/trunk/arch/arm/kernel/irq.c index 8135438b8818..6d616333340f 100644 --- a/trunk/arch/arm/kernel/irq.c +++ b/trunk/arch/arm/kernel/irq.c @@ -38,7 +38,6 @@ #include #include -#include #include #include @@ -49,6 +48,8 @@ #define irq_finish(irq) do { } while (0) #endif +unsigned int arch_nr_irqs; +void (*init_arch_irq)(void) __initdata = NULL; unsigned long irq_err_count; int show_interrupts(struct seq_file *p, void *v) @@ -57,20 +58,11 @@ int show_interrupts(struct seq_file *p, void *v) struct irq_desc *desc; struct irqaction * action; unsigned long flags; - int prec, n; - - for (prec = 3, n = 1000; prec < 10 && n <= nr_irqs; prec++) - n *= 10; - -#ifdef CONFIG_SMP - if (prec < 4) - prec = 4; -#endif if (i == 0) { char cpuname[12]; - seq_printf(p, "%*s ", prec, ""); + seq_printf(p, " "); for_each_present_cpu(cpu) { sprintf(cpuname, "CPU%d", cpu); seq_printf(p, " %10s", cpuname); @@ -85,7 +77,7 @@ int show_interrupts(struct seq_file *p, void *v) if (!action) goto unlock; - seq_printf(p, "%*d: ", prec, i); + seq_printf(p, "%3d: ", i); for_each_present_cpu(cpu) seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu)); seq_printf(p, " %10s", desc->chip->name ? : "-"); @@ -98,15 +90,13 @@ int show_interrupts(struct seq_file *p, void *v) raw_spin_unlock_irqrestore(&desc->lock, flags); } else if (i == nr_irqs) { #ifdef CONFIG_FIQ - show_fiq_list(p, prec); + show_fiq_list(p, v); #endif #ifdef CONFIG_SMP - show_ipi_list(p, prec); -#endif -#ifdef CONFIG_LOCAL_TIMERS - show_local_irqs(p, prec); + show_ipi_list(p); + show_local_irqs(p); #endif - seq_printf(p, "%*s: %10lu\n", prec, "Err", irq_err_count); + seq_printf(p, "Err: %10lu\n", irq_err_count); } return 0; } @@ -166,13 +156,13 @@ void set_irq_flags(unsigned int irq, unsigned int iflags) void __init init_IRQ(void) { - machine_desc->init_irq(); + init_arch_irq(); } #ifdef CONFIG_SPARSE_IRQ int __init arch_probe_nr_irqs(void) { - nr_irqs = machine_desc->nr_irqs ? machine_desc->nr_irqs : NR_IRQS; + nr_irqs = arch_nr_irqs ? arch_nr_irqs : NR_IRQS; return nr_irqs; } #endif diff --git a/trunk/arch/arm/kernel/machine_kexec.c b/trunk/arch/arm/kernel/machine_kexec.c index 30ead135ff5f..3a8fd5140d7a 100644 --- a/trunk/arch/arm/kernel/machine_kexec.c +++ b/trunk/arch/arm/kernel/machine_kexec.c @@ -23,8 +23,6 @@ extern unsigned long kexec_indirection_page; extern unsigned long kexec_mach_type; extern unsigned long kexec_boot_atags; -static atomic_t waiting_for_crash_ipi; - /* * Provide a dummy crash_notes definition while crash dump arrives to arm. * This prevents breakage of crash_notes attribute in kernel/ksysfs.c. @@ -39,37 +37,9 @@ void machine_kexec_cleanup(struct kimage *image) { } -void machine_crash_nonpanic_core(void *unused) -{ - struct pt_regs regs; - - crash_setup_regs(®s, NULL); - printk(KERN_DEBUG "CPU %u will stop doing anything useful since another CPU has crashed\n", - smp_processor_id()); - crash_save_cpu(®s, smp_processor_id()); - flush_cache_all(); - - atomic_dec(&waiting_for_crash_ipi); - while (1) - cpu_relax(); -} - void machine_crash_shutdown(struct pt_regs *regs) { - unsigned long msecs; - local_irq_disable(); - - atomic_set(&waiting_for_crash_ipi, num_online_cpus() - 1); - smp_call_function(machine_crash_nonpanic_core, NULL, false); - msecs = 1000; /* Wait at most a second for the other cpus to stop */ - while ((atomic_read(&waiting_for_crash_ipi) > 0) && msecs) { - mdelay(1); - msecs--; - } - if (atomic_read(&waiting_for_crash_ipi) > 0) - printk(KERN_WARNING "Non-crashing CPUs did not react to IPI\n"); - crash_save_cpu(regs, smp_processor_id()); printk(KERN_INFO "Loading crashdump kernel...\n"); diff --git a/trunk/arch/arm/kernel/module.c b/trunk/arch/arm/kernel/module.c index 0c1bb68ff4a8..d9bd786ce23d 100644 --- a/trunk/arch/arm/kernel/module.c +++ b/trunk/arch/arm/kernel/module.c @@ -67,6 +67,35 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, char *secstrings, struct module *mod) { +#ifdef CONFIG_ARM_UNWIND + Elf_Shdr *s, *sechdrs_end = sechdrs + hdr->e_shnum; + struct arm_unwind_mapping *maps = mod->arch.map; + + for (s = sechdrs; s < sechdrs_end; s++) { + char const *secname = secstrings + s->sh_name; + + if (strcmp(".ARM.exidx.init.text", secname) == 0) + maps[ARM_SEC_INIT].unw_sec = s; + else if (strcmp(".ARM.exidx.devinit.text", secname) == 0) + maps[ARM_SEC_DEVINIT].unw_sec = s; + else if (strcmp(".ARM.exidx", secname) == 0) + maps[ARM_SEC_CORE].unw_sec = s; + else if (strcmp(".ARM.exidx.exit.text", secname) == 0) + maps[ARM_SEC_EXIT].unw_sec = s; + else if (strcmp(".ARM.exidx.devexit.text", secname) == 0) + maps[ARM_SEC_DEVEXIT].unw_sec = s; + else if (strcmp(".init.text", secname) == 0) + maps[ARM_SEC_INIT].sec_text = s; + else if (strcmp(".devinit.text", secname) == 0) + maps[ARM_SEC_DEVINIT].sec_text = s; + else if (strcmp(".text", secname) == 0) + maps[ARM_SEC_CORE].sec_text = s; + else if (strcmp(".exit.text", secname) == 0) + maps[ARM_SEC_EXIT].sec_text = s; + else if (strcmp(".devexit.text", secname) == 0) + maps[ARM_SEC_DEVEXIT].sec_text = s; + } +#endif return 0; } @@ -271,69 +300,41 @@ apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, return -ENOEXEC; } -struct mod_unwind_map { - const Elf_Shdr *unw_sec; - const Elf_Shdr *txt_sec; -}; - -int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, - struct module *mod) -{ #ifdef CONFIG_ARM_UNWIND - const char *secstrs = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; - const Elf_Shdr *s, *sechdrs_end = sechdrs + hdr->e_shnum; - struct mod_unwind_map maps[ARM_SEC_MAX]; +static void register_unwind_tables(struct module *mod) +{ int i; - - memset(maps, 0, sizeof(maps)); - - for (s = sechdrs; s < sechdrs_end; s++) { - const char *secname = secstrs + s->sh_name; - - if (!(s->sh_flags & SHF_ALLOC)) - continue; - - if (strcmp(".ARM.exidx.init.text", secname) == 0) - maps[ARM_SEC_INIT].unw_sec = s; - else if (strcmp(".ARM.exidx.devinit.text", secname) == 0) - maps[ARM_SEC_DEVINIT].unw_sec = s; - else if (strcmp(".ARM.exidx", secname) == 0) - maps[ARM_SEC_CORE].unw_sec = s; - else if (strcmp(".ARM.exidx.exit.text", secname) == 0) - maps[ARM_SEC_EXIT].unw_sec = s; - else if (strcmp(".ARM.exidx.devexit.text", secname) == 0) - maps[ARM_SEC_DEVEXIT].unw_sec = s; - else if (strcmp(".init.text", secname) == 0) - maps[ARM_SEC_INIT].txt_sec = s; - else if (strcmp(".devinit.text", secname) == 0) - maps[ARM_SEC_DEVINIT].txt_sec = s; - else if (strcmp(".text", secname) == 0) - maps[ARM_SEC_CORE].txt_sec = s; - else if (strcmp(".exit.text", secname) == 0) - maps[ARM_SEC_EXIT].txt_sec = s; - else if (strcmp(".devexit.text", secname) == 0) - maps[ARM_SEC_DEVEXIT].txt_sec = s; + for (i = 0; i < ARM_SEC_MAX; ++i) { + struct arm_unwind_mapping *map = &mod->arch.map[i]; + if (map->unw_sec && map->sec_text) + map->unwind = unwind_table_add(map->unw_sec->sh_addr, + map->unw_sec->sh_size, + map->sec_text->sh_addr, + map->sec_text->sh_size); } +} - for (i = 0; i < ARM_SEC_MAX; i++) - if (maps[i].unw_sec && maps[i].txt_sec) - mod->arch.unwind[i] = - unwind_table_add(maps[i].unw_sec->sh_addr, - maps[i].unw_sec->sh_size, - maps[i].txt_sec->sh_addr, - maps[i].txt_sec->sh_size); +static void unregister_unwind_tables(struct module *mod) +{ + int i = ARM_SEC_MAX; + while (--i >= 0) + unwind_table_del(mod->arch.map[i].unwind); +} +#else +static inline void register_unwind_tables(struct module *mod) { } +static inline void unregister_unwind_tables(struct module *mod) { } #endif + +int +module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, + struct module *module) +{ + register_unwind_tables(module); return 0; } void module_arch_cleanup(struct module *mod) { -#ifdef CONFIG_ARM_UNWIND - int i; - - for (i = 0; i < ARM_SEC_MAX; i++) - if (mod->arch.unwind[i]) - unwind_table_del(mod->arch.unwind[i]); -#endif + unregister_unwind_tables(mod); } diff --git a/trunk/arch/arm/kernel/perf_event.c b/trunk/arch/arm/kernel/perf_event.c index 421a4bb88fed..50c197bfac0f 100644 --- a/trunk/arch/arm/kernel/perf_event.c +++ b/trunk/arch/arm/kernel/perf_event.c @@ -32,7 +32,7 @@ static struct platform_device *pmu_device; * Hardware lock to serialize accesses to PMU registers. Needed for the * read/modify/write sequences. */ -DEFINE_SPINLOCK(pmu_lock); +static DEFINE_SPINLOCK(pmu_lock); /* * ARMv6 supports a maximum of 3 events, starting from index 1. If we add @@ -65,7 +65,7 @@ struct cpu_hw_events { */ unsigned long active_mask[BITS_TO_LONGS(ARMPMU_MAX_HWEVENTS)]; }; -DEFINE_PER_CPU(struct cpu_hw_events, cpu_hw_events); +static DEFINE_PER_CPU(struct cpu_hw_events, cpu_hw_events); struct arm_pmu { enum arm_perf_pmu_ids id; @@ -673,17 +673,17 @@ arch_initcall(init_hw_perf_events); * This code has been adapted from the ARM OProfile support. */ struct frame_tail { - struct frame_tail *fp; - unsigned long sp; - unsigned long lr; + struct frame_tail __user *fp; + unsigned long sp; + unsigned long lr; } __attribute__((packed)); /* * Get the return address for a single stackframe and return a pointer to the * next frame tail. */ -static struct frame_tail * -user_backtrace(struct frame_tail *tail, +static struct frame_tail __user * +user_backtrace(struct frame_tail __user *tail, struct perf_callchain_entry *entry) { struct frame_tail buftail; @@ -709,10 +709,10 @@ user_backtrace(struct frame_tail *tail, void perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) { - struct frame_tail *tail; + struct frame_tail __user *tail; - tail = (struct frame_tail *)regs->ARM_fp - 1; + tail = (struct frame_tail __user *)regs->ARM_fp - 1; while (tail && !((unsigned long)tail & 0x3)) tail = user_backtrace(tail, entry); diff --git a/trunk/arch/arm/kernel/perf_event_v6.c b/trunk/arch/arm/kernel/perf_event_v6.c index 7aeb07da9076..3f427aae211d 100644 --- a/trunk/arch/arm/kernel/perf_event_v6.c +++ b/trunk/arch/arm/kernel/perf_event_v6.c @@ -400,7 +400,7 @@ armv6pmu_write_counter(int counter, WARN_ONCE(1, "invalid counter number (%d)\n", counter); } -void +static void armv6pmu_enable_event(struct hw_perf_event *hwc, int idx) { @@ -625,7 +625,7 @@ static const struct arm_pmu armv6pmu = { .max_period = (1LLU << 32) - 1, }; -const struct arm_pmu *__init armv6pmu_init(void) +static const struct arm_pmu *__init armv6pmu_init(void) { return &armv6pmu; } @@ -655,17 +655,17 @@ static const struct arm_pmu armv6mpcore_pmu = { .max_period = (1LLU << 32) - 1, }; -const struct arm_pmu *__init armv6mpcore_pmu_init(void) +static const struct arm_pmu *__init armv6mpcore_pmu_init(void) { return &armv6mpcore_pmu; } #else -const struct arm_pmu *__init armv6pmu_init(void) +static const struct arm_pmu *__init armv6pmu_init(void) { return NULL; } -const struct arm_pmu *__init armv6mpcore_pmu_init(void) +static const struct arm_pmu *__init armv6mpcore_pmu_init(void) { return NULL; } diff --git a/trunk/arch/arm/kernel/perf_event_v7.c b/trunk/arch/arm/kernel/perf_event_v7.c index 4d0423969df9..a68ff1c10dec 100644 --- a/trunk/arch/arm/kernel/perf_event_v7.c +++ b/trunk/arch/arm/kernel/perf_event_v7.c @@ -681,7 +681,7 @@ static void armv7_pmnc_dump_regs(void) } #endif -void armv7pmu_enable_event(struct hw_perf_event *hwc, int idx) +static void armv7pmu_enable_event(struct hw_perf_event *hwc, int idx) { unsigned long flags; @@ -874,7 +874,7 @@ static u32 __init armv7_reset_read_pmnc(void) return nb_cnt + 1; } -const struct arm_pmu *__init armv7_a8_pmu_init(void) +static const struct arm_pmu *__init armv7_a8_pmu_init(void) { armv7pmu.id = ARM_PERF_PMU_ID_CA8; armv7pmu.name = "ARMv7 Cortex-A8"; @@ -884,7 +884,7 @@ const struct arm_pmu *__init armv7_a8_pmu_init(void) return &armv7pmu; } -const struct arm_pmu *__init armv7_a9_pmu_init(void) +static const struct arm_pmu *__init armv7_a9_pmu_init(void) { armv7pmu.id = ARM_PERF_PMU_ID_CA9; armv7pmu.name = "ARMv7 Cortex-A9"; @@ -894,12 +894,12 @@ const struct arm_pmu *__init armv7_a9_pmu_init(void) return &armv7pmu; } #else -const struct arm_pmu *__init armv7_a8_pmu_init(void) +static const struct arm_pmu *__init armv7_a8_pmu_init(void) { return NULL; } -const struct arm_pmu *__init armv7_a9_pmu_init(void) +static const struct arm_pmu *__init armv7_a9_pmu_init(void) { return NULL; } diff --git a/trunk/arch/arm/kernel/perf_event_xscale.c b/trunk/arch/arm/kernel/perf_event_xscale.c index 4e9592789d40..f14fbb6c345b 100644 --- a/trunk/arch/arm/kernel/perf_event_xscale.c +++ b/trunk/arch/arm/kernel/perf_event_xscale.c @@ -428,7 +428,7 @@ static const struct arm_pmu xscale1pmu = { .max_period = (1LLU << 32) - 1, }; -const struct arm_pmu *__init xscale1pmu_init(void) +static const struct arm_pmu *__init xscale1pmu_init(void) { return &xscale1pmu; } @@ -790,17 +790,17 @@ static const struct arm_pmu xscale2pmu = { .max_period = (1LLU << 32) - 1, }; -const struct arm_pmu *__init xscale2pmu_init(void) +static const struct arm_pmu *__init xscale2pmu_init(void) { return &xscale2pmu; } #else -const struct arm_pmu *__init xscale1pmu_init(void) +static const struct arm_pmu *__init xscale1pmu_init(void) { return NULL; } -const struct arm_pmu *__init xscale2pmu_init(void) +static const struct arm_pmu *__init xscale2pmu_init(void) { return NULL; } diff --git a/trunk/arch/arm/kernel/relocate_kernel.S b/trunk/arch/arm/kernel/relocate_kernel.S index 9cf4cbf8f95b..fd26f8d65151 100644 --- a/trunk/arch/arm/kernel/relocate_kernel.S +++ b/trunk/arch/arm/kernel/relocate_kernel.S @@ -59,8 +59,6 @@ relocate_new_kernel: ldr r2,kexec_boot_atags mov pc,lr - .align - .globl kexec_start_address kexec_start_address: .long 0x0 diff --git a/trunk/arch/arm/kernel/sched_clock.c b/trunk/arch/arm/kernel/sched_clock.c deleted file mode 100644 index 2cdcc9287c74..000000000000 --- a/trunk/arch/arm/kernel/sched_clock.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * sched_clock.c: support for extending counters to full 64-bit ns counter - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include -#include -#include -#include - -#include - -static void sched_clock_poll(unsigned long wrap_ticks); -static DEFINE_TIMER(sched_clock_timer, sched_clock_poll, 0, 0); -static void (*sched_clock_update_fn)(void); - -static void sched_clock_poll(unsigned long wrap_ticks) -{ - mod_timer(&sched_clock_timer, round_jiffies(jiffies + wrap_ticks)); - sched_clock_update_fn(); -} - -void __init init_sched_clock(struct clock_data *cd, void (*update)(void), - unsigned int clock_bits, unsigned long rate) -{ - unsigned long r, w; - u64 res, wrap; - char r_unit; - - sched_clock_update_fn = update; - - /* calculate the mult/shift to convert counter ticks to ns. */ - clocks_calc_mult_shift(&cd->mult, &cd->shift, rate, NSEC_PER_SEC, 60); - - r = rate; - if (r >= 4000000) { - r /= 1000000; - r_unit = 'M'; - } else { - r /= 1000; - r_unit = 'k'; - } - - /* calculate how many ns until we wrap */ - wrap = cyc_to_ns((1ULL << clock_bits) - 1, cd->mult, cd->shift); - do_div(wrap, NSEC_PER_MSEC); - w = wrap; - - /* calculate the ns resolution of this counter */ - res = cyc_to_ns(1ULL, cd->mult, cd->shift); - pr_info("sched_clock: %u bits at %lu%cHz, resolution %lluns, wraps every %lums\n", - clock_bits, r, r_unit, res, w); - - /* - * Start the timer to keep sched_clock() properly updated and - * sets the initial epoch. - */ - sched_clock_timer.data = msecs_to_jiffies(w - (w / 10)); - sched_clock_poll(sched_clock_timer.data); - - /* - * Ensure that sched_clock() starts off at 0ns - */ - cd->epoch_ns = 0; -} diff --git a/trunk/arch/arm/kernel/setup.c b/trunk/arch/arm/kernel/setup.c index 3455ad33de4c..336f14e0e5c2 100644 --- a/trunk/arch/arm/kernel/setup.c +++ b/trunk/arch/arm/kernel/setup.c @@ -75,9 +75,9 @@ extern void reboot_setup(char *str); unsigned int processor_id; EXPORT_SYMBOL(processor_id); -unsigned int __machine_arch_type __read_mostly; +unsigned int __machine_arch_type; EXPORT_SYMBOL(__machine_arch_type); -unsigned int cacheid __read_mostly; +unsigned int cacheid; EXPORT_SYMBOL(cacheid); unsigned int __atags_pointer __initdata; @@ -91,24 +91,24 @@ EXPORT_SYMBOL(system_serial_low); unsigned int system_serial_high; EXPORT_SYMBOL(system_serial_high); -unsigned int elf_hwcap __read_mostly; +unsigned int elf_hwcap; EXPORT_SYMBOL(elf_hwcap); #ifdef MULTI_CPU -struct processor processor __read_mostly; +struct processor processor; #endif #ifdef MULTI_TLB -struct cpu_tlb_fns cpu_tlb __read_mostly; +struct cpu_tlb_fns cpu_tlb; #endif #ifdef MULTI_USER -struct cpu_user_fns cpu_user __read_mostly; +struct cpu_user_fns cpu_user; #endif #ifdef MULTI_CACHE -struct cpu_cache_fns cpu_cache __read_mostly; +struct cpu_cache_fns cpu_cache; #endif #ifdef CONFIG_OUTER_CACHE -struct outer_cache_fns outer_cache __read_mostly; +struct outer_cache_fns outer_cache; EXPORT_SYMBOL(outer_cache); #endif @@ -126,7 +126,6 @@ EXPORT_SYMBOL(elf_platform); static const char *cpu_name; static const char *machine_name; static char __initdata cmd_line[COMMAND_LINE_SIZE]; -struct machine_desc *machine_desc __initdata; static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE; static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } }; @@ -709,11 +708,13 @@ static struct init_tags { { 0, ATAG_NONE } }; +static void (*init_machine)(void) __initdata; + static int __init customize_machine(void) { /* customizes platform devices, or adds new ones */ - if (machine_desc->init_machine) - machine_desc->init_machine(); + if (init_machine) + init_machine(); return 0; } arch_initcall(customize_machine); @@ -808,7 +809,6 @@ void __init setup_arch(char **cmdline_p) setup_processor(); mdesc = setup_machine(machine_arch_type); - machine_desc = mdesc; machine_name = mdesc->name; if (mdesc->soft_reboot) @@ -868,9 +868,13 @@ void __init setup_arch(char **cmdline_p) cpu_init(); tcm_init(); -#ifdef CONFIG_MULTI_IRQ_HANDLER - handle_arch_irq = mdesc->handle_irq; -#endif + /* + * Set up various architecture-specific pointers + */ + arch_nr_irqs = mdesc->nr_irqs; + init_arch_irq = mdesc->init_irq; + system_timer = mdesc->timer; + init_machine = mdesc->init_machine; #ifdef CONFIG_VT #if defined(CONFIG_VGA_CONSOLE) @@ -880,9 +884,6 @@ void __init setup_arch(char **cmdline_p) #endif #endif early_trap_init(); - - if (mdesc->init_early) - mdesc->init_early(); } diff --git a/trunk/arch/arm/kernel/smp.c b/trunk/arch/arm/kernel/smp.c index 4539ebcb089f..bbca89872c18 100644 --- a/trunk/arch/arm/kernel/smp.c +++ b/trunk/arch/arm/kernel/smp.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -39,6 +38,7 @@ #include #include #include +#include /* * as from 2.5, kernels no longer have an init_tasks structure @@ -47,14 +47,64 @@ */ struct secondary_data secondary_data; +/* + * structures for inter-processor calls + * - A collection of single bit ipi messages. + */ +struct ipi_data { + spinlock_t lock; + unsigned long ipi_count; + unsigned long bits; +}; + +static DEFINE_PER_CPU(struct ipi_data, ipi_data) = { + .lock = SPIN_LOCK_UNLOCKED, +}; + enum ipi_msg_type { - IPI_TIMER = 2, + IPI_TIMER, IPI_RESCHEDULE, IPI_CALL_FUNC, IPI_CALL_FUNC_SINGLE, IPI_CPU_STOP, }; +static inline void identity_mapping_add(pgd_t *pgd, unsigned long start, + unsigned long end) +{ + unsigned long addr, prot; + pmd_t *pmd; + + prot = PMD_TYPE_SECT | PMD_SECT_AP_WRITE; + if (cpu_architecture() <= CPU_ARCH_ARMv5TEJ && !cpu_is_xscale()) + prot |= PMD_BIT4; + + for (addr = start & PGDIR_MASK; addr < end;) { + pmd = pmd_offset(pgd + pgd_index(addr), addr); + pmd[0] = __pmd(addr | prot); + addr += SECTION_SIZE; + pmd[1] = __pmd(addr | prot); + addr += SECTION_SIZE; + flush_pmd_entry(pmd); + outer_clean_range(__pa(pmd), __pa(pmd + 1)); + } +} + +static inline void identity_mapping_del(pgd_t *pgd, unsigned long start, + unsigned long end) +{ + unsigned long addr; + pmd_t *pmd; + + for (addr = start & PGDIR_MASK; addr < end; addr += PGDIR_SIZE) { + pmd = pmd_offset(pgd + pgd_index(addr), addr); + pmd[0] = __pmd(0); + pmd[1] = __pmd(0); + clean_pmd_entry(pmd); + outer_clean_range(__pa(pmd), __pa(pmd + 1)); + } +} + int __cpuinit __cpu_up(unsigned int cpu) { struct cpuinfo_arm *ci = &per_cpu(cpu_data, cpu); @@ -128,12 +178,8 @@ int __cpuinit __cpu_up(unsigned int cpu) barrier(); } - if (!cpu_online(cpu)) { - pr_crit("CPU%u: failed to come online\n", cpu); + if (!cpu_online(cpu)) ret = -EIO; - } - } else { - pr_err("CPU%u: failed to boot: %d\n", cpu, ret); } secondary_data.stack = NULL; @@ -149,12 +195,18 @@ int __cpuinit __cpu_up(unsigned int cpu) pgd_free(&init_mm, pgd); + if (ret) { + printk(KERN_CRIT "CPU%u: processor failed to boot\n", cpu); + + /* + * FIXME: We need to clean up the new idle thread. --rmk + */ + } + return ret; } #ifdef CONFIG_HOTPLUG_CPU -static void percpu_timer_stop(void); - /* * __cpu_disable runs on the processor to be shutdown. */ @@ -182,7 +234,7 @@ int __cpu_disable(void) /* * Stop the local timer for this CPU. */ - percpu_timer_stop(); + local_timer_stop(); /* * Flush user cache and TLB mappings, and then remove this CPU @@ -201,20 +253,12 @@ int __cpu_disable(void) return 0; } -static DECLARE_COMPLETION(cpu_died); - /* * called on the thread which is asking for a CPU to be shutdown - * waits until shutdown has completed, or it is timed out. */ void __cpu_die(unsigned int cpu) { - if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) { - pr_err("CPU%u: cpu didn't die\n", cpu); - return; - } - printk(KERN_NOTICE "CPU%u: shutdown\n", cpu); - if (!platform_cpu_kill(cpu)) printk("CPU%u: unable to kill\n", cpu); } @@ -231,17 +275,12 @@ void __ref cpu_die(void) { unsigned int cpu = smp_processor_id(); - idle_task_exit(); - local_irq_disable(); - mb(); - - /* Tell __cpu_die() that this CPU is now safe to dispose of */ - complete(&cpu_died); + idle_task_exit(); /* * actual CPU shutdown procedure is at least platform (if not - * CPU) specific. + * CPU) specific */ platform_cpu_die(cpu); @@ -251,24 +290,12 @@ void __ref cpu_die(void) * to be repeated to undo the effects of taking the CPU offline. */ __asm__("mov sp, %0\n" - " mov fp, #0\n" " b secondary_start_kernel" : : "r" (task_stack_page(current) + THREAD_SIZE - 8)); } #endif /* CONFIG_HOTPLUG_CPU */ -/* - * Called by both boot and secondaries to move global data into - * per-processor storage. - */ -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; -} - /* * This is the secondary CPU boot entry. We're using this CPUs * idle thread stack, but a set of temporary page tables. @@ -284,6 +311,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void) * All kernel threads share the same mm context; grab a * reference and switch to it. */ + atomic_inc(&mm->mm_users); atomic_inc(&mm->mm_count); current->active_mm = mm; cpumask_set_cpu(cpu, mm_cpumask(mm)); @@ -293,7 +321,6 @@ asmlinkage void __cpuinit secondary_start_kernel(void) cpu_init(); preempt_disable(); - trace_hardirqs_off(); /* * Give the platform a chance to do its own initialisation. @@ -327,6 +354,17 @@ asmlinkage void __cpuinit secondary_start_kernel(void) cpu_idle(); } +/* + * Called by both boot and secondaries to move global data into + * per-processor storage. + */ +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; +} + void __init smp_cpus_done(unsigned int max_cpus) { int cpu; @@ -349,80 +387,61 @@ void __init smp_prepare_boot_cpu(void) per_cpu(cpu_data, cpu).idle = current; } -void __init smp_prepare_cpus(unsigned int max_cpus) +static void send_ipi_message(const struct cpumask *mask, enum ipi_msg_type msg) { - unsigned int ncores = num_possible_cpus(); + unsigned long flags; + unsigned int cpu; - smp_store_cpu_info(smp_processor_id()); + local_irq_save(flags); + + for_each_cpu(cpu, mask) { + struct ipi_data *ipi = &per_cpu(ipi_data, cpu); + + spin_lock(&ipi->lock); + ipi->bits |= 1 << msg; + spin_unlock(&ipi->lock); + } /* - * are we trying to boot more cores than exist? + * Call the platform specific cross-CPU call function. */ - if (max_cpus > ncores) - max_cpus = ncores; - - if (max_cpus > 1) { - /* - * Enable the local timer or broadcast device for the - * boot CPU, but only if we have more than one CPU. - */ - percpu_timer_setup(); + smp_cross_call(mask); - /* - * Initialise the SCU if there are more than one CPU - * and let them know where to start. - */ - platform_smp_prepare_cpus(max_cpus); - } + local_irq_restore(flags); } void arch_send_call_function_ipi_mask(const struct cpumask *mask) { - smp_cross_call(mask, IPI_CALL_FUNC); + send_ipi_message(mask, IPI_CALL_FUNC); } void arch_send_call_function_single_ipi(int cpu) { - smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE); + send_ipi_message(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE); } -static const char *ipi_types[NR_IPI] = { -#define S(x,s) [x - IPI_TIMER] = s - S(IPI_TIMER, "Timer broadcast interrupts"), - S(IPI_RESCHEDULE, "Rescheduling interrupts"), - S(IPI_CALL_FUNC, "Function call interrupts"), - S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"), - S(IPI_CPU_STOP, "CPU stop interrupts"), -}; - -void show_ipi_list(struct seq_file *p, int prec) +void show_ipi_list(struct seq_file *p) { - unsigned int cpu, i; + unsigned int cpu; - for (i = 0; i < NR_IPI; i++) { - seq_printf(p, "%*s%u: ", prec - 1, "IPI", i); + seq_puts(p, "IPI:"); - for_each_present_cpu(cpu) - seq_printf(p, "%10u ", - __get_irq_stat(cpu, ipi_irqs[i])); + for_each_present_cpu(cpu) + seq_printf(p, " %10lu", per_cpu(ipi_data, cpu).ipi_count); - seq_printf(p, " %s\n", ipi_types[i]); - } + seq_putc(p, '\n'); } -u64 smp_irq_stat_cpu(unsigned int cpu) +void show_local_irqs(struct seq_file *p) { - u64 sum = 0; - int i; + unsigned int cpu; - for (i = 0; i < NR_IPI; i++) - sum += __get_irq_stat(cpu, ipi_irqs[i]); + seq_printf(p, "LOC: "); -#ifdef CONFIG_LOCAL_TIMERS - sum += __get_irq_stat(cpu, local_timer_irqs); -#endif + for_each_present_cpu(cpu) + seq_printf(p, "%10u ", irq_stat[cpu].local_timer_irqs); - return sum; + seq_putc(p, '\n'); } /* @@ -445,30 +464,18 @@ asmlinkage void __exception_irq_entry do_local_timer(struct pt_regs *regs) int cpu = smp_processor_id(); if (local_timer_ack()) { - __inc_irq_stat(cpu, local_timer_irqs); + irq_stat[cpu].local_timer_irqs++; ipi_timer(); } set_irq_regs(old_regs); } - -void show_local_irqs(struct seq_file *p, int prec) -{ - unsigned int cpu; - - seq_printf(p, "%*s: ", prec, "LOC"); - - for_each_present_cpu(cpu) - seq_printf(p, "%10u ", __get_irq_stat(cpu, local_timer_irqs)); - - seq_printf(p, " Local timer interrupts\n"); -} #endif #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST static void smp_timer_broadcast(const struct cpumask *mask) { - smp_cross_call(mask, IPI_TIMER); + send_ipi_message(mask, IPI_TIMER); } #else #define smp_timer_broadcast NULL @@ -505,21 +512,6 @@ void __cpuinit percpu_timer_setup(void) local_timer_setup(evt); } -#ifdef CONFIG_HOTPLUG_CPU -/* - * The generic clock events code purposely does not stop the local timer - * on CPU_DEAD/CPU_DEAD_FROZEN hotplug events, so we have to do it - * manually here. - */ -static void percpu_timer_stop(void) -{ - unsigned int cpu = smp_processor_id(); - struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu); - - evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt); -} -#endif - static DEFINE_SPINLOCK(stop_lock); /* @@ -546,76 +538,216 @@ static void ipi_cpu_stop(unsigned int cpu) /* * Main handler for inter-processor interrupts + * + * For ARM, the ipimask now only identifies a single + * category of IPI (Bit 1 IPIs have been replaced by a + * different mechanism): + * + * Bit 0 - Inter-processor function call */ -asmlinkage void __exception_irq_entry do_IPI(int ipinr, struct pt_regs *regs) +asmlinkage void __exception_irq_entry do_IPI(struct pt_regs *regs) { unsigned int cpu = smp_processor_id(); + struct ipi_data *ipi = &per_cpu(ipi_data, cpu); struct pt_regs *old_regs = set_irq_regs(regs); - if (ipinr >= IPI_TIMER && ipinr < IPI_TIMER + NR_IPI) - __inc_irq_stat(cpu, ipi_irqs[ipinr - IPI_TIMER]); + ipi->ipi_count++; - switch (ipinr) { - case IPI_TIMER: - ipi_timer(); - break; + for (;;) { + unsigned long msgs; - case IPI_RESCHEDULE: - /* - * nothing more to do - eveything is - * done on the interrupt return path - */ - break; + spin_lock(&ipi->lock); + msgs = ipi->bits; + ipi->bits = 0; + spin_unlock(&ipi->lock); + + if (!msgs) + break; + + do { + unsigned nextmsg; + + nextmsg = msgs & -msgs; + msgs &= ~nextmsg; + nextmsg = ffz(~nextmsg); + + switch (nextmsg) { + case IPI_TIMER: + ipi_timer(); + break; - case IPI_CALL_FUNC: - generic_smp_call_function_interrupt(); - break; + case IPI_RESCHEDULE: + /* + * nothing more to do - eveything is + * done on the interrupt return path + */ + break; - case IPI_CALL_FUNC_SINGLE: - generic_smp_call_function_single_interrupt(); - break; + case IPI_CALL_FUNC: + generic_smp_call_function_interrupt(); + break; + + case IPI_CALL_FUNC_SINGLE: + generic_smp_call_function_single_interrupt(); + break; - case IPI_CPU_STOP: - ipi_cpu_stop(cpu); - break; + case IPI_CPU_STOP: + ipi_cpu_stop(cpu); + break; - default: - printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n", - cpu, ipinr); - break; + default: + printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n", + cpu, nextmsg); + break; + } + } while (msgs); } + set_irq_regs(old_regs); } void smp_send_reschedule(int cpu) { - smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE); + send_ipi_message(cpumask_of(cpu), IPI_RESCHEDULE); } void smp_send_stop(void) { - unsigned long timeout; + cpumask_t mask = cpu_online_map; + cpu_clear(smp_processor_id(), mask); + if (!cpus_empty(mask)) + send_ipi_message(&mask, IPI_CPU_STOP); +} - if (num_online_cpus() > 1) { - cpumask_t mask = cpu_online_map; - cpu_clear(smp_processor_id(), mask); +/* + * not supported here + */ +int setup_profiling_timer(unsigned int multiplier) +{ + return -EINVAL; +} - smp_cross_call(&mask, IPI_CPU_STOP); - } +static void +on_each_cpu_mask(void (*func)(void *), void *info, int wait, + const struct cpumask *mask) +{ + preempt_disable(); - /* Wait up to one second for other CPUs to stop */ - timeout = USEC_PER_SEC; - while (num_online_cpus() > 1 && timeout--) - udelay(1); + smp_call_function_many(mask, func, info, wait); + if (cpumask_test_cpu(smp_processor_id(), mask)) + func(info); - if (num_online_cpus() > 1) - pr_warning("SMP: failed to stop secondary CPUs\n"); + preempt_enable(); } +/**********************************************************************/ + /* - * not supported here + * TLB operations */ -int setup_profiling_timer(unsigned int multiplier) +struct tlb_args { + struct vm_area_struct *ta_vma; + unsigned long ta_start; + unsigned long ta_end; +}; + +static inline void ipi_flush_tlb_all(void *ignored) { - return -EINVAL; + local_flush_tlb_all(); +} + +static inline void ipi_flush_tlb_mm(void *arg) +{ + struct mm_struct *mm = (struct mm_struct *)arg; + + local_flush_tlb_mm(mm); +} + +static inline void ipi_flush_tlb_page(void *arg) +{ + struct tlb_args *ta = (struct tlb_args *)arg; + + local_flush_tlb_page(ta->ta_vma, ta->ta_start); +} + +static inline void ipi_flush_tlb_kernel_page(void *arg) +{ + struct tlb_args *ta = (struct tlb_args *)arg; + + local_flush_tlb_kernel_page(ta->ta_start); +} + +static inline void ipi_flush_tlb_range(void *arg) +{ + struct tlb_args *ta = (struct tlb_args *)arg; + + local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end); +} + +static inline void ipi_flush_tlb_kernel_range(void *arg) +{ + struct tlb_args *ta = (struct tlb_args *)arg; + + local_flush_tlb_kernel_range(ta->ta_start, ta->ta_end); +} + +void flush_tlb_all(void) +{ + if (tlb_ops_need_broadcast()) + on_each_cpu(ipi_flush_tlb_all, NULL, 1); + else + local_flush_tlb_all(); +} + +void flush_tlb_mm(struct mm_struct *mm) +{ + if (tlb_ops_need_broadcast()) + on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, mm_cpumask(mm)); + else + local_flush_tlb_mm(mm); +} + +void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) +{ + if (tlb_ops_need_broadcast()) { + struct tlb_args ta; + ta.ta_vma = vma; + ta.ta_start = uaddr; + on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, mm_cpumask(vma->vm_mm)); + } else + local_flush_tlb_page(vma, uaddr); +} + +void flush_tlb_kernel_page(unsigned long kaddr) +{ + if (tlb_ops_need_broadcast()) { + struct tlb_args ta; + ta.ta_start = kaddr; + on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1); + } else + local_flush_tlb_kernel_page(kaddr); +} + +void flush_tlb_range(struct vm_area_struct *vma, + unsigned long start, unsigned long end) +{ + if (tlb_ops_need_broadcast()) { + struct tlb_args ta; + ta.ta_vma = vma; + ta.ta_start = start; + ta.ta_end = end; + on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, mm_cpumask(vma->vm_mm)); + } else + local_flush_tlb_range(vma, start, end); +} + +void flush_tlb_kernel_range(unsigned long start, unsigned long end) +{ + if (tlb_ops_need_broadcast()) { + struct tlb_args ta; + ta.ta_start = start; + ta.ta_end = end; + on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1); + } else + local_flush_tlb_kernel_range(start, end); } diff --git a/trunk/arch/arm/kernel/smp_tlb.c b/trunk/arch/arm/kernel/smp_tlb.c deleted file mode 100644 index 7dcb35285be7..000000000000 --- a/trunk/arch/arm/kernel/smp_tlb.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * linux/arch/arm/kernel/smp_tlb.c - * - * Copyright (C) 2002 ARM Limited, All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include - -#include -#include - -static void on_each_cpu_mask(void (*func)(void *), void *info, int wait, - const struct cpumask *mask) -{ - preempt_disable(); - - smp_call_function_many(mask, func, info, wait); - if (cpumask_test_cpu(smp_processor_id(), mask)) - func(info); - - preempt_enable(); -} - -/**********************************************************************/ - -/* - * TLB operations - */ -struct tlb_args { - struct vm_area_struct *ta_vma; - unsigned long ta_start; - unsigned long ta_end; -}; - -static inline void ipi_flush_tlb_all(void *ignored) -{ - local_flush_tlb_all(); -} - -static inline void ipi_flush_tlb_mm(void *arg) -{ - struct mm_struct *mm = (struct mm_struct *)arg; - - local_flush_tlb_mm(mm); -} - -static inline void ipi_flush_tlb_page(void *arg) -{ - struct tlb_args *ta = (struct tlb_args *)arg; - - local_flush_tlb_page(ta->ta_vma, ta->ta_start); -} - -static inline void ipi_flush_tlb_kernel_page(void *arg) -{ - struct tlb_args *ta = (struct tlb_args *)arg; - - local_flush_tlb_kernel_page(ta->ta_start); -} - -static inline void ipi_flush_tlb_range(void *arg) -{ - struct tlb_args *ta = (struct tlb_args *)arg; - - local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end); -} - -static inline void ipi_flush_tlb_kernel_range(void *arg) -{ - struct tlb_args *ta = (struct tlb_args *)arg; - - local_flush_tlb_kernel_range(ta->ta_start, ta->ta_end); -} - -void flush_tlb_all(void) -{ - if (tlb_ops_need_broadcast()) - on_each_cpu(ipi_flush_tlb_all, NULL, 1); - else - local_flush_tlb_all(); -} - -void flush_tlb_mm(struct mm_struct *mm) -{ - if (tlb_ops_need_broadcast()) - on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, mm_cpumask(mm)); - else - local_flush_tlb_mm(mm); -} - -void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) -{ - if (tlb_ops_need_broadcast()) { - struct tlb_args ta; - ta.ta_vma = vma; - ta.ta_start = uaddr; - on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, mm_cpumask(vma->vm_mm)); - } else - local_flush_tlb_page(vma, uaddr); -} - -void flush_tlb_kernel_page(unsigned long kaddr) -{ - if (tlb_ops_need_broadcast()) { - struct tlb_args ta; - ta.ta_start = kaddr; - on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1); - } else - local_flush_tlb_kernel_page(kaddr); -} - -void flush_tlb_range(struct vm_area_struct *vma, - unsigned long start, unsigned long end) -{ - if (tlb_ops_need_broadcast()) { - struct tlb_args ta; - ta.ta_vma = vma; - ta.ta_start = start; - ta.ta_end = end; - on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, mm_cpumask(vma->vm_mm)); - } else - local_flush_tlb_range(vma, start, end); -} - -void flush_tlb_kernel_range(unsigned long start, unsigned long end) -{ - if (tlb_ops_need_broadcast()) { - struct tlb_args ta; - ta.ta_start = start; - ta.ta_end = end; - on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1); - } else - local_flush_tlb_kernel_range(start, end); -} - diff --git a/trunk/arch/arm/kernel/smp_twd.c b/trunk/arch/arm/kernel/smp_twd.c index dd790745b3ef..35882fbf37f9 100644 --- a/trunk/arch/arm/kernel/smp_twd.c +++ b/trunk/arch/arm/kernel/smp_twd.c @@ -127,6 +127,8 @@ static void __cpuinit twd_calibrate_rate(void) */ void __cpuinit twd_timer_setup(struct clock_event_device *clk) { + unsigned long flags; + twd_calibrate_rate(); clk->name = "local_timer"; @@ -141,7 +143,20 @@ void __cpuinit twd_timer_setup(struct clock_event_device *clk) clk->min_delta_ns = clockevent_delta2ns(0xf, clk); /* Make sure our local interrupt controller has this enabled */ - gic_enable_ppi(clk->irq); + local_irq_save(flags); + irq_to_desc(clk->irq)->status |= IRQ_NOPROBE; + get_irq_chip(clk->irq)->unmask(clk->irq); + local_irq_restore(flags); clockevents_register_device(clk); } + +#ifdef CONFIG_HOTPLUG_CPU +/* + * take a local timer down + */ +void twd_timer_stop(void) +{ + __raw_writel(0, twd_base + TWD_TIMER_CONTROL); +} +#endif diff --git a/trunk/arch/arm/kernel/swp_emulate.c b/trunk/arch/arm/kernel/swp_emulate.c deleted file mode 100644 index 7a5760922914..000000000000 --- a/trunk/arch/arm/kernel/swp_emulate.c +++ /dev/null @@ -1,267 +0,0 @@ -/* - * linux/arch/arm/kernel/swp_emulate.c - * - * Copyright (C) 2009 ARM Limited - * __user_* functions adapted from include/asm/uaccess.h - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Implements emulation of the SWP/SWPB instructions using load-exclusive and - * store-exclusive for processors that have them disabled (or future ones that - * might not implement them). - * - * Syntax of SWP{B} instruction: SWP{B} , , [] - * Where: Rt = destination - * Rt2 = source - * Rn = address - */ - -#include -#include -#include -#include -#include -#include - -#include -#include - -/* - * Error-checking SWP macros implemented using ldrex{b}/strex{b} - */ -#define __user_swpX_asm(data, addr, res, temp, B) \ - __asm__ __volatile__( \ - " mov %2, %1\n" \ - "0: ldrex"B" %1, [%3]\n" \ - "1: strex"B" %0, %2, [%3]\n" \ - " cmp %0, #0\n" \ - " movne %0, %4\n" \ - "2:\n" \ - " .section .fixup,\"ax\"\n" \ - " .align 2\n" \ - "3: mov %0, %5\n" \ - " b 2b\n" \ - " .previous\n" \ - " .section __ex_table,\"a\"\n" \ - " .align 3\n" \ - " .long 0b, 3b\n" \ - " .long 1b, 3b\n" \ - " .previous" \ - : "=&r" (res), "+r" (data), "=&r" (temp) \ - : "r" (addr), "i" (-EAGAIN), "i" (-EFAULT) \ - : "cc", "memory") - -#define __user_swp_asm(data, addr, res, temp) \ - __user_swpX_asm(data, addr, res, temp, "") -#define __user_swpb_asm(data, addr, res, temp) \ - __user_swpX_asm(data, addr, res, temp, "b") - -/* - * Macros/defines for extracting register numbers from instruction. - */ -#define EXTRACT_REG_NUM(instruction, offset) \ - (((instruction) & (0xf << (offset))) >> (offset)) -#define RN_OFFSET 16 -#define RT_OFFSET 12 -#define RT2_OFFSET 0 -/* - * Bit 22 of the instruction encoding distinguishes between - * the SWP and SWPB variants (bit set means SWPB). - */ -#define TYPE_SWPB (1 << 22) - -static unsigned long swpcounter; -static unsigned long swpbcounter; -static unsigned long abtcounter; -static pid_t previous_pid; - -#ifdef CONFIG_PROC_FS -static int proc_read_status(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - char *p = page; - int len; - - p += sprintf(p, "Emulated SWP:\t\t%lu\n", swpcounter); - p += sprintf(p, "Emulated SWPB:\t\t%lu\n", swpbcounter); - p += sprintf(p, "Aborted SWP{B}:\t\t%lu\n", abtcounter); - if (previous_pid != 0) - p += sprintf(p, "Last process:\t\t%d\n", previous_pid); - - len = (p - page) - off; - if (len < 0) - len = 0; - - *eof = (len <= count) ? 1 : 0; - *start = page + off; - - return len; -} -#endif - -/* - * Set up process info to signal segmentation fault - called on access error. - */ -static void set_segfault(struct pt_regs *regs, unsigned long addr) -{ - siginfo_t info; - - if (find_vma(current->mm, addr) == NULL) - info.si_code = SEGV_MAPERR; - else - info.si_code = SEGV_ACCERR; - - info.si_signo = SIGSEGV; - info.si_errno = 0; - info.si_addr = (void *) instruction_pointer(regs); - - pr_debug("SWP{B} emulation: access caused memory abort!\n"); - arm_notify_die("Illegal memory access", regs, &info, 0, 0); - - abtcounter++; -} - -static int emulate_swpX(unsigned int address, unsigned int *data, - unsigned int type) -{ - unsigned int res = 0; - - if ((type != TYPE_SWPB) && (address & 0x3)) { - /* SWP to unaligned address not permitted */ - pr_debug("SWP instruction on unaligned pointer!\n"); - return -EFAULT; - } - - while (1) { - unsigned long temp; - - /* - * Barrier required between accessing protected resource and - * releasing a lock for it. Legacy code might not have done - * this, and we cannot determine that this is not the case - * being emulated, so insert always. - */ - smp_mb(); - - if (type == TYPE_SWPB) - __user_swpb_asm(*data, address, res, temp); - else - __user_swp_asm(*data, address, res, temp); - - if (likely(res != -EAGAIN) || signal_pending(current)) - break; - - cond_resched(); - } - - if (res == 0) { - /* - * Barrier also required between aquiring a lock for a - * protected resource and accessing the resource. Inserted for - * same reason as above. - */ - smp_mb(); - - if (type == TYPE_SWPB) - swpbcounter++; - else - swpcounter++; - } - - return res; -} - -/* - * swp_handler logs the id of calling process, dissects the instruction, sanity - * checks the memory location, calls emulate_swpX for the actual operation and - * deals with fixup/error handling before returning - */ -static int swp_handler(struct pt_regs *regs, unsigned int instr) -{ - unsigned int address, destreg, data, type; - unsigned int res = 0; - - perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, 0, regs, regs->ARM_pc); - - if (current->pid != previous_pid) { - pr_debug("\"%s\" (%ld) uses deprecated SWP{B} instruction\n", - current->comm, (unsigned long)current->pid); - previous_pid = current->pid; - } - - address = regs->uregs[EXTRACT_REG_NUM(instr, RN_OFFSET)]; - data = regs->uregs[EXTRACT_REG_NUM(instr, RT2_OFFSET)]; - destreg = EXTRACT_REG_NUM(instr, RT_OFFSET); - - type = instr & TYPE_SWPB; - - pr_debug("addr in r%d->0x%08x, dest is r%d, source in r%d->0x%08x)\n", - EXTRACT_REG_NUM(instr, RN_OFFSET), address, - destreg, EXTRACT_REG_NUM(instr, RT2_OFFSET), data); - - /* Check access in reasonable access range for both SWP and SWPB */ - if (!access_ok(VERIFY_WRITE, (address & ~3), 4)) { - pr_debug("SWP{B} emulation: access to %p not allowed!\n", - (void *)address); - res = -EFAULT; - } else { - res = emulate_swpX(address, &data, type); - } - - if (res == 0) { - /* - * On successful emulation, revert the adjustment to the PC - * made in kernel/traps.c in order to resume execution at the - * instruction following the SWP{B}. - */ - regs->ARM_pc += 4; - regs->uregs[destreg] = data; - } else if (res == -EFAULT) { - /* - * Memory errors do not mean emulation failed. - * Set up signal info to return SEGV, then return OK - */ - set_segfault(regs, address); - } - - return 0; -} - -/* - * Only emulate SWP/SWPB executed in ARM state/User mode. - * The kernel must be SWP free and SWP{B} does not exist in Thumb/ThumbEE. - */ -static struct undef_hook swp_hook = { - .instr_mask = 0x0fb00ff0, - .instr_val = 0x01000090, - .cpsr_mask = MODE_MASK | PSR_T_BIT | PSR_J_BIT, - .cpsr_val = USR_MODE, - .fn = swp_handler -}; - -/* - * Register handler and create status file in /proc/cpu - * Invoked as late_initcall, since not needed before init spawned. - */ -static int __init swp_emulation_init(void) -{ -#ifdef CONFIG_PROC_FS - struct proc_dir_entry *res; - - res = create_proc_entry("cpu/swp_emulation", S_IRUGO, NULL); - - if (!res) - return -ENOMEM; - - res->read_proc = proc_read_status; -#endif /* CONFIG_PROC_FS */ - - printk(KERN_NOTICE "Registering SWP/SWPB emulation handler\n"); - register_undef_hook(&swp_hook); - - return 0; -} - -late_initcall(swp_emulation_init); diff --git a/trunk/arch/arm/kernel/time.c b/trunk/arch/arm/kernel/time.c index f1e2eb19a67d..38c261f9951c 100644 --- a/trunk/arch/arm/kernel/time.c +++ b/trunk/arch/arm/kernel/time.c @@ -30,13 +30,12 @@ #include #include #include -#include #include /* * Our system timer. */ -static struct sys_timer *system_timer; +struct sys_timer *system_timer; #if defined(CONFIG_RTC_DRV_CMOS) || defined(CONFIG_RTC_DRV_CMOS_MODULE) /* this needs a better home */ @@ -161,7 +160,6 @@ device_initcall(timer_init_sysfs); void __init time_init(void) { - system_timer = machine_desc->timer; system_timer->init(); } diff --git a/trunk/arch/arm/kernel/traps.c b/trunk/arch/arm/kernel/traps.c index ee57640ba2bb..446aee97436f 100644 --- a/trunk/arch/arm/kernel/traps.c +++ b/trunk/arch/arm/kernel/traps.c @@ -37,8 +37,6 @@ static const char *handler[]= { "prefetch abort", "data abort", "address exception", "interrupt" }; -void *vectors_page; - #ifdef CONFIG_DEBUG_USER unsigned int user_debug; @@ -710,19 +708,19 @@ void __readwrite_bug(const char *fn) } EXPORT_SYMBOL(__readwrite_bug); -void __pte_error(const char *file, int line, pte_t pte) +void __pte_error(const char *file, int line, unsigned long val) { - printk("%s:%d: bad pte %08lx.\n", file, line, pte_val(pte)); + printk("%s:%d: bad pte %08lx.\n", file, line, val); } -void __pmd_error(const char *file, int line, pmd_t pmd) +void __pmd_error(const char *file, int line, unsigned long val) { - printk("%s:%d: bad pmd %08lx.\n", file, line, pmd_val(pmd)); + printk("%s:%d: bad pmd %08lx.\n", file, line, val); } -void __pgd_error(const char *file, int line, pgd_t pgd) +void __pgd_error(const char *file, int line, unsigned long val) { - printk("%s:%d: bad pgd %08lx.\n", file, line, pgd_val(pgd)); + printk("%s:%d: bad pgd %08lx.\n", file, line, val); } asmlinkage void __div0(void) @@ -758,11 +756,7 @@ static void __init kuser_get_tls_init(unsigned long vectors) void __init early_trap_init(void) { -#if defined(CONFIG_CPU_USE_DOMAINS) unsigned long vectors = CONFIG_VECTORS_BASE; -#else - unsigned long vectors = (unsigned long)vectors_page; -#endif extern char __stubs_start[], __stubs_end[]; extern char __vectors_start[], __vectors_end[]; extern char __kuser_helper_start[], __kuser_helper_end[]; @@ -786,10 +780,10 @@ void __init early_trap_init(void) * Copy signal return handlers into the vector page, and * set sigreturn to be a pointer to these. */ - memcpy((void *)(vectors + KERN_SIGRETURN_CODE - CONFIG_VECTORS_BASE), - sigreturn_codes, sizeof(sigreturn_codes)); - memcpy((void *)(vectors + KERN_RESTART_CODE - CONFIG_VECTORS_BASE), - syscall_restart_code, sizeof(syscall_restart_code)); + memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes, + sizeof(sigreturn_codes)); + memcpy((void *)KERN_RESTART_CODE, syscall_restart_code, + sizeof(syscall_restart_code)); flush_icache_range(vectors, vectors + PAGE_SIZE); modify_domain(DOMAIN_USER, DOMAIN_CLIENT); diff --git a/trunk/arch/arm/kernel/vmlinux.lds.S b/trunk/arch/arm/kernel/vmlinux.lds.S index 86b66f3f2031..897c1a8f1694 100644 --- a/trunk/arch/arm/kernel/vmlinux.lds.S +++ b/trunk/arch/arm/kernel/vmlinux.lds.S @@ -168,7 +168,6 @@ SECTIONS NOSAVE_DATA CACHELINE_ALIGNED_DATA(32) - READ_MOSTLY_DATA(32) /* * The exception fixup table (might need resorting at runtime) diff --git a/trunk/arch/arm/lib/getuser.S b/trunk/arch/arm/lib/getuser.S index 1b049cd7a49a..b1631a7dbe75 100644 --- a/trunk/arch/arm/lib/getuser.S +++ b/trunk/arch/arm/lib/getuser.S @@ -28,21 +28,20 @@ */ #include #include -#include ENTRY(__get_user_1) -1: T(ldrb) r2, [r0] +1: ldrbt r2, [r0] mov r0, #0 mov pc, lr ENDPROC(__get_user_1) ENTRY(__get_user_2) #ifdef CONFIG_THUMB2_KERNEL -2: T(ldrb) r2, [r0] -3: T(ldrb) r3, [r0, #1] +2: ldrbt r2, [r0] +3: ldrbt r3, [r0, #1] #else -2: T(ldrb) r2, [r0], #1 -3: T(ldrb) r3, [r0] +2: ldrbt r2, [r0], #1 +3: ldrbt r3, [r0] #endif #ifndef __ARMEB__ orr r2, r2, r3, lsl #8 @@ -54,7 +53,7 @@ ENTRY(__get_user_2) ENDPROC(__get_user_2) ENTRY(__get_user_4) -4: T(ldr) r2, [r0] +4: ldrt r2, [r0] mov r0, #0 mov pc, lr ENDPROC(__get_user_4) diff --git a/trunk/arch/arm/lib/putuser.S b/trunk/arch/arm/lib/putuser.S index c023fc11e86c..5a01a23c6c06 100644 --- a/trunk/arch/arm/lib/putuser.S +++ b/trunk/arch/arm/lib/putuser.S @@ -28,10 +28,9 @@ */ #include #include -#include ENTRY(__put_user_1) -1: T(strb) r2, [r0] +1: strbt r2, [r0] mov r0, #0 mov pc, lr ENDPROC(__put_user_1) @@ -40,19 +39,19 @@ ENTRY(__put_user_2) mov ip, r2, lsr #8 #ifdef CONFIG_THUMB2_KERNEL #ifndef __ARMEB__ -2: T(strb) r2, [r0] -3: T(strb) ip, [r0, #1] +2: strbt r2, [r0] +3: strbt ip, [r0, #1] #else -2: T(strb) ip, [r0] -3: T(strb) r2, [r0, #1] +2: strbt ip, [r0] +3: strbt r2, [r0, #1] #endif #else /* !CONFIG_THUMB2_KERNEL */ #ifndef __ARMEB__ -2: T(strb) r2, [r0], #1 -3: T(strb) ip, [r0] +2: strbt r2, [r0], #1 +3: strbt ip, [r0] #else -2: T(strb) ip, [r0], #1 -3: T(strb) r2, [r0] +2: strbt ip, [r0], #1 +3: strbt r2, [r0] #endif #endif /* CONFIG_THUMB2_KERNEL */ mov r0, #0 @@ -60,18 +59,18 @@ ENTRY(__put_user_2) ENDPROC(__put_user_2) ENTRY(__put_user_4) -4: T(str) r2, [r0] +4: strt r2, [r0] mov r0, #0 mov pc, lr ENDPROC(__put_user_4) ENTRY(__put_user_8) #ifdef CONFIG_THUMB2_KERNEL -5: T(str) r2, [r0] -6: T(str) r3, [r0, #4] +5: strt r2, [r0] +6: strt r3, [r0, #4] #else -5: T(str) r2, [r0], #4 -6: T(str) r3, [r0] +5: strt r2, [r0], #4 +6: strt r3, [r0] #endif mov r0, #0 mov pc, lr diff --git a/trunk/arch/arm/lib/uaccess.S b/trunk/arch/arm/lib/uaccess.S index d0ece2aeb70d..fee9f6f88adb 100644 --- a/trunk/arch/arm/lib/uaccess.S +++ b/trunk/arch/arm/lib/uaccess.S @@ -14,7 +14,6 @@ #include #include #include -#include .text @@ -32,11 +31,11 @@ rsb ip, ip, #4 cmp ip, #2 ldrb r3, [r1], #1 -USER( T(strb) r3, [r0], #1) @ May fault +USER( strbt r3, [r0], #1) @ May fault ldrgeb r3, [r1], #1 -USER( T(strgeb) r3, [r0], #1) @ May fault +USER( strgebt r3, [r0], #1) @ May fault ldrgtb r3, [r1], #1 -USER( T(strgtb) r3, [r0], #1) @ May fault +USER( strgtbt r3, [r0], #1) @ May fault sub r2, r2, ip b .Lc2u_dest_aligned @@ -59,7 +58,7 @@ ENTRY(__copy_to_user) addmi ip, r2, #4 bmi .Lc2u_0nowords ldr r3, [r1], #4 -USER( T(str) r3, [r0], #4) @ May fault +USER( strt r3, [r0], #4) @ May fault mov ip, r0, lsl #32 - PAGE_SHIFT @ On each page, use a ld/st??t instruction rsb ip, ip, #0 movs ip, ip, lsr #32 - PAGE_SHIFT @@ -88,18 +87,18 @@ USER( T(str) r3, [r0], #4) @ May fault stmneia r0!, {r3 - r4} @ Shouldnt fault tst ip, #4 ldrne r3, [r1], #4 - T(strne) r3, [r0], #4 @ Shouldnt fault + strnet r3, [r0], #4 @ Shouldnt fault ands ip, ip, #3 beq .Lc2u_0fupi .Lc2u_0nowords: teq ip, #0 beq .Lc2u_finished .Lc2u_nowords: cmp ip, #2 ldrb r3, [r1], #1 -USER( T(strb) r3, [r0], #1) @ May fault +USER( strbt r3, [r0], #1) @ May fault ldrgeb r3, [r1], #1 -USER( T(strgeb) r3, [r0], #1) @ May fault +USER( strgebt r3, [r0], #1) @ May fault ldrgtb r3, [r1], #1 -USER( T(strgtb) r3, [r0], #1) @ May fault +USER( strgtbt r3, [r0], #1) @ May fault b .Lc2u_finished .Lc2u_not_enough: @@ -120,7 +119,7 @@ USER( T(strgtb) r3, [r0], #1) @ May fault mov r3, r7, pull #8 ldr r7, [r1], #4 orr r3, r3, r7, push #24 -USER( T(str) r3, [r0], #4) @ May fault +USER( strt r3, [r0], #4) @ May fault mov ip, r0, lsl #32 - PAGE_SHIFT rsb ip, ip, #0 movs ip, ip, lsr #32 - PAGE_SHIFT @@ -155,18 +154,18 @@ USER( T(str) r3, [r0], #4) @ May fault movne r3, r7, pull #8 ldrne r7, [r1], #4 orrne r3, r3, r7, push #24 - T(strne) r3, [r0], #4 @ Shouldnt fault + strnet r3, [r0], #4 @ Shouldnt fault ands ip, ip, #3 beq .Lc2u_1fupi .Lc2u_1nowords: mov r3, r7, get_byte_1 teq ip, #0 beq .Lc2u_finished cmp ip, #2 -USER( T(strb) r3, [r0], #1) @ May fault +USER( strbt r3, [r0], #1) @ May fault movge r3, r7, get_byte_2 -USER( T(strgeb) r3, [r0], #1) @ May fault +USER( strgebt r3, [r0], #1) @ May fault movgt r3, r7, get_byte_3 -USER( T(strgtb) r3, [r0], #1) @ May fault +USER( strgtbt r3, [r0], #1) @ May fault b .Lc2u_finished .Lc2u_2fupi: subs r2, r2, #4 @@ -175,7 +174,7 @@ USER( T(strgtb) r3, [r0], #1) @ May fault mov r3, r7, pull #16 ldr r7, [r1], #4 orr r3, r3, r7, push #16 -USER( T(str) r3, [r0], #4) @ May fault +USER( strt r3, [r0], #4) @ May fault mov ip, r0, lsl #32 - PAGE_SHIFT rsb ip, ip, #0 movs ip, ip, lsr #32 - PAGE_SHIFT @@ -210,18 +209,18 @@ USER( T(str) r3, [r0], #4) @ May fault movne r3, r7, pull #16 ldrne r7, [r1], #4 orrne r3, r3, r7, push #16 - T(strne) r3, [r0], #4 @ Shouldnt fault + strnet r3, [r0], #4 @ Shouldnt fault ands ip, ip, #3 beq .Lc2u_2fupi .Lc2u_2nowords: mov r3, r7, get_byte_2 teq ip, #0 beq .Lc2u_finished cmp ip, #2 -USER( T(strb) r3, [r0], #1) @ May fault +USER( strbt r3, [r0], #1) @ May fault movge r3, r7, get_byte_3 -USER( T(strgeb) r3, [r0], #1) @ May fault +USER( strgebt r3, [r0], #1) @ May fault ldrgtb r3, [r1], #0 -USER( T(strgtb) r3, [r0], #1) @ May fault +USER( strgtbt r3, [r0], #1) @ May fault b .Lc2u_finished .Lc2u_3fupi: subs r2, r2, #4 @@ -230,7 +229,7 @@ USER( T(strgtb) r3, [r0], #1) @ May fault mov r3, r7, pull #24 ldr r7, [r1], #4 orr r3, r3, r7, push #8 -USER( T(str) r3, [r0], #4) @ May fault +USER( strt r3, [r0], #4) @ May fault mov ip, r0, lsl #32 - PAGE_SHIFT rsb ip, ip, #0 movs ip, ip, lsr #32 - PAGE_SHIFT @@ -265,18 +264,18 @@ USER( T(str) r3, [r0], #4) @ May fault movne r3, r7, pull #24 ldrne r7, [r1], #4 orrne r3, r3, r7, push #8 - T(strne) r3, [r0], #4 @ Shouldnt fault + strnet r3, [r0], #4 @ Shouldnt fault ands ip, ip, #3 beq .Lc2u_3fupi .Lc2u_3nowords: mov r3, r7, get_byte_3 teq ip, #0 beq .Lc2u_finished cmp ip, #2 -USER( T(strb) r3, [r0], #1) @ May fault +USER( strbt r3, [r0], #1) @ May fault ldrgeb r3, [r1], #1 -USER( T(strgeb) r3, [r0], #1) @ May fault +USER( strgebt r3, [r0], #1) @ May fault ldrgtb r3, [r1], #0 -USER( T(strgtb) r3, [r0], #1) @ May fault +USER( strgtbt r3, [r0], #1) @ May fault b .Lc2u_finished ENDPROC(__copy_to_user) @@ -295,11 +294,11 @@ ENDPROC(__copy_to_user) .Lcfu_dest_not_aligned: rsb ip, ip, #4 cmp ip, #2 -USER( T(ldrb) r3, [r1], #1) @ May fault +USER( ldrbt r3, [r1], #1) @ May fault strb r3, [r0], #1 -USER( T(ldrgeb) r3, [r1], #1) @ May fault +USER( ldrgebt r3, [r1], #1) @ May fault strgeb r3, [r0], #1 -USER( T(ldrgtb) r3, [r1], #1) @ May fault +USER( ldrgtbt r3, [r1], #1) @ May fault strgtb r3, [r0], #1 sub r2, r2, ip b .Lcfu_dest_aligned @@ -322,7 +321,7 @@ ENTRY(__copy_from_user) .Lcfu_0fupi: subs r2, r2, #4 addmi ip, r2, #4 bmi .Lcfu_0nowords -USER( T(ldr) r3, [r1], #4) +USER( ldrt r3, [r1], #4) str r3, [r0], #4 mov ip, r1, lsl #32 - PAGE_SHIFT @ On each page, use a ld/st??t instruction rsb ip, ip, #0 @@ -351,18 +350,18 @@ USER( T(ldr) r3, [r1], #4) ldmneia r1!, {r3 - r4} @ Shouldnt fault stmneia r0!, {r3 - r4} tst ip, #4 - T(ldrne) r3, [r1], #4 @ Shouldnt fault + ldrnet r3, [r1], #4 @ Shouldnt fault strne r3, [r0], #4 ands ip, ip, #3 beq .Lcfu_0fupi .Lcfu_0nowords: teq ip, #0 beq .Lcfu_finished .Lcfu_nowords: cmp ip, #2 -USER( T(ldrb) r3, [r1], #1) @ May fault +USER( ldrbt r3, [r1], #1) @ May fault strb r3, [r0], #1 -USER( T(ldrgeb) r3, [r1], #1) @ May fault +USER( ldrgebt r3, [r1], #1) @ May fault strgeb r3, [r0], #1 -USER( T(ldrgtb) r3, [r1], #1) @ May fault +USER( ldrgtbt r3, [r1], #1) @ May fault strgtb r3, [r0], #1 b .Lcfu_finished @@ -375,7 +374,7 @@ USER( T(ldrgtb) r3, [r1], #1) @ May fault .Lcfu_src_not_aligned: bic r1, r1, #3 -USER( T(ldr) r7, [r1], #4) @ May fault +USER( ldrt r7, [r1], #4) @ May fault cmp ip, #2 bgt .Lcfu_3fupi beq .Lcfu_2fupi @@ -383,7 +382,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault addmi ip, r2, #4 bmi .Lcfu_1nowords mov r3, r7, pull #8 -USER( T(ldr) r7, [r1], #4) @ May fault +USER( ldrt r7, [r1], #4) @ May fault orr r3, r3, r7, push #24 str r3, [r0], #4 mov ip, r1, lsl #32 - PAGE_SHIFT @@ -418,7 +417,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault stmneia r0!, {r3 - r4} tst ip, #4 movne r3, r7, pull #8 -USER( T(ldrne) r7, [r1], #4) @ May fault +USER( ldrnet r7, [r1], #4) @ May fault orrne r3, r3, r7, push #24 strne r3, [r0], #4 ands ip, ip, #3 @@ -438,7 +437,7 @@ USER( T(ldrne) r7, [r1], #4) @ May fault addmi ip, r2, #4 bmi .Lcfu_2nowords mov r3, r7, pull #16 -USER( T(ldr) r7, [r1], #4) @ May fault +USER( ldrt r7, [r1], #4) @ May fault orr r3, r3, r7, push #16 str r3, [r0], #4 mov ip, r1, lsl #32 - PAGE_SHIFT @@ -474,7 +473,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault stmneia r0!, {r3 - r4} tst ip, #4 movne r3, r7, pull #16 -USER( T(ldrne) r7, [r1], #4) @ May fault +USER( ldrnet r7, [r1], #4) @ May fault orrne r3, r3, r7, push #16 strne r3, [r0], #4 ands ip, ip, #3 @@ -486,7 +485,7 @@ USER( T(ldrne) r7, [r1], #4) @ May fault strb r3, [r0], #1 movge r3, r7, get_byte_3 strgeb r3, [r0], #1 -USER( T(ldrgtb) r3, [r1], #0) @ May fault +USER( ldrgtbt r3, [r1], #0) @ May fault strgtb r3, [r0], #1 b .Lcfu_finished @@ -494,7 +493,7 @@ USER( T(ldrgtb) r3, [r1], #0) @ May fault addmi ip, r2, #4 bmi .Lcfu_3nowords mov r3, r7, pull #24 -USER( T(ldr) r7, [r1], #4) @ May fault +USER( ldrt r7, [r1], #4) @ May fault orr r3, r3, r7, push #8 str r3, [r0], #4 mov ip, r1, lsl #32 - PAGE_SHIFT @@ -529,7 +528,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault stmneia r0!, {r3 - r4} tst ip, #4 movne r3, r7, pull #24 -USER( T(ldrne) r7, [r1], #4) @ May fault +USER( ldrnet r7, [r1], #4) @ May fault orrne r3, r3, r7, push #8 strne r3, [r0], #4 ands ip, ip, #3 @@ -539,9 +538,9 @@ USER( T(ldrne) r7, [r1], #4) @ May fault beq .Lcfu_finished cmp ip, #2 strb r3, [r0], #1 -USER( T(ldrgeb) r3, [r1], #1) @ May fault +USER( ldrgebt r3, [r1], #1) @ May fault strgeb r3, [r0], #1 -USER( T(ldrgtb) r3, [r1], #1) @ May fault +USER( ldrgtbt r3, [r1], #1) @ May fault strgtb r3, [r0], #1 b .Lcfu_finished ENDPROC(__copy_from_user) diff --git a/trunk/arch/arm/mach-at91/Makefile b/trunk/arch/arm/mach-at91/Makefile index d13add71f72a..821eb842795f 100644 --- a/trunk/arch/arm/mach-at91/Makefile +++ b/trunk/arch/arm/mach-at91/Makefile @@ -24,8 +24,8 @@ obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o # AT91RM9200 board-specific support obj-$(CONFIG_MACH_ONEARM) += board-1arm.o -obj-$(CONFIG_ARCH_AT91RM9200DK) += board-rm9200dk.o -obj-$(CONFIG_MACH_AT91RM9200EK) += board-rm9200ek.o +obj-$(CONFIG_ARCH_AT91RM9200DK) += board-dk.o +obj-$(CONFIG_MACH_AT91RM9200EK) += board-ek.o obj-$(CONFIG_MACH_CSB337) += board-csb337.o obj-$(CONFIG_MACH_CSB637) += board-csb637.o obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o @@ -65,7 +65,7 @@ obj-$(CONFIG_MACH_AT91SAM9G20EK) += board-sam9g20ek.o obj-$(CONFIG_MACH_CPU9G20) += board-cpu9krea.o obj-$(CONFIG_MACH_STAMP9G20) += board-stamp9g20.o obj-$(CONFIG_MACH_PORTUXG20) += board-stamp9g20.o -obj-$(CONFIG_MACH_PCONTROL_G20) += board-pcontrol-g20.o board-stamp9g20.o +obj-$(CONFIG_MACH_PCONTROL_G20) += board-pcontrol-g20.o # AT91SAM9260/AT91SAM9G20 board-specific support obj-$(CONFIG_MACH_SNAPPER_9260) += board-snapper9260.o diff --git a/trunk/arch/arm/mach-at91/at91rm9200_devices.c b/trunk/arch/arm/mach-at91/at91rm9200_devices.c index 7b539228e0ef..9338825cfcd7 100644 --- a/trunk/arch/arm/mach-at91/at91rm9200_devices.c +++ b/trunk/arch/arm/mach-at91/at91rm9200_devices.c @@ -1106,6 +1106,51 @@ static inline void configure_usart3_pins(unsigned pins) static struct platform_device *__initdata at91_uarts[ATMEL_MAX_UART]; /* the UARTs to use */ struct platform_device *atmel_default_console_device; /* the serial console device */ +void __init __deprecated at91_init_serial(struct at91_uart_config *config) +{ + int i; + + /* Fill in list of supported UARTs */ + for (i = 0; i < config->nr_tty; i++) { + switch (config->tty_map[i]) { + case 0: + configure_usart0_pins(ATMEL_UART_CTS | ATMEL_UART_RTS); + at91_uarts[i] = &at91rm9200_uart0_device; + at91_clock_associate("usart0_clk", &at91rm9200_uart0_device.dev, "usart"); + break; + case 1: + configure_usart1_pins(ATMEL_UART_CTS | ATMEL_UART_RTS | ATMEL_UART_DSR | ATMEL_UART_DTR | ATMEL_UART_DCD | ATMEL_UART_RI); + at91_uarts[i] = &at91rm9200_uart1_device; + at91_clock_associate("usart1_clk", &at91rm9200_uart1_device.dev, "usart"); + break; + case 2: + configure_usart2_pins(0); + at91_uarts[i] = &at91rm9200_uart2_device; + at91_clock_associate("usart2_clk", &at91rm9200_uart2_device.dev, "usart"); + break; + case 3: + configure_usart3_pins(0); + at91_uarts[i] = &at91rm9200_uart3_device; + at91_clock_associate("usart3_clk", &at91rm9200_uart3_device.dev, "usart"); + break; + case 4: + configure_dbgu_pins(); + at91_uarts[i] = &at91rm9200_dbgu_device; + at91_clock_associate("mck", &at91rm9200_dbgu_device.dev, "usart"); + break; + default: + continue; + } + at91_uarts[i]->id = i; /* update ID number to mapped ID */ + } + + /* Set serial console device */ + if (config->console_tty < ATMEL_MAX_UART) + atmel_default_console_device = at91_uarts[config->console_tty]; + if (!atmel_default_console_device) + printk(KERN_INFO "AT91: No default serial console defined.\n"); +} + void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) { struct platform_device *pdev; diff --git a/trunk/arch/arm/mach-at91/at91rm9200_time.c b/trunk/arch/arm/mach-at91/at91rm9200_time.c index 1dd69c85dfec..2500f41d8d2d 100644 --- a/trunk/arch/arm/mach-at91/at91rm9200_time.c +++ b/trunk/arch/arm/mach-at91/at91rm9200_time.c @@ -101,6 +101,7 @@ static struct clocksource clk32k = { .rating = 150, .read = read_clk32k, .mask = CLOCKSOURCE_MASK(20), + .shift = 10, .flags = CLOCK_SOURCE_IS_CONTINUOUS, }; @@ -200,7 +201,8 @@ void __init at91rm9200_timer_init(void) clockevents_register_device(&clkevt); /* register clocksource */ - clocksource_register_hz(&clk32k, AT91_SLOW_CLOCK); + clk32k.mult = clocksource_hz2mult(AT91_SLOW_CLOCK, clk32k.shift); + clocksource_register(&clk32k); } struct sys_timer at91rm9200_timer = { diff --git a/trunk/arch/arm/mach-at91/at91sam926x_time.c b/trunk/arch/arm/mach-at91/at91sam926x_time.c index 4ba85499fa97..608a63240b64 100644 --- a/trunk/arch/arm/mach-at91/at91sam926x_time.c +++ b/trunk/arch/arm/mach-at91/at91sam926x_time.c @@ -51,6 +51,7 @@ static struct clocksource pit_clk = { .name = "pit", .rating = 175, .read = read_pit_clk, + .shift = 20, .flags = CLOCK_SOURCE_IS_CONTINUOUS, }; @@ -162,9 +163,10 @@ static void __init at91sam926x_pit_init(void) * Register clocksource. The high order bits of PIV are unused, * so this isn't a 32-bit counter unless we get clockevent irqs. */ + pit_clk.mult = clocksource_hz2mult(pit_rate, pit_clk.shift); bits = 12 /* PICNT */ + ilog2(pit_cycle) /* PIV */; pit_clk.mask = CLOCKSOURCE_MASK(bits); - clocksource_register_hz(&pit_clk, pit_rate); + clocksource_register(&pit_clk); /* Set up irq handler */ setup_irq(AT91_ID_SYS, &at91sam926x_pit_irq); diff --git a/trunk/arch/arm/mach-at91/board-1arm.c b/trunk/arch/arm/mach-at91/board-1arm.c index 8a3fc84847c1..46bdc82d3fbf 100644 --- a/trunk/arch/arm/mach-at91/board-1arm.c +++ b/trunk/arch/arm/mach-at91/board-1arm.c @@ -39,24 +39,24 @@ #include "generic.h" +/* + * Serial port configuration. + * 0 .. 3 = USART0 .. USART3 + * 4 = DBGU + */ +static struct at91_uart_config __initdata onearm_uart_config = { + .console_tty = 0, /* ttyS0 */ + .nr_tty = 3, + .tty_map = { 4, 0, 1, -1, -1 }, /* ttyS0, ..., ttyS4 */ +}; + static void __init onearm_map_io(void) { /* Initialize processor: 18.432 MHz crystal */ at91rm9200_initialize(18432000, AT91RM9200_PQFP); - /* DBGU on ttyS0. (Rx & Tx only) */ - at91_register_uart(0, 0, 0); - - /* USART0 on ttyS1 (Rx, Tx, CTS, RTS) */ - at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); - - /* USART1 on ttyS2 (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ - at91_register_uart(AT91RM9200_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS - | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD - | ATMEL_UART_RI); - - /* set serial console to ttyS0 (ie, DBGU) */ - at91_set_serial_console(0); + /* Setup the serial ports and console */ + at91_init_serial(&onearm_uart_config); } static void __init onearm_init_irq(void) diff --git a/trunk/arch/arm/mach-at91/board-rm9200dk.c b/trunk/arch/arm/mach-at91/board-dk.c similarity index 98% rename from trunk/arch/arm/mach-at91/board-rm9200dk.c rename to trunk/arch/arm/mach-at91/board-dk.c index 4c1047c8200d..e14f0e165680 100644 --- a/trunk/arch/arm/mach-at91/board-rm9200dk.c +++ b/trunk/arch/arm/mach-at91/board-dk.c @@ -1,5 +1,5 @@ /* - * linux/arch/arm/mach-at91/board-rm9200dk.c + * linux/arch/arm/mach-at91/board-dk.c * * Copyright (C) 2005 SAN People * @@ -91,12 +91,10 @@ static struct at91_cf_data __initdata dk_cf_data = { // .vcc_pin = ... always powered }; -#ifndef CONFIG_MTD_AT91_DATAFLASH_CARD static struct at91_mmc_data __initdata dk_mmc_data = { .slot_b = 0, .wire4 = 1, }; -#endif static struct spi_board_info dk_spi_devices[] = { { /* DataFlash chip */ diff --git a/trunk/arch/arm/mach-at91/board-rm9200ek.c b/trunk/arch/arm/mach-at91/board-ek.c similarity index 98% rename from trunk/arch/arm/mach-at91/board-rm9200ek.c rename to trunk/arch/arm/mach-at91/board-ek.c index 9df1be8818c0..56e92c4bbc2a 100644 --- a/trunk/arch/arm/mach-at91/board-rm9200ek.c +++ b/trunk/arch/arm/mach-at91/board-ek.c @@ -1,5 +1,5 @@ /* - * linux/arch/arm/mach-at91/board-rm9200ek.c + * linux/arch/arm/mach-at91/board-ek.c * * Copyright (C) 2005 SAN People * @@ -84,14 +84,12 @@ static struct at91_udc_data __initdata ek_udc_data = { .pullup_pin = AT91_PIN_PD5, }; -#ifndef CONFIG_MTD_AT91_DATAFLASH_CARD static struct at91_mmc_data __initdata ek_mmc_data = { .det_pin = AT91_PIN_PB27, .slot_b = 0, .wire4 = 1, .wp_pin = AT91_PIN_PA17, }; -#endif static struct spi_board_info ek_spi_devices[] = { { /* DataFlash chip */ diff --git a/trunk/arch/arm/mach-at91/board-kafa.c b/trunk/arch/arm/mach-at91/board-kafa.c index d2e1f4ec1fcc..c0ce79d431a0 100644 --- a/trunk/arch/arm/mach-at91/board-kafa.c +++ b/trunk/arch/arm/mach-at91/board-kafa.c @@ -39,6 +39,17 @@ #include "generic.h" +/* + * Serial port configuration. + * 0 .. 3 = USART0 .. USART3 + * 4 = DBGU + */ +static struct at91_uart_config __initdata kafa_uart_config = { + .console_tty = 0, /* ttyS0 */ + .nr_tty = 2, + .tty_map = { 4, 0, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ +}; + static void __init kafa_map_io(void) { /* Initialize processor: 18.432 MHz crystal */ @@ -47,14 +58,8 @@ static void __init kafa_map_io(void) /* Set up the LEDs */ at91_init_leds(AT91_PIN_PB4, AT91_PIN_PB4); - /* DBGU on ttyS0. (Rx & Tx only) */ - at91_register_uart(0, 0, 0); - - /* USART0 on ttyS1 (Rx, Tx, CTS, RTS) */ - at91_register_uart(AT91RM9200_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS); - - /* set serial console to ttyS0 (ie, DBGU) */ - at91_set_serial_console(0); + /* Setup the serial ports and console */ + at91_init_serial(&kafa_uart_config); } static void __init kafa_init_irq(void) diff --git a/trunk/arch/arm/mach-at91/board-pcontrol-g20.c b/trunk/arch/arm/mach-at91/board-pcontrol-g20.c index feb65787c30b..bba5a560e02b 100644 --- a/trunk/arch/arm/mach-at91/board-pcontrol-g20.c +++ b/trunk/arch/arm/mach-at91/board-pcontrol-g20.c @@ -31,7 +31,6 @@ #include #include -#include #include "sam9_smc.h" #include "generic.h" @@ -39,7 +38,11 @@ static void __init pcontrol_g20_map_io(void) { - stamp9g20_map_io(); + /* Initialize processor: 18.432 MHz crystal */ + at91sam9260_initialize(18432000); + + /* DGBU on ttyS0. (Rx, Tx) only TTL -> JTAG connector X7 17,19 ) */ + at91_register_uart(0, 0, 0); /* USART0 on ttyS1. (Rx, Tx, CTS, RTS) piggyback A2 */ at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS @@ -51,6 +54,9 @@ static void __init pcontrol_g20_map_io(void) /* USART2 on ttyS3. (Rx, Tx) 9bit-Bus Multidrop-mode X4 */ at91_register_uart(AT91SAM9260_ID_US4, 3, 0); + + /* set serial console to ttyS0 (ie, DBGU) */ + at91_set_serial_console(0); } @@ -60,6 +66,38 @@ static void __init init_irq(void) } +/* + * NAND flash 512MiB 1,8V 8-bit, sector size 128 KiB + */ +static struct atmel_nand_data __initdata nand_data = { + .ale = 21, + .cle = 22, + .rdy_pin = AT91_PIN_PC13, + .enable_pin = AT91_PIN_PC14, +}; + +/* + * Bus timings; unit = 7.57ns + */ +static struct sam9_smc_config __initdata nand_smc_config = { + .ncs_read_setup = 0, + .nrd_setup = 2, + .ncs_write_setup = 0, + .nwe_setup = 2, + + .ncs_read_pulse = 4, + .nrd_pulse = 4, + .ncs_write_pulse = 4, + .nwe_pulse = 4, + + .read_cycle = 7, + .write_cycle = 7, + + .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE + | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8, + .tdf_cycles = 3, +}; + static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { { .ncs_read_setup = 16, .nrd_setup = 18, @@ -100,6 +138,14 @@ static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { { .tdf_cycles = 1, } }; +static void __init add_device_nand(void) +{ + /* configure chip-select 3 (NAND) */ + sam9_smc_configure(3, &nand_smc_config); + at91_add_device_nand(&nand_data); +} + + static void __init add_device_pcontrol(void) { /* configure chip-select 4 (IO compatible to 8051 X4 ) */ @@ -109,6 +155,23 @@ static void __init add_device_pcontrol(void) } +/* + * MCI (SD/MMC) + * det_pin, wp_pin and vcc_pin are not connected + */ +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) +static struct mci_platform_data __initdata mmc_data = { + .slot[0] = { + .bus_width = 4, + }, +}; +#else +static struct at91_mmc_data __initdata mmc_data = { + .wire4 = 1, +}; +#endif + + /* * USB Host port */ @@ -202,13 +265,42 @@ static struct spi_board_info pcontrol_g20_spi_devices[] = { }; +/* + * Dallas 1-Wire DS2431 + */ +static struct w1_gpio_platform_data w1_gpio_pdata = { + .pin = AT91_PIN_PA29, + .is_open_drain = 1, +}; + +static struct platform_device w1_device = { + .name = "w1-gpio", + .id = -1, + .dev.platform_data = &w1_gpio_pdata, +}; + +static void add_wire1(void) +{ + at91_set_GPIO_periph(w1_gpio_pdata.pin, 1); + at91_set_multi_drive(w1_gpio_pdata.pin, 1); + platform_device_register(&w1_device); +} + + static void __init pcontrol_g20_board_init(void) { - stamp9g20_board_init(); + at91_add_device_serial(); + add_device_nand(); +#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) + at91_add_device_mci(0, &mmc_data); +#else + at91_add_device_mmc(0, &mmc_data); +#endif at91_add_device_usbh(&usbh_data); at91_add_device_eth(&macb_data); at91_add_device_i2c(pcontrol_g20_i2c_devices, ARRAY_SIZE(pcontrol_g20_i2c_devices)); + add_wire1(); add_device_pcontrol(); at91_add_device_spi(pcontrol_g20_spi_devices, ARRAY_SIZE(pcontrol_g20_spi_devices)); diff --git a/trunk/arch/arm/mach-at91/board-picotux200.c b/trunk/arch/arm/mach-at91/board-picotux200.c index 55dad3a46547..9d833bbc592d 100644 --- a/trunk/arch/arm/mach-at91/board-picotux200.c +++ b/trunk/arch/arm/mach-at91/board-picotux200.c @@ -43,21 +43,24 @@ #include "generic.h" +/* + * Serial port configuration. + * 0 .. 3 = USART0 .. USART3 + * 4 = DBGU + */ +static struct at91_uart_config __initdata picotux200_uart_config = { + .console_tty = 0, /* ttyS0 */ + .nr_tty = 2, + .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ +}; + static void __init picotux200_map_io(void) { /* Initialize processor: 18.432 MHz crystal */ at91rm9200_initialize(18432000, AT91RM9200_BGA); - /* DBGU on ttyS0. (Rx & Tx only) */ - at91_register_uart(0, 0, 0); - - /* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ - at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS - | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD - | ATMEL_UART_RI); - - /* set serial console to ttyS0 (ie, DBGU) */ - at91_set_serial_console(0); + /* Setup the serial ports and console */ + at91_init_serial(&picotux200_uart_config); } static void __init picotux200_init_irq(void) @@ -74,6 +77,11 @@ static struct at91_usbh_data __initdata picotux200_usbh_data = { .ports = 1, }; +// static struct at91_udc_data __initdata picotux200_udc_data = { +// .vbus_pin = AT91_PIN_PD4, +// .pullup_pin = AT91_PIN_PD5, +// }; + static struct at91_mmc_data __initdata picotux200_mmc_data = { .det_pin = AT91_PIN_PB27, .slot_b = 0, @@ -81,6 +89,21 @@ static struct at91_mmc_data __initdata picotux200_mmc_data = { .wp_pin = AT91_PIN_PA17, }; +// static struct spi_board_info picotux200_spi_devices[] = { +// { /* DataFlash chip */ +// .modalias = "mtd_dataflash", +// .chip_select = 0, +// .max_speed_hz = 15 * 1000 * 1000, +// }, +// #ifdef CONFIG_MTD_AT91_DATAFLASH_CARD +// { /* DataFlash card */ +// .modalias = "mtd_dataflash", +// .chip_select = 3, +// .max_speed_hz = 15 * 1000 * 1000, +// }, +// #endif +// }; + #define PICOTUX200_FLASH_BASE AT91_CHIPSELECT_0 #define PICOTUX200_FLASH_SIZE SZ_4M @@ -112,11 +135,21 @@ static void __init picotux200_board_init(void) at91_add_device_eth(&picotux200_eth_data); /* USB Host */ at91_add_device_usbh(&picotux200_usbh_data); + /* USB Device */ + // at91_add_device_udc(&picotux200_udc_data); + // at91_set_multi_drive(picotux200_udc_data.pullup_pin, 1); /* pullup_pin is connected to reset */ /* I2C */ at91_add_device_i2c(NULL, 0); + /* SPI */ + // at91_add_device_spi(picotux200_spi_devices, ARRAY_SIZE(picotux200_spi_devices)); +#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD + /* DataFlash card */ + at91_set_gpio_output(AT91_PIN_PB22, 0); +#else /* MMC */ at91_set_gpio_output(AT91_PIN_PB22, 1); /* this MMC card slot can optionally use SPI signaling (CS3). */ at91_add_device_mmc(0, &picotux200_mmc_data); +#endif /* NOR Flash */ platform_device_register(&picotux200_flash); } diff --git a/trunk/arch/arm/mach-at91/board-stamp9g20.c b/trunk/arch/arm/mach-at91/board-stamp9g20.c index f8902b118960..5206eef4a67e 100644 --- a/trunk/arch/arm/mach-at91/board-stamp9g20.c +++ b/trunk/arch/arm/mach-at91/board-stamp9g20.c @@ -32,7 +32,7 @@ #include "generic.h" -void __init stamp9g20_map_io(void) +static void __init portuxg20_map_io(void) { /* Initialize processor: 18.432 MHz crystal */ at91sam9260_initialize(18432000); @@ -40,24 +40,6 @@ void __init stamp9g20_map_io(void) /* DGBU on ttyS0. (Rx & Tx only) */ at91_register_uart(0, 0, 0); - /* set serial console to ttyS0 (ie, DBGU) */ - at91_set_serial_console(0); -} - -static void __init stamp9g20evb_map_io(void) -{ - stamp9g20_map_io(); - - /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ - at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS - | ATMEL_UART_DTR | ATMEL_UART_DSR - | ATMEL_UART_DCD | ATMEL_UART_RI); -} - -static void __init portuxg20_map_io(void) -{ - stamp9g20_map_io(); - /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS | ATMEL_UART_DTR | ATMEL_UART_DSR @@ -74,6 +56,26 @@ static void __init portuxg20_map_io(void) /* USART5 on ttyS6. (Rx, Tx only) */ at91_register_uart(AT91SAM9260_ID_US5, 6, 0); + + /* set serial console to ttyS0 (ie, DBGU) */ + at91_set_serial_console(0); +} + +static void __init stamp9g20_map_io(void) +{ + /* Initialize processor: 18.432 MHz crystal */ + at91sam9260_initialize(18432000); + + /* DGBU on ttyS0. (Rx & Tx only) */ + at91_register_uart(0, 0, 0); + + /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ + at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS + | ATMEL_UART_DTR | ATMEL_UART_DSR + | ATMEL_UART_DCD | ATMEL_UART_RI); + + /* set serial console to ttyS0 (ie, DBGU) */ + at91_set_serial_console(0); } static void __init init_irq(void) @@ -154,7 +156,7 @@ static struct at91_udc_data __initdata portuxg20_udc_data = { .pullup_pin = 0, /* pull-up driven by UDC */ }; -static struct at91_udc_data __initdata stamp9g20evb_udc_data = { +static struct at91_udc_data __initdata stamp9g20_udc_data = { .vbus_pin = AT91_PIN_PA22, .pullup_pin = 0, /* pull-up driven by UDC */ }; @@ -188,7 +190,7 @@ static struct gpio_led portuxg20_leds[] = { } }; -static struct gpio_led stamp9g20evb_leds[] = { +static struct gpio_led stamp9g20_leds[] = { { .name = "D8", .gpio = AT91_PIN_PB18, @@ -248,7 +250,7 @@ void add_w1(void) } -void __init stamp9g20_board_init(void) +static void __init generic_board_init(void) { /* Serial */ at91_add_device_serial(); @@ -260,40 +262,34 @@ void __init stamp9g20_board_init(void) #else at91_add_device_mmc(0, &mmc_data); #endif - /* W1 */ - add_w1(); -} - -static void __init portuxg20_board_init(void) -{ - stamp9g20_board_init(); /* USB Host */ at91_add_device_usbh(&usbh_data); - /* USB Device */ - at91_add_device_udc(&portuxg20_udc_data); /* Ethernet */ at91_add_device_eth(&macb_data); /* I2C */ at91_add_device_i2c(NULL, 0); + /* W1 */ + add_w1(); +} + +static void __init portuxg20_board_init(void) +{ + generic_board_init(); /* SPI */ at91_add_device_spi(portuxg20_spi_devices, ARRAY_SIZE(portuxg20_spi_devices)); + /* USB Device */ + at91_add_device_udc(&portuxg20_udc_data); /* LEDs */ at91_gpio_leds(portuxg20_leds, ARRAY_SIZE(portuxg20_leds)); } -static void __init stamp9g20evb_board_init(void) +static void __init stamp9g20_board_init(void) { - stamp9g20_board_init(); - /* USB Host */ - at91_add_device_usbh(&usbh_data); + generic_board_init(); /* USB Device */ - at91_add_device_udc(&stamp9g20evb_udc_data); - /* Ethernet */ - at91_add_device_eth(&macb_data); - /* I2C */ - at91_add_device_i2c(NULL, 0); + at91_add_device_udc(&stamp9g20_udc_data); /* LEDs */ - at91_gpio_leds(stamp9g20evb_leds, ARRAY_SIZE(stamp9g20evb_leds)); + at91_gpio_leds(stamp9g20_leds, ARRAY_SIZE(stamp9g20_leds)); } MACHINE_START(PORTUXG20, "taskit PortuxG20") @@ -309,7 +305,7 @@ MACHINE_START(STAMP9G20, "taskit Stamp9G20") /* Maintainer: taskit GmbH */ .boot_params = AT91_SDRAM_BASE + 0x100, .timer = &at91sam926x_timer, - .map_io = stamp9g20evb_map_io, + .map_io = stamp9g20_map_io, .init_irq = init_irq, - .init_machine = stamp9g20evb_board_init, + .init_machine = stamp9g20_board_init, MACHINE_END diff --git a/trunk/arch/arm/mach-at91/board-yl-9200.c b/trunk/arch/arm/mach-at91/board-yl-9200.c index e0f0080eb639..89df00a9d2f7 100644 --- a/trunk/arch/arm/mach-at91/board-yl-9200.c +++ b/trunk/arch/arm/mach-at91/board-yl-9200.c @@ -387,7 +387,7 @@ static struct spi_board_info yl9200_spi_devices[] = { * EPSON S1D13806 FB (discontinued chip) * EPSON S1D13506 FB */ -#if defined(CONFIG_FB_S1D13XXX) || defined(CONFIG_FB_S1D13XXX_MODULE) +#if defined(CONFIG_FB_S1D135XX) || defined(CONFIG_FB_S1D13XXX_MODULE) #include