Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934065AbbFWVuc (ORCPT ); Tue, 23 Jun 2015 17:50:32 -0400 Received: from fish.king.net.pl ([79.190.246.46]:36999 "EHLO king.net.pl" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934039AbbFWVuO (ORCPT ); Tue, 23 Jun 2015 17:50:14 -0400 From: Paul Osmialowski To: Andrew Morton , Anson Huang , Ard Biesheuvel , Arnd Bergmann , Bhupesh Sharma , Daniel Lezcano , Frank Li , Geert Uytterhoeven , Greg Kroah-Hartman , Guenter Roeck , Haojian Zhuang , Ian Campbell , Jingchang Lu , Jiri Slaby , Kees Cook , Kumar Gala , Laurent Pinchart , Linus Walleij , Magnus Damm , Michael Turquette , Nathan Lynch , Nicolas Pitre , Maxime Coquelin stm32 , Olof Johansson , Paul Bolle , Rob Herring , Rob Herring , Russell King , Sergey Senozhatsky , Shawn Guo , Simon Horman , Stefan Agner , Stephen Boyd , Thomas Gleixner , Uwe Kleine-Koenig , Catalin Marinas , Dave Martin , Mark Rutland , Pawel Moll , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-serial@vger.kernel.org, devicetree@vger.kernel.org, dmaengine@vger.kernel.org Cc: Paul Osmialowski , Yuri Tikhonov , Sergei Poselenov , Dmitry Cherkassov , Alexander Potashev Subject: [PATCH 4/9] arm: allow copying of vector table to internal SRAM memory Date: Tue, 23 Jun 2015 23:19:42 +0200 Message-Id: <1435094387-20146-5-git-send-email-pawelo@king.net.pl> X-Mailer: git-send-email 2.3.6 In-Reply-To: <1435094387-20146-1-git-send-email-pawelo@king.net.pl> References: <1435094387-20146-1-git-send-email-pawelo@king.net.pl> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2892 Lines: 84 Based on part of the commit published on Emcraft git repo: https://github.com/EmcraftSystems/linux-emcraft.git 2ce1841b590d014d8738215fb1ffe05f53c8d9f0 "some commit" by: Dmitry Cherkassov The ARM v7M allows setting the vector table either in the boot memory or in the internal SRAM memory, controlled by Bit 29 in the Vector Table Base register. This implies that the OS vector table needs to be copied to the internal RAM. New option CONFIG_COPY_VECTOR_TABLE_TO_SRAM_ADDR allows specification of the desired destination for the OS vector table. Signed-off-by: Paul Osmialowski --- arch/arm/Kconfig-nommu | 11 +++++++++++ arch/arm/kernel/entry-v7m.S | 3 +++ arch/arm/mm/proc-v7m.S | 11 +++++++++++ 3 files changed, 25 insertions(+) diff --git a/arch/arm/Kconfig-nommu b/arch/arm/Kconfig-nommu index 965ca97..98220e8 100644 --- a/arch/arm/Kconfig-nommu +++ b/arch/arm/Kconfig-nommu @@ -66,3 +66,14 @@ config ARM_MPU config ZLIB_INFLATE_STACK_SAVING bool 'Do not place huge encoder tables on stack' if ZLIB_INFLATE depends on ZLIB_INFLATE + +config COPY_VECTOR_TABLE_TO_SRAM_ADDR + hex 'If non-zero, copy Vector Table to this SRAM Address' if CPU_V7M + default 0x00000000 + depends on CPU_V7M + help + The ARM v7M allows setting the vector table either in + the boot memory or in the internal SRAM memory, controlled + by Bit 29 in the Vector Table Base register. + This implies that the OS vector table needs to be copied to + the internal RAM. diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S index b6c8bb9..114096e 100644 --- a/arch/arm/kernel/entry-v7m.S +++ b/arch/arm/kernel/entry-v7m.S @@ -146,3 +146,6 @@ ENTRY(vector_table) .rept CONFIG_CPU_V7M_NUM_IRQ .long __irq_entry @ External Interrupts .endr +#if CONFIG_COPY_VECTOR_TABLE_TO_SRAM_ADDR > 0x00000000 +ENTRY(vector_table_end) +#endif diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S index 67d9209..ded9504 100644 --- a/arch/arm/mm/proc-v7m.S +++ b/arch/arm/mm/proc-v7m.S @@ -83,7 +83,18 @@ ENDPROC(cpu_v7m_do_resume) __v7m_setup: @ Configure the vector table base address ldr r0, =BASEADDR_V7M_SCB +#if CONFIG_COPY_VECTOR_TABLE_TO_SRAM_ADDR > 0x00000000 + ldr r12, =CONFIG_COPY_VECTOR_TABLE_TO_SRAM_ADDR + mov r5, r12 @ Copy the kernel vector_table to + ldr r6, =vector_table @ the in-SRAM vector table + ldr r4, =vector_table_end +1: ldr r3, [r6], #4 + str r3, [r5], #4 + cmp r6, r4 + bne 1b @ End of the copy code +#else ldr r12, =vector_table +#endif str r12, [r0, V7M_SCB_VTOR] @ enable UsageFault, BusFault and MemManage fault. -- 2.3.6 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/