wifi: rt2x00: set SoC wmac clock register

Instead of using the default value 33 (pci), set US_CYC_CNT init based
on Programming guide:
If available, set chipset bus clock with fallback to cpu clock/3.

Reported-by: Serge Vasilugin <vasilugin@yandex.ru>
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Acked-by: Stanislaw Gruszka <stf_xl@wp.pl>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/3e275d259f476f597dab91a9c395015ef3fe3284.1663445157.git.daniel@makrotopia.org
This commit is contained in:
Daniel Golle 2022-09-17 21:29:55 +01:00 committed by Kalle Valo
parent 0e09768c08
commit cbde6ed406

View file

@ -6229,6 +6229,27 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
reg = rt2800_register_read(rt2x00dev, US_CYC_CNT);
rt2x00_set_field32(&reg, US_CYC_CNT_CLOCK_CYCLE, 125);
rt2800_register_write(rt2x00dev, US_CYC_CNT, reg);
} else if (rt2x00_is_soc(rt2x00dev)) {
struct clk *clk = clk_get_sys("bus", NULL);
int rate;
if (IS_ERR(clk)) {
clk = clk_get_sys("cpu", NULL);
if (IS_ERR(clk)) {
rate = 125;
} else {
rate = clk_get_rate(clk) / 3000000;
clk_put(clk);
}
} else {
rate = clk_get_rate(clk) / 1000000;
clk_put(clk);
}
reg = rt2800_register_read(rt2x00dev, US_CYC_CNT);
rt2x00_set_field32(&reg, US_CYC_CNT_CLOCK_CYCLE, rate);
rt2800_register_write(rt2x00dev, US_CYC_CNT, reg);
}
reg = rt2800_register_read(rt2x00dev, HT_FBK_CFG0);