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

Merge branch 'drm-fixes-4.3' of git://people.freedesktop.org/~agd5f/linux into drm-fixes

Just two fixes for amdgpu:
- fix pageflip interrupt issue
- fix display clock handling on certain fiji boards

* 'drm-fixes-4.3' of git://people.freedesktop.org/~agd5f/linux:
drm/amdgpu: Keep the pflip interrupts always enabled v7
drm/amdgpu: adjust default dispclk (v2)

+90 -10
+6 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
··· 672 672 /* disp clock */ 673 673 adev->clock.default_dispclk = 674 674 le32_to_cpu(firmware_info->info_21.ulDefaultDispEngineClkFreq); 675 - if (adev->clock.default_dispclk == 0) 676 - adev->clock.default_dispclk = 54000; /* 540 Mhz */ 675 + /* set a reasonable default for DP */ 676 + if (adev->clock.default_dispclk < 53900) { 677 + DRM_INFO("Changing default dispclk from %dMhz to 600Mhz\n", 678 + adev->clock.default_dispclk / 100); 679 + adev->clock.default_dispclk = 60000; 680 + } 677 681 adev->clock.dp_extclk = 678 682 le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq); 679 683 adev->clock.current_dispclk = adev->clock.default_dispclk;
-2
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
··· 85 85 /* We borrow the event spin lock for protecting flip_status */ 86 86 spin_lock_irqsave(&crtc->dev->event_lock, flags); 87 87 88 - /* set the proper interrupt */ 89 - amdgpu_irq_get(adev, &adev->pageflip_irq, work->crtc_id); 90 88 /* do the flip (mmio) */ 91 89 adev->mode_info.funcs->page_flip(adev, work->crtc_id, work->base); 92 90 /* set the flip status */
+28 -2
drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
··· 255 255 return RREG32(mmCRTC_STATUS_FRAME_COUNT + crtc_offsets[crtc]); 256 256 } 257 257 258 + static void dce_v10_0_pageflip_interrupt_init(struct amdgpu_device *adev) 259 + { 260 + unsigned i; 261 + 262 + /* Enable pflip interrupts */ 263 + for (i = 0; i < adev->mode_info.num_crtc; i++) 264 + amdgpu_irq_get(adev, &adev->pageflip_irq, i); 265 + } 266 + 267 + static void dce_v10_0_pageflip_interrupt_fini(struct amdgpu_device *adev) 268 + { 269 + unsigned i; 270 + 271 + /* Disable pflip interrupts */ 272 + for (i = 0; i < adev->mode_info.num_crtc; i++) 273 + amdgpu_irq_put(adev, &adev->pageflip_irq, i); 274 + } 275 + 258 276 /** 259 277 * dce_v10_0_page_flip - pageflip callback. 260 278 * ··· 2681 2663 dce_v10_0_vga_enable(crtc, true); 2682 2664 amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE); 2683 2665 dce_v10_0_vga_enable(crtc, false); 2684 - /* Make sure VBLANK interrupt is still enabled */ 2666 + /* Make sure VBLANK and PFLIP interrupts are still enabled */ 2685 2667 type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id); 2686 2668 amdgpu_irq_update(adev, &adev->crtc_irq, type); 2669 + amdgpu_irq_update(adev, &adev->pageflip_irq, type); 2687 2670 drm_vblank_post_modeset(dev, amdgpu_crtc->crtc_id); 2688 2671 dce_v10_0_crtc_load_lut(crtc); 2689 2672 break; ··· 3044 3025 dce_v10_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false); 3045 3026 } 3046 3027 3028 + dce_v10_0_pageflip_interrupt_init(adev); 3029 + 3047 3030 return 0; 3048 3031 } 3049 3032 ··· 3060 3039 dce_v10_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false); 3061 3040 } 3062 3041 3042 + dce_v10_0_pageflip_interrupt_fini(adev); 3043 + 3063 3044 return 0; 3064 3045 } 3065 3046 ··· 3072 3049 amdgpu_atombios_scratch_regs_save(adev); 3073 3050 3074 3051 dce_v10_0_hpd_fini(adev); 3052 + 3053 + dce_v10_0_pageflip_interrupt_fini(adev); 3075 3054 3076 3055 return 0; 3077 3056 } ··· 3099 3074 3100 3075 /* initialize hpd */ 3101 3076 dce_v10_0_hpd_init(adev); 3077 + 3078 + dce_v10_0_pageflip_interrupt_init(adev); 3102 3079 3103 3080 return 0; 3104 3081 } ··· 3396 3369 spin_unlock_irqrestore(&adev->ddev->event_lock, flags); 3397 3370 3398 3371 drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id); 3399 - amdgpu_irq_put(adev, &adev->pageflip_irq, crtc_id); 3400 3372 queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work); 3401 3373 3402 3374 return 0;
+28 -2
drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
··· 233 233 return RREG32(mmCRTC_STATUS_FRAME_COUNT + crtc_offsets[crtc]); 234 234 } 235 235 236 + static void dce_v11_0_pageflip_interrupt_init(struct amdgpu_device *adev) 237 + { 238 + unsigned i; 239 + 240 + /* Enable pflip interrupts */ 241 + for (i = 0; i < adev->mode_info.num_crtc; i++) 242 + amdgpu_irq_get(adev, &adev->pageflip_irq, i); 243 + } 244 + 245 + static void dce_v11_0_pageflip_interrupt_fini(struct amdgpu_device *adev) 246 + { 247 + unsigned i; 248 + 249 + /* Disable pflip interrupts */ 250 + for (i = 0; i < adev->mode_info.num_crtc; i++) 251 + amdgpu_irq_put(adev, &adev->pageflip_irq, i); 252 + } 253 + 236 254 /** 237 255 * dce_v11_0_page_flip - pageflip callback. 238 256 * ··· 2658 2640 dce_v11_0_vga_enable(crtc, true); 2659 2641 amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE); 2660 2642 dce_v11_0_vga_enable(crtc, false); 2661 - /* Make sure VBLANK interrupt is still enabled */ 2643 + /* Make sure VBLANK and PFLIP interrupts are still enabled */ 2662 2644 type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id); 2663 2645 amdgpu_irq_update(adev, &adev->crtc_irq, type); 2646 + amdgpu_irq_update(adev, &adev->pageflip_irq, type); 2664 2647 drm_vblank_post_modeset(dev, amdgpu_crtc->crtc_id); 2665 2648 dce_v11_0_crtc_load_lut(crtc); 2666 2649 break; ··· 3019 3000 dce_v11_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false); 3020 3001 } 3021 3002 3003 + dce_v11_0_pageflip_interrupt_init(adev); 3004 + 3022 3005 return 0; 3023 3006 } 3024 3007 ··· 3035 3014 dce_v11_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false); 3036 3015 } 3037 3016 3017 + dce_v11_0_pageflip_interrupt_fini(adev); 3018 + 3038 3019 return 0; 3039 3020 } 3040 3021 ··· 3047 3024 amdgpu_atombios_scratch_regs_save(adev); 3048 3025 3049 3026 dce_v11_0_hpd_fini(adev); 3027 + 3028 + dce_v11_0_pageflip_interrupt_fini(adev); 3050 3029 3051 3030 return 0; 3052 3031 } ··· 3075 3050 3076 3051 /* initialize hpd */ 3077 3052 dce_v11_0_hpd_init(adev); 3053 + 3054 + dce_v11_0_pageflip_interrupt_init(adev); 3078 3055 3079 3056 return 0; 3080 3057 } ··· 3372 3345 spin_unlock_irqrestore(&adev->ddev->event_lock, flags); 3373 3346 3374 3347 drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id); 3375 - amdgpu_irq_put(adev, &adev->pageflip_irq, crtc_id); 3376 3348 queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work); 3377 3349 3378 3350 return 0;
+28 -2
drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
··· 204 204 return RREG32(mmCRTC_STATUS_FRAME_COUNT + crtc_offsets[crtc]); 205 205 } 206 206 207 + static void dce_v8_0_pageflip_interrupt_init(struct amdgpu_device *adev) 208 + { 209 + unsigned i; 210 + 211 + /* Enable pflip interrupts */ 212 + for (i = 0; i < adev->mode_info.num_crtc; i++) 213 + amdgpu_irq_get(adev, &adev->pageflip_irq, i); 214 + } 215 + 216 + static void dce_v8_0_pageflip_interrupt_fini(struct amdgpu_device *adev) 217 + { 218 + unsigned i; 219 + 220 + /* Disable pflip interrupts */ 221 + for (i = 0; i < adev->mode_info.num_crtc; i++) 222 + amdgpu_irq_put(adev, &adev->pageflip_irq, i); 223 + } 224 + 207 225 /** 208 226 * dce_v8_0_page_flip - pageflip callback. 209 227 * ··· 2593 2575 dce_v8_0_vga_enable(crtc, true); 2594 2576 amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE); 2595 2577 dce_v8_0_vga_enable(crtc, false); 2596 - /* Make sure VBLANK interrupt is still enabled */ 2578 + /* Make sure VBLANK and PFLIP interrupts are still enabled */ 2597 2579 type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id); 2598 2580 amdgpu_irq_update(adev, &adev->crtc_irq, type); 2581 + amdgpu_irq_update(adev, &adev->pageflip_irq, type); 2599 2582 drm_vblank_post_modeset(dev, amdgpu_crtc->crtc_id); 2600 2583 dce_v8_0_crtc_load_lut(crtc); 2601 2584 break; ··· 2952 2933 dce_v8_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false); 2953 2934 } 2954 2935 2936 + dce_v8_0_pageflip_interrupt_init(adev); 2937 + 2955 2938 return 0; 2956 2939 } 2957 2940 ··· 2968 2947 dce_v8_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false); 2969 2948 } 2970 2949 2950 + dce_v8_0_pageflip_interrupt_fini(adev); 2951 + 2971 2952 return 0; 2972 2953 } 2973 2954 ··· 2980 2957 amdgpu_atombios_scratch_regs_save(adev); 2981 2958 2982 2959 dce_v8_0_hpd_fini(adev); 2960 + 2961 + dce_v8_0_pageflip_interrupt_fini(adev); 2983 2962 2984 2963 return 0; 2985 2964 } ··· 3005 2980 3006 2981 /* initialize hpd */ 3007 2982 dce_v8_0_hpd_init(adev); 2983 + 2984 + dce_v8_0_pageflip_interrupt_init(adev); 3008 2985 3009 2986 return 0; 3010 2987 } ··· 3403 3376 spin_unlock_irqrestore(&adev->ddev->event_lock, flags); 3404 3377 3405 3378 drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id); 3406 - amdgpu_irq_put(adev, &adev->pageflip_irq, crtc_id); 3407 3379 queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work); 3408 3380 3409 3381 return 0;