diff mbox series

[U-Boot] FSL PCI: Configure PCIe reference ratio

Message ID 20170912175641.23175-1-joakim.tjernlund@infinera.com
State Accepted
Commit 6ce83fb3d6ac1cd25772b3c8c1265afbfa42f718
Delegated to: York Sun
Headers show
Series [U-Boot] FSL PCI: Configure PCIe reference ratio | expand

Commit Message

Joakim Tjernlund Sept. 12, 2017, 5:56 p.m. UTC
Most FSL PCIe controllers expects 333 MHz PCI reference clock.
This clock is derived from the CCB but in many cases the ref.
clock is not 333 MHz and a divisor needs to be configured.

This adds PEX_CCB_DIV #define which can be defined for each
type of CPU/platform.

Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
---
 drivers/pci/fsl_pci_init.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

York Sun Sept. 14, 2017, 9:15 p.m. UTC | #1
On 09/12/2017 10:56 AM, Joakim Tjernlund wrote:
> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> This clock is derived from the CCB but in many cases the ref.
> clock is not 333 MHz and a divisor needs to be configured.
> 
> This adds PEX_CCB_DIV #define which can be defined for each
> type of CPU/platform.
> 
> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> ---
>   drivers/pci/fsl_pci_init.c | 6 ++++++
>   1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
> index 52792dcd59..4d00b3f26c 100644
> --- a/drivers/pci/fsl_pci_init.c
> +++ b/drivers/pci/fsl_pci_init.c
> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>   
>   	pci_setup_indirect(hose, cfg_addr, cfg_data);
>   
> +#ifdef PEX_CCB_DIV
> +	/* Configure the PCIE controller core clock ratio */
> +	pci_hose_write_config_dword(hose, dev, 0x440,
> +				    ((gd->bus_clk / 1000000) *
> +				     (16 / PEX_CCB_DIV)) / 333);
> +#endif
>   	block_rev = in_be32(&pci->block_rev1);
>   	if (PEX_IP_BLK_REV_2_2 <= block_rev) {
>   		pi = &pci->pit[2];	/* 0xDC0 */
> 

Mingkai,

Do you ack this change? This presumes the PCIe clock derives from CCB 
bus clock.

York
Mingkai Hu Sept. 15, 2017, 6:14 a.m. UTC | #2
> -----Original Message-----
> From: York Sun
> Sent: Friday, September 15, 2017 5:15 AM
> To: Joakim Tjernlund <joakim.tjernlund@infinera.com>; Mingkai Hu
> <mingkai.hu@nxp.com>; u-boot @ lists . denx . de <u-boot@lists.denx.de>;
> Roy Zang <roy.zang@nxp.com>
> Subject: Re: [PATCH] FSL PCI: Configure PCIe reference ratio
> 
> On 09/12/2017 10:56 AM, Joakim Tjernlund wrote:
> > Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> > This clock is derived from the CCB but in many cases the ref.
> > clock is not 333 MHz and a divisor needs to be configured.
> >
> > This adds PEX_CCB_DIV #define which can be defined for each type of
> > CPU/platform.
> >
> > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> > ---
> >   drivers/pci/fsl_pci_init.c | 6 ++++++
> >   1 file changed, 6 insertions(+)
> >
> > diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
> > index 52792dcd59..4d00b3f26c 100644
> > --- a/drivers/pci/fsl_pci_init.c
> > +++ b/drivers/pci/fsl_pci_init.c
> > @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose,
> > struct fsl_pci_info *pci_info)
> >
> >   	pci_setup_indirect(hose, cfg_addr, cfg_data);
> >
> > +#ifdef PEX_CCB_DIV
> > +	/* Configure the PCIE controller core clock ratio */
> > +	pci_hose_write_config_dword(hose, dev, 0x440,
> > +				    ((gd->bus_clk / 1000000) *
> > +				     (16 / PEX_CCB_DIV)) / 333);
> > +#endif
> >   	block_rev = in_be32(&pci->block_rev1);
> >   	if (PEX_IP_BLK_REV_2_2 <= block_rev) {
> >   		pi = &pci->pit[2];	/* 0xDC0 */
> >
> 
> Mingkai,
> 
> Do you ack this change? This presumes the PCIe clock derives from CCB bus
> clock.
> 

gd->bus_clk indicates the platform clock while PCIe clock could be CCB or CCB/2.
For example, it's CCB/2 for T1040/T1020, CCB for P2020.

I suggest to add the PCIe clock in gd to handle this difference, just like what we've done for other IP clocks.

Thanks,
Mingkai
Joakim Tjernlund Nov. 21, 2017, 5:18 p.m. UTC | #3
On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> This clock is derived from the CCB but in many cases the ref.
> clock is not 333 MHz and a divisor needs to be configured.
> 
> This adds PEX_CCB_DIV #define which can be defined for each
> type of CPU/platform.
> 
> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> ---
>  drivers/pci/fsl_pci_init.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
> index 52792dcd59..4d00b3f26c 100644
> --- a/drivers/pci/fsl_pci_init.c
> +++ b/drivers/pci/fsl_pci_init.c
> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>  
>  	pci_setup_indirect(hose, cfg_addr, cfg_data);
>  
> +#ifdef PEX_CCB_DIV
> +	/* Configure the PCIE controller core clock ratio */
> +	pci_hose_write_config_dword(hose, dev, 0x440,
> +				    ((gd->bus_clk / 1000000) *
> +				     (16 / PEX_CCB_DIV)) / 333);
> +#endif
>  	block_rev = in_be32(&pci->block_rev1);
>  	if (PEX_IP_BLK_REV_2_2 <= block_rev) {
>  		pi = &pci->pit[2];	/* 0xDC0 */

Ping? 

 Jocke
York Sun Nov. 21, 2017, 5:23 p.m. UTC | #4
On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
> On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
>> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
>> This clock is derived from the CCB but in many cases the ref.
>> clock is not 333 MHz and a divisor needs to be configured.
>>
>> This adds PEX_CCB_DIV #define which can be defined for each
>> type of CPU/platform.
>>
>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
>> ---
>>  drivers/pci/fsl_pci_init.c | 6 ++++++
>>  1 file changed, 6 insertions(+)
>>
>> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
>> index 52792dcd59..4d00b3f26c 100644
>> --- a/drivers/pci/fsl_pci_init.c
>> +++ b/drivers/pci/fsl_pci_init.c
>> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>>  
>>  	pci_setup_indirect(hose, cfg_addr, cfg_data);
>>  
>> +#ifdef PEX_CCB_DIV
>> +	/* Configure the PCIE controller core clock ratio */
>> +	pci_hose_write_config_dword(hose, dev, 0x440,
>> +				    ((gd->bus_clk / 1000000) *
>> +				     (16 / PEX_CCB_DIV)) / 333);
>> +#endif
>>  	block_rev = in_be32(&pci->block_rev1);
>>  	if (PEX_IP_BLK_REV_2_2 <= block_rev) {
>>  		pi = &pci->pit[2];	/* 0xDC0 */
> 
> Ping? 
> 
>  Jocke
> 

I believe Mingkai's last comment was "to add the PCIe clock in gd".

York
Joakim Tjernlund Nov. 21, 2017, 5:29 p.m. UTC | #5
On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> 
> 
> On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
> > On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
> > > Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> > > This clock is derived from the CCB but in many cases the ref.
> > > clock is not 333 MHz and a divisor needs to be configured.
> > > 
> > > This adds PEX_CCB_DIV #define which can be defined for each
> > > type of CPU/platform.
> > > 
> > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> > > ---
> > >  drivers/pci/fsl_pci_init.c | 6 ++++++
> > >  1 file changed, 6 insertions(+)
> > > 
> > > diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
> > > index 52792dcd59..4d00b3f26c 100644
> > > --- a/drivers/pci/fsl_pci_init.c
> > > +++ b/drivers/pci/fsl_pci_init.c
> > > @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
> > > 
> > >      pci_setup_indirect(hose, cfg_addr, cfg_data);
> > > 
> > > +#ifdef PEX_CCB_DIV
> > > +    /* Configure the PCIE controller core clock ratio */
> > > +    pci_hose_write_config_dword(hose, dev, 0x440,
> > > +                                ((gd->bus_clk / 1000000) *
> > > +                                 (16 / PEX_CCB_DIV)) / 333);
> > > +#endif
> > >      block_rev = in_be32(&pci->block_rev1);
> > >      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
> > >              pi = &pci->pit[2];      /* 0xDC0 */
> > 
> > Ping?
> > 
> >  Jocke
> > 
> 
> I believe Mingkai's last comment was "to add the PCIe clock in gd".

Right, I seem to have forgotten to comment on that ...
Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
it makes perfect sense to just #define it.

 Jocke
York Sun Nov. 21, 2017, 5:32 p.m. UTC | #6
On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
> On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>
>>
>> On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
>>> On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
>>>> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
>>>> This clock is derived from the CCB but in many cases the ref.
>>>> clock is not 333 MHz and a divisor needs to be configured.
>>>>
>>>> This adds PEX_CCB_DIV #define which can be defined for each
>>>> type of CPU/platform.
>>>>
>>>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
>>>> ---
>>>>  drivers/pci/fsl_pci_init.c | 6 ++++++
>>>>  1 file changed, 6 insertions(+)
>>>>
>>>> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
>>>> index 52792dcd59..4d00b3f26c 100644
>>>> --- a/drivers/pci/fsl_pci_init.c
>>>> +++ b/drivers/pci/fsl_pci_init.c
>>>> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>>>>
>>>>      pci_setup_indirect(hose, cfg_addr, cfg_data);
>>>>
>>>> +#ifdef PEX_CCB_DIV
>>>> +    /* Configure the PCIE controller core clock ratio */
>>>> +    pci_hose_write_config_dword(hose, dev, 0x440,
>>>> +                                ((gd->bus_clk / 1000000) *
>>>> +                                 (16 / PEX_CCB_DIV)) / 333);
>>>> +#endif
>>>>      block_rev = in_be32(&pci->block_rev1);
>>>>      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
>>>>              pi = &pci->pit[2];      /* 0xDC0 */
>>>
>>> Ping?
>>>
>>>  Jocke
>>>
>>
>> I believe Mingkai's last comment was "to add the PCIe clock in gd".
> 
> Right, I seem to have forgotten to comment on that ...
> Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
> it makes perfect sense to just #define it.
> 

I am leaning to agree with you. The clock is either CCB clock, or CCB/2.
Would it be better if you use a Kconfig option and select the divisor by
SoC?

York
Joakim Tjernlund Nov. 21, 2017, 5:41 p.m. UTC | #7
On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> 
> 
> On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
> > On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
> > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> > > 
> > > 
> > > On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
> > > > On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
> > > > > Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> > > > > This clock is derived from the CCB but in many cases the ref.
> > > > > clock is not 333 MHz and a divisor needs to be configured.
> > > > > 
> > > > > This adds PEX_CCB_DIV #define which can be defined for each
> > > > > type of CPU/platform.
> > > > > 
> > > > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> > > > > ---
> > > > >  drivers/pci/fsl_pci_init.c | 6 ++++++
> > > > >  1 file changed, 6 insertions(+)
> > > > > 
> > > > > diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
> > > > > index 52792dcd59..4d00b3f26c 100644
> > > > > --- a/drivers/pci/fsl_pci_init.c
> > > > > +++ b/drivers/pci/fsl_pci_init.c
> > > > > @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
> > > > > 
> > > > >      pci_setup_indirect(hose, cfg_addr, cfg_data);
> > > > > 
> > > > > +#ifdef PEX_CCB_DIV
> > > > > +    /* Configure the PCIE controller core clock ratio */
> > > > > +    pci_hose_write_config_dword(hose, dev, 0x440,
> > > > > +                                ((gd->bus_clk / 1000000) *
> > > > > +                                 (16 / PEX_CCB_DIV)) / 333);
> > > > > +#endif
> > > > >      block_rev = in_be32(&pci->block_rev1);
> > > > >      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
> > > > >              pi = &pci->pit[2];      /* 0xDC0 */
> > > > 
> > > > Ping?
> > > > 
> > > >  Jocke
> > > > 
> > > 
> > > I believe Mingkai's last comment was "to add the PCIe clock in gd".
> > 
> > Right, I seem to have forgotten to comment on that ...
> > Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
> > it makes perfect sense to just #define it.
> > 
> 
> I am leaning to agree with you. The clock is either CCB clock, or CCB/2.
> Would it be better if you use a Kconfig option and select the divisor by
> SoC?

No, this is not something that needs Kconfig, just add the PEX_CCB_DIV #define
in relevant PPC CPU, like in config_mpc85xx.h 

 Jocke
York Sun Nov. 21, 2017, 5:45 p.m. UTC | #8
On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
> On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>
>>
>> On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
>>> On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>
>>>>
>>>> On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
>>>>> On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
>>>>>> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
>>>>>> This clock is derived from the CCB but in many cases the ref.
>>>>>> clock is not 333 MHz and a divisor needs to be configured.
>>>>>>
>>>>>> This adds PEX_CCB_DIV #define which can be defined for each
>>>>>> type of CPU/platform.
>>>>>>
>>>>>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
>>>>>> ---
>>>>>>  drivers/pci/fsl_pci_init.c | 6 ++++++
>>>>>>  1 file changed, 6 insertions(+)
>>>>>>
>>>>>> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
>>>>>> index 52792dcd59..4d00b3f26c 100644
>>>>>> --- a/drivers/pci/fsl_pci_init.c
>>>>>> +++ b/drivers/pci/fsl_pci_init.c
>>>>>> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>>>>>>
>>>>>>      pci_setup_indirect(hose, cfg_addr, cfg_data);
>>>>>>
>>>>>> +#ifdef PEX_CCB_DIV
>>>>>> +    /* Configure the PCIE controller core clock ratio */
>>>>>> +    pci_hose_write_config_dword(hose, dev, 0x440,
>>>>>> +                                ((gd->bus_clk / 1000000) *
>>>>>> +                                 (16 / PEX_CCB_DIV)) / 333);
>>>>>> +#endif
>>>>>>      block_rev = in_be32(&pci->block_rev1);
>>>>>>      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
>>>>>>              pi = &pci->pit[2];      /* 0xDC0 */
>>>>>
>>>>> Ping?
>>>>>
>>>>>  Jocke
>>>>>
>>>>
>>>> I believe Mingkai's last comment was "to add the PCIe clock in gd".
>>>
>>> Right, I seem to have forgotten to comment on that ...
>>> Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
>>> it makes perfect sense to just #define it.
>>>
>>
>> I am leaning to agree with you. The clock is either CCB clock, or CCB/2.
>> Would it be better if you use a Kconfig option and select the divisor by
>> SoC?
> 
> No, this is not something that needs Kconfig, just add the PEX_CCB_DIV #define
> in relevant PPC CPU, like in config_mpc85xx.h 
> 

So what should be in Kconfig, and what shouldn't? This is per SoC macro.
Sounds like CONFIG_SYS_ in old days.

York
Joakim Tjernlund Nov. 21, 2017, 5:51 p.m. UTC | #9
On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:
> 
> On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
> > On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
> > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> > > 
> > > 
> > > On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
> > > > On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
> > > > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> > > > > 
> > > > > 
> > > > > On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
> > > > > > On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
> > > > > > > Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> > > > > > > This clock is derived from the CCB but in many cases the ref.
> > > > > > > clock is not 333 MHz and a divisor needs to be configured.
> > > > > > > 
> > > > > > > This adds PEX_CCB_DIV #define which can be defined for each
> > > > > > > type of CPU/platform.
> > > > > > > 
> > > > > > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> > > > > > > ---
> > > > > > >  drivers/pci/fsl_pci_init.c | 6 ++++++
> > > > > > >  1 file changed, 6 insertions(+)
> > > > > > > 
> > > > > > > diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
> > > > > > > index 52792dcd59..4d00b3f26c 100644
> > > > > > > --- a/drivers/pci/fsl_pci_init.c
> > > > > > > +++ b/drivers/pci/fsl_pci_init.c
> > > > > > > @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
> > > > > > > 
> > > > > > >      pci_setup_indirect(hose, cfg_addr, cfg_data);
> > > > > > > 
> > > > > > > +#ifdef PEX_CCB_DIV
> > > > > > > +    /* Configure the PCIE controller core clock ratio */
> > > > > > > +    pci_hose_write_config_dword(hose, dev, 0x440,
> > > > > > > +                                ((gd->bus_clk / 1000000) *
> > > > > > > +                                 (16 / PEX_CCB_DIV)) / 333);
> > > > > > > +#endif
> > > > > > >      block_rev = in_be32(&pci->block_rev1);
> > > > > > >      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
> > > > > > >              pi = &pci->pit[2];      /* 0xDC0 */
> > > > > > 
> > > > > > Ping?
> > > > > > 
> > > > > >  Jocke
> > > > > > 
> > > > > 
> > > > > I believe Mingkai's last comment was "to add the PCIe clock in gd".
> > > > 
> > > > Right, I seem to have forgotten to comment on that ...
> > > > Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
> > > > it makes perfect sense to just #define it.
> > > > 
> > > 
> > > I am leaning to agree with you. The clock is either CCB clock, or CCB/2.
> > > Would it be better if you use a Kconfig option and select the divisor by
> > > SoC?
> > 
> > No, this is not something that needs Kconfig, just add the PEX_CCB_DIV #define
> > in relevant PPC CPU, like in config_mpc85xx.h
> > 
> 
> So what should be in Kconfig, and what shouldn't? This is per SoC macro.
> Sounds like CONFIG_SYS_ in old days.

I must confess, I am not up to date with Kconfig stuff. I based my suggestion on
what already exists in config_mpc85xx.h:
#elif defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) ||\
defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
#define CONFIG_E5500
#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */
#define CONFIG_SYS_FSL_QORIQ_CHASSIS2	/* Freescale Chassis generation 2 */
#define CONFIG_SYS_FSL_CORES_PER_CLUSTER 1
#define CONFIG_SYS_FSL_QMAN_V3		/* QMAN version 3 */
#ifdef CONFIG_SYS_FSL_DDR4
#define CONFIG_SYS_FSL_DDRC_GEN4
#endif
#if defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042)
#define CONFIG_MAX_CPUS			4
#elif defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
#define CONFIG_MAX_CPUS			2
#endif
#define CONFIG_SYS_FSL_NUM_CC_PLLS	2
#define CONFIG_SYS_FSL_CLUSTER_CLOCKS   { 1, 1, 1, 1 }
#define CONFIG_SYS_FSL_NUM_LAWS		16
#define CONFIG_SYS_FSL_SRDS_1
#define CONFIG_SYS_FSL_SEC_COMPAT	5
#define CONFIG_SYS_NUM_FMAN		1
#define CONFIG_SYS_NUM_FM1_DTSEC	5
....
etc.

Seems like a good place to put another CPU constant.

Anyhow, that patch stands of its own I think. Where to put all constants 
is another patch for NXP.

 Jocke
York Sun Nov. 21, 2017, 6:04 p.m. UTC | #10
On 11/21/2017 09:52 AM, Joakim Tjernlund wrote:
> On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:
>>
>> On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
>>> On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>
>>>>
>>>> On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
>>>>> On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
>>>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>>>
>>>>>>
>>>>>> On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
>>>>>>> On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
>>>>>>>> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
>>>>>>>> This clock is derived from the CCB but in many cases the ref.
>>>>>>>> clock is not 333 MHz and a divisor needs to be configured.
>>>>>>>>
>>>>>>>> This adds PEX_CCB_DIV #define which can be defined for each
>>>>>>>> type of CPU/platform.
>>>>>>>>
>>>>>>>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
>>>>>>>> ---
>>>>>>>>  drivers/pci/fsl_pci_init.c | 6 ++++++
>>>>>>>>  1 file changed, 6 insertions(+)
>>>>>>>>
>>>>>>>> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
>>>>>>>> index 52792dcd59..4d00b3f26c 100644
>>>>>>>> --- a/drivers/pci/fsl_pci_init.c
>>>>>>>> +++ b/drivers/pci/fsl_pci_init.c
>>>>>>>> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>>>>>>>>
>>>>>>>>      pci_setup_indirect(hose, cfg_addr, cfg_data);
>>>>>>>>
>>>>>>>> +#ifdef PEX_CCB_DIV
>>>>>>>> +    /* Configure the PCIE controller core clock ratio */
>>>>>>>> +    pci_hose_write_config_dword(hose, dev, 0x440,
>>>>>>>> +                                ((gd->bus_clk / 1000000) *
>>>>>>>> +                                 (16 / PEX_CCB_DIV)) / 333);
>>>>>>>> +#endif



I took another look at this patch. Would it be appropriate to alway
write to this register with correct clock?



>>>>>>>>      block_rev = in_be32(&pci->block_rev1);
>>>>>>>>      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
>>>>>>>>              pi = &pci->pit[2];      /* 0xDC0 */
>>>>>>>
>>>>>>> Ping?
>>>>>>>
>>>>>>>  Jocke
>>>>>>>
>>>>>>
>>>>>> I believe Mingkai's last comment was "to add the PCIe clock in gd".
>>>>>
>>>>> Right, I seem to have forgotten to comment on that ...
>>>>> Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
>>>>> it makes perfect sense to just #define it.
>>>>>
>>>>
>>>> I am leaning to agree with you. The clock is either CCB clock, or CCB/2.
>>>> Would it be better if you use a Kconfig option and select the divisor by
>>>> SoC?
>>>
>>> No, this is not something that needs Kconfig, just add the PEX_CCB_DIV #define
>>> in relevant PPC CPU, like in config_mpc85xx.h
>>>
>>
>> So what should be in Kconfig, and what shouldn't? This is per SoC macro.
>> Sounds like CONFIG_SYS_ in old days.
> 
> I must confess, I am not up to date with Kconfig stuff. I based my suggestion on
> what already exists in config_mpc85xx.h:
> #elif defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) ||\
> defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
> #define CONFIG_E5500
> #define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */
> #define CONFIG_SYS_FSL_QORIQ_CHASSIS2	/* Freescale Chassis generation 2 */
> #define CONFIG_SYS_FSL_CORES_PER_CLUSTER 1
> #define CONFIG_SYS_FSL_QMAN_V3		/* QMAN version 3 */
> #ifdef CONFIG_SYS_FSL_DDR4
> #define CONFIG_SYS_FSL_DDRC_GEN4
> #endif
> #if defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042)
> #define CONFIG_MAX_CPUS			4
> #elif defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
> #define CONFIG_MAX_CPUS			2
> #endif
> #define CONFIG_SYS_FSL_NUM_CC_PLLS	2
> #define CONFIG_SYS_FSL_CLUSTER_CLOCKS   { 1, 1, 1, 1 }
> #define CONFIG_SYS_FSL_NUM_LAWS		16
> #define CONFIG_SYS_FSL_SRDS_1
> #define CONFIG_SYS_FSL_SEC_COMPAT	5
> #define CONFIG_SYS_NUM_FMAN		1
> #define CONFIG_SYS_NUM_FM1_DTSEC	5
> ....
> etc.
> 
> Seems like a good place to put another CPU constant.
> 

Yeah. We have been moving things out of header files and into Kconfig. I
would avoid adding new macro to header files.

> Anyhow, that patch stands of its own I think. Where to put all constants 
> is another patch for NXP.

Yes, we can add another patch to define this option for SoCs.

York
Joakim Tjernlund Nov. 21, 2017, 6:20 p.m. UTC | #11
On Tue, 2017-11-21 at 18:04 +0000, York Sun wrote:
> 
> 
> On 11/21/2017 09:52 AM, Joakim Tjernlund wrote:
> > On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:
> > > 
> > > On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
> > > > On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
> > > > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> > > > > 
> > > > > 
> > > > > On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
> > > > > > On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
> > > > > > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> > > > > > > 
> > > > > > > 
> > > > > > > On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
> > > > > > > > On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
> > > > > > > > > Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> > > > > > > > > This clock is derived from the CCB but in many cases the ref.
> > > > > > > > > clock is not 333 MHz and a divisor needs to be configured.
> > > > > > > > > 
> > > > > > > > > This adds PEX_CCB_DIV #define which can be defined for each
> > > > > > > > > type of CPU/platform.
> > > > > > > > > 
> > > > > > > > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> > > > > > > > > ---
> > > > > > > > >  drivers/pci/fsl_pci_init.c | 6 ++++++
> > > > > > > > >  1 file changed, 6 insertions(+)
> > > > > > > > > 
> > > > > > > > > diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
> > > > > > > > > index 52792dcd59..4d00b3f26c 100644
> > > > > > > > > --- a/drivers/pci/fsl_pci_init.c
> > > > > > > > > +++ b/drivers/pci/fsl_pci_init.c
> > > > > > > > > @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
> > > > > > > > > 
> > > > > > > > >      pci_setup_indirect(hose, cfg_addr, cfg_data);
> > > > > > > > > 
> > > > > > > > > +#ifdef PEX_CCB_DIV
> > > > > > > > > +    /* Configure the PCIE controller core clock ratio */
> > > > > > > > > +    pci_hose_write_config_dword(hose, dev, 0x440,
> > > > > > > > > +                                ((gd->bus_clk / 1000000) *
> > > > > > > > > +                                 (16 / PEX_CCB_DIV)) / 333);
> > > > > > > > > +#endif
> 
> 
> 
> I took another look at this patch. Would it be appropriate to alway
> write to this register with correct clock?

I sure hope so, the docs I have only mentions this reg having a default value which
needs to be changed in most cases I guess.

> 
> 
> 
> > > > > > > > >      block_rev = in_be32(&pci->block_rev1);
> > > > > > > > >      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
> > > > > > > > >              pi = &pci->pit[2];      /* 0xDC0 */
> > > > > > > > 
> > > > > > > > Ping?
> > > > > > > > 
> > > > > > > >  Jocke
> > > > > > > > 
> > > > > > > 
> > > > > > > I believe Mingkai's last comment was "to add the PCIe clock in gd".
> > > > > > 
> > > > > > Right, I seem to have forgotten to comment on that ...
> > > > > > Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
> > > > > > it makes perfect sense to just #define it.
> > > > > > 
> > > > > 
> > > > > I am leaning to agree with you. The clock is either CCB clock, or CCB/2.
> > > > > Would it be better if you use a Kconfig option and select the divisor by
> > > > > SoC?
> > > > 
> > > > No, this is not something that needs Kconfig, just add the PEX_CCB_DIV #define
> > > > in relevant PPC CPU, like in config_mpc85xx.h
> > > > 
> > > 
> > > So what should be in Kconfig, and what shouldn't? This is per SoC macro.
> > > Sounds like CONFIG_SYS_ in old days.
> > 
> > I must confess, I am not up to date with Kconfig stuff. I based my suggestion on
> > what already exists in config_mpc85xx.h:
> > #elif defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) ||\
> > defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
> > #define CONFIG_E5500
> > #define CONFIG_FSL_CORENET            /* Freescale CoreNet platform */
> > #define CONFIG_SYS_FSL_QORIQ_CHASSIS2 /* Freescale Chassis generation 2 */
> > #define CONFIG_SYS_FSL_CORES_PER_CLUSTER 1
> > #define CONFIG_SYS_FSL_QMAN_V3                /* QMAN version 3 */
> > #ifdef CONFIG_SYS_FSL_DDR4
> > #define CONFIG_SYS_FSL_DDRC_GEN4
> > #endif
> > #if defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042)
> > #define CONFIG_MAX_CPUS                       4
> > #elif defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
> > #define CONFIG_MAX_CPUS                       2
> > #endif
> > #define CONFIG_SYS_FSL_NUM_CC_PLLS    2
> > #define CONFIG_SYS_FSL_CLUSTER_CLOCKS   { 1, 1, 1, 1 }
> > #define CONFIG_SYS_FSL_NUM_LAWS               16
> > #define CONFIG_SYS_FSL_SRDS_1
> > #define CONFIG_SYS_FSL_SEC_COMPAT     5
> > #define CONFIG_SYS_NUM_FMAN           1
> > #define CONFIG_SYS_NUM_FM1_DTSEC      5
> > ....
> > etc.
> > 
> > Seems like a good place to put another CPU constant.
> > 
> 
> Yeah. We have been moving things out of header files and into Kconfig. I
> would avoid adding new macro to header files.

OK, I am happy if don't have to manually select the constant.

> 
> > Anyhow, that patch stands of its own I think. Where to put all constants
> > is another patch for NXP.
> 
> Yes, we can add another patch to define this option for SoCs.

 :)

 Jocke
York Sun Nov. 21, 2017, 6:35 p.m. UTC | #12
On 11/21/2017 10:20 AM, Joakim Tjernlund wrote:
> On Tue, 2017-11-21 at 18:04 +0000, York Sun wrote:
>>
>>
>> On 11/21/2017 09:52 AM, Joakim Tjernlund wrote:
>>> On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:
>>>>
>>>> On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
>>>>> On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
>>>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>>>
>>>>>>
>>>>>> On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
>>>>>>> On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
>>>>>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>>>>>
>>>>>>>>
>>>>>>>> On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
>>>>>>>>> On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
>>>>>>>>>> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
>>>>>>>>>> This clock is derived from the CCB but in many cases the ref.
>>>>>>>>>> clock is not 333 MHz and a divisor needs to be configured.
>>>>>>>>>>
>>>>>>>>>> This adds PEX_CCB_DIV #define which can be defined for each
>>>>>>>>>> type of CPU/platform.
>>>>>>>>>>
>>>>>>>>>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
>>>>>>>>>> ---
>>>>>>>>>>  drivers/pci/fsl_pci_init.c | 6 ++++++
>>>>>>>>>>  1 file changed, 6 insertions(+)
>>>>>>>>>>
>>>>>>>>>> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
>>>>>>>>>> index 52792dcd59..4d00b3f26c 100644
>>>>>>>>>> --- a/drivers/pci/fsl_pci_init.c
>>>>>>>>>> +++ b/drivers/pci/fsl_pci_init.c
>>>>>>>>>> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>>>>>>>>>>
>>>>>>>>>>      pci_setup_indirect(hose, cfg_addr, cfg_data);
>>>>>>>>>>
>>>>>>>>>> +#ifdef PEX_CCB_DIV
>>>>>>>>>> +    /* Configure the PCIE controller core clock ratio */
>>>>>>>>>> +    pci_hose_write_config_dword(hose, dev, 0x440,
>>>>>>>>>> +                                ((gd->bus_clk / 1000000) *
>>>>>>>>>> +                                 (16 / PEX_CCB_DIV)) / 333);
>>>>>>>>>> +#endif
>>
>>
>>
>> I took another look at this patch. Would it be appropriate to alway
>> write to this register with correct clock?
> 
> I sure hope so, the docs I have only mentions this reg having a default value which
> needs to be changed in most cases I guess.


The only case we don't need to set this register is when the actual
clock is 333MHz. I wonder why we didn't have a problem so far. Maybe we
just didn't realize it.

York
Joakim Tjernlund Nov. 21, 2017, 6:39 p.m. UTC | #13
On Tue, 2017-11-21 at 18:35 +0000, York Sun wrote:
> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> 
> 
> On 11/21/2017 10:20 AM, Joakim Tjernlund wrote:
> > On Tue, 2017-11-21 at 18:04 +0000, York Sun wrote:
> > > 
> > > 
> > > On 11/21/2017 09:52 AM, Joakim Tjernlund wrote:
> > > > On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:
> > > > > 
> > > > > On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
> > > > > > On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
> > > > > > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> > > > > > > 
> > > > > > > 
> > > > > > > On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
> > > > > > > > On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
> > > > > > > > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
> > > > > > > > > > On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
> > > > > > > > > > > Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> > > > > > > > > > > This clock is derived from the CCB but in many cases the ref.
> > > > > > > > > > > clock is not 333 MHz and a divisor needs to be configured.
> > > > > > > > > > > 
> > > > > > > > > > > This adds PEX_CCB_DIV #define which can be defined for each
> > > > > > > > > > > type of CPU/platform.
> > > > > > > > > > > 
> > > > > > > > > > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> > > > > > > > > > > ---
> > > > > > > > > > >  drivers/pci/fsl_pci_init.c | 6 ++++++
> > > > > > > > > > >  1 file changed, 6 insertions(+)
> > > > > > > > > > > 
> > > > > > > > > > > diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
> > > > > > > > > > > index 52792dcd59..4d00b3f26c 100644
> > > > > > > > > > > --- a/drivers/pci/fsl_pci_init.c
> > > > > > > > > > > +++ b/drivers/pci/fsl_pci_init.c
> > > > > > > > > > > @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
> > > > > > > > > > > 
> > > > > > > > > > >      pci_setup_indirect(hose, cfg_addr, cfg_data);
> > > > > > > > > > > 
> > > > > > > > > > > +#ifdef PEX_CCB_DIV
> > > > > > > > > > > +    /* Configure the PCIE controller core clock ratio */
> > > > > > > > > > > +    pci_hose_write_config_dword(hose, dev, 0x440,
> > > > > > > > > > > +                                ((gd->bus_clk / 1000000) *
> > > > > > > > > > > +                                 (16 / PEX_CCB_DIV)) / 333);
> > > > > > > > > > > +#endif
> > > 
> > > 
> > > 
> > > I took another look at this patch. Would it be appropriate to alway
> > > write to this register with correct clock?
> > 
> > I sure hope so, the docs I have only mentions this reg having a default value which
> > needs to be changed in most cases I guess.
> 
> 
> The only case we don't need to set this register is when the actual
> clock is 333MHz. I wonder why we didn't have a problem so far. Maybe we
> just didn't realize it.

Have you tried higher PCI speeds? I remember a board we had didn't work with higher
speeds so we settled for less than max. Don't hav the board handy now.

 Jocke
York Sun Nov. 21, 2017, 6:41 p.m. UTC | #14
On 11/21/2017 10:40 AM, Joakim Tjernlund wrote:
> On Tue, 2017-11-21 at 18:35 +0000, York Sun wrote:
>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>
>>
>> On 11/21/2017 10:20 AM, Joakim Tjernlund wrote:
>>> On Tue, 2017-11-21 at 18:04 +0000, York Sun wrote:
>>>>
>>>>
>>>> On 11/21/2017 09:52 AM, Joakim Tjernlund wrote:
>>>>> On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:
>>>>>>
>>>>>> On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
>>>>>>> On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
>>>>>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>>>>>
>>>>>>>>
>>>>>>>> On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
>>>>>>>>> On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
>>>>>>>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
>>>>>>>>>>> On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
>>>>>>>>>>>> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
>>>>>>>>>>>> This clock is derived from the CCB but in many cases the ref.
>>>>>>>>>>>> clock is not 333 MHz and a divisor needs to be configured.
>>>>>>>>>>>>
>>>>>>>>>>>> This adds PEX_CCB_DIV #define which can be defined for each
>>>>>>>>>>>> type of CPU/platform.
>>>>>>>>>>>>
>>>>>>>>>>>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
>>>>>>>>>>>> ---
>>>>>>>>>>>>  drivers/pci/fsl_pci_init.c | 6 ++++++
>>>>>>>>>>>>  1 file changed, 6 insertions(+)
>>>>>>>>>>>>
>>>>>>>>>>>> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
>>>>>>>>>>>> index 52792dcd59..4d00b3f26c 100644
>>>>>>>>>>>> --- a/drivers/pci/fsl_pci_init.c
>>>>>>>>>>>> +++ b/drivers/pci/fsl_pci_init.c
>>>>>>>>>>>> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>>>>>>>>>>>>
>>>>>>>>>>>>      pci_setup_indirect(hose, cfg_addr, cfg_data);
>>>>>>>>>>>>
>>>>>>>>>>>> +#ifdef PEX_CCB_DIV
>>>>>>>>>>>> +    /* Configure the PCIE controller core clock ratio */
>>>>>>>>>>>> +    pci_hose_write_config_dword(hose, dev, 0x440,
>>>>>>>>>>>> +                                ((gd->bus_clk / 1000000) *
>>>>>>>>>>>> +                                 (16 / PEX_CCB_DIV)) / 333);
>>>>>>>>>>>> +#endif
>>>>
>>>>
>>>>
>>>> I took another look at this patch. Would it be appropriate to alway
>>>> write to this register with correct clock?
>>>
>>> I sure hope so, the docs I have only mentions this reg having a default value which
>>> needs to be changed in most cases I guess.
>>
>>
>> The only case we don't need to set this register is when the actual
>> clock is 333MHz. I wonder why we didn't have a problem so far. Maybe we
>> just didn't realize it.
> 
> Have you tried higher PCI speeds? I remember a board we had didn't work with higher
> speeds so we settled for less than max. Don't hav the board handy now.
> 

No, I haven't.

York
York Sun Feb. 27, 2018, 7:30 p.m. UTC | #15
On 11/21/2017 10:20 AM, Joakim Tjernlund wrote:
> On Tue, 2017-11-21 at 18:04 +0000, York Sun wrote:
>>
>>
>> On 11/21/2017 09:52 AM, Joakim Tjernlund wrote:
>>> On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:
>>>>
>>>> On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
>>>>> On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
>>>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>>>
>>>>>>
>>>>>> On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
>>>>>>> On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
>>>>>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>>>>>
>>>>>>>>
>>>>>>>> On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
>>>>>>>>> On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
>>>>>>>>>> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
>>>>>>>>>> This clock is derived from the CCB but in many cases the ref.
>>>>>>>>>> clock is not 333 MHz and a divisor needs to be configured.
>>>>>>>>>>
>>>>>>>>>> This adds PEX_CCB_DIV #define which can be defined for each
>>>>>>>>>> type of CPU/platform.
>>>>>>>>>>
>>>>>>>>>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
>>>>>>>>>> ---
>>>>>>>>>>  drivers/pci/fsl_pci_init.c | 6 ++++++
>>>>>>>>>>  1 file changed, 6 insertions(+)
>>>>>>>>>>
>>>>>>>>>> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
>>>>>>>>>> index 52792dcd59..4d00b3f26c 100644
>>>>>>>>>> --- a/drivers/pci/fsl_pci_init.c
>>>>>>>>>> +++ b/drivers/pci/fsl_pci_init.c
>>>>>>>>>> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>>>>>>>>>>
>>>>>>>>>>      pci_setup_indirect(hose, cfg_addr, cfg_data);
>>>>>>>>>>
>>>>>>>>>> +#ifdef PEX_CCB_DIV
>>>>>>>>>> +    /* Configure the PCIE controller core clock ratio */
>>>>>>>>>> +    pci_hose_write_config_dword(hose, dev, 0x440,
>>>>>>>>>> +                                ((gd->bus_clk / 1000000) *
>>>>>>>>>> +                                 (16 / PEX_CCB_DIV)) / 333);
>>>>>>>>>> +#endif
>>
>>
>>
>> I took another look at this patch. Would it be appropriate to alway
>> write to this register with correct clock?
> 
> I sure hope so, the docs I have only mentions this reg having a default value which
> needs to be changed in most cases I guess.
> 
>>
>>
>>
>>>>>>>>>>      block_rev = in_be32(&pci->block_rev1);
>>>>>>>>>>      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
>>>>>>>>>>              pi = &pci->pit[2];      /* 0xDC0 */
>>>>>>>>>
>>>>>>>>> Ping?
>>>>>>>>>
>>>>>>>>>  Jocke
>>>>>>>>>
>>>>>>>>
>>>>>>>> I believe Mingkai's last comment was "to add the PCIe clock in gd".
>>>>>>>
>>>>>>> Right, I seem to have forgotten to comment on that ...
>>>>>>> Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
>>>>>>> it makes perfect sense to just #define it.
>>>>>>>
>>>>>>
>>>>>> I am leaning to agree with you. The clock is either CCB clock, or CCB/2.
>>>>>> Would it be better if you use a Kconfig option and select the divisor by
>>>>>> SoC?
>>>>>
>>>>> No, this is not something that needs Kconfig, just add the PEX_CCB_DIV #define
>>>>> in relevant PPC CPU, like in config_mpc85xx.h
>>>>>
>>>>
>>>> So what should be in Kconfig, and what shouldn't? This is per SoC macro.
>>>> Sounds like CONFIG_SYS_ in old days.
>>>
>>> I must confess, I am not up to date with Kconfig stuff. I based my suggestion on
>>> what already exists in config_mpc85xx.h:
>>> #elif defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) ||\
>>> defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
>>> #define CONFIG_E5500
>>> #define CONFIG_FSL_CORENET            /* Freescale CoreNet platform */
>>> #define CONFIG_SYS_FSL_QORIQ_CHASSIS2 /* Freescale Chassis generation 2 */
>>> #define CONFIG_SYS_FSL_CORES_PER_CLUSTER 1
>>> #define CONFIG_SYS_FSL_QMAN_V3                /* QMAN version 3 */
>>> #ifdef CONFIG_SYS_FSL_DDR4
>>> #define CONFIG_SYS_FSL_DDRC_GEN4
>>> #endif
>>> #if defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042)
>>> #define CONFIG_MAX_CPUS                       4
>>> #elif defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
>>> #define CONFIG_MAX_CPUS                       2
>>> #endif
>>> #define CONFIG_SYS_FSL_NUM_CC_PLLS    2
>>> #define CONFIG_SYS_FSL_CLUSTER_CLOCKS   { 1, 1, 1, 1 }
>>> #define CONFIG_SYS_FSL_NUM_LAWS               16
>>> #define CONFIG_SYS_FSL_SRDS_1
>>> #define CONFIG_SYS_FSL_SEC_COMPAT     5
>>> #define CONFIG_SYS_NUM_FMAN           1
>>> #define CONFIG_SYS_NUM_FM1_DTSEC      5
>>> ....
>>> etc.
>>>
>>> Seems like a good place to put another CPU constant.
>>>
>>
>> Yeah. We have been moving things out of header files and into Kconfig. I
>> would avoid adding new macro to header files.
> 
> OK, I am happy if don't have to manually select the constant.
> 
>>
>>> Anyhow, that patch stands of its own I think. Where to put all constants
>>> is another patch for NXP.
>>
>> Yes, we can add another patch to define this option for SoCs.
> 
>  :)
> 

Jocke,

Where are we on this patch? Do we have any patch to define PEX_CCB_DIV
to activate this new code?

York
Joakim Tjernlund Feb. 27, 2018, 7:52 p.m. UTC | #16
On Tue, 2018-02-27 at 19:30 +0000, York Sun wrote:
> 

> On 11/21/2017 10:20 AM, Joakim Tjernlund wrote:

> > On Tue, 2017-11-21 at 18:04 +0000, York Sun wrote:

> > > 

> > > 

> > > On 11/21/2017 09:52 AM, Joakim Tjernlund wrote:

> > > > On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:

> > > > > 

> > > > > On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:

> > > > > > On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:

> > > > > > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.

> > > > > > > 

> > > > > > > 

> > > > > > > On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:

> > > > > > > > On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:

> > > > > > > > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.

> > > > > > > > > 

> > > > > > > > > 

> > > > > > > > > On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:

> > > > > > > > > > On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:

> > > > > > > > > > > Most FSL PCIe controllers expects 333 MHz PCI reference clock.

> > > > > > > > > > > This clock is derived from the CCB but in many cases the ref.

> > > > > > > > > > > clock is not 333 MHz and a divisor needs to be configured.

> > > > > > > > > > > 

> > > > > > > > > > > This adds PEX_CCB_DIV #define which can be defined for each

> > > > > > > > > > > type of CPU/platform.

> > > > > > > > > > > 

> > > > > > > > > > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>

> > > > > > > > > > > ---

> > > > > > > > > > >  drivers/pci/fsl_pci_init.c | 6 ++++++

> > > > > > > > > > >  1 file changed, 6 insertions(+)

> > > > > > > > > > > 

> > > > > > > > > > > diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c

> > > > > > > > > > > index 52792dcd59..4d00b3f26c 100644

> > > > > > > > > > > --- a/drivers/pci/fsl_pci_init.c

> > > > > > > > > > > +++ b/drivers/pci/fsl_pci_init.c

> > > > > > > > > > > @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)

