2017-09-10 20:42:24

by Sven Joachim

[permalink] [raw]
Subject: Re: Patch "rtlwifi: btcoexist: Fix antenna selection code" has been added to the 4.13-stable tree

On 2017-09-10 13:37 +0200, [email protected] wrote:

> This is a note to let you know that I've just added the patch titled
>
> rtlwifi: btcoexist: Fix antenna selection code
>
> to the 4.13-stable tree which can be found at:
> http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
>
> The filename of the patch is:
> rtlwifi-btcoexist-fix-antenna-selection-code.patch
> and it can be found in the queue-4.13 subdirectory.
>
> If you, or anyone else, feels it should not be added to the stable tree,
> please let <[email protected]> know about it.
>
>
> From 6d622692836950b3c943776f84c4557ff6c02f3b Mon Sep 17 00:00:00 2001
> From: Larry Finger <[email protected]>
> Date: Mon, 4 Sep 2017 12:51:34 -0500
> Subject: rtlwifi: btcoexist: Fix antenna selection code
>
> From: Larry Finger <[email protected]>
>
> commit 6d622692836950b3c943776f84c4557ff6c02f3b upstream.
>
> In commit 87d8a9f35202 ("rtlwifi: btcoex: call bind to setup btcoex"),
> the code turns on a call to exhalbtc_bind_bt_coex_withadapter(). This
> routine contains a bug that causes incorrect antenna selection for those
> HP laptops with only one antenna and an incorrectly programmed EFUSE.
> These boxes are the ones that need the ant_sel module parameter.

I am the unlucky owner of such a laptop.

> Fixes: 87d8a9f35202 ("rtlwifi: btcoex: call bind to setup btcoex")
> Signed-off-by: Larry Finger <[email protected]>
> Cc: Ping-Ke Shih <[email protected]>
> Cc: Yan-Hsuan Chuang <[email protected]>
> Cc: Birming Chiu <[email protected]>
> Cc: Shaofu <[email protected]>
> Cc: Steven Ting <[email protected]>
> Signed-off-by: Kalle Valo <[email protected]>
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
>
> ---
> drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c | 23 ++++++----
> 1 file changed, 16 insertions(+), 7 deletions(-)
>
> --- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c
> +++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.c
> @@ -173,6 +173,16 @@ static u8 halbtc_get_wifi_central_chnl(s
>
> u8 rtl_get_hwpg_single_ant_path(struct rtl_priv *rtlpriv)
> {
> + struct rtl_mod_params *mod_params = rtlpriv->cfg->mod_params;
> +
> + /* override ant_num / ant_path */
> + if (mod_params->ant_sel) {
> + rtlpriv->btcoexist.btc_info.ant_num =
> + (mod_params->ant_sel == 1 ? ANT_X2 : ANT_X1);
> +
> + rtlpriv->btcoexist.btc_info.single_ant_path =
> + (mod_params->ant_sel == 1 ? 0 : 1);
> + }
> return rtlpriv->btcoexist.btc_info.single_ant_path;
> }
>
> @@ -183,6 +193,7 @@ u8 rtl_get_hwpg_bt_type(struct rtl_priv
>
> u8 rtl_get_hwpg_ant_num(struct rtl_priv *rtlpriv)
> {
> + struct rtl_mod_params *mod_params = rtlpriv->cfg->mod_params;
> u8 num;
>
> if (rtlpriv->btcoexist.btc_info.ant_num == ANT_X2)
> @@ -190,6 +201,10 @@ u8 rtl_get_hwpg_ant_num(struct rtl_priv
> else
> num = 1;
>
> + /* override ant_num / ant_path */
> + if (mod_params->ant_sel)
> + num = (mod_params->ant_sel == 1 ? ANT_X2 : ANT_X1) + 1;
> +
> return num;
> }
>
> @@ -861,7 +876,7 @@ bool exhalbtc_bind_bt_coex_withadapter(v
> {
> struct btc_coexist *btcoexist = &gl_bt_coexist;
> struct rtl_priv *rtlpriv = adapter;
> - u8 ant_num = 2, chip_type, single_ant_path = 0;
> + u8 ant_num = 2, chip_type;
>
> if (btcoexist->binded)
> return false;
> @@ -896,12 +911,6 @@ bool exhalbtc_bind_bt_coex_withadapter(v
> ant_num = rtl_get_hwpg_ant_num(rtlpriv);
> exhalbtc_set_ant_num(rtlpriv, BT_COEX_ANT_TYPE_PG, ant_num);
>
> - /* set default antenna position to main port */
> - btcoexist->board_info.btdm_ant_pos = BTC_ANTENNA_AT_MAIN_PORT;
> -
> - single_ant_path = rtl_get_hwpg_single_ant_path(rtlpriv);
> - exhalbtc_set_single_ant_path(single_ant_path);
> -
> if (rtl_get_hwpg_package_type(rtlpriv) == 0)
> btcoexist->board_info.tfbga_package = false;
> else if (rtl_get_hwpg_package_type(rtlpriv) == 1)
>
>
> Patches currently in stable-queue which might be from [email protected] are
>
> queue-4.13/rtlwifi-btcoexist-fix-breakage-of-ant_sel-for-rtl8723be.patch
> queue-4.13/rtlwifi-btcoexist-fix-antenna-selection-code.patch

After applying these patches on top of 4.13.1 the WiFi on my laptop
works again (thanks, Larry!), but now rtl8723be needs the ant_sel=2
parameter which is a bit odd, because previously it had been working
(only) with ant_sel=1. This looks like it has not been intended?

Cheers,
Sven


2017-09-11 00:28:50

by Larry Finger

[permalink] [raw]
Subject: Re: Patch "rtlwifi: btcoexist: Fix antenna selection code" has been added to the 4.13-stable tree

On 09/10/2017 03:42 PM, Sven Joachim wrote:
>> queue-4.13/rtlwifi-btcoexist-fix-antenna-selection-code.patch
>
> After applying these patches on top of 4.13.1 the WiFi on my laptop
> works again (thanks, Larry!), but now rtl8723be needs the ant_sel=2
> parameter which is a bit odd, because previously it had been working
> (only) with ant_sel=1. This looks like it has not been intended?

The changes in the BT coexistence are rather substantial, and I had no part in
those changes. That code is used in both Windows and Linux, and the Linux group
is presented with the package. The best we can do is divide their massive
changes into pieces that are small enough to be accepted by the Linux community.

One thing I can say is that when a single antenna is connected to port 2 on my
card, ant_sel=1 works. When it is connected to post 1, then ant_sel=0 works;
however, my card is encoded to use two antennas. As I do not know what value is
encoded in your EFUSE, I cannot predict what value should work for you.

What I am reasonably certain is that if you were to open your computer and move
the single antenna lead to the other port, then you would not need to use any
ant_sel command as the new port would match the EFUSE value. According to
reports, that would break the Windows driver, but I do not have the setup
necessary to test that assertion.

As I have stated before, this ant_sel code was implemented to provide a service
for Linux users that were screwed by their vendor. If I had known how much grief
this attempt would cause me, I would have told the affected users to complain to
that vendor. It is clearly true that no good deed goes unpunished!

Larry