aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/DocBook/device-drivers.tmpl10
-rw-r--r--Documentation/devicetree/bindings/arm/marvell,kirkwood.txt97
-rw-r--r--Documentation/devicetree/bindings/i2c/trivial-devices.txt16
-rw-r--r--Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt2
-rw-r--r--Documentation/devicetree/bindings/vendor-prefixes.txt18
-rw-r--r--MAINTAINERS2
-rw-r--r--arch/arm/configs/bcm_defconfig2
-rw-r--r--arch/ia64/kernel/head.S2
-rw-r--r--arch/ia64/kernel/ivt.S2
-rw-r--r--arch/ia64/kvm/vmm_ivt.S2
-rw-r--r--arch/parisc/include/asm/shmparam.h5
-rw-r--r--arch/parisc/kernel/cache.c3
-rw-r--r--arch/parisc/kernel/sys_parisc.c14
-rw-r--r--arch/parisc/kernel/syscall_table.S2
-rw-r--r--arch/parisc/lib/memcpy.c2
-rw-r--r--arch/parisc/mm/fault.c2
-rw-r--r--arch/s390/include/asm/sigp.h19
-rw-r--r--arch/s390/include/asm/smp.h13
-rw-r--r--arch/s390/include/uapi/asm/unistd.h3
-rw-r--r--arch/s390/kernel/compat_wrapper.c3
-rw-r--r--arch/s390/kernel/dumpstack.c8
-rw-r--r--arch/s390/kernel/ptrace.c2
-rw-r--r--arch/s390/kernel/setup.c32
-rw-r--r--arch/s390/kernel/smp.c15
-rw-r--r--arch/s390/kernel/syscalls.S1
-rw-r--r--arch/s390/lib/uaccess.c5
-rw-r--r--arch/s390/mm/fault.c140
-rw-r--r--arch/x86/Makefile4
-rw-r--r--arch/x86/include/asm/kvm_host.h2
-rw-r--r--arch/x86/kernel/cpu/perf_event_intel_rapl.c33
-rw-r--r--arch/x86/kernel/early-quirks.c2
-rw-r--r--arch/x86/kernel/reboot.c72
-rw-r--r--arch/x86/kvm/cpuid.c2
-rw-r--r--arch/x86/kvm/cpuid.h8
-rw-r--r--arch/x86/kvm/mmu.c38
-rw-r--r--arch/x86/kvm/mmu.h44
-rw-r--r--arch/x86/kvm/paging_tmpl.h2
-rw-r--r--arch/x86/kvm/vmx.c11
-rw-r--r--arch/x86/kvm/x86.c10
-rw-r--r--arch/x86/syscalls/Makefile2
-rw-r--r--arch/x86/syscalls/syscall_32.tbl1
-rw-r--r--arch/x86/tools/Makefile2
-rw-r--r--arch/x86/xen/smp.c3
-rw-r--r--arch/x86/xen/spinlock.c5
-rw-r--r--arch/x86/xen/xen-asm_32.S25
-rw-r--r--drivers/Makefile4
-rw-r--r--drivers/char/hw_random/bcm2835-rng.c10
-rw-r--r--drivers/char/ipmi/Kconfig12
-rw-r--r--drivers/char/ipmi/ipmi_bt_sm.c2
-rw-r--r--drivers/char/ipmi/ipmi_kcs_sm.c5
-rw-r--r--drivers/char/ipmi/ipmi_msghandler.c239
-rw-r--r--drivers/char/ipmi/ipmi_si_intf.c145
-rw-r--r--drivers/irqchip/irq-vic.c6
-rw-r--r--drivers/md/raid5.c3
-rw-r--r--drivers/net/ethernet/broadcom/bnx2.c2
-rw-r--r--drivers/net/ethernet/cadence/Kconfig6
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/l2t.c4
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_hw.c2
-rw-r--r--drivers/net/ethernet/emulex/benet/be.h1
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c17
-rw-r--r--drivers/net/ethernet/marvell/mvneta.c41
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/main.c181
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4.h1
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c21
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c3
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c2
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c33
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c10
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c31
-rw-r--r--drivers/net/ieee802154/at86rf230.c10
-rw-r--r--drivers/net/vxlan.c4
-rw-r--r--drivers/net/wan/cosa.c4
-rw-r--r--drivers/of/base.c10
-rw-r--r--drivers/of/fdt.c2
-rw-r--r--drivers/pinctrl/Kconfig8
-rw-r--r--drivers/pinctrl/Makefile2
-rw-r--r--drivers/pinctrl/pinctrl-bcm281xx.c1461
-rw-r--r--drivers/pinctrl/pinctrl-capri.c1454
-rw-r--r--drivers/pinctrl/pinctrl-msm.c6
-rw-r--r--drivers/pinctrl/pinctrl-msm.h1
-rw-r--r--drivers/pinctrl/pinctrl-nomadik.c1
-rw-r--r--drivers/pinctrl/pinctrl-rockchip.c48
-rw-r--r--drivers/s390/char/sclp.c2
-rw-r--r--drivers/s390/char/sclp_cmd.c2
-rw-r--r--drivers/s390/char/sclp_vt220.c14
-rw-r--r--drivers/staging/xgifb/vb_def.h2
-rw-r--r--drivers/staging/xgifb/vb_struct.h2
-rw-r--r--drivers/staging/xgifb/vgatypes.h4
-rw-r--r--drivers/video/Kconfig2478
-rw-r--r--drivers/video/Makefile166
-rw-r--r--drivers/video/console/sticon.c2
-rw-r--r--drivers/video/console/sticore.c2
-rw-r--r--drivers/video/fbdev/68328fb.c (renamed from drivers/video/68328fb.c)0
-rw-r--r--drivers/video/fbdev/Kconfig2474
-rw-r--r--drivers/video/fbdev/Makefile152
-rw-r--r--drivers/video/fbdev/acornfb.c (renamed from drivers/video/acornfb.c)0
-rw-r--r--drivers/video/fbdev/acornfb.h (renamed from drivers/video/acornfb.h)0
-rw-r--r--drivers/video/fbdev/amba-clcd.c (renamed from drivers/video/amba-clcd.c)0
-rw-r--r--drivers/video/fbdev/amifb.c (renamed from drivers/video/amifb.c)0
-rw-r--r--drivers/video/fbdev/arcfb.c (renamed from drivers/video/arcfb.c)0
-rw-r--r--drivers/video/fbdev/arkfb.c (renamed from drivers/video/arkfb.c)0
-rw-r--r--drivers/video/fbdev/asiliantfb.c (renamed from drivers/video/asiliantfb.c)0
-rw-r--r--drivers/video/fbdev/atafb.c (renamed from drivers/video/atafb.c)0
-rw-r--r--drivers/video/fbdev/atafb.h (renamed from drivers/video/atafb.h)0
-rw-r--r--drivers/video/fbdev/atafb_iplan2p2.c (renamed from drivers/video/atafb_iplan2p2.c)0
-rw-r--r--drivers/video/fbdev/atafb_iplan2p4.c (renamed from drivers/video/atafb_iplan2p4.c)0
-rw-r--r--drivers/video/fbdev/atafb_iplan2p8.c (renamed from drivers/video/atafb_iplan2p8.c)0
-rw-r--r--drivers/video/fbdev/atafb_mfb.c (renamed from drivers/video/atafb_mfb.c)0
-rw-r--r--drivers/video/fbdev/atafb_utils.h (renamed from drivers/video/atafb_utils.h)0
-rw-r--r--drivers/video/fbdev/atmel_lcdfb.c (renamed from drivers/video/atmel_lcdfb.c)0
-rw-r--r--drivers/video/fbdev/aty/Makefile (renamed from drivers/video/aty/Makefile)0
-rw-r--r--drivers/video/fbdev/aty/ati_ids.h (renamed from drivers/video/aty/ati_ids.h)0
-rw-r--r--drivers/video/fbdev/aty/aty128fb.c (renamed from drivers/video/aty/aty128fb.c)0
-rw-r--r--drivers/video/fbdev/aty/atyfb.h (renamed from drivers/video/aty/atyfb.h)0
-rw-r--r--drivers/video/fbdev/aty/atyfb_base.c (renamed from drivers/video/aty/atyfb_base.c)0
-rw-r--r--drivers/video/fbdev/aty/mach64_accel.c (renamed from drivers/video/aty/mach64_accel.c)0
-rw-r--r--drivers/video/fbdev/aty/mach64_ct.c (renamed from drivers/video/aty/mach64_ct.c)0
-rw-r--r--drivers/video/fbdev/aty/mach64_cursor.c (renamed from drivers/video/aty/mach64_cursor.c)2
-rw-r--r--drivers/video/fbdev/aty/mach64_gx.c (renamed from drivers/video/aty/mach64_gx.c)0
-rw-r--r--drivers/video/fbdev/aty/radeon_accel.c (renamed from drivers/video/aty/radeon_accel.c)0
-rw-r--r--drivers/video/fbdev/aty/radeon_backlight.c (renamed from drivers/video/aty/radeon_backlight.c)0
-rw-r--r--drivers/video/fbdev/aty/radeon_base.c (renamed from drivers/video/aty/radeon_base.c)0
-rw-r--r--drivers/video/fbdev/aty/radeon_i2c.c (renamed from drivers/video/aty/radeon_i2c.c)0
-rw-r--r--drivers/video/fbdev/aty/radeon_monitor.c (renamed from drivers/video/aty/radeon_monitor.c)0
-rw-r--r--drivers/video/fbdev/aty/radeon_pm.c (renamed from drivers/video/aty/radeon_pm.c)0
-rw-r--r--drivers/video/fbdev/aty/radeonfb.h (renamed from drivers/video/aty/radeonfb.h)0
-rw-r--r--drivers/video/fbdev/au1100fb.c (renamed from drivers/video/au1100fb.c)0
-rw-r--r--drivers/video/fbdev/au1100fb.h (renamed from drivers/video/au1100fb.h)0
-rw-r--r--drivers/video/fbdev/au1200fb.c (renamed from drivers/video/au1200fb.c)0
-rw-r--r--drivers/video/fbdev/au1200fb.h (renamed from drivers/video/au1200fb.h)0
-rw-r--r--drivers/video/fbdev/auo_k1900fb.c (renamed from drivers/video/auo_k1900fb.c)0
-rw-r--r--drivers/video/fbdev/auo_k1901fb.c (renamed from drivers/video/auo_k1901fb.c)0
-rw-r--r--drivers/video/fbdev/auo_k190x.c (renamed from drivers/video/auo_k190x.c)0
-rw-r--r--drivers/video/fbdev/auo_k190x.h (renamed from drivers/video/auo_k190x.h)0
-rw-r--r--drivers/video/fbdev/bf537-lq035.c (renamed from drivers/video/bf537-lq035.c)0
-rw-r--r--drivers/video/fbdev/bf54x-lq043fb.c (renamed from drivers/video/bf54x-lq043fb.c)2
-rw-r--r--drivers/video/fbdev/bfin-lq035q1-fb.c (renamed from drivers/video/bfin-lq035q1-fb.c)0
-rw-r--r--drivers/video/fbdev/bfin-t350mcqb-fb.c (renamed from drivers/video/bfin-t350mcqb-fb.c)0
-rw-r--r--drivers/video/fbdev/bfin_adv7393fb.c (renamed from drivers/video/bfin_adv7393fb.c)0
-rw-r--r--drivers/video/fbdev/bfin_adv7393fb.h (renamed from drivers/video/bfin_adv7393fb.h)0
-rw-r--r--drivers/video/fbdev/broadsheetfb.c (renamed from drivers/video/broadsheetfb.c)0
-rw-r--r--drivers/video/fbdev/bt431.h (renamed from drivers/video/bt431.h)0
-rw-r--r--drivers/video/fbdev/bt455.h (renamed from drivers/video/bt455.h)0
-rw-r--r--drivers/video/fbdev/bw2.c (renamed from drivers/video/bw2.c)0
-rw-r--r--drivers/video/fbdev/c2p.h (renamed from drivers/video/c2p.h)0
-rw-r--r--drivers/video/fbdev/c2p_core.h (renamed from drivers/video/c2p_core.h)0
-rw-r--r--drivers/video/fbdev/c2p_iplan2.c (renamed from drivers/video/c2p_iplan2.c)0
-rw-r--r--drivers/video/fbdev/c2p_planar.c (renamed from drivers/video/c2p_planar.c)0
-rw-r--r--drivers/video/fbdev/carminefb.c (renamed from drivers/video/carminefb.c)0
-rw-r--r--drivers/video/fbdev/carminefb.h (renamed from drivers/video/carminefb.h)0
-rw-r--r--drivers/video/fbdev/carminefb_regs.h (renamed from drivers/video/carminefb_regs.h)0
-rw-r--r--drivers/video/fbdev/cg14.c (renamed from drivers/video/cg14.c)0
-rw-r--r--drivers/video/fbdev/cg3.c (renamed from drivers/video/cg3.c)0
-rw-r--r--drivers/video/fbdev/cg6.c (renamed from drivers/video/cg6.c)0
-rw-r--r--drivers/video/fbdev/chipsfb.c (renamed from drivers/video/chipsfb.c)0
-rw-r--r--drivers/video/fbdev/cirrusfb.c (renamed from drivers/video/cirrusfb.c)0
-rw-r--r--drivers/video/fbdev/clps711xfb.c (renamed from drivers/video/clps711xfb.c)0
-rw-r--r--drivers/video/fbdev/cobalt_lcdfb.c (renamed from drivers/video/cobalt_lcdfb.c)0
-rw-r--r--drivers/video/fbdev/controlfb.c (renamed from drivers/video/controlfb.c)0
-rw-r--r--drivers/video/fbdev/controlfb.h (renamed from drivers/video/controlfb.h)0
-rw-r--r--drivers/video/fbdev/core/Makefile16
-rw-r--r--drivers/video/fbdev/core/cfbcopyarea.c (renamed from drivers/video/cfbcopyarea.c)0
-rw-r--r--drivers/video/fbdev/core/cfbfillrect.c (renamed from drivers/video/cfbfillrect.c)0
-rw-r--r--drivers/video/fbdev/core/cfbimgblt.c (renamed from drivers/video/cfbimgblt.c)0
-rw-r--r--drivers/video/fbdev/core/fb_ddc.c (renamed from drivers/video/fb_ddc.c)2
-rw-r--r--drivers/video/fbdev/core/fb_defio.c (renamed from drivers/video/fb_defio.c)0
-rw-r--r--drivers/video/fbdev/core/fb_draw.h (renamed from drivers/video/fb_draw.h)0
-rw-r--r--drivers/video/fbdev/core/fb_notify.c (renamed from drivers/video/fb_notify.c)0
-rw-r--r--drivers/video/fbdev/core/fb_sys_fops.c (renamed from drivers/video/fb_sys_fops.c)0
-rw-r--r--drivers/video/fbdev/core/fbcmap.c (renamed from drivers/video/fbcmap.c)0
-rw-r--r--drivers/video/fbdev/core/fbcvt.c (renamed from drivers/video/fbcvt.c)0
-rw-r--r--drivers/video/fbdev/core/fbmem.c (renamed from drivers/video/fbmem.c)0
-rw-r--r--drivers/video/fbdev/core/fbmon.c (renamed from drivers/video/fbmon.c)2
-rw-r--r--drivers/video/fbdev/core/fbsysfs.c (renamed from drivers/video/fbsysfs.c)0
-rw-r--r--drivers/video/fbdev/core/modedb.c (renamed from drivers/video/modedb.c)0
-rw-r--r--drivers/video/fbdev/core/svgalib.c (renamed from drivers/video/svgalib.c)0
-rw-r--r--drivers/video/fbdev/core/syscopyarea.c (renamed from drivers/video/syscopyarea.c)0
-rw-r--r--drivers/video/fbdev/core/sysfillrect.c (renamed from drivers/video/sysfillrect.c)0
-rw-r--r--drivers/video/fbdev/core/sysimgblt.c (renamed from drivers/video/sysimgblt.c)0
-rw-r--r--drivers/video/fbdev/cyber2000fb.c (renamed from drivers/video/cyber2000fb.c)0
-rw-r--r--drivers/video/fbdev/cyber2000fb.h (renamed from drivers/video/cyber2000fb.h)0
-rw-r--r--drivers/video/fbdev/da8xx-fb.c (renamed from drivers/video/da8xx-fb.c)10
-rw-r--r--drivers/video/fbdev/dnfb.c (renamed from drivers/video/dnfb.c)0
-rw-r--r--drivers/video/fbdev/edid.h (renamed from drivers/video/edid.h)0
-rw-r--r--drivers/video/fbdev/efifb.c (renamed from drivers/video/efifb.c)0
-rw-r--r--drivers/video/fbdev/ep93xx-fb.c (renamed from drivers/video/ep93xx-fb.c)0
-rw-r--r--drivers/video/fbdev/exynos/Kconfig (renamed from drivers/video/exynos/Kconfig)0
-rw-r--r--drivers/video/fbdev/exynos/Makefile (renamed from drivers/video/exynos/Makefile)0
-rw-r--r--drivers/video/fbdev/exynos/exynos_mipi_dsi.c (renamed from drivers/video/exynos/exynos_mipi_dsi.c)0
-rw-r--r--drivers/video/fbdev/exynos/exynos_mipi_dsi_common.c (renamed from drivers/video/exynos/exynos_mipi_dsi_common.c)0
-rw-r--r--drivers/video/fbdev/exynos/exynos_mipi_dsi_common.h (renamed from drivers/video/exynos/exynos_mipi_dsi_common.h)0
-rw-r--r--drivers/video/fbdev/exynos/exynos_mipi_dsi_lowlevel.c (renamed from drivers/video/exynos/exynos_mipi_dsi_lowlevel.c)0
-rw-r--r--drivers/video/fbdev/exynos/exynos_mipi_dsi_lowlevel.h (renamed from drivers/video/exynos/exynos_mipi_dsi_lowlevel.h)0
-rw-r--r--drivers/video/fbdev/exynos/exynos_mipi_dsi_regs.h (renamed from drivers/video/exynos/exynos_mipi_dsi_regs.h)0
-rw-r--r--drivers/video/fbdev/exynos/s6e8ax0.c (renamed from drivers/video/exynos/s6e8ax0.c)0
-rw-r--r--drivers/video/fbdev/fb-puv3.c (renamed from drivers/video/fb-puv3.c)0
-rw-r--r--drivers/video/fbdev/ffb.c (renamed from drivers/video/ffb.c)0
-rw-r--r--drivers/video/fbdev/fm2fb.c (renamed from drivers/video/fm2fb.c)0
-rw-r--r--drivers/video/fbdev/fsl-diu-fb.c (renamed from drivers/video/fsl-diu-fb.c)0
-rw-r--r--drivers/video/fbdev/g364fb.c (renamed from drivers/video/g364fb.c)0
-rw-r--r--drivers/video/fbdev/gbefb.c (renamed from drivers/video/gbefb.c)0
-rw-r--r--drivers/video/fbdev/geode/Kconfig (renamed from drivers/video/geode/Kconfig)0
-rw-r--r--drivers/video/fbdev/geode/Makefile (renamed from drivers/video/geode/Makefile)0
-rw-r--r--drivers/video/fbdev/geode/display_gx.c (renamed from drivers/video/geode/display_gx.c)0
-rw-r--r--drivers/video/fbdev/geode/display_gx1.c (renamed from drivers/video/geode/display_gx1.c)0
-rw-r--r--drivers/video/fbdev/geode/display_gx1.h (renamed from drivers/video/geode/display_gx1.h)0
-rw-r--r--drivers/video/fbdev/geode/geodefb.h (renamed from drivers/video/geode/geodefb.h)0
-rw-r--r--drivers/video/fbdev/geode/gx1fb_core.c (renamed from drivers/video/geode/gx1fb_core.c)0
-rw-r--r--drivers/video/fbdev/geode/gxfb.h (renamed from drivers/video/geode/gxfb.h)0
-rw-r--r--drivers/video/fbdev/geode/gxfb_core.c (renamed from drivers/video/geode/gxfb_core.c)0
-rw-r--r--drivers/video/fbdev/geode/lxfb.h (renamed from drivers/video/geode/lxfb.h)0
-rw-r--r--drivers/video/fbdev/geode/lxfb_core.c (renamed from drivers/video/geode/lxfb_core.c)0
-rw-r--r--drivers/video/fbdev/geode/lxfb_ops.c (renamed from drivers/video/geode/lxfb_ops.c)0
-rw-r--r--drivers/video/fbdev/geode/suspend_gx.c (renamed from drivers/video/geode/suspend_gx.c)0
-rw-r--r--drivers/video/fbdev/geode/video_cs5530.c (renamed from drivers/video/geode/video_cs5530.c)0
-rw-r--r--drivers/video/fbdev/geode/video_cs5530.h (renamed from drivers/video/geode/video_cs5530.h)0
-rw-r--r--drivers/video/fbdev/geode/video_gx.c (renamed from drivers/video/geode/video_gx.c)0
-rw-r--r--drivers/video/fbdev/goldfishfb.c (renamed from drivers/video/goldfishfb.c)0
-rw-r--r--drivers/video/fbdev/grvga.c (renamed from drivers/video/grvga.c)0
-rw-r--r--drivers/video/fbdev/gxt4500.c (renamed from drivers/video/gxt4500.c)0
-rw-r--r--drivers/video/fbdev/hecubafb.c (renamed from drivers/video/hecubafb.c)0
-rw-r--r--drivers/video/fbdev/hgafb.c (renamed from drivers/video/hgafb.c)0
-rw-r--r--drivers/video/fbdev/hitfb.c (renamed from drivers/video/hitfb.c)0
-rw-r--r--drivers/video/fbdev/hpfb.c (renamed from drivers/video/hpfb.c)0
-rw-r--r--drivers/video/fbdev/hyperv_fb.c (renamed from drivers/video/hyperv_fb.c)0
-rw-r--r--drivers/video/fbdev/i740_reg.h (renamed from drivers/video/i740_reg.h)0
-rw-r--r--drivers/video/fbdev/i740fb.c (renamed from drivers/video/i740fb.c)0
-rw-r--r--drivers/video/fbdev/i810/Makefile (renamed from drivers/video/i810/Makefile)0
-rw-r--r--drivers/video/fbdev/i810/i810-i2c.c (renamed from drivers/video/i810/i810-i2c.c)0
-rw-r--r--drivers/video/fbdev/i810/i810.h (renamed from drivers/video/i810/i810.h)0
-rw-r--r--drivers/video/fbdev/i810/i810_accel.c (renamed from drivers/video/i810/i810_accel.c)0
-rw-r--r--drivers/video/fbdev/i810/i810_dvt.c (renamed from drivers/video/i810/i810_dvt.c)0
-rw-r--r--drivers/video/fbdev/i810/i810_gtf.c (renamed from drivers/video/i810/i810_gtf.c)0
-rw-r--r--drivers/video/fbdev/i810/i810_main.c (renamed from drivers/video/i810/i810_main.c)0
-rw-r--r--drivers/video/fbdev/i810/i810_main.h (renamed from drivers/video/i810/i810_main.h)0
-rw-r--r--drivers/video/fbdev/i810/i810_regs.h (renamed from drivers/video/i810/i810_regs.h)0
-rw-r--r--drivers/video/fbdev/igafb.c (renamed from drivers/video/igafb.c)0
-rw-r--r--drivers/video/fbdev/imsttfb.c (renamed from drivers/video/imsttfb.c)0
-rw-r--r--drivers/video/fbdev/imxfb.c (renamed from drivers/video/imxfb.c)0
-rw-r--r--drivers/video/fbdev/intelfb/Makefile (renamed from drivers/video/intelfb/Makefile)0
-rw-r--r--drivers/video/fbdev/intelfb/intelfb.h (renamed from drivers/video/intelfb/intelfb.h)0
-rw-r--r--drivers/video/fbdev/intelfb/intelfb_i2c.c (renamed from drivers/video/intelfb/intelfb_i2c.c)0
-rw-r--r--drivers/video/fbdev/intelfb/intelfbdrv.c (renamed from drivers/video/intelfb/intelfbdrv.c)0
-rw-r--r--drivers/video/fbdev/intelfb/intelfbhw.c (renamed from drivers/video/intelfb/intelfbhw.c)0
-rw-r--r--drivers/video/fbdev/intelfb/intelfbhw.h (renamed from drivers/video/intelfb/intelfbhw.h)0
-rw-r--r--drivers/video/fbdev/jz4740_fb.c (renamed from drivers/video/jz4740_fb.c)0
-rw-r--r--drivers/video/fbdev/kyro/Makefile (renamed from drivers/video/kyro/Makefile)0
-rw-r--r--drivers/video/fbdev/kyro/STG4000InitDevice.c (renamed from drivers/video/kyro/STG4000InitDevice.c)0
-rw-r--r--drivers/video/fbdev/kyro/STG4000Interface.h (renamed from drivers/video/kyro/STG4000Interface.h)0
-rw-r--r--drivers/video/fbdev/kyro/STG4000OverlayDevice.c (renamed from drivers/video/kyro/STG4000OverlayDevice.c)0
-rw-r--r--drivers/video/fbdev/kyro/STG4000Ramdac.c (renamed from drivers/video/kyro/STG4000Ramdac.c)0
-rw-r--r--drivers/video/fbdev/kyro/STG4000Reg.h (renamed from drivers/video/kyro/STG4000Reg.h)0
-rw-r--r--drivers/video/fbdev/kyro/STG4000VTG.c (renamed from drivers/video/kyro/STG4000VTG.c)0
-rw-r--r--drivers/video/fbdev/kyro/fbdev.c (renamed from drivers/video/kyro/fbdev.c)0
-rw-r--r--drivers/video/fbdev/leo.c (renamed from drivers/video/leo.c)0
-rw-r--r--drivers/video/fbdev/macfb.c (renamed from drivers/video/macfb.c)0
-rw-r--r--drivers/video/fbdev/macmodes.c (renamed from drivers/video/macmodes.c)0
-rw-r--r--drivers/video/fbdev/macmodes.h (renamed from drivers/video/macmodes.h)0
-rw-r--r--drivers/video/fbdev/matrox/Makefile (renamed from drivers/video/matrox/Makefile)0
-rw-r--r--drivers/video/fbdev/matrox/g450_pll.c (renamed from drivers/video/matrox/g450_pll.c)0
-rw-r--r--drivers/video/fbdev/matrox/g450_pll.h (renamed from drivers/video/matrox/g450_pll.h)0
-rw-r--r--drivers/video/fbdev/matrox/i2c-matroxfb.c (renamed from drivers/video/matrox/i2c-matroxfb.c)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_DAC1064.c (renamed from drivers/video/matrox/matroxfb_DAC1064.c)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_DAC1064.h (renamed from drivers/video/matrox/matroxfb_DAC1064.h)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_Ti3026.c (renamed from drivers/video/matrox/matroxfb_Ti3026.c)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_Ti3026.h (renamed from drivers/video/matrox/matroxfb_Ti3026.h)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_accel.c (renamed from drivers/video/matrox/matroxfb_accel.c)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_accel.h (renamed from drivers/video/matrox/matroxfb_accel.h)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_base.c (renamed from drivers/video/matrox/matroxfb_base.c)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_base.h (renamed from drivers/video/matrox/matroxfb_base.h)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_crtc2.c (renamed from drivers/video/matrox/matroxfb_crtc2.c)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_crtc2.h (renamed from drivers/video/matrox/matroxfb_crtc2.h)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_g450.c (renamed from drivers/video/matrox/matroxfb_g450.c)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_g450.h (renamed from drivers/video/matrox/matroxfb_g450.h)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_maven.c (renamed from drivers/video/matrox/matroxfb_maven.c)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_maven.h (renamed from drivers/video/matrox/matroxfb_maven.h)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_misc.c (renamed from drivers/video/matrox/matroxfb_misc.c)0
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_misc.h (renamed from drivers/video/matrox/matroxfb_misc.h)0
-rw-r--r--drivers/video/fbdev/maxinefb.c (renamed from drivers/video/maxinefb.c)0
-rw-r--r--drivers/video/fbdev/mb862xx/Makefile (renamed from drivers/video/mb862xx/Makefile)0
-rw-r--r--drivers/video/fbdev/mb862xx/mb862xx-i2c.c (renamed from drivers/video/mb862xx/mb862xx-i2c.c)0
-rw-r--r--drivers/video/fbdev/mb862xx/mb862xx_reg.h (renamed from drivers/video/mb862xx/mb862xx_reg.h)0
-rw-r--r--drivers/video/fbdev/mb862xx/mb862xxfb.h (renamed from drivers/video/mb862xx/mb862xxfb.h)0
-rw-r--r--drivers/video/fbdev/mb862xx/mb862xxfb_accel.c (renamed from drivers/video/mb862xx/mb862xxfb_accel.c)0
-rw-r--r--drivers/video/fbdev/mb862xx/mb862xxfb_accel.h (renamed from drivers/video/mb862xx/mb862xxfb_accel.h)0
-rw-r--r--drivers/video/fbdev/mb862xx/mb862xxfbdrv.c (renamed from drivers/video/mb862xx/mb862xxfbdrv.c)0
-rw-r--r--drivers/video/fbdev/mbx/Makefile (renamed from drivers/video/mbx/Makefile)0
-rw-r--r--drivers/video/fbdev/mbx/mbxdebugfs.c (renamed from drivers/video/mbx/mbxdebugfs.c)0
-rw-r--r--drivers/video/fbdev/mbx/mbxfb.c (renamed from drivers/video/mbx/mbxfb.c)0
-rw-r--r--drivers/video/fbdev/mbx/reg_bits.h (renamed from drivers/video/mbx/reg_bits.h)0
-rw-r--r--drivers/video/fbdev/mbx/regs.h (renamed from drivers/video/mbx/regs.h)0
-rw-r--r--drivers/video/fbdev/metronomefb.c (renamed from drivers/video/metronomefb.c)0
-rw-r--r--drivers/video/fbdev/mmp/Kconfig (renamed from drivers/video/mmp/Kconfig)6
-rw-r--r--drivers/video/fbdev/mmp/Makefile (renamed from drivers/video/mmp/Makefile)0
-rw-r--r--drivers/video/fbdev/mmp/core.c (renamed from drivers/video/mmp/core.c)0
-rw-r--r--drivers/video/fbdev/mmp/fb/Kconfig (renamed from drivers/video/mmp/fb/Kconfig)0
-rw-r--r--drivers/video/fbdev/mmp/fb/Makefile (renamed from drivers/video/mmp/fb/Makefile)0
-rw-r--r--drivers/video/fbdev/mmp/fb/mmpfb.c (renamed from drivers/video/mmp/fb/mmpfb.c)0
-rw-r--r--drivers/video/fbdev/mmp/fb/mmpfb.h (renamed from drivers/video/mmp/fb/mmpfb.h)0
-rw-r--r--drivers/video/fbdev/mmp/hw/Kconfig (renamed from drivers/video/mmp/hw/Kconfig)0
-rw-r--r--drivers/video/fbdev/mmp/hw/Makefile (renamed from drivers/video/mmp/hw/Makefile)0
-rw-r--r--drivers/video/fbdev/mmp/hw/mmp_ctrl.c (renamed from drivers/video/mmp/hw/mmp_ctrl.c)0
-rw-r--r--drivers/video/fbdev/mmp/hw/mmp_ctrl.h (renamed from drivers/video/mmp/hw/mmp_ctrl.h)0
-rw-r--r--drivers/video/fbdev/mmp/hw/mmp_spi.c (renamed from drivers/video/mmp/hw/mmp_spi.c)0
-rw-r--r--drivers/video/fbdev/mmp/panel/Kconfig (renamed from drivers/video/mmp/panel/Kconfig)0
-rw-r--r--drivers/video/fbdev/mmp/panel/Makefile (renamed from drivers/video/mmp/panel/Makefile)0
-rw-r--r--drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c (renamed from drivers/video/mmp/panel/tpo_tj032md01bw.c)0
-rw-r--r--drivers/video/fbdev/msm/Makefile (renamed from drivers/video/msm/Makefile)0
-rw-r--r--drivers/video/fbdev/msm/mddi.c (renamed from drivers/video/msm/mddi.c)0
-rw-r--r--drivers/video/fbdev/msm/mddi_client_dummy.c (renamed from drivers/video/msm/mddi_client_dummy.c)0
-rw-r--r--drivers/video/fbdev/msm/mddi_client_nt35399.c (renamed from drivers/video/msm/mddi_client_nt35399.c)0
-rw-r--r--drivers/video/fbdev/msm/mddi_client_toshiba.c (renamed from drivers/video/msm/mddi_client_toshiba.c)0
-rw-r--r--drivers/video/fbdev/msm/mddi_hw.h (renamed from drivers/video/msm/mddi_hw.h)0
-rw-r--r--drivers/video/fbdev/msm/mdp.c (renamed from drivers/video/msm/mdp.c)0
-rw-r--r--drivers/video/fbdev/msm/mdp_csc_table.h (renamed from drivers/video/msm/mdp_csc_table.h)0
-rw-r--r--drivers/video/fbdev/msm/mdp_hw.h (renamed from drivers/video/msm/mdp_hw.h)0
-rw-r--r--drivers/video/fbdev/msm/mdp_ppp.c (renamed from drivers/video/msm/mdp_ppp.c)0
-rw-r--r--drivers/video/fbdev/msm/mdp_scale_tables.c (renamed from drivers/video/msm/mdp_scale_tables.c)0
-rw-r--r--drivers/video/fbdev/msm/mdp_scale_tables.h (renamed from drivers/video/msm/mdp_scale_tables.h)0
-rw-r--r--drivers/video/fbdev/msm/msm_fb.c (renamed from drivers/video/msm/msm_fb.c)0
-rw-r--r--drivers/video/fbdev/mx3fb.c (renamed from drivers/video/mx3fb.c)0
-rw-r--r--drivers/video/fbdev/mxsfb.c (renamed from drivers/video/mxsfb.c)0
-rw-r--r--drivers/video/fbdev/n411.c (renamed from drivers/video/n411.c)0
-rw-r--r--drivers/video/fbdev/neofb.c (renamed from drivers/video/neofb.c)0
-rw-r--r--drivers/video/fbdev/nuc900fb.c (renamed from drivers/video/nuc900fb.c)0
-rw-r--r--drivers/video/fbdev/nuc900fb.h (renamed from drivers/video/nuc900fb.h)0
-rw-r--r--drivers/video/fbdev/nvidia/Makefile (renamed from drivers/video/nvidia/Makefile)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_accel.c (renamed from drivers/video/nvidia/nv_accel.c)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_backlight.c (renamed from drivers/video/nvidia/nv_backlight.c)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_dma.h (renamed from drivers/video/nvidia/nv_dma.h)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_hw.c (renamed from drivers/video/nvidia/nv_hw.c)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_i2c.c (renamed from drivers/video/nvidia/nv_i2c.c)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_local.h (renamed from drivers/video/nvidia/nv_local.h)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_of.c (renamed from drivers/video/nvidia/nv_of.c)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_proto.h (renamed from drivers/video/nvidia/nv_proto.h)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_setup.c (renamed from drivers/video/nvidia/nv_setup.c)0
-rw-r--r--drivers/video/fbdev/nvidia/nv_type.h (renamed from drivers/video/nvidia/nv_type.h)0
-rw-r--r--drivers/video/fbdev/nvidia/nvidia.c (renamed from drivers/video/nvidia/nvidia.c)0
-rw-r--r--drivers/video/fbdev/ocfb.c (renamed from drivers/video/ocfb.c)0
-rw-r--r--drivers/video/fbdev/offb.c (renamed from drivers/video/offb.c)0
-rw-r--r--drivers/video/fbdev/omap/Kconfig (renamed from drivers/video/omap/Kconfig)0
-rw-r--r--drivers/video/fbdev/omap/Makefile (renamed from drivers/video/omap/Makefile)0
-rw-r--r--drivers/video/fbdev/omap/hwa742.c (renamed from drivers/video/omap/hwa742.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_ams_delta.c (renamed from drivers/video/omap/lcd_ams_delta.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_h3.c (renamed from drivers/video/omap/lcd_h3.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_htcherald.c (renamed from drivers/video/omap/lcd_htcherald.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_inn1510.c (renamed from drivers/video/omap/lcd_inn1510.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_inn1610.c (renamed from drivers/video/omap/lcd_inn1610.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_mipid.c (renamed from drivers/video/omap/lcd_mipid.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_osk.c (renamed from drivers/video/omap/lcd_osk.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_palmte.c (renamed from drivers/video/omap/lcd_palmte.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_palmtt.c (renamed from drivers/video/omap/lcd_palmtt.c)0
-rw-r--r--drivers/video/fbdev/omap/lcd_palmz71.c (renamed from drivers/video/omap/lcd_palmz71.c)0
-rw-r--r--drivers/video/fbdev/omap/lcdc.c (renamed from drivers/video/omap/lcdc.c)0
-rw-r--r--drivers/video/fbdev/omap/lcdc.h (renamed from drivers/video/omap/lcdc.h)0
-rw-r--r--drivers/video/fbdev/omap/omapfb.h (renamed from drivers/video/omap/omapfb.h)0
-rw-r--r--drivers/video/fbdev/omap/omapfb_main.c (renamed from drivers/video/omap/omapfb_main.c)0
-rw-r--r--drivers/video/fbdev/omap/sossi.c (renamed from drivers/video/omap/sossi.c)0
-rw-r--r--drivers/video/fbdev/omap2/Kconfig10
-rw-r--r--drivers/video/fbdev/omap2/Makefile (renamed from drivers/video/omap2/Makefile)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/Kconfig (renamed from drivers/video/omap2/displays-new/Kconfig)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/Makefile (renamed from drivers/video/omap2/displays-new/Makefile)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/connector-analog-tv.c (renamed from drivers/video/omap2/displays-new/connector-analog-tv.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/connector-dvi.c (renamed from drivers/video/omap2/displays-new/connector-dvi.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/connector-hdmi.c (renamed from drivers/video/omap2/displays-new/connector-hdmi.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/encoder-tfp410.c (renamed from drivers/video/omap2/displays-new/encoder-tfp410.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/encoder-tpd12s015.c (renamed from drivers/video/omap2/displays-new/encoder-tpd12s015.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/panel-dpi.c (renamed from drivers/video/omap2/displays-new/panel-dpi.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/panel-dsi-cm.c (renamed from drivers/video/omap2/displays-new/panel-dsi-cm.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/panel-lgphilips-lb035q02.c (renamed from drivers/video/omap2/displays-new/panel-lgphilips-lb035q02.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/panel-nec-nl8048hl11.c (renamed from drivers/video/omap2/displays-new/panel-nec-nl8048hl11.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c (renamed from drivers/video/omap2/displays-new/panel-sharp-ls037v7dw01.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/panel-sony-acx565akm.c (renamed from drivers/video/omap2/displays-new/panel-sony-acx565akm.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/panel-tpo-td028ttec1.c (renamed from drivers/video/omap2/displays-new/panel-tpo-td028ttec1.c)0
-rw-r--r--drivers/video/fbdev/omap2/displays-new/panel-tpo-td043mtea1.c (renamed from drivers/video/omap2/displays-new/panel-tpo-td043mtea1.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/Kconfig (renamed from drivers/video/omap2/dss/Kconfig)0
-rw-r--r--drivers/video/fbdev/omap2/dss/Makefile (renamed from drivers/video/omap2/dss/Makefile)0
-rw-r--r--drivers/video/fbdev/omap2/dss/apply.c (renamed from drivers/video/omap2/dss/apply.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/core.c (renamed from drivers/video/omap2/dss/core.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/dispc-compat.c (renamed from drivers/video/omap2/dss/dispc-compat.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/dispc-compat.h (renamed from drivers/video/omap2/dss/dispc-compat.h)0
-rw-r--r--drivers/video/fbdev/omap2/dss/dispc.c (renamed from drivers/video/omap2/dss/dispc.c)67
-rw-r--r--drivers/video/fbdev/omap2/dss/dispc.h (renamed from drivers/video/omap2/dss/dispc.h)0
-rw-r--r--drivers/video/fbdev/omap2/dss/dispc_coefs.c (renamed from drivers/video/omap2/dss/dispc_coefs.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/display-sysfs.c (renamed from drivers/video/omap2/dss/display-sysfs.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/display.c (renamed from drivers/video/omap2/dss/display.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/dpi.c (renamed from drivers/video/omap2/dss/dpi.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/dsi.c (renamed from drivers/video/omap2/dss/dsi.c)20
-rw-r--r--drivers/video/fbdev/omap2/dss/dss-of.c (renamed from drivers/video/omap2/dss/dss-of.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/dss.c (renamed from drivers/video/omap2/dss/dss.c)4
-rw-r--r--drivers/video/fbdev/omap2/dss/dss.h (renamed from drivers/video/omap2/dss/dss.h)6
-rw-r--r--drivers/video/fbdev/omap2/dss/dss_features.c (renamed from drivers/video/omap2/dss/dss_features.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/dss_features.h (renamed from drivers/video/omap2/dss/dss_features.h)0
-rw-r--r--drivers/video/fbdev/omap2/dss/hdmi.h (renamed from drivers/video/omap2/dss/hdmi.h)0
-rw-r--r--drivers/video/fbdev/omap2/dss/hdmi4.c (renamed from drivers/video/omap2/dss/hdmi4.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/hdmi4_core.c (renamed from drivers/video/omap2/dss/hdmi4_core.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/hdmi4_core.h (renamed from drivers/video/omap2/dss/hdmi4_core.h)0
-rw-r--r--drivers/video/fbdev/omap2/dss/hdmi_common.c (renamed from drivers/video/omap2/dss/hdmi_common.c)8
-rw-r--r--drivers/video/fbdev/omap2/dss/hdmi_phy.c (renamed from drivers/video/omap2/dss/hdmi_phy.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/hdmi_pll.c (renamed from drivers/video/omap2/dss/hdmi_pll.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/hdmi_wp.c (renamed from drivers/video/omap2/dss/hdmi_wp.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/manager-sysfs.c (renamed from drivers/video/omap2/dss/manager-sysfs.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/manager.c (renamed from drivers/video/omap2/dss/manager.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/output.c (renamed from drivers/video/omap2/dss/output.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/overlay-sysfs.c (renamed from drivers/video/omap2/dss/overlay-sysfs.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/overlay.c (renamed from drivers/video/omap2/dss/overlay.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/rfbi.c (renamed from drivers/video/omap2/dss/rfbi.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/sdi.c (renamed from drivers/video/omap2/dss/sdi.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/venc.c (renamed from drivers/video/omap2/dss/venc.c)0
-rw-r--r--drivers/video/fbdev/omap2/dss/venc_panel.c (renamed from drivers/video/omap2/dss/venc_panel.c)0
-rw-r--r--drivers/video/fbdev/omap2/omapfb/Kconfig (renamed from drivers/video/omap2/omapfb/Kconfig)0
-rw-r--r--drivers/video/fbdev/omap2/omapfb/Makefile (renamed from drivers/video/omap2/omapfb/Makefile)0
-rw-r--r--drivers/video/fbdev/omap2/omapfb/omapfb-ioctl.c (renamed from drivers/video/omap2/omapfb/omapfb-ioctl.c)0
-rw-r--r--drivers/video/fbdev/omap2/omapfb/omapfb-main.c (renamed from drivers/video/omap2/omapfb/omapfb-main.c)0
-rw-r--r--drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c (renamed from drivers/video/omap2/omapfb/omapfb-sysfs.c)0
-rw-r--r--drivers/video/fbdev/omap2/omapfb/omapfb.h (renamed from drivers/video/omap2/omapfb/omapfb.h)0
-rw-r--r--drivers/video/fbdev/omap2/vrfb.c (renamed from drivers/video/omap2/vrfb.c)0
-rw-r--r--drivers/video/fbdev/p9100.c (renamed from drivers/video/p9100.c)0
-rw-r--r--drivers/video/fbdev/platinumfb.c (renamed from drivers/video/platinumfb.c)0
-rw-r--r--drivers/video/fbdev/platinumfb.h (renamed from drivers/video/platinumfb.h)0
-rw-r--r--drivers/video/fbdev/pm2fb.c (renamed from drivers/video/pm2fb.c)0
-rw-r--r--drivers/video/fbdev/pm3fb.c (renamed from drivers/video/pm3fb.c)0
-rw-r--r--drivers/video/fbdev/pmag-aa-fb.c (renamed from drivers/video/pmag-aa-fb.c)0
-rw-r--r--drivers/video/fbdev/pmag-ba-fb.c (renamed from drivers/video/pmag-ba-fb.c)0
-rw-r--r--drivers/video/fbdev/pmagb-b-fb.c (renamed from drivers/video/pmagb-b-fb.c)0
-rw-r--r--drivers/video/fbdev/ps3fb.c (renamed from drivers/video/ps3fb.c)0
-rw-r--r--drivers/video/fbdev/pvr2fb.c (renamed from drivers/video/pvr2fb.c)0
-rw-r--r--drivers/video/fbdev/pxa168fb.c (renamed from drivers/video/pxa168fb.c)0
-rw-r--r--drivers/video/fbdev/pxa168fb.h (renamed from drivers/video/pxa168fb.h)0
-rw-r--r--drivers/video/fbdev/pxa3xx-gcu.c (renamed from drivers/video/pxa3xx-gcu.c)0
-rw-r--r--drivers/video/fbdev/pxa3xx-gcu.h (renamed from drivers/video/pxa3xx-gcu.h)0
-rw-r--r--drivers/video/fbdev/pxafb.c (renamed from drivers/video/pxafb.c)0
-rw-r--r--drivers/video/fbdev/pxafb.h (renamed from drivers/video/pxafb.h)0
-rw-r--r--drivers/video/fbdev/q40fb.c (renamed from drivers/video/q40fb.c)0
-rw-r--r--drivers/video/fbdev/riva/Makefile (renamed from drivers/video/riva/Makefile)0
-rw-r--r--drivers/video/fbdev/riva/fbdev.c (renamed from drivers/video/riva/fbdev.c)0
-rw-r--r--drivers/video/fbdev/riva/nv_driver.c (renamed from drivers/video/riva/nv_driver.c)0
-rw-r--r--drivers/video/fbdev/riva/nv_type.h (renamed from drivers/video/riva/nv_type.h)0
-rw-r--r--drivers/video/fbdev/riva/nvreg.h (renamed from drivers/video/riva/nvreg.h)0
-rw-r--r--drivers/video/fbdev/riva/riva_hw.c (renamed from drivers/video/riva/riva_hw.c)0
-rw-r--r--drivers/video/fbdev/riva/riva_hw.h (renamed from drivers/video/riva/riva_hw.h)0
-rw-r--r--drivers/video/fbdev/riva/riva_tbl.h (renamed from drivers/video/riva/riva_tbl.h)0
-rw-r--r--drivers/video/fbdev/riva/rivafb-i2c.c (renamed from drivers/video/riva/rivafb-i2c.c)0
-rw-r--r--drivers/video/fbdev/riva/rivafb.h (renamed from drivers/video/riva/rivafb.h)0
-rw-r--r--drivers/video/fbdev/s1d13xxxfb.c (renamed from drivers/video/s1d13xxxfb.c)0
-rw-r--r--drivers/video/fbdev/s3c-fb.c (renamed from drivers/video/s3c-fb.c)0
-rw-r--r--drivers/video/fbdev/s3c2410fb.c (renamed from drivers/video/s3c2410fb.c)0
-rw-r--r--drivers/video/fbdev/s3c2410fb.h (renamed from drivers/video/s3c2410fb.h)0
-rw-r--r--drivers/video/fbdev/s3fb.c (renamed from drivers/video/s3fb.c)0
-rw-r--r--drivers/video/fbdev/sa1100fb.c (renamed from drivers/video/sa1100fb.c)0
-rw-r--r--drivers/video/fbdev/sa1100fb.h (renamed from drivers/video/sa1100fb.h)0
-rw-r--r--drivers/video/fbdev/savage/Makefile (renamed from drivers/video/savage/Makefile)0
-rw-r--r--drivers/video/fbdev/savage/savagefb-i2c.c (renamed from drivers/video/savage/savagefb-i2c.c)0
-rw-r--r--drivers/video/fbdev/savage/savagefb.h (renamed from drivers/video/savage/savagefb.h)0
-rw-r--r--drivers/video/fbdev/savage/savagefb_accel.c (renamed from drivers/video/savage/savagefb_accel.c)0
-rw-r--r--drivers/video/fbdev/savage/savagefb_driver.c (renamed from drivers/video/savage/savagefb_driver.c)0
-rw-r--r--drivers/video/fbdev/sbuslib.c (renamed from drivers/video/sbuslib.c)0
-rw-r--r--drivers/video/fbdev/sbuslib.h (renamed from drivers/video/sbuslib.h)0
-rw-r--r--drivers/video/fbdev/sh7760fb.c (renamed from drivers/video/sh7760fb.c)0
-rw-r--r--drivers/video/fbdev/sh_mipi_dsi.c (renamed from drivers/video/sh_mipi_dsi.c)0
-rw-r--r--drivers/video/fbdev/sh_mobile_hdmi.c (renamed from drivers/video/sh_mobile_hdmi.c)0
-rw-r--r--drivers/video/fbdev/sh_mobile_lcdcfb.c (renamed from drivers/video/sh_mobile_lcdcfb.c)0
-rw-r--r--drivers/video/fbdev/sh_mobile_lcdcfb.h (renamed from drivers/video/sh_mobile_lcdcfb.h)0
-rw-r--r--drivers/video/fbdev/sh_mobile_meram.c (renamed from drivers/video/sh_mobile_meram.c)0
-rw-r--r--drivers/video/fbdev/simplefb.c (renamed from drivers/video/simplefb.c)0
-rw-r--r--drivers/video/fbdev/sis/300vtbl.h (renamed from drivers/video/sis/300vtbl.h)0
-rw-r--r--drivers/video/fbdev/sis/310vtbl.h (renamed from drivers/video/sis/310vtbl.h)0
-rw-r--r--drivers/video/fbdev/sis/Makefile (renamed from drivers/video/sis/Makefile)0
-rw-r--r--drivers/video/fbdev/sis/init.c (renamed from drivers/video/sis/init.c)0
-rw-r--r--drivers/video/fbdev/sis/init.h (renamed from drivers/video/sis/init.h)0
-rw-r--r--drivers/video/fbdev/sis/init301.c (renamed from drivers/video/sis/init301.c)0
-rw-r--r--drivers/video/fbdev/sis/init301.h (renamed from drivers/video/sis/init301.h)0
-rw-r--r--drivers/video/fbdev/sis/initdef.h (renamed from drivers/video/sis/initdef.h)0
-rw-r--r--drivers/video/fbdev/sis/initextlfb.c (renamed from drivers/video/sis/initextlfb.c)0
-rw-r--r--drivers/video/fbdev/sis/oem300.h (renamed from drivers/video/sis/oem300.h)0
-rw-r--r--drivers/video/fbdev/sis/oem310.h (renamed from drivers/video/sis/oem310.h)0
-rw-r--r--drivers/video/fbdev/sis/sis.h (renamed from drivers/video/sis/sis.h)0
-rw-r--r--drivers/video/fbdev/sis/sis_accel.c (renamed from drivers/video/sis/sis_accel.c)0
-rw-r--r--drivers/video/fbdev/sis/sis_accel.h (renamed from drivers/video/sis/sis_accel.h)0
-rw-r--r--drivers/video/fbdev/sis/sis_main.c (renamed from drivers/video/sis/sis_main.c)0
-rw-r--r--drivers/video/fbdev/sis/sis_main.h (renamed from drivers/video/sis/sis_main.h)0
-rw-r--r--drivers/video/fbdev/sis/vgatypes.h (renamed from drivers/video/sis/vgatypes.h)0
-rw-r--r--drivers/video/fbdev/sis/vstruct.h (renamed from drivers/video/sis/vstruct.h)0
-rw-r--r--drivers/video/fbdev/skeletonfb.c (renamed from drivers/video/skeletonfb.c)0
-rw-r--r--drivers/video/fbdev/sm501fb.c (renamed from drivers/video/sm501fb.c)0
-rw-r--r--drivers/video/fbdev/smscufx.c (renamed from drivers/video/smscufx.c)0
-rw-r--r--drivers/video/fbdev/ssd1307fb.c (renamed from drivers/video/ssd1307fb.c)0
-rw-r--r--drivers/video/fbdev/sstfb.c (renamed from drivers/video/sstfb.c)0
-rw-r--r--drivers/video/fbdev/sticore.h (renamed from drivers/video/sticore.h)0
-rw-r--r--drivers/video/fbdev/stifb.c (renamed from drivers/video/stifb.c)0
-rw-r--r--drivers/video/fbdev/sunxvr1000.c (renamed from drivers/video/sunxvr1000.c)0
-rw-r--r--drivers/video/fbdev/sunxvr2500.c (renamed from drivers/video/sunxvr2500.c)0
-rw-r--r--drivers/video/fbdev/sunxvr500.c (renamed from drivers/video/sunxvr500.c)0
-rw-r--r--drivers/video/fbdev/tcx.c (renamed from drivers/video/tcx.c)0
-rw-r--r--drivers/video/fbdev/tdfxfb.c (renamed from drivers/video/tdfxfb.c)0
-rw-r--r--drivers/video/fbdev/tgafb.c (renamed from drivers/video/tgafb.c)0
-rw-r--r--drivers/video/fbdev/tmiofb.c (renamed from drivers/video/tmiofb.c)0
-rw-r--r--drivers/video/fbdev/tridentfb.c (renamed from drivers/video/tridentfb.c)0
-rw-r--r--drivers/video/fbdev/udlfb.c (renamed from drivers/video/udlfb.c)0
-rw-r--r--drivers/video/fbdev/uvesafb.c (renamed from drivers/video/uvesafb.c)0
-rw-r--r--drivers/video/fbdev/valkyriefb.c (renamed from drivers/video/valkyriefb.c)0
-rw-r--r--drivers/video/fbdev/valkyriefb.h (renamed from drivers/video/valkyriefb.h)0
-rw-r--r--drivers/video/fbdev/vermilion/Makefile (renamed from drivers/video/vermilion/Makefile)0
-rw-r--r--drivers/video/fbdev/vermilion/cr_pll.c (renamed from drivers/video/vermilion/cr_pll.c)0
-rw-r--r--drivers/video/fbdev/vermilion/vermilion.c (renamed from drivers/video/vermilion/vermilion.c)0
-rw-r--r--drivers/video/fbdev/vermilion/vermilion.h (renamed from drivers/video/vermilion/vermilion.h)0
-rw-r--r--drivers/video/fbdev/vesafb.c (renamed from drivers/video/vesafb.c)0
-rw-r--r--drivers/video/fbdev/vfb.c (renamed from drivers/video/vfb.c)0
-rw-r--r--drivers/video/fbdev/vga16fb.c (renamed from drivers/video/vga16fb.c)0
-rw-r--r--drivers/video/fbdev/via/Makefile (renamed from drivers/video/via/Makefile)0
-rw-r--r--drivers/video/fbdev/via/accel.c (renamed from drivers/video/via/accel.c)0
-rw-r--r--drivers/video/fbdev/via/accel.h (renamed from drivers/video/via/accel.h)0
-rw-r--r--drivers/video/fbdev/via/chip.h (renamed from drivers/video/via/chip.h)0
-rw-r--r--drivers/video/fbdev/via/debug.h (renamed from drivers/video/via/debug.h)0
-rw-r--r--drivers/video/fbdev/via/dvi.c (renamed from drivers/video/via/dvi.c)0
-rw-r--r--drivers/video/fbdev/via/dvi.h (renamed from drivers/video/via/dvi.h)0
-rw-r--r--drivers/video/fbdev/via/global.c (renamed from drivers/video/via/global.c)0
-rw-r--r--drivers/video/fbdev/via/global.h (renamed from drivers/video/via/global.h)0
-rw-r--r--drivers/video/fbdev/via/hw.c (renamed from drivers/video/via/hw.c)0
-rw-r--r--drivers/video/fbdev/via/hw.h (renamed from drivers/video/via/hw.h)0
-rw-r--r--drivers/video/fbdev/via/ioctl.c (renamed from drivers/video/via/ioctl.c)0
-rw-r--r--drivers/video/fbdev/via/ioctl.h (renamed from drivers/video/via/ioctl.h)0
-rw-r--r--drivers/video/fbdev/via/lcd.c (renamed from drivers/video/via/lcd.c)0
-rw-r--r--drivers/video/fbdev/via/lcd.h (renamed from drivers/video/via/lcd.h)0
-rw-r--r--drivers/video/fbdev/via/share.h (renamed from drivers/video/via/share.h)0
-rw-r--r--drivers/video/fbdev/via/tblDPASetting.c (renamed from drivers/video/via/tblDPASetting.c)0
-rw-r--r--drivers/video/fbdev/via/tblDPASetting.h (renamed from drivers/video/via/tblDPASetting.h)0
-rw-r--r--drivers/video/fbdev/via/via-core.c (renamed from drivers/video/via/via-core.c)0
-rw-r--r--drivers/video/fbdev/via/via-gpio.c (renamed from drivers/video/via/via-gpio.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux.c (renamed from drivers/video/via/via_aux.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux.h (renamed from drivers/video/via/via_aux.h)0
-rw-r--r--drivers/video/fbdev/via/via_aux_ch7301.c (renamed from drivers/video/via/via_aux_ch7301.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux_edid.c (renamed from drivers/video/via/via_aux_edid.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux_sii164.c (renamed from drivers/video/via/via_aux_sii164.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux_vt1621.c (renamed from drivers/video/via/via_aux_vt1621.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux_vt1622.c (renamed from drivers/video/via/via_aux_vt1622.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux_vt1625.c (renamed from drivers/video/via/via_aux_vt1625.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux_vt1631.c (renamed from drivers/video/via/via_aux_vt1631.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux_vt1632.c (renamed from drivers/video/via/via_aux_vt1632.c)0
-rw-r--r--drivers/video/fbdev/via/via_aux_vt1636.c (renamed from drivers/video/via/via_aux_vt1636.c)0
-rw-r--r--drivers/video/fbdev/via/via_clock.c (renamed from drivers/video/via/via_clock.c)0
-rw-r--r--drivers/video/fbdev/via/via_clock.h (renamed from drivers/video/via/via_clock.h)0
-rw-r--r--drivers/video/fbdev/via/via_i2c.c (renamed from drivers/video/via/via_i2c.c)0
-rw-r--r--drivers/video/fbdev/via/via_modesetting.c (renamed from drivers/video/via/via_modesetting.c)0
-rw-r--r--drivers/video/fbdev/via/via_modesetting.h (renamed from drivers/video/via/via_modesetting.h)0
-rw-r--r--drivers/video/fbdev/via/via_utility.c (renamed from drivers/video/via/via_utility.c)0
-rw-r--r--drivers/video/fbdev/via/via_utility.h (renamed from drivers/video/via/via_utility.h)0
-rw-r--r--drivers/video/fbdev/via/viafbdev.c (renamed from drivers/video/via/viafbdev.c)0
-rw-r--r--drivers/video/fbdev/via/viafbdev.h (renamed from drivers/video/via/viafbdev.h)0
-rw-r--r--drivers/video/fbdev/via/viamode.c (renamed from drivers/video/via/viamode.c)0
-rw-r--r--drivers/video/fbdev/via/viamode.h (renamed from drivers/video/via/viamode.h)0
-rw-r--r--drivers/video/fbdev/via/vt1636.c (renamed from drivers/video/via/vt1636.c)0
-rw-r--r--drivers/video/fbdev/via/vt1636.h (renamed from drivers/video/via/vt1636.h)0
-rw-r--r--drivers/video/fbdev/vt8500lcdfb.c (renamed from drivers/video/vt8500lcdfb.c)0
-rw-r--r--drivers/video/fbdev/vt8500lcdfb.h (renamed from drivers/video/vt8500lcdfb.h)0
-rw-r--r--drivers/video/fbdev/vt8623fb.c (renamed from drivers/video/vt8623fb.c)0
-rw-r--r--drivers/video/fbdev/w100fb.c (renamed from drivers/video/w100fb.c)0
-rw-r--r--drivers/video/fbdev/w100fb.h (renamed from drivers/video/w100fb.h)0
-rw-r--r--drivers/video/fbdev/wm8505fb.c (renamed from drivers/video/wm8505fb.c)0
-rw-r--r--drivers/video/fbdev/wm8505fb_regs.h (renamed from drivers/video/wm8505fb_regs.h)0
-rw-r--r--drivers/video/fbdev/wmt_ge_rops.c (renamed from drivers/video/wmt_ge_rops.c)2
-rw-r--r--drivers/video/fbdev/wmt_ge_rops.h (renamed from drivers/video/wmt_ge_rops.h)0
-rw-r--r--drivers/video/fbdev/xen-fbfront.c (renamed from drivers/video/xen-fbfront.c)0
-rw-r--r--drivers/video/fbdev/xilinxfb.c (renamed from drivers/video/xilinxfb.c)0
-rw-r--r--drivers/video/omap2/Kconfig10
-rw-r--r--drivers/xen/manage.c32
-rw-r--r--drivers/xen/xen-pciback/pciback_ops.c3
-rw-r--r--drivers/xen/xen-pciback/vpci.c2
-rw-r--r--drivers/xen/xenbus/xenbus_xs.c44
-rw-r--r--fs/xfs/xfs_aops.c51
-rw-r--r--fs/xfs/xfs_bmap.c17
-rw-r--r--fs/xfs/xfs_bmap_util.c13
-rw-r--r--fs/xfs/xfs_buf.c16
-rw-r--r--fs/xfs/xfs_file.c2
-rw-r--r--fs/xfs/xfs_inode.c5
-rw-r--r--fs/xfs/xfs_inode.h2
-rw-r--r--fs/xfs/xfs_iops.c20
-rw-r--r--fs/xfs/xfs_log.c53
-rw-r--r--fs/xfs/xfs_trace.h1
-rw-r--r--include/linux/filter.h1
-rw-r--r--include/linux/ipmi.h2
-rw-r--r--include/linux/ipmi_smi.h11
-rw-r--r--include/linux/netfilter/nf_conntrack_proto_gre.h1
-rw-r--r--include/linux/of.h5
-rw-r--r--include/linux/reboot.h14
-rw-r--r--include/net/dst.h14
-rw-r--r--include/net/inet6_connection_sock.h2
-rw-r--r--include/net/inet_connection_sock.h2
-rw-r--r--include/net/ip.h13
-rw-r--r--include/net/ip6_route.h5
-rw-r--r--include/net/ip_tunnels.h2
-rw-r--r--include/net/ipv6.h2
-rw-r--r--include/net/netfilter/nf_tables_core.h10
-rw-r--r--include/net/sctp/structs.h14
-rw-r--r--include/net/xfrm.h6
-rw-r--r--kernel/locking/mutex-debug.c19
-rw-r--r--kernel/seccomp.c17
-rw-r--r--kernel/time/tick-common.c2
-rw-r--r--kernel/time/tick-sched.c5
-rw-r--r--kernel/trace/trace_functions.c16
-rw-r--r--kernel/trace/trace_uprobe.c6
-rw-r--r--kernel/user_namespace.c11
-rw-r--r--net/core/dev.c2
-rw-r--r--net/core/dst.c15
-rw-r--r--net/core/filter.c9
-rw-r--r--net/dccp/output.c2
-rw-r--r--net/decnet/dn_route.c16
-rw-r--r--net/ipv4/ip_output.c16
-rw-r--r--net/ipv4/ip_tunnel.c2
-rw-r--r--net/ipv4/ip_tunnel_core.c4
-rw-r--r--net/ipv4/ping.c15
-rw-r--r--net/ipv4/route.c6
-rw-r--r--net/ipv4/tcp_output.c2
-rw-r--r--net/ipv4/xfrm4_output.c2
-rw-r--r--net/ipv6/inet6_connection_sock.c3
-rw-r--r--net/ipv6/ip6_gre.c10
-rw-r--r--net/ipv6/ip6_output.c2
-rw-r--r--net/ipv6/route.c19
-rw-r--r--net/ipv6/sit.c5
-rw-r--r--net/ipv6/xfrm6_output.c2
-rw-r--r--net/l2tp/l2tp_core.c4
-rw-r--r--net/l2tp/l2tp_ip.c2
-rw-r--r--net/netfilter/nf_conntrack_core.c1
-rw-r--r--net/netfilter/nf_conntrack_pptp.c20
-rw-r--r--net/netfilter/nf_conntrack_proto_gre.c3
-rw-r--r--net/netfilter/nf_tables_core.c3
-rw-r--r--net/netfilter/nft_cmp.c2
-rw-r--r--net/openvswitch/vport-gre.c2
-rw-r--r--net/sctp/associola.c82
-rw-r--r--net/sctp/protocol.c2
-rw-r--r--net/sctp/sm_statefuns.c2
-rw-r--r--net/sctp/socket.c6
-rw-r--r--net/sctp/ulpevent.c8
-rw-r--r--net/xfrm/xfrm_policy.c2
-rw-r--r--tools/lib/lockdep/Makefile15
-rw-r--r--tools/lib/lockdep/uinclude/linux/lockdep.h3
-rw-r--r--tools/lib/traceevent/event-parse.c109
-rw-r--r--tools/perf/Documentation/perf-bench.txt22
-rw-r--r--tools/perf/Documentation/perf-top.txt1
-rw-r--r--tools/perf/Makefile.perf4
-rw-r--r--tools/perf/bench/numa.c4
-rw-r--r--tools/perf/builtin-stat.c11
-rw-r--r--tools/perf/config/Makefile7
-rw-r--r--tools/perf/tests/code-reading.c1
-rw-r--r--tools/perf/util/probe-finder.c15
-rw-r--r--virt/kvm/ioapic.c25
646 files changed, 5987 insertions, 4889 deletions
diff --git a/Documentation/DocBook/device-drivers.tmpl b/Documentation/DocBook/device-drivers.tmpl
index f5170082bdb3..cc63f30de166 100644
--- a/Documentation/DocBook/device-drivers.tmpl
+++ b/Documentation/DocBook/device-drivers.tmpl
@@ -276,7 +276,7 @@ X!Isound/sound_firmware.c
276 </para> 276 </para>
277 277
278 <sect1><title>Frame Buffer Memory</title> 278 <sect1><title>Frame Buffer Memory</title>
279!Edrivers/video/fbmem.c 279!Edrivers/video/fbdev/core/fbmem.c
280 </sect1> 280 </sect1>
281<!-- 281<!--
282 <sect1><title>Frame Buffer Console</title> 282 <sect1><title>Frame Buffer Console</title>
@@ -284,7 +284,7 @@ X!Edrivers/video/console/fbcon.c
284 </sect1> 284 </sect1>
285--> 285-->
286 <sect1><title>Frame Buffer Colormap</title> 286 <sect1><title>Frame Buffer Colormap</title>
287!Edrivers/video/fbcmap.c 287!Edrivers/video/fbdev/core/fbcmap.c
288 </sect1> 288 </sect1>
289<!-- FIXME: 289<!-- FIXME:
290 drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment 290 drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment
@@ -294,11 +294,11 @@ X!Idrivers/video/fbgen.c
294 </sect1> 294 </sect1>
295KAO --> 295KAO -->
296 <sect1><title>Frame Buffer Video Mode Database</title> 296 <sect1><title>Frame Buffer Video Mode Database</title>
297!Idrivers/video/modedb.c 297!Idrivers/video/fbdev/core/modedb.c
298!Edrivers/video/modedb.c 298!Edrivers/video/fbdev/core/modedb.c
299 </sect1> 299 </sect1>
300 <sect1><title>Frame Buffer Macintosh Video Mode Database</title> 300 <sect1><title>Frame Buffer Macintosh Video Mode Database</title>
301!Edrivers/video/macmodes.c 301!Edrivers/video/fbdev/macmodes.c
302 </sect1> 302 </sect1>
303 <sect1><title>Frame Buffer Fonts</title> 303 <sect1><title>Frame Buffer Fonts</title>
304 <para> 304 <para>
diff --git a/Documentation/devicetree/bindings/arm/marvell,kirkwood.txt b/Documentation/devicetree/bindings/arm/marvell,kirkwood.txt
new file mode 100644
index 000000000000..925ecbf6e7b7
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/marvell,kirkwood.txt
@@ -0,0 +1,97 @@
1Marvell Kirkwood SoC Family Device Tree Bindings
2------------------------------------------------
3
4Boards with a SoC of the Marvell Kirkwook family, eg 88f6281
5
6* Required root node properties:
7compatible: must contain "marvell,kirkwood"
8
9In addition, the above compatible shall be extended with the specific
10SoC. Currently known SoC compatibles are:
11
12"marvell,kirkwood-88f6192"
13"marvell,kirkwood-88f6281"
14"marvell,kirkwood-88f6282"
15"marvell,kirkwood-88f6283"
16"marvell,kirkwood-88f6702"
17"marvell,kirkwood-98DX4122"
18
19And in addition, the compatible shall be extended with the specific
20board. Currently known boards are:
21
22"buffalo,lschlv2"
23"buffalo,lsxhl"
24"buffalo,lsxl"
25"dlink,dns-320"
26"dlink,dns-320-a1"
27"dlink,dns-325"
28"dlink,dns-325-a1"
29"dlink,dns-kirkwood"
30"excito,b3"
31"globalscale,dreamplug-003-ds2001"
32"globalscale,guruplug"
33"globalscale,guruplug-server-plus"
34"globalscale,sheevaplug"
35"globalscale,sheevaplug"
36"globalscale,sheevaplug-esata"
37"globalscale,sheevaplug-esata-rev13"
38"iom,iconnect"
39"iom,iconnect-1.1"
40"iom,ix2-200"
41"keymile,km_kirkwood"
42"lacie,cloudbox"
43"lacie,inetspace_v2"
44"lacie,laplug"
45"lacie,netspace_lite_v2"
46"lacie,netspace_max_v2"
47"lacie,netspace_mini_v2"
48"lacie,netspace_v2"
49"marvell,db-88f6281-bp"
50"marvell,db-88f6282-bp"
51"marvell,mv88f6281gtw-ge"
52"marvell,rd88f6281"
53"marvell,rd88f6281"
54"marvell,rd88f6281-a0"
55"marvell,rd88f6281-a1"
56"mpl,cec4"
57"mpl,cec4-10"
58"netgear,readynas"
59"netgear,readynas"
60"netgear,readynas-duo-v2"
61"netgear,readynas-nv+-v2"
62"plathome,openblocks-a6"
63"plathome,openblocks-a7"
64"raidsonic,ib-nas6210"
65"raidsonic,ib-nas6210-b"
66"raidsonic,ib-nas6220"
67"raidsonic,ib-nas6220-b"
68"raidsonic,ib-nas62x0"
69"seagate,dockstar"
70"seagate,goflexnet"
71"synology,ds109"
72"synology,ds110jv10"
73"synology,ds110jv20"
74"synology,ds110jv30"
75"synology,ds111"
76"synology,ds209"
77"synology,ds210jv10"
78"synology,ds210jv20"
79"synology,ds212"
80"synology,ds212jv10"
81"synology,ds212jv20"
82"synology,ds212pv10"
83"synology,ds409"
84"synology,ds409slim"
85"synology,ds410j"
86"synology,ds411"
87"synology,ds411j"
88"synology,ds411slim"
89"synology,ds413jv10"
90"synology,rs212"
91"synology,rs409"
92"synology,rs411"
93"synology,rs812"
94"usi,topkick"
95"usi,topkick-1281P2"
96"zyxel,nsa310"
97"zyxel,nsa310a"
diff --git a/Documentation/devicetree/bindings/i2c/trivial-devices.txt b/Documentation/devicetree/bindings/i2c/trivial-devices.txt
index 71724d026ffa..bef86e57c388 100644
--- a/Documentation/devicetree/bindings/i2c/trivial-devices.txt
+++ b/Documentation/devicetree/bindings/i2c/trivial-devices.txt
@@ -13,8 +13,22 @@ ad,ad7414 SMBus/I2C Digital Temperature Sensor in 6-Pin SOT with SMBus Alert an
13ad,adm9240 ADM9240: Complete System Hardware Monitor for uProcessor-Based Systems 13ad,adm9240 ADM9240: Complete System Hardware Monitor for uProcessor-Based Systems
14adi,adt7461 +/-1C TDM Extended Temp Range I.C 14adi,adt7461 +/-1C TDM Extended Temp Range I.C
15adt7461 +/-1C TDM Extended Temp Range I.C 15adt7461 +/-1C TDM Extended Temp Range I.C
16adi,adt7473 +/-1C TDM Extended Temp Range I.C
17adi,adt7475 +/-1C TDM Extended Temp Range I.C
18adi,adt7476 +/-1C TDM Extended Temp Range I.C
19adi,adt7490 +/-1C TDM Extended Temp Range I.C
16at,24c08 i2c serial eeprom (24cxx) 20at,24c08 i2c serial eeprom (24cxx)
21atmel,24c00 i2c serial eeprom (24cxx)
22atmel,24c01 i2c serial eeprom (24cxx)
17atmel,24c02 i2c serial eeprom (24cxx) 23atmel,24c02 i2c serial eeprom (24cxx)
24atmel,24c04 i2c serial eeprom (24cxx)
25atmel,24c16 i2c serial eeprom (24cxx)
26atmel,24c32 i2c serial eeprom (24cxx)
27atmel,24c64 i2c serial eeprom (24cxx)
28atmel,24c128 i2c serial eeprom (24cxx)
29atmel,24c256 i2c serial eeprom (24cxx)
30atmel,24c512 i2c serial eeprom (24cxx)
31atmel,24c1024 i2c serial eeprom (24cxx)
18atmel,at97sc3204t i2c trusted platform module (TPM) 32atmel,at97sc3204t i2c trusted platform module (TPM)
19capella,cm32181 CM32181: Ambient Light Sensor 33capella,cm32181 CM32181: Ambient Light Sensor
20catalyst,24c32 i2c serial eeprom 34catalyst,24c32 i2c serial eeprom
@@ -46,8 +60,10 @@ maxim,ds1050 5 Bit Programmable, Pulse-Width Modulator
46maxim,max1237 Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs 60maxim,max1237 Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs
47maxim,max6625 9-Bit/12-Bit Temperature Sensors with I²C-Compatible Serial Interface 61maxim,max6625 9-Bit/12-Bit Temperature Sensors with I²C-Compatible Serial Interface
48mc,rv3029c2 Real Time Clock Module with I2C-Bus 62mc,rv3029c2 Real Time Clock Module with I2C-Bus
63national,lm63 Temperature sensor with integrated fan control
49national,lm75 I2C TEMP SENSOR 64national,lm75 I2C TEMP SENSOR
50national,lm80 Serial Interface ACPI-Compatible Microprocessor System Hardware Monitor 65national,lm80 Serial Interface ACPI-Compatible Microprocessor System Hardware Monitor
66national,lm85 Temperature sensor with integrated fan control
51national,lm92 ±0.33°C Accurate, 12-Bit + Sign Temperature Sensor and Thermal Window Comparator with Two-Wire Interface 67national,lm92 ±0.33°C Accurate, 12-Bit + Sign Temperature Sensor and Thermal Window Comparator with Two-Wire Interface
52nuvoton,npct501 i2c trusted platform module (TPM) 68nuvoton,npct501 i2c trusted platform module (TPM)
53nxp,pca9556 Octal SMBus and I2C registered interface 69nxp,pca9556 Octal SMBus and I2C registered interface
diff --git a/Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt
index c119debe6bab..67a5db95f189 100644
--- a/Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt
@@ -119,7 +119,7 @@ Optional Properties (for HDMI pins):
119Example: 119Example:
120// pin controller node 120// pin controller node
121pinctrl@35004800 { 121pinctrl@35004800 {
122 compatible = "brcmbcm11351-pinctrl"; 122 compatible = "brcm,bcm11351-pinctrl";
123 reg = <0x35004800 0x430>; 123 reg = <0x35004800 0x430>;
124 124
125 // pin configuration node 125 // pin configuration node
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 0f01c9bf19c8..abc308083acb 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -22,6 +22,7 @@ auo AU Optronics Corporation
22avago Avago Technologies 22avago Avago Technologies
23bosch Bosch Sensortec GmbH 23bosch Bosch Sensortec GmbH
24brcm Broadcom Corporation 24brcm Broadcom Corporation
25buffalo Buffalo, Inc.
25calxeda Calxeda 26calxeda Calxeda
26capella Capella Microsystems, Inc 27capella Capella Microsystems, Inc
27cavium Cavium, Inc. 28cavium Cavium, Inc.
@@ -33,15 +34,18 @@ cortina Cortina Systems, Inc.
33crystalfontz Crystalfontz America, Inc. 34crystalfontz Crystalfontz America, Inc.
34dallas Maxim Integrated Products (formerly Dallas Semiconductor) 35dallas Maxim Integrated Products (formerly Dallas Semiconductor)
35davicom DAVICOM Semiconductor, Inc. 36davicom DAVICOM Semiconductor, Inc.
36dlink D-Link Systems, Inc.
37denx Denx Software Engineering 37denx Denx Software Engineering
38digi Digi International Inc.
39dlink D-Link Corporation
38dmo Data Modul AG 40dmo Data Modul AG
41ebv EBV Elektronik
39edt Emerging Display Technologies 42edt Emerging Display Technologies
40emmicro EM Microelectronic 43emmicro EM Microelectronic
41epfl Ecole Polytechnique Fédérale de Lausanne 44epfl Ecole Polytechnique Fédérale de Lausanne
42epson Seiko Epson Corp. 45epson Seiko Epson Corp.
43est ESTeem Wireless Modems 46est ESTeem Wireless Modems
44eukrea Eukréa Electromatique 47eukrea Eukréa Electromatique
48excito Excito
45fsl Freescale Semiconductor 49fsl Freescale Semiconductor
46GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc. 50GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc.
47gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. 51gef GE Fanuc Intelligent Platforms Embedded Systems, Inc.
@@ -53,13 +57,17 @@ haoyu Haoyu Microelectronic Co. Ltd.
53hisilicon Hisilicon Limited. 57hisilicon Hisilicon Limited.
54honeywell Honeywell 58honeywell Honeywell
55hp Hewlett Packard 59hp Hewlett Packard
60i2se I2SE GmbH
56ibm International Business Machines (IBM) 61ibm International Business Machines (IBM)
57idt Integrated Device Technologies, Inc. 62idt Integrated Device Technologies, Inc.
63iom Iomega Corporation
58img Imagination Technologies Ltd. 64img Imagination Technologies Ltd.
59intel Intel Corporation 65intel Intel Corporation
60intercontrol Inter Control Group 66intercontrol Inter Control Group
67isee ISEE 2007 S.L.
61isl Intersil 68isl Intersil
62karo Ka-Ro electronics GmbH 69karo Ka-Ro electronics GmbH
70keymile Keymile GmbH
63lacie LaCie 71lacie LaCie
64lantiq Lantiq Semiconductor 72lantiq Lantiq Semiconductor
65lg LG Corporation 73lg LG Corporation
@@ -70,9 +78,12 @@ maxim Maxim Integrated Products
70microchip Microchip Technology Inc. 78microchip Microchip Technology Inc.
71mosaixtech Mosaix Technologies, Inc. 79mosaixtech Mosaix Technologies, Inc.
72moxa Moxa 80moxa Moxa
81mpl MPL AG
82mxicy Macronix International Co., Ltd.
73national National Semiconductor 83national National Semiconductor
74neonode Neonode Inc. 84neonode Neonode Inc.
75netgear NETGEAR 85netgear NETGEAR
86newhaven Newhaven Display International
76nintendo Nintendo 87nintendo Nintendo
77nokia Nokia 88nokia Nokia
78nvidia NVIDIA 89nvidia NVIDIA
@@ -82,10 +93,12 @@ opencores OpenCores.org
82panasonic Panasonic Corporation 93panasonic Panasonic Corporation
83phytec PHYTEC Messtechnik GmbH 94phytec PHYTEC Messtechnik GmbH
84picochip Picochip Ltd 95picochip Picochip Ltd
96plathome Plat'Home Co., Ltd.
85powervr PowerVR (deprecated, use img) 97powervr PowerVR (deprecated, use img)
86qca Qualcomm Atheros, Inc. 98qca Qualcomm Atheros, Inc.
87qcom Qualcomm Technologies, Inc 99qcom Qualcomm Technologies, Inc
88qnap QNAP Systems, Inc. 100qnap QNAP Systems, Inc.
101raidsonic RaidSonic Technology GmbH
89ralink Mediatek/Ralink Technology Corp. 102ralink Mediatek/Ralink Technology Corp.
90ramtron Ramtron International 103ramtron Ramtron International
91realtek Realtek Semiconductor Corp. 104realtek Realtek Semiconductor Corp.
@@ -95,6 +108,7 @@ rockchip Fuzhou Rockchip Electronics Co., Ltd
95samsung Samsung Semiconductor 108samsung Samsung Semiconductor
96sbs Smart Battery System 109sbs Smart Battery System
97schindler Schindler 110schindler Schindler
111seagate Seagate Technology PLC
98sil Silicon Image 112sil Silicon Image
99silabs Silicon Laboratories 113silabs Silicon Laboratories
100simtek 114simtek
@@ -111,6 +125,7 @@ ti Texas Instruments
111tlm Trusted Logic Mobility 125tlm Trusted Logic Mobility
112toshiba Toshiba Corporation 126toshiba Toshiba Corporation
113toumaz Toumaz 127toumaz Toumaz
128usi Universal Scientifc Industrial Co., Ltd.
114v3 V3 Semiconductor 129v3 V3 Semiconductor
115via VIA Technologies, Inc. 130via VIA Technologies, Inc.
116voipac Voipac Technologies s.r.o. 131voipac Voipac Technologies s.r.o.
@@ -119,3 +134,4 @@ wlf Wolfson Microelectronics
119wm Wondermedia Technologies, Inc. 134wm Wondermedia Technologies, Inc.
120xes Extreme Engineering Solutions (X-ES) 135xes Extreme Engineering Solutions (X-ES)
121xlnx Xilinx 136xlnx Xilinx
137zyxel ZyXEL Communications Corp.
diff --git a/MAINTAINERS b/MAINTAINERS
index 6dc67b1fdb50..80399fff805d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6782,7 +6782,7 @@ PERFORMANCE EVENTS SUBSYSTEM
6782M: Peter Zijlstra <a.p.zijlstra@chello.nl> 6782M: Peter Zijlstra <a.p.zijlstra@chello.nl>
6783M: Paul Mackerras <paulus@samba.org> 6783M: Paul Mackerras <paulus@samba.org>
6784M: Ingo Molnar <mingo@redhat.com> 6784M: Ingo Molnar <mingo@redhat.com>
6785M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> 6785M: Arnaldo Carvalho de Melo <acme@kernel.org>
6786L: linux-kernel@vger.kernel.org 6786L: linux-kernel@vger.kernel.org
6787T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core 6787T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
6788S: Supported 6788S: Supported
diff --git a/arch/arm/configs/bcm_defconfig b/arch/arm/configs/bcm_defconfig
index 01004640ee4d..3df3f3a79ef4 100644
--- a/arch/arm/configs/bcm_defconfig
+++ b/arch/arm/configs/bcm_defconfig
@@ -132,7 +132,7 @@ CONFIG_CRC_ITU_T=y
132CONFIG_CRC7=y 132CONFIG_CRC7=y
133CONFIG_XZ_DEC=y 133CONFIG_XZ_DEC=y
134CONFIG_AVERAGE=y 134CONFIG_AVERAGE=y
135CONFIG_PINCTRL_CAPRI=y 135CONFIG_PINCTRL_BCM281XX=y
136CONFIG_WATCHDOG=y 136CONFIG_WATCHDOG=y
137CONFIG_BCM_KONA_WDT=y 137CONFIG_BCM_KONA_WDT=y
138CONFIG_BCM_KONA_WDT_DEBUG=y 138CONFIG_BCM_KONA_WDT_DEBUG=y
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S
index e6f80fcf013b..a4acddad0c78 100644
--- a/arch/ia64/kernel/head.S
+++ b/arch/ia64/kernel/head.S
@@ -259,7 +259,7 @@ start_ap:
259 * Switch into virtual mode: 259 * Switch into virtual mode:
260 */ 260 */
261 movl r16=(IA64_PSR_IT|IA64_PSR_IC|IA64_PSR_DT|IA64_PSR_RT|IA64_PSR_DFH|IA64_PSR_BN \ 261 movl r16=(IA64_PSR_IT|IA64_PSR_IC|IA64_PSR_DT|IA64_PSR_RT|IA64_PSR_DFH|IA64_PSR_BN \
262 |IA64_PSR_DI|IA64_PSR_AC) 262 |IA64_PSR_DI)
263 ;; 263 ;;
264 mov cr.ipsr=r16 264 mov cr.ipsr=r16
265 movl r17=1f 265 movl r17=1f
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S
index 689ffcaa284e..18e794a57248 100644
--- a/arch/ia64/kernel/ivt.S
+++ b/arch/ia64/kernel/ivt.S
@@ -58,7 +58,7 @@
58#include <asm/unistd.h> 58#include <asm/unistd.h>
59#include <asm/errno.h> 59#include <asm/errno.h>
60 60
61#if 1 61#if 0
62# define PSR_DEFAULT_BITS psr.ac 62# define PSR_DEFAULT_BITS psr.ac
63#else 63#else
64# define PSR_DEFAULT_BITS 0 64# define PSR_DEFAULT_BITS 0
diff --git a/arch/ia64/kvm/vmm_ivt.S b/arch/ia64/kvm/vmm_ivt.S
index 24018484c6e9..397e34a63e18 100644
--- a/arch/ia64/kvm/vmm_ivt.S
+++ b/arch/ia64/kvm/vmm_ivt.S
@@ -64,7 +64,7 @@
64#include "kvm_minstate.h" 64#include "kvm_minstate.h"
65#include "vti.h" 65#include "vti.h"
66 66
67#if 1 67#if 0
68# define PSR_DEFAULT_BITS psr.ac 68# define PSR_DEFAULT_BITS psr.ac
69#else 69#else
70# define PSR_DEFAULT_BITS 0 70# define PSR_DEFAULT_BITS 0
diff --git a/arch/parisc/include/asm/shmparam.h b/arch/parisc/include/asm/shmparam.h
index 628ddc22faa8..afe1300ab667 100644
--- a/arch/parisc/include/asm/shmparam.h
+++ b/arch/parisc/include/asm/shmparam.h
@@ -1,8 +1,7 @@
1#ifndef _ASMPARISC_SHMPARAM_H 1#ifndef _ASMPARISC_SHMPARAM_H
2#define _ASMPARISC_SHMPARAM_H 2#define _ASMPARISC_SHMPARAM_H
3 3
4#define __ARCH_FORCE_SHMLBA 1 4#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */
5 5#define SHM_COLOUR 0x00400000 /* shared mappings colouring */
6#define SHMLBA 0x00400000 /* attach addr needs to be 4 Mb aligned */
7 6
8#endif /* _ASMPARISC_SHMPARAM_H */ 7#endif /* _ASMPARISC_SHMPARAM_H */
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
index a6ffc775a9f8..f6448c7c62b5 100644
--- a/arch/parisc/kernel/cache.c
+++ b/arch/parisc/kernel/cache.c
@@ -323,7 +323,8 @@ void flush_dcache_page(struct page *page)
323 * specifically accesses it, of course) */ 323 * specifically accesses it, of course) */
324 324
325 flush_tlb_page(mpnt, addr); 325 flush_tlb_page(mpnt, addr);
326 if (old_addr == 0 || (old_addr & (SHMLBA - 1)) != (addr & (SHMLBA - 1))) { 326 if (old_addr == 0 || (old_addr & (SHM_COLOUR - 1))
327 != (addr & (SHM_COLOUR - 1))) {
327 __flush_cache_page(mpnt, addr, page_to_phys(page)); 328 __flush_cache_page(mpnt, addr, page_to_phys(page));
328 if (old_addr) 329 if (old_addr)
329 printk(KERN_ERR "INEQUIVALENT ALIASES 0x%lx and 0x%lx in file %s\n", old_addr, addr, mpnt->vm_file ? (char *)mpnt->vm_file->f_path.dentry->d_name.name : "(null)"); 330 printk(KERN_ERR "INEQUIVALENT ALIASES 0x%lx and 0x%lx in file %s\n", old_addr, addr, mpnt->vm_file ? (char *)mpnt->vm_file->f_path.dentry->d_name.name : "(null)");
diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
index b7cadc4a06cd..31ffa9b55322 100644
--- a/arch/parisc/kernel/sys_parisc.c
+++ b/arch/parisc/kernel/sys_parisc.c
@@ -45,7 +45,7 @@
45 45
46static int get_offset(unsigned int last_mmap) 46static int get_offset(unsigned int last_mmap)
47{ 47{
48 return (last_mmap & (SHMLBA-1)) >> PAGE_SHIFT; 48 return (last_mmap & (SHM_COLOUR-1)) >> PAGE_SHIFT;
49} 49}
50 50
51static unsigned long shared_align_offset(unsigned int last_mmap, 51static unsigned long shared_align_offset(unsigned int last_mmap,
@@ -57,8 +57,8 @@ static unsigned long shared_align_offset(unsigned int last_mmap,
57static inline unsigned long COLOR_ALIGN(unsigned long addr, 57static inline unsigned long COLOR_ALIGN(unsigned long addr,
58 unsigned int last_mmap, unsigned long pgoff) 58 unsigned int last_mmap, unsigned long pgoff)
59{ 59{
60 unsigned long base = (addr+SHMLBA-1) & ~(SHMLBA-1); 60 unsigned long base = (addr+SHM_COLOUR-1) & ~(SHM_COLOUR-1);
61 unsigned long off = (SHMLBA-1) & 61 unsigned long off = (SHM_COLOUR-1) &
62 (shared_align_offset(last_mmap, pgoff) << PAGE_SHIFT); 62 (shared_align_offset(last_mmap, pgoff) << PAGE_SHIFT);
63 63
64 return base + off; 64 return base + off;
@@ -101,7 +101,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
101 if (flags & MAP_FIXED) { 101 if (flags & MAP_FIXED) {
102 if ((flags & MAP_SHARED) && last_mmap && 102 if ((flags & MAP_SHARED) && last_mmap &&
103 (addr - shared_align_offset(last_mmap, pgoff)) 103 (addr - shared_align_offset(last_mmap, pgoff))
104 & (SHMLBA - 1)) 104 & (SHM_COLOUR - 1))
105 return -EINVAL; 105 return -EINVAL;
106 goto found_addr; 106 goto found_addr;
107 } 107 }
@@ -122,7 +122,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
122 info.length = len; 122 info.length = len;
123 info.low_limit = mm->mmap_legacy_base; 123 info.low_limit = mm->mmap_legacy_base;
124 info.high_limit = mmap_upper_limit(); 124 info.high_limit = mmap_upper_limit();
125 info.align_mask = last_mmap ? (PAGE_MASK & (SHMLBA - 1)) : 0; 125 info.align_mask = last_mmap ? (PAGE_MASK & (SHM_COLOUR - 1)) : 0;
126 info.align_offset = shared_align_offset(last_mmap, pgoff); 126 info.align_offset = shared_align_offset(last_mmap, pgoff);
127 addr = vm_unmapped_area(&info); 127 addr = vm_unmapped_area(&info);
128 128
@@ -161,7 +161,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
161 if (flags & MAP_FIXED) { 161 if (flags & MAP_FIXED) {
162 if ((flags & MAP_SHARED) && last_mmap && 162 if ((flags & MAP_SHARED) && last_mmap &&
163 (addr - shared_align_offset(last_mmap, pgoff)) 163 (addr - shared_align_offset(last_mmap, pgoff))
164 & (SHMLBA - 1)) 164 & (SHM_COLOUR - 1))
165 return -EINVAL; 165 return -EINVAL;
166 goto found_addr; 166 goto found_addr;
167 } 167 }
@@ -182,7 +182,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
182 info.length = len; 182 info.length = len;
183 info.low_limit = PAGE_SIZE; 183 info.low_limit = PAGE_SIZE;
184 info.high_limit = mm->mmap_base; 184 info.high_limit = mm->mmap_base;
185 info.align_mask = last_mmap ? (PAGE_MASK & (SHMLBA - 1)) : 0; 185 info.align_mask = last_mmap ? (PAGE_MASK & (SHM_COLOUR - 1)) : 0;
186 info.align_offset = shared_align_offset(last_mmap, pgoff); 186 info.align_offset = shared_align_offset(last_mmap, pgoff);
187 addr = vm_unmapped_area(&info); 187 addr = vm_unmapped_area(&info);
188 if (!(addr & ~PAGE_MASK)) 188 if (!(addr & ~PAGE_MASK))
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S
index 80e5dd248934..83ead0ea127d 100644
--- a/arch/parisc/kernel/syscall_table.S
+++ b/arch/parisc/kernel/syscall_table.S
@@ -392,7 +392,7 @@
392 ENTRY_COMP(vmsplice) 392 ENTRY_COMP(vmsplice)
393 ENTRY_COMP(move_pages) /* 295 */ 393 ENTRY_COMP(move_pages) /* 295 */
394 ENTRY_SAME(getcpu) 394 ENTRY_SAME(getcpu)
395 ENTRY_SAME(epoll_pwait) 395 ENTRY_COMP(epoll_pwait)
396 ENTRY_COMP(statfs64) 396 ENTRY_COMP(statfs64)
397 ENTRY_COMP(fstatfs64) 397 ENTRY_COMP(fstatfs64)
398 ENTRY_COMP(kexec_load) /* 300 */ 398 ENTRY_COMP(kexec_load) /* 300 */
diff --git a/arch/parisc/lib/memcpy.c b/arch/parisc/lib/memcpy.c
index 413dc1769299..b2b441b32341 100644
--- a/arch/parisc/lib/memcpy.c
+++ b/arch/parisc/lib/memcpy.c
@@ -470,7 +470,7 @@ static unsigned long pa_memcpy(void *dstp, const void *srcp, unsigned long len)
470 return 0; 470 return 0;
471 471
472 /* if a load or store fault occured we can get the faulty addr */ 472 /* if a load or store fault occured we can get the faulty addr */
473 d = &__get_cpu_var(exception_data); 473 d = this_cpu_ptr(&exception_data);
474 fault_addr = d->fault_addr; 474 fault_addr = d->fault_addr;
475 475
476 /* error in load or store? */ 476 /* error in load or store? */
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
index 9d08c71a967e..747550762f3c 100644
--- a/arch/parisc/mm/fault.c
+++ b/arch/parisc/mm/fault.c
@@ -151,7 +151,7 @@ int fixup_exception(struct pt_regs *regs)
151 fix = search_exception_tables(regs->iaoq[0]); 151 fix = search_exception_tables(regs->iaoq[0]);
152 if (fix) { 152 if (fix) {
153 struct exception_data *d; 153 struct exception_data *d;
154 d = &__get_cpu_var(exception_data); 154 d = this_cpu_ptr(&exception_data);
155 d->fault_ip = regs->iaoq[0]; 155 d->fault_ip = regs->iaoq[0];
156 d->fault_space = regs->isr; 156 d->fault_space = regs->isr;
157 d->fault_addr = regs->ior; 157 d->fault_addr = regs->ior;
diff --git a/arch/s390/include/asm/sigp.h b/arch/s390/include/asm/sigp.h
index d091aa1aaf11..bf9c823d4020 100644
--- a/arch/s390/include/asm/sigp.h
+++ b/arch/s390/include/asm/sigp.h
@@ -31,4 +31,23 @@
31#define SIGP_STATUS_INCORRECT_STATE 0x00000200UL 31#define SIGP_STATUS_INCORRECT_STATE 0x00000200UL
32#define SIGP_STATUS_NOT_RUNNING 0x00000400UL 32#define SIGP_STATUS_NOT_RUNNING 0x00000400UL
33 33
34#ifndef __ASSEMBLY__
35
36static inline int __pcpu_sigp(u16 addr, u8 order, u32 parm, u32 *status)
37{
38 register unsigned int reg1 asm ("1") = parm;
39 int cc;
40
41 asm volatile(
42 " sigp %1,%2,0(%3)\n"
43 " ipm %0\n"
44 " srl %0,28\n"
45 : "=d" (cc), "+d" (reg1) : "d" (addr), "a" (order) : "cc");
46 if (status && cc == 1)
47 *status = reg1;
48 return cc;
49}
50
51#endif /* __ASSEMBLY__ */
52
34#endif /* __S390_ASM_SIGP_H */ 53#endif /* __S390_ASM_SIGP_H */
diff --git a/arch/s390/include/asm/smp.h b/arch/s390/include/asm/smp.h
index 160779394096..21703f85b48d 100644
--- a/arch/s390/include/asm/smp.h
+++ b/arch/s390/include/asm/smp.h
@@ -7,6 +7,8 @@
7#ifndef __ASM_SMP_H 7#ifndef __ASM_SMP_H
8#define __ASM_SMP_H 8#define __ASM_SMP_H
9 9
10#include <asm/sigp.h>
11
10#ifdef CONFIG_SMP 12#ifdef CONFIG_SMP
11 13
12#include <asm/lowcore.h> 14#include <asm/lowcore.h>
@@ -50,9 +52,18 @@ static inline int smp_store_status(int cpu) { return 0; }
50static inline int smp_vcpu_scheduled(int cpu) { return 1; } 52static inline int smp_vcpu_scheduled(int cpu) { return 1; }
51static inline void smp_yield_cpu(int cpu) { } 53static inline void smp_yield_cpu(int cpu) { }
52static inline void smp_yield(void) { } 54static inline void smp_yield(void) { }
53static inline void smp_stop_cpu(void) { }
54static inline void smp_fill_possible_mask(void) { } 55static inline void smp_fill_possible_mask(void) { }
55 56
57static inline void smp_stop_cpu(void)
58{
59 u16 pcpu = stap();
60
61 for (;;) {
62 __pcpu_sigp(pcpu, SIGP_STOP, 0, NULL);
63 cpu_relax();
64 }
65}
66
56#endif /* CONFIG_SMP */ 67#endif /* CONFIG_SMP */
57 68
58#ifdef CONFIG_HOTPLUG_CPU 69#ifdef CONFIG_HOTPLUG_CPU
diff --git a/arch/s390/include/uapi/asm/unistd.h b/arch/s390/include/uapi/asm/unistd.h
index 5eb5c9ddb120..3802d2d3a18d 100644
--- a/arch/s390/include/uapi/asm/unistd.h
+++ b/arch/s390/include/uapi/asm/unistd.h
@@ -282,7 +282,8 @@
282#define __NR_finit_module 344 282#define __NR_finit_module 344
283#define __NR_sched_setattr 345 283#define __NR_sched_setattr 345
284#define __NR_sched_getattr 346 284#define __NR_sched_getattr 346
285#define NR_syscalls 345 285#define __NR_renameat2 347
286#define NR_syscalls 348
286 287
287/* 288/*
288 * There are some system calls that are not present on 64 bit, some 289 * There are some system calls that are not present on 64 bit, some
diff --git a/arch/s390/kernel/compat_wrapper.c b/arch/s390/kernel/compat_wrapper.c
index 824c39dfddfc..45cdb37aa6f8 100644
--- a/arch/s390/kernel/compat_wrapper.c
+++ b/arch/s390/kernel/compat_wrapper.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Compat sytem call wrappers. 2 * Compat system call wrappers.
3 * 3 *
4 * Copyright IBM Corp. 2014 4 * Copyright IBM Corp. 2014
5 */ 5 */
@@ -213,3 +213,4 @@ COMPAT_SYSCALL_WRAP5(kcmp, pid_t, pid1, pid_t, pid2, int, type, unsigned long, i
213COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, flags); 213COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, flags);
214COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags); 214COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags);
215COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags); 215COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags);
216COMPAT_SYSCALL_WRAP5(renameat2, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, unsigned int, flags);
diff --git a/arch/s390/kernel/dumpstack.c b/arch/s390/kernel/dumpstack.c
index e6af9406987c..acb412442e5e 100644
--- a/arch/s390/kernel/dumpstack.c
+++ b/arch/s390/kernel/dumpstack.c
@@ -144,10 +144,10 @@ void show_registers(struct pt_regs *regs)
144 char *mode; 144 char *mode;
145 145
146 mode = user_mode(regs) ? "User" : "Krnl"; 146 mode = user_mode(regs) ? "User" : "Krnl";
147 printk("%s PSW : %p %p (%pSR)\n", 147 printk("%s PSW : %p %p", mode, (void *)regs->psw.mask, (void *)regs->psw.addr);
148 mode, (void *) regs->psw.mask, 148 if (!user_mode(regs))
149 (void *) regs->psw.addr, 149 printk(" (%pSR)", (void *)regs->psw.addr);
150 (void *) regs->psw.addr); 150 printk("\n");
151 printk(" R:%x T:%x IO:%x EX:%x Key:%x M:%x W:%x " 151 printk(" R:%x T:%x IO:%x EX:%x Key:%x M:%x W:%x "
152 "P:%x AS:%x CC:%x PM:%x", mask_bits(regs, PSW_MASK_PER), 152 "P:%x AS:%x CC:%x PM:%x", mask_bits(regs, PSW_MASK_PER),
153 mask_bits(regs, PSW_MASK_DAT), mask_bits(regs, PSW_MASK_IO), 153 mask_bits(regs, PSW_MASK_DAT), mask_bits(regs, PSW_MASK_IO),
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
index 4ac8fafec95f..1c82619eb4f7 100644
--- a/arch/s390/kernel/ptrace.c
+++ b/arch/s390/kernel/ptrace.c
@@ -64,7 +64,7 @@ void update_cr_regs(struct task_struct *task)
64 if (task->thread.per_flags & PER_FLAG_NO_TE) 64 if (task->thread.per_flags & PER_FLAG_NO_TE)
65 cr_new &= ~(1UL << 55); 65 cr_new &= ~(1UL << 55);
66 if (cr_new != cr) 66 if (cr_new != cr)
67 __ctl_load(cr, 0, 0); 67 __ctl_load(cr_new, 0, 0);
68 /* Set or clear transaction execution TDC bits 62 and 63. */ 68 /* Set or clear transaction execution TDC bits 62 and 63. */
69 __ctl_store(cr, 2, 2); 69 __ctl_store(cr, 2, 2);
70 cr_new = cr & ~3UL; 70 cr_new = cr & ~3UL;
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index f70f2489fa5f..88d1ca81e2dd 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -1027,3 +1027,35 @@ void __init setup_arch(char **cmdline_p)
1027 /* Setup zfcpdump support */ 1027 /* Setup zfcpdump support */
1028 setup_zfcpdump(); 1028 setup_zfcpdump();
1029} 1029}
1030
1031#ifdef CONFIG_32BIT
1032static int no_removal_warning __initdata;
1033
1034static int __init parse_no_removal_warning(char *str)
1035{
1036 no_removal_warning = 1;
1037 return 0;
1038}
1039__setup("no_removal_warning", parse_no_removal_warning);
1040
1041static int __init removal_warning(void)
1042{
1043 if (no_removal_warning)
1044 return 0;
1045 printk(KERN_ALERT "\n\n");
1046 printk(KERN_CONT "Warning - you are using a 31 bit kernel!\n\n");
1047 printk(KERN_CONT "We plan to remove 31 bit kernel support from the kernel sources in March 2015.\n");
1048 printk(KERN_CONT "Currently we assume that nobody is using the 31 bit kernel on old 31 bit\n");
1049 printk(KERN_CONT "hardware anymore. If you think that the code should not be removed and also\n");
1050 printk(KERN_CONT "future versions of the Linux kernel should be able to run in 31 bit mode\n");
1051 printk(KERN_CONT "please let us know. Please write to:\n");
1052 printk(KERN_CONT "linux390@de.ibm.com (mail address) and/or\n");
1053 printk(KERN_CONT "linux-s390@vger.kernel.org (mailing list).\n\n");
1054 printk(KERN_CONT "Thank you!\n\n");
1055 printk(KERN_CONT "If this kernel runs on a 64 bit machine you may consider using a 64 bit kernel.\n");
1056 printk(KERN_CONT "This message can be disabled with the \"no_removal_warning\" kernel parameter.\n");
1057 schedule_timeout_uninterruptible(300 * HZ);
1058 return 0;
1059}
1060early_initcall(removal_warning);
1061#endif
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 512ce1cde2a4..86e65ec3422b 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -82,21 +82,6 @@ DEFINE_MUTEX(smp_cpu_state_mutex);
82/* 82/*
83 * Signal processor helper functions. 83 * Signal processor helper functions.
84 */ 84 */
85static inline int __pcpu_sigp(u16 addr, u8 order, u32 parm, u32 *status)
86{
87 register unsigned int reg1 asm ("1") = parm;
88 int cc;
89
90 asm volatile(
91 " sigp %1,%2,0(%3)\n"
92 " ipm %0\n"
93 " srl %0,28\n"
94 : "=d" (cc), "+d" (reg1) : "d" (addr), "a" (order) : "cc");
95 if (status && cc == 1)
96 *status = reg1;
97 return cc;
98}
99
100static inline int __pcpu_sigp_relax(u16 addr, u8 order, u32 parm, u32 *status) 85static inline int __pcpu_sigp_relax(u16 addr, u8 order, u32 parm, u32 *status)
101{ 86{
102 int cc; 87 int cc;
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
index 542ef488bac1..fe5cdf29a001 100644
--- a/arch/s390/kernel/syscalls.S
+++ b/arch/s390/kernel/syscalls.S
@@ -355,3 +355,4 @@ SYSCALL(sys_kcmp,sys_kcmp,compat_sys_kcmp)
355SYSCALL(sys_finit_module,sys_finit_module,compat_sys_finit_module) 355SYSCALL(sys_finit_module,sys_finit_module,compat_sys_finit_module)
356SYSCALL(sys_sched_setattr,sys_sched_setattr,compat_sys_sched_setattr) /* 345 */ 356SYSCALL(sys_sched_setattr,sys_sched_setattr,compat_sys_sched_setattr) /* 345 */
357SYSCALL(sys_sched_getattr,sys_sched_getattr,compat_sys_sched_getattr) 357SYSCALL(sys_sched_getattr,sys_sched_getattr,compat_sys_sched_getattr)
358SYSCALL(sys_renameat2,sys_renameat2,compat_sys_renameat2)
diff --git a/arch/s390/lib/uaccess.c b/arch/s390/lib/uaccess.c
index 23f866b4c7f1..7416efe8eae4 100644
--- a/arch/s390/lib/uaccess.c
+++ b/arch/s390/lib/uaccess.c
@@ -338,9 +338,6 @@ static inline unsigned long strnlen_user_srst(const char __user *src,
338 register unsigned long reg0 asm("0") = 0; 338 register unsigned long reg0 asm("0") = 0;
339 unsigned long tmp1, tmp2; 339 unsigned long tmp1, tmp2;
340 340
341 if (unlikely(!size))
342 return 0;
343 update_primary_asce(current);
344 asm volatile( 341 asm volatile(
345 " la %2,0(%1)\n" 342 " la %2,0(%1)\n"
346 " la %3,0(%0,%1)\n" 343 " la %3,0(%0,%1)\n"
@@ -359,6 +356,8 @@ static inline unsigned long strnlen_user_srst(const char __user *src,
359 356
360unsigned long __strnlen_user(const char __user *src, unsigned long size) 357unsigned long __strnlen_user(const char __user *src, unsigned long size)
361{ 358{
359 if (unlikely(!size))
360 return 0;
362 update_primary_asce(current); 361 update_primary_asce(current);
363 return strnlen_user_srst(src, size); 362 return strnlen_user_srst(src, size);
364} 363}
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index 19f623f1f21c..2f51a998a67e 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -126,6 +126,133 @@ static inline int user_space_fault(struct pt_regs *regs)
126 return 0; 126 return 0;
127} 127}
128 128
129static int bad_address(void *p)
130{
131 unsigned long dummy;
132
133 return probe_kernel_address((unsigned long *)p, dummy);
134}
135
136#ifdef CONFIG_64BIT
137static void dump_pagetable(unsigned long asce, unsigned long address)
138{
139 unsigned long *table = __va(asce & PAGE_MASK);
140
141 pr_alert("AS:%016lx ", asce);
142 switch (asce & _ASCE_TYPE_MASK) {
143 case _ASCE_TYPE_REGION1:
144 table = table + ((address >> 53) & 0x7ff);
145 if (bad_address(table))
146 goto bad;
147 pr_cont("R1:%016lx ", *table);
148 if (*table & _REGION_ENTRY_INVALID)
149 goto out;
150 table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN);
151 /* fallthrough */
152 case _ASCE_TYPE_REGION2:
153 table = table + ((address >> 42) & 0x7ff);
154 if (bad_address(table))
155 goto bad;
156 pr_cont("R2:%016lx ", *table);
157 if (*table & _REGION_ENTRY_INVALID)
158 goto out;
159 table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN);
160 /* fallthrough */
161 case _ASCE_TYPE_REGION3:
162 table = table + ((address >> 31) & 0x7ff);
163 if (bad_address(table))
164 goto bad;
165 pr_cont("R3:%016lx ", *table);
166 if (*table & (_REGION_ENTRY_INVALID | _REGION3_ENTRY_LARGE))
167 goto out;
168 table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN);
169 /* fallthrough */
170 case _ASCE_TYPE_SEGMENT:
171 table = table + ((address >> 20) & 0x7ff);
172 if (bad_address(table))
173 goto bad;
174 pr_cont(KERN_CONT "S:%016lx ", *table);
175 if (*table & (_SEGMENT_ENTRY_INVALID | _SEGMENT_ENTRY_LARGE))
176 goto out;
177 table = (unsigned long *)(*table & _SEGMENT_ENTRY_ORIGIN);
178 }
179 table = table + ((address >> 12) & 0xff);
180 if (bad_address(table))
181 goto bad;
182 pr_cont("P:%016lx ", *table);
183out:
184 pr_cont("\n");
185 return;
186bad:
187 pr_cont("BAD\n");
188}
189
190#else /* CONFIG_64BIT */
191
192static void dump_pagetable(unsigned long asce, unsigned long address)
193{
194 unsigned long *table = __va(asce & PAGE_MASK);
195
196 pr_alert("AS:%08lx ", asce);
197 table = table + ((address >> 20) & 0x7ff);
198 if (bad_address(table))
199 goto bad;
200 pr_cont("S:%08lx ", *table);
201 if (*table & _SEGMENT_ENTRY_INVALID)
202 goto out;
203 table = (unsigned long *)(*table & _SEGMENT_ENTRY_ORIGIN);
204 table = table + ((address >> 12) & 0xff);
205 if (bad_address(table))
206 goto bad;
207 pr_cont("P:%08lx ", *table);
208out:
209 pr_cont("\n");
210 return;
211bad:
212 pr_cont("BAD\n");
213}
214
215#endif /* CONFIG_64BIT */
216
217static void dump_fault_info(struct pt_regs *regs)
218{
219 unsigned long asce;
220
221 pr_alert("Fault in ");
222 switch (regs->int_parm_long & 3) {
223 case 3:
224 pr_cont("home space ");
225 break;
226 case 2:
227 pr_cont("secondary space ");
228 break;
229 case 1:
230 pr_cont("access register ");
231 break;
232 case 0:
233 pr_cont("primary space ");
234 break;
235 }
236 pr_cont("mode while using ");
237 if (!user_space_fault(regs)) {
238 asce = S390_lowcore.kernel_asce;
239 pr_cont("kernel ");
240 }
241#ifdef CONFIG_PGSTE
242 else if ((current->flags & PF_VCPU) && S390_lowcore.gmap) {
243 struct gmap *gmap = (struct gmap *)S390_lowcore.gmap;
244 asce = gmap->asce;
245 pr_cont("gmap ");
246 }
247#endif
248 else {
249 asce = S390_lowcore.user_asce;
250 pr_cont("user ");
251 }
252 pr_cont("ASCE.\n");
253 dump_pagetable(asce, regs->int_parm_long & __FAIL_ADDR_MASK);
254}
255
129static inline void report_user_fault(struct pt_regs *regs, long signr) 256static inline void report_user_fault(struct pt_regs *regs, long signr)
130{ 257{
131 if ((task_pid_nr(current) > 1) && !show_unhandled_signals) 258 if ((task_pid_nr(current) > 1) && !show_unhandled_signals)
@@ -138,8 +265,9 @@ static inline void report_user_fault(struct pt_regs *regs, long signr)
138 regs->int_code); 265 regs->int_code);
139 print_vma_addr(KERN_CONT "in ", regs->psw.addr & PSW_ADDR_INSN); 266 print_vma_addr(KERN_CONT "in ", regs->psw.addr & PSW_ADDR_INSN);
140 printk(KERN_CONT "\n"); 267 printk(KERN_CONT "\n");
141 printk(KERN_ALERT "failing address: %lX\n", 268 printk(KERN_ALERT "failing address: %016lx TEID: %016lx\n",
142 regs->int_parm_long & __FAIL_ADDR_MASK); 269 regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long);
270 dump_fault_info(regs);
143 show_regs(regs); 271 show_regs(regs);
144} 272}
145 273
@@ -177,11 +305,13 @@ static noinline void do_no_context(struct pt_regs *regs)
177 address = regs->int_parm_long & __FAIL_ADDR_MASK; 305 address = regs->int_parm_long & __FAIL_ADDR_MASK;
178 if (!user_space_fault(regs)) 306 if (!user_space_fault(regs))
179 printk(KERN_ALERT "Unable to handle kernel pointer dereference" 307 printk(KERN_ALERT "Unable to handle kernel pointer dereference"
180 " at virtual kernel address %p\n", (void *)address); 308 " in virtual kernel address space\n");
181 else 309 else
182 printk(KERN_ALERT "Unable to handle kernel paging request" 310 printk(KERN_ALERT "Unable to handle kernel paging request"
183 " at virtual user address %p\n", (void *)address); 311 " in virtual user address space\n");
184 312 printk(KERN_ALERT "failing address: %016lx TEID: %016lx\n",
313 regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long);
314 dump_fault_info(regs);
185 die(regs, "Oops"); 315 die(regs, "Oops");
186 do_exit(SIGKILL); 316 do_exit(SIGKILL);
187} 317}
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 602f57e590b5..d1b7c377a234 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -250,8 +250,8 @@ archclean:
250PHONY += kvmconfig 250PHONY += kvmconfig
251kvmconfig: 251kvmconfig:
252 $(if $(wildcard $(objtree)/.config),, $(error You need an existing .config for this target)) 252 $(if $(wildcard $(objtree)/.config),, $(error You need an existing .config for this target))
253 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O $(objtree) $(objtree)/.config arch/x86/configs/kvm_guest.config 253 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O $(objtree) $(objtree)/.config $(srctree)/arch/x86/configs/kvm_guest.config
254 $(Q)yes "" | $(MAKE) oldconfig 254 $(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
255 255
256define archhelp 256define archhelp
257 echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)' 257 echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index fcaf9c961265..7de069afb382 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -60,7 +60,7 @@
60 | X86_CR4_PSE | X86_CR4_PAE | X86_CR4_MCE \ 60 | X86_CR4_PSE | X86_CR4_PAE | X86_CR4_MCE \
61 | X86_CR4_PGE | X86_CR4_PCE | X86_CR4_OSFXSR | X86_CR4_PCIDE \ 61 | X86_CR4_PGE | X86_CR4_PCE | X86_CR4_OSFXSR | X86_CR4_PCIDE \
62 | X86_CR4_OSXSAVE | X86_CR4_SMEP | X86_CR4_FSGSBASE \ 62 | X86_CR4_OSXSAVE | X86_CR4_SMEP | X86_CR4_FSGSBASE \
63 | X86_CR4_OSXMMEXCPT | X86_CR4_VMXE)) 63 | X86_CR4_OSXMMEXCPT | X86_CR4_VMXE | X86_CR4_SMAP))
64 64
65#define CR8_RESERVED_BITS (~(unsigned long)X86_CR8_TPR) 65#define CR8_RESERVED_BITS (~(unsigned long)X86_CR8_TPR)
66 66
diff --git a/arch/x86/kernel/cpu/perf_event_intel_rapl.c b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
index 059218ed5208..4b9a9e9466bd 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
@@ -59,7 +59,7 @@
59#define INTEL_RAPL_PKG 0x2 /* pseudo-encoding */ 59#define INTEL_RAPL_PKG 0x2 /* pseudo-encoding */
60#define RAPL_IDX_RAM_NRG_STAT 2 /* DRAM */ 60#define RAPL_IDX_RAM_NRG_STAT 2 /* DRAM */
61#define INTEL_RAPL_RAM 0x3 /* pseudo-encoding */ 61#define INTEL_RAPL_RAM 0x3 /* pseudo-encoding */
62#define RAPL_IDX_PP1_NRG_STAT 3 /* DRAM */ 62#define RAPL_IDX_PP1_NRG_STAT 3 /* gpu */
63#define INTEL_RAPL_PP1 0x4 /* pseudo-encoding */ 63#define INTEL_RAPL_PP1 0x4 /* pseudo-encoding */
64 64
65/* Clients have PP0, PKG */ 65/* Clients have PP0, PKG */
@@ -72,6 +72,12 @@
72 1<<RAPL_IDX_PKG_NRG_STAT|\ 72 1<<RAPL_IDX_PKG_NRG_STAT|\
73 1<<RAPL_IDX_RAM_NRG_STAT) 73 1<<RAPL_IDX_RAM_NRG_STAT)
74 74
75/* Servers have PP0, PKG, RAM, PP1 */
76#define RAPL_IDX_HSW (1<<RAPL_IDX_PP0_NRG_STAT|\
77 1<<RAPL_IDX_PKG_NRG_STAT|\
78 1<<RAPL_IDX_RAM_NRG_STAT|\
79 1<<RAPL_IDX_PP1_NRG_STAT)
80
75/* 81/*
76 * event code: LSB 8 bits, passed in attr->config 82 * event code: LSB 8 bits, passed in attr->config
77 * any other bit is reserved 83 * any other bit is reserved
@@ -425,6 +431,24 @@ static struct attribute *rapl_events_cln_attr[] = {
425 NULL, 431 NULL,
426}; 432};
427 433
434static struct attribute *rapl_events_hsw_attr[] = {
435 EVENT_PTR(rapl_cores),
436 EVENT_PTR(rapl_pkg),
437 EVENT_PTR(rapl_gpu),
438 EVENT_PTR(rapl_ram),
439
440 EVENT_PTR(rapl_cores_unit),
441 EVENT_PTR(rapl_pkg_unit),
442 EVENT_PTR(rapl_gpu_unit),
443 EVENT_PTR(rapl_ram_unit),
444
445 EVENT_PTR(rapl_cores_scale),
446 EVENT_PTR(rapl_pkg_scale),
447 EVENT_PTR(rapl_gpu_scale),
448 EVENT_PTR(rapl_ram_scale),
449 NULL,
450};
451
428static struct attribute_group rapl_pmu_events_group = { 452static struct attribute_group rapl_pmu_events_group = {
429 .name = "events", 453 .name = "events",
430 .attrs = NULL, /* patched at runtime */ 454 .attrs = NULL, /* patched at runtime */
@@ -631,11 +655,14 @@ static int __init rapl_pmu_init(void)
631 switch (boot_cpu_data.x86_model) { 655 switch (boot_cpu_data.x86_model) {
632 case 42: /* Sandy Bridge */ 656 case 42: /* Sandy Bridge */
633 case 58: /* Ivy Bridge */ 657 case 58: /* Ivy Bridge */
634 case 60: /* Haswell */
635 case 69: /* Haswell-Celeron */
636 rapl_cntr_mask = RAPL_IDX_CLN; 658 rapl_cntr_mask = RAPL_IDX_CLN;
637 rapl_pmu_events_group.attrs = rapl_events_cln_attr; 659 rapl_pmu_events_group.attrs = rapl_events_cln_attr;
638 break; 660 break;
661 case 60: /* Haswell */
662 case 69: /* Haswell-Celeron */
663 rapl_cntr_mask = RAPL_IDX_HSW;
664 rapl_pmu_events_group.attrs = rapl_events_hsw_attr;
665 break;
639 case 45: /* Sandy Bridge-EP */ 666 case 45: /* Sandy Bridge-EP */
640 case 62: /* IvyTown */ 667 case 62: /* IvyTown */
641 rapl_cntr_mask = RAPL_IDX_SRV; 668 rapl_cntr_mask = RAPL_IDX_SRV;
diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
index b0cc3809723d..6e2537c32190 100644
--- a/arch/x86/kernel/early-quirks.c
+++ b/arch/x86/kernel/early-quirks.c
@@ -240,7 +240,7 @@ static u32 __init intel_stolen_base(int num, int slot, int func, size_t stolen_s
240 return base; 240 return base;
241} 241}
242 242
243#define KB(x) ((x) * 1024) 243#define KB(x) ((x) * 1024UL)
244#define MB(x) (KB (KB (x))) 244#define MB(x) (KB (KB (x)))
245#define GB(x) (MB (KB (x))) 245#define GB(x) (MB (KB (x)))
246 246
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
index 654b46574b91..3399d3a99730 100644
--- a/arch/x86/kernel/reboot.c
+++ b/arch/x86/kernel/reboot.c
@@ -114,8 +114,8 @@ EXPORT_SYMBOL(machine_real_restart);
114 */ 114 */
115static int __init set_pci_reboot(const struct dmi_system_id *d) 115static int __init set_pci_reboot(const struct dmi_system_id *d)
116{ 116{
117 if (reboot_type != BOOT_CF9) { 117 if (reboot_type != BOOT_CF9_FORCE) {
118 reboot_type = BOOT_CF9; 118 reboot_type = BOOT_CF9_FORCE;
119 pr_info("%s series board detected. Selecting %s-method for reboots.\n", 119 pr_info("%s series board detected. Selecting %s-method for reboots.\n",
120 d->ident, "PCI"); 120 d->ident, "PCI");
121 } 121 }
@@ -458,20 +458,23 @@ void __attribute__((weak)) mach_reboot_fixups(void)
458} 458}
459 459
460/* 460/*
461 * Windows compatible x86 hardware expects the following on reboot: 461 * To the best of our knowledge Windows compatible x86 hardware expects
462 * the following on reboot:
462 * 463 *
463 * 1) If the FADT has the ACPI reboot register flag set, try it 464 * 1) If the FADT has the ACPI reboot register flag set, try it
464 * 2) If still alive, write to the keyboard controller 465 * 2) If still alive, write to the keyboard controller
465 * 3) If still alive, write to the ACPI reboot register again 466 * 3) If still alive, write to the ACPI reboot register again
466 * 4) If still alive, write to the keyboard controller again 467 * 4) If still alive, write to the keyboard controller again
467 * 5) If still alive, call the EFI runtime service to reboot 468 * 5) If still alive, call the EFI runtime service to reboot
468 * 6) If still alive, write to the PCI IO port 0xCF9 to reboot 469 * 6) If no EFI runtime service, call the BIOS to do a reboot
469 * 7) If still alive, inform BIOS to do a proper reboot
470 * 470 *
471 * If the machine is still alive at this stage, it gives up. We default to 471 * We default to following the same pattern. We also have
472 * following the same pattern, except that if we're still alive after (7) we'll 472 * two other reboot methods: 'triple fault' and 'PCI', which
473 * try to force a triple fault and then cycle between hitting the keyboard 473 * can be triggered via the reboot= kernel boot option or
474 * controller and doing that 474 * via quirks.
475 *
476 * This means that this function can never return, it can misbehave
477 * by not rebooting properly and hanging.
475 */ 478 */
476static void native_machine_emergency_restart(void) 479static void native_machine_emergency_restart(void)
477{ 480{
@@ -492,6 +495,11 @@ static void native_machine_emergency_restart(void)
492 for (;;) { 495 for (;;) {
493 /* Could also try the reset bit in the Hammer NB */ 496 /* Could also try the reset bit in the Hammer NB */
494 switch (reboot_type) { 497 switch (reboot_type) {
498 case BOOT_ACPI:
499 acpi_reboot();
500 reboot_type = BOOT_KBD;
501 break;
502
495 case BOOT_KBD: 503 case BOOT_KBD:
496 mach_reboot_fixups(); /* For board specific fixups */ 504 mach_reboot_fixups(); /* For board specific fixups */
497 505
@@ -509,43 +517,29 @@ static void native_machine_emergency_restart(void)
509 } 517 }
510 break; 518 break;
511 519
512 case BOOT_TRIPLE:
513 load_idt(&no_idt);
514 __asm__ __volatile__("int3");
515
516 /* We're probably dead after this, but... */
517 reboot_type = BOOT_KBD;
518 break;
519
520 case BOOT_BIOS:
521 machine_real_restart(MRR_BIOS);
522
523 /* We're probably dead after this, but... */
524 reboot_type = BOOT_TRIPLE;
525 break;
526
527 case BOOT_ACPI:
528 acpi_reboot();
529 reboot_type = BOOT_KBD;
530 break;
531
532 case BOOT_EFI: 520 case BOOT_EFI:
533 if (efi_enabled(EFI_RUNTIME_SERVICES)) 521 if (efi_enabled(EFI_RUNTIME_SERVICES))
534 efi.reset_system(reboot_mode == REBOOT_WARM ? 522 efi.reset_system(reboot_mode == REBOOT_WARM ?
535 EFI_RESET_WARM : 523 EFI_RESET_WARM :
536 EFI_RESET_COLD, 524 EFI_RESET_COLD,
537 EFI_SUCCESS, 0, NULL); 525 EFI_SUCCESS, 0, NULL);
538 reboot_type = BOOT_CF9_COND; 526 reboot_type = BOOT_BIOS;
527 break;
528
529 case BOOT_BIOS:
530 machine_real_restart(MRR_BIOS);
531
532 /* We're probably dead after this, but... */
533 reboot_type = BOOT_CF9_SAFE;
539 break; 534 break;
540 535
541 case BOOT_CF9: 536 case BOOT_CF9_FORCE:
542 port_cf9_safe = true; 537 port_cf9_safe = true;
543 /* Fall through */ 538 /* Fall through */
544 539
545 case BOOT_CF9_COND: 540 case BOOT_CF9_SAFE:
546 if (port_cf9_safe) { 541 if (port_cf9_safe) {
547 u8 reboot_code = reboot_mode == REBOOT_WARM ? 542 u8 reboot_code = reboot_mode == REBOOT_WARM ? 0x06 : 0x0E;
548 0x06 : 0x0E;
549 u8 cf9 = inb(0xcf9) & ~reboot_code; 543 u8 cf9 = inb(0xcf9) & ~reboot_code;
550 outb(cf9|2, 0xcf9); /* Request hard reset */ 544 outb(cf9|2, 0xcf9); /* Request hard reset */
551 udelay(50); 545 udelay(50);
@@ -553,7 +547,15 @@ static void native_machine_emergency_restart(void)
553 outb(cf9|reboot_code, 0xcf9); 547 outb(cf9|reboot_code, 0xcf9);
554 udelay(50); 548 udelay(50);
555 } 549 }
556 reboot_type = BOOT_BIOS; 550 reboot_type = BOOT_TRIPLE;
551 break;
552
553 case BOOT_TRIPLE:
554 load_idt(&no_idt);
555 __asm__ __volatile__("int3");
556
557 /* We're probably dead after this, but... */
558 reboot_type = BOOT_KBD;
557 break; 559 break;
558 } 560 }
559 } 561 }
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index bea60671ef8a..f47a104a749c 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -308,7 +308,7 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
308 const u32 kvm_supported_word9_x86_features = 308 const u32 kvm_supported_word9_x86_features =
309 F(FSGSBASE) | F(BMI1) | F(HLE) | F(AVX2) | F(SMEP) | 309 F(FSGSBASE) | F(BMI1) | F(HLE) | F(AVX2) | F(SMEP) |
310 F(BMI2) | F(ERMS) | f_invpcid | F(RTM) | f_mpx | F(RDSEED) | 310 F(BMI2) | F(ERMS) | f_invpcid | F(RTM) | f_mpx | F(RDSEED) |
311 F(ADX); 311 F(ADX) | F(SMAP);
312 312
313 /* all calls to cpuid_count() should be made on the same cpu */ 313 /* all calls to cpuid_count() should be made on the same cpu */
314 get_cpu(); 314 get_cpu();
diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h
index a2a1bb7ed8c1..eeecbed26ac7 100644
--- a/arch/x86/kvm/cpuid.h
+++ b/arch/x86/kvm/cpuid.h
@@ -48,6 +48,14 @@ static inline bool guest_cpuid_has_smep(struct kvm_vcpu *vcpu)
48 return best && (best->ebx & bit(X86_FEATURE_SMEP)); 48 return best && (best->ebx & bit(X86_FEATURE_SMEP));
49} 49}
50 50
51static inline bool guest_cpuid_has_smap(struct kvm_vcpu *vcpu)
52{
53 struct kvm_cpuid_entry2 *best;
54
55 best = kvm_find_cpuid_entry(vcpu, 7, 0);
56 return best && (best->ebx & bit(X86_FEATURE_SMAP));
57}
58
51static inline bool guest_cpuid_has_fsgsbase(struct kvm_vcpu *vcpu) 59static inline bool guest_cpuid_has_fsgsbase(struct kvm_vcpu *vcpu)
52{ 60{
53 struct kvm_cpuid_entry2 *best; 61 struct kvm_cpuid_entry2 *best;
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index f5704d9e5ddc..813d31038b93 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -3601,20 +3601,27 @@ static void reset_rsvds_bits_mask_ept(struct kvm_vcpu *vcpu,
3601 } 3601 }
3602} 3602}
3603 3603
3604static void update_permission_bitmask(struct kvm_vcpu *vcpu, 3604void update_permission_bitmask(struct kvm_vcpu *vcpu,
3605 struct kvm_mmu *mmu, bool ept) 3605 struct kvm_mmu *mmu, bool ept)
3606{ 3606{
3607 unsigned bit, byte, pfec; 3607 unsigned bit, byte, pfec;
3608 u8 map; 3608 u8 map;
3609 bool fault, x, w, u, wf, uf, ff, smep; 3609 bool fault, x, w, u, wf, uf, ff, smapf, cr4_smap, cr4_smep, smap = 0;
3610 3610
3611 smep = kvm_read_cr4_bits(vcpu, X86_CR4_SMEP); 3611 cr4_smep = kvm_read_cr4_bits(vcpu, X86_CR4_SMEP);
3612 cr4_smap = kvm_read_cr4_bits(vcpu, X86_CR4_SMAP);
3612 for (byte = 0; byte < ARRAY_SIZE(mmu->permissions); ++byte) { 3613 for (byte = 0; byte < ARRAY_SIZE(mmu->permissions); ++byte) {
3613 pfec = byte << 1; 3614 pfec = byte << 1;
3614 map = 0; 3615 map = 0;
3615 wf = pfec & PFERR_WRITE_MASK; 3616 wf = pfec & PFERR_WRITE_MASK;
3616 uf = pfec & PFERR_USER_MASK; 3617 uf = pfec & PFERR_USER_MASK;
3617 ff = pfec & PFERR_FETCH_MASK; 3618 ff = pfec & PFERR_FETCH_MASK;
3619 /*
3620 * PFERR_RSVD_MASK bit is set in PFEC if the access is not
3621 * subject to SMAP restrictions, and cleared otherwise. The
3622 * bit is only meaningful if the SMAP bit is set in CR4.
3623 */
3624 smapf = !(pfec & PFERR_RSVD_MASK);
3618 for (bit = 0; bit < 8; ++bit) { 3625 for (bit = 0; bit < 8; ++bit) {
3619 x = bit & ACC_EXEC_MASK; 3626 x = bit & ACC_EXEC_MASK;
3620 w = bit & ACC_WRITE_MASK; 3627 w = bit & ACC_WRITE_MASK;
@@ -3626,12 +3633,33 @@ static void update_permission_bitmask(struct kvm_vcpu *vcpu,
3626 /* Allow supervisor writes if !cr0.wp */ 3633 /* Allow supervisor writes if !cr0.wp */
3627 w |= !is_write_protection(vcpu) && !uf; 3634 w |= !is_write_protection(vcpu) && !uf;
3628 /* Disallow supervisor fetches of user code if cr4.smep */ 3635 /* Disallow supervisor fetches of user code if cr4.smep */
3629 x &= !(smep && u && !uf); 3636 x &= !(cr4_smep && u && !uf);
3637
3638 /*
3639 * SMAP:kernel-mode data accesses from user-mode
3640 * mappings should fault. A fault is considered
3641 * as a SMAP violation if all of the following
3642 * conditions are ture:
3643 * - X86_CR4_SMAP is set in CR4
3644 * - An user page is accessed
3645 * - Page fault in kernel mode
3646 * - if CPL = 3 or X86_EFLAGS_AC is clear
3647 *
3648 * Here, we cover the first three conditions.
3649 * The fourth is computed dynamically in
3650 * permission_fault() and is in smapf.
3651 *
3652 * Also, SMAP does not affect instruction
3653 * fetches, add the !ff check here to make it
3654 * clearer.
3655 */
3656 smap = cr4_smap && u && !uf && !ff;
3630 } else 3657 } else
3631 /* Not really needed: no U/S accesses on ept */ 3658 /* Not really needed: no U/S accesses on ept */
3632 u = 1; 3659 u = 1;
3633 3660
3634 fault = (ff && !x) || (uf && !u) || (wf && !w); 3661 fault = (ff && !x) || (uf && !u) || (wf && !w) ||
3662 (smapf && smap);
3635 map |= fault << bit; 3663 map |= fault << bit;
3636 } 3664 }
3637 mmu->permissions[byte] = map; 3665 mmu->permissions[byte] = map;
diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h
index 292615274358..3842e70bdb7c 100644
--- a/arch/x86/kvm/mmu.h
+++ b/arch/x86/kvm/mmu.h
@@ -44,11 +44,17 @@
44#define PT_DIRECTORY_LEVEL 2 44#define PT_DIRECTORY_LEVEL 2
45#define PT_PAGE_TABLE_LEVEL 1 45#define PT_PAGE_TABLE_LEVEL 1
46 46
47#define PFERR_PRESENT_MASK (1U << 0) 47#define PFERR_PRESENT_BIT 0
48#define PFERR_WRITE_MASK (1U << 1) 48#define PFERR_WRITE_BIT 1
49#define PFERR_USER_MASK (1U << 2) 49#define PFERR_USER_BIT 2
50#define PFERR_RSVD_MASK (1U << 3) 50#define PFERR_RSVD_BIT 3
51#define PFERR_FETCH_MASK (1U << 4) 51#define PFERR_FETCH_BIT 4
52
53#define PFERR_PRESENT_MASK (1U << PFERR_PRESENT_BIT)
54#define PFERR_WRITE_MASK (1U << PFERR_WRITE_BIT)
55#define PFERR_USER_MASK (1U << PFERR_USER_BIT)
56#define PFERR_RSVD_MASK (1U << PFERR_RSVD_BIT)
57#define PFERR_FETCH_MASK (1U << PFERR_FETCH_BIT)
52 58
53int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4]); 59int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4]);
54void kvm_mmu_set_mmio_spte_mask(u64 mmio_mask); 60void kvm_mmu_set_mmio_spte_mask(u64 mmio_mask);
@@ -73,6 +79,8 @@ int handle_mmio_page_fault_common(struct kvm_vcpu *vcpu, u64 addr, bool direct);
73void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context); 79void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context);
74void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context, 80void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context,
75 bool execonly); 81 bool execonly);
82void update_permission_bitmask(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
83 bool ept);
76 84
77static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm) 85static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm)
78{ 86{
@@ -110,10 +118,30 @@ static inline bool is_write_protection(struct kvm_vcpu *vcpu)
110 * Will a fault with a given page-fault error code (pfec) cause a permission 118 * Will a fault with a given page-fault error code (pfec) cause a permission
111 * fault with the given access (in ACC_* format)? 119 * fault with the given access (in ACC_* format)?
112 */ 120 */
113static inline bool permission_fault(struct kvm_mmu *mmu, unsigned pte_access, 121static inline bool permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
114 unsigned pfec) 122 unsigned pte_access, unsigned pfec)
115{ 123{
116 return (mmu->permissions[pfec >> 1] >> pte_access) & 1; 124 int cpl = kvm_x86_ops->get_cpl(vcpu);
125 unsigned long rflags = kvm_x86_ops->get_rflags(vcpu);
126
127 /*
128 * If CPL < 3, SMAP prevention are disabled if EFLAGS.AC = 1.
129 *
130 * If CPL = 3, SMAP applies to all supervisor-mode data accesses
131 * (these are implicit supervisor accesses) regardless of the value
132 * of EFLAGS.AC.
133 *
134 * This computes (cpl < 3) && (rflags & X86_EFLAGS_AC), leaving
135 * the result in X86_EFLAGS_AC. We then insert it in place of
136 * the PFERR_RSVD_MASK bit; this bit will always be zero in pfec,
137 * but it will be one in index if SMAP checks are being overridden.
138 * It is important to keep this branchless.
139 */
140 unsigned long smap = (cpl - 3) & (rflags & X86_EFLAGS_AC);
141 int index = (pfec >> 1) +
142 (smap >> (X86_EFLAGS_AC_BIT - PFERR_RSVD_BIT + 1));
143
144 return (mmu->permissions[index] >> pte_access) & 1;
117} 145}
118 146
119void kvm_mmu_invalidate_zap_all_pages(struct kvm *kvm); 147void kvm_mmu_invalidate_zap_all_pages(struct kvm *kvm);
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
index b1e6c1bf68d3..123efd3ec29f 100644
--- a/arch/x86/kvm/paging_tmpl.h
+++ b/arch/x86/kvm/paging_tmpl.h
@@ -353,7 +353,7 @@ retry_walk:
353 walker->ptes[walker->level - 1] = pte; 353 walker->ptes[walker->level - 1] = pte;
354 } while (!is_last_gpte(mmu, walker->level, pte)); 354 } while (!is_last_gpte(mmu, walker->level, pte));
355 355
356 if (unlikely(permission_fault(mmu, pte_access, access))) { 356 if (unlikely(permission_fault(vcpu, mmu, pte_access, access))) {
357 errcode |= PFERR_PRESENT_MASK; 357 errcode |= PFERR_PRESENT_MASK;
358 goto error; 358 goto error;
359 } 359 }
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 1320e0f8e611..1f68c5831924 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -3484,13 +3484,14 @@ static int vmx_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
3484 hw_cr4 &= ~X86_CR4_PAE; 3484 hw_cr4 &= ~X86_CR4_PAE;
3485 hw_cr4 |= X86_CR4_PSE; 3485 hw_cr4 |= X86_CR4_PSE;
3486 /* 3486 /*
3487 * SMEP is disabled if CPU is in non-paging mode in 3487 * SMEP/SMAP is disabled if CPU is in non-paging mode
3488 * hardware. However KVM always uses paging mode to 3488 * in hardware. However KVM always uses paging mode to
3489 * emulate guest non-paging mode with TDP. 3489 * emulate guest non-paging mode with TDP.
3490 * To emulate this behavior, SMEP needs to be manually 3490 * To emulate this behavior, SMEP/SMAP needs to be
3491 * disabled when guest switches to non-paging mode. 3491 * manually disabled when guest switches to non-paging
3492 * mode.
3492 */ 3493 */
3493 hw_cr4 &= ~X86_CR4_SMEP; 3494 hw_cr4 &= ~(X86_CR4_SMEP | X86_CR4_SMAP);
3494 } else if (!(cr4 & X86_CR4_PAE)) { 3495 } else if (!(cr4 & X86_CR4_PAE)) {
3495 hw_cr4 &= ~X86_CR4_PAE; 3496 hw_cr4 &= ~X86_CR4_PAE;
3496 } 3497 }
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 9d1b5cd4d34c..8b8fc0b792ba 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -652,6 +652,9 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
652 if (!guest_cpuid_has_smep(vcpu) && (cr4 & X86_CR4_SMEP)) 652 if (!guest_cpuid_has_smep(vcpu) && (cr4 & X86_CR4_SMEP))
653 return 1; 653 return 1;
654 654
655 if (!guest_cpuid_has_smap(vcpu) && (cr4 & X86_CR4_SMAP))
656 return 1;
657
655 if (!guest_cpuid_has_fsgsbase(vcpu) && (cr4 & X86_CR4_FSGSBASE)) 658 if (!guest_cpuid_has_fsgsbase(vcpu) && (cr4 & X86_CR4_FSGSBASE))
656 return 1; 659 return 1;
657 660
@@ -680,6 +683,9 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
680 (!(cr4 & X86_CR4_PCIDE) && (old_cr4 & X86_CR4_PCIDE))) 683 (!(cr4 & X86_CR4_PCIDE) && (old_cr4 & X86_CR4_PCIDE)))
681 kvm_mmu_reset_context(vcpu); 684 kvm_mmu_reset_context(vcpu);
682 685
686 if ((cr4 ^ old_cr4) & X86_CR4_SMAP)
687 update_permission_bitmask(vcpu, vcpu->arch.walk_mmu, false);
688
683 if ((cr4 ^ old_cr4) & X86_CR4_OSXSAVE) 689 if ((cr4 ^ old_cr4) & X86_CR4_OSXSAVE)
684 kvm_update_cpuid(vcpu); 690 kvm_update_cpuid(vcpu);
685 691
@@ -1117,7 +1123,6 @@ static inline u64 get_kernel_ns(void)
1117{ 1123{
1118 struct timespec ts; 1124 struct timespec ts;
1119 1125
1120 WARN_ON(preemptible());
1121 ktime_get_ts(&ts); 1126 ktime_get_ts(&ts);
1122 monotonic_to_bootbased(&ts); 1127 monotonic_to_bootbased(&ts);
1123 return timespec_to_ns(&ts); 1128 return timespec_to_ns(&ts);
@@ -4164,7 +4169,8 @@ static int vcpu_mmio_gva_to_gpa(struct kvm_vcpu *vcpu, unsigned long gva,
4164 | (write ? PFERR_WRITE_MASK : 0); 4169 | (write ? PFERR_WRITE_MASK : 0);
4165 4170
4166 if (vcpu_match_mmio_gva(vcpu, gva) 4171 if (vcpu_match_mmio_gva(vcpu, gva)
4167 && !permission_fault(vcpu->arch.walk_mmu, vcpu->arch.access, access)) { 4172 && !permission_fault(vcpu, vcpu->arch.walk_mmu,
4173 vcpu->arch.access, access)) {
4168 *gpa = vcpu->arch.mmio_gfn << PAGE_SHIFT | 4174 *gpa = vcpu->arch.mmio_gfn << PAGE_SHIFT |
4169 (gva & (PAGE_SIZE - 1)); 4175 (gva & (PAGE_SIZE - 1));
4170 trace_vcpu_match_mmio(gva, *gpa, write, false); 4176 trace_vcpu_match_mmio(gva, *gpa, write, false);
diff --git a/arch/x86/syscalls/Makefile b/arch/x86/syscalls/Makefile
index f325af26107c..3323c2745248 100644
--- a/arch/x86/syscalls/Makefile
+++ b/arch/x86/syscalls/Makefile
@@ -54,5 +54,7 @@ syshdr-$(CONFIG_X86_64) += syscalls_64.h
54 54
55targets += $(uapisyshdr-y) $(syshdr-y) 55targets += $(uapisyshdr-y) $(syshdr-y)
56 56
57PHONY += all
57all: $(addprefix $(uapi)/,$(uapisyshdr-y)) 58all: $(addprefix $(uapi)/,$(uapisyshdr-y))
58all: $(addprefix $(out)/,$(syshdr-y)) 59all: $(addprefix $(out)/,$(syshdr-y))
60 @:
diff --git a/arch/x86/syscalls/syscall_32.tbl b/arch/x86/syscalls/syscall_32.tbl
index 96bc506ac6de..d6b867921612 100644
--- a/arch/x86/syscalls/syscall_32.tbl
+++ b/arch/x86/syscalls/syscall_32.tbl
@@ -359,3 +359,4 @@
359350 i386 finit_module sys_finit_module 359350 i386 finit_module sys_finit_module
360351 i386 sched_setattr sys_sched_setattr 360351 i386 sched_setattr sys_sched_setattr
361352 i386 sched_getattr sys_sched_getattr 361352 i386 sched_getattr sys_sched_getattr
362353 i386 renameat2 sys_renameat2
diff --git a/arch/x86/tools/Makefile b/arch/x86/tools/Makefile
index e8120346903b..604a37efd4d5 100644
--- a/arch/x86/tools/Makefile
+++ b/arch/x86/tools/Makefile
@@ -40,4 +40,6 @@ $(obj)/insn_sanity.o: $(srctree)/arch/x86/lib/insn.c $(srctree)/arch/x86/lib/ina
40HOST_EXTRACFLAGS += -I$(srctree)/tools/include 40HOST_EXTRACFLAGS += -I$(srctree)/tools/include
41hostprogs-y += relocs 41hostprogs-y += relocs
42relocs-objs := relocs_32.o relocs_64.o relocs_common.o 42relocs-objs := relocs_32.o relocs_64.o relocs_common.o
43PHONY += relocs
43relocs: $(obj)/relocs 44relocs: $(obj)/relocs
45 @:
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
index a18eadd8bb40..7005974c3ff3 100644
--- a/arch/x86/xen/smp.c
+++ b/arch/x86/xen/smp.c
@@ -441,10 +441,11 @@ static int xen_cpu_up(unsigned int cpu, struct task_struct *idle)
441 irq_ctx_init(cpu); 441 irq_ctx_init(cpu);
442#else 442#else
443 clear_tsk_thread_flag(idle, TIF_FORK); 443 clear_tsk_thread_flag(idle, TIF_FORK);
444#endif
444 per_cpu(kernel_stack, cpu) = 445 per_cpu(kernel_stack, cpu) =
445 (unsigned long)task_stack_page(idle) - 446 (unsigned long)task_stack_page(idle) -
446 KERNEL_STACK_OFFSET + THREAD_SIZE; 447 KERNEL_STACK_OFFSET + THREAD_SIZE;
447#endif 448
448 xen_setup_runstate_info(cpu); 449 xen_setup_runstate_info(cpu);
449 xen_setup_timer(cpu); 450 xen_setup_timer(cpu);
450 xen_init_lock_cpu(cpu); 451 xen_init_lock_cpu(cpu);
diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
index 4d3acc34a998..0ba5f3b967f0 100644
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -274,7 +274,7 @@ void __init xen_init_spinlocks(void)
274 printk(KERN_DEBUG "xen: PV spinlocks disabled\n"); 274 printk(KERN_DEBUG "xen: PV spinlocks disabled\n");
275 return; 275 return;
276 } 276 }
277 277 printk(KERN_DEBUG "xen: PV spinlocks enabled\n");
278 pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning); 278 pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
279 pv_lock_ops.unlock_kick = xen_unlock_kick; 279 pv_lock_ops.unlock_kick = xen_unlock_kick;
280} 280}
@@ -290,6 +290,9 @@ static __init int xen_init_spinlocks_jump(void)
290 if (!xen_pvspin) 290 if (!xen_pvspin)
291 return 0; 291 return 0;
292 292
293 if (!xen_domain())
294 return 0;
295
293 static_key_slow_inc(&paravirt_ticketlocks_enabled); 296 static_key_slow_inc(&paravirt_ticketlocks_enabled);
294 return 0; 297 return 0;
295} 298}
diff --git a/arch/x86/xen/xen-asm_32.S b/arch/x86/xen/xen-asm_32.S
index 33ca6e42a4ca..fd92a64d748e 100644
--- a/arch/x86/xen/xen-asm_32.S
+++ b/arch/x86/xen/xen-asm_32.S
@@ -75,6 +75,17 @@ ENDPROC(xen_sysexit)
75 * stack state in whatever form its in, we keep things simple by only 75 * stack state in whatever form its in, we keep things simple by only
76 * using a single register which is pushed/popped on the stack. 76 * using a single register which is pushed/popped on the stack.
77 */ 77 */
78
79.macro POP_FS
801:
81 popw %fs
82.pushsection .fixup, "ax"
832: movw $0, (%esp)
84 jmp 1b
85.popsection
86 _ASM_EXTABLE(1b,2b)
87.endm
88
78ENTRY(xen_iret) 89ENTRY(xen_iret)
79 /* test eflags for special cases */ 90 /* test eflags for special cases */
80 testl $(X86_EFLAGS_VM | XEN_EFLAGS_NMI), 8(%esp) 91 testl $(X86_EFLAGS_VM | XEN_EFLAGS_NMI), 8(%esp)
@@ -83,15 +94,13 @@ ENTRY(xen_iret)
83 push %eax 94 push %eax
84 ESP_OFFSET=4 # bytes pushed onto stack 95 ESP_OFFSET=4 # bytes pushed onto stack
85 96
86 /* 97 /* Store vcpu_info pointer for easy access */
87 * Store vcpu_info pointer for easy access. Do it this way to
88 * avoid having to reload %fs
89 */
90#ifdef CONFIG_SMP 98#ifdef CONFIG_SMP
91 GET_THREAD_INFO(%eax) 99 pushw %fs
92 movl %ss:TI_cpu(%eax), %eax 100 movl $(__KERNEL_PERCPU), %eax
93 movl %ss:__per_cpu_offset(,%eax,4), %eax 101 movl %eax, %fs
94 mov %ss:xen_vcpu(%eax), %eax 102 movl %fs:xen_vcpu, %eax
103 POP_FS
95#else 104#else
96 movl %ss:xen_vcpu, %eax 105 movl %ss:xen_vcpu, %eax
97#endif 106#endif
diff --git a/drivers/Makefile b/drivers/Makefile
index e3ced91b1784..d05d81b19b50 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -53,8 +53,8 @@ obj-y += gpu/
53obj-$(CONFIG_CONNECTOR) += connector/ 53obj-$(CONFIG_CONNECTOR) += connector/
54 54
55# i810fb and intelfb depend on char/agp/ 55# i810fb and intelfb depend on char/agp/
56obj-$(CONFIG_FB_I810) += video/i810/ 56obj-$(CONFIG_FB_I810) += video/fbdev/i810/
57obj-$(CONFIG_FB_INTEL) += video/intelfb/ 57obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/
58 58
59obj-$(CONFIG_PARPORT) += parport/ 59obj-$(CONFIG_PARPORT) += parport/
60obj-y += base/ block/ misc/ mfd/ nfc/ 60obj-y += base/ block/ misc/ mfd/ nfc/
diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c
index 8c3b255e629a..e900961cdd2e 100644
--- a/drivers/char/hw_random/bcm2835-rng.c
+++ b/drivers/char/hw_random/bcm2835-rng.c
@@ -61,18 +61,18 @@ static int bcm2835_rng_probe(struct platform_device *pdev)
61 } 61 }
62 bcm2835_rng_ops.priv = (unsigned long)rng_base; 62 bcm2835_rng_ops.priv = (unsigned long)rng_base;
63 63
64 /* set warm-up count & enable */
65 __raw_writel(RNG_WARMUP_COUNT, rng_base + RNG_STATUS);
66 __raw_writel(RNG_RBGEN, rng_base + RNG_CTRL);
67
64 /* register driver */ 68 /* register driver */
65 err = hwrng_register(&bcm2835_rng_ops); 69 err = hwrng_register(&bcm2835_rng_ops);
66 if (err) { 70 if (err) {
67 dev_err(dev, "hwrng registration failed\n"); 71 dev_err(dev, "hwrng registration failed\n");
68 iounmap(rng_base); 72 iounmap(rng_base);
69 } else { 73 } else
70 dev_info(dev, "hwrng registered\n"); 74 dev_info(dev, "hwrng registered\n");
71 75
72 /* set warm-up count & enable */
73 __raw_writel(RNG_WARMUP_COUNT, rng_base + RNG_STATUS);
74 __raw_writel(RNG_RBGEN, rng_base + RNG_CTRL);
75 }
76 return err; 76 return err;
77} 77}
78 78
diff --git a/drivers/char/ipmi/Kconfig b/drivers/char/ipmi/Kconfig
index 0baa8fab4ea7..db1c9b7adaa6 100644
--- a/drivers/char/ipmi/Kconfig
+++ b/drivers/char/ipmi/Kconfig
@@ -50,6 +50,18 @@ config IPMI_SI
50 Currently, only KCS and SMIC are supported. If 50 Currently, only KCS and SMIC are supported. If
51 you are using IPMI, you should probably say "y" here. 51 you are using IPMI, you should probably say "y" here.
52 52
53config IPMI_SI_PROBE_DEFAULTS
54 bool 'Probe for all possible IPMI system interfaces by default'
55 default n
56 depends on IPMI_SI
57 help
58 Modern systems will usually expose IPMI interfaces via a discoverable
59 firmware mechanism such as ACPI or DMI. Older systems do not, and so
60 the driver is forced to probe hardware manually. This may cause boot
61 delays. Say "n" here to disable this manual probing. IPMI will then
62 only be available on older systems if the "ipmi_si_intf.trydefaults=1"
63 boot argument is passed.
64
53config IPMI_WATCHDOG 65config IPMI_WATCHDOG
54 tristate 'IPMI Watchdog Timer' 66 tristate 'IPMI Watchdog Timer'
55 help 67 help
diff --git a/drivers/char/ipmi/ipmi_bt_sm.c b/drivers/char/ipmi/ipmi_bt_sm.c
index f5e4cd7617f6..61e71616689b 100644
--- a/drivers/char/ipmi/ipmi_bt_sm.c
+++ b/drivers/char/ipmi/ipmi_bt_sm.c
@@ -352,7 +352,7 @@ static inline void write_all_bytes(struct si_sm_data *bt)
352 352
353static inline int read_all_bytes(struct si_sm_data *bt) 353static inline int read_all_bytes(struct si_sm_data *bt)
354{ 354{
355 unsigned char i; 355 unsigned int i;
356 356
357 /* 357 /*
358 * length is "framing info", minimum = 4: NetFn, Seq, Cmd, cCode. 358 * length is "framing info", minimum = 4: NetFn, Seq, Cmd, cCode.
diff --git a/drivers/char/ipmi/ipmi_kcs_sm.c b/drivers/char/ipmi/ipmi_kcs_sm.c
index 6a4bdc18955a..8c25f596808a 100644
--- a/drivers/char/ipmi/ipmi_kcs_sm.c
+++ b/drivers/char/ipmi/ipmi_kcs_sm.c
@@ -251,8 +251,9 @@ static inline int check_obf(struct si_sm_data *kcs, unsigned char status,
251 if (!GET_STATUS_OBF(status)) { 251 if (!GET_STATUS_OBF(status)) {
252 kcs->obf_timeout -= time; 252 kcs->obf_timeout -= time;
253 if (kcs->obf_timeout < 0) { 253 if (kcs->obf_timeout < 0) {
254 start_error_recovery(kcs, "OBF not ready in time"); 254 kcs->obf_timeout = OBF_RETRY_TIMEOUT;
255 return 1; 255 start_error_recovery(kcs, "OBF not ready in time");
256 return 1;
256 } 257 }
257 return 0; 258 return 0;
258 } 259 }
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
index ec4e10fcf1a5..e6db9381b2c7 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -55,6 +55,7 @@ static struct ipmi_recv_msg *ipmi_alloc_recv_msg(void);
55static int ipmi_init_msghandler(void); 55static int ipmi_init_msghandler(void);
56static void smi_recv_tasklet(unsigned long); 56static void smi_recv_tasklet(unsigned long);
57static void handle_new_recv_msgs(ipmi_smi_t intf); 57static void handle_new_recv_msgs(ipmi_smi_t intf);
58static void need_waiter(ipmi_smi_t intf);
58 59
59static int initialized; 60static int initialized;
60 61
@@ -73,14 +74,28 @@ static struct proc_dir_entry *proc_ipmi_root;
73 */ 74 */
74#define MAX_MSG_TIMEOUT 60000 75#define MAX_MSG_TIMEOUT 60000
75 76
77/* Call every ~1000 ms. */
78#define IPMI_TIMEOUT_TIME 1000
79
80/* How many jiffies does it take to get to the timeout time. */
81#define IPMI_TIMEOUT_JIFFIES ((IPMI_TIMEOUT_TIME * HZ) / 1000)
82
83/*
84 * Request events from the queue every second (this is the number of
85 * IPMI_TIMEOUT_TIMES between event requests). Hopefully, in the
86 * future, IPMI will add a way to know immediately if an event is in
87 * the queue and this silliness can go away.
88 */
89#define IPMI_REQUEST_EV_TIME (1000 / (IPMI_TIMEOUT_TIME))
90
76/* 91/*
77 * The main "user" data structure. 92 * The main "user" data structure.
78 */ 93 */
79struct ipmi_user { 94struct ipmi_user {
80 struct list_head link; 95 struct list_head link;
81 96
82 /* Set to "0" when the user is destroyed. */ 97 /* Set to false when the user is destroyed. */
83 int valid; 98 bool valid;
84 99
85 struct kref refcount; 100 struct kref refcount;
86 101
@@ -92,7 +107,7 @@ struct ipmi_user {
92 ipmi_smi_t intf; 107 ipmi_smi_t intf;
93 108
94 /* Does this interface receive IPMI events? */ 109 /* Does this interface receive IPMI events? */
95 int gets_events; 110 bool gets_events;
96}; 111};
97 112
98struct cmd_rcvr { 113struct cmd_rcvr {
@@ -383,6 +398,9 @@ struct ipmi_smi {
383 unsigned int waiting_events_count; /* How many events in queue? */ 398 unsigned int waiting_events_count; /* How many events in queue? */
384 char delivering_events; 399 char delivering_events;
385 char event_msg_printed; 400 char event_msg_printed;
401 atomic_t event_waiters;
402 unsigned int ticks_to_req_ev;
403 int last_needs_timer;
386 404
387 /* 405 /*
388 * The event receiver for my BMC, only really used at panic 406 * The event receiver for my BMC, only really used at panic
@@ -395,7 +413,7 @@ struct ipmi_smi {
395 413
396 /* For handling of maintenance mode. */ 414 /* For handling of maintenance mode. */
397 int maintenance_mode; 415 int maintenance_mode;
398 int maintenance_mode_enable; 416 bool maintenance_mode_enable;
399 int auto_maintenance_timeout; 417 int auto_maintenance_timeout;
400 spinlock_t maintenance_mode_lock; /* Used in a timer... */ 418 spinlock_t maintenance_mode_lock; /* Used in a timer... */
401 419
@@ -451,7 +469,6 @@ static DEFINE_MUTEX(ipmi_interfaces_mutex);
451static LIST_HEAD(smi_watchers); 469static LIST_HEAD(smi_watchers);
452static DEFINE_MUTEX(smi_watchers_mutex); 470static DEFINE_MUTEX(smi_watchers_mutex);
453 471
454
455#define ipmi_inc_stat(intf, stat) \ 472#define ipmi_inc_stat(intf, stat) \
456 atomic_inc(&(intf)->stats[IPMI_STAT_ ## stat]) 473 atomic_inc(&(intf)->stats[IPMI_STAT_ ## stat])
457#define ipmi_get_stat(intf, stat) \ 474#define ipmi_get_stat(intf, stat) \
@@ -772,6 +789,7 @@ static int intf_next_seq(ipmi_smi_t intf,
772 *seq = i; 789 *seq = i;
773 *seqid = intf->seq_table[i].seqid; 790 *seqid = intf->seq_table[i].seqid;
774 intf->curr_seq = (i+1)%IPMI_IPMB_NUM_SEQ; 791 intf->curr_seq = (i+1)%IPMI_IPMB_NUM_SEQ;
792 need_waiter(intf);
775 } else { 793 } else {
776 rv = -EAGAIN; 794 rv = -EAGAIN;
777 } 795 }
@@ -941,7 +959,7 @@ int ipmi_create_user(unsigned int if_num,
941 new_user->handler = handler; 959 new_user->handler = handler;
942 new_user->handler_data = handler_data; 960 new_user->handler_data = handler_data;
943 new_user->intf = intf; 961 new_user->intf = intf;
944 new_user->gets_events = 0; 962 new_user->gets_events = false;
945 963
946 if (!try_module_get(intf->handlers->owner)) { 964 if (!try_module_get(intf->handlers->owner)) {
947 rv = -ENODEV; 965 rv = -ENODEV;
@@ -962,10 +980,15 @@ int ipmi_create_user(unsigned int if_num,
962 */ 980 */
963 mutex_unlock(&ipmi_interfaces_mutex); 981 mutex_unlock(&ipmi_interfaces_mutex);
964 982
965 new_user->valid = 1; 983 new_user->valid = true;
966 spin_lock_irqsave(&intf->seq_lock, flags); 984 spin_lock_irqsave(&intf->seq_lock, flags);
967 list_add_rcu(&new_user->link, &intf->users); 985 list_add_rcu(&new_user->link, &intf->users);
968 spin_unlock_irqrestore(&intf->seq_lock, flags); 986 spin_unlock_irqrestore(&intf->seq_lock, flags);
987 if (handler->ipmi_watchdog_pretimeout) {
988 /* User wants pretimeouts, so make sure to watch for them. */
989 if (atomic_inc_return(&intf->event_waiters) == 1)
990 need_waiter(intf);
991 }
969 *user = new_user; 992 *user = new_user;
970 return 0; 993 return 0;
971 994
@@ -1019,7 +1042,13 @@ int ipmi_destroy_user(ipmi_user_t user)
1019 struct cmd_rcvr *rcvr; 1042 struct cmd_rcvr *rcvr;
1020 struct cmd_rcvr *rcvrs = NULL; 1043 struct cmd_rcvr *rcvrs = NULL;
1021 1044
1022 user->valid = 0; 1045 user->valid = false;
1046
1047 if (user->handler->ipmi_watchdog_pretimeout)
1048 atomic_dec(&intf->event_waiters);
1049
1050 if (user->gets_events)
1051 atomic_dec(&intf->event_waiters);
1023 1052
1024 /* Remove the user from the interface's sequence table. */ 1053 /* Remove the user from the interface's sequence table. */
1025 spin_lock_irqsave(&intf->seq_lock, flags); 1054 spin_lock_irqsave(&intf->seq_lock, flags);
@@ -1155,25 +1184,23 @@ int ipmi_set_maintenance_mode(ipmi_user_t user, int mode)
1155 if (intf->maintenance_mode != mode) { 1184 if (intf->maintenance_mode != mode) {
1156 switch (mode) { 1185 switch (mode) {
1157 case IPMI_MAINTENANCE_MODE_AUTO: 1186 case IPMI_MAINTENANCE_MODE_AUTO:
1158 intf->maintenance_mode = mode;
1159 intf->maintenance_mode_enable 1187 intf->maintenance_mode_enable
1160 = (intf->auto_maintenance_timeout > 0); 1188 = (intf->auto_maintenance_timeout > 0);
1161 break; 1189 break;
1162 1190
1163 case IPMI_MAINTENANCE_MODE_OFF: 1191 case IPMI_MAINTENANCE_MODE_OFF:
1164 intf->maintenance_mode = mode; 1192 intf->maintenance_mode_enable = false;
1165 intf->maintenance_mode_enable = 0;
1166 break; 1193 break;
1167 1194
1168 case IPMI_MAINTENANCE_MODE_ON: 1195 case IPMI_MAINTENANCE_MODE_ON:
1169 intf->maintenance_mode = mode; 1196 intf->maintenance_mode_enable = true;
1170 intf->maintenance_mode_enable = 1;
1171 break; 1197 break;
1172 1198
1173 default: 1199 default:
1174 rv = -EINVAL; 1200 rv = -EINVAL;
1175 goto out_unlock; 1201 goto out_unlock;
1176 } 1202 }
1203 intf->maintenance_mode = mode;
1177 1204
1178 maintenance_mode_update(intf); 1205 maintenance_mode_update(intf);
1179 } 1206 }
@@ -1184,7 +1211,7 @@ int ipmi_set_maintenance_mode(ipmi_user_t user, int mode)
1184} 1211}
1185EXPORT_SYMBOL(ipmi_set_maintenance_mode); 1212EXPORT_SYMBOL(ipmi_set_maintenance_mode);
1186 1213
1187int ipmi_set_gets_events(ipmi_user_t user, int val) 1214int ipmi_set_gets_events(ipmi_user_t user, bool val)
1188{ 1215{
1189 unsigned long flags; 1216 unsigned long flags;
1190 ipmi_smi_t intf = user->intf; 1217 ipmi_smi_t intf = user->intf;
@@ -1194,8 +1221,18 @@ int ipmi_set_gets_events(ipmi_user_t user, int val)
1194 INIT_LIST_HEAD(&msgs); 1221 INIT_LIST_HEAD(&msgs);
1195 1222
1196 spin_lock_irqsave(&intf->events_lock, flags); 1223 spin_lock_irqsave(&intf->events_lock, flags);
1224 if (user->gets_events == val)
1225 goto out;
1226
1197 user->gets_events = val; 1227 user->gets_events = val;
1198 1228
1229 if (val) {
1230 if (atomic_inc_return(&intf->event_waiters) == 1)
1231 need_waiter(intf);
1232 } else {
1233 atomic_dec(&intf->event_waiters);
1234 }
1235
1199 if (intf->delivering_events) 1236 if (intf->delivering_events)
1200 /* 1237 /*
1201 * Another thread is delivering events for this, so 1238 * Another thread is delivering events for this, so
@@ -1289,6 +1326,9 @@ int ipmi_register_for_cmd(ipmi_user_t user,
1289 goto out_unlock; 1326 goto out_unlock;
1290 } 1327 }
1291 1328
1329 if (atomic_inc_return(&intf->event_waiters) == 1)
1330 need_waiter(intf);
1331
1292 list_add_rcu(&rcvr->link, &intf->cmd_rcvrs); 1332 list_add_rcu(&rcvr->link, &intf->cmd_rcvrs);
1293 1333
1294 out_unlock: 1334 out_unlock:
@@ -1330,6 +1370,7 @@ int ipmi_unregister_for_cmd(ipmi_user_t user,
1330 mutex_unlock(&intf->cmd_rcvrs_mutex); 1370 mutex_unlock(&intf->cmd_rcvrs_mutex);
1331 synchronize_rcu(); 1371 synchronize_rcu();
1332 while (rcvrs) { 1372 while (rcvrs) {
1373 atomic_dec(&intf->event_waiters);
1333 rcvr = rcvrs; 1374 rcvr = rcvrs;
1334 rcvrs = rcvr->next; 1375 rcvrs = rcvr->next;
1335 kfree(rcvr); 1376 kfree(rcvr);
@@ -1535,7 +1576,7 @@ static int i_ipmi_request(ipmi_user_t user,
1535 = IPMI_MAINTENANCE_MODE_TIMEOUT; 1576 = IPMI_MAINTENANCE_MODE_TIMEOUT;
1536 if (!intf->maintenance_mode 1577 if (!intf->maintenance_mode
1537 && !intf->maintenance_mode_enable) { 1578 && !intf->maintenance_mode_enable) {
1538 intf->maintenance_mode_enable = 1; 1579 intf->maintenance_mode_enable = true;
1539 maintenance_mode_update(intf); 1580 maintenance_mode_update(intf);
1540 } 1581 }
1541 spin_unlock_irqrestore(&intf->maintenance_mode_lock, 1582 spin_unlock_irqrestore(&intf->maintenance_mode_lock,
@@ -2876,6 +2917,8 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
2876 (unsigned long) intf); 2917 (unsigned long) intf);
2877 atomic_set(&intf->watchdog_pretimeouts_to_deliver, 0); 2918 atomic_set(&intf->watchdog_pretimeouts_to_deliver, 0);
2878 spin_lock_init(&intf->events_lock); 2919 spin_lock_init(&intf->events_lock);
2920 atomic_set(&intf->event_waiters, 0);
2921 intf->ticks_to_req_ev = IPMI_REQUEST_EV_TIME;
2879 INIT_LIST_HEAD(&intf->waiting_events); 2922 INIT_LIST_HEAD(&intf->waiting_events);
2880 intf->waiting_events_count = 0; 2923 intf->waiting_events_count = 0;
2881 mutex_init(&intf->cmd_rcvrs_mutex); 2924 mutex_init(&intf->cmd_rcvrs_mutex);
@@ -3965,7 +4008,8 @@ smi_from_recv_msg(ipmi_smi_t intf, struct ipmi_recv_msg *recv_msg,
3965 4008
3966static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent, 4009static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
3967 struct list_head *timeouts, long timeout_period, 4010 struct list_head *timeouts, long timeout_period,
3968 int slot, unsigned long *flags) 4011 int slot, unsigned long *flags,
4012 unsigned int *waiting_msgs)
3969{ 4013{
3970 struct ipmi_recv_msg *msg; 4014 struct ipmi_recv_msg *msg;
3971 struct ipmi_smi_handlers *handlers; 4015 struct ipmi_smi_handlers *handlers;
@@ -3977,8 +4021,10 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
3977 return; 4021 return;
3978 4022
3979 ent->timeout -= timeout_period; 4023 ent->timeout -= timeout_period;
3980 if (ent->timeout > 0) 4024 if (ent->timeout > 0) {
4025 (*waiting_msgs)++;
3981 return; 4026 return;
4027 }
3982 4028
3983 if (ent->retries_left == 0) { 4029 if (ent->retries_left == 0) {
3984 /* The message has used all its retries. */ 4030 /* The message has used all its retries. */
@@ -3995,6 +4041,8 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
3995 struct ipmi_smi_msg *smi_msg; 4041 struct ipmi_smi_msg *smi_msg;
3996 /* More retries, send again. */ 4042 /* More retries, send again. */
3997 4043
4044 (*waiting_msgs)++;
4045
3998 /* 4046 /*
3999 * Start with the max timer, set to normal timer after 4047 * Start with the max timer, set to normal timer after
4000 * the message is sent. 4048 * the message is sent.
@@ -4040,117 +4088,118 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
4040 } 4088 }
4041} 4089}
4042 4090
4043static void ipmi_timeout_handler(long timeout_period) 4091static unsigned int ipmi_timeout_handler(ipmi_smi_t intf, long timeout_period)
4044{ 4092{
4045 ipmi_smi_t intf;
4046 struct list_head timeouts; 4093 struct list_head timeouts;
4047 struct ipmi_recv_msg *msg, *msg2; 4094 struct ipmi_recv_msg *msg, *msg2;
4048 unsigned long flags; 4095 unsigned long flags;
4049 int i; 4096 int i;
4097 unsigned int waiting_msgs = 0;
4050 4098
4051 rcu_read_lock(); 4099 /*
4052 list_for_each_entry_rcu(intf, &ipmi_interfaces, link) { 4100 * Go through the seq table and find any messages that
4053 tasklet_schedule(&intf->recv_tasklet); 4101 * have timed out, putting them in the timeouts
4054 4102 * list.
4055 /* 4103 */
4056 * Go through the seq table and find any messages that 4104 INIT_LIST_HEAD(&timeouts);
4057 * have timed out, putting them in the timeouts 4105 spin_lock_irqsave(&intf->seq_lock, flags);
4058 * list. 4106 for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++)
4059 */ 4107 check_msg_timeout(intf, &(intf->seq_table[i]),
4060 INIT_LIST_HEAD(&timeouts); 4108 &timeouts, timeout_period, i,
4061 spin_lock_irqsave(&intf->seq_lock, flags); 4109 &flags, &waiting_msgs);
4062 for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++) 4110 spin_unlock_irqrestore(&intf->seq_lock, flags);
4063 check_msg_timeout(intf, &(intf->seq_table[i]),
4064 &timeouts, timeout_period, i,
4065 &flags);
4066 spin_unlock_irqrestore(&intf->seq_lock, flags);
4067 4111
4068 list_for_each_entry_safe(msg, msg2, &timeouts, link) 4112 list_for_each_entry_safe(msg, msg2, &timeouts, link)
4069 deliver_err_response(msg, IPMI_TIMEOUT_COMPLETION_CODE); 4113 deliver_err_response(msg, IPMI_TIMEOUT_COMPLETION_CODE);
4070 4114
4071 /* 4115 /*
4072 * Maintenance mode handling. Check the timeout 4116 * Maintenance mode handling. Check the timeout
4073 * optimistically before we claim the lock. It may 4117 * optimistically before we claim the lock. It may
4074 * mean a timeout gets missed occasionally, but that 4118 * mean a timeout gets missed occasionally, but that
4075 * only means the timeout gets extended by one period 4119 * only means the timeout gets extended by one period
4076 * in that case. No big deal, and it avoids the lock 4120 * in that case. No big deal, and it avoids the lock
4077 * most of the time. 4121 * most of the time.
4078 */ 4122 */
4123 if (intf->auto_maintenance_timeout > 0) {
4124 spin_lock_irqsave(&intf->maintenance_mode_lock, flags);
4079 if (intf->auto_maintenance_timeout > 0) { 4125 if (intf->auto_maintenance_timeout > 0) {
4080 spin_lock_irqsave(&intf->maintenance_mode_lock, flags); 4126 intf->auto_maintenance_timeout
4081 if (intf->auto_maintenance_timeout > 0) { 4127 -= timeout_period;
4082 intf->auto_maintenance_timeout 4128 if (!intf->maintenance_mode
4083 -= timeout_period; 4129 && (intf->auto_maintenance_timeout <= 0)) {
4084 if (!intf->maintenance_mode 4130 intf->maintenance_mode_enable = false;
4085 && (intf->auto_maintenance_timeout <= 0)) { 4131 maintenance_mode_update(intf);
4086 intf->maintenance_mode_enable = 0;
4087 maintenance_mode_update(intf);
4088 }
4089 } 4132 }
4090 spin_unlock_irqrestore(&intf->maintenance_mode_lock,
4091 flags);
4092 } 4133 }
4134 spin_unlock_irqrestore(&intf->maintenance_mode_lock,
4135 flags);
4093 } 4136 }
4094 rcu_read_unlock(); 4137
4138 tasklet_schedule(&intf->recv_tasklet);
4139
4140 return waiting_msgs;
4095} 4141}
4096 4142
4097static void ipmi_request_event(void) 4143static void ipmi_request_event(ipmi_smi_t intf)
4098{ 4144{
4099 ipmi_smi_t intf;
4100 struct ipmi_smi_handlers *handlers; 4145 struct ipmi_smi_handlers *handlers;
4101 4146
4102 rcu_read_lock(); 4147 /* No event requests when in maintenance mode. */
4103 /* 4148 if (intf->maintenance_mode_enable)
4104 * Called from the timer, no need to check if handlers is 4149 return;
4105 * valid.
4106 */
4107 list_for_each_entry_rcu(intf, &ipmi_interfaces, link) {
4108 /* No event requests when in maintenance mode. */
4109 if (intf->maintenance_mode_enable)
4110 continue;
4111 4150
4112 handlers = intf->handlers; 4151 handlers = intf->handlers;
4113 if (handlers) 4152 if (handlers)
4114 handlers->request_events(intf->send_info); 4153 handlers->request_events(intf->send_info);
4115 }
4116 rcu_read_unlock();
4117} 4154}
4118 4155
4119static struct timer_list ipmi_timer; 4156static struct timer_list ipmi_timer;
4120 4157
4121/* Call every ~1000 ms. */
4122#define IPMI_TIMEOUT_TIME 1000
4123
4124/* How many jiffies does it take to get to the timeout time. */
4125#define IPMI_TIMEOUT_JIFFIES ((IPMI_TIMEOUT_TIME * HZ) / 1000)
4126
4127/*
4128 * Request events from the queue every second (this is the number of
4129 * IPMI_TIMEOUT_TIMES between event requests). Hopefully, in the
4130 * future, IPMI will add a way to know immediately if an event is in
4131 * the queue and this silliness can go away.
4132 */
4133#define IPMI_REQUEST_EV_TIME (1000 / (IPMI_TIMEOUT_TIME))
4134
4135static atomic_t stop_operation; 4158static atomic_t stop_operation;
4136static unsigned int ticks_to_req_ev = IPMI_REQUEST_EV_TIME;
4137 4159
4138static void ipmi_timeout(unsigned long data) 4160static void ipmi_timeout(unsigned long data)
4139{ 4161{
4162 ipmi_smi_t intf;
4163 int nt = 0;
4164
4140 if (atomic_read(&stop_operation)) 4165 if (atomic_read(&stop_operation))
4141 return; 4166 return;
4142 4167
4143 ticks_to_req_ev--; 4168 rcu_read_lock();
4144 if (ticks_to_req_ev == 0) { 4169 list_for_each_entry_rcu(intf, &ipmi_interfaces, link) {
4145 ipmi_request_event(); 4170 int lnt = 0;
4146 ticks_to_req_ev = IPMI_REQUEST_EV_TIME; 4171
4147 } 4172 if (atomic_read(&intf->event_waiters)) {
4173 intf->ticks_to_req_ev--;
4174 if (intf->ticks_to_req_ev == 0) {
4175 ipmi_request_event(intf);
4176 intf->ticks_to_req_ev = IPMI_REQUEST_EV_TIME;
4177 }
4178 lnt++;
4179 }
4148 4180
4149 ipmi_timeout_handler(IPMI_TIMEOUT_TIME); 4181 lnt += ipmi_timeout_handler(intf, IPMI_TIMEOUT_TIME);
4150 4182
4151 mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES); 4183 lnt = !!lnt;
4184 if (lnt != intf->last_needs_timer &&
4185 intf->handlers->set_need_watch)
4186 intf->handlers->set_need_watch(intf->send_info, lnt);
4187 intf->last_needs_timer = lnt;
4188
4189 nt += lnt;
4190 }
4191 rcu_read_unlock();
4192
4193 if (nt)
4194 mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
4152} 4195}
4153 4196
4197static void need_waiter(ipmi_smi_t intf)
4198{
4199 /* Racy, but worst case we start the timer twice. */
4200 if (!timer_pending(&ipmi_timer))
4201 mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
4202}
4154 4203
4155static atomic_t smi_msg_inuse_count = ATOMIC_INIT(0); 4204static atomic_t smi_msg_inuse_count = ATOMIC_INIT(0);
4156static atomic_t recv_msg_inuse_count = ATOMIC_INIT(0); 4205static atomic_t recv_msg_inuse_count = ATOMIC_INIT(0);
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
index b7efd3c1a882..1c4bb4f6ce93 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -217,7 +217,7 @@ struct smi_info {
217 unsigned char msg_flags; 217 unsigned char msg_flags;
218 218
219 /* Does the BMC have an event buffer? */ 219 /* Does the BMC have an event buffer? */
220 char has_event_buffer; 220 bool has_event_buffer;
221 221
222 /* 222 /*
223 * If set to true, this will request events the next time the 223 * If set to true, this will request events the next time the
@@ -230,7 +230,7 @@ struct smi_info {
230 * call. Generally used after a panic to make sure stuff goes 230 * call. Generally used after a panic to make sure stuff goes
231 * out. 231 * out.
232 */ 232 */
233 int run_to_completion; 233 bool run_to_completion;
234 234
235 /* The I/O port of an SI interface. */ 235 /* The I/O port of an SI interface. */
236 int port; 236 int port;
@@ -248,19 +248,25 @@ struct smi_info {
248 /* The timer for this si. */ 248 /* The timer for this si. */
249 struct timer_list si_timer; 249 struct timer_list si_timer;
250 250
251 /* This flag is set, if the timer is running (timer_pending() isn't enough) */
252 bool timer_running;
253
251 /* The time (in jiffies) the last timeout occurred at. */ 254 /* The time (in jiffies) the last timeout occurred at. */
252 unsigned long last_timeout_jiffies; 255 unsigned long last_timeout_jiffies;
253 256
254 /* Used to gracefully stop the timer without race conditions. */ 257 /* Used to gracefully stop the timer without race conditions. */
255 atomic_t stop_operation; 258 atomic_t stop_operation;
256 259
260 /* Are we waiting for the events, pretimeouts, received msgs? */
261 atomic_t need_watch;
262
257 /* 263 /*
258 * The driver will disable interrupts when it gets into a 264 * The driver will disable interrupts when it gets into a
259 * situation where it cannot handle messages due to lack of 265 * situation where it cannot handle messages due to lack of
260 * memory. Once that situation clears up, it will re-enable 266 * memory. Once that situation clears up, it will re-enable
261 * interrupts. 267 * interrupts.
262 */ 268 */
263 int interrupt_disabled; 269 bool interrupt_disabled;
264 270
265 /* From the get device id response... */ 271 /* From the get device id response... */
266 struct ipmi_device_id device_id; 272 struct ipmi_device_id device_id;
@@ -273,7 +279,7 @@ struct smi_info {
273 * True if we allocated the device, false if it came from 279 * True if we allocated the device, false if it came from
274 * someplace else (like PCI). 280 * someplace else (like PCI).
275 */ 281 */
276 int dev_registered; 282 bool dev_registered;
277 283
278 /* Slave address, could be reported from DMI. */ 284 /* Slave address, could be reported from DMI. */
279 unsigned char slave_addr; 285 unsigned char slave_addr;
@@ -297,19 +303,19 @@ struct smi_info {
297static int force_kipmid[SI_MAX_PARMS]; 303static int force_kipmid[SI_MAX_PARMS];
298static int num_force_kipmid; 304static int num_force_kipmid;
299#ifdef CONFIG_PCI 305#ifdef CONFIG_PCI
300static int pci_registered; 306static bool pci_registered;
301#endif 307#endif
302#ifdef CONFIG_ACPI 308#ifdef CONFIG_ACPI
303static int pnp_registered; 309static bool pnp_registered;
304#endif 310#endif
305#ifdef CONFIG_PARISC 311#ifdef CONFIG_PARISC
306static int parisc_registered; 312static bool parisc_registered;
307#endif 313#endif
308 314
309static unsigned int kipmid_max_busy_us[SI_MAX_PARMS]; 315static unsigned int kipmid_max_busy_us[SI_MAX_PARMS];
310static int num_max_busy_us; 316static int num_max_busy_us;
311 317
312static int unload_when_empty = 1; 318static bool unload_when_empty = true;
313 319
314static int add_smi(struct smi_info *smi); 320static int add_smi(struct smi_info *smi);
315static int try_smi_init(struct smi_info *smi); 321static int try_smi_init(struct smi_info *smi);
@@ -434,6 +440,13 @@ static void start_clear_flags(struct smi_info *smi_info)
434 smi_info->si_state = SI_CLEARING_FLAGS; 440 smi_info->si_state = SI_CLEARING_FLAGS;
435} 441}
436 442
443static void smi_mod_timer(struct smi_info *smi_info, unsigned long new_val)
444{
445 smi_info->last_timeout_jiffies = jiffies;
446 mod_timer(&smi_info->si_timer, new_val);
447 smi_info->timer_running = true;
448}
449
437/* 450/*
438 * When we have a situtaion where we run out of memory and cannot 451 * When we have a situtaion where we run out of memory and cannot
439 * allocate messages, we just leave them in the BMC and run the system 452 * allocate messages, we just leave them in the BMC and run the system
@@ -444,10 +457,9 @@ static inline void disable_si_irq(struct smi_info *smi_info)
444{ 457{
445 if ((smi_info->irq) && (!smi_info->interrupt_disabled)) { 458 if ((smi_info->irq) && (!smi_info->interrupt_disabled)) {
446 start_disable_irq(smi_info); 459 start_disable_irq(smi_info);
447 smi_info->interrupt_disabled = 1; 460 smi_info->interrupt_disabled = true;
448 if (!atomic_read(&smi_info->stop_operation)) 461 if (!atomic_read(&smi_info->stop_operation))
449 mod_timer(&smi_info->si_timer, 462 smi_mod_timer(smi_info, jiffies + SI_TIMEOUT_JIFFIES);
450 jiffies + SI_TIMEOUT_JIFFIES);
451 } 463 }
452} 464}
453 465
@@ -455,7 +467,7 @@ static inline void enable_si_irq(struct smi_info *smi_info)
455{ 467{
456 if ((smi_info->irq) && (smi_info->interrupt_disabled)) { 468 if ((smi_info->irq) && (smi_info->interrupt_disabled)) {
457 start_enable_irq(smi_info); 469 start_enable_irq(smi_info);
458 smi_info->interrupt_disabled = 0; 470 smi_info->interrupt_disabled = false;
459 } 471 }
460} 472}
461 473
@@ -700,7 +712,7 @@ static void handle_transaction_done(struct smi_info *smi_info)
700 dev_warn(smi_info->dev, 712 dev_warn(smi_info->dev,
701 "Maybe ok, but ipmi might run very slowly.\n"); 713 "Maybe ok, but ipmi might run very slowly.\n");
702 } else 714 } else
703 smi_info->interrupt_disabled = 0; 715 smi_info->interrupt_disabled = false;
704 smi_info->si_state = SI_NORMAL; 716 smi_info->si_state = SI_NORMAL;
705 break; 717 break;
706 } 718 }
@@ -853,6 +865,19 @@ static enum si_sm_result smi_event_handler(struct smi_info *smi_info,
853 return si_sm_result; 865 return si_sm_result;
854} 866}
855 867
868static void check_start_timer_thread(struct smi_info *smi_info)
869{
870 if (smi_info->si_state == SI_NORMAL && smi_info->curr_msg == NULL) {
871 smi_mod_timer(smi_info, jiffies + SI_TIMEOUT_JIFFIES);
872
873 if (smi_info->thread)
874 wake_up_process(smi_info->thread);
875
876 start_next_msg(smi_info);
877 smi_event_handler(smi_info, 0);
878 }
879}
880
856static void sender(void *send_info, 881static void sender(void *send_info,
857 struct ipmi_smi_msg *msg, 882 struct ipmi_smi_msg *msg,
858 int priority) 883 int priority)
@@ -906,27 +931,11 @@ static void sender(void *send_info,
906 else 931 else
907 list_add_tail(&msg->link, &smi_info->xmit_msgs); 932 list_add_tail(&msg->link, &smi_info->xmit_msgs);
908 933
909 if (smi_info->si_state == SI_NORMAL && smi_info->curr_msg == NULL) { 934 check_start_timer_thread(smi_info);
910 /*
911 * last_timeout_jiffies is updated here to avoid
912 * smi_timeout() handler passing very large time_diff
913 * value to smi_event_handler() that causes
914 * the send command to abort.
915 */
916 smi_info->last_timeout_jiffies = jiffies;
917
918 mod_timer(&smi_info->si_timer, jiffies + SI_TIMEOUT_JIFFIES);
919
920 if (smi_info->thread)
921 wake_up_process(smi_info->thread);
922
923 start_next_msg(smi_info);
924 smi_event_handler(smi_info, 0);
925 }
926 spin_unlock_irqrestore(&smi_info->si_lock, flags); 935 spin_unlock_irqrestore(&smi_info->si_lock, flags);
927} 936}
928 937
929static void set_run_to_completion(void *send_info, int i_run_to_completion) 938static void set_run_to_completion(void *send_info, bool i_run_to_completion)
930{ 939{
931 struct smi_info *smi_info = send_info; 940 struct smi_info *smi_info = send_info;
932 enum si_sm_result result; 941 enum si_sm_result result;
@@ -1004,6 +1013,17 @@ static int ipmi_thread(void *data)
1004 1013
1005 spin_lock_irqsave(&(smi_info->si_lock), flags); 1014 spin_lock_irqsave(&(smi_info->si_lock), flags);
1006 smi_result = smi_event_handler(smi_info, 0); 1015 smi_result = smi_event_handler(smi_info, 0);
1016
1017 /*
1018 * If the driver is doing something, there is a possible
1019 * race with the timer. If the timer handler see idle,
1020 * and the thread here sees something else, the timer
1021 * handler won't restart the timer even though it is
1022 * required. So start it here if necessary.
1023 */
1024 if (smi_result != SI_SM_IDLE && !smi_info->timer_running)
1025 smi_mod_timer(smi_info, jiffies + SI_TIMEOUT_JIFFIES);
1026
1007 spin_unlock_irqrestore(&(smi_info->si_lock), flags); 1027 spin_unlock_irqrestore(&(smi_info->si_lock), flags);
1008 busy_wait = ipmi_thread_busy_wait(smi_result, smi_info, 1028 busy_wait = ipmi_thread_busy_wait(smi_result, smi_info,
1009 &busy_until); 1029 &busy_until);
@@ -1011,9 +1031,15 @@ static int ipmi_thread(void *data)
1011 ; /* do nothing */ 1031 ; /* do nothing */
1012 else if (smi_result == SI_SM_CALL_WITH_DELAY && busy_wait) 1032 else if (smi_result == SI_SM_CALL_WITH_DELAY && busy_wait)
1013 schedule(); 1033 schedule();
1014 else if (smi_result == SI_SM_IDLE) 1034 else if (smi_result == SI_SM_IDLE) {
1015 schedule_timeout_interruptible(100); 1035 if (atomic_read(&smi_info->need_watch)) {
1016 else 1036 schedule_timeout_interruptible(100);
1037 } else {
1038 /* Wait to be woken up when we are needed. */
1039 __set_current_state(TASK_INTERRUPTIBLE);
1040 schedule();
1041 }
1042 } else
1017 schedule_timeout_interruptible(1); 1043 schedule_timeout_interruptible(1);
1018 } 1044 }
1019 return 0; 1045 return 0;
@@ -1024,7 +1050,7 @@ static void poll(void *send_info)
1024{ 1050{
1025 struct smi_info *smi_info = send_info; 1051 struct smi_info *smi_info = send_info;
1026 unsigned long flags = 0; 1052 unsigned long flags = 0;
1027 int run_to_completion = smi_info->run_to_completion; 1053 bool run_to_completion = smi_info->run_to_completion;
1028 1054
1029 /* 1055 /*
1030 * Make sure there is some delay in the poll loop so we can 1056 * Make sure there is some delay in the poll loop so we can
@@ -1049,6 +1075,17 @@ static void request_events(void *send_info)
1049 atomic_set(&smi_info->req_events, 1); 1075 atomic_set(&smi_info->req_events, 1);
1050} 1076}
1051 1077
1078static void set_need_watch(void *send_info, bool enable)
1079{
1080 struct smi_info *smi_info = send_info;
1081 unsigned long flags;
1082
1083 atomic_set(&smi_info->need_watch, enable);
1084 spin_lock_irqsave(&smi_info->si_lock, flags);
1085 check_start_timer_thread(smi_info);
1086 spin_unlock_irqrestore(&smi_info->si_lock, flags);
1087}
1088
1052static int initialized; 1089static int initialized;
1053 1090
1054static void smi_timeout(unsigned long data) 1091static void smi_timeout(unsigned long data)
@@ -1073,10 +1110,6 @@ static void smi_timeout(unsigned long data)
1073 * SI_USEC_PER_JIFFY); 1110 * SI_USEC_PER_JIFFY);
1074 smi_result = smi_event_handler(smi_info, time_diff); 1111 smi_result = smi_event_handler(smi_info, time_diff);
1075 1112
1076 spin_unlock_irqrestore(&(smi_info->si_lock), flags);
1077
1078 smi_info->last_timeout_jiffies = jiffies_now;
1079
1080 if ((smi_info->irq) && (!smi_info->interrupt_disabled)) { 1113 if ((smi_info->irq) && (!smi_info->interrupt_disabled)) {
1081 /* Running with interrupts, only do long timeouts. */ 1114 /* Running with interrupts, only do long timeouts. */
1082 timeout = jiffies + SI_TIMEOUT_JIFFIES; 1115 timeout = jiffies + SI_TIMEOUT_JIFFIES;
@@ -1098,7 +1131,10 @@ static void smi_timeout(unsigned long data)
1098 1131
1099 do_mod_timer: 1132 do_mod_timer:
1100 if (smi_result != SI_SM_IDLE) 1133 if (smi_result != SI_SM_IDLE)
1101 mod_timer(&(smi_info->si_timer), timeout); 1134 smi_mod_timer(smi_info, timeout);
1135 else
1136 smi_info->timer_running = false;
1137 spin_unlock_irqrestore(&(smi_info->si_lock), flags);
1102} 1138}
1103 1139
1104static irqreturn_t si_irq_handler(int irq, void *data) 1140static irqreturn_t si_irq_handler(int irq, void *data)
@@ -1146,8 +1182,7 @@ static int smi_start_processing(void *send_info,
1146 1182
1147 /* Set up the timer that drives the interface. */ 1183 /* Set up the timer that drives the interface. */
1148 setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi); 1184 setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi);
1149 new_smi->last_timeout_jiffies = jiffies; 1185 smi_mod_timer(new_smi, jiffies + SI_TIMEOUT_JIFFIES);
1150 mod_timer(&new_smi->si_timer, jiffies + SI_TIMEOUT_JIFFIES);
1151 1186
1152 /* 1187 /*
1153 * Check if the user forcefully enabled the daemon. 1188 * Check if the user forcefully enabled the daemon.
@@ -1188,7 +1223,7 @@ static int get_smi_info(void *send_info, struct ipmi_smi_info *data)
1188 return 0; 1223 return 0;
1189} 1224}
1190 1225
1191static void set_maintenance_mode(void *send_info, int enable) 1226static void set_maintenance_mode(void *send_info, bool enable)
1192{ 1227{
1193 struct smi_info *smi_info = send_info; 1228 struct smi_info *smi_info = send_info;
1194 1229
@@ -1202,6 +1237,7 @@ static struct ipmi_smi_handlers handlers = {
1202 .get_smi_info = get_smi_info, 1237 .get_smi_info = get_smi_info,
1203 .sender = sender, 1238 .sender = sender,
1204 .request_events = request_events, 1239 .request_events = request_events,
1240 .set_need_watch = set_need_watch,
1205 .set_maintenance_mode = set_maintenance_mode, 1241 .set_maintenance_mode = set_maintenance_mode,
1206 .set_run_to_completion = set_run_to_completion, 1242 .set_run_to_completion = set_run_to_completion,
1207 .poll = poll, 1243 .poll = poll,
@@ -1229,7 +1265,7 @@ static bool si_tryplatform = 1;
1229#ifdef CONFIG_PCI 1265#ifdef CONFIG_PCI
1230static bool si_trypci = 1; 1266static bool si_trypci = 1;
1231#endif 1267#endif
1232static bool si_trydefaults = 1; 1268static bool si_trydefaults = IS_ENABLED(CONFIG_IPMI_SI_PROBE_DEFAULTS);
1233static char *si_type[SI_MAX_PARMS]; 1269static char *si_type[SI_MAX_PARMS];
1234#define MAX_SI_TYPE_STR 30 1270#define MAX_SI_TYPE_STR 30
1235static char si_type_str[MAX_SI_TYPE_STR]; 1271static char si_type_str[MAX_SI_TYPE_STR];
@@ -1328,7 +1364,7 @@ module_param_array(force_kipmid, int, &num_force_kipmid, 0);
1328MODULE_PARM_DESC(force_kipmid, "Force the kipmi daemon to be enabled (1) or" 1364MODULE_PARM_DESC(force_kipmid, "Force the kipmi daemon to be enabled (1) or"
1329 " disabled(0). Normally the IPMI driver auto-detects" 1365 " disabled(0). Normally the IPMI driver auto-detects"
1330 " this, but the value may be overridden by this parm."); 1366 " this, but the value may be overridden by this parm.");
1331module_param(unload_when_empty, int, 0); 1367module_param(unload_when_empty, bool, 0);
1332MODULE_PARM_DESC(unload_when_empty, "Unload the module if no interfaces are" 1368MODULE_PARM_DESC(unload_when_empty, "Unload the module if no interfaces are"
1333 " specified or found, default is 1. Setting to 0" 1369 " specified or found, default is 1. Setting to 0"
1334 " is useful for hot add of devices using hotmod."); 1370 " is useful for hot add of devices using hotmod.");
@@ -3336,18 +3372,19 @@ static int try_smi_init(struct smi_info *new_smi)
3336 INIT_LIST_HEAD(&(new_smi->hp_xmit_msgs)); 3372 INIT_LIST_HEAD(&(new_smi->hp_xmit_msgs));
3337 new_smi->curr_msg = NULL; 3373 new_smi->curr_msg = NULL;
3338 atomic_set(&new_smi->req_events, 0); 3374 atomic_set(&new_smi->req_events, 0);
3339 new_smi->run_to_completion = 0; 3375 new_smi->run_to_completion = false;
3340 for (i = 0; i < SI_NUM_STATS; i++) 3376 for (i = 0; i < SI_NUM_STATS; i++)
3341 atomic_set(&new_smi->stats[i], 0); 3377 atomic_set(&new_smi->stats[i], 0);
3342 3378
3343 new_smi->interrupt_disabled = 1; 3379 new_smi->interrupt_disabled = true;
3344 atomic_set(&new_smi->stop_operation, 0); 3380 atomic_set(&new_smi->stop_operation, 0);
3381 atomic_set(&new_smi->need_watch, 0);
3345 new_smi->intf_num = smi_num; 3382 new_smi->intf_num = smi_num;
3346 smi_num++; 3383 smi_num++;
3347 3384
3348 rv = try_enable_event_buffer(new_smi); 3385 rv = try_enable_event_buffer(new_smi);
3349 if (rv == 0) 3386 if (rv == 0)
3350 new_smi->has_event_buffer = 1; 3387 new_smi->has_event_buffer = true;
3351 3388
3352 /* 3389 /*
3353 * Start clearing the flags before we enable interrupts or the 3390 * Start clearing the flags before we enable interrupts or the
@@ -3381,7 +3418,7 @@ static int try_smi_init(struct smi_info *new_smi)
3381 rv); 3418 rv);
3382 goto out_err; 3419 goto out_err;
3383 } 3420 }
3384 new_smi->dev_registered = 1; 3421 new_smi->dev_registered = true;
3385 } 3422 }
3386 3423
3387 rv = ipmi_register_smi(&handlers, 3424 rv = ipmi_register_smi(&handlers,
@@ -3430,7 +3467,7 @@ static int try_smi_init(struct smi_info *new_smi)
3430 wait_for_timer_and_thread(new_smi); 3467 wait_for_timer_and_thread(new_smi);
3431 3468
3432 out_err: 3469 out_err:
3433 new_smi->interrupt_disabled = 1; 3470 new_smi->interrupt_disabled = true;
3434 3471
3435 if (new_smi->intf) { 3472 if (new_smi->intf) {
3436 ipmi_unregister_smi(new_smi->intf); 3473 ipmi_unregister_smi(new_smi->intf);
@@ -3466,7 +3503,7 @@ static int try_smi_init(struct smi_info *new_smi)
3466 3503
3467 if (new_smi->dev_registered) { 3504 if (new_smi->dev_registered) {
3468 platform_device_unregister(new_smi->pdev); 3505 platform_device_unregister(new_smi->pdev);
3469 new_smi->dev_registered = 0; 3506 new_smi->dev_registered = false;
3470 } 3507 }
3471 3508
3472 return rv; 3509 return rv;
@@ -3521,14 +3558,14 @@ static int init_ipmi_si(void)
3521 printk(KERN_ERR PFX "Unable to register " 3558 printk(KERN_ERR PFX "Unable to register "
3522 "PCI driver: %d\n", rv); 3559 "PCI driver: %d\n", rv);
3523 else 3560 else
3524 pci_registered = 1; 3561 pci_registered = true;
3525 } 3562 }
3526#endif 3563#endif
3527 3564
3528#ifdef CONFIG_ACPI 3565#ifdef CONFIG_ACPI
3529 if (si_tryacpi) { 3566 if (si_tryacpi) {
3530 pnp_register_driver(&ipmi_pnp_driver); 3567 pnp_register_driver(&ipmi_pnp_driver);
3531 pnp_registered = 1; 3568 pnp_registered = true;
3532 } 3569 }
3533#endif 3570#endif
3534 3571
@@ -3544,7 +3581,7 @@ static int init_ipmi_si(void)
3544 3581
3545#ifdef CONFIG_PARISC 3582#ifdef CONFIG_PARISC
3546 register_parisc_driver(&ipmi_parisc_driver); 3583 register_parisc_driver(&ipmi_parisc_driver);
3547 parisc_registered = 1; 3584 parisc_registered = true;
3548 /* poking PC IO addresses will crash machine, don't do it */ 3585 /* poking PC IO addresses will crash machine, don't do it */
3549 si_trydefaults = 0; 3586 si_trydefaults = 0;
3550#endif 3587#endif
diff --git a/drivers/irqchip/irq-vic.c b/drivers/irqchip/irq-vic.c
index 37dab0b472cd..7d35287f9e90 100644
--- a/drivers/irqchip/irq-vic.c
+++ b/drivers/irqchip/irq-vic.c
@@ -24,6 +24,7 @@
24#include <linux/list.h> 24#include <linux/list.h>
25#include <linux/io.h> 25#include <linux/io.h>
26#include <linux/irq.h> 26#include <linux/irq.h>
27#include <linux/irqchip/chained_irq.h>
27#include <linux/irqdomain.h> 28#include <linux/irqdomain.h>
28#include <linux/of.h> 29#include <linux/of.h>
29#include <linux/of_address.h> 30#include <linux/of_address.h>
@@ -228,12 +229,17 @@ static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs)
228static void vic_handle_irq_cascaded(unsigned int irq, struct irq_desc *desc) 229static void vic_handle_irq_cascaded(unsigned int irq, struct irq_desc *desc)
229{ 230{
230 u32 stat, hwirq; 231 u32 stat, hwirq;
232 struct irq_chip *host_chip = irq_desc_get_chip(desc);
231 struct vic_device *vic = irq_desc_get_handler_data(desc); 233 struct vic_device *vic = irq_desc_get_handler_data(desc);
232 234
235 chained_irq_enter(host_chip, desc);
236
233 while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) { 237 while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) {
234 hwirq = ffs(stat) - 1; 238 hwirq = ffs(stat) - 1;
235 generic_handle_irq(irq_find_mapping(vic->domain, hwirq)); 239 generic_handle_irq(irq_find_mapping(vic->domain, hwirq));
236 } 240 }
241
242 chained_irq_exit(host_chip, desc);
237} 243}
238 244
239/* 245/*
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 25247a852912..ad1b9bea446e 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -4370,8 +4370,7 @@ static struct stripe_head *__get_priority_stripe(struct r5conf *conf, int group)
4370 sh->group = NULL; 4370 sh->group = NULL;
4371 } 4371 }
4372 list_del_init(&sh->lru); 4372 list_del_init(&sh->lru);
4373 atomic_inc(&sh->count); 4373 BUG_ON(atomic_inc_return(&sh->count) != 1);
4374 BUG_ON(atomic_read(&sh->count) != 1);
4375 return sh; 4374 return sh;
4376} 4375}
4377 4376
diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c
index a8efb18e42fa..0ab83708b6a1 100644
--- a/drivers/net/ethernet/broadcom/bnx2.c
+++ b/drivers/net/ethernet/broadcom/bnx2.c
@@ -8627,6 +8627,7 @@ bnx2_remove_one(struct pci_dev *pdev)
8627 pci_disable_device(pdev); 8627 pci_disable_device(pdev);
8628} 8628}
8629 8629
8630#ifdef CONFIG_PM_SLEEP
8630static int 8631static int
8631bnx2_suspend(struct device *device) 8632bnx2_suspend(struct device *device)
8632{ 8633{
@@ -8665,7 +8666,6 @@ bnx2_resume(struct device *device)
8665 return 0; 8666 return 0;
8666} 8667}
8667 8668
8668#ifdef CONFIG_PM_SLEEP
8669static SIMPLE_DEV_PM_OPS(bnx2_pm_ops, bnx2_suspend, bnx2_resume); 8669static SIMPLE_DEV_PM_OPS(bnx2_pm_ops, bnx2_suspend, bnx2_resume);
8670#define BNX2_PM_OPS (&bnx2_pm_ops) 8670#define BNX2_PM_OPS (&bnx2_pm_ops)
8671 8671
diff --git a/drivers/net/ethernet/cadence/Kconfig b/drivers/net/ethernet/cadence/Kconfig
index 751d5c7b312d..7e49c43b7af3 100644
--- a/drivers/net/ethernet/cadence/Kconfig
+++ b/drivers/net/ethernet/cadence/Kconfig
@@ -4,7 +4,7 @@
4 4
5config NET_CADENCE 5config NET_CADENCE
6 bool "Cadence devices" 6 bool "Cadence devices"
7 depends on HAS_IOMEM 7 depends on HAS_IOMEM && (ARM || AVR32 || COMPILE_TEST)
8 default y 8 default y
9 ---help--- 9 ---help---
10 If you have a network (Ethernet) card belonging to this class, say Y. 10 If you have a network (Ethernet) card belonging to this class, say Y.
@@ -22,7 +22,7 @@ if NET_CADENCE
22 22
23config ARM_AT91_ETHER 23config ARM_AT91_ETHER
24 tristate "AT91RM9200 Ethernet support" 24 tristate "AT91RM9200 Ethernet support"
25 depends on HAS_DMA 25 depends on HAS_DMA && (ARCH_AT91RM9200 || COMPILE_TEST)
26 select MACB 26 select MACB
27 ---help--- 27 ---help---
28 If you wish to compile a kernel for the AT91RM9200 and enable 28 If you wish to compile a kernel for the AT91RM9200 and enable
@@ -30,7 +30,7 @@ config ARM_AT91_ETHER
30 30
31config MACB 31config MACB
32 tristate "Cadence MACB/GEM support" 32 tristate "Cadence MACB/GEM support"
33 depends on HAS_DMA 33 depends on HAS_DMA && (PLATFORM_AT32AP || ARCH_AT91 || ARCH_PICOXCELL || ARCH_ZYNQ || COMPILE_TEST)
34 select PHYLIB 34 select PHYLIB
35 ---help--- 35 ---help---
36 The Cadence MACB ethernet interface is found on many Atmel AT32 and 36 The Cadence MACB ethernet interface is found on many Atmel AT32 and
diff --git a/drivers/net/ethernet/chelsio/cxgb4/l2t.c b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
index 81e8402a74b4..8a96572fdde0 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/l2t.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
@@ -154,7 +154,7 @@ static int write_l2e(struct adapter *adap, struct l2t_entry *e, int sync)
154 req->params = htons(L2T_W_PORT(e->lport) | L2T_W_NOREPLY(!sync)); 154 req->params = htons(L2T_W_PORT(e->lport) | L2T_W_NOREPLY(!sync));
155 req->l2t_idx = htons(e->idx); 155 req->l2t_idx = htons(e->idx);
156 req->vlan = htons(e->vlan); 156 req->vlan = htons(e->vlan);
157 if (e->neigh) 157 if (e->neigh && !(e->neigh->dev->flags & IFF_LOOPBACK))
158 memcpy(e->dmac, e->neigh->ha, sizeof(e->dmac)); 158 memcpy(e->dmac, e->neigh->ha, sizeof(e->dmac));
159 memcpy(req->dst_mac, e->dmac, sizeof(req->dst_mac)); 159 memcpy(req->dst_mac, e->dmac, sizeof(req->dst_mac));
160 160
@@ -394,6 +394,8 @@ struct l2t_entry *cxgb4_l2t_get(struct l2t_data *d, struct neighbour *neigh,
394 if (e) { 394 if (e) {
395 spin_lock(&e->lock); /* avoid race with t4_l2t_free */ 395 spin_lock(&e->lock); /* avoid race with t4_l2t_free */
396 e->state = L2T_STATE_RESOLVING; 396 e->state = L2T_STATE_RESOLVING;
397 if (neigh->dev->flags & IFF_LOOPBACK)
398 memcpy(e->dmac, physdev->dev_addr, sizeof(e->dmac));
397 memcpy(e->addr, addr, addr_len); 399 memcpy(e->addr, addr, addr_len);
398 e->ifindex = ifidx; 400 e->ifindex = ifidx;
399 e->hash = hash; 401 e->hash = hash;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
index fb2fe65903c2..bba67681aeaa 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
@@ -682,7 +682,7 @@ enum {
682 SF_RD_ID = 0x9f, /* read ID */ 682 SF_RD_ID = 0x9f, /* read ID */
683 SF_ERASE_SECTOR = 0xd8, /* erase sector */ 683 SF_ERASE_SECTOR = 0xd8, /* erase sector */
684 684
685 FW_MAX_SIZE = 512 * 1024, 685 FW_MAX_SIZE = 16 * SF_SEC_SIZE,
686}; 686};
687 687
688/** 688/**
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
index 8ccaa2520dc3..97db5a7179df 100644
--- a/drivers/net/ethernet/emulex/benet/be.h
+++ b/drivers/net/ethernet/emulex/benet/be.h
@@ -374,6 +374,7 @@ enum vf_state {
374#define BE_FLAGS_NAPI_ENABLED (1 << 9) 374#define BE_FLAGS_NAPI_ENABLED (1 << 9)
375#define BE_FLAGS_QNQ_ASYNC_EVT_RCVD (1 << 11) 375#define BE_FLAGS_QNQ_ASYNC_EVT_RCVD (1 << 11)
376#define BE_FLAGS_VXLAN_OFFLOADS (1 << 12) 376#define BE_FLAGS_VXLAN_OFFLOADS (1 << 12)
377#define BE_FLAGS_SETUP_DONE (1 << 13)
377 378
378#define BE_UC_PMAC_COUNT 30 379#define BE_UC_PMAC_COUNT 30
379#define BE_VF_UC_PMAC_COUNT 2 380#define BE_VF_UC_PMAC_COUNT 2
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 3e6df47b6973..a18645407d21 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2033,11 +2033,13 @@ static void be_tx_compl_clean(struct be_adapter *adapter)
2033 bool dummy_wrb; 2033 bool dummy_wrb;
2034 int i, pending_txqs; 2034 int i, pending_txqs;
2035 2035
2036 /* Wait for a max of 200ms for all the tx-completions to arrive. */ 2036 /* Stop polling for compls when HW has been silent for 10ms */
2037 do { 2037 do {
2038 pending_txqs = adapter->num_tx_qs; 2038 pending_txqs = adapter->num_tx_qs;
2039 2039
2040 for_all_tx_queues(adapter, txo, i) { 2040 for_all_tx_queues(adapter, txo, i) {
2041 cmpl = 0;
2042 num_wrbs = 0;
2041 txq = &txo->q; 2043 txq = &txo->q;
2042 while ((txcp = be_tx_compl_get(&txo->cq))) { 2044 while ((txcp = be_tx_compl_get(&txo->cq))) {
2043 end_idx = 2045 end_idx =
@@ -2050,14 +2052,13 @@ static void be_tx_compl_clean(struct be_adapter *adapter)
2050 if (cmpl) { 2052 if (cmpl) {
2051 be_cq_notify(adapter, txo->cq.id, false, cmpl); 2053 be_cq_notify(adapter, txo->cq.id, false, cmpl);
2052 atomic_sub(num_wrbs, &txq->used); 2054 atomic_sub(num_wrbs, &txq->used);
2053 cmpl = 0; 2055 timeo = 0;
2054 num_wrbs = 0;
2055 } 2056 }
2056 if (atomic_read(&txq->used) == 0) 2057 if (atomic_read(&txq->used) == 0)
2057 pending_txqs--; 2058 pending_txqs--;
2058 } 2059 }
2059 2060
2060 if (pending_txqs == 0 || ++timeo > 200) 2061 if (pending_txqs == 0 || ++timeo > 10 || be_hw_error(adapter))
2061 break; 2062 break;
2062 2063
2063 mdelay(1); 2064 mdelay(1);
@@ -2725,6 +2726,12 @@ static int be_close(struct net_device *netdev)
2725 struct be_eq_obj *eqo; 2726 struct be_eq_obj *eqo;
2726 int i; 2727 int i;
2727 2728
2729 /* This protection is needed as be_close() may be called even when the
2730 * adapter is in cleared state (after eeh perm failure)
2731 */
2732 if (!(adapter->flags & BE_FLAGS_SETUP_DONE))
2733 return 0;
2734
2728 be_roce_dev_close(adapter); 2735 be_roce_dev_close(adapter);
2729 2736
2730 if (adapter->flags & BE_FLAGS_NAPI_ENABLED) { 2737 if (adapter->flags & BE_FLAGS_NAPI_ENABLED) {
@@ -3055,6 +3062,7 @@ static int be_clear(struct be_adapter *adapter)
3055 be_clear_queues(adapter); 3062 be_clear_queues(adapter);
3056 3063
3057 be_msix_disable(adapter); 3064 be_msix_disable(adapter);
3065 adapter->flags &= ~BE_FLAGS_SETUP_DONE;
3058 return 0; 3066 return 0;
3059} 3067}
3060 3068
@@ -3559,6 +3567,7 @@ static int be_setup(struct be_adapter *adapter)
3559 adapter->phy.fc_autoneg = 1; 3567 adapter->phy.fc_autoneg = 1;
3560 3568
3561 be_schedule_worker(adapter); 3569 be_schedule_worker(adapter);
3570 adapter->flags |= BE_FLAGS_SETUP_DONE;
3562 return 0; 3571 return 0;
3563err: 3572err:
3564 be_clear(adapter); 3573 be_clear(adapter);
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index d04b1c3c9b85..b248bcbdae63 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -89,9 +89,8 @@
89#define MVNETA_TX_IN_PRGRS BIT(1) 89#define MVNETA_TX_IN_PRGRS BIT(1)
90#define MVNETA_TX_FIFO_EMPTY BIT(8) 90#define MVNETA_TX_FIFO_EMPTY BIT(8)
91#define MVNETA_RX_MIN_FRAME_SIZE 0x247c 91#define MVNETA_RX_MIN_FRAME_SIZE 0x247c
92#define MVNETA_SERDES_CFG 0x24A0 92#define MVNETA_SGMII_SERDES_CFG 0x24A0
93#define MVNETA_SGMII_SERDES_PROTO 0x0cc7 93#define MVNETA_SGMII_SERDES_PROTO 0x0cc7
94#define MVNETA_RGMII_SERDES_PROTO 0x0667
95#define MVNETA_TYPE_PRIO 0x24bc 94#define MVNETA_TYPE_PRIO 0x24bc
96#define MVNETA_FORCE_UNI BIT(21) 95#define MVNETA_FORCE_UNI BIT(21)
97#define MVNETA_TXQ_CMD_1 0x24e4 96#define MVNETA_TXQ_CMD_1 0x24e4
@@ -712,6 +711,35 @@ static void mvneta_rxq_bm_disable(struct mvneta_port *pp,
712 mvreg_write(pp, MVNETA_RXQ_CONFIG_REG(rxq->id), val); 711 mvreg_write(pp, MVNETA_RXQ_CONFIG_REG(rxq->id), val);
713} 712}
714 713
714
715
716/* Sets the RGMII Enable bit (RGMIIEn) in port MAC control register */
717static void mvneta_gmac_rgmii_set(struct mvneta_port *pp, int enable)
718{
719 u32 val;
720
721 val = mvreg_read(pp, MVNETA_GMAC_CTRL_2);
722
723 if (enable)
724 val |= MVNETA_GMAC2_PORT_RGMII;
725 else
726 val &= ~MVNETA_GMAC2_PORT_RGMII;
727
728 mvreg_write(pp, MVNETA_GMAC_CTRL_2, val);
729}
730
731/* Config SGMII port */
732static void mvneta_port_sgmii_config(struct mvneta_port *pp)
733{
734 u32 val;
735
736 val = mvreg_read(pp, MVNETA_GMAC_CTRL_2);
737 val |= MVNETA_GMAC2_PCS_ENABLE;
738 mvreg_write(pp, MVNETA_GMAC_CTRL_2, val);
739
740 mvreg_write(pp, MVNETA_SGMII_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO);
741}
742
715/* Start the Ethernet port RX and TX activity */ 743/* Start the Ethernet port RX and TX activity */
716static void mvneta_port_up(struct mvneta_port *pp) 744static void mvneta_port_up(struct mvneta_port *pp)
717{ 745{
@@ -2729,15 +2757,12 @@ static void mvneta_port_power_up(struct mvneta_port *pp, int phy_mode)
2729 mvreg_write(pp, MVNETA_UNIT_INTR_CAUSE, 0); 2757 mvreg_write(pp, MVNETA_UNIT_INTR_CAUSE, 0);
2730 2758
2731 if (phy_mode == PHY_INTERFACE_MODE_SGMII) 2759 if (phy_mode == PHY_INTERFACE_MODE_SGMII)
2732 mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO); 2760 mvneta_port_sgmii_config(pp);
2733 else
2734 mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_RGMII_SERDES_PROTO);
2735 2761
2736 val = mvreg_read(pp, MVNETA_GMAC_CTRL_2); 2762 mvneta_gmac_rgmii_set(pp, 1);
2737
2738 val |= MVNETA_GMAC2_PCS_ENABLE | MVNETA_GMAC2_PORT_RGMII;
2739 2763
2740 /* Cancel Port Reset */ 2764 /* Cancel Port Reset */
2765 val = mvreg_read(pp, MVNETA_GMAC_CTRL_2);
2741 val &= ~MVNETA_GMAC2_PORT_RESET; 2766 val &= ~MVNETA_GMAC2_PORT_RESET;
2742 mvreg_write(pp, MVNETA_GMAC_CTRL_2, val); 2767 mvreg_write(pp, MVNETA_GMAC_CTRL_2, val);
2743 2768
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index f0ae95f66ceb..cef267e24f9c 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -2301,13 +2301,8 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data)
2301 /* Allow large DMA segments, up to the firmware limit of 1 GB */ 2301 /* Allow large DMA segments, up to the firmware limit of 1 GB */
2302 dma_set_max_seg_size(&pdev->dev, 1024 * 1024 * 1024); 2302 dma_set_max_seg_size(&pdev->dev, 1024 * 1024 * 1024);
2303 2303
2304 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 2304 dev = pci_get_drvdata(pdev);
2305 if (!priv) { 2305 priv = mlx4_priv(dev);
2306 err = -ENOMEM;
2307 goto err_release_regions;
2308 }
2309
2310 dev = &priv->dev;
2311 dev->pdev = pdev; 2306 dev->pdev = pdev;
2312 INIT_LIST_HEAD(&priv->ctx_list); 2307 INIT_LIST_HEAD(&priv->ctx_list);
2313 spin_lock_init(&priv->ctx_lock); 2308 spin_lock_init(&priv->ctx_lock);
@@ -2374,10 +2369,10 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data)
2374 } else { 2369 } else {
2375 atomic_inc(&pf_loading); 2370 atomic_inc(&pf_loading);
2376 err = pci_enable_sriov(pdev, total_vfs); 2371 err = pci_enable_sriov(pdev, total_vfs);
2377 atomic_dec(&pf_loading);
2378 if (err) { 2372 if (err) {
2379 mlx4_err(dev, "Failed to enable SR-IOV, continuing without SR-IOV (err = %d).\n", 2373 mlx4_err(dev, "Failed to enable SR-IOV, continuing without SR-IOV (err = %d).\n",
2380 err); 2374 err);
2375 atomic_dec(&pf_loading);
2381 err = 0; 2376 err = 0;
2382 } else { 2377 } else {
2383 mlx4_warn(dev, "Running in master mode\n"); 2378 mlx4_warn(dev, "Running in master mode\n");
@@ -2535,8 +2530,10 @@ slave_start:
2535 mlx4_sense_init(dev); 2530 mlx4_sense_init(dev);
2536 mlx4_start_sense(dev); 2531 mlx4_start_sense(dev);
2537 2532
2538 priv->pci_dev_data = pci_dev_data; 2533 priv->removed = 0;
2539 pci_set_drvdata(pdev, dev); 2534
2535 if (mlx4_is_master(dev) && dev->num_vfs)
2536 atomic_dec(&pf_loading);
2540 2537
2541 return 0; 2538 return 0;
2542 2539
@@ -2588,6 +2585,9 @@ err_rel_own:
2588 if (!mlx4_is_slave(dev)) 2585 if (!mlx4_is_slave(dev))
2589 mlx4_free_ownership(dev); 2586 mlx4_free_ownership(dev);
2590 2587
2588 if (mlx4_is_master(dev) && dev->num_vfs)
2589 atomic_dec(&pf_loading);
2590
2591 kfree(priv->dev.dev_vfs); 2591 kfree(priv->dev.dev_vfs);
2592 2592
2593err_free_dev: 2593err_free_dev:
@@ -2604,85 +2604,110 @@ err_disable_pdev:
2604 2604
2605static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id) 2605static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
2606{ 2606{
2607 struct mlx4_priv *priv;
2608 struct mlx4_dev *dev;
2609
2607 printk_once(KERN_INFO "%s", mlx4_version); 2610 printk_once(KERN_INFO "%s", mlx4_version);
2608 2611
2612 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
2613 if (!priv)
2614 return -ENOMEM;
2615
2616 dev = &priv->dev;
2617 pci_set_drvdata(pdev, dev);
2618 priv->pci_dev_data = id->driver_data;
2619
2609 return __mlx4_init_one(pdev, id->driver_data); 2620 return __mlx4_init_one(pdev, id->driver_data);
2610} 2621}
2611 2622
2612static void mlx4_remove_one(struct pci_dev *pdev) 2623static void __mlx4_remove_one(struct pci_dev *pdev)
2613{ 2624{
2614 struct mlx4_dev *dev = pci_get_drvdata(pdev); 2625 struct mlx4_dev *dev = pci_get_drvdata(pdev);
2615 struct mlx4_priv *priv = mlx4_priv(dev); 2626 struct mlx4_priv *priv = mlx4_priv(dev);
2627 int pci_dev_data;
2616 int p; 2628 int p;
2617 2629
2618 if (dev) { 2630 if (priv->removed)
2619 /* in SRIOV it is not allowed to unload the pf's 2631 return;
2620 * driver while there are alive vf's */
2621 if (mlx4_is_master(dev)) {
2622 if (mlx4_how_many_lives_vf(dev))
2623 printk(KERN_ERR "Removing PF when there are assigned VF's !!!\n");
2624 }
2625 mlx4_stop_sense(dev);
2626 mlx4_unregister_device(dev);
2627 2632
2628 for (p = 1; p <= dev->caps.num_ports; p++) { 2633 pci_dev_data = priv->pci_dev_data;
2629 mlx4_cleanup_port_info(&priv->port[p]);
2630 mlx4_CLOSE_PORT(dev, p);
2631 }
2632 2634
2633 if (mlx4_is_master(dev)) 2635 /* in SRIOV it is not allowed to unload the pf's
2634 mlx4_free_resource_tracker(dev, 2636 * driver while there are alive vf's */
2635 RES_TR_FREE_SLAVES_ONLY); 2637 if (mlx4_is_master(dev) && mlx4_how_many_lives_vf(dev))
2636 2638 printk(KERN_ERR "Removing PF when there are assigned VF's !!!\n");
2637 mlx4_cleanup_counters_table(dev); 2639 mlx4_stop_sense(dev);
2638 mlx4_cleanup_qp_table(dev); 2640 mlx4_unregister_device(dev);
2639 mlx4_cleanup_srq_table(dev);
2640 mlx4_cleanup_cq_table(dev);
2641 mlx4_cmd_use_polling(dev);
2642 mlx4_cleanup_eq_table(dev);
2643 mlx4_cleanup_mcg_table(dev);
2644 mlx4_cleanup_mr_table(dev);
2645 mlx4_cleanup_xrcd_table(dev);
2646 mlx4_cleanup_pd_table(dev);
2647 2641
2648 if (mlx4_is_master(dev)) 2642 for (p = 1; p <= dev->caps.num_ports; p++) {
2649 mlx4_free_resource_tracker(dev, 2643 mlx4_cleanup_port_info(&priv->port[p]);
2650 RES_TR_FREE_STRUCTS_ONLY); 2644 mlx4_CLOSE_PORT(dev, p);
2651 2645 }
2652 iounmap(priv->kar);
2653 mlx4_uar_free(dev, &priv->driver_uar);
2654 mlx4_cleanup_uar_table(dev);
2655 if (!mlx4_is_slave(dev))
2656 mlx4_clear_steering(dev);
2657 mlx4_free_eq_table(dev);
2658 if (mlx4_is_master(dev))
2659 mlx4_multi_func_cleanup(dev);
2660 mlx4_close_hca(dev);
2661 if (mlx4_is_slave(dev))
2662 mlx4_multi_func_cleanup(dev);
2663 mlx4_cmd_cleanup(dev);
2664
2665 if (dev->flags & MLX4_FLAG_MSI_X)
2666 pci_disable_msix(pdev);
2667 if (dev->flags & MLX4_FLAG_SRIOV) {
2668 mlx4_warn(dev, "Disabling SR-IOV\n");
2669 pci_disable_sriov(pdev);
2670 }
2671 2646
2672 if (!mlx4_is_slave(dev)) 2647 if (mlx4_is_master(dev))
2673 mlx4_free_ownership(dev); 2648 mlx4_free_resource_tracker(dev,
2649 RES_TR_FREE_SLAVES_ONLY);
2674 2650
2675 kfree(dev->caps.qp0_tunnel); 2651 mlx4_cleanup_counters_table(dev);
2676 kfree(dev->caps.qp0_proxy); 2652 mlx4_cleanup_qp_table(dev);
2677 kfree(dev->caps.qp1_tunnel); 2653 mlx4_cleanup_srq_table(dev);
2678 kfree(dev->caps.qp1_proxy); 2654 mlx4_cleanup_cq_table(dev);
2679 kfree(dev->dev_vfs); 2655 mlx4_cmd_use_polling(dev);
2656 mlx4_cleanup_eq_table(dev);
2657 mlx4_cleanup_mcg_table(dev);
2658 mlx4_cleanup_mr_table(dev);
2659 mlx4_cleanup_xrcd_table(dev);
2660 mlx4_cleanup_pd_table(dev);
2680 2661
2681 kfree(priv); 2662 if (mlx4_is_master(dev))
2682 pci_release_regions(pdev); 2663 mlx4_free_resource_tracker(dev,
2683 pci_disable_device(pdev); 2664 RES_TR_FREE_STRUCTS_ONLY);
2684 pci_set_drvdata(pdev, NULL); 2665
2666 iounmap(priv->kar);
2667 mlx4_uar_free(dev, &priv->driver_uar);
2668 mlx4_cleanup_uar_table(dev);
2669 if (!mlx4_is_slave(dev))
2670 mlx4_clear_steering(dev);
2671 mlx4_free_eq_table(dev);
2672 if (mlx4_is_master(dev))
2673 mlx4_multi_func_cleanup(dev);
2674 mlx4_close_hca(dev);
2675 if (mlx4_is_slave(dev))
2676 mlx4_multi_func_cleanup(dev);
2677 mlx4_cmd_cleanup(dev);
2678
2679 if (dev->flags & MLX4_FLAG_MSI_X)
2680 pci_disable_msix(pdev);
2681 if (dev->flags & MLX4_FLAG_SRIOV) {
2682 mlx4_warn(dev, "Disabling SR-IOV\n");
2683 pci_disable_sriov(pdev);
2684 dev->num_vfs = 0;
2685 } 2685 }
2686
2687 if (!mlx4_is_slave(dev))
2688 mlx4_free_ownership(dev);
2689
2690 kfree(dev->caps.qp0_tunnel);
2691 kfree(dev->caps.qp0_proxy);
2692 kfree(dev->caps.qp1_tunnel);
2693 kfree(dev->caps.qp1_proxy);
2694 kfree(dev->dev_vfs);
2695
2696 pci_release_regions(pdev);
2697 pci_disable_device(pdev);
2698 memset(priv, 0, sizeof(*priv));
2699 priv->pci_dev_data = pci_dev_data;
2700 priv->removed = 1;
2701}
2702
2703static void mlx4_remove_one(struct pci_dev *pdev)
2704{
2705 struct mlx4_dev *dev = pci_get_drvdata(pdev);
2706 struct mlx4_priv *priv = mlx4_priv(dev);
2707
2708 __mlx4_remove_one(pdev);
2709 kfree(priv);
2710 pci_set_drvdata(pdev, NULL);
2686} 2711}
2687 2712
2688int mlx4_restart_one(struct pci_dev *pdev) 2713int mlx4_restart_one(struct pci_dev *pdev)
@@ -2692,7 +2717,7 @@ int mlx4_restart_one(struct pci_dev *pdev)
2692 int pci_dev_data; 2717 int pci_dev_data;
2693 2718
2694 pci_dev_data = priv->pci_dev_data; 2719 pci_dev_data = priv->pci_dev_data;
2695 mlx4_remove_one(pdev); 2720 __mlx4_remove_one(pdev);
2696 return __mlx4_init_one(pdev, pci_dev_data); 2721 return __mlx4_init_one(pdev, pci_dev_data);
2697} 2722}
2698 2723
@@ -2747,7 +2772,7 @@ MODULE_DEVICE_TABLE(pci, mlx4_pci_table);
2747static pci_ers_result_t mlx4_pci_err_detected(struct pci_dev *pdev, 2772static pci_ers_result_t mlx4_pci_err_detected(struct pci_dev *pdev,
2748 pci_channel_state_t state) 2773 pci_channel_state_t state)
2749{ 2774{
2750 mlx4_remove_one(pdev); 2775 __mlx4_remove_one(pdev);
2751 2776
2752 return state == pci_channel_io_perm_failure ? 2777 return state == pci_channel_io_perm_failure ?
2753 PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_NEED_RESET; 2778 PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_NEED_RESET;
@@ -2755,11 +2780,11 @@ static pci_ers_result_t mlx4_pci_err_detected(struct pci_dev *pdev,
2755 2780
2756static pci_ers_result_t mlx4_pci_slot_reset(struct pci_dev *pdev) 2781static pci_ers_result_t mlx4_pci_slot_reset(struct pci_dev *pdev)
2757{ 2782{
2758 const struct pci_device_id *id; 2783 struct mlx4_dev *dev = pci_get_drvdata(pdev);
2759 int ret; 2784 struct mlx4_priv *priv = mlx4_priv(dev);
2785 int ret;
2760 2786
2761 id = pci_match_id(mlx4_pci_table, pdev); 2787 ret = __mlx4_init_one(pdev, priv->pci_dev_data);
2762 ret = __mlx4_init_one(pdev, id->driver_data);
2763 2788
2764 return ret ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED; 2789 return ret ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED;
2765} 2790}
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
index cf8be41abb36..f9c465101963 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
@@ -800,6 +800,7 @@ struct mlx4_priv {
800 spinlock_t ctx_lock; 800 spinlock_t ctx_lock;
801 801
802 int pci_dev_data; 802 int pci_dev_data;
803 int removed;
803 804
804 struct list_head pgdir_list; 805 struct list_head pgdir_list;
805 struct mutex pgdir_mutex; 806 struct mutex pgdir_mutex;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
index b48737dcd3c5..ba20c721ee97 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -2139,8 +2139,6 @@ static int qlcnic_83xx_get_nic_configuration(struct qlcnic_adapter *adapter)
2139 ahw->max_mac_filters = nic_info.max_mac_filters; 2139 ahw->max_mac_filters = nic_info.max_mac_filters;
2140 ahw->max_mtu = nic_info.max_mtu; 2140 ahw->max_mtu = nic_info.max_mtu;
2141 2141
2142 adapter->max_tx_rings = ahw->max_tx_ques;
2143 adapter->max_sds_rings = ahw->max_rx_ques;
2144 /* eSwitch capability indicates vNIC mode. 2142 /* eSwitch capability indicates vNIC mode.
2145 * vNIC and SRIOV are mutually exclusive operational modes. 2143 * vNIC and SRIOV are mutually exclusive operational modes.
2146 * If SR-IOV capability is detected, SR-IOV physical function 2144 * If SR-IOV capability is detected, SR-IOV physical function
@@ -2161,6 +2159,7 @@ static int qlcnic_83xx_get_nic_configuration(struct qlcnic_adapter *adapter)
2161int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter) 2159int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter)
2162{ 2160{
2163 struct qlcnic_hardware_context *ahw = adapter->ahw; 2161 struct qlcnic_hardware_context *ahw = adapter->ahw;
2162 u16 max_sds_rings, max_tx_rings;
2164 int ret; 2163 int ret;
2165 2164
2166 ret = qlcnic_83xx_get_nic_configuration(adapter); 2165 ret = qlcnic_83xx_get_nic_configuration(adapter);
@@ -2173,18 +2172,21 @@ int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter)
2173 if (qlcnic_83xx_config_vnic_opmode(adapter)) 2172 if (qlcnic_83xx_config_vnic_opmode(adapter))
2174 return -EIO; 2173 return -EIO;
2175 2174
2176 adapter->max_sds_rings = QLCNIC_MAX_VNIC_SDS_RINGS; 2175 max_sds_rings = QLCNIC_MAX_VNIC_SDS_RINGS;
2177 adapter->max_tx_rings = QLCNIC_MAX_VNIC_TX_RINGS; 2176 max_tx_rings = QLCNIC_MAX_VNIC_TX_RINGS;
2178 } else if (ret == QLC_83XX_DEFAULT_OPMODE) { 2177 } else if (ret == QLC_83XX_DEFAULT_OPMODE) {
2179 ahw->nic_mode = QLCNIC_DEFAULT_MODE; 2178 ahw->nic_mode = QLCNIC_DEFAULT_MODE;
2180 adapter->nic_ops->init_driver = qlcnic_83xx_init_default_driver; 2179 adapter->nic_ops->init_driver = qlcnic_83xx_init_default_driver;
2181 ahw->idc.state_entry = qlcnic_83xx_idc_ready_state_entry; 2180 ahw->idc.state_entry = qlcnic_83xx_idc_ready_state_entry;
2182 adapter->max_sds_rings = QLCNIC_MAX_SDS_RINGS; 2181 max_sds_rings = QLCNIC_MAX_SDS_RINGS;
2183 adapter->max_tx_rings = QLCNIC_MAX_TX_RINGS; 2182 max_tx_rings = QLCNIC_MAX_TX_RINGS;
2184 } else { 2183 } else {
2185 return -EIO; 2184 return -EIO;
2186 } 2185 }
2187 2186
2187 adapter->max_sds_rings = min(ahw->max_rx_ques, max_sds_rings);
2188 adapter->max_tx_rings = min(ahw->max_tx_ques, max_tx_rings);
2189
2188 return 0; 2190 return 0;
2189} 2191}
2190 2192
@@ -2348,15 +2350,16 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)
2348 goto disable_intr; 2350 goto disable_intr;
2349 } 2351 }
2350 2352
2353 INIT_DELAYED_WORK(&adapter->idc_aen_work, qlcnic_83xx_idc_aen_work);
2354
2351 err = qlcnic_83xx_setup_mbx_intr(adapter); 2355 err = qlcnic_83xx_setup_mbx_intr(adapter);
2352 if (err) 2356 if (err)
2353 goto disable_mbx_intr; 2357 goto disable_mbx_intr;
2354 2358
2355 qlcnic_83xx_clear_function_resources(adapter); 2359 qlcnic_83xx_clear_function_resources(adapter);
2356 2360 qlcnic_dcb_enable(adapter->dcb);
2357 INIT_DELAYED_WORK(&adapter->idc_aen_work, qlcnic_83xx_idc_aen_work);
2358
2359 qlcnic_83xx_initialize_nic(adapter, 1); 2361 qlcnic_83xx_initialize_nic(adapter, 1);
2362 qlcnic_dcb_get_info(adapter->dcb);
2360 2363
2361 /* Configure default, SR-IOV or Virtual NIC mode of operation */ 2364 /* Configure default, SR-IOV or Virtual NIC mode of operation */
2362 err = qlcnic_83xx_configure_opmode(adapter); 2365 err = qlcnic_83xx_configure_opmode(adapter);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
index 64dcbf33d8f0..c1e11f5715b0 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
@@ -883,8 +883,6 @@ int qlcnic_82xx_get_nic_info(struct qlcnic_adapter *adapter,
883 npar_info->max_rx_ques = le16_to_cpu(nic_info->max_rx_ques); 883 npar_info->max_rx_ques = le16_to_cpu(nic_info->max_rx_ques);
884 npar_info->capabilities = le32_to_cpu(nic_info->capabilities); 884 npar_info->capabilities = le32_to_cpu(nic_info->capabilities);
885 npar_info->max_mtu = le16_to_cpu(nic_info->max_mtu); 885 npar_info->max_mtu = le16_to_cpu(nic_info->max_mtu);
886 adapter->max_tx_rings = npar_info->max_tx_ques;
887 adapter->max_sds_rings = npar_info->max_rx_ques;
888 } 886 }
889 887
890 qlcnic_free_mbx_args(&cmd); 888 qlcnic_free_mbx_args(&cmd);
@@ -1356,6 +1354,7 @@ int qlcnic_config_switch_port(struct qlcnic_adapter *adapter,
1356 arg2 &= ~BIT_3; 1354 arg2 &= ~BIT_3;
1357 break; 1355 break;
1358 case QLCNIC_ADD_VLAN: 1356 case QLCNIC_ADD_VLAN:
1357 arg1 &= ~(0x0ffff << 16);
1359 arg1 |= (BIT_2 | BIT_5); 1358 arg1 |= (BIT_2 | BIT_5);
1360 arg1 |= (esw_cfg->vlan_id << 16); 1359 arg1 |= (esw_cfg->vlan_id << 16);
1361 break; 1360 break;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c
index 7d4f54912bad..a51fe18f09a8 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c
@@ -330,8 +330,6 @@ static int __qlcnic_dcb_attach(struct qlcnic_dcb *dcb)
330 goto out_free_cfg; 330 goto out_free_cfg;
331 } 331 }
332 332
333 qlcnic_dcb_get_info(dcb);
334
335 return 0; 333 return 0;
336out_free_cfg: 334out_free_cfg:
337 kfree(dcb->cfg); 335 kfree(dcb->cfg);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 309d05640883..dbf75393f758 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -670,7 +670,7 @@ int qlcnic_setup_tss_rss_intr(struct qlcnic_adapter *adapter)
670 else 670 else
671 num_msix += adapter->drv_tx_rings; 671 num_msix += adapter->drv_tx_rings;
672 672
673 if (adapter->drv_rss_rings > 0) 673 if (adapter->drv_rss_rings > 0)
674 num_msix += adapter->drv_rss_rings; 674 num_msix += adapter->drv_rss_rings;
675 else 675 else
676 num_msix += adapter->drv_sds_rings; 676 num_msix += adapter->drv_sds_rings;
@@ -686,19 +686,15 @@ int qlcnic_setup_tss_rss_intr(struct qlcnic_adapter *adapter)
686 return -ENOMEM; 686 return -ENOMEM;
687 } 687 }
688 688
689restore:
690 for (vector = 0; vector < num_msix; vector++) 689 for (vector = 0; vector < num_msix; vector++)
691 adapter->msix_entries[vector].entry = vector; 690 adapter->msix_entries[vector].entry = vector;
692 691
692restore:
693 err = pci_enable_msix(pdev, adapter->msix_entries, num_msix); 693 err = pci_enable_msix(pdev, adapter->msix_entries, num_msix);
694 if (err == 0) { 694 if (err > 0) {
695 adapter->ahw->num_msix = num_msix; 695 if (!adapter->drv_tss_rings && !adapter->drv_rss_rings)
696 if (adapter->drv_tss_rings > 0) 696 return -ENOSPC;
697 adapter->drv_tx_rings = adapter->drv_tss_rings;
698 697
699 if (adapter->drv_rss_rings > 0)
700 adapter->drv_sds_rings = adapter->drv_rss_rings;
701 } else {
702 netdev_info(adapter->netdev, 698 netdev_info(adapter->netdev,
703 "Unable to allocate %d MSI-X vectors, Available vectors %d\n", 699 "Unable to allocate %d MSI-X vectors, Available vectors %d\n",
704 num_msix, err); 700 num_msix, err);
@@ -716,12 +712,20 @@ restore:
716 "Restoring %d Tx, %d SDS rings for total %d vectors.\n", 712 "Restoring %d Tx, %d SDS rings for total %d vectors.\n",
717 adapter->drv_tx_rings, adapter->drv_sds_rings, 713 adapter->drv_tx_rings, adapter->drv_sds_rings,
718 num_msix); 714 num_msix);
719 goto restore;
720 715
721 err = -EIO; 716 goto restore;
717 } else if (err < 0) {
718 return err;
722 } 719 }
723 720
724 return err; 721 adapter->ahw->num_msix = num_msix;
722 if (adapter->drv_tss_rings > 0)
723 adapter->drv_tx_rings = adapter->drv_tss_rings;
724
725 if (adapter->drv_rss_rings > 0)
726 adapter->drv_sds_rings = adapter->drv_rss_rings;
727
728 return 0;
725} 729}
726 730
727int qlcnic_enable_msix(struct qlcnic_adapter *adapter, u32 num_msix) 731int qlcnic_enable_msix(struct qlcnic_adapter *adapter, u32 num_msix)
@@ -2528,8 +2532,6 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2528 goto err_out_free_hw; 2532 goto err_out_free_hw;
2529 } 2533 }
2530 2534
2531 qlcnic_dcb_enable(adapter->dcb);
2532
2533 if (qlcnic_read_mac_addr(adapter)) 2535 if (qlcnic_read_mac_addr(adapter))
2534 dev_warn(&pdev->dev, "failed to read mac addr\n"); 2536 dev_warn(&pdev->dev, "failed to read mac addr\n");
2535 2537
@@ -2549,7 +2551,10 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2549 "Device does not support MSI interrupts\n"); 2551 "Device does not support MSI interrupts\n");
2550 2552
2551 if (qlcnic_82xx_check(adapter)) { 2553 if (qlcnic_82xx_check(adapter)) {
2554 qlcnic_dcb_enable(adapter->dcb);
2555 qlcnic_dcb_get_info(adapter->dcb);
2552 err = qlcnic_setup_intr(adapter); 2556 err = qlcnic_setup_intr(adapter);
2557
2553 if (err) { 2558 if (err) {
2554 dev_err(&pdev->dev, "Failed to setup interrupt\n"); 2559 dev_err(&pdev->dev, "Failed to setup interrupt\n");
2555 goto err_out_disable_msi; 2560 goto err_out_disable_msi;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
index 14f748cbf0de..280137991544 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
@@ -461,6 +461,16 @@ static int qlcnic_pci_sriov_disable(struct qlcnic_adapter *adapter)
461{ 461{
462 struct net_device *netdev = adapter->netdev; 462 struct net_device *netdev = adapter->netdev;
463 463
464 if (pci_vfs_assigned(adapter->pdev)) {
465 netdev_err(adapter->netdev,
466 "SR-IOV VFs belonging to port %d are assigned to VMs. SR-IOV can not be disabled on this port\n",
467 adapter->portnum);
468 netdev_info(adapter->netdev,
469 "Please detach SR-IOV VFs belonging to port %d from VMs, and then try to disable SR-IOV on this port\n",
470 adapter->portnum);
471 return -EPERM;
472 }
473
464 rtnl_lock(); 474 rtnl_lock();
465 if (netif_running(netdev)) 475 if (netif_running(netdev))
466 __qlcnic_down(adapter, netdev); 476 __qlcnic_down(adapter, netdev);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
index 448d156c3d08..cd346e27f2e1 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
@@ -354,7 +354,7 @@ int qlcnic_is_valid_nic_func(struct qlcnic_adapter *adapter, u8 pci_func)
354{ 354{
355 int i; 355 int i;
356 356
357 for (i = 0; i < adapter->ahw->max_vnic_func; i++) { 357 for (i = 0; i < adapter->ahw->total_nic_func; i++) {
358 if (adapter->npars[i].pci_func == pci_func) 358 if (adapter->npars[i].pci_func == pci_func)
359 return i; 359 return i;
360 } 360 }
@@ -720,6 +720,7 @@ static ssize_t qlcnic_sysfs_read_npar_config(struct file *file,
720 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); 720 struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
721 struct qlcnic_npar_func_cfg *np_cfg; 721 struct qlcnic_npar_func_cfg *np_cfg;
722 struct qlcnic_info nic_info; 722 struct qlcnic_info nic_info;
723 u8 pci_func;
723 int i, ret; 724 int i, ret;
724 u32 count; 725 u32 count;
725 726
@@ -729,26 +730,28 @@ static ssize_t qlcnic_sysfs_read_npar_config(struct file *file,
729 730
730 count = size / sizeof(struct qlcnic_npar_func_cfg); 731 count = size / sizeof(struct qlcnic_npar_func_cfg);
731 for (i = 0; i < adapter->ahw->total_nic_func; i++) { 732 for (i = 0; i < adapter->ahw->total_nic_func; i++) {
732 if (qlcnic_is_valid_nic_func(adapter, i) < 0)
733 continue;
734 if (adapter->npars[i].pci_func >= count) { 733 if (adapter->npars[i].pci_func >= count) {
735 dev_dbg(dev, "%s: Total nic functions[%d], App sent function count[%d]\n", 734 dev_dbg(dev, "%s: Total nic functions[%d], App sent function count[%d]\n",
736 __func__, adapter->ahw->total_nic_func, count); 735 __func__, adapter->ahw->total_nic_func, count);
737 continue; 736 continue;
738 } 737 }
739 ret = qlcnic_get_nic_info(adapter, &nic_info, i);
740 if (ret)
741 return ret;
742 if (!adapter->npars[i].eswitch_status) 738 if (!adapter->npars[i].eswitch_status)
743 continue; 739 continue;
744 np_cfg[i].pci_func = i; 740 pci_func = adapter->npars[i].pci_func;
745 np_cfg[i].op_mode = (u8)nic_info.op_mode; 741 if (qlcnic_is_valid_nic_func(adapter, pci_func) < 0)
746 np_cfg[i].port_num = nic_info.phys_port; 742 continue;
747 np_cfg[i].fw_capab = nic_info.capabilities; 743 ret = qlcnic_get_nic_info(adapter, &nic_info, pci_func);
748 np_cfg[i].min_bw = nic_info.min_tx_bw; 744 if (ret)
749 np_cfg[i].max_bw = nic_info.max_tx_bw; 745 return ret;
750 np_cfg[i].max_tx_queues = nic_info.max_tx_ques; 746
751 np_cfg[i].max_rx_queues = nic_info.max_rx_ques; 747 np_cfg[pci_func].pci_func = pci_func;
748 np_cfg[pci_func].op_mode = (u8)nic_info.op_mode;
749 np_cfg[pci_func].port_num = nic_info.phys_port;
750 np_cfg[pci_func].fw_capab = nic_info.capabilities;
751 np_cfg[pci_func].min_bw = nic_info.min_tx_bw;
752 np_cfg[pci_func].max_bw = nic_info.max_tx_bw;
753 np_cfg[pci_func].max_tx_queues = nic_info.max_tx_ques;
754 np_cfg[pci_func].max_rx_queues = nic_info.max_rx_ques;
752 } 755 }
753 return size; 756 return size;
754} 757}
diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c
index 430bb0db9bc4..e36f194673a4 100644
--- a/drivers/net/ieee802154/at86rf230.c
+++ b/drivers/net/ieee802154/at86rf230.c
@@ -365,7 +365,7 @@ __at86rf230_read_subreg(struct at86rf230_local *lp,
365 dev_vdbg(&lp->spi->dev, "buf[1] = %02x\n", buf[1]); 365 dev_vdbg(&lp->spi->dev, "buf[1] = %02x\n", buf[1]);
366 366
367 if (status == 0) 367 if (status == 0)
368 *data = buf[1]; 368 *data = (buf[1] & mask) >> shift;
369 369
370 return status; 370 return status;
371} 371}
@@ -1025,14 +1025,6 @@ static int at86rf230_hw_init(struct at86rf230_local *lp)
1025 return -EINVAL; 1025 return -EINVAL;
1026 } 1026 }
1027 1027
1028 rc = at86rf230_read_subreg(lp, SR_AVDD_OK, &status);
1029 if (rc)
1030 return rc;
1031 if (!status) {
1032 dev_err(&lp->spi->dev, "AVDD error\n");
1033 return -EINVAL;
1034 }
1035
1036 return 0; 1028 return 0;
1037} 1029}
1038 1030
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index c55e316373a1..82355d5d155a 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -1755,8 +1755,8 @@ int vxlan_xmit_skb(struct vxlan_sock *vs,
1755 if (err) 1755 if (err)
1756 return err; 1756 return err;
1757 1757
1758 return iptunnel_xmit(rt, skb, src, dst, IPPROTO_UDP, tos, ttl, df, 1758 return iptunnel_xmit(vs->sock->sk, rt, skb, src, dst, IPPROTO_UDP,
1759 false); 1759 tos, ttl, df, false);
1760} 1760}
1761EXPORT_SYMBOL_GPL(vxlan_xmit_skb); 1761EXPORT_SYMBOL_GPL(vxlan_xmit_skb);
1762 1762
diff --git a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c
index 84734a805092..83c39e2858bf 100644
--- a/drivers/net/wan/cosa.c
+++ b/drivers/net/wan/cosa.c
@@ -1521,11 +1521,7 @@ static int cosa_reset_and_read_id(struct cosa_data *cosa, char *idstring)
1521 cosa_putstatus(cosa, 0); 1521 cosa_putstatus(cosa, 0);
1522 cosa_getdata8(cosa); 1522 cosa_getdata8(cosa);
1523 cosa_putstatus(cosa, SR_RST); 1523 cosa_putstatus(cosa, SR_RST);
1524#ifdef MODULE
1525 msleep(500); 1524 msleep(500);
1526#else
1527 udelay(5*100000);
1528#endif
1529 /* Disable all IRQs from the card */ 1525 /* Disable all IRQs from the card */
1530 cosa_putstatus(cosa, 0); 1526 cosa_putstatus(cosa, 0);
1531 1527
diff --git a/drivers/of/base.c b/drivers/of/base.c
index f72d19b7e5d2..6d4ee22708c9 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -1828,17 +1828,13 @@ int of_update_property(struct device_node *np, struct property *newprop)
1828 next = &(*next)->next; 1828 next = &(*next)->next;
1829 } 1829 }
1830 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1830 raw_spin_unlock_irqrestore(&devtree_lock, flags);
1831 if (rc) 1831 if (!found)
1832 return rc; 1832 return -ENODEV;
1833 1833
1834 /* Update the sysfs attribute */ 1834 /* Update the sysfs attribute */
1835 if (oldprop) 1835 sysfs_remove_bin_file(&np->kobj, &oldprop->attr);
1836 sysfs_remove_bin_file(&np->kobj, &oldprop->attr);
1837 __of_add_property_sysfs(np, newprop); 1836 __of_add_property_sysfs(np, newprop);
1838 1837
1839 if (!found)
1840 return -ENODEV;
1841
1842 return 0; 1838 return 0;
1843} 1839}
1844 1840
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index fa16a912a927..7a2ef7bb8022 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -491,7 +491,7 @@ static int __init __reserved_mem_reserve_reg(unsigned long node,
491 * in /reserved-memory matches the values supported by the current implementation, 491 * in /reserved-memory matches the values supported by the current implementation,
492 * also check if ranges property has been provided 492 * also check if ranges property has been provided
493 */ 493 */
494static int __reserved_mem_check_root(unsigned long node) 494static int __init __reserved_mem_check_root(unsigned long node)
495{ 495{
496 __be32 *prop; 496 __be32 *prop;
497 497
diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig
index e49324032611..e00c02d0a094 100644
--- a/drivers/pinctrl/Kconfig
+++ b/drivers/pinctrl/Kconfig
@@ -104,16 +104,16 @@ config PINCTRL_BCM2835
104 select PINMUX 104 select PINMUX
105 select PINCONF 105 select PINCONF
106 106
107config PINCTRL_CAPRI 107config PINCTRL_BCM281XX
108 bool "Broadcom Capri pinctrl driver" 108 bool "Broadcom BCM281xx pinctrl driver"
109 depends on OF 109 depends on OF
110 select PINMUX 110 select PINMUX
111 select PINCONF 111 select PINCONF
112 select GENERIC_PINCONF 112 select GENERIC_PINCONF
113 select REGMAP_MMIO 113 select REGMAP_MMIO
114 help 114 help
115 Say Y here to support Broadcom Capri pinctrl driver, which is used for 115 Say Y here to support Broadcom BCM281xx pinctrl driver, which is used
116 the BCM281xx SoC family, including BCM11130, BCM11140, BCM11351, 116 for the BCM281xx SoC family, including BCM11130, BCM11140, BCM11351,
117 BCM28145, and BCM28155 SoCs. This driver requires the pinctrl 117 BCM28145, and BCM28155 SoCs. This driver requires the pinctrl
118 framework. GPIO is provided by a separate GPIO driver. 118 framework. GPIO is provided by a separate GPIO driver.
119 119
diff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile
index 4b835880cf80..6d3fd62b9ae8 100644
--- a/drivers/pinctrl/Makefile
+++ b/drivers/pinctrl/Makefile
@@ -21,7 +21,7 @@ obj-$(CONFIG_PINCTRL_BF60x) += pinctrl-adi2-bf60x.o
21obj-$(CONFIG_PINCTRL_AT91) += pinctrl-at91.o 21obj-$(CONFIG_PINCTRL_AT91) += pinctrl-at91.o
22obj-$(CONFIG_PINCTRL_BCM2835) += pinctrl-bcm2835.o 22obj-$(CONFIG_PINCTRL_BCM2835) += pinctrl-bcm2835.o
23obj-$(CONFIG_PINCTRL_BAYTRAIL) += pinctrl-baytrail.o 23obj-$(CONFIG_PINCTRL_BAYTRAIL) += pinctrl-baytrail.o
24obj-$(CONFIG_PINCTRL_CAPRI) += pinctrl-capri.o 24obj-$(CONFIG_PINCTRL_BCM281XX) += pinctrl-bcm281xx.o
25obj-$(CONFIG_PINCTRL_IMX) += pinctrl-imx.o 25obj-$(CONFIG_PINCTRL_IMX) += pinctrl-imx.o
26obj-$(CONFIG_PINCTRL_IMX1_CORE) += pinctrl-imx1-core.o 26obj-$(CONFIG_PINCTRL_IMX1_CORE) += pinctrl-imx1-core.o
27obj-$(CONFIG_PINCTRL_IMX27) += pinctrl-imx27.o 27obj-$(CONFIG_PINCTRL_IMX27) += pinctrl-imx27.o
diff --git a/drivers/pinctrl/pinctrl-bcm281xx.c b/drivers/pinctrl/pinctrl-bcm281xx.c
new file mode 100644
index 000000000000..3bed792b2c03
--- /dev/null
+++ b/drivers/pinctrl/pinctrl-bcm281xx.c
@@ -0,0 +1,1461 @@
1/*
2 * Copyright (C) 2013 Broadcom Corporation
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation version 2.
7 *
8 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
9 * kind, whether express or implied; without even the implied warranty
10 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13#include <linux/err.h>
14#include <linux/io.h>
15#include <linux/module.h>
16#include <linux/of.h>
17#include <linux/platform_device.h>
18#include <linux/pinctrl/pinctrl.h>
19#include <linux/pinctrl/pinmux.h>
20#include <linux/pinctrl/pinconf.h>
21#include <linux/pinctrl/pinconf-generic.h>
22#include <linux/regmap.h>
23#include <linux/slab.h>
24#include "core.h"
25#include "pinctrl-utils.h"
26
27/* BCM281XX Pin Control Registers Definitions */
28
29/* Function Select bits are the same for all pin control registers */
30#define BCM281XX_PIN_REG_F_SEL_MASK 0x0700
31#define BCM281XX_PIN_REG_F_SEL_SHIFT 8
32
33/* Standard pin register */
34#define BCM281XX_STD_PIN_REG_DRV_STR_MASK 0x0007
35#define BCM281XX_STD_PIN_REG_DRV_STR_SHIFT 0
36#define BCM281XX_STD_PIN_REG_INPUT_DIS_MASK 0x0008
37#define BCM281XX_STD_PIN_REG_INPUT_DIS_SHIFT 3
38#define BCM281XX_STD_PIN_REG_SLEW_MASK 0x0010
39#define BCM281XX_STD_PIN_REG_SLEW_SHIFT 4
40#define BCM281XX_STD_PIN_REG_PULL_UP_MASK 0x0020
41#define BCM281XX_STD_PIN_REG_PULL_UP_SHIFT 5
42#define BCM281XX_STD_PIN_REG_PULL_DN_MASK 0x0040
43#define BCM281XX_STD_PIN_REG_PULL_DN_SHIFT 6
44#define BCM281XX_STD_PIN_REG_HYST_MASK 0x0080
45#define BCM281XX_STD_PIN_REG_HYST_SHIFT 7
46
47/* I2C pin register */
48#define BCM281XX_I2C_PIN_REG_INPUT_DIS_MASK 0x0004
49#define BCM281XX_I2C_PIN_REG_INPUT_DIS_SHIFT 2
50#define BCM281XX_I2C_PIN_REG_SLEW_MASK 0x0008
51#define BCM281XX_I2C_PIN_REG_SLEW_SHIFT 3
52#define BCM281XX_I2C_PIN_REG_PULL_UP_STR_MASK 0x0070
53#define BCM281XX_I2C_PIN_REG_PULL_UP_STR_SHIFT 4
54
55/* HDMI pin register */
56#define BCM281XX_HDMI_PIN_REG_INPUT_DIS_MASK 0x0008
57#define BCM281XX_HDMI_PIN_REG_INPUT_DIS_SHIFT 3
58#define BCM281XX_HDMI_PIN_REG_MODE_MASK 0x0010
59#define BCM281XX_HDMI_PIN_REG_MODE_SHIFT 4
60
61/**
62 * bcm281xx_pin_type - types of pin register
63 */
64enum bcm281xx_pin_type {
65 BCM281XX_PIN_TYPE_UNKNOWN = 0,
66 BCM281XX_PIN_TYPE_STD,
67 BCM281XX_PIN_TYPE_I2C,
68 BCM281XX_PIN_TYPE_HDMI,
69};
70
71static enum bcm281xx_pin_type std_pin = BCM281XX_PIN_TYPE_STD;
72static enum bcm281xx_pin_type i2c_pin = BCM281XX_PIN_TYPE_I2C;
73static enum bcm281xx_pin_type hdmi_pin = BCM281XX_PIN_TYPE_HDMI;
74
75/**
76 * bcm281xx_pin_function- define pin function
77 */
78struct bcm281xx_pin_function {
79 const char *name;
80 const char * const *groups;
81 const unsigned ngroups;
82};
83
84/**
85 * bcm281xx_pinctrl_data - Broadcom-specific pinctrl data
86 * @reg_base - base of pinctrl registers
87 */
88struct bcm281xx_pinctrl_data {
89 void __iomem *reg_base;
90
91 /* List of all pins */
92 const struct pinctrl_pin_desc *pins;
93 const unsigned npins;
94
95 const struct bcm281xx_pin_function *functions;
96 const unsigned nfunctions;
97
98 struct regmap *regmap;
99};
100
101/*
102 * Pin number definition. The order here must be the same as defined in the
103 * PADCTRLREG block in the RDB.
104 */
105#define BCM281XX_PIN_ADCSYNC 0
106#define BCM281XX_PIN_BAT_RM 1
107#define BCM281XX_PIN_BSC1_SCL 2
108#define BCM281XX_PIN_BSC1_SDA 3
109#define BCM281XX_PIN_BSC2_SCL 4
110#define BCM281XX_PIN_BSC2_SDA 5
111#define BCM281XX_PIN_CLASSGPWR 6
112#define BCM281XX_PIN_CLK_CX8 7
113#define BCM281XX_PIN_CLKOUT_0 8
114#define BCM281XX_PIN_CLKOUT_1 9
115#define BCM281XX_PIN_CLKOUT_2 10
116#define BCM281XX_PIN_CLKOUT_3 11
117#define BCM281XX_PIN_CLKREQ_IN_0 12
118#define BCM281XX_PIN_CLKREQ_IN_1 13
119#define BCM281XX_PIN_CWS_SYS_REQ1 14
120#define BCM281XX_PIN_CWS_SYS_REQ2 15
121#define BCM281XX_PIN_CWS_SYS_REQ3 16
122#define BCM281XX_PIN_DIGMIC1_CLK 17
123#define BCM281XX_PIN_DIGMIC1_DQ 18
124#define BCM281XX_PIN_DIGMIC2_CLK 19
125#define BCM281XX_PIN_DIGMIC2_DQ 20
126#define BCM281XX_PIN_GPEN13 21
127#define BCM281XX_PIN_GPEN14 22
128#define BCM281XX_PIN_GPEN15 23
129#define BCM281XX_PIN_GPIO00 24
130#define BCM281XX_PIN_GPIO01 25
131#define BCM281XX_PIN_GPIO02 26
132#define BCM281XX_PIN_GPIO03 27
133#define BCM281XX_PIN_GPIO04 28
134#define BCM281XX_PIN_GPIO05 29
135#define BCM281XX_PIN_GPIO06 30
136#define BCM281XX_PIN_GPIO07 31
137#define BCM281XX_PIN_GPIO08 32
138#define BCM281XX_PIN_GPIO09 33
139#define BCM281XX_PIN_GPIO10 34
140#define BCM281XX_PIN_GPIO11 35
141#define BCM281XX_PIN_GPIO12 36
142#define BCM281XX_PIN_GPIO13 37
143#define BCM281XX_PIN_GPIO14 38
144#define BCM281XX_PIN_GPS_PABLANK 39
145#define BCM281XX_PIN_GPS_TMARK 40
146#define BCM281XX_PIN_HDMI_SCL 41
147#define BCM281XX_PIN_HDMI_SDA 42
148#define BCM281XX_PIN_IC_DM 43
149#define BCM281XX_PIN_IC_DP 44
150#define BCM281XX_PIN_KP_COL_IP_0 45
151#define BCM281XX_PIN_KP_COL_IP_1 46
152#define BCM281XX_PIN_KP_COL_IP_2 47
153#define BCM281XX_PIN_KP_COL_IP_3 48
154#define BCM281XX_PIN_KP_ROW_OP_0 49
155#define BCM281XX_PIN_KP_ROW_OP_1 50
156#define BCM281XX_PIN_KP_ROW_OP_2 51
157#define BCM281XX_PIN_KP_ROW_OP_3 52
158#define BCM281XX_PIN_LCD_B_0 53
159#define BCM281XX_PIN_LCD_B_1 54
160#define BCM281XX_PIN_LCD_B_2 55
161#define BCM281XX_PIN_LCD_B_3 56
162#define BCM281XX_PIN_LCD_B_4 57
163#define BCM281XX_PIN_LCD_B_5 58
164#define BCM281XX_PIN_LCD_B_6 59
165#define BCM281XX_PIN_LCD_B_7 60
166#define BCM281XX_PIN_LCD_G_0 61
167#define BCM281XX_PIN_LCD_G_1 62
168#define BCM281XX_PIN_LCD_G_2 63
169#define BCM281XX_PIN_LCD_G_3 64
170#define BCM281XX_PIN_LCD_G_4 65
171#define BCM281XX_PIN_LCD_G_5 66
172#define BCM281XX_PIN_LCD_G_6 67
173#define BCM281XX_PIN_LCD_G_7 68
174#define BCM281XX_PIN_LCD_HSYNC 69
175#define BCM281XX_PIN_LCD_OE 70
176#define BCM281XX_PIN_LCD_PCLK 71
177#define BCM281XX_PIN_LCD_R_0 72
178#define BCM281XX_PIN_LCD_R_1 73
179#define BCM281XX_PIN_LCD_R_2 74
180#define BCM281XX_PIN_LCD_R_3 75
181#define BCM281XX_PIN_LCD_R_4 76
182#define BCM281XX_PIN_LCD_R_5 77
183#define BCM281XX_PIN_LCD_R_6 78
184#define BCM281XX_PIN_LCD_R_7 79
185#define BCM281XX_PIN_LCD_VSYNC 80
186#define BCM281XX_PIN_MDMGPIO0 81
187#define BCM281XX_PIN_MDMGPIO1 82
188#define BCM281XX_PIN_MDMGPIO2 83
189#define BCM281XX_PIN_MDMGPIO3 84
190#define BCM281XX_PIN_MDMGPIO4 85
191#define BCM281XX_PIN_MDMGPIO5 86
192#define BCM281XX_PIN_MDMGPIO6 87
193#define BCM281XX_PIN_MDMGPIO7 88
194#define BCM281XX_PIN_MDMGPIO8 89
195#define BCM281XX_PIN_MPHI_DATA_0 90
196#define BCM281XX_PIN_MPHI_DATA_1 91
197#define BCM281XX_PIN_MPHI_DATA_2 92
198#define BCM281XX_PIN_MPHI_DATA_3 93
199#define BCM281XX_PIN_MPHI_DATA_4 94
200#define BCM281XX_PIN_MPHI_DATA_5 95
201#define BCM281XX_PIN_MPHI_DATA_6 96
202#define BCM281XX_PIN_MPHI_DATA_7 97
203#define BCM281XX_PIN_MPHI_DATA_8 98
204#define BCM281XX_PIN_MPHI_DATA_9 99
205#define BCM281XX_PIN_MPHI_DATA_10 100
206#define BCM281XX_PIN_MPHI_DATA_11 101
207#define BCM281XX_PIN_MPHI_DATA_12 102
208#define BCM281XX_PIN_MPHI_DATA_13 103
209#define BCM281XX_PIN_MPHI_DATA_14 104
210#define BCM281XX_PIN_MPHI_DATA_15 105
211#define BCM281XX_PIN_MPHI_HA0 106
212#define BCM281XX_PIN_MPHI_HAT0 107
213#define BCM281XX_PIN_MPHI_HAT1 108
214#define BCM281XX_PIN_MPHI_HCE0_N 109
215#define BCM281XX_PIN_MPHI_HCE1_N 110
216#define BCM281XX_PIN_MPHI_HRD_N 111
217#define BCM281XX_PIN_MPHI_HWR_N 112
218#define BCM281XX_PIN_MPHI_RUN0 113
219#define BCM281XX_PIN_MPHI_RUN1 114
220#define BCM281XX_PIN_MTX_SCAN_CLK 115
221#define BCM281XX_PIN_MTX_SCAN_DATA 116
222#define BCM281XX_PIN_NAND_AD_0 117
223#define BCM281XX_PIN_NAND_AD_1 118
224#define BCM281XX_PIN_NAND_AD_2 119
225#define BCM281XX_PIN_NAND_AD_3 120
226#define BCM281XX_PIN_NAND_AD_4 121
227#define BCM281XX_PIN_NAND_AD_5 122
228#define BCM281XX_PIN_NAND_AD_6 123
229#define BCM281XX_PIN_NAND_AD_7 124
230#define BCM281XX_PIN_NAND_ALE 125
231#define BCM281XX_PIN_NAND_CEN_0 126
232#define BCM281XX_PIN_NAND_CEN_1 127
233#define BCM281XX_PIN_NAND_CLE 128
234#define BCM281XX_PIN_NAND_OEN 129
235#define BCM281XX_PIN_NAND_RDY_0 130
236#define BCM281XX_PIN_NAND_RDY_1 131
237#define BCM281XX_PIN_NAND_WEN 132
238#define BCM281XX_PIN_NAND_WP 133
239#define BCM281XX_PIN_PC1 134
240#define BCM281XX_PIN_PC2 135
241#define BCM281XX_PIN_PMU_INT 136
242#define BCM281XX_PIN_PMU_SCL 137
243#define BCM281XX_PIN_PMU_SDA 138
244#define BCM281XX_PIN_RFST2G_MTSLOTEN3G 139
245#define BCM281XX_PIN_RGMII_0_RX_CTL 140
246#define BCM281XX_PIN_RGMII_0_RXC 141
247#define BCM281XX_PIN_RGMII_0_RXD_0 142
248#define BCM281XX_PIN_RGMII_0_RXD_1 143
249#define BCM281XX_PIN_RGMII_0_RXD_2 144
250#define BCM281XX_PIN_RGMII_0_RXD_3 145
251#define BCM281XX_PIN_RGMII_0_TX_CTL 146
252#define BCM281XX_PIN_RGMII_0_TXC 147
253#define BCM281XX_PIN_RGMII_0_TXD_0 148
254#define BCM281XX_PIN_RGMII_0_TXD_1 149
255#define BCM281XX_PIN_RGMII_0_TXD_2 150
256#define BCM281XX_PIN_RGMII_0_TXD_3 151
257#define BCM281XX_PIN_RGMII_1_RX_CTL 152
258#define BCM281XX_PIN_RGMII_1_RXC 153
259#define BCM281XX_PIN_RGMII_1_RXD_0 154
260#define BCM281XX_PIN_RGMII_1_RXD_1 155
261#define BCM281XX_PIN_RGMII_1_RXD_2 156
262#define BCM281XX_PIN_RGMII_1_RXD_3 157
263#define BCM281XX_PIN_RGMII_1_TX_CTL 158
264#define BCM281XX_PIN_RGMII_1_TXC 159
265#define BCM281XX_PIN_RGMII_1_TXD_0 160
266#define BCM281XX_PIN_RGMII_1_TXD_1 161
267#define BCM281XX_PIN_RGMII_1_TXD_2 162
268#define BCM281XX_PIN_RGMII_1_TXD_3 163
269#define BCM281XX_PIN_RGMII_GPIO_0 164
270#define BCM281XX_PIN_RGMII_GPIO_1 165
271#define BCM281XX_PIN_RGMII_GPIO_2 166
272#define BCM281XX_PIN_RGMII_GPIO_3 167
273#define BCM281XX_PIN_RTXDATA2G_TXDATA3G1 168
274#define BCM281XX_PIN_RTXEN2G_TXDATA3G2 169
275#define BCM281XX_PIN_RXDATA3G0 170
276#define BCM281XX_PIN_RXDATA3G1 171
277#define BCM281XX_PIN_RXDATA3G2 172
278#define BCM281XX_PIN_SDIO1_CLK 173
279#define BCM281XX_PIN_SDIO1_CMD 174
280#define BCM281XX_PIN_SDIO1_DATA_0 175
281#define BCM281XX_PIN_SDIO1_DATA_1 176
282#define BCM281XX_PIN_SDIO1_DATA_2 177
283#define BCM281XX_PIN_SDIO1_DATA_3 178
284#define BCM281XX_PIN_SDIO4_CLK 179
285#define BCM281XX_PIN_SDIO4_CMD 180
286#define BCM281XX_PIN_SDIO4_DATA_0 181
287#define BCM281XX_PIN_SDIO4_DATA_1 182
288#define BCM281XX_PIN_SDIO4_DATA_2 183
289#define BCM281XX_PIN_SDIO4_DATA_3 184
290#define BCM281XX_PIN_SIM_CLK 185
291#define BCM281XX_PIN_SIM_DATA 186
292#define BCM281XX_PIN_SIM_DET 187
293#define BCM281XX_PIN_SIM_RESETN 188
294#define BCM281XX_PIN_SIM2_CLK 189
295#define BCM281XX_PIN_SIM2_DATA 190
296#define BCM281XX_PIN_SIM2_DET 191
297#define BCM281XX_PIN_SIM2_RESETN 192
298#define BCM281XX_PIN_SRI_C 193
299#define BCM281XX_PIN_SRI_D 194
300#define BCM281XX_PIN_SRI_E 195
301#define BCM281XX_PIN_SSP_EXTCLK 196
302#define BCM281XX_PIN_SSP0_CLK 197
303#define BCM281XX_PIN_SSP0_FS 198
304#define BCM281XX_PIN_SSP0_RXD 199
305#define BCM281XX_PIN_SSP0_TXD 200
306#define BCM281XX_PIN_SSP2_CLK 201
307#define BCM281XX_PIN_SSP2_FS_0 202
308#define BCM281XX_PIN_SSP2_FS_1 203
309#define BCM281XX_PIN_SSP2_FS_2 204
310#define BCM281XX_PIN_SSP2_FS_3 205
311#define BCM281XX_PIN_SSP2_RXD_0 206
312#define BCM281XX_PIN_SSP2_RXD_1 207
313#define BCM281XX_PIN_SSP2_TXD_0 208
314#define BCM281XX_PIN_SSP2_TXD_1 209
315#define BCM281XX_PIN_SSP3_CLK 210
316#define BCM281XX_PIN_SSP3_FS 211
317#define BCM281XX_PIN_SSP3_RXD 212
318#define BCM281XX_PIN_SSP3_TXD 213
319#define BCM281XX_PIN_SSP4_CLK 214
320#define BCM281XX_PIN_SSP4_FS 215
321#define BCM281XX_PIN_SSP4_RXD 216
322#define BCM281XX_PIN_SSP4_TXD 217
323#define BCM281XX_PIN_SSP5_CLK 218
324#define BCM281XX_PIN_SSP5_FS 219
325#define BCM281XX_PIN_SSP5_RXD 220
326#define BCM281XX_PIN_SSP5_TXD 221
327#define BCM281XX_PIN_SSP6_CLK 222
328#define BCM281XX_PIN_SSP6_FS 223
329#define BCM281XX_PIN_SSP6_RXD 224
330#define BCM281XX_PIN_SSP6_TXD 225
331#define BCM281XX_PIN_STAT_1 226
332#define BCM281XX_PIN_STAT_2 227
333#define BCM281XX_PIN_SYSCLKEN 228
334#define BCM281XX_PIN_TRACECLK 229
335#define BCM281XX_PIN_TRACEDT00 230
336#define BCM281XX_PIN_TRACEDT01 231
337#define BCM281XX_PIN_TRACEDT02 232
338#define BCM281XX_PIN_TRACEDT03 233
339#define BCM281XX_PIN_TRACEDT04 234
340#define BCM281XX_PIN_TRACEDT05 235
341#define BCM281XX_PIN_TRACEDT06 236
342#define BCM281XX_PIN_TRACEDT07 237
343#define BCM281XX_PIN_TRACEDT08 238
344#define BCM281XX_PIN_TRACEDT09 239
345#define BCM281XX_PIN_TRACEDT10 240
346#define BCM281XX_PIN_TRACEDT11 241
347#define BCM281XX_PIN_TRACEDT12 242
348#define BCM281XX_PIN_TRACEDT13 243
349#define BCM281XX_PIN_TRACEDT14 244
350#define BCM281XX_PIN_TRACEDT15 245
351#define BCM281XX_PIN_TXDATA3G0 246
352#define BCM281XX_PIN_TXPWRIND 247
353#define BCM281XX_PIN_UARTB1_UCTS 248
354#define BCM281XX_PIN_UARTB1_URTS 249
355#define BCM281XX_PIN_UARTB1_URXD 250
356#define BCM281XX_PIN_UARTB1_UTXD 251
357#define BCM281XX_PIN_UARTB2_URXD 252
358#define BCM281XX_PIN_UARTB2_UTXD 253
359#define BCM281XX_PIN_UARTB3_UCTS 254
360#define BCM281XX_PIN_UARTB3_URTS 255
361#define BCM281XX_PIN_UARTB3_URXD 256
362#define BCM281XX_PIN_UARTB3_UTXD 257
363#define BCM281XX_PIN_UARTB4_UCTS 258
364#define BCM281XX_PIN_UARTB4_URTS 259
365#define BCM281XX_PIN_UARTB4_URXD 260
366#define BCM281XX_PIN_UARTB4_UTXD 261
367#define BCM281XX_PIN_VC_CAM1_SCL 262
368#define BCM281XX_PIN_VC_CAM1_SDA 263
369#define BCM281XX_PIN_VC_CAM2_SCL 264
370#define BCM281XX_PIN_VC_CAM2_SDA 265
371#define BCM281XX_PIN_VC_CAM3_SCL 266
372#define BCM281XX_PIN_VC_CAM3_SDA 267
373
374#define BCM281XX_PIN_DESC(a, b, c) \
375 { .number = a, .name = b, .drv_data = &c##_pin }
376
377/*
378 * Pin description definition. The order here must be the same as defined in
379 * the PADCTRLREG block in the RDB, since the pin number is used as an index
380 * into this array.
381 */
382static const struct pinctrl_pin_desc bcm281xx_pinctrl_pins[] = {
383 BCM281XX_PIN_DESC(BCM281XX_PIN_ADCSYNC, "adcsync", std),
384 BCM281XX_PIN_DESC(BCM281XX_PIN_BAT_RM, "bat_rm", std),
385 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC1_SCL, "bsc1_scl", i2c),
386 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC1_SDA, "bsc1_sda", i2c),
387 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC2_SCL, "bsc2_scl", i2c),
388 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC2_SDA, "bsc2_sda", i2c),
389 BCM281XX_PIN_DESC(BCM281XX_PIN_CLASSGPWR, "classgpwr", std),
390 BCM281XX_PIN_DESC(BCM281XX_PIN_CLK_CX8, "clk_cx8", std),
391 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_0, "clkout_0", std),
392 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_1, "clkout_1", std),
393 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_2, "clkout_2", std),
394 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_3, "clkout_3", std),
395 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKREQ_IN_0, "clkreq_in_0", std),
396 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKREQ_IN_1, "clkreq_in_1", std),
397 BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ1, "cws_sys_req1", std),
398 BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ2, "cws_sys_req2", std),
399 BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ3, "cws_sys_req3", std),
400 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC1_CLK, "digmic1_clk", std),
401 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC1_DQ, "digmic1_dq", std),
402 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC2_CLK, "digmic2_clk", std),
403 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC2_DQ, "digmic2_dq", std),
404 BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN13, "gpen13", std),
405 BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN14, "gpen14", std),
406 BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN15, "gpen15", std),
407 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO00, "gpio00", std),
408 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO01, "gpio01", std),
409 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO02, "gpio02", std),
410 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO03, "gpio03", std),
411 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO04, "gpio04", std),
412 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO05, "gpio05", std),
413 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO06, "gpio06", std),
414 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO07, "gpio07", std),
415 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO08, "gpio08", std),
416 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO09, "gpio09", std),
417 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO10, "gpio10", std),
418 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO11, "gpio11", std),
419 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO12, "gpio12", std),
420 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO13, "gpio13", std),
421 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO14, "gpio14", std),
422 BCM281XX_PIN_DESC(BCM281XX_PIN_GPS_PABLANK, "gps_pablank", std),
423 BCM281XX_PIN_DESC(BCM281XX_PIN_GPS_TMARK, "gps_tmark", std),
424 BCM281XX_PIN_DESC(BCM281XX_PIN_HDMI_SCL, "hdmi_scl", hdmi),
425 BCM281XX_PIN_DESC(BCM281XX_PIN_HDMI_SDA, "hdmi_sda", hdmi),
426 BCM281XX_PIN_DESC(BCM281XX_PIN_IC_DM, "ic_dm", std),
427 BCM281XX_PIN_DESC(BCM281XX_PIN_IC_DP, "ic_dp", std),
428 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_0, "kp_col_ip_0", std),
429 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_1, "kp_col_ip_1", std),
430 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_2, "kp_col_ip_2", std),
431 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_3, "kp_col_ip_3", std),
432 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_0, "kp_row_op_0", std),
433 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_1, "kp_row_op_1", std),
434 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_2, "kp_row_op_2", std),
435 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_3, "kp_row_op_3", std),
436 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_0, "lcd_b_0", std),
437 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_1, "lcd_b_1", std),
438 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_2, "lcd_b_2", std),
439 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_3, "lcd_b_3", std),
440 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_4, "lcd_b_4", std),
441 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_5, "lcd_b_5", std),
442 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_6, "lcd_b_6", std),
443 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_7, "lcd_b_7", std),
444 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_0, "lcd_g_0", std),
445 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_1, "lcd_g_1", std),
446 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_2, "lcd_g_2", std),
447 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_3, "lcd_g_3", std),
448 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_4, "lcd_g_4", std),
449 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_5, "lcd_g_5", std),
450 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_6, "lcd_g_6", std),
451 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_7, "lcd_g_7", std),
452 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_HSYNC, "lcd_hsync", std),
453 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_OE, "lcd_oe", std),
454 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_PCLK, "lcd_pclk", std),
455 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_0, "lcd_r_0", std),
456 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_1, "lcd_r_1", std),
457 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_2, "lcd_r_2", std),
458 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_3, "lcd_r_3", std),
459 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_4, "lcd_r_4", std),
460 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_5, "lcd_r_5", std),
461 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_6, "lcd_r_6", std),
462 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_7, "lcd_r_7", std),
463 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_VSYNC, "lcd_vsync", std),
464 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO0, "mdmgpio0", std),
465 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO1, "mdmgpio1", std),
466 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO2, "mdmgpio2", std),
467 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO3, "mdmgpio3", std),
468 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO4, "mdmgpio4", std),
469 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO5, "mdmgpio5", std),
470 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO6, "mdmgpio6", std),
471 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO7, "mdmgpio7", std),
472 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO8, "mdmgpio8", std),
473 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_0, "mphi_data_0", std),
474 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_1, "mphi_data_1", std),
475 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_2, "mphi_data_2", std),
476 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_3, "mphi_data_3", std),
477 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_4, "mphi_data_4", std),
478 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_5, "mphi_data_5", std),
479 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_6, "mphi_data_6", std),
480 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_7, "mphi_data_7", std),
481 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_8, "mphi_data_8", std),
482 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_9, "mphi_data_9", std),
483 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_10, "mphi_data_10", std),
484 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_11, "mphi_data_11", std),
485 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_12, "mphi_data_12", std),
486 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_13, "mphi_data_13", std),
487 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_14, "mphi_data_14", std),
488 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_15, "mphi_data_15", std),
489 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HA0, "mphi_ha0", std),
490 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HAT0, "mphi_hat0", std),
491 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HAT1, "mphi_hat1", std),
492 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HCE0_N, "mphi_hce0_n", std),
493 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HCE1_N, "mphi_hce1_n", std),
494 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HRD_N, "mphi_hrd_n", std),
495 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HWR_N, "mphi_hwr_n", std),
496 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_RUN0, "mphi_run0", std),
497 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_RUN1, "mphi_run1", std),
498 BCM281XX_PIN_DESC(BCM281XX_PIN_MTX_SCAN_CLK, "mtx_scan_clk", std),
499 BCM281XX_PIN_DESC(BCM281XX_PIN_MTX_SCAN_DATA, "mtx_scan_data", std),
500 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_0, "nand_ad_0", std),
501 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_1, "nand_ad_1", std),
502 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_2, "nand_ad_2", std),
503 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_3, "nand_ad_3", std),
504 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_4, "nand_ad_4", std),
505 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_5, "nand_ad_5", std),
506 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_6, "nand_ad_6", std),
507 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_7, "nand_ad_7", std),
508 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_ALE, "nand_ale", std),
509 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CEN_0, "nand_cen_0", std),
510 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CEN_1, "nand_cen_1", std),
511 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CLE, "nand_cle", std),
512 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_OEN, "nand_oen", std),
513 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_RDY_0, "nand_rdy_0", std),
514 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_RDY_1, "nand_rdy_1", std),
515 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_WEN, "nand_wen", std),
516 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_WP, "nand_wp", std),
517 BCM281XX_PIN_DESC(BCM281XX_PIN_PC1, "pc1", std),
518 BCM281XX_PIN_DESC(BCM281XX_PIN_PC2, "pc2", std),
519 BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_INT, "pmu_int", std),
520 BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_SCL, "pmu_scl", i2c),
521 BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_SDA, "pmu_sda", i2c),
522 BCM281XX_PIN_DESC(BCM281XX_PIN_RFST2G_MTSLOTEN3G, "rfst2g_mtsloten3g",
523 std),
524 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RX_CTL, "rgmii_0_rx_ctl", std),
525 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXC, "rgmii_0_rxc", std),
526 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_0, "rgmii_0_rxd_0", std),
527 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_1, "rgmii_0_rxd_1", std),
528 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_2, "rgmii_0_rxd_2", std),
529 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_3, "rgmii_0_rxd_3", std),
530 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TX_CTL, "rgmii_0_tx_ctl", std),
531 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXC, "rgmii_0_txc", std),
532 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_0, "rgmii_0_txd_0", std),
533 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_1, "rgmii_0_txd_1", std),
534 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_2, "rgmii_0_txd_2", std),
535 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_3, "rgmii_0_txd_3", std),
536 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RX_CTL, "rgmii_1_rx_ctl", std),
537 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXC, "rgmii_1_rxc", std),
538 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_0, "rgmii_1_rxd_0", std),
539 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_1, "rgmii_1_rxd_1", std),
540 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_2, "rgmii_1_rxd_2", std),
541 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_3, "rgmii_1_rxd_3", std),
542 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TX_CTL, "rgmii_1_tx_ctl", std),
543 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXC, "rgmii_1_txc", std),
544 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_0, "rgmii_1_txd_0", std),
545 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_1, "rgmii_1_txd_1", std),
546 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_2, "rgmii_1_txd_2", std),
547 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_3, "rgmii_1_txd_3", std),
548 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_0, "rgmii_gpio_0", std),
549 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_1, "rgmii_gpio_1", std),
550 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_2, "rgmii_gpio_2", std),
551 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_3, "rgmii_gpio_3", std),
552 BCM281XX_PIN_DESC(BCM281XX_PIN_RTXDATA2G_TXDATA3G1,
553 "rtxdata2g_txdata3g1", std),
554 BCM281XX_PIN_DESC(BCM281XX_PIN_RTXEN2G_TXDATA3G2, "rtxen2g_txdata3g2",
555 std),
556 BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G0, "rxdata3g0", std),
557 BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G1, "rxdata3g1", std),
558 BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G2, "rxdata3g2", std),
559 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_CLK, "sdio1_clk", std),
560 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_CMD, "sdio1_cmd", std),
561 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_0, "sdio1_data_0", std),
562 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_1, "sdio1_data_1", std),
563 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_2, "sdio1_data_2", std),
564 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_3, "sdio1_data_3", std),
565 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_CLK, "sdio4_clk", std),
566 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_CMD, "sdio4_cmd", std),
567 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_0, "sdio4_data_0", std),
568 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_1, "sdio4_data_1", std),
569 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_2, "sdio4_data_2", std),
570 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_3, "sdio4_data_3", std),
571 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_CLK, "sim_clk", std),
572 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_DATA, "sim_data", std),
573 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_DET, "sim_det", std),
574 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_RESETN, "sim_resetn", std),
575 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_CLK, "sim2_clk", std),
576 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_DATA, "sim2_data", std),
577 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_DET, "sim2_det", std),
578 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_RESETN, "sim2_resetn", std),
579 BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_C, "sri_c", std),
580 BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_D, "sri_d", std),
581 BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_E, "sri_e", std),
582 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP_EXTCLK, "ssp_extclk", std),
583 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_CLK, "ssp0_clk", std),
584 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_FS, "ssp0_fs", std),
585 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_RXD, "ssp0_rxd", std),
586 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_TXD, "ssp0_txd", std),
587 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_CLK, "ssp2_clk", std),
588 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_0, "ssp2_fs_0", std),
589 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_1, "ssp2_fs_1", std),
590 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_2, "ssp2_fs_2", std),
591 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_3, "ssp2_fs_3", std),
592 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_RXD_0, "ssp2_rxd_0", std),
593 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_RXD_1, "ssp2_rxd_1", std),
594 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_TXD_0, "ssp2_txd_0", std),
595 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_TXD_1, "ssp2_txd_1", std),
596 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_CLK, "ssp3_clk", std),
597 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_FS, "ssp3_fs", std),
598 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_RXD, "ssp3_rxd", std),
599 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_TXD, "ssp3_txd", std),
600 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_CLK, "ssp4_clk", std),
601 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_FS, "ssp4_fs", std),
602 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_RXD, "ssp4_rxd", std),
603 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_TXD, "ssp4_txd", std),
604 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_CLK, "ssp5_clk", std),
605 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_FS, "ssp5_fs", std),
606 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_RXD, "ssp5_rxd", std),
607 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_TXD, "ssp5_txd", std),
608 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_CLK, "ssp6_clk", std),
609 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_FS, "ssp6_fs", std),
610 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_RXD, "ssp6_rxd", std),
611 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_TXD, "ssp6_txd", std),
612 BCM281XX_PIN_DESC(BCM281XX_PIN_STAT_1, "stat_1", std),
613 BCM281XX_PIN_DESC(BCM281XX_PIN_STAT_2, "stat_2", std),
614 BCM281XX_PIN_DESC(BCM281XX_PIN_SYSCLKEN, "sysclken", std),
615 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACECLK, "traceclk", std),
616 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT00, "tracedt00", std),
617 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT01, "tracedt01", std),
618 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT02, "tracedt02", std),
619 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT03, "tracedt03", std),
620 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT04, "tracedt04", std),
621 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT05, "tracedt05", std),
622 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT06, "tracedt06", std),
623 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT07, "tracedt07", std),
624 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT08, "tracedt08", std),
625 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT09, "tracedt09", std),
626 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT10, "tracedt10", std),
627 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT11, "tracedt11", std),
628 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT12, "tracedt12", std),
629 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT13, "tracedt13", std),
630 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT14, "tracedt14", std),
631 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT15, "tracedt15", std),
632 BCM281XX_PIN_DESC(BCM281XX_PIN_TXDATA3G0, "txdata3g0", std),
633 BCM281XX_PIN_DESC(BCM281XX_PIN_TXPWRIND, "txpwrind", std),
634 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_UCTS, "uartb1_ucts", std),
635 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_URTS, "uartb1_urts", std),
636 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_URXD, "uartb1_urxd", std),
637 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_UTXD, "uartb1_utxd", std),
638 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB2_URXD, "uartb2_urxd", std),
639 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB2_UTXD, "uartb2_utxd", std),
640 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_UCTS, "uartb3_ucts", std),
641 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_URTS, "uartb3_urts", std),
642 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_URXD, "uartb3_urxd", std),
643 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_UTXD, "uartb3_utxd", std),
644 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_UCTS, "uartb4_ucts", std),
645 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_URTS, "uartb4_urts", std),
646 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_URXD, "uartb4_urxd", std),
647 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_UTXD, "uartb4_utxd", std),
648 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM1_SCL, "vc_cam1_scl", i2c),
649 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM1_SDA, "vc_cam1_sda", i2c),
650 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM2_SCL, "vc_cam2_scl", i2c),
651 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM2_SDA, "vc_cam2_sda", i2c),
652 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM3_SCL, "vc_cam3_scl", i2c),
653 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM3_SDA, "vc_cam3_sda", i2c),
654};
655
656static const char * const bcm281xx_alt_groups[] = {
657 "adcsync",
658 "bat_rm",
659 "bsc1_scl",
660 "bsc1_sda",
661 "bsc2_scl",
662 "bsc2_sda",
663 "classgpwr",
664 "clk_cx8",
665 "clkout_0",
666 "clkout_1",
667 "clkout_2",
668 "clkout_3",
669 "clkreq_in_0",
670 "clkreq_in_1",
671 "cws_sys_req1",
672 "cws_sys_req2",
673 "cws_sys_req3",
674 "digmic1_clk",
675 "digmic1_dq",
676 "digmic2_clk",
677 "digmic2_dq",
678 "gpen13",
679 "gpen14",
680 "gpen15",
681 "gpio00",
682 "gpio01",
683 "gpio02",
684 "gpio03",
685 "gpio04",
686 "gpio05",
687 "gpio06",
688 "gpio07",
689 "gpio08",
690 "gpio09",
691 "gpio10",
692 "gpio11",
693 "gpio12",
694 "gpio13",
695 "gpio14",
696 "gps_pablank",
697 "gps_tmark",
698 "hdmi_scl",
699 "hdmi_sda",
700 "ic_dm",
701 "ic_dp",
702 "kp_col_ip_0",
703 "kp_col_ip_1",
704 "kp_col_ip_2",
705 "kp_col_ip_3",
706 "kp_row_op_0",
707 "kp_row_op_1",
708 "kp_row_op_2",
709 "kp_row_op_3",
710 "lcd_b_0",
711 "lcd_b_1",
712 "lcd_b_2",
713 "lcd_b_3",
714 "lcd_b_4",
715 "lcd_b_5",
716 "lcd_b_6",
717 "lcd_b_7",
718 "lcd_g_0",
719 "lcd_g_1",
720 "lcd_g_2",
721 "lcd_g_3",
722 "lcd_g_4",
723 "lcd_g_5",
724 "lcd_g_6",
725 "lcd_g_7",
726 "lcd_hsync",
727 "lcd_oe",
728 "lcd_pclk",
729 "lcd_r_0",
730 "lcd_r_1",
731 "lcd_r_2",
732 "lcd_r_3",
733 "lcd_r_4",
734 "lcd_r_5",
735 "lcd_r_6",
736 "lcd_r_7",
737 "lcd_vsync",
738 "mdmgpio0",
739 "mdmgpio1",
740 "mdmgpio2",
741 "mdmgpio3",
742 "mdmgpio4",
743 "mdmgpio5",
744 "mdmgpio6",
745 "mdmgpio7",
746 "mdmgpio8",
747 "mphi_data_0",
748 "mphi_data_1",
749 "mphi_data_2",
750 "mphi_data_3",
751 "mphi_data_4",
752 "mphi_data_5",
753 "mphi_data_6",
754 "mphi_data_7",
755 "mphi_data_8",
756 "mphi_data_9",
757 "mphi_data_10",
758 "mphi_data_11",
759 "mphi_data_12",
760 "mphi_data_13",
761 "mphi_data_14",
762 "mphi_data_15",
763 "mphi_ha0",
764 "mphi_hat0",
765 "mphi_hat1",
766 "mphi_hce0_n",
767 "mphi_hce1_n",
768 "mphi_hrd_n",
769 "mphi_hwr_n",
770 "mphi_run0",
771 "mphi_run1",
772 "mtx_scan_clk",
773 "mtx_scan_data",
774 "nand_ad_0",
775 "nand_ad_1",
776 "nand_ad_2",
777 "nand_ad_3",
778 "nand_ad_4",
779 "nand_ad_5",
780 "nand_ad_6",
781 "nand_ad_7",
782 "nand_ale",
783 "nand_cen_0",
784 "nand_cen_1",
785 "nand_cle",
786 "nand_oen",
787 "nand_rdy_0",
788 "nand_rdy_1",
789 "nand_wen",
790 "nand_wp",
791 "pc1",
792 "pc2",
793 "pmu_int",
794 "pmu_scl",
795 "pmu_sda",
796 "rfst2g_mtsloten3g",
797 "rgmii_0_rx_ctl",
798 "rgmii_0_rxc",
799 "rgmii_0_rxd_0",
800 "rgmii_0_rxd_1",
801 "rgmii_0_rxd_2",
802 "rgmii_0_rxd_3",
803 "rgmii_0_tx_ctl",
804 "rgmii_0_txc",
805 "rgmii_0_txd_0",
806 "rgmii_0_txd_1",
807 "rgmii_0_txd_2",
808 "rgmii_0_txd_3",
809 "rgmii_1_rx_ctl",
810 "rgmii_1_rxc",
811 "rgmii_1_rxd_0",
812 "rgmii_1_rxd_1",
813 "rgmii_1_rxd_2",
814 "rgmii_1_rxd_3",
815 "rgmii_1_tx_ctl",
816 "rgmii_1_txc",
817 "rgmii_1_txd_0",
818 "rgmii_1_txd_1",
819 "rgmii_1_txd_2",
820 "rgmii_1_txd_3",
821 "rgmii_gpio_0",
822 "rgmii_gpio_1",
823 "rgmii_gpio_2",
824 "rgmii_gpio_3",
825 "rtxdata2g_txdata3g1",
826 "rtxen2g_txdata3g2",
827 "rxdata3g0",
828 "rxdata3g1",
829 "rxdata3g2",
830 "sdio1_clk",
831 "sdio1_cmd",
832 "sdio1_data_0",
833 "sdio1_data_1",
834 "sdio1_data_2",
835 "sdio1_data_3",
836 "sdio4_clk",
837 "sdio4_cmd",
838 "sdio4_data_0",
839 "sdio4_data_1",
840 "sdio4_data_2",
841 "sdio4_data_3",
842 "sim_clk",
843 "sim_data",
844 "sim_det",
845 "sim_resetn",
846 "sim2_clk",
847 "sim2_data",
848 "sim2_det",
849 "sim2_resetn",
850 "sri_c",
851 "sri_d",
852 "sri_e",
853 "ssp_extclk",
854 "ssp0_clk",
855 "ssp0_fs",
856 "ssp0_rxd",
857 "ssp0_txd",
858 "ssp2_clk",
859 "ssp2_fs_0",
860 "ssp2_fs_1",
861 "ssp2_fs_2",
862 "ssp2_fs_3",
863 "ssp2_rxd_0",
864 "ssp2_rxd_1",
865 "ssp2_txd_0",
866 "ssp2_txd_1",
867 "ssp3_clk",
868 "ssp3_fs",
869 "ssp3_rxd",
870 "ssp3_txd",
871 "ssp4_clk",
872 "ssp4_fs",
873 "ssp4_rxd",
874 "ssp4_txd",
875 "ssp5_clk",
876 "ssp5_fs",
877 "ssp5_rxd",
878 "ssp5_txd",
879 "ssp6_clk",
880 "ssp6_fs",
881 "ssp6_rxd",
882 "ssp6_txd",
883 "stat_1",
884 "stat_2",
885 "sysclken",
886 "traceclk",
887 "tracedt00",
888 "tracedt01",
889 "tracedt02",
890 "tracedt03",
891 "tracedt04",
892 "tracedt05",
893 "tracedt06",
894 "tracedt07",
895 "tracedt08",
896 "tracedt09",
897 "tracedt10",
898 "tracedt11",
899 "tracedt12",
900 "tracedt13",
901 "tracedt14",
902 "tracedt15",
903 "txdata3g0",
904 "txpwrind",
905 "uartb1_ucts",
906 "uartb1_urts",
907 "uartb1_urxd",
908 "uartb1_utxd",
909 "uartb2_urxd",
910 "uartb2_utxd",
911 "uartb3_ucts",
912 "uartb3_urts",
913 "uartb3_urxd",
914 "uartb3_utxd",
915 "uartb4_ucts",
916 "uartb4_urts",
917 "uartb4_urxd",
918 "uartb4_utxd",
919 "vc_cam1_scl",
920 "vc_cam1_sda",
921 "vc_cam2_scl",
922 "vc_cam2_sda",
923 "vc_cam3_scl",
924 "vc_cam3_sda",
925};
926
927/* Every pin can implement all ALT1-ALT4 functions */
928#define BCM281XX_PIN_FUNCTION(fcn_name) \
929{ \
930 .name = #fcn_name, \
931 .groups = bcm281xx_alt_groups, \
932 .ngroups = ARRAY_SIZE(bcm281xx_alt_groups), \
933}
934
935static const struct bcm281xx_pin_function bcm281xx_functions[] = {
936 BCM281XX_PIN_FUNCTION(alt1),
937 BCM281XX_PIN_FUNCTION(alt2),
938 BCM281XX_PIN_FUNCTION(alt3),
939 BCM281XX_PIN_FUNCTION(alt4),
940};
941
942static struct bcm281xx_pinctrl_data bcm281xx_pinctrl = {
943 .pins = bcm281xx_pinctrl_pins,
944 .npins = ARRAY_SIZE(bcm281xx_pinctrl_pins),
945 .functions = bcm281xx_functions,
946 .nfunctions = ARRAY_SIZE(bcm281xx_functions),
947};
948
949static inline enum bcm281xx_pin_type pin_type_get(struct pinctrl_dev *pctldev,
950 unsigned pin)
951{
952 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
953
954 if (pin >= pdata->npins)
955 return BCM281XX_PIN_TYPE_UNKNOWN;
956
957 return *(enum bcm281xx_pin_type *)(pdata->pins[pin].drv_data);
958}
959
960#define BCM281XX_PIN_SHIFT(type, param) \
961 (BCM281XX_ ## type ## _PIN_REG_ ## param ## _SHIFT)
962
963#define BCM281XX_PIN_MASK(type, param) \
964 (BCM281XX_ ## type ## _PIN_REG_ ## param ## _MASK)
965
966/*
967 * This helper function is used to build up the value and mask used to write to
968 * a pin register, but does not actually write to the register.
969 */
970static inline void bcm281xx_pin_update(u32 *reg_val, u32 *reg_mask,
971 u32 param_val, u32 param_shift,
972 u32 param_mask)
973{
974 *reg_val &= ~param_mask;
975 *reg_val |= (param_val << param_shift) & param_mask;
976 *reg_mask |= param_mask;
977}
978
979static struct regmap_config bcm281xx_pinctrl_regmap_config = {
980 .reg_bits = 32,
981 .reg_stride = 4,
982 .val_bits = 32,
983 .max_register = BCM281XX_PIN_VC_CAM3_SDA,
984};
985
986static int bcm281xx_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
987{
988 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
989
990 return pdata->npins;
991}
992
993static const char *bcm281xx_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
994 unsigned group)
995{
996 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
997
998 return pdata->pins[group].name;
999}
1000
1001static int bcm281xx_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
1002 unsigned group,
1003 const unsigned **pins,
1004 unsigned *num_pins)
1005{
1006 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1007
1008 *pins = &pdata->pins[group].number;
1009 *num_pins = 1;
1010
1011 return 0;
1012}
1013
1014static void bcm281xx_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
1015 struct seq_file *s,
1016 unsigned offset)
1017{
1018 seq_printf(s, " %s", dev_name(pctldev->dev));
1019}
1020
1021static struct pinctrl_ops bcm281xx_pinctrl_ops = {
1022 .get_groups_count = bcm281xx_pinctrl_get_groups_count,
1023 .get_group_name = bcm281xx_pinctrl_get_group_name,
1024 .get_group_pins = bcm281xx_pinctrl_get_group_pins,
1025 .pin_dbg_show = bcm281xx_pinctrl_pin_dbg_show,
1026 .dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
1027 .dt_free_map = pinctrl_utils_dt_free_map,
1028};
1029
1030static int bcm281xx_pinctrl_get_fcns_count(struct pinctrl_dev *pctldev)
1031{
1032 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1033
1034 return pdata->nfunctions;
1035}
1036
1037static const char *bcm281xx_pinctrl_get_fcn_name(struct pinctrl_dev *pctldev,
1038 unsigned function)
1039{
1040 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1041
1042 return pdata->functions[function].name;
1043}
1044
1045static int bcm281xx_pinctrl_get_fcn_groups(struct pinctrl_dev *pctldev,
1046 unsigned function,
1047 const char * const **groups,
1048 unsigned * const num_groups)
1049{
1050 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1051
1052 *groups = pdata->functions[function].groups;
1053 *num_groups = pdata->functions[function].ngroups;
1054
1055 return 0;
1056}
1057
1058static int bcm281xx_pinmux_enable(struct pinctrl_dev *pctldev,
1059 unsigned function,
1060 unsigned group)
1061{
1062 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1063 const struct bcm281xx_pin_function *f = &pdata->functions[function];
1064 u32 offset = 4 * pdata->pins[group].number;
1065 int rc = 0;
1066
1067 dev_dbg(pctldev->dev,
1068 "%s(): Enable function %s (%d) of pin %s (%d) @offset 0x%x.\n",
1069 __func__, f->name, function, pdata->pins[group].name,
1070 pdata->pins[group].number, offset);
1071
1072 rc = regmap_update_bits(pdata->regmap, offset,
1073 BCM281XX_PIN_REG_F_SEL_MASK,
1074 function << BCM281XX_PIN_REG_F_SEL_SHIFT);
1075 if (rc)
1076 dev_err(pctldev->dev,
1077 "Error updating register for pin %s (%d).\n",
1078 pdata->pins[group].name, pdata->pins[group].number);
1079
1080 return rc;
1081}
1082
1083static struct pinmux_ops bcm281xx_pinctrl_pinmux_ops = {
1084 .get_functions_count = bcm281xx_pinctrl_get_fcns_count,
1085 .get_function_name = bcm281xx_pinctrl_get_fcn_name,
1086 .get_function_groups = bcm281xx_pinctrl_get_fcn_groups,
1087 .enable = bcm281xx_pinmux_enable,
1088};
1089
1090static int bcm281xx_pinctrl_pin_config_get(struct pinctrl_dev *pctldev,
1091 unsigned pin,
1092 unsigned long *config)
1093{
1094 return -ENOTSUPP;
1095}
1096
1097
1098/* Goes through the configs and update register val/mask */
1099static int bcm281xx_std_pin_update(struct pinctrl_dev *pctldev,
1100 unsigned pin,
1101 unsigned long *configs,
1102 unsigned num_configs,
1103 u32 *val,
1104 u32 *mask)
1105{
1106 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1107 int i;
1108 enum pin_config_param param;
1109 u16 arg;
1110
1111 for (i = 0; i < num_configs; i++) {
1112 param = pinconf_to_config_param(configs[i]);
1113 arg = pinconf_to_config_argument(configs[i]);
1114
1115 switch (param) {
1116 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
1117 arg = (arg >= 1 ? 1 : 0);
1118 bcm281xx_pin_update(val, mask, arg,
1119 BCM281XX_PIN_SHIFT(STD, HYST),
1120 BCM281XX_PIN_MASK(STD, HYST));
1121 break;
1122 /*
1123 * The pin bias can only be one of pull-up, pull-down, or
1124 * disable. The user does not need to specify a value for the
1125 * property, and the default value from pinconf-generic is
1126 * ignored.
1127 */
1128 case PIN_CONFIG_BIAS_DISABLE:
1129 bcm281xx_pin_update(val, mask, 0,
1130 BCM281XX_PIN_SHIFT(STD, PULL_UP),
1131 BCM281XX_PIN_MASK(STD, PULL_UP));
1132 bcm281xx_pin_update(val, mask, 0,
1133 BCM281XX_PIN_SHIFT(STD, PULL_DN),
1134 BCM281XX_PIN_MASK(STD, PULL_DN));
1135 break;
1136
1137 case PIN_CONFIG_BIAS_PULL_UP:
1138 bcm281xx_pin_update(val, mask, 1,
1139 BCM281XX_PIN_SHIFT(STD, PULL_UP),
1140 BCM281XX_PIN_MASK(STD, PULL_UP));
1141 bcm281xx_pin_update(val, mask, 0,
1142 BCM281XX_PIN_SHIFT(STD, PULL_DN),
1143 BCM281XX_PIN_MASK(STD, PULL_DN));
1144 break;
1145
1146 case PIN_CONFIG_BIAS_PULL_DOWN:
1147 bcm281xx_pin_update(val, mask, 0,
1148 BCM281XX_PIN_SHIFT(STD, PULL_UP),
1149 BCM281XX_PIN_MASK(STD, PULL_UP));
1150 bcm281xx_pin_update(val, mask, 1,
1151 BCM281XX_PIN_SHIFT(STD, PULL_DN),
1152 BCM281XX_PIN_MASK(STD, PULL_DN));
1153 break;
1154
1155 case PIN_CONFIG_SLEW_RATE:
1156 arg = (arg >= 1 ? 1 : 0);
1157 bcm281xx_pin_update(val, mask, arg,
1158 BCM281XX_PIN_SHIFT(STD, SLEW),
1159 BCM281XX_PIN_MASK(STD, SLEW));
1160 break;
1161
1162 case PIN_CONFIG_INPUT_ENABLE:
1163 /* inversed since register is for input _disable_ */
1164 arg = (arg >= 1 ? 0 : 1);
1165 bcm281xx_pin_update(val, mask, arg,
1166 BCM281XX_PIN_SHIFT(STD, INPUT_DIS),
1167 BCM281XX_PIN_MASK(STD, INPUT_DIS));
1168 break;
1169
1170 case PIN_CONFIG_DRIVE_STRENGTH:
1171 /* Valid range is 2-16 mA, even numbers only */
1172 if ((arg < 2) || (arg > 16) || (arg % 2)) {
1173 dev_err(pctldev->dev,
1174 "Invalid Drive Strength value (%d) for "
1175 "pin %s (%d). Valid values are "
1176 "(2..16) mA, even numbers only.\n",
1177 arg, pdata->pins[pin].name, pin);
1178 return -EINVAL;
1179 }
1180 bcm281xx_pin_update(val, mask, (arg/2)-1,
1181 BCM281XX_PIN_SHIFT(STD, DRV_STR),
1182 BCM281XX_PIN_MASK(STD, DRV_STR));
1183 break;
1184
1185 default:
1186 dev_err(pctldev->dev,
1187 "Unrecognized pin config %d for pin %s (%d).\n",
1188 param, pdata->pins[pin].name, pin);
1189 return -EINVAL;
1190
1191 } /* switch config */
1192 } /* for each config */
1193
1194 return 0;
1195}
1196
1197/*
1198 * The pull-up strength for an I2C pin is represented by bits 4-6 in the
1199 * register with the following mapping:
1200 * 0b000: No pull-up
1201 * 0b001: 1200 Ohm
1202 * 0b010: 1800 Ohm
1203 * 0b011: 720 Ohm
1204 * 0b100: 2700 Ohm
1205 * 0b101: 831 Ohm
1206 * 0b110: 1080 Ohm
1207 * 0b111: 568 Ohm
1208 * This array maps pull-up strength in Ohms to register values (1+index).
1209 */
1210static const u16 bcm281xx_pullup_map[] = {
1211 1200, 1800, 720, 2700, 831, 1080, 568
1212};
1213
1214/* Goes through the configs and update register val/mask */
1215static int bcm281xx_i2c_pin_update(struct pinctrl_dev *pctldev,
1216 unsigned pin,
1217 unsigned long *configs,
1218 unsigned num_configs,
1219 u32 *val,
1220 u32 *mask)
1221{
1222 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1223 int i, j;
1224 enum pin_config_param param;
1225 u16 arg;
1226
1227 for (i = 0; i < num_configs; i++) {
1228 param = pinconf_to_config_param(configs[i]);
1229 arg = pinconf_to_config_argument(configs[i]);
1230
1231 switch (param) {
1232 case PIN_CONFIG_BIAS_PULL_UP:
1233 for (j = 0; j < ARRAY_SIZE(bcm281xx_pullup_map); j++)
1234 if (bcm281xx_pullup_map[j] == arg)
1235 break;
1236
1237 if (j == ARRAY_SIZE(bcm281xx_pullup_map)) {
1238 dev_err(pctldev->dev,
1239 "Invalid pull-up value (%d) for pin %s "
1240 "(%d). Valid values are 568, 720, 831, "
1241 "1080, 1200, 1800, 2700 Ohms.\n",
1242 arg, pdata->pins[pin].name, pin);
1243 return -EINVAL;
1244 }
1245
1246 bcm281xx_pin_update(val, mask, j+1,
1247 BCM281XX_PIN_SHIFT(I2C, PULL_UP_STR),
1248 BCM281XX_PIN_MASK(I2C, PULL_UP_STR));
1249 break;
1250
1251 case PIN_CONFIG_BIAS_DISABLE:
1252 bcm281xx_pin_update(val, mask, 0,
1253 BCM281XX_PIN_SHIFT(I2C, PULL_UP_STR),
1254 BCM281XX_PIN_MASK(I2C, PULL_UP_STR));
1255 break;
1256
1257 case PIN_CONFIG_SLEW_RATE:
1258 arg = (arg >= 1 ? 1 : 0);
1259 bcm281xx_pin_update(val, mask, arg,
1260 BCM281XX_PIN_SHIFT(I2C, SLEW),
1261 BCM281XX_PIN_MASK(I2C, SLEW));
1262 break;
1263
1264 case PIN_CONFIG_INPUT_ENABLE:
1265 /* inversed since register is for input _disable_ */
1266 arg = (arg >= 1 ? 0 : 1);
1267 bcm281xx_pin_update(val, mask, arg,
1268 BCM281XX_PIN_SHIFT(I2C, INPUT_DIS),
1269 BCM281XX_PIN_MASK(I2C, INPUT_DIS));
1270 break;
1271
1272 default:
1273 dev_err(pctldev->dev,
1274 "Unrecognized pin config %d for pin %s (%d).\n",
1275 param, pdata->pins[pin].name, pin);
1276 return -EINVAL;
1277
1278 } /* switch config */
1279 } /* for each config */
1280
1281 return 0;
1282}
1283
1284/* Goes through the configs and update register val/mask */
1285static int bcm281xx_hdmi_pin_update(struct pinctrl_dev *pctldev,
1286 unsigned pin,
1287 unsigned long *configs,
1288 unsigned num_configs,
1289 u32 *val,
1290 u32 *mask)
1291{
1292 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1293 int i;
1294 enum pin_config_param param;
1295 u16 arg;
1296
1297 for (i = 0; i < num_configs; i++) {
1298 param = pinconf_to_config_param(configs[i]);
1299 arg = pinconf_to_config_argument(configs[i]);
1300
1301 switch (param) {
1302 case PIN_CONFIG_SLEW_RATE:
1303 arg = (arg >= 1 ? 1 : 0);
1304 bcm281xx_pin_update(val, mask, arg,
1305 BCM281XX_PIN_SHIFT(HDMI, MODE),
1306 BCM281XX_PIN_MASK(HDMI, MODE));
1307 break;
1308
1309 case PIN_CONFIG_INPUT_ENABLE:
1310 /* inversed since register is for input _disable_ */
1311 arg = (arg >= 1 ? 0 : 1);
1312 bcm281xx_pin_update(val, mask, arg,
1313 BCM281XX_PIN_SHIFT(HDMI, INPUT_DIS),
1314 BCM281XX_PIN_MASK(HDMI, INPUT_DIS));
1315 break;
1316
1317 default:
1318 dev_err(pctldev->dev,
1319 "Unrecognized pin config %d for pin %s (%d).\n",
1320 param, pdata->pins[pin].name, pin);
1321 return -EINVAL;
1322
1323 } /* switch config */
1324 } /* for each config */
1325
1326 return 0;
1327}
1328
1329static int bcm281xx_pinctrl_pin_config_set(struct pinctrl_dev *pctldev,
1330 unsigned pin,
1331 unsigned long *configs,
1332 unsigned num_configs)
1333{
1334 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1335 enum bcm281xx_pin_type pin_type;
1336 u32 offset = 4 * pin;
1337 u32 cfg_val, cfg_mask;
1338 int rc;
1339
1340 cfg_val = 0;
1341 cfg_mask = 0;
1342 pin_type = pin_type_get(pctldev, pin);
1343
1344 /* Different pins have different configuration options */
1345 switch (pin_type) {
1346 case BCM281XX_PIN_TYPE_STD:
1347 rc = bcm281xx_std_pin_update(pctldev, pin, configs,
1348 num_configs, &cfg_val, &cfg_mask);
1349 break;
1350
1351 case BCM281XX_PIN_TYPE_I2C:
1352 rc = bcm281xx_i2c_pin_update(pctldev, pin, configs,
1353 num_configs, &cfg_val, &cfg_mask);
1354 break;
1355
1356 case BCM281XX_PIN_TYPE_HDMI:
1357 rc = bcm281xx_hdmi_pin_update(pctldev, pin, configs,
1358 num_configs, &cfg_val, &cfg_mask);
1359 break;
1360
1361 default:
1362 dev_err(pctldev->dev, "Unknown pin type for pin %s (%d).\n",
1363 pdata->pins[pin].name, pin);
1364 return -EINVAL;
1365
1366 } /* switch pin type */
1367
1368 if (rc)
1369 return rc;
1370
1371 dev_dbg(pctldev->dev,
1372 "%s(): Set pin %s (%d) with config 0x%x, mask 0x%x\n",
1373 __func__, pdata->pins[pin].name, pin, cfg_val, cfg_mask);
1374
1375 rc = regmap_update_bits(pdata->regmap, offset, cfg_mask, cfg_val);
1376 if (rc) {
1377 dev_err(pctldev->dev,
1378 "Error updating register for pin %s (%d).\n",
1379 pdata->pins[pin].name, pin);
1380 return rc;
1381 }
1382
1383 return 0;
1384}
1385
1386static struct pinconf_ops bcm281xx_pinctrl_pinconf_ops = {
1387 .pin_config_get = bcm281xx_pinctrl_pin_config_get,
1388 .pin_config_set = bcm281xx_pinctrl_pin_config_set,
1389};
1390
1391static struct pinctrl_desc bcm281xx_pinctrl_desc = {
1392 /* name, pins, npins members initialized in probe function */
1393 .pctlops = &bcm281xx_pinctrl_ops,
1394 .pmxops = &bcm281xx_pinctrl_pinmux_ops,
1395 .confops = &bcm281xx_pinctrl_pinconf_ops,
1396 .owner = THIS_MODULE,
1397};
1398
1399int __init bcm281xx_pinctrl_probe(struct platform_device *pdev)
1400{
1401 struct bcm281xx_pinctrl_data *pdata = &bcm281xx_pinctrl;
1402 struct resource *res;
1403 struct pinctrl_dev *pctl;
1404
1405 /* So far We can assume there is only 1 bank of registers */
1406 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1407 if (!res) {
1408 dev_err(&pdev->dev, "Missing MEM resource\n");
1409 return -ENODEV;
1410 }
1411
1412 pdata->reg_base = devm_ioremap_resource(&pdev->dev, res);
1413 if (IS_ERR(pdata->reg_base)) {
1414 dev_err(&pdev->dev, "Failed to ioremap MEM resource\n");
1415 return -ENODEV;
1416 }
1417
1418 /* Initialize the dynamic part of pinctrl_desc */
1419 pdata->regmap = devm_regmap_init_mmio(&pdev->dev, pdata->reg_base,
1420 &bcm281xx_pinctrl_regmap_config);
1421 if (IS_ERR(pdata->regmap)) {
1422 dev_err(&pdev->dev, "Regmap MMIO init failed.\n");
1423 return -ENODEV;
1424 }
1425
1426 bcm281xx_pinctrl_desc.name = dev_name(&pdev->dev);
1427 bcm281xx_pinctrl_desc.pins = bcm281xx_pinctrl.pins;
1428 bcm281xx_pinctrl_desc.npins = bcm281xx_pinctrl.npins;
1429
1430 pctl = pinctrl_register(&bcm281xx_pinctrl_desc,
1431 &pdev->dev,
1432 pdata);
1433 if (!pctl) {
1434 dev_err(&pdev->dev, "Failed to register pinctrl\n");
1435 return -ENODEV;
1436 }
1437
1438 platform_set_drvdata(pdev, pdata);
1439
1440 return 0;
1441}
1442
1443static struct of_device_id bcm281xx_pinctrl_of_match[] = {
1444 { .compatible = "brcm,bcm11351-pinctrl", },
1445 { },
1446};
1447
1448static struct platform_driver bcm281xx_pinctrl_driver = {
1449 .driver = {
1450 .name = "bcm281xx-pinctrl",
1451 .owner = THIS_MODULE,
1452 .of_match_table = bcm281xx_pinctrl_of_match,
1453 },
1454};
1455
1456module_platform_driver_probe(bcm281xx_pinctrl_driver, bcm281xx_pinctrl_probe);
1457
1458MODULE_AUTHOR("Broadcom Corporation <bcm-kernel-feedback-list@broadcom.com>");
1459MODULE_AUTHOR("Sherman Yin <syin@broadcom.com>");
1460MODULE_DESCRIPTION("Broadcom BCM281xx pinctrl driver");
1461MODULE_LICENSE("GPL v2");
diff --git a/drivers/pinctrl/pinctrl-capri.c b/drivers/pinctrl/pinctrl-capri.c
deleted file mode 100644
index eb2500212147..000000000000
--- a/drivers/pinctrl/pinctrl-capri.c
+++ /dev/null
@@ -1,1454 +0,0 @@
1/*
2 * Copyright (C) 2013 Broadcom Corporation
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation version 2.
7 *
8 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
9 * kind, whether express or implied; without even the implied warranty
10 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13#include <linux/err.h>
14#include <linux/io.h>
15#include <linux/module.h>
16#include <linux/of.h>
17#include <linux/platform_device.h>
18#include <linux/pinctrl/pinctrl.h>
19#include <linux/pinctrl/pinmux.h>
20#include <linux/pinctrl/pinconf.h>
21#include <linux/pinctrl/pinconf-generic.h>
22#include <linux/regmap.h>
23#include <linux/slab.h>
24#include "core.h"
25#include "pinctrl-utils.h"
26
27/* Capri Pin Control Registers Definitions */
28
29/* Function Select bits are the same for all pin control registers */
30#define CAPRI_PIN_REG_F_SEL_MASK 0x0700
31#define CAPRI_PIN_REG_F_SEL_SHIFT 8
32
33/* Standard pin register */
34#define CAPRI_STD_PIN_REG_DRV_STR_MASK 0x0007
35#define CAPRI_STD_PIN_REG_DRV_STR_SHIFT 0
36#define CAPRI_STD_PIN_REG_INPUT_DIS_MASK 0x0008
37#define CAPRI_STD_PIN_REG_INPUT_DIS_SHIFT 3
38#define CAPRI_STD_PIN_REG_SLEW_MASK 0x0010
39#define CAPRI_STD_PIN_REG_SLEW_SHIFT 4
40#define CAPRI_STD_PIN_REG_PULL_UP_MASK 0x0020
41#define CAPRI_STD_PIN_REG_PULL_UP_SHIFT 5
42#define CAPRI_STD_PIN_REG_PULL_DN_MASK 0x0040
43#define CAPRI_STD_PIN_REG_PULL_DN_SHIFT 6
44#define CAPRI_STD_PIN_REG_HYST_MASK 0x0080
45#define CAPRI_STD_PIN_REG_HYST_SHIFT 7
46
47/* I2C pin register */
48#define CAPRI_I2C_PIN_REG_INPUT_DIS_MASK 0x0004
49#define CAPRI_I2C_PIN_REG_INPUT_DIS_SHIFT 2
50#define CAPRI_I2C_PIN_REG_SLEW_MASK 0x0008
51#define CAPRI_I2C_PIN_REG_SLEW_SHIFT 3
52#define CAPRI_I2C_PIN_REG_PULL_UP_STR_MASK 0x0070
53#define CAPRI_I2C_PIN_REG_PULL_UP_STR_SHIFT 4
54
55/* HDMI pin register */
56#define CAPRI_HDMI_PIN_REG_INPUT_DIS_MASK 0x0008
57#define CAPRI_HDMI_PIN_REG_INPUT_DIS_SHIFT 3
58#define CAPRI_HDMI_PIN_REG_MODE_MASK 0x0010
59#define CAPRI_HDMI_PIN_REG_MODE_SHIFT 4
60
61/**
62 * capri_pin_type - types of pin register
63 */
64enum capri_pin_type {
65 CAPRI_PIN_TYPE_UNKNOWN = 0,
66 CAPRI_PIN_TYPE_STD,
67 CAPRI_PIN_TYPE_I2C,
68 CAPRI_PIN_TYPE_HDMI,
69};
70
71static enum capri_pin_type std_pin = CAPRI_PIN_TYPE_STD;
72static enum capri_pin_type i2c_pin = CAPRI_PIN_TYPE_I2C;
73static enum capri_pin_type hdmi_pin = CAPRI_PIN_TYPE_HDMI;
74
75/**
76 * capri_pin_function- define pin function
77 */
78struct capri_pin_function {
79 const char *name;
80 const char * const *groups;
81 const unsigned ngroups;
82};
83
84/**
85 * capri_pinctrl_data - Broadcom-specific pinctrl data
86 * @reg_base - base of pinctrl registers
87 */
88struct capri_pinctrl_data {
89 void __iomem *reg_base;
90
91 /* List of all pins */
92 const struct pinctrl_pin_desc *pins;
93 const unsigned npins;
94
95 const struct capri_pin_function *functions;
96 const unsigned nfunctions;
97
98 struct regmap *regmap;
99};
100
101/*
102 * Pin number definition. The order here must be the same as defined in the
103 * PADCTRLREG block in the RDB.
104 */
105#define CAPRI_PIN_ADCSYNC 0
106#define CAPRI_PIN_BAT_RM 1
107#define CAPRI_PIN_BSC1_SCL 2
108#define CAPRI_PIN_BSC1_SDA 3
109#define CAPRI_PIN_BSC2_SCL 4
110#define CAPRI_PIN_BSC2_SDA 5
111#define CAPRI_PIN_CLASSGPWR 6
112#define CAPRI_PIN_CLK_CX8 7
113#define CAPRI_PIN_CLKOUT_0 8
114#define CAPRI_PIN_CLKOUT_1 9
115#define CAPRI_PIN_CLKOUT_2 10
116#define CAPRI_PIN_CLKOUT_3 11
117#define CAPRI_PIN_CLKREQ_IN_0 12
118#define CAPRI_PIN_CLKREQ_IN_1 13
119#define CAPRI_PIN_CWS_SYS_REQ1 14
120#define CAPRI_PIN_CWS_SYS_REQ2 15
121#define CAPRI_PIN_CWS_SYS_REQ3 16
122#define CAPRI_PIN_DIGMIC1_CLK 17
123#define CAPRI_PIN_DIGMIC1_DQ 18
124#define CAPRI_PIN_DIGMIC2_CLK 19
125#define CAPRI_PIN_DIGMIC2_DQ 20
126#define CAPRI_PIN_GPEN13 21
127#define CAPRI_PIN_GPEN14 22
128#define CAPRI_PIN_GPEN15 23
129#define CAPRI_PIN_GPIO00 24
130#define CAPRI_PIN_GPIO01 25
131#define CAPRI_PIN_GPIO02 26
132#define CAPRI_PIN_GPIO03 27
133#define CAPRI_PIN_GPIO04 28
134#define CAPRI_PIN_GPIO05 29
135#define CAPRI_PIN_GPIO06 30
136#define CAPRI_PIN_GPIO07 31
137#define CAPRI_PIN_GPIO08 32
138#define CAPRI_PIN_GPIO09 33
139#define CAPRI_PIN_GPIO10 34
140#define CAPRI_PIN_GPIO11 35
141#define CAPRI_PIN_GPIO12 36
142#define CAPRI_PIN_GPIO13 37
143#define CAPRI_PIN_GPIO14 38
144#define CAPRI_PIN_GPS_PABLANK 39
145#define CAPRI_PIN_GPS_TMARK 40
146#define CAPRI_PIN_HDMI_SCL 41
147#define CAPRI_PIN_HDMI_SDA 42
148#define CAPRI_PIN_IC_DM 43
149#define CAPRI_PIN_IC_DP 44
150#define CAPRI_PIN_KP_COL_IP_0 45
151#define CAPRI_PIN_KP_COL_IP_1 46
152#define CAPRI_PIN_KP_COL_IP_2 47
153#define CAPRI_PIN_KP_COL_IP_3 48
154#define CAPRI_PIN_KP_ROW_OP_0 49
155#define CAPRI_PIN_KP_ROW_OP_1 50
156#define CAPRI_PIN_KP_ROW_OP_2 51
157#define CAPRI_PIN_KP_ROW_OP_3 52
158#define CAPRI_PIN_LCD_B_0 53
159#define CAPRI_PIN_LCD_B_1 54
160#define CAPRI_PIN_LCD_B_2 55
161#define CAPRI_PIN_LCD_B_3 56
162#define CAPRI_PIN_LCD_B_4 57
163#define CAPRI_PIN_LCD_B_5 58
164#define CAPRI_PIN_LCD_B_6 59
165#define CAPRI_PIN_LCD_B_7 60
166#define CAPRI_PIN_LCD_G_0 61
167#define CAPRI_PIN_LCD_G_1 62
168#define CAPRI_PIN_LCD_G_2 63
169#define CAPRI_PIN_LCD_G_3 64
170#define CAPRI_PIN_LCD_G_4 65
171#define CAPRI_PIN_LCD_G_5 66
172#define CAPRI_PIN_LCD_G_6 67
173#define CAPRI_PIN_LCD_G_7 68
174#define CAPRI_PIN_LCD_HSYNC 69
175#define CAPRI_PIN_LCD_OE 70
176#define CAPRI_PIN_LCD_PCLK 71
177#define CAPRI_PIN_LCD_R_0 72
178#define CAPRI_PIN_LCD_R_1 73
179#define CAPRI_PIN_LCD_R_2 74
180#define CAPRI_PIN_LCD_R_3 75
181#define CAPRI_PIN_LCD_R_4 76
182#define CAPRI_PIN_LCD_R_5 77
183#define CAPRI_PIN_LCD_R_6 78
184#define CAPRI_PIN_LCD_R_7 79
185#define CAPRI_PIN_LCD_VSYNC 80
186#define CAPRI_PIN_MDMGPIO0 81
187#define CAPRI_PIN_MDMGPIO1 82
188#define CAPRI_PIN_MDMGPIO2 83
189#define CAPRI_PIN_MDMGPIO3 84
190#define CAPRI_PIN_MDMGPIO4 85
191#define CAPRI_PIN_MDMGPIO5 86
192#define CAPRI_PIN_MDMGPIO6 87
193#define CAPRI_PIN_MDMGPIO7 88
194#define CAPRI_PIN_MDMGPIO8 89
195#define CAPRI_PIN_MPHI_DATA_0 90
196#define CAPRI_PIN_MPHI_DATA_1 91
197#define CAPRI_PIN_MPHI_DATA_2 92
198#define CAPRI_PIN_MPHI_DATA_3 93
199#define CAPRI_PIN_MPHI_DATA_4 94
200#define CAPRI_PIN_MPHI_DATA_5 95
201#define CAPRI_PIN_MPHI_DATA_6 96
202#define CAPRI_PIN_MPHI_DATA_7 97
203#define CAPRI_PIN_MPHI_DATA_8 98
204#define CAPRI_PIN_MPHI_DATA_9 99
205#define CAPRI_PIN_MPHI_DATA_10 100
206#define CAPRI_PIN_MPHI_DATA_11 101
207#define CAPRI_PIN_MPHI_DATA_12 102
208#define CAPRI_PIN_MPHI_DATA_13 103
209#define CAPRI_PIN_MPHI_DATA_14 104
210#define CAPRI_PIN_MPHI_DATA_15 105
211#define CAPRI_PIN_MPHI_HA0 106
212#define CAPRI_PIN_MPHI_HAT0 107
213#define CAPRI_PIN_MPHI_HAT1 108
214#define CAPRI_PIN_MPHI_HCE0_N 109
215#define CAPRI_PIN_MPHI_HCE1_N 110
216#define CAPRI_PIN_MPHI_HRD_N 111
217#define CAPRI_PIN_MPHI_HWR_N 112
218#define CAPRI_PIN_MPHI_RUN0 113
219#define CAPRI_PIN_MPHI_RUN1 114
220#define CAPRI_PIN_MTX_SCAN_CLK 115
221#define CAPRI_PIN_MTX_SCAN_DATA 116
222#define CAPRI_PIN_NAND_AD_0 117
223#define CAPRI_PIN_NAND_AD_1 118
224#define CAPRI_PIN_NAND_AD_2 119
225#define CAPRI_PIN_NAND_AD_3 120
226#define CAPRI_PIN_NAND_AD_4 121
227#define CAPRI_PIN_NAND_AD_5 122
228#define CAPRI_PIN_NAND_AD_6 123
229#define CAPRI_PIN_NAND_AD_7 124
230#define CAPRI_PIN_NAND_ALE 125
231#define CAPRI_PIN_NAND_CEN_0 126
232#define CAPRI_PIN_NAND_CEN_1 127
233#define CAPRI_PIN_NAND_CLE 128
234#define CAPRI_PIN_NAND_OEN 129
235#define CAPRI_PIN_NAND_RDY_0 130
236#define CAPRI_PIN_NAND_RDY_1 131
237#define CAPRI_PIN_NAND_WEN 132
238#define CAPRI_PIN_NAND_WP 133
239#define CAPRI_PIN_PC1 134
240#define CAPRI_PIN_PC2 135
241#define CAPRI_PIN_PMU_INT 136
242#define CAPRI_PIN_PMU_SCL 137
243#define CAPRI_PIN_PMU_SDA 138
244#define CAPRI_PIN_RFST2G_MTSLOTEN3G 139
245#define CAPRI_PIN_RGMII_0_RX_CTL 140
246#define CAPRI_PIN_RGMII_0_RXC 141
247#define CAPRI_PIN_RGMII_0_RXD_0 142
248#define CAPRI_PIN_RGMII_0_RXD_1 143
249#define CAPRI_PIN_RGMII_0_RXD_2 144
250#define CAPRI_PIN_RGMII_0_RXD_3 145
251#define CAPRI_PIN_RGMII_0_TX_CTL 146
252#define CAPRI_PIN_RGMII_0_TXC 147
253#define CAPRI_PIN_RGMII_0_TXD_0 148
254#define CAPRI_PIN_RGMII_0_TXD_1 149
255#define CAPRI_PIN_RGMII_0_TXD_2 150
256#define CAPRI_PIN_RGMII_0_TXD_3 151
257#define CAPRI_PIN_RGMII_1_RX_CTL 152
258#define CAPRI_PIN_RGMII_1_RXC 153
259#define CAPRI_PIN_RGMII_1_RXD_0 154
260#define CAPRI_PIN_RGMII_1_RXD_1 155
261#define CAPRI_PIN_RGMII_1_RXD_2 156
262#define CAPRI_PIN_RGMII_1_RXD_3 157
263#define CAPRI_PIN_RGMII_1_TX_CTL 158
264#define CAPRI_PIN_RGMII_1_TXC 159
265#define CAPRI_PIN_RGMII_1_TXD_0 160
266#define CAPRI_PIN_RGMII_1_TXD_1 161
267#define CAPRI_PIN_RGMII_1_TXD_2 162
268#define CAPRI_PIN_RGMII_1_TXD_3 163
269#define CAPRI_PIN_RGMII_GPIO_0 164
270#define CAPRI_PIN_RGMII_GPIO_1 165
271#define CAPRI_PIN_RGMII_GPIO_2 166
272#define CAPRI_PIN_RGMII_GPIO_3 167
273#define CAPRI_PIN_RTXDATA2G_TXDATA3G1 168
274#define CAPRI_PIN_RTXEN2G_TXDATA3G2 169
275#define CAPRI_PIN_RXDATA3G0 170
276#define CAPRI_PIN_RXDATA3G1 171
277#define CAPRI_PIN_RXDATA3G2 172
278#define CAPRI_PIN_SDIO1_CLK 173
279#define CAPRI_PIN_SDIO1_CMD 174
280#define CAPRI_PIN_SDIO1_DATA_0 175
281#define CAPRI_PIN_SDIO1_DATA_1 176
282#define CAPRI_PIN_SDIO1_DATA_2 177
283#define CAPRI_PIN_SDIO1_DATA_3 178
284#define CAPRI_PIN_SDIO4_CLK 179
285#define CAPRI_PIN_SDIO4_CMD 180
286#define CAPRI_PIN_SDIO4_DATA_0 181
287#define CAPRI_PIN_SDIO4_DATA_1 182
288#define CAPRI_PIN_SDIO4_DATA_2 183
289#define CAPRI_PIN_SDIO4_DATA_3 184
290#define CAPRI_PIN_SIM_CLK 185
291#define CAPRI_PIN_SIM_DATA 186
292#define CAPRI_PIN_SIM_DET 187
293#define CAPRI_PIN_SIM_RESETN 188
294#define CAPRI_PIN_SIM2_CLK 189
295#define CAPRI_PIN_SIM2_DATA 190
296#define CAPRI_PIN_SIM2_DET 191
297#define CAPRI_PIN_SIM2_RESETN 192
298#define CAPRI_PIN_SRI_C 193
299#define CAPRI_PIN_SRI_D 194
300#define CAPRI_PIN_SRI_E 195
301#define CAPRI_PIN_SSP_EXTCLK 196
302#define CAPRI_PIN_SSP0_CLK 197
303#define CAPRI_PIN_SSP0_FS 198
304#define CAPRI_PIN_SSP0_RXD 199
305#define CAPRI_PIN_SSP0_TXD 200
306#define CAPRI_PIN_SSP2_CLK 201
307#define CAPRI_PIN_SSP2_FS_0 202
308#define CAPRI_PIN_SSP2_FS_1 203
309#define CAPRI_PIN_SSP2_FS_2 204
310#define CAPRI_PIN_SSP2_FS_3 205
311#define CAPRI_PIN_SSP2_RXD_0 206
312#define CAPRI_PIN_SSP2_RXD_1 207
313#define CAPRI_PIN_SSP2_TXD_0 208
314#define CAPRI_PIN_SSP2_TXD_1 209
315#define CAPRI_PIN_SSP3_CLK 210
316#define CAPRI_PIN_SSP3_FS 211
317#define CAPRI_PIN_SSP3_RXD 212
318#define CAPRI_PIN_SSP3_TXD 213
319#define CAPRI_PIN_SSP4_CLK 214
320#define CAPRI_PIN_SSP4_FS 215
321#define CAPRI_PIN_SSP4_RXD 216
322#define CAPRI_PIN_SSP4_TXD 217
323#define CAPRI_PIN_SSP5_CLK 218
324#define CAPRI_PIN_SSP5_FS 219
325#define CAPRI_PIN_SSP5_RXD 220
326#define CAPRI_PIN_SSP5_TXD 221
327#define CAPRI_PIN_SSP6_CLK 222
328#define CAPRI_PIN_SSP6_FS 223
329#define CAPRI_PIN_SSP6_RXD 224
330#define CAPRI_PIN_SSP6_TXD 225
331#define CAPRI_PIN_STAT_1 226
332#define CAPRI_PIN_STAT_2 227
333#define CAPRI_PIN_SYSCLKEN 228
334#define CAPRI_PIN_TRACECLK 229
335#define CAPRI_PIN_TRACEDT00 230
336#define CAPRI_PIN_TRACEDT01 231
337#define CAPRI_PIN_TRACEDT02 232
338#define CAPRI_PIN_TRACEDT03 233
339#define CAPRI_PIN_TRACEDT04 234
340#define CAPRI_PIN_TRACEDT05 235
341#define CAPRI_PIN_TRACEDT06 236
342#define CAPRI_PIN_TRACEDT07 237
343#define CAPRI_PIN_TRACEDT08 238
344#define CAPRI_PIN_TRACEDT09 239
345#define CAPRI_PIN_TRACEDT10 240
346#define CAPRI_PIN_TRACEDT11 241
347#define CAPRI_PIN_TRACEDT12 242
348#define CAPRI_PIN_TRACEDT13 243
349#define CAPRI_PIN_TRACEDT14 244
350#define CAPRI_PIN_TRACEDT15 245
351#define CAPRI_PIN_TXDATA3G0 246
352#define CAPRI_PIN_TXPWRIND 247
353#define CAPRI_PIN_UARTB1_UCTS 248
354#define CAPRI_PIN_UARTB1_URTS 249
355#define CAPRI_PIN_UARTB1_URXD 250
356#define CAPRI_PIN_UARTB1_UTXD 251
357#define CAPRI_PIN_UARTB2_URXD 252
358#define CAPRI_PIN_UARTB2_UTXD 253
359#define CAPRI_PIN_UARTB3_UCTS 254
360#define CAPRI_PIN_UARTB3_URTS 255
361#define CAPRI_PIN_UARTB3_URXD 256
362#define CAPRI_PIN_UARTB3_UTXD 257
363#define CAPRI_PIN_UARTB4_UCTS 258
364#define CAPRI_PIN_UARTB4_URTS 259
365#define CAPRI_PIN_UARTB4_URXD 260
366#define CAPRI_PIN_UARTB4_UTXD 261
367#define CAPRI_PIN_VC_CAM1_SCL 262
368#define CAPRI_PIN_VC_CAM1_SDA 263
369#define CAPRI_PIN_VC_CAM2_SCL 264
370#define CAPRI_PIN_VC_CAM2_SDA 265
371#define CAPRI_PIN_VC_CAM3_SCL 266
372#define CAPRI_PIN_VC_CAM3_SDA 267
373
374#define CAPRI_PIN_DESC(a, b, c) \
375 { .number = a, .name = b, .drv_data = &c##_pin }
376
377/*
378 * Pin description definition. The order here must be the same as defined in
379 * the PADCTRLREG block in the RDB, since the pin number is used as an index
380 * into this array.
381 */
382static const struct pinctrl_pin_desc capri_pinctrl_pins[] = {
383 CAPRI_PIN_DESC(CAPRI_PIN_ADCSYNC, "adcsync", std),
384 CAPRI_PIN_DESC(CAPRI_PIN_BAT_RM, "bat_rm", std),
385 CAPRI_PIN_DESC(CAPRI_PIN_BSC1_SCL, "bsc1_scl", i2c),
386 CAPRI_PIN_DESC(CAPRI_PIN_BSC1_SDA, "bsc1_sda", i2c),
387 CAPRI_PIN_DESC(CAPRI_PIN_BSC2_SCL, "bsc2_scl", i2c),
388 CAPRI_PIN_DESC(CAPRI_PIN_BSC2_SDA, "bsc2_sda", i2c),
389 CAPRI_PIN_DESC(CAPRI_PIN_CLASSGPWR, "classgpwr", std),
390 CAPRI_PIN_DESC(CAPRI_PIN_CLK_CX8, "clk_cx8", std),
391 CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_0, "clkout_0", std),
392 CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_1, "clkout_1", std),
393 CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_2, "clkout_2", std),
394 CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_3, "clkout_3", std),
395 CAPRI_PIN_DESC(CAPRI_PIN_CLKREQ_IN_0, "clkreq_in_0", std),
396 CAPRI_PIN_DESC(CAPRI_PIN_CLKREQ_IN_1, "clkreq_in_1", std),
397 CAPRI_PIN_DESC(CAPRI_PIN_CWS_SYS_REQ1, "cws_sys_req1", std),
398 CAPRI_PIN_DESC(CAPRI_PIN_CWS_SYS_REQ2, "cws_sys_req2", std),
399 CAPRI_PIN_DESC(CAPRI_PIN_CWS_SYS_REQ3, "cws_sys_req3", std),
400 CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC1_CLK, "digmic1_clk", std),
401 CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC1_DQ, "digmic1_dq", std),
402 CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC2_CLK, "digmic2_clk", std),
403 CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC2_DQ, "digmic2_dq", std),
404 CAPRI_PIN_DESC(CAPRI_PIN_GPEN13, "gpen13", std),
405 CAPRI_PIN_DESC(CAPRI_PIN_GPEN14, "gpen14", std),
406 CAPRI_PIN_DESC(CAPRI_PIN_GPEN15, "gpen15", std),
407 CAPRI_PIN_DESC(CAPRI_PIN_GPIO00, "gpio00", std),
408 CAPRI_PIN_DESC(CAPRI_PIN_GPIO01, "gpio01", std),
409 CAPRI_PIN_DESC(CAPRI_PIN_GPIO02, "gpio02", std),
410 CAPRI_PIN_DESC(CAPRI_PIN_GPIO03, "gpio03", std),
411 CAPRI_PIN_DESC(CAPRI_PIN_GPIO04, "gpio04", std),
412 CAPRI_PIN_DESC(CAPRI_PIN_GPIO05, "gpio05", std),
413 CAPRI_PIN_DESC(CAPRI_PIN_GPIO06, "gpio06", std),
414 CAPRI_PIN_DESC(CAPRI_PIN_GPIO07, "gpio07", std),
415 CAPRI_PIN_DESC(CAPRI_PIN_GPIO08, "gpio08", std),
416 CAPRI_PIN_DESC(CAPRI_PIN_GPIO09, "gpio09", std),
417 CAPRI_PIN_DESC(CAPRI_PIN_GPIO10, "gpio10", std),
418 CAPRI_PIN_DESC(CAPRI_PIN_GPIO11, "gpio11", std),
419 CAPRI_PIN_DESC(CAPRI_PIN_GPIO12, "gpio12", std),
420 CAPRI_PIN_DESC(CAPRI_PIN_GPIO13, "gpio13", std),
421 CAPRI_PIN_DESC(CAPRI_PIN_GPIO14, "gpio14", std),
422 CAPRI_PIN_DESC(CAPRI_PIN_GPS_PABLANK, "gps_pablank", std),
423 CAPRI_PIN_DESC(CAPRI_PIN_GPS_TMARK, "gps_tmark", std),
424 CAPRI_PIN_DESC(CAPRI_PIN_HDMI_SCL, "hdmi_scl", hdmi),
425 CAPRI_PIN_DESC(CAPRI_PIN_HDMI_SDA, "hdmi_sda", hdmi),
426 CAPRI_PIN_DESC(CAPRI_PIN_IC_DM, "ic_dm", std),
427 CAPRI_PIN_DESC(CAPRI_PIN_IC_DP, "ic_dp", std),
428 CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_0, "kp_col_ip_0", std),
429 CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_1, "kp_col_ip_1", std),
430 CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_2, "kp_col_ip_2", std),
431 CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_3, "kp_col_ip_3", std),
432 CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_0, "kp_row_op_0", std),
433 CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_1, "kp_row_op_1", std),
434 CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_2, "kp_row_op_2", std),
435 CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_3, "kp_row_op_3", std),
436 CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_0, "lcd_b_0", std),
437 CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_1, "lcd_b_1", std),
438 CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_2, "lcd_b_2", std),
439 CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_3, "lcd_b_3", std),
440 CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_4, "lcd_b_4", std),
441 CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_5, "lcd_b_5", std),
442 CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_6, "lcd_b_6", std),
443 CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_7, "lcd_b_7", std),
444 CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_0, "lcd_g_0", std),
445 CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_1, "lcd_g_1", std),
446 CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_2, "lcd_g_2", std),
447 CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_3, "lcd_g_3", std),
448 CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_4, "lcd_g_4", std),
449 CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_5, "lcd_g_5", std),
450 CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_6, "lcd_g_6", std),
451 CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_7, "lcd_g_7", std),
452 CAPRI_PIN_DESC(CAPRI_PIN_LCD_HSYNC, "lcd_hsync", std),
453 CAPRI_PIN_DESC(CAPRI_PIN_LCD_OE, "lcd_oe", std),
454 CAPRI_PIN_DESC(CAPRI_PIN_LCD_PCLK, "lcd_pclk", std),
455 CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_0, "lcd_r_0", std),
456 CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_1, "lcd_r_1", std),
457 CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_2, "lcd_r_2", std),
458 CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_3, "lcd_r_3", std),
459 CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_4, "lcd_r_4", std),
460 CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_5, "lcd_r_5", std),
461 CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_6, "lcd_r_6", std),
462 CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_7, "lcd_r_7", std),
463 CAPRI_PIN_DESC(CAPRI_PIN_LCD_VSYNC, "lcd_vsync", std),
464 CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO0, "mdmgpio0", std),
465 CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO1, "mdmgpio1", std),
466 CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO2, "mdmgpio2", std),
467 CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO3, "mdmgpio3", std),
468 CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO4, "mdmgpio4", std),
469 CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO5, "mdmgpio5", std),
470 CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO6, "mdmgpio6", std),
471 CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO7, "mdmgpio7", std),
472 CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO8, "mdmgpio8", std),
473 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_0, "mphi_data_0", std),
474 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_1, "mphi_data_1", std),
475 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_2, "mphi_data_2", std),
476 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_3, "mphi_data_3", std),
477 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_4, "mphi_data_4", std),
478 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_5, "mphi_data_5", std),
479 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_6, "mphi_data_6", std),
480 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_7, "mphi_data_7", std),
481 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_8, "mphi_data_8", std),
482 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_9, "mphi_data_9", std),
483 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_10, "mphi_data_10", std),
484 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_11, "mphi_data_11", std),
485 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_12, "mphi_data_12", std),
486 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_13, "mphi_data_13", std),
487 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_14, "mphi_data_14", std),
488 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_15, "mphi_data_15", std),
489 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HA0, "mphi_ha0", std),
490 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HAT0, "mphi_hat0", std),
491 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HAT1, "mphi_hat1", std),
492 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HCE0_N, "mphi_hce0_n", std),
493 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HCE1_N, "mphi_hce1_n", std),
494 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HRD_N, "mphi_hrd_n", std),
495 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HWR_N, "mphi_hwr_n", std),
496 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_RUN0, "mphi_run0", std),
497 CAPRI_PIN_DESC(CAPRI_PIN_MPHI_RUN1, "mphi_run1", std),
498 CAPRI_PIN_DESC(CAPRI_PIN_MTX_SCAN_CLK, "mtx_scan_clk", std),
499 CAPRI_PIN_DESC(CAPRI_PIN_MTX_SCAN_DATA, "mtx_scan_data", std),
500 CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_0, "nand_ad_0", std),
501 CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_1, "nand_ad_1", std),
502 CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_2, "nand_ad_2", std),
503 CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_3, "nand_ad_3", std),
504 CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_4, "nand_ad_4", std),
505 CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_5, "nand_ad_5", std),
506 CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_6, "nand_ad_6", std),
507 CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_7, "nand_ad_7", std),
508 CAPRI_PIN_DESC(CAPRI_PIN_NAND_ALE, "nand_ale", std),
509 CAPRI_PIN_DESC(CAPRI_PIN_NAND_CEN_0, "nand_cen_0", std),
510 CAPRI_PIN_DESC(CAPRI_PIN_NAND_CEN_1, "nand_cen_1", std),
511 CAPRI_PIN_DESC(CAPRI_PIN_NAND_CLE, "nand_cle", std),
512 CAPRI_PIN_DESC(CAPRI_PIN_NAND_OEN, "nand_oen", std),
513 CAPRI_PIN_DESC(CAPRI_PIN_NAND_RDY_0, "nand_rdy_0", std),
514 CAPRI_PIN_DESC(CAPRI_PIN_NAND_RDY_1, "nand_rdy_1", std),
515 CAPRI_PIN_DESC(CAPRI_PIN_NAND_WEN, "nand_wen", std),
516 CAPRI_PIN_DESC(CAPRI_PIN_NAND_WP, "nand_wp", std),
517 CAPRI_PIN_DESC(CAPRI_PIN_PC1, "pc1", std),
518 CAPRI_PIN_DESC(CAPRI_PIN_PC2, "pc2", std),
519 CAPRI_PIN_DESC(CAPRI_PIN_PMU_INT, "pmu_int", std),
520 CAPRI_PIN_DESC(CAPRI_PIN_PMU_SCL, "pmu_scl", i2c),
521 CAPRI_PIN_DESC(CAPRI_PIN_PMU_SDA, "pmu_sda", i2c),
522 CAPRI_PIN_DESC(CAPRI_PIN_RFST2G_MTSLOTEN3G, "rfst2g_mtsloten3g", std),
523 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RX_CTL, "rgmii_0_rx_ctl", std),
524 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXC, "rgmii_0_rxc", std),
525 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_0, "rgmii_0_rxd_0", std),
526 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_1, "rgmii_0_rxd_1", std),
527 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_2, "rgmii_0_rxd_2", std),
528 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_3, "rgmii_0_rxd_3", std),
529 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TX_CTL, "rgmii_0_tx_ctl", std),
530 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXC, "rgmii_0_txc", std),
531 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_0, "rgmii_0_txd_0", std),
532 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_1, "rgmii_0_txd_1", std),
533 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_2, "rgmii_0_txd_2", std),
534 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_3, "rgmii_0_txd_3", std),
535 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RX_CTL, "rgmii_1_rx_ctl", std),
536 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXC, "rgmii_1_rxc", std),
537 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_0, "rgmii_1_rxd_0", std),
538 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_1, "rgmii_1_rxd_1", std),
539 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_2, "rgmii_1_rxd_2", std),
540 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_3, "rgmii_1_rxd_3", std),
541 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TX_CTL, "rgmii_1_tx_ctl", std),
542 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXC, "rgmii_1_txc", std),
543 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_0, "rgmii_1_txd_0", std),
544 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_1, "rgmii_1_txd_1", std),
545 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_2, "rgmii_1_txd_2", std),
546 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_3, "rgmii_1_txd_3", std),
547 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_0, "rgmii_gpio_0", std),
548 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_1, "rgmii_gpio_1", std),
549 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_2, "rgmii_gpio_2", std),
550 CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_3, "rgmii_gpio_3", std),
551 CAPRI_PIN_DESC(CAPRI_PIN_RTXDATA2G_TXDATA3G1, "rtxdata2g_txdata3g1",
552 std),
553 CAPRI_PIN_DESC(CAPRI_PIN_RTXEN2G_TXDATA3G2, "rtxen2g_txdata3g2", std),
554 CAPRI_PIN_DESC(CAPRI_PIN_RXDATA3G0, "rxdata3g0", std),
555 CAPRI_PIN_DESC(CAPRI_PIN_RXDATA3G1, "rxdata3g1", std),
556 CAPRI_PIN_DESC(CAPRI_PIN_RXDATA3G2, "rxdata3g2", std),
557 CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_CLK, "sdio1_clk", std),
558 CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_CMD, "sdio1_cmd", std),
559 CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_0, "sdio1_data_0", std),
560 CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_1, "sdio1_data_1", std),
561 CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_2, "sdio1_data_2", std),
562 CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_3, "sdio1_data_3", std),
563 CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_CLK, "sdio4_clk", std),
564 CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_CMD, "sdio4_cmd", std),
565 CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_0, "sdio4_data_0", std),
566 CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_1, "sdio4_data_1", std),
567 CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_2, "sdio4_data_2", std),
568 CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_3, "sdio4_data_3", std),
569 CAPRI_PIN_DESC(CAPRI_PIN_SIM_CLK, "sim_clk", std),
570 CAPRI_PIN_DESC(CAPRI_PIN_SIM_DATA, "sim_data", std),
571 CAPRI_PIN_DESC(CAPRI_PIN_SIM_DET, "sim_det", std),
572 CAPRI_PIN_DESC(CAPRI_PIN_SIM_RESETN, "sim_resetn", std),
573 CAPRI_PIN_DESC(CAPRI_PIN_SIM2_CLK, "sim2_clk", std),
574 CAPRI_PIN_DESC(CAPRI_PIN_SIM2_DATA, "sim2_data", std),
575 CAPRI_PIN_DESC(CAPRI_PIN_SIM2_DET, "sim2_det", std),
576 CAPRI_PIN_DESC(CAPRI_PIN_SIM2_RESETN, "sim2_resetn", std),
577 CAPRI_PIN_DESC(CAPRI_PIN_SRI_C, "sri_c", std),
578 CAPRI_PIN_DESC(CAPRI_PIN_SRI_D, "sri_d", std),
579 CAPRI_PIN_DESC(CAPRI_PIN_SRI_E, "sri_e", std),
580 CAPRI_PIN_DESC(CAPRI_PIN_SSP_EXTCLK, "ssp_extclk", std),
581 CAPRI_PIN_DESC(CAPRI_PIN_SSP0_CLK, "ssp0_clk", std),
582 CAPRI_PIN_DESC(CAPRI_PIN_SSP0_FS, "ssp0_fs", std),
583 CAPRI_PIN_DESC(CAPRI_PIN_SSP0_RXD, "ssp0_rxd", std),
584 CAPRI_PIN_DESC(CAPRI_PIN_SSP0_TXD, "ssp0_txd", std),
585 CAPRI_PIN_DESC(CAPRI_PIN_SSP2_CLK, "ssp2_clk", std),
586 CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_0, "ssp2_fs_0", std),
587 CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_1, "ssp2_fs_1", std),
588 CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_2, "ssp2_fs_2", std),
589 CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_3, "ssp2_fs_3", std),
590 CAPRI_PIN_DESC(CAPRI_PIN_SSP2_RXD_0, "ssp2_rxd_0", std),
591 CAPRI_PIN_DESC(CAPRI_PIN_SSP2_RXD_1, "ssp2_rxd_1", std),
592 CAPRI_PIN_DESC(CAPRI_PIN_SSP2_TXD_0, "ssp2_txd_0", std),
593 CAPRI_PIN_DESC(CAPRI_PIN_SSP2_TXD_1, "ssp2_txd_1", std),
594 CAPRI_PIN_DESC(CAPRI_PIN_SSP3_CLK, "ssp3_clk", std),
595 CAPRI_PIN_DESC(CAPRI_PIN_SSP3_FS, "ssp3_fs", std),
596 CAPRI_PIN_DESC(CAPRI_PIN_SSP3_RXD, "ssp3_rxd", std),
597 CAPRI_PIN_DESC(CAPRI_PIN_SSP3_TXD, "ssp3_txd", std),
598 CAPRI_PIN_DESC(CAPRI_PIN_SSP4_CLK, "ssp4_clk", std),
599 CAPRI_PIN_DESC(CAPRI_PIN_SSP4_FS, "ssp4_fs", std),
600 CAPRI_PIN_DESC(CAPRI_PIN_SSP4_RXD, "ssp4_rxd", std),
601 CAPRI_PIN_DESC(CAPRI_PIN_SSP4_TXD, "ssp4_txd", std),
602 CAPRI_PIN_DESC(CAPRI_PIN_SSP5_CLK, "ssp5_clk", std),
603 CAPRI_PIN_DESC(CAPRI_PIN_SSP5_FS, "ssp5_fs", std),
604 CAPRI_PIN_DESC(CAPRI_PIN_SSP5_RXD, "ssp5_rxd", std),
605 CAPRI_PIN_DESC(CAPRI_PIN_SSP5_TXD, "ssp5_txd", std),
606 CAPRI_PIN_DESC(CAPRI_PIN_SSP6_CLK, "ssp6_clk", std),
607 CAPRI_PIN_DESC(CAPRI_PIN_SSP6_FS, "ssp6_fs", std),
608 CAPRI_PIN_DESC(CAPRI_PIN_SSP6_RXD, "ssp6_rxd", std),
609 CAPRI_PIN_DESC(CAPRI_PIN_SSP6_TXD, "ssp6_txd", std),
610 CAPRI_PIN_DESC(CAPRI_PIN_STAT_1, "stat_1", std),
611 CAPRI_PIN_DESC(CAPRI_PIN_STAT_2, "stat_2", std),
612 CAPRI_PIN_DESC(CAPRI_PIN_SYSCLKEN, "sysclken", std),
613 CAPRI_PIN_DESC(CAPRI_PIN_TRACECLK, "traceclk", std),
614 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT00, "tracedt00", std),
615 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT01, "tracedt01", std),
616 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT02, "tracedt02", std),
617 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT03, "tracedt03", std),
618 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT04, "tracedt04", std),
619 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT05, "tracedt05", std),
620 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT06, "tracedt06", std),
621 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT07, "tracedt07", std),
622 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT08, "tracedt08", std),
623 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT09, "tracedt09", std),
624 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT10, "tracedt10", std),
625 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT11, "tracedt11", std),
626 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT12, "tracedt12", std),
627 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT13, "tracedt13", std),
628 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT14, "tracedt14", std),
629 CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT15, "tracedt15", std),
630 CAPRI_PIN_DESC(CAPRI_PIN_TXDATA3G0, "txdata3g0", std),
631 CAPRI_PIN_DESC(CAPRI_PIN_TXPWRIND, "txpwrind", std),
632 CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_UCTS, "uartb1_ucts", std),
633 CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_URTS, "uartb1_urts", std),
634 CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_URXD, "uartb1_urxd", std),
635 CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_UTXD, "uartb1_utxd", std),
636 CAPRI_PIN_DESC(CAPRI_PIN_UARTB2_URXD, "uartb2_urxd", std),
637 CAPRI_PIN_DESC(CAPRI_PIN_UARTB2_UTXD, "uartb2_utxd", std),
638 CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_UCTS, "uartb3_ucts", std),
639 CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_URTS, "uartb3_urts", std),
640 CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_URXD, "uartb3_urxd", std),
641 CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_UTXD, "uartb3_utxd", std),
642 CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_UCTS, "uartb4_ucts", std),
643 CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_URTS, "uartb4_urts", std),
644 CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_URXD, "uartb4_urxd", std),
645 CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_UTXD, "uartb4_utxd", std),
646 CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM1_SCL, "vc_cam1_scl", i2c),
647 CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM1_SDA, "vc_cam1_sda", i2c),
648 CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM2_SCL, "vc_cam2_scl", i2c),
649 CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM2_SDA, "vc_cam2_sda", i2c),
650 CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM3_SCL, "vc_cam3_scl", i2c),
651 CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM3_SDA, "vc_cam3_sda", i2c),
652};
653
654static const char * const capri_alt_groups[] = {
655 "adcsync",
656 "bat_rm",
657 "bsc1_scl",
658 "bsc1_sda",
659 "bsc2_scl",
660 "bsc2_sda",
661 "classgpwr",
662 "clk_cx8",
663 "clkout_0",
664 "clkout_1",
665 "clkout_2",
666 "clkout_3",
667 "clkreq_in_0",
668 "clkreq_in_1",
669 "cws_sys_req1",
670 "cws_sys_req2",
671 "cws_sys_req3",
672 "digmic1_clk",
673 "digmic1_dq",
674 "digmic2_clk",
675 "digmic2_dq",
676 "gpen13",
677 "gpen14",
678 "gpen15",
679 "gpio00",
680 "gpio01",
681 "gpio02",
682 "gpio03",
683 "gpio04",
684 "gpio05",
685 "gpio06",
686 "gpio07",
687 "gpio08",
688 "gpio09",
689 "gpio10",
690 "gpio11",
691 "gpio12",
692 "gpio13",
693 "gpio14",
694 "gps_pablank",
695 "gps_tmark",
696 "hdmi_scl",
697 "hdmi_sda",
698 "ic_dm",
699 "ic_dp",
700 "kp_col_ip_0",
701 "kp_col_ip_1",
702 "kp_col_ip_2",
703 "kp_col_ip_3",
704 "kp_row_op_0",
705 "kp_row_op_1",
706 "kp_row_op_2",
707 "kp_row_op_3",
708 "lcd_b_0",
709 "lcd_b_1",
710 "lcd_b_2",
711 "lcd_b_3",
712 "lcd_b_4",
713 "lcd_b_5",
714 "lcd_b_6",
715 "lcd_b_7",
716 "lcd_g_0",
717 "lcd_g_1",
718 "lcd_g_2",
719 "lcd_g_3",
720 "lcd_g_4",
721 "lcd_g_5",
722 "lcd_g_6",
723 "lcd_g_7",
724 "lcd_hsync",
725 "lcd_oe",
726 "lcd_pclk",
727 "lcd_r_0",
728 "lcd_r_1",
729 "lcd_r_2",
730 "lcd_r_3",
731 "lcd_r_4",
732 "lcd_r_5",
733 "lcd_r_6",
734 "lcd_r_7",
735 "lcd_vsync",
736 "mdmgpio0",
737 "mdmgpio1",
738 "mdmgpio2",
739 "mdmgpio3",
740 "mdmgpio4",
741 "mdmgpio5",
742 "mdmgpio6",
743 "mdmgpio7",
744 "mdmgpio8",
745 "mphi_data_0",
746 "mphi_data_1",
747 "mphi_data_2",
748 "mphi_data_3",
749 "mphi_data_4",
750 "mphi_data_5",
751 "mphi_data_6",
752 "mphi_data_7",
753 "mphi_data_8",
754 "mphi_data_9",
755 "mphi_data_10",
756 "mphi_data_11",
757 "mphi_data_12",
758 "mphi_data_13",
759 "mphi_data_14",
760 "mphi_data_15",
761 "mphi_ha0",
762 "mphi_hat0",
763 "mphi_hat1",
764 "mphi_hce0_n",
765 "mphi_hce1_n",
766 "mphi_hrd_n",
767 "mphi_hwr_n",
768 "mphi_run0",
769 "mphi_run1",
770 "mtx_scan_clk",
771 "mtx_scan_data",
772 "nand_ad_0",
773 "nand_ad_1",
774 "nand_ad_2",
775 "nand_ad_3",
776 "nand_ad_4",
777 "nand_ad_5",
778 "nand_ad_6",
779 "nand_ad_7",
780 "nand_ale",
781 "nand_cen_0",
782 "nand_cen_1",
783 "nand_cle",
784 "nand_oen",
785 "nand_rdy_0",
786 "nand_rdy_1",
787 "nand_wen",
788 "nand_wp",
789 "pc1",
790 "pc2",
791 "pmu_int",
792 "pmu_scl",
793 "pmu_sda",
794 "rfst2g_mtsloten3g",
795 "rgmii_0_rx_ctl",
796 "rgmii_0_rxc",
797 "rgmii_0_rxd_0",
798 "rgmii_0_rxd_1",
799 "rgmii_0_rxd_2",
800 "rgmii_0_rxd_3",
801 "rgmii_0_tx_ctl",
802 "rgmii_0_txc",
803 "rgmii_0_txd_0",
804 "rgmii_0_txd_1",
805 "rgmii_0_txd_2",
806 "rgmii_0_txd_3",
807 "rgmii_1_rx_ctl",
808 "rgmii_1_rxc",
809 "rgmii_1_rxd_0",
810 "rgmii_1_rxd_1",
811 "rgmii_1_rxd_2",
812 "rgmii_1_rxd_3",
813 "rgmii_1_tx_ctl",
814 "rgmii_1_txc",
815 "rgmii_1_txd_0",
816 "rgmii_1_txd_1",
817 "rgmii_1_txd_2",
818 "rgmii_1_txd_3",
819 "rgmii_gpio_0",
820 "rgmii_gpio_1",
821 "rgmii_gpio_2",
822 "rgmii_gpio_3",
823 "rtxdata2g_txdata3g1",
824 "rtxen2g_txdata3g2",
825 "rxdata3g0",
826 "rxdata3g1",
827 "rxdata3g2",
828 "sdio1_clk",
829 "sdio1_cmd",
830 "sdio1_data_0",
831 "sdio1_data_1",
832 "sdio1_data_2",
833 "sdio1_data_3",
834 "sdio4_clk",
835 "sdio4_cmd",
836 "sdio4_data_0",
837 "sdio4_data_1",
838 "sdio4_data_2",
839 "sdio4_data_3",
840 "sim_clk",
841 "sim_data",
842 "sim_det",
843 "sim_resetn",
844 "sim2_clk",
845 "sim2_data",
846 "sim2_det",
847 "sim2_resetn",
848 "sri_c",
849 "sri_d",
850 "sri_e",
851 "ssp_extclk",
852 "ssp0_clk",
853 "ssp0_fs",
854 "ssp0_rxd",
855 "ssp0_txd",
856 "ssp2_clk",
857 "ssp2_fs_0",
858 "ssp2_fs_1",
859 "ssp2_fs_2",
860 "ssp2_fs_3",
861 "ssp2_rxd_0",
862 "ssp2_rxd_1",
863 "ssp2_txd_0",
864 "ssp2_txd_1",
865 "ssp3_clk",
866 "ssp3_fs",
867 "ssp3_rxd",
868 "ssp3_txd",
869 "ssp4_clk",
870 "ssp4_fs",
871 "ssp4_rxd",
872 "ssp4_txd",
873 "ssp5_clk",
874 "ssp5_fs",
875 "ssp5_rxd",
876 "ssp5_txd",
877 "ssp6_clk",
878 "ssp6_fs",
879 "ssp6_rxd",
880 "ssp6_txd",
881 "stat_1",
882 "stat_2",
883 "sysclken",
884 "traceclk",
885 "tracedt00",
886 "tracedt01",
887 "tracedt02",
888 "tracedt03",
889 "tracedt04",
890 "tracedt05",
891 "tracedt06",
892 "tracedt07",
893 "tracedt08",
894 "tracedt09",
895 "tracedt10",
896 "tracedt11",
897 "tracedt12",
898 "tracedt13",
899 "tracedt14",
900 "tracedt15",
901 "txdata3g0",
902 "txpwrind",
903 "uartb1_ucts",
904 "uartb1_urts",
905 "uartb1_urxd",
906 "uartb1_utxd",
907 "uartb2_urxd",
908 "uartb2_utxd",
909 "uartb3_ucts",
910 "uartb3_urts",
911 "uartb3_urxd",
912 "uartb3_utxd",
913 "uartb4_ucts",
914 "uartb4_urts",
915 "uartb4_urxd",
916 "uartb4_utxd",
917 "vc_cam1_scl",
918 "vc_cam1_sda",
919 "vc_cam2_scl",
920 "vc_cam2_sda",
921 "vc_cam3_scl",
922 "vc_cam3_sda",
923};
924
925/* Every pin can implement all ALT1-ALT4 functions */
926#define CAPRI_PIN_FUNCTION(fcn_name) \
927{ \
928 .name = #fcn_name, \
929 .groups = capri_alt_groups, \
930 .ngroups = ARRAY_SIZE(capri_alt_groups), \
931}
932
933static const struct capri_pin_function capri_functions[] = {
934 CAPRI_PIN_FUNCTION(alt1),
935 CAPRI_PIN_FUNCTION(alt2),
936 CAPRI_PIN_FUNCTION(alt3),
937 CAPRI_PIN_FUNCTION(alt4),
938};
939
940static struct capri_pinctrl_data capri_pinctrl = {
941 .pins = capri_pinctrl_pins,
942 .npins = ARRAY_SIZE(capri_pinctrl_pins),
943 .functions = capri_functions,
944 .nfunctions = ARRAY_SIZE(capri_functions),
945};
946
947static inline enum capri_pin_type pin_type_get(struct pinctrl_dev *pctldev,
948 unsigned pin)
949{
950 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
951
952 if (pin >= pdata->npins)
953 return CAPRI_PIN_TYPE_UNKNOWN;
954
955 return *(enum capri_pin_type *)(pdata->pins[pin].drv_data);
956}
957
958#define CAPRI_PIN_SHIFT(type, param) \
959 (CAPRI_ ## type ## _PIN_REG_ ## param ## _SHIFT)
960
961#define CAPRI_PIN_MASK(type, param) \
962 (CAPRI_ ## type ## _PIN_REG_ ## param ## _MASK)
963
964/*
965 * This helper function is used to build up the value and mask used to write to
966 * a pin register, but does not actually write to the register.
967 */
968static inline void capri_pin_update(u32 *reg_val, u32 *reg_mask, u32 param_val,
969 u32 param_shift, u32 param_mask)
970{
971 *reg_val &= ~param_mask;
972 *reg_val |= (param_val << param_shift) & param_mask;
973 *reg_mask |= param_mask;
974}
975
976static struct regmap_config capri_pinctrl_regmap_config = {
977 .reg_bits = 32,
978 .reg_stride = 4,
979 .val_bits = 32,
980 .max_register = CAPRI_PIN_VC_CAM3_SDA,
981};
982
983static int capri_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
984{
985 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
986
987 return pdata->npins;
988}
989
990static const char *capri_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
991 unsigned group)
992{
993 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
994
995 return pdata->pins[group].name;
996}
997
998static int capri_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
999 unsigned group,
1000 const unsigned **pins,
1001 unsigned *num_pins)
1002{
1003 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1004
1005 *pins = &pdata->pins[group].number;
1006 *num_pins = 1;
1007
1008 return 0;
1009}
1010
1011static void capri_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
1012 struct seq_file *s,
1013 unsigned offset)
1014{
1015 seq_printf(s, " %s", dev_name(pctldev->dev));
1016}
1017
1018static struct pinctrl_ops capri_pinctrl_ops = {
1019 .get_groups_count = capri_pinctrl_get_groups_count,
1020 .get_group_name = capri_pinctrl_get_group_name,
1021 .get_group_pins = capri_pinctrl_get_group_pins,
1022 .pin_dbg_show = capri_pinctrl_pin_dbg_show,
1023 .dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
1024 .dt_free_map = pinctrl_utils_dt_free_map,
1025};
1026
1027static int capri_pinctrl_get_fcns_count(struct pinctrl_dev *pctldev)
1028{
1029 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1030
1031 return pdata->nfunctions;
1032}
1033
1034static const char *capri_pinctrl_get_fcn_name(struct pinctrl_dev *pctldev,
1035 unsigned function)
1036{
1037 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1038
1039 return pdata->functions[function].name;
1040}
1041
1042static int capri_pinctrl_get_fcn_groups(struct pinctrl_dev *pctldev,
1043 unsigned function,
1044 const char * const **groups,
1045 unsigned * const num_groups)
1046{
1047 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1048
1049 *groups = pdata->functions[function].groups;
1050 *num_groups = pdata->functions[function].ngroups;
1051
1052 return 0;
1053}
1054
1055static int capri_pinmux_enable(struct pinctrl_dev *pctldev,
1056 unsigned function,
1057 unsigned group)
1058{
1059 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1060 const struct capri_pin_function *f = &pdata->functions[function];
1061 u32 offset = 4 * pdata->pins[group].number;
1062 int rc = 0;
1063
1064 dev_dbg(pctldev->dev,
1065 "%s(): Enable function %s (%d) of pin %s (%d) @offset 0x%x.\n",
1066 __func__, f->name, function, pdata->pins[group].name,
1067 pdata->pins[group].number, offset);
1068
1069 rc = regmap_update_bits(pdata->regmap, offset, CAPRI_PIN_REG_F_SEL_MASK,
1070 function << CAPRI_PIN_REG_F_SEL_SHIFT);
1071 if (rc)
1072 dev_err(pctldev->dev,
1073 "Error updating register for pin %s (%d).\n",
1074 pdata->pins[group].name, pdata->pins[group].number);
1075
1076 return rc;
1077}
1078
1079static struct pinmux_ops capri_pinctrl_pinmux_ops = {
1080 .get_functions_count = capri_pinctrl_get_fcns_count,
1081 .get_function_name = capri_pinctrl_get_fcn_name,
1082 .get_function_groups = capri_pinctrl_get_fcn_groups,
1083 .enable = capri_pinmux_enable,
1084};
1085
1086static int capri_pinctrl_pin_config_get(struct pinctrl_dev *pctldev,
1087 unsigned pin,
1088 unsigned long *config)
1089{
1090 return -ENOTSUPP;
1091}
1092
1093
1094/* Goes through the configs and update register val/mask */
1095static int capri_std_pin_update(struct pinctrl_dev *pctldev,
1096 unsigned pin,
1097 unsigned long *configs,
1098 unsigned num_configs,
1099 u32 *val,
1100 u32 *mask)
1101{
1102 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1103 int i;
1104 enum pin_config_param param;
1105 u16 arg;
1106
1107 for (i = 0; i < num_configs; i++) {
1108 param = pinconf_to_config_param(configs[i]);
1109 arg = pinconf_to_config_argument(configs[i]);
1110
1111 switch (param) {
1112 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
1113 arg = (arg >= 1 ? 1 : 0);
1114 capri_pin_update(val, mask, arg,
1115 CAPRI_PIN_SHIFT(STD, HYST),
1116 CAPRI_PIN_MASK(STD, HYST));
1117 break;
1118 /*
1119 * The pin bias can only be one of pull-up, pull-down, or
1120 * disable. The user does not need to specify a value for the
1121 * property, and the default value from pinconf-generic is
1122 * ignored.
1123 */
1124 case PIN_CONFIG_BIAS_DISABLE:
1125 capri_pin_update(val, mask, 0,
1126 CAPRI_PIN_SHIFT(STD, PULL_UP),
1127 CAPRI_PIN_MASK(STD, PULL_UP));
1128 capri_pin_update(val, mask, 0,
1129 CAPRI_PIN_SHIFT(STD, PULL_DN),
1130 CAPRI_PIN_MASK(STD, PULL_DN));
1131 break;
1132
1133 case PIN_CONFIG_BIAS_PULL_UP:
1134 capri_pin_update(val, mask, 1,
1135 CAPRI_PIN_SHIFT(STD, PULL_UP),
1136 CAPRI_PIN_MASK(STD, PULL_UP));
1137 capri_pin_update(val, mask, 0,
1138 CAPRI_PIN_SHIFT(STD, PULL_DN),
1139 CAPRI_PIN_MASK(STD, PULL_DN));
1140 break;
1141
1142 case PIN_CONFIG_BIAS_PULL_DOWN:
1143 capri_pin_update(val, mask, 0,
1144 CAPRI_PIN_SHIFT(STD, PULL_UP),
1145 CAPRI_PIN_MASK(STD, PULL_UP));
1146 capri_pin_update(val, mask, 1,
1147 CAPRI_PIN_SHIFT(STD, PULL_DN),
1148 CAPRI_PIN_MASK(STD, PULL_DN));
1149 break;
1150
1151 case PIN_CONFIG_SLEW_RATE:
1152 arg = (arg >= 1 ? 1 : 0);
1153 capri_pin_update(val, mask, arg,
1154 CAPRI_PIN_SHIFT(STD, SLEW),
1155 CAPRI_PIN_MASK(STD, SLEW));
1156 break;
1157
1158 case PIN_CONFIG_INPUT_ENABLE:
1159 /* inversed since register is for input _disable_ */
1160 arg = (arg >= 1 ? 0 : 1);
1161 capri_pin_update(val, mask, arg,
1162 CAPRI_PIN_SHIFT(STD, INPUT_DIS),
1163 CAPRI_PIN_MASK(STD, INPUT_DIS));
1164 break;
1165
1166 case PIN_CONFIG_DRIVE_STRENGTH:
1167 /* Valid range is 2-16 mA, even numbers only */
1168 if ((arg < 2) || (arg > 16) || (arg % 2)) {
1169 dev_err(pctldev->dev,
1170 "Invalid Drive Strength value (%d) for "
1171 "pin %s (%d). Valid values are "
1172 "(2..16) mA, even numbers only.\n",
1173 arg, pdata->pins[pin].name, pin);
1174 return -EINVAL;
1175 }
1176 capri_pin_update(val, mask, (arg/2)-1,
1177 CAPRI_PIN_SHIFT(STD, DRV_STR),
1178 CAPRI_PIN_MASK(STD, DRV_STR));
1179 break;
1180
1181 default:
1182 dev_err(pctldev->dev,
1183 "Unrecognized pin config %d for pin %s (%d).\n",
1184 param, pdata->pins[pin].name, pin);
1185 return -EINVAL;
1186
1187 } /* switch config */
1188 } /* for each config */
1189
1190 return 0;
1191}
1192
1193/*
1194 * The pull-up strength for an I2C pin is represented by bits 4-6 in the
1195 * register with the following mapping:
1196 * 0b000: No pull-up
1197 * 0b001: 1200 Ohm
1198 * 0b010: 1800 Ohm
1199 * 0b011: 720 Ohm
1200 * 0b100: 2700 Ohm
1201 * 0b101: 831 Ohm
1202 * 0b110: 1080 Ohm
1203 * 0b111: 568 Ohm
1204 * This array maps pull-up strength in Ohms to register values (1+index).
1205 */
1206static const u16 capri_pullup_map[] = {1200, 1800, 720, 2700, 831, 1080, 568};
1207
1208/* Goes through the configs and update register val/mask */
1209static int capri_i2c_pin_update(struct pinctrl_dev *pctldev,
1210 unsigned pin,
1211 unsigned long *configs,
1212 unsigned num_configs,
1213 u32 *val,
1214 u32 *mask)
1215{
1216 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1217 int i, j;
1218 enum pin_config_param param;
1219 u16 arg;
1220
1221 for (i = 0; i < num_configs; i++) {
1222 param = pinconf_to_config_param(configs[i]);
1223 arg = pinconf_to_config_argument(configs[i]);
1224
1225 switch (param) {
1226 case PIN_CONFIG_BIAS_PULL_UP:
1227 for (j = 0; j < ARRAY_SIZE(capri_pullup_map); j++)
1228 if (capri_pullup_map[j] == arg)
1229 break;
1230
1231 if (j == ARRAY_SIZE(capri_pullup_map)) {
1232 dev_err(pctldev->dev,
1233 "Invalid pull-up value (%d) for pin %s "
1234 "(%d). Valid values are 568, 720, 831, "
1235 "1080, 1200, 1800, 2700 Ohms.\n",
1236 arg, pdata->pins[pin].name, pin);
1237 return -EINVAL;
1238 }
1239
1240 capri_pin_update(val, mask, j+1,
1241 CAPRI_PIN_SHIFT(I2C, PULL_UP_STR),
1242 CAPRI_PIN_MASK(I2C, PULL_UP_STR));
1243 break;
1244
1245 case PIN_CONFIG_BIAS_DISABLE:
1246 capri_pin_update(val, mask, 0,
1247 CAPRI_PIN_SHIFT(I2C, PULL_UP_STR),
1248 CAPRI_PIN_MASK(I2C, PULL_UP_STR));
1249 break;
1250
1251 case PIN_CONFIG_SLEW_RATE:
1252 arg = (arg >= 1 ? 1 : 0);
1253 capri_pin_update(val, mask, arg,
1254 CAPRI_PIN_SHIFT(I2C, SLEW),
1255 CAPRI_PIN_MASK(I2C, SLEW));
1256 break;
1257
1258 case PIN_CONFIG_INPUT_ENABLE:
1259 /* inversed since register is for input _disable_ */
1260 arg = (arg >= 1 ? 0 : 1);
1261 capri_pin_update(val, mask, arg,
1262 CAPRI_PIN_SHIFT(I2C, INPUT_DIS),
1263 CAPRI_PIN_MASK(I2C, INPUT_DIS));
1264 break;
1265
1266 default:
1267 dev_err(pctldev->dev,
1268 "Unrecognized pin config %d for pin %s (%d).\n",
1269 param, pdata->pins[pin].name, pin);
1270 return -EINVAL;
1271
1272 } /* switch config */
1273 } /* for each config */
1274
1275 return 0;
1276}
1277
1278/* Goes through the configs and update register val/mask */
1279static int capri_hdmi_pin_update(struct pinctrl_dev *pctldev,
1280 unsigned pin,
1281 unsigned long *configs,
1282 unsigned num_configs,
1283 u32 *val,
1284 u32 *mask)
1285{
1286 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1287 int i;
1288 enum pin_config_param param;
1289 u16 arg;
1290
1291 for (i = 0; i < num_configs; i++) {
1292 param = pinconf_to_config_param(configs[i]);
1293 arg = pinconf_to_config_argument(configs[i]);
1294
1295 switch (param) {
1296 case PIN_CONFIG_SLEW_RATE:
1297 arg = (arg >= 1 ? 1 : 0);
1298 capri_pin_update(val, mask, arg,
1299 CAPRI_PIN_SHIFT(HDMI, MODE),
1300 CAPRI_PIN_MASK(HDMI, MODE));
1301 break;
1302
1303 case PIN_CONFIG_INPUT_ENABLE:
1304 /* inversed since register is for input _disable_ */
1305 arg = (arg >= 1 ? 0 : 1);
1306 capri_pin_update(val, mask, arg,
1307 CAPRI_PIN_SHIFT(HDMI, INPUT_DIS),
1308 CAPRI_PIN_MASK(HDMI, INPUT_DIS));
1309 break;
1310
1311 default:
1312 dev_err(pctldev->dev,
1313 "Unrecognized pin config %d for pin %s (%d).\n",
1314 param, pdata->pins[pin].name, pin);
1315 return -EINVAL;
1316
1317 } /* switch config */
1318 } /* for each config */
1319
1320 return 0;
1321}
1322
1323static int capri_pinctrl_pin_config_set(struct pinctrl_dev *pctldev,
1324 unsigned pin,
1325 unsigned long *configs,
1326 unsigned num_configs)
1327{
1328 struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
1329 enum capri_pin_type pin_type;
1330 u32 offset = 4 * pin;
1331 u32 cfg_val, cfg_mask;
1332 int rc;
1333
1334 cfg_val = 0;
1335 cfg_mask = 0;
1336 pin_type = pin_type_get(pctldev, pin);
1337
1338 /* Different pins have different configuration options */
1339 switch (pin_type) {
1340 case CAPRI_PIN_TYPE_STD:
1341 rc = capri_std_pin_update(pctldev, pin, configs, num_configs,
1342 &cfg_val, &cfg_mask);
1343 break;
1344
1345 case CAPRI_PIN_TYPE_I2C:
1346 rc = capri_i2c_pin_update(pctldev, pin, configs, num_configs,
1347 &cfg_val, &cfg_mask);
1348 break;
1349
1350 case CAPRI_PIN_TYPE_HDMI:
1351 rc = capri_hdmi_pin_update(pctldev, pin, configs, num_configs,
1352 &cfg_val, &cfg_mask);
1353 break;
1354
1355 default:
1356 dev_err(pctldev->dev, "Unknown pin type for pin %s (%d).\n",
1357 pdata->pins[pin].name, pin);
1358 return -EINVAL;
1359
1360 } /* switch pin type */
1361
1362 if (rc)
1363 return rc;
1364
1365 dev_dbg(pctldev->dev,
1366 "%s(): Set pin %s (%d) with config 0x%x, mask 0x%x\n",
1367 __func__, pdata->pins[pin].name, pin, cfg_val, cfg_mask);
1368
1369 rc = regmap_update_bits(pdata->regmap, offset, cfg_mask, cfg_val);
1370 if (rc) {
1371 dev_err(pctldev->dev,
1372 "Error updating register for pin %s (%d).\n",
1373 pdata->pins[pin].name, pin);
1374 return rc;
1375 }
1376
1377 return 0;
1378}
1379
1380static struct pinconf_ops capri_pinctrl_pinconf_ops = {
1381 .pin_config_get = capri_pinctrl_pin_config_get,
1382 .pin_config_set = capri_pinctrl_pin_config_set,
1383};
1384
1385static struct pinctrl_desc capri_pinctrl_desc = {
1386 /* name, pins, npins members initialized in probe function */
1387 .pctlops = &capri_pinctrl_ops,
1388 .pmxops = &capri_pinctrl_pinmux_ops,
1389 .confops = &capri_pinctrl_pinconf_ops,
1390 .owner = THIS_MODULE,
1391};
1392
1393int __init capri_pinctrl_probe(struct platform_device *pdev)
1394{
1395 struct capri_pinctrl_data *pdata = &capri_pinctrl;
1396 struct resource *res;
1397 struct pinctrl_dev *pctl;
1398
1399 /* So far We can assume there is only 1 bank of registers */
1400 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1401 if (!res) {
1402 dev_err(&pdev->dev, "Missing MEM resource\n");
1403 return -ENODEV;
1404 }
1405
1406 pdata->reg_base = devm_ioremap_resource(&pdev->dev, res);
1407 if (IS_ERR(pdata->reg_base)) {
1408 dev_err(&pdev->dev, "Failed to ioremap MEM resource\n");
1409 return -ENODEV;
1410 }
1411
1412 /* Initialize the dynamic part of pinctrl_desc */
1413 pdata->regmap = devm_regmap_init_mmio(&pdev->dev, pdata->reg_base,
1414 &capri_pinctrl_regmap_config);
1415 if (IS_ERR(pdata->regmap)) {
1416 dev_err(&pdev->dev, "Regmap MMIO init failed.\n");
1417 return -ENODEV;
1418 }
1419
1420 capri_pinctrl_desc.name = dev_name(&pdev->dev);
1421 capri_pinctrl_desc.pins = capri_pinctrl.pins;
1422 capri_pinctrl_desc.npins = capri_pinctrl.npins;
1423
1424 pctl = pinctrl_register(&capri_pinctrl_desc,
1425 &pdev->dev,
1426 pdata);
1427 if (!pctl) {
1428 dev_err(&pdev->dev, "Failed to register pinctrl\n");
1429 return -ENODEV;
1430 }
1431
1432 platform_set_drvdata(pdev, pdata);
1433
1434 return 0;
1435}
1436
1437static struct of_device_id capri_pinctrl_of_match[] = {
1438 { .compatible = "brcm,bcm11351-pinctrl", },
1439 { },
1440};
1441
1442static struct platform_driver capri_pinctrl_driver = {
1443 .driver = {
1444 .name = "bcm-capri-pinctrl",
1445 .owner = THIS_MODULE,
1446 .of_match_table = capri_pinctrl_of_match,
1447 },
1448};
1449
1450module_platform_driver_probe(capri_pinctrl_driver, capri_pinctrl_probe);
1451
1452MODULE_AUTHOR("Sherman Yin <syin@broadcom.com>");
1453MODULE_DESCRIPTION("Broadcom Capri pinctrl driver");
1454MODULE_LICENSE("GPL v2");
diff --git a/drivers/pinctrl/pinctrl-msm.c b/drivers/pinctrl/pinctrl-msm.c
index 38d579b47f31..e43fbce56598 100644
--- a/drivers/pinctrl/pinctrl-msm.c
+++ b/drivers/pinctrl/pinctrl-msm.c
@@ -665,7 +665,10 @@ static void msm_gpio_irq_ack(struct irq_data *d)
665 spin_lock_irqsave(&pctrl->lock, flags); 665 spin_lock_irqsave(&pctrl->lock, flags);
666 666
667 val = readl(pctrl->regs + g->intr_status_reg); 667 val = readl(pctrl->regs + g->intr_status_reg);
668 val &= ~BIT(g->intr_status_bit); 668 if (g->intr_ack_high)
669 val |= BIT(g->intr_status_bit);
670 else
671 val &= ~BIT(g->intr_status_bit);
669 writel(val, pctrl->regs + g->intr_status_reg); 672 writel(val, pctrl->regs + g->intr_status_reg);
670 673
671 if (test_bit(d->hwirq, pctrl->dual_edge_irqs)) 674 if (test_bit(d->hwirq, pctrl->dual_edge_irqs))
@@ -744,6 +747,7 @@ static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int type)
744 break; 747 break;
745 case IRQ_TYPE_EDGE_BOTH: 748 case IRQ_TYPE_EDGE_BOTH:
746 val |= BIT(g->intr_detection_bit); 749 val |= BIT(g->intr_detection_bit);
750 val |= BIT(g->intr_polarity_bit);
747 break; 751 break;
748 case IRQ_TYPE_LEVEL_LOW: 752 case IRQ_TYPE_LEVEL_LOW:
749 break; 753 break;
diff --git a/drivers/pinctrl/pinctrl-msm.h b/drivers/pinctrl/pinctrl-msm.h
index 8fbe9fb19f36..6e26f1b676d7 100644
--- a/drivers/pinctrl/pinctrl-msm.h
+++ b/drivers/pinctrl/pinctrl-msm.h
@@ -84,6 +84,7 @@ struct msm_pingroup {
84 84
85 unsigned intr_enable_bit:5; 85 unsigned intr_enable_bit:5;
86 unsigned intr_status_bit:5; 86 unsigned intr_status_bit:5;
87 unsigned intr_ack_high:1;
87 88
88 unsigned intr_target_bit:5; 89 unsigned intr_target_bit:5;
89 unsigned intr_raw_status_bit:5; 90 unsigned intr_raw_status_bit:5;
diff --git a/drivers/pinctrl/pinctrl-nomadik.c b/drivers/pinctrl/pinctrl-nomadik.c
index 208341fd57d2..8f6f16ef73f3 100644
--- a/drivers/pinctrl/pinctrl-nomadik.c
+++ b/drivers/pinctrl/pinctrl-nomadik.c
@@ -877,7 +877,6 @@ static void nmk_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
877 struct nmk_gpio_chip *nmk_chip = container_of(chip, struct nmk_gpio_chip, chip); 877 struct nmk_gpio_chip *nmk_chip = container_of(chip, struct nmk_gpio_chip, chip);
878 u32 status; 878 u32 status;
879 879
880 pr_err("PLONK IRQ %d\n", irq);
881 clk_enable(nmk_chip->clk); 880 clk_enable(nmk_chip->clk);
882 status = readl(nmk_chip->addr + NMK_GPIO_IS); 881 status = readl(nmk_chip->addr + NMK_GPIO_IS);
883 clk_disable(nmk_chip->clk); 882 clk_disable(nmk_chip->clk);
diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index 46dddc159286..96c60d230c13 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -342,7 +342,7 @@ static const struct pinctrl_ops rockchip_pctrl_ops = {
342 * @pin: pin to change 342 * @pin: pin to change
343 * @mux: new mux function to set 343 * @mux: new mux function to set
344 */ 344 */
345static void rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux) 345static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
346{ 346{
347 struct rockchip_pinctrl *info = bank->drvdata; 347 struct rockchip_pinctrl *info = bank->drvdata;
348 void __iomem *reg = info->reg_base + info->ctrl->mux_offset; 348 void __iomem *reg = info->reg_base + info->ctrl->mux_offset;
@@ -350,6 +350,20 @@ static void rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
350 u8 bit; 350 u8 bit;
351 u32 data; 351 u32 data;
352 352
353 /*
354 * The first 16 pins of rk3188_bank0 are always gpios and do not have
355 * a mux register at all.
356 */
357 if (bank->bank_type == RK3188_BANK0 && pin < 16) {
358 if (mux != RK_FUNC_GPIO) {
359 dev_err(info->dev,
360 "pin %d only supports a gpio mux\n", pin);
361 return -ENOTSUPP;
362 } else {
363 return 0;
364 }
365 }
366
353 dev_dbg(info->dev, "setting mux of GPIO%d-%d to %d\n", 367 dev_dbg(info->dev, "setting mux of GPIO%d-%d to %d\n",
354 bank->bank_num, pin, mux); 368 bank->bank_num, pin, mux);
355 369
@@ -365,6 +379,8 @@ static void rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
365 writel(data, reg); 379 writel(data, reg);
366 380
367 spin_unlock_irqrestore(&bank->slock, flags); 381 spin_unlock_irqrestore(&bank->slock, flags);
382
383 return 0;
368} 384}
369 385
370#define RK2928_PULL_OFFSET 0x118 386#define RK2928_PULL_OFFSET 0x118
@@ -560,7 +576,7 @@ static int rockchip_pmx_enable(struct pinctrl_dev *pctldev, unsigned selector,
560 const unsigned int *pins = info->groups[group].pins; 576 const unsigned int *pins = info->groups[group].pins;
561 const struct rockchip_pin_config *data = info->groups[group].data; 577 const struct rockchip_pin_config *data = info->groups[group].data;
562 struct rockchip_pin_bank *bank; 578 struct rockchip_pin_bank *bank;
563 int cnt; 579 int cnt, ret = 0;
564 580
565 dev_dbg(info->dev, "enable function %s group %s\n", 581 dev_dbg(info->dev, "enable function %s group %s\n",
566 info->functions[selector].name, info->groups[group].name); 582 info->functions[selector].name, info->groups[group].name);
@@ -571,8 +587,18 @@ static int rockchip_pmx_enable(struct pinctrl_dev *pctldev, unsigned selector,
571 */ 587 */
572 for (cnt = 0; cnt < info->groups[group].npins; cnt++) { 588 for (cnt = 0; cnt < info->groups[group].npins; cnt++) {
573 bank = pin_to_bank(info, pins[cnt]); 589 bank = pin_to_bank(info, pins[cnt]);
574 rockchip_set_mux(bank, pins[cnt] - bank->pin_base, 590 ret = rockchip_set_mux(bank, pins[cnt] - bank->pin_base,
575 data[cnt].func); 591 data[cnt].func);
592 if (ret)
593 break;
594 }
595
596 if (ret) {
597 /* revert the already done pin settings */
598 for (cnt--; cnt >= 0; cnt--)
599 rockchip_set_mux(bank, pins[cnt] - bank->pin_base, 0);
600
601 return ret;
576 } 602 }
577 603
578 return 0; 604 return 0;
@@ -607,7 +633,7 @@ static int rockchip_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
607 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev); 633 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
608 struct rockchip_pin_bank *bank; 634 struct rockchip_pin_bank *bank;
609 struct gpio_chip *chip; 635 struct gpio_chip *chip;
610 int pin; 636 int pin, ret;
611 u32 data; 637 u32 data;
612 638
613 chip = range->gc; 639 chip = range->gc;
@@ -617,7 +643,9 @@ static int rockchip_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
617 dev_dbg(info->dev, "gpio_direction for pin %u as %s-%d to %s\n", 643 dev_dbg(info->dev, "gpio_direction for pin %u as %s-%d to %s\n",
618 offset, range->name, pin, input ? "input" : "output"); 644 offset, range->name, pin, input ? "input" : "output");
619 645
620 rockchip_set_mux(bank, pin, RK_FUNC_GPIO); 646 ret = rockchip_set_mux(bank, pin, RK_FUNC_GPIO);
647 if (ret < 0)
648 return ret;
621 649
622 data = readl_relaxed(bank->reg_base + GPIO_SWPORT_DDR); 650 data = readl_relaxed(bank->reg_base + GPIO_SWPORT_DDR);
623 /* set bit to 1 for output, 0 for input */ 651 /* set bit to 1 for output, 0 for input */
@@ -1144,9 +1172,13 @@ static int rockchip_irq_set_type(struct irq_data *d, unsigned int type)
1144 u32 polarity; 1172 u32 polarity;
1145 u32 level; 1173 u32 level;
1146 u32 data; 1174 u32 data;
1175 int ret;
1147 1176
1148 /* make sure the pin is configured as gpio input */ 1177 /* make sure the pin is configured as gpio input */
1149 rockchip_set_mux(bank, d->hwirq, RK_FUNC_GPIO); 1178 ret = rockchip_set_mux(bank, d->hwirq, RK_FUNC_GPIO);
1179 if (ret < 0)
1180 return ret;
1181
1150 data = readl_relaxed(bank->reg_base + GPIO_SWPORT_DDR); 1182 data = readl_relaxed(bank->reg_base + GPIO_SWPORT_DDR);
1151 data &= ~mask; 1183 data &= ~mask;
1152 writel_relaxed(data, bank->reg_base + GPIO_SWPORT_DDR); 1184 writel_relaxed(data, bank->reg_base + GPIO_SWPORT_DDR);
@@ -1534,7 +1566,7 @@ static struct rockchip_pin_ctrl rk3188_pin_ctrl = {
1534 .nr_banks = ARRAY_SIZE(rk3188_pin_banks), 1566 .nr_banks = ARRAY_SIZE(rk3188_pin_banks),
1535 .label = "RK3188-GPIO", 1567 .label = "RK3188-GPIO",
1536 .type = RK3188, 1568 .type = RK3188,
1537 .mux_offset = 0x68, 1569 .mux_offset = 0x60,
1538 .pull_calc_reg = rk3188_calc_pull_reg_and_bit, 1570 .pull_calc_reg = rk3188_calc_pull_reg_and_bit,
1539}; 1571};
1540 1572
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c
index 1990285296c6..c316051d9bda 100644
--- a/drivers/s390/char/sclp.c
+++ b/drivers/s390/char/sclp.c
@@ -1252,7 +1252,7 @@ static __init int sclp_initcall(void)
1252 return rc; 1252 return rc;
1253 1253
1254 sclp_pdev = platform_device_register_simple("sclp", -1, NULL, 0); 1254 sclp_pdev = platform_device_register_simple("sclp", -1, NULL, 0);
1255 rc = PTR_RET(sclp_pdev); 1255 rc = PTR_ERR_OR_ZERO(sclp_pdev);
1256 if (rc) 1256 if (rc)
1257 goto fail_platform_driver_unregister; 1257 goto fail_platform_driver_unregister;
1258 1258
diff --git a/drivers/s390/char/sclp_cmd.c b/drivers/s390/char/sclp_cmd.c
index 6e8f90f84e49..6e14999f9e8f 100644
--- a/drivers/s390/char/sclp_cmd.c
+++ b/drivers/s390/char/sclp_cmd.c
@@ -515,7 +515,7 @@ static int __init sclp_detect_standby_memory(void)
515 if (rc) 515 if (rc)
516 goto out; 516 goto out;
517 sclp_pdev = platform_device_register_simple("sclp_mem", -1, NULL, 0); 517 sclp_pdev = platform_device_register_simple("sclp_mem", -1, NULL, 0);
518 rc = PTR_RET(sclp_pdev); 518 rc = PTR_ERR_OR_ZERO(sclp_pdev);
519 if (rc) 519 if (rc)
520 goto out_driver; 520 goto out_driver;
521 sclp_add_standby_memory(); 521 sclp_add_standby_memory();
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c
index 4eed38cd0af6..cd9c91909596 100644
--- a/drivers/s390/char/sclp_vt220.c
+++ b/drivers/s390/char/sclp_vt220.c
@@ -97,13 +97,16 @@ static void sclp_vt220_pm_event_fn(struct sclp_register *reg,
97static int __sclp_vt220_emit(struct sclp_vt220_request *request); 97static int __sclp_vt220_emit(struct sclp_vt220_request *request);
98static void sclp_vt220_emit_current(void); 98static void sclp_vt220_emit_current(void);
99 99
100/* Registration structure for our interest in SCLP event buffers */ 100/* Registration structure for SCLP output event buffers */
101static struct sclp_register sclp_vt220_register = { 101static struct sclp_register sclp_vt220_register = {
102 .send_mask = EVTYP_VT220MSG_MASK, 102 .send_mask = EVTYP_VT220MSG_MASK,
103 .pm_event_fn = sclp_vt220_pm_event_fn,
104};
105
106/* Registration structure for SCLP input event buffers */
107static struct sclp_register sclp_vt220_register_input = {
103 .receive_mask = EVTYP_VT220MSG_MASK, 108 .receive_mask = EVTYP_VT220MSG_MASK,
104 .state_change_fn = NULL,
105 .receiver_fn = sclp_vt220_receiver_fn, 109 .receiver_fn = sclp_vt220_receiver_fn,
106 .pm_event_fn = sclp_vt220_pm_event_fn,
107}; 110};
108 111
109 112
@@ -715,9 +718,14 @@ static int __init sclp_vt220_tty_init(void)
715 rc = tty_register_driver(driver); 718 rc = tty_register_driver(driver);
716 if (rc) 719 if (rc)
717 goto out_init; 720 goto out_init;
721 rc = sclp_register(&sclp_vt220_register_input);
722 if (rc)
723 goto out_reg;
718 sclp_vt220_driver = driver; 724 sclp_vt220_driver = driver;
719 return 0; 725 return 0;
720 726
727out_reg:
728 tty_unregister_driver(driver);
721out_init: 729out_init:
722 __sclp_vt220_cleanup(); 730 __sclp_vt220_cleanup();
723out_driver: 731out_driver:
diff --git a/drivers/staging/xgifb/vb_def.h b/drivers/staging/xgifb/vb_def.h
index 5c739bebd8a5..949f0e5eed8d 100644
--- a/drivers/staging/xgifb/vb_def.h
+++ b/drivers/staging/xgifb/vb_def.h
@@ -1,6 +1,6 @@
1#ifndef _VB_DEF_ 1#ifndef _VB_DEF_
2#define _VB_DEF_ 2#define _VB_DEF_
3#include "../../video/sis/initdef.h" 3#include "../../video/fbdev/sis/initdef.h"
4 4
5#define VB_XGI301C 0x0020 /* for 301C */ 5#define VB_XGI301C 0x0020 /* for 301C */
6 6
diff --git a/drivers/staging/xgifb/vb_struct.h b/drivers/staging/xgifb/vb_struct.h
index c08ff5b2d6ee..0d27594554ca 100644
--- a/drivers/staging/xgifb/vb_struct.h
+++ b/drivers/staging/xgifb/vb_struct.h
@@ -1,6 +1,6 @@
1#ifndef _VB_STRUCT_ 1#ifndef _VB_STRUCT_
2#define _VB_STRUCT_ 2#define _VB_STRUCT_
3#include "../../video/sis/vstruct.h" 3#include "../../video/fbdev/sis/vstruct.h"
4 4
5struct XGI_LVDSCRT1HDataStruct { 5struct XGI_LVDSCRT1HDataStruct {
6 unsigned char Reg[8]; 6 unsigned char Reg[8];
diff --git a/drivers/staging/xgifb/vgatypes.h b/drivers/staging/xgifb/vgatypes.h
index ddf7776c295b..264351441f99 100644
--- a/drivers/staging/xgifb/vgatypes.h
+++ b/drivers/staging/xgifb/vgatypes.h
@@ -2,8 +2,8 @@
2#define _VGATYPES_ 2#define _VGATYPES_
3 3
4#include <linux/fb.h> /* for struct fb_var_screeninfo for sis.h */ 4#include <linux/fb.h> /* for struct fb_var_screeninfo for sis.h */
5#include "../../video/sis/vgatypes.h" 5#include "../../video/fbdev/sis/vgatypes.h"
6#include "../../video/sis/sis.h" /* for LCD_TYPE */ 6#include "../../video/fbdev/sis/sis.h" /* for LCD_TYPE */
7 7
8#ifndef XGI_VB_CHIP_TYPE 8#ifndef XGI_VB_CHIP_TYPE
9enum XGI_VB_CHIP_TYPE { 9enum XGI_VB_CHIP_TYPE {
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 6c793bc683d9..c7b4f0f927b1 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -21,7 +21,15 @@ source "drivers/gpu/vga/Kconfig"
21 21
22source "drivers/gpu/host1x/Kconfig" 22source "drivers/gpu/host1x/Kconfig"
23 23
24menu "Direct Rendering Manager"
24source "drivers/gpu/drm/Kconfig" 25source "drivers/gpu/drm/Kconfig"
26endmenu
27
28menu "Frame buffer Devices"
29source "drivers/video/fbdev/Kconfig"
30endmenu
31
32source "drivers/video/backlight/Kconfig"
25 33
26config VGASTATE 34config VGASTATE
27 tristate 35 tristate
@@ -33,2482 +41,14 @@ config VIDEOMODE_HELPERS
33config HDMI 41config HDMI
34 bool 42 bool
35 43
36menuconfig FB
37 tristate "Support for frame buffer devices"
38 ---help---
39 The frame buffer device provides an abstraction for the graphics
40 hardware. It represents the frame buffer of some video hardware and
41 allows application software to access the graphics hardware through
42 a well-defined interface, so the software doesn't need to know
43 anything about the low-level (hardware register) stuff.
44
45 Frame buffer devices work identically across the different
46 architectures supported by Linux and make the implementation of
47 application programs easier and more portable; at this point, an X
48 server exists which uses the frame buffer device exclusively.
49 On several non-X86 architectures, the frame buffer device is the
50 only way to use the graphics hardware.
51
52 The device is accessed through special device nodes, usually located
53 in the /dev directory, i.e. /dev/fb*.
54
55 You need an utility program called fbset to make full use of frame
56 buffer devices. Please read <file:Documentation/fb/framebuffer.txt>
57 and the Framebuffer-HOWTO at
58 <http://www.munted.org.uk/programming/Framebuffer-HOWTO-1.3.html> for more
59 information.
60
61 Say Y here and to the driver for your graphics board below if you
62 are compiling a kernel for a non-x86 architecture.
63
64 If you are compiling for the x86 architecture, you can say Y if you
65 want to play with it, but it is not essential. Please note that
66 running graphical applications that directly touch the hardware
67 (e.g. an accelerated X server) and that are not frame buffer
68 device-aware may cause unexpected results. If unsure, say N.
69
70config FIRMWARE_EDID
71 bool "Enable firmware EDID"
72 depends on FB
73 default n
74 ---help---
75 This enables access to the EDID transferred from the firmware.
76 On the i386, this is from the Video BIOS. Enable this if DDC/I2C
77 transfers do not work for your driver and if you are using
78 nvidiafb, i810fb or savagefb.
79
80 In general, choosing Y for this option is safe. If you
81 experience extremely long delays while booting before you get
82 something on your display, try setting this to N. Matrox cards in
83 combination with certain motherboards and monitors are known to
84 suffer from this problem.
85
86config FB_DDC
87 tristate
88 depends on FB
89 select I2C_ALGOBIT
90 select I2C
91 default n
92
93config FB_BOOT_VESA_SUPPORT
94 bool
95 depends on FB
96 default n
97 ---help---
98 If true, at least one selected framebuffer driver can take advantage
99 of VESA video modes set at an early boot stage via the vga= parameter.
100
101config FB_CFB_FILLRECT
102 tristate
103 depends on FB
104 default n
105 ---help---
106 Include the cfb_fillrect function for generic software rectangle
107 filling. This is used by drivers that don't provide their own
108 (accelerated) version.
109
110config FB_CFB_COPYAREA
111 tristate
112 depends on FB
113 default n
114 ---help---
115 Include the cfb_copyarea function for generic software area copying.
116 This is used by drivers that don't provide their own (accelerated)
117 version.
118
119config FB_CFB_IMAGEBLIT
120 tristate
121 depends on FB
122 default n
123 ---help---
124 Include the cfb_imageblit function for generic software image
125 blitting. This is used by drivers that don't provide their own
126 (accelerated) version.
127
128config FB_CFB_REV_PIXELS_IN_BYTE
129 bool
130 depends on FB
131 default n
132 ---help---
133 Allow generic frame-buffer functions to work on displays with 1, 2
134 and 4 bits per pixel depths which has opposite order of pixels in
135 byte order to bytes in long order.
136
137config FB_SYS_FILLRECT
138 tristate
139 depends on FB
140 default n
141 ---help---
142 Include the sys_fillrect function for generic software rectangle
143 filling. This is used by drivers that don't provide their own
144 (accelerated) version and the framebuffer is in system RAM.
145
146config FB_SYS_COPYAREA
147 tristate
148 depends on FB
149 default n
150 ---help---
151 Include the sys_copyarea function for generic software area copying.
152 This is used by drivers that don't provide their own (accelerated)
153 version and the framebuffer is in system RAM.
154
155config FB_SYS_IMAGEBLIT
156 tristate
157 depends on FB
158 default n
159 ---help---
160 Include the sys_imageblit function for generic software image
161 blitting. This is used by drivers that don't provide their own
162 (accelerated) version and the framebuffer is in system RAM.
163
164menuconfig FB_FOREIGN_ENDIAN
165 bool "Framebuffer foreign endianness support"
166 depends on FB
167 ---help---
168 This menu will let you enable support for the framebuffers with
169 non-native endianness (e.g. Little-Endian framebuffer on a
170 Big-Endian machine). Most probably you don't have such hardware,
171 so it's safe to say "n" here.
172
173choice
174 prompt "Choice endianness support"
175 depends on FB_FOREIGN_ENDIAN
176
177config FB_BOTH_ENDIAN
178 bool "Support for Big- and Little-Endian framebuffers"
179
180config FB_BIG_ENDIAN
181 bool "Support for Big-Endian framebuffers only"
182
183config FB_LITTLE_ENDIAN
184 bool "Support for Little-Endian framebuffers only"
185
186endchoice
187
188config FB_SYS_FOPS
189 tristate
190 depends on FB
191 default n
192
193config FB_DEFERRED_IO
194 bool
195 depends on FB
196
197config FB_HECUBA
198 tristate
199 depends on FB
200 depends on FB_DEFERRED_IO
201
202config FB_SVGALIB
203 tristate
204 depends on FB
205 default n
206 ---help---
207 Common utility functions useful to fbdev drivers of VGA-based
208 cards.
209
210config FB_MACMODES
211 tristate
212 depends on FB
213 default n
214
215config FB_BACKLIGHT
216 bool
217 depends on FB
218 select BACKLIGHT_LCD_SUPPORT
219 select BACKLIGHT_CLASS_DEVICE
220 default n
221
222config FB_MODE_HELPERS
223 bool "Enable Video Mode Handling Helpers"
224 depends on FB
225 default n
226 ---help---
227 This enables functions for handling video modes using the
228 Generalized Timing Formula and the EDID parser. A few drivers rely
229 on this feature such as the radeonfb, rivafb, and the i810fb. If
230 your driver does not take advantage of this feature, choosing Y will
231 just increase the kernel size by about 5K.
232
233config FB_TILEBLITTING
234 bool "Enable Tile Blitting Support"
235 depends on FB
236 default n
237 ---help---
238 This enables tile blitting. Tile blitting is a drawing technique
239 where the screen is divided into rectangular sections (tiles), whereas
240 the standard blitting divides the screen into pixels. Because the
241 default drawing element is a tile, drawing functions will be passed
242 parameters in terms of number of tiles instead of number of pixels.
243 For example, to draw a single character, instead of using bitmaps,
244 an index to an array of bitmaps will be used. To clear or move a
245 rectangular section of a screen, the rectangle will be described in
246 terms of number of tiles in the x- and y-axis.
247
248 This is particularly important to one driver, matroxfb. If
249 unsure, say N.
250
251comment "Frame buffer hardware drivers"
252 depends on FB
253
254config FB_GRVGA
255 tristate "Aeroflex Gaisler framebuffer support"
256 depends on FB && SPARC
257 select FB_CFB_FILLRECT
258 select FB_CFB_COPYAREA
259 select FB_CFB_IMAGEBLIT
260 ---help---
261 This enables support for the SVGACTRL framebuffer in the GRLIB IP library from Aeroflex Gaisler.
262
263config FB_CIRRUS
264 tristate "Cirrus Logic support"
265 depends on FB && (ZORRO || PCI)
266 select FB_CFB_FILLRECT
267 select FB_CFB_COPYAREA
268 select FB_CFB_IMAGEBLIT
269 ---help---
270 This enables support for Cirrus Logic GD542x/543x based boards on
271 Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum.
272
273 If you have a PCI-based system, this enables support for these
274 chips: GD-543x, GD-544x, GD-5480.
275
276 Please read the file <file:Documentation/fb/cirrusfb.txt>.
277
278 Say N unless you have such a graphics board or plan to get one
279 before you next recompile the kernel.
280
281config FB_PM2
282 tristate "Permedia2 support"
283 depends on FB && ((AMIGA && BROKEN) || PCI)
284 select FB_CFB_FILLRECT
285 select FB_CFB_COPYAREA
286 select FB_CFB_IMAGEBLIT
287 help
288 This is the frame buffer device driver for cards based on
289 the 3D Labs Permedia, Permedia 2 and Permedia 2V chips.
290 The driver was tested on the following cards:
291 Diamond FireGL 1000 PRO AGP
292 ELSA Gloria Synergy PCI
293 Appian Jeronimo PRO (both heads) PCI
294 3DLabs Oxygen ACX aka EONtronics Picasso P2 PCI
295 Techsource Raptor GFX-8P (aka Sun PGX-32) on SPARC
296 ASK Graphic Blaster Exxtreme AGP
297
298 To compile this driver as a module, choose M here: the
299 module will be called pm2fb.
300
301config FB_PM2_FIFO_DISCONNECT
302 bool "enable FIFO disconnect feature"
303 depends on FB_PM2 && PCI
304 help
305 Support the Permedia2 FIFO disconnect feature.
306
307config FB_ARMCLCD
308 tristate "ARM PrimeCell PL110 support"
309 depends on ARM || ARM64 || COMPILE_TEST
310 depends on FB && ARM_AMBA
311 select FB_CFB_FILLRECT
312 select FB_CFB_COPYAREA
313 select FB_CFB_IMAGEBLIT
314 help
315 This framebuffer device driver is for the ARM PrimeCell PL110
316 Colour LCD controller. ARM PrimeCells provide the building
317 blocks for System on a Chip devices.
318
319 If you want to compile this as a module (=code which can be
320 inserted into and removed from the running kernel), say M
321 here and read <file:Documentation/kbuild/modules.txt>. The module
322 will be called amba-clcd.
323
324config FB_ACORN
325 bool "Acorn VIDC support"
326 depends on (FB = y) && ARM && ARCH_ACORN
327 select FB_CFB_FILLRECT
328 select FB_CFB_COPYAREA
329 select FB_CFB_IMAGEBLIT
330 help
331 This is the frame buffer device driver for the Acorn VIDC graphics
332 hardware found in Acorn RISC PCs and other ARM-based machines. If
333 unsure, say N.
334
335config FB_CLPS711X
336 bool "CLPS711X LCD support"
337 depends on (FB = y) && ARM && ARCH_CLPS711X
338 select FB_CFB_FILLRECT
339 select FB_CFB_COPYAREA
340 select FB_CFB_IMAGEBLIT
341 help
342 Say Y to enable the Framebuffer driver for the CLPS7111 and
343 EP7212 processors.
344
345config FB_SA1100
346 bool "SA-1100 LCD support"
347 depends on (FB = y) && ARM && ARCH_SA1100
348 select FB_CFB_FILLRECT
349 select FB_CFB_COPYAREA
350 select FB_CFB_IMAGEBLIT
351 help
352 This is a framebuffer device for the SA-1100 LCD Controller.
353 See <http://www.linux-fbdev.org/> for information on framebuffer
354 devices.
355
356 If you plan to use the LCD display with your SA-1100 system, say
357 Y here.
358
359config FB_IMX
360 tristate "Freescale i.MX1/21/25/27 LCD support"
361 depends on FB && ARCH_MXC
362 select FB_CFB_FILLRECT
363 select FB_CFB_COPYAREA
364 select FB_CFB_IMAGEBLIT
365 select FB_MODE_HELPERS
366 select VIDEOMODE_HELPERS
367
368config FB_CYBER2000
369 tristate "CyberPro 2000/2010/5000 support"
370 depends on FB && PCI && (BROKEN || !SPARC64)
371 select FB_CFB_FILLRECT
372 select FB_CFB_COPYAREA
373 select FB_CFB_IMAGEBLIT
374 help
375 This enables support for the Integraphics CyberPro 20x0 and 5000
376 VGA chips used in the Rebel.com Netwinder and other machines.
377 Say Y if you have a NetWinder or a graphics card containing this
378 device, otherwise say N.
379
380config FB_CYBER2000_DDC
381 bool "DDC for CyberPro support"
382 depends on FB_CYBER2000
383 select FB_DDC
384 default y
385 help
386 Say Y here if you want DDC support for your CyberPro graphics
387 card. This is only I2C bus support, driver does not use EDID.
388
389config FB_CYBER2000_I2C
390 bool "CyberPro 2000/2010/5000 I2C support"
391 depends on FB_CYBER2000 && I2C && ARCH_NETWINDER
392 select I2C_ALGOBIT
393 help
394 Enable support for the I2C video decoder interface on the
395 Integraphics CyberPro 20x0 and 5000 VGA chips. This is used
396 on the Netwinder machines for the SAA7111 video capture.
397
398config FB_APOLLO
399 bool
400 depends on (FB = y) && APOLLO
401 default y
402 select FB_CFB_FILLRECT
403 select FB_CFB_IMAGEBLIT
404
405config FB_Q40
406 bool
407 depends on (FB = y) && Q40
408 default y
409 select FB_CFB_FILLRECT
410 select FB_CFB_COPYAREA
411 select FB_CFB_IMAGEBLIT
412
413config FB_AMIGA
414 tristate "Amiga native chipset support"
415 depends on FB && AMIGA
416 help
417 This is the frame buffer device driver for the builtin graphics
418 chipset found in Amigas.
419
420 To compile this driver as a module, choose M here: the
421 module will be called amifb.
422
423config FB_AMIGA_OCS
424 bool "Amiga OCS chipset support"
425 depends on FB_AMIGA
426 help
427 This enables support for the original Agnus and Denise video chips,
428 found in the Amiga 1000 and most A500's and A2000's. If you intend
429 to run Linux on any of these systems, say Y; otherwise say N.
430
431config FB_AMIGA_ECS
432 bool "Amiga ECS chipset support"
433 depends on FB_AMIGA
434 help
435 This enables support for the Enhanced Chip Set, found in later
436 A500's, later A2000's, the A600, the A3000, the A3000T and CDTV. If
437 you intend to run Linux on any of these systems, say Y; otherwise
438 say N.
439
440config FB_AMIGA_AGA
441 bool "Amiga AGA chipset support"
442 depends on FB_AMIGA
443 help
444 This enables support for the Advanced Graphics Architecture (also
445 known as the AGA or AA) Chip Set, found in the A1200, A4000, A4000T
446 and CD32. If you intend to run Linux on any of these systems, say Y;
447 otherwise say N.
448
449config FB_FM2
450 bool "Amiga FrameMaster II/Rainbow II support"
451 depends on (FB = y) && ZORRO
452 select FB_CFB_FILLRECT
453 select FB_CFB_COPYAREA
454 select FB_CFB_IMAGEBLIT
455 help
456 This is the frame buffer device driver for the Amiga FrameMaster
457 card from BSC (exhibited 1992 but not shipped as a CBM product).
458
459config FB_ARC
460 tristate "Arc Monochrome LCD board support"
461 depends on FB && X86
462 select FB_SYS_FILLRECT
463 select FB_SYS_COPYAREA
464 select FB_SYS_IMAGEBLIT
465 select FB_SYS_FOPS
466 help
467 This enables support for the Arc Monochrome LCD board. The board
468 is based on the KS-108 lcd controller and is typically a matrix
469 of 2*n chips. This driver was tested with a 128x64 panel. This
470 driver supports it for use with x86 SBCs through a 16 bit GPIO
471 interface (8 bit data, 8 bit control). If you anticipate using
472 this driver, say Y or M; otherwise say N. You must specify the
473 GPIO IO address to be used for setting control and data.
474
475config FB_ATARI
476 bool "Atari native chipset support"
477 depends on (FB = y) && ATARI
478 select FB_CFB_FILLRECT
479 select FB_CFB_COPYAREA
480 select FB_CFB_IMAGEBLIT
481 help
482 This is the frame buffer device driver for the builtin graphics
483 chipset found in Ataris.
484
485config FB_OF
486 bool "Open Firmware frame buffer device support"
487 depends on (FB = y) && (PPC64 || PPC_OF) && (!PPC_PSERIES || PCI)
488 select FB_CFB_FILLRECT
489 select FB_CFB_COPYAREA
490 select FB_CFB_IMAGEBLIT
491 select FB_MACMODES
492 help
493 Say Y if you want support with Open Firmware for your graphics
494 board.
495
496config FB_CONTROL
497 bool "Apple \"control\" display support"
498 depends on (FB = y) && PPC_PMAC && PPC32
499 select FB_CFB_FILLRECT
500 select FB_CFB_COPYAREA
501 select FB_CFB_IMAGEBLIT
502 select FB_MACMODES
503 help
504 This driver supports a frame buffer for the graphics adapter in the
505 Power Macintosh 7300 and others.
506
507config FB_PLATINUM
508 bool "Apple \"platinum\" display support"
509 depends on (FB = y) && PPC_PMAC && PPC32
510 select FB_CFB_FILLRECT
511 select FB_CFB_COPYAREA
512 select FB_CFB_IMAGEBLIT
513 select FB_MACMODES
514 help
515 This driver supports a frame buffer for the "platinum" graphics
516 adapter in some Power Macintoshes.
517
518config FB_VALKYRIE
519 bool "Apple \"valkyrie\" display support"
520 depends on (FB = y) && (MAC || (PPC_PMAC && PPC32))
521 select FB_CFB_FILLRECT
522 select FB_CFB_COPYAREA
523 select FB_CFB_IMAGEBLIT
524 select FB_MACMODES
525 help
526 This driver supports a frame buffer for the "valkyrie" graphics
527 adapter in some Power Macintoshes.
528
529config FB_CT65550
530 bool "Chips 65550 display support"
531 depends on (FB = y) && PPC32 && PCI
532 select FB_CFB_FILLRECT
533 select FB_CFB_COPYAREA
534 select FB_CFB_IMAGEBLIT
535 help
536 This is the frame buffer device driver for the Chips & Technologies
537 65550 graphics chip in PowerBooks.
538
539config FB_ASILIANT
540 bool "Asiliant (Chips) 69000 display support"
541 depends on (FB = y) && PCI
542 select FB_CFB_FILLRECT
543 select FB_CFB_COPYAREA
544 select FB_CFB_IMAGEBLIT
545 help
546 This is the frame buffer device driver for the Asiliant 69030 chipset
547
548config FB_IMSTT
549 bool "IMS Twin Turbo display support"
550 depends on (FB = y) && PCI
551 select FB_CFB_IMAGEBLIT
552 select FB_MACMODES if PPC
553 help
554 The IMS Twin Turbo is a PCI-based frame buffer card bundled with
555 many Macintosh and compatible computers.
556
557config FB_VGA16
558 tristate "VGA 16-color graphics support"
559 depends on FB && (X86 || PPC)
560 select FB_CFB_FILLRECT
561 select FB_CFB_COPYAREA
562 select FB_CFB_IMAGEBLIT
563 select VGASTATE
564 select FONT_8x16 if FRAMEBUFFER_CONSOLE
565 help
566 This is the frame buffer device driver for VGA 16 color graphic
567 cards. Say Y if you have such a card.
568
569 To compile this driver as a module, choose M here: the
570 module will be called vga16fb.
571
572config FB_BF54X_LQ043
573 tristate "SHARP LQ043 TFT LCD (BF548 EZKIT)"
574 depends on FB && (BF54x) && !BF542
575 select FB_CFB_FILLRECT
576 select FB_CFB_COPYAREA
577 select FB_CFB_IMAGEBLIT
578 help
579 This is the framebuffer device driver for a SHARP LQ043T1DG01 TFT LCD
580
581config FB_BFIN_T350MCQB
582 tristate "Varitronix COG-T350MCQB TFT LCD display (BF527 EZKIT)"
583 depends on FB && BLACKFIN
584 select BFIN_GPTIMERS
585 select FB_CFB_FILLRECT
586 select FB_CFB_COPYAREA
587 select FB_CFB_IMAGEBLIT
588 help
589 This is the framebuffer device driver for a Varitronix VL-PS-COG-T350MCQB-01 display TFT LCD
590 This display is a QVGA 320x240 24-bit RGB display interfaced by an 8-bit wide PPI
591 It uses PPI[0..7] PPI_FS1, PPI_FS2 and PPI_CLK.
592
593config FB_BFIN_LQ035Q1
594 tristate "SHARP LQ035Q1DH02 TFT LCD"
595 depends on FB && BLACKFIN && SPI
596 select FB_CFB_FILLRECT
597 select FB_CFB_COPYAREA
598 select FB_CFB_IMAGEBLIT
599 select BFIN_GPTIMERS
600 help
601 This is the framebuffer device driver for a SHARP LQ035Q1DH02 TFT display found on
602 the Blackfin Landscape LCD EZ-Extender Card.
603 This display is a QVGA 320x240 18-bit RGB display interfaced by an 16-bit wide PPI
604 It uses PPI[0..15] PPI_FS1, PPI_FS2 and PPI_CLK.
605
606 To compile this driver as a module, choose M here: the
607 module will be called bfin-lq035q1-fb.
608
609config FB_BF537_LQ035
610 tristate "SHARP LQ035 TFT LCD (BF537 STAMP)"
611 depends on FB && (BF534 || BF536 || BF537) && I2C_BLACKFIN_TWI
612 select FB_CFB_FILLRECT
613 select FB_CFB_COPYAREA
614 select FB_CFB_IMAGEBLIT
615 select BFIN_GPTIMERS
616 help
617 This is the framebuffer device for a SHARP LQ035Q7DB03 TFT LCD
618 attached to a BF537.
619
620 To compile this driver as a module, choose M here: the
621 module will be called bf537-lq035.
622
623config FB_BFIN_7393
624 tristate "Blackfin ADV7393 Video encoder"
625 depends on FB && BLACKFIN
626 select I2C
627 select FB_CFB_FILLRECT
628 select FB_CFB_COPYAREA
629 select FB_CFB_IMAGEBLIT
630 help
631 This is the framebuffer device for a ADV7393 video encoder
632 attached to a Blackfin on the PPI port.
633 If your Blackfin board has a ADV7393 select Y.
634
635 To compile this driver as a module, choose M here: the
636 module will be called bfin_adv7393fb.
637
638choice
639 prompt "Video mode support"
640 depends on FB_BFIN_7393
641 default NTSC
642
643config NTSC
644 bool 'NTSC 720x480'
645
646config PAL
647 bool 'PAL 720x576'
648
649config NTSC_640x480
650 bool 'NTSC 640x480 (Experimental)'
651
652config PAL_640x480
653 bool 'PAL 640x480 (Experimental)'
654
655config NTSC_YCBCR
656 bool 'NTSC 720x480 YCbCR input'
657
658config PAL_YCBCR
659 bool 'PAL 720x576 YCbCR input'
660
661endchoice
662
663choice
664 prompt "Size of ADV7393 frame buffer memory Single/Double Size"
665 depends on (FB_BFIN_7393)
666 default ADV7393_1XMEM
667
668config ADV7393_1XMEM
669 bool 'Single'
670
671config ADV7393_2XMEM
672 bool 'Double'
673endchoice
674
675config FB_STI
676 tristate "HP STI frame buffer device support"
677 depends on FB && PARISC
678 select FB_CFB_FILLRECT
679 select FB_CFB_COPYAREA
680 select FB_CFB_IMAGEBLIT
681 select STI_CONSOLE
682 select VT
683 default y
684 ---help---
685 STI refers to the HP "Standard Text Interface" which is a set of
686 BIOS routines contained in a ROM chip in HP PA-RISC based machines.
687 Enabling this option will implement the linux framebuffer device
688 using calls to the STI BIOS routines for initialisation.
689
690 If you enable this option, you will get a planar framebuffer device
691 /dev/fb which will work on the most common HP graphic cards of the
692 NGLE family, including the artist chips (in the 7xx and Bxxx series),
693 HCRX, HCRX24, CRX, CRX24 and VisEG series.
694
695 It is safe to enable this option, so you should probably say "Y".
696
697config FB_MAC
698 bool "Generic Macintosh display support"
699 depends on (FB = y) && MAC
700 select FB_CFB_FILLRECT
701 select FB_CFB_COPYAREA
702 select FB_CFB_IMAGEBLIT
703 select FB_MACMODES
704
705config FB_HP300
706 bool
707 depends on (FB = y) && DIO
708 select FB_CFB_IMAGEBLIT
709 default y
710
711config FB_TGA
712 tristate "TGA/SFB+ framebuffer support"
713 depends on FB && (ALPHA || TC)
714 select FB_CFB_FILLRECT
715 select FB_CFB_COPYAREA
716 select FB_CFB_IMAGEBLIT
717 select BITREVERSE
718 ---help---
719 This is the frame buffer device driver for generic TGA and SFB+
720 graphic cards. These include DEC ZLXp-E1, -E2 and -E3 PCI cards,
721 also known as PBXGA-A, -B and -C, and DEC ZLX-E1, -E2 and -E3
722 TURBOchannel cards, also known as PMAGD-A, -B and -C.
723
724 Due to hardware limitations ZLX-E2 and E3 cards are not supported
725 for DECstation 5000/200 systems. Additionally due to firmware
726 limitations these cards may cause troubles with booting DECstation
727 5000/240 and /260 systems, but are fully supported under Linux if
728 you manage to get it going. ;-)
729
730 Say Y if you have one of those.
731
732config FB_UVESA
733 tristate "Userspace VESA VGA graphics support"
734 depends on FB && CONNECTOR
735 select FB_CFB_FILLRECT
736 select FB_CFB_COPYAREA
737 select FB_CFB_IMAGEBLIT
738 select FB_MODE_HELPERS
739 help
740 This is the frame buffer driver for generic VBE 2.0 compliant
741 graphic cards. It can also take advantage of VBE 3.0 features,
742 such as refresh rate adjustment.
743
744 This driver generally provides more features than vesafb but
745 requires a userspace helper application called 'v86d'. See
746 <file:Documentation/fb/uvesafb.txt> for more information.
747
748 If unsure, say N.
749
750config FB_VESA
751 bool "VESA VGA graphics support"
752 depends on (FB = y) && X86
753 select FB_CFB_FILLRECT
754 select FB_CFB_COPYAREA
755 select FB_CFB_IMAGEBLIT
756 select FB_BOOT_VESA_SUPPORT
757 help
758 This is the frame buffer device driver for generic VESA 2.0
759 compliant graphic cards. The older VESA 1.2 cards are not supported.
760 You will get a boot time penguin logo at no additional cost. Please
761 read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
762
763config FB_EFI
764 bool "EFI-based Framebuffer Support"
765 depends on (FB = y) && X86 && EFI
766 select FB_CFB_FILLRECT
767 select FB_CFB_COPYAREA
768 select FB_CFB_IMAGEBLIT
769 help
770 This is the EFI frame buffer device driver. If the firmware on
771 your platform is EFI 1.10 or UEFI 2.0, select Y to add support for
772 using the EFI framebuffer as your console.
773
774config FB_N411
775 tristate "N411 Apollo/Hecuba devkit support"
776 depends on FB && X86 && MMU
777 select FB_SYS_FILLRECT
778 select FB_SYS_COPYAREA
779 select FB_SYS_IMAGEBLIT
780 select FB_SYS_FOPS
781 select FB_DEFERRED_IO
782 select FB_HECUBA
783 help
784 This enables support for the Apollo display controller in its
785 Hecuba form using the n411 devkit.
786
787config FB_HGA
788 tristate "Hercules mono graphics support"
789 depends on FB && X86
790 help
791 Say Y here if you have a Hercules mono graphics card.
792
793 To compile this driver as a module, choose M here: the
794 module will be called hgafb.
795
796 As this card technology is at least 25 years old,
797 most people will answer N here.
798
799config FB_GBE
800 bool "SGI Graphics Backend frame buffer support"
801 depends on (FB = y) && SGI_IP32
802 select FB_CFB_FILLRECT
803 select FB_CFB_COPYAREA
804 select FB_CFB_IMAGEBLIT
805 help
806 This is the frame buffer device driver for SGI Graphics Backend.
807 This chip is used in SGI O2 and Visual Workstation 320/540.
808
809config FB_GBE_MEM
810 int "Video memory size in MB"
811 depends on FB_GBE
812 default 4
813 help
814 This is the amount of memory reserved for the framebuffer,
815 which can be any value between 1MB and 8MB.
816
817config FB_SBUS
818 bool "SBUS and UPA framebuffers"
819 depends on (FB = y) && SPARC
820 help
821 Say Y if you want support for SBUS or UPA based frame buffer device.
822
823config FB_BW2
824 bool "BWtwo support"
825 depends on (FB = y) && (SPARC && FB_SBUS)
826 select FB_CFB_FILLRECT
827 select FB_CFB_COPYAREA
828 select FB_CFB_IMAGEBLIT
829 help
830 This is the frame buffer device driver for the BWtwo frame buffer.
831
832config FB_CG3
833 bool "CGthree support"
834 depends on (FB = y) && (SPARC && FB_SBUS)
835 select FB_CFB_FILLRECT
836 select FB_CFB_COPYAREA
837 select FB_CFB_IMAGEBLIT
838 help
839 This is the frame buffer device driver for the CGthree frame buffer.
840
841config FB_CG6
842 bool "CGsix (GX,TurboGX) support"
843 depends on (FB = y) && (SPARC && FB_SBUS)
844 select FB_CFB_COPYAREA
845 select FB_CFB_IMAGEBLIT
846 help
847 This is the frame buffer device driver for the CGsix (GX, TurboGX)
848 frame buffer.
849
850config FB_FFB
851 bool "Creator/Creator3D/Elite3D support"
852 depends on FB_SBUS && SPARC64
853 select FB_CFB_COPYAREA
854 select FB_CFB_IMAGEBLIT
855 help
856 This is the frame buffer device driver for the Creator, Creator3D,
857 and Elite3D graphics boards.
858
859config FB_TCX
860 bool "TCX (SS4/SS5 only) support"
861 depends on FB_SBUS
862 select FB_CFB_FILLRECT
863 select FB_CFB_COPYAREA
864 select FB_CFB_IMAGEBLIT
865 help
866 This is the frame buffer device driver for the TCX 24/8bit frame
867 buffer.
868
869config FB_CG14
870 bool "CGfourteen (SX) support"
871 depends on FB_SBUS
872 select FB_CFB_FILLRECT
873 select FB_CFB_COPYAREA
874 select FB_CFB_IMAGEBLIT
875 help
876 This is the frame buffer device driver for the CGfourteen frame
877 buffer on Desktop SPARCsystems with the SX graphics option.
878
879config FB_P9100
880 bool "P9100 (Sparcbook 3 only) support"
881 depends on FB_SBUS
882 select FB_CFB_FILLRECT
883 select FB_CFB_COPYAREA
884 select FB_CFB_IMAGEBLIT
885 help
886 This is the frame buffer device driver for the P9100 card
887 supported on Sparcbook 3 machines.
888
889config FB_LEO
890 bool "Leo (ZX) support"
891 depends on FB_SBUS
892 select FB_CFB_FILLRECT
893 select FB_CFB_COPYAREA
894 select FB_CFB_IMAGEBLIT
895 help
896 This is the frame buffer device driver for the SBUS-based Sun ZX
897 (leo) frame buffer cards.
898
899config FB_IGA
900 bool "IGA 168x display support"
901 depends on (FB = y) && SPARC32
902 select FB_CFB_FILLRECT
903 select FB_CFB_COPYAREA
904 select FB_CFB_IMAGEBLIT
905 help
906 This is the framebuffer device for the INTERGRAPHICS 1680 and
907 successor frame buffer cards.
908
909config FB_XVR500
910 bool "Sun XVR-500 3DLABS Wildcat support"
911 depends on (FB = y) && PCI && SPARC64
912 select FB_CFB_FILLRECT
913 select FB_CFB_COPYAREA
914 select FB_CFB_IMAGEBLIT
915 help
916 This is the framebuffer device for the Sun XVR-500 and similar
917 graphics cards based upon the 3DLABS Wildcat chipset. The driver
918 only works on sparc64 systems where the system firmware has
919 mostly initialized the card already. It is treated as a
920 completely dumb framebuffer device.
921
922config FB_XVR2500
923 bool "Sun XVR-2500 3DLABS Wildcat support"
924 depends on (FB = y) && PCI && SPARC64
925 select FB_CFB_FILLRECT
926 select FB_CFB_COPYAREA
927 select FB_CFB_IMAGEBLIT
928 help
929 This is the framebuffer device for the Sun XVR-2500 and similar
930 graphics cards based upon the 3DLABS Wildcat chipset. The driver
931 only works on sparc64 systems where the system firmware has
932 mostly initialized the card already. It is treated as a
933 completely dumb framebuffer device.
934
935config FB_XVR1000
936 bool "Sun XVR-1000 support"
937 depends on (FB = y) && SPARC64
938 select FB_CFB_FILLRECT
939 select FB_CFB_COPYAREA
940 select FB_CFB_IMAGEBLIT
941 help
942 This is the framebuffer device for the Sun XVR-1000 and similar
943 graphics cards. The driver only works on sparc64 systems where
944 the system firmware has mostly initialized the card already. It
945 is treated as a completely dumb framebuffer device.
946
947config FB_PVR2
948 tristate "NEC PowerVR 2 display support"
949 depends on FB && SH_DREAMCAST
950 select FB_CFB_FILLRECT
951 select FB_CFB_COPYAREA
952 select FB_CFB_IMAGEBLIT
953 ---help---
954 Say Y here if you have a PowerVR 2 card in your box. If you plan to
955 run linux on your Dreamcast, you will have to say Y here.
956 This driver may or may not work on other PowerVR 2 cards, but is
957 totally untested. Use at your own risk. If unsure, say N.
958
959 To compile this driver as a module, choose M here: the
960 module will be called pvr2fb.
961
962 You can pass several parameters to the driver at boot time or at
963 module load time. The parameters look like "video=pvr2:XXX", where
964 the meaning of XXX can be found at the end of the main source file
965 (<file:drivers/video/pvr2fb.c>). Please see the file
966 <file:Documentation/fb/pvr2fb.txt>.
967
968config FB_OPENCORES
969 tristate "OpenCores VGA/LCD core 2.0 framebuffer support"
970 depends on FB && HAS_DMA
971 select FB_CFB_FILLRECT
972 select FB_CFB_COPYAREA
973 select FB_CFB_IMAGEBLIT
974 help
975 This enables support for the OpenCores VGA/LCD core.
976
977 The OpenCores VGA/LCD core is typically used together with
978 softcore CPUs (e.g. OpenRISC or Microblaze) or hard processor
979 systems (e.g. Altera socfpga or Xilinx Zynq) on FPGAs.
980
981 The source code and specification for the core is available at
982 <http://opencores.org/project,vga_lcd>
983
984config FB_S1D13XXX
985 tristate "Epson S1D13XXX framebuffer support"
986 depends on FB
987 select FB_CFB_FILLRECT
988 select FB_CFB_COPYAREA
989 select FB_CFB_IMAGEBLIT
990 help
991 Support for S1D13XXX framebuffer device family (currently only
992 working with S1D13806). Product specs at
993 <http://vdc.epson.com/>
994
995config FB_ATMEL
996 tristate "AT91/AT32 LCD Controller support"
997 depends on FB && HAVE_FB_ATMEL
998 select FB_CFB_FILLRECT
999 select FB_CFB_COPYAREA
1000 select FB_CFB_IMAGEBLIT
1001 select FB_MODE_HELPERS
1002 select VIDEOMODE_HELPERS
1003 help
1004 This enables support for the AT91/AT32 LCD Controller.
1005
1006config FB_INTSRAM
1007 bool "Frame Buffer in internal SRAM"
1008 depends on FB_ATMEL && ARCH_AT91SAM9261
1009 help
1010 Say Y if you want to map Frame Buffer in internal SRAM. Say N if you want
1011 to let frame buffer in external SDRAM.
1012
1013config FB_ATMEL_STN
1014 bool "Use a STN display with AT91/AT32 LCD Controller"
1015 depends on FB_ATMEL && (MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK)
1016 default n
1017 help
1018 Say Y if you want to connect a STN LCD display to the AT91/AT32 LCD
1019 Controller. Say N if you want to connect a TFT.
1020
1021 If unsure, say N.
1022
1023config FB_NVIDIA
1024 tristate "nVidia Framebuffer Support"
1025 depends on FB && PCI
1026 select FB_BACKLIGHT if FB_NVIDIA_BACKLIGHT
1027 select FB_MODE_HELPERS
1028 select FB_CFB_FILLRECT
1029 select FB_CFB_COPYAREA
1030 select FB_CFB_IMAGEBLIT
1031 select BITREVERSE
1032 select VGASTATE
1033 help
1034 This driver supports graphics boards with the nVidia chips, TNT
1035 and newer. For very old chipsets, such as the RIVA128, then use
1036 the rivafb.
1037 Say Y if you have such a graphics board.
1038
1039 To compile this driver as a module, choose M here: the
1040 module will be called nvidiafb.
1041
1042config FB_NVIDIA_I2C
1043 bool "Enable DDC Support"
1044 depends on FB_NVIDIA
1045 select FB_DDC
1046 help
1047 This enables I2C support for nVidia Chipsets. This is used
1048 only for getting EDID information from the attached display
1049 allowing for robust video mode handling and switching.
1050
1051 Because fbdev-2.6 requires that drivers must be able to
1052 independently validate video mode parameters, you should say Y
1053 here.
1054
1055config FB_NVIDIA_DEBUG
1056 bool "Lots of debug output"
1057 depends on FB_NVIDIA
1058 default n
1059 help
1060 Say Y here if you want the nVidia driver to output all sorts
1061 of debugging information to provide to the maintainer when
1062 something goes wrong.
1063
1064config FB_NVIDIA_BACKLIGHT
1065 bool "Support for backlight control"
1066 depends on FB_NVIDIA
1067 default y
1068 help
1069 Say Y here if you want to control the backlight of your display.
1070
1071config FB_RIVA
1072 tristate "nVidia Riva support"
1073 depends on FB && PCI
1074 select FB_BACKLIGHT if FB_RIVA_BACKLIGHT
1075 select FB_MODE_HELPERS
1076 select FB_CFB_FILLRECT
1077 select FB_CFB_COPYAREA
1078 select FB_CFB_IMAGEBLIT
1079 select BITREVERSE
1080 select VGASTATE
1081 help
1082 This driver supports graphics boards with the nVidia Riva/Geforce
1083 chips.
1084 Say Y if you have such a graphics board.
1085
1086 To compile this driver as a module, choose M here: the
1087 module will be called rivafb.
1088
1089config FB_RIVA_I2C
1090 bool "Enable DDC Support"
1091 depends on FB_RIVA
1092 select FB_DDC
1093 help
1094 This enables I2C support for nVidia Chipsets. This is used
1095 only for getting EDID information from the attached display
1096 allowing for robust video mode handling and switching.
1097
1098 Because fbdev-2.6 requires that drivers must be able to
1099 independently validate video mode parameters, you should say Y
1100 here.
1101
1102config FB_RIVA_DEBUG
1103 bool "Lots of debug output"
1104 depends on FB_RIVA
1105 default n
1106 help
1107 Say Y here if you want the Riva driver to output all sorts
1108 of debugging information to provide to the maintainer when
1109 something goes wrong.
1110
1111config FB_RIVA_BACKLIGHT
1112 bool "Support for backlight control"
1113 depends on FB_RIVA
1114 default y
1115 help
1116 Say Y here if you want to control the backlight of your display.
1117
1118config FB_I740
1119 tristate "Intel740 support"
1120 depends on FB && PCI
1121 select FB_MODE_HELPERS
1122 select FB_CFB_FILLRECT
1123 select FB_CFB_COPYAREA
1124 select FB_CFB_IMAGEBLIT
1125 select VGASTATE
1126 select FB_DDC
1127 help
1128 This driver supports graphics cards based on Intel740 chip.
1129
1130config FB_I810
1131 tristate "Intel 810/815 support"
1132 depends on FB && PCI && X86_32 && AGP_INTEL
1133 select FB_MODE_HELPERS
1134 select FB_CFB_FILLRECT
1135 select FB_CFB_COPYAREA
1136 select FB_CFB_IMAGEBLIT
1137 select VGASTATE
1138 help
1139 This driver supports the on-board graphics built in to the Intel 810
1140 and 815 chipsets. Say Y if you have and plan to use such a board.
1141
1142 To compile this driver as a module, choose M here: the
1143 module will be called i810fb.
1144
1145 For more information, please read
1146 <file:Documentation/fb/intel810.txt>
1147
1148config FB_I810_GTF
1149 bool "use VESA Generalized Timing Formula"
1150 depends on FB_I810
1151 help
1152 If you say Y, then the VESA standard, Generalized Timing Formula
1153 or GTF, will be used to calculate the required video timing values
1154 per video mode. Since the GTF allows nondiscrete timings
1155 (nondiscrete being a range of values as opposed to discrete being a
1156 set of values), you'll be able to use any combination of horizontal
1157 and vertical resolutions, and vertical refresh rates without having
1158 to specify your own timing parameters. This is especially useful
1159 to maximize the performance of an aging display, or if you just
1160 have a display with nonstandard dimensions. A VESA compliant
1161 monitor is recommended, but can still work with non-compliant ones.
1162 If you need or want this, then select this option. The timings may
1163 not be compliant with Intel's recommended values. Use at your own
1164 risk.
1165
1166 If you say N, the driver will revert to discrete video timings
1167 using a set recommended by Intel in their documentation.
1168
1169 If unsure, say N.
1170
1171config FB_I810_I2C
1172 bool "Enable DDC Support"
1173 depends on FB_I810 && FB_I810_GTF
1174 select FB_DDC
1175 help
1176
1177config FB_LE80578
1178 tristate "Intel LE80578 (Vermilion) support"
1179 depends on FB && PCI && X86
1180 select FB_MODE_HELPERS
1181 select FB_CFB_FILLRECT
1182 select FB_CFB_COPYAREA
1183 select FB_CFB_IMAGEBLIT
1184 help
1185 This driver supports the LE80578 (Vermilion Range) chipset
1186
1187config FB_CARILLO_RANCH
1188 tristate "Intel Carillo Ranch support"
1189 depends on FB_LE80578 && FB && PCI && X86
1190 help
1191 This driver supports the LE80578 (Carillo Ranch) board
1192
1193config FB_INTEL
1194 tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support"
1195 depends on FB && PCI && X86 && AGP_INTEL && EXPERT
1196 select FB_MODE_HELPERS
1197 select FB_CFB_FILLRECT
1198 select FB_CFB_COPYAREA
1199 select FB_CFB_IMAGEBLIT
1200 select FB_BOOT_VESA_SUPPORT if FB_INTEL = y
1201 depends on !DRM_I915
1202 help
1203 This driver supports the on-board graphics built in to the Intel
1204 830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets.
1205 Say Y if you have and plan to use such a board.
1206
1207 To make FB_INTELFB=Y work you need to say AGP_INTEL=y too.
1208
1209 To compile this driver as a module, choose M here: the
1210 module will be called intelfb.
1211
1212 For more information, please read <file:Documentation/fb/intelfb.txt>
1213
1214config FB_INTEL_DEBUG
1215 bool "Intel driver Debug Messages"
1216 depends on FB_INTEL
1217 ---help---
1218 Say Y here if you want the Intel driver to output all sorts
1219 of debugging information to provide to the maintainer when
1220 something goes wrong.
1221
1222config FB_INTEL_I2C
1223 bool "DDC/I2C for Intel framebuffer support"
1224 depends on FB_INTEL
1225 select FB_DDC
1226 default y
1227 help
1228 Say Y here if you want DDC/I2C support for your on-board Intel graphics.
1229
1230config FB_MATROX
1231 tristate "Matrox acceleration"
1232 depends on FB && PCI
1233 select FB_CFB_FILLRECT
1234 select FB_CFB_COPYAREA
1235 select FB_CFB_IMAGEBLIT
1236 select FB_TILEBLITTING
1237 select FB_MACMODES if PPC_PMAC
1238 ---help---
1239 Say Y here if you have a Matrox Millennium, Matrox Millennium II,
1240 Matrox Mystique, Matrox Mystique 220, Matrox Productiva G100, Matrox
1241 Mystique G200, Matrox Millennium G200, Matrox Marvel G200 video,
1242 Matrox G400, G450 or G550 card in your box.
1243
1244 To compile this driver as a module, choose M here: the
1245 module will be called matroxfb.
1246
1247 You can pass several parameters to the driver at boot time or at
1248 module load time. The parameters look like "video=matroxfb:XXX", and
1249 are described in <file:Documentation/fb/matroxfb.txt>.
1250
1251config FB_MATROX_MILLENIUM
1252 bool "Millennium I/II support"
1253 depends on FB_MATROX
1254 help
1255 Say Y here if you have a Matrox Millennium or Matrox Millennium II
1256 video card. If you select "Advanced lowlevel driver options" below,
1257 you should check 4 bpp packed pixel, 8 bpp packed pixel, 16 bpp
1258 packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can
1259 also use font widths different from 8.
1260
1261config FB_MATROX_MYSTIQUE
1262 bool "Mystique support"
1263 depends on FB_MATROX
1264 help
1265 Say Y here if you have a Matrox Mystique or Matrox Mystique 220
1266 video card. If you select "Advanced lowlevel driver options" below,
1267 you should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp
1268 packed pixel and 32 bpp packed pixel. You can also use font widths
1269 different from 8.
1270
1271config FB_MATROX_G
1272 bool "G100/G200/G400/G450/G550 support"
1273 depends on FB_MATROX
1274 ---help---
1275 Say Y here if you have a Matrox G100, G200, G400, G450 or G550 based
1276 video card. If you select "Advanced lowlevel driver options", you
1277 should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed
1278 pixel and 32 bpp packed pixel. You can also use font widths
1279 different from 8.
1280
1281 If you need support for G400 secondary head, you must say Y to
1282 "Matrox I2C support" and "G400 second head support" right below.
1283 G450/G550 secondary head and digital output are supported without
1284 additional modules.
1285
1286 The driver starts in monitor mode. You must use the matroxset tool
1287 (available at <ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/>) to
1288 swap primary and secondary head outputs, or to change output mode.
1289 Secondary head driver always start in 640x480 resolution and you
1290 must use fbset to change it.
1291
1292 Do not forget that second head supports only 16 and 32 bpp
1293 packed pixels, so it is a good idea to compile them into the kernel
1294 too. You can use only some font widths, as the driver uses generic
1295 painting procedures (the secondary head does not use acceleration
1296 engine).
1297
1298 G450/G550 hardware can display TV picture only from secondary CRTC,
1299 and it performs no scaling, so picture must have 525 or 625 lines.
1300
1301config FB_MATROX_I2C
1302 tristate "Matrox I2C support"
1303 depends on FB_MATROX
1304 select FB_DDC
1305 ---help---
1306 This drivers creates I2C buses which are needed for accessing the
1307 DDC (I2C) bus present on all Matroxes, an I2C bus which
1308 interconnects Matrox optional devices, like MGA-TVO on G200 and
1309 G400, and the secondary head DDC bus, present on G400 only.
1310
1311 You can say Y or M here if you want to experiment with monitor
1312 detection code. You must say Y or M here if you want to use either
1313 second head of G400 or MGA-TVO on G200 or G400.
1314
1315 If you compile it as module, it will create a module named
1316 i2c-matroxfb.
1317
1318config FB_MATROX_MAVEN
1319 tristate "G400 second head support"
1320 depends on FB_MATROX_G && FB_MATROX_I2C
1321 ---help---
1322 WARNING !!! This support does not work with G450 !!!
1323
1324 Say Y or M here if you want to use a secondary head (meaning two
1325 monitors in parallel) on G400 or MGA-TVO add-on on G200. Secondary
1326 head is not compatible with accelerated XFree 3.3.x SVGA servers -
1327 secondary head output is blanked while you are in X. With XFree
1328 3.9.17 preview you can use both heads if you use SVGA over fbdev or
1329 the fbdev driver on first head and the fbdev driver on second head.
1330
1331 If you compile it as module, two modules are created,
1332 matroxfb_crtc2 and matroxfb_maven. Matroxfb_maven is needed for
1333 both G200 and G400, matroxfb_crtc2 is needed only by G400. You must
1334 also load i2c-matroxfb to get it to run.
1335
1336 The driver starts in monitor mode and you must use the matroxset
1337 tool (available at
1338 <ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/>) to switch it to
1339 PAL or NTSC or to swap primary and secondary head outputs.
1340 Secondary head driver also always start in 640x480 resolution, you
1341 must use fbset to change it.
1342
1343 Also do not forget that second head supports only 16 and 32 bpp
1344 packed pixels, so it is a good idea to compile them into the kernel
1345 too. You can use only some font widths, as the driver uses generic
1346 painting procedures (the secondary head does not use acceleration
1347 engine).
1348
1349config FB_RADEON
1350 tristate "ATI Radeon display support"
1351 depends on FB && PCI
1352 select FB_BACKLIGHT if FB_RADEON_BACKLIGHT
1353 select FB_MODE_HELPERS
1354 select FB_CFB_FILLRECT
1355 select FB_CFB_COPYAREA
1356 select FB_CFB_IMAGEBLIT
1357 select FB_MACMODES if PPC_OF
1358 help
1359 Choose this option if you want to use an ATI Radeon graphics card as
1360 a framebuffer device. There are both PCI and AGP versions. You
1361 don't need to choose this to run the Radeon in plain VGA mode.
1362
1363 There is a product page at
1364 http://products.amd.com/en-us/GraphicCardResult.aspx
1365
1366config FB_RADEON_I2C
1367 bool "DDC/I2C for ATI Radeon support"
1368 depends on FB_RADEON
1369 select FB_DDC
1370 default y
1371 help
1372 Say Y here if you want DDC/I2C support for your Radeon board.
1373
1374config FB_RADEON_BACKLIGHT
1375 bool "Support for backlight control"
1376 depends on FB_RADEON
1377 default y
1378 help
1379 Say Y here if you want to control the backlight of your display.
1380
1381config FB_RADEON_DEBUG
1382 bool "Lots of debug output from Radeon driver"
1383 depends on FB_RADEON
1384 default n
1385 help
1386 Say Y here if you want the Radeon driver to output all sorts
1387 of debugging information to provide to the maintainer when
1388 something goes wrong.
1389
1390config FB_ATY128
1391 tristate "ATI Rage128 display support"
1392 depends on FB && PCI
1393 select FB_CFB_FILLRECT
1394 select FB_CFB_COPYAREA
1395 select FB_CFB_IMAGEBLIT
1396 select FB_BACKLIGHT if FB_ATY128_BACKLIGHT
1397 select FB_MACMODES if PPC_PMAC
1398 help
1399 This driver supports graphics boards with the ATI Rage128 chips.
1400 Say Y if you have such a graphics board and read
1401 <file:Documentation/fb/aty128fb.txt>.
1402
1403 To compile this driver as a module, choose M here: the
1404 module will be called aty128fb.
1405
1406config FB_ATY128_BACKLIGHT
1407 bool "Support for backlight control"
1408 depends on FB_ATY128
1409 default y
1410 help
1411 Say Y here if you want to control the backlight of your display.
1412
1413config FB_ATY
1414 tristate "ATI Mach64 display support" if PCI || ATARI
1415 depends on FB && !SPARC32
1416 select FB_CFB_FILLRECT
1417 select FB_CFB_COPYAREA
1418 select FB_CFB_IMAGEBLIT
1419 select FB_BACKLIGHT if FB_ATY_BACKLIGHT
1420 select FB_MACMODES if PPC
1421 help
1422 This driver supports graphics boards with the ATI Mach64 chips.
1423 Say Y if you have such a graphics board.
1424
1425 To compile this driver as a module, choose M here: the
1426 module will be called atyfb.
1427
1428config FB_ATY_CT
1429 bool "Mach64 CT/VT/GT/LT (incl. 3D RAGE) support"
1430 depends on PCI && FB_ATY
1431 default y if SPARC64 && PCI
1432 help
1433 Say Y here to support use of ATI's 64-bit Rage boards (or other
1434 boards based on the Mach64 CT, VT, GT, and LT chipsets) as a
1435 framebuffer device. The ATI product support page for these boards
1436 is at <http://support.ati.com/products/pc/mach64/mach64.html>.
1437
1438config FB_ATY_GENERIC_LCD
1439 bool "Mach64 generic LCD support"
1440 depends on FB_ATY_CT
1441 help
1442 Say Y if you have a laptop with an ATI Rage LT PRO, Rage Mobility,
1443 Rage XC, or Rage XL chipset.
1444
1445config FB_ATY_GX
1446 bool "Mach64 GX support" if PCI
1447 depends on FB_ATY
1448 default y if ATARI
1449 help
1450 Say Y here to support use of the ATI Mach64 Graphics Expression
1451 board (or other boards based on the Mach64 GX chipset) as a
1452 framebuffer device. The ATI product support page for these boards
1453 is at
1454 <http://support.ati.com/products/pc/mach64/graphics_xpression.html>.
1455
1456config FB_ATY_BACKLIGHT
1457 bool "Support for backlight control"
1458 depends on FB_ATY
1459 default y
1460 help
1461 Say Y here if you want to control the backlight of your display.
1462
1463config FB_S3
1464 tristate "S3 Trio/Virge support"
1465 depends on FB && PCI
1466 select FB_CFB_FILLRECT
1467 select FB_CFB_COPYAREA
1468 select FB_CFB_IMAGEBLIT
1469 select FB_TILEBLITTING
1470 select FB_SVGALIB
1471 select VGASTATE
1472 select FONT_8x16 if FRAMEBUFFER_CONSOLE
1473 ---help---
1474 Driver for graphics boards with S3 Trio / S3 Virge chip.
1475
1476config FB_S3_DDC
1477 bool "DDC for S3 support"
1478 depends on FB_S3
1479 select FB_DDC
1480 default y
1481 help
1482 Say Y here if you want DDC support for your S3 graphics card.
1483
1484config FB_SAVAGE
1485 tristate "S3 Savage support"
1486 depends on FB && PCI
1487 select FB_MODE_HELPERS
1488 select FB_CFB_FILLRECT
1489 select FB_CFB_COPYAREA
1490 select FB_CFB_IMAGEBLIT
1491 select VGASTATE
1492 help
1493 This driver supports notebooks and computers with S3 Savage PCI/AGP
1494 chips.
1495
1496 Say Y if you have such a graphics card.
1497
1498 To compile this driver as a module, choose M here; the module
1499 will be called savagefb.
1500
1501config FB_SAVAGE_I2C
1502 bool "Enable DDC2 Support"
1503 depends on FB_SAVAGE
1504 select FB_DDC
1505 help
1506 This enables I2C support for S3 Savage Chipsets. This is used
1507 only for getting EDID information from the attached display
1508 allowing for robust video mode handling and switching.
1509
1510 Because fbdev-2.6 requires that drivers must be able to
1511 independently validate video mode parameters, you should say Y
1512 here.
1513
1514config FB_SAVAGE_ACCEL
1515 bool "Enable Console Acceleration"
1516 depends on FB_SAVAGE
1517 default n
1518 help
1519 This option will compile in console acceleration support. If
1520 the resulting framebuffer console has bothersome glitches, then
1521 choose N here.
1522
1523config FB_SIS
1524 tristate "SiS/XGI display support"
1525 depends on FB && PCI
1526 select FB_CFB_FILLRECT
1527 select FB_CFB_COPYAREA
1528 select FB_CFB_IMAGEBLIT
1529 select FB_BOOT_VESA_SUPPORT if FB_SIS = y
1530 help
1531 This is the frame buffer device driver for the SiS 300, 315, 330
1532 and 340 series as well as XGI V3XT, V5, V8, Z7 graphics chipsets.
1533 Specs available at <http://www.sis.com> and <http://www.xgitech.com>.
1534
1535 To compile this driver as a module, choose M here; the module
1536 will be called sisfb.
1537
1538config FB_SIS_300
1539 bool "SiS 300 series support"
1540 depends on FB_SIS
1541 help
1542 Say Y here to support use of the SiS 300/305, 540, 630 and 730.
1543
1544config FB_SIS_315
1545 bool "SiS 315/330/340 series and XGI support"
1546 depends on FB_SIS
1547 help
1548 Say Y here to support use of the SiS 315, 330 and 340 series
1549 (315/H/PRO, 55x, 650, 651, 740, 330, 661, 741, 760, 761) as well
1550 as XGI V3XT, V5, V8 and Z7.
1551
1552config FB_VIA
1553 tristate "VIA UniChrome (Pro) and Chrome9 display support"
1554 depends on FB && PCI && X86
1555 select FB_CFB_FILLRECT
1556 select FB_CFB_COPYAREA
1557 select FB_CFB_IMAGEBLIT
1558 select I2C_ALGOBIT
1559 select I2C
1560 select GPIOLIB
1561 help
1562 This is the frame buffer device driver for Graphics chips of VIA
1563 UniChrome (Pro) Family (CLE266,PM800/CN400,P4M800CE/P4M800Pro/
1564 CN700/VN800,CX700/VX700,P4M890) and Chrome9 Family (K8M890,CN896
1565 /P4M900,VX800)
1566 Say Y if you have a VIA UniChrome graphics board.
1567
1568 To compile this driver as a module, choose M here: the
1569 module will be called viafb.
1570
1571if FB_VIA
1572
1573config FB_VIA_DIRECT_PROCFS
1574 bool "direct hardware access via procfs (DEPRECATED)(DANGEROUS)"
1575 depends on FB_VIA
1576 default n
1577 help
1578 Allow direct hardware access to some output registers via procfs.
1579 This is dangerous but may provide the only chance to get the
1580 correct output device configuration.
1581 Its use is strongly discouraged.
1582
1583config FB_VIA_X_COMPATIBILITY
1584 bool "X server compatibility"
1585 depends on FB_VIA
1586 default n
1587 help
1588 This option reduces the functionality (power saving, ...) of the
1589 framebuffer to avoid negative impact on the OpenChrome X server.
1590 If you use any X server other than fbdev you should enable this
1591 otherwise it should be safe to disable it and allow using all
1592 features.
1593
1594endif
1595
1596config FB_NEOMAGIC
1597 tristate "NeoMagic display support"
1598 depends on FB && PCI
1599 select FB_MODE_HELPERS
1600 select FB_CFB_FILLRECT
1601 select FB_CFB_COPYAREA
1602 select FB_CFB_IMAGEBLIT
1603 select VGASTATE
1604 help
1605 This driver supports notebooks with NeoMagic PCI chips.
1606 Say Y if you have such a graphics card.
1607
1608 To compile this driver as a module, choose M here: the
1609 module will be called neofb.
1610
1611config FB_KYRO
1612 tristate "IMG Kyro support"
1613 depends on FB && PCI
1614 select FB_CFB_FILLRECT
1615 select FB_CFB_COPYAREA
1616 select FB_CFB_IMAGEBLIT
1617 help
1618 Say Y here if you have a STG4000 / Kyro / PowerVR 3 based
1619 graphics board.
1620
1621 To compile this driver as a module, choose M here: the
1622 module will be called kyrofb.
1623
1624config FB_3DFX
1625 tristate "3Dfx Banshee/Voodoo3/Voodoo5 display support"
1626 depends on FB && PCI
1627 select FB_CFB_IMAGEBLIT
1628 select FB_CFB_FILLRECT
1629 select FB_CFB_COPYAREA
1630 select FB_MODE_HELPERS
1631 help
1632 This driver supports graphics boards with the 3Dfx Banshee,
1633 Voodoo3 or VSA-100 (aka Voodoo4/5) chips. Say Y if you have
1634 such a graphics board.
1635
1636 To compile this driver as a module, choose M here: the
1637 module will be called tdfxfb.
1638
1639config FB_3DFX_ACCEL
1640 bool "3Dfx Acceleration functions"
1641 depends on FB_3DFX
1642 ---help---
1643 This will compile the 3Dfx Banshee/Voodoo3/VSA-100 frame buffer
1644 device driver with acceleration functions.
1645
1646config FB_3DFX_I2C
1647 bool "Enable DDC/I2C support"
1648 depends on FB_3DFX
1649 select FB_DDC
1650 default y
1651 help
1652 Say Y here if you want DDC/I2C support for your 3dfx Voodoo3.
1653
1654config FB_VOODOO1
1655 tristate "3Dfx Voodoo Graphics (sst1) support"
1656 depends on FB && PCI
1657 select FB_CFB_FILLRECT
1658 select FB_CFB_COPYAREA
1659 select FB_CFB_IMAGEBLIT
1660 ---help---
1661 Say Y here if you have a 3Dfx Voodoo Graphics (Voodoo1/sst1) or
1662 Voodoo2 (cvg) based graphics card.
1663
1664 To compile this driver as a module, choose M here: the
1665 module will be called sstfb.
1666
1667 WARNING: Do not use any application that uses the 3D engine
1668 (namely glide) while using this driver.
1669 Please read the <file:Documentation/fb/sstfb.txt> for supported
1670 options and other important info support.
1671
1672config FB_VT8623
1673 tristate "VIA VT8623 support"
1674 depends on FB && PCI
1675 select FB_CFB_FILLRECT
1676 select FB_CFB_COPYAREA
1677 select FB_CFB_IMAGEBLIT
1678 select FB_TILEBLITTING
1679 select FB_SVGALIB
1680 select VGASTATE
1681 select FONT_8x16 if FRAMEBUFFER_CONSOLE
1682 ---help---
1683 Driver for CastleRock integrated graphics core in the
1684 VIA VT8623 [Apollo CLE266] chipset.
1685
1686config FB_TRIDENT
1687 tristate "Trident/CyberXXX/CyberBlade support"
1688 depends on FB && PCI
1689 select FB_CFB_FILLRECT
1690 select FB_CFB_COPYAREA
1691 select FB_CFB_IMAGEBLIT
1692 ---help---
1693 This is the frame buffer device driver for Trident PCI/AGP chipsets.
1694 Supported chipset families are TGUI 9440/96XX, 3DImage, Blade3D
1695 and Blade XP.
1696 There are also integrated versions of these chips called CyberXXXX,
1697 CyberImage or CyberBlade. These chips are mostly found in laptops
1698 but also on some motherboards including early VIA EPIA motherboards.
1699 For more information, read <file:Documentation/fb/tridentfb.txt>
1700
1701 Say Y if you have such a graphics board.
1702
1703 To compile this driver as a module, choose M here: the
1704 module will be called tridentfb.
1705
1706config FB_ARK
1707 tristate "ARK 2000PV support"
1708 depends on FB && PCI
1709 select FB_CFB_FILLRECT
1710 select FB_CFB_COPYAREA
1711 select FB_CFB_IMAGEBLIT
1712 select FB_TILEBLITTING
1713 select FB_SVGALIB
1714 select VGASTATE
1715 select FONT_8x16 if FRAMEBUFFER_CONSOLE
1716 ---help---
1717 Driver for PCI graphics boards with ARK 2000PV chip
1718 and ICS 5342 RAMDAC.
1719
1720config FB_PM3
1721 tristate "Permedia3 support"
1722 depends on FB && PCI
1723 select FB_CFB_FILLRECT
1724 select FB_CFB_COPYAREA
1725 select FB_CFB_IMAGEBLIT
1726 help
1727 This is the frame buffer device driver for the 3DLabs Permedia3
1728 chipset, used in Formac ProFormance III, 3DLabs Oxygen VX1 &
1729 similar boards, 3DLabs Permedia3 Create!, Appian Jeronimo 2000
1730 and maybe other boards.
1731
1732config FB_CARMINE
1733 tristate "Fujitsu carmine frame buffer support"
1734 depends on FB && PCI
1735 select FB_CFB_FILLRECT
1736 select FB_CFB_COPYAREA
1737 select FB_CFB_IMAGEBLIT
1738 help
1739 This is the frame buffer device driver for the Fujitsu Carmine chip.
1740 The driver provides two independent frame buffer devices.
1741
1742choice
1743 depends on FB_CARMINE
1744 prompt "DRAM timing"
1745 default FB_CARMINE_DRAM_EVAL
1746
1747config FB_CARMINE_DRAM_EVAL
1748 bool "Eval board timings"
1749 help
1750 Use timings which work on the eval card.
1751
1752config CARMINE_DRAM_CUSTOM
1753 bool "Custom board timings"
1754 help
1755 Use custom board timings.
1756endchoice
1757
1758config FB_AU1100
1759 bool "Au1100 LCD Driver"
1760 depends on (FB = y) && MIPS_ALCHEMY
1761 select FB_CFB_FILLRECT
1762 select FB_CFB_COPYAREA
1763 select FB_CFB_IMAGEBLIT
1764 help
1765 This is the framebuffer driver for the AMD Au1100 SOC. It can drive
1766 various panels and CRTs by passing in kernel cmd line option
1767 au1100fb:panel=<name>.
1768
1769config FB_AU1200
1770 bool "Au1200/Au1300 LCD Driver"
1771 depends on (FB = y) && MIPS_ALCHEMY
1772 select FB_SYS_FILLRECT
1773 select FB_SYS_COPYAREA
1774 select FB_SYS_IMAGEBLIT
1775 select FB_SYS_FOPS
1776 help
1777 This is the framebuffer driver for the Au1200/Au1300 SOCs.
1778 It can drive various panels and CRTs by passing in kernel cmd line
1779 option au1200fb:panel=<name>.
1780
1781config FB_VT8500
1782 bool "VIA VT8500 framebuffer support"
1783 depends on (FB = y) && ARM && ARCH_VT8500
1784 select FB_SYS_FILLRECT if (!FB_WMT_GE_ROPS)
1785 select FB_SYS_COPYAREA if (!FB_WMT_GE_ROPS)
1786 select FB_SYS_IMAGEBLIT
1787 select FB_MODE_HELPERS
1788 select VIDEOMODE_HELPERS
1789 help
1790 This is the framebuffer driver for VIA VT8500 integrated LCD
1791 controller.
1792
1793config FB_WM8505
1794 bool "Wondermedia WM8xxx-series frame buffer support"
1795 depends on (FB = y) && ARM && ARCH_VT8500
1796 select FB_SYS_FILLRECT if (!FB_WMT_GE_ROPS)
1797 select FB_SYS_COPYAREA if (!FB_WMT_GE_ROPS)
1798 select FB_SYS_IMAGEBLIT
1799 select FB_MODE_HELPERS
1800 select VIDEOMODE_HELPERS
1801 help
1802 This is the framebuffer driver for WonderMedia WM8xxx-series
1803 integrated LCD controller. This driver covers the WM8505, WM8650
1804 and WM8850 SoCs.
1805
1806config FB_WMT_GE_ROPS
1807 bool "VT8500/WM8xxx accelerated raster ops support"
1808 depends on (FB = y) && (FB_VT8500 || FB_WM8505)
1809 default n
1810 help
1811 This adds support for accelerated raster operations on the
1812 VIA VT8500 and Wondermedia 85xx series SoCs.
1813
1814source "drivers/video/geode/Kconfig"
1815
1816config FB_HIT
1817 tristate "HD64461 Frame Buffer support"
1818 depends on FB && HD64461
1819 select FB_CFB_FILLRECT
1820 select FB_CFB_COPYAREA
1821 select FB_CFB_IMAGEBLIT
1822 help
1823 This is the frame buffer device driver for the Hitachi HD64461 LCD
1824 frame buffer card.
1825
1826config FB_PMAG_AA
1827 bool "PMAG-AA TURBOchannel framebuffer support"
1828 depends on (FB = y) && TC
1829 select FB_CFB_FILLRECT
1830 select FB_CFB_COPYAREA
1831 select FB_CFB_IMAGEBLIT
1832 help
1833 Support for the PMAG-AA TURBOchannel framebuffer card (1280x1024x1)
1834 used mainly in the MIPS-based DECstation series.
1835
1836config FB_PMAG_BA
1837 tristate "PMAG-BA TURBOchannel framebuffer support"
1838 depends on FB && TC
1839 select FB_CFB_FILLRECT
1840 select FB_CFB_COPYAREA
1841 select FB_CFB_IMAGEBLIT
1842 help
1843 Support for the PMAG-BA TURBOchannel framebuffer card (1024x864x8)
1844 used mainly in the MIPS-based DECstation series.
1845
1846config FB_PMAGB_B
1847 tristate "PMAGB-B TURBOchannel framebuffer support"
1848 depends on FB && TC
1849 select FB_CFB_FILLRECT
1850 select FB_CFB_COPYAREA
1851 select FB_CFB_IMAGEBLIT
1852 help
1853 Support for the PMAGB-B TURBOchannel framebuffer card used mainly
1854 in the MIPS-based DECstation series. The card is currently only
1855 supported in 1280x1024x8 mode.
1856
1857config FB_MAXINE
1858 bool "Maxine (Personal DECstation) onboard framebuffer support"
1859 depends on (FB = y) && MACH_DECSTATION
1860 select FB_CFB_FILLRECT
1861 select FB_CFB_COPYAREA
1862 select FB_CFB_IMAGEBLIT
1863 help
1864 Support for the onboard framebuffer (1024x768x8) in the Personal
1865 DECstation series (Personal DECstation 5000/20, /25, /33, /50,
1866 Codename "Maxine").
1867
1868config FB_G364
1869 bool "G364 frame buffer support"
1870 depends on (FB = y) && (MIPS_MAGNUM_4000 || OLIVETTI_M700)
1871 select FB_CFB_FILLRECT
1872 select FB_CFB_COPYAREA
1873 select FB_CFB_IMAGEBLIT
1874 help
1875 The G364 driver is the framebuffer used in MIPS Magnum 4000 and
1876 Olivetti M700-10 systems.
1877
1878config FB_68328
1879 bool "Motorola 68328 native frame buffer support"
1880 depends on (FB = y) && (M68328 || M68EZ328 || M68VZ328)
1881 select FB_CFB_FILLRECT
1882 select FB_CFB_COPYAREA
1883 select FB_CFB_IMAGEBLIT
1884 help
1885 Say Y here if you want to support the built-in frame buffer of
1886 the Motorola 68328 CPU family.
1887
1888config FB_PXA168
1889 tristate "PXA168/910 LCD framebuffer support"
1890 depends on FB && (CPU_PXA168 || CPU_PXA910)
1891 select FB_CFB_FILLRECT
1892 select FB_CFB_COPYAREA
1893 select FB_CFB_IMAGEBLIT
1894 ---help---
1895 Frame buffer driver for the built-in LCD controller in the Marvell
1896 MMP processor.
1897
1898config FB_PXA
1899 tristate "PXA LCD framebuffer support"
1900 depends on FB && ARCH_PXA
1901 select FB_CFB_FILLRECT
1902 select FB_CFB_COPYAREA
1903 select FB_CFB_IMAGEBLIT
1904 ---help---
1905 Frame buffer driver for the built-in LCD controller in the Intel
1906 PXA2x0 processor.
1907
1908 This driver is also available as a module ( = code which can be
1909 inserted and removed from the running kernel whenever you want). The
1910 module will be called pxafb. If you want to compile it as a module,
1911 say M here and read <file:Documentation/kbuild/modules.txt>.
1912
1913 If unsure, say N.
1914
1915config FB_PXA_OVERLAY
1916 bool "Support PXA27x/PXA3xx Overlay(s) as framebuffer"
1917 default n
1918 depends on FB_PXA && (PXA27x || PXA3xx)
1919
1920config FB_PXA_SMARTPANEL
1921 bool "PXA Smartpanel LCD support"
1922 default n
1923 depends on FB_PXA
1924
1925config FB_PXA_PARAMETERS
1926 bool "PXA LCD command line parameters"
1927 default n
1928 depends on FB_PXA
1929 ---help---
1930 Enable the use of kernel command line or module parameters
1931 to configure the physical properties of the LCD panel when
1932 using the PXA LCD driver.
1933
1934 This option allows you to override the panel parameters
1935 supplied by the platform in order to support multiple
1936 different models of flatpanel. If you will only be using a
1937 single model of flatpanel then you can safely leave this
1938 option disabled.
1939
1940 <file:Documentation/fb/pxafb.txt> describes the available parameters.
1941
1942config PXA3XX_GCU
1943 tristate "PXA3xx 2D graphics accelerator driver"
1944 depends on FB_PXA
1945 help
1946 Kernelspace driver for the 2D graphics controller unit (GCU)
1947 found on PXA3xx processors. There is a counterpart driver in the
1948 DirectFB suite, see http://www.directfb.org/
1949
1950 If you compile this as a module, it will be called pxa3xx_gcu.
1951
1952config FB_MBX
1953 tristate "2700G LCD framebuffer support"
1954 depends on FB && ARCH_PXA
1955 select FB_CFB_FILLRECT
1956 select FB_CFB_COPYAREA
1957 select FB_CFB_IMAGEBLIT
1958 ---help---
1959 Framebuffer driver for the Intel 2700G (Marathon) Graphics
1960 Accelerator
1961
1962config FB_MBX_DEBUG
1963 bool "Enable debugging info via debugfs"
1964 depends on FB_MBX && DEBUG_FS
1965 default n
1966 ---help---
1967 Enable this if you want debugging information using the debug
1968 filesystem (debugfs)
1969
1970 If unsure, say N.
1971
1972config FB_FSL_DIU
1973 tristate "Freescale DIU framebuffer support"
1974 depends on FB && FSL_SOC
1975 select FB_MODE_HELPERS
1976 select FB_CFB_FILLRECT
1977 select FB_CFB_COPYAREA
1978 select FB_CFB_IMAGEBLIT
1979 select PPC_LIB_RHEAP
1980 ---help---
1981 Framebuffer driver for the Freescale SoC DIU
1982
1983config FB_W100
1984 tristate "W100 frame buffer support"
1985 depends on FB && ARCH_PXA
1986 select FB_CFB_FILLRECT
1987 select FB_CFB_COPYAREA
1988 select FB_CFB_IMAGEBLIT
1989 ---help---
1990 Frame buffer driver for the w100 as found on the Sharp SL-Cxx series.
1991 It can also drive the w3220 chip found on iPAQ hx4700.
1992
1993 This driver is also available as a module ( = code which can be
1994 inserted and removed from the running kernel whenever you want). The
1995 module will be called w100fb. If you want to compile it as a module,
1996 say M here and read <file:Documentation/kbuild/modules.txt>.
1997
1998 If unsure, say N.
1999
2000config FB_SH_MOBILE_LCDC
2001 tristate "SuperH Mobile LCDC framebuffer support"
2002 depends on FB && (SUPERH || ARCH_SHMOBILE) && HAVE_CLK
2003 select FB_SYS_FILLRECT
2004 select FB_SYS_COPYAREA
2005 select FB_SYS_IMAGEBLIT
2006 select FB_SYS_FOPS
2007 select FB_DEFERRED_IO
2008 select FB_BACKLIGHT
2009 select SH_MIPI_DSI if SH_LCD_MIPI_DSI
2010 ---help---
2011 Frame buffer driver for the on-chip SH-Mobile LCD controller.
2012
2013config FB_SH_MOBILE_HDMI
2014 tristate "SuperH Mobile HDMI controller support"
2015 depends on FB_SH_MOBILE_LCDC
2016 select FB_MODE_HELPERS
2017 select SOUND
2018 select SND
2019 select SND_SOC
2020 ---help---
2021 Driver for the on-chip SH-Mobile HDMI controller.
2022
2023config FB_TMIO
2024 tristate "Toshiba Mobile IO FrameBuffer support"
2025 depends on FB && MFD_CORE
2026 select FB_CFB_FILLRECT
2027 select FB_CFB_COPYAREA
2028 select FB_CFB_IMAGEBLIT
2029 ---help---
2030 Frame buffer driver for the Toshiba Mobile IO integrated as found
2031 on the Sharp SL-6000 series
2032
2033 This driver is also available as a module ( = code which can be
2034 inserted and removed from the running kernel whenever you want). The
2035 module will be called tmiofb. If you want to compile it as a module,
2036 say M here and read <file:Documentation/kbuild/modules.txt>.
2037
2038 If unsure, say N.
2039
2040config FB_TMIO_ACCELL
2041 bool "tmiofb acceleration"
2042 depends on FB_TMIO
2043 default y
2044
2045config FB_S3C
2046 tristate "Samsung S3C framebuffer support"
2047 depends on FB && (CPU_S3C2416 || ARCH_S3C64XX || ARCH_S5P64X0 || \
2048 ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
2049 select FB_CFB_FILLRECT
2050 select FB_CFB_COPYAREA
2051 select FB_CFB_IMAGEBLIT
2052 ---help---
2053 Frame buffer driver for the built-in FB controller in the Samsung
2054 SoC line from the S3C2443 onwards, including the S3C2416, S3C2450,
2055 and the S3C64XX series such as the S3C6400 and S3C6410.
2056
2057 These chips all have the same basic framebuffer design with the
2058 actual capabilities depending on the chip. For instance the S3C6400
2059 and S3C6410 support 4 hardware windows whereas the S3C24XX series
2060 currently only have two.
2061
2062 Currently the support is only for the S3C6400 and S3C6410 SoCs.
2063
2064config FB_S3C_DEBUG_REGWRITE
2065 bool "Debug register writes"
2066 depends on FB_S3C
2067 ---help---
2068 Show all register writes via pr_debug()
2069
2070config FB_S3C2410
2071 tristate "S3C2410 LCD framebuffer support"
2072 depends on FB && ARCH_S3C24XX
2073 select FB_CFB_FILLRECT
2074 select FB_CFB_COPYAREA
2075 select FB_CFB_IMAGEBLIT
2076 ---help---
2077 Frame buffer driver for the built-in LCD controller in the Samsung
2078 S3C2410 processor.
2079
2080 This driver is also available as a module ( = code which can be
2081 inserted and removed from the running kernel whenever you want). The
2082 module will be called s3c2410fb. If you want to compile it as a module,
2083 say M here and read <file:Documentation/kbuild/modules.txt>.
2084
2085 If unsure, say N.
2086config FB_S3C2410_DEBUG
2087 bool "S3C2410 lcd debug messages"
2088 depends on FB_S3C2410
2089 help
2090 Turn on debugging messages. Note that you can set/unset at run time
2091 through sysfs
2092
2093config FB_NUC900
2094 bool "NUC900 LCD framebuffer support"
2095 depends on FB && ARCH_W90X900
2096 select FB_CFB_FILLRECT
2097 select FB_CFB_COPYAREA
2098 select FB_CFB_IMAGEBLIT
2099 ---help---
2100 Frame buffer driver for the built-in LCD controller in the Nuvoton
2101 NUC900 processor
2102
2103config GPM1040A0_320X240
2104 bool "Giantplus Technology GPM1040A0 320x240 Color TFT LCD"
2105 depends on FB_NUC900
2106
2107config FB_SM501
2108 tristate "Silicon Motion SM501 framebuffer support"
2109 depends on FB && MFD_SM501
2110 select FB_CFB_FILLRECT
2111 select FB_CFB_COPYAREA
2112 select FB_CFB_IMAGEBLIT
2113 ---help---
2114 Frame buffer driver for the CRT and LCD controllers in the Silicon
2115 Motion SM501.
2116
2117 This driver is also available as a module ( = code which can be
2118 inserted and removed from the running kernel whenever you want). The
2119 module will be called sm501fb. If you want to compile it as a module,
2120 say M here and read <file:Documentation/kbuild/modules.txt>.
2121
2122 If unsure, say N.
2123
2124config FB_SMSCUFX
2125 tristate "SMSC UFX6000/7000 USB Framebuffer support"
2126 depends on FB && USB
2127 select FB_MODE_HELPERS
2128 select FB_SYS_FILLRECT
2129 select FB_SYS_COPYAREA
2130 select FB_SYS_IMAGEBLIT
2131 select FB_SYS_FOPS
2132 select FB_DEFERRED_IO
2133 ---help---
2134 This is a kernel framebuffer driver for SMSC UFX USB devices.
2135 Supports fbdev clients like xf86-video-fbdev, kdrive, fbi, and
2136 mplayer -vo fbdev. Supports both UFX6000 (USB 2.0) and UFX7000
2137 (USB 3.0) devices.
2138 To compile as a module, choose M here: the module name is smscufx.
2139
2140config FB_UDL
2141 tristate "Displaylink USB Framebuffer support"
2142 depends on FB && USB
2143 select FB_MODE_HELPERS
2144 select FB_SYS_FILLRECT
2145 select FB_SYS_COPYAREA
2146 select FB_SYS_IMAGEBLIT
2147 select FB_SYS_FOPS
2148 select FB_DEFERRED_IO
2149 ---help---
2150 This is a kernel framebuffer driver for DisplayLink USB devices.
2151 Supports fbdev clients like xf86-video-fbdev, kdrive, fbi, and
2152 mplayer -vo fbdev. Supports all USB 2.0 era DisplayLink devices.
2153 To compile as a module, choose M here: the module name is udlfb.
2154
2155config FB_IBM_GXT4500
2156 tristate "Framebuffer support for IBM GXT4000P/4500P/6000P/6500P adaptors"
2157 depends on FB && PPC
2158 select FB_CFB_FILLRECT
2159 select FB_CFB_COPYAREA
2160 select FB_CFB_IMAGEBLIT
2161 ---help---
2162 Say Y here to enable support for the IBM GXT4000P/6000P and
2163 GXT4500P/6500P display adaptor based on Raster Engine RC1000,
2164 found on some IBM System P (pSeries) machines. This driver
2165 doesn't use Geometry Engine GT1000.
2166
2167config FB_PS3
2168 tristate "PS3 GPU framebuffer driver"
2169 depends on FB && PS3_PS3AV
2170 select FB_SYS_FILLRECT
2171 select FB_SYS_COPYAREA
2172 select FB_SYS_IMAGEBLIT
2173 select FB_SYS_FOPS
2174 select VT_HW_CONSOLE_BINDING if FRAMEBUFFER_CONSOLE
2175 ---help---
2176 Include support for the virtual frame buffer in the PS3 platform.
2177
2178config FB_PS3_DEFAULT_SIZE_M
2179 int "PS3 default frame buffer size (in MiB)"
2180 depends on FB_PS3
2181 default 9
2182 ---help---
2183 This is the default size (in MiB) of the virtual frame buffer in
2184 the PS3.
2185 The default value can be overridden on the kernel command line
2186 using the "ps3fb" option (e.g. "ps3fb=9M");
2187
2188config FB_XILINX
2189 tristate "Xilinx frame buffer support"
2190 depends on FB && (XILINX_VIRTEX || MICROBLAZE || ARCH_ZYNQ)
2191 select FB_CFB_FILLRECT
2192 select FB_CFB_COPYAREA
2193 select FB_CFB_IMAGEBLIT
2194 ---help---
2195 Include support for the Xilinx ML300/ML403 reference design
2196 framebuffer. ML300 carries a 640*480 LCD display on the board,
2197 ML403 uses a standard DB15 VGA connector.
2198
2199config FB_GOLDFISH
2200 tristate "Goldfish Framebuffer"
2201 depends on FB && HAS_DMA
2202 select FB_CFB_FILLRECT
2203 select FB_CFB_COPYAREA
2204 select FB_CFB_IMAGEBLIT
2205 ---help---
2206 Framebuffer driver for Goldfish Virtual Platform
2207
2208config FB_COBALT
2209 tristate "Cobalt server LCD frame buffer support"
2210 depends on FB && (MIPS_COBALT || MIPS_SEAD3)
2211
2212config FB_SH7760
2213 bool "SH7760/SH7763/SH7720/SH7721 LCDC support"
2214 depends on FB && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \
2215 || CPU_SUBTYPE_SH7720 || CPU_SUBTYPE_SH7721)
2216 select FB_CFB_FILLRECT
2217 select FB_CFB_COPYAREA
2218 select FB_CFB_IMAGEBLIT
2219 ---help---
2220 Support for the SH7760/SH7763/SH7720/SH7721 integrated
2221 (D)STN/TFT LCD Controller.
2222 Supports display resolutions up to 1024x1024 pixel, grayscale and
2223 color operation, with depths ranging from 1 bpp to 8 bpp monochrome
2224 and 8, 15 or 16 bpp color; 90 degrees clockwise display rotation for
2225 panels <= 320 pixel horizontal resolution.
2226
2227config FB_DA8XX
2228 tristate "DA8xx/OMAP-L1xx/AM335x Framebuffer support"
2229 depends on FB && (ARCH_DAVINCI_DA8XX || SOC_AM33XX)
2230 select FB_CFB_FILLRECT
2231 select FB_CFB_COPYAREA
2232 select FB_CFB_IMAGEBLIT
2233 select FB_CFB_REV_PIXELS_IN_BYTE
2234 select FB_MODE_HELPERS
2235 select VIDEOMODE_HELPERS
2236 ---help---
2237 This is the frame buffer device driver for the TI LCD controller
2238 found on DA8xx/OMAP-L1xx/AM335x SoCs.
2239 If unsure, say N.
2240
2241config FB_VIRTUAL
2242 tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)"
2243 depends on FB
2244 select FB_SYS_FILLRECT
2245 select FB_SYS_COPYAREA
2246 select FB_SYS_IMAGEBLIT
2247 select FB_SYS_FOPS
2248 ---help---
2249 This is a `virtual' frame buffer device. It operates on a chunk of
2250 unswappable kernel memory instead of on the memory of a graphics
2251 board. This means you cannot see any output sent to this frame
2252 buffer device, while it does consume precious memory. The main use
2253 of this frame buffer device is testing and debugging the frame
2254 buffer subsystem. Do NOT enable it for normal systems! To protect
2255 the innocent, it has to be enabled explicitly at boot time using the
2256 kernel option `video=vfb:'.
2257
2258 To compile this driver as a module, choose M here: the
2259 module will be called vfb. In order to load it, you must use
2260 the vfb_enable=1 option.
2261
2262 If unsure, say N.
2263
2264config XEN_FBDEV_FRONTEND
2265 tristate "Xen virtual frame buffer support"
2266 depends on FB && XEN
2267 select FB_SYS_FILLRECT
2268 select FB_SYS_COPYAREA
2269 select FB_SYS_IMAGEBLIT
2270 select FB_SYS_FOPS
2271 select FB_DEFERRED_IO
2272 select INPUT_XEN_KBDDEV_FRONTEND if INPUT_MISC
2273 select XEN_XENBUS_FRONTEND
2274 default y
2275 help
2276 This driver implements the front-end of the Xen virtual
2277 frame buffer driver. It communicates with a back-end
2278 in another domain.
2279
2280config FB_METRONOME
2281 tristate "E-Ink Metronome/8track controller support"
2282 depends on FB
2283 select FB_SYS_FILLRECT
2284 select FB_SYS_COPYAREA
2285 select FB_SYS_IMAGEBLIT
2286 select FB_SYS_FOPS
2287 select FB_DEFERRED_IO
2288 help
2289 This driver implements support for the E-Ink Metronome
2290 controller. The pre-release name for this device was 8track
2291 and could also have been called by some vendors as PVI-nnnn.
2292
2293config FB_MB862XX
2294 tristate "Fujitsu MB862xx GDC support"
2295 depends on FB
2296 depends on PCI || (OF && PPC)
2297 select FB_CFB_FILLRECT
2298 select FB_CFB_COPYAREA
2299 select FB_CFB_IMAGEBLIT
2300 ---help---
2301 Frame buffer driver for Fujitsu Carmine/Coral-P(A)/Lime controllers.
2302
2303choice
2304 prompt "GDC variant"
2305 depends on FB_MB862XX
2306
2307config FB_MB862XX_PCI_GDC
2308 bool "Carmine/Coral-P(A) GDC"
2309 depends on PCI
2310 ---help---
2311 This enables framebuffer support for Fujitsu Carmine/Coral-P(A)
2312 PCI graphics controller devices.
2313
2314config FB_MB862XX_LIME
2315 bool "Lime GDC"
2316 depends on OF && PPC
2317 select FB_FOREIGN_ENDIAN
2318 select FB_LITTLE_ENDIAN
2319 ---help---
2320 Framebuffer support for Fujitsu Lime GDC on host CPU bus.
2321
2322endchoice
2323
2324config FB_MB862XX_I2C
2325 bool "Support I2C bus on MB862XX GDC"
2326 depends on FB_MB862XX && I2C
2327 default y
2328 help
2329 Selecting this option adds Coral-P(A)/Lime GDC I2C bus adapter
2330 driver to support accessing I2C devices on controller's I2C bus.
2331 These are usually some video decoder chips.
2332
2333config FB_EP93XX
2334 tristate "EP93XX frame buffer support"
2335 depends on FB && ARCH_EP93XX
2336 select FB_CFB_FILLRECT
2337 select FB_CFB_COPYAREA
2338 select FB_CFB_IMAGEBLIT
2339 ---help---
2340 Framebuffer driver for the Cirrus Logic EP93XX series of processors.
2341 This driver is also available as a module. The module will be called
2342 ep93xx-fb.
2343
2344config FB_PRE_INIT_FB
2345 bool "Don't reinitialize, use bootloader's GDC/Display configuration"
2346 depends on FB && FB_MB862XX_LIME
2347 ---help---
2348 Select this option if display contents should be inherited as set by
2349 the bootloader.
2350
2351config FB_MSM
2352 tristate "MSM Framebuffer support"
2353 depends on FB && ARCH_MSM
2354 select FB_CFB_FILLRECT
2355 select FB_CFB_COPYAREA
2356 select FB_CFB_IMAGEBLIT
2357
2358config FB_MX3
2359 tristate "MX3 Framebuffer support"
2360 depends on FB && MX3_IPU
2361 select FB_CFB_FILLRECT
2362 select FB_CFB_COPYAREA
2363 select FB_CFB_IMAGEBLIT
2364 default y
2365 help
2366 This is a framebuffer device for the i.MX31 LCD Controller. So
2367 far only synchronous displays are supported. If you plan to use
2368 an LCD display with your i.MX31 system, say Y here.
2369
2370config FB_BROADSHEET
2371 tristate "E-Ink Broadsheet/Epson S1D13521 controller support"
2372 depends on FB
2373 select FB_SYS_FILLRECT
2374 select FB_SYS_COPYAREA
2375 select FB_SYS_IMAGEBLIT
2376 select FB_SYS_FOPS
2377 select FB_DEFERRED_IO
2378 help
2379 This driver implements support for the E-Ink Broadsheet
2380 controller. The release name for this device was Epson S1D13521
2381 and could also have been called by other names when coupled with
2382 a bridge adapter.
2383
2384config FB_AUO_K190X
2385 tristate "AUO-K190X EPD controller support"
2386 depends on FB
2387 select FB_SYS_FILLRECT
2388 select FB_SYS_COPYAREA
2389 select FB_SYS_IMAGEBLIT
2390 select FB_SYS_FOPS
2391 select FB_DEFERRED_IO
2392 help
2393 Provides support for epaper controllers from the K190X series
2394 of AUO. These controllers can be used to drive epaper displays
2395 from Sipix.
2396
2397 This option enables the common support, shared by the individual
2398 controller drivers. You will also have to enable the driver
2399 for the controller type used in your device.
2400
2401config FB_AUO_K1900
2402 tristate "AUO-K1900 EPD controller support"
2403 depends on FB && FB_AUO_K190X
2404 help
2405 This driver implements support for the AUO K1900 epd-controller.
2406 This controller can drive Sipix epaper displays but can only do
2407 serial updates, reducing the number of possible frames per second.
2408
2409config FB_AUO_K1901
2410 tristate "AUO-K1901 EPD controller support"
2411 depends on FB && FB_AUO_K190X
2412 help
2413 This driver implements support for the AUO K1901 epd-controller.
2414 This controller can drive Sipix epaper displays and supports
2415 concurrent updates, making higher frames per second possible.
2416
2417config FB_JZ4740
2418 tristate "JZ4740 LCD framebuffer support"
2419 depends on FB && MACH_JZ4740
2420 select FB_SYS_FILLRECT
2421 select FB_SYS_COPYAREA
2422 select FB_SYS_IMAGEBLIT
2423 help
2424 Framebuffer support for the JZ4740 SoC.
2425
2426config FB_MXS
2427 tristate "MXS LCD framebuffer support"
2428 depends on FB && ARCH_MXS
2429 select FB_CFB_FILLRECT
2430 select FB_CFB_COPYAREA
2431 select FB_CFB_IMAGEBLIT
2432 select FB_MODE_HELPERS
2433 select VIDEOMODE_HELPERS
2434 help
2435 Framebuffer support for the MXS SoC.
2436
2437config FB_PUV3_UNIGFX
2438 tristate "PKUnity v3 Unigfx framebuffer support"
2439 depends on FB && UNICORE32 && ARCH_PUV3
2440 select FB_SYS_FILLRECT
2441 select FB_SYS_COPYAREA
2442 select FB_SYS_IMAGEBLIT
2443 select FB_SYS_FOPS
2444 help
2445 Choose this option if you want to use the Unigfx device as a
2446 framebuffer device. Without the support of PCI & AGP.
2447
2448config FB_HYPERV
2449 tristate "Microsoft Hyper-V Synthetic Video support"
2450 depends on FB && HYPERV
2451 select FB_CFB_FILLRECT
2452 select FB_CFB_COPYAREA
2453 select FB_CFB_IMAGEBLIT
2454 help
2455 This framebuffer driver supports Microsoft Hyper-V Synthetic Video.
2456
2457config FB_SIMPLE
2458 bool "Simple framebuffer support"
2459 depends on (FB = y)
2460 select FB_CFB_FILLRECT
2461 select FB_CFB_COPYAREA
2462 select FB_CFB_IMAGEBLIT
2463 help
2464 Say Y if you want support for a simple frame-buffer.
2465
2466 This driver assumes that the display hardware has been initialized
2467 before the kernel boots, and the kernel will simply render to the
2468 pre-allocated frame buffer surface.
2469
2470 Configuration re: surface address, size, and format must be provided
2471 through device tree, or plain old platform data.
2472
2473source "drivers/video/omap/Kconfig"
2474source "drivers/video/omap2/Kconfig"
2475source "drivers/video/exynos/Kconfig"
2476source "drivers/video/mmp/Kconfig"
2477source "drivers/video/backlight/Kconfig"
2478
2479if VT 44if VT
2480 source "drivers/video/console/Kconfig" 45 source "drivers/video/console/Kconfig"
2481endif 46endif
2482 47
2483if FB || SGI_NEWPORT_CONSOLE 48if FB || SGI_NEWPORT_CONSOLE
2484 source "drivers/video/logo/Kconfig" 49 source "drivers/video/logo/Kconfig"
2485endif
2486 50
2487config FB_SH_MOBILE_MERAM 51endif
2488 tristate "SuperH Mobile MERAM read ahead support"
2489 depends on (SUPERH || ARCH_SHMOBILE)
2490 select GENERIC_ALLOCATOR
2491 ---help---
2492 Enable MERAM support for the SuperH controller.
2493
2494 This will allow for caching of the framebuffer to provide more
2495 reliable access under heavy main memory bus traffic situations.
2496 Up to 4 memory channels can be configured, allowing 4 RGB or
2497 2 YCbCr framebuffers to be configured.
2498 52
2499config FB_SSD1307
2500 tristate "Solomon SSD1307 framebuffer support"
2501 depends on FB && I2C
2502 depends on OF
2503 depends on GPIOLIB
2504 select FB_SYS_FOPS
2505 select FB_SYS_FILLRECT
2506 select FB_SYS_COPYAREA
2507 select FB_SYS_IMAGEBLIT
2508 select FB_DEFERRED_IO
2509 select PWM
2510 help
2511 This driver implements support for the Solomon SSD1307
2512 OLED controller over I2C.
2513 53
2514endmenu 54endmenu
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 1be26fe10592..9ad3c17d6456 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -1,175 +1,11 @@
1# Makefile for the Linux video drivers.
2# 5 Aug 1999, James Simmons, <mailto:jsimmons@users.sf.net>
3# Rewritten to use lists instead of if-statements.
4
5# Each configuration option enables a list of files.
6
7obj-$(CONFIG_VGASTATE) += vgastate.o 1obj-$(CONFIG_VGASTATE) += vgastate.o
8obj-$(CONFIG_HDMI) += hdmi.o 2obj-$(CONFIG_HDMI) += hdmi.o
9obj-y += fb_notify.o
10obj-$(CONFIG_FB) += fb.o
11fb-y := fbmem.o fbmon.o fbcmap.o fbsysfs.o \
12 modedb.o fbcvt.o
13fb-objs := $(fb-y)
14 3
15obj-$(CONFIG_VT) += console/ 4obj-$(CONFIG_VT) += console/
16obj-$(CONFIG_LOGO) += logo/ 5obj-$(CONFIG_LOGO) += logo/
17obj-y += backlight/ 6obj-y += backlight/
18 7
19obj-$(CONFIG_EXYNOS_VIDEO) += exynos/ 8obj-y += fbdev/
20
21obj-$(CONFIG_FB_CFB_FILLRECT) += cfbfillrect.o
22obj-$(CONFIG_FB_CFB_COPYAREA) += cfbcopyarea.o
23obj-$(CONFIG_FB_CFB_IMAGEBLIT) += cfbimgblt.o
24obj-$(CONFIG_FB_SYS_FILLRECT) += sysfillrect.o
25obj-$(CONFIG_FB_SYS_COPYAREA) += syscopyarea.o
26obj-$(CONFIG_FB_SYS_IMAGEBLIT) += sysimgblt.o
27obj-$(CONFIG_FB_SYS_FOPS) += fb_sys_fops.o
28obj-$(CONFIG_FB_SVGALIB) += svgalib.o
29obj-$(CONFIG_FB_MACMODES) += macmodes.o
30obj-$(CONFIG_FB_DDC) += fb_ddc.o
31obj-$(CONFIG_FB_DEFERRED_IO) += fb_defio.o
32obj-$(CONFIG_FB_WMT_GE_ROPS) += wmt_ge_rops.o
33
34# Hardware specific drivers go first
35obj-$(CONFIG_FB_AMIGA) += amifb.o c2p_planar.o
36obj-$(CONFIG_FB_ARC) += arcfb.o
37obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o
38obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o
39obj-$(CONFIG_FB_GRVGA) += grvga.o
40obj-$(CONFIG_FB_PM2) += pm2fb.o
41obj-$(CONFIG_FB_PM3) += pm3fb.o
42
43obj-$(CONFIG_FB_I740) += i740fb.o
44obj-$(CONFIG_FB_MATROX) += matrox/
45obj-$(CONFIG_FB_RIVA) += riva/
46obj-$(CONFIG_FB_NVIDIA) += nvidia/
47obj-$(CONFIG_FB_ATY) += aty/ macmodes.o
48obj-$(CONFIG_FB_ATY128) += aty/ macmodes.o
49obj-$(CONFIG_FB_RADEON) += aty/
50obj-$(CONFIG_FB_SIS) += sis/
51obj-$(CONFIG_FB_VIA) += via/
52obj-$(CONFIG_FB_KYRO) += kyro/
53obj-$(CONFIG_FB_SAVAGE) += savage/
54obj-$(CONFIG_FB_GEODE) += geode/
55obj-$(CONFIG_FB_MBX) += mbx/
56obj-$(CONFIG_FB_NEOMAGIC) += neofb.o
57obj-$(CONFIG_FB_3DFX) += tdfxfb.o
58obj-$(CONFIG_FB_CONTROL) += controlfb.o
59obj-$(CONFIG_FB_PLATINUM) += platinumfb.o
60obj-$(CONFIG_FB_VALKYRIE) += valkyriefb.o
61obj-$(CONFIG_FB_CT65550) += chipsfb.o
62obj-$(CONFIG_FB_IMSTT) += imsttfb.o
63obj-$(CONFIG_FB_FM2) += fm2fb.o
64obj-$(CONFIG_FB_VT8623) += vt8623fb.o
65obj-$(CONFIG_FB_TRIDENT) += tridentfb.o
66obj-$(CONFIG_FB_LE80578) += vermilion/
67obj-$(CONFIG_FB_S3) += s3fb.o
68obj-$(CONFIG_FB_ARK) += arkfb.o
69obj-$(CONFIG_FB_STI) += stifb.o
70obj-$(CONFIG_FB_FFB) += ffb.o sbuslib.o
71obj-$(CONFIG_FB_CG6) += cg6.o sbuslib.o
72obj-$(CONFIG_FB_CG3) += cg3.o sbuslib.o
73obj-$(CONFIG_FB_BW2) += bw2.o sbuslib.o
74obj-$(CONFIG_FB_CG14) += cg14.o sbuslib.o
75obj-$(CONFIG_FB_P9100) += p9100.o sbuslib.o
76obj-$(CONFIG_FB_TCX) += tcx.o sbuslib.o
77obj-$(CONFIG_FB_LEO) += leo.o sbuslib.o
78obj-$(CONFIG_FB_ACORN) += acornfb.o
79obj-$(CONFIG_FB_ATARI) += atafb.o c2p_iplan2.o atafb_mfb.o \
80 atafb_iplan2p2.o atafb_iplan2p4.o atafb_iplan2p8.o
81obj-$(CONFIG_FB_MAC) += macfb.o
82obj-$(CONFIG_FB_HECUBA) += hecubafb.o
83obj-$(CONFIG_FB_N411) += n411.o
84obj-$(CONFIG_FB_HGA) += hgafb.o
85obj-$(CONFIG_FB_XVR500) += sunxvr500.o
86obj-$(CONFIG_FB_XVR2500) += sunxvr2500.o
87obj-$(CONFIG_FB_XVR1000) += sunxvr1000.o
88obj-$(CONFIG_FB_IGA) += igafb.o
89obj-$(CONFIG_FB_APOLLO) += dnfb.o
90obj-$(CONFIG_FB_Q40) += q40fb.o
91obj-$(CONFIG_FB_TGA) += tgafb.o
92obj-$(CONFIG_FB_HP300) += hpfb.o
93obj-$(CONFIG_FB_G364) += g364fb.o
94obj-$(CONFIG_FB_EP93XX) += ep93xx-fb.o
95obj-$(CONFIG_FB_SA1100) += sa1100fb.o
96obj-$(CONFIG_FB_HIT) += hitfb.o
97obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o
98obj-$(CONFIG_FB_PVR2) += pvr2fb.o
99obj-$(CONFIG_FB_VOODOO1) += sstfb.o
100obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o
101obj-$(CONFIG_FB_GOLDFISH) += goldfishfb.o
102obj-$(CONFIG_FB_68328) += 68328fb.o
103obj-$(CONFIG_FB_GBE) += gbefb.o
104obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o
105obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o
106obj-$(CONFIG_FB_PXA) += pxafb.o
107obj-$(CONFIG_FB_PXA168) += pxa168fb.o
108obj-$(CONFIG_PXA3XX_GCU) += pxa3xx-gcu.o
109obj-$(CONFIG_MMP_DISP) += mmp/
110obj-$(CONFIG_FB_W100) += w100fb.o
111obj-$(CONFIG_FB_TMIO) += tmiofb.o
112obj-$(CONFIG_FB_AU1100) += au1100fb.o
113obj-$(CONFIG_FB_AU1200) += au1200fb.o
114obj-$(CONFIG_FB_VT8500) += vt8500lcdfb.o
115obj-$(CONFIG_FB_WM8505) += wm8505fb.o
116obj-$(CONFIG_FB_PMAG_AA) += pmag-aa-fb.o
117obj-$(CONFIG_FB_PMAG_BA) += pmag-ba-fb.o
118obj-$(CONFIG_FB_PMAGB_B) += pmagb-b-fb.o
119obj-$(CONFIG_FB_MAXINE) += maxinefb.o
120obj-$(CONFIG_FB_METRONOME) += metronomefb.o
121obj-$(CONFIG_FB_BROADSHEET) += broadsheetfb.o
122obj-$(CONFIG_FB_AUO_K190X) += auo_k190x.o
123obj-$(CONFIG_FB_AUO_K1900) += auo_k1900fb.o
124obj-$(CONFIG_FB_AUO_K1901) += auo_k1901fb.o
125obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o
126obj-$(CONFIG_FB_SH7760) += sh7760fb.o
127obj-$(CONFIG_FB_IMX) += imxfb.o
128obj-$(CONFIG_FB_S3C) += s3c-fb.o
129obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o
130obj-$(CONFIG_FB_FSL_DIU) += fsl-diu-fb.o
131obj-$(CONFIG_FB_COBALT) += cobalt_lcdfb.o
132obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o
133obj-$(CONFIG_FB_PS3) += ps3fb.o
134obj-$(CONFIG_FB_SM501) += sm501fb.o
135obj-$(CONFIG_FB_UDL) += udlfb.o
136obj-$(CONFIG_FB_SMSCUFX) += smscufx.o
137obj-$(CONFIG_FB_XILINX) += xilinxfb.o
138obj-$(CONFIG_SH_MIPI_DSI) += sh_mipi_dsi.o
139obj-$(CONFIG_FB_SH_MOBILE_HDMI) += sh_mobile_hdmi.o
140obj-$(CONFIG_FB_SH_MOBILE_MERAM) += sh_mobile_meram.o
141obj-$(CONFIG_FB_SH_MOBILE_LCDC) += sh_mobile_lcdcfb.o
142obj-$(CONFIG_FB_OMAP) += omap/
143obj-y += omap2/
144obj-$(CONFIG_XEN_FBDEV_FRONTEND) += xen-fbfront.o
145obj-$(CONFIG_FB_CARMINE) += carminefb.o
146obj-$(CONFIG_FB_MB862XX) += mb862xx/
147obj-$(CONFIG_FB_MSM) += msm/
148obj-$(CONFIG_FB_NUC900) += nuc900fb.o
149obj-$(CONFIG_FB_JZ4740) += jz4740_fb.o
150obj-$(CONFIG_FB_PUV3_UNIGFX) += fb-puv3.o
151obj-$(CONFIG_FB_HYPERV) += hyperv_fb.o
152obj-$(CONFIG_FB_OPENCORES) += ocfb.o
153
154# Platform or fallback drivers go here
155obj-$(CONFIG_FB_UVESA) += uvesafb.o
156obj-$(CONFIG_FB_VESA) += vesafb.o
157obj-$(CONFIG_FB_EFI) += efifb.o
158obj-$(CONFIG_FB_VGA16) += vga16fb.o
159obj-$(CONFIG_FB_OF) += offb.o
160obj-$(CONFIG_FB_BF537_LQ035) += bf537-lq035.o
161obj-$(CONFIG_FB_BF54X_LQ043) += bf54x-lq043fb.o
162obj-$(CONFIG_FB_BFIN_LQ035Q1) += bfin-lq035q1-fb.o
163obj-$(CONFIG_FB_BFIN_T350MCQB) += bfin-t350mcqb-fb.o
164obj-$(CONFIG_FB_BFIN_7393) += bfin_adv7393fb.o
165obj-$(CONFIG_FB_MX3) += mx3fb.o
166obj-$(CONFIG_FB_DA8XX) += da8xx-fb.o
167obj-$(CONFIG_FB_MXS) += mxsfb.o
168obj-$(CONFIG_FB_SSD1307) += ssd1307fb.o
169obj-$(CONFIG_FB_SIMPLE) += simplefb.o
170
171# the test framebuffer is last
172obj-$(CONFIG_FB_VIRTUAL) += vfb.o
173 9
174obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o 10obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o
175ifeq ($(CONFIG_OF),y) 11ifeq ($(CONFIG_OF),y)
diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c
index 5f65ca3d8564..026fd1215933 100644
--- a/drivers/video/console/sticon.c
+++ b/drivers/video/console/sticon.c
@@ -46,7 +46,7 @@
46 46
47#include <asm/io.h> 47#include <asm/io.h>
48 48
49#include "../sticore.h" 49#include "../fbdev/sticore.h"
50 50
51/* switching to graphics mode */ 51/* switching to graphics mode */
52#define BLANK 0 52#define BLANK 0
diff --git a/drivers/video/console/sticore.c b/drivers/video/console/sticore.c
index cecd3de01c24..7da1ad03acb5 100644
--- a/drivers/video/console/sticore.c
+++ b/drivers/video/console/sticore.c
@@ -28,7 +28,7 @@
28#include <asm/cacheflush.h> 28#include <asm/cacheflush.h>
29#include <asm/grfioctl.h> 29#include <asm/grfioctl.h>
30 30
31#include "../sticore.h" 31#include "../fbdev/sticore.h"
32 32
33#define STI_DRIVERVERSION "Version 0.9b" 33#define STI_DRIVERVERSION "Version 0.9b"
34 34
diff --git a/drivers/video/68328fb.c b/drivers/video/fbdev/68328fb.c
index 552258c8f99d..552258c8f99d 100644
--- a/drivers/video/68328fb.c
+++ b/drivers/video/fbdev/68328fb.c
diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
new file mode 100644
index 000000000000..e1f47272fdea
--- /dev/null
+++ b/drivers/video/fbdev/Kconfig
@@ -0,0 +1,2474 @@
1#
2# fbdev configuration
3#
4
5menuconfig FB
6 tristate "Support for frame buffer devices"
7 ---help---
8 The frame buffer device provides an abstraction for the graphics
9 hardware. It represents the frame buffer of some video hardware and
10 allows application software to access the graphics hardware through
11 a well-defined interface, so the software doesn't need to know
12 anything about the low-level (hardware register) stuff.
13
14 Frame buffer devices work identically across the different
15 architectures supported by Linux and make the implementation of
16 application programs easier and more portable; at this point, an X
17 server exists which uses the frame buffer device exclusively.
18 On several non-X86 architectures, the frame buffer device is the
19 only way to use the graphics hardware.
20
21 The device is accessed through special device nodes, usually located
22 in the /dev directory, i.e. /dev/fb*.
23
24 You need an utility program called fbset to make full use of frame
25 buffer devices. Please read <file:Documentation/fb/framebuffer.txt>
26 and the Framebuffer-HOWTO at
27 <http://www.munted.org.uk/programming/Framebuffer-HOWTO-1.3.html> for more
28 information.
29
30 Say Y here and to the driver for your graphics board below if you
31 are compiling a kernel for a non-x86 architecture.
32
33 If you are compiling for the x86 architecture, you can say Y if you
34 want to play with it, but it is not essential. Please note that
35 running graphical applications that directly touch the hardware
36 (e.g. an accelerated X server) and that are not frame buffer
37 device-aware may cause unexpected results. If unsure, say N.
38
39config FIRMWARE_EDID
40 bool "Enable firmware EDID"
41 depends on FB
42 default n
43 ---help---
44 This enables access to the EDID transferred from the firmware.
45 On the i386, this is from the Video BIOS. Enable this if DDC/I2C
46 transfers do not work for your driver and if you are using
47 nvidiafb, i810fb or savagefb.
48
49 In general, choosing Y for this option is safe. If you
50 experience extremely long delays while booting before you get
51 something on your display, try setting this to N. Matrox cards in
52 combination with certain motherboards and monitors are known to
53 suffer from this problem.
54
55config FB_DDC
56 tristate
57 depends on FB
58 select I2C_ALGOBIT
59 select I2C
60 default n
61
62config FB_BOOT_VESA_SUPPORT
63 bool
64 depends on FB
65 default n
66 ---help---
67 If true, at least one selected framebuffer driver can take advantage
68 of VESA video modes set at an early boot stage via the vga= parameter.
69
70config FB_CFB_FILLRECT
71 tristate
72 depends on FB
73 default n
74 ---help---
75 Include the cfb_fillrect function for generic software rectangle
76 filling. This is used by drivers that don't provide their own
77 (accelerated) version.
78
79config FB_CFB_COPYAREA
80 tristate
81 depends on FB
82 default n
83 ---help---
84 Include the cfb_copyarea function for generic software area copying.
85 This is used by drivers that don't provide their own (accelerated)
86 version.
87
88config FB_CFB_IMAGEBLIT
89 tristate
90 depends on FB
91 default n
92 ---help---
93 Include the cfb_imageblit function for generic software image
94 blitting. This is used by drivers that don't provide their own
95 (accelerated) version.
96
97config FB_CFB_REV_PIXELS_IN_BYTE
98 bool
99 depends on FB
100 default n
101 ---help---
102 Allow generic frame-buffer functions to work on displays with 1, 2
103 and 4 bits per pixel depths which has opposite order of pixels in
104 byte order to bytes in long order.
105
106config FB_SYS_FILLRECT
107 tristate
108 depends on FB
109 default n
110 ---help---
111 Include the sys_fillrect function for generic software rectangle
112 filling. This is used by drivers that don't provide their own
113 (accelerated) version and the framebuffer is in system RAM.
114
115config FB_SYS_COPYAREA
116 tristate
117 depends on FB
118 default n
119 ---help---
120 Include the sys_copyarea function for generic software area copying.
121 This is used by drivers that don't provide their own (accelerated)
122 version and the framebuffer is in system RAM.
123
124config FB_SYS_IMAGEBLIT
125 tristate
126 depends on FB
127 default n
128 ---help---
129 Include the sys_imageblit function for generic software image
130 blitting. This is used by drivers that don't provide their own
131 (accelerated) version and the framebuffer is in system RAM.
132
133menuconfig FB_FOREIGN_ENDIAN
134 bool "Framebuffer foreign endianness support"
135 depends on FB
136 ---help---
137 This menu will let you enable support for the framebuffers with
138 non-native endianness (e.g. Little-Endian framebuffer on a
139 Big-Endian machine). Most probably you don't have such hardware,
140 so it's safe to say "n" here.
141
142choice
143 prompt "Choice endianness support"
144 depends on FB_FOREIGN_ENDIAN
145
146config FB_BOTH_ENDIAN
147 bool "Support for Big- and Little-Endian framebuffers"
148
149config FB_BIG_ENDIAN
150 bool "Support for Big-Endian framebuffers only"
151
152config FB_LITTLE_ENDIAN
153 bool "Support for Little-Endian framebuffers only"
154
155endchoice
156
157config FB_SYS_FOPS
158 tristate
159 depends on FB
160 default n
161
162config FB_DEFERRED_IO
163 bool
164 depends on FB
165
166config FB_HECUBA
167 tristate
168 depends on FB
169 depends on FB_DEFERRED_IO
170
171config FB_SVGALIB
172 tristate
173 depends on FB
174 default n
175 ---help---
176 Common utility functions useful to fbdev drivers of VGA-based
177 cards.
178
179config FB_MACMODES
180 tristate
181 depends on FB
182 default n
183
184config FB_BACKLIGHT
185 bool
186 depends on FB
187 select BACKLIGHT_LCD_SUPPORT
188 select BACKLIGHT_CLASS_DEVICE
189 default n
190
191config FB_MODE_HELPERS
192 bool "Enable Video Mode Handling Helpers"
193 depends on FB
194 default n
195 ---help---
196 This enables functions for handling video modes using the
197 Generalized Timing Formula and the EDID parser. A few drivers rely
198 on this feature such as the radeonfb, rivafb, and the i810fb. If
199 your driver does not take advantage of this feature, choosing Y will
200 just increase the kernel size by about 5K.
201
202config FB_TILEBLITTING
203 bool "Enable Tile Blitting Support"
204 depends on FB
205 default n
206 ---help---
207 This enables tile blitting. Tile blitting is a drawing technique
208 where the screen is divided into rectangular sections (tiles), whereas
209 the standard blitting divides the screen into pixels. Because the
210 default drawing element is a tile, drawing functions will be passed
211 parameters in terms of number of tiles instead of number of pixels.
212 For example, to draw a single character, instead of using bitmaps,
213 an index to an array of bitmaps will be used. To clear or move a
214 rectangular section of a screen, the rectangle will be described in
215 terms of number of tiles in the x- and y-axis.
216
217 This is particularly important to one driver, matroxfb. If
218 unsure, say N.
219
220comment "Frame buffer hardware drivers"
221 depends on FB
222
223config FB_GRVGA
224 tristate "Aeroflex Gaisler framebuffer support"
225 depends on FB && SPARC
226 select FB_CFB_FILLRECT
227 select FB_CFB_COPYAREA
228 select FB_CFB_IMAGEBLIT
229 ---help---
230 This enables support for the SVGACTRL framebuffer in the GRLIB IP library from Aeroflex Gaisler.
231
232config FB_CIRRUS
233 tristate "Cirrus Logic support"
234 depends on FB && (ZORRO || PCI)
235 select FB_CFB_FILLRECT
236 select FB_CFB_COPYAREA
237 select FB_CFB_IMAGEBLIT
238 ---help---
239 This enables support for Cirrus Logic GD542x/543x based boards on
240 Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum.
241
242 If you have a PCI-based system, this enables support for these
243 chips: GD-543x, GD-544x, GD-5480.
244
245 Please read the file <file:Documentation/fb/cirrusfb.txt>.
246
247 Say N unless you have such a graphics board or plan to get one
248 before you next recompile the kernel.
249
250config FB_PM2
251 tristate "Permedia2 support"
252 depends on FB && ((AMIGA && BROKEN) || PCI)
253 select FB_CFB_FILLRECT
254 select FB_CFB_COPYAREA
255 select FB_CFB_IMAGEBLIT
256 help
257 This is the frame buffer device driver for cards based on
258 the 3D Labs Permedia, Permedia 2 and Permedia 2V chips.
259 The driver was tested on the following cards:
260 Diamond FireGL 1000 PRO AGP
261 ELSA Gloria Synergy PCI
262 Appian Jeronimo PRO (both heads) PCI
263 3DLabs Oxygen ACX aka EONtronics Picasso P2 PCI
264 Techsource Raptor GFX-8P (aka Sun PGX-32) on SPARC
265 ASK Graphic Blaster Exxtreme AGP
266
267 To compile this driver as a module, choose M here: the
268 module will be called pm2fb.
269
270config FB_PM2_FIFO_DISCONNECT
271 bool "enable FIFO disconnect feature"
272 depends on FB_PM2 && PCI
273 help
274 Support the Permedia2 FIFO disconnect feature.
275
276config FB_ARMCLCD
277 tristate "ARM PrimeCell PL110 support"
278 depends on ARM || ARM64 || COMPILE_TEST
279 depends on FB && ARM_AMBA
280 select FB_CFB_FILLRECT
281 select FB_CFB_COPYAREA
282 select FB_CFB_IMAGEBLIT
283 help
284 This framebuffer device driver is for the ARM PrimeCell PL110
285 Colour LCD controller. ARM PrimeCells provide the building
286 blocks for System on a Chip devices.
287
288 If you want to compile this as a module (=code which can be
289 inserted into and removed from the running kernel), say M
290 here and read <file:Documentation/kbuild/modules.txt>. The module
291 will be called amba-clcd.
292
293config FB_ACORN
294 bool "Acorn VIDC support"
295 depends on (FB = y) && ARM && ARCH_ACORN
296 select FB_CFB_FILLRECT
297 select FB_CFB_COPYAREA
298 select FB_CFB_IMAGEBLIT
299 help
300 This is the frame buffer device driver for the Acorn VIDC graphics
301 hardware found in Acorn RISC PCs and other ARM-based machines. If
302 unsure, say N.
303
304config FB_CLPS711X
305 bool "CLPS711X LCD support"
306 depends on (FB = y) && ARM && ARCH_CLPS711X
307 select FB_CFB_FILLRECT
308 select FB_CFB_COPYAREA
309 select FB_CFB_IMAGEBLIT
310 help
311 Say Y to enable the Framebuffer driver for the CLPS7111 and
312 EP7212 processors.
313
314config FB_SA1100
315 bool "SA-1100 LCD support"
316 depends on (FB = y) && ARM && ARCH_SA1100
317 select FB_CFB_FILLRECT
318 select FB_CFB_COPYAREA
319 select FB_CFB_IMAGEBLIT
320 help
321 This is a framebuffer device for the SA-1100 LCD Controller.
322 See <http://www.linux-fbdev.org/> for information on framebuffer
323 devices.
324
325 If you plan to use the LCD display with your SA-1100 system, say
326 Y here.
327
328config FB_IMX
329 tristate "Freescale i.MX1/21/25/27 LCD support"
330 depends on FB && ARCH_MXC
331 select BACKLIGHT_LCD_SUPPORT
332 select LCD_CLASS_DEVICE
333 select FB_CFB_FILLRECT
334 select FB_CFB_COPYAREA
335 select FB_CFB_IMAGEBLIT
336 select FB_MODE_HELPERS
337 select VIDEOMODE_HELPERS
338
339config FB_CYBER2000
340 tristate "CyberPro 2000/2010/5000 support"
341 depends on FB && PCI && (BROKEN || !SPARC64)
342 select FB_CFB_FILLRECT
343 select FB_CFB_COPYAREA
344 select FB_CFB_IMAGEBLIT
345 help
346 This enables support for the Integraphics CyberPro 20x0 and 5000
347 VGA chips used in the Rebel.com Netwinder and other machines.
348 Say Y if you have a NetWinder or a graphics card containing this
349 device, otherwise say N.
350
351config FB_CYBER2000_DDC
352 bool "DDC for CyberPro support"
353 depends on FB_CYBER2000
354 select FB_DDC
355 default y
356 help
357 Say Y here if you want DDC support for your CyberPro graphics
358 card. This is only I2C bus support, driver does not use EDID.
359
360config FB_CYBER2000_I2C
361 bool "CyberPro 2000/2010/5000 I2C support"
362 depends on FB_CYBER2000 && I2C && ARCH_NETWINDER
363 select I2C_ALGOBIT
364 help
365 Enable support for the I2C video decoder interface on the
366 Integraphics CyberPro 20x0 and 5000 VGA chips. This is used
367 on the Netwinder machines for the SAA7111 video capture.
368
369config FB_APOLLO
370 bool
371 depends on (FB = y) && APOLLO
372 default y
373 select FB_CFB_FILLRECT
374 select FB_CFB_IMAGEBLIT
375
376config FB_Q40
377 bool
378 depends on (FB = y) && Q40
379 default y
380 select FB_CFB_FILLRECT
381 select FB_CFB_COPYAREA
382 select FB_CFB_IMAGEBLIT
383
384config FB_AMIGA
385 tristate "Amiga native chipset support"
386 depends on FB && AMIGA
387 help
388 This is the frame buffer device driver for the builtin graphics
389 chipset found in Amigas.
390
391 To compile this driver as a module, choose M here: the
392 module will be called amifb.
393
394config FB_AMIGA_OCS
395 bool "Amiga OCS chipset support"
396 depends on FB_AMIGA
397 help
398 This enables support for the original Agnus and Denise video chips,
399 found in the Amiga 1000 and most A500's and A2000's. If you intend
400 to run Linux on any of these systems, say Y; otherwise say N.
401
402config FB_AMIGA_ECS
403 bool "Amiga ECS chipset support"
404 depends on FB_AMIGA
405 help
406 This enables support for the Enhanced Chip Set, found in later
407 A500's, later A2000's, the A600, the A3000, the A3000T and CDTV. If
408 you intend to run Linux on any of these systems, say Y; otherwise
409 say N.
410
411config FB_AMIGA_AGA
412 bool "Amiga AGA chipset support"
413 depends on FB_AMIGA
414 help
415 This enables support for the Advanced Graphics Architecture (also
416 known as the AGA or AA) Chip Set, found in the A1200, A4000, A4000T
417 and CD32. If you intend to run Linux on any of these systems, say Y;
418 otherwise say N.
419
420config FB_FM2
421 bool "Amiga FrameMaster II/Rainbow II support"
422 depends on (FB = y) && ZORRO
423 select FB_CFB_FILLRECT
424 select FB_CFB_COPYAREA
425 select FB_CFB_IMAGEBLIT
426 help
427 This is the frame buffer device driver for the Amiga FrameMaster
428 card from BSC (exhibited 1992 but not shipped as a CBM product).
429
430config FB_ARC
431 tristate "Arc Monochrome LCD board support"
432 depends on FB && X86
433 select FB_SYS_FILLRECT
434 select FB_SYS_COPYAREA
435 select FB_SYS_IMAGEBLIT
436 select FB_SYS_FOPS
437 help
438 This enables support for the Arc Monochrome LCD board. The board
439 is based on the KS-108 lcd controller and is typically a matrix
440 of 2*n chips. This driver was tested with a 128x64 panel. This
441 driver supports it for use with x86 SBCs through a 16 bit GPIO
442 interface (8 bit data, 8 bit control). If you anticipate using
443 this driver, say Y or M; otherwise say N. You must specify the
444 GPIO IO address to be used for setting control and data.
445
446config FB_ATARI
447 bool "Atari native chipset support"
448 depends on (FB = y) && ATARI
449 select FB_CFB_FILLRECT
450 select FB_CFB_COPYAREA
451 select FB_CFB_IMAGEBLIT
452 help
453 This is the frame buffer device driver for the builtin graphics
454 chipset found in Ataris.
455
456config FB_OF
457 bool "Open Firmware frame buffer device support"
458 depends on (FB = y) && (PPC64 || PPC_OF) && (!PPC_PSERIES || PCI)
459 select FB_CFB_FILLRECT
460 select FB_CFB_COPYAREA
461 select FB_CFB_IMAGEBLIT
462 select FB_MACMODES
463 help
464 Say Y if you want support with Open Firmware for your graphics
465 board.
466
467config FB_CONTROL
468 bool "Apple \"control\" display support"
469 depends on (FB = y) && PPC_PMAC && PPC32
470 select FB_CFB_FILLRECT
471 select FB_CFB_COPYAREA
472 select FB_CFB_IMAGEBLIT
473 select FB_MACMODES
474 help
475 This driver supports a frame buffer for the graphics adapter in the
476 Power Macintosh 7300 and others.
477
478config FB_PLATINUM
479 bool "Apple \"platinum\" display support"
480 depends on (FB = y) && PPC_PMAC && PPC32
481 select FB_CFB_FILLRECT
482 select FB_CFB_COPYAREA
483 select FB_CFB_IMAGEBLIT
484 select FB_MACMODES
485 help
486 This driver supports a frame buffer for the "platinum" graphics
487 adapter in some Power Macintoshes.
488
489config FB_VALKYRIE
490 bool "Apple \"valkyrie\" display support"
491 depends on (FB = y) && (MAC || (PPC_PMAC && PPC32))
492 select FB_CFB_FILLRECT
493 select FB_CFB_COPYAREA
494 select FB_CFB_IMAGEBLIT
495 select FB_MACMODES
496 help
497 This driver supports a frame buffer for the "valkyrie" graphics
498 adapter in some Power Macintoshes.
499
500config FB_CT65550
501 bool "Chips 65550 display support"
502 depends on (FB = y) && PPC32 && PCI
503 select FB_CFB_FILLRECT
504 select FB_CFB_COPYAREA
505 select FB_CFB_IMAGEBLIT
506 help
507 This is the frame buffer device driver for the Chips & Technologies
508 65550 graphics chip in PowerBooks.
509
510config FB_ASILIANT
511 bool "Asiliant (Chips) 69000 display support"
512 depends on (FB = y) && PCI
513 select FB_CFB_FILLRECT
514 select FB_CFB_COPYAREA
515 select FB_CFB_IMAGEBLIT
516 help
517 This is the frame buffer device driver for the Asiliant 69030 chipset
518
519config FB_IMSTT
520 bool "IMS Twin Turbo display support"
521 depends on (FB = y) && PCI
522 select FB_CFB_IMAGEBLIT
523 select FB_MACMODES if PPC
524 help
525 The IMS Twin Turbo is a PCI-based frame buffer card bundled with
526 many Macintosh and compatible computers.
527
528config FB_VGA16
529 tristate "VGA 16-color graphics support"
530 depends on FB && (X86 || PPC)
531 select FB_CFB_FILLRECT
532 select FB_CFB_COPYAREA
533 select FB_CFB_IMAGEBLIT
534 select VGASTATE
535 select FONT_8x16 if FRAMEBUFFER_CONSOLE
536 help
537 This is the frame buffer device driver for VGA 16 color graphic
538 cards. Say Y if you have such a card.
539
540 To compile this driver as a module, choose M here: the
541 module will be called vga16fb.
542
543config FB_BF54X_LQ043
544 tristate "SHARP LQ043 TFT LCD (BF548 EZKIT)"
545 depends on FB && (BF54x) && !BF542
546 select FB_CFB_FILLRECT
547 select FB_CFB_COPYAREA
548 select FB_CFB_IMAGEBLIT
549 help
550 This is the framebuffer device driver for a SHARP LQ043T1DG01 TFT LCD
551
552config FB_BFIN_T350MCQB
553 tristate "Varitronix COG-T350MCQB TFT LCD display (BF527 EZKIT)"
554 depends on FB && BLACKFIN
555 select BFIN_GPTIMERS
556 select FB_CFB_FILLRECT
557 select FB_CFB_COPYAREA
558 select FB_CFB_IMAGEBLIT
559 help
560 This is the framebuffer device driver for a Varitronix VL-PS-COG-T350MCQB-01 display TFT LCD
561 This display is a QVGA 320x240 24-bit RGB display interfaced by an 8-bit wide PPI
562 It uses PPI[0..7] PPI_FS1, PPI_FS2 and PPI_CLK.
563
564config FB_BFIN_LQ035Q1
565 tristate "SHARP LQ035Q1DH02 TFT LCD"
566 depends on FB && BLACKFIN && SPI
567 select FB_CFB_FILLRECT
568 select FB_CFB_COPYAREA
569 select FB_CFB_IMAGEBLIT
570 select BFIN_GPTIMERS
571 help
572 This is the framebuffer device driver for a SHARP LQ035Q1DH02 TFT display found on
573 the Blackfin Landscape LCD EZ-Extender Card.
574 This display is a QVGA 320x240 18-bit RGB display interfaced by an 16-bit wide PPI
575 It uses PPI[0..15] PPI_FS1, PPI_FS2 and PPI_CLK.
576
577 To compile this driver as a module, choose M here: the
578 module will be called bfin-lq035q1-fb.
579
580config FB_BF537_LQ035
581 tristate "SHARP LQ035 TFT LCD (BF537 STAMP)"
582 depends on FB && (BF534 || BF536 || BF537) && I2C_BLACKFIN_TWI
583 select FB_CFB_FILLRECT
584 select FB_CFB_COPYAREA
585 select FB_CFB_IMAGEBLIT
586 select BFIN_GPTIMERS
587 help
588 This is the framebuffer device for a SHARP LQ035Q7DB03 TFT LCD
589 attached to a BF537.
590
591 To compile this driver as a module, choose M here: the
592 module will be called bf537-lq035.
593
594config FB_BFIN_7393
595 tristate "Blackfin ADV7393 Video encoder"
596 depends on FB && BLACKFIN
597 select I2C
598 select FB_CFB_FILLRECT
599 select FB_CFB_COPYAREA
600 select FB_CFB_IMAGEBLIT
601 help
602 This is the framebuffer device for a ADV7393 video encoder
603 attached to a Blackfin on the PPI port.
604 If your Blackfin board has a ADV7393 select Y.
605
606 To compile this driver as a module, choose M here: the
607 module will be called bfin_adv7393fb.
608
609choice
610 prompt "Video mode support"
611 depends on FB_BFIN_7393
612 default NTSC
613
614config NTSC
615 bool 'NTSC 720x480'
616
617config PAL
618 bool 'PAL 720x576'
619
620config NTSC_640x480
621 bool 'NTSC 640x480 (Experimental)'
622
623config PAL_640x480
624 bool 'PAL 640x480 (Experimental)'
625
626config NTSC_YCBCR
627 bool 'NTSC 720x480 YCbCR input'
628
629config PAL_YCBCR
630 bool 'PAL 720x576 YCbCR input'
631
632endchoice
633
634choice
635 prompt "Size of ADV7393 frame buffer memory Single/Double Size"
636 depends on (FB_BFIN_7393)
637 default ADV7393_1XMEM
638
639config ADV7393_1XMEM
640 bool 'Single'
641
642config ADV7393_2XMEM
643 bool 'Double'
644endchoice
645
646config FB_STI
647 tristate "HP STI frame buffer device support"
648 depends on FB && PARISC
649 select FB_CFB_FILLRECT
650 select FB_CFB_COPYAREA
651 select FB_CFB_IMAGEBLIT
652 select STI_CONSOLE
653 select VT
654 default y
655 ---help---
656 STI refers to the HP "Standard Text Interface" which is a set of
657 BIOS routines contained in a ROM chip in HP PA-RISC based machines.
658 Enabling this option will implement the linux framebuffer device
659 using calls to the STI BIOS routines for initialisation.
660
661 If you enable this option, you will get a planar framebuffer device
662 /dev/fb which will work on the most common HP graphic cards of the
663 NGLE family, including the artist chips (in the 7xx and Bxxx series),
664 HCRX, HCRX24, CRX, CRX24 and VisEG series.
665
666 It is safe to enable this option, so you should probably say "Y".
667
668config FB_MAC
669 bool "Generic Macintosh display support"
670 depends on (FB = y) && MAC
671 select FB_CFB_FILLRECT
672 select FB_CFB_COPYAREA
673 select FB_CFB_IMAGEBLIT
674 select FB_MACMODES
675
676config FB_HP300
677 bool
678 depends on (FB = y) && DIO
679 select FB_CFB_IMAGEBLIT
680 default y
681
682config FB_TGA
683 tristate "TGA/SFB+ framebuffer support"
684 depends on FB && (ALPHA || TC)
685 select FB_CFB_FILLRECT
686 select FB_CFB_COPYAREA
687 select FB_CFB_IMAGEBLIT
688 select BITREVERSE
689 ---help---
690 This is the frame buffer device driver for generic TGA and SFB+
691 graphic cards. These include DEC ZLXp-E1, -E2 and -E3 PCI cards,
692 also known as PBXGA-A, -B and -C, and DEC ZLX-E1, -E2 and -E3
693 TURBOchannel cards, also known as PMAGD-A, -B and -C.
694
695 Due to hardware limitations ZLX-E2 and E3 cards are not supported
696 for DECstation 5000/200 systems. Additionally due to firmware
697 limitations these cards may cause troubles with booting DECstation
698 5000/240 and /260 systems, but are fully supported under Linux if
699 you manage to get it going. ;-)
700
701 Say Y if you have one of those.
702
703config FB_UVESA
704 tristate "Userspace VESA VGA graphics support"
705 depends on FB && CONNECTOR
706 select FB_CFB_FILLRECT
707 select FB_CFB_COPYAREA
708 select FB_CFB_IMAGEBLIT
709 select FB_MODE_HELPERS
710 help
711 This is the frame buffer driver for generic VBE 2.0 compliant
712 graphic cards. It can also take advantage of VBE 3.0 features,
713 such as refresh rate adjustment.
714
715 This driver generally provides more features than vesafb but
716 requires a userspace helper application called 'v86d'. See
717 <file:Documentation/fb/uvesafb.txt> for more information.
718
719 If unsure, say N.
720
721config FB_VESA
722 bool "VESA VGA graphics support"
723 depends on (FB = y) && X86
724 select FB_CFB_FILLRECT
725 select FB_CFB_COPYAREA
726 select FB_CFB_IMAGEBLIT
727 select FB_BOOT_VESA_SUPPORT
728 help
729 This is the frame buffer device driver for generic VESA 2.0
730 compliant graphic cards. The older VESA 1.2 cards are not supported.
731 You will get a boot time penguin logo at no additional cost. Please
732 read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
733
734config FB_EFI
735 bool "EFI-based Framebuffer Support"
736 depends on (FB = y) && X86 && EFI
737 select FB_CFB_FILLRECT
738 select FB_CFB_COPYAREA
739 select FB_CFB_IMAGEBLIT
740 help
741 This is the EFI frame buffer device driver. If the firmware on
742 your platform is EFI 1.10 or UEFI 2.0, select Y to add support for
743 using the EFI framebuffer as your console.
744
745config FB_N411
746 tristate "N411 Apollo/Hecuba devkit support"
747 depends on FB && X86 && MMU
748 select FB_SYS_FILLRECT
749 select FB_SYS_COPYAREA
750 select FB_SYS_IMAGEBLIT
751 select FB_SYS_FOPS
752 select FB_DEFERRED_IO
753 select FB_HECUBA
754 help
755 This enables support for the Apollo display controller in its
756 Hecuba form using the n411 devkit.
757
758config FB_HGA
759 tristate "Hercules mono graphics support"
760 depends on FB && X86
761 help
762 Say Y here if you have a Hercules mono graphics card.
763
764 To compile this driver as a module, choose M here: the
765 module will be called hgafb.
766
767 As this card technology is at least 25 years old,
768 most people will answer N here.
769
770config FB_GBE
771 bool "SGI Graphics Backend frame buffer support"
772 depends on (FB = y) && SGI_IP32
773 select FB_CFB_FILLRECT
774 select FB_CFB_COPYAREA
775 select FB_CFB_IMAGEBLIT
776 help
777 This is the frame buffer device driver for SGI Graphics Backend.
778 This chip is used in SGI O2 and Visual Workstation 320/540.
779
780config FB_GBE_MEM
781 int "Video memory size in MB"
782 depends on FB_GBE
783 default 4
784 help
785 This is the amount of memory reserved for the framebuffer,
786 which can be any value between 1MB and 8MB.
787
788config FB_SBUS
789 bool "SBUS and UPA framebuffers"
790 depends on (FB = y) && SPARC
791 help
792 Say Y if you want support for SBUS or UPA based frame buffer device.
793
794config FB_BW2
795 bool "BWtwo support"
796 depends on (FB = y) && (SPARC && FB_SBUS)
797 select FB_CFB_FILLRECT
798 select FB_CFB_COPYAREA
799 select FB_CFB_IMAGEBLIT
800 help
801 This is the frame buffer device driver for the BWtwo frame buffer.
802
803config FB_CG3
804 bool "CGthree support"
805 depends on (FB = y) && (SPARC && FB_SBUS)
806 select FB_CFB_FILLRECT
807 select FB_CFB_COPYAREA
808 select FB_CFB_IMAGEBLIT
809 help
810 This is the frame buffer device driver for the CGthree frame buffer.
811
812config FB_CG6
813 bool "CGsix (GX,TurboGX) support"
814 depends on (FB = y) && (SPARC && FB_SBUS)
815 select FB_CFB_COPYAREA
816 select FB_CFB_IMAGEBLIT
817 help
818 This is the frame buffer device driver for the CGsix (GX, TurboGX)
819 frame buffer.
820
821config FB_FFB
822 bool "Creator/Creator3D/Elite3D support"
823 depends on FB_SBUS && SPARC64
824 select FB_CFB_COPYAREA
825 select FB_CFB_IMAGEBLIT
826 help
827 This is the frame buffer device driver for the Creator, Creator3D,
828 and Elite3D graphics boards.
829
830config FB_TCX
831 bool "TCX (SS4/SS5 only) support"
832 depends on FB_SBUS
833 select FB_CFB_FILLRECT
834 select FB_CFB_COPYAREA
835 select FB_CFB_IMAGEBLIT
836 help
837 This is the frame buffer device driver for the TCX 24/8bit frame
838 buffer.
839
840config FB_CG14
841 bool "CGfourteen (SX) support"
842 depends on FB_SBUS
843 select FB_CFB_FILLRECT
844 select FB_CFB_COPYAREA
845 select FB_CFB_IMAGEBLIT
846 help
847 This is the frame buffer device driver for the CGfourteen frame
848 buffer on Desktop SPARCsystems with the SX graphics option.
849
850config FB_P9100
851 bool "P9100 (Sparcbook 3 only) support"
852 depends on FB_SBUS
853 select FB_CFB_FILLRECT
854 select FB_CFB_COPYAREA
855 select FB_CFB_IMAGEBLIT
856 help
857 This is the frame buffer device driver for the P9100 card
858 supported on Sparcbook 3 machines.
859
860config FB_LEO
861 bool "Leo (ZX) support"
862 depends on FB_SBUS
863 select FB_CFB_FILLRECT
864 select FB_CFB_COPYAREA
865 select FB_CFB_IMAGEBLIT
866 help
867 This is the frame buffer device driver for the SBUS-based Sun ZX
868 (leo) frame buffer cards.
869
870config FB_IGA
871 bool "IGA 168x display support"
872 depends on (FB = y) && SPARC32
873 select FB_CFB_FILLRECT
874 select FB_CFB_COPYAREA
875 select FB_CFB_IMAGEBLIT
876 help
877 This is the framebuffer device for the INTERGRAPHICS 1680 and
878 successor frame buffer cards.
879
880config FB_XVR500
881 bool "Sun XVR-500 3DLABS Wildcat support"
882 depends on (FB = y) && PCI && SPARC64
883 select FB_CFB_FILLRECT
884 select FB_CFB_COPYAREA
885 select FB_CFB_IMAGEBLIT
886 help
887 This is the framebuffer device for the Sun XVR-500 and similar
888 graphics cards based upon the 3DLABS Wildcat chipset. The driver
889 only works on sparc64 systems where the system firmware has
890 mostly initialized the card already. It is treated as a
891 completely dumb framebuffer device.
892
893config FB_XVR2500
894 bool "Sun XVR-2500 3DLABS Wildcat support"
895 depends on (FB = y) && PCI && SPARC64
896 select FB_CFB_FILLRECT
897 select FB_CFB_COPYAREA
898 select FB_CFB_IMAGEBLIT
899 help
900 This is the framebuffer device for the Sun XVR-2500 and similar
901 graphics cards based upon the 3DLABS Wildcat chipset. The driver
902 only works on sparc64 systems where the system firmware has
903 mostly initialized the card already. It is treated as a
904 completely dumb framebuffer device.
905
906config FB_XVR1000
907 bool "Sun XVR-1000 support"
908 depends on (FB = y) && SPARC64
909 select FB_CFB_FILLRECT
910 select FB_CFB_COPYAREA
911 select FB_CFB_IMAGEBLIT
912 help
913 This is the framebuffer device for the Sun XVR-1000 and similar
914 graphics cards. The driver only works on sparc64 systems where
915 the system firmware has mostly initialized the card already. It
916 is treated as a completely dumb framebuffer device.
917
918config FB_PVR2
919 tristate "NEC PowerVR 2 display support"
920 depends on FB && SH_DREAMCAST
921 select FB_CFB_FILLRECT
922 select FB_CFB_COPYAREA
923 select FB_CFB_IMAGEBLIT
924 ---help---
925 Say Y here if you have a PowerVR 2 card in your box. If you plan to
926 run linux on your Dreamcast, you will have to say Y here.
927 This driver may or may not work on other PowerVR 2 cards, but is
928 totally untested. Use at your own risk. If unsure, say N.
929
930 To compile this driver as a module, choose M here: the
931 module will be called pvr2fb.
932
933 You can pass several parameters to the driver at boot time or at
934 module load time. The parameters look like "video=pvr2:XXX", where
935 the meaning of XXX can be found at the end of the main source file
936 (<file:drivers/video/pvr2fb.c>). Please see the file
937 <file:Documentation/fb/pvr2fb.txt>.
938
939config FB_OPENCORES
940 tristate "OpenCores VGA/LCD core 2.0 framebuffer support"
941 depends on FB && HAS_DMA
942 select FB_CFB_FILLRECT
943 select FB_CFB_COPYAREA
944 select FB_CFB_IMAGEBLIT
945 help
946 This enables support for the OpenCores VGA/LCD core.
947
948 The OpenCores VGA/LCD core is typically used together with
949 softcore CPUs (e.g. OpenRISC or Microblaze) or hard processor
950 systems (e.g. Altera socfpga or Xilinx Zynq) on FPGAs.
951
952 The source code and specification for the core is available at
953 <http://opencores.org/project,vga_lcd>
954
955config FB_S1D13XXX
956 tristate "Epson S1D13XXX framebuffer support"
957 depends on FB
958 select FB_CFB_FILLRECT
959 select FB_CFB_COPYAREA
960 select FB_CFB_IMAGEBLIT
961 help
962 Support for S1D13XXX framebuffer device family (currently only
963 working with S1D13806). Product specs at
964 <http://vdc.epson.com/>
965
966config FB_ATMEL
967 tristate "AT91/AT32 LCD Controller support"
968 depends on FB && HAVE_FB_ATMEL
969 select FB_CFB_FILLRECT
970 select FB_CFB_COPYAREA
971 select FB_CFB_IMAGEBLIT
972 select FB_MODE_HELPERS
973 select VIDEOMODE_HELPERS
974 help
975 This enables support for the AT91/AT32 LCD Controller.
976
977config FB_INTSRAM
978 bool "Frame Buffer in internal SRAM"
979 depends on FB_ATMEL && ARCH_AT91SAM9261
980 help
981 Say Y if you want to map Frame Buffer in internal SRAM. Say N if you want
982 to let frame buffer in external SDRAM.
983
984config FB_ATMEL_STN
985 bool "Use a STN display with AT91/AT32 LCD Controller"
986 depends on FB_ATMEL && (MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK)
987 default n
988 help
989 Say Y if you want to connect a STN LCD display to the AT91/AT32 LCD
990 Controller. Say N if you want to connect a TFT.
991
992 If unsure, say N.
993
994config FB_NVIDIA
995 tristate "nVidia Framebuffer Support"
996 depends on FB && PCI
997 select FB_BACKLIGHT if FB_NVIDIA_BACKLIGHT
998 select FB_MODE_HELPERS
999 select FB_CFB_FILLRECT
1000 select FB_CFB_COPYAREA
1001 select FB_CFB_IMAGEBLIT
1002 select BITREVERSE
1003 select VGASTATE
1004 help
1005 This driver supports graphics boards with the nVidia chips, TNT
1006 and newer. For very old chipsets, such as the RIVA128, then use
1007 the rivafb.
1008 Say Y if you have such a graphics board.
1009
1010 To compile this driver as a module, choose M here: the
1011 module will be called nvidiafb.
1012
1013config FB_NVIDIA_I2C
1014 bool "Enable DDC Support"
1015 depends on FB_NVIDIA
1016 select FB_DDC
1017 help
1018 This enables I2C support for nVidia Chipsets. This is used
1019 only for getting EDID information from the attached display
1020 allowing for robust video mode handling and switching.
1021
1022 Because fbdev-2.6 requires that drivers must be able to
1023 independently validate video mode parameters, you should say Y
1024 here.
1025
1026config FB_NVIDIA_DEBUG
1027 bool "Lots of debug output"
1028 depends on FB_NVIDIA
1029 default n
1030 help
1031 Say Y here if you want the nVidia driver to output all sorts
1032 of debugging information to provide to the maintainer when
1033 something goes wrong.
1034
1035config FB_NVIDIA_BACKLIGHT
1036 bool "Support for backlight control"
1037 depends on FB_NVIDIA
1038 default y
1039 help
1040 Say Y here if you want to control the backlight of your display.
1041
1042config FB_RIVA
1043 tristate "nVidia Riva support"
1044 depends on FB && PCI
1045 select FB_BACKLIGHT if FB_RIVA_BACKLIGHT
1046 select FB_MODE_HELPERS
1047 select FB_CFB_FILLRECT
1048 select FB_CFB_COPYAREA
1049 select FB_CFB_IMAGEBLIT
1050 select BITREVERSE
1051 select VGASTATE
1052 help
1053 This driver supports graphics boards with the nVidia Riva/Geforce
1054 chips.
1055 Say Y if you have such a graphics board.
1056
1057 To compile this driver as a module, choose M here: the
1058 module will be called rivafb.
1059
1060config FB_RIVA_I2C
1061 bool "Enable DDC Support"
1062 depends on FB_RIVA
1063 select FB_DDC
1064 help
1065 This enables I2C support for nVidia Chipsets. This is used
1066 only for getting EDID information from the attached display
1067 allowing for robust video mode handling and switching.
1068
1069 Because fbdev-2.6 requires that drivers must be able to
1070 independently validate video mode parameters, you should say Y
1071 here.
1072
1073config FB_RIVA_DEBUG
1074 bool "Lots of debug output"
1075 depends on FB_RIVA
1076 default n
1077 help
1078 Say Y here if you want the Riva driver to output all sorts
1079 of debugging information to provide to the maintainer when
1080 something goes wrong.
1081
1082config FB_RIVA_BACKLIGHT
1083 bool "Support for backlight control"
1084 depends on FB_RIVA
1085 default y
1086 help
1087 Say Y here if you want to control the backlight of your display.
1088
1089config FB_I740
1090 tristate "Intel740 support"
1091 depends on FB && PCI
1092 select FB_MODE_HELPERS
1093 select FB_CFB_FILLRECT
1094 select FB_CFB_COPYAREA
1095 select FB_CFB_IMAGEBLIT
1096 select VGASTATE
1097 select FB_DDC
1098 help
1099 This driver supports graphics cards based on Intel740 chip.
1100
1101config FB_I810
1102 tristate "Intel 810/815 support"
1103 depends on FB && PCI && X86_32 && AGP_INTEL
1104 select FB_MODE_HELPERS
1105 select FB_CFB_FILLRECT
1106 select FB_CFB_COPYAREA
1107 select FB_CFB_IMAGEBLIT
1108 select VGASTATE
1109 help
1110 This driver supports the on-board graphics built in to the Intel 810
1111 and 815 chipsets. Say Y if you have and plan to use such a board.
1112
1113 To compile this driver as a module, choose M here: the
1114 module will be called i810fb.
1115
1116 For more information, please read
1117 <file:Documentation/fb/intel810.txt>
1118
1119config FB_I810_GTF
1120 bool "use VESA Generalized Timing Formula"
1121 depends on FB_I810
1122 help
1123 If you say Y, then the VESA standard, Generalized Timing Formula
1124 or GTF, will be used to calculate the required video timing values
1125 per video mode. Since the GTF allows nondiscrete timings
1126 (nondiscrete being a range of values as opposed to discrete being a
1127 set of values), you'll be able to use any combination of horizontal
1128 and vertical resolutions, and vertical refresh rates without having
1129 to specify your own timing parameters. This is especially useful
1130 to maximize the performance of an aging display, or if you just
1131 have a display with nonstandard dimensions. A VESA compliant
1132 monitor is recommended, but can still work with non-compliant ones.
1133 If you need or want this, then select this option. The timings may
1134 not be compliant with Intel's recommended values. Use at your own
1135 risk.
1136
1137 If you say N, the driver will revert to discrete video timings
1138 using a set recommended by Intel in their documentation.
1139
1140 If unsure, say N.
1141
1142config FB_I810_I2C
1143 bool "Enable DDC Support"
1144 depends on FB_I810 && FB_I810_GTF
1145 select FB_DDC
1146 help
1147
1148config FB_LE80578
1149 tristate "Intel LE80578 (Vermilion) support"
1150 depends on FB && PCI && X86
1151 select FB_MODE_HELPERS
1152 select FB_CFB_FILLRECT
1153 select FB_CFB_COPYAREA
1154 select FB_CFB_IMAGEBLIT
1155 help
1156 This driver supports the LE80578 (Vermilion Range) chipset
1157
1158config FB_CARILLO_RANCH
1159 tristate "Intel Carillo Ranch support"
1160 depends on FB_LE80578 && FB && PCI && X86
1161 help
1162 This driver supports the LE80578 (Carillo Ranch) board
1163
1164config FB_INTEL
1165 tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support"
1166 depends on FB && PCI && X86 && AGP_INTEL && EXPERT
1167 select FB_MODE_HELPERS
1168 select FB_CFB_FILLRECT
1169 select FB_CFB_COPYAREA
1170 select FB_CFB_IMAGEBLIT
1171 select FB_BOOT_VESA_SUPPORT if FB_INTEL = y
1172 depends on !DRM_I915
1173 help
1174 This driver supports the on-board graphics built in to the Intel
1175 830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets.
1176 Say Y if you have and plan to use such a board.
1177
1178 To make FB_INTELFB=Y work you need to say AGP_INTEL=y too.
1179
1180 To compile this driver as a module, choose M here: the
1181 module will be called intelfb.
1182
1183 For more information, please read <file:Documentation/fb/intelfb.txt>
1184
1185config FB_INTEL_DEBUG
1186 bool "Intel driver Debug Messages"
1187 depends on FB_INTEL
1188 ---help---
1189 Say Y here if you want the Intel driver to output all sorts
1190 of debugging information to provide to the maintainer when
1191 something goes wrong.
1192
1193config FB_INTEL_I2C
1194 bool "DDC/I2C for Intel framebuffer support"
1195 depends on FB_INTEL
1196 select FB_DDC
1197 default y
1198 help
1199 Say Y here if you want DDC/I2C support for your on-board Intel graphics.
1200
1201config FB_MATROX
1202 tristate "Matrox acceleration"
1203 depends on FB && PCI
1204 select FB_CFB_FILLRECT
1205 select FB_CFB_COPYAREA
1206 select FB_CFB_IMAGEBLIT
1207 select FB_TILEBLITTING
1208 select FB_MACMODES if PPC_PMAC
1209 ---help---
1210 Say Y here if you have a Matrox Millennium, Matrox Millennium II,
1211 Matrox Mystique, Matrox Mystique 220, Matrox Productiva G100, Matrox
1212 Mystique G200, Matrox Millennium G200, Matrox Marvel G200 video,
1213 Matrox G400, G450 or G550 card in your box.
1214
1215 To compile this driver as a module, choose M here: the
1216 module will be called matroxfb.
1217
1218 You can pass several parameters to the driver at boot time or at
1219 module load time. The parameters look like "video=matroxfb:XXX", and
1220 are described in <file:Documentation/fb/matroxfb.txt>.
1221
1222config FB_MATROX_MILLENIUM
1223 bool "Millennium I/II support"
1224 depends on FB_MATROX
1225 help
1226 Say Y here if you have a Matrox Millennium or Matrox Millennium II
1227 video card. If you select "Advanced lowlevel driver options" below,
1228 you should check 4 bpp packed pixel, 8 bpp packed pixel, 16 bpp
1229 packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can
1230 also use font widths different from 8.
1231
1232config FB_MATROX_MYSTIQUE
1233 bool "Mystique support"
1234 depends on FB_MATROX
1235 help
1236 Say Y here if you have a Matrox Mystique or Matrox Mystique 220
1237 video card. If you select "Advanced lowlevel driver options" below,
1238 you should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp
1239 packed pixel and 32 bpp packed pixel. You can also use font widths
1240 different from 8.
1241
1242config FB_MATROX_G
1243 bool "G100/G200/G400/G450/G550 support"
1244 depends on FB_MATROX
1245 ---help---
1246 Say Y here if you have a Matrox G100, G200, G400, G450 or G550 based
1247 video card. If you select "Advanced lowlevel driver options", you
1248 should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed
1249 pixel and 32 bpp packed pixel. You can also use font widths
1250 different from 8.
1251
1252 If you need support for G400 secondary head, you must say Y to
1253 "Matrox I2C support" and "G400 second head support" right below.
1254 G450/G550 secondary head and digital output are supported without
1255 additional modules.
1256
1257 The driver starts in monitor mode. You must use the matroxset tool
1258 (available at <ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/>) to
1259 swap primary and secondary head outputs, or to change output mode.
1260 Secondary head driver always start in 640x480 resolution and you
1261 must use fbset to change it.
1262
1263 Do not forget that second head supports only 16 and 32 bpp
1264 packed pixels, so it is a good idea to compile them into the kernel
1265 too. You can use only some font widths, as the driver uses generic
1266 painting procedures (the secondary head does not use acceleration
1267 engine).
1268
1269 G450/G550 hardware can display TV picture only from secondary CRTC,
1270 and it performs no scaling, so picture must have 525 or 625 lines.
1271
1272config FB_MATROX_I2C
1273 tristate "Matrox I2C support"
1274 depends on FB_MATROX
1275 select FB_DDC
1276 ---help---
1277 This drivers creates I2C buses which are needed for accessing the
1278 DDC (I2C) bus present on all Matroxes, an I2C bus which
1279 interconnects Matrox optional devices, like MGA-TVO on G200 and
1280 G400, and the secondary head DDC bus, present on G400 only.
1281
1282 You can say Y or M here if you want to experiment with monitor
1283 detection code. You must say Y or M here if you want to use either
1284 second head of G400 or MGA-TVO on G200 or G400.
1285
1286 If you compile it as module, it will create a module named
1287 i2c-matroxfb.
1288
1289config FB_MATROX_MAVEN
1290 tristate "G400 second head support"
1291 depends on FB_MATROX_G && FB_MATROX_I2C
1292 ---help---
1293 WARNING !!! This support does not work with G450 !!!
1294
1295 Say Y or M here if you want to use a secondary head (meaning two
1296 monitors in parallel) on G400 or MGA-TVO add-on on G200. Secondary
1297 head is not compatible with accelerated XFree 3.3.x SVGA servers -
1298 secondary head output is blanked while you are in X. With XFree
1299 3.9.17 preview you can use both heads if you use SVGA over fbdev or
1300 the fbdev driver on first head and the fbdev driver on second head.
1301
1302 If you compile it as module, two modules are created,
1303 matroxfb_crtc2 and matroxfb_maven. Matroxfb_maven is needed for
1304 both G200 and G400, matroxfb_crtc2 is needed only by G400. You must
1305 also load i2c-matroxfb to get it to run.
1306
1307 The driver starts in monitor mode and you must use the matroxset
1308 tool (available at
1309 <ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/>) to switch it to
1310 PAL or NTSC or to swap primary and secondary head outputs.
1311 Secondary head driver also always start in 640x480 resolution, you
1312 must use fbset to change it.
1313
1314 Also do not forget that second head supports only 16 and 32 bpp
1315 packed pixels, so it is a good idea to compile them into the kernel
1316 too. You can use only some font widths, as the driver uses generic
1317 painting procedures (the secondary head does not use acceleration
1318 engine).
1319
1320config FB_RADEON
1321 tristate "ATI Radeon display support"
1322 depends on FB && PCI
1323 select FB_BACKLIGHT if FB_RADEON_BACKLIGHT
1324 select FB_MODE_HELPERS
1325 select FB_CFB_FILLRECT
1326 select FB_CFB_COPYAREA
1327 select FB_CFB_IMAGEBLIT
1328 select FB_MACMODES if PPC_OF
1329 help
1330 Choose this option if you want to use an ATI Radeon graphics card as
1331 a framebuffer device. There are both PCI and AGP versions. You
1332 don't need to choose this to run the Radeon in plain VGA mode.
1333
1334 There is a product page at
1335 http://products.amd.com/en-us/GraphicCardResult.aspx
1336
1337config FB_RADEON_I2C
1338 bool "DDC/I2C for ATI Radeon support"
1339 depends on FB_RADEON
1340 select FB_DDC
1341 default y
1342 help
1343 Say Y here if you want DDC/I2C support for your Radeon board.
1344
1345config FB_RADEON_BACKLIGHT
1346 bool "Support for backlight control"
1347 depends on FB_RADEON
1348 default y
1349 help
1350 Say Y here if you want to control the backlight of your display.
1351
1352config FB_RADEON_DEBUG
1353 bool "Lots of debug output from Radeon driver"
1354 depends on FB_RADEON
1355 default n
1356 help
1357 Say Y here if you want the Radeon driver to output all sorts
1358 of debugging information to provide to the maintainer when
1359 something goes wrong.
1360
1361config FB_ATY128
1362 tristate "ATI Rage128 display support"
1363 depends on FB && PCI
1364 select FB_CFB_FILLRECT
1365 select FB_CFB_COPYAREA
1366 select FB_CFB_IMAGEBLIT
1367 select FB_BACKLIGHT if FB_ATY128_BACKLIGHT
1368 select FB_MACMODES if PPC_PMAC
1369 help
1370 This driver supports graphics boards with the ATI Rage128 chips.
1371 Say Y if you have such a graphics board and read
1372 <file:Documentation/fb/aty128fb.txt>.
1373
1374 To compile this driver as a module, choose M here: the
1375 module will be called aty128fb.
1376
1377config FB_ATY128_BACKLIGHT
1378 bool "Support for backlight control"
1379 depends on FB_ATY128
1380 default y
1381 help
1382 Say Y here if you want to control the backlight of your display.
1383
1384config FB_ATY
1385 tristate "ATI Mach64 display support" if PCI || ATARI
1386 depends on FB && !SPARC32
1387 select FB_CFB_FILLRECT
1388 select FB_CFB_COPYAREA
1389 select FB_CFB_IMAGEBLIT
1390 select FB_BACKLIGHT if FB_ATY_BACKLIGHT
1391 select FB_MACMODES if PPC
1392 help
1393 This driver supports graphics boards with the ATI Mach64 chips.
1394 Say Y if you have such a graphics board.
1395
1396 To compile this driver as a module, choose M here: the
1397 module will be called atyfb.
1398
1399config FB_ATY_CT
1400 bool "Mach64 CT/VT/GT/LT (incl. 3D RAGE) support"
1401 depends on PCI && FB_ATY
1402 default y if SPARC64 && PCI
1403 help
1404 Say Y here to support use of ATI's 64-bit Rage boards (or other
1405 boards based on the Mach64 CT, VT, GT, and LT chipsets) as a
1406 framebuffer device. The ATI product support page for these boards
1407 is at <http://support.ati.com/products/pc/mach64/mach64.html>.
1408
1409config FB_ATY_GENERIC_LCD
1410 bool "Mach64 generic LCD support"
1411 depends on FB_ATY_CT
1412 help
1413 Say Y if you have a laptop with an ATI Rage LT PRO, Rage Mobility,
1414 Rage XC, or Rage XL chipset.
1415
1416config FB_ATY_GX
1417 bool "Mach64 GX support" if PCI
1418 depends on FB_ATY
1419 default y if ATARI
1420 help
1421 Say Y here to support use of the ATI Mach64 Graphics Expression
1422 board (or other boards based on the Mach64 GX chipset) as a
1423 framebuffer device. The ATI product support page for these boards
1424 is at
1425 <http://support.ati.com/products/pc/mach64/graphics_xpression.html>.
1426
1427config FB_ATY_BACKLIGHT
1428 bool "Support for backlight control"
1429 depends on FB_ATY
1430 default y
1431 help
1432 Say Y here if you want to control the backlight of your display.
1433
1434config FB_S3
1435 tristate "S3 Trio/Virge support"
1436 depends on FB && PCI
1437 select FB_CFB_FILLRECT
1438 select FB_CFB_COPYAREA
1439 select FB_CFB_IMAGEBLIT
1440 select FB_TILEBLITTING
1441 select FB_SVGALIB
1442 select VGASTATE
1443 select FONT_8x16 if FRAMEBUFFER_CONSOLE
1444 ---help---
1445 Driver for graphics boards with S3 Trio / S3 Virge chip.
1446
1447config FB_S3_DDC
1448 bool "DDC for S3 support"
1449 depends on FB_S3
1450 select FB_DDC
1451 default y
1452 help
1453 Say Y here if you want DDC support for your S3 graphics card.
1454
1455config FB_SAVAGE
1456 tristate "S3 Savage support"
1457 depends on FB && PCI
1458 select FB_MODE_HELPERS
1459 select FB_CFB_FILLRECT
1460 select FB_CFB_COPYAREA
1461 select FB_CFB_IMAGEBLIT
1462 select VGASTATE
1463 help
1464 This driver supports notebooks and computers with S3 Savage PCI/AGP
1465 chips.
1466
1467 Say Y if you have such a graphics card.
1468
1469 To compile this driver as a module, choose M here; the module
1470 will be called savagefb.
1471
1472config FB_SAVAGE_I2C
1473 bool "Enable DDC2 Support"
1474 depends on FB_SAVAGE
1475 select FB_DDC
1476 help
1477 This enables I2C support for S3 Savage Chipsets. This is used
1478 only for getting EDID information from the attached display
1479 allowing for robust video mode handling and switching.
1480
1481 Because fbdev-2.6 requires that drivers must be able to
1482 independently validate video mode parameters, you should say Y
1483 here.
1484
1485config FB_SAVAGE_ACCEL
1486 bool "Enable Console Acceleration"
1487 depends on FB_SAVAGE
1488 default n
1489 help
1490 This option will compile in console acceleration support. If
1491 the resulting framebuffer console has bothersome glitches, then
1492 choose N here.
1493
1494config FB_SIS
1495 tristate "SiS/XGI display support"
1496 depends on FB && PCI
1497 select FB_CFB_FILLRECT
1498 select FB_CFB_COPYAREA
1499 select FB_CFB_IMAGEBLIT
1500 select FB_BOOT_VESA_SUPPORT if FB_SIS = y
1501 help
1502 This is the frame buffer device driver for the SiS 300, 315, 330
1503 and 340 series as well as XGI V3XT, V5, V8, Z7 graphics chipsets.
1504 Specs available at <http://www.sis.com> and <http://www.xgitech.com>.
1505
1506 To compile this driver as a module, choose M here; the module
1507 will be called sisfb.
1508
1509config FB_SIS_300
1510 bool "SiS 300 series support"
1511 depends on FB_SIS
1512 help
1513 Say Y here to support use of the SiS 300/305, 540, 630 and 730.
1514
1515config FB_SIS_315
1516 bool "SiS 315/330/340 series and XGI support"
1517 depends on FB_SIS
1518 help
1519 Say Y here to support use of the SiS 315, 330 and 340 series
1520 (315/H/PRO, 55x, 650, 651, 740, 330, 661, 741, 760, 761) as well
1521 as XGI V3XT, V5, V8 and Z7.
1522
1523config FB_VIA
1524 tristate "VIA UniChrome (Pro) and Chrome9 display support"
1525 depends on FB && PCI && X86
1526 select FB_CFB_FILLRECT
1527 select FB_CFB_COPYAREA
1528 select FB_CFB_IMAGEBLIT
1529 select I2C_ALGOBIT
1530 select I2C
1531 select GPIOLIB
1532 help
1533 This is the frame buffer device driver for Graphics chips of VIA
1534 UniChrome (Pro) Family (CLE266,PM800/CN400,P4M800CE/P4M800Pro/
1535 CN700/VN800,CX700/VX700,P4M890) and Chrome9 Family (K8M890,CN896
1536 /P4M900,VX800)
1537 Say Y if you have a VIA UniChrome graphics board.
1538
1539 To compile this driver as a module, choose M here: the
1540 module will be called viafb.
1541
1542if FB_VIA
1543
1544config FB_VIA_DIRECT_PROCFS
1545 bool "direct hardware access via procfs (DEPRECATED)(DANGEROUS)"
1546 depends on FB_VIA
1547 default n
1548 help
1549 Allow direct hardware access to some output registers via procfs.
1550 This is dangerous but may provide the only chance to get the
1551 correct output device configuration.
1552 Its use is strongly discouraged.
1553
1554config FB_VIA_X_COMPATIBILITY
1555 bool "X server compatibility"
1556 depends on FB_VIA
1557 default n
1558 help
1559 This option reduces the functionality (power saving, ...) of the
1560 framebuffer to avoid negative impact on the OpenChrome X server.
1561 If you use any X server other than fbdev you should enable this
1562 otherwise it should be safe to disable it and allow using all
1563 features.
1564
1565endif
1566
1567config FB_NEOMAGIC
1568 tristate "NeoMagic display support"
1569 depends on FB && PCI
1570 select FB_MODE_HELPERS
1571 select FB_CFB_FILLRECT
1572 select FB_CFB_COPYAREA
1573 select FB_CFB_IMAGEBLIT
1574 select VGASTATE
1575 help
1576 This driver supports notebooks with NeoMagic PCI chips.
1577 Say Y if you have such a graphics card.
1578
1579 To compile this driver as a module, choose M here: the
1580 module will be called neofb.
1581
1582config FB_KYRO
1583 tristate "IMG Kyro support"
1584 depends on FB && PCI
1585 select FB_CFB_FILLRECT
1586 select FB_CFB_COPYAREA
1587 select FB_CFB_IMAGEBLIT
1588 help
1589 Say Y here if you have a STG4000 / Kyro / PowerVR 3 based
1590 graphics board.
1591
1592 To compile this driver as a module, choose M here: the
1593 module will be called kyrofb.
1594
1595config FB_3DFX
1596 tristate "3Dfx Banshee/Voodoo3/Voodoo5 display support"
1597 depends on FB && PCI
1598 select FB_CFB_IMAGEBLIT
1599 select FB_CFB_FILLRECT
1600 select FB_CFB_COPYAREA
1601 select FB_MODE_HELPERS
1602 help
1603 This driver supports graphics boards with the 3Dfx Banshee,
1604 Voodoo3 or VSA-100 (aka Voodoo4/5) chips. Say Y if you have
1605 such a graphics board.
1606
1607 To compile this driver as a module, choose M here: the
1608 module will be called tdfxfb.
1609
1610config FB_3DFX_ACCEL
1611 bool "3Dfx Acceleration functions"
1612 depends on FB_3DFX
1613 ---help---
1614 This will compile the 3Dfx Banshee/Voodoo3/VSA-100 frame buffer
1615 device driver with acceleration functions.
1616
1617config FB_3DFX_I2C
1618 bool "Enable DDC/I2C support"
1619 depends on FB_3DFX
1620 select FB_DDC
1621 default y
1622 help
1623 Say Y here if you want DDC/I2C support for your 3dfx Voodoo3.
1624
1625config FB_VOODOO1
1626 tristate "3Dfx Voodoo Graphics (sst1) support"
1627 depends on FB && PCI
1628 select FB_CFB_FILLRECT
1629 select FB_CFB_COPYAREA
1630 select FB_CFB_IMAGEBLIT
1631 ---help---
1632 Say Y here if you have a 3Dfx Voodoo Graphics (Voodoo1/sst1) or
1633 Voodoo2 (cvg) based graphics card.
1634
1635 To compile this driver as a module, choose M here: the
1636 module will be called sstfb.
1637
1638 WARNING: Do not use any application that uses the 3D engine
1639 (namely glide) while using this driver.
1640 Please read the <file:Documentation/fb/sstfb.txt> for supported
1641 options and other important info support.
1642
1643config FB_VT8623
1644 tristate "VIA VT8623 support"
1645 depends on FB && PCI
1646 select FB_CFB_FILLRECT
1647 select FB_CFB_COPYAREA
1648 select FB_CFB_IMAGEBLIT
1649 select FB_TILEBLITTING
1650 select FB_SVGALIB
1651 select VGASTATE
1652 select FONT_8x16 if FRAMEBUFFER_CONSOLE
1653 ---help---
1654 Driver for CastleRock integrated graphics core in the
1655 VIA VT8623 [Apollo CLE266] chipset.
1656
1657config FB_TRIDENT
1658 tristate "Trident/CyberXXX/CyberBlade support"
1659 depends on FB && PCI
1660 select FB_CFB_FILLRECT
1661 select FB_CFB_COPYAREA
1662 select FB_CFB_IMAGEBLIT
1663 ---help---
1664 This is the frame buffer device driver for Trident PCI/AGP chipsets.
1665 Supported chipset families are TGUI 9440/96XX, 3DImage, Blade3D
1666 and Blade XP.
1667 There are also integrated versions of these chips called CyberXXXX,
1668 CyberImage or CyberBlade. These chips are mostly found in laptops
1669 but also on some motherboards including early VIA EPIA motherboards.
1670 For more information, read <file:Documentation/fb/tridentfb.txt>
1671
1672 Say Y if you have such a graphics board.
1673
1674 To compile this driver as a module, choose M here: the
1675 module will be called tridentfb.
1676
1677config FB_ARK
1678 tristate "ARK 2000PV support"
1679 depends on FB && PCI
1680 select FB_CFB_FILLRECT
1681 select FB_CFB_COPYAREA
1682 select FB_CFB_IMAGEBLIT
1683 select FB_TILEBLITTING
1684 select FB_SVGALIB
1685 select VGASTATE
1686 select FONT_8x16 if FRAMEBUFFER_CONSOLE
1687 ---help---
1688 Driver for PCI graphics boards with ARK 2000PV chip
1689 and ICS 5342 RAMDAC.
1690
1691config FB_PM3
1692 tristate "Permedia3 support"
1693 depends on FB && PCI
1694 select FB_CFB_FILLRECT
1695 select FB_CFB_COPYAREA
1696 select FB_CFB_IMAGEBLIT
1697 help
1698 This is the frame buffer device driver for the 3DLabs Permedia3
1699 chipset, used in Formac ProFormance III, 3DLabs Oxygen VX1 &
1700 similar boards, 3DLabs Permedia3 Create!, Appian Jeronimo 2000
1701 and maybe other boards.
1702
1703config FB_CARMINE
1704 tristate "Fujitsu carmine frame buffer support"
1705 depends on FB && PCI
1706 select FB_CFB_FILLRECT
1707 select FB_CFB_COPYAREA
1708 select FB_CFB_IMAGEBLIT
1709 help
1710 This is the frame buffer device driver for the Fujitsu Carmine chip.
1711 The driver provides two independent frame buffer devices.
1712
1713choice
1714 depends on FB_CARMINE
1715 prompt "DRAM timing"
1716 default FB_CARMINE_DRAM_EVAL
1717
1718config FB_CARMINE_DRAM_EVAL
1719 bool "Eval board timings"
1720 help
1721 Use timings which work on the eval card.
1722
1723config CARMINE_DRAM_CUSTOM
1724 bool "Custom board timings"
1725 help
1726 Use custom board timings.
1727endchoice
1728
1729config FB_AU1100
1730 bool "Au1100 LCD Driver"
1731 depends on (FB = y) && MIPS_ALCHEMY
1732 select FB_CFB_FILLRECT
1733 select FB_CFB_COPYAREA
1734 select FB_CFB_IMAGEBLIT
1735 help
1736 This is the framebuffer driver for the AMD Au1100 SOC. It can drive
1737 various panels and CRTs by passing in kernel cmd line option
1738 au1100fb:panel=<name>.
1739
1740config FB_AU1200
1741 bool "Au1200/Au1300 LCD Driver"
1742 depends on (FB = y) && MIPS_ALCHEMY
1743 select FB_SYS_FILLRECT
1744 select FB_SYS_COPYAREA
1745 select FB_SYS_IMAGEBLIT
1746 select FB_SYS_FOPS
1747 help
1748 This is the framebuffer driver for the Au1200/Au1300 SOCs.
1749 It can drive various panels and CRTs by passing in kernel cmd line
1750 option au1200fb:panel=<name>.
1751
1752config FB_VT8500
1753 bool "VIA VT8500 framebuffer support"
1754 depends on (FB = y) && ARM && ARCH_VT8500
1755 select FB_SYS_FILLRECT if (!FB_WMT_GE_ROPS)
1756 select FB_SYS_COPYAREA if (!FB_WMT_GE_ROPS)
1757 select FB_SYS_IMAGEBLIT
1758 select FB_MODE_HELPERS
1759 select VIDEOMODE_HELPERS
1760 help
1761 This is the framebuffer driver for VIA VT8500 integrated LCD
1762 controller.
1763
1764config FB_WM8505
1765 bool "Wondermedia WM8xxx-series frame buffer support"
1766 depends on (FB = y) && ARM && ARCH_VT8500
1767 select FB_SYS_FILLRECT if (!FB_WMT_GE_ROPS)
1768 select FB_SYS_COPYAREA if (!FB_WMT_GE_ROPS)
1769 select FB_SYS_IMAGEBLIT
1770 select FB_MODE_HELPERS
1771 select VIDEOMODE_HELPERS
1772 help
1773 This is the framebuffer driver for WonderMedia WM8xxx-series
1774 integrated LCD controller. This driver covers the WM8505, WM8650
1775 and WM8850 SoCs.
1776
1777config FB_WMT_GE_ROPS
1778 bool "VT8500/WM8xxx accelerated raster ops support"
1779 depends on (FB = y) && (FB_VT8500 || FB_WM8505)
1780 default n
1781 help
1782 This adds support for accelerated raster operations on the
1783 VIA VT8500 and Wondermedia 85xx series SoCs.
1784
1785source "drivers/video/fbdev/geode/Kconfig"
1786
1787config FB_HIT
1788 tristate "HD64461 Frame Buffer support"
1789 depends on FB && HD64461
1790 select FB_CFB_FILLRECT
1791 select FB_CFB_COPYAREA
1792 select FB_CFB_IMAGEBLIT
1793 help
1794 This is the frame buffer device driver for the Hitachi HD64461 LCD
1795 frame buffer card.
1796
1797config FB_PMAG_AA
1798 bool "PMAG-AA TURBOchannel framebuffer support"
1799 depends on (FB = y) && TC
1800 select FB_CFB_FILLRECT
1801 select FB_CFB_COPYAREA
1802 select FB_CFB_IMAGEBLIT
1803 help
1804 Support for the PMAG-AA TURBOchannel framebuffer card (1280x1024x1)
1805 used mainly in the MIPS-based DECstation series.
1806
1807config FB_PMAG_BA
1808 tristate "PMAG-BA TURBOchannel framebuffer support"
1809 depends on FB && TC
1810 select FB_CFB_FILLRECT
1811 select FB_CFB_COPYAREA
1812 select FB_CFB_IMAGEBLIT
1813 help
1814 Support for the PMAG-BA TURBOchannel framebuffer card (1024x864x8)
1815 used mainly in the MIPS-based DECstation series.
1816
1817config FB_PMAGB_B
1818 tristate "PMAGB-B TURBOchannel framebuffer support"
1819 depends on FB && TC
1820 select FB_CFB_FILLRECT
1821 select FB_CFB_COPYAREA
1822 select FB_CFB_IMAGEBLIT
1823 help
1824 Support for the PMAGB-B TURBOchannel framebuffer card used mainly
1825 in the MIPS-based DECstation series. The card is currently only
1826 supported in 1280x1024x8 mode.
1827
1828config FB_MAXINE
1829 bool "Maxine (Personal DECstation) onboard framebuffer support"
1830 depends on (FB = y) && MACH_DECSTATION
1831 select FB_CFB_FILLRECT
1832 select FB_CFB_COPYAREA
1833 select FB_CFB_IMAGEBLIT
1834 help
1835 Support for the onboard framebuffer (1024x768x8) in the Personal
1836 DECstation series (Personal DECstation 5000/20, /25, /33, /50,
1837 Codename "Maxine").
1838
1839config FB_G364
1840 bool "G364 frame buffer support"
1841 depends on (FB = y) && (MIPS_MAGNUM_4000 || OLIVETTI_M700)
1842 select FB_CFB_FILLRECT
1843 select FB_CFB_COPYAREA
1844 select FB_CFB_IMAGEBLIT
1845 help
1846 The G364 driver is the framebuffer used in MIPS Magnum 4000 and
1847 Olivetti M700-10 systems.
1848
1849config FB_68328
1850 bool "Motorola 68328 native frame buffer support"
1851 depends on (FB = y) && (M68328 || M68EZ328 || M68VZ328)
1852 select FB_CFB_FILLRECT
1853 select FB_CFB_COPYAREA
1854 select FB_CFB_IMAGEBLIT
1855 help
1856 Say Y here if you want to support the built-in frame buffer of
1857 the Motorola 68328 CPU family.
1858
1859config FB_PXA168
1860 tristate "PXA168/910 LCD framebuffer support"
1861 depends on FB && (CPU_PXA168 || CPU_PXA910)
1862 select FB_CFB_FILLRECT
1863 select FB_CFB_COPYAREA
1864 select FB_CFB_IMAGEBLIT
1865 ---help---
1866 Frame buffer driver for the built-in LCD controller in the Marvell
1867 MMP processor.
1868
1869config FB_PXA
1870 tristate "PXA LCD framebuffer support"
1871 depends on FB && ARCH_PXA
1872 select FB_CFB_FILLRECT
1873 select FB_CFB_COPYAREA
1874 select FB_CFB_IMAGEBLIT
1875 ---help---
1876 Frame buffer driver for the built-in LCD controller in the Intel
1877 PXA2x0 processor.
1878
1879 This driver is also available as a module ( = code which can be
1880 inserted and removed from the running kernel whenever you want). The
1881 module will be called pxafb. If you want to compile it as a module,
1882 say M here and read <file:Documentation/kbuild/modules.txt>.
1883
1884 If unsure, say N.
1885
1886config FB_PXA_OVERLAY
1887 bool "Support PXA27x/PXA3xx Overlay(s) as framebuffer"
1888 default n
1889 depends on FB_PXA && (PXA27x || PXA3xx)
1890
1891config FB_PXA_SMARTPANEL
1892 bool "PXA Smartpanel LCD support"
1893 default n
1894 depends on FB_PXA
1895
1896config FB_PXA_PARAMETERS
1897 bool "PXA LCD command line parameters"
1898 default n
1899 depends on FB_PXA
1900 ---help---
1901 Enable the use of kernel command line or module parameters
1902 to configure the physical properties of the LCD panel when
1903 using the PXA LCD driver.
1904
1905 This option allows you to override the panel parameters
1906 supplied by the platform in order to support multiple
1907 different models of flatpanel. If you will only be using a
1908 single model of flatpanel then you can safely leave this
1909 option disabled.
1910
1911 <file:Documentation/fb/pxafb.txt> describes the available parameters.
1912
1913config PXA3XX_GCU
1914 tristate "PXA3xx 2D graphics accelerator driver"
1915 depends on FB_PXA
1916 help
1917 Kernelspace driver for the 2D graphics controller unit (GCU)
1918 found on PXA3xx processors. There is a counterpart driver in the
1919 DirectFB suite, see http://www.directfb.org/
1920
1921 If you compile this as a module, it will be called pxa3xx_gcu.
1922
1923config FB_MBX
1924 tristate "2700G LCD framebuffer support"
1925 depends on FB && ARCH_PXA
1926 select FB_CFB_FILLRECT
1927 select FB_CFB_COPYAREA
1928 select FB_CFB_IMAGEBLIT
1929 ---help---
1930 Framebuffer driver for the Intel 2700G (Marathon) Graphics
1931 Accelerator
1932
1933config FB_MBX_DEBUG
1934 bool "Enable debugging info via debugfs"
1935 depends on FB_MBX && DEBUG_FS
1936 default n
1937 ---help---
1938 Enable this if you want debugging information using the debug
1939 filesystem (debugfs)
1940
1941 If unsure, say N.
1942
1943config FB_FSL_DIU
1944 tristate "Freescale DIU framebuffer support"
1945 depends on FB && FSL_SOC
1946 select FB_MODE_HELPERS
1947 select FB_CFB_FILLRECT
1948 select FB_CFB_COPYAREA
1949 select FB_CFB_IMAGEBLIT
1950 select PPC_LIB_RHEAP
1951 ---help---
1952 Framebuffer driver for the Freescale SoC DIU
1953
1954config FB_W100
1955 tristate "W100 frame buffer support"
1956 depends on FB && ARCH_PXA
1957 select FB_CFB_FILLRECT
1958 select FB_CFB_COPYAREA
1959 select FB_CFB_IMAGEBLIT
1960 ---help---
1961 Frame buffer driver for the w100 as found on the Sharp SL-Cxx series.
1962 It can also drive the w3220 chip found on iPAQ hx4700.
1963
1964 This driver is also available as a module ( = code which can be
1965 inserted and removed from the running kernel whenever you want). The
1966 module will be called w100fb. If you want to compile it as a module,
1967 say M here and read <file:Documentation/kbuild/modules.txt>.
1968
1969 If unsure, say N.
1970
1971config FB_SH_MOBILE_LCDC
1972 tristate "SuperH Mobile LCDC framebuffer support"
1973 depends on FB && (SUPERH || ARCH_SHMOBILE) && HAVE_CLK
1974 select FB_SYS_FILLRECT
1975 select FB_SYS_COPYAREA
1976 select FB_SYS_IMAGEBLIT
1977 select FB_SYS_FOPS
1978 select FB_DEFERRED_IO
1979 select FB_BACKLIGHT
1980 select SH_MIPI_DSI if SH_LCD_MIPI_DSI
1981 ---help---
1982 Frame buffer driver for the on-chip SH-Mobile LCD controller.
1983
1984config FB_SH_MOBILE_HDMI
1985 tristate "SuperH Mobile HDMI controller support"
1986 depends on FB_SH_MOBILE_LCDC
1987 select FB_MODE_HELPERS
1988 select SOUND
1989 select SND
1990 select SND_SOC
1991 ---help---
1992 Driver for the on-chip SH-Mobile HDMI controller.
1993
1994config FB_TMIO
1995 tristate "Toshiba Mobile IO FrameBuffer support"
1996 depends on FB && MFD_CORE
1997 select FB_CFB_FILLRECT
1998 select FB_CFB_COPYAREA
1999 select FB_CFB_IMAGEBLIT
2000 ---help---
2001 Frame buffer driver for the Toshiba Mobile IO integrated as found
2002 on the Sharp SL-6000 series
2003
2004 This driver is also available as a module ( = code which can be
2005 inserted and removed from the running kernel whenever you want). The
2006 module will be called tmiofb. If you want to compile it as a module,
2007 say M here and read <file:Documentation/kbuild/modules.txt>.
2008
2009 If unsure, say N.
2010
2011config FB_TMIO_ACCELL
2012 bool "tmiofb acceleration"
2013 depends on FB_TMIO
2014 default y
2015
2016config FB_S3C
2017 tristate "Samsung S3C framebuffer support"
2018 depends on FB && (CPU_S3C2416 || ARCH_S3C64XX || ARCH_S5P64X0 || \
2019 ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
2020 select FB_CFB_FILLRECT
2021 select FB_CFB_COPYAREA
2022 select FB_CFB_IMAGEBLIT
2023 ---help---
2024 Frame buffer driver for the built-in FB controller in the Samsung
2025 SoC line from the S3C2443 onwards, including the S3C2416, S3C2450,
2026 and the S3C64XX series such as the S3C6400 and S3C6410.
2027
2028 These chips all have the same basic framebuffer design with the
2029 actual capabilities depending on the chip. For instance the S3C6400
2030 and S3C6410 support 4 hardware windows whereas the S3C24XX series
2031 currently only have two.
2032
2033 Currently the support is only for the S3C6400 and S3C6410 SoCs.
2034
2035config FB_S3C_DEBUG_REGWRITE
2036 bool "Debug register writes"
2037 depends on FB_S3C
2038 ---help---
2039 Show all register writes via pr_debug()
2040
2041config FB_S3C2410
2042 tristate "S3C2410 LCD framebuffer support"
2043 depends on FB && ARCH_S3C24XX
2044 select FB_CFB_FILLRECT
2045 select FB_CFB_COPYAREA
2046 select FB_CFB_IMAGEBLIT
2047 ---help---
2048 Frame buffer driver for the built-in LCD controller in the Samsung
2049 S3C2410 processor.
2050
2051 This driver is also available as a module ( = code which can be
2052 inserted and removed from the running kernel whenever you want). The
2053 module will be called s3c2410fb. If you want to compile it as a module,
2054 say M here and read <file:Documentation/kbuild/modules.txt>.
2055
2056 If unsure, say N.
2057config FB_S3C2410_DEBUG
2058 bool "S3C2410 lcd debug messages"
2059 depends on FB_S3C2410
2060 help
2061 Turn on debugging messages. Note that you can set/unset at run time
2062 through sysfs
2063
2064config FB_NUC900
2065 bool "NUC900 LCD framebuffer support"
2066 depends on FB && ARCH_W90X900
2067 select FB_CFB_FILLRECT
2068 select FB_CFB_COPYAREA
2069 select FB_CFB_IMAGEBLIT
2070 ---help---
2071 Frame buffer driver for the built-in LCD controller in the Nuvoton
2072 NUC900 processor
2073
2074config GPM1040A0_320X240
2075 bool "Giantplus Technology GPM1040A0 320x240 Color TFT LCD"
2076 depends on FB_NUC900
2077
2078config FB_SM501
2079 tristate "Silicon Motion SM501 framebuffer support"
2080 depends on FB && MFD_SM501
2081 select FB_CFB_FILLRECT
2082 select FB_CFB_COPYAREA
2083 select FB_CFB_IMAGEBLIT
2084 ---help---
2085 Frame buffer driver for the CRT and LCD controllers in the Silicon
2086 Motion SM501.
2087
2088 This driver is also available as a module ( = code which can be
2089 inserted and removed from the running kernel whenever you want). The
2090 module will be called sm501fb. If you want to compile it as a module,
2091 say M here and read <file:Documentation/kbuild/modules.txt>.
2092
2093 If unsure, say N.
2094
2095config FB_SMSCUFX
2096 tristate "SMSC UFX6000/7000 USB Framebuffer support"
2097 depends on FB && USB
2098 select FB_MODE_HELPERS
2099 select FB_SYS_FILLRECT
2100 select FB_SYS_COPYAREA
2101 select FB_SYS_IMAGEBLIT
2102 select FB_SYS_FOPS
2103 select FB_DEFERRED_IO
2104 ---help---
2105 This is a kernel framebuffer driver for SMSC UFX USB devices.
2106 Supports fbdev clients like xf86-video-fbdev, kdrive, fbi, and
2107 mplayer -vo fbdev. Supports both UFX6000 (USB 2.0) and UFX7000
2108 (USB 3.0) devices.
2109 To compile as a module, choose M here: the module name is smscufx.
2110
2111config FB_UDL
2112 tristate "Displaylink USB Framebuffer support"
2113 depends on FB && USB
2114 select FB_MODE_HELPERS
2115 select FB_SYS_FILLRECT
2116 select FB_SYS_COPYAREA
2117 select FB_SYS_IMAGEBLIT
2118 select FB_SYS_FOPS
2119 select FB_DEFERRED_IO
2120 ---help---
2121 This is a kernel framebuffer driver for DisplayLink USB devices.
2122 Supports fbdev clients like xf86-video-fbdev, kdrive, fbi, and
2123 mplayer -vo fbdev. Supports all USB 2.0 era DisplayLink devices.
2124 To compile as a module, choose M here: the module name is udlfb.
2125
2126config FB_IBM_GXT4500
2127 tristate "Framebuffer support for IBM GXT4000P/4500P/6000P/6500P adaptors"
2128 depends on FB && PPC
2129 select FB_CFB_FILLRECT
2130 select FB_CFB_COPYAREA
2131 select FB_CFB_IMAGEBLIT
2132 ---help---
2133 Say Y here to enable support for the IBM GXT4000P/6000P and
2134 GXT4500P/6500P display adaptor based on Raster Engine RC1000,
2135 found on some IBM System P (pSeries) machines. This driver
2136 doesn't use Geometry Engine GT1000.
2137
2138config FB_PS3
2139 tristate "PS3 GPU framebuffer driver"
2140 depends on FB && PS3_PS3AV
2141 select FB_SYS_FILLRECT
2142 select FB_SYS_COPYAREA
2143 select FB_SYS_IMAGEBLIT
2144 select FB_SYS_FOPS
2145 select VT_HW_CONSOLE_BINDING if FRAMEBUFFER_CONSOLE
2146 ---help---
2147 Include support for the virtual frame buffer in the PS3 platform.
2148
2149config FB_PS3_DEFAULT_SIZE_M
2150 int "PS3 default frame buffer size (in MiB)"
2151 depends on FB_PS3
2152 default 9
2153 ---help---
2154 This is the default size (in MiB) of the virtual frame buffer in
2155 the PS3.
2156 The default value can be overridden on the kernel command line
2157 using the "ps3fb" option (e.g. "ps3fb=9M");
2158
2159config FB_XILINX
2160 tristate "Xilinx frame buffer support"
2161 depends on FB && (XILINX_VIRTEX || MICROBLAZE || ARCH_ZYNQ)
2162 select FB_CFB_FILLRECT
2163 select FB_CFB_COPYAREA
2164 select FB_CFB_IMAGEBLIT
2165 ---help---
2166 Include support for the Xilinx ML300/ML403 reference design
2167 framebuffer. ML300 carries a 640*480 LCD display on the board,
2168 ML403 uses a standard DB15 VGA connector.
2169
2170config FB_GOLDFISH
2171 tristate "Goldfish Framebuffer"
2172 depends on FB && HAS_DMA
2173 select FB_CFB_FILLRECT
2174 select FB_CFB_COPYAREA
2175 select FB_CFB_IMAGEBLIT
2176 ---help---
2177 Framebuffer driver for Goldfish Virtual Platform
2178
2179config FB_COBALT
2180 tristate "Cobalt server LCD frame buffer support"
2181 depends on FB && (MIPS_COBALT || MIPS_SEAD3)
2182
2183config FB_SH7760
2184 bool "SH7760/SH7763/SH7720/SH7721 LCDC support"
2185 depends on FB && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \
2186 || CPU_SUBTYPE_SH7720 || CPU_SUBTYPE_SH7721)
2187 select FB_CFB_FILLRECT
2188 select FB_CFB_COPYAREA
2189 select FB_CFB_IMAGEBLIT
2190 ---help---
2191 Support for the SH7760/SH7763/SH7720/SH7721 integrated
2192 (D)STN/TFT LCD Controller.
2193 Supports display resolutions up to 1024x1024 pixel, grayscale and
2194 color operation, with depths ranging from 1 bpp to 8 bpp monochrome
2195 and 8, 15 or 16 bpp color; 90 degrees clockwise display rotation for
2196 panels <= 320 pixel horizontal resolution.
2197
2198config FB_DA8XX
2199 tristate "DA8xx/OMAP-L1xx/AM335x Framebuffer support"
2200 depends on FB && (ARCH_DAVINCI_DA8XX || SOC_AM33XX)
2201 select FB_CFB_FILLRECT
2202 select FB_CFB_COPYAREA
2203 select FB_CFB_IMAGEBLIT
2204 select FB_CFB_REV_PIXELS_IN_BYTE
2205 select FB_MODE_HELPERS
2206 select VIDEOMODE_HELPERS
2207 ---help---
2208 This is the frame buffer device driver for the TI LCD controller
2209 found on DA8xx/OMAP-L1xx/AM335x SoCs.
2210 If unsure, say N.
2211
2212config FB_VIRTUAL
2213 tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)"
2214 depends on FB
2215 select FB_SYS_FILLRECT
2216 select FB_SYS_COPYAREA
2217 select FB_SYS_IMAGEBLIT
2218 select FB_SYS_FOPS
2219 ---help---
2220 This is a `virtual' frame buffer device. It operates on a chunk of
2221 unswappable kernel memory instead of on the memory of a graphics
2222 board. This means you cannot see any output sent to this frame
2223 buffer device, while it does consume precious memory. The main use
2224 of this frame buffer device is testing and debugging the frame
2225 buffer subsystem. Do NOT enable it for normal systems! To protect
2226 the innocent, it has to be enabled explicitly at boot time using the
2227 kernel option `video=vfb:'.
2228
2229 To compile this driver as a module, choose M here: the
2230 module will be called vfb. In order to load it, you must use
2231 the vfb_enable=1 option.
2232
2233 If unsure, say N.
2234
2235config XEN_FBDEV_FRONTEND
2236 tristate "Xen virtual frame buffer support"
2237 depends on FB && XEN
2238 select FB_SYS_FILLRECT
2239 select FB_SYS_COPYAREA
2240 select FB_SYS_IMAGEBLIT
2241 select FB_SYS_FOPS
2242 select FB_DEFERRED_IO
2243 select INPUT_XEN_KBDDEV_FRONTEND if INPUT_MISC
2244 select XEN_XENBUS_FRONTEND
2245 default y
2246 help
2247 This driver implements the front-end of the Xen virtual
2248 frame buffer driver. It communicates with a back-end
2249 in another domain.
2250
2251config FB_METRONOME
2252 tristate "E-Ink Metronome/8track controller support"
2253 depends on FB
2254 select FB_SYS_FILLRECT
2255 select FB_SYS_COPYAREA
2256 select FB_SYS_IMAGEBLIT
2257 select FB_SYS_FOPS
2258 select FB_DEFERRED_IO
2259 help
2260 This driver implements support for the E-Ink Metronome
2261 controller. The pre-release name for this device was 8track
2262 and could also have been called by some vendors as PVI-nnnn.
2263
2264config FB_MB862XX
2265 tristate "Fujitsu MB862xx GDC support"
2266 depends on FB
2267 depends on PCI || (OF && PPC)
2268 select FB_CFB_FILLRECT
2269 select FB_CFB_COPYAREA
2270 select FB_CFB_IMAGEBLIT
2271 ---help---
2272 Frame buffer driver for Fujitsu Carmine/Coral-P(A)/Lime controllers.
2273
2274choice
2275 prompt "GDC variant"
2276 depends on FB_MB862XX
2277
2278config FB_MB862XX_PCI_GDC
2279 bool "Carmine/Coral-P(A) GDC"
2280 depends on PCI
2281 ---help---
2282 This enables framebuffer support for Fujitsu Carmine/Coral-P(A)
2283 PCI graphics controller devices.
2284
2285config FB_MB862XX_LIME
2286 bool "Lime GDC"
2287 depends on OF && PPC
2288 select FB_FOREIGN_ENDIAN
2289 select FB_LITTLE_ENDIAN
2290 ---help---
2291 Framebuffer support for Fujitsu Lime GDC on host CPU bus.
2292
2293endchoice
2294
2295config FB_MB862XX_I2C
2296 bool "Support I2C bus on MB862XX GDC"
2297 depends on FB_MB862XX && I2C
2298 default y
2299 help
2300 Selecting this option adds Coral-P(A)/Lime GDC I2C bus adapter
2301 driver to support accessing I2C devices on controller's I2C bus.
2302 These are usually some video decoder chips.
2303
2304config FB_EP93XX
2305 tristate "EP93XX frame buffer support"
2306 depends on FB && ARCH_EP93XX
2307 select FB_CFB_FILLRECT
2308 select FB_CFB_COPYAREA
2309 select FB_CFB_IMAGEBLIT
2310 ---help---
2311 Framebuffer driver for the Cirrus Logic EP93XX series of processors.
2312 This driver is also available as a module. The module will be called
2313 ep93xx-fb.
2314
2315config FB_PRE_INIT_FB
2316 bool "Don't reinitialize, use bootloader's GDC/Display configuration"
2317 depends on FB && FB_MB862XX_LIME
2318 ---help---
2319 Select this option if display contents should be inherited as set by
2320 the bootloader.
2321
2322config FB_MSM
2323 tristate "MSM Framebuffer support"
2324 depends on FB && ARCH_MSM
2325 select FB_CFB_FILLRECT
2326 select FB_CFB_COPYAREA
2327 select FB_CFB_IMAGEBLIT
2328
2329config FB_MX3
2330 tristate "MX3 Framebuffer support"
2331 depends on FB && MX3_IPU
2332 select FB_CFB_FILLRECT
2333 select FB_CFB_COPYAREA
2334 select FB_CFB_IMAGEBLIT
2335 default y
2336 help
2337 This is a framebuffer device for the i.MX31 LCD Controller. So
2338 far only synchronous displays are supported. If you plan to use
2339 an LCD display with your i.MX31 system, say Y here.
2340
2341config FB_BROADSHEET
2342 tristate "E-Ink Broadsheet/Epson S1D13521 controller support"
2343 depends on FB
2344 select FB_SYS_FILLRECT
2345 select FB_SYS_COPYAREA
2346 select FB_SYS_IMAGEBLIT
2347 select FB_SYS_FOPS
2348 select FB_DEFERRED_IO
2349 help
2350 This driver implements support for the E-Ink Broadsheet
2351 controller. The release name for this device was Epson S1D13521
2352 and could also have been called by other names when coupled with
2353 a bridge adapter.
2354
2355config FB_AUO_K190X
2356 tristate "AUO-K190X EPD controller support"
2357 depends on FB
2358 select FB_SYS_FILLRECT
2359 select FB_SYS_COPYAREA
2360 select FB_SYS_IMAGEBLIT
2361 select FB_SYS_FOPS
2362 select FB_DEFERRED_IO
2363 help
2364 Provides support for epaper controllers from the K190X series
2365 of AUO. These controllers can be used to drive epaper displays
2366 from Sipix.
2367
2368 This option enables the common support, shared by the individual
2369 controller drivers. You will also have to enable the driver
2370 for the controller type used in your device.
2371
2372config FB_AUO_K1900
2373 tristate "AUO-K1900 EPD controller support"
2374 depends on FB && FB_AUO_K190X
2375 help
2376 This driver implements support for the AUO K1900 epd-controller.
2377 This controller can drive Sipix epaper displays but can only do
2378 serial updates, reducing the number of possible frames per second.
2379
2380config FB_AUO_K1901
2381 tristate "AUO-K1901 EPD controller support"
2382 depends on FB && FB_AUO_K190X
2383 help
2384 This driver implements support for the AUO K1901 epd-controller.
2385 This controller can drive Sipix epaper displays and supports
2386 concurrent updates, making higher frames per second possible.
2387
2388config FB_JZ4740
2389 tristate "JZ4740 LCD framebuffer support"
2390 depends on FB && MACH_JZ4740
2391 select FB_SYS_FILLRECT
2392 select FB_SYS_COPYAREA
2393 select FB_SYS_IMAGEBLIT
2394 help
2395 Framebuffer support for the JZ4740 SoC.
2396
2397config FB_MXS
2398 tristate "MXS LCD framebuffer support"
2399 depends on FB && ARCH_MXS
2400 select FB_CFB_FILLRECT
2401 select FB_CFB_COPYAREA
2402 select FB_CFB_IMAGEBLIT
2403 select FB_MODE_HELPERS
2404 select VIDEOMODE_HELPERS
2405 help
2406 Framebuffer support for the MXS SoC.
2407
2408config FB_PUV3_UNIGFX
2409 tristate "PKUnity v3 Unigfx framebuffer support"
2410 depends on FB && UNICORE32 && ARCH_PUV3
2411 select FB_SYS_FILLRECT
2412 select FB_SYS_COPYAREA
2413 select FB_SYS_IMAGEBLIT
2414 select FB_SYS_FOPS
2415 help
2416 Choose this option if you want to use the Unigfx device as a
2417 framebuffer device. Without the support of PCI & AGP.
2418
2419config FB_HYPERV
2420 tristate "Microsoft Hyper-V Synthetic Video support"
2421 depends on FB && HYPERV
2422 select FB_CFB_FILLRECT
2423 select FB_CFB_COPYAREA
2424 select FB_CFB_IMAGEBLIT
2425 help
2426 This framebuffer driver supports Microsoft Hyper-V Synthetic Video.
2427
2428config FB_SIMPLE
2429 bool "Simple framebuffer support"
2430 depends on (FB = y)
2431 select FB_CFB_FILLRECT
2432 select FB_CFB_COPYAREA
2433 select FB_CFB_IMAGEBLIT
2434 help
2435 Say Y if you want support for a simple frame-buffer.
2436
2437 This driver assumes that the display hardware has been initialized
2438 before the kernel boots, and the kernel will simply render to the
2439 pre-allocated frame buffer surface.
2440
2441 Configuration re: surface address, size, and format must be provided
2442 through device tree, or plain old platform data.
2443
2444source "drivers/video/fbdev/omap/Kconfig"
2445source "drivers/video/fbdev/omap2/Kconfig"
2446source "drivers/video/fbdev/exynos/Kconfig"
2447source "drivers/video/fbdev/mmp/Kconfig"
2448
2449config FB_SH_MOBILE_MERAM
2450 tristate "SuperH Mobile MERAM read ahead support"
2451 depends on (SUPERH || ARCH_SHMOBILE)
2452 select GENERIC_ALLOCATOR
2453 ---help---
2454 Enable MERAM support for the SuperH controller.
2455
2456 This will allow for caching of the framebuffer to provide more
2457 reliable access under heavy main memory bus traffic situations.
2458 Up to 4 memory channels can be configured, allowing 4 RGB or
2459 2 YCbCr framebuffers to be configured.
2460
2461config FB_SSD1307
2462 tristate "Solomon SSD1307 framebuffer support"
2463 depends on FB && I2C
2464 depends on OF
2465 depends on GPIOLIB
2466 select FB_SYS_FOPS
2467 select FB_SYS_FILLRECT
2468 select FB_SYS_COPYAREA
2469 select FB_SYS_IMAGEBLIT
2470 select FB_DEFERRED_IO
2471 select PWM
2472 help
2473 This driver implements support for the Solomon SSD1307
2474 OLED controller over I2C.
diff --git a/drivers/video/fbdev/Makefile b/drivers/video/fbdev/Makefile
new file mode 100644
index 000000000000..0284f2a12538
--- /dev/null
+++ b/drivers/video/fbdev/Makefile
@@ -0,0 +1,152 @@
1# Makefile for the Linux video drivers.
2# 5 Aug 1999, James Simmons, <mailto:jsimmons@users.sf.net>
3# Rewritten to use lists instead of if-statements.
4
5# Each configuration option enables a list of files.
6
7obj-y += core/
8
9obj-$(CONFIG_EXYNOS_VIDEO) += exynos/
10
11obj-$(CONFIG_FB_MACMODES) += macmodes.o
12obj-$(CONFIG_FB_WMT_GE_ROPS) += wmt_ge_rops.o
13
14# Hardware specific drivers go first
15obj-$(CONFIG_FB_AMIGA) += amifb.o c2p_planar.o
16obj-$(CONFIG_FB_ARC) += arcfb.o
17obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o
18obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o
19obj-$(CONFIG_FB_GRVGA) += grvga.o
20obj-$(CONFIG_FB_PM2) += pm2fb.o
21obj-$(CONFIG_FB_PM3) += pm3fb.o
22
23obj-$(CONFIG_FB_I740) += i740fb.o
24obj-$(CONFIG_FB_MATROX) += matrox/
25obj-$(CONFIG_FB_RIVA) += riva/
26obj-$(CONFIG_FB_NVIDIA) += nvidia/
27obj-$(CONFIG_FB_ATY) += aty/ macmodes.o
28obj-$(CONFIG_FB_ATY128) += aty/ macmodes.o
29obj-$(CONFIG_FB_RADEON) += aty/
30obj-$(CONFIG_FB_SIS) += sis/
31obj-$(CONFIG_FB_VIA) += via/
32obj-$(CONFIG_FB_KYRO) += kyro/
33obj-$(CONFIG_FB_SAVAGE) += savage/
34obj-$(CONFIG_FB_GEODE) += geode/
35obj-$(CONFIG_FB_MBX) += mbx/
36obj-$(CONFIG_FB_NEOMAGIC) += neofb.o
37obj-$(CONFIG_FB_3DFX) += tdfxfb.o
38obj-$(CONFIG_FB_CONTROL) += controlfb.o
39obj-$(CONFIG_FB_PLATINUM) += platinumfb.o
40obj-$(CONFIG_FB_VALKYRIE) += valkyriefb.o
41obj-$(CONFIG_FB_CT65550) += chipsfb.o
42obj-$(CONFIG_FB_IMSTT) += imsttfb.o
43obj-$(CONFIG_FB_FM2) += fm2fb.o
44obj-$(CONFIG_FB_VT8623) += vt8623fb.o
45obj-$(CONFIG_FB_TRIDENT) += tridentfb.o
46obj-$(CONFIG_FB_LE80578) += vermilion/
47obj-$(CONFIG_FB_S3) += s3fb.o
48obj-$(CONFIG_FB_ARK) += arkfb.o
49obj-$(CONFIG_FB_STI) += stifb.o
50obj-$(CONFIG_FB_FFB) += ffb.o sbuslib.o
51obj-$(CONFIG_FB_CG6) += cg6.o sbuslib.o
52obj-$(CONFIG_FB_CG3) += cg3.o sbuslib.o
53obj-$(CONFIG_FB_BW2) += bw2.o sbuslib.o
54obj-$(CONFIG_FB_CG14) += cg14.o sbuslib.o
55obj-$(CONFIG_FB_P9100) += p9100.o sbuslib.o
56obj-$(CONFIG_FB_TCX) += tcx.o sbuslib.o
57obj-$(CONFIG_FB_LEO) += leo.o sbuslib.o
58obj-$(CONFIG_FB_ACORN) += acornfb.o
59obj-$(CONFIG_FB_ATARI) += atafb.o c2p_iplan2.o atafb_mfb.o \
60 atafb_iplan2p2.o atafb_iplan2p4.o atafb_iplan2p8.o
61obj-$(CONFIG_FB_MAC) += macfb.o
62obj-$(CONFIG_FB_HECUBA) += hecubafb.o
63obj-$(CONFIG_FB_N411) += n411.o
64obj-$(CONFIG_FB_HGA) += hgafb.o
65obj-$(CONFIG_FB_XVR500) += sunxvr500.o
66obj-$(CONFIG_FB_XVR2500) += sunxvr2500.o
67obj-$(CONFIG_FB_XVR1000) += sunxvr1000.o
68obj-$(CONFIG_FB_IGA) += igafb.o
69obj-$(CONFIG_FB_APOLLO) += dnfb.o
70obj-$(CONFIG_FB_Q40) += q40fb.o
71obj-$(CONFIG_FB_TGA) += tgafb.o
72obj-$(CONFIG_FB_HP300) += hpfb.o
73obj-$(CONFIG_FB_G364) += g364fb.o
74obj-$(CONFIG_FB_EP93XX) += ep93xx-fb.o
75obj-$(CONFIG_FB_SA1100) += sa1100fb.o
76obj-$(CONFIG_FB_HIT) += hitfb.o
77obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o
78obj-$(CONFIG_FB_PVR2) += pvr2fb.o
79obj-$(CONFIG_FB_VOODOO1) += sstfb.o
80obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o
81obj-$(CONFIG_FB_GOLDFISH) += goldfishfb.o
82obj-$(CONFIG_FB_68328) += 68328fb.o
83obj-$(CONFIG_FB_GBE) += gbefb.o
84obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o
85obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o
86obj-$(CONFIG_FB_PXA) += pxafb.o
87obj-$(CONFIG_FB_PXA168) += pxa168fb.o
88obj-$(CONFIG_PXA3XX_GCU) += pxa3xx-gcu.o
89obj-$(CONFIG_MMP_DISP) += mmp/
90obj-$(CONFIG_FB_W100) += w100fb.o
91obj-$(CONFIG_FB_TMIO) += tmiofb.o
92obj-$(CONFIG_FB_AU1100) += au1100fb.o
93obj-$(CONFIG_FB_AU1200) += au1200fb.o
94obj-$(CONFIG_FB_VT8500) += vt8500lcdfb.o
95obj-$(CONFIG_FB_WM8505) += wm8505fb.o
96obj-$(CONFIG_FB_PMAG_AA) += pmag-aa-fb.o
97obj-$(CONFIG_FB_PMAG_BA) += pmag-ba-fb.o
98obj-$(CONFIG_FB_PMAGB_B) += pmagb-b-fb.o
99obj-$(CONFIG_FB_MAXINE) += maxinefb.o
100obj-$(CONFIG_FB_METRONOME) += metronomefb.o
101obj-$(CONFIG_FB_BROADSHEET) += broadsheetfb.o
102obj-$(CONFIG_FB_AUO_K190X) += auo_k190x.o
103obj-$(CONFIG_FB_AUO_K1900) += auo_k1900fb.o
104obj-$(CONFIG_FB_AUO_K1901) += auo_k1901fb.o
105obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o
106obj-$(CONFIG_FB_SH7760) += sh7760fb.o
107obj-$(CONFIG_FB_IMX) += imxfb.o
108obj-$(CONFIG_FB_S3C) += s3c-fb.o
109obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o
110obj-$(CONFIG_FB_FSL_DIU) += fsl-diu-fb.o
111obj-$(CONFIG_FB_COBALT) += cobalt_lcdfb.o
112obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o
113obj-$(CONFIG_FB_PS3) += ps3fb.o
114obj-$(CONFIG_FB_SM501) += sm501fb.o
115obj-$(CONFIG_FB_UDL) += udlfb.o
116obj-$(CONFIG_FB_SMSCUFX) += smscufx.o
117obj-$(CONFIG_FB_XILINX) += xilinxfb.o
118obj-$(CONFIG_SH_MIPI_DSI) += sh_mipi_dsi.o
119obj-$(CONFIG_FB_SH_MOBILE_HDMI) += sh_mobile_hdmi.o
120obj-$(CONFIG_FB_SH_MOBILE_MERAM) += sh_mobile_meram.o
121obj-$(CONFIG_FB_SH_MOBILE_LCDC) += sh_mobile_lcdcfb.o
122obj-$(CONFIG_FB_OMAP) += omap/
123obj-y += omap2/
124obj-$(CONFIG_XEN_FBDEV_FRONTEND) += xen-fbfront.o
125obj-$(CONFIG_FB_CARMINE) += carminefb.o
126obj-$(CONFIG_FB_MB862XX) += mb862xx/
127obj-$(CONFIG_FB_MSM) += msm/
128obj-$(CONFIG_FB_NUC900) += nuc900fb.o
129obj-$(CONFIG_FB_JZ4740) += jz4740_fb.o
130obj-$(CONFIG_FB_PUV3_UNIGFX) += fb-puv3.o
131obj-$(CONFIG_FB_HYPERV) += hyperv_fb.o
132obj-$(CONFIG_FB_OPENCORES) += ocfb.o
133
134# Platform or fallback drivers go here
135obj-$(CONFIG_FB_UVESA) += uvesafb.o
136obj-$(CONFIG_FB_VESA) += vesafb.o
137obj-$(CONFIG_FB_EFI) += efifb.o
138obj-$(CONFIG_FB_VGA16) += vga16fb.o
139obj-$(CONFIG_FB_OF) += offb.o
140obj-$(CONFIG_FB_BF537_LQ035) += bf537-lq035.o
141obj-$(CONFIG_FB_BF54X_LQ043) += bf54x-lq043fb.o
142obj-$(CONFIG_FB_BFIN_LQ035Q1) += bfin-lq035q1-fb.o
143obj-$(CONFIG_FB_BFIN_T350MCQB) += bfin-t350mcqb-fb.o
144obj-$(CONFIG_FB_BFIN_7393) += bfin_adv7393fb.o
145obj-$(CONFIG_FB_MX3) += mx3fb.o
146obj-$(CONFIG_FB_DA8XX) += da8xx-fb.o
147obj-$(CONFIG_FB_MXS) += mxsfb.o
148obj-$(CONFIG_FB_SSD1307) += ssd1307fb.o
149obj-$(CONFIG_FB_SIMPLE) += simplefb.o
150
151# the test framebuffer is last
152obj-$(CONFIG_FB_VIRTUAL) += vfb.o
diff --git a/drivers/video/acornfb.c b/drivers/video/fbdev/acornfb.c
index a305caea58ee..a305caea58ee 100644
--- a/drivers/video/acornfb.c
+++ b/drivers/video/fbdev/acornfb.c
diff --git a/drivers/video/acornfb.h b/drivers/video/fbdev/acornfb.h
index 175c8ff3367c..175c8ff3367c 100644
--- a/drivers/video/acornfb.h
+++ b/drivers/video/fbdev/acornfb.h
diff --git a/drivers/video/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
index 14d6b3793e0a..14d6b3793e0a 100644
--- a/drivers/video/amba-clcd.c
+++ b/drivers/video/fbdev/amba-clcd.c
diff --git a/drivers/video/amifb.c b/drivers/video/fbdev/amifb.c
index 518f790ef88a..518f790ef88a 100644
--- a/drivers/video/amifb.c
+++ b/drivers/video/fbdev/amifb.c
diff --git a/drivers/video/arcfb.c b/drivers/video/fbdev/arcfb.c
index 1b0b233b8b39..1b0b233b8b39 100644
--- a/drivers/video/arcfb.c
+++ b/drivers/video/fbdev/arcfb.c
diff --git a/drivers/video/arkfb.c b/drivers/video/fbdev/arkfb.c
index adc4ea2cc5a0..adc4ea2cc5a0 100644
--- a/drivers/video/arkfb.c
+++ b/drivers/video/fbdev/arkfb.c
diff --git a/drivers/video/asiliantfb.c b/drivers/video/fbdev/asiliantfb.c
index 7e8ddf00ccc2..7e8ddf00ccc2 100644
--- a/drivers/video/asiliantfb.c
+++ b/drivers/video/fbdev/asiliantfb.c
diff --git a/drivers/video/atafb.c b/drivers/video/fbdev/atafb.c
index e21d1f58554c..e21d1f58554c 100644
--- a/drivers/video/atafb.c
+++ b/drivers/video/fbdev/atafb.c
diff --git a/drivers/video/atafb.h b/drivers/video/fbdev/atafb.h
index 014e05906cb1..014e05906cb1 100644
--- a/drivers/video/atafb.h
+++ b/drivers/video/fbdev/atafb.h
diff --git a/drivers/video/atafb_iplan2p2.c b/drivers/video/fbdev/atafb_iplan2p2.c
index 8cc9c50379d0..8cc9c50379d0 100644
--- a/drivers/video/atafb_iplan2p2.c
+++ b/drivers/video/fbdev/atafb_iplan2p2.c
diff --git a/drivers/video/atafb_iplan2p4.c b/drivers/video/fbdev/atafb_iplan2p4.c
index bee0d89463f7..bee0d89463f7 100644
--- a/drivers/video/atafb_iplan2p4.c
+++ b/drivers/video/fbdev/atafb_iplan2p4.c
diff --git a/drivers/video/atafb_iplan2p8.c b/drivers/video/fbdev/atafb_iplan2p8.c
index 356fb52ce443..356fb52ce443 100644
--- a/drivers/video/atafb_iplan2p8.c
+++ b/drivers/video/fbdev/atafb_iplan2p8.c
diff --git a/drivers/video/atafb_mfb.c b/drivers/video/fbdev/atafb_mfb.c
index 6a352d62eecf..6a352d62eecf 100644
--- a/drivers/video/atafb_mfb.c
+++ b/drivers/video/fbdev/atafb_mfb.c
diff --git a/drivers/video/atafb_utils.h b/drivers/video/fbdev/atafb_utils.h
index ac9e19dc5057..ac9e19dc5057 100644
--- a/drivers/video/atafb_utils.h
+++ b/drivers/video/fbdev/atafb_utils.h
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c
index e683b6ef9594..e683b6ef9594 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/fbdev/atmel_lcdfb.c
diff --git a/drivers/video/aty/Makefile b/drivers/video/fbdev/aty/Makefile
index a6cc0e9ec790..a6cc0e9ec790 100644
--- a/drivers/video/aty/Makefile
+++ b/drivers/video/fbdev/aty/Makefile
diff --git a/drivers/video/aty/ati_ids.h b/drivers/video/fbdev/aty/ati_ids.h
index 3e9d28bcd9f8..3e9d28bcd9f8 100644
--- a/drivers/video/aty/ati_ids.h
+++ b/drivers/video/fbdev/aty/ati_ids.h
diff --git a/drivers/video/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c
index 52108be69e77..52108be69e77 100644
--- a/drivers/video/aty/aty128fb.c
+++ b/drivers/video/fbdev/aty/aty128fb.c
diff --git a/drivers/video/aty/atyfb.h b/drivers/video/fbdev/aty/atyfb.h
index 1f39a62f899b..1f39a62f899b 100644
--- a/drivers/video/aty/atyfb.h
+++ b/drivers/video/fbdev/aty/atyfb.h
diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/fbdev/aty/atyfb_base.c
index c3d0074a32db..c3d0074a32db 100644
--- a/drivers/video/aty/atyfb_base.c
+++ b/drivers/video/fbdev/aty/atyfb_base.c
diff --git a/drivers/video/aty/mach64_accel.c b/drivers/video/fbdev/aty/mach64_accel.c
index 182bd680141f..182bd680141f 100644
--- a/drivers/video/aty/mach64_accel.c
+++ b/drivers/video/fbdev/aty/mach64_accel.c
diff --git a/drivers/video/aty/mach64_ct.c b/drivers/video/fbdev/aty/mach64_ct.c
index 51f29d627ceb..51f29d627ceb 100644
--- a/drivers/video/aty/mach64_ct.c
+++ b/drivers/video/fbdev/aty/mach64_ct.c
diff --git a/drivers/video/aty/mach64_cursor.c b/drivers/video/fbdev/aty/mach64_cursor.c
index 0fe02e22d9a4..2fa0317ab3c7 100644
--- a/drivers/video/aty/mach64_cursor.c
+++ b/drivers/video/fbdev/aty/mach64_cursor.c
@@ -5,7 +5,7 @@
5#include <linux/fb.h> 5#include <linux/fb.h>
6#include <linux/init.h> 6#include <linux/init.h>
7#include <linux/string.h> 7#include <linux/string.h>
8#include "../fb_draw.h" 8#include "../core/fb_draw.h"
9 9
10#include <asm/io.h> 10#include <asm/io.h>
11 11
diff --git a/drivers/video/aty/mach64_gx.c b/drivers/video/fbdev/aty/mach64_gx.c
index 10c988aef58e..10c988aef58e 100644
--- a/drivers/video/aty/mach64_gx.c
+++ b/drivers/video/fbdev/aty/mach64_gx.c
diff --git a/drivers/video/aty/radeon_accel.c b/drivers/video/fbdev/aty/radeon_accel.c
index a469a3d6edcb..a469a3d6edcb 100644
--- a/drivers/video/aty/radeon_accel.c
+++ b/drivers/video/fbdev/aty/radeon_accel.c
diff --git a/drivers/video/aty/radeon_backlight.c b/drivers/video/fbdev/aty/radeon_backlight.c
index db572df7e1ef..db572df7e1ef 100644
--- a/drivers/video/aty/radeon_backlight.c
+++ b/drivers/video/fbdev/aty/radeon_backlight.c
diff --git a/drivers/video/aty/radeon_base.c b/drivers/video/fbdev/aty/radeon_base.c
index 26d80a4486fb..26d80a4486fb 100644
--- a/drivers/video/aty/radeon_base.c
+++ b/drivers/video/fbdev/aty/radeon_base.c
diff --git a/drivers/video/aty/radeon_i2c.c b/drivers/video/fbdev/aty/radeon_i2c.c
index ab1d0fd76316..ab1d0fd76316 100644
--- a/drivers/video/aty/radeon_i2c.c
+++ b/drivers/video/fbdev/aty/radeon_i2c.c
diff --git a/drivers/video/aty/radeon_monitor.c b/drivers/video/fbdev/aty/radeon_monitor.c
index bc078d50d8f1..bc078d50d8f1 100644
--- a/drivers/video/aty/radeon_monitor.c
+++ b/drivers/video/fbdev/aty/radeon_monitor.c
diff --git a/drivers/video/aty/radeon_pm.c b/drivers/video/fbdev/aty/radeon_pm.c
index 46a12f1a93c3..46a12f1a93c3 100644
--- a/drivers/video/aty/radeon_pm.c
+++ b/drivers/video/fbdev/aty/radeon_pm.c
diff --git a/drivers/video/aty/radeonfb.h b/drivers/video/fbdev/aty/radeonfb.h
index cb846044f57c..cb846044f57c 100644
--- a/drivers/video/aty/radeonfb.h
+++ b/drivers/video/fbdev/aty/radeonfb.h
diff --git a/drivers/video/au1100fb.c b/drivers/video/fbdev/au1100fb.c
index 372d4aea9d1c..372d4aea9d1c 100644
--- a/drivers/video/au1100fb.c
+++ b/drivers/video/fbdev/au1100fb.c
diff --git a/drivers/video/au1100fb.h b/drivers/video/fbdev/au1100fb.h
index 12d9642d5465..12d9642d5465 100644
--- a/drivers/video/au1100fb.h
+++ b/drivers/video/fbdev/au1100fb.h
diff --git a/drivers/video/au1200fb.c b/drivers/video/fbdev/au1200fb.c
index 4cfba78a1458..4cfba78a1458 100644
--- a/drivers/video/au1200fb.c
+++ b/drivers/video/fbdev/au1200fb.c
diff --git a/drivers/video/au1200fb.h b/drivers/video/fbdev/au1200fb.h
index e2672714d8d4..e2672714d8d4 100644
--- a/drivers/video/au1200fb.h
+++ b/drivers/video/fbdev/au1200fb.h
diff --git a/drivers/video/auo_k1900fb.c b/drivers/video/fbdev/auo_k1900fb.c
index f5b668e77af3..f5b668e77af3 100644
--- a/drivers/video/auo_k1900fb.c
+++ b/drivers/video/fbdev/auo_k1900fb.c
diff --git a/drivers/video/auo_k1901fb.c b/drivers/video/fbdev/auo_k1901fb.c
index 12b9adcb75c5..12b9adcb75c5 100644
--- a/drivers/video/auo_k1901fb.c
+++ b/drivers/video/fbdev/auo_k1901fb.c
diff --git a/drivers/video/auo_k190x.c b/drivers/video/fbdev/auo_k190x.c
index 8d2499d1cafb..8d2499d1cafb 100644
--- a/drivers/video/auo_k190x.c
+++ b/drivers/video/fbdev/auo_k190x.c
diff --git a/drivers/video/auo_k190x.h b/drivers/video/fbdev/auo_k190x.h
index e35af1f51b28..e35af1f51b28 100644
--- a/drivers/video/auo_k190x.h
+++ b/drivers/video/fbdev/auo_k190x.h
diff --git a/drivers/video/bf537-lq035.c b/drivers/video/fbdev/bf537-lq035.c
index a82d2578d976..a82d2578d976 100644
--- a/drivers/video/bf537-lq035.c
+++ b/drivers/video/fbdev/bf537-lq035.c
diff --git a/drivers/video/bf54x-lq043fb.c b/drivers/video/fbdev/bf54x-lq043fb.c
index 42b8f9d11018..e2c42ad8515a 100644
--- a/drivers/video/bf54x-lq043fb.c
+++ b/drivers/video/fbdev/bf54x-lq043fb.c
@@ -49,13 +49,13 @@
49#include <linux/spinlock.h> 49#include <linux/spinlock.h>
50#include <linux/dma-mapping.h> 50#include <linux/dma-mapping.h>
51#include <linux/platform_device.h> 51#include <linux/platform_device.h>
52#include <linux/gpio.h>
52 53
53#include <asm/blackfin.h> 54#include <asm/blackfin.h>
54#include <asm/irq.h> 55#include <asm/irq.h>
55#include <asm/dpmc.h> 56#include <asm/dpmc.h>
56#include <asm/dma-mapping.h> 57#include <asm/dma-mapping.h>
57#include <asm/dma.h> 58#include <asm/dma.h>
58#include <asm/gpio.h>
59#include <asm/portmux.h> 59#include <asm/portmux.h>
60 60
61#include <mach/bf54x-lq043.h> 61#include <mach/bf54x-lq043.h>
diff --git a/drivers/video/bfin-lq035q1-fb.c b/drivers/video/fbdev/bfin-lq035q1-fb.c
index b594a58ff21d..b594a58ff21d 100644
--- a/drivers/video/bfin-lq035q1-fb.c
+++ b/drivers/video/fbdev/bfin-lq035q1-fb.c
diff --git a/drivers/video/bfin-t350mcqb-fb.c b/drivers/video/fbdev/bfin-t350mcqb-fb.c
index b5cf1307a3d9..b5cf1307a3d9 100644
--- a/drivers/video/bfin-t350mcqb-fb.c
+++ b/drivers/video/fbdev/bfin-t350mcqb-fb.c
diff --git a/drivers/video/bfin_adv7393fb.c b/drivers/video/fbdev/bfin_adv7393fb.c
index a54f7f7d763b..a54f7f7d763b 100644
--- a/drivers/video/bfin_adv7393fb.c
+++ b/drivers/video/fbdev/bfin_adv7393fb.c
diff --git a/drivers/video/bfin_adv7393fb.h b/drivers/video/fbdev/bfin_adv7393fb.h
index cd591b5152a5..cd591b5152a5 100644
--- a/drivers/video/bfin_adv7393fb.h
+++ b/drivers/video/fbdev/bfin_adv7393fb.h
diff --git a/drivers/video/broadsheetfb.c b/drivers/video/fbdev/broadsheetfb.c
index 8556264b16b7..8556264b16b7 100644
--- a/drivers/video/broadsheetfb.c
+++ b/drivers/video/fbdev/broadsheetfb.c
diff --git a/drivers/video/bt431.h b/drivers/video/fbdev/bt431.h
index 04e0cfbba538..04e0cfbba538 100644
--- a/drivers/video/bt431.h
+++ b/drivers/video/fbdev/bt431.h
diff --git a/drivers/video/bt455.h b/drivers/video/fbdev/bt455.h
index 80f61b03e9ae..80f61b03e9ae 100644
--- a/drivers/video/bt455.h
+++ b/drivers/video/fbdev/bt455.h
diff --git a/drivers/video/bw2.c b/drivers/video/fbdev/bw2.c
index bc123d6947a4..bc123d6947a4 100644
--- a/drivers/video/bw2.c
+++ b/drivers/video/fbdev/bw2.c
diff --git a/drivers/video/c2p.h b/drivers/video/fbdev/c2p.h
index 6c38d40427d8..6c38d40427d8 100644
--- a/drivers/video/c2p.h
+++ b/drivers/video/fbdev/c2p.h
diff --git a/drivers/video/c2p_core.h b/drivers/video/fbdev/c2p_core.h
index e1035a865fb9..e1035a865fb9 100644
--- a/drivers/video/c2p_core.h
+++ b/drivers/video/fbdev/c2p_core.h
diff --git a/drivers/video/c2p_iplan2.c b/drivers/video/fbdev/c2p_iplan2.c
index 19156dc6158c..19156dc6158c 100644
--- a/drivers/video/c2p_iplan2.c
+++ b/drivers/video/fbdev/c2p_iplan2.c
diff --git a/drivers/video/c2p_planar.c b/drivers/video/fbdev/c2p_planar.c
index ec7ac8526f06..ec7ac8526f06 100644
--- a/drivers/video/c2p_planar.c
+++ b/drivers/video/fbdev/c2p_planar.c
diff --git a/drivers/video/carminefb.c b/drivers/video/fbdev/carminefb.c
index 65f7c15f5fdb..65f7c15f5fdb 100644
--- a/drivers/video/carminefb.c
+++ b/drivers/video/fbdev/carminefb.c
diff --git a/drivers/video/carminefb.h b/drivers/video/fbdev/carminefb.h
index 05306de0c6b6..05306de0c6b6 100644
--- a/drivers/video/carminefb.h
+++ b/drivers/video/fbdev/carminefb.h
diff --git a/drivers/video/carminefb_regs.h b/drivers/video/fbdev/carminefb_regs.h
index 045215600b73..045215600b73 100644
--- a/drivers/video/carminefb_regs.h
+++ b/drivers/video/fbdev/carminefb_regs.h
diff --git a/drivers/video/cg14.c b/drivers/video/fbdev/cg14.c
index c79745b136bb..c79745b136bb 100644
--- a/drivers/video/cg14.c
+++ b/drivers/video/fbdev/cg14.c
diff --git a/drivers/video/cg3.c b/drivers/video/fbdev/cg3.c
index 64a89d5747ed..64a89d5747ed 100644
--- a/drivers/video/cg3.c
+++ b/drivers/video/fbdev/cg3.c
diff --git a/drivers/video/cg6.c b/drivers/video/fbdev/cg6.c
index 70781fea092a..70781fea092a 100644
--- a/drivers/video/cg6.c
+++ b/drivers/video/fbdev/cg6.c
diff --git a/drivers/video/chipsfb.c b/drivers/video/fbdev/chipsfb.c
index 206a66b61072..206a66b61072 100644
--- a/drivers/video/chipsfb.c
+++ b/drivers/video/fbdev/chipsfb.c
diff --git a/drivers/video/cirrusfb.c b/drivers/video/fbdev/cirrusfb.c
index d992aa5eb3f0..d992aa5eb3f0 100644
--- a/drivers/video/cirrusfb.c
+++ b/drivers/video/fbdev/cirrusfb.c
diff --git a/drivers/video/clps711xfb.c b/drivers/video/fbdev/clps711xfb.c
index f00980607b8f..f00980607b8f 100644
--- a/drivers/video/clps711xfb.c
+++ b/drivers/video/fbdev/clps711xfb.c
diff --git a/drivers/video/cobalt_lcdfb.c b/drivers/video/fbdev/cobalt_lcdfb.c
index d5533f4db1cf..d5533f4db1cf 100644
--- a/drivers/video/cobalt_lcdfb.c
+++ b/drivers/video/fbdev/cobalt_lcdfb.c
diff --git a/drivers/video/controlfb.c b/drivers/video/fbdev/controlfb.c
index fdadef979238..fdadef979238 100644
--- a/drivers/video/controlfb.c
+++ b/drivers/video/fbdev/controlfb.c
diff --git a/drivers/video/controlfb.h b/drivers/video/fbdev/controlfb.h
index 6026c60fc100..6026c60fc100 100644
--- a/drivers/video/controlfb.h
+++ b/drivers/video/fbdev/controlfb.h
diff --git a/drivers/video/fbdev/core/Makefile b/drivers/video/fbdev/core/Makefile
new file mode 100644
index 000000000000..fa306538dac2
--- /dev/null
+++ b/drivers/video/fbdev/core/Makefile
@@ -0,0 +1,16 @@
1obj-y += fb_notify.o
2obj-$(CONFIG_FB) += fb.o
3fb-y := fbmem.o fbmon.o fbcmap.o fbsysfs.o \
4 modedb.o fbcvt.o
5fb-objs := $(fb-y)
6
7obj-$(CONFIG_FB_CFB_FILLRECT) += cfbfillrect.o
8obj-$(CONFIG_FB_CFB_COPYAREA) += cfbcopyarea.o
9obj-$(CONFIG_FB_CFB_IMAGEBLIT) += cfbimgblt.o
10obj-$(CONFIG_FB_SYS_FILLRECT) += sysfillrect.o
11obj-$(CONFIG_FB_SYS_COPYAREA) += syscopyarea.o
12obj-$(CONFIG_FB_SYS_IMAGEBLIT) += sysimgblt.o
13obj-$(CONFIG_FB_SYS_FOPS) += fb_sys_fops.o
14obj-$(CONFIG_FB_SVGALIB) += svgalib.o
15obj-$(CONFIG_FB_DDC) += fb_ddc.o
16obj-$(CONFIG_FB_DEFERRED_IO) += fb_defio.o
diff --git a/drivers/video/cfbcopyarea.c b/drivers/video/fbdev/core/cfbcopyarea.c
index bcb57235fcc7..bcb57235fcc7 100644
--- a/drivers/video/cfbcopyarea.c
+++ b/drivers/video/fbdev/core/cfbcopyarea.c
diff --git a/drivers/video/cfbfillrect.c b/drivers/video/fbdev/core/cfbfillrect.c
index ba9f58b2a5e8..ba9f58b2a5e8 100644
--- a/drivers/video/cfbfillrect.c
+++ b/drivers/video/fbdev/core/cfbfillrect.c
diff --git a/drivers/video/cfbimgblt.c b/drivers/video/fbdev/core/cfbimgblt.c
index a2bb276a8b24..a2bb276a8b24 100644
--- a/drivers/video/cfbimgblt.c
+++ b/drivers/video/fbdev/core/cfbimgblt.c
diff --git a/drivers/video/fb_ddc.c b/drivers/video/fbdev/core/fb_ddc.c
index 2b106f046fde..94322ccfedde 100644
--- a/drivers/video/fb_ddc.c
+++ b/drivers/video/fbdev/core/fb_ddc.c
@@ -15,7 +15,7 @@
15#include <linux/i2c-algo-bit.h> 15#include <linux/i2c-algo-bit.h>
16#include <linux/slab.h> 16#include <linux/slab.h>
17 17
18#include "edid.h" 18#include "../edid.h"
19 19
20#define DDC_ADDR 0x50 20#define DDC_ADDR 0x50
21 21
diff --git a/drivers/video/fb_defio.c b/drivers/video/fbdev/core/fb_defio.c
index 900aa4ecd617..900aa4ecd617 100644
--- a/drivers/video/fb_defio.c
+++ b/drivers/video/fbdev/core/fb_defio.c
diff --git a/drivers/video/fb_draw.h b/drivers/video/fbdev/core/fb_draw.h
index 624ee115f129..624ee115f129 100644
--- a/drivers/video/fb_draw.h
+++ b/drivers/video/fbdev/core/fb_draw.h
diff --git a/drivers/video/fb_notify.c b/drivers/video/fbdev/core/fb_notify.c
index 74c2da528884..74c2da528884 100644
--- a/drivers/video/fb_notify.c
+++ b/drivers/video/fbdev/core/fb_notify.c
diff --git a/drivers/video/fb_sys_fops.c b/drivers/video/fbdev/core/fb_sys_fops.c
index ff275d7f3eaf..ff275d7f3eaf 100644
--- a/drivers/video/fb_sys_fops.c
+++ b/drivers/video/fbdev/core/fb_sys_fops.c
diff --git a/drivers/video/fbcmap.c b/drivers/video/fbdev/core/fbcmap.c
index f89245b8ba8e..f89245b8ba8e 100644
--- a/drivers/video/fbcmap.c
+++ b/drivers/video/fbdev/core/fbcmap.c
diff --git a/drivers/video/fbcvt.c b/drivers/video/fbdev/core/fbcvt.c
index 7cb715dfc0e1..7cb715dfc0e1 100644
--- a/drivers/video/fbcvt.c
+++ b/drivers/video/fbdev/core/fbcvt.c
diff --git a/drivers/video/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index b6d5008f361f..b6d5008f361f 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
diff --git a/drivers/video/fbmon.c b/drivers/video/fbdev/core/fbmon.c
index 6103fa6fb54f..c204ebe6187e 100644
--- a/drivers/video/fbmon.c
+++ b/drivers/video/fbdev/core/fbmon.c
@@ -37,7 +37,7 @@
37#include <asm/prom.h> 37#include <asm/prom.h>
38#include <asm/pci-bridge.h> 38#include <asm/pci-bridge.h>
39#endif 39#endif
40#include "edid.h" 40#include "../edid.h"
41 41
42/* 42/*
43 * EDID parser 43 * EDID parser
diff --git a/drivers/video/fbsysfs.c b/drivers/video/fbdev/core/fbsysfs.c
index 53444ac19fe0..53444ac19fe0 100644
--- a/drivers/video/fbsysfs.c
+++ b/drivers/video/fbdev/core/fbsysfs.c
diff --git a/drivers/video/modedb.c b/drivers/video/fbdev/core/modedb.c
index a9a907c440d7..a9a907c440d7 100644
--- a/drivers/video/modedb.c
+++ b/drivers/video/fbdev/core/modedb.c
diff --git a/drivers/video/svgalib.c b/drivers/video/fbdev/core/svgalib.c
index 9e01322fabe3..9e01322fabe3 100644
--- a/drivers/video/svgalib.c
+++ b/drivers/video/fbdev/core/svgalib.c
diff --git a/drivers/video/syscopyarea.c b/drivers/video/fbdev/core/syscopyarea.c
index 844a32fd38ed..844a32fd38ed 100644
--- a/drivers/video/syscopyarea.c
+++ b/drivers/video/fbdev/core/syscopyarea.c
diff --git a/drivers/video/sysfillrect.c b/drivers/video/fbdev/core/sysfillrect.c
index 33ee3d34f9d2..33ee3d34f9d2 100644
--- a/drivers/video/sysfillrect.c
+++ b/drivers/video/fbdev/core/sysfillrect.c
diff --git a/drivers/video/sysimgblt.c b/drivers/video/fbdev/core/sysimgblt.c
index a4d05b1b17d7..a4d05b1b17d7 100644
--- a/drivers/video/sysimgblt.c
+++ b/drivers/video/fbdev/core/sysimgblt.c
diff --git a/drivers/video/cyber2000fb.c b/drivers/video/fbdev/cyber2000fb.c
index b0a950f36970..b0a950f36970 100644
--- a/drivers/video/cyber2000fb.c
+++ b/drivers/video/fbdev/cyber2000fb.c
diff --git a/drivers/video/cyber2000fb.h b/drivers/video/fbdev/cyber2000fb.h
index bad69102e774..bad69102e774 100644
--- a/drivers/video/cyber2000fb.h
+++ b/drivers/video/fbdev/cyber2000fb.h
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/fbdev/da8xx-fb.c
index 0c0ba920ea48..6b23508ff0a5 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/fbdev/da8xx-fb.c
@@ -663,15 +663,7 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,
663 (green << info->var.green.offset) | 663 (green << info->var.green.offset) |
664 (blue << info->var.blue.offset); 664 (blue << info->var.blue.offset);
665 665
666 switch (info->var.bits_per_pixel) { 666 ((u32 *) (info->pseudo_palette))[regno] = v;
667 case 16:
668 ((u16 *) (info->pseudo_palette))[regno] = v;
669 break;
670 case 24:
671 case 32:
672 ((u32 *) (info->pseudo_palette))[regno] = v;
673 break;
674 }
675 if (palette[0] != 0x4000) { 667 if (palette[0] != 0x4000) {
676 update_hw = 1; 668 update_hw = 1;
677 palette[0] = 0x4000; 669 palette[0] = 0x4000;
diff --git a/drivers/video/dnfb.c b/drivers/video/fbdev/dnfb.c
index 3526899da61b..3526899da61b 100644
--- a/drivers/video/dnfb.c
+++ b/drivers/video/fbdev/dnfb.c
diff --git a/drivers/video/edid.h b/drivers/video/fbdev/edid.h
index d03a232d90b2..d03a232d90b2 100644
--- a/drivers/video/edid.h
+++ b/drivers/video/fbdev/edid.h
diff --git a/drivers/video/efifb.c b/drivers/video/fbdev/efifb.c
index ae9618ff6735..ae9618ff6735 100644
--- a/drivers/video/efifb.c
+++ b/drivers/video/fbdev/efifb.c
diff --git a/drivers/video/ep93xx-fb.c b/drivers/video/fbdev/ep93xx-fb.c
index 35a0f533f1a2..35a0f533f1a2 100644
--- a/drivers/video/ep93xx-fb.c
+++ b/drivers/video/fbdev/ep93xx-fb.c
diff --git a/drivers/video/exynos/Kconfig b/drivers/video/fbdev/exynos/Kconfig
index fcf2d48ac6d1..fcf2d48ac6d1 100644
--- a/drivers/video/exynos/Kconfig
+++ b/drivers/video/fbdev/exynos/Kconfig
diff --git a/drivers/video/exynos/Makefile b/drivers/video/fbdev/exynos/Makefile
index b5b1bd228abb..b5b1bd228abb 100644
--- a/drivers/video/exynos/Makefile
+++ b/drivers/video/fbdev/exynos/Makefile
diff --git a/drivers/video/exynos/exynos_mipi_dsi.c b/drivers/video/fbdev/exynos/exynos_mipi_dsi.c
index cee9602f9a7b..cee9602f9a7b 100644
--- a/drivers/video/exynos/exynos_mipi_dsi.c
+++ b/drivers/video/fbdev/exynos/exynos_mipi_dsi.c
diff --git a/drivers/video/exynos/exynos_mipi_dsi_common.c b/drivers/video/fbdev/exynos/exynos_mipi_dsi_common.c
index 85edabfdef5a..85edabfdef5a 100644
--- a/drivers/video/exynos/exynos_mipi_dsi_common.c
+++ b/drivers/video/fbdev/exynos/exynos_mipi_dsi_common.c
diff --git a/drivers/video/exynos/exynos_mipi_dsi_common.h b/drivers/video/fbdev/exynos/exynos_mipi_dsi_common.h
index 412552274df3..412552274df3 100644
--- a/drivers/video/exynos/exynos_mipi_dsi_common.h
+++ b/drivers/video/fbdev/exynos/exynos_mipi_dsi_common.h
diff --git a/drivers/video/exynos/exynos_mipi_dsi_lowlevel.c b/drivers/video/fbdev/exynos/exynos_mipi_dsi_lowlevel.c
index c148d06540c1..c148d06540c1 100644
--- a/drivers/video/exynos/exynos_mipi_dsi_lowlevel.c
+++ b/drivers/video/fbdev/exynos/exynos_mipi_dsi_lowlevel.c
diff --git a/drivers/video/exynos/exynos_mipi_dsi_lowlevel.h b/drivers/video/fbdev/exynos/exynos_mipi_dsi_lowlevel.h
index 85460701c7ea..85460701c7ea 100644
--- a/drivers/video/exynos/exynos_mipi_dsi_lowlevel.h
+++ b/drivers/video/fbdev/exynos/exynos_mipi_dsi_lowlevel.h
diff --git a/drivers/video/exynos/exynos_mipi_dsi_regs.h b/drivers/video/fbdev/exynos/exynos_mipi_dsi_regs.h
index 4227106d3fd0..4227106d3fd0 100644
--- a/drivers/video/exynos/exynos_mipi_dsi_regs.h
+++ b/drivers/video/fbdev/exynos/exynos_mipi_dsi_regs.h
diff --git a/drivers/video/exynos/s6e8ax0.c b/drivers/video/fbdev/exynos/s6e8ax0.c
index 29e70ed3f154..29e70ed3f154 100644
--- a/drivers/video/exynos/s6e8ax0.c
+++ b/drivers/video/fbdev/exynos/s6e8ax0.c
diff --git a/drivers/video/fb-puv3.c b/drivers/video/fbdev/fb-puv3.c
index 6db9ebd042a3..6db9ebd042a3 100644
--- a/drivers/video/fb-puv3.c
+++ b/drivers/video/fbdev/fb-puv3.c
diff --git a/drivers/video/ffb.c b/drivers/video/fbdev/ffb.c
index 4c4ffa61ae26..4c4ffa61ae26 100644
--- a/drivers/video/ffb.c
+++ b/drivers/video/fbdev/ffb.c
diff --git a/drivers/video/fm2fb.c b/drivers/video/fbdev/fm2fb.c
index e69d47af9932..e69d47af9932 100644
--- a/drivers/video/fm2fb.c
+++ b/drivers/video/fbdev/fm2fb.c
diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fbdev/fsl-diu-fb.c
index e8758b9c3bcc..e8758b9c3bcc 100644
--- a/drivers/video/fsl-diu-fb.c
+++ b/drivers/video/fbdev/fsl-diu-fb.c
diff --git a/drivers/video/g364fb.c b/drivers/video/fbdev/g364fb.c
index 223896cc5f7d..223896cc5f7d 100644
--- a/drivers/video/g364fb.c
+++ b/drivers/video/fbdev/g364fb.c
diff --git a/drivers/video/gbefb.c b/drivers/video/fbdev/gbefb.c
index 3ec65a878ac8..3ec65a878ac8 100644
--- a/drivers/video/gbefb.c
+++ b/drivers/video/fbdev/gbefb.c
diff --git a/drivers/video/geode/Kconfig b/drivers/video/fbdev/geode/Kconfig
index 1e8555284786..1e8555284786 100644
--- a/drivers/video/geode/Kconfig
+++ b/drivers/video/fbdev/geode/Kconfig
diff --git a/drivers/video/geode/Makefile b/drivers/video/fbdev/geode/Makefile
index 5c98da126883..5c98da126883 100644
--- a/drivers/video/geode/Makefile
+++ b/drivers/video/fbdev/geode/Makefile
diff --git a/drivers/video/geode/display_gx.c b/drivers/video/fbdev/geode/display_gx.c
index f0af911a096d..f0af911a096d 100644
--- a/drivers/video/geode/display_gx.c
+++ b/drivers/video/fbdev/geode/display_gx.c
diff --git a/drivers/video/geode/display_gx1.c b/drivers/video/fbdev/geode/display_gx1.c
index 926d53eeb549..926d53eeb549 100644
--- a/drivers/video/geode/display_gx1.c
+++ b/drivers/video/fbdev/geode/display_gx1.c
diff --git a/drivers/video/geode/display_gx1.h b/drivers/video/fbdev/geode/display_gx1.h
index 671c05558c79..671c05558c79 100644
--- a/drivers/video/geode/display_gx1.h
+++ b/drivers/video/fbdev/geode/display_gx1.h
diff --git a/drivers/video/geode/geodefb.h b/drivers/video/fbdev/geode/geodefb.h
index ae04820e0c57..ae04820e0c57 100644
--- a/drivers/video/geode/geodefb.h
+++ b/drivers/video/fbdev/geode/geodefb.h
diff --git a/drivers/video/geode/gx1fb_core.c b/drivers/video/fbdev/geode/gx1fb_core.c
index 2794ba11f332..2794ba11f332 100644
--- a/drivers/video/geode/gx1fb_core.c
+++ b/drivers/video/fbdev/geode/gx1fb_core.c
diff --git a/drivers/video/geode/gxfb.h b/drivers/video/fbdev/geode/gxfb.h
index d19e9378b0c0..d19e9378b0c0 100644
--- a/drivers/video/geode/gxfb.h
+++ b/drivers/video/fbdev/geode/gxfb.h
diff --git a/drivers/video/geode/gxfb_core.c b/drivers/video/fbdev/geode/gxfb_core.c
index 1790f14bab15..1790f14bab15 100644
--- a/drivers/video/geode/gxfb_core.c
+++ b/drivers/video/fbdev/geode/gxfb_core.c
diff --git a/drivers/video/geode/lxfb.h b/drivers/video/fbdev/geode/lxfb.h
index cfcd8090f313..cfcd8090f313 100644
--- a/drivers/video/geode/lxfb.h
+++ b/drivers/video/fbdev/geode/lxfb.h
diff --git a/drivers/video/geode/lxfb_core.c b/drivers/video/fbdev/geode/lxfb_core.c
index 9e1d19d673a1..9e1d19d673a1 100644
--- a/drivers/video/geode/lxfb_core.c
+++ b/drivers/video/fbdev/geode/lxfb_core.c
diff --git a/drivers/video/geode/lxfb_ops.c b/drivers/video/fbdev/geode/lxfb_ops.c
index 79e9abc72b83..79e9abc72b83 100644
--- a/drivers/video/geode/lxfb_ops.c
+++ b/drivers/video/fbdev/geode/lxfb_ops.c
diff --git a/drivers/video/geode/suspend_gx.c b/drivers/video/fbdev/geode/suspend_gx.c
index 1bb043d70c64..1bb043d70c64 100644
--- a/drivers/video/geode/suspend_gx.c
+++ b/drivers/video/fbdev/geode/suspend_gx.c
diff --git a/drivers/video/geode/video_cs5530.c b/drivers/video/fbdev/geode/video_cs5530.c
index 649c3943d431..649c3943d431 100644
--- a/drivers/video/geode/video_cs5530.c
+++ b/drivers/video/fbdev/geode/video_cs5530.c
diff --git a/drivers/video/geode/video_cs5530.h b/drivers/video/fbdev/geode/video_cs5530.h
index 56cecca7f1ce..56cecca7f1ce 100644
--- a/drivers/video/geode/video_cs5530.h
+++ b/drivers/video/fbdev/geode/video_cs5530.h
diff --git a/drivers/video/geode/video_gx.c b/drivers/video/fbdev/geode/video_gx.c
index 6082f653c68a..6082f653c68a 100644
--- a/drivers/video/geode/video_gx.c
+++ b/drivers/video/fbdev/geode/video_gx.c
diff --git a/drivers/video/goldfishfb.c b/drivers/video/fbdev/goldfishfb.c
index 7f6c9e6cfc6c..7f6c9e6cfc6c 100644
--- a/drivers/video/goldfishfb.c
+++ b/drivers/video/fbdev/goldfishfb.c
diff --git a/drivers/video/grvga.c b/drivers/video/fbdev/grvga.c
index c078701f15f6..c078701f15f6 100644
--- a/drivers/video/grvga.c
+++ b/drivers/video/fbdev/grvga.c
diff --git a/drivers/video/gxt4500.c b/drivers/video/fbdev/gxt4500.c
index 135d78a02588..135d78a02588 100644
--- a/drivers/video/gxt4500.c
+++ b/drivers/video/fbdev/gxt4500.c
diff --git a/drivers/video/hecubafb.c b/drivers/video/fbdev/hecubafb.c
index f64120ec9192..f64120ec9192 100644
--- a/drivers/video/hecubafb.c
+++ b/drivers/video/fbdev/hecubafb.c
diff --git a/drivers/video/hgafb.c b/drivers/video/fbdev/hgafb.c
index 5ff9fe2116a4..5ff9fe2116a4 100644
--- a/drivers/video/hgafb.c
+++ b/drivers/video/fbdev/hgafb.c
diff --git a/drivers/video/hitfb.c b/drivers/video/fbdev/hitfb.c
index a648d5186c6e..a648d5186c6e 100644
--- a/drivers/video/hitfb.c
+++ b/drivers/video/fbdev/hitfb.c
diff --git a/drivers/video/hpfb.c b/drivers/video/fbdev/hpfb.c
index a1b7e5fa9b09..a1b7e5fa9b09 100644
--- a/drivers/video/hpfb.c
+++ b/drivers/video/fbdev/hpfb.c
diff --git a/drivers/video/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c
index e23392ec5af3..e23392ec5af3 100644
--- a/drivers/video/hyperv_fb.c
+++ b/drivers/video/fbdev/hyperv_fb.c
diff --git a/drivers/video/i740_reg.h b/drivers/video/fbdev/i740_reg.h
index 91bac76549d7..91bac76549d7 100644
--- a/drivers/video/i740_reg.h
+++ b/drivers/video/fbdev/i740_reg.h
diff --git a/drivers/video/i740fb.c b/drivers/video/fbdev/i740fb.c
index ca7c9df193b0..ca7c9df193b0 100644
--- a/drivers/video/i740fb.c
+++ b/drivers/video/fbdev/i740fb.c
diff --git a/drivers/video/i810/Makefile b/drivers/video/fbdev/i810/Makefile
index 96e08c8ded97..96e08c8ded97 100644
--- a/drivers/video/i810/Makefile
+++ b/drivers/video/fbdev/i810/Makefile
diff --git a/drivers/video/i810/i810-i2c.c b/drivers/video/fbdev/i810/i810-i2c.c
index 7db17d0d8a8c..7db17d0d8a8c 100644
--- a/drivers/video/i810/i810-i2c.c
+++ b/drivers/video/fbdev/i810/i810-i2c.c
diff --git a/drivers/video/i810/i810.h b/drivers/video/fbdev/i810/i810.h
index 1414b73ac55b..1414b73ac55b 100644
--- a/drivers/video/i810/i810.h
+++ b/drivers/video/fbdev/i810/i810.h
diff --git a/drivers/video/i810/i810_accel.c b/drivers/video/fbdev/i810/i810_accel.c
index 7672d2ea9b35..7672d2ea9b35 100644
--- a/drivers/video/i810/i810_accel.c
+++ b/drivers/video/fbdev/i810/i810_accel.c
diff --git a/drivers/video/i810/i810_dvt.c b/drivers/video/fbdev/i810/i810_dvt.c
index b4b3670667ab..b4b3670667ab 100644
--- a/drivers/video/i810/i810_dvt.c
+++ b/drivers/video/fbdev/i810/i810_dvt.c
diff --git a/drivers/video/i810/i810_gtf.c b/drivers/video/fbdev/i810/i810_gtf.c
index 9743d51e7f8c..9743d51e7f8c 100644
--- a/drivers/video/i810/i810_gtf.c
+++ b/drivers/video/fbdev/i810/i810_gtf.c
diff --git a/drivers/video/i810/i810_main.c b/drivers/video/fbdev/i810/i810_main.c
index bb674e431741..bb674e431741 100644
--- a/drivers/video/i810/i810_main.c
+++ b/drivers/video/fbdev/i810/i810_main.c
diff --git a/drivers/video/i810/i810_main.h b/drivers/video/fbdev/i810/i810_main.h
index a25afaa534ba..a25afaa534ba 100644
--- a/drivers/video/i810/i810_main.h
+++ b/drivers/video/fbdev/i810/i810_main.h
diff --git a/drivers/video/i810/i810_regs.h b/drivers/video/fbdev/i810/i810_regs.h
index 91c6bd9d0d0d..91c6bd9d0d0d 100644
--- a/drivers/video/i810/i810_regs.h
+++ b/drivers/video/fbdev/i810/i810_regs.h
diff --git a/drivers/video/igafb.c b/drivers/video/fbdev/igafb.c
index 486f18897414..486f18897414 100644
--- a/drivers/video/igafb.c
+++ b/drivers/video/fbdev/igafb.c
diff --git a/drivers/video/imsttfb.c b/drivers/video/fbdev/imsttfb.c
index aae10ce74f14..aae10ce74f14 100644
--- a/drivers/video/imsttfb.c
+++ b/drivers/video/fbdev/imsttfb.c
diff --git a/drivers/video/imxfb.c b/drivers/video/fbdev/imxfb.c
index f6e621684953..f6e621684953 100644
--- a/drivers/video/imxfb.c
+++ b/drivers/video/fbdev/imxfb.c
diff --git a/drivers/video/intelfb/Makefile b/drivers/video/fbdev/intelfb/Makefile
index f7d631ebee8e..f7d631ebee8e 100644
--- a/drivers/video/intelfb/Makefile
+++ b/drivers/video/fbdev/intelfb/Makefile
diff --git a/drivers/video/intelfb/intelfb.h b/drivers/video/fbdev/intelfb/intelfb.h
index 6b51175629c7..6b51175629c7 100644
--- a/drivers/video/intelfb/intelfb.h
+++ b/drivers/video/fbdev/intelfb/intelfb.h
diff --git a/drivers/video/intelfb/intelfb_i2c.c b/drivers/video/fbdev/intelfb/intelfb_i2c.c
index 3300bd31d9d7..3300bd31d9d7 100644
--- a/drivers/video/intelfb/intelfb_i2c.c
+++ b/drivers/video/fbdev/intelfb/intelfb_i2c.c
diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/fbdev/intelfb/intelfbdrv.c
index b847d530471a..b847d530471a 100644
--- a/drivers/video/intelfb/intelfbdrv.c
+++ b/drivers/video/fbdev/intelfb/intelfbdrv.c
diff --git a/drivers/video/intelfb/intelfbhw.c b/drivers/video/fbdev/intelfb/intelfbhw.c
index fbad61da359f..fbad61da359f 100644
--- a/drivers/video/intelfb/intelfbhw.c
+++ b/drivers/video/fbdev/intelfb/intelfbhw.c
diff --git a/drivers/video/intelfb/intelfbhw.h b/drivers/video/fbdev/intelfb/intelfbhw.h
index 216ca20f259f..216ca20f259f 100644
--- a/drivers/video/intelfb/intelfbhw.h
+++ b/drivers/video/fbdev/intelfb/intelfbhw.h
diff --git a/drivers/video/jz4740_fb.c b/drivers/video/fbdev/jz4740_fb.c
index 87790e9644d0..87790e9644d0 100644
--- a/drivers/video/jz4740_fb.c
+++ b/drivers/video/fbdev/jz4740_fb.c
diff --git a/drivers/video/kyro/Makefile b/drivers/video/fbdev/kyro/Makefile
index 2fd66f551bae..2fd66f551bae 100644
--- a/drivers/video/kyro/Makefile
+++ b/drivers/video/fbdev/kyro/Makefile
diff --git a/drivers/video/kyro/STG4000InitDevice.c b/drivers/video/fbdev/kyro/STG4000InitDevice.c
index 1d3f2080aa6f..1d3f2080aa6f 100644
--- a/drivers/video/kyro/STG4000InitDevice.c
+++ b/drivers/video/fbdev/kyro/STG4000InitDevice.c
diff --git a/drivers/video/kyro/STG4000Interface.h b/drivers/video/fbdev/kyro/STG4000Interface.h
index b7c83d5dfb13..b7c83d5dfb13 100644
--- a/drivers/video/kyro/STG4000Interface.h
+++ b/drivers/video/fbdev/kyro/STG4000Interface.h
diff --git a/drivers/video/kyro/STG4000OverlayDevice.c b/drivers/video/fbdev/kyro/STG4000OverlayDevice.c
index 0aeeaa10708b..0aeeaa10708b 100644
--- a/drivers/video/kyro/STG4000OverlayDevice.c
+++ b/drivers/video/fbdev/kyro/STG4000OverlayDevice.c
diff --git a/drivers/video/kyro/STG4000Ramdac.c b/drivers/video/fbdev/kyro/STG4000Ramdac.c
index e6ad037e4396..e6ad037e4396 100644
--- a/drivers/video/kyro/STG4000Ramdac.c
+++ b/drivers/video/fbdev/kyro/STG4000Ramdac.c
diff --git a/drivers/video/kyro/STG4000Reg.h b/drivers/video/fbdev/kyro/STG4000Reg.h
index 50f4670e9252..50f4670e9252 100644
--- a/drivers/video/kyro/STG4000Reg.h
+++ b/drivers/video/fbdev/kyro/STG4000Reg.h
diff --git a/drivers/video/kyro/STG4000VTG.c b/drivers/video/fbdev/kyro/STG4000VTG.c
index bd389709d234..bd389709d234 100644
--- a/drivers/video/kyro/STG4000VTG.c
+++ b/drivers/video/fbdev/kyro/STG4000VTG.c
diff --git a/drivers/video/kyro/fbdev.c b/drivers/video/fbdev/kyro/fbdev.c
index 65041e15fd59..65041e15fd59 100644
--- a/drivers/video/kyro/fbdev.c
+++ b/drivers/video/fbdev/kyro/fbdev.c
diff --git a/drivers/video/leo.c b/drivers/video/fbdev/leo.c
index 2c7f7d479fe2..2c7f7d479fe2 100644
--- a/drivers/video/leo.c
+++ b/drivers/video/fbdev/leo.c
diff --git a/drivers/video/macfb.c b/drivers/video/fbdev/macfb.c
index cda7587cbc86..cda7587cbc86 100644
--- a/drivers/video/macfb.c
+++ b/drivers/video/fbdev/macfb.c
diff --git a/drivers/video/macmodes.c b/drivers/video/fbdev/macmodes.c
index af86c081d2be..af86c081d2be 100644
--- a/drivers/video/macmodes.c
+++ b/drivers/video/fbdev/macmodes.c
diff --git a/drivers/video/macmodes.h b/drivers/video/fbdev/macmodes.h
index b86ba08aac9e..b86ba08aac9e 100644
--- a/drivers/video/macmodes.h
+++ b/drivers/video/fbdev/macmodes.h
diff --git a/drivers/video/matrox/Makefile b/drivers/video/fbdev/matrox/Makefile
index f9c00ebe2530..f9c00ebe2530 100644
--- a/drivers/video/matrox/Makefile
+++ b/drivers/video/fbdev/matrox/Makefile
diff --git a/drivers/video/matrox/g450_pll.c b/drivers/video/fbdev/matrox/g450_pll.c
index c15f8a57498e..c15f8a57498e 100644
--- a/drivers/video/matrox/g450_pll.c
+++ b/drivers/video/fbdev/matrox/g450_pll.c
diff --git a/drivers/video/matrox/g450_pll.h b/drivers/video/fbdev/matrox/g450_pll.h
index aac615d18440..aac615d18440 100644
--- a/drivers/video/matrox/g450_pll.h
+++ b/drivers/video/fbdev/matrox/g450_pll.h
diff --git a/drivers/video/matrox/i2c-matroxfb.c b/drivers/video/fbdev/matrox/i2c-matroxfb.c
index 0fb280ead3dc..0fb280ead3dc 100644
--- a/drivers/video/matrox/i2c-matroxfb.c
+++ b/drivers/video/fbdev/matrox/i2c-matroxfb.c
diff --git a/drivers/video/matrox/matroxfb_DAC1064.c b/drivers/video/fbdev/matrox/matroxfb_DAC1064.c
index a01147fdf270..a01147fdf270 100644
--- a/drivers/video/matrox/matroxfb_DAC1064.c
+++ b/drivers/video/fbdev/matrox/matroxfb_DAC1064.c
diff --git a/drivers/video/matrox/matroxfb_DAC1064.h b/drivers/video/fbdev/matrox/matroxfb_DAC1064.h
index 1e6e45b57b78..1e6e45b57b78 100644
--- a/drivers/video/matrox/matroxfb_DAC1064.h
+++ b/drivers/video/fbdev/matrox/matroxfb_DAC1064.h
diff --git a/drivers/video/matrox/matroxfb_Ti3026.c b/drivers/video/fbdev/matrox/matroxfb_Ti3026.c
index 195ad7cac1ba..195ad7cac1ba 100644
--- a/drivers/video/matrox/matroxfb_Ti3026.c
+++ b/drivers/video/fbdev/matrox/matroxfb_Ti3026.c
diff --git a/drivers/video/matrox/matroxfb_Ti3026.h b/drivers/video/fbdev/matrox/matroxfb_Ti3026.h
index 27872aaa0a17..27872aaa0a17 100644
--- a/drivers/video/matrox/matroxfb_Ti3026.h
+++ b/drivers/video/fbdev/matrox/matroxfb_Ti3026.h
diff --git a/drivers/video/matrox/matroxfb_accel.c b/drivers/video/fbdev/matrox/matroxfb_accel.c
index 0d5cb85d071a..0d5cb85d071a 100644
--- a/drivers/video/matrox/matroxfb_accel.c
+++ b/drivers/video/fbdev/matrox/matroxfb_accel.c
diff --git a/drivers/video/matrox/matroxfb_accel.h b/drivers/video/fbdev/matrox/matroxfb_accel.h
index 1e418e62c22d..1e418e62c22d 100644
--- a/drivers/video/matrox/matroxfb_accel.h
+++ b/drivers/video/fbdev/matrox/matroxfb_accel.h
diff --git a/drivers/video/matrox/matroxfb_base.c b/drivers/video/fbdev/matrox/matroxfb_base.c
index 7116c5309c7d..7116c5309c7d 100644
--- a/drivers/video/matrox/matroxfb_base.c
+++ b/drivers/video/fbdev/matrox/matroxfb_base.c
diff --git a/drivers/video/matrox/matroxfb_base.h b/drivers/video/fbdev/matrox/matroxfb_base.h
index 556d96ce40bf..556d96ce40bf 100644
--- a/drivers/video/matrox/matroxfb_base.h
+++ b/drivers/video/fbdev/matrox/matroxfb_base.h
diff --git a/drivers/video/matrox/matroxfb_crtc2.c b/drivers/video/fbdev/matrox/matroxfb_crtc2.c
index 02796a4317a9..02796a4317a9 100644
--- a/drivers/video/matrox/matroxfb_crtc2.c
+++ b/drivers/video/fbdev/matrox/matroxfb_crtc2.c
diff --git a/drivers/video/matrox/matroxfb_crtc2.h b/drivers/video/fbdev/matrox/matroxfb_crtc2.h
index 1005582e843e..1005582e843e 100644
--- a/drivers/video/matrox/matroxfb_crtc2.h
+++ b/drivers/video/fbdev/matrox/matroxfb_crtc2.h
diff --git a/drivers/video/matrox/matroxfb_g450.c b/drivers/video/fbdev/matrox/matroxfb_g450.c
index cff0546ea6fd..cff0546ea6fd 100644
--- a/drivers/video/matrox/matroxfb_g450.c
+++ b/drivers/video/fbdev/matrox/matroxfb_g450.c
diff --git a/drivers/video/matrox/matroxfb_g450.h b/drivers/video/fbdev/matrox/matroxfb_g450.h
index 3a3e654444b8..3a3e654444b8 100644
--- a/drivers/video/matrox/matroxfb_g450.h
+++ b/drivers/video/fbdev/matrox/matroxfb_g450.h
diff --git a/drivers/video/matrox/matroxfb_maven.c b/drivers/video/fbdev/matrox/matroxfb_maven.c
index ee41a0f276b2..ee41a0f276b2 100644
--- a/drivers/video/matrox/matroxfb_maven.c
+++ b/drivers/video/fbdev/matrox/matroxfb_maven.c
diff --git a/drivers/video/matrox/matroxfb_maven.h b/drivers/video/fbdev/matrox/matroxfb_maven.h
index 99eddec9f30c..99eddec9f30c 100644
--- a/drivers/video/matrox/matroxfb_maven.h
+++ b/drivers/video/fbdev/matrox/matroxfb_maven.h
diff --git a/drivers/video/matrox/matroxfb_misc.c b/drivers/video/fbdev/matrox/matroxfb_misc.c
index 9948ca2a3046..9948ca2a3046 100644
--- a/drivers/video/matrox/matroxfb_misc.c
+++ b/drivers/video/fbdev/matrox/matroxfb_misc.c
diff --git a/drivers/video/matrox/matroxfb_misc.h b/drivers/video/fbdev/matrox/matroxfb_misc.h
index 351c823f1f74..351c823f1f74 100644
--- a/drivers/video/matrox/matroxfb_misc.h
+++ b/drivers/video/fbdev/matrox/matroxfb_misc.h
diff --git a/drivers/video/maxinefb.c b/drivers/video/fbdev/maxinefb.c
index 5cf52d3c8e75..5cf52d3c8e75 100644
--- a/drivers/video/maxinefb.c
+++ b/drivers/video/fbdev/maxinefb.c
diff --git a/drivers/video/mb862xx/Makefile b/drivers/video/fbdev/mb862xx/Makefile
index 5707ed0e31a7..5707ed0e31a7 100644
--- a/drivers/video/mb862xx/Makefile
+++ b/drivers/video/fbdev/mb862xx/Makefile
diff --git a/drivers/video/mb862xx/mb862xx-i2c.c b/drivers/video/fbdev/mb862xx/mb862xx-i2c.c
index c87e17afb3e2..c87e17afb3e2 100644
--- a/drivers/video/mb862xx/mb862xx-i2c.c
+++ b/drivers/video/fbdev/mb862xx/mb862xx-i2c.c
diff --git a/drivers/video/mb862xx/mb862xx_reg.h b/drivers/video/fbdev/mb862xx/mb862xx_reg.h
index 9df48b8edc94..9df48b8edc94 100644
--- a/drivers/video/mb862xx/mb862xx_reg.h
+++ b/drivers/video/fbdev/mb862xx/mb862xx_reg.h
diff --git a/drivers/video/mb862xx/mb862xxfb.h b/drivers/video/fbdev/mb862xx/mb862xxfb.h
index 8550630c1e01..8550630c1e01 100644
--- a/drivers/video/mb862xx/mb862xxfb.h
+++ b/drivers/video/fbdev/mb862xx/mb862xxfb.h
diff --git a/drivers/video/mb862xx/mb862xxfb_accel.c b/drivers/video/fbdev/mb862xx/mb862xxfb_accel.c
index fe92eed6da70..fe92eed6da70 100644
--- a/drivers/video/mb862xx/mb862xxfb_accel.c
+++ b/drivers/video/fbdev/mb862xx/mb862xxfb_accel.c
diff --git a/drivers/video/mb862xx/mb862xxfb_accel.h b/drivers/video/fbdev/mb862xx/mb862xxfb_accel.h
index 96a2dfef0f60..96a2dfef0f60 100644
--- a/drivers/video/mb862xx/mb862xxfb_accel.h
+++ b/drivers/video/fbdev/mb862xx/mb862xxfb_accel.h
diff --git a/drivers/video/mb862xx/mb862xxfbdrv.c b/drivers/video/fbdev/mb862xx/mb862xxfbdrv.c
index 0cd4c3318511..0cd4c3318511 100644
--- a/drivers/video/mb862xx/mb862xxfbdrv.c
+++ b/drivers/video/fbdev/mb862xx/mb862xxfbdrv.c
diff --git a/drivers/video/mbx/Makefile b/drivers/video/fbdev/mbx/Makefile
index 16c1165cf9c7..16c1165cf9c7 100644
--- a/drivers/video/mbx/Makefile
+++ b/drivers/video/fbdev/mbx/Makefile
diff --git a/drivers/video/mbx/mbxdebugfs.c b/drivers/video/fbdev/mbx/mbxdebugfs.c
index 4449f249b0e7..4449f249b0e7 100644
--- a/drivers/video/mbx/mbxdebugfs.c
+++ b/drivers/video/fbdev/mbx/mbxdebugfs.c
diff --git a/drivers/video/mbx/mbxfb.c b/drivers/video/fbdev/mbx/mbxfb.c
index f0a5392f5fd3..f0a5392f5fd3 100644
--- a/drivers/video/mbx/mbxfb.c
+++ b/drivers/video/fbdev/mbx/mbxfb.c
diff --git a/drivers/video/mbx/reg_bits.h b/drivers/video/fbdev/mbx/reg_bits.h
index 5f14b4befd71..5f14b4befd71 100644
--- a/drivers/video/mbx/reg_bits.h
+++ b/drivers/video/fbdev/mbx/reg_bits.h
diff --git a/drivers/video/mbx/regs.h b/drivers/video/fbdev/mbx/regs.h
index 063099d48839..063099d48839 100644
--- a/drivers/video/mbx/regs.h
+++ b/drivers/video/fbdev/mbx/regs.h
diff --git a/drivers/video/metronomefb.c b/drivers/video/fbdev/metronomefb.c
index 195cc2db4c2c..195cc2db4c2c 100644
--- a/drivers/video/metronomefb.c
+++ b/drivers/video/fbdev/metronomefb.c
diff --git a/drivers/video/mmp/Kconfig b/drivers/video/fbdev/mmp/Kconfig
index e9ea39e13722..d4a4ffc24749 100644
--- a/drivers/video/mmp/Kconfig
+++ b/drivers/video/fbdev/mmp/Kconfig
@@ -5,7 +5,7 @@ menuconfig MMP_DISP
5 Marvell Display Subsystem support. 5 Marvell Display Subsystem support.
6 6
7if MMP_DISP 7if MMP_DISP
8source "drivers/video/mmp/hw/Kconfig" 8source "drivers/video/fbdev/mmp/hw/Kconfig"
9source "drivers/video/mmp/panel/Kconfig" 9source "drivers/video/fbdev/mmp/panel/Kconfig"
10source "drivers/video/mmp/fb/Kconfig" 10source "drivers/video/fbdev/mmp/fb/Kconfig"
11endif 11endif
diff --git a/drivers/video/mmp/Makefile b/drivers/video/fbdev/mmp/Makefile
index a014cb358bf8..a014cb358bf8 100644
--- a/drivers/video/mmp/Makefile
+++ b/drivers/video/fbdev/mmp/Makefile
diff --git a/drivers/video/mmp/core.c b/drivers/video/fbdev/mmp/core.c
index b563b920f159..b563b920f159 100644
--- a/drivers/video/mmp/core.c
+++ b/drivers/video/fbdev/mmp/core.c
diff --git a/drivers/video/mmp/fb/Kconfig b/drivers/video/fbdev/mmp/fb/Kconfig
index 9b0141f105f5..9b0141f105f5 100644
--- a/drivers/video/mmp/fb/Kconfig
+++ b/drivers/video/fbdev/mmp/fb/Kconfig
diff --git a/drivers/video/mmp/fb/Makefile b/drivers/video/fbdev/mmp/fb/Makefile
index 709fd1f76abe..709fd1f76abe 100644
--- a/drivers/video/mmp/fb/Makefile
+++ b/drivers/video/fbdev/mmp/fb/Makefile
diff --git a/drivers/video/mmp/fb/mmpfb.c b/drivers/video/fbdev/mmp/fb/mmpfb.c
index 7ab31eb76a8c..7ab31eb76a8c 100644
--- a/drivers/video/mmp/fb/mmpfb.c
+++ b/drivers/video/fbdev/mmp/fb/mmpfb.c
diff --git a/drivers/video/mmp/fb/mmpfb.h b/drivers/video/fbdev/mmp/fb/mmpfb.h
index 88c23c10a9ec..88c23c10a9ec 100644
--- a/drivers/video/mmp/fb/mmpfb.h
+++ b/drivers/video/fbdev/mmp/fb/mmpfb.h
diff --git a/drivers/video/mmp/hw/Kconfig b/drivers/video/fbdev/mmp/hw/Kconfig
index 02f109a20cd0..02f109a20cd0 100644
--- a/drivers/video/mmp/hw/Kconfig
+++ b/drivers/video/fbdev/mmp/hw/Kconfig
diff --git a/drivers/video/mmp/hw/Makefile b/drivers/video/fbdev/mmp/hw/Makefile
index 0000a714fedf..0000a714fedf 100644
--- a/drivers/video/mmp/hw/Makefile
+++ b/drivers/video/fbdev/mmp/hw/Makefile
diff --git a/drivers/video/mmp/hw/mmp_ctrl.c b/drivers/video/fbdev/mmp/hw/mmp_ctrl.c
index 8621a9f2bdcc..8621a9f2bdcc 100644
--- a/drivers/video/mmp/hw/mmp_ctrl.c
+++ b/drivers/video/fbdev/mmp/hw/mmp_ctrl.c
diff --git a/drivers/video/mmp/hw/mmp_ctrl.h b/drivers/video/fbdev/mmp/hw/mmp_ctrl.h
index 53301cfdb1ae..53301cfdb1ae 100644
--- a/drivers/video/mmp/hw/mmp_ctrl.h
+++ b/drivers/video/fbdev/mmp/hw/mmp_ctrl.h
diff --git a/drivers/video/mmp/hw/mmp_spi.c b/drivers/video/fbdev/mmp/hw/mmp_spi.c
index e62ca7bf0d5e..e62ca7bf0d5e 100644
--- a/drivers/video/mmp/hw/mmp_spi.c
+++ b/drivers/video/fbdev/mmp/hw/mmp_spi.c
diff --git a/drivers/video/mmp/panel/Kconfig b/drivers/video/fbdev/mmp/panel/Kconfig
index 4b2c4f457b11..4b2c4f457b11 100644
--- a/drivers/video/mmp/panel/Kconfig
+++ b/drivers/video/fbdev/mmp/panel/Kconfig
diff --git a/drivers/video/mmp/panel/Makefile b/drivers/video/fbdev/mmp/panel/Makefile
index 2f91611c7e5e..2f91611c7e5e 100644
--- a/drivers/video/mmp/panel/Makefile
+++ b/drivers/video/fbdev/mmp/panel/Makefile
diff --git a/drivers/video/mmp/panel/tpo_tj032md01bw.c b/drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c
index 998978b08f5e..998978b08f5e 100644
--- a/drivers/video/mmp/panel/tpo_tj032md01bw.c
+++ b/drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c
diff --git a/drivers/video/msm/Makefile b/drivers/video/fbdev/msm/Makefile
index 802d6ae523fb..802d6ae523fb 100644
--- a/drivers/video/msm/Makefile
+++ b/drivers/video/fbdev/msm/Makefile
diff --git a/drivers/video/msm/mddi.c b/drivers/video/fbdev/msm/mddi.c
index e0f8011a3c4b..e0f8011a3c4b 100644
--- a/drivers/video/msm/mddi.c
+++ b/drivers/video/fbdev/msm/mddi.c
diff --git a/drivers/video/msm/mddi_client_dummy.c b/drivers/video/fbdev/msm/mddi_client_dummy.c
index f1b0dfcc9717..f1b0dfcc9717 100644
--- a/drivers/video/msm/mddi_client_dummy.c
+++ b/drivers/video/fbdev/msm/mddi_client_dummy.c
diff --git a/drivers/video/msm/mddi_client_nt35399.c b/drivers/video/fbdev/msm/mddi_client_nt35399.c
index f96df32e5509..f96df32e5509 100644
--- a/drivers/video/msm/mddi_client_nt35399.c
+++ b/drivers/video/fbdev/msm/mddi_client_nt35399.c
diff --git a/drivers/video/msm/mddi_client_toshiba.c b/drivers/video/fbdev/msm/mddi_client_toshiba.c
index 061d7dfebbf3..061d7dfebbf3 100644
--- a/drivers/video/msm/mddi_client_toshiba.c
+++ b/drivers/video/fbdev/msm/mddi_client_toshiba.c
diff --git a/drivers/video/msm/mddi_hw.h b/drivers/video/fbdev/msm/mddi_hw.h
index 45cc01fc1e7f..45cc01fc1e7f 100644
--- a/drivers/video/msm/mddi_hw.h
+++ b/drivers/video/fbdev/msm/mddi_hw.h
diff --git a/drivers/video/msm/mdp.c b/drivers/video/fbdev/msm/mdp.c
index 113c7876c855..113c7876c855 100644
--- a/drivers/video/msm/mdp.c
+++ b/drivers/video/fbdev/msm/mdp.c
diff --git a/drivers/video/msm/mdp_csc_table.h b/drivers/video/fbdev/msm/mdp_csc_table.h
index d1cde30ead52..d1cde30ead52 100644
--- a/drivers/video/msm/mdp_csc_table.h
+++ b/drivers/video/fbdev/msm/mdp_csc_table.h
diff --git a/drivers/video/msm/mdp_hw.h b/drivers/video/fbdev/msm/mdp_hw.h
index 35848d741001..35848d741001 100644
--- a/drivers/video/msm/mdp_hw.h
+++ b/drivers/video/fbdev/msm/mdp_hw.h
diff --git a/drivers/video/msm/mdp_ppp.c b/drivers/video/fbdev/msm/mdp_ppp.c
index be6079cdfbb6..be6079cdfbb6 100644
--- a/drivers/video/msm/mdp_ppp.c
+++ b/drivers/video/fbdev/msm/mdp_ppp.c
diff --git a/drivers/video/msm/mdp_scale_tables.c b/drivers/video/fbdev/msm/mdp_scale_tables.c
index 604783b2e17c..604783b2e17c 100644
--- a/drivers/video/msm/mdp_scale_tables.c
+++ b/drivers/video/fbdev/msm/mdp_scale_tables.c
diff --git a/drivers/video/msm/mdp_scale_tables.h b/drivers/video/fbdev/msm/mdp_scale_tables.h
index 34077b1af603..34077b1af603 100644
--- a/drivers/video/msm/mdp_scale_tables.h
+++ b/drivers/video/fbdev/msm/mdp_scale_tables.h
diff --git a/drivers/video/msm/msm_fb.c b/drivers/video/fbdev/msm/msm_fb.c
index 1374803fbcd9..1374803fbcd9 100644
--- a/drivers/video/msm/msm_fb.c
+++ b/drivers/video/fbdev/msm/msm_fb.c
diff --git a/drivers/video/mx3fb.c b/drivers/video/fbdev/mx3fb.c
index 142e860fb527..142e860fb527 100644
--- a/drivers/video/mx3fb.c
+++ b/drivers/video/fbdev/mx3fb.c
diff --git a/drivers/video/mxsfb.c b/drivers/video/fbdev/mxsfb.c
index accf48a2cce4..accf48a2cce4 100644
--- a/drivers/video/mxsfb.c
+++ b/drivers/video/fbdev/mxsfb.c
diff --git a/drivers/video/n411.c b/drivers/video/fbdev/n411.c
index 935830fea7b6..935830fea7b6 100644
--- a/drivers/video/n411.c
+++ b/drivers/video/fbdev/n411.c
diff --git a/drivers/video/neofb.c b/drivers/video/fbdev/neofb.c
index 44f99a60bb9b..44f99a60bb9b 100644
--- a/drivers/video/neofb.c
+++ b/drivers/video/fbdev/neofb.c
diff --git a/drivers/video/nuc900fb.c b/drivers/video/fbdev/nuc900fb.c
index 478f9808dee4..478f9808dee4 100644
--- a/drivers/video/nuc900fb.c
+++ b/drivers/video/fbdev/nuc900fb.c
diff --git a/drivers/video/nuc900fb.h b/drivers/video/fbdev/nuc900fb.h
index 9a1ca6dbb6b2..9a1ca6dbb6b2 100644
--- a/drivers/video/nuc900fb.h
+++ b/drivers/video/fbdev/nuc900fb.h
diff --git a/drivers/video/nvidia/Makefile b/drivers/video/fbdev/nvidia/Makefile
index ca47432113e0..ca47432113e0 100644
--- a/drivers/video/nvidia/Makefile
+++ b/drivers/video/fbdev/nvidia/Makefile
diff --git a/drivers/video/nvidia/nv_accel.c b/drivers/video/fbdev/nvidia/nv_accel.c
index ad6472a894ea..ad6472a894ea 100644
--- a/drivers/video/nvidia/nv_accel.c
+++ b/drivers/video/fbdev/nvidia/nv_accel.c
diff --git a/drivers/video/nvidia/nv_backlight.c b/drivers/video/fbdev/nvidia/nv_backlight.c
index 8471008aa6ff..8471008aa6ff 100644
--- a/drivers/video/nvidia/nv_backlight.c
+++ b/drivers/video/fbdev/nvidia/nv_backlight.c
diff --git a/drivers/video/nvidia/nv_dma.h b/drivers/video/fbdev/nvidia/nv_dma.h
index a7ed1c0acbbb..a7ed1c0acbbb 100644
--- a/drivers/video/nvidia/nv_dma.h
+++ b/drivers/video/fbdev/nvidia/nv_dma.h
diff --git a/drivers/video/nvidia/nv_hw.c b/drivers/video/fbdev/nvidia/nv_hw.c
index 81c80ac3c76f..81c80ac3c76f 100644
--- a/drivers/video/nvidia/nv_hw.c
+++ b/drivers/video/fbdev/nvidia/nv_hw.c
diff --git a/drivers/video/nvidia/nv_i2c.c b/drivers/video/fbdev/nvidia/nv_i2c.c
index d7994a173245..d7994a173245 100644
--- a/drivers/video/nvidia/nv_i2c.c
+++ b/drivers/video/fbdev/nvidia/nv_i2c.c
diff --git a/drivers/video/nvidia/nv_local.h b/drivers/video/fbdev/nvidia/nv_local.h
index 68e508daa417..68e508daa417 100644
--- a/drivers/video/nvidia/nv_local.h
+++ b/drivers/video/fbdev/nvidia/nv_local.h
diff --git a/drivers/video/nvidia/nv_of.c b/drivers/video/fbdev/nvidia/nv_of.c
index 3bc13df4b120..3bc13df4b120 100644
--- a/drivers/video/nvidia/nv_of.c
+++ b/drivers/video/fbdev/nvidia/nv_of.c
diff --git a/drivers/video/nvidia/nv_proto.h b/drivers/video/fbdev/nvidia/nv_proto.h
index ff5c410355ea..ff5c410355ea 100644
--- a/drivers/video/nvidia/nv_proto.h
+++ b/drivers/video/fbdev/nvidia/nv_proto.h
diff --git a/drivers/video/nvidia/nv_setup.c b/drivers/video/fbdev/nvidia/nv_setup.c
index 2f2e162134fa..2f2e162134fa 100644
--- a/drivers/video/nvidia/nv_setup.c
+++ b/drivers/video/fbdev/nvidia/nv_setup.c
diff --git a/drivers/video/nvidia/nv_type.h b/drivers/video/fbdev/nvidia/nv_type.h
index c03f7f55c76d..c03f7f55c76d 100644
--- a/drivers/video/nvidia/nv_type.h
+++ b/drivers/video/fbdev/nvidia/nv_type.h
diff --git a/drivers/video/nvidia/nvidia.c b/drivers/video/fbdev/nvidia/nvidia.c
index def041204676..def041204676 100644
--- a/drivers/video/nvidia/nvidia.c
+++ b/drivers/video/fbdev/nvidia/nvidia.c
diff --git a/drivers/video/ocfb.c b/drivers/video/fbdev/ocfb.c
index 7f9dc9bec309..7f9dc9bec309 100644
--- a/drivers/video/ocfb.c
+++ b/drivers/video/fbdev/ocfb.c
diff --git a/drivers/video/offb.c b/drivers/video/fbdev/offb.c
index 7d44d669d5b6..7d44d669d5b6 100644
--- a/drivers/video/offb.c
+++ b/drivers/video/fbdev/offb.c
diff --git a/drivers/video/omap/Kconfig b/drivers/video/fbdev/omap/Kconfig
index 0bc3a936ce2b..0bc3a936ce2b 100644
--- a/drivers/video/omap/Kconfig
+++ b/drivers/video/fbdev/omap/Kconfig
diff --git a/drivers/video/omap/Makefile b/drivers/video/fbdev/omap/Makefile
index 1927faffb5bc..1927faffb5bc 100644
--- a/drivers/video/omap/Makefile
+++ b/drivers/video/fbdev/omap/Makefile
diff --git a/drivers/video/omap/hwa742.c b/drivers/video/fbdev/omap/hwa742.c
index a4ee65b8f918..a4ee65b8f918 100644
--- a/drivers/video/omap/hwa742.c
+++ b/drivers/video/fbdev/omap/hwa742.c
diff --git a/drivers/video/omap/lcd_ams_delta.c b/drivers/video/fbdev/omap/lcd_ams_delta.c
index 4a5f2cd3d3bf..4a5f2cd3d3bf 100644
--- a/drivers/video/omap/lcd_ams_delta.c
+++ b/drivers/video/fbdev/omap/lcd_ams_delta.c
diff --git a/drivers/video/omap/lcd_h3.c b/drivers/video/fbdev/omap/lcd_h3.c
index 49bdeca81e50..49bdeca81e50 100644
--- a/drivers/video/omap/lcd_h3.c
+++ b/drivers/video/fbdev/omap/lcd_h3.c
diff --git a/drivers/video/omap/lcd_htcherald.c b/drivers/video/fbdev/omap/lcd_htcherald.c
index 20f477851d54..20f477851d54 100644
--- a/drivers/video/omap/lcd_htcherald.c
+++ b/drivers/video/fbdev/omap/lcd_htcherald.c
diff --git a/drivers/video/omap/lcd_inn1510.c b/drivers/video/fbdev/omap/lcd_inn1510.c
index 2ee423279e35..2ee423279e35 100644
--- a/drivers/video/omap/lcd_inn1510.c
+++ b/drivers/video/fbdev/omap/lcd_inn1510.c
diff --git a/drivers/video/omap/lcd_inn1610.c b/drivers/video/fbdev/omap/lcd_inn1610.c
index e3d3d135aa48..e3d3d135aa48 100644
--- a/drivers/video/omap/lcd_inn1610.c
+++ b/drivers/video/fbdev/omap/lcd_inn1610.c
diff --git a/drivers/video/omap/lcd_mipid.c b/drivers/video/fbdev/omap/lcd_mipid.c
index 803fee618d57..803fee618d57 100644
--- a/drivers/video/omap/lcd_mipid.c
+++ b/drivers/video/fbdev/omap/lcd_mipid.c
diff --git a/drivers/video/omap/lcd_osk.c b/drivers/video/fbdev/omap/lcd_osk.c
index 7fbe04bce0ed..7fbe04bce0ed 100644
--- a/drivers/video/omap/lcd_osk.c
+++ b/drivers/video/fbdev/omap/lcd_osk.c
diff --git a/drivers/video/omap/lcd_palmte.c b/drivers/video/fbdev/omap/lcd_palmte.c
index ff4fb624b904..ff4fb624b904 100644
--- a/drivers/video/omap/lcd_palmte.c
+++ b/drivers/video/fbdev/omap/lcd_palmte.c
diff --git a/drivers/video/omap/lcd_palmtt.c b/drivers/video/fbdev/omap/lcd_palmtt.c
index aaf3c8ba1243..aaf3c8ba1243 100644
--- a/drivers/video/omap/lcd_palmtt.c
+++ b/drivers/video/fbdev/omap/lcd_palmtt.c
diff --git a/drivers/video/omap/lcd_palmz71.c b/drivers/video/fbdev/omap/lcd_palmz71.c
index 3b7d8aa1cf34..3b7d8aa1cf34 100644
--- a/drivers/video/omap/lcd_palmz71.c
+++ b/drivers/video/fbdev/omap/lcd_palmz71.c
diff --git a/drivers/video/omap/lcdc.c b/drivers/video/fbdev/omap/lcdc.c
index b52f62595f65..b52f62595f65 100644
--- a/drivers/video/omap/lcdc.c
+++ b/drivers/video/fbdev/omap/lcdc.c
diff --git a/drivers/video/omap/lcdc.h b/drivers/video/fbdev/omap/lcdc.h
index 845222270db3..845222270db3 100644
--- a/drivers/video/omap/lcdc.h
+++ b/drivers/video/fbdev/omap/lcdc.h
diff --git a/drivers/video/omap/omapfb.h b/drivers/video/fbdev/omap/omapfb.h
index 2921d20e4fba..2921d20e4fba 100644
--- a/drivers/video/omap/omapfb.h
+++ b/drivers/video/fbdev/omap/omapfb.h
diff --git a/drivers/video/omap/omapfb_main.c b/drivers/video/fbdev/omap/omapfb_main.c
index e4fc6d9b5371..e4fc6d9b5371 100644
--- a/drivers/video/omap/omapfb_main.c
+++ b/drivers/video/fbdev/omap/omapfb_main.c
diff --git a/drivers/video/omap/sossi.c b/drivers/video/fbdev/omap/sossi.c
index d4e7684e7045..d4e7684e7045 100644
--- a/drivers/video/omap/sossi.c
+++ b/drivers/video/fbdev/omap/sossi.c
diff --git a/drivers/video/fbdev/omap2/Kconfig b/drivers/video/fbdev/omap2/Kconfig
new file mode 100644
index 000000000000..c22955d2de9a
--- /dev/null
+++ b/drivers/video/fbdev/omap2/Kconfig
@@ -0,0 +1,10 @@
1config OMAP2_VRFB
2 bool
3
4if ARCH_OMAP2PLUS
5
6source "drivers/video/fbdev/omap2/dss/Kconfig"
7source "drivers/video/fbdev/omap2/omapfb/Kconfig"
8source "drivers/video/fbdev/omap2/displays-new/Kconfig"
9
10endif
diff --git a/drivers/video/omap2/Makefile b/drivers/video/fbdev/omap2/Makefile
index bf8127df8c71..bf8127df8c71 100644
--- a/drivers/video/omap2/Makefile
+++ b/drivers/video/fbdev/omap2/Makefile
diff --git a/drivers/video/omap2/displays-new/Kconfig b/drivers/video/fbdev/omap2/displays-new/Kconfig
index e6cfc38160d3..e6cfc38160d3 100644
--- a/drivers/video/omap2/displays-new/Kconfig
+++ b/drivers/video/fbdev/omap2/displays-new/Kconfig
diff --git a/drivers/video/omap2/displays-new/Makefile b/drivers/video/fbdev/omap2/displays-new/Makefile
index 0323a8a1c682..0323a8a1c682 100644
--- a/drivers/video/omap2/displays-new/Makefile
+++ b/drivers/video/fbdev/omap2/displays-new/Makefile
diff --git a/drivers/video/omap2/displays-new/connector-analog-tv.c b/drivers/video/fbdev/omap2/displays-new/connector-analog-tv.c
index 5ee3b5505f7f..5ee3b5505f7f 100644
--- a/drivers/video/omap2/displays-new/connector-analog-tv.c
+++ b/drivers/video/fbdev/omap2/displays-new/connector-analog-tv.c
diff --git a/drivers/video/omap2/displays-new/connector-dvi.c b/drivers/video/fbdev/omap2/displays-new/connector-dvi.c
index 74de2bc50c4f..74de2bc50c4f 100644
--- a/drivers/video/omap2/displays-new/connector-dvi.c
+++ b/drivers/video/fbdev/omap2/displays-new/connector-dvi.c
diff --git a/drivers/video/omap2/displays-new/connector-hdmi.c b/drivers/video/fbdev/omap2/displays-new/connector-hdmi.c
index 29ed21b9dce5..29ed21b9dce5 100644
--- a/drivers/video/omap2/displays-new/connector-hdmi.c
+++ b/drivers/video/fbdev/omap2/displays-new/connector-hdmi.c
diff --git a/drivers/video/omap2/displays-new/encoder-tfp410.c b/drivers/video/fbdev/omap2/displays-new/encoder-tfp410.c
index b4e9a42a79e6..b4e9a42a79e6 100644
--- a/drivers/video/omap2/displays-new/encoder-tfp410.c
+++ b/drivers/video/fbdev/omap2/displays-new/encoder-tfp410.c
diff --git a/drivers/video/omap2/displays-new/encoder-tpd12s015.c b/drivers/video/fbdev/omap2/displays-new/encoder-tpd12s015.c
index 7e33686171e3..7e33686171e3 100644
--- a/drivers/video/omap2/displays-new/encoder-tpd12s015.c
+++ b/drivers/video/fbdev/omap2/displays-new/encoder-tpd12s015.c
diff --git a/drivers/video/omap2/displays-new/panel-dpi.c b/drivers/video/fbdev/omap2/displays-new/panel-dpi.c
index 5f8f7e7c81ef..5f8f7e7c81ef 100644
--- a/drivers/video/omap2/displays-new/panel-dpi.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-dpi.c
diff --git a/drivers/video/omap2/displays-new/panel-dsi-cm.c b/drivers/video/fbdev/omap2/displays-new/panel-dsi-cm.c
index d6f14e8717e8..d6f14e8717e8 100644
--- a/drivers/video/omap2/displays-new/panel-dsi-cm.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-dsi-cm.c
diff --git a/drivers/video/omap2/displays-new/panel-lgphilips-lb035q02.c b/drivers/video/fbdev/omap2/displays-new/panel-lgphilips-lb035q02.c
index 2e6b513222d9..2e6b513222d9 100644
--- a/drivers/video/omap2/displays-new/panel-lgphilips-lb035q02.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-lgphilips-lb035q02.c
diff --git a/drivers/video/omap2/displays-new/panel-nec-nl8048hl11.c b/drivers/video/fbdev/omap2/displays-new/panel-nec-nl8048hl11.c
index 996fa004b48c..996fa004b48c 100644
--- a/drivers/video/omap2/displays-new/panel-nec-nl8048hl11.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-nec-nl8048hl11.c
diff --git a/drivers/video/omap2/displays-new/panel-sharp-ls037v7dw01.c b/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
index b2f710be565d..b2f710be565d 100644
--- a/drivers/video/omap2/displays-new/panel-sharp-ls037v7dw01.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-sharp-ls037v7dw01.c
diff --git a/drivers/video/omap2/displays-new/panel-sony-acx565akm.c b/drivers/video/fbdev/omap2/displays-new/panel-sony-acx565akm.c
index c7ba4d8b928a..c7ba4d8b928a 100644
--- a/drivers/video/omap2/displays-new/panel-sony-acx565akm.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-sony-acx565akm.c
diff --git a/drivers/video/omap2/displays-new/panel-tpo-td028ttec1.c b/drivers/video/fbdev/omap2/displays-new/panel-tpo-td028ttec1.c
index fae6adc005a7..fae6adc005a7 100644
--- a/drivers/video/omap2/displays-new/panel-tpo-td028ttec1.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-tpo-td028ttec1.c
diff --git a/drivers/video/omap2/displays-new/panel-tpo-td043mtea1.c b/drivers/video/fbdev/omap2/displays-new/panel-tpo-td043mtea1.c
index 875b40263b33..875b40263b33 100644
--- a/drivers/video/omap2/displays-new/panel-tpo-td043mtea1.c
+++ b/drivers/video/fbdev/omap2/displays-new/panel-tpo-td043mtea1.c
diff --git a/drivers/video/omap2/dss/Kconfig b/drivers/video/fbdev/omap2/dss/Kconfig
index dde4281663b1..dde4281663b1 100644
--- a/drivers/video/omap2/dss/Kconfig
+++ b/drivers/video/fbdev/omap2/dss/Kconfig
diff --git a/drivers/video/omap2/dss/Makefile b/drivers/video/fbdev/omap2/dss/Makefile
index 8aec8bda27cc..8aec8bda27cc 100644
--- a/drivers/video/omap2/dss/Makefile
+++ b/drivers/video/fbdev/omap2/dss/Makefile
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/fbdev/omap2/dss/apply.c
index 0a0b084ce65d..0a0b084ce65d 100644
--- a/drivers/video/omap2/dss/apply.c
+++ b/drivers/video/fbdev/omap2/dss/apply.c
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/fbdev/omap2/dss/core.c
index ffa45c894cd4..ffa45c894cd4 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/fbdev/omap2/dss/core.c
diff --git a/drivers/video/omap2/dss/dispc-compat.c b/drivers/video/fbdev/omap2/dss/dispc-compat.c
index 83779c2b292a..83779c2b292a 100644
--- a/drivers/video/omap2/dss/dispc-compat.c
+++ b/drivers/video/fbdev/omap2/dss/dispc-compat.c
diff --git a/drivers/video/omap2/dss/dispc-compat.h b/drivers/video/fbdev/omap2/dss/dispc-compat.h
index 14a69b3d4fb0..14a69b3d4fb0 100644
--- a/drivers/video/omap2/dss/dispc-compat.h
+++ b/drivers/video/fbdev/omap2/dss/dispc-compat.h
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/fbdev/omap2/dss/dispc.c
index 2bbdb7ff7daf..f18397c33e8f 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/fbdev/omap2/dss/dispc.c
@@ -101,6 +101,8 @@ static struct {
101 void __iomem *base; 101 void __iomem *base;
102 102
103 int irq; 103 int irq;
104 irq_handler_t user_handler;
105 void *user_data;
104 106
105 unsigned long core_clk_rate; 107 unsigned long core_clk_rate;
106 unsigned long tv_pclk_rate; 108 unsigned long tv_pclk_rate;
@@ -113,6 +115,8 @@ static struct {
113 u32 ctx[DISPC_SZ_REGS / sizeof(u32)]; 115 u32 ctx[DISPC_SZ_REGS / sizeof(u32)];
114 116
115 const struct dispc_features *feat; 117 const struct dispc_features *feat;
118
119 bool is_enabled;
116} dispc; 120} dispc;
117 121
118enum omap_color_component { 122enum omap_color_component {
@@ -141,12 +145,18 @@ enum mgr_reg_fields {
141 DISPC_MGR_FLD_NUM, 145 DISPC_MGR_FLD_NUM,
142}; 146};
143 147
148struct dispc_reg_field {
149 u16 reg;
150 u8 high;
151 u8 low;
152};
153
144static const struct { 154static const struct {
145 const char *name; 155 const char *name;
146 u32 vsync_irq; 156 u32 vsync_irq;
147 u32 framedone_irq; 157 u32 framedone_irq;
148 u32 sync_lost_irq; 158 u32 sync_lost_irq;
149 struct reg_field reg_desc[DISPC_MGR_FLD_NUM]; 159 struct dispc_reg_field reg_desc[DISPC_MGR_FLD_NUM];
150} mgr_desc[] = { 160} mgr_desc[] = {
151 [OMAP_DSS_CHANNEL_LCD] = { 161 [OMAP_DSS_CHANNEL_LCD] = {
152 .name = "LCD", 162 .name = "LCD",
@@ -238,13 +248,13 @@ static inline u32 dispc_read_reg(const u16 idx)
238 248
239static u32 mgr_fld_read(enum omap_channel channel, enum mgr_reg_fields regfld) 249static u32 mgr_fld_read(enum omap_channel channel, enum mgr_reg_fields regfld)
240{ 250{
241 const struct reg_field rfld = mgr_desc[channel].reg_desc[regfld]; 251 const struct dispc_reg_field rfld = mgr_desc[channel].reg_desc[regfld];
242 return REG_GET(rfld.reg, rfld.high, rfld.low); 252 return REG_GET(rfld.reg, rfld.high, rfld.low);
243} 253}
244 254
245static void mgr_fld_write(enum omap_channel channel, 255static void mgr_fld_write(enum omap_channel channel,
246 enum mgr_reg_fields regfld, int val) { 256 enum mgr_reg_fields regfld, int val) {
247 const struct reg_field rfld = mgr_desc[channel].reg_desc[regfld]; 257 const struct dispc_reg_field rfld = mgr_desc[channel].reg_desc[regfld];
248 REG_FLD_MOD(rfld.reg, val, rfld.high, rfld.low); 258 REG_FLD_MOD(rfld.reg, val, rfld.high, rfld.low);
249} 259}
250 260
@@ -3669,16 +3679,44 @@ static int __init dispc_init_features(struct platform_device *pdev)
3669 return 0; 3679 return 0;
3670} 3680}
3671 3681
3682static irqreturn_t dispc_irq_handler(int irq, void *arg)
3683{
3684 if (!dispc.is_enabled)
3685 return IRQ_NONE;
3686
3687 return dispc.user_handler(irq, dispc.user_data);
3688}
3689
3672int dispc_request_irq(irq_handler_t handler, void *dev_id) 3690int dispc_request_irq(irq_handler_t handler, void *dev_id)
3673{ 3691{
3674 return devm_request_irq(&dispc.pdev->dev, dispc.irq, handler, 3692 int r;
3675 IRQF_SHARED, "OMAP DISPC", dev_id); 3693
3694 if (dispc.user_handler != NULL)
3695 return -EBUSY;
3696
3697 dispc.user_handler = handler;
3698 dispc.user_data = dev_id;
3699
3700 /* ensure the dispc_irq_handler sees the values above */
3701 smp_wmb();
3702
3703 r = devm_request_irq(&dispc.pdev->dev, dispc.irq, dispc_irq_handler,
3704 IRQF_SHARED, "OMAP DISPC", &dispc);
3705 if (r) {
3706 dispc.user_handler = NULL;
3707 dispc.user_data = NULL;
3708 }
3709
3710 return r;
3676} 3711}
3677EXPORT_SYMBOL(dispc_request_irq); 3712EXPORT_SYMBOL(dispc_request_irq);
3678 3713
3679void dispc_free_irq(void *dev_id) 3714void dispc_free_irq(void *dev_id)
3680{ 3715{
3681 devm_free_irq(&dispc.pdev->dev, dispc.irq, dev_id); 3716 devm_free_irq(&dispc.pdev->dev, dispc.irq, &dispc);
3717
3718 dispc.user_handler = NULL;
3719 dispc.user_data = NULL;
3682} 3720}
3683EXPORT_SYMBOL(dispc_free_irq); 3721EXPORT_SYMBOL(dispc_free_irq);
3684 3722
@@ -3750,6 +3788,12 @@ static int __exit omap_dispchw_remove(struct platform_device *pdev)
3750 3788
3751static int dispc_runtime_suspend(struct device *dev) 3789static int dispc_runtime_suspend(struct device *dev)
3752{ 3790{
3791 dispc.is_enabled = false;
3792 /* ensure the dispc_irq_handler sees the is_enabled value */
3793 smp_wmb();
3794 /* wait for current handler to finish before turning the DISPC off */
3795 synchronize_irq(dispc.irq);
3796
3753 dispc_save_context(); 3797 dispc_save_context();
3754 3798
3755 return 0; 3799 return 0;
@@ -3763,12 +3807,15 @@ static int dispc_runtime_resume(struct device *dev)
3763 * _omap_dispc_initial_config(). We can thus use it to detect if 3807 * _omap_dispc_initial_config(). We can thus use it to detect if
3764 * we have lost register context. 3808 * we have lost register context.
3765 */ 3809 */
3766 if (REG_GET(DISPC_CONFIG, 2, 1) == OMAP_DSS_LOAD_FRAME_ONLY) 3810 if (REG_GET(DISPC_CONFIG, 2, 1) != OMAP_DSS_LOAD_FRAME_ONLY) {
3767 return 0; 3811 _omap_dispc_initial_config();
3768 3812
3769 _omap_dispc_initial_config(); 3813 dispc_restore_context();
3814 }
3770 3815
3771 dispc_restore_context(); 3816 dispc.is_enabled = true;
3817 /* ensure the dispc_irq_handler sees the is_enabled value */
3818 smp_wmb();
3772 3819
3773 return 0; 3820 return 0;
3774} 3821}
diff --git a/drivers/video/omap2/dss/dispc.h b/drivers/video/fbdev/omap2/dss/dispc.h
index 78edb449c763..78edb449c763 100644
--- a/drivers/video/omap2/dss/dispc.h
+++ b/drivers/video/fbdev/omap2/dss/dispc.h
diff --git a/drivers/video/omap2/dss/dispc_coefs.c b/drivers/video/fbdev/omap2/dss/dispc_coefs.c
index 038c15b04215..038c15b04215 100644
--- a/drivers/video/omap2/dss/dispc_coefs.c
+++ b/drivers/video/fbdev/omap2/dss/dispc_coefs.c
diff --git a/drivers/video/omap2/dss/display-sysfs.c b/drivers/video/fbdev/omap2/dss/display-sysfs.c
index 5a2095a98ed8..5a2095a98ed8 100644
--- a/drivers/video/omap2/dss/display-sysfs.c
+++ b/drivers/video/fbdev/omap2/dss/display-sysfs.c
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/fbdev/omap2/dss/display.c
index 2412a0dd0c13..2412a0dd0c13 100644
--- a/drivers/video/omap2/dss/display.c
+++ b/drivers/video/fbdev/omap2/dss/display.c
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/fbdev/omap2/dss/dpi.c
index 157921db447a..157921db447a 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/fbdev/omap2/dss/dpi.c
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/fbdev/omap2/dss/dsi.c
index 121d1049d0bc..8be9b04d8849 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/fbdev/omap2/dss/dsi.c
@@ -297,6 +297,8 @@ struct dsi_data {
297 297
298 int irq; 298 int irq;
299 299
300 bool is_enabled;
301
300 struct clk *dss_clk; 302 struct clk *dss_clk;
301 struct clk *sys_clk; 303 struct clk *sys_clk;
302 304
@@ -795,6 +797,9 @@ static irqreturn_t omap_dsi_irq_handler(int irq, void *arg)
795 dsidev = (struct platform_device *) arg; 797 dsidev = (struct platform_device *) arg;
796 dsi = dsi_get_dsidrv_data(dsidev); 798 dsi = dsi_get_dsidrv_data(dsidev);
797 799
800 if (!dsi->is_enabled)
801 return IRQ_NONE;
802
798 spin_lock(&dsi->irq_lock); 803 spin_lock(&dsi->irq_lock);
799 804
800 irqstatus = dsi_read_reg(dsidev, DSI_IRQSTATUS); 805 irqstatus = dsi_read_reg(dsidev, DSI_IRQSTATUS);
@@ -5671,6 +5676,15 @@ static int __exit omap_dsihw_remove(struct platform_device *dsidev)
5671 5676
5672static int dsi_runtime_suspend(struct device *dev) 5677static int dsi_runtime_suspend(struct device *dev)
5673{ 5678{
5679 struct platform_device *pdev = to_platform_device(dev);
5680 struct dsi_data *dsi = dsi_get_dsidrv_data(pdev);
5681
5682 dsi->is_enabled = false;
5683 /* ensure the irq handler sees the is_enabled value */
5684 smp_wmb();
5685 /* wait for current handler to finish before turning the DSI off */
5686 synchronize_irq(dsi->irq);
5687
5674 dispc_runtime_put(); 5688 dispc_runtime_put();
5675 5689
5676 return 0; 5690 return 0;
@@ -5678,12 +5692,18 @@ static int dsi_runtime_suspend(struct device *dev)
5678 5692
5679static int dsi_runtime_resume(struct device *dev) 5693static int dsi_runtime_resume(struct device *dev)
5680{ 5694{
5695 struct platform_device *pdev = to_platform_device(dev);
5696 struct dsi_data *dsi = dsi_get_dsidrv_data(pdev);
5681 int r; 5697 int r;
5682 5698
5683 r = dispc_runtime_get(); 5699 r = dispc_runtime_get();
5684 if (r) 5700 if (r)
5685 return r; 5701 return r;
5686 5702
5703 dsi->is_enabled = true;
5704 /* ensure the irq handler sees the is_enabled value */
5705 smp_wmb();
5706
5687 return 0; 5707 return 0;
5688} 5708}
5689 5709
diff --git a/drivers/video/omap2/dss/dss-of.c b/drivers/video/fbdev/omap2/dss/dss-of.c
index a4b20aaf6142..a4b20aaf6142 100644
--- a/drivers/video/omap2/dss/dss-of.c
+++ b/drivers/video/fbdev/omap2/dss/dss-of.c
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/fbdev/omap2/dss/dss.c
index 825c019ddee7..d55266c0e029 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/fbdev/omap2/dss/dss.c
@@ -457,7 +457,7 @@ bool dss_div_calc(unsigned long pck, unsigned long fck_min,
457 fckd_stop = max(DIV_ROUND_UP(prate * m, fck_hw_max), 1ul); 457 fckd_stop = max(DIV_ROUND_UP(prate * m, fck_hw_max), 1ul);
458 458
459 for (fckd = fckd_start; fckd >= fckd_stop; --fckd) { 459 for (fckd = fckd_start; fckd >= fckd_stop; --fckd) {
460 fck = prate / fckd * m; 460 fck = DIV_ROUND_UP(prate, fckd) * m;
461 461
462 if (func(fck, data)) 462 if (func(fck, data))
463 return true; 463 return true;
@@ -506,7 +506,7 @@ static int dss_setup_default_clock(void)
506 506
507 fck_div = DIV_ROUND_UP(prate * dss.feat->dss_fck_multiplier, 507 fck_div = DIV_ROUND_UP(prate * dss.feat->dss_fck_multiplier,
508 max_dss_fck); 508 max_dss_fck);
509 fck = prate / fck_div * dss.feat->dss_fck_multiplier; 509 fck = DIV_ROUND_UP(prate, fck_div) * dss.feat->dss_fck_multiplier;
510 } 510 }
511 511
512 r = dss_set_fck_rate(fck); 512 r = dss_set_fck_rate(fck);
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/fbdev/omap2/dss/dss.h
index 918fec182424..560078fcb198 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/fbdev/omap2/dss/dss.h
@@ -131,12 +131,6 @@ struct dsi_clock_info {
131 u16 lp_clk_div; 131 u16 lp_clk_div;
132}; 132};
133 133
134struct reg_field {
135 u16 reg;
136 u8 high;
137 u8 low;
138};
139
140struct dss_lcd_mgr_config { 134struct dss_lcd_mgr_config {
141 enum dss_io_pad_mode io_pad_mode; 135 enum dss_io_pad_mode io_pad_mode;
142 136
diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/fbdev/omap2/dss/dss_features.c
index 7f8969191dc6..7f8969191dc6 100644
--- a/drivers/video/omap2/dss/dss_features.c
+++ b/drivers/video/fbdev/omap2/dss/dss_features.c
diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/fbdev/omap2/dss/dss_features.h
index e3ef3b714896..e3ef3b714896 100644
--- a/drivers/video/omap2/dss/dss_features.h
+++ b/drivers/video/fbdev/omap2/dss/dss_features.h
diff --git a/drivers/video/omap2/dss/hdmi.h b/drivers/video/fbdev/omap2/dss/hdmi.h
index e25681ff5a70..e25681ff5a70 100644
--- a/drivers/video/omap2/dss/hdmi.h
+++ b/drivers/video/fbdev/omap2/dss/hdmi.h
diff --git a/drivers/video/omap2/dss/hdmi4.c b/drivers/video/fbdev/omap2/dss/hdmi4.c
index f5f7944a1fd1..f5f7944a1fd1 100644
--- a/drivers/video/omap2/dss/hdmi4.c
+++ b/drivers/video/fbdev/omap2/dss/hdmi4.c
diff --git a/drivers/video/omap2/dss/hdmi4_core.c b/drivers/video/fbdev/omap2/dss/hdmi4_core.c
index 2eb04dcf807c..2eb04dcf807c 100644
--- a/drivers/video/omap2/dss/hdmi4_core.c
+++ b/drivers/video/fbdev/omap2/dss/hdmi4_core.c
diff --git a/drivers/video/omap2/dss/hdmi4_core.h b/drivers/video/fbdev/omap2/dss/hdmi4_core.h
index bb646896fa82..bb646896fa82 100644
--- a/drivers/video/omap2/dss/hdmi4_core.h
+++ b/drivers/video/fbdev/omap2/dss/hdmi4_core.h
diff --git a/drivers/video/omap2/dss/hdmi_common.c b/drivers/video/fbdev/omap2/dss/hdmi_common.c
index b11afac8e068..0b12a3f62fe1 100644
--- a/drivers/video/omap2/dss/hdmi_common.c
+++ b/drivers/video/fbdev/omap2/dss/hdmi_common.c
@@ -347,17 +347,17 @@ int hdmi_compute_acr(u32 pclk, u32 sample_freq, u32 *n, u32 *cts)
347 case 96000: 347 case 96000:
348 case 192000: 348 case 192000:
349 if (deep_color == 125) 349 if (deep_color == 125)
350 if (pclk == 27027 || pclk == 74250) 350 if (pclk == 27027000 || pclk == 74250000)
351 deep_color_correct = true; 351 deep_color_correct = true;
352 if (deep_color == 150) 352 if (deep_color == 150)
353 if (pclk == 27027) 353 if (pclk == 27027000)
354 deep_color_correct = true; 354 deep_color_correct = true;
355 break; 355 break;
356 case 44100: 356 case 44100:
357 case 88200: 357 case 88200:
358 case 176400: 358 case 176400:
359 if (deep_color == 125) 359 if (deep_color == 125)
360 if (pclk == 27027) 360 if (pclk == 27027000)
361 deep_color_correct = true; 361 deep_color_correct = true;
362 break; 362 break;
363 default: 363 default:
@@ -418,7 +418,7 @@ int hdmi_compute_acr(u32 pclk, u32 sample_freq, u32 *n, u32 *cts)
418 } 418 }
419 } 419 }
420 /* Calculate CTS. See HDMI 1.3a or 1.4a specifications */ 420 /* Calculate CTS. See HDMI 1.3a or 1.4a specifications */
421 *cts = pclk * (*n / 128) * deep_color / (sample_freq / 10); 421 *cts = (pclk/1000) * (*n / 128) * deep_color / (sample_freq / 10);
422 422
423 return 0; 423 return 0;
424} 424}
diff --git a/drivers/video/omap2/dss/hdmi_phy.c b/drivers/video/fbdev/omap2/dss/hdmi_phy.c
index dd376ce8da01..dd376ce8da01 100644
--- a/drivers/video/omap2/dss/hdmi_phy.c
+++ b/drivers/video/fbdev/omap2/dss/hdmi_phy.c
diff --git a/drivers/video/omap2/dss/hdmi_pll.c b/drivers/video/fbdev/omap2/dss/hdmi_pll.c
index 5fc71215c303..5fc71215c303 100644
--- a/drivers/video/omap2/dss/hdmi_pll.c
+++ b/drivers/video/fbdev/omap2/dss/hdmi_pll.c
diff --git a/drivers/video/omap2/dss/hdmi_wp.c b/drivers/video/fbdev/omap2/dss/hdmi_wp.c
index f5f4ccf50d90..f5f4ccf50d90 100644
--- a/drivers/video/omap2/dss/hdmi_wp.c
+++ b/drivers/video/fbdev/omap2/dss/hdmi_wp.c
diff --git a/drivers/video/omap2/dss/manager-sysfs.c b/drivers/video/fbdev/omap2/dss/manager-sysfs.c
index 37b59fe28dc8..37b59fe28dc8 100644
--- a/drivers/video/omap2/dss/manager-sysfs.c
+++ b/drivers/video/fbdev/omap2/dss/manager-sysfs.c
diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/fbdev/omap2/dss/manager.c
index 1aac9b4191a9..1aac9b4191a9 100644
--- a/drivers/video/omap2/dss/manager.c
+++ b/drivers/video/fbdev/omap2/dss/manager.c
diff --git a/drivers/video/omap2/dss/output.c b/drivers/video/fbdev/omap2/dss/output.c
index 2ab3afa615e8..2ab3afa615e8 100644
--- a/drivers/video/omap2/dss/output.c
+++ b/drivers/video/fbdev/omap2/dss/output.c
diff --git a/drivers/video/omap2/dss/overlay-sysfs.c b/drivers/video/fbdev/omap2/dss/overlay-sysfs.c
index 4cc5ddebfb34..4cc5ddebfb34 100644
--- a/drivers/video/omap2/dss/overlay-sysfs.c
+++ b/drivers/video/fbdev/omap2/dss/overlay-sysfs.c
diff --git a/drivers/video/omap2/dss/overlay.c b/drivers/video/fbdev/omap2/dss/overlay.c
index 2f7cee985cdd..2f7cee985cdd 100644
--- a/drivers/video/omap2/dss/overlay.c
+++ b/drivers/video/fbdev/omap2/dss/overlay.c
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/fbdev/omap2/dss/rfbi.c
index c8a81a2b879c..c8a81a2b879c 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/fbdev/omap2/dss/rfbi.c
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/fbdev/omap2/dss/sdi.c
index 911dcc9173a6..911dcc9173a6 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/fbdev/omap2/dss/sdi.c
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/fbdev/omap2/dss/venc.c
index 21d81113962b..21d81113962b 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/fbdev/omap2/dss/venc.c
diff --git a/drivers/video/omap2/dss/venc_panel.c b/drivers/video/fbdev/omap2/dss/venc_panel.c
index af68cd444d7e..af68cd444d7e 100644
--- a/drivers/video/omap2/dss/venc_panel.c
+++ b/drivers/video/fbdev/omap2/dss/venc_panel.c
diff --git a/drivers/video/omap2/omapfb/Kconfig b/drivers/video/fbdev/omap2/omapfb/Kconfig
index 4cb12ce68855..4cb12ce68855 100644
--- a/drivers/video/omap2/omapfb/Kconfig
+++ b/drivers/video/fbdev/omap2/omapfb/Kconfig
diff --git a/drivers/video/omap2/omapfb/Makefile b/drivers/video/fbdev/omap2/omapfb/Makefile
index 51c2e00d9bf8..51c2e00d9bf8 100644
--- a/drivers/video/omap2/omapfb/Makefile
+++ b/drivers/video/fbdev/omap2/omapfb/Makefile
diff --git a/drivers/video/omap2/omapfb/omapfb-ioctl.c b/drivers/video/fbdev/omap2/omapfb/omapfb-ioctl.c
index 146b6f5428db..146b6f5428db 100644
--- a/drivers/video/omap2/omapfb/omapfb-ioctl.c
+++ b/drivers/video/fbdev/omap2/omapfb/omapfb-ioctl.c
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/fbdev/omap2/omapfb/omapfb-main.c
index ec2d132c782d..ec2d132c782d 100644
--- a/drivers/video/omap2/omapfb/omapfb-main.c
+++ b/drivers/video/fbdev/omap2/omapfb/omapfb-main.c
diff --git a/drivers/video/omap2/omapfb/omapfb-sysfs.c b/drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c
index 18fa9e1d0033..18fa9e1d0033 100644
--- a/drivers/video/omap2/omapfb/omapfb-sysfs.c
+++ b/drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c
diff --git a/drivers/video/omap2/omapfb/omapfb.h b/drivers/video/fbdev/omap2/omapfb/omapfb.h
index 623cd872a367..623cd872a367 100644
--- a/drivers/video/omap2/omapfb/omapfb.h
+++ b/drivers/video/fbdev/omap2/omapfb/omapfb.h
diff --git a/drivers/video/omap2/vrfb.c b/drivers/video/fbdev/omap2/vrfb.c
index f346b02eee1d..f346b02eee1d 100644
--- a/drivers/video/omap2/vrfb.c
+++ b/drivers/video/fbdev/omap2/vrfb.c
diff --git a/drivers/video/p9100.c b/drivers/video/fbdev/p9100.c
index 367cea8f43f3..367cea8f43f3 100644
--- a/drivers/video/p9100.c
+++ b/drivers/video/fbdev/p9100.c
diff --git a/drivers/video/platinumfb.c b/drivers/video/fbdev/platinumfb.c
index 4c9299576827..4c9299576827 100644
--- a/drivers/video/platinumfb.c
+++ b/drivers/video/fbdev/platinumfb.c
diff --git a/drivers/video/platinumfb.h b/drivers/video/fbdev/platinumfb.h
index f6bd77cafd17..f6bd77cafd17 100644
--- a/drivers/video/platinumfb.h
+++ b/drivers/video/fbdev/platinumfb.h
diff --git a/drivers/video/pm2fb.c b/drivers/video/fbdev/pm2fb.c
index 3b85b647bc10..3b85b647bc10 100644
--- a/drivers/video/pm2fb.c
+++ b/drivers/video/fbdev/pm2fb.c
diff --git a/drivers/video/pm3fb.c b/drivers/video/fbdev/pm3fb.c
index 4bf3273d0433..4bf3273d0433 100644
--- a/drivers/video/pm3fb.c
+++ b/drivers/video/fbdev/pm3fb.c
diff --git a/drivers/video/pmag-aa-fb.c b/drivers/video/fbdev/pmag-aa-fb.c
index 838424817de2..838424817de2 100644
--- a/drivers/video/pmag-aa-fb.c
+++ b/drivers/video/fbdev/pmag-aa-fb.c
diff --git a/drivers/video/pmag-ba-fb.c b/drivers/video/fbdev/pmag-ba-fb.c
index 914a52ba8477..914a52ba8477 100644
--- a/drivers/video/pmag-ba-fb.c
+++ b/drivers/video/fbdev/pmag-ba-fb.c
diff --git a/drivers/video/pmagb-b-fb.c b/drivers/video/fbdev/pmagb-b-fb.c
index 0822b6f8dddc..0822b6f8dddc 100644
--- a/drivers/video/pmagb-b-fb.c
+++ b/drivers/video/fbdev/pmagb-b-fb.c
diff --git a/drivers/video/ps3fb.c b/drivers/video/fbdev/ps3fb.c
index b269abd932aa..b269abd932aa 100644
--- a/drivers/video/ps3fb.c
+++ b/drivers/video/fbdev/ps3fb.c
diff --git a/drivers/video/pvr2fb.c b/drivers/video/fbdev/pvr2fb.c
index 167cffff3d4e..167cffff3d4e 100644
--- a/drivers/video/pvr2fb.c
+++ b/drivers/video/fbdev/pvr2fb.c
diff --git a/drivers/video/pxa168fb.c b/drivers/video/fbdev/pxa168fb.c
index c95b9e46d48f..c95b9e46d48f 100644
--- a/drivers/video/pxa168fb.c
+++ b/drivers/video/fbdev/pxa168fb.c
diff --git a/drivers/video/pxa168fb.h b/drivers/video/fbdev/pxa168fb.h
index eee09279c524..eee09279c524 100644
--- a/drivers/video/pxa168fb.h
+++ b/drivers/video/fbdev/pxa168fb.h
diff --git a/drivers/video/pxa3xx-gcu.c b/drivers/video/fbdev/pxa3xx-gcu.c
index 417f9a27eb7d..417f9a27eb7d 100644
--- a/drivers/video/pxa3xx-gcu.c
+++ b/drivers/video/fbdev/pxa3xx-gcu.c
diff --git a/drivers/video/pxa3xx-gcu.h b/drivers/video/fbdev/pxa3xx-gcu.h
index 0428ed03dc49..0428ed03dc49 100644
--- a/drivers/video/pxa3xx-gcu.h
+++ b/drivers/video/fbdev/pxa3xx-gcu.h
diff --git a/drivers/video/pxafb.c b/drivers/video/fbdev/pxafb.c
index 1ecd9cec2921..1ecd9cec2921 100644
--- a/drivers/video/pxafb.c
+++ b/drivers/video/fbdev/pxafb.c
diff --git a/drivers/video/pxafb.h b/drivers/video/fbdev/pxafb.h
index 26ba9fa3f737..26ba9fa3f737 100644
--- a/drivers/video/pxafb.h
+++ b/drivers/video/fbdev/pxafb.h
diff --git a/drivers/video/q40fb.c b/drivers/video/fbdev/q40fb.c
index 7487f76f6275..7487f76f6275 100644
--- a/drivers/video/q40fb.c
+++ b/drivers/video/fbdev/q40fb.c
diff --git a/drivers/video/riva/Makefile b/drivers/video/fbdev/riva/Makefile
index 8898c9915b02..8898c9915b02 100644
--- a/drivers/video/riva/Makefile
+++ b/drivers/video/fbdev/riva/Makefile
diff --git a/drivers/video/riva/fbdev.c b/drivers/video/fbdev/riva/fbdev.c
index 8a8d7f060784..8a8d7f060784 100644
--- a/drivers/video/riva/fbdev.c
+++ b/drivers/video/fbdev/riva/fbdev.c
diff --git a/drivers/video/riva/nv_driver.c b/drivers/video/fbdev/riva/nv_driver.c
index f3694cf17e58..f3694cf17e58 100644
--- a/drivers/video/riva/nv_driver.c
+++ b/drivers/video/fbdev/riva/nv_driver.c
diff --git a/drivers/video/riva/nv_type.h b/drivers/video/fbdev/riva/nv_type.h
index a69480c9a67c..a69480c9a67c 100644
--- a/drivers/video/riva/nv_type.h
+++ b/drivers/video/fbdev/riva/nv_type.h
diff --git a/drivers/video/riva/nvreg.h b/drivers/video/fbdev/riva/nvreg.h
index abfc167ae8d8..abfc167ae8d8 100644
--- a/drivers/video/riva/nvreg.h
+++ b/drivers/video/fbdev/riva/nvreg.h
diff --git a/drivers/video/riva/riva_hw.c b/drivers/video/fbdev/riva/riva_hw.c
index 78fdbf5178d7..78fdbf5178d7 100644
--- a/drivers/video/riva/riva_hw.c
+++ b/drivers/video/fbdev/riva/riva_hw.c
diff --git a/drivers/video/riva/riva_hw.h b/drivers/video/fbdev/riva/riva_hw.h
index c2769f73e0b2..c2769f73e0b2 100644
--- a/drivers/video/riva/riva_hw.h
+++ b/drivers/video/fbdev/riva/riva_hw.h
diff --git a/drivers/video/riva/riva_tbl.h b/drivers/video/fbdev/riva/riva_tbl.h
index 7ee7d72932d4..7ee7d72932d4 100644
--- a/drivers/video/riva/riva_tbl.h
+++ b/drivers/video/fbdev/riva/riva_tbl.h
diff --git a/drivers/video/riva/rivafb-i2c.c b/drivers/video/fbdev/riva/rivafb-i2c.c
index 6a183375ced1..6a183375ced1 100644
--- a/drivers/video/riva/rivafb-i2c.c
+++ b/drivers/video/fbdev/riva/rivafb-i2c.c
diff --git a/drivers/video/riva/rivafb.h b/drivers/video/fbdev/riva/rivafb.h
index d9f107b704c6..d9f107b704c6 100644
--- a/drivers/video/riva/rivafb.h
+++ b/drivers/video/fbdev/riva/rivafb.h
diff --git a/drivers/video/s1d13xxxfb.c b/drivers/video/fbdev/s1d13xxxfb.c
index 83433cb0dfba..83433cb0dfba 100644
--- a/drivers/video/s1d13xxxfb.c
+++ b/drivers/video/fbdev/s1d13xxxfb.c
diff --git a/drivers/video/s3c-fb.c b/drivers/video/fbdev/s3c-fb.c
index 62acae2694a9..62acae2694a9 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/fbdev/s3c-fb.c
diff --git a/drivers/video/s3c2410fb.c b/drivers/video/fbdev/s3c2410fb.c
index 81af5a63e9e1..81af5a63e9e1 100644
--- a/drivers/video/s3c2410fb.c
+++ b/drivers/video/fbdev/s3c2410fb.c
diff --git a/drivers/video/s3c2410fb.h b/drivers/video/fbdev/s3c2410fb.h
index 47a17bd23011..47a17bd23011 100644
--- a/drivers/video/s3c2410fb.h
+++ b/drivers/video/fbdev/s3c2410fb.h
diff --git a/drivers/video/s3fb.c b/drivers/video/fbdev/s3fb.c
index 9a3f8f1c6aab..9a3f8f1c6aab 100644
--- a/drivers/video/s3fb.c
+++ b/drivers/video/fbdev/s3fb.c
diff --git a/drivers/video/sa1100fb.c b/drivers/video/fbdev/sa1100fb.c
index 580c444ec301..580c444ec301 100644
--- a/drivers/video/sa1100fb.c
+++ b/drivers/video/fbdev/sa1100fb.c
diff --git a/drivers/video/sa1100fb.h b/drivers/video/fbdev/sa1100fb.h
index fc5d4292fad6..fc5d4292fad6 100644
--- a/drivers/video/sa1100fb.h
+++ b/drivers/video/fbdev/sa1100fb.h
diff --git a/drivers/video/savage/Makefile b/drivers/video/fbdev/savage/Makefile
index e09770fff8ea..e09770fff8ea 100644
--- a/drivers/video/savage/Makefile
+++ b/drivers/video/fbdev/savage/Makefile
diff --git a/drivers/video/savage/savagefb-i2c.c b/drivers/video/fbdev/savage/savagefb-i2c.c
index 80fa87e2ae2f..80fa87e2ae2f 100644
--- a/drivers/video/savage/savagefb-i2c.c
+++ b/drivers/video/fbdev/savage/savagefb-i2c.c
diff --git a/drivers/video/savage/savagefb.h b/drivers/video/fbdev/savage/savagefb.h
index dcaab9012ca2..dcaab9012ca2 100644
--- a/drivers/video/savage/savagefb.h
+++ b/drivers/video/fbdev/savage/savagefb.h
diff --git a/drivers/video/savage/savagefb_accel.c b/drivers/video/fbdev/savage/savagefb_accel.c
index bfefa6234cf0..bfefa6234cf0 100644
--- a/drivers/video/savage/savagefb_accel.c
+++ b/drivers/video/fbdev/savage/savagefb_accel.c
diff --git a/drivers/video/savage/savagefb_driver.c b/drivers/video/fbdev/savage/savagefb_driver.c
index 4dbf45f3b21a..4dbf45f3b21a 100644
--- a/drivers/video/savage/savagefb_driver.c
+++ b/drivers/video/fbdev/savage/savagefb_driver.c
diff --git a/drivers/video/sbuslib.c b/drivers/video/fbdev/sbuslib.c
index a350209ffbd3..a350209ffbd3 100644
--- a/drivers/video/sbuslib.c
+++ b/drivers/video/fbdev/sbuslib.c
diff --git a/drivers/video/sbuslib.h b/drivers/video/fbdev/sbuslib.h
index 7ba3250236bd..7ba3250236bd 100644
--- a/drivers/video/sbuslib.h
+++ b/drivers/video/fbdev/sbuslib.h
diff --git a/drivers/video/sh7760fb.c b/drivers/video/fbdev/sh7760fb.c
index 1265b25f9f99..1265b25f9f99 100644
--- a/drivers/video/sh7760fb.c
+++ b/drivers/video/fbdev/sh7760fb.c
diff --git a/drivers/video/sh_mipi_dsi.c b/drivers/video/fbdev/sh_mipi_dsi.c
index 8f6e8ff620d4..8f6e8ff620d4 100644
--- a/drivers/video/sh_mipi_dsi.c
+++ b/drivers/video/fbdev/sh_mipi_dsi.c
diff --git a/drivers/video/sh_mobile_hdmi.c b/drivers/video/fbdev/sh_mobile_hdmi.c
index 9a33ee0413fb..9a33ee0413fb 100644
--- a/drivers/video/sh_mobile_hdmi.c
+++ b/drivers/video/fbdev/sh_mobile_hdmi.c
diff --git a/drivers/video/sh_mobile_lcdcfb.c b/drivers/video/fbdev/sh_mobile_lcdcfb.c
index 2bcc84ac18c7..2bcc84ac18c7 100644
--- a/drivers/video/sh_mobile_lcdcfb.c
+++ b/drivers/video/fbdev/sh_mobile_lcdcfb.c
diff --git a/drivers/video/sh_mobile_lcdcfb.h b/drivers/video/fbdev/sh_mobile_lcdcfb.h
index f839adef1d90..f839adef1d90 100644
--- a/drivers/video/sh_mobile_lcdcfb.h
+++ b/drivers/video/fbdev/sh_mobile_lcdcfb.h
diff --git a/drivers/video/sh_mobile_meram.c b/drivers/video/fbdev/sh_mobile_meram.c
index a297de5cc859..a297de5cc859 100644
--- a/drivers/video/sh_mobile_meram.c
+++ b/drivers/video/fbdev/sh_mobile_meram.c
diff --git a/drivers/video/simplefb.c b/drivers/video/fbdev/simplefb.c
index 210f3a02121a..210f3a02121a 100644
--- a/drivers/video/simplefb.c
+++ b/drivers/video/fbdev/simplefb.c
diff --git a/drivers/video/sis/300vtbl.h b/drivers/video/fbdev/sis/300vtbl.h
index e4b4a2626da4..e4b4a2626da4 100644
--- a/drivers/video/sis/300vtbl.h
+++ b/drivers/video/fbdev/sis/300vtbl.h
diff --git a/drivers/video/sis/310vtbl.h b/drivers/video/fbdev/sis/310vtbl.h
index 54fcbbf4ef63..54fcbbf4ef63 100644
--- a/drivers/video/sis/310vtbl.h
+++ b/drivers/video/fbdev/sis/310vtbl.h
diff --git a/drivers/video/sis/Makefile b/drivers/video/fbdev/sis/Makefile
index f7c0046e5b1d..f7c0046e5b1d 100644
--- a/drivers/video/sis/Makefile
+++ b/drivers/video/fbdev/sis/Makefile
diff --git a/drivers/video/sis/init.c b/drivers/video/fbdev/sis/init.c
index bd40f5ecd901..bd40f5ecd901 100644
--- a/drivers/video/sis/init.c
+++ b/drivers/video/fbdev/sis/init.c
diff --git a/drivers/video/sis/init.h b/drivers/video/fbdev/sis/init.h
index 85d6738b6c64..85d6738b6c64 100644
--- a/drivers/video/sis/init.h
+++ b/drivers/video/fbdev/sis/init.h
diff --git a/drivers/video/sis/init301.c b/drivers/video/fbdev/sis/init301.c
index a89e3cafd5ad..a89e3cafd5ad 100644
--- a/drivers/video/sis/init301.c
+++ b/drivers/video/fbdev/sis/init301.c
diff --git a/drivers/video/sis/init301.h b/drivers/video/fbdev/sis/init301.h
index 2112d6d7feda..2112d6d7feda 100644
--- a/drivers/video/sis/init301.h
+++ b/drivers/video/fbdev/sis/init301.h
diff --git a/drivers/video/sis/initdef.h b/drivers/video/fbdev/sis/initdef.h
index 264b55a5947b..264b55a5947b 100644
--- a/drivers/video/sis/initdef.h
+++ b/drivers/video/fbdev/sis/initdef.h
diff --git a/drivers/video/sis/initextlfb.c b/drivers/video/fbdev/sis/initextlfb.c
index 3ab18f5a3759..3ab18f5a3759 100644
--- a/drivers/video/sis/initextlfb.c
+++ b/drivers/video/fbdev/sis/initextlfb.c
diff --git a/drivers/video/sis/oem300.h b/drivers/video/fbdev/sis/oem300.h
index b73f26840143..b73f26840143 100644
--- a/drivers/video/sis/oem300.h
+++ b/drivers/video/fbdev/sis/oem300.h
diff --git a/drivers/video/sis/oem310.h b/drivers/video/fbdev/sis/oem310.h
index 8fce56e4482c..8fce56e4482c 100644
--- a/drivers/video/sis/oem310.h
+++ b/drivers/video/fbdev/sis/oem310.h
diff --git a/drivers/video/sis/sis.h b/drivers/video/fbdev/sis/sis.h
index 1987f1b7212f..1987f1b7212f 100644
--- a/drivers/video/sis/sis.h
+++ b/drivers/video/fbdev/sis/sis.h
diff --git a/drivers/video/sis/sis_accel.c b/drivers/video/fbdev/sis/sis_accel.c
index ceb434c95c0d..ceb434c95c0d 100644
--- a/drivers/video/sis/sis_accel.c
+++ b/drivers/video/fbdev/sis/sis_accel.c
diff --git a/drivers/video/sis/sis_accel.h b/drivers/video/fbdev/sis/sis_accel.h
index 30e03cdf6b85..30e03cdf6b85 100644
--- a/drivers/video/sis/sis_accel.h
+++ b/drivers/video/fbdev/sis/sis_accel.h
diff --git a/drivers/video/sis/sis_main.c b/drivers/video/fbdev/sis/sis_main.c
index 22ad028bf123..22ad028bf123 100644
--- a/drivers/video/sis/sis_main.c
+++ b/drivers/video/fbdev/sis/sis_main.c
diff --git a/drivers/video/sis/sis_main.h b/drivers/video/fbdev/sis/sis_main.h
index 32e23c209430..32e23c209430 100644
--- a/drivers/video/sis/sis_main.h
+++ b/drivers/video/fbdev/sis/sis_main.h
diff --git a/drivers/video/sis/vgatypes.h b/drivers/video/fbdev/sis/vgatypes.h
index e3f9976cfef0..e3f9976cfef0 100644
--- a/drivers/video/sis/vgatypes.h
+++ b/drivers/video/fbdev/sis/vgatypes.h
diff --git a/drivers/video/sis/vstruct.h b/drivers/video/fbdev/sis/vstruct.h
index ea94d214dcff..ea94d214dcff 100644
--- a/drivers/video/sis/vstruct.h
+++ b/drivers/video/fbdev/sis/vstruct.h
diff --git a/drivers/video/skeletonfb.c b/drivers/video/fbdev/skeletonfb.c
index fefde7c6add7..fefde7c6add7 100644
--- a/drivers/video/skeletonfb.c
+++ b/drivers/video/fbdev/skeletonfb.c
diff --git a/drivers/video/sm501fb.c b/drivers/video/fbdev/sm501fb.c
index 1501979099dc..1501979099dc 100644
--- a/drivers/video/sm501fb.c
+++ b/drivers/video/fbdev/sm501fb.c
diff --git a/drivers/video/smscufx.c b/drivers/video/fbdev/smscufx.c
index d513ed6a49f2..d513ed6a49f2 100644
--- a/drivers/video/smscufx.c
+++ b/drivers/video/fbdev/smscufx.c
diff --git a/drivers/video/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c
index f4daa59f0a80..f4daa59f0a80 100644
--- a/drivers/video/ssd1307fb.c
+++ b/drivers/video/fbdev/ssd1307fb.c
diff --git a/drivers/video/sstfb.c b/drivers/video/fbdev/sstfb.c
index f0cb279ef333..f0cb279ef333 100644
--- a/drivers/video/sstfb.c
+++ b/drivers/video/fbdev/sstfb.c
diff --git a/drivers/video/sticore.h b/drivers/video/fbdev/sticore.h
index af1619536ac8..af1619536ac8 100644
--- a/drivers/video/sticore.h
+++ b/drivers/video/fbdev/sticore.h
diff --git a/drivers/video/stifb.c b/drivers/video/fbdev/stifb.c
index cfe8a2f905c5..cfe8a2f905c5 100644
--- a/drivers/video/stifb.c
+++ b/drivers/video/fbdev/stifb.c
diff --git a/drivers/video/sunxvr1000.c b/drivers/video/fbdev/sunxvr1000.c
index 58241b47a96d..58241b47a96d 100644
--- a/drivers/video/sunxvr1000.c
+++ b/drivers/video/fbdev/sunxvr1000.c
diff --git a/drivers/video/sunxvr2500.c b/drivers/video/fbdev/sunxvr2500.c
index 843b6bab0483..843b6bab0483 100644
--- a/drivers/video/sunxvr2500.c
+++ b/drivers/video/fbdev/sunxvr2500.c
diff --git a/drivers/video/sunxvr500.c b/drivers/video/fbdev/sunxvr500.c
index 387350d004df..387350d004df 100644
--- a/drivers/video/sunxvr500.c
+++ b/drivers/video/fbdev/sunxvr500.c
diff --git a/drivers/video/tcx.c b/drivers/video/fbdev/tcx.c
index 7fb2d696fac7..7fb2d696fac7 100644
--- a/drivers/video/tcx.c
+++ b/drivers/video/fbdev/tcx.c
diff --git a/drivers/video/tdfxfb.c b/drivers/video/fbdev/tdfxfb.c
index f761fe375f5b..f761fe375f5b 100644
--- a/drivers/video/tdfxfb.c
+++ b/drivers/video/fbdev/tdfxfb.c
diff --git a/drivers/video/tgafb.c b/drivers/video/fbdev/tgafb.c
index 65ba9921506e..65ba9921506e 100644
--- a/drivers/video/tgafb.c
+++ b/drivers/video/fbdev/tgafb.c
diff --git a/drivers/video/tmiofb.c b/drivers/video/fbdev/tmiofb.c
index 7fb4e321a431..7fb4e321a431 100644
--- a/drivers/video/tmiofb.c
+++ b/drivers/video/fbdev/tmiofb.c
diff --git a/drivers/video/tridentfb.c b/drivers/video/fbdev/tridentfb.c
index 7ed9a227f5ea..7ed9a227f5ea 100644
--- a/drivers/video/tridentfb.c
+++ b/drivers/video/fbdev/tridentfb.c
diff --git a/drivers/video/udlfb.c b/drivers/video/fbdev/udlfb.c
index 77b890e4d296..77b890e4d296 100644
--- a/drivers/video/udlfb.c
+++ b/drivers/video/fbdev/udlfb.c
diff --git a/drivers/video/uvesafb.c b/drivers/video/fbdev/uvesafb.c
index 509d452e8f91..509d452e8f91 100644
--- a/drivers/video/uvesafb.c
+++ b/drivers/video/fbdev/uvesafb.c
diff --git a/drivers/video/valkyriefb.c b/drivers/video/fbdev/valkyriefb.c
index 97cb9bd1d1dd..97cb9bd1d1dd 100644
--- a/drivers/video/valkyriefb.c
+++ b/drivers/video/fbdev/valkyriefb.c
diff --git a/drivers/video/valkyriefb.h b/drivers/video/fbdev/valkyriefb.h
index d787441e5a42..d787441e5a42 100644
--- a/drivers/video/valkyriefb.h
+++ b/drivers/video/fbdev/valkyriefb.h
diff --git a/drivers/video/vermilion/Makefile b/drivers/video/fbdev/vermilion/Makefile
index cc21a656153d..cc21a656153d 100644
--- a/drivers/video/vermilion/Makefile
+++ b/drivers/video/fbdev/vermilion/Makefile
diff --git a/drivers/video/vermilion/cr_pll.c b/drivers/video/fbdev/vermilion/cr_pll.c
index ebc6e6e0dd0f..ebc6e6e0dd0f 100644
--- a/drivers/video/vermilion/cr_pll.c
+++ b/drivers/video/fbdev/vermilion/cr_pll.c
diff --git a/drivers/video/vermilion/vermilion.c b/drivers/video/fbdev/vermilion/vermilion.c
index 048a66640b03..048a66640b03 100644
--- a/drivers/video/vermilion/vermilion.c
+++ b/drivers/video/fbdev/vermilion/vermilion.c
diff --git a/drivers/video/vermilion/vermilion.h b/drivers/video/fbdev/vermilion/vermilion.h
index 43d11ec197fc..43d11ec197fc 100644
--- a/drivers/video/vermilion/vermilion.h
+++ b/drivers/video/fbdev/vermilion/vermilion.h
diff --git a/drivers/video/vesafb.c b/drivers/video/fbdev/vesafb.c
index 6170e7f58640..6170e7f58640 100644
--- a/drivers/video/vesafb.c
+++ b/drivers/video/fbdev/vesafb.c
diff --git a/drivers/video/vfb.c b/drivers/video/fbdev/vfb.c
index 70a897b1e458..70a897b1e458 100644
--- a/drivers/video/vfb.c
+++ b/drivers/video/fbdev/vfb.c
diff --git a/drivers/video/vga16fb.c b/drivers/video/fbdev/vga16fb.c
index 283d335a759f..283d335a759f 100644
--- a/drivers/video/vga16fb.c
+++ b/drivers/video/fbdev/vga16fb.c
diff --git a/drivers/video/via/Makefile b/drivers/video/fbdev/via/Makefile
index 159f26e6adb5..159f26e6adb5 100644
--- a/drivers/video/via/Makefile
+++ b/drivers/video/fbdev/via/Makefile
diff --git a/drivers/video/via/accel.c b/drivers/video/fbdev/via/accel.c
index 4b67b8e6030a..4b67b8e6030a 100644
--- a/drivers/video/via/accel.c
+++ b/drivers/video/fbdev/via/accel.c
diff --git a/drivers/video/via/accel.h b/drivers/video/fbdev/via/accel.h
index 79d5e10cc835..79d5e10cc835 100644
--- a/drivers/video/via/accel.h
+++ b/drivers/video/fbdev/via/accel.h
diff --git a/drivers/video/via/chip.h b/drivers/video/fbdev/via/chip.h
index d32a5076c20f..d32a5076c20f 100644
--- a/drivers/video/via/chip.h
+++ b/drivers/video/fbdev/via/chip.h
diff --git a/drivers/video/via/debug.h b/drivers/video/fbdev/via/debug.h
index 86eacc2017f3..86eacc2017f3 100644
--- a/drivers/video/via/debug.h
+++ b/drivers/video/fbdev/via/debug.h
diff --git a/drivers/video/via/dvi.c b/drivers/video/fbdev/via/dvi.c
index 7789553952d3..7789553952d3 100644
--- a/drivers/video/via/dvi.c
+++ b/drivers/video/fbdev/via/dvi.c
diff --git a/drivers/video/via/dvi.h b/drivers/video/fbdev/via/dvi.h
index 4c6bfba57d11..4c6bfba57d11 100644
--- a/drivers/video/via/dvi.h
+++ b/drivers/video/fbdev/via/dvi.h
diff --git a/drivers/video/via/global.c b/drivers/video/fbdev/via/global.c
index 3102171c1674..3102171c1674 100644
--- a/drivers/video/via/global.c
+++ b/drivers/video/fbdev/via/global.c
diff --git a/drivers/video/via/global.h b/drivers/video/fbdev/via/global.h
index 275dbbbd6b81..275dbbbd6b81 100644
--- a/drivers/video/via/global.h
+++ b/drivers/video/fbdev/via/global.h
diff --git a/drivers/video/via/hw.c b/drivers/video/fbdev/via/hw.c
index 22450908306c..22450908306c 100644
--- a/drivers/video/via/hw.c
+++ b/drivers/video/fbdev/via/hw.c
diff --git a/drivers/video/via/hw.h b/drivers/video/fbdev/via/hw.h
index 3be073c58b03..3be073c58b03 100644
--- a/drivers/video/via/hw.h
+++ b/drivers/video/fbdev/via/hw.h
diff --git a/drivers/video/via/ioctl.c b/drivers/video/fbdev/via/ioctl.c
index ea1c51428823..ea1c51428823 100644
--- a/drivers/video/via/ioctl.c
+++ b/drivers/video/fbdev/via/ioctl.c
diff --git a/drivers/video/via/ioctl.h b/drivers/video/fbdev/via/ioctl.h
index 6010d10b59e8..6010d10b59e8 100644
--- a/drivers/video/via/ioctl.h
+++ b/drivers/video/fbdev/via/ioctl.h
diff --git a/drivers/video/via/lcd.c b/drivers/video/fbdev/via/lcd.c
index 5d21ff436ec8..5d21ff436ec8 100644
--- a/drivers/video/via/lcd.c
+++ b/drivers/video/fbdev/via/lcd.c
diff --git a/drivers/video/via/lcd.h b/drivers/video/fbdev/via/lcd.h
index 5c988a063ad5..5c988a063ad5 100644
--- a/drivers/video/via/lcd.h
+++ b/drivers/video/fbdev/via/lcd.h
diff --git a/drivers/video/via/share.h b/drivers/video/fbdev/via/share.h
index 65c65c611e0a..65c65c611e0a 100644
--- a/drivers/video/via/share.h
+++ b/drivers/video/fbdev/via/share.h
diff --git a/drivers/video/via/tblDPASetting.c b/drivers/video/fbdev/via/tblDPASetting.c
index 73bb554e7c1e..73bb554e7c1e 100644
--- a/drivers/video/via/tblDPASetting.c
+++ b/drivers/video/fbdev/via/tblDPASetting.c
diff --git a/drivers/video/via/tblDPASetting.h b/drivers/video/fbdev/via/tblDPASetting.h
index 6db61519cb5d..6db61519cb5d 100644
--- a/drivers/video/via/tblDPASetting.h
+++ b/drivers/video/fbdev/via/tblDPASetting.h
diff --git a/drivers/video/via/via-core.c b/drivers/video/fbdev/via/via-core.c
index 6e274825fb31..6e274825fb31 100644
--- a/drivers/video/via/via-core.c
+++ b/drivers/video/fbdev/via/via-core.c
diff --git a/drivers/video/via/via-gpio.c b/drivers/video/fbdev/via/via-gpio.c
index e408679081ab..e408679081ab 100644
--- a/drivers/video/via/via-gpio.c
+++ b/drivers/video/fbdev/via/via-gpio.c
diff --git a/drivers/video/via/via_aux.c b/drivers/video/fbdev/via/via_aux.c
index 4a0a55cdac3d..4a0a55cdac3d 100644
--- a/drivers/video/via/via_aux.c
+++ b/drivers/video/fbdev/via/via_aux.c
diff --git a/drivers/video/via/via_aux.h b/drivers/video/fbdev/via/via_aux.h
index a8de3f038cea..a8de3f038cea 100644
--- a/drivers/video/via/via_aux.h
+++ b/drivers/video/fbdev/via/via_aux.h
diff --git a/drivers/video/via/via_aux_ch7301.c b/drivers/video/fbdev/via/via_aux_ch7301.c
index 1cbe5037a6b0..1cbe5037a6b0 100644
--- a/drivers/video/via/via_aux_ch7301.c
+++ b/drivers/video/fbdev/via/via_aux_ch7301.c
diff --git a/drivers/video/via/via_aux_edid.c b/drivers/video/fbdev/via/via_aux_edid.c
index 754d4509033f..754d4509033f 100644
--- a/drivers/video/via/via_aux_edid.c
+++ b/drivers/video/fbdev/via/via_aux_edid.c
diff --git a/drivers/video/via/via_aux_sii164.c b/drivers/video/fbdev/via/via_aux_sii164.c
index ca1b35f033b1..ca1b35f033b1 100644
--- a/drivers/video/via/via_aux_sii164.c
+++ b/drivers/video/fbdev/via/via_aux_sii164.c
diff --git a/drivers/video/via/via_aux_vt1621.c b/drivers/video/fbdev/via/via_aux_vt1621.c
index 38eca8479898..38eca8479898 100644
--- a/drivers/video/via/via_aux_vt1621.c
+++ b/drivers/video/fbdev/via/via_aux_vt1621.c
diff --git a/drivers/video/via/via_aux_vt1622.c b/drivers/video/fbdev/via/via_aux_vt1622.c
index 8c79c68ba683..8c79c68ba683 100644
--- a/drivers/video/via/via_aux_vt1622.c
+++ b/drivers/video/fbdev/via/via_aux_vt1622.c
diff --git a/drivers/video/via/via_aux_vt1625.c b/drivers/video/fbdev/via/via_aux_vt1625.c
index 03eb30165d36..03eb30165d36 100644
--- a/drivers/video/via/via_aux_vt1625.c
+++ b/drivers/video/fbdev/via/via_aux_vt1625.c
diff --git a/drivers/video/via/via_aux_vt1631.c b/drivers/video/fbdev/via/via_aux_vt1631.c
index 06e742f1f723..06e742f1f723 100644
--- a/drivers/video/via/via_aux_vt1631.c
+++ b/drivers/video/fbdev/via/via_aux_vt1631.c
diff --git a/drivers/video/via/via_aux_vt1632.c b/drivers/video/fbdev/via/via_aux_vt1632.c
index d24f4cd97401..d24f4cd97401 100644
--- a/drivers/video/via/via_aux_vt1632.c
+++ b/drivers/video/fbdev/via/via_aux_vt1632.c
diff --git a/drivers/video/via/via_aux_vt1636.c b/drivers/video/fbdev/via/via_aux_vt1636.c
index 9e015c101d4d..9e015c101d4d 100644
--- a/drivers/video/via/via_aux_vt1636.c
+++ b/drivers/video/fbdev/via/via_aux_vt1636.c
diff --git a/drivers/video/via/via_clock.c b/drivers/video/fbdev/via/via_clock.c
index db1e39277e32..db1e39277e32 100644
--- a/drivers/video/via/via_clock.c
+++ b/drivers/video/fbdev/via/via_clock.c
diff --git a/drivers/video/via/via_clock.h b/drivers/video/fbdev/via/via_clock.h
index 88714ae0d157..88714ae0d157 100644
--- a/drivers/video/via/via_clock.h
+++ b/drivers/video/fbdev/via/via_clock.h
diff --git a/drivers/video/via/via_i2c.c b/drivers/video/fbdev/via/via_i2c.c
index dd53058bbbb7..dd53058bbbb7 100644
--- a/drivers/video/via/via_i2c.c
+++ b/drivers/video/fbdev/via/via_i2c.c
diff --git a/drivers/video/via/via_modesetting.c b/drivers/video/fbdev/via/via_modesetting.c
index 0b414b09b9b4..0b414b09b9b4 100644
--- a/drivers/video/via/via_modesetting.c
+++ b/drivers/video/fbdev/via/via_modesetting.c
diff --git a/drivers/video/via/via_modesetting.h b/drivers/video/fbdev/via/via_modesetting.h
index f6a6503da3b3..f6a6503da3b3 100644
--- a/drivers/video/via/via_modesetting.h
+++ b/drivers/video/fbdev/via/via_modesetting.h
diff --git a/drivers/video/via/via_utility.c b/drivers/video/fbdev/via/via_utility.c
index 35458a5eadc8..35458a5eadc8 100644
--- a/drivers/video/via/via_utility.c
+++ b/drivers/video/fbdev/via/via_utility.c
diff --git a/drivers/video/via/via_utility.h b/drivers/video/fbdev/via/via_utility.h
index f23be1708c14..f23be1708c14 100644
--- a/drivers/video/via/via_utility.h
+++ b/drivers/video/fbdev/via/via_utility.h
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/fbdev/via/viafbdev.c
index 325c43c6ff97..325c43c6ff97 100644
--- a/drivers/video/via/viafbdev.c
+++ b/drivers/video/fbdev/via/viafbdev.c
diff --git a/drivers/video/via/viafbdev.h b/drivers/video/fbdev/via/viafbdev.h
index f6b2ddf56e94..f6b2ddf56e94 100644
--- a/drivers/video/via/viafbdev.h
+++ b/drivers/video/fbdev/via/viafbdev.h
diff --git a/drivers/video/via/viamode.c b/drivers/video/fbdev/via/viamode.c
index 0666ab01cf4a..0666ab01cf4a 100644
--- a/drivers/video/via/viamode.c
+++ b/drivers/video/fbdev/via/viamode.c
diff --git a/drivers/video/via/viamode.h b/drivers/video/fbdev/via/viamode.h
index dd19106698e7..dd19106698e7 100644
--- a/drivers/video/via/viamode.h
+++ b/drivers/video/fbdev/via/viamode.h
diff --git a/drivers/video/via/vt1636.c b/drivers/video/fbdev/via/vt1636.c
index ee2903b472cf..ee2903b472cf 100644
--- a/drivers/video/via/vt1636.c
+++ b/drivers/video/fbdev/via/vt1636.c
diff --git a/drivers/video/via/vt1636.h b/drivers/video/fbdev/via/vt1636.h
index 4c1314e57468..4c1314e57468 100644
--- a/drivers/video/via/vt1636.h
+++ b/drivers/video/fbdev/via/vt1636.h
diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/fbdev/vt8500lcdfb.c
index a8f2b280f796..a8f2b280f796 100644
--- a/drivers/video/vt8500lcdfb.c
+++ b/drivers/video/fbdev/vt8500lcdfb.c
diff --git a/drivers/video/vt8500lcdfb.h b/drivers/video/fbdev/vt8500lcdfb.h
index 36ca3ca09d83..36ca3ca09d83 100644
--- a/drivers/video/vt8500lcdfb.h
+++ b/drivers/video/fbdev/vt8500lcdfb.h
diff --git a/drivers/video/vt8623fb.c b/drivers/video/fbdev/vt8623fb.c
index 5c7cbc6c6236..5c7cbc6c6236 100644
--- a/drivers/video/vt8623fb.c
+++ b/drivers/video/fbdev/vt8623fb.c
diff --git a/drivers/video/w100fb.c b/drivers/video/fbdev/w100fb.c
index 10951c82f6ed..10951c82f6ed 100644
--- a/drivers/video/w100fb.c
+++ b/drivers/video/fbdev/w100fb.c
diff --git a/drivers/video/w100fb.h b/drivers/video/fbdev/w100fb.h
index fffae7b4f6e9..fffae7b4f6e9 100644
--- a/drivers/video/w100fb.h
+++ b/drivers/video/fbdev/w100fb.h
diff --git a/drivers/video/wm8505fb.c b/drivers/video/fbdev/wm8505fb.c
index 537d199612af..537d199612af 100644
--- a/drivers/video/wm8505fb.c
+++ b/drivers/video/fbdev/wm8505fb.c
diff --git a/drivers/video/wm8505fb_regs.h b/drivers/video/fbdev/wm8505fb_regs.h
index 4dd41668c6d1..4dd41668c6d1 100644
--- a/drivers/video/wm8505fb_regs.h
+++ b/drivers/video/fbdev/wm8505fb_regs.h
diff --git a/drivers/video/wmt_ge_rops.c b/drivers/video/fbdev/wmt_ge_rops.c
index b0a9f34b2e01..9df6fe78a44b 100644
--- a/drivers/video/wmt_ge_rops.c
+++ b/drivers/video/fbdev/wmt_ge_rops.c
@@ -18,7 +18,7 @@
18#include <linux/module.h> 18#include <linux/module.h>
19#include <linux/fb.h> 19#include <linux/fb.h>
20#include <linux/platform_device.h> 20#include <linux/platform_device.h>
21#include "fb_draw.h" 21#include "core/fb_draw.h"
22 22
23#define GE_COMMAND_OFF 0x00 23#define GE_COMMAND_OFF 0x00
24#define GE_DEPTH_OFF 0x04 24#define GE_DEPTH_OFF 0x04
diff --git a/drivers/video/wmt_ge_rops.h b/drivers/video/fbdev/wmt_ge_rops.h
index f73ec6377a46..f73ec6377a46 100644
--- a/drivers/video/wmt_ge_rops.h
+++ b/drivers/video/fbdev/wmt_ge_rops.h
diff --git a/drivers/video/xen-fbfront.c b/drivers/video/fbdev/xen-fbfront.c
index 901014bbc821..901014bbc821 100644
--- a/drivers/video/xen-fbfront.c
+++ b/drivers/video/fbdev/xen-fbfront.c
diff --git a/drivers/video/xilinxfb.c b/drivers/video/fbdev/xilinxfb.c
index 553cff2f3f4c..553cff2f3f4c 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/fbdev/xilinxfb.c
diff --git a/drivers/video/omap2/Kconfig b/drivers/video/omap2/Kconfig
deleted file mode 100644
index 63b23f87081d..000000000000
--- a/drivers/video/omap2/Kconfig
+++ /dev/null
@@ -1,10 +0,0 @@
1config OMAP2_VRFB
2 bool
3
4if ARCH_OMAP2PLUS
5
6source "drivers/video/omap2/dss/Kconfig"
7source "drivers/video/omap2/omapfb/Kconfig"
8source "drivers/video/omap2/displays-new/Kconfig"
9
10endif
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
index fc6c94c0b436..32f9236c959f 100644
--- a/drivers/xen/manage.c
+++ b/drivers/xen/manage.c
@@ -198,10 +198,32 @@ struct shutdown_handler {
198 void (*cb)(void); 198 void (*cb)(void);
199}; 199};
200 200
201static int poweroff_nb(struct notifier_block *cb, unsigned long code, void *unused)
202{
203 switch (code) {
204 case SYS_DOWN:
205 case SYS_HALT:
206 case SYS_POWER_OFF:
207 shutting_down = SHUTDOWN_POWEROFF;
208 default:
209 break;
210 }
211 return NOTIFY_DONE;
212}
201static void do_poweroff(void) 213static void do_poweroff(void)
202{ 214{
203 shutting_down = SHUTDOWN_POWEROFF; 215 switch (system_state) {
204 orderly_poweroff(false); 216 case SYSTEM_BOOTING:
217 orderly_poweroff(true);
218 break;
219 case SYSTEM_RUNNING:
220 orderly_poweroff(false);
221 break;
222 default:
223 /* Don't do it when we are halting/rebooting. */
224 pr_info("Ignoring Xen toolstack shutdown.\n");
225 break;
226 }
205} 227}
206 228
207static void do_reboot(void) 229static void do_reboot(void)
@@ -307,6 +329,10 @@ static struct xenbus_watch shutdown_watch = {
307 .callback = shutdown_handler 329 .callback = shutdown_handler
308}; 330};
309 331
332static struct notifier_block xen_reboot_nb = {
333 .notifier_call = poweroff_nb,
334};
335
310static int setup_shutdown_watcher(void) 336static int setup_shutdown_watcher(void)
311{ 337{
312 int err; 338 int err;
@@ -317,6 +343,7 @@ static int setup_shutdown_watcher(void)
317 return err; 343 return err;
318 } 344 }
319 345
346
320#ifdef CONFIG_MAGIC_SYSRQ 347#ifdef CONFIG_MAGIC_SYSRQ
321 err = register_xenbus_watch(&sysrq_watch); 348 err = register_xenbus_watch(&sysrq_watch);
322 if (err) { 349 if (err) {
@@ -345,6 +372,7 @@ int xen_setup_shutdown_event(void)
345 if (!xen_domain()) 372 if (!xen_domain())
346 return -ENODEV; 373 return -ENODEV;
347 register_xenstore_notifier(&xenstore_notifier); 374 register_xenstore_notifier(&xenstore_notifier);
375 register_reboot_notifier(&xen_reboot_nb);
348 376
349 return 0; 377 return 0;
350} 378}
diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
index 929dd46bb40c..607e41460c0d 100644
--- a/drivers/xen/xen-pciback/pciback_ops.c
+++ b/drivers/xen/xen-pciback/pciback_ops.c
@@ -217,7 +217,7 @@ int xen_pcibk_enable_msix(struct xen_pcibk_device *pdev,
217 if (result == 0) { 217 if (result == 0) {
218 for (i = 0; i < op->value; i++) { 218 for (i = 0; i < op->value; i++) {
219 op->msix_entries[i].entry = entries[i].entry; 219 op->msix_entries[i].entry = entries[i].entry;
220 if (entries[i].vector) 220 if (entries[i].vector) {
221 op->msix_entries[i].vector = 221 op->msix_entries[i].vector =
222 xen_pirq_from_irq(entries[i].vector); 222 xen_pirq_from_irq(entries[i].vector);
223 if (unlikely(verbose_request)) 223 if (unlikely(verbose_request))
@@ -225,6 +225,7 @@ int xen_pcibk_enable_msix(struct xen_pcibk_device *pdev,
225 "MSI-X[%d]: %d\n", 225 "MSI-X[%d]: %d\n",
226 pci_name(dev), i, 226 pci_name(dev), i,
227 op->msix_entries[i].vector); 227 op->msix_entries[i].vector);
228 }
228 } 229 }
229 } else 230 } else
230 pr_warn_ratelimited("%s: error enabling MSI-X for guest %u: err %d!\n", 231 pr_warn_ratelimited("%s: error enabling MSI-X for guest %u: err %d!\n",
diff --git a/drivers/xen/xen-pciback/vpci.c b/drivers/xen/xen-pciback/vpci.c
index 3165ce361b00..51afff96c515 100644
--- a/drivers/xen/xen-pciback/vpci.c
+++ b/drivers/xen/xen-pciback/vpci.c
@@ -137,6 +137,8 @@ unlock:
137 /* Publish this device. */ 137 /* Publish this device. */
138 if (!err) 138 if (!err)
139 err = publish_cb(pdev, 0, 0, PCI_DEVFN(slot, func), devid); 139 err = publish_cb(pdev, 0, 0, PCI_DEVFN(slot, func), devid);
140 else
141 kfree(dev_entry);
140 142
141out: 143out:
142 return err; 144 return err;
diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c
index b6d5fff43d16..ba804f3d8278 100644
--- a/drivers/xen/xenbus/xenbus_xs.c
+++ b/drivers/xen/xenbus/xenbus_xs.c
@@ -50,6 +50,7 @@
50#include <xen/xenbus.h> 50#include <xen/xenbus.h>
51#include <xen/xen.h> 51#include <xen/xen.h>
52#include "xenbus_comms.h" 52#include "xenbus_comms.h"
53#include "xenbus_probe.h"
53 54
54struct xs_stored_msg { 55struct xs_stored_msg {
55 struct list_head list; 56 struct list_head list;
@@ -139,6 +140,29 @@ static int get_error(const char *errorstring)
139 return xsd_errors[i].errnum; 140 return xsd_errors[i].errnum;
140} 141}
141 142
143static bool xenbus_ok(void)
144{
145 switch (xen_store_domain_type) {
146 case XS_LOCAL:
147 switch (system_state) {
148 case SYSTEM_POWER_OFF:
149 case SYSTEM_RESTART:
150 case SYSTEM_HALT:
151 return false;
152 default:
153 break;
154 }
155 return true;
156 case XS_PV:
157 case XS_HVM:
158 /* FIXME: Could check that the remote domain is alive,
159 * but it is normally initial domain. */
160 return true;
161 default:
162 break;
163 }
164 return false;
165}
142static void *read_reply(enum xsd_sockmsg_type *type, unsigned int *len) 166static void *read_reply(enum xsd_sockmsg_type *type, unsigned int *len)
143{ 167{
144 struct xs_stored_msg *msg; 168 struct xs_stored_msg *msg;
@@ -148,9 +172,20 @@ static void *read_reply(enum xsd_sockmsg_type *type, unsigned int *len)
148 172
149 while (list_empty(&xs_state.reply_list)) { 173 while (list_empty(&xs_state.reply_list)) {
150 spin_unlock(&xs_state.reply_lock); 174 spin_unlock(&xs_state.reply_lock);
151 /* XXX FIXME: Avoid synchronous wait for response here. */ 175 if (xenbus_ok())
152 wait_event(xs_state.reply_waitq, 176 /* XXX FIXME: Avoid synchronous wait for response here. */
153 !list_empty(&xs_state.reply_list)); 177 wait_event_timeout(xs_state.reply_waitq,
178 !list_empty(&xs_state.reply_list),
179 msecs_to_jiffies(500));
180 else {
181 /*
182 * If we are in the process of being shut-down there is
183 * no point of trying to contact XenBus - it is either
184 * killed (xenstored application) or the other domain
185 * has been killed or is unreachable.
186 */
187 return ERR_PTR(-EIO);
188 }
154 spin_lock(&xs_state.reply_lock); 189 spin_lock(&xs_state.reply_lock);
155 } 190 }
156 191
@@ -215,6 +250,9 @@ void *xenbus_dev_request_and_reply(struct xsd_sockmsg *msg)
215 250
216 mutex_unlock(&xs_state.request_mutex); 251 mutex_unlock(&xs_state.request_mutex);
217 252
253 if (IS_ERR(ret))
254 return ret;
255
218 if ((msg->type == XS_TRANSACTION_END) || 256 if ((msg->type == XS_TRANSACTION_END) ||
219 ((req_msg.type == XS_TRANSACTION_START) && 257 ((req_msg.type == XS_TRANSACTION_START) &&
220 (msg->type == XS_ERROR))) 258 (msg->type == XS_ERROR)))
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 75df77d09f75..0479c32c5eb1 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -1344,6 +1344,14 @@ __xfs_get_blocks(
1344 /* 1344 /*
1345 * If this is O_DIRECT or the mpage code calling tell them how large 1345 * If this is O_DIRECT or the mpage code calling tell them how large
1346 * the mapping is, so that we can avoid repeated get_blocks calls. 1346 * the mapping is, so that we can avoid repeated get_blocks calls.
1347 *
1348 * If the mapping spans EOF, then we have to break the mapping up as the
1349 * mapping for blocks beyond EOF must be marked new so that sub block
1350 * regions can be correctly zeroed. We can't do this for mappings within
1351 * EOF unless the mapping was just allocated or is unwritten, otherwise
1352 * the callers would overwrite existing data with zeros. Hence we have
1353 * to split the mapping into a range up to and including EOF, and a
1354 * second mapping for beyond EOF.
1347 */ 1355 */
1348 if (direct || size > (1 << inode->i_blkbits)) { 1356 if (direct || size > (1 << inode->i_blkbits)) {
1349 xfs_off_t mapping_size; 1357 xfs_off_t mapping_size;
@@ -1354,6 +1362,12 @@ __xfs_get_blocks(
1354 ASSERT(mapping_size > 0); 1362 ASSERT(mapping_size > 0);
1355 if (mapping_size > size) 1363 if (mapping_size > size)
1356 mapping_size = size; 1364 mapping_size = size;
1365 if (offset < i_size_read(inode) &&
1366 offset + mapping_size >= i_size_read(inode)) {
1367 /* limit mapping to block that spans EOF */
1368 mapping_size = roundup_64(i_size_read(inode) - offset,
1369 1 << inode->i_blkbits);
1370 }
1357 if (mapping_size > LONG_MAX) 1371 if (mapping_size > LONG_MAX)
1358 mapping_size = LONG_MAX; 1372 mapping_size = LONG_MAX;
1359 1373
@@ -1566,6 +1580,16 @@ xfs_vm_write_failed(
1566 1580
1567 xfs_vm_kill_delalloc_range(inode, block_offset, 1581 xfs_vm_kill_delalloc_range(inode, block_offset,
1568 block_offset + bh->b_size); 1582 block_offset + bh->b_size);
1583
1584 /*
1585 * This buffer does not contain data anymore. make sure anyone
1586 * who finds it knows that for certain.
1587 */
1588 clear_buffer_delay(bh);
1589 clear_buffer_uptodate(bh);
1590 clear_buffer_mapped(bh);
1591 clear_buffer_new(bh);
1592 clear_buffer_dirty(bh);
1569 } 1593 }
1570 1594
1571} 1595}
@@ -1599,12 +1623,21 @@ xfs_vm_write_begin(
1599 status = __block_write_begin(page, pos, len, xfs_get_blocks); 1623 status = __block_write_begin(page, pos, len, xfs_get_blocks);
1600 if (unlikely(status)) { 1624 if (unlikely(status)) {
1601 struct inode *inode = mapping->host; 1625 struct inode *inode = mapping->host;
1626 size_t isize = i_size_read(inode);
1602 1627
1603 xfs_vm_write_failed(inode, page, pos, len); 1628 xfs_vm_write_failed(inode, page, pos, len);
1604 unlock_page(page); 1629 unlock_page(page);
1605 1630
1606 if (pos + len > i_size_read(inode)) 1631 /*
1607 truncate_pagecache(inode, i_size_read(inode)); 1632 * If the write is beyond EOF, we only want to kill blocks
1633 * allocated in this write, not blocks that were previously
1634 * written successfully.
1635 */
1636 if (pos + len > isize) {
1637 ssize_t start = max_t(ssize_t, pos, isize);
1638
1639 truncate_pagecache_range(inode, start, pos + len);
1640 }
1608 1641
1609 page_cache_release(page); 1642 page_cache_release(page);
1610 page = NULL; 1643 page = NULL;
@@ -1615,9 +1648,12 @@ xfs_vm_write_begin(
1615} 1648}
1616 1649
1617/* 1650/*
1618 * On failure, we only need to kill delalloc blocks beyond EOF because they 1651 * On failure, we only need to kill delalloc blocks beyond EOF in the range of
1619 * will never be written. For blocks within EOF, generic_write_end() zeros them 1652 * this specific write because they will never be written. Previous writes
1620 * so they are safe to leave alone and be written with all the other valid data. 1653 * beyond EOF where block allocation succeeded do not need to be trashed, so
1654 * only new blocks from this write should be trashed. For blocks within
1655 * EOF, generic_write_end() zeros them so they are safe to leave alone and be
1656 * written with all the other valid data.
1621 */ 1657 */
1622STATIC int 1658STATIC int
1623xfs_vm_write_end( 1659xfs_vm_write_end(
@@ -1640,8 +1676,11 @@ xfs_vm_write_end(
1640 loff_t to = pos + len; 1676 loff_t to = pos + len;
1641 1677
1642 if (to > isize) { 1678 if (to > isize) {
1643 truncate_pagecache(inode, isize); 1679 /* only kill blocks in this write beyond EOF */
1680 if (pos > isize)
1681 isize = pos;
1644 xfs_vm_kill_delalloc_range(inode, isize, to); 1682 xfs_vm_kill_delalloc_range(inode, isize, to);
1683 truncate_pagecache_range(inode, isize, to);
1645 } 1684 }
1646 } 1685 }
1647 return ret; 1686 return ret;
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c
index 5b6092ef51ef..f0efc7e970ef 100644
--- a/fs/xfs/xfs_bmap.c
+++ b/fs/xfs/xfs_bmap.c
@@ -5413,6 +5413,7 @@ xfs_bmap_shift_extents(
5413 int whichfork = XFS_DATA_FORK; 5413 int whichfork = XFS_DATA_FORK;
5414 int logflags; 5414 int logflags;
5415 xfs_filblks_t blockcount = 0; 5415 xfs_filblks_t blockcount = 0;
5416 int total_extents;
5416 5417
5417 if (unlikely(XFS_TEST_ERROR( 5418 if (unlikely(XFS_TEST_ERROR(
5418 (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS && 5419 (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS &&
@@ -5429,7 +5430,6 @@ xfs_bmap_shift_extents(
5429 ASSERT(current_ext != NULL); 5430 ASSERT(current_ext != NULL);
5430 5431
5431 ifp = XFS_IFORK_PTR(ip, whichfork); 5432 ifp = XFS_IFORK_PTR(ip, whichfork);
5432
5433 if (!(ifp->if_flags & XFS_IFEXTENTS)) { 5433 if (!(ifp->if_flags & XFS_IFEXTENTS)) {
5434 /* Read in all the extents */ 5434 /* Read in all the extents */
5435 error = xfs_iread_extents(tp, ip, whichfork); 5435 error = xfs_iread_extents(tp, ip, whichfork);
@@ -5456,7 +5456,6 @@ xfs_bmap_shift_extents(
5456 5456
5457 /* We are going to change core inode */ 5457 /* We are going to change core inode */
5458 logflags = XFS_ILOG_CORE; 5458 logflags = XFS_ILOG_CORE;
5459
5460 if (ifp->if_flags & XFS_IFBROOT) { 5459 if (ifp->if_flags & XFS_IFBROOT) {
5461 cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork); 5460 cur = xfs_bmbt_init_cursor(mp, tp, ip, whichfork);
5462 cur->bc_private.b.firstblock = *firstblock; 5461 cur->bc_private.b.firstblock = *firstblock;
@@ -5467,8 +5466,14 @@ xfs_bmap_shift_extents(
5467 logflags |= XFS_ILOG_DEXT; 5466 logflags |= XFS_ILOG_DEXT;
5468 } 5467 }
5469 5468
5470 while (nexts++ < num_exts && 5469 /*
5471 *current_ext < XFS_IFORK_NEXTENTS(ip, whichfork)) { 5470 * There may be delalloc extents in the data fork before the range we
5471 * are collapsing out, so we cannot
5472 * use the count of real extents here. Instead we have to calculate it
5473 * from the incore fork.
5474 */
5475 total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
5476 while (nexts++ < num_exts && *current_ext < total_extents) {
5472 5477
5473 gotp = xfs_iext_get_ext(ifp, *current_ext); 5478 gotp = xfs_iext_get_ext(ifp, *current_ext);
5474 xfs_bmbt_get_all(gotp, &got); 5479 xfs_bmbt_get_all(gotp, &got);
@@ -5556,10 +5561,11 @@ xfs_bmap_shift_extents(
5556 } 5561 }
5557 5562
5558 (*current_ext)++; 5563 (*current_ext)++;
5564 total_extents = ifp->if_bytes / sizeof(xfs_bmbt_rec_t);
5559 } 5565 }
5560 5566
5561 /* Check if we are done */ 5567 /* Check if we are done */
5562 if (*current_ext == XFS_IFORK_NEXTENTS(ip, whichfork)) 5568 if (*current_ext == total_extents)
5563 *done = 1; 5569 *done = 1;
5564 5570
5565del_cursor: 5571del_cursor:
@@ -5568,6 +5574,5 @@ del_cursor:
5568 error ? XFS_BTREE_ERROR : XFS_BTREE_NOERROR); 5574 error ? XFS_BTREE_ERROR : XFS_BTREE_NOERROR);
5569 5575
5570 xfs_trans_log_inode(tp, ip, logflags); 5576 xfs_trans_log_inode(tp, ip, logflags);
5571
5572 return error; 5577 return error;
5573} 5578}
diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
index 01f6a646caa1..296160b8e78c 100644
--- a/fs/xfs/xfs_bmap_util.c
+++ b/fs/xfs/xfs_bmap_util.c
@@ -1418,6 +1418,8 @@ xfs_zero_file_space(
1418 xfs_off_t end_boundary; 1418 xfs_off_t end_boundary;
1419 int error; 1419 int error;
1420 1420
1421 trace_xfs_zero_file_space(ip);
1422
1421 granularity = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); 1423 granularity = max_t(uint, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE);
1422 1424
1423 /* 1425 /*
@@ -1432,9 +1434,18 @@ xfs_zero_file_space(
1432 ASSERT(end_boundary <= offset + len); 1434 ASSERT(end_boundary <= offset + len);
1433 1435
1434 if (start_boundary < end_boundary - 1) { 1436 if (start_boundary < end_boundary - 1) {
1435 /* punch out the page cache over the conversion range */ 1437 /*
1438 * punch out delayed allocation blocks and the page cache over
1439 * the conversion range
1440 */
1441 xfs_ilock(ip, XFS_ILOCK_EXCL);
1442 error = xfs_bmap_punch_delalloc_range(ip,
1443 XFS_B_TO_FSBT(mp, start_boundary),
1444 XFS_B_TO_FSB(mp, end_boundary - start_boundary));
1445 xfs_iunlock(ip, XFS_ILOCK_EXCL);
1436 truncate_pagecache_range(VFS_I(ip), start_boundary, 1446 truncate_pagecache_range(VFS_I(ip), start_boundary,
1437 end_boundary - 1); 1447 end_boundary - 1);
1448
1438 /* convert the blocks */ 1449 /* convert the blocks */
1439 error = xfs_alloc_file_space(ip, start_boundary, 1450 error = xfs_alloc_file_space(ip, start_boundary,
1440 end_boundary - start_boundary - 1, 1451 end_boundary - start_boundary - 1,
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
index 107f2fdfe41f..cb10a0aaab3a 100644
--- a/fs/xfs/xfs_buf.c
+++ b/fs/xfs/xfs_buf.c
@@ -1372,21 +1372,29 @@ xfs_buf_iorequest(
1372 xfs_buf_wait_unpin(bp); 1372 xfs_buf_wait_unpin(bp);
1373 xfs_buf_hold(bp); 1373 xfs_buf_hold(bp);
1374 1374
1375 /* Set the count to 1 initially, this will stop an I/O 1375 /*
1376 * Set the count to 1 initially, this will stop an I/O
1376 * completion callout which happens before we have started 1377 * completion callout which happens before we have started
1377 * all the I/O from calling xfs_buf_ioend too early. 1378 * all the I/O from calling xfs_buf_ioend too early.
1378 */ 1379 */
1379 atomic_set(&bp->b_io_remaining, 1); 1380 atomic_set(&bp->b_io_remaining, 1);
1380 _xfs_buf_ioapply(bp); 1381 _xfs_buf_ioapply(bp);
1381 _xfs_buf_ioend(bp, 1); 1382 /*
1383 * If _xfs_buf_ioapply failed, we'll get back here with
1384 * only the reference we took above. _xfs_buf_ioend will
1385 * drop it to zero, so we'd better not queue it for later,
1386 * or we'll free it before it's done.
1387 */
1388 _xfs_buf_ioend(bp, bp->b_error ? 0 : 1);
1382 1389
1383 xfs_buf_rele(bp); 1390 xfs_buf_rele(bp);
1384} 1391}
1385 1392
1386/* 1393/*
1387 * Waits for I/O to complete on the buffer supplied. It returns immediately if 1394 * Waits for I/O to complete on the buffer supplied. It returns immediately if
1388 * no I/O is pending or there is already a pending error on the buffer. It 1395 * no I/O is pending or there is already a pending error on the buffer, in which
1389 * returns the I/O error code, if any, or 0 if there was no error. 1396 * case nothing will ever complete. It returns the I/O error code, if any, or
1397 * 0 if there was no error.
1390 */ 1398 */
1391int 1399int
1392xfs_buf_iowait( 1400xfs_buf_iowait(
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index 79e96ce98733..82afdcb33183 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -679,7 +679,7 @@ xfs_file_dio_aio_write(
679 goto out; 679 goto out;
680 680
681 if (mapping->nrpages) { 681 if (mapping->nrpages) {
682 ret = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, 682 ret = filemap_write_and_wait_range(VFS_I(ip)->i_mapping,
683 pos, -1); 683 pos, -1);
684 if (ret) 684 if (ret)
685 goto out; 685 goto out;
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 5e7a38fa6ee6..768087bedbac 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -1334,7 +1334,8 @@ int
1334xfs_create_tmpfile( 1334xfs_create_tmpfile(
1335 struct xfs_inode *dp, 1335 struct xfs_inode *dp,
1336 struct dentry *dentry, 1336 struct dentry *dentry,
1337 umode_t mode) 1337 umode_t mode,
1338 struct xfs_inode **ipp)
1338{ 1339{
1339 struct xfs_mount *mp = dp->i_mount; 1340 struct xfs_mount *mp = dp->i_mount;
1340 struct xfs_inode *ip = NULL; 1341 struct xfs_inode *ip = NULL;
@@ -1402,7 +1403,6 @@ xfs_create_tmpfile(
1402 xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); 1403 xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp);
1403 1404
1404 ip->i_d.di_nlink--; 1405 ip->i_d.di_nlink--;
1405 d_tmpfile(dentry, VFS_I(ip));
1406 error = xfs_iunlink(tp, ip); 1406 error = xfs_iunlink(tp, ip);
1407 if (error) 1407 if (error)
1408 goto out_trans_abort; 1408 goto out_trans_abort;
@@ -1415,6 +1415,7 @@ xfs_create_tmpfile(
1415 xfs_qm_dqrele(gdqp); 1415 xfs_qm_dqrele(gdqp);
1416 xfs_qm_dqrele(pdqp); 1416 xfs_qm_dqrele(pdqp);
1417 1417
1418 *ipp = ip;
1418 return 0; 1419 return 0;
1419 1420
1420 out_trans_abort: 1421 out_trans_abort:
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
index 396cc1fafd0d..f2fcde52b66d 100644
--- a/fs/xfs/xfs_inode.h
+++ b/fs/xfs/xfs_inode.h
@@ -334,7 +334,7 @@ int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name,
334int xfs_create(struct xfs_inode *dp, struct xfs_name *name, 334int xfs_create(struct xfs_inode *dp, struct xfs_name *name,
335 umode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp); 335 umode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp);
336int xfs_create_tmpfile(struct xfs_inode *dp, struct dentry *dentry, 336int xfs_create_tmpfile(struct xfs_inode *dp, struct dentry *dentry,
337 umode_t mode); 337 umode_t mode, struct xfs_inode **ipp);
338int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, 338int xfs_remove(struct xfs_inode *dp, struct xfs_name *name,
339 struct xfs_inode *ip); 339 struct xfs_inode *ip);
340int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip, 340int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip,
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
index 89b07e43ca28..ef1ca010f417 100644
--- a/fs/xfs/xfs_iops.c
+++ b/fs/xfs/xfs_iops.c
@@ -1053,11 +1053,25 @@ xfs_vn_tmpfile(
1053 struct dentry *dentry, 1053 struct dentry *dentry,
1054 umode_t mode) 1054 umode_t mode)
1055{ 1055{
1056 int error; 1056 int error;
1057 struct xfs_inode *ip;
1058 struct inode *inode;
1057 1059
1058 error = xfs_create_tmpfile(XFS_I(dir), dentry, mode); 1060 error = xfs_create_tmpfile(XFS_I(dir), dentry, mode, &ip);
1061 if (unlikely(error))
1062 return -error;
1059 1063
1060 return -error; 1064 inode = VFS_I(ip);
1065
1066 error = xfs_init_security(inode, dir, &dentry->d_name);
1067 if (unlikely(error)) {
1068 iput(inode);
1069 return -error;
1070 }
1071
1072 d_tmpfile(dentry, inode);
1073
1074 return 0;
1061} 1075}
1062 1076
1063static const struct inode_operations xfs_inode_operations = { 1077static const struct inode_operations xfs_inode_operations = {
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
index 8497a00e399d..08624dc67317 100644
--- a/fs/xfs/xfs_log.c
+++ b/fs/xfs/xfs_log.c
@@ -1181,11 +1181,14 @@ xlog_iodone(xfs_buf_t *bp)
1181 /* log I/O is always issued ASYNC */ 1181 /* log I/O is always issued ASYNC */
1182 ASSERT(XFS_BUF_ISASYNC(bp)); 1182 ASSERT(XFS_BUF_ISASYNC(bp));
1183 xlog_state_done_syncing(iclog, aborted); 1183 xlog_state_done_syncing(iclog, aborted);
1184
1184 /* 1185 /*
1185 * do not reference the buffer (bp) here as we could race 1186 * drop the buffer lock now that we are done. Nothing references
1186 * with it being freed after writing the unmount record to the 1187 * the buffer after this, so an unmount waiting on this lock can now
1187 * log. 1188 * tear it down safely. As such, it is unsafe to reference the buffer
1189 * (bp) after the unlock as we could race with it being freed.
1188 */ 1190 */
1191 xfs_buf_unlock(bp);
1189} 1192}
1190 1193
1191/* 1194/*
@@ -1368,8 +1371,16 @@ xlog_alloc_log(
1368 bp = xfs_buf_alloc(mp->m_logdev_targp, 0, BTOBB(log->l_iclog_size), 0); 1371 bp = xfs_buf_alloc(mp->m_logdev_targp, 0, BTOBB(log->l_iclog_size), 0);
1369 if (!bp) 1372 if (!bp)
1370 goto out_free_log; 1373 goto out_free_log;
1371 bp->b_iodone = xlog_iodone; 1374
1375 /*
1376 * The iclogbuf buffer locks are held over IO but we are not going to do
1377 * IO yet. Hence unlock the buffer so that the log IO path can grab it
1378 * when appropriately.
1379 */
1372 ASSERT(xfs_buf_islocked(bp)); 1380 ASSERT(xfs_buf_islocked(bp));
1381 xfs_buf_unlock(bp);
1382
1383 bp->b_iodone = xlog_iodone;
1373 log->l_xbuf = bp; 1384 log->l_xbuf = bp;
1374 1385
1375 spin_lock_init(&log->l_icloglock); 1386 spin_lock_init(&log->l_icloglock);
@@ -1398,6 +1409,9 @@ xlog_alloc_log(
1398 if (!bp) 1409 if (!bp)
1399 goto out_free_iclog; 1410 goto out_free_iclog;
1400 1411
1412 ASSERT(xfs_buf_islocked(bp));
1413 xfs_buf_unlock(bp);
1414
1401 bp->b_iodone = xlog_iodone; 1415 bp->b_iodone = xlog_iodone;
1402 iclog->ic_bp = bp; 1416 iclog->ic_bp = bp;
1403 iclog->ic_data = bp->b_addr; 1417 iclog->ic_data = bp->b_addr;
@@ -1422,7 +1436,6 @@ xlog_alloc_log(
1422 iclog->ic_callback_tail = &(iclog->ic_callback); 1436 iclog->ic_callback_tail = &(iclog->ic_callback);
1423 iclog->ic_datap = (char *)iclog->ic_data + log->l_iclog_hsize; 1437 iclog->ic_datap = (char *)iclog->ic_data + log->l_iclog_hsize;
1424 1438
1425 ASSERT(xfs_buf_islocked(iclog->ic_bp));
1426 init_waitqueue_head(&iclog->ic_force_wait); 1439 init_waitqueue_head(&iclog->ic_force_wait);
1427 init_waitqueue_head(&iclog->ic_write_wait); 1440 init_waitqueue_head(&iclog->ic_write_wait);
1428 1441
@@ -1631,6 +1644,12 @@ xlog_cksum(
1631 * we transition the iclogs to IOERROR state *after* flushing all existing 1644 * we transition the iclogs to IOERROR state *after* flushing all existing
1632 * iclogs to disk. This is because we don't want anymore new transactions to be 1645 * iclogs to disk. This is because we don't want anymore new transactions to be
1633 * started or completed afterwards. 1646 * started or completed afterwards.
1647 *
1648 * We lock the iclogbufs here so that we can serialise against IO completion
1649 * during unmount. We might be processing a shutdown triggered during unmount,
1650 * and that can occur asynchronously to the unmount thread, and hence we need to
1651 * ensure that completes before tearing down the iclogbufs. Hence we need to
1652 * hold the buffer lock across the log IO to acheive that.
1634 */ 1653 */
1635STATIC int 1654STATIC int
1636xlog_bdstrat( 1655xlog_bdstrat(
@@ -1638,6 +1657,7 @@ xlog_bdstrat(
1638{ 1657{
1639 struct xlog_in_core *iclog = bp->b_fspriv; 1658 struct xlog_in_core *iclog = bp->b_fspriv;
1640 1659
1660 xfs_buf_lock(bp);
1641 if (iclog->ic_state & XLOG_STATE_IOERROR) { 1661 if (iclog->ic_state & XLOG_STATE_IOERROR) {
1642 xfs_buf_ioerror(bp, EIO); 1662 xfs_buf_ioerror(bp, EIO);
1643 xfs_buf_stale(bp); 1663 xfs_buf_stale(bp);
@@ -1645,7 +1665,8 @@ xlog_bdstrat(
1645 /* 1665 /*
1646 * It would seem logical to return EIO here, but we rely on 1666 * It would seem logical to return EIO here, but we rely on
1647 * the log state machine to propagate I/O errors instead of 1667 * the log state machine to propagate I/O errors instead of
1648 * doing it here. 1668 * doing it here. Similarly, IO completion will unlock the
1669 * buffer, so we don't do it here.
1649 */ 1670 */
1650 return 0; 1671 return 0;
1651 } 1672 }
@@ -1847,14 +1868,28 @@ xlog_dealloc_log(
1847 xlog_cil_destroy(log); 1868 xlog_cil_destroy(log);
1848 1869
1849 /* 1870 /*
1850 * always need to ensure that the extra buffer does not point to memory 1871 * Cycle all the iclogbuf locks to make sure all log IO completion
1851 * owned by another log buffer before we free it. 1872 * is done before we tear down these buffers.
1852 */ 1873 */
1874 iclog = log->l_iclog;
1875 for (i = 0; i < log->l_iclog_bufs; i++) {
1876 xfs_buf_lock(iclog->ic_bp);
1877 xfs_buf_unlock(iclog->ic_bp);
1878 iclog = iclog->ic_next;
1879 }
1880
1881 /*
1882 * Always need to ensure that the extra buffer does not point to memory
1883 * owned by another log buffer before we free it. Also, cycle the lock
1884 * first to ensure we've completed IO on it.
1885 */
1886 xfs_buf_lock(log->l_xbuf);
1887 xfs_buf_unlock(log->l_xbuf);
1853 xfs_buf_set_empty(log->l_xbuf, BTOBB(log->l_iclog_size)); 1888 xfs_buf_set_empty(log->l_xbuf, BTOBB(log->l_iclog_size));
1854 xfs_buf_free(log->l_xbuf); 1889 xfs_buf_free(log->l_xbuf);
1855 1890
1856 iclog = log->l_iclog; 1891 iclog = log->l_iclog;
1857 for (i=0; i<log->l_iclog_bufs; i++) { 1892 for (i = 0; i < log->l_iclog_bufs; i++) {
1858 xfs_buf_free(iclog->ic_bp); 1893 xfs_buf_free(iclog->ic_bp);
1859 next_iclog = iclog->ic_next; 1894 next_iclog = iclog->ic_next;
1860 kmem_free(iclog); 1895 kmem_free(iclog);
diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
index a4ae41c179a8..65d8c793a25c 100644
--- a/fs/xfs/xfs_trace.h
+++ b/fs/xfs/xfs_trace.h
@@ -603,6 +603,7 @@ DEFINE_INODE_EVENT(xfs_readlink);
603DEFINE_INODE_EVENT(xfs_inactive_symlink); 603DEFINE_INODE_EVENT(xfs_inactive_symlink);
604DEFINE_INODE_EVENT(xfs_alloc_file_space); 604DEFINE_INODE_EVENT(xfs_alloc_file_space);
605DEFINE_INODE_EVENT(xfs_free_file_space); 605DEFINE_INODE_EVENT(xfs_free_file_space);
606DEFINE_INODE_EVENT(xfs_zero_file_space);
606DEFINE_INODE_EVENT(xfs_collapse_file_space); 607DEFINE_INODE_EVENT(xfs_collapse_file_space);
607DEFINE_INODE_EVENT(xfs_readdir); 608DEFINE_INODE_EVENT(xfs_readdir);
608#ifdef CONFIG_XFS_POSIX_ACL 609#ifdef CONFIG_XFS_POSIX_ACL
diff --git a/include/linux/filter.h b/include/linux/filter.h
index 262dcbb75ffe..024fd03e5d18 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -220,7 +220,6 @@ enum {
220 BPF_S_ANC_RXHASH, 220 BPF_S_ANC_RXHASH,
221 BPF_S_ANC_CPU, 221 BPF_S_ANC_CPU,
222 BPF_S_ANC_ALU_XOR_X, 222 BPF_S_ANC_ALU_XOR_X,
223 BPF_S_ANC_SECCOMP_LD_W,
224 BPF_S_ANC_VLAN_TAG, 223 BPF_S_ANC_VLAN_TAG,
225 BPF_S_ANC_VLAN_TAG_PRESENT, 224 BPF_S_ANC_VLAN_TAG_PRESENT,
226 BPF_S_ANC_PAY_OFFSET, 225 BPF_S_ANC_PAY_OFFSET,
diff --git a/include/linux/ipmi.h b/include/linux/ipmi.h
index 1f9f56e28851..76d2acbfa7c6 100644
--- a/include/linux/ipmi.h
+++ b/include/linux/ipmi.h
@@ -237,7 +237,7 @@ int ipmi_set_maintenance_mode(ipmi_user_t user, int mode);
237 * The first user that sets this to TRUE will receive all events that 237 * The first user that sets this to TRUE will receive all events that
238 * have been queued while no one was waiting for events. 238 * have been queued while no one was waiting for events.
239 */ 239 */
240int ipmi_set_gets_events(ipmi_user_t user, int val); 240int ipmi_set_gets_events(ipmi_user_t user, bool val);
241 241
242/* 242/*
243 * Called when a new SMI is registered. This will also be called on 243 * Called when a new SMI is registered. This will also be called on
diff --git a/include/linux/ipmi_smi.h b/include/linux/ipmi_smi.h
index 8ea3fe0b9759..bd349240d50e 100644
--- a/include/linux/ipmi_smi.h
+++ b/include/linux/ipmi_smi.h
@@ -109,12 +109,19 @@ struct ipmi_smi_handlers {
109 events from the BMC we are attached to. */ 109 events from the BMC we are attached to. */
110 void (*request_events)(void *send_info); 110 void (*request_events)(void *send_info);
111 111
112 /* Called by the upper layer when some user requires that the
113 interface watch for events, received messages, watchdog
114 pretimeouts, or not. Used by the SMI to know if it should
115 watch for these. This may be NULL if the SMI does not
116 implement it. */
117 void (*set_need_watch)(void *send_info, bool enable);
118
112 /* Called when the interface should go into "run to 119 /* Called when the interface should go into "run to
113 completion" mode. If this call sets the value to true, the 120 completion" mode. If this call sets the value to true, the
114 interface should make sure that all messages are flushed 121 interface should make sure that all messages are flushed
115 out and that none are pending, and any new requests are run 122 out and that none are pending, and any new requests are run
116 to completion immediately. */ 123 to completion immediately. */
117 void (*set_run_to_completion)(void *send_info, int run_to_completion); 124 void (*set_run_to_completion)(void *send_info, bool run_to_completion);
118 125
119 /* Called to poll for work to do. This is so upper layers can 126 /* Called to poll for work to do. This is so upper layers can
120 poll for operations during things like crash dumps. */ 127 poll for operations during things like crash dumps. */
@@ -125,7 +132,7 @@ struct ipmi_smi_handlers {
125 setting. The message handler does the mode handling. Note 132 setting. The message handler does the mode handling. Note
126 that this is called from interrupt context, so it cannot 133 that this is called from interrupt context, so it cannot
127 block. */ 134 block. */
128 void (*set_maintenance_mode)(void *send_info, int enable); 135 void (*set_maintenance_mode)(void *send_info, bool enable);
129 136
130 /* Tell the handler that we are using it/not using it. The 137 /* Tell the handler that we are using it/not using it. The
131 message handler get the modules that this handler belongs 138 message handler get the modules that this handler belongs
diff --git a/include/linux/netfilter/nf_conntrack_proto_gre.h b/include/linux/netfilter/nf_conntrack_proto_gre.h
index ec2ffaf418c8..df78dc2b5524 100644
--- a/include/linux/netfilter/nf_conntrack_proto_gre.h
+++ b/include/linux/netfilter/nf_conntrack_proto_gre.h
@@ -87,7 +87,6 @@ int nf_ct_gre_keymap_add(struct nf_conn *ct, enum ip_conntrack_dir dir,
87/* delete keymap entries */ 87/* delete keymap entries */
88void nf_ct_gre_keymap_destroy(struct nf_conn *ct); 88void nf_ct_gre_keymap_destroy(struct nf_conn *ct);
89 89
90void nf_ct_gre_keymap_flush(struct net *net);
91void nf_nat_need_gre(void); 90void nf_nat_need_gre(void);
92 91
93#endif /* __KERNEL__ */ 92#endif /* __KERNEL__ */
diff --git a/include/linux/of.h b/include/linux/of.h
index 919bf211877d..3bad8d106e0e 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -374,6 +374,11 @@ static inline struct device_node *of_find_matching_node_and_match(
374 return NULL; 374 return NULL;
375} 375}
376 376
377static inline struct device_node *of_find_node_by_path(const char *path)
378{
379 return NULL;
380}
381
377static inline struct device_node *of_get_parent(const struct device_node *node) 382static inline struct device_node *of_get_parent(const struct device_node *node)
378{ 383{
379 return NULL; 384 return NULL;
diff --git a/include/linux/reboot.h b/include/linux/reboot.h
index 9e7db9e73cc1..48bf152761c7 100644
--- a/include/linux/reboot.h
+++ b/include/linux/reboot.h
@@ -20,13 +20,13 @@ enum reboot_mode {
20extern enum reboot_mode reboot_mode; 20extern enum reboot_mode reboot_mode;
21 21
22enum reboot_type { 22enum reboot_type {
23 BOOT_TRIPLE = 't', 23 BOOT_TRIPLE = 't',
24 BOOT_KBD = 'k', 24 BOOT_KBD = 'k',
25 BOOT_BIOS = 'b', 25 BOOT_BIOS = 'b',
26 BOOT_ACPI = 'a', 26 BOOT_ACPI = 'a',
27 BOOT_EFI = 'e', 27 BOOT_EFI = 'e',
28 BOOT_CF9 = 'p', 28 BOOT_CF9_FORCE = 'p',
29 BOOT_CF9_COND = 'q', 29 BOOT_CF9_SAFE = 'q',
30}; 30};
31extern enum reboot_type reboot_type; 31extern enum reboot_type reboot_type;
32 32
diff --git a/include/net/dst.h b/include/net/dst.h
index 46ed958e0c6e..71c60f42be48 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -45,7 +45,7 @@ struct dst_entry {
45 void *__pad1; 45 void *__pad1;
46#endif 46#endif
47 int (*input)(struct sk_buff *); 47 int (*input)(struct sk_buff *);
48 int (*output)(struct sk_buff *); 48 int (*output)(struct sock *sk, struct sk_buff *skb);
49 49
50 unsigned short flags; 50 unsigned short flags;
51#define DST_HOST 0x0001 51#define DST_HOST 0x0001
@@ -367,7 +367,11 @@ static inline struct dst_entry *skb_dst_pop(struct sk_buff *skb)
367 return child; 367 return child;
368} 368}
369 369
370int dst_discard(struct sk_buff *skb); 370int dst_discard_sk(struct sock *sk, struct sk_buff *skb);
371static inline int dst_discard(struct sk_buff *skb)
372{
373 return dst_discard_sk(skb->sk, skb);
374}
371void *dst_alloc(struct dst_ops *ops, struct net_device *dev, int initial_ref, 375void *dst_alloc(struct dst_ops *ops, struct net_device *dev, int initial_ref,
372 int initial_obsolete, unsigned short flags); 376 int initial_obsolete, unsigned short flags);
373void __dst_free(struct dst_entry *dst); 377void __dst_free(struct dst_entry *dst);
@@ -449,9 +453,13 @@ static inline void dst_set_expires(struct dst_entry *dst, int timeout)
449} 453}
450 454
451/* Output packet to network from transport. */ 455/* Output packet to network from transport. */
456static inline int dst_output_sk(struct sock *sk, struct sk_buff *skb)
457{
458 return skb_dst(skb)->output(sk, skb);
459}
452static inline int dst_output(struct sk_buff *skb) 460static inline int dst_output(struct sk_buff *skb)
453{ 461{
454 return skb_dst(skb)->output(skb); 462 return dst_output_sk(skb->sk, skb);
455} 463}
456 464
457/* Input packet from network to transport. */ 465/* Input packet from network to transport. */
diff --git a/include/net/inet6_connection_sock.h b/include/net/inet6_connection_sock.h
index f981ba7adeed..74af137304be 100644
--- a/include/net/inet6_connection_sock.h
+++ b/include/net/inet6_connection_sock.h
@@ -40,7 +40,7 @@ void inet6_csk_reqsk_queue_hash_add(struct sock *sk, struct request_sock *req,
40 40
41void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr); 41void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr);
42 42
43int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl); 43int inet6_csk_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl);
44 44
45struct dst_entry *inet6_csk_update_pmtu(struct sock *sk, u32 mtu); 45struct dst_entry *inet6_csk_update_pmtu(struct sock *sk, u32 mtu);
46#endif /* _INET6_CONNECTION_SOCK_H */ 46#endif /* _INET6_CONNECTION_SOCK_H */
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
index c55aeed41ace..7a4313887568 100644
--- a/include/net/inet_connection_sock.h
+++ b/include/net/inet_connection_sock.h
@@ -36,7 +36,7 @@ struct tcp_congestion_ops;
36 * (i.e. things that depend on the address family) 36 * (i.e. things that depend on the address family)
37 */ 37 */
38struct inet_connection_sock_af_ops { 38struct inet_connection_sock_af_ops {
39 int (*queue_xmit)(struct sk_buff *skb, struct flowi *fl); 39 int (*queue_xmit)(struct sock *sk, struct sk_buff *skb, struct flowi *fl);
40 void (*send_check)(struct sock *sk, struct sk_buff *skb); 40 void (*send_check)(struct sock *sk, struct sk_buff *skb);
41 int (*rebuild_header)(struct sock *sk); 41 int (*rebuild_header)(struct sock *sk);
42 void (*sk_rx_dst_set)(struct sock *sk, const struct sk_buff *skb); 42 void (*sk_rx_dst_set)(struct sock *sk, const struct sk_buff *skb);
diff --git a/include/net/ip.h b/include/net/ip.h
index 25064c28e059..3ec2b0fb9d83 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -104,14 +104,19 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt,
104 struct net_device *orig_dev); 104 struct net_device *orig_dev);
105int ip_local_deliver(struct sk_buff *skb); 105int ip_local_deliver(struct sk_buff *skb);
106int ip_mr_input(struct sk_buff *skb); 106int ip_mr_input(struct sk_buff *skb);
107int ip_output(struct sk_buff *skb); 107int ip_output(struct sock *sk, struct sk_buff *skb);
108int ip_mc_output(struct sk_buff *skb); 108int ip_mc_output(struct sock *sk, struct sk_buff *skb);
109int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)); 109int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *));
110int ip_do_nat(struct sk_buff *skb); 110int ip_do_nat(struct sk_buff *skb);
111void ip_send_check(struct iphdr *ip); 111void ip_send_check(struct iphdr *ip);
112int __ip_local_out(struct sk_buff *skb); 112int __ip_local_out(struct sk_buff *skb);
113int ip_local_out(struct sk_buff *skb); 113int ip_local_out_sk(struct sock *sk, struct sk_buff *skb);
114int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl); 114static inline int ip_local_out(struct sk_buff *skb)
115{
116 return ip_local_out_sk(skb->sk, skb);
117}
118
119int ip_queue_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl);
115void ip_init(void); 120void ip_init(void);
116int ip_append_data(struct sock *sk, struct flowi4 *fl4, 121int ip_append_data(struct sock *sk, struct flowi4 *fl4,
117 int getfrag(void *from, char *to, int offset, int len, 122 int getfrag(void *from, char *to, int offset, int len,
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index 3c3bb184eb8f..6c4f5eac98e7 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -32,6 +32,11 @@ struct route_info {
32#define RT6_LOOKUP_F_SRCPREF_PUBLIC 0x00000010 32#define RT6_LOOKUP_F_SRCPREF_PUBLIC 0x00000010
33#define RT6_LOOKUP_F_SRCPREF_COA 0x00000020 33#define RT6_LOOKUP_F_SRCPREF_COA 0x00000020
34 34
35/* We do not (yet ?) support IPv6 jumbograms (RFC 2675)
36 * Unlike IPv4, hdr->seg_len doesn't include the IPv6 header
37 */
38#define IP6_MAX_MTU (0xFFFF + sizeof(struct ipv6hdr))
39
35/* 40/*
36 * rt6_srcprefs2flags() and rt6_flags2srcprefs() translate 41 * rt6_srcprefs2flags() and rt6_flags2srcprefs() translate
37 * between IPV6_ADDR_PREFERENCES socket option values 42 * between IPV6_ADDR_PREFERENCES socket option values
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
index e77c10405d51..a4daf9eb8562 100644
--- a/include/net/ip_tunnels.h
+++ b/include/net/ip_tunnels.h
@@ -153,7 +153,7 @@ static inline u8 ip_tunnel_ecn_encap(u8 tos, const struct iphdr *iph,
153} 153}
154 154
155int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_proto); 155int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_proto);
156int iptunnel_xmit(struct rtable *rt, struct sk_buff *skb, 156int iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb,
157 __be32 src, __be32 dst, __u8 proto, 157 __be32 src, __be32 dst, __u8 proto,
158 __u8 tos, __u8 ttl, __be16 df, bool xnet); 158 __u8 tos, __u8 ttl, __be16 df, bool xnet);
159 159
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index 4f541f11ce63..d640925bc454 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -731,7 +731,7 @@ struct dst_entry *ip6_blackhole_route(struct net *net,
731 * skb processing functions 731 * skb processing functions
732 */ 732 */
733 733
734int ip6_output(struct sk_buff *skb); 734int ip6_output(struct sock *sk, struct sk_buff *skb);
735int ip6_forward(struct sk_buff *skb); 735int ip6_forward(struct sk_buff *skb);
736int ip6_input(struct sk_buff *skb); 736int ip6_input(struct sk_buff *skb);
737int ip6_mc_input(struct sk_buff *skb); 737int ip6_mc_input(struct sk_buff *skb);
diff --git a/include/net/netfilter/nf_tables_core.h b/include/net/netfilter/nf_tables_core.h
index cf2b7ae2b9d8..a75fc8e27cd6 100644
--- a/include/net/netfilter/nf_tables_core.h
+++ b/include/net/netfilter/nf_tables_core.h
@@ -13,6 +13,16 @@ struct nft_cmp_fast_expr {
13 u8 len; 13 u8 len;
14}; 14};
15 15
16/* Calculate the mask for the nft_cmp_fast expression. On big endian the
17 * mask needs to include the *upper* bytes when interpreting that data as
18 * something smaller than the full u32, therefore a cpu_to_le32 is done.
19 */
20static inline u32 nft_cmp_fast_mask(unsigned int len)
21{
22 return cpu_to_le32(~0U >> (FIELD_SIZEOF(struct nft_cmp_fast_expr,
23 data) * BITS_PER_BYTE - len));
24}
25
16extern const struct nft_expr_ops nft_cmp_fast_ops; 26extern const struct nft_expr_ops nft_cmp_fast_ops;
17 27
18int nft_cmp_module_init(void); 28int nft_cmp_module_init(void);
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 6ee76c804893..d992ca3145fe 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1653,6 +1653,17 @@ struct sctp_association {
1653 /* This is the last advertised value of rwnd over a SACK chunk. */ 1653 /* This is the last advertised value of rwnd over a SACK chunk. */
1654 __u32 a_rwnd; 1654 __u32 a_rwnd;
1655 1655
1656 /* Number of bytes by which the rwnd has slopped. The rwnd is allowed
1657 * to slop over a maximum of the association's frag_point.
1658 */
1659 __u32 rwnd_over;
1660
1661 /* Keeps treack of rwnd pressure. This happens when we have
1662 * a window, but not recevie buffer (i.e small packets). This one
1663 * is releases slowly (1 PMTU at a time ).
1664 */
1665 __u32 rwnd_press;
1666
1656 /* This is the sndbuf size in use for the association. 1667 /* This is the sndbuf size in use for the association.
1657 * This corresponds to the sndbuf size for the association, 1668 * This corresponds to the sndbuf size for the association,
1658 * as specified in the sk->sndbuf. 1669 * as specified in the sk->sndbuf.
@@ -1881,7 +1892,8 @@ void sctp_assoc_update(struct sctp_association *old,
1881__u32 sctp_association_get_next_tsn(struct sctp_association *); 1892__u32 sctp_association_get_next_tsn(struct sctp_association *);
1882 1893
1883void sctp_assoc_sync_pmtu(struct sock *, struct sctp_association *); 1894void sctp_assoc_sync_pmtu(struct sock *, struct sctp_association *);
1884void sctp_assoc_rwnd_update(struct sctp_association *, bool); 1895void sctp_assoc_rwnd_increase(struct sctp_association *, unsigned int);
1896void sctp_assoc_rwnd_decrease(struct sctp_association *, unsigned int);
1885void sctp_assoc_set_primary(struct sctp_association *, 1897void sctp_assoc_set_primary(struct sctp_association *,
1886 struct sctp_transport *); 1898 struct sctp_transport *);
1887void sctp_assoc_del_nonprimary_peers(struct sctp_association *, 1899void sctp_assoc_del_nonprimary_peers(struct sctp_association *,
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 32682ae47b3f..116e9c7e19cb 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -333,7 +333,7 @@ struct xfrm_state_afinfo {
333 const xfrm_address_t *saddr); 333 const xfrm_address_t *saddr);
334 int (*tmpl_sort)(struct xfrm_tmpl **dst, struct xfrm_tmpl **src, int n); 334 int (*tmpl_sort)(struct xfrm_tmpl **dst, struct xfrm_tmpl **src, int n);
335 int (*state_sort)(struct xfrm_state **dst, struct xfrm_state **src, int n); 335 int (*state_sort)(struct xfrm_state **dst, struct xfrm_state **src, int n);
336 int (*output)(struct sk_buff *skb); 336 int (*output)(struct sock *sk, struct sk_buff *skb);
337 int (*output_finish)(struct sk_buff *skb); 337 int (*output_finish)(struct sk_buff *skb);
338 int (*extract_input)(struct xfrm_state *x, 338 int (*extract_input)(struct xfrm_state *x,
339 struct sk_buff *skb); 339 struct sk_buff *skb);
@@ -1540,7 +1540,7 @@ static inline int xfrm4_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi)
1540 1540
1541int xfrm4_extract_output(struct xfrm_state *x, struct sk_buff *skb); 1541int xfrm4_extract_output(struct xfrm_state *x, struct sk_buff *skb);
1542int xfrm4_prepare_output(struct xfrm_state *x, struct sk_buff *skb); 1542int xfrm4_prepare_output(struct xfrm_state *x, struct sk_buff *skb);
1543int xfrm4_output(struct sk_buff *skb); 1543int xfrm4_output(struct sock *sk, struct sk_buff *skb);
1544int xfrm4_output_finish(struct sk_buff *skb); 1544int xfrm4_output_finish(struct sk_buff *skb);
1545int xfrm4_rcv_cb(struct sk_buff *skb, u8 protocol, int err); 1545int xfrm4_rcv_cb(struct sk_buff *skb, u8 protocol, int err);
1546int xfrm4_protocol_register(struct xfrm4_protocol *handler, unsigned char protocol); 1546int xfrm4_protocol_register(struct xfrm4_protocol *handler, unsigned char protocol);
@@ -1565,7 +1565,7 @@ __be32 xfrm6_tunnel_alloc_spi(struct net *net, xfrm_address_t *saddr);
1565__be32 xfrm6_tunnel_spi_lookup(struct net *net, const xfrm_address_t *saddr); 1565__be32 xfrm6_tunnel_spi_lookup(struct net *net, const xfrm_address_t *saddr);
1566int xfrm6_extract_output(struct xfrm_state *x, struct sk_buff *skb); 1566int xfrm6_extract_output(struct xfrm_state *x, struct sk_buff *skb);
1567int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb); 1567int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb);
1568int xfrm6_output(struct sk_buff *skb); 1568int xfrm6_output(struct sock *sk, struct sk_buff *skb);
1569int xfrm6_output_finish(struct sk_buff *skb); 1569int xfrm6_output_finish(struct sk_buff *skb);
1570int xfrm6_find_1stfragopt(struct xfrm_state *x, struct sk_buff *skb, 1570int xfrm6_find_1stfragopt(struct xfrm_state *x, struct sk_buff *skb,
1571 u8 **prevhdr); 1571 u8 **prevhdr);
diff --git a/kernel/locking/mutex-debug.c b/kernel/locking/mutex-debug.c
index e1191c996c59..5cf6731b98e9 100644
--- a/kernel/locking/mutex-debug.c
+++ b/kernel/locking/mutex-debug.c
@@ -71,18 +71,17 @@ void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
71 71
72void debug_mutex_unlock(struct mutex *lock) 72void debug_mutex_unlock(struct mutex *lock)
73{ 73{
74 if (unlikely(!debug_locks)) 74 if (likely(debug_locks)) {
75 return; 75 DEBUG_LOCKS_WARN_ON(lock->magic != lock);
76 76
77 DEBUG_LOCKS_WARN_ON(lock->magic != lock); 77 if (!lock->owner)
78 DEBUG_LOCKS_WARN_ON(!lock->owner);
79 else
80 DEBUG_LOCKS_WARN_ON(lock->owner != current);
78 81
79 if (!lock->owner) 82 DEBUG_LOCKS_WARN_ON(!lock->wait_list.prev && !lock->wait_list.next);
80 DEBUG_LOCKS_WARN_ON(!lock->owner); 83 mutex_clear_owner(lock);
81 else 84 }
82 DEBUG_LOCKS_WARN_ON(lock->owner != current);
83
84 DEBUG_LOCKS_WARN_ON(!lock->wait_list.prev && !lock->wait_list.next);
85 mutex_clear_owner(lock);
86 85
87 /* 86 /*
88 * __mutex_slowpath_needs_to_unlock() is explicitly 0 for debug 87 * __mutex_slowpath_needs_to_unlock() is explicitly 0 for debug
diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index d8d046c0726a..590c37925084 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -69,18 +69,17 @@ static void populate_seccomp_data(struct seccomp_data *sd)
69{ 69{
70 struct task_struct *task = current; 70 struct task_struct *task = current;
71 struct pt_regs *regs = task_pt_regs(task); 71 struct pt_regs *regs = task_pt_regs(task);
72 unsigned long args[6];
72 73
73 sd->nr = syscall_get_nr(task, regs); 74 sd->nr = syscall_get_nr(task, regs);
74 sd->arch = syscall_get_arch(); 75 sd->arch = syscall_get_arch();
75 76 syscall_get_arguments(task, regs, 0, 6, args);
76 /* Unroll syscall_get_args to help gcc on arm. */ 77 sd->args[0] = args[0];
77 syscall_get_arguments(task, regs, 0, 1, (unsigned long *) &sd->args[0]); 78 sd->args[1] = args[1];
78 syscall_get_arguments(task, regs, 1, 1, (unsigned long *) &sd->args[1]); 79 sd->args[2] = args[2];
79 syscall_get_arguments(task, regs, 2, 1, (unsigned long *) &sd->args[2]); 80 sd->args[3] = args[3];
80 syscall_get_arguments(task, regs, 3, 1, (unsigned long *) &sd->args[3]); 81 sd->args[4] = args[4];
81 syscall_get_arguments(task, regs, 4, 1, (unsigned long *) &sd->args[4]); 82 sd->args[5] = args[5];
82 syscall_get_arguments(task, regs, 5, 1, (unsigned long *) &sd->args[5]);
83
84 sd->instruction_pointer = KSTK_EIP(task); 83 sd->instruction_pointer = KSTK_EIP(task);
85} 84}
86 85
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
index 015661279b68..0a0608edeb26 100644
--- a/kernel/time/tick-common.c
+++ b/kernel/time/tick-common.c
@@ -276,7 +276,7 @@ static bool tick_check_preferred(struct clock_event_device *curdev,
276bool tick_check_replacement(struct clock_event_device *curdev, 276bool tick_check_replacement(struct clock_event_device *curdev,
277 struct clock_event_device *newdev) 277 struct clock_event_device *newdev)
278{ 278{
279 if (tick_check_percpu(curdev, newdev, smp_processor_id())) 279 if (!tick_check_percpu(curdev, newdev, smp_processor_id()))
280 return false; 280 return false;
281 281
282 return tick_check_preferred(curdev, newdev); 282 return tick_check_preferred(curdev, newdev);
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 9f8af69c67ec..6558b7ac112d 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -84,6 +84,9 @@ static void tick_do_update_jiffies64(ktime_t now)
84 84
85 /* Keep the tick_next_period variable up to date */ 85 /* Keep the tick_next_period variable up to date */
86 tick_next_period = ktime_add(last_jiffies_update, tick_period); 86 tick_next_period = ktime_add(last_jiffies_update, tick_period);
87 } else {
88 write_sequnlock(&jiffies_lock);
89 return;
87 } 90 }
88 write_sequnlock(&jiffies_lock); 91 write_sequnlock(&jiffies_lock);
89 update_wall_time(); 92 update_wall_time();
@@ -967,7 +970,7 @@ static void tick_nohz_switch_to_nohz(void)
967 struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched); 970 struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
968 ktime_t next; 971 ktime_t next;
969 972
970 if (!tick_nohz_active) 973 if (!tick_nohz_enabled)
971 return; 974 return;
972 975
973 local_irq_disable(); 976 local_irq_disable();
diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c
index 5b781d2be383..ffd56351b521 100644
--- a/kernel/trace/trace_functions.c
+++ b/kernel/trace/trace_functions.c
@@ -58,12 +58,16 @@ int ftrace_create_function_files(struct trace_array *tr,
58{ 58{
59 int ret; 59 int ret;
60 60
61 /* The top level array uses the "global_ops". */ 61 /*
62 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL)) { 62 * The top level array uses the "global_ops", and the files are
63 ret = allocate_ftrace_ops(tr); 63 * created on boot up.
64 if (ret) 64 */
65 return ret; 65 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
66 } 66 return 0;
67
68 ret = allocate_ftrace_ops(tr);
69 if (ret)
70 return ret;
67 71
68 ftrace_create_filter_files(tr->ops, parent); 72 ftrace_create_filter_files(tr->ops, parent);
69 73
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
index 930e51462dc8..c082a7441345 100644
--- a/kernel/trace/trace_uprobe.c
+++ b/kernel/trace/trace_uprobe.c
@@ -732,9 +732,15 @@ static int uprobe_buffer_enable(void)
732 732
733static void uprobe_buffer_disable(void) 733static void uprobe_buffer_disable(void)
734{ 734{
735 int cpu;
736
735 BUG_ON(!mutex_is_locked(&event_mutex)); 737 BUG_ON(!mutex_is_locked(&event_mutex));
736 738
737 if (--uprobe_buffer_refcnt == 0) { 739 if (--uprobe_buffer_refcnt == 0) {
740 for_each_possible_cpu(cpu)
741 free_page((unsigned long)per_cpu_ptr(uprobe_cpu_buffer,
742 cpu)->buf);
743
738 free_percpu(uprobe_cpu_buffer); 744 free_percpu(uprobe_cpu_buffer);
739 uprobe_cpu_buffer = NULL; 745 uprobe_cpu_buffer = NULL;
740 } 746 }
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
index 0d8f6023fd8d..bf71b4b2d632 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -152,7 +152,7 @@ static u32 map_id_range_down(struct uid_gid_map *map, u32 id, u32 count)
152 152
153 /* Find the matching extent */ 153 /* Find the matching extent */
154 extents = map->nr_extents; 154 extents = map->nr_extents;
155 smp_read_barrier_depends(); 155 smp_rmb();
156 for (idx = 0; idx < extents; idx++) { 156 for (idx = 0; idx < extents; idx++) {
157 first = map->extent[idx].first; 157 first = map->extent[idx].first;
158 last = first + map->extent[idx].count - 1; 158 last = first + map->extent[idx].count - 1;
@@ -176,7 +176,7 @@ static u32 map_id_down(struct uid_gid_map *map, u32 id)
176 176
177 /* Find the matching extent */ 177 /* Find the matching extent */
178 extents = map->nr_extents; 178 extents = map->nr_extents;
179 smp_read_barrier_depends(); 179 smp_rmb();
180 for (idx = 0; idx < extents; idx++) { 180 for (idx = 0; idx < extents; idx++) {
181 first = map->extent[idx].first; 181 first = map->extent[idx].first;
182 last = first + map->extent[idx].count - 1; 182 last = first + map->extent[idx].count - 1;
@@ -199,7 +199,7 @@ static u32 map_id_up(struct uid_gid_map *map, u32 id)
199 199
200 /* Find the matching extent */ 200 /* Find the matching extent */
201 extents = map->nr_extents; 201 extents = map->nr_extents;
202 smp_read_barrier_depends(); 202 smp_rmb();
203 for (idx = 0; idx < extents; idx++) { 203 for (idx = 0; idx < extents; idx++) {
204 first = map->extent[idx].lower_first; 204 first = map->extent[idx].lower_first;
205 last = first + map->extent[idx].count - 1; 205 last = first + map->extent[idx].count - 1;
@@ -615,9 +615,8 @@ static ssize_t map_write(struct file *file, const char __user *buf,
615 * were written before the count of the extents. 615 * were written before the count of the extents.
616 * 616 *
617 * To achieve this smp_wmb() is used on guarantee the write 617 * To achieve this smp_wmb() is used on guarantee the write
618 * order and smp_read_barrier_depends() is guaranteed that we 618 * order and smp_rmb() is guaranteed that we don't have crazy
619 * don't have crazy architectures returning stale data. 619 * architectures returning stale data.
620 *
621 */ 620 */
622 mutex_lock(&id_map_mutex); 621 mutex_lock(&id_map_mutex);
623 622
diff --git a/net/core/dev.c b/net/core/dev.c
index 14dac0654f28..5b3042e69f85 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2284,7 +2284,7 @@ EXPORT_SYMBOL(skb_checksum_help);
2284__be16 skb_network_protocol(struct sk_buff *skb, int *depth) 2284__be16 skb_network_protocol(struct sk_buff *skb, int *depth)
2285{ 2285{
2286 __be16 type = skb->protocol; 2286 __be16 type = skb->protocol;
2287 int vlan_depth = ETH_HLEN; 2287 int vlan_depth = skb->mac_len;
2288 2288
2289 /* Tunnel gso handlers can set protocol to ethernet. */ 2289 /* Tunnel gso handlers can set protocol to ethernet. */
2290 if (type == htons(ETH_P_TEB)) { 2290 if (type == htons(ETH_P_TEB)) {
diff --git a/net/core/dst.c b/net/core/dst.c
index ca4231ec7347..80d6286c8b62 100644
--- a/net/core/dst.c
+++ b/net/core/dst.c
@@ -142,12 +142,12 @@ loop:
142 mutex_unlock(&dst_gc_mutex); 142 mutex_unlock(&dst_gc_mutex);
143} 143}
144 144
145int dst_discard(struct sk_buff *skb) 145int dst_discard_sk(struct sock *sk, struct sk_buff *skb)
146{ 146{
147 kfree_skb(skb); 147 kfree_skb(skb);
148 return 0; 148 return 0;
149} 149}
150EXPORT_SYMBOL(dst_discard); 150EXPORT_SYMBOL(dst_discard_sk);
151 151
152const u32 dst_default_metrics[RTAX_MAX + 1] = { 152const u32 dst_default_metrics[RTAX_MAX + 1] = {
153 /* This initializer is needed to force linker to place this variable 153 /* This initializer is needed to force linker to place this variable
@@ -184,7 +184,7 @@ void *dst_alloc(struct dst_ops *ops, struct net_device *dev,
184 dst->xfrm = NULL; 184 dst->xfrm = NULL;
185#endif 185#endif
186 dst->input = dst_discard; 186 dst->input = dst_discard;
187 dst->output = dst_discard; 187 dst->output = dst_discard_sk;
188 dst->error = 0; 188 dst->error = 0;
189 dst->obsolete = initial_obsolete; 189 dst->obsolete = initial_obsolete;
190 dst->header_len = 0; 190 dst->header_len = 0;
@@ -209,8 +209,10 @@ static void ___dst_free(struct dst_entry *dst)
209 /* The first case (dev==NULL) is required, when 209 /* The first case (dev==NULL) is required, when
210 protocol module is unloaded. 210 protocol module is unloaded.
211 */ 211 */
212 if (dst->dev == NULL || !(dst->dev->flags&IFF_UP)) 212 if (dst->dev == NULL || !(dst->dev->flags&IFF_UP)) {
213 dst->input = dst->output = dst_discard; 213 dst->input = dst_discard;
214 dst->output = dst_discard_sk;
215 }
214 dst->obsolete = DST_OBSOLETE_DEAD; 216 dst->obsolete = DST_OBSOLETE_DEAD;
215} 217}
216 218
@@ -361,7 +363,8 @@ static void dst_ifdown(struct dst_entry *dst, struct net_device *dev,
361 return; 363 return;
362 364
363 if (!unregister) { 365 if (!unregister) {
364 dst->input = dst->output = dst_discard; 366 dst->input = dst_discard;
367 dst->output = dst_discard_sk;
365 } else { 368 } else {
366 dst->dev = dev_net(dst->dev)->loopback_dev; 369 dst->dev = dev_net(dst->dev)->loopback_dev;
367 dev_hold(dst->dev); 370 dev_hold(dst->dev);
diff --git a/net/core/filter.c b/net/core/filter.c
index e08b3822c72a..cd58614660cf 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -600,6 +600,9 @@ static u64 __skb_get_nlattr(u64 ctx, u64 A, u64 X, u64 r4, u64 r5)
600 if (skb_is_nonlinear(skb)) 600 if (skb_is_nonlinear(skb))
601 return 0; 601 return 0;
602 602
603 if (skb->len < sizeof(struct nlattr))
604 return 0;
605
603 if (A > skb->len - sizeof(struct nlattr)) 606 if (A > skb->len - sizeof(struct nlattr))
604 return 0; 607 return 0;
605 608
@@ -618,11 +621,14 @@ static u64 __skb_get_nlattr_nest(u64 ctx, u64 A, u64 X, u64 r4, u64 r5)
618 if (skb_is_nonlinear(skb)) 621 if (skb_is_nonlinear(skb))
619 return 0; 622 return 0;
620 623
624 if (skb->len < sizeof(struct nlattr))
625 return 0;
626
621 if (A > skb->len - sizeof(struct nlattr)) 627 if (A > skb->len - sizeof(struct nlattr))
622 return 0; 628 return 0;
623 629
624 nla = (struct nlattr *) &skb->data[A]; 630 nla = (struct nlattr *) &skb->data[A];
625 if (nla->nla_len > A - skb->len) 631 if (nla->nla_len > skb->len - A)
626 return 0; 632 return 0;
627 633
628 nla = nla_find_nested(nla, X); 634 nla = nla_find_nested(nla, X);
@@ -1737,7 +1743,6 @@ void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to)
1737 [BPF_S_ANC_RXHASH] = BPF_LD|BPF_B|BPF_ABS, 1743 [BPF_S_ANC_RXHASH] = BPF_LD|BPF_B|BPF_ABS,
1738 [BPF_S_ANC_CPU] = BPF_LD|BPF_B|BPF_ABS, 1744 [BPF_S_ANC_CPU] = BPF_LD|BPF_B|BPF_ABS,
1739 [BPF_S_ANC_ALU_XOR_X] = BPF_LD|BPF_B|BPF_ABS, 1745 [BPF_S_ANC_ALU_XOR_X] = BPF_LD|BPF_B|BPF_ABS,
1740 [BPF_S_ANC_SECCOMP_LD_W] = BPF_LD|BPF_B|BPF_ABS,
1741 [BPF_S_ANC_VLAN_TAG] = BPF_LD|BPF_B|BPF_ABS, 1746 [BPF_S_ANC_VLAN_TAG] = BPF_LD|BPF_B|BPF_ABS,
1742 [BPF_S_ANC_VLAN_TAG_PRESENT] = BPF_LD|BPF_B|BPF_ABS, 1747 [BPF_S_ANC_VLAN_TAG_PRESENT] = BPF_LD|BPF_B|BPF_ABS,
1743 [BPF_S_ANC_PAY_OFFSET] = BPF_LD|BPF_B|BPF_ABS, 1748 [BPF_S_ANC_PAY_OFFSET] = BPF_LD|BPF_B|BPF_ABS,
diff --git a/net/dccp/output.c b/net/dccp/output.c
index 8876078859da..0248e8a3460c 100644
--- a/net/dccp/output.c
+++ b/net/dccp/output.c
@@ -138,7 +138,7 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
138 138
139 DCCP_INC_STATS(DCCP_MIB_OUTSEGS); 139 DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
140 140
141 err = icsk->icsk_af_ops->queue_xmit(skb, &inet->cork.fl); 141 err = icsk->icsk_af_ops->queue_xmit(sk, skb, &inet->cork.fl);
142 return net_xmit_eval(err); 142 return net_xmit_eval(err);
143 } 143 }
144 return -ENOBUFS; 144 return -ENOBUFS;
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
index ce0cbbfe0f43..daccc4a36d80 100644
--- a/net/decnet/dn_route.c
+++ b/net/decnet/dn_route.c
@@ -752,7 +752,7 @@ static int dn_to_neigh_output(struct sk_buff *skb)
752 return n->output(n, skb); 752 return n->output(n, skb);
753} 753}
754 754
755static int dn_output(struct sk_buff *skb) 755static int dn_output(struct sock *sk, struct sk_buff *skb)
756{ 756{
757 struct dst_entry *dst = skb_dst(skb); 757 struct dst_entry *dst = skb_dst(skb);
758 struct dn_route *rt = (struct dn_route *)dst; 758 struct dn_route *rt = (struct dn_route *)dst;
@@ -838,6 +838,18 @@ drop:
838 * Used to catch bugs. This should never normally get 838 * Used to catch bugs. This should never normally get
839 * called. 839 * called.
840 */ 840 */
841static int dn_rt_bug_sk(struct sock *sk, struct sk_buff *skb)
842{
843 struct dn_skb_cb *cb = DN_SKB_CB(skb);
844
845 net_dbg_ratelimited("dn_rt_bug: skb from:%04x to:%04x\n",
846 le16_to_cpu(cb->src), le16_to_cpu(cb->dst));
847
848 kfree_skb(skb);
849
850 return NET_RX_DROP;
851}
852
841static int dn_rt_bug(struct sk_buff *skb) 853static int dn_rt_bug(struct sk_buff *skb)
842{ 854{
843 struct dn_skb_cb *cb = DN_SKB_CB(skb); 855 struct dn_skb_cb *cb = DN_SKB_CB(skb);
@@ -1463,7 +1475,7 @@ make_route:
1463 1475
1464 rt->n = neigh; 1476 rt->n = neigh;
1465 rt->dst.lastuse = jiffies; 1477 rt->dst.lastuse = jiffies;
1466 rt->dst.output = dn_rt_bug; 1478 rt->dst.output = dn_rt_bug_sk;
1467 switch (res.type) { 1479 switch (res.type) {
1468 case RTN_UNICAST: 1480 case RTN_UNICAST:
1469 rt->dst.input = dn_forward; 1481 rt->dst.input = dn_forward;
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 1a0755fea491..1cbeba5edff9 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -101,17 +101,17 @@ int __ip_local_out(struct sk_buff *skb)
101 skb_dst(skb)->dev, dst_output); 101 skb_dst(skb)->dev, dst_output);
102} 102}
103 103
104int ip_local_out(struct sk_buff *skb) 104int ip_local_out_sk(struct sock *sk, struct sk_buff *skb)
105{ 105{
106 int err; 106 int err;
107 107
108 err = __ip_local_out(skb); 108 err = __ip_local_out(skb);
109 if (likely(err == 1)) 109 if (likely(err == 1))
110 err = dst_output(skb); 110 err = dst_output_sk(sk, skb);
111 111
112 return err; 112 return err;
113} 113}
114EXPORT_SYMBOL_GPL(ip_local_out); 114EXPORT_SYMBOL_GPL(ip_local_out_sk);
115 115
116static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst) 116static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst)
117{ 117{
@@ -226,9 +226,8 @@ static int ip_finish_output(struct sk_buff *skb)
226 return ip_finish_output2(skb); 226 return ip_finish_output2(skb);
227} 227}
228 228
229int ip_mc_output(struct sk_buff *skb) 229int ip_mc_output(struct sock *sk, struct sk_buff *skb)
230{ 230{
231 struct sock *sk = skb->sk;
232 struct rtable *rt = skb_rtable(skb); 231 struct rtable *rt = skb_rtable(skb);
233 struct net_device *dev = rt->dst.dev; 232 struct net_device *dev = rt->dst.dev;
234 233
@@ -287,7 +286,7 @@ int ip_mc_output(struct sk_buff *skb)
287 !(IPCB(skb)->flags & IPSKB_REROUTED)); 286 !(IPCB(skb)->flags & IPSKB_REROUTED));
288} 287}
289 288
290int ip_output(struct sk_buff *skb) 289int ip_output(struct sock *sk, struct sk_buff *skb)
291{ 290{
292 struct net_device *dev = skb_dst(skb)->dev; 291 struct net_device *dev = skb_dst(skb)->dev;
293 292
@@ -315,9 +314,9 @@ static void ip_copy_addrs(struct iphdr *iph, const struct flowi4 *fl4)
315 sizeof(fl4->saddr) + sizeof(fl4->daddr)); 314 sizeof(fl4->saddr) + sizeof(fl4->daddr));
316} 315}
317 316
318int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl) 317/* Note: skb->sk can be different from sk, in case of tunnels */
318int ip_queue_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl)
319{ 319{
320 struct sock *sk = skb->sk;
321 struct inet_sock *inet = inet_sk(sk); 320 struct inet_sock *inet = inet_sk(sk);
322 struct ip_options_rcu *inet_opt; 321 struct ip_options_rcu *inet_opt;
323 struct flowi4 *fl4; 322 struct flowi4 *fl4;
@@ -389,6 +388,7 @@ packet_routed:
389 ip_select_ident_more(skb, &rt->dst, sk, 388 ip_select_ident_more(skb, &rt->dst, sk,
390 (skb_shinfo(skb)->gso_segs ?: 1) - 1); 389 (skb_shinfo(skb)->gso_segs ?: 1) - 1);
391 390
391 /* TODO : should we use skb->sk here instead of sk ? */
392 skb->priority = sk->sk_priority; 392 skb->priority = sk->sk_priority;
393 skb->mark = sk->sk_mark; 393 skb->mark = sk->sk_mark;
394 394
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index e77381d1df9a..484d0ce27ef7 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -670,7 +670,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
670 return; 670 return;
671 } 671 }
672 672
673 err = iptunnel_xmit(rt, skb, fl4.saddr, fl4.daddr, protocol, 673 err = iptunnel_xmit(skb->sk, rt, skb, fl4.saddr, fl4.daddr, protocol,
674 tos, ttl, df, !net_eq(tunnel->net, dev_net(dev))); 674 tos, ttl, df, !net_eq(tunnel->net, dev_net(dev)));
675 iptunnel_xmit_stats(err, &dev->stats, dev->tstats); 675 iptunnel_xmit_stats(err, &dev->stats, dev->tstats);
676 676
diff --git a/net/ipv4/ip_tunnel_core.c b/net/ipv4/ip_tunnel_core.c
index e0c2b1d2ea4e..bcf206c79005 100644
--- a/net/ipv4/ip_tunnel_core.c
+++ b/net/ipv4/ip_tunnel_core.c
@@ -46,7 +46,7 @@
46#include <net/netns/generic.h> 46#include <net/netns/generic.h>
47#include <net/rtnetlink.h> 47#include <net/rtnetlink.h>
48 48
49int iptunnel_xmit(struct rtable *rt, struct sk_buff *skb, 49int iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb,
50 __be32 src, __be32 dst, __u8 proto, 50 __be32 src, __be32 dst, __u8 proto,
51 __u8 tos, __u8 ttl, __be16 df, bool xnet) 51 __u8 tos, __u8 ttl, __be16 df, bool xnet)
52{ 52{
@@ -76,7 +76,7 @@ int iptunnel_xmit(struct rtable *rt, struct sk_buff *skb,
76 iph->ttl = ttl; 76 iph->ttl = ttl;
77 __ip_select_ident(iph, &rt->dst, (skb_shinfo(skb)->gso_segs ?: 1) - 1); 77 __ip_select_ident(iph, &rt->dst, (skb_shinfo(skb)->gso_segs ?: 1) - 1);
78 78
79 err = ip_local_out(skb); 79 err = ip_local_out_sk(sk, skb);
80 if (unlikely(net_xmit_eval(err))) 80 if (unlikely(net_xmit_eval(err)))
81 pkt_len = 0; 81 pkt_len = 0;
82 return pkt_len; 82 return pkt_len;
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
index f4b19e5dde54..8210964a9f19 100644
--- a/net/ipv4/ping.c
+++ b/net/ipv4/ping.c
@@ -252,26 +252,33 @@ int ping_init_sock(struct sock *sk)
252{ 252{
253 struct net *net = sock_net(sk); 253 struct net *net = sock_net(sk);
254 kgid_t group = current_egid(); 254 kgid_t group = current_egid();
255 struct group_info *group_info = get_current_groups(); 255 struct group_info *group_info;
256 int i, j, count = group_info->ngroups; 256 int i, j, count;
257 kgid_t low, high; 257 kgid_t low, high;
258 int ret = 0;
258 259
259 inet_get_ping_group_range_net(net, &low, &high); 260 inet_get_ping_group_range_net(net, &low, &high);
260 if (gid_lte(low, group) && gid_lte(group, high)) 261 if (gid_lte(low, group) && gid_lte(group, high))
261 return 0; 262 return 0;
262 263
264 group_info = get_current_groups();
265 count = group_info->ngroups;
263 for (i = 0; i < group_info->nblocks; i++) { 266 for (i = 0; i < group_info->nblocks; i++) {
264 int cp_count = min_t(int, NGROUPS_PER_BLOCK, count); 267 int cp_count = min_t(int, NGROUPS_PER_BLOCK, count);
265 for (j = 0; j < cp_count; j++) { 268 for (j = 0; j < cp_count; j++) {
266 kgid_t gid = group_info->blocks[i][j]; 269 kgid_t gid = group_info->blocks[i][j];
267 if (gid_lte(low, gid) && gid_lte(gid, high)) 270 if (gid_lte(low, gid) && gid_lte(gid, high))
268 return 0; 271 goto out_release_group;
269 } 272 }
270 273
271 count -= cp_count; 274 count -= cp_count;
272 } 275 }
273 276
274 return -EACCES; 277 ret = -EACCES;
278
279out_release_group:
280 put_group_info(group_info);
281 return ret;
275} 282}
276EXPORT_SYMBOL_GPL(ping_init_sock); 283EXPORT_SYMBOL_GPL(ping_init_sock);
277 284
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 34d094cadb11..1485aafcad59 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1129,7 +1129,7 @@ static void ipv4_link_failure(struct sk_buff *skb)
1129 dst_set_expires(&rt->dst, 0); 1129 dst_set_expires(&rt->dst, 0);
1130} 1130}
1131 1131
1132static int ip_rt_bug(struct sk_buff *skb) 1132static int ip_rt_bug(struct sock *sk, struct sk_buff *skb)
1133{ 1133{
1134 pr_debug("%s: %pI4 -> %pI4, %s\n", 1134 pr_debug("%s: %pI4 -> %pI4, %s\n",
1135 __func__, &ip_hdr(skb)->saddr, &ip_hdr(skb)->daddr, 1135 __func__, &ip_hdr(skb)->saddr, &ip_hdr(skb)->daddr,
@@ -2218,7 +2218,7 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or
2218 2218
2219 new->__use = 1; 2219 new->__use = 1;
2220 new->input = dst_discard; 2220 new->input = dst_discard;
2221 new->output = dst_discard; 2221 new->output = dst_discard_sk;
2222 2222
2223 new->dev = ort->dst.dev; 2223 new->dev = ort->dst.dev;
2224 if (new->dev) 2224 if (new->dev)
@@ -2357,7 +2357,7 @@ static int rt_fill_info(struct net *net, __be32 dst, __be32 src,
2357 } 2357 }
2358 } else 2358 } else
2359#endif 2359#endif
2360 if (nla_put_u32(skb, RTA_IIF, rt->rt_iif)) 2360 if (nla_put_u32(skb, RTA_IIF, skb->dev->ifindex))
2361 goto nla_put_failure; 2361 goto nla_put_failure;
2362 } 2362 }
2363 2363
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 699fb102e971..025e25093984 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -981,7 +981,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
981 TCP_ADD_STATS(sock_net(sk), TCP_MIB_OUTSEGS, 981 TCP_ADD_STATS(sock_net(sk), TCP_MIB_OUTSEGS,
982 tcp_skb_pcount(skb)); 982 tcp_skb_pcount(skb));
983 983
984 err = icsk->icsk_af_ops->queue_xmit(skb, &inet->cork.fl); 984 err = icsk->icsk_af_ops->queue_xmit(sk, skb, &inet->cork.fl);
985 if (likely(err <= 0)) 985 if (likely(err <= 0))
986 return err; 986 return err;
987 987
diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c
index baa0f63731fd..40e701f2e1e0 100644
--- a/net/ipv4/xfrm4_output.c
+++ b/net/ipv4/xfrm4_output.c
@@ -86,7 +86,7 @@ int xfrm4_output_finish(struct sk_buff *skb)
86 return xfrm_output(skb); 86 return xfrm_output(skb);
87} 87}
88 88
89int xfrm4_output(struct sk_buff *skb) 89int xfrm4_output(struct sock *sk, struct sk_buff *skb)
90{ 90{
91 struct dst_entry *dst = skb_dst(skb); 91 struct dst_entry *dst = skb_dst(skb);
92 struct xfrm_state *x = dst->xfrm; 92 struct xfrm_state *x = dst->xfrm;
diff --git a/net/ipv6/inet6_connection_sock.c b/net/ipv6/inet6_connection_sock.c
index c9138189415a..d4ade34ab375 100644
--- a/net/ipv6/inet6_connection_sock.c
+++ b/net/ipv6/inet6_connection_sock.c
@@ -224,9 +224,8 @@ static struct dst_entry *inet6_csk_route_socket(struct sock *sk,
224 return dst; 224 return dst;
225} 225}
226 226
227int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl_unused) 227int inet6_csk_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl_unused)
228{ 228{
229 struct sock *sk = skb->sk;
230 struct ipv6_pinfo *np = inet6_sk(sk); 229 struct ipv6_pinfo *np = inet6_sk(sk);
231 struct flowi6 fl6; 230 struct flowi6 fl6;
232 struct dst_entry *dst; 231 struct dst_entry *dst;
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
index c98338b81d30..9d921462b57f 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -1559,6 +1559,15 @@ static int ip6gre_changelink(struct net_device *dev, struct nlattr *tb[],
1559 return 0; 1559 return 0;
1560} 1560}
1561 1561
1562static void ip6gre_dellink(struct net_device *dev, struct list_head *head)
1563{
1564 struct net *net = dev_net(dev);
1565 struct ip6gre_net *ign = net_generic(net, ip6gre_net_id);
1566
1567 if (dev != ign->fb_tunnel_dev)
1568 unregister_netdevice_queue(dev, head);
1569}
1570
1562static size_t ip6gre_get_size(const struct net_device *dev) 1571static size_t ip6gre_get_size(const struct net_device *dev)
1563{ 1572{
1564 return 1573 return
@@ -1636,6 +1645,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
1636 .validate = ip6gre_tunnel_validate, 1645 .validate = ip6gre_tunnel_validate,
1637 .newlink = ip6gre_newlink, 1646 .newlink = ip6gre_newlink,
1638 .changelink = ip6gre_changelink, 1647 .changelink = ip6gre_changelink,
1648 .dellink = ip6gre_dellink,
1639 .get_size = ip6gre_get_size, 1649 .get_size = ip6gre_get_size,
1640 .fill_info = ip6gre_fill_info, 1650 .fill_info = ip6gre_fill_info,
1641}; 1651};
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 3284d61577c0..40e7581374f7 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -132,7 +132,7 @@ static int ip6_finish_output(struct sk_buff *skb)
132 return ip6_finish_output2(skb); 132 return ip6_finish_output2(skb);
133} 133}
134 134
135int ip6_output(struct sk_buff *skb) 135int ip6_output(struct sock *sk, struct sk_buff *skb)
136{ 136{
137 struct net_device *dev = skb_dst(skb)->dev; 137 struct net_device *dev = skb_dst(skb)->dev;
138 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); 138 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 5015c50a5ba7..4011617cca68 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -84,9 +84,9 @@ static void ip6_dst_ifdown(struct dst_entry *,
84static int ip6_dst_gc(struct dst_ops *ops); 84static int ip6_dst_gc(struct dst_ops *ops);
85 85
86static int ip6_pkt_discard(struct sk_buff *skb); 86static int ip6_pkt_discard(struct sk_buff *skb);
87static int ip6_pkt_discard_out(struct sk_buff *skb); 87static int ip6_pkt_discard_out(struct sock *sk, struct sk_buff *skb);
88static int ip6_pkt_prohibit(struct sk_buff *skb); 88static int ip6_pkt_prohibit(struct sk_buff *skb);
89static int ip6_pkt_prohibit_out(struct sk_buff *skb); 89static int ip6_pkt_prohibit_out(struct sock *sk, struct sk_buff *skb);
90static void ip6_link_failure(struct sk_buff *skb); 90static void ip6_link_failure(struct sk_buff *skb);
91static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, 91static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
92 struct sk_buff *skb, u32 mtu); 92 struct sk_buff *skb, u32 mtu);
@@ -290,7 +290,7 @@ static const struct rt6_info ip6_blk_hole_entry_template = {
290 .obsolete = DST_OBSOLETE_FORCE_CHK, 290 .obsolete = DST_OBSOLETE_FORCE_CHK,
291 .error = -EINVAL, 291 .error = -EINVAL,
292 .input = dst_discard, 292 .input = dst_discard,
293 .output = dst_discard, 293 .output = dst_discard_sk,
294 }, 294 },
295 .rt6i_flags = (RTF_REJECT | RTF_NONEXTHOP), 295 .rt6i_flags = (RTF_REJECT | RTF_NONEXTHOP),
296 .rt6i_protocol = RTPROT_KERNEL, 296 .rt6i_protocol = RTPROT_KERNEL,
@@ -1058,7 +1058,7 @@ struct dst_entry *ip6_blackhole_route(struct net *net, struct dst_entry *dst_ori
1058 1058
1059 new->__use = 1; 1059 new->__use = 1;
1060 new->input = dst_discard; 1060 new->input = dst_discard;
1061 new->output = dst_discard; 1061 new->output = dst_discard_sk;
1062 1062
1063 if (dst_metrics_read_only(&ort->dst)) 1063 if (dst_metrics_read_only(&ort->dst))
1064 new->_metrics = ort->dst._metrics; 1064 new->_metrics = ort->dst._metrics;
@@ -1338,7 +1338,7 @@ static unsigned int ip6_mtu(const struct dst_entry *dst)
1338 unsigned int mtu = dst_metric_raw(dst, RTAX_MTU); 1338 unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
1339 1339
1340 if (mtu) 1340 if (mtu)
1341 return mtu; 1341 goto out;
1342 1342
1343 mtu = IPV6_MIN_MTU; 1343 mtu = IPV6_MIN_MTU;
1344 1344
@@ -1348,7 +1348,8 @@ static unsigned int ip6_mtu(const struct dst_entry *dst)
1348 mtu = idev->cnf.mtu6; 1348 mtu = idev->cnf.mtu6;
1349 rcu_read_unlock(); 1349 rcu_read_unlock();
1350 1350
1351 return mtu; 1351out:
1352 return min_t(unsigned int, mtu, IP6_MAX_MTU);
1352} 1353}
1353 1354
1354static struct dst_entry *icmp6_dst_gc_list; 1355static struct dst_entry *icmp6_dst_gc_list;
@@ -1576,7 +1577,7 @@ int ip6_route_add(struct fib6_config *cfg)
1576 switch (cfg->fc_type) { 1577 switch (cfg->fc_type) {
1577 case RTN_BLACKHOLE: 1578 case RTN_BLACKHOLE:
1578 rt->dst.error = -EINVAL; 1579 rt->dst.error = -EINVAL;
1579 rt->dst.output = dst_discard; 1580 rt->dst.output = dst_discard_sk;
1580 rt->dst.input = dst_discard; 1581 rt->dst.input = dst_discard;
1581 break; 1582 break;
1582 case RTN_PROHIBIT: 1583 case RTN_PROHIBIT:
@@ -2128,7 +2129,7 @@ static int ip6_pkt_discard(struct sk_buff *skb)
2128 return ip6_pkt_drop(skb, ICMPV6_NOROUTE, IPSTATS_MIB_INNOROUTES); 2129 return ip6_pkt_drop(skb, ICMPV6_NOROUTE, IPSTATS_MIB_INNOROUTES);
2129} 2130}
2130 2131
2131static int ip6_pkt_discard_out(struct sk_buff *skb) 2132static int ip6_pkt_discard_out(struct sock *sk, struct sk_buff *skb)
2132{ 2133{
2133 skb->dev = skb_dst(skb)->dev; 2134 skb->dev = skb_dst(skb)->dev;
2134 return ip6_pkt_drop(skb, ICMPV6_NOROUTE, IPSTATS_MIB_OUTNOROUTES); 2135 return ip6_pkt_drop(skb, ICMPV6_NOROUTE, IPSTATS_MIB_OUTNOROUTES);
@@ -2139,7 +2140,7 @@ static int ip6_pkt_prohibit(struct sk_buff *skb)
2139 return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_INNOROUTES); 2140 return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_INNOROUTES);
2140} 2141}
2141 2142
2142static int ip6_pkt_prohibit_out(struct sk_buff *skb) 2143static int ip6_pkt_prohibit_out(struct sock *sk, struct sk_buff *skb)
2143{ 2144{
2144 skb->dev = skb_dst(skb)->dev; 2145 skb->dev = skb_dst(skb)->dev;
2145 return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES); 2146 return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index 1693c8d885f0..8da8268d65f8 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -974,8 +974,9 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb,
974 goto out; 974 goto out;
975 } 975 }
976 976
977 err = iptunnel_xmit(rt, skb, fl4.saddr, fl4.daddr, IPPROTO_IPV6, tos, 977 err = iptunnel_xmit(skb->sk, rt, skb, fl4.saddr, fl4.daddr,
978 ttl, df, !net_eq(tunnel->net, dev_net(dev))); 978 IPPROTO_IPV6, tos, ttl, df,
979 !net_eq(tunnel->net, dev_net(dev)));
979 iptunnel_xmit_stats(err, &dev->stats, dev->tstats); 980 iptunnel_xmit_stats(err, &dev->stats, dev->tstats);
980 return NETDEV_TX_OK; 981 return NETDEV_TX_OK;
981 982
diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c
index 6cd625e37706..19ef329bdbf8 100644
--- a/net/ipv6/xfrm6_output.c
+++ b/net/ipv6/xfrm6_output.c
@@ -163,7 +163,7 @@ static int __xfrm6_output(struct sk_buff *skb)
163 return x->outer_mode->afinfo->output_finish(skb); 163 return x->outer_mode->afinfo->output_finish(skb);
164} 164}
165 165
166int xfrm6_output(struct sk_buff *skb) 166int xfrm6_output(struct sock *sk, struct sk_buff *skb)
167{ 167{
168 return NF_HOOK(NFPROTO_IPV6, NF_INET_POST_ROUTING, skb, NULL, 168 return NF_HOOK(NFPROTO_IPV6, NF_INET_POST_ROUTING, skb, NULL,
169 skb_dst(skb)->dev, __xfrm6_output); 169 skb_dst(skb)->dev, __xfrm6_output);
diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
index 47f7a5490555..a4e37d7158dc 100644
--- a/net/l2tp/l2tp_core.c
+++ b/net/l2tp/l2tp_core.c
@@ -1131,10 +1131,10 @@ static int l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb,
1131 skb->local_df = 1; 1131 skb->local_df = 1;
1132#if IS_ENABLED(CONFIG_IPV6) 1132#if IS_ENABLED(CONFIG_IPV6)
1133 if (tunnel->sock->sk_family == PF_INET6 && !tunnel->v4mapped) 1133 if (tunnel->sock->sk_family == PF_INET6 && !tunnel->v4mapped)
1134 error = inet6_csk_xmit(skb, NULL); 1134 error = inet6_csk_xmit(tunnel->sock, skb, NULL);
1135 else 1135 else
1136#endif 1136#endif
1137 error = ip_queue_xmit(skb, fl); 1137 error = ip_queue_xmit(tunnel->sock, skb, fl);
1138 1138
1139 /* Update stats */ 1139 /* Update stats */
1140 if (error >= 0) { 1140 if (error >= 0) {
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
index 0b44d855269c..3397fe6897c0 100644
--- a/net/l2tp/l2tp_ip.c
+++ b/net/l2tp/l2tp_ip.c
@@ -487,7 +487,7 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
487 487
488xmit: 488xmit:
489 /* Queue the packet to IP for output */ 489 /* Queue the packet to IP for output */
490 rc = ip_queue_xmit(skb, &inet->cork.fl); 490 rc = ip_queue_xmit(sk, skb, &inet->cork.fl);
491 rcu_read_unlock(); 491 rcu_read_unlock();
492 492
493error: 493error:
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 6dba48efe01e..75421f2ba8be 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -1795,6 +1795,7 @@ int nf_conntrack_init_net(struct net *net)
1795 int cpu; 1795 int cpu;
1796 1796
1797 atomic_set(&net->ct.count, 0); 1797 atomic_set(&net->ct.count, 0);
1798 seqcount_init(&net->ct.generation);
1798 1799
1799 net->ct.pcpu_lists = alloc_percpu(struct ct_pcpu); 1800 net->ct.pcpu_lists = alloc_percpu(struct ct_pcpu);
1800 if (!net->ct.pcpu_lists) 1801 if (!net->ct.pcpu_lists)
diff --git a/net/netfilter/nf_conntrack_pptp.c b/net/netfilter/nf_conntrack_pptp.c
index 7bd03decd36c..825c3e3f8305 100644
--- a/net/netfilter/nf_conntrack_pptp.c
+++ b/net/netfilter/nf_conntrack_pptp.c
@@ -605,32 +605,14 @@ static struct nf_conntrack_helper pptp __read_mostly = {
605 .expect_policy = &pptp_exp_policy, 605 .expect_policy = &pptp_exp_policy,
606}; 606};
607 607
608static void nf_conntrack_pptp_net_exit(struct net *net)
609{
610 nf_ct_gre_keymap_flush(net);
611}
612
613static struct pernet_operations nf_conntrack_pptp_net_ops = {
614 .exit = nf_conntrack_pptp_net_exit,
615};
616
617static int __init nf_conntrack_pptp_init(void) 608static int __init nf_conntrack_pptp_init(void)
618{ 609{
619 int rv; 610 return nf_conntrack_helper_register(&pptp);
620
621 rv = nf_conntrack_helper_register(&pptp);
622 if (rv < 0)
623 return rv;
624 rv = register_pernet_subsys(&nf_conntrack_pptp_net_ops);
625 if (rv < 0)
626 nf_conntrack_helper_unregister(&pptp);
627 return rv;
628} 611}
629 612
630static void __exit nf_conntrack_pptp_fini(void) 613static void __exit nf_conntrack_pptp_fini(void)
631{ 614{
632 nf_conntrack_helper_unregister(&pptp); 615 nf_conntrack_helper_unregister(&pptp);
633 unregister_pernet_subsys(&nf_conntrack_pptp_net_ops);
634} 616}
635 617
636module_init(nf_conntrack_pptp_init); 618module_init(nf_conntrack_pptp_init);
diff --git a/net/netfilter/nf_conntrack_proto_gre.c b/net/netfilter/nf_conntrack_proto_gre.c
index 9d9c0dade602..d5665739e3b1 100644
--- a/net/netfilter/nf_conntrack_proto_gre.c
+++ b/net/netfilter/nf_conntrack_proto_gre.c
@@ -66,7 +66,7 @@ static inline struct netns_proto_gre *gre_pernet(struct net *net)
66 return net_generic(net, proto_gre_net_id); 66 return net_generic(net, proto_gre_net_id);
67} 67}
68 68
69void nf_ct_gre_keymap_flush(struct net *net) 69static void nf_ct_gre_keymap_flush(struct net *net)
70{ 70{
71 struct netns_proto_gre *net_gre = gre_pernet(net); 71 struct netns_proto_gre *net_gre = gre_pernet(net);
72 struct nf_ct_gre_keymap *km, *tmp; 72 struct nf_ct_gre_keymap *km, *tmp;
@@ -78,7 +78,6 @@ void nf_ct_gre_keymap_flush(struct net *net)
78 } 78 }
79 write_unlock_bh(&net_gre->keymap_lock); 79 write_unlock_bh(&net_gre->keymap_lock);
80} 80}
81EXPORT_SYMBOL(nf_ct_gre_keymap_flush);
82 81
83static inline int gre_key_cmpfn(const struct nf_ct_gre_keymap *km, 82static inline int gre_key_cmpfn(const struct nf_ct_gre_keymap *km,
84 const struct nf_conntrack_tuple *t) 83 const struct nf_conntrack_tuple *t)
diff --git a/net/netfilter/nf_tables_core.c b/net/netfilter/nf_tables_core.c
index 90998a6ff8b9..804105391b9a 100644
--- a/net/netfilter/nf_tables_core.c
+++ b/net/netfilter/nf_tables_core.c
@@ -25,9 +25,8 @@ static void nft_cmp_fast_eval(const struct nft_expr *expr,
25 struct nft_data data[NFT_REG_MAX + 1]) 25 struct nft_data data[NFT_REG_MAX + 1])
26{ 26{
27 const struct nft_cmp_fast_expr *priv = nft_expr_priv(expr); 27 const struct nft_cmp_fast_expr *priv = nft_expr_priv(expr);
28 u32 mask; 28 u32 mask = nft_cmp_fast_mask(priv->len);
29 29
30 mask = ~0U >> (sizeof(priv->data) * BITS_PER_BYTE - priv->len);
31 if ((data[priv->sreg].data[0] & mask) == priv->data) 30 if ((data[priv->sreg].data[0] & mask) == priv->data)
32 return; 31 return;
33 data[NFT_REG_VERDICT].verdict = NFT_BREAK; 32 data[NFT_REG_VERDICT].verdict = NFT_BREAK;
diff --git a/net/netfilter/nft_cmp.c b/net/netfilter/nft_cmp.c
index 954925db414d..e2b3f51c81f1 100644
--- a/net/netfilter/nft_cmp.c
+++ b/net/netfilter/nft_cmp.c
@@ -128,7 +128,7 @@ static int nft_cmp_fast_init(const struct nft_ctx *ctx,
128 BUG_ON(err < 0); 128 BUG_ON(err < 0);
129 desc.len *= BITS_PER_BYTE; 129 desc.len *= BITS_PER_BYTE;
130 130
131 mask = ~0U >> (sizeof(priv->data) * BITS_PER_BYTE - desc.len); 131 mask = nft_cmp_fast_mask(desc.len);
132 priv->data = data.data[0] & mask; 132 priv->data = data.data[0] & mask;
133 priv->len = desc.len; 133 priv->len = desc.len;
134 return 0; 134 return 0;
diff --git a/net/openvswitch/vport-gre.c b/net/openvswitch/vport-gre.c
index a3d6951602db..ebb6e2442554 100644
--- a/net/openvswitch/vport-gre.c
+++ b/net/openvswitch/vport-gre.c
@@ -174,7 +174,7 @@ static int gre_tnl_send(struct vport *vport, struct sk_buff *skb)
174 174
175 skb->local_df = 1; 175 skb->local_df = 1;
176 176
177 return iptunnel_xmit(rt, skb, fl.saddr, 177 return iptunnel_xmit(skb->sk, rt, skb, fl.saddr,
178 OVS_CB(skb)->tun_key->ipv4_dst, IPPROTO_GRE, 178 OVS_CB(skb)->tun_key->ipv4_dst, IPPROTO_GRE,
179 OVS_CB(skb)->tun_key->ipv4_tos, 179 OVS_CB(skb)->tun_key->ipv4_tos,
180 OVS_CB(skb)->tun_key->ipv4_ttl, df, false); 180 OVS_CB(skb)->tun_key->ipv4_ttl, df, false);
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index 4f6d6f9d1274..39579c3e0d14 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -1395,35 +1395,44 @@ static inline bool sctp_peer_needs_update(struct sctp_association *asoc)
1395 return false; 1395 return false;
1396} 1396}
1397 1397
1398/* Update asoc's rwnd for the approximated state in the buffer, 1398/* Increase asoc's rwnd by len and send any window update SACK if needed. */
1399 * and check whether SACK needs to be sent. 1399void sctp_assoc_rwnd_increase(struct sctp_association *asoc, unsigned int len)
1400 */
1401void sctp_assoc_rwnd_update(struct sctp_association *asoc, bool update_peer)
1402{ 1400{
1403 int rx_count;
1404 struct sctp_chunk *sack; 1401 struct sctp_chunk *sack;
1405 struct timer_list *timer; 1402 struct timer_list *timer;
1406 1403
1407 if (asoc->ep->rcvbuf_policy) 1404 if (asoc->rwnd_over) {
1408 rx_count = atomic_read(&asoc->rmem_alloc); 1405 if (asoc->rwnd_over >= len) {
1409 else 1406 asoc->rwnd_over -= len;
1410 rx_count = atomic_read(&asoc->base.sk->sk_rmem_alloc); 1407 } else {
1408 asoc->rwnd += (len - asoc->rwnd_over);
1409 asoc->rwnd_over = 0;
1410 }
1411 } else {
1412 asoc->rwnd += len;
1413 }
1411 1414
1412 if ((asoc->base.sk->sk_rcvbuf - rx_count) > 0) 1415 /* If we had window pressure, start recovering it
1413 asoc->rwnd = (asoc->base.sk->sk_rcvbuf - rx_count) >> 1; 1416 * once our rwnd had reached the accumulated pressure
1414 else 1417 * threshold. The idea is to recover slowly, but up
1415 asoc->rwnd = 0; 1418 * to the initial advertised window.
1419 */
1420 if (asoc->rwnd_press && asoc->rwnd >= asoc->rwnd_press) {
1421 int change = min(asoc->pathmtu, asoc->rwnd_press);
1422 asoc->rwnd += change;
1423 asoc->rwnd_press -= change;
1424 }
1416 1425
1417 pr_debug("%s: asoc:%p rwnd=%u, rx_count=%d, sk_rcvbuf=%d\n", 1426 pr_debug("%s: asoc:%p rwnd increased by %d to (%u, %u) - %u\n",
1418 __func__, asoc, asoc->rwnd, rx_count, 1427 __func__, asoc, len, asoc->rwnd, asoc->rwnd_over,
1419 asoc->base.sk->sk_rcvbuf); 1428 asoc->a_rwnd);
1420 1429
1421 /* Send a window update SACK if the rwnd has increased by at least the 1430 /* Send a window update SACK if the rwnd has increased by at least the
1422 * minimum of the association's PMTU and half of the receive buffer. 1431 * minimum of the association's PMTU and half of the receive buffer.
1423 * The algorithm used is similar to the one described in 1432 * The algorithm used is similar to the one described in
1424 * Section 4.2.3.3 of RFC 1122. 1433 * Section 4.2.3.3 of RFC 1122.
1425 */ 1434 */
1426 if (update_peer && sctp_peer_needs_update(asoc)) { 1435 if (sctp_peer_needs_update(asoc)) {
1427 asoc->a_rwnd = asoc->rwnd; 1436 asoc->a_rwnd = asoc->rwnd;
1428 1437
1429 pr_debug("%s: sending window update SACK- asoc:%p rwnd:%u " 1438 pr_debug("%s: sending window update SACK- asoc:%p rwnd:%u "
@@ -1445,6 +1454,45 @@ void sctp_assoc_rwnd_update(struct sctp_association *asoc, bool update_peer)
1445 } 1454 }
1446} 1455}
1447 1456
1457/* Decrease asoc's rwnd by len. */
1458void sctp_assoc_rwnd_decrease(struct sctp_association *asoc, unsigned int len)
1459{
1460 int rx_count;
1461 int over = 0;
1462
1463 if (unlikely(!asoc->rwnd || asoc->rwnd_over))
1464 pr_debug("%s: association:%p has asoc->rwnd:%u, "
1465 "asoc->rwnd_over:%u!\n", __func__, asoc,
1466 asoc->rwnd, asoc->rwnd_over);
1467
1468 if (asoc->ep->rcvbuf_policy)
1469 rx_count = atomic_read(&asoc->rmem_alloc);
1470 else
1471 rx_count = atomic_read(&asoc->base.sk->sk_rmem_alloc);
1472
1473 /* If we've reached or overflowed our receive buffer, announce
1474 * a 0 rwnd if rwnd would still be positive. Store the
1475 * the potential pressure overflow so that the window can be restored
1476 * back to original value.
1477 */
1478 if (rx_count >= asoc->base.sk->sk_rcvbuf)
1479 over = 1;
1480
1481 if (asoc->rwnd >= len) {
1482 asoc->rwnd -= len;
1483 if (over) {
1484 asoc->rwnd_press += asoc->rwnd;
1485 asoc->rwnd = 0;
1486 }
1487 } else {
1488 asoc->rwnd_over = len - asoc->rwnd;
1489 asoc->rwnd = 0;
1490 }
1491
1492 pr_debug("%s: asoc:%p rwnd decreased by %d to (%u, %u, %u)\n",
1493 __func__, asoc, len, asoc->rwnd, asoc->rwnd_over,
1494 asoc->rwnd_press);
1495}
1448 1496
1449/* Build the bind address list for the association based on info from the 1497/* Build the bind address list for the association based on info from the
1450 * local endpoint and the remote peer. 1498 * local endpoint and the remote peer.
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
index 4e1d0fcb028e..c09757fbf803 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -957,7 +957,7 @@ static inline int sctp_v4_xmit(struct sk_buff *skb,
957 957
958 SCTP_INC_STATS(sock_net(&inet->sk), SCTP_MIB_OUTSCTPPACKS); 958 SCTP_INC_STATS(sock_net(&inet->sk), SCTP_MIB_OUTSCTPPACKS);
959 959
960 return ip_queue_xmit(skb, &transport->fl); 960 return ip_queue_xmit(&inet->sk, skb, &transport->fl);
961} 961}
962 962
963static struct sctp_af sctp_af_inet; 963static struct sctp_af sctp_af_inet;
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
index 01e002430c85..ae9fbeba40b0 100644
--- a/net/sctp/sm_statefuns.c
+++ b/net/sctp/sm_statefuns.c
@@ -6178,7 +6178,7 @@ static int sctp_eat_data(const struct sctp_association *asoc,
6178 * PMTU. In cases, such as loopback, this might be a rather 6178 * PMTU. In cases, such as loopback, this might be a rather
6179 * large spill over. 6179 * large spill over.
6180 */ 6180 */
6181 if ((!chunk->data_accepted) && (!asoc->rwnd || 6181 if ((!chunk->data_accepted) && (!asoc->rwnd || asoc->rwnd_over ||
6182 (datalen > asoc->rwnd + asoc->frag_point))) { 6182 (datalen > asoc->rwnd + asoc->frag_point))) {
6183 6183
6184 /* If this is the next TSN, consider reneging to make 6184 /* If this is the next TSN, consider reneging to make
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index e13519e9df80..ff20e2dbbbc7 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -2115,6 +2115,12 @@ static int sctp_recvmsg(struct kiocb *iocb, struct sock *sk,
2115 sctp_skb_pull(skb, copied); 2115 sctp_skb_pull(skb, copied);
2116 skb_queue_head(&sk->sk_receive_queue, skb); 2116 skb_queue_head(&sk->sk_receive_queue, skb);
2117 2117
2118 /* When only partial message is copied to the user, increase
2119 * rwnd by that amount. If all the data in the skb is read,
2120 * rwnd is updated when the event is freed.
2121 */
2122 if (!sctp_ulpevent_is_notification(event))
2123 sctp_assoc_rwnd_increase(event->asoc, copied);
2118 goto out; 2124 goto out;
2119 } else if ((event->msg_flags & MSG_NOTIFICATION) || 2125 } else if ((event->msg_flags & MSG_NOTIFICATION) ||
2120 (event->msg_flags & MSG_EOR)) 2126 (event->msg_flags & MSG_EOR))
diff --git a/net/sctp/ulpevent.c b/net/sctp/ulpevent.c
index 8d198ae03606..85c64658bd0b 100644
--- a/net/sctp/ulpevent.c
+++ b/net/sctp/ulpevent.c
@@ -989,7 +989,7 @@ static void sctp_ulpevent_receive_data(struct sctp_ulpevent *event,
989 skb = sctp_event2skb(event); 989 skb = sctp_event2skb(event);
990 /* Set the owner and charge rwnd for bytes received. */ 990 /* Set the owner and charge rwnd for bytes received. */
991 sctp_ulpevent_set_owner(event, asoc); 991 sctp_ulpevent_set_owner(event, asoc);
992 sctp_assoc_rwnd_update(asoc, false); 992 sctp_assoc_rwnd_decrease(asoc, skb_headlen(skb));
993 993
994 if (!skb->data_len) 994 if (!skb->data_len)
995 return; 995 return;
@@ -1011,7 +1011,6 @@ static void sctp_ulpevent_release_data(struct sctp_ulpevent *event)
1011{ 1011{
1012 struct sk_buff *skb, *frag; 1012 struct sk_buff *skb, *frag;
1013 unsigned int len; 1013 unsigned int len;
1014 struct sctp_association *asoc;
1015 1014
1016 /* Current stack structures assume that the rcv buffer is 1015 /* Current stack structures assume that the rcv buffer is
1017 * per socket. For UDP style sockets this is not true as 1016 * per socket. For UDP style sockets this is not true as
@@ -1036,11 +1035,8 @@ static void sctp_ulpevent_release_data(struct sctp_ulpevent *event)
1036 } 1035 }
1037 1036
1038done: 1037done:
1039 asoc = event->asoc; 1038 sctp_assoc_rwnd_increase(event->asoc, len);
1040 sctp_association_hold(asoc);
1041 sctp_ulpevent_release_owner(event); 1039 sctp_ulpevent_release_owner(event);
1042 sctp_assoc_rwnd_update(asoc, true);
1043 sctp_association_put(asoc);
1044} 1040}
1045 1041
1046static void sctp_ulpevent_release_frag_data(struct sctp_ulpevent *event) 1042static void sctp_ulpevent_release_frag_data(struct sctp_ulpevent *event)
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index f02f511b7107..c08fbd11ceff 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -1842,7 +1842,7 @@ purge_queue:
1842 xfrm_pol_put(pol); 1842 xfrm_pol_put(pol);
1843} 1843}
1844 1844
1845static int xdst_queue_output(struct sk_buff *skb) 1845static int xdst_queue_output(struct sock *sk, struct sk_buff *skb)
1846{ 1846{
1847 unsigned long sched_next; 1847 unsigned long sched_next;
1848 struct dst_entry *dst = skb_dst(skb); 1848 struct dst_entry *dst = skb_dst(skb);
diff --git a/tools/lib/lockdep/Makefile b/tools/lib/lockdep/Makefile
index 07b0b7542511..cb09d3ff8f58 100644
--- a/tools/lib/lockdep/Makefile
+++ b/tools/lib/lockdep/Makefile
@@ -1,13 +1,8 @@
1# liblockdep version
2LL_VERSION = 0
3LL_PATCHLEVEL = 0
4LL_EXTRAVERSION = 1
5
6# file format version 1# file format version
7FILE_VERSION = 1 2FILE_VERSION = 1
8 3
9MAKEFLAGS += --no-print-directory 4MAKEFLAGS += --no-print-directory
10 5LIBLOCKDEP_VERSION=$(shell make -sC ../../.. kernelversion)
11 6
12# Makefiles suck: This macro sets a default value of $(2) for the 7# Makefiles suck: This macro sets a default value of $(2) for the
13# variable named by $(1), unless the variable has been set by 8# variable named by $(1), unless the variable has been set by
@@ -98,7 +93,7 @@ export prefix libdir bindir src obj
98libdir_SQ = $(subst ','\'',$(libdir)) 93libdir_SQ = $(subst ','\'',$(libdir))
99bindir_SQ = $(subst ','\'',$(bindir)) 94bindir_SQ = $(subst ','\'',$(bindir))
100 95
101LIB_FILE = liblockdep.a liblockdep.so 96LIB_FILE = liblockdep.a liblockdep.so.$(LIBLOCKDEP_VERSION)
102BIN_FILE = lockdep 97BIN_FILE = lockdep
103 98
104CONFIG_INCLUDES = 99CONFIG_INCLUDES =
@@ -110,8 +105,6 @@ N =
110 105
111export Q VERBOSE 106export Q VERBOSE
112 107
113LIBLOCKDEP_VERSION = $(LL_VERSION).$(LL_PATCHLEVEL).$(LL_EXTRAVERSION)
114
115INCLUDES = -I. -I/usr/local/include -I./uinclude -I./include $(CONFIG_INCLUDES) 108INCLUDES = -I. -I/usr/local/include -I./uinclude -I./include $(CONFIG_INCLUDES)
116 109
117# Set compile option CFLAGS if not set elsewhere 110# Set compile option CFLAGS if not set elsewhere
@@ -146,7 +139,7 @@ do_app_build = \
146 139
147do_compile_shared_library = \ 140do_compile_shared_library = \
148 ($(print_shared_lib_compile) \ 141 ($(print_shared_lib_compile) \
149 $(CC) --shared $^ -o $@ -lpthread -ldl) 142 $(CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='"$@"';$(shell ln -s $@ liblockdep.so))
150 143
151do_build_static_lib = \ 144do_build_static_lib = \
152 ($(print_static_lib_build) \ 145 ($(print_static_lib_build) \
@@ -177,7 +170,7 @@ all: all_cmd
177 170
178all_cmd: $(CMD_TARGETS) 171all_cmd: $(CMD_TARGETS)
179 172
180liblockdep.so: $(PEVENT_LIB_OBJS) 173liblockdep.so.$(LIBLOCKDEP_VERSION): $(PEVENT_LIB_OBJS)
181 $(Q)$(do_compile_shared_library) 174 $(Q)$(do_compile_shared_library)
182 175
183liblockdep.a: $(PEVENT_LIB_OBJS) 176liblockdep.a: $(PEVENT_LIB_OBJS)
diff --git a/tools/lib/lockdep/uinclude/linux/lockdep.h b/tools/lib/lockdep/uinclude/linux/lockdep.h
index d0f5d6e50214..c1552c28507e 100644
--- a/tools/lib/lockdep/uinclude/linux/lockdep.h
+++ b/tools/lib/lockdep/uinclude/linux/lockdep.h
@@ -10,6 +10,9 @@
10 10
11#define MAX_LOCK_DEPTH 2000UL 11#define MAX_LOCK_DEPTH 2000UL
12 12
13#define asmlinkage
14#define __visible
15
13#include "../../../include/linux/lockdep.h" 16#include "../../../include/linux/lockdep.h"
14 17
15struct task_struct { 18struct task_struct {
diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
index 1587ea392ad6..baec7d887da4 100644
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c
@@ -50,6 +50,18 @@ static int show_warning = 1;
50 warning(fmt, ##__VA_ARGS__); \ 50 warning(fmt, ##__VA_ARGS__); \
51 } while (0) 51 } while (0)
52 52
53#define do_warning_event(event, fmt, ...) \
54 do { \
55 if (!show_warning) \
56 continue; \
57 \
58 if (event) \
59 warning("[%s:%s] " fmt, event->system, \
60 event->name, ##__VA_ARGS__); \
61 else \
62 warning(fmt, ##__VA_ARGS__); \
63 } while (0)
64
53static void init_input_buf(const char *buf, unsigned long long size) 65static void init_input_buf(const char *buf, unsigned long long size)
54{ 66{
55 input_buf = buf; 67 input_buf = buf;
@@ -1355,7 +1367,7 @@ static int event_read_fields(struct event_format *event, struct format_field **f
1355 } 1367 }
1356 1368
1357 if (!field->type) { 1369 if (!field->type) {
1358 do_warning("%s: no type found", __func__); 1370 do_warning_event(event, "%s: no type found", __func__);
1359 goto fail; 1371 goto fail;
1360 } 1372 }
1361 field->name = last_token; 1373 field->name = last_token;
@@ -1402,7 +1414,7 @@ static int event_read_fields(struct event_format *event, struct format_field **f
1402 free_token(token); 1414 free_token(token);
1403 type = read_token(&token); 1415 type = read_token(&token);
1404 if (type == EVENT_NONE) { 1416 if (type == EVENT_NONE) {
1405 do_warning("failed to find token"); 1417 do_warning_event(event, "failed to find token");
1406 goto fail; 1418 goto fail;
1407 } 1419 }
1408 } 1420 }
@@ -1636,7 +1648,7 @@ process_cond(struct event_format *event, struct print_arg *top, char **tok)
1636 right = alloc_arg(); 1648 right = alloc_arg();
1637 1649
1638 if (!arg || !left || !right) { 1650 if (!arg || !left || !right) {
1639 do_warning("%s: not enough memory!", __func__); 1651 do_warning_event(event, "%s: not enough memory!", __func__);
1640 /* arg will be freed at out_free */ 1652 /* arg will be freed at out_free */
1641 free_arg(left); 1653 free_arg(left);
1642 free_arg(right); 1654 free_arg(right);
@@ -1686,7 +1698,7 @@ process_array(struct event_format *event, struct print_arg *top, char **tok)
1686 1698
1687 arg = alloc_arg(); 1699 arg = alloc_arg();
1688 if (!arg) { 1700 if (!arg) {
1689 do_warning("%s: not enough memory!", __func__); 1701 do_warning_event(event, "%s: not enough memory!", __func__);
1690 /* '*tok' is set to top->op.op. No need to free. */ 1702 /* '*tok' is set to top->op.op. No need to free. */
1691 *tok = NULL; 1703 *tok = NULL;
1692 return EVENT_ERROR; 1704 return EVENT_ERROR;
@@ -1792,7 +1804,7 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)
1792 if (arg->type == PRINT_OP && !arg->op.left) { 1804 if (arg->type == PRINT_OP && !arg->op.left) {
1793 /* handle single op */ 1805 /* handle single op */
1794 if (token[1]) { 1806 if (token[1]) {
1795 do_warning("bad op token %s", token); 1807 do_warning_event(event, "bad op token %s", token);
1796 goto out_free; 1808 goto out_free;
1797 } 1809 }
1798 switch (token[0]) { 1810 switch (token[0]) {
@@ -1802,7 +1814,7 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)
1802 case '-': 1814 case '-':
1803 break; 1815 break;
1804 default: 1816 default:
1805 do_warning("bad op token %s", token); 1817 do_warning_event(event, "bad op token %s", token);
1806 goto out_free; 1818 goto out_free;
1807 1819
1808 } 1820 }
@@ -1888,7 +1900,7 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)
1888 char *new_atom; 1900 char *new_atom;
1889 1901
1890 if (left->type != PRINT_ATOM) { 1902 if (left->type != PRINT_ATOM) {
1891 do_warning("bad pointer type"); 1903 do_warning_event(event, "bad pointer type");
1892 goto out_free; 1904 goto out_free;
1893 } 1905 }
1894 new_atom = realloc(left->atom.atom, 1906 new_atom = realloc(left->atom.atom,
@@ -1930,7 +1942,7 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)
1930 type = process_array(event, arg, tok); 1942 type = process_array(event, arg, tok);
1931 1943
1932 } else { 1944 } else {
1933 do_warning("unknown op '%s'", token); 1945 do_warning_event(event, "unknown op '%s'", token);
1934 event->flags |= EVENT_FL_FAILED; 1946 event->flags |= EVENT_FL_FAILED;
1935 /* the arg is now the left side */ 1947 /* the arg is now the left side */
1936 goto out_free; 1948 goto out_free;
@@ -1951,7 +1963,7 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)
1951 return type; 1963 return type;
1952 1964
1953out_warn_free: 1965out_warn_free:
1954 do_warning("%s: not enough memory!", __func__); 1966 do_warning_event(event, "%s: not enough memory!", __func__);
1955out_free: 1967out_free:
1956 free_token(token); 1968 free_token(token);
1957 *tok = NULL; 1969 *tok = NULL;
@@ -2385,7 +2397,7 @@ process_flags(struct event_format *event, struct print_arg *arg, char **tok)
2385 2397
2386 field = alloc_arg(); 2398 field = alloc_arg();
2387 if (!field) { 2399 if (!field) {
2388 do_warning("%s: not enough memory!", __func__); 2400 do_warning_event(event, "%s: not enough memory!", __func__);
2389 goto out_free; 2401 goto out_free;
2390 } 2402 }
2391 2403
@@ -2438,7 +2450,7 @@ process_symbols(struct event_format *event, struct print_arg *arg, char **tok)
2438 2450
2439 field = alloc_arg(); 2451 field = alloc_arg();
2440 if (!field) { 2452 if (!field) {
2441 do_warning("%s: not enough memory!", __func__); 2453 do_warning_event(event, "%s: not enough memory!", __func__);
2442 goto out_free; 2454 goto out_free;
2443 } 2455 }
2444 2456
@@ -2477,7 +2489,7 @@ process_hex(struct event_format *event, struct print_arg *arg, char **tok)
2477 2489
2478 field = alloc_arg(); 2490 field = alloc_arg();
2479 if (!field) { 2491 if (!field) {
2480 do_warning("%s: not enough memory!", __func__); 2492 do_warning_event(event, "%s: not enough memory!", __func__);
2481 goto out_free; 2493 goto out_free;
2482 } 2494 }
2483 2495
@@ -2492,7 +2504,7 @@ process_hex(struct event_format *event, struct print_arg *arg, char **tok)
2492 2504
2493 field = alloc_arg(); 2505 field = alloc_arg();
2494 if (!field) { 2506 if (!field) {
2495 do_warning("%s: not enough memory!", __func__); 2507 do_warning_event(event, "%s: not enough memory!", __func__);
2496 *tok = NULL; 2508 *tok = NULL;
2497 return EVENT_ERROR; 2509 return EVENT_ERROR;
2498 } 2510 }
@@ -2555,7 +2567,7 @@ process_dynamic_array(struct event_format *event, struct print_arg *arg, char **
2555 free_token(token); 2567 free_token(token);
2556 arg = alloc_arg(); 2568 arg = alloc_arg();
2557 if (!arg) { 2569 if (!arg) {
2558 do_warning("%s: not enough memory!", __func__); 2570 do_warning_event(event, "%s: not enough memory!", __func__);
2559 *tok = NULL; 2571 *tok = NULL;
2560 return EVENT_ERROR; 2572 return EVENT_ERROR;
2561 } 2573 }
@@ -2614,13 +2626,14 @@ process_paren(struct event_format *event, struct print_arg *arg, char **tok)
2614 2626
2615 /* prevous must be an atom */ 2627 /* prevous must be an atom */
2616 if (arg->type != PRINT_ATOM) { 2628 if (arg->type != PRINT_ATOM) {
2617 do_warning("previous needed to be PRINT_ATOM"); 2629 do_warning_event(event, "previous needed to be PRINT_ATOM");
2618 goto out_free; 2630 goto out_free;
2619 } 2631 }
2620 2632
2621 item_arg = alloc_arg(); 2633 item_arg = alloc_arg();
2622 if (!item_arg) { 2634 if (!item_arg) {
2623 do_warning("%s: not enough memory!", __func__); 2635 do_warning_event(event, "%s: not enough memory!",
2636 __func__);
2624 goto out_free; 2637 goto out_free;
2625 } 2638 }
2626 2639
@@ -2721,21 +2734,24 @@ process_func_handler(struct event_format *event, struct pevent_function_handler
2721 for (i = 0; i < func->nr_args; i++) { 2734 for (i = 0; i < func->nr_args; i++) {
2722 farg = alloc_arg(); 2735 farg = alloc_arg();
2723 if (!farg) { 2736 if (!farg) {
2724 do_warning("%s: not enough memory!", __func__); 2737 do_warning_event(event, "%s: not enough memory!",
2738 __func__);
2725 return EVENT_ERROR; 2739 return EVENT_ERROR;
2726 } 2740 }
2727 2741
2728 type = process_arg(event, farg, &token); 2742 type = process_arg(event, farg, &token);
2729 if (i < (func->nr_args - 1)) { 2743 if (i < (func->nr_args - 1)) {
2730 if (type != EVENT_DELIM || strcmp(token, ",") != 0) { 2744 if (type != EVENT_DELIM || strcmp(token, ",") != 0) {
2731 warning("Error: function '%s()' expects %d arguments but event %s only uses %d", 2745 do_warning_event(event,
2746 "Error: function '%s()' expects %d arguments but event %s only uses %d",
2732 func->name, func->nr_args, 2747 func->name, func->nr_args,
2733 event->name, i + 1); 2748 event->name, i + 1);
2734 goto err; 2749 goto err;
2735 } 2750 }
2736 } else { 2751 } else {
2737 if (type != EVENT_DELIM || strcmp(token, ")") != 0) { 2752 if (type != EVENT_DELIM || strcmp(token, ")") != 0) {
2738 warning("Error: function '%s()' only expects %d arguments but event %s has more", 2753 do_warning_event(event,
2754 "Error: function '%s()' only expects %d arguments but event %s has more",
2739 func->name, func->nr_args, event->name); 2755 func->name, func->nr_args, event->name);
2740 goto err; 2756 goto err;
2741 } 2757 }
@@ -2792,7 +2808,7 @@ process_function(struct event_format *event, struct print_arg *arg,
2792 return process_func_handler(event, func, arg, tok); 2808 return process_func_handler(event, func, arg, tok);
2793 } 2809 }
2794 2810
2795 do_warning("function %s not defined", token); 2811 do_warning_event(event, "function %s not defined", token);
2796 free_token(token); 2812 free_token(token);
2797 return EVENT_ERROR; 2813 return EVENT_ERROR;
2798} 2814}
@@ -2878,7 +2894,7 @@ process_arg_token(struct event_format *event, struct print_arg *arg,
2878 2894
2879 case EVENT_ERROR ... EVENT_NEWLINE: 2895 case EVENT_ERROR ... EVENT_NEWLINE:
2880 default: 2896 default:
2881 do_warning("unexpected type %d", type); 2897 do_warning_event(event, "unexpected type %d", type);
2882 return EVENT_ERROR; 2898 return EVENT_ERROR;
2883 } 2899 }
2884 *tok = token; 2900 *tok = token;
@@ -2901,7 +2917,8 @@ static int event_read_print_args(struct event_format *event, struct print_arg **
2901 2917
2902 arg = alloc_arg(); 2918 arg = alloc_arg();
2903 if (!arg) { 2919 if (!arg) {
2904 do_warning("%s: not enough memory!", __func__); 2920 do_warning_event(event, "%s: not enough memory!",
2921 __func__);
2905 return -1; 2922 return -1;
2906 } 2923 }
2907 2924
@@ -3481,11 +3498,12 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg
3481 return val; 3498 return val;
3482 3499
3483out_warning_op: 3500out_warning_op:
3484 do_warning("%s: unknown op '%s'", __func__, arg->op.op); 3501 do_warning_event(event, "%s: unknown op '%s'", __func__, arg->op.op);
3485 return 0; 3502 return 0;
3486 3503
3487out_warning_field: 3504out_warning_field:
3488 do_warning("%s: field %s not found", __func__, arg->field.name); 3505 do_warning_event(event, "%s: field %s not found",
3506 __func__, arg->field.name);
3489 return 0; 3507 return 0;
3490} 3508}
3491 3509
@@ -3591,7 +3609,8 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
3591 } 3609 }
3592 str = malloc(len + 1); 3610 str = malloc(len + 1);
3593 if (!str) { 3611 if (!str) {
3594 do_warning("%s: not enough memory!", __func__); 3612 do_warning_event(event, "%s: not enough memory!",
3613 __func__);
3595 return; 3614 return;
3596 } 3615 }
3597 memcpy(str, data + field->offset, len); 3616 memcpy(str, data + field->offset, len);
@@ -3697,7 +3716,8 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
3697 return; 3716 return;
3698 3717
3699out_warning_field: 3718out_warning_field:
3700 do_warning("%s: field %s not found", __func__, arg->field.name); 3719 do_warning_event(event, "%s: field %s not found",
3720 __func__, arg->field.name);
3701} 3721}
3702 3722
3703static unsigned long long 3723static unsigned long long
@@ -3742,14 +3762,16 @@ process_defined_func(struct trace_seq *s, void *data, int size,
3742 trace_seq_terminate(&str); 3762 trace_seq_terminate(&str);
3743 string = malloc(sizeof(*string)); 3763 string = malloc(sizeof(*string));
3744 if (!string) { 3764 if (!string) {
3745 do_warning("%s(%d): malloc str", __func__, __LINE__); 3765 do_warning_event(event, "%s(%d): malloc str",
3766 __func__, __LINE__);
3746 goto out_free; 3767 goto out_free;
3747 } 3768 }
3748 string->next = strings; 3769 string->next = strings;
3749 string->str = strdup(str.buffer); 3770 string->str = strdup(str.buffer);
3750 if (!string->str) { 3771 if (!string->str) {
3751 free(string); 3772 free(string);
3752 do_warning("%s(%d): malloc str", __func__, __LINE__); 3773 do_warning_event(event, "%s(%d): malloc str",
3774 __func__, __LINE__);
3753 goto out_free; 3775 goto out_free;
3754 } 3776 }
3755 args[i] = (uintptr_t)string->str; 3777 args[i] = (uintptr_t)string->str;
@@ -3761,7 +3783,7 @@ process_defined_func(struct trace_seq *s, void *data, int size,
3761 * Something went totally wrong, this is not 3783 * Something went totally wrong, this is not
3762 * an input error, something in this code broke. 3784 * an input error, something in this code broke.
3763 */ 3785 */
3764 do_warning("Unexpected end of arguments\n"); 3786 do_warning_event(event, "Unexpected end of arguments\n");
3765 goto out_free; 3787 goto out_free;
3766 } 3788 }
3767 farg = farg->next; 3789 farg = farg->next;
@@ -3811,12 +3833,12 @@ static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struc
3811 if (!field) { 3833 if (!field) {
3812 field = pevent_find_field(event, "buf"); 3834 field = pevent_find_field(event, "buf");
3813 if (!field) { 3835 if (!field) {
3814 do_warning("can't find buffer field for binary printk"); 3836 do_warning_event(event, "can't find buffer field for binary printk");
3815 return NULL; 3837 return NULL;
3816 } 3838 }
3817 ip_field = pevent_find_field(event, "ip"); 3839 ip_field = pevent_find_field(event, "ip");
3818 if (!ip_field) { 3840 if (!ip_field) {
3819 do_warning("can't find ip field for binary printk"); 3841 do_warning_event(event, "can't find ip field for binary printk");
3820 return NULL; 3842 return NULL;
3821 } 3843 }
3822 pevent->bprint_buf_field = field; 3844 pevent->bprint_buf_field = field;
@@ -3830,7 +3852,8 @@ static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struc
3830 */ 3852 */
3831 args = alloc_arg(); 3853 args = alloc_arg();
3832 if (!args) { 3854 if (!args) {
3833 do_warning("%s(%d): not enough memory!", __func__, __LINE__); 3855 do_warning_event(event, "%s(%d): not enough memory!",
3856 __func__, __LINE__);
3834 return NULL; 3857 return NULL;
3835 } 3858 }
3836 arg = args; 3859 arg = args;
@@ -3896,7 +3919,7 @@ static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struc
3896 bptr += vsize; 3919 bptr += vsize;
3897 arg = alloc_arg(); 3920 arg = alloc_arg();
3898 if (!arg) { 3921 if (!arg) {
3899 do_warning("%s(%d): not enough memory!", 3922 do_warning_event(event, "%s(%d): not enough memory!",
3900 __func__, __LINE__); 3923 __func__, __LINE__);
3901 goto out_free; 3924 goto out_free;
3902 } 3925 }
@@ -3919,7 +3942,7 @@ static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struc
3919 case 's': 3942 case 's':
3920 arg = alloc_arg(); 3943 arg = alloc_arg();
3921 if (!arg) { 3944 if (!arg) {
3922 do_warning("%s(%d): not enough memory!", 3945 do_warning_event(event, "%s(%d): not enough memory!",
3923 __func__, __LINE__); 3946 __func__, __LINE__);
3924 goto out_free; 3947 goto out_free;
3925 } 3948 }
@@ -3959,7 +3982,7 @@ get_bprint_format(void *data, int size __maybe_unused,
3959 if (!field) { 3982 if (!field) {
3960 field = pevent_find_field(event, "fmt"); 3983 field = pevent_find_field(event, "fmt");
3961 if (!field) { 3984 if (!field) {
3962 do_warning("can't find format field for binary printk"); 3985 do_warning_event(event, "can't find format field for binary printk");
3963 return NULL; 3986 return NULL;
3964 } 3987 }
3965 pevent->bprint_fmt_field = field; 3988 pevent->bprint_fmt_field = field;
@@ -4003,8 +4026,8 @@ static void print_mac_arg(struct trace_seq *s, int mac, void *data, int size,
4003 arg->field.field = 4026 arg->field.field =
4004 pevent_find_any_field(event, arg->field.name); 4027 pevent_find_any_field(event, arg->field.name);
4005 if (!arg->field.field) { 4028 if (!arg->field.field) {
4006 do_warning("%s: field %s not found", 4029 do_warning_event(event, "%s: field %s not found",
4007 __func__, arg->field.name); 4030 __func__, arg->field.name);
4008 return; 4031 return;
4009 } 4032 }
4010 } 4033 }
@@ -4176,7 +4199,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
4176 case '*': 4199 case '*':
4177 /* The argument is the length. */ 4200 /* The argument is the length. */
4178 if (!arg) { 4201 if (!arg) {
4179 do_warning("no argument match"); 4202 do_warning_event(event, "no argument match");
4180 event->flags |= EVENT_FL_FAILED; 4203 event->flags |= EVENT_FL_FAILED;
4181 goto out_failed; 4204 goto out_failed;
4182 } 4205 }
@@ -4213,7 +4236,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
4213 case 'X': 4236 case 'X':
4214 case 'u': 4237 case 'u':
4215 if (!arg) { 4238 if (!arg) {
4216 do_warning("no argument match"); 4239 do_warning_event(event, "no argument match");
4217 event->flags |= EVENT_FL_FAILED; 4240 event->flags |= EVENT_FL_FAILED;
4218 goto out_failed; 4241 goto out_failed;
4219 } 4242 }
@@ -4223,7 +4246,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
4223 4246
4224 /* should never happen */ 4247 /* should never happen */
4225 if (len > 31) { 4248 if (len > 31) {
4226 do_warning("bad format!"); 4249 do_warning_event(event, "bad format!");
4227 event->flags |= EVENT_FL_FAILED; 4250 event->flags |= EVENT_FL_FAILED;
4228 len = 31; 4251 len = 31;
4229 } 4252 }
@@ -4290,13 +4313,13 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
4290 trace_seq_printf(s, format, (long long)val); 4313 trace_seq_printf(s, format, (long long)val);
4291 break; 4314 break;
4292 default: 4315 default:
4293 do_warning("bad count (%d)", ls); 4316 do_warning_event(event, "bad count (%d)", ls);
4294 event->flags |= EVENT_FL_FAILED; 4317 event->flags |= EVENT_FL_FAILED;
4295 } 4318 }
4296 break; 4319 break;
4297 case 's': 4320 case 's':
4298 if (!arg) { 4321 if (!arg) {
4299 do_warning("no matching argument"); 4322 do_warning_event(event, "no matching argument");
4300 event->flags |= EVENT_FL_FAILED; 4323 event->flags |= EVENT_FL_FAILED;
4301 goto out_failed; 4324 goto out_failed;
4302 } 4325 }
@@ -4306,7 +4329,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
4306 4329
4307 /* should never happen */ 4330 /* should never happen */
4308 if (len > 31) { 4331 if (len > 31) {
4309 do_warning("bad format!"); 4332 do_warning_event(event, "bad format!");
4310 event->flags |= EVENT_FL_FAILED; 4333 event->flags |= EVENT_FL_FAILED;
4311 len = 31; 4334 len = 31;
4312 } 4335 }
diff --git a/tools/perf/Documentation/perf-bench.txt b/tools/perf/Documentation/perf-bench.txt
index 7065cd6fbdfc..4464ad770d51 100644
--- a/tools/perf/Documentation/perf-bench.txt
+++ b/tools/perf/Documentation/perf-bench.txt
@@ -48,6 +48,12 @@ SUBSYSTEM
48'mem':: 48'mem'::
49 Memory access performance. 49 Memory access performance.
50 50
51'numa'::
52 NUMA scheduling and MM benchmarks.
53
54'futex'::
55 Futex stressing benchmarks.
56
51'all':: 57'all'::
52 All benchmark subsystems. 58 All benchmark subsystems.
53 59
@@ -187,6 +193,22 @@ Show only the result with page faults before memset.
187--no-prefault:: 193--no-prefault::
188Show only the result without page faults before memset. 194Show only the result without page faults before memset.
189 195
196SUITES FOR 'numa'
197~~~~~~~~~~~~~~~~~
198*mem*::
199Suite for evaluating NUMA workloads.
200
201SUITES FOR 'futex'
202~~~~~~~~~~~~~~~~~~
203*hash*::
204Suite for evaluating hash tables.
205
206*wake*::
207Suite for evaluating wake calls.
208
209*requeue*::
210Suite for evaluating requeue calls.
211
190SEE ALSO 212SEE ALSO
191-------- 213--------
192linkperf:perf[1] 214linkperf:perf[1]
diff --git a/tools/perf/Documentation/perf-top.txt b/tools/perf/Documentation/perf-top.txt
index cdd8d4946dba..976b00c6cdb1 100644
--- a/tools/perf/Documentation/perf-top.txt
+++ b/tools/perf/Documentation/perf-top.txt
@@ -87,7 +87,6 @@ Default is to monitor all CPUS.
87--realtime=<priority>:: 87--realtime=<priority>::
88 Collect data with this RT SCHED_FIFO priority. 88 Collect data with this RT SCHED_FIFO priority.
89 89
90-s <symbol>::
91--sym-annotate=<symbol>:: 90--sym-annotate=<symbol>::
92 Annotate this symbol. 91 Annotate this symbol.
93 92
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index 50d875d970c4..e96923310d57 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -192,13 +192,13 @@ endif
192export PERL_PATH 192export PERL_PATH
193 193
194$(OUTPUT)util/parse-events-flex.c: util/parse-events.l $(OUTPUT)util/parse-events-bison.c 194$(OUTPUT)util/parse-events-flex.c: util/parse-events.l $(OUTPUT)util/parse-events-bison.c
195 $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) -t util/parse-events.l > $(OUTPUT)util/parse-events-flex.c 195 $(QUIET_FLEX)$(FLEX) -o $@ --header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) util/parse-events.l
196 196
197$(OUTPUT)util/parse-events-bison.c: util/parse-events.y 197$(OUTPUT)util/parse-events-bison.c: util/parse-events.y
198 $(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c -p parse_events_ 198 $(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c -p parse_events_
199 199
200$(OUTPUT)util/pmu-flex.c: util/pmu.l $(OUTPUT)util/pmu-bison.c 200$(OUTPUT)util/pmu-flex.c: util/pmu.l $(OUTPUT)util/pmu-bison.c
201 $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/pmu-flex.h -t util/pmu.l > $(OUTPUT)util/pmu-flex.c 201 $(QUIET_FLEX)$(FLEX) -o $@ --header-file=$(OUTPUT)util/pmu-flex.h util/pmu.l
202 202
203$(OUTPUT)util/pmu-bison.c: util/pmu.y 203$(OUTPUT)util/pmu-bison.c: util/pmu.y
204 $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c -p perf_pmu_ 204 $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c -p perf_pmu_
diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c
index 97d86d828190..ebfa163b80b5 100644
--- a/tools/perf/bench/numa.c
+++ b/tools/perf/bench/numa.c
@@ -1593,6 +1593,10 @@ static void init_params(struct params *p, const char *name, int argc, const char
1593 p->data_rand_walk = true; 1593 p->data_rand_walk = true;
1594 p->nr_loops = -1; 1594 p->nr_loops = -1;
1595 p->init_random = true; 1595 p->init_random = true;
1596 p->mb_global_str = "1";
1597 p->nr_proc = 1;
1598 p->nr_threads = 1;
1599 p->nr_secs = 5;
1596 p->run_all = argc == 1; 1600 p->run_all = argc == 1;
1597} 1601}
1598 1602
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 8b0e1c9234d9..65a151e36067 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -174,13 +174,20 @@ static inline int perf_evsel__nr_cpus(struct perf_evsel *evsel)
174 174
175static void perf_evsel__reset_stat_priv(struct perf_evsel *evsel) 175static void perf_evsel__reset_stat_priv(struct perf_evsel *evsel)
176{ 176{
177 memset(evsel->priv, 0, sizeof(struct perf_stat)); 177 int i;
178 struct perf_stat *ps = evsel->priv;
179
180 for (i = 0; i < 3; i++)
181 init_stats(&ps->res_stats[i]);
178} 182}
179 183
180static int perf_evsel__alloc_stat_priv(struct perf_evsel *evsel) 184static int perf_evsel__alloc_stat_priv(struct perf_evsel *evsel)
181{ 185{
182 evsel->priv = zalloc(sizeof(struct perf_stat)); 186 evsel->priv = zalloc(sizeof(struct perf_stat));
183 return evsel->priv == NULL ? -ENOMEM : 0; 187 if (evsel == NULL)
188 return -ENOMEM;
189 perf_evsel__reset_stat_priv(evsel);
190 return 0;
184} 191}
185 192
186static void perf_evsel__free_stat_priv(struct perf_evsel *evsel) 193static void perf_evsel__free_stat_priv(struct perf_evsel *evsel)
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index c23418225c2c..ee21fa95ebcf 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -65,10 +65,9 @@ ifndef NO_LIBELF
65 ifdef LIBDW_DIR 65 ifdef LIBDW_DIR
66 LIBDW_CFLAGS := -I$(LIBDW_DIR)/include 66 LIBDW_CFLAGS := -I$(LIBDW_DIR)/include
67 LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib 67 LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
68
69 FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
70 FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) -ldw
71 endif 68 endif
69 FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
70 FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) -ldw
72endif 71endif
73 72
74# include ARCH specific config 73# include ARCH specific config
@@ -278,6 +277,8 @@ else
278 NO_LIBELF := 1 277 NO_LIBELF := 1
279 NO_DWARF := 1 278 NO_DWARF := 1
280 NO_DEMANGLE := 1 279 NO_DEMANGLE := 1
280 NO_LIBUNWIND := 1
281 NO_LIBDW_DWARF_UNWIND := 1
281 else 282 else
282 msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static); 283 msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static);
283 endif 284 endif
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 653a8fe2db95..bfb186900ac0 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -504,6 +504,7 @@ static int do_test_code_reading(bool try_kcore)
504 if (ret < 0) { 504 if (ret < 0) {
505 if (!excl_kernel) { 505 if (!excl_kernel) {
506 excl_kernel = true; 506 excl_kernel = true;
507 perf_evlist__set_maps(evlist, NULL, NULL);
507 perf_evlist__delete(evlist); 508 perf_evlist__delete(evlist);
508 evlist = NULL; 509 evlist = NULL;
509 continue; 510 continue;
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index df0238654698..562762117639 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -985,7 +985,7 @@ static int debuginfo__find_probes(struct debuginfo *dbg,
985 985
986#if _ELFUTILS_PREREQ(0, 142) 986#if _ELFUTILS_PREREQ(0, 142)
987 /* Get the call frame information from this dwarf */ 987 /* Get the call frame information from this dwarf */
988 pf->cfi = dwarf_getcfi(dbg->dbg); 988 pf->cfi = dwarf_getcfi_elf(dwarf_getelf(dbg->dbg));
989#endif 989#endif
990 990
991 off = 0; 991 off = 0;
@@ -1441,13 +1441,15 @@ static int line_range_walk_cb(const char *fname, int lineno,
1441 void *data) 1441 void *data)
1442{ 1442{
1443 struct line_finder *lf = data; 1443 struct line_finder *lf = data;
1444 int err;
1444 1445
1445 if ((strtailcmp(fname, lf->fname) != 0) || 1446 if ((strtailcmp(fname, lf->fname) != 0) ||
1446 (lf->lno_s > lineno || lf->lno_e < lineno)) 1447 (lf->lno_s > lineno || lf->lno_e < lineno))
1447 return 0; 1448 return 0;
1448 1449
1449 if (line_range_add_line(fname, lineno, lf->lr) < 0) 1450 err = line_range_add_line(fname, lineno, lf->lr);
1450 return -EINVAL; 1451 if (err < 0 && err != -EEXIST)
1452 return err;
1451 1453
1452 return 0; 1454 return 0;
1453} 1455}
@@ -1473,14 +1475,15 @@ static int find_line_range_by_line(Dwarf_Die *sp_die, struct line_finder *lf)
1473 1475
1474static int line_range_inline_cb(Dwarf_Die *in_die, void *data) 1476static int line_range_inline_cb(Dwarf_Die *in_die, void *data)
1475{ 1477{
1476 find_line_range_by_line(in_die, data); 1478 int ret = find_line_range_by_line(in_die, data);
1477 1479
1478 /* 1480 /*
1479 * We have to check all instances of inlined function, because 1481 * We have to check all instances of inlined function, because
1480 * some execution paths can be optimized out depends on the 1482 * some execution paths can be optimized out depends on the
1481 * function argument of instances 1483 * function argument of instances. However, if an error occurs,
1484 * it should be handled by the caller.
1482 */ 1485 */
1483 return 0; 1486 return ret < 0 ? ret : 0;
1484} 1487}
1485 1488
1486/* Search function definition from function name */ 1489/* Search function definition from function name */
diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
index d4b601547f1f..2458a1dc2ba9 100644
--- a/virt/kvm/ioapic.c
+++ b/virt/kvm/ioapic.c
@@ -97,6 +97,14 @@ static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic)
97 bitmap_zero(ioapic->rtc_status.dest_map, KVM_MAX_VCPUS); 97 bitmap_zero(ioapic->rtc_status.dest_map, KVM_MAX_VCPUS);
98} 98}
99 99
100static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic);
101
102static void rtc_status_pending_eoi_check_valid(struct kvm_ioapic *ioapic)
103{
104 if (WARN_ON(ioapic->rtc_status.pending_eoi < 0))
105 kvm_rtc_eoi_tracking_restore_all(ioapic);
106}
107
100static void __rtc_irq_eoi_tracking_restore_one(struct kvm_vcpu *vcpu) 108static void __rtc_irq_eoi_tracking_restore_one(struct kvm_vcpu *vcpu)
101{ 109{
102 bool new_val, old_val; 110 bool new_val, old_val;
@@ -120,9 +128,8 @@ static void __rtc_irq_eoi_tracking_restore_one(struct kvm_vcpu *vcpu)
120 } else { 128 } else {
121 __clear_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map); 129 __clear_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map);
122 ioapic->rtc_status.pending_eoi--; 130 ioapic->rtc_status.pending_eoi--;
131 rtc_status_pending_eoi_check_valid(ioapic);
123 } 132 }
124
125 WARN_ON(ioapic->rtc_status.pending_eoi < 0);
126} 133}
127 134
128void kvm_rtc_eoi_tracking_restore_one(struct kvm_vcpu *vcpu) 135void kvm_rtc_eoi_tracking_restore_one(struct kvm_vcpu *vcpu)
@@ -149,10 +156,10 @@ static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic)
149 156
150static void rtc_irq_eoi(struct kvm_ioapic *ioapic, struct kvm_vcpu *vcpu) 157static void rtc_irq_eoi(struct kvm_ioapic *ioapic, struct kvm_vcpu *vcpu)
151{ 158{
152 if (test_and_clear_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map)) 159 if (test_and_clear_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map)) {
153 --ioapic->rtc_status.pending_eoi; 160 --ioapic->rtc_status.pending_eoi;
154 161 rtc_status_pending_eoi_check_valid(ioapic);
155 WARN_ON(ioapic->rtc_status.pending_eoi < 0); 162 }
156} 163}
157 164
158static bool rtc_irq_check_coalesced(struct kvm_ioapic *ioapic) 165static bool rtc_irq_check_coalesced(struct kvm_ioapic *ioapic)
@@ -353,10 +360,16 @@ static int ioapic_service(struct kvm_ioapic *ioapic, int irq, bool line_status)
353 ioapic->irr &= ~(1 << irq); 360 ioapic->irr &= ~(1 << irq);
354 361
355 if (irq == RTC_GSI && line_status) { 362 if (irq == RTC_GSI && line_status) {
363 /*
364 * pending_eoi cannot ever become negative (see
365 * rtc_status_pending_eoi_check_valid) and the caller
366 * ensures that it is only called if it is >= zero, namely
367 * if rtc_irq_check_coalesced returns false).
368 */
356 BUG_ON(ioapic->rtc_status.pending_eoi != 0); 369 BUG_ON(ioapic->rtc_status.pending_eoi != 0);
357 ret = kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe, 370 ret = kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe,
358 ioapic->rtc_status.dest_map); 371 ioapic->rtc_status.dest_map);
359 ioapic->rtc_status.pending_eoi = ret; 372 ioapic->rtc_status.pending_eoi = (ret < 0 ? 0 : ret);
360 } else 373 } else
361 ret = kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe, NULL); 374 ret = kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe, NULL);
362 375