Skip to content

Commit

Permalink
gma500: unload fixes
Browse files Browse the repository at this point in the history
Debugging the lid problem tested various error paths which were found
wanting so start fixing them up.

There is a ton of improvement work could be done here so that every bit
of functionality agrees if its _fini, _uninit, etc, and they agree who
is responsible for deciding if the clean up is needed.

That can come later.

Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
  • Loading branch information
Alan Cox authored and Dave Airlie committed May 17, 2012
1 parent 6607e02 commit 4ab2c7f
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 40 deletions.
15 changes: 10 additions & 5 deletions drivers/gpu/drm/gma500/framebuffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -800,15 +800,20 @@ void psb_modeset_init(struct drm_device *dev)

if (dev_priv->ops->errata)
dev_priv->ops->errata(dev);

dev_priv->modeset = true;
}

void psb_modeset_cleanup(struct drm_device *dev)
{
mutex_lock(&dev->struct_mutex);
struct drm_psb_private *dev_priv = dev->dev_private;
if (dev_priv->modeset) {
mutex_lock(&dev->struct_mutex);

drm_kms_helper_poll_fini(dev);
psb_fbdev_fini(dev);
drm_mode_config_cleanup(dev);
drm_kms_helper_poll_fini(dev);
psb_fbdev_fini(dev);
drm_mode_config_cleanup(dev);

mutex_unlock(&dev->struct_mutex);
mutex_unlock(&dev->struct_mutex);
}
}
24 changes: 3 additions & 21 deletions drivers/gpu/drm/gma500/intel_bios.c
Original file line number Diff line number Diff line change
Expand Up @@ -490,26 +490,8 @@ bool psb_intel_init_bios(struct drm_device *dev)
void psb_intel_destroy_bios(struct drm_device *dev)
{
struct drm_psb_private *dev_priv = dev->dev_private;
struct drm_display_mode *sdvo_lvds_vbt_mode =
dev_priv->sdvo_lvds_vbt_mode;
struct drm_display_mode *lfp_lvds_vbt_mode =
dev_priv->lfp_lvds_vbt_mode;
struct bdb_lvds_backlight *lvds_bl =
dev_priv->lvds_bl;

/*free sdvo panel mode*/
if (sdvo_lvds_vbt_mode) {
dev_priv->sdvo_lvds_vbt_mode = NULL;
kfree(sdvo_lvds_vbt_mode);
}

if (lfp_lvds_vbt_mode) {
dev_priv->lfp_lvds_vbt_mode = NULL;
kfree(lfp_lvds_vbt_mode);
}

if (lvds_bl) {
dev_priv->lvds_bl = NULL;
kfree(lvds_bl);
}
kfree(dev_priv->sdvo_lvds_vbt_mode);
kfree(dev_priv->lfp_lvds_vbt_mode);
kfree(dev_priv->lvds_bl);
}
20 changes: 6 additions & 14 deletions drivers/gpu/drm/gma500/psb_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,6 @@ static void psb_lastclose(struct drm_device *dev)
return;
}

static void psb_do_takedown(struct drm_device *dev)
{
}

static int psb_do_init(struct drm_device *dev)
{
struct drm_psb_private *dev_priv = dev->dev_private;
Expand Down Expand Up @@ -194,7 +190,6 @@ static int psb_do_init(struct drm_device *dev)
PSB_WSGX32(pg->gatt_start, PSB_CR_BIF_TWOD_REQ_BASE);
return 0;
out_err:
psb_do_takedown(dev);
return ret;
}

Expand All @@ -204,17 +199,16 @@ static int psb_driver_unload(struct drm_device *dev)

/* Kill vblank etc here */

gma_backlight_exit(dev);
psb_modeset_cleanup(dev);

if (dev_priv) {
if (dev_priv->backlight_device)
gma_backlight_exit(dev);
psb_modeset_cleanup(dev);

if (dev_priv->ops->chip_teardown)
dev_priv->ops->chip_teardown(dev);

psb_intel_opregion_fini(dev);
psb_do_takedown(dev);


if (dev_priv->pf_pd) {
psb_mmu_free_pagedir(dev_priv->pf_pd);
Expand Down Expand Up @@ -248,15 +242,13 @@ static int psb_driver_unload(struct drm_device *dev)
dev_priv->sgx_reg = NULL;
}

/* Destroy VBT data */
psb_intel_destroy_bios(dev);

kfree(dev_priv);
dev->dev_private = NULL;

/*destroy VBT data*/
psb_intel_destroy_bios(dev);
}

gma_power_uninit(dev);

return 0;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/gma500/psb_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@ struct drm_psb_private {
* Modesetting
*/
struct psb_intel_mode_device mode_dev;
bool modeset; /* true if we have done the mode_device setup */

struct drm_crtc *plane_to_crtc_mapping[PSB_NUM_PIPE];
struct drm_crtc *pipe_to_crtc_mapping[PSB_NUM_PIPE];
Expand Down

0 comments on commit 4ab2c7f

Please sign in to comment.