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

drm/i915/dsi: convert vlv_dsi_pll.[ch] to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert as much as possible of vlv_dsi_pll.[ch] to struct
intel_display.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://lore.kernel.org/r/9d34d8b91c6bc8b2dd8e2081194ee496b251bbf3.1742554320.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

+63 -66
+1 -2
drivers/gpu/drm/i915/display/intel_display.c
··· 3834 3834 struct intel_display_power_domain_set *power_domain_set) 3835 3835 { 3836 3836 struct intel_display *display = to_intel_display(crtc); 3837 - struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 3838 3837 enum transcoder cpu_transcoder; 3839 3838 enum port port; 3840 3839 u32 tmp; ··· 3855 3856 * registers/MIPI[BXT]. We can break out here early, since we 3856 3857 * need the same DSI PLL to be enabled for both DSI ports. 3857 3858 */ 3858 - if (!bxt_dsi_pll_is_enabled(dev_priv)) 3859 + if (!bxt_dsi_pll_is_enabled(display)) 3859 3860 break; 3860 3861 3861 3862 /* XXX: this works for video mode only */
+1 -2
drivers/gpu/drm/i915/display/vlv_dsi.c
··· 936 936 enum pipe *pipe) 937 937 { 938 938 struct intel_display *display = to_intel_display(encoder); 939 - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 940 939 struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); 941 940 intel_wakeref_t wakeref; 942 941 enum port port; ··· 954 955 * machine. See BSpec North Display Engine registers/MIPI[BXT]. 955 956 */ 956 957 if ((display->platform.geminilake || display->platform.broxton) && 957 - !bxt_dsi_pll_is_enabled(dev_priv)) 958 + !bxt_dsi_pll_is_enabled(display)) 958 959 goto out_put_power; 959 960 960 961 /* XXX: this only works for one DSI output */
+59 -59
drivers/gpu/drm/i915/display/vlv_dsi_pll.c
··· 57 57 return dsi_clk_khz; 58 58 } 59 59 60 - static int dsi_calc_mnp(struct drm_i915_private *dev_priv, 60 + static int dsi_calc_mnp(struct intel_display *display, 61 61 struct intel_crtc_state *config, 62 62 int target_dsi_clk) 63 63 { ··· 68 68 69 69 /* target_dsi_clk is expected in kHz */ 70 70 if (target_dsi_clk < 300000 || target_dsi_clk > 1150000) { 71 - drm_err(&dev_priv->drm, "DSI CLK Out of Range\n"); 71 + drm_err(display->drm, "DSI CLK Out of Range\n"); 72 72 return -ECHRNG; 73 73 } 74 74 75 - if (IS_CHERRYVIEW(dev_priv)) { 75 + if (display->platform.cherryview) { 76 76 ref_clk = 100000; 77 77 n = 4; 78 78 m_min = 70; ··· 116 116 static int vlv_dsi_pclk(struct intel_encoder *encoder, 117 117 struct intel_crtc_state *config) 118 118 { 119 - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 119 + struct intel_display *display = to_intel_display(encoder); 120 120 struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); 121 121 int bpp = mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format); 122 122 u32 dsi_clock; 123 123 u32 pll_ctl, pll_div; 124 124 u32 m = 0, p = 0, n; 125 - int refclk = IS_CHERRYVIEW(dev_priv) ? 100000 : 25000; 125 + int refclk = display->platform.cherryview ? 100000 : 25000; 126 126 int i; 127 127 128 128 pll_ctl = config->dsi_pll.ctrl; ··· 147 147 p--; 148 148 149 149 if (!p) { 150 - drm_err(&dev_priv->drm, "wrong P1 divisor\n"); 150 + drm_err(display->drm, "wrong P1 divisor\n"); 151 151 return 0; 152 152 } 153 153 ··· 157 157 } 158 158 159 159 if (i == ARRAY_SIZE(lfsr_converts)) { 160 - drm_err(&dev_priv->drm, "wrong m_seed programmed\n"); 160 + drm_err(display->drm, "wrong m_seed programmed\n"); 161 161 return 0; 162 162 } 163 163 ··· 175 175 int vlv_dsi_pll_compute(struct intel_encoder *encoder, 176 176 struct intel_crtc_state *config) 177 177 { 178 - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 178 + struct intel_display *display = to_intel_display(encoder); 179 179 struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); 180 180 int pclk, dsi_clk, ret; 181 181 182 182 dsi_clk = dsi_clk_from_pclk(intel_dsi->pclk, intel_dsi->pixel_format, 183 183 intel_dsi->lane_count); 184 184 185 - ret = dsi_calc_mnp(dev_priv, config, dsi_clk); 185 + ret = dsi_calc_mnp(display, config, dsi_clk); 186 186 if (ret) { 187 - drm_dbg_kms(&dev_priv->drm, "dsi_calc_mnp failed\n"); 187 + drm_dbg_kms(display->drm, "dsi_calc_mnp failed\n"); 188 188 return ret; 189 189 } 190 190 ··· 196 196 197 197 config->dsi_pll.ctrl |= DSI_PLL_VCO_EN; 198 198 199 - drm_dbg_kms(&dev_priv->drm, "dsi pll div %08x, ctrl %08x\n", 199 + drm_dbg_kms(display->drm, "dsi pll div %08x, ctrl %08x\n", 200 200 config->dsi_pll.div, config->dsi_pll.ctrl); 201 201 202 202 pclk = vlv_dsi_pclk(encoder, config); ··· 213 213 void vlv_dsi_pll_enable(struct intel_encoder *encoder, 214 214 const struct intel_crtc_state *config) 215 215 { 216 + struct intel_display *display = to_intel_display(encoder); 216 217 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 217 218 218 - drm_dbg_kms(&dev_priv->drm, "\n"); 219 + drm_dbg_kms(display->drm, "\n"); 219 220 220 221 vlv_cck_get(dev_priv); 221 222 ··· 236 235 DSI_PLL_LOCK, 20)) { 237 236 238 237 vlv_cck_put(dev_priv); 239 - drm_err(&dev_priv->drm, "DSI PLL lock failed\n"); 238 + drm_err(display->drm, "DSI PLL lock failed\n"); 240 239 return; 241 240 } 242 241 vlv_cck_put(dev_priv); 243 242 244 - drm_dbg_kms(&dev_priv->drm, "DSI PLL locked\n"); 243 + drm_dbg_kms(display->drm, "DSI PLL locked\n"); 245 244 } 246 245 247 246 void vlv_dsi_pll_disable(struct intel_encoder *encoder) 248 247 { 248 + struct intel_display *display = to_intel_display(encoder); 249 249 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 250 250 u32 tmp; 251 251 252 - drm_dbg_kms(&dev_priv->drm, "\n"); 252 + drm_dbg_kms(display->drm, "\n"); 253 253 254 254 vlv_cck_get(dev_priv); 255 255 ··· 262 260 vlv_cck_put(dev_priv); 263 261 } 264 262 265 - bool bxt_dsi_pll_is_enabled(struct drm_i915_private *dev_priv) 263 + bool bxt_dsi_pll_is_enabled(struct intel_display *display) 266 264 { 267 265 bool enabled; 268 266 u32 val; 269 267 u32 mask; 270 268 271 269 mask = BXT_DSI_PLL_DO_ENABLE | BXT_DSI_PLL_LOCKED; 272 - val = intel_de_read(dev_priv, BXT_DSI_PLL_ENABLE); 270 + val = intel_de_read(display, BXT_DSI_PLL_ENABLE); 273 271 enabled = (val & mask) == mask; 274 272 275 273 if (!enabled) ··· 283 281 * times, and since accessing DSI registers with invalid dividers 284 282 * causes a system hang. 285 283 */ 286 - val = intel_de_read(dev_priv, BXT_DSI_PLL_CTL); 287 - if (IS_GEMINILAKE(dev_priv)) { 284 + val = intel_de_read(display, BXT_DSI_PLL_CTL); 285 + if (display->platform.geminilake) { 288 286 if (!(val & BXT_DSIA_16X_MASK)) { 289 - drm_dbg(&dev_priv->drm, 290 - "Invalid PLL divider (%08x)\n", val); 287 + drm_dbg_kms(display->drm, 288 + "Invalid PLL divider (%08x)\n", val); 291 289 enabled = false; 292 290 } 293 291 } else { 294 292 if (!(val & BXT_DSIA_16X_MASK) || !(val & BXT_DSIC_16X_MASK)) { 295 - drm_dbg(&dev_priv->drm, 296 - "Invalid PLL divider (%08x)\n", val); 293 + drm_dbg_kms(display->drm, 294 + "Invalid PLL divider (%08x)\n", val); 297 295 enabled = false; 298 296 } 299 297 } ··· 303 301 304 302 void bxt_dsi_pll_disable(struct intel_encoder *encoder) 305 303 { 306 - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 304 + struct intel_display *display = to_intel_display(encoder); 307 305 308 - drm_dbg_kms(&dev_priv->drm, "\n"); 306 + drm_dbg_kms(display->drm, "\n"); 309 307 310 - intel_de_rmw(dev_priv, BXT_DSI_PLL_ENABLE, BXT_DSI_PLL_DO_ENABLE, 0); 308 + intel_de_rmw(display, BXT_DSI_PLL_ENABLE, BXT_DSI_PLL_DO_ENABLE, 0); 311 309 312 310 /* 313 311 * PLL lock should deassert within 200us. 314 312 * Wait up to 1ms before timing out. 315 313 */ 316 - if (intel_de_wait_for_clear(dev_priv, BXT_DSI_PLL_ENABLE, 314 + if (intel_de_wait_for_clear(display, BXT_DSI_PLL_ENABLE, 317 315 BXT_DSI_PLL_LOCKED, 1)) 318 - drm_err(&dev_priv->drm, 316 + drm_err(display->drm, 319 317 "Timeout waiting for PLL lock deassertion\n"); 320 318 } 321 319 322 320 u32 vlv_dsi_get_pclk(struct intel_encoder *encoder, 323 321 struct intel_crtc_state *config) 324 322 { 323 + struct intel_display *display = to_intel_display(encoder); 325 324 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 326 325 u32 pll_ctl, pll_div; 327 326 328 - drm_dbg_kms(&dev_priv->drm, "\n"); 327 + drm_dbg_kms(display->drm, "\n"); 329 328 330 329 vlv_cck_get(dev_priv); 331 330 pll_ctl = vlv_cck_read(dev_priv, CCK_REG_DSI_PLL_CONTROL); ··· 355 352 u32 bxt_dsi_get_pclk(struct intel_encoder *encoder, 356 353 struct intel_crtc_state *config) 357 354 { 358 - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 355 + struct intel_display *display = to_intel_display(encoder); 359 356 u32 pclk; 360 357 361 - config->dsi_pll.ctrl = intel_de_read(dev_priv, BXT_DSI_PLL_CTL); 358 + config->dsi_pll.ctrl = intel_de_read(display, BXT_DSI_PLL_CTL); 362 359 363 360 pclk = bxt_dsi_pclk(encoder, config); 364 361 365 - drm_dbg(&dev_priv->drm, "Calculated pclk=%u\n", pclk); 362 + drm_dbg_kms(display->drm, "Calculated pclk=%u\n", pclk); 366 363 return pclk; 367 364 } 368 365 ··· 378 375 temp | intel_dsi->escape_clk_div << ESCAPE_CLOCK_DIVIDER_SHIFT); 379 376 } 380 377 381 - static void glk_dsi_program_esc_clock(struct drm_device *dev, 382 - const struct intel_crtc_state *config) 378 + static void glk_dsi_program_esc_clock(struct intel_display *display, 379 + const struct intel_crtc_state *config) 383 380 { 384 - struct drm_i915_private *dev_priv = to_i915(dev); 385 381 u32 dsi_rate = 0; 386 382 u32 pll_ratio = 0; 387 383 u32 ddr_clk = 0; ··· 417 415 418 416 txesc2_div = min_t(u32, div2_value, 10); 419 417 420 - intel_de_write(dev_priv, MIPIO_TXESC_CLK_DIV1, 418 + intel_de_write(display, MIPIO_TXESC_CLK_DIV1, 421 419 (1 << (txesc1_div - 1)) & GLK_TX_ESC_CLK_DIV1_MASK); 422 - intel_de_write(dev_priv, MIPIO_TXESC_CLK_DIV2, 420 + intel_de_write(display, MIPIO_TXESC_CLK_DIV2, 423 421 (1 << (txesc2_div - 1)) & GLK_TX_ESC_CLK_DIV2_MASK); 424 422 } 425 423 426 424 /* Program BXT Mipi clocks and dividers */ 427 - static void bxt_dsi_program_clocks(struct drm_device *dev, enum port port, 425 + static void bxt_dsi_program_clocks(struct intel_display *display, enum port port, 428 426 const struct intel_crtc_state *config) 429 427 { 430 - struct drm_i915_private *dev_priv = to_i915(dev); 431 428 u32 tmp; 432 429 u32 dsi_rate = 0; 433 430 u32 pll_ratio = 0; ··· 437 436 u32 mipi_8by3_divider; 438 437 439 438 /* Clear old configurations */ 440 - tmp = intel_de_read(dev_priv, BXT_MIPI_CLOCK_CTL); 439 + tmp = intel_de_read(display, BXT_MIPI_CLOCK_CTL); 441 440 tmp &= ~(BXT_MIPI_TX_ESCLK_FIXDIV_MASK(port)); 442 441 tmp &= ~(BXT_MIPI_RX_ESCLK_UPPER_FIXDIV_MASK(port)); 443 442 tmp &= ~(BXT_MIPI_8X_BY3_DIVIDER_MASK(port)); ··· 473 472 tmp |= BXT_MIPI_RX_ESCLK_LOWER_DIVIDER(port, rx_div_lower); 474 473 tmp |= BXT_MIPI_RX_ESCLK_UPPER_DIVIDER(port, rx_div_upper); 475 474 476 - intel_de_write(dev_priv, BXT_MIPI_CLOCK_CTL, tmp); 475 + intel_de_write(display, BXT_MIPI_CLOCK_CTL, tmp); 477 476 } 478 477 479 478 int bxt_dsi_pll_compute(struct intel_encoder *encoder, 480 479 struct intel_crtc_state *config) 481 480 { 482 - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 481 + struct intel_display *display = to_intel_display(encoder); 483 482 struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); 484 483 u8 dsi_ratio, dsi_ratio_min, dsi_ratio_max; 485 484 u32 dsi_clk; ··· 495 494 */ 496 495 dsi_ratio = DIV_ROUND_UP(dsi_clk * 2, BXT_REF_CLOCK_KHZ); 497 496 498 - if (IS_BROXTON(dev_priv)) { 497 + if (display->platform.broxton) { 499 498 dsi_ratio_min = BXT_DSI_PLL_RATIO_MIN; 500 499 dsi_ratio_max = BXT_DSI_PLL_RATIO_MAX; 501 500 } else { ··· 504 503 } 505 504 506 505 if (dsi_ratio < dsi_ratio_min || dsi_ratio > dsi_ratio_max) { 507 - drm_err(&dev_priv->drm, 506 + drm_err(display->drm, 508 507 "Can't get a suitable ratio from DSI PLL ratios\n"); 509 508 return -ECHRNG; 510 509 } else 511 - drm_dbg_kms(&dev_priv->drm, "DSI PLL calculation is Done!!\n"); 510 + drm_dbg_kms(display->drm, "DSI PLL calculation is Done!!\n"); 512 511 513 512 /* 514 513 * Program DSI ratio and Select MIPIC and MIPIA PLL output as 8x ··· 520 519 /* As per recommendation from hardware team, 521 520 * Prog PVD ratio =1 if dsi ratio <= 50 522 521 */ 523 - if (IS_BROXTON(dev_priv) && dsi_ratio <= 50) 522 + if (display->platform.broxton && dsi_ratio <= 50) 524 523 config->dsi_pll.ctrl |= BXT_DSI_PLL_PVD_RATIO_1; 525 524 526 525 pclk = bxt_dsi_pclk(encoder, config); ··· 537 536 void bxt_dsi_pll_enable(struct intel_encoder *encoder, 538 537 const struct intel_crtc_state *config) 539 538 { 540 - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 539 + struct intel_display *display = to_intel_display(encoder); 541 540 struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); 542 541 enum port port; 543 542 544 - drm_dbg_kms(&dev_priv->drm, "\n"); 543 + drm_dbg_kms(display->drm, "\n"); 545 544 546 545 /* Configure PLL vales */ 547 - intel_de_write(dev_priv, BXT_DSI_PLL_CTL, config->dsi_pll.ctrl); 548 - intel_de_posting_read(dev_priv, BXT_DSI_PLL_CTL); 546 + intel_de_write(display, BXT_DSI_PLL_CTL, config->dsi_pll.ctrl); 547 + intel_de_posting_read(display, BXT_DSI_PLL_CTL); 549 548 550 549 /* Program TX, RX, Dphy clocks */ 551 - if (IS_BROXTON(dev_priv)) { 550 + if (display->platform.broxton) { 552 551 for_each_dsi_port(port, intel_dsi->ports) 553 - bxt_dsi_program_clocks(encoder->base.dev, port, config); 552 + bxt_dsi_program_clocks(display, port, config); 554 553 } else { 555 - glk_dsi_program_esc_clock(encoder->base.dev, config); 554 + glk_dsi_program_esc_clock(display, config); 556 555 } 557 556 558 557 /* Enable DSI PLL */ 559 - intel_de_rmw(dev_priv, BXT_DSI_PLL_ENABLE, 0, BXT_DSI_PLL_DO_ENABLE); 558 + intel_de_rmw(display, BXT_DSI_PLL_ENABLE, 0, BXT_DSI_PLL_DO_ENABLE); 560 559 561 560 /* Timeout and fail if PLL not locked */ 562 - if (intel_de_wait_for_set(dev_priv, BXT_DSI_PLL_ENABLE, 561 + if (intel_de_wait_for_set(display, BXT_DSI_PLL_ENABLE, 563 562 BXT_DSI_PLL_LOCKED, 1)) { 564 - drm_err(&dev_priv->drm, 563 + drm_err(display->drm, 565 564 "Timed out waiting for DSI PLL to lock\n"); 566 565 return; 567 566 } 568 567 569 - drm_dbg_kms(&dev_priv->drm, "DSI PLL locked\n"); 568 + drm_dbg_kms(display->drm, "DSI PLL locked\n"); 570 569 } 571 570 572 571 void bxt_dsi_reset_clocks(struct intel_encoder *encoder, enum port port) 573 572 { 574 573 struct intel_display *display = to_intel_display(encoder); 575 - struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 576 574 u32 tmp; 577 575 578 576 /* Clear old configurations */ 579 - if (IS_BROXTON(dev_priv)) { 577 + if (display->platform.broxton) { 580 578 tmp = intel_de_read(display, BXT_MIPI_CLOCK_CTL); 581 579 tmp &= ~(BXT_MIPI_TX_ESCLK_FIXDIV_MASK(port)); 582 580 tmp &= ~(BXT_MIPI_RX_ESCLK_UPPER_FIXDIV_MASK(port));
+2 -3
drivers/gpu/drm/i915/display/vlv_dsi_pll.h
··· 9 9 #include <linux/types.h> 10 10 11 11 enum port; 12 - struct drm_i915_private; 13 12 struct intel_crtc_state; 14 13 struct intel_display; 15 14 struct intel_encoder; ··· 32 33 void bxt_dsi_reset_clocks(struct intel_encoder *encoder, enum port port); 33 34 34 35 #ifdef I915 35 - bool bxt_dsi_pll_is_enabled(struct drm_i915_private *dev_priv); 36 + bool bxt_dsi_pll_is_enabled(struct intel_display *display); 36 37 void assert_dsi_pll_enabled(struct intel_display *display); 37 38 void assert_dsi_pll_disabled(struct intel_display *display); 38 39 #else 39 - static inline bool bxt_dsi_pll_is_enabled(struct drm_i915_private *dev_priv) 40 + static inline bool bxt_dsi_pll_is_enabled(struct intel_display *display) 40 41 { 41 42 return false; 42 43 }