Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

work around patch (Re: kern info: [drm] failed to find VBIOS tables



| To: current-users%netbsd.org@localhost
| From: Makoto Fujiwara <makoto%ki.nu@localhost>
| Subject: kern info: [drm] failed to find VBIOS tables
| Date: Sat, 12 Jan 2019 09:47:57 +0900
| Message-ID: <yfmh8ee3dmq.wl-makoto%ki.nu@localhost>

> I've installed HEAD from nycdn to Panasonic Let's Note CF-SX2,
> (20190105 version, and also checked with 201901111600Z).

> In sysinst, screen gets blank, but extenal VGA works.
> After installation, also LCD does not come out, but extenal VGA
> works.

The problem still exists, and I had private mail for similar problem
on Panasonic toughbook with work around patch.

The problem exists on
  Let's Note CF-J10
  Let's Note CF-N10
  Let's Note CF-SX2
but does not exist on
  Let's Note CF-SX3

I'm using attached work around to all of above now.

(-SX3 works OK with patched kernel)

Also, the part of /var/run/dmesg.boot attached,
-- 
Makoto Fujiwara
mef%NetBSD.org@localhost
makoto%if.t.u-tokyo.ac.jp@localhost
phone: +81-3-5841-6730
mobil: +81-3-70-5073-4063

diff --git a/sys/dev/pci/pci_map.c b/sys/dev/pci/pci_map.c
index 34faf775468..3512d290567 100644
--- a/sys/dev/pci/pci_map.c
+++ b/sys/dev/pci/pci_map.c
@@ -366,7 +366,10 @@ pci_find_rom(const struct pci_attach_args *pa, bus_space_tag_t bst,
 	 * it appears the spec would allow it!
 	 */
 	if (sz < 1024)
+	 {
+printf( "%s:%4d: %s\n", __FILE__, __LINE__, __func__);
 		return 1;
+	 }
 
 	while (offset < sz && !done){
 		struct pci_rom_header	hdr;
@@ -379,7 +382,10 @@ pci_find_rom(const struct pci_attach_args *pa, bus_space_tag_t bst,
 
 		/* no warning: quite possibly ROM is simply not populated */
 		if (hdr.romh_magic != PCI_ROM_HEADER_MAGIC)
+{
+printf( "%s:%4d: %s\n", __FILE__, __LINE__, __func__);
 			return 1;
+ }
 
 		ptr = offset + hdr.romh_data_ptr;
 		
@@ -412,6 +418,14 @@ pci_find_rom(const struct pci_attach_args *pa, bus_space_tag_t bst,
 		}
 
 		imagesz = rom.rom_len * 512;
+printf( "%s:%4d: %s\n", __FILE__, __LINE__, __func__);
+ printf( "%8x  %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x\n",
+   rom.rom_vendor,       PCI_VENDOR(pa->pa_id),
+   rom.rom_product,    PCI_PRODUCT(pa->pa_id),
+   rom.rom_class,      PCI_CLASS(pa->pa_class),
+   rom.rom_subclass,   PCI_SUBCLASS(pa->pa_class),
+   rom.rom_interface,  PCI_INTERFACE(pa->pa_class),
+	 rom.rom_code_type,  type);
 
 		if ((rom.rom_vendor == PCI_VENDOR(pa->pa_id)) &&
 		    (rom.rom_product == PCI_PRODUCT(pa->pa_id)) &&
@@ -425,8 +439,14 @@ pci_find_rom(const struct pci_attach_args *pa, bus_space_tag_t bst,
 		}
 		
 		/* last image check */
+printf( "%s:%4d: %s\n", __FILE__, __LINE__, __func__);
+printf( "%8x %8x\n", rom.rom_indicator, PCI_ROM_INDICATOR_LAST);
 		if (rom.rom_indicator & PCI_ROM_INDICATOR_LAST)
+	{
+printf( "%s:%4d: %s\n", __FILE__, __LINE__, __func__);
+printf( "%8x %8x\n", rom.rom_indicator, PCI_ROM_INDICATOR_LAST);
 			return 1;
+	}
 
 		/* offset by size */
 		offset += imagesz;
diff --git a/sys/external/bsd/drm2/dist/drm/i915/intel_fifo_underrun.c b/sys/external/bsd/drm2/dist/drm/i915/intel_fifo_underrun.c
index eb6ec4c3ad8..a9d9ea55970 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/intel_fifo_underrun.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/intel_fifo_underrun.c
@@ -324,12 +324,19 @@ bool intel_set_pch_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
 	old = !intel_crtc->pch_fifo_underrun_disabled;
 	intel_crtc->pch_fifo_underrun_disabled = !enable;
 
+printf( "%s:%4d: %s --> %d\n", __FILE__, __LINE__, __func__, old);
 	if (HAS_PCH_IBX(dev_priv->dev))
+	 {
+printf( "%s:%4d: %s\n", __FILE__, __LINE__, __func__);
 		ibx_set_fifo_underrun_reporting(dev_priv->dev, pch_transcoder,
 						enable);
+	}
 	else
+	  {
+printf( "%s:%4d: %s\n", __FILE__, __LINE__, __func__);
 		cpt_set_fifo_underrun_reporting(dev_priv->dev, pch_transcoder,
 						enable, old);
+	  }
 
 	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
 	return old;
diff --git a/sys/external/bsd/drm2/linux/linux_pci.c b/sys/external/bsd/drm2/linux/linux_pci.c
index 34da7444254..9b4983b364c 100644
--- a/sys/external/bsd/drm2/linux/linux_pci.c
+++ b/sys/external/bsd/drm2/linux/linux_pci.c
@@ -453,15 +453,19 @@ pci_map_rom_md(struct pci_dev *pdev)
 	bus_space_handle_t rom_bsh;
 	int error;
 
+printf( "A %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 	if (PCI_CLASS(pdev->pd_pa.pa_class) != PCI_CLASS_DISPLAY)
 		return ENXIO;
+printf( "B %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 	if (PCI_SUBCLASS(pdev->pd_pa.pa_class) != PCI_SUBCLASS_DISPLAY_VGA)
 		return ENXIO;
+printf( "C %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 	/* XXX Check whether this is the primary VGA card?  */
 	error = bus_space_map(pdev->pd_pa.pa_memt, rom_base, rom_size,
 	    (BUS_SPACE_MAP_LINEAR | BUS_SPACE_MAP_PREFETCHABLE), &rom_bsh);
 	if (error)
 		return ENXIO;
+printf( "D %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 
 	pdev->pd_rom_bst = pdev->pd_pa.pa_memt;
 	pdev->pd_rom_bsh = rom_bsh;
@@ -480,6 +484,7 @@ pci_map_rom(struct pci_dev *pdev, size_t *sizep)
 
 	KASSERT(!ISSET(pdev->pd_kludges, NBPCI_KLUDGE_MAP_ROM));
 
+printf( "a %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 	if (pci_mapreg_map(&pdev->pd_pa, PCI_MAPREG_ROM, PCI_MAPREG_TYPE_ROM,
 		(BUS_SPACE_MAP_PREFETCHABLE | BUS_SPACE_MAP_LINEAR),
 		&pdev->pd_rom_bst, &pdev->pd_rom_bsh, NULL, &pdev->pd_rom_size)
@@ -487,6 +492,7 @@ pci_map_rom(struct pci_dev *pdev, size_t *sizep)
 		goto fail_mi;
 	pdev->pd_kludges |= NBPCI_KLUDGE_MAP_ROM;
 
+printf( "b %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 	/* XXX This type is obviously wrong in general...  */
 	if (pci_find_rom(&pdev->pd_pa, pdev->pd_rom_bst, pdev->pd_rom_bsh,
 		pdev->pd_rom_size, PCI_ROM_CODE_TYPE_X86,
@@ -496,19 +502,29 @@ pci_map_rom(struct pci_dev *pdev, size_t *sizep)
 	}
 	goto success;
 
+printf( "c %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 fail_mi:
+printf( "d %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 	if (pci_map_rom_md(pdev) != 0)
 		goto fail_md;
 
+printf( "e %s:%4d: %s\n", __FILE__, __LINE__, __func__);
+//#if 0
 	/* XXX This type is obviously wrong in general...  */
 	if (pci_find_rom(&pdev->pd_pa, pdev->pd_rom_bst, pdev->pd_rom_bsh,
 		pdev->pd_rom_size, PCI_ROM_CODE_TYPE_X86,
 		&pdev->pd_rom_found_bsh, &pdev->pd_rom_found_size)) {
-		pci_unmap_rom(pdev, NULL);
-		goto fail_md;
+//		pci_unmap_rom(pdev, NULL);
+//		goto fail_md;
 	}
+//#else
+	pdev->pd_rom_found_bsh = pdev->pd_rom_bsh;
+	pdev->pd_rom_found_size = pdev->pd_rom_size;
+//#endif
 
+printf( "f %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 success:
+printf( "g %s:%4d: %s\n", __FILE__, __LINE__, __func__);
 	KASSERT(pdev->pd_rom_found_size <= SIZE_T_MAX);
 	*sizep = pdev->pd_rom_found_size;
 	pdev->pd_rom_vaddr = bus_space_vaddr(pdev->pd_rom_bst,
@@ -516,6 +532,7 @@ success:
 	return pdev->pd_rom_vaddr;
 
 fail_md:
+printf("h\n");
 	return NULL;
 }
 
------------------
boot device: wd0
root on wd0a dumps on wd0b
root file system type: ffs
kern.module.path=/stand/amd64/8.99.33/modules
kern info: [drm] Memory usable by graphics device = 2048M
kern info: [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
kern info: [drm] Driver supports precise vblank timestamp query.
a /export/git-work/netbsd-src/sys/external/bsd/drm2/linux/linux_pci.c: 487: linux_pci_map_rom
d /export/git-work/netbsd-src/sys/external/bsd/drm2/linux/linux_pci.c: 507: linux_pci_map_rom
A /export/git-work/netbsd-src/sys/external/bsd/drm2/linux/linux_pci.c: 456: pci_map_rom_md
B /export/git-work/netbsd-src/sys/external/bsd/drm2/linux/linux_pci.c: 459: pci_map_rom_md
C /export/git-work/netbsd-src/sys/external/bsd/drm2/linux/linux_pci.c: 462: pci_map_rom_md
D /export/git-work/netbsd-src/sys/external/bsd/drm2/linux/linux_pci.c: 468: pci_map_rom_md
e /export/git-work/netbsd-src/sys/external/bsd/drm2/linux/linux_pci.c: 511: linux_pci_map_rom
/export/git-work/netbsd-src/sys/dev/pci/pci_map.c: 418: pci_find_rom
8086      8086      406      a16        3        3        0        0        0        0        0        0
/export/git-work/netbsd-src/sys/dev/pci/pci_map.c: 439: pci_find_rom
80       80
/export/git-work/netbsd-src/sys/dev/pci/pci_map.c: 444: pci_find_rom
80       80
f /export/git-work/netbsd-src/sys/external/bsd/drm2/linux/linux_pci.c: 525: linux_pci_map_rom
g /export/git-work/netbsd-src/sys/external/bsd/drm2/linux/linux_pci.c: 527: linux_pci_map_rom
i915drmkms0: interrupting at ioapic0 pin 16 (i915drmkms0)
intelfb0 at i915drmkms0
intelfb0: framebuffer at 0xffff8280f6467000, size 1600x900, depth 32, stride 6400


Home | Main Index | Thread Index | Old Index