From nobody Thu Sep 11 19:22:17 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1BBD7C001B0 for ; Mon, 7 Aug 2023 14:19:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233365AbjHGOTH (ORCPT ); Mon, 7 Aug 2023 10:19:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232715AbjHGOTD (ORCPT ); Mon, 7 Aug 2023 10:19:03 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2061.outbound.protection.outlook.com [40.107.6.61]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43AED10CF; Mon, 7 Aug 2023 07:19:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FbgR9ldgYj08IEGldO3+xArGuNSthVul/TPg1zPXC65KOHnofsQ20ENpqYrnq3WtZz2uVq3OUQt/o13oTMCwMl6tdqFL+JNUDfw+yawDBenT9CQFDbXxX1auxcHqVqyXFXHzUV7cl/Ac1H0pzAeCZHdfMkBi2ah9Fu5tuOx98m5cjWTfOhuJpvX0GQ544oe5+LFp8YuIK3WtI/Owaz0z1fWDzUO30Hh7mEEZpAWeNeO6NEMEG9E2NA+cos3cWTB3Yq8go/cGpqD4+OVYGRgaMmVlkZl4ZGWNF1M8wPw+JAr8FJ+PdCZ02PWtoOLJBA5o1zCoJgS9IKlEbvP+V2Ulnw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kjyxhbW06JhrkrTCJL7QM3CGDyh+FD/nRHJUcFll8aA=; b=gg8pCLl3igVprQvIWQjw0e8jShWYT8XKIh/FinGiE3nPYMdeVEh7EeI84xqIV4AbmpqcoxsZ8SJmkrKkJfNHkMAPMj+88ozUL+bz4BE1ktJbcha97oPxoZi0WzpHiaXvdvUExa1zssAB1R+iLCrpyg0XcxHAfU3dMF6/773axrTyZTi9TyJkrEpCkUrhVPk0NS+r1yx8H0+U7mxMkGU15ykyMl4Ukr0LUczChr03nL53vNbfAWeVBAw1Pq80Lw1Nk6T+dRHtx6m4VmQxgfNXk/t2bsG/xaxxGjjtEulITo3kXgaPhcEVpVqtQ0GpgH/fo9Sr8c96yw0t9GYdvAXuNA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kjyxhbW06JhrkrTCJL7QM3CGDyh+FD/nRHJUcFll8aA=; b=nu7XeUbKuOEbuiA6xkc6vxWVp3A2W3OSylhoAMVis9X487kFqryvMWsYKcldvhyM6qUkZTk77k70Yt1gid438PGcq06lEU6lvNLSH2y6PXSff0Tg8dOGyk9Jrl+jJiPOIJDzCxOaFRwYpVjb7f9x8xrCcCkp6YP5m01AJ3TIHWA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by AS5PR04MB9798.eurprd04.prod.outlook.com (2603:10a6:20b:654::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.25; Mon, 7 Aug 2023 14:18:59 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::d0d5:3604:98da:20b1]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::d0d5:3604:98da:20b1%7]) with mapi id 15.20.6652.026; Mon, 7 Aug 2023 14:18:59 +0000 From: Frank Li To: helgaas@kernel.org Cc: Frank.li@nxp.com, bhelgaas@google.com, devicetree@vger.kernel.org, gustavo.pimentel@synopsys.com, imx@lists.linux.dev, kw@linux.com, leoyang.li@nxp.com, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, lpieralisi@kernel.org, mani@kernel.org, manivannan.sadhasivam@linaro.org, minghuan.lian@nxp.com, mingkai.hu@nxp.com, robh+dt@kernel.org, roy.zang@nxp.com, shawnguo@kernel.org, zhiqiang.hou@nxp.com Subject: [PATCH v10 1/3] PCI: Add macro PCIE_PME_TO_L2_TIMEOUT_US Date: Mon, 7 Aug 2023 10:18:31 -0400 Message-Id: <20230807141833.564479-2-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230807141833.564479-1-Frank.Li@nxp.com> References: <20230807141833.564479-1-Frank.Li@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR02CA0057.namprd02.prod.outlook.com (2603:10b6:a03:54::34) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|AS5PR04MB9798:EE_ X-MS-Office365-Filtering-Correlation-Id: 6d5b36bf-815a-498b-d3b7-08db97513e22 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: frmvgWTf0114w5DjahHnhx9NFxjI5BLzsVv36bX1bmch+QPGRb6UT+U5GyEcR8tRQZ5qV6nFqPeyhkmZb5R41Qxa54sczlYl85hACOvC4EgPsGo/Lf5cZFgJP1nY6sCNhZelBRfkCdEnYqDHpzl1eAlnxznhhg46yfjOP7tsJ1yd0RIt2x2DwKZTKnTJLhZTqAkF8S6mYqS7qdxL8YTqwSqYLygzPjTRosudty6fSJ45hO9L7TbP07k/G1UhgCCiscRdamuMyc1nf4+vquLFwE6imRNt3n2gxlsm/q+xgd0e1b75OOb87UOvruyZ52HJWdjtXpDV8e9nuir1bJo7MFuBfyrVSqucYt5xtkhMHllYpM5vcZ/yHyV4vdk2cthj5hmz5U/Et6Mju50aZ7eUKGPuLt1N/XJrewrpHU5lev3DcJO8dwnKcoAgUYPtOe75knl0cejOCKF51PFkUSQ0XpAvSn+aMuvo4lZdlnSd7pDojF4WO8Kv2Lw/JuE1bduxCMPmb0E/6jl/942wMEon9GqNzrtZKCG964oufSzlewcb694TKJ6YK/IhDUs4ekTvy9vw0TDOL8erc709i41noYHF7tRv26evPsdo1UzeGiX+Tg7C9gz9mtmhlo9DmVPb X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(396003)(136003)(39860400002)(366004)(376002)(451199021)(1800799003)(186006)(6512007)(26005)(6506007)(1076003)(36756003)(38350700002)(38100700002)(5660300002)(7416002)(86362001)(4744005)(4326008)(2906002)(6916009)(66556008)(66476007)(41300700001)(66946007)(8676002)(316002)(8936002)(6666004)(52116002)(478600001)(2616005)(6486002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3jQGPx0/Scx5vdA5wjgOjXA/ws/QUE2FF2h7u7iGx0uzFIH7MEeMDqfW1cFZ?= =?us-ascii?Q?xfGGRC4PhkyQD0iUM8LRIJ5gDSZnXI+fFcZZJPg3D+QUCptw1+ZhLwo9h4qL?= =?us-ascii?Q?luJkxgc8UcMQaMxwhNRjquPE1Zu1BopPc0tgHYSD//y8U1oz3t+XAASyszR5?= =?us-ascii?Q?+9d2RMLEG++uxj0QPcQ2vyRtvGzYvctyGAw1F3+oJWQOf7i92siToosgUwBj?= =?us-ascii?Q?cv1TqG0EziAidd1hMg7bJBM/QQsAmZFsTiqyODJ6WEiWURPvP3tNRuqxQKig?= =?us-ascii?Q?8J17aSfTr+99S6CPtxjaDTBcxkeKg2KT5RwrUgb1hHhAMJu1r5xFMizb772a?= =?us-ascii?Q?vQGLjwEDgJG4NXzRIUc0ebQ53LslW9JKToVXjdhrVZdn8x8B2ttQmL1Qhd7V?= =?us-ascii?Q?tYIOIhBHIhTEjS7d69z3RC0CMuJrr/kPudUGTwq1vXMGxK6Y4TFIcYA4HM2Z?= =?us-ascii?Q?qZQL+lXjZMuPn4tOuFyel+xb/rF3FZZe36jPWAwqN5ymizQwb/i2BT5AfNdk?= =?us-ascii?Q?C+VKdwPN599gmekQb1jYLFV9EUXwknD1XX87i+JaYa3xakix57ds89iwpP3o?= =?us-ascii?Q?kvuB9Gny53LSZeCZAadNFhkZN2Vn0C8PxtDZMRBzDmX8kTDK0U1+zfQUBo1F?= =?us-ascii?Q?LtgvJEQag8saUE3TWI+KHjCrXVrGsDQ9TS0ymuhqoZydpKZRAFCVKsFQWo52?= =?us-ascii?Q?PAogPIE/xHNfWx9YVA+swQMEVUpfyAOYGaaWl61ggW6v+awPiRkFKbHHWRdh?= =?us-ascii?Q?Bg6xtYr9PyN/4mw8h9iY3WH6D3NO+DdUndpU+9K/xrNpp7YjgSrDe7RZgF7L?= =?us-ascii?Q?es89e6SJ9ap62xPFtWqY2Ru4QBLh5QcPVVwSwyTNyLSiDMQuuCAr5KQWvvC8?= =?us-ascii?Q?n8Hmhm2A2Zn86udrSVFBaAhYAnhmPUSfehMKOU7BYVqRo5zERQPO2M+Yvx+t?= =?us-ascii?Q?+qJ76gVOV/xoE1x2vMzKnrmhhOeoXrit8DpLfRZrQcOOsY5SOXGVfwLsmG1+?= =?us-ascii?Q?mKLG3rayHb2goUOfT0VU7tzjxeWd3Mmu+DsJFt0LBV7ITFDxkXc08NLG/Fed?= =?us-ascii?Q?lUj2sZ+3aHjBUbydum59P9kOkhb6looCGCRUk6u//Ymtj+050pD1636PJjVk?= =?us-ascii?Q?fnuGoWLmi0o4EfLXABpSeJqHgl4TDhSQCAHVYTUhLCLDxPiODUf2ewiVmAXS?= =?us-ascii?Q?8917q8ku1TI93VzIArbSP53HS+BDHSJ2ekJvG3ArJ2N6lRc6gfIlkES1uRFb?= =?us-ascii?Q?llXy1gs+zrKPMyHkOy04kG4BpJWp31BtNgOGa8aBgNjJNTRGcrmx8B6Fv0Ol?= =?us-ascii?Q?8/BomDuDDgWjH5bY3dbtAO0o0uE9wuE9hmcgAZHb9RvtRebUlcE4NnTSQA3y?= =?us-ascii?Q?iX7UywSP4WaCQQyLoe02x7FLp6BkUqNszIGT/SxYczR31QoIg4vlDU3B5x9D?= =?us-ascii?Q?4pv9l3U3f30xo85WB3gVUuNLbhGQEng1ssGJvJN9Syxb9BIrE0kraAYtpx8U?= =?us-ascii?Q?WOGY4fO1ZkqKHpE2C7cUbs5SPmmmJiyRpuOUFayVtyYEwJKVv51e8LvETqpA?= =?us-ascii?Q?G13caMtmkHNuAMajTEk=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d5b36bf-815a-498b-d3b7-08db97513e22 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Aug 2023 14:18:59.7218 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: I3MtXG52eyKwS3QhmKoP+FUwH05SqeAjIjzLbekIorgv0s3p0M9yB1/01oswlJbD9GXVKxe2qm9yU2NwO52jvw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS5PR04MB9798 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Introduce the PCIE_PME_TO_L2_TIMEOUT_US macro to facilitate checking the L2 ready timeout in the PCI subsystem. Acked-by: Manivannan Sadhasivam Signed-off-by: Frank Li --- drivers/pci/pci.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index a4c3974340576..da8156663c825 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -13,6 +13,12 @@ =20 #define PCIE_LINK_RETRAIN_TIMEOUT_MS 1000 =20 +/* + * PCIe r6.0, sec 5.3.3.2.1 + * Recommends 1ms to 10ms timeout to check L2 ready. + */ +#define PCIE_PME_TO_L2_TIMEOUT_US 10000 + extern const unsigned char pcie_link_speed[]; extern bool pci_early_dump; =20 --=20 2.34.1 From nobody Thu Sep 11 19:22:17 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id ED07DC00528 for ; Mon, 7 Aug 2023 14:19:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233453AbjHGOTR (ORCPT ); Mon, 7 Aug 2023 10:19:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233087AbjHGOTI (ORCPT ); Mon, 7 Aug 2023 10:19:08 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2066.outbound.protection.outlook.com [40.107.6.66]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2988C10F0; Mon, 7 Aug 2023 07:19:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iqMxQhuqwllmWSXsHZYXlG+lI1n/NKP9utZ3jZ0rr/cC5JIiUzdmHcUlqOqGygr5B5VQ3KwChEj7uwpoiyaLWXnP7ze/OinjQSgBpOMJ71rGrsWCmbY9ckgnqUBNkdL8vQnNuZy0qXj9L5Bh+NmIi5NT5vVvG25CszckIeWQiouYnUV0BPg/bXyVo01ze9U9Vvb+sEQWLJUYvOeNyuKlVMfUBl7eg1t+qfkjyQSvs+//ZdaRjRACPUNmCaaa2ZKfaB9UOHaq1gFbHjlX2mNaPxmhKUv5v/Q5TAFTFXiQsSshR+xUqMSAR2Qy+y17dxUs0nMiCKKOksSaQPwJ+zLFWQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RuZYozsszV04m9+f6PLw4EoD1EIVUX6sjonI35T2M80=; b=Lgls4P+1I3PMSt3Wv8bwTEF7n3JVPXk9cKSpSYvYM5OukMurljyVVb2jGtjmMCDuhuw/71prkhvYsc1REQFJPWLLBJKHG3kGTgvqvV9/OGRkWLhnOzPR27wIYhTVpM3WQXGnyO+t9zLC7F6h1zX/JfaEuJe+3uLyBkwHEOC+ldIhbechf7urNKVLAeBfhZz7cEK+f/y+YKdAQ2Y6LEOU5bhXRN8euVN1c18KeGq6dAuyQElgxh3U42PLpHNZjzDKnMPnemCZ4O3ZpQ1LBqgOuwEd0WEcnO0RXaxT6IzP3JsCzvKsPofahirYGjEOhLhoMPu1OWzUyXXeeLiwYppy1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RuZYozsszV04m9+f6PLw4EoD1EIVUX6sjonI35T2M80=; b=pe+h2odG3BIF1A63qQIW4A+9GHP01ZVFKgM/sMRhmARmfXwWt814cfehj+l+bvU+PQk2dP6V0OrLYway7zqEiCdTltGbeQMCICix02ZEhZCKJEc0fpNAPiJsON9QNzU6TE9OTNJ0OiBDZx6NUH+3SEMNoafC0rjZeSyjmJFgSOw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by AS5PR04MB9798.eurprd04.prod.outlook.com (2603:10a6:20b:654::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.25; Mon, 7 Aug 2023 14:19:04 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::d0d5:3604:98da:20b1]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::d0d5:3604:98da:20b1%7]) with mapi id 15.20.6652.026; Mon, 7 Aug 2023 14:19:04 +0000 From: Frank Li To: helgaas@kernel.org Cc: Frank.li@nxp.com, bhelgaas@google.com, devicetree@vger.kernel.org, gustavo.pimentel@synopsys.com, imx@lists.linux.dev, kw@linux.com, leoyang.li@nxp.com, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, lpieralisi@kernel.org, mani@kernel.org, manivannan.sadhasivam@linaro.org, minghuan.lian@nxp.com, mingkai.hu@nxp.com, robh+dt@kernel.org, roy.zang@nxp.com, shawnguo@kernel.org, zhiqiang.hou@nxp.com Subject: [PATCH v10 2/3] PCI: dwc: Implement general suspend/resume functionality for L2/L3 transitions Date: Mon, 7 Aug 2023 10:18:32 -0400 Message-Id: <20230807141833.564479-3-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230807141833.564479-1-Frank.Li@nxp.com> References: <20230807141833.564479-1-Frank.Li@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR02CA0057.namprd02.prod.outlook.com (2603:10b6:a03:54::34) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|AS5PR04MB9798:EE_ X-MS-Office365-Filtering-Correlation-Id: dca6eb67-2556-4cd9-3d87-08db97514146 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KfuQKC+nxnEgEq3K6Ivxz7yORx3xKGTVANl7oM5EWYaEDKGb8y+O4oj2jPL2IKEzdq0mslxgSZHf04nTxJ64tnkUv9442ftiO9+WNs3P/IJcyhrCPeY8xpPvqW5KE2rndl8mg8rvepeWTi81RdUrTsu3ZIDTvh4tKINtlKVdFun0HkvmU5OWNEGY1BxL4JQEcrtFu/y6fjjub9nptIn8On8ISGNaCDYu1zJ5Eul16nFdIZuqKC2cEeuq66q9imeHa5IhGjN3Ma/vT5EkIM4cacuLjiFdzSxqOjhwbz4uFZuO16EKcTmhMF95pnovL0BxaPyC0a03+RmoY8bmYG9RFmIX2dJ6SbZsZZTXsYtppHsnqs7+geAhQki/8+y7yrRJbv1A3kG4uLaRx9X2nUfrf2Olom9WQdBLPzItusEs9//r77ITJrua2L9MvC1zuKYJA3J8bFk7RJ3zEeAHokj7hvvTzYwDt5VdMgOdQFmwX9OIQ3Rp8Y3XjS5YAFagFn7FhINaI2N2/OWBLAwd4D3VvybDZxklsh/vlHXZp6CAPxe2TshTaVVxYiU3TJRyHduEP7uqkngmUJC5gREvGTd5i8jr4F08M4fphZIuFpJmqKzmLF9u63I+t66u84G4imaS X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(396003)(136003)(39860400002)(366004)(376002)(451199021)(1800799003)(186006)(6512007)(26005)(6506007)(1076003)(36756003)(38350700002)(38100700002)(5660300002)(7416002)(86362001)(15650500001)(4326008)(2906002)(6916009)(66556008)(66476007)(41300700001)(66946007)(8676002)(316002)(8936002)(6666004)(52116002)(478600001)(2616005)(6486002)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cUvjwTXkueofUC0zBpFrw4a/dSwt2rdQZ2cCUHD+0sAtR1Nmq/Wido/ANVu1?= =?us-ascii?Q?ut/JLTynbIUzsszRnaMTMvDWicEyr3ZstOZFVuOE+tCMLygdJBESKu47T146?= =?us-ascii?Q?sqlgmXgIkcnxNJw3BoHJOOyEBotLe+1n+b94eJbuX/7A7F2jlIO+BkWbtFLx?= =?us-ascii?Q?VuLsRfDWk5O5Ag6Q/OtXBgSIs2twVpCoVQrzb7hXUyIyJLoxqufFzx42yIcG?= =?us-ascii?Q?4lJfJRYwSyIIm4szUnH04pFCyRKghdjZBmLfONJkYsFS1aaNusPY900LOFue?= =?us-ascii?Q?rigz+Y9R5eKkjP0KU3GpOgfBoDT0blTeK5BFaW6EqZY4cb3TxnfH959yAKuU?= =?us-ascii?Q?4Ple5m16q80K4fLr/KkxxOS6BLrKb8bchHf8ha1G8mM0Y126t8u2MkZUWmK/?= =?us-ascii?Q?FKrcrj9Vyhp7MX7cd9FoA8bgttpPcHas3+J6Gpe2fA2eGzMj2EusFNKG9zi4?= =?us-ascii?Q?VlZCXI/hVMyUZDKdUyTkrKjRfiidNsaIziSRIDFgb//Tb0rt7yzPBu8I4+BZ?= =?us-ascii?Q?xHMZxv5u9F6epOIODOmdE1+zPfp9lC0glcaFR7etPfmvg5kxGkOjMQixNYC8?= =?us-ascii?Q?DfhOD9kmc/DkZKzvkLaTZP1otNlL2ZerWfYxGIzCPb7jVkGcpW6b3D59ZJQU?= =?us-ascii?Q?t6c3QL9Gsk1+OQYS8WF5zLS2UOAhWErsd3z0GGMu8knpobvgM2a4cQ5ZZq9x?= =?us-ascii?Q?yRoc3lAlYwMLV5QolfWZ3iLouSpj3+LF7jXIN1iXpgLqErcOF9G5HBOrZiGL?= =?us-ascii?Q?//02pSou1dXaGdaDzM3RwmhTM3JbYXUAA7E7/Myh9Q12jAbHunRSilRG83AH?= =?us-ascii?Q?ZVYys4KHM3SrZ0+XgoZmB3rnFditdUgdCL1mTwTxqKVitRR93hgasBq5KODV?= =?us-ascii?Q?c0N7La2BgxnHtiP6zyGcnMeqWqs2//WsYinJ5hgNfL1zb9TsjaCpOCltn73S?= =?us-ascii?Q?ttqXpjO8sq1kbbYoBZjpj2VCxKQ57vHmUPWsiHARNL1j7uKTDEADUkUGaiBv?= =?us-ascii?Q?XIqSQBGmD337LhQz2NfD3pqjisQUTQ+IVEQd/3zvUo3MCoDQhx6Qrzn/h+/v?= =?us-ascii?Q?1ebYQgRjtV/iJrl6WOfDVnYytK9mdHN1xSmYuq2tWbKVenQMY9CqtbEu/hmB?= =?us-ascii?Q?2Kqx+QXF1dhIeWfim9QOJZXjdvrIvDbE5L6rPVpm9zYsUjMylIycYd0yPyIY?= =?us-ascii?Q?uPDXTQfCTzxilRsliUJhQB5Bq14mM0G+fpgstuSyQxP9Ugbxq1OYd3ZmFaDR?= =?us-ascii?Q?6WQFuTKusJFbPfh3w5iwIjsdTPWT4zRlc6FZ6EBrSSryiqrRsUzV9rKzBWTd?= =?us-ascii?Q?5yuDSKaSrhFvXjDNT0alggPmxN3sfRoiNZaxb9h5eXi/Wryq6a6qRkoWwAnD?= =?us-ascii?Q?XBsR+6yvxeej0/0le38Xifgf0KWbFEsWPl8m9Fh0OZyqiVMB+JiVpP4IzMkq?= =?us-ascii?Q?8U4hh/GtC7wH5quW2/3hrnNGpM+QD7xGvZnRWzQX0R1oiowbSyd0aYmZ6VU4?= =?us-ascii?Q?cpOkLoEWvpO5+RP+II0zfe3gGiDXe+HbkSlWScZTHQoDCXMFpBowYod7rxHY?= =?us-ascii?Q?XK9gyNPDGTifHORo5BI=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dca6eb67-2556-4cd9-3d87-08db97514146 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Aug 2023 14:19:04.7869 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Dxly7dSKueQ3yVjR+vh9HYN+Kl4NFT10A1XMN+NOfpC+caHxSr+Jg1Z3l+YKYSDHB1xoyUZ9OPOuhGLeNQWhJQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS5PR04MB9798 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Introduce helper function dw_pcie_get_ltssm() to retrieve SMLH_LTSS_STATE. Add callback .pme_turn_off and .exit_from_l2 for platform specific PME handling. Add common dw_pcie_suspend(resume)_noirq() API to avoid duplicated code in dwc pci host controller platform driver. Typical L2 entry workflow/dw_pcie_suspend_noirq() 1. Transmit PME turn off signal to PCI devices and wait for PME_To_Ack. 2. Await link entering L2_IDLE state. Typical L2 exit workflow/dw_pcie_resume_noirq() 1. Issue exit from L2 command. 2. Reinitialize PCI host. 3. Wait for link to become active. Acked-by: Manivannan Sadhasivam Signed-off-by: Frank Li --- .../pci/controller/dwc/pcie-designware-host.c | 76 +++++++++++++++++++ drivers/pci/controller/dwc/pcie-designware.h | 29 +++++++ 2 files changed, 105 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pc= i/controller/dwc/pcie-designware-host.c index 9952057c8819c..cdbff11a7d00e 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c @@ -8,6 +8,7 @@ * Author: Jingoo Han */ =20 +#include #include #include #include @@ -16,6 +17,7 @@ #include #include =20 +#include "../../pci.h" #include "pcie-designware.h" =20 static struct pci_ops dw_pcie_ops; @@ -807,3 +809,77 @@ int dw_pcie_setup_rc(struct dw_pcie_rp *pp) return 0; } EXPORT_SYMBOL_GPL(dw_pcie_setup_rc); + +int dw_pcie_suspend_noirq(struct dw_pcie *pci) +{ + u8 offset =3D dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); + u32 val; + int ret; + + /* + * If L1SS is supported, then do not put the link into L2 as some + * devices such as NVMe expect low resume latency. + */ + if (dw_pcie_readw_dbi(pci, offset + PCI_EXP_LNKCTL) & PCI_EXP_LNKCTL_ASPM= _L1) + return 0; + + if (dw_pcie_get_ltssm(pci) <=3D DW_PCIE_LTSSM_DETECT_ACT) + return 0; + + if (!pci->pp.ops->pme_turn_off) + return 0; + + pci->pp.ops->pme_turn_off(&pci->pp); + + ret =3D read_poll_timeout(dw_pcie_get_ltssm, val, val =3D=3D DW_PCIE_LTSS= M_L2_IDLE, + PCIE_PME_TO_L2_TIMEOUT_US/10, + PCIE_PME_TO_L2_TIMEOUT_US, false, pci); + if (ret) { + dev_err(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val); + return ret; + } + + if (pci->pp.ops->host_deinit) + pci->pp.ops->host_deinit(&pci->pp); + + pci->suspended =3D true; + + return ret; +} +EXPORT_SYMBOL_GPL(dw_pcie_suspend_noirq); + +int dw_pcie_resume_noirq(struct dw_pcie *pci) +{ + int ret; + + if (!pci->suspended) + return 0; + + pci->suspended =3D false; + + if (!pci->pp.ops->exit_from_l2) + return 0; + + pci->pp.ops->exit_from_l2(&pci->pp); + + if (pci->pp.ops->host_init) { + ret =3D pci->pp.ops->host_init(&pci->pp); + if (ret) { + dev_err(pci->dev, "Host init failed: %d\n", ret); + return ret; + } + } + + dw_pcie_setup_rc(&pci->pp); + + ret =3D dw_pcie_start_link(pci); + if (ret) + return ret; + + ret =3D dw_pcie_wait_for_link(pci); + if (ret) + return ret; + + return ret; +} +EXPORT_SYMBOL_GPL(dw_pcie_resume_noirq); diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index 79713ce075cc1..629bccfa92ddd 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -288,10 +288,22 @@ enum dw_pcie_core_rst { DW_PCIE_NUM_CORE_RSTS }; =20 +enum dw_pcie_ltssm { + /* Need to align with PCIE_PORT_DEBUG0 bits 0:5 */ + DW_PCIE_LTSSM_DETECT_QUIET =3D 0x0, + DW_PCIE_LTSSM_DETECT_ACT =3D 0x1, + DW_PCIE_LTSSM_L0 =3D 0x11, + DW_PCIE_LTSSM_L2_IDLE =3D 0x15, + + DW_PCIE_LTSSM_UNKNOWN =3D 0xFFFFFFFF, +}; + struct dw_pcie_host_ops { int (*host_init)(struct dw_pcie_rp *pp); void (*host_deinit)(struct dw_pcie_rp *pp); int (*msi_host_init)(struct dw_pcie_rp *pp); + void (*pme_turn_off)(struct dw_pcie_rp *pp); + void (*exit_from_l2)(struct dw_pcie_rp *pp); }; =20 struct dw_pcie_rp { @@ -364,6 +376,7 @@ struct dw_pcie_ops { void (*write_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg, size_t size, u32 val); int (*link_up)(struct dw_pcie *pcie); + enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *pcie); int (*start_link)(struct dw_pcie *pcie); void (*stop_link)(struct dw_pcie *pcie); }; @@ -393,6 +406,7 @@ struct dw_pcie { struct reset_control_bulk_data app_rsts[DW_PCIE_NUM_APP_RSTS]; struct reset_control_bulk_data core_rsts[DW_PCIE_NUM_CORE_RSTS]; struct gpio_desc *pe_rst; + bool suspended; }; =20 #define to_dw_pcie_from_pp(port) container_of((port), struct dw_pcie, pp) @@ -430,6 +444,9 @@ void dw_pcie_iatu_detect(struct dw_pcie *pci); int dw_pcie_edma_detect(struct dw_pcie *pci); void dw_pcie_edma_remove(struct dw_pcie *pci); =20 +int dw_pcie_suspend_noirq(struct dw_pcie *pci); +int dw_pcie_resume_noirq(struct dw_pcie *pci); + static inline void dw_pcie_writel_dbi(struct dw_pcie *pci, u32 reg, u32 va= l) { dw_pcie_write_dbi(pci, reg, 0x4, val); @@ -501,6 +518,18 @@ static inline void dw_pcie_stop_link(struct dw_pcie *p= ci) pci->ops->stop_link(pci); } =20 +static inline enum dw_pcie_ltssm dw_pcie_get_ltssm(struct dw_pcie *pci) +{ + u32 val; + + if (pci->ops && pci->ops->get_ltssm) + return pci->ops->get_ltssm(pci); + + val =3D dw_pcie_readl_dbi(pci, PCIE_PORT_DEBUG0); + + return (enum dw_pcie_ltssm)FIELD_GET(PORT_LOGIC_LTSSM_STATE_MASK, val); +} + #ifdef CONFIG_PCIE_DW_HOST irqreturn_t dw_handle_msi_irq(struct dw_pcie_rp *pp); int dw_pcie_setup_rc(struct dw_pcie_rp *pp); --=20 2.34.1 From nobody Thu Sep 11 19:22:17 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C099BC00528 for ; Mon, 7 Aug 2023 14:19:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233584AbjHGOTV (ORCPT ); Mon, 7 Aug 2023 10:19:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233189AbjHGOTO (ORCPT ); Mon, 7 Aug 2023 10:19:14 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2060.outbound.protection.outlook.com [40.107.6.60]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C49A172A; Mon, 7 Aug 2023 07:19:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GkIO3adiHqWwZim3D4cNcUxtlrcvPA6/AzCbpIUgb5VydLlkK/RvoiSS9f7iP0pVyOceJDb6B1zAtFRjILkIxPJgq58xaT2kK0JWQMmaqpQKgO9Pl4OxJ+ixWWCgZMFPwxJ/kknBZDk+Hp7op8eBMWDt9xDCxgREcvR47eY61smj1KKx++UeyMSobXDl19U1aQxm1z6TPBGO99Dt3xBJIER3NtH57mCXnSfbgoSMVnIu9Gpqcv/Yu1rMeqMZ6NCJAnSehMDHGUsshsPaPFdm6fmP2WLb9RjG8hmxAe7i8tJzHez6QA4m9EWYVJA3ke46OdQZbCWB/ExrTDaiyFuzGw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=cemv0o+A4B4UVs6IecKdz+P02Zgm4E8Y/XAvJfrdSkY=; b=XjD5P08SrTI/1IRmEjINIeuvl2z7CtC1yVYxXuDNJOr5Qa51i1wJPkD5Aee9aExZlgq3ORwc4yigBbRC+fFb4S2j7X8Lu/0Cbfw+RhvjUaVrUvDM+Z4+okEc5Tv217RHmfxCgiEEldUP/nHUdNgWZrrVtQqqqAoxxlotpp/w2gQEIvLarmprRKEqrjKg77DYImcSLlqrkVEsHnQkB/F2Fz1nYOyAKmW8238iIuk0xJiIGqZMCx5ruGUXqp9ygIqeJM/AiYHGhsCDSU8DsIcYkl33Vm89XGyvHPKRxe8H1NSLqCIipjj3crznRxUcQtfsWOMP2UC0k33Wr3v6PmQP/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cemv0o+A4B4UVs6IecKdz+P02Zgm4E8Y/XAvJfrdSkY=; b=n/ca41OH7iYGhXcRE+mqGcxsB2xgbU+yNV9W09Z30Bcq9cd1f38NvfL1ppjVUpJK8vtoiOrThSj3JCiLUc5kHXyc0EBoPghlD9bN1JrZypNISn53QbdcDueA2yhE5jRPiViVqzZDHIZgNrxrOgL7Tc/tND/PFXUy7KpwWXRIwUc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by AS5PR04MB9798.eurprd04.prod.outlook.com (2603:10a6:20b:654::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.25; Mon, 7 Aug 2023 14:19:09 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::d0d5:3604:98da:20b1]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::d0d5:3604:98da:20b1%7]) with mapi id 15.20.6652.026; Mon, 7 Aug 2023 14:19:09 +0000 From: Frank Li To: helgaas@kernel.org Cc: Frank.li@nxp.com, bhelgaas@google.com, devicetree@vger.kernel.org, gustavo.pimentel@synopsys.com, imx@lists.linux.dev, kw@linux.com, leoyang.li@nxp.com, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, lpieralisi@kernel.org, mani@kernel.org, manivannan.sadhasivam@linaro.org, minghuan.lian@nxp.com, mingkai.hu@nxp.com, robh+dt@kernel.org, roy.zang@nxp.com, shawnguo@kernel.org, zhiqiang.hou@nxp.com Subject: [PATCH v10 3/3] PCI: layerscape: Add power management support for ls1028a Date: Mon, 7 Aug 2023 10:18:33 -0400 Message-Id: <20230807141833.564479-4-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230807141833.564479-1-Frank.Li@nxp.com> References: <20230807141833.564479-1-Frank.Li@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR02CA0057.namprd02.prod.outlook.com (2603:10b6:a03:54::34) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|AS5PR04MB9798:EE_ X-MS-Office365-Filtering-Correlation-Id: bde52dd6-7061-46bb-4714-08db97514448 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: izSon6rldi0ZhVZzc/3WSFFvY4ewGHHxflSmwobfrIMZNLg+bbXBqnNhEkjOexGre/M58i8+j5huwvwrl+uoVyyKRan2VnCq6rUAf1L0MVz9Us9qsfGzGApuVw8MKHxWTPUBxc0s/q0Q/4BB5HPstHwuw0gwuU0VUUNoaOQCiGjyAHicntt71Mtf/V7UBcn023fyjG6Qtdcsp/RMsaKhF3qlq6z+PR2IPSFSY6qn/Lg2Eys9Hyvtu9l6xVApfatloxxjNi8ZGc5ZDyLMxfzrcQJLxf4UkpAJZnbaPVA+fceqUlrQa9ERpvv4Usa+bBj4w49eRI8wEiJo8UJCaBPJcb6VsGWqw8jh7juNFHgKNRzMrVY6FqgT9BOD0J/hweYCGYVpNPzyAhHvIAmX1I94ewnwyRfjl18E+pi/gIGQEHoNsAYC+/WlJ2ZCeKeDu+cNFVauYODu8dS5DeAnwWhNgYdSwV/qKCXeCGwZSAF2l5v2bV8d/ct5Eu61WyYIT32Jv6HW6fUhXqcuQETs1wYcZpsAoa6cMZp14AAyBb1prp4Tkh9ja+arkmBbGQ39XuDdNQtOduM66iUCzr7cTgELtAGa3uD+oTn4MBy14Pqi3QRuTQMfJB1l/Hxxk5FEM8DJ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(396003)(136003)(39860400002)(366004)(376002)(451199021)(1800799003)(186006)(6512007)(26005)(6506007)(1076003)(36756003)(38350700002)(38100700002)(5660300002)(7416002)(86362001)(4326008)(2906002)(6916009)(66556008)(66476007)(41300700001)(66946007)(8676002)(316002)(8936002)(6666004)(52116002)(478600001)(2616005)(6486002)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VEjXSkziGkEi+1Mpw8hag4Zj+sW+wxTJLI9xR0cuwNIg3Pv6BkwyOtg0zbvV?= =?us-ascii?Q?IvJ6UC7KMgeGxlCvq8vGVz+jf1WX0kTNKRAzSgK+FgYi+TUUUmRNaEWxyIu/?= =?us-ascii?Q?STAPHC7+svZ4rHDttm28aedquiKtEUz77CEw/pv45uh9zCltpHUK8NXMvlwv?= =?us-ascii?Q?KmkQVfmjvT0EvmQ75Wdj9NkCdXomnqJFct4t1PyUQpMPkNKYeHB2Q5TY3g5p?= =?us-ascii?Q?jkWhj43tloSIbH3hBii9F3yfQP1+Fy1Diu1c6ximtq53EI+cXXleyNaEW+GM?= =?us-ascii?Q?SiwDAI3Cvqn+LgaT9QNdGAaR+FvT0QQlTyJGkQQelJVtYSXQqW4wN7CrEM9W?= =?us-ascii?Q?VVLAvAv3caPYJyU0lOnx5PCHl/0gAAXjPThGfFz+/Lie56fE9PvFnOxX5qyZ?= =?us-ascii?Q?8IBqRxdEWOMsoaud9498VpZAVmE5aMnFXxeV612G/6ZfVo7S4PgYNnZfjOMy?= =?us-ascii?Q?rn54Wtlik9bKVAr7c7yeH+fCwupi5vB+m1mMcFOuT8kDcoVZHrFHVUOBjNBY?= =?us-ascii?Q?cJW1MXuLlTMYhwyNdWDxR4xO+hG1bDe/t6Dq9ODBPARpAyCwqfu6kSBbZSiV?= =?us-ascii?Q?5XpoUdPFUKJNcRPMPZ5B/pYxkVAWN/7XYc6b6U/29gd8CMEEJyFNdvCRVyqC?= =?us-ascii?Q?7yXaiMJXkFNlMwmwgoalJmr29coV0VBbizA2mmarotxPa1IKlc3TQDyJlq+n?= =?us-ascii?Q?dUUdPIOJKB0d4GLyQt/wogOgQ+38fpUm0u4zdY08ddJcY4hjxejp7a8MTCRg?= =?us-ascii?Q?helW4n7IYAZJ7JEOh9rnvczkulW4WpTk0h0kawJv97tpoKQYhU35K8AidMqF?= =?us-ascii?Q?kGIUR3KHkCnFHXErUCID339Fp1wr1v75tj5T1nv7zidAuVQygwmlrLffXEyr?= =?us-ascii?Q?Tz1tBZWRIjarXXsDBaMP1V2NDDzZbq3ZwfQA4sZAXyrdi4i7S7YMp4wphyjE?= =?us-ascii?Q?OYlmlsw5r9yK8IUrzRsaffNST2UfWkLMiJ+/CnCWWGIio1aYUQR0DzL4rBko?= =?us-ascii?Q?rSkrdas90sXBfpT9urjMnXsNaAcddU7ZYogumNPJIbsHtW/NpAwzJSt75PZV?= =?us-ascii?Q?i3H2jBAsjAMX5nJ4jN+J7keirpFxvLZpRxVbXhMNvdQUNTpDPAaRgKI/rRIk?= =?us-ascii?Q?ycThDW7PzMIUf1AE4jYkL/q50QAR9CS7ZNU/nhdFvF2/seTwd1GmwtXo6eT8?= =?us-ascii?Q?jjYk7+xifs8Hx5HvKJ56hNV5IypnM0xDAE2sTf+k8nAFeIH7hoFY14ycnUsW?= =?us-ascii?Q?f6qeQqT6cvso0LPxuO5mwSVG2jsB+v2blrvWvPG8K/4sAmsRZErSJpRA/ECY?= =?us-ascii?Q?ltx1ZygbK8ALDT0h+eB6KjL/Zpj2NVQXEp4VhvVbAh9H6UPlW9CZ8xL9Vyg0?= =?us-ascii?Q?G/9Y6TuEGRN4cq1cObuKYY0ys8bSMSUBm57r0SP+/B060R37DFptgQmOOvul?= =?us-ascii?Q?kaZzvU8B6c7m6WJCmQTKxZS0EW4TDWA0wNRg0EDCll29HZNgkyi18fA7gPj+?= =?us-ascii?Q?kYETxHzyMNekZEMveX5Ny6SpLL1ge22hlzC3Hn+jtP/mxwv4x4H4jRoYOh09?= =?us-ascii?Q?XzsSNqbNRdj+k6hYp0g=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: bde52dd6-7061-46bb-4714-08db97514448 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Aug 2023 14:19:09.8310 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: b/IJw+PtKGz9bLGb19uhz4GGSoAvl/l7UjIFwfopNa2nOYcWTuZJ+XWijqr7rJD/h2+ANOorl1p/hO7RPKRnVA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS5PR04MB9798 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Hou Zhiqiang Add PME_Turn_off/PME_TO_Ack handshake sequence for ls1028a platform. Call common dwc dw_pcie_suspend(resume)_noirq() function when system enter/exit suspend state. Acked-by: Manivannan Sadhasivam Signed-off-by: Hou Zhiqiang Signed-off-by: Frank Li --- drivers/pci/controller/dwc/pci-layerscape.c | 130 ++++++++++++++++++-- 1 file changed, 121 insertions(+), 9 deletions(-) diff --git a/drivers/pci/controller/dwc/pci-layerscape.c b/drivers/pci/cont= roller/dwc/pci-layerscape.c index ed5fb492fe084..7586aece769b2 100644 --- a/drivers/pci/controller/dwc/pci-layerscape.c +++ b/drivers/pci/controller/dwc/pci-layerscape.c @@ -8,9 +8,11 @@ * Author: Minghuan Lian */ =20 +#include #include #include #include +#include #include #include #include @@ -20,6 +22,7 @@ #include #include =20 +#include "../../pci.h" #include "pcie-designware.h" =20 /* PEX Internal Configuration Registers */ @@ -27,12 +30,26 @@ #define PCIE_ABSERR 0x8d0 /* Bridge Slave Error Response Register */ #define PCIE_ABSERR_SETTING 0x9401 /* Forward error of non-posted request = */ =20 +/* PF Message Command Register */ +#define LS_PCIE_PF_MCR 0x2c +#define PF_MCR_PTOMR BIT(0) +#define PF_MCR_EXL2S BIT(1) + #define PCIE_IATU_NUM 6 =20 +struct ls_pcie_drvdata { + const u32 pf_off; + bool pm_support; +}; + struct ls_pcie { struct dw_pcie *pci; + const struct ls_pcie_drvdata *drvdata; + void __iomem *pf_base; + bool big_endian; }; =20 +#define ls_pcie_pf_readl_addr(addr) ls_pcie_pf_readl(pcie, addr) #define to_ls_pcie(x) dev_get_drvdata((x)->dev) =20 static bool ls_pcie_is_bridge(struct ls_pcie *pcie) @@ -73,6 +90,60 @@ static void ls_pcie_fix_error_response(struct ls_pcie *p= cie) iowrite32(PCIE_ABSERR_SETTING, pci->dbi_base + PCIE_ABSERR); } =20 +static u32 ls_pcie_pf_readl(struct ls_pcie *pcie, u32 off) +{ + if (pcie->big_endian) + return ioread32be(pcie->pf_base + off); + + return ioread32(pcie->pf_base + off); +} + +static void ls_pcie_pf_writel(struct ls_pcie *pcie, u32 off, u32 val) +{ + if (pcie->big_endian) + iowrite32be(val, pcie->pf_base + off); + else + iowrite32(val, pcie->pf_base + off); +} + +static void ls_pcie_send_turnoff_msg(struct dw_pcie_rp *pp) +{ + struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); + struct ls_pcie *pcie =3D to_ls_pcie(pci); + u32 val; + int ret; + + val =3D ls_pcie_pf_readl(pcie, LS_PCIE_PF_MCR); + val |=3D PF_MCR_PTOMR; + ls_pcie_pf_writel(pcie, LS_PCIE_PF_MCR, val); + + ret =3D readx_poll_timeout(ls_pcie_pf_readl_addr, LS_PCIE_PF_MCR, + val, !(val & PF_MCR_PTOMR), + PCIE_PME_TO_L2_TIMEOUT_US/10, + PCIE_PME_TO_L2_TIMEOUT_US); + if (ret) + dev_err(pcie->pci->dev, "poll turn off message timeout\n"); +} + +static void ls_pcie_exit_from_l2(struct dw_pcie_rp *pp) +{ + struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); + struct ls_pcie *pcie =3D to_ls_pcie(pci); + u32 val; + int ret; + + val =3D ls_pcie_pf_readl(pcie, LS_PCIE_PF_MCR); + val |=3D PF_MCR_EXL2S; + ls_pcie_pf_writel(pcie, LS_PCIE_PF_MCR, val); + + ret =3D readx_poll_timeout(ls_pcie_pf_readl_addr, LS_PCIE_PF_MCR, + val, !(val & PF_MCR_EXL2S), + PCIE_PME_TO_L2_TIMEOUT_US/10, + PCIE_PME_TO_L2_TIMEOUT_US); + if (ret) + dev_err(pcie->pci->dev, "poll exit L2 state timeout\n"); +} + static int ls_pcie_host_init(struct dw_pcie_rp *pp) { struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); @@ -91,18 +162,28 @@ static int ls_pcie_host_init(struct dw_pcie_rp *pp) =20 static const struct dw_pcie_host_ops ls_pcie_host_ops =3D { .host_init =3D ls_pcie_host_init, + .pme_turn_off =3D ls_pcie_send_turnoff_msg, + .exit_from_l2 =3D ls_pcie_exit_from_l2, +}; + +static const struct ls_pcie_drvdata ls1021a_drvdata =3D { +}; + +static const struct ls_pcie_drvdata layerscape_drvdata =3D { + .pf_off =3D 0xc0000, + .pm_support =3D true, }; =20 static const struct of_device_id ls_pcie_of_match[] =3D { - { .compatible =3D "fsl,ls1012a-pcie", }, - { .compatible =3D "fsl,ls1021a-pcie", }, - { .compatible =3D "fsl,ls1028a-pcie", }, - { .compatible =3D "fsl,ls1043a-pcie", }, - { .compatible =3D "fsl,ls1046a-pcie", }, - { .compatible =3D "fsl,ls2080a-pcie", }, - { .compatible =3D "fsl,ls2085a-pcie", }, - { .compatible =3D "fsl,ls2088a-pcie", }, - { .compatible =3D "fsl,ls1088a-pcie", }, + { .compatible =3D "fsl,ls1012a-pcie", .data =3D &layerscape_drvdata }, + { .compatible =3D "fsl,ls1021a-pcie", .data =3D &ls1021a_drvdata }, + { .compatible =3D "fsl,ls1028a-pcie", .data =3D &layerscape_drvdata }, + { .compatible =3D "fsl,ls1043a-pcie", .data =3D &ls1021a_drvdata }, + { .compatible =3D "fsl,ls1046a-pcie", .data =3D &layerscape_drvdata }, + { .compatible =3D "fsl,ls2080a-pcie", .data =3D &layerscape_drvdata }, + { .compatible =3D "fsl,ls2085a-pcie", .data =3D &layerscape_drvdata }, + { .compatible =3D "fsl,ls2088a-pcie", .data =3D &layerscape_drvdata }, + { .compatible =3D "fsl,ls1088a-pcie", .data =3D &layerscape_drvdata }, { }, }; =20 @@ -121,6 +202,8 @@ static int ls_pcie_probe(struct platform_device *pdev) if (!pci) return -ENOMEM; =20 + pcie->drvdata =3D of_device_get_match_data(dev); + pci->dev =3D dev; pci->pp.ops =3D &ls_pcie_host_ops; =20 @@ -131,6 +214,10 @@ static int ls_pcie_probe(struct platform_device *pdev) if (IS_ERR(pci->dbi_base)) return PTR_ERR(pci->dbi_base); =20 + pcie->big_endian =3D of_property_read_bool(dev->of_node, "big-endian"); + + pcie->pf_base =3D pci->dbi_base + pcie->drvdata->pf_off; + if (!ls_pcie_is_bridge(pcie)) return -ENODEV; =20 @@ -139,12 +226,37 @@ static int ls_pcie_probe(struct platform_device *pdev) return dw_pcie_host_init(&pci->pp); } =20 +static int ls_pcie_suspend_noirq(struct device *dev) +{ + struct ls_pcie *pcie =3D dev_get_drvdata(dev); + + if (!pcie->drvdata->pm_support) + return 0; + + return dw_pcie_suspend_noirq(pcie->pci); +} + +static int ls_pcie_resume_noirq(struct device *dev) +{ + struct ls_pcie *pcie =3D dev_get_drvdata(dev); + + if (!pcie->drvdata->pm_support) + return 0; + + return dw_pcie_resume_noirq(pcie->pci); +} + +static const struct dev_pm_ops ls_pcie_pm_ops =3D { + NOIRQ_SYSTEM_SLEEP_PM_OPS(ls_pcie_suspend_noirq, ls_pcie_resume_noirq) +}; + static struct platform_driver ls_pcie_driver =3D { .probe =3D ls_pcie_probe, .driver =3D { .name =3D "layerscape-pcie", .of_match_table =3D ls_pcie_of_match, .suppress_bind_attrs =3D true, + .pm =3D &ls_pcie_pm_ops, }, }; builtin_platform_driver(ls_pcie_driver); --=20 2.34.1