lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
 <TYCP286MB253572FE78870D62C35E6CACC40E2@TYCP286MB2535.JPNP286.PROD.OUTLOOK.COM>
Date: Thu, 18 Apr 2024 12:03:17 +0800
From: ArcticLampyrid <ArcticLampyrid@...look.com>
To: sbinding@...nsource.cirrus.com
Cc: ArcticLampyrid@...look.com,
	david.rhodes@...rus.com,
	james.schulman@...rus.com,
	linux-kernel@...r.kernel.org,
	linux-sound@...r.kernel.org,
	patches@...nsource.cirrus.com,
	rf@...nsource.cirrus.com,
	stable@...r.kernel.org
Subject: Re: RE: Re: [PATCH] ALSA: hda/realtek: Fix internal speakers for Legion Y9000X 2022 IAH7

> To clarify, was the log you attached here using:
>   { "17AA386E", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0}, 0, 2, -1, 0, 0, 0 },
> Or was it using your original value (index 1)?

Both get the same log.

> For further investigation, can you create a bugzilla ticket at the
> below address and CC Cirrus Patches (patches@...nsource.cirrus.com) to
> it.

OK. https://bugzilla.kernel.org/show_bug.cgi?id=218744

> Can you also mention which distro you are using, as well which Kernel you are using.

I'm using Arch Linux, the kernel is v6.8.5-arch1.

> Both amps use the same GPIO for the interrupt line, thus the interrupt is shared, and there is only a single interrupt line.

BTW, it's connected to APIC.

> Also, can you please attach a dmesg of the error

Without any patches, I got
```log
    Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 I2C devices.
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Failed property cirrus,dev-index: -22
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: error -EINVAL: Platform not supported
    cs35l41-hda: probe of i2c-CSC3551:00-cs35l41-hda.0 failed with error -22
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Failed property cirrus,dev-index: -22
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: error -EINVAL: Platform not supported
    cs35l41-hda: probe of i2c-CSC3551:00-cs35l41-hda.1 failed with error -22
```

With `generic_dsd_config` I got
```log
    kernel: genirq: Flags mismatch irq 58. 00002088 (cs35l41 IRQ1 Controller) vs. 00002088 (cs35l41 IRQ1 Controller)
```
as memtioned in the previous email.

With my initial patch:
```log
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Adding DSD properties for 17AA386E
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Using extra _DSD properties, bypassing _DSD in ACPI
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Cirrus Logic CS35L41 (35a40), Revision: B2
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Adding DSD properties for 17AA386E
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Using extra _DSD properties, bypassing _DSD in ACPI
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Reset line busy, assuming shared reset
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Cirrus Logic CS35L41 (35a40), Revision: B2
    Serial bus multi instantiate pseudo device driver CSC3551:00: Instantiated 2 I2C devices.
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Falling back to default firmware.
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: Firmware version: 3
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: Fri 24 Jun 2022 14:55:56 GMT Daylight Time
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0, 2 algorithms
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: cirrus/cs35l41-dsp1-spk-prot.bin: v0.58.0
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: spk-prot: e:\workspace\workspace\tibranch_release_playback_6.76_2\ormis\staging\default_tunings\internal\CS35L53\Fixed_Attenuation_Mono_48000_29.78.0\full\Fixed_Attenuation_Mono_48000_29.78.0_full.bin
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: CS35L41 Bound - SSID: 17AA386E, BST: 1, VSPK: 1, CH: L, FW EN: 1, SPKID: 1
    snd_hda_codec_realtek ehdaudio0D0: bound i2c-CSC3551:00-cs35l41-hda.0 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: Falling back to default firmware.
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: DSP1: Firmware version: 3
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot.wmfw: Fri 24 Jun 2022 14:55:56 GMT Daylight Time
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0, 2 algorithms
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: DSP1: cirrus/cs35l41-dsp1-spk-prot.bin: v0.58.0
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: DSP1: spk-prot: e:\workspace\workspace\tibranch_release_playback_6.76_2\ormis\staging\default_tunings\internal\CS35L53\Fixed_Attenuation_Mono_48000_29.78.0\full\Fixed_Attenuation_Mono_48000_29.78.0_full.bin
    cs35l41-hda i2c-CSC3551:00-cs35l41-hda.1: CS35L41 Bound - SSID: 17AA386E, BST: 1, VSPK: 1, CH: R, FW EN: 1, SPKID: 1
    snd_hda_codec_realtek ehdaudio0D0: bound i2c-CSC3551:00-cs35l41-hda.1 (ops cs35l41_hda_comp_ops [snd_hda_scodec_cs35l41])
```

> as well as the acpidump of your laptop.

The full acpi dump is shared via
https://bugzilla.kernel.org/show_bug.cgi?id=218744

The related item I think in DSDT table may be:
```
    Device (SPKR)
    {
        Name (_HID, "CSC3551")  // _HID: Hardware ID
        Name (_SUB, "17AA386E")  // _SUB: Subsystem ID
        Name (_UID, One)  // _UID: Unique ID
        Name (SRS0, 0x09060000)
        Name (SIN0, 0x0908000E)
        Name (SID0, 0x09060001)
        Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
        {
            Name (RBUF, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x0040, ControllerInitiated, 0x000F4240,
                    AddressingMode7Bit, "\\_SB.PC00.I2C3",
                    0x00, ResourceConsumer, , Exclusive,
                    )
                I2cSerialBusV2 (0x0041, ControllerInitiated, 0x000F4240,
                    AddressingMode7Bit, "\\_SB.PC00.I2C3",
                    0x00, ResourceConsumer, , Exclusive,
                    )
                GpioIo (Exclusive, PullNone, 0x0000, 0x0000, IoRestrictionOutputOnly,
                    "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0000
                    }
                GpioIo (Shared, PullNone, 0x0064, 0x0000, IoRestrictionInputOnly,
                    "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0000
                    }
                GpioIo (Exclusive, PullNone, 0x0000, 0x0000, IoRestrictionInputOnly,
                    "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0000
                    }
                Interrupt (ResourceConsumer, Edge, ActiveHigh, SharedAndWake, ,, _Y58)
                {
                    0x00000000,
                }
            })
            CreateWordField (RBUF, 0x59, RST0)
            CreateWordField (RBUF, 0x7C, INT0)
            CreateWordField (RBUF, 0x9F, PID0)
            CreateDWordField (RBUF, \_SB.PC00.I2C3.SPKR._CRS._Y58._INT, INT1)  // _INT: Interrupts
            RST0 = GNUM (SRS0)
            INT0 = GNUM (SIN0)
            PID0 = GNUM (SID0)
            INT1 = INUM (SIN0)
            Return (RBUF) /* \_SB_.PC00.I2C3.SPKR._CRS.RBUF */
        }

        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            SGRA (0x0908000E, One)
            SGII (0x0908000E, Zero)
            GRXE (0x0908000E, 0x03)
        }

        Method (_STA, 0, NotSerialized)  // _STA: Status
        {
            Return (0x0F)
        }

        Method (_DIS, 0, NotSerialized)  // _DIS: Disable Device
        {
        }

        Method (_PS0, 0, Serialized)  // _PS0: Power State 0
        {
            ^^^LPCB.H_EC.ECWT (Zero, RefOf (^^^LPCB.H_EC.AM12))
        }

        Method (_PS2, 0, Serialized)  // _PS2: Power State 2
        {
            ^^^LPCB.H_EC.ECWT (One, RefOf (^^^LPCB.H_EC.AM12))
        }

        Method (_PS3, 0, Serialized)  // _PS3: Power State 3
        {
        }
    }
```

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