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

Re: [Xen-devel] [PATCH V1 14/29] xen/video: hdlcd: Use early_printk instead of printk



On 09/06/2013 05:48 PM, Ian Campbell wrote:
On Wed, 2013-08-28 at 15:47 +0100, Julien Grall wrote:
The video driver is initialized before the console is correctly set up.
Therefore, printk will never output if there is no serial configured.

On the flip side if you have a serial console but not early printk you
won't see these messages instead.

It depends, the console code will parse the console string and initialize the different console driver (serial, vga,...) one by one.
  - console=vga,serial => the VGA needs to use early printk
  - console=vga        => the VGA needs to use early printk
- console=serial,vga => the VGA needs to use printk and can use early printk if it's enabled.


I suppose in that case we don't even try to initialise the hdlcd, since
it will belong to dom0, right? Except I don't see where that happens.
Shouldn't this code only be activated if you have console=hdlcd or
something?

For the moment, the hdlcd is the default device for vga. So if console=vga, Xen will initialize the hdcld by calling video_init().
We will need to implement something similar to dt-uart.


Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
---
  xen/drivers/video/arm_hdlcd.c |   23 ++++++++++++-----------
  1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/xen/drivers/video/arm_hdlcd.c b/xen/drivers/video/arm_hdlcd.c
index ab464c6..dffda9a 100644
--- a/xen/drivers/video/arm_hdlcd.c
+++ b/xen/drivers/video/arm_hdlcd.c
@@ -146,13 +146,13 @@ void __init video_init(void)

      if ( !hdlcd_start )
      {
-        printk(KERN_ERR "HDLCD address missing from device tree, disabling 
driver\n");
+        early_printk(KERN_ERR "HDLCD: address missing from device tree, disabling 
driver\n");
          return;
      }

      if ( !hdlcd_start || !framebuffer_start )
      {
-        printk(KERN_ERR "HDLCD: framebuffer address missing from device tree, 
disabling driver\n");
+        early_printk(KERN_ERR "HDLCD: framebuffer address missing from device tree, 
disabling driver\n");
          return;
      }

@@ -166,27 +166,27 @@ void __init video_init(void)
      else if ( strlen(mode_string) < strlen("800x600@60") ||
              strlen(mode_string) > sizeof(_mode_string) - 1 )
      {
-        printk(KERN_ERR "HDLCD: invalid modeline=%s\n", mode_string);
+        early_printk(KERN_ERR "HDLCD: invalid modeline=%s\n", mode_string);
          return;
      } else {
          char *s = strchr(mode_string, '-');
          if ( !s )
          {
-            printk(KERN_INFO "HDLCD: bpp not found in modeline %s, assume 32 
bpp\n",
-                    mode_string);
+            early_printk(KERN_INFO "HDLCD: bpp not found in modeline %s, assume 32 
bpp\n",
+                         mode_string);
              get_color_masks("32", &c);
              memcpy(_mode_string, mode_string, strlen(mode_string) + 1);
              bytes_per_pixel = 4;
          } else {
              if ( strlen(s) < 6 )
              {
-                printk(KERN_ERR "HDLCD: invalid mode %s\n", mode_string);
+                early_printk(KERN_ERR "HDLCD: invalid mode %s\n", mode_string);
                  return;
              }
              s++;
              if ( get_color_masks(s, &c) < 0 )
              {
-                printk(KERN_WARNING "HDLCD: unsupported bpp %s\n", s);
+                early_printk(KERN_WARNING "HDLCD: unsupported bpp %s\n", s);
                  return;
              }
              bytes_per_pixel = simple_strtoll(s, NULL, 10) / 8;
@@ -205,22 +205,23 @@ void __init video_init(void)
      }
      if ( !videomode )
      {
-        printk(KERN_WARNING "HDLCD: unsupported videomode %s\n", _mode_string);
+        early_printk(KERN_WARNING "HDLCD: unsupported videomode %s\n",
+                     _mode_string);
          return;
      }

      if ( framebuffer_size < bytes_per_pixel * videomode->xres * 
videomode->yres )
      {
-        printk(KERN_ERR "HDLCD: the framebuffer is too small, disabling the HDLCD 
driver\n");
+        early_printk(KERN_ERR "HDLCD: the framebuffer is too small, disabling the 
HDLCD driver\n");
          return;
      }

-    printk(KERN_INFO "Initializing HDLCD driver\n");
+    early_printk(KERN_INFO "Initializing HDLCD driver\n");

      lfb = ioremap_wc(framebuffer_start, framebuffer_size);
      if ( !lfb )
      {
-        printk(KERN_ERR "Couldn't map the framebuffer\n");
+        early_printk(KERN_ERR "Couldn't map the framebuffer\n");
          return;
      }
      memset(lfb, 0x00, bytes_per_pixel * videomode->xres * videomode->yres);




--
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.