The processing capability of computer systems has continually increased in recent decades. With such advances there has been a concomitant increase in the demand for memory capacity. Consequently, there has been a trend toward providing system memory in module form, with each memory module typically comprising a small circuit card with a number of memory chips. Such memory modules may be plugged into a memory socket connected to a computer motherboard or memory carrier card to increase the memory capacity of a computer system. Examples of memory modules include SIMMs (Single In-line Memory Modules) and DIMMs (Dual In-line Memory Modules), among others.
Memory modules are commonly designed to operate in one of a variety of operational modes such as fast page mode (FPM), extended data out (EDO), synchronous DRAM (SDRAM), double data rate SDRAM (DDR SDRAM), parity and non-parity, error correcting (ECC) and non error-correcting, etc. Memory devices are also designed with a variety of performance characteristics such as access speed, refresh time and so on. To distinguish between the wide variety of memory modules that may be installed in a computer, individual memory modules typically include information identifying the architecture, operational modes and performance characteristics of the memory module. This information, commonly referred to as presence detection (PD) data, is utilized to configure a memory controller of the computer system to enable the memory controller to interoperate with the particular memory modules installed in the computer.
Generally, PD data is stored in an EEPROM or other non-volatile memory on each memory module, and is accessed, for example, when the computer system is initially powered and reset, when transitioning between certain power states, and during other events in which the memory controller is configured (“memory configuration events” herein). The PD data is accessed across a standard serial System Management Bus (SMBus), typically an industry-standard I2C™ bus. The PD data is reviewed to determine whether the memory module is compatible with system requirements. If the memory module is incompatible with system requirements, an error message may be issued or other action taken. Otherwise, the memory controller is configured and current operation, such as the boot sequence, power state transition, etc., is completed.
In accordance with one embodiment of the present invention, a method for providing presence detection (PD) data of at least one memory module installed in a computer is descirbed, comprising: retrieving PD data stored in the at least one memory module; and storing the retrieved PD data in a first non-volatile memory, wherein the at least one memory module and the first non-volatile memory are constructed and arranged such that the PD data stored in the first non-volatile memory can be more quickly accessed than the PD data stored in the at least one memory module.
In accordance with another embodiment of the present invention, a method for configuring a memory controller of a computer to interoperate with at least one installed memory module having presence detection (PD) data is described, comprising: comprising: retrieving a copy of the memory module PD data from a rapidly accessible non-volatile memory; and configuring the memory controller utilizing the PD data retrieved from the rapidly-accessible non-volatile memory.
In accordance with a further embodiment of the present invention, a computer having a processor and at least one installed memory module having presence detection (PD) is descibed, comprising: a non-volatile memory rapidly accessible by a processor of the computer; POST code operable to copy PD data stored in the at least one memory module to the non-volatile memory; and memory reference code operable to configure a memory controller of the computer utilizing the PD data stored in the rapidly-accessible non-volatile memory.
Certain embodiments of the present invention are directed to storing a copy of presence detection (PD) data of at least one installed memory module in a non-volatile memory that is rapidly accessible by a processor of a computer system. Such rapidly-accessible non-volatile memory may be a component of the processor chipset or may be a separate component accessible over a high speed bus, such as a system ROM accessible over the BIOS boot bus.
The PD data is required, for example, to configure the memory controller of the computer system during a boot-sequence, system reset, and some power-state transitions. Rather that retrieving the PD data from the memory modules over the relatively slow System Management bus (SMBus) during each of these and other memory configuration events, embodiments of the present invention quickly obtain the PD data from the rapidly-accessible non-volatile memory.
Specifically, the first time a computer system performs Power-On-Self-Test (POST) operations, embodiments of the present invention retrieve the PD data over the SMBus, caching the PD data to the rapidly-accessible non-volatile memory. Thereafter, the PD data is read and cached only when necessary, such as when the configuration of the installed memory modules changes. For example, the PD data is read and cached when memory modules are added, removed or replaced, or when the operational modes or performance characteristics of existing memory modules are changed, etc. Because these are rare occurrences, the PD data stored in the memory modules seldom changes and the PD data initially stored in the rapidly-accessible non-volatile memory remains valid. Such embodiments of the present invention, therefore, avoid the time lost through repetitious reading of essentially static PD data over a relatively slow SMBUS.
Also, utilizing a rapidly-accessible non-volatile memory to store PD data, and updating the PD data only when necessary, significantly reduces the time taken to retrieve the PD data to, for example, configure the memory controller. This, in turn, accelerates the speed at which processes which require memory configuration are performed. For example, some embodiments of the present invention enable computer systems to more rapidly perform certain power state transitions. This is particularly advantageous due to the advent of industry standards such as the Advanced Configuration and Power Interface (ACPI) standard which requires computer systems to provide almost instant user access regardless of the power state of the computer.
Exemplary computer system 100 comprises a processor 102 connected directly to a controller chipset 103 that manages the flow of data in computer 100. Controller chipset 103 comprises a memory controller hub 104, commonly referred to as a Northbridge, which is connected to processor 102 via a system bus 108. Memory controller hub 104 is connected to a input/output (I/O) controller hub 106, commonly referred to as a Southbridge, via a hub interface bus 110. In one embodiment, processor 102 may be a microprocessor such a Pentium IV or other suitable microprocessor. Controller chipset 103 may be, for example, an 875P chipset, commercially available from Intel, Inc. Collectively, processor 102 and controller chipset 103 are commonly referred to as processor chipset 101. Such a processor chipset may include one or more integrated circuits depending on the implemented architecture.
Memory controller hub 104 manages the flow of information between various interfaces, commonly referred to as host bridge interfaces. Specifically, memory controller hub 104 manages system bus interface 108 with processor 102, and hub interface 110 with I/O controller 106. Memory controller hub 104 also supports an external AGP graphics device (not shown) via an AGP interface 114, and provides a Communications Streaming Architecture (CSA) Interface 116 to a Gigabit Ethernet (GbE) controller (also not shown). Memory controller hub 104 arbitrates between these interfaces, providing data coherency and performing address translation as necessary. In addition, memory controller hub 104 supports system memory 132, as described in greater detail below.
I/O Controller Hub 106 provides the data buffering and interface arbitration required to ensure that a variety of system interfaces operate efficiently. I/O controller hub 106 integrates controllers to support ATA 100 ports 124, Serial ATA ports 122, external Universal Serial Bus (USB) ports 118, general purpose input/output (GPIO) 120, audio CODer/DECoder (codec) 126, power management 138, LAN connection 142, system management 144 and PCI BUS 148.
I/O Controller Hub 106 also controls system management bus (SMBus) 146 which is typically an industry standard I2C™ serial bus. SMBUS 146 operates at a data transfer rate of up to 100 kilobits per second. As shown in
I/O Controller Hub 106 also controls a BIOS boot bus 112 to which system BIOS ROM 128 and super I/O (SIO) 130 are connected. In the embodiment shown in
As shown in
Each memory module 136 comprises at least one volatile storage region 202 in which data is stored by processor 102 under the control of memory controller 104. Each memory module 136 also comprises at least one non-volatile storage region 204, such as an EEPROM, in which presence detection (PD) data 212 is stored. As noted, presence detection data 212 may include a variety of information pertaining to the type, structure, configuration, capabilities, functionality, etc., of its memory module 136. Typically, PD data 212 includes 256 bytes of information comprising memory configuration data 206, PD checksum 208 and memory module serial number 210.
In this exemplary implementation, memory configuration data 206 is allocated bytes 0-62 and includes information such as module functional and performance information, superset data and revision information. PD checksum 208 is allocated, in this exemplary implementation, byte 63, and is a checksum for memory configuration data 206; that is, bytes 0-62. Memory module serial number 210 is typically a portion of manufacturer-related information provided as part of PD data 212, which is allocated bytes 64-127 of PD data 212 is this implementation. The remaining bytes 128-255 are generally reserved for system use. To ensure PD data 212 is not corrupted or overwritten at some later time, the data contained in bytes 0-127 is generally locked by the manufacturer once each memory module 136 is manufactured. PD data 212 can be read in serial or parallel format.
As shown in
A logical block diagram of one embodiment of PD data storage region 304 is illustrated in
PD cache management data 400A-400N each comprises a copy of PD checksum 208 and memory module serial number 210 from the respective memory module 136A- 136N installed in corresponding socket 135A-135N. For ease of reference, such copies of PD checksum 208 and memory module serial number 210 are referred to as PD checksum 408 and memory module serial number 410, respectively. In addition, and as will be described in detail below, each PD cache management data 400A-400N also comprises a valid PD data cached flag 414A-414N, respectively, which is used to indicate whether the corresponding PD data 312 is stored in system ROM 128. Accordingly, PD cache management data 400A comprises PD data cached flag 414A, PD checksum 408A and memory module serial number 410A; PD cache management data 400B comprises PD data cached flag 414B, PD checksum 408B and memory module serial number 410B, and so on.
The operations performed by one embodiment of BIOS code 301, POST code 302 and memory reference code 303 are described next below with reference to
Referring to the high-level flowchart of
Referring to the more detailed flowchart of
Returning to block 601, the operations depicted at blocks 602-608 are performed in connection with the validation of PD data 312 currently stored in system ROM 128. At block 602, PD data 312 stored in data storage region 304 of system ROM 128 is examined to determine whether the PD data is valid. As noted, in one embodiment, RTC CMOS 150 is utilized to store valid data cached flag 414, PD checksum 408 and serial number 410 for each memory module socket 135A-135N in computer system 100. In one embodiment, the operations performed at block 602 involve reading PD checksum 308 for each memory module socket 135A-135N, and comparing that value to PD checksum 408 stored in RTC CMOS 150. In an alternative embodiment, at least a portion of serial number 310 for each memory module socket 135A-135N is compared to a corresponding portion of a serial number value 410A-410N stored in RTC CMOS 150. In a further embodiment, both values are read and compared. If it is determined that PD data 312 stored in system ROM 128 is valid (block 604), then a valid PD data cached flag 414 is set at block 606; otherwise the flag is reset at block 608.
Once the validity of PD data 312 is determined, the execution of memory reference code 303 is invoked at block 610. One embodiment of the operations performed by memory reference code 303 is described in detail below with reference to
When memory reference code 303 completes and control is returned to POST process 600, the operations depicted at blocks 612-620 are performed. At block 612, valid PD data cached flag 414 is read to determine whether PD data 312 is valid. The data may not be valid due to, for example, this being the first time computer system 100 is executing POST process 600. Alternatively, PD data 312 may be invalid due to the configuration of memory modules 136 being altered since the last execution of POST process 600. As noted, examples of such a configuration change include but are not limited to the addition, removal, replacement or modification of one or more memory modules 136.
Should flag 414 indicate that PD data 312 is invalid, then the operations depicted at blocks 614-620 are performed. At block 614, PD data 212 is retrieved from memory modules 136. In one embodiment, PD data 212 is retrieved from all memory modules 136. In an alternative embodiment, only PD data 212 stored in the memory module 136 for which the PD data 312 is determined to be invalid, is retrieved. At block 616, the retrieved PD data 212 is flashed to system ROM 128.
PD management data 400 is then updated to reflect the recent storage of PD data 312 in system ROM 128. At block 618, the appropriate valid PD data cached flag(s) 414 is/are set. At block 620, the retrieved PD checksum 208 and serial number 210 are stored in RTC CMOS 150 as PD checksum 408 and serial number 410, respectively.
It should be appreciated that upon the completion of the relevant operations of POST code 302, valid PD data 312 is stored in system ROM 128. It should also be appreciated that during the next execution of POST code 302, flag 414 will indicate that PD data 312 is valid, as determined at blocks 604 and 612. Thus, after the initial execution of POST code 302, the only operation performed by POST code 302 in connection with PD data 312 stored in system ROM 128 is the validation operation at block 602, except when the configuration of the memory modules 136 has changed.
As one of ordinary skill in the art would appreciate, the operations depicted in
During POST operations and, in this exemplary application, during certain power state changes described below, memory reference code 303, is executed. Memory reference code 303 comprises various algorithms for configuring memory controller hub 104 to properly interoperate with the implemented memory modules 136. As noted, each time the system is booted, reset or transitioned between certain power states, conventional memory reference code retrieves presence detect data from memory modules 136 via SMBus 146, and configures the memory controller accordingly. In contrast, embodiments of the present invention comprise a memory reference code 303 that accesses system ROM 128 for PD data 312 unless the PD data is invalid, in which case memory reference code 302 obtains PD data 212 from memory modules 126.
Referring to the more detailed flow chart of
If valid PD data 312 is stored in system ROM 128, then memory reference code 303 retrieves PD data 312 from presence detect data storage region 304. Otherwise, PD data 212 is retrieved from memory modules 136. The retrieved presence detection data is then utilized by memory reference code 303 to configure memory controller hub 104 at block 708.
It should be appreciated that when PD data 312 is utilized, memory reference controller 303 obtains that information by accessing system ROM 128 over BIOS boot bus 112. In contrast, when PD data 212 is utilized, memory reference controller 303 obtains the same PD data by accessing memory modules 126 over SMBus 146. As one of ordinary skill in the art would appreciate, the rate at which SMBus 146 transfers data is considerably slower than the rate at which the same data can be transferred over BIOS boot bus 112. Accordingly, memory reference code 303 can configure memory controller hub 104 substantially faster when the requisite PD data is located in system ROM 128. This has particular benefits when there is minimal time to transition computer system 100 to a fully operational state. Once such example noted above is when computer system 100 transitions from a low power state to a fully-powered state.
As one of ordinary skill in the art would appreciate, the operations depicted in
In one low-power state, the power to most components of computer system 100 is removed, with the exception of the real-time clock and devices that have wake capability, which are provided with minimal power to enable them to detect a wake event. System memory 132 is in self-refresh which enables it to retain data stored in volatile memory storage region 202 of memory modules 136.
Conventional approaches to transitioning to a fully-powered state require the retrieval of presence data 212 from memory modules 136. In contrast, because of the storage of PD data 312 in system ROM 128 (or other rapidly-accessible non-volatile memory), memory reference code 303 is configured to obtain such information from system ROM 128 rather than memory modules 136, as described above. As noted, accessing memory modules 136 for PD data 212 requires the use of SMBus 146. In contrast, retrieving SPD data 312 from system ROM 128, which is located on BIOS boot bus 112, is considerably faster.
When transitioning to a fully powered state, process 504 performs the minimal number of operations necessary to return control to the operating system (not shown) which is responsible for performing the majority of the context restoration operations necessary to return computer system 100 to a fully operational state. At block 802, the setting in memory controller hub 104 are restored. In one embodiment, such settings are stored in system ROM 128 when computer system 100 transitions to a low-power state, although the setting may be stored in other non-volatile memory such as RTC CMOS 150. Referring to
At block 804, memory reference code 303 is executed. Referring to
At block 806, other operations associated with the restoration of context are performed. Such operations are not relevant to the present invention and, therefore, are not described further herein. Such context restoration operations are particular to the computer architecture and power management states implemented in computer system 100.
At block 808, control is passed to the operating system.
It should be appreciated that PD data 312 stored in system ROM 128 may be accessed for purposed other than to configure memory controller hub 104. For example, referring to
The embodiments of the present invention described above are exemplary only. For example, as noted, embodiments of the present invention cache presence detect data in non-volatile memory that is rapidly accessible by memory reference code 303. In the embodiment described herein, such non-volatile memory is system ROM 128 communicably coupled to processor 102 via a BIOS boot bus 112 such as an LPC bus. In certain embodiments of computer system 100, RTC CMOS 150 is utilized to store presence detect data. As noted, RTC CMOS 150 is available for RTC clock generation module 140 of I/O controller hub 106 to store time-related information. As is well-known in the art, when a chipset implements a Real Time Clock, applicable standards require at least a minimal amount of battery-powered non-volatile storage be provided on the chip. Some chipset vendors provide more memory than required to implement the RTC, which is then available for other purposes. In certain implementations, RTC CMOS 150 is sufficiently large to also store presence detect data for the quantity of memory modules 136 which may be installed in computer system 100. As one of ordinary skill in the art would appreciate, other on-chip non-volatile storage available on processor chipset 101 may also be utilized in addition to or instead of system ROM 128 and/or RTC CMOS 150. As another example, rapidly-accessible non-volatile memory of the present invention is accessible to processor 102 in the exemplary application described above. It should be appreciated, however, that such non-volatile memory may be accessible to other controllers now or later developed. As such, when used in such a context, the term “processor” broadly refers to any hardware and/or any software that controls at least a portion of the computer system.