The present invention relates to the technical field of computing, and, in particular, to apparatus, computer readable media and methods related to configuration of memory module registers and broadcast or multicast transactions to devices connected on an XM bus.
The Joint Electron Device Engineering Council (JEDEC) is currently producing an XM Specification (XMS) for use in memory devices, such as, for example, dual in-line memory modules (DIMMs). The XMS describes a 12.5 Mbps interface (XM interface) intended to replace existing serial input/output interfaces that are used to communicate with serial presence detect (SPD) modules of DIMMs, such as, for example, the I2C/SMBUS interface. It is expected that the proposed XM interface will initially be used on DDR5 DIMMs, and in particular on servers, due to its high bandwidth and reduced lower end voltage rail (one volt).
The XMS defines registers and control flag bits that must be implemented by compliant connected devices, such as, for example devices within a DIMM. In general, a host computer or processor may repeatedly need to access registers with identical offsets across various connected devices in order to configure, control and modify device behavior. Currently, host computers access these registers and consume significant bus latency, area and power. Moreover, while currently supported broadcast transfers may combine a few control flags for all devices, if even one bit is different on one of the receiving devices, the host's broadcast command is rendered unusable.
In embodiments, a device includes an input interface to receive a broadcast command from a host computer, the broadcast command including an access mode indication, and decoding circuitry coupled with the interface. The decoding circuitry is to determine, based at least in part on the received access mode indication, that the broadcast command is directed to access one or more pre-defined setup or control registers of one or more devices, or to access one or more internal registers of the one or more devices, and, in response to the determination, implement the access to the setup or control registers, or to the one or more internal registers. In embodiments, the device is disposed on a memory module coupled to the host computer.
In embodiments, one or more non-transitory computer-readable storage media include a set of instructions, which, when executed by a device provided in a memory module, cause the device to receive a broadcast command from a host computer. In embodiments, the broadcast command is directed to writing of setup or control data to one or more registers of one or more devices beginning at an offset, and includes a device address and device address masking data. When executed, the instructions further cause the device to apply the device address masking data to mask a portion of the device address, determine if an unmasked portion of the device address matches a corresponding portion of an address of the device; and in response to the determination, to write the data to the one or more registers of the device beginning at the offset.
In embodiments, a method includes receiving, at a DIMM, a broadcast command from a host computer, the broadcast command including an access mode indicator and a register offset value, and decoding the access mode indicator to determine that a protocol register access mode is indicated. The method further includes identifying, based at least in part on the access mode indicator and the register offset value, that the command is a DIMM identifier (DIMM_ID) propagation command directing a receiving device to write a DIMM_ID value to the protocol register indicated by the offset, in response to the identification, modifying the command to replace a portion of the DIMM_ID with a local DIMM identifier, and propagating the modified command to all devices on the DIMM over a local bus.
In the following description, various aspects of the illustrative implementations will be described using terms commonly employed by those skilled in the art to convey the substance of their work to others skilled in the art. However, it will be apparent to those skilled in the art that embodiments of the present disclosure may be practiced with only some of the described aspects. For purposes of explanation, specific numbers, materials and configurations are set forth in order to provide a thorough understanding of the illustrative implementations. However, it will be apparent to one skilled in the art that embodiments of the present disclosure may be practiced without the specific details. In other instances, well-known features are omitted or simplified in order not to obscure the illustrative implementations.
In the following detailed description, reference is made to the accompanying drawings which form a part hereof, wherein like numerals designate like parts throughout, and in which is shown by way of illustration embodiments in which the subject matter of the present disclosure may be practiced. It is to be understood that other embodiments may be utilized and structural or logical changes may be made without departing from the scope of the present disclosure. Therefore, the following detailed description is not to be taken in a limiting sense, and the scope of embodiments is defined by the appended claims and their equivalents.
For the purposes of the present disclosure, the phrase “A and/or B” means (A), (B), (A) or (B), or (A and B). For the purposes of the present disclosure, the phrase “A, B, and/or C” means (A), (B), (C), (A and B), (A and C), (B and C), or (A, B and C).
The description may use perspective-based descriptions such as top/bottom, in/out, over/under, and the like. Such descriptions are merely used to facilitate the discussion and are not intended to restrict the application of embodiments described herein to any particular orientation.
The description may use the phrases “in an embodiment,” or “in embodiments,” which may each refer to one or more of the same or different embodiments. Furthermore, the terms “comprising,” “including,” “having,” and the like, as used with respect to embodiments of the present disclosure, are synonymous.
The term “coupled with,” along with its derivatives, may be used herein. “Coupled” may mean one or more of the following. “Coupled” may mean that two or more elements are in direct physical or electrical contact. However, “coupled” may also mean that two or more elements indirectly contact each other, but yet still cooperate or interact with each other, and may mean that one or more other elements are coupled or connected between the elements that are said to be coupled with each other. The term “directly coupled” may mean that two or elements are in direct contact.
As used herein, the term “circuitry” may refer to, be part of, or include an Application Specific Integrated Circuit (ASIC), an electronic circuit, a processor (shared, dedicated, or group) and/or memory (shared, dedicated, or group) that execute one or more software or firmware programs, a combinational logic circuit, and/or other suitable components that provide the described functionality.
As used herein, including in the claims, the term “chip” may refer to a physical integrated circuit (IC) on a computer. A chip in the context of this document may thus refer to an execution unit that can be single-core or multi-core technology.
As used herein, including in the claims, the term “processor” may refer to a logical execution unit on a physical chip. A multi-core chip may have several cores. As used herein the term “core” may refer to a logical execution unit containing an L1 (lowest level) cache and functional units. Cores are understood as being able to independently execute programs or threads.
As noted above, the XMS defines registers and control flag bits that compliant connected devices must implement. Currently, in order to configure, control and modify device behavior, a host repeatedly must access registers with identical offsets across devices. For example, if a host wants to configure a voltage regulator on each of sixteen DIMMs in system memory, which requires writing to the same register in each voltage regulator, a separate access must occur for each voltage regulator. Thus, to save configuration time on heavily loaded buses, which may connect to as many as one hundred and twenty devices, as well as to save boot time, in embodiments, a broadcast capability to update or configure defined bits across all devices is facilitated. In embodiments, the broadcast capability utilizes, inter alia, an additional header, described in detail below.
In embodiments, a host may thus chain the configuration of read and write accesses of memory devices, e.g., DIMMs, and may thus amortize the cost of an additional header across multiple accesses. Moreover, sequential register accesses on the same device do not incur any additional cost, where the device auto increments the register offset after each register access. In embodiments, the broadcast of device control information is made more efficient using masks to control bits so as to facilitate group addressing. In embodiments, an example message format is generic, and may be used to broadcast to any register on a device.
In accordance with various embodiments, functionality supported by the current XMS may be significantly improved to facilitate broadcast and multicast messaging across an XMS command bus. To better understand these improvements to the current XMS, a brief summary of device configuration and register addressing under the current XMS is next described.
Although XMS currently does define a broadcast format, intended to send a broadcast command to all devices on a bus, the format is only for writes, and is also specific to a set of bits on a device. The format uses a header followed by the specific bits for each device to be reached. The header includes a byte of all 0s, comprising a seven bit device address (000 0000) and one RnW bit (0), the 0 indicating a write access. The current format is as follows:
The fields of this broadcast format are specifically defined, and cannot be scaled and used for expanded purposes. The number of specific bits is limited to four bytes, and, moreover, there are no specific bit or field masking capabilities. Thus, there is no way for a sub-set of devices to be addressed, nor is there a way to access only a sub-set of these specific bits. Additionally, the current XMS format does not provide a mechanism for memory reads. The broadcast may only be used for write accesses. Given that a host may often need to read XM registers on various memory module devices, and because this is the only current transaction for which a broadcast address may be specified, a read is not possible.
The XMS also provides generic read/write formats, which include device register offset XM mode specified register accesses. However, as these are for a memory access to one register of one device, these currently supported transactions on an XM bus are inefficient.
A configuration write to one device at a time consumes at least two bytes of header. These bytes are for an individual device address and a device register offset, respectively, and are shown in bold below:
(Start
-> device address[6:0], RnW=0
-> device register offset, RnW=0
Similarly, a configuration read to a device consumes at least three bytes of header, with a read (RnW=1) following a write access (RTnW=0), as shown in bold:
(Start
-> device address[6:0],RnW=0
-> ACK/NACK;
-> device register offset, RnW=0
-> device address[6:0],RnW=1
-> ACK/NACK;
Because, as shown above, a read or a write must address a specific device, and a specific register on that device, device register accesses of the same transfer type, either read or write (Rd/Wr), to the same register of other XM devices on the bus cannot currently be combined or chained. Thus, the two or three headers as shown above, as the case may be, must be repeated for each separate device access, which results in a performance inefficiency. Additionally, as noted, conventional broadcast accesses do not have any masking capability for control or setup bits. As a result, if a control value is managed differently for even one device on the bus, then a broadcast access cannot currently be used at all for any device. This is because the set of bits are defined to be common for all devices, the functionality per bit position remains the same for all devices. This limits usages where only a control bit had to be toggled on only a subset of the connected devices.
In general, servers may have multiple double data rate (DDR) memory modules connected to their system-on-chip (SOC). The XMS allows up to one hundred twenty connected devices, including SPD devices, that require repeated identical register offset accesses and control or setup changes. Serializing register accesses under the XMS as currently specified, which, in addition to not having mask bits for controls, makes register access and broadcast transfers on the XM bus inefficient, and also consumes significant latency, area and power.
Finally, there is currently no workable method to enable access of the same device-type, e.g., a power management integrated circuit (PMIC), across all DIMMs of a server or computing system, as in a group cast directed to every PMIC in every DIMM.
In embodiments, there may be more, or fewer, DIMMs than are shown in
The value of slave address mask field 220 gives the number of least significant bits (LSBs) of a device identifier that are to be ignored. For example, if the field Set SlaveAddrMask[2:0] 220 is set to “011b”, that would mean that the least significant three bits of the seven bit device identification code (Dev ID Code) 250 would be masked, leaving a four bit ID code that would identify a whole group of devices. This enables all slave devices whose four most significant bits (MSBs) match the unmasked portion of Dev ID Code, e.g., Dev ID Code [6:3], to be addressed with a single transaction.
It is here noted that in embodiments, in an example system which is limited to eight DIMMs, addresses of devices may be arranged such that the MSD four bits indicate a type of device, and the LSB three bits indicate the DIMM number on which the device is provided. In such embodiments, it is possible to all devices of the same type (which are identified by the MSB four bits, across all eight DIMMs, by masking the LSB three bits, as shown in
Additional header byte 210 includes a three bit slave address field 220, named, for example, “SlaveAddrMask[2:0]”, a four bit offset field 230 named, for example, Offset[3:0], and an access mode field 240, named, for example, “XM-REG-MODE.” These are next described.
In embodiments, slave address mask field 220 is used to indicate how many least significant bits (LSBs) of a device address are to be ignored by a device receiving the command. The more bits of a device address, for example, “Dev ID Code[6:0]” 250 shown in
In the examples of
Continuing with reference to
In embodiments, the access mode of the broadcast command is indicated by access mode field 240. In the example of
In other embodiments, there may be more or less bits in each field, and a header and subsequent units of a command may have more or less bits than one byte.
Continuing with reference to
In embodiments, devices receiving a broadcast command of the format 200 of
Continuing with reference to
The symbols shown in column 350 have the same meanings as they do in conventional SMBus and XM protocols, and these represent one bit responses to each byte sent in the command, the response being sent by a device receiving the command. The symbols have the following meanings: S=start; Sr=restart; ACK=acknowledged; T=transition; and P=stop.
Continuing with reference to
In all other aspects, the example command of
In embodiments, it should be insured that register access definitions, including address and offset, are uniform across all devices that are to be commanded as a group, such as in a full or group broadcast. In embodiments, in a broadcast command issued for device register access, lower order bytes of a header carry device register offset information. In embodiments, because this is a mandatory aspect of the XMS the offset is guaranteed to be common across all devices. Thus, in order to use address masking functionality, for multicast or group writes, the groups need to have the same address/register definitions.
Following additional header 510, is a Sr transaction 511. Continuing with reference to
Because of the extra header bytes, a second access mode Sr transaction 511 is longer than an Sr transaction in the first access mode, because address/offset information needs to be added, in addition to payload/bytes. Thus, for example, Sr transaction 511 of
In alternate embodiments, if a broadcast transaction is issued for device control or setup, and thus uses the first access mode, it is followed by control data to all targeted devices. In some embodiments, the control data is provided in multiples of two byte pairs, where each byte pair includes a mask byte and a data byte. In these embodiments, a mask byte bit value of “1” indicates that the device should not process a corresponding bit of control data, and a mask byte bit value of “0” indicates that the device should process the corresponding bit of control data value. Although the addition of a mask byte to precede each control data byte increases the number of bytes transmitted per transaction, it also allows a command to selectively update fields of the protocol register at each indicated offset, which offers significant flexibility.
Continuing with reference to
Continuing with reference to
Continuing with reference to
In the example commands discussed so far, all of them have been write accesses, where the command directs a receiving device to, for example, update either a protocol register or an internal device register. It is understood that only a write operation can be truly broadcast to multiple devices, as opposed to a read which is specific to the contents of one or more registers on a single device.
It is noted that, in embodiments, XM protocol register read access to same register offset across 120 devices, as well as XM Register writes to same register offset across 120 devices will be more efficient than under the current XMS. Moreover, broadcast access improves several fold, as, in embodiments, a host computer may continue to use broadcast commands even though some devices may have non-identical values in some of the specified control flag bits, which under the current protocol is not possible.
In embodiments, a capability to address/multi-cast to the same device type across multiple DIMMs is enabled, as well as the capability to access a specific set of XM protocol registers per device. This feature thus enables a standard mechanism for protocol feature control, such as, for example, PEC enable, IBI on/off, etc. As shown in
Next described, with reference to
Prior to describing the method of
Therefore, to ensure that all devices on a DIMM may be seamlessly addressed by a host computer, the hub must either continually translate an address coming from the host computer to the local device addresses, or, alternatively, the devices on the DIMM that are “behind the hub”, must be made aware of their actual host id, so that when they are addressed by a host computer, for example, via one of the example commands shown in
Further, a hub of a DIMM is preferably made to be as inexpensive as possible, without implementing PEC or store-forward schemes. Moreover, because a hub does not have an independent clock source, it does not process data on its own. Thus, an ideal hub is a passive pass gate based implementation, which transports a transaction from one domain (e.g., command bus) to another (e.g., local device bus) and assists in reducing and balancing bus loads so that as many devices may be attached to a command bus as possible.
Alternatively, a one-time-programmable address may be assigned to each device during manufacturing. However, this adds to manufacturing costs. Still alternatively, the hub may, on an ongoing basis, manage addresses for each transaction or command received from a host computer, e.g., translate the device address used in a transaction or command to the actual DIMM_ID of the slot it is connected to, but this adds significant workload and complexity.
Accordingly, in embodiments, a first access mode full broadcast command, as described above, is used by a host computer to cause each hub, on each DIMM, to push the hub's host identifier (e.g., DIMM_ID) to all local bus devices on its DIMM.
In embodiments, in this specific DIMM_ID propagation transaction, upon receipt of the broadcast command from the host computer, the hub of each DIMM changes certain bits of the device address included in the broadcast command, prior to forwarding the broadcast command to the local bus. In particular, the hub replaces HID/LID bits in the payload of the broadcast message received from the host computer. Additionally, in embodiments, enabling PEC for such a configuration/broadcast HID propagation transaction is accomplished using a relatively simple 8:1 look up table. This is because all bit values of the HID propagating transaction are known a priori, the PEC may be a pre-calculated value based on the DIMM_ID to be inserted.
It is noted, however, that devices can still work with their default addresses in non-hub environments, as long as the device addresses are unique, or a hub alters the device address for each and every transaction. Thus, the broadcast DIMM_ID propagation transaction according to various embodiments is not a must, as devices may operate seamlessly without it. This assumes, however, that in non-hub cases, the device addresses are unique, and in hub cases, for this to work without HID propagation, the hub must alter the destination address for each and every transaction (pvt/direct).
In embodiments, an XM broadcast transaction described above is combined with XM register access to update a HID/DIMM_ID on devices connected on a local bus. As described in detail below, in embodiments, a hub can detect this specific command, and replace just the HID/LID field of the command, and, if enabled, the PEC.
In embodiments, all devices on local bus must be XM-bus compliant and implement the following mandatory capabilities:
In embodiments, a device, may, in order to be I2C compliant, derive the default slave address from pin straps, as a default. If so, the device then provides this address as the default value of the XM protocol register[0xF] for any host, with or without a hub, to read it later.
In embodiments, upon receiving the above specified broadcast transaction, a gateway or hub of a DIMM updates the lower three bits (or, for example, greater or lesser bits in other or extended applications) of the incoming value to set the DIMM_ID/HID specific address. In embodiments, a host may send this broadcast command as the very first transaction during bus initialization, and, in embodiments, the transaction may be done as a single broadcast write transaction across the entire set of devices connected on each DIMM.
Continuing with reference to
Continuing with reference to
In the specific examples presented herein, the intent is to address eight DIMMs. Thus, three LSBs of the address are replaced by the hub. As noted above, in this example the four MSBs indicate the device type. In other embodiments, there may be fewer, or greater number of DIMMs to be addressed, and thus there may be fewer or more LSBs that need to be replaced by the hub with the branch-id (or HUB/DIMM_ID).
In embodiments, if PEC is enabled, this is done by including in command 1000 an additional control byte in the Sr transaction, following control byte Byte0 at 1015.
Being XMS compliant, upon receipt of command 1000, the hub passes the assigned address of Byte0 (ABCD_HID) and the broadcast address (0000_000) 1013.
The hub must be able to update/replace Byte0[3:1] its HID/DIMM_ID (static replacement—from value derived from) into 3 bits of a specific transaction as described below—while the transaction is passed from host bus to local bus.
In embodiments, the hub performs the host id update, if and only if all of the following conditions are satisfied for an incoming broadcast:
XM-MODE-REG 1040 is 1;
Offset[3:0] 1030=1111; and
SlaveAddressMask[2:0] 1020=111.
If so, then, in embodiments, the hub will, on the local bus, replace the LSB three bits of Byte0 with the DIMM_ID/hostID that it has been assigned.
In embodiments, all local devices will accept the modified form of command 1000 as an XM broadcast transaction, and update their DIMM_ID/hostID. This written value now over-rides all previously known/assigned addresses to the device. In some embodiments, register at offset 0xF may be implemented in a write-once mode to ensure that no malicious agent can reprogram the HID after a secure boot up process. In other embodiments, a different register may be used to store an HID, as noted above, Register[15] being merely exemplary.
In embodiments, even with PEC enabled for broadcast, the PEC for the first command segment 1010 holds well. The PEC for the second command segment 1013 is essentially the PEC for precisely a one byte slave-address=0x0 and one byte of data, that can be easily replaced by a hub. To simplify further, in embodiments, the value of Byte0[7:3] may be defined as 0x0, so that the PEC becomes PEC of all Os with just a three bit DIMM_ID, and thus a straight lookup table with eight entries. The incoming PEC value is always a fixed CRC-8 of 0x0000 (two bytes of all zeroes).
As noted above, besides the special case of the command 1000 of
In embodiments, once the HID propagation is completed successfully, and a new command is issued, the hub can identify (based on the LSB 3 bits of address) whether it's branch/local bus is being addressed or not. If it is not being addressed, the hub may terminate the transaction with a NACK.
In the case of an un-addressed or un-selected DIMMs, an un-addressed hub may abort/terminate the command transaction on its local bus,
Even in the case of an incoming DIMM_ID matching a local bus tie-off of 3′b111, which addresses DIMM#8, what happens on other DIMMs, since local bus is using 3′b111. However, it is noted that if the HID/DIMM_ID assignment using a broadcast command, as described above, is performed, this scenario does not arise.
Nonetheless, to address error scenarios where the HID/DIMM_ID assignment was missed as a programming step, a hub performing the abort helps to reduce bus contention/multiple drivers on the host bus.
Referring now to
Process 1200 may be performed by a gateway or hub of a memory module, such as, for example, gateway 130 of
With reference to
From block 1210, process 1200 proceeds to block 1220, where the hub receives a broadcast message from a host computer, the broadcast message including an access mode indicator and a register offset value. For example, the broadcast message may be a command equivalent to command 1000 of
From block 1220, process 1200 moves to block 1230, where the hub decodes the access mode indicator to determine that a protocol register access mode is indicated, such as, for example, in a system where a first access mode of XM control or protocol registers is indicated by a flag having a value of “1”, XM-REG-MODE flag is a “1.”
From block 1230, process 1200 moves to block 1240, where the hub identifies that the command is a host ID propagation command, including a Host_ID value. For example, using the command of
Finally, from block 1240, process 1200 moves to block 1250, where the hub replaces a portion of the Host_ID value with the detected memory module identifier and propagates the now modified command to all devices on the memory module. For example, as shown in
Referring now to
Computer device 1300 may also include system memory 1304. In embodiments, system memory 1304 may include any known volatile or non-volatile memory, such as DIMMs 1325. DIMMs 1325 may be connected via command bus 1341 to processors 1302. Additionally, computer device 1300 may include mass storage device(s) 1306, input/output device interfaces 1308 (to interface with various input/output devices, such as, mouse, cursor control, display device (including touch sensitive screen), and so forth) and communication interfaces 1310 (such as network interface cards, modems and so forth). In embodiments, communication interfaces 1310 may support wired or wireless communication, including near field communication. The elements may be coupled to each other via system bus 1312, which may represent one or more buses. In the case of multiple buses, they may be bridged by one or more bus bridges (not shown).
In embodiments, DIMMs 1325 may include gateway 1328, including an input interface (not shown due to size of figure, but described above with reference to
In embodiments, system memory 1304 and mass storage device(s) 1306 may be employed to store a working copy and a permanent copy of the executable code of the programming instructions of an operating system, one or more applications, and/or various software implemented components of decoding circuitry 133 of gateway 130, and decoding circuitry 135 in each of Devices A, B and C which are provided “behind gateway 130”, as shown in
The permanent copy of the executable code of the programming instructions or the bit streams for configuring hardware accelerator 1305 may be placed into permanent mass storage device(s) 1306 and/or hardware accelerator 1305 in the factory, or in the field, through, for example, a distribution medium (not shown), such as a compact disc (CD), or through communication interfaces 1310 (from a distribution server (not shown)).
The number, capability and/or capacity of these elements 1302-1333 may vary, depending on the intended use of example computer device 1300, e.g., whether example computer device 1300 is a smartphone, tablet, ultrabook, a laptop, a server, a set-top box, a game console, a camera, and so forth. The specific constitutions of elements 1310-1343 are otherwise known, and accordingly will not be further described.
Furthermore, the present disclosure may take the form of a computer program product or data to create the computer program, with the computer program or data embodied in any tangible or non-transitory medium of expression having the computer-usable program code (or data to create the computer program) embodied in the medium.
In alternate embodiments, programming instructions 1404 (or data to create the instructions) may be disposed on multiple computer-readable non-transitory storage media 1402 instead. In alternate embodiments, programming instructions 1404 (or data to create the instructions) may be disposed on computer-readable transitory storage media 1402, such as, signals. Any combination of one or more computer usable or computer readable medium(s) may be utilized. The computer-usable or computer-readable medium may be, for example but not limited to, one or more electronic, magnetic, optical, electromagnetic, infrared, or semiconductor systems, apparatuses, devices, or propagation media. More specific examples (a non-exhaustive list) of a computer-readable medium would include the following: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a transmission media such as those supporting the Internet or an intranet, or a magnetic storage device. Note that the computer-usable or computer-readable medium could even be paper or another suitable medium upon which the program (or data to create the program) is printed, as the program (or data to create the program) can be electronically captured, via, for instance, optical scanning of the paper or other medium, then compiled, interpreted, or otherwise processed in a suitable manner, if necessary, and then stored in a computer memory (with or without having been staged in or more intermediate storage media). In the context of this document, a computer-usable or computer-readable medium may be any medium that can contain, store, communicate, propagate, or transport the program (or data to create the program) for use by or in connection with the instruction execution system, apparatus, or device. The computer-usable medium may include a propagated data signal with the computer-usable program code (or data to create the program code) embodied therewith, either in baseband or as part of a carrier wave. The computer usable program code (or data to create the program) may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, RF, etc.
In various embodiments, the program code (or data to create the program code) described herein may be stored in one or more of a compressed format, an encrypted format, a fragmented format, a packaged format, etc. Program code (or data to create the program code) as described herein may require one or more of installation, modification, adaptation, updating, combining, supplementing, configuring, decryption, decompression, unpacking, distribution, reassignment, etc. in order to make them directly readable and/or executable by a computing device and/or other machine. For example, the program code (or data to create the program code) may be stored in multiple parts, which are individually compressed, encrypted, and stored on separate computing devices, wherein the parts when decrypted, decompressed, and combined form a set of executable instructions that implement the program code (the data to create the program code (such as that described herein. In another example, the Program code (or data to create the program code) may be stored in a state in which they may be read by a computer, but require addition of a library (e.g., a dynamic link library), a software development kit (SDK), an application programming interface (API), etc. in order to execute the instructions on a particular computing device or other device. In another example, the Program code (or data to create the program code) may need to be configured (e.g., settings stored, data input, network addresses recorded, etc.) before the program code (or data to create the program code) can be executed/used in whole or in part. Thus, the disclosed Program code (or data to create the program code) are intended to encompass such machine readable instructions and/or program(s) (or data to create such machine readable instruction and/or programs) regardless of the particular format or state of the machine readable instructions and/or program(s) when stored or otherwise at rest or in transit.
Computer program code for carrying out operations of the present disclosure may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Smalltalk, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider).
Referring back to
Illustrative examples of the technologies disclosed herein are provided below. An embodiment of the technologies may include any one or more, and any combination of, the examples described below.
Example 1 is a device, comprising an input interface to receive a broadcast command from a host computer, wherein the broadcast command includes an access mode indication; and decoding circuitry coupled with the interface, to: determine, based at least in part on the received access mode indication that the broadcast command is directed to access one or more pre-defined setup or control registers of one or more devices, or to access one or more internal registers of the one or more devices; and in response to the determination, implement the access to the setup or control registers, or to the one or more internal registers, wherein the device is disposed on a memory module coupled to the host computer.
Example 2 is the device of example 1, and/or any other example herein, wherein the broadcast command is first received by a gateway of the memory module, and then received by the input interface from the gateway over a local bus within the memory module.
Example 3 is the device of example 2, and/or any other example herein, wherein the command bus and the local bus are compliant with the XM specification of the Joint Electron Device Engineering Council (the XM Specification).
Example 4 is the device of example 3, and/or any other example herein, wherein the one or more pre-defined setup or control registers of the device are registers prescribed by the XM Specification.
Example 5 is the device of example 1, and/or any other example herein, wherein the memory module is a dual in-line memory module (DIMM).
Example 6 is the device of example 1, and/or any other example herein, wherein the device is one of: a voltage regulator, a temperature sensor, a flash memory storing timing information, a serial presence detect (SPD) device or a registering clock driver (RCD).
Example 7 is the device of example 1, and/or any other example herein, wherein the one or more internal registers of the device are accessible at pre-defined offsets prescribed by the XM Specification.
Example 8 is the device of example 1, and/or any other example herein, wherein the broadcast command further includes one or more device addresses and device address masking data, and wherein the decoding circuitry is further to ignore a portion of the one or more device addresses as indicated by the device address masking data; and determine if a remaining portion of the one or more device addresses matches a corresponding portion of its own address.
Example 9 is the device of example 8, and/or any other example herein, wherein the one or more device addresses included in the broadcast command are seven bits long, and wherein the device address masking data indicates that between one and seven least significant bits (LSBs) of the one or more device addresses are to be ignored.
Example 10 is the device of example 1, and/or any other example herein, wherein the broadcast command further includes an offset specifying a location of an initial pre-defined setup or control register, or internal register, of the device at which to begin the indicated access.
Example 11 is one or more non-transitory computer-readable storage media comprising a set of instructions, which, when executed by a device provided in a memory module, cause the device to: receive a broadcast command from a host computer, the broadcast command directed to writing of setup or control data to one or more registers of one or more devices beginning at an offset, and including a device address and device address masking data; apply the device address masking data to mask a portion of the device address; determine if an unmasked portion of the device address matches a corresponding portion of an address of the device; and in response to the determination, write the data to the one or more registers of the device beginning at the offset.
Example 12 is the one or more non-transitory computer-readable storage media of example 11, and/or any other example herein, wherein the broadcast command is received by the device over a command bus connecting the host computer to the memory module, and wherein the command bus is compliant with the XM Specification.
Example 13 is the one or more non-transitory computer-readable storage media of example 11, and/or any other example herein, wherein the broadcast command further includes an access mode indicator, and further comprising instructions that, when executed, cause the device to decode the access mode indicator to determine that the access mode is to one or more pre-defined setup or control registers of the device.
Example 14 is the one or more non-transitory computer-readable storage media of example 13, and/or any other example herein, wherein the one or more pre-defined setup or control registers are prescribed by the XM Specification, and the data includes control data to be written to the specified one or more pre-defined control registers.
Example 15 is the one or more non-transitory computer-readable storage media of example 14, and/or any other example herein, wherein the control data is in multiples of two byte pairs, the two byte pairs including a control data byte and a corresponding mask byte, the corresponding mask byte indicating which bits of the data byte are to be written to a pre-defined control register of the device, and which bits of the data byte are to be ignored.
Example 16 is the one or more non-transitory computer-readable storage media of example 12, and/or any other example herein, wherein the device address masking data is arranged such that the data is to be written to the same type of device across multiple memory modules connected to the host computer via the command bus.
Example 17 is a method, comprising: receiving, at a DIMM, a broadcast command from a host computer, the broadcast command including an access mode indicator and a register offset value; decoding the access mode indicator to determine that a protocol register access mode is indicated; identifying, based at least in part on the access mode indicator and the register offset value, that the command is a DIMM identifier (DIMM_ID) propagation command directing a receiving device to write a DIMM_ID value to the protocol register indicated by the offset; in response to the identification, modifying the command to replace a portion of the DIMM_ID with a local DIMM identifier; and propagating the modified command to all devices on the DIMM over a local bus.
Example 18 is the method of example 17, and/or any other example herein, further comprising obtaining the local DIMM identifier from a slot in which the DIMM is inserted.
Example 19 is the method of example 17, and/or any other example herein, wherein the DIMM is one of N DIMMs connected to the host computer, N=2K, where K is an integer, wherein the local DIMM identifier includes K bits, and wherein modifying the command further comprises replacing K least significant bits (LSBs) of the DIMM_ID with the local DIMM identifier.
Example 20 is the method of example 17, and/or any other example herein, wherein the method is performed by, or by a portion of, a gateway of the DIMM, and wherein the local bus is compliant with the XM Specification.
Example 21 is a method, comprising: receiving a broadcast command from a host computer, the broadcast command directed to writing of setup or control data to one or more registers of one or more devices beginning at an offset, and including a device address and device address masking data; applying the device address masking data to mask a portion of the device address; determining if an unmasked portion of the device address matches a corresponding portion of an address of the device; and in response to the determination, writing the data to the one or more registers of the device beginning at the offset.
Example 22 is the method of example 21, and/or any other example herein, further comprising receiving the broadcast command over a command bus, and wherein the command bus is compliant with the XM Specification.
Example 23 is the method of example 21, and/or any other example herein, wherein the broadcast command further includes an access mode indicator, and further comprising decoding the access mode indicator to determine that the access mode is to one or more pre-defined setup or control registers of the device.
Example 24 is the method of example 23, and/or any other example herein, wherein the one or more pre-defined setup or control registers are prescribed by the XM Specification, and the data includes control data to be written to the specified one or more pre-defined control registers.
Example 25 is the method of example 24, and/or any other example herein, wherein the control data is in multiples of two byte pairs, the two byte pairs including a control data byte and a corresponding mask byte, the corresponding mask byte indicating which bits of the data byte are to be written to a pre-defined control register of the device, and which bits of the data byte are to be ignored.
Example 26 is the method of example 22, and/or any other example herein, wherein the device address masking data is arranged such that the data is to be written to the same type of device across multiple memory modules connected to the host computer via the command bus.
Example 27 is an apparatus for computing, comprising: means for receiving, at a DIMM, a broadcast command from a host computer, the broadcast command including an access mode indicator and a register offset value; means for decoding the access mode indicator to determine that a protocol register access mode is indicated; means for identifying, based at least in part on the access mode indicator and the register offset value, that the command is a DIMM identifier (DIMM_ID) propagation command directing a receiving device to write a DIMM_ID value to the protocol register indicated by the offset; means for modifying the command to replace a portion of the DIMM_ID with a local DIMM identifier; and means for propagating the modified command to all devices on the DIMM over a local bus.
Example 28 is the apparatus for computing of example 27, and/or any other example herein, further comprising means for obtaining the local DIMM identifier from a slot in which the DIMM is inserted.
Example 29 is the apparatus for computing of example 27, and/or any other example herein, wherein the DIMM is one of N DIMMs connected to the host computer, N=2K, where K is an integer, wherein the local DIMM identifier includes K bits, and wherein the means for modifying the command further comprises means for replacing K least significant bits (LSBs) of the DIMM_ID with the local DIMM identifier.
Example 30 is the apparatus for computing of example 27, and/or any other example herein, wherein the apparatus is, or is a portion of, a gateway of the DIMM, and wherein the local bus is compliant with the XM Specification.
Example 31 is a apparatus for computing, comprising: means for receiving a broadcast command from a host computer, the broadcast command directed to writing of setup or control data to one or more registers of one or more devices beginning at an offset, and including a device address and device address masking data; means for applying the device address masking data to mask a portion of the device address; means for determining if an unmasked portion of the device address matches a corresponding portion of an address of the device; and means for writing the data to the one or more registers of the device beginning at the offset.
Example 32 is the apparatus for computing of example 31, and/or any other example herein, further comprising means for receiving the broadcast command over a command bus, and wherein the command bus is compliant with the XM Specification.
Example 33 is the apparatus for computing of example 31, and/or any other example herein, wherein the broadcast command further includes an access mode indicator, and further comprising means for decoding the access mode indicator to determine that the access mode is to one or more pre-defined setup or control registers of the device.
Example 34 is the apparatus for computing of example 33, and/or any other example herein, wherein the one or more pre-defined setup or control registers are prescribed by the XM Specification, and the data includes control data to be written to the specified one or more pre-defined control registers.
Example 35 is the apparatus for computing of example 34, and/or any other example herein, wherein the control data is in multiples of two byte pairs, the two byte pairs including a control data byte and a corresponding mask byte, the corresponding mask byte indicating which bits of the data byte are to be written to a pre-defined control register of the device, and which bits of the data byte are to be ignored.
Example 36 is the apparatus for computing of example 32, and/or any other example herein, wherein the device address masking data is arranged such that the data is to be written to the same type of device across multiple memory modules connected to the host computer via the command bus.