Re: [PATCH] ppc32: ppc_sys system on chip identification additions

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

 



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 <[email protected]>
Signed-off-by: Kumar Gala <[email protected]>

---
commit 58d478e75ac5d6cb3a1f738a22555c3841445264
tree 999d1722d74eb8dc76f40c8f4c52966cea681cb4
parent eb5d5922d749a74f58416ca1a852651e7323449b
author Kumar K. Gala <[email protected]> Wed, 24 Aug 2005
10:14:42 -0500
committer Kumar K. Gala <[email protected]> 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 <[email protected]>
  *
  * Copyright 2005 Freescale Semiconductor Inc.
+ * Copyright 2005 MontaVista, Inc. by Vitaly Bordug
<[email protected]>
  *
  * 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
[email protected]
https://ozlabs.org/mailman/listinfo/linuxppc-embedded


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux