svn commit: r250955 - in projects/pmac_pmu/sys: dev/ofw dev/pci powerpc/aim powerpc/ofw powerpc/powermac
Justin Hibbits
jhibbits at FreeBSD.org
Fri May 24 03:56:42 UTC 2013
Author: jhibbits
Date: Fri May 24 03:56:40 2013
New Revision: 250955
URL: http://svnweb.freebsd.org/changeset/base/250955
Log:
Mark the AIM Nexus device, and various buses, as early drivers, so they're
resumed early.
Modified:
projects/pmac_pmu/sys/dev/ofw/ofw_bus_subr.c
projects/pmac_pmu/sys/dev/pci/hostb_pci.c
projects/pmac_pmu/sys/dev/pci/pci.c
projects/pmac_pmu/sys/powerpc/aim/nexus.c
projects/pmac_pmu/sys/powerpc/ofw/ofw_pcib_pci.c
projects/pmac_pmu/sys/powerpc/ofw/ofw_pcibus.c
projects/pmac_pmu/sys/powerpc/powermac/uninorth.c
projects/pmac_pmu/sys/powerpc/powermac/uninorthpci.c
projects/pmac_pmu/sys/powerpc/powermac/uninorthvar.h
Modified: projects/pmac_pmu/sys/dev/ofw/ofw_bus_subr.c
==============================================================================
--- projects/pmac_pmu/sys/dev/ofw/ofw_bus_subr.c Fri May 24 03:52:54 2013 (r250954)
+++ projects/pmac_pmu/sys/dev/ofw/ofw_bus_subr.c Fri May 24 03:56:40 2013 (r250955)
@@ -247,6 +247,7 @@ ofw_bus_lookup_imap(phandle_t node, stru
("ofw_bus_lookup_imap: register size too small: %d < %d",
regsz, ii->opi_addrc));
rv = OF_getprop(node, "reg", reg, regsz);
+ printf("rv: %d, %x\n", rv, node);
if (rv < regsz)
panic("ofw_bus_lookup_imap: could not get reg property");
return (ofw_bus_search_intrmap(pintr, pintrsz, reg, ii->opi_addrc,
Modified: projects/pmac_pmu/sys/dev/pci/hostb_pci.c
==============================================================================
--- projects/pmac_pmu/sys/dev/pci/hostb_pci.c Fri May 24 03:52:54 2013 (r250954)
+++ projects/pmac_pmu/sys/dev/pci/hostb_pci.c Fri May 24 03:56:40 2013 (r250955)
@@ -264,4 +264,4 @@ static driver_t pci_hostb_driver = {
static devclass_t pci_hostb_devclass;
-DRIVER_MODULE(hostb, pci, pci_hostb_driver, pci_hostb_devclass, 0, 0);
+EARLY_DRIVER_MODULE(hostb, pci, pci_hostb_driver, pci_hostb_devclass, 0, 0, BUS_PASS_BUS);
Modified: projects/pmac_pmu/sys/dev/pci/pci.c
==============================================================================
--- projects/pmac_pmu/sys/dev/pci/pci.c Fri May 24 03:52:54 2013 (r250954)
+++ projects/pmac_pmu/sys/dev/pci/pci.c Fri May 24 03:56:40 2013 (r250955)
@@ -184,7 +184,7 @@ static device_method_t pci_methods[] = {
DEFINE_CLASS_0(pci, pci_driver, pci_methods, sizeof(struct pci_softc));
static devclass_t pci_devclass;
-DRIVER_MODULE(pci, pcib, pci_driver, pci_devclass, pci_modevent, 0);
+EARLY_DRIVER_MODULE(pci, pcib, pci_driver, pci_devclass, pci_modevent, 0, BUS_PASS_BUS);
MODULE_VERSION(pci, 1);
static char *pci_vendordata;
@@ -3397,7 +3397,7 @@ pci_resume(device_t dev)
case PCIC_MEMORY:
case PCIC_BRIDGE:
case PCIC_BASEPERIPH:
- DEVICE_RESUME(child);
+ error = DEVICE_RESUME(child);
break;
}
}
@@ -3410,11 +3410,11 @@ pci_resume(device_t dev)
case PCIC_BASEPERIPH:
break;
default:
- DEVICE_RESUME(child);
+ error = DEVICE_RESUME(child);
}
}
free(devlist, M_TEMP);
- return (0);
+ return (error);
}
static void
Modified: projects/pmac_pmu/sys/powerpc/aim/nexus.c
==============================================================================
--- projects/pmac_pmu/sys/powerpc/aim/nexus.c Fri May 24 03:52:54 2013 (r250954)
+++ projects/pmac_pmu/sys/powerpc/aim/nexus.c Fri May 24 03:56:40 2013 (r250955)
@@ -195,7 +195,7 @@ static driver_t nexus_driver = {
static devclass_t nexus_devclass;
-DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0);
+EARLY_DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0, BUS_PASS_BUS);
static int
nexus_probe(device_t dev)
@@ -523,4 +523,3 @@ nexus_ofw_get_compat(device_t bus, devic
return (dinfo->ndi_compatible);
}
-
Modified: projects/pmac_pmu/sys/powerpc/ofw/ofw_pcib_pci.c
==============================================================================
--- projects/pmac_pmu/sys/powerpc/ofw/ofw_pcib_pci.c Fri May 24 03:52:54 2013 (r250954)
+++ projects/pmac_pmu/sys/powerpc/ofw/ofw_pcib_pci.c Fri May 24 03:56:40 2013 (r250955)
@@ -82,7 +82,7 @@ struct ofw_pcib_softc {
DEFINE_CLASS_1(pcib, ofw_pcib_pci_driver, ofw_pcib_pci_methods,
sizeof(struct ofw_pcib_softc), pcib_driver);
-DRIVER_MODULE(ofw_pcib, pci, ofw_pcib_pci_driver, pcib_devclass, 0, 0);
+EARLY_DRIVER_MODULE(ofw_pcib, pci, ofw_pcib_pci_driver, pcib_devclass, 0, 0, BUS_PASS_BUS);
static int
ofw_pcib_pci_probe(device_t dev)
Modified: projects/pmac_pmu/sys/powerpc/ofw/ofw_pcibus.c
==============================================================================
--- projects/pmac_pmu/sys/powerpc/ofw/ofw_pcibus.c Fri May 24 03:52:54 2013 (r250954)
+++ projects/pmac_pmu/sys/powerpc/ofw/ofw_pcibus.c Fri May 24 03:56:40 2013 (r250955)
@@ -97,7 +97,7 @@ static devclass_t pci_devclass;
DEFINE_CLASS_1(pci, ofw_pcibus_driver, ofw_pcibus_methods,
sizeof(struct pci_softc), pci_driver);
-DRIVER_MODULE(ofw_pcibus, pcib, ofw_pcibus_driver, pci_devclass, 0, 0);
+EARLY_DRIVER_MODULE(ofw_pcibus, pcib, ofw_pcibus_driver, pci_devclass, 0, 0, BUS_PASS_BUS);
MODULE_VERSION(ofw_pcibus, 1);
MODULE_DEPEND(ofw_pcibus, pci, 1, 1, 1);
Modified: projects/pmac_pmu/sys/powerpc/powermac/uninorth.c
==============================================================================
--- projects/pmac_pmu/sys/powerpc/powermac/uninorth.c Fri May 24 03:52:54 2013 (r250954)
+++ projects/pmac_pmu/sys/powerpc/powermac/uninorth.c Fri May 24 03:56:40 2013 (r250955)
@@ -66,6 +66,7 @@ static MALLOC_DEFINE(M_UNIN, "unin", "un
static int unin_chip_probe(device_t);
static int unin_chip_attach(device_t);
static int unin_chip_suspend(device_t);
+static int unin_chip_resume(device_t);
/*
* Bus interface.
@@ -103,8 +104,8 @@ static device_method_t unin_chip_methods
/* Device interface */
DEVMETHOD(device_probe, unin_chip_probe),
DEVMETHOD(device_attach, unin_chip_attach),
- DEVMETHOD(device_suspend, unin_chip_suspend),
- DEVMETHOD(device_resume, unin_chip_resume),
+ DEVMETHOD(device_suspend, unin_chip_suspend),
+ DEVMETHOD(device_resume, unin_chip_resume),
/* Bus interface */
DEVMETHOD(bus_print_child, unin_chip_print_child),
@@ -146,7 +147,7 @@ static devclass_t unin_chip_devclass;
*/
static device_t unin_chip;
-DRIVER_MODULE(unin, nexus, unin_chip_driver, unin_chip_devclass, 0, 0);
+EARLY_DRIVER_MODULE(unin, nexus, unin_chip_driver, unin_chip_devclass, 0, 0, BUS_PASS_BUS);
/*
* Add an interrupt to the dev's resource list if present
@@ -633,16 +634,38 @@ unin_chip_get_devinfo(device_t dev, devi
return (&dinfo->udi_obdinfo);
}
-static int unin_chip_suspend(device_t dev)
+static int
+unin_chip_suspend(device_t dev)
{
int error;
error = bus_generic_suspend(dev);
- return 0;
+
+ if (error)
+ return (error);
+
+ if (bus_current_pass == BUS_PASS_BUS)
+ error = unin_chip_sleep(dev, 0);
+ else
+ error = EAGAIN;
+
+ return (error);
+}
+
+static int
+unin_chip_resume(device_t dev)
+{
+
+ if (bus_current_pass == BUS_PASS_BUS)
+ unin_chip_wake(dev);
+
+ return (bus_generic_resume(dev));
}
-int unin_chip_resume(device_t dev)
+int
+unin_chip_wake(device_t dev)
{
+
if (dev == NULL)
dev = unin_chip;
unin_update_reg(dev, UNIN_PWR_MGMT, UNIN_PWR_NORMAL, UNIN_PWR_MASK);
@@ -650,11 +673,11 @@ int unin_chip_resume(device_t dev)
unin_update_reg(dev, UNIN_HWINIT_STATE, UNIN_RUNNING, 0);
DELAY(100);
- bus_generic_resume(dev);
return (0);
}
-int unin_chip_sleep(device_t dev, int idle)
+int
+unin_chip_sleep(device_t dev, int idle)
{
if (dev == NULL)
dev = unin_chip;
@@ -666,5 +689,6 @@ int unin_chip_sleep(device_t dev, int id
else
unin_update_reg(dev, UNIN_PWR_MGMT, UNIN_PWR_SLEEP, UNIN_PWR_MASK);
DELAY(10);
+
return (0);
}
Modified: projects/pmac_pmu/sys/powerpc/powermac/uninorthpci.c
==============================================================================
--- projects/pmac_pmu/sys/powerpc/powermac/uninorthpci.c Fri May 24 03:52:54 2013 (r250954)
+++ projects/pmac_pmu/sys/powerpc/powermac/uninorthpci.c Fri May 24 03:56:40 2013 (r250955)
@@ -100,7 +100,7 @@ static devclass_t uninorth_devclass;
DEFINE_CLASS_1(pcib, uninorth_driver, uninorth_methods,
sizeof(struct uninorth_softc), ofw_pci_driver);
-DRIVER_MODULE(uninorth, nexus, uninorth_driver, uninorth_devclass, 0, 0);
+EARLY_DRIVER_MODULE(uninorth, nexus, uninorth_driver, uninorth_devclass, 0, 0, BUS_PASS_BUS);
static int
uninorth_probe(device_t dev)
Modified: projects/pmac_pmu/sys/powerpc/powermac/uninorthvar.h
==============================================================================
--- projects/pmac_pmu/sys/powerpc/powermac/uninorthvar.h Fri May 24 03:52:54 2013 (r250954)
+++ projects/pmac_pmu/sys/powerpc/powermac/uninorthvar.h Fri May 24 03:56:40 2013 (r250955)
@@ -28,6 +28,8 @@
#ifndef _POWERPC_POWERMAC_UNINORTHVAR_H_
#define _POWERPC_POWERMAC_UNINORTHVAR_H_
+#include <dev/ofw/ofw_bus_subr.h>
+#include <dev/ofw/ofw_pci.h>
#include <powerpc/ofw/ofw_pci.h>
struct uninorth_softc {
@@ -101,5 +103,5 @@ struct unin_chip_devinfo {
#define UNIN_MPIC_OUTPUT_ENABLE 0x4
extern int unin_chip_sleep(device_t dev, int idle);
-extern int unin_chip_resume(device_t dev);
+extern int unin_chip_wake(device_t dev);
#endif /* _POWERPC_POWERMAC_UNINORTHVAR_H_ */
More information about the svn-src-projects
mailing list