Date: Wed, 7 Mar 2012 18:50:34 +0000 (UTC) From: John Baldwin <jhb@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r232667 - head/sys/dev/pci Message-ID: <201203071850.q27IoYTS006020@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jhb Date: Wed Mar 7 18:50:33 2012 New Revision: 232667 URL: http://svn.freebsd.org/changeset/base/232667 Log: Simplify the PCI bus dma tag code a bit. First, don't create a tag at all for platforms that only have 32-bit bus addresses. Second, remove the 'tag_valid' flag from the softc. Instead, if we don't create a tag in pci_attach_common(), just cache the value of our parent's tag so that we always have a valid tag to return. Modified: head/sys/dev/pci/pci.c head/sys/dev/pci/pci_private.h Modified: head/sys/dev/pci/pci.c ============================================================================== --- head/sys/dev/pci/pci.c Wed Mar 7 18:46:21 2012 (r232666) +++ head/sys/dev/pci/pci.c Wed Mar 7 18:50:33 2012 (r232667) @@ -77,10 +77,12 @@ __FBSDID("$FreeBSD$"); * However, in the case of PAE, DMA addresses can cross a 4GB * boundary, so as a workaround use a 2GB boundary. */ +#if (BUS_SPACE_MAXADDR > 0xFFFFFFFF) #ifdef PAE -#define PCI_DMA_BOUNDARY (1u << 31) +#define PCI_DMA_BOUNDARY 0x80000000 #else -#define PCI_DMA_BOUNDARY ((bus_size_t)((uint64_t)1 << 32)) +#define PCI_DMA_BOUNDARY 0x100000000 +#endif #endif #define PCIR_IS_BIOS(cfg, reg) \ @@ -3232,7 +3234,10 @@ int pci_attach_common(device_t dev) { struct pci_softc *sc; - int busno, domain, error; + int busno, domain; +#ifdef PCI_DMA_BOUNDARY + int error, tag_valid; +#endif sc = device_get_softc(dev); domain = pcib_get_domain(dev); @@ -3240,6 +3245,8 @@ pci_attach_common(device_t dev) if (bootverbose) device_printf(dev, "domain=%d, physical bus=%d\n", domain, busno); +#ifdef PCI_DMA_BOUNDARY + tag_valid = 0; if (device_get_devclass(device_get_parent(device_get_parent(dev))) != devclass_find("pci")) { error = bus_dma_tag_create(bus_get_dma_tag(dev), 1, @@ -3250,8 +3257,11 @@ pci_attach_common(device_t dev) device_printf(dev, "Failed to create DMA tag: %d\n", error); else - sc->sc_dma_tag_valid = 1; + tag_valid = 1; } + if (!tag_valid) +#endif + sc->sc_dma_tag = bus_get_dma_tag(dev); return (0); } @@ -4363,9 +4373,7 @@ pci_get_dma_tag(device_t bus, device_t d { struct pci_softc *sc = device_get_softc(bus); - if (sc->sc_dma_tag_valid) - return (sc->sc_dma_tag); - return (bus_generic_get_dma_tag(bus, dev)); + return (sc->sc_dma_tag); } uint32_t Modified: head/sys/dev/pci/pci_private.h ============================================================================== --- head/sys/dev/pci/pci_private.h Wed Mar 7 18:46:21 2012 (r232666) +++ head/sys/dev/pci/pci_private.h Wed Mar 7 18:50:33 2012 (r232667) @@ -40,7 +40,6 @@ DECLARE_CLASS(pci_driver); struct pci_softc { bus_dma_tag_t sc_dma_tag; - int sc_dma_tag_valid; }; extern int pci_do_power_resume;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203071850.q27IoYTS006020>