Skip to contentSkip to conversation

DSDT Fix, one question ...

DISCUSSION Sander Smeenk 3 participants 4 messages Feb 27, 2003 3 messages not in the archive ACPI

lore
Share & tools
lore
#0 lore raw

Hi,

I'm trying to fix the DSDT on my desktop machine just to "learn" a bit about this. I fixed all compile errors, but for one I am not sure if I did the Right Thing (TM):

iasl tells me:
| dsdt.asl:1830: Method(STM_, 0, Serialized) {
| Warning 2019 - ^ Not all control paths return a value (STM_)

And indeed, there is no Return() at the end of this method. So I added 'Return(TMD0)', because I saw that in other methods too. It fixes the compile warning, but I am not sure what TMD0 is, and wether it is the right thing to return or not.

Especially because of this if-block at the top:

| If(REGF) {
| }
| Else {
|     Return(TMD0)
| }

It seems to only return TMD0 if REGF is not set. What is the correct way of finding out what it should return?

Or should I just return 0x00 ? :)

Thanks,
Sander.

Method-with-error:

| Method(STM_, 0, Serialized) {
|     If(REGF) {
|     }
|     Else {
|         Return(TMD0)
|     }
|     Store(0x0, GMUE)
|     Store(0x7, GMUT)
|     Store(0x0, GSUE)
|     Store(0x7, GSUT)
|     If(And(CHNF, 0x1, )) {
|         Store(Match(DerefOf(Index(TIM0, 0x3, )), MLE, DMA0, MTR, 0x0, 0x0), Local0)
|         If(LGreater(Local0, 0x6)) {
|             Store(0x6, Local0)
|         }
|         If(LOr(LEqual(\_SB_.PCI0.SBRG.D147, 0x3147), LEqual(\_SB_.PCI0.SBRG.D147, 0x3177))) {
|             Store(DerefOf(Index(DerefOf(Index(TIM0, 0x9, )), Local0, )), GMUT)
|         }
|         Else {
|             Store(DerefOf(Index(DerefOf(Index(TIM0, 0x4, )), Local0, )), GMUT)
|         }
|         Or(GMUE, 0x7, GMUE)
|     }
|     Else {
|         If(Or(LEqual(PIO0, Ones), LEqual(PIO0, 0x0), )) {
|             If(And(LLess(DMA0, Ones), LGreater(DMA0, 0x0), )) {
|                 Store(DMA0, PIO0)
|             }
|         }
|     }
|     If(And(CHNF, 0x4, )) {
|         Store(Match(DerefOf(Index(TIM0, 0x3, )), MLE, DMA1, MTR, 0x0, 0x0), Local0)
|         If(LGreater(Local0, 0x6)) {
|             Store(0x6, Local0)
|         }
|         If(LOr(LEqual(\_SB_.PCI0.SBRG.D147, 0x3147), LEqual(\_SB_.PCI0.SBRG.D147, 0x3177))) {
|             Store(DerefOf(Index(DerefOf(Index(TIM0, 0x9, )), Local0, )), GSUT)
|         }
|         Else {
|             Store(DerefOf(Index(DerefOf(Index(TIM0, 0x4, )), Local0, )), GSUT)
|         }
|         Or(GSUE, 0x7, GSUE)
|     }
|     Else {
|         If(Or(LEqual(PIO1, Ones), LEqual(PIO1, 0x0), )) {
|             If(And(LLess(DMA1, Ones), LGreater(DMA1, 0x0), )) {
|                 Store(DMA1, PIO1)
|             }
|         }
|     }
|     And(Match(DerefOf(Index(TIM0, 0x0, )), MGE, PIO0, MTR, 0x0, 0x0), 0x7, Local0)
|     Store(DerefOf(Index(DerefOf(Index(TIM0, 0x1, )), Local0, )), Local1)
|     Store(Local1, GMPT)
|     And(Match(DerefOf(Index(TIM0, 0x0, )), MGE, PIO1, MTR, 0x0, 0x0), 0x7, Local0)
|     Store(DerefOf(Index(DerefOf(Index(TIM0, 0x1, )), Local0, )), Local1)
|     Store(Local1, GSPT)
| }
Signature · 8 lines
| Why is the time of day with the slowest traffic called rush hour?
| 1024D/08CEC94D - 34B3 3314 B146 E13C 70C8  9BDB D463 7E41 08CE C94D


-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com

A message that is not in the archive (sent off-list or not yet received): 20030227104122.GG21631-ntXksADE/[email protected]

#2 lore raw