> > > > > > > > > > > 

> > > > > > > > > > >      pci_setup_indirect(hose, cfg_addr, cfg_data);

> > > > > > > > > > > 

> > > > > > > > > > > +#ifdef PEX_CCB_DIV

> > > > > > > > > > > +    /* Configure the PCIE controller core clock ratio */

> > > > > > > > > > > +    pci_hose_write_config_dword(hose, dev, 0x440,

> > > > > > > > > > > +                                ((gd->bus_clk / 1000000) *

> > > > > > > > > > > +                                 (16 / PEX_CCB_DIV)) / 333);

> > > > > > > > > > > +#endif

> > > 

> > > 

> > > 

> > > I took another look at this patch. Would it be appropriate to alway

> > > write to this register with correct clock?

> > 

> > I sure hope so, the docs I have only mentions this reg having a default value which

> > needs to be changed in most cases I guess.

> > 

> > > 

> > > 

> > > 

> > > > > > > > > > >      block_rev = in_be32(&pci->block_rev1);

> > > > > > > > > > >      if (PEX_IP_BLK_REV_2_2 <= block_rev) {

> > > > > > > > > > >              pi = &pci->pit[2];      /* 0xDC0 */

> > > > > > > > > > 

> > > > > > > > > > Ping?

> > > > > > > > > > 

> > > > > > > > > >  Jocke

> > > > > > > > > > 

> > > > > > > > > 

> > > > > > > > > I believe Mingkai's last comment was "to add the PCIe clock in gd".

> > > > > > > > 

> > > > > > > > Right, I seem to have forgotten to comment on that ...

> > > > > > > > Why add that complexity/bloat? This is a constant defined by the CPU/SOC so

> > > > > > > > it makes perfect sense to just #define it.

> > > > > > > > 

> > > > > > > 

> > > > > > > I am leaning to agree with you. The clock is either CCB clock, or CCB/2.

> > > > > > > Would it be better if you use a Kconfig option and select the divisor by

> > > > > > > SoC?

> > > > > > 

> > > > > > No, this is not something that needs Kconfig, just add the PEX_CCB_DIV #define

> > > > > > in relevant PPC CPU, like in config_mpc85xx.h

> > > > > > 

> > > > > 

> > > > > So what should be in Kconfig, and what shouldn't? This is per SoC macro.

> > > > > Sounds like CONFIG_SYS_ in old days.

> > > > 

> > > > I must confess, I am not up to date with Kconfig stuff. I based my suggestion on

> > > > what already exists in config_mpc85xx.h:

> > > > #elif defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) ||\

> > > > defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)

> > > > #define CONFIG_E5500

> > > > #define CONFIG_FSL_CORENET            /* Freescale CoreNet platform */

> > > > #define CONFIG_SYS_FSL_QORIQ_CHASSIS2 /* Freescale Chassis generation 2 */

> > > > #define CONFIG_SYS_FSL_CORES_PER_CLUSTER 1

> > > > #define CONFIG_SYS_FSL_QMAN_V3                /* QMAN version 3 */

> > > > #ifdef CONFIG_SYS_FSL_DDR4

> > > > #define CONFIG_SYS_FSL_DDRC_GEN4

> > > > #endif

> > > > #if defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042)

> > > > #define CONFIG_MAX_CPUS                       4

> > > > #elif defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)

> > > > #define CONFIG_MAX_CPUS                       2

> > > > #endif

> > > > #define CONFIG_SYS_FSL_NUM_CC_PLLS    2

> > > > #define CONFIG_SYS_FSL_CLUSTER_CLOCKS   { 1, 1, 1, 1 }

> > > > #define CONFIG_SYS_FSL_NUM_LAWS               16

> > > > #define CONFIG_SYS_FSL_SRDS_1

> > > > #define CONFIG_SYS_FSL_SEC_COMPAT     5

> > > > #define CONFIG_SYS_NUM_FMAN           1

