From patchwork Wed Sep 13 21:49:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brad Larson X-Patchwork-Id: 722283 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35A7AB667 for ; Wed, 13 Sep 2023 21:50:28 +0000 (UTC) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2066.outbound.protection.outlook.com [40.107.244.66]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B82BE1739; Wed, 13 Sep 2023 14:50:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BMKPOUHVyEo5+hwlCvrix6gMnvRVS3eDef+3xmtrkUt92mQkuwhwCDsi1OLs/OFR7dFtVIDXlCwWUDXiY+eJ3cakHALVlZdTvPmuPbSm5CPbFh/m23KH+MCPoD5iXwtAP/+cynkQkzkkPCXQWhUaBcacAIjMs5eglP4USyMklikn41V0UnI8W6nlRiozUOEZBSKyjd0391e3yRQZkLhKE5aVxrTOFbHyaOfOT0JIRIUEH07iyedwXTf4zNNo4dxZ5QThlOwPaE4yGZy896ER2QSm/DMVZP917+O9OvLjdujDJ9w/bU2lVST1D1MIOzcEHPpM8CxjJaOHWufOeanNgw== 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=KIULXGIP/9zE9qKKh15P7DwPq8RDJ2/MG8LkZS1UI14=; b=DwoBz3UbxSlDwiHhtpZrF6c1DB5/UnCTPMrxeudok4QPUsnHcldZNcfHsHIPQQfTAgTVSpdwwX/Kr0rH3uJ2MA29XsEEBJdcKg0O+6I9r2KvERMmCPuDqF1fIkc9GJEo6IoqlJxrpZf74fDR8qDi0H+3lXJuYN+Nbggjm9IdUJoWCmXMHTUV2z9vLYzteIDny4B6uXOQ9uSwHrmu9h63LuALuhXHnoX1eHX6XhldB9m+6nJdcwNLaAfyDhZ58ZQQ8HAbyEFqDwHVqx+qk5+izO+uKRUc+4dZTAR6TJ+EQ8mS3Q5C8SZpWXeIpvYo1E/buX3N/30/Wart21RqPF+Tew== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.infradead.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KIULXGIP/9zE9qKKh15P7DwPq8RDJ2/MG8LkZS1UI14=; b=YZFRMUT6hDMRJmWoRacGQi+M77kk8cmy6yr4/8njEjebknfBr5pCavSEwpvwCkNyryIMoZlbVV6zilcNB5Wj2/h5fnVMUt8uNgiHec2Uc3uGHFERhgLAjI86DJ4qswd4NMSmFQ+RpwUbc6DjitpGrvQUqw9QqcDYWoWzjBonhvw= Received: from DS7PR05CA0108.namprd05.prod.outlook.com (2603:10b6:8:56::27) by PH7PR12MB5997.namprd12.prod.outlook.com (2603:10b6:510:1d9::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.30; Wed, 13 Sep 2023 21:50:23 +0000 Received: from DS2PEPF0000343A.namprd02.prod.outlook.com (2603:10b6:8:56:cafe::57) by DS7PR05CA0108.outlook.office365.com (2603:10b6:8:56::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.19 via Frontend Transport; Wed, 13 Sep 2023 21:50:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by DS2PEPF0000343A.mail.protection.outlook.com (10.167.18.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6792.19 via Frontend Transport; Wed, 13 Sep 2023 21:50:23 +0000 Received: from platform-dev1.pensando.io (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Wed, 13 Sep 2023 16:50:19 -0500 From: Brad Larson To: CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v16 2/6] dt-bindings: soc: amd: amd,pensando-elba-ctrl: Add Pensando SoC Controller Date: Wed, 13 Sep 2023 14:49:40 -0700 Message-ID: <20230913214944.59804-3-blarson@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230913214944.59804-1-blarson@amd.com> References: <20230913214944.59804-1-blarson@amd.com> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PEPF0000343A:EE_|PH7PR12MB5997:EE_ X-MS-Office365-Filtering-Correlation-Id: 326fcdd3-d01c-459a-b190-08dbb4a36eac X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QvedGxVF5eoCdkctpZQjAqnlbCEjv1wYmB8O7bVBXGuDUOiai3qGlS2QaEq+gf7tU6elf0TMeLPBpIxyoMfExZFa/KamiLsD9DfTBYPllQE5Rb0dX86wBQP2xckOnaHXPkBck5piEuB3SvDHxwBaBEtl1FpFVX+1ea16stYp5uqe9jb7LfwIlAAC0v3trK/r1GshpZGPNCTvqt0NJUEVKccchzebyTK6r/BJ1IQ5k08kHuPOzRc04MGvZ/5OXFK6i+Ep+PpQNJ7V+0yr7h2vwxf7t+ob8czVAq3ykFN/0pp4ZTVlKAFFBAjU2Hr2SAZ/oqAGGei8nFLnVuG57SgaJl8SQwAVzrMxmOh1Y3L+XqVzjthaBbeaJ3V9ZNxWyBo5UhqNA8bqhP7Nzc9p81iT5MiSUC3XMMQPnDaiBVeC85SYsxFsDsw7fO7AyRZEXE3VILxnqmOKV/1X1IAl2lEgOIpSoYdx2DSyr8+g6WeVOBvBg9mcVxG4MyHb2YKRrKTtfbrmRgya2I0yFIikDhfjQWkSo4/6hF3IgXgTIW2Qe2+YK/N0p7gYsCMLpcqD194kwkW5/bKNUtJ4QdPqSj3HP/E/LCrOtksz9faxsC4ryqQ1r4JyFJ6+MET0y7XJELeWdHUDhcOdt6E3zO/8OZRJb6vV5Vql9SEkQrYWa+4G7EGhZ6GL0mpTG6QqOft9KP1OCO0e3jMyF/Dnbw6Gw9/21W7ndGIVxjwttOlBpJJIEia6ecOa92j85gBC30pmSV8q7KIv6f//JZWhu13Q7Gg2wRTXW9rIkCGqmMRfByqE0hc= X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230031)(4636009)(396003)(136003)(39860400002)(376002)(346002)(1800799009)(82310400011)(451199024)(186009)(36840700001)(46966006)(40470700004)(316002)(966005)(6666004)(54906003)(426003)(26005)(83380400001)(7406005)(70206006)(6916009)(16526019)(2616005)(8936002)(4326008)(70586007)(2906002)(41300700001)(5660300002)(8676002)(1076003)(7416002)(36756003)(336012)(40460700003)(478600001)(40480700001)(36860700001)(82740400003)(47076005)(356005)(81166007)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2023 21:50:23.1756 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 326fcdd3-d01c-459a-b190-08dbb4a36eac X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS2PEPF0000343A.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB5997 Support the AMD Pensando Elba SoC Controller which is a SPI connected device providing a miscellaneous set of essential board control/status registers. This device is present in all Pensando SoC based designs. Signed-off-by: Brad Larson Reviewed-by: Krzysztof Kozlowski --- v14 changes: - Change GPL-2.0-only or BSD-2-Clause to GPL-2.0-only OR BSD-2-Clause v11 changes: - Fixed the compatible which should have stayed as 'amd,pensando-elba-ctrl', the commit message, and the filename - Reference spi-peripheral-props - Delete spi-max-frequency - Remove num-cs from example v10 changes: - Property renamed to amd,pensando-ctrl - Driver is renamed and moved to soc/drivers/amd affecting binding - Delete cs property, driver handles device node creation from parent num-cs fixing schema reg error in a different way v9 changes: - Instead of four nodes, one per chip-select, a single node is used with reset-cells in the parent. - No MFD API is used anymore in the driver so it made sense to move this to drivers/spi. - This driver is common for all Pensando SoC based designs so changed the name to pensando-sr.c to not make it Elba SoC specific. - Added property cs for the chip-select number which is used by the driver to create /dev/pensr0. --- .../soc/amd/amd,pensando-elba-ctrl.yaml | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/amd/amd,pensando-elba-ctrl.yaml diff --git a/Documentation/devicetree/bindings/soc/amd/amd,pensando-elba-ctrl.yaml b/Documentation/devicetree/bindings/soc/amd/amd,pensando-elba-ctrl.yaml new file mode 100644 index 000000000000..e96978ad1e37 --- /dev/null +++ b/Documentation/devicetree/bindings/soc/amd/amd,pensando-elba-ctrl.yaml @@ -0,0 +1,58 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/soc/amd/amd,pensando-elba-ctrl.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: AMD Pensando Elba SoC Controller + +description: + The AMD Pensando Elba SoC Controller is a SPI connected device with essential + control/status registers accessed on chip select 0. This device is present + in all Pensando SoC based designs. + +maintainers: + - Brad Larson + +properties: + compatible: + enum: + - amd,pensando-elba-ctrl + + reg: + maxItems: 1 + + '#reset-cells': + const: 1 + + interrupts: + maxItems: 1 + +required: + - compatible + - '#reset-cells' + +allOf: + - $ref: /schemas/spi/spi-peripheral-props.yaml# + +unevaluatedProperties: false + +examples: + - | + #include + + spi { + #address-cells = <1>; + #size-cells = <0>; + + system-controller@0 { + compatible = "amd,pensando-elba-ctrl"; + reg = <0>; + spi-max-frequency = <12000000>; + interrupt-parent = <&porta>; + interrupts = <0 IRQ_TYPE_LEVEL_LOW>; + #reset-cells = <1>; + }; + }; + +... From patchwork Wed Sep 13 21:49:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brad Larson X-Patchwork-Id: 722282 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 92B59B667 for ; Wed, 13 Sep 2023 21:51:10 +0000 (UTC) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2084.outbound.protection.outlook.com [40.107.94.84]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 01190173A; Wed, 13 Sep 2023 14:51:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=T4OKs+SFbAD4vCK3TUN6/IaIBZRoPH1zGfwN80De1fE0aCkm4qKTAWj1WXeXuIfaQMfAc6fD/yalAYlweTfFmcl0Z9JKeSfAYY1gJAez9ms1A89EwlO/PMvhk7Kzo3a5ktvdBmdK2xAzN3I57hD2BjwxiodecdDYGqw9Ry8vXF99SP3LhzEYyTdggOZ8JnysLOHuIsOg/AEG/bOY2fKEXS4Vcn8wsF1T2Gnuvk5SRrpmNJN4oKgVH2TEk9kSgfNJgi6mPUBpUiQgjFivko/YDGNYO7s7liewZWBvy6mVhGXiB6M5J3VhxRy8FtJZjCZr93H2SYFW84aYEFuwZPGrfA== 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=BdoZ8NcXBRR2zfzNwIn0gHe6PhXrxAic7y+LaW0xku8=; b=TyHqunAfQ1jijz7kVPT/lJxa3lXO+KzfVbs0K3I34D3OXOYCiMeY60e8+Pj74V/WQkUXscrdYJg6L9yX7LXDlFyQOQTCj9gC1yMTOp6PykT6zPoQQqjWhjiQRfYruzwOaCw2/RYKTO/qjsia9BPfW0zKnND+S7699gxzh/tWUfzIRCmQLejWobejNREOYyuzusbTvH4//IKzK3tKF5CKo47XOe72cO3ivIwhdhH4Q8B1IKD6IOpk5ykddtDrEx8FYUQiVuHRz2OpT3le9YddRoIuXWyWwhE8lfIYPL+LZsZC/3N3k+C8AVKuPrMDtgCec8+1e3L8hfSM5ngDY4JDtA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.infradead.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BdoZ8NcXBRR2zfzNwIn0gHe6PhXrxAic7y+LaW0xku8=; b=3afV8egbQIqezTRrh7TU8yxHNhzRBcADoaJnwod27uOH8tV4YYE3KmifHG+UvXrkuU0Xom6B6asEZvr95tDEhTgJvrvo+ufd1iITnkfbwkePlxy4FsbgJPXyRERT6lsRwwGwp55WxZENaG4pgSk0Ny/ZIvEiKKrpVSVVVWJ9QOM= Received: from DM6PR03CA0067.namprd03.prod.outlook.com (2603:10b6:5:100::44) by PH7PR12MB9073.namprd12.prod.outlook.com (2603:10b6:510:2eb::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.33; Wed, 13 Sep 2023 21:51:07 +0000 Received: from DS2PEPF00003440.namprd02.prod.outlook.com (2603:10b6:5:100:cafe::c0) by DM6PR03CA0067.outlook.office365.com (2603:10b6:5:100::44) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.31 via Frontend Transport; Wed, 13 Sep 2023 21:51:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by DS2PEPF00003440.mail.protection.outlook.com (10.167.18.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6792.20 via Frontend Transport; Wed, 13 Sep 2023 21:51:07 +0000 Received: from platform-dev1.pensando.io (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Wed, 13 Sep 2023 16:51:03 -0500 From: Brad Larson To: CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v16 4/6] arm64: Add config for AMD Pensando SoC platforms Date: Wed, 13 Sep 2023 14:49:42 -0700 Message-ID: <20230913214944.59804-5-blarson@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230913214944.59804-1-blarson@amd.com> References: <20230913214944.59804-1-blarson@amd.com> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PEPF00003440:EE_|PH7PR12MB9073:EE_ X-MS-Office365-Filtering-Correlation-Id: 4e1da4b2-041d-467a-6a8e-08dbb4a388f0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: To1rfPGeLLnmbXPd+UkhSCvFsbPN4+Hk31IU++GR/IE4BbJAfKKoCuvBWqeht8P9x/M9ytZkcgQhS89WgtKrofGd/I3CR/ZtJUwLrZ/9J2HnzFvsIFV4QjZHOYATo8eHHyJxowydhQyPKB7/NUxZDBnIXNFeyNm/q6Wcq9x41Y1garpkfbCxvZ1PnxSx3C2hbc5TgFCry7FXhTpDOdOD4w2e4YB7jIh+aMOa7eUr2r7lUsUOVfRLDV9RzC4rkWHmc5Bqn5N0WabQ7aLjz4EM9Boiy9jUYaN6h15jBauEi/hkWYdZYzmSZk/4hRFdaYWQn02isndlnNUYdZuIn49BRz8bKjlpgrTcqSUGk1DpURSOjFZGmUEzXJ3Lg52YY4g2aOqym82bwmaoEI158bOGsPwIXuCJC9MVAZckRVjqfzrQ1xPwnS5bBKRXDiqOpwxnXYyqWU5DMSkcmYNQ8bGYFJG+fvElAQb7BCu5uw1YcbLi2mGrFzi04TSFx5rK21Qlxdj5qShFmB2rGuHgN6EjXzE5IrMAh8fZsH+AO/ff1ezfYB7MOI9MNzFktBhnTPwg4QkOMPefDyTrKqCQpKqOwINJTjQI2uzifLvnOcZK4spBxZne3i9ULs88XTR/86Lzuf1gQxKJFDtWj6yJTclSqf3ndxm/viSuKb8PYFrtsrMg5BVVA25DEK1/mSApgpHzS5Rf7zYA48Vws4BG9lDgFNFqUsl6rsZcMXbZzSUwU+byh7UlLWHgar0xNvSRjZo5Nch7IVYq5hAgklJcRiCTgw== X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230031)(4636009)(396003)(136003)(39860400002)(376002)(346002)(82310400011)(451199024)(1800799009)(186009)(36840700001)(46966006)(40470700004)(6666004)(478600001)(16526019)(1076003)(426003)(336012)(83380400001)(26005)(2616005)(7406005)(2906002)(8676002)(70586007)(5660300002)(6916009)(70206006)(316002)(54906003)(8936002)(4326008)(36756003)(41300700001)(356005)(36860700001)(47076005)(81166007)(82740400003)(7416002)(40480700001)(40460700003)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2023 21:51:07.2402 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4e1da4b2-041d-467a-6a8e-08dbb4a388f0 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS2PEPF00003440.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB9073 Add ARCH_PENSANDO configuration option for AMD Pensando SoC based platforms. Signed-off-by: Brad Larson --- v16 changes: - Updated the help description to be more precise --- arch/arm64/Kconfig.platforms | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms index 6069120199bb..24335565bad5 100644 --- a/arch/arm64/Kconfig.platforms +++ b/arch/arm64/Kconfig.platforms @@ -244,6 +244,18 @@ config ARCH_NPCM General support for NPCM8xx BMC (Arbel). Nuvoton NPCM8xx BMC based on the Cortex A35. +config ARCH_PENSANDO + bool "AMD Pensando Platforms" + help + This enables support for the ARMv8 based AMD Pensando SoC + family to include the Elba SoC. + + AMD Pensando SoCs support a range of Distributed Services + Cards in PCIe format installed into servers. The Elba + SoC includes 16 Cortex A-72 CPU cores, 144 P4-programmable + cores for a minimal latency/jitter datapath, and network + interfaces up to 200 Gb/s. + config ARCH_QCOM bool "Qualcomm Platforms" select GPIOLIB From patchwork Wed Sep 13 21:49:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brad Larson X-Patchwork-Id: 722281 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90908B667 for ; Wed, 13 Sep 2023 21:52:03 +0000 (UTC) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2041.outbound.protection.outlook.com [40.107.236.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C0C8C173A; Wed, 13 Sep 2023 14:52:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kUEccPtopLT2MT1gvcA3jAX5fiBRww08wHsFZOWZb6HJ8lq9eIp+whOWkJvFandpfRKp40BtjkS4i4AxV+aVtlZDcZFjZxAedfXc2QAgGKl/gmfa2LwZoE0ayAtJ0ZYKcQBjCAmZ6hHWrmL2FjVlP1kzKScwZMU/rrQOLG5mcIprDh8Fz/SfZCA0gcz+uFK3GKjHzzcceWrm0zp+T0KAzDUicO+l19BwkBKB9r30rKs7IxHxtRXNo7lYC7t44PLi01PxQlrrAfZe6GxzcjwJwxf2kKsv2m0JKz0RoGexEIGi6x3bOMDLnEDzjWtVJY5YfXx46KOWTTyuHa5XpbrcsA== 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=QF8IoQ5zWt4PyCihCm7jImF7RuodYE8K1KFxOfMw/ug=; b=dXEC1i1kK9Bg8abe3Aa7FVIeM6qnzGMWN6GB22Gl3odv1KzkJ9Z224l0GwZqrXBmP+IDAUcBYXva7Ub6fau/Hs/eEKH5NlUGYfYt0jYkG5Luw8KoUmjCM+g0Uohk1xqXkzgGMvDGfduodjqvK3G1iaOo6Ip1U35dsVBilZ1YYIl6LLF2o3hsFWdXA1Ta+XtFNOZ2lM/55x76qi+k+WrPhmB+GF0V709Vi4MPG6ji+A5/EgxJ8cY31Az8Q3dNr4hO2YkISs6KM5GTKH9Ktp9TuJglemGdvAhlko8jR5bx0D2KFsCypo9lQFTnY+oOj90nRDRvf/OwdC8d8GjbaxGQYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.infradead.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QF8IoQ5zWt4PyCihCm7jImF7RuodYE8K1KFxOfMw/ug=; b=bxFqYCtogvHaXDcHfYYWN7tKdNNkGBVI/G4vDG6J2RPSfHWVUTyYV296AglDMJfRutQFXf1Uo+QJ/HIb/SrEfm1xfg6dQ2iHp2DP+Oo/pnozblFCNEZbDt0JDYp+Uh7FY/v3ssrX0qI1A8vr9kg/XJ1W9iXVVXdM+fV38+oMqjc= Received: from DS7PR06CA0003.namprd06.prod.outlook.com (2603:10b6:8:2a::27) by BY1PR12MB8448.namprd12.prod.outlook.com (2603:10b6:a03:534::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.35; Wed, 13 Sep 2023 21:51:59 +0000 Received: from DS2PEPF0000343B.namprd02.prod.outlook.com (2603:10b6:8:2a:cafe::56) by DS7PR06CA0003.outlook.office365.com (2603:10b6:8:2a::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.20 via Frontend Transport; Wed, 13 Sep 2023 21:51:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by DS2PEPF0000343B.mail.protection.outlook.com (10.167.18.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6792.20 via Frontend Transport; Wed, 13 Sep 2023 21:51:59 +0000 Received: from platform-dev1.pensando.io (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Wed, 13 Sep 2023 16:51:55 -0500 From: Brad Larson To: CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v16 6/6] soc: amd: Add support for AMD Pensando SoC Controller Date: Wed, 13 Sep 2023 14:49:44 -0700 Message-ID: <20230913214944.59804-7-blarson@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230913214944.59804-1-blarson@amd.com> References: <20230913214944.59804-1-blarson@amd.com> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PEPF0000343B:EE_|BY1PR12MB8448:EE_ X-MS-Office365-Filtering-Correlation-Id: 7fe64117-396b-451e-4f95-08dbb4a3a7ea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +uozfXiCRzDMkzYcYsHzNHCNNJukc+J60v+Khn1e7HIIBybalMCS9waC10/BXz7LAttvTQE9J6UD37SfLBlnLTiqdvm0E7zOp2ZZB0cfgpPEtgHADJz0KmH6+eaizj6jyWMN+VoFvjwGDHwOeeyNBZSBFIjL7vO4rrqC0oX3O5DyNfby5+TTpnmgVMz9RtsvHFGyTuXOjw9XHTGMxhoabsWByY2nepiKtd4hvA8R/csTqGcCRZh70GqPZIjnVzwgeVxGoVAueUuaU5UMByImbOZxpT11pg1a4/aHYZCU8sgfWeJCbqcVLmDOZDSsfZPjaf8Uoy9jhQ+lMl1g8aPvV0KgEaasUPO28ULEGYiisNT5W8fga1b1FVKAn31ymruvpOS2ppfcZWYNjm75uMVEVw1o2VAf5Er2dIq0Yynw8MeCD7MTqTdWuxZ0/OQwoeYyVSsozDlFKSb2Ka4J/AZEnI8WViwEdZdWSAKp0lfhkAetFAKl1tpIEU/CxjNf4kooYMSVGgUdg+XdYZjWI1etmACxn5mYspcI88Ybd5Iz/5XOLGRIv9Mr2SZowttViTmVhEaI1WZkRJ3/JKBfOlR569D9lAd78QoxlplSeMxb1iF+JOomLnhpj4pZsxk7hvrR4AWGVvcq4ILQfkYnSW5aDH9iYrIAahX6CAu0ycHigEN8JPhQ381BJMQutFX9iSqFxtCkDusryNG1LYZXNaU5YR0vRSgclpp839ydjK90MKMFOyhFdhg9gpNLhJoELuyzNW0zo5SP1o7NpeRJEsgIcQ== X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230031)(4636009)(39860400002)(346002)(396003)(376002)(136003)(1800799009)(82310400011)(186009)(451199024)(36840700001)(46966006)(40470700004)(5660300002)(70206006)(70586007)(41300700001)(54906003)(4326008)(8676002)(8936002)(316002)(6916009)(81166007)(36756003)(40460700003)(478600001)(7406005)(7416002)(16526019)(83380400001)(26005)(2616005)(426003)(1076003)(336012)(30864003)(2906002)(356005)(82740400003)(47076005)(40480700001)(36860700001)(6666004)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Sep 2023 21:51:59.1939 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7fe64117-396b-451e-4f95-08dbb4a3a7ea X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DS2PEPF0000343B.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR12MB8448 The Pensando SoC controller is a SPI connected companion device that is present in all Pensando SoC board designs. The essential board management registers are accessed on chip select 0 with board mgmt IO support accessed using additional chip selects. Signed-off-by: Brad Larson --- v15 changes: - Drop custom ioctl and use existing miscdevice interface. - Delete unused definitions in amd-pensando-ctrl.h - Makefile change to compile for ARCH_PENSANDO v14 changes: - Save 8 bytes of code size by swapping spi_device and reset_controller_dev in penctrl_device - Code simplification and clarity from review inputs - Set penctrl_spi_driver.driver.name to match compatible pensando-elba-ctrl - Remove unused include in amd-pensando-ctrl.h - Rebase to linux-next 6.4.0-rc1 class_create() API change v13 changes: - Update include list in pensando-ctrl.c - Change variable spi_dev to spi throughout - Removed unneeded variable initialization, simplification of error checks, remove extra castings, and use dev_err_probe() - Sort the includes in amd-pensando-ctrl.h - Updates to cleanup if there is an error in penctrl_spi_probe() v12 changes: - Fix gcc-12.1.0 warning v11 changes: - Fix the compatible to be specific 'amd,pensando-elba-ctrl' v10 changes: - Different driver implementation specific to this Pensando controller device. - Moved to soc/amd directory under new name based on guidance. This driver is of no use to any design other than all Pensando SoC based cards. - Removed use of builtin_driver, can be built as a module. v9 changes: - Previously patch 14/17 - After the change to the device tree node and squashing reset-cells into the parent simplified this to not use any MFD API and move it to drivers/spi/pensando-sr.c. - Change the naming to remove elba since this driver is common for all Pensando SoC designs . - Default yes SPI_PENSANDO_SR for ARCH_PENSANDO --- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/amd/Kconfig | 16 ++ drivers/soc/amd/Makefile | 2 + drivers/soc/amd/pensando-ctrl.c | 311 +++++++++++++++++++++++++ include/uapi/linux/amd-pensando-ctrl.h | 26 +++ 6 files changed, 357 insertions(+) create mode 100644 drivers/soc/amd/Kconfig create mode 100644 drivers/soc/amd/Makefile create mode 100644 drivers/soc/amd/pensando-ctrl.c create mode 100644 include/uapi/linux/amd-pensando-ctrl.h diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig index d21e75d69294..1a8a42141e78 100644 --- a/drivers/soc/Kconfig +++ b/drivers/soc/Kconfig @@ -2,6 +2,7 @@ menu "SOC (System On Chip) specific Drivers" source "drivers/soc/actions/Kconfig" +source "drivers/soc/amd/Kconfig" source "drivers/soc/amlogic/Kconfig" source "drivers/soc/apple/Kconfig" source "drivers/soc/aspeed/Kconfig" diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile index 0706a27d13be..dbd651fcbecc 100644 --- a/drivers/soc/Makefile +++ b/drivers/soc/Makefile @@ -3,6 +3,7 @@ # Makefile for the Linux Kernel SOC specific device drivers. # +obj-$(CONFIG_ARCH_PENSANDO) += amd/ obj-y += apple/ obj-y += aspeed/ obj-$(CONFIG_ARCH_AT91) += atmel/ diff --git a/drivers/soc/amd/Kconfig b/drivers/soc/amd/Kconfig new file mode 100644 index 000000000000..011d5339d14e --- /dev/null +++ b/drivers/soc/amd/Kconfig @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: GPL-2.0-only +menu "AMD Pensando SoC drivers" + +config AMD_PENSANDO_CTRL + tristate "AMD Pensando SoC Controller" + depends on SPI_MASTER=y + depends on (ARCH_PENSANDO && OF) || COMPILE_TEST + default ARCH_PENSANDO + select REGMAP_SPI + select MFD_SYSCON + help + Enables AMD Pensando SoC controller device support. This is a SPI + attached companion device in all Pensando SoC board designs which + provides essential board control/status registers and management IO + support. +endmenu diff --git a/drivers/soc/amd/Makefile b/drivers/soc/amd/Makefile new file mode 100644 index 000000000000..a2de0424f68d --- /dev/null +++ b/drivers/soc/amd/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-only +obj-$(CONFIG_AMD_PENSANDO_CTRL) += pensando-ctrl.o diff --git a/drivers/soc/amd/pensando-ctrl.c b/drivers/soc/amd/pensando-ctrl.c new file mode 100644 index 000000000000..0b5a3a54d624 --- /dev/null +++ b/drivers/soc/amd/pensando-ctrl.c @@ -0,0 +1,311 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * AMD Pensando SoC Controller + * + * Userspace interface and reset driver support for SPI connected Pensando SoC + * controller device. This device is present in all Pensando SoC designs and + * contains board control/status registers and management IO support. + * + * Copyright 2023 Advanced Micro Devices, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +struct penctrl_device { + struct reset_controller_dev rcdev; + struct spi_device *spi; +}; + +static struct penctrl_device *penctrl; +static DEFINE_MUTEX(spi_lock); + +static long +penctrl_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + struct penctrl_device *penctrl; + u8 tx_buf[PENCTRL_MAX_MSG_LEN]; + u8 rx_buf[PENCTRL_MAX_MSG_LEN]; + struct spi_transfer t[2] = {}; + struct penctrl_spi_xfer *msg; + struct spi_device *spi; + unsigned int num_msgs; + struct spi_message m; + u32 size; + int ret; + + /* Get a reference to the SPI device */ + penctrl = filp->private_data; + if (!penctrl) + return -ESHUTDOWN; + + spi = spi_dev_get(penctrl->spi); + if (!spi) + return -ESHUTDOWN; + + /* Verify and prepare SPI message */ + size = _IOC_SIZE(cmd); + num_msgs = size / sizeof(struct penctrl_spi_xfer); + if (num_msgs > 2 || size == 0 || size % sizeof(struct penctrl_spi_xfer)) { + ret = -EINVAL; + goto out_unlock; + } + msg = memdup_user((struct penctrl_spi_xfer *)arg, size); + if (IS_ERR(msg)) { + ret = PTR_ERR(msg); + goto out_unlock; + } + if (msg->len > PENCTRL_MAX_MSG_LEN) { + ret = -EINVAL; + goto out_unlock; + } + + t[0].tx_buf = tx_buf; + t[0].len = msg->len; + if (copy_from_user(tx_buf, (void __user *)msg->tx_buf, msg->len)) { + ret = -EFAULT; + goto out_unlock; + } + if (num_msgs > 1) { + msg++; + if (msg->len > PENCTRL_MAX_MSG_LEN) { + ret = -EINVAL; + goto out_unlock; + } + t[1].rx_buf = rx_buf; + t[1].len = msg->len; + } + spi_message_init_with_transfers(&m, t, num_msgs); + + /* Perform the transfer */ + mutex_lock(&spi_lock); + ret = spi_sync(spi, &m); + mutex_unlock(&spi_lock); + + if (ret || (num_msgs == 1)) + goto out_unlock; + + if (copy_to_user((void __user *)msg->rx_buf, rx_buf, msg->len)) + ret = -EFAULT; + +out_unlock: + spi_dev_put(spi); + return ret; +} + +static int penctrl_open(struct inode *inode, struct file *filp) +{ + struct spi_device *spi; + u8 current_cs; + + filp->private_data = penctrl; + current_cs = iminor(inode); + spi = penctrl->spi; + spi->chip_select = current_cs; + spi_set_csgpiod(spi, 0, spi->controller->cs_gpiods[current_cs]); + spi_setup(spi); + return stream_open(inode, filp); +} + +static int penctrl_release(struct inode *inode, struct file *filp) +{ + filp->private_data = NULL; + return 0; +} + +static const struct file_operations penctrl_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = penctrl_ioctl, + .open = penctrl_open, + .release = penctrl_release, + .llseek = no_llseek, +}; + +static int penctrl_regs_read(struct penctrl_device *penctrl, u32 reg, u32 *val) +{ + struct spi_device *spi = penctrl->spi; + struct spi_transfer t[2] = {}; + struct spi_message m; + u8 txbuf[3]; + u8 rxbuf[1]; + int ret; + + txbuf[0] = PENCTRL_SPI_CMD_REGRD; + txbuf[1] = reg; + txbuf[2] = 0; + t[0].tx_buf = txbuf; + t[0].len = sizeof(txbuf); + + rxbuf[0] = 0; + t[1].rx_buf = rxbuf; + t[1].len = sizeof(rxbuf); + + spi_message_init_with_transfers(&m, t, ARRAY_SIZE(t)); + ret = spi_sync(spi, &m); + if (ret) + return ret; + + *val = rxbuf[0]; + return 0; +} + +static int penctrl_regs_write(struct penctrl_device *penctrl, u32 reg, u32 val) +{ + struct spi_device *spi = penctrl->spi; + struct spi_transfer t = {}; + struct spi_message m; + u8 txbuf[4]; + + txbuf[0] = PENCTRL_SPI_CMD_REGWR; + txbuf[1] = reg; + txbuf[2] = val; + txbuf[3] = 0; + + t.tx_buf = txbuf; + t.len = sizeof(txbuf); + spi_message_init_with_transfers(&m, &t, 1); + return spi_sync(spi, &m); +} + +static int penctrl_reset_assert(struct reset_controller_dev *rcdev, + unsigned long id) +{ + struct penctrl_device *penctrl = + container_of(rcdev, struct penctrl_device, rcdev); + struct spi_device *spi = penctrl->spi; + unsigned int val; + int ret; + + mutex_lock(&spi_lock); + spi->chip_select = 0; + spi_set_csgpiod(spi, 0, spi->controller->cs_gpiods[0]); + spi_setup(spi); + ret = penctrl_regs_read(penctrl, PENCTRL_REG_CTRL0, &val); + if (ret) { + dev_err(&spi->dev, "error reading ctrl0 reg\n"); + goto out_unlock; + } + + val |= BIT(6); + ret = penctrl_regs_write(penctrl, PENCTRL_REG_CTRL0, val); + if (ret) + dev_err(&spi->dev, "error writing ctrl0 reg\n"); + +out_unlock: + mutex_unlock(&spi_lock); + return ret; +} + +static int penctrl_reset_deassert(struct reset_controller_dev *rcdev, + unsigned long id) +{ + struct penctrl_device *penctrl = + container_of(rcdev, struct penctrl_device, rcdev); + struct spi_device *spi = penctrl->spi; + unsigned int val; + int ret; + + mutex_lock(&spi_lock); + spi->chip_select = 0; + spi_set_csgpiod(spi, 0, spi->controller->cs_gpiods[0]); + spi_setup(spi); + ret = penctrl_regs_read(penctrl, PENCTRL_REG_CTRL0, &val); + if (ret) { + dev_err(&spi->dev, "error reading ctrl0 reg\n"); + goto out_unlock; + } + + val &= ~BIT(6); + ret = penctrl_regs_write(penctrl, PENCTRL_REG_CTRL0, val); + if (ret) + dev_err(&spi->dev, "error writing ctrl0 reg\n"); + +out_unlock: + mutex_unlock(&spi_lock); + return ret; +} + +static const struct reset_control_ops penctrl_reset_ops = { + .assert = penctrl_reset_assert, + .deassert = penctrl_reset_deassert, +}; + +static struct miscdevice penctrl_devices[] = { + { .minor = 0, .name = "penctrl.0", .fops = &penctrl_fops }, + { .minor = 1, .name = "penctrl.1", .fops = &penctrl_fops }, + { .minor = 2, .name = "penctrl.2", .fops = &penctrl_fops }, + { .minor = 3, .name = "penctrl.3", .fops = &penctrl_fops }, +}; + +static int penctrl_spi_probe(struct spi_device *spi) +{ + int i, ret; + + /* Allocate driver data */ + penctrl = kzalloc(sizeof(*penctrl), GFP_KERNEL); + if (!penctrl) + return -ENOMEM; + + penctrl->spi = spi; + mutex_init(&spi_lock); + + for (i = 0; i < ARRAY_SIZE(penctrl_devices); i++) { + ret = misc_register(&penctrl_devices[i]); + if (ret) { + dev_err(&spi->dev, "Failed to register device %s\n", + penctrl_devices[i].name); + goto cleanup; + } + } + + /* Register reset controller */ + penctrl->rcdev.dev = &spi->dev; + penctrl->rcdev.ops = &penctrl_reset_ops; + penctrl->rcdev.owner = THIS_MODULE; + penctrl->rcdev.of_node = spi->dev.of_node; + penctrl->rcdev.nr_resets = 1; + device_set_node(penctrl->rcdev.dev, dev_fwnode(&spi->dev)); + + ret = reset_controller_register(&penctrl->rcdev); + if (ret) + return dev_err_probe(&spi->dev, ret, + "failed to register reset controller\n"); + return 0; + +cleanup: + for (i = 0; i < ARRAY_SIZE(penctrl_devices); i++) { + if (penctrl_devices[i].this_device) + misc_deregister(&penctrl_devices[i]); + } + return ret; +} + +static const struct of_device_id penctrl_dt_match[] = { + { .compatible = "amd,pensando-elba-ctrl" }, + { /* sentinel */ } +}; + +static struct spi_driver penctrl_spi_driver = { + .probe = penctrl_spi_probe, + .driver = { + .name = "pensando-elba-ctrl", + .of_match_table = penctrl_dt_match, + }, +}; +module_spi_driver(penctrl_spi_driver); + +MODULE_AUTHOR("Brad Larson "); +MODULE_DESCRIPTION("AMD Pensando SoC Controller via SPI"); +MODULE_LICENSE("GPL"); diff --git a/include/uapi/linux/amd-pensando-ctrl.h b/include/uapi/linux/amd-pensando-ctrl.h new file mode 100644 index 000000000000..626b85e3fdb5 --- /dev/null +++ b/include/uapi/linux/amd-pensando-ctrl.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * Userspace interface for /dev/penctrl + * + * This file can be used by applications that need to communicate + * with the AMD Pensando SoC controller device via the ioctl interface. + */ +#ifndef _UAPI_LINUX_AMD_PENSANDO_CTRL_H +#define _UAPI_LINUX_AMD_PENSANDO_CTRL_H + +#include + +#define PENCTRL_SPI_CMD_REGRD 0x0b +#define PENCTRL_SPI_CMD_REGWR 0x02 +#define PENCTRL_MAX_MSG_LEN 16 +#define PENCTRL_REG_CTRL0 0x10 + +struct penctrl_spi_xfer { + __u64 tx_buf; + __u64 rx_buf; + __u32 len; + __u32 speed_hz; + __u64 compat; +}; + +#endif /* _UAPI_LINUX_AMD_PENSANDO_CTRL_H */