On Fri, Oct 11, 2013 at 01:53:36PM +0800, Lee, Chon Ming wrote: > On 10/09 09:18, Daniel Vetter wrote: > > Boots Just Fine (tm)! > > > > The only glitch seems to be that at least on Fedora the boot splash > > gets confused and doesn't display much at all. > > > > And since there's no ugly console flickering anymore in between, the > > flicker while switching between X servers (VT support is still enabled) > > is even more jarring. > > > > Also, I'm unsure whether we don't need to somehow kick out vgacon, now > > that nothing else gets in the way. But stuff seems to work, so I > > don't care. Also everything still works as well with VGA_CONSOLE=n > > > > Also the #ifdef mess needs a bit of a cleanup, follow-up patches will > > do just that. > > > > To keep the Kconfig tidy, extract all the i915 options into its own > > file. > > > > v2: > > - Rebase on top of the preliminary hw support option and the > > intel_drv.h cleanup. > > - Shut up warnings in i915_debugfs.c > > > > v3: Use the right CONFIG variable, spotted by Chon Ming. > > > > Cc: Lee, Chon Ming <chon.ming.lee@xxxxxxxxx> > > Cc: David Herrmann <dh.herrmann@xxxxxxxxx> > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > > --- > > Look good to me this series. > > Reviewed-by: Chon Ming Lee <chon.ming.lee@xxxxxxxxx> Thanks for the review, all patches merged to dinq. -Daniel > > > drivers/gpu/drm/Kconfig | 60 +------------------------------- > > drivers/gpu/drm/i915/Kconfig | 67 ++++++++++++++++++++++++++++++++++++ > > drivers/gpu/drm/i915/Makefile | 3 +- > > drivers/gpu/drm/i915/i915_debugfs.c | 9 ++--- > > drivers/gpu/drm/i915/i915_dma.c | 6 ++++ > > drivers/gpu/drm/i915/i915_drv.h | 2 ++ > > drivers/gpu/drm/i915/intel_display.c | 10 ++++++ > > drivers/gpu/drm/i915/intel_drv.h | 36 +++++++++++++++---- > > 8 files changed, 122 insertions(+), 71 deletions(-) > > create mode 100644 drivers/gpu/drm/i915/Kconfig > > > > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig > > index 3104b6d..b4e4fc0 100644 > > --- a/drivers/gpu/drm/Kconfig > > +++ b/drivers/gpu/drm/Kconfig > > @@ -128,65 +128,7 @@ config DRM_I810 > > selected, the module will be called i810. AGP support is required > > for this driver to work. > > > > -config DRM_I915 > > - tristate "Intel 8xx/9xx/G3x/G4x/HD Graphics" > > - depends on DRM > > - depends on AGP > > - depends on AGP_INTEL > > - # we need shmfs for the swappable backing store, and in particular > > - # the shmem_readpage() which depends upon tmpfs > > - select SHMEM > > - select TMPFS > > - select DRM_KMS_HELPER > > - select DRM_KMS_FB_HELPER > > - select FB_CFB_FILLRECT > > - select FB_CFB_COPYAREA > > - select FB_CFB_IMAGEBLIT > > - # i915 depends on ACPI_VIDEO when ACPI is enabled > > - # but for select to work, need to select ACPI_VIDEO's dependencies, ick > > - select BACKLIGHT_LCD_SUPPORT if ACPI > > - select BACKLIGHT_CLASS_DEVICE if ACPI > > - select VIDEO_OUTPUT_CONTROL if ACPI > > - select INPUT if ACPI > > - select THERMAL if ACPI > > - select ACPI_VIDEO if ACPI > > - select ACPI_BUTTON if ACPI > > - help > > - Choose this option if you have a system that has "Intel Graphics > > - Media Accelerator" or "HD Graphics" integrated graphics, > > - including 830M, 845G, 852GM, 855GM, 865G, 915G, 945G, 965G, > > - G35, G41, G43, G45 chipsets and Celeron, Pentium, Core i3, > > - Core i5, Core i7 as well as Atom CPUs with integrated graphics. > > - If M is selected, the module will be called i915. AGP support > > - is required for this driver to work. This driver is used by > > - the Intel driver in X.org 6.8 and XFree86 4.4 and above. It > > - replaces the older i830 module that supported a subset of the > > - hardware in older X.org releases. > > - > > - Note that the older i810/i815 chipsets require the use of the > > - i810 driver instead, and the Atom z5xx series has an entirely > > - different implementation. > > - > > -config DRM_I915_KMS > > - bool "Enable modesetting on intel by default" > > - depends on DRM_I915 > > - help > > - Choose this option if you want kernel modesetting enabled by default, > > - and you have a new enough userspace to support this. Running old > > - userspaces with this enabled will cause pain. Note that this causes > > - the driver to bind to PCI devices, which precludes loading things > > - like intelfb. > > - > > -config DRM_I915_PRELIMINARY_HW_SUPPORT > > - bool "Enable preliminary support for prerelease Intel hardware by default" > > - depends on DRM_I915 > > - help > > - Choose this option if you have prerelease Intel hardware and want the > > - i915 driver to support it by default. You can enable such support at > > - runtime with the module option i915.preliminary_hw_support=1; this > > - option changes the default for that module option. > > - > > - If in doubt, say "N". > > +source "drivers/gpu/drm/i915/Kconfig" > > > > config DRM_MGA > > tristate "Matrox g200/g400" > > diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig > > new file mode 100644 > > index 0000000..6199d0b > > --- /dev/null > > +++ b/drivers/gpu/drm/i915/Kconfig > > @@ -0,0 +1,67 @@ > > +config DRM_I915 > > + tristate "Intel 8xx/9xx/G3x/G4x/HD Graphics" > > + depends on DRM > > + depends on AGP > > + depends on AGP_INTEL > > + # we need shmfs for the swappable backing store, and in particular > > + # the shmem_readpage() which depends upon tmpfs > > + select SHMEM > > + select TMPFS > > + select DRM_KMS_HELPER > > + # i915 depends on ACPI_VIDEO when ACPI is enabled > > + # but for select to work, need to select ACPI_VIDEO's dependencies, ick > > + select BACKLIGHT_LCD_SUPPORT if ACPI > > + select BACKLIGHT_CLASS_DEVICE if ACPI > > + select VIDEO_OUTPUT_CONTROL if ACPI > > + select INPUT if ACPI > > + select ACPI_VIDEO if ACPI > > + select ACPI_BUTTON if ACPI > > + help > > + Choose this option if you have a system that has "Intel Graphics > > + Media Accelerator" or "HD Graphics" integrated graphics, > > + including 830M, 845G, 852GM, 855GM, 865G, 915G, 945G, 965G, > > + G35, G41, G43, G45 chipsets and Celeron, Pentium, Core i3, > > + Core i5, Core i7 as well as Atom CPUs with integrated graphics. > > + If M is selected, the module will be called i915. AGP support > > + is required for this driver to work. This driver is used by > > + the Intel driver in X.org 6.8 and XFree86 4.4 and above. It > > + replaces the older i830 module that supported a subset of the > > + hardware in older X.org releases. > > + > > + Note that the older i810/i815 chipsets require the use of the > > + i810 driver instead, and the Atom z5xx series has an entirely > > + different implementation. > > + > > +config DRM_I915_KMS > > + bool "Enable modesetting on intel by default" > > + depends on DRM_I915 > > + help > > + Choose this option if you want kernel modesetting enabled by default, > > + and you have a new enough userspace to support this. Running old > > + userspaces with this enabled will cause pain. Note that this causes > > + the driver to bind to PCI devices, which precludes loading things > > + like intelfb. > > + > > +config DRM_I915_FBDEV > > + bool "Enable legacy fbdev support for the modesettting intel driver" > > + depends on DRM_I915 > > + select DRM_KMS_FB_HELPER > > + select FB_CFB_FILLRECT > > + select FB_CFB_COPYAREA > > + select FB_CFB_IMAGEBLIT > > + default y > > + help > > + Choose this option if you have a need for the legacy fbdev > > + support. Note that this support also provide the linux console > > + support on top of the intel modesetting driver. > > + > > +config DRM_I915_PRELIMINARY_HW_SUPPORT > > + bool "Enable preliminary support for prerelease Intel hardware by default" > > + depends on DRM_I915 > > + help > > + Choose this option if you have prerelease Intel hardware and want the > > + i915 driver to support it by default. You can enable such support at > > + runtime with the module option i915.preliminary_hw_support=1; this > > + option changes the default for that module option. > > + > > + If in doubt, say "N". > > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > > index 65e60d2..45e14a8 100644 > > --- a/drivers/gpu/drm/i915/Makefile > > +++ b/drivers/gpu/drm/i915/Makefile > > @@ -33,7 +33,6 @@ i915-y := i915_drv.o i915_dma.o i915_irq.o \ > > intel_panel.o \ > > intel_pm.o \ > > intel_i2c.o \ > > - intel_fb.o \ > > intel_tv.o \ > > intel_dvo.o \ > > intel_ringbuffer.o \ > > @@ -54,6 +53,8 @@ i915-$(CONFIG_COMPAT) += i915_ioc32.o > > > > i915-$(CONFIG_ACPI) += intel_acpi.o > > > > +i915-$(CONFIG_DRM_I915_FBDEV) += intel_fb.o > > + > > obj-$(CONFIG_DRM_I915) += i915.o > > > > CFLAGS_i915_trace_points.o := -I$(src) > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c > > index 5fd6a5d..79bfbd5 100644 > > --- a/drivers/gpu/drm/i915/i915_debugfs.c > > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > > @@ -1399,12 +1399,12 @@ static int i915_gem_framebuffer_info(struct seq_file *m, void *data) > > { > > struct drm_info_node *node = (struct drm_info_node *) m->private; > > struct drm_device *dev = node->minor->dev; > > - drm_i915_private_t *dev_priv = dev->dev_private; > > - struct intel_fbdev *ifbdev; > > + struct intel_fbdev *ifbdev = NULL; > > struct intel_framebuffer *fb; > > - int ret; > > > > - ret = mutex_lock_interruptible(&dev->mode_config.mutex); > > +#ifdef CONFIG_DRM_I915_FBDEV > > + struct drm_i915_private *dev_priv = dev->dev_private; > > + int ret = mutex_lock_interruptible(&dev->mode_config.mutex); > > if (ret) > > return ret; > > > > @@ -1420,6 +1420,7 @@ static int i915_gem_framebuffer_info(struct seq_file *m, void *data) > > describe_obj(m, fb->obj); > > seq_putc(m, '\n'); > > mutex_unlock(&dev->mode_config.mutex); > > +#endif > > > > mutex_lock(&dev->mode_config.fb_lock); > > list_for_each_entry(fb, &dev->mode_config.fb_list, base.head) { > > diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c > > index f221631..90f1fb6 100644 > > --- a/drivers/gpu/drm/i915/i915_dma.c > > +++ b/drivers/gpu/drm/i915/i915_dma.c > > @@ -1416,6 +1416,7 @@ void i915_master_destroy(struct drm_device *dev, struct drm_master *master) > > master->driver_priv = NULL; > > } > > > > +#ifdef CONFIG_DRM_I915_FBDEV > > static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv) > > { > > struct apertures_struct *ap; > > @@ -1436,6 +1437,11 @@ static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv) > > > > kfree(ap); > > } > > +#else > > +static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv) > > +{ > > +} > > +#endif > > > > static void i915_dump_device_info(struct drm_i915_private *dev_priv) > > { > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > > index ed8653f..99f621d 100644 > > --- a/drivers/gpu/drm/i915/i915_drv.h > > +++ b/drivers/gpu/drm/i915/i915_drv.h > > @@ -1354,8 +1354,10 @@ typedef struct drm_i915_private { > > > > struct drm_i915_gem_object *vlv_pctx; > > > > +#ifdef CONFIG_DRM_I915_FBDEV > > /* list of fbdev register on this device */ > > struct intel_fbdev *fbdev; > > +#endif > > > > /* > > * The console may be contended at resume, but we don't > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > > index ded0d45..43e4e75 100644 > > --- a/drivers/gpu/drm/i915/intel_display.c > > +++ b/drivers/gpu/drm/i915/intel_display.c > > @@ -7318,6 +7318,7 @@ static struct drm_framebuffer * > > mode_fits_in_fbdev(struct drm_device *dev, > > struct drm_display_mode *mode) > > { > > +#ifdef CONFIG_DRM_I915_FBDEV > > struct drm_i915_private *dev_priv = dev->dev_private; > > struct drm_i915_gem_object *obj; > > struct drm_framebuffer *fb; > > @@ -7338,6 +7339,9 @@ mode_fits_in_fbdev(struct drm_device *dev, > > return NULL; > > > > return fb; > > +#else > > + return NULL; > > +#endif > > } > > > > bool intel_get_load_detect_pipe(struct drm_connector *connector, > > @@ -10084,6 +10088,12 @@ intel_user_framebuffer_create(struct drm_device *dev, > > return intel_framebuffer_create(dev, mode_cmd, obj); > > } > > > > +#ifndef CONFIG_DRM_I915_FBDEV > > +static inline void intel_fb_output_poll_changed(struct drm_device *dev) > > +{ > > +} > > +#endif > > + > > static const struct drm_mode_config_funcs intel_mode_funcs = { > > .fb_create = intel_user_framebuffer_create, > > .output_poll_changed = intel_fb_output_poll_changed, > > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > > index adfb57c..181d10b 100644 > > --- a/drivers/gpu/drm/i915/intel_drv.h > > +++ b/drivers/gpu/drm/i915/intel_drv.h > > @@ -716,14 +716,36 @@ bool intel_dsi_init(struct drm_device *dev); > > void intel_dvo_init(struct drm_device *dev); > > > > > > -/* intel_fb.c */ > > -int intel_fbdev_init(struct drm_device *dev); > > -void intel_fbdev_initial_config(struct drm_device *dev); > > -void intel_fbdev_fini(struct drm_device *dev); > > -void intel_fbdev_set_suspend(struct drm_device *dev, int state); > > -void intel_fb_output_poll_changed(struct drm_device *dev); > > -void intel_fb_restore_mode(struct drm_device *dev); > > +/* legacy fbdev emulation in intel_fb.c */ > > +#ifdef CONFIG_DRM_I915_FBDEV > > +extern int intel_fbdev_init(struct drm_device *dev); > > +extern void intel_fbdev_initial_config(struct drm_device *dev); > > +extern void intel_fbdev_fini(struct drm_device *dev); > > +extern void intel_fbdev_set_suspend(struct drm_device *dev, int state); > > +extern void intel_fb_output_poll_changed(struct drm_device *dev); > > +extern void intel_fb_restore_mode(struct drm_device *dev); > > +#else > > +static inline int intel_fbdev_init(struct drm_device *dev) > > +{ > > + return 0; > > +} > > > > +static inline void intel_fbdev_initial_config(struct drm_device *dev) > > +{ > > +} > > + > > +static inline void intel_fbdev_fini(struct drm_device *dev) > > +{ > > +} > > + > > +static inline void intel_fbdev_set_suspend(struct drm_device *dev, int state) > > +{ > > +} > > + > > +static inline void intel_fb_restore_mode(struct drm_device *dev) > > +{ > > +} > > +#endif > > > > /* intel_hdmi.c */ > > void intel_hdmi_init(struct drm_device *dev, int hdmi_reg, enum port port); > > -- > > 1.8.1.4 > > -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel