diff options
-rw-r--r-- | drivers/pci/pcie/aer/aerdrv.c | 2 | ||||
-rw-r--r-- | drivers/pci/pcie/aer/aerdrv_core.c | 11 | ||||
-rw-r--r-- | drivers/pci/pcie/portdrv_bus.c | 7 | ||||
-rw-r--r-- | drivers/pci/pcie/portdrv_core.c | 15 | ||||
-rw-r--r-- | include/linux/pcieport_if.h | 9 |
5 files changed, 10 insertions, 34 deletions
diff --git a/drivers/pci/pcie/aer/aerdrv.c b/drivers/pci/pcie/aer/aerdrv.c index 6d30e795a10d..97a345927b55 100644 --- a/drivers/pci/pcie/aer/aerdrv.c +++ b/drivers/pci/pcie/aer/aerdrv.c | |||
@@ -53,7 +53,7 @@ static struct pci_error_handlers aer_error_handlers = { | |||
53 | 53 | ||
54 | static struct pcie_port_service_driver aerdriver = { | 54 | static struct pcie_port_service_driver aerdriver = { |
55 | .name = "aer", | 55 | .name = "aer", |
56 | .port_type = PCIE_RC_PORT, | 56 | .port_type = PCI_EXP_TYPE_ROOT_PORT, |
57 | .service = PCIE_PORT_SERVICE_AER, | 57 | .service = PCIE_PORT_SERVICE_AER, |
58 | 58 | ||
59 | .probe = aer_probe, | 59 | .probe = aer_probe, |
diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c index 5391a9b412e5..2fbbcee033a7 100644 --- a/drivers/pci/pcie/aer/aerdrv_core.c +++ b/drivers/pci/pcie/aer/aerdrv_core.c | |||
@@ -123,9 +123,9 @@ static int set_device_error_reporting(struct pci_dev *dev, void *data) | |||
123 | { | 123 | { |
124 | bool enable = *((bool *)data); | 124 | bool enable = *((bool *)data); |
125 | 125 | ||
126 | if (dev->pcie_type == PCIE_RC_PORT || | 126 | if ((dev->pcie_type == PCI_EXP_TYPE_ROOT_PORT) || |
127 | dev->pcie_type == PCIE_SW_UPSTREAM_PORT || | 127 | (dev->pcie_type == PCI_EXP_TYPE_UPSTREAM) || |
128 | dev->pcie_type == PCIE_SW_DOWNSTREAM_PORT) { | 128 | (dev->pcie_type == PCI_EXP_TYPE_DOWNSTREAM)) { |
129 | if (enable) | 129 | if (enable) |
130 | pci_enable_pcie_error_reporting(dev); | 130 | pci_enable_pcie_error_reporting(dev); |
131 | else | 131 | else |
@@ -437,10 +437,9 @@ static int find_aer_service_iter(struct device *device, void *data) | |||
437 | result = (struct find_aer_service_data *) data; | 437 | result = (struct find_aer_service_data *) data; |
438 | 438 | ||
439 | if (device->bus == &pcie_port_bus_type) { | 439 | if (device->bus == &pcie_port_bus_type) { |
440 | struct pcie_port_data *port_data; | 440 | struct pcie_device *pcie = to_pcie_device(device); |
441 | 441 | ||
442 | port_data = pci_get_drvdata(to_pcie_device(device)->port); | 442 | if (pcie->port->pcie_type == PCI_EXP_TYPE_DOWNSTREAM) |
443 | if (port_data->port_type == PCIE_SW_DOWNSTREAM_PORT) | ||
444 | result->is_downstream = 1; | 443 | result->is_downstream = 1; |
445 | 444 | ||
446 | driver = device->driver; | 445 | driver = device->driver; |
diff --git a/drivers/pci/pcie/portdrv_bus.c b/drivers/pci/pcie/portdrv_bus.c index ef3a4eeaebb4..18bf90f748f6 100644 --- a/drivers/pci/pcie/portdrv_bus.c +++ b/drivers/pci/pcie/portdrv_bus.c | |||
@@ -26,7 +26,6 @@ EXPORT_SYMBOL_GPL(pcie_port_bus_type); | |||
26 | static int pcie_port_bus_match(struct device *dev, struct device_driver *drv) | 26 | static int pcie_port_bus_match(struct device *dev, struct device_driver *drv) |
27 | { | 27 | { |
28 | struct pcie_device *pciedev; | 28 | struct pcie_device *pciedev; |
29 | struct pcie_port_data *port_data; | ||
30 | struct pcie_port_service_driver *driver; | 29 | struct pcie_port_service_driver *driver; |
31 | 30 | ||
32 | if (drv->bus != &pcie_port_bus_type || dev->bus != &pcie_port_bus_type) | 31 | if (drv->bus != &pcie_port_bus_type || dev->bus != &pcie_port_bus_type) |
@@ -38,10 +37,8 @@ static int pcie_port_bus_match(struct device *dev, struct device_driver *drv) | |||
38 | if (driver->service != pciedev->service) | 37 | if (driver->service != pciedev->service) |
39 | return 0; | 38 | return 0; |
40 | 39 | ||
41 | port_data = pci_get_drvdata(pciedev->port); | 40 | if ((driver->port_type != PCIE_ANY_PORT) && |
42 | 41 | (driver->port_type != pciedev->port->pcie_type)) | |
43 | if (driver->port_type != PCIE_ANY_PORT | ||
44 | && driver->port_type != port_data->port_type) | ||
45 | return 0; | 42 | return 0; |
46 | 43 | ||
47 | return 1; | 44 | return 1; |
diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c index 758e3d339287..9318b96bb255 100644 --- a/drivers/pci/pcie/portdrv_core.c +++ b/drivers/pci/pcie/portdrv_core.c | |||
@@ -296,7 +296,6 @@ static int pcie_device_init(struct pci_dev *pdev, int service, int irq) | |||
296 | */ | 296 | */ |
297 | int pcie_port_device_register(struct pci_dev *dev) | 297 | int pcie_port_device_register(struct pci_dev *dev) |
298 | { | 298 | { |
299 | struct pcie_port_data *port_data; | ||
300 | int status, capabilities, i, nr_service; | 299 | int status, capabilities, i, nr_service; |
301 | int irqs[PCIE_PORT_DEVICE_MAXSERVICES]; | 300 | int irqs[PCIE_PORT_DEVICE_MAXSERVICES]; |
302 | 301 | ||
@@ -305,17 +304,10 @@ int pcie_port_device_register(struct pci_dev *dev) | |||
305 | if (!capabilities) | 304 | if (!capabilities) |
306 | return -ENODEV; | 305 | return -ENODEV; |
307 | 306 | ||
308 | /* Allocate driver data for port device */ | ||
309 | port_data = kzalloc(sizeof(*port_data), GFP_KERNEL); | ||
310 | if (!port_data) | ||
311 | return -ENOMEM; | ||
312 | port_data->port_type = dev->pcie_type; | ||
313 | pci_set_drvdata(dev, port_data); | ||
314 | |||
315 | /* Enable PCI Express port device */ | 307 | /* Enable PCI Express port device */ |
316 | status = pci_enable_device(dev); | 308 | status = pci_enable_device(dev); |
317 | if (status) | 309 | if (status) |
318 | goto error_kfree; | 310 | return status; |
319 | pci_set_master(dev); | 311 | pci_set_master(dev); |
320 | /* | 312 | /* |
321 | * Initialize service irqs. Don't use service devices that | 313 | * Initialize service irqs. Don't use service devices that |
@@ -347,8 +339,6 @@ error_cleanup_irqs: | |||
347 | cleanup_service_irqs(dev); | 339 | cleanup_service_irqs(dev); |
348 | error_disable: | 340 | error_disable: |
349 | pci_disable_device(dev); | 341 | pci_disable_device(dev); |
350 | error_kfree: | ||
351 | kfree(port_data); | ||
352 | return status; | 342 | return status; |
353 | } | 343 | } |
354 | 344 | ||
@@ -416,12 +406,9 @@ static int remove_iter(struct device *dev, void *data) | |||
416 | */ | 406 | */ |
417 | void pcie_port_device_remove(struct pci_dev *dev) | 407 | void pcie_port_device_remove(struct pci_dev *dev) |
418 | { | 408 | { |
419 | struct pcie_port_data *port_data = pci_get_drvdata(dev); | ||
420 | |||
421 | device_for_each_child(&dev->dev, NULL, remove_iter); | 409 | device_for_each_child(&dev->dev, NULL, remove_iter); |
422 | cleanup_service_irqs(dev); | 410 | cleanup_service_irqs(dev); |
423 | pci_disable_device(dev); | 411 | pci_disable_device(dev); |
424 | kfree(port_data); | ||
425 | } | 412 | } |
426 | 413 | ||
427 | /** | 414 | /** |
diff --git a/include/linux/pcieport_if.h b/include/linux/pcieport_if.h index ec2e1eb1bacc..6775532b92a9 100644 --- a/include/linux/pcieport_if.h +++ b/include/linux/pcieport_if.h | |||
@@ -10,10 +10,7 @@ | |||
10 | #define _PCIEPORT_IF_H_ | 10 | #define _PCIEPORT_IF_H_ |
11 | 11 | ||
12 | /* Port Type */ | 12 | /* Port Type */ |
13 | #define PCIE_RC_PORT 4 /* Root port of RC */ | 13 | #define PCIE_ANY_PORT (~0) |
14 | #define PCIE_SW_UPSTREAM_PORT 5 /* Upstream port of Switch */ | ||
15 | #define PCIE_SW_DOWNSTREAM_PORT 6 /* Downstream port of Switch */ | ||
16 | #define PCIE_ANY_PORT 7 | ||
17 | 14 | ||
18 | /* Service Type */ | 15 | /* Service Type */ |
19 | #define PCIE_PORT_SERVICE_PME_SHIFT 0 /* Power Management Event */ | 16 | #define PCIE_PORT_SERVICE_PME_SHIFT 0 /* Power Management Event */ |
@@ -25,10 +22,6 @@ | |||
25 | #define PCIE_PORT_SERVICE_VC_SHIFT 3 /* Virtual Channel */ | 22 | #define PCIE_PORT_SERVICE_VC_SHIFT 3 /* Virtual Channel */ |
26 | #define PCIE_PORT_SERVICE_VC (1 << PCIE_PORT_SERVICE_VC_SHIFT) | 23 | #define PCIE_PORT_SERVICE_VC (1 << PCIE_PORT_SERVICE_VC_SHIFT) |
27 | 24 | ||
28 | struct pcie_port_data { | ||
29 | int port_type; /* Type of the port */ | ||
30 | }; | ||
31 | |||
32 | struct pcie_device { | 25 | struct pcie_device { |
33 | int irq; /* Service IRQ/MSI/MSI-X Vector */ | 26 | int irq; /* Service IRQ/MSI/MSI-X Vector */ |
34 | struct pci_dev *port; /* Root/Upstream/Downstream Port */ | 27 | struct pci_dev *port; /* Root/Upstream/Downstream Port */ |