From patchwork Tue Jul 11 12:10:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gangurde, Abhijit" X-Patchwork-Id: 118445 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp434006vqm; Tue, 11 Jul 2023 05:19:36 -0700 (PDT) X-Google-Smtp-Source: APBJJlGt1uFujgX2dSV+e6zDkvq8bJwfvomFGm62zz3Mh8bSLsrh5n+DMpxJENMS1dxfi63WnmfM X-Received: by 2002:a05:6a20:244e:b0:130:6b27:729f with SMTP id t14-20020a056a20244e00b001306b27729fmr16171651pzc.3.1689077975852; Tue, 11 Jul 2023 05:19:35 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1689077975; cv=pass; d=google.com; s=arc-20160816; b=CChR+sVMBg+CnHEEXh/fa0dklZfZIqS5NYSYOn06Zo5PrCswrOis+LP9ikX6dI2gb/ tlu9kxyAk+pc33VQsV7iWbC8lFbdFTLuhqlgvDIS9uwC7/sv+nRTsoktX/gMruNzwkt1 4as+eyRTwuH/55Ka0O8tThTQ2UuWOC/4LoAROO/FZPOFp18/2LGi1SvhfnUBRwAmru4K cMqAs5ntiJOBJprIw33hedXFF3UEvZNbQ25euCwRRGQaibLcOxuXtzf7Yp385GtocxLc WMFdVbyNA06sElqgwnDsv7XE5kQ/abTJ6WBNdpwA6JrALmogSvd5OxcRBKZjFcBxKo5S d5gA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Fqss42PnPP21qEHNgrOdheUbPFGMd7xrLFr/uvzcko4=; fh=gGmYz7rAI/pr4Y/otKxA0P/weAkkGfmH3pZl1DUJKXk=; b=q/QPjy3LJwvCuKDKwBQ8KrFCNk7139PmTxDDZgV6AcEfWTAp+Yy8XlszBMnT1w9N+K LzCARBqMnqLoF3aRXl1X4fwwVT9nkGNa2RSnx8pBvpQcKgZEdiHgfkfXh04ZvF5TnW3y QmOSARFvf7q6t2Kzx8PBeQcIt+H4wMM0prmrjkYRlDjWhvy9/ukXwyY9o2lj3BlwWiVP mPPrgbd+lL2BxPzsu70MLHQ2WQE/qfRN2Vnv1+EwMymEsZa5V3YrJiaLDmV4LpUFePGf YoJ04rpVMV2jMBozaWledmRGI4G80rDk7FZgzhlvC936nHllNlGCCIepTd5bXsPbcu1z F5xg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=QGjE+1Ce; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k12-20020aa79d0c000000b00676fd3ad23dsi1359334pfp.384.2023.07.11.05.19.16; Tue, 11 Jul 2023 05:19:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=QGjE+1Ce; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230015AbjGKMNE (ORCPT + 99 others); Tue, 11 Jul 2023 08:13:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231516AbjGKMNA (ORCPT ); Tue, 11 Jul 2023 08:13:00 -0400 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2046.outbound.protection.outlook.com [40.107.237.46]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9851AFB for ; Tue, 11 Jul 2023 05:12:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NHqSITSkpzJGS9ODmH8C+uJPpw17wHTP/gzpH76hhJDQzsVPD5HX2ysDQ2h/iQXsq37gtcUmfz+/yzyjEg0dfCMCAR4LIphm/O7IZT33Hhhr6wyIDfMoZRSYVZAnPeauOkEVIUTGffeGBiJcSe3abO55aRW6/xKPBcrJtiGDBjMz9G9fvDdURD/EU+v3DufAehJmaR9E1psuIjrs/x9gcppRg4VYurSNa6ibz0YVYj00IB+gfH92VdSSzOGsHf98Tq0DoETYBiZSNeN17p7IyfVtWpi4NL8vhrgnzX/Ox7+7R9wMVlyVclCnoSIh4oTbexU2ZVeUUxpQeHP9+cjwww== 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=Fqss42PnPP21qEHNgrOdheUbPFGMd7xrLFr/uvzcko4=; b=IHB22xM76ATAAE9aryTYRusoNb1Ol/xvnUy6uMtyH5OkX0slPx7bDlxl6BDyMAF0LmOzj1Prk7Whk8IW03VatKAm+d1EitpTDrycAzexdGrL43aGgOGGP0ZfaH22bKBgC9H+l101Ps3i22ervMyMxMeEfsMPQf7c85oiXpk/VX6SA7s385Va9Gd5hOIus6/6tx44GDFsS3mFcJQvT9sjIa1CEd9/AdSFALiUlyb9NYoR7+ueJdIy5nFNuF8IeCMdTRytkY0luUWX3MZI2u7VEY83crZ9jw0g+phYxnSVQxkD4mah1vUj9o1+rCfVl0ALwnEI1lHD9UUo4zCLNKTGyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linuxfoundation.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=Fqss42PnPP21qEHNgrOdheUbPFGMd7xrLFr/uvzcko4=; b=QGjE+1Cey7E10rT8DylQ9IP2ryG9zkX7umKAhsUymkT/3TpCIfyl/HxVattC9p+6Rq+wmlpPz5/cpOxV1/YWqcrp8xP4g4zbBD+NiuqVdw3flqX9kix9Wy3AFkWcpab3JjjfimeXjkB/cB8ChkU7yklrf6qMscxmvtGelDUuTKM= Received: from MW4PR04CA0294.namprd04.prod.outlook.com (2603:10b6:303:89::29) by PH0PR12MB7487.namprd12.prod.outlook.com (2603:10b6:510:1e9::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.20; Tue, 11 Jul 2023 12:12:53 +0000 Received: from CO1NAM11FT089.eop-nam11.prod.protection.outlook.com (2603:10b6:303:89:cafe::3c) by MW4PR04CA0294.outlook.office365.com (2603:10b6:303:89::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.20 via Frontend Transport; Tue, 11 Jul 2023 12:12:53 +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 CO1NAM11FT089.mail.protection.outlook.com (10.13.175.179) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6588.19 via Frontend Transport; Tue, 11 Jul 2023 12:12:52 +0000 Received: from SATLEXMB06.amd.com (10.181.40.147) 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.23; Tue, 11 Jul 2023 07:12:15 -0500 Received: from SATLEXMB04.amd.com (10.181.40.145) by SATLEXMB06.amd.com (10.181.40.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 11 Jul 2023 07:12:14 -0500 Received: from xhdipdslab59.xilinx.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 11 Jul 2023 07:12:07 -0500 From: Abhijit Gangurde To: , CC: , , , , , Abhijit Gangurde , Nipun Gupta , "Pieter Jansen van Vuuren" Subject: [PATCH 1/4] cdx: add support for bus enable and disable Date: Tue, 11 Jul 2023 17:40:24 +0530 Message-ID: <20230711121027.936487-2-abhijit.gangurde@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230711121027.936487-1-abhijit.gangurde@amd.com> References: <20230711121027.936487-1-abhijit.gangurde@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT089:EE_|PH0PR12MB7487:EE_ X-MS-Office365-Filtering-Correlation-Id: c09392b5-5899-45ec-6c70-08db8208273e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FGS5KMpjmELtKNj91xnP0v7RErXrdc7hwCkEsaQRJpXAbn+EJ8/nVXp/AUhNRUEaab3DlPhdmSuBF63h/wtzk3h7JQobiXIkxpL1/CLzsXgkSN9JJhcQlHGhc26LOyeC1ixlul2O9EXwy/bk2kjV5xEF/ElZQIN5Jr5snitBl6XtfJgTGUuY8TndfAnsKiDuSzegQ6NNvCLmpuT9MJlW7TcdqjgvF1tM+iC9JDCR+Mz6f9czo30HyV0GUKF5ONMunUAqQTmmZKe25K7tMxrk2RaIGcUlZ9FIGfYdaQK9iOjqb1x1E/4NbGVBStiB1uEe7siKOl4+X6WQ2MCEf/x0Mqbxr3t4IBQkqeRr87/XtUTDS8kQEPdaGxx6vIyw5YDUPbyqtjkfleIiUHnbC2IF+bQCzLLEQKugAaN8DhdgO4cY3mEvUaIx17kF3fGWP0ymZPEqYoLGZPXx4+7ZKZ/r8XRSs/9xKvziFBhxmz3Bt8NcvO3yHH8RF+3bOi+XzHuvzxAxqdm0OTSb8ZLsAu0TE+tuW+x6rv1tnbvm3oO6UKug3Yt4ARkBtTYFwYpPMURe1aBRBkD611Lvnau+MH7VX6g8nK/o4Medo1ge/OSxuMliXnfD47CqLlwRG31jq/n8n1Ar7lLhFuZ3mhUMCLZefD/Rv1t2Z1TUNpHFEN/oaf7pmkB1/khrdMmjTc6t+KZn2TwiRdR+ik7gyFn8B6mQ4JxcHwBd8If/EH7zP+UiojsRb4ivmFYBEB+MirvLfXBWEBmvGzV4iVviTpnKDZ3L4w== 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:(13230028)(4636009)(396003)(136003)(346002)(39860400002)(376002)(451199021)(46966006)(36840700001)(40470700004)(2616005)(426003)(47076005)(8936002)(8676002)(6666004)(478600001)(30864003)(54906003)(2906002)(40460700003)(110136005)(82740400003)(40480700001)(36860700001)(316002)(4326008)(83380400001)(36756003)(44832011)(70206006)(70586007)(356005)(86362001)(5660300002)(82310400005)(26005)(81166007)(1076003)(336012)(186003)(41300700001)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2023 12:12:52.8902 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c09392b5-5899-45ec-6c70-08db8208273e 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: CO1NAM11FT089.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7487 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771126627421823728 X-GMAIL-MSGID: 1771126627421823728 CDX bus needs to be disabled before updating/writing devices in the FPGA. Once the devices are written, the bus shall be enabled. This change provides sysfs entry to enable/disable the CDX bus. Co-developed-by: Nipun Gupta Signed-off-by: Nipun Gupta Signed-off-by: Abhijit Gangurde Reviewed-by: Pieter Jansen van Vuuren Tested-by: Nikhil Agarwal --- Documentation/ABI/testing/sysfs-bus-cdx | 11 +++++ drivers/cdx/cdx.c | 26 ++++++++++++ drivers/cdx/controller/cdx_controller.c | 27 +++++++++++++ drivers/cdx/controller/mc_cdx_pcol.h | 54 +++++++++++++++++++++++++ drivers/cdx/controller/mcdi_functions.c | 24 +++++++++++ drivers/cdx/controller/mcdi_functions.h | 16 ++++++++ include/linux/cdx/cdx_bus.h | 6 +++ 7 files changed, 164 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-cdx b/Documentation/ABI/testing/sysfs-bus-cdx index 7af477f49998..0afa85b3c63b 100644 --- a/Documentation/ABI/testing/sysfs-bus-cdx +++ b/Documentation/ABI/testing/sysfs-bus-cdx @@ -11,6 +11,17 @@ Description: # echo 1 > /sys/bus/cdx/rescan +What: /sys/bus/cdx/enable +Date: July 2023 +Contact: nipun.gupta@amd.com +Description: + Writing y/1/on to this file enables the CDX bus and + writing n/0/off disables the bus. + + For example to disable CDX bus:: + + # echo 0 > /sys/bus/cdx/enable + What: /sys/bus/cdx/devices/.../vendor Date: March 2023 Contact: nipun.gupta@amd.com diff --git a/drivers/cdx/cdx.c b/drivers/cdx/cdx.c index d2cad4c670a0..48c493a43491 100644 --- a/drivers/cdx/cdx.c +++ b/drivers/cdx/cdx.c @@ -380,6 +380,30 @@ static struct attribute *cdx_dev_attrs[] = { }; ATTRIBUTE_GROUPS(cdx_dev); +static ssize_t enable_store(const struct bus_type *bus, + const char *buf, size_t count) +{ + struct cdx_controller *cdx; + unsigned long index; + bool enable; + int ret; + + if (kstrtobool(buf, &enable) < 0) + return -EINVAL; + + xa_for_each(&cdx_controllers, index, cdx) { + if (cdx->enabled == enable) + continue; + + ret = cdx->ops->enable(cdx, enable); + if (ret) + dev_err(cdx->dev, "cdx bus enable/disable failed\n"); + } + + return count; +} +static BUS_ATTR_WO(enable); + static ssize_t rescan_store(const struct bus_type *bus, const char *buf, size_t count) { @@ -410,6 +434,7 @@ static ssize_t rescan_store(const struct bus_type *bus, static BUS_ATTR_WO(rescan); static struct attribute *cdx_bus_attrs[] = { + &bus_attr_enable.attr, &bus_attr_rescan.attr, NULL, }; @@ -541,6 +566,7 @@ void cdx_unregister_controller(struct cdx_controller *cdx) if (cdx->id >= MAX_CDX_CONTROLLERS) return; + cdx->ops->enable(cdx, false); device_for_each_child(cdx->dev, NULL, cdx_unregister_device); xa_erase(&cdx_controllers, cdx->id); } diff --git a/drivers/cdx/controller/cdx_controller.c b/drivers/cdx/controller/cdx_controller.c index dc52f95f8978..ac8081f23cbe 100644 --- a/drivers/cdx/controller/cdx_controller.c +++ b/drivers/cdx/controller/cdx_controller.c @@ -45,6 +45,21 @@ void cdx_rpmsg_pre_remove(struct cdx_controller *cdx) cdx_mcdi_wait_for_quiescence(cdx->priv, MCDI_RPC_TIMEOUT); } +static int cdx_bus_enable(struct cdx_controller *cdx, bool enable) +{ + int ret; + + if (enable) + ret = cdx_mcdi_bus_enable(cdx->priv); + else + ret = cdx_mcdi_bus_disable(cdx->priv); + + if (!ret) + cdx->enabled = enable; + + return ret; +} + static int cdx_configure_device(struct cdx_controller *cdx, u8 bus_num, u8 dev_num, struct cdx_device_config *dev_config) @@ -80,11 +95,22 @@ static int cdx_scan_devices(struct cdx_controller *cdx) for (bus_num = 0; bus_num < num_cdx_bus; bus_num++) { u8 num_cdx_dev; + ret = cdx_mcdi_bus_enable(cdx_mcdi); + if (ret && ret != -EALREADY) { + dev_err(cdx->dev, + "CDX bus %d enable failed: %d\n", bus_num, ret); + continue; + } + /* MCDI FW Read: Fetch the number of devices present */ ret = cdx_mcdi_get_num_devs(cdx_mcdi, bus_num); if (ret < 0) { dev_err(cdx->dev, "Get devices on CDX bus %d failed: %d\n", bus_num, ret); + ret = cdx_mcdi_bus_disable(cdx_mcdi); + if (ret) + dev_err(cdx->dev, + "CDX bus %d disable failed: %d\n", bus_num, ret); continue; } num_cdx_dev = (u8)ret; @@ -120,6 +146,7 @@ static int cdx_scan_devices(struct cdx_controller *cdx) } static struct cdx_ops cdx_ops = { + .enable = cdx_bus_enable, .scan = cdx_scan_devices, .dev_configure = cdx_configure_device, }; diff --git a/drivers/cdx/controller/mc_cdx_pcol.h b/drivers/cdx/controller/mc_cdx_pcol.h index 4ccb7b52951b..2de019406b57 100644 --- a/drivers/cdx/controller/mc_cdx_pcol.h +++ b/drivers/cdx/controller/mc_cdx_pcol.h @@ -455,6 +455,60 @@ #define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_REQUESTER_ID_OFST 84 #define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_REQUESTER_ID_LEN 4 +/***********************************/ +/* + * MC_CMD_CDX_BUS_DOWN + * Asserting reset on the CDX bus causes all devices on the bus to be quiesced. + * DMA bus mastering is disabled and any pending DMA request are flushed. Once + * the response is returned, the devices are guaranteed to no longer issue DMA + * requests or raise MSI interrupts. Further device MMIO accesses may have + * undefined results. While the bus reset is asserted, any of the enumeration + * or device configuration MCDIs will fail with EAGAIN. It is only legal to + * reload the relevant PL region containing CDX devices if the corresponding CDX + * bus is in reset. Depending on the implementation, the firmware may or may + * not enforce this restriction and it is up to the caller to make sure this + * requirement is satisfied. + */ +#define MC_CMD_CDX_BUS_DOWN 0x4 +#define MC_CMD_CDX_BUS_DOWN_MSGSET 0x4 + +/* MC_CMD_CDX_BUS_DOWN_IN msgrequest */ +#define MC_CMD_CDX_BUS_DOWN_IN_LEN 4 +/* Bus number to put in reset, in range 0 to BUS_COUNT-1 */ +#define MC_CMD_CDX_BUS_DOWN_IN_BUS_OFST 0 +#define MC_CMD_CDX_BUS_DOWN_IN_BUS_LEN 4 + +/* + * MC_CMD_CDX_BUS_DOWN_OUT msgresponse: The bus is quiesced, no further + * upstream traffic for devices on this bus. + */ +#define MC_CMD_CDX_BUS_DOWN_OUT_LEN 0 + +/***********************************/ +/* + * MC_CMD_CDX_BUS_UP + * After bus reset is de-asserted, devices are in a state which is functionally + * equivalent to each device having been reset with MC_CMD_CDX_DEVICE_RESET. In + * other words, device logic is reset in a hardware-specific way, MMIO accesses + * are forwarded to the device, DMA bus mastering is disabled and needs to be + * re-enabled with MC_CMD_CDX_DEVICE_DMA_ENABLE once the driver is ready to + * start servicing DMA. If the underlying number of devices or device resources + * changed (e.g. if PL was reloaded) while the bus was in reset, the bus driver + * is expected to re-enumerate the bus. Returns EALREADY if the bus was already + * up before the call. + */ +#define MC_CMD_CDX_BUS_UP 0x5 +#define MC_CMD_CDX_BUS_UP_MSGSET 0x5 + +/* MC_CMD_CDX_BUS_UP_IN msgrequest */ +#define MC_CMD_CDX_BUS_UP_IN_LEN 4 +/* Bus number to take out of reset, in range 0 to BUS_COUNT-1 */ +#define MC_CMD_CDX_BUS_UP_IN_BUS_OFST 0 +#define MC_CMD_CDX_BUS_UP_IN_BUS_LEN 4 + +/* MC_CMD_CDX_BUS_UP_OUT msgresponse: The bus can now be enumerated. */ +#define MC_CMD_CDX_BUS_UP_OUT_LEN 0 + /***********************************/ /* * MC_CMD_CDX_DEVICE_RESET diff --git a/drivers/cdx/controller/mcdi_functions.c b/drivers/cdx/controller/mcdi_functions.c index 0158f26533dd..400fdc771104 100644 --- a/drivers/cdx/controller/mcdi_functions.c +++ b/drivers/cdx/controller/mcdi_functions.c @@ -124,6 +124,30 @@ int cdx_mcdi_get_dev_config(struct cdx_mcdi *cdx, return 0; } +int cdx_mcdi_bus_enable(struct cdx_mcdi *cdx) +{ + MCDI_DECLARE_BUF(inbuf, MC_CMD_CDX_BUS_UP_IN_LEN); + int ret; + + MCDI_SET_DWORD(inbuf, CDX_BUS_UP_IN_BUS, 0); + ret = cdx_mcdi_rpc(cdx, MC_CMD_CDX_BUS_UP, inbuf, sizeof(inbuf), + NULL, 0, NULL); + + return ret; +} + +int cdx_mcdi_bus_disable(struct cdx_mcdi *cdx) +{ + MCDI_DECLARE_BUF(inbuf, MC_CMD_CDX_BUS_DOWN_IN_LEN); + int ret; + + MCDI_SET_DWORD(inbuf, CDX_BUS_DOWN_IN_BUS, 0); + ret = cdx_mcdi_rpc(cdx, MC_CMD_CDX_BUS_DOWN, inbuf, sizeof(inbuf), + NULL, 0, NULL); + + return ret; +} + int cdx_mcdi_reset_device(struct cdx_mcdi *cdx, u8 bus_num, u8 dev_num) { MCDI_DECLARE_BUF(inbuf, MC_CMD_CDX_DEVICE_RESET_IN_LEN); diff --git a/drivers/cdx/controller/mcdi_functions.h b/drivers/cdx/controller/mcdi_functions.h index 7440ace5539a..6d26b7cdc07c 100644 --- a/drivers/cdx/controller/mcdi_functions.h +++ b/drivers/cdx/controller/mcdi_functions.h @@ -47,6 +47,22 @@ int cdx_mcdi_get_dev_config(struct cdx_mcdi *cdx, u8 bus_num, u8 dev_num, struct cdx_dev_params *dev_params); +/** + * cdx_mcdi_bus_enable - Enable CDX bus represented by bus_num + * @cdx: pointer to MCDI interface. + * + * Return: 0 on success, <0 on failure + */ +int cdx_mcdi_bus_enable(struct cdx_mcdi *cdx); + +/** + * cdx_mcdi_bus_disable - Disable CDX bus represented by bus_num + * @cdx: pointer to MCDI interface. + * + * Return: 0 on success, <0 on failure + */ +int cdx_mcdi_bus_disable(struct cdx_mcdi *cdx); + /** * cdx_mcdi_reset_device - Reset cdx device represented by bus_num:dev_num * @cdx: pointer to MCDI interface. diff --git a/include/linux/cdx/cdx_bus.h b/include/linux/cdx/cdx_bus.h index bead71b7bc73..5da0634ae4ee 100644 --- a/include/linux/cdx/cdx_bus.h +++ b/include/linux/cdx/cdx_bus.h @@ -28,6 +28,8 @@ struct cdx_device_config { u8 type; }; +typedef int (*cdx_bus_enable_cb)(struct cdx_controller *cdx, bool enable); + typedef int (*cdx_scan_cb)(struct cdx_controller *cdx); typedef int (*cdx_dev_configure_cb)(struct cdx_controller *cdx, @@ -49,11 +51,13 @@ typedef int (*cdx_dev_configure_cb)(struct cdx_controller *cdx, /** * struct cdx_ops - Callbacks supported by CDX controller. + * @enable: enable or disable bus on the controller * @scan: scan the devices on the controller * @dev_configure: configuration like reset, master_enable, * msi_config etc for a CDX device */ struct cdx_ops { + cdx_bus_enable_cb enable; cdx_scan_cb scan; cdx_dev_configure_cb dev_configure; }; @@ -63,12 +67,14 @@ struct cdx_ops { * @dev: Linux device associated with the CDX controller. * @priv: private data * @id: Controller ID + * @enabled: state enabled/disabled * @ops: CDX controller ops */ struct cdx_controller { struct device *dev; void *priv; u32 id; + bool enabled; struct cdx_ops *ops; }; From patchwork Tue Jul 11 12:10:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gangurde, Abhijit" X-Patchwork-Id: 118442 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp433669vqm; Tue, 11 Jul 2023 05:19:08 -0700 (PDT) X-Google-Smtp-Source: APBJJlG0NW3XI3jnXPOpUaVnvb7I6E9PWJoHW5LgqdbHdqXofbyEBUzuZfL7QcMl5tVPoPFf/lse X-Received: by 2002:a17:906:fd58:b0:992:b020:ce4 with SMTP id wi24-20020a170906fd5800b00992b0200ce4mr13667135ejb.51.1689077947795; Tue, 11 Jul 2023 05:19:07 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1689077947; cv=pass; d=google.com; s=arc-20160816; b=ZhSeCrO+YGTeLS1x2bVHSQSMg0aYC58cLmtLH/Y1DubX3Ioiul8kXJULskiIBc3jGW PJC2t6CL3plw3p98u+V+ulE3SBjgUR1KrTKPtRERuRSmC38Znza4itSRcVsNDnxxmylT FefboTAwdKqijKFsDUO+DQsQreTehu26qTq8+fGTcQpiIe5SwlQ24PL2Dh1sLxhHlHv0 YO+dNtUeu027iuQieODTbRR0wxoz1hKV9EjqnWJQ0gJtgIHWlaFWJXHHw4NU+tprvuk0 stvb+OS+KsLoDW9y3+Giax5hU5VD57oUqUyPydJyGtFPI3TFeuFLO7oqiCwAxMPzvIiy ngTg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=8CPtBG9GJ4LplObeV79/T2NizvYvgmRVZjEhf7cA/YI=; fh=gGmYz7rAI/pr4Y/otKxA0P/weAkkGfmH3pZl1DUJKXk=; b=Ws6FnsNnsgYNRO+IF2eHxAJ7U9e6ew2lBz0kUPdq+wlLqL0IhYizF5PYBCJKE6aQFC RqPai0hrG4lIy/jkT790didMEkiJiedw+MEBGm4yUcjd2Rh96+rRkeKBVr+vaNJl3vBR 9hNXts6Nd7JqyTHfhos3zk1D3Y7wxPqTMZhLnqiC80IP9f9FV60HCO9p0EMnQZN2zxsk xblV1hYWJ+JIRlCzqF3sVBmFKIlxYCI+OwXAurO0RrF4Blf3wnmusrpnXh6sJg59wNuT cNhCWIRq5BQseOoswE1sXtpI1VEdZippK0H+92Frp0MFLDUVf8QLR2j3C5USJJUhR/7P mARA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=kvwCSn5r; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b11-20020a170906490b00b0098922462edbsi1840981ejq.802.2023.07.11.05.18.31; Tue, 11 Jul 2023 05:19:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=kvwCSn5r; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231553AbjGKMNW (ORCPT + 99 others); Tue, 11 Jul 2023 08:13:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230313AbjGKMNO (ORCPT ); Tue, 11 Jul 2023 08:13:14 -0400 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2072.outbound.protection.outlook.com [40.107.243.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ECCD010C0 for ; Tue, 11 Jul 2023 05:13:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AxTWwatRlKnd/HK0XWzvHGPwjPzjxprbmwaBAc+s5NpP1jsVG+WYQIXRmGyMXPfVsAWszTZQr9s0nr5Mjeci++/xx+uXmOw4Er5IlNJ7WCbgFPx9FyZObjQK8IRHixZgx7G+gomPFHu09hoLFDmggs4HIRHQFyFQrH+2muZjre3up/MGc2c0eABz332zsyCVWBnrMIbX2QvhwYAKsPLNhpCviUmdX/0WsiKRbTREWVyX78dJp8aIpU38amdute9EPS3ElVpZXuPqMBYhvRWLC9KCW/1HxFZ0O5N0u0uxSxh4gBofOSGDZTe+jC5hYjmFGC543Nz4clyTsKFG72DBKA== 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=8CPtBG9GJ4LplObeV79/T2NizvYvgmRVZjEhf7cA/YI=; b=XoR4SEAeiNuawhwFeYQ5z9BzDekUvsCXj/QmeXuF4jzWOLusDprBHf2uZ4FfOxfzShFs7u4TOX1120lPn1eI6DJOwLpW5w6WiPdN2fe79ZzOZFBskfsHRY8KL2gJvqMEQb3Pb48eyKKPn3mCcXLOLdabuggp+pMYGqJcDUElXW4FvBpIA+WkXW8to3/bQM1Qm0fXOk6atOcnaZulKUdxA5TCqljQ++hhs71w3F7AW+E9iJD54eNSlz2SqIaERpLT3dQFMYoxRRhzGw4xW/lMUNpEbj/g1vzcI+x/lBH6NMrul3EmKK7A7f+sMevOlC+9RDwt4e6t6YNL8uL3fAo0bQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linuxfoundation.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=8CPtBG9GJ4LplObeV79/T2NizvYvgmRVZjEhf7cA/YI=; b=kvwCSn5raXX3VgdIR/XLcmu8LqdnmJqaslqc2OPDB/fVkPRMpYn632nccNg58IKX9taxxFm0/lIoqN2OyvJvwzYUmB65OSlTLcctSmYtAK4ZYVF7bl8JigBo9MZEmH1HLho9pFhBNEBCcD66ygZzXwSfJB/R6MTUONZv0ZvN7zM= Received: from MW4P220CA0006.NAMP220.PROD.OUTLOOK.COM (2603:10b6:303:115::11) by PH7PR12MB6588.namprd12.prod.outlook.com (2603:10b6:510:210::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.30; Tue, 11 Jul 2023 12:13:09 +0000 Received: from CO1NAM11FT052.eop-nam11.prod.protection.outlook.com (2603:10b6:303:115:cafe::bb) by MW4P220CA0006.outlook.office365.com (2603:10b6:303:115::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.31 via Frontend Transport; Tue, 11 Jul 2023 12:13:08 +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 CO1NAM11FT052.mail.protection.outlook.com (10.13.174.225) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6588.20 via Frontend Transport; Tue, 11 Jul 2023 12:13:08 +0000 Received: from SATLEXMB06.amd.com (10.181.40.147) 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.23; Tue, 11 Jul 2023 07:13:05 -0500 Received: from SATLEXMB04.amd.com (10.181.40.145) by SATLEXMB06.amd.com (10.181.40.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 11 Jul 2023 07:13:04 -0500 Received: from xhdipdslab59.xilinx.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 11 Jul 2023 07:12:57 -0500 From: Abhijit Gangurde To: , CC: , , , , , Abhijit Gangurde , Nipun Gupta , "Pieter Jansen van Vuuren" Subject: [PATCH 2/4] cdx: add sysfs for reset_all Date: Tue, 11 Jul 2023 17:40:25 +0530 Message-ID: <20230711121027.936487-3-abhijit.gangurde@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230711121027.936487-1-abhijit.gangurde@amd.com> References: <20230711121027.936487-1-abhijit.gangurde@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT052:EE_|PH7PR12MB6588:EE_ X-MS-Office365-Filtering-Correlation-Id: f7bf16de-4fc4-49fd-8fae-08db82083093 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YXMNnpPYNiZoIFmyrHw5hhCHlslz2WCHuW/DN+kAg8FktewhAlzhVDssT+FVM3UuZP7poZlOprq6Q198HtmZe2uAPaqcHcyNdgRlNsmKjxlxFfTjRslWLAOoblPcwAuG3Q73AixaZlw+FUJvHcLZg1p9E3TAYajOZQf/Hx4izdql5ABTjb3yaBa+KqN0/VOHZ3m2BROW7JZxLOnhe0CqK9k9BrtWOPxtyJ6IGz06dkJP43NrJ0ORZH/jthE+iPU+3Wn0fnx1IjQT66aWC08GHSZwXF6oA84rTJ5nnQisNN/lojVu4HmXLbP7fMgBtGWvvKfT/CbyKMY3/vrenjSvoEvo5nIqH9BDF411kNoOP5LWqF1/taaz5j5KnLKAFeHbzONjaRLIuu8VgNgjL1ldxZ4RSQplE+leh6J1465ME9lcf/hjyX5HWLAmSKOIszaqPIW1bPJQ/hTiyltYbg94iqDaLPFYkbTKWIpuB9PDtuLl+fiKt5IafOxzW9tUhHXcsMyGyuYwwfhmknCdELIMNf9Y58eorxbpwOBl2qXwCQ0BMejkMytf5Bi0fqjeQxxf8zSROpCPyqCOeinw73gPVoYwzu0T6w/gFJWvDfE9LxVZXy6QbzxkgGlqjsP1HQ1Rx2laEuv+m/Up+Lc+CtcuVG8Po2TtVdKnFSXHWlHK6gslYODZq15K22fmfLqSFSB5ztNpwd7LPeCheQ3wNJqjTrJdJ2rIqEuyZDAsC5DQgxZ2TjrfC18AK4Y15IYnH9neEN5P31QqQBivuVTadr5l1w== 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:(13230028)(4636009)(396003)(346002)(136003)(39860400002)(376002)(451199021)(40470700004)(46966006)(36840700001)(82310400005)(86362001)(82740400003)(40460700003)(40480700001)(36756003)(6666004)(110136005)(54906003)(70586007)(70206006)(81166007)(356005)(36860700001)(1076003)(26005)(186003)(2616005)(478600001)(426003)(316002)(5660300002)(2906002)(8936002)(8676002)(336012)(4326008)(44832011)(41300700001)(47076005)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2023 12:13:08.7664 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f7bf16de-4fc4-49fd-8fae-08db82083093 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: CO1NAM11FT052.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6588 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771126596755814330 X-GMAIL-MSGID: 1771126596755814330 Add sysfs for reset_all entry which resets all the devices on the CDX bus. Co-developed-by: Puneet Gupta Signed-off-by: Puneet Gupta Co-developed-by: Nipun Gupta Signed-off-by: Nipun Gupta Signed-off-by: Abhijit Gangurde Reviewed-by: Pieter Jansen van Vuuren Tested-by: Nikhil Agarwal --- Documentation/ABI/testing/sysfs-bus-cdx | 11 ++++++++++ drivers/cdx/cdx.c | 29 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-cdx b/Documentation/ABI/testing/sysfs-bus-cdx index 0afa85b3c63b..d9e00058471d 100644 --- a/Documentation/ABI/testing/sysfs-bus-cdx +++ b/Documentation/ABI/testing/sysfs-bus-cdx @@ -22,6 +22,17 @@ Description: # echo 0 > /sys/bus/cdx/enable +What: /sys/bus/cdx/reset_all +Date: July 2023 +Contact: puneet.gupta@amd.com +Description: + Writing y/1/on to this file resets all the devices + present on the CDX bus + + For example:: + + # echo 1 > /sys/bus/cdx/reset_all + What: /sys/bus/cdx/devices/.../vendor Date: March 2023 Contact: nipun.gupta@amd.com diff --git a/drivers/cdx/cdx.c b/drivers/cdx/cdx.c index 48c493a43491..4d20047b55bb 100644 --- a/drivers/cdx/cdx.c +++ b/drivers/cdx/cdx.c @@ -106,6 +106,11 @@ int cdx_dev_reset(struct device *dev) } EXPORT_SYMBOL_GPL(cdx_dev_reset); +static int reset_cdx_device(struct device *dev, void *data) +{ + return cdx_dev_reset(dev); +} + /** * cdx_unregister_device - Unregister a CDX device * @dev: CDX device @@ -433,9 +438,33 @@ static ssize_t rescan_store(const struct bus_type *bus, } static BUS_ATTR_WO(rescan); +static ssize_t reset_all_store(const struct bus_type *bus, + const char *buf, size_t count) +{ + bool val; + int ret; + + if (kstrtobool(buf, &val) < 0) + return -EINVAL; + + if (!val) + return -EINVAL; + + /* Reset all the devices attached to cdx bus */ + ret = bus_for_each_dev(bus, NULL, NULL, reset_cdx_device); + if (ret) { + pr_err("error in CDX bus reset\n"); + return 0; + } + + return count; +} +static BUS_ATTR_WO(reset_all); + static struct attribute *cdx_bus_attrs[] = { &bus_attr_enable.attr, &bus_attr_rescan.attr, + &bus_attr_reset_all.attr, NULL, }; ATTRIBUTE_GROUPS(cdx_bus); From patchwork Tue Jul 11 12:10:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gangurde, Abhijit" X-Patchwork-Id: 118446 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp434012vqm; Tue, 11 Jul 2023 05:19:36 -0700 (PDT) X-Google-Smtp-Source: APBJJlG6BRgJrVuUOOLHXYkO0DfJROJwUtG8Dm99xED+WFu8Iqdcl/ee15Ucx17EuZUdLO298VGf X-Received: by 2002:a17:90a:d811:b0:263:8083:bdcf with SMTP id a17-20020a17090ad81100b002638083bdcfmr11526789pjv.15.1689077976515; Tue, 11 Jul 2023 05:19:36 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1689077976; cv=pass; d=google.com; s=arc-20160816; b=uu1xfCZyQo7p9ebDf0tIlk+IQXD9gHe0oXNnUxWQ2WGTt6hXdIqaSL7YC8vnlooXc6 rvYwLQCtbj3oOv5QNZBQg1M8ynTviYTiHS5NEMI5AWwLfT8YxQ5sCNezjm7C3FP6ZBk1 a5gkuVHTcGnLkn01TOC5ziOHn8GULNqQVTt0tbSCHGMRhgQ9TzP5U8Y0YULpuJnMcsji saDrC7BZHBvb0rs5oW5edWkK7Szp4EBG59HuYF8g1uKnoec3xOZezcJksx3a4mS53sAJ oMDzKwOgQm95nz5MYvwZ6RIl6FtMQpKsoYZtgqf6mLuY7Sha8tYugVmJQf9SuRn6lFDI 02+A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=SBhdwGYiEe8FOHedIOY/vwlVXrzUTnajme5T6wqDtNE=; fh=gGmYz7rAI/pr4Y/otKxA0P/weAkkGfmH3pZl1DUJKXk=; b=AiECKPg/jQF9VNdqckQLHzc+mBJr8toL4KGgOnYOdm83ZDIkMYqCE01ecqdruviRln tPGaJkQggEVibGWheYrQputRSpAsNajq81fP4dfYF36x5R6CvGPqP+nMpKAodPOu2ns6 B7Fz079eUwPfdZEBrfaVJK6JNmJIzQqTShYnSKBYZ7AIqkRercCpOoc0aK8KxjaQBVXQ ggUM64IQke2aDcTOPL4uI55T1wkX7alhRpqwM3Xe/VGusUnz46PkegSOghGvtp3jpNTO G3JmzWpqQOLCa7F/Bd0hmMsA83iNDGLPcExm9HqfNJGKAfHkUmTQsFoaF+j7y2moRMd2 R15Q== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=YL4e8bCR; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w19-20020a634913000000b00553a99dd783si1298399pga.778.2023.07.11.05.19.18; Tue, 11 Jul 2023 05:19:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=YL4e8bCR; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231488AbjGKMQw (ORCPT + 99 others); Tue, 11 Jul 2023 08:16:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229769AbjGKMQv (ORCPT ); Tue, 11 Jul 2023 08:16:51 -0400 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2079.outbound.protection.outlook.com [40.107.92.79]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5F72DFB for ; Tue, 11 Jul 2023 05:16:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YEIFoZFsT0ba1pNrZNLX8vrPbdxsaEH5VZBzy3HEHs5jU+TMFFkoEGh4mqGljJ2UBo20M2BTUH1BSVfNrhsdoBZi7XnuMGrkt0rJ0mms1+7dze3jJaXO5eUPWGLarWoB0dkXqoDna7MkGIFFA1Spa9RIl1afRmIaJq/XUbs0ShGwa5+s9X1K2AGolRcVQ9+gr4wj8MbRPsrIyAj6l3C48EDxkYXAb9ob5ZUiX6oP79Mtf8w2Cs2ubW3Eylo8fPOJZ0t15+1dek9SvznGKNz/Ly5lD41M2wl9Gvg/A70BbEYI02StrDKkcEe5AnAfZZuaKn4aQ0Pmj5+1Gh89nHqmfA== 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=SBhdwGYiEe8FOHedIOY/vwlVXrzUTnajme5T6wqDtNE=; b=MTCzQGk8CzWGpVLqiROHL8kYe76gU2+zxFCHXg9T34bwS9upYBc3bKkL4eRXEi4eHN7IS8EPk2s41wGSjJvhH41syz0Nkvm6lZEkAK/sG1/441uzJJegSmITnhC8Jsi62AUEuzWIr55Sul501NaXlKGD3r4YdoCH3l6zIwpHEbvefqrGgtZ6wypDVIbDLdVMUygESvwaKMJrPvTwu4wouM7evPuYn5jQXItIGye/xyJ/rFqOlzuCFK4pETk7bYzYnRrnpwolVPTg0wlv92faIiVaDo8HaOFWelu/gMcWAfzzXAg6ybrA2y/V7KnKwERyDyA5uzFpfXksyJfD1Dr+pQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linuxfoundation.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=SBhdwGYiEe8FOHedIOY/vwlVXrzUTnajme5T6wqDtNE=; b=YL4e8bCRcURjA7W8KF6D1pyUH6YsmjtKLql+ypNmpQtHeMtuaLc7JxJuP/PdhnVKbKbLiVWBzN3g4K046kuEEEi5iMbHD+YeAbqPFku6RZo1bN+FM8WkvVJMO8cDUu+7z+Rp2XJe73GkrIYRIEqehLLURalIdLvJFhe0y+qoLXE= Received: from MW4PR04CA0037.namprd04.prod.outlook.com (2603:10b6:303:6a::12) by CYYPR12MB8704.namprd12.prod.outlook.com (2603:10b6:930:c2::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.29; Tue, 11 Jul 2023 12:13:39 +0000 Received: from CO1NAM11FT097.eop-nam11.prod.protection.outlook.com (2603:10b6:303:6a:cafe::14) by MW4PR04CA0037.outlook.office365.com (2603:10b6:303:6a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.20 via Frontend Transport; Tue, 11 Jul 2023 12:13:38 +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 CO1NAM11FT097.mail.protection.outlook.com (10.13.175.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6588.19 via Frontend Transport; Tue, 11 Jul 2023 12:13:37 +0000 Received: from SATLEXMB08.amd.com (10.181.40.132) 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.23; Tue, 11 Jul 2023 07:13:36 -0500 Received: from SATLEXMB04.amd.com (10.181.40.145) by SATLEXMB08.amd.com (10.181.40.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 11 Jul 2023 05:13:36 -0700 Received: from xhdipdslab59.xilinx.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 11 Jul 2023 07:13:28 -0500 From: Abhijit Gangurde To: , CC: , , , , , Abhijit Gangurde , Nipun Gupta , "Pieter Jansen van Vuuren" Subject: [PATCH 3/4] cdx: create sysfs resource files Date: Tue, 11 Jul 2023 17:40:26 +0530 Message-ID: <20230711121027.936487-4-abhijit.gangurde@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230711121027.936487-1-abhijit.gangurde@amd.com> References: <20230711121027.936487-1-abhijit.gangurde@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT097:EE_|CYYPR12MB8704:EE_ X-MS-Office365-Filtering-Correlation-Id: 71054de0-04e5-40d4-9069-08db82084184 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jHM1B1TwaXls6mAbyhiFlCcJroW/uZ4IcKB/+b3tfaXH8M77Uy7wmYyYMbvj/W6hMQuo2pD7MfxjiEOiwC0m9JBzHH3Ou77V5CUoKYqSQIgRR331IIiHl1uClLrtqEz02CDwjh1P4NCPCEqP4s/c+xnLaFWwI2T8BSHZ1I7UDcygjwvbOs7Zyiwf4KVsyCaY3YayVqpcX4+iY88bY5Vdn63WYMumymRnVGWvz54K3gdkOUUXqyk+aJov0qscusX7bw/xGRtow6IYXCfNJQSYS3Ye0iw04WRqmiA9Ms6qRP2nngruPj1D5nLxNZ8Bwu/B0ldPKFlOYV69y+1dcAZ/t3VojrkOmChVUH7MBlMdQS4ln9Pc9/5IR7cotSg4i+L37NYMJRjg+AvTMBjsVBP4TL6al1MyfImJdIkArJMHyWzE1ROdv+mA8ZOZz9kWYEANpKO5QKVu8XBMmVoj12Smv6SGq/KMUNmONJ2612gRhb+qONVIVZdryv/uD9LEnuCKX/yXfl2+wMPm2IpG9eSqMuDI1bRY2bgVDU9LHJ7CO20jlOxXc/Hiw1r3K88cEfvxPpbQpAl104VOsU37S6CPx7sLv6CaZN+bA6QFsiJ3p1kIa0SHuubOXZGJKkNns19VvvpGeK146HzX9UbQGPRhfiPVS7cB2OMKShWfax2MwkQrgl3ndUiyd2UMAjLPA+yXkzA7yN5+UjnwTdbZJV6n1nsDyJ66HsUrnM7zSgngScTbQQCfFTc5VQsL6WoiX7JyEVif9QZlW1qoEogEXKPdtw== 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:(13230028)(4636009)(376002)(39860400002)(136003)(346002)(396003)(451199021)(36840700001)(40470700004)(46966006)(40460700003)(26005)(186003)(1076003)(2616005)(336012)(83380400001)(426003)(41300700001)(47076005)(4326008)(478600001)(36860700001)(2906002)(316002)(5660300002)(8676002)(44832011)(8936002)(54906003)(70586007)(70206006)(110136005)(40480700001)(36756003)(356005)(81166007)(82740400003)(86362001)(82310400005)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2023 12:13:37.2050 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 71054de0-04e5-40d4-9069-08db82084184 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: CO1NAM11FT097.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8704 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771126628334840228 X-GMAIL-MSGID: 1771126628334840228 Resource files provides the basic MMIO regions info to the user-space. Also, resources devices can be used to mmap the MMIO regions in the user-space. Co-developed-by: Puneet Gupta Signed-off-by: Puneet Gupta Co-developed-by: Nipun Gupta Signed-off-by: Nipun Gupta Signed-off-by: Abhijit Gangurde Reviewed-by: Pieter Jansen van Vuuren Tested-by: Nikhil Agarwal --- Documentation/ABI/testing/sysfs-bus-cdx | 15 +++ drivers/cdx/cdx.c | 139 +++++++++++++++++++++++- include/linux/cdx/cdx_bus.h | 10 ++ 3 files changed, 163 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/sysfs-bus-cdx b/Documentation/ABI/testing/sysfs-bus-cdx index d9e00058471d..6ca47b6442ce 100644 --- a/Documentation/ABI/testing/sysfs-bus-cdx +++ b/Documentation/ABI/testing/sysfs-bus-cdx @@ -76,3 +76,18 @@ Description: For example:: # echo 1 > /sys/bus/cdx/devices/.../remove + +What: /sys/bus/cdx/devices/.../resource +Date: July 2023 +Contact: puneet.gupta@amd.com +Description: + The resource file contains host addresses of CDX device + resources. Each line of the resource file describes a region + with start, end, and flag fields. + +What: /sys/bus/cdx/devices/.../resource +Date: July 2023 +Contact: puneet.gupta@amd.com +Description: + The resource binary file contains the content of the memory + regions. These files can be m'maped from userspace. diff --git a/drivers/cdx/cdx.c b/drivers/cdx/cdx.c index 4d20047b55bb..9d568df8e566 100644 --- a/drivers/cdx/cdx.c +++ b/drivers/cdx/cdx.c @@ -73,6 +73,8 @@ /* CDX controllers registered with the CDX bus */ static DEFINE_XARRAY_ALLOC(cdx_controllers); +static void cdx_destroy_res_attr(struct cdx_device *cdx_dev, int num); + /** * cdx_dev_reset - Reset a CDX device * @dev: CDX device @@ -126,6 +128,8 @@ static int cdx_unregister_device(struct device *dev, { struct cdx_device *cdx_dev = to_cdx_device(dev); + cdx_destroy_res_attr(cdx_dev, MAX_CDX_DEV_RESOURCES); + kfree(cdx_dev->driver_override); cdx_dev->driver_override = NULL; /* @@ -375,12 +379,32 @@ static ssize_t driver_override_show(struct device *dev, } static DEVICE_ATTR_RW(driver_override); +static ssize_t resource_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct cdx_device *cdx_dev = to_cdx_device(dev); + size_t len = 0; + int i; + + for (i = 0; i < MAX_CDX_DEV_RESOURCES; i++) { + struct resource *res = &cdx_dev->res[i]; + + len += sysfs_emit_at(buf, len, "0x%016llx 0x%016llx 0x%016llx\n", + (unsigned long long)res->start, + (unsigned long long)res->end, + (unsigned long long)res->flags); + } + + return len; +} +static DEVICE_ATTR_RO(resource); + static struct attribute *cdx_dev_attrs[] = { &dev_attr_remove.attr, &dev_attr_reset.attr, &dev_attr_vendor.attr, &dev_attr_device.attr, &dev_attr_driver_override.attr, + &dev_attr_resource.attr, NULL, }; ATTRIBUTE_GROUPS(cdx_dev); @@ -514,12 +538,106 @@ static void cdx_device_release(struct device *dev) kfree(cdx_dev); } +static const struct vm_operations_struct cdx_phys_vm_ops = { +#ifdef CONFIG_HAVE_IOREMAP_PROT + .access = generic_access_phys, +#endif +}; + +/** + * cdx_mmap_resource - map a CDX resource into user memory space + * @fp: File pointer. Not used in this function, but required where + * this API is registered as a callback. + * @kobj: kobject for mapping + * @attr: struct bin_attribute for the file being mapped + * @vma: struct vm_area_struct passed into the mmap + * + * Use the regular CDX mapping routines to map a CDX resource into userspace. + * + * Return: true on success, false otherwise. + */ +static int cdx_mmap_resource(struct file *fp, struct kobject *kobj, + struct bin_attribute *attr, + struct vm_area_struct *vma) +{ + struct cdx_device *cdx_dev = to_cdx_device(kobj_to_dev(kobj)); + int num = (unsigned long)attr->private; + struct resource *res; + unsigned long size; + + res = &cdx_dev->res[num]; + if (iomem_is_exclusive(res->start)) + return -EINVAL; + + /* Make sure the caller is mapping a valid resource for this device */ + size = ((cdx_resource_len(cdx_dev, num) - 1) >> PAGE_SHIFT) + 1; + if (vma->vm_pgoff + vma_pages(vma) > size) + return -EINVAL; + + /* + * Map memory region and vm->vm_pgoff is expected to be an + * offset within that region. + */ + vma->vm_page_prot = pgprot_device(vma->vm_page_prot); + vma->vm_pgoff += (cdx_resource_start(cdx_dev, num) >> PAGE_SHIFT); + vma->vm_ops = &cdx_phys_vm_ops; + return io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, + vma->vm_end - vma->vm_start, + vma->vm_page_prot); +} + +static void cdx_destroy_res_attr(struct cdx_device *cdx_dev, int num) +{ + int i; + + /* removing the bin attributes */ + for (i = 0; i < num; i++) { + struct bin_attribute *res_attr; + + res_attr = cdx_dev->res_attr[i]; + if (res_attr) { + sysfs_remove_bin_file(&cdx_dev->dev.kobj, res_attr); + kfree(res_attr); + } + } +} + +#define CDX_RES_ATTR_NAME_LEN 10 +static int cdx_create_res_attr(struct cdx_device *cdx_dev, int num) +{ + struct bin_attribute *res_attr; + char *res_attr_name; + int ret; + + res_attr = kzalloc(sizeof(*res_attr) + CDX_RES_ATTR_NAME_LEN, GFP_ATOMIC); + if (!res_attr) + return -ENOMEM; + + res_attr_name = (char *)(res_attr + 1); + + sysfs_bin_attr_init(res_attr); + + cdx_dev->res_attr[num] = res_attr; + sprintf(res_attr_name, "resource%d", num); + + res_attr->mmap = cdx_mmap_resource; + res_attr->attr.name = res_attr_name; + res_attr->attr.mode = 0600; + res_attr->size = cdx_resource_len(cdx_dev, num); + res_attr->private = (void *)(unsigned long)num; + ret = sysfs_create_bin_file(&cdx_dev->dev.kobj, res_attr); + if (ret) + kfree(res_attr); + + return ret; +} + int cdx_device_add(struct cdx_dev_params *dev_params) { struct cdx_controller *cdx = dev_params->cdx; struct device *parent = cdx->dev; struct cdx_device *cdx_dev; - int ret; + int ret, i; cdx_dev = kzalloc(sizeof(*cdx_dev), GFP_KERNEL); if (!cdx_dev) @@ -558,7 +676,26 @@ int cdx_device_add(struct cdx_dev_params *dev_params) goto fail; } + /* Create resource attributes */ + for (i = 0; i < MAX_CDX_DEV_RESOURCES; i++) { + if (cdx_resource_flags(cdx_dev, i) & IORESOURCE_MEM) { + /* skip empty resources */ + if (!cdx_resource_len(cdx_dev, i)) + continue; + + ret = cdx_create_res_attr(cdx_dev, i); + if (ret != 0) { + dev_err(&cdx_dev->dev, + "cdx device resource<%d> file creation failed: %d", i, ret); + goto fail1; + } + } + } + return 0; +fail1: + cdx_destroy_res_attr(cdx_dev, i); + device_del(&cdx_dev->dev); fail: /* * Do not free cdx_dev here as it would be freed in diff --git a/include/linux/cdx/cdx_bus.h b/include/linux/cdx/cdx_bus.h index 5da0634ae4ee..e93f1cd8ae33 100644 --- a/include/linux/cdx/cdx_bus.h +++ b/include/linux/cdx/cdx_bus.h @@ -104,6 +104,7 @@ struct cdx_device { u8 bus_num; u8 dev_num; struct resource res[MAX_CDX_DEV_RESOURCES]; + struct bin_attribute *res_attr[MAX_CDX_DEV_RESOURCES]; u8 res_count; u64 dma_mask; u16 flags; @@ -114,6 +115,15 @@ struct cdx_device { #define to_cdx_device(_dev) \ container_of(_dev, struct cdx_device, dev) +#define cdx_resource_start(dev, num) ((dev)->res[(num)].start) +#define cdx_resource_end(dev, num) ((dev)->res[(num)].end) +#define cdx_resource_flags(dev, num) ((dev)->res[(num)].flags) +#define cdx_resource_len(dev, num) \ + ((cdx_resource_start((dev), (num)) == 0 && \ + cdx_resource_end((dev), (num)) == \ + cdx_resource_start((dev), (num))) ? 0 : \ + (cdx_resource_end((dev), (num)) - \ + cdx_resource_start((dev), (num)) + 1)) /** * struct cdx_driver - CDX device driver * @driver: Generic device driver From patchwork Tue Jul 11 12:10:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gangurde, Abhijit" X-Patchwork-Id: 118443 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp433743vqm; Tue, 11 Jul 2023 05:19:15 -0700 (PDT) X-Google-Smtp-Source: APBJJlEt3dRXlgnHffkp8s/NKNNggdSVJ9ic+5lVTDH7gnc6hNn03+4kYByniHEa4EwfBibfjv/X X-Received: by 2002:a17:903:2581:b0:1b9:de3e:7a59 with SMTP id jb1-20020a170903258100b001b9de3e7a59mr5215523plb.10.1689077955059; Tue, 11 Jul 2023 05:19:15 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1689077955; cv=pass; d=google.com; s=arc-20160816; b=Js9ez1a7uwL9RpFm54SjRBLI0Al0awHeEY3fEyuoXIDwEkfq5riE1o3nU7xKAUX3Ip X7WJK3j6OrQN7DeyrmmKJKgIyzeU8zCITwwbkpWpGudb3PPhc1qCdhf92VriLrHc4kG2 y7f8L5xkEWJO0S0zrMvLLZLtWrLxzJFX2IvKzJKc+GfUWJiDz9l4h32pgy7zOLhYxtzB Gsknuc2jGXZI66FM7el3NNJwbKqBqVex2QHSA3vzwiVhh8e2eRuOktoumLR5jbGVouDM DlJtTFrrg/70CYUUvFRtbi+B0HDbApQd4jx7MQ5Wd9vRAN4KPUI5kEwXlK81or2L0NzM G/EQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=saDwYCffsHQy3mOfbWGcaOBQDQNBKsGtove1A0qSKbM=; fh=gGmYz7rAI/pr4Y/otKxA0P/weAkkGfmH3pZl1DUJKXk=; b=EOeZoISSYcBAvGAnjeIxmvuS5N9xEKOeerITbX5jX1JGjVuK3u9M9WM6BauiGkDA7Q 8PzmxwNOILHBDXhKtQKEFG42GDg+jfIrfd1i7Mv/8kG6jzbCPL/dH+GdktVQZirB9dIv w8OPmRSUZTo6V4zw3RksZuqC1QvjXAsUnHGJIwHZXs1OcQdkrE7t3F4tHAsAvpk2MVWf vE8vp+xAqENqdWbO0QCBSMuzn9EQYs5R6Wa7XIEYSUHp30Gi++vinN6PXpX6l5+c7p1T w83uCfFcE0P8EzWMZHmkafheAQeHQIiDujdTbYg/J/mvtyh79PX7VIR5h5HxSmYxprpp qXyA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=z+8o81lP; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z6-20020a1709027e8600b001b9d0905b0esi1475390pla.161.2023.07.11.05.18.58; Tue, 11 Jul 2023 05:19:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=z+8o81lP; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231520AbjGKMOQ (ORCPT + 99 others); Tue, 11 Jul 2023 08:14:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231620AbjGKMOM (ORCPT ); Tue, 11 Jul 2023 08:14:12 -0400 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2060c.outbound.protection.outlook.com [IPv6:2a01:111:f400:7ea9::60c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CAC4C1988 for ; Tue, 11 Jul 2023 05:14:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XHzotC7FgV0SZha1rNUVqlsxoWaLebttqJlVh/IkHrpKhKAAfKLetn7lE4OfwV6Kq4d5L3vNhwhF9UTEPAzejjS8TW4xBuW8KZus7WIlnj04ROBH4SLxze+0n3SwjCSIciX0n4UoN1Vm9BeayzsdgArxfKmxpDApSPqYIOw//XFSMw/XhQbqonmFxEZsTLU+VKmFIMmyEyGVA+tVEkdgGeABQ9VxMTNU2GEgxB5Xh8MLcELSxbDluMuvGaWYgNqW3VQrEjQp3ik8WSVleaLfKlEAOfUQyngMc2wcxgJCuKka7fH8aMHXwakz4lm5x2937mXe1djjD/Yp66eM2IE0+A== 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=saDwYCffsHQy3mOfbWGcaOBQDQNBKsGtove1A0qSKbM=; b=G1+cDhSao++LS1MlE4ANn/3LW83uwaP67MM+j0kwE4/nFySTV7skngklYJqB0Ly22pIgmBNsQhWUSL/ul5vPU79eVDNP5NQq6eZZyj2uxKRQKMP4A4fDNtW8AqCFg2tFyqXpxYiDwXs4hVJ0CUADyBygy6e/7QdnoGmEEIMDGwtoWk1Egh5PSJ3POJtWOj0L5Cv7zGhS/ZCOcdix3tzDlW1VeXrqiaEaonizi6F6Kutgksrefax6Zy3jqwHxtLKVIr/m7d765kltI1OLvJ/5hFJ59UFO35ZsJClNs0RRfPBDcknthTcaWTJy0XnwNZekg+8fSi3n2owuxPh2YtuQOw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linuxfoundation.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=saDwYCffsHQy3mOfbWGcaOBQDQNBKsGtove1A0qSKbM=; b=z+8o81lPFBM5w2bj857HGGM6/2+V3NrjM5eNW9Zg3e3+h67W2NYs7j8yzpe1b+ie+dQ5TcaacVYJS9SnV1KD+XCzYcLHTTcGndF8yTVuAn38WWWGiVfuPbik8XfvsDZLqcUakQNFCJPR/RsgfHddl3VrCJiAdmbBZFfBDPIUNm8= Received: from BN0PR03CA0039.namprd03.prod.outlook.com (2603:10b6:408:e7::14) by MN2PR12MB4304.namprd12.prod.outlook.com (2603:10b6:208:1d0::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.30; Tue, 11 Jul 2023 12:13:57 +0000 Received: from BN8NAM11FT037.eop-nam11.prod.protection.outlook.com (2603:10b6:408:e7:cafe::f) by BN0PR03CA0039.outlook.office365.com (2603:10b6:408:e7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.32 via Frontend Transport; Tue, 11 Jul 2023 12:13:57 +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=SATLEXMB03.amd.com; pr=C Received: from SATLEXMB03.amd.com (165.204.84.17) by BN8NAM11FT037.mail.protection.outlook.com (10.13.177.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6588.20 via Frontend Transport; Tue, 11 Jul 2023 12:13:57 +0000 Received: from SATLEXMB04.amd.com (10.181.40.145) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 11 Jul 2023 07:13:57 -0500 Received: from xhdipdslab59.xilinx.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server id 15.1.2507.23 via Frontend Transport; Tue, 11 Jul 2023 07:13:49 -0500 From: Abhijit Gangurde To: , CC: , , , , , Abhijit Gangurde , Nipun Gupta , "Pieter Jansen van Vuuren" Subject: [PATCH 4/4] cdx: add sysfs for subsystem, class and revision Date: Tue, 11 Jul 2023 17:40:27 +0530 Message-ID: <20230711121027.936487-5-abhijit.gangurde@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230711121027.936487-1-abhijit.gangurde@amd.com> References: <20230711121027.936487-1-abhijit.gangurde@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8NAM11FT037:EE_|MN2PR12MB4304:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a50ef40-d0b1-4202-b390-08db82084db6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6WlzW+UMLVqc95cknpH0ujlu46vEGmlR2aQ9WTfyGNHt2Ir2Jo0GdmbvuV9Xy6lXtqDan3598J73dwKFJ9oIrxtnSC1L24oS0wEYOGIvKnVAKhpu0WnjuTmosRGzkUvYylebUNLTDIV2qfNy5hCaAtu5Ggfzxlm7Uyhf+9cCW+cIVv047XjuTSIQKzXOkMYXHNu2gdna82lB8v9tQ3ERnOVofXn6quFr9ig83cDCXOQRDyupkJPUiDcutdnpmlmnYYkEmwZ8skqOUFXcvo4oFagtCh2RZc9v4N2oIZpyF3IsmeX4JxuYBsjM0eluOT7QWf86v6oSiLFoTtJToeF3lbieLL/Fe6ktU2kLyCKEgNv3p7Rnmb4mWRyW0qzyjzXyb4oayqDj65SosLJeyOEd7Qw55geFJqYlEvzn0oN2lYmv91i9zLHj07M44eRr10nPmJc+pCS6TVzCVKt/IIKkq8bCbxNNVyZ0EycQZAFDg4W/eFFMCXBKDp4X8MvcrsScosMvW8UlPpZ91zHBtl8d2Q9odVe2wEqbHQj5KmbI9CQo8jyH/nVk8CM6phF6y8Uzpt1K+BRuqM62rrJWHZfM8eVSFaGgrxJsuozSj8vEuU3sk9OED63jFEep5YLV81aOdPkfPwM0MnnQ5scbLuX/uuvEWAkIev5l5i016KqD7zMc4qbMPTuTVq5urIjMhMfKvFbX1Hx2gvq95f6Lp4h6sVAKIvr+G1LX5iuXlPn0HPXFD7lTtmYpbHIoyyGqdSaGZKWynQ9JHYTshdj2XH4qMg== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB03.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230028)(4636009)(396003)(346002)(136003)(376002)(39860400002)(451199021)(46966006)(40470700004)(36840700001)(82310400005)(86362001)(82740400003)(40460700003)(40480700001)(36756003)(6666004)(110136005)(54906003)(70586007)(70206006)(356005)(81166007)(36860700001)(1076003)(26005)(186003)(2616005)(478600001)(426003)(316002)(5660300002)(2906002)(8936002)(8676002)(336012)(83380400001)(30864003)(4326008)(44832011)(41300700001)(47076005)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2023 12:13:57.7756 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4a50ef40-d0b1-4202-b390-08db82084db6 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=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT037.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4304 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,SPF_NONE,T_SCC_BODY_TEXT_LINE, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771126605500684917 X-GMAIL-MSGID: 1771126605500684917 RPU provides subsystem_vendor, subsystem_device, class and revision info of the device. Use the Subsystem vendor id, device id and class to match the cdx device. Subsystem vendor and device combination can be used to identify the card. This identification would be useful for cdx device driver for card specific operations. Co-developed-by: Puneet Gupta Signed-off-by: Puneet Gupta Co-developed-by: Nipun Gupta Signed-off-by: Nipun Gupta Signed-off-by: Abhijit Gangurde Reviewed-by: Pieter Jansen van Vuuren Tested-by: Nikhil Agarwal --- Documentation/ABI/testing/sysfs-bus-cdx | 45 +++++++++++++++++++++++++ drivers/cdx/cdx.c | 29 +++++++++++++++- drivers/cdx/cdx.h | 8 +++++ drivers/cdx/controller/mcdi_functions.c | 7 ++++ include/linux/cdx/cdx_bus.h | 27 +++++++++++++-- include/linux/mod_devicetable.h | 10 ++++++ scripts/mod/devicetable-offsets.c | 4 +++ scripts/mod/file2alias.c | 8 +++++ 8 files changed, 135 insertions(+), 3 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-bus-cdx b/Documentation/ABI/testing/sysfs-bus-cdx index 6ca47b6442ce..da6459ac8fb2 100644 --- a/Documentation/ABI/testing/sysfs-bus-cdx +++ b/Documentation/ABI/testing/sysfs-bus-cdx @@ -50,6 +50,36 @@ Description: of a device manufacturer. Combination of Vendor ID and Device ID identifies a device. +What: /sys/bus/cdx/devices/.../subsystem_vendor +Date: July 2023 +Contact: puneet.gupta@amd.com +Description: + Subsystem Vendor ID for this CDX device, in hexadecimal. + Subsystem Vendor ID is 16 bit identifier specific to the + card manufacturer. + +What: /sys/bus/cdx/devices/.../subsystem_device +Date: July 2023 +Contact: puneet.gupta@amd.com +Description: + Subsystem Device ID for this CDX device, in hexadecimal + Subsystem Device ID is 16 bit identifier specific to the + card manufacturer. + +What: /sys/bus/cdx/devices/.../class +Date: July 2023 +Contact: puneet.gupta@amd.com +Description: + This file contains the class of the CDX device, in hexadecimal. + Class is 24 bit identifier specifies the functionality of the device. + +What: /sys/bus/cdx/devices/.../revision +Date: July 2023 +Contact: puneet.gupta@amd.com +Description: + This file contains the revision field of the CDX device, in hexadecimal. + Revision is 8 bit revision identifier of the device. + What: /sys/bus/cdx/devices/.../reset Date: March 2023 Contact: nipun.gupta@amd.com @@ -91,3 +121,18 @@ Contact: puneet.gupta@amd.com Description: The resource binary file contains the content of the memory regions. These files can be m'maped from userspace. + +What: /sys/bus/cdx/devices/.../modalias +Date: July 2023 +Contact: nipun.gupta@amd.com +Description: + This attribute indicates the CDX ID of the device. + That is in the format: + cdx:vXXXXdXXXXsvXXXXsdXXXXcXXXXXX, + where: + + - vXXXX contains the vendor ID; + - dXXXX contains the device ID; + - svXXXX contains the subsystem vendor ID; + - sdXXXX contains the subsystem device ID; + - cXXXXXX contains the device class. diff --git a/drivers/cdx/cdx.c b/drivers/cdx/cdx.c index 9d568df8e566..e9055baf14bb 100644 --- a/drivers/cdx/cdx.c +++ b/drivers/cdx/cdx.c @@ -162,7 +162,10 @@ cdx_match_one_device(const struct cdx_device_id *id, { /* Use vendor ID and device ID for matching */ if ((id->vendor == CDX_ANY_ID || id->vendor == dev->vendor) && - (id->device == CDX_ANY_ID || id->device == dev->device)) + (id->device == CDX_ANY_ID || id->device == dev->device) && + (id->subvendor == CDX_ANY_ID || id->subvendor == dev->subsystem_vendor) && + (id->subdevice == CDX_ANY_ID || id->subdevice == dev->subsystem_device) && + !((id->class ^ dev->class) & id->class_mask)) return id; return NULL; } @@ -308,6 +311,10 @@ static DEVICE_ATTR_RO(field) cdx_config_attr(vendor, "0x%04x\n"); cdx_config_attr(device, "0x%04x\n"); +cdx_config_attr(subsystem_vendor, "0x%04x\n"); +cdx_config_attr(subsystem_device, "0x%04x\n"); +cdx_config_attr(revision, "0x%02x\n"); +cdx_config_attr(class, "0x%06x\n"); static ssize_t remove_store(struct device *dev, struct device_attribute *attr, @@ -353,6 +360,17 @@ static ssize_t reset_store(struct device *dev, struct device_attribute *attr, } static DEVICE_ATTR_WO(reset); +static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct cdx_device *cdx_dev = to_cdx_device(dev); + + return sprintf(buf, "cdx:v%04Xd%04Xsv%04Xsd%04Xc%06X\n", cdx_dev->vendor, + cdx_dev->device, cdx_dev->subsystem_vendor, cdx_dev->subsystem_device, + cdx_dev->class); +} +static DEVICE_ATTR_RO(modalias); + static ssize_t driver_override_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) @@ -403,6 +421,11 @@ static struct attribute *cdx_dev_attrs[] = { &dev_attr_reset.attr, &dev_attr_vendor.attr, &dev_attr_device.attr, + &dev_attr_subsystem_vendor.attr, + &dev_attr_subsystem_device.attr, + &dev_attr_class.attr, + &dev_attr_revision.attr, + &dev_attr_modalias.attr, &dev_attr_driver_override.attr, &dev_attr_resource.attr, NULL, @@ -652,6 +675,10 @@ int cdx_device_add(struct cdx_dev_params *dev_params) cdx_dev->req_id = dev_params->req_id; cdx_dev->vendor = dev_params->vendor; cdx_dev->device = dev_params->device; + cdx_dev->subsystem_vendor = dev_params->subsys_vendor; + cdx_dev->subsystem_device = dev_params->subsys_device; + cdx_dev->class = dev_params->class; + cdx_dev->revision = dev_params->revision; cdx_dev->bus_num = dev_params->bus_num; cdx_dev->dev_num = dev_params->dev_num; cdx_dev->cdx = dev_params->cdx; diff --git a/drivers/cdx/cdx.h b/drivers/cdx/cdx.h index c436ac7ac86f..d17b5a501e8d 100644 --- a/drivers/cdx/cdx.h +++ b/drivers/cdx/cdx.h @@ -16,21 +16,29 @@ * @parent: Associated CDX controller * @vendor: Vendor ID for CDX device * @device: Device ID for CDX device + * @subsys_vendor: Sub vendor ID for CDX device + * @subsys_device: Sub device ID for CDX device * @bus_num: Bus number for this CDX device * @dev_num: Device number for this device * @res: array of MMIO region entries * @res_count: number of valid MMIO regions * @req_id: Requestor ID associated with CDX device + * @class: Class of the CDX Device + * @revision: Revision of the CDX device */ struct cdx_dev_params { struct cdx_controller *cdx; u16 vendor; u16 device; + u16 subsys_vendor; + u16 subsys_device; u8 bus_num; u8 dev_num; struct resource res[MAX_CDX_DEV_RESOURCES]; u8 res_count; u32 req_id; + u32 class; + u8 revision; }; /** diff --git a/drivers/cdx/controller/mcdi_functions.c b/drivers/cdx/controller/mcdi_functions.c index 400fdc771104..a227922a03ca 100644 --- a/drivers/cdx/controller/mcdi_functions.c +++ b/drivers/cdx/controller/mcdi_functions.c @@ -120,6 +120,13 @@ int cdx_mcdi_get_dev_config(struct cdx_mcdi *cdx, dev_params->vendor = MCDI_WORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_VENDOR_ID); dev_params->device = MCDI_WORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_ID); + dev_params->subsys_vendor = MCDI_WORD(outbuf, + CDX_BUS_GET_DEVICE_CONFIG_OUT_SUBSYS_VENDOR_ID); + dev_params->subsys_device = MCDI_WORD(outbuf, + CDX_BUS_GET_DEVICE_CONFIG_OUT_SUBSYS_DEVICE_ID); + dev_params->class = MCDI_DWORD(outbuf, + CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_CLASS) & 0xFFFFFF; + dev_params->revision = MCDI_BYTE(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_REVISION); return 0; } diff --git a/include/linux/cdx/cdx_bus.h b/include/linux/cdx/cdx_bus.h index e93f1cd8ae33..2fa727770d6d 100644 --- a/include/linux/cdx/cdx_bus.h +++ b/include/linux/cdx/cdx_bus.h @@ -36,6 +36,19 @@ typedef int (*cdx_dev_configure_cb)(struct cdx_controller *cdx, u8 bus_num, u8 dev_num, struct cdx_device_config *dev_config); +/** + * CDX_DEVICE - macro used to describe a specific CDX device + * @vend: the 16 bit CDX Vendor ID + * @dev: the 16 bit CDX Device ID + * + * This macro is used to create a struct cdx_device_id that matches a + * specific device. The subvendor and subdevice fields will be set to + * CDX_ANY_ID. + */ +#define CDX_DEVICE(vend, dev) \ + .vendor = (vend), .device = (dev), \ + .subvendor = CDX_ANY_ID, .subdevice = CDX_ANY_ID + /** * CDX_DEVICE_DRIVER_OVERRIDE - macro used to describe a CDX device with * override_only flags. @@ -44,10 +57,12 @@ typedef int (*cdx_dev_configure_cb)(struct cdx_controller *cdx, * @driver_override: the 32 bit CDX Device override_only * * This macro is used to create a struct cdx_device_id that matches only a - * driver_override device. + * driver_override device. The subvendor and subdevice fields will be set to + * CDX_ANY_ID. */ #define CDX_DEVICE_DRIVER_OVERRIDE(vend, dev, driver_override) \ - .vendor = (vend), .device = (dev), .override_only = (driver_override) + .vendor = (vend), .device = (dev), .subvendor = CDX_ANY_ID,\ + .subdevice = CDX_ANY_ID, .override_only = (driver_override) /** * struct cdx_ops - Callbacks supported by CDX controller. @@ -84,6 +99,10 @@ struct cdx_controller { * @cdx: CDX controller associated with the device * @vendor: Vendor ID for CDX device * @device: Device ID for CDX device + * @subsystem_vendor: Subsystem Vendor ID for CDX device + * @subsystem_device: Subsystem Device ID for CDX device + * @class: Class for the CDX device + * @revision: Revision of the CDX device * @bus_num: Bus number for this CDX device * @dev_num: Device number for this device * @res: array of MMIO region entries @@ -101,6 +120,10 @@ struct cdx_device { struct cdx_controller *cdx; u16 vendor; u16 device; + u16 subsystem_vendor; + u16 subsystem_device; + u32 class; + u8 revision; u8 bus_num; u8 dev_num; struct resource res[MAX_CDX_DEV_RESOURCES]; diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index b0678b093cb2..aa3c28781248 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -935,6 +935,12 @@ enum { * struct cdx_device_id - CDX device identifier * @vendor: Vendor ID * @device: Device ID + * @subvendor: Subsystem vendor ID (or CDX_ANY_ID) + * @subdevice: Subsystem device ID (or CDX_ANY_ID) + * @class: Device class + * Most drivers do not need to specify class/class_mask + * as vendor/device is normally sufficient. + * @class_mask: Limit which sub-fields of the class field are compared. * @override_only: Match only when dev->driver_override is this driver. * * Type of entries in the "device Id" table for CDX devices supported by @@ -943,6 +949,10 @@ enum { struct cdx_device_id { __u16 vendor; __u16 device; + __u16 subvendor; + __u16 subdevice; + __u32 class; + __u32 class_mask; __u32 override_only; }; diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c index abe65f8968dd..7a659aa3114a 100644 --- a/scripts/mod/devicetable-offsets.c +++ b/scripts/mod/devicetable-offsets.c @@ -265,6 +265,10 @@ int main(void) DEVID(cdx_device_id); DEVID_FIELD(cdx_device_id, vendor); DEVID_FIELD(cdx_device_id, device); + DEVID_FIELD(cdx_device_id, subvendor); + DEVID_FIELD(cdx_device_id, subdevice); + DEVID_FIELD(cdx_device_id, class); + DEVID_FIELD(cdx_device_id, class_mask); DEVID_FIELD(cdx_device_id, override_only); return 0; diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 38120f932b0d..abc4781d5db7 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -1458,6 +1458,10 @@ static int do_cdx_entry(const char *filename, void *symval, { DEF_FIELD(symval, cdx_device_id, vendor); DEF_FIELD(symval, cdx_device_id, device); + DEF_FIELD(symval, cdx_device_id, subvendor); + DEF_FIELD(symval, cdx_device_id, subdevice); + DEF_FIELD(symval, cdx_device_id, class); + DEF_FIELD(symval, cdx_device_id, class_mask); DEF_FIELD(symval, cdx_device_id, override_only); switch (override_only) { @@ -1475,6 +1479,10 @@ static int do_cdx_entry(const char *filename, void *symval, ADD(alias, "v", vendor != CDX_ANY_ID, vendor); ADD(alias, "d", device != CDX_ANY_ID, device); + ADD(alias, "sv", subvendor != CDX_ANY_ID, subvendor); + ADD(alias, "sd", subdevice != CDX_ANY_ID, subdevice); + ADD(alias, "c", class_mask == 0xFFFFFF, class); + return 1; }