当存在断电状态时恢复存储器设备信道的方法和设备的制作方法

文档序号:6419333阅读:238来源:国知局
专利名称:当存在断电状态时恢复存储器设备信道的方法和设备的制作方法
背景发明领域本发明涉及事件处理系统领域。更具体地,本发明涉及初始化或配置一个存储器信道中的存储器设备,并且当存在断电状态时恢复存储器设备。
将计算机系统置于断电状态是一个众所周知的节省电力的技术。例如,高级配置和电压管理接口规范建议使用几个断电状态并定义操作系统软件和系统硬件之间的接口。
延缓至RAM(STR)状态是一个普遍使用于电压管理应用中的状态。一般地,当进入这种断电状态,处理动作停止,并且某些值保存在存储器中,保留它们以备后来处理恢复时使用。例如,ACPI S3睡眠状态是一个除了系统存储器之外所有系统上下关系都失去的状态。处理器和存储器控制器的关系(即寄存器和内部存储器值)在该状态被丢失。而且,其它电压管理技术可以包括类似状态,在该状态位于芯片组或存储器控制器中的寄存器和/或存储器值被丢失。
在一个为了与存储器正确通信需要初始化存储器配置寄存器的系统中,丢失存储器控制器值可能是特别有问题的。直到这样的值被恢复,主存储器才能被访问。而且,主存储器不能用于保存配置值或用来保存一个恢复这样的值的程序。
为了恢复这样的存储器配置寄存器的值,一个方法将是执行整个存储器初始化序列来重新建立失去的初始值。然而,该方法可能由于二个原因是不好的。第一,初始化序列可能很长,当系统试图从STR状态唤醒时,因而引起显著的延迟出现。第二,初始化序列可能执行某些破坏存储器内容的操作。如果存储器确实由于重新初始化系统而丢失,这样的一个方法将对某些执行方案是不实用的。例如,假如现有的ACPI S3状态破坏了存储器,该执行方案将不符合ACPI规范。
一个在正确操作之前要求大量初始化的总线为Rambus直接Rambus动态随机存取存储器信道(一个直接RDRAM信道)。该总线从加州的Mountain View的RAMBUS公司可获得的文献中已作详细描述。当类似直接Rambus信道结构的一个总线结构的存储器控制器置于断电状态时,数个存储器控制器值可能丧失,并且现有技术可能不能提供一个合适的机制来恢复这些值。
发明概述公开了当存在断电状态时恢复存储器设备信道的方法和设备。一个方法涉及保存来自存储器控制器的保存位置的存储器初始值的集合到一个存储器中,该存储器在电源关闭状态过程中维持值。这些值可能需要访问系统存储器。当退出电源关闭状态时,这些值恢复到存储器控制器中的保存位置。


