Skip to content
Snippets Groups Projects
soc.c 1.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * (C) Copyright 2015
     * Kamil Lulko, <kamil.lulko@gmail.com>
     *
     * SPDX-License-Identifier:	GPL-2.0+
     */
    
    #include <common.h>
    #include <asm/io.h>
    #include <asm/armv7m.h>
    #include <asm/arch/stm32.h>
    
    u32 get_cpu_rev(void)
    {
    	return 0;
    }
    
    int arch_cpu_init(void)
    {
    
    	/*
    		* Configure the memory protection unit (MPU)
    		* 0x00000000 - 0xffffffff: Strong-order, Shareable
    		* 0xC0000000 - 0xC0800000: Normal, Outer and inner Non-cacheable
    	 */
    
    	 /* Disable MPU */
    	 writel(0, &V7M_MPU->ctrl);
    
    	 writel(
    		 0x00000000 /* address */
    		 | 1 << 4	/* VALID */
    		 | 0 << 0	/* REGION */
    		 , &V7M_MPU->rbar
    	 );
    
    	 /* Strong-order, Shareable */
    	 /* TEX=000, S=1, C=0, B=0*/
    	 writel(
    		 (V7M_MPU_RASR_XN_ENABLE
    			 | V7M_MPU_RASR_AP_RW_RW
    			 | 0x01 << V7M_MPU_RASR_S_SHIFT
    			 | 0x00 << V7M_MPU_RASR_TEX_SHIFT
    			 | V7M_MPU_RASR_SIZE_4GB
    			 | V7M_MPU_RASR_EN)
    		 , &V7M_MPU->rasr
    	 );
    
    	 writel(
    		 0xC0000000 /* address */
    		 | 1 << 4	/* VALID */
    		 | 1 << 0	/* REGION */
    		 , &V7M_MPU->rbar
    	 );
    
    	 /* Normal, Outer and inner Non-cacheable */
    	 /* TEX=001, S=0, C=0, B=0*/
    	 writel(
    		 (V7M_MPU_RASR_XN_ENABLE
    			 | V7M_MPU_RASR_AP_RW_RW
    			 | 0x01 << V7M_MPU_RASR_TEX_SHIFT
    			 | V7M_MPU_RASR_SIZE_8MB
    			 | V7M_MPU_RASR_EN)
    			 , &V7M_MPU->rasr
    	 );
    
    	 /* Enable MPU */
    	 writel(V7M_MPU_CTRL_ENABLE | V7M_MPU_CTRL_HFNMIENA, &V7M_MPU->ctrl);