[U-Boot] [PATCH 2/2] ARM: keystone2: Add missing privilege ID settings
Lokesh Vutla
a0131933 at ti.com
Thu Mar 24 03:43:02 CET 2016
On Wednesday 23 March 2016 08:44 PM, Nishanth Menon wrote:
> Add missing Privilege ID settings for KS2 SoCs.
>
> Based on:
> K2H/K: Table 6-7. Privilege ID Settings from SPRS866E (Nov 2013)
> http://www.ti.com/lit/ds/symlink/66ak2h14.pdf (page 99)
> K2L: Table 7-7. Privilege ID Settings from SPRS930 (April 2015)
> http://www.ti.com/lit/ds/symlink/66ak2l06.pdf (page 71)
> K2E: Table 7-7. Privilege ID Settings from SPRS865D (Mar 2015)
> http://www.ti.com/lit/ds/symlink/66ak2e05.pdf (page 75)
> K2G: Table 3-16. PrivIDs from SPRUHY8 (Jan 2016)
> http://www.ti.com/lit/ug/spruhy8/spruhy8.pdf (page 238)
>
> Overall mapping:
> -------+-----------+-----------+-----------+---------
> PrivID | KS2H/K | K2L | K2E | K2G
> -------+-----------+-----------+-----------+---------
> 0 | C66x 0 | C66x 0 | C66x 0 | C66x 0
> 1 | C66x 1 | C66x 1 | Reserved | ARM
> 2 | C66x 2 | C66x 2 | Reserved | ICSS0
> 3 | C66x 3 | C66x 3 | Reserved | ICSS1
> 4 | C66x 4 | Reserved | Reserved | NETCP
> 5 | C66x 5 | Reserved | Reserved | CPIE
> 6 | C66x 6 | Reserved | Reserved | USB
> 7 | C66x 7 | Reserved | Reserved | Reserved
> 8 | ARM | ARM | ARM | MLB
> 9 | NetCP | NetCP | NetCP | PMMC
> 10 | QM_PDSP | QM_PDSP | QM_PDSP | DSS
> 11 | PCIe_0 | PCIe_0 | PCIe_0 | MMC
> 12 | DEBUG/DAP | DEBUG/DAP | DEBUG/DAP | DEBUG/DAP
> 13 | Reserved | Reserved | PCIe_1 | Reserved
> 14 | HyperLink | PCIe_1 | HyperLink | Reserved
> 15 | Reserved | Reserved | TSIP | Reserved
> -------+-----------+-----------+-----------+---------
>
> NOTE: Few of these might have default configurations, however,
> since most are software configurable, it is better to explicitly
> configure the system to have a known default state.
>
> Without programming these, we end up seeing lack of coherency on certain
> peripherals resulting in inexplicable failures (such as USB peripheral's
> DMA data not appearing on ARM etc and weird workarounds being done by
> drivers including cache flushes which tend to have system wide
> performance impact).
>
> By marking these segments as shared, we also ensure SoC wide coherency
> is enabled.
Reviewed-by: Lokesh Vutla <lokeshvutla at ti.com>
Thanks and regards,
Lokesh
>
> Reported-by: Bin Liu <b-liu at ti.com>
> Signed-off-by: Nishanth Menon <nm at ti.com>
> ---
> arch/arm/mach-keystone/include/mach/hardware.h | 23 ++++++++++++++++++
> arch/arm/mach-keystone/init.c | 32 +++++++++++++++++++++++++-
> 2 files changed, 54 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-keystone/include/mach/hardware.h b/arch/arm/mach-keystone/include/mach/hardware.h
> index dd9268fbf209..38d019056a29 100644
> --- a/arch/arm/mach-keystone/include/mach/hardware.h
> +++ b/arch/arm/mach-keystone/include/mach/hardware.h
> @@ -216,22 +216,45 @@ typedef volatile unsigned int *dv_reg_p;
> #define KS2_MSMC_CTRL_BASE 0x0bc00000
> #define KS2_MSMC_DATA_BASE 0x0c000000
>
> +/* KS2 Generic Privilege ID Settings for MSMC2 */
> +#define KS2_MSMC_SEGMENT_C6X_0 0
> +#define KS2_MSMC_SEGMENT_C6X_1 1
> +#define KS2_MSMC_SEGMENT_C6X_2 2
> +#define KS2_MSMC_SEGMENT_C6X_3 3
> +#define KS2_MSMC_SEGMENT_C6X_4 4
> +#define KS2_MSMC_SEGMENT_C6X_5 5
> +#define KS2_MSMC_SEGMENT_C6X_6 6
> +#define KS2_MSMC_SEGMENT_C6X_7 7
> +
> +#define KS2_MSMC_SEGMENT_DEBUG 12
> +
> /* KS2 HK/L/E MSMC PRIVIDs for MSMC2 */
> #define K2HKLE_MSMC_SEGMENT_ARM 8
> #define K2HKLE_MSMC_SEGMENT_NETCP 9
> #define K2HKLE_MSMC_SEGMENT_QM_PDSP 10
> #define K2HKLE_MSMC_SEGMENT_PCIE0 11
>
> +/* K2HK specific Privilege ID Settings */
> +#define K2HKE_MSMC_SEGMENT_HYPERLINK 14
> +
> /* K2L specific Privilege ID Settings */
> #define K2L_MSMC_SEGMENT_PCIE1 14
>
> /* K2E specific Privilege ID Settings */
> #define K2E_MSMC_SEGMENT_PCIE1 13
> +#define K2E_MSMC_SEGMENT_TSIP 15
>
> /* K2G specific Privilege ID Settings */
> #define K2G_MSMC_SEGMENT_ARM 1
> +#define K2G_MSMC_SEGMENT_ICSS0 2
> +#define K2G_MSMC_SEGMENT_ICSS1 3
> #define K2G_MSMC_SEGMENT_NSS 4
> #define K2G_MSMC_SEGMENT_PCIE 5
> +#define K2G_MSMC_SEGMENT_USB 6
> +#define K2G_MSMC_SEGMENT_MLB 8
> +#define K2G_MSMC_SEGMENT_PMMC 9
> +#define K2G_MSMC_SEGMENT_DSS 10
> +#define K2G_MSMC_SEGMENT_MMC 11
>
> /* MSMC segment size shift bits */
> #define KS2_MSMC_SEG_SIZE_SHIFT 12
> diff --git a/arch/arm/mach-keystone/init.c b/arch/arm/mach-keystone/init.c
> index 2368315ff68c..3b6d5efce1a1 100644
> --- a/arch/arm/mach-keystone/init.c
> +++ b/arch/arm/mach-keystone/init.c
> @@ -98,29 +98,57 @@ static void config_pcie_mode(int pcie_port, enum pci_mode mode)
>
> static void msmc_k2hkle_common_setup(void)
> {
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_0);
> msmc_share_all_segments(K2HKLE_MSMC_SEGMENT_ARM);
> msmc_share_all_segments(K2HKLE_MSMC_SEGMENT_NETCP);
> #ifdef KS2_MSMC_SEGMENT_QM_PDSP
> msmc_share_all_segments(K2HKLE_MSMC_SEGMENT_QM_PDSP);
> #endif
> msmc_share_all_segments(K2HKLE_MSMC_SEGMENT_PCIE0);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_DEBUG);
> +}
> +
> +static void msmc_k2hk_setup(void)
> +{
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_1);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_2);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_3);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_4);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_5);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_6);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_7);
> + msmc_share_all_segments(K2HKE_MSMC_SEGMENT_HYPERLINK);
> }
>
> static inline void msmc_k2l_setup(void)
> {
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_1);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_2);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_3);
> msmc_share_all_segments(K2L_MSMC_SEGMENT_PCIE1);
> }
>
> static inline void msmc_k2e_setup(void)
> {
> msmc_share_all_segments(K2E_MSMC_SEGMENT_PCIE1);
> + msmc_share_all_segments(K2HKE_MSMC_SEGMENT_HYPERLINK);
> + msmc_share_all_segments(K2E_MSMC_SEGMENT_TSIP);
> }
>
> -static inline void msmc_k2g_setup(void)
> +static void msmc_k2g_setup(void)
> {
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_C6X_0);
> msmc_share_all_segments(K2G_MSMC_SEGMENT_ARM);
> + msmc_share_all_segments(K2G_MSMC_SEGMENT_ICSS0);
> + msmc_share_all_segments(K2G_MSMC_SEGMENT_ICSS1);
> msmc_share_all_segments(K2G_MSMC_SEGMENT_NSS);
> msmc_share_all_segments(K2G_MSMC_SEGMENT_PCIE);
> + msmc_share_all_segments(K2G_MSMC_SEGMENT_USB);
> + msmc_share_all_segments(K2G_MSMC_SEGMENT_MLB);
> + msmc_share_all_segments(K2G_MSMC_SEGMENT_PMMC);
> + msmc_share_all_segments(K2G_MSMC_SEGMENT_DSS);
> + msmc_share_all_segments(K2G_MSMC_SEGMENT_MMC);
> + msmc_share_all_segments(KS2_MSMC_SEGMENT_DEBUG);
> }
>
> int arch_cpu_init(void)
> @@ -136,6 +164,8 @@ int arch_cpu_init(void)
> msmc_k2e_setup();
> else if (cpu_is_k2l())
> msmc_k2l_setup();
> + else
> + msmc_k2hk_setup();
> }
>
> /* Initialize the PCIe-0 to work as Root Complex */
>
More information about the U-Boot
mailing list