用实例的方法描述本发明,但不限于附图中的数字。
图1描述系统的一个实施例,使用存储器控制器中的配置寄存器来指定存储器初始化的初始化操作。
图2描述对图1中的系统的一个实施例进行编程和执行初始化操作的流程图。
图3描述存储器控制集线器的一个实施例,它根据装载到控制和数据寄存器中的值来进行存储器初始化。
图4描述存储器设备核心初始化操作的流程图。
图5描述实现图6-9中所示的初始化流程的系统的一个实施例。
图6描述图5中所示系统的存储器子系统的一个整体初始化序列的一个实施例的流程图。
图7描述一个串行设备确认过程的一个实施例。
图8A-8C描述一组设备确认过程的一个实施例。
图9描述存储器设备核心初始化过程的一个实施例。
图10描述的从暂停至RAM电源管理状态返回过程的一个实施例。
发明详述以下描述提供了一个当存在断电状态时恢复存储器设备信道的方法和设备。在以下描述中,提出了几个特定细节,如寄存器名称,存储器类型,总线协议,特定类型元件和逻辑分区以及集成选择,以便更彻底的理解本发明。但是,任何一个本领域的技术人员可以理解,本发明可以不需这些特定细节而实现。在其它情况下,为了突出本发明,控制结构和门级电路没有详细示出。那些本领域的技术人员,用以下所含描述,不需不适当试验将能实现必要的逻辑电路。
使用当前公开技术,可以实现有效的和弹性的存储器初始化。控制和数据寄存器可以编程,从而使得存储器控制集线器根据装载至寄存器中的值进行初始化操作(IOPs)。因为寄存器可以用软件,诸如基本输入/输出系统(BIOS)来编程,初始化可以相对容易地被改变。
图1描述利用寄存器进行存储器初始化的系统的一个实施例。该系统包括一个处理器195和一个存储器子系统104,它们与存储器控制集线器(MCH)100藕连。还与MCH100连接的是二级总线180,它与输入设备190和含有BIOS例程的非易失性存储器185连接。在某些实施例中,非易失性存储器185和输入设备190中的任何一个或二者可以通过第二控制集线器(未示出)连接至MCH100。
在描述的实施例中,存储器子系统104包括3个存储器模块160,170和175,它们通过串行总线142和存储器总线132(也称为信道)连接MCH100。每个存储器模块可以包含一组单独的存储器设备。例如,存储器模块160至少包括存储器设备160,161和168。在一个实施例中,存储器设备160,161和168为Rambus DRAMs(RDRAM),存储器模块为Rambus线内存储器模块(RIMM),根据定义RIMM和RDRAM的协议信道运行。
MCH100包括一个控制寄存器112和一个数据寄存器114,它们可以用于初始化目的。初始化控制电路120执行编程到控制寄存器112中的初始化操作数(IOP)。控制寄存器112一般包括指定初始化操作信息的其它一些域,一些由IOP指定的操作涉及与存储器子系统中的设备的数据交换(如,写和读存储器设备控制寄存器,或者生成控制信号)。
一个串行接口电路140生成串行总线142上的串命令和数据序列。初始化控制电路120执行的一些命令通过串行总线142发送命令和/或数据至存储器子系统。在一个实施例中,串行接口电路实现与存储器子系统104通信的一个串行出现检测(SPD)协议。SPD协议利用一个SPD时钟针,一个命令(CMD)针和双向串行I/O针(SIO0和SIO1)来从存储器子系统控制寄存器读取数据和向它写入数据。
控制寄存器,包括确认个数的设备寄存器,可以经过SPD接口读取和写入。而且,每个模块的非易失性存储器可以通过SPD接口读取,以确定信息,如计时信息,设备组织和有关每个特定存储器模块的设备技术。SPD协议的更多细节在“串行出现检测应用简介”和从Rambus得到的直接Rambus RIMM模块和64/72M字节直接RDRAM数据表中讨论。
存储器接口电路130将存储器数据翻译给数据包,并从数据包翻译数据,这些数据包与存储器子系统进行交换。在一个实施例中,存储器接口电路是一个Rambus ASIC单元(RAC),象从加州Mountain View的Rambus公司可得到的“直接RAC数据表”中所描写的一样充分地发挥作用。简而言之,RAC转换存储器控制信号为RSL信号,RSL信号能由Rambus信道上存储器设备处理。
图1系统的初始化事件序列在图2中描述。当该系统复位或打开时,BIOS一般执行不同的初始化操作。在块200,BIOS影响存储器配置部分。根据存储器类型和使用所希望的模式,初始化操作将以一个特殊序列由BIOS选择(块205)。系统利用RDRAMs的一个初始化序列的实施例的详细情况将参照图5-9加以讨论。
如块210所示,特殊初始化操作的数据(如果有的话)保存在数据寄存器114中,并且带有其它控制信息的初始化操作数本身保存在控制寄存器112中。在一些实施例中,BIOS可以通过写入外部元件互连(PCI)配置寄存器执行这样的功能。作为选择,其它寄存器可以被使用,或者要么在要么不在MCH中的通用存储器位置可以是控制寄存器。事实上,控制寄存器可以是合作存储器初始化之前对MCH来说是可访问的任何存储位置,它能够保存足够的IOP位和任何其它所需的控制信息。
当合适的初始化操作和/或控制信息被编程到控制寄存器112中,初始化操作可以自动开始。例如,执行块215中所示的初始化操作可以用设置一个初始初始化操作(IIO)位来实现,当初始化操作数被装载到控制寄存器112中时,该位可以是控制寄存器112的一个域。
初始化操作的完成可以用任何足够警觉或告知BIOS的方式发出初始化已完成的信号。例如,当初始化操作完成时MCH可以自动清空IIO位。如果BIOS轮询IIO位,它可以决定何时初始化操作如块220中所示完成。例如初始化操作没有完成,BIOS可以继续轮询IIO位。如果初始化操作完成,BIOS可以选择在块205中的初始化序列中的下一个初始化操作。
输入设备190可以接收多来自计算机存储设备192(如,光盘或磁盘或其它存储设备)的程序指令或来自网络或来自通信接口194的程序指令。使系统实现本公开技术的BIOS码(即计算机指令)可以以几种方式编程到非易失性存储器185中。当系统被制造出来或通过输入设备190经过计算机可读介质后来被交付时,BIOS可以被编程。
在BIOS后来被交付的情况下,指令可以经过计算机可读介质交付。有了适当的接口设备190,或者一个电子信号或者一个实际载波是一个计算机可读介质。例如,计算机存储设备192是一个实施例中的计算机可读介质。载有计算机指令的一个载波196是另一个实施例中的计算机可读介质。载波196可以被调制或被处理为包括指令,这些指令能使用已知的或其它可得到的通信技术由输入设备190解码。在二种情况下,计算机指令可以经过计算机可读介质交付。
图3示出了存储器控制器集线器(MCH)300的另外详情。特定寄存器名称,位置,大小,域定义和初始化操作的详情下面作为一个实施例给出。其它实施例对于本领域的技术人员是显而易见的。下面的几个操作调用Rambus在64/72M位数据表和直接RAC数据表中定义的指定命令。这些指定操作是当适当的控制信号发送至RAC时,Rambus RAC本身发送给RDRAM的操作。如下所述,MCH300的这个实施例被以前不能得到的硬件和用新方法或序列调用已知的RAC命令。
在该示范性实施例中,MCH300包括一个设备寄存器数据(DRD)寄存器312。DRD寄存器314位于PCI配置空间中的地址位移90-91h处,缺省值是0000h(16位),并且寄存器是一个读/写寄存器。DRD寄存器的域在表1中示出。
表1DRD寄存器的一个实施例

MCH300也包括一个RDRAM初始化控制管理(RICM)寄存器312。RICM寄存器位于PCI配置空间中的地址位移94-96h,缺省值为000000h(24位),并且寄存器是读/写寄存器。本实施例的RICM寄存器的域在表2中提出。表2RICM寄存器的一个实施例


图3中同样示出的是一个初始化控制电路320,它包括一个RDRAMIOP执行电路325。控制电路320执行的各种IOP详情在表3中示出。在表3中,广播地址(BA)域(位19)和SDA域(位84)作为下面任何一个列出NE该域对初始化操作没有作用0 该域为初始化操作将置为01 该域为初始化操作将置为1x 该域应被编程为适合特殊初始化操作表3IOP操作细节




