Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3358973pxb; Mon, 17 Jan 2022 18:32:21 -0800 (PST) X-Google-Smtp-Source: ABdhPJzFlrotEouJKNonSTeQYESHM6rN1IcQFa5AaZZ3IUXqPFWhou0jruQc+HgG7KjcXbZ59fC8 X-Received: by 2002:a17:90a:460f:: with SMTP id w15mr37557920pjg.123.1642473140981; Mon, 17 Jan 2022 18:32:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642473140; cv=none; d=google.com; s=arc-20160816; b=Hi1v7OqdYN7PJZs6RqvgOmxHhVs7OtmB5OQba0iTQ5h6rhFWN58IYLv0XiYvNeAqqS B3UsntXrRgr9RMVqxgGB2+XINEhADbrs3amTBLYkv150m0ibD8q3qYlz76XTHF9nxB/e VLN7hm4uaxwsN0fxE2rqaTsqrQrudGb66ksVLrVkklfNo8D2lKzBGQxF98NsxtGKHC7N h/UShZE7IJtqLvU8L9nXMXn8N8VEKSr3ARr1DX1CMXHGCFxMnclIxPIAUD3PK8pdUZdh Jau0wLdAMPv7Z/IEgBgKIxlAdks1hhwd5sCxxqLflXJCFstv8GeGJRQB5OQkH1izhoNZ d8QQ== 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=//LMbUHkpErBHp68R8BFDuOsQd3orhOXTmVc4xSeuHw=; b=XbfHklCN5yPD69p8bE7Aacyh9nj1H0r3U2Sxwf/heu1JjwCSil8wst/YRhsz79IpXU wWhjbR7KBnQSU9BUD9YCuVELI2l4zwIyPEz3fNSZbhRQ+BcPxGrR728g/76w7DMlIQ9z Nxbi4OlbgtIiBAbUK6Qp3dZ/Gtp6u9ONm1KTJvQaQvpu+Jp+Fsd6aTKGg/os2lPR5O6d aUJqzJY10IPipKDOqJ2GEff1PJrdDLwApTazhcvYHaLh2UOjFBbLVW0IRrY1ofujyDqd y7gpCEnm2YevOGDnb4XBPuWAYCJfH1zPh8m6Lf4xRXV3qxyn2/qCdM67r3EHwX4DmCvA CCDw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-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 p1si1065323pjr.119.2022.01.17.18.32.12; Mon, 17 Jan 2022 18:32:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless-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-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-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 S239844AbiAQOb2 (ORCPT + 70 others); Mon, 17 Jan 2022 09:31:28 -0500 Received: from marcansoft.com ([212.63.210.85]:56010 "EHLO mail.marcansoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239211AbiAQObE (ORCPT ); Mon, 17 Jan 2022 09:31:04 -0500 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 15DCA41AC8; Mon, 17 Jan 2022 14:30:54 +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 , Chi-hsien Lin , 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 Subject: [PATCH v3 5/9] brcmfmac: pcie: Replace brcmf_pcie_copy_mem_todev with memcpy_toio Date: Mon, 17 Jan 2022 23:29:15 +0900 Message-Id: <20220117142919.207370-6-marcan@marcan.st> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220117142919.207370-1-marcan@marcan.st> References: <20220117142919.207370-1-marcan@marcan.st> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@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 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