diff options
Diffstat (limited to 'arch/powerpc/sysdev/fsl_pci.c')
-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 01b62a62c635..5ba325bff3a2 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, |