Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp1099153pxb; Fri, 1 Oct 2021 03:32:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy36o8r5ESg6PW4OFpWX8TFaG4l8rkxjzJ1Bt/Gmt1XStWXrFN1Yp6VFyIL3POD7hgCXc/0 X-Received: by 2002:a17:902:7783:b0:13d:fee6:8095 with SMTP id o3-20020a170902778300b0013dfee68095mr8755132pll.7.1633084371582; Fri, 01 Oct 2021 03:32:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633084371; cv=none; d=google.com; s=arc-20160816; b=M9ooqi+nMH2EvBQnhhVcZT/BxFQuZhI4vT3wqlkZYPIqmB9gcs0v0xVwxZhmbIwWle RStyGuYZBosaJKesLvnftwQ0Y5pViklISvn7E95o5kqBQL/8RXtwgHvz1LQS3zlnzeus H+4uHFsqic+SOLm5mZ3zgHn/8WndMCF9AXV7GNFLPL61a2bTl+uDIM3f/dbcdkqMkGSe 7xaUW7RAxJPod+fSgk8mGFKMUgLCmP2P6yWAdltjo2NKh4likPUaq3h/c2HeMClELvox aPVygwrrWV/Gq2JRcfy7ioudYLP7FLdYyPF1BLrjO7qxxwfzf+jVkY33ypTiJJwolmG4 +2vg== 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 :user-agent:message-id:in-reply-to:date:references:subject:cc:to :from:dmarc-filter:sender:dkim-signature; bh=2bttLv42HrO8OSNS4BdRIDDtX+8/+9g8pCv8FTqYHyI=; b=zH9osW/hQbmUpikaBl0d6b5I/0EAtkdHo+uoCvJ0CVLkiiW722y83ekCN15gjYNOX9 mV/p0NWQaCxEUrOZ7G+ewWRx3gTLlitIyA0jPgHtEPqUsXbufuoXjORsMIo2oG0SLu2S Iz1Hc5LJk2cGq8RvdITlDTHO1exDzNgF2o3oadBVS85Zs50D1uOlRVDrc1ozcQo7n3tp +yoQ2bzqh96Tq0IyJ1i8SJpHAWbhfVjQELcQRPjEidlk7nXF6iYOZI00PT9n1LJtT476 /RJnR7PVoaymSEpGXWLpTPRkRyaiCXVZizloH5GKLZAD8TYS+ueQ/vFfD3UBOhyFhp/9 u7Rg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=Qr2zPMnI; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p11si6908981plw.196.2021.10.01.03.32.40; Fri, 01 Oct 2021 03:32:51 -0700 (PDT) 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; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=Qr2zPMnI; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353177AbhJAJyQ (ORCPT + 77 others); Fri, 1 Oct 2021 05:54:16 -0400 Received: from m43-7.mailgun.net ([69.72.43.7]:51850 "EHLO m43-7.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352943AbhJAJyQ (ORCPT ); Fri, 1 Oct 2021 05:54:16 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1633081951; h=Content-Transfer-Encoding: Content-Type: MIME-Version: Message-ID: In-Reply-To: Date: References: Subject: Cc: To: From: Sender; bh=2bttLv42HrO8OSNS4BdRIDDtX+8/+9g8pCv8FTqYHyI=; b=Qr2zPMnIy3bNVfalULgSjcVeWGuGZgXvH/cOk18lfDPZDDvl6BwmpEzI5ZVyv2JTQY1Xhhba 8Kc9XkbmlIGGPPCmojBizlvXZ79PxU3MDWp4MKCyVWfV4ETiRgYUegSGBes7VzM6vW1tgE23 InbxdT/chHVPtLGY5F8rhzd72yU= X-Mailgun-Sending-Ip: 69.72.43.7 X-Mailgun-Sid: WyI3YTAwOSIsICJsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmciLCAiYmU5ZTRhIl0= Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n07.prod.us-west-2.postgun.com with SMTP id 6156da5e605ecf100b477d36 (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Fri, 01 Oct 2021 09:52:30 GMT Sender: kvalo=codeaurora.org@mg.codeaurora.org Received: by smtp.codeaurora.org (Postfix, from userid 1001) id E3BECC4361A; Fri, 1 Oct 2021 09:52:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED,BAYES_00,SPF_FAIL, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from tykki (tynnyri.adurom.net [51.15.11.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: kvalo) by smtp.codeaurora.org (Postfix) with ESMTPSA id CDC00C4338F; Fri, 1 Oct 2021 09:52:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 smtp.codeaurora.org CDC00C4338F Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=codeaurora.org From: Kalle Valo To: Jerome Pouiller Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, Pali =?utf-8?Q?Roh?= =?utf-8?Q?=C3=A1r?= , Ulf Hansson Subject: Re: [PATCH v7 09/24] wfx: add hwio.c/hwio.h References: <20210920161136.2398632-1-Jerome.Pouiller@silabs.com> <20210920161136.2398632-10-Jerome.Pouiller@silabs.com> Date: Fri, 01 Oct 2021 12:52:20 +0300 In-Reply-To: <20210920161136.2398632-10-Jerome.Pouiller@silabs.com> (Jerome Pouiller's message of "Mon, 20 Sep 2021 18:11:21 +0200") Message-ID: <87k0ixkr6z.fsf@codeaurora.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Jerome Pouiller writes: > From: J=C3=A9r=C3=B4me Pouiller > > Signed-off-by: J=C3=A9r=C3=B4me Pouiller > --- > drivers/net/wireless/silabs/wfx/hwio.c | 340 +++++++++++++++++++++++++ > drivers/net/wireless/silabs/wfx/hwio.h | 79 ++++++ [...] > +static int indirect_read(struct wfx_dev *wdev, int reg, u32 addr, > + void *buf, size_t len) > +{ > + int ret; > + int i; > + u32 cfg; > + u32 prefetch; > + > + WARN_ON(len >=3D 0x2000); A define for the magic value, please. I see this 0x2000 limit multiple times. > + WARN_ON(reg !=3D WFX_REG_AHB_DPORT && reg !=3D WFX_REG_SRAM_DPORT); I see quite a lot of WARN() and WARN_ON() in the driver. Do note that WARN() and WARN_ON() are a bit dangerous to use in the data path as an attacker, or even just a bug, might easily spam the kernel log which might result to host reboots due to watchdog triggering or other resource starvation. I recommend using some ratelimited versions of printk() macros, for example dev_*() if they have ratelimits. Not a blocker, but wanted to point out anyway. > +int wfx_data_read(struct wfx_dev *wdev, void *buf, size_t len) > +{ > + int ret; > + > + WARN((long)buf & 3, "%s: unaligned buffer", __func__); IS_ALIGNED()? > + wdev->hwbus_ops->lock(wdev->hwbus_priv); > + ret =3D wdev->hwbus_ops->copy_from_io(wdev->hwbus_priv, > + WFX_REG_IN_OUT_QUEUE, buf, len); > + _trace_io_read(WFX_REG_IN_OUT_QUEUE, buf, len); > + wdev->hwbus_ops->unlock(wdev->hwbus_priv); > + if (ret) > + dev_err(wdev->dev, "%s: bus communication error: %d\n", > + __func__, ret); > + return ret; > +} > + > +int wfx_data_write(struct wfx_dev *wdev, const void *buf, size_t len) > +{ > + int ret; > + > + WARN((long)buf & 3, "%s: unaligned buffer", __func__); IS_ALIGNED()? > --- /dev/null > +++ b/drivers/net/wireless/silabs/wfx/hwio.h > @@ -0,0 +1,79 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Low-level I/O functions. > + * > + * Copyright (c) 2017-2020, Silicon Laboratories, Inc. > + * Copyright (c) 2010, ST-Ericsson > + */ > +#ifndef WFX_HWIO_H > +#define WFX_HWIO_H > + > +#include > + > +struct wfx_dev; > + > +/* Caution: in the functions below, 'buf' will used with a DMA. So, it m= ust be > + * kmalloc'd (do not use stack allocated buffers). In doubt, enable > + * CONFIG_DEBUG_SG to detect badly located buffer. > + */ > +int wfx_data_read(struct wfx_dev *wdev, void *buf, size_t buf_len); > +int wfx_data_write(struct wfx_dev *wdev, const void *buf, size_t buf_len= ); > + > +int sram_buf_read(struct wfx_dev *wdev, u32 addr, void *buf, size_t len); > +int sram_buf_write(struct wfx_dev *wdev, u32 addr, const void *buf, size= _t len); > + > +int ahb_buf_read(struct wfx_dev *wdev, u32 addr, void *buf, size_t len); > +int ahb_buf_write(struct wfx_dev *wdev, u32 addr, const void *buf, size_= t len); > + > +int sram_reg_read(struct wfx_dev *wdev, u32 addr, u32 *val); > +int sram_reg_write(struct wfx_dev *wdev, u32 addr, u32 val); > + > +int ahb_reg_read(struct wfx_dev *wdev, u32 addr, u32 *val); > +int ahb_reg_write(struct wfx_dev *wdev, u32 addr, u32 val); "wfx_" prefix missing from these functions. > +int config_reg_read(struct wfx_dev *wdev, u32 *val); > +int config_reg_write(struct wfx_dev *wdev, u32 val); > +int config_reg_write_bits(struct wfx_dev *wdev, u32 mask, u32 val); > + > +#define CTRL_NEXT_LEN_MASK 0x00000FFF > +#define CTRL_WLAN_WAKEUP 0x00001000 > +#define CTRL_WLAN_READY 0x00002000 > +int control_reg_read(struct wfx_dev *wdev, u32 *val); > +int control_reg_write(struct wfx_dev *wdev, u32 val); > +int control_reg_write_bits(struct wfx_dev *wdev, u32 mask, u32 val); > + > +#define IGPR_RW 0x80000000 > +#define IGPR_INDEX 0x7F000000 > +#define IGPR_VALUE 0x00FFFFFF > +int igpr_reg_read(struct wfx_dev *wdev, int index, u32 *val); > +int igpr_reg_write(struct wfx_dev *wdev, int index, u32 val); And these too. --=20 https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatc= hes