Apparatus and methods for interrupt control within die architectures

The MDIS host controller addresses the limitation of single-device interrupts by associating vector values with multiple registers, enabling efficient interrupt routing to multiple system devices within die architectures, enhancing system responsiveness and efficiency.

WO2026044472A1PCT designated stage Publication Date: 2026-03-05QUALCOMM INC +5
View PDF 5 Cites 0 Cited by

Patent Information

Application Number
PCT/CN2024/114708
Authority / Receiving Office
WO · WO
Patent Type
Applications
Current Assignee / Owner
Filing Date
2024-08-27
Publication Date
2026-03-05

AI Technical Summary

Technical Problem

Conventional interrupt mechanisms in die architectures, such as chiplets and system-on-chips, are limited to supporting interrupts for a single system device, failing to accommodate applications that require interrupts for multiple devices, particularly in automotive and server systems with multiple processing units.

Method used

Implementing a Multiple Device Interrupt Support (MDIS) host controller with multiple base address registers and interrupt routing logic to associate specific ranges of vector values with each register, allowing the controller to determine the appropriate system device for interrupt routing based on the vector value, thereby supporting interrupts to multiple system devices.

Benefits of technology

Enables efficient interrupt handling for multiple system devices within die architectures, enhancing the capability to manage concurrent operations across various processing units and peripherals, improving system responsiveness and efficiency.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN2024114708_05032026_PF_FP_ABST
    Figure CN2024114708_05032026_PF_FP_ABST
Patent Text Reader

Abstract

Methods and apparatuses are provided that provide multiple device interrupt support within die architectures. For instance, in one example, a die includes interrupt routing logic and a base address register. The interrupt routing logic is configured to receive a vector value in response to a completed event, such as a completed memory transfer. The interrupt routing logic is also configured to determine the vector value is within a range of vector values associated with the base address register. Further, the interrupt routing logic is configured to read a base address from the base address register, and to write the vector value to the base address. The base address may be a doorbell register of another device, for example. The writing of the vector value to the base address may cause an interrupt on the corresponding device.
Need to check novelty before this filing date? Find Prior Art

Description

APPARATUS AND METHODS FOR INTERRUPT CONTROL WITHIN DIE ARCHITECTURESBACKGROUND

[0001] FIELD OF THE DISCLOSURE

[0002] This disclosure relates generally to die architectures and, more particularly, to interrupt control mechanisms within die architectures.

[0003] DESCRIPTION OF RELATED ART

[0004] Dies, such as chiplets and system-on-chips (SoCs) , are used across a multitude of applications, such as telecommunication, automotive, cloud-based, gaming, enterprise, and networking applications, among various other applications. Often times, die architectures include interrupt mechanisms that, for instance, can allow for event indications. For example, a memory controller, upon completing a memory transaction, may be configured to communicate an interrupt to another device, such as an interrupt controller, that indicates completion of the memory transaction by writing a value to a predetermined memory address of the other device. The interrupt controller may then route the interrupt to a corresponding device. There are opportunities to address deficiencies associated with conventional interrupt mechanisms within die architectures.SUMMARY

[0005] According to one aspect, a die includes interrupt routing logic and at least one register. The interrupt routing logic is configured to receive a vector value based on an event. The interrupt routing logic is also configured to determine the vector value is within a range of vector values associated with the at least one register. Further, the interrupt routing logic is configured to read a base address from the at least one register. The interrupt routing logic is also configured to write the vector value to the base address.

[0006] According to another aspect, an apparatus includes a non-transitory, machine-readable storage medium storing instructions, and at least one processor  coupled to the non-transitory, machine-readable storage medium. The at least one processor is configured to receive a vector value based on an event. The at least one processor is also configured to determine the vector value is within a range of vector values associated with at least one register. Further, the at least one processor is configured to read a base address from the at least one register. The at least one processor is also configured to write the vector value to the base address.

[0007] According to yet another aspect, a method by at least one processor includes receiving a vector value based on an event. The method also includes determining the vector value is within a range of vector values associated with at least one register. Further, the method includes reading a base address from the at least one register. The method also includes writing the vector value to the base address.

[0008] According to even another aspect, a non-transitory, machine-readable storage medium stores instructions that, when executed by at least one processor, causes the at least one processor to perform operations. The operations include receiving a vector value based on an event. The operations also include determining the vector value is within a range of vector values associated with at least one register. Further, the operations include reading a base address from the at least one register. The operations also include writing the vector value to the base address.BRIEF DESCRIPTION OF DRAWINGS

[0009] FIG. 1 is a block diagram of a die package, according to some implementations;

[0010] FIG. 2 is a block diagram of a die package, according to some implementations;

[0011] FIG. 3 illustrates portions of an interrupt controller, according to some implementations;

[0012] FIG. 4 illustrates a state machine, according to some implementations;

[0013] FIGS. 5A, 5B, 5C, 5D, and 5E illustrate various registers, according to some implementations;

[0014] FIG. 6  is a flowchart of an exemplary interrupt control process, according to some implementations; and

[0015] FIG. 7 is a flowchart of another exemplary interrupt control process, according to some implementations.DETAILED DESCRIPTION

[0016] While the features, methods, devices, and systems described herein may be embodied in various forms, some exemplary and non-limiting embodiments are shown in the drawings, and are described below. Some of the components described in this disclosure are optional, and some implementations may include additional, different, or fewer components from those expressly described in this disclosure.

[0017] The embodiments described herein are directed to die solutions that allow for multiple device interrupt support. For example, Universal Flash Storage (UFS) host controllers can control access to UFS memory devices. For instance, a UFS host controller can allow a system device (e.g., Central Processing Unit (CPU) , General Processing Unit (GPU) , Generic Interrupt Controller (GIC) ) to access a UFS memory device.   The  standard, for instance, provides a UFS Host Controller Interface (UFSHCI) specification that defines a hardware and software interface standard between a UFS host controller and a system device. When the UFS host controller completes an event, such as a memory write to, or read from, the UFS memory device, the UFS host controller may write a value to a predetermined memory address accessible by the system device. For instance, the UFS host controller may write a vector value (e.g., interrupt identifier (ID) , vector ID, interrupt vector, event index, event specific interrupt (ESI) ID, etc. ) to a doorbell register of the system device, where the doorbell register is located at (e.g., mapped to) the predetermined memory address. The write to the doorbell register acts as an interrupt to the system device, and the system device may then act upon the received interrupt. For instance, the system device may perform operations (e.g., Interrupt Translation Service (ITS) operations) to map the received interrupt to a locality-specific peripheral interrupt (LPI) ID based on the vector value.

[0018] Although conventional mechanisms allow for the UFS host controller to indicate interrupts only to a single system device (e.g., by writing vector values to a single predetermined memory address) , many applications may benefit from  mechanisms that support interrupts to multiple system devices. For example, applications, such as automotive and server applications, may allow applications (e.g., operating systems) to run on more than one processing device (e.g., more than one CPU) . As such, processing systems would benefit from mechanisms that would allow the UFS host controller to indicate interrupts to multiple system devices. The embodiments described herein may address these and other deficiencies with conventional interrupt methods.

[0019] For example, a multiple device interrupt support (MDIS) host controller may include multiple base address registers that store memory addresses for doorbell registers that are associated with multiple system devices (e.g., GIC controllers) . In addition, the MDIS host controller can associate a range of vector values with each of the doorbell registers. For instance, the MDIS host controller may associate a first range of vector values with a first memory address of a first doorbell register, and a second range of vector values with a second memory address of a second doorbell register. When an event occurs, the MDIS host controller may receive a vector value (e.g., vector ID) . The MDIS host controller may determine whether the vector value falls within the first range of vector values or second range of vector values. Based on which range of vector values the received vector ID falls within, the MDIS host controller writes interrupt data (e.g., ESI data) to the corresponding doorbell register. For instance, if the vector ID falls within the first range of vector values, the MDIS host controller may write the vector ID to the first memory address of the first doorbell register. If, however, the vector ID falls within the second range of vector values, the MDIS host controller may write the vector ID to the second memory address of the second doorbell register.

[0020] Referring now to the drawings, FIG. 1 is a block diagram of an integrated circuit package 100 (e.g., die package, SoC) that includes non-volatile mass storage device 102, MDIS host controller 104, first Generic Interrupt Controller (GIC) 108, second GIC 106, third GIC 110, central processing unit (CPU) 136, graphical processing unit (GPU) 138, and input / output (I / O) 140. Non-volatile mass storage device 102 may be any suitable memory device, such as a UFS mass storage device.

[0021] Each of the various dies may be coupled to one or more other dies via interconnects. For example, MDIS host controller 104 can be coupled to non-volatile mass storage device 102 over interconnect 103. In some examples, interconnect 103  includes signals in accordance with the host interface layer of the UFS specification (e.g., UFS 2.0, UFS 2.1, UFS 3.0, UFS 3.1, UFS 4.0, etc. ) . For instance, interconnect 103 can include transmit signals, receive signals, a reset signal, and a reference clock signal. In some instances, MDIS host controller 104 encrypts data for write operations to the non-volatile mass storage device 102, and decrypts data for read operations from the non-volatile mass storage device 102.

[0022] MDIS host controller 104 can also be coupled to first GIC 108, second GIC 106, and third GIC 110 over interconnect 120. Interconnect 120 may, for example, provide signals in accordance with the UFS Host Controller Interface (UFSHCI) Specification by  Additionally, first GIC 108 can be coupled to GPU 138 via interconnect 121A, second GIC 106 can be coupled to the CPU 136 via interconnect 121B, and third GIC 110 can be coupled to the I / O 140 via interconnect 121C. Each of the interconnects 121A, 121 B, 121C may be, for example, Universal Chiplet Interconnect Express  interconnects, or any other suitable interconnects.

[0023] Integrated circuit package 100 is merely exemplary, and in other embodiments, an integrated circuit package in accordance with these disclosures may include any other suitable dies which may replace, or be added in addition to, any of the dies illustrated with respect to integrated circuit package 100. In addition, integrated circuit package 100 may be coupled to one or more other integrated circuit packages. For instance, a first integrated circuit package 100 may be coupled, over one or more interconnects 120, to a second integrated circuit package 100. These integrated circuit packages, including integrated circuit package 100, may be implemented in various types of devices, such as within networking devices, telecommunication devices, smartphone devices, gaming devices, automotive devices, enterprise devices, storage devices (e.g., cloud storage devices) , and computing devices (e.g., cloud computing devices) , among other types of data processing devices.

[0024] In some examples, GPU 138 and CPU 136 may execute portions of one or more same applications, such as one or more operating systems (OSs) . For instance, GPU 138 and CPU 136 may execute a host OS. For instance, the GPU 138 may execute first portions of the host OS, and the CPU 136 may execute second portions of the same host OS. The host OS, executing on each of the GPU 138 and CPU 106, may have a need to access the non-volatile mass storage device 102.  Similarly, I / O 140 may also have a need to access to the non-volatile mass storage device 102. For instance, each of the GPU 138, CPU 106, and I / O 140 may have a need to be interrupted when a particular data transfer to or from the non-volatile mass storage device 102 has occurred.

[0025] To allow for multiple device interrupt support, the MDIS host controller 104 may include various segment registers for each of one or more segments, where each segment is associated with a corresponding system device and range of vector values. For instance, the MDIS host controller 104 may include an event specific interrupt (ESI) segment lower base address register, and a corresponding ESI segment upper base address register, for each segment. The ESI segment lower base address register and corresponding ESI segment upper base address register may store corresponding portions of an address of a corresponding system device, such as an address of a doorbell register of the system device. For example, the ESI segment lower base address register may define the lower 32 bits of the address, and the ESI segment upper base address register may define the upper 32 bits of the address.

[0026] Here, for instance, the MDIS host controller 104 may include three sets of ESI segment lower base address registers and corresponding ESI segment upper base address registers. A first ESI segment lower base address register and first ESI segment upper base address register may define a doorbell address of the first GIC 108. A second ESI segment lower base address register and second ESI segment upper base address register may define a doorbell address of the second GIC 106. Likewise, a third ESI segment lower base address register and third ESI segment upper base address register may define a doorbell address of the third GIC 110.

[0027] Further, for each segment, the MDIS host controller 104 may include an ESI segment control register that defines whether the corresponding segment is enabled. The ESI segment control register may also define a vector value count that indicates a number of vector values (e.g., ESI vectors) that belong to the corresponding segment. In addition, for each segment, the MDIS host controller 104 may include an ESI segment base register that defines a base vector value (e.g., minimum vector ID) associated with the segment. As described herein, when the MDIS host controller 104 generates a vector value (e.g., based on the completion of a memory transfer to non-volatile mass storage device 102) , the MDIS host controller  104 may determine whether the vector value is associated with a segment (and, thus, a corresponding system device) based on the base vector value (defined by the ESI segment base register) , and the vector value count (defined by the ESI segment control register) . For example, the MDIS host controller 104 may determine whether the vector value is greater than or equal to the base vector value (e.g., the minimum vector value) , and less than or equal to a maximum vector value, where the maximum vector value is the sum of the base vector value and the vector value count. Based on a determined segment, the MDIS host controller 104 may write the vector value to the doorbell address defined by the ESI segment lower base address register and ESI segment upper base address register for the segment and, thus, the corresponding system device (e.g., first GIC 108, second GIC 106, third GIC 110) . The writing of the vector value to the doorbell address may trigger an interrupt on that system device, where the system device then services the interrupt.

[0028] In some examples, the ESI segment control register defines a vector value threshold (e.g., rather than an interrupt count) associated with the segment. In these examples, the MDIS host controller 104 may determine whether the vector value is associated with a segment (and, thus, the corresponding system device) based on comparing the vector value to the vector value threshold. For instance, the MDIS host controller 104 may determine that the vector value is associated with a segment when the vector value is equal to or greater than the vector value threshold. In some examples, the MDIS host controller 104 may determine that the vector value is associated with a segment when the vector value is equal to or less than the vector value threshold. As discussed above, based on the determined segment, the MDIS host controller 104 may write the vector value to the doorbell address defined by the ESI segment lower base address register and ESI segment upper base address register for the segment to trigger an interrupt on the corresponding system device (e.g., first GIC 108, second GIC 106, third GIC 110) .

[0029] For example, if the MDIS host controller 104 determines the vector value is for the segment associated with the first GIC 108, the MDIS host controller 104 writes the vector value to the doorbell address for the first GIC 108. In response, the first GIC 108 may perform interrupt service operations, such as ITS operations, and issue a corresponding interrupt (e.g., LPI) to the GPU 138 over interconnect 121A. Likewise, if the MDIS host controller 104 determines the vector value is for the  segment associated with the second GIC 106, the MDIS host controller 104 writes the vector value to the doorbell address for the second GIC 106. In response, the second GIC 106 may perform interrupt service operations, such as ITS operations, and issue a corresponding interrupt to the CPU 136 over interconnect 121 B. Similarly, if the MDIS host controller 104 determines the vector value is for the segment associated with the third GIC 110, the MDIS host controller 104 writes the vector value to the doorbell address for the third GIC 110. In response, the third GIC 110 may perform interrupt service operations, such as ITS operations, and issue a corresponding interrupt to the I / O 140 over interconnect 121C.

[0030] FIG. 2 illustrates an SoC 200 that includes an MDIS UFS controller 214, a UFS mass storage device 202, a first GIC 280, a second GIC 282, and a third GIC 284. In addition, the MDIS UFS controller 214 includes MDIS interrupt routing logic 220, memory control logic 250, and registers 240. The MDIS UFS controller 214 may be implemented in hardware, in executable instructions executed by a processor (e.g., software) , or a combination of the two. For example, the MDIS UFS controller 214 may be implemented in one or more circuits, and / or in one or more processors (e.g., processor 220A) executing instructions (e.g., stored within an internal memory of the MDIS interrupt routing logic 220) .

[0031] As illustrated, the UFS mass storage device 202 is electrically coupled to the memory control logic 250 over interconnect 203, which can include signals in accordance with the host interface layer of the UFS specification (e.g., UFS 2.0, UFS 2.1, UFS 3.0, UFS 3.1, UFS 4.0, etc. ) . The MDIS interrupt routing logic 220 is also electrically coupled to memory control logic 250 over interconnect 221, which may include memory address and data signals, for instance.

[0032] Further, the memory control logic 250 is electrically coupled to the first GIC 280 over interconnect 251, to the second GIC 282 over interconnect 253, and to the third GIC 284 over interconnect 255. The memory control logic 250 is configured to receive a memory address (e.g., doorbell register address) and data (e.g., ESI data) from MDIS interrupt routing logic 220, and may write, based on the memory address, the data to a corresponding memory address of one of the first GIC 280, the second GIC 282, and the third GIC 284. For example, the memory control logic 250 may be any suitable memory controller that can perform memory translation operations (e.g., virtual to physical memory translations) to translate an address received from the  MDIS interrupt routing logic 220 to an address of one of the first GIC 280 (e.g., first doorbell register 281) , the second GIC 282 (e.g., second doorbell register 283) , and the third GIC 284 (e.g., third doorbell register 285) . In some examples, the memory control logic 250 is not used and, instead, the MDIS interrupt routing logic 220 can write the data directly to the corresponding memory address of one of the first GIC 280, the second GIC 282, and the third GIC 284. In addition, when the memory control logic 250 is not used, the UFS mass storage device 202 may be electrically coupled to the MDIS interrupt routing logic 220 over the interconnect 203.

[0033] Registers 240 include an ESI enable register 242, an ESI lower base address register 244, an ESI upper base address register 246, and, in some examples, an ESI segment mask register 263. The ESI enable register 242 may include a setting that determines whether event specific interrupts (ESIs) are enabled. For example, setting (e.g., by processor 220A) a corresponding bit of the ESI enable register 242 to a logic one may cause ESIs to be enabled, whereas setting the bit to a logic zero may cause ESIs to be disabled. The ESI lower base address register 244 defines a lower base address of where a vector value (e.g., event vector) is to be written (e.g., when ESI is enabled) . The ESI upper base address register 246 defines an upper base address of where the vector value is to be written (e.g., when ESI is enabled) . For instance, the ESI lower base address register 244  may define the lower 32 bits of an address where vector values are to be written, and the ESI upper base address register 246 may define the upper 32 bits of the address where vector values are to be written. As described further below, the MDIS interrupt routing logic 220 writes vector values to the address defined by the ESI lower base address register 244 and ESI upper base address register 246 when a vector value fails to associate with any segment, or when ESI segments are disabled. The ESI segment mask register 263 can define whether an ESI vector is enabled or disabled, as described further below.

[0034] Registers 240 can also include a set of segment registers 260 for each of one or more ESI segments. Each ESI segment may be associated with a range of vector values (e.g., ESI vectors) , and a corresponding memory address (e.g., doorbell register address of a corresponding device) . As described herein, MDIS interrupt routing logic 220 is configured to determine an ESI segment for a vector value (e.g., received for a completed event, such as a completed read or write to UFS mass storage device 202) , and write the vector value to the memory address associated  with the corresponding ESI segment. Segment registers 260 may include an ESI segment configuration register 262, an ESI segment lower base address register 264, an ESI segment upper base address register 266, an ESI segment base register 268, and, in some examples, an ESI segment offset register 269 and, in some examples, the ESI segment mask register 263.

[0035] ESI segment configuration register 262 may allow for a setting that determines whether the particular ESI segment is enabled. For example, setting (e.g., by processor 220A) a corresponding bit of the ESI segment configuration register 262 to a logic one may cause the corresponding ESI segment to be enabled, whereas setting the bit to a logic zero may cause the corresponding ESI segment to be disabled. The ESI segment configuration register 262 may also define a number of ESI vectors (i.e., a vector count) , other than the base ESI vector (described below) , that belong to the ESI segment. For instance, the ESI segment configuration register 262 may include multiple bits that define and configure the number of ESI vectors (e.g., 1, 10, 16, 32, etc. ) for the ESI segment.

[0036] The ESI segment base register 268 may define a base ESI vector (e.g., minimum ESI vector, maximum ESI vector) for the ESI segment. For example, the ESI segment base register 268 may include multiple bits that define and configure the base ESI vector. The MDIS interrupt routing logic 220 can determine the range of ESI vectors for the ESI segment based on the base ESI vector defined by the ESI segment base register 268 and the number of ESI vectors defined by the ESI segment configuration register 262, as described herein.

[0037] The ESI segment lower base address register 264 defines a lower base address of where a vector value (e.g., event vector) is to be written for the ESI segment (e.g., when the ESI segment is enabled) . The ESI segment upper base address register 266 defines an upper base address of where the vector value is to be written for the ESI segment (e.g., when the ESI segment is enabled) . For instance, the ESI segment lower base address register 264 may define the lower 32 bits of an address where vector values are to be written, and the ESI segment upper base address register 266 may define the upper 32 bits of the address where vector values are to be written. As described further below, the MDIS interrupt routing logic 220 writes vector values to an address defined by the ESI segment lower base address register  264 and ESI segment upper base address register 266 when a particular vector value is associated to a corresponding ESI segment.

[0038] In some examples, the segment registers 260 for an ESI segment may include an ESI segment offset register 269. The ESI segment offset register 269 defines an offset value (e.g., shift value) for vector values that are to be written to the memory address defined by the ESI segment lower base address register 264 and the ESI segment upper base address register 266. For example, the MDIS interrupt routing logic 220 may adjust a received vector value based on the offset value for a corresponding ESI segment, and may write the adjusted vector value to the memory address (defined by the ESI segment lower base address register 264 and the ESI segment upper base address register 266) for the ESI segment.

[0039] MDIS UFS controller 214 is configured to provide ESIs associated with UFS mass storage device 202 access to each of first GIC 280, second GIC 282, and third GIC 284. For example, MDIS interrupt routing logic 220 may generate a vector value (e.g., event index) for a completed event, such as a completed write to, or read from, the UFS mass storage device 202. The MDIS interrupt routing logic 220 may then determine whether a particular ESI segment is enabled based on the corresponding ESI segment configuration register 262. If the ESI segment is enabled, the MDIS interrupt routing logic 220 determines whether the received vector value is for the ESI segment based on a range of ESI vectors that correspond to the ESI segment. The MDIS interrupt routing logic 220 can determine the range of ESI vectors for the segment based on the base ESI vector defined by the ESI segment base register 268, and the number of ESI vectors defined by the ESI segment configuration register 262, for the ESI segment.

