DT/core: cpu_ofnode updates for v3.12
Subsystems (5)
The following changes since commit d4e4ab86bcba5a72779c43dc1459f71fea3d89c8:
Linux 3.11-rc5 (2013-08-11 18:04:20 -0700)
are available in the git repository at:
git://linux-arm.org/linux-skn.git cpu_of_node
for you to fetch changes up to 9e9e26dde91f22635c87d0e45f3938b5ded96f0d:
cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes
(2013-08-12 10:22:29 +0100)
----------------------------------------------------------------
Sudeep KarkadaNagesha (16):
of: add support for retrieving cpu node for a given logical cpu index
ARM: DT/kernel: define ARM specific arch_match_cpu_phys_id driver/core: cpu: initialize of_node in cpu's device struture of/device: add helper to get cpu device node from logical cpu index
ARM: topology: remove hwid/MPIDR dependency from cpu_capacity
ARM: mvebu: remove device tree parsing for cpu nodes drivers/bus: arm-cci: avoid parsing DT for cpu device nodes
cpufreq: imx6q-cpufreq: remove device tree parsing for cpu nodes
cpufreq: cpufreq-cpu0: remove device tree parsing for cpu nodes
cpufreq: highbank-cpufreq: remove device tree parsing for cpu nodes
cpufreq: spear-cpufreq: remove device tree parsing for cpu nodes
cpufreq: kirkwood-cpufreq: remove device tree parsing for cpu nodes
cpufreq: arm_big_little: remove device tree parsing for cpu nodes
cpufreq: maple-cpufreq: remove device tree parsing for cpu nodes
cpufreq: pmac64-cpufreq: remove device tree parsing for cpu nodes
cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes
arch/arm/kernel/devtree.c | 5 +++++ arch/arm/kernel/topology.c | 61 +++++++++++++++++++------------------------------------------ arch/arm/mach-imx/mach-imx6q.c | 3 +-- arch/arm/mach-mvebu/platsmp.c | 52 ++++++++++++++++++++++++---------------------------- drivers/base/cpu.c | 2 ++ drivers/bus/arm-cci.c | 28 +++++++--------------------- drivers/cpufreq/arm_big_little_dt.c | 40 ++++++++++++++-------------------------- drivers/cpufreq/cpufreq-cpu0.c | 23 ++++------------------- drivers/cpufreq/highbank-cpufreq.c | 18 ++++++------------ drivers/cpufreq/imx6q-cpufreq.c | 4 +--- drivers/cpufreq/kirkwood-cpufreq.c | 8 +++++--- drivers/cpufreq/maple-cpufreq.c | 23 +++-------------------- drivers/cpufreq/pmac32-cpufreq.c | 5 +++-- drivers/cpufreq/pmac64-cpufreq.c | 47 +++++++++++------------------------------------ drivers/cpufreq/spear-cpufreq.c | 4 ++-- drivers/of/base.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/cpu.h | 1 + include/linux/of.h | 6 ++++++ include/linux/of_device.h | 15 +++++++++++++++ 19 files changed, 202 insertions(+), 216 deletions(-)
PS: This patch series is reviewed and acknowledged @
v1: https://lkml.org/lkml/2013/7/15/128
v2: https://lkml.org/lkml/2013/7/17/341
v3: https://lkml.org/lkml/2013/7/22/219
Quoted 59 lines · Sudeep KarkadaNagesha
The following changes since commit
d4e4ab86bcba5a72779c43dc1459f71fea3d89c8:Linux 3.11-rc5 (2013-08-11 18:04:20 -0700)
are available in the git repository at:
git://linux-arm.org/linux-skn.gitcpu_of_nodefor you to fetch changes up to
9e9e26dde91f22635c87d0e45f3938b5ded96f0d:cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes
(2013-08-12 10:22:29 +0100)----------------------------------------------------------------
Sudeep KarkadaNagesha (16):
of: add support for retrieving cpu node for a given logical cpu index
ARM: DT/kernel: define ARM specificarch_match_cpu_phys_iddriver/core: cpu: initializeof_nodein cpu's device struture of/device: add helper to get cpu device node from logical cpu index
ARM: topology: remove hwid/MPIDR dependency fromcpu_capacity
ARM: mvebu: remove device tree parsing for cpu nodesdrivers/bus: arm-cci: avoid parsing DT for cpu device nodes
cpufreq: imx6q-cpufreq: remove device tree parsing for cpu nodes
cpufreq: cpufreq-cpu0: remove device tree parsing for cpu nodes
cpufreq: highbank-cpufreq: remove device tree parsing for cpu nodes
cpufreq: spear-cpufreq: remove device tree parsing for cpu nodes
cpufreq: kirkwood-cpufreq: remove device tree parsing for cpu nodes
cpufreq:arm_big_little: remove device tree parsing for cpu nodes
cpufreq: maple-cpufreq: remove device tree parsing for cpu nodes
cpufreq: pmac64-cpufreq: remove device tree parsing for cpu nodes
cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodesarch/arm/kernel/devtree.c | 5 +++++ arch/arm/kernel/topology.c | 61 +++++++++++++++++++------------------------------------------ arch/arm/mach-imx/mach-imx6q.c | 3 +-- arch/arm/mach-mvebu/platsmp.c | 52 ++++++++++++++++++++++++---------------------------- drivers/base/cpu.c | 2 ++ drivers/bus/arm-cci.c | 28 +++++++--------------------- drivers/cpufreq/arm_big_little_dt.c | 40 ++++++++++++++-------------------------- drivers/cpufreq/cpufreq-cpu0.c | 23 ++++------------------- drivers/cpufreq/highbank-cpufreq.c | 18 ++++++------------ drivers/cpufreq/imx6q-cpufreq.c | 4 +--- drivers/cpufreq/kirkwood-cpufreq.c | 8 +++++--- drivers/cpufreq/maple-cpufreq.c | 23 +++-------------------- drivers/cpufreq/pmac32-cpufreq.c | 5 +++-- drivers/cpufreq/pmac64-cpufreq.c | 47 +++++++++++------------------------------------ drivers/cpufreq/spear-cpufreq.c | 4 ++-- drivers/of/base.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/cpu.h | 1 + include/linux/of.h | 6 ++++++ include/linux/of_device.h | 15 +++++++++++++++ 19 files changed, 202 insertions(+), 216 deletions(-)
Quoted 5 lines
PS: This patch series is reviewed and acknowledged @
v1: https://lkml.org/lkml/2013/7/15/128
v2: https://lkml.org/lkml/2013/7/17/341
v3: https://lkml.org/lkml/2013/7/22/219
Pulled, thanks!
Adding PowerPC list
Quoted 48 lines · Rafael J. Wysocki
Quoted 47 lines · Sudeep KarkadaNagesha
The following changes since commit
d4e4ab86bcba5a72779c43dc1459f71fea3d89c8:
=20
Linux 3.11-rc5 (2013-08-11 18:04:20 -0700)
=20
are available in the git repository at:
=20git://linux-arm.org/linux-skn.gitcpu_of_node
=20
for you to fetch changes up to9e9e26dde91f22635c87d0e45f3938b5ded96f0d:
=20
cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes=20 (2013-08-12 10:22:29 +0100)
=20 ----------------------------------------------------------------=20 Sudeep KarkadaNagesha (16): of: add support for retrieving cpu node for a given logical cpu index ARM: DT/kernel: define ARM specificarch_match_cpu_phys_iddriver/core: cpu: initializeof_nodein cpu's device struture of/device: add helper to get cpu device node from logical cpu index ARM: topology: remove hwid/MPIDR dependency fromcpu_capacityARM: mvebu: remove device tree parsing for cpu nodesdrivers/bus: arm-cci: avoid parsing DT for cpu device nodes=20
cpufreq: imx6q-cpufreq: remove device tree parsing for cpu nodes=20
cpufreq: cpufreq-cpu0: remove device tree parsing for cpu nodes=20
cpufreq: highbank-cpufreq: remove device tree parsing for cpu nodes cpufreq: spear-cpufreq: remove device tree parsing for cpu nodes cpufreq: kirkwood-cpufreq: remove device tree parsing for cpu nodes cpufreq:arm_big_little: remove device tree parsing for cpu nodes cpufreq: maple-cpufreq: remove device tree parsing for cpu nodes cpufreq: pmac64-cpufreq: remove device tree parsing for cpu nodes cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes
=20arch/arm/kernel/devtree.c| 5 +++++=20arch/arm/kernel/topology.c| 61=20
+++++++++++++++++++------------------------------------------=20arch/arm/mach-imx/mach-imx6q.c| 3 +--=20arch/arm/mach-mvebu/platsmp.c| 52=20
++++++++++++++++++++++++----------------------------=20drivers/base/cpu.c| 2 ++drivers/bus/arm-cci.c
| 28 +++++++---------------------=20drivers/cpufreq/arm_big_little_dt.c| 40=20 ++++++++++++++--------------------------=20drivers/cpufreq/cpufreq-cpu0.c | 23 ++++-------------------=20 drivers/cpufreq/highbank-cpufreq.c | 18 ++++++------------=20 drivers/cpufreq/imx6q-cpufreq.c | 4 +---=20
Quoted 8 lines
Quoted 8 lines
drivers/cpufreq/kirkwood-cpufreq.c | 8 +++++---=20 drivers/cpufreq/maple-cpufreq.c | 23 +++--------------------=20 drivers/cpufreq/pmac32-cpufreq.c | 5 +++--=20 drivers/cpufreq/pmac64-cpufreq.c | 47=20+++++++++++------------------------------------=20
drivers/cpufreq/spear-cpufreq.c| 4 ++--drivers/of/base.c
| 73=20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
+
Quoted 2 lines
Quoted 2 lines
=20
include/linux/cpu.h | 1 + >> include/linux/of.h | 6 ++++++=20 >> include/linux/of_device.h | 15 +++++++++++++++ 19 files
Quoted 11 lines
Quoted 8 lines
changed, 202 insertions(+), 216 deletions(-) =20
=20
PS: This patch series is reviewed and acknowledged @ =20
v1: https://lkml.org/lkml/2013/7/15/128 v2:
https://lkml.org/lkml/2013/7/17/341 v3:
https://lkml.org/lkml/2013/7/22/219=20
Pulled, thanks!
=20
Hi Rob, Rafael,
On 13/08/13 15:16, kbuild test robot wrote:> tree:git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
bleeding-edge
Quoted 23 lines
head:
0d4bcb5dc7d3040c0ce7572ea30ab9e5d9455bfacommit:7939ff8d991de2c0b15064e76ee549a6df5ae67f[151/204] of: add support for retrieving cpu node for a given logical cpu index
config: make ARCH=3Dpowerpc allmodconfig
=20
All error/warnings:
=20
warning: (MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC)
warning: (MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC) In file included fromarch/powerpc/include/asm/kvm_para.h:26:0, frominclude/uapi/linux/kvm_para.h:26, from include/linux/kvm_para.h:4,=20 frominclude/linux/kvm_host.h:30, fromarch/powerpc/kernel/asm-offsets.c:53:include/linux/of.h:269:28: error: conflicting types for 'of_get_cpu_node'
extern structdevice_node*of_get_cpu_node(int cpu); ^ In file included frominclude/linux/of.h:139:0, fromarch/powerpc/include/asm/kvm_para.h:26, frominclude/uapi/linux/kvm_para.h:26, from include/linux/kvm_para.h:4,=20 frominclude/linux/kvm_host.h:30, from arch/powerpc/kernel/asm-offsets.c:53:=20
Quoted 8 lines
arch/powerpc/include/asm/prom.h:47:21: note: previous declaration of 'of_get_cpu_node' was here
structdevice_node*of_get_cpu_node(int cpu, unsigned int *thread);=20 ^ make[2]: *** [arch/powerpc/kernel/asm-offsets.s] Error 1 make[2]:
Target__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Targetprepare' not remade because of errors. make: *** [sub-make] Error 2
=20
There seems to be conflict in the new function "of_get_cpu_node" added. PowerPC also defines the same function name. Further microblaze and openrisc declares it(can be removed) but doesn't define it. To fix this:
1. I can rename the newly added function to something different like of_get_cpunode or
2. If of_* namespace should be used by only OF/FDT and not by any architecture specific code, then the arch specific version can be renamed to some thing like arch_of_get_cpu_node.
Also most of the calls to arch specific function can be moved to generic code.
Let me know your thoughts.
Regards,
Sudeep
Quoted 124 lines · Sudeep KarkadaNagesha
Adding PowerPC list
Quoted 50 lines · Rafael J. Wysocki
Quoted 49 lines · Sudeep KarkadaNagesha
The following changes since commit
d4e4ab86bcba5a72779c43dc1459f71fea3d89c8:Linux 3.11-rc5 (2013-08-11 18:04:20 -0700)
are available in the git repository at:
git://linux-arm.org/linux-skn.gitcpu_of_nodefor you to fetch changes up to
9e9e26dde91f22635c87d0e45f3938b5ded96f0d:cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes (2013-08-12 10:22:29 +0100)
----------------------------------------------------------------
Sudeep KarkadaNagesha (16): of: add support for retrieving cpu node for a given logical cpu index ARM: DT/kernel: define ARM specificarch_match_cpu_phys_iddriver/core: cpu: initializeof_nodein cpu's device struture of/device: add helper to get cpu device node from logical cpu index ARM: topology: remove hwid/MPIDR dependency fromcpu_capacityARM: mvebu: remove device tree parsing for cpu nodesdrivers/bus: arm-cci: avoid parsing DT for cpu device nodes
cpufreq: imx6q-cpufreq: remove device tree parsing for cpu nodes
cpufreq: cpufreq-cpu0: remove device tree parsing for cpu nodes
cpufreq: highbank-cpufreq: remove device tree parsing for cpu nodes cpufreq: spear-cpufreq: remove device tree parsing for cpu nodes cpufreq: kirkwood-cpufreq: remove device tree parsing for cpu nodes cpufreq:arm_big_little: remove device tree parsing for cpu nodes cpufreq: maple-cpufreq: remove device tree parsing for cpu nodes cpufreq: pmac64-cpufreq: remove device tree parsing for cpu nodes cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes
arch/arm/kernel/devtree.c| 5 +++++arch/arm/kernel/topology.c| 61
+++++++++++++++++++------------------------------------------arch/arm/mach-imx/mach-imx6q.c| 3 +--arch/arm/mach-mvebu/platsmp.c| 52
++++++++++++++++++++++++----------------------------drivers/base/cpu.c| 2 ++drivers/bus/arm-cci.c
| 28 +++++++---------------------drivers/cpufreq/arm_big_little_dt.c| 40
++++++++++++++--------------------------drivers/cpufreq/cpufreq-cpu0.c | 23 ++++------------------- drivers/cpufreq/highbank-cpufreq.c | 18 ++++++------------ drivers/cpufreq/imx6q-cpufreq.c | 4 +--- drivers/cpufreq/kirkwood-cpufreq.c | 8 +++++--- drivers/cpufreq/maple-cpufreq.c | 23 +++--------------------Quoted 8 lines
Quoted 8 lines
drivers/cpufreq/pmac32-cpufreq.c| 5 +++--drivers/cpufreq/pmac64-cpufreq.c| 47
+++++++++++------------------------------------drivers/cpufreq/spear-cpufreq.c| 4 ++--drivers/of/base.c
| 73
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++include/linux/cpu.h | 1 + >> include/linux/of.h | 6 ++++++ >> include/linux/of_device.h | 15 +++++++++++++++ 19 filesQuoted 11 lines
Quoted 8 lines
changed, 202 insertions(+), 216 deletions(-)
PS: This patch series is reviewed and acknowledged @
v1: https://lkml.org/lkml/2013/7/15/128 v2:
https://lkml.org/lkml/2013/7/17/341 v3:
https://lkml.org/lkml/2013/7/22/219Pulled, thanks!
Hi Rob, Rafael,
On 13/08/13 15:16, kbuild test robot wrote:> tree:
git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
bleeding-edgeQuoted 22 lines
head:
0d4bcb5dc7d3040c0ce7572ea30ab9e5d9455bfacommit:7939ff8d991de2c0b15064e76ee549a6df5ae67f[151/204] of: add support for retrieving cpu node for a given logical cpu index
config: make ARCH=powerpc allmodconfigAll error/warnings:
warning: (
MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC)
warning: (MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC) In file included fromarch/powerpc/include/asm/kvm_para.h:26:0, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromarch/powerpc/kernel/asm-offsets.c:53:include/linux/of.h:269:28: error: conflicting types for 'of_get_cpu_node'
extern structdevice_node*of_get_cpu_node(int cpu); ^ In file included frominclude/linux/of.h:139:0, fromarch/powerpc/include/asm/kvm_para.h:26, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromQuoted 9 lines
arch/powerpc/kernel/asm-offsets.c:53:arch/powerpc/include/asm/prom.h:47:21: note: previous declaration of 'of_get_cpu_node' was here
structdevice_node*of_get_cpu_node(int cpu, unsigned int *thread); ^ make[2]: *** [arch/powerpc/kernel/asm-offsets.s] Error 1 make[2]:
Target__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Targetprepare' not remade because of errors. make: *** [sub-make] Error 2There seems to be conflict in the new function "
of_get_cpu_node" added. PowerPC also defines the same function name. Further microblaze and openrisc declares it(can be removed) but doesn't define it. To fix this:
1. I can rename the newly added function to something different likeof_get_cpunodeor
2. If of_* namespace should be used by only OF/FDT and not by any architecture specific code, then the arch specific version can be renamed to some thing likearch_of_get_cpu_node.
Also most of the calls to arch specific function can be moved to generic code.
Quoted 1 line
Let me know your thoughts.
Hi Benjamin,
I don't understand completely the use of ibm,ppc-interrupt-server#s and its implications on generic of_get_cpu_node implementation. I see the PPC specific definition of of_get_cpu_node uses thread id only in 2 instances. Based on that, I have tried to move all the other instances to use generic definition.
Let me know if the idea is correct.
---->8--------
(quoted diff) +0 -0
b/arch/powerpc/include/asm/prom.h
index 42ee294..b48bbfe 100644
arch/powerpc/include/asm/prom.h +0 -0
@@ -44,7 +44,7 @@ void of_parse_dma_window(struct device_node *dn, const
void *dma_window_prop,
extern void kdump_move_device_tree(void);
/* CPU OF node matching */
-struct device_node *of_get_cpu_node(int cpu, unsigned int *thread); +struct device_node *arch_of_get_cpu_node_by_tid(int cpu, unsigned int *thread);
#ifdef CONFIG_NUMA
extern int of_node_to_nid(struct device_node *device);
(quoted diff) +0 -0
b/arch/powerpc/kernel/cacheinfo.c
index 9262cf2..c60eef9 100644
arch/powerpc/kernel/cacheinfo.c +0 -0
@@ -434,7 +434,7 @@ static struct cache
*cache_chain_instantiate(unsigned int cpu_id)
pr_debug("creating cache object(s) for CPU %i\n", cpu_id);
- cpu_node = of_get_cpu_node(cpu_id, NULL);
+ cpu_node = of_get_cpu_node(cpu_id);
WARN_ONCE(!cpu_node, "no OF node found for CPU %i\n", cpu_id); if (!cpu_node)
goto out;
@@ -764,7 +764,7 @@ static struct cache *cache_lookup_by_cpu(unsigned int cpu_id)
struct device_node *cpu_node;
struct cache *cache;
- cpu_node = of_get_cpu_node(cpu_id, NULL);
+ cpu_node = of_get_cpu_node(cpu_id);
WARN_ONCE(!cpu_node, "no OF node found for CPU %i\n", cpu_id); if (!cpu_node)
return NULL;
arch/powerpc/kernel/prom.c +6 -0
@@ -33,6 +33,7 @@#include <linux/irq.h> #include <linux/memblock.h> #include <linux/of.h> +#include <linux/cpu.h> #include <asm/prom.h> #include <asm/rtas.h>
@@ -834,15 +835,23 @@ static int __init prom_reconfig_setup(void)__initcall (prom_reconfig_setup);#endif +bool arch_match_cpu_phys_id (int cpu,u64 phys_id) +{ +return phys_id ==get_hard_smp_processor_id (cpu); +} +/* Find the device node for a given logical cpu number, also returns
the cpu
* local thread number (index in ibm,interrupt-server#s) if relevant and
* asked for (non NULL)
*/
-struct device_node *of_get_cpu_node(int cpu, unsigned int *thread) +struct device_node *arch_of_get_cpunode_by_tid(int cpu, unsigned int *thread)
{
int hardid;
struct device_node *np;
+ if (thread == NULL)
+ return of_get_cpu_node(cpu);
+
hardid = get_hard_smp_processor_id(cpu);
for_each_node_by_type(np, "cpu") {
@@ -855,14 +864,9 @@ struct device_node *of_get_cpu_node(int cpu, unsigned int *thread)
intserv = of_get_property(np, "ibm,ppc-interrupt-server#s",
&plen);
if (intserv == NULL) {
- const u32 *reg = of_get_property(np, "reg", NULL);
- if (reg == NULL)
- continue;
- if (*reg == hardid) {
- if (thread)
- *thread = 0;
- return np;
- }
+ np = of_get_cpu_node(cpu);
+ *thread = 0;
+ return np;
} else {
plen /= sizeof(u32);
for (t = 0; t < plen; t++) {
@@ -876,7 +880,6 @@ struct device_node *of_get_cpu_node(int cpu, unsigned int *thread)
}
return NULL;
}
-EXPORT_SYMBOL(of_get_cpu_node);
#if defined(CONFIG_DEBUG_FS) && defined(DEBUG)
static struct debugfs_blob_wrapper flat_dt_blob;
arch/powerpc/kernel/smp.c +2 -2
@@ -560,7 +560,7 @@ int cpu_to_core_id(int cpu)const int *reg;int id =-1 ; - np =of_get_cpu_node (cpu,NULL ); + np =of_get_cpu_node (cpu);if (!np) goto out;
@@ -598,7 +598,7 @@ static struct device_node *cpu_to_l2cache(int cpu)if (!cpu_present (cpu))return NULL ; - np =of_get_cpu_node (cpu,NULL ); + np =of_get_cpu_node (cpu);if (np ==NULL )return NULL ;
arch/powerpc/mm/numa.c +0 -0
@@ -520,7 +520,7 @@ static int of_drconf_to_nid_single(struct
of_drconf_cell *drmem,
static int numa_setup_cpu(unsigned long lcpu)
{
int nid = 0;
- struct device_node *cpu = of_get_cpu_node(lcpu, NULL);
+ struct device_node *cpu = of_get_cpu_node(lcpu);
if (!cpu) {
WARN_ON(1);
@@ -699,7 +699,7 @@ static int __init parse_numa_properties(void)
struct device_node *cpu;
int nid;
- cpu = of_get_cpu_node(i, NULL);
+ cpu = of_get_cpu_node(i);
BUG_ON(!cpu);
nid = of_node_to_nid_single(cpu);
of_node_put(cpu);
(quoted diff) +0 -0
b/arch/powerpc/platforms/44x/currituck.c
index 7f1b71a..84eb64e 100644
arch/powerpc/platforms/44x/currituck.c +1 -1
@@ -98,7 +98,7 @@ static void smp_ppc47x_setup_cpu(int cpu)static int smp_ppc47x_kick_cpu (int cpu) { -struct device_node *cpunode =of_get_cpu_node (cpu,NULL ); +struct device_node *cpunode =of_get_cpu_node (cpu);const u64 *spin_table_addr_prop;u32 *spin_table;extern void start_secondary_47x (void );
(quoted diff) +0 -0
b/arch/powerpc/platforms/44x/iss4xx.c
index 4241bc8..8195456 100644
arch/powerpc/platforms/44x/iss4xx.c +1 -1
@@ -88,7 +88,7 @@ static void smp_iss4xx_setup_cpu(int cpu)static int smp_iss4xx_kick_cpu (int cpu) { -struct device_node *cpunode =of_get_cpu_node (cpu,NULL ); +struct device_node *cpunode =of_get_cpu_node (cpu);const u64 *spin_table_addr_prop;u32 *spin_table;extern void start_secondary_47x (void );
(quoted diff) +0 -0
b/arch/powerpc/platforms/85xx/smp.c
index 5ced4f5..e32c532 100644
arch/powerpc/platforms/85xx/smp.c +1 -1
@@ -156,7 +156,7 @@ static int smp_85xx_kick_cpu(int nr)pr_debug ("smp_85xx_kick_cpu: kick CPU #%d\n" , nr); - np =of_get_cpu_node (nr,NULL ); + np =of_get_cpu_node (nr); cpu_rel_addr =of_get_property (np,"cpu-release-addr" ,NULL );if (cpu_rel_addr ==NULL ) {
(quoted diff) +0 -0
b/arch/powerpc/platforms/cell/cbe_regs.c
index 1428d58..a055b74 100644
arch/powerpc/platforms/cell/cbe_regs.c +0 -1
@@ -182,7 +182,7 @@ static struct device_node *cbe_get_be_node(int cpu_id)return np;for (i=0 ; i<len; i++) - if (of_find_node_by_phandle(cpu_handle[i]) ==
of_get_cpu_node(cpu_id, NULL))
+ if (of_find_node_by_phandle(cpu_handle[i]) == of_get_cpu_node(cpu_id))
return np;
}
@@ -240,7 +240,8 @@ void __init cbe_regs_init(void)
/* Build local fast map of CPUs */ for_each_possible_cpu(i) {
- cbe_thread_map[i].cpu_node = of_get_cpu_node(i, &thread_id);
+ cbe_thread_map[i].cpu_node =
+ arch_of_get_cpunode_by_tid(i, &thread_id);
cbe_thread_map[i].be_node = cbe_get_be_node(i); cbe_thread_map[i].thread_id = thread_id;
}
(quoted diff) +0 -0
b/arch/powerpc/platforms/wsp/ics.c
index 2d3b1dd..b83bc2e 100644
arch/powerpc/platforms/wsp/ics.c +0 -0
@@ -137,7 +137,7 @@ void cpus_on_chip(int chip_id, cpumask_t *mask,
cpumask_t *ret)
cpumask_clear(ret);
for_each_cpu(cpu, mask) {
- cpu_dn = of_get_cpu_node(cpu, NULL);
+ cpu_dn = of_get_cpu_node(cpu);
if (!cpu_dn)
continue;
@@ -649,7 +649,7 @@ static void __init wsp_ics_set_default_server(void)
u32 hwid;
/* Find the server number for the boot cpu. */
- np = of_get_cpu_node(boot_cpuid, NULL);
+ np = of_get_cpu_node(boot_cpuid);
BUG_ON(!np);
hwid = get_hard_smp_processor_id(boot_cpuid);
(quoted diff) +0 -0
b/arch/powerpc/platforms/wsp/smp.c
index 332a18b..2abe794 100644
arch/powerpc/platforms/wsp/smp.c +1 -1
@@ -40,7 +40,7 @@ int smp_a2_kick_cpu(int nr)if (nr <0 || nr >=NR_CPUS )return -ENOENT ; - np =of_get_cpu_node (nr, &thr_idx); + np =arch_of_get_cpunode_by_tid (nr, &thr_idx);if (!np)return -ENODEV ;
(quoted diff) +0 -0
b/arch/powerpc/platforms/wsp/wsp.c
index d25cc96..43a17a2 100644
arch/powerpc/platforms/wsp/wsp.c +1 -1
@@ -90,7 +90,7 @@ void wsp_halt(void)struct device_node *mine;struct device_node *me; - me =of_get_cpu_node (smp_processor_id (),NULL ); + me =of_get_cpu_node (smp_processor_id ()); mine =scom_find_parent (me);/* This will halt all the A2s but not power off the chip */
(quoted diff) +0 -0
b/arch/powerpc/sysdev/xics/xics-common.c
index 9049d9f..d16082f 100644
arch/powerpc/sysdev/xics/xics-common.c +1 -1
@@ -53,7 +53,7 @@ void xics_update_irq_servers(void)u32 hcpuid;/* Find the server numbers for the boot cpu. */ - np =of_get_cpu_node (boot_cpuid,NULL ); + np =of_get_cpu_node (boot_cpuid);BUG_ON (!np); hcpuid =get_hard_smp_processor_id (boot_cpuid);
(quoted diff) +0 -0
b/drivers/cpufreq/pasemi-cpufreq.c
index b704da4..692755f 100644
drivers/cpufreq/pasemi-cpufreq.c +0 -0
@@ -149,7 +149,7 @@ static int pas_cpufreq_cpu_init(struct
cpufreq_policy *policy)
struct device_node *cpu, *dn;
int err = -ENODEV;
- cpu = of_get_cpu_node(policy->cpu, NULL);
+ cpu = of_get_cpu_node(policy->cpu);
if (!cpu)
goto out;
(quoted diff) +0 -0
b/drivers/cpufreq/ppc-corenet-cpufreq.c
index 3cae452..64fb70a 100644
drivers/cpufreq/ppc-corenet-cpufreq.c +0 -0
@@ -150,7 +150,7 @@ static int corenet_cpufreq_cpu_init(struct
cpufreq_policy *policy)
struct cpu_data *data;
unsigned int cpu = policy->cpu;
- np = of_get_cpu_node(cpu, NULL);
+ np = of_get_cpu_node(cpu);
if (!np)
return -ENODEV;
(quoted diff) +0 -0
b/drivers/cpufreq/ppc_cbe_cpufreq.c
index 5936f8d..0700445 100644
drivers/cpufreq/ppc_cbe_cpufreq.c +0 -0
@@ -75,7 +75,7 @@ static int cbe_cpufreq_cpu_init(struct cpufreq_policy
*policy)
int i, cur_pmode;
struct device_node *cpu;
- cpu = of_get_cpu_node(policy->cpu, NULL);
+ cpu = of_get_cpu_node(policy->cpu);
if (!cpu)
return -ENODEV;
Quoted 7 lines · Sudeep KarkadaNagesha
I don't understand completely the use of ibm,ppc-interrupt-server#s and its implications on generic
of_get_cpu_nodeimplementation. I see the PPC specific definition ofof_get_cpu_nodeuses thread id only in 2 instances. Based on that, I have tried to move all the other instances to use generic definition.Let me know if the idea is correct.
No. The device-tree historically only represents cores, not HW threads, so it makes sense to retrieve also the thread number corresponding to the CPU.
However, the mechanism to represent HW threads in the device-tree is currently somewhat platform specific (the ibm,ppc-interrupt-server#s).
So what you could do for now is:
- Have a generic version that always returns 0 as the thread, which is weak
- powerpc keeps its own implementation
- Start a discussion on the bindings (if not already there) to define threads
in a better way at which point the generic function can be updated.
Cheers,
Ben.
Quoted 7 lines · Benjamin Herrenschmidt
Quoted 6 lines · Sudeep KarkadaNagesha
I don't understand completely the use of ibm,ppc-interrupt-server#s and its implications on generic
of_get_cpu_nodeimplementation. I see the PPC specific definition ofof_get_cpu_nodeuses thread id only in 2 instances. Based on that, I have tried to move all the other instances to use generic definition.
Quoted 5 lines
Quoted 1 line
Let me know if the idea is correct.
No. The device-tree historically only represents cores, not HW threads, so it makes sense to retrieve also the thread number corresponding to the CPU.
Ok
Quoted 2 lines
However, the mechanism to represent HW threads in the device-tree is currently somewhat platform specific (the ibm,ppc-interrupt-server#s).
I see most of the callers pass NULL to thread id argument except 2 instances in entire tree. If that's the case why can't we move to use generic of_get_cpu_node in most of those cases and have PPC specific implementation for the ones using thread id.
Quoted 4 lines
So what you could do for now is:
- Have a generic version that always returns 0 as the thread, which is weak
I would prefer to move to generic of_get_cpu_node where ever possible and rename the function that takes thread id rather than making generic one weak.
Quoted 2 lines
- powerpc keeps its own implementation
How about only in cases where it needs thread_id.
Quoted 4 lines
- Start a discussion on the bindings (if not already there) to define threads
in a better way at which point the generic function can be updated.
I am not sure if we need to define any new bindings. Excerpts from ePAPR (v1.1):
"3.7.1 General Properties of CPU nodes
The value of "reg" is a <prop-encoded-array> that defines a unique CPU/thread id for the CPU/threads represented by the CPU node. If a CPU supports more than one thread (i.e. multiple streams of execution) the reg property is an array with 1 element per thread. The #address-cells on the /cpus node specifies how many cells each element of the array takes. Software can determine the number of threads by dividing the size of reg by the parent node's #address-cells."
And this is exactly in agreement to what's implemented in the generic of_get_cpu_node:
for_each_child_of_node(cpus, cpun) {
if (of_node_cmp(cpun->type, "cpu"))
continue;
cell = of_get_property(cpun, "reg", &prop_len);
if (!cell) {
pr_warn("%s: missing reg property\n", cpun->full_name);
continue;
}
prop_len /= sizeof(*cell);
while (prop_len) {
hwid = of_read_number(cell, ac);
prop_len -= ac;
if (arch_match_cpu_phys_id(cpu, hwid))
return cpun;
}
}Yes this doesn't cover the historical "ibm,ppc-interrupt-server#s", for which we can have PPC specific wrapper above the generic one i.e. get the cpu node and then parse for thread id under custom property.
Let me know your thoughts.
Regards,
Sudeep
Quoted 4 lines · Sudeep KarkadaNagesha
Yes this doesn't cover the historical "ibm,ppc-interrupt-server#s", for
which we can have PPC specific wrapper above the generic one i.e. get the cpu node and then parse for thread id under custom property.
A wrapper is wrong. I don't want to have to have all ppc callers to use a different function.
As I said, just make a generic one that returns a thread ID, ie, same signature as the powerpc one. Make it weak, we can override it in powerpc-land, or we can move the ibm,ppc-interrupt-server#s handling into the generic one, it won't hurt, but leave the thread_id return there, it doesn't hurt it will come in handy in a few cases without causing code duplication.
Cheers,
Ben.
Quoted 8 lines · Benjamin Herrenschmidt
Quoted 4 lines · Sudeep KarkadaNagesha
Yes this doesn't cover the historical "ibm,ppc-interrupt-server#s", for
which we can have PPC specific wrapper above the generic one i.e. get the cpu node and then parse for thread id under custom property.A wrapper is wrong. I don't want to have to have all ppc callers to use a different function.
Ok.
On the side note the main intention of this patch series[1] is to avoid calling of_get_cpu_node function once CPU devices are registered. It initialises the of_node in all the cpu devices using this function when registering the CPU device. It can be retrieved from cpu_dev->of_node. So direct users of of_get_cpu_node can be reduced to avoid unnecessary parsing of DT to find cpu node.
Quoted 4 lines
As I said, just make a generic one that returns a thread ID, ie, same signature as the powerpc one. Make it weak, we can override it in powerpc-land,
IMO, making generic definition which adhere to the ePAPR specification as weak is not so clean.
Quoted 5 lines
or we can move the ibm,ppc-interrupt-server#s handling into the generic one, it won't hurt, but leave the
thread_idreturn there, it doesn't hurt it will come in handy in a few cases without causing code duplication.
IMO moving of handling ibm,ppc-interrupt-server#s to generic code under #ifdef CONFIG_PPC seems to be cleaner approach than weak definitation.
As per my understanding each thread is a different logical cpu. Each logical cpu is mapped to unique physical id(either present in reg field or legacy ibm,ppc-interrupt-server#s field). So given a logical cpu id we can get the cpu node corresponding to it.
Looking @ smp_setup_cpu_maps in arch/powerpc/kernel/setup-common.c and the comment in the same file: "This implementation only supports power of 2 number of threads.." the thread id id is implicit in the logical cpu id. Do we need to fetch that from DT ?
Regards,
Sudeep
Quoted 4 lines · Sudeep KarkadaNagesha
IMO moving of handling ibm,ppc-interrupt-server#s to generic code under
#ifdefCONFIG_PPCseems to be cleaner approach than weak definitation.
Quoted 8 lines
As per my understanding each thread is a different logical cpu. Each logical cpu is mapped to unique physical
id(either present in reg field or legacy ibm,ppc-interrupt-server#s field). So given a logical cpu id we can get the cpu node corresponding to it.
Looking @smp_setup_cpu_mapsinarch/powerpc/kernel/setup-common.cand the comment in the same file: "This implementation only supports power of 2 number of threads.." the thread id id is implicit in the logical cpu id. Do we need to fetch that from DT ?
I don't want those parsing routines to make those assumptions. We have changed our logical numbering in the past and may again.
Cheers,
Ben.
Quoted 52 lines · Sudeep KarkadaNagesha
Quoted 7 lines · Benjamin Herrenschmidt
Quoted 6 lines · Sudeep KarkadaNagesha
I don't understand completely the use of ibm,ppc-interrupt-server#s and its implications on generic
of_get_cpu_nodeimplementation. I see the PPC specific definition ofof_get_cpu_nodeuses thread id only in 2 instances. Based on that, I have tried to move all the other instances to use generic definition.Quoted 5 lines
Quoted 1 line
Let me know if the idea is correct.
No. The device-tree historically only represents cores, not HW threads, so it makes sense to retrieve also the thread number corresponding to the CPU.
Ok
Quoted 2 lines
However, the mechanism to represent HW threads in the device-tree is currently somewhat platform specific (the ibm,ppc-interrupt-server#s).
I see most of the callers pass NULL to thread id argument except 2 instances in entire tree. If that's the case why can't we move to use generic
of_get_cpu_nodein most of those cases and have PPC specific implementation for the ones using thread id.Quoted 4 lines
So what you could do for now is:
- Have a generic version that always returns 0 as the thread, which is weak
I would prefer to move to generic
of_get_cpu_nodewhere ever possible and rename the function that takes thread id rather than making generic one weak.Quoted 2 lines
- powerpc keeps its own implementation
How about only in cases where it needs
thread_id.Quoted 4 lines
- Start a discussion on the bindings (if not already there) to define threads
in a better way at which point the generic function can be updated.I am not sure if we need to define any new bindings. Excerpts from ePAPR (v1.1):
"3.7.1 General Properties of CPU nodes
The value of "reg" is a <prop-encoded-array> that defines a unique CPU/thread id for the CPU/threads represented by the CPU node. If a CPU supports more than one thread (i.e. multiple streams of execution) the reg property is an array with 1 element per thread. The #address-cells on the /cpus node specifies how many cells each element of the array takes. Software can determine the number of threads by dividing the size of reg by the parent node's #address-cells."And this is exactly in agreement to what's implemented in the generic
of_get_cpu_node:
Quoted 16 lines
for_each_child_of_node(cpus, cpun) {
if (of_node_cmp(cpun->type, "cpu"))
continue;
cell = of_get_property(cpun, "reg", &prop_len);
if (!cell) {
pr_warn("%s: missing reg property\n", cpun->full_name);
continue;
}
prop_len /= sizeof(*cell);
while (prop_len) {
hwid = of_read_number(cell, ac);
prop_len -= ac;
if (arch_match_cpu_phys_id(cpu, hwid))
return cpun;
}
}How about something like this:
for_each_child_of_node(cpus, cpun) {
if (of_node_cmp(cpun->type, "cpu"))
continue;
if (arch_of_get_cpu_node(cpun, thread))
return cpun;
cell = of_get_property(cpun, "reg", &prop_len);
if (!cell) {
pr_warn("%s: missing reg property\n", cpun->full_name);
continue;
}
prop_len /= sizeof(*cell);
while (prop_len) {
hwid = of_read_number(cell, ac);
prop_len -= ac;
if (arch_match_cpu_phys_id(cpu, hwid))
return cpun;
}
}For PPC:
arch_of_get_cpu_node()
{
const u32 *intserv;
unsigned int plen, t;
/* Check for ibm,ppc-interrupt-server#s. */
intserv = of_get_property(np, "ibm,ppc-interrupt-server#s",
&plen);
if (!intserv)
return false;
hardid = get_hard_smp_processor_id(cpu);
plen /= sizeof(u32);
for (t = 0; t < plen; t++) {
if (hardid == intserv[t]) {
if (thread)
*thread = t;
return true;
}
}
return false;
}Quoted 12 lines
Yes this doesn't cover the historical "ibm,ppc-interrupt-server#s", for which we can have PPC specific wrapper above the generic one i.e. get the cpu node and then parse for thread id under custom property.
Let me know your thoughts.
Regards,
Sudeep
Quoted 110 lines · Rob Herring
Quoted 52 lines · Sudeep KarkadaNagesha
Quoted 7 lines · Benjamin Herrenschmidt
Quoted 6 lines · Sudeep KarkadaNagesha
I don't understand completely the use of ibm,ppc-interrupt-server#s and its implications on generic
of_get_cpu_nodeimplementation. I see the PPC specific definition ofof_get_cpu_nodeuses thread id only in 2 instances. Based on that, I have tried to move all the other instances to use generic definition.Quoted 5 lines
Quoted 1 line
Let me know if the idea is correct.
No. The device-tree historically only represents cores, not HW threads, so it makes sense to retrieve also the thread number corresponding to the CPU.
Ok
Quoted 2 lines
However, the mechanism to represent HW threads in the device-tree is currently somewhat platform specific (the ibm,ppc-interrupt-server#s).
I see most of the callers pass NULL to thread id argument except 2 instances in entire tree. If that's the case why can't we move to use generic
of_get_cpu_nodein most of those cases and have PPC specific implementation for the ones using thread id.Quoted 4 lines
So what you could do for now is:
- Have a generic version that always returns 0 as the thread, which is weak
I would prefer to move to generic
of_get_cpu_nodewhere ever possible and rename the function that takes thread id rather than making generic one weak.Quoted 2 lines
- powerpc keeps its own implementation
How about only in cases where it needs
thread_id.Quoted 4 lines
- Start a discussion on the bindings (if not already there) to define threads
in a better way at which point the generic function can be updated.I am not sure if we need to define any new bindings. Excerpts from ePAPR (v1.1):
"3.7.1 General Properties of CPU nodes
The value of "reg" is a <prop-encoded-array> that defines a unique CPU/thread id for the CPU/threads represented by the CPU node. If a CPU supports more than one thread (i.e. multiple streams of execution) the reg property is an array with 1 element per thread. The #address-cells on the /cpus node specifies how many cells each element of the array takes. Software can determine the number of threads by dividing the size of reg by the parent node's #address-cells."And this is exactly in agreement to what's implemented in the generic
of_get_cpu_node:Quoted 16 lines
for_each_child_of_node(cpus, cpun) { if (of_node_cmp(cpun->type, "cpu")) continue; cell = of_get_property(cpun, "reg", &prop_len); if (!cell) { pr_warn("%s: missing reg property\n", cpun->full_name); continue; } prop_len /= sizeof(*cell); while (prop_len) { hwid = of_read_number(cell, ac); prop_len -= ac; if (arch_match_cpu_phys_id(cpu, hwid)) return cpun; } }How about something like this:
for_each_child_of_node(cpus, cpun) { if (of_node_cmp(cpun->type, "cpu")) continue; if (arch_of_get_cpu_node(cpun, thread)) return cpun; cell = of_get_property(cpun, "reg", &prop_len); if (!cell) { pr_warn("%s: missing reg property\n", cpun->full_name); continue; } prop_len /= sizeof(*cell); while (prop_len) { hwid = of_read_number(cell, ac); prop_len -= ac; if (arch_match_cpu_phys_id(cpu, hwid)) return cpun; } }For PPC:
arch_of_get_cpu_node(){ const u32 *intserv; unsigned int plen, t; /* Check for ibm,ppc-interrupt-server#s. */ intserv = of_get_property(np, "ibm,ppc-interrupt-server#s", &plen); if (!intserv) return false; hardid = get_hard_smp_processor_id(cpu); plen /= sizeof(u32); for (t = 0; t < plen; t++) {
Quoted 9 lines
if (hardid == intserv[t]) {
if (thread)
*thread = t;
return true;
}
}
return false;
}Sorry responded to earlier mail before seeing this. This approach looks good, but we still need to have thread id as argument which should be fine.
But as per my understanding on how logical cpu<->hard proccessor id is setup, the thread_id is implicit in the logical cpu id making it unnecessary to depend on DT each time.
Regards,
Sudeep
Quoted 14 lines
Quoted 12 lines
Yes this doesn't cover the historical "ibm,ppc-interrupt-server#s", for which we can have PPC specific wrapper above the generic one i.e. get the cpu node and then parse for thread id under custom property.
Let me know your thoughts.
Regards,
Sudeep
Quoted 112 lines · Sudeep KarkadaNagesha
Adding PowerPC list
Quoted 50 lines · Rafael J. Wysocki
Quoted 49 lines · Sudeep KarkadaNagesha
The following changes since commit
d4e4ab86bcba5a72779c43dc1459f71fea3d89c8:Linux 3.11-rc5 (2013-08-11 18:04:20 -0700)
are available in the git repository at:
git://linux-arm.org/linux-skn.gitcpu_of_nodefor you to fetch changes up to
9e9e26dde91f22635c87d0e45f3938b5ded96f0d:cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes (2013-08-12 10:22:29 +0100)
----------------------------------------------------------------
Sudeep KarkadaNagesha (16): of: add support for retrieving cpu node for a given logical cpu index ARM: DT/kernel: define ARM specificarch_match_cpu_phys_iddriver/core: cpu: initializeof_nodein cpu's device struture of/device: add helper to get cpu device node from logical cpu index ARM: topology: remove hwid/MPIDR dependency fromcpu_capacityARM: mvebu: remove device tree parsing for cpu nodesdrivers/bus: arm-cci: avoid parsing DT for cpu device nodes
cpufreq: imx6q-cpufreq: remove device tree parsing for cpu nodes
cpufreq: cpufreq-cpu0: remove device tree parsing for cpu nodes
cpufreq: highbank-cpufreq: remove device tree parsing for cpu nodes cpufreq: spear-cpufreq: remove device tree parsing for cpu nodes cpufreq: kirkwood-cpufreq: remove device tree parsing for cpu nodes cpufreq:arm_big_little: remove device tree parsing for cpu nodes cpufreq: maple-cpufreq: remove device tree parsing for cpu nodes cpufreq: pmac64-cpufreq: remove device tree parsing for cpu nodes cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes
arch/arm/kernel/devtree.c| 5 +++++arch/arm/kernel/topology.c| 61
+++++++++++++++++++------------------------------------------arch/arm/mach-imx/mach-imx6q.c| 3 +--arch/arm/mach-mvebu/platsmp.c| 52
++++++++++++++++++++++++----------------------------drivers/base/cpu.c| 2 ++drivers/bus/arm-cci.c
| 28 +++++++---------------------drivers/cpufreq/arm_big_little_dt.c| 40
++++++++++++++--------------------------drivers/cpufreq/cpufreq-cpu0.c | 23 ++++------------------- drivers/cpufreq/highbank-cpufreq.c | 18 ++++++------------ drivers/cpufreq/imx6q-cpufreq.c | 4 +--- drivers/cpufreq/kirkwood-cpufreq.c | 8 +++++--- drivers/cpufreq/maple-cpufreq.c | 23 +++--------------------Quoted 8 lines
Quoted 8 lines
drivers/cpufreq/pmac32-cpufreq.c| 5 +++--drivers/cpufreq/pmac64-cpufreq.c| 47
+++++++++++------------------------------------drivers/cpufreq/spear-cpufreq.c| 4 ++--drivers/of/base.c
| 73
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++include/linux/cpu.h | 1 + >> include/linux/of.h | 6 ++++++ >> include/linux/of_device.h | 15 +++++++++++++++ 19 filesQuoted 11 lines
Quoted 8 lines
changed, 202 insertions(+), 216 deletions(-)
PS: This patch series is reviewed and acknowledged @
v1: https://lkml.org/lkml/2013/7/15/128 v2:
https://lkml.org/lkml/2013/7/17/341 v3:
https://lkml.org/lkml/2013/7/22/219Pulled, thanks!
Hi Rob, Rafael,
On 13/08/13 15:16, kbuild test robot wrote:> tree:
git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
bleeding-edgeQuoted 22 lines
head:
0d4bcb5dc7d3040c0ce7572ea30ab9e5d9455bfacommit:7939ff8d991de2c0b15064e76ee549a6df5ae67f[151/204] of: add support for retrieving cpu node for a given logical cpu index
config: make ARCH=powerpc allmodconfigAll error/warnings:
warning: (
MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC)
warning: (MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC) In file included fromarch/powerpc/include/asm/kvm_para.h:26:0, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromarch/powerpc/kernel/asm-offsets.c:53:include/linux/of.h:269:28: error: conflicting types for 'of_get_cpu_node'
extern structdevice_node*of_get_cpu_node(int cpu); ^ In file included frominclude/linux/of.h:139:0, fromarch/powerpc/include/asm/kvm_para.h:26, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromQuoted 9 lines
arch/powerpc/kernel/asm-offsets.c:53:arch/powerpc/include/asm/prom.h:47:21: note: previous declaration of 'of_get_cpu_node' was here
structdevice_node*of_get_cpu_node(int cpu, unsigned int *thread); ^ make[2]: *** [arch/powerpc/kernel/asm-offsets.s] Error 1 make[2]:
Target__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Targetprepare' not remade because of errors. make: *** [sub-make] Error 2
Quoted 3 lines
There seems to be conflict in the new function "
of_get_cpu_node" added. PowerPC also defines the same function name. Further microblaze and openrisc declares it(can be removed) but doesn't define it.
Feel free to remove it for Microblaze.
There was probably any reason why it was there.
Or maybe no reason and it was just there because Microblaze was based on powerpc code.
Thanks,
Michal
Signature · 14 lines
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91 w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/ Maintainer of Linux kernel - Xilinx Zynq ARM architecture Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 263 bytes Desc: OpenPGP digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130813/31f0a81b/attachment.sig>
Quoted 113 lines · Michal Simek
Quoted 112 lines · Sudeep KarkadaNagesha
Adding PowerPC list
Quoted 50 lines · Rafael J. Wysocki
Quoted 49 lines · Sudeep KarkadaNagesha
The following changes since commit
d4e4ab86bcba5a72779c43dc1459f71fea3d89c8:Linux 3.11-rc5 (2013-08-11 18:04:20 -0700)
are available in the git repository at:
git://linux-arm.org/linux-skn.gitcpu_of_nodefor you to fetch changes up to
9e9e26dde91f22635c87d0e45f3938b5ded96f0d:cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes (2013-08-12 10:22:29 +0100)
----------------------------------------------------------------
Sudeep KarkadaNagesha (16): of: add support for retrieving cpu node for a given logical cpu index ARM: DT/kernel: define ARM specificarch_match_cpu_phys_iddriver/core: cpu: initializeof_nodein cpu's device struture of/device: add helper to get cpu device node from logical cpu index ARM: topology: remove hwid/MPIDR dependency fromcpu_capacityARM: mvebu: remove device tree parsing for cpu nodesdrivers/bus: arm-cci: avoid parsing DT for cpu device nodes
cpufreq: imx6q-cpufreq: remove device tree parsing for cpu nodes
cpufreq: cpufreq-cpu0: remove device tree parsing for cpu nodes
cpufreq: highbank-cpufreq: remove device tree parsing for cpu nodes cpufreq: spear-cpufreq: remove device tree parsing for cpu nodes cpufreq: kirkwood-cpufreq: remove device tree parsing for cpu nodes cpufreq:arm_big_little: remove device tree parsing for cpu nodes cpufreq: maple-cpufreq: remove device tree parsing for cpu nodes cpufreq: pmac64-cpufreq: remove device tree parsing for cpu nodes cpufreq: pmac32-cpufreq: remove device tree parsing for cpu nodes
arch/arm/kernel/devtree.c| 5 +++++arch/arm/kernel/topology.c| 61
+++++++++++++++++++------------------------------------------arch/arm/mach-imx/mach-imx6q.c| 3 +--arch/arm/mach-mvebu/platsmp.c| 52
++++++++++++++++++++++++----------------------------drivers/base/cpu.c| 2 ++drivers/bus/arm-cci.c
| 28 +++++++---------------------drivers/cpufreq/arm_big_little_dt.c| 40
++++++++++++++--------------------------drivers/cpufreq/cpufreq-cpu0.c | 23 ++++------------------- drivers/cpufreq/highbank-cpufreq.c | 18 ++++++------------ drivers/cpufreq/imx6q-cpufreq.c | 4 +--- drivers/cpufreq/kirkwood-cpufreq.c | 8 +++++--- drivers/cpufreq/maple-cpufreq.c | 23 +++--------------------Quoted 8 lines
Quoted 8 lines
drivers/cpufreq/pmac32-cpufreq.c| 5 +++--drivers/cpufreq/pmac64-cpufreq.c| 47
+++++++++++------------------------------------drivers/cpufreq/spear-cpufreq.c| 4 ++--drivers/of/base.c
| 73
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++include/linux/cpu.h | 1 + >> include/linux/of.h | 6 ++++++ >> include/linux/of_device.h | 15 +++++++++++++++ 19 filesQuoted 11 lines
Quoted 8 lines
changed, 202 insertions(+), 216 deletions(-)
PS: This patch series is reviewed and acknowledged @
v1: https://lkml.org/lkml/2013/7/15/128 v2:
https://lkml.org/lkml/2013/7/17/341 v3:
https://lkml.org/lkml/2013/7/22/219Pulled, thanks!
Hi Rob, Rafael,
On 13/08/13 15:16, kbuild test robot wrote:> tree:
git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
bleeding-edgeQuoted 31 lines
head:
0d4bcb5dc7d3040c0ce7572ea30ab9e5d9455bfacommit:7939ff8d991de2c0b15064e76ee549a6df5ae67f[151/204] of: add support for retrieving cpu node for a given logical cpu index
config: make ARCH=powerpc allmodconfigAll error/warnings:
warning: (
MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC)
warning: (MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC) In file included fromarch/powerpc/include/asm/kvm_para.h:26:0, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromarch/powerpc/kernel/asm-offsets.c:53:include/linux/of.h:269:28: error: conflicting types for 'of_get_cpu_node'
extern structdevice_node*of_get_cpu_node(int cpu); ^ In file included frominclude/linux/of.h:139:0, fromarch/powerpc/include/asm/kvm_para.h:26, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromarch/powerpc/kernel/asm-offsets.c:53:arch/powerpc/include/asm/prom.h:47:21: note: previous declaration of 'of_get_cpu_node' was here
structdevice_node*of_get_cpu_node(int cpu, unsigned int *thread); ^ make[2]: *** [arch/powerpc/kernel/asm-offsets.s] Error 1 make[2]:
Target__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Targetprepare' not remade because of errors. make: *** [sub-make] Error 2
Quoted 9 lines
Quoted 3 lines
There seems to be conflict in the new function "
of_get_cpu_node" added. PowerPC also defines the same function name. Further microblaze and openrisc declares it(can be removed) but doesn't define it.Feel free to remove it for Microblaze.
There was probably any reason why it was there.
Or maybe no reason and it was just there because Microblaze was based on powerpc code.
Thanks Michal, will remove it.
Regards,
Sudeep
Quoted 12 lines · Sudeep KarkadaNagesha
Adding PowerPC list
Quoted 9 lines · Rafael J. Wysocki
Quoted 8 lines · Sudeep KarkadaNagesha
The following changes since commit
d4e4ab86bcba5a72779c43dc1459f71fea3d89c8:Linux 3.11-rc5 (2013-08-11 18:04:20 -0700)
are available in the git repository at:
git://linux-arm.org/linux-skn.gitcpu_of_node
[snip]
Quoted 39 lines
Quoted 17 lines
All error/warnings:
warning: (
MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC)
warning: (MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC) In file included fromarch/powerpc/include/asm/kvm_para.h:26:0, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromarch/powerpc/kernel/asm-offsets.c:53:include/linux/of.h:269:28: error: conflicting types for 'of_get_cpu_node'
extern structdevice_node*of_get_cpu_node(int cpu); ^ In file included frominclude/linux/of.h:139:0, fromarch/powerpc/include/asm/kvm_para.h:26, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromQuoted 9 lines
arch/powerpc/kernel/asm-offsets.c:53:arch/powerpc/include/asm/prom.h:47:21: note: previous declaration of 'of_get_cpu_node' was here
structdevice_node*of_get_cpu_node(int cpu, unsigned int *thread); ^ make[2]: *** [arch/powerpc/kernel/asm-offsets.s] Error 1 make[2]:
Target__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Targetprepare' not remade because of errors. make: *** [sub-make] Error 2There seems to be conflict in the new function "
of_get_cpu_node" added. PowerPC also defines the same function name. Further microblaze and openrisc declares it(can be removed) but doesn't define it. To fix this:
1. I can rename the newly added function to something different likeof_get_cpunodeor
2. If of_* namespace should be used by only OF/FDT and not by any architecture specific code, then the arch specific version can be renamed to some thing likearch_of_get_cpu_node.
Also most of the calls to arch specific function can be moved to generic code.
Quoted 1 line
Let me know your thoughts.
It is up to Rafael if he is willing/able to rebase his tree, but I would drop this series until this is sorted out. I think the new common function should be and can be generalized to work for powerpc. It would need to make reg property optional and pass in the device node to the arch specific function.
A short term solution would be just to make the function "#ifndef CONFIG_PPC".
Rob
Quoted 56 lines · Rob Herring
Quoted 12 lines · Sudeep KarkadaNagesha
Adding PowerPC list
Quoted 9 lines · Rafael J. Wysocki
Quoted 8 lines · Sudeep KarkadaNagesha
The following changes since commit
d4e4ab86bcba5a72779c43dc1459f71fea3d89c8:Linux 3.11-rc5 (2013-08-11 18:04:20 -0700)
are available in the git repository at:
git://linux-arm.org/linux-skn.gitcpu_of_node[snip]
Quoted 39 lines
Quoted 17 lines
All error/warnings:
warning: (
MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC)
warning: (MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC) In file included fromarch/powerpc/include/asm/kvm_para.h:26:0, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromarch/powerpc/kernel/asm-offsets.c:53:include/linux/of.h:269:28: error: conflicting types for 'of_get_cpu_node'
extern structdevice_node*of_get_cpu_node(int cpu); ^ In file included frominclude/linux/of.h:139:0, fromarch/powerpc/include/asm/kvm_para.h:26, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromQuoted 9 lines
arch/powerpc/kernel/asm-offsets.c:53:arch/powerpc/include/asm/prom.h:47:21: note: previous declaration of 'of_get_cpu_node' was here
structdevice_node*of_get_cpu_node(int cpu, unsigned int *thread); ^ make[2]: *** [arch/powerpc/kernel/asm-offsets.s] Error 1 make[2]:
Target__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Targetprepare' not remade because of errors. make: *** [sub-make] Error 2There seems to be conflict in the new function "
of_get_cpu_node" added. PowerPC also defines the same function name. Further microblaze and openrisc declares it(can be removed) but doesn't define it. To fix this:
1. I can rename the newly added function to something different likeof_get_cpunodeor
2. If of_* namespace should be used by only OF/FDT and not by any architecture specific code, then the arch specific version can be renamed to some thing likearch_of_get_cpu_node.
Also most of the calls to arch specific function can be moved to generic code.
Quoted 4 lines
Quoted 1 line
Let me know your thoughts.
It is up to Rafael if he is willing/able to rebase his tree, but I would drop this series until this is sorted out.
Yeah, I've just done that.
Quoted 6 lines
I think the new common function should be and can be generalized to work for powerpc.
It would need to make reg property optional and pass in the device node to the arch specific function.A short term solution would be just to make the function "#ifndef
CONFIG_PPC".
I wouldn't do that, it's almost guaranteed to be messy going forward.
I'd go for 1 above personally.
Thanks,
Rafael
Quoted 2 lines · Rafael J. Wysocki
I'd go for 1 above personally.
Yuck no. Two functions with roughly the same name and the same purpose differing only by an underscore just because one can't take 5mn to reconcile the new one with the old one ? No way.
Ben.
Quoted 57 lines · Rafael J. Wysocki
Quoted 56 lines · Rob Herring
Quoted 12 lines · Sudeep KarkadaNagesha
Adding PowerPC list
Quoted 9 lines · Rafael J. Wysocki
Quoted 8 lines · Sudeep KarkadaNagesha
The following changes since commit
d4e4ab86bcba5a72779c43dc1459f71fea3d89c8:Linux 3.11-rc5 (2013-08-11 18:04:20 -0700)
are available in the git repository at:
git://linux-arm.org/linux-skn.gitcpu_of_node[snip]
Quoted 39 lines
Quoted 17 lines
All error/warnings:
warning: (
MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC)
warning: (MPC836x_RDK&&MTD_NAND_FSL_ELBC&&MTD_NAND_FSL_UPM) selectsFSL_LBCwhich has unmet direct dependencies (FSL_SOC) In file included fromarch/powerpc/include/asm/kvm_para.h:26:0, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromarch/powerpc/kernel/asm-offsets.c:53:include/linux/of.h:269:28: error: conflicting types for 'of_get_cpu_node'
extern structdevice_node*of_get_cpu_node(int cpu); ^ In file included frominclude/linux/of.h:139:0, fromarch/powerpc/include/asm/kvm_para.h:26, frominclude/uapi/linux/kvm_para.h:26, frominclude/linux/kvm_para.h:4, frominclude/linux/kvm_host.h:30, fromQuoted 9 lines
arch/powerpc/kernel/asm-offsets.c:53:arch/powerpc/include/asm/prom.h:47:21: note: previous declaration of 'of_get_cpu_node' was here
structdevice_node*of_get_cpu_node(int cpu, unsigned int *thread); ^ make[2]: *** [arch/powerpc/kernel/asm-offsets.s] Error 1 make[2]:
Target__build' not remade because of errors. make[1]: *** [prepare0] Error 2 make[1]: Targetprepare' not remade because of errors. make: *** [sub-make] Error 2There seems to be conflict in the new function "
of_get_cpu_node" added. PowerPC also defines the same function name. Further microblaze and openrisc declares it(can be removed) but doesn't define it. To fix this:
1. I can rename the newly added function to something different likeof_get_cpunodeor
2. If of_* namespace should be used by only OF/FDT and not by any architecture specific code, then the arch specific version can be renamed to some thing likearch_of_get_cpu_node.
Also most of the calls to arch specific function can be moved to generic code.
Quoted 7 lines
Quoted 4 lines
Quoted 1 line
Let me know your thoughts.
It is up to Rafael if he is willing/able to rebase his tree, but I would drop this series until this is sorted out.
Yeah, I've just done that.
Thanks Rafael, sorry for the trouble. I didn't expect of_* name-space to be used in ARCH specific code.
Quoted 10 lines
Quoted 6 lines
I think the new common function should be and can be generalized to work for powerpc.
It would need to make reg property optional and pass in the device node to the arch specific function.A short term solution would be just to make the function "#ifndef
CONFIG_PPC".I wouldn't do that, it's almost guaranteed to be messy going forward.
I'd go for 1 above personally.
Even though it's easier approach, I would go for fixing PPC and converge at generic of_get_cpu_node implementation if possible.
Regards,
Sudeep
Quoted 8 lines · Rob Herring
It is up to Rafael if he is willing/able to rebase his tree, but I would drop this series until this is sorted out. I think the new common function should be and can be generalized to work for powerpc. It would need to make reg property optional and pass in the device node to the arch specific function.
A short term solution would be just to make the function "#ifndef
CONFIG_PPC".
Please, no ifdef's with different signatures. Let's agree on the prototype first (ie, thread output argument) and make the generic one weak.
Cheers,
Ben.
Quoted 12 lines · Sudeep KarkadaNagesha
There seems to be conflict in the new function "
of_get_cpu_node" added. PowerPC also defines the same function name. Further microblaze and openrisc declares it(can be removed) but doesn't define it. To fix this:
1. I can rename the newly added function to something different likeof_get_cpunodeor
2. If of_* namespace should be used by only OF/FDT and not by any architecture specific code, then the arch specific version can be renamed to some thing likearch_of_get_cpu_node.
Also most of the calls to arch specific function can be moved to generic code.
Quoted 1 line
Let me know your thoughts.
What is your new function about ? Does it perform the same job as the one in powerpc ? If yes, make sure you have the same signature and either copy the powerpc one over to a generic place or make the generic one weak if you don't want the powerpc thread counting logic.
Cheers,
Ben.