Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 02 Jan 2026 15:49:41 +0000
From:      Christos Margiolis <christos@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 2455db44ef08 - main - snd_hda: Default to 256 when corb/rirb is invalid
Message-ID:  <6957e915.d4fb.62b2ee57@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by christos:

URL: https://cgit.FreeBSD.org/src/commit/?id=2455db44ef088797d113397f863d46c50e77134f

commit 2455db44ef088797d113397f863d46c50e77134f
Author:     Christos Margiolis <christos@FreeBSD.org>
AuthorDate: 2026-01-02 15:49:33 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2026-01-02 15:49:33 +0000

    snd_hda: Default to 256 when corb/rirb is invalid
    
    PR:             289284
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Reviewed by:    emaste
    Differential Revision:  https://reviews.freebsd.org/D54339
---
 sys/dev/sound/pci/hda/hdac.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c
index d1de81e7ba29..d397e98b4be3 100644
--- a/sys/dev/sound/pci/hda/hdac.c
+++ b/sys/dev/sound/pci/hda/hdac.c
@@ -545,9 +545,12 @@ hdac_get_capabilities(struct hdac_softc *sc)
 	    HDAC_CORBSIZE_CORBSZCAP_2)
 		sc->corb_size = 2;
 	else {
-		device_printf(sc->dev, "%s: Invalid corb size (%x)\n",
+		device_printf(sc->dev, "%s: Hardware reports invalid corb size "
+		    "(%x), defaulting to 256\n",
 		    __func__, corbsize);
-		return (ENXIO);
+		sc->corb_size = 256;
+		corbsize = HDAC_CORBSIZE_CORBSIZE(HDAC_CORBSIZE_CORBSIZE_256);
+		HDAC_WRITE_1(&sc->mem, HDAC_CORBSIZE, corbsize);
 	}
 
 	rirbsize = HDAC_READ_1(&sc->mem, HDAC_RIRBSIZE);
@@ -561,9 +564,12 @@ hdac_get_capabilities(struct hdac_softc *sc)
 	    HDAC_RIRBSIZE_RIRBSZCAP_2)
 		sc->rirb_size = 2;
 	else {
-		device_printf(sc->dev, "%s: Invalid rirb size (%x)\n",
+		device_printf(sc->dev, "%s: Hardware reports invalid rirb size "
+		    "(%x), defaulting to 256\n",
 		    __func__, rirbsize);
-		return (ENXIO);
+		sc->rirb_size = 256;
+		rirbsize = HDAC_RIRBSIZE_RIRBSIZE(HDAC_RIRBSIZE_RIRBSIZE_256);
+		HDAC_WRITE_1(&sc->mem, HDAC_RIRBSIZE, rirbsize);
 	}
 
 	HDA_BOOTVERBOSE(


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6957e915.d4fb.62b2ee57>