Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 245359
b: refs/heads/master
c: f5a592f
h: refs/heads/master
i:
  245357: d44cb75
  245355: 1211e5a
  245351: 747f6a8
  245343: d2583e1
v: v3
  • Loading branch information
Rafael J. Wysocki committed May 11, 2011
1 parent 729d296 commit 6a0c108
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 94 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f98bf4aa39ecce96020631cba910be094c87ac3c
refs/heads/master: f5a592f7d74e38c5007876c731e6bf5580072e63
3 changes: 0 additions & 3 deletions trunk/arch/powerpc/include/asm/mpic.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
#ifdef __KERNEL__

#include <linux/irq.h>
#include <linux/sysdev.h>
#include <asm/dcr.h>
#include <asm/msi_bitmap.h>

Expand Down Expand Up @@ -320,8 +319,6 @@ struct mpic
/* link */
struct mpic *next;

struct sys_device sysdev;

#ifdef CONFIG_PM
struct mpic_irq_save *save_data;
#endif
Expand Down
28 changes: 18 additions & 10 deletions trunk/arch/powerpc/platforms/cell/spu_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <linux/io.h>
#include <linux/mutex.h>
#include <linux/linux_logo.h>
#include <linux/syscore_ops.h>
#include <asm/spu.h>
#include <asm/spu_priv1.h>
#include <asm/spu_csa.h>
Expand Down Expand Up @@ -521,18 +522,8 @@ void spu_init_channels(struct spu *spu)
}
EXPORT_SYMBOL_GPL(spu_init_channels);

static int spu_shutdown(struct sys_device *sysdev)
{
struct spu *spu = container_of(sysdev, struct spu, sysdev);

spu_free_irqs(spu);
spu_destroy_spu(spu);
return 0;
}

static struct sysdev_class spu_sysdev_class = {
.name = "spu",
.shutdown = spu_shutdown,
};

int spu_add_sysdev_attr(struct sysdev_attribute *attr)
Expand Down Expand Up @@ -797,6 +788,22 @@ static inline void crash_register_spus(struct list_head *list)
}
#endif

static void spu_shutdown(void)
{
struct spu *spu;

mutex_lock(&spu_full_list_mutex);
list_for_each_entry(spu, &spu_full_list, full_list) {
spu_free_irqs(spu);
spu_destroy_spu(spu);
}
mutex_unlock(&spu_full_list_mutex);
}

static struct syscore_ops spu_syscore_ops = {
.shutdown = spu_shutdown,
};

static int __init init_spu_base(void)
{
int i, ret = 0;
Expand Down Expand Up @@ -830,6 +837,7 @@ static int __init init_spu_base(void)
crash_register_spus(&spu_full_list);
mutex_unlock(&spu_full_list_mutex);
spu_add_sysdev_attr(&attr_stat);
register_syscore_ops(&spu_syscore_ops);

spu_init_affinity();

Expand Down
42 changes: 11 additions & 31 deletions trunk/arch/powerpc/platforms/powermac/pic.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include <linux/signal.h>
#include <linux/pci.h>
#include <linux/interrupt.h>
#include <linux/sysdev.h>
#include <linux/syscore_ops.h>
#include <linux/adb.h>
#include <linux/pmu.h>
#include <linux/module.h>
Expand Down Expand Up @@ -677,7 +677,7 @@ static int pmacpic_find_viaint(void)
return viaint;
}

static int pmacpic_suspend(struct sys_device *sysdev, pm_message_t state)
static int pmacpic_suspend(void)
{
int viaint = pmacpic_find_viaint();

Expand All @@ -698,7 +698,7 @@ static int pmacpic_suspend(struct sys_device *sysdev, pm_message_t state)
return 0;
}

static int pmacpic_resume(struct sys_device *sysdev)
static void pmacpic_resume(void)
{
int i;

Expand All @@ -709,39 +709,19 @@ static int pmacpic_resume(struct sys_device *sysdev)
for (i = 0; i < max_real_irqs; ++i)
if (test_bit(i, sleep_save_mask))
pmac_unmask_irq(irq_get_irq_data(i));

return 0;
}

#endif /* CONFIG_PM && CONFIG_PPC32 */

