Skip to content

Conversation

@basak-qcom
Copy link

There's 1.0.2 as well now. We need to catch up and ensure that tests pass. The revert to tests should not be commited, since the tests are missing source code, but they could go into a separate qcom/debian/latest if it's worth it.

lumag and others added 30 commits August 19, 2025 21:25
Files under Git control should not be using CR-LF for EOL. Converting to
native EOL symbols is handled by the git itself. Remove extra CR-LF
terminators from several files that I missed in the commit 0b7e39f
("src, inc: fix CRLF file endings")

Fixes: 0b7e39f ("src, inc: fix CRLF file endings")
Signed-off-by: Dmitry Baryshkov <[email protected]>
Cleand up unused DSP HAL code that was specific to Android and not used
in current implementation.

Signed-off-by: Jianping Li <[email protected]>
Files under Git control should not be using CR-LF for EOL. Converting to
native EOL symbols is handled by the git itself. Remove extra CR-LF
terminators from several files that I missed in the commit 0b7e39f
("src, inc: fix CRLF file endings")
Currently, rpcmem-allocated buffers used in remote calls are not recognized
by the RPC kernel driver, resulting in fallback to copy buffers for message
passing. This fallback introduces significant performance degradation, which
worsens with increasing buffer sizes.

This commit ensures that rpcmem-allocated buffers are properly registered
with the fastrpc memory framework upon allocation and deregistered upon
release. By enabling the kernel driver to identify the associated file
descriptors, it avoids the use of copy buffers during remote invocation,
thereby improving performance and efficiency.

Signed-off-by: Abhinav Parihar <[email protected]>
This PR addresses Issue #215 by removing the unused DSP HAL
implementation. The HAL code was Android-specific and not utilized in
the current DSP setup. Cleaning it up helps reduce maintenance overhead
and improves code clarity.

- Verified build passes without HAL dependencies
- No functional impact expected

