Add reserved queue support for QNX
This commit adds support for reserved queues on QNX (SDOCM00114908).
Signed-off-by: VW <vwan@ti.com>
This commit adds support for reserved queues on QNX (SDOCM00114908).
Signed-off-by: VW <vwan@ti.com>
Re-work MessageQ_put to eliminate transport recursion
On Linux, when delivering an inbound message sent from another process
on the same processor, the logic in MessageQ_put caused a transport
infinite recursion. In other words, the message was given back to the
transport instead of being delivered to the queue. The new logic is to
attempt the local message deliver first; if it fails, then give it to
the transport for delivery instead of failing back to the caller.
On Linux, when delivering an inbound message sent from another process
on the same processor, the logic in MessageQ_put caused a transport
infinite recursion. In other words, the message was given back to the
transport instead of being delivered to the queue. The new logic is to
attempt the local message deliver first; if it fails, then give it to
the transport for delivery instead of failing back to the caller.
SDOCM00114478 Incorrect thread safety in MessageQ_setup (Linux)
Statically initialize the mutex object; removed the dynamic init
call. Protect the entire MessageQ_setup function inside the gate.
Added gate protection to MessageQ_destroy. Decrement the reference
count (this was missing).
Statically initialize the mutex object; removed the dynamic init
call. Protect the entire MessageQ_setup function inside the gate.
Added gate protection to MessageQ_destroy. Decrement the reference
count (this was missing).
Add autoconf generated file
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Simplify configuration of maximum name length in NameServer
This commit cleans up how the maximum name length is configured in NameServer.
Now the user only needs to configure it during instance creation, and to
configure it at the remote level in
packages/ti/ipc/namesrv/_NameServerRemoteRpmsg.h.
When a name passed to the NameServer remote exceeds the length it can support,
it now returns NameServer_E_NAMETOOLONG.
The NameServerApp is updated to test for long names that exceed the
maximum length.
This commit addresses SDOCM00111686.
Signed-off-by: VW <vwan@ti.com>
This commit cleans up how the maximum name length is configured in NameServer.
Now the user only needs to configure it during instance creation, and to
configure it at the remote level in
packages/ti/ipc/namesrv/_NameServerRemoteRpmsg.h.
When a name passed to the NameServer remote exceeds the length it can support,
it now returns NameServer_E_NAMETOOLONG.
The NameServerApp is updated to test for long names that exceed the
maximum length.
This commit addresses SDOCM00111686.
Signed-off-by: VW <vwan@ti.com>
SDOCM00103540 Incorrect number of hardware spin locks on DRA7XX
Set the number of hardware spin locks to 256 in spinlockDelegate.
Set the number of hardware spin locks to 256 in spinlockDelegate.
Set default reserved messages queues to zero
The default value for reserved message queues in the LAD
configuration should be zero. I accidentally checked-in
my test copy. This commit corrects that mistake.
The default value for reserved message queues in the LAD
configuration should be zero. I accidentally checked-in
my test copy. This commit corrects that mistake.
Specify Address Family for RPMessage in products.mak
We use the Linux kernel version to make a guess at the value
of AF_RPMSG. However, depending on the kernel configuration,
this guess could be wrong. In this case, you must specify the
AF_RPMSG value directly. This had been done in ipc-linux.mak,
but this was too obscure. So, I moved it to products.mak.
We use the Linux kernel version to make a guess at the value
of AF_RPMSG. However, depending on the kernel configuration,
this guess could be wrong. In this case, you must specify the
AF_RPMSG value directly. This had been done in ipc-linux.mak,
but this was too obscure. So, I moved it to products.mak.
Android: Update to LADs makefile after cfg file move
LAD config files were moved into a cfg folder. Updated the Android.mk
file to reflect the move and included the addition of a MessageQCfg.c
file.
LAD config files were moved into a cfg folder. Updated the Android.mk
file to reflect the move and included the addition of a MessageQCfg.c
file.
Added comment to explain hazards of enabling debug trace
SocketFxns.c is used by both LAD and TransportRpmsg. When debug
trace is enabled in LAD, it can cause data corruption. I explain
this in the comment and provide advice.
SocketFxns.c is used by both LAD and TransportRpmsg. When debug
trace is enabled in LAD, it can cause data corruption. I explain
this in the comment and provide advice.
Generated makefile to follow up the previous commit.
SDOCM00114730 Reserved message queues on Linux/Keystone II
Added numReservedEntries to MessageQ_Config structure; defines
how many queues to reserve. Moved all LAD config files into cfg
folder to separate configuration data from implementation code.
Added MessageQCfg.c file so users could specify MessageQ config
(such as reserved queues). New concept of queue port number: this
is computed by adding an offset to the queue index. Needed to
avoid collisions with port numbers reserved by services (such as
RPMessage, NameServer). Queue port number is embedded in queueId
and used to address messages. New macro MessageQ_getQueueIndex to
extract queue index from QID. Implemented MessageQ_openQueueId on
Linux. Added port number management to ti.sdo.ipc.MessageQ module.
LAD daemon: removed slot zero reservation for NameServer; added
queue index logic to manage reserved queues; use port number in
queueId construction; reference new MessageQ_cfg object.
TransportRpmsg: replaced queue index references with queue port.
Added numReservedEntries to MessageQ_Config structure; defines
how many queues to reserve. Moved all LAD config files into cfg
folder to separate configuration data from implementation code.
Added MessageQCfg.c file so users could specify MessageQ config
(such as reserved queues). New concept of queue port number: this
is computed by adding an offset to the queue index. Needed to
avoid collisions with port numbers reserved by services (such as
RPMessage, NameServer). Queue port number is embedded in queueId
and used to address messages. New macro MessageQ_getQueueIndex to
extract queue index from QID. Implemented MessageQ_openQueueId on
Linux. Added port number management to ti.sdo.ipc.MessageQ module.
LAD daemon: removed slot zero reservation for NameServer; added
queue index logic to manage reserved queues; use port number in
queueId construction; reference new MessageQ_cfg object.
TransportRpmsg: replaced queue index references with queue port.
Fix build warnings from rpmsg-rpc-stress test in QNX
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Clean up exported contents in QNX
This commit modifies 'make install' to export only tests that we run. It also
puts all tests into the 'tests' subdirectory and builds them all in debug and
release modes for consistency.
Signed-off-by: VW <vwan@ti.com>
This commit modifies 'make install' to export only tests that we run. It also
puts all tests into the 'tests' subdirectory and builds them all in debug and
release modes for consistency.
Signed-off-by: VW <vwan@ti.com>
Generated script and makefiles to follow up the previous commit.
Added AF_RPMSG to products.mak to improve ease-of-use
When you don't have access to your Linux kernel source, or you
need to override the Address Family (AF) configuration, you can
now define the AF for RPMSG in your products.mak file. Relaxed
the requirement to specify KERNEL_INSTALL_DIR for TCI6638. Fixed
up the include path to put the kernel include folder ahead of our
IPC linux/include folder.
When you don't have access to your Linux kernel source, or you
need to override the Address Family (AF) configuration, you can
now define the AF for RPMSG in your products.mak file. Relaxed
the requirement to specify KERNEL_INSTALL_DIR for TCI6638. Fixed
up the include path to put the kernel include folder ahead of our
IPC linux/include folder.
Eliminate build warnings in QNX build
This commit eliminates all build warnings in the QNX IPC build process.
It addresses SDOCM00113501.
Signed-off-by: VW <vwan@ti.com>
This commit eliminates all build warnings in the QNX IPC build process.
It addresses SDOCM00113501.
Signed-off-by: VW <vwan@ti.com>
Reduce QNX build output verbosity
This commit reduces the build output verbosity, and allows it to be configured
in the qnx/quiet.mk file.
This helps address SDOCM00113501.
Signed-off-by: VW <vwan@ti.com>
This commit reduces the build output verbosity, and allows it to be configured
in the qnx/quiet.mk file.
This helps address SDOCM00113501.
Signed-off-by: VW <vwan@ti.com>
Rework MessageQ_put to prioritize transport if given
In MessageQ_put, use secondary transport (if given) regardless
of destination queue. For processor local deliver, verify that
destination queue is process local, otherwise give error. Changed
secondary transport array to base interface type. Added interface
casting as needed.
In MessageQ_put, use secondary transport (if given) regardless
of destination queue. For processor local deliver, verify that
destination queue is process local, otherwise give error. Changed
secondary transport array to base interface type. Added interface
casting as needed.
Fixed run-time configuration of cluster baseId
New method to encapsulate the run-time configuration of IPC
cluster baseId: Ipc_clusterConfig. Call this method from a
startup first function after setting the cluster baseId. Set
Ipc.entry array with valid procId when cluster baseId is known,
otherwise set to INVALIDID. Set MultiProc.clusterProcList array
as above.
New method to encapsulate the run-time configuration of IPC
cluster baseId: Ipc_clusterConfig. Call this method from a
startup first function after setting the cluster baseId. Set
Ipc.entry array with valid procId when cluster baseId is known,
otherwise set to INVALIDID. Set MultiProc.clusterProcList array
as above.
New method for run-time configuration of cluster baseId
Added MultiProc_setBaseIdOfCluster(). Only supported on SYS/BIOS.
This method should be called from a startup first function.
Added MultiProc_setBaseIdOfCluster(). Only supported on SYS/BIOS.
This method should be called from a startup first function.
Linux: Added option to set base cluster id in LAD
An option (-b) has been added to LAD to set the cluster's base id when
launching LAD.
An option (-b) has been added to LAD to set the cluster's base id when
launching LAD.
SDOCM00114696 Add method to return address of shared region entry
Added method to return the address of the in-memory shared region
entry structure; SharedRegion_getEntryPtr. Use this method from
a pre-startup hook function to configure the entry.
Added method to return the address of the in-memory shared region
entry structure; SharedRegion_getEntryPtr. Use this method from
a pre-startup hook function to configure the entry.
SDOCM00114392 Interrupt module on tci6638 does not support clusters
Added segmentSize to MultiProcSetup to define the number of
processors on the device. Needed for sending interrupts to
processors in a different cluster but still on the local device.
Added cluster awareness. Added cluster support to the tci6638
package. Cleaned up Log_print statements. Replaced interface
IInterrupt references with Interrupt module references.
Added segmentSize to MultiProcSetup to define the number of
processors on the device. Needed for sending interrupts to
processors in a different cluster but still on the local device.
Added cluster awareness. Added cluster support to the tci6638
package. Cleaned up Log_print statements. Replaced interface
IInterrupt references with Interrupt module references.
Fixed QNX build error due to transport header file changes
Updated the location of the transport header files to match
what is expected by MessageQ.h.
Updated the location of the transport header files to match
what is expected by MessageQ.h.
Add IPC cluster support to socket utility functions
The socket connect and bind functions need to map procId
to clusterId in order to correctly index into the rprocList[]
and assign the correct vproc_id.
The socket connect and bind functions need to map procId
to clusterId in order to correctly index into the rprocList[]
and assign the correct vproc_id.
Generated makefiles to follow up on the previous commit.
Add missing transport header files to Linux install command
Added new transport interface header files to top-level install
goal. Promoted Std.h to top-level install goal. Also added
TransportRpmsg.h because application needs to call the create
method. Moved location of interface files and transport files to
respective folders under ti/ipc for better name recognition.
Added new transport interface header files to top-level install
goal. Promoted Std.h to top-level install goal. Also added
TransportRpmsg.h because application needs to call the create
method. Moved location of interface files and transport files to
respective folders under ti/ipc for better name recognition.
Remove references to SysLink in QNX code base
This commit removes all references to "SysLink" in the QNX IPC code base, with
the exception that it preserves the file and directory names. The decision was
made to preserve the path names to avoid breaking any existing apps that may
be including headers and/or libraries based on the existing directory
structure, and to ease git history lookup going forward.
Note that this does introduce a break in the naming of internal features such
as SYSLINK_DEBUG and SYSLINK_DEBUG_TRACE_LEVEL.
This helps address SDOCM00108142.
Signed-off-by: VW <vwan@ti.com>
This commit removes all references to "SysLink" in the QNX IPC code base, with
the exception that it preserves the file and directory names. The decision was
made to preserve the path names to avoid breaking any existing apps that may
be including headers and/or libraries based on the existing directory
structure, and to ease git history lookup going forward.
Note that this does introduce a break in the naming of internal features such
as SYSLINK_DEBUG and SYSLINK_DEBUG_TRACE_LEVEL.
This helps address SDOCM00108142.
Signed-off-by: VW <vwan@ti.com>
Change max threads to 25 in both MessageQMulti app and documentation in QNX
This helps address SDOCM00104833.
Signed-off-by: VW <vwan@ti.com>
This helps address SDOCM00104833.
Signed-off-by: VW <vwan@ti.com>
docs: Remove BIOS-only comment from GateMP
GateMP is now supported on HLOS's (for some devices), so remove the
errant note that it's only supported on SYS/BIOS.
Signed-off-by: Chris Ring <cring@ti.com>
GateMP is now supported on HLOS's (for some devices), so remove the
errant note that it's only supported on SYS/BIOS.
Signed-off-by: Chris Ring <cring@ti.com>
Update QNX IPC loader to RIDL 2.1.0
This commit updates the loader in QNX IPC to the latest codebase in RIDL 2.1.0,
which can be found at https://gforge.ti.com/gf/project/ridl_oss. It also brings
in any relevant differences between SysLink 2 and RIDL 2.0.
This addresses SDOCM00101007.
Signed-off-by: VW <vwan@ti.com>
This commit updates the loader in QNX IPC to the latest codebase in RIDL 2.1.0,
which can be found at https://gforge.ti.com/gf/project/ridl_oss. It also brings
in any relevant differences between SysLink 2 and RIDL 2.0.
This addresses SDOCM00101007.
Signed-off-by: VW <vwan@ti.com>
Move 'ret' declaration inside XDC %if to avoid 'unused' warning
Generated new autoreconf makefile
These are the new generated autoreconf makefiles from the previous
commit which modified two makefiles.
These are the new generated autoreconf makefiles from the previous
commit which modified two makefiles.
Android: Added makefile to build transportrpmsg library
Added an Android.mak file to build newly separated transportRpmsg library.
Updated the corresponding host-side test examples to link with the library.
Added an Android.mak file to build newly separated transportRpmsg library.
Updated the corresponding host-side test examples to link with the library.
Added transport factory to remove circular dependency
There was a circular dependency between the ipc and transport
libraries. To break this circle, moved the transport create
method into a factory. Ipc invokes the factory methods through
a function table configured with a new Ipc_transportConfig
method called by the application. Renamed transport library to
follow our naming conventions: libtitransportrpmsg.
There was a circular dependency between the ipc and transport
libraries. To break this circle, moved the transport create
method into a factory. Ipc invokes the factory methods through
a function table configured with a new Ipc_transportConfig
method called by the application. Renamed transport library to
follow our naming conventions: libtitransportrpmsg.
SDOCM00114391 IPC cluster support is missing on Linux
Added cluster support on IPC Linux implementation. Added two new
fields to the MultiProc_Config structure: numProcsInCluster, and
baseIdOfCluster. Updated all LAD config files with new fields.
Made changes to iterate over processors in cluster instead of
iterating over all processors in the system. Mapped procId to
clusterId as needed. Added LOG3 macro to LAD.
Added new cluster fields to MultiProc config struct
Linux and QNX share the same MultiProc API implementation
but different MultiProc configuration definitions. I needed
to add the new cluster fields to the QNX config struct. This
does not add cluster support to QNX.
Added cluster support on IPC Linux implementation. Added two new
fields to the MultiProc_Config structure: numProcsInCluster, and
baseIdOfCluster. Updated all LAD config files with new fields.
Made changes to iterate over processors in cluster instead of
iterating over all processors in the system. Mapped procId to
clusterId as needed. Added LOG3 macro to LAD.
Added new cluster fields to MultiProc config struct
Linux and QNX share the same MultiProc API implementation
but different MultiProc configuration definitions. I needed
to add the new cluster fields to the QNX config struct. This
does not add cluster support to QNX.
Code formatting. Broke long lines into short ones.
SDOCM00114518 MessageQ_setMsgPri overwrites entire flags field
The macro was simply assigning the new message priority to the
flags field in the message header. Fixed macro to read, clear,
then update only the priority bits of the flags field ([1:0]).
The macro was simply assigning the new message priority to the
flags field in the message header. Fixed macro to read, clear,
then update only the priority bits of the flags field ([1:0]).
Removed registerTransportId from MessageQ.xdc file
The new register/unregister transport ID functions were in the
MessageQ XDC spec file. This caused them to be defined using the
long name (i.e. package prefix). They are intended to be called
by clients using the short name (like MessageQ_put).
The new register/unregister transport ID functions were in the
MessageQ XDC spec file. This caused them to be defined using the
long name (i.e. package prefix). They are intended to be called
by clients using the short name (like MessageQ_put).
SDOCM114476 Ipc_start is not thread safe (Linux)
Added a Posix mutex and a reference count to serialize the Ipc_start
and Ipc_stop methods. Added a module object to hold the mutex and
reference count.
Added a Posix mutex and a reference count to serialize the Ipc_start
and Ipc_stop methods. Added a module object to hold the mutex and
reference count.
Instance converter methods need to be inline functions.
Added missing copyright notice. Added comments. The instance
converter methods are defined in the header file. Need to be
declared as inline methods to avoid multiple implementation
link error.
Added missing copyright notice. Added comments. The instance
converter methods are defined in the header file. Need to be
declared as inline methods to avoid multiple implementation
link error.
Fix GateMP to allow SR0's physical address to be different from its virtual
This commit fixes GateMP host-support (when host is running an HLOS) to allow
SR0's physical address to be a different value from its virtual address on the
slave core, by performing a virtual to physical address translation on the
addresses of the inUse arrays prior to stashing them into a NameServer entry
on the slave.
This addresses CQ SDOCM00113149.
Signed-off-by: VW <vwan@ti.com>
This commit fixes GateMP host-support (when host is running an HLOS) to allow
SR0's physical address to be a different value from its virtual address on the
slave core, by performing a virtual to physical address translation on the
addresses of the inUse arrays prior to stashing them into a NameServer entry
on the slave.
This addresses CQ SDOCM00113149.
Signed-off-by: VW <vwan@ti.com>
vring initialization in QNX is incorrectly clearing address 0
This commit fixes the vring initialization code to clear the vring as opposed
to physical address 0.
This addresses SDOCM00114409.
Signed-off-by: VW <vwan@ti.com>
This commit fixes the vring initialization code to clear the vring as opposed
to physical address 0.
This addresses SDOCM00114409.
Signed-off-by: VW <vwan@ti.com>
SDOCM00114390 Incorrect procId in NameServer_get used by lad daemon
Fixed call to NameServer_getRemote; pass in procId array element
instead of loop index value.
Fixed call to NameServer_getRemote; pass in procId array element
instead of loop index value.
Rename ipc-trace paths to /dev/ipc-trace/<core name> in QNX
Renaming the trace paths to match the convention adopted by /dev/ipc-file
and /dev/ipc-state, so that MultiProc id is not required to be known ahead
of time.
Note that this introduces a break in compatibility for anyone who's been
relying on the path name /dev/ipc-trace#.
This addresses SDOCM00113638.
Signed-off-by: VW <vwan@ti.com>
Renaming the trace paths to match the convention adopted by /dev/ipc-file
and /dev/ipc-state, so that MultiProc id is not required to be known ahead
of time.
Note that this introduces a break in compatibility for anyone who's been
relying on the path name /dev/ipc-trace#.
This addresses SDOCM00113638.
Signed-off-by: VW <vwan@ti.com>
Make MessageQCopy_send less noisy in QNX
This patch downgrades a common error message from MessageQCopy_send to an
info message of GT_2CLASS. The message was appearing even during normal
operation when a slave is not attached.
This addresses SDOCM00106179.
Signed-off-by: VW <vwan@ti.com>
This patch downgrades a common error message from MessageQCopy_send to an
info message of GT_2CLASS. The message was appearing even during normal
operation when a slave is not attached.
This addresses SDOCM00106179.
Signed-off-by: VW <vwan@ti.com>
Removed unused implementation of MessageQ_Params_init
The implementation of MessageQ_Params_init is now a static inline
in the header file. Need to remove this unused implementation in
MessageQ_daemon.c (fixed multiple definition compiler error).
The implementation of MessageQ_Params_init is now a static inline
in the header file. Need to remove this unused implementation in
MessageQ_daemon.c (fixed multiple definition compiler error).
SDOCM00113609 Add version support for MessageQ_Params structure
Added a version field to the params structure; used internally
to track the structure definition changes. MessageQ_Params_init
is now a static inline function which embeds the current version
in the call site. Added new MessageQ_Params_init__S function to
initialize the given params structure. Updated MessageQ_create
to be version aware. Fixed uninitialized params structure in
the MessageQ instance object.
Added a version field to the params structure; used internally
to track the structure definition changes. MessageQ_Params_init
is now a static inline function which embeds the current version
in the call site. Added new MessageQ_Params_init__S function to
initialize the given params structure. Updated MessageQ_create
to be version aware. Fixed uninitialized params structure in
the MessageQ instance object.
Added function hook for the MessageQ_put method
New feature where you can register a function hook to be called
near the beginning of the MessageQ_put method. New type definition
for the hook function. Runtime API to register the hook function.
Also added a configuration parameter so you can register your hook
function in the application configuration script.
New feature where you can register a function hook to be called
near the beginning of the MessageQ_put method. New type definition
for the hook function. Runtime API to register the hook function.
Also added a configuration parameter so you can register your hook
function in the application configuration script.
SDOCM00114110 IPC custom build failure, part 2
Updates from code review comments. Build include path based
on package path, not from explicit repository names. This will
ensure correct include path as new repositories are added to
the package path.
Updates from code review comments. Build include path based
on package path, not from explicit repository names. This will
ensure correct include path as new repositories are added to
the package path.
Add MessageQ interface header files to QNX include area
Even though QNX doesn't implement the new MessageQTransport interface,
it is including a common header (packages/ti/ipc/MessageQ.h) that does
reference the new interfaces.
Even though QNX doesn't implement the new MessageQTransport interface,
it is including a common header (packages/ti/ipc/MessageQ.h) that does
reference the new interfaces.
Initial MessageQ transport implementation
Multiple transport interface support for ti.sdo.ipc.MessageQ
Added new ITransport base class interface. New INetworkTransport
interface. MessageQ is now able to register multiple transport
instances. Dummy network transport to work around RTSC bug.
Added new ITransport base class interface. New INetworkTransport
interface. MessageQ is now able to register multiple transport
instances. Dummy network transport to work around RTSC bug.
SDOCM00114110 IPC custom build failure with XDCtools core product
When building with the XDCtools core product, the IPC custom build
was not finding the target header files. Fixed the makefile templates
to discover the repository for the targets and to add this to the
include path.
When building with the XDCtools core product, the IPC custom build
was not finding the target header files. Fixed the makefile templates
to discover the repository for the targets and to add this to the
include path.
Cleanup, removed unused local array: sharedCreateId
This array was allocated and initialized at config time but never
used. Furthermore, the array size was always zero.
This array was allocated and initialized at config time but never
used. Furthermore, the array size was always zero.
Move cluster processor list from config to module state
The list of processors in the cluster used to be defined at
configuration time. This prevents reusing a single executable
image on multiple processors (i.e. one image for all DSPs).
I moved this list into the MultiProc module state, so that it
could be defined in a reset hook when reusing a single image.
The list of processors in the cluster used to be defined at
configuration time. This prevents reusing a single executable
image on multiple processors (i.e. one image for all DSPs).
I moved this list into the MultiProc module state, so that it
could be defined in a reset hook when reusing a single image.
Added transportId bit-field to flags element in MessageQ header
In the MessageQ header, added a transportId field to the flags
element. This field is 3-bits wide. Added macros to MessageQ.h
to set and get the transportId. The transportId is part of a
new feature for supporting multiple transports in MessageQ.
In the MessageQ header, added a transportId field to the flags
element. This field is 3-bits wide. Added macros to MessageQ.h
to set and get the transportId. The transportId is part of a
new feature for supporting multiple transports in MessageQ.
Simplify output from GateMPApp
This commit addresses SDOCM00113915.
Signed-off-by: VW <vwan@ti.com>
This commit addresses SDOCM00113915.
Signed-off-by: VW <vwan@ti.com>
MmRpc: update rpmsg header path for Android on K3.14
Signed-off-by: Sunita Nadampalli <sunitan@ti.com>
Signed-off-by: Sunita Nadampalli <sunitan@ti.com>
Change TMS320F2837.* to F2837.* in family Settings.xs
SDOCM00113753 Notify mailbox driver is clearing wrong fifo
Fixed the notify mailbox driver to clear the inbound fifo, not the
outbound fifo. In addition, write the End-Of-Interrupt (EOI) register
after clearing the fifo; this was not being done. Finally, after
fetching inbound messages (in the notify ISR), the EOI register was
not written correctly; now it writes the corresponding interrupt index.
Fixed the notify mailbox driver to clear the inbound fifo, not the
outbound fifo. In addition, write the End-Of-Interrupt (EOI) register
after clearing the fifo; this was not being done. Finally, after
fetching inbound messages (in the notify ISR), the EOI register was
not written correctly; now it writes the corresponding interrupt index.
Added TDA3XX to top-level product file.
Updated the platform comment to include TDA3XX. Improved comments
for MessageQ header; fixed typo in MessageQ flags bit description.
Updated the platform comment to include TDA3XX. Improved comments
for MessageQ header; fixed typo in MessageQ flags bit description.
SDOCM00113709 NotifyDriverMbx on Vayu should not use Ipc module
Removed all references to ti.sdo.ipc.Ipc module in NotifyDriverMbx.
The Ipc and many other modules (13 in all) are no longer brought into
the executable when building an IPC Notify only system.
Removed all references to ti.sdo.ipc.Ipc module in NotifyDriverMbx.
The Ipc and many other modules (13 in all) are no longer brought into
the executable when building an IPC Notify only system.
Add fw_rsc_intmem definition to support new TYPE_INTMEM entries in QNX
Previously, TYPE_INTMEM resource entries were represented as fw_rsc_carveout
structures internally in QNX. Given the update of the fw_rsc_intmem
structure in BIOS (SDOCM00113567), we now need to match them up by creating
a new fw_rsc_intmem structure.
This addresses SDOCM00113568.
Signed-off-by: VW <vwan@ti.com>
Previously, TYPE_INTMEM resource entries were represented as fw_rsc_carveout
structures internally in QNX. Given the update of the fw_rsc_intmem
structure in BIOS (SDOCM00113567), we now need to match them up by creating
a new fw_rsc_intmem structure.
This addresses SDOCM00113568.
Signed-off-by: VW <vwan@ti.com>
Linux/MessageQ: Close the socket upon failure
The socket created in transportCreateEndpoint is not freed up
immediately if the SocketBindAddr fails, and is not freed up
by the application in the corresponding MessageQ_delete as well.
These unbound sockets only get freed up as part of the process
cleanup of any open file descriptors by the Linux kernel. Close
these sockets proactively, so that there are no stale sockets
present during the execution of a process.
Signed-off-by: Suman Anna <s-anna@ti.com>
The socket created in transportCreateEndpoint is not freed up
immediately if the SocketBindAddr fails, and is not freed up
by the application in the corresponding MessageQ_delete as well.
These unbound sockets only get freed up as part of the process
cleanup of any open file descriptors by the Linux kernel. Close
these sockets proactively, so that there are no stale sockets
present during the execution of a process.
Signed-off-by: Suman Anna <s-anna@ti.com>
9 years agoMove Hwi.excHandlerFunc assignment into ti.deh.Deh:module$use() 3.30.01.10_eng 3.30.01.11_eng
Move Hwi.excHandlerFunc assignment into ti.deh.Deh:module$use()
A previous change moved this assignment from module$static$init() to
module$meta$init(), but this no longer works since ti.ipc.ipcmgr:getLibs()
now references ti.deh.Deh:
var deh = xdc.module("ti.deh.Deh");
and if a module has not otherwise been "used" up until this point then
the xdc.module() reference will run module$meta$init(), and since this
is getLibs() you can't "useModule" at this point (which Deh's
module$meta$init() does).
Also, some other change is causing ti.deh's getLibs() to be called even
when nothing does a useModule() on any module within the ti.deh package.
For a device which ti.deh doesn't support, such as Keystone, it would
previously throw an error and fail the whole app build. Now, ti.deh's
getLibs() is changed to contribute nothing if none of its modules are
used for an unsupported device.
A previous change moved this assignment from module$static$init() to
module$meta$init(), but this no longer works since ti.ipc.ipcmgr:getLibs()
now references ti.deh.Deh:
var deh = xdc.module("ti.deh.Deh");
and if a module has not otherwise been "used" up until this point then
the xdc.module() reference will run module$meta$init(), and since this
is getLibs() you can't "useModule" at this point (which Deh's
module$meta$init() does).
Also, some other change is causing ti.deh's getLibs() to be called even
when nothing does a useModule() on any module within the ti.deh package.
For a device which ti.deh doesn't support, such as Keystone, it would
previously throw an error and fail the whole app build. Now, ti.deh's
getLibs() is changed to contribute nothing if none of its modules are
used for an unsupported device.
Change fw_rsc_intmem to match Linux 3.14
This struct was changed for Linux 3.14, so we need to match that new
one because Ipc 3.30 uses Linux 3.14.
Later we should introduce a construct that will allow the user to specify
the older struct usage.
This struct was changed for Linux 3.14, so we need to match that new
one because Ipc 3.30 uses Linux 3.14.
Later we should introduce a construct that will allow the user to specify
the older struct usage.
Merge remote-tracking branch 'origin/ipc-3.23-next' into ipc-next
Build libipc and libutils in QNX for dynamic linking
This addresses SDOCM00113498.
Signed-off-by: VW <vwan@ti.com>
This addresses SDOCM00113498.
Signed-off-by: VW <vwan@ti.com>
Properly free previously allocated file path string and other minor cleanup
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Add carriage return to strings returned by /dev/ipc-file/* and /dev/ipc-state/*
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Allow QNX IPC resource manager to be launched without starting any core
This commit allows the resource manager to be launched without specifying
any core in its core list. This is useful now that cores can be started
at a subsequent time.
Signed-off-by: VW <vwan@ti.com>
This commit allows the resource manager to be launched without specifying
any core in its core list. This is useful now that cores can be started
at a subsequent time.
Signed-off-by: VW <vwan@ti.com>
Reject all operations on DSP2 in QNX
Since DSP2 is not supported on QNX, we need to reject all attempts at
interacting with DSP2 using the new start/stop feature.
Signed-off-by: VW <vwan@ti.com>
Since DSP2 is not supported on QNX, we need to reject all attempts at
interacting with DSP2 using the new start/stop feature.
Signed-off-by: VW <vwan@ti.com>
Prevent SR0 owner from being stopped if host process is still using GateMP
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Fix an issue where disabling mailbox interrupts on DSP1 disables IPU interrupts
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Add initial support to start/stop cores after launching QNX IPC resource manager
This commit adds the ability to start and stop slave cores after the QNX
IPC resource manager has been previously launched, with at least a few known
caveats that would be fixed subsequently.
It addresses SDOCM00113295.
Signed-off-by: VW <vwan@ti.com>
This commit adds the ability to start and stop slave cores after the QNX
IPC resource manager has been previously launched, with at least a few known
caveats that would be fixed subsequently.
It addresses SDOCM00113295.
Signed-off-by: VW <vwan@ti.com>
Fix "@link @setConfig", should be "@link #setConfig"
SDOCM00113338 fix: reduce number of Tasks for messageq_multi.c
Also reduce the maximum number of threads supported in MessageQMulti.c
The need for this fix arose when the BIOS heap size was reduced in
some .cfg files in packages/ti/ipc/tests. The new, smaller heap was
not sufficient for allocating 55 Tasks (it failed at about the 30th
Task).
Also reduce the maximum number of threads supported in MessageQMulti.c
The need for this fix arose when the BIOS heap size was reduced in
some .cfg files in packages/ti/ipc/tests. The new, smaller heap was
not sufficient for allocating 55 Tasks (it failed at about the 30th
Task).
SDOCM00113339 fix: change TMS320TCI6630 to TMS320TCI6630K2L
SDOCM00113341 fix: restrict writing Ipc_Reserved struct to core's own area
In Ipc_attach(), when a 'memReq' size is 0, a core can write to another
core's Ipc_Reserved struct in SR0 when it isn't supposed to *ever* write
another core's area. The incorrect assignment needs to be done only when
MultiProc_self() < remoteProcId, similarly to how it is done in other places,
which ensures that a core is writing to only its own IpcReserved area.
In Ipc_attach(), when a 'memReq' size is 0, a core can write to another
core's Ipc_Reserved struct in SR0 when it isn't supposed to *ever* write
another core's area. The incorrect assignment needs to be done only when
MultiProc_self() < remoteProcId, similarly to how it is done in other places,
which ensures that a core is writing to only its own IpcReserved area.
SDOCM00113171 fix: release NameServerRemoteRpmsg gate on timeout
The NameServerRemoteRpmsg_get() function has a timeout-based Semaphore_pend
that can return failure when the timeout expires. The function returns
without releasing the gate when the timeout failure happens. This causes
any other thread to block when calling MessageQ_open(), while subsequent
MessageQ_open() calls on the same thread can succeed.
The NameServerRemoteRpmsg_get() function has a timeout-based Semaphore_pend
that can return failure when the timeout expires. The function returns
without releasing the gate when the timeout failure happens. This causes
any other thread to block when calling MessageQ_open(), while subsequent
MessageQ_open() calls on the same thread can succeed.
9 years agoSDOCM00108130 IPC custom library build creates empty folder 3.30.00.07_eng 3.30.00.08_eng 3.30.00.09
SDOCM00108130 IPC custom library build creates empty folder
When not building product libraries, remove directive in makefile
which was creating output folder. The directive resulted in empty
folder named 'undefined'.
When not building product libraries, remove directive in makefile
which was creating output folder. The directive resulted in empty
folder named 'undefined'.
SDOCM00112918 fix: release NameServerRemoteRpmsg gate on timeout
The NameServerRemoteRpmsg_get() function has a timeout-based Semaphore_pend
that can return failure when the timeout expires. The function returns
without releasing the gate when the timeout failure happens. This causes
any other thread to block when calling MessageQ_open(), while subsequent
MessageQ_open() calls on the same thread can succeed.
The NameServerRemoteRpmsg_get() function has a timeout-based Semaphore_pend
that can return failure when the timeout expires. The function returns
without releasing the gate when the timeout failure happens. This causes
any other thread to block when calling MessageQ_open(), while subsequent
MessageQ_open() calls on the same thread can succeed.
SDOCM00107419 fix: add cast for OMAPL138 & Keystone devices
Since VirtQueue_Params is XDC-generated for OMAPL138 & Keystone devices
we need to add a (xdc_Fxn) cast for the 'callback' element assignment.
Other devices (OMAP5 & VAYU) already have the correct type for the
'callback' element in the manually-generated VirtQueue.h file.
Since VirtQueue_Params is XDC-generated for OMAPL138 & Keystone devices
we need to add a (xdc_Fxn) cast for the 'callback' element assignment.
Other devices (OMAP5 & VAYU) already have the correct type for the
'callback' element in the manually-generated VirtQueue.h file.
Move Watchdog module configuration assignments to module$use()
When the ti.deh package is loaded the Watchdog module$meta$init() method
is run. If the package is loaded by an architecture/device that is not
supported by Watchdog then module$meta$init() fails and the whole
configuration fails. This happens even when the Watchdog module is *not*
used, such as when the ti.deh package gets loaded as a result of an
xdc.module() reference.
When the ti.deh package is loaded the Watchdog module$meta$init() method
is run. If the package is loaded by an architecture/device that is not
supported by Watchdog then module$meta$init() fails and the whole
configuration fails. This happens even when the Watchdog module is *not*
used, such as when the ti.deh package gets loaded as a result of an
xdc.module() reference.
Fix recovery mechanism for late-attach use-case in QNX
This patch adds support for recovery from MMU faults, exceptions,
and watchdog timeouts when 'late-attached' to a slave core (SDOCM00112666).
Signed-off-by: VW <vwan@ti.com>
This patch adds support for recovery from MMU faults, exceptions,
and watchdog timeouts when 'late-attached' to a slave core (SDOCM00112666).
Signed-off-by: VW <vwan@ti.com>
Use different #include path for 3.14 Linux
Linux 3.14 has split header files into kernel and user ones, which means
MmRpc.c needs to include rpmsg_rpc.h from user location.
Linux 3.14 has split header files into kernel and user ones, which means
MmRpc.c needs to include rpmsg_rpc.h from user location.
Add Ipc.c to default source file list
Fixes to support minimal configuration of IPC
Validate processor ID in Notify_attach, which is the public API.
No need to re-validate in NotifyDriverMbx_Instance_init(). This
removes the Ipc dependency (needed for the assert object).
Validate processor ID in Notify_attach, which is the public API.
No need to re-validate in NotifyDriverMbx_Instance_init(). This
removes the Ipc dependency (needed for the assert object).
Fixes to support minimal configuration of IPC
When generating file list for a custom build, don't include Ipc.c
unless the application actually used the module. Added --output_file
option to makefile template; other minor cleanup.
When generating file list for a custom build, don't include Ipc.c
unless the application actually used the module. Added --output_file
option to makefile template; other minor cleanup.
IPC makefile template improvements
For custom builds, the makefile template was computing the list
of source files twice. Now it caches the list in a local array.
For custom builds, the makefile template was computing the list
of source files twice. Now it caches the list in a local array.
vayu: add new rprocList[] setting for Linux v3.14
The rproc order for vayu remote cores has changed in Linux kernel v3.14,
as part of the conversion to completely DT-based configuration.
The rproc order for vayu remote cores has changed in Linux kernel v3.14,
as part of the conversion to completely DT-based configuration.
Merge branch 'ipc-3.23-next' into ipc-next
SDOCM00112254 - Add IPC support for Soprano
SDOCM00112680 - IPC for Concerto has incorrect implemetations of NotifyDriverCirc_enable() and NotifyDriverCirc_enableEvent()
Applied bug fixes found by Vision SDK team.
On EVE1, fixed mailbox index computed when enabling interrupt
from DSP2. Fixed mailbox table entry for IPU1-1 to DSP1 mapping.
On EVE1, fixed mailbox index computed when enabling interrupt
from DSP2. Fixed mailbox table entry for IPU1-1 to DSP1 mapping.
Use core-specific WUGEN masks for suspend on OMAP
The WUGEN event masks for each core are set to values appropriate
for the architecture and core.
A new API is added that allows the application to control the WUGEN
event mask (IpcPower_{get,set}WugenEvtMask()).
Addresses CQ SDOCM00108585.
The WUGEN event masks for each core are set to values appropriate
for the architecture and core.
A new API is added that allows the application to control the WUGEN
event mask (IpcPower_{get,set}WugenEvtMask()).
Addresses CQ SDOCM00108585.
Update QNX Makefile to setup environment for QNX 6.6.0
Signed-off-by: VW <vwan@ti.com>
Signed-off-by: VW <vwan@ti.com>
Linux: GameMP inUse arrays had invalid address mappings
The GameMP address for the inUse arrays were being assigned incorrectly.
A page alignment was originally needed to properly map the arrays in
user space. After mapping, the alignment difference wasn't being taken
into consideration.
The GameMP address for the inUse arrays were being assigned incorrectly.
A page alignment was originally needed to properly map the arrays in
user space. After mapping, the alignment difference wasn't being taken
into consideration.