Skip to contentSkip to conversation

Why is Scope(_TZ_) defined as ACPI_TYPE_THERMAL rather than ACPI_TYPE_LOCAL_SCOPE

DISCUSSION Zhang Rui 2 participants 5 messages Sep 20, 2010 – Sep 21, 2010 ACPI

lore
Share & tools
lore

Zhang Rui

author
#0 lore raw

Hi, Bob,

this is the code in utglobal.c,
/*
* Predefined ACPI Names (Built-in to the Interpreter)
*
* NOTES:
* 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
* during the initialization sequence.
* 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
* perform a Notify() operation on it.
*/

const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
        {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
        {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
        {"_SB_", ACPI_TYPE_DEVICE, NULL},
        {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
        {"_TZ_", ACPI_TYPE_THERMAL, NULL},
        {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
        {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
        {"_GL_", ACPI_TYPE_MUTEX, (char *)1},

I found a problem that Linux thermal driver tries to probe _TZ_ because the _TZ_ ACPI namespace node type suggests it's a thermal device.

I'm wondering why it's a device rather than a scope.
The comment above says ASL code may perform a Notify() operation on it, but IMO, this notification is meaningless on its own, because _TZ_ can neither detect the temperature, nor cool the system down, i.e. no action should be taken on this notification.

So I think we should change the type to ACPI_TYPE_LOCAL_SCOPE, just like _PR_, _GPE.

BTW: yes, we can do the tricks in Linux/ACPI code, but it's more likely an ACPICA problem. what do you think?

thanks,
rui

#1 lore raw

I don't remember all of the details on this, but I will look at it and get back to you.

Quoted 47 lines

-----Original Message-----
From: Zhang, Rui
Sent: Monday, September 20, 2010 12:08 AM
To: Moore, Robert
Cc: [email protected]; Lin, Ming M; Brown, Len
Subject: Why is Scope(_TZ_) defined as ACPI_TYPE_THERMAL rather than ACPI_TYPE_LOCAL_SCOPE

Hi, Bob,

this is the code in utglobal.c,
/*
* Predefined ACPI Names (Built-in to the Interpreter)
*
* NOTES:
* 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
* during the initialization sequence.
* 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
* perform a Notify() operation on it.
*/

const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
       {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_SB_", ACPI_TYPE_DEVICE, NULL},
       {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_TZ_", ACPI_TYPE_THERMAL, NULL},
       {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
       {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
       {"_GL_", ACPI_TYPE_MUTEX, (char *)1},

I found a problem that Linux thermal driver tries to probe _TZ_ because the _TZ_ ACPI namespace node type suggests it's a thermal device.

I'm wondering why it's a device rather than a scope.
The comment above says ASL code may perform a Notify() operation on it, but IMO, this notification is meaningless on its own, because _TZ_ can neither detect the temperature, nor cool the system down, i.e. no action should be taken on this notification.

So I think we should change the type to ACPI_TYPE_LOCAL_SCOPE, just like _PR_, _GPE.

BTW: yes, we can do the tricks in Linux/ACPI code, but it's more likely an ACPICA problem. what do you think?

thanks,
rui

#2 lore raw
In reply to Zhang Rui

The comment appears to be correct as far as notifies on _TZ. I easily found a couple machines:

C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Benq-Joybook_6000-017-original.asl(3652): Notify (\_TZ, 0x80)
C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Benq-Joybook_7000-R202-custom.asl(3247): Notify (\_TZ, 0x80)
C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Toshiba-Tecra_S1-2.30-custom.asl(708): Notify (\_TZ, 0x80)
C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Toshiba-Tecra_S1-2.30-custom.asl(723): Notify (\_TZ, 0x80)
C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Toshiba-Tecra_S1-2.30-custom.asl(3560): Notify (\_TZ, 0x80)

Quoted 47 lines

-----Original Message-----
From: Zhang, Rui
Sent: Monday, September 20, 2010 12:08 AM
To: Moore, Robert
Cc: [email protected]; Lin, Ming M; Brown, Len
Subject: Why is Scope(_TZ_) defined as ACPI_TYPE_THERMAL rather than ACPI_TYPE_LOCAL_SCOPE

Hi, Bob,

this is the code in utglobal.c,
/*
* Predefined ACPI Names (Built-in to the Interpreter)
*
* NOTES:
* 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
* during the initialization sequence.
* 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
* perform a Notify() operation on it.
*/

const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
       {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_SB_", ACPI_TYPE_DEVICE, NULL},
       {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_TZ_", ACPI_TYPE_THERMAL, NULL},
       {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
       {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
       {"_GL_", ACPI_TYPE_MUTEX, (char *)1},

I found a problem that Linux thermal driver tries to probe _TZ_ because the _TZ_ ACPI namespace node type suggests it's a thermal device.

I'm wondering why it's a device rather than a scope.
The comment above says ASL code may perform a Notify() operation on it, but IMO, this notification is meaningless on its own, because _TZ_ can neither detect the temperature, nor cool the system down, i.e. no action should be taken on this notification.

So I think we should change the type to ACPI_TYPE_LOCAL_SCOPE, just like _PR_, _GPE.

BTW: yes, we can do the tricks in Linux/ACPI code, but it's more likely an ACPICA problem. what do you think?

thanks,
rui

author
#3 lore raw

Hi, bob,

Quoted 8 lines · Robert

The comment appears to be correct as far as notifies on _TZ. I easily found a couple machines:

C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Benq-Joybook_6000-017-original.asl(3652): Notify (\_TZ, 0x80)
C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Benq-Joybook_7000-R202-custom.asl(3247): Notify (\_TZ, 0x80)
C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Toshiba-Tecra_S1-2.30-custom.asl(708): Notify (\_TZ, 0x80)
C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Toshiba-Tecra_S1-2.30-custom.asl(723): Notify (\_TZ, 0x80)
C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Toshiba-Tecra_S1-2.30-custom.asl(3560): Notify (\_TZ, 0x80)

what does Notify (\_TZ, 0x80) mean?
_TZ doesn't have _TMP method as it's not an thermal zone actually. So what action should be taken when evaluating this ASL code?

Plus, if we really want "Notify(\_TZ, 0x80)", we can use ACPI_TYPE_DEVICE rather than ACPI_TYPE_THERMAL, right?

thanks,
rui

Quoted 51 lines
Quoted 50 lines

-----Original Message-----
From: Zhang, Rui
Sent: Monday, September 20, 2010 12:08 AM
To: Moore, Robert
Cc: [email protected]; Lin, Ming M; Brown, Len
Subject: Why is Scope(_TZ_) defined as ACPI_TYPE_THERMAL rather than ACPI_TYPE_LOCAL_SCOPE

Hi, Bob,

this is the code in utglobal.c,
/*
* Predefined ACPI Names (Built-in to the Interpreter)
*
* NOTES:
* 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
* during the initialization sequence.
* 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
* perform a Notify() operation on it.
*/

const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
       {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_SB_", ACPI_TYPE_DEVICE, NULL},
       {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_TZ_", ACPI_TYPE_THERMAL, NULL},
       {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
       {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
       {"_GL_", ACPI_TYPE_MUTEX, (char *)1},

I found a problem that Linux thermal driver tries to probe _TZ_ because the _TZ_ ACPI namespace node type suggests it's a thermal device.

I'm wondering why it's a device rather than a scope.
The comment above says ASL code may perform a Notify() operation on it, but IMO, this notification is meaningless on its own, because _TZ_ can neither detect the temperature, nor cool the system down, i.e. no action should be taken on this notification.

So I think we should change the type to ACPI_TYPE_LOCAL_SCOPE, just like _PR_, _GPE.

BTW: yes, we can do the tricks in Linux/ACPI code, but it's more likely an ACPICA problem. what do you think?

thanks,
rui

#4 lore raw

Yes, perhaps it should be type Device.

Quoted 87 lines

-----Original Message-----
From: Zhang, Rui
Sent: Monday, September 20, 2010 5:17 PM
To: Moore, Robert
Cc: [email protected]; Lin, Ming M; Brown, Len
Subject: RE: Why is Scope(_TZ_) defined as ACPI_TYPE_THERMAL rather than ACPI_TYPE_LOCAL_SCOPE

Hi, bob,

Quoted 1 line · Robert

The comment appears to be correct as far as notifies on _TZ. I easily

found a couple machines:

Quoted 2 lines

C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Benq-Joybook_6000-017-

original.asl(3652): Notify (\_TZ, 0x80)

Quoted 1 line

C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Benq-Joybook_7000-R202-

custom.asl(3247): Notify (\_TZ, 0x80)

Quoted 1 line

C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Toshiba-Tecra_S1-2.30-

custom.asl(708): Notify (\_TZ, 0x80)

Quoted 1 line

C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Toshiba-Tecra_S1-2.30-

custom.asl(723): Notify (\_TZ, 0x80)

Quoted 1 line

C:\ACPI_PREVIOUS\ASLFILES\DSDT DATABASE\Toshiba-Tecra_S1-2.30-

custom.asl(3560): Notify (\_TZ, 0x80)

Quoted 1 line

what does Notify (\_TZ, 0x80) mean?
_TZ doesn't have _TMP method as it's not an thermal zone actually. So what action should be taken when evaluating this ASL code?

Plus, if we really want "Notify(\_TZ, 0x80)", we can use ACPI_TYPE_DEVICE rather than ACPI_TYPE_THERMAL, right?

thanks,
rui

Quoted 51 lines
Quoted 50 lines

-----Original Message-----
From: Zhang, Rui
Sent: Monday, September 20, 2010 12:08 AM
To: Moore, Robert
Cc: [email protected]; Lin, Ming M; Brown, Len
Subject: Why is Scope(_TZ_) defined as ACPI_TYPE_THERMAL rather than ACPI_TYPE_LOCAL_SCOPE

Hi, Bob,

this is the code in utglobal.c,
/*
* Predefined ACPI Names (Built-in to the Interpreter)
*
* NOTES:
* 1) _SB_ is defined to be a device to allow \_SB_._INI to be run
* during the initialization sequence.
* 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
* perform a Notify() operation on it.
*/

const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
       {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_SB_", ACPI_TYPE_DEVICE, NULL},
       {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
       {"_TZ_", ACPI_TYPE_THERMAL, NULL},
       {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
       {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
       {"_GL_", ACPI_TYPE_MUTEX, (char *)1},

I found a problem that Linux thermal driver tries to probe _TZ_ because the _TZ_ ACPI namespace node type suggests it's a thermal device.

I'm wondering why it's a device rather than a scope.
The comment above says ASL code may perform a Notify() operation on it, but IMO, this notification is meaningless on its own, because _TZ_ can neither detect the temperature, nor cool the system down, i.e. no action should be taken on this notification.

So I think we should change the type to ACPI_TYPE_LOCAL_SCOPE, just like _PR_, _GPE.

BTW: yes, we can do the tricks in Linux/ACPI code, but it's more likely an ACPICA problem. what do you think?

thanks,
rui