Module Name:    src
Committed By:   macallan
Date:           Wed Mar 27 22:00:33 UTC 2019

Modified Files:
        src/sys/dev/pci: radeonfb.c

Log Message:
fix the fix(es) - don't try to access a BIOS we didn't find.
Now this works on sparc64 again.


To generate a diff of this commit:
cvs rdiff -u -r1.103 -r1.104 src/sys/dev/pci/radeonfb.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/radeonfb.c
diff -u src/sys/dev/pci/radeonfb.c:1.103 src/sys/dev/pci/radeonfb.c:1.104
--- src/sys/dev/pci/radeonfb.c:1.103	Fri Mar 22 07:41:41 2019
+++ src/sys/dev/pci/radeonfb.c	Wed Mar 27 22:00:33 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeonfb.c,v 1.103 2019/03/22 07:41:41 martin Exp $ */
+/*	$NetBSD: radeonfb.c,v 1.104 2019/03/27 22:00:33 macallan Exp $ */
 
 /*-
  * Copyright (c) 2006 Itronix Inc.
@@ -70,7 +70,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.103 2019/03/22 07:41:41 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.104 2019/03/27 22:00:33 macallan Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -478,6 +478,8 @@ radeonfb_attach(device_t parent, device_
 	sc->sc_pc = pa->pa_pc;
 	sc->sc_family = radeonfb_devices[i].family;
 	sc->sc_flags = radeonfb_devices[i].flags;
+	sc->sc_bios = NULL;
+	sc->sc_biossz = 0;
 
 	/* enable memory and IO access */
 	screg = pci_conf_read(sc->sc_pc, sc->sc_pt, PCI_COMMAND_STATUS_REG);
@@ -1402,9 +1404,6 @@ radeonfb_loadbios(struct radeonfb_softc 
 	pci_find_rom(pa, romt, romh, romsz, PCI_ROM_CODE_TYPE_X86, &biosh,
 	    &sc->sc_biossz);
 
-	if (sc->sc_biossz == 0 || sc->sc_bios == NULL)
-		return;
-
 foundit:
 	if (sc->sc_biossz > 0) {
 		sc->sc_bios = malloc(sc->sc_biossz, M_DEVBUF, M_WAITOK);
@@ -1431,15 +1430,13 @@ foundit:
 	    pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_MAPREG_ROM) &
 	    ~PCI_MAPREG_ROM_ENABLE);
 
-	DPRINTF(("BIOS %08x\n", *(uint32_t *)sc->sc_bios));
-
-	ptr = GETBIOS16(sc, 0x48);
-	if ((GETBIOS32(sc, ptr + 4) == 0x41544f4d /* "ATOM" */) ||
-	    (GETBIOS32(sc, ptr + 4) == 0x4d4f5441 /* "MOTA" */)) {
-		sc->sc_flags |= RFB_ATOM;
-	}
-
 	if (sc->sc_biossz > 0) {
+		ptr = GETBIOS16(sc, 0x48);
+		if ((GETBIOS32(sc, ptr + 4) == 0x41544f4d /* "ATOM" */) ||
+		    (GETBIOS32(sc, ptr + 4) == 0x4d4f5441 /* "MOTA" */)) {
+			sc->sc_flags |= RFB_ATOM;
+		}
+
 		aprint_verbose("%s: Found %d KB %s BIOS\n", XNAME(sc),
 		    (unsigned)sc->sc_biossz >> 10,
 		    IS_ATOM(sc) ? "ATOM" : "Legacy");
@@ -1928,14 +1925,14 @@ nobios:
 			sc->sc_ports[0].rp_dac_type = RADEON_DAC_TVDAC;
 			sc->sc_ports[0].rp_conn_type = RADEON_CONN_DVI_D;
 			sc->sc_ports[0].rp_tmds_type = RADEON_TMDS_INT;
-			sc->sc_ports[0].rp_number = 1;
+			sc->sc_ports[0].rp_number = 0;
 
 			sc->sc_ports[1].rp_mon_type = RADEON_MT_UNKNOWN;
 			sc->sc_ports[1].rp_ddc_type = RADEON_DDC_VGA;
 			sc->sc_ports[1].rp_dac_type = RADEON_DAC_PRIMARY;
 			sc->sc_ports[1].rp_conn_type = RADEON_CONN_CRT;
 			sc->sc_ports[1].rp_tmds_type = RADEON_TMDS_UNKNOWN;
-			sc->sc_ports[1].rp_number = 0;
+			sc->sc_ports[1].rp_number = 1;
 		}
 	}
 

Reply via email to