Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci Differentiate between Voodoo 3 and Voodoo Banshe...
details: https://anonhg.NetBSD.org/src/rev/5a160781e1ed
branches: trunk
changeset: 782626:5a160781e1ed
user: rkujawa <rkujawa%NetBSD.org@localhost>
date: Fri Nov 09 19:50:22 2012 +0000
description:
Differentiate between Voodoo 3 and Voodoo Banshee (MAX_CLOCK).
Ok'd by macallan@.
diffstat:
sys/dev/pci/voodoofb.c | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
diffs (86 lines):
diff -r afe32c96f73b -r 5a160781e1ed sys/dev/pci/voodoofb.c
--- a/sys/dev/pci/voodoofb.c Fri Nov 09 19:47:11 2012 +0000
+++ b/sys/dev/pci/voodoofb.c Fri Nov 09 19:50:22 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: voodoofb.c,v 1.42 2012/11/09 11:28:40 rkujawa Exp $ */
+/* $NetBSD: voodoofb.c,v 1.43 2012/11/09 19:50:22 rkujawa Exp $ */
/*
* Copyright (c) 2005, 2006, 2012 Michael Lorenz
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: voodoofb.c,v 1.42 2012/11/09 11:28:40 rkujawa Exp $");
+__KERNEL_RCSID(0, "$NetBSD: voodoofb.c,v 1.43 2012/11/09 19:50:22 rkujawa Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -82,6 +82,11 @@
bus_size_t sc_regsize, sc_fbsize, sc_ioregsize;
void *sc_ih;
+
+#define MAX_CLOCK_VB 270000 /* Voodoo Banshee */
+#define MAX_CLOCK_V3 300000 /* Voodoo3 */
+#define MAX_CLOCK_V45 350000 /* Voodoo4/5 (not yet) */
+ uint32_t sc_max_clock;
size_t sc_memsize;
int sc_memtype;
@@ -340,7 +345,6 @@
(PCI_PRODUCT(pa->pa_id)>=PCI_PRODUCT_3DFX_VOODOO3))
return 100;
- /* XXX: Banshee has different MAX_CLOCK, but otherwise is almost same */
if ((PCI_VENDOR(pa->pa_id)==PCI_VENDOR_3DFX) &&
(PCI_PRODUCT(pa->pa_id)>=PCI_PRODUCT_3DFX_BANSHEE))
return 100;
@@ -376,6 +380,11 @@
sc->sc_iot = pa->pa_iot;
sc->sc_pa = *pa;
+ if (PCI_PRODUCT(pa->pa_id)>=PCI_PRODUCT_3DFX_BANSHEE)
+ sc->sc_max_clock = MAX_CLOCK_VB;
+ else
+ sc->sc_max_clock = MAX_CLOCK_V3;
+
/* the framebuffer */
if (pci_mapreg_info(sc->sc_pc, sc->sc_pcitag, 0x14, PCI_MAPREG_TYPE_MEM,
&sc->sc_fb, &sc->sc_fbsize, &flags)) {
@@ -1663,7 +1672,6 @@
voodoofb_wait_idle(sc);
}
-#define MAX_CLOCK 250000 /* all Voodoo3 should support that */
#define MAX_HRES 1700 /*
* XXX in theory we can go higher but I
* couldn't get anything above 1680 x 1200
@@ -1671,7 +1679,7 @@
* disabled so people won't end up with a
* blank screen
*/
-#define MODE_IS_VALID(m) (((m)->dot_clock <= MAX_CLOCK) && \
+#define MODE_IS_VALID(m, mclk) (((m)->dot_clock <= (mclk)) && \
((m)->hdisplay < MAX_HRES))
static void
voodoofb_setup_i2c(struct voodoofb_softc *sc)
@@ -1719,7 +1727,7 @@
if ((sc->sc_edid_info.edid_preferred_mode != NULL)) {
struct videomode *m =
sc->sc_edid_info.edid_preferred_mode;
- if (MODE_IS_VALID(m)) {
+ if (MODE_IS_VALID(m, sc->sc_max_clock)) {
sc->sc_videomode = m;
} else {
aprint_error_dev(sc->sc_dev,
@@ -1740,7 +1748,8 @@
sc->sc_edid_info.edid_nmodes);
while ((sc->sc_videomode == NULL) &&
(n < sc->sc_edid_info.edid_nmodes)) {
- if (MODE_IS_VALID(&m[n])) {
+ if (MODE_IS_VALID(&m[n],
+ sc->sc_max_clock)) {
sc->sc_videomode = &m[n];
}
n++;
Home |
Main Index |
Thread Index |
Old Index