Re: [PATCH v3 06/15] board: ns3: default reset type to L3

2020-07-08 Thread Rayagonda Kokatanur
Hi Simon,

On Wed, Jul 8, 2020 at 8:31 PM Simon Glass  wrote:
>
> Hi Rayagonda,
>
> On Wed, 8 Jul 2020 at 01:01, Rayagonda Kokatanur
>  wrote:
> >
> > Hi Simon,
> >
> > On Fri, Jul 3, 2020 at 6:16 AM Simon Glass  wrote:
> > >
> > > Hi Rayagonda,
> > >
> > > On Mon, 29 Jun 2020 at 22:43, Rayagonda Kokatanur
> > >  wrote:
> > > >
> > > > Hi Simon,
> > > >
> > > > On Fri, Jun 26, 2020 at 6:42 AM Simon Glass  wrote:
> > > > >
> > > > > Hi Rayagonda,
> > > > >
> > > > > On Wed, 10 Jun 2020 at 04:42, Rayagonda Kokatanur
> > > > >  wrote:
> > > > > >
> > > > > > Default "reset" from u-boot to L3 reset.
> > > > >
> > > > > U-Boot
> > > >
> > > > Thank you, will fix this.
> > > > >
> > > > > > "reset" command with argument will trigger L1 reset.
> > > > > >
> > > > > > Signed-off-by: Rajesh Ravi 
> > > > > > Signed-off-by: Bharat Kumar Reddy Gooty 
> > > > > > Signed-off-by: Rayagonda Kokatanur 
> > > > > > 
> > > > > > ---
> > > > > >  board/broadcom/bcmns3/ns3.c | 20 ++--
> > > > > >  1 file changed, 18 insertions(+), 2 deletions(-)
> > > > > >
> > > > > > diff --git a/board/broadcom/bcmns3/ns3.c 
> > > > > > b/board/broadcom/bcmns3/ns3.c
> > > > > > index 5e644bd466..1221f26ddc 100644
> > > > > > --- a/board/broadcom/bcmns3/ns3.c
> > > > > > +++ b/board/broadcom/bcmns3/ns3.c
> > > > > > @@ -68,7 +68,23 @@ int dram_init_banksize(void)
> > > > > > return 0;
> > > > > >  }
> > > > > >
> > > > > > -void reset_cpu(ulong addr)
> > > > > > +void reset_cpu(ulong level)
> > > > > >  {
> > > > >
> > > > > This should be in a sysreset driver. It supports different reset 
> > > > > types.
> > > >
> > > > I checked the sysreset driver and found a generic/common psci driver -
> > > > drivers/sysreset/sysreset_psci.c.
> > > > We could use this common driver in our platform.
> > > >
> > > > Right now this common driver uses the same command or function_id for
> > > > both WARM and COLD reset.
> > > > But in our case we should use different commands for WARM and COLD 
> > > > reset.
> > > >
> > > > I am planning to add one kconfig option (USE_FN64_CMD) through which
> > > > we can select different commands or the same command for COLD reset.
> > > >
> > > > Something like this,
> > > >
> > > > static int psci_sysreset_request(struct udevice *dev, enum sysreset_t 
> > > > type)
> > > > {
> > > > unsigned long function_id;
> > > >
> > > > switch (type) {
> > > > case SYSRESET_WARM:
> > > >  function_id = PSCI_0_2_FN_SYSTEM_RESET;
> > > >  break;
> > > >
> > > >  case SYSRESET_COLD:
> > > >  if (CONFIG_IS_ENABLED(USE_FN64_CMD))
> > > >   function_id = PSCI_0_2_FN64_SYSTEM_RESET;
> > > >  else
> > > >   function_id = PSCI_0_2_FN_SYSTEM_RESET;
> > > >  break;
> > > >
> > > >  case SYSRESET_POWER_OFF:
> > > >  function_id = PSCI_0_2_FN_SYSTEM_OFF;
> > > >  break;
> > > >
> > > >  default:
> > > >  return -ENOSYS;
> > > > }
> > > >
> > > > invoke_psci_fn(function_id, 0, 0, 0);
> > > >
> > > > return -EINPROGRESS;
> > > > }
> > > >
> > > > This way any platform can define/select USE_FN64_CMD if they need
> > > > different commands for WARM reset.
> > > > Please let me know about this approach.
> > >
> > > It seems OK, but better would be to use the device tree to determine
> > > the command (e.g. compatible string or a property).
> >
> > I was checking linux psci drivers (drivers/firmware/psci/psci.c), they
> > are handling SYSTEM_RESET and SYSTEM_RESET2 without dt ie they read
> > psci capability, if it supports SYSTEM_RESET2 then they use it else
> > they use SYSTEM_RESET only.
> > I think, in U-Boot also we should handle in the same way.
> > This is a little bit more work, hence I am planning to handle this as
> > a separate patch set only.
> > So request you to allow this patch as it is.
> >
> > Please let me know.
>
> That's fine with me. So for now can we drop the Kconfig and just
> support SYSTEM_RESET?

For now I will keep this patch as it is, won't use UCLASS_SYSRESET.
Later I will push patch to,
-- use UCLASS_SYSRESET
-- Implement SYSTEM_RESET and SYSTEM_RESET2 as per linux.

Best regards,
Rayagonda


>
> Regards,
> Simon


Re: [PATCH v3 06/15] board: ns3: default reset type to L3

2020-07-08 Thread Simon Glass
Hi Rayagonda,

On Wed, 8 Jul 2020 at 01:01, Rayagonda Kokatanur
 wrote:
>
> Hi Simon,
>
> On Fri, Jul 3, 2020 at 6:16 AM Simon Glass  wrote:
> >
> > Hi Rayagonda,
> >
> > On Mon, 29 Jun 2020 at 22:43, Rayagonda Kokatanur
> >  wrote:
> > >
> > > Hi Simon,
> > >
> > > On Fri, Jun 26, 2020 at 6:42 AM Simon Glass  wrote:
> > > >
> > > > Hi Rayagonda,
> > > >
> > > > On Wed, 10 Jun 2020 at 04:42, Rayagonda Kokatanur
> > > >  wrote:
> > > > >
> > > > > Default "reset" from u-boot to L3 reset.
> > > >
> > > > U-Boot
> > >
> > > Thank you, will fix this.
> > > >
> > > > > "reset" command with argument will trigger L1 reset.
> > > > >
> > > > > Signed-off-by: Rajesh Ravi 
> > > > > Signed-off-by: Bharat Kumar Reddy Gooty 
> > > > > Signed-off-by: Rayagonda Kokatanur 
> > > > > ---
> > > > >  board/broadcom/bcmns3/ns3.c | 20 ++--
> > > > >  1 file changed, 18 insertions(+), 2 deletions(-)
> > > > >
> > > > > diff --git a/board/broadcom/bcmns3/ns3.c b/board/broadcom/bcmns3/ns3.c
> > > > > index 5e644bd466..1221f26ddc 100644
> > > > > --- a/board/broadcom/bcmns3/ns3.c
> > > > > +++ b/board/broadcom/bcmns3/ns3.c
> > > > > @@ -68,7 +68,23 @@ int dram_init_banksize(void)
> > > > > return 0;
> > > > >  }
> > > > >
> > > > > -void reset_cpu(ulong addr)
> > > > > +void reset_cpu(ulong level)
> > > > >  {
> > > >
> > > > This should be in a sysreset driver. It supports different reset types.
> > >
> > > I checked the sysreset driver and found a generic/common psci driver -
> > > drivers/sysreset/sysreset_psci.c.
> > > We could use this common driver in our platform.
> > >
> > > Right now this common driver uses the same command or function_id for
> > > both WARM and COLD reset.
> > > But in our case we should use different commands for WARM and COLD reset.
> > >
> > > I am planning to add one kconfig option (USE_FN64_CMD) through which
> > > we can select different commands or the same command for COLD reset.
> > >
> > > Something like this,
> > >
> > > static int psci_sysreset_request(struct udevice *dev, enum sysreset_t 
> > > type)
> > > {
> > > unsigned long function_id;
> > >
> > > switch (type) {
> > > case SYSRESET_WARM:
> > >  function_id = PSCI_0_2_FN_SYSTEM_RESET;
> > >  break;
> > >
> > >  case SYSRESET_COLD:
> > >  if (CONFIG_IS_ENABLED(USE_FN64_CMD))
> > >   function_id = PSCI_0_2_FN64_SYSTEM_RESET;
> > >  else
> > >   function_id = PSCI_0_2_FN_SYSTEM_RESET;
> > >  break;
> > >
> > >  case SYSRESET_POWER_OFF:
> > >  function_id = PSCI_0_2_FN_SYSTEM_OFF;
> > >  break;
> > >
> > >  default:
> > >  return -ENOSYS;
> > > }
> > >
> > > invoke_psci_fn(function_id, 0, 0, 0);
> > >
> > > return -EINPROGRESS;
> > > }
> > >
> > > This way any platform can define/select USE_FN64_CMD if they need
> > > different commands for WARM reset.
> > > Please let me know about this approach.
> >
> > It seems OK, but better would be to use the device tree to determine
> > the command (e.g. compatible string or a property).
>
> I was checking linux psci drivers (drivers/firmware/psci/psci.c), they
> are handling SYSTEM_RESET and SYSTEM_RESET2 without dt ie they read
> psci capability, if it supports SYSTEM_RESET2 then they use it else
> they use SYSTEM_RESET only.
> I think, in U-Boot also we should handle in the same way.
> This is a little bit more work, hence I am planning to handle this as
> a separate patch set only.
> So request you to allow this patch as it is.
>
> Please let me know.

That's fine with me. So for now can we drop the Kconfig and just
support SYSTEM_RESET?

Regards,
Simon


Re: [PATCH v3 06/15] board: ns3: default reset type to L3

2020-07-08 Thread Rayagonda Kokatanur
Hi Simon,

On Fri, Jul 3, 2020 at 6:16 AM Simon Glass  wrote:
>
> Hi Rayagonda,
>
> On Mon, 29 Jun 2020 at 22:43, Rayagonda Kokatanur
>  wrote:
> >
> > Hi Simon,
> >
> > On Fri, Jun 26, 2020 at 6:42 AM Simon Glass  wrote:
> > >
> > > Hi Rayagonda,
> > >
> > > On Wed, 10 Jun 2020 at 04:42, Rayagonda Kokatanur
> > >  wrote:
> > > >
> > > > Default "reset" from u-boot to L3 reset.
> > >
> > > U-Boot
> >
> > Thank you, will fix this.
> > >
> > > > "reset" command with argument will trigger L1 reset.
> > > >
> > > > Signed-off-by: Rajesh Ravi 
> > > > Signed-off-by: Bharat Kumar Reddy Gooty 
> > > > Signed-off-by: Rayagonda Kokatanur 
> > > > ---
> > > >  board/broadcom/bcmns3/ns3.c | 20 ++--
> > > >  1 file changed, 18 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/board/broadcom/bcmns3/ns3.c b/board/broadcom/bcmns3/ns3.c
> > > > index 5e644bd466..1221f26ddc 100644
> > > > --- a/board/broadcom/bcmns3/ns3.c
> > > > +++ b/board/broadcom/bcmns3/ns3.c
> > > > @@ -68,7 +68,23 @@ int dram_init_banksize(void)
> > > > return 0;
> > > >  }
> > > >
> > > > -void reset_cpu(ulong addr)
> > > > +void reset_cpu(ulong level)
> > > >  {
> > >
> > > This should be in a sysreset driver. It supports different reset types.
> >
> > I checked the sysreset driver and found a generic/common psci driver -
> > drivers/sysreset/sysreset_psci.c.
> > We could use this common driver in our platform.
> >
> > Right now this common driver uses the same command or function_id for
> > both WARM and COLD reset.
> > But in our case we should use different commands for WARM and COLD reset.
> >
> > I am planning to add one kconfig option (USE_FN64_CMD) through which
> > we can select different commands or the same command for COLD reset.
> >
> > Something like this,
> >
> > static int psci_sysreset_request(struct udevice *dev, enum sysreset_t type)
> > {
> > unsigned long function_id;
> >
> > switch (type) {
> > case SYSRESET_WARM:
> >  function_id = PSCI_0_2_FN_SYSTEM_RESET;
> >  break;
> >
> >  case SYSRESET_COLD:
> >  if (CONFIG_IS_ENABLED(USE_FN64_CMD))
> >   function_id = PSCI_0_2_FN64_SYSTEM_RESET;
> >  else
> >   function_id = PSCI_0_2_FN_SYSTEM_RESET;
> >  break;
> >
> >  case SYSRESET_POWER_OFF:
> >  function_id = PSCI_0_2_FN_SYSTEM_OFF;
> >  break;
> >
> >  default:
> >  return -ENOSYS;
> > }
> >
> > invoke_psci_fn(function_id, 0, 0, 0);
> >
> > return -EINPROGRESS;
> > }
> >
> > This way any platform can define/select USE_FN64_CMD if they need
> > different commands for WARM reset.
> > Please let me know about this approach.
>
> It seems OK, but better would be to use the device tree to determine
> the command (e.g. compatible string or a property).

I was checking linux psci drivers (drivers/firmware/psci/psci.c), they
are handling SYSTEM_RESET and SYSTEM_RESET2 without dt ie they read
psci capability, if it supports SYSTEM_RESET2 then they use it else
they use SYSTEM_RESET only.
I think, in U-Boot also we should handle in the same way.
This is a little bit more work, hence I am planning to handle this as
a separate patch set only.
So request you to allow this patch as it is.

Please let me know.

Best regards,
Rayagonda
>
> Regards,
> Simon


Re: [PATCH v3 06/15] board: ns3: default reset type to L3

2020-07-02 Thread Simon Glass
Hi Rayagonda,

On Mon, 29 Jun 2020 at 22:43, Rayagonda Kokatanur
 wrote:
>
> Hi Simon,
>
> On Fri, Jun 26, 2020 at 6:42 AM Simon Glass  wrote:
> >
> > Hi Rayagonda,
> >
> > On Wed, 10 Jun 2020 at 04:42, Rayagonda Kokatanur
> >  wrote:
> > >
> > > Default "reset" from u-boot to L3 reset.
> >
> > U-Boot
>
> Thank you, will fix this.
> >
> > > "reset" command with argument will trigger L1 reset.
> > >
> > > Signed-off-by: Rajesh Ravi 
> > > Signed-off-by: Bharat Kumar Reddy Gooty 
> > > Signed-off-by: Rayagonda Kokatanur 
> > > ---
> > >  board/broadcom/bcmns3/ns3.c | 20 ++--
> > >  1 file changed, 18 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/board/broadcom/bcmns3/ns3.c b/board/broadcom/bcmns3/ns3.c
> > > index 5e644bd466..1221f26ddc 100644
> > > --- a/board/broadcom/bcmns3/ns3.c
> > > +++ b/board/broadcom/bcmns3/ns3.c
> > > @@ -68,7 +68,23 @@ int dram_init_banksize(void)
> > > return 0;
> > >  }
> > >
> > > -void reset_cpu(ulong addr)
> > > +void reset_cpu(ulong level)
> > >  {
> >
> > This should be in a sysreset driver. It supports different reset types.
>
> I checked the sysreset driver and found a generic/common psci driver -
> drivers/sysreset/sysreset_psci.c.
> We could use this common driver in our platform.
>
> Right now this common driver uses the same command or function_id for
> both WARM and COLD reset.
> But in our case we should use different commands for WARM and COLD reset.
>
> I am planning to add one kconfig option (USE_FN64_CMD) through which
> we can select different commands or the same command for COLD reset.
>
> Something like this,
>
> static int psci_sysreset_request(struct udevice *dev, enum sysreset_t type)
> {
> unsigned long function_id;
>
> switch (type) {
> case SYSRESET_WARM:
>  function_id = PSCI_0_2_FN_SYSTEM_RESET;
>  break;
>
>  case SYSRESET_COLD:
>  if (CONFIG_IS_ENABLED(USE_FN64_CMD))
>   function_id = PSCI_0_2_FN64_SYSTEM_RESET;
>  else
>   function_id = PSCI_0_2_FN_SYSTEM_RESET;
>  break;
>
>  case SYSRESET_POWER_OFF:
>  function_id = PSCI_0_2_FN_SYSTEM_OFF;
>  break;
>
>  default:
>  return -ENOSYS;
> }
>
> invoke_psci_fn(function_id, 0, 0, 0);
>
> return -EINPROGRESS;
> }
>
> This way any platform can define/select USE_FN64_CMD if they need
> different commands for WARM reset.
> Please let me know about this approach.

It seems OK, but better would be to use the device tree to determine
the command (e.g. compatible string or a property).

Regards,
Simon


Re: [PATCH v3 06/15] board: ns3: default reset type to L3

2020-06-29 Thread Rayagonda Kokatanur
Hi Simon,

On Fri, Jun 26, 2020 at 6:42 AM Simon Glass  wrote:
>
> Hi Rayagonda,
>
> On Wed, 10 Jun 2020 at 04:42, Rayagonda Kokatanur
>  wrote:
> >
> > Default "reset" from u-boot to L3 reset.
>
> U-Boot

Thank you, will fix this.
>
> > "reset" command with argument will trigger L1 reset.
> >
> > Signed-off-by: Rajesh Ravi 
> > Signed-off-by: Bharat Kumar Reddy Gooty 
> > Signed-off-by: Rayagonda Kokatanur 
> > ---
> >  board/broadcom/bcmns3/ns3.c | 20 ++--
> >  1 file changed, 18 insertions(+), 2 deletions(-)
> >
> > diff --git a/board/broadcom/bcmns3/ns3.c b/board/broadcom/bcmns3/ns3.c
> > index 5e644bd466..1221f26ddc 100644
> > --- a/board/broadcom/bcmns3/ns3.c
> > +++ b/board/broadcom/bcmns3/ns3.c
> > @@ -68,7 +68,23 @@ int dram_init_banksize(void)
> > return 0;
> >  }
> >
> > -void reset_cpu(ulong addr)
> > +void reset_cpu(ulong level)
> >  {
>
> This should be in a sysreset driver. It supports different reset types.

I checked the sysreset driver and found a generic/common psci driver -
drivers/sysreset/sysreset_psci.c.
We could use this common driver in our platform.

Right now this common driver uses the same command or function_id for
both WARM and COLD reset.
But in our case we should use different commands for WARM and COLD reset.

I am planning to add one kconfig option (USE_FN64_CMD) through which
we can select different commands or the same command for COLD reset.

Something like this,

static int psci_sysreset_request(struct udevice *dev, enum sysreset_t type)
{
unsigned long function_id;

switch (type) {
case SYSRESET_WARM:
 function_id = PSCI_0_2_FN_SYSTEM_RESET;
 break;

 case SYSRESET_COLD:
 if (CONFIG_IS_ENABLED(USE_FN64_CMD))
  function_id = PSCI_0_2_FN64_SYSTEM_RESET;
 else
  function_id = PSCI_0_2_FN_SYSTEM_RESET;
 break;

 case SYSRESET_POWER_OFF:
 function_id = PSCI_0_2_FN_SYSTEM_OFF;
 break;

 default:
 return -ENOSYS;
}

invoke_psci_fn(function_id, 0, 0, 0);

return -EINPROGRESS;
}

This way any platform can define/select USE_FN64_CMD if they need
different commands for WARM reset.
Please let me know about this approach.

Best regards,
Rayagonda

>
> > -   psci_system_reset();
> > +#define L3_RESET 30
> > +   u32 reset_level, strap_val;
> > +
> > +   /* Default reset type is L3 reset */
> > +   if (!level) {
> > +   /*
> > +* Encoding: u-boot reset command expects decimal argument
> > +* strap val = 1st decimal digit;reset level = 2nd decimal 
> > digit
> > +*/
> > +   strap_val = L3_RESET % 10;
> > +   level = L3_RESET / 10;
> > +   reset_level = level % 10;
> > +   psci_system_reset2(reset_level, strap_val);
> > +   } else {
> > +   /* U-boot cmd "reset" with any arg will trigger L1 reset */
> > +   psci_system_reset();
> > +   }
> >  }
> > --
> > 2.17.1
> >
>
> Regards,
> Simon


Re: [PATCH v3 06/15] board: ns3: default reset type to L3

2020-06-25 Thread Simon Glass
Hi Rayagonda,

On Wed, 10 Jun 2020 at 04:42, Rayagonda Kokatanur
 wrote:
>
> Default "reset" from u-boot to L3 reset.

U-Boot

> "reset" command with argument will trigger L1 reset.
>
> Signed-off-by: Rajesh Ravi 
> Signed-off-by: Bharat Kumar Reddy Gooty 
> Signed-off-by: Rayagonda Kokatanur 
> ---
>  board/broadcom/bcmns3/ns3.c | 20 ++--
>  1 file changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/board/broadcom/bcmns3/ns3.c b/board/broadcom/bcmns3/ns3.c
> index 5e644bd466..1221f26ddc 100644
> --- a/board/broadcom/bcmns3/ns3.c
> +++ b/board/broadcom/bcmns3/ns3.c
> @@ -68,7 +68,23 @@ int dram_init_banksize(void)
> return 0;
>  }
>
> -void reset_cpu(ulong addr)
> +void reset_cpu(ulong level)
>  {

This should be in a sysreset driver. It supports different reset types.

> -   psci_system_reset();
> +#define L3_RESET 30
> +   u32 reset_level, strap_val;
> +
> +   /* Default reset type is L3 reset */
> +   if (!level) {
> +   /*
> +* Encoding: u-boot reset command expects decimal argument
> +* strap val = 1st decimal digit;reset level = 2nd decimal 
> digit
> +*/
> +   strap_val = L3_RESET % 10;
> +   level = L3_RESET / 10;
> +   reset_level = level % 10;
> +   psci_system_reset2(reset_level, strap_val);
> +   } else {
> +   /* U-boot cmd "reset" with any arg will trigger L1 reset */
> +   psci_system_reset();
> +   }
>  }
> --
> 2.17.1
>

Regards,
Simon


[PATCH v3 06/15] board: ns3: default reset type to L3

2020-06-10 Thread Rayagonda Kokatanur
Default "reset" from u-boot to L3 reset.
"reset" command with argument will trigger L1 reset.

Signed-off-by: Rajesh Ravi 
Signed-off-by: Bharat Kumar Reddy Gooty 
Signed-off-by: Rayagonda Kokatanur 
---
 board/broadcom/bcmns3/ns3.c | 20 ++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/board/broadcom/bcmns3/ns3.c b/board/broadcom/bcmns3/ns3.c
index 5e644bd466..1221f26ddc 100644
--- a/board/broadcom/bcmns3/ns3.c
+++ b/board/broadcom/bcmns3/ns3.c
@@ -68,7 +68,23 @@ int dram_init_banksize(void)
return 0;
 }
 
-void reset_cpu(ulong addr)
+void reset_cpu(ulong level)
 {
-   psci_system_reset();
+#define L3_RESET 30
+   u32 reset_level, strap_val;
+
+   /* Default reset type is L3 reset */
+   if (!level) {
+   /*
+* Encoding: u-boot reset command expects decimal argument
+* strap val = 1st decimal digit;reset level = 2nd decimal digit
+*/
+   strap_val = L3_RESET % 10;
+   level = L3_RESET / 10;
+   reset_level = level % 10;
+   psci_system_reset2(reset_level, strap_val);
+   } else {
+   /* U-boot cmd "reset" with any arg will trigger L1 reset */
+   psci_system_reset();
+   }
 }
-- 
2.17.1