lkml.org 
[lkml]   [2017]   [Jan]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH 00/37] PCI: Support for configurable PCI endpoint
    Date
    The RFC series that was sent before this patch series can be found at [1].
    The patches are split here so that it can be better reviewed.

    This main purpose of this patch series is to
    *) add PCI endpoint core layer
    *) modifie designware/dra7xx driver to be configured in EP mode
    *) add a PCI endpoint *test* function driver and corresponding host
    driver

    Major Improvements from RFC:
    *) support multi-function devices (hw supported not virtual)
    *) Access host side buffers
    *) Raise MSI interrupts
    *) Add user space program to use the host side PCI driver
    *) Adapt all other users of designware to use the new design (only
    compile tested. Since I have only dra7xx boards, the new design
    has only been tested in dra7xx. I'd require the help of others
    to test the platforms they have access to).

    This patch series has been developed on top of 4.10-rc1, [2] & [3]

    [1] -> https://lwn.net/Articles/700605/
    [2] -> https://lkml.org/lkml/2016/12/28/34
    [3] -> https://lkml.org/lkml/2017/1/11/238

    I've also pushed the tree to
    git://git.ti.com/linux-phy/linux-phy.git pci_ep_v1

    Using PCI EPF Test:
    ON THE EP SIDE:
    ***************
    /* EP function is configured using configfs */
    # mount -t configfs none /sys/kernel/config

    /* PCI EP core layer creates "pci_ep" entry in configfs */
    # cd /sys/kernel/config/pci_ep/

    /*
    * This is the 1st step in creating an endpoint function. This
    * creates the endpoint device.
    */
    # mkdir dev

    /*
    * dev has 2 entries. *epc* for binding a EPC device and *epf*
    * is a directory containing all the functions of the endpoint
    */
    # ls dev
    epc epf

    /*
    * This creates the endpoint function device *instance*. The string
    * before the .<num> suffix will identify the driver this
    * EP function will bind to.
    * Just pci_epf_test is also valid. The .<num> suffix is used
    * if there are multiple PCI controllers and all of them wants
    * to use the same function.
    */
    # mkdir dev/epf/pci_epf_test.0

    /*
    * When the above command is given, the function device will
    * also be bound to a function driver. To find the list of
    * function drivers available in the system, use the following
    * command. To create a new driver, the following can be referred
    * drivers/pci/endpoint/functions/pci-epf-test.c
    */
    # ls /sys/bus/pci-epf/drivers
    pci_epf_test

    /* Now configure the endpoint function */
    /* These are the fields that can be configured */
    # ls dev/epf/pci_epf_test.0/
    baseclass_code function progif_code subsys_id
    cache_line_size interrupt_pin revid subsys_vendor_id
    deviceid msi_interrupts subclass_code vendorid

    /* The function driver will populate these fields with default values */
    # cat dev/epf/pci_epf_test.0/vendorid
    0xffff

    # cat dev/epf/pci_epf_test.0/interrupt_pin
    0x0001

    /* The user can configure any of these fields */
    # echo 0x104c > dev/epf/pci_epf_test.0/vendorid
    # echo 16 > dev/epf/pci_epf_test.0/msi_interrupts

    /*
    * Next is binding this function driver to the controller driver. In
    * order to find the possible controller drivers that this function
    * driver can be bound to, the following sysfs entry can be used
    */
    # ls /sys/class/pci_epc/
    51000000.pci

    /* Now bind the function driver to the controller driver */
    # echo "51000000.pcie_ep" > epc
    [ 494.743487] dra7-pcie 51000000.pcie: no free inbound window
    [ 494.749367] pci_epf_test pci_epf_test.0: failed to set BAR4
    [ 494.755238] dra7-pcie 51000000.pcie: no free inbound window
    [ 494.761451] pci_epf_test pci_epf_test.0: failed to set BAR5

    /*
    * the above error messages are due to non availability of free
    * inbound windows. So the function drivers in dra7xx can use
    * only 4 (BAR0..BAR3) BARs
    */

    /****** PCI endpoint is configured ******/

    ON THE HOST SIDE:
    *****************
    # ./pcitest.sh
    BAR tests

    BAR0: OKAY
    BAR1: OKAY
    BAR2: OKAY
    BAR3: OKAY
    BAR4: NOT OKAY
    BAR5: NOT OKAY

    Interrupt tests

    LEGACY IRQ: NOT OKAY
    MSI1: OKAY
    MSI2: OKAY
    MSI3: OKAY
    MSI4: OKAY
    MSI5: OKAY
    MSI6: OKAY
    MSI7: OKAY
    MSI8: OKAY
    MSI9: OKAY
    MSI10: OKAY
    MSI11: OKAY
    MSI12: OKAY
    MSI13: OKAY
    MSI14: OKAY
    MSI15: OKAY
    MSI16: OKAY
    MSI17: NOT OKAY
    MSI18: NOT OKAY
    MSI19: NOT OKAY
    MSI20: NOT OKAY
    MSI21: NOT OKAY
    MSI22: NOT OKAY
    MSI23: NOT OKAY
    MSI24: NOT OKAY
    MSI25: NOT OKAY
    MSI26: NOT OKAY
    MSI27: NOT OKAY
    MSI28: NOT OKAY
    MSI29: NOT OKAY
    MSI30: NOT OKAY
    MSI31: NOT OKAY
    MSI32: NOT OKAY

    Read Tests

    READ ( 1 bytes): OKAY
    READ ( 1024 bytes): OKAY
    READ ( 1025 bytes): OKAY
    READ (1024000 bytes): OKAY
    READ (1024001 bytes): OKAY

    Write Tests

    WRITE ( 1 bytes): OKAY
    WRITE ( 1024 bytes): OKAY
    WRITE ( 1025 bytes): OKAY
    WRITE (1024000 bytes): OKAY
    WRITE (1024001 bytes): OKAY

    Copy Tests

    COPY ( 1 bytes): OKAY
    COPY ( 1024 bytes): OKAY
    COPY ( 1025 bytes): OKAY
    COPY (1024000 bytes): OKAY
    COPY (1024001 bytes): OKAY

    Kishon Vijay Abraham I (37):
    PCI: dwc: dra7xx: Group all host related setup in add_pcie_port
    PCI: dwc: designware: Add new *ops* for cpu addr fixup
    PCI: dwc: dra7xx: Populate cpu_addr_fixup ops
    PCI: dwc: designware: Move the register defines to designware header
    file
    PCI: dwc: Add platform_set_drvdata
    PCI: dwc: Rename cfg_read/cfg_write to read/write
    PCI: dwc: designware: Get device pointer at the start of
    dw_pcie_host_init
    PCI: dwc: Split *struct pcie_port* into host only and core structures
    PCI: dwc: designware: Parse *num-lanes* property in dw_pcie_setup_rc
    PCI: dwc: designware: Fix style errors in pcie-designware.c
    PCI: dwc: Split pcie-designware.c into host and core files
    PCI: dwc: Create a new config symbol to enable pci dwc host
    PCI: dwc: Remove dependency of designware to CONFIG_PCI
    PCI: endpoint: Add EP core layer to enable EP controller and EP
    functions
    Documentation: PCI: Guide to use PCI Endpoint Core Layer
    PCI: endpoint: Introduce configfs entry for configuring EP functions
    Documentation: PCI: Guide to use pci endpoint configfs
    Documentation: PCI: Add specification for the *pci test* function
    device
    PCI: endpoint: functions: Add an EP function to test PCI
    Documentation: PCI: Add binding documentation for pci-test endpoint
    function
    PCI: dwc: Modify dbi accessors to take dbi_base as argument
    PCI: dwc: Modify dbi accessors to access data of 4/2/1 bytes
    PCI: dwc: Add *ops* to start and stop pcie link
    PCI: dwc: designware: Add EP mode support
    dt-bindings: PCI: Add dt bindings for pci designware EP mode
    PCI: dwc: dra7xx: Facilitate wrapper and msi interrupts to be enabled
    independently
    PCI: dwc: dra7xx: Add EP mode support
    dt-bindings: PCI: dra7xx: Add dt bindings for pci dra7xx EP mode
    PCI: dwc: dra7xx: Workaround for errata id i870
    dt-bindings: PCI: dra7xx: Add dt bindings to enable legacy mode
    misc: Add host side pci driver for pci test function device
    Documentation: misc-devices: Add Documentation for pci-endpoint-test
    driver
    tools: PCI: Add a userspace tool to test PCI endpoint
    tools: PCI: Add sample test script to invoke pcitest
    MAINTAINERS: add PCI EP maintainer
    ARM: DRA7: clockdomain: Change the CLKTRCTRL of CM_PCIE_CLKSTCTRL to
    SW_WKUP
    ARM: dts: DRA7: Add pcie1 dt node for EP mode

    Documentation/PCI/00-INDEX | 8 +
    .../PCI/endpoint/function/binding/pci-test.txt | 17 +
    Documentation/PCI/endpoint/pci-endpoint-cfs.txt | 84 ++
    Documentation/PCI/endpoint/pci-endpoint.txt | 190 +++++
    Documentation/PCI/endpoint/pci-test-function.txt | 66 ++
    .../devicetree/bindings/pci/designware-pcie.txt | 26 +-
    Documentation/devicetree/bindings/pci/ti-pci.txt | 41 +-
    Documentation/misc-devices/pci-endpoint-test.txt | 35 +
    MAINTAINERS | 9 +
    arch/arm/boot/dts/am572x-idk.dts | 7 +-
    arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi | 7 +-
    arch/arm/boot/dts/dra7-evm.dts | 4 +
    arch/arm/boot/dts/dra7.dtsi | 22 +-
    arch/arm/boot/dts/dra72-evm-common.dtsi | 4 +
    arch/arm/mach-omap2/clockdomains7xx_data.c | 2 +-
    drivers/Makefile | 5 +
    drivers/misc/Kconfig | 7 +
    drivers/misc/Makefile | 1 +
    drivers/misc/pci_endpoint_test.c | 533 ++++++++++++
    drivers/pci/Kconfig | 1 +
    drivers/pci/Makefile | 3 -
    drivers/pci/dwc/Kconfig | 73 +-
    drivers/pci/dwc/Makefile | 6 +-
    drivers/pci/dwc/pci-dra7xx.c | 372 +++++++--
    drivers/pci/dwc/pci-exynos.c | 83 +-
    drivers/pci/dwc/pci-imx6.c | 142 ++--
    drivers/pci/dwc/pci-keystone-dw.c | 91 +-
    drivers/pci/dwc/pci-keystone.c | 56 +-
    drivers/pci/dwc/pci-keystone.h | 4 +-
    drivers/pci/dwc/pci-layerscape.c | 93 ++-
    drivers/pci/dwc/pcie-armada8k.c | 92 ++-
    drivers/pci/dwc/pcie-artpec6.c | 51 +-
    drivers/pci/dwc/pcie-designware-ep.c | 342 ++++++++
    drivers/pci/dwc/pcie-designware-host.c | 620 ++++++++++++++
    drivers/pci/dwc/pcie-designware-plat.c | 29 +-
    drivers/pci/dwc/pcie-designware.c | 868 ++++----------------
    drivers/pci/dwc/pcie-designware.h | 254 +++++-
    drivers/pci/dwc/pcie-hisi.c | 60 +-
    drivers/pci/dwc/pcie-qcom.c | 72 +-
    drivers/pci/dwc/pcie-spear13xx.c | 85 +-
    drivers/pci/endpoint/Kconfig | 25 +
    drivers/pci/endpoint/Makefile | 7 +
    drivers/pci/endpoint/functions/Kconfig | 12 +
    drivers/pci/endpoint/functions/Makefile | 5 +
    drivers/pci/endpoint/functions/pci-epf-test.c | 513 ++++++++++++
    drivers/pci/endpoint/pci-ep-cfs.c | 427 ++++++++++
    drivers/pci/endpoint/pci-epc-core.c | 548 ++++++++++++
    drivers/pci/endpoint/pci-epc-mem.c | 143 ++++
    drivers/pci/endpoint/pci-epf-core.c | 347 ++++++++
    include/linux/mod_devicetable.h | 10 +
    include/linux/pci-epc.h | 141 ++++
    include/linux/pci-epf.h | 160 ++++
    include/uapi/linux/Kbuild | 1 +
    include/uapi/linux/pcitest.h | 19 +
    tools/pci/pcitest.c | 186 +++++
    tools/pci/pcitest.sh | 56 ++
    56 files changed, 5880 insertions(+), 1185 deletions(-)
    create mode 100644 Documentation/PCI/endpoint/function/binding/pci-test.txt
    create mode 100644 Documentation/PCI/endpoint/pci-endpoint-cfs.txt
    create mode 100644 Documentation/PCI/endpoint/pci-endpoint.txt
    create mode 100644 Documentation/PCI/endpoint/pci-test-function.txt
    create mode 100644 Documentation/misc-devices/pci-endpoint-test.txt
    create mode 100644 drivers/misc/pci_endpoint_test.c
    create mode 100644 drivers/pci/dwc/pcie-designware-ep.c
    create mode 100644 drivers/pci/dwc/pcie-designware-host.c
    create mode 100644 drivers/pci/endpoint/Kconfig
    create mode 100644 drivers/pci/endpoint/Makefile
    create mode 100644 drivers/pci/endpoint/functions/Kconfig
    create mode 100644 drivers/pci/endpoint/functions/Makefile
    create mode 100644 drivers/pci/endpoint/functions/pci-epf-test.c
    create mode 100644 drivers/pci/endpoint/pci-ep-cfs.c
    create mode 100644 drivers/pci/endpoint/pci-epc-core.c
    create mode 100644 drivers/pci/endpoint/pci-epc-mem.c
    create mode 100644 drivers/pci/endpoint/pci-epf-core.c
    create mode 100644 include/linux/pci-epc.h
    create mode 100644 include/linux/pci-epf.h
    create mode 100644 include/uapi/linux/pcitest.h
    create mode 100644 tools/pci/pcitest.c
    create mode 100644 tools/pci/pcitest.sh

    --
    1.7.9.5

    \
     
     \ /
      Last update: 2017-01-12 11:43    [W:0.039 / U:1.380 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site