]> xenbits.xensource.com Git - people/aperard/xen-arm.git/commitdiff
HACK: init ramoops driver if not already initialized. master
authorAnthony PERARD <anthony.perard@citrix.com>
Fri, 5 Jul 2013 11:30:38 +0000 (12:30 +0100)
committerAnthony PERARD <anthony.perard@citrix.com>
Fri, 5 Jul 2013 11:42:00 +0000 (12:42 +0100)
xen/arch/arm/setup.c
xen/drivers/char/ramoops.c
xen/include/xen/serial.h

index 2f72dc848293ac591bf54802704136e385c1f336..bbab4c04beeab74ef2dfa67c8fe6dec42bd0ada5 100644 (file)
@@ -434,6 +434,7 @@ void __init start_xen(unsigned long boot_phys_offset,
     dt_unflatten_host_device_tree();
     dt_irq_xlate = gic_irq_xlate;
 
+    console_ramoops_init();
     dt_uart_init();
     console_init_preirq();
 
index 2afb55182bc991bb4b08cdec7907fd61b210a7ce..8ea11ca64b27a9acbed3628a61e5ceadfe479721 100644 (file)
@@ -14,6 +14,7 @@ static struct ramoops {
     paddr_t start, size;
     paddr_t record_size;
     paddr_t cur_mfn;
+    int inited;
 } ramoops_data = {0};
 
 static void ramoops_check_mapping(void)
@@ -89,6 +90,7 @@ static int __init ramoops_init(struct dt_device_node *dev,
 
     early_printk("ramoops: Initialisation.\n");
 
+    if (dev) {
     ret = dt_device_get_address(dev, 0, &addr, &size);
     if ( ret )
     {
@@ -98,6 +100,10 @@ static int __init ramoops_init(struct dt_device_node *dev,
     early_printk("ramoops: addr: %#010"PRIx64", size %#010"PRIx64"\n", addr, size);
     ramoops_data.start = addr;
     ramoops_data.size = size;
+    } else /* !dev */ {
+        ramoops_data.start = 0x41f00000;
+        ramoops_data.size = 0x00100000;
+    }
     ramoops_data.va = (char *)FIXMAP_ADDR(FIXMAP_CONSOLE);
     /* #ifdef EARLY_PRINTK */
     // start on the second record, so early_printk are not erased
@@ -108,10 +114,19 @@ static int __init ramoops_init(struct dt_device_node *dev,
     /* Register with generic serial driver. */
     serial_register_uart(SERHND_DTUART, &ramoops_driver, &ramoops_data);
 
+    if (dev)
     dt_device_set_used_by(dev, DOMID_XEN);
 
+    ramoops_data.inited = 1;
+
     return 0;
 }
+int __init console_ramoops_init(void)
+{
+    if (!ramoops_data.inited)
+        return ramoops_init(NULL, NULL);
+    return 1;
+}
 
 static const char const *ramoops_dt_compat[] __initdata =
 {
index 9caf776ad0c302be0278e14640f6c6bb9e0003d7..a0620adf01eff73966b8bb5649549e8dde0ab284 100644 (file)
@@ -165,6 +165,7 @@ int dbgp_op(const struct physdev_dbgp_op *);
 /* Baud rate was pre-configured before invoking the UART driver. */
 #define BAUD_AUTO (-1)
 
+int __init console_ramoops_init(void);
 #endif /* __XEN_SERIAL_H__ */
 
 /*