[OpenBIOS] [Qemu-devel] [PATCH] Enable support for PPC64 on qemu target v2

Laurent Vivier laurent at vivier.eu
Fri Feb 27 01:25:42 CET 2009


Le 27 févr. 09 à 00:39, Alexander Graf a écrit :

> This patch enables OpenBIOS to initialize on PPC64, enabling support  
> for -cpu 970fx.
> It gets up to the boot prompt and works rather good so far, though I  
> haven't been able to run a kernel yet.
>
> For more recent PowerPC CPUs the PTE layout has changed, so we need  
> to take that into account and create PTEs according to the new  
> layout and at the new physical positions.
>
> v2 takes Laurent's comments into account

Thank you

>
>
> Signed-off-by: Alexander Graf <alex at csgraf.de>
...
> Index: arch/ppc/qemu/mmutypes.h
> ===================================================================
> --- arch/ppc/qemu/mmutypes.h	(revision 459)
> +++ arch/ppc/qemu/mmutypes.h	(working copy)
> @@ -38,7 +38,28 @@
>  	unsigned long pp:2;	/* Page protection */
>  } mPTE_t;
>
> +typedef struct mPTE_64 {
> +	uint32_t avpn_low;	/* Abbreviated Virtual Page Number (unused) */
> +	uint32_t avpn:25;	/* Abbreviated Virtual Page Number */
> +	uint32_t sw:4;		/* Software Use */
> +	uint32_t  :1;		/* Reserved */
> +	uint32_t h:1;		/* Hash algorithm indicator */
> +	uint32_t v:1;		/* Entry is valid */
>
> +	uint32_t rpn_low;	/* Real (physical) page number (unused) */
> +	uint32_t rpn:20;	/* Real (physical) page number */
> +	uint32_t    :2;		/* Reserved */
> +	uint32_t ac:1;		/* Address Compare*/
> +	uint32_t r:1;		/* Referenced */
> +	uint32_t c:1;		/* Changed */
> +	uint32_t w:1;		/* Write-thru cache mode */
> +	uint32_t i:1;		/* Cache inhibited */
> +	uint32_t m:1;		/* Memory coherence */
> +	uint32_t g:1;		/* Guarded */
> +	uint32_t n:1;		/* No-Execute */
> +	uint32_t pp:2;		/* Page protection */
> +} mPTE_64_t;
> +

To answer to the comment of your previous patch:

Porting openBIOS to ppc64 seems useless as ppc32 can run on ppc64 (Do  
you want to run a database in openBIOS ? ;-) ). If I remember  
correctly there were some mails about this between Aurélien and  
BlueSwirl on openBIOS mailing list.

But I agree that "unsigned long"is not  a good choice in this case.

And a personal comment you must ignore: I don't like bitfield.

But if you use mask/shift and defines, you can use same values for 32  
and 64bit PTE (it's not true for all fields):

#define PTE_PAGE_PROTECTION 0x0003
#define PTE_NOEXEC  0x0004
...
#define PTE_CHANGED   0x0100
...
#define PTE_RPN	0xfffffffffffff000ULL

But as it is done now is not an issue for me, it's just, from a  
personal and cosmetic point of view, ugly...

I'll try to test and commit your patch tomorrow (well, tomorrow is  
today, now...)

Regards,
Laurent


More information about the OpenBIOS mailing list