Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion Kconfig.sof
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ rsource "Kconfig.xtos"

rsource "src/Kconfig"

if ZEPHYR_SOF_MODULE
if ZEPHYR_SOF_MODULE || SOF_FULL_ZEPHYR_APPLICATION
rsource "Kconfig.zephyr-log"
endif

Expand Down
39 changes: 37 additions & 2 deletions app/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,46 @@ endif()
find_package(Zephyr HINTS $ENV{ZEPHYR_BASE})
project(sample_sof)

add_subdirectory(../zephyr sof_zephyr)

target_sources(app PRIVATE
src/main.c
)

zephyr_library_include_directories(app PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../src/arch/xtensa/include
target_sources_ifdef(CONFIG_USB_DEVICE_STACK_NEXT app PRIVATE
src/usbd_init.c
)

target_include_directories(app PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/../src/include
${CMAKE_CURRENT_SOURCE_DIR}/../zephyr/include
${CMAKE_CURRENT_SOURCE_DIR}/../src/platform/${PLATFORM}/include
${PROJECT_BINARY_DIR}/include/generated
)

target_link_libraries(app PRIVATE SOF -Wl,--start-group modules_sof sof_kernel -Wl,--end-group)
if(TARGET uuid_reg_h)
add_dependencies(app uuid_reg_h modules_sof sof_kernel)
endif()

if(CONFIG_XTENSA)
target_include_directories(app PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../src/arch/xtensa/include
)
endif()

function(sof_append_relative_path_definitions target)
get_target_property(sources ${target} SOURCES)
foreach(src ${sources})
get_filename_component(ABS_PATH ${src} ABSOLUTE)
file(RELATIVE_PATH rel ${PROJECT_SOURCE_DIR} ${ABS_PATH})
set_property(
SOURCE ${src}
APPEND
PROPERTY COMPILE_DEFINITIONS
RELATIVE_FILE="${rel}")
endforeach()
endfunction()

sof_append_relative_path_definitions(app)
5 changes: 5 additions & 0 deletions app/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ choice COMPILER_CODEGEN_VLIW
endchoice

source "Kconfig.zephyr"
source "samples/subsys/usb/common/Kconfig.sample_usbd"

if !ZEPHYR_SOF_MODULE
rsource "../zephyr/Kconfig"
endif

if SOC_FAMILY_INTEL_ADSP
rsource "boards/intel_adsp/Kconfig.defconfig"
Expand Down
78 changes: 78 additions & 0 deletions app/boards/rpi_pico2_rp2350a_m33.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Target Platform & SOF Core
CONFIG_PLATFORM_RP2350=y
CONFIG_SOF_FULL_ZEPHYR_APPLICATION=y
CONFIG_ZEPHYR_NATIVE_DRIVERS=y
CONFIG_IPC_MAJOR_4=y
CONFIG_COMP_BASEFW_IPC4=n
CONFIG_CROSS_CORE_STREAM=n
CONFIG_STATIC_PIPELINE=y
CONFIG_SYS_HEAP_BIG_ONLY=y
CONFIG_BUILD_OUTPUT_UF2=y
CONFIG_BUILD_OUTPUT_BIN=y

# Audio Processing Modules & ARM SIMD Optimizations
CONFIG_COMP_VOLUME=y
CONFIG_VOLUME_ARM_SIMD=y
CONFIG_COMP_IIR=y
CONFIG_EQ_IIR_ARM_SIMD=y
CONFIG_FILTER_ARM_SIMD=y
CONFIG_COMP_FIR=n
CONFIG_COMP_DRC=y
CONFIG_DRC_ARM_SIMD=y
CONFIG_COMP_CROSSOVER=n
CONFIG_COMP_DCBLOCK=n
CONFIG_COMP_MULTIBAND_DRC=n
CONFIG_COMP_TDFB=n
CONFIG_COMP_USB_AUDIO=y
CONFIG_COMP_TONE=n

# USB Device Stack Next & UAC2 Class
CONFIG_USB_DEVICE_STACK_NEXT=y
CONFIG_UDC_DRIVER_HIGH_SPEED_SUPPORT_ENABLED=n
CONFIG_USBD_MAX_SPEED_FULL=y
CONFIG_CDC_ACM_SERIAL_INITIALIZE_AT_BOOT=n
CONFIG_USBD_AUDIO2_CLASS=y
CONFIG_UDC_ENABLE_SOF=y
CONFIG_UDC_BUF_COUNT=16
CONFIG_UDC_BUF_POOL_SIZE=4096
CONFIG_UDC_RPI_PICO_STACK_SIZE=2048
CONFIG_UDC_RPI_PICO_THREAD_PRIORITY=8
CONFIG_LL_THREAD_PRIORITY=0

# C Library (Picolibc required for Cortex-M33 USB buffer alignment)
CONFIG_PICOLIBC=y
CONFIG_MINIMAL_LIBC=n

# USB Device Identification
CONFIG_SAMPLE_USBD_VID=0x16c0
CONFIG_SAMPLE_USBD_PID=0x0489
CONFIG_SAMPLE_USBD_MANUFACTURER="Raspberry Pi"
CONFIG_SAMPLE_USBD_PRODUCT="SOF RP2350 Audio"

# System Resources & Memory
CONFIG_MAIN_STACK_SIZE=8192
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
CONFIG_USBD_THREAD_STACK_SIZE=4096
CONFIG_ISR_STACK_SIZE=4096
CONFIG_HW_STACK_PROTECTION=n
CONFIG_HEAP_MEM_POOL_SIZE=65536
CONFIG_TICKLESS_KERNEL=n
CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000

# Logging & Console
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_LOG_MAX_LEVEL=4
CONFIG_SOF_LOG_LEVEL_INF=y
CONFIG_USBD_UAC2_LOG_LEVEL_INF=y
CONFIG_UDC_DRIVER_LOG_LEVEL_INF=y
CONFIG_LOG_MODE_DEFERRED=y
CONFIG_LOG_BUFFER_SIZE=4096
CONFIG_LOG_MODE_OVERFLOW=y
CONFIG_LOG_BACKEND_UART=n
CONFIG_PRINTK=y
CONFIG_LOG_PRINTK=y
CONFIG_EARLY_CONSOLE=n

# SOF Low Latency Scheduler Statistics Logging
CONFIG_SCHEDULE_LL_STATS_LOG=n
104 changes: 104 additions & 0 deletions app/boards/rpi_pico2_rp2350a_m33.overlay
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
#include <zephyr/dt-bindings/usb/audio.h>



/ {
uac2_card: usb_audio2 {
compatible = "zephyr,uac2";
status = "okay";
full-speed;
audio-function = <AUDIO_FUNCTION_IO_BOX>;

uac_aclk: aclk {
compatible = "zephyr,uac2-clock-source";
clock-type = "internal-programmable";
frequency-control = "host-programmable";
sampling-frequencies = <48000>;
sof-synchronized;
};

/* ===== Playback from Host (ISO OUT) ===== */
i2s_out_terminal: i2s_out_terminal {
compatible = "zephyr,uac2-input-terminal";
clock-source = <&uac_aclk>;
terminal-type = <USB_TERMINAL_STREAMING>;
front-left;
front-right;
};

i2s_fu: i2s_fu {
compatible = "zephyr,uac2-feature-unit";
data-source = <&i2s_out_terminal>;
mute-control = "host-programmable";
volume-control = "host-programmable";
};

pb_eq_fu: pb_eq_fu {
compatible = "zephyr,uac2-feature-unit";
data-source = <&i2s_fu>;
mute-control = "host-programmable";
};

pb_drc_fu: pb_drc_fu {
compatible = "zephyr,uac2-feature-unit";
data-source = <&pb_eq_fu>;
mute-control = "host-programmable";
};

i2s_speaker: i2s_speaker {
compatible = "zephyr,uac2-output-terminal";
data-source = <&pb_drc_fu>;
clock-source = <&uac_aclk>;
terminal-type = <OUTPUT_TERMINAL_SPEAKER>;
assoc-terminal = <&i2s_mic>;
};

/* ===== Capture to Host (ISO IN) ===== */
i2s_mic: i2s_mic {
compatible = "zephyr,uac2-input-terminal";
clock-source = <&uac_aclk>;
terminal-type = <INPUT_TERMINAL_MICROPHONE>;
front-left;
front-right;
};

cap_eq_fu: cap_eq_fu {
compatible = "zephyr,uac2-feature-unit";
data-source = <&i2s_mic>;
mute-control = "host-programmable";
};

i2s_in_fu: i2s_in_fu {
compatible = "zephyr,uac2-feature-unit";
data-source = <&cap_eq_fu>;
mute-control = "host-programmable";
volume-control = "host-programmable";
};

i2s_in_terminal: i2s_in_terminal {
compatible = "zephyr,uac2-output-terminal";
data-source = <&i2s_in_fu>;
clock-source = <&uac_aclk>;
terminal-type = <USB_TERMINAL_STREAMING>;
};

/* Audio Streaming Interfaces */
as_i2s_out: as_i2s_out {
compatible = "zephyr,uac2-audio-streaming";
linked-terminal = <&i2s_out_terminal>;
subslot-size = <2>;
bit-resolution = <16>;
};

as_i2s_in: as_i2s_in {
compatible = "zephyr,uac2-audio-streaming";
linked-terminal = <&i2s_in_terminal>;
subslot-size = <2>;
bit-resolution = <16>;
};
};
};

zephyr_udc0: &usbd {
status = "okay";
};
78 changes: 78 additions & 0 deletions app/boards/rpi_pico2_rp2350a_m33_0.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Target Platform & SOF Core
CONFIG_PLATFORM_RP2350=y
CONFIG_SOF_FULL_ZEPHYR_APPLICATION=y
CONFIG_ZEPHYR_NATIVE_DRIVERS=y
CONFIG_IPC_MAJOR_4=y
CONFIG_COMP_BASEFW_IPC4=n
CONFIG_CROSS_CORE_STREAM=n
CONFIG_STATIC_PIPELINE=y
CONFIG_SYS_HEAP_BIG_ONLY=y
CONFIG_BUILD_OUTPUT_UF2=y
CONFIG_BUILD_OUTPUT_BIN=y

# Audio Processing Modules & ARM SIMD Optimizations
CONFIG_COMP_VOLUME=y
CONFIG_VOLUME_ARM_SIMD=y
CONFIG_COMP_IIR=y
CONFIG_EQ_IIR_ARM_SIMD=y
CONFIG_FILTER_ARM_SIMD=y
CONFIG_COMP_FIR=n
CONFIG_COMP_DRC=y
CONFIG_DRC_ARM_SIMD=y
CONFIG_COMP_CROSSOVER=n
CONFIG_COMP_DCBLOCK=n
CONFIG_COMP_MULTIBAND_DRC=n
CONFIG_COMP_TDFB=n
CONFIG_COMP_USB_AUDIO=y
CONFIG_COMP_TONE=n

# USB Device Stack Next & UAC2 Class
CONFIG_USB_DEVICE_STACK_NEXT=y
CONFIG_UDC_DRIVER_HIGH_SPEED_SUPPORT_ENABLED=n
CONFIG_USBD_MAX_SPEED_FULL=y
CONFIG_CDC_ACM_SERIAL_INITIALIZE_AT_BOOT=n
CONFIG_USBD_AUDIO2_CLASS=y
CONFIG_UDC_ENABLE_SOF=y
CONFIG_UDC_BUF_COUNT=16
CONFIG_UDC_BUF_POOL_SIZE=4096
CONFIG_UDC_RPI_PICO_STACK_SIZE=2048
CONFIG_UDC_RPI_PICO_THREAD_PRIORITY=8
CONFIG_LL_THREAD_PRIORITY=0

# C Library (Picolibc required for Cortex-M33 USB buffer alignment)
CONFIG_PICOLIBC=y
CONFIG_MINIMAL_LIBC=n

# USB Device Identification
CONFIG_SAMPLE_USBD_VID=0x16c0
CONFIG_SAMPLE_USBD_PID=0x0489
CONFIG_SAMPLE_USBD_MANUFACTURER="Raspberry Pi"
CONFIG_SAMPLE_USBD_PRODUCT="SOF RP2350 Audio"

# System Resources & Memory
CONFIG_MAIN_STACK_SIZE=8192
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
CONFIG_USBD_THREAD_STACK_SIZE=4096
CONFIG_ISR_STACK_SIZE=4096
CONFIG_HW_STACK_PROTECTION=n
CONFIG_HEAP_MEM_POOL_SIZE=65536
CONFIG_TICKLESS_KERNEL=n
CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000

# Logging & Console
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_LOG_MAX_LEVEL=4
CONFIG_SOF_LOG_LEVEL_INF=y
CONFIG_USBD_UAC2_LOG_LEVEL_INF=y
CONFIG_UDC_DRIVER_LOG_LEVEL_INF=y
CONFIG_LOG_MODE_DEFERRED=y
CONFIG_LOG_BUFFER_SIZE=4096
CONFIG_LOG_MODE_OVERFLOW=y
CONFIG_LOG_BACKEND_UART=n
CONFIG_PRINTK=y
CONFIG_LOG_PRINTK=y
CONFIG_EARLY_CONSOLE=n

# SOF Low Latency Scheduler Statistics Logging
CONFIG_SCHEDULE_LL_STATS_LOG=n
Loading
Loading