@@ -107,8 +107,10 @@ intel_display_power_domain_str(enum intel_display_power_domain domain)
107
107
return "PORT_OTHER" ;
108
108
case POWER_DOMAIN_VGA :
109
109
return "VGA" ;
110
- case POWER_DOMAIN_AUDIO :
111
- return "AUDIO" ;
110
+ case POWER_DOMAIN_AUDIO_MMIO :
111
+ return "AUDIO_MMIO" ;
112
+ case POWER_DOMAIN_AUDIO_PLAYBACK :
113
+ return "AUDIO_PLAYBACK" ;
112
114
case POWER_DOMAIN_AUX_A :
113
115
return "AUX_A" ;
114
116
case POWER_DOMAIN_AUX_B :
@@ -2509,7 +2511,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2509
2511
BIT_ULL(POWER_DOMAIN_PORT_DSI) | \
2510
2512
BIT_ULL(POWER_DOMAIN_PORT_CRT) | \
2511
2513
BIT_ULL(POWER_DOMAIN_VGA) | \
2512
- BIT_ULL(POWER_DOMAIN_AUDIO) | \
2514
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
2515
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK) | \
2513
2516
BIT_ULL(POWER_DOMAIN_AUX_B) | \
2514
2517
BIT_ULL(POWER_DOMAIN_AUX_C) | \
2515
2518
BIT_ULL(POWER_DOMAIN_GMBUS) | \
@@ -2559,7 +2562,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2559
2562
BIT_ULL(POWER_DOMAIN_PORT_DDI_D_LANES) | \
2560
2563
BIT_ULL(POWER_DOMAIN_PORT_DSI) | \
2561
2564
BIT_ULL(POWER_DOMAIN_VGA) | \
2562
- BIT_ULL(POWER_DOMAIN_AUDIO) | \
2565
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
2566
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK) | \
2563
2567
BIT_ULL(POWER_DOMAIN_AUX_B) | \
2564
2568
BIT_ULL(POWER_DOMAIN_AUX_C) | \
2565
2569
BIT_ULL(POWER_DOMAIN_AUX_D) | \
@@ -2592,7 +2596,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2592
2596
BIT_ULL(POWER_DOMAIN_PORT_DDI_D_LANES) | \
2593
2597
BIT_ULL(POWER_DOMAIN_PORT_CRT) | /* DDI E */ \
2594
2598
BIT_ULL (POWER_DOMAIN_VGA ) | \
2595
- BIT_ULL (POWER_DOMAIN_AUDIO ) | \
2599
+ BIT_ULL (POWER_DOMAIN_AUDIO_MMIO ) | \
2600
+ BIT_ULL (POWER_DOMAIN_AUDIO_PLAYBACK ) | \
2596
2601
BIT_ULL (POWER_DOMAIN_INIT ))
2597
2602
2598
2603
#define BDW_DISPLAY_POWER_DOMAINS ( \
@@ -2608,7 +2613,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2608
2613
BIT_ULL (POWER_DOMAIN_PORT_DDI_D_LANES ) | \
2609
2614
BIT_ULL (POWER_DOMAIN_PORT_CRT ) | /* DDI E */ \
2610
2615
BIT_ULL (POWER_DOMAIN_VGA ) | \
2611
- BIT_ULL (POWER_DOMAIN_AUDIO ) | \
2616
+ BIT_ULL (POWER_DOMAIN_AUDIO_MMIO ) | \
2617
+ BIT_ULL (POWER_DOMAIN_AUDIO_PLAYBACK ) | \
2612
2618
BIT_ULL (POWER_DOMAIN_INIT ))
2613
2619
2614
2620
#define SKL_DISPLAY_POWERWELL_2_POWER_DOMAINS ( \
@@ -2626,7 +2632,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2626
2632
BIT_ULL(POWER_DOMAIN_AUX_B) | \
2627
2633
BIT_ULL(POWER_DOMAIN_AUX_C) | \
2628
2634
BIT_ULL(POWER_DOMAIN_AUX_D) | \
2629
- BIT_ULL(POWER_DOMAIN_AUDIO) | \
2635
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
2636
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK) | \
2630
2637
BIT_ULL(POWER_DOMAIN_VGA) | \
2631
2638
BIT_ULL(POWER_DOMAIN_INIT))
2632
2639
#define SKL_DISPLAY_DDI_IO_A_E_POWER_DOMAINS ( \
@@ -2661,7 +2668,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2661
2668
BIT_ULL(POWER_DOMAIN_PORT_DDI_C_LANES) | \
2662
2669
BIT_ULL(POWER_DOMAIN_AUX_B) | \
2663
2670
BIT_ULL(POWER_DOMAIN_AUX_C) | \
2664
- BIT_ULL(POWER_DOMAIN_AUDIO) | \
2671
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
2672
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK) | \
2665
2673
BIT_ULL(POWER_DOMAIN_VGA) | \
2666
2674
BIT_ULL(POWER_DOMAIN_INIT))
2667
2675
#define BXT_DISPLAY_DC_OFF_POWER_DOMAINS ( \
@@ -2694,7 +2702,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2694
2702
BIT_ULL(POWER_DOMAIN_PORT_DDI_C_LANES) | \
2695
2703
BIT_ULL(POWER_DOMAIN_AUX_B) | \
2696
2704
BIT_ULL(POWER_DOMAIN_AUX_C) | \
2697
- BIT_ULL(POWER_DOMAIN_AUDIO) | \
2705
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
2706
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK) | \
2698
2707
BIT_ULL(POWER_DOMAIN_VGA) | \
2699
2708
BIT_ULL(POWER_DOMAIN_INIT))
2700
2709
#define GLK_DISPLAY_DDI_IO_A_POWER_DOMAINS ( \
@@ -2774,7 +2783,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2774
2783
BIT_ULL(POWER_DOMAIN_AUX_E_TBT) | \
2775
2784
BIT_ULL(POWER_DOMAIN_AUX_F_TBT) | \
2776
2785
BIT_ULL(POWER_DOMAIN_VGA) | \
2777
- BIT_ULL(POWER_DOMAIN_AUDIO) | \
2786
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
2787
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK) | \
2778
2788
BIT_ULL(POWER_DOMAIN_INIT))
2779
2789
/*
2780
2790
* - transcoder WD
@@ -2866,7 +2876,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2866
2876
BIT_ULL(POWER_DOMAIN_AUX_TBT5) | \
2867
2877
BIT_ULL(POWER_DOMAIN_AUX_TBT6) | \
2868
2878
BIT_ULL(POWER_DOMAIN_VGA) | \
2869
- BIT_ULL(POWER_DOMAIN_AUDIO) | \
2879
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
2880
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK) | \
2870
2881
BIT_ULL(POWER_DOMAIN_INIT))
2871
2882
2872
2883
#define TGL_PW_2_POWER_DOMAINS ( \
@@ -2936,7 +2947,8 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2936
2947
RKL_PW_4_POWER_DOMAINS | \
2937
2948
BIT_ULL(POWER_DOMAIN_PIPE_B) | \
2938
2949
BIT_ULL(POWER_DOMAIN_PIPE_B_PANEL_FITTER) | \
2939
- BIT_ULL(POWER_DOMAIN_AUDIO) | \
2950
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
2951
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK) | \
2940
2952
BIT_ULL(POWER_DOMAIN_VGA) | \
2941
2953
BIT_ULL(POWER_DOMAIN_TRANSCODER_B) | \
2942
2954
BIT_ULL(POWER_DOMAIN_PORT_DDI_LANES_TC1) | \
@@ -2973,6 +2985,35 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
2973
2985
BIT_ULL(POWER_DOMAIN_AUX_B) | \
2974
2986
BIT_ULL(POWER_DOMAIN_INIT))
2975
2987
2988
+ /*
2989
+ * DG1 onwards Audio MMIO/VERBS lies in PG0 power well.
2990
+ */
2991
+ #define DG1_PW_3_POWER_DOMAINS ( \
2992
+ TGL_PW_4_POWER_DOMAINS | \
2993
+ BIT_ULL(POWER_DOMAIN_PIPE_B) | \
2994
+ BIT_ULL(POWER_DOMAIN_TRANSCODER_B) | \
2995
+ BIT_ULL(POWER_DOMAIN_PIPE_B_PANEL_FITTER) | \
2996
+ BIT_ULL(POWER_DOMAIN_PORT_DDI_LANES_TC1) | \
2997
+ BIT_ULL(POWER_DOMAIN_PORT_DDI_LANES_TC2) | \
2998
+ BIT_ULL(POWER_DOMAIN_AUX_USBC1) | \
2999
+ BIT_ULL(POWER_DOMAIN_AUX_USBC2) | \
3000
+ BIT_ULL(POWER_DOMAIN_VGA) | \
3001
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK) | \
3002
+ BIT_ULL(POWER_DOMAIN_INIT))
3003
+
3004
+ #define DG1_PW_2_POWER_DOMAINS ( \
3005
+ DG1_PW_3_POWER_DOMAINS | \
3006
+ BIT_ULL(POWER_DOMAIN_TRANSCODER_VDSC_PW2) | \
3007
+ BIT_ULL(POWER_DOMAIN_INIT))
3008
+
3009
+ #define DG1_DISPLAY_DC_OFF_POWER_DOMAINS ( \
3010
+ DG1_PW_3_POWER_DOMAINS | \
3011
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
3012
+ BIT_ULL(POWER_DOMAIN_MODESET) | \
3013
+ BIT_ULL(POWER_DOMAIN_AUX_A) | \
3014
+ BIT_ULL(POWER_DOMAIN_AUX_B) | \
3015
+ BIT_ULL(POWER_DOMAIN_INIT))
3016
+
2976
3017
/*
2977
3018
* XE_LPD Power Domains
2978
3019
*
@@ -3018,7 +3059,7 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
3018
3059
XELPD_PW_B_POWER_DOMAINS | \
3019
3060
XELPD_PW_C_POWER_DOMAINS | \
3020
3061
XELPD_PW_D_POWER_DOMAINS | \
3021
- BIT_ULL(POWER_DOMAIN_AUDIO ) | \
3062
+ BIT_ULL(POWER_DOMAIN_AUDIO_PLAYBACK ) | \
3022
3063
BIT_ULL(POWER_DOMAIN_VGA) | \
3023
3064
BIT_ULL(POWER_DOMAIN_PORT_DDI_C_LANES) | \
3024
3065
BIT_ULL(POWER_DOMAIN_PORT_DDI_LANES_D_XELPD) | \
@@ -3059,6 +3100,7 @@ intel_display_power_put_mask_in_set(struct drm_i915_private *i915,
3059
3100
3060
3101
#define XELPD_DISPLAY_DC_OFF_POWER_DOMAINS ( \
3061
3102
XELPD_PW_2_POWER_DOMAINS | \
3103
+ BIT_ULL(POWER_DOMAIN_AUDIO_MMIO) | \
3062
3104
BIT_ULL(POWER_DOMAIN_MODESET) | \
3063
3105
BIT_ULL(POWER_DOMAIN_AUX_A) | \
3064
3106
BIT_ULL(POWER_DOMAIN_AUX_B) | \
@@ -4445,6 +4487,165 @@ static const struct i915_power_well_desc rkl_power_wells[] = {
4445
4487
},
4446
4488
};
4447
4489
4490
+ static const struct i915_power_well_desc dg1_power_wells [] = {
4491
+ {
4492
+ .name = "always-on" ,
4493
+ .always_on = true,
4494
+ .domains = POWER_DOMAIN_MASK ,
4495
+ .ops = & i9xx_always_on_power_well_ops ,
4496
+ .id = DISP_PW_ID_NONE ,
4497
+ },
4498
+ {
4499
+ .name = "power well 1" ,
4500
+ /* Handled by the DMC firmware */
4501
+ .always_on = true,
4502
+ .domains = 0 ,
4503
+ .ops = & hsw_power_well_ops ,
4504
+ .id = SKL_DISP_PW_1 ,
4505
+ {
4506
+ .hsw .regs = & hsw_power_well_regs ,
4507
+ .hsw .idx = ICL_PW_CTL_IDX_PW_1 ,
4508
+ .hsw .has_fuses = true,
4509
+ },
4510
+ },
4511
+ {
4512
+ .name = "DC off" ,
4513
+ .domains = DG1_DISPLAY_DC_OFF_POWER_DOMAINS ,
4514
+ .ops = & gen9_dc_off_power_well_ops ,
4515
+ .id = SKL_DISP_DC_OFF ,
4516
+ },
4517
+ {
4518
+ .name = "power well 2" ,
4519
+ .domains = DG1_PW_2_POWER_DOMAINS ,
4520
+ .ops = & hsw_power_well_ops ,
4521
+ .id = SKL_DISP_PW_2 ,
4522
+ {
4523
+ .hsw .regs = & hsw_power_well_regs ,
4524
+ .hsw .idx = ICL_PW_CTL_IDX_PW_2 ,
4525
+ .hsw .has_fuses = true,
4526
+ },
4527
+ },
4528
+ {
4529
+ .name = "power well 3" ,
4530
+ .domains = DG1_PW_3_POWER_DOMAINS ,
4531
+ .ops = & hsw_power_well_ops ,
4532
+ .id = ICL_DISP_PW_3 ,
4533
+ {
4534
+ .hsw .regs = & hsw_power_well_regs ,
4535
+ .hsw .idx = ICL_PW_CTL_IDX_PW_3 ,
4536
+ .hsw .irq_pipe_mask = BIT (PIPE_B ),
4537
+ .hsw .has_vga = true,
4538
+ .hsw .has_fuses = true,
4539
+ },
4540
+ },
4541
+ {
4542
+ .name = "DDI A IO" ,
4543
+ .domains = ICL_DDI_IO_A_POWER_DOMAINS ,
4544
+ .ops = & hsw_power_well_ops ,
4545
+ .id = DISP_PW_ID_NONE ,
4546
+ {
4547
+ .hsw .regs = & icl_ddi_power_well_regs ,
4548
+ .hsw .idx = ICL_PW_CTL_IDX_DDI_A ,
4549
+ }
4550
+ },
4551
+ {
4552
+ .name = "DDI B IO" ,
4553
+ .domains = ICL_DDI_IO_B_POWER_DOMAINS ,
4554
+ .ops = & hsw_power_well_ops ,
4555
+ .id = DISP_PW_ID_NONE ,
4556
+ {
4557
+ .hsw .regs = & icl_ddi_power_well_regs ,
4558
+ .hsw .idx = ICL_PW_CTL_IDX_DDI_B ,
4559
+ }
4560
+ },
4561
+ {
4562
+ .name = "DDI IO TC1" ,
4563
+ .domains = TGL_DDI_IO_TC1_POWER_DOMAINS ,
4564
+ .ops = & hsw_power_well_ops ,
4565
+ .id = DISP_PW_ID_NONE ,
4566
+ {
4567
+ .hsw .regs = & icl_ddi_power_well_regs ,
4568
+ .hsw .idx = TGL_PW_CTL_IDX_DDI_TC1 ,
4569
+ },
4570
+ },
4571
+ {
4572
+ .name = "DDI IO TC2" ,
4573
+ .domains = TGL_DDI_IO_TC2_POWER_DOMAINS ,
4574
+ .ops = & hsw_power_well_ops ,
4575
+ .id = DISP_PW_ID_NONE ,
4576
+ {
4577
+ .hsw .regs = & icl_ddi_power_well_regs ,
4578
+ .hsw .idx = TGL_PW_CTL_IDX_DDI_TC2 ,
4579
+ },
4580
+ },
4581
+ {
4582
+ .name = "AUX A" ,
4583
+ .domains = TGL_AUX_A_IO_POWER_DOMAINS ,
4584
+ .ops = & icl_aux_power_well_ops ,
4585
+ .id = DISP_PW_ID_NONE ,
4586
+ {
4587
+ .hsw .regs = & icl_aux_power_well_regs ,
4588
+ .hsw .idx = ICL_PW_CTL_IDX_AUX_A ,
4589
+ },
4590
+ },
4591
+ {
4592
+ .name = "AUX B" ,
4593
+ .domains = TGL_AUX_B_IO_POWER_DOMAINS ,
4594
+ .ops = & icl_aux_power_well_ops ,
4595
+ .id = DISP_PW_ID_NONE ,
4596
+ {
4597
+ .hsw .regs = & icl_aux_power_well_regs ,
4598
+ .hsw .idx = ICL_PW_CTL_IDX_AUX_B ,
4599
+ },
4600
+ },
4601
+ {
4602
+ .name = "AUX USBC1" ,
4603
+ .domains = TGL_AUX_IO_USBC1_POWER_DOMAINS ,
4604
+ .ops = & icl_aux_power_well_ops ,
4605
+ .id = DISP_PW_ID_NONE ,
4606
+ {
4607
+ .hsw .regs = & icl_aux_power_well_regs ,
4608
+ .hsw .idx = TGL_PW_CTL_IDX_AUX_TC1 ,
4609
+ .hsw .is_tc_tbt = false,
4610
+ },
4611
+ },
4612
+ {
4613
+ .name = "AUX USBC2" ,
4614
+ .domains = TGL_AUX_IO_USBC2_POWER_DOMAINS ,
4615
+ .ops = & icl_aux_power_well_ops ,
4616
+ .id = DISP_PW_ID_NONE ,
4617
+ {
4618
+ .hsw .regs = & icl_aux_power_well_regs ,
4619
+ .hsw .idx = TGL_PW_CTL_IDX_AUX_TC2 ,
4620
+ .hsw .is_tc_tbt = false,
4621
+ },
4622
+ },
4623
+ {
4624
+ .name = "power well 4" ,
4625
+ .domains = TGL_PW_4_POWER_DOMAINS ,
4626
+ .ops = & hsw_power_well_ops ,
4627
+ .id = DISP_PW_ID_NONE ,
4628
+ {
4629
+ .hsw .regs = & hsw_power_well_regs ,
4630
+ .hsw .idx = ICL_PW_CTL_IDX_PW_4 ,
4631
+ .hsw .has_fuses = true,
4632
+ .hsw .irq_pipe_mask = BIT (PIPE_C ),
4633
+ }
4634
+ },
4635
+ {
4636
+ .name = "power well 5" ,
4637
+ .domains = TGL_PW_5_POWER_DOMAINS ,
4638
+ .ops = & hsw_power_well_ops ,
4639
+ .id = DISP_PW_ID_NONE ,
4640
+ {
4641
+ .hsw .regs = & hsw_power_well_regs ,
4642
+ .hsw .idx = TGL_PW_CTL_IDX_PW_5 ,
4643
+ .hsw .has_fuses = true,
4644
+ .hsw .irq_pipe_mask = BIT (PIPE_D ),
4645
+ },
4646
+ },
4647
+ };
4648
+
4448
4649
static const struct i915_power_well_desc xelpd_power_wells [] = {
4449
4650
{
4450
4651
.name = "always-on" ,
@@ -4929,7 +5130,9 @@ int intel_power_domains_init(struct drm_i915_private *dev_priv)
4929
5130
err = 0 ;
4930
5131
} else if (DISPLAY_VER (dev_priv ) >= 13 ) {
4931
5132
err = set_power_wells (power_domains , xelpd_power_wells );
4932
- } else if (IS_ALDERLAKE_S (dev_priv ) || IS_DG1 (dev_priv )) {
5133
+ } else if (IS_DG1 (dev_priv )) {
5134
+ err = set_power_wells (power_domains , dg1_power_wells );
5135
+ } else if (IS_ALDERLAKE_S (dev_priv )) {
4933
5136
err = set_power_wells_mask (power_domains , tgl_power_wells ,
4934
5137
BIT_ULL (TGL_DISP_PW_TC_COLD_OFF ));
4935
5138
} else if (IS_ROCKETLAKE (dev_priv )) {
0 commit comments