PERFORCE change 176892 for review
John Baldwin
jhb at freebsd.org
Wed Apr 14 13:28:30 UTC 2010
On Wednesday 14 April 2010 7:24:04 am Rafal Jaworowski wrote:
> http://p4web.freebsd.org/@@176892?ac=10
>
> Change 176892 by raj at raj_fdt on 2010/04/14 11:23:50
>
> Clean up PCI-Express regs definitions and usage.
>
> LTSSM is MPC85XX PCI-E specific, so make it local to the pcib back-end
> driver.
>
> Pointed out by: jhb
>
> Affected files ...
>
> .. //depot/projects/fdt/sys/dev/pci/pcireg.h#4 edit
> .. //depot/projects/fdt/sys/powerpc/mpc85xx/pci_fdt.c#4 edit
>
> Differences ...
>
> ==== //depot/projects/fdt/sys/dev/pci/pcireg.h#4 (text+ko) ====
>
> @@ -218,17 +218,6 @@
>
> #define PCIR_PCCARDIF_2 0x44
>
> -
> -/* PCIE registers */
> -#define PCIR_DCR 0x54
> -#define PCIM_DCR_URR 0x0008
> -#define PCIM_DCR_FER 0x0004
> -#define PCIM_DCR_NFER 0x0002
> -#define PCIR_DSR 0x56
> -#define PCIR_LTSSM 0x404
> -#define PCIM_LTSSM_L0 0x16
> -
> -
> /* PCI device class, subclass and programming interface definitions */
>
> #define PCIC_OLD 0x00
> @@ -616,6 +605,9 @@
> #define PCIR_EXPRESS_DEVICE_CAP 0x4
> #define PCIM_EXP_CAP_MAX_PAYLOAD 0x0007
> #define PCIR_EXPRESS_DEVICE_CTL 0x8
> +#define PCIM_EXP_CTL_NFER_ENABLE 0x0002
> +#define PCIM_EXP_CTL_FER_ENABLE 0x0004
> +#define PCIM_EXP_CTL_URR_ENABLE 0x0008
> #define PCIM_EXP_CTL_RELAXED_ORD_ENABLE 0x0010
> #define PCIM_EXP_CTL_MAX_PAYLOAD 0x00e0
> #define PCIM_EXP_CTL_NOSNOOP_ENABLE 0x0800
>
> ==== //depot/projects/fdt/sys/powerpc/mpc85xx/pci_fdt.c#4 (text+ko) ====
>
> @@ -90,6 +90,9 @@
> #define REG_PEX_ERR_DR 0x0e00
> #define REG_PEX_ERR_EN 0x0e08
>
> +#define PCIR_LTSSM 0x404
> +#define LTSSM_STAT_L0 0x16
I suspect that this is a PCI-e extended capability which we should properly
support. I screwed up the name of pci_find_extcap(). It should probably be
renamed to 'pci_find_cap()' and a new 'pci_find_extcap()' that handles PCI-e
extended capabilities (which start at 0x400) should be added.
> +
> #define DEVFN(b, s, f) ((b << 16) | (s << 8) | f)
>
> struct fsl_pcib_softc {
> @@ -113,6 +116,7 @@
>
> int sc_busnr;
> int sc_pcie;
> + uint8_t sc_pcie_capreg; /* PCI-E Capability Reg Set */
>
> /* Devices that need special attention. */
> int sc_devfn_tundra;
> @@ -236,8 +240,7 @@
> phandle_t node;
> uint32_t cfgreg;
> int maxslot, subbus;
> - uint8_t ltssm;
> - uint8_t capptr;
> + uint8_t ltssm, capptr;
>
> sc = device_get_softc(dev);
> sc->sc_dev = dev;
> @@ -270,6 +273,7 @@
> break;
> case PCIY_EXPRESS:
> sc->sc_pcie = 1;
> + sc->sc_pcie_capreg = capptr;
> break;
> }
> capptr = (cfgreg >> 8) & 0xff;
> @@ -318,7 +322,7 @@
>
> if (sc->sc_pcie) {
> ltssm = fsl_pcib_cfgread(sc, 0, 0, 0, PCIR_LTSSM, 1);
> - if (ltssm < PCIM_LTSSM_L0) {
> + if (ltssm < LTSSM_STAT_L0) {
> if (bootverbose)
> printf("PCI %d: no PCIE link, skipping\n",
> device_get_unit(dev));
> @@ -885,18 +889,25 @@
> bus_space_write_4(sc->sc_bst, sc->sc_bsh, REG_PEX_ERR_DR,
> 0xffffffff);
>
> - dsr = fsl_pcib_cfgread(sc, 0, 0, 0, PCIR_DSR, 2);
> + dsr = fsl_pcib_cfgread(sc, 0, 0, 0,
> + sc->sc_pcie_capreg + PCIR_EXPRESS_DEVICE_STA, 2);
> if (dsr)
> - fsl_pcib_cfgwrite(sc, 0, 0, 0, PCIR_DSR, 0xffff, 2);
> + fsl_pcib_cfgwrite(sc, 0, 0, 0,
> + sc->sc_pcie_capreg + PCIR_EXPRESS_DEVICE_STA,
> + 0xffff, 2);
>
> /* Enable all errors reporting */
> err_en = 0x00bfff00;
> - bus_space_write_4(sc->sc_bst, sc->sc_bsh, REG_PEX_ERR_EN, err_en);
> + bus_space_write_4(sc->sc_bst, sc->sc_bsh, REG_PEX_ERR_EN,
> + err_en);
>
> /* Enable error reporting: URR, FER, NFER */
> - dcr = fsl_pcib_cfgread(sc, 0, 0, 0, PCIR_DCR, 4);
> - dcr |= PCIM_DCR_URR | PCIM_DCR_FER | PCIM_DCR_NFER;
> - fsl_pcib_cfgwrite(sc, 0, 0, 0, PCIR_DCR, dcr, 4);
> + dcr = fsl_pcib_cfgread(sc, 0, 0, 0,
> + sc->sc_pcie_capreg + PCIR_EXPRESS_DEVICE_CTL, 4);
> + dcr |= PCIM_EXP_CTL_URR_ENABLE | PCIM_EXP_CTL_FER_ENABLE |
> + PCIM_EXP_CTL_NFER_ENABLE;
> + fsl_pcib_cfgwrite(sc, 0, 0, 0,
> + sc->sc_pcie_capreg + PCIR_EXPRESS_DEVICE_CTL, dcr, 4);
> }
> }
>
>
--
John Baldwin
More information about the p4-projects
mailing list