On Fri, Aug 14, 2009 at 5:09 PM, Yang Zhao<y...@yangman.ca> wrote: > Signed-off-by: Yang Zhao <y...@yangman.ca> > --- > drivers/gpu/drm/radeon/radeon.h | 2 ++ > drivers/gpu/drm/radeon/radeon_atombios.c | 28 ++++++++++++++++++++++++++++ > drivers/gpu/drm/radeon/radeon_device.c | 5 +++++ > drivers/gpu/drm/radeon/radeon_mode.h | 2 ++ > 4 files changed, 37 insertions(+), 0 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index b1d945b..ab213d2 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -75,6 +75,7 @@ extern int radeon_connector_table; > #define RADEON_IB_POOL_SIZE 16 > #define RADEON_DEBUGFS_MAX_NUM_FILES 32 > #define RADEONFB_CONN_LIMIT 4 > +#define RADEON_ATOMBIOS_NUM_SCRATCH 8 > > enum radeon_family { > CHIP_R100, > @@ -689,6 +690,7 @@ struct radeon_device { > struct radeon_asic *asic; > struct radeon_gem gem; > struct radeon_pm pm; > + uint32_t > atombios_scratch[RADEON_ATOMBIOS_NUM_SCRATCH]; > struct mutex cs_mutex; > struct radeon_wb wb; > bool gpu_lockup; > diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c > b/drivers/gpu/drm/radeon/radeon_atombios.c > index fcfe5c0..2292443 100644 > --- a/drivers/gpu/drm/radeon/radeon_atombios.c > +++ b/drivers/gpu/drm/radeon/radeon_atombios.c > @@ -971,6 +971,34 @@ void radeon_atom_initialize_bios_scratch_regs(struct > drm_device *dev) > > } > > +void radeon_atom_save_bios_scratch_regs(struct radeon_device *rdev) > +{ > + uint32_t scratch_reg; > + int i; > + > + if (rdev->family >= CHIP_R600) > + scratch_reg = R600_BIOS_0_SCRATCH; > + else > + scratch_reg = RADEON_BIOS_0_SCRATCH; > + > + for (i = 0; i < RADEON_ATOMBIOS_NUM_SCRATCH; i++) > + rdev->atombios_scratch[i] = RREG32(scratch_reg + (i * 4)); > +} > + > +void radeon_atom_restore_bios_scratch_regs(struct radeon_device *rdev) > +{ > + uint32_t scratch_reg; > + int i; > + > + if (rdev->family >= CHIP_R600) > + scratch_reg = R600_BIOS_0_SCRATCH; > + else > + scratch_reg = RADEON_BIOS_0_SCRATCH; > + > + for (i = 0; i < RADEON_ATOMBIOS_NUM_SCRATCH; i++) > + WREG32(scratch_reg + (i * 4), rdev->atombios_scratch[i]); > +} > + > void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock) > { > struct drm_device *dev = encoder->dev; > diff --git a/drivers/gpu/drm/radeon/radeon_device.c > b/drivers/gpu/drm/radeon/radeon_device.c > index 9ff6dcb..4d9baff 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -715,6 +715,9 @@ int radeon_suspend_kms(struct drm_device *dev, > pm_message_t state) > /* wait for gpu to finish processing current batch */ > radeon_fence_wait_last(rdev); > > + if (rdev->is_atom_bios) > + radeon_atom_save_bios_scratch_regs(rdev); > + > radeon_cp_disable(rdev); > radeon_gart_disable(rdev); > > @@ -782,6 +785,8 @@ int radeon_resume_kms(struct drm_device *dev) > goto out; > } > out: > + if (rdev->is_atom_bios) > + radeon_atom_restore_bios_scratch_regs(rdev); > fb_set_suspend(rdev->fbdev_info, 0); > release_console_sem(); >
We need to save/restore the scratch regs on atom and pre-atom cards. Other than that, looks good. We should also probably re-probe on resume in case the user has changed monitors during suspend. Alex > diff --git a/drivers/gpu/drm/radeon/radeon_mode.h > b/drivers/gpu/drm/radeon/radeon_mode.h > index 3b09a1f..9d469a8 100644 > --- a/drivers/gpu/drm/radeon/radeon_mode.h > +++ b/drivers/gpu/drm/radeon/radeon_mode.h > @@ -356,6 +356,8 @@ extern void radeon_combios_output_lock(struct drm_encoder > *encoder, bool lock); > extern void radeon_combios_initialize_bios_scratch_regs(struct drm_device > *dev); > extern void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock); > extern void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev); > +extern void radeon_atom_save_bios_scratch_regs(struct radeon_device *rdev); > +extern void radeon_atom_restore_bios_scratch_regs(struct radeon_device > *rdev); > extern void > radeon_atombios_encoder_crtc_scratch_regs(struct drm_encoder *encoder, int > crtc); > extern void > -- > 1.6.3.3 > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > -- > _______________________________________________ > Dri-devel mailing list > Dri-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/dri-devel > ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july -- _______________________________________________ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel