
This patch contains some performance and stability improvements for RT5592: 1. Fix RFCSR register init values for RT5592. 2. Fix BBP register init values for RT5592. Signed-off-by: Shiji Yang <yangshiji66@qq.com> Link: https://github.com/openwrt/openwrt/pull/16845 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> (cherry picked from commit 59557ca19a460d8ad70991f63616d1ad0dfe9823)
231 lines
8.4 KiB
Diff
231 lines
8.4 KiB
Diff
From b48887d5de9921d0ff9e88068e3cd555a383d702 Mon Sep 17 00:00:00 2001
|
|
From: Shiji Yang <yangshiji66@outlook.com>
|
|
Date: Sun, 22 Dec 2024 17:06:59 +0800
|
|
Subject: [PATCH 1/2] rt2x00: fix RFCSR register init values for RT5592
|
|
|
|
Based on Raink proprietary driver 2.7.1.5, correct the initial
|
|
values of some RFCSR registers for RT5592.
|
|
|
|
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
|
---
|
|
.../net/wireless/ralink/rt2x00/rt2800lib.c | 122 ++++++++----------
|
|
1 file changed, 53 insertions(+), 69 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
|
|
@@ -3576,9 +3576,8 @@ static void rt2800_config_channel_rf55xx
|
|
|
|
/* TODO RF27 <- tssi */
|
|
|
|
- rfcsr = rf->channel <= 10 ? 0x07 : 0x06;
|
|
- rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
|
|
- rt2800_rfcsr_write(rt2x00dev, 59, rfcsr);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 23, rf->channel <= 10 ? 0x08 : 0x07);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 59, rf->channel <= 4 ? 0x06 : 0x04);
|
|
|
|
if (is_11b) {
|
|
/* CCK */
|
|
@@ -3599,7 +3598,7 @@ static void rt2800_config_channel_rf55xx
|
|
power_bound = POWER_BOUND;
|
|
ep_reg = 0x2;
|
|
} else {
|
|
- rt2800_rfcsr_write(rt2x00dev, 10, 0x97);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 10, 0x95);
|
|
/* FIMXE: RF11 overwrite */
|
|
rt2800_rfcsr_write(rt2x00dev, 11, 0x40);
|
|
rt2800_rfcsr_write(rt2x00dev, 25, 0xBF);
|
|
@@ -3608,13 +3607,15 @@ static void rt2800_config_channel_rf55xx
|
|
rt2800_rfcsr_write(rt2x00dev, 37, 0x04);
|
|
rt2800_rfcsr_write(rt2x00dev, 38, 0x85);
|
|
rt2800_rfcsr_write(rt2x00dev, 40, 0x42);
|
|
- rt2800_rfcsr_write(rt2x00dev, 41, 0xBB);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 41, 0xAB);
|
|
rt2800_rfcsr_write(rt2x00dev, 42, 0xD7);
|
|
- rt2800_rfcsr_write(rt2x00dev, 45, 0x41);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 45, 0x01);
|
|
rt2800_rfcsr_write(rt2x00dev, 48, 0x00);
|
|
rt2800_rfcsr_write(rt2x00dev, 57, 0x77);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 58, 0x19);
|
|
rt2800_rfcsr_write(rt2x00dev, 60, 0x05);
|
|
rt2800_rfcsr_write(rt2x00dev, 61, 0x01);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 62, 0x19);
|
|
|
|
/* TODO RF27 <- tssi */
|
|
|
|
@@ -3623,82 +3624,59 @@ static void rt2800_config_channel_rf55xx
|
|
rt2800_rfcsr_write(rt2x00dev, 12, 0x2E);
|
|
rt2800_rfcsr_write(rt2x00dev, 13, 0x22);
|
|
rt2800_rfcsr_write(rt2x00dev, 22, 0x60);
|
|
- rt2800_rfcsr_write(rt2x00dev, 23, 0x7F);
|
|
- if (rf->channel <= 50)
|
|
- rt2800_rfcsr_write(rt2x00dev, 24, 0x09);
|
|
- else if (rf->channel >= 52)
|
|
- rt2800_rfcsr_write(rt2x00dev, 24, 0x07);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 23, 0x7E);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 24, 0x07);
|
|
rt2800_rfcsr_write(rt2x00dev, 39, 0x1C);
|
|
rt2800_rfcsr_write(rt2x00dev, 43, 0x5B);
|
|
- rt2800_rfcsr_write(rt2x00dev, 44, 0X40);
|
|
rt2800_rfcsr_write(rt2x00dev, 46, 0X00);
|
|
- rt2800_rfcsr_write(rt2x00dev, 51, 0xFE);
|
|
- rt2800_rfcsr_write(rt2x00dev, 52, 0x0C);
|
|
- rt2800_rfcsr_write(rt2x00dev, 54, 0xF8);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 51, 0xFD);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 52, 0x0E);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 55, 0x04);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 56, 0xBB);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 59, 0x7C);
|
|
+
|
|
if (rf->channel <= 50) {
|
|
- rt2800_rfcsr_write(rt2x00dev, 55, 0x06),
|
|
- rt2800_rfcsr_write(rt2x00dev, 56, 0xD3);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 44, 0X32);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 54, 0xF9);
|
|
} else if (rf->channel >= 52) {
|
|
- rt2800_rfcsr_write(rt2x00dev, 55, 0x04);
|
|
- rt2800_rfcsr_write(rt2x00dev, 56, 0xBB);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 44, 0X2A);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 54, 0xF8);
|
|
}
|
|
-
|
|
- rt2800_rfcsr_write(rt2x00dev, 58, 0x15);
|
|
- rt2800_rfcsr_write(rt2x00dev, 59, 0x7F);
|
|
- rt2800_rfcsr_write(rt2x00dev, 62, 0x15);
|
|
-
|
|
} else if (rf->channel >= 100 && rf->channel <= 165) {
|
|
-
|
|
rt2800_rfcsr_write(rt2x00dev, 12, 0x0E);
|
|
rt2800_rfcsr_write(rt2x00dev, 13, 0x42);
|
|
rt2800_rfcsr_write(rt2x00dev, 22, 0x40);
|
|
- if (rf->channel <= 153) {
|
|
- rt2800_rfcsr_write(rt2x00dev, 23, 0x3C);
|
|
- rt2800_rfcsr_write(rt2x00dev, 24, 0x06);
|
|
- } else if (rf->channel >= 155) {
|
|
- rt2800_rfcsr_write(rt2x00dev, 23, 0x38);
|
|
- rt2800_rfcsr_write(rt2x00dev, 24, 0x05);
|
|
- }
|
|
+ rt2800_rfcsr_write(rt2x00dev, 52, 0x06);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 55, 0x01);
|
|
+
|
|
if (rf->channel <= 138) {
|
|
+ rt2800_rfcsr_write(rt2x00dev, 23, 0x7C);
|
|
rt2800_rfcsr_write(rt2x00dev, 39, 0x1A);
|
|
rt2800_rfcsr_write(rt2x00dev, 43, 0x3B);
|
|
- rt2800_rfcsr_write(rt2x00dev, 44, 0x20);
|
|
rt2800_rfcsr_write(rt2x00dev, 46, 0x18);
|
|
- } else if (rf->channel >= 140) {
|
|
+ } else {
|
|
+ rt2800_rfcsr_write(rt2x00dev, 23, 0x78);
|
|
rt2800_rfcsr_write(rt2x00dev, 39, 0x18);
|
|
rt2800_rfcsr_write(rt2x00dev, 43, 0x1B);
|
|
- rt2800_rfcsr_write(rt2x00dev, 44, 0x10);
|
|
rt2800_rfcsr_write(rt2x00dev, 46, 0X08);
|
|
}
|
|
- if (rf->channel <= 124)
|
|
- rt2800_rfcsr_write(rt2x00dev, 51, 0xFC);
|
|
- else if (rf->channel >= 126)
|
|
- rt2800_rfcsr_write(rt2x00dev, 51, 0xEC);
|
|
- if (rf->channel <= 138)
|
|
- rt2800_rfcsr_write(rt2x00dev, 52, 0x06);
|
|
- else if (rf->channel >= 140)
|
|
- rt2800_rfcsr_write(rt2x00dev, 52, 0x06);
|
|
- rt2800_rfcsr_write(rt2x00dev, 54, 0xEB);
|
|
- if (rf->channel <= 138)
|
|
- rt2800_rfcsr_write(rt2x00dev, 55, 0x01);
|
|
- else if (rf->channel >= 140)
|
|
- rt2800_rfcsr_write(rt2x00dev, 55, 0x00);
|
|
- if (rf->channel <= 128)
|
|
- rt2800_rfcsr_write(rt2x00dev, 56, 0xBB);
|
|
- else if (rf->channel >= 130)
|
|
- rt2800_rfcsr_write(rt2x00dev, 56, 0xAB);
|
|
- if (rf->channel <= 116)
|
|
- rt2800_rfcsr_write(rt2x00dev, 58, 0x1D);
|
|
- else if (rf->channel >= 118)
|
|
- rt2800_rfcsr_write(rt2x00dev, 58, 0x15);
|
|
- if (rf->channel <= 138)
|
|
- rt2800_rfcsr_write(rt2x00dev, 59, 0x3F);
|
|
- else if (rf->channel >= 140)
|
|
- rt2800_rfcsr_write(rt2x00dev, 59, 0x7C);
|
|
- if (rf->channel <= 116)
|
|
- rt2800_rfcsr_write(rt2x00dev, 62, 0x1D);
|
|
- else if (rf->channel >= 118)
|
|
- rt2800_rfcsr_write(rt2x00dev, 62, 0x15);
|
|
+
|
|
+ if (rf->channel <= 114) {
|
|
+ rt2800_rfcsr_write(rt2x00dev, 24, 0x02);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 44, 0x1A);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 54, 0xEA);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 56, 0xB3);
|
|
+ } else {
|
|
+ rt2800_rfcsr_write(rt2x00dev, 24, 0x03);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 44, 0x0A);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 54, 0xF9);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 56, 0x9B);
|
|
+ }
|
|
+
|
|
+ rt2800_rfcsr_write(rt2x00dev, 51, rf->channel <= 124 ? 0xFC : 0xEC);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 58, rf->channel <= 116 ? 0x1D : 0x15);
|
|
+ rfcsr = (rf->channel >= 116 && rf->channel <= 138) ? 0x7E : 0x7C;
|
|
+ rt2800_rfcsr_write(rt2x00dev, 59, rfcsr);
|
|
}
|
|
|
|
power_bound = POWER_BOUND_5G;
|
|
@@ -3710,7 +3688,7 @@ static void rt2800_config_channel_rf55xx
|
|
rt2x00_set_field8(&rfcsr, RFCSR49_TX, power_bound);
|
|
else
|
|
rt2x00_set_field8(&rfcsr, RFCSR49_TX, info->default_power1);
|
|
- if (is_type_ep)
|
|
+ if (!is_type_ep)
|
|
rt2x00_set_field8(&rfcsr, RFCSR49_EP, ep_reg);
|
|
rt2800_rfcsr_write(rt2x00dev, 49, rfcsr);
|
|
|
|
@@ -3719,7 +3697,7 @@ static void rt2800_config_channel_rf55xx
|
|
rt2x00_set_field8(&rfcsr, RFCSR50_TX, power_bound);
|
|
else
|
|
rt2x00_set_field8(&rfcsr, RFCSR50_TX, info->default_power2);
|
|
- if (is_type_ep)
|
|
+ if (!is_type_ep)
|
|
rt2x00_set_field8(&rfcsr, RFCSR50_EP, ep_reg);
|
|
rt2800_rfcsr_write(rt2x00dev, 50, rfcsr);
|
|
|
|
@@ -3740,7 +3718,6 @@ static void rt2800_config_channel_rf55xx
|
|
rt2x00_set_field8(&rfcsr, RFCSR1_RX2_PD, 0);
|
|
|
|
rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
|
|
- rt2800_rfcsr_write(rt2x00dev, 6, 0xe4);
|
|
|
|
if (conf_is_ht40(conf))
|
|
rt2800_rfcsr_write(rt2x00dev, 30, 0x16);
|
|
@@ -8505,12 +8482,15 @@ static void rt2800_init_rfcsr_5392(struc
|
|
|
|
static void rt2800_init_rfcsr_5592(struct rt2x00_dev *rt2x00dev)
|
|
{
|
|
+ u16 eeprom;
|
|
+
|
|
rt2800_rf_init_calibration(rt2x00dev, 30);
|
|
|
|
rt2800_rfcsr_write(rt2x00dev, 1, 0x3F);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 2, 0x80);
|
|
rt2800_rfcsr_write(rt2x00dev, 3, 0x08);
|
|
rt2800_rfcsr_write(rt2x00dev, 5, 0x10);
|
|
- rt2800_rfcsr_write(rt2x00dev, 6, 0xE4);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 6, 0xE0);
|
|
rt2800_rfcsr_write(rt2x00dev, 7, 0x00);
|
|
rt2800_rfcsr_write(rt2x00dev, 14, 0x00);
|
|
rt2800_rfcsr_write(rt2x00dev, 15, 0x00);
|
|
@@ -8526,9 +8506,13 @@ static void rt2800_init_rfcsr_5592(struc
|
|
rt2800_rfcsr_write(rt2x00dev, 34, 0x07);
|
|
rt2800_rfcsr_write(rt2x00dev, 35, 0x12);
|
|
rt2800_rfcsr_write(rt2x00dev, 47, 0x0C);
|
|
- rt2800_rfcsr_write(rt2x00dev, 53, 0x22);
|
|
+ rt2800_rfcsr_write(rt2x00dev, 53, 0x44);
|
|
rt2800_rfcsr_write(rt2x00dev, 63, 0x07);
|
|
|
|
+ eeprom = rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF2);
|
|
+ if (!rt2x00_get_field16(eeprom, EEPROM_NIC_CONF2_CRYSTAL))
|
|
+ rt2800_rfcsr_write(rt2x00dev, 6, 0xE4);
|
|
+
|
|
rt2800_rfcsr_write(rt2x00dev, 2, 0x80);
|
|
msleep(1);
|
|
|