From ca38d4bdc0e25cdcf176098454de052dff7b9dbc Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Thu, 27 Jun 2024 09:14:55 -0700 Subject: [PATCH 01/26] These are first set of changes to add support for MPS3 AN547 TSV target the command to build is west build -p always -b mps3_an547_tsv samples/hello_world when this target is made the image will be generated as zephyr.bin as well as we have turned on generation of zephyr.lst file to ensure we have debug symbols and disassemble code available The files changes are Kconfig.zephyr boards/arm/mps3/board.yml boards/arm/mps3/mps3_an547_tsv.dts boards/arm/mps3/mps3_an547_tsv.yaml boards/arm/mps3/mps3_an547_tsv_defconfig boards/deprecated.cmake --- Kconfig.zephyr | 3 +- boards/arm/mps3/board.yml | 1 + boards/arm/mps3/mps3_an547_tsv.dts | 152 +++++++++++++++++++++++ boards/arm/mps3/mps3_an547_tsv.yaml | 21 ++++ boards/arm/mps3/mps3_an547_tsv_defconfig | 22 ++++ boards/deprecated.cmake | 4 +- 6 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 boards/arm/mps3/mps3_an547_tsv.dts create mode 100644 boards/arm/mps3/mps3_an547_tsv.yaml create mode 100644 boards/arm/mps3/mps3_an547_tsv_defconfig diff --git a/Kconfig.zephyr b/Kconfig.zephyr index 3cab0519b45b5f..7659f75478f72f 100644 --- a/Kconfig.zephyr +++ b/Kconfig.zephyr @@ -648,12 +648,13 @@ config OUTPUT_SYMBOLS config OUTPUT_DISASSEMBLY bool "Create a disassembly file" + default y help Create an .lst file with the assembly listing of the firmware. config OUTPUT_DISASSEMBLE_ALL bool "Disassemble all sections with source. Fill zeros." - default n + default y depends on OUTPUT_DISASSEMBLY help The .lst file will contain complete disassembly of the firmware diff --git a/boards/arm/mps3/board.yml b/boards/arm/mps3/board.yml index 5ee7ed7c03789f..258af5d6490d8e 100644 --- a/boards/arm/mps3/board.yml +++ b/boards/arm/mps3/board.yml @@ -5,3 +5,4 @@ board: - name: 'an547' variants: - name: 'ns' + - name: 'tsv' diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts new file mode 100644 index 00000000000000..30509a31c1fa5c --- /dev/null +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2018-2021 Linaro Limited + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include +#include +#include + +/ { + compatible = "arm,mps3-an547"; + #address-cells = <1>; + #size-cells = <1>; + + aliases { + led0 = &led_0; + led1 = &led_1; + sw0 = &user_button_0; + sw1 = &user_button_1; + }; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,sram = &ram; + zephyr,flash = &code; + }; + + leds { + compatible = "gpio-leds"; + led_0: led_0 { + gpios = <&gpio_led0 0>; + label = "USERLED0"; + }; + led_1: led_1 { + gpios = <&gpio_led0 1>; + label = "USERLED1"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + user_button_0: button_0 { + label = "USERPB0"; + gpios = <&gpio_button 0>; + zephyr,code = ; + }; + user_button_1: button_1 { + label = "USERPB1"; + gpios = <&gpio_button 1>; + zephyr,code = ; + }; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-m55"; + reg = <0>; + #address-cells = <1>; + #size-cells = <1>; + + mpu: mpu@e000ed90 { + compatible = "arm,armv8.1m-mpu"; + reg = <0xe000ed90 0x40>; + }; + }; + }; + + /* We utilize the secure addresses, if you subtract 0x10000000 + * you'll get the non-secure alias + */ + itcm: itcm@4000 { + compatible = "zephyr,memory-region"; + reg = <0x4000 DT_SIZE_K(16)>; + zephyr,memory-region = "ITCM"; + }; + + sram: sram@60000000 { + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x60000000 DT_SIZE_M(2)>; + zephyr,memory-region = "SRAM"; + }; + + dtcm: dtcm@20000000 { + compatible = "zephyr,memory-region"; + reg = <0x20000000 DT_SIZE_K(16)>; + zephyr,memory-region = "DTCM"; + }; + + isram: sram@61000000 { + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x61000000 DT_SIZE_M(4)>; + zephyr,memory-region = "ISRAM"; + }; + + /* DDR4 - 2G, alternates non-secure/secure every 256M */ + ddr4: memory@64000000 { + device_type = "memory"; + compatible = "zephyr,memory-region"; + reg = <0x64000000 DT_SIZE_M(256) + 0x70000000 DT_SIZE_M(256) + 0x80000000 DT_SIZE_M(256) + 0x90000000 DT_SIZE_M(256) + 0xa0000000 DT_SIZE_M(256) + 0xb0000000 DT_SIZE_M(256) + 0xc0000000 DT_SIZE_M(256) + 0xd0000000 DT_SIZE_M(256)>; + zephyr,memory-region = "DDR4"; + }; + + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + /* The memory regions defined below must match what the TF-M + * project has defined for that board - a single image boot is + * assumed. Please see the memory layout in: + * https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git/tree/platform/ext/target/mps3/an547/partition/flash_layout.h + */ + + code: memory@4000 { + reg = <0x4000 DT_SIZE_K(16)>; + }; + + ram: memory@60000000 { + reg = <0x60000000 DT_SIZE_M(2)>; + }; + }; + + soc { + peripheral@40000000 { + #address-cells = <1>; + #size-cells = <1>; + ranges = <0x0 0x40000000 0x10000000>; + + #include "mps3_an547-common.dtsi" + }; + }; +}; + +&nvic { + arm,num-irq-priority-bits = <3>; +}; diff --git a/boards/arm/mps3/mps3_an547_tsv.yaml b/boards/arm/mps3/mps3_an547_tsv.yaml new file mode 100644 index 00000000000000..e4915a7505171d --- /dev/null +++ b/boards/arm/mps3/mps3_an547_tsv.yaml @@ -0,0 +1,21 @@ +# +# Copyright (c) 2019-2021 Linaro Limited +# +# SPDX-License-Identifier: Apache-2.0 +# + +identifier: mps3/an547/tsv +name: Arm MPS3-AN547_TSV +type: mcu +arch: arm +ram: 2048 +flash: 4 +simulation: qemu +toolchain: + - gnuarmemb + - zephyr + - xtools +testing: + default: true + only_tags: + - trusted-firmware-m diff --git a/boards/arm/mps3/mps3_an547_tsv_defconfig b/boards/arm/mps3/mps3_an547_tsv_defconfig new file mode 100644 index 00000000000000..ccc25c35019c16 --- /dev/null +++ b/boards/arm/mps3/mps3_an547_tsv_defconfig @@ -0,0 +1,22 @@ +# +# Copyright (c) 2018-2021 Linaro Limited +# +# SPDX-License-Identifier: Apache-2.0 +# + +CONFIG_ARM_TRUSTZONE_M=y +CONFIG_RUNTIME_NMI=y +CONFIG_ARM_MPU=y +CONFIG_QEMU_ICOUNT_SHIFT=6 + +# GPIOs +CONFIG_GPIO=y + +# Serial +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y +CONFIG_SERIAL=y + +# Build a Non-secure firmware image +CONFIG_TRUSTED_EXECUTION_SECURE=n +CONFIG_TRUSTED_EXECUTION_NONSECURE=y diff --git a/boards/deprecated.cmake b/boards/deprecated.cmake index f1a40a8b318726..b2fd56868c8715 100644 --- a/boards/deprecated.cmake +++ b/boards/deprecated.cmake @@ -434,7 +434,9 @@ set(mps3_an547_DEPRECATED set(mps3_an547_ns_DEPRECATED mps3/an547/ns ) - +set(mps3_an547_tsv_DEPRECATED + mps3/an547/tsv +) set(native_posix_64_DEPRECATED native_posix/native/64 ) From 1639631bc34f68568c36744b3f0213f67fd8a4e6 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Thu, 27 Jun 2024 19:39:26 -0700 Subject: [PATCH 02/26] Adding changes to support the jtag UART support for FPGA using Altera UART JTAG driver in boards/arm/mps3/mps_an547_tsv.dts --- boards/arm/mps3/mps3_an547_tsv.dts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 30509a31c1fa5c..14a6977fb14ae2 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -21,6 +21,7 @@ led1 = &led_1; sw0 = &user_button_0; sw1 = &user_button_1; + uart-0 = &jtag_uart; }; chosen { @@ -56,6 +57,11 @@ }; }; + jtag_uart: uart@201000 { + compatible = "altr,jtag-uart"; + reg = <0x201000 0x8>; + status = "disabled"; + }; cpus { #address-cells = <1>; #size-cells = <0>; @@ -146,7 +152,10 @@ }; }; }; - +&jtag_uart { + status = "okay"; + current-speed = <115200>; +}; &nvic { arm,num-irq-priority-bits = <3>; }; From 9b1c0e967ddf3de287112803c8872657b88189e0 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Fri, 28 Jun 2024 08:16:57 -0700 Subject: [PATCH 03/26] Changed the JTAG UART address to 0x3000 as specified by M850 spec. This istest ready code but not verified yet. --- boards/arm/mps3/mps3_an547_tsv.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 14a6977fb14ae2..820bc6b6bf2b2b 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -57,9 +57,9 @@ }; }; - jtag_uart: uart@201000 { + jtag_uart: uart@3000 { compatible = "altr,jtag-uart"; - reg = <0x201000 0x8>; + reg = <0x3000 0x8>; status = "disabled"; }; cpus { From a2b53c82b4705a6d57890ec2274df08313c58c42 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Sun, 30 Jun 2024 08:21:14 -0700 Subject: [PATCH 04/26] Making the address change to make this relative address to iOne block for jtag-uart. This will get the jtag-uart going, there is more work to be done on other IO addresses and we will make these changes are we bring up other IOs and test them. --- boards/arm/mps3/mps3_an547_tsv.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 820bc6b6bf2b2b..7968c275432582 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -57,9 +57,9 @@ }; }; - jtag_uart: uart@3000 { + jtag_uart: uart@95003000 { compatible = "altr,jtag-uart"; - reg = <0x3000 0x8>; + reg = <0x95003000 0x8>; status = "disabled"; }; cpus { From c2f0566df8b290f6e6593b8f00ef1aef73e498d7 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Tue, 2 Jul 2024 13:47:48 -0700 Subject: [PATCH 05/26] Added changes to make the Zephyr code start from 0x6000_0000 and keep ITCM at 0x4000 The Zephyr RAM starts at 0x6000_8000 --- boards/arm/mps3/mps3_an547_tsv.dts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 7968c275432582..2556ea21dcd687 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -133,12 +133,12 @@ * https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git/tree/platform/ext/target/mps3/an547/partition/flash_layout.h */ - code: memory@4000 { - reg = <0x4000 DT_SIZE_K(16)>; + code: memory@60000000 { + reg = <0x60000000 DT_SIZE_K(16)>; }; - ram: memory@60000000 { - reg = <0x60000000 DT_SIZE_M(2)>; + ram: memory@60008000 { + reg = <0x60008000 DT_SIZE_K(2032)>; }; }; From fb3409455e3e3dd005afe6cc435af67a017a3c9f Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Wed, 3 Jul 2024 15:18:53 -0700 Subject: [PATCH 06/26] Made chanegs to fix the zephyr,console and zephyr,shell-uart to use jtag-uart. This is ensuring the jtag-uart is being used for FPGA. --- boards/arm/mps3/mps3_an547_tsv.dts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 2556ea21dcd687..787fd7f8d429a2 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -25,8 +25,8 @@ }; chosen { - zephyr,console = &uart0; - zephyr,shell-uart = &uart0; + zephyr,console = &jtag_uart; + zephyr,shell-uart = &jtag_uart; zephyr,sram = &ram; zephyr,flash = &code; }; @@ -60,7 +60,7 @@ jtag_uart: uart@95003000 { compatible = "altr,jtag-uart"; reg = <0x95003000 0x8>; - status = "disabled"; + status = "enabled"; }; cpus { #address-cells = <1>; From 293720e64f41fc8f7d01a61e9a0080a6ef7496ae Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Fri, 5 Jul 2024 15:51:42 -0700 Subject: [PATCH 07/26] Made changes to ensure SOC peripherals are programmed for MPU bounds. The UART addresses are correct for DV and FPGA environment and commented out unused peripherals and created TSV specific common DTSI. --- boards/arm/mps3/mps3_an547-common-tsv.dtsi | 176 +++++++++++++++++++++ boards/arm/mps3/mps3_an547_tsv.dts | 29 ++-- 2 files changed, 196 insertions(+), 9 deletions(-) create mode 100644 boards/arm/mps3/mps3_an547-common-tsv.dtsi diff --git a/boards/arm/mps3/mps3_an547-common-tsv.dtsi b/boards/arm/mps3/mps3_an547-common-tsv.dtsi new file mode 100644 index 00000000000000..b32fe97c681c19 --- /dev/null +++ b/boards/arm/mps3/mps3_an547-common-tsv.dtsi @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2019-2021 Linaro Limited + * + * SPDX-License-Identifier: Apache-2.0 + */ + +sysclk: system-clock { + compatible = "fixed-clock"; + clock-frequency = <25000000>; + #clock-cells = <0>; +}; + +gpio0: gpio@9000010 { + compatible = "arm,cmsdk-gpio"; + reg = <0x9000010 0x4>; + interrupts = <69 3>; + gpio-controller; + #gpio-cells = <2>; +}; + +gpio1: gpio@9000014 { + compatible = "arm,cmsdk-gpio"; + reg = <0x9000014 0x4>; + interrupts = <70 3>; + gpio-controller; + #gpio-cells = <2>; +}; + +gpio2: gpio@9000018 { + compatible = "arm,cmsdk-gpio"; + reg = <0x9000018 0x4>; + interrupts = <71 3>; + gpio-controller; + #gpio-cells = <2>; +}; + +gpio3: gpio@900001c { + compatible = "arm,cmsdk-gpio"; + reg = <0x900001c 0x4>; + interrupts = <72 3>; + gpio-controller; + #gpio-cells = <2>; +}; + + +/*eth0: eth@1400000 {*/ + /* Linux has "smsc,lan9115" */ + /*compatible = "smsc,lan9220";*/ + /* Actual reg range is ~0x200 */ + /*reg = <0x1400000 0x100000>;*/ + /*interrupts = <49 3>;*/ +/*};*/ + +/* +i2c_touch: i2c@9200000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9200000 0x1000>; +}; + +i2c_audio_conf: i2c@9201000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9201000 0x1000>; +}; + +i2c_shield0: i2c@9203000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9203000 0x1000>; +}; + +i2c_shield1: i2c@9204000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9204000 0x1000>; +}; + +i2c_ddr4_eeprom: i2c@9208000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9208000 0x1000>; +}; +*/ +gpio_led0: mps3_fpgaio@8000010 { + compatible = "arm,mps3-fpgaio-gpio"; + + reg = <0x8000010 0x4>; + gpio-controller; + #gpio-cells = <1>; + ngpios = <8>; +}; + +gpio_button: mps3_fpgaio@8000014 { + compatible = "arm,mps3-fpgaio-gpio"; + + reg = <0x8000014 0x4>; + gpio-controller; + #gpio-cells = <1>; + ngpios = <2>; +}; + +gpio_misc: mps3_fpgaio@8000018 { + compatible = "arm,mps3-fpgaio-gpio"; + + reg = <0x8000018 0x4>; + gpio-controller; + #gpio-cells = <1>; + ngpios = <3>; +}; + +uart0: uart@14001000 { + compatible = "arm,cmsdk-uart"; + reg = <0x14001000 0x1000>; + interrupts = <34 3 33 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +/* +uart1: uart@9304000 { + compatible = "arm,cmsdk-uart"; + reg = <0x9304000 0x1000>; + interrupts = <36 3 35 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +uart2: uart@9305000 { + compatible = "arm,cmsdk-uart"; + reg = <0x9305000 0x1000>; + interrupts = <38 3 37 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +uart3: uart@9306000 { + compatible = "arm,cmsdk-uart"; + reg = <0x9306000 0x1000>; + interrupts = <40 3 39 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +uart4: uart@9307000 { + compatible = "arm,cmsdk-uart"; + reg = <0x9307000 0x1000>; + interrupts = <42 3 41 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +uart5: uart@9308000 { + compatible = "arm,cmsdk-uart"; + status = "disabled"; + reg = <0x9308000 0x1000>; + interrupt-names = "tx", "rx"; + interrupts = <126 3 125 3>; + clocks = <&sysclk>; + current-speed = <115200>; +};*/ diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 787fd7f8d429a2..45986e9eb74c4c 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -16,6 +16,7 @@ #address-cells = <1>; #size-cells = <1>; + /* aliases { led0 = &led_0; led1 = &led_1; @@ -23,14 +24,14 @@ sw1 = &user_button_1; uart-0 = &jtag_uart; }; - + */ chosen { zephyr,console = &jtag_uart; zephyr,shell-uart = &jtag_uart; zephyr,sram = &ram; zephyr,flash = &code; }; - + /* leds { compatible = "gpio-leds"; led_0: led_0 { @@ -43,6 +44,9 @@ }; }; + */ + + /* gpio_keys { compatible = "gpio-keys"; user_button_0: button_0 { @@ -57,11 +61,14 @@ }; }; + */ + jtag_uart: uart@95003000 { compatible = "altr,jtag-uart"; reg = <0x95003000 0x8>; status = "enabled"; }; + cpus { #address-cells = <1>; #size-cells = <0>; @@ -101,9 +108,9 @@ zephyr,memory-region = "DTCM"; }; - isram: sram@61000000 { + isram: sram@60600000 { compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x61000000 DT_SIZE_M(4)>; + reg = <0x60600000 DT_SIZE_M(1)>; zephyr,memory-region = "ISRAM"; }; @@ -111,7 +118,8 @@ ddr4: memory@64000000 { device_type = "memory"; compatible = "zephyr,memory-region"; - reg = <0x64000000 DT_SIZE_M(256) + reg = <0x60700000 DT_SIZE_M(1)>; + /* 0x70000000 DT_SIZE_M(256) 0x80000000 DT_SIZE_M(256) 0x90000000 DT_SIZE_M(256) @@ -119,6 +127,7 @@ 0xb0000000 DT_SIZE_M(256) 0xc0000000 DT_SIZE_M(256) 0xd0000000 DT_SIZE_M(256)>; + */ zephyr,memory-region = "DDR4"; }; @@ -138,24 +147,26 @@ }; ram: memory@60008000 { - reg = <0x60008000 DT_SIZE_K(2032)>; + reg = <0x60008000 DT_SIZE_K(1008)>; }; }; soc { - peripheral@40000000 { + peripheral@81000000 { #address-cells = <1>; #size-cells = <1>; - ranges = <0x0 0x40000000 0x10000000>; + ranges = <0x0 0x81000000 0x1effffff>; - #include "mps3_an547-common.dtsi" + #include "mps3_an547-common-tsv.dtsi" }; }; }; + &jtag_uart { status = "okay"; current-speed = <115200>; }; + &nvic { arm,num-irq-priority-bits = <3>; }; From 85328fdb6dd14d2627d18b3dda60a5a67a51cada Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Sun, 7 Jul 2024 19:12:12 -0700 Subject: [PATCH 08/26] Making temporary change to use printk instead of printf in sample code. Making changes to divide the SRAM in code and stack/heap into separate space on SRAM. This change finishes full execution of sample code in DV environment. --- boards/arm/mps3/mps3_an547_tsv.dts | 16 +++++++++++----- samples/hello_world/src/main.c | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 45986e9eb74c4c..6bb4f6888e15cf 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -27,7 +27,13 @@ */ chosen { zephyr,console = &jtag_uart; + /* + zephyr,console = &uart0; + */ zephyr,shell-uart = &jtag_uart; + /* + zephyr,shell-uart = &uart0; + */ zephyr,sram = &ram; zephyr,flash = &code; }; @@ -96,9 +102,9 @@ zephyr,memory-region = "ITCM"; }; - sram: sram@60000000 { + sram: sram@60010000 { compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x60000000 DT_SIZE_M(2)>; + reg = <0x60010000 DT_SIZE_K(1024)>; zephyr,memory-region = "SRAM"; }; @@ -115,7 +121,7 @@ }; /* DDR4 - 2G, alternates non-secure/secure every 256M */ - ddr4: memory@64000000 { + ddr4: memory@60700000 { device_type = "memory"; compatible = "zephyr,memory-region"; reg = <0x60700000 DT_SIZE_M(1)>; @@ -146,8 +152,8 @@ reg = <0x60000000 DT_SIZE_K(16)>; }; - ram: memory@60008000 { - reg = <0x60008000 DT_SIZE_K(1008)>; + ram: memory@60010000 { + reg = <0x60010000 DT_SIZE_K(1024)>; }; }; diff --git a/samples/hello_world/src/main.c b/samples/hello_world/src/main.c index c550ab461cb356..1cb8448675826d 100644 --- a/samples/hello_world/src/main.c +++ b/samples/hello_world/src/main.c @@ -8,7 +8,7 @@ int main(void) { - printf("Hello World! %s\n", CONFIG_BOARD_TARGET); + printk("Hello World! %s\n", CONFIG_BOARD_TARGET); return 0; } From c95435b63423784a1b0a5349171cf783e414a3c3 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Mon, 8 Jul 2024 15:51:18 -0700 Subject: [PATCH 09/26] The mps3_an547_tsv initially was based off of mps3_an547_ns i.e. the non secure image, but the non secure image is broken in both fork as main in QEMU environment, so used mps3_an547 as a base for mps3_an547_tsv. Have mapped Flash as first section of 16K of SRAM, and the RAM for kernel is bottom 767K of SRAM, have mapped the other 1MB of SRAM0 and 2 MB of SRAM1 to SRAM and ISRAM respectively. | FLASH (16K) in SRAM0 | | 240K (Spare) in SRAM0 | | Kernel (767 K) in SRAM0 | | 1K (Spare) | | 1MB SRAM0 as SRAM | | 1MB SRAM1 as ISRAM | | 1MB SRAM1 as DDR | This is temporary arrangement to make progress. We will revist once we have jtag-uart and other FPGA functionality working. --- boards/arm/mps3/mps3_an547_tsv.dts | 95 +++++++++++++++--------- boards/arm/mps3/mps3_an547_tsv.yaml | 15 ++-- boards/arm/mps3/mps3_an547_tsv_defconfig | 7 +- 3 files changed, 72 insertions(+), 45 deletions(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 6bb4f6888e15cf..cbb964646c3ec7 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -1,5 +1,6 @@ /* * Copyright (c) 2018-2021 Linaro Limited + * Copyright 2022 Arm Limited and/or its affiliates * * SPDX-License-Identifier: Apache-2.0 */ @@ -34,8 +35,8 @@ /* zephyr,shell-uart = &uart0; */ - zephyr,sram = &ram; - zephyr,flash = &code; + zephyr,sram = &dtcm; + zephyr,flash = &itcm; }; /* leds { @@ -48,10 +49,40 @@ gpios = <&gpio_led0 1>; label = "USERLED1"; }; + led_2: led_2 { + gpios = <&gpio_led0 2>; + label = "USERLED2"; + }; + led_3: led_3 { + gpios = <&gpio_led0 3>; + label = "USERLED3"; + }; + led_4: led_4 { + gpios = <&gpio_led0 4>; + label = "USERLED4"; + }; + led_5: led_5 { + gpios = <&gpio_led0 5>; + label = "USERLED5"; + }; + led_6: led_6 { + gpios = <&gpio_led0 6>; + label = "USERLED6"; + }; + led_7: led_7 { + gpios = <&gpio_led0 7>; + label = "USERLED7"; + }; + led_8: led_8 { + gpios = <&gpio_led0 8>; + label = "PB1LED"; + }; + led_9: led_9 { + gpios = <&gpio_led0 9>; + label = "PB2LED"; + }; }; - */ - /* gpio_keys { compatible = "gpio-keys"; @@ -67,6 +98,20 @@ }; }; + ethosu { + #address-cells = <1>; + #size-cells = <0>; + interrupt-parent = <&nvic>; + + ethosu0: ethosu@48102000 { + compatible = "arm,ethos-u"; + reg = <0x48102000>; + interrupts = <56 3>; + secure-enable; + privilege-enable; + status = "okay"; + }; + }; */ jtag_uart: uart@95003000 { @@ -96,25 +141,25 @@ /* We utilize the secure addresses, if you subtract 0x10000000 * you'll get the non-secure alias */ - itcm: itcm@4000 { + itcm: itcm@60000000 { /* alias @ 0x60000000 */ compatible = "zephyr,memory-region"; - reg = <0x4000 DT_SIZE_K(16)>; + reg = <0x60000000 DT_SIZE_K(16)>; zephyr,memory-region = "ITCM"; }; - sram: sram@60010000 { + sram: sram@60100000 { /* alias @ 0x60100000 */ compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x60010000 DT_SIZE_K(1024)>; + reg = <0x60100000 DT_SIZE_K(1024)>; zephyr,memory-region = "SRAM"; }; - dtcm: dtcm@20000000 { + dtcm: dtcm@60040000 { /* alias @ 0x60040000 */ compatible = "zephyr,memory-region"; - reg = <0x20000000 DT_SIZE_K(16)>; + reg = <0x60040000 DT_SIZE_K(767)>; zephyr,memory-region = "DTCM"; }; - isram: sram@60600000 { + isram: sram@60600000 {/* alias @ 0x60600000 */ compatible = "zephyr,memory-region", "mmio-sram"; reg = <0x60600000 DT_SIZE_M(1)>; zephyr,memory-region = "ISRAM"; @@ -124,39 +169,17 @@ ddr4: memory@60700000 { device_type = "memory"; compatible = "zephyr,memory-region"; - reg = <0x60700000 DT_SIZE_M(1)>; - /* - 0x70000000 DT_SIZE_M(256) + reg = <0x60700000 DT_SIZE_M(1) + /*0x70000000 DT_SIZE_M(256) 0x80000000 DT_SIZE_M(256) 0x90000000 DT_SIZE_M(256) 0xa0000000 DT_SIZE_M(256) 0xb0000000 DT_SIZE_M(256) 0xc0000000 DT_SIZE_M(256) - 0xd0000000 DT_SIZE_M(256)>; - */ + 0xd0000000 DT_SIZE_M(256)*/>; zephyr,memory-region = "DDR4"; }; - reserved-memory { - #address-cells = <1>; - #size-cells = <1>; - ranges; - - /* The memory regions defined below must match what the TF-M - * project has defined for that board - a single image boot is - * assumed. Please see the memory layout in: - * https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git/tree/platform/ext/target/mps3/an547/partition/flash_layout.h - */ - - code: memory@60000000 { - reg = <0x60000000 DT_SIZE_K(16)>; - }; - - ram: memory@60010000 { - reg = <0x60010000 DT_SIZE_K(1024)>; - }; - }; - soc { peripheral@81000000 { #address-cells = <1>; diff --git a/boards/arm/mps3/mps3_an547_tsv.yaml b/boards/arm/mps3/mps3_an547_tsv.yaml index e4915a7505171d..54e13a0b860b26 100644 --- a/boards/arm/mps3/mps3_an547_tsv.yaml +++ b/boards/arm/mps3/mps3_an547_tsv.yaml @@ -8,14 +8,19 @@ identifier: mps3/an547/tsv name: Arm MPS3-AN547_TSV type: mcu arch: arm -ram: 2048 -flash: 4 +ram: 767 +flash: 16 simulation: qemu toolchain: - gnuarmemb - zephyr - xtools +supported: + - gpio testing: - default: true - only_tags: - - trusted-firmware-m + ignore_tags: + - drivers + - bluetooth + - net + - timer +vendor: arm diff --git a/boards/arm/mps3/mps3_an547_tsv_defconfig b/boards/arm/mps3/mps3_an547_tsv_defconfig index ccc25c35019c16..bb786dfa876010 100644 --- a/boards/arm/mps3/mps3_an547_tsv_defconfig +++ b/boards/arm/mps3/mps3_an547_tsv_defconfig @@ -4,10 +4,10 @@ # SPDX-License-Identifier: Apache-2.0 # -CONFIG_ARM_TRUSTZONE_M=y CONFIG_RUNTIME_NMI=y +CONFIG_ARM_TRUSTZONE_M=n CONFIG_ARM_MPU=y -CONFIG_QEMU_ICOUNT_SHIFT=6 +CONFIG_QEMU_ICOUNT_SHIFT=7 # GPIOs CONFIG_GPIO=y @@ -17,6 +17,5 @@ CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y -# Build a Non-secure firmware image +# Build a Secure firmware image CONFIG_TRUSTED_EXECUTION_SECURE=n -CONFIG_TRUSTED_EXECUTION_NONSECURE=y From 0a1b36e500f2786dd6128aca7980694c15ebcfdd Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Tue, 9 Jul 2024 15:08:46 -0700 Subject: [PATCH 10/26] Made changes to ensure the printf works in DV environment and prints the Hello World in the DV environment. --- samples/hello_world/src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/hello_world/src/main.c b/samples/hello_world/src/main.c index 1cb8448675826d..c550ab461cb356 100644 --- a/samples/hello_world/src/main.c +++ b/samples/hello_world/src/main.c @@ -8,7 +8,7 @@ int main(void) { - printk("Hello World! %s\n", CONFIG_BOARD_TARGET); + printf("Hello World! %s\n", CONFIG_BOARD_TARGET); return 0; } From c345c393abe562b008e5bc2b997e6179833c748b Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Tue, 9 Jul 2024 20:59:29 -0700 Subject: [PATCH 11/26] Now that everything is working in DV environment changed the memory address layout as follows | FLASH (32K) in SRAM0 | | Kernel (2016 K) in SRAM0 | | 1MB SRAM1 as ISRAM | | 1MB SRAM1 as DDR | Also fixed the addresses of ITCM and DTCM as 0x4000 and 0x20000000 which is what it is on the device and reflected the same in yaml. --- boards/arm/mps3/mps3_an547_tsv.dts | 24 +++++++++++++++--------- boards/arm/mps3/mps3_an547_tsv.yaml | 4 ++-- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index cbb964646c3ec7..3075cec858f41c 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -35,8 +35,8 @@ /* zephyr,shell-uart = &uart0; */ - zephyr,sram = &dtcm; - zephyr,flash = &itcm; + zephyr,sram = &sram; + zephyr,flash = &sram0; }; /* leds { @@ -141,21 +141,27 @@ /* We utilize the secure addresses, if you subtract 0x10000000 * you'll get the non-secure alias */ - itcm: itcm@60000000 { /* alias @ 0x60000000 */ + itcm: itcm@4000 { /* alias @ 0x4000 */ + compatible = "zephyr,memory-region"; + reg = <0x4000 DT_SIZE_K(16)>; + zephyr,memory-region = "ITCM"; + }; + + sram0: sram0@60000000 { /* alias @ 0x60000000 */ compatible = "zephyr,memory-region"; - reg = <0x60000000 DT_SIZE_K(16)>; - zephyr,memory-region = "ITCM"; + reg = <0x60000000 DT_SIZE_K(32)>; + zephyr,memory-region = "SRAM0"; }; - sram: sram@60100000 { /* alias @ 0x60100000 */ + sram: sram@60008000 { /* alias @ 0x60008000 */ compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x60100000 DT_SIZE_K(1024)>; + reg = <0x60008000 DT_SIZE_K(2016)>; zephyr,memory-region = "SRAM"; }; - dtcm: dtcm@60040000 { /* alias @ 0x60040000 */ + dtcm: dtcm@20000000 { /* alias @ 0x20000000 */ compatible = "zephyr,memory-region"; - reg = <0x60040000 DT_SIZE_K(767)>; + reg = <0x20000000 DT_SIZE_K(16)>; zephyr,memory-region = "DTCM"; }; diff --git a/boards/arm/mps3/mps3_an547_tsv.yaml b/boards/arm/mps3/mps3_an547_tsv.yaml index 54e13a0b860b26..d0efdd4ffc6660 100644 --- a/boards/arm/mps3/mps3_an547_tsv.yaml +++ b/boards/arm/mps3/mps3_an547_tsv.yaml @@ -8,8 +8,8 @@ identifier: mps3/an547/tsv name: Arm MPS3-AN547_TSV type: mcu arch: arm -ram: 767 -flash: 16 +ram: 2016 +flash: 32 simulation: qemu toolchain: - gnuarmemb From 1022669c5712fa1a002d94179c78a0111e176421 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Wed, 10 Jul 2024 11:14:54 -0700 Subject: [PATCH 12/26] Made following address layout change to be use space application ready as the user space applications are bigger, the hello_world_user is around 42K of code size. To accomodate this and future use cases made code area as 256K and adjusted Kernel Stack/Heap area to be 1792K as follows | FLASH (256K) in SRAM0 | | Kernel (1792 K) in SRAM0 | | 1MB SRAM1 as ISRAM | | 1MB SRAM1 as DDR | This change is tested with hello_world_user applications which starts a hello_world thread which is around 42K of code size. --- boards/arm/mps3/mps3_an547_tsv.dts | 8 ++++---- boards/arm/mps3/mps3_an547_tsv.yaml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 3075cec858f41c..444da2148439cf 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -126,7 +126,7 @@ cpu@0 { device_type = "cpu"; - compatible = "arm,cortex-m55"; + compatible = "arm,cortex-m85"; reg = <0>; #address-cells = <1>; #size-cells = <1>; @@ -149,13 +149,13 @@ sram0: sram0@60000000 { /* alias @ 0x60000000 */ compatible = "zephyr,memory-region"; - reg = <0x60000000 DT_SIZE_K(32)>; + reg = <0x60000000 DT_SIZE_K(256)>; zephyr,memory-region = "SRAM0"; }; - sram: sram@60008000 { /* alias @ 0x60008000 */ + sram: sram@60040000 { /* alias @ 0x60040000 */ compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x60008000 DT_SIZE_K(2016)>; + reg = <0x60040000 DT_SIZE_K(1792)>; zephyr,memory-region = "SRAM"; }; diff --git a/boards/arm/mps3/mps3_an547_tsv.yaml b/boards/arm/mps3/mps3_an547_tsv.yaml index d0efdd4ffc6660..169fa19ba1b52c 100644 --- a/boards/arm/mps3/mps3_an547_tsv.yaml +++ b/boards/arm/mps3/mps3_an547_tsv.yaml @@ -8,8 +8,8 @@ identifier: mps3/an547/tsv name: Arm MPS3-AN547_TSV type: mcu arch: arm -ram: 2016 -flash: 32 +ram: 1792 +flash: 256 simulation: qemu toolchain: - gnuarmemb From d99edde3b1bcc470ae4a8ca85005fa3827622d16 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Sun, 14 Jul 2024 10:34:40 -0700 Subject: [PATCH 13/26] Made changes to generate zephyr.hex using bin2hex as used by DV team as well as added changes to create zephyrstrp.hex without the first line so that it can be loaded as is on the sram. --- CMakeLists.txt | 34 +++++ Kconfig.zephyr | 6 + boards/arm/mps3/mps3_an547_tsv_defconfig | 3 + scripts/build/bin2heximage | 177 +++++++++++++++++++++++ 4 files changed, 220 insertions(+) create mode 100755 scripts/build/bin2heximage diff --git a/CMakeLists.txt b/CMakeLists.txt index 13cbc1c8b38f1a..9af7ea1ebbc653 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2020,6 +2020,40 @@ add_custom_command( COMMAND_EXPAND_LISTS ) +if(CONFIG_BUILD_OUTPUT_TSV_STRIPPED_HEX) +# Add post_build_commands to post-process the final .hex file produced by +# stripping first line of zephyr.hex +find_package(Perl REQUIRED) +set(MERGED_KERNEL_HEX_NAME merged.hex) +set(BIN_2_HEX_OPTION --width=64) +set(BIN2HEX scripts/build/bin2heximage) +add_custom_command( + OUTPUT ${MERGED_KERNEL_HEX_NAME} + COMMAND ${PERL_EXECUTABLE} ${ZEPHYR_BASE}/${BIN2HEX} ${PROJECT_BINARY_DIR}/${KERNEL_BIN_NAME} ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} ${BIN_2_HEX_OPTION} + DEPENDS ${logical_target_for_zephyr_elf} + ) + + add_custom_target(bin2hex ALL DEPENDS ${MERGED_KERNEL_HEX_NAME}) + list(APPEND RUNNERS_DEPS bin2hex) + message(VERBOSE "Creating hex files: ${MERGED_KERNEL_HEX_NAME}") + +# Remove the 1st line of elf header from the zepher.hex file +# and call the enw file as zephyrstrp.hex + +set(STRIPPED_KERNEL_HEX_NAME stripped.hex) +set(STRIPPED_HEX_NAME zephyrstrp.hex) +set(TAIL_EXECUTABLE /usr/bin/tail) +add_custom_command( + OUTPUT ${STRIPPED_KERNEL_HEX_NAME} + COMMAND ${TAIL_EXECUTABLE} -n +2 ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} >> ${PROJECT_BINARY_DIR}/${STRIPPED_HEX_NAME} + DEPENDS ${MERGED_KERNEL_HEX_NAME} + ) + + add_custom_target(strippedhex ALL DEPENDS ${STRIPPED_KERNEL_HEX_NAME}) + list(APPEND RUNNERS_DEPS strippedhex) + message(VERBOSE "strippng hex files: ${STRIPPED_KERNEL_HEX_NAME}") +endif() + # To populate with hex files to merge, do the following: # set_property(GLOBAL APPEND PROPERTY HEX_FILES_TO_MERGE ${my_local_list}) # Note that the zephyr.hex file will not be included automatically. diff --git a/Kconfig.zephyr b/Kconfig.zephyr index 7659f75478f72f..d4ab3b525b3ed1 100644 --- a/Kconfig.zephyr +++ b/Kconfig.zephyr @@ -708,6 +708,12 @@ config BUILD_OUTPUT_BIN Build a "raw" binary zephyr/zephyr.bin in the build directory. The name of this file can be customized with CONFIG_KERNEL_BIN_NAME. +config BUILD_OUTPUT_TSV_STRIPPED_HEX + bool "Build a Stripped Hex file" + default n + help + Build a "raw" hex zephyr/zephyrstrp.hex in the build directory. + config BUILD_OUTPUT_EFI bool "Build as an EFI application" default n diff --git a/boards/arm/mps3/mps3_an547_tsv_defconfig b/boards/arm/mps3/mps3_an547_tsv_defconfig index bb786dfa876010..e8a412c68259a5 100644 --- a/boards/arm/mps3/mps3_an547_tsv_defconfig +++ b/boards/arm/mps3/mps3_an547_tsv_defconfig @@ -19,3 +19,6 @@ CONFIG_SERIAL=y # Build a Secure firmware image CONFIG_TRUSTED_EXECUTION_SECURE=n + +# Build the zephyr.hex and zephyrstrp.hex for FPGA +CONFIG_BUILD_OUTPUT_TSV_STRIPPED_HEX=y diff --git a/scripts/build/bin2heximage b/scripts/build/bin2heximage new file mode 100755 index 00000000000000..917dac5bb13462 --- /dev/null +++ b/scripts/build/bin2heximage @@ -0,0 +1,177 @@ +#! /usr/bin/env perl +BEGIN { $^W = 1 } +#------------------------------------------------------------------------------- +# +# The confidential and proprietary information contained in this file may +# only be used by a person authorised under and to the extent permitted +# by a subsisting licensing agreement from Arm Limited or its affiliates. +# +# (C) COPYRIGHT 2013-2017 Arm Limited or its affiliates. +# ALL RIGHTS RESERVED +# +# This entire notice must be reproduced on all copies of this file +# and copies of this file may only be made by a person if such person is +# permitted to do so under the terms of a subsisting license agreement +# from Arm Limited or its affiliates. +# +# +# Release Information : TM250-MN-22010-r1p1-00rel0 +# +#------------------------------------------------------------------------------- +# Description: +# +# Converts a binary image into a Verilog memory initialisation file that can +# be read using $readmemh. +# +# Usage: +# +# bin2heximage [--be | --le] [--width=] [--address=] +# +# Where +# +# --le : Image is in little-endian format (this is the default.) +# --be : Image is in big-endian format +# --width : Width in bits of the target memory array, default 32 +# --address : Start address in decimal, default 0 +# +# The memory width must be a multiple of 32, i.e. a whole number of words. +#------------------------------------------------------------------------------- + +use strict; + +################################################################################ +# Global variables +################################################################################ + +# Arguments +my $infile; # Input filename +my $outfile; # Output filename +my $datawidth = 32; # Data width +my $bigendian = 0; # Big endian format +my $startaddress = 0; # Start address +my $cntrnum = 0; + +# Other variables +my $words_per_row; # Number of words in one row of memory +my $unpack_template; # Data template for the unpack function +my $word; # A word of packed binary data +my @row = (); # A row of packed binary data +my $arg; # User specified argument +my $format = 8; # Used in sprintf for formatting number, equals datawidth/4 + + +################################################################################ +# Argument parsing +################################################################################ + +foreach $arg (@ARGV) +{ + if ($arg =~ (/^--((\w+)(=(\d+))?)/)) + { + # Options + if (lc($2) eq "be") { $bigendian = 1; } + elsif (lc($2) eq "le") { $bigendian = 0; } + elsif (lc($2) eq "width" and defined($4)) { $datawidth = $4; } + elsif (lc($2) eq "address" and defined($4)) { $startaddress = $4; } + else { die("ERROR: Unknown argument: $1\n"); } + } + else + { + # The first non-optional argument is the input filename, the second is the + # output filename. Any additional arguments not prefixed with double-dash + # are illegal. + if (!defined($infile )) { $infile = $arg; } + elsif (!defined($outfile)) { $outfile = $arg; } + else { die "ERROR: too many arguments: $arg\n"; } + } +} + +# Check that the data width is valid +die "ERROR: Data width must be a multiple of 32 bits\n" if (($datawidth % 32) != 0); + +# Check that input and output files have been given +die "ERROR: No input file specified\n" if (!defined($infile)); +die "ERROR: No output file specified\n" if (!defined($outfile)); + + +################################################################################ +# Data conversion +################################################################################ + +open(INFILE, "$infile" ) or die("ERROR: could not open $infile for reading\n"); +open(OUTFILE, ">$outfile") or die("ERROR: could not open $outfile for writing\n"); + +# Ensure the input is treated as binary data, not text +binmode(INFILE); + +# We'll read data one word at a time from the binary file, and buffer these +# words until there's enough data to write a whole row to the output file. +# The ASCII conversion is done using the unpack() function, which restricts us +# converting one word (4 bytes) at a time, assuming a 32-bit machine. +# +# Note that $datawidth was already checked to be divisible by 32. The data +# will be treated as either big endian or little endian depending on the +# options chosen. +$words_per_row = $datawidth / 32; +$unpack_template = $bigendian ? "N" : "V"; +$format = $datawidth / 4; + +# Print the startaddress in hexadecimal representation with leading "1" to the output file. +print OUTFILE sprintf("1%.${format}x", ($startaddress)); +print OUTFILE "\n"; + +while (read(INFILE, $word, 4)) # 4 bytes = 1 word +{ + # Push an ASCII hexadecimal representation of each word into the row, + # ensuring that the ASCII conversion does not truncate leading zeroes. + unshift(@row, sprintf("%.8x", unpack($unpack_template, $word))); + $cntrnum++; + + # When the row array equals the target size, print the conversion to file. + # Note that row[0] must be printed last. + if (($#row == $words_per_row - 1)) + { + # Prepend a leading "0" to the row to indicate dataword + unshift(@row, "0"); + + # Print to output file + print OUTFILE @row; + print OUTFILE "\n"; + @row = (); + } + if (($cntrnum == 0x10000)) { + seek INFILE, 0x60000000, 0; + } +} + +# Since the loop only prints lines when we have a full row, we might be left +# a part-full row at the end of the loop. Pad this with zeroes and print it. +if ($#row > -1) +{ + # Pad with leading zeros + unshift(@row, "00000000") while ($#row < $words_per_row - 1); + + # Prepend a leading "0" to the row to indicate dataword + unshift(@row, "0"); + + # Print to output file + print OUTFILE @row; + print OUTFILE "\n"; + @row = (); +} + +# Prepare array of zeros for end of file pattern +unshift(@row, "00000000") while ($#row < $words_per_row - 1); + +# Prepend a leading "2" to the last row to indicate end of file +unshift(@row, "2"); + +# Print end of file pattern to output file +print OUTFILE @row; +print OUTFILE "\n"; +@row = (); + +# Close the files +close(INFILE); +close(OUTFILE); + From edc96866c5ade2e54ecb4947f8294df975ce483b Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Sun, 14 Jul 2024 14:10:59 -0700 Subject: [PATCH 14/26] Added a command to make sure all *.hex files are removed before generating new hex files. --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9af7ea1ebbc653..54f3518d531947 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2029,6 +2029,7 @@ set(BIN_2_HEX_OPTION --width=64) set(BIN2HEX scripts/build/bin2heximage) add_custom_command( OUTPUT ${MERGED_KERNEL_HEX_NAME} + COMMAND rm -fr ${PROJECT_BINARY_NAME}/*.hex COMMAND ${PERL_EXECUTABLE} ${ZEPHYR_BASE}/${BIN2HEX} ${PROJECT_BINARY_DIR}/${KERNEL_BIN_NAME} ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} ${BIN_2_HEX_OPTION} DEPENDS ${logical_target_for_zephyr_elf} ) From 50cd08a8be704eab6171630eeefce01a04b0f2f2 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Sun, 14 Jul 2024 22:08:27 -0700 Subject: [PATCH 15/26] Reduced the baudrate to support jtag_uart based shell the shell works as follows uart:~$ help Please press the button to see all available commands. You can also use the button to prompt or auto-complete all commands or its subcommands. You can try to call commands with <-h> or <--help> parameter for more information. Shell supports following meta-keys: Ctrl + (a key from: abcdefklnpuw) Alt + (a key from: bf) Please refer to shell documentation for more details. Available commands: clear : Clear screen. device : Device commands devmem : Read/write physical memory Usage: Read memory at address with optional width: devmem address [width] Write memory at address with mandatory width and value: devmem address help : Prints the help message. history : Command history. kernel : Kernel commands rem : Ignore lines beginning with 'rem ' resize : Console gets terminal screen size or assumes default in case the readout fails. It must be executed after each terminal width change to ensure correct text display. retval : Print return value of most recent command shell : Useful, not Unix-like shell commands. The command to use for beuild is as follows "west build -p always -b mps3_an547_tsv samples/subsys/shell/devmem_load/ \ -- -DOVERLAY_CONFIG=prj_poll.conf" --- boards/arm/mps3/mps3_an547_tsv.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts index 444da2148439cf..57f5283d095537 100644 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ b/boards/arm/mps3/mps3_an547_tsv.dts @@ -199,7 +199,7 @@ &jtag_uart { status = "okay"; - current-speed = <115200>; + current-speed = <9600>; }; &nvic { From 153022f407ef09704ec8075b254a280f378e95f0 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Mon, 15 Jul 2024 12:06:46 -0700 Subject: [PATCH 16/26] Added bootloader hex in the repo so that it will generate one hex to be used by all developers for FPGA and DV testing the build now generate IMAGE0_testfile.hex --- CMakeLists.txt | 7 + scripts/build/tsvbootloader.hex | 2049 +++++++++++++++++++++++++++++++ 2 files changed, 2056 insertions(+) create mode 100644 scripts/build/tsvbootloader.hex diff --git a/CMakeLists.txt b/CMakeLists.txt index 54f3518d531947..d5d5b370153d60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2044,9 +2044,16 @@ add_custom_command( set(STRIPPED_KERNEL_HEX_NAME stripped.hex) set(STRIPPED_HEX_NAME zephyrstrp.hex) set(TAIL_EXECUTABLE /usr/bin/tail) +set(HEAD_EXECUTABLE /usr/bin/head) +set(TSVBOOTLOADER_NAME scripts/build/tsvbootloader.hex) +set(TSVIMAGELOADER_NAME IMAGE0_testfile.hex) add_custom_command( OUTPUT ${STRIPPED_KERNEL_HEX_NAME} COMMAND ${TAIL_EXECUTABLE} -n +2 ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} >> ${PROJECT_BINARY_DIR}/${STRIPPED_HEX_NAME} + COMMAND ${HEAD_EXECUTABLE} -n +65 ${ZEPHYR_BASE}/${TSVBOOTLOADER_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} + COMMAND ${HEAD_EXECUTABLE} -n +1 ${PROJECT_BINARY_DIR}/${STRIPPED_HEX_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} + COMMAND ${TAIL_EXECUTABLE} -n +67 ${ZEPHYR_BASE}/${TSVBOOTLOADER_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} + COMMAND ${TAIL_EXECUTABLE} -n +1 ${PROJECT_BINARY_DIR}/${STRIPPED_HEX_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} DEPENDS ${MERGED_KERNEL_HEX_NAME} ) diff --git a/scripts/build/tsvbootloader.hex b/scripts/build/tsvbootloader.hex new file mode 100644 index 00000000000000..1c3cff9c85d1c6 --- /dev/null +++ b/scripts/build/tsvbootloader.hex @@ -0,0 +1,2049 @@ +10000000000000000 +0000000c160001100 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0000000c5000000c5 +0f7ffbf3047004802 +0000001ad0000bffd +0f804f0008000f3af +0bd10b510bd1fb51f +0f7ff4611f818f000 +0f000f85af000fff7 +0fff2f7ffb403f806 +0b510f80ff000bc03 +046208000f3af4604 +0bff1f7ff4010e8bd +04603460a47702000 +064adf64d00004770 +0bf0464adf6cd2800 +0040df2c9040df249 +01044f240f816f000 +0bf0060040000f2c8 +05014f64e0000e7fe +0f44168010000f2ce +08f4ff3bf60013140 +0000047708f6ff3bf +00001f2ce0000f24e +060010104f0416801 +08f6ff3bf8f4ff3bf +0f64db51000004770 +064adf6cd280064ad +0f2c9040df249bf04 +0f240ffe5f7ff040d +060040000f2c81044 +0f2c60c01f240bd10 +00000f04f47600c00 +04604460346024601 +04680460746064605 +04684468346824681 +0bf182800480b4686 +0bf182800480a4780 +04c09d024f8df4780 +0429abf6ff7ff47a0 +0f8420b04f851bf3c +000004770d3f80b04 +00000000000000000 +06000024160040000 +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff +0ffffffffffffffff From 128884ac503dc400a5ec262ccc82f080d02823d1 Mon Sep 17 00:00:00 2001 From: Ganesh Kethamalla Date: Tue, 16 Jul 2024 08:23:39 -0700 Subject: [PATCH 17/26] New tsi board and soc configurations added --- boards/tsi/ek_tsi_skyp/Kconfig | 5 + boards/tsi/ek_tsi_skyp/Kconfig.defconfig | 21 ++ boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp | 5 + boards/tsi/ek_tsi_skyp/board.cmake | 40 ++++ boards/tsi/ek_tsi_skyp/board.yml | 5 + .../tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi | 176 +++++++++++++++ boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts | 207 ++++++++++++++++++ boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml | 19 ++ boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig | 18 ++ soc/tsi/CMakeLists.txt | 8 + soc/tsi/Kconfig | 8 + soc/tsi/Kconfig.defconfig | 8 + soc/tsi/Kconfig.soc | 14 ++ soc/tsi/skyp_v1/CMakeLists.txt | 10 + soc/tsi/skyp_v1/Kconfig | 20 ++ soc/tsi/skyp_v1/Kconfig.defconfig | 12 + soc/tsi/skyp_v1/Kconfig.soc | 21 ++ soc/tsi/skyp_v1/soc.c | 24 ++ soc/tsi/skyp_v1/soc.h | 16 ++ soc/tsi/soc.yml | 6 + 20 files changed, 643 insertions(+) create mode 100644 boards/tsi/ek_tsi_skyp/Kconfig create mode 100644 boards/tsi/ek_tsi_skyp/Kconfig.defconfig create mode 100644 boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp create mode 100644 boards/tsi/ek_tsi_skyp/board.cmake create mode 100644 boards/tsi/ek_tsi_skyp/board.yml create mode 100644 boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi create mode 100644 boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts create mode 100644 boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml create mode 100644 boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig create mode 100644 soc/tsi/CMakeLists.txt create mode 100644 soc/tsi/Kconfig create mode 100644 soc/tsi/Kconfig.defconfig create mode 100644 soc/tsi/Kconfig.soc create mode 100644 soc/tsi/skyp_v1/CMakeLists.txt create mode 100644 soc/tsi/skyp_v1/Kconfig create mode 100644 soc/tsi/skyp_v1/Kconfig.defconfig create mode 100644 soc/tsi/skyp_v1/Kconfig.soc create mode 100644 soc/tsi/skyp_v1/soc.c create mode 100644 soc/tsi/skyp_v1/soc.h create mode 100644 soc/tsi/soc.yml diff --git a/boards/tsi/ek_tsi_skyp/Kconfig b/boards/tsi/ek_tsi_skyp/Kconfig new file mode 100644 index 00000000000000..f38bd634c9c5a5 --- /dev/null +++ b/boards/tsi/ek_tsi_skyp/Kconfig @@ -0,0 +1,5 @@ +# Copyright (c) 2021 Linaro Limited +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_EK_TSI_SKYP + select QEMU_TARGET diff --git a/boards/tsi/ek_tsi_skyp/Kconfig.defconfig b/boards/tsi/ek_tsi_skyp/Kconfig.defconfig new file mode 100644 index 00000000000000..da71ba11822a31 --- /dev/null +++ b/boards/tsi/ek_tsi_skyp/Kconfig.defconfig @@ -0,0 +1,21 @@ +# Copyright (c) 2018-2021 Linaro Limited +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_EK_TSI_SKYP + +# MPU-based null-pointer dereferencing detection cannot +# be applied as the (0x0 - 0x400) is unmapped but QEMU +# will still permit bus access. +choice NULL_POINTER_EXCEPTION_DETECTION + bool + default NULL_POINTER_EXCEPTION_DETECTION_NONE if QEMU_TARGET +endchoice + +if SERIAL + +config UART_INTERRUPT_DRIVEN + default n + +endif # SERIAL + +endif diff --git a/boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp b/boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp new file mode 100644 index 00000000000000..20ccfbee9e0dd7 --- /dev/null +++ b/boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp @@ -0,0 +1,5 @@ +# Copyright (c) 2024 TSI +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_EK_TSI_SKYP + select SOC_SKYP diff --git a/boards/tsi/ek_tsi_skyp/board.cmake b/boards/tsi/ek_tsi_skyp/board.cmake new file mode 100644 index 00000000000000..d1068ea73a270d --- /dev/null +++ b/boards/tsi/ek_tsi_skyp/board.cmake @@ -0,0 +1,40 @@ +# Copyright (c) 2024 TSI +# SPDX-License-Identifier: Apache-2.0 + + +set(SUPPORTED_EMU_PLATFORMS qemu armfvp) + +# QEMU settings +set(QEMU_CPU_TYPE_${ARCH} cortex-m55) +set(QEMU_FLAGS_${ARCH} + -cpu ${QEMU_CPU_TYPE_${ARCH}} + -machine mps3-an547 + -nographic + -vga none + ) +board_set_debugger_ifnset(qemu) + +if (CONFIG_BUILD_WITH_TFM) + # Override the binary used by qemu, to use the combined + # TF-M (Secure) & Zephyr (Non Secure) image (when running + # in-tree tests). + set(QEMU_KERNEL_OPTION "-device;loader,file=${CMAKE_BINARY_DIR}/zephyr/tfm_merged.hex") +endif() + +# FVP settings +set(ARMFVP_BIN_NAME FVP_Corstone_SSE-300_Ethos-U55) + +# FVP Parameters +# -C indicate a config option in the form of: +# instance.parameter=value +# Run the FVP with --list-params to list all options +set(ARMFVP_FLAGS + -C mps3_board.uart0.out_file=- + -C mps3_board.uart0.unbuffered_output=1 + -C mps3_board.uart1.out_file=- + -C mps3_board.uart1.unbuffered_output=1 + -C mps3_board.uart2.out_file=- + -C mps3_board.uart2.unbuffered_output=1 + -C mps3_board.visualisation.disable-visualisation=1 + ) + diff --git a/boards/tsi/ek_tsi_skyp/board.yml b/boards/tsi/ek_tsi_skyp/board.yml new file mode 100644 index 00000000000000..746cfa689a0dc0 --- /dev/null +++ b/boards/tsi/ek_tsi_skyp/board.yml @@ -0,0 +1,5 @@ +board: + name: ek_tsi_skyp + vendor: Tsavorite + socs: + - name: skyp diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi new file mode 100644 index 00000000000000..759fddefddb721 --- /dev/null +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2019-2021 Linaro Limited + * + * SPDX-License-Identifier: Apache-2.0 + */ + + sysclk: system-clock { + compatible = "fixed-clock"; + clock-frequency = <25000000>; + #clock-cells = <0>; +}; + +gpio0: gpio@9000010 { + compatible = "arm,cmsdk-gpio"; + reg = <0x9000010 0x4>; + interrupts = <69 3>; + gpio-controller; + #gpio-cells = <2>; +}; + +gpio1: gpio@9000014 { + compatible = "arm,cmsdk-gpio"; + reg = <0x9000014 0x4>; + interrupts = <70 3>; + gpio-controller; + #gpio-cells = <2>; +}; + +gpio2: gpio@9000018 { + compatible = "arm,cmsdk-gpio"; + reg = <0x9000018 0x4>; + interrupts = <71 3>; + gpio-controller; + #gpio-cells = <2>; +}; + +gpio3: gpio@900001c { + compatible = "arm,cmsdk-gpio"; + reg = <0x900001c 0x4>; + interrupts = <72 3>; + gpio-controller; + #gpio-cells = <2>; +}; + + +/*eth0: eth@1400000 {*/ + /* Linux has "smsc,lan9115" */ + /*compatible = "smsc,lan9220";*/ + /* Actual reg range is ~0x200 */ + /*reg = <0x1400000 0x100000>;*/ + /*interrupts = <49 3>;*/ +/*};*/ + +/* +i2c_touch: i2c@9200000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9200000 0x1000>; +}; + +i2c_audio_conf: i2c@9201000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9201000 0x1000>; +}; + +i2c_shield0: i2c@9203000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9203000 0x1000>; +}; + +i2c_shield1: i2c@9204000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9204000 0x1000>; +}; + +i2c_ddr4_eeprom: i2c@9208000 { + compatible = "arm,versatile-i2c"; + clock-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x9208000 0x1000>; +}; +*/ +gpio_led0: mps3_fpgaio@8000010 { + compatible = "arm,mps3-fpgaio-gpio"; + + reg = <0x8000010 0x4>; + gpio-controller; + #gpio-cells = <1>; + ngpios = <8>; +}; + +gpio_button: mps3_fpgaio@8000014 { + compatible = "arm,mps3-fpgaio-gpio"; + + reg = <0x8000014 0x4>; + gpio-controller; + #gpio-cells = <1>; + ngpios = <2>; +}; + +gpio_misc: mps3_fpgaio@8000018 { + compatible = "arm,mps3-fpgaio-gpio"; + + reg = <0x8000018 0x4>; + gpio-controller; + #gpio-cells = <1>; + ngpios = <3>; +}; + +uart0: uart@14001000 { + compatible = "arm,cmsdk-uart"; + reg = <0x14001000 0x1000>; + interrupts = <34 3 33 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +/* +uart1: uart@9304000 { + compatible = "arm,cmsdk-uart"; + reg = <0x9304000 0x1000>; + interrupts = <36 3 35 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +uart2: uart@9305000 { + compatible = "arm,cmsdk-uart"; + reg = <0x9305000 0x1000>; + interrupts = <38 3 37 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +uart3: uart@9306000 { + compatible = "arm,cmsdk-uart"; + reg = <0x9306000 0x1000>; + interrupts = <40 3 39 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +uart4: uart@9307000 { + compatible = "arm,cmsdk-uart"; + reg = <0x9307000 0x1000>; + interrupts = <42 3 41 3>; + interrupt-names = "tx", "rx"; + clocks = <&sysclk>; + current-speed = <115200>; +}; + +uart5: uart@9308000 { + compatible = "arm,cmsdk-uart"; + status = "disabled"; + reg = <0x9308000 0x1000>; + interrupt-names = "tx", "rx"; + interrupts = <126 3 125 3>; + clocks = <&sysclk>; + current-speed = <115200>; +};*/ diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts new file mode 100644 index 00000000000000..c4f8d0642ce835 --- /dev/null +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2018-2021 Linaro Limited + * Copyright 2022 Arm Limited and/or its affiliates + * + * SPDX-License-Identifier: Apache-2.0 + */ + + /dts-v1/; + + #include + #include + #include + #include + + / { + compatible = "arm,mps3-an547"; + #address-cells = <1>; + #size-cells = <1>; + + /* + aliases { + led0 = &led_0; + led1 = &led_1; + sw0 = &user_button_0; + sw1 = &user_button_1; + uart-0 = &jtag_uart; + }; + */ + chosen { + zephyr,console = &jtag_uart; + /* + zephyr,console = &uart0; + */ + zephyr,shell-uart = &jtag_uart; + /* + zephyr,shell-uart = &uart0; + */ + zephyr,sram = &sram; + zephyr,flash = &sram0; + }; + /* + leds { + compatible = "gpio-leds"; + led_0: led_0 { + gpios = <&gpio_led0 0>; + label = "USERLED0"; + }; + led_1: led_1 { + gpios = <&gpio_led0 1>; + label = "USERLED1"; + }; + led_2: led_2 { + gpios = <&gpio_led0 2>; + label = "USERLED2"; + }; + led_3: led_3 { + gpios = <&gpio_led0 3>; + label = "USERLED3"; + }; + led_4: led_4 { + gpios = <&gpio_led0 4>; + label = "USERLED4"; + }; + led_5: led_5 { + gpios = <&gpio_led0 5>; + label = "USERLED5"; + }; + led_6: led_6 { + gpios = <&gpio_led0 6>; + label = "USERLED6"; + }; + led_7: led_7 { + gpios = <&gpio_led0 7>; + label = "USERLED7"; + }; + led_8: led_8 { + gpios = <&gpio_led0 8>; + label = "PB1LED"; + }; + led_9: led_9 { + gpios = <&gpio_led0 9>; + label = "PB2LED"; + }; + }; + */ + /* + gpio_keys { + compatible = "gpio-keys"; + user_button_0: button_0 { + label = "USERPB0"; + gpios = <&gpio_button 0>; + zephyr,code = ; + }; + user_button_1: button_1 { + label = "USERPB1"; + gpios = <&gpio_button 1>; + zephyr,code = ; + }; + }; + + ethosu { + #address-cells = <1>; + #size-cells = <0>; + interrupt-parent = <&nvic>; + + ethosu0: ethosu@48102000 { + compatible = "arm,ethos-u"; + reg = <0x48102000>; + interrupts = <56 3>; + secure-enable; + privilege-enable; + status = "okay"; + }; + }; + */ + + jtag_uart: uart@95003000 { + compatible = "altr,jtag-uart"; + reg = <0x95003000 0x8>; + status = "enabled"; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-m85"; + reg = <0>; + #address-cells = <1>; + #size-cells = <1>; + + mpu: mpu@e000ed90 { + compatible = "arm,armv8.1m-mpu"; + reg = <0xe000ed90 0x40>; + }; + }; + }; + + /* We utilize the secure addresses, if you subtract 0x10000000 + * you'll get the non-secure alias + */ + itcm: itcm@4000 { /* alias @ 0x4000 */ + compatible = "zephyr,memory-region"; + reg = <0x4000 DT_SIZE_K(16)>; + zephyr,memory-region = "ITCM"; + }; + + sram0: sram0@60000000 { /* alias @ 0x60000000 */ + compatible = "zephyr,memory-region"; + reg = <0x60000000 DT_SIZE_K(256)>; + zephyr,memory-region = "SRAM0"; + }; + + sram: sram@60040000 { /* alias @ 0x60040000 */ + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x60040000 DT_SIZE_K(1792)>; + zephyr,memory-region = "SRAM"; + }; + + dtcm: dtcm@20000000 { /* alias @ 0x20000000 */ + compatible = "zephyr,memory-region"; + reg = <0x20000000 DT_SIZE_K(16)>; + zephyr,memory-region = "DTCM"; + }; + + isram: sram@60600000 {/* alias @ 0x60600000 */ + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x60600000 DT_SIZE_M(1)>; + zephyr,memory-region = "ISRAM"; + }; + + /* DDR4 - 2G, alternates non-secure/secure every 256M */ + ddr4: memory@60700000 { + device_type = "memory"; + compatible = "zephyr,memory-region"; + reg = <0x60700000 DT_SIZE_M(1) + /*0x70000000 DT_SIZE_M(256) + 0x80000000 DT_SIZE_M(256) + 0x90000000 DT_SIZE_M(256) + 0xa0000000 DT_SIZE_M(256) + 0xb0000000 DT_SIZE_M(256) + 0xc0000000 DT_SIZE_M(256) + 0xd0000000 DT_SIZE_M(256)*/>; + zephyr,memory-region = "DDR4"; + }; + + soc { + peripheral@81000000 { + #address-cells = <1>; + #size-cells = <1>; + ranges = <0x0 0x81000000 0x1effffff>; + + #include "ek_tsi_skyp-common.dtsi" + }; + }; + }; + + &jtag_uart { + status = "okay"; + current-speed = <115200>; + }; + + &nvic { + arm,num-irq-priority-bits = <3>; + }; diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml new file mode 100644 index 00000000000000..3d59976de13e2f --- /dev/null +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml @@ -0,0 +1,19 @@ +identifier: ek_tsi_skyp +name: TSI sky-p +type: mcu +arch: arm +ram: 2016 +flash: 32 +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - gpio +testing: + ignore_tags: + - drivers + - bluetooth + - net + - timer +vendor: arm \ No newline at end of file diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig new file mode 100644 index 00000000000000..455bdb47c3fff0 --- /dev/null +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig @@ -0,0 +1,18 @@ +# Copyright (c) 2024 TSI +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_RUNTIME_NMI=y +CONFIG_ARM_TRUSTZONE_M=n +CONFIG_ARM_MPU=y +CONFIG_QEMU_ICOUNT_SHIFT=7 + +# GPIOs +CONFIG_GPIO=y + +# Serial +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y +CONFIG_SERIAL=y + +# Build a Secure firmware image +CONFIG_TRUSTED_EXECUTION_SECURE=n diff --git a/soc/tsi/CMakeLists.txt b/soc/tsi/CMakeLists.txt new file mode 100644 index 00000000000000..fbbebb35e2eccf --- /dev/null +++ b/soc/tsi/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright (c) 2024 TSI +# SPDX-License-Identifier: Apache-2.0 + +if(DEFINED SOC_SERIES) + add_subdirectory(${SOC_SERIES}) +else() + add_subdirectory(${SOC_NAME}) +endif() diff --git a/soc/tsi/Kconfig b/soc/tsi/Kconfig new file mode 100644 index 00000000000000..05c0032b3d2e38 --- /dev/null +++ b/soc/tsi/Kconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2024 TSI +# SPDX-License-Identifier: Apache-2.0 + +if SOC_FAMILY_ARM || SOC_FAMILY_ARM64 + +rsource "*/Kconfig" + +endif # SOC_FAMILY_ARM || SOC_FAMILY_ARM64 diff --git a/soc/tsi/Kconfig.defconfig b/soc/tsi/Kconfig.defconfig new file mode 100644 index 00000000000000..c3a05775bd1f94 --- /dev/null +++ b/soc/tsi/Kconfig.defconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2024 TSI +# SPDX-License-Identifier: Apache-2.0 + +if SOC_FAMILY_ARM || SOC_FAMILY_ARM64 + +rsource "*/Kconfig.defconfig" + +endif # SOC_FAMILY_ARM || SOC_FAMILY_ARM64 diff --git a/soc/tsi/Kconfig.soc b/soc/tsi/Kconfig.soc new file mode 100644 index 00000000000000..aeaa4c71d8e694 --- /dev/null +++ b/soc/tsi/Kconfig.soc @@ -0,0 +1,14 @@ +# Copyright (c) 2024 TSI +# SPDX-License-Identifier: Apache-2.0 + +config SOC_FAMILY_ARM + bool + +config SOC_FAMILY_ARM64 + bool + +config SOC_FAMILY + default "arm" if SOC_FAMILY_ARM + default "arm64" if SOC_FAMILY_ARM64 + +rsource "*/Kconfig.soc" diff --git a/soc/tsi/skyp_v1/CMakeLists.txt b/soc/tsi/skyp_v1/CMakeLists.txt new file mode 100644 index 00000000000000..7f8d6b55fba501 --- /dev/null +++ b/soc/tsi/skyp_v1/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright (c) 2024 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +zephyr_sources( + soc.c + ) + +zephyr_include_directories(.) + +set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/arm/cortex_m/scripts/linker.ld CACHE INTERNAL "") diff --git a/soc/tsi/skyp_v1/Kconfig b/soc/tsi/skyp_v1/Kconfig new file mode 100644 index 00000000000000..8e4d1c78848f93 --- /dev/null +++ b/soc/tsi/skyp_v1/Kconfig @@ -0,0 +1,20 @@ +# Copyright (c) 2024 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_SKYP_V1 + select ARM + select GPIO_MMIO32 if GPIO + +config SOC_SERIES_SKYP_V1 + select CPU_CORTEX_M55 + select CPU_HAS_ARM_SAU + select CPU_HAS_ARM_MPU + select CPU_HAS_FPU + select ARMV8_M_DSP + select ARMV8_1_M_MVEI + select ARMV8_1_M_MVEF + select ARMV8_1_M_PMU + +config ARMV8_1_M_PMU_EVENTCNT + int + default 8 if SOC_SERIES_SKYP_V1 diff --git a/soc/tsi/skyp_v1/Kconfig.defconfig b/soc/tsi/skyp_v1/Kconfig.defconfig new file mode 100644 index 00000000000000..599370e566cb6e --- /dev/null +++ b/soc/tsi/skyp_v1/Kconfig.defconfig @@ -0,0 +1,12 @@ +# Copyright (c) 2024 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +if SOC_SERIES_SKYP_V1 + +config SYS_CLOCK_HW_CYCLES_PER_SEC + default 25000000 + +config NUM_IRQS + default 128 + +endif # SOC_SERIES_SKYP_V1 diff --git a/soc/tsi/skyp_v1/Kconfig.soc b/soc/tsi/skyp_v1/Kconfig.soc new file mode 100644 index 00000000000000..eac2d93fd0aeca --- /dev/null +++ b/soc/tsi/skyp_v1/Kconfig.soc @@ -0,0 +1,21 @@ +# Copyright (c) 2024 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + + +config SOC_SERIES_SKYP_V1 + bool + select SOC_FAMILY_ARM + help + Enable support for ARM MPS3 MCU Series + +config SOC_SKYP + bool + select SOC_SERIES_SKYP_V1 + help + skyp + +config SOC_SERIES + default "skyp_v1" if SOC_SERIES_SKYP_V1 + +config SOC + default "skyp" if SOC_SKYP diff --git a/soc/tsi/skyp_v1/soc.c b/soc/tsi/skyp_v1/soc.c new file mode 100644 index 00000000000000..84f15dfebabe2c --- /dev/null +++ b/soc/tsi/skyp_v1/soc.c @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2024 TSI + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + + +/* Setup GPIO drivers for accessing FPGAIO registers */ +#define FPGAIO_NODE(n) DT_INST(n, arm_mps3_fpgaio_gpio) +#define FPGAIO_INIT(n) \ + GPIO_MMIO32_INIT(FPGAIO_NODE(n), \ + DT_REG_ADDR(FPGAIO_NODE(n)), \ + BIT_MASK(DT_PROP(FPGAIO_NODE(n), ngpios))) + +/* We expect there to be 3 arm,mps3-fpgaio-gpio devices: + * led0, button, and misc + */ +FPGAIO_INIT(0); +FPGAIO_INIT(1); +FPGAIO_INIT(2); diff --git a/soc/tsi/skyp_v1/soc.h b/soc/tsi/skyp_v1/soc.h new file mode 100644 index 00000000000000..1b4a75d0e5ac55 --- /dev/null +++ b/soc/tsi/skyp_v1/soc.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2024 TSI + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file SoC configuration macros for the Renesas RA8M1 family MCU + */ + +#ifndef ZEPHYR_SOC_SKYP_SOC_H_ +#define ZEPHYR_SOC_SKYP_SOC_H_ + +#include + +#endif /* ZEPHYR_SOC_SKYP_SOC_H_ */ diff --git a/soc/tsi/soc.yml b/soc/tsi/soc.yml new file mode 100644 index 00000000000000..3e6bfde87d7886 --- /dev/null +++ b/soc/tsi/soc.yml @@ -0,0 +1,6 @@ +family: + - name: tsi + series: + - name: skyp_v1 + socs: + - name: skyp From 7c564075d908be4449a39325f5fe8b39effd1002 Mon Sep 17 00:00:00 2001 From: Ganesh Kethamalla Date: Tue, 16 Jul 2024 22:47:53 -0700 Subject: [PATCH 18/26] changes made for auto script hex file generation --- boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts | 394 +++++++++---------- boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml | 6 +- boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig | 3 + 3 files changed, 204 insertions(+), 199 deletions(-) diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts index c4f8d0642ce835..3234cf273fd416 100644 --- a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts @@ -5,203 +5,203 @@ * SPDX-License-Identifier: Apache-2.0 */ - /dts-v1/; - - #include - #include - #include - #include - - / { - compatible = "arm,mps3-an547"; - #address-cells = <1>; - #size-cells = <1>; - - /* - aliases { - led0 = &led_0; - led1 = &led_1; - sw0 = &user_button_0; - sw1 = &user_button_1; - uart-0 = &jtag_uart; - }; +/dts-v1/; + +#include +#include +#include +#include + +/ { + compatible = "arm,mps3-an547"; + #address-cells = <1>; + #size-cells = <1>; + + /* + aliases { + led0 = &led_0; + led1 = &led_1; + sw0 = &user_button_0; + sw1 = &user_button_1; + uart-0 = &jtag_uart; + }; + */ + chosen { + zephyr,console = &jtag_uart; + /* + zephyr,console = &uart0; + */ + zephyr,shell-uart = &jtag_uart; + /* + zephyr,shell-uart = &uart0; + */ + zephyr,sram = &sram; + zephyr,flash = &sram0; + }; + /* + leds { + compatible = "gpio-leds"; + led_0: led_0 { + gpios = <&gpio_led0 0>; + label = "USERLED0"; + }; + led_1: led_1 { + gpios = <&gpio_led0 1>; + label = "USERLED1"; + }; + led_2: led_2 { + gpios = <&gpio_led0 2>; + label = "USERLED2"; + }; + led_3: led_3 { + gpios = <&gpio_led0 3>; + label = "USERLED3"; + }; + led_4: led_4 { + gpios = <&gpio_led0 4>; + label = "USERLED4"; + }; + led_5: led_5 { + gpios = <&gpio_led0 5>; + label = "USERLED5"; + }; + led_6: led_6 { + gpios = <&gpio_led0 6>; + label = "USERLED6"; + }; + led_7: led_7 { + gpios = <&gpio_led0 7>; + label = "USERLED7"; + }; + led_8: led_8 { + gpios = <&gpio_led0 8>; + label = "PB1LED"; + }; + led_9: led_9 { + gpios = <&gpio_led0 9>; + label = "PB2LED"; + }; + }; + */ + /* + gpio_keys { + compatible = "gpio-keys"; + user_button_0: button_0 { + label = "USERPB0"; + gpios = <&gpio_button 0>; + zephyr,code = ; + }; + user_button_1: button_1 { + label = "USERPB1"; + gpios = <&gpio_button 1>; + zephyr,code = ; + }; + }; + + ethosu { + #address-cells = <1>; + #size-cells = <0>; + interrupt-parent = <&nvic>; + + ethosu0: ethosu@48102000 { + compatible = "arm,ethos-u"; + reg = <0x48102000>; + interrupts = <56 3>; + secure-enable; + privilege-enable; + status = "okay"; + }; + }; + */ + + jtag_uart: uart@95003000 { + compatible = "altr,jtag-uart"; + reg = <0x95003000 0x8>; + status = "enabled"; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-m85"; + reg = <0>; + #address-cells = <1>; + #size-cells = <1>; + + mpu: mpu@e000ed90 { + compatible = "arm,armv8.1m-mpu"; + reg = <0xe000ed90 0x40>; + }; + }; + }; + + /* We utilize the secure addresses, if you subtract 0x10000000 + * you'll get the non-secure alias */ - chosen { - zephyr,console = &jtag_uart; - /* - zephyr,console = &uart0; - */ - zephyr,shell-uart = &jtag_uart; - /* - zephyr,shell-uart = &uart0; - */ - zephyr,sram = &sram; - zephyr,flash = &sram0; - }; - /* - leds { - compatible = "gpio-leds"; - led_0: led_0 { - gpios = <&gpio_led0 0>; - label = "USERLED0"; - }; - led_1: led_1 { - gpios = <&gpio_led0 1>; - label = "USERLED1"; - }; - led_2: led_2 { - gpios = <&gpio_led0 2>; - label = "USERLED2"; - }; - led_3: led_3 { - gpios = <&gpio_led0 3>; - label = "USERLED3"; - }; - led_4: led_4 { - gpios = <&gpio_led0 4>; - label = "USERLED4"; - }; - led_5: led_5 { - gpios = <&gpio_led0 5>; - label = "USERLED5"; - }; - led_6: led_6 { - gpios = <&gpio_led0 6>; - label = "USERLED6"; - }; - led_7: led_7 { - gpios = <&gpio_led0 7>; - label = "USERLED7"; - }; - led_8: led_8 { - gpios = <&gpio_led0 8>; - label = "PB1LED"; - }; - led_9: led_9 { - gpios = <&gpio_led0 9>; - label = "PB2LED"; - }; - }; - */ - /* - gpio_keys { - compatible = "gpio-keys"; - user_button_0: button_0 { - label = "USERPB0"; - gpios = <&gpio_button 0>; - zephyr,code = ; - }; - user_button_1: button_1 { - label = "USERPB1"; - gpios = <&gpio_button 1>; - zephyr,code = ; - }; - }; - - ethosu { - #address-cells = <1>; - #size-cells = <0>; - interrupt-parent = <&nvic>; - - ethosu0: ethosu@48102000 { - compatible = "arm,ethos-u"; - reg = <0x48102000>; - interrupts = <56 3>; - secure-enable; - privilege-enable; - status = "okay"; - }; - }; - */ - - jtag_uart: uart@95003000 { - compatible = "altr,jtag-uart"; - reg = <0x95003000 0x8>; - status = "enabled"; - }; - - cpus { - #address-cells = <1>; - #size-cells = <0>; - - cpu@0 { - device_type = "cpu"; - compatible = "arm,cortex-m85"; - reg = <0>; - #address-cells = <1>; - #size-cells = <1>; - - mpu: mpu@e000ed90 { - compatible = "arm,armv8.1m-mpu"; - reg = <0xe000ed90 0x40>; - }; - }; - }; - - /* We utilize the secure addresses, if you subtract 0x10000000 - * you'll get the non-secure alias - */ - itcm: itcm@4000 { /* alias @ 0x4000 */ - compatible = "zephyr,memory-region"; - reg = <0x4000 DT_SIZE_K(16)>; - zephyr,memory-region = "ITCM"; - }; - - sram0: sram0@60000000 { /* alias @ 0x60000000 */ - compatible = "zephyr,memory-region"; - reg = <0x60000000 DT_SIZE_K(256)>; - zephyr,memory-region = "SRAM0"; - }; - - sram: sram@60040000 { /* alias @ 0x60040000 */ - compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x60040000 DT_SIZE_K(1792)>; - zephyr,memory-region = "SRAM"; - }; - - dtcm: dtcm@20000000 { /* alias @ 0x20000000 */ - compatible = "zephyr,memory-region"; - reg = <0x20000000 DT_SIZE_K(16)>; - zephyr,memory-region = "DTCM"; - }; - - isram: sram@60600000 {/* alias @ 0x60600000 */ - compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x60600000 DT_SIZE_M(1)>; - zephyr,memory-region = "ISRAM"; - }; - - /* DDR4 - 2G, alternates non-secure/secure every 256M */ - ddr4: memory@60700000 { - device_type = "memory"; - compatible = "zephyr,memory-region"; - reg = <0x60700000 DT_SIZE_M(1) - /*0x70000000 DT_SIZE_M(256) - 0x80000000 DT_SIZE_M(256) - 0x90000000 DT_SIZE_M(256) - 0xa0000000 DT_SIZE_M(256) - 0xb0000000 DT_SIZE_M(256) - 0xc0000000 DT_SIZE_M(256) - 0xd0000000 DT_SIZE_M(256)*/>; - zephyr,memory-region = "DDR4"; - }; - - soc { - peripheral@81000000 { - #address-cells = <1>; - #size-cells = <1>; - ranges = <0x0 0x81000000 0x1effffff>; + itcm: itcm@4000 { /* alias @ 0x4000 */ + compatible = "zephyr,memory-region"; + reg = <0x4000 DT_SIZE_K(16)>; + zephyr,memory-region = "ITCM"; + }; + + sram0: sram0@60000000 { /* alias @ 0x60000000 */ + compatible = "zephyr,memory-region"; + reg = <0x60000000 DT_SIZE_K(256)>; + zephyr,memory-region = "SRAM0"; + }; + + sram: sram@60040000 { /* alias @ 0x60040000 */ + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x60040000 DT_SIZE_K(1792)>; + zephyr,memory-region = "SRAM"; + }; + + dtcm: dtcm@20000000 { /* alias @ 0x20000000 */ + compatible = "zephyr,memory-region"; + reg = <0x20000000 DT_SIZE_K(16)>; + zephyr,memory-region = "DTCM"; + }; + + isram: sram@60600000 {/* alias @ 0x60600000 */ + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x60600000 DT_SIZE_M(1)>; + zephyr,memory-region = "ISRAM"; + }; + + /* DDR4 - 2G, alternates non-secure/secure every 256M */ + ddr4: memory@60700000 { + device_type = "memory"; + compatible = "zephyr,memory-region"; + reg = <0x60700000 DT_SIZE_M(1) + /*0x70000000 DT_SIZE_M(256) + 0x80000000 DT_SIZE_M(256) + 0x90000000 DT_SIZE_M(256) + 0xa0000000 DT_SIZE_M(256) + 0xb0000000 DT_SIZE_M(256) + 0xc0000000 DT_SIZE_M(256) + 0xd0000000 DT_SIZE_M(256)*/>; + zephyr,memory-region = "DDR4"; + }; + + soc { + peripheral@81000000 { + #address-cells = <1>; + #size-cells = <1>; + ranges = <0x0 0x81000000 0x1effffff>; #include "ek_tsi_skyp-common.dtsi" - }; - }; - }; - - &jtag_uart { - status = "okay"; - current-speed = <115200>; - }; - - &nvic { - arm,num-irq-priority-bits = <3>; - }; + }; + }; +}; + +&jtag_uart { + status = "okay"; + current-speed = <9600>; +}; + +&nvic { + arm,num-irq-priority-bits = <3>; +}; diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml index 3d59976de13e2f..32e90894c2420a 100644 --- a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml @@ -2,8 +2,10 @@ identifier: ek_tsi_skyp name: TSI sky-p type: mcu arch: arm -ram: 2016 -flash: 32 +ram: 1792 +flash: 256 +simulation: qemu + toolchain: - zephyr - gnuarmemb diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig index 455bdb47c3fff0..c5532677b2168b 100644 --- a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig @@ -16,3 +16,6 @@ CONFIG_SERIAL=y # Build a Secure firmware image CONFIG_TRUSTED_EXECUTION_SECURE=n + +# Build the zephyr.hex and zephyrstrp.hex for FPGA +CONFIG_BUILD_OUTPUT_TSV_STRIPPED_HEX=y From 9fc46227de8b53ae9c0bb883fdabb72aa0efd716 Mon Sep 17 00:00:00 2001 From: Ganesh Kethamalla Date: Sun, 21 Jul 2024 22:45:29 -0700 Subject: [PATCH 19/26] code clean up --- boards/tsi/ek_tsi_skyp/Kconfig | 2 +- boards/tsi/ek_tsi_skyp/Kconfig.defconfig | 2 +- boards/tsi/ek_tsi_skyp/board.cmake | 40 ----- .../tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi | 155 ------------------ boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts | 86 +--------- boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml | 11 +- boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig | 3 - soc/tsi/skyp_v1/Kconfig | 3 +- soc/tsi/skyp_v1/soc.c | 3 +- 9 files changed, 6 insertions(+), 299 deletions(-) delete mode 100644 boards/tsi/ek_tsi_skyp/board.cmake diff --git a/boards/tsi/ek_tsi_skyp/Kconfig b/boards/tsi/ek_tsi_skyp/Kconfig index f38bd634c9c5a5..be12cd689ad905 100644 --- a/boards/tsi/ek_tsi_skyp/Kconfig +++ b/boards/tsi/ek_tsi_skyp/Kconfig @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Linaro Limited +# Copyright (c) 2024 TSI # SPDX-License-Identifier: Apache-2.0 config BOARD_EK_TSI_SKYP diff --git a/boards/tsi/ek_tsi_skyp/Kconfig.defconfig b/boards/tsi/ek_tsi_skyp/Kconfig.defconfig index da71ba11822a31..6bb1b8dd210277 100644 --- a/boards/tsi/ek_tsi_skyp/Kconfig.defconfig +++ b/boards/tsi/ek_tsi_skyp/Kconfig.defconfig @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 Linaro Limited +# Copyright (c) 2024 TSI # SPDX-License-Identifier: Apache-2.0 if BOARD_EK_TSI_SKYP diff --git a/boards/tsi/ek_tsi_skyp/board.cmake b/boards/tsi/ek_tsi_skyp/board.cmake deleted file mode 100644 index d1068ea73a270d..00000000000000 --- a/boards/tsi/ek_tsi_skyp/board.cmake +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (c) 2024 TSI -# SPDX-License-Identifier: Apache-2.0 - - -set(SUPPORTED_EMU_PLATFORMS qemu armfvp) - -# QEMU settings -set(QEMU_CPU_TYPE_${ARCH} cortex-m55) -set(QEMU_FLAGS_${ARCH} - -cpu ${QEMU_CPU_TYPE_${ARCH}} - -machine mps3-an547 - -nographic - -vga none - ) -board_set_debugger_ifnset(qemu) - -if (CONFIG_BUILD_WITH_TFM) - # Override the binary used by qemu, to use the combined - # TF-M (Secure) & Zephyr (Non Secure) image (when running - # in-tree tests). - set(QEMU_KERNEL_OPTION "-device;loader,file=${CMAKE_BINARY_DIR}/zephyr/tfm_merged.hex") -endif() - -# FVP settings -set(ARMFVP_BIN_NAME FVP_Corstone_SSE-300_Ethos-U55) - -# FVP Parameters -# -C indicate a config option in the form of: -# instance.parameter=value -# Run the FVP with --list-params to list all options -set(ARMFVP_FLAGS - -C mps3_board.uart0.out_file=- - -C mps3_board.uart0.unbuffered_output=1 - -C mps3_board.uart1.out_file=- - -C mps3_board.uart1.unbuffered_output=1 - -C mps3_board.uart2.out_file=- - -C mps3_board.uart2.unbuffered_output=1 - -C mps3_board.visualisation.disable-visualisation=1 - ) - diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi index 759fddefddb721..fd7def4eeb3406 100644 --- a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi @@ -10,115 +10,6 @@ #clock-cells = <0>; }; -gpio0: gpio@9000010 { - compatible = "arm,cmsdk-gpio"; - reg = <0x9000010 0x4>; - interrupts = <69 3>; - gpio-controller; - #gpio-cells = <2>; -}; - -gpio1: gpio@9000014 { - compatible = "arm,cmsdk-gpio"; - reg = <0x9000014 0x4>; - interrupts = <70 3>; - gpio-controller; - #gpio-cells = <2>; -}; - -gpio2: gpio@9000018 { - compatible = "arm,cmsdk-gpio"; - reg = <0x9000018 0x4>; - interrupts = <71 3>; - gpio-controller; - #gpio-cells = <2>; -}; - -gpio3: gpio@900001c { - compatible = "arm,cmsdk-gpio"; - reg = <0x900001c 0x4>; - interrupts = <72 3>; - gpio-controller; - #gpio-cells = <2>; -}; - - -/*eth0: eth@1400000 {*/ - /* Linux has "smsc,lan9115" */ - /*compatible = "smsc,lan9220";*/ - /* Actual reg range is ~0x200 */ - /*reg = <0x1400000 0x100000>;*/ - /*interrupts = <49 3>;*/ -/*};*/ - -/* -i2c_touch: i2c@9200000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9200000 0x1000>; -}; - -i2c_audio_conf: i2c@9201000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9201000 0x1000>; -}; - -i2c_shield0: i2c@9203000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9203000 0x1000>; -}; - -i2c_shield1: i2c@9204000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9204000 0x1000>; -}; - -i2c_ddr4_eeprom: i2c@9208000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9208000 0x1000>; -}; -*/ -gpio_led0: mps3_fpgaio@8000010 { - compatible = "arm,mps3-fpgaio-gpio"; - - reg = <0x8000010 0x4>; - gpio-controller; - #gpio-cells = <1>; - ngpios = <8>; -}; - -gpio_button: mps3_fpgaio@8000014 { - compatible = "arm,mps3-fpgaio-gpio"; - - reg = <0x8000014 0x4>; - gpio-controller; - #gpio-cells = <1>; - ngpios = <2>; -}; - -gpio_misc: mps3_fpgaio@8000018 { - compatible = "arm,mps3-fpgaio-gpio"; - - reg = <0x8000018 0x4>; - gpio-controller; - #gpio-cells = <1>; - ngpios = <3>; -}; - uart0: uart@14001000 { compatible = "arm,cmsdk-uart"; reg = <0x14001000 0x1000>; @@ -128,49 +19,3 @@ uart0: uart@14001000 { current-speed = <115200>; }; -/* -uart1: uart@9304000 { - compatible = "arm,cmsdk-uart"; - reg = <0x9304000 0x1000>; - interrupts = <36 3 35 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; -}; - -uart2: uart@9305000 { - compatible = "arm,cmsdk-uart"; - reg = <0x9305000 0x1000>; - interrupts = <38 3 37 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; -}; - -uart3: uart@9306000 { - compatible = "arm,cmsdk-uart"; - reg = <0x9306000 0x1000>; - interrupts = <40 3 39 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; -}; - -uart4: uart@9307000 { - compatible = "arm,cmsdk-uart"; - reg = <0x9307000 0x1000>; - interrupts = <42 3 41 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; -}; - -uart5: uart@9308000 { - compatible = "arm,cmsdk-uart"; - status = "disabled"; - reg = <0x9308000 0x1000>; - interrupt-names = "tx", "rx"; - interrupts = <126 3 125 3>; - clocks = <&sysclk>; - current-speed = <115200>; -};*/ diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts index 3234cf273fd416..e755d2743e52d6 100644 --- a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2021 Linaro Limited + * Copyright (c) 2024 TSI * Copyright 2022 Arm Limited and/or its affiliates * * SPDX-License-Identifier: Apache-2.0 @@ -17,15 +17,6 @@ #address-cells = <1>; #size-cells = <1>; - /* - aliases { - led0 = &led_0; - led1 = &led_1; - sw0 = &user_button_0; - sw1 = &user_button_1; - uart-0 = &jtag_uart; - }; - */ chosen { zephyr,console = &jtag_uart; /* @@ -38,81 +29,6 @@ zephyr,sram = &sram; zephyr,flash = &sram0; }; - /* - leds { - compatible = "gpio-leds"; - led_0: led_0 { - gpios = <&gpio_led0 0>; - label = "USERLED0"; - }; - led_1: led_1 { - gpios = <&gpio_led0 1>; - label = "USERLED1"; - }; - led_2: led_2 { - gpios = <&gpio_led0 2>; - label = "USERLED2"; - }; - led_3: led_3 { - gpios = <&gpio_led0 3>; - label = "USERLED3"; - }; - led_4: led_4 { - gpios = <&gpio_led0 4>; - label = "USERLED4"; - }; - led_5: led_5 { - gpios = <&gpio_led0 5>; - label = "USERLED5"; - }; - led_6: led_6 { - gpios = <&gpio_led0 6>; - label = "USERLED6"; - }; - led_7: led_7 { - gpios = <&gpio_led0 7>; - label = "USERLED7"; - }; - led_8: led_8 { - gpios = <&gpio_led0 8>; - label = "PB1LED"; - }; - led_9: led_9 { - gpios = <&gpio_led0 9>; - label = "PB2LED"; - }; - }; - */ - /* - gpio_keys { - compatible = "gpio-keys"; - user_button_0: button_0 { - label = "USERPB0"; - gpios = <&gpio_button 0>; - zephyr,code = ; - }; - user_button_1: button_1 { - label = "USERPB1"; - gpios = <&gpio_button 1>; - zephyr,code = ; - }; - }; - - ethosu { - #address-cells = <1>; - #size-cells = <0>; - interrupt-parent = <&nvic>; - - ethosu0: ethosu@48102000 { - compatible = "arm,ethos-u"; - reg = <0x48102000>; - interrupts = <56 3>; - secure-enable; - privilege-enable; - status = "okay"; - }; - }; - */ jtag_uart: uart@95003000 { compatible = "altr,jtag-uart"; diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml index 32e90894c2420a..504ff604822e2e 100644 --- a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml @@ -5,17 +5,8 @@ arch: arm ram: 1792 flash: 256 simulation: qemu - toolchain: - zephyr - gnuarmemb - xtools -supported: - - gpio -testing: - ignore_tags: - - drivers - - bluetooth - - net - - timer -vendor: arm \ No newline at end of file +vendor: arm diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig index c5532677b2168b..189b5ca59543a5 100644 --- a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig +++ b/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig @@ -6,9 +6,6 @@ CONFIG_ARM_TRUSTZONE_M=n CONFIG_ARM_MPU=y CONFIG_QEMU_ICOUNT_SHIFT=7 -# GPIOs -CONFIG_GPIO=y - # Serial CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y diff --git a/soc/tsi/skyp_v1/Kconfig b/soc/tsi/skyp_v1/Kconfig index 8e4d1c78848f93..d1f0d6e1d0d642 100644 --- a/soc/tsi/skyp_v1/Kconfig +++ b/soc/tsi/skyp_v1/Kconfig @@ -3,10 +3,9 @@ config SOC_SERIES_SKYP_V1 select ARM - select GPIO_MMIO32 if GPIO config SOC_SERIES_SKYP_V1 - select CPU_CORTEX_M55 + select CPU_CORTEX_M85 select CPU_HAS_ARM_SAU select CPU_HAS_ARM_MPU select CPU_HAS_FPU diff --git a/soc/tsi/skyp_v1/soc.c b/soc/tsi/skyp_v1/soc.c index 84f15dfebabe2c..1db1d7a4e6de66 100644 --- a/soc/tsi/skyp_v1/soc.c +++ b/soc/tsi/skyp_v1/soc.c @@ -19,6 +19,5 @@ /* We expect there to be 3 arm,mps3-fpgaio-gpio devices: * led0, button, and misc */ -FPGAIO_INIT(0); -FPGAIO_INIT(1); + FPGAIO_INIT(2); From bfa180b3d88b5afc7013920109aaa8d7e4c41dfb Mon Sep 17 00:00:00 2001 From: Dinesh Reddy Date: Mon, 22 Jul 2024 03:32:24 -0700 Subject: [PATCH 20/26] Added m85 to board.yml and soc.yml; renamed board name - ek_tsi & soc - skyp & CPUcore : m85 and modified file names accordingly --- boards/tsi/{ek_tsi_skyp => ek_tsi}/Kconfig | 2 +- boards/tsi/{ek_tsi_skyp => ek_tsi}/Kconfig.defconfig | 2 +- boards/tsi/ek_tsi/Kconfig.ek_tsi | 8 ++++++++ boards/tsi/ek_tsi/board.yml | 10 ++++++++++ .../ek_tsi_skyp_m85-common.dtsi} | 0 .../ek_tsi_skyp.dts => ek_tsi/ek_tsi_skyp_m85.dts} | 2 +- .../ek_tsi_skyp.yaml => ek_tsi/ek_tsi_skyp_m85.yaml} | 2 +- .../ek_tsi_skyp_m85_defconfig} | 0 boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp | 5 ----- boards/tsi/ek_tsi_skyp/board.yml | 5 ----- soc/tsi/skyp_v1/Kconfig | 1 + soc/tsi/skyp_v1/Kconfig.soc | 6 ++++++ soc/tsi/soc.yml | 2 ++ 13 files changed, 31 insertions(+), 14 deletions(-) rename boards/tsi/{ek_tsi_skyp => ek_tsi}/Kconfig (77%) rename boards/tsi/{ek_tsi_skyp => ek_tsi}/Kconfig.defconfig (95%) create mode 100644 boards/tsi/ek_tsi/Kconfig.ek_tsi create mode 100644 boards/tsi/ek_tsi/board.yml rename boards/tsi/{ek_tsi_skyp/ek_tsi_skyp-common.dtsi => ek_tsi/ek_tsi_skyp_m85-common.dtsi} (100%) rename boards/tsi/{ek_tsi_skyp/ek_tsi_skyp.dts => ek_tsi/ek_tsi_skyp_m85.dts} (98%) rename boards/tsi/{ek_tsi_skyp/ek_tsi_skyp.yaml => ek_tsi/ek_tsi_skyp_m85.yaml} (82%) rename boards/tsi/{ek_tsi_skyp/ek_tsi_skyp_defconfig => ek_tsi/ek_tsi_skyp_m85_defconfig} (100%) delete mode 100644 boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp delete mode 100644 boards/tsi/ek_tsi_skyp/board.yml diff --git a/boards/tsi/ek_tsi_skyp/Kconfig b/boards/tsi/ek_tsi/Kconfig similarity index 77% rename from boards/tsi/ek_tsi_skyp/Kconfig rename to boards/tsi/ek_tsi/Kconfig index be12cd689ad905..186a43efc01df4 100644 --- a/boards/tsi/ek_tsi_skyp/Kconfig +++ b/boards/tsi/ek_tsi/Kconfig @@ -1,5 +1,5 @@ # Copyright (c) 2024 TSI # SPDX-License-Identifier: Apache-2.0 -config BOARD_EK_TSI_SKYP +config BOARD_EK_TSI select QEMU_TARGET diff --git a/boards/tsi/ek_tsi_skyp/Kconfig.defconfig b/boards/tsi/ek_tsi/Kconfig.defconfig similarity index 95% rename from boards/tsi/ek_tsi_skyp/Kconfig.defconfig rename to boards/tsi/ek_tsi/Kconfig.defconfig index 6bb1b8dd210277..be23107571ffb4 100644 --- a/boards/tsi/ek_tsi_skyp/Kconfig.defconfig +++ b/boards/tsi/ek_tsi/Kconfig.defconfig @@ -1,7 +1,7 @@ # Copyright (c) 2024 TSI # SPDX-License-Identifier: Apache-2.0 -if BOARD_EK_TSI_SKYP +if BOARD_EK_TSI # MPU-based null-pointer dereferencing detection cannot # be applied as the (0x0 - 0x400) is unmapped but QEMU diff --git a/boards/tsi/ek_tsi/Kconfig.ek_tsi b/boards/tsi/ek_tsi/Kconfig.ek_tsi new file mode 100644 index 00000000000000..99fdbdbacdfdcd --- /dev/null +++ b/boards/tsi/ek_tsi/Kconfig.ek_tsi @@ -0,0 +1,8 @@ +# Copyright (c) 2024 TSI +# SPDX-License-Identifier: Apache-2.0 + +#config BOARD_EK_TSI +# select SOC_SKYP_M85 if BOARD_EK_TSI_SKYP_M85 + +config BOARD_EK_TSI + select SOC_SKYP \ No newline at end of file diff --git a/boards/tsi/ek_tsi/board.yml b/boards/tsi/ek_tsi/board.yml new file mode 100644 index 00000000000000..7772f1f6c66b76 --- /dev/null +++ b/boards/tsi/ek_tsi/board.yml @@ -0,0 +1,10 @@ +board: + name: ek_tsi + vendor: Tsavorite + socs: + - name: skyp + variants: + - name: m85 + cpucluster: m85 + # - name: xtensa + # cpucluster: xtensa diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi b/boards/tsi/ek_tsi/ek_tsi_skyp_m85-common.dtsi similarity index 100% rename from boards/tsi/ek_tsi_skyp/ek_tsi_skyp-common.dtsi rename to boards/tsi/ek_tsi/ek_tsi_skyp_m85-common.dtsi diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts b/boards/tsi/ek_tsi/ek_tsi_skyp_m85.dts similarity index 98% rename from boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts rename to boards/tsi/ek_tsi/ek_tsi_skyp_m85.dts index e755d2743e52d6..1068f952990c04 100644 --- a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.dts +++ b/boards/tsi/ek_tsi/ek_tsi_skyp_m85.dts @@ -108,7 +108,7 @@ #size-cells = <1>; ranges = <0x0 0x81000000 0x1effffff>; - #include "ek_tsi_skyp-common.dtsi" + #include "ek_tsi_skyp_m85-common.dtsi" }; }; }; diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml b/boards/tsi/ek_tsi/ek_tsi_skyp_m85.yaml similarity index 82% rename from boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml rename to boards/tsi/ek_tsi/ek_tsi_skyp_m85.yaml index 504ff604822e2e..210f64860cccb2 100644 --- a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp.yaml +++ b/boards/tsi/ek_tsi/ek_tsi_skyp_m85.yaml @@ -1,4 +1,4 @@ -identifier: ek_tsi_skyp +identifier: ek_tsi/skyp/m85 name: TSI sky-p type: mcu arch: arm diff --git a/boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig b/boards/tsi/ek_tsi/ek_tsi_skyp_m85_defconfig similarity index 100% rename from boards/tsi/ek_tsi_skyp/ek_tsi_skyp_defconfig rename to boards/tsi/ek_tsi/ek_tsi_skyp_m85_defconfig diff --git a/boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp b/boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp deleted file mode 100644 index 20ccfbee9e0dd7..00000000000000 --- a/boards/tsi/ek_tsi_skyp/Kconfig.ek_tsi_skyp +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) 2024 TSI -# SPDX-License-Identifier: Apache-2.0 - -config BOARD_EK_TSI_SKYP - select SOC_SKYP diff --git a/boards/tsi/ek_tsi_skyp/board.yml b/boards/tsi/ek_tsi_skyp/board.yml deleted file mode 100644 index 746cfa689a0dc0..00000000000000 --- a/boards/tsi/ek_tsi_skyp/board.yml +++ /dev/null @@ -1,5 +0,0 @@ -board: - name: ek_tsi_skyp - vendor: Tsavorite - socs: - - name: skyp diff --git a/soc/tsi/skyp_v1/Kconfig b/soc/tsi/skyp_v1/Kconfig index d1f0d6e1d0d642..6924e1c468f23e 100644 --- a/soc/tsi/skyp_v1/Kconfig +++ b/soc/tsi/skyp_v1/Kconfig @@ -13,6 +13,7 @@ config SOC_SERIES_SKYP_V1 select ARMV8_1_M_MVEI select ARMV8_1_M_MVEF select ARMV8_1_M_PMU + config ARMV8_1_M_PMU_EVENTCNT int diff --git a/soc/tsi/skyp_v1/Kconfig.soc b/soc/tsi/skyp_v1/Kconfig.soc index eac2d93fd0aeca..339debc40774a5 100644 --- a/soc/tsi/skyp_v1/Kconfig.soc +++ b/soc/tsi/skyp_v1/Kconfig.soc @@ -14,6 +14,12 @@ config SOC_SKYP help skyp +config SOC_SKYP_M85 + bool + select SOC_SKYP + help + skyp_m85 + config SOC_SERIES default "skyp_v1" if SOC_SERIES_SKYP_V1 diff --git a/soc/tsi/soc.yml b/soc/tsi/soc.yml index 3e6bfde87d7886..8778b1238a87f1 100644 --- a/soc/tsi/soc.yml +++ b/soc/tsi/soc.yml @@ -4,3 +4,5 @@ family: - name: skyp_v1 socs: - name: skyp + cpuclusters: + - name: m85 From 0e8cc1f9b277b976bba0ad311eb468d0430a808c Mon Sep 17 00:00:00 2001 From: Ganesh Kethamalla Date: Tue, 30 Jul 2024 21:03:05 +0530 Subject: [PATCH 21/26] Tsi m85 v1 (#2) * TSI: board name changed -ek_tsi to tsi board name changed -comilance erros removed from some files Signed-off-by: Ganesh Kethamalla * TSI Board: compliance errors removed and and board variant name changed -board variant name changed to m85 to cortex-m85 -white spaces and extra lines removed Signed-off-by: Ganesh Kethamalla * TSI Board: old board file removed from directory -created tsi new directory, instead of using ek_tsi. that's removed old one. Signed-off-by: Ganesh Kethamalla * added new cpu configuration adsp * Modified TXE address for DV environment testing * @FIR-13: Create a new target "west build -p always -b tsi/skyp/txe samples/hello_world/" and remove the old target "west build -p always -b tsi/mimx8ml8/adsp samples/hello_world/" there are still references to using mimx8m tool chain and drivers but we will revisit these later, I tried to make the change but gave up as it requires defining all of SOC structure will rely on Ganesh to address these items. * @FIR-13: Fix the lint and compliance warnings * @FIR-13: Fixed compliance warning * @FIR-13: Added tsi - Tsavorite Scalable Intelligence as a vendor * @FIR-13: Fixed the sorting issue of vendors list * removed unused symbol BOARD_TSI_MIMX8ML8_ADSP * Synced for new target tsi/skyp/m85 that removed the ek_ prefix * Removed white-spaces in main.c and Readme.rst * renamed folder boards/tsi/tsi to boards/tsi/skyp * Removed compilance check warnings --------- Signed-off-by: Ganesh Kethamalla Co-authored-by: Dinesh Reddy Co-authored-by: Ashish Trivedi Co-authored-by: Meera Mankali --- boards/tsi/ek_tsi/Kconfig.ek_tsi | 8 ---- boards/tsi/ek_tsi/board.yml | 10 ---- boards/tsi/{ek_tsi => skyp}/Kconfig | 4 +- boards/tsi/{ek_tsi => skyp}/Kconfig.defconfig | 2 +- boards/tsi/skyp/Kconfig.tsi | 7 +++ boards/tsi/skyp/board.yml | 10 ++++ .../tsi_skyp_m85-common.dtsi} | 1 - .../tsi_skyp_m85.dts} | 37 +++++---------- .../tsi_skyp_m85.yaml} | 2 +- .../tsi_skyp_m85_defconfig} | 0 boards/tsi/skyp/tsi_skyp_txe.dts | 47 +++++++++++++++++++ boards/tsi/skyp/tsi_skyp_txe.yaml | 16 +++++++ boards/tsi/skyp/tsi_skyp_txe_defconfig | 26 ++++++++++ dts/bindings/vendor-prefixes.txt | 1 + soc/nxp/imx/imx8m/adsp/memory.h | 45 ++++++++++++------ soc/tsi/skyp_v1/Kconfig | 1 - soc/tsi/skyp_v1/Kconfig.defconfig | 2 +- soc/tsi/skyp_v1/Kconfig.soc | 2 +- soc/tsi/soc.yml | 3 +- tsi_app/m85/CMakeLists.txt | 8 ++++ tsi_app/m85/README.rst | 30 ++++++++++++ tsi_app/m85/overlay_deferred.conf | 9 ++++ tsi_app/m85/overlay_immediate.conf | 1 + tsi_app/m85/prj.conf | 19 ++++++++ tsi_app/m85/src/main.c | 30 ++++++++++++ tsi_app/m85/tsi_m85.yaml | 17 +++++++ 26 files changed, 271 insertions(+), 67 deletions(-) delete mode 100644 boards/tsi/ek_tsi/Kconfig.ek_tsi delete mode 100644 boards/tsi/ek_tsi/board.yml rename boards/tsi/{ek_tsi => skyp}/Kconfig (60%) rename boards/tsi/{ek_tsi => skyp}/Kconfig.defconfig (96%) create mode 100644 boards/tsi/skyp/Kconfig.tsi create mode 100644 boards/tsi/skyp/board.yml rename boards/tsi/{ek_tsi/ek_tsi_skyp_m85-common.dtsi => skyp/tsi_skyp_m85-common.dtsi} (99%) rename boards/tsi/{ek_tsi/ek_tsi_skyp_m85.dts => skyp/tsi_skyp_m85.dts} (72%) rename boards/tsi/{ek_tsi/ek_tsi_skyp_m85.yaml => skyp/tsi_skyp_m85.yaml} (82%) rename boards/tsi/{ek_tsi/ek_tsi_skyp_m85_defconfig => skyp/tsi_skyp_m85_defconfig} (100%) create mode 100644 boards/tsi/skyp/tsi_skyp_txe.dts create mode 100644 boards/tsi/skyp/tsi_skyp_txe.yaml create mode 100644 boards/tsi/skyp/tsi_skyp_txe_defconfig create mode 100644 tsi_app/m85/CMakeLists.txt create mode 100644 tsi_app/m85/README.rst create mode 100644 tsi_app/m85/overlay_deferred.conf create mode 100644 tsi_app/m85/overlay_immediate.conf create mode 100644 tsi_app/m85/prj.conf create mode 100644 tsi_app/m85/src/main.c create mode 100644 tsi_app/m85/tsi_m85.yaml diff --git a/boards/tsi/ek_tsi/Kconfig.ek_tsi b/boards/tsi/ek_tsi/Kconfig.ek_tsi deleted file mode 100644 index 99fdbdbacdfdcd..00000000000000 --- a/boards/tsi/ek_tsi/Kconfig.ek_tsi +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2024 TSI -# SPDX-License-Identifier: Apache-2.0 - -#config BOARD_EK_TSI -# select SOC_SKYP_M85 if BOARD_EK_TSI_SKYP_M85 - -config BOARD_EK_TSI - select SOC_SKYP \ No newline at end of file diff --git a/boards/tsi/ek_tsi/board.yml b/boards/tsi/ek_tsi/board.yml deleted file mode 100644 index 7772f1f6c66b76..00000000000000 --- a/boards/tsi/ek_tsi/board.yml +++ /dev/null @@ -1,10 +0,0 @@ -board: - name: ek_tsi - vendor: Tsavorite - socs: - - name: skyp - variants: - - name: m85 - cpucluster: m85 - # - name: xtensa - # cpucluster: xtensa diff --git a/boards/tsi/ek_tsi/Kconfig b/boards/tsi/skyp/Kconfig similarity index 60% rename from boards/tsi/ek_tsi/Kconfig rename to boards/tsi/skyp/Kconfig index 186a43efc01df4..37f53d4116b656 100644 --- a/boards/tsi/ek_tsi/Kconfig +++ b/boards/tsi/skyp/Kconfig @@ -1,5 +1,5 @@ # Copyright (c) 2024 TSI # SPDX-License-Identifier: Apache-2.0 -config BOARD_EK_TSI - select QEMU_TARGET +# config BOARD_TSI +# select QEMU_TARGET diff --git a/boards/tsi/ek_tsi/Kconfig.defconfig b/boards/tsi/skyp/Kconfig.defconfig similarity index 96% rename from boards/tsi/ek_tsi/Kconfig.defconfig rename to boards/tsi/skyp/Kconfig.defconfig index be23107571ffb4..5722cdf7d507dc 100644 --- a/boards/tsi/ek_tsi/Kconfig.defconfig +++ b/boards/tsi/skyp/Kconfig.defconfig @@ -1,7 +1,7 @@ # Copyright (c) 2024 TSI # SPDX-License-Identifier: Apache-2.0 -if BOARD_EK_TSI +if BOARD_TSI # MPU-based null-pointer dereferencing detection cannot # be applied as the (0x0 - 0x400) is unmapped but QEMU diff --git a/boards/tsi/skyp/Kconfig.tsi b/boards/tsi/skyp/Kconfig.tsi new file mode 100644 index 00000000000000..eef039ebf52c1d --- /dev/null +++ b/boards/tsi/skyp/Kconfig.tsi @@ -0,0 +1,7 @@ +# Copyright (c) 2024 TSI +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_TSI + select SOC_PART_NUMBER_MIMX8ML8DVNLZ + select SOC_SKYP_M85 if BOARD_TSI_SKYP_M85 + select SOC_MIMX8ML8_ADSP if BOARD_TSI_SKYP_TXE diff --git a/boards/tsi/skyp/board.yml b/boards/tsi/skyp/board.yml new file mode 100644 index 00000000000000..562658f4b48567 --- /dev/null +++ b/boards/tsi/skyp/board.yml @@ -0,0 +1,10 @@ +board: + name: tsi + vendor: tsi + socs: + - name: skyp + variants: + - name: tensilica + cpucluster: txe + - name: cortex-m85 + cpucluster: m85 diff --git a/boards/tsi/ek_tsi/ek_tsi_skyp_m85-common.dtsi b/boards/tsi/skyp/tsi_skyp_m85-common.dtsi similarity index 99% rename from boards/tsi/ek_tsi/ek_tsi_skyp_m85-common.dtsi rename to boards/tsi/skyp/tsi_skyp_m85-common.dtsi index fd7def4eeb3406..ce567c12ce20f2 100644 --- a/boards/tsi/ek_tsi/ek_tsi_skyp_m85-common.dtsi +++ b/boards/tsi/skyp/tsi_skyp_m85-common.dtsi @@ -18,4 +18,3 @@ uart0: uart@14001000 { clocks = <&sysclk>; current-speed = <115200>; }; - diff --git a/boards/tsi/ek_tsi/ek_tsi_skyp_m85.dts b/boards/tsi/skyp/tsi_skyp_m85.dts similarity index 72% rename from boards/tsi/ek_tsi/ek_tsi_skyp_m85.dts rename to boards/tsi/skyp/tsi_skyp_m85.dts index 1068f952990c04..cac5f2837c7a0b 100644 --- a/boards/tsi/ek_tsi/ek_tsi_skyp_m85.dts +++ b/boards/tsi/skyp/tsi_skyp_m85.dts @@ -19,22 +19,16 @@ chosen { zephyr,console = &jtag_uart; - /* - zephyr,console = &uart0; - */ zephyr,shell-uart = &jtag_uart; - /* - zephyr,shell-uart = &uart0; - */ zephyr,sram = &sram; zephyr,flash = &sram0; }; - jtag_uart: uart@95003000 { - compatible = "altr,jtag-uart"; - reg = <0x95003000 0x8>; - status = "enabled"; - }; + jtag_uart: uart@95003000 { + compatible = "altr,jtag-uart"; + reg = <0x95003000 0x8>; + status = "enabled"; + }; cpus { #address-cells = <1>; @@ -57,11 +51,11 @@ /* We utilize the secure addresses, if you subtract 0x10000000 * you'll get the non-secure alias */ - itcm: itcm@4000 { /* alias @ 0x4000 */ - compatible = "zephyr,memory-region"; - reg = <0x4000 DT_SIZE_K(16)>; - zephyr,memory-region = "ITCM"; - }; + itcm: itcm@4000 { /* alias @ 0x4000 */ + compatible = "zephyr,memory-region"; + reg = <0x4000 DT_SIZE_K(16)>; + zephyr,memory-region = "ITCM"; + }; sram0: sram0@60000000 { /* alias @ 0x60000000 */ compatible = "zephyr,memory-region"; @@ -91,14 +85,7 @@ ddr4: memory@60700000 { device_type = "memory"; compatible = "zephyr,memory-region"; - reg = <0x60700000 DT_SIZE_M(1) - /*0x70000000 DT_SIZE_M(256) - 0x80000000 DT_SIZE_M(256) - 0x90000000 DT_SIZE_M(256) - 0xa0000000 DT_SIZE_M(256) - 0xb0000000 DT_SIZE_M(256) - 0xc0000000 DT_SIZE_M(256) - 0xd0000000 DT_SIZE_M(256)*/>; + reg = <0x60700000 DT_SIZE_M(1)>; zephyr,memory-region = "DDR4"; }; @@ -108,7 +95,7 @@ #size-cells = <1>; ranges = <0x0 0x81000000 0x1effffff>; - #include "ek_tsi_skyp_m85-common.dtsi" + #include "tsi_skyp_m85-common.dtsi" }; }; }; diff --git a/boards/tsi/ek_tsi/ek_tsi_skyp_m85.yaml b/boards/tsi/skyp/tsi_skyp_m85.yaml similarity index 82% rename from boards/tsi/ek_tsi/ek_tsi_skyp_m85.yaml rename to boards/tsi/skyp/tsi_skyp_m85.yaml index 210f64860cccb2..47b1d6abbd37af 100644 --- a/boards/tsi/ek_tsi/ek_tsi_skyp_m85.yaml +++ b/boards/tsi/skyp/tsi_skyp_m85.yaml @@ -1,4 +1,4 @@ -identifier: ek_tsi/skyp/m85 +identifier: tsi/skyp/m85 name: TSI sky-p type: mcu arch: arm diff --git a/boards/tsi/ek_tsi/ek_tsi_skyp_m85_defconfig b/boards/tsi/skyp/tsi_skyp_m85_defconfig similarity index 100% rename from boards/tsi/ek_tsi/ek_tsi_skyp_m85_defconfig rename to boards/tsi/skyp/tsi_skyp_m85_defconfig diff --git a/boards/tsi/skyp/tsi_skyp_txe.dts b/boards/tsi/skyp/tsi_skyp_txe.dts new file mode 100644 index 00000000000000..1035391c25822a --- /dev/null +++ b/boards/tsi/skyp/tsi_skyp_txe.dts @@ -0,0 +1,47 @@ +/* + * Copyright 2021, 2023, 2024 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include + +/ { + model = "NXP i.MX 8MPLUS Audio DSP"; + compatible = "nxp"; + + chosen { + //zephyr,sram = &sram0; + zephyr,sram = &sram_txe; + + zephyr,console = &uart4; + zephyr,shell-uart = &uart4; + }; + sram_txe: memory@60040000 { + device_type = "memory"; + compatible = "mmio-sram"; + reg = <0x60040000 DT_SIZE_K(512)>; + }; +}; + +&pinctrl { + uart4_default: uart4_default { + group0 { + pinmux = <&iomuxc_uart4_rxd_uart_rx_uart4_rx>, + <&iomuxc_uart4_txd_uart_tx_uart4_tx>; + bias-pull-up; + slew-rate = "slow"; + drive-strength = "x1"; + }; + }; +}; + +&uart4 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart4_default>; + pinctrl-names = "default"; +}; diff --git a/boards/tsi/skyp/tsi_skyp_txe.yaml b/boards/tsi/skyp/tsi_skyp_txe.yaml new file mode 100644 index 00000000000000..0a5a522caa8c83 --- /dev/null +++ b/boards/tsi/skyp/tsi_skyp_txe.yaml @@ -0,0 +1,16 @@ +identifier: tsi/skyp/txe +name: TSI DSP +type: mcu +arch: xtensa +toolchain: + - xcc + - xt-clang + - zephyr +supported: + - uart +testing: + ignore_tags: + - net + - bluetooth + - mcumgr +vendor: nxp diff --git a/boards/tsi/skyp/tsi_skyp_txe_defconfig b/boards/tsi/skyp/tsi_skyp_txe_defconfig new file mode 100644 index 00000000000000..7395655e0e7bae --- /dev/null +++ b/boards/tsi/skyp/tsi_skyp_txe_defconfig @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: Apache-2.0 + +# size of stack for initialization and main thread +CONFIG_MAIN_STACK_SIZE=3072 + +# enable logger +CONFIG_LOG=y + +# no need for a "raw" binary zephyr/zephyr.bin in the build directory +CONFIG_BUILD_OUTPUT_BIN=y +CONFIG_BUILD_OUTPUT_HEX=y + +# enable uart driver +CONFIG_SERIAL=y + +# clock configuration +CONFIG_CLOCK_CONTROL=y + +# console (remote proc console by default) +CONFIG_CONSOLE=y + +# uart console (overrides remote proc console) +CONFIG_UART_CONSOLE=y + +# enable pin controller +CONFIG_PINCTRL=y diff --git a/dts/bindings/vendor-prefixes.txt b/dts/bindings/vendor-prefixes.txt index edf9c4ae82583b..c790094b0b567a 100644 --- a/dts/bindings/vendor-prefixes.txt +++ b/dts/bindings/vendor-prefixes.txt @@ -683,6 +683,7 @@ tronfy Tronfy tronsmart Tronsmart truly Truly Semiconductors Limited tsd Theobroma Systems Design und Consulting GmbH +tsi Tsavorite Scalable Intelligence tyan Tyan Computer Corporation u-blox u-blox u-boot U-Boot bootloader diff --git a/soc/nxp/imx/imx8m/adsp/memory.h b/soc/nxp/imx/imx8m/adsp/memory.h index e882f49a43512d..fcaaa936e604cc 100644 --- a/soc/nxp/imx/imx8m/adsp/memory.h +++ b/soc/nxp/imx/imx8m/adsp/memory.h @@ -14,14 +14,21 @@ #define IRAM_RESERVE_HEADER_SPACE 0x400 -#define IRAM_BASE 0x3B6F8000 +/*#define IRAM_BASE 0x3B6F8000*/ +#define IRAM_BASE 0x60600000 +#define IRAM_SIZE 0x800 + #define IRAM_SIZE 0x800 -#define SDRAM0_BASE 0x92400000 -#define SDRAM0_SIZE 0x800000 +/*#define SDRAM0_BASE 0x92400000*/ +/*#define SDRAM0_SIZE 0x800000*/ +#define SDRAM0_BASE 0x60601000 +#define SDRAM0_SIZE 0xFF000 -#define SDRAM1_BASE 0x92C00000 -#define SDRAM1_SIZE 0x800000 +/*#define SDRAM1_BASE 0x92C00000*/ +/*#define SDRAM1_SIZE 0x800000*/ +#define SDRAM1_BASE 0x60700000 +#define SDRAM1_SIZE 0x100000 /* The reset vector address in SRAM and its size */ #define MEM_RESET_TEXT_SIZE 0x2E0 @@ -36,7 +43,8 @@ /* * EXCEPTIONS and VECTORS */ -#define XCHAL_RESET_VECTOR0_PADDR_IRAM 0x3B6F8000 +/*#define XCHAL_RESET_VECTOR0_PADDR_IRAM 0x3B6F8000*/ +#define XCHAL_RESET_VECTOR0_PADDR_IRAM 0x6060000 /* Vector and literal sizes */ #define MEM_VECT_LIT_SIZE 0x4 @@ -78,20 +86,27 @@ #define IDT_SIZE 0x2000 /* physical DSP addresses */ -#define IRAM_BASE 0x3B6F8000 +/*#define IRAM_BASE 0x3B6F8000*/ +#define IRAM_BASE 0x60600000 #define IRAM_SIZE 0x800 -#define DRAM0_BASE 0x3B6E8000 -#define DRAM0_SIZE 0x8000 +/*#define DRAM0_BASE 0x3B6E8000*/ +#define DRAM0_BASE 0x70800000 +#define DRAM0_SIZE 0x8000 -#define DRAM1_BASE 0x3B6F0000 -#define DRAM1_SIZE 0x8000 +/*#define DRAM1_BASE 0x3B6F0000*/ +#define DRAM1_BASE 0x80608000 +#define DRAM1_SIZE 0x8000 -#define SDRAM0_BASE 0x92400000 -#define SDRAM0_SIZE 0x800000 +/*#define SDRAM0_BASE 0x92400000*/ +#define SDRAM0_BASE 0x60601000 +/*#define SDRAM0_SIZE 0x800000*/ +#define SDRAM0_SIZE 0xFF000 -#define SDRAM1_BASE 0x92C00000 -#define SDRAM1_SIZE 0x800000 +/*#define SDRAM1_BASE 0x92C00000*/ +#define SDRAM1_BASE 0x60700000 +/*#define SDRAM1_SIZE 0x800000*/ +#define SDRAM1_SIZE 0x100000 #define XSHAL_MU2_SIDEB_BYPASS_PADDR 0x30E70000 #define MU_BASE XSHAL_MU2_SIDEB_BYPASS_PADDR diff --git a/soc/tsi/skyp_v1/Kconfig b/soc/tsi/skyp_v1/Kconfig index 6924e1c468f23e..d1f0d6e1d0d642 100644 --- a/soc/tsi/skyp_v1/Kconfig +++ b/soc/tsi/skyp_v1/Kconfig @@ -13,7 +13,6 @@ config SOC_SERIES_SKYP_V1 select ARMV8_1_M_MVEI select ARMV8_1_M_MVEF select ARMV8_1_M_PMU - config ARMV8_1_M_PMU_EVENTCNT int diff --git a/soc/tsi/skyp_v1/Kconfig.defconfig b/soc/tsi/skyp_v1/Kconfig.defconfig index 599370e566cb6e..46c688532f8cd8 100644 --- a/soc/tsi/skyp_v1/Kconfig.defconfig +++ b/soc/tsi/skyp_v1/Kconfig.defconfig @@ -8,5 +8,5 @@ config SYS_CLOCK_HW_CYCLES_PER_SEC config NUM_IRQS default 128 - + endif # SOC_SERIES_SKYP_V1 diff --git a/soc/tsi/skyp_v1/Kconfig.soc b/soc/tsi/skyp_v1/Kconfig.soc index 339debc40774a5..20b9e7a6927512 100644 --- a/soc/tsi/skyp_v1/Kconfig.soc +++ b/soc/tsi/skyp_v1/Kconfig.soc @@ -18,7 +18,7 @@ config SOC_SKYP_M85 bool select SOC_SKYP help - skyp_m85 + skyp_m85 config SOC_SERIES default "skyp_v1" if SOC_SERIES_SKYP_V1 diff --git a/soc/tsi/soc.yml b/soc/tsi/soc.yml index 8778b1238a87f1..a17404b1b2b065 100644 --- a/soc/tsi/soc.yml +++ b/soc/tsi/soc.yml @@ -5,4 +5,5 @@ family: socs: - name: skyp cpuclusters: - - name: m85 + - name: m85 + - name: txe diff --git a/tsi_app/m85/CMakeLists.txt b/tsi_app/m85/CMakeLists.txt new file mode 100644 index 00000000000000..e3a4fe1c954ffa --- /dev/null +++ b/tsi_app/m85/CMakeLists.txt @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(m85) + +target_sources(app PRIVATE src/main.c) diff --git a/tsi_app/m85/README.rst b/tsi_app/m85/README.rst new file mode 100644 index 00000000000000..a939dcf2245046 --- /dev/null +++ b/tsi_app/m85/README.rst @@ -0,0 +1,30 @@ +.. _m85: + +TSI Banner +########### + +Overview +******** + +This is the core TSI M85 Zephyr platform application startup code. It prints TSI Banner to the console, enables logging functionality so that developers can log messages to console at different levels of severity such as Info, Warning, Error & Debug. It also enables the shell functionality. + +Building and Running +******************** + +This application can be built as follows: + +.. zephyr-app-commands:: + :zephyr-app: tsi_m85 + :host-os: unix + :board: tsi/skyp/m85 + :goals: run + :compact: + + +Output +============= + +.. code-block:: console +***** !! WELCOME TO TSAVORITE SCALABLE INTELLIGENCE !! ***** +[00:00:00.010,000] tsi_m85: Test Platform: tsi/skyp/m85 +[00:00:00.020,000] tsi_m85: Testing on FPGA; Multi module init TBD diff --git a/tsi_app/m85/overlay_deferred.conf b/tsi_app/m85/overlay_deferred.conf new file mode 100644 index 00000000000000..b3c4a878eef7e2 --- /dev/null +++ b/tsi_app/m85/overlay_deferred.conf @@ -0,0 +1,9 @@ +CONFIG_LOG_MODE_IMMEDIATE=n +CONFIG_LOG_MODE_DEFERRED=y +CONFIG_LOG_BUFFER_SIZE=1024 +CONFIG_LOG_PROCESS_THREAD=y +CONFIG_LOG_PROCESS_THREAD_SLEEP_MS=100 +CONFIG_LOG_PROCESS_TRIGGER_THRESHOLD=2 +CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=4096 +CONFIG_LOG_BLOCK_IN_THREAD=y +CONFIG_LOG_BACKEND_UART=y diff --git a/tsi_app/m85/overlay_immediate.conf b/tsi_app/m85/overlay_immediate.conf new file mode 100644 index 00000000000000..e386bfcd2ccc1f --- /dev/null +++ b/tsi_app/m85/overlay_immediate.conf @@ -0,0 +1 @@ +CONFIG_LOG_BACKEND_UART=y diff --git a/tsi_app/m85/prj.conf b/tsi_app/m85/prj.conf new file mode 100644 index 00000000000000..a4f24cd3c70aa0 --- /dev/null +++ b/tsi_app/m85/prj.conf @@ -0,0 +1,19 @@ +CONFIG_LOG=y +CONFIG_CONSOLE=y +CONFIG_LOG_PRINTK=y +CONFIG_UART_CONSOLE=y +CONFIG_BOOT_BANNER=n +CONFIG_SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN=n +CONFIG_SHELL_BACKEND_SERIAL_RX_POLL_PERIOD=1 +CONFIG_SHELL=n +CONFIG_LOG_BACKEND_UART=y +CONFIG_LOG_DEFAULT_LEVEL=4 + +# Use immediate mode so all messages are being +# printed. Under deferred mode, there may be +# dropped messages as there are quite a number of +# messages to be printed. +CONFIG_LOG_MODE_IMMEDIATE=y + +# Need bigger stack for immediate mode +CONFIG_MAIN_STACK_SIZE=4096 diff --git a/tsi_app/m85/src/main.c b/tsi_app/m85/src/main.c new file mode 100644 index 00000000000000..6fbe2e9981aee9 --- /dev/null +++ b/tsi_app/m85/src/main.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2012-2014 Wind River Systems, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include +#include +#include + +#define PRINT_TSI_BOOT_BANNER() printk("***!!WELCOME TO TSAVORITE SCALABLE INTELLIGENCe!!***\n") +#define LOG_MODULE_NAME tsi_m85_ +LOG_MODULE_REGISTER(LOG_MODULE_NAME); + +int main(void) +{ + + /* TSI banner */ + PRINT_TSI_BOOT_BANNER(); + LOG_INF("Test Platform: %s", CONFIG_BOARD_TARGET); + + LOG_WRN("Testing on FPGA; Multi module init TBD"); + LOG_DBG("Debugging - tsi_app module"); + + return 0; +} diff --git a/tsi_app/m85/tsi_m85.yaml b/tsi_app/m85/tsi_m85.yaml new file mode 100644 index 00000000000000..d64600c6e89081 --- /dev/null +++ b/tsi_app/m85/tsi_m85.yaml @@ -0,0 +1,17 @@ +sample: + description: TSI Core platform application on M85 + name: tsi_m85 +common: + tags: introduction + integration_platforms: + - tsi_skyp_m85 + harness: console + harness_config: + type: one_line + regex: + -***** !! WELCOME TO TSAVORITE SCALABLE INTELLIGENCE !! ***** + - [Time stamp] tsi_m85: Test Platform: ek_tsi/skyp/m85 + - [Time stamp] tsi_m85: Testing on FPGA; Multi module init TBD +tests: + sample.m85: + tags: apps From 3c4d731a8ce8a7325ce6d87fccbd0e5659dd18a8 Mon Sep 17 00:00:00 2001 From: atrivedi-tsavoritesi Date: Thu, 15 Aug 2024 15:47:12 -0700 Subject: [PATCH 22/26] @FIR-65: tsvbootloader changes (#5) --- CMakeLists.txt | 4 +- scripts/build/tsvbootloader.hex | 4050 +++++++++++++++---------------- 2 files changed, 2027 insertions(+), 2027 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5d5b370153d60..1224706a68abe0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2050,9 +2050,9 @@ set(TSVIMAGELOADER_NAME IMAGE0_testfile.hex) add_custom_command( OUTPUT ${STRIPPED_KERNEL_HEX_NAME} COMMAND ${TAIL_EXECUTABLE} -n +2 ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} >> ${PROJECT_BINARY_DIR}/${STRIPPED_HEX_NAME} - COMMAND ${HEAD_EXECUTABLE} -n +65 ${ZEPHYR_BASE}/${TSVBOOTLOADER_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} + COMMAND ${HEAD_EXECUTABLE} -n +48 ${ZEPHYR_BASE}/${TSVBOOTLOADER_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} COMMAND ${HEAD_EXECUTABLE} -n +1 ${PROJECT_BINARY_DIR}/${STRIPPED_HEX_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} - COMMAND ${TAIL_EXECUTABLE} -n +67 ${ZEPHYR_BASE}/${TSVBOOTLOADER_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} + COMMAND ${TAIL_EXECUTABLE} -n +50 ${ZEPHYR_BASE}/${TSVBOOTLOADER_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} COMMAND ${TAIL_EXECUTABLE} -n +1 ${PROJECT_BINARY_DIR}/${STRIPPED_HEX_NAME} >> ${PROJECT_BINARY_DIR}/${TSVIMAGELOADER_NAME} DEPENDS ${MERGED_KERNEL_HEX_NAME} ) diff --git a/scripts/build/tsvbootloader.hex b/scripts/build/tsvbootloader.hex index 1c3cff9c85d1c6..55e84f75168200 100644 --- a/scripts/build/tsvbootloader.hex +++ b/scripts/build/tsvbootloader.hex @@ -1,5 +1,5 @@ 10000000000000000 -0000000c160001100 +0000000c160000068 00000000000000000 00000000000000000 00000000000000000 @@ -23,2027 +23,2027 @@ 0000000c5000000c5 0000000c5000000c5 0000000c5000000c5 -0f7ffbf3047004802 -0000001ad0000bffd -0f804f0008000f3af -0bd10b510bd1fb51f -0f7ff4611f818f000 -0f000f85af000fff7 -0fff2f7ffb403f806 -0b510f80ff000bc03 -046208000f3af4604 -0bff1f7ff4010e8bd -04603460a47702000 -064adf64d00004770 -0bf0464adf6cd2800 -0040df2c9040df249 -01044f240f816f000 -0bf0060040000f2c8 -05014f64e0000e7fe -0f44168010000f2ce -08f4ff3bf60013140 -0000047708f6ff3bf -00001f2ce0000f24e -060010104f0416801 -08f6ff3bf8f4ff3bf -0f64db51000004770 -064adf6cd280064ad -0f2c9040df249bf04 -0f240ffe5f7ff040d -060040000f2c81044 -0f2c60c01f240bd10 -00000f04f47600c00 -04604460346024601 -04680460746064605 -04684468346824681 -0bf182800480b4686 -0bf182800480a4780 -04c09d024f8df4780 -0429abf6ff7ff47a0 -0f8420b04f851bf3c -000004770d3f80b04 -00000000000000000 -06000024160040000 -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff -0ffffffffffffffff +0f7ffbf3047004812 +0f851bf3c429abffd +0d3f80b04f8420b04 +0f4416801480d4770 +0f04f480b60013140 +0490b480a60010100 +06001490b480b6001 +060010104f04f480b +060010105f04f480a +00000013100004770 +0e000ed98e000ed14 +080000003e000ed9c +09ffffff1e000eda0 +0e000ed94e000edc0 +0460246010000f04f +04606460546044603 +04682468146804607 +04808468646844683 +048074780bf182800 +0f8df4780bf182800 +0f7ff47a04c06d018 +08000f3afbf00bfad +00000000000000000 +06000abc160006600 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 From 72c0ccb55d6270ad2b728ed60a1ffd7dcacb52f7 Mon Sep 17 00:00:00 2001 From: Ashish Trivedi Date: Mon, 23 Dec 2024 09:52:59 -0800 Subject: [PATCH 23/26] @FIR-433: Updated Addresses 1. for 4MB SRAM divided into different regions 2. JUART addresses starting from 0x85003000 instead of 0x95003000 3. Peripherals starting from 0x71000000 + 0x14000000 instead of 0x95001000 --- boards/tsi/skyp/tsi_skyp_m85.dts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/boards/tsi/skyp/tsi_skyp_m85.dts b/boards/tsi/skyp/tsi_skyp_m85.dts index cac5f2837c7a0b..20158ef8b3fba7 100644 --- a/boards/tsi/skyp/tsi_skyp_m85.dts +++ b/boards/tsi/skyp/tsi_skyp_m85.dts @@ -24,9 +24,9 @@ zephyr,flash = &sram0; }; - jtag_uart: uart@95003000 { + jtag_uart: uart@85003000 { compatible = "altr,jtag-uart"; - reg = <0x95003000 0x8>; + reg = <0x85003000 0x8>; status = "enabled"; }; @@ -75,25 +75,25 @@ zephyr,memory-region = "DTCM"; }; - isram: sram@60600000 {/* alias @ 0x60600000 */ + isram: sram@60200000 {/* alias @ 0x60200000, lower 1MB of 2 MB SRAM1 */ compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x60600000 DT_SIZE_M(1)>; + reg = <0x60200000 DT_SIZE_M(1)>; zephyr,memory-region = "ISRAM"; }; - /* DDR4 - 2G, alternates non-secure/secure every 256M */ - ddr4: memory@60700000 { + /* Higher 1 MB of 2MB high SRAM */ + sram1: memory@60300000 { device_type = "memory"; compatible = "zephyr,memory-region"; - reg = <0x60700000 DT_SIZE_M(1)>; - zephyr,memory-region = "DDR4"; + reg = <0x60300000 DT_SIZE_M(1)>; + zephyr,memory-region = "SRAM1"; }; soc { - peripheral@81000000 { + peripheral@71000000 { #address-cells = <1>; #size-cells = <1>; - ranges = <0x0 0x81000000 0x1effffff>; + ranges = <0x0 0x71000000 0x1effffff>; #include "tsi_skyp_m85-common.dtsi" }; From 582e2b7691eb3b6689c9bbc94e4fcc97afa71ab2 Mon Sep 17 00:00:00 2001 From: atrivedi-tsavoritesi Date: Mon, 23 Dec 2024 12:32:01 -0800 Subject: [PATCH 24/26] @FIR-433: Made changes to remove peripheral accesses. (#6) The G0208 SKYP branch has peripheral accesses of UART and SPI disabled Removing the peripheral block from the DTS file --- boards/tsi/skyp/tsi_skyp_m85.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boards/tsi/skyp/tsi_skyp_m85.dts b/boards/tsi/skyp/tsi_skyp_m85.dts index 20158ef8b3fba7..b48190ccc3ce88 100644 --- a/boards/tsi/skyp/tsi_skyp_m85.dts +++ b/boards/tsi/skyp/tsi_skyp_m85.dts @@ -89,7 +89,7 @@ zephyr,memory-region = "SRAM1"; }; - soc { + /*soc { peripheral@71000000 { #address-cells = <1>; #size-cells = <1>; @@ -97,7 +97,7 @@ #include "tsi_skyp_m85-common.dtsi" }; - }; + };*/ }; &jtag_uart { From 558afeec192084addac5bd51b738710b673a1d2d Mon Sep 17 00:00:00 2001 From: atrivedi-tsavoritesi Date: Tue, 24 Dec 2024 08:51:21 -0800 Subject: [PATCH 25/26] @FIR-434: Clean up the MPS3 build to not customize for TSI (#7) Reverted changes which were done to MPS3 to build TSI targets --- boards/arm/mps3/board.yml | 1 - boards/arm/mps3/mps3_an547-common-tsv.dtsi | 176 ------------------ boards/arm/mps3/mps3_an547_tsv.dts | 207 --------------------- boards/arm/mps3/mps3_an547_tsv.yaml | 26 --- boards/arm/mps3/mps3_an547_tsv_defconfig | 24 --- boards/deprecated.cmake | 4 +- 6 files changed, 1 insertion(+), 437 deletions(-) delete mode 100644 boards/arm/mps3/mps3_an547-common-tsv.dtsi delete mode 100644 boards/arm/mps3/mps3_an547_tsv.dts delete mode 100644 boards/arm/mps3/mps3_an547_tsv.yaml delete mode 100644 boards/arm/mps3/mps3_an547_tsv_defconfig diff --git a/boards/arm/mps3/board.yml b/boards/arm/mps3/board.yml index 258af5d6490d8e..5ee7ed7c03789f 100644 --- a/boards/arm/mps3/board.yml +++ b/boards/arm/mps3/board.yml @@ -5,4 +5,3 @@ board: - name: 'an547' variants: - name: 'ns' - - name: 'tsv' diff --git a/boards/arm/mps3/mps3_an547-common-tsv.dtsi b/boards/arm/mps3/mps3_an547-common-tsv.dtsi deleted file mode 100644 index b32fe97c681c19..00000000000000 --- a/boards/arm/mps3/mps3_an547-common-tsv.dtsi +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (c) 2019-2021 Linaro Limited - * - * SPDX-License-Identifier: Apache-2.0 - */ - -sysclk: system-clock { - compatible = "fixed-clock"; - clock-frequency = <25000000>; - #clock-cells = <0>; -}; - -gpio0: gpio@9000010 { - compatible = "arm,cmsdk-gpio"; - reg = <0x9000010 0x4>; - interrupts = <69 3>; - gpio-controller; - #gpio-cells = <2>; -}; - -gpio1: gpio@9000014 { - compatible = "arm,cmsdk-gpio"; - reg = <0x9000014 0x4>; - interrupts = <70 3>; - gpio-controller; - #gpio-cells = <2>; -}; - -gpio2: gpio@9000018 { - compatible = "arm,cmsdk-gpio"; - reg = <0x9000018 0x4>; - interrupts = <71 3>; - gpio-controller; - #gpio-cells = <2>; -}; - -gpio3: gpio@900001c { - compatible = "arm,cmsdk-gpio"; - reg = <0x900001c 0x4>; - interrupts = <72 3>; - gpio-controller; - #gpio-cells = <2>; -}; - - -/*eth0: eth@1400000 {*/ - /* Linux has "smsc,lan9115" */ - /*compatible = "smsc,lan9220";*/ - /* Actual reg range is ~0x200 */ - /*reg = <0x1400000 0x100000>;*/ - /*interrupts = <49 3>;*/ -/*};*/ - -/* -i2c_touch: i2c@9200000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9200000 0x1000>; -}; - -i2c_audio_conf: i2c@9201000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9201000 0x1000>; -}; - -i2c_shield0: i2c@9203000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9203000 0x1000>; -}; - -i2c_shield1: i2c@9204000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9204000 0x1000>; -}; - -i2c_ddr4_eeprom: i2c@9208000 { - compatible = "arm,versatile-i2c"; - clock-frequency = ; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x9208000 0x1000>; -}; -*/ -gpio_led0: mps3_fpgaio@8000010 { - compatible = "arm,mps3-fpgaio-gpio"; - - reg = <0x8000010 0x4>; - gpio-controller; - #gpio-cells = <1>; - ngpios = <8>; -}; - -gpio_button: mps3_fpgaio@8000014 { - compatible = "arm,mps3-fpgaio-gpio"; - - reg = <0x8000014 0x4>; - gpio-controller; - #gpio-cells = <1>; - ngpios = <2>; -}; - -gpio_misc: mps3_fpgaio@8000018 { - compatible = "arm,mps3-fpgaio-gpio"; - - reg = <0x8000018 0x4>; - gpio-controller; - #gpio-cells = <1>; - ngpios = <3>; -}; - -uart0: uart@14001000 { - compatible = "arm,cmsdk-uart"; - reg = <0x14001000 0x1000>; - interrupts = <34 3 33 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; -}; - -/* -uart1: uart@9304000 { - compatible = "arm,cmsdk-uart"; - reg = <0x9304000 0x1000>; - interrupts = <36 3 35 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; -}; - -uart2: uart@9305000 { - compatible = "arm,cmsdk-uart"; - reg = <0x9305000 0x1000>; - interrupts = <38 3 37 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; -}; - -uart3: uart@9306000 { - compatible = "arm,cmsdk-uart"; - reg = <0x9306000 0x1000>; - interrupts = <40 3 39 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; -}; - -uart4: uart@9307000 { - compatible = "arm,cmsdk-uart"; - reg = <0x9307000 0x1000>; - interrupts = <42 3 41 3>; - interrupt-names = "tx", "rx"; - clocks = <&sysclk>; - current-speed = <115200>; -}; - -uart5: uart@9308000 { - compatible = "arm,cmsdk-uart"; - status = "disabled"; - reg = <0x9308000 0x1000>; - interrupt-names = "tx", "rx"; - interrupts = <126 3 125 3>; - clocks = <&sysclk>; - current-speed = <115200>; -};*/ diff --git a/boards/arm/mps3/mps3_an547_tsv.dts b/boards/arm/mps3/mps3_an547_tsv.dts deleted file mode 100644 index 57f5283d095537..00000000000000 --- a/boards/arm/mps3/mps3_an547_tsv.dts +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2018-2021 Linaro Limited - * Copyright 2022 Arm Limited and/or its affiliates - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/dts-v1/; - -#include -#include -#include -#include - -/ { - compatible = "arm,mps3-an547"; - #address-cells = <1>; - #size-cells = <1>; - - /* - aliases { - led0 = &led_0; - led1 = &led_1; - sw0 = &user_button_0; - sw1 = &user_button_1; - uart-0 = &jtag_uart; - }; - */ - chosen { - zephyr,console = &jtag_uart; - /* - zephyr,console = &uart0; - */ - zephyr,shell-uart = &jtag_uart; - /* - zephyr,shell-uart = &uart0; - */ - zephyr,sram = &sram; - zephyr,flash = &sram0; - }; - /* - leds { - compatible = "gpio-leds"; - led_0: led_0 { - gpios = <&gpio_led0 0>; - label = "USERLED0"; - }; - led_1: led_1 { - gpios = <&gpio_led0 1>; - label = "USERLED1"; - }; - led_2: led_2 { - gpios = <&gpio_led0 2>; - label = "USERLED2"; - }; - led_3: led_3 { - gpios = <&gpio_led0 3>; - label = "USERLED3"; - }; - led_4: led_4 { - gpios = <&gpio_led0 4>; - label = "USERLED4"; - }; - led_5: led_5 { - gpios = <&gpio_led0 5>; - label = "USERLED5"; - }; - led_6: led_6 { - gpios = <&gpio_led0 6>; - label = "USERLED6"; - }; - led_7: led_7 { - gpios = <&gpio_led0 7>; - label = "USERLED7"; - }; - led_8: led_8 { - gpios = <&gpio_led0 8>; - label = "PB1LED"; - }; - led_9: led_9 { - gpios = <&gpio_led0 9>; - label = "PB2LED"; - }; - }; - */ - /* - gpio_keys { - compatible = "gpio-keys"; - user_button_0: button_0 { - label = "USERPB0"; - gpios = <&gpio_button 0>; - zephyr,code = ; - }; - user_button_1: button_1 { - label = "USERPB1"; - gpios = <&gpio_button 1>; - zephyr,code = ; - }; - }; - - ethosu { - #address-cells = <1>; - #size-cells = <0>; - interrupt-parent = <&nvic>; - - ethosu0: ethosu@48102000 { - compatible = "arm,ethos-u"; - reg = <0x48102000>; - interrupts = <56 3>; - secure-enable; - privilege-enable; - status = "okay"; - }; - }; - */ - - jtag_uart: uart@95003000 { - compatible = "altr,jtag-uart"; - reg = <0x95003000 0x8>; - status = "enabled"; - }; - - cpus { - #address-cells = <1>; - #size-cells = <0>; - - cpu@0 { - device_type = "cpu"; - compatible = "arm,cortex-m85"; - reg = <0>; - #address-cells = <1>; - #size-cells = <1>; - - mpu: mpu@e000ed90 { - compatible = "arm,armv8.1m-mpu"; - reg = <0xe000ed90 0x40>; - }; - }; - }; - - /* We utilize the secure addresses, if you subtract 0x10000000 - * you'll get the non-secure alias - */ - itcm: itcm@4000 { /* alias @ 0x4000 */ - compatible = "zephyr,memory-region"; - reg = <0x4000 DT_SIZE_K(16)>; - zephyr,memory-region = "ITCM"; - }; - - sram0: sram0@60000000 { /* alias @ 0x60000000 */ - compatible = "zephyr,memory-region"; - reg = <0x60000000 DT_SIZE_K(256)>; - zephyr,memory-region = "SRAM0"; - }; - - sram: sram@60040000 { /* alias @ 0x60040000 */ - compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x60040000 DT_SIZE_K(1792)>; - zephyr,memory-region = "SRAM"; - }; - - dtcm: dtcm@20000000 { /* alias @ 0x20000000 */ - compatible = "zephyr,memory-region"; - reg = <0x20000000 DT_SIZE_K(16)>; - zephyr,memory-region = "DTCM"; - }; - - isram: sram@60600000 {/* alias @ 0x60600000 */ - compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x60600000 DT_SIZE_M(1)>; - zephyr,memory-region = "ISRAM"; - }; - - /* DDR4 - 2G, alternates non-secure/secure every 256M */ - ddr4: memory@60700000 { - device_type = "memory"; - compatible = "zephyr,memory-region"; - reg = <0x60700000 DT_SIZE_M(1) - /*0x70000000 DT_SIZE_M(256) - 0x80000000 DT_SIZE_M(256) - 0x90000000 DT_SIZE_M(256) - 0xa0000000 DT_SIZE_M(256) - 0xb0000000 DT_SIZE_M(256) - 0xc0000000 DT_SIZE_M(256) - 0xd0000000 DT_SIZE_M(256)*/>; - zephyr,memory-region = "DDR4"; - }; - - soc { - peripheral@81000000 { - #address-cells = <1>; - #size-cells = <1>; - ranges = <0x0 0x81000000 0x1effffff>; - - #include "mps3_an547-common-tsv.dtsi" - }; - }; -}; - -&jtag_uart { - status = "okay"; - current-speed = <9600>; -}; - -&nvic { - arm,num-irq-priority-bits = <3>; -}; diff --git a/boards/arm/mps3/mps3_an547_tsv.yaml b/boards/arm/mps3/mps3_an547_tsv.yaml deleted file mode 100644 index 169fa19ba1b52c..00000000000000 --- a/boards/arm/mps3/mps3_an547_tsv.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (c) 2019-2021 Linaro Limited -# -# SPDX-License-Identifier: Apache-2.0 -# - -identifier: mps3/an547/tsv -name: Arm MPS3-AN547_TSV -type: mcu -arch: arm -ram: 1792 -flash: 256 -simulation: qemu -toolchain: - - gnuarmemb - - zephyr - - xtools -supported: - - gpio -testing: - ignore_tags: - - drivers - - bluetooth - - net - - timer -vendor: arm diff --git a/boards/arm/mps3/mps3_an547_tsv_defconfig b/boards/arm/mps3/mps3_an547_tsv_defconfig deleted file mode 100644 index e8a412c68259a5..00000000000000 --- a/boards/arm/mps3/mps3_an547_tsv_defconfig +++ /dev/null @@ -1,24 +0,0 @@ -# -# Copyright (c) 2018-2021 Linaro Limited -# -# SPDX-License-Identifier: Apache-2.0 -# - -CONFIG_RUNTIME_NMI=y -CONFIG_ARM_TRUSTZONE_M=n -CONFIG_ARM_MPU=y -CONFIG_QEMU_ICOUNT_SHIFT=7 - -# GPIOs -CONFIG_GPIO=y - -# Serial -CONFIG_CONSOLE=y -CONFIG_UART_CONSOLE=y -CONFIG_SERIAL=y - -# Build a Secure firmware image -CONFIG_TRUSTED_EXECUTION_SECURE=n - -# Build the zephyr.hex and zephyrstrp.hex for FPGA -CONFIG_BUILD_OUTPUT_TSV_STRIPPED_HEX=y diff --git a/boards/deprecated.cmake b/boards/deprecated.cmake index b2fd56868c8715..f1a40a8b318726 100644 --- a/boards/deprecated.cmake +++ b/boards/deprecated.cmake @@ -434,9 +434,7 @@ set(mps3_an547_DEPRECATED set(mps3_an547_ns_DEPRECATED mps3/an547/ns ) -set(mps3_an547_tsv_DEPRECATED - mps3/an547/tsv -) + set(native_posix_64_DEPRECATED native_posix/native/64 ) From 20649c5000fb6deb532edb36745543b328f6dba7 Mon Sep 17 00:00:00 2001 From: "M.Mankal-TSI" Date: Tue, 24 Dec 2024 10:28:30 -0800 Subject: [PATCH 26/26] FIR-442: M85 Banner and Logging --- tsi_core/CMakeLists.txt | 8 ++++++ tsi_core/README.rst | 29 ++++++++++++++++++++ tsi_core/overlay_deferred.conf | 11 ++++++++ tsi_core/overlay_immediate.conf | 3 +++ tsi_core/prj.conf | 19 +++++++++++++ tsi_core/prj_poll.conf | 4 +++ tsi_core/sample.yaml | 15 +++++++++++ tsi_core/src/main.c | 48 +++++++++++++++++++++++++++++++++ 8 files changed, 137 insertions(+) create mode 100644 tsi_core/CMakeLists.txt create mode 100644 tsi_core/README.rst create mode 100644 tsi_core/overlay_deferred.conf create mode 100644 tsi_core/overlay_immediate.conf create mode 100644 tsi_core/prj.conf create mode 100644 tsi_core/prj_poll.conf create mode 100644 tsi_core/sample.yaml create mode 100644 tsi_core/src/main.c diff --git a/tsi_core/CMakeLists.txt b/tsi_core/CMakeLists.txt new file mode 100644 index 00000000000000..e3a4fe1c954ffa --- /dev/null +++ b/tsi_core/CMakeLists.txt @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(m85) + +target_sources(app PRIVATE src/main.c) diff --git a/tsi_core/README.rst b/tsi_core/README.rst new file mode 100644 index 00000000000000..bf065c3cbdcd0d --- /dev/null +++ b/tsi_core/README.rst @@ -0,0 +1,29 @@ +.. _m85: + +TSI Banner +########### + +Overview +******** + +This is the core M85 Zephyr platform and initial startup code. It prints TSI Banner to the console by invocation of Zephyr main. This module also enables the logging functionality to log messages to console at different levels of severity such as Info, Warning, Error & Debug. + +Building and Running +******************** + +This application can be built as follows: + +.. zephyr-app-commands:: + :zephyr-app: + :host-os: unix + :board: ek_tsi_skyp/m85 + :goals: run + :compact: + + +Sample Output +============= + +.. code-block:: console + + !! Welcome to TSI Platform !! diff --git a/tsi_core/overlay_deferred.conf b/tsi_core/overlay_deferred.conf new file mode 100644 index 00000000000000..5dbd4edd31a544 --- /dev/null +++ b/tsi_core/overlay_deferred.conf @@ -0,0 +1,11 @@ +CONFIG_LOG_MODE_IMMEDIATE=n +CONFIG_LOG_MODE_DEFERRED=y +CONFIG_LOG_BUFFER_SIZE=1024 +CONFIG_LOG_PROCESS_THREAD=y +CONFIG_LOG_PROCESS_THREAD_SLEEP_MS=100 +CONFIG_LOG_PROCESS_TRIGGER_THRESHOLD=2 +CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=4096 +CONFIG_LOG_BLOCK_IN_THREAD=y +CONFIG_LOG_BACKEND_UART=y +CONFIG_LOG_MIPI_SYST_ENABLE=y +CONFIG_LOG_BACKEND_UART_OUTPUT_SYST=y diff --git a/tsi_core/overlay_immediate.conf b/tsi_core/overlay_immediate.conf new file mode 100644 index 00000000000000..82b28234abd059 --- /dev/null +++ b/tsi_core/overlay_immediate.conf @@ -0,0 +1,3 @@ +CONFIG_LOG_BACKEND_UART=y +CONFIG_LOG_MIPI_SYST_ENABLE=y +CONFIG_LOG_BACKEND_UART_OUTPUT_SYST=y diff --git a/tsi_core/prj.conf b/tsi_core/prj.conf new file mode 100644 index 00000000000000..d34c7f64365e02 --- /dev/null +++ b/tsi_core/prj.conf @@ -0,0 +1,19 @@ +CONFIG_LOG=y +CONFIG_CONSOLE=y +CONFIG_LOG_PRINTK=y +CONFIG_UART_CONSOLE=y +CONFIG_SHELL=n +CONFIG_BOOT_BANNER=y +CONFIG_SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN=n +CONFIG_SHELL_BACKEND_SERIAL_RX_POLL_PERIOD=1 + +CONFIG_LOG_BACKEND_UART=y + +# Use immediate mode so all messages are being +# printed. Under deferred mode, there may be +# dropped messages as there are quite a number of +# messages to be printed. +CONFIG_LOG_MODE_IMMEDIATE=y + +# Need bigger stack for immediate mode +CONFIG_MAIN_STACK_SIZE=4096 diff --git a/tsi_core/prj_poll.conf b/tsi_core/prj_poll.conf new file mode 100644 index 00000000000000..e36289a67f8366 --- /dev/null +++ b/tsi_core/prj_poll.conf @@ -0,0 +1,4 @@ +CONFIG_SHELL=y +CONFIG_SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN=n +CONFIG_SHELL_BACKEND_SERIAL_RX_POLL_PERIOD=1 +CONFIG_BOOT_BANNER=n diff --git a/tsi_core/sample.yaml b/tsi_core/sample.yaml new file mode 100644 index 00000000000000..5bebdd0046e778 --- /dev/null +++ b/tsi_core/sample.yaml @@ -0,0 +1,15 @@ +sample: + description: TSI Core platform - M85 + name: m85 +common: + tags: introduction + integration_platforms: + - ek_tsi_skyp + harness: console + harness_config: + type: one_line + regex: + - "Welcome to TSI!" +tests: + sample.m85: + tags: introduction diff --git a/tsi_core/src/main.c b/tsi_core/src/main.c new file mode 100644 index 00000000000000..1b3f62e4c31648 --- /dev/null +++ b/tsi_core/src/main.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2024-2025 TSI + * + */ + + +#include +#include +#include +#include +#include +#include +#include + +#define DATA_MAX_DLEN 8 +#define LOG_MODULE_NAME m85 +LOG_MODULE_REGISTER(LOG_MODULE_NAME); +#define PRINT_TSI_BOOT_BANNER() printk(" Tsavorite Scalable Intelligence \n") + +int main(void) +{ + + /* TSI banner */ + PRINT_TSI_BOOT_BANNER(); + printf("\n"); + printf(" |||||||||||||||||||||||||||||||||||||\n");; + printf(" ||||||||||||||||||||||||||||||||||||| \n"); + printf(" |||||| |||||\n"); + printf(" |||||| ||||| \n"); + printf(" ||||||||||||||||| ||||| ||||| \n"); + printf(" ||||||||||||||||| ||||| |||||\n"); + printf(" |||||| |||||\n"); + printf(" |||||| |||||| ||||| ||||||\n"); + printf(" |||||||| |||||| ||||| ||||||||\n"); + printf(" |||||||||||||| ||||||||||||||\n"); + printf(" ||||||||||| ||||||||||||\n"); + printf(" ||||||||| ||||||||||\n"); + printf(" ||||||| ||||||||\n"); + printf(" ||||| |||||\n"); + printf(" ||| |||\n"); + printf(" |\n"); + + LOG_INF("Test Platform: %s",CONFIG_BOARD_TARGET); + LOG_WRN("Testing on FPGA"); + printk("TSI Logging enabled and printk is functional\n"); + + return 0; +}