[PATCH] ppc32: ppc_sys system on chip identification additions
Kumar Gala
kumar.gala at freescale.com
Sat Aug 27 04:48:02 EST 2005
Oops, this patch doesn't build since its missing a '{'. Will send up
an updated patch that fixes the problem.
- kumar
On Aug 24, 2005, at 10:18 AM, Gala Kumar K.-galak wrote:
> Add the ability to identify an SOC by a name and id. There are
> cases in
> which the integer identifier is not sufficient to specify a specific
> SOC.
> In these cases we can use a string to further qualify the match.
>
> Signed-off-by: Vitaly Bordug <vbordug at ru.mvista.com>
> Signed-off-by: Kumar Gala <kumar.gala at freescale.com>
>
> ---
> commit 58d478e75ac5d6cb3a1f738a22555c3841445264
> tree 999d1722d74eb8dc76f40c8f4c52966cea681cb4
> parent eb5d5922d749a74f58416ca1a852651e7323449b
> author Kumar K. Gala <kumar.gala at freescale.com> Wed, 24 Aug 2005
> 10:14:42 -0500
> committer Kumar K. Gala <kumar.gala at freescale.com> Wed, 24 Aug 2005
> 10:14:42 -0500
>
> arch/ppc/syslib/ppc_sys.c | 51
> ++++++++++++++++++++++++++++++++++++++++++++-
> include/asm-ppc/ppc_sys.h | 1 +
> 2 files changed, 51 insertions(+), 1 deletions(-)
>
> diff --git a/arch/ppc/syslib/ppc_sys.c b/arch/ppc/syslib/ppc_sys.c
> --- a/arch/ppc/syslib/ppc_sys.c
> +++ b/arch/ppc/syslib/ppc_sys.c
> @@ -6,6 +6,7 @@
> * Maintainer: Kumar Gala <kumar.gala at freescale.com>
> *
> * Copyright 2005 Freescale Semiconductor Inc.
> + * Copyright 2005 MontaVista, Inc. by Vitaly Bordug
> <vbordug at ru.mvista.com>
> *
> * This program is free software; you can redistribute it and/or
> modify it
> * under the terms of the GNU General Public License as
> published by
> the
> @@ -35,8 +36,56 @@ void __init identify_ppc_sys_by_id(u32 i
>
> void __init identify_ppc_sys_by_name(char *name)
> {
> - /* TODO */
> + unsigned int i = 0;
> + while (ppc_sys_specs[i].ppc_sys_name[0])
> + if (!strcmp(ppc_sys_specs[i].ppc_sys_name, name))
> + break;
> + i++;
> + }
> + cur_ppc_sys_spec = &ppc_sys_specs[i];
> return;
> +}
> +
> +static int __init count_sys_specs(void)
> +{
> + int i = 0;
> + while (ppc_sys_specs[i].ppc_sys_name[0])
> + i++;
> + return i;
> +}
> +
> +static int __init find_chip_by_name_and_id(char *name, u32 id)
> +{
> + int ret = -1;
> + unsigned int i = 0;
> + unsigned int j = 0;
> + unsigned int dups = 0;
> +
> + unsigned char matched[count_sys_specs()];
> +
> + while (ppc_sys_specs[i].ppc_sys_name[0]) {
> + if (!strcmp(ppc_sys_specs[i].ppc_sys_name, name))
> + matched[j++] = i;
> + i++;
> + }
> + if (j != 0) {
> + for (i = 0; i < j; i++) {
> + if ((ppc_sys_specs[matched[i]].mask & id) ==
> + ppc_sys_specs[matched[i]].value) {
> + ret = matched[i];
> + dups++;
> + }
> + }
> + ret = (dups == 1) ? ret : (-1 * dups);
> + }
> + return ret;
> +}
> +
> +void __init identify_ppc_sys_by_name_and_id(char *name, u32 id)
> +{
> + int i = find_chip_by_name_and_id(name, id);
> + BUG_ON(i < 0);
> + cur_ppc_sys_spec = &ppc_sys_specs[i];
> }
>
> /* Update all memory resources by paddr, call before
> platform_device_register */
> diff --git a/include/asm-ppc/ppc_sys.h b/include/asm-ppc/ppc_sys.h
> --- a/include/asm-ppc/ppc_sys.h
> +++ b/include/asm-ppc/ppc_sys.h
> @@ -50,6 +50,7 @@ extern struct ppc_sys_spec *cur_ppc_sys_
> /* determine which specific SOC we are */
> extern void identify_ppc_sys_by_id(u32 id) __init;
> extern void identify_ppc_sys_by_name(char *name) __init;
> +extern void identify_ppc_sys_by_name_and_id(char *name, u32 id)
> __init;
>
> /* describes all devices that may exist in a given family of
> processors
> */
> extern struct platform_device ppc_sys_platform_devices[];
> _______________________________________________
> Linuxppc-embedded mailing list
> Linuxppc-embedded at ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-embedded
>
More information about the Linuxppc-embedded
mailing list