def METHOD_NAME(tree: fdt.FdtParser, devices: List[device.WrappedNode]) -> List[dict]:
    cpus = cpu.get_cpus(tree)
    PSCI_COMPAT = ['arm,psci-0.2', 'arm,psci-1.0']
    psci_node = [n for n in devices if n.has_prop('compatible')
                 and n.get_prop('compatible').strings[0] in PSCI_COMPAT]
    if len(psci_node) > 0:
        psci_node = psci_node[0]
    else:
        psci_node = None
    cpu_info = []
    for i, cpu_node in enumerate(sorted(cpus, key=lambda a: a.path)):
        enable_method = None
        if cpu_node.has_prop('enable-method'):
            enable_method = cpu_node.get_prop('enable-method').strings[0]
        cpuid = i
        if cpu_node.has_prop('reg'):
            cpuid = cpu_node.parse_address(list(cpu_node.get_prop('reg').words))
        extra_data = 0
        if enable_method == 'psci' and psci_node:
            extra_data = 'PSCI_METHOD_' + psci_node.get_prop('method').strings[0].upper()
        elif enable_method == 'spin-table':
            extra_data = '0x{:x}'.format(
                device.Utils.make_number(2, list(cpu_node.get_prop('cpu-release-addr').words)))
        obj = {
            'compat': cpu_node.get_prop('compatible').strings[0],
            'enable_method': enable_method,
            'cpuid': cpuid,
            'path': cpu_node.path,
            'extra': extra_data,
        }
        cpu_info.append(obj)
    # guarantee that cpus in the same cluster will be consecutive
    return sorted(cpu_info, key=lambda a: a['cpuid'])