When booting with a serial console and a vsimm installed, the cg14
driver would crash because the driver failed to check the return
value of prom_getproperty().

Here's a patch to fix that and move the SPARC32 conditional out of
the source file and into Kconfig.

Bob


diff -X dontdiff -urp linux-2.6.10-clean/drivers/video/cg14.c linux-2.6.10/drivers/video/cg14.c --- linux-2.6.10-clean/drivers/video/cg14.c 2005-01-12 00:11:02.000000000 -0600 +++ linux-2.6.10/drivers/video/cg14.c 2005-01-31 22:31:36.000000000 -0600 @@ -469,9 +469,9 @@ static void cg14_init_one(struct sbus_de int is_8mb, linebytes, i;

        if (!sdev) {
-               prom_getproperty(node, "address",
-                                (char *) &bases[0], sizeof(bases));
-               if (!bases[0]) {
+               if (prom_getproperty(node, "address",
+                                    (char *) &bases[0], sizeof(bases)) <= 0
+                   || !bases[0]) {
                        printk(KERN_ERR "cg14: Device is not mapped.\n");
                        return;
                }
@@ -591,24 +591,20 @@ int __init cg14_init(void)
 {
        struct sbus_bus *sbus;
        struct sbus_dev *sdev;
+       int root, node;

        if (fb_get_options("cg14fb", NULL))
                return -ENODEV;

-#ifdef CONFIG_SPARC32
-       {
-               int root, node;
-
-               root = prom_getchild(prom_root_node);
-               root = prom_searchsiblings(root, "obio");
-               if (root) {
-                       node = prom_searchsiblings(prom_getchild(root),
-                                                  "cgfourteen");
-                       if (node)
-                               cg14_init_one(NULL, node, root);
-               }
+       root = prom_getchild(prom_root_node);
+       root = prom_searchsiblings(root, "obio");
+       if (root) {
+               node = prom_searchsiblings(prom_getchild(root),
+                                          "cgfourteen");
+               if (node)
+                       cg14_init_one(NULL, node, root);
        }
-#endif
+
        for_all_sbusdev(sdev, sbus) {
                if (!strcmp(sdev->prom_name, "cgfourteen"))
                        cg14_init_one(sdev, sdev->prom_node, sbus->prom_node);
diff -X dontdiff -urp linux-2.6.10-clean/drivers/video/Kconfig 
linux-2.6.10/drivers/video/Kconfig
--- linux-2.6.10-clean/drivers/video/Kconfig    2005-01-12 00:11:01.000000000 
-0600
+++ linux-2.6.10/drivers/video/Kconfig  2005-01-31 22:11:23.000000000 -0600
@@ -954,14 +954,14 @@ config FB_FFB

 config FB_TCX
        bool "TCX (SS4/SS5 only) support"
-       depends on FB_SBUS
+       depends on FB_SBUS && SPARC32
        help
          This is the frame buffer device driver for the TCX 24/8bit frame
          buffer.

 config FB_CG14
        bool "CGfourteen (SX) support"
-       depends on FB_SBUS
+       depends on FB_SBUS && SPARC32
        help
          This is the frame buffer device driver for the CGfourteen frame
          buffer on Desktop SPARCsystems with the SX graphics option.


- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html

Reply via email to