Module Name: src Committed By: msaitoh Date: Fri Mar 1 09:26:00 UTC 2019
Modified Files: src/sys/arch/arm/imx: imx6_pcie.c src/sys/arch/arm/xscale: i80312.c i80312_pci.c src/sys/arch/evbarm/iq80310: iq80310_machdep.c iq80310_pci.c src/sys/arch/macppc/pci: pci_machdep.c src/sys/arch/sparc/sparc: pci_fixup.c src/sys/arch/sparc64/sparc64: rbus_machdep.c src/sys/arch/x86/pci: pci_bus_fixup.c pci_ranges.c src/sys/dev/acpi: acpi_pci.c src/sys/dev/cardbus: rbus_ppb.c src/sys/dev/pci: btvmeii.c pccbb.c pci_subr.c pciconf.c pcireg.h ppb.c ppbreg.h Log Message: - Almost all ppbreg.h's definitions are also in pcireg.h. Remove duplicated definitions from ppbreg.h and move some definitions from ppbreg.h to pcireg.h. - Change fast back-to-back "capable" to "enable" in pci_subr.c. - Print Primary Discard Timer, Secondary Discard Timer, Discard Timer Status and Discard Timer SERR# Enable bit in pci_subr.c. - PCI_BRIDGE_PREFETCHBASE32_REG and PCI_BRIDGE_PREFETCHLIMIT32_REG are "upper" 32bit registers, rename to *UP32_REG to avoid confusion. - Use macro. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/imx/imx6_pcie.c cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/xscale/i80312.c cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/xscale/i80312_pci.c cvs rdiff -u -r1.89 -r1.90 src/sys/arch/evbarm/iq80310/iq80310_machdep.c cvs rdiff -u -r1.15 -r1.16 src/sys/arch/evbarm/iq80310/iq80310_pci.c cvs rdiff -u -r1.41 -r1.42 src/sys/arch/macppc/pci/pci_machdep.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/sparc/sparc/pci_fixup.c cvs rdiff -u -r1.16 -r1.17 src/sys/arch/sparc64/sparc64/rbus_machdep.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/x86/pci/pci_bus_fixup.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/x86/pci/pci_ranges.c cvs rdiff -u -r1.25 -r1.26 src/sys/dev/acpi/acpi_pci.c cvs rdiff -u -r1.45 -r1.46 src/sys/dev/cardbus/rbus_ppb.c cvs rdiff -u -r1.22 -r1.23 src/sys/dev/pci/btvmeii.c cvs rdiff -u -r1.213 -r1.214 src/sys/dev/pci/pccbb.c cvs rdiff -u -r1.211 -r1.212 src/sys/dev/pci/pci_subr.c cvs rdiff -u -r1.40 -r1.41 src/sys/dev/pci/pciconf.c cvs rdiff -u -r1.146 -r1.147 src/sys/dev/pci/pcireg.h cvs rdiff -u -r1.67 -r1.68 src/sys/dev/pci/ppb.c cvs rdiff -u -r1.9 -r1.10 src/sys/dev/pci/ppbreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/imx/imx6_pcie.c diff -u src/sys/arch/arm/imx/imx6_pcie.c:1.7 src/sys/arch/arm/imx/imx6_pcie.c:1.8 --- src/sys/arch/arm/imx/imx6_pcie.c:1.7 Sun Dec 16 16:45:11 2018 +++ src/sys/arch/arm/imx/imx6_pcie.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: imx6_pcie.c,v 1.7 2018/12/16 16:45:11 skrll Exp $ */ +/* $NetBSD: imx6_pcie.c,v 1.8 2019/03/01 09:25:59 msaitoh Exp $ */ /* * Copyright (c) 2016 Genetec Corporation. All rights reserved. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: imx6_pcie.c,v 1.7 2018/12/16 16:45:11 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: imx6_pcie.c,v 1.8 2019/03/01 09:25:59 msaitoh Exp $"); #include "opt_pci.h" @@ -688,12 +688,11 @@ imx6pcie_setup(struct imx6pcie_softc * c /* Bus number */ v = PCIE_READ(sc, PCI_BRIDGE_BUS_REG); - v &= ~(PCI_BRIDGE_BUS_EACH_MASK << PCI_BRIDGE_BUS_SUBORDINATE_SHIFT | - PCI_BRIDGE_BUS_EACH_MASK << PCI_BRIDGE_BUS_SECONDARY_SHIFT | - PCI_BRIDGE_BUS_EACH_MASK << PCI_BRIDGE_BUS_PRIMARY_SHIFT); - v |= PCI_BRIDGE_BUS_SUBORDINATE(1); - v |= PCI_BRIDGE_BUS_SECONDARY(1); - v |= PCI_BRIDGE_BUS_PRIMARY(0); + v &= ~(PCI_BRIDGE_BUS_SUBORDINATE | PCI_BRIDGE_BUS_SECONDARY | + PCI_BRIDGE_BUS_PRIMARY); + v |= PCI_BRIDGE_BUS_NUM_SUBORDINATE(1); + v |= PCI_BRIDGE_BUS_NUM_SECONDARY(1); + v |= PCI_BRIDGE_BUS_NUM_PRIMARY(0); PCIE_WRITE(sc, PCI_BRIDGE_BUS_REG, v); /* Command register */ Index: src/sys/arch/arm/xscale/i80312.c diff -u src/sys/arch/arm/xscale/i80312.c:1.23 src/sys/arch/arm/xscale/i80312.c:1.24 --- src/sys/arch/arm/xscale/i80312.c:1.23 Sun Oct 14 14:20:57 2012 +++ src/sys/arch/arm/xscale/i80312.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: i80312.c,v 1.23 2012/10/14 14:20:57 msaitoh Exp $ */ +/* $NetBSD: i80312.c,v 1.24 2019/03/01 09:25:59 msaitoh Exp $ */ /* * Copyright (c) 2001, 2002 Wasabi Systems, Inc. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i80312.c,v 1.23 2012/10/14 14:20:57 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i80312.c,v 1.24 2019/03/01 09:25:59 msaitoh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -268,10 +268,10 @@ i80312_attach(struct i80312_softc *sc) */ if (sc->sc_is_host) { bus_space_write_4(sc->sc_st, sc->sc_ppb_sh, - PPB_REG_BUSINFO, - (0 << PCI_BRIDGE_BUS_PRIMARY_SHIFT) | - (1 << PCI_BRIDGE_BUS_SECONDARY_SHIFT) | - (1 << PCI_BRIDGE_BUS_SUBORDINATE_SHIFT)); + PCI_BRIDGE_BUS_REG, + __SHIFTIN(0, PCI_BRIDGE_BUS_PRIMARY) | + __SHIFTIN(1, PCI_BRIDGE_BUS_SECONDARY) | + __SHIFTIN(1, PCI_BRIDGE_BUS_SUBORDINATE)); } /* Initialize the bus space tags. */ @@ -306,13 +306,13 @@ i80312_attach(struct i80312_softc *sc) * is the only bus on which we can have a private device * space. */ - preg = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PPB_REG_BUSINFO); + preg = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PCI_BRIDGE_BUS_REG); pba.pba_iot = &sc->sc_pci_iot; pba.pba_memt = &sc->sc_pci_memt; pba.pba_dmat = &sc->sc_pci_dmat; pba.pba_dmat64 = NULL; pba.pba_pc = &sc->sc_pci_chipset; - pba.pba_bus = PPB_BUSINFO_SECONDARY(preg); + pba.pba_bus = PCI_BRIDGE_BUS_NUM_SECONDARY(preg); pba.pba_bridgetag = NULL; pba.pba_intrswiz = 3; pba.pba_intrtag = 0; Index: src/sys/arch/arm/xscale/i80312_pci.c diff -u src/sys/arch/arm/xscale/i80312_pci.c:1.16 src/sys/arch/arm/xscale/i80312_pci.c:1.17 --- src/sys/arch/arm/xscale/i80312_pci.c:1.16 Fri Oct 2 05:22:50 2015 +++ src/sys/arch/arm/xscale/i80312_pci.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: i80312_pci.c,v 1.16 2015/10/02 05:22:50 msaitoh Exp $ */ +/* $NetBSD: i80312_pci.c,v 1.17 2019/03/01 09:25:59 msaitoh Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i80312_pci.c,v 1.16 2015/10/02 05:22:50 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i80312_pci.c,v 1.17 2019/03/01 09:25:59 msaitoh Exp $"); #include "opt_pci.h" #include "pci.h" @@ -106,9 +106,9 @@ i80312_pci_init(pci_chipset_tag_t pc, vo * the Secondary bus. */ - binfo = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PPB_REG_BUSINFO); - /* pbus = PPB_BUSINFO_PRIMARY(binfo); */ - sbus = PPB_BUSINFO_SECONDARY(binfo); + binfo = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PCI_BRIDGE_BUS_REG); + /* pbus = PCI_BRIDGE_BUS_NUM_PRIMARY(binfo); */ + sbus = PCI_BRIDGE_BUS_NUM_SECONDARY(binfo); ioext = extent_create("pciio", sc->sc_sioout_base, sc->sc_sioout_base + sc->sc_sioout_size - 1, @@ -185,9 +185,9 @@ i80312_pci_conf_setup(struct i80312_soft i80312_pci_decompose_tag(sc, tag, &ps->ps_b, &ps->ps_d, &ps->ps_f); - binfo = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PPB_REG_BUSINFO); - pbus = PPB_BUSINFO_PRIMARY(binfo); - sbus = PPB_BUSINFO_SECONDARY(binfo); + binfo = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PCI_BRIDGE_BUS_REG); + pbus = PCI_BRIDGE_BUS_NUM_PRIMARY(binfo); + sbus = PCI_BRIDGE_BUS_NUM_SECONDARY(binfo); /* * If the bus # is the Primary bus #, use the Primary Index: src/sys/arch/evbarm/iq80310/iq80310_machdep.c diff -u src/sys/arch/evbarm/iq80310/iq80310_machdep.c:1.89 src/sys/arch/evbarm/iq80310/iq80310_machdep.c:1.90 --- src/sys/arch/evbarm/iq80310/iq80310_machdep.c:1.89 Sun Oct 28 14:30:31 2018 +++ src/sys/arch/evbarm/iq80310/iq80310_machdep.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: iq80310_machdep.c,v 1.89 2018/10/28 14:30:31 skrll Exp $ */ +/* $NetBSD: iq80310_machdep.c,v 1.90 2019/03/01 09:25:59 msaitoh Exp $ */ /* * Copyright (c) 2001, 2002, 2003 Wasabi Systems, Inc. @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: iq80310_machdep.c,v 1.89 2018/10/28 14:30:31 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: iq80310_machdep.c,v 1.90 2019/03/01 09:25:59 msaitoh Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -376,13 +376,13 @@ initarm(void *arg) printf("Resetting secondary PCI bus...\n"); #endif reg = bus_space_read_4(&obio_bs_tag, - I80312_PMMR_BASE + I80312_PPB_BASE, PPB_REG_BRIDGECONTROL); + I80312_PMMR_BASE + I80312_PPB_BASE, PCI_BRIDGE_CONTROL_REG); bus_space_write_4(&obio_bs_tag, - I80312_PMMR_BASE + I80312_PPB_BASE, PPB_REG_BRIDGECONTROL, - reg | PPB_BC_SECONDARY_RESET); + I80312_PMMR_BASE + I80312_PPB_BASE, PCI_BRIDGE_CONTROL_REG, + reg | PCI_BRIDGE_CONTROL_SECBR); delay(10 * 1000); /* 10ms enough? */ bus_space_write_4(&obio_bs_tag, - I80312_PMMR_BASE + I80312_PPB_BASE, PPB_REG_BRIDGECONTROL, + I80312_PMMR_BASE + I80312_PPB_BASE, PCI_BRIDGE_CONTROL_REG, reg); } Index: src/sys/arch/evbarm/iq80310/iq80310_pci.c diff -u src/sys/arch/evbarm/iq80310/iq80310_pci.c:1.15 src/sys/arch/evbarm/iq80310/iq80310_pci.c:1.16 --- src/sys/arch/evbarm/iq80310/iq80310_pci.c:1.15 Fri Nov 16 15:06:23 2018 +++ src/sys/arch/evbarm/iq80310/iq80310_pci.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: iq80310_pci.c,v 1.15 2018/11/16 15:06:23 jmcneill Exp $ */ +/* $NetBSD: iq80310_pci.c,v 1.16 2019/03/01 09:25:59 msaitoh Exp $ */ /* * Copyright (c) 2001, 2002 Wasabi Systems, Inc. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: iq80310_pci.c,v 1.15 2018/11/16 15:06:23 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: iq80310_pci.c,v 1.16 2019/03/01 09:25:59 msaitoh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -95,8 +95,8 @@ iq80310_pci_intr_map(const struct pci_at * the i80312. */ - reg = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PPB_REG_BUSINFO); - sbus = PPB_BUSINFO_SECONDARY(reg); + reg = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PCI_BRIDGE_BUS_REG); + sbus = PCI_BRIDGE_BUS_NUM_SECONDARY(reg); if (pa->pa_bus != sbus) { printf("iq80310_pci_intr_map: %d/%d/%d not on Secondary bus\n", @@ -149,9 +149,9 @@ iq80310_pci_intr_map(const struct pci_at * and can determine if we're looking at that device. */ - reg = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PPB_REG_BUSINFO); - pbus = PPB_BUSINFO_PRIMARY(reg); - sbus = PPB_BUSINFO_SECONDARY(reg); + reg = bus_space_read_4(sc->sc_st, sc->sc_ppb_sh, PCI_BRIDGE_BUS_REG); + pbus = PCI_BRIDGE_BUS_NUM_PRIMARY(reg); + sbus = PCI_BRIDGE_BUS_NUM_SECONDARY(reg); /* * XXX We don't know how to map interrupts on the Primary @@ -192,8 +192,8 @@ iq80310_pci_intr_map(const struct pci_at } /* Now read the PPB's secondary bus number. */ - reg = pci_conf_read(pa->pa_pc, tag, PPB_REG_BUSINFO); - sbus = PPB_BUSINFO_SECONDARY(reg); + reg = pci_conf_read(pa->pa_pc, tag, PCI_BRIDGE_BUS_REG); + sbus = PCI_BRIDGE_BUS_NUM_SECONDARY(reg); if (pa->pa_bus == sbus && pa->pa_device == 0 && pa->pa_function == 0) { Index: src/sys/arch/macppc/pci/pci_machdep.c diff -u src/sys/arch/macppc/pci/pci_machdep.c:1.41 src/sys/arch/macppc/pci/pci_machdep.c:1.42 --- src/sys/arch/macppc/pci/pci_machdep.c:1.41 Wed Oct 19 00:08:41 2016 +++ src/sys/arch/macppc/pci/pci_machdep.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pci_machdep.c,v 1.41 2016/10/19 00:08:41 nonaka Exp $ */ +/* $NetBSD: pci_machdep.c,v 1.42 2019/03/01 09:25:59 msaitoh Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. @@ -43,7 +43,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.41 2016/10/19 00:08:41 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.42 2019/03/01 09:25:59 msaitoh Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -318,7 +318,7 @@ fixpci(int parent, pci_chipset_tag_t pc) * we found a CardBus bridge. Check if the bus number * is sane */ - bi = pci_conf_read(pc, tag, PPB_REG_BUSINFO); + bi = pci_conf_read(pc, tag, PCI_BRIDGE_BUS_REG); busid = bi & 0xff; if (busid == 0) { fix_cardbus_bridge(node, pc, tag); @@ -360,11 +360,11 @@ fix_cardbus_bridge(int node, pci_chipset path[len] = 0; aprint_verbose("\n%s: fixing bus number to %d", path, bus_number); pci_decompose_tag(pc, tag, &bus, &dev, &fn); - bi = pci_conf_read(pc, tag, PPB_REG_BUSINFO); + bi = pci_conf_read(pc, tag, PCI_BRIDGE_BUS_REG); bi &= 0xff000000; /* XXX subordinate is always 32 here */ bi |= (bus & 0xff) | (bus_number << 8) | 0x200000; - pci_conf_write(pc, tag, PPB_REG_BUSINFO, bi); + pci_conf_write(pc, tag, PCI_BRIDGE_BUS_REG, bi); } } Index: src/sys/arch/sparc/sparc/pci_fixup.c diff -u src/sys/arch/sparc/sparc/pci_fixup.c:1.1 src/sys/arch/sparc/sparc/pci_fixup.c:1.2 --- src/sys/arch/sparc/sparc/pci_fixup.c:1.1 Tue Apr 16 06:57:06 2013 +++ src/sys/arch/sparc/sparc/pci_fixup.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pci_fixup.c,v 1.1 2013/04/16 06:57:06 jdc Exp $ */ +/* $NetBSD: pci_fixup.c,v 1.2 2019/03/01 09:25:59 msaitoh Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -479,10 +479,10 @@ mspcic_pci_fixup(int depth, pcitag_t sta /* 64-bit prefetchable range (if supported) - set it to 0 */ val = pci_conf_read(NULL, starttag, PCI_BRIDGE_PREFETCHMEM_REG); if (val & 0x01) { - pci_conf_write(NULL, starttag, PCI_BRIDGE_PREFETCHBASE32_REG, - (pcireg_t) ~0); - pci_conf_write(NULL, starttag, PCI_BRIDGE_PREFETCHLIMIT32_REG, - (pcireg_t) 0); + pci_conf_write(NULL, starttag, + PCI_BRIDGE_PREFETCHBASEUP32_REG, (pcireg_t) ~0); + pci_conf_write(NULL, starttag, + PCI_BRIDGE_PREFETCHLIMITUP32_REG, (pcireg_t) 0); } #ifdef SPARC_PCI_FIXUP_DEBUG Index: src/sys/arch/sparc64/sparc64/rbus_machdep.c diff -u src/sys/arch/sparc64/sparc64/rbus_machdep.c:1.16 src/sys/arch/sparc64/sparc64/rbus_machdep.c:1.17 --- src/sys/arch/sparc64/sparc64/rbus_machdep.c:1.16 Fri Jul 1 18:49:24 2011 +++ src/sys/arch/sparc64/sparc64/rbus_machdep.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: rbus_machdep.c,v 1.16 2011/07/01 18:49:24 dyoung Exp $ */ +/* $NetBSD: rbus_machdep.c,v 1.17 2019/03/01 09:25:59 msaitoh Exp $ */ /* * Copyright (c) 2003 Takeshi Nakayama. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rbus_machdep.c,v 1.16 2011/07/01 18:49:24 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rbus_machdep.c,v 1.17 2019/03/01 09:25:59 msaitoh Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -157,10 +157,10 @@ pccbb_attach_hook(device_t parent, devic if (bus >= 256) printf("pccbb_attach_hook: 256 >= busses exist\n"); else { - reg = pci_conf_read(pc, pa->pa_tag, PPB_REG_BUSINFO); + reg = pci_conf_read(pc, pa->pa_tag, PCI_BRIDGE_BUS_REG); reg &= 0xff000000; reg |= pa->pa_bus | (bus << 8) | (bus << 16); - pci_conf_write(pc, pa->pa_tag, PPB_REG_BUSINFO, reg); + pci_conf_write(pc, pa->pa_tag, PCI_BRIDGE_BUS_REG, reg); #ifdef DIAGNOSTIC if ((*pc->spc_busnode)[bus].node != 0) printf("pccbb_attach_hook: override bus %d" Index: src/sys/arch/x86/pci/pci_bus_fixup.c diff -u src/sys/arch/x86/pci/pci_bus_fixup.c:1.2 src/sys/arch/x86/pci/pci_bus_fixup.c:1.3 --- src/sys/arch/x86/pci/pci_bus_fixup.c:1.2 Fri Jul 1 18:22:08 2011 +++ src/sys/arch/x86/pci/pci_bus_fixup.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pci_bus_fixup.c,v 1.2 2011/07/01 18:22:08 dyoung Exp $ */ +/* $NetBSD: pci_bus_fixup.c,v 1.3 2019/03/01 09:25:59 msaitoh Exp $ */ /* * Copyright (c) 1999, by UCHIYAMA Yasushi @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pci_bus_fixup.c,v 1.2 2011/07/01 18:22:08 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci_bus_fixup.c,v 1.3 2019/03/01 09:25:59 msaitoh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -119,10 +119,12 @@ pci_bus_fixup(pci_chipset_tag_t pc, int /* Assign the bridge's secondary bus #. */ bus_max++; - reg = pci_conf_read(pc, tag, PPB_REG_BUSINFO); + reg = pci_conf_read(pc, tag, + PCI_BRIDGE_BUS_REG); reg &= 0xff000000; reg |= bus | (bus_max << 8) | (0xff << 16); - pci_conf_write(pc, tag, PPB_REG_BUSINFO, reg); + pci_conf_write(pc, tag, PCI_BRIDGE_BUS_REG, + reg); /* Scan subordinate bus. */ bus_sub = pci_bus_fixup(pc, bus_max); @@ -130,7 +132,8 @@ pci_bus_fixup(pci_chipset_tag_t pc, int /* Configure the bridge. */ reg &= 0xff000000; reg |= bus | (bus_max << 8) | (bus_sub << 16); - pci_conf_write(pc, tag, PPB_REG_BUSINFO, reg); + pci_conf_write(pc, tag, PCI_BRIDGE_BUS_REG, + reg); /* record relationship */ pci_bus_parent[bus_max]=bus; @@ -157,8 +160,8 @@ pci_bridge_reset(pci_chipset_tag_t pc, p { pcireg_t reg; - reg = pci_conf_read(pc, tag, PPB_REG_BUSINFO); + reg = pci_conf_read(pc, tag, PCI_BRIDGE_BUS_REG); reg &= 0xff000000; reg |= 0x00ffffff; /* max bus # */ - pci_conf_write(pc, tag, PPB_REG_BUSINFO, reg); + pci_conf_write(pc, tag, PCI_BRIDGE_BUS_REG, reg); } Index: src/sys/arch/x86/pci/pci_ranges.c diff -u src/sys/arch/x86/pci/pci_ranges.c:1.7 src/sys/arch/x86/pci/pci_ranges.c:1.8 --- src/sys/arch/x86/pci/pci_ranges.c:1.7 Thu Jun 1 02:45:08 2017 +++ src/sys/arch/x86/pci/pci_ranges.c Fri Mar 1 09:25:59 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pci_ranges.c,v 1.7 2017/06/01 02:45:08 chs Exp $ */ +/* $NetBSD: pci_ranges.c,v 1.8 2019/03/01 09:25:59 msaitoh Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pci_ranges.c,v 1.7 2017/06/01 02:45:08 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci_ranges.c,v 1.8 2019/03/01 09:25:59 msaitoh Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -173,15 +173,14 @@ io_range_extend_by_vga_enable(struct ran , .r_mask = PCI_COMMAND_IO_ENABLE }, { .r_ofs = PCI_BRIDGE_CONTROL_REG - , .r_mask = - PCI_BRIDGE_CONTROL_VGA << PCI_BRIDGE_CONTROL_SHIFT + , .r_mask = PCI_BRIDGE_CONTROL_VGA; }} }, pal[2]; aprint_debug("%s: %d.%d.%d enter\n", __func__, bus, dev, fun); if ((csr & PCI_COMMAND_IO_ENABLE) == 0 || - (bcr & (PCI_BRIDGE_CONTROL_VGA << PCI_BRIDGE_CONTROL_SHIFT)) == 0) { + (bcr & PCI_BRIDGE_CONTROL_VGA) == 0) { aprint_debug("%s: %d.%d.%d I/O or VGA disabled\n", __func__, bus, dev, fun); return true; @@ -228,10 +227,8 @@ io_range_extend_by_win(struct range_infe r[0].r_ofs = ofs; r[0].r_val = io; - baser = ((io >> PCI_BRIDGE_STATIO_IOBASE_SHIFT) & - PCI_BRIDGE_STATIO_IOBASE_MASK) >> 4; - limitr = ((io >> PCI_BRIDGE_STATIO_IOLIMIT_SHIFT) & - PCI_BRIDGE_STATIO_IOLIMIT_MASK) >> 4; + baser = __SHIFTOUT(io, PCI_BRIDGE_STATIO_IOBASE) >> 4; + limitr = __SHIFTOUT(io, PCI_BRIDGE_STATIO_IOLIMIT) >> 4; if (PCI_BRIDGE_IO_32BITS(io)) { pcireg_t baseh, limith; @@ -240,10 +237,8 @@ io_range_extend_by_win(struct range_infe r[1].r_ofs = ofshigh; r[1].r_val = iohigh; - baseh = (iohigh >> PCI_BRIDGE_IOHIGH_BASE_SHIFT) - & PCI_BRIDGE_IOHIGH_BASE_MASK; - limith = (iohigh >> PCI_BRIDGE_IOHIGH_LIMIT_SHIFT) - & PCI_BRIDGE_IOHIGH_LIMIT_MASK; + baseh = __SHIFTOUT(iohigh, PCI_BRIDGE_IOHIGH_BASE); + limith = __SHIFTOUT(iohigh, PCI_BRIDGE_IOHIGH_LIMIT); baser |= baseh << 4; limitr |= limith << 4; @@ -447,15 +442,14 @@ mmio_range_extend_by_vga_enable(struct r , .r_mask = PCI_COMMAND_MEM_ENABLE }, { .r_ofs = PCI_BRIDGE_CONTROL_REG - , .r_mask = - PCI_BRIDGE_CONTROL_VGA << PCI_BRIDGE_CONTROL_SHIFT + , .r_mask = PCI_BRIDGE_CONTROL_VGA }} }, pal; aprint_debug("%s: %d.%d.%d enter\n", __func__, bus, dev, fun); if ((csr & PCI_COMMAND_MEM_ENABLE) == 0 || - (bcr & (PCI_BRIDGE_CONTROL_VGA << PCI_BRIDGE_CONTROL_SHIFT)) == 0) { + (bcr & PCI_BRIDGE_CONTROL_VGA) == 0) { aprint_debug("%s: %d.%d.%d memory or VGA disabled\n", __func__, bus, dev, fun); return true; Index: src/sys/dev/acpi/acpi_pci.c diff -u src/sys/dev/acpi/acpi_pci.c:1.25 src/sys/dev/acpi/acpi_pci.c:1.26 --- src/sys/dev/acpi/acpi_pci.c:1.25 Sun Jan 27 02:08:41 2019 +++ src/sys/dev/acpi/acpi_pci.c Fri Mar 1 09:26:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_pci.c,v 1.25 2019/01/27 02:08:41 pgoyette Exp $ */ +/* $NetBSD: acpi_pci.c,v 1.26 2019/03/01 09:26:00 msaitoh Exp $ */ /* * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_pci.c,v 1.25 2019/01/27 02:08:41 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_pci.c,v 1.26 2019/03/01 09:26:00 msaitoh Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -354,8 +354,8 @@ acpi_pcidev_ppb_downbus(uint16_t segment return AE_TYPE; /* This is a PCI-to-PCI bridge. Get its secondary bus#. */ - val = pci_conf_read(pc, tag, PPB_REG_BUSINFO); - *downbus = PPB_BUSINFO_SECONDARY(val); + val = pci_conf_read(pc, tag, PCI_BRIDGE_BUS_REG); + *downbus = PCI_BRIDGE_BUS_NUM_SECONDARY(val); return AE_OK; } Index: src/sys/dev/cardbus/rbus_ppb.c diff -u src/sys/dev/cardbus/rbus_ppb.c:1.45 src/sys/dev/cardbus/rbus_ppb.c:1.46 --- src/sys/dev/cardbus/rbus_ppb.c:1.45 Thu Jun 1 02:45:09 2017 +++ src/sys/dev/cardbus/rbus_ppb.c Fri Mar 1 09:26:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: rbus_ppb.c,v 1.45 2017/06/01 02:45:09 chs Exp $ */ +/* $NetBSD: rbus_ppb.c,v 1.46 2019/03/01 09:26:00 msaitoh Exp $ */ /* * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rbus_ppb.c,v 1.45 2017/06/01 02:45:09 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rbus_ppb.c,v 1.46 2019/03/01 09:26:00 msaitoh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -265,12 +265,12 @@ rbus_pci_addr_fixup(struct ppb_cardbus_s /* first round amount of space up */ rct.bussize_ioreqs[busnum] = - rbus_round_up(rct.bussize_ioreqs[busnum], PPB_IO_MIN); + rbus_round_up(rct.bussize_ioreqs[busnum], PCI_BRIDGE_IO_MIN); rct.bussize_ioreqs[pci_bus_parent[busnum]] += rct.bussize_ioreqs[busnum]; rct.bussize_memreqs[busnum] = - rbus_round_up(rct.bussize_memreqs[busnum], PPB_MEM_MIN); + rbus_round_up(rct.bussize_memreqs[busnum], PCI_BRIDGE_MEM_MIN); rct.bussize_memreqs[pci_bus_parent[busnum]] += rct.bussize_memreqs[busnum]; @@ -278,8 +278,8 @@ rbus_pci_addr_fixup(struct ppb_cardbus_s } rct.bussize_ioreqs[minbus] = - rbus_round_up(rct.bussize_ioreqs[minbus], 4096); - rct.bussize_memreqs[minbus] = + rbus_round_up(rct.bussize_ioreqs[minbus], PCI_BRIDGE_IO_MIN); + rct.bussize_memreqs[minbus] = /* XXX Not 8 but PCI_BRIDGE_MEM_MIN ? */ rbus_round_up(rct.bussize_memreqs[minbus], 8); printf("%s: total needs IO %08zx and MEM %08zx\n", @@ -376,11 +376,11 @@ rbus_pci_addr_fixup(struct ppb_cardbus_s PCI_COMMAND_STATUS_REG, reg); /* now init the limit register for I/O */ - pci_conf_write(pc, pci_bus_tag[busnum], PPB_REG_IOSTATUS, - (((start & 0xf000) >> 8) << PPB_IOBASE_SHIFT) | - ((((start + - rct.bussize_ioreqs[busnum] + - 4095) & 0xf000) >> 8) << PPB_IOLIMIT_SHIFT)); + pci_conf_write(pc, pci_bus_tag[busnum], PCI_BRIDGE_STATIO_REG, + __SHIFTIN((start >> 8) + & PCI_BRIDGE_STATIO_IOADDR, PCI_BRIDGE_STATIO_IOBASE) | + __SHIFTIN(((start + rct.bussize_ioreqs[busnum] + 4095) >> 8) + & PCI_BRIDGE_STATIO_IOADDR, PCI_BRIDGE_STATIO_IOLIMIT)); } if(rct.bussize_memreqs[busnum]) { @@ -412,22 +412,20 @@ rbus_pci_addr_fixup(struct ppb_cardbus_s PCI_COMMAND_STATUS_REG, reg); /* now init the limit register for memory */ - pci_conf_write(pc, pci_bus_tag[busnum], PPB_REG_MEM, - ((start & PPB_MEM_MASK) - >> PPB_MEM_SHIFT) << PPB_MEMBASE_SHIFT | - (((start + - rct.bussize_memreqs[busnum] + - PPB_MEM_MIN-1) >> PPB_MEM_SHIFT) - << PPB_MEMLIMIT_SHIFT)); + pci_conf_write(pc, pci_bus_tag[busnum], PCI_BRIDGE_MEMORY_REG, + __SHIFTIN((start >> 16) & PCI_BRIDGE_MEMORY_ADDR, + PCI_BRIDGE_MEMORY_BASE) | + __SHIFTIN(((start + rct.bussize_memreqs[busnum] + PPB_MEM_MIN + - 1) >> 16) & PCI_BRIDGE_MEMORY_ADDR, + PCI_BRIDGE_MEMORY_LIMIT)); /* and set the prefetchable limits as well */ - pci_conf_write(pc, pci_bus_tag[busnum], PPB_REG_PREFMEM, - ((start & PPB_MEM_MASK) - >> PPB_MEM_SHIFT) << PPB_MEMBASE_SHIFT | - (((start + - rct.bussize_memreqs[busnum] + - PPB_MEM_MIN-1) >> PPB_MEM_SHIFT) - << PPB_MEMLIMIT_SHIFT)); + pci_conf_write(pc, pci_bus_tag[busnum], PCI_BRIDGE_PREFETCHMEM_REG, + __SHIFTIN((start >> 16) & PCI_BRIDGE_PREFETCHMEM_ADDR, + PCI_BRIDGE_PREFETCHMEM_BASE) | + __SHIFTIN(((start + rct.bussize_memreqs[busnum] + PPB_MEM_MIN + - 1) >> 16) & PCI_BRIDGE_PREFETCHMEM_ADDR, + PCI_BRIDGE_PREFETCHMEM_LIMIT)); /* pci_conf_print(pc, pci_bus_tag[busnum], NULL); */ } @@ -622,38 +620,37 @@ ppb_cardbus_attach(device_t parent, devi csc->sc_tag = ca->ca_tag; - busdata = Cardbus_conf_read(ct, ca->ca_tag, PPB_REG_BUSINFO); + busdata = Cardbus_conf_read(ct, ca->ca_tag, PCI_BRIDGE_BUS_REG); minbus = pcibios_max_bus; maxbus = minbus; /* XXX; gcc */ - if (PPB_BUSINFO_SECONDARY(busdata) == 0) { + if (PCI_BRIDGE_BUS_NUM_SECONDARY(busdata) == 0) { aprint_error_dev(self, "not configured by system firmware calling pci_bus_fixup(%d)\n", 0); /* * first, pull the reset wire on the secondary bridge * to clear all devices */ - busdata = Cardbus_conf_read(ct, ca->ca_tag, - PPB_REG_BRIDGECONTROL); - Cardbus_conf_write(ct, ca->ca_tag, PPB_REG_BRIDGECONTROL, - busdata | PPB_BC_SECONDARY_RESET); + busdata = Cardbus_conf_read(ct, ca->ca_tag, PCI_BRIDGE_CONTROL_REG); + Cardbus_conf_write(ct, ca->ca_tag, PCI_BRIDGE_CONTROL_REG, + busdata | PCI_BRIDGE_CONTROL_SECBR); delay(1); - Cardbus_conf_write(ct, ca->ca_tag, PPB_REG_BRIDGECONTROL, + Cardbus_conf_write(ct, ca->ca_tag, PCI_BRIDGE_CONTROL_REG, busdata); /* then go initialize the bridge control registers */ maxbus = pci_bus_fixup(psc->sc_pc, 0); } - busdata = Cardbus_conf_read(ct, ca->ca_tag, PPB_REG_BUSINFO); - if(PPB_BUSINFO_SECONDARY(busdata) == 0) { + busdata = Cardbus_conf_read(ct, ca->ca_tag, PCI_BRIDGE_BUS_REG); + if(PCI_BRIDGE_BUS_NUM_SECONDARY(busdata) == 0) { aprint_error_dev(self, "still not configured, not fixable.\n"); return; } #if 0 - minbus = PPB_BUSINFO_SECONDARY(busdata); - maxbus = PPB_BUSINFO_SUBORDINATE(busdata); + minbus = PCI_BRIDGE_BUS_NUM_SECONDARY(busdata); + maxbus = PCI_BRIDGE_BUS_NUM_SUBORDINATE(busdata); #endif /* now, go and assign addresses for the new devices */ @@ -691,8 +688,8 @@ ppb_cardbus_attach(device_t parent, devi pba.pba_memt = ca->ca_memt; pba.pba_dmat = ca->ca_dmat; pba.pba_pc = psc->sc_pc; - pba.pba_flags = PCI_FLAGS_IO_OKAY|PCI_FLAGS_MEM_OKAY; - pba.pba_bus = PPB_BUSINFO_SECONDARY(busdata); + pba.pba_flags = PCI_FLAGS_IO_OKAY | PCI_FLAGS_MEM_OKAY; + pba.pba_bus = PCI_BRIDGE_BUS_NUM_SECONDARY(busdata); pba.pba_bridgetag = &csc->sc_tag; /*pba.pba_intrswiz = parent_sc->sc_intrswiz; */ pba.pba_intrtag = psc->sc_pa.pa_intrtag; Index: src/sys/dev/pci/btvmeii.c diff -u src/sys/dev/pci/btvmeii.c:1.22 src/sys/dev/pci/btvmeii.c:1.23 --- src/sys/dev/pci/btvmeii.c:1.22 Sat Oct 27 17:18:28 2012 +++ src/sys/dev/pci/btvmeii.c Fri Mar 1 09:26:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: btvmeii.c,v 1.22 2012/10/27 17:18:28 chs Exp $ */ +/* $NetBSD: btvmeii.c,v 1.23 2019/03/01 09:26:00 msaitoh Exp $ */ /* * Copyright (c) 1999 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: btvmeii.c,v 1.22 2012/10/27 17:18:28 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: btvmeii.c,v 1.23 2019/03/01 09:26:00 msaitoh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -145,8 +145,8 @@ b3_2706_match(device_t parent, cfdata_t || (PCI_PRODUCT(pa->pa_id) != PCI_PRODUCT_DEC_21152)) return (0); - secbus = PPB_BUSINFO_SECONDARY(pci_conf_read(pc, pa->pa_tag, - PPB_REG_BUSINFO)); + secbus = PCI_BRIDGE_BUS_NUM_SECONDARY(pci_conf_read(pc, pa->pa_tag, + PCI_BRIDGE_BUS_REG)); if (secbus == 0) { printf("b3_2706_match: ppb not configured\n"); return (0); @@ -195,8 +195,8 @@ b3_2706_attach(device_t parent, device_t aprint_naive(": VME bus adapter\n"); aprint_normal("\n"); - secbus = PPB_BUSINFO_SECONDARY(pci_conf_read(pc, pa->pa_tag, - PPB_REG_BUSINFO)); + secbus = PCI_BRIDGE_BUS_NUM_SECONDARY(pci_conf_read(pc, pa->pa_tag, + PCI_BRIDGE_BUS_REG)); memcpy(&aa, pa, sizeof(struct pci_attach_args)); aa.pa_device = 4; Index: src/sys/dev/pci/pccbb.c diff -u src/sys/dev/pci/pccbb.c:1.213 src/sys/dev/pci/pccbb.c:1.214 --- src/sys/dev/pci/pccbb.c:1.213 Fri Mar 1 05:41:56 2019 +++ src/sys/dev/pci/pccbb.c Fri Mar 1 09:26:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pccbb.c,v 1.213 2019/03/01 05:41:56 msaitoh Exp $ */ +/* $NetBSD: pccbb.c,v 1.214 2019/03/01 09:26:00 msaitoh Exp $ */ /* * Copyright (c) 1998, 1999 and 2000 @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pccbb.c,v 1.213 2019/03/01 05:41:56 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pccbb.c,v 1.214 2019/03/01 09:26:00 msaitoh Exp $"); /* #define CBB_DEBUG @@ -764,13 +764,13 @@ pccbb_chipinit(struct pccbb_softc *sc) bcr |= CB_BCR_INTR_IREQ_ENABLE; /* disable PCI Intr */ bcr |= CB_BCR_WRITE_POST_ENABLE; /* enable write post */ /* assert reset */ - bcr |= PCI_BRIDGE_CONTROL_SECBR << PCI_BRIDGE_CONTROL_SHIFT; + bcr |= PCI_BRIDGE_CONTROL_SECBR; /* Set master abort mode to 1, forward SERR# from secondary * to primary, and detect parity errors on secondary. */ - bcr |= PCI_BRIDGE_CONTROL_MABRT << PCI_BRIDGE_CONTROL_SHIFT; - bcr |= PCI_BRIDGE_CONTROL_SERR << PCI_BRIDGE_CONTROL_SHIFT; - bcr |= PCI_BRIDGE_CONTROL_PERE << PCI_BRIDGE_CONTROL_SHIFT; + bcr |= PCI_BRIDGE_CONTROL_MABRT; + bcr |= PCI_BRIDGE_CONTROL_SERR; + bcr |= PCI_BRIDGE_CONTROL_PERE; pci_conf_write(pc, tag, PCI_BRIDGE_CONTROL_REG, bcr); switch (sc->sc_chipset) { @@ -1443,14 +1443,14 @@ cb_reset(struct pccbb_softc *sc) aprint_debug("%s: enter bcr %" PRIx32 "\n", __func__, bcr); /* Reset bit Assert (bit 6 at 0x3E) */ - bcr |= PCI_BRIDGE_CONTROL_SECBR << PCI_BRIDGE_CONTROL_SHIFT; + bcr |= PCI_BRIDGE_CONTROL_SECBR; pci_conf_write(sc->sc_pc, sc->sc_tag, PCI_BRIDGE_CONTROL_REG, bcr); aprint_debug("%s: wrote bcr %" PRIx32 "\n", __func__, bcr); delay_ms(reset_duration, sc); if (CBB_CARDEXIST & sc->sc_flags) { /* A card exists. Reset it! */ /* Reset bit Deassert (bit 6 at 0x3E) */ - bcr &= ~(PCI_BRIDGE_CONTROL_SECBR << PCI_BRIDGE_CONTROL_SHIFT); + bcr &= ~(PCI_BRIDGE_CONTROL_SECBR); pci_conf_write(sc->sc_pc, sc->sc_tag, PCI_BRIDGE_CONTROL_REG, bcr); aprint_debug("%s: wrote bcr %" PRIx32 "\n", __func__, bcr); Index: src/sys/dev/pci/pci_subr.c diff -u src/sys/dev/pci/pci_subr.c:1.211 src/sys/dev/pci/pci_subr.c:1.212 --- src/sys/dev/pci/pci_subr.c:1.211 Thu Feb 28 16:56:35 2019 +++ src/sys/dev/pci/pci_subr.c Fri Mar 1 09:26:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pci_subr.c,v 1.211 2019/02/28 16:56:35 khorben Exp $ */ +/* $NetBSD: pci_subr.c,v 1.212 2019/03/01 09:26:00 msaitoh Exp $ */ /* * Copyright (c) 1997 Zubin D. Dittia. All rights reserved. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pci_subr.c,v 1.211 2019/02/28 16:56:35 khorben Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pci_subr.c,v 1.212 2019/03/01 09:26:00 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_pci.h" @@ -4504,13 +4504,13 @@ pci_conf_print_type1( rval = regs[o2i(PCI_BRIDGE_BUS_REG)]; printf(" Primary bus number: 0x%02x\n", - PCI_BRIDGE_BUS_PRIMARY(rval)); + PCI_BRIDGE_BUS_NUM_PRIMARY(rval)); printf(" Secondary bus number: 0x%02x\n", - PCI_BRIDGE_BUS_SECONDARY(rval)); + PCI_BRIDGE_BUS_NUM_SECONDARY(rval)); printf(" Subordinate bus number: 0x%02x\n", - PCI_BRIDGE_BUS_SUBORDINATE(rval)); + PCI_BRIDGE_BUS_NUM_SUBORDINATE(rval)); printf(" Secondary bus latency timer: 0x%02x\n", - PCI_BRIDGE_BUS_SEC_LATTIMER(rval)); + PCI_BRIDGE_BUS_SEC_LATTIMER_VAL(rval)); rval = regs[o2i(PCI_BRIDGE_STATIO_REG)]; pci_conf_print_ssr(__SHIFTOUT(rval, __BITS(31, 16))); @@ -4524,14 +4524,12 @@ pci_conf_print_type1( else use_upper = 0; onoff("32bit I/O", rval, use_upper); - base = (rval & PCI_BRIDGE_STATIO_IOBASE_MASK) << 8; - limit = ((rval >> PCI_BRIDGE_STATIO_IOLIMIT_SHIFT) - & PCI_BRIDGE_STATIO_IOLIMIT_MASK) << 8; - limit |= 0x00000fff; + base = PCI_BRIDGE_STATIO_IOBASE_ADDR(rval); + limit = PCI_BRIDGE_STATIO_IOLIMIT_ADDR(rval); rval = regs[o2i(PCI_BRIDGE_IOHIGH_REG)]; - base_h = (rval >> 0) & 0xffff; - limit_h = (rval >> 16) & 0xffff; + base_h = __SHIFTOUT(rval, PCI_BRIDGE_IOHIGH_BASE); + limit_h = __SHIFTOUT(rval, PCI_BRIDGE_IOHIGH_LIMIT); printf(" base upper 16 bits register: 0x%04x\n", base_h); printf(" limit upper 16 bits register: 0x%04x\n", limit_h); @@ -4550,14 +4548,12 @@ pci_conf_print_type1( /* Non-prefetchable memory region */ rval = regs[o2i(PCI_BRIDGE_MEMORY_REG)]; printf(" Memory region:\n"); - printf(" base register: 0x%04x\n", - (rval >> 0) & 0xffff); - printf(" limit register: 0x%04x\n", - (rval >> 16) & 0xffff); - base = ((rval >> PCI_BRIDGE_MEMORY_BASE_SHIFT) - & PCI_BRIDGE_MEMORY_BASE_MASK) << 20; - limit = (((rval >> PCI_BRIDGE_MEMORY_LIMIT_SHIFT) - & PCI_BRIDGE_MEMORY_LIMIT_MASK) << 20) | 0x000fffff; + printf(" base register: 0x%04hx\n", + (uint16_t)__SHIFTOUT(rval, PCI_BRIDGE_MEMORY_BASE)); + printf(" limit register: 0x%04hx\n", + (uint16_t)__SHIFTOUT(rval, PCI_BRIDGE_MEMORY_LIMIT)); + base = PCI_BRIDGE_MEMORY_BASE_ADDR(rval); + limit = PCI_BRIDGE_MEMORY_LIMIT_ADDR(rval); if (base < limit) printf(" range: 0x%08x-0x%08x\n", base, limit); else @@ -4570,8 +4566,8 @@ pci_conf_print_type1( (rval >> 0) & 0xffff); printf(" limit register: 0x%04x\n", (rval >> 16) & 0xffff); - base_h = regs[o2i(PCI_BRIDGE_PREFETCHBASE32_REG)]; - limit_h = regs[o2i(PCI_BRIDGE_PREFETCHLIMIT32_REG)]; + base_h = regs[o2i(PCI_BRIDGE_PREFETCHBASEUP32_REG)]; + limit_h = regs[o2i(PCI_BRIDGE_PREFETCHLIMITUP32_REG)]; printf(" base upper 32 bits register: 0x%08x\n", base_h); printf(" limit upper 32 bits register: 0x%08x\n", @@ -4581,10 +4577,8 @@ pci_conf_print_type1( else use_upper = 0; onoff("64bit memory address", rval, use_upper); - pbase = ((rval >> PCI_BRIDGE_PREFETCHMEM_BASE_SHIFT) - & PCI_BRIDGE_PREFETCHMEM_BASE_MASK) << 20; - plimit = (((rval >> PCI_BRIDGE_PREFETCHMEM_LIMIT_SHIFT) - & PCI_BRIDGE_PREFETCHMEM_LIMIT_MASK) << 20) | 0x000fffff; + pbase = PCI_BRIDGE_PREFETCHMEM_BASE_ADDR(rval); + plimit = PCI_BRIDGE_PREFETCHMEM_LIMIT_ADDR(rval); if (use_upper == 1) { pbase |= (uint64_t)base_h << 32; plimit |= (uint64_t)limit_h << 32; @@ -4606,8 +4600,8 @@ pci_conf_print_type1( else printf(" Reserved @ 0x34: 0x%08x\n", regs[o2i(0x34)]); - /* XXX */ - printf(" Expansion ROM Base Address: 0x%08x\n", regs[o2i(0x38)]); + printf(" Expansion ROM Base Address: 0x%08x\n", + regs[o2i(PCI_BRIDGE_EXPROMADDR_REG)]); rval = regs[o2i(PCI_INTERRUPT_REG)]; printf(" Interrupt line: 0x%02x\n", @@ -4635,9 +4629,9 @@ pci_conf_print_type1( break; } printf("\n"); - rval = (regs[o2i(PCI_BRIDGE_CONTROL_REG)] >> PCI_BRIDGE_CONTROL_SHIFT) - & PCI_BRIDGE_CONTROL_MASK; - printf(" Bridge control register: 0x%04x\n", rval); /* XXX bits */ + rval = regs[o2i(PCI_BRIDGE_CONTROL_REG)]; + printf(" Bridge control register: 0x%04hx\n", + (uint16_t)__SHIFTOUT(rval, PCI_BRIDGE_CONTROL)); onoff("Parity error response", rval, PCI_BRIDGE_CONTROL_PERE); onoff("Secondary SERR forwarding", rval, PCI_BRIDGE_CONTROL_SERR); onoff("ISA enable", rval, PCI_BRIDGE_CONTROL_ISA); @@ -4651,7 +4645,15 @@ pci_conf_print_type1( onoff("VGA 16bit enable", rval, PCI_BRIDGE_CONTROL_VGA16); onoff("Master abort reporting", rval, PCI_BRIDGE_CONTROL_MABRT); onoff("Secondary bus reset", rval, PCI_BRIDGE_CONTROL_SECBR); - onoff("Fast back-to-back capable", rval,PCI_BRIDGE_CONTROL_SECFASTB2B); + onoff("Fast back-to-back enable", rval, PCI_BRIDGE_CONTROL_SECFASTB2B); + onoff("Primary Discard Timer", rval, + PCI_BRIDGE_CONTROL_PRI_DISC_TIMER); + onoff("Secondary Discard Timer", + rval, PCI_BRIDGE_CONTROL_SEC_DISC_TIMER); + onoff("Discard Timer Status", rval, + PCI_BRIDGE_CONTROL_DISC_TIMER_STAT); + onoff("Discard Timer SERR# Enable", rval, + PCI_BRIDGE_CONTROL_DISC_TIMER_SERR); } static void Index: src/sys/dev/pci/pciconf.c diff -u src/sys/dev/pci/pciconf.c:1.40 src/sys/dev/pci/pciconf.c:1.41 --- src/sys/dev/pci/pciconf.c:1.40 Fri Mar 1 07:02:56 2019 +++ src/sys/dev/pci/pciconf.c Fri Mar 1 09:26:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pciconf.c,v 1.40 2019/03/01 07:02:56 msaitoh Exp $ */ +/* $NetBSD: pciconf.c,v 1.41 2019/03/01 09:26:00 msaitoh Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pciconf.c,v 1.40 2019/03/01 07:02:56 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pciconf.c,v 1.41 2019/03/01 09:26:00 msaitoh Exp $"); #include "opt_pci.h" @@ -306,9 +306,9 @@ set_busreg(pci_chipset_tag_t pc, pcitag_ { pcireg_t busreg; - busreg = prim << PCI_BRIDGE_BUS_PRIMARY_SHIFT; - busreg |= sec << PCI_BRIDGE_BUS_SECONDARY_SHIFT; - busreg |= sub << PCI_BRIDGE_BUS_SUBORDINATE_SHIFT; + busreg = __SHIFTIN(prim, PCI_BRIDGE_BUS_PRIMARY); + busreg |= __SHIFTIN(sec, PCI_BRIDGE_BUS_SECONDARY); + busreg |= __SHIFTIN(sub, PCI_BRIDGE_BUS_SUBORDINATE); pci_conf_write(pc, tag, PCI_BRIDGE_BUS_REG, busreg); } @@ -486,9 +486,9 @@ pci_do_device_query(pciconf_bus_t *pb, p busreg = pci_conf_read(pb->pc, tag, PCI_BUSNUM); busreg = (busreg & 0xff000000) | - pb->busno << PCI_BRIDGE_BUS_PRIMARY_SHIFT | - pb->next_busno << PCI_BRIDGE_BUS_SECONDARY_SHIFT | - pb->next_busno << PCI_BRIDGE_BUS_SUBORDINATE_SHIFT; + __SHIFTIN(pb->busno, PCI_BRIDGE_BUS_PRIMARY) | + __SHIFTIN(pb->next_busno, PCI_BRIDGE_BUS_SECONDARY) | + __SHIFTIN(pb->next_busno, PCI_BRIDGE_BUS_SUBORDINATE); pci_conf_write(pb->pc, tag, PCI_BUSNUM, busreg); pb->next_busno++; @@ -867,9 +867,8 @@ configure_bridge(pciconf_dev_t *pd) io_limit = 0x0000; } if (pb->io_32bit) { - iohigh = - ((io_base >> 16) << PCI_BRIDGE_IOHIGH_BASE_SHIFT) | - ((io_limit >> 16) << PCI_BRIDGE_IOHIGH_LIMIT_SHIFT); + iohigh = __SHIFTIN(io_base >> 16, PCI_BRIDGE_IOHIGH_BASE) | + __SHIFTIN(io_limit >> 16, PCI_BRIDGE_IOHIGH_LIMIT); } else { if (io_limit > 0xFFFF) { printf("Bus %d bridge does not support 32-bit I/O. ", @@ -881,11 +880,11 @@ configure_bridge(pciconf_dev_t *pd) iohigh = 0; } io = pci_conf_read(pb->pc, pd->tag, PCI_BRIDGE_STATIO_REG) & - (PCI_BRIDGE_STATIO_STATUS_MASK << PCI_BRIDGE_STATIO_STATUS_SHIFT); - io |= (((io_base >> 8) & PCI_BRIDGE_STATIO_IOBASE_MASK) - << PCI_BRIDGE_STATIO_IOBASE_SHIFT); - io |= (((io_limit >> 8) & PCI_BRIDGE_STATIO_IOLIMIT_MASK) - << PCI_BRIDGE_STATIO_IOLIMIT_SHIFT); + PCI_BRIDGE_STATIO_STATUS; + io |= __SHIFTIN((io_base >> 8) & PCI_BRIDGE_STATIO_IOADDR, + PCI_BRIDGE_STATIO_IOBASE); + io |= __SHIFTIN((io_limit >> 8) & PCI_BRIDGE_STATIO_IOADDR, + PCI_BRIDGE_STATIO_IOLIMIT); pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_STATIO_REG, io); pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_IOHIGH_REG, iohigh); @@ -905,10 +904,10 @@ configure_bridge(pciconf_dev_t *pd) mem_limit = 0x000000; } #endif - mem = (((mem_base >> 20) & PCI_BRIDGE_MEMORY_BASE_MASK) - << PCI_BRIDGE_MEMORY_BASE_SHIFT); - mem |= (((mem_limit >> 20) & PCI_BRIDGE_MEMORY_LIMIT_MASK) - << PCI_BRIDGE_MEMORY_LIMIT_SHIFT); + mem = __SHIFTIN((mem_base >> 16) & PCI_BRIDGE_MEMORY_ADDR, + PCI_BRIDGE_MEMORY_BASE); + mem |= __SHIFTIN((mem_limit >> 16) & PCI_BRIDGE_MEMORY_ADDR, + PCI_BRIDGE_MEMORY_LIMIT); pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_MEMORY_REG, mem); /* Configure prefetchable mem base & limit */ @@ -930,10 +929,10 @@ configure_bridge(pciconf_dev_t *pd) mem_limit = 0x000000; } #endif - mem = (((mem_base >> 20) & PCI_BRIDGE_PREFETCHMEM_BASE_MASK) - << PCI_BRIDGE_PREFETCHMEM_BASE_SHIFT); - mem |= (((mem_limit >> 20) & PCI_BRIDGE_PREFETCHMEM_LIMIT_MASK) - << PCI_BRIDGE_PREFETCHMEM_LIMIT_SHIFT); + mem = __SHIFTIN((mem_base >> 16) & PCI_BRIDGE_PREFETCHMEM_ADDR, + PCI_BRIDGE_PREFETCHMEM_BASE); + mem |= __SHIFTIN((mem_limit >> 16) & PCI_BRIDGE_PREFETCHMEM_ADDR, + PCI_BRIDGE_PREFETCHMEM_LIMIT); pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_PREFETCHMEM_REG, mem); /* * XXX -- 64-bit systems need a lot more than just this... @@ -941,10 +940,10 @@ configure_bridge(pciconf_dev_t *pd) if (isprefetchmem64) { mem_base = (uint64_t)mem_base >> 32; mem_limit = (uint64_t)mem_limit >> 32; - pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_PREFETCHBASE32_REG, - mem_base & 0xffffffff); - pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_PREFETCHLIMIT32_REG, - mem_limit & 0xffffffff); + pci_conf_write(pb->pc, pd->tag, + PCI_BRIDGE_PREFETCHBASEUP32_REG, mem_base & 0xffffffff); + pci_conf_write(pb->pc, pd->tag, + PCI_BRIDGE_PREFETCHLIMITUP32_REG, mem_limit & 0xffffffff); } rv = configure_bus(pb); @@ -957,13 +956,11 @@ configure_bridge(pciconf_dev_t *pd) extent_destroy(pb->pmemext); if (rv == 0) { cmd = pci_conf_read(pd->pc, pd->tag, PCI_BRIDGE_CONTROL_REG); - cmd &= PCI_BRIDGE_CONTROL_MASK; - cmd |= (PCI_BRIDGE_CONTROL_PERE | PCI_BRIDGE_CONTROL_SERR) - << PCI_BRIDGE_CONTROL_SHIFT; - if (pb->fast_b2b) { - cmd |= PCI_BRIDGE_CONTROL_SECFASTB2B - << PCI_BRIDGE_CONTROL_SHIFT; - } + cmd &= ~PCI_BRIDGE_CONTROL; /* Clear control bit first */ + cmd |= PCI_BRIDGE_CONTROL_PERE | PCI_BRIDGE_CONTROL_SERR; + if (pb->fast_b2b) + cmd |= PCI_BRIDGE_CONTROL_SECFASTB2B; + pci_conf_write(pd->pc, pd->tag, PCI_BRIDGE_CONTROL_REG, cmd); cmd = pci_conf_read(pd->pc, pd->tag, PCI_COMMAND_STATUS_REG); cmd |= PCI_COMMAND_IO_ENABLE | PCI_COMMAND_MEM_ENABLE; Index: src/sys/dev/pci/pcireg.h diff -u src/sys/dev/pci/pcireg.h:1.146 src/sys/dev/pci/pcireg.h:1.147 --- src/sys/dev/pci/pcireg.h:1.146 Fri Nov 30 10:18:37 2018 +++ src/sys/dev/pci/pcireg.h Fri Mar 1 09:26:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pcireg.h,v 1.146 2018/11/30 10:18:37 msaitoh Exp $ */ +/* $NetBSD: pcireg.h,v 1.147 2019/03/01 09:26:00 msaitoh Exp $ */ /* * Copyright (c) 1995, 1996, 1999, 2000 @@ -1290,67 +1290,85 @@ typedef u_int8_t pci_intr_line_t; /* Header Type 1 (Bridge) configuration registers */ #define PCI_BRIDGE_BUS_REG 0x18 -#define PCI_BRIDGE_BUS_EACH_MASK 0xff -#define PCI_BRIDGE_BUS_PRIMARY_SHIFT 0 -#define PCI_BRIDGE_BUS_SECONDARY_SHIFT 8 -#define PCI_BRIDGE_BUS_SUBORDINATE_SHIFT 16 -#define PCI_BRIDGE_BUS_SEC_LATTIMER_SHIFT 24 -#define PCI_BRIDGE_BUS_PRIMARY(reg) \ - (((reg) >> PCI_BRIDGE_BUS_PRIMARY_SHIFT) & PCI_BRIDGE_BUS_EACH_MASK) -#define PCI_BRIDGE_BUS_SECONDARY(reg) \ - (((reg) >> PCI_BRIDGE_BUS_SECONDARY_SHIFT) & PCI_BRIDGE_BUS_EACH_MASK) -#define PCI_BRIDGE_BUS_SUBORDINATE(reg) \ - (((reg) >> PCI_BRIDGE_BUS_SUBORDINATE_SHIFT) &PCI_BRIDGE_BUS_EACH_MASK) -#define PCI_BRIDGE_BUS_SEC_LATTIMER(reg) \ - (((reg) >> PCI_BRIDGE_BUS_SEC_LATTIMER_SHIFT)&PCI_BRIDGE_BUS_EACH_MASK) - - -#define PCI_BRIDGE_STATIO_REG 0x1C -#define PCI_BRIDGE_STATIO_IOBASE_SHIFT 0 -#define PCI_BRIDGE_STATIO_IOLIMIT_SHIFT 8 -#define PCI_BRIDGE_STATIO_STATUS_SHIFT 16 -#define PCI_BRIDGE_STATIO_IOBASE_MASK 0xf0 -#define PCI_BRIDGE_STATIO_IOLIMIT_MASK 0xf0 -#define PCI_BRIDGE_STATIO_STATUS_MASK 0xffff -#define PCI_BRIDGE_IO_32BITS(reg) (((reg) & 0xf) == 1) +#define PCI_BRIDGE_BUS_PRIMARY __BITS(0, 7) +#define PCI_BRIDGE_BUS_SECONDARY __BITS(8, 15) +#define PCI_BRIDGE_BUS_SUBORDINATE __BITS(16, 23) +#define PCI_BRIDGE_BUS_SEC_LATTIMER __BITS(24, 31) +#define PCI_BRIDGE_BUS_NUM_PRIMARY(reg) \ + ((uint32_t)__SHIFTOUT((reg), PCI_BRIDGE_BUS_PRIMARY)) +#define PCI_BRIDGE_BUS_NUM_SECONDARY(reg) \ + ((uint32_t)__SHIFTOUT((reg), PCI_BRIDGE_BUS_SECONDARY)) +#define PCI_BRIDGE_BUS_NUM_SUBORDINATE(reg) \ + ((uint32_t)__SHIFTOUT((reg), PCI_BRIDGE_BUS_SUBORDINATE)) +#define PCI_BRIDGE_BUS_SEC_LATTIMER_VAL(reg) \ + ((uint32_t)__SHIFTOUT((reg), PCI_BRIDGE_BUS_SEC_LATTIMER)) + +/* Minimum size of the window */ +#define PCI_BRIDGE_IO_MIN 0x00001000UL +#define PCI_BRIDGE_MEM_MIN 0x00100000UL + +#define PCI_BRIDGE_STATIO_REG 0x1c +#define PCI_BRIDGE_STATIO_IOBASE __BITS(0, 7) +#define PCI_BRIDGE_STATIO_IOLIMIT __BITS(8, 15) +#define PCI_BRIDGE_STATIO_STATUS __BITS(16, 31) +#define PCI_BRIDGE_STATIO_IOADDR 0xf0 +#define PCI_BRIDGE_STATIO_IOADDR_TYPE 0x0f /* Read only */ +#define PCI_BRIDGE_STATIO_IOADDR_32 0x01 +#define PCI_BRIDGE_STATIO_IOBASE_ADDR(reg) \ + ((__SHIFTOUT((reg), PCI_BRIDGE_STATIO_IOBASE) \ + & PCI_BRIDGE_STATIO_IOADDR) << 8) +#define PCI_BRIDGE_STATIO_IOLIMIT_ADDR(reg) \ + (((__SHIFTOUT((reg), PCI_BRIDGE_STATIO_IOLIMIT) \ + & PCI_BRIDGE_STATIO_IOADDR) << 8) | (PCI_BRIDGE_IO_MIN - 1)) +#define PCI_BRIDGE_IO_32BITS(reg) \ + (((reg) & PCI_BRIDGE_STATIO_IOADDR_TYPE) == PCI_BRIDGE_STATIO_IOADDR_32) #define PCI_BRIDGE_MEMORY_REG 0x20 -#define PCI_BRIDGE_MEMORY_BASE_SHIFT 4 -#define PCI_BRIDGE_MEMORY_LIMIT_SHIFT 20 -#define PCI_BRIDGE_MEMORY_BASE_MASK 0x0fff -#define PCI_BRIDGE_MEMORY_LIMIT_MASK 0x0fff +#define PCI_BRIDGE_MEMORY_BASE __BITS(0, 15) +#define PCI_BRIDGE_MEMORY_LIMIT __BITS(16, 31) +#define PCI_BRIDGE_MEMORY_ADDR 0xfff0 +#define PCI_BRIDGE_MEMORY_BASE_ADDR(reg) \ + ((__SHIFTOUT((reg), PCI_BRIDGE_MEMORY_BASE) \ + & PCI_BRIDGE_MEMORY_ADDR) << 16) +#define PCI_BRIDGE_MEMORY_LIMIT_ADDR(reg) \ + (((__SHIFTOUT((reg), PCI_BRIDGE_MEMORY_LIMIT) \ + & PCI_BRIDGE_MEMORY_ADDR) << 16) | 0x000fffff) #define PCI_BRIDGE_PREFETCHMEM_REG 0x24 -#define PCI_BRIDGE_PREFETCHMEM_BASE_SHIFT 4 -#define PCI_BRIDGE_PREFETCHMEM_LIMIT_SHIFT 20 -#define PCI_BRIDGE_PREFETCHMEM_BASE_MASK 0x0fff -#define PCI_BRIDGE_PREFETCHMEM_LIMIT_MASK 0x0fff +#define PCI_BRIDGE_PREFETCHMEM_BASE __BITS(0, 15) +#define PCI_BRIDGE_PREFETCHMEM_LIMIT __BITS(16, 31) +#define PCI_BRIDGE_PREFETCHMEM_ADDR 0xfff0 +#define PCI_BRIDGE_PREFETCHMEM_BASE_ADDR(reg) \ + ((__SHIFTOUT((reg), PCI_BRIDGE_PREFETCHMEM_BASE) \ + & PCI_BRIDGE_PREFETCHMEM_ADDR) << 16) +#define PCI_BRIDGE_PREFETCHMEM_LIMIT_ADDR(reg) \ + (((__SHIFTOUT((reg), PCI_BRIDGE_PREFETCHMEM_LIMIT) \ + & PCI_BRIDGE_PREFETCHMEM_ADDR) << 16) | 0x000fffff) #define PCI_BRIDGE_PREFETCHMEM_64BITS(reg) ((reg) & 0xf) -#define PCI_BRIDGE_PREFETCHBASE32_REG 0x28 -#define PCI_BRIDGE_PREFETCHLIMIT32_REG 0x2c +#define PCI_BRIDGE_PREFETCHBASEUP32_REG 0x28 +#define PCI_BRIDGE_PREFETCHLIMITUP32_REG 0x2c #define PCI_BRIDGE_IOHIGH_REG 0x30 -#define PCI_BRIDGE_IOHIGH_BASE_SHIFT 0 -#define PCI_BRIDGE_IOHIGH_LIMIT_SHIFT 16 -#define PCI_BRIDGE_IOHIGH_BASE_MASK 0xffff -#define PCI_BRIDGE_IOHIGH_LIMIT_MASK 0xffff - -#define PCI_BRIDGE_CONTROL_REG 0x3c -#define PCI_BRIDGE_CONTROL_SHIFT 16 -#define PCI_BRIDGE_CONTROL_MASK 0xffff -#define PCI_BRIDGE_CONTROL_PERE (1 << 0) -#define PCI_BRIDGE_CONTROL_SERR (1 << 1) -#define PCI_BRIDGE_CONTROL_ISA (1 << 2) -#define PCI_BRIDGE_CONTROL_VGA (1 << 3) -#define PCI_BRIDGE_CONTROL_VGA16 (1 << 4) -#define PCI_BRIDGE_CONTROL_MABRT (1 << 5) -#define PCI_BRIDGE_CONTROL_SECBR (1 << 6) -#define PCI_BRIDGE_CONTROL_SECFASTB2B (1 << 7) -#define PCI_BRIDGE_CONTROL_PRI_DISC_TIMER (1 << 8) -#define PCI_BRIDGE_CONTROL_SEC_DISC_TIMER (1 << 9) -#define PCI_BRIDGE_CONTROL_DISC_TIMER_STAT (1 << 10) -#define PCI_BRIDGE_CONTROL_DISC_TIMER_SERR (1 << 11) +#define PCI_BRIDGE_IOHIGH_BASE __BITS(0, 15) +#define PCI_BRIDGE_IOHIGH_LIMIT __BITS(16, 31) + +#define PCI_BRIDGE_EXPROMADDR_REG 0x38 + +#define PCI_BRIDGE_CONTROL_REG 0x3c /* Upper 16 bit */ +#define PCI_BRIDGE_CONTROL __BITS(16, 31) +#define PCI_BRIDGE_CONTROL_PERE __BIT(16) +#define PCI_BRIDGE_CONTROL_SERR __BIT(17) +#define PCI_BRIDGE_CONTROL_ISA __BIT(18) +#define PCI_BRIDGE_CONTROL_VGA __BIT(19) +#define PCI_BRIDGE_CONTROL_VGA16 __BIT(20) +#define PCI_BRIDGE_CONTROL_MABRT __BIT(21) +#define PCI_BRIDGE_CONTROL_SECBR __BIT(22) +#define PCI_BRIDGE_CONTROL_SECFASTB2B __BIT(23) +#define PCI_BRIDGE_CONTROL_PRI_DISC_TIMER __BIT(24) +#define PCI_BRIDGE_CONTROL_SEC_DISC_TIMER __BIT(25) +#define PCI_BRIDGE_CONTROL_DISC_TIMER_STAT __BIT(26) +#define PCI_BRIDGE_CONTROL_DISC_TIMER_SERR __BIT(27) /* Reserved (1 << 12) - (1 << 15) */ /* Index: src/sys/dev/pci/ppb.c diff -u src/sys/dev/pci/ppb.c:1.67 src/sys/dev/pci/ppb.c:1.68 --- src/sys/dev/pci/ppb.c:1.67 Tue Jan 29 09:25:52 2019 +++ src/sys/dev/pci/ppb.c Fri Mar 1 09:26:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ppb.c,v 1.67 2019/01/29 09:25:52 msaitoh Exp $ */ +/* $NetBSD: ppb.c,v 1.68 2019/03/01 09:26:00 msaitoh Exp $ */ /* * Copyright (c) 1996, 1998 Christopher G. Demetriou. All rights reserved. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ppb.c,v 1.67 2019/01/29 09:25:52 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ppb.c,v 1.68 2019/03/01 09:26:00 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_ppb.h" @@ -230,9 +230,9 @@ ppbattach(device_t parent, device_t self sc->sc_tag = pa->pa_tag; sc->sc_dev = self; - busdata = pci_conf_read(pc, pa->pa_tag, PPB_REG_BUSINFO); + busdata = pci_conf_read(pc, pa->pa_tag, PCI_BRIDGE_BUS_REG); - if (PPB_BUSINFO_SECONDARY(busdata) == 0) { + if (PCI_BRIDGE_BUS_NUM_SECONDARY(busdata) == 0) { aprint_normal_dev(self, "not configured by system firmware\n"); return; } @@ -246,9 +246,9 @@ ppbattach(device_t parent, device_t self * decompose our tag. */ /* sanity check. */ - if (pa->pa_bus != PPB_BUSINFO_PRIMARY(busdata)) + if (pa->pa_bus != PCI_BRIDGE_BUS_NUM_PRIMARY(busdata)) panic("ppbattach: bus in tag (%d) != bus in reg (%d)", - pa->pa_bus, PPB_BUSINFO_PRIMARY(busdata)); + pa->pa_bus, PCI_BRIDGE_BUS_NUM_PRIMARY(busdata)); #endif /* Check for PCI Express capabilities and setup hotplug support. */ @@ -360,22 +360,18 @@ ppbattach(device_t parent, device_t self #endif /* PPB_USEINTR */ /* Configuration test */ - if (PPB_BUSINFO_SECONDARY(busdata) != 0) { + if (PCI_BRIDGE_BUS_NUM_SECONDARY(busdata) != 0) { uint32_t base, limit; /* I/O region test */ reg = pci_conf_read(pc, pa->pa_tag, PCI_BRIDGE_STATIO_REG); - base = (reg & PCI_BRIDGE_STATIO_IOBASE_MASK) << 8; - limit = ((reg >> PCI_BRIDGE_STATIO_IOLIMIT_SHIFT) - & PCI_BRIDGE_STATIO_IOLIMIT_MASK) << 8; - limit |= 0x00000fff; + base = PCI_BRIDGE_STATIO_IOBASE_ADDR(reg); + limit = PCI_BRIDGE_STATIO_IOLIMIT_ADDR(reg); if (PCI_BRIDGE_IO_32BITS(reg)) { reg = pci_conf_read(pc, pa->pa_tag, PCI_BRIDGE_IOHIGH_REG); - base |= ((reg >> PCI_BRIDGE_IOHIGH_BASE_SHIFT) - & 0xffff) << 16; - limit |= ((reg >> PCI_BRIDGE_IOHIGH_LIMIT_SHIFT) - & 0xffff) << 16; + base |= __SHIFTOUT(reg, PCI_BRIDGE_IOHIGH_BASE) << 16; + limit |= __SHIFTOUT(reg, PCI_BRIDGE_IOHIGH_LIMIT) <<16; } if (base < limit) { second_configured = true; @@ -384,10 +380,8 @@ ppbattach(device_t parent, device_t self /* Non-prefetchable memory region test */ reg = pci_conf_read(pc, pa->pa_tag, PCI_BRIDGE_MEMORY_REG); - base = ((reg >> PCI_BRIDGE_MEMORY_BASE_SHIFT) - & PCI_BRIDGE_MEMORY_BASE_MASK) << 20; - limit = (((reg >> PCI_BRIDGE_MEMORY_LIMIT_SHIFT) - & PCI_BRIDGE_MEMORY_LIMIT_MASK) << 20) | 0x000fffff; + base = PCI_BRIDGE_MEMORY_BASE_ADDR(reg); + limit = PCI_BRIDGE_MEMORY_LIMIT_ADDR(reg); if (base < limit) { second_configured = true; goto configure; @@ -396,17 +390,16 @@ ppbattach(device_t parent, device_t self /* Prefetchable memory region test */ reg = pci_conf_read(pc, pa->pa_tag, PCI_BRIDGE_PREFETCHMEM_REG); - base = ((reg >> PCI_BRIDGE_PREFETCHMEM_BASE_SHIFT) - & PCI_BRIDGE_PREFETCHMEM_BASE_MASK) << 20; - limit = (((reg >> PCI_BRIDGE_PREFETCHMEM_LIMIT_SHIFT) - & PCI_BRIDGE_PREFETCHMEM_LIMIT_MASK) << 20) | 0x000fffff; + base = PCI_BRIDGE_PREFETCHMEM_BASE_ADDR(reg); + limit = PCI_BRIDGE_PREFETCHMEM_LIMIT_ADDR(reg); + if (PCI_BRIDGE_PREFETCHMEM_64BITS(reg)) { reg = pci_conf_read(pc, pa->pa_tag, PCI_BRIDGE_IOHIGH_REG); base |= (uint64_t)pci_conf_read(pc, pa->pa_tag, - PCI_BRIDGE_PREFETCHBASE32_REG) << 32; + PCI_BRIDGE_PREFETCHBASEUP32_REG) << 32; limit |= (uint64_t)pci_conf_read(pc, pa->pa_tag, - PCI_BRIDGE_PREFETCHLIMIT32_REG) << 32; + PCI_BRIDGE_PREFETCHLIMITUP32_REG) << 32; } if (base < limit) { second_configured = true; @@ -441,8 +434,8 @@ configure: pba.pba_dmat64 = pa->pa_dmat64; pba.pba_pc = pc; pba.pba_flags = pa->pa_flags & ~PCI_FLAGS_MRM_OKAY; - pba.pba_bus = PPB_BUSINFO_SECONDARY(busdata); - pba.pba_sub = PPB_BUSINFO_SUBORDINATE(busdata); + pba.pba_bus = PCI_BRIDGE_BUS_NUM_SECONDARY(busdata); + pba.pba_sub = PCI_BRIDGE_BUS_NUM_SUBORDINATE(busdata); pba.pba_bridgetag = &sc->sc_tag; pba.pba_intrswiz = pa->pa_intrswiz; pba.pba_intrtag = pa->pa_intrtag; Index: src/sys/dev/pci/ppbreg.h diff -u src/sys/dev/pci/ppbreg.h:1.9 src/sys/dev/pci/ppbreg.h:1.10 --- src/sys/dev/pci/ppbreg.h:1.9 Mon Jul 2 04:04:08 2018 +++ src/sys/dev/pci/ppbreg.h Fri Mar 1 09:26:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ppbreg.h,v 1.9 2018/07/02 04:04:08 msaitoh Exp $ */ +/* $NetBSD: ppbreg.h,v 1.10 2019/03/01 09:26:00 msaitoh Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. @@ -30,39 +30,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - * PCI-PCI Bridge chip register definitions and macros. - * Derived from information found in the ``PCI to PCI Bridge - * Architecture Specification, Revision 1.0, April 5, 1994.'' - * - * XXX much is missing. - */ - -/* - * Register offsets - */ -#define PPB_REG_BASE0 0x10 /* Base Addr Reg. 0 */ -#define PPB_REG_BASE1 0x14 /* Base Addr Reg. 1 */ -#define PPB_REG_BUSINFO 0x18 /* Bus information */ -#define PPB_REG_IOSTATUS 0x1c /* I/O base+lim & sec stat */ -#define PPB_REG_MEM 0x20 /* Memory base/limit */ -#define PPB_REG_PREFMEM 0x24 /* Pref Mem base/limit */ -#define PPB_REG_PREFBASE_HI32 0x28 /* Pref Mem base high bits */ -#define PPB_REG_PREFLIM_HI32 0x2c /* Pref Mem lim high bits */ -#define PPB_REG_IO_HI 0x30 /* I/O base+lim high bits */ -#define PPB_REG_BRIDGECONTROL 0x3c /* bridge control register */ - -/* - * Macros to extract the contents of the "Bus Info" register. - */ -#define PPB_BUSINFO_PRIMARY(bir) \ - ((bir >> 0) & 0xff) -#define PPB_BUSINFO_SECONDARY(bir) \ - ((bir >> 8) & 0xff) -#define PPB_BUSINFO_SUBORDINATE(bir) \ - ((bir >> 16) & 0xff) -#define PPB_BUSINFO_SECLAT(bir) \ - ((bir >> 24) & 0xff) +/* PCI-PCI Bridge chip macros. Register definitions are in pcireg.h. */ /* * Routine to translate between secondary bus interrupt pin/device number and @@ -70,42 +38,3 @@ */ #define PPB_INTERRUPT_SWIZZLE(pin, device) \ ((((pin) + (device) - 1) % 4) + 1) - -/* - * secondary bus I/O base and limits - */ -#define PPB_IOBASE_SHIFT 0 -#define PPB_IOLIMIT_SHIFT 8 -#define PPB_IO_MASK 0xf000 -#define PPB_IO_MIN 4096 - -/* - * secondary bus memory base and limits - */ -#define PPB_MEMBASE_SHIFT 0 -#define PPB_MEMLIMIT_SHIFT 16 -#define PPB_MEM_MASK 0xfff00000 -#define PPB_MEM_SHIFT 16 -#define PPB_MEM_MIN 0x00100000 - -/* - * bridge control register (see table 3.9 of ppb rev. 1.1) - * - * Note these are in the *upper* 16 bits of the Bridge Control - * Register (the bottom 16 are Interrupt Line and Interrupt Pin). - */ -#define PPB_BC_BITBASE 16 - -#define PPB_BC_PARITYERRORRESPONSE_ENABLE (1U << (0 + PPB_BC_BITBASE)) -#define PPB_BC_SERR_ENABLE (1U << (1 + PPB_BC_BITBASE)) -#define PPB_BC_ISA_ENABLE (1U << (2 + PPB_BC_BITBASE)) -#define PPB_BC_VGA_ENABLE (1U << (3 + PPB_BC_BITBASE)) -#define PPB_BC_VGA16_ENABLE (1U << (4 + PPB_BC_BITBASE)) -#define PPB_BC_MASTER_ABORT_MODE (1U << (5 + PPB_BC_BITBASE)) -#define PPB_BC_SECONDARY_RESET (1U << (6 + PPB_BC_BITBASE)) -#define PPB_BC_FAST_B2B_ENABLE (1U << (7 + PPB_BC_BITBASE)) - /* PCI 2.2 */ -#define PPB_BC_PRIMARY_DISCARD_TIMEOUT (1U << (8 + PPB_BC_BITBASE)) -#define PPB_BC_SECONDARY_DISCARD_TIMEOUT (1U << (9 + PPB_BC_BITBASE)) -#define PPB_BC_DISCARD_TIMER_STATUS (1U << (10 + PPB_BC_BITBASE)) -#define PPB_BC_DISCARD_TIMER_SERR_ENABLE (1U << (11 + PPB_BC_BITBASE))