static struct sysdev_class pmacpic_sysclass = {
.name = "pmac_pic",
static struct syscore_ops pmacpic_syscore_ops = {
.suspend = pmacpic_suspend,
.resume = pmacpic_resume,
};

static struct sys_device device_pmacpic = {
.id = 0,
.cls = &pmacpic_sysclass,
};

static struct sysdev_driver driver_pmacpic = {
#if defined(CONFIG_PM) && defined(CONFIG_PPC32)
.suspend = &pmacpic_suspend,
.resume = &pmacpic_resume,
#endif /* CONFIG_PM && CONFIG_PPC32 */
};

static int __init init_pmacpic_sysfs(void)
static int __init init_pmacpic_syscore(void)
{
#ifdef CONFIG_PPC32
if (max_irqs == 0)
return -ENODEV;
#endif
printk(KERN_DEBUG "Registering pmac pic with sysfs...\n");
sysdev_class_register(&pmacpic_sysclass);
sysdev_register(&device_pmacpic);
sysdev_driver_register(&pmacpic_sysclass, &driver_pmacpic);
register_syscore_ops(&pmacpic_syscore_ops);
return 0;
}
machine_subsys_initcall(powermac, init_pmacpic_sysfs);

machine_subsys_initcall(powermac, init_pmacpic_syscore);

#endif /* CONFIG_PM && CONFIG_PPC32 */
36 changes: 9 additions & 27 deletions trunk/arch/powerpc/sysdev/ipic.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#include <linux/stddef.h>
#include <linux/sched.h>
#include <linux/signal.h>
#include <linux/sysdev.h>
#include <linux/syscore_ops.h>
#include <linux/device.h>
#include <linux/bootmem.h>
#include <linux/spinlock.h>
Expand Down Expand Up @@ -902,7 +902,7 @@ static struct {
u32 sercr;
} ipic_saved_state;

static int ipic_suspend(struct sys_device *sdev, pm_message_t state)
static int ipic_suspend(void)
{
struct ipic *ipic = primary_ipic;

Expand Down Expand Up @@ -933,7 +933,7 @@ static int ipic_suspend(struct sys_device *sdev, pm_message_t state)
return 0;
}

static int ipic_resume(struct sys_device *sdev)
static void ipic_resume(void)
{
struct ipic *ipic = primary_ipic;

Expand All @@ -949,44 +949,26 @@ static int ipic_resume(struct sys_device *sdev)
ipic_write(ipic->regs, IPIC_SECNR, ipic_saved_state.secnr);
ipic_write(ipic->regs, IPIC_SERMR, ipic_saved_state.sermr);
ipic_write(ipic->regs, IPIC_SERCR, ipic_saved_state.sercr);

return 0;
}
#else
#define ipic_suspend NULL
#define ipic_resume NULL
#endif

static struct sysdev_class ipic_sysclass = {
.name = "ipic",
static struct syscore_ops ipic_syscore_ops = {
.suspend = ipic_suspend,
.resume = ipic_resume,
};

static struct sys_device device_ipic = {
.id = 0,
.cls = &ipic_sysclass,
};

static int __init init_ipic_sysfs(void)
static int __init init_ipic_syscore(void)
{
int rc;

if (!primary_ipic || !primary_ipic->regs)
return -ENODEV;
printk(KERN_DEBUG "Registering ipic with sysfs...\n");

rc = sysdev_class_register(&ipic_sysclass);
if (rc) {
printk(KERN_ERR "Failed registering ipic sys class\n");
return -ENODEV;
}
rc = sysdev_register(&device_ipic);
if (rc) {
printk(KERN_ERR "Failed registering ipic sys device\n");
return -ENODEV;
}
printk(KERN_DEBUG "Registering ipic system core operations\n");
register_syscore_ops(&ipic_syscore_ops);

return 0;
}

subsys_initcall(init_ipic_sysfs);
subsys_initcall(init_ipic_syscore);
48 changes: 26 additions & 22 deletions trunk/arch/powerpc/sysdev/mpic.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include <linux/spinlock.h>
#include <linux/pci.h>
#include <linux/slab.h>
#include <linux/syscore_ops.h>

#include <asm/ptrace.h>
#include <asm/signal.h>
Expand Down Expand Up @@ -1702,9 +1703,8 @@ void mpic_reset_core(int cpu)
#endif /* CONFIG_SMP */

#ifdef CONFIG_PM
static int mpic_suspend(struct sys_device *dev, pm_message_t state)
static void mpic_suspend_one(struct mpic *mpic)
{
struct mpic *mpic = container_of(dev, struct mpic, sysdev);
int i;

for (i = 0; i < mpic->num_sources; i++) {
Expand All @@ -1713,13 +1713,22 @@ static int mpic_suspend(struct sys_device *dev, pm_message_t state)
mpic->save_data[i].dest =
mpic_irq_read(i, MPIC_INFO(IRQ_DESTINATION));
}
}

static int mpic_suspend(void)
{
struct mpic *mpic = mpics;

while (mpic) {
mpic_suspend_one(mpic);
mpic = mpic->next;
}

return 0;
}

static int mpic_resume(struct sys_device *dev)
static void mpic_resume_one(struct mpic *mpic)
{
struct mpic *mpic = container_of(dev, struct mpic, sysdev);
int i;

for (i = 0; i < mpic->num_sources; i++) {
Expand All @@ -1746,33 +1755,28 @@ static int mpic_resume(struct sys_device *dev)
}
#endif
} /* end for loop */
}

return 0;
static void mpic_resume(void)
{
struct mpic *mpic = mpics;

while (mpic) {
mpic_resume_one(mpic);
mpic = mpic->next;
}
}
#endif

static struct sysdev_class mpic_sysclass = {
#ifdef CONFIG_PM
static struct syscore_ops mpic_syscore_ops = {
.resume = mpic_resume,
.suspend = mpic_suspend,
#endif
.name = "mpic",
};

static int mpic_init_sys(void)
{
struct mpic *mpic = mpics;
int error, id = 0;

error = sysdev_class_register(&mpic_sysclass);

while (mpic && !error) {
mpic->sysdev.cls = &mpic_sysclass;
mpic->sysdev.id = id++;
error = sysdev_register(&mpic->sysdev);
mpic = mpic->next;
}
return error;
register_syscore_ops(&mpic_syscore_ops);
return 0;
}

device_initcall(mpic_init_sys);
#endif

0 comments on commit 6a0c108

Please sign in to comment.