Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
Commit 2e72d123 authored by Suraj  Sonawane's avatar Suraj Sonawane
Browse files

Update suraj-sonawane.rst

parent fce116e1
Branches
No related merge requests found
......@@ -6,7 +6,7 @@ Upstream Zephyr Support on BeagleBone AI-64 R5
Introduction
*************
The goal of the project is to upsteam Zephyr RTOS support to run on Cortex R5 processor cores loaded from A72 core running Linux through remoteproc. Some work has already been done by a previous year Gsoc contributor ( `VIM <https://github.com/zephyrproject-rtos/zephyr/pull/60856>`_ , `GPIO <https://github.com/zephyrproject-rtos/zephyr/pull/61316>`_ ), but not all the PR's have been merged. Therefore, I will be adding peripheral support for those PR's that were not merged ( `J721E, Board support <https://github.com/zephyrproject-rtos/zephyr/pull/59191>`_, `DIM Timer support <https://github.com/zephyrproject-rtos/zephyr/pull/61020>`_ ) and also adding peripheral support for ADC, I2C, SPI, mailbox, TI-SCI on TDA4VM SoC. The Cortex R5 processor cores are designed to provide deeply embedded real-time and safety-critical systems, so adding Zephyr RTOS support for R5 core in TDA4VM will be very helpful for users.
The goal of the project is to upsteam Zephyr RTOS support to run on Cortex R5 processor cores loaded from A72 core running Linux through remoteproc. Some work has already been done by a previous year Gsoc contributor ( `VIM <https://github.com/zephyrproject-rtos/zephyr/pull/60856>`_ , `GPIO <https://github.com/zephyrproject-rtos/zephyr/pull/61316>`_ ), but not all the PR's have been merged. Therefore, I will be adding peripheral support for those PR's that were not merged ( `J721E, Board support <https://github.com/zephyrproject-rtos/zephyr/pull/59191>`_, `DIM Timer support <https://github.com/zephyrproject-rtos/zephyr/pull/61020>`_ ) and also adding peripheral support for ADC, I2C, SPI, TI-SCI on TDA4VM SoC. The Cortex R5 processor cores are designed to provide deeply embedded real-time and safety-critical systems, so adding Zephyr RTOS support for R5 core in TDA4VM will be very helpful for users.
Summary links
===============
......@@ -65,14 +65,14 @@ Overview
Drivers needed to implement TI-SCI:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- `Mailbox controller driver <https://software-dl.ti.com/processor-sdk-sitara/esd/am64x/latest/exports/docs/rtos/pdk_am64x/docs/apiguide/am64x/html/group__DRV__MAILBOX__MODULE.html>`_
- Device Management: Enable and release a module
- This configures both **power and clock** details for the module and keeps track of its usage.
- Add this support driver to allow communication with system controller entity within the SoC using the mailbox client.
- Clock Management: Control the frequency of the clock to a module.
- `SCIClient Driver: <https://software-dl.ti.com/processor-sdk-sitara/esd/am64x/latest/exports/docs/rtos/pdk_am64x/docs/apiguide/am64x/html/group__DRV__SCICLIENT__MODULE.html>`_
The SCIClient is an interface to the TI-SCI protocol for RTOS and non-OS based applications. It exposes the core message details, valid module/clock IDs to the higher level software and abstracts the communication with the firmware based on the TI-SCI protocol. These APIs can be called by power, resource and security RTOS drivers or any other non-OS or RTOS based higher level software to be able to communicate with DMSC for its services. The higher level software is expected to populate the necessary message core parameters. The SCIClient would wrap the core message with the necessary protocol header and forward this to the DMSC. The SCIClient relies on the CSL-FL layer to program and interact with the Secure Proxy Threads. The SCIClient's goal is to ensure there is no duplication of the interface to the DMSC from different software components which need to interact with the DMSC or other System Control Entities in future devices.
- Device Reset Control
Device Management and Security Control (DMSC)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Device Management and Security Control (DMSC) subsystem is a processing entity on Jacinto 7 family of devices which performs centralized boot, power, security, and resource management functions, and System Firmware is the firmware which executes on the subsystem. System Firmware implements the Texas Instruments System Control Interface (TISCI) which client software can use to request various services related to device power, resources, and security functions.
`J721E Device ID: <https://software-dl.ti.com/tisci/esd/latest/5_soc_doc/j721e/devices.html#soc-doc-j721e-public-devices-desc-device-list>`_
~~~~~~~~~~~~~~~~~
......@@ -149,14 +149,14 @@ main features:
• Support of start-bit pause and break sequence
Implementation Details
Implementation Overview
========================
PART-1. Initial configuration:
-------------------------------
Initial configuration:
-----------------------
**1. Write Kconfig and device tree filels (Already done by previous year gsoc contributor)**
- Write Kconfig and device tree filels: Already done by previous year gsoc contributor in `this PR <https://github.com/zephyrproject-rtos/zephyr/pull/59191>`_:
- Write Kconfig and device tree filels: Already done by previous year gsoc contributor in `this PR. <https://github.com/zephyrproject-rtos/zephyr/pull/59191>`_
**2. Add Flash and debug support:**
......@@ -171,8 +171,8 @@ West is “pluggable”: you can add your own commands to west without editing i
3. Make sure the west-commands.yml file is referenced in the west manifest.
PART-2. Driver developement:
-----------------------------
Driver developement:
----------------------
**1. Board Files:**
Board files are the primary descriptor of the hardware in Zephyr.
......@@ -185,6 +185,32 @@ A devicetree binding declares requirements on the contents of nodes, and provide
**4. API Definitions:**
Available under "include/drivers/". Provides a general way of unteracting with driver instances.
Add basic support for Device Manager using TISCI:
--------------------------------------------------
- Device Manager enable and release a module.
- This configures both **power and clock** details for the module and keeps track of its usage.
- Add support driver to allow communication with system controller entity within the SoC using the mailbox client.
- There are some existing APIs by using this API's we can add basic support for Device Manager using TISCI:
- Device configuration and control APIs
+----------------------+-----------------------------+
| TISCI Message ID | Message Name |
+======================+=============================+
| 0x0200 | TISCI_MSG_SET_DEVICE |
+----------------------+-----------------------------+
| 0x0201 | TISCI_MSG_GET_DEVICE |
+----------------------+-----------------------------+
| 0x0202 | TISCI_MSG_SET_DEVICE_RESETS |
+----------------------+-----------------------------+
1. TISCI_MSG_SET_DEVICE : Request for a device state to be set.
This is used to set or release various resets of the hardware block. This is typically used for hardware blocks which require special handling prior to specific resets being released. Typical example is when starting up a processing entity like ICSS/DSP, the device must be requested with resets asserted, required firmware loaded and the required resets released in appropriate order for operation of the device.
2. TISCI_MSG_GET_DEVICE : Retrieve the hardware block state.
This requests information regarding the state of a device including the device’s programmed state, current state, number of resets, and the number of times a device lost context.
3. TISCI_MSG_SET_DEVICE_RESETS : Set the state of device reset state.
This is used to set or release various resets of the hardware block. This is typically used for hardware blocks which require special handling prior to specific resets being released. Typical example is when starting up a processing entity like ICSS/DSP, the device must be requested with resets asserted, required firmware loaded and the required resets released in appropriate order for operation of the device.
Software
==========
......@@ -211,8 +237,9 @@ Timeline summary
+------------------------+----------------------------------------------------------------------------------------------------+
| March 28 - April 2 | Proposal review and Submission. |
+------------------------+----------------------------------------------------------------------------------------------------+
| April 3 - April 30 | Getting familiar with hardware and looking deeper in Zephyr code base. |
| | and looking in depth in board porting in zephyr codebase. |
| April 3 - April 30 | Start working on studying the unmerged `PR's . <https://bit.ly/slpp95prashanth>`_. |
| | Getting familiar with Hardware and looking deeper in Zephyr code base. Also looking into TI-SCI |
| | implementation idea. |
+------------------------+----------------------------------------------------------------------------------------------------+
| May 1 - May 10 | Start bonding |
+------------------------+----------------------------------------------------------------------------------------------------+
......@@ -252,38 +279,39 @@ Timeline detailed
Community Bonding Period (May 1st - May 15th)
==============================================
- Discuss implementation idea and scope with mentors.
- Get the board and other required hardware ready.
- Understanding multiprocessor environment and IPC.
- Understanding remoteproc on how to load firmware from linux to other processor cores.
- Setting up the Zephyr build environment.
- Add `west flash support. <https://docs.zephyrproject.org/latest/develop/west/build-flash-debug.html>`_
- Work on the unmerged pull request from a previous year's Google Summer of Code contributor titled `"Add TI J721e R5 and BeagleBone AI64 R5 initial support #59191" <https://github.com/zephyrproject-rtos/zephyr/pull/59191>`_ in order to merge it.
- Work on the unmerged pull request from a previous year's Google Summer of Code contributor titled `"Add TI J721e DM TIMER support #61020" <https://github.com/zephyrproject-rtos/zephyr/pull/61020>`_ in order to merge it.
Coding begins (June 1st)
=========================
- Start making an introductory Video.
- Flash Linux image on A72 core.
- Boot minimal Cortex R5 firmware from Linux running on A72 core through remoteproc.
- Finalise TI-SCI implementation idea by discussion with mentors.
Milestone #1, Introductory YouTube video (June 3rd)
===================================================
- Introductory Video.
- Add UART support for debug prints in the minimal firmware.
- Add `west flash support. <https://docs.zephyrproject.org/latest/develop/west/build-flash-debug.html>`_
- Start adding basic support for TI-SCI protocol.
Milestone #2 (June 10th)
==========================
- Work on the unmerged pull request from a previous year's Google Summer of Code contributor titled `"Add TI J721e R5 and BeagleBone AI64 R5 initial support #59191" <https://github.com/zephyrproject-rtos/zephyr/pull/59191>`_ in order to merge it.
- Work on the unmerged pull request from a previous year's Google Summer of Code contributor titled `"Add TI J721e DM TIMER support #61020" <https://github.com/zephyrproject-rtos/zephyr/pull/61020>`_ in order to merge it.
- Complete basic support for TI-SCI protocol.
- Start adding basic support for Device Manager using TI-SCI.
Milestone #3 (June 17th)
=========================
- Understanding ADC module IN TDA4VM.
- Add ADC Support in Zephyr.
- Adding basic support for Device Manager using TI-SCI.
- Implement `Mailbox controller driver <https://software-dl.ti.com/processor-sdk-sitara/esd/am64x/latest/exports/docs/rtos/pdk_am64x/docs/apiguide/am64x/html/group__DRV__MAILBOX__MODULE.html>`_ to provide support for Device Manager using TI-SCI.
Milestone #4 (June 24th)
==========================
- Understanding I2C module IN TDA4VM.
- Add I2C Support in Zephyr.
- Adding basic support for Device Manager using TI-SCI.
- Implement `SCIClient Driver: <https://software-dl.ti.com/processor-sdk-sitara/esd/am64x/latest/exports/docs/rtos/pdk_am64x/docs/apiguide/am64x/html/group__DRV__SCICLIENT__MODULE.html>`_ to provide support for Device Manager using TI-SCI.
Milestone #5 (July 1st)
========================
- Complete basic support for Device Manager using TI-SCI.
- Run basic IPC examples with the Linux cores, to control clock via device manager.
Milestone #5 (July 1st)
========================
......@@ -302,26 +330,26 @@ Submit midterm evaluations (July 8th)
Milestone #6 (July 15th)
=========================
- Understanding TI-SCI (Texas Instruments System Controller Interface ).
- Add TI-SCI Support.
- Understanding I2C module IN TDA4VM.
- Add I2C Support in Zephyr.
Milestone #7 (July 22nd)
=========================
- Understanding mailbox module in TDA4VM.
- Add mailbox Support in Zephyr.
- Understanding SPI module IN TDA4VM.
- Add SPI Support in Zephyr.
Milestone #8 (July 29th)
=========================
- Understanding Inter-process communication (IPC).
- Add IPC Support. To run basic IPC examples with the Linux cores.
- Understanding ADC module IN TDA4VM.
- Add ADC Support in Zephyr.
Milestone #9 (Aug 5th)
=======================
- Add support for the R5 cores to communicate with the Device Manager to control clock.
Milestone #10 (Aug 12th)
========================
- Start upstreaming the developed features to Zephyr.
- Work on optimizing the performance of the support that has been added until now.
Final YouTube video (Aug 19th)
......@@ -366,7 +394,7 @@ Experience and approch
- In all of the above projects, I designed many things from scratch and rapidly learned many things in embedded systems. Even though I faced many errors, I stayed committed and figured them out. I have relevant experience (C, RTOS) for this project, and as a passionate Open Source enthusiast, I will wholeheartedly work towards completing the project idea within the allotted time.
- Contributions in `openbeagle.org/gsoc <https://openbeagle.org/gsoc/gsoc.beagleboard.io>`_
- Contribution in `openbeagle.org/gsoc <https://openbeagle.org/gsoc/gsoc.beagleboard.io>`_
- Improved Documentation - `#40 <https://openbeagle.org/gsoc/gsoc.beagleboard.io/-/merge_requests/40>`_ (merged)
Contingency
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment