Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp1551420ybi; Sat, 25 May 2019 04:39:47 -0700 (PDT) X-Google-Smtp-Source: APXvYqyiLj7pK7flBXFPASD4qwXaXFX7rNp7gufvaCZbcTNAo5KyhzbMp6ELdxr6loiyDod5CKH2 X-Received: by 2002:a17:902:8508:: with SMTP id bj8mr69694703plb.79.1558784387332; Sat, 25 May 2019 04:39:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558784387; cv=none; d=google.com; s=arc-20160816; b=W47pGDwcBmB7tgvOxXTkSYZJyZJYOstxJ8LfG63q65s9lkDMYDjKb3lueoc3aCGhpt ledsnRhWdtGHjfGesrqKX3UzXfZ7M+gxnKMrHUZz0KMWT3ftww6HVvewayA5WpYEdQZt Rp0yHAalirzN9SbCVquiGnqFar9GKi+KTXm3GJHMVMZAPjLHWzcrLwJHaeZ37DrOH6X6 hlgyHqivUXs4m2OAkLeFzI2BRf04PWiAbI9tS7KdP+QOVDQ/GzeYbCOM8z2hygrNBBOK 9b5r3RZyBy5EbmR0hm3YFBhVBX6XzZtzKxJgw1NYJxQCvh6fAtmIqsigT70H4GAfIueP MINA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:envelope-to:dkim-signature; bh=ODBPcWCnW39iI6vBjeu9DHTW4Qjuha5deFPM8IWc88U=; b=lGr41HnrCR9Yrhbe2XbmxToxxjBEIHvKxHSKqBJgTjhT9QSh0FcoAhw37zQ5xGAYSl POsak0tfyCnJmcIxSOu9JBSoZJTnQKmunm9jH5nqGwtgkuaets1cIRwOy6KD352QFXvm g+TFHuPak0GJWVYKN6psTLUzfsCUZ1MNeSFgcv5B+AGGfPTqawxl82HvAvviOGrCcgom Ymhg1Yoo5zJBZGNL0qX7xPL+ZqovtyvnYQLv+n5g/g0VB71RdeQHA7d4kIQR/SdRv0WP Mt4SyuowUYOttPPcQof2ItnBk8eW2tZIXfCR/uZ95z2gMK2Mg6AqjtkB9Fx/58VFOGk2 5e5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-onmicrosoft-com header.b=TzYPQgnt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d23si7564015pgv.513.2019.05.25.04.39.32; Sat, 25 May 2019 04:39:47 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-onmicrosoft-com header.b=TzYPQgnt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727036AbfEYLiH (ORCPT + 99 others); Sat, 25 May 2019 07:38:07 -0400 Received: from mail-eopbgr770059.outbound.protection.outlook.com ([40.107.77.59]:13666 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726959AbfEYLhu (ORCPT ); Sat, 25 May 2019 07:37:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ODBPcWCnW39iI6vBjeu9DHTW4Qjuha5deFPM8IWc88U=; b=TzYPQgnttrYj/sKTO3n4Iq+Fnpm/OwXaogsZeVPIVcfn8m1+xpa/8+KIYZHaY2qE3AIm0mxpI6grhfQopw6z6wf9don/5H2wH8TKLeXLqV8oWyOO/Jfq2en9S79+XsHKEiS3ISXctW6S2Amw5bOq1Q8y7blOzec0+eLn6dvlPvM= Received: from CY4PR02CA0024.namprd02.prod.outlook.com (2603:10b6:903:18::34) by BN6PR02MB2676.namprd02.prod.outlook.com (2603:10b6:404:fa::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1922.16; Sat, 25 May 2019 11:37:45 +0000 Received: from SN1NAM02FT047.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e44::208) by CY4PR02CA0024.outlook.office365.com (2603:10b6:903:18::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1922.16 via Frontend Transport; Sat, 25 May 2019 11:37:44 +0000 Authentication-Results: spf=pass (sender IP is 149.199.80.198) smtp.mailfrom=xilinx.com; arndb.de; dkim=none (message not signed) header.d=none;arndb.de; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.80.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.80.198; helo=xir-pvapexch01.xlnx.xilinx.com; Received: from xir-pvapexch01.xlnx.xilinx.com (149.199.80.198) by SN1NAM02FT047.mail.protection.outlook.com (10.152.72.201) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.1922.16 via Frontend Transport; Sat, 25 May 2019 11:37:44 +0000 Received: from xir-pvapexch01.xlnx.xilinx.com (172.21.17.15) by xir-pvapexch01.xlnx.xilinx.com (172.21.17.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1531.3; Sat, 25 May 2019 12:37:34 +0100 Received: from smtp.xilinx.com (172.21.105.198) by xir-pvapexch01.xlnx.xilinx.com (172.21.17.15) with Microsoft SMTP Server id 15.1.1531.3 via Frontend Transport; Sat, 25 May 2019 12:37:34 +0100 Envelope-to: arnd@arndb.de, gregkh@linuxfoundation.org, michal.simek@xilinx.com, linux-arm-kernel@lists.infradead.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dragan.cvetic@xilinx.com, derek.kiernan@xilinx.com Received: from [149.199.110.15] (port=57194 helo=xirdraganc40.xilinx.com) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1hUUzW-00058U-Og; Sat, 25 May 2019 12:37:34 +0100 From: Dragan Cvetic To: , , , , , , CC: , Dragan Cvetic , Derek Kiernan Subject: [PATCH V4 08/12] misc: xilinx_sdfec: Add ability to get/set config Date: Sat, 25 May 2019 12:37:21 +0100 Message-ID: <1558784245-108751-9-git-send-email-dragan.cvetic@xilinx.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1558784245-108751-1-git-send-email-dragan.cvetic@xilinx.com> References: <1558784245-108751-1-git-send-email-dragan.cvetic@xilinx.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.80.198;IPV:CAL;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(39860400002)(396003)(346002)(136003)(376002)(2980300002)(199004)(189003)(5660300002)(4326008)(76176011)(9786002)(356004)(6666004)(8936002)(246002)(50226002)(8676002)(107886003)(36756003)(48376002)(305945005)(2906002)(50466002)(51416003)(486006)(2616005)(336012)(44832011)(446003)(426003)(76130400001)(476003)(71366001)(956004)(126002)(16586007)(106002)(7696005)(36906005)(11346002)(26005)(7636002)(54906003)(110136005)(186003)(60926002)(47776003)(28376004)(70586007)(2201001)(26826003)(14444005)(316002)(70206006)(478600001)(102446001)(461764006);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR02MB2676;H:xir-pvapexch01.xlnx.xilinx.com;FPR:;SPF:Pass;LANG:en;PTR:unknown-80-198.xilinx.com;A:1;MX:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f8416e13-ee46-4378-b470-08d6e105677f X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600148)(711020)(4605104)(4709054)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328);SRVR:BN6PR02MB2676; X-MS-TrafficTypeDiagnostic: BN6PR02MB2676: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1850; X-Forefront-PRVS: 0048BCF4DA X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: bxaZPZshMOgfCochEPy9eUwcKol4PQ10f5iT55G/6UIhh/+gcB60iW4L38BhA/f2YtKvU2vw2ORja8ZgshAPhxiNsr+kxKTWJdJsMylPGhH+KNDLApf6lbtLD8ZdOhFOUZUhBYG/M8xpRAMnMb10kHsuD5u95xOKHFT4IM90KeSNSCkoCI453IaIG8uebHpf6UwcviCx1gY4+8OBcf/sUxTzbuiE/3IG7ARCSfcLNLgrKWONOt1Vymh/XzQwHkCJTzUEUfUPa6tNinVZ8GFQUW7rxj3sFTTIzB+AXf3Udt9WYsDmR+d7+lKiTFCFQUwlbngqU5DLMBf01l5wwqg43QKlhmY0z9gAdWGFfQFrTAMVg2ajqNm9l6CNyO8CDjjeyJ7SKS+IiZWxJUfYFNNcXRvGTnUZbJ9n1oXhS+1KJlU= X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 May 2019 11:37:44.3274 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f8416e13-ee46-4378-b470-08d6e105677f X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.80.198];Helo=[xir-pvapexch01.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR02MB2676 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org - Add capability to get SD-FEC config data using ioctl XSDFEC_GET_CONFIG. - Add capability to set SD-FEC data order using ioctl SDFEC_SET_ORDER. - Add capability to set SD-FEC bypass option using ioctl XSDFEC_SET_BYPASS. - Add capability to set SD-FEC active state using ioctl XSDFEC_IS_ACTIVE. Tested-by: Dragan Cvetic Signed-off-by: Derek Kiernan Signed-off-by: Dragan Cvetic --- drivers/misc/xilinx_sdfec.c | 99 ++++++++++++++++++++++++++++++++++++++++ include/uapi/misc/xilinx_sdfec.h | 57 +++++++++++++++++++++++ 2 files changed, 156 insertions(+) diff --git a/drivers/misc/xilinx_sdfec.c b/drivers/misc/xilinx_sdfec.c index 8a84963..f1c96c7 100644 --- a/drivers/misc/xilinx_sdfec.c +++ b/drivers/misc/xilinx_sdfec.c @@ -275,6 +275,17 @@ static int xsdfec_dev_release(struct inode *iptr, struct file *fptr) return 0; } +static int xsdfec_get_config(struct xsdfec_dev *xsdfec, void __user *arg) +{ + int err; + + err = copy_to_user(arg, &xsdfec->config, sizeof(xsdfec->config)); + if (err) + err = -EFAULT; + + return err; +} + static int xsdfec_set_turbo(struct xsdfec_dev *xsdfec, void __user *arg) { struct xsdfec_turbo turbo; @@ -601,6 +612,82 @@ static int xsdfec_add_ldpc(struct xsdfec_dev *xsdfec, void __user *arg) return ret; } +static int xsdfec_set_order(struct xsdfec_dev *xsdfec, void __user *arg) +{ + bool order_invalid; + enum xsdfec_order order; + int err; + + err = get_user(order, (enum xsdfec_order *)arg); + if (err) + return -EFAULT; + + order_invalid = (order != XSDFEC_MAINTAIN_ORDER) && + (order != XSDFEC_OUT_OF_ORDER); + if (order_invalid) { + dev_dbg(xsdfec->dev, "%s invalid order value %d for SDFEC%d", + __func__, order, xsdfec->config.fec_id); + return -EINVAL; + } + + /* Verify Device has not started */ + if (xsdfec->state == XSDFEC_STARTED) { + dev_dbg(xsdfec->dev, + "%s attempting to set Order while started for SDFEC%d", + __func__, xsdfec->config.fec_id); + return -EIO; + } + + xsdfec_regwrite(xsdfec, XSDFEC_ORDER_ADDR, order); + + xsdfec->config.order = order; + + return 0; +} + +static int xsdfec_set_bypass(struct xsdfec_dev *xsdfec, bool __user *arg) +{ + bool bypass; + int err; + + err = get_user(bypass, arg); + if (err) + return -EFAULT; + + /* Verify Device has not started */ + if (xsdfec->state == XSDFEC_STARTED) { + dev_dbg(xsdfec->dev, + "%s attempting to set bypass while started for SDFEC%d", + __func__, xsdfec->config.fec_id); + return -EIO; + } + + if (bypass) + xsdfec_regwrite(xsdfec, XSDFEC_BYPASS_ADDR, 1); + else + xsdfec_regwrite(xsdfec, XSDFEC_BYPASS_ADDR, 0); + + xsdfec->config.bypass = bypass; + + return 0; +} + +static int xsdfec_is_active(struct xsdfec_dev *xsdfec, bool __user *arg) +{ + u32 reg_value; + bool is_active; + int err; + + reg_value = xsdfec_regread(xsdfec, XSDFEC_ACTIVE_ADDR); + /* using a double ! operator instead of casting */ + is_active = !!(reg_value & XSDFEC_IS_ACTIVITY_SET); + err = put_user(is_active, arg); + if (err) + return -EFAULT; + + return err; +} + static u32 xsdfec_translate_axis_width_cfg_val(enum xsdfec_axis_width axis_width_cfg) { @@ -686,6 +773,9 @@ static long xsdfec_dev_ioctl(struct file *fptr, unsigned int cmd, } switch (cmd) { + case XSDFEC_GET_CONFIG: + rval = xsdfec_get_config(xsdfec, arg); + break; case XSDFEC_SET_TURBO: rval = xsdfec_set_turbo(xsdfec, arg); break; @@ -695,6 +785,15 @@ static long xsdfec_dev_ioctl(struct file *fptr, unsigned int cmd, case XSDFEC_ADD_LDPC_CODE_PARAMS: rval = xsdfec_add_ldpc(xsdfec, arg); break; + case XSDFEC_SET_ORDER: + rval = xsdfec_set_order(xsdfec, arg); + break; + case XSDFEC_SET_BYPASS: + rval = xsdfec_set_bypass(xsdfec, arg); + break; + case XSDFEC_IS_ACTIVE: + rval = xsdfec_is_active(xsdfec, (bool __user *)arg); + break; default: /* Should not get here */ dev_warn(xsdfec->dev, "Undefined SDFEC IOCTL"); diff --git a/include/uapi/misc/xilinx_sdfec.h b/include/uapi/misc/xilinx_sdfec.h index bebaf0b..82e58b3 100644 --- a/include/uapi/misc/xilinx_sdfec.h +++ b/include/uapi/misc/xilinx_sdfec.h @@ -296,6 +296,19 @@ struct xsdfec_ldpc_param_table_sizes { #define XSDFEC_ADD_LDPC_CODE_PARAMS \ _IOW(XSDFEC_MAGIC, 5, struct xsdfec_ldpc_params) /** + * DOC: XSDFEC_GET_CONFIG + * @Parameters + * + * @struct xsdfec_config * + * Pointer to the &struct xsdfec_config that contains the current + * configuration settings of the SD-FEC Block + * + * @Description + * + * ioctl that returns SD-FEC core configuration + */ +#define XSDFEC_GET_CONFIG _IOR(XSDFEC_MAGIC, 6, struct xsdfec_config) +/** * DOC: XSDFEC_GET_TURBO * @Parameters * @@ -308,4 +321,48 @@ struct xsdfec_ldpc_param_table_sizes { * ioctl that returns SD-FEC turbo param values */ #define XSDFEC_GET_TURBO _IOR(XSDFEC_MAGIC, 7, struct xsdfec_turbo) +/** + * DOC: XSDFEC_SET_ORDER + * @Parameters + * + * @struct unsigned long * + * Pointer to the unsigned long that contains a value from the + * @enum xsdfec_order + * + * @Description + * + * ioctl that sets order, if order of blocks can change from input to output + * + * This can only be used when the driver is in the XSDFEC_STOPPED state + */ +#define XSDFEC_SET_ORDER _IOW(XSDFEC_MAGIC, 8, unsigned long) +/** + * DOC: XSDFEC_SET_BYPASS + * @Parameters + * + * @struct bool * + * Pointer to bool that sets the bypass value, where false results in + * normal operation and false results in the SD-FEC performing the + * configured operations (same number of cycles) but output data matches + * the input data + * + * @Description + * + * ioctl that sets bypass. + * + * This can only be used when the driver is in the XSDFEC_STOPPED state + */ +#define XSDFEC_SET_BYPASS _IOW(XSDFEC_MAGIC, 9, bool) +/** + * DOC: XSDFEC_IS_ACTIVE + * @Parameters + * + * @struct bool * + * Pointer to bool that returns true if the SD-FEC is processing data + * + * @Description + * + * ioctl that determines if SD-FEC is processing data + */ +#define XSDFEC_IS_ACTIVE _IOR(XSDFEC_MAGIC, 10, bool) #endif /* __XILINX_SDFEC_H__ */ -- 2.7.4