Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
650905b
Remove CR-LF from the rest of the files
lumag Aug 19, 2025
028d21c
Clean-up: Remove unused Android-specific DSP HAL code
Jianping-Li Aug 15, 2025
14c7c27
Remove CR-LF from the rest of the files (#222)
ekanshibu Aug 20, 2025
2ce1792
rpcmem: Register rpcmem-allocated buffers with fastrpc memory framework
quic-parihar Aug 14, 2025
f7f0080
Clean-up: Remove unused Android-specific DSP HAL code (#223)
ekanshibu Aug 22, 2025
bd8980c
rpcmem: Register rpcmem-allocated buffers with fastrpc memory framewo…
ekanshibu Aug 22, 2025
d2ec9f5
Have a single source file for all daemons
Jianping-Li Aug 8, 2025
25c03ef
Have a single source file for all daemons (#209)
ekanshibu Aug 28, 2025
333bd54
CI: Docker-based pre-merge pipeline for FastRPC
quic-mtharu Aug 28, 2025
85aa6d5
CI: Pre merge verification - Sync, Build and Test. (#205)
ekanshibu Sep 3, 2025
1ee463d
Add changes to support GPDSPs offloading
quic-lxu5 Sep 3, 2025
83cfc8a
CI: Switch all reusable workflow references to 'development' branch (…
quic-mtharu Sep 4, 2025
2592eb4
inc: drop AEEStdDef.h from rpcmem.h to fix build
ekanshibu Sep 4, 2025
14e7963
Add changes to support GPDSPs offloading (#211)
ekanshibu Sep 8, 2025
53a2f9b
test: Update fastrpc_test to append library paths
quic-vkatoch Jul 14, 2025
487c44c
test: Update fastrpc_test README for install and run
quic-vkatoch Aug 20, 2025
90cddf9
Update README.md with Clear Instructions for fastrpc_test (#194)
ekanshibu Sep 9, 2025
9577aa7
Reduce log verbosity to prevent syslog flooding
quic-vkatoch Jul 4, 2025
aa08ed9
Remove PRINT_WARN_USE_DOMAINS macro completely
quic-vkatoch Aug 7, 2025
e7929db
Reduce log verbosity to prevent syslog flooding and improve error vis…
ekanshibu Sep 9, 2025
2d1768e
Fix ramdisk unpack and repack logic for fastrpc validation (#238)
quic-mtharu Sep 9, 2025
ec7bf16
CI: Automate fastrpc deployment
quic-mtharu Sep 12, 2025
4c9b901
CI: push fastrpc tests to appropriate directories (#242)
quic-mtharu Sep 18, 2025
939b2a1
Enable PD exception logging by default
quic-parihar Sep 16, 2025
8c54dc7
Matrix Consolidation & Simplified LAVA Machine Assignment
quic-mtharu Oct 14, 2025
3a5185a
CI Update: Refactored pull_request_target Workflow
quic-mtharu Oct 15, 2025
1f0f38a
CI Optimization: Ignore .github Directory in Workflow Trigger
quic-mtharu Oct 15, 2025
c5f6417
GitHub Actions Workflow Improvements (#250)
quic-mtharu Oct 17, 2025
efc28a5
Add GitHub Actions workflow for ABI/API compatibility check
quic-vkatoch Oct 15, 2025
fc10de3
Target-Specific Enhancements: qcs6490 Support & Path Resolution
quic-mtharu Oct 14, 2025
fe39cf9
Flexible Matching Logic for Target Path Resolution
quic-mtharu Oct 14, 2025
df3e9ac
Attribute Renaming: Standardized Target Configuration Fields
quic-mtharu Oct 14, 2025
8641a1a
Enable PD exception logging by default (#243)
ekanshibu Oct 27, 2025
1316edf
dsprpcd: dlopen versioned listener libraries with fallback
thiru31 Oct 19, 2025
12e90f2
inc: add required include files at instal
Nov 3, 2025
f0947c8
Move pthread_key_create initialization earlier in fastrpc_apps_user_init
quic-amanp Nov 4, 2025
f077e4d
dsprpcd: dlopen versioned listener libraries with fallback (#240)
ekanshibu Nov 4, 2025
bffbd35
Fix PD exception logging
Jianping-Li Nov 3, 2025
e5d427c
Fix PD exception logging (#256)
ekanshibu Nov 13, 2025
31de90e
Move pthread_key_create initialization earlier in fastrpc_apps_user_i…
ekanshibu Nov 14, 2025
c469d38
Add GitHub Actions workflow for ABI/API compatibility check (#249)
ekanshibu Nov 17, 2025
2723593
CI: Add qcs6490 target support with unified build matrix and path han…
quic-mtharu Nov 17, 2025
bffac3e
inc: add required include files at instal (#253)
ekanshibu Nov 27, 2025
181baac
Packaging merge from upstream/v1.0.1
basak-qcom Dec 16, 2025
d19a812
d/p/dlopen-abi-version: drop (fixed upstream)
basak-qcom Dec 16, 2025
045bc1c
d/gbp.conf: set upstream tag pattern
basak-qcom Dec 16, 2025
2517935
Changelog for 1.0.1-1
basak-qcom Dec 16, 2025
23ec723
Revert "Drop fastrpc-tests as source is not available"
basak-qcom Dec 16, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions ci/MACHINES.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,20 @@
{
"qcs9100-ride-r3": ["sa8775p-ride", "qcs9100-ride"],
"qcs8300-ride": ["qcs8300-ride", "qcs8300-ride"]
}
"qcs6490-rb3gen2": {
"deviceTree": "qcs6490-rb3gen2",
"linuxFirmware": "qcs6490",
"lavaDeviceName": "qcs6490",
"hexDSPBinary": "qcm6490"
},
"qcs9100-ride-r3": {
"deviceTree": "qcs9100-ride-r3",
"linuxFirmware": "sa8775p",
"lavaDeviceName": "qcs9100-ride",
"hexDSPBinary": "sa8775p"
},
"qcs8300-ride": {
"deviceTree": "qcs8300-ride",
"linuxFirmware": "qcs8300",
"lavaDeviceName": "qcs8300-ride",
"hexDSPBinary": "qcs8300"
}
}
28 changes: 0 additions & 28 deletions debian/README.source
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
Library packages
================

The upstream fastrpc library comprises six shared libraries and one set
of include files. The shared libraries are in pairs, supporting three
classes of DSP. The shared libraries for each class support a common ABI
Expand All @@ -24,28 +21,3 @@ safe, as permitted under Debian policy section 8.1.

libfastrpc1 ships all six shared libraries, and libfastrpc-dev ships the
six .so symlinks and the single set of headers.

Test suite binaries
===================

Currently upstream is unable to ship the sources for the test suite that is
included in the upstream release for technical toolchain reasons, contrary to
DFSG. Upstream aim to address this and this is tracked upstream at
https://github.com/qualcomm/fastrpc/issues/235.

However, they remain licensed under BSD-3-Clause, so are redistributable
by Debian. For this reason, I didn't bother with a repack to exclude the
files, instead just ensuring that these do not end up in any binary
builds. The upstream build system simply installs these directly with
`make install`, so it is trivial to put these files into
debian/not-installed with a high degree of confidence that they will not
slip through.

lintian source-contains-prebuilt-binary tags are overriden accordingly,
but only for the current set of named files so as not to miss anything
else that might have a different reason for being present.

Since the build system selects 'linux' and not 'android', binaries
shipped in test/android/ do not get installed by `make install` and
therefore do not appear in debian/not-installed even though they are
overridden in lintian.
7 changes: 7 additions & 0 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
fastrpc (1.0.1-1) UNRELEASED; urgency=medium

* New upstream release.
* d/p/dlopen-abi-version: drop (fixed upstream).

-- Robie Basak <[email protected]> Tue, 16 Dec 2025 15:05:04 +0000

fastrpc (1.0.0-1) unstable; urgency=medium

* Initial packaging. (Closes: #1116042)
Expand Down
9 changes: 9 additions & 0 deletions debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,12 @@ Description: Qualcomm FastRPC - support daemons and udev rules
This package provides the necessary support daemons used to supply object code
to the DSPs and the udev rules to make the DSPs available to users.
Depends: adduser, hexagon-dsp-binaries, ${misc:Depends}, ${shlibs:Depends}

Package: fastrpc-tests
Architecture: arm64
Description: Qualcomm FastRPC - test programs
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?

Depends: ${misc:Depends}, ${shlibs:Depends}
10 changes: 10 additions & 0 deletions debian/fastrpc-tests.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
usr/bin/fastrpc_test
usr/lib/${DEB_HOST_MULTIARCH}/fastrpc_test/libcalculator.so
usr/lib/${DEB_HOST_MULTIARCH}/fastrpc_test/libhap_example.so
usr/lib/${DEB_HOST_MULTIARCH}/fastrpc_test/libmultithreading.so
usr/share/fastrpc_test/v68/libcalculator_skel.so
usr/share/fastrpc_test/v68/libhap_example_skel.so
usr/share/fastrpc_test/v68/libmultithreading_skel.so
usr/share/fastrpc_test/v75/libcalculator_skel.so
usr/share/fastrpc_test/v75/libhap_example_skel.so
usr/share/fastrpc_test/v75/libmultithreading_skel.so
6 changes: 6 additions & 0 deletions debian/fastrpc-tests.lintian-overrides
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# These are binaries built for DSPs, not the host
fastrpc-tests binary: arch-dependent-file-in-usr-share [usr/share/fastrpc_test/*]
fastrpc-tests binary: binary-from-other-architecture [usr/share/fastrpc_test/*]
fastrpc-tests binary: hardening-no-relro [usr/share/fastrpc_test/*]
fastrpc-tests binary: library-not-linked-against-libc [usr/share/fastrpc_test/*]
fastrpc-tests binary: shared-library-lacks-stack-section [usr/share/fastrpc_test/*]
1 change: 1 addition & 0 deletions debian/gbp.conf
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
[DEFAULT]
debian-branch = debian/latest
upstream-tag = upstream/v%(version)s
12 changes: 0 additions & 12 deletions debian/not-installed
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,3 @@ usr/lib/${DEB_HOST_MULTIARCH}/libcdsp_default_listener.la
usr/lib/${DEB_HOST_MULTIARCH}/libcdsprpc.la
usr/lib/${DEB_HOST_MULTIARCH}/libsdsp_default_listener.la
usr/lib/${DEB_HOST_MULTIARCH}/libsdsprpc.la

# fastrpc_test components cannot currently ship in Debian; see README.source
usr/bin/fastrpc_test
usr/lib/${DEB_HOST_MULTIARCH}/fastrpc_test/libcalculator.so
usr/lib/${DEB_HOST_MULTIARCH}/fastrpc_test/libhap_example.so
usr/lib/${DEB_HOST_MULTIARCH}/fastrpc_test/libmultithreading.so
usr/share/fastrpc_test/v68/libcalculator_skel.so
usr/share/fastrpc_test/v68/libhap_example_skel.so
usr/share/fastrpc_test/v68/libmultithreading_skel.so
usr/share/fastrpc_test/v75/libcalculator_skel.so
usr/share/fastrpc_test/v75/libhap_example_skel.so
usr/share/fastrpc_test/v75/libmultithreading_skel.so
28 changes: 0 additions & 28 deletions debian/patches/dlopen-abi-version

This file was deleted.

1 change: 0 additions & 1 deletion debian/patches/series
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
dlopen-abi-version
open-shell-path
13 changes: 0 additions & 13 deletions debian/source/lintian-overrides

This file was deleted.

6 changes: 3 additions & 3 deletions inc/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# Export fastrpc headers
fastrpc_includedir = $(includedir)/fastrpc
fastrpc_include_HEADERS = $(top_srcdir)/inc/AEEStdErr.h
fastrpc_include_HEADERS += $(top_srcdir)/inc/AEEStdDef.h
fastrpc_include_HEADERS += $(top_srcdir)/inc/remote.h
fastrpc_include_HEADERS += $(top_srcdir)/inc/rpcmem.h
fastrpc_include_HEADERS += $(top_srcdir)/inc/HAP_farf.h
fastrpc_include_HEADERS += $(top_srcdir)/inc/HAP_debug.h

noinst_HEADERS = \
AEEBufBound.h \
AEEQList.h \
AEEStdDef.h \
AEEstd.h \
HAP_debug.h \
HAP_farf.h \
HAP_farf_internal.h \
HAP_pls.h \
adsp_current_process.h \
Expand Down
78 changes: 60 additions & 18 deletions src/dsprpcd.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,54 +15,96 @@
#include <unistd.h>
#include <string.h>

#ifndef ADSP_DEFAULT_LISTENER_NAME
#define ADSP_DEFAULT_LISTENER_NAME "libadsp_default_listener.so"
#ifndef ADSP_LISTENER_VERSIONED
#define ADSP_LISTENER_VERSIONED "libadsp_default_listener.so.1"
#define ADSP_LISTENER_UNVERSIONED "libadsp_default_listener.so"
#endif
#ifndef CDSP_DEFAULT_LISTENER_NAME
#define CDSP_DEFAULT_LISTENER_NAME "libcdsp_default_listener.so"
#ifndef CDSP_LISTENER_VERSIONED
#define CDSP_LISTENER_VERSIONED "libcdsp_default_listener.so.1"
#define CDSP_LISTENER_UNVERSIONED "libcdsp_default_listener.so"
#endif
#ifndef SDSP_DEFAULT_LISTENER_NAME
#define SDSP_DEFAULT_LISTENER_NAME "libsdsp_default_listener.so"
#ifndef SDSP_LISTENER_VERSIONED
#define SDSP_LISTENER_VERSIONED "libsdsp_default_listener.so.1"
#define SDSP_LISTENER_UNVERSIONED "libsdsp_default_listener.so"
#endif
#ifndef GDSP_DEFAULT_LISTENER_NAME
#define GDSP_DEFAULT_LISTENER_NAME "libcdsp_default_listener.so.1"
#ifndef GDSP_LISTENER_VERSIONED
#define GDSP_LISTENER_VERSIONED "libcdsp_default_listener.so.1"
#define GDSP_LISTENER_UNVERSIONED "libcdsp_default_listener.so"
#endif

typedef int (*dsp_default_listener_start_t)(int argc, char *argv[]);

// Result struct for dlopen.
struct dlopen_result {
void *handle;
const char *loaded_lib_name;
};

/**
* Attempts to load a shared library using dlopen.
* If the versioned name fails, falls back to the unversioned name.
* Returns both the handle and the name of the library successfully loaded.
*/
static struct dlopen_result try_dlopen(const char *versioned, const char *unversioned) {
struct dlopen_result result = { NULL, NULL };

result.handle = dlopen(versioned, RTLD_NOW);
if (result.handle) {
result.loaded_lib_name = versioned;
return result;
}

if (unversioned) {
VERIFY_IPRINTF("dlopen failed for %s: %s; attempting fallback %s",
versioned, dlerror(), unversioned);
result.handle = dlopen(unversioned, RTLD_NOW);
if (result.handle) {
result.loaded_lib_name = unversioned;
return result;
}
}
return result;
}

int main(int argc, char *argv[]) {
int nErr = 0;
void *dsphandler = NULL;
const char* lib_name;
struct dlopen_result dlres = { NULL, NULL };
const char* lib_versioned;
const char* lib_unversioned;
const char* dsp_name;
dsp_default_listener_start_t listener_start;

#ifdef USE_ADSP
lib_name = ADSP_DEFAULT_LISTENER_NAME;
lib_versioned = ADSP_LISTENER_VERSIONED;
lib_unversioned = ADSP_LISTENER_UNVERSIONED;
dsp_name = "ADSP";
#elif defined(USE_SDSP)
lib_name = SDSP_DEFAULT_LISTENER_NAME;
lib_versioned = SDSP_LISTENER_VERSIONED;
lib_unversioned = SDSP_LISTENER_UNVERSIONED;
dsp_name = "SDSP";
#elif defined(USE_CDSP)
lib_name = CDSP_DEFAULT_LISTENER_NAME;
lib_versioned = CDSP_LISTENER_VERSIONED;
lib_unversioned = CDSP_LISTENER_UNVERSIONED;
dsp_name = "CDSP";
#elif defined(USE_GDSP)
lib_name = GDSP_DEFAULT_LISTENER_NAME;
lib_versioned = GDSP_LISTENER_VERSIONED;
lib_unversioned = GDSP_LISTENER_UNVERSIONED;
dsp_name = "GDSP";
#else
goto bail;
#endif
VERIFY_EPRINTF("%s daemon starting", dsp_name);

while (1) {
if (NULL != (dsphandler = dlopen(lib_name,RTLD_NOW))) {
dlres = try_dlopen(lib_versioned, lib_unversioned);
if (NULL != dlres.handle) {
if (NULL != (listener_start = (dsp_default_listener_start_t)dlsym(
dsphandler, "adsp_default_listener_start"))) {
dlres.handle, "adsp_default_listener_start"))) {
VERIFY_IPRINTF("adsp_default_listener_start called");
nErr = listener_start(argc, argv);
}
if (0 != dlclose(dsphandler)) {
VERIFY_EPRINTF("dlclose failed for %s", lib_name);
if (0 != dlclose(dlres.handle)) {
VERIFY_EPRINTF("dlclose failed for %s", dlres.loaded_lib_name);
}
} else {
VERIFY_EPRINTF("%s daemon error %s", dsp_name, dlerror());
Expand Down
18 changes: 8 additions & 10 deletions src/fastrpc_apps_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -4040,15 +4040,6 @@ static int domain_init(int domain, int *dev) {
ret == (int)(DSP_AEE_EOFFSET + AEE_EUNSUPPORTED),
ret);
}
#ifdef PD_EXCEPTION_LOGGING
if ((dom != SDSP_DOMAIN_ID) && hlist[domain].dsppd == ROOT_PD) {
remote_handle64 handle = 0;
handle = get_adspmsgd_adsp1_handle(domain);
if (handle != INVALID_HANDLE) {
adspmsgd_init(handle, 0x10); // enable PD exception logging
}
}
#endif
fastrpc_perf_init(hlist[domain].dev, domain);
VERIFY(AEE_SUCCESS ==
(nErr = fastrpc_latency_init(hlist[domain].dev, &hlist[domain].qos)));
Expand All @@ -4059,6 +4050,13 @@ static int domain_init(int domain, int *dev) {
VERIFY(AEE_SUCCESS == (nErr = listener_android_domain_init(
domain, hlist[domain].th_params.update_requested,
&hlist[domain].th_params.r_sem)));
if ((dom != SDSP_DOMAIN_ID) && hlist[domain].dsppd == ROOT_PD) {
remote_handle64 handle = 0;
handle = get_adspmsgd_adsp1_handle(domain);
if (handle != INVALID_HANDLE) {
adspmsgd_init(handle, 0x10); // enable PD exception logging
}
}
bail:
if (nErr != AEE_SUCCESS) {
domain_deinit(domain);
Expand Down Expand Up @@ -4171,6 +4169,7 @@ static int fastrpc_apps_user_init(void) {

VERIFY(AEE_SUCCESS == (nErr = PL_INIT(gpls)));
VERIFY(AEE_SUCCESS == (nErr = PL_INIT(rpcmem)));
VERIFY(AEE_SUCCESS == (nErr = pthread_key_create(&tlsKey, exit_thread)));
fastrpc_mem_init();
fastrpc_context_table_init();
fastrpc_log_init();
Expand Down Expand Up @@ -4201,7 +4200,6 @@ static int fastrpc_apps_user_init(void) {
pthread_mutex_init(&hlist[i].async_init_deinit_mut, 0);
}
listener_android_init();
VERIFY(AEE_SUCCESS == (nErr = pthread_key_create(&tlsKey, exit_thread)));
VERIFY(AEE_SUCCESS == (nErr = PL_INIT(apps_std)));
GenCrc32Tab(POLY32, crc_table);
fastrpc_notif_init();
Expand Down