From 9056556b7ace35f916f702ad6097ebcff87c4b91 Mon Sep 17 00:00:00 2001 From: Manivannan Sadhasivam Date: Thu, 26 Jul 2018 12:36:51 +0530 Subject: [PATCH] 96boards: Add Ultra-96 board support This commit adds Ultra96, one of the Consumer Edition boards of the 96Boards family. Ultra96 is an Arm-based, Xilinx Zynq UltraScale+ MPSoC development board. This board runs petalinux distribution on the ARM core and integrates Xilinx programmable logic (PL) UltraScale architecture in a single fabric. This board supports standard peripherals defined by 96Boards CE Specification. Since it ships with >4.8 kernel, only chardev mapping is supported for accessing GPIO. More information about this board can be found in 96Boards product page: https://www.96boards.org/product/ultra96/ Signed-off-by: Manivannan Sadhasivam --- docs/96boards.md | 1 + src/arm/96boards.c | 21 +++++++++++++++++++++ src/arm/arm.c | 2 ++ 3 files changed, 24 insertions(+) diff --git a/docs/96boards.md b/docs/96boards.md index baa8a5e..ae2e813 100644 --- a/docs/96boards.md +++ b/docs/96boards.md @@ -14,6 +14,7 @@ Board Support - [HiKey](http://www.96boards.org/product/hikey/) - [HiKey960](http://www.96boards.org/product/hikey960/) - [Rock960](http://www.96boards.org/product/rock960/) +- [Ultra96](https://www.96boards.org/product/ultra96/) Interface notes --------------- diff --git a/src/arm/96boards.c b/src/arm/96boards.c index e01b3cf..380dae2 100644 --- a/src/arm/96boards.c +++ b/src/arm/96boards.c @@ -42,6 +42,8 @@ #define PLATFORM_NAME_HIKEY "HIKEY" #define PLATFORM_NAME_HIKEY960 "HIKEY960" #define PLATFORM_NAME_ROCK960 "ROCK960" +#define PLATFORM_NAME_ULTRA96 "ULTRA96" + #define MAX_SIZE 64 #define MMAP_PATH "/dev/mem" #define DB410C_MMAP_REG 0x01000000 @@ -102,6 +104,14 @@ int rock960_ls_gpio_pins[MRAA_96BOARDS_LS_GPIO_COUNT] = { const char* rock960_serialdev[MRAA_96BOARDS_LS_UART_COUNT] = { "/dev/ttyS3", "/dev/ttyS4" }; +// Ultra96 +int ultra96_chardev_map[MRAA_96BOARDS_LS_GPIO_COUNT][2] = { + { 0, 36 }, { 0, 37 }, { 0, 39 }, { 0, 40 }, { 0, 44 }, { 0, 45 }, + { 0, 78 }, { 0, 79 }, { 0, 80 }, { 0, 81 }, { 0, 82 }, { 0, 83 }, +}; + +const char* ultra96_serialdev[MRAA_96BOARDS_LS_UART_COUNT] = { "/dev/ttyPS0", "/dev/ttyS0" }; + // MMAP static uint8_t* mmap_reg = NULL; static int mmap_fd = 0; @@ -286,6 +296,12 @@ mraa_96boards() ls_gpio_pins = rock960_ls_gpio_pins; b->uart_dev[0].device_path = (char*) rock960_serialdev[0]; b->uart_dev[1].device_path = (char*) rock960_serialdev[1]; + } else if (mraa_file_contains(DT_BASE "/model", "ZynqMP ZCU100 RevC")) { + b->platform_name = PLATFORM_NAME_ULTRA96; + chardev_map = &ultra96_chardev_map; + b->uart_dev[0].device_path = (char*) ultra96_serialdev[0]; + b->uart_dev[1].device_path = (char*) ultra96_serialdev[1]; + b->chardev_capable = 1; } } @@ -304,6 +320,11 @@ mraa_96boards() b->def_i2c_bus = 0; b->i2c_bus[0].bus_id = 6; b->i2c_bus[1].bus_id = 1; + } else if (strncmp(b->platform_name, PLATFORM_NAME_ULTRA96, MAX_SIZE) == 0) { + b->i2c_bus_count = MRAA_96BOARDS_LS_I2C_COUNT; + b->def_i2c_bus = 0; + b->i2c_bus[0].bus_id = 2; + b->i2c_bus[1].bus_id = 3; } else { b->i2c_bus_count = MRAA_96BOARDS_LS_I2C_COUNT; b->def_i2c_bus = 0; diff --git a/src/arm/arm.c b/src/arm/arm.c index 8431c24..62d6b2e 100644 --- a/src/arm/arm.c +++ b/src/arm/arm.c @@ -98,6 +98,8 @@ mraa_arm_platform() platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/model", "ROCK960")) platform_type = MRAA_96BOARDS; + else if (mraa_file_contains("/proc/device-tree/model", "ZynqMP ZCU100 RevC")) + platform_type = MRAA_96BOARDS; else if (mraa_file_contains("/proc/device-tree/compatible", "raspberrypi,")) platform_type = MRAA_RASPBERRY_PI; }