Hi,

I bet this sub-method "STM_" is being called from _STM - standard method to set timing mode for IDE - and "TMD0" may stand for "Timing for D0", but I'm lipping just a gibberish without whole DSDT and make/chipset info. I need'em for better reasoning.

Thanks,
- Adachi, Kenichi

Quoted 107 lines

-----Original Message-----
From: acpi-devel-admin-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org [mailto:acpi-devel-admin-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org] On Behalf Of Sander Smeenk
Sent: Thursday, February 27, 2003 7:41 PM
To: [email protected]
Subject: [ACPI] DSDT Fix, one question ...

Hi,

I'm trying to fix the DSDT on my desktop machine just to "learn" a bit about this. I fixed all compile errors, but for one I am not sure if I did the Right Thing (TM):

iasl tells me:
| dsdt.asl:1830: Method(STM_, 0, Serialized) {
| Warning 2019 - ^ Not all control paths return a
value (STM_)

And indeed, there is no Return() at the end of this method. So I added 'Return(TMD0)', because I saw that in other methods too. It fixes the compile warning, but I am not sure what TMD0 is, and wether it is the right thing to return or not.

Especially because of this if-block at the top:

| If(REGF) {
| }
| Else {
|     Return(TMD0)
| }

It seems to only return TMD0 if REGF is not set. What is the correct way of finding out what it should return?

Or should I just return 0x00 ? :)

Thanks,
Sander.

Method-with-error:

| Method(STM_, 0, Serialized) {
|     If(REGF) {
|     }
|     Else {
|         Return(TMD0)
|     }
|     Store(0x0, GMUE)
|     Store(0x7, GMUT)
|     Store(0x0, GSUE)
|     Store(0x7, GSUT)
|     If(And(CHNF, 0x1, )) {
|         Store(Match(DerefOf(Index(TIM0, 0x3, )), MLE, DMA0, 
MTR, 0x0, 0x0), Local0)
|         If(LGreater(Local0, 0x6)) {
|             Store(0x6, Local0)
|         }
|         If(LOr(LEqual(\_SB_.PCI0.SBRG.D147, 0x3147), 
LEqual(\_SB_.PCI0.SBRG.D147, 0x3177))) {
|             Store(DerefOf(Index(DerefOf(Index(TIM0, 0x9, 
)), Local0, )), GMUT)
|         }
|         Else {
|             Store(DerefOf(Index(DerefOf(Index(TIM0, 0x4, 
)), Local0, )), GMUT)
|         }
|         Or(GMUE, 0x7, GMUE)
|     }
|     Else {
|         If(Or(LEqual(PIO0, Ones), LEqual(PIO0, 0x0), )) {
|             If(And(LLess(DMA0, Ones), LGreater(DMA0, 0x0), )) {
|                 Store(DMA0, PIO0)
|             }
|         }
|     }
|     If(And(CHNF, 0x4, )) {
|         Store(Match(DerefOf(Index(TIM0, 0x3, )), MLE, DMA1, 
MTR, 0x0, 0x0), Local0)
|         If(LGreater(Local0, 0x6)) {
|             Store(0x6, Local0)
|         }
|         If(LOr(LEqual(\_SB_.PCI0.SBRG.D147, 0x3147), 
LEqual(\_SB_.PCI0.SBRG.D147, 0x3177))) {
|             Store(DerefOf(Index(DerefOf(Index(TIM0, 0x9, 
)), Local0, )), GSUT)
|         }
|         Else {
|             Store(DerefOf(Index(DerefOf(Index(TIM0, 0x4, 
)), Local0, )), GSUT)
|         }
|         Or(GSUE, 0x7, GSUE)
|     }
|     Else {
|         If(Or(LEqual(PIO1, Ones), LEqual(PIO1, 0x0), )) {
|             If(And(LLess(DMA1, Ones), LGreater(DMA1, 0x0), )) {
|                 Store(DMA1, PIO1)
|             }
|         }
|     }
|     And(Match(DerefOf(Index(TIM0, 0x0, )), MGE, PIO0, MTR, 
0x0, 0x0), 0x7, Local0)
|     Store(DerefOf(Index(DerefOf(Index(TIM0, 0x1, )), 
Local0, )), Local1)
|     Store(Local1, GMPT)
|     And(Match(DerefOf(Index(TIM0, 0x0, )), MGE, PIO1, MTR, 
Quoted 20 lines

0x0, 0x0), 0x7, Local0)
| Store(DerefOf(Index(DerefOf(Index(TIM0, 0x1, )),
Local0, )), Local1)
| Store(Local1, GSPT)
| }

Signature · 12 lines
| Why is the time of day with the slowest traffic called rush hour?
| 1024D/08CEC94D - 34B3 3314 B146 E13C 70C8  9BDB D463 7E41 08CE C94D


-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
Acpi-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/acpi-devel

-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com

A message that is not in the archive (sent off-list or not yet received): [email protected]

#4 lore raw
Quoted 4 lines · Adachi, Kenichi

I bet this sub-method "STM_" is being called from _STM - standard method to set timing mode for IDE - and "TMD0" may stand for "Timing for D0", but I'm lipping just a gibberish without whole DSDT and make/chipset info. I need'em for better reasoning.

The complete DSDT is now located at:
http://valor.freshdot.net/~ssmeenk/

There's a lot of info about my hardware inside the DSDT. This one came from an MSI KT333 Ultra ARU (MS-6580E) mainboard running the latest, or maybe the second to last BIOS, not sure about that. I'm currently running 2.5.53 vanilla, with no special ACPI-patches applied.

HTH,
Sander.

Signature · 8 lines
| Waarom draagt een kamikazepiloot een helm ? 
| 1024D/08CEC94D - 34B3 3314 B146 E13C 70C8  9BDB D463 7E41 08CE C94D


-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com

A message that is not in the archive (sent off-list or not yet received): 20030227125318.GI21631-ntXksADE/[email protected]

#6 lore raw

Hi,

Theoretically or ideally speaking, OS (IDE guy) retrieves the current setting for IDE by running _GTM, verifies/modifies the returned buffer from ACPI BIOS, and applies it back to IDE Controller's registers by running _STM. However, grep'ing drivers/ide for "GTM" or "STM" didn't come back positively with linux-2.5.51. This could mean that whole chunk annoying you is not used by Linux yet.

Quoted 2 lines

The complete DSDT is now located at:
http://valor.freshdot.net/~ssmeenk/

Your "TMD0" is locally created buffer to hold the setting info for IDE. This apparently conforms to the format of _GTM Result Code (ACPI Spec Table 10-4).

  1663              Name(TMD0, Buffer(0x14) { })
  1664              CreateDWordField(TMD0, 0x0, PIO0)
  1665              CreateDWordField(TMD0, 0x4, DMA0)
  1666              CreateDWordField(TMD0, 0x8, PIO1)
  1667              CreateDWordField(TMD0, 0xc, DMA1)
  1668              CreateDWordField(TMD0, 0x10, CHNF)

OS calls _GTM to get the current setting, _GTM then calls "GTM_", and "GTM_" packs requested info in corresponding fields within "TMD0". Thus, returning "TMD0" does really make sense in this *GET* context, but does not in *SET* context very much. To me, at a glance, sub-method "STM_" called from _STM doesn't have to return anything in the following sequence (didn't check iASL code as to what made him give you warning):

1709 Method(_STM, 3) {
1710 Store(Arg0, Debug)
1711 Store(Arg0, TMD0) // saving the passed
buffer from OS for later use?

  1712                      Store(PMPT, GMPT)
  1713                      Store(PMUE, GMUE)
  1714                      Store(PMUT, GMUT)
  1715                      Store(PMCR, GMCR)
  1716                      Store(PSPT, GSPT)
  1717                      Store(PSUE, GSUE)
  1718                      Store(PSUT, GSUT)
  1719                      Store(PSCR, GSCR)
  1720                      STM_()
     :
Quoted 3 lines

This one came from an MSI KT333 Ultra ARU (MS-6580E) mainboard running the latest, or maybe the second to last BIOS, not sure about that.

Incidentally, your "REGF" flag simply tells you the availability of "CFG2" PCI_Config OpRegion (OpRegion handler is ready or not). OpRegion "CFG2" created at offset 0x40 - 0x60 of your IDE Controller(Bus:0, Dev:17, Func:1)'s PCI Config Space would represent something essential for IDE setting. For more details, you have to consult your South Bridge's Datasheet. Don't know if VIA publishes it or not...

  1564          Device(IDE0) {
  1565              Name(_ADR, 0x00110001)
  1566              Name(REGF, 0x1)
  1567              Method(_REG, 2) {
  1568                  If(LEqual(Arg0, 0x2)) {  
  1569                      Store(Arg1, REGF)  
  1570                  }
  1571              }
      :
  1669              OperationRegion(CFG2, PCI_Config, 0x40, 0x20)

Thanks,
- Adachi, Kenichi

-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf