19.06.2014 13:44, Edward Tomasz Napierała пишет:
> On 0619T0935, Alexandr Krivulya wrote:
>> 18.06.2014 12:29, Edward Tomasz Napierała пишет:
>>> On 0618T1108, Alexandr Krivulya wrote:
>>>> 16.06.2014 22:21, Edward Tomasz Napierała пишет:
>>>>> Hi. Patch below should fix a problem where USB stops working after
>>>>> _second_ suspend/resume, which happens on various ThinkPad models.
>>>>> Please test, and report both success stories and failures. If nothing
>>>>> comes up, I'll commit it in a week or so.
>>>>>
>>>>> (Btw, has anyone encountered the problem on hardware other than
>>>>> ThinkPads?)
>>>>>
>>>>>
>>>>> Index: sys/dev/acpi_support/acpi_ibm.c
>>>>> ===================================================================
>>>>> --- sys/dev/acpi_support/acpi_ibm.c (revision 267417)
>>>>> +++ sys/dev/acpi_support/acpi_ibm.c (working copy)
>>>>> @@ -169,6 +169,9 @@ struct acpi_ibm_softc {
>>>>> int light_get_supported;
>>>>> int light_set_supported;
>>>>>
>>>>> + /* USB power workaround */
>>>>> + ACPI_HANDLE power_handle;
>>>>> +
>>>>> /* led(4) interface */
>>>>> struct cdev *led_dev;
>>>>> int led_busy;
>>>>> @@ -365,6 +368,7 @@ acpi_ibm_attach(device_t dev)
>>>>> {
>>>>> struct acpi_ibm_softc *sc;
>>>>> devclass_t ec_devclass;
>>>>> + ACPI_STATUS status;
>>>>>
>>>>> ACPI_FUNCTION_TRACE((char *)(uintptr_t) __func__);
>>>>>
>>>>> @@ -448,6 +452,17 @@ acpi_ibm_attach(device_t dev)
>>>>> if (sc->light_set_supported)
>>>>> sc->led_dev = led_create_state(ibm_led, sc, "thinklight",
>>>>> sc->light_val);
>>>>>
>>>>> + /*
>>>>> + * Obtain a handle to the power resource available on many models.
>>>>> + * This must be turned on manually upon resume. Otherwise the system
>>>>> + * may, for instance, resume from S3 with usb(4) powered down.
>>>>> + */
>>>>> + status = AcpiGetHandle(sc->handle, "\\_SB.PCI0.LPC.EC.PUBS",
>>>>> &sc->power_handle);
>>>>> + if (ACPI_FAILURE(status)) {
>>>>> + device_printf(dev, "Failed to get power handle\n");
>>>>> + return (status);
>>>>> + }
>>>>> +
>>>>> return (0);
>>>>> }
>>>>>
>>>>> @@ -476,6 +491,7 @@ static int
>>>>> acpi_ibm_resume(device_t dev)
>>>>> {
>>>>> struct acpi_ibm_softc *sc = device_get_softc(dev);
>>>>> + ACPI_STATUS status;
>>>>>
>>>>> ACPI_FUNCTION_TRACE((char *)(uintptr_t) __func__);
>>>>>
>>>>> @@ -495,6 +511,15 @@ acpi_ibm_resume(device_t dev)
>>>>>
>>>>> acpi_ibm_sysctl_set(sc, i, val);
>>>>> }
>>>>> + if (sc->power_handle != NULL) {
>>>>> + status = AcpiEvaluateObject(sc->power_handle,
>>>>> + "_ON", NULL, NULL);
>>>>> + if (ACPI_FAILURE(status)) {
>>>>> + device_printf(dev, "failed to switch %s on - %s\n",
>>>>> + acpi_name(sc->power_handle),
>>>>> + AcpiFormatException(status));
>>>>> + }
>>>>> + }
>>>>> ACPI_SERIAL_END(ibm);
>>>>>
>>>>> return (0);
>>>> Hi. I've never seen this problem before on my ThinkPad E530. However, I
>>>> have applied this patch and after reboot all sysctl oids related to
>>>> acpi_ibm disappeared.
>>>>
>>>> root@thinkpad:/home/shurik # kldstat|grep ibm
>>>> 9 1 0xffffffff82190000 77e8 acpi_ibm.ko
>>>>
>>>> root@thinkpad:/home/shurik # sysctl dev.acpi_ibm
>>>> root@thinkpad:/home/shurik #
>>>>
>>>> And in dmesg I see this errors:
>>>>
>>>> root@thinkpad:/home/shurik # dmesg -a|grep ibm
>>>> acpi_ibm0: <IBM ThinkPad ACPI Extras> on acpi0
>>>> acpi_ibm0: Failed to get power handle
>>>> device_attach: acpi_ibm0 attach returned 5
>>> Ok, I'll make that attach problem non-fatal.
>>>
>>> Just to make sure: without the patch you don't have any problems
>>> with USB after multiple suspend/resume cycles, and you don't use
>>> any workarounds to make it work, eg. setting the dev.uhci.0.wake=1,
>>> or making USB ports always powered on in BIOS?
>>>
>> Exactly. I have no any problems with USB. Average uptime is two-three
>> weeks with everyday suspend/resume cycle. And I don't use any special
>> settings related to usb in loader.conf or sysctl.conf. The only
>> difference with GENERIC - all usb support built and loaded as modules.
>> In my BIOS i have turned on such settings:
>>
>> - USB Support
>> - UEFI BIOS Support
>> - Always On USB
> The last one is off by default, right? Turning it on actually
> works around the problem in earlier Thinkpad models. Could you
> try to set it to default (disable) and see if the problem still
> doesn't occur?
>
This option is enabled by default on my laptop. It allows to charge
mobile devices when laptop in sleep state or powered off via USB 2.0 port.
Now, I reset BIOS to default settings and turned off "Always on USB",
boot to my old kernel without patch and do suspend/resume three times.
Both 3.0 and 2.0 USB ports works fine after each resume.
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"