Re: [RFC 08/10] powerpc: dart iommu suspend

Pavel Machek
2007-02-06T12:40:47Z

Hi!

> This implements suspend and resume code for the dart iommu.
>
> Cc: Benjamin Herrenschmidt <benh@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