* [PATCH 1/5] mt76x0: print BBP version only for debug
2018-10-04 10:04 [PATCH 0/5] mt76x0: phy/rf fixups for PCIe Stanislaw Gruszka
@ 2018-10-04 10:04 ` Stanislaw Gruszka
2018-10-04 10:04 ` [PATCH 2/5] mt76x0: correct RF access via RF_CSR regiser Stanislaw Gruszka
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Stanislaw Gruszka @ 2018-10-04 10:04 UTC (permalink / raw)
To: Felix Fietkau; +Cc: linux-wireless, Lorenzo Bianconi
Use dev_dbg to print BBP version.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/mediatek/mt76/mt76x0/phy.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
index ba3b5847af48..cbbfd5193d9c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
@@ -186,7 +186,6 @@ int mt76x0_wait_bbp_ready(struct mt76x02_dev *dev)
do {
val = mt76_rr(dev, MT_BBP(CORE, 0));
- printk("BBP version %08x\n", val);
if (val && ~val)
break;
} while (--i);
@@ -196,6 +195,7 @@ int mt76x0_wait_bbp_ready(struct mt76x02_dev *dev)
return -EIO;
}
+ dev_dbg(dev->mt76.dev, "BBP version %08x\n", val);
return 0;
}
--
1.9.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/5] mt76x0: correct RF access via RF_CSR regiser.
2018-10-04 10:04 [PATCH 0/5] mt76x0: phy/rf fixups for PCIe Stanislaw Gruszka
2018-10-04 10:04 ` [PATCH 1/5] mt76x0: print BBP version only for debug Stanislaw Gruszka
@ 2018-10-04 10:04 ` Stanislaw Gruszka
2018-10-06 8:25 ` Lorenzo Bianconi
2018-10-04 10:04 ` [PATCH 3/5] mt76: allow to identify bus Stanislaw Gruszka
` (3 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Stanislaw Gruszka @ 2018-10-04 10:04 UTC (permalink / raw)
To: Felix Fietkau; +Cc: linux-wireless, Lorenzo Bianconi
PCIe version don't use MCU for RF regsisters access. We need
to correct RF CSR method to support up to 127 RF registers.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/mediatek/mt76/mt76x0/phy.c | 6 ++----
drivers/net/wireless/mediatek/mt76/mt76x02_regs.h | 4 ++--
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
index cbbfd5193d9c..da4569f00794 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
@@ -37,7 +37,7 @@
bank = MT_RF_BANK(offset);
reg = MT_RF_REG(offset);
- if (WARN_ON_ONCE(reg > 64) || WARN_ON_ONCE(bank) > 8)
+ if (WARN_ON_ONCE(reg > 127) || WARN_ON_ONCE(bank) > 8)
return -EINVAL;
mutex_lock(&dev->phy_mutex);
@@ -76,7 +76,7 @@ static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
bank = MT_RF_BANK(offset);
reg = MT_RF_REG(offset);
- if (WARN_ON_ONCE(reg > 64) || WARN_ON_ONCE(bank) > 8)
+ if (WARN_ON_ONCE(reg > 127) || WARN_ON_ONCE(bank) > 8)
return -EINVAL;
mutex_lock(&dev->phy_mutex);
@@ -119,7 +119,6 @@ static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
return mt76_wr_rp(dev, MT_MCU_MEMMAP_RF, &pair, 1);
} else {
- WARN_ON_ONCE(1);
return mt76x0_rf_csr_wr(dev, offset, val);
}
}
@@ -138,7 +137,6 @@ static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
ret = mt76_rd_rp(dev, MT_MCU_MEMMAP_RF, &pair, 1);
val = pair.value;
} else {
- WARN_ON_ONCE(1);
ret = val = mt76x0_rf_csr_rr(dev, offset);
}
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h b/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
index 24d1e6d747dd..f7de77d09d28 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
@@ -205,8 +205,8 @@
#define MT_TXQ_STA 0x0434
#define MT_RF_CSR_CFG 0x0500
#define MT_RF_CSR_CFG_DATA GENMASK(7, 0)
-#define MT_RF_CSR_CFG_REG_ID GENMASK(13, 8)
-#define MT_RF_CSR_CFG_REG_BANK GENMASK(17, 14)
+#define MT_RF_CSR_CFG_REG_ID GENMASK(14, 8)
+#define MT_RF_CSR_CFG_REG_BANK GENMASK(17, 15)
#define MT_RF_CSR_CFG_WR BIT(30)
#define MT_RF_CSR_CFG_KICK BIT(31)
--
1.9.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/5] mt76x0: correct RF access via RF_CSR regiser.
2018-10-04 10:04 ` [PATCH 2/5] mt76x0: correct RF access via RF_CSR regiser Stanislaw Gruszka
@ 2018-10-06 8:25 ` Lorenzo Bianconi
2018-10-06 10:01 ` Felix Fietkau
0 siblings, 1 reply; 9+ messages in thread
From: Lorenzo Bianconi @ 2018-10-06 8:25 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: Felix Fietkau, linux-wireless
>
> PCIe version don't use MCU for RF regsisters access. We need
> to correct RF CSR method to support up to 127 RF registers.
>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> ---
> drivers/net/wireless/mediatek/mt76/mt76x0/phy.c | 6 ++----
> drivers/net/wireless/mediatek/mt76/mt76x02_regs.h | 4 ++--
> 2 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
> index cbbfd5193d9c..da4569f00794 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
> @@ -37,7 +37,7 @@
> bank = MT_RF_BANK(offset);
> reg = MT_RF_REG(offset);
>
> - if (WARN_ON_ONCE(reg > 64) || WARN_ON_ONCE(bank) > 8)
> + if (WARN_ON_ONCE(reg > 127) || WARN_ON_ONCE(bank) > 8)
I guess there is a typo here, it should be:
if (WARN_ON_ONCE(reg > 127) || WARN_ON_ONCE(bank > 8))
> return -EINVAL;
>
> mutex_lock(&dev->phy_mutex);
> @@ -76,7 +76,7 @@ static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
> bank = MT_RF_BANK(offset);
> reg = MT_RF_REG(offset);
>
> - if (WARN_ON_ONCE(reg > 64) || WARN_ON_ONCE(bank) > 8)
> + if (WARN_ON_ONCE(reg > 127) || WARN_ON_ONCE(bank) > 8)
same as above
Regards,
Lorenzo
> return -EINVAL;
>
> mutex_lock(&dev->phy_mutex);
> @@ -119,7 +119,6 @@ static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
>
> return mt76_wr_rp(dev, MT_MCU_MEMMAP_RF, &pair, 1);
> } else {
> - WARN_ON_ONCE(1);
> return mt76x0_rf_csr_wr(dev, offset, val);
> }
> }
> @@ -138,7 +137,6 @@ static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
> ret = mt76_rd_rp(dev, MT_MCU_MEMMAP_RF, &pair, 1);
> val = pair.value;
> } else {
> - WARN_ON_ONCE(1);
> ret = val = mt76x0_rf_csr_rr(dev, offset);
> }
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h b/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
> index 24d1e6d747dd..f7de77d09d28 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt76x02_regs.h
> @@ -205,8 +205,8 @@
> #define MT_TXQ_STA 0x0434
> #define MT_RF_CSR_CFG 0x0500
> #define MT_RF_CSR_CFG_DATA GENMASK(7, 0)
> -#define MT_RF_CSR_CFG_REG_ID GENMASK(13, 8)
> -#define MT_RF_CSR_CFG_REG_BANK GENMASK(17, 14)
> +#define MT_RF_CSR_CFG_REG_ID GENMASK(14, 8)
> +#define MT_RF_CSR_CFG_REG_BANK GENMASK(17, 15)
> #define MT_RF_CSR_CFG_WR BIT(30)
> #define MT_RF_CSR_CFG_KICK BIT(31)
>
> --
> 1.9.3
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/5] mt76x0: correct RF access via RF_CSR regiser.
2018-10-06 8:25 ` Lorenzo Bianconi
@ 2018-10-06 10:01 ` Felix Fietkau
0 siblings, 0 replies; 9+ messages in thread
From: Felix Fietkau @ 2018-10-06 10:01 UTC (permalink / raw)
To: Lorenzo Bianconi, Stanislaw Gruszka; +Cc: linux-wireless
On 2018-10-06 10:25, Lorenzo Bianconi wrote:
>>
>> PCIe version don't use MCU for RF regsisters access. We need
>> to correct RF CSR method to support up to 127 RF registers.
>>
>> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
>> ---
>> drivers/net/wireless/mediatek/mt76/mt76x0/phy.c | 6 ++----
>> drivers/net/wireless/mediatek/mt76/mt76x02_regs.h | 4 ++--
>> 2 files changed, 4 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
>> index cbbfd5193d9c..da4569f00794 100644
>> --- a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
>> +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
>> @@ -37,7 +37,7 @@
>> bank = MT_RF_BANK(offset);
>> reg = MT_RF_REG(offset);
>>
>> - if (WARN_ON_ONCE(reg > 64) || WARN_ON_ONCE(bank) > 8)
>> + if (WARN_ON_ONCE(reg > 127) || WARN_ON_ONCE(bank) > 8)
>
> I guess there is a typo here, it should be:
>
> if (WARN_ON_ONCE(reg > 127) || WARN_ON_ONCE(bank > 8))
It's not a regression, since that part is the same as before the patch.
Feel free to send a separate fix.
- Felix
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/5] mt76: allow to identify bus
2018-10-04 10:04 [PATCH 0/5] mt76x0: phy/rf fixups for PCIe Stanislaw Gruszka
2018-10-04 10:04 ` [PATCH 1/5] mt76x0: print BBP version only for debug Stanislaw Gruszka
2018-10-04 10:04 ` [PATCH 2/5] mt76x0: correct RF access via RF_CSR regiser Stanislaw Gruszka
@ 2018-10-04 10:04 ` Stanislaw Gruszka
2018-10-04 10:04 ` [PATCH 4/5] mt76x0: correct RF reg pairs write for PCIe Stanislaw Gruszka
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Stanislaw Gruszka @ 2018-10-04 10:04 UTC (permalink / raw)
To: Felix Fietkau; +Cc: linux-wireless, Lorenzo Bianconi
Add helpers to identify bus type.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/mediatek/mt76/mmio.c | 1 +
drivers/net/wireless/mediatek/mt76/mt76.h | 9 +++++++++
drivers/net/wireless/mediatek/mt76/usb.c | 1 +
3 files changed, 11 insertions(+)
diff --git a/drivers/net/wireless/mediatek/mt76/mmio.c b/drivers/net/wireless/mediatek/mt76/mmio.c
index 30a5d928e655..1d6bbce76041 100644
--- a/drivers/net/wireless/mediatek/mt76/mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mmio.c
@@ -79,6 +79,7 @@ void mt76_mmio_init(struct mt76_dev *dev, void __iomem *regs)
.copy = mt76_mmio_copy,
.wr_rp = mt76_mmio_wr_rp,
.rd_rp = mt76_mmio_rd_rp,
+ .type = MT76_BUS_MMIO,
};
dev->bus = &mt76_mmio_ops;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index f723a07cab29..3bfa7f5e3513 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -38,6 +38,11 @@ struct mt76_reg_pair {
u32 value;
};
+enum mt76_bus_type {
+ MT76_BUS_MMIO,
+ MT76_BUS_USB,
+};
+
struct mt76_bus_ops {
u32 (*rr)(struct mt76_dev *dev, u32 offset);
void (*wr)(struct mt76_dev *dev, u32 offset, u32 val);
@@ -48,8 +53,12 @@ struct mt76_bus_ops {
const struct mt76_reg_pair *rp, int len);
int (*rd_rp)(struct mt76_dev *dev, u32 base,
struct mt76_reg_pair *rp, int len);
+ enum mt76_bus_type type;
};
+#define mt76_is_usb(dev) ((dev)->mt76.bus->type == MT76_BUS_USB)
+#define mt76_is_mmio(dev) ((dev)->mt76.bus->type == MT76_BUS_MMIO)
+
enum mt76_txq_id {
MT_TXQ_VO = IEEE80211_AC_VO,
MT_TXQ_VI = IEEE80211_AC_VI,
diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
index 6b643ea701e3..cccb143e57b0 100644
--- a/drivers/net/wireless/mediatek/mt76/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/usb.c
@@ -862,6 +862,7 @@ int mt76u_init(struct mt76_dev *dev,
.copy = mt76u_copy,
.wr_rp = mt76u_wr_rp,
.rd_rp = mt76u_rd_rp,
+ .type = MT76_BUS_USB,
};
struct mt76_usb *usb = &dev->usb;
--
1.9.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 4/5] mt76x0: correct RF reg pairs write for PCIe
2018-10-04 10:04 [PATCH 0/5] mt76x0: phy/rf fixups for PCIe Stanislaw Gruszka
` (2 preceding siblings ...)
2018-10-04 10:04 ` [PATCH 3/5] mt76: allow to identify bus Stanislaw Gruszka
@ 2018-10-04 10:04 ` Stanislaw Gruszka
2018-10-04 10:04 ` [PATCH 5/5] mt76x0: use bus helper to identify rf access method Stanislaw Gruszka
2018-10-06 10:03 ` [PATCH 0/5] mt76x0: phy/rf fixups for PCIe Felix Fietkau
5 siblings, 0 replies; 9+ messages in thread
From: Stanislaw Gruszka @ 2018-10-04 10:04 UTC (permalink / raw)
To: Felix Fietkau; +Cc: linux-wireless, Lorenzo Bianconi
We have to use RF CSR method for PCIe.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/mediatek/mt76/mt76x0/phy.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
index da4569f00794..8e4194e59398 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
@@ -173,9 +173,22 @@ static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
}
#endif
-#define RF_RANDOM_WRITE(dev, tab) \
- mt76_wr_rp(dev, MT_MCU_MEMMAP_RF, \
- tab, ARRAY_SIZE(tab))
+static void
+mt76x0_rf_csr_wr_rp(struct mt76x02_dev *dev, const struct mt76_reg_pair *data,
+ int n)
+{
+ while (n-- > 0) {
+ mt76x0_rf_csr_wr(dev, data->reg, data->value);
+ data++;
+ }
+}
+
+#define RF_RANDOM_WRITE(dev, tab) do { \
+ if (mt76_is_mmio(dev)) \
+ mt76x0_rf_csr_wr_rp(dev, tab, ARRAY_SIZE(tab)); \
+ else \
+ mt76_wr_rp(dev, MT_MCU_MEMMAP_RF, tab, ARRAY_SIZE(tab));\
+} while (0)
int mt76x0_wait_bbp_ready(struct mt76x02_dev *dev)
{
--
1.9.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 5/5] mt76x0: use bus helper to identify rf access method
2018-10-04 10:04 [PATCH 0/5] mt76x0: phy/rf fixups for PCIe Stanislaw Gruszka
` (3 preceding siblings ...)
2018-10-04 10:04 ` [PATCH 4/5] mt76x0: correct RF reg pairs write for PCIe Stanislaw Gruszka
@ 2018-10-04 10:04 ` Stanislaw Gruszka
2018-10-06 10:03 ` [PATCH 0/5] mt76x0: phy/rf fixups for PCIe Felix Fietkau
5 siblings, 0 replies; 9+ messages in thread
From: Stanislaw Gruszka @ 2018-10-04 10:04 UTC (permalink / raw)
To: Felix Fietkau; +Cc: linux-wireless, Lorenzo Bianconi
Use mt76_is_usb() to identify RF access method instead of
MT76_STATE_MCU_RUNNING flag and add warning since MCU has
to be initialized before we can access RF registers via MCU.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
drivers/net/wireless/mediatek/mt76/mt76x0/phy.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
index 8e4194e59398..202f436eb358 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
@@ -111,12 +111,14 @@ static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
static int
rf_wr(struct mt76x02_dev *dev, u32 offset, u8 val)
{
- if (test_bit(MT76_STATE_MCU_RUNNING, &dev->mt76.state)) {
+ if (mt76_is_usb(dev)) {
struct mt76_reg_pair pair = {
.reg = offset,
.value = val,
};
+ WARN_ON_ONCE(!test_bit(MT76_STATE_MCU_RUNNING,
+ &dev->mt76.state));
return mt76_wr_rp(dev, MT_MCU_MEMMAP_RF, &pair, 1);
} else {
return mt76x0_rf_csr_wr(dev, offset, val);
@@ -129,11 +131,13 @@ static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
int ret;
u32 val;
- if (test_bit(MT76_STATE_MCU_RUNNING, &dev->mt76.state)) {
+ if (mt76_is_usb(dev)) {
struct mt76_reg_pair pair = {
.reg = offset,
};
+ WARN_ON_ONCE(!test_bit(MT76_STATE_MCU_RUNNING,
+ &dev->mt76.state));
ret = mt76_rd_rp(dev, MT_MCU_MEMMAP_RF, &pair, 1);
val = pair.value;
} else {
--
1.9.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/5] mt76x0: phy/rf fixups for PCIe
2018-10-04 10:04 [PATCH 0/5] mt76x0: phy/rf fixups for PCIe Stanislaw Gruszka
` (4 preceding siblings ...)
2018-10-04 10:04 ` [PATCH 5/5] mt76x0: use bus helper to identify rf access method Stanislaw Gruszka
@ 2018-10-06 10:03 ` Felix Fietkau
5 siblings, 0 replies; 9+ messages in thread
From: Felix Fietkau @ 2018-10-06 10:03 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: linux-wireless, Lorenzo Bianconi
On 2018-10-04 12:04, Stanislaw Gruszka wrote:
> Changes since RFC:
> - regbase on top of mt76x02_dev change
> - add patch to choose single reg RF access via mt76_is_usb()
Merged, thanks.
- Felix
^ permalink raw reply [flat|nested] 9+ messages in thread