From nobody Fri Oct 2 12:19:58 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 402053537FF for ; Fri, 31 Jul 2026 12:19:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500367; cv=none; b=NT7N9DPoMXuV8l+Mwv/JrZiwKxloN/7y1rcu3C2ky/WdxMtp6+8M9wFGhjydYs+dZoYgrfIGhR7dg+CCH6HYvrRQIx2JETZFk72pwGA5YAsVqbghorBEECdaouUCuwdWHClFx2u5iOf9OgHi+Vp/MqjbLl47atcvYec++6LKGJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500367; c=relaxed/simple; bh=h9qalZIArzdoQAUY+7lzxjQ2sUlIYUk+R1bFw7ABpoc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UTDd7byYIYIP5YWHFGHqc2z5/pxSUUw/fGJY+VpnkRwfesJnn/2FjJmMeqF6MS/BB83Q8ryKOBelUOteyf4T/VqwTRsqvMZXxQhLVOGSaYN4V5wZp3QiyU9f9L58DsQTE8O819o1qxZIUGk4GGlgP9zNh6qOvOyr3o8aRjAvZYY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b=QFvDM4xw; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b="QFvDM4xw" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-38e08baf860so927089a91.2 for ; Fri, 31 Jul 2026 05:19:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=0x0f.com; s=google; t=1785500366; x=1786105166; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/zgk2khl+gAzXyZ3o1YPLCn48UL/rzoP7NqltzArtxk=; b=QFvDM4xwKL00MpyJaHx5JTpn9I+1mPCU+74vI+dAiEMejgcuHVjRnkccaqxH0/XozZ LMNpKb4xWP5ZvkIp0oDepmdIXo10Pxf9e+Cbp1YxY7sGfdBVwqM269Z3Amf6s/XJ711P +vBSx7FwlDyVyxFx/IIxKpb9a2WJ5DNnVLn4Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785500366; x=1786105166; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/zgk2khl+gAzXyZ3o1YPLCn48UL/rzoP7NqltzArtxk=; b=ijHM3f6dYi8b5WjQ625iJhUUiJ8R+U/Jps18RHHphqWKl8iTGtrftJhMno4urrbHQM tfIQU6kNETa764IW2pEmxso08PxhxLmh0O9KFL+oQ8E3O959vklSMwhzKI8irSiwzCCx ktaZZaJ8lRfamuF2Bhv0yGvUPzPwaPU09aQWWtv8/ywB3CVan78FCq/tcKoOKQmzPqsr wmlv28Kby0oFnV8A9LLyNmtffPKgB7dn6V4+Gg5lexREE6/kPORGwRymq7dlw2Op853k GoVhNR1sWkbltvq86iKz5bou65R7yj5D23b1LTwZW583VHh5LnynXPVGxiagSnWNFGns 3mPw== X-Forwarded-Encrypted: i=1; AHgh+Rof1WHP2DDW7q/lhrUxQnMcX8zFKPBfFFRHZHZQfOBFzrU9VQgu3JNnnCqpA65EuoeWqCMsr3uFrs9jbow=@vger.kernel.org X-Gm-Message-State: AOJu0YyjCURN3MBNxjdVdI4+h4XQnh3LzXBE2nDrODgkY+zDq6m/wgS1 3VQphUF3Oadsha//OohHmSedELTsxZzXXQLNNNgZ4hmV3bAizkfDkKmz+FJ0pOYxZ+E= X-Gm-Gg: AR+sD133Uxw+CNCE/M/HoOxA5EBrw89TqzTa2VT8DxzBO88V95cz4/iDwNilqvbrUO9 +R2tsb3mQkmC6D8xzKOwdy1jMbIxZ4hCvN95HAuS6AIfkg+MkHvP/aOnKnSKG/pYj79tLnOf6K7 on8Pgs/DB+N/r2Ozr7+Tssu7EKaJyODVW00y9B/+eSqFJY1Z5iW92QPGqvwRQsz8Y+rvch85nry i5iLCuujuoGz0ZbSZOW1qtXjHt+hWkrisfTEZWuZ19+Yx7RvF/A02PSsnH+N8GdZyNb1M4rvlXw bnRgWxCXBi+T3xMVojEOy/bB1P0hMetz7/gikmzNOkqL7rxEIt9jVBbFBfVD16xqmlQ7BEzBtUs JVXGn44Jp5UUwpjQTPRCtbGBo+0ihK3tgGF7x7lmva6FeQi5wobb0/98c53Ns/SGv0ulR7+2PT0 xSt9eDtZpISW3MsDsgGiqtOiV5ojtMJl9Rc1Qj1f6Fv0kOcqUdYRA= X-Received: by 2002:a17:90b:582c:b0:37f:bfa2:1887 with SMTP id 98e67ed59e1d1-38fb1117e8cmr1766904a91.8.1785500365608; Fri, 31 Jul 2026 05:19:25 -0700 (PDT) Received: from shiro ([2400:4162:2428:2ffe:77cc:841c:1fc1:22d4]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-38fb2b8c5c5sm321981a91.4.2026.07.31.05.19.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 05:19:25 -0700 (PDT) From: Daniel Palmer To: deller@gmx.de Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [PATCH v2 1/5] fbdev: tdfxfb: Add helper to read config table from BIOS Date: Fri, 31 Jul 2026 21:19:10 +0900 Message-ID: <20260731121915.3362232-2-daniel@0x0f.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260731121915.3362232-1-daniel@0x0f.com> References: <20260731121915.3362232-1-daniel@0x0f.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In the case that the video BIOS didn't run because the card isn't the primary card, the BIOS doesn't support running old skool video BIOS (modern BIOS without CSM), or the machine isn't x86 it needs to be booted manually. To do this the config table in the BIOS is needed. Add a helper to get the config table in preparation for manually booting cards. Signed-off-by: Daniel Palmer --- drivers/video/fbdev/tdfxfb.c | 78 ++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/drivers/video/fbdev/tdfxfb.c b/drivers/video/fbdev/tdfxfb.c index cc6a074f3165..e92658274411 100644 --- a/drivers/video/fbdev/tdfxfb.c +++ b/drivers/video/fbdev/tdfxfb.c @@ -71,6 +71,7 @@ #include #include #include +#include #include #include #include @@ -336,6 +337,83 @@ static u32 do_calc_pll(int freq, int *freq_out) return (n << 8) | (m << 2) | k; } =20 +/* + * Convert a pllctrl register value back to a frequency in kHz. + * Formula from 3dfx documentation. + */ +static u32 tdfx_pll_to_khz(u32 pll) +{ + return (14318 * (((pll >> 8) & 0xff) + 2) / + (((pll >> 2) & 0x3f) + 2)) >> (pll & 3); +} + +/* Layout of the "OEM config" table in voodoo 3 BIOS */ +struct tdfx_bios_cfg { + __le32 pciinit0; /* 0x00 */ + __le32 miscinit0; /* 0x04 */ + __le32 miscinit1; /* 0x08 */ + __le32 draminit0; /* 0x0c */ + __le32 draminit1; /* 0x10 */ + __le32 agpinit0; /* 0x14 */ + __le32 pllctrl1; /* 0x18 - memory PLL */ + __le32 pllctrl2; /* 0x1c - graphics PLL */ + __le32 sgrammode; /* 0x20 - SGRAM/SDRAM mode register data */ +} __packed; + +#define TDFX_ROM_CFG_PTR 0x50 + +static bool tdfxfb_get_bios_cfg(struct pci_dev *pdev, + struct tdfx_bios_cfg *cfg) +{ + u16 romcfg, oemcfg; + void __iomem *rom; + size_t romsize; + u8 *image; + u32 khz; + + /* This only works for the Voodoo 3 for now */ + if (pdev->device !=3D PCI_DEVICE_ID_3DFX_VOODOO3) + return false; + + rom =3D pci_map_rom(pdev, &romsize); + if (!rom || !romsize) + return false; + + image =3D vmalloc(romsize); + if (!image) { + pci_unmap_rom(pdev, rom); + return false; + } + memcpy_fromio(image, rom, romsize); + pci_unmap_rom(pdev, rom); + + /* ROM[0x50] -> ROM config table -> OEM config table */ + if (TDFX_ROM_CFG_PTR + 2 > romsize) + goto out; + romcfg =3D image[TDFX_ROM_CFG_PTR] | image[TDFX_ROM_CFG_PTR + 1] << 8; + if (romcfg =3D=3D 0xffff || romcfg + 2 > romsize) + goto out; + oemcfg =3D image[romcfg] | image[romcfg + 1] << 8; + if (oemcfg =3D=3D 0xffff || oemcfg + sizeof(*cfg) > romsize) + goto out; + memcpy(cfg, image + oemcfg, sizeof(*cfg)); + vfree(image); + + /* + * Make sure we didn't read garbage from the BIOS and will + * end up setting a frequency that explodes someone's expensive + * card. + */ + khz =3D tdfx_pll_to_khz(le32_to_cpu(cfg->pllctrl1)); + if (khz < 40000 || khz > 250000 || !le32_to_cpu(cfg->draminit0)) + return false; + return true; + +out: + vfree(image); + return false; +} + static void do_write_regs(struct fb_info *info, struct banshee_reg *reg) { struct tdfx_par *par =3D info->par; --=20 2.53.0 From nobody Fri Oct 2 12:19:58 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5CA23410D3B for ; Fri, 31 Jul 2026 12:19:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500371; cv=none; b=FDvvGLjljtk3UbZAjlmDNeT0Bmoq8TF7r6ia1oZIwvTqSTYfQplU2c9xGdYWhrM3XMXU5GzHs4zusl05T2QY4QXcrwLyzicTz9VmSp6WcS254GbEJrdJKR57N7Ow99FxF6kFeAvxSDxO1l9thVHYv9h0ngZ+uzKt/qbzJheumo8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500371; c=relaxed/simple; bh=S5Pj/mZuEKVhW+Yo2GzUHV6Shsf5sPXE3yXbPmQc2X0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eiRiVsADxX16h3+At+S9d91sFLtMQI0R9fhV+qt07Uift7s+k5f3ZEliOgQDyZCwEBAxI9DwGb54Ba4h/LXeMRpEOcWnbLSs+kCGUqpGP6WEZvQAtWgS8D6hpmacERLl8/LkPMEc5l5LWD0mGvYAvVuZytDZ4BmojwBH1z64gZo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b=Nf5rSxhS; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b="Nf5rSxhS" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-38a0c7e841fso1158959a91.2 for ; Fri, 31 Jul 2026 05:19:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=0x0f.com; s=google; t=1785500368; x=1786105168; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QGIvsiAITywJ0rNp56g69w0ITDJR/V//o9H2LeZBivE=; b=Nf5rSxhSYuZ/gvX3cgBF5Mi8wcZrNwRdfLaO59GU3Ta0KwdkaSW7VxfRRv7vap3/YV hb2EJUih5CsdnTawvHdPIGYNXZBo1E8bn0tjm6UlJmlliVzZ/ozbBR5PWHGEu7qN9GCp hLx1P4bvWH5oXMMorW8zH5WziAifi6vf73laU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785500368; x=1786105168; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=QGIvsiAITywJ0rNp56g69w0ITDJR/V//o9H2LeZBivE=; b=Y8fmJTS1IKd+WPsODDEzXVIySTgM4nboaZTBLSRAxwRzlN/kb5tGDMfem+nM8VWexv Hv6V4DnwKOJ2z3caUcphULqwfV+D5bTZmxn9A9uIPReh9VFbv0J2BGZovb+Ugzy7hEly XEBBfsizr9P8UDGc+pSWRKNKAKLIr/qdHJrkhYyD/zLXOFbjqNGtjpBDtXBQlO5HXH4M xEluDEcj/y88tBPGN62ghuJHrGdoufgEm90MDTs1aIU5KLPq3fiE3Z9yhV8qSGpxAgXm 4MxTuTev9iPHZ8vgeJsNlmRhA7KIT1gWyGQQumS5geQtzI0xHPjDNGvFXmgSZ85zqJs3 5ZSw== X-Forwarded-Encrypted: i=1; AHgh+RqqQlQsaODIvYzCWcifJizldkYLdxSs8YMNfBAX/hAe1ZIDVQiaVTrA5KwFI5yBa/SmnsszjJ1tzPqhUzo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy965W6nlIYg1YGT+coGITPn13K1ffZtbmGUtT9ewUV1IyakTPi RAKRLjUcWcRSRJioY2SY6qxtTr5EWtKZPSQi7MgtvdMwEk+DZOkXVspuCx/af83wqRQ= X-Gm-Gg: AR+sD10fVZvNk24cnpnfyx3rxJw0v5JxUsi8RgdvJ24rijR+j3rXe8ejbCwqYsmRD9M HjqpsIHivy94fRuTQ2We22TLjNsLKXbBC9Zpfv/d1FN/opmdNdLG/AXLHeRe2THLfJB/P2iK+1h U00EqLNXl8QmbhwzdJbRxDvsTIXhzz+4ZEM/gFL/ACCrdOPTDEM9YZJ126ZyLTa+NOoji34pTQ+ hmPP5/Jb8R2TIKe84Ohxm55+5gkeINwelN+uAKnQB4ONylIfQd05Eg7QhAueoEUuXX0C2ZPTZdl eGmhTLRxwZDW73MoFW4o+eLxM8YUrJ3sypo8VI9emU2vP2E2EYCquFS3prr2j4BGZeT5OqkC1pa P+YPP2Hs0UB0CaVMr1NC4NYDBzXy2ZgUD7XG31mMMNKbzLFYCTzH3AievnjDPAns6SpXf8Nmmip nrLMEOb+ODNwqJzcNMpW+T0s0AjRd6jv1YUDa7ahi48kKr0SNkNN0= X-Received: by 2002:a17:90b:1b03:b0:387:e0db:3faa with SMTP id 98e67ed59e1d1-38fb13e34bdmr1636318a91.35.1785500367635; Fri, 31 Jul 2026 05:19:27 -0700 (PDT) Received: from shiro ([2400:4162:2428:2ffe:77cc:841c:1fc1:22d4]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-38fb2b8c5c5sm321981a91.4.2026.07.31.05.19.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 05:19:26 -0700 (PDT) From: Daniel Palmer To: deller@gmx.de Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Daniel Palmer 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 Message-ID: <20260731121915.3362232-3-daniel@0x0f.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260731121915.3362232-1-daniel@0x0f.com> References: <20260731121915.3362232-1-daniel@0x0f.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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; } =20 +/* + * 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 =3D info->par; + struct tdfx_bios_cfg cfg; + bool have_cfg =3D 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) =3D=3D 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 =3D info->par; @@ -1509,6 +1537,9 @@ static int tdfxfb_probe(struct pci_dev *pdev, const s= truct pci_device_id *id) goto out_err_regbase; } =20 + if (tdfxfb_hw_init(info, pdev)) + goto out_err_regbase; + info->fix.smem_start =3D pci_resource_start(pdev, 1); info->fix.smem_len =3D do_lfb_size(default_par, pdev->device); if (!info->fix.smem_len) { --=20 2.53.0 From nobody Fri Oct 2 12:19:58 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A226B3A545F for ; Fri, 31 Jul 2026 12:19:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500373; cv=none; b=bJBW/JnhwcBNczAG/M/PaS0wYlN8ZXYJtbVeBTfWdcO0uycWD3iSt0W36G1ZmB/1dKnrBmykD5W7oFAy0wtXLuIeN8fBNWtZD27TJXWwTrH8+eLkBtsYMmYIUgmCV8rihG0IlVlAhLscwcvja/O/lIgUOatoS7OhSh6BNg3l1IA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500373; c=relaxed/simple; bh=ffGwx378rSebpgRqlD2a87sBNQEwXVCXpUJaIpASTHU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LrRz8XArv2lmJc+sRE2W1n3mkgROKJzzdHbHDEKPAlJhRik3bPgAG9xNzS/Sxa2sEvGOTVpIz1NYA9IeEz4SJTcknYDwPKbjb70yt5M1RjUTtix+tiVyDiuLEbRbju71p+ipEVwhAN30BWt8Fy7qUe5MJilSCNdwd74nqkNK34Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b=v37reCcu; arc=none smtp.client-ip=209.85.216.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b="v37reCcu" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-3810c5d691bso793011a91.1 for ; Fri, 31 Jul 2026 05:19:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=0x0f.com; s=google; t=1785500370; x=1786105170; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=h1Ta837wxPAUZQOdiOlroOxLsJQaIrBUrobqEoKBc/U=; b=v37reCcurO3QGKWoNFQky3UyD0Ur3qG/TLcUr1tL5X+pUsQcXuw4+b6a0I3yB4SjP2 KtZAG/u5XFPgIcBLV9Am1xc1W/H2Ahp2JX/F8/9UqI1NkW0hWnBuUl5izvxuSKBj1z/y HVHMq40o+fr2dphqHbAfmSa1XDyK28BU67NXQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785500370; x=1786105170; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=h1Ta837wxPAUZQOdiOlroOxLsJQaIrBUrobqEoKBc/U=; b=EenkUYFM8OwNLGPn4vuqTfbdoDA/a66/i73L9mYTw8PKnDb7HgbtoXh+8MlPBo2Syr CP2voQgjzBPKDxXxhmF1bkwxTxSDjhCEa25fskIRb91ApPGzyZGmBTdNDcA/rmIvJS0f /guNcpSUIRD0sLAKk3Khp7gAqZC7XDoPEaFlTXYEQxkkTstogHSNdwDlpMnbdDnr4P19 5CCODrHbF0k75a9Gis+2xq57MjjFDRFlc7r4PmLqh9DRIsxVNpSqIKQGVAUsa+3fHcGg 13h49NXL4SUlmpx5gcp0MRSqJgMYX538C13AiGDHJpX8Gtq5j1GKUlVvDn1cg8A5oHgD b1HA== X-Forwarded-Encrypted: i=1; AHgh+RrDRDzreTHbhwhiLRHhTDUBhoFp0w0Xx25HKOw5ArSxRGswlk2YQPiQYw+pOH5wQo//ZPWNzVeMjl/RY8g=@vger.kernel.org X-Gm-Message-State: AOJu0Yz6FkSsyD6WA5cgzvugVWHSzFyLD5620VfsSTY/2F0yM0SefRBW c5LDP/S/yeJ4Mu9Y8opLp3dnz9nyyPmGDzf04nNu3ALqbkePJjFmV2Rn3sXzIhX0yXRhTCHyXy5 CAU6K X-Gm-Gg: AR+sD13DSgVKqsNJiCvFpnNU7xvt2vtFtD8AJQ5NqhuLfNwFkEMlJ7HZVXDR2dMb7BY T42B2/Iqrzgbm3pBLwVL0RbEIul3O7SWZPJM/i98u9ertA42xRKis7Vjrna/cdEwGCvYk3kyoIu K+zGZVuZQxD4Ar0iTSrluM4V52reCOaQryQr4OLy2dkgNnjIln/74OnfwXmqgEcLoqUdBiivgTJ wkw+9ZNO+D2YPLT45mR46mjV8onfEeG6yjiJ6N5nQqwxFL8lFT8IdpS85FPeBDKkLbBuv3LBkfb vF6UXDhZ4gQ3BtH+gjHJkFUFS2/z9zHWtFEKUC6ZQq4kq3Tp2WhUBCrz8/oPvZpoGvp8Ld956mv 90/IrQZwRDWRPubWB7HwlAc6+lpeGWkAuUgrAXeXdX1yOapIbd95yt9PJCz57dygIgL4ySn9QgV RuuEDETriV4WY9m3oywTRbdaLaNAcEsbQgfDELHue4m2hWU/AwmYU= X-Received: by 2002:a17:90b:1e41:b0:381:50ab:1594 with SMTP id 98e67ed59e1d1-38fb13ecd0bmr1608483a91.27.1785500369713; Fri, 31 Jul 2026 05:19:29 -0700 (PDT) Received: from shiro ([2400:4162:2428:2ffe:77cc:841c:1fc1:22d4]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-38fb2b8c5c5sm321981a91.4.2026.07.31.05.19.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 05:19:28 -0700 (PDT) From: Daniel Palmer To: deller@gmx.de Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [PATCH v2 3/5] fbdev: tdfxfb: Manually boot unbooted cards Date: Fri, 31 Jul 2026 21:19:12 +0900 Message-ID: <20260731121915.3362232-4-daniel@0x0f.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260731121915.3362232-1-daniel@0x0f.com> References: <20260731121915.3362232-1-daniel@0x0f.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If the card is detected as being unbooted it isn't too difficult to use the config table in its BIOS to fire it up so do it. Signed-off-by: Daniel Palmer --- drivers/video/fbdev/tdfxfb.c | 40 +++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/drivers/video/fbdev/tdfxfb.c b/drivers/video/fbdev/tdfxfb.c index 465c46edf6e7..4d92ab5b5430 100644 --- a/drivers/video/fbdev/tdfxfb.c +++ b/drivers/video/fbdev/tdfxfb.c @@ -67,6 +67,7 @@ #include #include #include +#include #include #include #include @@ -418,9 +419,13 @@ static bool tdfxfb_get_bios_cfg(struct pci_dev *pdev, * 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. + * + * If we have a BIOS config table attempt to manually boot the + * card if needed. */ static int tdfxfb_hw_init(struct fb_info *info, struct pci_dev *pdev) { + u32 mempll, gfxpll, draminit0, draminit1, miscinit1, dram_mode; struct tdfx_par *par =3D info->par; struct tdfx_bios_cfg cfg; bool have_cfg =3D tdfxfb_get_bios_cfg(pdev, &cfg); @@ -436,10 +441,39 @@ static int tdfxfb_hw_init(struct fb_info *info, struc= t pci_dev *pdev) if (tdfx_inl(par, DRAMINIT0) =3D=3D le32_to_cpu(cfg.draminit0)) return 0; =20 - dev_err(&pdev->dev, - "Card hasn't booted and is unusable\n"); + dev_info(&pdev->dev, + "Manually booting card using config table\n"); + + mempll =3D le32_to_cpu(cfg.pllctrl1); + gfxpll =3D le32_to_cpu(cfg.pllctrl2); + draminit0 =3D le32_to_cpu(cfg.draminit0); + draminit1 =3D le32_to_cpu(cfg.draminit1); + miscinit1 =3D le32_to_cpu(cfg.miscinit1); + dram_mode =3D le32_to_cpu(cfg.sgrammode); + tdfx_outl(par, PCIINIT0, le32_to_cpu(cfg.pciinit0)); + tdfx_outl(par, AGPINIT, le32_to_cpu(cfg.agpinit0)); + + /* memory clock, and the graphics clock if the card wants one */ + tdfx_outl(par, PLLCTRL1, mempll); + if (gfxpll) + tdfx_outl(par, PLLCTRL2, gfxpll); + /* flush posted writes */ + tdfx_inl(par, PLLCTRL1); + /* PLL lock */ + udelay(100); + + tdfx_outl(par, MISCINIT1, miscinit1); + tdfx_outl(par, DRAMINIT0, draminit0); + tdfx_outl(par, DRAMINIT1, draminit1); + + /* SDRAM/SGRAM wake up: load the mode register */ + tdfx_outl(par, DRAMDATA, dram_mode); + tdfx_outl(par, DRAMCOMMAND, 0x10d); + + tdfx_outl(par, LFBMEMORYCONFIG, 0x00001fff); + tdfx_outl(par, MISCINIT0, le32_to_cpu(cfg.miscinit0)); =20 - return -ENODEV; + return 0; } =20 static void do_write_regs(struct fb_info *info, struct banshee_reg *reg) --=20 2.53.0 From nobody Fri Oct 2 12:19:58 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6F073412276 for ; Fri, 31 Jul 2026 12:19:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500374; cv=none; b=MSZkh5+LdI6h00LZ0f/eSxwNo++mkx145nZIG96iGWfPiFDJ9GDwQGwl/hTJUnRDlfeGAi2I/a1fCUfi75Qu+vyLU0iBNMswb5wt7zwp8hO4YrCzdv4ub6nYWRzl+Y5KN1t3cX6xTyasgD6EYDquylI5j3m8anblfAOHvJybECg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500374; c=relaxed/simple; bh=UWUqxiHy7gFxk+c6H2K9YnLPMNAZarkqKR1p4gyNXJ4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UNqocg0E9/fUckZXzOfYU59N39pzMO8WLSTTykswBzhFDhkG9OktBex/LswJaOEdRBUA4cR+eKftup9+AQglzg2McYkjttY/A2nnu6QsQejI6apWW34CCzbUtrwIs/Fbwi4UsRH6rMI50fTKHeteyvqqYxsdJmDKuIxucvkbL7g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b=HX2gDhMm; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b="HX2gDhMm" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2cc97653887so9088475ad.1 for ; Fri, 31 Jul 2026 05:19:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=0x0f.com; s=google; t=1785500372; x=1786105172; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2f94xloHl4xvf0KqfbafdGgU1JTOpluCmeN1ZaakJsw=; b=HX2gDhMmrCcYippymw695bl3E7SesdM+QJZY1vRT1ZERsm+UvRJiYZ/BUKEZxSWVzy 0lIsY3x8ZH7S/VHglL00rGjGz86Dbl1OY1gY3TOir/W2zYTt0ZvlMh6nd1VdnbrQT6KX sbJ0+p6C3ydTAnwxKMUK7Iv52bNWW5GS0+J/o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785500372; x=1786105172; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=2f94xloHl4xvf0KqfbafdGgU1JTOpluCmeN1ZaakJsw=; b=DVbDceYJZn6zhNAsulIUOg2zLtIBvCOUVIpsa0NLnTJCH4yuBqxvquImjnvDyJzt9s +3QyVVIkLkQZMPc0F/PGqvvlEG8TIbOgzUzXEE0xdgC92etHjMxWyelX/cMVNPZjn6vy DSm4OYt08Rkt9OGpQMc8gB6788TWy2XaGNi6FQVZTo+Ag5jGGIwKWDzFLNIjYMubfzQG z0SKKg33uMXsxnCutQ0hX7+2Rt2yK4/zjiR8ksN1Pehp4YYf+FlEFV5obFT86aspDNlo VStt+JTdoK9w8W1vGuaBuAmVvhg0UEt/hrM0AK790NPk5V3mfp53R/Cxm1Th8ioinq8d 6LRQ== X-Forwarded-Encrypted: i=1; AHgh+RpijktV/qBG9c1wboxnkKVhHX9OPNatHGV9T1hytQ/mXtujey7QlCv1HTWR/JrZZx4mXfRngykq3akm2bs=@vger.kernel.org X-Gm-Message-State: AOJu0YzswjTFCNpxWNLSd00TSCevfDQn/z1GZncgUfoCJ+Km7ZEUhzWh UgIxs2IGiX7M4mQA1jITY2dws2qnguGj3JssBHWbNlyt2a0KJ9sht2y4x7evVab2LhE= X-Gm-Gg: AR+sD10Np/bMLTXmiqeIybmnf2FRhyEP7vfEtHLukSsD06Mm9X4hWErsg8RRoLjYzZ8 oDC2YLWFFTJrN6PMt+aQpXwgeW0+K7QuF7PmH82oYgHha3QdtZ+pf02FPSlbWlg1JcUixjMV2vk jCcfwUpvb/cvHb1VmBbPwIDPxxbWOoEsY/T7fGCqIZW7JwgQ0wAsm2K9c5yWlJyJCZz00SUFLiU Vw9sJG9tniqJ2iUFWmJaxQeexp+AQ2VHlI/uD+RvMXt/0wTcDpA9TUmVQ4VmX5QLvDznaRbYZtU glCJ/lNqeZvbz7UOJipqzcK5yA2SUUvXSDbQSwQXaOUWHqx3VrHk/K1K1kAmfFys5MsK3lc0lt2 j6DA7R8B5VpaMBMhYfqe05Yy0i6aEYywMvxAgk8MLz0p8qhIYjzN1gjyIfydvyz6WUs79YpaU5C DTwtJyeS8Sye3WLEi1xr+s100yEHuXuRx4bBFX3q8QzvC/Sc4sLChGpXE+GqWZkKE= X-Received: by 2002:a17:90b:57c7:b0:384:5dbc:cba5 with SMTP id 98e67ed59e1d1-38fb1378a80mr1615857a91.26.1785500371570; Fri, 31 Jul 2026 05:19:31 -0700 (PDT) Received: from shiro ([2400:4162:2428:2ffe:77cc:841c:1fc1:22d4]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-38fb2b8c5c5sm321981a91.4.2026.07.31.05.19.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 05:19:31 -0700 (PDT) From: Daniel Palmer To: deller@gmx.de Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [PATCH v2 4/5] fbdev: tdfxfb: Wake the VGA core before programming the CRTC Date: Fri, 31 Jul 2026 21:19:13 +0900 Message-ID: <20260731121915.3362232-5-daniel@0x0f.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260731121915.3362232-1-daniel@0x0f.com> References: <20260731121915.3362232-1-daniel@0x0f.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If the card was unbooted the VGA core needs to be woken up before poking at it. Signed-off-by: Daniel Palmer --- drivers/video/fbdev/tdfxfb.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/video/fbdev/tdfxfb.c b/drivers/video/fbdev/tdfxfb.c index 4d92ab5b5430..f2b658a47135 100644 --- a/drivers/video/fbdev/tdfxfb.c +++ b/drivers/video/fbdev/tdfxfb.c @@ -485,6 +485,10 @@ static void do_write_regs(struct fb_info *info, struct= banshee_reg *reg) =20 tdfx_outl(par, MISCINIT1, tdfx_inl(par, MISCINIT1) | 0x01); =20 + /* Wake the VGA core if it hasn't already been woken up */ + tdfx_outl(par, VGAINIT0, reg->vgainit0); + vga_outb(par, 0x3c3, 0x01); + crt_outb(par, 0x11, crt_inb(par, 0x11) & 0x7f); /* CRT unprotect */ =20 banshee_make_room(par, 3); --=20 2.53.0 From nobody Fri Oct 2 12:19:58 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 963C041A4E5 for ; Fri, 31 Jul 2026 12:19:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500376; cv=none; b=IH92YGEI7MtgOW/V4/HE+aTMzY9oYndHqS7jBjaeWXD68aPL58IU0OvqL9um+l7z4bzZUWVNV3y76Q12GsmXHkIZBu9jwiU2ZpsvrFOeUGv1JbX+gM91HS4XI2mDUmYHATd9uobCbhHQ7bMdQvbJhJqIIzoTD4Rs2ns4W+9mO/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785500376; c=relaxed/simple; bh=6MXkkFX809Dcdreee2nhHD69edsUNx0ehY2U76SPV98=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E071ZBgLpx+FiBXK5kUSjKy2DjOvs23JQpl42Wiw/HLeeBP77aNYsIg3XGf7mql7a95ehtE4mNQUVJDjzlQlLa04mZ+a4BV/Q/prikgtCrIiq47NpiuJNCkrW/3RefsClSZqNtcI4BPncCm14LMVqvbfaekgTEEcgIR2UmhWJrc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b=YhJRbizw; arc=none smtp.client-ip=209.85.216.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b="YhJRbizw" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-381c51fde6bso973491a91.2 for ; Fri, 31 Jul 2026 05:19:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=0x0f.com; s=google; t=1785500374; x=1786105174; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=EcvBzuwsOWXd7sSY+ibZHDp7um7F6zB3s/KkWEJX80M=; b=YhJRbizwiHSFfbN6vFVIKKWd4rtHRg6LceLUm6TwB1FKUngzmey6ER67bE/ozwFtww 01ETQsXO0KBXwQ/pN2jqWeux9FZU3thLPzquhbNCFVRFdAIHmU1Ci8hrdJB33El9BJcD /R+/ssoPm+VvdkXJFQNqozbIz3qAwlgcrVUS0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785500374; x=1786105174; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=EcvBzuwsOWXd7sSY+ibZHDp7um7F6zB3s/KkWEJX80M=; b=OMxiAblrIiBv81dayt1cJd6kLfCJOdyPcLIDiTZsoIHEoOXB9W2ofBM9gXc9Cc8m5F pJaDocoKLYv1F+AZ2ye4G414tHKyw0/PIPvCL7WqhUcFXYDzeNuRCMWeUyI2wrauoExX TraO0+7dw5lmzdEObeN0Ey4odR+XrTAsWF4Eo3T/3UAtUDNFCHg/t/MbiQiB+WZD2maw qvvU/k1m2HuVlyr4TY25Af6Em9GMPEWknBy08I5iNBCe0X/wrQV9nKfvaVpih0p8ZHQ7 VMByxed51I/SftK6N50/w2QdAn/1DOyE3pmOS7X4P9iBLQzWsOwnbGR1EOiXdeOgCyLi tq9A== X-Forwarded-Encrypted: i=1; AHgh+RorInIDvIjyy6AWWi7ogSFxRGfIFMr1n6gy/lbdMv2VOUAxl1LiuX85hDsMn1Yp4SscDy7ZU1YvMFNLNdc=@vger.kernel.org X-Gm-Message-State: AOJu0YzY47TaWeVFEqMjIlvpTReLQLfhZUgw9m+yHge2suOo/JkcSgHJ 7I3w51VWV4UTz/IwcRKMK757ivLUCJOX3LgkVe939AwcM22zFxNY0jJooz7kgJ+GWG0= X-Gm-Gg: AR+sD13iJ5KWNu2pVepWnZ4kVH93T0CvgXf/5+U+DvIdJ16WWn/54sigCynRLapEGB9 BxMM52w7GgCcRC1qAsDGymVO5KKrFr5Z9BjPi2ntiq0v1mP+EDBVKs559edjf5FQB4M5CtQSsxD 6TolGu6crYclMgSJiM9zjPW4kLxexyjaXi6cfwmdSZ9RSUX/S3hV6VOaQIMT7wyO3lVszuybxsN X2AGLARKKLZj/Wc/pxhvktj6tkyHCMW+99oAW2RzBN/9gHoj6gVYaqKOmGhwY6j4E8gx9Az0vR0 oWdy5X6AXK3LSDGkfa+cpFR40ZE8BskdJIFvvo6Q8dirrn5rSCmt+PxXhU0doKWldEpPvqlz//7 dFzEt5W/5LT6sotuUh2mHqabjcQlOUjeqwlNoXi2UEL+A68cDCB5Y+DMzO1N+rQs2Hls9eQUmca qa5tEMRU6QTv+9o5IDtwquA6B3O38Dais4dX6ootCW2OjcpyZomPZMgetkmJ/Fzw== X-Received: by 2002:a17:90b:3bc8:b0:382:5c31:1f8a with SMTP id 98e67ed59e1d1-38fb13bfd7bmr1819215a91.27.1785500373635; Fri, 31 Jul 2026 05:19:33 -0700 (PDT) Received: from shiro ([2400:4162:2428:2ffe:77cc:841c:1fc1:22d4]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-38fb2b8c5c5sm321981a91.4.2026.07.31.05.19.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 05:19:32 -0700 (PDT) From: Daniel Palmer To: deller@gmx.de Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [PATCH v2 5/5] fbdev: tdfxfb: Program the initial video mode Date: Fri, 31 Jul 2026 21:19:14 +0900 Message-ID: <20260731121915.3362232-6-daniel@0x0f.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260731121915.3362232-1-daniel@0x0f.com> References: <20260731121915.3362232-1-daniel@0x0f.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If the card does not get bound to by fbcon set_par() never happens and the initial video mode is not setup and the display detects no signal. Program the video mode and also clear the framebuffer memory so random garbage isn't displayed. Signed-off-by: Daniel Palmer --- drivers/video/fbdev/tdfxfb.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/video/fbdev/tdfxfb.c b/drivers/video/fbdev/tdfxfb.c index f2b658a47135..cb1c2e9f37db 100644 --- a/drivers/video/fbdev/tdfxfb.c +++ b/drivers/video/fbdev/tdfxfb.c @@ -1686,6 +1686,14 @@ static int tdfxfb_probe(struct pci_dev *pdev, const = struct pci_device_id *id) goto out_err_iobase; } =20 + /* + * Program a video mode and clear the framebuffer now, this + * ensures the display comes up even if fbcon doesn't bind + * when the framebuffer is registered. + */ + tdfxfb_set_par(info); + memset_io(info->screen_base, 0, info->fix.smem_len); + if (register_framebuffer(info) < 0) { printk(KERN_ERR "tdfxfb: can't register framebuffer\n"); fb_dealloc_cmap(&info->cmap); --=20 2.53.0