Regression in sdhci-pci-o2micro.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I have an Intel Hades Canyon NUC (NUC8i7HVK)
whose O2 Micro based SD-Card reader is no longer identified when its Linux kernel is updated past 5.12

I "fixed" this by reverting a change from 5/9/21  (git efc58a96adcd29cc37487a60582d9d08b34f6640) that inserted proper error checking after all the PCI config space reads in the device probe.
This would be code removed enclosed in #if 0 below:

    case PCI_DEVICE_ID_O2_SEABIRD0:
    case PCI_DEVICE_ID_O2_SEABIRD1:
        /* UnLock WP */
        ret = pci_read_config_byte(chip->pdev,
                O2_SD_LOCK_WP, &scratch);
        if (ret)
            return ret;

        scratch &= 0x7f;
        pci_write_config_byte(chip->pdev, O2_SD_LOCK_WP, scratch);

        ret = pci_read_config_dword(chip->pdev,
                        O2_SD_PLL_SETTING, &scratch_32);
#if 0
        if (ret)
            return ret;
#endif

        if ((scratch_32 & 0xff000000) == 0x01000000) {
            scratch_32 &= 0x0000FFFF;
            scratch_32 |= 0x1F340000;

            pci_write_config_dword(chip->pdev,
                           O2_SD_PLL_SETTING, scratch_32);
        } else {
            scratch_32 &= 0x0000FFFF;
            scratch_32 |= 0x25100000;

            pci_write_config_dword(chip->pdev,
                           O2_SD_PLL_SETTING, scratch_32);

            ret = pci_read_config_dword(chip->pdev,
                            O2_SD_FUNC_REG4,
                            &scratch_32);
#if 0
            if (ret)
                return ret;
#endif
            scratch_32 |= (1 << 22);
            pci_write_config_dword(chip->pdev,
                           O2_SD_FUNC_REG4, scratch_32);
        }

Both those pci_read_config_dword() calls return -EINVAL on my machine.
The driver had been working earlier precisely because it was ignoring these error returns from pci_read_config_dword.
Have you seen this behavior before on any other hardware?

The SDcard reader identifies as:
03:00.0 SD Host controller: O2 Micro, Inc. SD/MMC Card Reader Controller (rev 01)
03:00.0 0805: 1217:8621 (rev 01)

I've been unable to find /any/ information on this chip.
Do you have any you could share?  A datasheet would be ideal :-)

Also:
I've always had to operate this driver with debug_quirks2=4 to disable ultra high-speed support.
Is this a known issue?
Or, could it be a symptom of the failing pci_read_configs curing probe?

Thanks for your attention,

--
 Brent Roman                                   MBARI
 Software Engineer               Tel: (831) 775-1808
 mailto:brent@xxxxxxxxx   http://www.mbari.org/~brent






[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux