<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p style="margin-top:0;margin-bottom:0"></p>
<p style="margin-top:0;margin-bottom:0"><span>Tested-By: Mikita Lipski <mikita.lipski@amd.com></span></p>
<p style="margin-top:0;margin-bottom:0"><span><br>
</span></p>
<p style="margin-top:0;margin-bottom:0"><span>Thanks,<br>
</span></p>
<span>Nick</span><br>
<p></p>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Grodzovsky, Andrey<br>
<b>Sent:</b> Monday, January 22, 2018 1:36:01 PM<br>
<b>To:</b> Wentland, Harry; Alex Deucher; amd-gfx@lists.freedesktop.org; Lipski, Mikita<br>
<b>Cc:</b> Deucher, Alexander<br>
<b>Subject:</b> Re: [PATCH] drm/amdgpu: drop the drm irq pre/post/un install callbacks</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">+ Mikita who verified the patch.<br>
<br>
Andrey<br>
<br>
<br>
On 01/22/2018 01:34 PM, Harry Wentland wrote:<br>
> On 2018-01-22 12:22 PM, Alex Deucher wrote:<br>
>> The preinstall callback didn't do anything because not all<br>
>> of the IPs were initialized when it was called.<br>
>><br>
>> Move the postinstall setup into sequence in the driver.<br>
>><br>
>> The uninstall callback disabled all interrupt source, but<br>
>> it got called too late in the driver sequence and caused problems<br>
>> with IPs who already freed the relevant data structures. Move<br>
>> the call into the right place in the driver sequence.<br>
>><br>
>> Signed-off-by: Alex Deucher <alexander.deucher@amd.com><br>
> Acked-by: Harry Wentland <harry.wentland@amd.com><br>
><br>
> Harry<br>
><br>
>> ---<br>
>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 ++<br>
>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 --<br>
>> drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 52 ++----------------------------<br>
>> drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h | 4 +--<br>
>> 4 files changed, 6 insertions(+), 56 deletions(-)<br>
>><br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
>> index d09c4ee9f7e1..02a9157e72ac 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
>> @@ -1483,6 +1483,9 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev)<br>
>> adev->ip_blocks[i].status.hw = false;<br>
>> }<br>
>> <br>
>> + /* disable all interrupts */<br>
>> + amdgpu_irq_disable_all(adev);<br>
>> +<br>
>> for (i = adev->num_ip_blocks - 1; i >= 0; i--) {<br>
>> if (!adev->ip_blocks[i].status.sw)<br>
>> continue;<br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
>> index 24bc3e9203e2..ab4cb4917565 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
>> @@ -856,9 +856,6 @@ static struct drm_driver kms_driver = {<br>
>> .disable_vblank = amdgpu_disable_vblank_kms,<br>
>> .get_vblank_timestamp = drm_calc_vbltimestamp_from_scanoutpos,<br>
>> .get_scanout_position = amdgpu_get_crtc_scanout_position,<br>
>> - .irq_preinstall = amdgpu_irq_preinstall,<br>
>> - .irq_postinstall = amdgpu_irq_postinstall,<br>
>> - .irq_uninstall = amdgpu_irq_uninstall,<br>
>> .irq_handler = amdgpu_irq_handler,<br>
>> .ioctls = amdgpu_ioctls_kms,<br>
>> .gem_free_object_unlocked = amdgpu_gem_object_free,<br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c<br>
>> index 56bcd59c3399..f6f2a662bb8f 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c<br>
>> @@ -92,7 +92,7 @@ static void amdgpu_irq_reset_work_func(struct work_struct *work)<br>
>> }<br>
>> <br>
>> /* Disable *all* interrupts */<br>
>> -static void amdgpu_irq_disable_all(struct amdgpu_device *adev)<br>
>> +void amdgpu_irq_disable_all(struct amdgpu_device *adev)<br>
>> {<br>
>> unsigned long irqflags;<br>
>> unsigned i, j, k;<br>
>> @@ -123,55 +123,6 @@ static void amdgpu_irq_disable_all(struct amdgpu_device *adev)<br>
>> }<br>
>> <br>
>> /**<br>
>> - * amdgpu_irq_preinstall - drm irq preinstall callback<br>
>> - *<br>
>> - * @dev: drm dev pointer<br>
>> - *<br>
>> - * Gets the hw ready to enable irqs (all asics).<br>
>> - * This function disables all interrupt sources on the GPU.<br>
>> - */<br>
>> -void amdgpu_irq_preinstall(struct drm_device *dev)<br>
>> -{<br>
>> - struct amdgpu_device *adev = dev->dev_private;<br>
>> -<br>
>> - /* Disable *all* interrupts */<br>
>> - amdgpu_irq_disable_all(adev);<br>
>> - /* Clear bits */<br>
>> - amdgpu_ih_process(adev);<br>
>> -}<br>
>> -<br>
>> -/**<br>
>> - * amdgpu_irq_postinstall - drm irq preinstall callback<br>
>> - *<br>
>> - * @dev: drm dev pointer<br>
>> - *<br>
>> - * Handles stuff to be done after enabling irqs (all asics).<br>
>> - * Returns 0 on success.<br>
>> - */<br>
>> -int amdgpu_irq_postinstall(struct drm_device *dev)<br>
>> -{<br>
>> - dev->max_vblank_count = 0x00ffffff;<br>
>> - return 0;<br>
>> -}<br>
>> -<br>
>> -/**<br>
>> - * amdgpu_irq_uninstall - drm irq uninstall callback<br>
>> - *<br>
>> - * @dev: drm dev pointer<br>
>> - *<br>
>> - * This function disables all interrupt sources on the GPU (all asics).<br>
>> - */<br>
>> -void amdgpu_irq_uninstall(struct drm_device *dev)<br>
>> -{<br>
>> - struct amdgpu_device *adev = dev->dev_private;<br>
>> -<br>
>> - if (adev == NULL) {<br>
>> - return;<br>
>> - }<br>
>> - amdgpu_irq_disable_all(adev);<br>
>> -}<br>
>> -<br>
>> -/**<br>
>> * amdgpu_irq_handler - irq handler<br>
>> *<br>
>> * @int irq, void *arg: args<br>
>> @@ -261,6 +212,7 @@ int amdgpu_irq_init(struct amdgpu_device *adev)<br>
>> cancel_work_sync(&adev->reset_work);<br>
>> return r;<br>
>> }<br>
>> + adev->ddev->max_vblank_count = 0x00ffffff;<br>
>> <br>
>> DRM_DEBUG("amdgpu: irq initialized.\n");<br>
>> return 0;<br>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h<br>
>> index 0610cc4a9788..3375ad778edc 100644<br>
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h<br>
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h<br>
>> @@ -78,9 +78,7 @@ struct amdgpu_irq {<br>
>> uint32_t srbm_soft_reset;<br>
>> };<br>
>> <br>
>> -void amdgpu_irq_preinstall(struct drm_device *dev);<br>
>> -int amdgpu_irq_postinstall(struct drm_device *dev);<br>
>> -void amdgpu_irq_uninstall(struct drm_device *dev);<br>
>> +void amdgpu_irq_disable_all(struct amdgpu_device *adev);<br>
>> irqreturn_t amdgpu_irq_handler(int irq, void *arg);<br>
>> <br>
>> int amdgpu_irq_init(struct amdgpu_device *adev);<br>
>><br>
> _______________________________________________<br>
> amd-gfx mailing list<br>
> amd-gfx@lists.freedesktop.org<br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
<br>
</div>
</span></font></div>
</body>
</html>