Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp898188pxb; Tue, 1 Feb 2022 12:43:21 -0800 (PST) X-Google-Smtp-Source: ABdhPJzY1H+wLiUETo8twu7P2NhFIKEn7NMZz5QQTOLHeojcDN4B+o0vgxqMpr2I6vjt3fCJ2k9G X-Received: by 2002:a05:6a00:158c:: with SMTP id u12mr26460832pfk.18.1643748201407; Tue, 01 Feb 2022 12:43:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643748201; cv=none; d=google.com; s=arc-20160816; b=fvb80Gxyo6ERP5yM+sx/CpCSF5+6H3XBcNNM9fEXGXTiZJPMNO9u/48B69UwgQcyc2 vXD0RDMa6zGlziwqyvCgtEylTnD0j6jOdDvttxXQE1PFYk28tN2KO3YSPTyC0wJagNJn VDlzDG5XHCAMgRl9sSGfpe3OOUSUn/Rl6+6MPsk6Sdd44iSKziY6T81EQm2epWM67Zpp RbnfFwD8X4/Dl1jfbQSmL0tUAy9qq44aZhbYH5V6ztNTsxvQYbAn8l1Cho5GgqKqQj0m OzlW4qvBo/6oksNMDLsX2Rw8ltgUuzYcwKv8gq5JkwIUDM8MGCu3zrXKzhHfleN5GrY8 uyaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=xtSpd7efyNWoiosNtpUk3nxQs8yal0u13p7NRpGk0iw=; b=oMvQBaz5iWVDRvjOLqszQKDlncXpqP41DoiIIpfTJAa3FB0rrq8NrTOtdY7qlQXEhT T5H7uAcrWp8ftweDwExMo9rCeLnY/1h9x1+t7Et0dyTawnNgxogs2yZCA/2nvrDoMhXc hEo6G6+8BAnf3wgnxaGyPeDPA6+cQsy4j10qQNt5DBgGXL/gy/DBCsB5VLxNBTkFjQiW jdSjAkEV0XyiDEbnCrykbnh2XGl5Cxwy83l0NdxHa1Czovc3qacT+P2TBr64EOQLBpFm QveQhEpE+RhBE1hHIILKkGCOngzC43T2YbmQz7FXTeHtrJcoYxphR1gf6Upeu/U7cvGm AAAQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=marcan.st Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d9si17042267pgd.804.2022.02.01.12.43.09; Tue, 01 Feb 2022 12:43:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=marcan.st Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349678AbiAaQIf (ORCPT + 99 others); Mon, 31 Jan 2022 11:08:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59552 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380103AbiAaQIP (ORCPT ); Mon, 31 Jan 2022 11:08:15 -0500 Received: from mail.marcansoft.com (marcansoft.com [IPv6:2a01:298:fe:f::2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40BF8C06173D; Mon, 31 Jan 2022 08:08:15 -0800 (PST) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hector@marcansoft.com) by mail.marcansoft.com (Postfix) with ESMTPSA id 339974206F; Mon, 31 Jan 2022 16:08:05 +0000 (UTC) From: Hector Martin To: Kalle Valo , "David S. Miller" , Jakub Kicinski , Rob Herring , "Rafael J. Wysocki" , Len Brown , Arend van Spriel , Franky Lin , Hante Meuleman , Wright Feng , Dmitry Osipenko Cc: Hector Martin , Sven Peter , Alyssa Rosenzweig , Mark Kettenis , =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= , Pieter-Paul Giesberts , Linus Walleij , Hans de Goede , "John W. Linville" , "brian m. carlson" , Andy Shevchenko , linux-wireless@vger.kernel.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, brcm80211-dev-list.pdl@broadcom.com, SHA-cyfmac-dev-list@infineon.com, Arend van Spriel , stable@vger.kernel.org Subject: [PATCH v4 5/9] brcmfmac: pcie: Replace brcmf_pcie_copy_mem_todev with memcpy_toio Date: Tue, 1 Feb 2022 01:07:09 +0900 Message-Id: <20220131160713.245637-6-marcan@marcan.st> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220131160713.245637-1-marcan@marcan.st> References: <20220131160713.245637-1-marcan@marcan.st> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The alignment check was wrong (e.g. & 4 instead of & 3), and the logic was also inefficient if the length was not a multiple of 4, since it would needlessly fall back to copying the entire buffer bytewise. We already have a perfectly good memcpy_toio function, so just call that instead of rolling our own copy logic here. brcmf_pcie_init_ringbuffers was already using it anyway. Fixes: 9e37f045d5e7 ("brcmfmac: Adding PCIe bus layer support.") Reviewed-by: Linus Walleij Reviewed-by: Arend van Spriel Reviewed-by: Andy Shevchenko Cc: stable@vger.kernel.org Signed-off-by: Hector Martin --- .../broadcom/brcm80211/brcmfmac/pcie.c | 48 ++----------------- 1 file changed, 4 insertions(+), 44 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c index b1ae6c41013f..c25f48db1f60 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -454,47 +455,6 @@ brcmf_pcie_write_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset, } -static void -brcmf_pcie_copy_mem_todev(struct brcmf_pciedev_info *devinfo, u32 mem_offset, - void *srcaddr, u32 len) -{ - void __iomem *address = devinfo->tcm + mem_offset; - __le32 *src32; - __le16 *src16; - u8 *src8; - - if (((ulong)address & 4) || ((ulong)srcaddr & 4) || (len & 4)) { - if (((ulong)address & 2) || ((ulong)srcaddr & 2) || (len & 2)) { - src8 = (u8 *)srcaddr; - while (len) { - iowrite8(*src8, address); - address++; - src8++; - len--; - } - } else { - len = len / 2; - src16 = (__le16 *)srcaddr; - while (len) { - iowrite16(le16_to_cpu(*src16), address); - address += 2; - src16++; - len--; - } - } - } else { - len = len / 4; - src32 = (__le32 *)srcaddr; - while (len) { - iowrite32(le32_to_cpu(*src32), address); - address += 4; - src32++; - len--; - } - } -} - - static void brcmf_pcie_copy_dev_tomem(struct brcmf_pciedev_info *devinfo, u32 mem_offset, void *dstaddr, u32 len) @@ -1570,8 +1530,8 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo, return err; brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name); - brcmf_pcie_copy_mem_todev(devinfo, devinfo->ci->rambase, - (void *)fw->data, fw->size); + memcpy_toio(devinfo->tcm + devinfo->ci->rambase, + (void *)fw->data, fw->size); resetintr = get_unaligned_le32(fw->data); release_firmware(fw); @@ -1585,7 +1545,7 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo, brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name); address = devinfo->ci->rambase + devinfo->ci->ramsize - nvram_len; - brcmf_pcie_copy_mem_todev(devinfo, address, nvram, nvram_len); + memcpy_toio(devinfo->tcm + address, nvram, nvram_len); brcmf_fw_nvram_free(nvram); } else { brcmf_dbg(PCIE, "No matching NVRAM file found %s\n", -- 2.33.0