diff options
-rw-r--r-- | Documentation/DocBook/device-drivers.tmpl | 10 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/arm/marvell,kirkwood.txt | 97 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/i2c/trivial-devices.txt | 16 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/pinctrl/brcm,bcm11351-pinctrl.txt | 2 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/vendor-prefixes.txt | 18 | ||||
-rw-r--r-- | MAINTAINERS | 2 | ||||
-rw-r--r-- | arch/arm/configs/bcm_defconfig | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/head.S | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/ivt.S | 2 | ||||
-rw-r--r-- | arch/ia64/kvm/vmm_ivt.S | 2 | ||||
-rw-r--r-- | arch/parisc/include/asm/shmparam.h | 5 | ||||
-rw-r--r-- | arch/parisc/kernel/cache.c | 3 | ||||
-rw-r--r-- | arch/parisc/kernel/sys_parisc.c | 14 | ||||
-rw-r--r-- | arch/parisc/kernel/syscall_table.S | 2 | ||||
-rw-r--r-- | arch/parisc/lib/memcpy.c | 2 | ||||
-rw-r--r-- | arch/parisc/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/s390/include/asm/sigp.h | 19 | ||||
-rw-r--r-- | arch/s390/include/asm/smp.h | 13 | ||||
-rw-r--r-- | arch/s390/include/uapi/asm/unistd.h | 3 | ||||
-rw-r--r-- | arch/s390/kernel/compat_wrapper.c | 3 | ||||
-rw-r--r-- | arch/s390/kernel/dumpstack.c | 8 | ||||
-rw-r--r-- | arch/s390/kernel/ptrace.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/setup.c | 32 | ||||
-rw-r--r-- | arch/s390/kernel/smp.c | 15 | ||||
-rw-r--r-- | arch/s390/kernel/syscalls.S | 1 | ||||
-rw-r--r-- | arch/s390/lib/uaccess.c | 5 | ||||
-rw-r--r-- | arch/s390/mm/fault.c | 140 | ||||
-rw-r--r-- | arch/x86/Makefile | 4 | ||||
-rw-r--r-- | arch/x86/include/asm/kvm_host.h | 2 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_rapl.c | 33 | ||||
-rw-r--r-- | arch/x86/kernel/early-quirks.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/reboot.c | 72 | ||||
-rw-r--r-- | arch/x86/kvm/cpuid.c | 2 | ||||
-rw-r--r-- | arch/x86/kvm/cpuid.h | 8 | ||||
-rw-r--r-- | arch/x86/kvm/mmu.c | 38 | ||||
-rw-r--r-- | arch/x86/kvm/mmu.h | 44 | ||||
-rw-r--r-- | arch/x86/kvm/paging_tmpl.h | 2 | ||||
-rw-r--r-- | arch/x86/kvm/vmx.c | 11 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 10 | ||||
-rw-r--r-- | arch/x86/syscalls/Makefile | 2 | ||||
-rw-r--r-- | arch/x86/syscalls/syscall_32.tbl | 1 | ||||
-rw-r--r-- | arch/x86/tools/Makefile | 2 | ||||
-rw-r--r-- | arch/x86/xen/smp.c | 3 | ||||
-rw-r--r-- | arch/x86/xen/spinlock.c | 5 | ||||
-rw-r--r-- | arch/x86/xen/xen-asm_32.S | 25 | ||||
-rw-r--r-- | drivers/Makefile | 4 | ||||
-rw-r--r-- | drivers/char/hw_random/bcm2835-rng.c | 10 | ||||
-rw-r--r-- | drivers/char/ipmi/Kconfig | 12 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_bt_sm.c | 2 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_kcs_sm.c | 5 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_msghandler.c | 239 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_si_intf.c | 145 | ||||
-rw-r--r-- | drivers/irqchip/irq-vic.c | 6 | ||||
-rw-r--r-- | drivers/md/raid5.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/cadence/Kconfig | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/l2t.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 17 | ||||
-rw-r--r-- | drivers/net/ethernet/marvell/mvneta.c | 41 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/main.c | 181 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mlx4.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 21 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 33 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c | 10 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c | 31 | ||||
-rw-r--r-- | drivers/net/ieee802154/at86rf230.c | 10 | ||||
-rw-r--r-- | drivers/net/vxlan.c | 4 | ||||
-rw-r--r-- | drivers/net/wan/cosa.c | 4 | ||||
-rw-r--r-- | drivers/of/base.c | 10 | ||||
-rw-r--r-- | drivers/of/fdt.c | 2 | ||||
-rw-r--r-- | drivers/pinctrl/Kconfig | 8 | ||||
-rw-r--r-- | drivers/pinctrl/Makefile | 2 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-bcm281xx.c | 1461 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-capri.c | 1454 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-msm.c | 6 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-msm.h | 1 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-nomadik.c | 1 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-rockchip.c | 48 | ||||
-rw-r--r-- | drivers/s390/char/sclp.c | 2 | ||||
-rw-r--r-- | drivers/s390/char/sclp_cmd.c | 2 | ||||
-rw-r--r-- | drivers/s390/char/sclp_vt220.c | 14 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_def.h | 2 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_struct.h | 2 | ||||
-rw-r--r-- | drivers/staging/xgifb/vgatypes.h | 4 | ||||
-rw-r--r-- | drivers/video/Kconfig | 2478 | ||||
-rw-r--r-- | drivers/video/Makefile | 166 | ||||
-rw-r--r-- | drivers/video/console/sticon.c | 2 | ||||
-rw-r--r-- | drivers/video/console/sticore.c | 2 | ||||
-rw-r--r-- | drivers/video/fbdev/68328fb.c (renamed from drivers/video/68328fb.c) | 0 | ||||
-rw-r--r-- | drivers/video/fbdev/Kconfig | 2474 | ||||
-rw-r--r-- | drivers/video/fbdev/Makefile | 152 | ||||
-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/Makefile | 16 | ||||
-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/Kconfig | 10 | ||||
-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/Kconfig | 10 | ||||
-rw-r--r-- | drivers/xen/manage.c | 32 | ||||
-rw-r--r-- | drivers/xen/xen-pciback/pciback_ops.c | 3 | ||||
-rw-r--r-- | drivers/xen/xen-pciback/vpci.c | 2 | ||||
-rw-r--r-- | drivers/xen/xenbus/xenbus_xs.c | 44 | ||||
-rw-r--r-- | fs/xfs/xfs_aops.c | 51 | ||||
-rw-r--r-- | fs/xfs/xfs_bmap.c | 17 | ||||
-rw-r--r-- | fs/xfs/xfs_bmap_util.c | 13 | ||||
-rw-r--r-- | fs/xfs/xfs_buf.c | 16 | ||||
-rw-r--r-- | fs/xfs/xfs_file.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.c | 5 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.h | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_iops.c | 20 | ||||
-rw-r--r-- | fs/xfs/xfs_log.c | 53 | ||||
-rw-r--r-- | fs/xfs/xfs_trace.h | 1 | ||||
-rw-r--r-- | include/linux/filter.h | 1 | ||||
-rw-r--r-- | include/linux/ipmi.h | 2 | ||||
-rw-r--r-- | include/linux/ipmi_smi.h | 11 | ||||
-rw-r--r-- | include/linux/netfilter/nf_conntrack_proto_gre.h | 1 | ||||
-rw-r--r-- | include/linux/of.h | 5 | ||||
-rw-r--r-- | include/linux/reboot.h | 14 | ||||
-rw-r--r-- | include/net/dst.h | 14 | ||||
-rw-r--r-- | include/net/inet6_connection_sock.h | 2 | ||||
-rw-r--r-- | include/net/inet_connection_sock.h | 2 | ||||
-rw-r--r-- | include/net/ip.h | 13 | ||||
-rw-r--r-- | include/net/ip6_route.h | 5 | ||||
-rw-r--r-- | include/net/ip_tunnels.h | 2 | ||||
-rw-r--r-- | include/net/ipv6.h | 2 | ||||
-rw-r--r-- | include/net/netfilter/nf_tables_core.h | 10 | ||||
-rw-r--r-- | include/net/sctp/structs.h | 14 | ||||
-rw-r--r-- | include/net/xfrm.h | 6 | ||||
-rw-r--r-- | kernel/locking/mutex-debug.c | 19 | ||||
-rw-r--r-- | kernel/seccomp.c | 17 | ||||
-rw-r--r-- | kernel/time/tick-common.c | 2 | ||||
-rw-r--r-- | kernel/time/tick-sched.c | 5 | ||||
-rw-r--r-- | kernel/trace/trace_functions.c | 16 | ||||
-rw-r--r-- | kernel/trace/trace_uprobe.c | 6 | ||||
-rw-r--r-- | kernel/user_namespace.c | 11 | ||||
-rw-r--r-- | net/core/dev.c | 2 | ||||
-rw-r--r-- | net/core/dst.c | 15 | ||||
-rw-r--r-- | net/core/filter.c | 9 | ||||
-rw-r--r-- | net/dccp/output.c | 2 | ||||
-rw-r--r-- | net/decnet/dn_route.c | 16 | ||||
-rw-r--r-- | net/ipv4/ip_output.c | 16 | ||||
-rw-r--r-- | net/ipv4/ip_tunnel.c | 2 | ||||
-rw-r--r-- | net/ipv4/ip_tunnel_core.c | 4 | ||||
-rw-r--r-- | net/ipv4/ping.c | 15 | ||||
-rw-r--r-- | net/ipv4/route.c | 6 | ||||
-rw-r--r-- | net/ipv4/tcp_output.c | 2 | ||||
-rw-r--r-- | net/ipv4/xfrm4_output.c | 2 | ||||
-rw-r--r-- | net/ipv6/inet6_connection_sock.c | 3 | ||||
-rw-r--r-- | net/ipv6/ip6_gre.c | 10 | ||||
-rw-r--r-- | net/ipv6/ip6_output.c | 2 | ||||
-rw-r--r-- | net/ipv6/route.c | 19 | ||||
-rw-r--r-- | net/ipv6/sit.c | 5 | ||||
-rw-r--r-- | net/ipv6/xfrm6_output.c | 2 | ||||
-rw-r--r-- | net/l2tp/l2tp_core.c | 4 | ||||
-rw-r--r-- | net/l2tp/l2tp_ip.c | 2 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_core.c | 1 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_pptp.c | 20 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_proto_gre.c | 3 | ||||
-rw-r--r-- | net/netfilter/nf_tables_core.c | 3 | ||||
-rw-r--r-- | net/netfilter/nft_cmp.c | 2 | ||||
-rw-r--r-- | net/openvswitch/vport-gre.c | 2 | ||||
-rw-r--r-- | net/sctp/associola.c | 82 | ||||
-rw-r--r-- | net/sctp/protocol.c | 2 | ||||
-rw-r--r-- | net/sctp/sm_statefuns.c | 2 | ||||
-rw-r--r-- | net/sctp/socket.c | 6 | ||||
-rw-r--r-- | net/sctp/ulpevent.c | 8 | ||||
-rw-r--r-- | net/xfrm/xfrm_policy.c | 2 | ||||
-rw-r--r-- | tools/lib/lockdep/Makefile | 15 | ||||
-rw-r--r-- | tools/lib/lockdep/uinclude/linux/lockdep.h | 3 | ||||
-rw-r--r-- | tools/lib/traceevent/event-parse.c | 109 | ||||
-rw-r--r-- | tools/perf/Documentation/perf-bench.txt | 22 | ||||
-rw-r--r-- | tools/perf/Documentation/perf-top.txt | 1 | ||||
-rw-r--r-- | tools/perf/Makefile.perf | 4 | ||||
-rw-r--r-- | tools/perf/bench/numa.c | 4 | ||||
-rw-r--r-- | tools/perf/builtin-stat.c | 11 | ||||
-rw-r--r-- | tools/perf/config/Makefile | 7 | ||||
-rw-r--r-- | tools/perf/tests/code-reading.c | 1 | ||||
-rw-r--r-- | tools/perf/util/probe-finder.c | 15 | ||||
-rw-r--r-- | virt/kvm/ioapic.c | 25 |
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> |
295 | KAO --> | 295 | KAO --> |
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 @@ | |||
1 | Marvell Kirkwood SoC Family Device Tree Bindings | ||
2 | ------------------------------------------------ | ||
3 | |||
4 | Boards with a SoC of the Marvell Kirkwook family, eg 88f6281 | ||
5 | |||
6 | * Required root node properties: | ||
7 | compatible: must contain "marvell,kirkwood" | ||
8 | |||
9 | In addition, the above compatible shall be extended with the specific | ||
10 | SoC. 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 | |||
19 | And in addition, the compatible shall be extended with the specific | ||
20 | board. 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 | |||
13 | ad,adm9240 ADM9240: Complete System Hardware Monitor for uProcessor-Based Systems | 13 | ad,adm9240 ADM9240: Complete System Hardware Monitor for uProcessor-Based Systems |
14 | adi,adt7461 +/-1C TDM Extended Temp Range I.C | 14 | adi,adt7461 +/-1C TDM Extended Temp Range I.C |
15 | adt7461 +/-1C TDM Extended Temp Range I.C | 15 | adt7461 +/-1C TDM Extended Temp Range I.C |
16 | adi,adt7473 +/-1C TDM Extended Temp Range I.C | ||
17 | adi,adt7475 +/-1C TDM Extended Temp Range I.C | ||
18 | adi,adt7476 +/-1C TDM Extended Temp Range I.C | ||
19 | adi,adt7490 +/-1C TDM Extended Temp Range I.C | ||
16 | at,24c08 i2c serial eeprom (24cxx) | 20 | at,24c08 i2c serial eeprom (24cxx) |
21 | atmel,24c00 i2c serial eeprom (24cxx) | ||
22 | atmel,24c01 i2c serial eeprom (24cxx) | ||
17 | atmel,24c02 i2c serial eeprom (24cxx) | 23 | atmel,24c02 i2c serial eeprom (24cxx) |
24 | atmel,24c04 i2c serial eeprom (24cxx) | ||
25 | atmel,24c16 i2c serial eeprom (24cxx) | ||
26 | atmel,24c32 i2c serial eeprom (24cxx) | ||
27 | atmel,24c64 i2c serial eeprom (24cxx) | ||
28 | atmel,24c128 i2c serial eeprom (24cxx) | ||
29 | atmel,24c256 i2c serial eeprom (24cxx) | ||
30 | atmel,24c512 i2c serial eeprom (24cxx) | ||
31 | atmel,24c1024 i2c serial eeprom (24cxx) | ||
18 | atmel,at97sc3204t i2c trusted platform module (TPM) | 32 | atmel,at97sc3204t i2c trusted platform module (TPM) |
19 | capella,cm32181 CM32181: Ambient Light Sensor | 33 | capella,cm32181 CM32181: Ambient Light Sensor |
20 | catalyst,24c32 i2c serial eeprom | 34 | catalyst,24c32 i2c serial eeprom |
@@ -46,8 +60,10 @@ maxim,ds1050 5 Bit Programmable, Pulse-Width Modulator | |||
46 | maxim,max1237 Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs | 60 | maxim,max1237 Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs |
47 | maxim,max6625 9-Bit/12-Bit Temperature Sensors with I²C-Compatible Serial Interface | 61 | maxim,max6625 9-Bit/12-Bit Temperature Sensors with I²C-Compatible Serial Interface |
48 | mc,rv3029c2 Real Time Clock Module with I2C-Bus | 62 | mc,rv3029c2 Real Time Clock Module with I2C-Bus |
63 | national,lm63 Temperature sensor with integrated fan control | ||
49 | national,lm75 I2C TEMP SENSOR | 64 | national,lm75 I2C TEMP SENSOR |
50 | national,lm80 Serial Interface ACPI-Compatible Microprocessor System Hardware Monitor | 65 | national,lm80 Serial Interface ACPI-Compatible Microprocessor System Hardware Monitor |
66 | national,lm85 Temperature sensor with integrated fan control | ||
51 | national,lm92 ±0.33°C Accurate, 12-Bit + Sign Temperature Sensor and Thermal Window Comparator with Two-Wire Interface | 67 | national,lm92 ±0.33°C Accurate, 12-Bit + Sign Temperature Sensor and Thermal Window Comparator with Two-Wire Interface |
52 | nuvoton,npct501 i2c trusted platform module (TPM) | 68 | nuvoton,npct501 i2c trusted platform module (TPM) |
53 | nxp,pca9556 Octal SMBus and I2C registered interface | 69 | nxp,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): | |||
119 | Example: | 119 | Example: |
120 | // pin controller node | 120 | // pin controller node |
121 | pinctrl@35004800 { | 121 | pinctrl@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 | |||
22 | avago Avago Technologies | 22 | avago Avago Technologies |
23 | bosch Bosch Sensortec GmbH | 23 | bosch Bosch Sensortec GmbH |
24 | brcm Broadcom Corporation | 24 | brcm Broadcom Corporation |
25 | buffalo Buffalo, Inc. | ||
25 | calxeda Calxeda | 26 | calxeda Calxeda |
26 | capella Capella Microsystems, Inc | 27 | capella Capella Microsystems, Inc |
27 | cavium Cavium, Inc. | 28 | cavium Cavium, Inc. |
@@ -33,15 +34,18 @@ cortina Cortina Systems, Inc. | |||
33 | crystalfontz Crystalfontz America, Inc. | 34 | crystalfontz Crystalfontz America, Inc. |
34 | dallas Maxim Integrated Products (formerly Dallas Semiconductor) | 35 | dallas Maxim Integrated Products (formerly Dallas Semiconductor) |
35 | davicom DAVICOM Semiconductor, Inc. | 36 | davicom DAVICOM Semiconductor, Inc. |
36 | dlink D-Link Systems, Inc. | ||
37 | denx Denx Software Engineering | 37 | denx Denx Software Engineering |
38 | digi Digi International Inc. | ||
39 | dlink D-Link Corporation | ||
38 | dmo Data Modul AG | 40 | dmo Data Modul AG |
41 | ebv EBV Elektronik | ||
39 | edt Emerging Display Technologies | 42 | edt Emerging Display Technologies |
40 | emmicro EM Microelectronic | 43 | emmicro EM Microelectronic |
41 | epfl Ecole Polytechnique Fédérale de Lausanne | 44 | epfl Ecole Polytechnique Fédérale de Lausanne |
42 | epson Seiko Epson Corp. | 45 | epson Seiko Epson Corp. |
43 | est ESTeem Wireless Modems | 46 | est ESTeem Wireless Modems |
44 | eukrea Eukréa Electromatique | 47 | eukrea Eukréa Electromatique |
48 | excito Excito | ||
45 | fsl Freescale Semiconductor | 49 | fsl Freescale Semiconductor |
46 | GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 50 | GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc. |
47 | gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 51 | gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. |
@@ -53,13 +57,17 @@ haoyu Haoyu Microelectronic Co. Ltd. | |||
53 | hisilicon Hisilicon Limited. | 57 | hisilicon Hisilicon Limited. |
54 | honeywell Honeywell | 58 | honeywell Honeywell |
55 | hp Hewlett Packard | 59 | hp Hewlett Packard |
60 | i2se I2SE GmbH | ||
56 | ibm International Business Machines (IBM) | 61 | ibm International Business Machines (IBM) |
57 | idt Integrated Device Technologies, Inc. | 62 | idt Integrated Device Technologies, Inc. |
63 | iom Iomega Corporation | ||
58 | img Imagination Technologies Ltd. | 64 | img Imagination Technologies Ltd. |
59 | intel Intel Corporation | 65 | intel Intel Corporation |
60 | intercontrol Inter Control Group | 66 | intercontrol Inter Control Group |
67 | isee ISEE 2007 S.L. | ||
61 | isl Intersil | 68 | isl Intersil |
62 | karo Ka-Ro electronics GmbH | 69 | karo Ka-Ro electronics GmbH |
70 | keymile Keymile GmbH | ||
63 | lacie LaCie | 71 | lacie LaCie |
64 | lantiq Lantiq Semiconductor | 72 | lantiq Lantiq Semiconductor |
65 | lg LG Corporation | 73 | lg LG Corporation |
@@ -70,9 +78,12 @@ maxim Maxim Integrated Products | |||
70 | microchip Microchip Technology Inc. | 78 | microchip Microchip Technology Inc. |
71 | mosaixtech Mosaix Technologies, Inc. | 79 | mosaixtech Mosaix Technologies, Inc. |
72 | moxa Moxa | 80 | moxa Moxa |
81 | mpl MPL AG | ||
82 | mxicy Macronix International Co., Ltd. | ||
73 | national National Semiconductor | 83 | national National Semiconductor |
74 | neonode Neonode Inc. | 84 | neonode Neonode Inc. |
75 | netgear NETGEAR | 85 | netgear NETGEAR |
86 | newhaven Newhaven Display International | ||
76 | nintendo Nintendo | 87 | nintendo Nintendo |
77 | nokia Nokia | 88 | nokia Nokia |
78 | nvidia NVIDIA | 89 | nvidia NVIDIA |
@@ -82,10 +93,12 @@ opencores OpenCores.org | |||
82 | panasonic Panasonic Corporation | 93 | panasonic Panasonic Corporation |
83 | phytec PHYTEC Messtechnik GmbH | 94 | phytec PHYTEC Messtechnik GmbH |
84 | picochip Picochip Ltd | 95 | picochip Picochip Ltd |
96 | plathome Plat'Home Co., Ltd. | ||
85 | powervr PowerVR (deprecated, use img) | 97 | powervr PowerVR (deprecated, use img) |
86 | qca Qualcomm Atheros, Inc. | 98 | qca Qualcomm Atheros, Inc. |
87 | qcom Qualcomm Technologies, Inc | 99 | qcom Qualcomm Technologies, Inc |
88 | qnap QNAP Systems, Inc. | 100 | qnap QNAP Systems, Inc. |
101 | raidsonic RaidSonic Technology GmbH | ||
89 | ralink Mediatek/Ralink Technology Corp. | 102 | ralink Mediatek/Ralink Technology Corp. |
90 | ramtron Ramtron International | 103 | ramtron Ramtron International |
91 | realtek Realtek Semiconductor Corp. | 104 | realtek Realtek Semiconductor Corp. |
@@ -95,6 +108,7 @@ rockchip Fuzhou Rockchip Electronics Co., Ltd | |||
95 | samsung Samsung Semiconductor | 108 | samsung Samsung Semiconductor |
96 | sbs Smart Battery System | 109 | sbs Smart Battery System |
97 | schindler Schindler | 110 | schindler Schindler |
111 | seagate Seagate Technology PLC | ||
98 | sil Silicon Image | 112 | sil Silicon Image |
99 | silabs Silicon Laboratories | 113 | silabs Silicon Laboratories |
100 | simtek | 114 | simtek |
@@ -111,6 +125,7 @@ ti Texas Instruments | |||
111 | tlm Trusted Logic Mobility | 125 | tlm Trusted Logic Mobility |
112 | toshiba Toshiba Corporation | 126 | toshiba Toshiba Corporation |
113 | toumaz Toumaz | 127 | toumaz Toumaz |
128 | usi Universal Scientifc Industrial Co., Ltd. | ||
114 | v3 V3 Semiconductor | 129 | v3 V3 Semiconductor |
115 | via VIA Technologies, Inc. | 130 | via VIA Technologies, Inc. |
116 | voipac Voipac Technologies s.r.o. | 131 | voipac Voipac Technologies s.r.o. |
@@ -119,3 +134,4 @@ wlf Wolfson Microelectronics | |||
119 | wm Wondermedia Technologies, Inc. | 134 | wm Wondermedia Technologies, Inc. |
120 | xes Extreme Engineering Solutions (X-ES) | 135 | xes Extreme Engineering Solutions (X-ES) |
121 | xlnx Xilinx | 136 | xlnx Xilinx |
137 | zyxel ZyXEL Communications Corp. | ||
diff --git a/MAINTAINERS b/MAINTAINERS index 6dc67b1fdb50..80399fff805d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -6782,7 +6782,7 @@ PERFORMANCE EVENTS SUBSYSTEM | |||
6782 | M: Peter Zijlstra <a.p.zijlstra@chello.nl> | 6782 | M: Peter Zijlstra <a.p.zijlstra@chello.nl> |
6783 | M: Paul Mackerras <paulus@samba.org> | 6783 | M: Paul Mackerras <paulus@samba.org> |
6784 | M: Ingo Molnar <mingo@redhat.com> | 6784 | M: Ingo Molnar <mingo@redhat.com> |
6785 | M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> | 6785 | M: Arnaldo Carvalho de Melo <acme@kernel.org> |
6786 | L: linux-kernel@vger.kernel.org | 6786 | L: linux-kernel@vger.kernel.org |
6787 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core | 6787 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core |
6788 | S: Supported | 6788 | S: 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 | |||
132 | CONFIG_CRC7=y | 132 | CONFIG_CRC7=y |
133 | CONFIG_XZ_DEC=y | 133 | CONFIG_XZ_DEC=y |
134 | CONFIG_AVERAGE=y | 134 | CONFIG_AVERAGE=y |
135 | CONFIG_PINCTRL_CAPRI=y | 135 | CONFIG_PINCTRL_BCM281XX=y |
136 | CONFIG_WATCHDOG=y | 136 | CONFIG_WATCHDOG=y |
137 | CONFIG_BCM_KONA_WDT=y | 137 | CONFIG_BCM_KONA_WDT=y |
138 | CONFIG_BCM_KONA_WDT_DEBUG=y | 138 | CONFIG_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 | ||
46 | static int get_offset(unsigned int last_mmap) | 46 | static 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 | ||
51 | static unsigned long shared_align_offset(unsigned int last_mmap, | 51 | static unsigned long shared_align_offset(unsigned int last_mmap, |
@@ -57,8 +57,8 @@ static unsigned long shared_align_offset(unsigned int last_mmap, | |||
57 | static inline unsigned long COLOR_ALIGN(unsigned long addr, | 57 | static 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 | |||
36 | static 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; } | |||
50 | static inline int smp_vcpu_scheduled(int cpu) { return 1; } | 52 | static inline int smp_vcpu_scheduled(int cpu) { return 1; } |
51 | static inline void smp_yield_cpu(int cpu) { } | 53 | static inline void smp_yield_cpu(int cpu) { } |
52 | static inline void smp_yield(void) { } | 54 | static inline void smp_yield(void) { } |
53 | static inline void smp_stop_cpu(void) { } | ||
54 | static inline void smp_fill_possible_mask(void) { } | 55 | static inline void smp_fill_possible_mask(void) { } |
55 | 56 | ||
57 | static 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 | |||
213 | COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, flags); | 213 | COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, flags); |
214 | COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags); | 214 | COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags); |
215 | COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags); | 215 | COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags); |
216 | COMPAT_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 | ||
1032 | static int no_removal_warning __initdata; | ||
1033 | |||
1034 | static 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 | |||
1041 | static 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 | } | ||
1060 | early_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 | */ |
85 | static 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 | |||
100 | static inline int __pcpu_sigp_relax(u16 addr, u8 order, u32 parm, u32 *status) | 85 | static 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) | |||
355 | SYSCALL(sys_finit_module,sys_finit_module,compat_sys_finit_module) | 355 | SYSCALL(sys_finit_module,sys_finit_module,compat_sys_finit_module) |
356 | SYSCALL(sys_sched_setattr,sys_sched_setattr,compat_sys_sched_setattr) /* 345 */ | 356 | SYSCALL(sys_sched_setattr,sys_sched_setattr,compat_sys_sched_setattr) /* 345 */ |
357 | SYSCALL(sys_sched_getattr,sys_sched_getattr,compat_sys_sched_getattr) | 357 | SYSCALL(sys_sched_getattr,sys_sched_getattr,compat_sys_sched_getattr) |
358 | SYSCALL(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 | ||
360 | unsigned long __strnlen_user(const char __user *src, unsigned long size) | 357 | unsigned 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 | ||
129 | static 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 | ||
137 | static 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); | ||
183 | out: | ||
184 | pr_cont("\n"); | ||
185 | return; | ||
186 | bad: | ||
187 | pr_cont("BAD\n"); | ||
188 | } | ||
189 | |||
190 | #else /* CONFIG_64BIT */ | ||
191 | |||
192 | static 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); | ||
208 | out: | ||
209 | pr_cont("\n"); | ||
210 | return; | ||
211 | bad: | ||
212 | pr_cont("BAD\n"); | ||
213 | } | ||
214 | |||
215 | #endif /* CONFIG_64BIT */ | ||
216 | |||
217 | static 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 | |||
129 | static inline void report_user_fault(struct pt_regs *regs, long signr) | 256 | static 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: | |||
250 | PHONY += kvmconfig | 250 | PHONY += kvmconfig |
251 | kvmconfig: | 251 | kvmconfig: |
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 | ||
256 | define archhelp | 256 | define 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 | ||
434 | static 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 | |||
428 | static struct attribute_group rapl_pmu_events_group = { | 452 | static 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 | */ |
115 | static int __init set_pci_reboot(const struct dmi_system_id *d) | 115 | static 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 | */ |
476 | static void native_machine_emergency_restart(void) | 479 | static 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 | ||
51 | static 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 | |||
51 | static inline bool guest_cpuid_has_fsgsbase(struct kvm_vcpu *vcpu) | 59 | static 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 | ||
3604 | static void update_permission_bitmask(struct kvm_vcpu *vcpu, | 3604 | void 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 | ||
53 | int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4]); | 59 | int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4]); |
54 | void kvm_mmu_set_mmio_spte_mask(u64 mmio_mask); | 60 | void 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); | |||
73 | void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context); | 79 | void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context); |
74 | void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context, | 80 | void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context, |
75 | bool execonly); | 81 | bool execonly); |
82 | void update_permission_bitmask(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, | ||
83 | bool ept); | ||
76 | 84 | ||
77 | static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm) | 85 | static 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 | */ |
113 | static inline bool permission_fault(struct kvm_mmu *mmu, unsigned pte_access, | 121 | static 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 | ||
119 | void kvm_mmu_invalidate_zap_all_pages(struct kvm *kvm); | 147 | void 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 | ||
55 | targets += $(uapisyshdr-y) $(syshdr-y) | 55 | targets += $(uapisyshdr-y) $(syshdr-y) |
56 | 56 | ||
57 | PHONY += all | ||
57 | all: $(addprefix $(uapi)/,$(uapisyshdr-y)) | 58 | all: $(addprefix $(uapi)/,$(uapisyshdr-y)) |
58 | all: $(addprefix $(out)/,$(syshdr-y)) | 59 | all: $(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 @@ | |||
359 | 350 i386 finit_module sys_finit_module | 359 | 350 i386 finit_module sys_finit_module |
360 | 351 i386 sched_setattr sys_sched_setattr | 360 | 351 i386 sched_setattr sys_sched_setattr |
361 | 352 i386 sched_getattr sys_sched_getattr | 361 | 352 i386 sched_getattr sys_sched_getattr |
362 | 353 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 | |||
40 | HOST_EXTRACFLAGS += -I$(srctree)/tools/include | 40 | HOST_EXTRACFLAGS += -I$(srctree)/tools/include |
41 | hostprogs-y += relocs | 41 | hostprogs-y += relocs |
42 | relocs-objs := relocs_32.o relocs_64.o relocs_common.o | 42 | relocs-objs := relocs_32.o relocs_64.o relocs_common.o |
43 | PHONY += relocs | ||
43 | relocs: $(obj)/relocs | 44 | relocs: $(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(¶virt_ticketlocks_enabled); | 296 | static_key_slow_inc(¶virt_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 | ||
80 | 1: | ||
81 | popw %fs | ||
82 | .pushsection .fixup, "ax" | ||
83 | 2: movw $0, (%esp) | ||
84 | jmp 1b | ||
85 | .popsection | ||
86 | _ASM_EXTABLE(1b,2b) | ||
87 | .endm | ||
88 | |||
78 | ENTRY(xen_iret) | 89 | ENTRY(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/ | |||
53 | obj-$(CONFIG_CONNECTOR) += connector/ | 53 | obj-$(CONFIG_CONNECTOR) += connector/ |
54 | 54 | ||
55 | # i810fb and intelfb depend on char/agp/ | 55 | # i810fb and intelfb depend on char/agp/ |
56 | obj-$(CONFIG_FB_I810) += video/i810/ | 56 | obj-$(CONFIG_FB_I810) += video/fbdev/i810/ |
57 | obj-$(CONFIG_FB_INTEL) += video/intelfb/ | 57 | obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/ |
58 | 58 | ||
59 | obj-$(CONFIG_PARPORT) += parport/ | 59 | obj-$(CONFIG_PARPORT) += parport/ |
60 | obj-y += base/ block/ misc/ mfd/ nfc/ | 60 | obj-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 | ||
53 | config 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 | |||
53 | config IPMI_WATCHDOG | 65 | config 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 | ||
353 | static inline int read_all_bytes(struct si_sm_data *bt) | 353 | static 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); | |||
55 | static int ipmi_init_msghandler(void); | 55 | static int ipmi_init_msghandler(void); |
56 | static void smi_recv_tasklet(unsigned long); | 56 | static void smi_recv_tasklet(unsigned long); |
57 | static void handle_new_recv_msgs(ipmi_smi_t intf); | 57 | static void handle_new_recv_msgs(ipmi_smi_t intf); |
58 | static void need_waiter(ipmi_smi_t intf); | ||
58 | 59 | ||
59 | static int initialized; | 60 | static 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 | */ |
79 | struct ipmi_user { | 94 | struct 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 | ||
98 | struct cmd_rcvr { | 113 | struct 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); | |||
451 | static LIST_HEAD(smi_watchers); | 469 | static LIST_HEAD(smi_watchers); |
452 | static DEFINE_MUTEX(smi_watchers_mutex); | 470 | static 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 | } |
1185 | EXPORT_SYMBOL(ipmi_set_maintenance_mode); | 1212 | EXPORT_SYMBOL(ipmi_set_maintenance_mode); |
1186 | 1213 | ||
1187 | int ipmi_set_gets_events(ipmi_user_t user, int val) | 1214 | int 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 | ||
3966 | static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent, | 4009 | static 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 | ||
4043 | static void ipmi_timeout_handler(long timeout_period) | 4091 | static 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 | ||
4097 | static void ipmi_request_event(void) | 4143 | static 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 | ||
4119 | static struct timer_list ipmi_timer; | 4156 | static 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 | |||
4135 | static atomic_t stop_operation; | 4158 | static atomic_t stop_operation; |
4136 | static unsigned int ticks_to_req_ev = IPMI_REQUEST_EV_TIME; | ||
4137 | 4159 | ||
4138 | static void ipmi_timeout(unsigned long data) | 4160 | static 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 | ||
4197 | static 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 | ||
4155 | static atomic_t smi_msg_inuse_count = ATOMIC_INIT(0); | 4204 | static atomic_t smi_msg_inuse_count = ATOMIC_INIT(0); |
4156 | static atomic_t recv_msg_inuse_count = ATOMIC_INIT(0); | 4205 | static 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 { | |||
297 | static int force_kipmid[SI_MAX_PARMS]; | 303 | static int force_kipmid[SI_MAX_PARMS]; |
298 | static int num_force_kipmid; | 304 | static int num_force_kipmid; |
299 | #ifdef CONFIG_PCI | 305 | #ifdef CONFIG_PCI |
300 | static int pci_registered; | 306 | static bool pci_registered; |
301 | #endif | 307 | #endif |
302 | #ifdef CONFIG_ACPI | 308 | #ifdef CONFIG_ACPI |
303 | static int pnp_registered; | 309 | static bool pnp_registered; |
304 | #endif | 310 | #endif |
305 | #ifdef CONFIG_PARISC | 311 | #ifdef CONFIG_PARISC |
306 | static int parisc_registered; | 312 | static bool parisc_registered; |
307 | #endif | 313 | #endif |
308 | 314 | ||
309 | static unsigned int kipmid_max_busy_us[SI_MAX_PARMS]; | 315 | static unsigned int kipmid_max_busy_us[SI_MAX_PARMS]; |
310 | static int num_max_busy_us; | 316 | static int num_max_busy_us; |
311 | 317 | ||
312 | static int unload_when_empty = 1; | 318 | static bool unload_when_empty = true; |
313 | 319 | ||
314 | static int add_smi(struct smi_info *smi); | 320 | static int add_smi(struct smi_info *smi); |
315 | static int try_smi_init(struct smi_info *smi); | 321 | static 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 | ||
443 | static 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 | ||
868 | static 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 | |||
856 | static void sender(void *send_info, | 881 | static 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 | ||
929 | static void set_run_to_completion(void *send_info, int i_run_to_completion) | 938 | static 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 | ||
1078 | static 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 | |||
1052 | static int initialized; | 1089 | static int initialized; |
1053 | 1090 | ||
1054 | static void smi_timeout(unsigned long data) | 1091 | static 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 | ||
1104 | static irqreturn_t si_irq_handler(int irq, void *data) | 1140 | static 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 | ||
1191 | static void set_maintenance_mode(void *send_info, int enable) | 1226 | static 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 |
1230 | static bool si_trypci = 1; | 1266 | static bool si_trypci = 1; |
1231 | #endif | 1267 | #endif |
1232 | static bool si_trydefaults = 1; | 1268 | static bool si_trydefaults = IS_ENABLED(CONFIG_IPMI_SI_PROBE_DEFAULTS); |
1233 | static char *si_type[SI_MAX_PARMS]; | 1269 | static char *si_type[SI_MAX_PARMS]; |
1234 | #define MAX_SI_TYPE_STR 30 | 1270 | #define MAX_SI_TYPE_STR 30 |
1235 | static char si_type_str[MAX_SI_TYPE_STR]; | 1271 | static char si_type_str[MAX_SI_TYPE_STR]; |
@@ -1328,7 +1364,7 @@ module_param_array(force_kipmid, int, &num_force_kipmid, 0); | |||
1328 | MODULE_PARM_DESC(force_kipmid, "Force the kipmi daemon to be enabled (1) or" | 1364 | MODULE_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."); |
1331 | module_param(unload_when_empty, int, 0); | 1367 | module_param(unload_when_empty, bool, 0); |
1332 | MODULE_PARM_DESC(unload_when_empty, "Unload the module if no interfaces are" | 1368 | MODULE_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) | |||
228 | static void vic_handle_irq_cascaded(unsigned int irq, struct irq_desc *desc) | 229 | static 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 | ||
8630 | static int | 8631 | static int |
8631 | bnx2_suspend(struct device *device) | 8632 | bnx2_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 | ||
8669 | static SIMPLE_DEV_PM_OPS(bnx2_pm_ops, bnx2_suspend, bnx2_resume); | 8669 | static 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 | ||
5 | config NET_CADENCE | 5 | config 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 | ||
23 | config ARM_AT91_ETHER | 23 | config 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 | ||
31 | config MACB | 31 | config 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; |
3563 | err: | 3572 | err: |
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 */ | ||
717 | static 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 */ | ||
732 | static 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 */ |
716 | static void mvneta_port_up(struct mvneta_port *pp) | 744 | static 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 | ||
2593 | err_free_dev: | 2593 | err_free_dev: |
@@ -2604,85 +2604,110 @@ err_disable_pdev: | |||
2604 | 2604 | ||
2605 | static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | 2605 | static 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 | ||
2612 | static void mlx4_remove_one(struct pci_dev *pdev) | 2623 | static 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 | |||
2703 | static 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 | ||
2688 | int mlx4_restart_one(struct pci_dev *pdev) | 2713 | int 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); | |||
2747 | static pci_ers_result_t mlx4_pci_err_detected(struct pci_dev *pdev, | 2772 | static 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 | ||
2756 | static pci_ers_result_t mlx4_pci_slot_reset(struct pci_dev *pdev) | 2781 | static 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) | |||
2161 | int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter) | 2159 | int 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; |
336 | out_free_cfg: | 334 | out_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 | ||
689 | restore: | ||
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 | ||
692 | restore: | ||
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 | ||
727 | int qlcnic_enable_msix(struct qlcnic_adapter *adapter, u32 num_msix) | 731 | int 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 | } |
1761 | EXPORT_SYMBOL_GPL(vxlan_xmit_skb); | 1761 | EXPORT_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 | */ |
494 | static int __reserved_mem_check_root(unsigned long node) | 494 | static 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 | ||
107 | config PINCTRL_CAPRI | 107 | config 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 | |||
21 | obj-$(CONFIG_PINCTRL_AT91) += pinctrl-at91.o | 21 | obj-$(CONFIG_PINCTRL_AT91) += pinctrl-at91.o |
22 | obj-$(CONFIG_PINCTRL_BCM2835) += pinctrl-bcm2835.o | 22 | obj-$(CONFIG_PINCTRL_BCM2835) += pinctrl-bcm2835.o |
23 | obj-$(CONFIG_PINCTRL_BAYTRAIL) += pinctrl-baytrail.o | 23 | obj-$(CONFIG_PINCTRL_BAYTRAIL) += pinctrl-baytrail.o |
24 | obj-$(CONFIG_PINCTRL_CAPRI) += pinctrl-capri.o | 24 | obj-$(CONFIG_PINCTRL_BCM281XX) += pinctrl-bcm281xx.o |
25 | obj-$(CONFIG_PINCTRL_IMX) += pinctrl-imx.o | 25 | obj-$(CONFIG_PINCTRL_IMX) += pinctrl-imx.o |
26 | obj-$(CONFIG_PINCTRL_IMX1_CORE) += pinctrl-imx1-core.o | 26 | obj-$(CONFIG_PINCTRL_IMX1_CORE) += pinctrl-imx1-core.o |
27 | obj-$(CONFIG_PINCTRL_IMX27) += pinctrl-imx27.o | 27 | obj-$(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 | */ | ||
64 | enum 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 | |||
71 | static enum bcm281xx_pin_type std_pin = BCM281XX_PIN_TYPE_STD; | ||
72 | static enum bcm281xx_pin_type i2c_pin = BCM281XX_PIN_TYPE_I2C; | ||
73 | static enum bcm281xx_pin_type hdmi_pin = BCM281XX_PIN_TYPE_HDMI; | ||
74 | |||
75 | /** | ||
76 | * bcm281xx_pin_function- define pin function | ||
77 | */ | ||
78 | struct 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 | */ | ||
88 | struct 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 | */ | ||
382 | static 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 | |||
656 | static 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 | |||
935 | static 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 | |||
942 | static 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 | |||
949 | static 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 | */ | ||
970 | static 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 | |||
979 | static 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 | |||
986 | static 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 | |||
993 | static 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 | |||
1001 | static 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 | |||
1014 | static 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 | |||
1021 | static 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 | |||
1030 | static 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 | |||
1037 | static 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 | |||
1045 | static 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 | |||
1058 | static 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 | |||
1083 | static 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 | |||
1090 | static 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 */ | ||
1099 | static 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 | */ | ||
1210 | static 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 */ | ||
1215 | static 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 */ | ||
1285 | static 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 | |||
1329 | static 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 | |||
1386 | static 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 | |||
1391 | static 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 | |||
1399 | int __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 | |||
1443 | static struct of_device_id bcm281xx_pinctrl_of_match[] = { | ||
1444 | { .compatible = "brcm,bcm11351-pinctrl", }, | ||
1445 | { }, | ||
1446 | }; | ||
1447 | |||
1448 | static 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 | |||
1456 | module_platform_driver_probe(bcm281xx_pinctrl_driver, bcm281xx_pinctrl_probe); | ||
1457 | |||
1458 | MODULE_AUTHOR("Broadcom Corporation <bcm-kernel-feedback-list@broadcom.com>"); | ||
1459 | MODULE_AUTHOR("Sherman Yin <syin@broadcom.com>"); | ||
1460 | MODULE_DESCRIPTION("Broadcom BCM281xx pinctrl driver"); | ||
1461 | MODULE_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 | */ | ||
64 | enum 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 | |||
71 | static enum capri_pin_type std_pin = CAPRI_PIN_TYPE_STD; | ||
72 | static enum capri_pin_type i2c_pin = CAPRI_PIN_TYPE_I2C; | ||
73 | static enum capri_pin_type hdmi_pin = CAPRI_PIN_TYPE_HDMI; | ||
74 | |||
75 | /** | ||
76 | * capri_pin_function- define pin function | ||
77 | */ | ||
78 | struct 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 | */ | ||
88 | struct 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 | */ | ||
382 | static 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 | |||
654 | static 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 | |||
933 | static 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 | |||
940 | static 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 | |||
947 | static 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 | */ | ||
968 | static 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 | |||
976 | static 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 | |||
983 | static 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 | |||
990 | static 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 | |||
998 | static 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 | |||
1011 | static 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 | |||
1018 | static 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 | |||
1027 | static 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 | |||
1034 | static 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 | |||
1042 | static 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 | |||
1055 | static 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 | |||
1079 | static 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 | |||
1086 | static 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 */ | ||
1095 | static 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 | */ | ||
1206 | static const u16 capri_pullup_map[] = {1200, 1800, 720, 2700, 831, 1080, 568}; | ||
1207 | |||
1208 | /* Goes through the configs and update register val/mask */ | ||
1209 | static 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 */ | ||
1279 | static 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 | |||
1323 | static 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 | |||
1380 | static 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 | |||
1385 | static 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 | |||
1393 | int __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 | |||
1437 | static struct of_device_id capri_pinctrl_of_match[] = { | ||
1438 | { .compatible = "brcm,bcm11351-pinctrl", }, | ||
1439 | { }, | ||
1440 | }; | ||
1441 | |||
1442 | static 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 | |||
1450 | module_platform_driver_probe(capri_pinctrl_driver, capri_pinctrl_probe); | ||
1451 | |||
1452 | MODULE_AUTHOR("Sherman Yin <syin@broadcom.com>"); | ||
1453 | MODULE_DESCRIPTION("Broadcom Capri pinctrl driver"); | ||
1454 | MODULE_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 | */ |
345 | static void rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux) | 345 | static 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, | |||
97 | static int __sclp_vt220_emit(struct sclp_vt220_request *request); | 97 | static int __sclp_vt220_emit(struct sclp_vt220_request *request); |
98 | static void sclp_vt220_emit_current(void); | 98 | static 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 */ |
101 | static struct sclp_register sclp_vt220_register = { | 101 | static 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 */ | ||
107 | static 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 | ||
727 | out_reg: | ||
728 | tty_unregister_driver(driver); | ||
721 | out_init: | 729 | out_init: |
722 | __sclp_vt220_cleanup(); | 730 | __sclp_vt220_cleanup(); |
723 | out_driver: | 731 | out_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 | ||
5 | struct XGI_LVDSCRT1HDataStruct { | 5 | struct 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 |
9 | enum XGI_VB_CHIP_TYPE { | 9 | enum 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 | ||
22 | source "drivers/gpu/host1x/Kconfig" | 22 | source "drivers/gpu/host1x/Kconfig" |
23 | 23 | ||
24 | menu "Direct Rendering Manager" | ||
24 | source "drivers/gpu/drm/Kconfig" | 25 | source "drivers/gpu/drm/Kconfig" |
26 | endmenu | ||
27 | |||
28 | menu "Frame buffer Devices" | ||
29 | source "drivers/video/fbdev/Kconfig" | ||
30 | endmenu | ||
31 | |||
32 | source "drivers/video/backlight/Kconfig" | ||
25 | 33 | ||
26 | config VGASTATE | 34 | config VGASTATE |
27 | tristate | 35 | tristate |
@@ -33,2482 +41,14 @@ config VIDEOMODE_HELPERS | |||
33 | config HDMI | 41 | config HDMI |
34 | bool | 42 | bool |
35 | 43 | ||
36 | menuconfig 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 | |||
70 | config 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 | |||
86 | config FB_DDC | ||
87 | tristate | ||
88 | depends on FB | ||
89 | select I2C_ALGOBIT | ||
90 | select I2C | ||
91 | default n | ||
92 | |||
93 | config 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 | |||
101 | config 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 | |||
110 | config 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 | |||
119 | config 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 | |||
128 | config 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 | |||
137 | config 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 | |||
146 | config 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 | |||
155 | config 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 | |||
164 | menuconfig 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 | |||
173 | choice | ||
174 | prompt "Choice endianness support" | ||
175 | depends on FB_FOREIGN_ENDIAN | ||
176 | |||
177 | config FB_BOTH_ENDIAN | ||
178 | bool "Support for Big- and Little-Endian framebuffers" | ||
179 | |||
180 | config FB_BIG_ENDIAN | ||
181 | bool "Support for Big-Endian framebuffers only" | ||
182 | |||
183 | config FB_LITTLE_ENDIAN | ||
184 | bool "Support for Little-Endian framebuffers only" | ||
185 | |||
186 | endchoice | ||
187 | |||
188 | config FB_SYS_FOPS | ||
189 | tristate | ||
190 | depends on FB | ||
191 | default n | ||
192 | |||
193 | config FB_DEFERRED_IO | ||
194 | bool | ||
195 | depends on FB | ||
196 | |||
197 | config FB_HECUBA | ||
198 | tristate | ||
199 | depends on FB | ||
200 | depends on FB_DEFERRED_IO | ||
201 | |||
202 | config 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 | |||
210 | config FB_MACMODES | ||
211 | tristate | ||
212 | depends on FB | ||
213 | default n | ||
214 | |||
215 | config FB_BACKLIGHT | ||
216 | bool | ||
217 | depends on FB | ||
218 | select BACKLIGHT_LCD_SUPPORT | ||
219 | select BACKLIGHT_CLASS_DEVICE | ||
220 | default n | ||
221 | |||
222 | config 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 | |||
233 | config 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 | |||
251 | comment "Frame buffer hardware drivers" | ||
252 | depends on FB | ||
253 | |||
254 | config 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 | |||
263 | config 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 | |||
281 | config 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 | |||
301 | config 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 | |||
307 | config 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 | |||
324 | config 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 | |||
335 | config 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 | |||
345 | config 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 | |||
359 | config 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 | |||
368 | config 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 | |||
380 | config 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 | |||
389 | config 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 | |||
398 | config FB_APOLLO | ||
399 | bool | ||
400 | depends on (FB = y) && APOLLO | ||
401 | default y | ||
402 | select FB_CFB_FILLRECT | ||
403 | select FB_CFB_IMAGEBLIT | ||
404 | |||
405 | config 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 | |||
413 | config 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 | |||
423 | config 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 | |||
431 | config 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 | |||
440 | config 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 | |||
449 | config 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 | |||
459 | config 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 | |||
475 | config 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 | |||
485 | config 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 | |||
496 | config 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 | |||
507 | config 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 | |||
518 | config 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 | |||
529 | config 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 | |||
539 | config 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 | |||
548 | config 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 | |||
557 | config 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 | |||
572 | config 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 | |||
581 | config 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 | |||
593 | config 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 | |||
609 | config 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 | |||
623 | config 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 | |||
638 | choice | ||
639 | prompt "Video mode support" | ||
640 | depends on FB_BFIN_7393 | ||
641 | default NTSC | ||
642 | |||
643 | config NTSC | ||
644 | bool 'NTSC 720x480' | ||
645 | |||
646 | config PAL | ||
647 | bool 'PAL 720x576' | ||
648 | |||
649 | config NTSC_640x480 | ||
650 | bool 'NTSC 640x480 (Experimental)' | ||
651 | |||
652 | config PAL_640x480 | ||
653 | bool 'PAL 640x480 (Experimental)' | ||
654 | |||
655 | config NTSC_YCBCR | ||
656 | bool 'NTSC 720x480 YCbCR input' | ||
657 | |||
658 | config PAL_YCBCR | ||
659 | bool 'PAL 720x576 YCbCR input' | ||
660 | |||
661 | endchoice | ||
662 | |||
663 | choice | ||
664 | prompt "Size of ADV7393 frame buffer memory Single/Double Size" | ||
665 | depends on (FB_BFIN_7393) | ||
666 | default ADV7393_1XMEM | ||
667 | |||
668 | config ADV7393_1XMEM | ||
669 | bool 'Single' | ||
670 | |||
671 | config ADV7393_2XMEM | ||
672 | bool 'Double' | ||
673 | endchoice | ||
674 | |||
675 | config 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 | |||
697 | config 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 | |||
705 | config FB_HP300 | ||
706 | bool | ||
707 | depends on (FB = y) && DIO | ||
708 | select FB_CFB_IMAGEBLIT | ||
709 | default y | ||
710 | |||
711 | config 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 | |||
732 | config 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 | |||
750 | config 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 | |||
763 | config 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 | |||
774 | config 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 | |||
787 | config 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 | |||
799 | config 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 | |||
809 | config 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 | |||
817 | config 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 | |||
823 | config 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 | |||
832 | config 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 | |||
841 | config 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 | |||
850 | config 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 | |||
859 | config 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 | |||
869 | config 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 | |||
879 | config 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 | |||
889 | config 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 | |||
899 | config 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 | |||
909 | config 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 | |||
922 | config 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 | |||
935 | config 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 | |||
947 | config 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 | |||
968 | config 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 | |||
984 | config 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 | |||
995 | config 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 | |||
1006 | config 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 | |||
1013 | config 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 | |||
1023 | config 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 | |||
1042 | config 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 | |||
1055 | config 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 | |||
1064 | config 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 | |||
1071 | config 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 | |||
1089 | config 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 | |||
1102 | config 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 | |||
1111 | config 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 | |||
1118 | config 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 | |||
1130 | config 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 | |||
1148 | config 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 | |||
1171 | config FB_I810_I2C | ||
1172 | bool "Enable DDC Support" | ||
1173 | depends on FB_I810 && FB_I810_GTF | ||
1174 | select FB_DDC | ||
1175 | help | ||
1176 | |||
1177 | config 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 | |||
1187 | config 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 | |||
1193 | config 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 | |||
1214 | config 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 | |||
1222 | config 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 | |||
1230 | config 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 | |||
1251 | config 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 | |||
1261 | config 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 | |||
1271 | config 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 | |||
1301 | config 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 | |||
1318 | config 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 | |||
1349 | config 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 | |||
1366 | config 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 | |||
1374 | config 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 | |||
1381 | config 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 | |||
1390 | config 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 | |||
1406 | config 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 | |||
1413 | config 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 | |||
1428 | config 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 | |||
1438 | config 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 | |||
1445 | config 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 | |||
1456 | config 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 | |||
1463 | config 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 | |||
1476 | config 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 | |||
1484 | config 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 | |||
1501 | config 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 | |||
1514 | config 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 | |||
1523 | config 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 | |||
1538 | config 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 | |||
1544 | config 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 | |||
1552 | config 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 | |||
1571 | if FB_VIA | ||
1572 | |||
1573 | config 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 | |||
1583 | config 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 | |||
1594 | endif | ||
1595 | |||
1596 | config 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 | |||
1611 | config 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 | |||
1624 | config 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 | |||
1639 | config 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 | |||
1646 | config 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 | |||
1654 | config 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 | |||
1672 | config 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 | |||
1686 | config 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 | |||
1706 | config 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 | |||
1720 | config 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 | |||
1732 | config 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 | |||
1742 | choice | ||
1743 | depends on FB_CARMINE | ||
1744 | prompt "DRAM timing" | ||
1745 | default FB_CARMINE_DRAM_EVAL | ||
1746 | |||
1747 | config FB_CARMINE_DRAM_EVAL | ||
1748 | bool "Eval board timings" | ||
1749 | help | ||
1750 | Use timings which work on the eval card. | ||
1751 | |||
1752 | config CARMINE_DRAM_CUSTOM | ||
1753 | bool "Custom board timings" | ||
1754 | help | ||
1755 | Use custom board timings. | ||
1756 | endchoice | ||
1757 | |||
1758 | config 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 | |||
1769 | config 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 | |||
1781 | config 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 | |||
1793 | config 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 | |||
1806 | config 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 | |||
1814 | source "drivers/video/geode/Kconfig" | ||
1815 | |||
1816 | config 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 | |||
1826 | config 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 | |||
1836 | config 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 | |||
1846 | config 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 | |||
1857 | config 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 | |||
1868 | config 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 | |||
1878 | config 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 | |||
1888 | config 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 | |||
1898 | config 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 | |||
1915 | config FB_PXA_OVERLAY | ||
1916 | bool "Support PXA27x/PXA3xx Overlay(s) as framebuffer" | ||
1917 | default n | ||
1918 | depends on FB_PXA && (PXA27x || PXA3xx) | ||
1919 | |||
1920 | config FB_PXA_SMARTPANEL | ||
1921 | bool "PXA Smartpanel LCD support" | ||
1922 | default n | ||
1923 | depends on FB_PXA | ||
1924 | |||
1925 | config 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 | |||
1942 | config 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 | |||
1952 | config 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 | |||
1962 | config 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 | |||
1972 | config 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 | |||
1983 | config 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 | |||
2000 | config 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 | |||
2013 | config 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 | |||
2023 | config 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 | |||
2040 | config FB_TMIO_ACCELL | ||
2041 | bool "tmiofb acceleration" | ||
2042 | depends on FB_TMIO | ||
2043 | default y | ||
2044 | |||
2045 | config 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 | |||
2064 | config 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 | |||
2070 | config 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. | ||
2086 | config 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 | |||
2093 | config 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 | |||
2103 | config GPM1040A0_320X240 | ||
2104 | bool "Giantplus Technology GPM1040A0 320x240 Color TFT LCD" | ||
2105 | depends on FB_NUC900 | ||
2106 | |||
2107 | config 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 | |||
2124 | config 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 | |||
2140 | config 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 | |||
2155 | config 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 | |||
2167 | config 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 | |||
2178 | config 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 | |||
2188 | config 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 | |||
2199 | config 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 | |||
2208 | config FB_COBALT | ||
2209 | tristate "Cobalt server LCD frame buffer support" | ||
2210 | depends on FB && (MIPS_COBALT || MIPS_SEAD3) | ||
2211 | |||
2212 | config 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 | |||
2227 | config 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 | |||
2241 | config 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 | |||
2264 | config 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 | |||
2280 | config 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 | |||
2293 | config 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 | |||
2303 | choice | ||
2304 | prompt "GDC variant" | ||
2305 | depends on FB_MB862XX | ||
2306 | |||
2307 | config 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 | |||
2314 | config 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 | |||
2322 | endchoice | ||
2323 | |||
2324 | config 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 | |||
2333 | config 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 | |||
2344 | config 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 | |||
2351 | config 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 | |||
2358 | config 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 | |||
2370 | config 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 | |||
2384 | config 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 | |||
2401 | config 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 | |||
2409 | config 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 | |||
2417 | config 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 | |||
2426 | config 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 | |||
2437 | config 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 | |||
2448 | config 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 | |||
2457 | config 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 | |||
2473 | source "drivers/video/omap/Kconfig" | ||
2474 | source "drivers/video/omap2/Kconfig" | ||
2475 | source "drivers/video/exynos/Kconfig" | ||
2476 | source "drivers/video/mmp/Kconfig" | ||
2477 | source "drivers/video/backlight/Kconfig" | ||
2478 | |||
2479 | if VT | 44 | if VT |
2480 | source "drivers/video/console/Kconfig" | 45 | source "drivers/video/console/Kconfig" |
2481 | endif | 46 | endif |
2482 | 47 | ||
2483 | if FB || SGI_NEWPORT_CONSOLE | 48 | if FB || SGI_NEWPORT_CONSOLE |
2484 | source "drivers/video/logo/Kconfig" | 49 | source "drivers/video/logo/Kconfig" |
2485 | endif | ||
2486 | 50 | ||
2487 | config FB_SH_MOBILE_MERAM | 51 | endif |
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 | ||
2499 | config 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 | ||
2514 | endmenu | 54 | endmenu |
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 | |||
7 | obj-$(CONFIG_VGASTATE) += vgastate.o | 1 | obj-$(CONFIG_VGASTATE) += vgastate.o |
8 | obj-$(CONFIG_HDMI) += hdmi.o | 2 | obj-$(CONFIG_HDMI) += hdmi.o |
9 | obj-y += fb_notify.o | ||
10 | obj-$(CONFIG_FB) += fb.o | ||
11 | fb-y := fbmem.o fbmon.o fbcmap.o fbsysfs.o \ | ||
12 | modedb.o fbcvt.o | ||
13 | fb-objs := $(fb-y) | ||
14 | 3 | ||
15 | obj-$(CONFIG_VT) += console/ | 4 | obj-$(CONFIG_VT) += console/ |
16 | obj-$(CONFIG_LOGO) += logo/ | 5 | obj-$(CONFIG_LOGO) += logo/ |
17 | obj-y += backlight/ | 6 | obj-y += backlight/ |
18 | 7 | ||
19 | obj-$(CONFIG_EXYNOS_VIDEO) += exynos/ | 8 | obj-y += fbdev/ |
20 | |||
21 | obj-$(CONFIG_FB_CFB_FILLRECT) += cfbfillrect.o | ||
22 | obj-$(CONFIG_FB_CFB_COPYAREA) += cfbcopyarea.o | ||
23 | obj-$(CONFIG_FB_CFB_IMAGEBLIT) += cfbimgblt.o | ||
24 | obj-$(CONFIG_FB_SYS_FILLRECT) += sysfillrect.o | ||
25 | obj-$(CONFIG_FB_SYS_COPYAREA) += syscopyarea.o | ||
26 | obj-$(CONFIG_FB_SYS_IMAGEBLIT) += sysimgblt.o | ||
27 | obj-$(CONFIG_FB_SYS_FOPS) += fb_sys_fops.o | ||
28 | obj-$(CONFIG_FB_SVGALIB) += svgalib.o | ||
29 | obj-$(CONFIG_FB_MACMODES) += macmodes.o | ||
30 | obj-$(CONFIG_FB_DDC) += fb_ddc.o | ||
31 | obj-$(CONFIG_FB_DEFERRED_IO) += fb_defio.o | ||
32 | obj-$(CONFIG_FB_WMT_GE_ROPS) += wmt_ge_rops.o | ||
33 | |||
34 | # Hardware specific drivers go first | ||
35 | obj-$(CONFIG_FB_AMIGA) += amifb.o c2p_planar.o | ||
36 | obj-$(CONFIG_FB_ARC) += arcfb.o | ||
37 | obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o | ||
38 | obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o | ||
39 | obj-$(CONFIG_FB_GRVGA) += grvga.o | ||
40 | obj-$(CONFIG_FB_PM2) += pm2fb.o | ||
41 | obj-$(CONFIG_FB_PM3) += pm3fb.o | ||
42 | |||
43 | obj-$(CONFIG_FB_I740) += i740fb.o | ||
44 | obj-$(CONFIG_FB_MATROX) += matrox/ | ||
45 | obj-$(CONFIG_FB_RIVA) += riva/ | ||
46 | obj-$(CONFIG_FB_NVIDIA) += nvidia/ | ||
47 | obj-$(CONFIG_FB_ATY) += aty/ macmodes.o | ||
48 | obj-$(CONFIG_FB_ATY128) += aty/ macmodes.o | ||
49 | obj-$(CONFIG_FB_RADEON) += aty/ | ||
50 | obj-$(CONFIG_FB_SIS) += sis/ | ||
51 | obj-$(CONFIG_FB_VIA) += via/ | ||
52 | obj-$(CONFIG_FB_KYRO) += kyro/ | ||
53 | obj-$(CONFIG_FB_SAVAGE) += savage/ | ||
54 | obj-$(CONFIG_FB_GEODE) += geode/ | ||
55 | obj-$(CONFIG_FB_MBX) += mbx/ | ||
56 | obj-$(CONFIG_FB_NEOMAGIC) += neofb.o | ||
57 | obj-$(CONFIG_FB_3DFX) += tdfxfb.o | ||
58 | obj-$(CONFIG_FB_CONTROL) += controlfb.o | ||
59 | obj-$(CONFIG_FB_PLATINUM) += platinumfb.o | ||
60 | obj-$(CONFIG_FB_VALKYRIE) += valkyriefb.o | ||
61 | obj-$(CONFIG_FB_CT65550) += chipsfb.o | ||
62 | obj-$(CONFIG_FB_IMSTT) += imsttfb.o | ||
63 | obj-$(CONFIG_FB_FM2) += fm2fb.o | ||
64 | obj-$(CONFIG_FB_VT8623) += vt8623fb.o | ||
65 | obj-$(CONFIG_FB_TRIDENT) += tridentfb.o | ||
66 | obj-$(CONFIG_FB_LE80578) += vermilion/ | ||
67 | obj-$(CONFIG_FB_S3) += s3fb.o | ||
68 | obj-$(CONFIG_FB_ARK) += arkfb.o | ||
69 | obj-$(CONFIG_FB_STI) += stifb.o | ||
70 | obj-$(CONFIG_FB_FFB) += ffb.o sbuslib.o | ||
71 | obj-$(CONFIG_FB_CG6) += cg6.o sbuslib.o | ||
72 | obj-$(CONFIG_FB_CG3) += cg3.o sbuslib.o | ||
73 | obj-$(CONFIG_FB_BW2) += bw2.o sbuslib.o | ||
74 | obj-$(CONFIG_FB_CG14) += cg14.o sbuslib.o | ||
75 | obj-$(CONFIG_FB_P9100) += p9100.o sbuslib.o | ||
76 | obj-$(CONFIG_FB_TCX) += tcx.o sbuslib.o | ||
77 | obj-$(CONFIG_FB_LEO) += leo.o sbuslib.o | ||
78 | obj-$(CONFIG_FB_ACORN) += acornfb.o | ||
79 | obj-$(CONFIG_FB_ATARI) += atafb.o c2p_iplan2.o atafb_mfb.o \ | ||
80 | atafb_iplan2p2.o atafb_iplan2p4.o atafb_iplan2p8.o | ||
81 | obj-$(CONFIG_FB_MAC) += macfb.o | ||
82 | obj-$(CONFIG_FB_HECUBA) += hecubafb.o | ||
83 | obj-$(CONFIG_FB_N411) += n411.o | ||
84 | obj-$(CONFIG_FB_HGA) += hgafb.o | ||
85 | obj-$(CONFIG_FB_XVR500) += sunxvr500.o | ||
86 | obj-$(CONFIG_FB_XVR2500) += sunxvr2500.o | ||
87 | obj-$(CONFIG_FB_XVR1000) += sunxvr1000.o | ||
88 | obj-$(CONFIG_FB_IGA) += igafb.o | ||
89 | obj-$(CONFIG_FB_APOLLO) += dnfb.o | ||
90 | obj-$(CONFIG_FB_Q40) += q40fb.o | ||
91 | obj-$(CONFIG_FB_TGA) += tgafb.o | ||
92 | obj-$(CONFIG_FB_HP300) += hpfb.o | ||
93 | obj-$(CONFIG_FB_G364) += g364fb.o | ||
94 | obj-$(CONFIG_FB_EP93XX) += ep93xx-fb.o | ||
95 | obj-$(CONFIG_FB_SA1100) += sa1100fb.o | ||
96 | obj-$(CONFIG_FB_HIT) += hitfb.o | ||
97 | obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o | ||
98 | obj-$(CONFIG_FB_PVR2) += pvr2fb.o | ||
99 | obj-$(CONFIG_FB_VOODOO1) += sstfb.o | ||
100 | obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o | ||
101 | obj-$(CONFIG_FB_GOLDFISH) += goldfishfb.o | ||
102 | obj-$(CONFIG_FB_68328) += 68328fb.o | ||
103 | obj-$(CONFIG_FB_GBE) += gbefb.o | ||
104 | obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o | ||
105 | obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o | ||
106 | obj-$(CONFIG_FB_PXA) += pxafb.o | ||
107 | obj-$(CONFIG_FB_PXA168) += pxa168fb.o | ||
108 | obj-$(CONFIG_PXA3XX_GCU) += pxa3xx-gcu.o | ||
109 | obj-$(CONFIG_MMP_DISP) += mmp/ | ||
110 | obj-$(CONFIG_FB_W100) += w100fb.o | ||
111 | obj-$(CONFIG_FB_TMIO) += tmiofb.o | ||
112 | obj-$(CONFIG_FB_AU1100) += au1100fb.o | ||
113 | obj-$(CONFIG_FB_AU1200) += au1200fb.o | ||
114 | obj-$(CONFIG_FB_VT8500) += vt8500lcdfb.o | ||
115 | obj-$(CONFIG_FB_WM8505) += wm8505fb.o | ||
116 | obj-$(CONFIG_FB_PMAG_AA) += pmag-aa-fb.o | ||
117 | obj-$(CONFIG_FB_PMAG_BA) += pmag-ba-fb.o | ||
118 | obj-$(CONFIG_FB_PMAGB_B) += pmagb-b-fb.o | ||
119 | obj-$(CONFIG_FB_MAXINE) += maxinefb.o | ||
120 | obj-$(CONFIG_FB_METRONOME) += metronomefb.o | ||
121 | obj-$(CONFIG_FB_BROADSHEET) += broadsheetfb.o | ||
122 | obj-$(CONFIG_FB_AUO_K190X) += auo_k190x.o | ||
123 | obj-$(CONFIG_FB_AUO_K1900) += auo_k1900fb.o | ||
124 | obj-$(CONFIG_FB_AUO_K1901) += auo_k1901fb.o | ||
125 | obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o | ||
126 | obj-$(CONFIG_FB_SH7760) += sh7760fb.o | ||
127 | obj-$(CONFIG_FB_IMX) += imxfb.o | ||
128 | obj-$(CONFIG_FB_S3C) += s3c-fb.o | ||
129 | obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o | ||
130 | obj-$(CONFIG_FB_FSL_DIU) += fsl-diu-fb.o | ||
131 | obj-$(CONFIG_FB_COBALT) += cobalt_lcdfb.o | ||
132 | obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o | ||
133 | obj-$(CONFIG_FB_PS3) += ps3fb.o | ||
134 | obj-$(CONFIG_FB_SM501) += sm501fb.o | ||
135 | obj-$(CONFIG_FB_UDL) += udlfb.o | ||
136 | obj-$(CONFIG_FB_SMSCUFX) += smscufx.o | ||
137 | obj-$(CONFIG_FB_XILINX) += xilinxfb.o | ||
138 | obj-$(CONFIG_SH_MIPI_DSI) += sh_mipi_dsi.o | ||
139 | obj-$(CONFIG_FB_SH_MOBILE_HDMI) += sh_mobile_hdmi.o | ||
140 | obj-$(CONFIG_FB_SH_MOBILE_MERAM) += sh_mobile_meram.o | ||
141 | obj-$(CONFIG_FB_SH_MOBILE_LCDC) += sh_mobile_lcdcfb.o | ||
142 | obj-$(CONFIG_FB_OMAP) += omap/ | ||
143 | obj-y += omap2/ | ||
144 | obj-$(CONFIG_XEN_FBDEV_FRONTEND) += xen-fbfront.o | ||
145 | obj-$(CONFIG_FB_CARMINE) += carminefb.o | ||
146 | obj-$(CONFIG_FB_MB862XX) += mb862xx/ | ||
147 | obj-$(CONFIG_FB_MSM) += msm/ | ||
148 | obj-$(CONFIG_FB_NUC900) += nuc900fb.o | ||
149 | obj-$(CONFIG_FB_JZ4740) += jz4740_fb.o | ||
150 | obj-$(CONFIG_FB_PUV3_UNIGFX) += fb-puv3.o | ||
151 | obj-$(CONFIG_FB_HYPERV) += hyperv_fb.o | ||
152 | obj-$(CONFIG_FB_OPENCORES) += ocfb.o | ||
153 | |||
154 | # Platform or fallback drivers go here | ||
155 | obj-$(CONFIG_FB_UVESA) += uvesafb.o | ||
156 | obj-$(CONFIG_FB_VESA) += vesafb.o | ||
157 | obj-$(CONFIG_FB_EFI) += efifb.o | ||
158 | obj-$(CONFIG_FB_VGA16) += vga16fb.o | ||
159 | obj-$(CONFIG_FB_OF) += offb.o | ||
160 | obj-$(CONFIG_FB_BF537_LQ035) += bf537-lq035.o | ||
161 | obj-$(CONFIG_FB_BF54X_LQ043) += bf54x-lq043fb.o | ||
162 | obj-$(CONFIG_FB_BFIN_LQ035Q1) += bfin-lq035q1-fb.o | ||
163 | obj-$(CONFIG_FB_BFIN_T350MCQB) += bfin-t350mcqb-fb.o | ||
164 | obj-$(CONFIG_FB_BFIN_7393) += bfin_adv7393fb.o | ||
165 | obj-$(CONFIG_FB_MX3) += mx3fb.o | ||
166 | obj-$(CONFIG_FB_DA8XX) += da8xx-fb.o | ||
167 | obj-$(CONFIG_FB_MXS) += mxsfb.o | ||
168 | obj-$(CONFIG_FB_SSD1307) += ssd1307fb.o | ||
169 | obj-$(CONFIG_FB_SIMPLE) += simplefb.o | ||
170 | |||
171 | # the test framebuffer is last | ||
172 | obj-$(CONFIG_FB_VIRTUAL) += vfb.o | ||
173 | 9 | ||
174 | obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o | 10 | obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o |
175 | ifeq ($(CONFIG_OF),y) | 11 | ifeq ($(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 | |||
5 | menuconfig 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 | |||
39 | config 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 | |||
55 | config FB_DDC | ||
56 | tristate | ||
57 | depends on FB | ||
58 | select I2C_ALGOBIT | ||
59 | select I2C | ||
60 | default n | ||
61 | |||
62 | config 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 | |||
70 | config 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 | |||
79 | config 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 | |||
88 | config 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 | |||
97 | config 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 | |||
106 | config 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 | |||
115 | config 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 | |||
124 | config 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 | |||
133 | menuconfig 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 | |||
142 | choice | ||
143 | prompt "Choice endianness support" | ||
144 | depends on FB_FOREIGN_ENDIAN | ||
145 | |||
146 | config FB_BOTH_ENDIAN | ||
147 | bool "Support for Big- and Little-Endian framebuffers" | ||
148 | |||
149 | config FB_BIG_ENDIAN | ||
150 | bool "Support for Big-Endian framebuffers only" | ||
151 | |||
152 | config FB_LITTLE_ENDIAN | ||
153 | bool "Support for Little-Endian framebuffers only" | ||
154 | |||
155 | endchoice | ||
156 | |||
157 | config FB_SYS_FOPS | ||
158 | tristate | ||
159 | depends on FB | ||
160 | default n | ||
161 | |||
162 | config FB_DEFERRED_IO | ||
163 | bool | ||
164 | depends on FB | ||
165 | |||
166 | config FB_HECUBA | ||
167 | tristate | ||
168 | depends on FB | ||
169 | depends on FB_DEFERRED_IO | ||
170 | |||
171 | config 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 | |||
179 | config FB_MACMODES | ||
180 | tristate | ||
181 | depends on FB | ||
182 | default n | ||
183 | |||
184 | config FB_BACKLIGHT | ||
185 | bool | ||
186 | depends on FB | ||
187 | select BACKLIGHT_LCD_SUPPORT | ||
188 | select BACKLIGHT_CLASS_DEVICE | ||
189 | default n | ||
190 | |||
191 | config 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 | |||
202 | config 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 | |||
220 | comment "Frame buffer hardware drivers" | ||
221 | depends on FB | ||
222 | |||
223 | config 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 | |||
232 | config 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 | |||
250 | config 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 | |||
270 | config 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 | |||
276 | config 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 | |||
293 | config 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 | |||
304 | config 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 | |||
314 | config 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 | |||
328 | config 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 | |||
339 | config 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 | |||
351 | config 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 | |||
360 | config 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 | |||
369 | config FB_APOLLO | ||
370 | bool | ||
371 | depends on (FB = y) && APOLLO | ||
372 | default y | ||
373 | select FB_CFB_FILLRECT | ||
374 | select FB_CFB_IMAGEBLIT | ||
375 | |||
376 | config 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 | |||
384 | config 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 | |||
394 | config 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 | |||
402 | config 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 | |||
411 | config 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 | |||
420 | config 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 | |||
430 | config 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 | |||
446 | config 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 | |||
456 | config 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 | |||
467 | config 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 | |||
478 | config 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 | |||
489 | config 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 | |||
500 | config 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 | |||
510 | config 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 | |||
519 | config 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 | |||
528 | config 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 | |||
543 | config 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 | |||
552 | config 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 | |||
564 | config 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 | |||
580 | config 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 | |||
594 | config 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 | |||
609 | choice | ||
610 | prompt "Video mode support" | ||
611 | depends on FB_BFIN_7393 | ||
612 | default NTSC | ||
613 | |||
614 | config NTSC | ||
615 | bool 'NTSC 720x480' | ||
616 | |||
617 | config PAL | ||
618 | bool 'PAL 720x576' | ||
619 | |||
620 | config NTSC_640x480 | ||
621 | bool 'NTSC 640x480 (Experimental)' | ||
622 | |||
623 | config PAL_640x480 | ||
624 | bool 'PAL 640x480 (Experimental)' | ||
625 | |||
626 | config NTSC_YCBCR | ||
627 | bool 'NTSC 720x480 YCbCR input' | ||
628 | |||
629 | config PAL_YCBCR | ||
630 | bool 'PAL 720x576 YCbCR input' | ||
631 | |||
632 | endchoice | ||
633 | |||
634 | choice | ||
635 | prompt "Size of ADV7393 frame buffer memory Single/Double Size" | ||
636 | depends on (FB_BFIN_7393) | ||
637 | default ADV7393_1XMEM | ||
638 | |||
639 | config ADV7393_1XMEM | ||
640 | bool 'Single' | ||
641 | |||
642 | config ADV7393_2XMEM | ||
643 | bool 'Double' | ||
644 | endchoice | ||
645 | |||
646 | config 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 | |||
668 | config 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 | |||
676 | config FB_HP300 | ||
677 | bool | ||
678 | depends on (FB = y) && DIO | ||
679 | select FB_CFB_IMAGEBLIT | ||
680 | default y | ||
681 | |||
682 | config 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 | |||
703 | config 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 | |||
721 | config 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 | |||
734 | config 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 | |||
745 | config 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 | |||
758 | config 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 | |||
770 | config 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 | |||
780 | config 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 | |||
788 | config 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 | |||
794 | config 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 | |||
803 | config 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 | |||
812 | config 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 | |||
821 | config 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 | |||
830 | config 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 | |||
840 | config 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 | |||
850 | config 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 | |||
860 | config 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 | |||
870 | config 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 | |||
880 | config 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 | |||
893 | config 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 | |||
906 | config 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 | |||
918 | config 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 | |||
939 | config 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 | |||
955 | config 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 | |||
966 | config 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 | |||
977 | config 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 | |||
984 | config 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 | |||
994 | config 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 | |||
1013 | config 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 | |||
1026 | config 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 | |||
1035 | config 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 | |||
1042 | config 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 | |||
1060 | config 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 | |||
1073 | config 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 | |||
1082 | config 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 | |||
1089 | config 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 | |||
1101 | config 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 | |||
1119 | config 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 | |||
1142 | config FB_I810_I2C | ||
1143 | bool "Enable DDC Support" | ||
1144 | depends on FB_I810 && FB_I810_GTF | ||
1145 | select FB_DDC | ||
1146 | help | ||
1147 | |||
1148 | config 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 | |||
1158 | config 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 | |||
1164 | config 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 | |||
1185 | config 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 | |||
1193 | config 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 | |||
1201 | config 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 | |||
1222 | config 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 | |||
1232 | config 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 | |||
1242 | config 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 | |||
1272 | config 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 | |||
1289 | config 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 | |||
1320 | config 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 | |||
1337 | config 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 | |||
1345 | config 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 | |||
1352 | config 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 | |||
1361 | config 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 | |||
1377 | config 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 | |||
1384 | config 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 | |||
1399 | config 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 | |||
1409 | config 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 | |||
1416 | config 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 | |||
1427 | config 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 | |||
1434 | config 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 | |||
1447 | config 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 | |||
1455 | config 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 | |||
1472 | config 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 | |||
1485 | config 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 | |||
1494 | config 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 | |||
1509 | config 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 | |||
1515 | config 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 | |||
1523 | config 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 | |||
1542 | if FB_VIA | ||
1543 | |||
1544 | config 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 | |||
1554 | config 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 | |||
1565 | endif | ||
1566 | |||
1567 | config 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 | |||
1582 | config 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 | |||
1595 | config 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 | |||
1610 | config 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 | |||
1617 | config 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 | |||
1625 | config 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 | |||
1643 | config 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 | |||
1657 | config 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 | |||
1677 | config 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 | |||
1691 | config 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 | |||
1703 | config 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 | |||
1713 | choice | ||
1714 | depends on FB_CARMINE | ||
1715 | prompt "DRAM timing" | ||
1716 | default FB_CARMINE_DRAM_EVAL | ||
1717 | |||
1718 | config FB_CARMINE_DRAM_EVAL | ||
1719 | bool "Eval board timings" | ||
1720 | help | ||
1721 | Use timings which work on the eval card. | ||
1722 | |||
1723 | config CARMINE_DRAM_CUSTOM | ||
1724 | bool "Custom board timings" | ||
1725 | help | ||
1726 | Use custom board timings. | ||
1727 | endchoice | ||
1728 | |||
1729 | config 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 | |||
1740 | config 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 | |||
1752 | config 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 | |||
1764 | config 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 | |||
1777 | config 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 | |||
1785 | source "drivers/video/fbdev/geode/Kconfig" | ||
1786 | |||
1787 | config 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 | |||
1797 | config 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 | |||
1807 | config 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 | |||
1817 | config 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 | |||
1828 | config 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 | |||
1839 | config 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 | |||
1849 | config 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 | |||
1859 | config 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 | |||
1869 | config 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 | |||
1886 | config FB_PXA_OVERLAY | ||
1887 | bool "Support PXA27x/PXA3xx Overlay(s) as framebuffer" | ||
1888 | default n | ||
1889 | depends on FB_PXA && (PXA27x || PXA3xx) | ||
1890 | |||
1891 | config FB_PXA_SMARTPANEL | ||
1892 | bool "PXA Smartpanel LCD support" | ||
1893 | default n | ||
1894 | depends on FB_PXA | ||
1895 | |||
1896 | config 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 | |||
1913 | config 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 | |||
1923 | config 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 | |||
1933 | config 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 | |||
1943 | config 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 | |||
1954 | config 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 | |||
1971 | config 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 | |||
1984 | config 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 | |||
1994 | config 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 | |||
2011 | config FB_TMIO_ACCELL | ||
2012 | bool "tmiofb acceleration" | ||
2013 | depends on FB_TMIO | ||
2014 | default y | ||
2015 | |||
2016 | config 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 | |||
2035 | config 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 | |||
2041 | config 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. | ||
2057 | config 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 | |||
2064 | config 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 | |||
2074 | config GPM1040A0_320X240 | ||
2075 | bool "Giantplus Technology GPM1040A0 320x240 Color TFT LCD" | ||
2076 | depends on FB_NUC900 | ||
2077 | |||
2078 | config 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 | |||
2095 | config 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 | |||
2111 | config 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 | |||
2126 | config 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 | |||
2138 | config 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 | |||
2149 | config 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 | |||
2159 | config 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 | |||
2170 | config 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 | |||
2179 | config FB_COBALT | ||
2180 | tristate "Cobalt server LCD frame buffer support" | ||
2181 | depends on FB && (MIPS_COBALT || MIPS_SEAD3) | ||
2182 | |||
2183 | config 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 | |||
2198 | config 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 | |||
2212 | config 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 | |||
2235 | config 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 | |||
2251 | config 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 | |||
2264 | config 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 | |||
2274 | choice | ||
2275 | prompt "GDC variant" | ||
2276 | depends on FB_MB862XX | ||
2277 | |||
2278 | config 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 | |||
2285 | config 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 | |||
2293 | endchoice | ||
2294 | |||
2295 | config 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 | |||
2304 | config 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 | |||
2315 | config 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 | |||
2322 | config 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 | |||
2329 | config 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 | |||
2341 | config 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 | |||
2355 | config 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 | |||
2372 | config 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 | |||
2380 | config 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 | |||
2388 | config 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 | |||
2397 | config 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 | |||
2408 | config 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 | |||
2419 | config 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 | |||
2428 | config 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 | |||
2444 | source "drivers/video/fbdev/omap/Kconfig" | ||
2445 | source "drivers/video/fbdev/omap2/Kconfig" | ||
2446 | source "drivers/video/fbdev/exynos/Kconfig" | ||
2447 | source "drivers/video/fbdev/mmp/Kconfig" | ||
2448 | |||
2449 | config 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 | |||
2461 | config 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 | |||
7 | obj-y += core/ | ||
8 | |||
9 | obj-$(CONFIG_EXYNOS_VIDEO) += exynos/ | ||
10 | |||
11 | obj-$(CONFIG_FB_MACMODES) += macmodes.o | ||
12 | obj-$(CONFIG_FB_WMT_GE_ROPS) += wmt_ge_rops.o | ||
13 | |||
14 | # Hardware specific drivers go first | ||
15 | obj-$(CONFIG_FB_AMIGA) += amifb.o c2p_planar.o | ||
16 | obj-$(CONFIG_FB_ARC) += arcfb.o | ||
17 | obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o | ||
18 | obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o | ||
19 | obj-$(CONFIG_FB_GRVGA) += grvga.o | ||
20 | obj-$(CONFIG_FB_PM2) += pm2fb.o | ||
21 | obj-$(CONFIG_FB_PM3) += pm3fb.o | ||
22 | |||
23 | obj-$(CONFIG_FB_I740) += i740fb.o | ||
24 | obj-$(CONFIG_FB_MATROX) += matrox/ | ||
25 | obj-$(CONFIG_FB_RIVA) += riva/ | ||
26 | obj-$(CONFIG_FB_NVIDIA) += nvidia/ | ||
27 | obj-$(CONFIG_FB_ATY) += aty/ macmodes.o | ||
28 | obj-$(CONFIG_FB_ATY128) += aty/ macmodes.o | ||
29 | obj-$(CONFIG_FB_RADEON) += aty/ | ||
30 | obj-$(CONFIG_FB_SIS) += sis/ | ||
31 | obj-$(CONFIG_FB_VIA) += via/ | ||
32 | obj-$(CONFIG_FB_KYRO) += kyro/ | ||
33 | obj-$(CONFIG_FB_SAVAGE) += savage/ | ||
34 | obj-$(CONFIG_FB_GEODE) += geode/ | ||
35 | obj-$(CONFIG_FB_MBX) += mbx/ | ||
36 | obj-$(CONFIG_FB_NEOMAGIC) += neofb.o | ||
37 | obj-$(CONFIG_FB_3DFX) += tdfxfb.o | ||
38 | obj-$(CONFIG_FB_CONTROL) += controlfb.o | ||
39 | obj-$(CONFIG_FB_PLATINUM) += platinumfb.o | ||
40 | obj-$(CONFIG_FB_VALKYRIE) += valkyriefb.o | ||
41 | obj-$(CONFIG_FB_CT65550) += chipsfb.o | ||
42 | obj-$(CONFIG_FB_IMSTT) += imsttfb.o | ||
43 | obj-$(CONFIG_FB_FM2) += fm2fb.o | ||
44 | obj-$(CONFIG_FB_VT8623) += vt8623fb.o | ||
45 | obj-$(CONFIG_FB_TRIDENT) += tridentfb.o | ||
46 | obj-$(CONFIG_FB_LE80578) += vermilion/ | ||
47 | obj-$(CONFIG_FB_S3) += s3fb.o | ||
48 | obj-$(CONFIG_FB_ARK) += arkfb.o | ||
49 | obj-$(CONFIG_FB_STI) += stifb.o | ||
50 | obj-$(CONFIG_FB_FFB) += ffb.o sbuslib.o | ||
51 | obj-$(CONFIG_FB_CG6) += cg6.o sbuslib.o | ||
52 | obj-$(CONFIG_FB_CG3) += cg3.o sbuslib.o | ||
53 | obj-$(CONFIG_FB_BW2) += bw2.o sbuslib.o | ||
54 | obj-$(CONFIG_FB_CG14) += cg14.o sbuslib.o | ||
55 | obj-$(CONFIG_FB_P9100) += p9100.o sbuslib.o | ||
56 | obj-$(CONFIG_FB_TCX) += tcx.o sbuslib.o | ||
57 | obj-$(CONFIG_FB_LEO) += leo.o sbuslib.o | ||
58 | obj-$(CONFIG_FB_ACORN) += acornfb.o | ||
59 | obj-$(CONFIG_FB_ATARI) += atafb.o c2p_iplan2.o atafb_mfb.o \ | ||
60 | atafb_iplan2p2.o atafb_iplan2p4.o atafb_iplan2p8.o | ||
61 | obj-$(CONFIG_FB_MAC) += macfb.o | ||
62 | obj-$(CONFIG_FB_HECUBA) += hecubafb.o | ||
63 | obj-$(CONFIG_FB_N411) += n411.o | ||
64 | obj-$(CONFIG_FB_HGA) += hgafb.o | ||
65 | obj-$(CONFIG_FB_XVR500) += sunxvr500.o | ||
66 | obj-$(CONFIG_FB_XVR2500) += sunxvr2500.o | ||
67 | obj-$(CONFIG_FB_XVR1000) += sunxvr1000.o | ||
68 | obj-$(CONFIG_FB_IGA) += igafb.o | ||
69 | obj-$(CONFIG_FB_APOLLO) += dnfb.o | ||
70 | obj-$(CONFIG_FB_Q40) += q40fb.o | ||
71 | obj-$(CONFIG_FB_TGA) += tgafb.o | ||
72 | obj-$(CONFIG_FB_HP300) += hpfb.o | ||
73 | obj-$(CONFIG_FB_G364) += g364fb.o | ||
74 | obj-$(CONFIG_FB_EP93XX) += ep93xx-fb.o | ||
75 | obj-$(CONFIG_FB_SA1100) += sa1100fb.o | ||
76 | obj-$(CONFIG_FB_HIT) += hitfb.o | ||
77 | obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o | ||
78 | obj-$(CONFIG_FB_PVR2) += pvr2fb.o | ||
79 | obj-$(CONFIG_FB_VOODOO1) += sstfb.o | ||
80 | obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o | ||
81 | obj-$(CONFIG_FB_GOLDFISH) += goldfishfb.o | ||
82 | obj-$(CONFIG_FB_68328) += 68328fb.o | ||
83 | obj-$(CONFIG_FB_GBE) += gbefb.o | ||
84 | obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o | ||
85 | obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o | ||
86 | obj-$(CONFIG_FB_PXA) += pxafb.o | ||
87 | obj-$(CONFIG_FB_PXA168) += pxa168fb.o | ||
88 | obj-$(CONFIG_PXA3XX_GCU) += pxa3xx-gcu.o | ||
89 | obj-$(CONFIG_MMP_DISP) += mmp/ | ||
90 | obj-$(CONFIG_FB_W100) += w100fb.o | ||
91 | obj-$(CONFIG_FB_TMIO) += tmiofb.o | ||
92 | obj-$(CONFIG_FB_AU1100) += au1100fb.o | ||
93 | obj-$(CONFIG_FB_AU1200) += au1200fb.o | ||
94 | obj-$(CONFIG_FB_VT8500) += vt8500lcdfb.o | ||
95 | obj-$(CONFIG_FB_WM8505) += wm8505fb.o | ||
96 | obj-$(CONFIG_FB_PMAG_AA) += pmag-aa-fb.o | ||
97 | obj-$(CONFIG_FB_PMAG_BA) += pmag-ba-fb.o | ||
98 | obj-$(CONFIG_FB_PMAGB_B) += pmagb-b-fb.o | ||
99 | obj-$(CONFIG_FB_MAXINE) += maxinefb.o | ||
100 | obj-$(CONFIG_FB_METRONOME) += metronomefb.o | ||
101 | obj-$(CONFIG_FB_BROADSHEET) += broadsheetfb.o | ||
102 | obj-$(CONFIG_FB_AUO_K190X) += auo_k190x.o | ||
103 | obj-$(CONFIG_FB_AUO_K1900) += auo_k1900fb.o | ||
104 | obj-$(CONFIG_FB_AUO_K1901) += auo_k1901fb.o | ||
105 | obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o | ||
106 | obj-$(CONFIG_FB_SH7760) += sh7760fb.o | ||
107 | obj-$(CONFIG_FB_IMX) += imxfb.o | ||
108 | obj-$(CONFIG_FB_S3C) += s3c-fb.o | ||
109 | obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o | ||
110 | obj-$(CONFIG_FB_FSL_DIU) += fsl-diu-fb.o | ||
111 | obj-$(CONFIG_FB_COBALT) += cobalt_lcdfb.o | ||
112 | obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o | ||
113 | obj-$(CONFIG_FB_PS3) += ps3fb.o | ||
114 | obj-$(CONFIG_FB_SM501) += sm501fb.o | ||
115 | obj-$(CONFIG_FB_UDL) += udlfb.o | ||
116 | obj-$(CONFIG_FB_SMSCUFX) += smscufx.o | ||
117 | obj-$(CONFIG_FB_XILINX) += xilinxfb.o | ||
118 | obj-$(CONFIG_SH_MIPI_DSI) += sh_mipi_dsi.o | ||
119 | obj-$(CONFIG_FB_SH_MOBILE_HDMI) += sh_mobile_hdmi.o | ||
120 | obj-$(CONFIG_FB_SH_MOBILE_MERAM) += sh_mobile_meram.o | ||
121 | obj-$(CONFIG_FB_SH_MOBILE_LCDC) += sh_mobile_lcdcfb.o | ||
122 | obj-$(CONFIG_FB_OMAP) += omap/ | ||
123 | obj-y += omap2/ | ||
124 | obj-$(CONFIG_XEN_FBDEV_FRONTEND) += xen-fbfront.o | ||
125 | obj-$(CONFIG_FB_CARMINE) += carminefb.o | ||
126 | obj-$(CONFIG_FB_MB862XX) += mb862xx/ | ||
127 | obj-$(CONFIG_FB_MSM) += msm/ | ||
128 | obj-$(CONFIG_FB_NUC900) += nuc900fb.o | ||
129 | obj-$(CONFIG_FB_JZ4740) += jz4740_fb.o | ||
130 | obj-$(CONFIG_FB_PUV3_UNIGFX) += fb-puv3.o | ||
131 | obj-$(CONFIG_FB_HYPERV) += hyperv_fb.o | ||
132 | obj-$(CONFIG_FB_OPENCORES) += ocfb.o | ||
133 | |||
134 | # Platform or fallback drivers go here | ||
135 | obj-$(CONFIG_FB_UVESA) += uvesafb.o | ||
136 | obj-$(CONFIG_FB_VESA) += vesafb.o | ||
137 | obj-$(CONFIG_FB_EFI) += efifb.o | ||
138 | obj-$(CONFIG_FB_VGA16) += vga16fb.o | ||
139 | obj-$(CONFIG_FB_OF) += offb.o | ||
140 | obj-$(CONFIG_FB_BF537_LQ035) += bf537-lq035.o | ||
141 | obj-$(CONFIG_FB_BF54X_LQ043) += bf54x-lq043fb.o | ||
142 | obj-$(CONFIG_FB_BFIN_LQ035Q1) += bfin-lq035q1-fb.o | ||
143 | obj-$(CONFIG_FB_BFIN_T350MCQB) += bfin-t350mcqb-fb.o | ||
144 | obj-$(CONFIG_FB_BFIN_7393) += bfin_adv7393fb.o | ||
145 | obj-$(CONFIG_FB_MX3) += mx3fb.o | ||
146 | obj-$(CONFIG_FB_DA8XX) += da8xx-fb.o | ||
147 | obj-$(CONFIG_FB_MXS) += mxsfb.o | ||
148 | obj-$(CONFIG_FB_SSD1307) += ssd1307fb.o | ||
149 | obj-$(CONFIG_FB_SIMPLE) += simplefb.o | ||
150 | |||
151 | # the test framebuffer is last | ||
152 | obj-$(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 @@ | |||
1 | obj-y += fb_notify.o | ||
2 | obj-$(CONFIG_FB) += fb.o | ||
3 | fb-y := fbmem.o fbmon.o fbcmap.o fbsysfs.o \ | ||
4 | modedb.o fbcvt.o | ||
5 | fb-objs := $(fb-y) | ||
6 | |||
7 | obj-$(CONFIG_FB_CFB_FILLRECT) += cfbfillrect.o | ||
8 | obj-$(CONFIG_FB_CFB_COPYAREA) += cfbcopyarea.o | ||
9 | obj-$(CONFIG_FB_CFB_IMAGEBLIT) += cfbimgblt.o | ||
10 | obj-$(CONFIG_FB_SYS_FILLRECT) += sysfillrect.o | ||
11 | obj-$(CONFIG_FB_SYS_COPYAREA) += syscopyarea.o | ||
12 | obj-$(CONFIG_FB_SYS_IMAGEBLIT) += sysimgblt.o | ||
13 | obj-$(CONFIG_FB_SYS_FOPS) += fb_sys_fops.o | ||
14 | obj-$(CONFIG_FB_SVGALIB) += svgalib.o | ||
15 | obj-$(CONFIG_FB_DDC) += fb_ddc.o | ||
16 | obj-$(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 | ||
7 | if MMP_DISP | 7 | if MMP_DISP |
8 | source "drivers/video/mmp/hw/Kconfig" | 8 | source "drivers/video/fbdev/mmp/hw/Kconfig" |
9 | source "drivers/video/mmp/panel/Kconfig" | 9 | source "drivers/video/fbdev/mmp/panel/Kconfig" |
10 | source "drivers/video/mmp/fb/Kconfig" | 10 | source "drivers/video/fbdev/mmp/fb/Kconfig" |
11 | endif | 11 | endif |
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 @@ | |||
1 | config OMAP2_VRFB | ||
2 | bool | ||
3 | |||
4 | if ARCH_OMAP2PLUS | ||
5 | |||
6 | source "drivers/video/fbdev/omap2/dss/Kconfig" | ||
7 | source "drivers/video/fbdev/omap2/omapfb/Kconfig" | ||
8 | source "drivers/video/fbdev/omap2/displays-new/Kconfig" | ||
9 | |||
10 | endif | ||
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 | ||
118 | enum omap_color_component { | 122 | enum 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 | ||
148 | struct dispc_reg_field { | ||
149 | u16 reg; | ||
150 | u8 high; | ||
151 | u8 low; | ||
152 | }; | ||
153 | |||
144 | static const struct { | 154 | static 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 | ||
239 | static u32 mgr_fld_read(enum omap_channel channel, enum mgr_reg_fields regfld) | 249 | static 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 | ||
245 | static void mgr_fld_write(enum omap_channel channel, | 255 | static 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 | ||
3682 | static 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 | |||
3672 | int dispc_request_irq(irq_handler_t handler, void *dev_id) | 3690 | int 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 | } |
3677 | EXPORT_SYMBOL(dispc_request_irq); | 3712 | EXPORT_SYMBOL(dispc_request_irq); |
3678 | 3713 | ||
3679 | void dispc_free_irq(void *dev_id) | 3714 | void 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 | } |
3683 | EXPORT_SYMBOL(dispc_free_irq); | 3721 | EXPORT_SYMBOL(dispc_free_irq); |
3684 | 3722 | ||
@@ -3750,6 +3788,12 @@ static int __exit omap_dispchw_remove(struct platform_device *pdev) | |||
3750 | 3788 | ||
3751 | static int dispc_runtime_suspend(struct device *dev) | 3789 | static 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 | ||
5672 | static int dsi_runtime_suspend(struct device *dev) | 5677 | static 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 | ||
5679 | static int dsi_runtime_resume(struct device *dev) | 5693 | static 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 | ||
134 | struct reg_field { | ||
135 | u16 reg; | ||
136 | u8 high; | ||
137 | u8 low; | ||
138 | }; | ||
139 | |||
140 | struct dss_lcd_mgr_config { | 134 | struct 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 @@ | |||
1 | config OMAP2_VRFB | ||
2 | bool | ||
3 | |||
4 | if ARCH_OMAP2PLUS | ||
5 | |||
6 | source "drivers/video/omap2/dss/Kconfig" | ||
7 | source "drivers/video/omap2/omapfb/Kconfig" | ||
8 | source "drivers/video/omap2/displays-new/Kconfig" | ||
9 | |||
10 | endif | ||
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 | ||
201 | static 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 | } | ||
201 | static void do_poweroff(void) | 213 | static 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 | ||
207 | static void do_reboot(void) | 229 | static 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 | ||
332 | static struct notifier_block xen_reboot_nb = { | ||
333 | .notifier_call = poweroff_nb, | ||
334 | }; | ||
335 | |||
310 | static int setup_shutdown_watcher(void) | 336 | static 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 | ||
141 | out: | 143 | out: |
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 | ||
54 | struct xs_stored_msg { | 55 | struct 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 | ||
143 | static 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 | } | ||
142 | static void *read_reply(enum xsd_sockmsg_type *type, unsigned int *len) | 166 | static 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 | */ |
1622 | STATIC int | 1658 | STATIC int |
1623 | xfs_vm_write_end( | 1659 | xfs_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 | ||
5565 | del_cursor: | 5571 | del_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 | */ |
1391 | int | 1399 | int |
1392 | xfs_buf_iowait( | 1400 | xfs_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 | |||
1334 | xfs_create_tmpfile( | 1334 | xfs_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, | |||
334 | int xfs_create(struct xfs_inode *dp, struct xfs_name *name, | 334 | int 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); |
336 | int xfs_create_tmpfile(struct xfs_inode *dp, struct dentry *dentry, | 336 | int xfs_create_tmpfile(struct xfs_inode *dp, struct dentry *dentry, |
337 | umode_t mode); | 337 | umode_t mode, struct xfs_inode **ipp); |
338 | int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, | 338 | int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, |
339 | struct xfs_inode *ip); | 339 | struct xfs_inode *ip); |
340 | int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip, | 340 | int 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 | ||
1063 | static const struct inode_operations xfs_inode_operations = { | 1077 | static 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 | */ |
1635 | STATIC int | 1654 | STATIC int |
1636 | xlog_bdstrat( | 1655 | xlog_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); | |||
603 | DEFINE_INODE_EVENT(xfs_inactive_symlink); | 603 | DEFINE_INODE_EVENT(xfs_inactive_symlink); |
604 | DEFINE_INODE_EVENT(xfs_alloc_file_space); | 604 | DEFINE_INODE_EVENT(xfs_alloc_file_space); |
605 | DEFINE_INODE_EVENT(xfs_free_file_space); | 605 | DEFINE_INODE_EVENT(xfs_free_file_space); |
606 | DEFINE_INODE_EVENT(xfs_zero_file_space); | ||
606 | DEFINE_INODE_EVENT(xfs_collapse_file_space); | 607 | DEFINE_INODE_EVENT(xfs_collapse_file_space); |
607 | DEFINE_INODE_EVENT(xfs_readdir); | 608 | DEFINE_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 | */ |
240 | int ipmi_set_gets_events(ipmi_user_t user, int val); | 240 | int 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 */ |
88 | void nf_ct_gre_keymap_destroy(struct nf_conn *ct); | 88 | void nf_ct_gre_keymap_destroy(struct nf_conn *ct); |
89 | 89 | ||
90 | void nf_ct_gre_keymap_flush(struct net *net); | ||
91 | void nf_nat_need_gre(void); | 90 | void 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 | ||
377 | static inline struct device_node *of_find_node_by_path(const char *path) | ||
378 | { | ||
379 | return NULL; | ||
380 | } | ||
381 | |||
377 | static inline struct device_node *of_get_parent(const struct device_node *node) | 382 | static 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 { | |||
20 | extern enum reboot_mode reboot_mode; | 20 | extern enum reboot_mode reboot_mode; |
21 | 21 | ||
22 | enum reboot_type { | 22 | enum 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 | }; |
31 | extern enum reboot_type reboot_type; | 31 | extern 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 | ||
370 | int dst_discard(struct sk_buff *skb); | 370 | int dst_discard_sk(struct sock *sk, struct sk_buff *skb); |
371 | static inline int dst_discard(struct sk_buff *skb) | ||
372 | { | ||
373 | return dst_discard_sk(skb->sk, skb); | ||
374 | } | ||
371 | void *dst_alloc(struct dst_ops *ops, struct net_device *dev, int initial_ref, | 375 | void *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); |
373 | void __dst_free(struct dst_entry *dst); | 377 | void __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. */ |
456 | static inline int dst_output_sk(struct sock *sk, struct sk_buff *skb) | ||
457 | { | ||
458 | return skb_dst(skb)->output(sk, skb); | ||
459 | } | ||
452 | static inline int dst_output(struct sk_buff *skb) | 460 | static 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 | ||
41 | void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr); | 41 | void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr); |
42 | 42 | ||
43 | int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl); | 43 | int inet6_csk_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl); |
44 | 44 | ||
45 | struct dst_entry *inet6_csk_update_pmtu(struct sock *sk, u32 mtu); | 45 | struct 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 | */ |
38 | struct inet_connection_sock_af_ops { | 38 | struct 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); |
105 | int ip_local_deliver(struct sk_buff *skb); | 105 | int ip_local_deliver(struct sk_buff *skb); |
106 | int ip_mr_input(struct sk_buff *skb); | 106 | int ip_mr_input(struct sk_buff *skb); |
107 | int ip_output(struct sk_buff *skb); | 107 | int ip_output(struct sock *sk, struct sk_buff *skb); |
108 | int ip_mc_output(struct sk_buff *skb); | 108 | int ip_mc_output(struct sock *sk, struct sk_buff *skb); |
109 | int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)); | 109 | int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)); |
110 | int ip_do_nat(struct sk_buff *skb); | 110 | int ip_do_nat(struct sk_buff *skb); |
111 | void ip_send_check(struct iphdr *ip); | 111 | void ip_send_check(struct iphdr *ip); |
112 | int __ip_local_out(struct sk_buff *skb); | 112 | int __ip_local_out(struct sk_buff *skb); |
113 | int ip_local_out(struct sk_buff *skb); | 113 | int ip_local_out_sk(struct sock *sk, struct sk_buff *skb); |
114 | int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl); | 114 | static inline int ip_local_out(struct sk_buff *skb) |
115 | { | ||
116 | return ip_local_out_sk(skb->sk, skb); | ||
117 | } | ||
118 | |||
119 | int ip_queue_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl); | ||
115 | void ip_init(void); | 120 | void ip_init(void); |
116 | int ip_append_data(struct sock *sk, struct flowi4 *fl4, | 121 | int 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 | ||
155 | int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_proto); | 155 | int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_proto); |
156 | int iptunnel_xmit(struct rtable *rt, struct sk_buff *skb, | 156 | int 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 | ||
734 | int ip6_output(struct sk_buff *skb); | 734 | int ip6_output(struct sock *sk, struct sk_buff *skb); |
735 | int ip6_forward(struct sk_buff *skb); | 735 | int ip6_forward(struct sk_buff *skb); |
736 | int ip6_input(struct sk_buff *skb); | 736 | int ip6_input(struct sk_buff *skb); |
737 | int ip6_mc_input(struct sk_buff *skb); | 737 | int 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 | */ | ||
20 | static 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 | |||
16 | extern const struct nft_expr_ops nft_cmp_fast_ops; | 26 | extern const struct nft_expr_ops nft_cmp_fast_ops; |
17 | 27 | ||
18 | int nft_cmp_module_init(void); | 28 | int 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 | ||
1883 | void sctp_assoc_sync_pmtu(struct sock *, struct sctp_association *); | 1894 | void sctp_assoc_sync_pmtu(struct sock *, struct sctp_association *); |
1884 | void sctp_assoc_rwnd_update(struct sctp_association *, bool); | 1895 | void sctp_assoc_rwnd_increase(struct sctp_association *, unsigned int); |
1896 | void sctp_assoc_rwnd_decrease(struct sctp_association *, unsigned int); | ||
1885 | void sctp_assoc_set_primary(struct sctp_association *, | 1897 | void sctp_assoc_set_primary(struct sctp_association *, |
1886 | struct sctp_transport *); | 1898 | struct sctp_transport *); |
1887 | void sctp_assoc_del_nonprimary_peers(struct sctp_association *, | 1899 | void 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 | ||
1541 | int xfrm4_extract_output(struct xfrm_state *x, struct sk_buff *skb); | 1541 | int xfrm4_extract_output(struct xfrm_state *x, struct sk_buff *skb); |
1542 | int xfrm4_prepare_output(struct xfrm_state *x, struct sk_buff *skb); | 1542 | int xfrm4_prepare_output(struct xfrm_state *x, struct sk_buff *skb); |
1543 | int xfrm4_output(struct sk_buff *skb); | 1543 | int xfrm4_output(struct sock *sk, struct sk_buff *skb); |
1544 | int xfrm4_output_finish(struct sk_buff *skb); | 1544 | int xfrm4_output_finish(struct sk_buff *skb); |
1545 | int xfrm4_rcv_cb(struct sk_buff *skb, u8 protocol, int err); | 1545 | int xfrm4_rcv_cb(struct sk_buff *skb, u8 protocol, int err); |
1546 | int xfrm4_protocol_register(struct xfrm4_protocol *handler, unsigned char protocol); | 1546 | int 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); |
1566 | int xfrm6_extract_output(struct xfrm_state *x, struct sk_buff *skb); | 1566 | int xfrm6_extract_output(struct xfrm_state *x, struct sk_buff *skb); |
1567 | int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb); | 1567 | int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb); |
1568 | int xfrm6_output(struct sk_buff *skb); | 1568 | int xfrm6_output(struct sock *sk, struct sk_buff *skb); |
1569 | int xfrm6_output_finish(struct sk_buff *skb); | 1569 | int xfrm6_output_finish(struct sk_buff *skb); |
1570 | int xfrm6_find_1stfragopt(struct xfrm_state *x, struct sk_buff *skb, | 1570 | int 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 | ||
72 | void debug_mutex_unlock(struct mutex *lock) | 72 | void 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, | |||
276 | bool tick_check_replacement(struct clock_event_device *curdev, | 276 | bool 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 | ||
733 | static void uprobe_buffer_disable(void) | 733 | static 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 | ||
145 | int dst_discard(struct sk_buff *skb) | 145 | int 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 | } |
150 | EXPORT_SYMBOL(dst_discard); | 150 | EXPORT_SYMBOL(dst_discard_sk); |
151 | 151 | ||
152 | const u32 dst_default_metrics[RTAX_MAX + 1] = { | 152 | const 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 | ||
755 | static int dn_output(struct sk_buff *skb) | 755 | static 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 | */ |
841 | static 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 | |||
841 | static int dn_rt_bug(struct sk_buff *skb) | 853 | static 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 | ||
104 | int ip_local_out(struct sk_buff *skb) | 104 | int 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 | } |
114 | EXPORT_SYMBOL_GPL(ip_local_out); | 114 | EXPORT_SYMBOL_GPL(ip_local_out_sk); |
115 | 115 | ||
116 | static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst) | 116 | static 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 | ||
229 | int ip_mc_output(struct sk_buff *skb) | 229 | int 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 | ||
290 | int ip_output(struct sk_buff *skb) | 289 | int 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 | ||
318 | int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl) | 317 | /* Note: skb->sk can be different from sk, in case of tunnels */ |
318 | int 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 | ||
49 | int iptunnel_xmit(struct rtable *rt, struct sk_buff *skb, | 49 | int 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 | |||
279 | out_release_group: | ||
280 | put_group_info(group_info); | ||
281 | return ret; | ||
275 | } | 282 | } |
276 | EXPORT_SYMBOL_GPL(ping_init_sock); | 283 | EXPORT_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 | ||
1132 | static int ip_rt_bug(struct sk_buff *skb) | 1132 | static 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 | ||
89 | int xfrm4_output(struct sk_buff *skb) | 89 | int 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 | ||
227 | int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl_unused) | 227 | int 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 | ||
1562 | static 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 | |||
1562 | static size_t ip6gre_get_size(const struct net_device *dev) | 1571 | static 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 | ||
135 | int ip6_output(struct sk_buff *skb) | 135 | int 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 *, | |||
84 | static int ip6_dst_gc(struct dst_ops *ops); | 84 | static int ip6_dst_gc(struct dst_ops *ops); |
85 | 85 | ||
86 | static int ip6_pkt_discard(struct sk_buff *skb); | 86 | static int ip6_pkt_discard(struct sk_buff *skb); |
87 | static int ip6_pkt_discard_out(struct sk_buff *skb); | 87 | static int ip6_pkt_discard_out(struct sock *sk, struct sk_buff *skb); |
88 | static int ip6_pkt_prohibit(struct sk_buff *skb); | 88 | static int ip6_pkt_prohibit(struct sk_buff *skb); |
89 | static int ip6_pkt_prohibit_out(struct sk_buff *skb); | 89 | static int ip6_pkt_prohibit_out(struct sock *sk, struct sk_buff *skb); |
90 | static void ip6_link_failure(struct sk_buff *skb); | 90 | static void ip6_link_failure(struct sk_buff *skb); |
91 | static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, | 91 | static 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; | 1351 | out: |
1352 | return min_t(unsigned int, mtu, IP6_MAX_MTU); | ||
1352 | } | 1353 | } |
1353 | 1354 | ||
1354 | static struct dst_entry *icmp6_dst_gc_list; | 1355 | static 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 | ||
2131 | static int ip6_pkt_discard_out(struct sk_buff *skb) | 2132 | static 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 | ||
2142 | static int ip6_pkt_prohibit_out(struct sk_buff *skb) | 2143 | static 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 | ||
166 | int xfrm6_output(struct sk_buff *skb) | 166 | int 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 | ||
488 | xmit: | 488 | xmit: |
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 | ||
493 | error: | 493 | error: |
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 | ||
608 | static void nf_conntrack_pptp_net_exit(struct net *net) | ||
609 | { | ||
610 | nf_ct_gre_keymap_flush(net); | ||
611 | } | ||
612 | |||
613 | static struct pernet_operations nf_conntrack_pptp_net_ops = { | ||
614 | .exit = nf_conntrack_pptp_net_exit, | ||
615 | }; | ||
616 | |||
617 | static int __init nf_conntrack_pptp_init(void) | 608 | static 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 | ||
630 | static void __exit nf_conntrack_pptp_fini(void) | 613 | static 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 | ||
636 | module_init(nf_conntrack_pptp_init); | 618 | module_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 | ||
69 | void nf_ct_gre_keymap_flush(struct net *net) | 69 | static 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 | } |
81 | EXPORT_SYMBOL(nf_ct_gre_keymap_flush); | ||
82 | 81 | ||
83 | static inline int gre_key_cmpfn(const struct nf_ct_gre_keymap *km, | 82 | static 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. | 1399 | void sctp_assoc_rwnd_increase(struct sctp_association *asoc, unsigned int len) |
1400 | */ | ||
1401 | void 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. */ | ||
1458 | void 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 | ||
963 | static struct sctp_af sctp_af_inet; | 963 | static 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 | ||
1038 | done: | 1037 | done: |
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 | ||
1046 | static void sctp_ulpevent_release_frag_data(struct sctp_ulpevent *event) | 1042 | static 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 | ||
1845 | static int xdst_queue_output(struct sk_buff *skb) | 1845 | static 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 | ||
2 | LL_VERSION = 0 | ||
3 | LL_PATCHLEVEL = 0 | ||
4 | LL_EXTRAVERSION = 1 | ||
5 | |||
6 | # file format version | 1 | # file format version |
7 | FILE_VERSION = 1 | 2 | FILE_VERSION = 1 |
8 | 3 | ||
9 | MAKEFLAGS += --no-print-directory | 4 | MAKEFLAGS += --no-print-directory |
10 | 5 | LIBLOCKDEP_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 | |||
98 | libdir_SQ = $(subst ','\'',$(libdir)) | 93 | libdir_SQ = $(subst ','\'',$(libdir)) |
99 | bindir_SQ = $(subst ','\'',$(bindir)) | 94 | bindir_SQ = $(subst ','\'',$(bindir)) |
100 | 95 | ||
101 | LIB_FILE = liblockdep.a liblockdep.so | 96 | LIB_FILE = liblockdep.a liblockdep.so.$(LIBLOCKDEP_VERSION) |
102 | BIN_FILE = lockdep | 97 | BIN_FILE = lockdep |
103 | 98 | ||
104 | CONFIG_INCLUDES = | 99 | CONFIG_INCLUDES = |
@@ -110,8 +105,6 @@ N = | |||
110 | 105 | ||
111 | export Q VERBOSE | 106 | export Q VERBOSE |
112 | 107 | ||
113 | LIBLOCKDEP_VERSION = $(LL_VERSION).$(LL_PATCHLEVEL).$(LL_EXTRAVERSION) | ||
114 | |||
115 | INCLUDES = -I. -I/usr/local/include -I./uinclude -I./include $(CONFIG_INCLUDES) | 108 | INCLUDES = -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 | ||
147 | do_compile_shared_library = \ | 140 | do_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 | ||
151 | do_build_static_lib = \ | 144 | do_build_static_lib = \ |
152 | ($(print_static_lib_build) \ | 145 | ($(print_static_lib_build) \ |
@@ -177,7 +170,7 @@ all: all_cmd | |||
177 | 170 | ||
178 | all_cmd: $(CMD_TARGETS) | 171 | all_cmd: $(CMD_TARGETS) |
179 | 172 | ||
180 | liblockdep.so: $(PEVENT_LIB_OBJS) | 173 | liblockdep.so.$(LIBLOCKDEP_VERSION): $(PEVENT_LIB_OBJS) |
181 | $(Q)$(do_compile_shared_library) | 174 | $(Q)$(do_compile_shared_library) |
182 | 175 | ||
183 | liblockdep.a: $(PEVENT_LIB_OBJS) | 176 | liblockdep.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 | ||
15 | struct task_struct { | 18 | struct 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 | |||
53 | static void init_input_buf(const char *buf, unsigned long long size) | 65 | static 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 | ||
1953 | out_warn_free: | 1965 | out_warn_free: |
1954 | do_warning("%s: not enough memory!", __func__); | 1966 | do_warning_event(event, "%s: not enough memory!", __func__); |
1955 | out_free: | 1967 | out_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 | ||
3483 | out_warning_op: | 3500 | out_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 | ||
3487 | out_warning_field: | 3504 | out_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 | ||
3699 | out_warning_field: | 3718 | out_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 | ||
3703 | static unsigned long long | 3723 | static 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:: |
188 | Show only the result without page faults before memset. | 194 | Show only the result without page faults before memset. |
189 | 195 | ||
196 | SUITES FOR 'numa' | ||
197 | ~~~~~~~~~~~~~~~~~ | ||
198 | *mem*:: | ||
199 | Suite for evaluating NUMA workloads. | ||
200 | |||
201 | SUITES FOR 'futex' | ||
202 | ~~~~~~~~~~~~~~~~~~ | ||
203 | *hash*:: | ||
204 | Suite for evaluating hash tables. | ||
205 | |||
206 | *wake*:: | ||
207 | Suite for evaluating wake calls. | ||
208 | |||
209 | *requeue*:: | ||
210 | Suite for evaluating requeue calls. | ||
211 | |||
190 | SEE ALSO | 212 | SEE ALSO |
191 | -------- | 213 | -------- |
192 | linkperf:perf[1] | 214 | linkperf: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 | |||
192 | export PERL_PATH | 192 | export 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 | ||
175 | static void perf_evsel__reset_stat_priv(struct perf_evsel *evsel) | 175 | static 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 | ||
180 | static int perf_evsel__alloc_stat_priv(struct perf_evsel *evsel) | 184 | static 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 | ||
186 | static void perf_evsel__free_stat_priv(struct perf_evsel *evsel) | 193 | static 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 | ||
72 | endif | 71 | endif |
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 | ||
1474 | static int line_range_inline_cb(Dwarf_Die *in_die, void *data) | 1476 | static 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 | ||
100 | static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic); | ||
101 | |||
102 | static 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 | |||
100 | static void __rtc_irq_eoi_tracking_restore_one(struct kvm_vcpu *vcpu) | 108 | static 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 | ||
128 | void kvm_rtc_eoi_tracking_restore_one(struct kvm_vcpu *vcpu) | 135 | void 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 | ||
150 | static void rtc_irq_eoi(struct kvm_ioapic *ioapic, struct kvm_vcpu *vcpu) | 157 | static 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 | ||
158 | static bool rtc_irq_check_coalesced(struct kvm_ioapic *ioapic) | 165 | static 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 | ||