Commit f34f516a authored by Dave Airlie's avatar Dave Airlie

Merge branch 'drm-fixes-3.11' of git://people.freedesktop.org/~agd5f/linux

Alex writes:
- more fixes for SI dpm
- fix DP on some rv6xx boards

* 'drm-fixes-3.11' of git://people.freedesktop.org/~agd5f/linux:
  drm/radeon/dpm: re-enable cac control on SI
  drm/radeon/dpm: fix calculations in si_calculate_leakage_for_v_and_t_formula
  drm: fix 64 bit drm fixed point helpers
  drm/radeon/atom: initialize more atom interpretor elements to 0
parents e9e3c8a2 5a344dda
...@@ -1222,12 +1222,17 @@ int atom_execute_table(struct atom_context *ctx, int index, uint32_t * params) ...@@ -1222,12 +1222,17 @@ int atom_execute_table(struct atom_context *ctx, int index, uint32_t * params)
int r; int r;
mutex_lock(&ctx->mutex); mutex_lock(&ctx->mutex);
/* reset data block */
ctx->data_block = 0;
/* reset reg block */ /* reset reg block */
ctx->reg_block = 0; ctx->reg_block = 0;
/* reset fb window */ /* reset fb window */
ctx->fb_base = 0; ctx->fb_base = 0;
/* reset io mode */ /* reset io mode */
ctx->io_mode = ATOM_IO_MM; ctx->io_mode = ATOM_IO_MM;
/* reset divmul */
ctx->divmul[0] = 0;
ctx->divmul[1] = 0;
r = atom_execute_table_locked(ctx, index, params); r = atom_execute_table_locked(ctx, index, params);
mutex_unlock(&ctx->mutex); mutex_unlock(&ctx->mutex);
return r; return r;
......
...@@ -1765,8 +1765,9 @@ static void si_calculate_leakage_for_v_and_t_formula(const struct ni_leakage_coe ...@@ -1765,8 +1765,9 @@ static void si_calculate_leakage_for_v_and_t_formula(const struct ni_leakage_coe
{ {
s64 kt, kv, leakage_w, i_leakage, vddc; s64 kt, kv, leakage_w, i_leakage, vddc;
s64 temperature, t_slope, t_intercept, av, bv, t_ref; s64 temperature, t_slope, t_intercept, av, bv, t_ref;
s64 tmp;
i_leakage = drm_int2fixp(ileakage / 100); i_leakage = drm_int2fixp(ileakage) / 100;
vddc = div64_s64(drm_int2fixp(v), 1000); vddc = div64_s64(drm_int2fixp(v), 1000);
temperature = div64_s64(drm_int2fixp(t), 1000); temperature = div64_s64(drm_int2fixp(t), 1000);
...@@ -1776,8 +1777,9 @@ static void si_calculate_leakage_for_v_and_t_formula(const struct ni_leakage_coe ...@@ -1776,8 +1777,9 @@ static void si_calculate_leakage_for_v_and_t_formula(const struct ni_leakage_coe
bv = div64_s64(drm_int2fixp(coeff->bv), 100000000); bv = div64_s64(drm_int2fixp(coeff->bv), 100000000);
t_ref = drm_int2fixp(coeff->t_ref); t_ref = drm_int2fixp(coeff->t_ref);
kt = drm_fixp_div(drm_fixp_exp(drm_fixp_mul(drm_fixp_mul(t_slope, vddc) + t_intercept, temperature)), tmp = drm_fixp_mul(t_slope, vddc) + t_intercept;
drm_fixp_exp(drm_fixp_mul(drm_fixp_mul(t_slope, vddc) + t_intercept, t_ref))); kt = drm_fixp_exp(drm_fixp_mul(tmp, temperature));
kt = drm_fixp_div(kt, drm_fixp_exp(drm_fixp_mul(tmp, t_ref)));
kv = drm_fixp_mul(av, drm_fixp_exp(drm_fixp_mul(bv, vddc))); kv = drm_fixp_mul(av, drm_fixp_exp(drm_fixp_mul(bv, vddc)));
leakage_w = drm_fixp_mul(drm_fixp_mul(drm_fixp_mul(i_leakage, kt), kv), vddc); leakage_w = drm_fixp_mul(drm_fixp_mul(drm_fixp_mul(i_leakage, kt), kv), vddc);
...@@ -2042,8 +2044,7 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev) ...@@ -2042,8 +2044,7 @@ static void si_initialize_powertune_defaults(struct radeon_device *rdev)
ni_pi->enable_sq_ramping = false; ni_pi->enable_sq_ramping = false;
si_pi->enable_dte = false; si_pi->enable_dte = false;
/* XXX: fix me */ if (si_pi->powertune_data->enable_powertune_by_default) {
if (0/*si_pi->powertune_data->enable_powertune_by_default*/) {
ni_pi->enable_power_containment= true; ni_pi->enable_power_containment= true;
ni_pi->enable_cac = true; ni_pi->enable_cac = true;
if (si_pi->dte_data.enable_dte_by_default) { if (si_pi->dte_data.enable_dte_by_default) {
......
...@@ -84,12 +84,12 @@ static inline int drm_fixp2int(int64_t a) ...@@ -84,12 +84,12 @@ static inline int drm_fixp2int(int64_t a)
return ((s64)a) >> DRM_FIXED_POINT; return ((s64)a) >> DRM_FIXED_POINT;
} }
static inline s64 drm_fixp_msbset(int64_t a) static inline unsigned drm_fixp_msbset(int64_t a)
{ {
unsigned shift, sign = (a >> 63) & 1; unsigned shift, sign = (a >> 63) & 1;
for (shift = 62; shift > 0; --shift) for (shift = 62; shift > 0; --shift)
if ((a >> shift) != sign) if (((a >> shift) & 1) != sign)
return shift; return shift;
return 0; return 0;
...@@ -100,9 +100,9 @@ static inline s64 drm_fixp_mul(s64 a, s64 b) ...@@ -100,9 +100,9 @@ static inline s64 drm_fixp_mul(s64 a, s64 b)
unsigned shift = drm_fixp_msbset(a) + drm_fixp_msbset(b); unsigned shift = drm_fixp_msbset(a) + drm_fixp_msbset(b);
s64 result; s64 result;
if (shift > 63) { if (shift > 61) {
shift = shift - 63; shift = shift - 61;
a >>= shift >> 1; a >>= (shift >> 1) + (shift & 1);
b >>= shift >> 1; b >>= shift >> 1;
} else } else
shift = 0; shift = 0;
...@@ -120,7 +120,7 @@ static inline s64 drm_fixp_mul(s64 a, s64 b) ...@@ -120,7 +120,7 @@ static inline s64 drm_fixp_mul(s64 a, s64 b)
static inline s64 drm_fixp_div(s64 a, s64 b) static inline s64 drm_fixp_div(s64 a, s64 b)
{ {
unsigned shift = 63 - drm_fixp_msbset(a); unsigned shift = 62 - drm_fixp_msbset(a);
s64 result; s64 result;
a <<= shift; a <<= shift;
...@@ -154,7 +154,7 @@ static inline s64 drm_fixp_exp(s64 x) ...@@ -154,7 +154,7 @@ static inline s64 drm_fixp_exp(s64 x)
} }
if (x < 0) if (x < 0)
sum = drm_fixp_div(1, sum); sum = drm_fixp_div(DRM_FIXED_ONE, sum);
return sum; return sum;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment