[Nouveau] [PATCH] secboot/acr352: reset PMU after secboot

Karol Herbst karolherbst at gmail.com
Wed Jul 5 06:57:44 UTC 2017


On Wed, Jul 5, 2017 at 3:23 AM, Ben Skeggs <skeggsb at gmail.com> wrote:
> On 07/05/2017 03:35 AM, Karol Herbst wrote:
>> This is needed for using Nouveaus PMU image after performing secboot. This will
>> be helpfull for Maxwell2 reclocking on boards without externally controlled
>> fans like on most laptops or fanless boards.
> I get the idea in principal, but have some concerns:
>
> - Does this screw up re-running secboot during channel recovery (ie.
> page fault on gr)?
> - What about the running of the unload blob?
>
> It makes me angry that we even have to think about doing stuff like this! :P
>
> Ben.
>

Yeah I know, but this was the best I came up with. In earlier attempts
I only came up with worse solutions.

I think it's technically fine, because nvkm_pmu_init calls
nvkm_pmu_reset and pmu->func->init. In prior versions I've also added
a fini call, but this made nouveau unhappy whenever I reclocked the
GPU and reloaded nouveau afterwards. I could do some more testing
though.

Good thing is that this is only a problem on GM20X GPUs and we only
need a proper solution for those.

>>
>> Signed-off-by: Karol Herbst <karolherbst at gmail.com>
>> ---
>>  drm/nouveau/nvkm/subdev/secboot/acr_r352.c | 13 +++++++++++++
>>  1 file changed, 13 insertions(+)
>>
>> diff --git a/drm/nouveau/nvkm/subdev/secboot/acr_r352.c b/drm/nouveau/nvkm/subdev/secboot/acr_r352.c
>> index a7213542..00095ef8 100644
>> --- a/drm/nouveau/nvkm/subdev/secboot/acr_r352.c
>> +++ b/drm/nouveau/nvkm/subdev/secboot/acr_r352.c
>> @@ -924,6 +924,19 @@ acr_r352_bootstrap(struct acr_r352 *acr, struct nvkm_secboot *sb)
>>               }
>>       }
>>
>> +     /* reset the PMU if needed */
>> +     if (acr->base.boot_falcon == NVKM_SECBOOT_FALCON_PMU &&
>> +         !nvkm_secboot_is_managed(sb, NVKM_SECBOOT_FALCON_PMU)) {
>> +             struct nvkm_pmu *pmu = subdev->device->pmu;
>> +             if (pmu) {
>> +                     ret = nvkm_subdev_init(&pmu->subdev);
>> +                     if (ret < 0) {
>> +                             nvkm_error(subdev, "Failed to reset PMU\n");
>> +                             return ret;
>> +                     }
>> +             }
>> +     }
>> +
>>       return 0;
>>  }
>>
>>
>
>
> _______________________________________________
> Nouveau mailing list
> Nouveau at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/nouveau
>


More information about the Nouveau mailing list