图4中示出的是为响应接收RDRAM内核初始化IOP(10000b),初始化控制电路320的一个实施例指导的操作详情。在块400,发出一个广播退出命令在总线上。接着,每一块405,为组地址0至31块410至470显示的序列重复16次。这些数字可以适合有128个电流校准级和至多32个组的存储器子系统。在其它实施例中,不同数量的循环可以使用,如果例如更大或较小数量的电流校准级可用。类似,在不同系统中可能有不同数量的组。
在块410,为了确保断电退出完成以及刷新操作(REFA命令)在块415中正确执行,进行无操作。在块420,进行另一个无操作,接着在块425和430是二个刷新操作(REFA)。在块435再进行3次无操作,使得在出现一个刷新预充电(REFP)命令之前有足够时间通过。在块445中另一个无操作命令之后,在块450执行另一个刷新预充电(REFP)命令。
接着在块455执行一个校准(CAL)命令。该命令校准(驱动)当前指示设备的I0L电流。如在块460和465中所示,执行一个样本(SAMR)命令。该样本命令更新当前指示设备的I0L电流。该过程重复直到为32个组执行所有16次循环。
初始化序列有了上面初始化操作,寄存器和相关硬件,系统可以初始化。例如,图5中示出的实现了Rambus直接RDRAM信道的系统可以被初始化。在该系统中,存储器控制器500(也称为存储器控制集线器或MCH)使用串行接口信号SCK,CMD和SIO来读取和写入存储器设备配置寄存器,并在该信道上执行其它初始化操作。该存储器控制器也初始化信道上的特殊行/列包。
该存储器控制器包括Rambus ASIC单元(RAC)530,控制电路520,SPD接口电路540和多种寄存器。这些寄存器包括用来初始化系统存储器的初始化寄存器515和断电恢复寄存器510。断电恢复寄存器包括对操作存储器信道十分关键的计时和其它信息。还句话说,断电恢复寄存器是简单寄存器,为了恢复对存储器信道的访问,在关闭存储器控制器500后,它需要被恢复。该寄存器可以是PCI配置寄存器。
该存储器信道包括RIMM模块560,565和570,它们由控制和数据总线532和串行总线542连接至MCH500。该制和数据总线532可以被有抵抗性的终止533所终止,直接Rambus时钟发生器(DRCD)580可以在远离MCH500的信道的尾端以通过信号线582提供时钟信号。
而且,系统包括一个连接MCH至二级总线的输入/输出控制集线器(ICH)505。ICH有多个通用输出(GPO),它用来控制多种系统功能,如设置DRCG580的频率。包含BIOS的非易失性存储器585可以连接至二级总线506以及电池备用随机访问存储器590。电池备用随机访问存储器590可以保存MCH断电寄存器510的断电恢复配置值,这样MCH能恢复访问RDRAM信道,而不执行下面详细描述的全部初始化序列。
简而言之,初始化过程可以总结如下。在开机复位后,信道中RIMM上的串行出现检测(SPD)数据的配置信息被读取。例如,存储设备,SPD存储器572,在RIMM570上保存RDRAM573,574,576和577的配置信息。该存储器控制器配置寄存器用SPD信息的适当值来编程,然后RDRAM设备ID被编程,这样每个RDRAM设备能够被存储器控制器唯一识别和访问。一旦设备已经初始化,它能被使用。
每个RDRAM设备有二个确认数,它用来唯一地选择信道上的一个设备,串行设备ID和组设备ID。这二个ID用来区别RDRAM信道上的操作。当存储器控制器正在发送对RDRAM信道的SCK,SIO和CMD信号的初始化操作时,串行设备ID用来选择设备。当发送RDRAM信道的RQ[70]上的行包和列包时,组设备ID被存储器控制器使用来选择一个设备。在复位之后和在设备可以被初始化操作(IOP)和行/列包单独定址之前,串行设备ID和组设备ID分别被编程。
仔细查看Rambus信道的初始化过程,可以接着一个特殊序列来完成信道上RDRAM设备的正确操作。图6示出了一个实施例中的正确信道初始化的流程图,表4枚举了在该初始化流程中使用的一些变量。
表4初始化中使用的变量

在方框602,发生系统复位。MCH复位它的所有状态机器并准备初始化。在方框604,系统的存储器模块配置被校验。BIOS读取决定存储器配置的SPD数据。如果只出现RIMM,RDRAM初始化序列可以在方框608进行。如果出现混合的存储器模块,邮送一个错误给用户,系统如606所示被停止。
时钟发生器开始于方框608。该操作可以这样实现,即软件查询出现在主板上的每个RIMM模块的SPD数据并决定所有RIMM操作的信道频率。DRCG580可以通过ICH505的通用输出(即图5中所示的GPO)设为适当频率。在一个实施例中,BIOS在该步骤和MCH RAC初始化之间至少等待8ms。
如方框610所示,下一步MCH RAC被初始化。DRCG的信道时钟在MCH RAC初始化之前应该是稳定的。MCH RAC初始化通过执行MCH RAC初始化IOP完成。RAC初始化IOP进行基本初始化,为正常操作准备存储器控制器的内部RAC。
在一个实施例中,在MCH RAC初始化IOP之后,BIOS提供5ms的时间给IIO位来清空。如果IIO位没有在5ms后被MCH清空,BIOS应该报告错误,信道不可用。在MCH清空IIO位之后,为了完成MCH RAC初始化IOP,可以另外增加5ms的延迟。这样有足够的时间给MCH时钟来稳定和锁定。同样在一些实施例中,RAC中的一条总线可能在其它操作开始之前需要被清理。这可以通过执行MCH RAC控制寄存器负载IOP(DRD=00000h)来实现。在一些实施例中,也有可能在初始化序列中的后来位置执行RAC初始化。
如方框612所示,下一步可以初始化数个MCH配置寄存器。在一个实施例中,页码策略寄存器RMC空转计时器(PGPOL RIT)域(MCH052h[20])设为001b,确保在信道级化过程中没有页面被关闭。PGPOLRIT域时钟主总线时钟的个数,在所有打开的页面被关闭之前存储器控制器将保持在空转状态,0值表示在存储器控制器开始关闭页面之前将有一个无限反应时间。
而且,在一些实施例中,操作池可以根据定义的RDRAM状态用来组合RDRAM。为了减少运行电压,RDRAM设备可以组合成二个操作池,称为“池A”和“池B”。在一个实施例中,在某一时间可以有至多8个设备在池A中。在该实施例中,池A中8个设备至多有4个可以在某一时间处于活动读/写或活动状态,池A中的这些设备或处于活动读/写状态,或处于活动状态,或处于备用状态。
池A中设备的最大个数是可编程的并由EDRAM电源管理寄存器(RPMR)寄存器的PAC域指定。不在池A中的所有设备为池B的成员。池B中的所有设备要么处于备用状态要么处于Nap状态。池B中的设备状态由DRAM控制(DRAMC)寄存器(MCH 051h)的PBS域所指定。在一个实施例中,RPMR寄存器设为00h,只选择池A中的一个设备,池B操作设为备用状态(MCH 051h[6]=0)。
接着,如在方框614所示,可以执行附加的信道初始化。这可以包括使用SIO复位IOP执行一个SIO(串行接口)复位,并容许完成SIO复位序列的足够延迟。而且,在这时候可以设置其它寄存器,它们为正确操作可能需要被初始化。例如,在一些实施例中,在SIO复位之后,如同在直接RDRAM64/72M位数据表中的37页所指定的一样,Test77寄存器可能需要写入0值(执行一个广播SIO寄存器写IOPTEST77,DRA=4Dh,DRD=0000h)。
串行设备ID赋值如在块620所示,串行设备标识值(ID)可以是赋予的文本。一般地,软件唯一地识别信道上的每个设备,使得初始化操作能在单独设备上被确定。每个RDRAM的串行设备ID以4-0位保存在RDRAM INIT寄存器中。在SIO复位之后,串行设备的缺省值在信道上的所有RDRAM中都是1Fh。同样,在复位后,串行复制器(SRP位(RDRAM 021h[7]))设为1,使得每个RDRAM繁殖在SIO0上接收到的数据至RDRAM的SIO1针,将SIO包传递给下一个RDRAM设备。因为所有的设备在复位后有同样的串行设备ID,一个单独设备在赋予唯一串行ID前可以被访问。
在图7中示出了一个实施例执行的串行设备枚举的进一步细节。在方框700,变量SerialIDCount初始化为0。接着,如在方框710,信道的所有设备的SIO复制器置于不能(广播SIO寄存器写IOPINIT,DRA=21h,DRD=001Fh)。该操作使得所有串行设备ID都设为01fh。该SIO复制器位设为0,这样只有在SIO信道上的第一个设备能被访问。
从方框710开始,该过程循环通过信道上的所有设备并给每个设备赋予一个唯一ID。当前设备的串行ID设为SerialIDCount,SIO复制器位使之能(SIO寄存器写IOPINIT,SDCA=1Fh,DRA=21h,DRD=0080h+SerialIDCount)。接着,测试设备在系统中是否真的出现和发挥作用,如方框715中所示。RDRAM INIT寄存器被读取以决定刚刚写入的同样值是否正确地被读取出来(SIO寄存器读IOPINIT,SDCA=SerialIDCount,DRA=21h)。
如果数据匹配(如在方框720测试的),SerialIDCount增加(方框725),检查SerialIDCount看设备的最大数(即32)是否已经给予ID(方框730)。如果SerialIDCount仍然表示一个有效的序列ID,下一个设备在方框705中被标识。
如果SerialIDCount超出了最大许可值,或者如果在方框720中该数据不匹配,那么最后一个设备已经给予一个ID,并且跟踪设备总数的变量可能设置为SerialIDCount,如方框735中所示。最后,为了使在最后许可设备之外的任何附加设备不能,有最高序列ID的RDRAM的SIO复制器不能。相应地,任何附加设备(即,不正确起作用的设备或超出最大值即32的设备)不接收命令,因此不应反应。作为一个附加检查,可以检查RIMM上的SPD信息以确定最终设备计数是否正确。
组设备ID赋值返回图6,在唯一的序列ID已经分配并且最后设备的SIO输出禁止,组ID根据存储器设备大小被分配,如方框630所示。在一个实施例中,MCH支持至多32个RDRAM设备和8个组。每个组有至多4个设备和有一个组边界访问寄存器(GBA),它定义组ID和每个组的上层地址和下层地址。因此,每个GBA寄存器可以用一组ID和一个9位上层地址限制值来编程,无居住物的组可有等于前面组的一个值,它的组大小为0。
而且,图8A-8C中的流程描述了枚举组设备ID的过程的一个实施例,如方框630所示。如图8A中方框800所示,几个变量被初始化。变量SerialIDCount,CroupDeviceIDCount,RIMMCount,RIMMDeviceCount和RIMMDeviceConfigNo初始化为0。RIMMConfigIndex变量初始化为表示MCH支持的最大核心技术的一个值。
如方框805中所示,数据从一个模块(模块个数RIMMCount)的SPD存储器中读出,标识那个模块的核心技术。该信息可以包括每个设备的行号,每个设备的列号,每个设备的组号,以及这些组是否相互依存或独立。接着,如方框810所示,通过将从SPD读取的核心技术值翻译成组结构(GAR)寄存器相当值中的一个值设置RIMMDeviceConfigNo。
然后,如方框815所示,RIMMDeviceCoint变量为那个RIMM设为SPD存储器表示的设备号。然后,设备ID可以被分配,相关的寄存器值被设置,如方框820所示。作为个实施例,图8B示出了方框820中所示的该过程的进一步细节。
一般地,枚举过程增加在RIMM上的RDRAM设备号至第一个序列ID,然后向下计数直到RIMM结束。于是,如方框822所示,测试RIMMDeviceConfigNo是否等于DRAMConfigIndex以决定组设备ID是否以特殊的核心技术已经赋予所有设备。如果它们不相等,所有设备有组ID,SerialIDCount设为SerialIDCount加RIMMDeviceCount(如方框830所示),该过程返回图8A,如方框832所示。而且,如果RIMMDeviceCount为0(如方框824所测试的)或MemberCount为0(如方框826所测试的),没有其它设备要给组ID,过程返回图8A,如方框832所示。
如果RIMM DeviceCount和MemberCount非0,GroupDeviceIDCount被分配为RDRAM的组设备ID,它的序列ID等于SerialIDCount的当前值,如方框828所示。然后,当前组边界地址寄存器(GBA)被更新以反应新设备对该组的增加,如方框830所示。这可以通过将设备大小指示值与保存在那个GBA寄存器中的当前值相加来实现。
然后,在方框832,GroupDeviceIDCount与4比较。如果组是满的,那个组的MCH组结构寄存器(GAR)被更新,如在块834中所示。GAR被更新以适当表示该组配置(即,组号和DRAM技术(大小))。在块836,SerialDeviceIDCount增加,MemberCount减少,GroupDeviceIDCount增加,RIMMDeviceCount减少。然后该过程返回方框824。
返回图8A,如果或者RIMMDeviceCount或者MemberCount为0,RIMMCount增加,如方框850中所示。如果RIMMCount小于最大值RIMMCount,如方框855中所示,那么该处理返回方框805。如果RIMMCount达到最后一个RIMM,该过程在图8C中继续,如方框860所示。
转向图8C,如果MemberCount为0(如方框865中所测试的),设备ID枚举过程结束。然而,如果MemberCount不为0,选择下一个MCH组来开始枚举下一个DRAM技术中的设备,如方框870所示。GroupDeviceIDCount可以通过加3并执行结果值与OFFFCh的逻辑与操作来更新。
如果GroupDeviceIDCount为信道中所容许的最大号码设备(即32,如方框872所示),那么组ID枚举过程结束。然而,如果较少设备已经给予组ID号,DRAMConfigIndex设为MCH支持的下一个最小的核心技术,如方框874所示。如果DRAMConfigIndex表示没有支持的更小的核心技术(即,DRAMConfigIndex为0,如在方框876所示),那么ID枚举过程结束。如果有更多的核心技术,SerialIDCount和RIMMCount复位为0,如方框878中所示,该过程在图8A返回方框805。
下面伪码表示可以用来执行组ID枚举的操作,如一个实施例中图6的方框630所示。630.枚举MCH设备组。630.1.循环通过RIMM SPD存储器并组合RIMM上的设备。最大的技术设备必须以最低组来组合,技术大小随着组号增加而减少。630.1.1. 设置MemberCount=MemberMax630.1.2. 设置SerialIDCount=0。这是串行设备ID计数器。630.1.3. 设置GroupDeviceIDCount=0。这是组设备ID计数器。630.1.4. 设置RIMMCount=0。这是RIMM计数器。630.1.5. 设置RIMMDeviceCount=0。这是RIMM上的设备号计数器。630.1.6. DRAMConfigIndex=MCH支持的最大技术。630.1.7. 计算RIMM #RIMMCount的核心技术630.1.7.1. RIMMDeviceConfigNo=从RIMMs SPD读取的核心技术。630.1.8. RIMMDeviceCount=从RIMMs SPDEEPROM读取的RIMM#RIMMCount中的RDRAM设备号630.1.9. 分配组设备ID并给RIMM编程MCH GAR和GBA寄存器。630.1.630.1.如果RIMMDeviceConfigNo!=DRAMConfigIndex,中断至630.1.10630.1.9.2. 如果RIMMDeviceCount=0,中断至630.1.10630.1.9.3. 如果MemberCount=0,中断至630.1.10630.1.9.4. SIO寄存器写IOP.DEVID,SDCA=SerialIDCount,DRA=40h,DRD=GroupDeviceIDCount630.1.9.5. 编程MCH GBA[GroupDeviceIDCount SHR 2]=MCHGBA[GroupDeviceIDCount SHR2-1]+RIMM#RIMMCount设备大小630.1.9.6. 如果GroupDeviceIDCount AND 011b=0630.1.9.6.1编程MCH GAR[GroupDeviceIDCount SHR2]=RIMMDeviceConfigNo630.1.9.7. 增加GroupDeviceIDCount630.1.9.8. 增加SerialIDCount630.1.9.9. 减少MemberCount630.1.9.10. 减少RIMMDeviceCount630.1.9.11. 至步骤630.1.9.2630.1.10. 增加RIMMCount630.1.11. 如果RIMMCount<RIMMMax,至步骤630。1。7630.1.12. 如果MemberCount=0,中断至步骤10630.1.13. 选择下一个RDRAM技术的下一个组。
630.1.13.1. GroupDeviceIDCount=(GroupDeviceIDCount+011b)AND 011b630.1.14. 如果GroupDeviceIDCount=32,中断至步骤10630.1.15. DRAMConfigIndex=下一个最小的DRAM技术630.1.16. 如果DRAMConfigIndex=0,中断至步骤10630.1.17. SerialIDCount=0630.1.18. RIMMCount=0630.1.19. 至步骤630.10.7。这将为下一个最小的RDRAM技术开始搜索RIMM。
返回图6,在组ID已经分配之后,单独的RDRAM设备可以带来断电模式并为正常操作置于快速时钟模式,如在步骤640中所示。MCH和RDRAM中的单独RDRAM计时寄存器可以被编程。REFB和REFR控制寄存器也能被初始化(广播SIO寄存器写IOP.REFB,DRA=41h,DRD=0000h;广播SIO寄存器写IOP.REFR,DRA=42h,DRD=0000h)。
RDRAM设备可以通过执行一个广播设置复位IOP来复位,在一些实施例中,这可能做2次,每次复位后有依存。RDRAM通过执行一个广播RDRAM断电退出IOP引出断电,通过执行一个广播RDRAM设置快速时钟模式初始化IOP进入快速时钟模式。
于是,RDRAM内核可以初始化,如方框642所示。图9示出了RDRAM核心初始化的一个实施例的进一步详情。如方框900所示,通过将一个中间值写入适当的RDRAM寄存器,为电流校准准备RDRAM设备(广播SIO寄存器写IOP.CCA,DRA=43h,DRD=0040h;广播SIO寄存器写IOP.CCB,DRA=44h,DRD=0040h)。40十六进制可以为实施例中的一个适当值,它有127种可能的电流校准级。开始于该中间值限制了所需的校准循环总数,因为校准值能比全部范围的校准值少大约一半。
然后,预充电操作在每个RDRAM设备的每个组上执行。为了执行预充电操作,MCH通过该组加以2,第一个预充电奇数组,然后偶数组。在方框905组索引设为0。然后如在方框910所示,执行广播预充电IOP。组索引值加2,如方框915所示,广播预充电为奇数组重复直到在方框920找到组索引等于组的最大号(即32)。
一旦达到组的最大号,组索引设为1,所有偶数组被预充电。一旦组索引超过组最大号,RDRAM核心初始化IOP执行6次,如方框940所示。
信道级化返回图6,在方框642中RDRAM核心初始化之后,信道可以级化,如在方框644中所示。该过程涉及使RDRAM读取响应时间与从RDRAM至所有RDRAM的MCH的繁殖延迟相等。换句话说,一旦信道被级化,所有RDRAM将用同样数目的总线循环提供存储器控制器上的数据。
下面伪码表示一系列步骤,它们可以在一个实施例中执行以实现级化处理,如方框644中所示。644.级化Rambus信道644.1阶段1 决定MCHtRDLY域值644.1.1.SerialIDCount=MemberMax644.1.2.MehTrdly=0644.1.3.编程MCH RDTTRDLY域=MchTrdly644.1.4.计算测试用于级化的RDRAM设备的32位地址644.1.4.1 SIO寄存器读IOP.DEVID,SDCA=SerialIDCount,DRA=40h644.1.4.2 DRD(MCH 090[150])现在包括RDRAM的设备ID644.1.4.3 DeviceTestAddress=MCH GBA[(DRD SHR2)-1]SHL23+((DRD AND011b)*设备大小的字节数(从GAR[DRD SHR2])644.1.5.进行QWORD写操作来用TestPattem定址DeviceTestAddress644.1.6.进行QWORD读操作来定址DeviceTestAddress
644.1.7.如果读取的数据!=TestPattem644.1.7.1加MCHRDTTRDLY域644.1.7.2如果MCH RDTTRDLY域<=4,中断至步骤644.1.5644.1.8.否则(如果读取的数据TestPattem)644.1.8.1. MchTrdly=从MCH RDTTRDLY域读取的数据644.1.8.2. 如果MchTrdly=4,中断至步骤644.1.3644.1.9.减SerialIDCount644.1.10. 如果SerialIDCount>=0,至步骤644.1.3644.2.阶段2决定RIDRAM的级化计时值644.2.1.SerialIDCount=MemberMax644.2.2.计算测试用于级化的RDRAM设备的32位地址644.2.2.1. SIO寄存器读IOP.DEVID,SDCA=SerialIDCount,DRA=40h644.2.2.2. DRD(MCH 090[150])现在包括RDRAM的设备ID644.2.2.3. DeviceTestAddress=MCH GBA[(DRD SHR2)-1]SHL23+((DRD AND 011b)*设备大小的字节数(从GAR[DRD SHR2])644.2.3.进行QWORD写操作来用TestPattem定址DeviceTestAddress644.2.4.进行QWORD读操作来定址DeviceTestAddress644.2.5.如果读取的数据=TestPattem,中断至步骤644.2.8644.2.6.如果RDRAM的TCDLY域<(来自SPD)的最大TCDLY644.2.6.1. 根据TCDLY支持表,加RDRAM TCDLY寄存器(TDAC&TRDLY)644.2.6.2. 中断至步骤644.2.3644.2.7.标记RDRAM设备为不能644.2.8.减SerialIDCount644.2.9.如果SerialIDCount>=0,至步骤644.2.2级化完成之后,一个实施例编程几个断电恢复存储器初始值于电池后备存储器590中,如方框646中所示。特别地,该操作可以在初始化流程已经决定适当值之后的任何其它阶段执行。这些值被保存以保留该位置上的初始化过程决定的初始化信息。
当系统进入一个断电状态(如,暂停至RAM),MCH的电源可能已移走。因此,如果初始化信息没有保留,整个初始化过程可能要重复。保存非易失性存储器的关键的初始化信息可能有利地加速从这样的一个断电状态的唤醒。保存这样的信息的难度由于这样的事实而增加,即存储器子系统直到这些值恢复才能起作用。
任何能写如的非易失性存储器可以用来保存适当的初始化信息;然而,电池后备存储器出现在许多计算机系统中,因而可以为一个方便的选择。在一个实施例中,以下的寄存器保存在存储器590中。
。MCH组结构(GAR)寄存器(040-047h)这些寄存器表示每个组的设备配置,如组号和DRAM技术(大小)。
。MCH RDRAM计时寄存器RDT(050h)该寄存器定义信道中的所有设备的计时参数。
。MCH DRAM控制(DRAMC)寄存器(051h)该寄存器包括池B操作选择(PBS)位,存储器转移集线器出现外位(MTHP),它指定MCH的操作模式,和缝隙访问全局能位,它在缝隙范围和翻译表建立之前防止从任何端口对缝隙的访问。
。MCH页码策略(PGPOL)寄存器(052h)该寄存器指定页面策略属性,包括DRAM刷新率(DRR)和RMC空闲计时器(RIT)。DRR域调整DRAM刷新率,RIT域在打开页码关闭之前决定存储器控制器将保持空闲状态的宿主总线时钟循环的号码。
。MCH RPMR(053h)该寄存器包括一个设备睡眠计时器(DNT)域,一个池A中的活动设备域,一个设备睡眠能(DNE)域,和一个池A容量(PAC)域。DNT域在池A中至少最新使用的设备推出到池B中之前指定存储器控制器为空闲主时钟的号码。ADPA域定义池A中的RDRAM设备的最大号码,它能在某一时间处于活动读/写或活动状态。池A中不处于活动读/写或活动状态的设备处于备用状态。DNE位(当设为1时)使连续计算非活动时间的信道非活动计数器能。当计数器值超过DNT指定的极限时,池A中的至少最新使用过的设备被推入到池B中。PAC域定义RDRAM的最大数,它能在某一时间驻留在池A中。不是池A的一部分的设备属于池B。
。MCH组边界访问(GBA)寄存器(060-6Fh)GBA寄存器包括要一组ID和一个表示该组的上层地址的值。
。MCH配置寄存器MCHCFG(OBE-BFh)这些寄存器包括Rambus频率&DRAM数完整模式域。
而且,在该位置,断电配置选择可以被编程。在一个实施例中,设置了自我刷新和断电自我刷新选项(对于每个SerialIDCountSIO寄存器写IOP.INIT,SDCA=SerialIDCount,DRA=21h,DRD=400h(LSR,如果SPD支持)+200h(PSR)+80h(SRP))。
正常操作可以开始,如方框650中所示,在几个更多寄存器被编程用于正常操作。该页码策略寄存器设置为正常操作(PGPOL RIT域(MCH052h[20]至001b),因为关闭计时器的页面被有效地禁止级化能,而电源管理功能在这时候经过RPMR寄存器(MCH053h)为能。如果池B选择位(MCH051h[6])配置用于NAP操作,广播NAP入口IOP可以执行来将所有设备置于NAP状态。在同样的设置IIO位的I/O指令中,也设置RICM中的IC位为1,这样MCH的正常操作可以开始。
当有断电状态时恢复信道在正常操作持续一段时间之后,该系统由于系统的非活动性或另外原因进入一个断电状态,如图10的方框1000所示。系统可以进入的一个状态是暂停至RAM(STR)状态,在该状态,MCH失去保存在它的寄存器中的值。在进入STR状态之后,使得系统退出STR的一个事件可以被察觉到,如方框1010所示。相应地,BIOS启动MCH和其它系统元件。在该过程中MCH的配置寄存器可以自动复位为缺省值。
相应地,为了再次访问存储器信道上的存储器设备,需要至少一些配置寄存器值。BIOS可以使得ICH505访问电池备用存储器590,并恢复下面列出的寄存器(保存在图6的方框646中)。
。MCH GAR寄存器(040-047h)。MCH RDT(050h)。MCH DRAMC(051h)。MCH PGPOL(052h)。MCH RPMR(053h)。MCH GBA寄存器(060-6Fh)。MCH配置寄存器MCHCFG(0BE-BFh)在恢复这些寄存器的值之后,当进入STR状态时,MCH能再次访问保存在存储器中的项,包括这样的项,如处理器关系,如果保存的话。存储器设备执行STR状态中的自我刷新,这样数据不会丢失。
然后,时钟发生器开始,如方框1040所示。正确的Rambus信道频率从MCH MCHCFG寄存器(MCH 0BEh[11],它在方框1030中被恢复)。在容许该时钟稳定之后,MCHRAC初始化,如方框1050中所示。这可以通过执行MCHRAC初始化IOP完成。而且,DRD寄存器可以装载有0000h,MCH RAC控制寄存器装载执行的IOP来初始化RAC中的一条总线(参照方框610的讨论)。
然后,进行电流校准,如方框1060所示。这可以参考图642和图9所讨论的进行。然而在最终如方框940所指的反复中,RICM寄存器中的IC位可以复位,使得一旦电流校准完成正常操作立即开始。这样,当系统第一次启动时,因为信道级化,SPD串行,ID分配以及几个其它初始化操作可以避免,STR序列的恢复实际上可能比整个所需的初始化序列要块。
总之,公开了当有断电状态时恢复存储器设备信道的方法和装置。已经描述了并在附图中显示了某些示范性实施例,能理解这样的实施例只是解释之用,并不限制本发明,本发明不限于示出的描述的特殊结构和安排,因为对于本领域的技术人员可以根据本公开进行多种其它修改。
权利要求
1.一种方法,包括保存来自多个存储器控制器中的存储位置的多个存储器初始值到一个存储器中,它在断电状态中维持这些值,多个存储器初始值对于访问系统存储器是必要的;进入断电状态;以及当退出断电状态时,恢复多个存储器初始值到存储器控制器中的多个存储位置。
2.权利要求0的方法,其中进入断电状态包含进入一个暂停至随机访问存储器状态。
3.权利要求0的方法,其中保存多个初始值包含保存多个初始值于电池备用存储器中。
4.权利要求0的方法,其中保存多个初始值包含保存至少一个结构寄存器值于存储器中,它在断电状态中维持这些值,至少一个结构值表示至少一个存储器设备的存储器组织。
5.权利要求0的方法,其中保存至少一个结构寄存器包括保存多个RDRAM组结构寄存器值。
6.权利要求0的方法,其中保存多个初始值包含保存计时寄存器值于存储器中,它在断电状态中维持这些值,计时寄存器值表示连接至存储器控制器的多个存储器设备的计时值。
7.权利要求0的方法,其中保存多个初始值包含保存存储器设备控制寄存器值于存储器中,它在断电状态中维持这些值,存储器设备控制寄存器值有一个池操作选择域,存储器传输集线器存在域和一个缝隙访问使能域。
8.权利要求0的方法,其中保存多个初始值包含保存一个页面策略值于存储器中,它在断电状态中维持这些值。
9.权利要求0的方法,其中保存多个初始值包含保存一个电源管理寄存器值于存储器中,它在断电状态中维持这些值。
10.权利要求0的方法,其中保存多个初始值包含保存至少一个组边界访问值于存储器中,它在断电状态中维持这些值。
11.权利要求0的方法,其中保存多个初始值包含保存一个频率值于存储器中,它在断电状态中维持这些值。
12.权利要求0的方法,其中保存多个初始值包含保存一个数据完整模式值于存储器中,它在断电状态中维持这些值。
13.权利要求0的方法,其中进入断电状态包含关闭存储器控制器。
14.权利要求0的方法还包含检测一个暂停终止事件;和开启存储器控制器。
15.权利要求0的方法,其中存储器控制器中的多个存储位置是配置寄存器,而且其中开启存储器控制器包括重新设置所有的配置寄存器于一个缺省状态。
16.权利要求0的方法还包含当多个初始化操作数装载到一个存储器控制器控制寄存器,通过执行多个初始化操作返回正常操作。
17.权利要求0的方法,其中返回正常操作还包含启动一个时钟发生器;执行一个存储器接口初始化操作;以及执行多个存储器设备的核心初始化。
18.权利要求0的方法还包含执行从中间校准值开始的电流校准序列。
19.权利要求0的方法,其中执行电流校准序列包括编程存储器控制器中的存储位置中的电流校准初始化操作数;以及执行电流校准初始化操作数表示的电流校准初始化操作。
20.权利要求0的方法,其中执行电流校准序列包括执行核心初始化操作6次。
21.权利要求0的方法还包括设置一个初始化完成位;以及恢复正常存储器访问操作。
22.一种系统,包括一个处理器;一个连接处理器的存储器控制器,该存储器控制器有一个控制寄存器;一个存储器总线,它有与之连接的多个存储器设备,该存储器总线连接至存储器控制器;一个在断电状态中维持值的存储器;一个连接至存储器控制器的附加存储器设备,该附加存储器设备在初始化多个存储器设备之前能访问该存储器控制器,该附加存储器设备包括多个指令,如果系统执行这些指令能使系统执行保存来自多个存储器控制器中的存储位置的多个存储器初始值到一个存储器中,它在断电状态中维持这些值,多个存储器初始值对于访问系统存储器是必要的;进入断电状态;当退出断电状态时,恢复多个存储器初始值到存储器控制器中的多个存储位置;以及返回正常操作。
23.权利要求0中的系统,其中存储器控制器还包括连接的控制电路,当在返回正常操作过程中多个初始化操作数装载到控制寄存器中时,控制电路执行多个初始化操作。
24.一种包括一个机器可读介质的产品,该介质上保存多个指令,如果机器执行这些指令,使得该机器执行保存来自多个存储器控制器中的存储位置的多个存储器初始值到一个存储器中,它在断电状态中维持这些值,多个存储器初始值对于访问系统存储器是必要的;进入断电状态;和当退出断电状态时,恢复多个存储器初始值到存储器控制器中的多个存储位置。
25.权利要求0的产品,其中机器可读介质为一个存储设备。
26.权利要求0的产品,其中机器可读介质为一个载波。
全文摘要
一个方法涉及保存来自存储器控制器(100)中的存储位置的一组存储器初始值到一个存储器中。这些值对于访问系统存储器是必要的。当退出断电状态时,这些值恢复到存储器控制器(100)中的多个存储位置。
文档编号G06F11/14GK1332863SQ99815394
公开日2002年1月23日 申请日期1999年10月22日 优先权日1998年11月3日
发明者W·A·斯蒂芬斯, P·K·尼扎 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1