Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp1467379ybc; Tue, 12 Nov 2019 22:14:43 -0800 (PST) X-Google-Smtp-Source: APXvYqycjn7v/ZwXUFIITu+8cpRsSsIjfxuExd9eC528RY9ciH94sDde4wPnpSikHKR4ACwYcKw9 X-Received: by 2002:aa7:c048:: with SMTP id k8mr1756034edo.254.1573625683470; Tue, 12 Nov 2019 22:14:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573625683; cv=none; d=google.com; s=arc-20160816; b=N57c7eEBCSel0vqdKEirLJ6juH9NAtWoMDe1g/boGLdjU4rTXoZnZQxxqSxocw6czi YTi4YRMmcHLAjJufuct8EqsLS/FiqSZnGz77D3/s93TVl6JNBg0dxVD3x/qAjilme6Fs EiEnOfuS6DLiFKJGioefEr6zwILOZAnJCeGU/5ajCD+Pu3Msvru6Zhax3HtvDJyACQGg Qk8DEM4/NVwBrS3Q5FVZywIfZZSZSZEafFxsFSjj566SEgHfCXd7blxUr3Brm2ixd26y 5oM461eQfObV8SV9oe4AlF9GsUlLu75jBobSB7z+IZyp7GB61hZzump0E61cBzE1yZzi E5qg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=H8egHlGJMjuuAuvMnmcFtMV/J2mUbLVKD3E2DqthPlU=; b=Z5w50r+0e6a+vFjhSFxyml0HWfJLH7e5X8lObSGTt4X87S5ykiJzGBA6Szjzv7PK8b URFawGeGIZrNlb9x2AyFhxFlHixkhVxBl1N3m3fSo0Q/JCMjGXR+0szTER+NDICpkxJM llIsV62pYcJV2XYJgMJzskRGOSd/oVfu9zNnCliHtwIcY/Tj97dO1K29KIfBr/FoQcy9 yyEOU9y0DxQsfUKPbHeiEhTRmMiXeqB/Z1BVVnlw9SghyzTXtmjHGzuM7GRTD9klunKi xXz8wwwp1ckz+43dRif19FIascbXpfjZiffOq8qLbQy/DhOvln1Grsh6ajnEeQ4GwTP7 XKng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@endlessm-com.20150623.gappssmtp.com header.s=20150623 header.b=OwJXuc73; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h21si667056edb.20.2019.11.12.22.14.03; Tue, 12 Nov 2019 22:14:43 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@endlessm-com.20150623.gappssmtp.com header.s=20150623 header.b=OwJXuc73; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725939AbfKMGNu (ORCPT + 99 others); Wed, 13 Nov 2019 01:13:50 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:35687 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725866AbfKMGNu (ORCPT ); Wed, 13 Nov 2019 01:13:50 -0500 Received: by mail-qt1-f196.google.com with SMTP id n4so1402070qte.2 for ; Tue, 12 Nov 2019 22:13:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=endlessm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=H8egHlGJMjuuAuvMnmcFtMV/J2mUbLVKD3E2DqthPlU=; b=OwJXuc73jTzk14sdBN824SNS4sKvOibNrgXrqSYHFmtvOFRFxSl8LFar5L1fjLWdUU fCYafm0aA9vw4up+xsWDZEDhJ55EoePEsrGdaaIPUv86KYZocWKhrwuB3gJg+BFz2lBc +4PwpeKbk0VouC+Qv0WgwYEdgwFCy4ZCkok1LWErdxvFODZxra6vpf9Nh9xnXFYUxL82 mYXgVBj42BOiGZQPgczYtZ44HArYpbFzk2vp6vld1J8ehO4t3tg6aaSbJrySNsrGSISp tF3+jbUx5Hdk5wlu1wspJxXXZhut7gTAFrZ/BbwxBufpYqVPaqKFB5FqBkdcVMdF/8El JiOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=H8egHlGJMjuuAuvMnmcFtMV/J2mUbLVKD3E2DqthPlU=; b=NIdPIpz8ja79sEGgtnkNs3A73+F44+8tCcGsqqGiWrcsdtltIXayIns3MdntyRpMVd Zp5c5B5PFvOKmr4MlBPZK9Npc127x7eACuhzGcxZO5DLoC+2s3K1DSte7RfAwKpRKgkk 6lUZ4TVpaiQzSeT0kYE6ZkRHfQzKUigRZ3GpfW+lhuyVvM1FYVkw5TCB7X8jPjKTT2vB +3j7NTDKKC3AFdUvKCDI/Hr797FIji04yHi5PiUKgACJOQFrNDpimqMJRcaUqiEfcX7p qX+EY5Y6b1VTX9HgFvgTYXiXFZBfVrcIA18AlxlzVYg+myu3ADdIqMQ98b3iMEWGkfxk pr6g== X-Gm-Message-State: APjAAAWh3LtU1ShtyfOKI5R6pvgnO5FfUOPJwB+98IV6BqD9z73HoM5z 8hPArfdJNYl7st+wFmWVYF0Rd6GzHs8BSlGkwGiQkw== X-Received: by 2002:ac8:3968:: with SMTP id t37mr1134372qtb.37.1573625627541; Tue, 12 Nov 2019 22:13:47 -0800 (PST) MIME-Version: 1.0 References: <20191107111603.12317-1-yhchuang@realtek.com> <20191107111603.12317-4-yhchuang@realtek.com> In-Reply-To: <20191107111603.12317-4-yhchuang@realtek.com> From: Chris Chiu Date: Wed, 13 Nov 2019 14:13:36 +0800 Message-ID: Subject: Re: [PATCH 3/4] rtw88: pci: enable CLKREQ function if host supports it To: Tony Chuang Cc: Kalle Valo , linux-wireless , Brian Norris Content-Type: text/plain; charset="UTF-8" Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org On Thu, Nov 7, 2019 at 7:16 PM wrote: > > From: Yan-Hsuan Chuang > > By Realtek's design, there are two HW modules associated for CLKREQ, > one is responsible to follow the PCIE host settings, and another > is to actually working on it. But the module that is actually working > on it is default disabled, and driver should enable that module if > host and device have successfully sync'ed with each other. > > The module is default disabled because sometimes the host does not > support it, and if there is any incorrect settings (ex. CLKREQ# is > not Bi-Direction), device can be lost and disconnected to the host. > > So driver should first check after host and device are sync'ed, and > the host does support the function and set it in configuration > space, then driver can turn on the HW module to working on it. > > Signed-off-by: Yan-Hsuan Chuang > --- > drivers/net/wireless/realtek/rtw88/pci.c | 83 ++++++++++++++++++++++++ > drivers/net/wireless/realtek/rtw88/pci.h | 5 ++ > 2 files changed, 88 insertions(+) > > diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c > index 6d1aa6f41e84..4fcef8a6fc42 100644 > --- a/drivers/net/wireless/realtek/rtw88/pci.c > +++ b/drivers/net/wireless/realtek/rtw88/pci.c > @@ -1081,6 +1081,33 @@ static void rtw_dbi_write8(struct rtw_dev *rtwdev, u16 addr, u8 data) > WARN(flag, "failed to write to DBI register, addr=0x%04x\n", addr); > } > > +static int rtw_dbi_read8(struct rtw_dev *rtwdev, u16 addr, u8 *value) > +{ > + u16 read_addr = addr & BITS_DBI_ADDR_MASK; > + u8 flag; > + u8 cnt; > + > + rtw_write16(rtwdev, REG_DBI_FLAG_V1, read_addr); > + rtw_write8(rtwdev, REG_DBI_FLAG_V1 + 2, BIT_DBI_RFLAG >> 16); > + > + for (cnt = 0; cnt < RTW_PCI_WR_RETRY_CNT; cnt++) { > + flag = rtw_read8(rtwdev, REG_DBI_FLAG_V1 + 2); > + if (flag == 0) > + break; Why not just doing ' rtw_read8(rtwdev, read_addr);' and return here? Then you don't need to check the flag != 0 at the following. It would make the code cleaner and same expressive. > + > + udelay(10); > + } > + > + if (flag != 0) { > + WARN(1, "failed to read DBI register, addr=0x%04x\n", addr); > + return -EIO; > + } > + > + read_addr = REG_DBI_RDATA_V1 + (addr & 3); > + *value = rtw_read8(rtwdev, read_addr); > + return 0; > +} > + > -- > 2.17.1 >