Re: [linux-pm] [RFC 08/10] powerpc: dart iommu suspend
From: Pavel Machek <hidden>
Date: 2007-02-06 12:40:47
Also in:
linux-pm
Hi!
This implements suspend and resume code for the dart iommu. Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
quoted hunk ↗ jump to hunk
@@ -54,6 +54,9 @@ static unsigned long dart_tablesize; /* Virtual base address of the DART table */ static u32 *dart_vbase; +#ifdef CONFIG_SOFTWARE_SUSPEND +static u32 *dart_copy; +#endif /* Mapped base address for the dart */ static unsigned int __iomem *dart;@@ -346,6 +349,52 @@ void iommu_init_early_dart(void) pci_dma_ops = &dma_direct_ops; } +#ifdef CONFIG_SOFTWARE_SUSPEND +static int iommu_init_late_dart(void) +{ + unsigned long i; + struct page *p; + + /* this 16MB area is left unmapped because of caching + * considerations. that happens early so we can't mark + * it there, do it now instead */ + for (i = 0; i < (1<<24); i+= PAGE_SIZE) + SetPageNosave(virt_to_page((void*)((unsigned long)dart_tablebase + i))); +
80 columns rule?
quoted hunk ↗ jump to hunk
--- mb-wireless.orig/include/asm-powerpc/iommu.h 2007-02-05 14:24:05.014526864 +0100 +++ mb-wireless/include/asm-powerpc/iommu.h 2007-02-05 14:24:40.684526864 +0100@@ -108,6 +108,10 @@ static inline void pci_iommu_init(void) #endif extern void alloc_dart_table(void); +#if defined(CONFIG_SOFTWARE_SUSPEND) && defined(CONFIG_U3_DART) +extern void iommu_dart_save(void); +extern void iommu_dart_restore(void); +#endif
You can go without the ifdef; extra prototype does not do any harm. Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html