diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 58a9b8a8b722000dcc72366a6f5c00d957591848..ba3fa075e57d9bf0956733ca168ad27f38842668 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -1759,6 +1759,17 @@ static int fbcon_switch(struct vc_data *vc)
 	if (vt_cons[vc->vc_num]->vc_mode == KD_TEXT)
 		accel_clear_margins(vc, info, 0);
 	if (logo_shown == -2) {
+		struct fb_fillrect rect;
+		int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
+
+		logo_shown = fg_console;
+		rect.color = attr_bgcol_ec(bgshift, vc);
+		rect.rop = ROP_COPY;
+		rect.dx = rect.dy = 0;
+		rect.width = info->var.xres;
+		rect.height = logo_lines * vc->vc_font.height;
+		info->fbops->fb_fillrect(info, &rect);
+
 		logo_shown = fg_console;
 		/* This is protected above by initmem_freed */
 		fb_show_logo(info);
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index 68bf87cd240c957d3ae786f25e061b0590f0a0e8..447005f6dae18d04a7c032e2bd31007bd4aafb61 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -721,7 +721,6 @@ int fb_show_logo(struct fb_info *info)
 	u32 *palette = NULL, *saved_pseudo_palette = NULL;
 	unsigned char *logo_new = NULL;
 	struct fb_image image;
-	struct fb_fillrect rect;
 	int x;
 
 	/* Return if the frame buffer is not mapped or suspended */
@@ -767,12 +766,6 @@ int fb_show_logo(struct fb_info *info)
 	image.height = fb_logo.logo->height;
 	image.dy = 0;
 
-	rect.dx = 0;
-	rect.dy = 0;
-	rect.color = 0;
-	rect.width = info->var.xres;
-	rect.height = fb_logo.logo->height;
-	info->fbops->fb_fillrect(info, &rect);
 	for (x = 0; x < num_online_cpus() * (fb_logo.logo->width + 8) &&
 	     x <= info->var.xres-fb_logo.logo->width; x += (fb_logo.logo->width + 8)) {
 		image.dx = x;