RE: [PATCH] ASoC: renesas: rz-ssi: Add a check for negative sample_space

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



Hi Geert,

> -----Original Message-----
> From: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
> Sent: 08 January 2025 10:58
> Subject: Re: [PATCH] ASoC: renesas: rz-ssi: Add a check for negative sample_space
> 
> Hi Dan,
> 
> On Wed, Jan 8, 2025 at 10:29 AM Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote:
> > My static checker rule complains about this code.  The concern is that
> > if "sample_space" is negative then the "sample_space >= runtime->channels"
> > condition will not work as intended because it will be type promoted
> > to a high unsigned int value.
> >
> > strm->fifo_sample_size is SSI_FIFO_DEPTH (32).  The SSIFSR_TDC_MASK is
> > 0x3f.  Without any further context it does seem like a reasonable
> > warning and it can't hurt to add a check for negatives.
> >
> > Cc: stable@xxxxxxxxxxxxxxx
> > Fixes: 03e786bd4341 ("ASoC: sh: Add RZ/G2L SSIF-2 driver")
> > Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> 
> Thanks for your patch!
> 
> > --- a/sound/soc/renesas/rz-ssi.c
> > +++ b/sound/soc/renesas/rz-ssi.c
> > @@ -521,6 +521,8 @@ static int rz_ssi_pio_send(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm)
> >         sample_space = strm->fifo_sample_size;
> >         ssifsr = rz_ssi_reg_readl(ssi, SSIFSR);
> >         sample_space -= (ssifsr >> SSIFSR_TDC_SHIFT) &
> > SSIFSR_TDC_MASK;
> > +       if (sample_space < 0)
> > +               return -EINVAL;
> >
> >         /* Only add full frames at a time */
> >         while (frames_left && (sample_space >= runtime->channels)) {
> 
> In practice this cannot happen, as the maximum value of the field is 0x20 (= SSI_FIFO_DEPTH), but
> better safe than sorry, so
> Reviewed-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
> 
> Biju/Prabhakar: The documentation for the TDC bits in the FIFO Status Register seems to be incorrect
> (in all of the RZ/G2L, RZ/G2UL, RZ/G3S, and RZ/A2M documentation):
> 
>     TDC[5:0] Bits
>     These bits indicate the number of valid data that are stored in
>     the transmit FIFO data register (SSIFTDR). With this flag as H’0,
>     there is no data to be transmitted. With H’10, there is no space to
>     write data.
> 
> As the FIFO size is 4 bytes x 32 stages for both the transmit and receive FIFOs, the above should be
> H'20 instead of H'10.

Thanks for pointing it out. Will check this with HW documentation team about this issue.

Cheers,
Biju




[Index of Archives]     [Pulseaudio]     [Linux Audio Users]     [ALSA Devel]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux