Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: Convert device_info to uncore/de_read

Use intel_<uncore/de>_read instead of I915_READ to read the
informational registers.

Extended from an original sseu-only patch by Sandeep.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Andi Shyti <andi.shyti@intel.com>
Cc: Venkata Sandeep Dhanalakota <venkata.s.dhanalakota@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200708003952.21831-2-daniele.ceraolospurio@intel.com

authored by

Daniele Ceraolo Spurio and committed by
Chris Wilson
fdeb6d02 e828da30

+47 -30
+47 -30
drivers/gpu/drm/i915/intel_device_info.c
··· 26 26 #include <drm/i915_pciids.h> 27 27 28 28 #include "display/intel_cdclk.h" 29 + #include "display/intel_de.h" 29 30 #include "intel_device_info.h" 30 31 #include "i915_drv.h" 31 32 ··· 238 237 static void gen12_sseu_info_init(struct drm_i915_private *dev_priv) 239 238 { 240 239 struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu; 240 + struct intel_uncore *uncore = &dev_priv->uncore; 241 241 u8 s_en; 242 242 u32 dss_en; 243 243 u16 eu_en = 0; ··· 252 250 */ 253 251 intel_sseu_set_info(sseu, 1, 6, 16); 254 252 255 - s_en = I915_READ(GEN11_GT_SLICE_ENABLE) & GEN11_GT_S_ENA_MASK; 253 + s_en = intel_uncore_read(uncore, GEN11_GT_SLICE_ENABLE) & 254 + GEN11_GT_S_ENA_MASK; 256 255 257 - dss_en = I915_READ(GEN12_GT_DSS_ENABLE); 256 + dss_en = intel_uncore_read(uncore, GEN12_GT_DSS_ENABLE); 258 257 259 258 /* one bit per pair of EUs */ 260 - eu_en_fuse = ~(I915_READ(GEN11_EU_DISABLE) & GEN11_EU_DIS_MASK); 259 + eu_en_fuse = ~(intel_uncore_read(uncore, GEN11_EU_DISABLE) & 260 + GEN11_EU_DIS_MASK); 261 261 for (eu = 0; eu < sseu->max_eus_per_subslice / 2; eu++) 262 262 if (eu_en_fuse & BIT(eu)) 263 263 eu_en |= BIT(eu * 2) | BIT(eu * 2 + 1); ··· 273 269 static void gen11_sseu_info_init(struct drm_i915_private *dev_priv) 274 270 { 275 271 struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu; 272 + struct intel_uncore *uncore = &dev_priv->uncore; 276 273 u8 s_en; 277 274 u32 ss_en; 278 275 u8 eu_en; ··· 283 278 else 284 279 intel_sseu_set_info(sseu, 1, 8, 8); 285 280 286 - s_en = I915_READ(GEN11_GT_SLICE_ENABLE) & GEN11_GT_S_ENA_MASK; 287 - ss_en = ~I915_READ(GEN11_GT_SUBSLICE_DISABLE); 288 - eu_en = ~(I915_READ(GEN11_EU_DISABLE) & GEN11_EU_DIS_MASK); 281 + s_en = intel_uncore_read(uncore, GEN11_GT_SLICE_ENABLE) & 282 + GEN11_GT_S_ENA_MASK; 283 + ss_en = ~intel_uncore_read(uncore, GEN11_GT_SUBSLICE_DISABLE); 284 + 285 + eu_en = ~(intel_uncore_read(uncore, GEN11_EU_DISABLE) & 286 + GEN11_EU_DIS_MASK); 289 287 290 288 gen11_compute_sseu_info(sseu, s_en, ss_en, eu_en); 291 289 ··· 300 292 301 293 static void gen10_sseu_info_init(struct drm_i915_private *dev_priv) 302 294 { 295 + struct intel_uncore *uncore = &dev_priv->uncore; 303 296 struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu; 304 - const u32 fuse2 = I915_READ(GEN8_FUSE2); 297 + const u32 fuse2 = intel_uncore_read(uncore, GEN8_FUSE2); 305 298 int s, ss; 306 299 const int eu_mask = 0xff; 307 300 u32 subslice_mask, eu_en; ··· 313 304 GEN10_F2_S_ENA_SHIFT; 314 305 315 306 /* Slice0 */ 316 - eu_en = ~I915_READ(GEN8_EU_DISABLE0); 307 + eu_en = ~intel_uncore_read(uncore, GEN8_EU_DISABLE0); 317 308 for (ss = 0; ss < sseu->max_subslices; ss++) 318 309 sseu_set_eus(sseu, 0, ss, (eu_en >> (8 * ss)) & eu_mask); 319 310 /* Slice1 */ 320 311 sseu_set_eus(sseu, 1, 0, (eu_en >> 24) & eu_mask); 321 - eu_en = ~I915_READ(GEN8_EU_DISABLE1); 312 + eu_en = ~intel_uncore_read(uncore, GEN8_EU_DISABLE1); 322 313 sseu_set_eus(sseu, 1, 1, eu_en & eu_mask); 323 314 /* Slice2 */ 324 315 sseu_set_eus(sseu, 2, 0, (eu_en >> 8) & eu_mask); 325 316 sseu_set_eus(sseu, 2, 1, (eu_en >> 16) & eu_mask); 326 317 /* Slice3 */ 327 318 sseu_set_eus(sseu, 3, 0, (eu_en >> 24) & eu_mask); 328 - eu_en = ~I915_READ(GEN8_EU_DISABLE2); 319 + eu_en = ~intel_uncore_read(uncore, GEN8_EU_DISABLE2); 329 320 sseu_set_eus(sseu, 3, 1, eu_en & eu_mask); 330 321 /* Slice4 */ 331 322 sseu_set_eus(sseu, 4, 0, (eu_en >> 8) & eu_mask); 332 323 sseu_set_eus(sseu, 4, 1, (eu_en >> 16) & eu_mask); 333 324 /* Slice5 */ 334 325 sseu_set_eus(sseu, 5, 0, (eu_en >> 24) & eu_mask); 335 - eu_en = ~I915_READ(GEN10_EU_DISABLE3); 326 + eu_en = ~intel_uncore_read(uncore, GEN10_EU_DISABLE3); 336 327 sseu_set_eus(sseu, 5, 1, eu_en & eu_mask); 337 328 338 329 subslice_mask = (1 << 4) - 1; ··· 381 372 u32 fuse; 382 373 u8 subslice_mask = 0; 383 374 384 - fuse = I915_READ(CHV_FUSE_GT); 375 + fuse = intel_uncore_read(&dev_priv->uncore, CHV_FUSE_GT); 385 376 386 377 sseu->slice_mask = BIT(0); 387 378 intel_sseu_set_info(sseu, 1, 2, 8); ··· 434 425 { 435 426 struct intel_device_info *info = mkwrite_device_info(dev_priv); 436 427 struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu; 428 + struct intel_uncore *uncore = &dev_priv->uncore; 437 429 int s, ss; 438 430 u32 fuse2, eu_disable, subslice_mask; 439 431 const u8 eu_mask = 0xff; 440 432 441 - fuse2 = I915_READ(GEN8_FUSE2); 433 + fuse2 = intel_uncore_read(uncore, GEN8_FUSE2); 442 434 sseu->slice_mask = (fuse2 & GEN8_F2_S_ENA_MASK) >> GEN8_F2_S_ENA_SHIFT; 443 435 444 436 /* BXT has a single slice and at most 3 subslices. */ ··· 465 455 466 456 intel_sseu_set_subslices(sseu, s, subslice_mask); 467 457 468 - eu_disable = I915_READ(GEN9_EU_DISABLE(s)); 458 + eu_disable = intel_uncore_read(uncore, GEN9_EU_DISABLE(s)); 469 459 for (ss = 0; ss < sseu->max_subslices; ss++) { 470 460 int eu_per_ss; 471 461 u8 eu_disabled_mask; ··· 538 528 static void bdw_sseu_info_init(struct drm_i915_private *dev_priv) 539 529 { 540 530 struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu; 531 + struct intel_uncore *uncore = &dev_priv->uncore; 541 532 int s, ss; 542 533 u32 fuse2, subslice_mask, eu_disable[3]; /* s_max */ 534 + u32 eu_disable0, eu_disable1, eu_disable2; 543 535 544 - fuse2 = I915_READ(GEN8_FUSE2); 536 + fuse2 = intel_uncore_read(uncore, GEN8_FUSE2); 545 537 sseu->slice_mask = (fuse2 & GEN8_F2_S_ENA_MASK) >> GEN8_F2_S_ENA_SHIFT; 546 538 intel_sseu_set_info(sseu, 3, 3, 8); 547 539 ··· 554 542 subslice_mask = GENMASK(sseu->max_subslices - 1, 0); 555 543 subslice_mask &= ~((fuse2 & GEN8_F2_SS_DIS_MASK) >> 556 544 GEN8_F2_SS_DIS_SHIFT); 557 - 558 - eu_disable[0] = I915_READ(GEN8_EU_DISABLE0) & GEN8_EU_DIS0_S0_MASK; 559 - eu_disable[1] = (I915_READ(GEN8_EU_DISABLE0) >> GEN8_EU_DIS0_S1_SHIFT) | 560 - ((I915_READ(GEN8_EU_DISABLE1) & GEN8_EU_DIS1_S1_MASK) << 545 + eu_disable0 = intel_uncore_read(uncore, GEN8_EU_DISABLE0); 546 + eu_disable1 = intel_uncore_read(uncore, GEN8_EU_DISABLE1); 547 + eu_disable2 = intel_uncore_read(uncore, GEN8_EU_DISABLE2); 548 + eu_disable[0] = eu_disable0 & GEN8_EU_DIS0_S0_MASK; 549 + eu_disable[1] = (eu_disable0 >> GEN8_EU_DIS0_S1_SHIFT) | 550 + ((eu_disable1 & GEN8_EU_DIS1_S1_MASK) << 561 551 (32 - GEN8_EU_DIS0_S1_SHIFT)); 562 - eu_disable[2] = (I915_READ(GEN8_EU_DISABLE1) >> GEN8_EU_DIS1_S2_SHIFT) | 563 - ((I915_READ(GEN8_EU_DISABLE2) & GEN8_EU_DIS2_S2_MASK) << 552 + eu_disable[2] = (eu_disable1 >> GEN8_EU_DIS1_S2_SHIFT) | 553 + ((eu_disable2 & GEN8_EU_DIS2_S2_MASK) << 564 554 (32 - GEN8_EU_DIS1_S2_SHIFT)); 565 555 566 556 /* ··· 649 635 break; 650 636 } 651 637 652 - fuse1 = I915_READ(HSW_PAVP_FUSE1); 638 + fuse1 = intel_uncore_read(&dev_priv->uncore, HSW_PAVP_FUSE1); 653 639 switch ((fuse1 & HSW_F1_EU_DIS_MASK) >> HSW_F1_EU_DIS_SHIFT) { 654 640 default: 655 641 MISSING_CASE((fuse1 & HSW_F1_EU_DIS_MASK) >> ··· 689 675 690 676 static u32 read_reference_ts_freq(struct drm_i915_private *dev_priv) 691 677 { 692 - u32 ts_override = I915_READ(GEN9_TIMESTAMP_OVERRIDE); 678 + u32 ts_override = intel_uncore_read(&dev_priv->uncore, 679 + GEN9_TIMESTAMP_OVERRIDE); 693 680 u32 base_freq, frac_freq; 694 681 695 682 base_freq = ((ts_override & GEN9_TIMESTAMP_OVERRIDE_US_COUNTER_DIVIDER_MASK) >> ··· 753 738 754 739 static u32 read_timestamp_frequency(struct drm_i915_private *dev_priv) 755 740 { 741 + struct intel_uncore *uncore = &dev_priv->uncore; 756 742 u32 f12_5_mhz = 12500000; 757 743 u32 f19_2_mhz = 19200000; 758 744 u32 f24_mhz = 24000000; ··· 775 759 */ 776 760 return f12_5_mhz; 777 761 } else if (INTEL_GEN(dev_priv) <= 9) { 778 - u32 ctc_reg = I915_READ(CTC_MODE); 762 + u32 ctc_reg = intel_uncore_read(uncore, CTC_MODE); 779 763 u32 freq = 0; 780 764 781 765 if ((ctc_reg & CTC_SOURCE_PARAMETER_MASK) == CTC_SOURCE_DIVIDE_LOGIC) { ··· 793 777 794 778 return freq; 795 779 } else if (INTEL_GEN(dev_priv) <= 12) { 796 - u32 ctc_reg = I915_READ(CTC_MODE); 780 + u32 ctc_reg = intel_uncore_read(uncore, CTC_MODE); 797 781 u32 freq = 0; 798 782 799 783 /* First figure out the reference frequency. There are 2 ways ··· 804 788 if ((ctc_reg & CTC_SOURCE_PARAMETER_MASK) == CTC_SOURCE_DIVIDE_LOGIC) { 805 789 freq = read_reference_ts_freq(dev_priv); 806 790 } else { 807 - u32 rpm_config_reg = I915_READ(RPM_CONFIG0); 791 + u32 rpm_config_reg = intel_uncore_read(uncore, RPM_CONFIG0); 808 792 809 793 if (INTEL_GEN(dev_priv) <= 10) 810 794 freq = gen10_get_crystal_clock_freq(dev_priv, ··· 983 967 984 968 if (HAS_DISPLAY(dev_priv) && IS_GEN_RANGE(dev_priv, 7, 8) && 985 969 HAS_PCH_SPLIT(dev_priv)) { 986 - u32 fuse_strap = I915_READ(FUSE_STRAP); 987 - u32 sfuse_strap = I915_READ(SFUSE_STRAP); 970 + u32 fuse_strap = intel_de_read(dev_priv, FUSE_STRAP); 971 + u32 sfuse_strap = intel_de_read(dev_priv, SFUSE_STRAP); 988 972 989 973 /* 990 974 * SFUSE_STRAP is supposed to have a bit signalling the display ··· 1009 993 info->cpu_transcoder_mask &= ~BIT(TRANSCODER_C); 1010 994 } 1011 995 } else if (HAS_DISPLAY(dev_priv) && INTEL_GEN(dev_priv) >= 9) { 1012 - u32 dfsm = I915_READ(SKL_DFSM); 996 + u32 dfsm = intel_de_read(dev_priv, SKL_DFSM); 1013 997 1014 998 if (dfsm & SKL_DFSM_PIPE_A_DISABLE) { 1015 999 info->pipe_mask &= ~BIT(PIPE_A); ··· 1099 1083 void intel_device_info_init_mmio(struct drm_i915_private *dev_priv) 1100 1084 { 1101 1085 struct intel_device_info *info = mkwrite_device_info(dev_priv); 1086 + struct intel_uncore *uncore = &dev_priv->uncore; 1102 1087 unsigned int logical_vdbox = 0; 1103 1088 unsigned int i; 1104 1089 u32 media_fuse; ··· 1109 1092 if (INTEL_GEN(dev_priv) < 11) 1110 1093 return; 1111 1094 1112 - media_fuse = ~I915_READ(GEN11_GT_VEBOX_VDBOX_DISABLE); 1095 + media_fuse = ~intel_uncore_read(uncore, GEN11_GT_VEBOX_VDBOX_DISABLE); 1113 1096 1114 1097 vdbox_mask = media_fuse & GEN11_GT_VDBOX_DISABLE_MASK; 1115 1098 vebox_mask = (media_fuse & GEN11_GT_VEBOX_DISABLE_MASK) >>