[linux-pm] [RFC 08/10] powerpc: dart iommu suspend

Pavel Machek pavel at ucw.cz
Tue Feb 6 23:40:47 EST 2007


Hi!

> This implements suspend and resume code for the dart iommu.
> 
> Cc: Benjamin Herrenschmidt <benh at kernel.crashing.org>

> @@ -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?

> --- 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



More information about the Linuxppc-dev mailing list