Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 Apr 2009 14:40:55 +0000 (07:40 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 Apr 2009 14:40:55 +0000 (07:40 -0700)
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (28 commits)
  powerpc: Fix oops when loading modules
  powerpc: Wire up preadv and pwritev
  powerpc/ftrace: Fix printf format warning
  powerpc/ftrace: Fix #if that should be #ifdef
  powerpc: Fix ptrace compat wrapper for FPU register access
  powerpc: Print information about mapping hw irqs to virtual irqs
  powerpc: Correct dependency of KEXEC
  powerpc: Disable VSX or current process in giveup_fpu/altivec
  powerpc/pseries: Enable relay in pseries_defconfig
  powerpc/pseries: Fix ibm,client-architecture comment
  powerpc/pseries: Scan for all events in rtasd
  powerpc/pseries: Add dispatch dispersion statistics
  powerpc: Clean up some prom printouts
  powerpc: Print progress of ibm,client-architecture method
  powerpc: Remove duplicated #include's
  powerpc/pmac: Fix internal modem IRQ on Wallstreet PowerBook
  powerpc/wdrtas: Update wdrtas_get_interval to use rtas_data_buf
  fsl-diu-fb: Pass the proper device for dma mapping routines
  powerpc/pq2fads: Update device tree for use with device-tree-aware u-boot.
  cpm_uart: Disable CPM udbg when re-initing CPM uart, even if not the console.
  ...

565 files changed:
Documentation/DocBook/kernel-api.tmpl
Documentation/devices.txt
Documentation/feature-removal-schedule.txt
Documentation/filesystems/knfsd-stats.txt [new file with mode: 0644]
Documentation/filesystems/nfs41-server.txt [new file with mode: 0644]
Documentation/isdn/README.gigaset
Documentation/kernel-parameters.txt
Documentation/powerpc/dts-bindings/fsl/upm-nand.txt
Documentation/powerpc/dts-bindings/gpio/led.txt
Documentation/scsi/aacraid.txt
Documentation/video4linux/pxa_camera.txt [new file with mode: 0644]
Documentation/video4linux/v4l2-framework.txt
MAINTAINERS
arch/arm/mach-davinci/include/mach/nand.h [new file with mode: 0644]
arch/arm/mach-mx1/Makefile
arch/arm/mach-mx1/devices.c
arch/arm/mach-mx1/ksym_mx1.c [new file with mode: 0644]
arch/arm/mach-mx1/mx1_camera_fiq.S [new file with mode: 0644]
arch/arm/mach-mx3/clock.c
arch/arm/mach-pxa/include/mach/pxa3xx_nand.h
arch/arm/plat-mxc/include/mach/memory.h
arch/arm/plat-mxc/include/mach/mx1_camera.h [new file with mode: 0644]
arch/blackfin/kernel/process.c
arch/frv/mm/tlb-miss.S
arch/mips/include/asm/txx9/ndfmc.h [new file with mode: 0644]
arch/mips/include/asm/txx9/rbtx4939.h
arch/mips/include/asm/txx9/tx4938.h
arch/mips/include/asm/txx9/tx4939.h
arch/mips/txx9/generic/setup.c
arch/mips/txx9/generic/setup_tx4938.c
arch/mips/txx9/generic/setup_tx4939.c
arch/mips/txx9/rbtx4938/setup.c
arch/mips/txx9/rbtx4939/setup.c
arch/powerpc/boot/dts/tqm8548-bigflash.dts
arch/powerpc/boot/dts/tqm8548.dts
arch/powerpc/sysdev/fsl_lbc.c
arch/x86/Kconfig
arch/x86/include/asm/apic.h
arch/x86/include/asm/io_apic.h
arch/x86/kernel/apic/apic.c
arch/x86/kernel/apic/io_apic.c
block/blk-core.c
block/blk-sysfs.c
block/cfq-iosched.c
block/elevator.c
drivers/char/applicom.c
drivers/char/cyclades.c
drivers/char/isicom.c
drivers/char/moxa.c
drivers/char/mxser.c
drivers/char/rio/rio_linux.c
drivers/char/riscom8.c
drivers/char/specialix.c
drivers/i2c/algos/Kconfig
drivers/i2c/algos/Makefile
drivers/i2c/algos/i2c-algo-sgi.c [deleted file]
drivers/isdn/gigaset/bas-gigaset.c
drivers/isdn/gigaset/interface.c
drivers/leds/Kconfig
drivers/leds/Makefile
drivers/leds/led-class.c
drivers/leds/led-triggers.c
drivers/leds/leds-bd2802.c [new file with mode: 0644]
drivers/leds/leds-dac124s085.c [new file with mode: 0644]
drivers/leds/leds-gpio.c
drivers/leds/leds-h1940.c
drivers/leds/leds-pca9532.c
drivers/leds/leds-pwm.c [new file with mode: 0644]
drivers/leds/leds-rb532.c [new file with mode: 0644]
drivers/leds/leds-s3c24xx.c
drivers/leds/leds.h
drivers/leds/ledtrig-default-on.c
drivers/leds/ledtrig-gpio.c [new file with mode: 0644]
drivers/leds/ledtrig-heartbeat.c
drivers/leds/ledtrig-ide-disk.c
drivers/leds/ledtrig-timer.c
drivers/md/raid1.c
drivers/media/dvb/dvb-usb/Kconfig
drivers/media/dvb/dvb-usb/af9015.c
drivers/media/dvb/dvb-usb/af9015.h
drivers/media/dvb/dvb-usb/ce6230.c
drivers/media/dvb/dvb-usb/dvb-usb-ids.h
drivers/media/dvb/firewire/firedtv-avc.c
drivers/media/dvb/frontends/Kconfig
drivers/media/dvb/frontends/Makefile
drivers/media/dvb/frontends/au8522_decoder.c
drivers/media/dvb/frontends/lgs8gxx.c [new file with mode: 0644]
drivers/media/dvb/frontends/lgs8gxx.h [new file with mode: 0644]
drivers/media/dvb/frontends/lgs8gxx_priv.h [new file with mode: 0644]
drivers/media/radio/dsbr100.c
drivers/media/radio/radio-aimslab.c
drivers/media/radio/radio-aztech.c
drivers/media/radio/radio-gemtek-pci.c
drivers/media/radio/radio-gemtek.c
drivers/media/radio/radio-maestro.c
drivers/media/radio/radio-maxiradio.c
drivers/media/radio/radio-mr800.c
drivers/media/radio/radio-rtrack2.c
drivers/media/radio/radio-sf16fmi.c
drivers/media/radio/radio-sf16fmr2.c
drivers/media/radio/radio-si470x.c
drivers/media/radio/radio-terratec.c
drivers/media/radio/radio-trust.c
drivers/media/radio/radio-typhoon.c
drivers/media/radio/radio-zoltrix.c
drivers/media/video/Kconfig
drivers/media/video/Makefile
drivers/media/video/adv7170.c
drivers/media/video/adv7175.c
drivers/media/video/au0828/Kconfig
drivers/media/video/au0828/au0828-cards.c
drivers/media/video/au0828/au0828-core.c
drivers/media/video/au0828/au0828-i2c.c
drivers/media/video/au0828/au0828-reg.h
drivers/media/video/au0828/au0828-video.c
drivers/media/video/au0828/au0828.h
drivers/media/video/bt819.c
drivers/media/video/bt856.c
drivers/media/video/bt866.c
drivers/media/video/bt8xx/bttv-cards.c
drivers/media/video/bt8xx/bttv-driver.c
drivers/media/video/bt8xx/bttvp.h
drivers/media/video/cafe_ccic.c
drivers/media/video/cs5345.c
drivers/media/video/cs53l32a.c
drivers/media/video/cx18/cx18-audio.c
drivers/media/video/cx18/cx18-av-core.c
drivers/media/video/cx18/cx18-av-core.h
drivers/media/video/cx18/cx18-driver.c
drivers/media/video/cx18/cx18-fileops.c
drivers/media/video/cx18/cx18-gpio.c
drivers/media/video/cx18/cx18-i2c.c
drivers/media/video/cx18/cx18-ioctl.c
drivers/media/video/cx18/cx18-video.c
drivers/media/video/cx231xx/Kconfig [new file with mode: 0644]
drivers/media/video/cx231xx/Makefile [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-audio.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-avcore.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-cards.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-conf-reg.h [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-core.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-dvb.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-i2c.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-input.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-pcb-cfg.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-pcb-cfg.h [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-reg.h [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-vbi.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-vbi.h [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx-video.c [new file with mode: 0644]
drivers/media/video/cx231xx/cx231xx.h [new file with mode: 0644]
drivers/media/video/cx23885/cx23885-cards.c
drivers/media/video/cx23885/cx23885-core.c
drivers/media/video/cx23885/cx23885-dvb.c
drivers/media/video/cx23885/cx23885-video.c
drivers/media/video/cx23885/cx23885.h
drivers/media/video/cx25840/cx25840-audio.c
drivers/media/video/cx25840/cx25840-core.c
drivers/media/video/cx25840/cx25840-core.h
drivers/media/video/cx25840/cx25840-firmware.c
drivers/media/video/cx88/cx88-cards.c
drivers/media/video/cx88/cx88-core.c
drivers/media/video/cx88/cx88-dvb.c
drivers/media/video/cx88/cx88-video.c
drivers/media/video/cx88/cx88.h
drivers/media/video/em28xx/em28xx-cards.c
drivers/media/video/em28xx/em28xx-core.c
drivers/media/video/em28xx/em28xx-i2c.c
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/em28xx/em28xx.h
drivers/media/video/gspca/gspca.c
drivers/media/video/gspca/gspca.h
drivers/media/video/gspca/m5602/Makefile
drivers/media/video/gspca/m5602/m5602_bridge.h
drivers/media/video/gspca/m5602/m5602_core.c
drivers/media/video/gspca/m5602/m5602_mt9m111.c
drivers/media/video/gspca/m5602/m5602_mt9m111.h
drivers/media/video/gspca/m5602/m5602_ov9650.c
drivers/media/video/gspca/m5602/m5602_ov9650.h
drivers/media/video/gspca/m5602/m5602_po1030.c
drivers/media/video/gspca/m5602/m5602_po1030.h
drivers/media/video/gspca/m5602/m5602_s5k4aa.c
drivers/media/video/gspca/m5602/m5602_s5k4aa.h
drivers/media/video/gspca/m5602/m5602_s5k83a.c
drivers/media/video/gspca/m5602/m5602_s5k83a.h
drivers/media/video/gspca/m5602/m5602_sensor.h
drivers/media/video/gspca/sq905.c
drivers/media/video/gspca/vc032x.c
drivers/media/video/ivtv/ivtv-driver.c
drivers/media/video/ivtv/ivtv-fileops.c
drivers/media/video/ivtv/ivtv-gpio.c
drivers/media/video/ivtv/ivtv-i2c.c
drivers/media/video/ivtv/ivtv-ioctl.c
drivers/media/video/ivtv/ivtv-routing.c
drivers/media/video/ks0127.c
drivers/media/video/m52790.c
drivers/media/video/msp3400-driver.c
drivers/media/video/msp3400-driver.h
drivers/media/video/msp3400-kthreads.c
drivers/media/video/mt9m001.c
drivers/media/video/mt9t031.c
drivers/media/video/mx1_camera.c [new file with mode: 0644]
drivers/media/video/mx3_camera.c
drivers/media/video/mxb.c
drivers/media/video/ov772x.c
drivers/media/video/pvrusb2/pvrusb2-audio.c
drivers/media/video/pvrusb2/pvrusb2-cs53l32a.c
drivers/media/video/pvrusb2/pvrusb2-ctrl.c
drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c
drivers/media/video/pvrusb2/pvrusb2-hdw.c
drivers/media/video/pvrusb2/pvrusb2-i2c-core.c
drivers/media/video/pvrusb2/pvrusb2-sysfs.c
drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
drivers/media/video/pvrusb2/pvrusb2-wm8775.c
drivers/media/video/pwc/Kconfig
drivers/media/video/pxa_camera.c
drivers/media/video/s2255drv.c
drivers/media/video/saa7110.c
drivers/media/video/saa7115.c
drivers/media/video/saa7127.c
drivers/media/video/saa7134/saa6752hs.c
drivers/media/video/saa7134/saa7134-cards.c
drivers/media/video/saa7134/saa7134-core.c
drivers/media/video/saa7134/saa7134-video.c
drivers/media/video/saa7134/saa7134.h
drivers/media/video/saa717x.c
drivers/media/video/saa7185.c
drivers/media/video/saa7191.c
drivers/media/video/soc_camera.c
drivers/media/video/tda9840.c
drivers/media/video/tea6415c.c
drivers/media/video/tea6420.c
drivers/media/video/tuner-core.c
drivers/media/video/tvaudio.c
drivers/media/video/tvp5150.c
drivers/media/video/upd64031a.c
drivers/media/video/upd64083.c
drivers/media/video/usbvision/usbvision-core.c
drivers/media/video/usbvision/usbvision-i2c.c
drivers/media/video/usbvision/usbvision-video.c
drivers/media/video/uvc/Kconfig
drivers/media/video/v4l1-compat.c
drivers/media/video/v4l2-common.c
drivers/media/video/v4l2-dev.c
drivers/media/video/v4l2-ioctl.c
drivers/media/video/v4l2-subdev.c [deleted file]
drivers/media/video/vino.c
drivers/media/video/vp27smpx.c
drivers/media/video/vpx3220.c
drivers/media/video/w9968cf.c
drivers/media/video/w9968cf.h
drivers/media/video/wm8775.c
drivers/media/video/zoran/zoran.h
drivers/media/video/zoran/zoran_card.c
drivers/media/video/zoran/zoran_device.c
drivers/media/video/zoran/zoran_driver.c
drivers/media/video/zr364xx.c
drivers/message/fusion/mptsas.c
drivers/mtd/Makefile
drivers/mtd/ar7part.c
drivers/mtd/chips/cfi_cmdset_0001.c
drivers/mtd/chips/cfi_cmdset_0002.c
drivers/mtd/chips/jedec_probe.c
drivers/mtd/chips/map_ram.c
drivers/mtd/chips/map_rom.c
drivers/mtd/cmdlinepart.c
drivers/mtd/devices/doc2000.c
drivers/mtd/devices/doc2001.c
drivers/mtd/devices/doc2001plus.c
drivers/mtd/devices/docecc.c
drivers/mtd/devices/m25p80.c
drivers/mtd/devices/mtd_dataflash.c
drivers/mtd/devices/mtdram.c
drivers/mtd/inftlmount.c
drivers/mtd/internal.h [new file with mode: 0644]
drivers/mtd/maps/Kconfig
drivers/mtd/maps/Makefile
drivers/mtd/maps/omap_nor.c
drivers/mtd/maps/physmap.c
drivers/mtd/maps/physmap_of.c
drivers/mtd/maps/plat-ram.c
drivers/mtd/maps/rbtx4939-flash.c [new file with mode: 0644]
drivers/mtd/maps/sa1100-flash.c
drivers/mtd/maps/sharpsl-flash.c [deleted file]
drivers/mtd/mtd_blkdevs.c
drivers/mtd/mtdbdi.c [new file with mode: 0644]
drivers/mtd/mtdchar.c
drivers/mtd/mtdconcat.c
drivers/mtd/mtdcore.c
drivers/mtd/mtdoops.c
drivers/mtd/mtdpart.c
drivers/mtd/nand/Kconfig
drivers/mtd/nand/Makefile
drivers/mtd/nand/bf5xx_nand.c
drivers/mtd/nand/cafe_nand.c
drivers/mtd/nand/davinci_nand.c [new file with mode: 0644]
drivers/mtd/nand/fsl_upm.c
drivers/mtd/nand/mxc_nand.c
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/plat_nand.c
drivers/mtd/nand/pxa3xx_nand.c
drivers/mtd/nand/sh_flctl.c
drivers/mtd/nand/socrates_nand.c [new file with mode: 0644]
drivers/mtd/nand/txx9ndfmc.c [new file with mode: 0644]
drivers/mtd/nftlcore.c
drivers/mtd/ofpart.c
drivers/mtd/onenand/omap2.c
drivers/mtd/onenand/onenand_base.c
drivers/mtd/ubi/cdev.c
drivers/net/Kconfig
drivers/net/b44.c
drivers/net/bnx2.c
drivers/net/bnx2.h
drivers/net/bnx2_fw.h
drivers/net/bnx2_fw2.h [deleted file]
drivers/net/e1000/e1000_main.c
drivers/net/forcedeth.c
drivers/net/ibm_newemac/core.c
drivers/net/myri_code.h [deleted file]
drivers/net/myri_sbus.c
drivers/net/pcmcia/axnet_cs.c
drivers/net/smsc911x.c
drivers/net/virtio_net.c
drivers/net/vxge/vxge-main.c
drivers/pci/dmar.c
drivers/pci/intel-iommu.c
drivers/pci/intr_remapping.c
drivers/scsi/Kconfig
drivers/scsi/Makefile
drivers/scsi/a2091.c
drivers/scsi/a2091.h
drivers/scsi/a3000.c
drivers/scsi/a3000.h
drivers/scsi/aacraid/aachba.c
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/comminit.c
drivers/scsi/aacraid/linit.c
drivers/scsi/advansys.c
drivers/scsi/aic7xxx/aic79xx_core.c
drivers/scsi/aic7xxx/aic79xx_inline.h
drivers/scsi/aic7xxx/aic79xx_osm.h
drivers/scsi/aic7xxx/aic79xx_pci.c
drivers/scsi/aic7xxx/aic7xxx_inline.h
drivers/scsi/aic7xxx/aic7xxx_osm.h
drivers/scsi/aic7xxx/aic7xxx_pci.c
drivers/scsi/aic7xxx/aiclib.h
drivers/scsi/cxgb3i/Kbuild
drivers/scsi/cxgb3i/cxgb3i.h
drivers/scsi/cxgb3i/cxgb3i_ddp.c
drivers/scsi/cxgb3i/cxgb3i_ddp.h
drivers/scsi/cxgb3i/cxgb3i_init.c
drivers/scsi/cxgb3i/cxgb3i_iscsi.c
drivers/scsi/cxgb3i/cxgb3i_offload.c
drivers/scsi/cxgb3i/cxgb3i_offload.h
drivers/scsi/fcoe/Makefile
drivers/scsi/fcoe/fc_transport_fcoe.c [deleted file]
drivers/scsi/fcoe/fcoe.c [new file with mode: 0644]
drivers/scsi/fcoe/fcoe.h [new file with mode: 0644]
drivers/scsi/fcoe/fcoe_sw.c [deleted file]
drivers/scsi/fcoe/libfcoe.c
drivers/scsi/ibmvscsi/ibmvfc.c
drivers/scsi/ibmvscsi/ibmvfc.h
drivers/scsi/libfc/fc_fcp.c
drivers/scsi/libfc/fc_lport.c
drivers/scsi/libiscsi.c
drivers/scsi/osd/osd_initiator.c
drivers/scsi/osd/osd_uld.c
drivers/scsi/ql1040_fw.h [deleted file]
drivers/scsi/ql12160_fw.h [deleted file]
drivers/scsi/ql1280_fw.h [deleted file]
drivers/scsi/qla1280.c
drivers/scsi/qla1280.h
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_dfs.c
drivers/scsi/qla2xxx/qla_fw.h
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_iocb.c
drivers/scsi/qla2xxx/qla_isr.c
drivers/scsi/qla2xxx/qla_mbx.c
drivers/scsi/qla2xxx/qla_mid.c
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_sup.c
drivers/scsi/qla2xxx/qla_version.h
drivers/scsi/qlogicpti.c
drivers/scsi/qlogicpti_asm.c [deleted file]
drivers/scsi/scsi.c
drivers/scsi/scsi_lib.c
drivers/scsi/sd.c
drivers/scsi/ses.c
drivers/scsi/sg.c
drivers/scsi/sr.c
drivers/scsi/stex.c
drivers/scsi/sym53c8xx_2/sym_glue.h
drivers/scsi/sym53c8xx_2/sym_hipd.c
drivers/scsi/sym53c8xx_2/sym_hipd.h
drivers/scsi/sym53c8xx_2/sym_malloc.c
drivers/scsi/sym53c8xx_2/sym_misc.h
drivers/serial/8250_pci.c
drivers/serial/8250_pnp.c
drivers/serial/Kconfig
drivers/serial/bfin_5xx.c
drivers/serial/icom.c
drivers/serial/jsm/jsm_driver.c
drivers/serial/jsm/jsm_tty.c
drivers/serial/ucc_uart.c
drivers/usb/class/cdc-acm.c
drivers/usb/serial/pl2303.c
drivers/usb/serial/pl2303.h
drivers/usb/serial/symbolserial.c
drivers/video/backlight/Kconfig
drivers/video/backlight/Makefile
drivers/video/backlight/jornada720_bl.c [new file with mode: 0644]
drivers/video/backlight/jornada720_lcd.c [new file with mode: 0644]
drivers/video/backlight/mbp_nvidia_bl.c
drivers/video/backlight/pwm_bl.c
firmware/Makefile
firmware/WHENCE
firmware/advansys/3550.bin.ihex [new file with mode: 0644]
firmware/advansys/38C0800.bin.ihex [new file with mode: 0644]
firmware/advansys/38C1600.bin.ihex [new file with mode: 0644]
firmware/advansys/mcode.bin.ihex [new file with mode: 0644]
firmware/bnx2/bnx2-mips-06-4.6.16.fw.ihex [new file with mode: 0644]
firmware/bnx2/bnx2-mips-09-4.6.17.fw.ihex [new file with mode: 0644]
firmware/bnx2/bnx2-rv2p-06-4.6.16.fw.ihex [new file with mode: 0644]
firmware/bnx2/bnx2-rv2p-09-4.6.15.fw.ihex [new file with mode: 0644]
firmware/myricom/lanai.bin.ihex [new file with mode: 0644]
firmware/qlogic/1040.bin.ihex [new file with mode: 0644]
firmware/qlogic/12160.bin.ihex [new file with mode: 0644]
firmware/qlogic/1280.bin.ihex [new file with mode: 0644]
firmware/qlogic/isp1000.bin.ihex [new file with mode: 0644]
fs/befs/debug.c
fs/buffer.c
fs/direct-io.c
fs/ext3/Kconfig
fs/ext3/super.c
fs/jbd/commit.c
fs/jbd2/commit.c
fs/jffs2/acl.c
fs/jffs2/malloc.c
fs/libfs.c
fs/lockd/svclock.c
fs/nfs/super.c
fs/nfsd/Kconfig
fs/nfsd/nfs3proc.c
fs/nfsd/nfs4callback.c
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4recover.c
fs/nfsd/nfs4state.c
fs/nfsd/nfs4xdr.c
fs/nfsd/nfsctl.c
fs/nfsd/nfsproc.c
fs/nfsd/nfssvc.c
fs/nfsd/vfs.c
fs/ramfs/inode.c
fs/romfs/Kconfig
fs/romfs/Makefile
fs/romfs/inode.c [deleted file]
fs/romfs/internal.h [new file with mode: 0644]
fs/romfs/mmap-nommu.c [new file with mode: 0644]
fs/romfs/storage.c [new file with mode: 0644]
fs/romfs/super.c [new file with mode: 0644]
fs/squashfs/export.c
fs/ubifs/budget.c
fs/ubifs/debug.c
fs/ubifs/file.c
fs/ubifs/find.c
fs/ubifs/gc.c
fs/ubifs/journal.c
fs/ubifs/key.h
fs/ubifs/log.c
fs/ubifs/lpt_commit.c
fs/ubifs/recovery.c
fs/ubifs/replay.c
fs/ubifs/sb.c
fs/ubifs/shrinker.c
fs/ubifs/super.c
fs/ubifs/tnc.c
fs/ubifs/ubifs-media.h
fs/ubifs/ubifs.h
include/linux/backing-dev.h
include/linux/bio.h
include/linux/blkdev.h
include/linux/dmar.h
include/linux/fdtable.h
include/linux/fs.h
include/linux/hrtimer.h
include/linux/i2c-algo-sgi.h [deleted file]
include/linux/i2c-id.h
include/linux/i2c.h
include/linux/intel-iommu.h
include/linux/interrupt.h
include/linux/key.h
include/linux/leds-bd2802.h [new file with mode: 0644]
include/linux/leds.h
include/linux/leds_pwm.h [new file with mode: 0644]
include/linux/lockd/xdr.h
include/linux/lockd/xdr4.h
include/linux/mtd/mtd.h
include/linux/mtd/nand.h
include/linux/mtd/partitions.h
include/linux/nfs.h
include/linux/nfs4.h
include/linux/nfsd/cache.h
include/linux/nfsd/nfsd.h
include/linux/nfsd/nfsfh.h
include/linux/nfsd/state.h
include/linux/nfsd/stats.h
include/linux/nfsd/xdr4.h
include/linux/pci_ids.h
include/linux/rcuclassic.h
include/linux/rcupdate.h
include/linux/rcupreempt.h
include/linux/rcutree.h
include/linux/security.h
include/linux/serial_core.h
include/linux/slab_def.h
include/linux/slub_def.h
include/linux/sunrpc/svc.h
include/linux/sunrpc/xdr.h
include/linux/videodev2.h
include/media/msp3400.h
include/media/ov772x.h
include/media/saa7146.h
include/media/tvaudio.h
include/media/v4l2-common.h
include/media/v4l2-i2c-drv-legacy.h [deleted file]
include/media/v4l2-i2c-drv.h
include/media/v4l2-subdev.h
include/scsi/fc/fc_fip.h [new file with mode: 0644]
include/scsi/fc_transport_fcoe.h [deleted file]
include/scsi/libfc.h
include/scsi/libfcoe.h
include/trace/kmemtrace.h
init/Kconfig
kernel/exit.c
kernel/hrtimer.c
kernel/lockdep.c
kernel/rcuclassic.c
kernel/rcupreempt.c
kernel/rcutree.c
kernel/rcutree.h [new file with mode: 0644]
kernel/rcutree_trace.c
kernel/sched.c
kernel/softirq.c
kernel/sysctl.c
kernel/trace/kmemtrace.c
kernel/trace/trace.h
lib/decompress_bunzip2.c
lib/decompress_inflate.c
lib/decompress_unlzma.c
mm/allocpercpu.c
mm/backing-dev.c
mm/failslab.c
mm/slab.c
mm/slob.c
mm/slub.c
mm/util.c
net/802/fddi.c
net/ipv6/xfrm6_output.c
net/socket.c
net/sunrpc/svc.c
net/sunrpc/svc_xprt.c
net/sunrpc/svcsock.c

index 58c1945..d6ac5d6 100644 (file)
@@ -259,7 +259,7 @@ X!Earch/x86/kernel/mca_32.c
 !Eblock/blk-tag.c
 !Iblock/blk-tag.c
 !Eblock/blk-integrity.c
-!Iblock/blktrace.c
+!Ikernel/trace/blktrace.c
 !Iblock/genhd.c
 !Eblock/genhd.c
   </chapter>
index 327de16..4d70df6 100644 (file)
@@ -3,7 +3,7 @@
 
             Maintained by Alan Cox <device@lanana.org>
 
-                     Last revised: 29 November 2006
+                     Last revised: 6th April 2009
 
 This list is the Linux Device List, the official registry of allocated
 device numbers and /dev directory nodes for the Linux operating
index 39246fc..7e2af10 100644 (file)
@@ -354,7 +354,8 @@ Who:  Krzysztof Piotr Oledzki <ole@ans.pl>
 
 ---------------------------
 
-What:  i2c_attach_client(), i2c_detach_client(), i2c_driver->detach_client()
+What:  i2c_attach_client(), i2c_detach_client(), i2c_driver->detach_client(),
+       i2c_adapter->client_register(), i2c_adapter->client_unregister
 When:  2.6.30
 Check: i2c_attach_client i2c_detach_client
 Why:   Deprecated by the new (standard) device driver binding model. Use
diff --git a/Documentation/filesystems/knfsd-stats.txt b/Documentation/filesystems/knfsd-stats.txt
new file mode 100644 (file)
index 0000000..64ced51
--- /dev/null
@@ -0,0 +1,159 @@
+
+Kernel NFS Server Statistics
+============================
+
+This document describes the format and semantics of the statistics
+which the kernel NFS server makes available to userspace.  These
+statistics are available in several text form pseudo files, each of
+which is described separately below.
+
+In most cases you don't need to know these formats, as the nfsstat(8)
+program from the nfs-utils distribution provides a helpful command-line
+interface for extracting and printing them.
+
+All the files described here are formatted as a sequence of text lines,
+separated by newline '\n' characters.  Lines beginning with a hash
+'#' character are comments intended for humans and should be ignored
+by parsing routines.  All other lines contain a sequence of fields
+separated by whitespace.
+
+/proc/fs/nfsd/pool_stats
+------------------------
+
+This file is available in kernels from 2.6.30 onwards, if the
+/proc/fs/nfsd filesystem is mounted (it almost always should be).
+
+The first line is a comment which describes the fields present in
+all the other lines.  The other lines present the following data as
+a sequence of unsigned decimal numeric fields.  One line is shown
+for each NFS thread pool.
+
+All counters are 64 bits wide and wrap naturally.  There is no way
+to zero these counters, instead applications should do their own
+rate conversion.
+
+pool
+       The id number of the NFS thread pool to which this line applies.
+       This number does not change.
+
+       Thread pool ids are a contiguous set of small integers starting
+       at zero.  The maximum value depends on the thread pool mode, but
+       currently cannot be larger than the number of CPUs in the system.
+       Note that in the default case there will be a single thread pool
+       which contains all the nfsd threads and all the CPUs in the system,
+       and thus this file will have a single line with a pool id of "0".
+
+packets-arrived
+       Counts how many NFS packets have arrived.  More precisely, this
+       is the number of times that the network stack has notified the
+       sunrpc server layer that new data may be available on a transport
+       (e.g. an NFS or UDP socket or an NFS/RDMA endpoint).
+
+       Depending on the NFS workload patterns and various network stack
+       effects (such as Large Receive Offload) which can combine packets
+       on the wire, this may be either more or less than the number
+       of NFS calls received (which statistic is available elsewhere).
+       However this is a more accurate and less workload-dependent measure
+       of how much CPU load is being placed on the sunrpc server layer
+       due to NFS network traffic.
+
+sockets-enqueued
+       Counts how many times an NFS transport is enqueued to wait for
+       an nfsd thread to service it, i.e. no nfsd thread was considered
+       available.
+
+       The circumstance this statistic tracks indicates that there was NFS
+       network-facing work to be done but it couldn't be done immediately,
+       thus introducing a small delay in servicing NFS calls.  The ideal
+       rate of change for this counter is zero; significantly non-zero
+       values may indicate a performance limitation.
+
+       This can happen either because there are too few nfsd threads in the
+       thread pool for the NFS workload (the workload is thread-limited),
+       or because the NFS workload needs more CPU time than is available in
+       the thread pool (the workload is CPU-limited).  In the former case,
+       configuring more nfsd threads will probably improve the performance
+       of the NFS workload.  In the latter case, the sunrpc server layer is
+       already choosing not to wake idle nfsd threads because there are too
+       many nfsd threads which want to run but cannot, so configuring more
+       nfsd threads will make no difference whatsoever.  The overloads-avoided
+       statistic (see below) can be used to distinguish these cases.
+
+threads-woken
+       Counts how many times an idle nfsd thread is woken to try to
+       receive some data from an NFS transport.
+
+       This statistic tracks the circumstance where incoming
+       network-facing NFS work is being handled quickly, which is a good
+       thing.  The ideal rate of change for this counter will be close
+       to but less than the rate of change of the packets-arrived counter.
+
+overloads-avoided
+       Counts how many times the sunrpc server layer chose not to wake an
+       nfsd thread, despite the presence of idle nfsd threads, because
+       too many nfsd threads had been recently woken but could not get
+       enough CPU time to actually run.
+
+       This statistic counts a circumstance where the sunrpc layer
+       heuristically avoids overloading the CPU scheduler with too many
+       runnable nfsd threads.  The ideal rate of change for this counter
+       is zero.  Significant non-zero values indicate that the workload
+       is CPU limited.  Usually this is associated with heavy CPU usage
+       on all the CPUs in the nfsd thread pool.
+
+       If a sustained large overloads-avoided rate is detected on a pool,
+       the top(1) utility should be used to check for the following
+       pattern of CPU usage on all the CPUs associated with the given
+       nfsd thread pool.
+
+        - %us ~= 0 (as you're *NOT* running applications on your NFS server)
+
+        - %wa ~= 0
+
+        - %id ~= 0
+
+        - %sy + %hi + %si ~= 100
+
+       If this pattern is seen, configuring more nfsd threads will *not*
+       improve the performance of the workload.  If this patten is not
+       seen, then something more subtle is wrong.
+
+threads-timedout
+       Counts how many times an nfsd thread triggered an idle timeout,
+       i.e. was not woken to handle any incoming network packets for
+       some time.
+
+       This statistic counts a circumstance where there are more nfsd
+       threads configured than can be used by the NFS workload.  This is
+       a clue that the number of nfsd threads can be reduced without
+       affecting performance.  Unfortunately, it's only a clue and not
+       a strong indication, for a couple of reasons:
+
+        - Currently the rate at which the counter is incremented is quite
+          slow; the idle timeout is 60 minutes.  Unless the NFS workload
+          remains constant for hours at a time, this counter is unlikely
+          to be providing information that is still useful.
+
+        - It is usually a wise policy to provide some slack,
+          i.e. configure a few more nfsds than are currently needed,
+          to allow for future spikes in load.
+
+
+Note that incoming packets on NFS transports will be dealt with in
+one of three ways.  An nfsd thread can be woken (threads-woken counts
+this case), or the transport can be enqueued for later attention
+(sockets-enqueued counts this case), or the packet can be temporarily
+deferred because the transport is currently being used by an nfsd
+thread.  This last case is not very interesting and is not explicitly
+counted, but can be inferred from the other counters thus:
+
+packets-deferred = packets-arrived - ( sockets-enqueued + threads-woken )
+
+
+More
+----
+Descriptions of the other statistics file should go here.
+
+
+Greg Banks <gnb@sgi.com>
+26 Mar 2009
diff --git a/Documentation/filesystems/nfs41-server.txt b/Documentation/filesystems/nfs41-server.txt
new file mode 100644 (file)
index 0000000..05d81cb
--- /dev/null
@@ -0,0 +1,161 @@
+NFSv4.1 Server Implementation
+
+Server support for minorversion 1 can be controlled using the
+/proc/fs/nfsd/versions control file.  The string output returned
+by reading this file will contain either "+4.1" or "-4.1"
+correspondingly.
+
+Currently, server support for minorversion 1 is disabled by default.
+It can be enabled at run time by writing the string "+4.1" to
+the /proc/fs/nfsd/versions control file.  Note that to write this
+control file, the nfsd service must be taken down.  Use your user-mode
+nfs-utils to set this up; see rpc.nfsd(8)
+
+The NFSv4 minorversion 1 (NFSv4.1) implementation in nfsd is based
+on the latest NFSv4.1 Internet Draft:
+http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-29
+
+From the many new features in NFSv4.1 the current implementation
+focuses on the mandatory-to-implement NFSv4.1 Sessions, providing
+"exactly once" semantics and better control and throttling of the
+resources allocated for each client.
+
+Other NFSv4.1 features, Parallel NFS operations in particular,
+are still under development out of tree.
+See http://wiki.linux-nfs.org/wiki/index.php/PNFS_prototype_design
+for more information.
+
+The table below, taken from the NFSv4.1 document, lists
+the operations that are mandatory to implement (REQ), optional
+(OPT), and NFSv4.0 operations that are required not to implement (MNI)
+in minor version 1.  The first column indicates the operations that
+are not supported yet by the linux server implementation.
+
+The OPTIONAL features identified and their abbreviations are as follows:
+       pNFS    Parallel NFS
+       FDELG   File Delegations
+       DDELG   Directory Delegations
+
+The following abbreviations indicate the linux server implementation status.
+       I       Implemented NFSv4.1 operations.
+       NS      Not Supported.
+       NS*     unimplemented optional feature.
+       P       pNFS features implemented out of tree.
+       PNS     pNFS features that are not supported yet (out of tree).
+
+Operations
+
+   +----------------------+------------+--------------+----------------+
+   | Operation            | REQ, REC,  | Feature      | Definition     |
+   |                      | OPT, or    | (REQ, REC,   |                |
+   |                      | MNI        | or OPT)      |                |
+   +----------------------+------------+--------------+----------------+
+   | ACCESS               | REQ        |              | Section 18.1   |
+NS | BACKCHANNEL_CTL      | REQ        |              | Section 18.33  |
+NS | BIND_CONN_TO_SESSION | REQ        |              | Section 18.34  |
+   | CLOSE                | REQ        |              | Section 18.2   |
+   | COMMIT               | REQ        |              | Section 18.3   |
+   | CREATE               | REQ        |              | Section 18.4   |
+I  | CREATE_SESSION       | REQ        |              | Section 18.36  |
+NS*| DELEGPURGE           | OPT        | FDELG (REQ)  | Section 18.5   |
+   | DELEGRETURN          | OPT        | FDELG,       | Section 18.6   |
+   |                      |            | DDELG, pNFS  |                |
+   |                      |            | (REQ)        |                |
+NS | DESTROY_CLIENTID     | REQ        |              | Section 18.50  |
+I  | DESTROY_SESSION      | REQ        |              | Section 18.37  |
+I  | EXCHANGE_ID          | REQ        |              | Section 18.35  |
+NS | FREE_STATEID         | REQ        |              | Section 18.38  |
+   | GETATTR              | REQ        |              | Section 18.7   |
+P  | GETDEVICEINFO        | OPT        | pNFS (REQ)   | Section 18.40  |
+P  | GETDEVICELIST        | OPT        | pNFS (OPT)   | Section 18.41  |
+   | GETFH                | REQ        |              | Section 18.8   |
+NS*| GET_DIR_DELEGATION   | OPT        | DDELG (REQ)  | Section 18.39  |
+P  | LAYOUTCOMMIT         | OPT        | pNFS (REQ)   | Section 18.42  |
+P  | LAYOUTGET            | OPT        | pNFS (REQ)   | Section 18.43  |
+P  | LAYOUTRETURN         | OPT        | pNFS (REQ)   | Section 18.44  |
+   | LINK                 | OPT        |              | Section 18.9   |
+   | LOCK                 | REQ        |              | Section 18.10  |
+   | LOCKT                | REQ        |              | Section 18.11  |
+   | LOCKU                | REQ        |              | Section 18.12  |
+   | LOOKUP               | REQ        |              | Section 18.13  |
+   | LOOKUPP              | REQ        |              | Section 18.14  |
+   | NVERIFY              | REQ        |              | Section 18.15  |
+   | OPEN                 | REQ        |              | Section 18.16  |
+NS*| OPENATTR             | OPT        |              | Section 18.17  |
+   | OPEN_CONFIRM         | MNI        |              | N/A            |
+   | OPEN_DOWNGRADE       | REQ        |              | Section 18.18  |
+   | PUTFH                | REQ        |              | Section 18.19  |
+   | PUTPUBFH             | REQ        |              | Section 18.20  |
+   | PUTROOTFH            | REQ        |              | Section 18.21  |
+   | READ                 | REQ        |              | Section 18.22  |
+   | READDIR              | REQ        |              | Section 18.23  |
+   | READLINK             | OPT        |              | Section 18.24  |
+NS | RECLAIM_COMPLETE     | REQ        |              | Section 18.51  |
+   | RELEASE_LOCKOWNER    | MNI        |              | N/A            |
+   | REMOVE               | REQ        |              | Section 18.25  |
+   | RENAME               | REQ        |              | Section 18.26  |
+   | RENEW                | MNI        |              | N/A            |
+   | RESTOREFH            | REQ        |              | Section 18.27  |
+   | SAVEFH               | REQ        |              | Section 18.28  |
+   | SECINFO              | REQ        |              | Section 18.29  |
+NS | SECINFO_NO_NAME      | REC        | pNFS files   | Section 18.45, |
+   |                      |            | layout (REQ) | Section 13.12  |
+I  | SEQUENCE             | REQ        |              | Section 18.46  |
+   | SETATTR              | REQ        |              | Section 18.30  |
+   | SETCLIENTID          | MNI        |              | N/A            |
+   | SETCLIENTID_CONFIRM  | MNI        |              | N/A            |
+NS | SET_SSV              | REQ        |              | Section 18.47  |
+NS | TEST_STATEID         | REQ        |              | Section 18.48  |
+   | VERIFY               | REQ        |              | Section 18.31  |
+NS*| WANT_DELEGATION      | OPT        | FDELG (OPT)  | Section 18.49  |
+   | WRITE                | REQ        |              | Section 18.32  |
+
+Callback Operations
+
+   +-------------------------+-----------+-------------+---------------+
+   | Operation               | REQ, REC, | Feature     | Definition    |
+   |                         | OPT, or   | (REQ, REC,  |               |
+   |                         | MNI       | or OPT)     |               |
+   +-------------------------+-----------+-------------+---------------+
+   | CB_GETATTR              | OPT       | FDELG (REQ) | Section 20.1  |
+P  | CB_LAYOUTRECALL         | OPT       | pNFS (REQ)  | Section 20.3  |
+NS*| CB_NOTIFY               | OPT       | DDELG (REQ) | Section 20.4  |
+P  | CB_NOTIFY_DEVICEID      | OPT       | pNFS (OPT)  | Section 20.12 |
+NS*| CB_NOTIFY_LOCK          | OPT       |             | Section 20.11 |
+NS*| CB_PUSH_DELEG           | OPT       | FDELG (OPT) | Section 20.5  |
+   | CB_RECALL               | OPT       | FDELG,      | Section 20.2  |
+   |                         |           | DDELG, pNFS |               |
+   |                         |           | (REQ)       |               |
+NS*| CB_RECALL_ANY           | OPT       | FDELG,      | Section 20.6  |
+   |                         |           | DDELG, pNFS |               |
+   |                         |           | (REQ)       |               |
+NS | CB_RECALL_SLOT          | REQ       |             | Section 20.8  |
+NS*| CB_RECALLABLE_OBJ_AVAIL | OPT       | DDELG, pNFS | Section 20.7  |
+   |                         |           | (REQ)       |               |
+I  | CB_SEQUENCE             | OPT       | FDELG,      | Section 20.9  |
+   |                         |           | DDELG, pNFS |               |
+   |                         |           | (REQ)       |               |
+NS*| CB_WANTS_CANCELLED      | OPT       | FDELG,      | Section 20.10 |
+   |                         |           | DDELG, pNFS |               |
+   |                         |           | (REQ)       |               |
+   +-------------------------+-----------+-------------+---------------+
+
+Implementation notes:
+
+EXCHANGE_ID:
+* only SP4_NONE state protection supported
+* implementation ids are ignored
+
+CREATE_SESSION:
+* backchannel attributes are ignored
+* backchannel security parameters are ignored
+
+SEQUENCE:
+* no support for dynamic slot table renegotiation (optional)
+
+nfsv4.1 COMPOUND rules:
+The following cases aren't supported yet:
+* Enforcing of NFS4ERR_NOT_ONLY_OP for: BIND_CONN_TO_SESSION, CREATE_SESSION,
+  DESTROY_CLIENTID, DESTROY_SESSION, EXCHANGE_ID.
+* DESTROY_SESSION MUST be the final operation in the COMPOUND request.
+
index 55b2852..02c0e93 100644 (file)
@@ -61,24 +61,28 @@ GigaSet 307x Device Driver
      ---------------------
 2.1. Modules
      -------
-     To get the device working, you have to load the proper kernel module. You
-     can do this using
-         modprobe modulename
-     where modulename is ser_gigaset (M101), usb_gigaset (M105), or
-     bas_gigaset (direct USB connection to the base).
+     For the devices to work, the proper kernel modules have to be loaded.
+     This normally happens automatically when the system detects the USB
+     device (base, M105) or when the line discipline is attached (M101). It
+     can also be triggered manually using the modprobe(8) command, for example
+     for troubleshooting or to pass module parameters.
 
      The module ser_gigaset provides a serial line discipline N_GIGASET_M101
-     which drives the device through the regular serial line driver. To use it,
-     run the Gigaset M101 daemon "gigasetm101d" (also available from
-     http://sourceforge.net/projects/gigaset307x/) with the device file of the
-     RS232 port to the M101 as an argument, for example:
-        gigasetm101d /dev/ttyS1
-     This will open the device file, set its line discipline to N_GIGASET_M101,
-     and then sleep in the background, keeping the device open so that the
-     line discipline remains active. To deactivate it, kill the daemon, for
-     example with
-        killall gigasetm101d
-     before disconnecting the device.
+     which drives the device through the regular serial line driver. It must
+     be attached to the serial line to which the M101 is connected with the
+     ldattach(8) command (requires util-linux-ng release 2.14 or later), for
+     example:
+        ldattach GIGASET_M101 /dev/ttyS1
+     This will open the device file, attach the line discipline to it, and
+     then sleep in the background, keeping the device open so that the line
+     discipline remains active. To deactivate it, kill the daemon, for example
+     with
+        killall ldattach
+     before disconnecting the device. To have this happen automatically at
+     system startup/shutdown on an LSB compatible system, create and activate
+     an appropriate LSB startup script /etc/init.d/gigaset. (The init name
+     'gigaset' is officially assigned to this project by LANANA.)
+     Alternatively, just add the 'ldattach' command line to /etc/rc.local.
 
 2.2. Device nodes for user space programs
      ------------------------------------
@@ -194,10 +198,11 @@ GigaSet 307x Device Driver
      operation (for wireless access to the base), but are needed for access
      to the M105's own configuration mode (registration to the base, baudrate
      and line format settings, device status queries) via the gigacontr
-     utility. Their use is disabled in the driver by default for safety
-     reasons but can be enabled by setting the kernel configuration option
-     "Support for undocumented USB requests" (GIGASET_UNDOCREQ) to "Y" and
-     recompiling.
+     utility. Their use is controlled by the kernel configuration option
+     "Support for undocumented USB requests" (CONFIG_GIGASET_UNDOCREQ). If you
+     encounter error code -ENOTTY when trying to use some features of the
+     M105, try setting that option to "y" via 'make {x,menu}config' and
+     recompiling the driver.
 
 
 3.   Troubleshooting
@@ -228,6 +233,13 @@ GigaSet 307x Device Driver
      Solution:
         Select Unimodem mode for all DECT data adapters. (see section 2.4.)
 
+     Problem:
+        You want to configure your USB DECT data adapter (M105) but gigacontr
+        reports an error: "/dev/ttyGU0: Inappropriate ioctl for device".
+     Solution:
+        Recompile the usb_gigaset driver with the kernel configuration option
+        CONFIG_GIGASET_UNDOCREQ set to 'y'. (see section 2.6.)
+
 3.2. Telling the driver to provide more information
      ----------------------------------------------
      Building the driver with the "Gigaset debugging" kernel configuration
index 2895ce2..6172e43 100644 (file)
@@ -153,60 +153,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        1,0: use 1st APIC table
                        default: 0
 
-       acpi_sleep=     [HW,ACPI] Sleep options
-                       Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig,
-                                 old_ordering, s4_nonvs }
-                       See Documentation/power/video.txt for information on
-                       s3_bios and s3_mode.
-                       s3_beep is for debugging; it makes the PC's speaker beep
-                       as soon as the kernel's real-mode entry point is called.
-                       s4_nohwsig prevents ACPI hardware signature from being
-                       used during resume from hibernation.
-                       old_ordering causes the ACPI 1.0 ordering of the _PTS
-                       control method, with respect to putting devices into
-                       low power states, to be enforced (the ACPI 2.0 ordering
-                       of _PTS is used by default).
-                       s4_nonvs prevents the kernel from saving/restoring the
-                       ACPI NVS memory during hibernation.
-
-       acpi_sci=       [HW,ACPI] ACPI System Control Interrupt trigger mode
-                       Format: { level | edge | high | low }
-
-       acpi_irq_balance [HW,ACPI]
-                       ACPI will balance active IRQs
-                       default in APIC mode
-
-       acpi_irq_nobalance [HW,ACPI]
-                       ACPI will not move active IRQs (default)
-                       default in PIC mode
-
-       acpi_irq_pci=   [HW,ACPI] If irq_balance, clear listed IRQs for
-                       use by PCI
-                       Format: <irq>,<irq>...
-
-       acpi_irq_isa=   [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
-                       Format: <irq>,<irq>...
-
-       acpi_no_auto_ssdt       [HW,ACPI] Disable automatic loading of SSDT
-
-       acpi_os_name=   [HW,ACPI] Tell ACPI BIOS the name of the OS
-                       Format: To spoof as Windows 98: ="Microsoft Windows"
-
-       acpi_osi=       [HW,ACPI] Modify list of supported OS interface strings
-                       acpi_osi="string1"      # add string1 -- only one string
-                       acpi_osi="!string2"     # remove built-in string2
-                       acpi_osi=               # disable all strings
-
-       acpi_serialize  [HW,ACPI] force serialization of AML methods
-
-       acpi_skip_timer_override [HW,ACPI]
-                       Recognize and ignore IRQ0/pin2 Interrupt Override.
-                       For broken nForce2 BIOS resulting in XT-PIC timer.
-       acpi_use_timer_override [HW,ACPI]
-                       Use timer override. For some broken Nvidia NF5 boards
-                       that require a timer override, but don't have
-                       HPET
-
        acpi_backlight= [HW,ACPI]
                        acpi_backlight=vendor
                        acpi_backlight=video
@@ -214,11 +160,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        (e.g. thinkpad_acpi, sony_acpi, etc.) instead
                        of the ACPI video.ko driver.
 
-       acpi_display_output=    [HW,ACPI]
-                       acpi_display_output=vendor
-                       acpi_display_output=video
-                       See above.
-
        acpi.debug_layer=       [HW,ACPI,ACPI_DEBUG]
        acpi.debug_level=       [HW,ACPI,ACPI_DEBUG]
                        Format: <int>
@@ -247,6 +188,41 @@ and is between 256 and 4096 characters. It is defined in the file
                        unusable.  The "log_buf_len" parameter may be useful
                        if you need to capture more output.
 
+       acpi_display_output=    [HW,ACPI]
+                       acpi_display_output=vendor
+                       acpi_display_output=video
+                       See above.
+
+       acpi_irq_balance [HW,ACPI]
+                       ACPI will balance active IRQs
+                       default in APIC mode
+
+       acpi_irq_nobalance [HW,ACPI]
+                       ACPI will not move active IRQs (default)
+                       default in PIC mode
+
+       acpi_irq_isa=   [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
+                       Format: <irq>,<irq>...
+
+       acpi_irq_pci=   [HW,ACPI] If irq_balance, clear listed IRQs for
+                       use by PCI
+                       Format: <irq>,<irq>...
+
+       acpi_no_auto_ssdt       [HW,ACPI] Disable automatic loading of SSDT
+
+       acpi_os_name=   [HW,ACPI] Tell ACPI BIOS the name of the OS
+                       Format: To spoof as Windows 98: ="Microsoft Windows"
+
+       acpi_osi=       [HW,ACPI] Modify list of supported OS interface strings
+                       acpi_osi="string1"      # add string1 -- only one string
+                       acpi_osi="!string2"     # remove built-in string2
+                       acpi_osi=               # disable all strings
+
+       acpi_pm_good    [X86-32,X86-64]
+                       Override the pmtimer bug detection: force the kernel
+                       to assume that this machine's pmtimer latches its value
+                       and always returns good values.
+
        acpi.power_nocheck=     [HW,ACPI]
                        Format: 1/0 enable/disable the check of power state.
                        On some bogus BIOS the _PSC object/_STA object of
@@ -255,11 +231,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        power state again in power transition.
                        1 : disable the power state check
 
-       acpi_pm_good    [X86-32,X86-64]
-                       Override the pmtimer bug detection: force the kernel
-                       to assume that this machine's pmtimer latches its value
-                       and always returns good values.
-
        acpi_enforce_resources= [ACPI]
                        { strict | lax | no }
                        Check for resource conflicts between native drivers
@@ -276,22 +247,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        no: ACPI OperationRegions are not marked as reserved,
                        no further checks are performed.
 
-       agp=            [AGP]
-                       { off | try_unsupported }
-                       off: disable AGP support
-                       try_unsupported: try to drive unsupported chipsets
-                               (may crash computer or cause data corruption)
-
-       enable_timer_pin_1 [i386,x86-64]
-                       Enable PIN 1 of APIC timer
-                       Can be useful to work around chipset bugs
-                       (in particular on some ATI chipsets).
-                       The kernel tries to set a reasonable default.
-
-       disable_timer_pin_1 [i386,x86-64]
-                       Disable PIN 1 of APIC timer
-                       Can be useful to work around chipset bugs.
-
        ad1848=         [HW,OSS]
                        Format: <io>,<irq>,<dma>,<dma2>,<type>
 
@@ -305,6 +260,12 @@ and is between 256 and 4096 characters. It is defined in the file
                        Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
                        See also header of sound/oss/aedsp16.c.
 
+       agp=            [AGP]
+                       { off | try_unsupported }
+                       off: disable AGP support
+                       try_unsupported: try to drive unsupported chipsets
+                               (may crash computer or cause data corruption)
+
        aha152x=        [HW,SCSI]
                        See Documentation/scsi/aha152x.txt.
 
@@ -432,12 +393,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        possible to determine what the correct size should be.
                        This option provides an override for these situations.
 
-       security=       [SECURITY] Choose a security module to enable at boot.
-                       If this boot parameter is not specified, only the first
-                       security module asking for security registration will be
-                       loaded. An invalid security module name will be treated
-                       as if no module has been chosen.
-
        capability.disable=
                        [SECURITY] Disable capabilities.  This would normally
                        be used only if an alternative security model is to be
@@ -509,24 +464,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        Range: 0 - 8192
                        Default: 64
 
-       dma_debug=off   If the kernel is compiled with DMA_API_DEBUG support
-                       this option disables the debugging code at boot.
-
-       dma_debug_entries=<number>
-                       This option allows to tune the number of preallocated
-                       entries for DMA-API debugging code. One entry is
-                       required per DMA-API allocation. Use this if the
-                       DMA-API debugging code disables itself because the
-                       architectural default is too low.
-
-       hpet=           [X86-32,HPET] option to control HPET usage
-                       Format: { enable (default) | disable | force |
-                               verbose }
-                       disable: disable HPET and use PIT instead
-                       force: allow force enabled of undocumented chips (ICH4,
-                       VIA, nVidia)
-                       verbose: show contents of HPET registers during setup
-
        com20020=       [HW,NET] ARCnet - COM20020 chipset
                        Format:
                        <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
@@ -570,23 +507,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        console=brl,ttyS0
                For now, only VisioBraille is supported.
 
-       earlycon=       [KNL] Output early console device and options.
-               uart[8250],io,<addr>[,options]
-               uart[8250],mmio,<addr>[,options]
-                       Start an early, polled-mode console on the 8250/16550
-                       UART at the specified I/O port or MMIO address.
-                       The options are the same as for ttyS, above.
-
-       no_console_suspend
-                       [HW] Never suspend the console
-                       Disable suspending of consoles during suspend and
-                       hibernate operations.  Once disabled, debugging
-                       messages can reach various consoles while the rest
-                       of the system is being put to sleep (ie, while
-                       debugging driver suspend/resume hooks).  This may
-                       not work reliably with all consoles, but is known
-                       to work with serial and VGA consoles.
-
        coredump_filter=
                        [KNL] Change the default value for
                        /proc/<pid>/coredump_filter.
@@ -643,30 +563,13 @@ and is between 256 and 4096 characters. It is defined in the file
                        Format: <area>[,<node>]
                        See also Documentation/networking/decnet.txt.
 
-       vt.default_blu= [VT]
-                       Format: <blue0>,<blue1>,<blue2>,...,<blue15>
-                       Change the default blue palette of the console.
-                       This is a 16-member array composed of values
-                       ranging from 0-255.
-
-       vt.default_grn= [VT]
-                       Format: <green0>,<green1>,<green2>,...,<green15>
-                       Change the default green palette of the console.
-                       This is a 16-member array composed of values
-                       ranging from 0-255.
-
-       vt.default_red= [VT]
-                       Format: <red0>,<red1>,<red2>,...,<red15>
-                       Change the default red palette of the console.
-                       This is a 16-member array composed of values
-                       ranging from 0-255.
-
-       vt.default_utf8=
-                       [VT]
-                       Format=<0|1>
-                       Set system-wide default UTF-8 mode for all tty's.
-                       Default is 1, i.e. UTF-8 mode is enabled for all
-                       newly opened terminals.
+       default_hugepagesz=
+                       [same as hugepagesz=] The size of the default
+                       HugeTLB page size. This is the size represented by
+                       the legacy /proc/ hugepages APIs, used for SHM, and
+                       default size when mounting hugetlbfs filesystems.
+                       Defaults to the default architecture's huge page size
+                       if not specified.
 
        dhash_entries=  [KNL]
                        Set number of hash buckets for dentry cache.
@@ -679,27 +582,9 @@ and is between 256 and 4096 characters. It is defined in the file
                        Documentation/serial/digiepca.txt.
 
        disable_mtrr_cleanup [X86]
-       enable_mtrr_cleanup [X86]
                        The kernel tries to adjust MTRR layout from continuous
                        to discrete, to make X server driver able to add WB
-                       entry later. This parameter enables/disables that.
-
-       mtrr_chunk_size=nn[KMG] [X86]
-                       used for mtrr cleanup. It is largest continous chunk
-                       that could hold holes aka. UC entries.
-
-       mtrr_gran_size=nn[KMG] [X86]
-                       Used for mtrr cleanup. It is granularity of mtrr block.
-                       Default is 1.
-                       Large value could prevent small alignment from
-                       using up MTRRs.
-
-       mtrr_spare_reg_nr=n [X86]
-                       Format: <integer>
-                       Range: 0,7 : spare reg number
-                       Default : 1
-                       Used for mtrr cleanup. It is spare mtrr entries number.
-                       Set to 2 or more if your graphical card needs more.
+                       entry later. This parameter disables that.
 
        disable_mtrr_trim [X86, Intel and AMD only]
                        By default the kernel will trim any uncacheable
@@ -707,12 +592,38 @@ and is between 256 and 4096 characters. It is defined in the file
                        MTRR settings.  This parameter disables that behavior,
                        possibly causing your machine to run very slowly.
 
+       disable_timer_pin_1 [i386,x86-64]
+                       Disable PIN 1 of APIC timer
+                       Can be useful to work around chipset bugs.
+
        dmasound=       [HW,OSS] Sound subsystem buffers
 
+       dma_debug=off   If the kernel is compiled with DMA_API_DEBUG support,
+                       this option disables the debugging code at boot.
+
+       dma_debug_entries=<number>
+                       This option allows to tune the number of preallocated
+                       entries for DMA-API debugging code. One entry is
+                       required per DMA-API allocation. Use this if the
+                       DMA-API debugging code disables itself because the
+                       architectural default is too low.
+
        dscc4.setup=    [NET]
 
        dtc3181e=       [HW,SCSI]
 
+       dynamic_printk  Enables pr_debug()/dev_dbg() calls if
+                       CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled.
+                       These can also be switched on/off via
+                       <debugfs>/dynamic_printk/modules
+
+       earlycon=       [KNL] Output early console device and options.
+               uart[8250],io,<addr>[,options]
+               uart[8250],mmio,<addr>[,options]
+                       Start an early, polled-mode console on the 8250/16550
+                       UART at the specified I/O port or MMIO address.
+                       The options are the same as for ttyS, above.
+
        earlyprintk=    [X86-32,X86-64,SH,BLACKFIN]
                        earlyprintk=vga
                        earlyprintk=serial[,ttySn[,baudrate]]
@@ -754,6 +665,17 @@ and is between 256 and 4096 characters. It is defined in the file
                        pass this option to capture kernel.
                        See Documentation/kdump/kdump.txt for details.
 
+       enable_mtrr_cleanup [X86]
+                       The kernel tries to adjust MTRR layout from continuous
+                       to discrete, to make X server driver able to add WB
+                       entry later. This parameter enables that.
+
+       enable_timer_pin_1 [i386,x86-64]
+                       Enable PIN 1 of APIC timer
+                       Can be useful to work around chipset bugs
+                       (in particular on some ATI chipsets).
+                       The kernel tries to set a reasonable default.
+
        enforcing       [SELINUX] Set initial enforcing status.
                        Format: {"0" | "1"}
                        See security/selinux/Kconfig help text.
@@ -841,6 +763,16 @@ and is between 256 and 4096 characters. It is defined in the file
        hisax=          [HW,ISDN]
                        See Documentation/isdn/README.HiSax.
 
+       hlt             [BUGS=ARM,SH]
+
+       hpet=           [X86-32,HPET] option to control HPET usage
+                       Format: { enable (default) | disable | force |
+                               verbose }
+                       disable: disable HPET and use PIT instead
+                       force: allow force enabled of undocumented chips (ICH4,
+                               VIA, nVidia)
+                       verbose: show contents of HPET registers during setup
+
        hugepages=      [HW,X86-32,IA-64] HugeTLB pages to allocate at boot.
        hugepagesz=     [HW,IA-64,PPC,X86-64] The size of the HugeTLB pages.
                        On x86-64 and powerpc, this option can be specified
@@ -850,15 +782,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        (when the CPU supports the "pdpe1gb" cpuinfo flag)
                        Note that 1GB pages can only be allocated at boot time
                        using hugepages= and not freed afterwards.
-       default_hugepagesz=
-                       [same as hugepagesz=] The size of the default
-                       HugeTLB page size. This is the size represented by
-                       the legacy /proc/ hugepages APIs, used for SHM, and
-                       default size when mounting hugetlbfs filesystems.
-                       Defaults to the default architecture's huge page size
-                       if not specified.
-
-       hlt             [BUGS=ARM,SH]
 
        hvc_iucv=       [S390] Number of z/VM IUCV hypervisor console (HVC)
                               terminal devices. Valid values: 0..8
@@ -919,6 +842,9 @@ and is between 256 and 4096 characters. It is defined in the file
        idebus=         [HW] (E)IDE subsystem - VLB/PCI bus speed
                        See Documentation/ide/ide.txt.
 
+       ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem
+                       Claim all unknown PCI IDE storage controllers.
+
        idle=           [X86]
                        Format: idle=poll, idle=mwait, idle=halt, idle=nomwait
                        Poll forces a polling idle loop that can slightly
@@ -934,9 +860,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        In such case C2/C3 won't be used again.
                        idle=nomwait: Disable mwait for CPU C-states
 
-       ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem
-                       Claim all unknown PCI IDE storage controllers.
-
        ignore_loglevel [KNL]
                        Ignore loglevel setting - this will print /all/
                        kernel messages to the console. Useful for debugging.
@@ -970,25 +893,6 @@ and is between 256 and 4096 characters. It is defined in the file
        inport.irq=     [HW] Inport (ATI XL and Microsoft) busmouse driver
                        Format: <irq>
 
-       inttest=        [IA64]
-
-       iomem=          Disable strict checking of access to MMIO memory
-               strict  regions from userspace.
-               relaxed
-
-       iommu=          [x86]
-               off
-               force
-               noforce
-               biomerge
-               panic
-               nopanic
-               merge
-               nomerge
-               forcesac
-               soft
-
-
        intel_iommu=    [DMAR] Intel IOMMU driver (DMAR) option
                on
                        Enable intel iommu driver.
@@ -1012,6 +916,28 @@ and is between 256 and 4096 characters. It is defined in the file
                        result in a hardware IOTLB flush operation as opposed
                        to batching them for performance.
 
+       inttest=        [IA64]
+
+       iomem=          Disable strict checking of access to MMIO memory
+               strict  regions from userspace.
+               relaxed
+
+       iommu=          [x86]
+               off
+               force
+               noforce
+               biomerge
+               panic
+               nopanic
+               merge
+               nomerge
+               forcesac
+               soft
+
+       io7=            [HW] IO7 for Marvel based alpha systems
+                       See comment before marvel_specify_io7 in
+                       arch/alpha/kernel/core_marvel.c.
+
        io_delay=       [X86-32,X86-64] I/O delay method
                0x80
                        Standard port 0x80 based delay
@@ -1022,10 +948,6 @@ and is between 256 and 4096 characters. It is defined in the file
                none
                        No delay
 
-       io7=            [HW] IO7 for Marvel based alpha systems
-                       See comment before marvel_specify_io7 in
-                       arch/alpha/kernel/core_marvel.c.
-
        ip=             [IP_PNP]
                        See Documentation/filesystems/nfsroot.txt.
 
@@ -1036,12 +958,6 @@ and is between 256 and 4096 characters. It is defined in the file
        ips=            [HW,SCSI] Adaptec / IBM ServeRAID controller
                        See header of drivers/scsi/ips.c.
 
-       ports=          [IP_VS_FTP] IPVS ftp helper module
-                       Default is 21.
-                       Up to 8 (IP_VS_APP_MAX_PORTS) ports
-                       may be specified.
-                       Format: <port>,<port>....
-
        irqfixup        [HW]
                        When an interrupt is not handled search all handlers
                        for it. Intended to get systems with badly broken
@@ -1082,6 +998,8 @@ and is between 256 and 4096 characters. It is defined in the file
        js=             [HW,JOY] Analog joystick
                        See Documentation/input/joystick.txt.
 
+       keepinitrd      [HW,ARM]
+
        kernelcore=nn[KMG]      [KNL,X86-32,IA-64,PPC,X86-64] This parameter
                        specifies the amount of memory usable by the kernel
                        for non-movable allocations.  The requested amount is
@@ -1107,21 +1025,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        higher than default (KMEMTRACE_N_SUBBUFS in code) if
                        you experience buffer overruns.
 
-       movablecore=nn[KMG]     [KNL,X86-32,IA-64,PPC,X86-64] This parameter
-                       is similar to kernelcore except it specifies the
-                       amount of memory used for migratable allocations.
-                       If both kernelcore and movablecore is specified,
-                       then kernelcore will be at *least* the specified
-                       value but may be more. If movablecore on its own
-                       is specified, the administrator must be careful
-                       that the amount of memory usable for all allocations
-                       is not too small.
-
-       keepinitrd      [HW,ARM]
-
-       kstack=N        [X86-32,X86-64] Print N words from the kernel stack
-                       in oops dumps.
-
        kgdboc=         [HW] kgdb over consoles.
                        Requires a tty driver that supports console polling.
                        (only serial suported for now)
@@ -1131,6 +1034,9 @@ and is between 256 and 4096 characters. It is defined in the file
                        Configure the RouterBoard 532 series on-chip
                        Ethernet adapter MAC address.
 
+       kstack=N        [X86-32,X86-64] Print N words from the kernel stack
+                       in oops dumps.
+
        l2cr=           [PPC]
 
        l3cr=           [PPC]
@@ -1276,9 +1182,8 @@ and is between 256 and 4096 characters. It is defined in the file
                        (machvec) in a generic kernel.
                        Example: machvec=hpzx1_swiotlb
 
-       max_loop=       [LOOP] Maximum number of loopback devices that can
-                       be mounted
-                       Format: <1-256>
+       max_addr=nn[KMG]        [KNL,BOOT,ia64] All physical memory greater
+                       than or equal to this physical address is ignored.
 
        maxcpus=        [SMP] Maximum number of processors that an SMP kernel
                        should make use of.  maxcpus=n : n >= 0 limits the
@@ -1286,8 +1191,9 @@ and is between 256 and 4096 characters. It is defined in the file
                        it is equivalent to "nosmp", which also disables
                        the IO APIC.
 
-       max_addr=nn[KMG]        [KNL,BOOT,ia64] All physical memory greater than
-                       or equal to this physical address is ignored.
+       max_loop=       [LOOP] Maximum number of loopback devices that can
+                       be mounted
+                       Format: <1-256>
 
        max_luns=       [SCSI] Maximum number of LUNs to probe.
                        Should be between 1 and 2^32-1.
@@ -1414,6 +1320,16 @@ and is between 256 and 4096 characters. It is defined in the file
        mousedev.yres=  [MOUSE] Vertical screen resolution, used for devices
                        reporting absolute coordinates, such as tablets
 
+       movablecore=nn[KMG]     [KNL,X86-32,IA-64,PPC,X86-64] This parameter
+                       is similar to kernelcore except it specifies the
+                       amount of memory used for migratable allocations.
+                       If both kernelcore and movablecore is specified,
+                       then kernelcore will be at *least* the specified
+                       value but may be more. If movablecore on its own
+                       is specified, the administrator must be careful
+                       that the amount of memory usable for all allocations
+                       is not too small.
+
        mpu401=         [HW,OSS]
                        Format: <io>,<irq>
 
@@ -1435,6 +1351,23 @@ and is between 256 and 4096 characters. It is defined in the file
                        [HW] Make the MicroTouch USB driver use raw coordinates
                        ('y', default) or cooked coordinates ('n')
 
+       mtrr_chunk_size=nn[KMG] [X86]
+                       used for mtrr cleanup. It is largest continous chunk
+                       that could hold holes aka. UC entries.
+
+       mtrr_gran_size=nn[KMG] [X86]
+                       Used for mtrr cleanup. It is granularity of mtrr block.
+                       Default is 1.
+                       Large value could prevent small alignment from
+                       using up MTRRs.
+
+       mtrr_spare_reg_nr=n [X86]
+                       Format: <integer>
+                       Range: 0,7 : spare reg number
+                       Default : 1
+                       Used for mtrr cleanup. It is spare mtrr entries number.
+                       Set to 2 or more if your graphical card needs more.
+
        n2=             [NET] SDL Inc. RISCom/N2 synchronous serial card
 
        NCR_D700=       [HW,SCSI]
@@ -1495,11 +1428,13 @@ and is between 256 and 4096 characters. It is defined in the file
                        0 - turn nmi_watchdog off
                        1 - use the IO-APIC timer for the NMI watchdog
                        2 - use the local APIC for the NMI watchdog using
-                       a performance counter. Note: This will use one performance
-                       counter and the local APIC's performance vector.
-                       When panic is specified panic when an NMI watchdog timeout occurs.
-                       This is useful when you use a panic=... timeout and need the box
-                       quickly up again.
+                       a performance counter. Note: This will use one
+                       performance counter and the local APIC's performance
+                       vector.
+                       When panic is specified, panic when an NMI watchdog
+                       timeout occurs.
+                       This is useful when you use a panic=... timeout and
+                       need the box quickly up again.
                        Instead of 1 and 2 it is possible to use the following
                        symbolic names: lapic and ioapic
                        Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic
@@ -1508,6 +1443,16 @@ and is between 256 and 4096 characters. It is defined in the file
                        emulation library even if a 387 maths coprocessor
                        is present.
 
+       no_console_suspend
+                       [HW] Never suspend the console
+                       Disable suspending of consoles during suspend and
+                       hibernate operations.  Once disabled, debugging
+                       messages can reach various consoles while the rest
+                       of the system is being put to sleep (ie, while
+                       debugging driver suspend/resume hooks).  This may
+                       not work reliably with all consoles, but is known
+                       to work with serial and VGA consoles.
+
        noaliencache    [MM, NUMA, SLAB] Disables the allocation of alien
                        caches in the slab allocator.  Saves per-node memory,
                        but will impact performance.
@@ -1522,6 +1467,8 @@ and is between 256 and 4096 characters. It is defined in the file
 
        nocache         [ARM]
 
+       noclflush       [BUGS=X86] Don't use the CLFLUSH instruction
+
        nodelayacct     [KNL] Disable per-task delay accounting
 
        nodisconnect    [HW,SCSI,M68K] Disables SCSI disconnects.
@@ -1550,8 +1497,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        register save and restore. The kernel will only save
                        legacy floating-point registers on task switch.
 
-       noclflush       [BUGS=X86] Don't use the CLFLUSH instruction
-
        nohlt           [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or
                        wfi(ARM) instruction doesn't work correctly and not to
                        use it. This is also useful when using JTAG debugger.
@@ -1596,12 +1541,6 @@ and is between 256 and 4096 characters. It is defined in the file
 
        nolapic_timer   [X86-32,APIC] Do not use the local APIC timer.
 
-       nox2apic        [X86-64,APIC] Do not enable x2APIC mode.
-
-       x2apic_phys     [X86-64,APIC] Use x2apic physical mode instead of
-                       default x2apic cluster mode on platforms
-                       supporting x2apic.
-
        noltlbs         [PPC] Do not use large page/tlb entries for kernel
                        lowmem mapping on PPC40x.
 
@@ -1612,6 +1551,9 @@ and is between 256 and 4096 characters. It is defined in the file
        nomfgpt         [X86-32] Disable Multi-Function General Purpose
                        Timer usage (for AMD Geode machines).
 
+       norandmaps      Don't use address space randomization.  Equivalent to
+                       echo 0 > /proc/sys/kernel/randomize_va_space
+
        noreplace-paravirt      [X86-32,PV_OPS] Don't patch paravirt_ops
 
        noreplace-smp   [X86-32,SMP] Don't replace SMP instructions
@@ -1650,13 +1592,13 @@ and is between 256 and 4096 characters. It is defined in the file
                        purges which is reported from either PAL_VM_SUMMARY or
                        SAL PALO.
 
+       nr_uarts=       [SERIAL] maximum number of UARTs to be registered.
+
        numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
                        one of ['zone', 'node', 'default'] can be specified
                        This can be set from sysctl after boot.
                        See Documentation/sysctl/vm.txt for details.
 
-       nr_uarts=       [SERIAL] maximum number of UARTs to be registered.
-
        ohci1394_dma=early      [HW] enable debugging via the ohci1394 driver.
                        See Documentation/debugging-via-ohci1394.txt for more
                        info.
@@ -1905,6 +1847,14 @@ and is between 256 and 4096 characters. It is defined in the file
        printk.time=    Show timing data prefixed to each printk message line
                        Format: <bool>  (1/Y/y=enable, 0/N/n=disable)
 
+       processor.max_cstate=   [HW,ACPI]
+                       Limit processor to maximum C-state
+                       max_cstate=9 overrides any DMI blacklist limit.
+
+       processor.nocst [HW,ACPI]
+                       Ignore the _CST method to determine C-states,
+                       instead using the legacy FADT method
+
        profile=        [KNL] Enable kernel profiling via /proc/profile
                        Format: [schedule,]<number>
                        Param: "schedule" - profile schedule points.
@@ -1914,14 +1864,6 @@ and is between 256 and 4096 characters. It is defined in the file
                                Requires CONFIG_SCHEDSTATS
                        Param: "kvm" - profile VM exits.
 
-       processor.max_cstate=   [HW,ACPI]
-                       Limit processor to maximum C-state
-                       max_cstate=9 overrides any DMI blacklist limit.
-
-       processor.nocst [HW,ACPI]
-                       Ignore the _CST method to determine C-states,
-                       instead using the legacy FADT method
-
        prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk
                        before loading.
                        See Documentation/blockdev/ramdisk.txt.
@@ -2075,7 +2017,13 @@ and is between 256 and 4096 characters. It is defined in the file
                        allowing boot to proceed.  none ignores them, expecting
                        user space to do the scan.
 
-       selinux         [SELINUX] Disable or enable SELinux at boot time.
+       security=       [SECURITY] Choose a security module to enable at boot.
+                       If this boot parameter is not specified, only the first
+                       security module asking for security registration will be
+                       loaded. An invalid security module name will be treated
+                       as if no module has been chosen.
+
+       selinux=        [SELINUX] Disable or enable SELinux at boot time.
                        Format: { "0" | "1" }
                        See security/selinux/Kconfig help text.
                        0 -- disable.
@@ -2499,9 +2447,6 @@ and is between 256 and 4096 characters. It is defined in the file
                                        medium is write-protected).
                        Example: quirks=0419:aaf5:rl,0421:0433:rc
 
-       add_efi_memmap  [EFI; x86-32,X86-64] Include EFI memory map in
-                       kernel's map of available physical RAM.
-
        vdso=           [X86-32,SH,x86-64]
                        vdso=2: enable compat VDSO (default with COMPAT_VDSO)
                        vdso=1: enable VDSO (default)
@@ -2540,6 +2485,31 @@ and is between 256 and 4096 characters. It is defined in the file
        vmpoff=         [KNL,S390] Perform z/VM CP command after power off.
                        Format: <command>
 
+       vt.default_blu= [VT]
+                       Format: <blue0>,<blue1>,<blue2>,...,<blue15>
+                       Change the default blue palette of the console.
+                       This is a 16-member array composed of values
+                       ranging from 0-255.
+
+       vt.default_grn= [VT]
+                       Format: <green0>,<green1>,<green2>,...,<green15>
+                       Change the default green palette of the console.
+                       This is a 16-member array composed of values
+                       ranging from 0-255.
+
+       vt.default_red= [VT]
+                       Format: <red0>,<red1>,<red2>,...,<red15>
+                       Change the default red palette of the console.
+                       This is a 16-member array composed of values
+                       ranging from 0-255.
+
+       vt.default_utf8=
+                       [VT]
+                       Format=<0|1>
+                       Set system-wide default UTF-8 mode for all tty's.
+                       Default is 1, i.e. UTF-8 mode is enabled for all
+                       newly opened terminals.
+
        waveartist=     [HW,OSS]
                        Format: <io>,<irq>,<dma>,<dma2>
 
@@ -2552,6 +2522,10 @@ and is between 256 and 4096 characters. It is defined in the file
        wdt=            [WDT] Watchdog
                        See Documentation/watchdog/wdt.txt.
 
+       x2apic_phys     [X86-64,APIC] Use x2apic physical mode instead of
+                       default x2apic cluster mode on platforms
+                       supporting x2apic.
+
        xd=             [HW,XT] Original XT pre-IDE (RLL encoded) disks.
        xd_geo=         See header of drivers/block/xd.c.
 
@@ -2559,9 +2533,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        Format:
                        <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
 
-       norandmaps      Don't use address space randomization.  Equivalent to
-                       echo 0 > /proc/sys/kernel/randomize_va_space
-
 ______________________________________________________________________
 
 TODO:
index 84a04d5..a48b2ca 100644 (file)
@@ -5,9 +5,21 @@ Required properties:
 - reg : should specify localbus chip select and size used for the chip.
 - fsl,upm-addr-offset : UPM pattern offset for the address latch.
 - fsl,upm-cmd-offset : UPM pattern offset for the command latch.
-- gpios : may specify optional GPIO connected to the Ready-Not-Busy pin.
 
-Example:
+Optional properties:
+- fsl,upm-wait-flags : add chip-dependent short delays after running the
+       UPM pattern (0x1), after writing a data byte (0x2) or after
+       writing out a buffer (0x4).
+- fsl,upm-addr-line-cs-offsets : address offsets for multi-chip support.
+       The corresponding address lines are used to select the chip.
+- gpios : may specify optional GPIOs connected to the Ready-Not-Busy pins
+       (R/B#). For multi-chip devices, "n" GPIO definitions are required
+       according to the number of chips.
+- chip-delay : chip dependent delay for transfering data from array to
+       read registers (tR). Required if property "gpios" is not used
+       (R/B# pins not connected).
+
+Examples:
 
 upm@1,0 {
        compatible = "fsl,upm-nand";
@@ -26,3 +38,26 @@ upm@1,0 {
                };
        };
 };
+
+upm@3,0 {
+       #address-cells = <0>;
+       #size-cells = <0>;
+       compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand";
+       reg = <3 0x0 0x800>;
+       fsl,upm-addr-offset = <0x10>;
+       fsl,upm-cmd-offset = <0x08>;
+       /* Multi-chip NAND device */
+       fsl,upm-addr-line-cs-offsets = <0x0 0x200>;
+       fsl,upm-wait-flags = <0x5>;
+       chip-delay = <25>; // in micro-seconds
+
+       nand@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               partition@0 {
+                           label = "fs";
+                           reg = <0x00000000 0x10000000>;
+               };
+       };
+};
index ff51f4c..4fe14de 100644 (file)
@@ -1,15 +1,43 @@
-LED connected to GPIO
+LEDs connected to GPIO lines
 
 Required properties:
-- compatible : should be "gpio-led".
-- label : (optional) the label for this LED. If omitted, the label is
+- compatible : should be "gpio-leds".
+
+Each LED is represented as a sub-node of the gpio-leds device.  Each
+node's name represents the name of the corresponding LED.
+
+LED sub-node properties:
+- gpios :  Should specify the LED's GPIO, see "Specifying GPIO information
+  for devices" in Documentation/powerpc/booting-without-of.txt.  Active
+  low LEDs should be indicated using flags in the GPIO specifier.
+- label :  (optional) The label for this LED.  If omitted, the label is
   taken from the node name (excluding the unit address).
-- gpios : should specify LED GPIO.
+- linux,default-trigger :  (optional) This parameter, if present, is a
+  string defining the trigger assigned to the LED.  Current triggers are:
+    "backlight" - LED will act as a back-light, controlled by the framebuffer
+                 system
+    "default-on" - LED will turn on
+    "heartbeat" - LED "double" flashes at a load average based rate
+    "ide-disk" - LED indicates disk activity
+    "timer" - LED flashes at a fixed, configurable rate
 
-Example:
+Examples:
 
-led@0 {
-       compatible = "gpio-led";
-       label = "hdd";
-       gpios = <&mcu_pio 0 1>;
+leds {
+       compatible = "gpio-leds";
+       hdd {
+               label = "IDE Activity";
+               gpios = <&mcu_pio 0 1>; /* Active low */
+               linux,default-trigger = "ide-disk";
+       };
 };
+
+run-control {
+       compatible = "gpio-leds";
+       red {
+               gpios = <&mpc8572 6 0>;
+       };
+       green {
+               gpios = <&mpc8572 7 0>;
+       };
+}
index ddace3a..30f643f 100644 (file)
@@ -60,17 +60,9 @@ Supported Cards/Chipsets
        9005:0285:9005:02d5     Adaptec ASR-2405 (Voodoo40 Lite)
        9005:0285:9005:02d6     Adaptec ASR-2445 (Voodoo44 Lite)
        9005:0285:9005:02d7     Adaptec ASR-2805 (Voodoo80 Lite)
-       9005:0285:9005:02d8     Adaptec 5405G (Voodoo40 PM)
-       9005:0285:9005:02d9     Adaptec 5445G (Voodoo44 PM)
-       9005:0285:9005:02da     Adaptec 5805G (Voodoo80 PM)
-       9005:0285:9005:02db     Adaptec 5085G (Voodoo08 PM)
-       9005:0285:9005:02dc     Adaptec 51245G (Voodoo124 PM)
-       9005:0285:9005:02dd     Adaptec 51645G (Voodoo164 PM)
-       9005:0285:9005:02de     Adaptec 52445G (Voodoo244 PM)
-       9005:0285:9005:02df     Adaptec ASR-2045G (Voodoo04 Lite PM)
-       9005:0285:9005:02e0     Adaptec ASR-2405G (Voodoo40 Lite PM)
-       9005:0285:9005:02e1     Adaptec ASR-2445G (Voodoo44 Lite PM)
-       9005:0285:9005:02e2     Adaptec ASR-2805G (Voodoo80 Lite PM)
+       9005:0285:9005:02d8     Adaptec 5405Z (Voodoo40 BLBU)
+       9005:0285:9005:02d9     Adaptec 5445Z (Voodoo44 BLBU)
+       9005:0285:9005:02da     Adaptec 5805Z (Voodoo80 BLBU)
        1011:0046:9005:0364     Adaptec 5400S (Mustang)
        1011:0046:9005:0365     Adaptec 5400S (Mustang)
        9005:0287:9005:0800     Adaptec Themisto (Jupiter)
@@ -140,6 +132,7 @@ Deanna Bonds                            (non-DASD support, PAE fibs and 64 bit,
                                         where fibs that go to the hardware are consistently called hw_fibs and
                                         not just fibs like the name of the driver tracking structure)
 Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. Performance tuning, card failover and bug mitigations.
+Achim Leubner <Achim_Leubner@adaptec.com>
 
 Original Driver
 -------------------------
diff --git a/Documentation/video4linux/pxa_camera.txt b/Documentation/video4linux/pxa_camera.txt
new file mode 100644 (file)
index 0000000..b1137f9
--- /dev/null
@@ -0,0 +1,125 @@
+                              PXA-Camera Host Driver
+                              ======================
+
+Constraints
+-----------
+  a) Image size for YUV422P format
+     All YUV422P images are enforced to have width x height % 16 = 0.
+     This is due to DMA constraints, which transfers only planes of 8 byte
+     multiples.
+
+
+Global video workflow
+---------------------
+  a) QCI stopped
+     Initialy, the QCI interface is stopped.
+     When a buffer is queued (pxa_videobuf_ops->buf_queue), the QCI starts.
+
+  b) QCI started
+     More buffers can be queued while the QCI is started without halting the
+     capture.  The new buffers are "appended" at the tail of the DMA chain, and
+     smoothly captured one frame after the other.
+
+     Once a buffer is filled in the QCI interface, it is marked as "DONE" and
+     removed from the active buffers list. It can be then requeud or dequeued by
+     userland application.
+
+     Once the last buffer is filled in, the QCI interface stops.
+
+
+DMA usage
+---------
+  a) DMA flow
+     - first buffer queued for capture
+       Once a first buffer is queued for capture, the QCI is started, but data
+       transfer is not started. On "End Of Frame" interrupt, the irq handler
+       starts the DMA chain.
+     - capture of one videobuffer
+       The DMA chain starts transfering data into videobuffer RAM pages.
+       When all pages are transfered, the DMA irq is raised on "ENDINTR" status
+     - finishing one videobuffer
+       The DMA irq handler marks the videobuffer as "done", and removes it from
+       the active running queue
+       Meanwhile, the next videobuffer (if there is one), is transfered by DMA
+     - finishing the last videobuffer
+       On the DMA irq of the last videobuffer, the QCI is stopped.
+
+  b) DMA prepared buffer will have this structure
+
+     +------------+-----+---------------+-----------------+
+     | desc-sg[0] | ... | desc-sg[last] | finisher/linker |
+     +------------+-----+---------------+-----------------+
+
+     This structure is pointed by dma->sg_cpu.
+     The descriptors are used as follows :
+      - desc-sg[i]: i-th descriptor, transfering the i-th sg
+        element to the video buffer scatter gather
+      - finisher: has ddadr=DADDR_STOP, dcmd=ENDIRQEN
+      - linker: has ddadr= desc-sg[0] of next video buffer, dcmd=0
+
+     For the next schema, let's assume d0=desc-sg[0] .. dN=desc-sg[N],
+     "f" stands for finisher and "l" for linker.
+     A typical running chain is :
+
+         Videobuffer 1         Videobuffer 2
+     +---------+----+---+  +----+----+----+---+
+     | d0 | .. | dN | l |  | d0 | .. | dN | f |
+     +---------+----+-|-+  ^----+----+----+---+
+                      |    |
+                      +----+
+
+     After the chaining is finished, the chain looks like :
+
+         Videobuffer 1         Videobuffer 2         Videobuffer 3
+     +---------+----+---+  +----+----+----+---+  +----+----+----+---+
+     | d0 | .. | dN | l |  | d0 | .. | dN | l |  | d0 | .. | dN | f |
+     +---------+----+-|-+  ^----+----+----+-|-+  ^----+----+----+---+
+                      |    |                |    |
+                      +----+                +----+
+                                           new_link
+
+  c) DMA hot chaining timeslice issue
+
+     As DMA chaining is done while DMA _is_ running, the linking may be done
+     while the DMA jumps from one Videobuffer to another. On the schema, that
+     would be a problem if the following sequence is encountered :
+
+      - DMA chain is Videobuffer1 + Videobuffer2
+      - pxa_videobuf_queue() is called to queue Videobuffer3
+      - DMA controller finishes Videobuffer2, and DMA stops
+      =>
+         Videobuffer 1         Videobuffer 2
+     +---------+----+---+  +----+----+----+---+
+     | d0 | .. | dN | l |  | d0 | .. | dN | f |
+     +---------+----+-|-+  ^----+----+----+-^-+
+                      |    |                |
+                      +----+                +-- DMA DDADR loads DDADR_STOP
+
+      - pxa_dma_add_tail_buf() is called, the Videobuffer2 "finisher" is
+        replaced by a "linker" to Videobuffer3 (creation of new_link)
+      - pxa_videobuf_queue() finishes
+      - the DMA irq handler is called, which terminates Videobuffer2
+      - Videobuffer3 capture is not scheduled on DMA chain (as it stopped !!!)
+
+         Videobuffer 1         Videobuffer 2         Videobuffer 3
+     +---------+----+---+  +----+----+----+---+  +----+----+----+---+
+     | d0 | .. | dN | l |  | d0 | .. | dN | l |  | d0 | .. | dN | f |
+     +---------+----+-|-+  ^----+----+----+-|-+  ^----+----+----+---+
+                      |    |                |    |
+                      +----+                +----+
+                                           new_link
+                                          DMA DDADR still is DDADR_STOP
+
+      - pxa_camera_check_link_miss() is called
+        This checks if the DMA is finished and a buffer is still on the
+        pcdev->capture list. If that's the case, the capture will be restarted,
+        and Videobuffer3 is scheduled on DMA chain.
+      - the DMA irq handler finishes
+
+     Note: if DMA stops just after pxa_camera_check_link_miss() reads DDADR()
+     value, we have the guarantee that the DMA irq handler will be called back
+     when the DMA will finish the buffer, and pxa_camera_check_link_miss() will
+     be called again, to reschedule Videobuffer3.
+
+--
+Author: Robert Jarzmik <robert.jarzmik@free.fr>
index a311773..854808b 100644 (file)
@@ -90,7 +90,7 @@ up before calling v4l2_device_register then it will be untouched. If dev is
 NULL, then you *must* setup v4l2_dev->name before calling v4l2_device_register.
 
 The first 'dev' argument is normally the struct device pointer of a pci_dev,
-usb_device or platform_device. It is rare for dev to be NULL, but it happens
+usb_interface or platform_device. It is rare for dev to be NULL, but it happens
 with ISA devices or when one device creates multiple PCI devices, thus making
 it impossible to associate v4l2_dev with a particular parent.
 
@@ -351,17 +351,6 @@ And this to go from an i2c_client to a v4l2_subdev struct:
 
        struct v4l2_subdev *sd = i2c_get_clientdata(client);
 
-Finally you need to make a command function to make driver->command()
-call the right subdev_ops functions:
-
-static int subdev_command(struct i2c_client *client, unsigned cmd, void *arg)
-{
-       return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
-}
-
-If driver->command is never used then you can leave this out. Eventually the
-driver->command usage should be removed from v4l.
-
 Make sure to call v4l2_device_unregister_subdev(sd) when the remove() callback
 is called. This will unregister the sub-device from the bridge driver. It is
 safe to call this even if the sub-device was never registered.
@@ -375,14 +364,12 @@ from the remove() callback ensures that this is always done correctly.
 
 The bridge driver also has some helper functions it can use:
 
-struct v4l2_subdev *sd = v4l2_i2c_new_subdev(adapter, "module_foo", "chipid", 0x36);
+struct v4l2_subdev *sd = v4l2_i2c_new_subdev(v4l2_dev, adapter,
+              "module_foo", "chipid", 0x36);
 
 This loads the given module (can be NULL if no module needs to be loaded) and
 calls i2c_new_device() with the given i2c_adapter and chip/address arguments.
-If all goes well, then it registers the subdev with the v4l2_device. It gets
-the v4l2_device by calling i2c_get_adapdata(adapter), so you should make sure
-to call i2c_set_adapdata(adapter, v4l2_device) when you setup the i2c_adapter
-in your driver.
+If all goes well, then it registers the subdev with the v4l2_device.
 
 You can also use v4l2_i2c_new_probed_subdev() which is very similar to
 v4l2_i2c_new_subdev(), except that it has an array of possible I2C addresses
index 9673cd2..914f283 100644 (file)
@@ -1544,7 +1544,6 @@ S:        Maintained
 DVB SUBSYSTEM AND DRIVERS
 P:     LinuxTV.org Project
 M:     linux-media@vger.kernel.org
-L:     linux-dvb@linuxtv.org (subscription required)
 W:     http://linuxtv.org/
 T:     git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
 S:     Maintained
diff --git a/arch/arm/mach-davinci/include/mach/nand.h b/arch/arm/mach-davinci/include/mach/nand.h
new file mode 100644 (file)
index 0000000..aa48284
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * mach-davinci/nand.h
+ *
+ * Copyright Â© 2006 Texas Instruments.
+ *
+ * Ported to 2.6.23 Copyright Â© 2008 by
+ *   Sander Huijsen <Shuijsen@optelecom-nkf.com>
+ *   Troy Kisky <troy.kisky@boundarydevices.com>
+ *   Dirk Behme <Dirk.Behme@gmail.com>
+ *
+ * --------------------------------------------------------------------------
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __ARCH_ARM_DAVINCI_NAND_H
+#define __ARCH_ARM_DAVINCI_NAND_H
+
+#include <linux/mtd/nand.h>
+
+#define NRCSR_OFFSET           0x00
+#define AWCCR_OFFSET           0x04
+#define A1CR_OFFSET            0x10
+#define NANDFCR_OFFSET         0x60
+#define NANDFSR_OFFSET         0x64
+#define NANDF1ECC_OFFSET       0x70
+
+/* 4-bit ECC syndrome registers */
+#define NAND_4BIT_ECC_LOAD_OFFSET      0xbc
+#define NAND_4BIT_ECC1_OFFSET          0xc0
+#define NAND_4BIT_ECC2_OFFSET          0xc4
+#define NAND_4BIT_ECC3_OFFSET          0xc8
+#define NAND_4BIT_ECC4_OFFSET          0xcc
+#define NAND_ERR_ADD1_OFFSET           0xd0
+#define NAND_ERR_ADD2_OFFSET           0xd4
+#define NAND_ERR_ERRVAL1_OFFSET                0xd8
+#define NAND_ERR_ERRVAL2_OFFSET                0xdc
+
+/* NOTE:  boards don't need to use these address bits
+ * for ALE/CLE unless they support booting from NAND.
+ * They're used unless platform data overrides them.
+ */
+#define        MASK_ALE                0x08
+#define        MASK_CLE                0x10
+
+struct davinci_nand_pdata {            /* platform_data */
+       uint32_t                mask_ale;
+       uint32_t                mask_cle;
+
+       /* for packages using two chipselects */
+       uint32_t                mask_chipsel;
+
+       /* board's default static partition info */
+       struct mtd_partition    *parts;
+       unsigned                nr_parts;
+
+       /* none  == NAND_ECC_NONE (strongly *not* advised!!)
+        * soft  == NAND_ECC_SOFT
+        * 1-bit == NAND_ECC_HW
+        * 4-bit == NAND_ECC_HW_SYNDROME (not on all chips)
+        */
+       nand_ecc_modes_t        ecc_mode;
+
+       /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */
+       unsigned                options;
+};
+
+#endif /* __ARCH_ARM_DAVINCI_NAND_H */
index 82f1309..7f86fe0 100644 (file)
@@ -6,6 +6,9 @@
 
 obj-y                  += generic.o clock.o devices.o
 
+# Support for CMOS sensor interface
+obj-$(CONFIG_MX1_VIDEO)        += ksym_mx1.o mx1_camera_fiq.o
+
 # Specific board support
 obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o
 obj-$(CONFIG_MACH_SCB9328) += scb9328.o
\ No newline at end of file
index 97f42d9..76d1ffb 100644 (file)
@@ -44,7 +44,7 @@ static struct resource imx_csi_resources[] = {
 static u64 imx_csi_dmamask = 0xffffffffUL;
 
 struct platform_device imx_csi_device = {
-       .name           = "imx-csi",
+       .name           = "mx1-camera",
        .id             = 0, /* This is used to put cameras on this interface */
        .dev            = {
                .dma_mask = &imx_csi_dmamask,
diff --git a/arch/arm/mach-mx1/ksym_mx1.c b/arch/arm/mach-mx1/ksym_mx1.c
new file mode 100644 (file)
index 0000000..b09ee12
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Exported ksyms of ARCH_MX1
+ *
+ * Copyright (C) 2008, Darius Augulis <augulis.darius@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/platform_device.h>
+#include <linux/module.h>
+
+#include <mach/mx1_camera.h>
+
+/* IMX camera FIQ handler */
+EXPORT_SYMBOL(mx1_camera_sof_fiq_start);
+EXPORT_SYMBOL(mx1_camera_sof_fiq_end);
diff --git a/arch/arm/mach-mx1/mx1_camera_fiq.S b/arch/arm/mach-mx1/mx1_camera_fiq.S
new file mode 100644 (file)
index 0000000..9c69aa6
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ *  Copyright (C) 2008 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
+ *
+ *  Based on linux/arch/arm/lib/floppydma.S
+ *      Copyright (C) 1995, 1996 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+
+               .text
+               .global mx1_camera_sof_fiq_end
+               .global mx1_camera_sof_fiq_start
+mx1_camera_sof_fiq_start:
+               @ enable dma
+               ldr     r12, [r9]
+               orr     r12, r12, #0x00000001
+               str     r12, [r9]
+               @ unmask DMA interrupt
+               ldr     r12, [r8]
+               bic     r12, r12, r13
+               str     r12, [r8]
+               @ disable SOF interrupt
+               ldr     r12, [r10]
+               bic     r12, r12, #0x00010000
+               str     r12, [r10]
+               @ clear SOF flag
+               mov     r12, #0x00010000
+               str     r12, [r11]
+               @ return from FIQ
+               subs    pc, lr, #4
+mx1_camera_sof_fiq_end:
index ca46f48..9957a11 100644 (file)
@@ -533,7 +533,7 @@ static struct clk_lookup lookups[] __initdata = {
        _REGISTER_CLOCK(NULL, "kpp", kpp_clk)
        _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1)
        _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2)
-       _REGISTER_CLOCK("mx3-camera.0", "csi", csi_clk)
+       _REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk)
        _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk)
        _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk)
        _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk)
index eb35fca..3478eae 100644 (file)
@@ -49,6 +49,9 @@ struct pxa3xx_nand_platform_data {
         */
        int     enable_arbiter;
 
+       /* allow platform code to keep OBM/bootloader defined NFC config */
+       int     keep_config;
+
        const struct mtd_partition              *parts;
        unsigned int                            nr_parts;
 
index e0783e6..eca37d0 100644 (file)
 #define PHYS_OFFSET            UL(0x80000000)
 #endif
 
+#if defined(CONFIG_MX1_VIDEO)
+/*
+ * Increase size of DMA-consistent memory region.
+ * This is required for i.MX camera driver to capture at least four VGA frames.
+ */
+#define CONSISTENT_DMA_SIZE SZ_4M
+#endif /* CONFIG_MX1_VIDEO */
+
 #endif /* __ASM_ARCH_MXC_MEMORY_H__ */
diff --git a/arch/arm/plat-mxc/include/mach/mx1_camera.h b/arch/arm/plat-mxc/include/mach/mx1_camera.h
new file mode 100644 (file)
index 0000000..4fd6c70
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * mx1_camera.h - i.MX1/i.MXL camera driver header file
+ *
+ * Copyright (c) 2008, Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
+ * Copyright (C) 2009, Darius Augulis <augulis.darius@gmail.com>
+ *
+ * Based on PXA camera.h file:
+ * Copyright (C) 2003, Intel Corporation
+ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
+ *
+ * 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_ARCH_CAMERA_H_
+#define __ASM_ARCH_CAMERA_H_
+
+#define MX1_CAMERA_DATA_HIGH   1
+#define MX1_CAMERA_PCLK_RISING 2
+#define MX1_CAMERA_VSYNC_HIGH  4
+
+extern unsigned char mx1_camera_sof_fiq_start, mx1_camera_sof_fiq_end;
+
+/**
+ * struct mx1_camera_pdata - i.MX1/i.MXL camera platform data
+ * @mclk_10khz:        master clock frequency in 10kHz units
+ * @flags:     MX1 camera platform flags
+ */
+struct mx1_camera_pdata {
+       unsigned long mclk_10khz;
+       unsigned long flags;
+};
+
+#endif /* __ASM_ARCH_CAMERA_H_ */
index f494272..e040e03 100644 (file)
@@ -337,7 +337,7 @@ int _access_ok(unsigned long addr, unsigned long size)
        if (addr >= memory_mtd_end && (addr + size) <= physical_mem_end)
                return 1;
 
-#ifdef CONFIG_ROMFS_MTD_FS
+#ifdef CONFIG_ROMFS_ON_MTD
        /* For XIP, allow user space to use pointers within the ROMFS.  */
        if (addr >= memory_mtd_start && (addr + size) <= memory_mtd_end)
                return 1;
index 0764348..7f392bc 100644 (file)
@@ -13,7 +13,6 @@
 #include <linux/linkage.h>
 #include <asm/page.h>
 #include <asm/pgtable.h>
-#include <asm/highmem.h>
 #include <asm/spr-regs.h>
 
        .section        .text.tlbmiss
diff --git a/arch/mips/include/asm/txx9/ndfmc.h b/arch/mips/include/asm/txx9/ndfmc.h
new file mode 100644 (file)
index 0000000..fa67f3d
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ *
+ * (C) Copyright TOSHIBA CORPORATION 2007
+ */
+#ifndef __ASM_TXX9_NDFMC_H
+#define __ASM_TXX9_NDFMC_H
+
+#define NDFMC_PLAT_FLAG_USE_BSPRT      0x01
+#define NDFMC_PLAT_FLAG_NO_RSTR                0x02
+#define NDFMC_PLAT_FLAG_HOLDADD                0x04
+#define NDFMC_PLAT_FLAG_DUMMYWRITE     0x08
+
+struct txx9ndfmc_platform_data {
+       unsigned int shift;
+       unsigned int gbus_clock;
+       unsigned int hold;              /* hold time in nanosecond */
+       unsigned int spw;               /* strobe pulse width in nanosecond */
+       unsigned int flags;
+       unsigned char ch_mask;          /* available channel bitmask */
+       unsigned char wp_mask;          /* write-protect bitmask */
+       unsigned char wide_mask;        /* 16bit-nand bitmask */
+};
+
+void txx9_ndfmc_init(unsigned long baseaddr,
+                    const struct txx9ndfmc_platform_data *plat_data);
+
+#endif /* __ASM_TXX9_NDFMC_H */
index 1acf428..e517899 100644 (file)
 void rbtx4939_prom_init(void);
 void rbtx4939_irq_setup(void);
 
+struct mtd_partition;
+struct map_info;
+struct rbtx4939_flash_data {
+       unsigned int width;
+       unsigned int nr_parts;
+       struct mtd_partition *parts;
+       void (*map_init)(struct map_info *map);
+};
+
 #endif /* __ASM_TXX9_RBTX4939_H */
index 0b06815..cd8bc20 100644 (file)
@@ -291,6 +291,7 @@ int tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot);
 void tx4938_setup_pcierr_irq(void);
 void tx4938_irq_init(void);
 void tx4938_mtd_init(int ch);
+void tx4938_ndfmc_init(unsigned int hold, unsigned int spw);
 
 struct tx4938ide_platform_info {
        /*
index 964ef7e..f02c50b 100644 (file)
@@ -542,5 +542,7 @@ int tx4939_irq(void);
 void tx4939_mtd_init(int ch);
 void tx4939_ata_init(void);
 void tx4939_rtc_init(void);
+void tx4939_ndfmc_init(unsigned int hold, unsigned int spw,
+                      unsigned char ch_mask, unsigned char wide_mask);
 
 #endif /* __ASM_TXX9_TX4939_H */
index a13a08b..8a266c6 100644 (file)
@@ -32,6 +32,7 @@
 #include <asm/txx9/generic.h>
 #include <asm/txx9/pci.h>
 #include <asm/txx9tmr.h>
+#include <asm/txx9/ndfmc.h>
 #ifdef CONFIG_CPU_TX49XX
 #include <asm/txx9/tx4938.h>
 #endif
@@ -691,6 +692,26 @@ void __init txx9_physmap_flash_init(int no, unsigned long addr,
 #endif
 }
 
+void __init txx9_ndfmc_init(unsigned long baseaddr,
+                           const struct txx9ndfmc_platform_data *pdata)
+{
+#if defined(CONFIG_MTD_NAND_TXX9NDFMC) || \
+       defined(CONFIG_MTD_NAND_TXX9NDFMC_MODULE)
+       struct resource res = {
+               .start = baseaddr,
+               .end = baseaddr + 0x1000 - 1,
+               .flags = IORESOURCE_MEM,
+       };
+       struct platform_device *pdev = platform_device_alloc("txx9ndfmc", -1);
+
+       if (!pdev ||
+           platform_device_add_resources(pdev, &res, 1) ||
+           platform_device_add_data(pdev, pdata, sizeof(*pdata)) ||
+           platform_device_add(pdev))
+               platform_device_put(pdev);
+#endif
+}
+
 #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
 static DEFINE_SPINLOCK(txx9_iocled_lock);
 
index 25819ff..f0844f8 100644 (file)
@@ -23,6 +23,7 @@
 #include <asm/txx9tmr.h>
 #include <asm/txx9pio.h>
 #include <asm/txx9/generic.h>
+#include <asm/txx9/ndfmc.h>
 #include <asm/txx9/tx4938.h>
 
 static void __init tx4938_wdr_init(void)
@@ -382,6 +383,26 @@ void __init tx4938_ata_init(unsigned int irq, unsigned int shift, int tune)
                platform_device_put(pdev);
 }
 
+void __init tx4938_ndfmc_init(unsigned int hold, unsigned int spw)
+{
+       struct txx9ndfmc_platform_data plat_data = {
+               .shift = 1,
+               .gbus_clock = txx9_gbus_clock,
+               .hold = hold,
+               .spw = spw,
+               .ch_mask = 1,
+       };
+       unsigned long baseaddr = TX4938_NDFMC_REG & 0xfffffffffULL;
+
+#ifdef __BIG_ENDIAN
+       baseaddr += 4;
+#endif
+       if ((__raw_readq(&tx4938_ccfgptr->pcfg) &
+            (TX4938_PCFG_ATA_SEL|TX4938_PCFG_ISA_SEL|TX4938_PCFG_NDF_SEL)) ==
+           TX4938_PCFG_NDF_SEL)
+               txx9_ndfmc_init(baseaddr, &plat_data);
+}
+
 static void __init tx4938_stop_unused_modules(void)
 {
        __u64 pcfg, rst = 0, ckd = 0;
index 5544096..7a25b57 100644 (file)
@@ -27,6 +27,7 @@
 #include <asm/txx9irq.h>
 #include <asm/txx9tmr.h>
 #include <asm/txx9/generic.h>
+#include <asm/txx9/ndfmc.h>
 #include <asm/txx9/tx4939.h>
 
 static void __init tx4939_wdr_init(void)
@@ -457,6 +458,22 @@ void __init tx4939_rtc_init(void)
        platform_device_register(&rtc_dev);
 }
 
+void __init tx4939_ndfmc_init(unsigned int hold, unsigned int spw,
+                             unsigned char ch_mask, unsigned char wide_mask)
+{
+       struct txx9ndfmc_platform_data plat_data = {
+               .shift = 1,
+               .gbus_clock = txx9_gbus_clock,
+               .hold = hold,
+               .spw = spw,
+               .flags = NDFMC_PLAT_FLAG_NO_RSTR | NDFMC_PLAT_FLAG_HOLDADD |
+                        NDFMC_PLAT_FLAG_DUMMYWRITE,
+               .ch_mask = ch_mask,
+               .wide_mask = wide_mask,
+       };
+       txx9_ndfmc_init(TX4939_NDFMC_REG & 0xfffffffffULL, &plat_data);
+}
+
 static void __init tx4939_stop_unused_modules(void)
 {
        __u64 pcfg, rst = 0, ckd = 0;
index 547ff29..65d13df 100644 (file)
@@ -352,6 +352,8 @@ static void __init rbtx4938_device_init(void)
        rbtx4938_ne_init();
        tx4938_wdt_init();
        rbtx4938_mtd_init();
+       /* TC58DVM82A1FT: tDH=10ns, tWP=tRP=tREADID=35ns */
+       tx4938_ndfmc_init(10, 35);
        tx4938_ata_init(RBTX4938_IRQ_IOC_ATA, 0, 1);
        txx9_iocled_init(RBTX4938_LED_ADDR - IO_BASE, -1, 8, 1, "green", NULL);
 }
index 656603b..011e1e3 100644 (file)
@@ -16,6 +16,9 @@
 #include <linux/leds.h>
 #include <linux/interrupt.h>
 #include <linux/smc91x.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <linux/mtd/map.h>
 #include <asm/reboot.h>
 #include <asm/txx9/generic.h>
 #include <asm/txx9/pci.h>
@@ -282,6 +285,159 @@ static void rbtx4939_7segled_putc(unsigned int pos, unsigned char val)
        __rbtx4939_7segled_putc(pos, val);
 }
 
