Index | Thread | Search

From:
Mark Kettenis <mark.kettenis@xs4all.nl>
Subject:
Re: Fix HP Omnibook X 14 boot in ACPI mode
To:
Marcus Glocker <marcus@nazgul.ch>
Cc:
tech@openbsd.org
Date:
Thu, 26 Dec 2024 10:37:25 +0100

Download raw body.

Thread
> Date: Mon, 23 Dec 2024 19:53:48 +0100
> From: Marcus Glocker <marcus@nazgul.ch>
> 
> landry@ noticed a crash when trying to boot his HP Omnibook X 14 in
> ACPI mode:
> 
> 	acpitz24 at acpi0unsupported access type 0xf05
> 	02ce Called: \_SB_.IC10.RDEC
> 	  arg0: 0xffffff8023691c08 cnt:01 stk:00 integer: a9
> 	53a97 Called: \_SB_.TZ39._TMP
> 	panic: aml_die aml_rwgsb:2581
> 
> 	aml_die at aml_rwgsb+0x348
> 	aml_rwinde3xfield at aml_rwfield+0x29c
> 	aml_rwfield at aml_store+0x1cc
> 	aml_store at aml_parse+0x15b0
> 
> Apparently we are not supporting the 'AttribRawProcessBytes' attribute
> in our DSDT code, which leads to the "unsupported access type" message
> followed by the panic.
> 
> By adding the 'AttribRawProcessBytes' attribute, and handling it the
> same way as the 'AttribRawBytes' attribute, landry@ can boot the HP
> Omnibook X 14 also in ACPI mode.
> 
> Feedback, OKs?

I see that you've already committed the diff, but I don't think this
is right.  The AttribRawProcessBytes call is supposed to be a write
followed by a read.  But I suspect that AttribRawBytes isn't
implemented correctly either.

The documentation of these calls is annoyingly ambigious.  At least I
can't figure out what the language in the spec means.  I'll have
another look at this; cross-referencing the SMBus spec might help me
figuring this out.

> Index: sys/dev/acpi/dsdt.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v
> diff -u -p -u -p -r1.271 dsdt.c
> --- sys/dev/acpi/dsdt.c	20 Sep 2024 02:00:46 -0000	1.271
> +++ sys/dev/acpi/dsdt.c	23 Dec 2024 16:47:12 -0000
> @@ -2574,6 +2574,7 @@ aml_rwgsb(struct aml_value *conn, int le
>  			buflen = len;
>  			break;
>  		case 0x0e:	/* AttribRawBytes */
> +		case 0x0f:	/* AttribRawProcessBytes */
>  			cmdlen = 0;
>  			buflen = len;
>  			break;
> @@ -2664,6 +2665,7 @@ aml_rwgsb(struct aml_value *conn, int le
>  			break;
>  		case 0x0b:	/* AttribBytes */
>  		case 0x0e:	/* AttribRawBytes */
> +		case 0x0f:	/* AttribRawProcessBytes */
>  			buflen = len;
>  			break;
>  		default:
> 
>