1*5a694056SMiao Yan /* 2*5a694056SMiao Yan * Copyright (C) 2015, Miao Yan <yanmiaobest@gmail.com> 3*5a694056SMiao Yan * 4*5a694056SMiao Yan * SPDX-License-Identifier: GPL-2.0+ 5*5a694056SMiao Yan */ 6*5a694056SMiao Yan 7*5a694056SMiao Yan #include <common.h> 8*5a694056SMiao Yan #include <cpu.h> 9*5a694056SMiao Yan #include <dm.h> 10*5a694056SMiao Yan #include <errno.h> 11*5a694056SMiao Yan #include <asm/cpu.h> 12*5a694056SMiao Yan #include <asm/fw_cfg.h> 13*5a694056SMiao Yan 14*5a694056SMiao Yan DECLARE_GLOBAL_DATA_PTR; 15*5a694056SMiao Yan 16*5a694056SMiao Yan int cpu_qemu_bind(struct udevice *dev) 17*5a694056SMiao Yan { 18*5a694056SMiao Yan struct cpu_platdata *plat = dev_get_parent_platdata(dev); 19*5a694056SMiao Yan 20*5a694056SMiao Yan plat->cpu_id = fdtdec_get_int(gd->fdt_blob, dev->of_offset, 21*5a694056SMiao Yan "intel,apic-id", -1); 22*5a694056SMiao Yan 23*5a694056SMiao Yan return 0; 24*5a694056SMiao Yan } 25*5a694056SMiao Yan 26*5a694056SMiao Yan int cpu_qemu_get_desc(struct udevice *dev, char *buf, int size) 27*5a694056SMiao Yan { 28*5a694056SMiao Yan if (size < CPU_MAX_NAME_LEN) 29*5a694056SMiao Yan return -ENOSPC; 30*5a694056SMiao Yan 31*5a694056SMiao Yan cpu_get_name(buf); 32*5a694056SMiao Yan 33*5a694056SMiao Yan return 0; 34*5a694056SMiao Yan } 35*5a694056SMiao Yan 36*5a694056SMiao Yan static int cpu_qemu_get_count(struct udevice *dev) 37*5a694056SMiao Yan { 38*5a694056SMiao Yan return qemu_fwcfg_online_cpus(); 39*5a694056SMiao Yan } 40*5a694056SMiao Yan 41*5a694056SMiao Yan static const struct cpu_ops cpu_qemu_ops = { 42*5a694056SMiao Yan .get_desc = cpu_qemu_get_desc, 43*5a694056SMiao Yan .get_count = cpu_qemu_get_count, 44*5a694056SMiao Yan }; 45*5a694056SMiao Yan 46*5a694056SMiao Yan static const struct udevice_id cpu_qemu_ids[] = { 47*5a694056SMiao Yan { .compatible = "cpu-qemu" }, 48*5a694056SMiao Yan { } 49*5a694056SMiao Yan }; 50*5a694056SMiao Yan 51*5a694056SMiao Yan U_BOOT_DRIVER(cpu_qemu_drv) = { 52*5a694056SMiao Yan .name = "cpu_qemu", 53*5a694056SMiao Yan .id = UCLASS_CPU, 54*5a694056SMiao Yan .of_match = cpu_qemu_ids, 55*5a694056SMiao Yan .bind = cpu_qemu_bind, 56*5a694056SMiao Yan .ops = &cpu_qemu_ops, 57*5a694056SMiao Yan }; 58