Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp853564pxb; Wed, 3 Feb 2021 21:29:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJzj0EaiN6kpHL2U7EmvqJSaOg5WevNBIaQ7WbSdYQoKI2Pasy1wQ232Bi1cmtylRKNTxkqa X-Received: by 2002:a17:907:7784:: with SMTP id ky4mr3451545ejc.89.1612416599642; Wed, 03 Feb 2021 21:29:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612416599; cv=none; d=google.com; s=arc-20160816; b=C/faLNnFliloezW075PTNDXHbFQ0Z+xn5oox0Ev5jXBunEoCmEMJGqqZuAzS0GTHdz GU/jvWHJCCik5U1ZeNwIBqLnq6u/psPweVpr97LjC0oA6i3t47lGsNsH1K2Wvq9IRPyF VNICy8XO0KgeMM4MIuuD80Mwu0kVmIUVagYLDzWFByTLFEwoTeCH9fYzq/2pNlpBQuGy rR8mz6eyS/LZuhbk7JST6FeoCe8k4jOLrf0ttmnm/5HhUgyM/ALu8QIyMbQp20BsoGuJ 7Rf0oHDsOSluWHjxqCTyL6/xwGjDrLYRxfMmEOlc7iz/6RUETLXXi/WdO28WY+zZLims fo2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:to:from; bh=pBYzB7fLkx7GrNjxh3sXlINnpi4SVCZUvSBDbFWASFI=; b=RnZ7EFVStGexqgjLREf/TgbSvQrICO7ov6rPLHpSYHUgKj4e7wbZOVcsocYDHb6DG/ ibIRS6RtMa7b3nC/x1vd8pWdrScdTbL0AOF4gg8lASSlTcKhus5vWJ+vC8Pvd8laI09H VbLGOLLFtn7bIc0ouUgSzDo972VC8vdXIWWTi/NUDNplaJdQ9vQLPI8Z97tPQPZJUGUs trHHAGXE32Ya5G+wH975giZccMidx75dhsPi8DNiemCEqSmMZ4GT9pQ7hgyMRpLk1g6H fP8/F9wqRA+r0fUEAcAQ0blCLsOlKeLM+hZn2S8EACl1rf6WBTAROuXB7RPdrSGB8BqW wT2w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m13si2578657edb.227.2021.02.03.21.29.34; Wed, 03 Feb 2021 21:29:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229806AbhBDFTu (ORCPT + 99 others); Thu, 4 Feb 2021 00:19:50 -0500 Received: from youngberry.canonical.com ([91.189.89.112]:35631 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229601AbhBDFTu (ORCPT ); Thu, 4 Feb 2021 00:19:50 -0500 Received: from [222.129.39.10] (helo=localhost.localdomain) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1l7X2k-0005uP-ES; Thu, 04 Feb 2021 05:19:03 +0000 From: Aaron Ma To: aaron.ma@canonical.com, gregkh@linuxfoundation.org, mathias.nyman@linux.intel.com, stern@rowland.harvard.edu, lee.jones@linaro.org, peter.chen@nxp.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] xhci-pci: Set AMD Renoir USB controller to D3 when shutdown Date: Thu, 4 Feb 2021 13:18:50 +0800 Message-Id: <20210204051850.64857-1-aaron.ma@canonical.com> X-Mailer: git-send-email 2.30.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On AMD Renoir/Cezanne platforms, when set "Always on USB" to "On" in BIOS, USB controller will consume more power than 0.03w. Set it to D3cold when shutdown, S5 power consumption will be 0.03w lower. The USB can charge other devices as before. USB controller works fine after power on and reboot. Signed-off-by: Aaron Ma --- drivers/usb/host/xhci-pci.c | 8 ++++++++ drivers/usb/host/xhci.h | 1 + 2 files changed, 9 insertions(+) diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index 84da8406d5b4..a31be1ba927f 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -62,6 +62,7 @@ #define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba #define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb #define PCI_DEVICE_ID_AMD_PROMONTORYA_1 0x43bc +#define PCI_DEVICE_ID_AMD_RENOIR_USB31 0x1639 #define PCI_DEVICE_ID_ASMEDIA_1042_XHCI 0x1042 #define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI 0x1142 #define PCI_DEVICE_ID_ASMEDIA_1142_XHCI 0x1242 @@ -171,6 +172,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) if (pdev->vendor == PCI_VENDOR_ID_AMD) xhci->quirks |= XHCI_TRUST_TX_LENGTH; + if (pdev->vendor == PCI_VENDOR_ID_AMD && + pdev->device == PCI_DEVICE_ID_AMD_RENOIR_USB31) + xhci->quirks |= XHCI_SHUTDOWN_D3COLD; + if ((pdev->vendor == PCI_VENDOR_ID_AMD) && ((pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4) || (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_3) || @@ -594,6 +599,9 @@ static void xhci_pci_shutdown(struct usb_hcd *hcd) /* Yet another workaround for spurious wakeups at shutdown with HSW */ if (xhci->quirks & XHCI_SPURIOUS_WAKEUP) pci_set_power_state(pdev, PCI_D3hot); + + if (xhci->quirks & XHCI_SHUTDOWN_D3COLD) + pci_set_power_state(pdev, PCI_D3cold); } #endif /* CONFIG_PM */ diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 25e57bc9c3cc..0684193da4bd 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1883,6 +1883,7 @@ struct xhci_hcd { #define XHCI_SKIP_PHY_INIT BIT_ULL(37) #define XHCI_DISABLE_SPARSE BIT_ULL(38) #define XHCI_SG_TRB_CACHE_SIZE_QUIRK BIT_ULL(39) +#define XHCI_SHUTDOWN_D3COLD BIT_ULL(40) unsigned int num_active_eps; unsigned int limit_active_eps; -- 2.30.0