From: Daniel Palmer <daniel@0x0f.com>
To: deller@gmx.de
Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org, Daniel Palmer <daniel@0x0f.com>
Subject: [PATCH v2 2/5] fbdev: tdfxfb: Attempt to detect if the card wasn't booted
Date: Fri, 31 Jul 2026 21:19:11 +0900 [thread overview]
Message-ID: <20260731121915.3362232-3-daniel@0x0f.com> (raw)
In-Reply-To: <20260731121915.3362232-1-daniel@0x0f.com>
Until now a card had to have been booted by its video BIOS
otherwise the driver would probe, create the fb etc but there
would be no output on the display.
There doesn't seem to be a documented way work out if the BIOS
ran or not. Checking if the values in registers match what is
in the config table in the BIOS seems to be the only option.
On my 16MB Voodoo 3 3000 checking the contents of the draminit0
register versus what is in the config table seems to be enough.
Signed-off-by: Daniel Palmer <daniel@0x0f.com>
---
drivers/video/fbdev/tdfxfb.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/drivers/video/fbdev/tdfxfb.c b/drivers/video/fbdev/tdfxfb.c
index e92658274411..465c46edf6e7 100644
--- a/drivers/video/fbdev/tdfxfb.c
+++ b/drivers/video/fbdev/tdfxfb.c
@@ -414,6 +414,34 @@ static bool tdfxfb_get_bios_cfg(struct pci_dev *pdev,
return false;
}
+/*
+ * Try to work out if the card was booted or not, just checks if
+ * one of the dram config registers matches what is in the config
+ * table if there is one.
+ */
+static int tdfxfb_hw_init(struct fb_info *info, struct pci_dev *pdev)
+{
+ struct tdfx_par *par = info->par;
+ struct tdfx_bios_cfg cfg;
+ bool have_cfg = tdfxfb_get_bios_cfg(pdev, &cfg);
+
+ /*
+ * Can't tell if the card is booted or not,
+ * also cannot boot it. Card might not function.
+ */
+ if (!have_cfg)
+ return 0;
+
+ /* Card is, probably, already configured. */
+ if (tdfx_inl(par, DRAMINIT0) == le32_to_cpu(cfg.draminit0))
+ return 0;
+
+ dev_err(&pdev->dev,
+ "Card hasn't booted and is unusable\n");
+
+ return -ENODEV;
+}
+
static void do_write_regs(struct fb_info *info, struct banshee_reg *reg)
{
struct tdfx_par *par = info->par;
@@ -1509,6 +1537,9 @@ static int tdfxfb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
goto out_err_regbase;
}
+ if (tdfxfb_hw_init(info, pdev))
+ goto out_err_regbase;
+
info->fix.smem_start = pci_resource_start(pdev, 1);
info->fix.smem_len = do_lfb_size(default_par, pdev->device);
if (!info->fix.smem_len) {
--
2.53.0
next prev parent reply other threads:[~2026-07-31 12:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-31 12:19 [PATCH v2 0/5] fbdev: tdfxfb: Make "unbooted" cards work Daniel Palmer
2026-07-31 12:19 ` [PATCH v2 1/5] fbdev: tdfxfb: Add helper to read config table from BIOS Daniel Palmer
2026-07-31 12:19 ` Daniel Palmer [this message]
2026-07-31 12:19 ` [PATCH v2 3/5] fbdev: tdfxfb: Manually boot unbooted cards Daniel Palmer
2026-07-31 12:19 ` [PATCH v2 4/5] fbdev: tdfxfb: Wake the VGA core before programming the CRTC Daniel Palmer
2026-07-31 12:19 ` [PATCH v2 5/5] fbdev: tdfxfb: Program the initial video mode Daniel Palmer
2026-07-31 12:38 ` [PATCH v2 0/5] fbdev: tdfxfb: Make "unbooted" cards work Helge Deller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260731121915.3362232-3-daniel@0x0f.com \
--to=daniel@0x0f.com \
--cc=deller@gmx.de \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox