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

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

 



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 <yu.liu@xxxxxxxxxxxxx>
...

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

--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux