lkml.org 
[lkml]   [2019]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 25/26] misc: pci_endpoint_test: Add support to test PCI EP in AM654x
    Date
    TI's AM654x PCIe EP has a restriction that BAR_0 is mapped to
    application registers. "PCIe Inbound Address Translation" section in
    AM65x Sitara Processors TRM (SPRUID7 – April 2018) describes BAR0 is
    reserved. Configure pci_endpoint_test to use BAR_2 instead.
    Also set alignment to 64K since "PCIe Subsystem Address Translation"
    section in TRM indicates minimum ATU window size is 64K.

    Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
    ---
    drivers/misc/pci_endpoint_test.c | 17 +++++++++++++++++
    1 file changed, 17 insertions(+)

    diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c
    index 29582fe57151..e015e8fa9bd3 100644
    --- a/drivers/misc/pci_endpoint_test.c
    +++ b/drivers/misc/pci_endpoint_test.c
    @@ -75,6 +75,11 @@
    #define PCI_ENDPOINT_TEST_IRQ_TYPE 0x24
    #define PCI_ENDPOINT_TEST_IRQ_NUMBER 0x28

    +#define PCI_DEVICE_ID_TI_AM654 0xb00c
    +
    +#define is_am654_pci_dev(pdev) \
    + ((pdev)->device == PCI_DEVICE_ID_TI_AM654)
    +
    static DEFINE_IDA(pci_endpoint_test_ida);

    #define to_endpoint_test(priv) container_of((priv), struct pci_endpoint_test, \
    @@ -588,6 +593,7 @@ static long pci_endpoint_test_ioctl(struct file *file, unsigned int cmd,
    int ret = -EINVAL;
    enum pci_barno bar;
    struct pci_endpoint_test *test = to_endpoint_test(file->private_data);
    + struct pci_dev *pdev = test->pdev;

    mutex_lock(&test->mutex);
    switch (cmd) {
    @@ -595,6 +601,8 @@ static long pci_endpoint_test_ioctl(struct file *file, unsigned int cmd,
    bar = arg;
    if (bar < 0 || bar > 5)
    goto ret;
    + if (is_am654_pci_dev(pdev) && bar == BAR_0)
    + goto ret;
    ret = pci_endpoint_test_bar(test, bar);
    break;
    case PCITEST_LEGACY_IRQ:
    @@ -785,11 +793,20 @@ static void pci_endpoint_test_remove(struct pci_dev *pdev)
    pci_disable_device(pdev);
    }

    +static const struct pci_endpoint_test_data am654_data = {
    + .test_reg_bar = BAR_2,
    + .alignment = SZ_64K,
    + .irq_type = IRQ_TYPE_MSI,
    +};
    +
    static const struct pci_device_id pci_endpoint_test_tbl[] = {
    { PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_DRA74x) },
    { PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_DRA72x) },
    { PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, 0x81c0) },
    { PCI_DEVICE(PCI_VENDOR_ID_SYNOPSYS, 0xedda) },
    + { PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_AM654),
    + .driver_data = (kernel_ulong_t)&am654_data
    + },
    { }
    };
    MODULE_DEVICE_TABLE(pci, pci_endpoint_test_tbl);
    --
    2.17.1
    \
     
     \ /
      Last update: 2019-03-25 09:39    [W:2.606 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site