diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/powerpc/sysdev/fsl_pci.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index ffb93ae9379b..b96885b4e996 100644 --- a/arch/powerpc/sysdev/fsl_pci.c +++ b/arch/powerpc/sysdev/fsl_pci.c | |||
| @@ -89,7 +89,7 @@ static int fsl_pci_dma_set_mask(struct device *dev, u64 dma_mask) | |||
| 89 | return 0; | 89 | return 0; |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | static int __init setup_one_atmu(struct ccsr_pci __iomem *pci, | 92 | static int setup_one_atmu(struct ccsr_pci __iomem *pci, |
| 93 | unsigned int index, const struct resource *res, | 93 | unsigned int index, const struct resource *res, |
| 94 | resource_size_t offset) | 94 | resource_size_t offset) |
| 95 | { | 95 | { |
| @@ -126,7 +126,7 @@ static int __init setup_one_atmu(struct ccsr_pci __iomem *pci, | |||
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | /* atmu setup for fsl pci/pcie controller */ | 128 | /* atmu setup for fsl pci/pcie controller */ |
| 129 | static void __init setup_pci_atmu(struct pci_controller *hose, | 129 | static void setup_pci_atmu(struct pci_controller *hose, |
| 130 | struct resource *rsrc) | 130 | struct resource *rsrc) |
| 131 | { | 131 | { |
| 132 | struct ccsr_pci __iomem *pci; | 132 | struct ccsr_pci __iomem *pci; |
| @@ -902,9 +902,42 @@ static int __devinit fsl_pci_probe(struct platform_device *pdev) | |||
| 902 | return 0; | 902 | return 0; |
| 903 | } | 903 | } |
| 904 | 904 | ||
| 905 | #ifdef CONFIG_PM | ||
| 906 | static int fsl_pci_resume(struct device *dev) | ||
| 907 | { | ||
| 908 | struct pci_controller *hose; | ||
| 909 | struct resource pci_rsrc; | ||
| 910 | |||
| 911 | hose = pci_find_hose_for_OF_device(dev->of_node); | ||
| 912 | if (!hose) | ||
| 913 | return -ENODEV; | ||
| 914 | |||
| 915 | if (of_address_to_resource(dev->of_node, 0, &pci_rsrc)) { | ||
| 916 | dev_err(dev, "Get pci register base failed."); | ||
| 917 | return -ENODEV; | ||
| 918 | } | ||
| 919 | |||
| 920 | setup_pci_atmu(hose, &pci_rsrc); | ||
| 921 | |||
| 922 | return 0; | ||
| 923 | } | ||
| 924 | |||
| 925 | static const struct dev_pm_ops pci_pm_ops = { | ||
| 926 | .resume = fsl_pci_resume, | ||
| 927 | }; | ||
| 928 | |||
| 929 | #define PCI_PM_OPS (&pci_pm_ops) | ||
| 930 | |||
| 931 | #else | ||
| 932 | |||
| 933 | #define PCI_PM_OPS NULL | ||
| 934 | |||
| 935 | #endif | ||
| 936 | |||
| 905 | static struct platform_driver fsl_pci_driver = { | 937 | static struct platform_driver fsl_pci_driver = { |
| 906 | .driver = { | 938 | .driver = { |
| 907 | .name = "fsl-pci", | 939 | .name = "fsl-pci", |
| 940 | .pm = PCI_PM_OPS, | ||
| 908 | .of_match_table = pci_ids, | 941 | .of_match_table = pci_ids, |
| 909 | }, | 942 | }, |
| 910 | .probe = fsl_pci_probe, | 943 | .probe = fsl_pci_probe, |
