From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MIME_HTML_MOSTLY,PDS_BAD_THREAD_QP_64, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62DC9C47080 for ; Tue, 1 Jun 2021 04:56:22 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E687161005 for ; Tue, 1 Jun 2021 04:56:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E687161005 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7F27E6E81C; Tue, 1 Jun 2021 04:56:21 +0000 (UTC) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2046.outbound.protection.outlook.com [40.107.220.46]) by gabe.freedesktop.org (Postfix) with ESMTPS id C35656E81C for ; Tue, 1 Jun 2021 04:56:19 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kWOLFVKA7+OvEgEavx9zkabiZv2/uRoDBEgpjhEn1Blu1nS5x6+66ITca18XVuDa14d5wTOzvj2oQBxVzDH9g/FIPLdqrlaYStkdMLzGEgaNE50uQmXlt3hwvu4QmH3e3vKh7zwLNCInusZIzlCyOEBvm/fzbdJ9cLYMoyTiKWCldmfS7P3CbtALwcgigxpBVYpWIYMfMTzMvXQ+KUCCqexwLPsDTyWQgx8cGeNuppycZu70cqQCblbPmpwuMi6e/yxbm1Wa7wcWhWf0njADv6rwerb7xWPA/1tztCbSIHfV9fFtUZM3gyJpU1DVsNKRgGQ2kmZGNiEo5LOuZITmyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yG+XQoA+O5pKVY+PSQE9WThbHqnTomEbGkmnZ4XbgAM=; b=dT39JtTcLkJiLnzA/Kn6EXaCucmNEu2MYDSXbgWWzmo/Uj2zu4nhW+9uJ+QEp+T3EjwYiMqcFSXuB0szbkvSPmYcR9/w0i69ZVtCx2IvEFIMje47t54AMVdWHR6iLB8myWfuBIodRmb54npC07KuYrNWR3ikYjPDsLzvpba0g1S2fwAKpdP6V1VJr/1V4jntzFZj1W9KoEPCS/EHlEaNA5R5kF0yMxmwHvdW14H8qnZfS+3T/sKFH6kLvjZ17/nrkA3CYwdOqjOhjJ5r5d3R7VetXEjFL2kMLp1+x9o0h4XUs9KRP+Eh9F6IiC2sfuncrsb+ZZBFcUnEQRbRLI8f3Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yG+XQoA+O5pKVY+PSQE9WThbHqnTomEbGkmnZ4XbgAM=; b=h8VLrMzZYvsH7BB5aIUkOq7QirwJOPl+kH4R0K7ZxUXGpwAVSl+DIwoSkkb8ykyiL469DPYQC3pfwFn3sUhpNTykw1FfYPBw72ATTTZ5ilSK+k+ZDEG2LbnRE96nDRoobFxdpsbQ5ma9AsXqvVmH8tsrYaGlyIS/muQr7ulWt1E= Received: from CH0PR12MB5348.namprd12.prod.outlook.com (2603:10b6:610:d7::9) by CH0PR12MB5107.namprd12.prod.outlook.com (2603:10b6:610:be::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.22; Tue, 1 Jun 2021 04:56:17 +0000 Received: from CH0PR12MB5348.namprd12.prod.outlook.com ([fe80::9c3:508d:5340:8efd]) by CH0PR12MB5348.namprd12.prod.outlook.com ([fe80::9c3:508d:5340:8efd%6]) with mapi id 15.20.4173.030; Tue, 1 Jun 2021 04:56:17 +0000 From: "Lazar, Lijo" To: "Powell, Darren" , "amd-gfx@lists.freedesktop.org" Subject: RE: [PATCH 2/6] amdgpu/pm: clean up smu_get_power_limit function signature Thread-Topic: [PATCH 2/6] amdgpu/pm: clean up smu_get_power_limit function signature Thread-Index: AQHXVBYfNEWgrbBnYkyNpITBdXGwIqr9G+QAgAEi8gCAAFqvYA== Date: Tue, 1 Jun 2021 04:56:17 +0000 Message-ID: References: <20210528230621.16468-1-darren.powell@amd.com> <20210528230621.16468-3-darren.powell@amd.com>, In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Enabled=true; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SetDate=2021-06-01T04:56:10Z; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Method=Standard; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_Name=Public-AIP 2.0; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ActionId=; MSIP_Label_d4243a53-6221-4f75-8154-e4b33a5707a1_ContentBits=1 authentication-results: amd.com; dkim=none (message not signed) header.d=none;amd.com; dmarc=none action=none header.from=amd.com; x-originating-ip: [165.204.159.242] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8d80db7e-220f-4472-33af-08d924b99727 x-ms-traffictypediagnostic: CH0PR12MB5107: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4714; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: xQyVzJ0KamyJZ9srnMC1iKIWkEZoFCU16e7oXRqsko3fE6CLZ8yitaqKySSFKF4DL6708KU2FoLZhkO2JrJ+/2UTnbNI8TRXX16OvgdIQID2VEOuqbAZsP3n798VD45JJxlIvV9dGfTgLE3r7e2a9pqPkp8vWPfFrW6EYNerwj58wFaDielk5kmds9EDrx9RvIAEwdcjiim4Q8RsPwmIYNzBZ8b/26J/RajNKi174L184BrFElEJTAiL9UEGgmajnVI/UZRWFKRM6yiAD1gnaEFc2+cIXAShi72QcjEgY+ltHSfe/aWR/d5+UTen5F+4zaBv5cDqoydfLORxWbQxcrj7v48ep26Vjfyo14OJ0LZUQFmXrIm2lypVwWgZhj8Y5paHeGxTkRwA7zNMtetekvlNvGQbfy+nZT+RPiW1GEUcTdtBFLMktX4VtUu2ebjtT/oxqfTCAy7mNozVPzEe+a2FdUsgBkhOWM4L3KBybrUp0Aj5yVHCXnZai++f9P9M90wTo+aBqRkU06AedGNo9BxNxWiLmN6ldmz5h92Yb9trHb/oCNJt90NKO1HucCpmVL0wj9auoKVasDnV5JDuQ1+65vseY/Nvfut4togZRmI= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH0PR12MB5348.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(346002)(396003)(366004)(39860400002)(136003)(186003)(5660300002)(478600001)(55016002)(86362001)(66556008)(66446008)(122000001)(66476007)(53546011)(52536014)(26005)(64756008)(6506007)(66946007)(8676002)(76116006)(33656002)(71200400001)(8936002)(9686003)(2906002)(110136005)(316002)(7696005)(83380400001)(38100700002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?Csj1sDNV9msKm3csDU+Q4+ah7aoJjK5X/+0mSWORvGyMalS1/Lp2hscmCYKO?= =?us-ascii?Q?JaERDhMn5XmiRcL43j1n61xNx9Ae5JTj798T+p7aYowqGvKVXzwTFmATLyUr?= =?us-ascii?Q?eF5kBKShATys3OPhsXO4pho/eId2jfSN24gcfbFbjpISax/AmdH+B2ZYvsR3?= =?us-ascii?Q?wMBQcIvLGfpzzC5x//ADas6U9rzKJn2VkzT4zaiHRJRz6bAhdap4HTDO2/lR?= =?us-ascii?Q?ZToyl8cETLOPp8e/hAfnCnBRrjcT5gnFCc6OqmX5bcZ4lmaHuZqVypKbq6Bm?= =?us-ascii?Q?UAFrtsTpD1N6HafrrwVMokIabsos7qreUmmGgry1vzhlGSp4OHk97PvGMgzO?= =?us-ascii?Q?SnV3I/VGw2ndl+CLWxnvb/3PnOGN+EJuvtNmdqG4UrvAAxgG/nH0/CHTy97p?= =?us-ascii?Q?7Mu1zlVH80y3RRtYKd9IM50GsgiwGdZ04ZnATzpIIaxCxcbE/GFJxXkiKvRH?= =?us-ascii?Q?fnyzRHPcm/7oVZNZRPdjakfwc5+X/fbcYtcp7ldHclk6nVvhcyJy3fO/IOQK?= =?us-ascii?Q?671/B6RW2wh60s7GAR3nOKz4xSSCBiWIaqwDZqYALMf6MVMmTE1wCvdeA8Dt?= =?us-ascii?Q?NENyJLlDMkCw4RnkWqpJPuUboRTqXdsAZ8PfI9/c57vxoBCDLzaA2txyowvq?= =?us-ascii?Q?avmUakzY7ATeof4QBnvgwXh3eg9m9SUXky2NNvOB/GD0uVlleDBJMW/S9lci?= =?us-ascii?Q?7b2BIJIOg7NffI9tmmn78rsM4LfXI3+b9Cln0daFXRr52ohJE+XlJGBkn/St?= =?us-ascii?Q?m8l8dB/GapX3SNfTtnPBcOOs/wIspBxLL3Npq4vMuvF/R9wJeQVu/OxYZuHO?= =?us-ascii?Q?X1Stpl5AzuOgEDHn91AZ/6mLj8qEopW3FYs2AwjbQXFFP6bGMJYPbLIwwjKe?= =?us-ascii?Q?uBGwscub/rwvyapw0ifo22HvzOfKuOyYeefTgt1UZU5t9AuNA2Qplj5ORXrI?= =?us-ascii?Q?niLJHm4Mlogyhk2OfVyk0aYLatx94ZjTydmOgDqOgAtXT8y4gxGWuaRpOUlk?= =?us-ascii?Q?ie+OOQztgAI++oU5YnpiTeQ//Tjguvq/A05/PbmNfV6YVpLJgERt7mSppZ3w?= =?us-ascii?Q?Fz71oxZMuXb//MRg2gaG3uKGvUpNpFipzhr+kFM9bIAlvsmBSJREfL5f5a/z?= =?us-ascii?Q?kWiAjO0ghkiwUlATPEJPkSU4NIkGyGzKpfVkDYoawnw/NA5AciDDZNAHaTQv?= =?us-ascii?Q?5HILR+YEzKJOs0hlIU5hY3Vz4mBBIdrViuSlpNlI+gR7tmY4fJV5z4+MrPvR?= =?us-ascii?Q?OTf4+p2lcj6k0JbPWYvUoDUIaAV1B/qQasfHFl3bxNu2wFVug8/WnOkSTctW?= =?us-ascii?Q?NitsBDLi5lIsmw/44VQ3lnr2?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH0PR12MB5348.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8d80db7e-220f-4472-33af-08d924b99727 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Jun 2021 04:56:17.1829 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Zm+FvWuJOmuBfZE6FxJQQ4Ewpiaj3sgYKrqDvpYkKjYVdYgprYF8+md6tfti59rd X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR12MB5107 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0732257761==" Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" --===============0732257761== Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_CH0PR12MB5348DB50C9C32FB21586F41C973E9CH0PR12MB5348namp_" --_000_CH0PR12MB5348DB50C9C32FB21586F41C973E9CH0PR12MB5348namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [Public] May be just call it power_limit or power_cap similar to hwmon. The various = limits correspond to hwmon power[1-*]_cap and levels correspond to min/ max= etc. Thanks, Lijo From: Powell, Darren Sent: Tuesday, June 1, 2021 4:50 AM To: Lazar, Lijo ; amd-gfx@lists.freedesktop.org Subject: Re: [PATCH 2/6] amdgpu/pm: clean up smu_get_power_limit function s= ignature [Public] >< > The limits are not limited to sample window. There are limits like APU= only limit, platform limit and totally obscure ones like PPT0/PPT1 etc. >It's better that the new enum takes care of those as well in case there is= a need to make them available through sysfs. I think you mean something more like this? + enum pp_power_constraints +{ + PP_PWR_CONSTRAINT_DEFAULT, + PP_PWR_CONSTRAINT_FASTWINDOW, +}; + ________________________________ From: Lazar, Lijo > Sent: Monday, May 31, 2021 2:04 AM To: Powell, Darren >; a= md-gfx@lists.freedesktop.org > Subject: RE: [PATCH 2/6] amdgpu/pm: clean up smu_get_power_limit function s= ignature [Public] -----Original Message----- From: Powell, Darren > Sent: Saturday, May 29, 2021 4:36 AM To: amd-gfx@lists.freedesktop.org Cc: Powell, Darren > Subject: [PATCH 2/6] amdgpu/pm: clean up smu_get_power_limit function signa= ture add two new powerplay enums (limit_level, sample_window) add enums to smu= _get_power_limit signature remove input bitfield stuffing of output variab= le limit update calls to smu_get_power_limit * Test AMDGPU_PCI_ADDR=3D`lspci -nn | grep "VGA\|Display" | cut -d " " -f 1` AMD= GPU_HWMON=3D`ls -la /sys/class/hwmon | grep $AMDGPU_PCI_ADDR | cut -d " " -= f 10` HWMON_DIR=3D/sys/class/hwmon/${AMDGPU_HWMON} lspci -nn | grep "VGA\|Display" ; \ echo "=3D=3D=3D power1 cap =3D=3D=3D" ; cat $HWMON_DIR/power1_cap ; = \ echo "=3D=3D=3D power1 cap max =3D=3D=3D" ; cat $HWMON_DIR/power1_cap_max = ; \ echo "=3D=3D=3D power1 cap def =3D=3D=3D" ; cat $HWMON_DIR/power1_cap_defa= ult Signed-off-by: Darren Powell > --- .../gpu/drm/amd/include/kgd_pp_interface.h | 14 ++++++++ drivers/gpu/drm/amd/pm/amdgpu_pm.c | 18 +++++----- drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h | 3 +- drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 34 +++++++++++++++++-- 4 files changed, 57 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h b/drivers/gpu/d= rm/amd/include/kgd_pp_interface.h index b1cd52a9d684..ddbf802ea8ad 100644 --- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h +++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h @@ -192,6 +192,20 @@ enum pp_df_cstate { DF_CSTATE_ALLOW, }; +enum pp_power_limit_level +{ + PP_PWR_LIMIT_MIN =3D -1, + PP_PWR_LIMIT_CURRENT, + PP_PWR_LIMIT_DEFAULT, + PP_PWR_LIMIT_MAX, +}; + + enum pp_power_sample_window +{ + PP_PWR_WINDOW_DEFAULT, + PP_PWR_WINDOW_FAST, +}; + < > The limits are not limited to sample window. There are limits like APU = only limit, platform limit and totally obscure ones like PPT0/PPT1 etc. It's better that the new enum takes care of those as well in case there is = a need to make them available through sysfs. Thanks, Lijo #define PP_GROUP_MASK 0xF0000000 #define PP_GROUP_SHIFT 28 diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/am= dgpu_pm.c index 13da377888d2..f7b45803431d 100644 --- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c @@ -2717,8 +2717,8 @@ static ssize_t amdgpu_hwmon_show_power_cap_max(struct= device *dev, { struct amdgpu_device *adev =3D dev_get_drvdata(dev); const struct amd_pm_funcs *pp_funcs =3D adev->powerplay.pp_funcs; - int limit_type =3D to_sensor_dev_attr(attr)->index; - uint32_t limit =3D limit_type << 24; + enum pp_power_sample_window sample_window =3D to_sensor_dev_attr(at= tr)->index; + uint32_t limit; uint32_t max_limit =3D 0; ssize_t size; int r; @@ -2735,7 +2735,7 @@ static ssize_t amdgpu_hwmon_show_power_cap_max(struct= device *dev, } if (is_support_sw_smu(adev)) { - smu_get_power_limit(&adev->smu, &limit, SMU_PPT_LIMIT_MAX); + smu_get_power_limit(&adev->smu, &limit, PP_PWR_LIMIT_MAX, +sample_window); size =3D snprintf(buf, PAGE_SIZE, "%u\n", limit * 1000000)= ; } else if (pp_funcs && pp_funcs->get_power_limit) { pp_funcs->get_power_limit(adev->powerplay.pp_handle, @@ -2757,8 +2757,8 @@ static ssize_t amdgpu_hwmon_show_power_cap(struct dev= ice *dev, { struct amdgpu_device *adev =3D dev_get_drvdata(dev); const struct amd_pm_funcs *pp_funcs =3D adev->powerplay.pp_funcs; - int limit_type =3D to_sensor_dev_attr(attr)->index; - uint32_t limit =3D limit_type << 24; + enum pp_power_sample_window sample_window =3D to_sensor_dev_attr(at= tr)->index; + uint32_t limit; ssize_t size; int r; @@ -2774,7 +2774,7 @@ static ssize_t amdgpu_hwmon_show_power_cap(struct dev= ice *dev, } if (is_support_sw_smu(adev)) { - smu_get_power_limit(&adev->smu, &limit, SMU_PPT_LIMIT_CURRE= NT); + smu_get_power_limit(&adev->smu, &limit, PP_PWR_LIMIT_CURREN= T, +sample_window); size =3D snprintf(buf, PAGE_SIZE, "%u\n", limit * 1000000)= ; } else if (pp_funcs && pp_funcs->get_power_limit) { pp_funcs->get_power_limit(adev->powerplay.pp_handle, @@ -2796,8 +2796,8 @@ static ssize_t amdgpu_hwmon_show_power_cap_default(st= ruct device *dev, { struct amdgpu_device *adev =3D dev_get_drvdata(dev); const struct amd_pm_funcs *pp_funcs =3D adev->powerplay.pp_funcs; - int limit_type =3D to_sensor_dev_attr(attr)->index; - uint32_t limit =3D limit_type << 24; + enum pp_power_sample_window sample_window =3D to_sensor_dev_attr(at= tr)->index; + uint32_t limit; ssize_t size; int r; @@ -2813,7 +2813,7 @@ static ssize_t amdgpu_hwmon_show_power_cap_default(st= ruct device *dev, } if (is_support_sw_smu(adev)) { - smu_get_power_limit(&adev->smu, &limit, SMU_PPT_LIMIT_DEFAU= LT); + smu_get_power_limit(&adev->smu, &limit, PP_PWR_LIMIT_DEFAUL= T, +sample_window); size =3D snprintf(buf, PAGE_SIZE, "%u\n", limit * 1000000)= ; } else if (pp_funcs && pp_funcs->get_power_limit) { pp_funcs->get_power_limit(adev->powerplay.pp_handle, diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/= pm/inc/amdgpu_smu.h index 523f9d2982e9..b97b960c2eac 100644 --- a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h +++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h @@ -1262,7 +1262,8 @@ enum smu_cmn2asic_mapping_type { #if !defined(SWSMU_= CODE_LAYER_L2) && !defined(SWSMU_CODE_LAYER_L3) && !defined(SWSMU_CODE_LAYE= R_L4) int smu_get_power_limit(struct smu_context *smu, uint32_t *limit, - enum smu_ppt_limit_level limit_level); + enum pp_power_limit_level pp_limit_level, + enum pp_power_sample_window sample_window); bool smu_mode1_reset_is_support(struct smu_context *smu); bool smu_mode2_= reset_is_support(struct smu_context *smu); diff --git a/drivers/gpu/drm/amd= /pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c index 8aff67a667fa..44c1baa2748d 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c @@ -2168,14 +2168,44 @@ static int smu_set_fan_speed_rpm(void *handle, uint= 32_t speed) int smu_get_power_limit(struct smu_context *smu, uint32_t *limit, - enum smu_ppt_limit_level limit_level) + enum pp_power_limit_level pp_limit_level, + enum pp_power_sample_window sample_window) { - uint32_t limit_type =3D *limit >> 24; + enum smu_ppt_limit_level limit_level; + uint32_t limit_type; int ret =3D 0; if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled) return -EOPNOTSUPP; + switch(sample_window) { + case PP_PWR_WINDOW_DEFAULT: + limit_type =3D SMU_DEFAULT_PPT_LIMIT; + break; + case PP_PWR_WINDOW_FAST: + limit_type =3D SMU_FAST_PPT_LIMIT; + break; + default: + return -EOPNOTSUPP; + break; + } + + switch(pp_limit_level){ + case PP_PWR_LIMIT_CURRENT: + limit_level =3D SMU_PPT_LIMIT_CURRENT; + break; + case PP_PWR_LIMIT_DEFAULT: + limit_level =3D SMU_PPT_LIMIT_DEFAULT; + break; + case PP_PWR_LIMIT_MAX: + limit_level =3D SMU_PPT_LIMIT_MAX; + break; + case PP_PWR_LIMIT_MIN: + default: + return -EOPNOTSUPP; + break; + } + mutex_lock(&smu->mutex); if (limit_type !=3D SMU_DEFAULT_PPT_LIMIT) { -- 2.25.1 --_000_CH0PR12MB5348DB50C9C32FB21586F41C973E9CH0PR12MB5348namp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

[Public]

 

May be just call it power_limit or power_cap similar= to hwmon. The various limits correspond to hwmon power[1-*]_cap and levels= correspond to min/ max etc.

 

Thanks,

Lijo

 

From: Powell, Darren <Darren.Powell@amd.co= m>
Sent: Tuesday, June 1, 2021 4:50 AM
To: Lazar, Lijo <Lijo.Lazar@amd.com>; amd-gfx@lists.freedeskto= p.org
Subject: Re: [PATCH 2/6] amdgpu/pm: clean up smu_get_power_limit fun= ction signature

 

[Public]

 


>< > The limits are not limited t= o sample window. There are limits like APU only limit, platform limit and t= otally obscure ones like PPT0/PPT1 etc.
>It's better that the new enum takes ca= re of those as well in case there is a need to make them available through = sysfs.

&n= bsp;

I think= you mean something more like this?

+ enum pp_power_constraints
+{
+       PP_P= WR_CONSTRAINT_DEFAULT,
+       PP_P= WR_CONSTRAINT_FASTWINDOW,
+};
+

&n= bsp;

&n= bsp;


From: Lazar, Lijo <Lijo.Lazar@amd.com>
Sent: Monday, May 31, 2021 2:04 AM
To: Powell, Darren <Darr= en.Powell@amd.com>; amd-gfx@lists.freedesktop.= org <amd-gfx@lists.= freedesktop.org>
Subject: RE: [PATCH 2/6] amdgpu/pm: clean up smu_get_power_limit fun= ction signature

 

[Public]



-----Original Message-----
From: Powell, Darren <Darren.Po= well@amd.com>
Sent: Saturday, May 29, 2021 4:36 AM
To: amd-gfx@lists.freedesk= top.org
Cc: Powell, Darren <Darren.Powe= ll@amd.com>
Subject: [PATCH 2/6] amdgpu/pm: clean up smu_get_power_limit function signa= ture

 add two new powerplay enums (limit_level, sample_window)  add en= ums to smu_get_power_limit signature  remove input bitfield stuffing o= f output variable limit  update calls to smu_get_power_limit

* Test
 AMDGPU_PCI_ADDR=3D`lspci -nn | grep "VGA\|Display" | cut -d= " " -f 1`  AMDGPU_HWMON=3D`ls -la /sys/class/hwmon | grep $= AMDGPU_PCI_ADDR | cut -d " " -f 10`  HWMON_DIR=3D/sys/class/= hwmon/${AMDGPU_HWMON}

 lspci -nn | grep "VGA\|Display" ; \
 echo "=3D=3D=3D power1 cap =3D=3D=3D" ; cat $HWMON_DIR/powe= r1_cap ;           \
 echo "=3D=3D=3D power1 cap max =3D=3D=3D" ; cat $HWMON_DIR/= power1_cap_max ;   \
 echo "=3D=3D=3D power1 cap def =3D=3D=3D" ; cat $HWMON_DIR/= power1_cap_default

Signed-off-by: Darren Powell <d= arren.powell@amd.com>
---
 .../gpu/drm/amd/include/kgd_pp_interface.h    | 14 +++= +++++
 drivers/gpu/drm/amd/pm/amdgpu_pm.c      = ;      | 18 +++++-----
 drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h     =   |  3 +-
 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c     | 3= 4 +++++++++++++++++--
 4 files changed, 57 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h b/drivers/gpu/d= rm/amd/include/kgd_pp_interface.h
index b1cd52a9d684..ddbf802ea8ad 100644
--- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
@@ -192,6 +192,20 @@ enum pp_df_cstate {
         DF_CSTATE_ALLOW,
 };
 
+enum pp_power_limit_level
+{
+       PP_PWR_LIMIT_MIN =3D -1,
+       PP_PWR_LIMIT_CURRENT,
+       PP_PWR_LIMIT_DEFAULT,
+       PP_PWR_LIMIT_MAX,
+};
+
+ enum pp_power_sample_window
+{
+       PP_PWR_WINDOW_DEFAULT,
+       PP_PWR_WINDOW_FAST,
+};
+

< > The limits are not limited to sample window. There are limits lik= e APU only limit, platform limit and totally obscure ones like PPT0/PPT1 et= c.
It's better that the new enum takes care of those as well in case there is = a need to make them available through sysfs.

Thanks,
Lijo

 #define PP_GROUP_MASK        0xF00= 00000
 #define PP_GROUP_SHIFT       28
 
diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/am= dgpu_pm.c
index 13da377888d2..f7b45803431d 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
@@ -2717,8 +2717,8 @@ static ssize_t amdgpu_hwmon_show_power_cap_max(struct= device *dev,  {
         struct amdgpu_device *adev= =3D dev_get_drvdata(dev);
         const struct amd_pm_funcs = *pp_funcs =3D adev->powerplay.pp_funcs;
-       int limit_type =3D to_sensor_dev_attr= (attr)->index;
-       uint32_t limit =3D limit_type <<= ; 24;
+       enum pp_power_sample_window sample_wi= ndow =3D to_sensor_dev_attr(attr)->index;
+       uint32_t limit;
         uint32_t max_limit =3D 0;<= br>          ssize_t size;
         int r;
@@ -2735,7 +2735,7 @@ static ssize_t amdgpu_hwmon_show_power_cap_max(struct= device *dev,
         }
 
         if (is_support_sw_smu(adev= )) {
-            &n= bsp;  smu_get_power_limit(&adev->smu, &limit, SMU_PPT_LIMIT= _MAX);
+            &n= bsp;  smu_get_power_limit(&adev->smu, &limit, PP_PWR_LIMIT_= MAX,
+sample_window);
            &nb= sp;    size =3D snprintf(buf, PAGE_SIZE, "%u\n", l= imit * 1000000);
         } else if (pp_funcs &&= amp; pp_funcs->get_power_limit) {
            &nb= sp;    pp_funcs->get_power_limit(adev->powerplay.pp_ha= ndle,
@@ -2757,8 +2757,8 @@ static ssize_t amdgpu_hwmon_show_power_cap(struct dev= ice *dev,  {
         struct amdgpu_device *adev= =3D dev_get_drvdata(dev);
         const struct amd_pm_funcs = *pp_funcs =3D adev->powerplay.pp_funcs;
-       int limit_type =3D to_sensor_dev_attr= (attr)->index;
-       uint32_t limit =3D limit_type <<= ; 24;
+       enum pp_power_sample_window sample_wi= ndow =3D to_sensor_dev_attr(attr)->index;
+       uint32_t limit;
         ssize_t size;
         int r;
 
@@ -2774,7 +2774,7 @@ static ssize_t amdgpu_hwmon_show_power_cap(struct dev= ice *dev,
         }
 
         if (is_support_sw_smu(adev= )) {
-            &n= bsp;  smu_get_power_limit(&adev->smu, &limit, SMU_PPT_LIMIT= _CURRENT);
+            &n= bsp;  smu_get_power_limit(&adev->smu, &limit, PP_PWR_LIMIT_= CURRENT,
+sample_window);
            &nb= sp;    size =3D snprintf(buf, PAGE_SIZE, "%u\n", l= imit * 1000000);
         } else if (pp_funcs &&= amp; pp_funcs->get_power_limit) {
            &nb= sp;    pp_funcs->get_power_limit(adev->powerplay.pp_ha= ndle,
@@ -2796,8 +2796,8 @@ static ssize_t amdgpu_hwmon_show_power_cap_default(st= ruct device *dev,  {
         struct amdgpu_device *adev= =3D dev_get_drvdata(dev);
         const struct amd_pm_funcs = *pp_funcs =3D adev->powerplay.pp_funcs;
-       int limit_type =3D to_sensor_dev_attr= (attr)->index;
-       uint32_t limit =3D limit_type <<= ; 24;
+       enum pp_power_sample_window sample_wi= ndow =3D to_sensor_dev_attr(attr)->index;
+       uint32_t limit;
         ssize_t size;
         int r;
 
@@ -2813,7 +2813,7 @@ static ssize_t amdgpu_hwmon_show_power_cap_default(st= ruct device *dev,
         }
 
         if (is_support_sw_smu(adev= )) {
-            &n= bsp;  smu_get_power_limit(&adev->smu, &limit, SMU_PPT_LIMIT= _DEFAULT);
+            &n= bsp;  smu_get_power_limit(&adev->smu, &limit, PP_PWR_LIMIT_= DEFAULT,
+sample_window);
            &nb= sp;    size =3D snprintf(buf, PAGE_SIZE, "%u\n", l= imit * 1000000);
         } else if (pp_funcs &&= amp; pp_funcs->get_power_limit) {
            &nb= sp;    pp_funcs->get_power_limit(adev->powerplay.pp_ha= ndle,
diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/= pm/inc/amdgpu_smu.h
index 523f9d2982e9..b97b960c2eac 100644
--- a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
+++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
@@ -1262,7 +1262,8 @@ enum smu_cmn2asic_mapping_type {  #if !defined(S= WSMU_CODE_LAYER_L2) && !defined(SWSMU_CODE_LAYER_L3) && !de= fined(SWSMU_CODE_LAYER_L4)  int smu_get_power_limit(struct smu_context= *smu,
            &nb= sp;            uint3= 2_t *limit,
-            &n= bsp;          enum smu_ppt_lim= it_level limit_level);
+            &n= bsp;          enum pp_power_li= mit_level pp_limit_level,
+            &n= bsp;          enum pp_power_sa= mple_window sample_window);
 
 bool smu_mode1_reset_is_support(struct smu_context *smu);  bool = smu_mode2_reset_is_support(struct smu_context *smu); diff --git a/drivers/g= pu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.= c
index 8aff67a667fa..44c1baa2748d 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -2168,14 +2168,44 @@ static int smu_set_fan_speed_rpm(void *handle, uint= 32_t speed)
 
 int smu_get_power_limit(struct smu_context *smu,
            &nb= sp;            uint3= 2_t *limit,
-            &n= bsp;          enum smu_ppt_lim= it_level limit_level)
+            &n= bsp;          enum pp_power_li= mit_level pp_limit_level,
+            &n= bsp;          enum pp_power_sa= mple_window sample_window)
 {
-       uint32_t limit_type =3D *limit >&g= t; 24;
+       enum smu_ppt_limit_level limit_level;=
+       uint32_t limit_type;
         int ret =3D 0;
 
         if (!smu->pm_enabled ||= !smu->adev->pm.dpm_enabled)
            &nb= sp;    return -EOPNOTSUPP;
 
+       switch(sample_window) {
+       case PP_PWR_WINDOW_DEFAULT:
+            &n= bsp;  limit_type =3D SMU_DEFAULT_PPT_LIMIT;
+            &n= bsp;  break;
+       case PP_PWR_WINDOW_FAST:
+            &n= bsp;  limit_type =3D SMU_FAST_PPT_LIMIT;
+            &n= bsp;  break;
+       default:
+            &n= bsp;  return -EOPNOTSUPP;
+            &n= bsp;  break;
+       }
+
+       switch(pp_limit_level){
+       case PP_PWR_LIMIT_CURRENT:
+            &n= bsp;  limit_level =3D SMU_PPT_LIMIT_CURRENT;
+            &n= bsp;  break;
+       case PP_PWR_LIMIT_DEFAULT:
+            &n= bsp;  limit_level =3D SMU_PPT_LIMIT_DEFAULT;
+            &n= bsp;  break;
+       case PP_PWR_LIMIT_MAX:
+            &n= bsp;  limit_level =3D SMU_PPT_LIMIT_MAX;
+            &n= bsp;  break;
+       case PP_PWR_LIMIT_MIN:
+       default:
+            &n= bsp;  return -EOPNOTSUPP;
+            &n= bsp;  break;
+       }
+
         mutex_lock(&smu->mu= tex);
 
         if (limit_type !=3D SMU_DE= FAULT_PPT_LIMIT) {
--
2.25.1

--_000_CH0PR12MB5348DB50C9C32FB21586F41C973E9CH0PR12MB5348namp_-- --===============0732257761== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx --===============0732257761==--