From patchwork Fri Sep 16 05:05:13 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gavin Shan X-Patchwork-Id: 670686 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3sb5zZ2TSdz9rxl for ; Fri, 16 Sep 2016 17:11:06 +1000 (AEST) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3sb5zZ1kQ3zDsZn for ; Fri, 16 Sep 2016 17:11:06 +1000 (AEST) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3sb3BR4RzpzDsZQ for ; Fri, 16 Sep 2016 15:05:19 +1000 (AEST) Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id u8G4wWYG047635 for ; Fri, 16 Sep 2016 01:05:17 -0400 Received: from e23smtp06.au.ibm.com (e23smtp06.au.ibm.com [202.81.31.148]) by mx0a-001b2d01.pphosted.com with ESMTP id 25fu1f0w72-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Fri, 16 Sep 2016 01:05:17 -0400 Received: from localhost by e23smtp06.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 16 Sep 2016 15:05:15 +1000 Received: from d23dlp03.au.ibm.com (202.81.31.214) by e23smtp06.au.ibm.com (202.81.31.212) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 16 Sep 2016 15:05:13 +1000 Received: from d23relay07.au.ibm.com (d23relay07.au.ibm.com [9.190.26.37]) by d23dlp03.au.ibm.com (Postfix) with ESMTP id DA96E3578053 for ; Fri, 16 Sep 2016 15:05:12 +1000 (EST) Received: from d23av05.au.ibm.com (d23av05.au.ibm.com [9.190.234.119]) by d23relay07.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u8G55CNM17104970 for ; Fri, 16 Sep 2016 15:05:12 +1000 Received: from d23av05.au.ibm.com (localhost [127.0.0.1]) by d23av05.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u8G55CPj006334 for ; Fri, 16 Sep 2016 15:05:12 +1000 Received: from ozlabs.au.ibm.com (ozlabs.au.ibm.com [9.192.253.14]) by d23av05.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id u8G55CjA006326; Fri, 16 Sep 2016 15:05:12 +1000 Received: from bran.ozlabs.ibm.com (haven.au.ibm.com [9.192.254.114]) by ozlabs.au.ibm.com (Postfix) with ESMTP id 7E24BA013E; Fri, 16 Sep 2016 15:05:12 +1000 (AEST) Received: from gwshan (shangw.ozlabs.ibm.com [10.61.2.199]) by bran.ozlabs.ibm.com (Postfix) with ESMTP id 790FDE3C16; Fri, 16 Sep 2016 15:05:12 +1000 (AEST) Received: by gwshan (Postfix, from userid 1000) id EAF5D941E19; Fri, 16 Sep 2016 15:05:32 +1000 (AEST) From: Gavin Shan To: skiboot@lists.ozlabs.org Date: Fri, 16 Sep 2016 15:05:13 +1000 X-Mailer: git-send-email 2.1.0 In-Reply-To: <1474002323-31380-1-git-send-email-gwshan@linux.vnet.ibm.com> References: <1474002323-31380-1-git-send-email-gwshan@linux.vnet.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16091605-0040-0000-0000-000001E1303D X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16091605-0041-0000-0000-00000A8001C7 Message-Id: <1474002323-31380-7-git-send-email-gwshan@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2016-09-16_03:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609020000 definitions=main-1609160064 Subject: [Skiboot] [PATCH 06/16] core/pci: Fix PCIe slot power state X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" The power state of PCIe slot should be retrieved from the PCIe Slot Control register (offset: +0x18), instead of having the fixed state (power-off) wrongly. Otherwise, we have mismatched states (off in software, on in hardware) after powering off the slot. This retrieves the PCIe slot power state from PCIe Slot Control Register if the power control is supported. Otherwise, the initial power state of the PCIe slot doesn't matter and it's set to on. Signed-off-by: Gavin Shan --- core/pcie-slot.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/pcie-slot.c b/core/pcie-slot.c index 62933a4..6854ef1 100644 --- a/core/pcie-slot.c +++ b/core/pcie-slot.c @@ -404,6 +404,7 @@ struct pci_slot *pcie_slot_create(struct phb *phb, struct pci_device *pd) { struct pci_slot *slot; uint32_t ecap; + uint16_t slot_ctl; /* Allocate PCI slot */ slot = pci_slot_alloc(phb, pd); @@ -422,8 +423,20 @@ struct pci_slot *pcie_slot_create(struct phb *phb, struct pci_device *pd) if ((slot->slot_cap & PCICAP_EXP_SLOTCAP_HPLUG_SURP) && (slot->slot_cap & PCICAP_EXP_SLOTCAP_HPLUG_CAP)) slot->pluggable = 1; - if (slot->slot_cap & PCICAP_EXP_SLOTCAP_PWCTRL) + + if (slot->slot_cap & PCICAP_EXP_SLOTCAP_PWCTRL) { slot->power_ctl = 1; + + /* The power is on by default */ + slot->power_state = PCI_SLOT_POWER_ON; + if (pd && ecap) { + pci_cfg_read16(phb, pd->bdfn, + ecap + PCICAP_EXP_SLOTCTL, &slot_ctl); + if (slot_ctl & PCICAP_EXP_SLOTCTL_PWRCTLR) + slot->power_state = PCI_SLOT_POWER_OFF; + } + } + if (slot->slot_cap & PCICAP_EXP_SLOTCAP_PWRI) slot->power_led_ctl = PCI_SLOT_PWR_LED_CTL_KERNEL; if (slot->slot_cap & PCICAP_EXP_SLOTCAP_ATTNI)