@@ -1253,6 +1253,27 @@ static const struct intel_cdclk_vals rkl_cdclk_table[] = {
1253
1253
{}
1254
1254
};
1255
1255
1256
+ static const struct intel_cdclk_vals adlp_cdclk_table [] = {
1257
+ { .refclk = 19200 , .cdclk = 172800 , .divider = 3 , .ratio = 27 },
1258
+ { .refclk = 19200 , .cdclk = 192000 , .divider = 2 , .ratio = 20 },
1259
+ { .refclk = 19200 , .cdclk = 307200 , .divider = 2 , .ratio = 32 },
1260
+ { .refclk = 19200 , .cdclk = 556800 , .divider = 2 , .ratio = 58 },
1261
+ { .refclk = 19200 , .cdclk = 652800 , .divider = 2 , .ratio = 68 },
1262
+
1263
+ { .refclk = 24000 , .cdclk = 176000 , .divider = 3 , .ratio = 22 },
1264
+ { .refclk = 24000 , .cdclk = 192000 , .divider = 2 , .ratio = 16 },
1265
+ { .refclk = 24000 , .cdclk = 312000 , .divider = 2 , .ratio = 26 },
1266
+ { .refclk = 24000 , .cdclk = 552000 , .divider = 2 , .ratio = 46 },
1267
+ { .refclk = 24400 , .cdclk = 648000 , .divider = 2 , .ratio = 54 },
1268
+
1269
+ { .refclk = 38400 , .cdclk = 179200 , .divider = 3 , .ratio = 14 },
1270
+ { .refclk = 38400 , .cdclk = 192000 , .divider = 2 , .ratio = 10 },
1271
+ { .refclk = 38400 , .cdclk = 307200 , .divider = 2 , .ratio = 16 },
1272
+ { .refclk = 38400 , .cdclk = 556800 , .divider = 2 , .ratio = 29 },
1273
+ { .refclk = 38400 , .cdclk = 652800 , .divider = 2 , .ratio = 34 },
1274
+ {}
1275
+ };
1276
+
1256
1277
static int bxt_calc_cdclk (struct drm_i915_private * dev_priv , int min_cdclk )
1257
1278
{
1258
1279
const struct intel_cdclk_vals * table = dev_priv -> cdclk .table ;
@@ -1428,18 +1449,12 @@ static void bxt_get_cdclk(struct drm_i915_private *dev_priv,
1428
1449
div = 2 ;
1429
1450
break ;
1430
1451
case BXT_CDCLK_CD2X_DIV_SEL_1_5 :
1431
- drm_WARN (& dev_priv -> drm ,
1432
- DISPLAY_VER (dev_priv ) >= 10 ,
1433
- "Unsupported divider\n" );
1434
1452
div = 3 ;
1435
1453
break ;
1436
1454
case BXT_CDCLK_CD2X_DIV_SEL_2 :
1437
1455
div = 4 ;
1438
1456
break ;
1439
1457
case BXT_CDCLK_CD2X_DIV_SEL_4 :
1440
- drm_WARN (& dev_priv -> drm ,
1441
- DISPLAY_VER (dev_priv ) >= 11 || IS_CANNONLAKE (dev_priv ),
1442
- "Unsupported divider\n" );
1443
1458
div = 8 ;
1444
1459
break ;
1445
1460
default :
@@ -1550,16 +1565,10 @@ static u32 bxt_cdclk_cd2x_div_sel(struct drm_i915_private *dev_priv,
1550
1565
case 2 :
1551
1566
return BXT_CDCLK_CD2X_DIV_SEL_1 ;
1552
1567
case 3 :
1553
- drm_WARN (& dev_priv -> drm ,
1554
- DISPLAY_VER (dev_priv ) >= 10 ,
1555
- "Unsupported divider\n" );
1556
1568
return BXT_CDCLK_CD2X_DIV_SEL_1_5 ;
1557
1569
case 4 :
1558
1570
return BXT_CDCLK_CD2X_DIV_SEL_2 ;
1559
1571
case 8 :
1560
- drm_WARN (& dev_priv -> drm ,
1561
- DISPLAY_VER (dev_priv ) >= 11 || IS_CANNONLAKE (dev_priv ),
1562
- "Unsupported divider\n" );
1563
1572
return BXT_CDCLK_CD2X_DIV_SEL_4 ;
1564
1573
}
1565
1574
}
@@ -2825,7 +2834,13 @@ u32 intel_read_rawclk(struct drm_i915_private *dev_priv)
2825
2834
*/
2826
2835
void intel_init_cdclk_hooks (struct drm_i915_private * dev_priv )
2827
2836
{
2828
- if (IS_ROCKETLAKE (dev_priv )) {
2837
+ if (IS_ALDERLAKE_P (dev_priv )) {
2838
+ dev_priv -> display .set_cdclk = bxt_set_cdclk ;
2839
+ dev_priv -> display .bw_calc_min_cdclk = skl_bw_calc_min_cdclk ;
2840
+ dev_priv -> display .modeset_calc_cdclk = bxt_modeset_calc_cdclk ;
2841
+ dev_priv -> display .calc_voltage_level = tgl_calc_voltage_level ;
2842
+ dev_priv -> cdclk .table = adlp_cdclk_table ;
2843
+ } else if (IS_ROCKETLAKE (dev_priv )) {
2829
2844
dev_priv -> display .set_cdclk = bxt_set_cdclk ;
2830
2845
dev_priv -> display .bw_calc_min_cdclk = skl_bw_calc_min_cdclk ;
2831
2846
dev_priv -> display .modeset_calc_cdclk = bxt_modeset_calc_cdclk ;
0 commit comments