+#if defined(CONFIG_MTD_RBTX4939) || defined(CONFIG_MTD_RBTX4939_MODULE)
+/* special mapping for boot rom */
+static unsigned long rbtx4939_flash_fixup_ofs(unsigned long ofs)
+{
+       u8 bdipsw = readb(rbtx4939_bdipsw_addr) & 0x0f;
+       unsigned char shift;
+
+       if (bdipsw & 8) {
+               /* BOOT Mode: USER ROM1 / USER ROM2 */
+               shift = bdipsw & 3;
+               /* rotate A[23:22] */
+               return (ofs & ~0xc00000) | ((((ofs >> 22) + shift) & 3) << 22);
+       }
+#ifdef __BIG_ENDIAN
+       if (bdipsw == 0)
+               /* BOOT Mode: Monitor ROM */
+               ofs ^= 0x400000;        /* swap A[22] */
+#endif
+       return ofs;
+}
+
+static map_word rbtx4939_flash_read16(struct map_info *map, unsigned long ofs)
+{
+       map_word r;
+
+       ofs = rbtx4939_flash_fixup_ofs(ofs);
+       r.x[0] = __raw_readw(map->virt + ofs);
+       return r;
+}
+
+static void rbtx4939_flash_write16(struct map_info *map, const map_word datum,
+                                  unsigned long ofs)
+{
+       ofs = rbtx4939_flash_fixup_ofs(ofs);
+       __raw_writew(datum.x[0], map->virt + ofs);
+       mb();   /* see inline_map_write() in mtd/map.h */
+}
+
+static void rbtx4939_flash_copy_from(struct map_info *map, void *to,
+                                    unsigned long from, ssize_t len)
+{
+       u8 bdipsw = readb(rbtx4939_bdipsw_addr) & 0x0f;
+       unsigned char shift;
+       ssize_t curlen;
+
+       from += (unsigned long)map->virt;
+       if (bdipsw & 8) {
+               /* BOOT Mode: USER ROM1 / USER ROM2 */
+               shift = bdipsw & 3;
+               while (len) {
+                       curlen = min_t(unsigned long, len,
+                                    0x400000 - (from & (0x400000 - 1)));
+                       memcpy(to,
+                              (void *)((from & ~0xc00000) |
+                                       ((((from >> 22) + shift) & 3) << 22)),
+                              curlen);
+                       len -= curlen;
+                       from += curlen;
+                       to += curlen;
+               }
+               return;
+       }
+#ifdef __BIG_ENDIAN
+       if (bdipsw == 0) {
+               /* BOOT Mode: Monitor ROM */
+               while (len) {
+                       curlen = min_t(unsigned long, len,
+                                    0x400000 - (from & (0x400000 - 1)));
+                       memcpy(to, (void *)(from ^ 0x400000), curlen);
+                       len -= curlen;
+                       from += curlen;
+                       to += curlen;
+               }
+               return;
+       }
+#endif
+       memcpy(to, (void *)from, len);
+}
+
+static void rbtx4939_flash_map_init(struct map_info *map)
+{
+       map->read = rbtx4939_flash_read16;
+       map->write = rbtx4939_flash_write16;
+       map->copy_from = rbtx4939_flash_copy_from;
+}
+
+static void __init rbtx4939_mtd_init(void)
+{
+       static struct {
+               struct platform_device dev;
+               struct resource res;
+               struct rbtx4939_flash_data data;
+       } pdevs[4];
+       int i;
+       static char names[4][8];
+       static struct mtd_partition parts[4];
+       struct rbtx4939_flash_data *boot_pdata = &pdevs[0].data;
+       u8 bdipsw = readb(rbtx4939_bdipsw_addr) & 0x0f;
+
+       if (bdipsw & 8) {
+               /* BOOT Mode: USER ROM1 / USER ROM2 */
+               boot_pdata->nr_parts = 4;
+               for (i = 0; i < boot_pdata->nr_parts; i++) {
+                       sprintf(names[i], "img%d", 4 - i);
+                       parts[i].name = names[i];
+                       parts[i].size = 0x400000;
+                       parts[i].offset = MTDPART_OFS_NXTBLK;
+               }
+       } else if (bdipsw == 0) {
+               /* BOOT Mode: Monitor ROM */
+               boot_pdata->nr_parts = 2;
+               strcpy(names[0], "big");
+               strcpy(names[1], "little");
+               for (i = 0; i < boot_pdata->nr_parts; i++) {
+                       parts[i].name = names[i];
+                       parts[i].size = 0x400000;
+                       parts[i].offset = MTDPART_OFS_NXTBLK;
+               }
+       } else {
+               /* BOOT Mode: ROM Emulator */
+               boot_pdata->nr_parts = 2;
+               parts[0].name = "boot";
+               parts[0].offset = 0xc00000;
+               parts[0].size = 0x400000;
+               parts[1].name = "user";
+               parts[1].offset = 0;
+               parts[1].size = 0xc00000;
+       }
+       boot_pdata->parts = parts;
+       boot_pdata->map_init = rbtx4939_flash_map_init;
+
+       for (i = 0; i < ARRAY_SIZE(pdevs); i++) {
+               struct resource *r = &pdevs[i].res;
+               struct platform_device *dev = &pdevs[i].dev;
+
+               r->start = 0x1f000000 - i * 0x1000000;
+               r->end = r->start + 0x1000000 - 1;
+               r->flags = IORESOURCE_MEM;
+               pdevs[i].data.width = 2;
+               dev->num_resources = 1;
+               dev->resource = r;
+               dev->id = i;
+               dev->name = "rbtx4939-flash";
+               dev->dev.platform_data = &pdevs[i].data;
+               platform_device_register(dev);
+       }
+}
+#else
+static void __init rbtx4939_mtd_init(void)
+{
+}
+#endif
+
 static void __init rbtx4939_arch_init(void)
 {
        rbtx4939_pci_setup();
@@ -333,6 +489,11 @@ static void __init rbtx4939_device_init(void)
            platform_device_add_data(pdev, &smc_pdata, sizeof(smc_pdata)) ||
            platform_device_add(pdev))
                platform_device_put(pdev);
+       rbtx4939_mtd_init();
+       /* TC58DVM82A1FT: tDH=10ns, tWP=tRP=tREADID=35ns */
+       tx4939_ndfmc_init(10, 35,
+                         (1 << 1) | (1 << 2),
+                         (1 << 2)); /* ch1:8bit, ch2:16bit */
        rbtx4939_led_setup();
        tx4939_wdt_init();
        tx4939_ata_init();
index 28b1a95..19aa723 100644 (file)
                upm@3,0 {
                        #address-cells = <0>;
                        #size-cells = <0>;
-                       compatible = "fsl,upm-nand";
+                       compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand";
                        reg = <3 0x0 0x800>;
                        fsl,upm-addr-offset = <0x10>;
                        fsl,upm-cmd-offset = <0x08>;
+                       /* Micron MT29F8G08FAB multi-chip device */
+                       fsl,upm-addr-line-cs-offsets = <0x0 0x200>;
+                       fsl,upm-wait-flags = <0x5>;
                        chip-delay = <25>; // in micro-seconds
 
                        nand@0 {
 
                                partition@0 {
                                            label = "fs";
-                                           reg = <0x00000000 0x01000000>;
+                                           reg = <0x00000000 0x10000000>;
                                };
                        };
                };
index 826fb62..49145a0 100644 (file)
                upm@3,0 {
                        #address-cells = <0>;
                        #size-cells = <0>;
-                       compatible = "fsl,upm-nand";
+                       compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand";
                        reg = <3 0x0 0x800>;
                        fsl,upm-addr-offset = <0x10>;
                        fsl,upm-cmd-offset = <0x08>;
+                       /* Micron MT29F8G08FAB multi-chip device */
+                       fsl,upm-addr-line-cs-offsets = <0x0 0x200>;
+                       fsl,upm-wait-flags = <0x5>;
                        chip-delay = <25>; // in micro-seconds
 
                        nand@0 {
 
                                partition@0 {
                                            label = "fs";
-                                           reg = <0x00000000 0x01000000>;
+                                           reg = <0x00000000 0x10000000>;
                                };
                        };
                };
index 0494ee5..dceb8d1 100644 (file)
@@ -150,7 +150,7 @@ int fsl_upm_run_pattern(struct fsl_upm *upm, void __iomem *io_base, u32 mar)
 
        spin_lock_irqsave(&fsl_lbc_lock, flags);
 
-       out_be32(&fsl_lbc_regs->mar, mar << (32 - upm->width));
+       out_be32(&fsl_lbc_regs->mar, mar);
 
        switch (upm->width) {
        case 8:
index 5b2196a..4b34082 100644 (file)
@@ -253,6 +253,7 @@ config SMP
 config X86_X2APIC
        bool "Support x2apic"
        depends on X86_LOCAL_APIC && X86_64
+       select INTR_REMAP
        ---help---
          This enables x2apic support on CPUs that have this feature.
 
@@ -1881,7 +1882,6 @@ config DMAR_FLOPPY_WA
 config INTR_REMAP
        bool "Support for Interrupt Remapping (EXPERIMENTAL)"
        depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI && EXPERIMENTAL
-       select X86_X2APIC
        ---help---
          Supports Interrupt remapping for IO-APIC and MSI devices.
          To use x2apic mode in the CPU's which support x2APIC enhancements or
index df8a300..42f2f83 100644 (file)
@@ -107,6 +107,9 @@ extern u32 native_safe_apic_wait_icr_idle(void);
 extern void native_apic_icr_write(u32 low, u32 id);
 extern u64 native_apic_icr_read(void);
 
+#define EIM_8BIT_APIC_ID       0
+#define EIM_32BIT_APIC_ID      1
+
 #ifdef CONFIG_X86_X2APIC
 /*
  * Make previous memory operations globally visible before
index 373cc2b..9d826e4 100644 (file)
@@ -162,10 +162,13 @@ extern int (*ioapic_renumber_irq)(int ioapic, int irq);
 extern void ioapic_init_mappings(void);
 
 #ifdef CONFIG_X86_64
-extern int save_IO_APIC_setup(void);
-extern void mask_IO_APIC_setup(void);
-extern void restore_IO_APIC_setup(void);
-extern void reinit_intr_remapped_IO_APIC(int);
+extern struct IO_APIC_route_entry **alloc_ioapic_entries(void);
+extern void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries);
+extern int save_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries);
+extern void mask_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries);
+extern int restore_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries);
+extern void reinit_intr_remapped_IO_APIC(int intr_remapping,
+       struct IO_APIC_route_entry **ioapic_entries);
 #endif
 
 extern void probe_nr_irqs_gsi(void);
index 85eb8e1..098ec84 100644 (file)
@@ -1304,6 +1304,7 @@ void __init enable_IR_x2apic(void)
 #ifdef CONFIG_INTR_REMAP
        int ret;
        unsigned long flags;
+       struct IO_APIC_route_entry **ioapic_entries = NULL;
 
        if (!cpu_has_x2apic)
                return;
@@ -1334,17 +1335,23 @@ void __init enable_IR_x2apic(void)
                return;
        }
 
-       ret = save_IO_APIC_setup();
+       ioapic_entries = alloc_ioapic_entries();
+       if (!ioapic_entries) {
+               pr_info("Allocate ioapic_entries failed: %d\n", ret);
+               goto end;
+       }
+
+       ret = save_IO_APIC_setup(ioapic_entries);
        if (ret) {
                pr_info("Saving IO-APIC state failed: %d\n", ret);
                goto end;
        }
 
        local_irq_save(flags);
-       mask_IO_APIC_setup();
+       mask_IO_APIC_setup(ioapic_entries);
        mask_8259A();
 
-       ret = enable_intr_remapping(1);
+       ret = enable_intr_remapping(EIM_32BIT_APIC_ID);
 
        if (ret && x2apic_preenabled) {
                local_irq_restore(flags);
@@ -1364,9 +1371,9 @@ end_restore:
                /*
                 * IR enabling failed
                 */
-               restore_IO_APIC_setup();
+               restore_IO_APIC_setup(ioapic_entries);
        else
-               reinit_intr_remapped_IO_APIC(x2apic_preenabled);
+               reinit_intr_remapped_IO_APIC(x2apic_preenabled, ioapic_entries);
 
        unmask_8259A();
        local_irq_restore(flags);
@@ -1379,6 +1386,8 @@ end:
                        pr_info("Enabled Interrupt-remapping\n");
        } else
                pr_err("Failed to enable Interrupt-remapping and x2apic\n");
+       if (ioapic_entries)
+               free_ioapic_entries(ioapic_entries);
 #else
        if (!cpu_has_x2apic)
                return;
@@ -1954,6 +1963,10 @@ static int lapic_suspend(struct sys_device *dev, pm_message_t state)
 
        local_irq_save(flags);
        disable_local_APIC();
+#ifdef CONFIG_INTR_REMAP
+       if (intr_remapping_enabled)
+               disable_intr_remapping();
+#endif
        local_irq_restore(flags);
        return 0;
 }
@@ -1964,15 +1977,41 @@ static int lapic_resume(struct sys_device *dev)
        unsigned long flags;
        int maxlvt;
 
+#ifdef CONFIG_INTR_REMAP
+       int ret;
+       struct IO_APIC_route_entry **ioapic_entries = NULL;
+
        if (!apic_pm_state.active)
                return 0;
 
-       maxlvt = lapic_get_maxlvt();
-
        local_irq_save(flags);
+       if (x2apic) {
+               ioapic_entries = alloc_ioapic_entries();
+               if (!ioapic_entries) {
+                       WARN(1, "Alloc ioapic_entries in lapic resume failed.");
+                       return -ENOMEM;
+               }
+
+               ret = save_IO_APIC_setup(ioapic_entries);
+               if (ret) {
+                       WARN(1, "Saving IO-APIC state failed: %d\n", ret);
+                       free_ioapic_entries(ioapic_entries);
+                       return ret;
+               }
+
+               mask_IO_APIC_setup(ioapic_entries);
+               mask_8259A();
+               enable_x2apic();
+       }
+#else
+       if (!apic_pm_state.active)
+               return 0;
 
+       local_irq_save(flags);
        if (x2apic)
                enable_x2apic();
+#endif
+
        else {
                /*
                 * Make sure the APICBASE points to the right address
@@ -1986,6 +2025,7 @@ static int lapic_resume(struct sys_device *dev)
                wrmsr(MSR_IA32_APICBASE, l, h);
        }
 
+       maxlvt = lapic_get_maxlvt();
        apic_write(APIC_LVTERR, ERROR_APIC_VECTOR | APIC_LVT_MASKED);
        apic_write(APIC_ID, apic_pm_state.apic_id);
        apic_write(APIC_DFR, apic_pm_state.apic_dfr);
@@ -2009,8 +2049,20 @@ static int lapic_resume(struct sys_device *dev)
        apic_write(APIC_ESR, 0);
        apic_read(APIC_ESR);
 
+#ifdef CONFIG_INTR_REMAP
+       if (intr_remapping_enabled)
+               reenable_intr_remapping(EIM_32BIT_APIC_ID);
+
+       if (x2apic) {
+               unmask_8259A();
+               restore_IO_APIC_setup(ioapic_entries);
+               free_ioapic_entries(ioapic_entries);
+       }
+#endif
+
        local_irq_restore(flags);
 
+
        return 0;
 }
 
@@ -2048,7 +2100,9 @@ static int __init init_lapic_sysfs(void)
                error = sysdev_register(&device_lapic);
        return error;
 }
-device_initcall(init_lapic_sysfs);
+
+/* local apic needs to resume before other devices access its registers. */
+core_initcall(init_lapic_sysfs);
 
 #else  /* CONFIG_PM */
 
index 1bb5c6c..767fe7e 100644 (file)
@@ -851,63 +851,74 @@ __setup("pirq=", ioapic_pirq_setup);
 #endif /* CONFIG_X86_32 */
 
 #ifdef CONFIG_INTR_REMAP
-/* I/O APIC RTE contents at the OS boot up */
-static struct IO_APIC_route_entry *early_ioapic_entries[MAX_IO_APICS];
+struct IO_APIC_route_entry **alloc_ioapic_entries(void)
+{
+       int apic;
+       struct IO_APIC_route_entry **ioapic_entries;
+
+       ioapic_entries = kzalloc(sizeof(*ioapic_entries) * nr_ioapics,
+                               GFP_ATOMIC);
+       if (!ioapic_entries)
+               return 0;
+
+       for (apic = 0; apic < nr_ioapics; apic++) {
+               ioapic_entries[apic] =
+                       kzalloc(sizeof(struct IO_APIC_route_entry) *
+                               nr_ioapic_registers[apic], GFP_ATOMIC);
+               if (!ioapic_entries[apic])
+                       goto nomem;
+       }
+
+       return ioapic_entries;
+
+nomem:
+       while (--apic >= 0)
+               kfree(ioapic_entries[apic]);
+       kfree(ioapic_entries);
+
+       return 0;
+}
 
 /*
  * Saves all the IO-APIC RTE's
  */
-int save_IO_APIC_setup(void)
+int save_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries)
 {
-       union IO_APIC_reg_01 reg_01;
-       unsigned long flags;
        int apic, pin;
 
-       /*
-        * The number of IO-APIC IRQ registers (== #pins):
-        */
-       for (apic = 0; apic < nr_ioapics; apic++) {
-               spin_lock_irqsave(&ioapic_lock, flags);
-               reg_01.raw = io_apic_read(apic, 1);
-               spin_unlock_irqrestore(&ioapic_lock, flags);
-               nr_ioapic_registers[apic] = reg_01.bits.entries+1;
-       }
+       if (!ioapic_entries)
+               return -ENOMEM;
 
        for (apic = 0; apic < nr_ioapics; apic++) {
-               early_ioapic_entries[apic] =
-                       kzalloc(sizeof(struct IO_APIC_route_entry) *
-                               nr_ioapic_registers[apic], GFP_KERNEL);
-               if (!early_ioapic_entries[apic])
-                       goto nomem;
-       }
+               if (!ioapic_entries[apic])
+                       return -ENOMEM;
 
-       for (apic = 0; apic < nr_ioapics; apic++)
                for (pin = 0; pin < nr_ioapic_registers[apic]; pin++)
-                       early_ioapic_entries[apic][pin] =
+                       ioapic_entries[apic][pin] =
                                ioapic_read_entry(apic, pin);
+       }
 
        return 0;
-
-nomem:
-       while (apic >= 0)
-               kfree(early_ioapic_entries[apic--]);
-       memset(early_ioapic_entries, 0,
-               ARRAY_SIZE(early_ioapic_entries));
-
-       return -ENOMEM;
 }
 
-void mask_IO_APIC_setup(void)
+/*
+ * Mask all IO APIC entries.
+ */
+void mask_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries)
 {
        int apic, pin;
 
+       if (!ioapic_entries)
+               return;
+
        for (apic = 0; apic < nr_ioapics; apic++) {
-               if (!early_ioapic_entries[apic])
+               if (!ioapic_entries[apic])
                        break;
+
                for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) {
                        struct IO_APIC_route_entry entry;
 
-                       entry = early_ioapic_entries[apic][pin];
+                       entry = ioapic_entries[apic][pin];
                        if (!entry.mask) {
                                entry.mask = 1;
                                ioapic_write_entry(apic, pin, entry);
@@ -916,22 +927,30 @@ void mask_IO_APIC_setup(void)
        }
 }
 
-void restore_IO_APIC_setup(void)
+/*
+ * Restore IO APIC entries which was saved in ioapic_entries.
+ */
+int restore_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries)
 {
        int apic, pin;
 
+       if (!ioapic_entries)
+               return -ENOMEM;
+
        for (apic = 0; apic < nr_ioapics; apic++) {
-               if (!early_ioapic_entries[apic])
-                       break;
+               if (!ioapic_entries[apic])
+                       return -ENOMEM;
+
                for (pin = 0; pin < nr_ioapic_registers[apic]; pin++)
                        ioapic_write_entry(apic, pin,
-                                          early_ioapic_entries[apic][pin]);
-               kfree(early_ioapic_entries[apic]);
-               early_ioapic_entries[apic] = NULL;
+                                       ioapic_entries[apic][pin]);
        }
+       return 0;
 }
 
-void reinit_intr_remapped_IO_APIC(int intr_remapping)
+void reinit_intr_remapped_IO_APIC(int intr_remapping,
+       struct IO_APIC_route_entry **ioapic_entries)
+
 {
        /*
         * for now plain restore of previous settings.
@@ -940,7 +959,17 @@ void reinit_intr_remapped_IO_APIC(int intr_remapping)
         * table entries. for now, do a plain restore, and wait for
         * the setup_IO_APIC_irqs() to do proper initialization.
         */
-       restore_IO_APIC_setup();
+       restore_IO_APIC_setup(ioapic_entries);
+}
+
+void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries)
+{
+       int apic;
+
+       for (apic = 0; apic < nr_ioapics; apic++)
+               kfree(ioapic_entries[apic]);
+
+       kfree(ioapic_entries);
 }
 #endif
 
@@ -2495,7 +2524,7 @@ static void irq_complete_move(struct irq_desc **descp)
 static inline void irq_complete_move(struct irq_desc **descp) {}
 #endif
 
-#ifdef CONFIG_INTR_REMAP
+#ifdef CONFIG_X86_X2APIC
 static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg)
 {
        int apic, pin;
@@ -2540,7 +2569,6 @@ static void ack_x2apic_edge(unsigned int irq)
 {
        ack_x2APIC_irq();
 }
-
 #endif
 
 static void ack_apic_edge(unsigned int irq)
@@ -2651,6 +2679,26 @@ static void ack_apic_level(unsigned int irq)
 #endif
 }
 
+#ifdef CONFIG_INTR_REMAP
+static void ir_ack_apic_edge(unsigned int irq)
+{
+#ifdef CONFIG_X86_X2APIC
+       if (x2apic_enabled())
+               return ack_x2apic_edge(irq);
+#endif
+       return ack_apic_edge(irq);
+}
+
+static void ir_ack_apic_level(unsigned int irq)
+{
+#ifdef CONFIG_X86_X2APIC
+       if (x2apic_enabled())
+               return ack_x2apic_level(irq);
+#endif
+       return ack_apic_level(irq);
+}
+#endif /* CONFIG_INTR_REMAP */
+
 static struct irq_chip ioapic_chip __read_mostly = {
        .name           = "IO-APIC",
        .startup        = startup_ioapic_irq,
@@ -2670,8 +2718,8 @@ static struct irq_chip ir_ioapic_chip __read_mostly = {
        .mask           = mask_IO_APIC_irq,
        .unmask         = unmask_IO_APIC_irq,
 #ifdef CONFIG_INTR_REMAP
-       .ack            = ack_x2apic_edge,
-       .eoi            = ack_x2apic_level,
+       .ack            = ir_ack_apic_edge,
+       .eoi            = ir_ack_apic_level,
 #ifdef CONFIG_SMP
        .set_affinity   = set_ir_ioapic_affinity_irq,
 #endif
@@ -3397,7 +3445,7 @@ static struct irq_chip msi_ir_chip = {
        .unmask         = unmask_msi_irq,
        .mask           = mask_msi_irq,
 #ifdef CONFIG_INTR_REMAP
-       .ack            = ack_x2apic_edge,
+       .ack            = ir_ack_apic_edge,
 #ifdef CONFIG_SMP
        .set_affinity   = ir_set_msi_irq_affinity,
 #endif
index 996ed90..2557280 100644 (file)
@@ -484,11 +484,11 @@ static int blk_init_free_list(struct request_queue *q)
 {
        struct request_list *rl = &q->rq;
 
-       rl->count[READ] = rl->count[WRITE] = 0;
-       rl->starved[READ] = rl->starved[WRITE] = 0;
+       rl->count[BLK_RW_SYNC] = rl->count[BLK_RW_ASYNC] = 0;
+       rl->starved[BLK_RW_SYNC] = rl->starved[BLK_RW_ASYNC] = 0;
        rl->elvpriv = 0;
-       init_waitqueue_head(&rl->wait[READ]);
-       init_waitqueue_head(&rl->wait[WRITE]);
+       init_waitqueue_head(&rl->wait[BLK_RW_SYNC]);
+       init_waitqueue_head(&rl->wait[BLK_RW_ASYNC]);
 
        rl->rq_pool = mempool_create_node(BLKDEV_MIN_RQ, mempool_alloc_slab,
                                mempool_free_slab, request_cachep, q->node);
@@ -699,18 +699,18 @@ static void ioc_set_batching(struct request_queue *q, struct io_context *ioc)
        ioc->last_waited = jiffies;
 }
 
-static void __freed_request(struct request_queue *q, int rw)
+static void __freed_request(struct request_queue *q, int sync)
 {
        struct request_list *rl = &q->rq;
 
-       if (rl->count[rw] < queue_congestion_off_threshold(q))
-               blk_clear_queue_congested(q, rw);
+       if (rl->count[sync] < queue_congestion_off_threshold(q))
+               blk_clear_queue_congested(q, sync);
 
-       if (rl->count[rw] + 1 <= q->nr_requests) {
-               if (waitqueue_active(&rl->wait[rw]))
-                       wake_up(&rl->wait[rw]);
+       if (rl->count[sync] + 1 <= q->nr_requests) {
+               if (waitqueue_active(&rl->wait[sync]))
+                       wake_up(&rl->wait[sync]);
 
-               blk_clear_queue_full(q, rw);
+               blk_clear_queue_full(q, sync);
        }
 }
 
@@ -718,18 +718,18 @@ static void __freed_request(struct request_queue *q, int rw)
  * A request has just been released.  Account for it, update the full and
  * congestion status, wake up any waiters.   Called under q->queue_lock.
  */
-static void freed_request(struct request_queue *q, int rw, int priv)
+static void freed_request(struct request_queue *q, int sync, int priv)
 {
        struct request_list *rl = &q->rq;
 
-       rl->count[rw]--;
+       rl->count[sync]--;
        if (priv)
                rl->elvpriv--;
 
-       __freed_request(q, rw);
+       __freed_request(q, sync);
 
-       if (unlikely(rl->starved[rw ^ 1]))
-               __freed_request(q, rw ^ 1);
+       if (unlikely(rl->starved[sync ^ 1]))
+               __freed_request(q, sync ^ 1);
 }
 
 /*
@@ -743,15 +743,15 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
        struct request *rq = NULL;
        struct request_list *rl = &q->rq;
        struct io_context *ioc = NULL;
-       const int rw = rw_flags & 0x01;
+       const bool is_sync = rw_is_sync(rw_flags) != 0;
        int may_queue, priv;
 
        may_queue = elv_may_queue(q, rw_flags);
        if (may_queue == ELV_MQUEUE_NO)
                goto rq_starved;
 
-       if (rl->count[rw]+1 >= queue_congestion_on_threshold(q)) {
-               if (rl->count[rw]+1 >= q->nr_requests) {
+       if (rl->count[is_sync]+1 >= queue_congestion_on_threshold(q)) {
+               if (rl->count[is_sync]+1 >= q->nr_requests) {
                        ioc = current_io_context(GFP_ATOMIC, q->node);
                        /*
                         * The queue will fill after this allocation, so set
@@ -759,9 +759,9 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
                         * This process will be allowed to complete a batch of
                         * requests, others will be blocked.
                         */
-                       if (!blk_queue_full(q, rw)) {
+                       if (!blk_queue_full(q, is_sync)) {
                                ioc_set_batching(q, ioc);
-                               blk_set_queue_full(q, rw);
+                               blk_set_queue_full(q, is_sync);
                        } else {
                                if (may_queue != ELV_MQUEUE_MUST
                                                && !ioc_batching(q, ioc)) {
@@ -774,7 +774,7 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
                                }
                        }
                }
-               blk_set_queue_congested(q, rw);
+               blk_set_queue_congested(q, is_sync);
        }
 
        /*
@@ -782,11 +782,11 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
         * limit of requests, otherwise we could have thousands of requests
         * allocated with any setting of ->nr_requests
         */
-       if (rl->count[rw] >= (3 * q->nr_requests / 2))
+       if (rl->count[is_sync] >= (3 * q->nr_requests / 2))
                goto out;
 
-       rl->count[rw]++;
-       rl->starved[rw] = 0;
+       rl->count[is_sync]++;
+       rl->starved[is_sync] = 0;
 
        priv = !test_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
        if (priv)
@@ -804,7 +804,7 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
                 * wait queue, but this is pretty rare.
                 */
                spin_lock_irq(q->queue_lock);
-               freed_request(q, rw, priv);
+               freed_request(q, is_sync, priv);
 
                /*
                 * in the very unlikely event that allocation failed and no
@@ -814,8 +814,8 @@ static struct request *get_request(struct request_queue *q, int rw_flags,
                 * rq mempool into READ and WRITE
                 */
 rq_starved:
-               if (unlikely(rl->count[rw] == 0))
-                       rl->starved[rw] = 1;
+               if (unlikely(rl->count[is_sync] == 0))
+                       rl->starved[is_sync] = 1;
 
                goto out;
        }
@@ -829,7 +829,7 @@ rq_starved:
        if (ioc_batching(q, ioc))
                ioc->nr_batch_requests--;
 
-       trace_block_getrq(q, bio, rw);
+       trace_block_getrq(q, bio, rw_flags & 1);
 out:
        return rq;
 }
@@ -843,7 +843,7 @@ out:
 static struct request *get_request_wait(struct request_queue *q, int rw_flags,
                                        struct bio *bio)
 {
-       const int rw = rw_flags & 0x01;
+       const bool is_sync = rw_is_sync(rw_flags) != 0;
        struct request *rq;
 
        rq = get_request(q, rw_flags, bio, GFP_NOIO);
@@ -852,10 +852,10 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
                struct io_context *ioc;
                struct request_list *rl = &q->rq;
 
-               prepare_to_wait_exclusive(&rl->wait[rw], &wait,
+               prepare_to_wait_exclusive(&rl->wait[is_sync], &wait,
                                TASK_UNINTERRUPTIBLE);
 
-               trace_block_sleeprq(q, bio, rw);
+               trace_block_sleeprq(q, bio, rw_flags & 1);
 
                __generic_unplug_device(q);
                spin_unlock_irq(q->queue_lock);
@@ -871,7 +871,7 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
                ioc_set_batching(q, ioc);
 
                spin_lock_irq(q->queue_lock);
-               finish_wait(&rl->wait[rw], &wait);
+               finish_wait(&rl->wait[is_sync], &wait);
 
                rq = get_request(q, rw_flags, bio, GFP_NOIO);
        };
@@ -1070,14 +1070,14 @@ void __blk_put_request(struct request_queue *q, struct request *req)
         * it didn't come out of our reserved rq pools
         */
        if (req->cmd_flags & REQ_ALLOCED) {
-               int rw = rq_data_dir(req);
+               int is_sync = rq_is_sync(req) != 0;
                int priv = req->cmd_flags & REQ_ELVPRIV;
 
                BUG_ON(!list_empty(&req->queuelist));
                BUG_ON(!hlist_unhashed(&req->hash));
 
                blk_free_request(q, req);
-               freed_request(q, rw, priv);
+               freed_request(q, is_sync, priv);
        }
 }
 EXPORT_SYMBOL_GPL(__blk_put_request);
@@ -1128,6 +1128,8 @@ void init_request_from_bio(struct request *req, struct bio *bio)
                req->cmd_flags |= REQ_UNPLUG;
        if (bio_rw_meta(bio))
                req->cmd_flags |= REQ_RW_META;
+       if (bio_noidle(bio))
+               req->cmd_flags |= REQ_NOIDLE;
 
        req->errors = 0;
        req->hard_sector = req->sector = bio->bi_sector;
@@ -1136,6 +1138,15 @@ void init_request_from_bio(struct request *req, struct bio *bio)
        blk_rq_bio_prep(req->q, req, bio);
 }
 
+/*
+ * Only disabling plugging for non-rotational devices if it does tagging
+ * as well, otherwise we do need the proper merging
+ */
+static inline bool queue_should_plug(struct request_queue *q)
+{
+       return !(blk_queue_nonrot(q) && blk_queue_tagged(q));
+}
+
 static int __make_request(struct request_queue *q, struct bio *bio)
 {
        struct request *req;
@@ -1242,11 +1253,11 @@ get_rq:
        if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags) ||
            bio_flagged(bio, BIO_CPU_AFFINE))
                req->cpu = blk_cpu_to_group(smp_processor_id());
-       if (!blk_queue_nonrot(q) && elv_queue_empty(q))
+       if (queue_should_plug(q) && elv_queue_empty(q))
                blk_plug_device(q);
        add_request(q, req);
 out:
-       if (unplug || blk_queue_nonrot(q))
+       if (unplug || !queue_should_plug(q))
                __generic_unplug_device(q);
        spin_unlock_irq(q->queue_lock);
        return 0;
index e29ddfc..3ff9bba 100644 (file)
@@ -48,28 +48,28 @@ queue_requests_store(struct request_queue *q, const char *page, size_t count)
        q->nr_requests = nr;
        blk_queue_congestion_threshold(q);
 
-       if (rl->count[READ] >= queue_congestion_on_threshold(q))
-               blk_set_queue_congested(q, READ);
-       else if (rl->count[READ] < queue_congestion_off_threshold(q))
-               blk_clear_queue_congested(q, READ);
-
-       if (rl->count[WRITE] >= queue_congestion_on_threshold(q))
-               blk_set_queue_congested(q, WRITE);
-       else if (rl->count[WRITE] < queue_congestion_off_threshold(q))
-               blk_clear_queue_congested(q, WRITE);
-
-       if (rl->count[READ] >= q->nr_requests) {
-               blk_set_queue_full(q, READ);
-       } else if (rl->count[READ]+1 <= q->nr_requests) {
-               blk_clear_queue_full(q, READ);
-               wake_up(&rl->wait[READ]);
+       if (rl->count[BLK_RW_SYNC] >= queue_congestion_on_threshold(q))
+               blk_set_queue_congested(q, BLK_RW_SYNC);
+       else if (rl->count[BLK_RW_SYNC] < queue_congestion_off_threshold(q))
+               blk_clear_queue_congested(q, BLK_RW_SYNC);
+
+       if (rl->count[BLK_RW_ASYNC] >= queue_congestion_on_threshold(q))
+               blk_set_queue_congested(q, BLK_RW_ASYNC);
+       else if (rl->count[BLK_RW_ASYNC] < queue_congestion_off_threshold(q))
+               blk_clear_queue_congested(q, BLK_RW_ASYNC);
+
+       if (rl->count[BLK_RW_SYNC] >= q->nr_requests) {
+               blk_set_queue_full(q, BLK_RW_SYNC);
+       } else if (rl->count[BLK_RW_SYNC]+1 <= q->nr_requests) {
+               blk_clear_queue_full(q, BLK_RW_SYNC);
+               wake_up(&rl->wait[BLK_RW_SYNC]);
        }
 
-       if (rl->count[WRITE] >= q->nr_requests) {
-               blk_set_queue_full(q, WRITE);
-       } else if (rl->count[WRITE]+1 <= q->nr_requests) {
-               blk_clear_queue_full(q, WRITE);
-               wake_up(&rl->wait[WRITE]);
+       if (rl->count[BLK_RW_ASYNC] >= q->nr_requests) {
+               blk_set_queue_full(q, BLK_RW_ASYNC);
+       } else if (rl->count[BLK_RW_ASYNC]+1 <= q->nr_requests) {
+               blk_clear_queue_full(q, BLK_RW_ASYNC);
+               wake_up(&rl->wait[BLK_RW_ASYNC]);
        }
        spin_unlock_irq(q->queue_lock);
        return ret;
index 664ebfd..9e80934 100644 (file)
@@ -1992,8 +1992,10 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
                }
                if (cfq_slice_used(cfqq) || cfq_class_idle(cfqq))
                        cfq_slice_expired(cfqd, 1);
-               else if (sync && RB_EMPTY_ROOT(&cfqq->sort_list))
+               else if (sync && !rq_noidle(rq) &&
+                        RB_EMPTY_ROOT(&cfqq->sort_list)) {
                        cfq_arm_slice_timer(cfqd);
+               }
        }
 
        if (!cfqd->rq_in_driver)
index 98259ed..ca6788a 100644 (file)
@@ -677,7 +677,7 @@ void elv_insert(struct request_queue *q, struct request *rq, int where)
        }
 
        if (unplug_it && blk_queue_plugged(q)) {
-               int nrq = q->rq.count[READ] + q->rq.count[WRITE]
+               int nrq = q->rq.count[BLK_RW_SYNC] + q->rq.count[BLK_RW_ASYNC]
                        - q->in_flight;
 
                if (nrq >= q->unplug_thresh)
index 05674fe..73a0765 100644 (file)
@@ -75,6 +75,7 @@ MODULE_DEVICE_TABLE(pci, applicom_pci_tbl);
 MODULE_AUTHOR("David Woodhouse & Applicom International");
 MODULE_DESCRIPTION("Driver for Applicom Profibus card");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS_MISCDEV(AC_MINOR);
 
 MODULE_SUPPORTED_DEVICE("ac");
 
index 272db0e..1fdb9f6 100644 (file)
 #include <linux/spinlock.h>
 #include <linux/bitops.h>
 #include <linux/firmware.h>
+#include <linux/device.h>
 
 #include <asm/system.h>
 #include <linux/io.h>
@@ -5408,3 +5409,4 @@ module_exit(cy_cleanup_module);
 
 MODULE_LICENSE("GPL");
 MODULE_VERSION(CY_VERSION);
+MODULE_ALIAS_CHARDEV_MAJOR(CYCLADES_MAJOR);
index 24aa6e8..a59eac5 100644 (file)
@@ -925,6 +925,7 @@ static void isicom_shutdown_port(struct isi_port *port)
                if (!card->count)
                        isicom_shutdown_board(card);
        }
+       tty_kref_put(tty);
 }
 
 static void isicom_flush_buffer(struct tty_struct *tty)
index 8b0da97..4a4cab7 100644 (file)
@@ -1486,11 +1486,11 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle,
        }
 
        if (!handle) /* nothing else to do */
-               return 0;
+               goto put;
 
        intr = readw(ip); /* port irq status */
        if (intr == 0)
-               return 0;
+               goto put;
 
        writew(0, ip); /* ACK port */
        ofsAddr = p->tableAddr;
@@ -1499,16 +1499,17 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle,
                                ofsAddr + HostStat);
 
        if (!inited)
-               return 0;
+               goto put;
 
        if (tty && (intr & IntrBreak) && !I_IGNBRK(tty)) { /* BREAK */
                tty_insert_flip_char(tty, 0, TTY_BREAK);
                tty_schedule_flip(tty);
        }
-       tty_kref_put(tty);
 
        if (intr & IntrLine)
                moxa_new_dcdstate(p, readb(ofsAddr + FlagStat) & DCD_state);
+put:
+       tty_kref_put(tty);
 
        return 0;
 }
index 402c9f2..a420e8d 100644 (file)
@@ -820,7 +820,6 @@ static void mxser_check_modem_status(struct tty_struct *tty,
                        wake_up_interruptible(&port->port.open_wait);
        }
 
-       tty = tty_port_tty_get(&port->port);
        if (port->port.flags & ASYNC_CTS_FLOW) {
                if (tty->hw_stopped) {
                        if (status & UART_MSR_CTS) {
index 2e8a6ee..ce81da5 100644 (file)
@@ -333,7 +333,7 @@ void rio_copy_to_card(void *from, void __iomem *to, int len)
 
 int rio_minor(struct tty_struct *tty)
 {
-       return tty->index + (tty->driver == rio_driver) ? 0 : 256;
+       return tty->index + ((tty->driver == rio_driver) ? 0 : 256);
 }
 
 static int rio_set_real_termios(void *ptr)
index 9af8d74..2176604 100644 (file)
@@ -48,6 +48,7 @@
 #include <linux/delay.h>
 #include <linux/tty_flip.h>
 #include <linux/spinlock.h>
+#include <linux/device.h>
 
 #include <linux/uaccess.h>
 
@@ -1524,6 +1525,7 @@ module_param(iobase2, int, 0);
 module_param(iobase3, int, 0);
 
 MODULE_LICENSE("GPL");
+MODULE_ALIAS_CHARDEV_MAJOR(RISCOM8_NORMAL_MAJOR);
 #endif /* MODULE */
 
 /*
index 3c67c3d..e72be41 100644 (file)
@@ -2365,3 +2365,4 @@ module_init(specialix_init_module);
 module_exit(specialix_exit_module);
 
 MODULE_LICENSE("GPL");
+MODULE_ALIAS_CHARDEV_MAJOR(SPECIALIX_NORMAL_MAJOR);
index b788579..7b2ce4a 100644 (file)
@@ -14,8 +14,4 @@ config I2C_ALGOPCF
 config I2C_ALGOPCA
        tristate "I2C PCA 9564 interfaces"
 
-config I2C_ALGO_SGI
-       tristate
-       depends on SGI_IP22 || SGI_IP32 || X86_VISWS
-
 endmenu
index cac1051..18b3e96 100644 (file)
@@ -5,7 +5,6 @@
 obj-$(CONFIG_I2C_ALGOBIT)      += i2c-algo-bit.o
 obj-$(CONFIG_I2C_ALGOPCF)      += i2c-algo-pcf.o
 obj-$(CONFIG_I2C_ALGOPCA)      += i2c-algo-pca.o
-obj-$(CONFIG_I2C_ALGO_SGI)     += i2c-algo-sgi.o
 
 ifeq ($(CONFIG_I2C_DEBUG_ALGO),y)
 EXTRA_CFLAGS += -DDEBUG
diff --git a/drivers/i2c/algos/i2c-algo-sgi.c b/drivers/i2c/algos/i2c-algo-sgi.c
deleted file mode 100644 (file)
index 6eaf145..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * i2c-algo-sgi.c: i2c driver algorithm used by the VINO (SGI Indy) and
- * MACE (SGI O2) chips.
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License version 2 as published by the Free Software Foundation.
- *
- * Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/errno.h>
-#include <linux/delay.h>
-
-#include <linux/i2c.h>
-#include <linux/i2c-algo-sgi.h>
-
-
-#define SGI_I2C_FORCE_IDLE     (0 << 0)
-#define SGI_I2C_NOT_IDLE       (1 << 0)
-#define SGI_I2C_WRITE          (0 << 1)
-#define SGI_I2C_READ           (1 << 1)
-#define SGI_I2C_RELEASE_BUS    (0 << 2)
-#define SGI_I2C_HOLD_BUS       (1 << 2)
-#define SGI_I2C_XFER_DONE      (0 << 4)
-#define SGI_I2C_XFER_BUSY      (1 << 4)
-#define SGI_I2C_ACK            (0 << 5)
-#define SGI_I2C_NACK           (1 << 5)
-#define SGI_I2C_BUS_OK         (0 << 7)
-#define SGI_I2C_BUS_ERR                (1 << 7)
-
-#define get_control()          adap->getctrl(adap->data)
-#define set_control(val)       adap->setctrl(adap->data, val)
-#define read_data()            adap->rdata(adap->data)
-#define write_data(val)                adap->wdata(adap->data, val)
-
-
-static int wait_xfer_done(struct i2c_algo_sgi_data *adap)
-{
-       int i;
-
-       for (i = 0; i < adap->xfer_timeout; i++) {
-               if ((get_control() & SGI_I2C_XFER_BUSY) == 0)
-                       return 0;
-               udelay(1);
-       }
-
-       return -ETIMEDOUT;
-}
-
-static int wait_ack(struct i2c_algo_sgi_data *adap)
-{
-       int i;
-
-       if (wait_xfer_done(adap))
-               return -ETIMEDOUT;
-       for (i = 0; i < adap->ack_timeout; i++) {
-               if ((get_control() & SGI_I2C_NACK) == 0)
-                       return 0;
-               udelay(1);
-       }
-
-       return -ETIMEDOUT;
-}
-
-static int force_idle(struct i2c_algo_sgi_data *adap)
-{
-       int i;
-
-       set_control(SGI_I2C_FORCE_IDLE);
-       for (i = 0; i < adap->xfer_timeout; i++) {
-               if ((get_control() & SGI_I2C_NOT_IDLE) == 0)
-                       goto out;
-               udelay(1);
-       }
-       return -ETIMEDOUT;
-out:
-       if (get_control() & SGI_I2C_BUS_ERR)
-               return -EIO;
-       return 0;
-}
-
-static int do_address(struct i2c_algo_sgi_data *adap, unsigned int addr,
-                     int rd)
-{
-       if (rd)
-               set_control(SGI_I2C_NOT_IDLE);
-       /* Check if bus is idle, eventually force it to do so */
-       if (get_control() & SGI_I2C_NOT_IDLE)
-               if (force_idle(adap))
-                       return -EIO;
-       /* Write out the i2c chip address and specify operation */
-       set_control(SGI_I2C_HOLD_BUS | SGI_I2C_WRITE | SGI_I2C_NOT_IDLE);
-       if (rd)
-               addr |= 1;
-       write_data(addr);
-       if (wait_ack(adap))
-               return -EIO;
-       return 0;
-}
-
-static int i2c_read(struct i2c_algo_sgi_data *adap, unsigned char *buf,
-                   unsigned int len)
-{
-       int i;
-
-       set_control(SGI_I2C_HOLD_BUS | SGI_I2C_READ | SGI_I2C_NOT_IDLE);
-       for (i = 0; i < len; i++) {
-               if (wait_xfer_done(adap))
-                       return -EIO;
-               buf[i] = read_data();
-       }
-       set_control(SGI_I2C_RELEASE_BUS | SGI_I2C_FORCE_IDLE);
-
-       return 0;
-
-}
-
-static int i2c_write(struct i2c_algo_sgi_data *adap, unsigned char *buf,
-                    unsigned int len)
-{
-       int i;
-
-       /* We are already in write state */
-       for (i = 0; i < len; i++) {
-               write_data(buf[i]);
-               if (wait_ack(adap))
-                       return -EIO;
-       }
-       return 0;
-}
-
-static int sgi_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs,
-                   int num)
-{
-       struct i2c_algo_sgi_data *adap = i2c_adap->algo_data;
-       struct i2c_msg *p;
-       int i, err = 0;
-
-       for (i = 0; !err && i < num; i++) {
-               p = &msgs[i];
-               err = do_address(adap, p->addr, p->flags & I2C_M_RD);
-               if (err || !p->len)
-                       continue;
-               if (p->flags & I2C_M_RD)
-                       err = i2c_read(adap, p->buf, p->len);
-               else
-                       err = i2c_write(adap, p->buf, p->len);
-       }
-
-       return (err < 0) ? err : i;
-}
-
-static u32 sgi_func(struct i2c_adapter *adap)
-{
-       return I2C_FUNC_SMBUS_EMUL;
-}
-
-static const struct i2c_algorithm sgi_algo = {
-       .master_xfer    = sgi_xfer,
-       .functionality  = sgi_func,
-};
-
-/*
- * registering functions to load algorithms at runtime
- */
-int i2c_sgi_add_bus(struct i2c_adapter *adap)
-{
-       adap->algo = &sgi_algo;
-
-       return i2c_add_adapter(adap);
-}
-EXPORT_SYMBOL(i2c_sgi_add_bus);
-
-MODULE_AUTHOR("Ladislav Michl <ladis@linux-mips.org>");
-MODULE_DESCRIPTION("I2C-Bus SGI algorithm");
-MODULE_LICENSE("GPL");
index 831ddce..781c404 100644 (file)
@@ -821,7 +821,7 @@ static void read_iso_callback(struct urb *urb)
                /* pass URB to tasklet */
                ubc->isoindone = urb;
                ubc->isoinstatus = status;
-               tasklet_schedule(&ubc->rcvd_tasklet);
+               tasklet_hi_schedule(&ubc->rcvd_tasklet);
        } else {
                /* tasklet still busy, drop data and resubmit URB */
                ubc->loststatus = status;
@@ -888,7 +888,7 @@ static void write_iso_callback(struct urb *urb)
        ubc->isooutovfl = ubc->isooutdone;
        ubc->isooutdone = ucx;
        spin_unlock_irqrestore(&ubc->isooutlock, flags);
-       tasklet_schedule(&ubc->sent_tasklet);
+       tasklet_hi_schedule(&ubc->sent_tasklet);
 }
 
 /* starturbs
index 311e7ca..820a309 100644 (file)
@@ -193,7 +193,9 @@ static void if_close(struct tty_struct *tty, struct file *filp)
 
        mutex_lock(&cs->mutex);
 
-       if (!cs->open_count)
+       if (!cs->connected)
+               gig_dbg(DEBUG_IF, "not connected");     /* nothing to do */
+       else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
        else {
                if (!--cs->open_count) {
@@ -228,7 +230,10 @@ static int if_ioctl(struct tty_struct *tty, struct file *file,
        if (mutex_lock_interruptible(&cs->mutex))
                return -ERESTARTSYS; // FIXME -EINTR?
 
-       if (!cs->open_count)
+       if (!cs->connected) {
+               gig_dbg(DEBUG_IF, "not connected");
+               retval = -ENODEV;
+       } else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
        else {
                retval = 0;
@@ -248,13 +253,6 @@ static int if_ioctl(struct tty_struct *tty, struct file *file,
                                retval = put_user(int_arg, (int __user *) arg);
                        break;
                case GIGASET_BRKCHARS:
-                       //FIXME test if MS_LOCKED
-                       if (!cs->conne