From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2141DC433FE for ; Fri, 14 Oct 2022 04:44:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=b47FZkIBiEWyw6zKTkumQdkRvgQfONWOf3xQRfasku8=; b=lnLnsNaBxZJQZw jUZPJ2ykPIvW1knLLydTzP3MD0HAsrjXztALJHuFCEsxCqlTVwUT7MOhiNM74ZQbFSCHQzgaJLqZb eOoybJFh9mHW1pJShke5kyjFAcFbJxLneKZQw8GQuhdOBhf68uPWfd5k3/PWzT7EwMa/7syqdCH3F vqvUctahHXqRlQKgSyg5JwRRPOuA8x1pDKIAzFw25Na07N4F/Szgwkm++BC7t9dk+MZiZqtIEJGwj yw99Em15IowdqSizCtm6RO3hZi0gvysKyuHtkzd25YU2rh+kceUaOClsuApaOR5J2Lmb7BQmX9h/y 4r7a4BrLBQIjjxKSSoMA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ojCWt-00DbbQ-2r; Fri, 14 Oct 2022 04:42:39 +0000 Received: from mail-bn7nam10on2044.outbound.protection.outlook.com ([40.107.92.44] helo=NAM10-BN7-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ojCWV-00DbR2-Cm for linux-arm-kernel@lists.infradead.org; Fri, 14 Oct 2022 04:42:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l/Ik55ox7yhg0j6riOgdY6/9XjBy9JvunPZxX3AVUq4TqCj+O1bZGBqESktbAjB6ezFNNoiP7UKftnCXimokrN26ZGZ0W1fV0UtT+u/Y8h699ub8YXYZXhmpB3tj3EkGZ9Ng6t7dTTSnzXn1a5LPUYORxo/vnY059ouTYIiYTfZDyzpGq7JUFxswuIHrp35+3xJJe0azuVcPcQtCVrdk6yAOm8ffvDspwqM0bZsgjzNbG6g5D/ryhL7uoeOtkt/kQ5X6J4GrSfpGp/uuFt3/LHJCQXvdGn3e3cdsa+P5eQO09cefkfVJVtmk/IUtaalbNpc3/zZKk2emLylrmz+6WQ== 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=+K9ehIjOh8KhbrUhtSnOdU7U6y8AO5hjycEQmg07qXo=; b=j3NGV1jgbkgHXtu+I27d4IEOqrE0NHzBo9Z4TIs9ctf9Ni6DjelLVxMBhOa+YBHPqVMJUkItIAoRUP2O5y6Qq9KuYxol04pwlz8NLUG4IQ9E+C5Wu9RITuA1JaHfUoAvlimrZFdYUbMisHYbA/9DV10VEgwG/Ozw8WHNXtEky8ai0Pgc4BpliB9UF5xG9/YEwLfguSEGOLCUgTZbfFUKyPjkiII8wzFQpt31KynCKfTydArhLETqNXcCHwvqq2AIrm/gr+dsotDR3gt5D4jKq+WVfnFSRgWD3LHUk7jcYd/ywqxbo8Mmmo/zVwg3KcuXyEssfTJqizib9bQx5Fwq0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.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=+K9ehIjOh8KhbrUhtSnOdU7U6y8AO5hjycEQmg07qXo=; b=EGqBfyUiICnbfWmcO4Z6rLQPCLRc+eeNuTtVCjIGFrNrsEHuWqJlX3xK6H4AfKKpRCiH564ogDwsaUdskYr/6PaID3HMtZ8LrsWehokzwCD4nfTQUW1+5Djcnm5MK7ca+nqkFEAF2kx1b2elH5H6RsdfgyvwnRhfTOUV4vMNeSI= Received: from MW4PR04CA0142.namprd04.prod.outlook.com (2603:10b6:303:84::27) by DM4PR12MB5102.namprd12.prod.outlook.com (2603:10b6:5:391::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.26; Fri, 14 Oct 2022 04:42:06 +0000 Received: from CO1NAM11FT038.eop-nam11.prod.protection.outlook.com (2603:10b6:303:84:cafe::b2) by MW4PR04CA0142.outlook.office365.com (2603:10b6:303:84::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.30 via Frontend Transport; Fri, 14 Oct 2022 04:42:05 +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 CO1NAM11FT038.mail.protection.outlook.com (10.13.174.231) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5723.20 via Frontend Transport; Fri, 14 Oct 2022 04:42:04 +0000 Received: from SATLEXMB08.amd.com (10.181.40.132) 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.2375.28; Thu, 13 Oct 2022 23:42:01 -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.2375.28; Thu, 13 Oct 2022 21:41:45 -0700 Received: from xhdipdslab49.xilinx.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server id 15.1.2375.28 via Frontend Transport; Thu, 13 Oct 2022 23:41:37 -0500 From: Nipun Gupta To: , , , , , , , , , , , , , , , , , , , , , , , , , , , , CC: , , , , , , Nipun Gupta Subject: [RFC PATCH v4 5/8] bus/cdx: add bus and device attributes Date: Fri, 14 Oct 2022 10:10:46 +0530 Message-ID: <20221014044049.2557085-6-nipun.gupta@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221014044049.2557085-1-nipun.gupta@amd.com> References: <20220803122655.100254-1-nipun.gupta@amd.com> <20221014044049.2557085-1-nipun.gupta@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT038:EE_|DM4PR12MB5102:EE_ X-MS-Office365-Filtering-Correlation-Id: bec3c482-4fa4-48ae-d27d-08daad9e71a4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 49qNqjiwa2zYakv6++EVlujh38hxqhEj7Fj6r39gZYHlvJVzxU2I1gc8IX061RyWVqNu0tXP+aJivxWOLdY0Rfun61eDgsrtxmQoa4GMx2sE1ee+NZhbBz0oHONHh/xQ72XqBHTDcgDNDWJ6SxWiEoCGnBLQAD5jr6/JFBRN7iiDJ4xCs2YWOpEBiadmQ+LeS70aNHDZT9iElLU7JVQapaF1oWOvc0+lpnF9AV9Jnk8goj7xatNo/q+F33agokB3JjWzn537YBTJofIf4lp0GXOXmnjCBDHEyo6mDKjp90zG/qdPp5IWctgoj1AHwhfTurt4uB1fdyWCcgS3xKZ2pTBGBo3kkHpQTX7yjWy09BneoGkgwOw6UtCzM3+vzIUnBbXpIBxKVBG5VQJYew36W7B+t7g3kSUpXB4ERk2xr+e+8Oa7QPUecb3LBSJNN3yWtlMCCLJLefliiFeyg41EecuWK71bu0GR0CTRDCnSSpaOZIJHIm7ZAatwsypBs2is+VA/cDRdhkDuH8x7Cn7KN6wR8m+n9+eQdR2wxgTKGoETZDhlCdeWipCO8VFEe+nY4Mjs0GiOgzpV4et6fBMIBngPDqkOznnFJeF7ztR4Wss9U1lMGn9T5x9oAg4No10xmaxuDM9mZXOumLsrx1WEfMLd62RpgplhaCAe8zRR4m3ccmXxbK+kgGIeCJM2cfGorWp9e/rAfwK8r5OcPokwsbexb/2mZpvASoH2R+LCMpfbQ0IcRaf92NbvmtRvVYfOl/R3tBq67WT/HlmE753xocXE6sq5q9Ur4rPOpxN0t9r/jqkWFoaPDu8xGkjVHOFHMl99Pmv4Wnw5brHCGv8oepuj7n8gCYbEq3bUMkUaVYZQU1Q8d+YLeM5D8dKHtMGM 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:(13230022)(4636009)(396003)(136003)(376002)(39860400002)(346002)(451199015)(36840700001)(40470700004)(46966006)(5660300002)(336012)(44832011)(7416002)(186003)(2906002)(2616005)(47076005)(82310400005)(356005)(41300700001)(26005)(8936002)(1076003)(921005)(40480700001)(426003)(86362001)(40460700003)(83380400001)(36756003)(36860700001)(82740400003)(316002)(54906003)(110136005)(81166007)(478600001)(4326008)(70206006)(8676002)(70586007)(6666004)(36900700001)(2101003)(83996005);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Oct 2022 04:42:04.7692 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bec3c482-4fa4-48ae-d27d-08daad9e71a4 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: CO1NAM11FT038.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5102 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221013_214215_451606_1F6CED2B X-CRM114-Status: GOOD ( 18.86 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org This change adds te support for rescanning and reset of the CDX buses, as well as option to reset any device on the bus. It also enables sysfs entry for vendor id and device id. Sysfs entries are provided in CDX controller: - rescan of the CDX controller. - reset all the devices present on CDX buses. Sysfs entry is provided in each of the platform device detected by the CDX controller - vendor id - device id - modalias - reset of the device. Signed-off-by: Puneet Gupta Signed-off-by: Nipun Gupta --- drivers/bus/cdx/cdx.c | 158 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/drivers/bus/cdx/cdx.c b/drivers/bus/cdx/cdx.c index b2a7e0b34df8..41c61bf6d5f0 100644 --- a/drivers/bus/cdx/cdx.c +++ b/drivers/bus/cdx/cdx.c @@ -107,6 +107,12 @@ static int cdx_unregister_device(struct device *dev, return 0; } +static void cdx_unregister_devices(struct bus_type *bus) +{ + /* Reset all the devices attached to cdx bus */ + bus_for_each_dev(bus, NULL, NULL, cdx_unregister_device); +} + /** * cdx_match_one_device - Tell if a CDX device structure has a matching * CDX device id structure @@ -196,11 +202,163 @@ static int cdx_dma_configure(struct device *dev) return 0; } +static ssize_t vendor_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct cdx_device *cdx_dev = to_cdx_device(dev); + + return sprintf(buf, "0x%x\n", cdx_dev->vendor); +} +static DEVICE_ATTR_RO(vendor); + +static ssize_t device_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct cdx_device *cdx_dev = to_cdx_device(dev); + + return sprintf(buf, "0x%x\n", cdx_dev->device); +} +static DEVICE_ATTR_RO(device); + +static ssize_t reset_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + int ret = 0; + bool reset = count > 0 && *buf != '0'; + + if (!reset) + return count; + + ret = reset_cdx_device(dev, NULL); + if (ret) + return ret; + + return count; +} +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%08Xd%d\n", cdx_dev->vendor, + cdx_dev->device); +} +static DEVICE_ATTR_RO(modalias); + +static ssize_t driver_override_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct cdx_device *cdx_dev = to_cdx_device(dev); + const char *old = cdx_dev->driver_override; + char *driver_override; + char *cp; + + if (WARN_ON(dev->bus != &cdx_bus_type)) + return -EINVAL; + + if (count >= (PAGE_SIZE - 1)) + return -EINVAL; + + driver_override = kstrndup(buf, count, GFP_KERNEL); + if (!driver_override) + return -ENOMEM; + + cp = strchr(driver_override, '\n'); + if (cp) + *cp = '\0'; + + if (strlen(driver_override)) { + cdx_dev->driver_override = driver_override; + } else { + kfree(driver_override); + cdx_dev->driver_override = NULL; + } + + kfree(old); + + return count; +} + +static ssize_t driver_override_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct cdx_device *cdx_dev = to_cdx_device(dev); + + return snprintf(buf, PAGE_SIZE, "%s\n", cdx_dev->driver_override); +} +static DEVICE_ATTR_RW(driver_override); + +static struct attribute *cdx_dev_attrs[] = { + &dev_attr_reset.attr, + &dev_attr_vendor.attr, + &dev_attr_device.attr, + &dev_attr_modalias.attr, + &dev_attr_driver_override.attr, + NULL, +}; +ATTRIBUTE_GROUPS(cdx_dev); + +static ssize_t rescan_store(struct bus_type *bus, + const char *buf, size_t count) +{ + bool rescan = count > 0 && *buf != '0'; + int ret = 0; + + if (!rescan) + return count; + + if (!cdx_controller) + return -EINVAL; + + /* Unregister all the devices on the bus */ + cdx_unregister_devices(&cdx_bus_type); + + /* Rescan all the devices */ + ret = cdx_controller->ops.scan(cdx_controller); + if (ret) + return ret; + + return count; +} +static BUS_ATTR_WO(rescan); + +static ssize_t reset_all_store(struct bus_type *bus, + const char *buf, size_t count) +{ + bool reset = count > 0 && *buf != '0'; + int ret = 0; + + if (!reset) + return count; + + /* 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_rescan.attr, + &bus_attr_reset_all.attr, + NULL, +}; +ATTRIBUTE_GROUPS(cdx_bus); + struct bus_type cdx_bus_type = { .name = "cdx", .match = cdx_bus_match, .remove = cdx_remove, .dma_configure = cdx_dma_configure, + .dev_groups = cdx_dev_groups, + .bus_groups = cdx_bus_groups, }; EXPORT_SYMBOL_GPL(cdx_bus_type); -- 2.25.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel