Skip to content

Commit 1fc471c

Browse files
committed
Enable ALSA debug in kernel
Now gets "virtio_snd: probe of virtio2 failed with error -2" in dmesg.
1 parent ba86045 commit 1fc471c

File tree

10 files changed

+776
-14
lines changed

10 files changed

+776
-14
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "cnfa"]
2+
path = cnfa
3+
url = https://github.com/cntools/cnfa

Makefile

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ OBJS_EXTRA :=
1313
# command line option
1414
OPTS :=
1515

16+
LDFLAGS :=
17+
1618
# virtio-blk
1719
ENABLE_VIRTIOBLK ?= 1
1820
$(call set-feature, VIRTIOBLK)
@@ -41,8 +43,20 @@ ifeq ($(call has, VIRTIONET), 1)
4143
OBJS_EXTRA += virtio-net.o
4244
endif
4345

46+
# virtio-snd
47+
ENABLE_VIRTIOSND ?= 1
48+
ifneq ($(UNAME_S),Linux)
49+
ENABLE_VIRTIOSND := 0
50+
endif
51+
$(call set-feature, VIRTIOSND)
52+
ifeq ($(call has, VIRTIOSND), 1)
53+
OBJS_EXTRA += virtio-snd.o
54+
LDFLAGS += -lasound
55+
CFLAGS += -Icnfa
56+
endif
57+
4458
BIN = semu
45-
all: $(BIN) minimal.dtb
59+
all: cnfa_dep $(BIN) minimal.dtb
4660

4761
OBJS := \
4862
riscv.o \
@@ -56,6 +70,11 @@ OBJS := \
5670

5771
deps := $(OBJS:%.o=.%.o.d)
5872

73+
cnfa_dep:
74+
rm cnfa/CNFA_sf.h
75+
make -C cnfa os_generic.h
76+
make -C cnfa CNFA_sf.h
77+
5978
$(BIN): $(OBJS)
6079
$(VECHO) " LD\t$@\n"
6180
$(Q)$(CC) -o $@ $^ $(LDFLAGS)

cnfa

Submodule cnfa added at 60bcddd

configs/buildroot.config

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ BR2_RELRO_NONE=y
3636
# BR2_RELRO_PARTIAL is not set
3737
# BR2_RELRO_FULL is not set
3838
BR2_FORTIFY_SOURCE_1=y
39+
BR2_PACKAGE_ALSA_UTILS=y
40+
BR2_PACKAGE_ALSA_UTILS_APLAY=y
41+
BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST=y
3942
# BR2_PACKAGE_URANDOM_SCRIPTS is not set
4043
BR2_TARGET_ROOTFS_CPIO=y
4144
BR2_TARGET_ROOTFS_CPIO_FULL=y

configs/linux.config

Lines changed: 85 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
CONFIG_CC_VERSION_TEXT="riscv32-buildroot-linux-gnu-gcc.br_real (Buildroot 2023.05.1) 12.3.0"
1+
#
2+
# Automatically generated file; DO NOT EDIT.
3+
# Linux/riscv 6.1.107 Kernel Configuration
4+
#
5+
CONFIG_CC_VERSION_TEXT="riscv32-buildroot-linux-gnu-gcc.br_real (Buildroot 2024.05.2) 14.1.0"
26
CONFIG_CC_IS_GCC=y
3-
CONFIG_GCC_VERSION=120300
7+
CONFIG_GCC_VERSION=140100
48
CONFIG_CLANG_VERSION=0
59
CONFIG_AS_IS_GNU=y
6-
CONFIG_AS_VERSION=23900
10+
CONFIG_AS_VERSION=24200
711
CONFIG_LD_IS_BFD=y
8-
CONFIG_LD_VERSION=23900
12+
CONFIG_LD_VERSION=24200
913
CONFIG_LLD_VERSION=0
1014
CONFIG_CC_CAN_LINK=y
1115
CONFIG_CC_CAN_LINK_STATIC=y
@@ -21,7 +25,6 @@ CONFIG_THREAD_INFO_IN_TASK=y
2125
#
2226
# General setup
2327
#
24-
CONFIG_BROKEN_ON_SMP=y
2528
CONFIG_INIT_ENV_ARG_LIMIT=32
2629
# CONFIG_COMPILE_TEST is not set
2730
# CONFIG_WERROR is not set
@@ -43,6 +46,7 @@ CONFIG_HAVE_ARCH_AUDITSYSCALL=y
4346
#
4447
CONFIG_GENERIC_IRQ_SHOW=y
4548
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
49+
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
4650
CONFIG_HARDIRQS_SW_RESEND=y
4751
CONFIG_IRQ_DOMAIN=y
4852
CONFIG_IRQ_DOMAIN_HIERARCHY=y
@@ -54,8 +58,12 @@ CONFIG_SPARSE_IRQ=y
5458
CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
5559
CONFIG_ARCH_CLOCKSOURCE_INIT=y
5660
CONFIG_GENERIC_CLOCKEVENTS=y
61+
CONFIG_ARCH_HAS_TICK_BROADCAST=y
62+
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
5763
CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
5864
CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
65+
CONFIG_CONTEXT_TRACKING=y
66+
CONFIG_CONTEXT_TRACKING_IDLE=y
5967

6068
#
6169
# Timers subsystem
@@ -92,18 +100,23 @@ CONFIG_TICK_CPU_ACCOUNTING=y
92100
# CONFIG_PSI is not set
93101
# end of CPU/Task time and stats accounting
94102

103+
CONFIG_CPU_ISOLATION=y
104+
95105
#
96106
# RCU Subsystem
97107
#
98-
CONFIG_TINY_RCU=y
108+
CONFIG_TREE_RCU=y
99109
# CONFIG_RCU_EXPERT is not set
100110
CONFIG_SRCU=y
101-
CONFIG_TINY_SRCU=y
111+
CONFIG_TREE_SRCU=y
112+
CONFIG_RCU_STALL_COMMON=y
113+
CONFIG_RCU_NEED_SEGCBLIST=y
102114
# end of RCU Subsystem
103115

104116
# CONFIG_IKCONFIG is not set
105117
# CONFIG_IKHEADERS is not set
106118
CONFIG_LOG_BUF_SHIFT=16
119+
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
107120
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=12
108121
# CONFIG_PRINTK_INDEX is not set
109122
CONFIG_GENERIC_SCHED_CLOCK=y
@@ -114,7 +127,7 @@ CONFIG_GENERIC_SCHED_CLOCK=y
114127
# end of Scheduler features
115128

116129
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
117-
CONFIG_GCC11_NO_ARRAY_BOUNDS=y
130+
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
118131
CONFIG_CC_NO_ARRAY_BOUNDS=y
119132
# CONFIG_CGROUPS is not set
120133
# CONFIG_NAMESPACES is not set
@@ -224,7 +237,10 @@ CONFIG_ARCH_RV32I=y
224237
CONFIG_CMODEL_MEDANY=y
225238
CONFIG_MODULE_SECTIONS=y
226239
CONFIG_SMP=y
240+
CONFIG_NR_CPUS=32
241+
# CONFIG_HOTPLUG_CPU is not set
227242
CONFIG_TUNE_GENERIC=y
243+
# CONFIG_NUMA is not set
228244
# CONFIG_RISCV_ISA_C is not set
229245
CONFIG_TOOLCHAIN_HAS_ZICBOM=y
230246
# CONFIG_RISCV_ISA_ZICBOM is not set
@@ -243,6 +259,7 @@ CONFIG_HZ_250=y
243259
CONFIG_HZ=250
244260
CONFIG_SCHED_HRTICK=y
245261
# CONFIG_RISCV_SBI_V01 is not set
262+
# CONFIG_RISCV_BOOT_SPINWAIT is not set
246263
# CONFIG_KEXEC is not set
247264
# CONFIG_CRASH_DUMP is not set
248265
# end of Kernel features
@@ -274,6 +291,7 @@ CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y
274291
# end of CPU Power Management
275292

276293
# CONFIG_VIRTUALIZATION is not set
294+
CONFIG_CPU_MITIGATIONS=y
277295

278296
#
279297
# General architecture-dependent options
@@ -325,7 +343,7 @@ CONFIG_COMPAT_32BIT_TIME=y
325343
CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
326344
CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
327345
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
328-
CONFIG_STRICT_KERNEL_RWX=n
346+
# CONFIG_STRICT_KERNEL_RWX is not set
329347
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
330348
CONFIG_STRICT_MODULE_RWX=y
331349
# CONFIG_LOCK_EVENT_COUNTS is not set
@@ -394,8 +412,13 @@ CONFIG_INLINE_READ_UNLOCK_IRQ=y
394412
CONFIG_INLINE_WRITE_UNLOCK=y
395413
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
396414
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
415+
CONFIG_MUTEX_SPIN_ON_OWNER=y
416+
CONFIG_RWSEM_SPIN_ON_OWNER=y
417+
CONFIG_LOCK_SPIN_ON_OWNER=y
397418
CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
419+
CONFIG_QUEUED_RWLOCKS=y
398420
CONFIG_ARCH_HAS_MMIOWB=y
421+
CONFIG_MMIOWB=y
399422
CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y
400423

401424
#
@@ -425,6 +448,7 @@ CONFIG_SLAB_MERGE_DEFAULT=y
425448
# CONFIG_SLAB_FREELIST_RANDOM is not set
426449
# CONFIG_SLAB_FREELIST_HARDENED is not set
427450
# CONFIG_SLUB_STATS is not set
451+
CONFIG_SLUB_CPU_PARTIAL=y
428452
# end of SLAB allocator options
429453

430454
# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
@@ -438,10 +462,10 @@ CONFIG_COMPACTION=y
438462
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
439463
# CONFIG_PAGE_REPORTING is not set
440464
CONFIG_MIGRATION=y
465+
CONFIG_PCP_BATCH_SCALE_MAX=5
441466
# CONFIG_KSM is not set
442467
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
443468
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
444-
CONFIG_NEED_PER_CPU_KM=y
445469
# CONFIG_CMA is not set
446470
CONFIG_GENERIC_EARLY_IOREMAP=y
447471
# CONFIG_IDLE_PAGE_TRACKING is not set
@@ -531,8 +555,14 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
531555
# CONFIG_NET_L3_MASTER_DEV is not set
532556
# CONFIG_QRTR is not set
533557
# CONFIG_NET_NCSI is not set
558+
CONFIG_PCPU_DEV_REFCNT=y
559+
CONFIG_RPS=y
560+
CONFIG_RFS_ACCEL=y
561+
CONFIG_SOCK_RX_QUEUE_MAPPING=y
562+
CONFIG_XPS=y
534563
CONFIG_NET_RX_BUSY_POLL=y
535564
CONFIG_BQL=y
565+
CONFIG_NET_FLOW_LIMIT=y
536566

537567
#
538568
# Network testing
@@ -887,7 +917,6 @@ CONFIG_BCMA_POSSIBLE=y
887917
# CONFIG_MFD_MT6397 is not set
888918
# CONFIG_MFD_SM501 is not set
889919
CONFIG_MFD_SYSCON=y
890-
# CONFIG_MFD_TI_AM335X_TSCADC is not set
891920
# CONFIG_MFD_TQMX86 is not set
892921
# end of Multifunction device drivers
893922

@@ -936,7 +965,43 @@ CONFIG_DUMMY_CONSOLE_ROWS=25
936965
# end of Console display driver support
937966
# end of Graphics support
938967

939-
# CONFIG_SOUND is not set
968+
CONFIG_SOUND=y
969+
CONFIG_SND=y
970+
CONFIG_SND_TIMER=y
971+
CONFIG_SND_PCM=y
972+
CONFIG_SND_JACK=y
973+
CONFIG_SND_JACK_INPUT_DEV=y
974+
# CONFIG_SND_OSSEMUL is not set
975+
CONFIG_SND_PCM_TIMER=y
976+
# CONFIG_SND_HRTIMER is not set
977+
# CONFIG_SND_DYNAMIC_MINORS is not set
978+
CONFIG_SND_SUPPORT_OLD_API=y
979+
CONFIG_SND_PROC_FS=y
980+
CONFIG_SND_VERBOSE_PROCFS=y
981+
# CONFIG_SND_VERBOSE_PRINTK is not set
982+
CONFIG_SND_CTL_FAST_LOOKUP=y
983+
CONFIG_SND_DEBUG=y
984+
CONFIG_SND_DEBUG_VERBOSE=y
985+
CONFIG_SND_PCM_XRUN_DEBUG=y
986+
# CONFIG_SND_CTL_INPUT_VALIDATION is not set
987+
# CONFIG_SND_CTL_DEBUG is not set
988+
# CONFIG_SND_JACK_INJECTION_DEBUG is not set
989+
# CONFIG_SND_SEQUENCER is not set
990+
CONFIG_SND_DRIVERS=y
991+
CONFIG_SND_DUMMY=y
992+
CONFIG_SND_ALOOP=y
993+
# CONFIG_SND_MTPAV is not set
994+
# CONFIG_SND_SERIAL_U16550 is not set
995+
# CONFIG_SND_MPU401 is not set
996+
997+
#
998+
# HD-Audio
999+
#
1000+
# end of HD-Audio
1001+
1002+
CONFIG_SND_HDA_PREALLOC_SIZE=64
1003+
# CONFIG_SND_SOC is not set
1004+
CONFIG_SND_VIRTIO=y
9401005

9411006
#
9421007
# HID support
@@ -1400,6 +1465,7 @@ CONFIG_CRYPTO_HASH2=y
14001465
# CONFIG_CRYPTO_USER is not set
14011466
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
14021467
# CONFIG_CRYPTO_NULL is not set
1468+
# CONFIG_CRYPTO_PCRYPT is not set
14031469
# CONFIG_CRYPTO_CRYPTD is not set
14041470
# CONFIG_CRYPTO_AUTHENC is not set
14051471
# CONFIG_CRYPTO_TEST is not set
@@ -1579,12 +1645,15 @@ CONFIG_ZSTD_COMMON=y
15791645
CONFIG_ZSTD_DECOMPRESS=y
15801646
# CONFIG_XZ_DEC is not set
15811647
CONFIG_DECOMPRESS_ZSTD=y
1648+
CONFIG_XARRAY_MULTI=y
15821649
CONFIG_HAS_IOMEM=y
15831650
CONFIG_HAS_IOPORT_MAP=y
15841651
CONFIG_HAS_DMA=y
15851652
CONFIG_DMA_DECLARE_COHERENT=y
15861653
# CONFIG_DMA_API_DEBUG is not set
15871654
# CONFIG_DMA_MAP_BENCHMARK is not set
1655+
# CONFIG_FORCE_NR_CPUS is not set
1656+
CONFIG_CPU_RMAP=y
15881657
CONFIG_DQL=y
15891658
CONFIG_NLATTR=y
15901659
CONFIG_GENERIC_ATOMIC64=y
@@ -1629,6 +1698,7 @@ CONFIG_DEBUG_KERNEL=y
16291698
# Compile-time checks and compiler options
16301699
#
16311700
CONFIG_DEBUG_INFO=y
1701+
CONFIG_AS_HAS_NON_CONST_LEB128=y
16321702
# CONFIG_DEBUG_INFO_NONE is not set
16331703
# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set
16341704
# CONFIG_DEBUG_INFO_DWARF4 is not set
@@ -1681,7 +1751,6 @@ CONFIG_HAVE_KCSAN_COMPILER=y
16811751
# CONFIG_SLUB_DEBUG is not set
16821752
# CONFIG_PAGE_OWNER is not set
16831753
# CONFIG_PAGE_POISONING is not set
1684-
# CONFIG_DEBUG_RODATA_TEST is not set
16851754
CONFIG_ARCH_HAS_DEBUG_WX=y
16861755
# CONFIG_DEBUG_WX is not set
16871756
CONFIG_GENERIC_PTDUMP=y
@@ -1698,6 +1767,7 @@ CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
16981767
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
16991768
# CONFIG_DEBUG_VIRTUAL is not set
17001769
# CONFIG_DEBUG_MEMORY_INIT is not set
1770+
# CONFIG_DEBUG_PER_CPU_MAPS is not set
17011771
CONFIG_CC_HAS_KASAN_GENERIC=y
17021772
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
17031773
# end of Memory Debugging
@@ -1768,6 +1838,8 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y
17681838
# CONFIG_RCU_SCALE_TEST is not set
17691839
# CONFIG_RCU_TORTURE_TEST is not set
17701840
# CONFIG_RCU_REF_SCALE_TEST is not set
1841+
CONFIG_RCU_CPU_STALL_TIMEOUT=21
1842+
CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0
17711843
# CONFIG_RCU_TRACE is not set
17721844
# CONFIG_RCU_EQS_DEBUG is not set
17731845
# end of RCU Debugging

device.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,52 @@ void clint_write(hart_t *vm,
190190
uint8_t width,
191191
uint32_t value);
192192

193+
#if SEMU_HAS(VIRTIOSND)
194+
195+
#define IRQ_VSND 4
196+
#define IRQ_VSND_BIT (1 << IRQ_VSND)
197+
198+
typedef struct {
199+
uint32_t QueueNum;
200+
uint32_t QueueDesc;
201+
uint32_t QueueAvail;
202+
uint32_t QueueUsed;
203+
uint16_t last_avail;
204+
bool ready;
205+
} virtio_snd_queue_t;
206+
207+
typedef struct {
208+
/* feature negotiation */
209+
uint32_t DeviceFeaturesSel;
210+
uint32_t DriverFeatures;
211+
uint32_t DriverFeaturesSel;
212+
/* queue config */
213+
uint32_t QueueSel;
214+
virtio_snd_queue_t queues[2];
215+
/* status */
216+
uint32_t Status;
217+
uint32_t InterruptStatus;
218+
/* supplied by environment */
219+
uint32_t *ram;
220+
/* implementation-specific */
221+
void *priv;
222+
} virtio_snd_state_t;
223+
224+
void virtio_snd_read(hart_t *core,
225+
virtio_snd_state_t *vsnd,
226+
uint32_t addr,
227+
uint8_t width,
228+
uint32_t *value);
229+
230+
void virtio_snd_write(hart_t *core,
231+
virtio_snd_state_t *vsnd,
232+
uint32_t addr,
233+
uint8_t width,
234+
uint32_t value);
235+
236+
bool virtio_snd_init(virtio_snd_state_t *vsnd);
237+
#endif
238+
193239
/* memory mapping */
194240

195241
typedef struct {
@@ -205,4 +251,8 @@ typedef struct {
205251
virtio_blk_state_t vblk;
206252
#endif
207253
clint_state_t clint;
254+
#if SEMU_HAS(VIRTIOSND)
255+
virtio_snd_state_t vsnd;
256+
#endif
257+
uint64_t timer;
208258
} emu_state_t;

0 commit comments

Comments
 (0)