diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2014-03-16 16:52:25 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2014-05-29 19:48:43 -0400 |
commit | 1a5a954ce0dd8ba1fc8b5305bcdb6e4cf7d6939b (patch) | |
tree | 3eb2562e07d3656418a3e0fcc87fb3d479663978 /arch/arm/mm/cache-l2x0.c | |
parent | a8875a092af5d9f88f6c335dd07d8988e80e1343 (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.c | 57 |
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 | ||
601 | static void l2c310_resume(void) | 601 | static 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 | ||
1304 | static void tauros3_resume(void) | 1305 | static 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 | } |