> > > > #define CONFIG_SYS_NUM_FM1_DTSEC      5

> > > > ....

> > > > etc.

> > > > 

> > > > Seems like a good place to put another CPU constant.

> > > > 

> > > 

> > > Yeah. We have been moving things out of header files and into Kconfig. I

> > > would avoid adding new macro to header files.

> > 

> > OK, I am happy if don't have to manually select the constant.

> > 

> > > 

> > > > Anyhow, that patch stands of its own I think. Where to put all constants

> > > > is another patch for NXP.

> > > 

> > > Yes, we can add another patch to define this option for SoCs.

> > 

> >  :)

> > 

> 

> Jocke,

> 

> Where are we on this patch? Do we have any patch to define PEX_CCB_DIV

> to activate this new code?


I think we are at me thinking we should add my simple patch:
+#ifdef PEX_CCB_DIV
+    /* Configure the PCIE controller core clock ratio */
+    pci_hose_write_config_dword(hose, dev, 0x440,>
+                                ((gd->bus_clk / 1000000) *
+                                 (16 / PEX_CCB_DIV)) / 333);
+#endif
and then NXP find a suitable place to add PEX_CCB_DIV #define for each CPU/SOC.
I am not working on such a patch anyhow.

 Jocke
York Sun Feb. 27, 2018, 7:54 p.m. UTC | #17
On 02/27/2018 11:52 AM, Joakim Tjernlund wrote:
> On Tue, 2018-02-27 at 19:30 +0000, York Sun wrote:
>>
>> On 11/21/2017 10:20 AM, Joakim Tjernlund wrote:
>>> On Tue, 2017-11-21 at 18:04 +0000, York Sun wrote:
>>>>
>>>>
>>>> On 11/21/2017 09:52 AM, Joakim Tjernlund wrote:
>>>>> On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:
>>>>>>
>>>>>> On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
>>>>>>> On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
>>>>>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>>>>>
>>>>>>>>
>>>>>>>> On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
>>>>>>>>> On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
>>>>>>>>>> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
>>>>>>>>>>> On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
>>>>>>>>>>>> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
>>>>>>>>>>>> This clock is derived from the CCB but in many cases the ref.
>>>>>>>>>>>> clock is not 333 MHz and a divisor needs to be configured.
>>>>>>>>>>>>
>>>>>>>>>>>> This adds PEX_CCB_DIV #define which can be defined for each
>>>>>>>>>>>> type of CPU/platform.
>>>>>>>>>>>>
>>>>>>>>>>>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
>>>>>>>>>>>> ---
>>>>>>>>>>>>  drivers/pci/fsl_pci_init.c | 6 ++++++
>>>>>>>>>>>>  1 file changed, 6 insertions(+)
>>>>>>>>>>>>
>>>>>>>>>>>> diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
>>>>>>>>>>>> index 52792dcd59..4d00b3f26c 100644
>>>>>>>>>>>> --- a/drivers/pci/fsl_pci_init.c
>>>>>>>>>>>> +++ b/drivers/pci/fsl_pci_init.c
>>>>>>>>>>>> @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
>>>>>>>>>>>>
>>>>>>>>>>>>      pci_setup_indirect(hose, cfg_addr, cfg_data);
>>>>>>>>>>>>
>>>>>>>>>>>> +#ifdef PEX_CCB_DIV
>>>>>>>>>>>> +    /* Configure the PCIE controller core clock ratio */
>>>>>>>>>>>> +    pci_hose_write_config_dword(hose, dev, 0x440,
>>>>>>>>>>>> +                                ((gd->bus_clk / 1000000) *
>>>>>>>>>>>> +                                 (16 / PEX_CCB_DIV)) / 333);
>>>>>>>>>>>> +#endif
>>>>
>>>>
>>>>
>>>> I took another look at this patch. Would it be appropriate to alway
>>>> write to this register with correct clock?
>>>
>>> I sure hope so, the docs I have only mentions this reg having a default value which
>>> needs to be changed in most cases I guess.
>>>
>>>>
>>>>
>>>>
>>>>>>>>>>>>      block_rev = in_be32(&pci->block_rev1);
>>>>>>>>>>>>      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
>>>>>>>>>>>>              pi = &pci->pit[2];      /* 0xDC0 */
>>>>>>>>>>>
>>>>>>>>>>> Ping?
>>>>>>>>>>>
>>>>>>>>>>>  Jocke
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I believe Mingkai's last comment was "to add the PCIe clock in gd".
>>>>>>>>>
>>>>>>>>> Right, I seem to have forgotten to comment on that ...
>>>>>>>>> Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
>>>>>>>>> it makes perfect sense to just #define it.
>>>>>>>>>
>>>>>>>>
>>>>>>>> I am leaning to agree with you. The clock is either CCB clock, or CCB/2.
>>>>>>>> Would it be better if you use a Kconfig option and select the divisor by
>>>>>>>> SoC?
>>>>>>>
>>>>>>> No, this is not something that needs Kconfig, just add the PEX_CCB_DIV #define
>>>>>>> in relevant PPC CPU, like in config_mpc85xx.h
>>>>>>>
>>>>>>
>>>>>> So what should be in Kconfig, and what shouldn't? This is per SoC macro.
>>>>>> Sounds like CONFIG_SYS_ in old days.
>>>>>
>>>>> I must confess, I am not up to date with Kconfig stuff. I based my suggestion on
>>>>> what already exists in config_mpc85xx.h:
>>>>> #elif defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) ||\
>>>>> defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
>>>>> #define CONFIG_E5500
>>>>> #define CONFIG_FSL_CORENET            /* Freescale CoreNet platform */
>>>>> #define CONFIG_SYS_FSL_QORIQ_CHASSIS2 /* Freescale Chassis generation 2 */
>>>>> #define CONFIG_SYS_FSL_CORES_PER_CLUSTER 1
>>>>> #define CONFIG_SYS_FSL_QMAN_V3                /* QMAN version 3 */
>>>>> #ifdef CONFIG_SYS_FSL_DDR4
>>>>> #define CONFIG_SYS_FSL_DDRC_GEN4
>>>>> #endif
>>>>> #if defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042)
>>>>> #define CONFIG_MAX_CPUS                       4
>>>>> #elif defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
>>>>> #define CONFIG_MAX_CPUS                       2
>>>>> #endif
>>>>> #define CONFIG_SYS_FSL_NUM_CC_PLLS    2
>>>>> #define CONFIG_SYS_FSL_CLUSTER_CLOCKS   { 1, 1, 1, 1 }
>>>>> #define CONFIG_SYS_FSL_NUM_LAWS               16
>>>>> #define CONFIG_SYS_FSL_SRDS_1
>>>>> #define CONFIG_SYS_FSL_SEC_COMPAT     5
>>>>> #define CONFIG_SYS_NUM_FMAN           1
>>>>> #define CONFIG_SYS_NUM_FM1_DTSEC      5
>>>>> ....
>>>>> etc.
>>>>>
>>>>> Seems like a good place to put another CPU constant.
>>>>>
>>>>
>>>> Yeah. We have been moving things out of header files and into Kconfig. I
>>>> would avoid adding new macro to header files.
>>>
>>> OK, I am happy if don't have to manually select the constant.
>>>
>>>>
>>>>> Anyhow, that patch stands of its own I think. Where to put all constants
>>>>> is another patch for NXP.
>>>>
>>>> Yes, we can add another patch to define this option for SoCs.
>>>
>>>  :)
>>>
>>
>> Jocke,
>>
>> Where are we on this patch? Do we have any patch to define PEX_CCB_DIV
>> to activate this new code?
> 
> I think we are at me thinking we should add my simple patch:
> +#ifdef PEX_CCB_DIV
> +    /* Configure the PCIE controller core clock ratio */
> +    pci_hose_write_config_dword(hose, dev, 0x440,>
> +                                ((gd->bus_clk / 1000000) *
> +                                 (16 / PEX_CCB_DIV)) / 333);
> +#endif
> and then NXP find a suitable place to add PEX_CCB_DIV #define for each CPU/SOC.
> I am not working on such a patch anyhow.
> 

