From patchwork Wed Mar 23 17:42:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Alex Deucher X-Patchwork-Id: 8652801 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 27CA7C0553 for ; Wed, 23 Mar 2016 17:45:09 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 15947203FB for ; Wed, 23 Mar 2016 17:45:08 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 172E6203E6 for ; Wed, 23 Mar 2016 17:45:07 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6E6336E900; Wed, 23 Mar 2016 17:44:32 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-qg0-x22e.google.com (mail-qg0-x22e.google.com [IPv6:2607:f8b0:400d:c04::22e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5EC3B6E3FA for ; Wed, 23 Mar 2016 17:43:51 +0000 (UTC) Received: by mail-qg0-x22e.google.com with SMTP id y89so18136964qge.2 for ; Wed, 23 Mar 2016 10:43:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Y2RSmUzJYwL6Onnz1wukI9hRCFhj0h4nrZ9aTNwhIxw=; b=olDFTJVxulTq7Fpxh3XLSVks3lnko8lUkleT5WoELO32YXedDY0smk5txpgznKyZaY UsVAhUxOyv/+dEONMnTRKYTvZprBBM5yhjeHQ9CBq0LK5a9AT2R7k1w9Dp02K9kTH1/O DkE9YlVhFk81z/PXEaQBb1U/lnKWzQadw7PgrnKynGC0OYZFJQQEg8rgYDcI+LTUzuRM LwbpRxXsNHBtsUrXlsUmMMUR3OsorvTpzV8YyPEjSltVZKCQ6609okbj3e+6rRWFKMBh Zjyx83i6qofBwv/F09R8zlQZTHEq+Jbqdn8He8XSAFBMWtWlXdxYWbEujUXhgTeHJPEf 9xJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Y2RSmUzJYwL6Onnz1wukI9hRCFhj0h4nrZ9aTNwhIxw=; b=J5bsoo5at7gitE6vI+JVmBkWFjRsbDbO1SVwGUFYcI9RA9ZU1gbJwUUWygdc3X5X3O oktidqQojn3kPueW7fC77sNrovnt5dhxM/J7no/TcMTxltcClWLwl04iVZDvNMvvWLlZ V8O7hKPCRW/iPDVF2soW0LU/IhSIENlTrqbQBks1jRojfzA9HepzHPmDgvOb/6nZQz/t 6Rlpkzpz8yHTShR1zK73om8RrRF4w4DOhT4J5ZI5gQjM6rCw4I8qeZh8USfgLLddkjG4 r+5tH7/55j1WV0EIkVwT/hsH8N3jwazjZectidR/4RD6oh4zubzQaaXC+xzY/YBL2FgD tBAQ== X-Gm-Message-State: AD7BkJKNWHz7XLU3G1bbc2Zutp8L2MImt/z+uhrH5igVqxsfstnnX9QefgpYzzdyNn3NXA== X-Received: by 10.140.181.137 with SMTP id c131mr901673qha.94.1458755029733; Wed, 23 Mar 2016 10:43:49 -0700 (PDT) Received: from cm.localdomain (static-74-96-105-49.washdc.fios.verizon.net. [74.96.105.49]) by smtp.gmail.com with ESMTPSA id v190sm1486878qka.46.2016.03.23.10.43.49 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 23 Mar 2016 10:43:49 -0700 (PDT) From: Alex Deucher X-Google-Original-From: Alex Deucher To: dri-devel@lists.freedesktop.org Subject: [PATCH 35/52] drm/amd/amdgpu: add medium grain powergating support for Baffin Date: Wed, 23 Mar 2016 13:42:51 -0400 Message-Id: <1458754988-16222-36-git-send-email-alexander.deucher@amd.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1458754988-16222-1-git-send-email-alexander.deucher@amd.com> References: <1458754988-16222-1-git-send-email-alexander.deucher@amd.com> MIME-Version: 1.0 Cc: Eric Huang X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Eric Huang Reviewed-by: Alex Deucher Acked-by: Christian König Signed-off-by: Eric Huang --- drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 95 +++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 6f31fc7..f9d17e7 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c @@ -4392,6 +4392,9 @@ static int gfx_v8_0_hw_fini(void *handle) gfx_v8_0_rlc_stop(adev); gfx_v8_0_cp_compute_fini(adev); + amdgpu_set_powergating_state(adev, + AMD_IP_BLOCK_TYPE_GFX, AMD_PG_STATE_UNGATE); + return 0; } @@ -4819,12 +4822,104 @@ static int gfx_v8_0_late_init(void *handle) if (r) return r; + amdgpu_set_powergating_state(adev, + AMD_IP_BLOCK_TYPE_GFX, AMD_PG_STATE_GATE); + return 0; } +static void baffin_enable_gfx_static_mg_power_gating(struct amdgpu_device *adev, + bool enable) +{ + uint32_t data, temp; + + /* Send msg to SMU via Powerplay */ + amdgpu_set_powergating_state(adev, + AMD_IP_BLOCK_TYPE_SMC, + enable ? AMD_PG_STATE_GATE : AMD_PG_STATE_UNGATE); + + if (enable) { + /* Enable static MGPG */ + temp = data = RREG32(mmRLC_PG_CNTL); + data |= RLC_PG_CNTL__STATIC_PER_CU_PG_ENABLE_MASK; + + if (temp != data) + WREG32(mmRLC_PG_CNTL, data); + } else { + temp = data = RREG32(mmRLC_PG_CNTL); + data &= ~RLC_PG_CNTL__STATIC_PER_CU_PG_ENABLE_MASK; + + if (temp != data) + WREG32(mmRLC_PG_CNTL, data); + } +} + +static void baffin_enable_gfx_dynamic_mg_power_gating(struct amdgpu_device *adev, + bool enable) +{ + uint32_t data, temp; + + if (enable) { + /* Enable dynamic MGPG */ + temp = data = RREG32(mmRLC_PG_CNTL); + data |= RLC_PG_CNTL__DYN_PER_CU_PG_ENABLE_MASK; + + if (temp != data) + WREG32(mmRLC_PG_CNTL, data); + } else { + temp = data = RREG32(mmRLC_PG_CNTL); + data &= ~RLC_PG_CNTL__DYN_PER_CU_PG_ENABLE_MASK; + + if (temp != data) + WREG32(mmRLC_PG_CNTL, data); + } +} + +static void baffin_enable_gfx_quick_mg_power_gating(struct amdgpu_device *adev, + bool enable) +{ + uint32_t data, temp; + + if (enable) { + /* Enable quick PG */ + temp = data = RREG32(mmRLC_PG_CNTL); + data |= 0x100000; + + if (temp != data) + WREG32(mmRLC_PG_CNTL, data); + } else { + temp = data = RREG32(mmRLC_PG_CNTL); + data &= ~0x100000; + + if (temp != data) + WREG32(mmRLC_PG_CNTL, data); + } +} + static int gfx_v8_0_set_powergating_state(void *handle, enum amd_powergating_state state) { + struct amdgpu_device *adev = (struct amdgpu_device *)handle; + + if (!(adev->pg_flags & AMD_PG_SUPPORT_GFX_PG)) + return 0; + + switch (adev->asic_type) { + case CHIP_BAFFIN: + if (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_SMG) + baffin_enable_gfx_static_mg_power_gating(adev, + state == AMD_PG_STATE_GATE ? true : false); + else if (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_DMG) + baffin_enable_gfx_dynamic_mg_power_gating(adev, + state == AMD_PG_STATE_GATE ? true : false); + else + baffin_enable_gfx_quick_mg_power_gating(adev, + state == AMD_PG_STATE_GATE ? true : false); + break; + default: + break; + } + return 0; }