qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH 5/6] kvm/powerpc: Add MPC85xx board support


From: Hollis Blanchard
Subject: [Qemu-devel] Re: [PATCH 5/6] kvm/powerpc: Add MPC85xx board support
Date: Thu, 22 Jan 2009 10:05:51 -0600

On Thu, 2009-01-22 at 18:14 +0800, Liu Yu wrote:
> All MPC85xx boards use E500v1/v2 core.
> This patch add emulation of a virtual MPC85xx board,
> so that any MPC85xx host could run this emulation.
> 
> Only tested it on MPC8544DS and MPC8572DS hosts,
> but it should work on other MPC85xx boards.
> 
> Signed-off-by: Liu Yu <address@hidden>
...

> +struct board {
> +    const char *model;
> +    const char *compatible;
> +};
> +
> +#define BOARD_DEF(_model, _compatible)   \
> +    {                                    \
> +        .model       = _model,           \
> +        .compatible  = _compatible,      \
> +    }
> +
> +/* Supported host boards */
> +static const struct board mpc85xx_table[] = {
> +    BOARD_DEF("MPC8544DS",        "MPC8544DS"),         /* MPC8544DS */
> +    BOARD_DEF("fsl,MPC8572DS",    "fsl,MPC8572DS"),     /* MPC8572DS */
> +    BOARD_DEF("fsl,mpc8536ds",    "fsl,mpc8536ds"),     /* MPC8536DS */
> +    BOARD_DEF("MPC8548CDS",       "MPC8548CDS"),        /* MPC8548CDS */
> +    BOARD_DEF("MPC8555CDS",       "MPC8555CDS"),        /* MPC8555CDS */
> +    BOARD_DEF("MPC8541CDS",       "MPC8541CDS"),        /* MPC8541CDS */
> +    BOARD_DEF("MPC8540ADS",       "MPC8540ADS"),        /* MPC8540ADS */
> +    BOARD_DEF("MPC8560ADS",       "MPC8560ADS"),        /* MPC8560ADS */
> +    BOARD_DEF("MPC8568EMDS",      "MPC8568EMDS"),       /* MPC8568EMDS */
> +};
> +
> +#define BOARDS_NUM       (sizeof(mpc85xx_table)/sizeof(struct board))
...
> +static void *mpc85xx_load_device_tree(void *addr,
> +                                     uint32_t ramsize,
> +                                     target_phys_addr_t initrd_base,
> +                                     target_phys_addr_t initrd_size,
> +                                     const char *kernel_cmdline)
> +{
...
> +    if (kvm_enabled()) {
> +     FILE *fp;
> +     char *model;
> +     char const *compatible = NULL;
> +     struct dirent *dirp;
> +     DIR *dp;
> +     int i;
> +     char buf[128];
> +
> +     if ((fp = fopen("/proc/cpuinfo", "r")) == NULL) {
> +         printf("Can't open file /proc/cpuinfo\n");
> +         goto out;
> +     }
> +     while (fgets(buf, 128, fp) != NULL) {
> +         if (strncmp(buf, "model", 5) == 0) {
> +             model = buf + 9;
> +             break;
> +         }
> +     }
> +     fclose(fp);
> +
> +     for (i = 0; i < BOARDS_NUM; i++) {
> +         if (strncmp(model, mpc85xx_table[i].model,
> +                     strlen(mpc85xx_table[i].model)) == 0) {
> +             compatible = mpc85xx_table[i].compatible;
> +         }
> +     }
> +
> +     if (compatible == NULL) {
> +         printf("Unknow host board!\n");
> +         goto out;
> +     }
> +
> +     ret = qemu_devtree_setprop_string(fdt, "/", "compatible", compatible);
> +     if (ret < 0)
> +         fprintf(stderr, "couldn't set /compatible = %s\n", compatible);
> +
> +     if ((dp = opendir("/proc/device-tree/cpus/")) == NULL) {
> +         printf("Can't open directory /proc/device-tree/cpus/\n");
> +         goto out;
> +     }
> +
> +     buf[0] = '\0';
> +     while ((dirp = readdir(dp)) != NULL) {
> +         if (strncmp(dirp->d_name, "PowerPC", 7) == 0) {
> +             sprintf(buf, "/proc/device-tree/cpus/%s", dirp->d_name);
> +             break;
> +         }
> +     }
> +     closedir(dp);
> +     if (buf[0] == '\0') {
> +         printf("Unknow host!\n");
> +         goto out;
> +     }
> +     path = buf + 17;

I don't think you should do this at all. As long as the core is "known",
it doesn't matter what the host board is. You *always* emulate the
MPC8544DS board (that's what your device tree says). You should be able
to emulate a MPC8544DS on *any* e500v2 host board or chip.

For comparison, on 440 we have tested with Sequoia (440EPx) and Bamboo
(440EP) hosts, but qemu always emulates a Bamboo guest. The chips aren't
the same, but that's irrelevant because the core is (440 x5).

The rest of this patch looks good.

-- 
Hollis Blanchard
IBM Linux Technology Center





reply via email to

[Prev in Thread] Current Thread [Next in Thread]