From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ryder Lee Subject: Re: [PATCH] mt76: mt7615: add support for per-chain signal strength reporting Date: Mon, 10 Jun 2019 12:22:21 +0800 Message-ID: <1560140541.5606.12.camel@mtkswgap22> References: <3912a2863e858f3623ced61737836e42c7b19149.1560071167.git.ryder.lee@mediatek.com> <1560132590.28258.5.camel@mtkswgap22> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1560132590.28258.5.camel@mtkswgap22> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+glpam-linux-mediatek=m.gmane.org-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org To: Sebastian Gottschall Cc: Sean Wang , Chih-Min Chen , YF Luo , linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Yiwei Chung , linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, Roy Luo , Lorenzo Bianconi , Felix Fietkau List-Id: linux-mediatek@lists.infradead.org On Mon, 2019-06-10 at 10:09 +0800, Ryder Lee wrote: > On Sun, 2019-06-09 at 16:44 +0200, Sebastian Gottschall wrote: > > according to my findings > > > > MT_RXV4_RCPI1 is part of rx descriptor 4 and not 3 > > so it must be rxdg4 = rxd[4] etc. > > RXV start from 1 in the code. > > That is: RXV1 <-> rxdg0, RXV2 <-> rxdg1 ...so RXV4 <-> rxdg3 > > > however rxdg3 contains MT_RXV3_IB_RSSIRX which can be used for signal calculation. > > i already wrote a similar code for this driver which i sended to felix a long time ago. > > my variant looks like > > status->signal = (FIELD_GET(MT_RXV3_IB_RSSIRX, rxdg3) - 220) / 2; > > status->chain_signal[0] = (FIELD_GET(MT_RXV4_RCPI0, rxdg4) - 220) / 2; > > status->chain_signal[1] = (FIELD_GET(MT_RXV4_RCPI1, rxdg4) - 220) / 2; > > status->chain_signal[2] = (FIELD_GET(MT_RXV4_RCPI2, rxdg4) - 220) / 2; > > status->chain_signal[3] = (FIELD_GET(MT_RXV4_RCPI3, rxdg4) - 220) / 2; mt7615 actually doesn't use in-band RSSI for signal calculation, but it occurs to me that i should modify the code to compare per-chain's signal. Something like this: status->chain_signal[0] = to_rssi(MT_RXV4_RCPI0, rxdg3); status->chain_signal[1] = to_rssi(MT_RXV4_RCPI1, rxdg3); status->chain_signal[2] = to_rssi(MT_RXV4_RCPI2, rxdg3); status->chain_signal[3] = to_rssi(MT_RXV4_RCPI3, rxdg3); status->signal = status->chain_signal[0]; switch (status->chains) { case 0xf: status->signal = max(status->signal, status->chain_signal[3]); case 0x7: status->signal = max(status->signal, status->chain_signal[2]); case 0x3: status->signal = max(status->signal, status->chain_signal[1]); break; default: break; } I could send a v2 or you can take care of that. Ryder