AM65x MCU+ SDK  09.01.00
SCICLIENT

Device AM65x fall under the K3 SoC family and has a concept of centralized Power, Resource and Security management to allow mitigating the challenges of the traditional approach to system control. System Firmware (hereafter referred to as SYSFW) is the collective name for the security and device management firmware which offers these centralized services. In this concept a processing unit (for example an R5F) can request the SYSFW to control power, grant resources or provide secure services. This is done via a special messaging channel called a secure proxy. The messages are sent obeying a proprietary protocol called TISCI (TI System Controller Interface) protocol. For more information on TISCI protocol you can refer to the TISCI Public Documentation. Sciclient as a software block has multiple functional sub-blocks inside it, as shown in the below image:

Sciclient Sub-blocks

More details on the APIs provided on these layers can be found in the API section, linked towards the end of this page.

Generally speaking, the Sciclient driver provides API to communicate with the SYSFW using the TISCI protocol. As mentioned above, this would be for system level tasks like resource allocation, peripheral power on/off, peripheral clock setting, secure services and so on. The sciclient will be part of the application code running on each core.

Typical Sciclient Operation

The above image shows the operation for only one core, but the same thing happens for all the cores. SYSFW deals with all the requests coming from each of the cores.

Sciclient is mostly used by other drivers, like DMA, GPIO etc. Sciclient acts as an interface to the SYSFW for these drivers when they need say a resource like DMA channel, or configure an interrupt route. Below are the high level features supported by the driver:

Features Supported

  • APIs to load the SYSFW onto the DMSC core
  • APIs to pass a specific board configuration to the SYSFW
  • Abstracted APIs for Power and Resource Management
  • APIs for Processor Boot including secure boot
  • APIs for configuring firewalls

SysConfig Features

Note
It is strongly recommend to use SysConfig where it is available instead of using direct SW API calls. This will help simplify the SW application and also catch common mistakes early in the development cycle.
  • There are no user programmable features for Sciclient SysConfig. However, adding any module makes the PowerClock_init() initialize the module power and clock. This is indirectly done using Sciclient APIs.

Features NOT Supported

NA

Important Usage Guidelines

  • Sciclient is mostly used by other peripheral drivers, and mostly not directly by an application. From an application point of view, major usage of Sciclient APIs would be to power on/off a module, set/get the clock of a module, etc.

Example Usage

Include the below file to access the APIs

#include <stdio.h>

Module Power ON Example

int32_t status = SystemP_SUCCESS;
uint32_t moduleId = TISCI_DEV_TIMER0;
uint32_t moduleState, resetState, contextLossState;
/* Check the module status. Need not do power on if it's already ON */
status = Sciclient_pmGetModuleState(moduleId,
&moduleState,
&resetState,
&contextLossState,
{
status = Sciclient_pmSetModuleState(moduleId,
status = Sciclient_pmSetModuleRst (moduleId,
0x0U,
}

API

APIs for SCI Client or SYSFW/DMSC FW

sciclient.h
This file contains prototypes for APIs contained as a part of SCICLIENT as well as the structures of ...
Sciclient_pmSetModuleState
int32_t Sciclient_pmSetModuleState(uint32_t moduleId, uint32_t state, uint32_t reqFlag, uint32_t timeout)
Message to set the hardware block/module state This is used to request or release a device....
SystemP_WAIT_FOREVER
#define SystemP_WAIT_FOREVER
Value to use when needing a timeout of infinity or wait forver until resource is available.
Definition: SystemP.h:83
TISCI_MSG_VALUE_DEVICE_HW_STATE_OFF
#define TISCI_MSG_VALUE_DEVICE_HW_STATE_OFF
Definition: tisci_pm_device.h:99
TISCI_DEV_TIMER0
#define TISCI_DEV_TIMER0
Definition: tisci_devices.h:76
TISCI_MSG_FLAG_AOP
#define TISCI_MSG_FLAG_AOP
Definition: tisci_protocol.h:75
Sciclient_pmGetModuleState
int32_t Sciclient_pmGetModuleState(uint32_t moduleId, uint32_t *moduleState, uint32_t *resetState, uint32_t *contextLossState, uint32_t timeout)
Message to get the hardware block/Module state. This request does not require the processing entity t...
SystemP_SUCCESS
#define SystemP_SUCCESS
Return status when the API execution was successful.
Definition: SystemP.h:56
TISCI_MSG_FLAG_DEVICE_EXCLUSIVE
#define TISCI_MSG_FLAG_DEVICE_EXCLUSIVE
Definition: tisci_pm_device.h:80
TISCI_MSG_VALUE_DEVICE_SW_STATE_ON
#define TISCI_MSG_VALUE_DEVICE_SW_STATE_ON
Definition: tisci_pm_device.h:93
DebugP_assert
#define DebugP_assert(expression)
Function to call for assert check.
Definition: DebugP.h:177
TISCI_MSG_FLAG_DEVICE_RESET_ISO
#define TISCI_MSG_FLAG_DEVICE_RESET_ISO
Definition: tisci_pm_device.h:71
Sciclient_pmSetModuleRst
int32_t Sciclient_pmSetModuleRst(uint32_t moduleId, uint32_t resetBit, uint32_t timeout)
Set the device reset state. This is used to set or release various resets of the hardware block/modul...