diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
index 4c0efd52f5cf03e2741a366b5095ee1a5528fb11..884db01f067eab6f64bef98b8f4d545c75a3bc4a 100644
--- a/drivers/video/vidconsole-uclass.c
+++ b/drivers/video/vidconsole-uclass.c
@@ -53,7 +53,7 @@ static void vidconsole_back(struct udevice *dev)
 	struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
 
 	priv->xcur_frac -= VID_TO_POS(priv->x_charsize);
-	if (priv->xcur_frac < 0) {
+	if (priv->xcur_frac < priv->xstart_frac) {
 		priv->xcur_frac = (priv->cols - 1) *
 			VID_TO_POS(priv->x_charsize);
 		priv->ycur -= priv->y_charsize;
@@ -71,7 +71,7 @@ static void vidconsole_newline(struct udevice *dev)
 	const int rows = CONFIG_CONSOLE_SCROLL_LINES;
 	int i;
 
-	priv->xcur_frac = 0;
+	priv->xcur_frac = priv->xstart_frac;
 	priv->ycur += priv->y_charsize;
 
 	/* Check if we need to scroll the terminal */
@@ -95,7 +95,7 @@ int vidconsole_put_char(struct udevice *dev, char ch)
 		/* beep */
 		break;
 	case '\r':
-		priv->xcur_frac = 0;
+		priv->xcur_frac = priv->xstart_frac;
 		break;
 	case '\n':
 		vidconsole_newline(dev);
diff --git a/include/video_console.h b/include/video_console.h
index eeba368d6391512ea49fbed561e7523d4e786be9..cbbf1345f8797663df9652ea5626dfa907574e87 100644
--- a/include/video_console.h
+++ b/include/video_console.h
@@ -27,6 +27,7 @@
  * @y_charsize:	Character height in pixels
  * @tab_width_frac:	Tab width in fractional units
  * @xsize_frac:	Width of the display in fractional units
+ * @xstart_frac:	Left margin for the text console in fractional units
  */
 struct vidconsole_priv {
 	struct stdio_dev sdev;
@@ -38,6 +39,7 @@ struct vidconsole_priv {
 	int y_charsize;
 	int tab_width_frac;
 	int xsize_frac;
+	int xstart_frac;
 };
 
 /**