Hello all. The following patches make slight changes to the vmode/cmode logic on a few fb drivers. Now everone consistantly only tries to get these modes from nvram if CONFIG_NVRAM is defined (otherwise a compile-time error on everyone but atyfb). On imsttfb I made the logic only executed on CONFIG_ALL_PPC, and removed USE_NV_MODES (which shouldn't be needed now). However, I have none of this hardware, and I remember some of these drivers being very touchy. So could people with this hardware apply the patch and let me know if it works still?
Maintainers, does this look right? -- Tom Rini (TR1265) http://gate.crashing.org/~trini/ ===== drivers/video/controlfb.c 1.9 vs edited ===== --- 1.9/drivers/video/controlfb.c Fri Nov 16 02:58:17 2001 +++ edited/drivers/video/controlfb.c Mon Nov 26 22:52:28 2001 @@ -621,14 +621,10 @@ full = p->total_vram == 0x400000; +#ifdef CONFIG_NVRAM /* Try to pick a video mode out of NVRAM if we have one. */ - if (default_cmode == CMODE_NVRAM){ + if (default_cmode == CMODE_NVRAM) cmode = nvram_read_byte(NV_CMODE); - if(cmode < CMODE_8 || cmode > CMODE_32) - cmode = CMODE_8; - } else - cmode=default_cmode; - if (default_vmode == VMODE_NVRAM) { vmode = nvram_read_byte(NV_VMODE); if (vmode < 1 || vmode > VMODE_MAX || @@ -639,15 +635,16 @@ if (control_mac_modes[vmode - 1].m[full] < cmode) vmode = VMODE_640_480_60; } - } else { - vmode=default_vmode; - if (control_mac_modes[vmode - 1].m[full] < cmode) { - if (cmode > CMODE_8) - cmode--; - else - vmode = VMODE_640_480_60; - } } +#endif + + /* If we didn't get something from NVRAM, pick a + * sane default. + */ + if (vmode <= 0 || vmode > VMODE_MAX) + vmode = VMODE_640_480_67; + if (cmode < CMODE_8 || cmode > CMODE_32) + cmode = CMODE_8; if (mac_vmode_to_var(vmode, cmode, &var) < 0) { /* This shouldn't happen! */ ===== drivers/video/imsttfb.c 1.11 vs edited ===== --- 1.11/drivers/video/imsttfb.c Fri Nov 16 02:58:18 2001 +++ edited/drivers/video/imsttfb.c Mon Nov 26 22:52:11 2001 @@ -371,7 +371,6 @@ TVP = 1 }; -#define USE_NV_MODES 1 #define INIT_BPP 8 #define INIT_XRES 640 #define INIT_YRES 480 @@ -384,7 +383,8 @@ static char curblink __initdata = 1; static char noaccel __initdata = 0; #if defined(CONFIG_PPC) -static signed char init_vmode __initdata = -1, init_cmode __initdata = -1; +static signed char init_vmode __initdata = VMODE_NVRAM; +static signed char init_cmode __initdata = CMODE_NVRAM; #endif static struct imstt_regvals tvp_reg_init_2 = { @@ -1804,20 +1804,25 @@ } } -#if USE_NV_MODES && defined(CONFIG_PPC) +#ifdef CONFIG_ALL_PPC { int vmode = init_vmode, cmode = init_cmode; - if (vmode == -1) { +#ifdef CONFIG_NVRAM + /* Attempt to read vmode/cmode from NVRAM */ + if (vmode == VMODE_NVRAM) vmode = nvram_read_byte(NV_VMODE); - if (vmode <= 0 || vmode > VMODE_MAX) - vmode = VMODE_640_480_67; - } - if (cmode == -1) { + if (cmode == CMODE_NVRAM) cmode = nvram_read_byte(NV_CMODE); - if (cmode < CMODE_8 || cmode > CMODE_32) - cmode = CMODE_8; - } +#endif + /* If we didn't get something from NVRAM, pick a + * sane default. + */ + if (vmode <= 0 || vmode > VMODE_MAX) + vmode = VMODE_640_480_67; + if (cmode < CMODE_8 || cmode > CMODE_32) + cmode = CMODE_8; + if (mac_vmode_to_var(vmode, cmode, &p->disp.var)) { p->disp.var.xres = p->disp.var.xres_virtual = INIT_XRES; p->disp.var.yres = p->disp.var.yres_virtual = INIT_YRES; ===== drivers/video/platinumfb.c 1.5 vs edited ===== --- 1.5/drivers/video/platinumfb.c Fri Nov 16 13:45:57 2001 +++ edited/drivers/video/platinumfb.c Tue Nov 27 07:53:20 2001 @@ -558,19 +558,20 @@ sense = read_platinum_sense(info); printk(KERN_INFO "Monitor sense value = 0x%x, ", sense); +#ifdef CONFIG_NVRAM if (default_vmode == VMODE_NVRAM) { default_vmode = nvram_read_byte(NV_VMODE); if (default_vmode <= 0 || default_vmode > VMODE_MAX || !platinum_reg_init[default_vmode-1]) default_vmode = VMODE_CHOOSE; } - if (default_vmode == VMODE_CHOOSE) { + if (default_cmode == CMODE_NVRAM) + default_cmode = nvram_read_byte(NV_CMODE); +#endif + if (default_vmode == VMODE_CHOOSE) default_vmode = mac_map_monitor_sense(sense); - } if (default_vmode <= 0 || default_vmode > VMODE_MAX) default_vmode = VMODE_640_480_60; - if (default_cmode == CMODE_NVRAM) - default_cmode = nvram_read_byte(NV_CMODE); if (default_cmode < CMODE_8 || default_cmode > CMODE_32) default_cmode = CMODE_8; /* ===== drivers/video/valkyriefb.c 1.5 vs edited ===== --- 1.5/drivers/video/valkyriefb.c Fri Nov 16 13:45:58 2001 +++ edited/drivers/video/valkyriefb.c Tue Nov 27 07:53:44 2001 @@ -444,6 +444,7 @@ p->sense = read_valkyrie_sense(p); printk(KERN_INFO "Monitor sense value = 0x%x, ", p->sense); +#ifdef CONFIG_NVRAM /* Try to pick a video mode out of NVRAM if we have one. */ if (default_vmode == VMODE_NVRAM) { default_vmode = nvram_read_byte(NV_VMODE); @@ -452,13 +453,14 @@ || !valkyrie_reg_init[default_vmode - 1]) default_vmode = VMODE_CHOOSE; } + if (default_cmode == CMODE_NVRAM) + default_cmode = nvram_read_byte(NV_CMODE); +#endif + if (default_vmode == VMODE_CHOOSE) default_vmode = mac_map_monitor_sense(p->sense); if (!valkyrie_reg_init[default_vmode - 1]) default_vmode = VMODE_640_480_67; - if (default_cmode == CMODE_NVRAM) - default_cmode = nvram_read_byte(NV_CMODE); - /* * Reduce the pixel size if we don't have enough VRAM or bandwitdh. */ ===== drivers/video/aty/atyfb_base.c 1.6 vs edited ===== --- 1.6/drivers/video/aty/atyfb_base.c Wed Oct 31 09:09:50 2001 +++ edited/drivers/video/aty/atyfb_base.c Mon Nov 26 22:39:15 2001 @@ -258,7 +258,7 @@ #endif #ifdef CONFIG_PPC -#ifdef CONFIG_NVRAM_NOT_DEFINED +#ifndef CONFIG_NVRAM static int default_vmode __initdata = VMODE_NVRAM; static int default_cmode __initdata = CMODE_NVRAM; #else

