From c4eefd753012467261cf221babd2e8639b81d3ca Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 10 Feb 2012 15:32:32 +0100 Subject: linux-ti33x-psp 3.2: update to 3.2.5 Runtime tested on a beaglebone A3 Signed-off-by: Koen Kooi Signed-off-by: Denys Dmytriyenko --- .../0008-bcma-support-for-suspend-and-resume.patch | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.1/0008-bcma-support-for-suspend-and-resume.patch (limited to 'recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.1/0008-bcma-support-for-suspend-and-resume.patch') diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.1/0008-bcma-support-for-suspend-and-resume.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.1/0008-bcma-support-for-suspend-and-resume.patch new file mode 100644 index 00000000..fa518499 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.1/0008-bcma-support-for-suspend-and-resume.patch @@ -0,0 +1,120 @@ +From 84c0b10f18c54e0f669f9ac81872db6aff1e59b4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Fri, 9 Dec 2011 22:16:07 +0100 +Subject: [PATCH 08/49] bcma: support for suspend and resume +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +commit 775ab52142b02237a54184238e922251c59a2b5c upstream. + +bcma used to lock up machine without enabling PCI or initializing CC. + +Signed-off-by: Rafał Miłecki +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman +--- + drivers/bcma/bcma_private.h | 3 +++ + drivers/bcma/host_pci.c | 37 +++++++++++++++++++++++++++++++++++++ + drivers/bcma/main.c | 16 ++++++++++++++++ + 3 files changed, 56 insertions(+), 0 deletions(-) + +diff --git a/drivers/bcma/bcma_private.h b/drivers/bcma/bcma_private.h +index 30a3085..fda56bd 100644 +--- a/drivers/bcma/bcma_private.h ++++ b/drivers/bcma/bcma_private.h +@@ -18,6 +18,9 @@ void bcma_bus_unregister(struct bcma_bus *bus); + int __init bcma_bus_early_register(struct bcma_bus *bus, + struct bcma_device *core_cc, + struct bcma_device *core_mips); ++#ifdef CONFIG_PM ++int bcma_bus_resume(struct bcma_bus *bus); ++#endif + + /* scan.c */ + int bcma_bus_scan(struct bcma_bus *bus); +diff --git a/drivers/bcma/host_pci.c b/drivers/bcma/host_pci.c +index 1b51d8b..990f5a8 100644 +--- a/drivers/bcma/host_pci.c ++++ b/drivers/bcma/host_pci.c +@@ -224,6 +224,41 @@ static void bcma_host_pci_remove(struct pci_dev *dev) + pci_set_drvdata(dev, NULL); + } + ++#ifdef CONFIG_PM ++static int bcma_host_pci_suspend(struct pci_dev *dev, pm_message_t state) ++{ ++ /* Host specific */ ++ pci_save_state(dev); ++ pci_disable_device(dev); ++ pci_set_power_state(dev, pci_choose_state(dev, state)); ++ ++ return 0; ++} ++ ++static int bcma_host_pci_resume(struct pci_dev *dev) ++{ ++ struct bcma_bus *bus = pci_get_drvdata(dev); ++ int err; ++ ++ /* Host specific */ ++ pci_set_power_state(dev, 0); ++ err = pci_enable_device(dev); ++ if (err) ++ return err; ++ pci_restore_state(dev); ++ ++ /* Bus specific */ ++ err = bcma_bus_resume(bus); ++ if (err) ++ return err; ++ ++ return 0; ++} ++#else /* CONFIG_PM */ ++# define bcma_host_pci_suspend NULL ++# define bcma_host_pci_resume NULL ++#endif /* CONFIG_PM */ ++ + static DEFINE_PCI_DEVICE_TABLE(bcma_pci_bridge_tbl) = { + { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x0576) }, + { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4331) }, +@@ -239,6 +274,8 @@ static struct pci_driver bcma_pci_bridge_driver = { + .id_table = bcma_pci_bridge_tbl, + .probe = bcma_host_pci_probe, + .remove = bcma_host_pci_remove, ++ .suspend = bcma_host_pci_suspend, ++ .resume = bcma_host_pci_resume, + }; + + int __init bcma_host_pci_init(void) +diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c +index 70c84b9..10f92b3 100644 +--- a/drivers/bcma/main.c ++++ b/drivers/bcma/main.c +@@ -240,6 +240,22 @@ int __init bcma_bus_early_register(struct bcma_bus *bus, + return 0; + } + ++#ifdef CONFIG_PM ++int bcma_bus_resume(struct bcma_bus *bus) ++{ ++ struct bcma_device *core; ++ ++ /* Init CC core */ ++ core = bcma_find_core(bus, BCMA_CORE_CHIPCOMMON); ++ if (core) { ++ bus->drv_cc.setup_done = false; ++ bcma_core_chipcommon_init(&bus->drv_cc); ++ } ++ ++ return 0; ++} ++#endif ++ + int __bcma_driver_register(struct bcma_driver *drv, struct module *owner) + { + drv->drv.name = drv->name; +-- +1.7.7.4 + -- cgit v1.2.3-54-g00ecf