OK. I tend to accept this patch and have Mingkai to follow up on
defining PEX_CCB_DIV for SoCs in need.

York
Joakim Tjernlund Aug. 2, 2018, 10:38 p.m. UTC | #18
York, did this go anywhere?

 Jocke

On Tue, 2018-02-27 at 19:54 +0000, York Sun wrote:
> 
> On 02/27/2018 11:52 AM, Joakim Tjernlund wrote:
> > On Tue, 2018-02-27 at 19:30 +0000, York Sun wrote:
> > > 
> > > On 11/21/2017 10:20 AM, Joakim Tjernlund wrote:
> > > > On Tue, 2017-11-21 at 18:04 +0000, York Sun wrote:
> > > > > 
> > > > > 
> > > > > On 11/21/2017 09:52 AM, Joakim Tjernlund wrote:
> > > > > > On Tue, 2017-11-21 at 17:45 +0000, York Sun wrote:
> > > > > > > 
> > > > > > > On 11/21/2017 09:41 AM, Joakim Tjernlund wrote:
> > > > > > > > On Tue, 2017-11-21 at 17:32 +0000, York Sun wrote:
> > > > > > > > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > On 11/21/2017 09:29 AM, Joakim Tjernlund wrote:
> > > > > > > > > > On Tue, 2017-11-21 at 17:23 +0000, York Sun wrote:
> > > > > > > > > > > CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > On 11/21/2017 09:18 AM, Joakim Tjernlund wrote:
> > > > > > > > > > > > On Tue, 2017-09-12 at 19:56 +0200, Joakim Tjernlund wrote:
> > > > > > > > > > > > > Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> > > > > > > > > > > > > This clock is derived from the CCB but in many cases the ref.
> > > > > > > > > > > > > clock is not 333 MHz and a divisor needs to be configured.
> > > > > > > > > > > > > 
> > > > > > > > > > > > > This adds PEX_CCB_DIV #define which can be defined for each
> > > > > > > > > > > > > type of CPU/platform.
> > > > > > > > > > > > > 
> > > > > > > > > > > > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> > > > > > > > > > > > > ---
> > > > > > > > > > > > >  drivers/pci/fsl_pci_init.c | 6 ++++++
> > > > > > > > > > > > >  1 file changed, 6 insertions(+)
> > > > > > > > > > > > > 
> > > > > > > > > > > > > diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
> > > > > > > > > > > > > index 52792dcd59..4d00b3f26c 100644
> > > > > > > > > > > > > --- a/drivers/pci/fsl_pci_init.c
> > > > > > > > > > > > > +++ b/drivers/pci/fsl_pci_init.c
> > > > > > > > > > > > > @@ -322,6 +322,12 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
> > > > > > > > > > > > > 
> > > > > > > > > > > > >      pci_setup_indirect(hose, cfg_addr, cfg_data);
> > > > > > > > > > > > > 
> > > > > > > > > > > > > +#ifdef PEX_CCB_DIV
> > > > > > > > > > > > > +    /* Configure the PCIE controller core clock ratio */
> > > > > > > > > > > > > +    pci_hose_write_config_dword(hose, dev, 0x440,
> > > > > > > > > > > > > +                                ((gd->bus_clk / 1000000) *
> > > > > > > > > > > > > +                                 (16 / PEX_CCB_DIV)) / 333);
> > > > > > > > > > > > > +#endif
> > > > > 
> > > > > 
> > > > > 
> > > > > I took another look at this patch. Would it be appropriate to alway
> > > > > write to this register with correct clock?
> > > > 
> > > > I sure hope so, the docs I have only mentions this reg having a default value which
> > > > needs to be changed in most cases I guess.
> > > > 
> > > > > 
> > > > > 
> > > > > 
> > > > > > > > > > > > >      block_rev = in_be32(&pci->block_rev1);
> > > > > > > > > > > > >      if (PEX_IP_BLK_REV_2_2 <= block_rev) {
> > > > > > > > > > > > >              pi = &pci->pit[2];      /* 0xDC0 */
> > > > > > > > > > > > 
> > > > > > > > > > > > Ping?
> > > > > > > > > > > > 
> > > > > > > > > > > >  Jocke
> > > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > I believe Mingkai's last comment was "to add the PCIe clock in gd".
> > > > > > > > > > 
> > > > > > > > > > Right, I seem to have forgotten to comment on that ...
> > > > > > > > > > Why add that complexity/bloat? This is a constant defined by the CPU/SOC so
> > > > > > > > > > it makes perfect sense to just #define it.
> > > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > I am leaning to agree with you. The clock is either CCB clock, or CCB/2.
> > > > > > > > > Would it be better if you use a Kconfig option and select the divisor by
> > > > > > > > > SoC?
> > > > > > > > 
> > > > > > > > No, this is not something that needs Kconfig, just add the PEX_CCB_DIV #define
> > > > > > > > in relevant PPC CPU, like in config_mpc85xx.h
> > > > > > > > 
> > > > > > > 
> > > > > > > So what should be in Kconfig, and what shouldn't? This is per SoC macro.
> > > > > > > Sounds like CONFIG_SYS_ in old days.
> > > > > > 
> > > > > > I must confess, I am not up to date with Kconfig stuff. I based my suggestion on
> > > > > > what already exists in config_mpc85xx.h:
> > > > > > #elif defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) ||\
> > > > > > defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
> > > > > > #define CONFIG_E5500
> > > > > > #define CONFIG_FSL_CORENET            /* Freescale CoreNet platform */
> > > > > > #define CONFIG_SYS_FSL_QORIQ_CHASSIS2 /* Freescale Chassis generation 2 */
> > > > > > #define CONFIG_SYS_FSL_CORES_PER_CLUSTER 1
> > > > > > #define CONFIG_SYS_FSL_QMAN_V3                /* QMAN version 3 */
> > > > > > #ifdef CONFIG_SYS_FSL_DDR4
> > > > > > #define CONFIG_SYS_FSL_DDRC_GEN4
> > > > > > #endif
> > > > > > #if defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042)
> > > > > > #define CONFIG_MAX_CPUS                       4
> > > > > > #elif defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)
> > > > > > #define CONFIG_MAX_CPUS                       2
> > > > > > #endif
> > > > > > #define CONFIG_SYS_FSL_NUM_CC_PLLS    2
> > > > > > #define CONFIG_SYS_FSL_CLUSTER_CLOCKS   { 1, 1, 1, 1 }
> > > > > > #define CONFIG_SYS_FSL_NUM_LAWS               16
> > > > > > #define CONFIG_SYS_FSL_SRDS_1
> > > > > > #define CONFIG_SYS_FSL_SEC_COMPAT     5
> > > > > > #define CONFIG_SYS_NUM_FMAN           1
> > > > > > #define CONFIG_SYS_NUM_FM1_DTSEC      5
> > > > > > ....
> > > > > > etc.
> > > > > > 
> > > > > > Seems like a good place to put another CPU constant.
> > > > > > 
> > > > > 
> > > > > Yeah. We have been moving things out of header files and into Kconfig. I
> > > > > would avoid adding new macro to header files.
> > > > 
> > > > OK, I am happy if don't have to manually select the constant.
> > > > 
> > > > > 
> > > > > > Anyhow, that patch stands of its own I think. Where to put all constants
> > > > > > is another patch for NXP.
> > > > > 
> > > > > Yes, we can add another patch to define this option for SoCs.
> > > > 
> > > >  :)
> > > > 
> > > 
> > > Jocke,
> > > 
> > > Where are we on this patch? Do we have any patch to define PEX_CCB_DIV
> > > to activate this new code?
> > 
> > I think we are at me thinking we should add my simple patch:
> > +#ifdef PEX_CCB_DIV
> > +    /* Configure the PCIE controller core clock ratio */
> > +    pci_hose_write_config_dword(hose, dev, 0x440,>
> > +                                ((gd->bus_clk / 1000000) *
> > +                                 (16 / PEX_CCB_DIV)) / 333);
> > +#endif
> > and then NXP find a suitable place to add PEX_CCB_DIV #define for each CPU/SOC.
> > I am not working on such a patch anyhow.
> > 
> 
> OK. I tend to accept this patch and have Mingkai to follow up on
> defining PEX_CCB_DIV for SoCs in need.
> 
> York
York Sun Aug. 2, 2018, 10:43 p.m. UTC | #19
On 08/02/2018 03:38 PM, Joakim Tjernlund wrote:
> York, did this go anywhere?

