diff mbox series

PCI: apple: Fix REFCLK1 enable/poll logic

Message ID 20211117140044.193865-1-marcan@marcan.st (mailing list archive)
State Accepted
Delegated to: Lorenzo Pieralisi
Headers show
Series PCI: apple: Fix REFCLK1 enable/poll logic | expand

Commit Message

Hector Martin Nov. 17, 2021, 2 p.m. UTC
REFCLK1 has req/ack bits just like REFCLK0

Signed-off-by: Hector Martin <marcan@marcan.st>
---
 drivers/pci/controller/pcie-apple.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

Comments

Marc Zyngier Nov. 17, 2021, 5:56 p.m. UTC | #1
On Wed, 17 Nov 2021 14:00:44 +0000,
Hector Martin <marcan@marcan.st> wrote:
> 
> REFCLK1 has req/ack bits just like REFCLK0
> 
> Signed-off-by: Hector Martin <marcan@marcan.st>
> ---
>  drivers/pci/controller/pcie-apple.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-apple.c b/drivers/pci/controller/pcie-apple.c
> index b665d29af77a..420c291a5c68 100644
> --- a/drivers/pci/controller/pcie-apple.c
> +++ b/drivers/pci/controller/pcie-apple.c
> @@ -42,8 +42,9 @@
>  #define   CORE_FABRIC_STAT_MASK		0x001F001F
>  #define CORE_LANE_CFG(port)		(0x84000 + 0x4000 * (port))
>  #define   CORE_LANE_CFG_REFCLK0REQ	BIT(0)
> -#define   CORE_LANE_CFG_REFCLK1		BIT(1)
> +#define   CORE_LANE_CFG_REFCLK1REQ	BIT(1)
>  #define   CORE_LANE_CFG_REFCLK0ACK	BIT(2)
> +#define   CORE_LANE_CFG_REFCLK1ACK	BIT(3)
>  #define   CORE_LANE_CFG_REFCLKEN	(BIT(9) | BIT(10))
>  #define CORE_LANE_CTL(port)		(0x84004 + 0x4000 * (port))
>  #define   CORE_LANE_CTL_CFGACC		BIT(15)
> @@ -481,9 +482,9 @@ static int apple_pcie_setup_refclk(struct apple_pcie *pcie,
>  	if (res < 0)
>  		return res;
>  
> -	rmw_set(CORE_LANE_CFG_REFCLK1, pcie->base + CORE_LANE_CFG(port->idx));
> +	rmw_set(CORE_LANE_CFG_REFCLK1REQ, pcie->base + CORE_LANE_CFG(port->idx));
>  	res = readl_relaxed_poll_timeout(pcie->base + CORE_LANE_CFG(port->idx),
> -					 stat, stat & CORE_LANE_CFG_REFCLK1,
> +					 stat, stat & CORE_LANE_CFG_REFCLK1ACK,
>  					 100, 50000);
>  
>  	if (res < 0)
> -- 
> 2.33.0
> 
> 

Fixes: 1e33888fbe44 ("PCI: apple: Add initial hardware bring-up")
Acked-by: Marc Zyngier <maz@kernel.org>

	M.
Lorenzo Pieralisi Nov. 30, 2021, 4:49 p.m. UTC | #2
On Wed, Nov 17, 2021 at 05:56:12PM +0000, Marc Zyngier wrote:
> On Wed, 17 Nov 2021 14:00:44 +0000,
> Hector Martin <marcan@marcan.st> wrote:
> > 
> > REFCLK1 has req/ack bits just like REFCLK0
> > 
> > Signed-off-by: Hector Martin <marcan@marcan.st>
> > ---
> >  drivers/pci/controller/pcie-apple.c | 7 ++++---
> >  1 file changed, 4 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/pci/controller/pcie-apple.c b/drivers/pci/controller/pcie-apple.c
> > index b665d29af77a..420c291a5c68 100644
> > --- a/drivers/pci/controller/pcie-apple.c
> > +++ b/drivers/pci/controller/pcie-apple.c
> > @@ -42,8 +42,9 @@
> >  #define   CORE_FABRIC_STAT_MASK		0x001F001F
> >  #define CORE_LANE_CFG(port)		(0x84000 + 0x4000 * (port))
> >  #define   CORE_LANE_CFG_REFCLK0REQ	BIT(0)
> > -#define   CORE_LANE_CFG_REFCLK1		BIT(1)
> > +#define   CORE_LANE_CFG_REFCLK1REQ	BIT(1)
> >  #define   CORE_LANE_CFG_REFCLK0ACK	BIT(2)
> > +#define   CORE_LANE_CFG_REFCLK1ACK	BIT(3)
> >  #define   CORE_LANE_CFG_REFCLKEN	(BIT(9) | BIT(10))
> >  #define CORE_LANE_CTL(port)		(0x84004 + 0x4000 * (port))
> >  #define   CORE_LANE_CTL_CFGACC		BIT(15)
> > @@ -481,9 +482,9 @@ static int apple_pcie_setup_refclk(struct apple_pcie *pcie,
> >  	if (res < 0)
> >  		return res;
> >  
> > -	rmw_set(CORE_LANE_CFG_REFCLK1, pcie->base + CORE_LANE_CFG(port->idx));
> > +	rmw_set(CORE_LANE_CFG_REFCLK1REQ, pcie->base + CORE_LANE_CFG(port->idx));
> >  	res = readl_relaxed_poll_timeout(pcie->base + CORE_LANE_CFG(port->idx),
> > -					 stat, stat & CORE_LANE_CFG_REFCLK1,
> > +					 stat, stat & CORE_LANE_CFG_REFCLK1ACK,
> >  					 100, 50000);
> >  
> >  	if (res < 0)
> > -- 
> > 2.33.0
> > 
> > 
> 
> Fixes: 1e33888fbe44 ("PCI: apple: Add initial hardware bring-up")
> Acked-by: Marc Zyngier <maz@kernel.org>

Hi Hector, Bjorn,

if this is a fix we can aim at one of the upcoming -rcX.

It would be nicer though to explain a bit better what it is
fixing in the commit log (and what's broken if we don't merge it),
as it stands it is a bit terse.

Thanks,
Lorenzo
Hector Martin Nov. 30, 2021, 5:26 p.m. UTC | #3
On 01/12/2021 01.49, Lorenzo Pieralisi wrote:
> On Wed, Nov 17, 2021 at 05:56:12PM +0000, Marc Zyngier wrote:
>> On Wed, 17 Nov 2021 14:00:44 +0000,
>> Hector Martin <marcan@marcan.st> wrote:
>>>
>>> REFCLK1 has req/ack bits just like REFCLK0
>>>
>>> Signed-off-by: Hector Martin <marcan@marcan.st>
>>> ---
>>>   drivers/pci/controller/pcie-apple.c | 7 ++++---
>>>   1 file changed, 4 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/pci/controller/pcie-apple.c b/drivers/pci/controller/pcie-apple.c
>>> index b665d29af77a..420c291a5c68 100644
>>> --- a/drivers/pci/controller/pcie-apple.c
>>> +++ b/drivers/pci/controller/pcie-apple.c
>>> @@ -42,8 +42,9 @@
>>>   #define   CORE_FABRIC_STAT_MASK		0x001F001F
>>>   #define CORE_LANE_CFG(port)		(0x84000 + 0x4000 * (port))
>>>   #define   CORE_LANE_CFG_REFCLK0REQ	BIT(0)
>>> -#define   CORE_LANE_CFG_REFCLK1		BIT(1)
>>> +#define   CORE_LANE_CFG_REFCLK1REQ	BIT(1)
>>>   #define   CORE_LANE_CFG_REFCLK0ACK	BIT(2)
>>> +#define   CORE_LANE_CFG_REFCLK1ACK	BIT(3)
>>>   #define   CORE_LANE_CFG_REFCLKEN	(BIT(9) | BIT(10))
>>>   #define CORE_LANE_CTL(port)		(0x84004 + 0x4000 * (port))
>>>   #define   CORE_LANE_CTL_CFGACC		BIT(15)
>>> @@ -481,9 +482,9 @@ static int apple_pcie_setup_refclk(struct apple_pcie *pcie,
>>>   	if (res < 0)
>>>   		return res;
>>>   
>>> -	rmw_set(CORE_LANE_CFG_REFCLK1, pcie->base + CORE_LANE_CFG(port->idx));
>>> +	rmw_set(CORE_LANE_CFG_REFCLK1REQ, pcie->base + CORE_LANE_CFG(port->idx));
>>>   	res = readl_relaxed_poll_timeout(pcie->base + CORE_LANE_CFG(port->idx),
>>> -					 stat, stat & CORE_LANE_CFG_REFCLK1,
>>> +					 stat, stat & CORE_LANE_CFG_REFCLK1ACK,
>>>   					 100, 50000);
>>>   
>>>   	if (res < 0)
>>> -- 
>>> 2.33.0
>>>
>>>
>>
>> Fixes: 1e33888fbe44 ("PCI: apple: Add initial hardware bring-up")
>> Acked-by: Marc Zyngier <maz@kernel.org>
> 
> Hi Hector, Bjorn,
> 
> if this is a fix we can aim at one of the upcoming -rcX.
> 
> It would be nicer though to explain a bit better what it is
> fixing in the commit log (and what's broken if we don't merge it),
> as it stands it is a bit terse.

I don't think anything is broken per se, it still works without this 
patch (probably because the refclk gets enabled fast enough that we 
don't have to wait for it); it's just that I think this is the correct 
logic. This is all reverse engineered anyway, so ultimately there is no 
hardware documentation to point to to say what's right and what's wrong...
Lorenzo Pieralisi Dec. 6, 2021, 10:45 a.m. UTC | #4
On Wed, 17 Nov 2021 23:00:44 +0900, Hector Martin wrote:
> REFCLK1 has req/ack bits just like REFCLK0
> 
> 

Applied to pci/apple, thanks!

[1/1] PCI: apple: Fix REFCLK1 enable/poll logic
      https://git.kernel.org/lpieralisi/pci/c/75d36df680

Thanks,
Lorenzo
diff mbox series

Patch

diff --git a/drivers/pci/controller/pcie-apple.c b/drivers/pci/controller/pcie-apple.c
index b665d29af77a..420c291a5c68 100644
--- a/drivers/pci/controller/pcie-apple.c
+++ b/drivers/pci/controller/pcie-apple.c
@@ -42,8 +42,9 @@ 
 #define   CORE_FABRIC_STAT_MASK		0x001F001F
 #define CORE_LANE_CFG(port)		(0x84000 + 0x4000 * (port))
 #define   CORE_LANE_CFG_REFCLK0REQ	BIT(0)
-#define   CORE_LANE_CFG_REFCLK1		BIT(1)
+#define   CORE_LANE_CFG_REFCLK1REQ	BIT(1)
 #define   CORE_LANE_CFG_REFCLK0ACK	BIT(2)
+#define   CORE_LANE_CFG_REFCLK1ACK	BIT(3)
 #define   CORE_LANE_CFG_REFCLKEN	(BIT(9) | BIT(10))
 #define CORE_LANE_CTL(port)		(0x84004 + 0x4000 * (port))
 #define   CORE_LANE_CTL_CFGACC		BIT(15)
@@ -481,9 +482,9 @@  static int apple_pcie_setup_refclk(struct apple_pcie *pcie,
 	if (res < 0)
 		return res;
 
-	rmw_set(CORE_LANE_CFG_REFCLK1, pcie->base + CORE_LANE_CFG(port->idx));
+	rmw_set(CORE_LANE_CFG_REFCLK1REQ, pcie->base + CORE_LANE_CFG(port->idx));
 	res = readl_relaxed_poll_timeout(pcie->base + CORE_LANE_CFG(port->idx),
-					 stat, stat & CORE_LANE_CFG_REFCLK1,
+					 stat, stat & CORE_LANE_CFG_REFCLK1ACK,
 					 100, 50000);
 
 	if (res < 0)