misc: pci_endpoint_test: Fix test_reg_bar to be updated in pci_endpoint_test
[linux-2.6-block.git] / drivers / misc / pci_endpoint_test.c
index 29582fe571519754f7a49df7f605aaf9c0a3d4f8..7b015f2a1c6f43f56547be120ff3a97860876bdc 100644 (file)
 #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:
@@ -662,6 +670,7 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev,
        data = (struct pci_endpoint_test_data *)ent->driver_data;
        if (data) {
                test_reg_bar = data->test_reg_bar;
+               test->test_reg_bar = test_reg_bar;
                test->alignment = data->alignment;
                irq_type = data->irq_type;
        }
@@ -785,11 +794,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);