From nobody Tue Feb 10 12:40:27 2026 Received: from smtp-out3.simply.com (smtp-out3.simply.com [94.231.106.210]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A22C833032D; Tue, 23 Dec 2025 10:56:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=94.231.106.210 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766487405; cv=none; b=bI8Kuc7y9npgNHSAQ3mU0QUHQIsf58mwUbGYpBONjK208acIuhPtxP2UEhJDqb0qaY7U3WxzdvfzyaPltffkNR1Eg69G0lLLynnohEGLOT9CIPeyJG8mTBl75+RIV7mNFtKA40iGixqc2DRQISB2zhfDRW7aZwXysyH1ADBHH5s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766487405; c=relaxed/simple; bh=rpn+Wo+qHy7FxizWkV4WUP8/eICU88Wz+tMP0sTcpLs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NDjc42wyp5wItzTNccf72hRJvf4ofBSSx55OzZO/1iZH8kcA5Utl1NCeFbKJSQr42cJwutqj/ZFtGSldqm4nzz4tW/Xdsui7rNqKcgstFFZvDgZjA4rcGi24nMLCAbKv2M7ItkDsmU9iIkyhLHrVSpmkLQwE4rp9fy3AjwkBVvA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gaisler.com; spf=pass smtp.mailfrom=gaisler.com; dkim=fail (0-bit key) header.d=gaisler.com header.i=@gaisler.com header.b=Dlgqm6AE reason="key not found in DNS"; arc=none smtp.client-ip=94.231.106.210 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gaisler.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gaisler.com Authentication-Results: smtp.subspace.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=gaisler.com header.i=@gaisler.com header.b="Dlgqm6AE" Received: from localhost (localhost [127.0.0.1]) by smtp.simply.com (Simply.com) with ESMTP id 4dbBlD6Nd3z1DR2r; Tue, 23 Dec 2025 11:56:24 +0100 (CET) Received: from d-5xj5g74.got.gaisler.com.com (h-98-128-223-123.NA.cust.bahnhof.se [98.128.223.123]) by smtp.simply.com (Simply.com) with ESMTPA id 4dbBlD4CHVz1DDXR; Tue, 23 Dec 2025 11:56:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gaisler.com; s=simplycom2; t=1766487384; bh=D75FInYv7q+tTdC8wpvfqdlIRn+A6/dzlZwY5qAcxSw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Dlgqm6AEdLt+9pD9jrJn7CEVcin/JFqekizJ0riu/8J0ZeDR8BxPEnvUZS0Hv7lMP 6aH3tji76gQLerzMgpW2egYXKVq91YKoqJ6iKxgtQqfZPDks1HsmGfZJJCQgL8OPcI VLWOJCOXT9+T+NIAAMmDlCtS1O2AU6fsfSRJxjzegH8TA1QzNku0bthhudgOp64/By 2yzPU+9BnvAfpFHgV73/Nt61wi1sH7KfLIx0VMqJlng5a4sxEMOTy9I7nP/ZkiasGd HHmVFFkIWuazcf7JwXnL3e84zS0SoWKG4AB4j+NWZjLUUbuaLdEkNLEhxtJDVnlyP2 EsGGCJqk8QmDQ== From: Arun Muthusamy To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, mkl@pengutronix.de, mailhol@kernel.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-can@vger.kernel.org, Daniel Hellstrom , Arun Muthusamy Subject: [PATCH v2 06/10] can: grcan: optimize DMA by 32-bit accesses Date: Tue, 23 Dec 2025 11:56:00 +0100 Message-ID: <20251223105604.12675-7-arun.muthusamy@gaisler.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251223105604.12675-1-arun.muthusamy@gaisler.com> References: <20251223105604.12675-1-arun.muthusamy@gaisler.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Daniel Hellstrom Optimizes DMA transfers in the GRCAN driver by reorganizing data handling to use 32-bit accesses instead of individual byte accesses. Signed-off-by: Daniel Hellstrom Signed-off-by: Arun Muthusamy --- drivers/net/can/grcan.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/net/can/grcan.c b/drivers/net/can/grcan.c index cac85fbe6acf..8a6c59473cf4 100644 --- a/drivers/net/can/grcan.c +++ b/drivers/net/can/grcan.c @@ -1218,7 +1218,7 @@ static int grcan_receive(struct net_device *dev, int = budget) struct sk_buff *skb; u32 wr, rd, startrd; u32 *slot; - u32 i, rtr, eff, j, shift; + u32 rtr, eff; int work_done =3D 0; =20 rd =3D grcan_read_reg(®s->rxrd); @@ -1254,10 +1254,10 @@ static int grcan_receive(struct net_device *dev, in= t budget) if (rtr) { cf->can_id |=3D CAN_RTR_FLAG; } else { - for (i =3D 0; i < cf->len; i++) { - j =3D GRCAN_MSG_DATA_SLOT_INDEX(i); - shift =3D GRCAN_MSG_DATA_SHIFT(i); - cf->data[i] =3D (u8)(slot[j] >> shift); + if (cf->can_dlc > 0) { + memcpy(cf->data, &slot[2], sizeof(u32)); + if (cf->can_dlc > 4) + memcpy(cf->data + 4, &slot[3], sizeof(u32)); } =20 stats->rx_bytes +=3D cf->len; @@ -1397,8 +1397,7 @@ static netdev_tx_t grcan_start_xmit(struct sk_buff *s= kb, u32 id, txwr, txrd, space, txctrl; int slotindex; u32 *slot; - u32 i, rtr, eff, dlc, tmp, err; - int j, shift; + u32 rtr, eff, dlc, tmp, err; unsigned long flags; u32 oneshotmode =3D priv->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT; =20 @@ -1451,10 +1450,11 @@ static netdev_tx_t grcan_start_xmit(struct sk_buff = *skb, slot[1] =3D ((dlc << GRCAN_MSG_DLC_BIT) & GRCAN_MSG_DLC); slot[2] =3D 0; slot[3] =3D 0; - for (i =3D 0; i < dlc; i++) { - j =3D GRCAN_MSG_DATA_SLOT_INDEX(i); - shift =3D GRCAN_MSG_DATA_SHIFT(i); - slot[j] |=3D cf->data[i] << shift; + if (dlc > 0) { + memcpy(&slot[2], cf->data, sizeof(u32)); + slot[2] =3D *(u32 *)(cf->data); + if (dlc > 4) + memcpy(&slot[3], cf->data + 4, sizeof(u32)); } =20 /* Checking that channel has not been disabled. These cases --=20 2.51.0