2010/2/20 Rafał Miłecki <[email protected]>: > We kept pointers to requested and current clock modes in every power state. > That was useless, more /global/ pointers in power struct are enough. > > Signed-off-by: Rafał Miłecki <[email protected]> > --- > As discussed with Alex we will simplify pointers only, without whole struct > with memcpy. Is this alright Alex?
Looks good. thanks! Reviewed-by: Alex Deucher <[email protected]> > > Dave: this should apply cleanly after reverting previous version. > --- > drivers/gpu/drm/radeon/radeon.h | 5 ++--- > drivers/gpu/drm/radeon/radeon_atombios.c | 20 ++++---------------- > drivers/gpu/drm/radeon/radeon_combios.c | 7 ++++--- > drivers/gpu/drm/radeon/radeon_pm.c | 30 > +++++++++++++++--------------- > 4 files changed, 25 insertions(+), 37 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index 0ca83ca..fc9044e 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -652,9 +652,6 @@ struct radeon_power_state { > struct radeon_pm_clock_info clock_info[8]; > /* number of valid clock modes in this power state */ > int num_clock_modes; > - /* currently selected clock mode */ > - struct radeon_pm_clock_info *current_clock_mode; > - struct radeon_pm_clock_info *requested_clock_mode; > struct radeon_pm_clock_info *default_clock_mode; > /* non clock info about this state */ > struct radeon_pm_non_clock_info non_clock_info; > @@ -691,7 +688,9 @@ struct radeon_pm { > /* number of valid power states */ > int num_power_states; > struct radeon_power_state *current_power_state; > + struct radeon_pm_clock_info *current_clock_mode; > struct radeon_power_state *requested_power_state; > + struct radeon_pm_clock_info *requested_clock_mode; > struct radeon_power_state *default_power_state; > }; > > diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c > b/drivers/gpu/drm/radeon/radeon_atombios.c > index 79d4453..33aed6c 100644 > --- a/drivers/gpu/drm/radeon/radeon_atombios.c > +++ b/drivers/gpu/drm/radeon/radeon_atombios.c > @@ -1450,7 +1450,6 @@ void radeon_atombios_get_power_modes(struct > radeon_device *rdev) > power_info = (union power_info *)(mode_info->atom_context->bios + > data_offset); > > rdev->pm.default_power_state = NULL; > - rdev->pm.current_power_state = NULL; > > if (power_info) { > if (frev < 4) { > @@ -1517,11 +1516,8 @@ void radeon_atombios_get_power_modes(struct > radeon_device *rdev) > > rdev->pm.power_state[state_index].type = > > POWER_STATE_TYPE_DEFAULT; > rdev->pm.default_power_state = > &rdev->pm.power_state[state_index]; > - rdev->pm.current_power_state > = &rdev->pm.power_state[state_index]; > > rdev->pm.power_state[state_index].default_clock_mode = > > &rdev->pm.power_state[state_index].clock_info[0]; > - > rdev->pm.power_state[state_index].current_clock_mode = > - > &rdev->pm.power_state[state_index].clock_info[0]; > } > state_index++; > break; > @@ -1586,11 +1582,8 @@ void radeon_atombios_get_power_modes(struct > radeon_device *rdev) > > rdev->pm.power_state[state_index].type = > > POWER_STATE_TYPE_DEFAULT; > rdev->pm.default_power_state = > &rdev->pm.power_state[state_index]; > - rdev->pm.current_power_state > = &rdev->pm.power_state[state_index]; > > rdev->pm.power_state[state_index].default_clock_mode = > > &rdev->pm.power_state[state_index].clock_info[0]; > - > rdev->pm.power_state[state_index].current_clock_mode = > - > &rdev->pm.power_state[state_index].clock_info[0]; > } > state_index++; > break; > @@ -1661,11 +1654,8 @@ void radeon_atombios_get_power_modes(struct > radeon_device *rdev) > > rdev->pm.power_state[state_index].type = > > POWER_STATE_TYPE_DEFAULT; > rdev->pm.default_power_state = > &rdev->pm.power_state[state_index]; > - rdev->pm.current_power_state > = &rdev->pm.power_state[state_index]; > > rdev->pm.power_state[state_index].default_clock_mode = > > &rdev->pm.power_state[state_index].clock_info[0]; > - > rdev->pm.power_state[state_index].current_clock_mode = > - > &rdev->pm.power_state[state_index].clock_info[0]; > } > state_index++; > break; > @@ -1765,11 +1755,8 @@ void radeon_atombios_get_power_modes(struct > radeon_device *rdev) > > rdev->pm.power_state[state_index].type = > > POWER_STATE_TYPE_DEFAULT; > rdev->pm.default_power_state = > &rdev->pm.power_state[state_index]; > - rdev->pm.current_power_state > = &rdev->pm.power_state[state_index]; > > rdev->pm.power_state[state_index].default_clock_mode = > > &rdev->pm.power_state[state_index].clock_info[mode_index - 1]; > - > rdev->pm.power_state[state_index].current_clock_mode = > - > &rdev->pm.power_state[state_index].clock_info[mode_index - 1]; > } > state_index++; > } > @@ -1788,18 +1775,19 @@ void radeon_atombios_get_power_modes(struct > radeon_device *rdev) > rdev->pm.power_state[state_index].clock_info[0].sclk = > rdev->clock.default_sclk; > rdev->pm.power_state[state_index].default_clock_mode = > &rdev->pm.power_state[state_index].clock_info[0]; > - rdev->pm.power_state[state_index].current_clock_mode = > - &rdev->pm.power_state[state_index].clock_info[0]; > rdev->pm.power_state[state_index].clock_info[0].voltage.type = > VOLTAGE_NONE; > if (rdev->asic->get_pcie_lanes) > > rdev->pm.power_state[state_index].non_clock_info.pcie_lanes = > radeon_get_pcie_lanes(rdev); > else > > rdev->pm.power_state[state_index].non_clock_info.pcie_lanes = 16; > rdev->pm.default_power_state = > &rdev->pm.power_state[state_index]; > - rdev->pm.current_power_state = > &rdev->pm.power_state[state_index]; > state_index++; > } > rdev->pm.num_power_states = state_index; > + > + rdev->pm.current_power_state = rdev->pm.default_power_state; > + rdev->pm.current_clock_mode = > + rdev->pm.default_power_state->default_clock_mode; > } > > void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable) > diff --git a/drivers/gpu/drm/radeon/radeon_combios.c > b/drivers/gpu/drm/radeon/radeon_combios.c > index 5ef791b..69af81d 100644 > --- a/drivers/gpu/drm/radeon/radeon_combios.c > +++ b/drivers/gpu/drm/radeon/radeon_combios.c > @@ -2358,7 +2358,6 @@ void radeon_combios_get_power_modes(struct > radeon_device *rdev) > int state_index = 0; > > rdev->pm.default_power_state = NULL; > - rdev->pm.current_power_state = NULL; > > if (rdev->flags & RADEON_IS_MOBILITY) { > offset = combios_get_table_offset(dev, > COMBIOS_POWERPLAY_INFO_TABLE); > @@ -2447,15 +2446,17 @@ default_mode: > rdev->pm.power_state[state_index].clock_info[0].mclk = > rdev->clock.default_mclk; > rdev->pm.power_state[state_index].clock_info[0].sclk = > rdev->clock.default_sclk; > rdev->pm.power_state[state_index].default_clock_mode = > &rdev->pm.power_state[state_index].clock_info[0]; > - rdev->pm.power_state[state_index].current_clock_mode = > &rdev->pm.power_state[state_index].clock_info[0]; > rdev->pm.power_state[state_index].clock_info[0].voltage.type = > VOLTAGE_NONE; > if (rdev->asic->get_pcie_lanes) > rdev->pm.power_state[state_index].non_clock_info.pcie_lanes = > radeon_get_pcie_lanes(rdev); > else > rdev->pm.power_state[state_index].non_clock_info.pcie_lanes = > 16; > rdev->pm.default_power_state = &rdev->pm.power_state[state_index]; > - rdev->pm.current_power_state = &rdev->pm.power_state[state_index]; > rdev->pm.num_power_states = state_index + 1; > + > + rdev->pm.current_power_state = rdev->pm.default_power_state; > + rdev->pm.current_clock_mode = > + rdev->pm.default_power_state->default_clock_mode; > } > > void radeon_external_tmds_setup(struct drm_encoder *encoder) > diff --git a/drivers/gpu/drm/radeon/radeon_pm.c > b/drivers/gpu/drm/radeon/radeon_pm.c > index 6dbfdf4..8960acf 100644 > --- a/drivers/gpu/drm/radeon/radeon_pm.c > +++ b/drivers/gpu/drm/radeon/radeon_pm.c > @@ -143,50 +143,50 @@ static void radeon_get_power_state(struct radeon_device > *rdev, > enum radeon_pm_action action) > { > switch (action) { > - case PM_ACTION_NONE: > - default: > - rdev->pm.requested_power_state = rdev->pm.current_power_state; > - rdev->pm.requested_power_state->requested_clock_mode = > - rdev->pm.requested_power_state->current_clock_mode; > - break; > case PM_ACTION_MINIMUM: > rdev->pm.requested_power_state = radeon_pick_power_state(rdev, > POWER_STATE_TYPE_BATTERY); > - rdev->pm.requested_power_state->requested_clock_mode = > + rdev->pm.requested_clock_mode = > radeon_pick_clock_mode(rdev, > rdev->pm.requested_power_state, POWER_MODE_TYPE_LOW); > break; > case PM_ACTION_DOWNCLOCK: > rdev->pm.requested_power_state = radeon_pick_power_state(rdev, > POWER_STATE_TYPE_POWERSAVE); > - rdev->pm.requested_power_state->requested_clock_mode = > + rdev->pm.requested_clock_mode = > radeon_pick_clock_mode(rdev, > rdev->pm.requested_power_state, POWER_MODE_TYPE_MID); > break; > case PM_ACTION_UPCLOCK: > rdev->pm.requested_power_state = radeon_pick_power_state(rdev, > POWER_STATE_TYPE_DEFAULT); > - rdev->pm.requested_power_state->requested_clock_mode = > + rdev->pm.requested_clock_mode = > radeon_pick_clock_mode(rdev, > rdev->pm.requested_power_state, POWER_MODE_TYPE_HIGH); > break; > + case PM_ACTION_NONE: > + default: > + DRM_ERROR("Requested mode for not defined action\n"); > + return; > } > DRM_INFO("Requested: e: %d m: %d p: %d\n", > - rdev->pm.requested_power_state->requested_clock_mode->sclk, > - rdev->pm.requested_power_state->requested_clock_mode->mclk, > + rdev->pm.requested_clock_mode->sclk, > + rdev->pm.requested_clock_mode->mclk, > rdev->pm.requested_power_state->non_clock_info.pcie_lanes); > } > > static void radeon_set_power_state(struct radeon_device *rdev) > { > - if (rdev->pm.requested_power_state == rdev->pm.current_power_state) > + /* if *_clock_mode are the same, *_power_state are as well */ > + if (rdev->pm.requested_clock_mode == rdev->pm.current_clock_mode) > return; > > DRM_INFO("Setting: e: %d m: %d p: %d\n", > - rdev->pm.requested_power_state->requested_clock_mode->sclk, > - rdev->pm.requested_power_state->requested_clock_mode->mclk, > + rdev->pm.requested_clock_mode->sclk, > + rdev->pm.requested_clock_mode->mclk, > rdev->pm.requested_power_state->non_clock_info.pcie_lanes); > /* set pcie lanes */ > /* set voltage */ > /* set engine clock */ > - radeon_set_engine_clock(rdev, > rdev->pm.requested_power_state->requested_clock_mode->sclk); > + radeon_set_engine_clock(rdev, rdev->pm.requested_clock_mode->sclk); > /* set memory clock */ > > rdev->pm.current_power_state = rdev->pm.requested_power_state; > + rdev->pm.current_clock_mode = rdev->pm.requested_clock_mode; > } > > int radeon_pm_init(struct radeon_device *rdev) > -- > 1.6.4.2 > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > -- > _______________________________________________ > Dri-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/dri-devel > ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev -- _______________________________________________ Dri-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/dri-devel
