diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c index 84f02f7ac76..05fe9645bee 100644 --- a/drivers/serial/serial-uclass.c +++ b/drivers/serial/serial-uclass.c @@ -328,11 +328,12 @@ static int __serial_tstc(struct udevice *dev) static int _serial_tstc(struct udevice *dev) { struct serial_dev_priv *upriv = dev_get_uclass_priv(dev); + uint wr; /* Read all available chars into the RX buffer */ while (__serial_tstc(dev)) { - upriv->buf[upriv->wr_ptr++] = __serial_getc(dev); - upriv->wr_ptr %= CONFIG_SERIAL_RX_BUFFER_SIZE; + wr = upriv->wr_ptr++ % CONFIG_SERIAL_RX_BUFFER_SIZE; + upriv->buf[wr] = __serial_getc(dev); } return upriv->rd_ptr != upriv->wr_ptr ? 1 : 0; @@ -342,12 +343,13 @@ static int _serial_getc(struct udevice *dev) { struct serial_dev_priv *upriv = dev_get_uclass_priv(dev); char val; + uint rd; if (upriv->rd_ptr == upriv->wr_ptr) return __serial_getc(dev); - val = upriv->buf[upriv->rd_ptr++]; - upriv->rd_ptr %= CONFIG_SERIAL_RX_BUFFER_SIZE; + rd = upriv->rd_ptr++ % CONFIG_SERIAL_RX_BUFFER_SIZE; + val = upriv->buf[rd]; return val; } diff --git a/include/serial.h b/include/serial.h index d129dc3253c..14563239b7d 100644 --- a/include/serial.h +++ b/include/serial.h @@ -299,8 +299,8 @@ struct serial_dev_priv { struct stdio_dev *sdev; char *buf; - int rd_ptr; - int wr_ptr; + uint rd_ptr; + uint wr_ptr; }; /* Access the serial operations for a device */