summaryrefslogtreecommitdiff
path: root/recipes/linux/linux-efika-2.6.20/0025-POWERPC-Misc-EFIKA-fixups-for-rtas-chrp.txt
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/linux/linux-efika-2.6.20/0025-POWERPC-Misc-EFIKA-fixups-for-rtas-chrp.txt')
-rw-r--r--recipes/linux/linux-efika-2.6.20/0025-POWERPC-Misc-EFIKA-fixups-for-rtas-chrp.txt133
1 files changed, 133 insertions, 0 deletions
diff --git a/recipes/linux/linux-efika-2.6.20/0025-POWERPC-Misc-EFIKA-fixups-for-rtas-chrp.txt b/recipes/linux/linux-efika-2.6.20/0025-POWERPC-Misc-EFIKA-fixups-for-rtas-chrp.txt
new file mode 100644
index 0000000000..8f39c3a3d6
--- /dev/null
+++ b/recipes/linux/linux-efika-2.6.20/0025-POWERPC-Misc-EFIKA-fixups-for-rtas-chrp.txt
@@ -0,0 +1,133 @@
+From 95f80c44731c46261b0ba334b35ee803f21ef60b Mon Sep 17 00:00:00 2001
+From: Grant Likely <grant.likely@secretlab.ca>
+Date: Mon, 4 Dec 2006 23:01:13 -0700
+Subject: [PATCH] [POWERPC] Misc EFIKA fixups for rtas/chrp
+
+---
+ arch/powerpc/kernel/proc_ppc64.c | 9 --------
+ arch/powerpc/kernel/rtas-proc.c | 36 +++++++++++++++++++++++++---------
+ arch/powerpc/platforms/chrp/setup.c | 9 ++++++++
+ 3 files changed, 35 insertions(+), 19 deletions(-)
+
+diff --git a/arch/powerpc/kernel/proc_ppc64.c b/arch/powerpc/kernel/proc_ppc64.c
+index dd7001c..fa54220 100644
+--- a/arch/powerpc/kernel/proc_ppc64.c
++++ b/arch/powerpc/kernel/proc_ppc64.c
+@@ -51,15 +51,6 @@ static int __init proc_ppc64_create(void)
+ if (!root)
+ return 1;
+
+- if (!of_find_node_by_path("/rtas"))
+- return 0;
+-
+- if (!proc_mkdir("rtas", root))
+- return 1;
+-
+- if (!proc_symlink("rtas", NULL, "ppc64/rtas"))
+- return 1;
+-
+ return 0;
+ }
+ core_initcall(proc_ppc64_create);
+diff --git a/arch/powerpc/kernel/rtas-proc.c b/arch/powerpc/kernel/rtas-proc.c
+index 2fe82ab..4c06c32 100644
+--- a/arch/powerpc/kernel/rtas-proc.c
++++ b/arch/powerpc/kernel/rtas-proc.c
+@@ -253,43 +253,59 @@ static void get_location_code(struct seq_file *m,
+ static void check_location_string(struct seq_file *m, const char *c);
+ static void check_location(struct seq_file *m, const char *c);
+
++static int __init proc_rtas_create(void)
++{
++ struct proc_dir_entry *root;
++
++ root = proc_mkdir("rtas" , NULL);
++ if (!root)
++ return -1;
++
++#ifdef CONFIG_PPC64
++ if (!proc_symlink("rtas", NULL, "ppc64/rtas"))
++ return -1;
++#endif
++
++ return 0;
++}
++
+ static int __init proc_rtas_init(void)
+ {
+ struct proc_dir_entry *entry;
+
+- if (!machine_is(pseries))
+- return -ENODEV;
+-
+ rtas_node = of_find_node_by_name(NULL, "rtas");
+ if (rtas_node == NULL)
+ return -ENODEV;
+
+- entry = create_proc_entry("ppc64/rtas/progress", S_IRUGO|S_IWUSR, NULL);
++ if (proc_rtas_create() != 0)
++ return -ENODEV;
++
++ entry = create_proc_entry("rtas/progress", S_IRUGO|S_IWUSR, NULL);
+ if (entry)
+ entry->proc_fops = &ppc_rtas_progress_operations;
+
+- entry = create_proc_entry("ppc64/rtas/clock", S_IRUGO|S_IWUSR, NULL);
++ entry = create_proc_entry("rtas/clock", S_IRUGO|S_IWUSR, NULL);
+ if (entry)
+ entry->proc_fops = &ppc_rtas_clock_operations;
+
+- entry = create_proc_entry("ppc64/rtas/poweron", S_IWUSR|S_IRUGO, NULL);
++ entry = create_proc_entry("rtas/poweron", S_IWUSR|S_IRUGO, NULL);
+ if (entry)
+ entry->proc_fops = &ppc_rtas_poweron_operations;
+
+- entry = create_proc_entry("ppc64/rtas/sensors", S_IRUGO, NULL);
++ entry = create_proc_entry("rtas/sensors", S_IRUGO, NULL);
+ if (entry)
+ entry->proc_fops = &ppc_rtas_sensors_operations;
+
+- entry = create_proc_entry("ppc64/rtas/frequency", S_IWUSR|S_IRUGO,
++ entry = create_proc_entry("rtas/frequency", S_IWUSR|S_IRUGO,
+ NULL);
+ if (entry)
+ entry->proc_fops = &ppc_rtas_tone_freq_operations;
+
+- entry = create_proc_entry("ppc64/rtas/volume", S_IWUSR|S_IRUGO, NULL);
++ entry = create_proc_entry("rtas/volume", S_IWUSR|S_IRUGO, NULL);
+ if (entry)
+ entry->proc_fops = &ppc_rtas_tone_volume_operations;
+
+- entry = create_proc_entry("ppc64/rtas/rmo_buffer", S_IRUSR, NULL);
++ entry = create_proc_entry("rtas/rmo_buffer", S_IRUSR, NULL);
+ if (entry)
+ entry->proc_fops = &ppc_rtas_rmo_buf_ops;
+
+diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c
+index e1f51d4..ec4515c 100644
+--- a/arch/powerpc/platforms/chrp/setup.c
++++ b/arch/powerpc/platforms/chrp/setup.c
+@@ -580,11 +580,20 @@ static int __init chrp_probe(void)
+ {
+ char *dtype = of_get_flat_dt_prop(of_get_flat_dt_root(),
+ "device_type", NULL);
++
++ char *model = of_get_flat_dt_prop(of_get_flat_dt_root(),
++ "model", NULL);
+ if (dtype == NULL)
+ return 0;
+ if (strcmp(dtype, "chrp"))
+ return 0;
+
++ /*
++ * Filter out efika because it has its own platform
++ */
++ if (model && (strcmp(model, "EFIKA5K2") == 0) )
++ return 0;
++
+ ISA_DMA_THRESHOLD = ~0L;
+ DMA_MODE_READ = 0x44;
+ DMA_MODE_WRITE = 0x48;
+--
+1.4.4.2
+