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

drm/amdgpu: Only update the CUR_SIZE register when necessary

Normally only necessary when the cursor size changes.

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Michel Dänzer and committed by
Alex Deucher
7c83d7ab 8b02cde9

+59 -23
+15 -7
drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
··· 2512 2512 2513 2513 WREG32(mmCUR_POSITION + amdgpu_crtc->crtc_offset, (x << 16) | y); 2514 2514 WREG32(mmCUR_HOT_SPOT + amdgpu_crtc->crtc_offset, (xorigin << 16) | yorigin); 2515 - WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 2516 - ((amdgpu_crtc->cursor_width - 1) << 16) | (amdgpu_crtc->cursor_height - 1)); 2517 2515 2518 2516 return 0; 2519 2517 } ··· 2537 2539 int32_t hot_y) 2538 2540 { 2539 2541 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 2542 + struct amdgpu_device *adev = crtc->dev->dev_private; 2540 2543 struct drm_gem_object *obj; 2541 2544 struct amdgpu_bo *aobj; 2542 2545 int ret; ··· 2578 2579 2579 2580 dce_v10_0_lock_cursor(crtc, true); 2580 2581 2581 - if (width != amdgpu_crtc->cursor_width || 2582 - height != amdgpu_crtc->cursor_height || 2583 - hot_x != amdgpu_crtc->cursor_hot_x || 2582 + if (hot_x != amdgpu_crtc->cursor_hot_x || 2584 2583 hot_y != amdgpu_crtc->cursor_hot_y) { 2585 2584 int x, y; 2586 2585 ··· 2587 2590 2588 2591 dce_v10_0_cursor_move_locked(crtc, x, y); 2589 2592 2590 - amdgpu_crtc->cursor_width = width; 2591 - amdgpu_crtc->cursor_height = height; 2592 2593 amdgpu_crtc->cursor_hot_x = hot_x; 2593 2594 amdgpu_crtc->cursor_hot_y = hot_y; 2595 + } 2596 + 2597 + if (width != amdgpu_crtc->cursor_width || 2598 + height != amdgpu_crtc->cursor_height) { 2599 + WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 2600 + (width - 1) << 16 | (height - 1)); 2601 + amdgpu_crtc->cursor_width = width; 2602 + amdgpu_crtc->cursor_height = height; 2594 2603 } 2595 2604 2596 2605 dce_v10_0_show_cursor(crtc); ··· 2620 2617 static void dce_v10_0_cursor_reset(struct drm_crtc *crtc) 2621 2618 { 2622 2619 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 2620 + struct amdgpu_device *adev = crtc->dev->dev_private; 2623 2621 2624 2622 if (amdgpu_crtc->cursor_bo) { 2625 2623 dce_v10_0_lock_cursor(crtc, true); 2626 2624 2627 2625 dce_v10_0_cursor_move_locked(crtc, amdgpu_crtc->cursor_x, 2628 2626 amdgpu_crtc->cursor_y); 2627 + 2628 + WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 2629 + (amdgpu_crtc->cursor_width - 1) << 16 | 2630 + (amdgpu_crtc->cursor_height - 1)); 2629 2631 2630 2632 dce_v10_0_show_cursor(crtc); 2631 2633
+15 -7
drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
··· 2528 2528 2529 2529 WREG32(mmCUR_POSITION + amdgpu_crtc->crtc_offset, (x << 16) | y); 2530 2530 WREG32(mmCUR_HOT_SPOT + amdgpu_crtc->crtc_offset, (xorigin << 16) | yorigin); 2531 - WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 2532 - ((amdgpu_crtc->cursor_width - 1) << 16) | (amdgpu_crtc->cursor_height - 1)); 2533 2531 2534 2532 return 0; 2535 2533 } ··· 2553 2555 int32_t hot_y) 2554 2556 { 2555 2557 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 2558 + struct amdgpu_device *adev = crtc->dev->dev_private; 2556 2559 struct drm_gem_object *obj; 2557 2560 struct amdgpu_bo *aobj; 2558 2561 int ret; ··· 2594 2595 2595 2596 dce_v11_0_lock_cursor(crtc, true); 2596 2597 2597 - if (width != amdgpu_crtc->cursor_width || 2598 - height != amdgpu_crtc->cursor_height || 2599 - hot_x != amdgpu_crtc->cursor_hot_x || 2598 + if (hot_x != amdgpu_crtc->cursor_hot_x || 2600 2599 hot_y != amdgpu_crtc->cursor_hot_y) { 2601 2600 int x, y; 2602 2601 ··· 2603 2606 2604 2607 dce_v11_0_cursor_move_locked(crtc, x, y); 2605 2608 2606 - amdgpu_crtc->cursor_width = width; 2607 - amdgpu_crtc->cursor_height = height; 2608 2609 amdgpu_crtc->cursor_hot_x = hot_x; 2609 2610 amdgpu_crtc->cursor_hot_y = hot_y; 2611 + } 2612 + 2613 + if (width != amdgpu_crtc->cursor_width || 2614 + height != amdgpu_crtc->cursor_height) { 2615 + WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 2616 + (width - 1) << 16 | (height - 1)); 2617 + amdgpu_crtc->cursor_width = width; 2618 + amdgpu_crtc->cursor_height = height; 2610 2619 } 2611 2620 2612 2621 dce_v11_0_show_cursor(crtc); ··· 2636 2633 static void dce_v11_0_cursor_reset(struct drm_crtc *crtc) 2637 2634 { 2638 2635 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 2636 + struct amdgpu_device *adev = crtc->dev->dev_private; 2639 2637 2640 2638 if (amdgpu_crtc->cursor_bo) { 2641 2639 dce_v11_0_lock_cursor(crtc, true); 2642 2640 2643 2641 dce_v11_0_cursor_move_locked(crtc, amdgpu_crtc->cursor_x, 2644 2642 amdgpu_crtc->cursor_y); 2643 + 2644 + WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 2645 + (amdgpu_crtc->cursor_width - 1) << 16 | 2646 + (amdgpu_crtc->cursor_height - 1)); 2645 2647 2646 2648 dce_v11_0_show_cursor(crtc); 2647 2649
+14 -4
drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
··· 1860 1860 struct amdgpu_device *adev = crtc->dev->dev_private; 1861 1861 int xorigin = 0, yorigin = 0; 1862 1862 1863 - int w = amdgpu_crtc->cursor_width; 1864 - 1865 1863 amdgpu_crtc->cursor_x = x; 1866 1864 amdgpu_crtc->cursor_y = y; 1867 1865 ··· 1879 1881 1880 1882 WREG32(mmCUR_POSITION + amdgpu_crtc->crtc_offset, (x << 16) | y); 1881 1883 WREG32(mmCUR_HOT_SPOT + amdgpu_crtc->crtc_offset, (xorigin << 16) | yorigin); 1882 - WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 1883 - ((w - 1) << 16) | (amdgpu_crtc->cursor_height - 1)); 1884 1884 1885 1885 return 0; 1886 1886 } ··· 1904 1908 int32_t hot_y) 1905 1909 { 1906 1910 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 1911 + struct amdgpu_device *adev = crtc->dev->dev_private; 1907 1912 struct drm_gem_object *obj; 1908 1913 struct amdgpu_bo *aobj; 1909 1914 int ret; ··· 1962 1965 amdgpu_crtc->cursor_hot_y = hot_y; 1963 1966 } 1964 1967 1968 + if (width != amdgpu_crtc->cursor_width || 1969 + height != amdgpu_crtc->cursor_height) { 1970 + WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 1971 + (width - 1) << 16 | (height - 1)); 1972 + amdgpu_crtc->cursor_width = width; 1973 + amdgpu_crtc->cursor_height = height; 1974 + } 1975 + 1965 1976 dce_v6_0_show_cursor(crtc); 1966 1977 dce_v6_0_lock_cursor(crtc, false); 1967 1978 ··· 1991 1986 static void dce_v6_0_cursor_reset(struct drm_crtc *crtc) 1992 1987 { 1993 1988 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 1989 + struct amdgpu_device *adev = crtc->dev->dev_private; 1994 1990 1995 1991 if (amdgpu_crtc->cursor_bo) { 1996 1992 dce_v6_0_lock_cursor(crtc, true); 1997 1993 1998 1994 dce_v6_0_cursor_move_locked(crtc, amdgpu_crtc->cursor_x, 1999 1995 amdgpu_crtc->cursor_y); 1996 + 1997 + WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 1998 + (amdgpu_crtc->cursor_width - 1) << 16 | 1999 + (amdgpu_crtc->cursor_height - 1)); 2000 2000 2001 2001 dce_v6_0_show_cursor(crtc); 2002 2002 dce_v6_0_lock_cursor(crtc, false);
+15 -5
drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
··· 2363 2363 2364 2364 WREG32(mmCUR_POSITION + amdgpu_crtc->crtc_offset, (x << 16) | y); 2365 2365 WREG32(mmCUR_HOT_SPOT + amdgpu_crtc->crtc_offset, (xorigin << 16) | yorigin); 2366 - WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 2367 - ((amdgpu_crtc->cursor_width - 1) << 16) | (amdgpu_crtc->cursor_height - 1)); 2368 2366 2369 2367 return 0; 2370 2368 } ··· 2388 2390 int32_t hot_y) 2389 2391 { 2390 2392 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 2393 + struct amdgpu_device *adev = crtc->dev->dev_private; 2391 2394 struct drm_gem_object *obj; 2392 2395 struct amdgpu_bo *aobj; 2393 2396 int ret; ··· 2429 2430 2430 2431 dce_v8_0_lock_cursor(crtc, true); 2431 2432 2432 - if (width != amdgpu_crtc->cursor_width || 2433 - height != amdgpu_crtc->cursor_height || 2434 - hot_x != amdgpu_crtc->cursor_hot_x || 2433 + if (hot_x != amdgpu_crtc->cursor_hot_x || 2435 2434 hot_y != amdgpu_crtc->cursor_hot_y) { 2436 2435 int x, y; 2437 2436 ··· 2442 2445 amdgpu_crtc->cursor_height = height; 2443 2446 amdgpu_crtc->cursor_hot_x = hot_x; 2444 2447 amdgpu_crtc->cursor_hot_y = hot_y; 2448 + } 2449 + 2450 + if (width != amdgpu_crtc->cursor_width || 2451 + height != amdgpu_crtc->cursor_height) { 2452 + WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 2453 + (width - 1) << 16 | (height - 1)); 2454 + amdgpu_crtc->cursor_width = width; 2455 + amdgpu_crtc->cursor_height = height; 2445 2456 } 2446 2457 2447 2458 dce_v8_0_show_cursor(crtc); ··· 2473 2468 static void dce_v8_0_cursor_reset(struct drm_crtc *crtc) 2474 2469 { 2475 2470 struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); 2471 + struct amdgpu_device *adev = crtc->dev->dev_private; 2476 2472 2477 2473 if (amdgpu_crtc->cursor_bo) { 2478 2474 dce_v8_0_lock_cursor(crtc, true); 2479 2475 2480 2476 dce_v8_0_cursor_move_locked(crtc, amdgpu_crtc->cursor_x, 2481 2477 amdgpu_crtc->cursor_y); 2478 + 2479 + WREG32(mmCUR_SIZE + amdgpu_crtc->crtc_offset, 2480 + (amdgpu_crtc->cursor_width - 1) << 16 | 2481 + (amdgpu_crtc->cursor_height - 1)); 2482 2482 2483 2483 dce_v8_0_show_cursor(crtc); 2484 2484