# Introduction The Keystone3 Resource Partitioning tool partitions various system resources among different software components in a multi-core SoC. Texas Instruments developed this tool based on their SysConfig tool. System integrators typically use this tool to assign **resources** to different software parts. These resources include Direct Memory Access (DMA) channels, rings, proxies, interrupts, and more. The tool also supports Quality of Service (QoS) and firewall settings to help partition **peripheral devices** for different software components. # Getting Started 1. **Open the Tool:** Go to [K3 Resource Partitioning Tool](https://dev.ti.com/sysconfig/?product=K3-RESOURCE-CONFIGURATION). Log in to your TI account if needed. ![K3 Resource Config Start Page](images/k3_resource_config_startpage.png) 2. **Select Your Device:** Choose your device from the `Device` list. Leave the default values for `Package` and `Variant`. ![K3 Resource Config Device Selection](images/k3_resource_config_device_selection.png) 3. **Start Configuring Resources:** Select a `Design` for your device: 1. **Empty Design:** Select this if you want to start from scratch. 2. **Latest Baseline Design:** Select this if you want to start from the latest baseline design with most of the resources already configured for seamless Out-of-Box experience. **(Recommended)** ![K3 Resource Config Device Selected](images/k3_resource_config_device_selected.png) [[g! **Tip:** You can open an existing configuration by clicking the `Browse` button and selecting your `.syscfg` file. When using the online tool, you can upload design files from your local file system. Once uploaded, the file is automatically saved to your cloud storage in the `syscfg` directory for easy access in future sessions. ]] # GUI Overview After loading a design, the tool displays a three-panel interface. Each panel serves a specific purpose in the configuration workflow: ![Resource Partitioning Tool GUI](images/k3_resource_config_gui.png) ## Left Panel - Module Navigation The left panel provides a tree structure for navigating and selecting configuration modules. It contains four main sections: * **SYSFW BOARD CONFIG:** Configure board-level settings including MSMC SRAM size and SYSFW debug options * **SYSFW RESOURCE PARTITIONING:** Select hosts (A53_0, A53_1, R5_0, and so on.) to assign system resources. * **RESOURCE SHARING:** View and add new resource sharing entries between two hosts * **PERIPHERAL RESOURCE PARTITIONING:** Configure bandwidth limiters, Quality of Service (QoS) settings, and firewall rules for peripheral access control Hosts with configured resources display a green checkmark. Click any item to view or change its configuration in the middle panel. ## Middle Panel - Configuration Editor The middle panel displays detailed configuration options for the selected module or host. This is your primary workspace for: * Setting resource counts (DMA channels, rings, proxies, interrupts) for each host * Configuring host capabilities and permissions * Defining bandwidth limits and QoS priorities * Specifying resource sharing rules Configuration fields are organized into collapsible sections. Use the **ADD** and **REMOVE ALL** buttons at the top to manage configuration entries. ## Right Panel - Output and Validation The right panel provides real-time feedback and outputs. It includes many tabs accessible through the toolbar above it: * **Problems:** Displays configuration errors, warnings, and validation messages. Errors must be resolved before files can be generated * **Generated Files:** Lists all output files with their categories. Files updated since the last save show a blue toggle indicator. Click the download icon to save individual files * **Resource Allocation Table:** Shows a comprehensive view of how resources are distributed across all hosts in a tabular format * **Resource Allocation Markdown:** Provides the same resource allocation data in Markdown format for documentation purposes * **HWA Channels Table:** Shows a comprehensive view of Hardware Accelerator channels' start and count in a tabular format # Usage This section describes how to configure each module in the Resource Partitioning Tool. ## SYSFW Board Configuration The Board Configuration module configures the SoC's board configuration file. You can configure: * **MSMC SRAM Size:** Select the SRAM size for the Multicore Shared Memory Controller (MSMC) * **SYSFW Debug Logs:** Enable or disable System Firmware (and DM) debug logging To configure, click the **Add** button, then select your settings. [[d! **Note:** This section is only relevant for PDK. It is not applicable to MCU+ SDK. ]] ## SYSFW Resource Partitioning The resource partitioning module divides resources among different hosts in the system. A **host** is a software component which has a dedicated communication context with **System Firmware**(SYSFW). The module creates a **Resource Management Board Configuration** file, which defines the resource partitioning. The bootloader passes this file to System Firmware during boot. In the left pane of GUI, you see the available hosts and which of those hosts have resources allocated to them. There are different resource **groups**, where you set the required **count** for each resource. The tool assigns resources based on the counts you set for all hosts. Besides allocating resources, you can configure different **host capabilities**. Click the **?** next to a host's name to read the detailed documentation for that host module. [[y! **Warning:** If you allocate more resources than available, the tool will show validation error - "ERROR : Assigned resource count exceeds by X". Total allocations across all hosts cannot exceed hardware limits. Reduce allocations or redistribute resources among hosts to resolve errors. ]] ### Review Resource Allocation You can check the current resource split at any time. Select the **Resource Allocation Table** from the three dots at the top right of the tool. This section shows an HTML table of hosts and their allocated resources. Each row shows a certain resource. Each column shows the resource ranges assigned to a certain host. [[b! **Info:** The last column, labeled `ALL`, represents the total number of resources available to all hosts. This column is for the `HOST_ID_ALL` value. Certain hardware have some resources, such as `GPIO interrupts` and `Virtual interrupts`, tied to them. For example, `DMASS Interrupt Aggregator Virtual Interrupts` connect directly to specific cores, so those interrupts cannot go to just any core. The tool only assigns resources in ways that match the hardware. The tool does not adjust the `ALL` column for host-specific resources. ]] ## Resource Sharing The Resource Sharing module allows any two hosts to share access to a certain system resource. This is useful when different hosts need access to the same resource. In the GUI, add a new Resource Sharing entry and select the resource to be shared. Choose the host that will share the resource and the host that will receive it. The tool updates the Resource Management Board Configuration files to enable shared access between the specified hosts. ## Peripheral Resource Partitioning ### Bandwidth Limiter This bandwidth limiter module helps you set up rate limiters for the SoC. Each rate limiter connects to a source VBUSM interface. You can set limits for reads, writes, and outstanding transactions. You can set these limits separately. In the GUI, pick a device and turn on bandwidth or transaction limits as needed. The tool creates an address-value pair data structure in the **qos_data.c** file. Software (usually the bootloader) uses this file to set the limits in the correct registers. ### QoS Configuration This QoS configuration module helps you set up Central Bus Architecture Subsystem (CBASS) QoS endpoints. QoS configuration includes two types of parameters. QoS settings include parameters that tune DMA performance in the interconnect and set up Input/Output Memory Management Unit (IOMMU) paths for masters. Each device can use different Channel IDs for DMA requests. You can set a unique QoS for each channel. In the GUI, pick a device, endpoints, and channels to set their QoS. You can add more than one QoS module for the same device provided that endpoints and channels do not overlap. The tool creates a simple address-value pair data structure in the **qos_data.c** output file. Software (such as the bootloader) uses this file to set all QoS settings. ### Firewall Configuration The Firewall configuration module creates the data you need to control firewalls. Firewalls control a host's access to a peripheral. Each firewall has a region. Pick a firewall and set the address range for the rules. Each region can have up to three permission slots. Each slot takes a name, Priv ID, and permissions. Many CPUs can share a Priv ID, so one slot can cover several CPUs. These slots decide what each CPU can do based on security level, privilege, and transaction type. For example, allow secure reads and writes but block insecure writes from A72 to Multimedia Card (MMC). By default, the tool sets the start and end addresses in the region, but you can set a custom region if needed. You can also pick a host's name and the tool fills in the Priv ID. With this data, the tool creates an array of Texas Instruments System Controller Interface (TISCI) message data to send to SYSFW for firewall setup. # Generated Output Files The tool generates configuration files that define resource allocations, QoS settings, and bandwidth limits for your target device. These files integrate with SDK components including bootloaders and drivers. The **Generated Files** panel on the right displays all output files. As you modify configurations, the tool automatically regenerates affected files. Files regenerated are marked with an <img src="images/updated_file_logo.png" alt="Updated file indicator" style="display:inline; height:1.5em;"> icon, indicating they require deployment to your SDK. **Example:** When you modify DMA channel allocations for the A53 host, the tool regenerates `rm-cfg.yaml` and `tifs-rm-cfg.yaml`. Both files display the <img src="images/updated_file_logo.png" alt="Updated file indicator" style="display:inline; height:1.5em;"> icon. Save and deploy these files to the appropriate U-Boot directory in your SDK to apply the changes. [[d! **Note:** The tool generates all files for your selected device. Not all files may be relevant to your specific use case. Refer to the **Used by** column in the table below to determine which files apply to your SDK configuration (PDK vs. MCU+ SDK, k3-image-gen vs. U-Boot, etc.). ]] Here is how you use these files: | Filename | Used by | Output destination | Comments | |---------------------------------------|--------------------|--------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| | rm-cfg.c | k3-image-gen | soc/`<soc>`/`<profile>`/rm-cfg.c | | | sciclient_defaultBoardcfg_rm.c | PDK sciclient | packages/ti/drv/sciclient/soc/V`<X>`/sciclient_defaultBoardcfg_rm.c | | | sciclient_defaultBoardcfg_rm_mcusdk.c | MCU+ SDK sciclient | source/drivers/sciclient/sciclient_default_boardcfg/`<soc>`/sciclient_defaultBoardcfg_rm.c | Drop `_mcusdk` suffix from filename when deploying | | sciclient_defaultBoardcfg_tifs_rm.c | PDK sciclient | packages/ti/drv/sciclient/soc/V`<X>`/sciclient_defaultBoardcfg_tifs_rm.c | | | tifs-rm-cfg.c | k3-image-gen | soc/`<soc>`/`<profile>`/tifs-rm-cfg.c | | | `<soc>`_qos.h | U-boot | ti-u-boot/arch/arm/mach-k3/r5/`<soc>`/`<soc>`_qos.h | | | `<soc>`_qos_uboot.c | U-boot | ti-u-boot/arch/arm/mach-k3/r5/`<soc>`/`<soc>`_qos_uboot.c | | | `<soc>`_qos_data.c | MCU+ SDK | source/drivers/qos/v0/soc/`<soc>`/qos_data.h | Copy contents of `<soc>_qos_data` structure into `gQosData` structure in qos_data.h | | `<soc>`_qos_data.c | PDK QoS | packages/ti/boot/sbl/soc/k3/`<soc>`_qos_data.c | | | sciclient_defaultBoardcfg.c | PDK sciclient | packages/ti/drv/sciclient/soc/V`<X>`/sciclient_defaultBoardcfg.c | | | sysfw_img_cfg.h | k3-image-gen | soc/`<soc>`/`<profile>`/sysfw_img_cfg.h | | | rm-cfg.yaml | U-boot | ti-u-boot/board/ti/`<soc>`/rm-cfg.yaml | | | tifs-rm-cfg.yaml | U-boot | ti-u-boot/board/ti/`<soc>`/tifs-rm-cfg.yaml | | ## Deployment Workflow After configuring resource allocations, QoS settings, and/or bandwidth limits, you must deploy the generated files to your SDK and rebuild the affected components. Follow this systematic workflow to ensure successful integration: ### Step-by-Step Deployment Process 1. **Identify Updated Files:** In the Generated Files panel, identify all files marked with the <img src="images/updated_file_logo.png" alt="Updated file indicator" style="display:inline; height:1.5em; vertical-align:middle;"> icon. Make note of which SDK components they affect. 2. **Save Configuration:** Save your current design file (`.syscfg`) to preserve your configuration. This file can be reopened later for further modifications or to revert changes if needed. 3. **Export Files:** Download or save each updated file from the tool to your local filesystem. 4. **Backup Original SDK Files:** Before replacing any files in your SDK, create backups of the original files. This allows you to restore the working configuration if issues arise during testing. 5. **Deploy to SDK Directories:** Copy each generated file to its destination path as specified in the File Reference Table above. Pay attention to: * SoC-specific paths (replace `<soc>` with your device, e.g., `am62ax`, `j721e`) * SDK version-specific paths (e.g., `V1`, `V2` directories in PDK) * Filename transformations (e.g., `sciclient_defaultBoardcfg_rm_mcusdk.c` → `sciclient_defaultBoardcfg_rm.c`) 6. **Rebuild Components:** Rebuild and flash each affected component. Verify successful operation. [[r! **Critical Warning:** Incorrect resource configurations can prevent your system from booting or cause runtime failures. Always maintain backups of working configurations and generated files. ]] # Troubleshooting * **Error: "No product with name 'K3-RESOURCE-CONFIGURATION' and version X.X.X found"** - This error typically occurs when using the desktop version. You likely missed the step to select the software product. When launching SysConfig GUI, make sure to browse to your K3-RESOURCE-CONFIGURATION location and select the product.json file using the `--product` parameter as shown in the Desktop Version section. * If you see the following error "**XYZ is not generated when configuration errors exist**", it means your resource allocation has an error(s). Adjust the allocations to fix the error(s) and then regenerate the output files. * While removing resources allocated to a certain core, if the "ALL" column in the "Resource Allocation Table" doesn't change, it means those resources are restricted to that particular core and only that core can consume them. [Refer to "Info" under "Review Resource Allocation" section for more details](#review-resource-allocation). # Desktop Version For computers without internet access, the Resource Partitioning Tool can be downloaded and installed on your local workstation by following these instructions: ## Installation Steps ### Step 1: Install SysConfig 1. Download the latest SysConfig from [ti.com/tool/SYSCONFIG](https://www.ti.com/tool/SYSCONFIG) 2. Run the installer 3. Install to the recommended location: * **Windows:** `c:\ti` * **Linux:** `~/ti` 4. **Verify Installation:** Check that SysConfig files exist at the installation path ### Step 2: Install Resource Partitioning Tool 1. Open Resource Explorer at [https://dev.ti.com/tirex/explore](https://dev.ti.com/tirex/explore) 2. Select the menu (icon with 3 horizontal lines) in the upper right and choose **Package Manager** 3. Scroll until you see **Resource partitioning tool for Multi-Core SoCs** 4. Select **More** and download either the latest version or a version compatible with your SDK 5. You should now have a ZIP file named `K3_Resource_Config_<version>_all.zip` 6. Extract the ZIP file to: * **Windows:** `c:\ti` * **Linux:** `~/ti` 7. **Verify Extraction:** Confirm that `K3_Resource_Config_<version>/.metadata/product.json` exists ### Step 3: Launch the Tool Run the appropriate command for your platform. Replace `<version>` with your installed version numbers (e.g., 1.25.0 for SysConfig, 1.0.0 for Resource Partitioning Tool). [[g! **Windows Command:** ``` c:\ti\sysconfig_<version>\sysconfig_gui.bat --product c:\ti\K3_Resource_Config_<version>\.metadata\product.json ``` ]] [[g! **Linux Command:** ``` ~/ti/sysconfig_<version>/sysconfig_gui.sh --product ~/ti/K3_Resource_Config_<version>/.metadata/product.json ``` ]] <div align="center" style="margin-top: 4em; font-size: smaller;"> <a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/"><img alt="Creative Commons License" style="border-width:0" src="./web_support/cc_license_icon.png" /></a><br />This work is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License</a>. </div>