Please review and let me know if any additional cleanup is needed.
…rk (#216)

Currently, rpcmem-allocated buffers used in remote calls are not
recognized by the RPC kernel driver, resulting in fallback to copy
buffers for message passing. This fallback introduces significant
performance degradation, which worsens with increasing buffer sizes.

This commit ensures that rpcmem-allocated buffers are properly
registered with the fastrpc memory framework upon allocation and
deregistered upon release. By enabling the kernel driver to identify the
associated file descriptors, it avoids the use of copy buffers during
remote invocation, thereby improving performance and efficiency.
Refactor DSP RPC daemons: unify adsprpcd, cdsprpcd, and sdsprpcd into a single source file

This change consolidates the daemon implementations into dsprpcd.c to reduce code duplication and simplify future maintenance.
Also unified the restart time handling across all daemons to ensure consistent behavior.
HIDL support is removed, as it was Android-specific and not utilized in the current DSP setup.

Signed-off-by: Jianping Li <[email protected]>
Have a single dsprpcd.c source file and compile all daemons(adsprpcd,
cdsprpcd, sdsprpcd) using that.
This commit introduces a foundational CI pipeline for FastRPC, enabling automated sync, build, and test processes using Docker and AWS infrastructure.

Key changes:
- Added `aws_s3_helper` composite action to support single/multi-upload and download modes, generate presigned URLs, and manage artifact uploads to S3
- Implemented `build_docker_image` composite action to clone and build the FastRPC Docker image
- Created `build` workflow using AWS runner to compile kernel artifacts, package outputs (Image, ramdisk, dtb, modules), and upload to S3
- Developed `build_workspace` composite action to prepare DLKM packaging and integrate with systemd-boot
- Added `test_action` composite action to parse artifact URLs, update metadata, inject links into cloudData, and generate LAVA job definitions
- Established `test` workflow to trigger LAVA jobs and collect results using the generated job definition

This pipeline ensures consistent pre-merge validation and artifact handling for FastRPC development.

Signed-off-by: Tharun Kumar Merugu <[email protected]>
Includes the following components:

**aws_s3_helper (composite action):**
- Supports three modes: single-upload, multi-upload, and download
- Uploads files to S3 with dynamic paths based on GitHub context
- Generates pre-signed URLs for uploaded files
- Outputs a single URL or a JSON file of URLs depending on mode
- Uploads presigned_urls.json as an artifact in multi-upload mode

**build_docker_image (composite action):**
- Clone fastrpc-image repository
- Build the docker image using fastrpc-image Dockerfile

**build (workflow):**
- Uses an AWS runner to build kernel artifacts
- Uses pull_docker_image to get docker image
- Builds the kernel using a reusable build action
- Packages and lists key artifacts (ramdisk, Image, vmlinux, dtb,
modules)
- Uploads artifacts to S3 using aws_s3_helper
- Cleans up workspace and appends a build summary

**build_workspace (composite action):**
- Downloads required dependencies (ramdisk, systemd-boot)
- Builds the kernel using Docker and outputs modules
- Packages DLKM into the downloaded ramdisk

**test_action (composite action):**
- Parses presigned_urls.json to extract artifact URLs
- Updates metadata.json and cloudData.json using Docker + jq
- Uploads updated metadata to S3 and injects its URL into cloudData
- Adds firmware and ramdisk URLs via pre-signed S3 links
- Generates a LAVA job definition using a Python script,
qualcomm_linux/job_render repository

**test (workflow):**
- Uses build_docker_image to build docker image
- Download artifact URLs list generated by build workflow
- Triggers the LAVA job using job definition
- Gets the LAVA job results

This commit establishes a basic docker-based CI pipeline for FastRPC
builds and automated artifact handling via AWS S3
FastRPC library supports 5 domains. There are some products where new
domains, GPDSP0 and GPDSP1, are supported. Add changes to support GPDSP
domains.

Signed-off-by: Ling Xu <[email protected]>
…#233)

- Ensures CI uses latest logic from development branch

Signed-off-by: Tharun Kumar Merugu <[email protected]>
Fix the build failure for client where the vendor header
fastrpc/rpcmem.h unconditionally includes AEEStdDef.h,
which is not exported by fastrpc project.

.../usr/include/fastrpc/rpcmem.h:7:10: fatal error: AEEStdDef.h: No such file or directory
    7 | #include "AEEStdDef.h"
      |          ^~~~~~~~~~~~~
compilation terminated.

Signed-off-by: Ekansh Gupta <[email protected]>
FastRPC library supports 5 domains. There are some products where new
domains, GPDSP0 and GPDSP1, are supported. Add changes to support GPDSP
domains.
The fastrpc_test.c now appends testlibdir and testdspdir to
LD_LIBRARY_PATH and DSP_LIBRARY_PATH, respectively. Previously,
these environment variables were overwritten.

Makefile.am was updated to pass -Dtestlibdir and -Dtestdspdir
to fastrpc_test.c, enabling correct environment variable
construction.

Signed-off-by: Vinayak Katoch <[email protected]>
Updated README.md to reflect make install for installation,
replacing manual file copying. Simplified running instructions
by removing the need to cd to /usr/bin, as files are now in
standard system paths.

Signed-off-by: Vinayak Katoch <[email protected]>
Updated README.md with clear instructions for pushing files and running
fastrpc_test on Linux and Android.
Moved all non-essential logs—such as warnings and non-user-impacting
errors—to the RUNTIME level. It retains a single log each for
framework initialization and deinitialization, and includes logs for
PD creation and handle open/close.

Signed-off-by: Vinayak Katoch <[email protected]>
The PRINT_WARN_USE_DOMAINS() macro, along with its conditional
Android-specific warning about non-domain usage of FastRPC, has
been entirely removed from the codebase.

Signed-off-by: Vinayak Katoch <[email protected]>
…ibility (#189)

Moved all non-essential logs—such as warnings and non-user-impacting
errors—to the RUNTIME level. It retains a single log each for framework
initialization and deinitialization, and includes logs for PD creation
and handle open/close.
* CI: Switch all reusable workflow references to 'development' branch

- Ensures CI uses latest logic from development branch

Signed-off-by: Tharun Kumar Merugu <[email protected]>

* CI Fix: Ensure proper packaging of ramdisk contents into cpio archive

- Added missing directory creation for ramdisk_test before decompression
- Ensured only contents of ramdisk_fastrpc are archived (not the folder itself)
- Applied safe and consistent cpio and gzip usage
- Improved error handling and quoting for robustness

Signed-off-by: Tharun Kumar Merugu <[email protected]>

---------

Signed-off-by: Tharun Kumar Merugu <[email protected]>
Integrates `make install` with `DESTDIR=${{ inputs.workspace_path }}/artifacts/ramdisk_fastrpc`
to automate the deployment of fastrpc bins, libs, and tests.

This change directly addresses upstream requirements (qualcomm/fastrpc#194)
for specific stub/skeleton placement. It eliminates manual copying,
ensuring proper installation paths essential for `LD_LIBRARY_PATH` and
`DSP_LIBRARY_PATH` configuration.

Resolves intermittent GitHub Actions LAVA test failures caused by incorrect library setup.

Signed-off-by: Tharun Kumar Merugu <[email protected]>
### Summary
This PR updates the deployment paths for `fastrpc_test` binaries and
resources in the GitHub Actions LAVA test environment to reflect recent
changes from qualcomm/fastrpc#194.. It also
ensures that environment variables for fastrpc testing are set up
correctly, addressing test execution failures in GitHub Actions LAVA due
to incorrect library paths.

### Root Cause
Recent updates to the fastrpc test framework now require that library
stubs and skels reside in:
- `/usr/local/lib/fastrpc_test`
- `/usr/local/share/fastrpc_test`

Previously, these paths were not enforced, leading to test execution
failures in the Test environment.

### Changes
- Eliminate the manual file copying step
- Utilize make install with DESTDIR=${{ inputs.workspace_path
}}/artifacts/ramdisk_fastrpc to place the files in the necessary
directories

### Reference
Upstream PR: qualcomm/fastrpc#194
- Appends `testlibdir` and `testdspdir` to `LD_LIBRARY_PATH` and
`DSP_LIBRARY_PATH`
- Updates `Makefile.am` to pass correct environment variables
- Simplifies installation and run instructions in `README.md`

### Impact
This change ensures compatibility with the updated fastrpc test
framework and restores test execution.
Remove dependency on the PD_EXCEPTION_LOGGING compile-time flag to ensure
PD exception logging is enabled by default. This change allows DSP fatal
logs to be redirected to the shared buffer for apps-side logging without
requiring explicit flag definition.

Signed-off-by: Abhinav Parihar <[email protected]>
- Removed separate `full_matrix` definition.
- Consolidated all configuration under a single `build_matrix`.
- Included fields: `machine`, `firmware` and `lavaname`.
- Removed the logic for extracting the LAVA machine name dynamically.
- The machine name is now directly assigned from build_matrix.lavaname,
reducing complexity and improving maintainability.

Signed-off-by: Tharun Kumar Merugu <[email protected]>
- Updated the `pull_request_target` GitHub Actions workflow.
- Ensures correct context and permissions for PR-triggered jobs.
- Improves security and reliability for workflows triggered by external contributions.

Signed-off-by: Tharun Kumar Merugu <[email protected]>
- Updated `paths-ignore` in GitHub Actions to exclude changes under `.github/**`.
- Prevents unnecessary workflow runs for CI configuration-only changes.
- Improves efficiency and reduces redundant CI executions.

Signed-off-by: Tharun Kumar Merugu <[email protected]>
This PR addresses recent workflow failures in GitHub Actions caused by
LAVA token permission issues during pull request events.

### Changes:
✅ **pull_request_target Update:** Ensures workflows triggered by pull
requests run in the correct context (base repository), allowing access
to required secrets and resolving permission-related test failures.
✅ **paths-ignore Addition:** Excludes .github/** from triggering CI
workflows, preventing unnecessary runs for changes limited to workflow
or metadata files.

These updates improve the reliability, security, and efficiency of the
CI pipeline.
Implement automated ABI/API compatibility checks on pull requests
targeting development and main branches. Build AArch64 libraries
using GNU cross-compilation toolchain, generate ABI dumps with
abi-dumper for libadsprpc/libcdsprpc/libsdsprpc, and compare
against baseline using abi-compliance-checker. Fail workflow on
incompatibilities and upload detailed HTML reports as artifacts.

Signed-off-by: Vinayak Katoch <[email protected]>
- Added support for the `qcs6490` target alongside existing `qcs9100` and `qcs8300` targets.
- Introduced a new `target` attribute For `qcs6490`, resolved DSP firmware and repo path discrepancy:
  - DSP firmware search path uses `qcs6490`
  - Repo folder path uses `qcm6490`
- Enhances target flexibility and ensures accurate path resolution for build and test workflows.

Signed-off-by: Tharun Kumar Merugu <[email protected]>
quic-mtharu and others added 18 commits October 23, 2025 19:44
- Updated path matching logic to allow matching the target name at any
position within the path, not just at the end.
- Improves compatibility with diverse directory structures and enhances
robustness of target-specific resolution.

Signed-off-by: Tharun Kumar Merugu <[email protected]>
- Renamed all four target configuration attributes for better clarity and consistency:
  - `deviceTree` is now used for the device tree blob name
  - `linuxFirmware` now refers to the firmware identifier
  - `lavaDeviceName` now indicates the LAVA machine name
  - `hexDSPBinary` now represents the Hexagon DSP binary identifier
- Updated mappings for all three targets.
- Improved the readability and maintainability of build matrix definitions.

Signed-off-by: Tharun Kumar Merugu <[email protected]>
Previously, PD exception logging was only enabled when the
PD_EXCEPTION_LOGGING compile-time flag was defined. This change enables
PD exception logging by default, allowing DSP fatal logs to be
redirected to the shared buffer for apps-side logging.
Currently dsprpcd attempts to dlopen() unversioned libraries such as
libadsp_default_listener.so,  This breaks on distributions like Debian,
which only ship ABI-versioned libraries in runtime packages.
It also risks binding to a different ABI in the future if a .so.2 is
introduced as mentioned in issue-230.

This patch updates the default listener library names to include .so.1,
and adds a fallback to the unversioned .so for environments that still
ship only the unversioned file.

Signed-off-by: Thirumalai Nagalingam <[email protected]>
Install  AEEStdDef.h, HAP_debug.h  and  HAP_farf.h that are required by
to compile the skel and stub files generated by qaic compiler.

qaic compiler includes these header files, however fastrpc does not
install these files, fix this by installing the required files.

Signed-off-by: Srinivas Kandagatla <[email protected]>
Ensures tlsKey is set up before any components that might rely on it.
Prevents redundant or conflicting initialization by removing duplicate pthread_key_create call.
Aligns initialization order for improved stability and correctness.

Signed-off-by: Aman Pandey <[email protected]>
Fixes #230 
- Currently `dsprpcd.c` attempts to `dlopen()` unversioned libraries
such as `libadsp_default_listener.so`, This breaks on distributions
which only ship ABI-versioned libraries in runtime packages.
- It also risks binding to a different ABI in the future if a .so.2 is
introduced, as mentioned in #230.

This patch updates the default listener library names to include `.so.1`
and adds a fallback to the un-versioned `.so` for environments that
still ship only the un-versioned file.
When PD exception logging is enabled by default, RootPD daemons will be
blocked as adspmsgd_init will wait for listener which is not initialized
by the time it is called. Initialize listener before adspmsgd
initialization.

Signed-off-by: Jianping Li <[email protected]>
When PD exception logging is enabled by default, RootPD daemons will be
blocked as adspmsgd_init will wait for listener which is not initialized
by the time it is called. Initialize listener before adspmsgd
intialization.
…nit (#254)

Moved pthread_key_create(&tlsKey, exit_thread) earlier in
fastrpc_apps_user_init to ensure thread-local storage is initialized
before dependent components.
This corrects the previous placement, which could lead to undefined
behavior.
Implement automated ABI/API compatibility checks on pull requests
targeting development and main branches. Build AArch64 libraries using
GNU cross-compilation toolchain, generate ABI dumps with abi-dumper for
libadsprpc/libcdsprpc/libsdsprpc, and compare against baseline using
abi-compliance-checker. Fail workflow on incompatibilities and upload
detailed HTML reports as artifacts.
…dling improvements (#246)

This PR introduces a set of tightly related changes, all aimed at
enabling support for the new **qcs6490** target in the CI pipeline.
While the update touches multiple areas, each change is interdependent
and collectively required to ensure proper integration and functionality
for `qcs6490`.

### Key Changes:

1. **Matrix Consolidation**
   - Removed the separate `full_matrix` definition.
- Unified the configuration under a single `build_matrix`, now including
all necessary fields: `machine`, `firmware`, `lavaname`, and `target`.
- This simplifies the pipeline setup and ensures consistent parameter
availability for job naming and test execution.

2. **Target-Specific Enhancements**
- **qcs6490 Support Added**: Enabled support for the `qcs6490` target
alongside existing `sa8775p` and `qcs8300` targets.
- **Target Path Resolution**: For qcs6490, the DSP firmware search path
uses `qcs6490`, while the repo folder path uses `qcm6490`. To handle
this discrepancy, a new `target` attribute is introduced:
     ```yaml
     target:
       description: target identifier
       type: string
       required: true
     ```

3. **Flexible Matching Logic**
- Updated the path matching logic to allow matching the target name
**anywhere** in the path, rather than only at the end. This improves
compatibility with diverse directory structures.

4. **Simplified LAVA Machine Assignment**
   - Removed the logic for extracting the LAVA machine name dynamically.
- The machine name is now directly assigned from
`build_matrix.lavaname`, reducing complexity and improving
maintainability.
   
5. **Attribute Renaming**
- Standardized all four target configuration attributes for clarity and
consistency:
      - `deviceTree`: Device tree blob name
      - `linuxFirmware`: Firmware identifier
      - `lavaDeviceName`: LAVA machine name
      - `hexDSPBinary`: Hexagon DSP binary identifier

---

All these changes are introduced as part of a single PR to ensure
**qcs6490 target support is complete and functional**. Each commit is
tightly coupled and contributes to the overall goal of enabling qcs6490
in a clean and maintainable way.
Install AEEStdDef.h, HAP_debug.h and HAP_farf.h that are required by to
compile the skel and stub files generated by qaic compiler.

qaic compiler includes these header files, however fastrpc does not
install these files, fix this by installing the required files.
@ekanshibu
Copy link

Hi @basak-qcom, currently, on Hamoa, the guess-dsp.sh is causing problems as no rules are defined for that platform. Is it possible to either add rule for Hamoa there or move to 1.0.2 which will drop the dependency from guess-dsp.sh?

@basak-qcom
Copy link
Author

Hi Ekansh,

I'd prefer to move to 1.0.2 as that's needed anyway, but when I tried that last week fastrpc_test failed, I think because it cannot find its own files again following the refactoring of that area of code. I will see if I can figure that out this week.

Copy link

@lool lool left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I realize this is draft, but so happy to see the tests land! I wonder if the payloads are non-free-firmware material

I see the patch for SONAME was merged between 1.0.0 and this version, so we don't have to worry about renaming the package with this update

FastRPC is the Qualcomm-proprietary RPC mechanism used to enable remote
function calls between the CPU and aDSP. Development package.
.
This package provides the FastRPC test suite.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should description or some README mention fastrpc_test?

@basak-qcom
Copy link
Author

Superseded by #13.

@basak-qcom basak-qcom closed this Jan 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.