From patchwork Wed Mar 6 10:00:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1052219 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="HglFa2D6"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44Dq5q1B3rz9s7T for ; Wed, 6 Mar 2019 21:01:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729957AbfCFKA6 (ORCPT ); Wed, 6 Mar 2019 05:00:58 -0500 Received: from mail-eopbgr80077.outbound.protection.outlook.com ([40.107.8.77]:12512 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729791AbfCFKA5 (ORCPT ); Wed, 6 Mar 2019 05:00:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tQ+2tC6AxaMqxzQcePJSsACdlk6ZPcs3B4lShio9FnI=; b=HglFa2D6UKSj0HrGn+P35pbmfjTgp9lhQO0jFfO+AFWnP3lMTt6rO7pPe+V9Npt4aq9Y/y+vODU7uQiEkH7XQ9hhnhJZu7ghwXh8KqNvKEsYl4xqBzo2QjCf1CDFOFh3vaIyxDRmc1ZrjmVDu2xGrqy2pp2LvGvgbwnIDgfvSwY= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.138.152) by DB7PR04MB5404.eurprd04.prod.outlook.com (20.178.104.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 10:00:54 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39%4]) with mapi id 15.20.1686.018; Wed, 6 Mar 2019 10:00:54 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: dl-linux-imx , "wg@grandegger.com" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Aisheng Dong , Joakim Zhang Subject: [PATCH RESEND 1/5] can: rx-offload: add CANFD support based on offload Thread-Topic: [PATCH RESEND 1/5] can: rx-offload: add CANFD support based on offload Thread-Index: AQHU1AN8hwcnVcoayUmVLrX8wATScQ== Date: Wed, 6 Mar 2019 10:00:53 +0000 Message-ID: <20190306095833.20922-2-qiangqing.zhang@nxp.com> References: <20190306095833.20922-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190306095833.20922-1-qiangqing.zhang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: SG2PR02CA0106.apcprd02.prod.outlook.com (2603:1096:4:92::22) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:36::24) authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiangqing.zhang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b37bd0d3-ec6b-4f13-c2b4-08d6a21a9ed3 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB7PR04MB5404; x-ms-traffictypediagnostic: DB7PR04MB5404: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BDB7PR04MB5404=3B23?= =?iso-8859-1?q?=3AYhMl2WLIm6V+IVjUWOYiFUiFCNBS43TgiauRtMligYFgECDM?= =?iso-8859-1?q?IoSlca6O3Ov39+TSPLpl0fRxiI0EGZNEw7hFj1kTFRzFtLM5dNX?= =?iso-8859-1?q?M1u0k6PeNpb0oJmbgYidsxG8O/Ohm3uyGQFC2twRo5HOz5B/tm4?= =?iso-8859-1?q?cVa8qflJO2jxpQTRGjcs6xyBAjPH/nYFkDn1uHfOv9l1FMG5GBj?= =?iso-8859-1?q?u94Vs/SA8wOmvIL5i7bQYd2GgTUlN9t6qpBAw+NWUMTabUTGLU8?= =?iso-8859-1?q?5PsMBhh6GeG9oWWVFZ/4Ar8sLe7fAFA5EmxYjXCDs7JjGVcgEU3?= =?iso-8859-1?q?BAlJ4E+rILrrzmCrQ48KpzeK1fYgD4gkpjgSesMSjB6wICVlpAB?= =?iso-8859-1?q?aBfInDSYKpMPNO+So6PjvFfV8ervKbD6VNnkPiv4eX4B4uysnYV?= =?iso-8859-1?q?hgpM/osW/oRzSFqzQzKRV0AT+UR+nj6DuoLJBJsuKM9fvG5bSK6?= =?iso-8859-1?q?pOeGA14YCs6B2jjEYXc4qcPAMQYlsGfSMUeIPux8SCFqFroYImR?= =?iso-8859-1?q?EPJqusb+0uI1rMkalerIqnWPZcpC06+IcWC7Lo5hrw+y6c5Vsii?= =?iso-8859-1?q?9wg/sSJcqo/HD9g/0hiQxQDnOY7BO83R5JQcF153Fb518KdPGLy?= =?iso-8859-1?q?296383mr71KFT4OC1z09OjBFRQHMC8RDu9iIlgoKCOzF9kaCc4I?= =?iso-8859-1?q?VxC9DfaTWo2pZDK32Ys0RTGZktSukKH0JMtN82N04ruQLGKCWqN?= =?iso-8859-1?q?pu6bZzJiFD6P23g6hkE1Tq5y/x1t4+qt45CPHJPsjiyuT8xD3h5?= =?iso-8859-1?q?COxfWO5YruJWmp+0Oij5ntBUDS3rbH6Xl+oMMheCmtcMOmW/Phm?= =?iso-8859-1?q?eOTNs3O8g9mhe3rQdHFbtQmXk5I5iwoo6vhE020U3FEH1bjLqIo?= =?iso-8859-1?q?mPL28PplWzi+CfGZ/ga3P+dyyVrsFDcuSlW+1rUHW0L2P2ztFcl?= =?iso-8859-1?q?E3nN7P4Rhw2KdmtC4PRsFIKIM0vQ5XEXMvugL3LoL3t+q3LvZXO?= =?iso-8859-1?q?7VLsRWE+bWpf7lZ1u5U413q1kZbgPwWpvoZsxqjEDxcRTwH8qXL?= =?iso-8859-1?q?KzrndUVL7MGUhD/acH3dBOu9DY97hBzHo6p/rr5hk0msX3JTBhY?= =?iso-8859-1?q?v6Li5WX2JLi4b+qA/yqZo7Af2179lDBwJ6i0CrHO3SSRH99mbSM?= =?iso-8859-1?q?FRpQ5r/FOS+NkUpJ5PGh+MRIKcAB0qz8q7zDi0EWykZ50wm06M3?= =?iso-8859-1?q?6taKQxPkutTsx4bUX2vM9Z10A4hBcqX6/V69Uv/KxURTd/ixE+x?= =?iso-8859-1?q?Oneo+8xus9jzSbQW0VCIKLTmGs3CP9YACiuBvo=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(136003)(39860400002)(366004)(396003)(199004)(189003)(54906003)(6436002)(99286004)(8936002)(26005)(305945005)(186003)(4326008)(36756003)(6506007)(102836004)(11346002)(105586002)(446003)(2616005)(486006)(256004)(14444005)(106356001)(386003)(2906002)(71190400001)(25786009)(2501003)(1076003)(71200400001)(476003)(52116002)(81156014)(97736004)(81166006)(6116002)(3846002)(14454004)(68736007)(5660300002)(8676002)(6512007)(110136005)(316002)(53936002)(76176011)(478600001)(50226002)(86362001)(66066001)(7736002)(6486002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB5404; H:DB7PR04MB4618.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ibZTm7lQi/n2FZA7DiypmqIv8Wy0Rtppacq1epL1KVaDWrB3KGX2hfwLaYUJUjkU9VZ0WpvFIKcBSOe+fmKYDhmEFFTPnHDxslHCJYBQ3W0K+yVatDO/h3ikBMH4EzgM7cRVl4LtOkzD8DaKw62PxOPdxuJG4ThKiBNDd1oJP083lkbtJ9LGs4DbRE3ptXqQlGyMZFWswAQm+V3+v4c7oDCUZvLb5r4n4DbC9m3pOvzzeKL5d4FAEYJEELOUQ9troqSzJCbxLIZaoiqk2efqL1pFZChWJZyPOUHi4UnAZvKP6/77QFFCONJ1wGXNsWYg+aZP/TfLM9hOyZ7/ch/PVYUm33M4EQXfQ7LaMWgSjxgkwXPYQMrEWRscgX8hiGMTNPiYnE07yjkDCgIH7cfJioymIAb0pNWPJtD9q9/b534= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b37bd0d3-ec6b-4f13-c2b4-08d6a21a9ed3 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 10:00:53.9573 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5404 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dong Aisheng Using struct canfd_frame instead of can_frame to add support for CAN FD mode in offload. FlexCAN controller will set the is_canfd variable when it supports CAN FD mode. Signed-off-by: Dong Aisheng Signed-off-by: Joakim Zhang --- drivers/net/can/rx-offload.c | 16 ++++++++++------ include/linux/can/rx-offload.h | 4 +++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/net/can/rx-offload.c b/drivers/net/can/rx-offload.c index 2ce4fa8698c7..131fe600deb3 100644 --- a/drivers/net/can/rx-offload.c +++ b/drivers/net/can/rx-offload.c @@ -55,11 +55,11 @@ static int can_rx_offload_napi_poll(struct napi_struct *napi, int quota) while ((work_done < quota) && (skb = skb_dequeue(&offload->skb_queue))) { - struct can_frame *cf = (struct can_frame *)skb->data; + struct canfd_frame *cf = (struct canfd_frame *)skb->data; work_done++; stats->rx_packets++; - stats->rx_bytes += cf->can_dlc; + stats->rx_bytes += cf->len; netif_receive_skb(skb); } @@ -122,16 +122,20 @@ static struct sk_buff *can_rx_offload_offload_one(struct can_rx_offload *offload { struct sk_buff *skb = NULL; struct can_rx_offload_cb *cb; - struct can_frame *cf; + struct canfd_frame *cf; int ret; /* If queue is full or skb not available, read to discard mailbox */ if (likely(skb_queue_len(&offload->skb_queue) <= - offload->skb_queue_len_max)) - skb = alloc_can_skb(offload->dev, &cf); + offload->skb_queue_len_max)) { + if (offload->is_canfd) + skb = alloc_canfd_skb(offload->dev, &cf); + else + skb = alloc_can_skb(offload->dev, (struct can_frame **)&cf); + } if (!skb) { - struct can_frame cf_overflow; + struct canfd_frame cf_overflow; u32 timestamp; ret = offload->mailbox_read(offload, &cf_overflow, diff --git a/include/linux/can/rx-offload.h b/include/linux/can/rx-offload.h index 8268811a697e..6448e7dfc170 100644 --- a/include/linux/can/rx-offload.h +++ b/include/linux/can/rx-offload.h @@ -23,7 +23,7 @@ struct can_rx_offload { struct net_device *dev; - unsigned int (*mailbox_read)(struct can_rx_offload *offload, struct can_frame *cf, + unsigned int (*mailbox_read)(struct can_rx_offload *offload, struct canfd_frame *cf, u32 *timestamp, unsigned int mb); struct sk_buff_head skb_queue; @@ -35,6 +35,8 @@ struct can_rx_offload { struct napi_struct napi; bool inc; + + bool is_canfd; }; int can_rx_offload_add_timestamp(struct net_device *dev, struct can_rx_offload *offload); From patchwork Wed Mar 6 10:00:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1052220 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="F/FFYXPa"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44Dq5v3sd8z9s7T for ; Wed, 6 Mar 2019 21:01:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730005AbfCFKBD (ORCPT ); Wed, 6 Mar 2019 05:01:03 -0500 Received: from mail-eopbgr80044.outbound.protection.outlook.com ([40.107.8.44]:15840 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729974AbfCFKBC (ORCPT ); Wed, 6 Mar 2019 05:01:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=z6al7h09oOKQg+Bm/A5PnH25LbpnXRxssqrxptcfSUk=; b=F/FFYXPaMljjynwe4rcsNkGFLGj3f4yW5brxbTlxnf/Ss+SSUc79vmtWpUTD32Xo1urp9zRR/VbFPwDs/pWU7XbnP4EE0mtb6UQpmh6hnF2MR23bWrqgvEOkoLXxJdGaTU7ET3f0t7TY71vbLE6qjSsSSOJyVzvjGFvSLmV49cU= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.138.152) by DB7PR04MB5404.eurprd04.prod.outlook.com (20.178.104.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Wed, 6 Mar 2019 10:00:57 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39%4]) with mapi id 15.20.1686.018; Wed, 6 Mar 2019 10:00:57 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: dl-linux-imx , "wg@grandegger.com" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Aisheng Dong , Joakim Zhang Subject: [PATCH RESEND 2/5] can: flexcan: add CAN FD mode support Thread-Topic: [PATCH RESEND 2/5] can: flexcan: add CAN FD mode support Thread-Index: AQHU1AN+EXBiWkG+6EWDBQkIpHmKDw== Date: Wed, 6 Mar 2019 10:00:57 +0000 Message-ID: <20190306095833.20922-3-qiangqing.zhang@nxp.com> References: <20190306095833.20922-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190306095833.20922-1-qiangqing.zhang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: SG2PR02CA0106.apcprd02.prod.outlook.com (2603:1096:4:92::22) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:36::24) authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiangqing.zhang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8baa9dbe-ba85-45f4-e731-08d6a21aa0de x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB7PR04MB5404; x-ms-traffictypediagnostic: DB7PR04MB5404: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BDB7PR04MB5404=3B23?= =?iso-8859-1?q?=3AkmC0jJ5gM47jzxliwuyKS6hNXAE4qBWt+SY8J4fMan6oYyeQ?= =?iso-8859-1?q?I0wX+ZhpmqYn1l5AzzOXq9Bhw6ZLFepQvvwX+Naka7LAkZMgNDG?= =?iso-8859-1?q?NSx6hC8Els1QAcYEFXiltdY7BOr/FxLlQCyxQa74uXQyWr1O75W?= =?iso-8859-1?q?lxcdMWqXnzhC+JOUaF38aXjUaILxAIzaEEDu4tji400hn5xivSI?= =?iso-8859-1?q?NmF+jVcPjfgyrtKeWu/XCMVQSVjvcpF2QL/SzBeHkPHapL3pzZN?= =?iso-8859-1?q?RBb/sbtNDtPy6hRK6n4wfhCggXiEex1eA57P1Gv14cDlIz94Ch5?= =?iso-8859-1?q?kG1DbMbjVnGzybzmlgOUos6Q/wxnCEHo1kHARixlocFN1R+dW1b?= =?iso-8859-1?q?Yt+lK/aPTG7wIw1Dtpxoy6eaMqCHzVDVqvuRPRJLJ4gbme/hwIU?= =?iso-8859-1?q?9f3ndw7O3Ej23bXWc0sCHzlSrMpSpnDcUYrLYz9GKvCpm5khtV2?= =?iso-8859-1?q?y1Mr+3lWIo8vMsVn33xUEyXwwQ9vt9M2Id3ZOh7Wh4tx1zZaTWb?= =?iso-8859-1?q?nyHzIPVOqhobwkvaJ1++hmM2QyRFQlwau/5XUS/YxPwZBln6btZ?= =?iso-8859-1?q?r+e1CH3J/D7o47RSCFeosCeLJjCu/rMjaCOxwPS+Vdqtsfk5evP?= =?iso-8859-1?q?nAUv2fr+tBt5yMSWG8DFlgfyC8kAwW8QWSImmiQiw7pmMJ1yfaN?= =?iso-8859-1?q?yKU4CC61QwECC0q/foxJw+oUtwEeGjeumepijge2RqyhN58WcVz?= =?iso-8859-1?q?FL0sL7s6dTxIESP+iqFvwKIwONTwz+nHnu2Uba109WAMcg+o8O4?= =?iso-8859-1?q?lIycWdFBhBsS+0ZyB3dIFChrvQ9pxqlIr1GlR8DWZrrsH/uluun?= =?iso-8859-1?q?xFAEdyjze7ZbrGaUyqkpsjNMjhY6VSsxAqKTF9vDNxvQ90b0aeE?= =?iso-8859-1?q?fyXWtpPDxORyqPsMQQ80fA6ODiIUxRoBubssJzvgL8af8uq8bgi?= =?iso-8859-1?q?26OHhny0zxXZc2dbvTsD3IkeNX4P3QTce0GKunV/4Tk3xZe0AUW?= =?iso-8859-1?q?QA/AT599eO1fteVOeAzcswxe/FDKYCV2nXNpiEzgyLyd9OLEf+u?= =?iso-8859-1?q?Lei9to/XOj5AoQqMffaoWJyO4pnRPXhyxV/qClbz1ppzpPfb6lt?= =?iso-8859-1?q?5EK3UZ88MX1mPsgjArhUt2iHU6C5bqmH5LsuzgrAwwoKNeUu3EL?= =?iso-8859-1?q?JDs0A6ipb6nOTmVKC+L9SDjfHuWTcAufnhnwv7J6Umy/2FZJ73C?= =?iso-8859-1?q?Sq+CU75IcCB/qx5YSOxy48RTq6l2lBgovVMCMt566tz/1bISPy9?= =?iso-8859-1?q?ZuMI0QJTipgPQznXgHcXwoLxoRpsUI+RsCIynQ=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(136003)(39860400002)(366004)(396003)(199004)(189003)(54906003)(6436002)(99286004)(8936002)(26005)(305945005)(186003)(4326008)(36756003)(6506007)(102836004)(11346002)(105586002)(446003)(2616005)(486006)(256004)(14444005)(106356001)(386003)(2906002)(71190400001)(25786009)(2501003)(1076003)(71200400001)(476003)(52116002)(81156014)(97736004)(81166006)(6116002)(3846002)(14454004)(68736007)(5660300002)(8676002)(6512007)(110136005)(316002)(53936002)(76176011)(478600001)(50226002)(86362001)(66066001)(7736002)(6486002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB5404; H:DB7PR04MB4618.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: F3vb0wb1jKTCMzryuTcj1J+w11quHgrd3Nak2iw7L5X6qwIKHWcWyx90yD4s3YjNALxqaZFyNgDP/3T7pwsC/VO+w4r9SNeZ6jtHGRECYzGQdW5rtUhNEbt0bndor11JyrRlO2JRMGU0fDsllTe1+UV5me+AIYXFE1dY47OCMnGt/UKi3gyE4tQI9AlO+UgEZN+8HU/wHCYk1b3X4y7urxyD8cttA4aDHjdJnIjfInTBCvbK3h2AcRkTUfoBzjPJ/LooDstVYAyGL9oqeYfBuIBQ/HI1OIzj72ewNkVr/3n6SFomePtpYMy3oYvm3oD/5/aoiGBBk3wcbOV1CXE+F++EJCR1oSWDspvZJVP6WcgrA3PtkDABKv9b7EjlUnXrweyDEZLWUQbQijIqeMh88pVWuYljOu8sRy82udAhLDk= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8baa9dbe-ba85-45f4-e731-08d6a21aa0de X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 10:00:57.5208 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5404 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dong Aisheng This patch intends to add CAN FD mode support in driver, it means that payload size can extend up to 64 bytes. NOTE: Bit rate switch (BRS) enabled by system reset when it enables CAN FD mode (explicitly set BRS again in driver). So CAN hardware has support BRS, but now driver has not support it due to bit timing must set in CBT register other than CTRL1 register. It will add in next patch. Signed-off-by: Dong Aisheng Signed-off-by: Joakim Zhang --- drivers/net/can/flexcan.c | 109 ++++++++++++++++++++++++++++++++++---- 1 file changed, 99 insertions(+), 10 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index e35083ff31ee..eee0c23bb805 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -52,6 +52,7 @@ #define FLEXCAN_MCR_IRMQ BIT(16) #define FLEXCAN_MCR_LPRIO_EN BIT(13) #define FLEXCAN_MCR_AEN BIT(12) +#define FLEXCAN_MCR_FDEN BIT(11) /* MCR_MAXMB: maximum used MBs is MAXMB + 1 */ #define FLEXCAN_MCR_MAXMB(x) ((x) & 0x7f) #define FLEXCAN_MCR_IDAM_A (0x0 << 8) @@ -137,6 +138,20 @@ FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT | \ FLEXCAN_ESR_WAK_INT) +/* FLEXCAN FD control register (FDCTRL) bits */ +#define FLEXCAN_FDCTRL_FDRATE BIT(31) +#define FLEXCAN_FDCTRL_MBDSR3(x) (((x) & 0x3) << 25) +#define FLEXCAN_FDCTRL_MBDSR2(x) (((x) & 0x3) << 22) +#define FLEXCAN_FDCTRL_MBDSR1(x) (((x) & 0x3) << 19) +#define FLEXCAN_FDCTRL_MBDSR0(x) (((x) & 0x3) << 16) + +/* FLEXCAN FD Bit Timing register (FDCBT) bits */ +#define FLEXCAN_FDCBT_FPRESDIV(x) (((x) & 0x3ff) << 20) +#define FLEXCAN_FDCBT_FRJW(x) (((x) & 0x07) << 16) +#define FLEXCAN_FDCBT_FPROPSEG(x) (((x) & 0x1f) << 10) +#define FLEXCAN_FDCBT_FPSEG1(x) (((x) & 0x07) << 5) +#define FLEXCAN_FDCBT_FPSEG2(x) ((x) & 0x07) + /* FLEXCAN interrupt flag register (IFLAG) bits */ /* Errata ERR005829 step7: Reserve first valid MB */ #define FLEXCAN_TX_MB_RESERVED_OFF_FIFO 8 @@ -148,6 +163,10 @@ #define FLEXCAN_IFLAG_RX_FIFO_AVAILABLE BIT(5) /* FLEXCAN message buffers */ +#define FLEXCAN_MB_CNT_EDL BIT(31) +#define FLEXCAN_MB_CNT_BRS BIT(30) +#define FLEXCAN_MB_CNT_ESI BIT(29) + #define FLEXCAN_MB_CODE_MASK (0xf << 24) #define FLEXCAN_MB_CODE_RX_BUSY_BIT (0x1 << 24) #define FLEXCAN_MB_CODE_RX_INACTIVE (0x0 << 24) @@ -192,6 +211,7 @@ #define FLEXCAN_QUIRK_BROKEN_PERR_STATE BIT(6) /* No interrupt for error passive */ #define FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN BIT(7) /* default to BE register access */ #define FLEXCAN_QUIRK_SETUP_STOP_MODE BIT(8) /* Setup stop mode to support wakeup */ +#define FLEXCAN_QUIRK_TIMESTAMP_SUPPORT_FD BIT(9) /* Use timestamp then support can fd mode */ /* Structure of the message buffer */ struct flexcan_mb { @@ -250,6 +270,9 @@ struct flexcan_regs { u32 rerrdr; /* 0xaf4 */ u32 rerrsynr; /* 0xaf8 */ u32 errsr; /* 0xafc */ + u32 _reserved7[64]; /* 0xb00 */ + u32 fdctrl; /* 0xc00 */ + u32 fdcbt; /* 0xc04 */ }; struct flexcan_devtype_data { @@ -337,6 +360,18 @@ static const struct can_bittiming_const flexcan_bittiming_const = { .brp_inc = 1, }; +static const struct can_bittiming_const flexcan_fd_data_bittiming_const = { + .name = DRV_NAME, + .tseg1_min = 1, + .tseg1_max = 39, + .tseg2_min = 1, + .tseg2_max = 8, + .sjw_max = 8, + .brp_min = 1, + .brp_max = 1024, + .brp_inc = 1, +}; + /* FlexCAN module is essentially modelled as a little-endian IP in most * SoCs, i.e the registers as well as the message buffer areas are * implemented in a little-endian fashion. @@ -609,10 +644,10 @@ static int flexcan_get_berr_counter(const struct net_device *dev, static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) { const struct flexcan_priv *priv = netdev_priv(dev); - struct can_frame *cf = (struct can_frame *)skb->data; + struct canfd_frame *cf = (struct canfd_frame *)skb->data; u32 can_id; u32 data; - u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | (cf->can_dlc << 16); + u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | ((can_len2dlc(cf->len)) << 16); int i; if (can_dropped_invalid_skb(dev, skb)) @@ -630,7 +665,10 @@ static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *de if (cf->can_id & CAN_RTR_FLAG) ctrl |= FLEXCAN_MB_CNT_RTR; - for (i = 0; i < cf->can_dlc; i += sizeof(u32)) { + if (can_is_canfd_skb(skb)) + ctrl |= FLEXCAN_MB_CNT_EDL; + + for (i = 0; i < cf->len; i += sizeof(u32)) { data = be32_to_cpup((__be32 *)&cf->data[i]); priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]); } @@ -790,7 +828,7 @@ static inline struct flexcan_priv *rx_offload_to_priv(struct can_rx_offload *off } static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, - struct can_frame *cf, + struct canfd_frame *cf, u32 *timestamp, unsigned int n) { struct flexcan_priv *priv = rx_offload_to_priv(offload); @@ -836,11 +874,21 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, else cf->can_id = (reg_id >> 18) & CAN_SFF_MASK; - if (reg_ctrl & FLEXCAN_MB_CNT_RTR) - cf->can_id |= CAN_RTR_FLAG; - cf->can_dlc = get_can_dlc((reg_ctrl >> 16) & 0xf); + if (reg_ctrl & FLEXCAN_MB_CNT_EDL) { + cf->len = can_dlc2len((reg_ctrl >> 16) & 0x0F); + } else { + cf->len = get_can_dlc((reg_ctrl >> 16) & 0x0F); + + if (reg_ctrl & FLEXCAN_MB_CNT_RTR) + cf->can_id |= CAN_RTR_FLAG; + } + + if (reg_ctrl & FLEXCAN_MB_CNT_ESI) { + cf->flags |= CANFD_ESI; + netdev_warn(priv->can.dev, "ESI Error\n"); + } - for (i = 0; i < cf->can_dlc; i += sizeof(u32)) { + for (i = 0; i < cf->len; i += sizeof(u32)) { __be32 data = cpu_to_be32(priv->read(&mb->data[i / sizeof(u32)])); *(__be32 *)(cf->data + i) = data; } @@ -985,6 +1033,7 @@ static void flexcan_set_bittiming(struct net_device *dev) { const struct flexcan_priv *priv = netdev_priv(dev); const struct can_bittiming *bt = &priv->can.bittiming; + const struct can_bittiming *dbt = &priv->can.data_bittiming; struct flexcan_regs __iomem *regs = priv->regs; u32 reg; @@ -1014,6 +1063,15 @@ static void flexcan_set_bittiming(struct net_device *dev) netdev_dbg(dev, "writing ctrl=0x%08x\n", reg); priv->write(reg, ®s->ctrl); + if (priv->can.ctrlmode & CAN_CTRLMODE_FD) { + reg = FLEXCAN_FDCBT_FPRESDIV(dbt->brp - 1) | + FLEXCAN_FDCBT_FPSEG1(dbt->phase_seg1 - 1) | + FLEXCAN_FDCBT_FPSEG2(dbt->phase_seg2 - 1) | + FLEXCAN_FDCBT_FRJW(dbt->sjw - 1) | + FLEXCAN_FDCBT_FPROPSEG(dbt->prop_seg); + priv->write(reg, ®s->fdcbt); + } + /* print chip status */ netdev_dbg(dev, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, priv->read(®s->mcr), priv->read(®s->ctrl)); @@ -1028,7 +1086,7 @@ static int flexcan_chip_start(struct net_device *dev) { struct flexcan_priv *priv = netdev_priv(dev); struct flexcan_regs __iomem *regs = priv->regs; - u32 reg_mcr, reg_ctrl, reg_ctrl2, reg_mecr; + u32 reg_mcr, reg_ctrl, reg_ctrl2, reg_mecr, reg_fdctrl; u64 reg_imask; int err, i; struct flexcan_mb __iomem *mb; @@ -1125,6 +1183,22 @@ static int flexcan_chip_start(struct net_device *dev) netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); priv->write(reg_ctrl, ®s->ctrl); + /* FDCTRL + * + * support BRS when set CAN FD mode + * 64 bytes payload per MB and 7 MBs per RAM block by default + * enable CAN FD mode + */ + if (priv->can.ctrlmode & CAN_CTRLMODE_FD) { + reg_fdctrl = priv->read(®s->fdctrl); + reg_fdctrl |= FLEXCAN_FDCTRL_FDRATE; + reg_fdctrl |= FLEXCAN_FDCTRL_MBDSR3(3) | FLEXCAN_FDCTRL_MBDSR2(3) | + FLEXCAN_FDCTRL_MBDSR1(3) | FLEXCAN_FDCTRL_MBDSR0(3); + priv->write(reg_fdctrl, ®s->fdctrl); + reg_mcr = priv->read(®s->mcr); + priv->write(reg_mcr | FLEXCAN_MCR_FDEN, ®s->mcr); + } + if ((priv->devtype_data->quirks & FLEXCAN_QUIRK_ENABLE_EACEN_RRS)) { reg_ctrl2 = priv->read(®s->ctrl2); reg_ctrl2 |= FLEXCAN_CTRL2_EACEN | FLEXCAN_CTRL2_RRS; @@ -1261,7 +1335,10 @@ static int flexcan_open(struct net_device *dev) if (err) goto out_close; - priv->mb_size = sizeof(struct flexcan_mb) + CAN_MAX_DLEN; + if (priv->can.ctrlmode & CAN_CTRLMODE_FD) + priv->mb_size = sizeof(struct flexcan_mb) + CANFD_MAX_DLEN; + else + priv->mb_size = sizeof(struct flexcan_mb) + CAN_MAX_DLEN; priv->mb_count = (sizeof(priv->regs->mb[0]) / priv->mb_size) + (sizeof(priv->regs->mb[1]) / priv->mb_size); @@ -1600,6 +1677,18 @@ static int flexcan_probe(struct platform_device *pdev) priv->clk_src = clk_src; priv->devtype_data = devtype_data; priv->reg_xceiver = reg_xceiver; + priv->offload.is_canfd = false; + + if (priv->devtype_data->quirks & FLEXCAN_QUIRK_TIMESTAMP_SUPPORT_FD) { + if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { + priv->offload.is_canfd = true; + priv->can.ctrlmode_supported |= CAN_CTRLMODE_FD; + priv->can.data_bittiming_const = &flexcan_fd_data_bittiming_const; + } else { + dev_err(&pdev->dev, "canfd mode can't work on fifo mode\n"); + err = -EINVAL; + } + } pm_runtime_get_noresume(&pdev->dev); pm_runtime_set_active(&pdev->dev); From patchwork Wed Mar 6 10:01:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1052222 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="RBPB9oZq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44Dq6F190Xz9s70 for ; Wed, 6 Mar 2019 21:01:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730050AbfCFKBN (ORCPT ); Wed, 6 Mar 2019 05:01:13 -0500 Received: from mail-eopbgr00079.outbound.protection.outlook.com ([40.107.0.79]:55781 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729791AbfCFKBM (ORCPT ); Wed, 6 Mar 2019 05:01:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RetfmJWC18bDg/PuoiGdMUf0/moJDNF+h6OomEBQZ98=; b=RBPB9oZqpkAdJP/JeCH6xlhTflbS6zMSlM8ywJCsG4T+aem8NaBb+sushbVtuVV+wgQ1wmOCIIWSczLSIaYZ6EKe2dDHYMjPZTFCLmlNVu1H/8nCNMDKnI2EFyH/Z+ac5g6TUHYNB5Gw82fw1LOTq3AxLqTZ027iggJXG9lNGgk= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.138.152) by DB7PR04MB4763.eurprd04.prod.outlook.com (20.176.233.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.18; Wed, 6 Mar 2019 10:01:01 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39%4]) with mapi id 15.20.1686.018; Wed, 6 Mar 2019 10:01:01 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: dl-linux-imx , "wg@grandegger.com" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Aisheng Dong , Joakim Zhang Subject: [PATCH RESEND 3/5] can: flexcan: add CANFD BRS support and improve bittiming setting Thread-Topic: [PATCH RESEND 3/5] can: flexcan: add CANFD BRS support and improve bittiming setting Thread-Index: AQHU1AOAH9okgRdH/kW7LKgtJViqVQ== Date: Wed, 6 Mar 2019 10:01:01 +0000 Message-ID: <20190306095833.20922-4-qiangqing.zhang@nxp.com> References: <20190306095833.20922-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190306095833.20922-1-qiangqing.zhang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: SG2PR02CA0106.apcprd02.prod.outlook.com (2603:1096:4:92::22) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:36::24) authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiangqing.zhang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fa228954-5d8e-4bab-2db0-08d6a21aa32a x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB7PR04MB4763; x-ms-traffictypediagnostic: DB7PR04MB4763: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BDB7PR04MB4763=3B23?= =?iso-8859-1?q?=3AgcCaxnvakJuzRUVEG1xQD6EtrcCUeZgnx9KLGjDdsucHj1vC?= =?iso-8859-1?q?p4wGLpAC+onzut5nIaCT9ywQdCDextSdJf3Pz4+3mR6ucHcP4gB?= =?iso-8859-1?q?SuE4kgkchRefDcE9bCNA05G1CRBReHR6QjIzD/P3fwyQCBiKxK8?= =?iso-8859-1?q?ATk3wwTdDrZKfo1JyAndzQH+vndprwI1ND0f9wSncAr2mYSXN4r?= =?iso-8859-1?q?bnnJVJ6LNJxBLX94LEqNQNRaLEGsi4DMlS4R/9rQ7oDVnLBdjH7?= =?iso-8859-1?q?0/rTzZH5hVMzRCvu0QON37fPCxuPLeZTxDyhndT0YO06rR4u6ox?= =?iso-8859-1?q?XQ8A07zklX3NLf/RpmOY77hHDbu81T2p4E+CfLZappUo/i5Nu7m?= =?iso-8859-1?q?pJ8usS0tT35Vg3J/Lm3o0ZMbUo4RpoXidDTnE9J7osV5r3V3oA2?= =?iso-8859-1?q?Xe7BuFSswcJP7Km0lV4rhITZJq1KQN7XQPNoZZdJPhikTAMQPkv?= =?iso-8859-1?q?ICup/lWXc3aRTxYBeL9HDo23xA4LlBjCESE9HtDLr7KJ1G+Kp+b?= =?iso-8859-1?q?7h636qAIsAuLz++hcrpL9BDt3VW9/IRR07UewsuodFdlegXR+iF?= =?iso-8859-1?q?flhiw9cXg2GKAQPuN8+rOOiYlyuq4hV0F+a2RP4wmPJjwmn2hlE?= =?iso-8859-1?q?kiAIsNgdEDFr80Lp2W3GqQR/pV0Ri2cv4p+pJZpqPFvYi/a2jRp?= =?iso-8859-1?q?XZcmT0/5NuZ8skHf6Y0Ri1srebZqXEkj01yWUOD79d6Ca51Fyal?= =?iso-8859-1?q?ltnRf1sOu6ob9mYZnbhlD4eQEW5hcqXDHzQF4/6wRqE3g2tkDwR?= =?iso-8859-1?q?dtQzXZVvOcKhE5Swy9ZngIN1gLBJof0crG2gOApCGi8II+t8EyJ?= =?iso-8859-1?q?FshvP6h+vQJnVhVo4AqgluejwgywkNvJMwwkzfcnERiDf4o63y3?= =?iso-8859-1?q?PGw3/fT/aNS55rYsLkHu6DfdAj7aHJi60PsKrReCrZh8iVh1Wl+?= =?iso-8859-1?q?iyEfWZMrQ4FhQt/MJ3gUuhkf7oAqhXzeZC0MlETtW7433JenCfK?= =?iso-8859-1?q?kKC/LbSrV+Q3s4Nlp9pL0+Hx+Q2QZSen20szVfFD1dYRkyAYnp+?= =?iso-8859-1?q?9ItA82yk8TMXYwHAnbToouTQURrmmvPgioyC7mZqEfCcpxK/l0j?= =?iso-8859-1?q?IdGWY1RSa4GEih4fuWFjaFI3em4kTFHw9AWRNDPpfutw47L3i6T?= =?iso-8859-1?q?T2xNQCYi4wjyTVcjoSzFItPkR7F+3RFcCZBlT5/zprzYoSJ8Sud?= =?iso-8859-1?q?8Df2vCYJk/E5F8F6PmWencUo4VbnqqjKGlrr+Y4WBgPvrFQlmpp?= =?iso-8859-1?q?1mdxzl0TpH3O/eNv/smkAaswl7qVofeZN1djEOFd8kXyHbE4sbZ?= =?iso-8859-1?q?APzlF1fxkRO+gaEcphy6z0bvh5ZZp3dbjiI2Isn9ylzmfxXbXqh?= =?iso-8859-1?q?nUgsF3YIo0LJGoXKzG7pt?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(979002)(346002)(366004)(136003)(396003)(39860400002)(376002)(199004)(189003)(99286004)(2501003)(5660300002)(52116002)(71200400001)(71190400001)(53936002)(6436002)(76176011)(6512007)(1076003)(446003)(36756003)(14454004)(11346002)(476003)(2616005)(486006)(14444005)(256004)(26005)(186003)(6486002)(86362001)(386003)(6506007)(102836004)(478600001)(2906002)(7736002)(25786009)(50226002)(54906003)(106356001)(110136005)(6116002)(4326008)(105586002)(66066001)(68736007)(305945005)(8936002)(316002)(97736004)(3846002)(8676002)(81166006)(81156014)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4763; H:DB7PR04MB4618.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 604ifclKGD1Ws0GA9K/KzLblEJPXunXlurjHbkvZotyrSBp5UUaV4g5y0Q5r0oXu4U8iWcOh7zp7EJttf+VMFrJgg3llxtW9ILoxGJNDF/Oj4fjvSIZVwuZM1PmhsCwAhCmH8mG+5LARXIkWlZG1BDGKvg3nz68MtiXAssH9cTh9unbhcU66jaE6sy0iG+a3bspLzePVK6R/qj1gnZDmLdmdafDHhtVuRbCwk2FapQkeuRyU9srY2X7e9QCUklCmGTnbJWjHyVRL6vrCgmtmyVbTTS4yBqutQKKPQHvf/5XBisH/vaHoKjPi4+eUt40fjv57Hm5GJwJnIBZLw+hNEWZLhM89GoBMihKdrEHTcTO9NVY9AHPhXQkr5u3LUNE5003EF2A0TKFhaTiNWNNxqcWTwdw5ZDUrDUIf0IKDrdw= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fa228954-5d8e-4bab-2db0-08d6a21aa32a X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 10:01:01.2455 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4763 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dong Aisheng This patch intends to add CANFD BitRate Switch(BRS) support. Bit timing must be set in CBT register other than CTRL1 register when CANFD supports BRS, it will extend the range of all CAN bit timing variables (PRESDIV, PROPSEG, PSEG1, PSEG2 and RJW), which will improve the bit timing accuracy. Signed-off-by: Joakim Zhang Signed-off-by: Dong Aisheng --- drivers/net/can/flexcan.c | 107 ++++++++++++++++++++++++++++++-------- 1 file changed, 86 insertions(+), 21 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index eee0c23bb805..688bb09b8123 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -138,6 +138,14 @@ FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT | \ FLEXCAN_ESR_WAK_INT) +/* FLEXCAN Bit Timing register (CBT) bits */ +#define FLEXCAN_CBT_BTF BIT(31) +#define FLEXCAN_CBT_EPRESDIV(x) (((x) & 0x3ff) << 21) +#define FLEXCAN_CBT_ERJW(x) (((x) & 0x1f) << 16) +#define FLEXCAN_CBT_EPROPSEG(x) (((x) & 0x3f) << 10) +#define FLEXCAN_CBT_EPSEG1(x) (((x) & 0x1f) << 5) +#define FLEXCAN_CBT_EPSEG2(x) ((x) & 0x1f) + /* FLEXCAN FD control register (FDCTRL) bits */ #define FLEXCAN_FDCTRL_FDRATE BIT(31) #define FLEXCAN_FDCTRL_MBDSR3(x) (((x) & 0x3) << 25) @@ -245,7 +253,8 @@ struct flexcan_regs { u32 crcr; /* 0x44 */ u32 rxfgmask; /* 0x48 */ u32 rxfir; /* 0x4c */ - u32 _reserved3[12]; /* 0x50 */ + u32 cbt; /* 0x50 */ + u32 _reserved3[11]; /* 0x54 */ u8 mb[2][512]; /* 0x80 */ /* FIFO-mode: * MB @@ -360,6 +369,18 @@ static const struct can_bittiming_const flexcan_bittiming_const = { .brp_inc = 1, }; +static const struct can_bittiming_const flexcan_fd_bittiming_const = { + .name = DRV_NAME, + .tseg1_min = 2, + .tseg1_max = 64, + .tseg2_min = 1, + .tseg2_max = 32, + .sjw_max = 32, + .brp_min = 1, + .brp_max = 1024, + .brp_inc = 1, +}; + static const struct can_bittiming_const flexcan_fd_data_bittiming_const = { .name = DRV_NAME, .tseg1_min = 1, @@ -665,9 +686,13 @@ static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *de if (cf->can_id & CAN_RTR_FLAG) ctrl |= FLEXCAN_MB_CNT_RTR; - if (can_is_canfd_skb(skb)) + if (can_is_canfd_skb(skb)) { ctrl |= FLEXCAN_MB_CNT_EDL; + if (cf->flags & CANFD_BRS) + ctrl |= FLEXCAN_MB_CNT_BRS; + } + for (i = 0; i < cf->len; i += sizeof(u32)) { data = be32_to_cpup((__be32 *)&cf->data[i]); priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]); @@ -876,6 +901,9 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, if (reg_ctrl & FLEXCAN_MB_CNT_EDL) { cf->len = can_dlc2len((reg_ctrl >> 16) & 0x0F); + + if (reg_ctrl & FLEXCAN_MB_CNT_BRS) + cf->flags |= CANFD_BRS; } else { cf->len = get_can_dlc((reg_ctrl >> 16) & 0x0F); @@ -1038,21 +1066,7 @@ static void flexcan_set_bittiming(struct net_device *dev) u32 reg; reg = priv->read(®s->ctrl); - reg &= ~(FLEXCAN_CTRL_PRESDIV(0xff) | - FLEXCAN_CTRL_RJW(0x3) | - FLEXCAN_CTRL_PSEG1(0x7) | - FLEXCAN_CTRL_PSEG2(0x7) | - FLEXCAN_CTRL_PROPSEG(0x7) | - FLEXCAN_CTRL_LPB | - FLEXCAN_CTRL_SMP | - FLEXCAN_CTRL_LOM); - - reg |= FLEXCAN_CTRL_PRESDIV(bt->brp - 1) | - FLEXCAN_CTRL_PSEG1(bt->phase_seg1 - 1) | - FLEXCAN_CTRL_PSEG2(bt->phase_seg2 - 1) | - FLEXCAN_CTRL_RJW(bt->sjw - 1) | - FLEXCAN_CTRL_PROPSEG(bt->prop_seg - 1); - + reg &= ~(FLEXCAN_CTRL_LPB | FLEXCAN_CTRL_SMP | FLEXCAN_CTRL_LOM); if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) reg |= FLEXCAN_CTRL_LPB; if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) @@ -1064,17 +1078,60 @@ static void flexcan_set_bittiming(struct net_device *dev) priv->write(reg, ®s->ctrl); if (priv->can.ctrlmode & CAN_CTRLMODE_FD) { + reg = FLEXCAN_CBT_EPRESDIV(bt->brp - 1) | + FLEXCAN_CBT_EPSEG1(bt->phase_seg1 - 1) | + FLEXCAN_CBT_EPSEG2(bt->phase_seg2 - 1) | + FLEXCAN_CBT_ERJW(bt->sjw - 1) | + FLEXCAN_CBT_EPROPSEG(bt->prop_seg - 1) | + FLEXCAN_CBT_BTF; + priv->write(reg, ®s->cbt); + + netdev_dbg(dev, "bt: prediv %d seg1 %d seg2 %d rjw %d propseg %d\n", + bt->brp - 1, bt->phase_seg1 - 1, bt->phase_seg2 - 1, + bt->sjw - 1, bt->prop_seg - 1); + reg = FLEXCAN_FDCBT_FPRESDIV(dbt->brp - 1) | FLEXCAN_FDCBT_FPSEG1(dbt->phase_seg1 - 1) | FLEXCAN_FDCBT_FPSEG2(dbt->phase_seg2 - 1) | FLEXCAN_FDCBT_FRJW(dbt->sjw - 1) | FLEXCAN_FDCBT_FPROPSEG(dbt->prop_seg); priv->write(reg, ®s->fdcbt); - } - /* print chip status */ - netdev_dbg(dev, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, - priv->read(®s->mcr), priv->read(®s->ctrl)); + if (bt->brp != dbt->brp) + netdev_warn(dev, "PRESDIV not the same, may risk transfer errors\n"); + + netdev_dbg(dev, "fdbt: prediv %d seg1 %d seg2 %d rjw %d propseg %d\n", + dbt->brp - 1, dbt->phase_seg1 - 1, dbt->phase_seg2 - 1, + dbt->sjw - 1, dbt->prop_seg); + + netdev_dbg(dev, "%s: mcr=0x%08x ctrl=0x%08x cbt=0x%08x fdcbt=0x%08x\n", + __func__, priv->read(®s->mcr), + priv->read(®s->ctrl), + priv->read(®s->cbt), + priv->read(®s->fdcbt)); + } else { + reg = priv->read(®s->ctrl); + reg &= ~(FLEXCAN_CTRL_PRESDIV(0xff) | + FLEXCAN_CTRL_RJW(0x3) | + FLEXCAN_CTRL_PSEG1(0x7) | + FLEXCAN_CTRL_PSEG2(0x7) | + FLEXCAN_CTRL_PROPSEG(0x7)); + + reg |= FLEXCAN_CTRL_PRESDIV(bt->brp - 1) | + FLEXCAN_CTRL_PSEG1(bt->phase_seg1 - 1) | + FLEXCAN_CTRL_PSEG2(bt->phase_seg2 - 1) | + FLEXCAN_CTRL_RJW(bt->sjw - 1) | + FLEXCAN_CTRL_PROPSEG(bt->prop_seg - 1); + priv->write(reg, ®s->ctrl); + + netdev_dbg(dev, "bt: prediv %d seg1 %d seg2 %d rjw %d propseg %d\n", + bt->brp - 1, bt->phase_seg1 - 1, bt->phase_seg2 - 1, + bt->sjw - 1, bt->prop_seg - 1); + + /* print chip status */ + netdev_dbg(dev, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, + priv->read(®s->mcr), priv->read(®s->ctrl)); + } } /* flexcan_chip_start @@ -1199,6 +1256,13 @@ static int flexcan_chip_start(struct net_device *dev) priv->write(reg_mcr | FLEXCAN_MCR_FDEN, ®s->mcr); } + if ((priv->can.ctrlmode_supported & CAN_CTRLMODE_FD) && + !(priv->can.ctrlmode & CAN_CTRLMODE_FD)) { + netdev_err(dev, "fd mode must be enabled\n"); + err = -EOPNOTSUPP; + goto out_chip_disable; + } + if ((priv->devtype_data->quirks & FLEXCAN_QUIRK_ENABLE_EACEN_RRS)) { reg_ctrl2 = priv->read(®s->ctrl2); reg_ctrl2 |= FLEXCAN_CTRL2_EACEN | FLEXCAN_CTRL2_RRS; @@ -1683,6 +1747,7 @@ static int flexcan_probe(struct platform_device *pdev) if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { priv->offload.is_canfd = true; priv->can.ctrlmode_supported |= CAN_CTRLMODE_FD; + priv->can.bittiming_const = &flexcan_fd_bittiming_const; priv->can.data_bittiming_const = &flexcan_fd_data_bittiming_const; } else { dev_err(&pdev->dev, "canfd mode can't work on fifo mode\n"); From patchwork Wed Mar 6 10:01:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1052221 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="ktWbAPpU"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44Dq696cf7z9s70 for ; Wed, 6 Mar 2019 21:01:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730070AbfCFKBR (ORCPT ); Wed, 6 Mar 2019 05:01:17 -0500 Received: from mail-eopbgr00079.outbound.protection.outlook.com ([40.107.0.79]:55781 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729765AbfCFKBP (ORCPT ); Wed, 6 Mar 2019 05:01:15 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZD/8LEcJk870BQjOqZCKqW2UnnmRz2dYq2i9m03ZfF8=; b=ktWbAPpU0lNHDWUE2yzl7m5TtT88h8sGjUj3SR0eYViRycMqe+NGdgOxI6vdGduTacpCZfOt0gSFCvM8KmZymCYw1gaTlEir2GJLrVMXINxihCdsciM9XSBeRH4vsB2rX8Y5DrUJn0Wis5SZ2wFzCCJsj3cCQ00VH95dWNeCdEw= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.138.152) by DB7PR04MB4763.eurprd04.prod.outlook.com (20.176.233.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.18; Wed, 6 Mar 2019 10:01:04 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39%4]) with mapi id 15.20.1686.018; Wed, 6 Mar 2019 10:01:04 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: dl-linux-imx , "wg@grandegger.com" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Joakim Zhang Subject: [PATCH RESEND 4/5] can: flexcan: add ISO CAN FD feature support Thread-Topic: [PATCH RESEND 4/5] can: flexcan: add ISO CAN FD feature support Thread-Index: AQHU1AOCNZ8JnmbepUSkKImnrv/m9g== Date: Wed, 6 Mar 2019 10:01:04 +0000 Message-ID: <20190306095833.20922-5-qiangqing.zhang@nxp.com> References: <20190306095833.20922-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190306095833.20922-1-qiangqing.zhang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: SG2PR02CA0106.apcprd02.prod.outlook.com (2603:1096:4:92::22) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:36::24) authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiangqing.zhang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5958a5f8-bf5b-4231-7f2a-08d6a21aa509 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB7PR04MB4763; x-ms-traffictypediagnostic: DB7PR04MB4763: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BDB7PR04MB4763=3B23?= =?iso-8859-1?q?=3AIDjFg0PWUOqNuJP3GfMGLXqTGrnmgwn8nUEA7UJfDhgospmJ?= =?iso-8859-1?q?Rvxa4MYF9z6vjPWyLYIBjOvGVvfINB5AGqwx6DjZmIziwei+S6S?= =?iso-8859-1?q?aklXkilX2EroI51DzpGLzqG2U8DVPOKaAkIagy6/qL7FBb4GaIb?= =?iso-8859-1?q?J+STugiilbfi0MBRDrhuDSP6FOSamEzILgSkd4V7YB0JZUJmK4B?= =?iso-8859-1?q?e9+IG/t4EtAUcr8O7ze4/DYPM2YuitTO+J2jjlgdUeg9/RooFAs?= =?iso-8859-1?q?n/K3jZ7gw2KBAj/7t+gHgsQkZYyjTgyG4MyK1k1TcMq22Bv7F6k?= =?iso-8859-1?q?YOU5+GAVzBXMK/sINvEvPGz5I8XfMdpo2BklyNdrZtzwLmeGdI3?= =?iso-8859-1?q?BCocPzSvDcOju2u5kKWux71evlUED+4rs3YVMkhUnGFpBP4yUYB?= =?iso-8859-1?q?B+RqNDeKIbLeWAOf8NDoYEA6h9n6MBC8mMSyFGD4RvMzlyaUnyW?= =?iso-8859-1?q?wFyBK2rwXLzQWT7/ccG75wkhzVF5tjiGzAr478SwjPeBMb6WQsv?= =?iso-8859-1?q?/FbH+9f/+zSEDUYBZYuKKuJOqv8oW8c9npV9hQVzNELHYKI79gt?= =?iso-8859-1?q?cSD3hKarpDfanOb1Y3hxrFsiv4VPNIx+FrmO8hqDsSDNaZodQZr?= =?iso-8859-1?q?1cIklS5efHVfIf8RsXP0uxBk9TPaNri3iSsXL56of0FmN+Bi2qy?= =?iso-8859-1?q?30eKw2rCl3T2C5xP8OHw1FoislJZsN0Uhj4JgX6+vW5IGRpf96m?= =?iso-8859-1?q?JefT+T1wd3kEB5AHIppIoRO/pMEV0WcQx/mtEyrVVVBkkghYgMG?= =?iso-8859-1?q?VEy5l1nI3w+x0k3WF1ZzB5hd3ZaXI/Ebgqbz1byPOFJaLUsGzfZ?= =?iso-8859-1?q?j7m6L5qSazC8DTVRctz88OlzPw7jch4TBCifuXne5O30oJzfijF?= =?iso-8859-1?q?eoSYW/zwIn0W8GUAhPJCIesqJLn9zoHUwhCcCQwfBexW99t7VoA?= =?iso-8859-1?q?AbZxrKWeti/rT+xpQNXwcf1pES9By5o99yd+vQLd0S4399L7+Wd?= =?iso-8859-1?q?OtwvZGRPncVVnSkaT9mda601kul74DUVU0IOsytPBVjjWoJGeQm?= =?iso-8859-1?q?QKqluHx3iGHyFBy+yXAYfG3wLvFad0cWj8T6tiiGsWiLnGE1IgK?= =?iso-8859-1?q?rAy4iuaGsU/hsZse38r1rWE59s7Chg9WxdgZVg8hGb/4+AMdMVM?= =?iso-8859-1?q?YTNGw5n7844IlkdFMmyDMOCdCdClEENKb4F5yzKCV3WxPFhpdwd?= =?iso-8859-1?q?XQ67UMGkThbx/6VH3e8IG5i54WkKUBCHK1gdZgFSpCUianQ0cGR?= =?iso-8859-1?q?Nn72xQBENeXYKyiRBFJcOrsu/7Z0UDgTcIrfxw=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(366004)(136003)(396003)(39860400002)(376002)(199004)(189003)(99286004)(2501003)(5660300002)(52116002)(71200400001)(71190400001)(53936002)(6436002)(76176011)(6512007)(1076003)(446003)(36756003)(14454004)(11346002)(476003)(2616005)(486006)(14444005)(256004)(26005)(186003)(6486002)(86362001)(386003)(6506007)(102836004)(478600001)(2906002)(7736002)(25786009)(50226002)(54906003)(106356001)(110136005)(6116002)(4326008)(105586002)(66066001)(68736007)(305945005)(8936002)(316002)(97736004)(3846002)(8676002)(81166006)(81156014); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4763; H:DB7PR04MB4618.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: WHoZ2Hd6Uht0fuZ0yuPWfysY3qlnaR70ZuJ02Z+29Ilv7drNhwYrRKjimhKmCIrLFK9p67yQwza6S7YUHutlXDtB9614R9t3K/VuqL8G2ljofnN12P7BbtgL57Ubq6pCZTjNBSJDTBdK7a7D9TcjrH7E57+Anl4AXJA6mMUXHMC8k3hus6iHi3fHstDJoH9zK0HJOnAStshnbwj4rcasB2N5joa6ZWcbxw9uzIdcLs0seKS7fIQODbPRIIMfSVJ/Cg7CKsTEj7PguX1cEmBgRLGLKAZX2L4b0b8EcBKKDi1LlcSso1bkh2KxCM5KfbzbOuQBvvIZ8jBBXS7vqzGypXeq5Ak3Jz2fMOl9ydsYL/DJAkZKUj+Vsh2zZ3YO7QxP7esMzHnthQAdWDtgz1Ctj67opQveewJcgW6mdx6+53g= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5958a5f8-bf5b-4231-7f2a-08d6a21aa509 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 10:01:04.3788 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4763 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org ISO CAN FD is introduced to increase the failture detection capability than non-ISO CAN FD. The non-ISO CAN FD is still supported by FlexCAN so that it can be used mainly during an intermediate phase, for evaluation and development purposes. Therefore, it is strongly recommended to configure FlexCAN to the ISO CAN FD protocol by setting the ISOCANFDEN field in the CTRL2 register. NOTE: if you only set "fd on", driver will use ISO FD MODE by default. Signed-off-by: Joakim Zhang --- drivers/net/can/flexcan.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 688bb09b8123..fca014bc530a 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -92,6 +92,7 @@ #define FLEXCAN_CTRL2_MRP BIT(18) #define FLEXCAN_CTRL2_RRS BIT(17) #define FLEXCAN_CTRL2_EACEN BIT(16) +#define FLEXCAN_CTRL2_ISOCANFDEN BIT(12) /* FLEXCAN memory error control register (MECR) bits */ #define FLEXCAN_MECR_ECRWRDIS BIT(31) @@ -1254,6 +1255,12 @@ static int flexcan_chip_start(struct net_device *dev) priv->write(reg_fdctrl, ®s->fdctrl); reg_mcr = priv->read(®s->mcr); priv->write(reg_mcr | FLEXCAN_MCR_FDEN, ®s->mcr); + + reg_ctrl2 = flexcan_read(®s->ctrl2); + if (!(priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO)) + flexcan_write(reg_ctrl2 | FLEXCAN_CTRL2_ISOCANFDEN, ®s->ctrl2); + else + flexcan_write(reg_ctrl2 & ~FLEXCAN_CTRL2_ISOCANFDEN, ®s->ctrl2); } if ((priv->can.ctrlmode_supported & CAN_CTRLMODE_FD) && @@ -1746,7 +1753,7 @@ static int flexcan_probe(struct platform_device *pdev) if (priv->devtype_data->quirks & FLEXCAN_QUIRK_TIMESTAMP_SUPPORT_FD) { if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { priv->offload.is_canfd = true; - priv->can.ctrlmode_supported |= CAN_CTRLMODE_FD; + priv->can.ctrlmode_supported |= CAN_CTRLMODE_FD | CAN_CTRLMODE_FD_NON_ISO; priv->can.bittiming_const = &flexcan_fd_bittiming_const; priv->can.data_bittiming_const = &flexcan_fd_data_bittiming_const; } else { From patchwork Wed Mar 6 10:01:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1052224 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="bN7bWivm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44Dq6S6JbVz9s70 for ; Wed, 6 Mar 2019 21:01:36 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730085AbfCFKBc (ORCPT ); Wed, 6 Mar 2019 05:01:32 -0500 Received: from mail-eopbgr00079.outbound.protection.outlook.com ([40.107.0.79]:55781 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729791AbfCFKBa (ORCPT ); Wed, 6 Mar 2019 05:01:30 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pmsE8oz7B63+C4vH+/YcfEFTbdU9Ot7+J58GDQR8Qm0=; b=bN7bWivmTNH46obyDJ24/YyDwtS4CkD54NUERV04FEtPTcn03PumlrdsiPTQPkCWKO1wVWuX/JRFGRlhew+Ym1zExs+08+C+qM1PGP1/r3etkvqP6lsKzG1/QoPnHX5z8Icp/VR3sdd/f7fu4nBcoq5BQgz4IxnBvAFHaCoVaR8= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.138.152) by DB7PR04MB4763.eurprd04.prod.outlook.com (20.176.233.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.18; Wed, 6 Mar 2019 10:01:07 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::2083:76ce:c2b6:6a39%4]) with mapi id 15.20.1686.018; Wed, 6 Mar 2019 10:01:07 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: dl-linux-imx , "wg@grandegger.com" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Aisheng Dong , Joakim Zhang Subject: [PATCH RESEND 5/5] can: flexcan: add imx8qm support Thread-Topic: [PATCH RESEND 5/5] can: flexcan: add imx8qm support Thread-Index: AQHU1AOE4LznLW1bukG0o8/I1gnnwA== Date: Wed, 6 Mar 2019 10:01:07 +0000 Message-ID: <20190306095833.20922-6-qiangqing.zhang@nxp.com> References: <20190306095833.20922-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190306095833.20922-1-qiangqing.zhang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.17.1 x-clientproxiedby: SG2PR02CA0106.apcprd02.prod.outlook.com (2603:1096:4:92::22) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:36::24) authentication-results: spf=none (sender IP is ) smtp.mailfrom=qiangqing.zhang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c4b22e79-d5e7-4402-dc53-08d6a21aa715 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB7PR04MB4763; x-ms-traffictypediagnostic: DB7PR04MB4763: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BDB7PR04MB4763=3B23?= =?iso-8859-1?q?=3AH6gGp6IlklESbAC2ca/mpiu0zpdJGxD0zLCCCPVb4J84SPEA?= =?iso-8859-1?q?nNU26kw8Os77NgH9oPu/oa11EhZO+jafE7gDICzqm671FGkaDAK?= =?iso-8859-1?q?NGmeR/5lbM1Jg2+DI05l2gBrpcyCH91fgG08VM2ofJ5cRTex733?= =?iso-8859-1?q?qZ6EZvdqowHBocKsv7AqTpNckijxOW3CVu5pwcRltzrV/E2e0iy?= =?iso-8859-1?q?3k5/Ml9T+Hwebmp3Y9sofxi8HnNHLzkC41V0bhLPdxh1FKXStua?= =?iso-8859-1?q?YrXR5QLcjjRtbCFNc4WfShOyVP3Vle2ApdsPJDvwHpmuZUmSMID?= =?iso-8859-1?q?UvlyPQLt0seVnBs6HZxye9yDToH4u+3nqjWeX55pbs5sDSrKgbF?= =?iso-8859-1?q?xz+Ei10NwHvN71qtteRN/ZRaMZhI8Q2/bNraYshY/5ukTrs6pGQ?= =?iso-8859-1?q?ln0my91jiFjfmH8RSAl294xziqtCKhi6+oZdiRLuCiA/3fT+QNH?= =?iso-8859-1?q?f7KzITwbfYHq8cB6GN4tf9Fwby9NU96xM/juXZgGHdcVUKBgPAw?= =?iso-8859-1?q?N7TtZ/L4ikNpGvYajNCseVMFwbK7QbBCQv/AUZr3CNw3yq9yQNH?= =?iso-8859-1?q?lalgEF3FcstrKvLotSj1gXT2snQIlrPmqIWAhpr3Drp7yIIfOsb?= =?iso-8859-1?q?clQJssxkuAkc55mg5hrlkp7Tnu97mkWtLJP5R/CbU1nFYdGUJvF?= =?iso-8859-1?q?FBSQ8CBcJJ2cP0gsM1ITID+0Zjo2+9q36ewEzwVmmW8JdrmjRrh?= =?iso-8859-1?q?Ab5VAKAvBuURC1uR4PMYFyPdV+Qe50rvt2LYu0lh+emTHNs+v4O?= =?iso-8859-1?q?Hsi8nE4nkjTZjA9qD20/3c/C5ft9DYc/FscrlfICnZ6x2tl3uIv?= =?iso-8859-1?q?zk08JXoJBPwM+pSN45MVEcZY6sP4QOhXAPvFEMI3srcWXo37Oej?= =?iso-8859-1?q?OrhNm3244a5oRQ8K5iuOwahYx3Ak7eHkiVtDB+TSTVS3JYLeKbe?= =?iso-8859-1?q?bzw8CGMLJjLNTtRpr+a0bcFakRsHHxCH2gZxS9mNc2FZMigBEqi?= =?iso-8859-1?q?QVb1bclCe2ohvzkcyw9JTzM/sJGWUenHja2F0RJazHfXz/UZZRp?= =?iso-8859-1?q?OrJzn/WwKh7b1ojYmfgb5oJi+jbeWBWbT/vnQPexnFtIQo9Q3sU?= =?iso-8859-1?q?lYY+u1K76kBPzw+WxfkECcRB8lGI3RvH1H1kgD90V9tWuvM0JxC?= =?iso-8859-1?q?ALTiZdNq3w49a7zSGKrFDND+L0ML8HJnBbEU90TiTBV+oESZ4vy?= =?iso-8859-1?q?besPzE6AZx+pVpuIX2a9VQ+5BibV+5gASreycP/4tp2fstTZScy?= =?iso-8859-1?q?YsHNTKggsvNogY/Rk93YpoaNfLoTmFJszzGm38=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(366004)(136003)(396003)(39860400002)(376002)(199004)(189003)(99286004)(2501003)(5660300002)(52116002)(71200400001)(71190400001)(53936002)(6436002)(76176011)(6512007)(1076003)(446003)(36756003)(14454004)(11346002)(476003)(2616005)(486006)(256004)(26005)(186003)(6486002)(86362001)(386003)(6506007)(102836004)(478600001)(2906002)(7736002)(25786009)(50226002)(54906003)(106356001)(110136005)(6116002)(4326008)(105586002)(66066001)(68736007)(305945005)(8936002)(316002)(97736004)(3846002)(8676002)(81166006)(81156014)(32563001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4763; H:DB7PR04MB4618.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: l4M9X13SCWGT5hi1bZ22sFi2eTN9p5vn/AA0zPOFJCCl9efF0LwtRbvIA4gAZ1WsyM3+ffeS9EzeXszbP+3JaBByWwYqZJRFWfCQpde/kiFZ/+s6iPJduW9imPRmv2iHLlE5sX71gmW0eUoyNIN8VboN3GtBChDXmARdTMqgyOEtE29zdDu/TSzUfOdW4BoZodkpxVxSnI+Wh1ZNHLFFoMyPDutbF9vPzWQaFGF4m1i+YF4XTt0dBroCy5YkqEKYuSnts/Um3Xv8LVD62gaOtj8MEkh+M3YS40S03/CPKgQkTW/qFPL/tdV67ct6MCWn/FOf0ImwHlsbtbFjmf0vI6dQNIt68+oBfLTWoqTzmT2uZo9nXRJPkYXkTedz3jYXqmHfPX3ome45fZ1XmcQFxUt4Di53B93lJGIikUIAgpE= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c4b22e79-d5e7-4402-dc53-08d6a21aa715 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 10:01:07.8032 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4763 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dong Aisheng The Flexcan on i.MX8QM supports CAN FD protocol. Signed-off-by: Dong Aisheng Signed-off-by: Joakim Zhang --- drivers/net/can/flexcan.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index fca014bc530a..49615cc42436 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -346,6 +346,12 @@ static const struct flexcan_devtype_data fsl_imx6q_devtype_data = { FLEXCAN_QUIRK_SETUP_STOP_MODE, }; +static struct flexcan_devtype_data fsl_imx8qm_devtype_data = { + .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | + FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | FLEXCAN_QUIRK_BROKEN_PERR_STATE | + FLEXCAN_QUIRK_TIMESTAMP_SUPPORT_FD, +}; + static const struct flexcan_devtype_data fsl_vf610_devtype_data = { .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | @@ -1633,6 +1639,7 @@ static int flexcan_setup_stop_mode(struct platform_device *pdev) } static const struct of_device_id flexcan_of_match[] = { + { .compatible = "fsl,imx8qm-flexcan", .data = &fsl_imx8qm_devtype_data, }, { .compatible = "fsl,imx6q-flexcan", .data = &fsl_imx6q_devtype_data, }, { .compatible = "fsl,imx28-flexcan", .data = &fsl_imx28_devtype_data, }, { .compatible = "fsl,imx53-flexcan", .data = &fsl_imx25_devtype_data, },