Skip to content

Commit

Permalink
[POWERPC] 4xx: update 440EP(x)/440GR(x) identical PVR issue workaround
Browse files Browse the repository at this point in the history
Renaming the CPU nodes with generic names put the CPU model in
the "model" property and thus broke the PowerPC 440EP(x)/440GR(x)
identical PVR workaround. The updates it to use the new model property
for CPU identification.

Signed-off-by: Valentine Barshak <vbarshak@ru.mvista.com>
Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
  • Loading branch information
Valentine Barshak authored and Josh Boyer committed Dec 23, 2007
1 parent 72fda11 commit 14b3d92
Showing 1 changed file with 25 additions and 12 deletions.
37 changes: 25 additions & 12 deletions arch/powerpc/kernel/prom.c
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,29 @@ static struct feature_property {
#endif /* CONFIG_PPC64 */
};

#if defined(CONFIG_44x) && defined(CONFIG_PPC_FPU)
static inline void identical_pvr_fixup(unsigned long node)
{
unsigned int pvr;
char *model = of_get_flat_dt_prop(node, "model", NULL);

/*
* Since 440GR(x)/440EP(x) processors have the same pvr,
* we check the node path and set bit 28 in the cur_cpu_spec
* pvr for EP(x) processor version. This bit is always 0 in
* the "real" pvr. Then we call identify_cpu again with
* the new logical pvr to enable FPU support.
*/
if (model && strstr(model, "440EP")) {
pvr = cur_cpu_spec->pvr_value | 0x8;
identify_cpu(0, pvr);
DBG("Using logical pvr %x for %s\n", pvr, model);
}
}
#else
#define identical_pvr_fixup(node) do { } while(0)
#endif

static void __init check_cpu_feature_properties(unsigned long node)
{
unsigned long i;
Expand Down Expand Up @@ -711,18 +734,8 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
prop = of_get_flat_dt_prop(node, "cpu-version", NULL);
if (prop && (*prop & 0xff000000) == 0x0f000000)
identify_cpu(0, *prop);
#if defined(CONFIG_44x) && defined(CONFIG_PPC_FPU)
/*
* Since 440GR(x)/440EP(x) processors have the same pvr,
* we check the node path and set bit 28 in the cur_cpu_spec
* pvr for EP(x) processor version. This bit is always 0 in
* the "real" pvr. Then we call identify_cpu again with
* the new logical pvr to enable FPU support.
*/
if (strstr(uname, "440EP")) {
identify_cpu(0, cur_cpu_spec->pvr_value | 0x8);
}
#endif

identical_pvr_fixup(node);
}

check_cpu_feature_properties(node);
Expand Down

0 comments on commit 14b3d92

Please sign in to comment.