[0040] As an example, registers 240 may include three sets of segment registers 260, where each set of segment registers defines a corresponding ESI segment. Each ESI segment may be associated with one of the first GIC 280, second GIC 282, and third GIC 284. For instance, a first set of the segment registers 260 may define a first ESI segment that corresponds to the first GIC 280. A second set of the segment registers 260 may define a second ESI segment that corresponds to the second GIC 282. Further, a third set of the segment registers 260 may define a third ESI segment that corresponds to the third GIC 284. The ESI segment base register 268 for each of the three sets of segment registers 260 may define a corresponding  base ESI vector. For example, the ESI segment base register 268 for the first set may define the base ESI vector as 0x0000_0000. The ESI segment base register 268 for the second set may define the base ESI vector as 0x0000_0003, and the ESI segment base register 268 for the third set may define the base ESI vector as 0x0000_0006.

[0041] Further, the ESI segment configuration register 262 for each of the three sets of segment registers 260 may define a corresponding number of ESI vectors. For instance, each of the ESI segment configuration registers 262 may define the number of ESI vectors as 0x03. As such, based on the corresponding base ESI vector and number of ESI vectors, the first ESI segment is associated with ESI vectors 0x0000_0000 through 0x0000_0x0002. Moreover, the second ESI segment is associated with ESI vectors 0x0000_0003 through 0x0000_0x0005, and the third ESI segment is associated with ESI vectors 0x0000_0006 through 0x0000_0x0008.

[0042] In addition, the ESI segment lower base address register 264 and the ESI segment upper base address register 266 for each of the three sets of segment registers 260 may define the memory address of the corresponding doorbell register. For example, the ESI segment lower base address register 264 and the ESI segment upper base address register 266 for the first set may define the memory address for the first doorbell register 281. The ESI segment lower base address register 264 and the ESI segment upper base address register 266 for the second set may define the memory address for the second doorbell register 283. Likewise, the ESI segment lower base address register 264 and the ESI segment upper base address register 266 for the third set may define the memory address for the third doorbell register 285. Additionally, each of the three ESI segments may be enabled via its corresponding ESI segment configuration register 262.

[0043] Upon receiving a vector value, the MDIS interrupt routing logic 220 can determine a corresponding ESI segment for the vector value, and can write the vector value to the memory address defined for that ESI segment. More specifically, when the MDIS interrupt routing logic 220 determines an ESI segment for the received vector value, the MDIS interrupt routing logic 220 writes the vector value to a memory address defined by the ESI segment lower base address register 264 and the ESI segment upper base address register 266 for the ESI segment.

[0044] For instance, if the MDIS interrupt routing logic 220 determines the received vector value is for the first ESI segment, the MDIS interrupt routing logic 220  writes the vector value to the memory address defined by the ESI segment lower base address register 264 and the ESI segment upper base address register 266 of the first ESI segment (e.g., the memory address of the first doorbell register 281) . If, however, the MDIS interrupt routing logic 220 determines the received vector value is for the second ESI segment, the MDIS interrupt routing logic 220 writes the vector value to the memory address defined by the ESI segment lower base address register 264 and the ESI segment upper base address register 266 of the second ESI segment (e.g., the memory address of the second doorbell register 283) . Similarly, if the MDIS interrupt routing logic 220 determines the received vector value is for the third ESI segment, the MDIS interrupt routing logic 220 writes the vector value to the memory address defined by the ESI segment lower base address register 264 and the ESI segment upper base address register 266 of the third ESI segment (e.g., the memory address of the third doorbell register 285) .

[0045] In some examples, the MDIS interrupt routing logic 220 determines that the vector value is for an ESI segment when the vector value is greater than or equal to the base ESI vector, and less than or equal to a maximum ESI vector defined by the sum of the base ESI vector and the number of ESI vectors, for the ESI segment. In other examples, the MDIS interrupt routing logic 220 determines that the vector value is for an ESI segment when the vector value is less than or equal to the base ESI vector, and greater than or equal to a minimum ESI vector defined by subtracting the number of ESI vectors from the base ESI vector for the ESI segment.

[0046] In yet other examples, the MDIS interrupt routing logic 220 determines that the vector value is for an ESI segment when the vector value is greater than or equal to the base ESI vector for the ESI segment (the number of ESI vectors may not be used in this example) . In even other examples, the MDIS interrupt routing logic 220 determines that the vector value is for an ESI segment when the vector value is less than or equal to the base ESI vector for the ESI segment (the number of ESI vectors may not be used in this example) .

[0047] To write the vector value, the MDIS interrupt routing logic 220 may perform a write operation over interconnect 221 to memory control logic 250, where the data to be written includes the vector value and the memory address to be written includes lower bits as defined in the ESI segment lower base address register 264 and upper bits as defined in the ESI segment upper base address register 266. As  described herein, the memory control logic 250 may then write the data to one of the first doorbell register 281, second doorbell register 283, and third doorbell register 285, based on the received memory address.

[0048] In some examples, the MDIS interrupt routing logic 220 may adjust the vector value before writing the vector value to a corresponding memory address. The MDIS interrupt routing logic 220 may adjust the vector value based on an offset value defined by the ESI segment offset register 269 for the corresponding ESI segment. The adjustment allows the MDIS interrupt routing logic 220 to write a vector value in a range expected by the receiving device (e.g., first GIC 280, second GIC 282, third GIC 284) . For instance, in the example above, each of the three ESI segments are associated with a different value for the base ESI vector (0x0000_0000 for the first ESI segment, 0x0000_0003 for the second ESI segment, and 0x0000_0006 for the third ESI segment) . The first GIC 280, second GIC 282, and third GIC 284, however, may each expect to receive vector values from a range of 0x0000_0000 to 0x0000_0003.

[0049] To adjust the vector value, in some examples, the MDIS interrupt routing logic 220 shifts (i.e., bit-shifts) the vector value by a number of bits defined by the offset value. For instance, if the offset value is 0x02, the MDIS interrupt routing logic 220 may adjust the vector value by right-shifting the vector value by 0x02 (e.g., dividing the vector value by 4) . In some instances, the MDIS interrupt routing logic 220 may adjust the vector value by left-shifting the vector value by the offset value (e.g., multiplying the vector value by 4) . In other examples, the MDIS interrupt routing logic 220 adjusts the vector value by adding the offset value to the received vector value. In yet other examples, the MDIS interrupt routing logic 220 adjusts the vector value by subtracting the offset value from the received vector value. Once adjusted, the MDIS interrupt routing logic 220 writes the adjusted vector value to the corresponding memory address.

[0050] In some examples, the MDIS interrupt routing logic 220 may write the vector value to the memory address defined by the ESI lower base address register 244 and the ESI upper base address register 246. For example, if the MDIS interrupt routing logic 220 fails to associate the vector value to any ESI segment (e.g., any enabled ESI segment) , the MDIS interrupt routing logic 220 may write the vector value to the memory address defined by the ESI lower base address register 244 and the ESI upper base address register 246. Similarly, if all ESI segments are disabled (e.g.,  as defined within the ESI segment configuration register 262 of each  ESI segment) , the MDIS interrupt routing logic 220 may write the vector value to the memory address defined by the ESI lower base address register 244 and the ESI upper base address register 246 (e.g., a default memory address) .

[0051] In some examples, the segment registers 260 for an ESI segment may include an ESI segment mask register 263. The ESI segment mask register 263 can allow for the enabling and disabling of specific ESI vectors. For example, a bit of the ESI segment mask register 263 defines whether a corresponding ESI vector is enabled or disabled. In some instances, if the corresponding bit is set to logic 1, the ESI vector is disabled. Otherwise, if the corresponding bit is set to logic 0, the ESI vector is enabled. When disabled, the corresponding ESI vector cannot be generated. For instance, assuming an ESI segment is associated with ESI vectors 0x0000_0000 through 0x0000_0002, bit 0 of the ESI segment mask register 263 may define whether ESI vector 0x0000_0000 is enabled or disabled. Likewise, bit 1 of the ESI segment mask register 263 may define whether ESI vector 0x0000_0001 is enabled or disabled, and bit 2 of the ESI segment mask register 263 may define whether ESI vector 0x0000_0002 is enabled or disabled. The MDIS interrupt routing logic 220 (e.g., via processor 220A) may write to the ESI segment mask register 263 to enable and disable corresponding ESI vectors.

