From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (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 4125345041D for ; Thu, 30 Jul 2026 18:27:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785436025; cv=none; b=WLhwiqJsD4/Z2WSYj2nEm/Z4uLpEwXcTRvDmCCNziMwLPWNeqsbTCA1BCCsY3RayK2yj1FEjO/NDOEPx9iht2PgXqkM3a82RnuA9Dk4vsTKxa8g0Win8vbgZCJ4lRoPAlohIwrKIp51sucUenYGW4/6EDRrGjnAj7/EBlbD1knA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785436025; c=relaxed/simple; bh=XS7Qs4QsnRKqZN6IJuYlNM42sb9shnXftjUIHrca3FY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Hbnz3v6FmkwYUM8omvFS1a8TeoRVQZWODBFY4XHA3/u2OSm0PTEri7dkKi20QgsIj8z6/TPUEN46kc3SPzIK9a8LbmDrN+ftRknJY1s+kpcguykDxkddDX5mCOhXNAK4+CtyKZYEW2Zduq0e5iQ+uljSuecXCH0hy3sIUt5CRQo= 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=JxY/gDqv; arc=none smtp.client-ip=209.85.210.172 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="JxY/gDqv" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-84862b0d5aeso261204b3a.2 for ; Thu, 30 Jul 2026 11:27:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=0x0f.com; s=google; t=1785436024; x=1786040824; 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=ah2rwf0hV1PovcGf/j0qIadVcdG1awQwiOMYTwXzGks=; b=JxY/gDqvdlIe2MAaRXwplWIquc0HygjwTbfBN1tMpFyvEEy3MzumT3nY9wOG07mLM7 9gQLuXeeEuHaKmufIoEWbVmyB228fiOp9V+aHAAjB+r7UuEOAmR2X35fuQ/5ZFEFF33J 7xe5u9/0stCjkmTaLHuny1ebYUciLUtHNAwbw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785436024; x=1786040824; 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=ah2rwf0hV1PovcGf/j0qIadVcdG1awQwiOMYTwXzGks=; b=LYPxyqJxg5vbPFOWHk28v8lFrCfDT3A4+awwL0AugpY5S6nH8gy87nRstdWi118sTs 8l6YvsXH14ycHVRnSOGruavPN/K+j8G0b4eKS+SEcabk4ibXErUiMM2Lm01SNuG6ptUG EeZHoLXs6XohJRzCo+ItiDinXwaigIlRgFMgMtasKD6Leu2jg0R23KTiFULLeWdQMkQV Y8rLelWvYg2yTrINoo39UvTqjonV6S1aiLeBwXVDJlYD9lnyoXK+ZjFWp8PYj1u09ik8 uoLNn9dUN8VIOjEf0+tR8EKwaRMJdq3bCqmR1HdD6DsfruIQvpFkDutShifAitBK/2xR zxoQ== X-Forwarded-Encrypted: i=1; AHgh+RqW1YD3Eqde2WS3mWpmyktImm9VM3m+8COLRowfjI34dMONcBH7g79UKWKZBqD6nje9a2/QOLmVAJT/0AE=@vger.kernel.org X-Gm-Message-State: AOJu0YwxymmjkcfEpD833MBTithny4DzO2+b95bgx6oDK2QM0Xmy8kPo ho6T0Bq08Tu+WyJDQIsrCYAmudVWkbOpUQ4xxvzCQUmcKKp1AQafAdwFCTRJbeLxluM= X-Gm-Gg: AR+sD11Rx13ik+SUSK9IBdb7IOFFxM7IRTwxVvJ3LwgrXWOxr9GLvCvUznmTWrpXMi0 3iSwFEUyFgIPpTlzXJty52u8QosJIagT7TJLfCG6ttYagH3BlgdRwoecVsHxnuuK2PZKkjM4fu+ TWJpn1pmIVSUicMqNHmpyt2xDa7q4oI2InAwu92nkA70jqzYf5iofuUrFmyGqyjsMaOkxRBh5DO hzi8mfA0Z7V6rtl+fHjD+oW3IAdBavj9hc8ljkvCBQYAN/hf9K7Vn7DozsXJQfF2n+eQwggob8g w+3E6XwyMxnZAF7UHaMrFBQU1C5fGcKVIQoc6vDwtEwNVtJlXzi/Atr8GdlD7VZV8LwzdJAquvj r44w68JS0ppsrWz/mG1eARcgbu9EqeHdUEjcha+o73PVPvEzKLSLxX1gCv9sNEYZcjgf+uKl44S EvPUyXoKM6AaU8nM1wrf1NjuFeNoDJA2qdmNCukkxt7umaUpTSWp4= X-Received: by 2002:a05:6a00:99b:b0:847:7f3c:b5f5 with SMTP id d2e1a72fcca58-84ebc1ee58dmr3508630b3a.11.1785436023495; Thu, 30 Jul 2026 11:27:03 -0700 (PDT) Received: from shiro ([2400:4162:2428:2ffe:f84d:1f36:28ac:c15e]) by smtp.googlemail.com with ESMTPSA id d2e1a72fcca58-84ea0378b18sm3428806b3a.48.2026.07.30.11.27.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Jul 2026 11:27:02 -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 2/5] fbdev: tdfxfb: Attempt to detect if the card wasn't booted Date: Fri, 31 Jul 2026 03:26:37 +0900 Message-ID: <20260730182640.2808572-3-daniel@0x0f.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260730182640.2808572-1-daniel@0x0f.com> References: <20260730182640.2808572-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: 8bit 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 the registers show 4MB of memory when unbooted. Checking 4MB != 16MB is enough decide if to reject the card or not for my machine at least. Signed-off-by: Daniel Palmer --- drivers/video/fbdev/tdfxfb.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/video/fbdev/tdfxfb.c b/drivers/video/fbdev/tdfxfb.c index fa554b09a0a6..1d8bffe1e9fd 100644 --- a/drivers/video/fbdev/tdfxfb.c +++ b/drivers/video/fbdev/tdfxfb.c @@ -410,6 +410,25 @@ 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 the register reported memory amount matches what the BIOS + * reports for now. + */ +static int tdfxfb_hw_init(struct fb_info *info, struct pci_dev *pdev) +{ + struct tdfx_par *par = info->par; + struct tdfx_bios_cfg cfg; + + if (tdfxfb_get_bios_cfg(pdev, &cfg) && + 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; @@ -1505,6 +1524,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