aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/cache-l2x0.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2014-03-16 16:52:25 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2014-05-29 19:48:43 -0400
commit1a5a954ce0dd8ba1fc8b5305bcdb6e4cf7d6939b (patch)
tree3eb2562e07d3656418a3e0fcc87fb3d479663978 /arch/arm/mm/cache-l2x0.c
parenta8875a092af5d9f88f6c335dd07d8988e80e1343 (diff)
ARM: l2c: fix register naming
We have a mixture of different devices with different register layouts, but we group all the bits together in an opaque mess. Split them out into those which are L2C-310 specific and ones which refer to earlier devices. Provide full auxiliary control register definitions. Acked-by: Tony Lindgren <tony@atomide.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Shawn Guo <shawn.guo@linaro.org> Acked-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mm/cache-l2x0.c')
-rw-r--r--arch/arm/mm/cache-l2x0.c57
1 files changed, 29 insertions, 28 deletions
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
index 84933f48edea..c5c8a4152825 100644
--- a/arch/arm/mm/cache-l2x0.c
+++ b/arch/arm/mm/cache-l2x0.c
@@ -576,13 +576,13 @@ static void __init l2c310_save(void __iomem *base)
576 unsigned revision; 576 unsigned revision;
577 577
578 l2x0_saved_regs.tag_latency = readl_relaxed(base + 578 l2x0_saved_regs.tag_latency = readl_relaxed(base +
579 L2X0_TAG_LATENCY_CTRL); 579 L310_TAG_LATENCY_CTRL);
580 l2x0_saved_regs.data_latency = readl_relaxed(base + 580 l2x0_saved_regs.data_latency = readl_relaxed(base +
581 L2X0_DATA_LATENCY_CTRL); 581 L310_DATA_LATENCY_CTRL);
582 l2x0_saved_regs.filter_end = readl_relaxed(base + 582 l2x0_saved_regs.filter_end = readl_relaxed(base +
583 L2X0_ADDR_FILTER_END); 583 L310_ADDR_FILTER_END);
584 l2x0_saved_regs.filter_start = readl_relaxed(base + 584 l2x0_saved_regs.filter_start = readl_relaxed(base +
585 L2X0_ADDR_FILTER_START); 585 L310_ADDR_FILTER_START);
586 586
587 revision = readl_relaxed(base + L2X0_CACHE_ID) & 587 revision = readl_relaxed(base + L2X0_CACHE_ID) &
588 L2X0_CACHE_ID_RTL_MASK; 588 L2X0_CACHE_ID_RTL_MASK;
@@ -590,12 +590,12 @@ static void __init l2c310_save(void __iomem *base)
590 /* From r2p0, there is Prefetch offset/control register */ 590 /* From r2p0, there is Prefetch offset/control register */
591 if (revision >= L310_CACHE_ID_RTL_R2P0) 591 if (revision >= L310_CACHE_ID_RTL_R2P0)
592 l2x0_saved_regs.prefetch_ctrl = readl_relaxed(base + 592 l2x0_saved_regs.prefetch_ctrl = readl_relaxed(base +
593 L2X0_PREFETCH_CTRL); 593 L310_PREFETCH_CTRL);
594 594
595 /* From r3p0, there is Power control register */ 595 /* From r3p0, there is Power control register */
596 if (revision >= L310_CACHE_ID_RTL_R3P0) 596 if (revision >= L310_CACHE_ID_RTL_R3P0)
597 l2x0_saved_regs.pwr_ctrl = readl_relaxed(base + 597 l2x0_saved_regs.pwr_ctrl = readl_relaxed(base +
598 L2X0_POWER_CTRL); 598 L310_POWER_CTRL);
599} 599}
600 600
601static void l2c310_resume(void) 601static void l2c310_resume(void)
@@ -607,23 +607,23 @@ static void l2c310_resume(void)
607 607
608 /* restore pl310 setup */ 608 /* restore pl310 setup */
609 writel_relaxed(l2x0_saved_regs.tag_latency, 609 writel_relaxed(l2x0_saved_regs.tag_latency,
610 base + L2X0_TAG_LATENCY_CTRL); 610 base + L310_TAG_LATENCY_CTRL);
611 writel_relaxed(l2x0_saved_regs.data_latency, 611 writel_relaxed(l2x0_saved_regs.data_latency,
612 base + L2X0_DATA_LATENCY_CTRL); 612 base + L310_DATA_LATENCY_CTRL);
613 writel_relaxed(l2x0_saved_regs.filter_end, 613 writel_relaxed(l2x0_saved_regs.filter_end,
614 base + L2X0_ADDR_FILTER_END); 614 base + L310_ADDR_FILTER_END);
615 writel_relaxed(l2x0_saved_regs.filter_start, 615 writel_relaxed(l2x0_saved_regs.filter_start,
616 base + L2X0_ADDR_FILTER_START); 616 base + L310_ADDR_FILTER_START);
617 617
618 revision = readl_relaxed(base + L2X0_CACHE_ID) & 618 revision = readl_relaxed(base + L2X0_CACHE_ID) &
619 L2X0_CACHE_ID_RTL_MASK; 619 L2X0_CACHE_ID_RTL_MASK;
620 620
621 if (revision >= L310_CACHE_ID_RTL_R2P0) 621 if (revision >= L310_CACHE_ID_RTL_R2P0)
622 l2c_write_sec(l2x0_saved_regs.prefetch_ctrl, base, 622 l2c_write_sec(l2x0_saved_regs.prefetch_ctrl, base,
623 L2X0_PREFETCH_CTRL); 623 L310_PREFETCH_CTRL);
624 if (revision >= L310_CACHE_ID_RTL_R3P0) 624 if (revision >= L310_CACHE_ID_RTL_R3P0)
625 l2c_write_sec(l2x0_saved_regs.pwr_ctrl, base, 625 l2c_write_sec(l2x0_saved_regs.pwr_ctrl, base,
626 L2X0_POWER_CTRL); 626 L310_POWER_CTRL);
627 627
628 l2c_enable(base, l2x0_saved_regs.aux_ctrl, 8); 628 l2c_enable(base, l2x0_saved_regs.aux_ctrl, 8);
629 } 629 }
@@ -658,11 +658,11 @@ static void __init l2c310_fixup(void __iomem *base, u32 cache_id,
658 658
659 if (revision >= L310_CACHE_ID_RTL_R3P0 && 659 if (revision >= L310_CACHE_ID_RTL_R3P0 &&
660 revision < L310_CACHE_ID_RTL_R3P2) { 660 revision < L310_CACHE_ID_RTL_R3P2) {
661 u32 val = readl_relaxed(base + L2X0_PREFETCH_CTRL); 661 u32 val = readl_relaxed(base + L310_PREFETCH_CTRL);
662 /* I don't think bit23 is required here... but iMX6 does so */ 662 /* I don't think bit23 is required here... but iMX6 does so */
663 if (val & (BIT(30) | BIT(23))) { 663 if (val & (BIT(30) | BIT(23))) {
664 val &= ~(BIT(30) | BIT(23)); 664 val &= ~(BIT(30) | BIT(23));
665 l2c_write_sec(val, base, L2X0_PREFETCH_CTRL); 665 l2c_write_sec(val, base, L310_PREFETCH_CTRL);
666 errata[n++] = "752271"; 666 errata[n++] = "752271";
667 } 667 }
668 } 668 }
@@ -759,7 +759,8 @@ static void __init __l2c_init(const struct l2c_init_data *data,
759 * 759 *
760 * L2 cache size = number of ways * way size. 760 * L2 cache size = number of ways * way size.
761 */ 761 */
762 way_size_bits = (aux & L2X0_AUX_CTRL_WAY_SIZE_MASK) >> 17; 762 way_size_bits = (aux & L2C_AUX_CTRL_WAY_SIZE_MASK) >>
763 L2C_AUX_CTRL_WAY_SIZE_SHIFT;
763 l2x0_size = ways * (data->way_size_0 << way_size_bits); 764 l2x0_size = ways * (data->way_size_0 << way_size_bits);
764 765
765 fns = data->outer_cache; 766 fns = data->outer_cache;
@@ -902,27 +903,27 @@ static void __init l2c310_of_parse(const struct device_node *np,
902 of_property_read_u32_array(np, "arm,tag-latency", tag, ARRAY_SIZE(tag)); 903 of_property_read_u32_array(np, "arm,tag-latency", tag, ARRAY_SIZE(tag));
903 if (tag[0] && tag[1] && tag[2]) 904 if (tag[0] && tag[1] && tag[2])
904 writel_relaxed( 905 writel_relaxed(
905 ((tag[0] - 1) << L2X0_LATENCY_CTRL_RD_SHIFT) | 906 L310_LATENCY_CTRL_RD(tag[0] - 1) |
906 ((tag[1] - 1) << L2X0_LATENCY_CTRL_WR_SHIFT) | 907 L310_LATENCY_CTRL_WR(tag[1] - 1) |
907 ((tag[2] - 1) << L2X0_LATENCY_CTRL_SETUP_SHIFT), 908 L310_LATENCY_CTRL_SETUP(tag[2] - 1),
908 l2x0_base + L2X0_TAG_LATENCY_CTRL); 909 l2x0_base + L310_TAG_LATENCY_CTRL);
909 910
910 of_property_read_u32_array(np, "arm,data-latency", 911 of_property_read_u32_array(np, "arm,data-latency",
911 data, ARRAY_SIZE(data)); 912 data, ARRAY_SIZE(data));
912 if (data[0] && data[1] && data[2]) 913 if (data[0] && data[1] && data[2])
913 writel_relaxed( 914 writel_relaxed(
914 ((data[0] - 1) << L2X0_LATENCY_CTRL_RD_SHIFT) | 915 L310_LATENCY_CTRL_RD(data[0] - 1) |
915 ((data[1] - 1) << L2X0_LATENCY_CTRL_WR_SHIFT) | 916 L310_LATENCY_CTRL_WR(data[1] - 1) |
916 ((data[2] - 1) << L2X0_LATENCY_CTRL_SETUP_SHIFT), 917 L310_LATENCY_CTRL_SETUP(data[2] - 1),
917 l2x0_base + L2X0_DATA_LATENCY_CTRL); 918 l2x0_base + L310_DATA_LATENCY_CTRL);
918 919
919 of_property_read_u32_array(np, "arm,filter-ranges", 920 of_property_read_u32_array(np, "arm,filter-ranges",
920 filter, ARRAY_SIZE(filter)); 921 filter, ARRAY_SIZE(filter));
921 if (filter[1]) { 922 if (filter[1]) {
922 writel_relaxed(ALIGN(filter[0] + filter[1], SZ_1M), 923 writel_relaxed(ALIGN(filter[0] + filter[1], SZ_1M),
923 l2x0_base + L2X0_ADDR_FILTER_END); 924 l2x0_base + L310_ADDR_FILTER_END);
924 writel_relaxed((filter[0] & ~(SZ_1M - 1)) | L2X0_ADDR_FILTER_EN, 925 writel_relaxed((filter[0] & ~(SZ_1M - 1)) | L310_ADDR_FILTER_EN,
925 l2x0_base + L2X0_ADDR_FILTER_START); 926 l2x0_base + L310_ADDR_FILTER_START);
926 } 927 }
927} 928}
928 929
@@ -1298,7 +1299,7 @@ static void __init tauros3_save(void __iomem *base)
1298 l2x0_saved_regs.aux2_ctrl = 1299 l2x0_saved_regs.aux2_ctrl =
1299 readl_relaxed(base + TAUROS3_AUX2_CTRL); 1300 readl_relaxed(base + TAUROS3_AUX2_CTRL);
1300 l2x0_saved_regs.prefetch_ctrl = 1301 l2x0_saved_regs.prefetch_ctrl =
1301 readl_relaxed(base + L2X0_PREFETCH_CTRL); 1302 readl_relaxed(base + L310_PREFETCH_CTRL);
1302} 1303}
1303 1304
1304static void tauros3_resume(void) 1305static void tauros3_resume(void)
@@ -1309,7 +1310,7 @@ static void tauros3_resume(void)
1309 writel_relaxed(l2x0_saved_regs.aux2_ctrl, 1310 writel_relaxed(l2x0_saved_regs.aux2_ctrl,
1310 base + TAUROS3_AUX2_CTRL); 1311 base + TAUROS3_AUX2_CTRL);
1311 writel_relaxed(l2x0_saved_regs.prefetch_ctrl, 1312 writel_relaxed(l2x0_saved_regs.prefetch_ctrl,
1312 base + L2X0_PREFETCH_CTRL); 1313 base + L310_PREFETCH_CTRL);
1313 1314
1314 l2c_enable(base, l2x0_saved_regs.aux_ctrl, 8); 1315 l2c_enable(base, l2x0_saved_regs.aux_ctrl, 8);
1315 } 1316 }