[0052] In some examples, the ESI segment configuration register 262 may further define a “collapsing” mode whereby, regardless of what ESI vector is generated, a same ESI vector is written to the corresponding doorbell register (e.g., as defined by the corresponding ESI segment lower base address register 264 and ESI segment upper base address register 266) . For instance, the ESI segment configuration register 262 may include a bit that, when set to logic 1, enables collapsing mode. The ESI segment configuration register 262 may include additional bits that define the ESI vector value to write to the corresponding doorbell register when an ESI vector for the ESI segment is generated. As an example, assume an ESI segment is associated with ESI vector values 128 to 200 (e.g., as defined by the base ESI vector defined by the ESI segment base register 268 and the number of ESI vectors defined by the ESI segment configuration register 262) . Further assume that the ESI segment configuration register 262 for the ESI segment has collapsing mode enabled, and defines 128 as the ESI vector value to write to the corresponding doorbell register. If  an ESI vector with an ESI vector value of 130 is generated for the ESI segment, rather than writing 130 to the corresponding doorbell register, the value of 128 is written. The device associated with the doorbell register where the ESI vector value is written (e.g., first GIC 280, second GIC 282, third GIC 284) can determine how to process the generated interrupt.

[0053] FIG. 3 illustrates an example of MDIS interrupt routing logic 220. In this example, MDIS interrupt routing logic 220 includes first segment determination logic 302, second segment determination logic 304, third segment determination logic 306, and ESI address determination logic 320. As illustrated, the MDIS interrupt routing logic 220 may receive a vector value 301 . The vector value 301 may be generated by the MDIS UFS controller 214 in response to a completed event (e.g., a completed write operation or read operation with UFS mass storage device 202) , and provided (e.g., transmitted) to the MDIS interrupt routing logic 220. Each of the first segment determination logic 302, second segment determination logic 304, third segment determination logic 306 receive the vector value 301, and determine whether the vector value 301 is to be associated with a corresponding ESI segment.

[0054] For instance, segment registers 260 may include a first set of segment registers 260A, a second set of segment registers 260B, and a third set of segment registers 260C. The first set of segment registers 260A may configure the first segment determination logic 302. In addition, the second set of segment registers 260B may configure the second segment determination logic 304, and the third set of segment registers 260C may configure the third segment determination logic 306. Based on the first set of segment registers 260A, the first segment determination logic 302 determines whether the vector value 301 is for a first ESI segment.

[0055] For instance, and as described herein, the first segment determination logic 302 may determine whether the first ESI segment is enabled (e.g., based on a setting in the corresponding ESI segment configuration register 262) and, if so, whether the vector value 301 is within a range of ESI vectors that correspond to the first ESI segment. The first segment determination logic 302 can determine the range of ESI vectors based on the base ESI vector defined by the ESI segment base register 268, and the number of ESI vectors defined by the ESI segment configuration register 262, of the first set of segment registers 260A. If the first ESI segment is enabled, and the vector value 301 is within the range of ESI vectors that correspond to the first ESI  segment, the first segment determination logic 302 generates a first output signal 303 at a first level (e.g., logic 1) . Otherwise, if the first ESI segment is disabled, or the vector value 301 is not within the range of ESI vectors that correspond to the first ESI segment, the first segment determination logic 302 generates the first output signal 303 at a second level (e.g., logic 0) .

[0056] Similarly, the second segment determination logic 304 may determine whether the second ESI segment is enabled and, if so, whether the vector value 301 is within a range of ESI vectors that correspond to the second ESI segment. If the second ESI segment is enabled, and the vector value 301 is within the range of ESI vectors that correspond to the second ESI segment, the second segment determination logic 304 generates a second output signal 305 at a first level. Otherwise, if the second ESI segment is disabled, or the vector value 301 is not within the range of ESI vectors that correspond to the second ESI segment, the second segment determination logic 304 generates the second output signal 305 at a second level.

[0057] Further, the third segment determination logic 304 may determine whether the third ESI segment is enabled and, if so, whether the vector value 301 is within a range of ESI vectors that correspond to the third ESI segment. If the third ESI segment is enabled, and the vector value 301 is within the range of ESI vectors that correspond to the third ESI segment, the third segment determination logic 304 generates a third output signal 307 at a first level. Otherwise, if the third ESI segment is disabled, or the vector value 301 is not within the range of ESI vectors that correspond to the third ESI segment, the third segment determination logic 306 generates the third output signal 307 at a second level.

[0058] The ESI address determination logic 320 receives each of the first output signal 303, the second output signal 305, and the third output signal 307, as well as the vector value 301. The ESI address determination logic 320 determines which ESI segment the vector value 301 is for, if any, based on the first output signal 303, the second output signal 305, and the third output signal 307. For instance, if the second output signal 305 is at a first level (e.g., logic 1) , and the first output signal 303 and the third output signal 307 are at a second level (e.g., logic 0) , the ESI address determination logic 320 determines the vector value 301 is for the second ESI segment. The ESI address determination logic 320 generates a memory address based on the  ESI segment lower base address register 264 and ESI segment upper base address register 266 of the second set of segment registers 260B. Further, the ESI address determination logic 320 provides the vector value 301 (or, in some examples, an adjusted vector value, as described herein) over data lines 321 of, for instance, interconnect 221, and the generated memory address over memory lines 323 of, for instance, interconnect 221. Similarly, the ESI address determination logic 320 may provide the vector value 301 (or, in some examples, an adjusted vector value) to a memory address generated for the first ESI segment or final ESI segment based on the first output signal 303 and the third output signal 307, respectively.

[0059] If none of the first output signal 303, the second output signal 305, and the third output signal 307 indicate a match to a corresponding ESI segment, the ESI address determination logic 320 is configured to generate the memory address based on the ESI lower base address register 244 and the ESI upper base address register 246. Similarly, if all ESI segments are disabled (e.g., as configured within each ESI segment configuration register 262) , the ESI address determination logic 320 is configured to generate the memory address based on the ESI lower base address register 244 and the ESI upper base address register 246. The ESI address determination logic 320 then provides the vector value 301 (or, in some examples, an adjusted vector value, as described herein) over data lines 321 of, for instance, interconnect 221, and the generated memory address over memory lines 323 of, for instance, interconnect 221.

[0060] FIG. 4 illustrates a state machine 400 that that may be implemented by an MDIS host controller, such as MDIS host controller 104 or MDIS UFS controller 214.

[0061] The state machine 400 begins at state 402 where an ESI vector is generated. The ESI vector may be generated in response to an event, such as the completion of a write to, or read from, a mass storage device (e.g., non-volatile mass storage device 102) . Upon generation of the ESI vector, the state machine 400 transitions to state 404, where a first counter, seg_sel, and a second counter, seg_id, are initialized. The first counter, seg_sel, characterizes a final ESI segment to associate the ESI vector with, while the second counter, seg_id, characterizes a current ESI segment that is being considered. In this example, each of the counters are initialized to 0.

[0062] From state 404, the state machine 400 transitions to state 406, where the first counter, seg_sel, is incremented (e.g., from 0 to 1) . The state machine 400 then transitions to state 408, where a determination is made as to whether the ESI vector generated at state 402 corresponds (e.g., belongs to) the current ESI segment that is being considered (e.g., as identified by the second counter, seg_id) . For instance, the second counter, seg_id, identifies a corresponding set of segment registers (e.g., a set of segment registers 260) . A value of 1, for example, indicates a first set of segment registers (e.g., segment registers 260A) . Similarly, a value of 2 indicates a second set of segment registers (e.g., segment registers 260B) , and a value of 3 indicates a third set of segment registers (e.g., segment registers 260C) . In this example, a determination is made as to whether the corresponding ESI segment is enabled (ESI. SEsid == 1; e.g., as defined by the corresponding ESI segment configuration register 262) , as to whether the ESI vector generated at state 402 is greater than or equal to a base ESI vector (ESI Vector >= ESI. BAsid; e.g., as defined by the corresponding ESI segment base register 268) , and as to whether the ESI vector generated at state 402 is less than or equal to a minimum ESI vector, where the minimum ESI vector is the base ESI vector summed with a vector count (ESI Vector <= (ESI. BAsid + ESI. VCsid) ; e.g., where the vector count is defined by the corresponding ESI segment configuration register 262) .

[0063] If the corresponding ESI segment is enabled, the ESI vector generated at state 402 is greater than or equal to a base ESI vector, and the ESI vector generated at state 402 is less than or equal to a minimum ESI vector, the state machine 400 transitions to state 412, where the first counter, seg_sel, is set to the second counter, seg_id, indicating that the ESI vector corresponds (e.g., belongs to) the current ESI segment that is being considered. The state machine 400 then transitions to state 414.

[0064] If at state 408, however, either the corresponding ESI segment is not enabled, the ESI vector is not greater than or equal to a base ESI vector, or the ESI vector is not less than or equal to the minimum ESI vector, the state machine transitions to state 410. At state 410, the state machine determines whether the current ESI segment that is being considered (e.g., as indicated by the second counter, seg_id) is the last ESI segment to consider. If there are additional ESI segments to consider, the state machine transitions back to state 406, where the second counter, seg_id, is incremented to have the next ESI segment considered. Otherwise, if there  are no additional ESI segments to consider, the state machine 400 transitions to state 414.

[0065] At state 414, a determination is made as to whether the second counter, seg_id, is greater than its initialized value. For instance, because in this example the second counter, seg_id, was initialized to zero, at state 414 a determination is made as to whether the second counter, seg_id, is greater than zero. If the second counter, seg_id, is greater than its initialized value, this indicates that the ESI Vector was mapped to an ESI segment and, more particularly, to the ESI segment identified by the second counter, seg_id. Otherwise, if the second counter, seg_id, is not greater than its initialized value, this indicates that the ESI Vector was not mapped to an ESI segment.

[0066] If the ESI Vector was mapped to an ESI segment (i.e., the second counter, seg_id, is greater than its initialized value) , the state machine 400 transitions from state 414 to state 416. At state 416, the ESI Vector may be adjusted based on a corresponding offset value (ESI Vector = (ESI Vector >> ESI. OVssel; e.g., as defined by the corresponding ESI segment offset register 269) . In this example, the ESI Vector is right-shifted by a corresponding offset value (i.e., the value defined by ESI. OVssel) . The state machine 400 then transitions to state 418, where the ESI Vector is written to a memory address corresponding to the current ESI segment (ESI. DBAssel; e.g., as defined by the corresponding ESI segment lower base address register 264 and ESI segment upper base address register 266) . The memory address may be, for example, a doorbell register, such as the second doorbell register 283 of the second GIC 282.

[0067] If, at state 414, the ESI Vector was not mapped to an ESI segment, the state machine transitions to state 418. Because the ESI Vector was not mapped to an ESI segment, the first counter, seg_sel, remains initialized (in this example, to zero) . The initialized value of the first counter indicates a default memory address. As such, the ESI Vector is written to the default memory address. The default memory address may be defined by an ESI lower base address register and an ESI upper base address register, such as the ESI lower base address register 244 and the ESI upper base address register 246. The memory address may be, for example, a doorbell register, such as the first doorbell register 281 of the first GIC 280.

[0068] FIGS. 5A, 5B, 5C, 5D, and 5E illustrate exemplary segment registers (e.g., segment registers 260) . FIG. 5A illustrates a segment configuration register 500.  In this example, bit 30 controls whether a corresponding segment is enabled, and bits 10 to 30 define a vector count (e.g., a number of vectors, besides a base vector, for the segment) . In addition, bit 9 can enable “collapse mode, ” and bits 0 to 8 define a collapse value, which represents the ESI vector value to write to a corresponding doorbell register when an ESI vector is generated and collapse mode is enabled for an ESI segment, as described herein. Segment configuration register 500 may be an example of ESI segment configuration register 262.

[0069] FIG. 5B illustrates a segment base register 520 that defines a segment base vector value (e.g., a base ESI vector) for a corresponding segment. Segment base register 520 may be an example of ESI segment base register 268. In this example, bits 0 to 31 define the segment base vector value.

[0070] FIG. 5C illustrates a segment offset register 540 that defines a vector offset value. As described herein, the vector offset value may be used to adjust a vector value. For instance, the segment offset register 540 may be an example of ESI segment offset register 269. In this example, bits 0 to 31 define the vector offset value.

[0071] FIG. 5D illustrates a segment lower base address register 560 that defines a segment lower base address, which may be a lower portion of a memory address that is to be written when a vector is received for the corresponding segment. For instance, the segment lower base address register 560 may be an example of ESI segment lower base address register 264. In this example, bits 0 to 31 define the lower portion of the memory address.

[0072] FIG. 5E illustrates a segment upper base address register 580 that defines a segment upper base address, which may be an upper portion of the memory address that is to be written when a vector is received for the corresponding segment. For instance, the segment upper base address register 580 may be an example of ESI segment upper base address register 266. In this example, bits 0 to 31 define the upper portion of the memory address.

[0073] FIG. 6 is a flowchart of an exemplary process 600 for multiple device interrupt support (MDIS) within die architectures. Exemplary process 600 may be carried out by an MDIS host controller, such as MDIS host controller 104 or MDIS UFS controller 214.

[0074] Beginning at block 602, a vector value is generated based on an event. For example, MDIS host controller 104 may generate a vector value indicating that a memory operation of the non-volatile mass storage device 102 has completed.

[0075] At block 604, the vector value is determined to be within a range of vector values associated with a base address register. For instance, the MDIS host controller 104 may determine whether the vector value is within a range of vector values based on a base vector value (defined by a corresponding segment base register) , and a vector value count (defined by a corresponding segment control register) . The MDIS host controller 104 may determine that the vector value is within the range of vector values when the vector value is greater than or equal to the base vector value, and less than or equal to a maximum vector value, where the maximum vector value is the sum of the base vector value and the vector value count.

[0076] Proceeding to block 606, a base address is read from the base address register. For example, the MDIS host controller 104 may read a lower portion of the base address from a corresponding lower base address register, and the upper portion of the base address from a corresponding upper base address register. Further, at block 608, the vector value is written to the base address. For example, the base address may be a doorbell address of a corresponding device (e.g., first GIC 108, second GIC 106, third GIC 110) . The writing of the vector value to the doorbell address may trigger an interrupt on that system device, where the system device then services the interrupt.

[0077] FIG. 7 is a flowchart of an exemplary process 700 for MDIS within die architectures. Exemplary process 700 may be carried out by an MDIS host controller, such as MDIS host controller 104 or MDIS UFS controller 214.

[0078] Beginning at block 702, the MDIS host controller generates a vector value based on an event. For example, MDIS UFS controller 214 may generate a vector value based on a completed memory operation with UFS mass storage device 202. At block 704, a determination is made as to whether a current segment is enabled. For example, MDIS UFS controller 214 may determine if a segment is enabled by reading one or more corresponding bits of the ESI enable register 242. If the segment is enabled, the process proceeds to block 706.

[0079] At block 706, a vector count is read from a first register that is associated with the segment (i.e., the enabled segment) . For instance, the MDIS UFS controller  214 may read a vector count from the ESI segment configuration register 262 corresponding to the ESI segment. The process then proceeds to block 708, where a minimum vector value is read from a second register that is associated with the segment. For example, the MDIS UFS controller 214 may read a base vector value (e.g., minimum vector value) from the ESI segment base register 268 corresponding to the ESI segment. Proceeding to block 710, a maximum vector value for the segment is determined based on the minimum vector value and the vector count. For instance, the MDIS UFS controller 214 may determine the maximum vector value based on adding the base vector value with the vector count.

[0080] From block 710 the process proceeds to block 712 where a determination is made as to whether the vector value is within a corresponding range. The range is defined by the minimum vector value and the maximum vector value. For example, the MDIS host controller may determine if the vector value is greater than or equal to the minimum vector value, and less than or equal to the maximum vector value. If the vector value is within the range, the process proceeds to block 714.

[0081] Further, at block 714, a segment base address is read from a third register that is associated with the segment. The third register may be, for example, the ESI segment lower base address register 264 (e.g., in an example where the ESI segment lower base address register 264 stores the entire memory address) . In some examples, the segment base address is determined based on reading a lower portion of the segment base address from the third register, and an upper portion of the segment base address from a fourth register (e.g., the ESI segment upper base address register 266) .

[0082] From block 714, the process proceeds to block 716 where the vector value is written to the segment base address. For example, as described herein, the MDIS UFS controller 214 may write the vector value to one of the first doorbell register 281 (for the first GIC 280) , the second doorbell register 283 (for the second GIC 282) , and the third doorbell register 285 (for the third GIC 284) . The writing of the vector value may cause an interrupt on a corresponding device. From block 716, in some examples, the process may proceed to block 720. In other examples, the process may end.

[0083] Back at block 712, if the vector value is not within the range, the process proceeds to block 718 to determine if there are any additional segments. Similarly,  back at block 704, if the segment is not enabled, the process also proceeds to block 718 to determine if there are any additional segments.

[0084] If, at block 718, there are any additional segments, the process proceeds back to block 704 to determine if an additional segment is enabled. If, at block 718, there are no additional segments, in some examples the process may proceed to block 720 or, in other examples, the process may end.

[0085] At block 720, a determination is made as to whether a vector value was written to any segment base address. If the MDIS host controller wrote a vector value to a segment base address (i.e., the vector value was written to the segment base address at block 716) , the method ends. Otherwise, if the vector value was not written to a segment base address, the process proceeds to block 722. At block 722, the vector value is written to an interrupt base address. For example, and as described herein, the MDIS UFS controller 214 may write the vector value to a memory address (e.g., a default memory address) defined by the ESI lower base address register 244 and the ESI upper base address register 246.

[0086] Implementation examples are further described in the following numbered clauses:

[0087] 1. A die comprising:

[0088] at least one register; and

[0089] interrupt routing logic electrically coupled to the at least one register, the interrupt routing logic configured to:

[0090] receive a vector value based on an event;

[0091] determine the vector value is within a range of vector values associated with the at least one register;

[0092] read a base address from the at least one register; and

[0093] write the vector value to the base address.

[0094] 2. The die of clause 1, wherein the range of vector values comprises a minimum vector value and a maximum vector value, and wherein the interrupt routing logic is configured to:

[0095] read the minimum vector value and a vector count from the at least one register;

[0096] determine the maximum vector value based on the minimum vector value and the vector count; and

[0097] determine the vector value is greater than or equal to the minimum vector value and is less than or equal to the maximum vector value.

[0098] 3. The die of clause 1, wherein the interrupt routing logic is configured to read an enable value from the at least one register, and determine the range of vector values are enabled based on the enable value.

[0099] 4. The die of clause 1 wherein the interrupt routing logic is electrically coupled to a device, and wherein the base address is a doorbell address of the device.

[0100] 5. The die of clause 4 wherein the device is a generic interrupt controller.

[0101] 6. The die of clause 1, wherein the interrupt routing logic is configured to:

[0102] read a first base address portion from the at least one register;

[0103] read a second base address portion from the at least one register; and

[0104] generate the base address based on the first base address portion and the second base address portion.

[0105] 7. The die of clause 1, wherein the at least one register comprises a first set of segment registers and a second set of segment registers, wherein the range of vector values is a first range of vector values associated with the first set of segment registers, and wherein the interrupt routing logic is configured to determine the vector value is outside of a second range of vector values associated with the second set of segment registers.

[0106] 8. The die of clause 7, wherein the second range of vector values comprises a minimum vector value and a maximum vector value, and wherein, to determine the vector value is outside of the second range of vector values, the interrupt routing logic is configured to:

[0107] read the minimum vector value and a vector count from the second set of segment registers;

[0108] determine the maximum vector value based on the minimum vector value and the vector count; and

[0109] determine the vector value is less than the minimum vector value or greater than the maximum vector value.

[0110] 9. The die of clause 7, wherein the interrupt routing logic is electrically coupled to a first device and to a second device, wherein the base address is associated with the first set of segment registers and is a doorbell address of the first device, and wherein the second set of segment registers define a doorbell address of the second device.

[0111] 10. The die of clause 7, wherein the interrupt routing logic is configured to:

[0112] receive an additional vector value based on an additional event;

[0113] determine the additional vector value is outside of the first range of vector values;

[0114] determine the additional vector value is outside of the second range of vector values; and

[0115] based on the determinations, write the additional vector value to a default base address.

[0116] 11. The die of clause 10, wherein the interrupt routing logic is configured to read the default base address from at least one interrupt base address register.

[0117] 12. The die of clause 1, wherein the interrupt routing logic is configured to:

[0118] read an offset value from the at least one register; and

[0119] adjust the vector value based on the offset value, wherein the vector value written to the base address is the adjusted vector value.

[0120] 13. A method by a host controller, the method comprising:

[0121] receiving a vector value based on an event;

[0122] determining the vector value is within a range of vector values associated with at least one register;

[0123] reading a base address from the at least one register; and

[0124] writing the vector value to the base address.

[0125] 14. The method of clause 13, wherein the range of vector values comprises a minimum vector value and a maximum vector value, the method comprising:

[0126] reading the minimum vector value and a vector count from the at least one register;

[0127] determining the maximum vector value based on the minimum vector value and the vector count; and

[0128] determining the vector value is greater than or equal to the minimum vector value and is less than or equal to the maximum vector value.

[0129] 15. The method of clause 13, comprising:

[0130] reading an enable value from the at least one register; and

[0131] determining the range of vector values are enabled based on the enable value.

[0132] 16. The method of clause 13, comprising:

[0133] reading a first base address portion from the at least one register;

[0134] reading a second base address portion from the at least one register; and

[0135] generating the base address based on the first base address portion and the second base address portion.

[0136] 17. The method of clause 13, wherein the at least one register comprises a first set of segment registers and a second set of segment registers, wherein the range of vector values is a first range of vector values associated with the first set of segment registers, the method comprising determining the vector value is outside of a second range of vector values associated with the second set of segment registers.

[0137] 18. The method of clause 17, wherein the second range of vector values comprises a minimum vector value and a maximum vector value, and wherein, to determine the vector value is outside of the second range of vector values, the method comprising:

[0138] reading the minimum vector value and a vector count from the second set of segment registers;

[0139] determining the maximum vector value based on the minimum vector value and the vector count; and

[0140] determining the vector value is less than the minimum vector value or greater than the maximum vector value.

[0141] 19. The method of clause 17, comprising:

[0142] receiving an additional vector value based on an additional event;

[0143] determining the additional vector value is outside of the first range of vector values;

[0144] determining the additional vector value is outside of the second range of vector values; and

[0145] based on the determinations, writing the additional vector value to a default base address.

[0146] 20. An apparatus comprising:

[0147] at least one register; and

[0148] a processor communicatively coupled to the at least one register, wherein the processor is configured to:

[0149] receive a vector value based on an event;

[0150] determine the vector value is within a range of vector values associated with the at least one register;

[0151] read a base address from the at least one register; and

[0152] write the vector value to the base address.

[0153] Although the methods described above are with reference to the illustrated flowcharts, many other ways of performing the acts associated with the methods may be used. For example, the order of some operations may be changed,  and some embodiments may omit one or more of the operations described and / or include additional operations.

[0154] In addition, the methods and system described herein may be at least partially embodied in the form of computer-implemented processes and apparatus for practicing those processes. The disclosed methods may also be at least partially embodied in the form of tangible, non-transitory machine-readable storage media encoded with computer program code that, when executed, causes a machine to fabricate at least one integrated circuit that performs one or more of the operations described herein. For example, the methods may be embodied in hardware, in executable instructions executed by a processor (e.g., software) , or a combination of the two. The media may include, for example, RAMs, ROMs, CD-ROMs, DVD-ROMs, BD-ROMs, hard disk drives, flash memories, or any other non-transitory machine-readable storage medium. When the computer program code is loaded into and executed by a computer, the computer becomes an apparatus for causing a machine to fabricate the integrated circuit. The methods may also be at least partially embodied in the form of a computer into which computer program code is loaded or executed, such that, the computer becomes a special purpose computer for causing a machine to fabricate the integrated circuit. For instance, when implemented on a general-purpose processor, computer program code segments can configure the processor to create specific logic circuits. The methods may alternatively be at least partially embodied in application specific integrated circuits or any other integrated circuits for performing the methods.

[0155] In addition, terms such as “circuit, ” “circuitry, ” “logic, ” and the like can include, alone or in combination, analog circuitry, digital circuitry, hardwired circuitry, programmable circuitry, processing circuitry, hardware logic circuitry, state machine circuitry, and any other suitable type of physical hardware components. Further, the embodiments described herein may be employed within various types of devices such as networking devices, telecommunication devices, smartphone devices, gaming devices, enterprise devices, storage devices (e.g., cloud storage devices) , and computing devices (e.g., cloud computing devices) , among other types of devices.

[0156] The subject matter has been described in terms of exemplary embodiments. Because they are only examples, the claimed inventions are not limited to these embodiments. Changes and modifications may be made without departing  the spirit of the claimed subject matter. It is intended that the claims cover such changes and modifications.

Claims

1.A die comprising:at least one register; andinterrupt routing logic electrically coupled to the at least one register, the interrupt routing logic configured to:receive a vector value based on an event;determine the vector value is within a range of vector values associated with the at least one register;read a base address from the at least one register; andwrite the vector value to the base address.2.The die of claim 1, wherein the range of vector values comprises a minimum vector value and a maximum vector value, and wherein the interrupt routing logic is configured to:read the minimum vector value and a vector count from the at least one register;determine the maximum vector value based on the minimum vector value and the vector count; anddetermine the vector value is greater than or equal to the minimum vector value and is less than or equal to the maximum vector value.3.The die of claim 1, wherein the interrupt routing logic is configured to read an enable value from the at least one register, and determine the range of vector values are enabled based on the enable value.4.The die of claim 1 wherein the interrupt routing logic is electrically coupled to a device, and wherein the base address is a doorbell address of the device.5.The die of claim 4 wherein the device is a generic interrupt controller.6.The die of claim 1, wherein the interrupt routing logic is configured to:read a first base address portion from the at least one register;read a second base address portion from the at least one register; andgenerate the base address based on the first base address portion and the second base address portion.7.The die of claim 1, wherein the at least one register comprises a first set of segment registers and a second set of segment registers, wherein the range of vector values is a first range of vector values associated with the first set of segment registers, and wherein the interrupt routing logic is configured to determine the vector value is outside of a second range of vector values associated with the second set of segment registers.8.The die of claim 7, wherein the second range of vector values comprises a minimum vector value and a maximum vector value, and wherein, to determine the vector value is outside of the second range of vector values, the interrupt routing logic is configured to:read the minimum vector value and a vector count from the second set of segment registers;determine the maximum vector value based on the minimum vector value and the vector count; anddetermine the vector value is less than the minimum vector value or greater than the maximum vector value.9.The die of claim 7, wherein the interrupt routing logic is electrically coupled to a first device and to a second device, wherein the base address is associated with the first set of segment registers and is a doorbell address of the first device, and wherein the second set of segment registers define a doorbell address of the second device.10.The die of claim 7, wherein the interrupt routing logic is configured to:receive an additional vector value based on an additional event;determine the additional vector value is outside of the first range of vector values;determine the additional vector value is outside of the second range of vector values; andbased on the determinations, write the additional vector value to a default base address.11.The die of claim 10, wherein the interrupt routing logic is configured to read the default base address from at least one interrupt base address register.12.The die of claim 1, wherein the interrupt routing logic is configured to:read an offset value from the at least one register; andadjust the vector value based on the offset value, wherein the vector value written to the base address is the adjusted vector value.13.A method by a host controller, the method comprising:receiving a vector value based on an event;determining the vector value is within a range of vector values associated with at least one register;reading a base address from the at least one register; andwriting the vector value to the base address.14.The method of claim 13, wherein the range of vector values comprises a minimum vector value and a maximum vector value, the method comprising:reading the minimum vector value and a vector count from the at least one register;determining the maximum vector value based on the minimum vector value and the vector count; anddetermining the vector value is greater than or equal to the minimum vector value and is less than or equal to the maximum vector value.15.The method of claim 13, comprising:reading an enable value from the at least one register; anddetermining the range of vector values are enabled based on the enable value.16.The method of claim 13, comprising:reading a first base address portion from the at least one register;reading a second base address portion from the at least one register; andgenerating the base address based on the first base address portion and the second base address portion.17.The method of claim 13, wherein the at least one register comprises a first set of segment registers and a second set of segment registers, wherein the range of vector values is a first range of vector values associated with the first set of segment registers, the method comprising determining the vector value is outside of a second range of vector values associated with the second set of segment registers.18.The method of claim 17, wherein the second range of vector values comprises a minimum vector value and a maximum vector value, and wherein, to determine the vector value is outside of the second range of vector values, the method comprising:reading the minimum vector value and a vector count from the second set of segment registers;determining the maximum vector value based on the minimum vector value and the vector count; anddetermining the vector value is less than the minimum vector value or greater than the maximum vector value.19.The method of claim 17, comprising:receiving an additional vector value based on an additional event;determining the additional vector value is outside of the first range of vector values;determining the additional vector value is outside of the second range of vector values; andbased on the determinations, writing the additional vector value to a default base address.20.An apparatus comprising:at least one register; anda processor communicatively coupled to the at least one register, wherein the processor is configured to:receive a vector value based on an event;determine the vector value is within a range of vector values associated with the at least one register;read a base address from the at least one register; andwrite the vector value to the base address.

Citation Information

Patent Citations

  • Interrupt processing method of multi-PCIE (Peripheral Component Interface Express) equipment system

    CN101872330A

  • Method and memory module for configuring vendor-specific register

    CN111857562A

  • MSIX interrupt processing method and device, equipment and medium

    CN117971434A

  • Interrupt controller

    US20160328339A1

  • Interrupt routing mechanism for routing interrupts from peripheral bus to interrupt controller

    US6466998B1