Search Linux Wireless

RE: [PATCH] ath11k: Reset PCIE_GPIO_CFG_REG register when power on

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Abhishek Kumar <kuabhs@xxxxxxxxxxxx>
> Sent: Thursday, February 10, 2022 9:05 AM
> To: Baochen Qiang (QUIC) <quic_bqiang@xxxxxxxxxxx>
> Cc: ath11k@xxxxxxxxxxxxxxxxxxx; linux-wireless@xxxxxxxxxxxxxxx; Abhishek
> Kumar <kuabhs@xxxxxxxxxxxx>
> Subject: Re: [PATCH] ath11k: Reset PCIE_GPIO_CFG_REG register when power
> on
> 
> On Mon, Feb 7, 2022 at 1:41 AM Baochen Qiang <quic_bqiang@xxxxxxxxxxx>
> wrote:
> >
> > On some modules, PCIE_GPIO_CFG_REG is not initialized to right value,
> > this will cause WCN6855 hardware fails to be enumerated.
> >
> > Fix it by force writing the correct value to this register when power
> > on.
> >
> > Tested-on: WCN6855 hw2.0 PCI
> > WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
> Can you elaborate how you tested this ? I can see due to this patch shows
> resource temporarily unavailable after running simulated wifi crash in a loop.
> >

Could you please share build info?  kernel logs? Your test steps etc.?

> > Signed-off-by: Baochen Qiang <quic_bqiang@xxxxxxxxxxx>
> > ---
> >  drivers/net/wireless/ath/ath11k/pci.c | 11 +++++++++++
> > drivers/net/wireless/ath/ath11k/pci.h |  3 +++
> >  2 files changed, 14 insertions(+)
> >
> > diff --git a/drivers/net/wireless/ath/ath11k/pci.c
> > b/drivers/net/wireless/ath/ath11k/pci.c
> > index d73b522a0081..06968ad488b0 100644
> > --- a/drivers/net/wireless/ath/ath11k/pci.c
> > +++ b/drivers/net/wireless/ath/ath11k/pci.c
> > @@ -445,6 +445,16 @@ static void ath11k_pci_force_wake(struct
> ath11k_base *ab)
> >         mdelay(5);
> >  }
> >
> > +static void ath11k_pci_gpio_reset(struct ath11k_base *ab) {
> > +       int val;
> > +
> > +       ath11k_pci_write32(ab, PCIE_GPIO_CFG_REG, PCIE_GPIO_RESET_VAL);
> > +       mdelay(10);
> > +       val = ath11k_pci_read32(ab, PCIE_GPIO_CFG_REG);
> > +       ath11k_dbg(ab, ATH11K_DBG_PCI, "gpio cfg: 0x%x\n", val); }
> Looks like you have added delay before reading which gets printed as a debug
> log. In this case, I don't think you should add the unconditional delay and read
> the register unconditionally but rather should do only if debug is enabled.
> Thought ?
> > +
> >  static void ath11k_pci_sw_reset(struct ath11k_base *ab, bool
> > power_on)  {
> >         mdelay(100);
> > @@ -461,6 +471,7 @@ static void ath11k_pci_sw_reset(struct ath11k_base
> *ab, bool power_on)
> >         ath11k_pci_clear_dbg_registers(ab);
> >         ath11k_pci_soc_global_reset(ab);
> >         ath11k_mhi_set_mhictrl_reset(ab);
> > +       ath11k_pci_gpio_reset(ab);
> >  }
> >
> >  int ath11k_pci_get_msi_irq(struct device *dev, unsigned int vector)
> > diff --git a/drivers/net/wireless/ath/ath11k/pci.h
> > b/drivers/net/wireless/ath/ath11k/pci.h
> > index 61d67b20a0eb..2716fc7745d6 100644
> > --- a/drivers/net/wireless/ath/ath11k/pci.h
> > +++ b/drivers/net/wireless/ath/ath11k/pci.h
> > @@ -52,6 +52,9 @@
> >  #define WLAON_QFPROM_PWR_CTRL_REG              0x01f8031c
> >  #define QFPROM_PWR_CTRL_VDD4BLOW_MASK          0x4
> >
> > +#define PCIE_GPIO_CFG_REG                      0x0180e000
> > +#define PCIE_GPIO_RESET_VAL                    0xc5
> > +
> >  struct ath11k_msi_user {
> >         char *name;
> >         int num_vectors;
> > --
> > 2.25.1
> >
> 
> Thanks
> Abhishek




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux