Re: [RFC PATCH] pci: support for configurable PCI endpoint
Hi, Will resend the series with patch numbering. Thanks Kishon On Tuesday 13 September 2016 10:40 PM, Kishon Vijay Abraham I wrote: > This patch series > *) adds PCI endpoint core layer > *) modifies designware/dra7xx driver to be configured in EP mode > *) adds a PCI endpoint *test* function driver > > Known Limitation: > *) Does not support multi-function devices > > TODO: > *) access buffers in RC > *) MSI interrupts > *) Enable user space control for the RC side PCI driver > *) Adapt all other users of designware to use the new design > > HOW TO: > > 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 function device *instance*. The string > * before the . suffix will identify the driver this > * EP function will bind to. > * Just pci_epf_test is also valid. The . suffix is used > * if there are multiple PCI controllers and all of them wants > * to use the same function. > */ > # mkdir 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 */ > # cd pci_epf_test.0 > > /* These are the fields that can be configured */ > # ls > baseclass_codefunction revid vendorid > cache_line_size interrupt_pin subclass_code > deviceid peripheralsubsys_id > epc progif_code subsys_vendor_id > > /* The function driver will populate these fields with default values */ > # cat vendorid > 0x > > # cat interrupt_pin > 0x0001 > > /* The user can configure any of these fields */ > # echo 0x104c > vendorid > > /* > * 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/ > 5100.pci > > /* Now bind the function driver to the controller driver */ > # echo "5100.pcie" > epc > [ 494.743487] dra7-pcie 5100.pcie: no free inbound window > [ 494.749367] pci_epf_test pci_epf_test.0: failed to set BAR4 > [ 494.755238] dra7-pcie 5100.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: > * > # modprobe pci_endpoint_test > [8.197560] ** Testing pci-endpoint-test Device ** > [9.056990] Reset: OKAY > [9.059753] BAR1 OKAY > [9.062419] BAR2 OKAY > [9.069506] BAR3 OKAY > [9.071880] BAR4 NOT OKAY > [9.074618] BAR5 NOT OKAY > [9.379257] Legacy IRQ: OKAY > [9.382281] ** End Test ** > > /* > * Rightnow these tests gets executed as soon as the pci_endpoint_test > * module gets inserted. These will be modified so that user/user script > * can control this. Once the functionality for EP to access RC buffer > * is added, more tests can be added including throughput measurement tests. > */ > > > Kishon Vijay Abraham I (11): > pci: endpoint: add EP core layer to enable EP controller and EP > functions > pci: endpoint: introduce configfs entry for configuring EP functions > Documentation: PCI: guide to use PCI Endpoint Core Layer > pci: endpoint: functions: add an EP function to test PCI > pci: rename *host* directory to *controller* > pci: controller: split designware into *core* and *host* > pci: controller: designware: Add EP mode support > pci: controller: dra7xx: Add EP mode support > misc: add a new host side PCI endpoint test driver > ARM: dts: DRA7: Modify pcie1 dt node for EP mode > HACK: pci: controller: dra7xx: disable smart idle > > Documentation/PCI/00-INDEX |5 + > Documentation/PCI/pci-endpoint.txt | 199 ++ > Documentation/PCI/pci-test.txt | 79 > .../devicetree/bindings/pci/designware-pcie.txt| 26 +- > Documentation/devicetree/bindings/pci/ti-pci.txt | 30 +- > MAINTAINERS| 50 +-- > arch/arm/boot/dts/dra7.dtsi| 43 +-- > drivers/Makefile |4 + > drivers/misc/Kconfig
Re: [RFC PATCH] pci: support for configurable PCI endpoint
Hi, Will resend the series with patch numbering. Thanks Kishon On Tuesday 13 September 2016 10:40 PM, Kishon Vijay Abraham I wrote: > This patch series > *) adds PCI endpoint core layer > *) modifies designware/dra7xx driver to be configured in EP mode > *) adds a PCI endpoint *test* function driver > > Known Limitation: > *) Does not support multi-function devices > > TODO: > *) access buffers in RC > *) MSI interrupts > *) Enable user space control for the RC side PCI driver > *) Adapt all other users of designware to use the new design > > HOW TO: > > 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 function device *instance*. The string > * before the . suffix will identify the driver this > * EP function will bind to. > * Just pci_epf_test is also valid. The . suffix is used > * if there are multiple PCI controllers and all of them wants > * to use the same function. > */ > # mkdir 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 */ > # cd pci_epf_test.0 > > /* These are the fields that can be configured */ > # ls > baseclass_codefunction revid vendorid > cache_line_size interrupt_pin subclass_code > deviceid peripheralsubsys_id > epc progif_code subsys_vendor_id > > /* The function driver will populate these fields with default values */ > # cat vendorid > 0x > > # cat interrupt_pin > 0x0001 > > /* The user can configure any of these fields */ > # echo 0x104c > vendorid > > /* > * 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/ > 5100.pci > > /* Now bind the function driver to the controller driver */ > # echo "5100.pcie" > epc > [ 494.743487] dra7-pcie 5100.pcie: no free inbound window > [ 494.749367] pci_epf_test pci_epf_test.0: failed to set BAR4 > [ 494.755238] dra7-pcie 5100.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: > * > # modprobe pci_endpoint_test > [8.197560] ** Testing pci-endpoint-test Device ** > [9.056990] Reset: OKAY > [9.059753] BAR1 OKAY > [9.062419] BAR2 OKAY > [9.069506] BAR3 OKAY > [9.071880] BAR4 NOT OKAY > [9.074618] BAR5 NOT OKAY > [9.379257] Legacy IRQ: OKAY > [9.382281] ** End Test ** > > /* > * Rightnow these tests gets executed as soon as the pci_endpoint_test > * module gets inserted. These will be modified so that user/user script > * can control this. Once the functionality for EP to access RC buffer > * is added, more tests can be added including throughput measurement tests. > */ > > > Kishon Vijay Abraham I (11): > pci: endpoint: add EP core layer to enable EP controller and EP > functions > pci: endpoint: introduce configfs entry for configuring EP functions > Documentation: PCI: guide to use PCI Endpoint Core Layer > pci: endpoint: functions: add an EP function to test PCI > pci: rename *host* directory to *controller* > pci: controller: split designware into *core* and *host* > pci: controller: designware: Add EP mode support > pci: controller: dra7xx: Add EP mode support > misc: add a new host side PCI endpoint test driver > ARM: dts: DRA7: Modify pcie1 dt node for EP mode > HACK: pci: controller: dra7xx: disable smart idle > > Documentation/PCI/00-INDEX |5 + > Documentation/PCI/pci-endpoint.txt | 199 ++ > Documentation/PCI/pci-test.txt | 79 > .../devicetree/bindings/pci/designware-pcie.txt| 26 +- > Documentation/devicetree/bindings/pci/ti-pci.txt | 30 +- > MAINTAINERS| 50 +-- > arch/arm/boot/dts/dra7.dtsi| 43 +-- > drivers/Makefile |4 + > drivers/misc/Kconfig
[RFC PATCH] pci: support for configurable PCI endpoint
This patch series *) adds PCI endpoint core layer *) modifies designware/dra7xx driver to be configured in EP mode *) adds a PCI endpoint *test* function driver Known Limitation: *) Does not support multi-function devices TODO: *) access buffers in RC *) MSI interrupts *) Enable user space control for the RC side PCI driver *) Adapt all other users of designware to use the new design HOW TO: 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 function device *instance*. The string * before the . suffix will identify the driver this * EP function will bind to. * Just pci_epf_test is also valid. The . suffix is used * if there are multiple PCI controllers and all of them wants * to use the same function. */ # mkdir 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 */ # cd pci_epf_test.0 /* These are the fields that can be configured */ # ls baseclass_codefunction revid vendorid cache_line_size interrupt_pin subclass_code deviceid peripheralsubsys_id epc progif_code subsys_vendor_id /* The function driver will populate these fields with default values */ # cat vendorid 0x # cat interrupt_pin 0x0001 /* The user can configure any of these fields */ # echo 0x104c > vendorid /* * 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/ 5100.pci /* Now bind the function driver to the controller driver */ # echo "5100.pcie" > epc [ 494.743487] dra7-pcie 5100.pcie: no free inbound window [ 494.749367] pci_epf_test pci_epf_test.0: failed to set BAR4 [ 494.755238] dra7-pcie 5100.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: * # modprobe pci_endpoint_test [8.197560] ** Testing pci-endpoint-test Device ** [9.056990] Reset: OKAY [9.059753] BAR1 OKAY [9.062419] BAR2 OKAY [9.069506] BAR3 OKAY [9.071880] BAR4 NOT OKAY [9.074618] BAR5 NOT OKAY [9.379257] Legacy IRQ: OKAY [9.382281] ** End Test ** /* * Rightnow these tests gets executed as soon as the pci_endpoint_test * module gets inserted. These will be modified so that user/user script * can control this. Once the functionality for EP to access RC buffer * is added, more tests can be added including throughput measurement tests. */ Kishon Vijay Abraham I (11): pci: endpoint: add EP core layer to enable EP controller and EP functions pci: endpoint: introduce configfs entry for configuring EP functions Documentation: PCI: guide to use PCI Endpoint Core Layer pci: endpoint: functions: add an EP function to test PCI pci: rename *host* directory to *controller* pci: controller: split designware into *core* and *host* pci: controller: designware: Add EP mode support pci: controller: dra7xx: Add EP mode support misc: add a new host side PCI endpoint test driver ARM: dts: DRA7: Modify pcie1 dt node for EP mode HACK: pci: controller: dra7xx: disable smart idle Documentation/PCI/00-INDEX |5 + Documentation/PCI/pci-endpoint.txt | 199 ++ Documentation/PCI/pci-test.txt | 79 .../devicetree/bindings/pci/designware-pcie.txt| 26 +- Documentation/devicetree/bindings/pci/ti-pci.txt | 30 +- MAINTAINERS| 50 +-- arch/arm/boot/dts/dra7.dtsi| 43 +-- drivers/Makefile |4 + drivers/misc/Kconfig |7 + drivers/misc/Makefile |1 + drivers/misc/pci_endpoint_test.c | 291 +++ drivers/pci/Kconfig|3 +- drivers/pci/Makefile |3 - drivers/pci/{host => controller}/Kconfig | 109 +- drivers/pci/{host => controller}/Makefile
[RFC PATCH] pci: support for configurable PCI endpoint
This patch series *) adds PCI endpoint core layer *) modifies designware/dra7xx driver to be configured in EP mode *) adds a PCI endpoint *test* function driver Known Limitation: *) Does not support multi-function devices TODO: *) access buffers in RC *) MSI interrupts *) Enable user space control for the RC side PCI driver *) Adapt all other users of designware to use the new design HOW TO: 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 function device *instance*. The string * before the . suffix will identify the driver this * EP function will bind to. * Just pci_epf_test is also valid. The . suffix is used * if there are multiple PCI controllers and all of them wants * to use the same function. */ # mkdir 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 */ # cd pci_epf_test.0 /* These are the fields that can be configured */ # ls baseclass_codefunction revid vendorid cache_line_size interrupt_pin subclass_code deviceid peripheralsubsys_id epc progif_code subsys_vendor_id /* The function driver will populate these fields with default values */ # cat vendorid 0x # cat interrupt_pin 0x0001 /* The user can configure any of these fields */ # echo 0x104c > vendorid /* * 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/ 5100.pci /* Now bind the function driver to the controller driver */ # echo "5100.pcie" > epc [ 494.743487] dra7-pcie 5100.pcie: no free inbound window [ 494.749367] pci_epf_test pci_epf_test.0: failed to set BAR4 [ 494.755238] dra7-pcie 5100.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: * # modprobe pci_endpoint_test [8.197560] ** Testing pci-endpoint-test Device ** [9.056990] Reset: OKAY [9.059753] BAR1 OKAY [9.062419] BAR2 OKAY [9.069506] BAR3 OKAY [9.071880] BAR4 NOT OKAY [9.074618] BAR5 NOT OKAY [9.379257] Legacy IRQ: OKAY [9.382281] ** End Test ** /* * Rightnow these tests gets executed as soon as the pci_endpoint_test * module gets inserted. These will be modified so that user/user script * can control this. Once the functionality for EP to access RC buffer * is added, more tests can be added including throughput measurement tests. */ Kishon Vijay Abraham I (11): pci: endpoint: add EP core layer to enable EP controller and EP functions pci: endpoint: introduce configfs entry for configuring EP functions Documentation: PCI: guide to use PCI Endpoint Core Layer pci: endpoint: functions: add an EP function to test PCI pci: rename *host* directory to *controller* pci: controller: split designware into *core* and *host* pci: controller: designware: Add EP mode support pci: controller: dra7xx: Add EP mode support misc: add a new host side PCI endpoint test driver ARM: dts: DRA7: Modify pcie1 dt node for EP mode HACK: pci: controller: dra7xx: disable smart idle Documentation/PCI/00-INDEX |5 + Documentation/PCI/pci-endpoint.txt | 199 ++ Documentation/PCI/pci-test.txt | 79 .../devicetree/bindings/pci/designware-pcie.txt| 26 +- Documentation/devicetree/bindings/pci/ti-pci.txt | 30 +- MAINTAINERS| 50 +-- arch/arm/boot/dts/dra7.dtsi| 43 +-- drivers/Makefile |4 + drivers/misc/Kconfig |7 + drivers/misc/Makefile |1 + drivers/misc/pci_endpoint_test.c | 291 +++ drivers/pci/Kconfig|3 +- drivers/pci/Makefile |3 - drivers/pci/{host => controller}/Kconfig | 109 +- drivers/pci/{host => controller}/Makefile