Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp326453imu; Wed, 7 Nov 2018 18:20:32 -0800 (PST) X-Google-Smtp-Source: AJdET5eAwj1JYdKVR6oBX/TfpvvIlqOUV058aDWeUe4UPBsTjiUAn9Kum6axJLTFMHQ9XBXWOt+6 X-Received: by 2002:a62:6181:: with SMTP id v123-v6mr2781969pfb.117.1541643632031; Wed, 07 Nov 2018 18:20:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541643632; cv=none; d=google.com; s=arc-20160816; b=W3hD6AQsiOHjdnE7k+YBqQeqBNzJWWDM/Oa1/D4i18FohlYZMUVBpQQEMGUtv7RJuH 68pLa0WhgdMbKZRzOJ4vxiAsOD1QCekGxEThuI+ycQlVa56m7+2/L/JopYvrzsqv8/Jq YFiexAW2+Mvk1BBlsp1PMMUo2YHsBMKNFYt0HILZvEFLXT8nwFsngTPxZ7/RK5kK78NJ zAwnmyj2NcIfsvPYL2FG9BT8+7CNlnrf5XHwPmJfkYBbSW6P+ecFzy8meZQ7M5iFxgGz ziPe79W0TrRgVRG964F3iSv7FO5tF6g7fRzixqkkv0bDsZ1o6omgC+C6UJQcrwe97u/e CZNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:date:cc:to:from:subject :message-id; bh=4WUPnKXyLzFuS5kde/FZuIWGbYkKTsGBSXwXO+sbtCI=; b=GLHfKRdX3svaUL8w2tmWQVk1b/QwyOjYVg19RbRvdi9aPWjYrSKTOQZJAgtXUET4QA monBhkYyrg/6rKPGfDjK0sdthAUzhXYV5YxEUpDv6dxEM/cDsAtGHSf1toua5DXLQ3iL ybx7pKqGpRNPLvG97RQeH98KEIDvzpC6JXeYcx4C0MlaFGsv8fpn2NbV2z9LlK9GbRrJ bEgqTiJ6bMhSaqb2wcRbYRubgZPu5vS+Vs/V4Wv708N9aAQBK7ix/+jkjKt8gN1xbS4i Y2m+Xnc19ehonduqvItz0dc3qau5oE7+k4fsetA7g+09YmZJZjLPxL6m0Gma9ppPPvph PHLw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 33-v6si2734152plk.407.2018.11.07.18.20.16; Wed, 07 Nov 2018 18:20:32 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728622AbeKHLwr (ORCPT + 99 others); Thu, 8 Nov 2018 06:52:47 -0500 Received: from gate.crashing.org ([63.228.1.57]:59003 "EHLO gate.crashing.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726684AbeKHLwr (ORCPT ); Thu, 8 Nov 2018 06:52:47 -0500 Received: from localhost (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.14.1) with ESMTP id wA82JH75005044; Wed, 7 Nov 2018 20:19:18 -0600 Message-ID: <3454d08ef5a656288c57624a68ba448cd3b468bd.camel@kernel.crashing.org> Subject: Re: radeon vs radeonfb Mobility quirks (Thinkpad X32) From: Benjamin Herrenschmidt To: Eric Wong Cc: David Airlie , Bartlomiej Zolnierkiewicz , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, Alex Deucher , Christian =?ISO-8859-1?Q?K=F6nig?= , "David (ChunMing) Zhou" Date: Thu, 08 Nov 2018 13:19:17 +1100 In-Reply-To: <20181108000335.a7usqftcmxvu7ywk@untitled> References: <20181104042328.jzavn47y2wloprbs@untitled> <365d8b24f1c6a28c32998924a95b6a2a74655526.camel@kernel.crashing.org> <20181108000335.a7usqftcmxvu7ywk@untitled> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.30.1 (3.30.1-1.fc29) Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 2018-11-08 at 00:03 +0000, Eric Wong wrote: > Benjamin Herrenschmidt wrote: > > There's a whole pile of power management stuff for ancient laptops that > > never quite made it from radeonfb to the radeon DRM driver... sadly it > > also prevents sleep on old PowerBooks but I haven't had many complaints > > so... > > Thanks for the confirmation that stuff is missing from the DRM driver. > > > The code for D2 and D3 on those old things is reasonably self > > contained, it shouldn't be that hard to move it over I suppose. > > I started working on the following (dirty) patch for my X32, > but hasn't made a difference with just PCI_D2: Yes, as you noticed below, you need the rest of the stuff. If you stick to D2 and avoid the Mac "D3 cold" stuff, it's easier. You also need to look at some of the dynamic clock stuff. Cheers, Ben. > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c > index 59c8a6647ff2..acc587b18ad2 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -1548,6 +1548,23 @@ void radeon_device_fini(struct radeon_device *rdev) > radeon_doorbell_fini(rdev); > } > > +/* XXX copy of radeonfb_whack_power_state */ > +static void radeon_whack_power_state(struct pci_dev *pdev, pci_power_t state) > +{ > + u16 pwr_cmd; > + > + for (;;) { > + pci_read_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, > + &pwr_cmd); > + if (pwr_cmd & state) > + break; > + pwr_cmd = (pwr_cmd & ~PCI_PM_CTRL_STATE_MASK) | state; > + pci_write_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, > + pwr_cmd); > + msleep(500); > + } > + pdev->current_state = state; > +} > > /* > * Suspend & resume. > @@ -1596,6 +1613,7 @@ int radeon_suspend_kms(struct drm_device *dev, bool suspend, > > if (radeon_crtc->cursor_bo) { > struct radeon_bo *robj = gem_to_radeon_bo(radeon_crtc->cursor_bo); > + > r = radeon_bo_reserve(robj, false); > if (r == 0) { > radeon_bo_unpin(robj); > @@ -1647,7 +1665,13 @@ int radeon_suspend_kms(struct drm_device *dev, bool suspend, > } else if (suspend) { > /* Shut down the device */ > pci_disable_device(dev->pdev); > - pci_set_power_state(dev->pdev, PCI_D3hot); > + > + if ("X32") { > + radeon_whack_power_state(dev->pdev, PCI_D2); > + __pci_complete_power_transition(dev->pdev, PCI_D2); > + } else { > + pci_set_power_state(dev->pdev, PCI_D3hot); > + } > } > > if (fbcon) { > > > I suppose some of the mobility stuff from > drivers/video/fbdev/aty/radeon_pm.c is necessary, but I haven't > figured it out for the DRM driver. Not sure when/if I'll have > time to figure it out, or if I'll stick to the radeonfb driver > for now. > > /* Prepare mobility chips for suspend. > */ > if (rinfo->is_mobility) { > /* Program V2CLK */ > radeon_pm_program_v2clk(rinfo); > > /* Disable IO PADs */ > radeon_pm_disable_iopad(rinfo); > > /* Set low current */ > radeon_pm_low_current(rinfo); > > /* Prepare chip for power management */ > radeon_pm_setup_for_suspend(rinfo);