Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci Handle EDID:N entries, where N is the port numbe...
details: https://anonhg.NetBSD.org/src/rev/460146fd24f6
branches: trunk
changeset: 955792:460146fd24f6
user: jdc <jdc%NetBSD.org@localhost>
date: Sun Oct 11 21:41:57 2020 +0000
description:
Handle EDID:N entries, where N is the port number, so that we can set up
the display on port1 when port0 has no EDID information.
Try harder not to return NULL from radeonfb_modelookup() because we use
the result without checking later.
While here, adjust RADEONFB_DEBUG output:
don't print RADEON_PIXCLKS_CNTL (fixes a crash on sparc64 because it's
not aligned)
don't ignore the bottom 200 lines of the display (for no apparent reason))
diffstat:
sys/dev/pci/radeonfb.c | 38 ++++++++++++++++++++++++++------------
1 files changed, 26 insertions(+), 12 deletions(-)
diffs (101 lines):
diff -r d9959c113760 -r 460146fd24f6 sys/dev/pci/radeonfb.c
--- a/sys/dev/pci/radeonfb.c Sun Oct 11 21:32:37 2020 +0000
+++ b/sys/dev/pci/radeonfb.c Sun Oct 11 21:41:57 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: radeonfb.c,v 1.110 2020/09/28 05:43:58 macallan Exp $ */
+/* $NetBSD: radeonfb.c,v 1.111 2020/10/11 21:41:57 jdc Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.110 2020/09/28 05:43:58 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.111 2020/10/11 21:41:57 jdc Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -590,7 +590,10 @@
PRINTREG(RADEON_LVDS_GEN_CNTL);
PRINTREG(RADEON_DISP_HW_DEBUG);
if (!IS_AVIVO(sc)) {
+ /*
+ XXX: We can't print this, as it's not correctly aligned
PRINTREG(RADEON_PIXCLKS_CNTL);
+ */
PRINTREG(RADEON_CRTC_H_SYNC_STRT_WID);
PRINTREG(RADEON_FP_H_SYNC_STRT_WID);
PRINTREG(RADEON_CRTC2_H_SYNC_STRT_WID);
@@ -927,10 +930,6 @@
dp->rd_vd.init_screen = radeonfb_init_screen;
-#ifdef RADEONFB_DEBUG
- dp->rd_virty -= 200;
-#endif
-
dp->rd_console = 0;
prop_dictionary_get_bool(device_properties(sc->sc_dev),
"is_console", &dp->rd_console);
@@ -1068,7 +1067,10 @@
PRINTREG(RADEON_TMDS_CNTL);
PRINTREG(RADEON_TMDS_TRANSMITTER_CNTL);
PRINTREG(RADEON_TMDS_PLL_CNTL);
+ /*
+ XXX: We can't print this, as it's not correctly aligned
PRINTREG(RADEON_PIXCLKS_CNTL);
+ */
}
return;
@@ -1968,7 +1970,7 @@
}
for (i = 0; i < 2; i++) {
- char edid[128];
+ char edid[128], edid_port_str[7] = "EDID:";
uint8_t ddc;
struct edid_info *eip = &sc->sc_ports[i].rp_edid;
prop_data_t edid_data;
@@ -1981,10 +1983,17 @@
DPRINTF((" crtc = %d\n", sc->sc_ports[i].rp_number));
sc->sc_ports[i].rp_edid_valid = 0;
- /* first look for static EDID data */
- if ((edid_data = prop_dictionary_get(device_properties(
- sc->sc_dev), "EDID")) != NULL) {
-
+ /*
+ * First look for static EDID data
+ * Try "EDID:port" then "EDID"
+ */
+ snprintf(&edid_port_str[5], 2, "%d", i);
+ edid_data = prop_dictionary_get(device_properties(
+ sc->sc_dev), edid_port_str);
+ if (edid_data == NULL)
+ edid_data = prop_dictionary_get(device_properties(
+ sc->sc_dev), "EDID");
+ if (edid_data != NULL) {
aprint_debug_dev(sc->sc_dev, "using static EDID\n");
memcpy(edid, prop_data_value(edid_data), 128);
if (edid_parse(edid, eip) == 0) {
@@ -2078,12 +2087,17 @@
radeonfb_modelookup(const char *name)
{
int i;
+ /* Use a default mode in case we don't find a matching mode */
+ const char *vm = "1024x768x60";
+ const struct videomode *vmp = NULL;
for (i = 0; i < videomode_count; i++) {
if (!strcmp(name, videomode_list[i].name))
return &videomode_list[i];
+ if (!strcmp(vm, videomode_list[i].name))
+ vmp = &videomode_list[i];
}
- return NULL;
+ return vmp;
}
void
Home |
Main Index |
Thread Index |
Old Index