Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'zynq-soc-for-4.6' of https://github.com/Xilinx/linux-xlnx into next/soc

Merge "ARM: Xilinx Zynq patches for v4.6" from Michal Simek:

- SLCR early init
- Fix L2 cache data corruption
- Fix early printk uart setting

* tag 'zynq-soc-for-4.6' of https://github.com/Xilinx/linux-xlnx:
ARM: zynq: Move early printk virtual address to vmalloc area
ARM: zynq: address L2 cache data corruption
ARM: zynq: initialize slcr mapping earlier

+7 -4
+2 -2
arch/arm/include/debug/zynq.S
··· 20 20 #define UART_SR_TXEMPTY 0x00000008 /* TX FIFO empty */ 21 21 22 22 #define UART0_PHYS 0xE0000000 23 - #define UART0_VIRT 0xF0000000 23 + #define UART0_VIRT 0xF0800000 24 24 #define UART1_PHYS 0xE0001000 25 - #define UART1_VIRT 0xF0001000 25 + #define UART1_VIRT 0xF0801000 26 26 27 27 #if IS_ENABLED(CONFIG_DEBUG_ZYNQ_UART1) 28 28 # define LL_UART_PADDR UART1_PHYS
+1 -2
arch/arm/mach-zynq/common.c
··· 150 150 151 151 static void __init zynq_timer_init(void) 152 152 { 153 - zynq_early_slcr_init(); 154 - 155 153 zynq_clock_init(); 156 154 of_clk_init(NULL); 157 155 clocksource_probe(); ··· 184 186 185 187 static void __init zynq_irq_init(void) 186 188 { 189 + zynq_early_slcr_init(); 187 190 irqchip_init(); 188 191 } 189 192
+4
arch/arm/mach-zynq/slcr.c
··· 28 28 #define SLCR_A9_CPU_RST_CTRL_OFFSET 0x244 /* CPU Software Reset Control */ 29 29 #define SLCR_REBOOT_STATUS_OFFSET 0x258 /* PS Reboot Status */ 30 30 #define SLCR_PSS_IDCODE 0x530 /* PS IDCODE */ 31 + #define SLCR_L2C_RAM 0xA1C /* L2C_RAM in AR#54190 */ 31 32 32 33 #define SLCR_UNLOCK_MAGIC 0xDF0D 33 34 #define SLCR_A9_CPU_CLKSTOP 0x10 ··· 227 226 228 227 /* unlock the SLCR so that registers can be changed */ 229 228 zynq_slcr_unlock(); 229 + 230 + /* See AR#54190 design advisory */ 231 + regmap_update_bits(zynq_slcr_regmap, SLCR_L2C_RAM, 0x70707, 0x20202); 230 232 231 233 register_restart_handler(&zynq_slcr_restart_nb); 232 234