Skip to content

Commit

Permalink
ARM: PRIMA2: initialize l2x0 according to mach from DT
Browse files Browse the repository at this point in the history
prima2 and marco have diffetent l2 cache configuration, so
we initialize l2x0 cache based on dtb given to kernel.

Signed-off-by: Barry Song <Baohua.Song@csr.com>
Reviewed-by: Mark Rutland <mark.rutland@arm.com>
  • Loading branch information
Barry Song authored and Barry Song committed Jan 22, 2013
1 parent 20ddfa9 commit ea38960
Showing 1 changed file with 24 additions and 5 deletions.
29 changes: 24 additions & 5 deletions arch/arm/mach-prima2/l2x0.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,38 @@
#include <linux/of.h>
#include <asm/hardware/cache-l2x0.h>

static struct of_device_id prima2_l2x0_ids[] = {
{ .compatible = "sirf,prima2-pl310-cache" },
struct l2x0_aux
{
u32 val;
u32 mask;
};

static struct l2x0_aux prima2_l2x0_aux __initconst = {
.val = 2 << L2X0_AUX_CTRL_WAY_SIZE_SHIFT,
.mask = 0,
};

static struct l2x0_aux marco_l2x0_aux __initconst = {
.val = (2 << L2X0_AUX_CTRL_WAY_SIZE_SHIFT) |
(1 << L2X0_AUX_CTRL_ASSOCIATIVITY_SHIFT),
.mask = L2X0_AUX_CTRL_MASK,
};

static struct of_device_id sirf_l2x0_ids[] __initconst = {
{ .compatible = "sirf,prima2-pl310-cache", .data = &prima2_l2x0_aux, },
{ .compatible = "sirf,marco-pl310-cache", .data = &marco_l2x0_aux, },
{},
};

static int __init sirfsoc_l2x0_init(void)
{
struct device_node *np;
const struct l2x0_aux *aux;

np = of_find_matching_node(NULL, prima2_l2x0_ids);
np = of_find_matching_node(NULL, sirf_l2x0_ids);
if (np) {
pr_info("Initializing prima2 L2 cache\n");
return l2x0_of_init(0x40000, 0);
aux = of_match_node(sirf_l2x0_ids, np)->data;
return l2x0_of_init(aux->val, aux->mask);
}

return 0;
Expand Down

0 comments on commit ea38960

Please sign in to comment.