No, I didn't hear from Mingkai. I am OK with this patch and will merge it.

York
York Sun Aug. 13, 2018, 4:29 p.m. UTC | #20
On 09/12/2017 10:56 AM, Joakim Tjernlund wrote:
> Most FSL PCIe controllers expects 333 MHz PCI reference clock.
> This clock is derived from the CCB but in many cases the ref.
> clock is not 333 MHz and a divisor needs to be configured.
> 
> This adds PEX_CCB_DIV #define which can be defined for each
> type of CPU/platform.
> 
> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> ---

Applied to fsl-qoriq master, awaiting upstream.
Thanks.

York
diff mbox series

Patch

diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
index 52792dcd59..4d00b3f26c 100644
--- a/drivers/pci/fsl_pci_init.c
+++ b/drivers/pci/fsl_pci_init.c
@@ -322,6 +322,12 @@  void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
 
 	pci_setup_indirect(hose, cfg_addr, cfg_data);
 
+#ifdef PEX_CCB_DIV
+	/* Configure the PCIE controller core clock ratio */
+	pci_hose_write_config_dword(hose, dev, 0x440,
+				    ((gd->bus_clk / 1000000) *
+				     (16 / PEX_CCB_DIV)) / 333);
+#endif
 	block_rev = in_be32(&pci->block_rev1);
 	if (PEX_IP_BLK_REV_2_2 <= block_rev) {
 		pi = &pci->pit[2];	/* 0xDC0 */