On Mon, Sep 30, 2024 at 11:30:54AM +0200, Stefan Wahren wrote: > The target value of scldiv is just a byte, but its calculation in > fsl_lpspi_set_bitrate could be negative. So use an adequate type to store > the result and avoid overflows. After that this needs range check > adjustments, but this should make the code less opaque. > > Signed-off-by: Stefan Wahren <wahrenst@xxxxxxx> > --- Reviewed-by: Frank Li <Frank.Li@xxxxxxx> > drivers/spi/spi-fsl-lpspi.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c > index 977e8b55c82b..196cc68f2057 100644 > --- a/drivers/spi/spi-fsl-lpspi.c > +++ b/drivers/spi/spi-fsl-lpspi.c > @@ -315,9 +315,10 @@ static void fsl_lpspi_set_watermark(struct fsl_lpspi_data *fsl_lpspi) > static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi) > { > struct lpspi_config config = fsl_lpspi->config; > - unsigned int perclk_rate, scldiv, div; > + unsigned int perclk_rate, div; > u8 prescale_max; > u8 prescale; > + int scldiv; > > perclk_rate = clk_get_rate(fsl_lpspi->clk_per); > prescale_max = fsl_lpspi->devtype_data->prescale_max; > @@ -338,13 +339,13 @@ static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi) > > for (prescale = 0; prescale <= prescale_max; prescale++) { > scldiv = div / (1 << prescale) - 2; > - if (scldiv < 256) { > + if (scldiv >= 0 && scldiv < 256) { > fsl_lpspi->config.prescale = prescale; > break; > } > } > > - if (scldiv >= 256) > + if (scldiv < 0 || scldiv >= 256) > return -EINVAL; > > writel(scldiv | (scldiv << 8) | ((scldiv >> 1) << 16), > -- > 2.34.1 >