Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2194505/?format=api
{ "id": 2194505, "url": "http://patchwork.ozlabs.org/api/patches/2194505/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260209082454.2097628-3-sherry.sun@nxp.com/", "project": { "id": 28, "url": "http://patchwork.ozlabs.org/api/projects/28/?format=api", "name": "Linux PCI development", "link_name": "linux-pci", "list_id": "linux-pci.vger.kernel.org", "list_email": "linux-pci@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260209082454.2097628-3-sherry.sun@nxp.com>", "list_archive_url": null, "date": "2026-02-09T08:24:45", "name": "[V4,02/11] PCI: host-generic: Add common helpers for parsing Root Port properties", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "096901edc5b5270215a0bb94dfd7e10b8d6fb819", "submitter": { "id": 77063, "url": "http://patchwork.ozlabs.org/api/people/77063/?format=api", "name": "Sherry Sun", "email": "sherry.sun@nxp.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260209082454.2097628-3-sherry.sun@nxp.com/mbox/", "series": [ { "id": 491476, "url": "http://patchwork.ozlabs.org/api/series/491476/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=491476", "date": "2026-02-09T08:24:43", "name": "pci-imx6: Add support for parsing the reset property in new Root Port binding", "version": 4, "mbox": "http://patchwork.ozlabs.org/series/491476/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2194505/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2194505/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linux-pci+bounces-46988-incoming=patchwork.ozlabs.org@vger.kernel.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linux-pci@vger.kernel.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=j/G8b9iM;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-46988-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=\"j/G8b9iM\"", "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.130.6", "smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com", "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=nxp.com", "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;" ], "Received": [ "from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4f8d5z0XSpz1xvc\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 09 Feb 2026 19:24:39 +1100 (AEDT)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 547E2300A63A\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 9 Feb 2026 08:24:06 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id C84192FB630;\n\tMon, 9 Feb 2026 08:24:05 +0000 (UTC)", "from MRWPR03CU001.outbound.protection.outlook.com\n (mail-francesouthazon11011006.outbound.protection.outlook.com [40.107.130.6])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 75D3E308F34;\n\tMon, 9 Feb 2026 08:24:05 +0000 (UTC)", "from VI0PR04MB12114.eurprd04.prod.outlook.com\n (2603:10a6:800:315::13) by PA4PR04MB9661.eurprd04.prod.outlook.com\n (2603:10a6:102:273::21) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb\n 2026 08:23:59 +0000", "from VI0PR04MB12114.eurprd04.prod.outlook.com\n ([fe80::feda:fd0e:147f:f994]) by VI0PR04MB12114.eurprd04.prod.outlook.com\n ([fe80::feda:fd0e:147f:f994%5]) with mapi id 15.20.9587.010; Mon, 9 Feb 2026\n 08:23:59 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1770625445; cv=fail;\n b=aWLgOHGONKBEycJVYnT/3ZI7T4V2jS+94tBLI62Fa8k/sOBu6SvS3QPw3mJtD2+ETB3aZzVi3WM/dJ8tzZ0MCA/046mEm9S/AtjOk5TZJzyMikadShOpKMmMx88cQ8DIJPwEPVPMCPDk9h+fNeKr0o/pINbz3GFAzifp3CHiLH4=", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=omQs2WjwEdaAjoGtoVqYlc3YScObSi4ulT1B5a32+1yZQEBnF8wJyzI57HNtPFiqcncxaVqo2sU7dks6N9l6dzS6g/sk7OInMcsstX84ir7dkbNxEcXGOL/T9cEgBl/UuTSDOgTbK/YL2PI78OFsY/pE55hFlFnW/GITIy1xQCkbwRsH90a+Pwh2MiuZKQUFU2g6/LeUn6VWbSy+5gOsxZTiweH1mqsvYfAvF6Tx1a/sPIrj0nMpzn4xXoMLEyg1EUvAgV0dcFQowTVNy85t13WuAn1yMAzcB1mkX/w3aMRX6Ks+cScUx1pE6h/o1SyLpj6CoLprhPJbrgH4kQcKqw==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1770625445; c=relaxed/simple;\n\tbh=Yze9neflQtXyYd+bgppefdW9D522PheDalzgHXyRfxg=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=aNblB0RKGIYSUhj5zW4tQHy6ajlyJKbe+rZEl45Tk9u3CGz5dZmSEqKemvUsvh5UwsB5lI9kpff6fObFgLP7IbrePR9IbCDu+b1laGB9XxwK53+2Ff5DAs4BqdS9FdBbC3DhwGXpmeMBV5I+HC9QdDV7UblBmChJgrBWd7cv4FM=", "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=GznAvISv4pFzGSeu548pViPvbFqorK8VVW/pqvZGJ5k=;\n b=dSkGMh9kwHz2wtP8SZCDd/LrhgoMP48YbU0AwfmsuXArC0AL4QB9X2gbeUx+M+HW/Sw2D0nayTsJQ6YyvyW9iTHV5cvsrLWt1N1n+akvkmoCLYJtlFkWpMuPB7djXrvnPEM4/gzPkHRTFoaAWNGc5oscVWL+uqmQzkOAaACCfoebIMA6f8KwcvWkrXnBBUZ2P/maFhdgANZEXumzGVX1WT6zWf1JmQM5zK/Mj3G8trdjkfsRWl8hV0DcbghblRHCpqAjXpaSHJAf9xsFiB9YBX7D4c2ziRRtVwmjVfI97iL4v7hdbawPQahBH0BtEbtcF9E+VhjHEVj9GBZNYi7ZvA==" ], "ARC-Authentication-Results": [ "i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com;\n spf=pass smtp.mailfrom=nxp.com;\n dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=j/G8b9iM; arc=fail smtp.client-ip=40.107.130.6", "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass\n header.d=nxp.com; arc=none" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=GznAvISv4pFzGSeu548pViPvbFqorK8VVW/pqvZGJ5k=;\n b=j/G8b9iMcZAU8Q2kF8MaihZMOhJEYHHyNwiD+c0Ar3w/h9HtNGvGsaGn4ok85JipMaUxQ+A+QjqVy5xLLOTCb7/0zjudkeyK9A3iof/s2yTMgFKOx5AzxkYKnPMU7/jbFXbK2E8X+w4atJkWugvZx9CS054B6OIzJQpUj8f1ArGc2nQTqJVNWNYUnPYp/iWH9F+q12/vsTIZimNlOEwN1+cxBm9HqpG/k6AmmhWYylMvEXOw6Xoiz525tM8sIN6EprLgo1DE8sIoH99xduN8QfMxkM/3vH6w2oeaPB/Mnck8xl5dj0hfA63Eo2ES19p2liyIb8nHUCvOemSLDng8bA==", "From": "Sherry Sun <sherry.sun@nxp.com>", "To": "hongxing.zhu@nxp.com,\n\tl.stach@pengutronix.de,\n\tFrank.Li@nxp.com,\n\tbhelgaas@google.com,\n\tlpieralisi@kernel.org,\n\tkwilczynski@kernel.org,\n\tmani@kernel.org,\n\trobh@kernel.org,\n\tkrzk+dt@kernel.org,\n\tconor+dt@kernel.org,\n\ts.hauer@pengutronix.de,\n\tfestevam@gmail.com,\n\twill@kernel.org", "Cc": "imx@lists.linux.dev,\n\tkernel@pengutronix.de,\n\tlinux-pci@vger.kernel.org,\n\tlinux-arm-kernel@lists.infradead.org,\n\tdevicetree@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org", "Subject": "[PATCH V4 02/11] PCI: host-generic: Add common helpers for parsing\n Root Port properties", "Date": "Mon, 9 Feb 2026 16:24:45 +0800", "Message-Id": "<20260209082454.2097628-3-sherry.sun@nxp.com>", "X-Mailer": "git-send-email 2.37.1", "In-Reply-To": "<20260209082454.2097628-1-sherry.sun@nxp.com>", "References": "<20260209082454.2097628-1-sherry.sun@nxp.com>", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "SI2PR01CA0039.apcprd01.prod.exchangelabs.com\n (2603:1096:4:193::16) To VI0PR04MB12114.eurprd04.prod.outlook.com\n (2603:10a6:800:315::13)", "Precedence": "bulk", "X-Mailing-List": "linux-pci@vger.kernel.org", "List-Id": "<linux-pci.vger.kernel.org>", "List-Subscribe": "<mailto:linux-pci+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:linux-pci+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "VI0PR04MB12114:EE_|PA4PR04MB9661:EE_", "X-MS-Office365-Filtering-Correlation-Id": "ab300f79-8f3c-4d09-089a-08de67b492ea", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|19092799006|52116014|1800799024|7416014|376014|366016|921020|38350700014;", "X-Microsoft-Antispam-Message-Info": "\n C959ahuIwlKbc/IYhHUssa6xvTDqbjcTchp0mfkpg8QyLzOBaoTbSHa8gWpNW64EE5t3+AtRg+/+hcJ5jJLKTA85YAOeo4DftHtt4vgIT+JYyc6huPRlhmd5UpePA2tVqAzUyKTEQ36mrCTEtAE33L87UAxQX4KIAbaUC1ilKI304Lv1Jf21fweJDQaoIPsnIWLelJAXRtPRxHAnUZvZJUQndgOol+6jhWoYkMY8KX/3Iy2qZWjgsdXXyJAcle/Y0gIhr+ieCVtaTBHfhludF7glan4B00v5QndO0IgqkuBoUf3iLLW4CPnEN1mOxZny2zY6rY0u31+YsL6O9ns4Nj39ofgDKpORPNixfC7By1IiZGP1XzAZIER0/4QF7zZxviZwEJ6HPKvsUEIhUxO3Au2GohkY5VDb6I145ZbwNCWwtDTMKCan8pVPq1Iu1cdgGJEOXxBlxW8F4fgxnlRlX9fXrHqhafafn3kLqFV6kdqWuGiMLtkKFS4A0MTg4u28UfXGX+IqNK0nPuBfr5ZF3tlrPoDXXW0A5JnrYpFc5747IZyvsg3Pn5PoKd0HhFBpfaVVIspJBxqu2c227XmxGVI+jd6w5aY2FjUIy62rnVmk7NYQa4Dv0J79yzwHWB6VEArnHrpPHuMGpVfWIwRZAqAsOEuhDSd3Yy8sBoo6uhgFDDeyb8DuXTO6e4/Ebo7KfRb2OXYia+cS+l3y8EPA61zcezHeNSZGgIS91bmXWDI3sMYS3KQZWeiI+QBVNtjL5cPrg8y0N9jGAVMjCL//duMgenss3ip8zlAOX6XcdqgV9czXV+oJYdm9mkEKk5KKzZ9CPDZONFBv3hpv/PYEx6/zViqPje+za12sFE/ucJUvgNB/1ahsAwdT4aimjYJ/urz1pAgiLwhE1aq5XLmcYfa0+BJTCGApm18pck/+/nJuwM0KqtwoxLrVUbhXMfDOvBpihNv/DJ+pOBn8SjD1vrvz/Fbk2MM8WDV12rqBl7oxLjNurtieZPgT2XkF+D8kquXVnC7vtTMuZhuRJpV/IOZMq63ac2gDe98OzNr4gVXcMRB/zAl49pzNXcWrIGBFE4zNAjghkv5lI2HW+ib5kcG/8PJNQaoh8ofiBVsVhu0usQRZVMYWb8K4K4pZ8NFVZAZT5OEenDDBmzj16qqYur5EZQ0nL6CDgy+G8zrYzOjRzI1GatjB4fLqVfNB72TGF0Lj/5xJ/prAf43hM7DKbNyIpx0HHRKwsO3duPzIjRlQSg151TaPptBx59K0x6rcgpodV1BlTSjy2CweEp5gcxnAOla7DlspZQhM/xxzWVKQefBGLjFH3raHZM5Mw+VEkE8yT+QS9RxNQeVFLmIbMujmM/2R2r0IPjHUAGAd5c63zGKgddVC4o6BSiNMYU/Pf0cHC4FvwOXVM59y5Jkoj90k2xxDhVml4aX8KP3Ec6AhGI0RIKlBrWv6qFYSR7AZvk44E9bUuVCgOpJFovetmI5unliEju+v7iaRje5nJ8Pg+93U3HMaUDFpD6q4ayX9RTBFnVvAnsjfSt4aoM63ZL96f0Cz8fsnh4G/Wfa6sh4NXBqGtBpRB5p3QID5vYHlvzsf8/ph0JWDZz53dFlhLZbedetfDh0h453erdtdg2U=", "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR04MB12114.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(52116014)(1800799024)(7416014)(376014)(366016)(921020)(38350700014);DIR:OUT;SFP:1101;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n 0Dsc5IH1qByyeQFYaYCO15rIWjyAttQJp3Kku99/VM4kN1s1TG7C1NurWSKBEbFoFdLT1br+ww0iRwWZDa5QhNhZYc+CRKVRA/7v3knFb5RSSUbQtXHWSbZDCrJSiWve0hAtPU1wljB7/uTLu5C/NoYG6OlMkfBnN/VhIadmSTDr03mkGU5YIKq3NzlqR8TFAJ0kchjFv7LCId6jQaSARSzQWWNYEog8rNjW3eu/0mKmSsFGC6LmChh0oWfD+NvvbuATVH/Y0HZQCv3Wh8YPcuk31pJSgM3wqNeI710K68UqVIbxMwk6oFceljxXJlpV7uZp9BiLflbmfJk7rGrX/3N25pidvFVDAV4LnjD8AnOkcPH28R4PCfApMOB4SKT90LdT5fn3hcKhqjA8s49HO9Ju/D+lgSluvKElL1gV3af3ewJEWWjCUQRKYXP8WnV3xoApO3j+EI8v/E0ycXViFFqZfhly+qu7imNQ6IXN77BMX/gFALsfRychWY+2e6djhJR4Dfbn2wpM8TENcj7IgcoUEnh60oSU8dD0mG4+/Ftw5SRK1NRAD86yCk9wnB3yif+BSF0bV9y+9ha6ZfWUfKMr4Wls8vSwsghocoO1nOkt4xMg8dOWAEwJcFyVaXfCSlxOTy5MXFArNRaqZplIzGT2c7E0i6AWpeZKQ5NRJs+WwYbtN0n0au0DJuDG7hgmZaoTrH/PDUgG44lcOFAgloIHdQmTw5mZVABLSHgWVpFr+3n0P1P0Tqhf3s99S47kIMz/WGGfZO66hQi6Vyv2GqdVn8JpfJJAVUrmoJOmXF7w0ZMeDAucvPZWaAQQ3vOwy8XKr/VQLLJ/7p7r9bLyaWOyUNQRhGQbnvf0jgP+MqnRbI2HcOZhgeg5EAVD9kI2jb/qX0GVxctaBEkTRxTsSELiSOWowOKI/w4+L53rO+2vwnKJiYvwwLwMk+6OweN7joko+XgodGgoaNPlmOYI0Fx475iqJYfZFiGq4QQ18p0knd5jEvui9uTbf/vpj02x37kqoV6vv3X6HpgzOCjZuXjrAy7r5oAo13JkhOotJOL67iPCCAVRKu2M1tSarJ7fZOSR02pFLPI7+PhiF7OW6C3gNV2hEl1jx0jvVCWYkrn1w574GODNLnK2JU+WGjYdTBn4QYl4aFRM/V9+k8V5kHLXCsXIThcaxj7QNBEj40B1epo2gpi2H4ZBM3GIeCSAe6Oo9taWCQ43OtYvoYs4k2LnV2uyvwWiGoq5s7y0w7pwziucyJvVs4EnTJqKII2jm/iZBavRbuz6aBnIJgJR83ZMRIrjQCjz89YalJoN9nWYAO5KwVc7OCRK1Mrn435JNEzLf8GjEeUXiDnqweVe/FiNvAGnRFXQW+tV9WTKYwAqGLcDQpmGLqk2SP8dTPs+hqCeoZIiVehVhQRR9l0EMbyrLXVF3J0MdaqmS75aFwwMmFdjIs5NYQzD/RJqe9Q3NythuuwSiyis/QXebsIl3oGBi2rA3EfEejqI/g54YJxWM5iF7Pl6J6IfgoYNsKOwXh+RTrXsjDwdGSOI+ja7uDHuhm1C3qS3jBchGRGDE3ZUfe3Ba6FayegyZEkXj8U1mBJj2N/T/aQFEIpLhXJilOtoaBquY4Yp52pZD6Yq3SKl3bnwzKxM6S4WR432hNgTq4Xdly+Y3PX84AHL8wczGBUkyCU7XT4O/cFdtb1AAfigLXPDmjOKJnu26nPBe0S+eYYRnmSg+zAILFNs5SmKhg==", "X-OriginatorOrg": "nxp.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n ab300f79-8f3c-4d09-089a-08de67b492ea", "X-MS-Exchange-CrossTenant-AuthSource": "VI0PR04MB12114.eurprd04.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "09 Feb 2026 08:23:59.0724\n (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": "\n ubxqh1sVuSOzIFbmaJ1qko5OOZAElVa2p4FiM3Xgg78PKhjvOCNy06L1e97+tbMj8HNpKTNRD42akTZg6G123A==", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PA4PR04MB9661" }, "content": "Introduce generic helper functions to parse Root Port device tree nodes\nand extract common properties like reset GPIOs. This allows multiple\nPCI host controller drivers to share the same parsing logic.\n\nDefine struct pci_host_port to hold common Root Port properties and add\npci_host_common_parse_ports() to parse Root Port nodes from device tree,\npci_host_common_delete_ports() to cleanup the port lists.\n\nSigned-off-by: Sherry Sun <sherry.sun@nxp.com>\n---\n drivers/pci/controller/pci-host-common.c | 75 ++++++++++++++++++++++++\n drivers/pci/controller/pci-host-common.h | 17 ++++++\n 2 files changed, 92 insertions(+)", "diff": "diff --git a/drivers/pci/controller/pci-host-common.c b/drivers/pci/controller/pci-host-common.c\nindex c473e7c03bac..287e92df0092 100644\n--- a/drivers/pci/controller/pci-host-common.c\n+++ b/drivers/pci/controller/pci-host-common.c\n@@ -9,6 +9,7 @@\n \n #include <linux/kernel.h>\n #include <linux/module.h>\n+#include <linux/gpio/consumer.h>\n #include <linux/of.h>\n #include <linux/of_address.h>\n #include <linux/of_pci.h>\n@@ -17,6 +18,80 @@\n \n #include \"pci-host-common.h\"\n \n+/**\n+ * pci_host_common_delete_ports - Cleanup function for port list\n+ * @data: Pointer to the port list head\n+ */\n+void pci_host_common_delete_ports(void *data)\n+{\n+\tstruct list_head *ports = data;\n+\tstruct pci_host_port *port, *tmp;\n+\n+\tlist_for_each_entry_safe(port, tmp, ports, list)\n+\t\tlist_del(&port->list);\n+}\n+EXPORT_SYMBOL_GPL(pci_host_common_delete_ports);\n+\n+/**\n+ * pci_host_common_parse_port - Parse a single Root Port node\n+ * @dev: Device pointer\n+ * @node: Device tree node of the Root Port\n+ * @ports: List head to add the parsed port to\n+ *\n+ * Returns: 0 on success, negative error code on failure\n+ */\n+static int pci_host_common_parse_port(struct device *dev,\n+\t\t\t\t struct device_node *node,\n+\t\t\t\t struct list_head *ports)\n+{\n+\tstruct pci_host_port *port;\n+\tstruct gpio_desc *reset;\n+\n+\treset = devm_fwnode_gpiod_get(dev, of_fwnode_handle(node),\n+\t\t\t\t \"reset\", GPIOD_OUT_HIGH, \"PERST#\");\n+\tif (IS_ERR(reset))\n+\t\treturn PTR_ERR(reset);\n+\n+\tport = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);\n+\tif (!port)\n+\t\treturn -ENOMEM;\n+\n+\tport->reset = reset;\n+\tINIT_LIST_HEAD(&port->list);\n+\tlist_add_tail(&port->list, ports);\n+\n+\treturn 0;\n+}\n+\n+/**\n+ * pci_host_common_parse_ports - Parse Root Port nodes from device tree\n+ * @dev: Device pointer\n+ * @ports: List head to store parsed ports\n+ *\n+ * This function iterates through child nodes of the host bridge and parses\n+ * Root Port properties (currently only reset GPIO).\n+ *\n+ * Returns: 0 on success, -ENOENT if no ports found, other negative error codes\n+ * on failure\n+ */\n+int pci_host_common_parse_ports(struct device *dev, struct list_head *ports)\n+{\n+\tint ret = -ENOENT;\n+\n+\tfor_each_available_child_of_node_scoped(dev->of_node, of_port) {\n+\t\tif (!of_node_is_type(of_port, \"pci\"))\n+\t\t\tcontinue;\n+\t\tret = pci_host_common_parse_port(dev, of_port, ports);\n+\t\tif (ret) {\n+\t\t\tpci_host_common_delete_ports(ports);\n+\t\t\treturn ret;\n+\t\t}\n+\t}\n+\n+\treturn ret;\n+}\n+EXPORT_SYMBOL_GPL(pci_host_common_parse_ports);\n+\n static void gen_pci_unmap_cfg(void *ptr)\n {\n \tpci_ecam_free((struct pci_config_window *)ptr);\ndiff --git a/drivers/pci/controller/pci-host-common.h b/drivers/pci/controller/pci-host-common.h\nindex b5075d4bd7eb..2c8df230886f 100644\n--- a/drivers/pci/controller/pci-host-common.h\n+++ b/drivers/pci/controller/pci-host-common.h\n@@ -12,6 +12,23 @@\n \n struct pci_ecam_ops;\n \n+/**\n+ * struct pci_host_port - Generic Root Port properties\n+ * @list: List node for linking multiple ports\n+ * @reset: GPIO descriptor for PERST# signal\n+ *\n+ * This structure contains common properties that can be parsed from\n+ * Root Port device tree nodes.\n+ */\n+struct pci_host_port {\n+\tstruct list_head\tlist;\n+\tstruct gpio_desc\t*reset;\n+};\n+\n+void pci_host_common_delete_ports(void *data);\n+int pci_host_common_parse_ports(struct device *dev,\n+\t\t\t\tstruct list_head *ports);\n+\n int pci_host_common_probe(struct platform_device *pdev);\n int pci_host_common_init(struct platform_device *pdev,\n \t\t\t struct pci_host_bridge *bridge,\n", "prefixes": [ "V4", "02/11" ] }