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 <lokeshvu...@ti.com>

Thanks and regards,
Lokesh


> 
> Reported-by: Bin Liu <b-...@ti.com>
> Signed-off-by: Nishanth Menon <n...@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 */
> 
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to