mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ivan Vecera <ivecera@redhat.com>
To: netdev-bot+sashiko@kernel.org
Cc: netdev@vger.kernel.org, Chris.duQuesnay@microchip.com,
	arkadiusz.kubalewski@intel.com, kuba@kernel.org,
	jiri@resnulli.us, min.li@microchip.com, pabeni@redhat.com,
	poros@redhat.com, richardcochran@gmail.com,
	vadim.fedorenko@linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next 2/6] dpll: zl3073x: add GPO support for output pins
Date: Wed, 30 Sep 2026 10:28:37 +0200	[thread overview]
Message-ID: <6347acf5-4372-48dc-aa2e-47e7e94e1f33@redhat.com> (raw)
In-Reply-To: <179075143241.434549.4937444709313263420@kernel.org>

On 9/30/26 8:57 AM, netdev-bot+sashiko@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential
> issue(s) to consider.
> 
> Critical: 0 · High: 0 · Medium: 1 · Low: 1
> 
> If you believe none of the issues are legitimate, please reply to each
> issue of Medium severity or higher and explain why the AI is wrong.
> If any of them are legitimate and you plan to respin, please let patchwork
> know by including "pw-bot: cr" as a separate line at the end of your reply
> (one such reply per series is enough).
> 
> - [Medium] Error-recovery path applies the output restart before the
>    pending GPO change.
> - [Low] The struct zl3073x_dev kernel-doc in drivers/dpll/zl3073x/core.h
>    (line 65, '@out: array of outs' invariants') and the inline '/*…
> 
> --
> 
> dpll: zl3073x: add GPO support for output pins
> 
> This commit adds the GPO override mailbox fields and the direct gpo_out_x
> registers for CMOS output pins, along with helpers to read and set the pin
> function. It also adds the output_ctrl_x stop bits and stop/start helpers.
> ctrl moves into the cfg struct_group, and zl3073x_out_state_set() now
> writes it directly.
> 
>> diff --git a/drivers/dpll/zl3073x/out.c b/drivers/dpll/zl3073x/out.c
>> index 410d15b96d0b..82564045890d 100644
>> --- a/drivers/dpll/zl3073x/out.c
>> +++ b/drivers/dpll/zl3073x/out.c
> 
> [ ... ]
> 
>> @@ -120,11 +135,17 @@ int zl3073x_out_state_set(struct zl3073x_dev *zldev, u8 index,
>>   	struct zl3073x_out *dout = &zldev->out[index];
>>   	int rc;
>>   
>> -	/* Reject attempts to change invariant fields (set at fetch only) */
>> -	if (WARN_ON(memcmp(&dout->inv, &out->inv, sizeof(out->inv))))
>> -		return -EINVAL;
>> +	/* ctrl is a direct register, independent of the output mailbox */
>> +	if (dout->ctrl != out->ctrl) {
>> +		rc = zl3073x_write_u8(zldev, ZL_REG_OUTPUT_CTRL(index),
>> +				      out->ctrl);
>> +		if (rc)
>> +			return rc;
>> +
>> +		dout->ctrl = out->ctrl;
>> +	}
> 
> [Severity: Medium]
> 
> zl3073x_out_state_set() now always writes output_ctrl_x before any mailbox
> field. It does not roll dout->ctrl back if the later zl3073x_mb_op() or a
> mailbox field write fails.
> 
> Can this order apply a restart before a pending GPO change on an error
> recovery path?
> 
> The follow-up patch "dpll: zl3073x: allow enabling/disabling output pins"
> adds zl3073x_dev_output_pin_state_set(). It puts a stop before the GPO
> change and a start after it. Its recovery path looks like this:
> 
> 	rc = zl3073x_out_state_set(zldev, out_id, &out);
> 
> restart_output:
> 	zl3073x_out_start(&out);
> 	rc = zl3073x_out_state_set(zldev, out_id, &out) ? : rc;
> 
> The second zl3073x_out_state_set() call only changes gpo_en/gpo_config.
> Suppose it fails in zl3073x_mb_op() or in one of the mailbox field writes.
> Then dout->cfg keeps the old GPO values, while out still holds the new
> ones.
> 
> The recovery call then carries two changes: the cleared STOP/STOP_HZ bits
> and the uncommitted GPO change. Because ctrl is written first, would the
> clock restart, with the GPO override then changed on a running output?
> 
> That looks like the toggle the stop/start pair is meant to avoid. The
> driver's own comment says the GPO toggle is not glitch-free. For
> enable=true, the override is released onto a clock that is already
> running, at an arbitrary phase. For enable=false, the override is engaged
> in the middle of a clock cycle.
> 
> Also, if the retried commit succeeds, the "? : rc" still returns the
> earlier error. zl3073x_dpll_output_pin_state_on_dpll_set() would then
> report a failure even though the pin state changed.

Good catch. I will reorder zl3073x_out_state_set() to commit the mailbox
fields first and write the direct output_ctrl_x register last.

That fixes the recovery path in zl3073x_dev_output_pin_state_set():

   - stop phase: only ctrl changes (STOP/STOP_HZ), there is no cfg diff, so
     the mailbox commit is skipped and only ctrl is written - unchanged.
   - restart phase: state_set() will write the GPO change through the
     mailbox *while the output is still stopped* (ctrl not written yet),
     and only then clears STOP via ctrl - a clean restart, no glitch on a
     running output.
   - on a mailbox failure ctrl is left untouched, so there is no premature
     restart and dout->ctrl stays consistent with the hardware.

The other callers (frequency_set / esync_set / phase_adjust_set) only
change cfg fields with ctrl unchanged, so the ordering does not affect
them.

> 
>>   
>> -	/* Skip HW write if configuration hasn't changed */
>> +	/* Skip the mailbox commit if nothing else has changed */
>>   	if (!memcmp(&dout->cfg, &out->cfg, sizeof(out->cfg)))
>>   		return 0;
> 
> [ ... ]
> 
>> diff --git a/drivers/dpll/zl3073x/out.h b/drivers/dpll/zl3073x/out.h
>> index 660889c57bff..66a8432c00df 100644
>> --- a/drivers/dpll/zl3073x/out.h
>> +++ b/drivers/dpll/zl3073x/out.h
> 
> [ ... ]
> 
>> @@ -29,8 +32,9 @@ struct zl3073x_out {
>>   		u32	esync_n_width;
>>   		s32	phase_comp;
>>   		u8	mode;
>> -	);
>> -	struct_group(inv, /* Invariants */
>> +		u8	gpo_en;
>> +		u8	gpo_config_p;
>> +		u8	gpo_config_n;
>>   		u8	ctrl;
>>   	);
>>   };
> 
> [Severity: Low]
> 
> This isn't a bug, but with the inv group removed, struct zl3073x_out has
> no invariant fields left. The struct zl3073x_dev comments in core.h still
> describe out[] as invariants:
> 
>   * @out: array of outs' invariants
> ...
> 	/* Invariants */
> 	struct zl3073x_ref	ref[ZL3073X_NUM_REFS];
> 	struct zl3073x_out	out[ZL3073X_NUM_OUTS];
> 
> These comments are still unchanged at the end of the series. Should they
> be updated along with this change?

Yes, I will fix them in v2.

Thanks,
Ivan

pw-bot: cr


  reply	other threads:[~2026-09-30  8:28 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-28 18:55 [PATCH net-next 0/6] dpll: zl3073x: add PTP periodic output support Ivan Vecera
2026-09-28 18:55 ` [PATCH net-next 1/6] dpll: zl3073x: notify sibling pin when shared output config changes Ivan Vecera
2026-09-30  6:57   ` netdev-bot+sashiko
2026-09-30  7:49     ` Ivan Vecera
2026-09-30 14:24       ` Ivan Vecera
2026-09-28 18:55 ` [PATCH net-next 2/6] dpll: zl3073x: add GPO support for output pins Ivan Vecera
2026-09-30  6:57   ` netdev-bot+sashiko
2026-09-30  8:28     ` Ivan Vecera [this message]
2026-09-28 18:55 ` [PATCH net-next 3/6] dpll: zl3073x: allow enabling/disabling " Ivan Vecera
2026-09-30  6:57   ` netdev-bot+sashiko
2026-09-30 10:13     ` Ivan Vecera
2026-09-28 18:55 ` [PATCH net-next 4/6] dpll: zl3073x: consolidate pin capabilities into bitmap Ivan Vecera
2026-09-28 18:55 ` [PATCH net-next 5/6] dpll: zl3073x: factor out output pin frequency helper Ivan Vecera
2026-09-30  6:57   ` netdev-bot+sashiko
2026-09-30 10:43     ` Ivan Vecera
2026-09-28 18:55 ` [PATCH net-next 6/6] dpll: zl3073x: add PTP periodic output support Ivan Vecera
2026-09-30  6:57   ` netdev-bot+sashiko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6347acf5-4372-48dc-aa2e-47e7e94e1f33@redhat.com \
    --to=ivecera@redhat.com \
    --cc=Chris.duQuesnay@microchip.com \
    --cc=arkadiusz.kubalewski@intel.com \
    --cc=jiri@resnulli.us \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=min.li@microchip.com \
    --cc=netdev-bot+sashiko@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=poros@redhat.com \
    --cc=richardcochran@gmail.com \
    --cc=vadim.fedorenko@linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®