2019-06-14 12:36:11

by Bitan Biswas

[permalink] [raw]
Subject: [PATCH V1 1/2] mailbox: tegra: hsp: add noirq resume

Add noirq resume instead of resume callback for Tegra HSP. Tegra HSP
resume needs tegra_hsp_doorbell_startup() call to fix timeout error for
tegra_bpmp_transfer() during genpd resume noirq on jetson-tx2.

Signed-off-by: Bitan Biswas <[email protected]>
---
drivers/mailbox/tegra-hsp.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c
index 91f1a0c..f147374 100644
--- a/drivers/mailbox/tegra-hsp.c
+++ b/drivers/mailbox/tegra-hsp.c
@@ -771,10 +771,16 @@ static int tegra_hsp_probe(struct platform_device *pdev)
return 0;
}

-static int __maybe_unused tegra_hsp_resume(struct device *dev)
+static int __maybe_unused tegra_hsp_noirq_resume(struct device *dev)
{
struct tegra_hsp *hsp = dev_get_drvdata(dev);
unsigned int i;
+ struct tegra_hsp_doorbell *db;
+
+ list_for_each_entry(db, &hsp->doorbells, list) {
+ if (db && db->channel.chan)
+ tegra_hsp_doorbell_startup(db->channel.chan);
+ }

for (i = 0; i < hsp->num_sm; i++) {
struct tegra_hsp_mailbox *mb = &hsp->mailboxes[i];
@@ -786,7 +792,9 @@ static int __maybe_unused tegra_hsp_resume(struct device *dev)
return 0;
}

-static SIMPLE_DEV_PM_OPS(tegra_hsp_pm_ops, NULL, tegra_hsp_resume);
+static const struct dev_pm_ops tegra_hsp_pm_ops = {
+ .resume_noirq = tegra_hsp_noirq_resume,
+};

static const struct tegra_hsp_db_map tegra186_hsp_db_map[] = {
{ "ccplex", TEGRA_HSP_DB_MASTER_CCPLEX, HSP_DB_CCPLEX, },
--
2.7.4


2019-06-14 12:37:57

by Bitan Biswas

[permalink] [raw]
Subject: [PATCH V1 2/2] mailbox: tegra: avoid resume NULL mailboxes

If Tegra hsp device tree does not have 'shared irqs',
mailboxes pointer is NULL. Add non-NULL HSP mailboxes
check in resume callback before tegra_hsp_mailbox_startup()
call and prevent NULL pointer exception.

Signed-off-by: Bitan Biswas <[email protected]>
---
drivers/mailbox/tegra-hsp.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c
index f147374..a11fb1c 100644
--- a/drivers/mailbox/tegra-hsp.c
+++ b/drivers/mailbox/tegra-hsp.c
@@ -782,11 +782,13 @@ static int __maybe_unused tegra_hsp_noirq_resume(struct device *dev)
tegra_hsp_doorbell_startup(db->channel.chan);
}

- for (i = 0; i < hsp->num_sm; i++) {
- struct tegra_hsp_mailbox *mb = &hsp->mailboxes[i];
+ if (hsp->mailboxes) {
+ for (i = 0; i < hsp->num_sm; i++) {
+ struct tegra_hsp_mailbox *mb = &hsp->mailboxes[i];

- if (mb->channel.chan->cl)
- tegra_hsp_mailbox_startup(mb->channel.chan);
+ if (mb->channel.chan->cl)
+ tegra_hsp_mailbox_startup(mb->channel.chan);
+ }
}

return 0;
--
2.7.4

2019-06-14 15:52:00

by Thierry Reding

[permalink] [raw]
Subject: Re: [PATCH V1 1/2] mailbox: tegra: hsp: add noirq resume

On Fri, Jun 14, 2019 at 05:35:33AM -0700, Bitan Biswas wrote:
> Add noirq resume instead of resume callback for Tegra HSP. Tegra HSP
> resume needs tegra_hsp_doorbell_startup() call to fix timeout error for
> tegra_bpmp_transfer() during genpd resume noirq on jetson-tx2.

s/jetson-tx2/Jetson TX2/?

>
> Signed-off-by: Bitan Biswas <[email protected]>
> ---
> drivers/mailbox/tegra-hsp.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c
> index 91f1a0c..f147374 100644
> --- a/drivers/mailbox/tegra-hsp.c
> +++ b/drivers/mailbox/tegra-hsp.c
> @@ -771,10 +771,16 @@ static int tegra_hsp_probe(struct platform_device *pdev)
> return 0;
> }
>
> -static int __maybe_unused tegra_hsp_resume(struct device *dev)
> +static int __maybe_unused tegra_hsp_noirq_resume(struct device *dev)

Maybe call this tegra_hsp_resume_noirq() to match the naming of the
dev_pm_ops callback?

> {
> struct tegra_hsp *hsp = dev_get_drvdata(dev);
> unsigned int i;
> + struct tegra_hsp_doorbell *db;
> +
> + list_for_each_entry(db, &hsp->doorbells, list) {
> + if (db && db->channel.chan)
> + tegra_hsp_doorbell_startup(db->channel.chan);
> + }
>
> for (i = 0; i < hsp->num_sm; i++) {
> struct tegra_hsp_mailbox *mb = &hsp->mailboxes[i];
> @@ -786,7 +792,9 @@ static int __maybe_unused tegra_hsp_resume(struct device *dev)
> return 0;
> }
>
> -static SIMPLE_DEV_PM_OPS(tegra_hsp_pm_ops, NULL, tegra_hsp_resume);
> +static const struct dev_pm_ops tegra_hsp_pm_ops = {
> + .resume_noirq = tegra_hsp_noirq_resume,

There seems to be two extra spaces before that =.

Thierry


Attachments:
(No filename) (1.68 kB)
signature.asc (849.00 B)
Download all attachments

2019-06-14 15:52:34

by Thierry Reding

[permalink] [raw]
Subject: Re: [PATCH V1 2/2] mailbox: tegra: avoid resume NULL mailboxes

On Fri, Jun 14, 2019 at 05:35:34AM -0700, Bitan Biswas wrote:
> If Tegra hsp device tree does not have 'shared irqs',

s/hsp/HSP/, otherwise looks good.

Thierry

> mailboxes pointer is NULL. Add non-NULL HSP mailboxes
> check in resume callback before tegra_hsp_mailbox_startup()
> call and prevent NULL pointer exception.
>
> Signed-off-by: Bitan Biswas <[email protected]>
> ---
> drivers/mailbox/tegra-hsp.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c
> index f147374..a11fb1c 100644
> --- a/drivers/mailbox/tegra-hsp.c
> +++ b/drivers/mailbox/tegra-hsp.c
> @@ -782,11 +782,13 @@ static int __maybe_unused tegra_hsp_noirq_resume(struct device *dev)
> tegra_hsp_doorbell_startup(db->channel.chan);
> }
>
> - for (i = 0; i < hsp->num_sm; i++) {
> - struct tegra_hsp_mailbox *mb = &hsp->mailboxes[i];
> + if (hsp->mailboxes) {
> + for (i = 0; i < hsp->num_sm; i++) {
> + struct tegra_hsp_mailbox *mb = &hsp->mailboxes[i];
>
> - if (mb->channel.chan->cl)
> - tegra_hsp_mailbox_startup(mb->channel.chan);
> + if (mb->channel.chan->cl)
> + tegra_hsp_mailbox_startup(mb->channel.chan);
> + }
> }
>
> return 0;
> --
> 2.7.4
>


Attachments:
(No filename) (1.27 kB)
signature.asc (849.00 B)
Download all attachments

2019-06-14 16:13:51

by Bitan Biswas

[permalink] [raw]
Subject: Re: [PATCH V1 1/2] mailbox: tegra: hsp: add noirq resume



On 6/14/19 8:50 AM, Thierry Reding wrote:
> On Fri, Jun 14, 2019 at 05:35:33AM -0700, Bitan Biswas wrote:
>> Add noirq resume instead of resume callback for Tegra HSP. Tegra HSP
>> resume needs tegra_hsp_doorbell_startup() call to fix timeout error for
>> tegra_bpmp_transfer() during genpd resume noirq on jetson-tx2.
>
> s/jetson-tx2/Jetson TX2/?
I shall replace the string "jetson-tx2" in commit description with
"Jetson TX2".

>
>>
>> Signed-off-by: Bitan Biswas <[email protected]>
>> ---
>> drivers/mailbox/tegra-hsp.c | 12 ++++++++++--
>> 1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c
>> index 91f1a0c..f147374 100644
>> --- a/drivers/mailbox/tegra-hsp.c
>> +++ b/drivers/mailbox/tegra-hsp.c
>> @@ -771,10 +771,16 @@ static int tegra_hsp_probe(struct platform_device *pdev)
>> return 0;
>> }
>>
>> -static int __maybe_unused tegra_hsp_resume(struct device *dev)
>> +static int __maybe_unused tegra_hsp_noirq_resume(struct device *dev)
>
> Maybe call this tegra_hsp_resume_noirq() to match the naming of the
> dev_pm_ops callback?
I shall rename tegra_hsp_noirq_resume back to tegra_hsp_resume.

>
>> {
>> struct tegra_hsp *hsp = dev_get_drvdata(dev);
>> unsigned int i;
>> + struct tegra_hsp_doorbell *db;
>> +
>> + list_for_each_entry(db, &hsp->doorbells, list) {
>> + if (db && db->channel.chan)
>> + tegra_hsp_doorbell_startup(db->channel.chan);
>> + }
>>
>> for (i = 0; i < hsp->num_sm; i++) {
>> struct tegra_hsp_mailbox *mb = &hsp->mailboxes[i];
>> @@ -786,7 +792,9 @@ static int __maybe_unused tegra_hsp_resume(struct device *dev)
>> return 0;
>> }
>>
>> -static SIMPLE_DEV_PM_OPS(tegra_hsp_pm_ops, NULL, tegra_hsp_resume);
>> +static const struct dev_pm_ops tegra_hsp_pm_ops = {
>> + .resume_noirq = tegra_hsp_noirq_resume,
>
> There seems to be two extra spaces before that =.
Missed extra spaces. Shall fix.

-Thanks,
Bitan

2019-06-14 16:18:30

by Bitan Biswas

[permalink] [raw]
Subject: Re: [PATCH V1 2/2] mailbox: tegra: avoid resume NULL mailboxes



On 6/14/19 8:52 AM, Thierry Reding wrote:
> On Fri, Jun 14, 2019 at 05:35:34AM -0700, Bitan Biswas wrote:
>> If Tegra hsp device tree does not have 'shared irqs',
>
> s/hsp/HSP/, otherwise looks good.
Shall correct.

>
> Thierry
>
>> mailboxes pointer is NULL. Add non-NULL HSP mailboxes
>> check in resume callback before tegra_hsp_mailbox_startup()
>> call and prevent NULL pointer exception.
>>
>> Signed-off-by: Bitan Biswas <[email protected]>
>> ---
>> drivers/mailbox/tegra-hsp.c | 10 ++++++----
>> 1 file changed, 6 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c
>> index f147374..a11fb1c 100644
>> --- a/drivers/mailbox/tegra-hsp.c
>> +++ b/drivers/mailbox/tegra-hsp.c
>> @@ -782,11 +782,13 @@ static int __maybe_unused tegra_hsp_noirq_resume(struct device *dev)
>> tegra_hsp_doorbell_startup(db->channel.chan);
>> }
>>
>> - for (i = 0; i < hsp->num_sm; i++) {
>> - struct tegra_hsp_mailbox *mb = &hsp->mailboxes[i];
>> + if (hsp->mailboxes) {
>> + for (i = 0; i < hsp->num_sm; i++) {
>> + struct tegra_hsp_mailbox *mb = &hsp->mailboxes[i];
>>
>> - if (mb->channel.chan->cl)
>> - tegra_hsp_mailbox_startup(mb->channel.chan);
>> + if (mb->channel.chan->cl)
>> + tegra_hsp_mailbox_startup(mb->channel.chan);
>> + }
>> }
>>
>> return 0;
>> --
>> 2.7.4

-Thanks,
Bitan