ARM: zynq: ARCH_MULTIPLATFORM support
Subsystems (3)
cover ARM: zynq: ARCH_MULTIPLATFORM support
Michal-
Here's an attempt at supporting ARCH_MULTIPLATFORM on Zynq. I've gotten a multiplatform kernel building and booting on the zc702, although I haven't tried to boot the same image on another non-Zynq board, due to lack of available hardware.
It would be super awesome if this set could land in 3.8, but I know we're running out of time there. I wouldn't be too heartbroken if it didn't make it.
This patchset is on top of your arm-next branch and with the debug_ll_init support patch @ arm-soc/devel/debug_ll_init.
Patch 1 drops the early TTC mapping. It is not necessary, since the TTC driver now supports pulling mapping info from the device tree.
Patch 2 converts zynq to use the debug_ll_init() infrastructure slated to go into 3.8.
Patch 3 is the bulk of the set, moving around logic around within mach-zynq/include, and setting up the necessary build magic to get Zynq building w/ CONFIG_ARCH_MULTIPLATFORM.
Thanks,
Josh
---
Josh Cartwright (3):
ARM: zynq: remove TTC early mapping
ARM: zynq: make use of debug_ll_io_init()
ARM: zynq: add support for ARCH_MULTIPLATFORM
arch/arm/Kconfig | 14 +-----
arch/arm/Kconfig.debug | 1 +
.../mach/debug-macro.S => include/debug/zynq.S} | 23 ++++++++--
arch/arm/mach-zynq/Kconfig | 13 ++++++
arch/arm/mach-zynq/common.c | 38 +++++-----------
arch/arm/mach-zynq/include/mach/uart.h | 25 ----------
arch/arm/mach-zynq/include/mach/uncompress.h | 51 ---------------------
arch/arm/mach-zynq/include/mach/zynq_soc.h | 53 ----------------------
arch/arm/mach-zynq/timer.c | 1 -
9 files changed, 46 insertions(+), 173 deletions(-)
rename arch/arm/{mach-zynq/include/mach/debug-macro.S => include/debug/zynq.S} (61%)
create mode 100644 arch/arm/mach-zynq/Kconfig
delete mode 100644 arch/arm/mach-zynq/include/mach/uart.h
delete mode 100644 arch/arm/mach-zynq/include/mach/uncompress.h
delete mode 100644 arch/arm/mach-zynq/include/mach/zynq_soc.hSignature · 1 line
1.8.0
PATCH 1/3 ARM: zynq: remove TTC early mapping
Now that the TTC driver has proper support for DT bindings, it is not necessary for the registers to be mapped early. They will be mapped during clock initialization using of_iomap(). Remove the early mapping.
In addition, remove the extraneous zynq_soc.h include from the timer driver.
--- arch/arm/mach-zynq/common.c | 5 ----- arch/arm/mach-zynq/include/mach/zynq_soc.h | 6 +----- arch/arm/mach-zynq/timer.c | 1 - 3 files changed, 1 insertion(+), 11 deletions(-)
arch/arm/mach-zynq/common.c +0 -5
@@ -74,11 +74,6 @@ static void __init xilinx_irq_init(void)static struct map_desc io_desc[]__initdata = { { - .virtual =TTC0_VIRT , - .pfn =__phys_to_pfn (TTC0_PHYS ), - .length =TTC0_SIZE , - .type =MT_DEVICE , - }, { .virtual =SCU_PERIPH_VIRT , .pfn =__phys_to_pfn (SCU_PERIPH_PHYS ), .length =SCU_PERIPH_SIZE ,
arch/arm/mach-zynq/include/mach/zynq_soc.h +1 -5
@@ -29,13 +29,9 @@#define UART_SIZE SZ_4K#define UART_VIRT 0xF0001000 -#define TTC0_PHYS 0xF8001000 -#define TTC0_SIZE SZ_4K -#define TTC0_VIRT (VMALLOC_END - TTC0_SIZE) -#define SCU_PERIPH_PHYS 0xF8F00000#define SCU_PERIPH_SIZE SZ_8K -#define SCU_PERIPH_VIRT (TTC0_VIRT - SCU_PERIPH_SIZE) +#define SCU_PERIPH_VIRT (VMALLOC_END - SCU_PERIPH_SIZE)#if IS_ENABLED (CONFIG_DEBUG_ZYNQ_UART1 )# define LL_UART_PADDR UART1_PHYS
arch/arm/mach-zynq/timer.c +0 -1
@@ -29,7 +29,6 @@#include <linux/slab.h> #include <linux/clk-provider.h> -#include <mach/zynq_soc.h> #include "common.h" /*
Signature · 1 line
1.8.0
Re: [PATCH 1/3] ARM: zynq: remove TTC early mapping
2012/11/19 Josh Cartwright <[email protected]>:
Quoted 7 lines
Now that the TTC driver has proper support for DT bindings, it is not necessary for the registers to be mapped early. They will be mapped during clock initialization using
of_iomap(). Remove the early mapping.In addition, remove the extraneous
zynq_soc.hinclude from the timer driver.
Quoted 6 lines
Signed-off-by Josh Cartwright <[email protected]>--- arch/arm/mach-zynq/common.c | 5 ----- arch/arm/mach-zynq/include/mach/zynq_soc.h | 6 +----- arch/arm/mach-zynq/timer.c | 1 - 3 files changed, 1 insertion(+), 11 deletions(-)
Applied to xilinx arm-next branch.
Thanks,
Michal
Signature · 4 lines
Michal Simek, Ing. (M.Eng) w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/ Microblaze U-BOOT custodian
PATCH 2/3 ARM: zynq: make use of debug_ll_io_init()
In reply to Josh CartwrightConvert low-level debugging routines to make use of debug_ll_io_init(). This is part of the preparation for ARCH_MULTIPLATFORM support for Zynq.
---
arch/arm/Kconfig.debug | 1 +
.../mach/debug-macro.S => include/debug/zynq.S} | 3 +--
arch/arm/mach-zynq/common.c | 25 ++++++----------------
3 files changed, 9 insertions(+), 20 deletions(-)
rename arch/arm/{mach-zynq/include/mach/debug-macro.S => include/debug/zynq.S} (94%)arch/arm/Kconfig.debug +1 -0
@@ -435,6 +435,7 @@ config DEBUG_LL_INCLUDE default "debug/socfpga.S" if DEBUG_SOCFPGA_UART default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \ DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1 + default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1 default "mach/debug-macro.S" config EARLY_PRINTK
arch/arm/include/debug/zynq.S renamed from arch/arm/mach-zynq/include/mach/debug-macro.S +1 -2
@@ -1,5 +1,4 @@ -/* arch/arm/mach-zynq/include/mach/debug-macro.S - * +/* * Debugging macro include header * * Copyright (C) 2011 Xilinx
arch/arm/mach-zynq/common.c +7 -18
@@ -72,23 +72,11 @@ static void __init xilinx_irq_init(void)* running include the GIC, UART and Timer Counter. */ -static struct map_desc io_desc[]__initdata = { - { - .virtual =SCU_PERIPH_VIRT , - .pfn =__phys_to_pfn (SCU_PERIPH_PHYS ), - .length =SCU_PERIPH_SIZE , - .type =MT_DEVICE , - }, - -#ifdef CONFIG_DEBUG_LL - { - .virtual =LL_UART_VADDR , - .pfn =__phys_to_pfn (LL_UART_PADDR ), - .length =UART_SIZE , - .type =MT_DEVICE , - }, -#endif - +static struct map_desc scu_desc__initdata = { + .virtual =SCU_PERIPH_VIRT , + .pfn =__phys_to_pfn (SCU_PERIPH_PHYS ), + .length =SCU_PERIPH_SIZE , + .type =MT_DEVICE , };static void __init xilinx_zynq_timer_init (void )
@@ -117,7 +105,8 @@ static struct sys_timer xttcpss_sys_timer = {*/ static void __init xilinx_map_io (void ) { -iotable_init (io_desc,ARRAY_SIZE (io_desc)); +debug_ll_io_init (); +iotable_init (&scu_desc,1 ); }static const char *xilinx_dt_match[] = {
Signature · 1 line
1.8.0
Re: [PATCH 2/3] ARM: zynq: make use of debug_ll_io_init()
2012/11/19 Josh Cartwright <[email protected]>:
Quoted 10 lines
Convert low-level debugging routines to make use of
debug_ll_io_init(). This is part of the preparation forARCH_MULTIPLATFORMsupport for Zynq.Signed-off-by Josh Cartwright <[email protected]>--- arch/arm/Kconfig.debug | 1 + .../mach/debug-macro.S => include/debug/zynq.S} | 3 +-- arch/arm/mach-zynq/common.c | 25 ++++++---------------- 3 files changed, 9 insertions(+), 20 deletions(-) rename arch/arm/{mach-zynq/include/mach/debug-macro.S => include/debug/zynq.S} (94%)
Applied to xilinx arm-next branch.
Thanks,
Michal
PATCH 3/3 ARM: zynq: add support for ARCH_MULTIPLATFORM
In reply to Josh CartwrightThe majority of changes are necessary to remove dependencies on header files within arch/arm/mach-zynq/include/mach:
uncompress.h
- Deleted. It is unused for ARCH_MULTIPLATFORM builds.
uart.h:
- Move uart definitions out of uart.h into debug/zynq.S, which is now the only user
zynq_soc.h:
- Move SCU address definitions into common.c.
- Other #defines, such as PERIPHERAL_CLOCK_RATE, TTC0_BASE, etc, are unused and can be dropped
--- arch/arm/Kconfig | 14 ++------ arch/arm/include/debug/zynq.S | 20 +++++++++-- arch/arm/mach-zynq/Kconfig | 13 +++++++ arch/arm/mach-zynq/common.c | 8 ++--- arch/arm/mach-zynq/include/mach/uart.h | 25 -------------- arch/arm/mach-zynq/include/mach/uncompress.h | 51 ---------------------------- arch/arm/mach-zynq/include/mach/zynq_soc.h | 49 -------------------------- 7 files changed, 37 insertions(+), 143 deletions(-) create mode 100644 arch/arm/mach-zynq/Kconfig delete mode 100644 arch/arm/mach-zynq/include/mach/uart.h delete mode 100644 arch/arm/mach-zynq/include/mach/uncompress.h delete mode 100644 arch/arm/mach-zynq/include/mach/zynq_soc.h
arch/arm/Kconfig +2 -12
@@ -955,18 +955,6 @@ config ARCH_VT8500 help Support for VIA/WonderMedia VT8500/WM85xx System-on-Chip. -config ARCH_ZYNQ - bool "Xilinx Zynq ARM Cortex A9 Platform" - select ARM_AMBA - select ARM_GIC - select COMMON_CLK - select CPU_V7 - select GENERIC_CLOCKEVENTS - select ICST - select MIGHT_HAVE_CACHE_L2X0 - select USE_OF - help - Support for Xilinx Zynq ARM Cortex A9 Platform endchoice menu "Multiple platform selection"
@@ -1128,6 +1116,8 @@ source "arch/arm/plat-versatile/Kconfig" source "arch/arm/mach-w90x900/Kconfig" +source "arch/arm/mach-zynq/Kconfig" + # Definitions to make life easier config ARCH_ACORN bool
arch/arm/include/debug/zynq.S +18 -2
@@ -12,9 +12,25 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ +#define UART_CR_OFFSET 0x00 /* Control Register [8:0] */ +#define UART_SR_OFFSET 0x2C /* Channel Status [11:0] */ +#define UART_FIFO_OFFSET 0x30 /* FIFO [15:0] or [7:0] */ -#include <mach/zynq_soc.h> -#include <mach/uart.h> +#define UART_SR_TXFULL 0x00000010 /* TX FIFO full */ +#define UART_SR_TXEMPTY 0x00000008 /* TX FIFO empty */ + +#define UART0_PHYS 0xE0000000 +#define UART1_PHYS 0xE0001000 +#define UART_SIZE SZ_4K +#define UART_VIRT 0xF0001000 + +#if IS_ENABLED(CONFIG_DEBUG_ZYNQ_UART1) +# define LL_UART_PADDR UART1_PHYS +#else +# define LL_UART_PADDR UART0_PHYS +#endif + +#define LL_UART_VADDR UART_VIRT .macro addruart, rp, rv, tmp ldr \rp, =LL_UART_PADDR @ physical
arch/arm/mach-zynq/Kconfig new file +13 -0
@@ -0,0 +1,13 @@ +config ARCH_ZYNQ + bool "Xilinx Zynq ARM Cortex A9 Platform" if ARCH_MULTI_V7 + select ARM_AMBA + select ARM_GIC + select COMMON_CLK + select CPU_V7 + select GENERIC_CLOCKEVENTS + select ICST + select MIGHT_HAVE_CACHE_L2X0 + select USE_OF + select SPARSE_IRQ + help + Support for Xilinx Zynq ARM Cortex A9 Platform
arch/arm/mach-zynq/common.c +4 -4
@@ -30,10 +30,10 @@#include <asm/mach/time.h> #include <asm/mach-types.h> #include <asm/page.h> +#include <asm/pgtable.h> #include <asm/hardware/gic.h> #include <asm/hardware/cache-l2x0.h> -#include <mach/zynq_soc.h> #include "common.h" static struct of_device_id zynq_of_bus_ids[]__initdata = {
@@ -68,9 +68,9 @@ static void __init xilinx_irq_init(void)of_irq_init (irq_match); } -/* The minimum devices needed to be mapped before the VM system is up and -* running include the GIC, UART and Timer Counter. -*/ +#define SCU_PERIPH_PHYS 0xF8F00000 +#define SCU_PERIPH_SIZE SZ_8K +#define SCU_PERIPH_VIRT (VMALLOC_END - SCU_PERIPH_SIZE)static struct map_desc scu_desc__initdata = { .virtual =SCU_PERIPH_VIRT ,
arch/arm/mach-zynq/include/mach/uart.h deleted +0 -25
@@ -1,25 +0,0 @@ -/* arch/arm/mach-zynq/include/mach/uart.h -* -* Copyright (C) 2011 Xilinx -* -* This software is licensed under the terms of the GNU General Public -* License version 2, as published by the Free Software Foundation, and -* may be copied, distributed, and modified under those terms. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -*/ - -#ifndef __MACH_UART_H__ -#define __MACH_UART_H__ - -#define UART_CR_OFFSET 0x00/* Control Register [8:0] */ -#define UART_SR_OFFSET 0x2C/* Channel Status [11:0] */ -#define UART_FIFO_OFFSET 0x30/* FIFO [15:0] or [7:0] */ - -#define UART_SR_TXFULL 0x00000010/* TX FIFO full */ -#define UART_SR_TXEMPTY 0x00000008/* TX FIFO empty */ - -#endif
arch/arm/mach-zynq/include/mach/uncompress.h deleted +0 -51
51 lines not on this page · raw message
arch/arm/mach-zynq/include/mach/zynq_soc.h deleted +0 -49
49 lines not on this page · raw message
Signature · 1 line
1.8.0
Re: [PATCH 3/3] ARM: zynq: add support for ARCH_MULTIPLATFORM
2012/11/19 Josh Cartwright <[email protected]>:
Quoted 16 lines
The majority of changes are necessary to remove dependencies on header files within
arch/arm/mach-zynq/include/mach:
uncompress.h
- Deleted. It is unused forARCH_MULTIPLATFORMbuilds.
uart.h:
- Move uart definitions out ofuart.hintodebug/zynq.S, which is now the only user
zynq_soc.h:
- Move SCU address definitions intocommon.c.
- Other #defines, such asPERIPHERAL_CLOCK_RATE,TTC0_BASE, etc, are unused and can be droppedSigned-off-by Josh Cartwright <[email protected]>
Quoted 13 lines
--- arch/arm/Kconfig | 14 ++------ arch/arm/include/debug/zynq.S | 20 +++++++++-- arch/arm/mach-zynq/Kconfig | 13 +++++++ arch/arm/mach-zynq/common.c | 8 ++--- arch/arm/mach-zynq/include/mach/uart.h | 25 -------------- arch/arm/mach-zynq/include/mach/uncompress.h | 51 ---------------------------- arch/arm/mach-zynq/include/mach/zynq_soc.h | 49 -------------------------- 7 files changed, 37 insertions(+), 143 deletions(-) create mode 100644 arch/arm/mach-zynq/Kconfig delete mode 100644 arch/arm/mach-zynq/include/mach/uart.h delete mode 100644 arch/arm/mach-zynq/include/mach/uncompress.h delete mode 100644 arch/arm/mach-zynq/include/mach/zynq_soc.h
Applied to xilinx arm-next branch.
Thanks,
Michal
Hi Josh, Arnd and Olof,
2012/11/19 Josh Cartwright <[email protected]>:
Quoted 17 lines
Michal-
Here's an attempt at supporting
ARCH_MULTIPLATFORMon Zynq. I've gotten a multiplatform kernel building and booting on the zc702, although I haven't tried to boot the same image on another non-Zynq board, due to lack of available hardware.It would be super awesome if this set could land in 3.8, but I know we're running out of time there. I wouldn't be too heartbroken if it didn't make it.
This patchset is on top of your arm-next branch and with the
debug_ll_initsupport patch @ arm-soc/devel/debug_ll_init.Patch 1 drops the early TTC mapping. It is not necessary, since the TTC driver now supports pulling mapping info from the device tree.
Quoted 7 lines
Patch 2 converts zynq to use the
debug_ll_init()infrastructure slated to go into 3.8.Patch 3 is the bulk of the set, moving around logic around within mach-zynq/include, and setting up the necessary build magic to get Zynq building w/
CONFIG_ARCH_MULTIPLATFORM.
I wanted to look at it too today. You were faster! I have tested your patches and all works for me. I have also added them to my arm-next branch.
I don't have others ARM boards to test but it shouldn't be big problem because others will test it.
We are out of merge window that's why we should wait to the next one. Anyway Arnd/Olof if there is any option to get this to v3.8, please let me know.
Thanks,
Michal
Signature · 4 lines
Michal Simek, Ing. (M.Eng) w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/ Microblaze U-BOOT custodian
Quoted 32 lines · Michal Simek
Hi Josh, Arnd and Olof,
2012/11/19 Josh Cartwright <[email protected]>:
Quoted 17 lines
Michal-
Here's an attempt at supporting
ARCH_MULTIPLATFORMon Zynq. I've gotten a multiplatform kernel building and booting on the zc702, although I haven't tried to boot the same image on another non-Zynq board, due to lack of available hardware.It would be super awesome if this set could land in 3.8, but I know we're running out of time there. I wouldn't be too heartbroken if it didn't make it.
This patchset is on top of your arm-next branch and with the
debug_ll_initsupport patch @ arm-soc/devel/debug_ll_init.Patch 1 drops the early TTC mapping. It is not necessary, since the TTC driver now supports pulling mapping info from the device tree.
Quoted 7 lines
Patch 2 converts zynq to use the
debug_ll_init()infrastructure slated to go into 3.8.Patch 3 is the bulk of the set, moving around logic around within mach-zynq/include, and setting up the necessary build magic to get Zynq building w/
CONFIG_ARCH_MULTIPLATFORM.I wanted to look at it too today. You were faster! I have tested your patches and all works for me. I have also added them to my arm-next branch.
Quoted 5 lines
I don't have others ARM boards to test but it shouldn't be big problem because others will test it.
We are out of merge window that's why we should wait to the next one. Anyway Arnd/Olof if there is any option to get this to v3.8, please let me know.
Feel free to post a pull request, if things look clean we can probably pick it up.
-Olof (playing good cop for once :-)