From patchwork Fri Jul 12 08:02:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1131196 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="jsIXEYay"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45lQQC5L4Hz9s8m for ; Fri, 12 Jul 2019 18:02:43 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726250AbfGLICn (ORCPT ); Fri, 12 Jul 2019 04:02:43 -0400 Received: from mail-eopbgr40078.outbound.protection.outlook.com ([40.107.4.78]:39331 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726078AbfGLICm (ORCPT ); Fri, 12 Jul 2019 04:02:42 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kfaThhRUvLWf7mheW9dAnwttD2TS73wwMnrj8DB/1W69mAJkR4AHkdp8Cr6PcpsgsYtgmNm022Q2XL8hnI3XvytnQr9XtJAU3v+PyQo6okahV3XAegCV3agV5ZwtybIVcDvaQKVGqLVLTQi8Vm0DSQK51Cf+EKU3OcnpLlNnW/vptuVUMc6fb08awX7Nx13RYMc/OS4I30Dnac/eEGaUhya8viTwjYyBw1hKJSuS9j1G2GFv6ehG283fScJrTVGCnGmdHfs8ZEg0D21iuGaWYeH4/xipYv1w3/5QiEMnz5p2b3lLqKei1zKOLcEnGUptNTZIDUh0radekFAxVvZyrg== 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-SenderADCheck; bh=Ubf4wlw6XMXhUtOdr3TRLXqnJmBm/1CH4dyQKRJzBrM=; b=Sw0KkxSg2igeJAhmCgXYEmnXZak6YECxvKpAgYjvONyhrwXWKofPGBsBVCzcX0BFkNGhzGo/Lcuzg0CePYeeDNJaufuoHpP58QuMfT1L2CKY48lTBAHo44Mq/LhEMQwXNdBc26wG4iYcejbRSU6waAdyyMiBcsYciac8EP+/qbgLZBHLUdidbFbi1W5iK5SD1lqe91+XQXqxejs3YPqcg3sddnlJt674JYENN2gPBqA95JlLjF6LnGBWUnDz2iGIS/nTOCzxiV00ICgh5KWhptQojAFV+zlVEmC0AX1Jqk+tia94+1XYp+4TF6mTOlzxT7aQUD5fFw/ldXZyc3pDCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ubf4wlw6XMXhUtOdr3TRLXqnJmBm/1CH4dyQKRJzBrM=; b=jsIXEYayCO8CA4PQI974wVjcsSyL3b7zy+++IV5+zV/5pRM3XQsuE82ggRSdkd3TovW5UepaGhrhaMTz8XpkUJ0UXTg7ablXsR/UZKhElFE0Hhin8itjdfV2x4JbuLvm07k3JAZZajVjiU1/Le2M/LGFyZlVawT1+SscEnV0zwo= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4889.eurprd04.prod.outlook.com (20.176.234.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2073.10; Fri, 12 Jul 2019 08:02:38 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b%5]) with mapi id 15.20.2073.008; Fri, 12 Jul 2019 08:02:38 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: "wg@grandegger.com" , dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH 1/8] can: flexcan: allocate skb in flexcan_mailbox_read Thread-Topic: [PATCH 1/8] can: flexcan: allocate skb in flexcan_mailbox_read Thread-Index: AQHVOIgsNA5/gLaLbk685xStj6LiXg== Date: Fri, 12 Jul 2019 08:02:38 +0000 Message-ID: <20190712075926.7357-2-qiangqing.zhang@nxp.com> References: <20190712075926.7357-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190712075926.7357-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: SG2PR02CA0061.apcprd02.prod.outlook.com (2603:1096:4:54::25) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) 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: ce99b5e4-2422-4c4e-befc-08d7069f4e60 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600148)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020); SRVR:DB7PR04MB4889; x-ms-traffictypediagnostic: DB7PR04MB4889: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2887; x-forefront-prvs: 00963989E5 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(39860400002)(346002)(376002)(366004)(396003)(199004)(189003)(50226002)(66066001)(2906002)(71190400001)(2616005)(476003)(71200400001)(8936002)(11346002)(25786009)(446003)(1076003)(478600001)(53936002)(305945005)(2501003)(14454004)(486006)(7736002)(6512007)(36756003)(52116002)(76176011)(8676002)(99286004)(102836004)(86362001)(256004)(5660300002)(81156014)(81166006)(26005)(64756008)(66556008)(66446008)(66476007)(386003)(6506007)(66946007)(3846002)(110136005)(4326008)(6116002)(54906003)(186003)(316002)(6486002)(68736007)(6436002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4889; 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: 81d9GaYIan6jMzbaPYEmtBU+y6kZeRwwMT7Si8GmI4TTcKSk9VbJvYh5OA/D1HPA+Q7bBSxuf08TGpFo5TEzoX8UblzO9BmueVcP1oAajOi6HE6W5kgQm/D8vJsdRAvxlnfTElmLR7urVtNZ1daCoZTJUmmBqnw29fXG7Ozwl4t5rwxPLu2sS3EKtuyn3DYOXQZzQvmX3MZHomOP7hDuNn4oKWO/cMujHU13eisUqK5DP+vL7U17u4TvBIebUz0afGI5TrwVtYuAPsApLfRrxgWUEYpzNoSHR+YJGBIDfrj0p3kO4fCm5UOGP+iCdYvOjfdtNdweGA0j3GKYEfKvP5/IsXEq4E6jNkbi33/CKpr4/DQi6vvwJjk44fHw9lYhtuTKpba4318TazeUqWZ51LzXHgS2C4EEXIyOhMGdF6A= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ce99b5e4-2422-4c4e-befc-08d7069f4e60 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jul 2019 08:02:38.3672 (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-CrossTenant-userprincipalname: qiangqing.zhang@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4889 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We need to use alloc_canfd_skb() for CAN FD frames and alloc_can_skb() for CAN classic frames. So we have to alloc skb in flexcan_mailbox_read(). Signed-off-by: Joakim Zhang --- drivers/net/can/flexcan.c | 38 ++++++++++++++++++++-------------- drivers/net/can/rx-offload.c | 29 +++++++------------------- include/linux/can/rx-offload.h | 5 +++-- 3 files changed, 33 insertions(+), 39 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index e35083ff31ee..7e12f3db0915 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -789,14 +789,15 @@ static inline struct flexcan_priv *rx_offload_to_priv(struct can_rx_offload *off return container_of(offload, struct flexcan_priv, offload); } -static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, - struct can_frame *cf, - u32 *timestamp, unsigned int n) +static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, bool drop, + struct sk_buff **skb, u32 *timestamp, + unsigned int n) { struct flexcan_priv *priv = rx_offload_to_priv(offload); struct flexcan_regs __iomem *regs = priv->regs; struct flexcan_mb __iomem *mb; u32 reg_ctrl, reg_id, reg_iflag1; + struct can_frame *cf = NULL; int i; mb = flexcan_get_mb(priv, n); @@ -827,22 +828,27 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, reg_ctrl = priv->read(&mb->can_ctrl); } - /* increase timstamp to full 32 bit */ - *timestamp = reg_ctrl << 16; + if (!drop) + *skb = alloc_can_skb(offload->dev, &cf); - reg_id = priv->read(&mb->can_id); - if (reg_ctrl & FLEXCAN_MB_CNT_IDE) - cf->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG; - else - cf->can_id = (reg_id >> 18) & CAN_SFF_MASK; + if (*skb && cf) { + /* increase timstamp to full 32 bit */ + *timestamp = reg_ctrl << 16; - if (reg_ctrl & FLEXCAN_MB_CNT_RTR) - cf->can_id |= CAN_RTR_FLAG; - cf->can_dlc = get_can_dlc((reg_ctrl >> 16) & 0xf); + reg_id = priv->read(&mb->can_id); + if (reg_ctrl & FLEXCAN_MB_CNT_IDE) + cf->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG; + else + cf->can_id = (reg_id >> 18) & CAN_SFF_MASK; - for (i = 0; i < cf->can_dlc; i += sizeof(u32)) { - __be32 data = cpu_to_be32(priv->read(&mb->data[i / sizeof(u32)])); - *(__be32 *)(cf->data + i) = data; + if (reg_ctrl & FLEXCAN_MB_CNT_RTR) + cf->can_id |= CAN_RTR_FLAG; + cf->can_dlc = get_can_dlc((reg_ctrl >> 16) & 0xf); + + for (i = 0; i < cf->can_dlc; i += sizeof(u32)) { + __be32 data = cpu_to_be32(priv->read(&mb->data[i / sizeof(u32)])); + *(__be32 *)(cf->data + i) = data; + } } /* mark as read */ diff --git a/drivers/net/can/rx-offload.c b/drivers/net/can/rx-offload.c index 2ce4fa8698c7..632919484ff7 100644 --- a/drivers/net/can/rx-offload.c +++ b/drivers/net/can/rx-offload.c @@ -121,32 +121,19 @@ static int can_rx_offload_compare(struct sk_buff *a, struct sk_buff *b) static struct sk_buff *can_rx_offload_offload_one(struct can_rx_offload *offload, unsigned int n) { struct sk_buff *skb = NULL; - struct can_rx_offload_cb *cb; - struct can_frame *cf; - int ret; + u32 timestamp; /* 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); + bool drop = unlikely(skb_queue_len(&offload->skb_queue) > + offload->skb_queue_len_max); - if (!skb) { - struct can_frame cf_overflow; - u32 timestamp; + if (offload->mailbox_read(offload, drop, &skb, ×tamp, n) && !skb) + offload->dev->stats.rx_dropped++; - ret = offload->mailbox_read(offload, &cf_overflow, - ×tamp, n); - if (ret) - offload->dev->stats.rx_dropped++; + if (skb) { + struct can_rx_offload_cb *cb = can_rx_offload_get_cb(skb); - return NULL; - } - - cb = can_rx_offload_get_cb(skb); - ret = offload->mailbox_read(offload, cf, &cb->timestamp, n); - if (!ret) { - kfree_skb(skb); - return NULL; + cb->timestamp = timestamp; } return skb; diff --git a/include/linux/can/rx-offload.h b/include/linux/can/rx-offload.h index 8268811a697e..c54d80ef4314 100644 --- a/include/linux/can/rx-offload.h +++ b/include/linux/can/rx-offload.h @@ -23,8 +23,9 @@ struct can_rx_offload { struct net_device *dev; - unsigned int (*mailbox_read)(struct can_rx_offload *offload, struct can_frame *cf, - u32 *timestamp, unsigned int mb); + unsigned int (*mailbox_read)(struct can_rx_offload *offload, bool drop, + struct sk_buff **skb, u32 *timestamp, + unsigned int mb); struct sk_buff_head skb_queue; u32 skb_queue_len_max; From patchwork Fri Jul 12 08:02:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1131197 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="MgsLpN8q"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45lQQS2pYQz9s8m for ; Fri, 12 Jul 2019 18:02:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726275AbfGLICz (ORCPT ); Fri, 12 Jul 2019 04:02:55 -0400 Received: from mail-eopbgr130089.outbound.protection.outlook.com ([40.107.13.89]:52706 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726078AbfGLICz (ORCPT ); Fri, 12 Jul 2019 04:02:55 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ClQRypyrbRtuJ3sL6D7fFpZ0T2ATW77YDhAg0g8VV/Sw2H8n4qk/9FcL940oHW+XCJDb+4SKpqiMpBORHI2Z7IaTWE78EI0eB6nb1jqTU0dTHCyNE8mJ1syhKWVQGIze8Z6dAuJ6BUu7YjDk8Lib9cXAhs5BbPOAlWDqJHBuZPO9yXLDcdsLSzPsfqfgO2Bed3PPLBdnmOYmbSObZW15ybDNz8xyrIw+CNH64U4mhtLJBdQm/hyMuEkTChLlh/iKyutuOUyMjQjeC2P8yuOn/jOCUtUJKUaNB8Rg3I5tsXTTY5vsgfN3XwTfhG2qlwyyXJgN91W/VuH5vXUAg92z4g== 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-SenderADCheck; bh=R9nye2Srz8LcRDROgixMWMkYol45MuvZXOsvpxzh5AQ=; b=cYjKgZpw6GwogDZHNIhsqp+gLKtO335Ga8L2jkAsdlwGrbw2OvlJ0mieq+OvxAtPpB4oC9JMKUte05sXg0M1ANtK+sULcWXDmuivQxpJG5/xZ+nbxSfBpbjzEHp8KWOiPKHJy399Yb2V6ibaZx/FnpKp7GE99AkMm+oBklYaE3dovOVWTsoEOmKVCQp6ZH2iD6j7HYOTSz01dpoQZSTTznZloMJZRJ5kuNjCuyHZyuF45JGmTft9n7szdlTl2ZSfaglBFu6TDDDoLjUF+1pxqVEZxBdYdT+0hRANStd5YNSOiKHMHODNkhAQENaErXH1zq6sr2+E/b+eNfB33x33cg== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=R9nye2Srz8LcRDROgixMWMkYol45MuvZXOsvpxzh5AQ=; b=MgsLpN8qZUsPVBdtOJFIP/pxWtjgg2cOgLfBi9m8ugj7yBpoF/PylhUtnCdPSnG8im+Vinq/t/O/DToM9oIpQA6UChKiaTd2aV7KiQOQWckz9uqo726Dsox0OjTRq0MFp0JzG8RIN7dSkNBXs317BMSz/E+RPHC9dsQYWNuuTjw= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4889.eurprd04.prod.outlook.com (20.176.234.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2073.10; Fri, 12 Jul 2019 08:02:41 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b%5]) with mapi id 15.20.2073.008; Fri, 12 Jul 2019 08:02:41 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: "wg@grandegger.com" , dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH 2/8] can: flexcan: use struct canfd_frame for CAN classic frame Thread-Topic: [PATCH 2/8] can: flexcan: use struct canfd_frame for CAN classic frame Thread-Index: AQHVOIgtzkI2An/dl0uUbz4VEl5z7A== Date: Fri, 12 Jul 2019 08:02:41 +0000 Message-ID: <20190712075926.7357-3-qiangqing.zhang@nxp.com> References: <20190712075926.7357-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190712075926.7357-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: SG2PR02CA0061.apcprd02.prod.outlook.com (2603:1096:4:54::25) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) 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: adb4318a-22a0-450a-e621-08d7069f502d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600148)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020); SRVR:DB7PR04MB4889; x-ms-traffictypediagnostic: DB7PR04MB4889: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1107; x-forefront-prvs: 00963989E5 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(39860400002)(346002)(376002)(366004)(396003)(199004)(189003)(50226002)(66066001)(2906002)(71190400001)(2616005)(476003)(71200400001)(8936002)(11346002)(25786009)(446003)(1076003)(478600001)(53936002)(305945005)(2501003)(14454004)(486006)(7736002)(6512007)(36756003)(52116002)(76176011)(8676002)(99286004)(102836004)(86362001)(256004)(5660300002)(14444005)(81156014)(81166006)(26005)(64756008)(66556008)(66446008)(66476007)(386003)(6506007)(66946007)(3846002)(110136005)(4326008)(6116002)(54906003)(186003)(316002)(6486002)(68736007)(6436002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4889; 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: Ffi3zcThdvAsopLQ+1Cmo6NZGkttx4JD4+iT0E20X5qYGpeJ46CoXqu7++BtH/31+YPG24YRmpobD49KUaNTNgH+8xGRd3RpW1HkhsCfqqZbzf/fXfyHNy/J1HZk4FC5GMgFSim+wDt+EzyyF0XKlmHHWtjBrPXKszRGzDox0cS87DgWukkntQcT4fQ2laOukgmjX75+ZsCUHm88sVauBYqJaZE97EsAmToUDxa+jPeRqI61OnJHCItAb95S0Nxd4rwwIuurQlmXcNf3isRIw7Eu7R7wCxIdODgDBG00vLyacm1SqRcF+QYxmCNAIieUPRG2lseDlu1KRj5EN3a1OcMrYfHVaJggi85hfprv2rludL4g24D28e6l7vd0qHpauFV0B6rljXSL+gOUmA+9M6MvKFssmc3yzL8+EYZNegk= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: adb4318a-22a0-450a-e621-08d7069f502d X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jul 2019 08:02:41.3744 (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-CrossTenant-userprincipalname: qiangqing.zhang@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4889 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch prepares for CAN FD mode, using struct canfd_frame can both for classic format frame and fd format frame. Signed-off-by: Joakim Zhang --- drivers/net/can/flexcan.c | 34 +++++++++++++++++----------------- drivers/net/can/rx-offload.c | 4 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 7e12f3db0915..5b0a159daa38 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -609,10 +609,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 *cfd = (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 | (cfd->len << 16); int i; if (can_dropped_invalid_skb(dev, skb)) @@ -620,18 +620,18 @@ static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *de netif_stop_queue(dev); - if (cf->can_id & CAN_EFF_FLAG) { - can_id = cf->can_id & CAN_EFF_MASK; + if (cfd->can_id & CAN_EFF_FLAG) { + can_id = cfd->can_id & CAN_EFF_MASK; ctrl |= FLEXCAN_MB_CNT_IDE | FLEXCAN_MB_CNT_SRR; } else { - can_id = (cf->can_id & CAN_SFF_MASK) << 18; + can_id = (cfd->can_id & CAN_SFF_MASK) << 18; } - if (cf->can_id & CAN_RTR_FLAG) + if (cfd->can_id & CAN_RTR_FLAG) ctrl |= FLEXCAN_MB_CNT_RTR; - for (i = 0; i < cf->can_dlc; i += sizeof(u32)) { - data = be32_to_cpup((__be32 *)&cf->data[i]); + for (i = 0; i < cfd->len; i += sizeof(u32)) { + data = be32_to_cpup((__be32 *)&cfd->data[i]); priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]); } @@ -797,7 +797,7 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, bool dr struct flexcan_regs __iomem *regs = priv->regs; struct flexcan_mb __iomem *mb; u32 reg_ctrl, reg_id, reg_iflag1; - struct can_frame *cf = NULL; + struct canfd_frame *cfd = NULL; int i; mb = flexcan_get_mb(priv, n); @@ -829,25 +829,25 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, bool dr } if (!drop) - *skb = alloc_can_skb(offload->dev, &cf); + *skb = alloc_can_skb(offload->dev, (struct can_frame **)&cfd); - if (*skb && cf) { + if (*skb && cfd) { /* increase timstamp to full 32 bit */ *timestamp = reg_ctrl << 16; reg_id = priv->read(&mb->can_id); if (reg_ctrl & FLEXCAN_MB_CNT_IDE) - cf->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG; + cfd->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG; else - cf->can_id = (reg_id >> 18) & CAN_SFF_MASK; + cfd->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); + cfd->can_id |= CAN_RTR_FLAG; + cfd->len = get_can_dlc((reg_ctrl >> 16) & 0x0F); - for (i = 0; i < cf->can_dlc; i += sizeof(u32)) { + for (i = 0; i < cfd->len; i += sizeof(u32)) { __be32 data = cpu_to_be32(priv->read(&mb->data[i / sizeof(u32)])); - *(__be32 *)(cf->data + i) = data; + *(__be32 *)(cfd->data + i) = data; } } diff --git a/drivers/net/can/rx-offload.c b/drivers/net/can/rx-offload.c index 632919484ff7..9f8c8410e19e 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 *cfd = (struct canfd_frame *)skb->data; work_done++; stats->rx_packets++; - stats->rx_bytes += cf->can_dlc; + stats->rx_bytes += cfd->len; netif_receive_skb(skb); } From patchwork Fri Jul 12 08:02:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1131200 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="HVtJkZI9"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45lQQb6vLGz9s8m for ; Fri, 12 Jul 2019 18:03:03 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726344AbfGLIDC (ORCPT ); Fri, 12 Jul 2019 04:03:02 -0400 Received: from mail-eopbgr130089.outbound.protection.outlook.com ([40.107.13.89]:52706 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726264AbfGLIDA (ORCPT ); Fri, 12 Jul 2019 04:03:00 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=InXIgcjFUdzCSBjnOpPLftqxfUl9Au5Bagppn2k4K6EZAsOgcBdUlHnkaLck5Uomln/N7wUs4F7SfqRQNR8zg8hRooZxOjOyqtLFfkcLF+471JKmzjHRR/Kch5hmOqbaVNGCai3sgxdC2kCENEp8udMgp0YxZJVrXqSkFmmp3UAKutZc4xDPqNCyM6jSPrqeVRalh9wMQw45/6gI7+j4SjpVxbAi+6atdooR37j59I5x/ZW906gvr5JSUfsUAiQCSVi4ifL3hRNUIGJL4N/84C0qpp01WaDCQJoPoDBM5aKZDyHyisRsigiZ6qSUQlG7M6l+N2dcmEKOXPjEwB7iog== 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-SenderADCheck; bh=QaF+kvZB2aW38CbUy3ltyFHbVPONlw05lzL4ZeYAxFY=; b=Bk3kzqn2PgbhHf346hak3x+tLM3x1de8E3sDb3CbDFk1mFcboNrS1LFXMqFUFFLJ2PRmBZcIvjleue1JFoenvW3C3N8w09jbqwdCRy8PtSPj1nKnUcf1R0xDYzxmgT/riu0pW/SbRH7fDPDlRj9mu2FQI66UGJcMskSejQ20ucModLSao0cDKWzse8N4xEd8mI5LTvcaQDiUY2n4+CHAJEl8kLWcvnaVurJSLQ5hRwOHPYSdA+UwTT0EVHkE+5yrsFMti8DeEt5aHpcFiiMB0I8iZsTRc+m2LY1g4aCV8TPdp0t+InWPLaZ5vaednZKUWWjIMGgYVXKv3qHRUGUlJQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QaF+kvZB2aW38CbUy3ltyFHbVPONlw05lzL4ZeYAxFY=; b=HVtJkZI99/o+lOmzJsRwfhDL4mYcFWuc0Dq2WfTNPrjBXOhD0u64Vftsuz/mrERkSONxefvCHw5ReCXsdg8+FpkRg0dXTXdS7o08cn5aHmw1NssZfkiXilFivRYbbV04QOkvucL0/Lmqj8tT2opd0A5d0A0XLAoL9pQHR5uKE2Y= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4889.eurprd04.prod.outlook.com (20.176.234.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2073.10; Fri, 12 Jul 2019 08:02:44 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b%5]) with mapi id 15.20.2073.008; Fri, 12 Jul 2019 08:02:44 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: "wg@grandegger.com" , dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH 3/8] can: flexcan: add CAN FD mode support Thread-Topic: [PATCH 3/8] can: flexcan: add CAN FD mode support Thread-Index: AQHVOIgvT1wj7sZWnESL7zqtJbNCtg== Date: Fri, 12 Jul 2019 08:02:44 +0000 Message-ID: <20190712075926.7357-4-qiangqing.zhang@nxp.com> References: <20190712075926.7357-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190712075926.7357-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: SG2PR02CA0061.apcprd02.prod.outlook.com (2603:1096:4:54::25) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) 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: 75ca89d1-f126-4a0d-1f3a-08d7069f51f3 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600148)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020); SRVR:DB7PR04MB4889; x-ms-traffictypediagnostic: DB7PR04MB4889: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:529; x-forefront-prvs: 00963989E5 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(39860400002)(346002)(376002)(366004)(396003)(199004)(189003)(50226002)(66066001)(2906002)(71190400001)(2616005)(476003)(71200400001)(30864003)(8936002)(11346002)(25786009)(446003)(1076003)(478600001)(53936002)(305945005)(2501003)(14454004)(486006)(7736002)(6512007)(36756003)(52116002)(76176011)(8676002)(99286004)(102836004)(86362001)(256004)(5660300002)(14444005)(81156014)(81166006)(26005)(64756008)(66556008)(66446008)(66476007)(386003)(6506007)(66946007)(3846002)(110136005)(4326008)(6116002)(54906003)(186003)(316002)(6486002)(68736007)(6436002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4889; 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: qPNmVS7ckDyNg0X3JaAoZ16TC3wlLhidqgvtjquKnj8WZ+gd9lSvh0uFldKXYv84YYpcIquN/0UOU0d6zWNCuLcaWUDP6G7R+fb6g2vWNgF+/sLpHDi75xy/NX9s+ni7qDgKLdZdE/6udiIIz+Fil3u5vNo/+4fIobBARWfwumecsM8M6h2iJ1I2Mhg8AD3B7mUNwGB84rRcJx9MAHxhBzU/2hWj989In+BiD/pNm/DxoK3Tp7D+xxei/lo+mz08uPEJUPPdDBK2z9Waa0T9d3V828DjprQRmHbAodyXy5twL/dahk+2++Wax10oMhqeQPN/ozpElXCt41G+lp1sTbNONAN+j4Suh0uAlkBhd1shAEsXemru1VlmgKUGsIUclAoc8UKRev8Os8zk+6Ugk5Hj4qruyYRZdnKk9dUOqgQ= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 75ca89d1-f126-4a0d-1f3a-08d7069f51f3 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jul 2019 08:02:44.3597 (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-CrossTenant-userprincipalname: qiangqing.zhang@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4889 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch intends to add CAN FD mode support in driver, it means that payload size can extend up to 64 bytes. Bit timing always 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 --- drivers/net/can/flexcan.c | 255 +++++++++++++++++++++++++++++++++----- 1 file changed, 225 insertions(+), 30 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 5b0a159daa38..23e9407e33ff 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,26 @@ 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_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 +169,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 +217,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 { @@ -225,7 +251,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 @@ -250,6 +277,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 +367,30 @@ 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 = 96, + .tseg2_min = 2, + .tseg2_max = 32, + .sjw_max = 16, + .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 = 2, + .tseg1_max = 39, + .tseg2_min = 2, + .tseg2_max = 8, + .sjw_max = 4, + .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. @@ -612,7 +666,7 @@ static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *de struct canfd_frame *cfd = (struct canfd_frame *)skb->data; u32 can_id; u32 data; - u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | (cfd->len << 16); + u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | ((can_len2dlc(cfd->len)) << 16); int i; if (can_dropped_invalid_skb(dev, skb)) @@ -630,6 +684,9 @@ static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *de if (cfd->can_id & CAN_RTR_FLAG) ctrl |= FLEXCAN_MB_CNT_RTR; + if (can_is_canfd_skb(skb)) + ctrl |= FLEXCAN_MB_CNT_EDL; + for (i = 0; i < cfd->len; i += sizeof(u32)) { data = be32_to_cpup((__be32 *)&cfd->data[i]); priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]); @@ -828,8 +885,14 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, bool dr reg_ctrl = priv->read(&mb->can_ctrl); } - if (!drop) - *skb = alloc_can_skb(offload->dev, (struct can_frame **)&cfd); + + if (!drop) { + if (reg_ctrl & FLEXCAN_MB_CNT_EDL) + *skb = alloc_canfd_skb(offload->dev, &cfd); + else + *skb = alloc_can_skb(offload->dev, + (struct can_frame **)&cfd); + } if (*skb && cfd) { /* increase timstamp to full 32 bit */ @@ -841,9 +904,20 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, bool dr else cfd->can_id = (reg_id >> 18) & CAN_SFF_MASK; - if (reg_ctrl & FLEXCAN_MB_CNT_RTR) - cfd->can_id |= CAN_RTR_FLAG; - cfd->len = get_can_dlc((reg_ctrl >> 16) & 0x0F); + + if (reg_ctrl & FLEXCAN_MB_CNT_EDL) { + cfd->len = can_dlc2len(get_canfd_dlc((reg_ctrl >> 16) & 0x0F)); + } else { + cfd->len = get_can_dlc((reg_ctrl >> 16) & 0x0F); + + if (reg_ctrl & FLEXCAN_MB_CNT_RTR) + cfd->can_id |= CAN_RTR_FLAG; + } + + if (reg_ctrl & FLEXCAN_MB_CNT_ESI) { + cfd->flags |= CANFD_ESI; + netdev_warn(priv->can.dev, "ESI Error\n"); + } for (i = 0; i < cfd->len; i += sizeof(u32)) { __be32 data = cpu_to_be32(priv->read(&mb->data[i / sizeof(u32)])); @@ -989,27 +1063,14 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) 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; + struct flexcan_priv *priv = netdev_priv(dev); + struct can_bittiming *bt = &priv->can.bittiming; + struct can_bittiming *dbt = &priv->can.data_bittiming; struct flexcan_regs __iomem *regs = priv->regs; - u32 reg; + u32 reg, reg_cbt, reg_fdcbt; 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) @@ -1020,9 +1081,102 @@ static void flexcan_set_bittiming(struct net_device *dev) netdev_dbg(dev, "writing ctrl=0x%08x\n", reg); priv->write(reg, ®s->ctrl); - /* print chip status */ - netdev_dbg(dev, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, - priv->read(®s->mcr), priv->read(®s->ctrl)); + if (priv->can.ctrlmode_supported & CAN_CTRLMODE_FD) { + reg_cbt = priv->read(®s->cbt); + reg_cbt &= ~(FLEXCAN_CBT_EPRESDIV(0x3ff) | + FLEXCAN_CBT_EPSEG1(0x1f) | + FLEXCAN_CBT_EPSEG2(0x1f) | + FLEXCAN_CBT_ERJW(0x1f) | + FLEXCAN_CBT_EPROPSEG(0x3f) | + FLEXCAN_CBT_BTF); + + /* CBT[EPSEG1] is 5 bit long and CBT[EPROPSEG] is 6 bit long. + * The can_calc_bittiming tries to divide the tseg1 equally + * between phase_seg1 and prop_seg, which may not fit in CBT + * register. Therefore, if phase_seg1 is more than possible + * value, increase prop_seg and decrease phase_seg1 + */ + if (bt->phase_seg1 > 0x20) { + bt->prop_seg += (bt->phase_seg1 - 0x20); + bt->phase_seg1 = 0x20; + } + + reg_cbt = 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_cbt, ®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); + + if (priv->can.ctrlmode & CAN_CTRLMODE_FD) { + reg_fdcbt = priv->read(®s->fdcbt); + reg_fdcbt &= ~(FLEXCAN_FDCBT_FPRESDIV(0x3ff) | + FLEXCAN_FDCBT_FPSEG1(0x07) | + FLEXCAN_FDCBT_FPSEG2(0x07) | + FLEXCAN_FDCBT_FRJW(0x07) | + FLEXCAN_FDCBT_FPROPSEG(0x1f)); + + /* FDCBT[FPSEG1] is 3 bit long and FDCBT[FPROPSEG] is 5 bit long. + * The can_calc_bittiming tries to divide the tseg1 equally + * between phase_seg1 and prop_seg, which may not fit in FDCBT + * register. Therefore, if phase_seg1 is more than possible + * value, increase prop_seg and decrease phase_seg1 + */ + if (dbt->phase_seg1 > 0x8) { + dbt->prop_seg += (dbt->phase_seg1 - 0x8); + dbt->phase_seg1 = 0x8; + } + + reg_fdcbt = 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_fdcbt, ®s->fdcbt); + + if (bt->brp != dbt->brp) + netdev_warn(dev, "Warning!! data brp = %d and brp = %d don't match.\n" + "flexcan may not work. consider using different bitrate or data bitrate\n", + dbt->brp, bt->brp); + + 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 @@ -1034,7 +1188,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; @@ -1131,6 +1285,26 @@ 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 */ + if (priv->can.ctrlmode_supported & CAN_CTRLMODE_FD) { + reg_fdctrl = priv->read(®s->fdctrl) & ~FLEXCAN_FDCTRL_FDRATE; + reg_fdctrl &= ~(FLEXCAN_FDCTRL_MBDSR1(0x3) | FLEXCAN_FDCTRL_MBDSR0(0x3)); + reg_mcr = priv->read(®s->mcr) & ~FLEXCAN_MCR_FDEN; + + /* 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 |= FLEXCAN_FDCTRL_FDRATE; + reg_fdctrl |= FLEXCAN_FDCTRL_MBDSR1(0x3) | FLEXCAN_FDCTRL_MBDSR0(0x3); + reg_mcr |= FLEXCAN_MCR_FDEN; + } + + priv->write(reg_fdctrl, ®s->fdctrl); + priv->write(reg_mcr, ®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; @@ -1255,6 +1429,12 @@ static int flexcan_open(struct net_device *dev) struct flexcan_priv *priv = netdev_priv(dev); int err; + if ((priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) && + (priv->can.ctrlmode & CAN_CTRLMODE_FD)) { + netdev_err(dev, "three samples mode and fd mode can't be used together\n"); + return -EINVAL; + } + err = pm_runtime_get_sync(priv->dev); if (err < 0) return err; @@ -1267,7 +1447,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); @@ -1607,6 +1790,18 @@ static int flexcan_probe(struct platform_device *pdev) priv->devtype_data = devtype_data; priv->reg_xceiver = reg_xceiver; + if (priv->devtype_data->quirks & FLEXCAN_QUIRK_TIMESTAMP_SUPPORT_FD) { + if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { + 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, "can fd mode can't work on fifo mode\n"); + err = -EINVAL; + goto failed_register; + } + } + pm_runtime_get_noresume(&pdev->dev); pm_runtime_set_active(&pdev->dev); pm_runtime_enable(&pdev->dev); From patchwork Fri Jul 12 08:02:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1131198 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="as7xC9Dj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45lQQW2LmGz9s8m for ; Fri, 12 Jul 2019 18:02:59 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726311AbfGLIC6 (ORCPT ); Fri, 12 Jul 2019 04:02:58 -0400 Received: from mail-eopbgr00084.outbound.protection.outlook.com ([40.107.0.84]:19328 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726258AbfGLIC5 (ORCPT ); Fri, 12 Jul 2019 04:02:57 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mCv/MxRHhOdMh6zvKVPcFmmJWOS/qCTVk7CKUGgNYszwiJMqG4pG8CG2IeXl8SUJWjjCSYkRyVwhvxWW4YHh1asa5dxsceldTwcdwtYipjGjU6gAnopKaKES2LkSdy15hHZipUPW7bE09SqwhzGopbTzjZxqXS0tFE9yahJAugW3vDKiX74EnD3E4hfUIODgpHR+msz7DgoMXVuDFByzt+LM6AQ9d/BsZ6kx7GBQGVpmsqeSiPT/7MRjoB+T3H8UzzpjQil1QNDuZjt8hgMFaJIz+ipJ3gOggTIm9JY7APuHHaEyJPNaUquMcIP+BxSHUQUsosb7NNOULWnlzh2Omg== 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-SenderADCheck; bh=yn22pt/v9272nVvpjD89xt0IX5due53zsFs762zEvaI=; b=WxHds203JrUZxc5+kP87aaq5keyBCZ+ijUBHzqh66kPkNvEYKPJvz4VKU6dseAGivPbbN6xkdRwsZee0fE7MsIbKJqqTHA0FRXKXC+qXJpXrQdxkXeVytewliLq3qOKS63XPTqZ0IqxNERRbPypX64l9KkDilPhJJU21dZLb//IArIuH8QBglNK/6IIH/mHD8akaZ6ezDa8lJ3zKMbV+MElKjEHoe0+TF7H9150W2SkXzPRcLiTHZM5WHKLbtaO4QzUKPFvCQl3nfpL++/f0iklpUBXl0HjJkmDdiiEd9H7Mgt63cBF9Dm4PnxlLEm+x3b+AIWgt8847CPvyMa7Y3g== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yn22pt/v9272nVvpjD89xt0IX5due53zsFs762zEvaI=; b=as7xC9DjcgJLjoC+iNKB9cvLLmV7eaQEm7/WJjddYg5w/O+L4xh2gyG8k0vSSlcUX7ec0Dxwk7Nd1zcAGPj+HDr/EH8NuQ5/zp2KLpNwcZVyt1hDXaZ0rL+zoXbinmh57LvuVKelqORCzSHvOxGwMERJqOy5Vdt5jyr8+QIUyyo= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4330.eurprd04.prod.outlook.com (52.134.108.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2073.10; Fri, 12 Jul 2019 08:02:53 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b%5]) with mapi id 15.20.2073.008; Fri, 12 Jul 2019 08:02:52 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: "wg@grandegger.com" , dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH 4/8] can: flexcan: add CANFD BRS support Thread-Topic: [PATCH 4/8] can: flexcan: add CANFD BRS support Thread-Index: AQHVOIgxk/e1qoHwVkyOg+rkj+hT+A== Date: Fri, 12 Jul 2019 08:02:47 +0000 Message-ID: <20190712075926.7357-5-qiangqing.zhang@nxp.com> References: <20190712075926.7357-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190712075926.7357-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: SG2PR02CA0061.apcprd02.prod.outlook.com (2603:1096:4:54::25) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) 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: fde09f85-b7c9-42e3-667a-08d7069f53a9 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:DB7PR04MB4330; x-ms-traffictypediagnostic: DB7PR04MB4330: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1751; x-forefront-prvs: 00963989E5 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(346002)(366004)(396003)(136003)(376002)(199004)(189003)(110136005)(25786009)(1076003)(54906003)(305945005)(3846002)(6116002)(7736002)(316002)(71200400001)(4326008)(66066001)(2906002)(66446008)(5660300002)(64756008)(66556008)(66476007)(71190400001)(2501003)(6666004)(478600001)(66946007)(2616005)(6506007)(102836004)(26005)(386003)(6436002)(186003)(6486002)(86362001)(50226002)(68736007)(256004)(14444005)(446003)(476003)(11346002)(486006)(8936002)(52116002)(76176011)(36756003)(53936002)(99286004)(14454004)(81156014)(81166006)(6512007)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4330; 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: hsnWoAIo+LlYTq0z5uY6rcng3bmD5+gr5DcpLfjEC0Yc7apydV5QNhNJAbqBNiIfAoiidWJUT72mOrr21b9C2B/ZfsqbLMP5HnPJmDiSaD8ZWNe4cKQ42JGw9gHtHh4QyYceu1aMGPXJiozBl+DJmFP1sQ+rpksFgVNe2ggS0klrc3FKH31RV6IEnQm13Gs+2jL7tk3Om35DQ8Aj5PWGsBd1l1rlN/b++7XEFV5zhQ6VKvR+w1pLk6P8EiUoQFS2empX71B5ceRoDd0KKvJ1ISDyxV/p4neDP18aPj+J4eCJqQwW5o30zsdH4+OFUjA/HB4TVd+QA9vqi5HuknrBFejzsvausem2qokLWc2Tqugln3dGYyxfgnFnaOdtdhckttIfuq2UksjoWMoRkiVvu+wtSZBUYpzI4zwAt5lO/5o= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fde09f85-b7c9-42e3-667a-08d7069f53a9 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jul 2019 08:02:47.3209 (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-CrossTenant-userprincipalname: qiangqing.zhang@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4330 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch intends to add CAN FD BitRate Switch(BRS) support in driver. 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 23e9407e33ff..4956ef64944a 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -684,9 +684,13 @@ static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *de if (cfd->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 (cfd->flags & CANFD_BRS) + ctrl |= FLEXCAN_MB_CNT_BRS; + } + for (i = 0; i < cfd->len; i += sizeof(u32)) { data = be32_to_cpup((__be32 *)&cfd->data[i]); priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]); @@ -907,6 +911,9 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload, bool dr if (reg_ctrl & FLEXCAN_MB_CNT_EDL) { cfd->len = can_dlc2len(get_canfd_dlc((reg_ctrl >> 16) & 0x0F)); + + if (reg_ctrl & FLEXCAN_MB_CNT_BRS) + cfd->flags |= CANFD_BRS; } else { cfd->len = get_can_dlc((reg_ctrl >> 16) & 0x0F); From patchwork Fri Jul 12 08:02:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1131199 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="VpWU7x6k"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45lQQZ1ZHfz9s8m for ; Fri, 12 Jul 2019 18:03:02 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726338AbfGLIDB (ORCPT ); Fri, 12 Jul 2019 04:03:01 -0400 Received: from mail-eopbgr00084.outbound.protection.outlook.com ([40.107.0.84]:19328 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726290AbfGLIDA (ORCPT ); Fri, 12 Jul 2019 04:03:00 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NKw+z7UxmQYhkya9haDYpW0kG5uGg/0wva7+6Rktw9A60KgxiB1756kAWI8c5FtvN7V2qLlLG3mOFB/4lgtZ+Dq9fcQq2E5fj+MvKNcsMAgGRyg4lMaszgxamtHByKPw/w6kCkTKX4/9BOoJi/6u0h4j7OISbm3WQ+phr6pnB7wJJhgtNVo1GBbQ27EXYbETaojpXhEc82v7WmTJoVbq+o8qy6ooCaSkF9mlfrhbJ2CEv2DOLeR4QninGKQLySk5C8kPy8t8eGVJnnr7E4SFDwuFP4MV9ahb2uYlbRuPyB4uRYkHK7KEUCikKMrqGCSZYmRes1l1xNmEjYAXdXfOmA== 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-SenderADCheck; bh=P9NVA2PgagpoH4C20jWkrlN/z1nEFiNlRJSCBS3yVrM=; b=hWZcZnCi36pPoaJQ7TTXsLMg2EXiUSt4cPZXIay5LJRgDE/QWWhh0I7bGujQSHgIN0ukEl/tMcz4t09+FEPxG6oKyPbzYhpHFw2xpra99rXvFnUaaVS3zka3NJ33yetg4Qhnmhcv28zDvCZdWGUnNZfs5ikdDZbZdzUeBHVlkTqOXi5yd6Q88hEysQQfSMHQT8YAcyCRi7NP/igCN6p/ClrywaVTiopCQYRTSmzjgT3RBCki+nBSzLc6QNwPKt4G9CVdUwyUzzlOTGxGxc0CBYTLTI8XnViDbmq8cj4cPhmv0rTRMbESjllfAjpEkfUc2mhDzmBOXXiKpd4tKbSQkA== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=P9NVA2PgagpoH4C20jWkrlN/z1nEFiNlRJSCBS3yVrM=; b=VpWU7x6kbCfQIaTMXxOQIqnPK49MPlmlPh7inrSiqirG/oTnv1Oos3OtGb0YWs8uxkvd+iY0ZmO/hzZ83tSy8FW1LWH6O46HLAUXsua+vF19bPMg/Cfz25pcjLvcl5A3vZhRMo/tYUDY3tYRD+pNE6LlIPoE4KwinpueqTtzbgA= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4330.eurprd04.prod.outlook.com (52.134.108.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2073.10; Fri, 12 Jul 2019 08:02:54 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b%5]) with mapi id 15.20.2073.008; Fri, 12 Jul 2019 08:02:54 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: "wg@grandegger.com" , dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH 5/8] can: flexcan: add ISO CAN FD feature support Thread-Topic: [PATCH 5/8] can: flexcan: add ISO CAN FD feature support Thread-Index: AQHVOIgzAOUvi7LfjUiSTB+At/nJ+A== Date: Fri, 12 Jul 2019 08:02:51 +0000 Message-ID: <20190712075926.7357-6-qiangqing.zhang@nxp.com> References: <20190712075926.7357-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190712075926.7357-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: SG2PR02CA0061.apcprd02.prod.outlook.com (2603:1096:4:54::25) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) 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: 07a7d2ec-53e3-419c-dc63-08d7069f556d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:DB7PR04MB4330; x-ms-traffictypediagnostic: DB7PR04MB4330: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5516; x-forefront-prvs: 00963989E5 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(346002)(366004)(396003)(136003)(376002)(199004)(189003)(110136005)(25786009)(1076003)(54906003)(305945005)(3846002)(6116002)(7736002)(316002)(71200400001)(4326008)(66066001)(2906002)(66446008)(5660300002)(64756008)(66556008)(66476007)(71190400001)(2501003)(6666004)(478600001)(66946007)(2616005)(6506007)(102836004)(26005)(386003)(6436002)(186003)(6486002)(86362001)(50226002)(68736007)(256004)(14444005)(446003)(476003)(11346002)(486006)(8936002)(52116002)(76176011)(36756003)(53936002)(99286004)(14454004)(81156014)(81166006)(6512007)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4330; 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: DzDknfSmTcYAhXmWWGH3L5013Vo/ggwOqdXYC3NkaijbV4ZHij1GPkFupfcSS+Vj6CZr7BvKY/6jKM8H8JNQYdvBhzlFbmHnKq30ETFkJaHdKkoQ11V4vO9tpglK3ZScDAXM3RennU/cXY2vX/axNu0ZYZ8sVc36BtU4zDQYlpBBcVSljJDStFzF+KYXg0c8zfPHAw9vavFPoVgKDD0TA/YKWSXm/TXorb0rFcPCBo3Leq7LpDKSk++kSEpDNM1Ef3r3VywKJ4UhZykttPF4KaNvGgOZAcC/ahEycX9MvQH+dBGqhr0HHFY4XFBqFUm9VhWW7Kd74evtEvfM819xDGUCMenU7tds3Tf2Snp9/3GXY6mFefL3gQISrNIcwSuGQd3BsNYcRjrsQA/lcjVpOa9D/U+0olvrjbZ2RvqgE4U= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 07a7d2ec-53e3-419c-dc63-08d7069f556d X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jul 2019 08:02:52.6248 (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-CrossTenant-userprincipalname: qiangqing.zhang@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4330 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. You should set "fd-non-iso on" after setting "fd on" if you want to use NON ISO FD mode. Signed-off-by: Joakim Zhang --- drivers/net/can/flexcan.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 4956ef64944a..daf4f0e88224 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) @@ -1297,6 +1298,7 @@ static int flexcan_chip_start(struct net_device *dev) reg_fdctrl = priv->read(®s->fdctrl) & ~FLEXCAN_FDCTRL_FDRATE; reg_fdctrl &= ~(FLEXCAN_FDCTRL_MBDSR1(0x3) | FLEXCAN_FDCTRL_MBDSR0(0x3)); reg_mcr = priv->read(®s->mcr) & ~FLEXCAN_MCR_FDEN; + reg_ctrl2 = priv->read(®s->ctrl2) & ~FLEXCAN_CTRL2_ISOCANFDEN; /* support BRS when set CAN FD mode * 64 bytes payload per MB and 7 MBs per RAM block by default @@ -1306,10 +1308,14 @@ static int flexcan_chip_start(struct net_device *dev) reg_fdctrl |= FLEXCAN_FDCTRL_FDRATE; reg_fdctrl |= FLEXCAN_FDCTRL_MBDSR1(0x3) | FLEXCAN_FDCTRL_MBDSR0(0x3); reg_mcr |= FLEXCAN_MCR_FDEN; + + if (!(priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO)) + reg_ctrl2 |= FLEXCAN_CTRL2_ISOCANFDEN; } priv->write(reg_fdctrl, ®s->fdctrl); priv->write(reg_mcr, ®s->mcr); + priv->write(reg_ctrl2, ®s->ctrl2); } if ((priv->devtype_data->quirks & FLEXCAN_QUIRK_ENABLE_EACEN_RRS)) { @@ -1799,7 +1805,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->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 Fri Jul 12 08:02:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1131201 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="ANLYD2Y0"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45lQQd4Gsyz9s8m for ; Fri, 12 Jul 2019 18:03:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726363AbfGLIDE (ORCPT ); Fri, 12 Jul 2019 04:03:04 -0400 Received: from mail-eopbgr00084.outbound.protection.outlook.com ([40.107.0.84]:19328 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726258AbfGLIDC (ORCPT ); Fri, 12 Jul 2019 04:03:02 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Oqd1uWS5qX2Hk7Qa/ArIYn+Fp9V6GVqdOPzaa7d4IHojmjrWy+6IIv1awxaefwvKQPEu6M9ffK20p3hWbdk/diNSrXE8am7UxRk9ushwzJQkNrws/4rA4qTEMcPA/zuVc4k8dyPMeycuPyyiod5bI+I6rsOfz7NJLVt/5KUhSsZCFL1hvodBdxCuDG5BYiVEfsloaTIFw9G+MCPIackmZV+k7R3Mr4AHXvVuZwIuBLk6f/s2ta4GWYHqwLMDoh3jG7fI7Zo/bIvZQ0F4Sb+MIwOi0l7+2ExnCfaGkfbQecChzNGmHYXh7lZZoEsFQGdcLFcmKVG7DBPajzdVy0Xn3w== 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-SenderADCheck; bh=cNItnYTrcCC/OtR1nwrCWagIrmKeGVYxn8+8AhRF0mQ=; b=CI+6HALNQxCa9BQeEOeOC9ubGHnBARBqkAUYebV89oUFcpz+bwzHyu52sYH7av/d7y0pothNaXpnuzxW/zRqLLlZ4wYznsX6GoR5FVA8b/WWuVoS/7BWOhs8X9P6jIvQTVOQSK09bDxaXY4G1aP7KIbahDxnUj06WXk76b2LYBuwqdcBj+TQ+7CO5HCyRfF9PnPnOQEA614JOyXhyjTwcwT73o7SQx6/QeX+/cEUE97+u2GRZCrkNlqUL6F2kX/7h+rHB95IXZFpcYz/Zhsqlki4zJpDMvpkxbB2lI2YPcNQwBXnhC5CzRTBY6MvHgmr1JyARKq0V+O+xHgyaPKO5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cNItnYTrcCC/OtR1nwrCWagIrmKeGVYxn8+8AhRF0mQ=; b=ANLYD2Y02kIA8ZgQ8sK8283zAUwkhMhAJt5kxO+FEZI1HjZscnXYnHTLE7GK/v1xdEUuWDp7Dyi9KZIdqFmY1s7jrfPmSyFM1HO0FQRvTpgcPLXeeCW+t60S4s66vgUK2JNz+CGkpR065XlrJU80KzjllBl7GhrJB/diz4sBJyE= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4330.eurprd04.prod.outlook.com (52.134.108.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2073.10; Fri, 12 Jul 2019 08:02:56 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b%5]) with mapi id 15.20.2073.008; Fri, 12 Jul 2019 08:02:56 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: "wg@grandegger.com" , dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH 6/8] can: flexcan: add Transceiver Delay Compensation suopport Thread-Topic: [PATCH 6/8] can: flexcan: add Transceiver Delay Compensation suopport Thread-Index: AQHVOIg2hBizvekVCESHJ7kllz9hiQ== Date: Fri, 12 Jul 2019 08:02:56 +0000 Message-ID: <20190712075926.7357-7-qiangqing.zhang@nxp.com> References: <20190712075926.7357-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190712075926.7357-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: SG2PR02CA0061.apcprd02.prod.outlook.com (2603:1096:4:54::25) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) 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: 694f8656-ab6b-4411-5ea2-08d7069f590b x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:DB7PR04MB4330; x-ms-traffictypediagnostic: DB7PR04MB4330: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-forefront-prvs: 00963989E5 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(346002)(366004)(396003)(136003)(376002)(199004)(189003)(110136005)(25786009)(1076003)(54906003)(305945005)(3846002)(6116002)(7736002)(316002)(71200400001)(4326008)(66066001)(2906002)(66446008)(5660300002)(64756008)(66556008)(66476007)(71190400001)(2501003)(478600001)(66946007)(2616005)(6506007)(102836004)(26005)(386003)(6436002)(186003)(6486002)(86362001)(50226002)(68736007)(256004)(14444005)(446003)(476003)(11346002)(486006)(8936002)(52116002)(76176011)(36756003)(53936002)(99286004)(14454004)(81156014)(81166006)(6512007)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4330; 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: hgmvGpZS3oxgbutviqxI5xCLxKuBpYK0539T6cPDI1tWJ/IMiishbdjpcpLmEoer/PA7CTStaWjSGdeGARyQyrnGdgzYpkASatSsRKQumvO8Ci6vPEgZZ7TN6MLKfRqWzlQqTdMr3ikMxzzdvE+Y6o4ig4y0XUsLoDJwG3VIQui1mLBBMLJ6WVLWUAfHOtGu9pzJ1OB0VBFNshFFSKDOEJAt2dcVvuRCgi02U1hwGuuvgVJzdPHD9/lEVKfMC8SgOoIaj7tA6v/4/eSg+jynnyHj7Vg+NG0H82gQkcWifjA3ulhENVz6VeLU2uqEpZa1o17tOGpt6qaPbqsE90JbirSRGhTEMOUDib6xtCXff5kGJGi5g2QpuTdhrvT7qObEleNvaDOmpNlr8cmkqvUWZKCoGMsQyCYKzvYslzrI75E= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 694f8656-ab6b-4411-5ea2-08d7069f590b X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jul 2019 08:02:56.2287 (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-CrossTenant-userprincipalname: qiangqing.zhang@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4330 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The CAN FD protocol allows the transmission and reception of data at a higher bit rate than the nominal rate used in the arbitration phase when the message's BRS bit is set. The TDC mechanism is effective only during the data phase of FD frames having BRS bit set. It has no effect either on non-FD frames, or on FD frames transmitted at normal bit rate. Signed-off-by: Joakim Zhang --- drivers/net/can/flexcan.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index daf4f0e88224..2c48151e431f 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -149,8 +149,10 @@ /* FLEXCAN FD control register (FDCTRL) bits */ #define FLEXCAN_FDCTRL_FDRATE BIT(31) +#define FLEXCAN_FDCTRL_TDCEN BIT(15) #define FLEXCAN_FDCTRL_MBDSR1(x) (((x) & 0x3) << 19) #define FLEXCAN_FDCTRL_MBDSR0(x) (((x) & 0x3) << 16) +#define FLEXCAN_FDCTRL_TDCOFF(x) (((x) & 0x1f) << 8) /* FLEXCAN FD Bit Timing register (FDCBT) bits */ #define FLEXCAN_FDCBT_FPRESDIV(x) (((x) & 0x3ff) << 20) @@ -1075,7 +1077,7 @@ static void flexcan_set_bittiming(struct net_device *dev) struct can_bittiming *bt = &priv->can.bittiming; struct can_bittiming *dbt = &priv->can.data_bittiming; struct flexcan_regs __iomem *regs = priv->regs; - u32 reg, reg_cbt, reg_fdcbt; + u32 reg, reg_cbt, reg_fdcbt, reg_fdctrl; reg = priv->read(®s->ctrl); reg &= ~(FLEXCAN_CTRL_LPB | FLEXCAN_CTRL_SMP | FLEXCAN_CTRL_LOM); @@ -1147,6 +1149,19 @@ static void flexcan_set_bittiming(struct net_device *dev) FLEXCAN_FDCBT_FPROPSEG(dbt->prop_seg); priv->write(reg_fdcbt, ®s->fdcbt); + /* enable transceiver delay compensation(TDC) for fd frame. + * TDC must be disabled when Loop Back mode is enabled. + */ + reg_fdctrl = priv->read(®s->fdctrl); + if (!(reg & FLEXCAN_CTRL_LPB)) { + reg_fdctrl |= FLEXCAN_FDCTRL_TDCEN; + reg_fdctrl &= ~FLEXCAN_FDCTRL_TDCOFF(0x1f); + /* for the TDC to work reliably, the offset has to use optimal settings */ + reg_fdctrl |= FLEXCAN_FDCTRL_TDCOFF(((dbt->phase_seg1 - 1) + dbt->prop_seg + 2) * + ((dbt->brp -1) + 1)); + } + priv->write(reg_fdctrl, ®s->fdctrl); + if (bt->brp != dbt->brp) netdev_warn(dev, "Warning!! data brp = %d and brp = %d don't match.\n" "flexcan may not work. consider using different bitrate or data bitrate\n", @@ -1296,6 +1311,7 @@ static int flexcan_chip_start(struct net_device *dev) /* FDCTRL */ if (priv->can.ctrlmode_supported & CAN_CTRLMODE_FD) { reg_fdctrl = priv->read(®s->fdctrl) & ~FLEXCAN_FDCTRL_FDRATE; + reg_fdctrl &= ~FLEXCAN_FDCTRL_TDCEN; reg_fdctrl &= ~(FLEXCAN_FDCTRL_MBDSR1(0x3) | FLEXCAN_FDCTRL_MBDSR0(0x3)); reg_mcr = priv->read(®s->mcr) & ~FLEXCAN_MCR_FDEN; reg_ctrl2 = priv->read(®s->ctrl2) & ~FLEXCAN_CTRL2_ISOCANFDEN; From patchwork Fri Jul 12 08:02:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Zhang X-Patchwork-Id: 1131202 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="LRXVqYmE"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45lQQg59Ghz9s8m for ; Fri, 12 Jul 2019 18:03:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726380AbfGLIDG (ORCPT ); Fri, 12 Jul 2019 04:03:06 -0400 Received: from mail-eopbgr00084.outbound.protection.outlook.com ([40.107.0.84]:19328 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726264AbfGLIDF (ORCPT ); Fri, 12 Jul 2019 04:03:05 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ME0LANpUQ+gFscR8FDTWr/i3GvOO8a5Z8wRMUpDIJ14zxmy81JmzRXJxQOBhy/La2FOPdMFGav1RmyKpkDFz8uqpaYO5+wXZZ+796+kGuuhnixJJUqv1v62Am+bDr2sXtPyPq2VyGBkqHJ/DYWpZIDsLWBEHHevZqQqA0LtxbJVpYqDWXiAy/8VWnu7wS8tq8xM0P2iSjikmGgLWN8PctB9uperAnjoEptgzwb2F6cViL3HHzmG/gvmwO7vUQvege8tUshsmV8nvETNVTo7V0j8yu6gmEbIeWvm0mu/SPGuL0nj1D4BeMpFsr+NCwVhnv4erOs07QFuqURDslZ6fKA== 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-SenderADCheck; bh=J9wElbHE6ivuEHDRHCQN1uRPAFt9RZaUoJDDACigGHs=; b=Sg9v4VkTzhoJQcz+Ibcb7gBrhd5QtFAkq1YMWxyXtcZ+PG8NRiLLKJG7PTGD/9Ps/XHYFH5uWqXvejC4uckw9U+9wsgxIOegDOeKyTFYEY4zvm8pXluxmJhaiR12G+N+rLqGx5Vvc4uL0aQCyCxCDpAIrG2ggzikHPm2D85H6TytHO5XCzd8wuRSjA92rSFSSTjoNkyyI6u8uCN9nmbGIjsDT03QxZALd/t//x3jtB+7+Hq1iYtBzX/3IKltBx5TOquWDzDE2msW9l54Es8WxSxDH6VJBkoedeKWbJ7VOZz7DQxk/v0W/kaHRyz2qjCe06g+GG8lMAGHrh91YDzTug== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J9wElbHE6ivuEHDRHCQN1uRPAFt9RZaUoJDDACigGHs=; b=LRXVqYmEBDB5CvN5ZPXbSlnNkm8LFucjeK+seieP3eih2Potij09Milorf0PYf4Us556IZe69C0Wb8mJcZE1VQOPvKPvO6WFdFZ+HKyxKX6U3Jz0NkvLJ5F5ATbp/mvgYdsHwEnwzalZp0MtNeZEgCBYBWQm1U0UIJbuK4OSrl8= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4330.eurprd04.prod.outlook.com (52.134.108.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2073.10; Fri, 12 Jul 2019 08:02:59 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b%5]) with mapi id 15.20.2073.008; Fri, 12 Jul 2019 08:02:59 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: "wg@grandegger.com" , dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH 7/8] can: flexcan: add imx8qm support Thread-Topic: [PATCH 7/8] can: flexcan: add imx8qm support Thread-Index: AQHVOIg4lseoYZpR80+sd5Szdt11Og== Date: Fri, 12 Jul 2019 08:02:59 +0000 Message-ID: <20190712075926.7357-8-qiangqing.zhang@nxp.com> References: <20190712075926.7357-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190712075926.7357-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: SG2PR02CA0061.apcprd02.prod.outlook.com (2603:1096:4:54::25) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) 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: 65834dbc-d14d-4ac8-b36b-08d7069f5abb x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:DB7PR04MB4330; x-ms-traffictypediagnostic: DB7PR04MB4330: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:205; x-forefront-prvs: 00963989E5 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(346002)(366004)(396003)(136003)(376002)(199004)(189003)(110136005)(25786009)(1076003)(54906003)(305945005)(3846002)(6116002)(7736002)(316002)(71200400001)(4326008)(66066001)(2906002)(66446008)(5660300002)(64756008)(66556008)(66476007)(71190400001)(2501003)(478600001)(66946007)(2616005)(6506007)(102836004)(26005)(386003)(6436002)(186003)(6486002)(86362001)(50226002)(68736007)(256004)(446003)(476003)(11346002)(486006)(8936002)(52116002)(76176011)(36756003)(53936002)(99286004)(14454004)(81156014)(81166006)(6512007)(8676002)(32563001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4330; 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: p6H7tx5ac8gV1+/SQIAojB8aZpdqkbcgS8EcY9aYmvTqW7LTlHxMWu6foO/IAZWGMaD/+bixah4rsJN+9F7NaokwBU1umOJrgSwwzMUdh8DQupgTVZoZ/1xQv8zBGm2CGNdXIDCGWyP/qVIoOnI5sNWumTTSKRz9OFtZpTwg29LZAh1eRrMEEL5jlRbtfG1Vy2Z9Y31xDNRtqLwDKIzEl9jv+BkKOb1St2/z5Rg1RLSWU/YDkYH2CBmm/uxIA/mrLyYzwel4UufTxUMxK31KiJWpxO0uQUuLn9mBkx/dk7dyXmCzg7gIaaWRrSNNuyqNusrEfPAiuZ9D5U6z8jCwEnEYixf9ze25fHwzoxBEkPgHVI5wDy5oO3j8TyMiWkmgUIzroU08OOxd6h868nItM6luQnGlmpJ25AIpuxErKkg= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 65834dbc-d14d-4ac8-b36b-08d7069f5abb X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jul 2019 08:02:59.0160 (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-CrossTenant-userprincipalname: qiangqing.zhang@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4330 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The Flexcan on i.MX8QM supports CAN FD protocol. 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 2c48151e431f..f1fdaae52ef4 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 | @@ -1703,6 +1709,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, }, From patchwork Fri Jul 12 08:03: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: 1131203 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="j45Nc5Iu"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 45lQQm0gMgz9s8m for ; Fri, 12 Jul 2019 18:03:12 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726401AbfGLIDK (ORCPT ); Fri, 12 Jul 2019 04:03:10 -0400 Received: from mail-eopbgr00084.outbound.protection.outlook.com ([40.107.0.84]:19328 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726365AbfGLIDH (ORCPT ); Fri, 12 Jul 2019 04:03:07 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BiOE6N7VmBsXW6Ulf1iAZRl4m/Z/qX+puYPnDT3oK/s3QTv5vSb7ENOV0mHcmDqVBB1s7xFu8tVEQMb1Ldnktbmg/E5y1hsbzgzzpDNCRBtncdVxFerM1ToaUKwfyWTYJH9HmORe+Db3cTSjR8hxhf4VmI6Y6twkhteE5GoYeMA67yaful5zAspbTF8wdDWklSjWMgjVxej8zrUKf+XIhFWrk1apoqvym19oCG1MWZVNUzKQm4bJni+YDq1xBtBaalvt6iwvgNWFRKDcHFVfLhHtb0G4lOVq5Lmc/TccSDpnc1SPw+HQYdAkB3FD7Ml5XVBq+sfpu/OSXLmDaOWcVw== 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-SenderADCheck; bh=yczdpAWu2vACiaf/NCHrgsQwZO4ASQEmmBp5BHQUXnM=; b=bA45mq3ts9zKQ3xdGn6yLRNjuoo14qpkNRfbpNUhd9vCLAzdmC1iq+yniRiSgGdsit4fp9QIY0bGy6Y2VcMyQj5xxU6ufdY7OyemSmPmJFalyGczVCVWPzY5v/BPRg/yZ/NL97Z0fA5M5t3uJF0fCEruO75l37wSScvaadlC+UkIpK928e7nwykXGTGMJr+dLE0nOmcjt93A5Mf7Aq36Hi/3Mh0N2OKVyhSEdAReCR1+on64JQu6uMpRmQIqB8P8VXNIaG3G6NX4vB633GXkB2YngxC3f90L3HLjLBuyXeybAgsJTxVza5inpNdXyiu1KAOlYHYjvM6d9iy2NNlaaw== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yczdpAWu2vACiaf/NCHrgsQwZO4ASQEmmBp5BHQUXnM=; b=j45Nc5Iu80tQGEe5j9ZDYtoJYbp9pURjQPmYyyyWB0UE+J64V02PYy4plm/SINXSK+j0Gl+3liUUH3IXlSFNq3XFqHLeQNsGi9UccNe8ksxkc62Y2iyWMYVUQ4YmDUdO0sYf1vALFR09H1J1O/3rJkeHWdevdkjDeoYaK2ZIMuQ= Received: from DB7PR04MB4618.eurprd04.prod.outlook.com (52.135.139.151) by DB7PR04MB4330.eurprd04.prod.outlook.com (52.134.108.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2073.10; Fri, 12 Jul 2019 08:03:02 +0000 Received: from DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b]) by DB7PR04MB4618.eurprd04.prod.outlook.com ([fe80::6553:8d04:295c:774b%5]) with mapi id 15.20.2073.008; Fri, 12 Jul 2019 08:03:02 +0000 From: Joakim Zhang To: "mkl@pengutronix.de" , "linux-can@vger.kernel.org" CC: "wg@grandegger.com" , dl-linux-imx , "netdev@vger.kernel.org" , Joakim Zhang Subject: [PATCH 8/8] can: flexcan: add lx2160ar1 support Thread-Topic: [PATCH 8/8] can: flexcan: add lx2160ar1 support Thread-Index: AQHVOIg6+iIbdFBIN0Sg2HDn1PbbUg== Date: Fri, 12 Jul 2019 08:03:01 +0000 Message-ID: <20190712075926.7357-9-qiangqing.zhang@nxp.com> References: <20190712075926.7357-1-qiangqing.zhang@nxp.com> In-Reply-To: <20190712075926.7357-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: SG2PR02CA0061.apcprd02.prod.outlook.com (2603:1096:4:54::25) To DB7PR04MB4618.eurprd04.prod.outlook.com (2603:10a6:5:38::23) 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: 08f05eab-2218-4edb-3bfe-08d7069f5c6f x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:DB7PR04MB4330; x-ms-traffictypediagnostic: DB7PR04MB4330: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:398; x-forefront-prvs: 00963989E5 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(979002)(4636009)(39860400002)(346002)(366004)(396003)(136003)(376002)(199004)(189003)(110136005)(25786009)(1076003)(54906003)(305945005)(3846002)(6116002)(7736002)(316002)(71200400001)(4326008)(66066001)(2906002)(66446008)(5660300002)(64756008)(66556008)(66476007)(71190400001)(2501003)(478600001)(66946007)(2616005)(6506007)(102836004)(26005)(386003)(6436002)(186003)(6486002)(86362001)(50226002)(68736007)(256004)(446003)(476003)(11346002)(486006)(8936002)(52116002)(76176011)(36756003)(53936002)(99286004)(14454004)(81156014)(81166006)(6512007)(8676002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4330; 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: kZUcDqfLVYWRDPcvoJUy5eN0uxmITplljQhta4aPoe6UKVQxR1GYHqOHRdFOliZL3LYkqaA1fZWgSiFOjFtK+LZ6/YD+cM4YahNfDCpDSD2H7b1+2gPNdXcndmmCGtSxjpcRrlwz7/BjsQKSvC/+RHahuhm0uy71iZ47FbnhWovvL6f4kZlfDfdRv5tSCY/NS2oqjtiWtvvQxq8w/8CpUKFjsh1+b1LA1kWkKDphy0UIabAzpanvE5DSCcMANiRIGTAq5509+sSGfReQhn718ORJdEb2SB+IJwPJ7cyTWqjijyoGdEImO5/v2EHMVzC1IGQbVcadXrRbEbjkf9zcVLrmG9W/KCf0SeC70M/U2pMB6s+p6GW05atRsun1yQ+sIAhPOdH206A4+dXea1BgOC8hQIHa4K3IZIgeD4mKFVI= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 08f05eab-2218-4edb-3bfe-08d7069f5c6f X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jul 2019 08:03:01.8953 (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-CrossTenant-userprincipalname: qiangqing.zhang@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4330 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The Flexcan on lx2160ar1 supports CAN FD protocol. 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 f1fdaae52ef4..f5c66f284c70 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -358,6 +358,12 @@ static const struct flexcan_devtype_data fsl_vf610_devtype_data = { FLEXCAN_QUIRK_BROKEN_PERR_STATE, }; +static const struct flexcan_devtype_data fsl_lx2160a_r1_devtype_data = { + .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | + FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_BROKEN_PERR_STATE | + FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | FLEXCAN_QUIRK_TIMESTAMP_SUPPORT_FD, +}; + static const struct flexcan_devtype_data fsl_ls1021a_r2_devtype_data = { .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_BROKEN_PERR_STATE | @@ -1709,6 +1715,7 @@ static int flexcan_setup_stop_mode(struct platform_device *pdev) } static const struct of_device_id flexcan_of_match[] = { + { .compatible = "fsl,lx2160ar1-flexcan", .data = &fsl_lx2160a_r1_devtype_data, }, { .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, },