Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-7]: src/sys/external/bsd/drm2/include/linux Pull up following rev...
details: https://anonhg.NetBSD.org/src/rev/4a78cf6dcfe0
branches: netbsd-7
changeset: 799773:4a78cf6dcfe0
user: snj <snj%NetBSD.org@localhost>
date: Wed Jan 27 00:01:07 2016 +0000
description:
Pull up following revision(s) (requested by riastradh in ticket #1077):
sys/external/bsd/drm2/include/linux/pci.h: revision 1.22
Use PCI ROM MD fallback if PCI ROM BAR points to invalid ROM.
We previously applied the PCI ROM MD fallback only if the PCI ROM BAR
was altogether unpopulated. Some Radeon devices seem to have a
populated PCI ROM BAR pointing at a bogus ROM, while 0xc0000 works
fine.
Fixes at least one manifestation of PR kern/49964.
diffstat:
sys/external/bsd/drm2/include/linux/pci.h | 27 ++++++++++++++++++++++-----
1 files changed, 22 insertions(+), 5 deletions(-)
diffs (62 lines):
diff -r 6e91ec77cdd2 -r 4a78cf6dcfe0 sys/external/bsd/drm2/include/linux/pci.h
--- a/sys/external/bsd/drm2/include/linux/pci.h Tue Jan 26 23:48:48 2016 +0000
+++ b/sys/external/bsd/drm2/include/linux/pci.h Wed Jan 27 00:01:07 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pci.h,v 1.7.2.7 2015/07/30 15:46:41 snj Exp $ */
+/* $NetBSD: pci.h,v 1.7.2.8 2016/01/27 00:01:07 snj Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -496,6 +496,7 @@
pdev->pd_rom_bst = pdev->pd_pa.pa_memt;
pdev->pd_rom_bsh = rom_bsh;
pdev->pd_rom_size = rom_size;
+ pdev->pd_kludges |= NBPCI_KLUDGE_MAP_ROM;
return 0;
#else
@@ -512,9 +513,8 @@
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)
- != 0 &&
- pci_map_rom_md(pdev) != 0)
- return NULL;
+ != 0)
+ goto fail_mi;
pdev->pd_kludges |= NBPCI_KLUDGE_MAP_ROM;
/* XXX This type is obviously wrong in general... */
@@ -522,14 +522,31 @@
pdev->pd_rom_size, PCI_ROM_CODE_TYPE_X86,
&pdev->pd_rom_found_bsh, &pdev->pd_rom_found_size)) {
pci_unmap_rom(pdev, NULL);
- return NULL;
+ goto fail_mi;
+ }
+ goto success;
+
+fail_mi:
+ if (pci_map_rom_md(pdev) != 0)
+ goto fail_md;
+
+ /* 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;
}
+success:
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,
pdev->pd_rom_found_bsh);
return pdev->pd_rom_vaddr;
+
+fail_md:
+ return NULL;
}
static inline void __pci_rom_iomem *
Home |
Main Index |
Thread Index |
Old Index